From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id E43DB4F15E for ; Sat, 17 May 2025 03:16:37 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 66C6268D139; Sat, 17 May 2025 06:16:34 +0300 (EEST) Received: from out162-62-57-137.mail.qq.com (out162-62-57-137.mail.qq.com [162.62.57.137]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 383A068CA66 for ; Sat, 17 May 2025 06:16:25 +0300 (EEST) Received: from localhost.localdomain ([111.30.83.130]) by newxmesmtplogicsvrszb16-1.qq.com (NewEsmtp) with SMTP id 40C0F42F; Sat, 17 May 2025 11:16:12 +0800 X-QQ-mid: xmsmtpt1747451772tu9yfrl7l Message-ID: X-QQ-XMAILINFO: MB5+LsFw85No8uOok1nBayiDIYuYhS65ZhNpxfIZOS0AGOGJRm1ZhaSt8CnHPs lEIa1B00AUcVkcAu/z5UazfiQR5rkb2OeeDZLUPuZQ0Pfa6i8uMHLQDxr93LC0OAp30STxTv3su2 gEzpAj0UcSv0TKyaikLeqsMm1xKNQuxwHQe62TLvFhgrJiYqqMEavzNGkoiFwqfJAT5PH3IqbCi5 XDLUv0G9CgwHrNK+wzjbdi3s12zo3MT8QflXY8mkHhiDAnvnyUbQPy6w8ePL2zQ1yHWyumYhG3JN 5TLky2tXfANjOXZ/DJNti1ycQk1fMb0nmENS/mwPyZLUWDHI3qP6j7O9EoKpPmLQJy9jEDP3uDs0 qUbh6XYw2mqisFNOBRtaJz06IbM5WSkzRAwQogfLfCpLupYCUb6MNgePMJkufuJsmE8910EsMIvP YDTcJjJA+qZHLzG5EZpWXw4RoMtxh7V7sJE5sNQA3/Y0pEbLceOFXY1ImvvHPewJGyH68XU1syzB LT62bmH41niqVsCoRIEtV3I+f2XgjWNENC2JrcshI8TRiwsif8yoJasBpQIWhV3enOlAEWQGwDOQ szHsyDDr/FdOlryiXBjaE2fENjQ1k4SnUm+4rrliULPFYlxg12ylVPEzlDqFEn84qJaLZwOTPgH8 MOxQ2g0lEVml8f1jkc7TbzxUDqoxlZ2EVZpJGSEbGBPEi20iOO9W3WfnVK6zGnNiDKkrrto6bOaQ 62Ff37b6UNq5kANG7x3UXdHhkZ+Z/LgxYsJmurv+kD6OE1S72h6GfI5W/4n9GyMBfAFiWXC590a5 src9ehja1Bo1Gxh2W3AWjgCpciQviF082LSgVspG9zr/Z4YfzIdw+mpDq4hw8gEblrYCTbR643HH s5ZLZQkm+o1OTVkuW5az53S2Fk1uj5iNYv6cR4id2YvFZGonm3KMdcAJAsXyxDCo7/0Qh80E8p8h mbeYs+HWtkBngir3AFUr2cBwdLqFhVwiCXNPxiEwqbi9Yx4OoeHg== X-QQ-XMRINFO: OD9hHCdaPRBwq3WW+NvGbIU= To: ffmpeg-devel@ffmpeg.org Date: Sat, 17 May 2025 11:16:08 +0800 X-OQ-MSGID: <20250517031608.10643-1-jacklau1222@qq.com> X-Mailer: git-send-email 2.49.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2] avformat/whip: Add WHIP muxer support for subsecond latency streaming 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: , From: Jack Lau via ffmpeg-devel Reply-To: FFmpeg development discussions and patches Cc: Jack Lau , Jun Zhao , yangrtc , Steven Liu , cloudwebrtc , winlin , Haibo Chen <495810242@qq.com> 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: MC4gV0hJUCBWZXJzaW9uIDIuCjEuIFRoZSBXSElQIG11eGVyIGhhcyBiZWVuIHJlbmFtZWQgYW5k IHJlZmluZWQsIHdpdGggaW1wcm92ZWQgbG9nZ2luZyBjb250ZXh0IGFuZCBlcnJvciBtZXNzYWdl cyBmb3IgU1NMLCBEVExTLCBhbmQgUlRDLgoyLiBNYWdpYyBudW1iZXJzIGhhdmUgYmVlbiByZXBs YWNlZCB3aXRoIG1hY3JvcyBhbmQgZXh0cmFjdGVkIHRvIGZ1bmN0aW9ucywgYW5kIGxvZyBsZXZl bHMgaGF2ZSBiZWVuIGFsdGVyZWQgZm9yIGJldHRlciBjbGFyaXR5LgozLiBEVExTIGN1cnZlIGxp c3QgaGFzIGJlZW4gdXBkYXRlZCwgYW5kIFNSVFAgcHJvZmlsZSBuYW1lcyBoYXZlIGJlZW4gcmVm aW5lZCBmb3IgRkZtcGVnIGFuZCBPcGVuU1NMLgo0LiBJQ0UgU1RVTiBtYWdpYyBudW1iZXIgaGFz IGJlZW4gcmVmaW5lZCwgYW5kIFJUUCBwYXlsb2FkIHR5cGVzIGhhdmUgYmVlbiB1cGRhdGVkIGJh c2VkIG9uIENocm9tZSdzIGRlZmluaXRpb24uCjUuIEZpeGVkIGZyYW1lIHNpemUgaGFzIGJlZW4g cmVmaW5lZCB0byBydGMtPmF1ZGlvX3Bhci0+ZnJhbWVfc2l6ZSwgYW5kIGgyNjRfbXA0dG9hbm5l eGIgaXMgbm93IHVzZWQgdG8gY29udmVydCBNUDQvSVNPTSB0byBhbm5leGIuCjYuIE9QVVMgdGlt ZXN0YW1wIGlzc3VlIGhhcyBiZWVuIGFkZHJlc3NlZCwgYW5kIG1hcmtlciBzZXR0aW5nIGhhcyBi ZWVuIGNvcnJlY3RlZCBhZnRlciB1dGlsaXppbmcgQlNGLgo3LiBEVExTIGhhbmRzaGFrZSBhbmQg SUNFIGhhbmRsaW5nIGhhdmUgYmVlbiBvcHRpbWl6ZWQgZm9yIGltcHJvdmVkIHBlcmZvcm1hbmNl LCB3aXRoIGEgc2luZ2xlIGhhbmRzaGFrZSB0aW1lb3V0IGFuZCBzZXJ2ZXIgcm9sZSB0byBwcmV2 ZW50IEFSUS4KOC4gQ29uc29saWRhdGVkIElDRSByZXF1ZXN0L3Jlc3BvbnNlIGhhbmRsaW5nIGFu ZCBEVExTIGhhbmRzaGFrZSBpbnRvIGEgc2luZ2xlIGZ1bmN0aW9uLCBhbmQgZml4ZWQgT3BlblNT TCBidWlsZCBlcnJvcnMgdG8gd29yayB3aXRoIFBpb24uCjkuIE1lcmdlIFRMUyAmIERUTFMgaW1w bGVtZW50YXRpb24sIHNoYXJlZCBCSU8gY2FsbGJhY2tzLCByZWFkLCB3cml0ZSwgcHJpbnRfc3Ns X2Vycm9yLCBvcGVuc3NsX2luaXRfY2Ffa2V5X2NlcnQsIGluaXRfYmlvX21ldGhvZCBmdW5jdGlv biBhbmQgc2hhcmVkIHNhbWUgZGF0YSBzdHJ1Y3R1cmUKCkNvLWF1dGhvcmVkLWJ5OiB3aW5saW4g PHdpbmxpbnZpcEBnbWFpbC5jb20+CkNvLWF1dGhvcmVkLWJ5OiB5YW5ncnRjIDx5YW5ncnRjQGFs aXl1bi5jb20+CkNvLWF1dGhvcmVkLWJ5OiBjbG91ZHdlYnJ0YyA8ZHVhbndlaXdlaTE5ODJAZ21h aWwuY29tPgpDby1hdXRob3JlZC1ieTogSGFpYm8gQ2hlbiA8NDk1ODEwMjQyQHFxLmNvbT4KQ28t YXV0aG9yZWQtYnk6IFN0ZXZlbiBMaXUgPGxxQGNoaW5hZmZtcGVnLm9yZz4KQ28tYXV0aG9yZWQt Ynk6IEp1biBaaGFvIDxiYXJyeWp6aGFvQHRlbmNlbnQuY29tPgpTaWduZWQtb2ZmLWJ5OiBKYWNr IExhdSA8amFja2xhdTEyMjJAcXEuY29tPgotLS0KIGNvbmZpZ3VyZSAgICAgICAgICAgICAgICAg fCAgIDEwICsKIGRvYy9tdXhlcnMudGV4aSAgICAgICAgICAgfCAgIDQ3ICsKIGxpYmF2Zm9ybWF0 L01ha2VmaWxlICAgICAgfCAgICAxICsKIGxpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYyAgfCAgICAx ICsKIGxpYmF2Zm9ybWF0L2F2aW8uYyAgICAgICAgfCAgICA1ICstCiBsaWJhdmZvcm1hdC9odHRw LmMgICAgICAgIHwgICAgNiArCiBsaWJhdmZvcm1hdC9odHRwLmggICAgICAgIHwgICAgMiArCiBs aWJhdmZvcm1hdC9wcm90b2NvbHMuYyAgIHwgICAgMSArCiBsaWJhdmZvcm1hdC9zcnRwLmggICAg ICAgIHwgICAgNCArLQogbGliYXZmb3JtYXQvdGxzLmMgICAgICAgICB8ICAgNzAgKy0KIGxpYmF2 Zm9ybWF0L3Rscy5oICAgICAgICAgfCAgIDU4ICstCiBsaWJhdmZvcm1hdC90bHNfb3BlbnNzbC5j IHwgIDg1NyArKysrKysrKysrKysrKysrLQogbGliYXZmb3JtYXQvd2hpcC5jICAgICAgICB8IDE5 MTcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMTMgZmlsZXMgY2hhbmdl ZCwgMjkyMyBpbnNlcnRpb25zKCspLCA1NiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBsaWJhdmZvcm1hdC93aGlwLmMKCmRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUK aW5kZXggMDYwOWRhYzRhYi4uODg3MTRhYzIxZCAxMDA3NTUKLS0tIGEvY29uZmlndXJlCisrKyBi L2NvbmZpZ3VyZQpAQCAtMzc0Nyw2ICszNzQ3LDggQEAgd2F2X2RlbXV4ZXJfc2VsZWN0PSJyaWZm ZGVjIgogd2F2X211eGVyX3NlbGVjdD0icmlmZmVuYyIKIHdlYm1fY2h1bmtfbXV4ZXJfc2VsZWN0 PSJ3ZWJtX211eGVyIgogd2VibV9kYXNoX21hbmlmZXN0X2RlbXV4ZXJfc2VsZWN0PSJtYXRyb3Nr YV9kZW11eGVyIgorIyBUT0RPOiBTdXBwb3J0IGxpYnRscywgbWJlZHRscywgYW5kIGdudXRscy4K K3doaXBfbXV4ZXJfZGVwc19hbnk9Im9wZW5zc2wiCiB3dHZfZGVtdXhlcl9zZWxlY3Q9Im1wZWd0 c19kZW11eGVyIHJpZmZkZWMiCiB3dHZfbXV4ZXJfc2VsZWN0PSJtcGVndHNfbXV4ZXIgcmlmZmVu YyIKIHhtdl9kZW11eGVyX3NlbGVjdD0icmlmZmRlYyIKQEAgLTcxOTIsNiArNzE5NCwxNCBAQCBl bmFibGVkIHJrbXBwICAgICAgICAgICAgICYmIHsgcmVxdWlyZV9wa2dfY29uZmlnIHJrbXBwIHJv Y2tjaGlwX21wcCAgcm9ja2NoaXAvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiBl bmFibGVkIHZhcG91cnN5bnRoICAgICAgICYmIHJlcXVpcmVfaGVhZGVycyAidmFwb3Vyc3ludGgv VlNTY3JpcHQ0LmggdmFwb3Vyc3ludGgvVmFwb3VyU3ludGg0LmgiCiAKK2VuYWJsZWQgb3BlbnNz bCAgICAgICAgICAgICYmIHsKKyAgICBlbmFibGVkIHdoaXBfbXV4ZXIgJiYgeworICAgICAgICAk cGtnX2NvbmZpZyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAib3BlbnNzbCA+PSAxLjAuMWsiIHx8 CisgICAgICAgIHJlcXVpcmVfcGtnX2NvbmZpZyBvcGVuc3NsICJvcGVuc3NsID49IDEuMC4xayIg b3BlbnNzbC9zc2wuaCBTU0xfbGlicmFyeV9pbml0IHx8CisgICAgICAgIHJlcXVpcmVfcGtnX2Nv bmZpZyBvcGVuc3NsICJvcGVuc3NsID49IDEuMC4xayIgb3BlbnNzbC9zc2wuaCBPUEVOU1NMX2lu aXRfc3NsCisgICAgfQorfQorCiAKIGlmIGVuYWJsZWQgZ2NyeXB0OyB0aGVuCiAgICAgR0NSWVBU X0NPTkZJRz0iJHtjcm9zc19wcmVmaXh9bGliZ2NyeXB0LWNvbmZpZyIKZGlmZiAtLWdpdCBhL2Rv Yy9tdXhlcnMudGV4aSBiL2RvYy9tdXhlcnMudGV4aQppbmRleCAwNGI3ZjIwYjdlLi4zMGM5NWMz ZDM0IDEwMDY0NAotLS0gYS9kb2MvbXV4ZXJzLnRleGkKKysrIGIvZG9jL211eGVycy50ZXhpCkBA IC0zODc5LDQgKzM4NzksNTEgQEAgZmZtcGVnIC1mIHdlYm1fZGFzaF9tYW5pZmVzdCAtaSB2aWRl bzEud2VibSBcCiAgICAgICAgbWFuaWZlc3QueG1sCiBAZW5kIGV4YW1wbGUKIAorQGFuY2hvcnt3 aGlwfQorQHNlY3Rpb24gd2hpcAorCitXZWJSVEMgKFJlYWwtVGltZSBDb21tdW5pY2F0aW9uKSBt dXhlciB0aGF0IHN1cHBvcnRzIHN1Yi1zZWNvbmQgbGF0ZW5jeSBzdHJlYW1pbmcgYWNjb3JkaW5n IHRvCit0aGUgV0hJUCAoV2ViUlRDLUhUVFAgaW5nZXN0aW9uIHByb3RvY29sKSBzcGVjaWZpY2F0 aW9uLgorCitJdCB1c2VzIEhUVFAgYXMgYSBzaWduYWxpbmcgcHJvdG9jb2wgdG8gZXhjaGFuZ2Ug U0RQIGNhcGFiaWxpdGllcyBhbmQgSUNFIGxpdGUgY2FuZGlkYXRlcy4gVGhlbiwKK2l0IHVzZXMg U1RVTiBiaW5kaW5nIHJlcXVlc3RzIGFuZCByZXNwb25zZXMgdG8gZXN0YWJsaXNoIGEgc2Vzc2lv biBvdmVyIFVEUC4gU3Vic2VxdWVudGx5LCBpdAoraW5pdGlhdGVzIGEgRFRMUyBoYW5kc2hha2Ug dG8gZXhjaGFuZ2UgdGhlIFNSVFAgZW5jcnlwdGlvbiBrZXlzLiBMYXN0bHksIGl0IHNwbGl0cyB2 aWRlbyBhbmQKK2F1ZGlvIGZyYW1lcyBpbnRvIFJUUCBwYWNrZXRzIGFuZCBlbmNyeXB0cyB0aGVt IHVzaW5nIFNSVFAuCisKK0Vuc3VyZSB0aGF0IHlvdSB1c2UgSC4yNjQgd2l0aG91dCBCIGZyYW1l cyBhbmQgT3B1cyBmb3IgdGhlIGF1ZGlvIGNvZGVjLiBGb3IgZXhhbXBsZSwgdG8gY29udmVydAor YW4gaW5wdXQgZmlsZSB3aXRoIEBjb21tYW5ke2ZmbXBlZ30gdG8gV2ViUlRDOgorQGV4YW1wbGUK K2ZmbXBlZyAtcmUgLWkgaW5wdXQubXA0IC1hY29kZWMgbGlib3B1cyAtYXIgNDgwMDAgLWFjIDIg XAorICAtdmNvZGVjIGxpYngyNjQgLXByb2ZpbGU6diBiYXNlbGluZSAtdHVuZSB6ZXJvbGF0ZW5j eSAtdGhyZWFkcyAxIC1iZiAwIFwKKyAgLWYgd2hpcCAiaHR0cDovL2xvY2FsaG9zdDoxOTg1L3J0 Yy92MS93aGlwLz9hcHA9bGl2ZSZzdHJlYW09bGl2ZXN0cmVhbSIKK0BlbmQgZXhhbXBsZQorCitG b3IgdGhpcyBleGFtcGxlLCB3ZSBoYXZlIGVtcGxveWVkIGxvdyBsYXRlbmN5IG9wdGlvbnMsIHJl c3VsdGluZyBpbiBhbiBlbmQtdG8tZW5kIGxhdGVuY3kgb2YKK2FwcHJveGltYXRlbHkgMTUwbXMu CisKK0BzdWJzZWN0aW9uIE9wdGlvbnMKKworVGhpcyBtdXhlciBzdXBwb3J0cyB0aGUgZm9sbG93 aW5nIG9wdGlvbnM6CisKK0B0YWJsZSBAb3B0aW9uCisKK0BpdGVtIGhhbmRzaGFrZV90aW1lb3V0 IEB2YXJ7aW50ZWdlcn0KK1NldCB0aGUgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgZm9yIElDRSBh bmQgRFRMUyBoYW5kc2hha2UuCitEZWZhdWx0IHZhbHVlIGlzIDUwMDAuCisKK0BpdGVtIHBrdF9z aXplIEB2YXJ7aW50ZWdlcn0KK1NldCB0aGUgbWF4aW11bSBzaXplLCBpbiBieXRlcywgb2YgUlRQ IHBhY2tldHMgdGhhdCBzZW5kIG91dC4KK0RlZmF1bHQgdmFsdWUgaXMgMTUwMC4KKworQGl0ZW0g YXV0aG9yaXphdGlvbiBAdmFye3N0cmluZ30KK1RoZSBvcHRpb25hbCBCZWFyZXIgdG9rZW4gZm9y IFdISVAgQXV0aG9yaXphdGlvbi4KKworQGl0ZW0gY2VydF9maWxlIEB2YXJ7c3RyaW5nfQorVGhl IG9wdGlvbmFsIGNlcnRpZmljYXRlIGZpbGUgcGF0aCBmb3IgRFRMUy4KKworQGl0ZW0ga2V5X2Zp bGUgQHZhcntzdHJpbmd9CitUaGUgb3B0aW9uYWwgcHJpdmF0ZSBrZXkgZmlsZSBwYXRoIGZvciBE VExTLgorCitAZW5kIHRhYmxlCisKIEBjIG1hbiBlbmQgTVVYRVJTCmRpZmYgLS1naXQgYS9saWJh dmZvcm1hdC9NYWtlZmlsZSBiL2xpYmF2Zm9ybWF0L01ha2VmaWxlCmluZGV4IDZjOTk5MmFkYWIu Ljk2YTY0MzAxNTggMTAwNjQ0Ci0tLSBhL2xpYmF2Zm9ybWF0L01ha2VmaWxlCisrKyBiL2xpYmF2 Zm9ybWF0L01ha2VmaWxlCkBAIC02MzcsNiArNjM3LDcgQEAgT0JKUy0kKENPTkZJR19XRUJNX0NI VU5LX01VWEVSKSAgICAgICAgICArPSB3ZWJtX2NodW5rLm8KIE9CSlMtJChDT05GSUdfV0VCUF9N VVhFUikgICAgICAgICAgICAgICAgKz0gd2VicGVuYy5vCiBPQkpTLSQoQ09ORklHX1dFQlZUVF9E RU1VWEVSKSAgICAgICAgICAgICs9IHdlYnZ0dGRlYy5vIHN1YnRpdGxlcy5vCiBPQkpTLSQoQ09O RklHX1dFQlZUVF9NVVhFUikgICAgICAgICAgICAgICs9IHdlYnZ0dGVuYy5vCitPQkpTLSQoQ09O RklHX1dISVBfTVVYRVIpICAgICAgICAgICAgICAgICs9IHdoaXAubyBhdmMubyBodHRwLm8gc3J0 cC5vIHRsc19vcGVuc3NsLm8KIE9CSlMtJChDT05GSUdfV1NBVURfREVNVVhFUikgICAgICAgICAg ICAgKz0gd2VzdHdvb2RfYXVkLm8KIE9CSlMtJChDT05GSUdfV1NBVURfTVVYRVIpICAgICAgICAg ICAgICAgKz0gd2VzdHdvb2RfYXVkZW5jLm8KIE9CSlMtJChDT05GSUdfV1NEX0RFTVVYRVIpICAg ICAgICAgICAgICAgKz0gd3NkZGVjLm8gcmF3ZGVjLm8KZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0 L2FsbGZvcm1hdHMuYyBiL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYwppbmRleCBiNWEyM2Y5YzE3 Li4zZTVmMTI3ZGMxIDEwMDY0NAotLS0gYS9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMKKysrIGIv bGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jCkBAIC01MTcsNiArNTE3LDcgQEAgZXh0ZXJuIGNvbnN0 IEZGT3V0cHV0Rm9ybWF0IGZmX3dlYnBfbXV4ZXI7CiBleHRlcm4gY29uc3QgRkZJbnB1dEZvcm1h dCAgZmZfd2VidnR0X2RlbXV4ZXI7CiBleHRlcm4gY29uc3QgRkZPdXRwdXRGb3JtYXQgZmZfd2Vi dnR0X211eGVyOwogZXh0ZXJuIGNvbnN0IEZGSW5wdXRGb3JtYXQgIGZmX3dzYXVkX2RlbXV4ZXI7 CitleHRlcm4gY29uc3QgRkZPdXRwdXRGb3JtYXQgZmZfd2hpcF9tdXhlcjsKIGV4dGVybiBjb25z dCBGRk91dHB1dEZvcm1hdCBmZl93c2F1ZF9tdXhlcjsKIGV4dGVybiBjb25zdCBGRklucHV0Rm9y bWF0ICBmZl93c2RfZGVtdXhlcjsKIGV4dGVybiBjb25zdCBGRklucHV0Rm9ybWF0ICBmZl93c3Zx YV9kZW11eGVyOwpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvYXZpby5jIGIvbGliYXZmb3JtYXQv YXZpby5jCmluZGV4IGQxMDlmM2FkZmYuLmIxNDZhYzlmMTkgMTAwNjQ0Ci0tLSBhL2xpYmF2Zm9y bWF0L2F2aW8uYworKysgYi9saWJhdmZvcm1hdC9hdmlvLmMKQEAgLTMzOSw4ICszMzksOSBAQCBz dGF0aWMgY29uc3Qgc3RydWN0IFVSTFByb3RvY29sICp1cmxfZmluZF9wcm90b2NvbChjb25zdCBj aGFyICpmaWxlbmFtZSkKICAgICAgICAgfQogICAgIH0KICAgICBhdl9mcmVlcCgmcHJvdG9jb2xz KTsKLSAgICBpZiAoYXZfc3Ryc3RhcnQoZmlsZW5hbWUsICJodHRwczoiLCBOVUxMKSB8fCBhdl9z dHJzdGFydChmaWxlbmFtZSwgInRsczoiLCBOVUxMKSkKLSAgICAgICAgYXZfbG9nKE5VTEwsIEFW X0xPR19XQVJOSU5HLCAiaHR0cHMgcHJvdG9jb2wgbm90IGZvdW5kLCByZWNvbXBpbGUgRkZtcGVn IHdpdGggIgorICAgIGlmIChhdl9zdHJzdGFydChmaWxlbmFtZSwgImh0dHBzOiIsIE5VTEwpIHx8 IGF2X3N0cnN0YXJ0KGZpbGVuYW1lLCAidGxzOiIsIE5VTEwpIHx8CisgICAgICAgIGF2X3N0cnN0 YXJ0KGZpbGVuYW1lLCAiZHRsczoiLCBOVUxMKSkKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xP R19XQVJOSU5HLCAiaHR0cHMgb3IgZHRscyBwcm90b2NvbCBub3QgZm91bmQsIHJlY29tcGlsZSBG Rm1wZWcgd2l0aCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZW5z c2wsIGdudXRscyBvciBzZWN1cmV0cmFuc3BvcnQgZW5hYmxlZC5cbiIpOwogCiAgICAgcmV0dXJu IE5VTEw7CmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9odHRwLmMgYi9saWJhdmZvcm1hdC9odHRw LmMKaW5kZXggZjdiMmE4YTAyOS4uZmY2M2MyNTk2OSAxMDA2NDQKLS0tIGEvbGliYXZmb3JtYXQv aHR0cC5jCisrKyBiL2xpYmF2Zm9ybWF0L2h0dHAuYwpAQCAtNTYyLDYgKzU2MiwxMiBAQCBpbnQg ZmZfaHR0cF9hdmVycm9yKGludCBzdGF0dXNfY29kZSwgaW50IGRlZmF1bHRfYXZlcnJvcikKICAg ICAgICAgcmV0dXJuIGRlZmF1bHRfYXZlcnJvcjsKIH0KIAorY29uc3QgY2hhciogZmZfaHR0cF9n ZXRfbmV3X2xvY2F0aW9uKFVSTENvbnRleHQgKmgpCit7CisgICAgSFRUUENvbnRleHQgKnMgPSBo LT5wcml2X2RhdGE7CisgICAgcmV0dXJuIHMtPm5ld19sb2NhdGlvbjsKK30KKwogc3RhdGljIGlu dCBodHRwX3dyaXRlX3JlcGx5KFVSTENvbnRleHQqIGgsIGludCBzdGF0dXNfY29kZSkKIHsKICAg ICBpbnQgcmV0LCBib2R5ID0gMCwgcmVwbHlfY29kZSwgbWVzc2FnZV9sZW47CmRpZmYgLS1naXQg YS9saWJhdmZvcm1hdC9odHRwLmggYi9saWJhdmZvcm1hdC9odHRwLmgKaW5kZXggNWY2NTBlZjE0 My4uZDFiNjkxODI2YiAxMDA2NDQKLS0tIGEvbGliYXZmb3JtYXQvaHR0cC5oCisrKyBiL2xpYmF2 Zm9ybWF0L2h0dHAuaApAQCAtNjIsNCArNjIsNiBAQCBpbnQgZmZfaHR0cF9kb19uZXdfcmVxdWVz dDIoVVJMQ29udGV4dCAqaCwgY29uc3QgY2hhciAqdXJpLCBBVkRpY3Rpb25hcnkgKipvcHRpbwog CiBpbnQgZmZfaHR0cF9hdmVycm9yKGludCBzdGF0dXNfY29kZSwgaW50IGRlZmF1bHRfYXZlcnJv cik7CiAKK2NvbnN0IGNoYXIqIGZmX2h0dHBfZ2V0X25ld19sb2NhdGlvbihVUkxDb250ZXh0ICpo KTsKKwogI2VuZGlmIC8qIEFWRk9STUFUX0hUVFBfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYXZmb3Jt YXQvcHJvdG9jb2xzLmMgYi9saWJhdmZvcm1hdC9wcm90b2NvbHMuYwppbmRleCA5M2E2ZDY3MjYx Li5kMzk0NDU0ZDQxIDEwMDY0NAotLS0gYS9saWJhdmZvcm1hdC9wcm90b2NvbHMuYworKysgYi9s aWJhdmZvcm1hdC9wcm90b2NvbHMuYwpAQCAtNjIsNiArNjIsNyBAQCBleHRlcm4gY29uc3QgVVJM UHJvdG9jb2wgZmZfc3ViZmlsZV9wcm90b2NvbDsKIGV4dGVybiBjb25zdCBVUkxQcm90b2NvbCBm Zl90ZWVfcHJvdG9jb2w7CiBleHRlcm4gY29uc3QgVVJMUHJvdG9jb2wgZmZfdGNwX3Byb3RvY29s OwogZXh0ZXJuIGNvbnN0IFVSTFByb3RvY29sIGZmX3Rsc19wcm90b2NvbDsKK2V4dGVybiBjb25z dCBVUkxQcm90b2NvbCBmZl9kdGxzX3Byb3RvY29sOwogZXh0ZXJuIGNvbnN0IFVSTFByb3RvY29s IGZmX3VkcF9wcm90b2NvbDsKIGV4dGVybiBjb25zdCBVUkxQcm90b2NvbCBmZl91ZHBsaXRlX3By b3RvY29sOwogZXh0ZXJuIGNvbnN0IFVSTFByb3RvY29sIGZmX3VuaXhfcHJvdG9jb2w7CmRpZmYg LS1naXQgYS9saWJhdmZvcm1hdC9zcnRwLmggYi9saWJhdmZvcm1hdC9zcnRwLmgKaW5kZXggMzE4 OWY4ZjU0Yi4uMzUyMjRjYzliYSAxMDA2NDQKLS0tIGEvbGliYXZmb3JtYXQvc3J0cC5oCisrKyBi L2xpYmF2Zm9ybWF0L3NydHAuaApAQCAtMjcsNyArMjcsNyBAQAogc3RydWN0IEFWQUVTOwogc3Ry dWN0IEFWSE1BQzsKIAotc3RydWN0IFNSVFBDb250ZXh0IHsKK3R5cGVkZWYgc3RydWN0IFNSVFBD b250ZXh0IHsKICAgICBzdHJ1Y3QgQVZBRVMgKmFlczsKICAgICBzdHJ1Y3QgQVZITUFDICpobWFj OwogICAgIGludCBydHBfaG1hY19zaXplLCBydGNwX2htYWNfc2l6ZTsKQEAgLTQwLDcgKzQwLDcg QEAgc3RydWN0IFNSVFBDb250ZXh0IHsKICAgICB1aW50MzJfdCByb2M7CiAKICAgICB1aW50MzJf dCBydGNwX2luZGV4OwotfTsKK30gU1JUUENvbnRleHQ7CiAKIGludCBmZl9zcnRwX3NldF9jcnlw dG8oc3RydWN0IFNSVFBDb250ZXh0ICpzLCBjb25zdCBjaGFyICpzdWl0ZSwKICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciAqcGFyYW1zKTsKZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0 L3Rscy5jIGIvbGliYXZmb3JtYXQvdGxzLmMKaW5kZXggZjk2ZmY2MjE1ZC4uZTA2YjcwMjJiZiAx MDA2NDQKLS0tIGEvbGliYXZmb3JtYXQvdGxzLmMKKysrIGIvbGliYXZmb3JtYXQvdGxzLmMKQEAg LTEsNiArMSw3IEBACiAvKgotICogVExTL1NTTCBQcm90b2NvbAorICogVExTL0RUTFMvU1NMIFBy b3RvY29sCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTEgTWFydGluIFN0b3Jzam8KKyAqIENvcHlyaWdo dCAoYykgMjAyNSBKYWNrIExhdQogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4K ICAqCkBAIC0yMCw2ICsyMSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImF2Zm9ybWF0LmgiCisjaW5j bHVkZSAiaW50ZXJuYWwuaCIKICNpbmNsdWRlICJuZXR3b3JrLmgiCiAjaW5jbHVkZSAib3Nfc3Vw cG9ydC5oIgogI2luY2x1ZGUgInVybC5oIgpAQCAtOTMsNyArOTUsNyBAQCBpbnQgZmZfdGxzX29w ZW5fdW5kZXJseWluZyhUTFNTaGFyZWQgKmMsIFVSTENvbnRleHQgKnBhcmVudCwgY29uc3QgY2hh ciAqdXJpLCBBVgogICAgICAgICAgICAgYy0+bGlzdGVuID0gMTsKICAgICB9CiAKLSAgICBmZl91 cmxfam9pbihidWYsIHNpemVvZihidWYpLCAidGNwIiwgTlVMTCwgYy0+dW5kZXJseWluZ19ob3N0 LCBwb3J0LCAiJXMiLCBwKTsKKyAgICBmZl91cmxfam9pbihidWYsIHNpemVvZihidWYpLCBjLT5p c19kdGxzID8gInVkcCIgOiAidGNwIiwgTlVMTCwgYy0+dW5kZXJseWluZ19ob3N0LCBwb3J0LCAi JXMiLCBwKTsKIAogICAgIGhpbnRzLmFpX2ZsYWdzID0gQUlfTlVNRVJJQ0hPU1Q7CiAgICAgaWYg KCFnZXRhZGRyaW5mbyhjLT51bmRlcmx5aW5nX2hvc3QsIE5VTEwsICZoaW50cywgJmFpKSkgewpA QCAtMTI0LDcgKzEyNiw2NSBAQCBpbnQgZmZfdGxzX29wZW5fdW5kZXJseWluZyhUTFNTaGFyZWQg KmMsIFVSTENvbnRleHQgKnBhcmVudCwgY29uc3QgY2hhciAqdXJpLCBBVgogICAgIH0KIAogICAg IGZyZWVlbnZfdXRmOChlbnZfaHR0cF9wcm94eSk7Ci0gICAgcmV0dXJuIGZmdXJsX29wZW5fd2hp dGVsaXN0KCZjLT50Y3AsIGJ1ZiwgQVZJT19GTEFHX1JFQURfV1JJVEUsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZwYXJlbnQtPmludGVycnVwdF9jYWxsYmFjaywgb3B0aW9ucywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LT5wcm90b2NvbF93aGl0ZWxp c3QsIHBhcmVudC0+cHJvdG9jb2xfYmxhY2tsaXN0LCBwYXJlbnQpOworICAgIGlmIChjLT5pc19k dGxzKSB7CisgICAgICAgIGF2X2RpY3Rfc2V0X2ludChvcHRpb25zLCAiY29ubmVjdCIsIDEsIDAp OworICAgICAgICBhdl9kaWN0X3NldF9pbnQob3B0aW9ucywgImZpZm9fc2l6ZSIsIDAsIDApOwor ICAgICAgICAvKiBTZXQgdGhlIG1heCBwYWNrZXQgc2l6ZSB0byB0aGUgYnVmZmVyIHNpemUuICov CisgICAgICAgIGF2X2RpY3Rfc2V0X2ludChvcHRpb25zLCAicGt0X3NpemUiLCBjLT5tdHUsIDAp OworICAgIH0KKyAgICByZXQgPSBmZnVybF9vcGVuX3doaXRlbGlzdChjLT5pc19kdGxzID8gJmMt PnVkcCA6ICZjLT50Y3AsIGJ1ZiwgQVZJT19GTEFHX1JFQURfV1JJVEUsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJnBhcmVudC0+aW50ZXJydXB0X2NhbGxiYWNrLCBvcHRpb25zLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC0+cHJvdG9jb2xfd2hpdGVsaXN0 LCBwYXJlbnQtPnByb3RvY29sX2JsYWNrbGlzdCwgcGFyZW50KTsKKyAgICBpZiAoYy0+aXNfZHRs cykgeworICAgICAgICBpZiAocmV0IDwgMCkgeworICAgICAgICAgICAgYXZfbG9nKGMsIEFWX0xP R19FUlJPUiwgIldISVA6IEZhaWxlZCB0byBjb25uZWN0IHVkcDovLyVzOiVkXG4iLCBjLT51bmRl cmx5aW5nX2hvc3QsIHBvcnQpOworICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQor ICAgICAgICAvKiBNYWtlIHRoZSBzb2NrZXQgbm9uLWJsb2NraW5nLCBzZXQgdG8gUkVBRCBhbmQg V1JJVEUgbW9kZSBhZnRlciBjb25uZWN0ZWQgKi8KKyAgICAgICAgZmZfc29ja2V0X25vbmJsb2Nr KGZmdXJsX2dldF9maWxlX2hhbmRsZShjLT51ZHApLCAxKTsKKyAgICAgICAgYy0+dWRwLT5mbGFn cyB8PSBBVklPX0ZMQUdfUkVBRCB8IEFWSU9fRkxBR19OT05CTE9DSzsKKyAgICB9CisgICAgcmV0 dXJuIHJldDsKIH0KKworLyoqCisgKiBSZWFkIGFsbCBkYXRhIGZyb20gdGhlIGdpdmVuIFVSTCB1 cmwgYW5kIHN0b3JlIGl0IGluIHRoZSBnaXZlbiBidWZmZXIgYnAuCisgKi8KK2ludCBmZl91cmxf cmVhZF9hbGwoY29uc3QgY2hhciAqdXJsLCBBVkJQcmludCAqYnApCit7CisgICAgaW50IHJldCA9 IDA7CisgICAgQVZEaWN0aW9uYXJ5ICpvcHRzID0gTlVMTDsKKyAgICBVUkxDb250ZXh0ICp1YyA9 IE5VTEw7CisgICAgY2hhciBidWZbTUFYX1VSTF9TSVpFXTsKKworICAgIHJldCA9IGZmdXJsX29w ZW5fd2hpdGVsaXN0KCZ1YywgdXJsLCBBVklPX0ZMQUdfUkVBRCwgTlVMTCwgJm9wdHMsIE5VTEws IE5VTEwsIE5VTEwpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfRVJST1IsICJUTFM6IEZhaWxlZCB0byBvcGVuIHVybCAlc1xuIiwgdXJsKTsKKyAgICAg ICAgZ290byBlbmQ7CisgICAgfQorCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgcmV0ID0gZmZ1 cmxfcmVhZCh1YywgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgICAgIGlmIChyZXQgPT0gQVZFUlJP Ul9FT0YpIHsKKyAgICAgICAgICAgIC8qIFJlc2V0IHRoZSBlcnJvciBiZWNhdXNlIHdlIHJlYWQg YWxsIHJlc3BvbnNlIGFzIGFuc3dlciB1dGlsIEVPRi4gKi8KKyAgICAgICAgICAgIHJldCA9IDA7 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAocmV0IDw9IDApIHsK KyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJUTFM6IEZhaWxlZCB0byBy ZWFkIGZyb20gdXJsPSVzLCBrZXkgaXMgJXNcbiIsIHVybCwgYnAtPnN0cik7CisgICAgICAgICAg ICBnb3RvIGVuZDsKKyAgICAgICAgfQorCisgICAgICAgIGF2X2JwcmludGYoYnAsICIlLipzIiwg cmV0LCBidWYpOworICAgICAgICBpZiAoIWF2X2JwcmludF9pc19jb21wbGV0ZShicCkpIHsKKyAg ICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJUTFM6IEV4Y2VlZCBtYXggc2l6 ZSAlLipzLCAlc1xuIiwgcmV0LCBidWYsIGJwLT5zdHIpOworICAgICAgICAgICAgcmV0ID0gQVZF UlJPUihFSU8pOworICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIH0KKyAgICB9CisKK2Vu ZDoKKyAgICBmZnVybF9jbG9zZXAoJnVjKTsKKyAgICBhdl9kaWN0X2ZyZWUoJm9wdHMpOworICAg IHJldHVybiByZXQ7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv bGliYXZmb3JtYXQvdGxzLmggYi9saWJhdmZvcm1hdC90bHMuaAppbmRleCA2YzZhYTAxYTlhLi5j YjYyNmYxOTc3IDEwMDY0NAotLS0gYS9saWJhdmZvcm1hdC90bHMuaAorKysgYi9saWJhdmZvcm1h dC90bHMuaApAQCAtMSw2ICsxLDcgQEAKIC8qCi0gKiBUTFMvU1NMIFByb3RvY29sCisgKiBUTFMv RFRMUy9TU0wgUHJvdG9jb2wKICAqIENvcHlyaWdodCAoYykgMjAxMSBNYXJ0aW4gU3RvcnNqbwor ICogQ29weXJpZ2h0IChjKSAyMDI1IEphY2sgTGF1CiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQg b2YgRkZtcGVnLgogICoKQEAgLTIyLDEwICsyMywyNyBAQAogI2lmbmRlZiBBVkZPUk1BVF9UTFNf SAogI2RlZmluZSBBVkZPUk1BVF9UTFNfSAogCisjaW5jbHVkZSAibGliYXZ1dGlsL2JwcmludC5o IgogI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKIAogI2luY2x1ZGUgInVybC5oIgogCisvKioK KyAqIE1heGltdW0gc2l6ZSBsaW1pdCBvZiBhIGNlcnRpZmljYXRlIGFuZCBwcml2YXRlIGtleSBz aXplLgorICovCisjZGVmaW5lIE1BWF9DRVJUSUZJQ0FURV9TSVpFIDgxOTIKKworZW51bSBEVExT U3RhdGUgeworICAgIERUTFNfU1RBVEVfTk9ORSwKKworICAgIC8qIFdoZXRoZXIgRFRMUyBoYW5k c2hha2UgaXMgZmluaXNoZWQuICovCisgICAgRFRMU19TVEFURV9GSU5JU0hFRCwKKyAgICAvKiBX aGV0aGVyIERUTFMgc2Vzc2lvbiBpcyBjbG9zZWQuICovCisgICAgRFRMU19TVEFURV9DTE9TRUQs CisgICAgLyogV2hldGhlciBEVExTIGhhbmRzaGFrZSBpcyBmYWlsZWQuICovCisgICAgRFRMU19T VEFURV9GQUlMRUQsCit9OworCiB0eXBlZGVmIHN0cnVjdCBUTFNTaGFyZWQgewogICAgIGNoYXIg KmNhX2ZpbGU7CiAgICAgaW50IHZlcmlmeTsKQEAgLTQwLDYgKzU4LDI1IEBAIHR5cGVkZWYgc3Ry dWN0IFRMU1NoYXJlZCB7CiAgICAgaW50IG51bWVyaWNob3N0OwogCiAgICAgVVJMQ29udGV4dCAq dGNwOworCisgICAgaW50IGlzX2R0bHM7CisKKyAgICBlbnVtIERUTFNTdGF0ZSBzdGF0ZTsKKwor ICAgIGludCB1c2VfZXh0ZXJuYWxfdWRwOworICAgIFVSTENvbnRleHQgKnVkcDsKKworICAgIC8q IFRoZSBmaW5nZXJwcmludCBvZiBjZXJ0aWZpY2F0ZSwgdXNlZCBpbiBTRFAgb2ZmZXIuICovCisg ICAgY2hhciAqZmluZ2VycHJpbnQ7CisKKyAgICAvKiBUaGUgY2VydGlmaWNhdGUgYW5kIHByaXZh dGUga2V5IGNvbnRlbnQgdXNlZCBmb3IgRFRMUyBoYW5kc2hha2UgKi8KKyAgICBjaGFyKiBjZXJ0 X2J1ZjsKKyAgICBjaGFyKiBrZXlfYnVmOworICAgIC8qKgorICAgICAqIFRoZSBzaXplIG9mIFJU UCBwYWNrZXQsIHNob3VsZCBnZW5lcmFsbHkgYmUgc2V0IHRvIE1UVS4KKyAgICAgKiBOb3RlIHRo YXQgcGlvbiByZXF1aXJlcyBhIHNtYWxsZXIgdmFsdWUsIGZvciBleGFtcGxlLCAxMjAwLgorICAg ICAqLworICAgIGludCBtdHU7CiB9IFRMU1NoYXJlZDsKIAogI2RlZmluZSBUTFNfT1BURkwgKEFW X09QVF9GTEFHX0RFQ09ESU5HX1BBUkFNIHwgQVZfT1BUX0ZMQUdfRU5DT0RJTkdfUEFSQU0pCkBA IC01MSwxMCArODgsMjcgQEAgdHlwZWRlZiBzdHJ1Y3QgVExTU2hhcmVkIHsKICAgICB7ImtleV9m aWxlIiwgICAiUHJpdmF0ZSBrZXkgZmlsZSIsICAgICAgICAgICAgICAgICAgICBvZmZzZXRvZihw c3RydWN0LCBvcHRpb25zX2ZpZWxkIC4ga2V5X2ZpbGUpLCAgQVZfT1BUX1RZUEVfU1RSSU5HLCAu ZmxhZ3MgPSBUTFNfT1BURkwgfSwgXAogICAgIHsibGlzdGVuIiwgICAgICJMaXN0ZW4gZm9yIGlu Y29taW5nIGNvbm5lY3Rpb25zIiwgICAgIG9mZnNldG9mKHBzdHJ1Y3QsIG9wdGlvbnNfZmllbGQg LiBsaXN0ZW4pLCAgICBBVl9PUFRfVFlQRV9JTlQsIHsgLmk2NCA9IDAgfSwgMCwgMSwgLmZsYWdz ID0gVExTX09QVEZMIH0sIFwKICAgICB7InZlcmlmeWhvc3QiLCAiVmVyaWZ5IGFnYWluc3QgYSBz cGVjaWZpYyBob3N0bmFtZSIsICBvZmZzZXRvZihwc3RydWN0LCBvcHRpb25zX2ZpZWxkIC4gaG9z dCksICAgICAgQVZfT1BUX1RZUEVfU1RSSU5HLCAuZmxhZ3MgPSBUTFNfT1BURkwgfSwgXAotICAg IHsiaHR0cF9wcm94eSIsICJTZXQgcHJveHkgdG8gdHVubmVsIHRocm91Z2giLCAgICAgICAgIG9m ZnNldG9mKHBzdHJ1Y3QsIG9wdGlvbnNfZmllbGQgLiBodHRwX3Byb3h5KSwgQVZfT1BUX1RZUEVf U1RSSU5HLCAuZmxhZ3MgPSBUTFNfT1BURkwgfQorICAgIHsiaHR0cF9wcm94eSIsICJTZXQgcHJv eHkgdG8gdHVubmVsIHRocm91Z2giLCAgICAgICAgIG9mZnNldG9mKHBzdHJ1Y3QsIG9wdGlvbnNf ZmllbGQgLiBodHRwX3Byb3h5KSwgQVZfT1BUX1RZUEVfU1RSSU5HLCAuZmxhZ3MgPSBUTFNfT1BU RkwgfSwgXAorICAgIHsidXNlX2V4dGVybmFsX3VkcCIsICJVc2UgZXh0ZXJuYWwgVURQIGZyb20g bXV4ZXIgb3IgZGVtdXhlciIsIG9mZnNldG9mKHBzdHJ1Y3QsIG9wdGlvbnNfZmllbGQgLiB1c2Vf ZXh0ZXJuYWxfdWRwKSwgQVZfT1BUX1RZUEVfSU5ULCB7IC5pNjQgPSAwfSwgMCwgMSwgLmZsYWdz ID0gVExTX09QVEZMIH0sIFwKKyAgICB7Im10dSIsICJNYXhpbXVtIFRyYW5zbWlzc2lvbiBVbml0 Iiwgb2Zmc2V0b2YocHN0cnVjdCwgb3B0aW9uc19maWVsZCAuIG10dSksIEFWX09QVF9UWVBFX0lO VCwgIHsgLmk2NCA9IDB9LCBJTlQ2NF9NSU4sIElOVDY0X01BWCwgLmZsYWdzID0gVExTX09QVEZM fSwgXAorICAgIHsiZmluZ2VycHJpbnQiLCAiVGhlIG9wdGlvbmFsIGZpbmdlcnByaW50IGZvciBE VExTIiwgb2Zmc2V0b2YocHN0cnVjdCwgb3B0aW9uc19maWVsZCAuIGZpbmdlcnByaW50KSwgQVZf T1BUX1RZUEVfU1RSSU5HLCAuZmxhZ3MgPSBUTFNfT1BURkx9LCBcCisgICAgeyJjZXJ0X2J1ZiIs ICJUaGUgb3B0aW9uYWwgY2VydGlmaWNhdGUgYnVmZmVyIGZvciBEVExTIiwgb2Zmc2V0b2YocHN0 cnVjdCwgb3B0aW9uc19maWVsZCAuIGNlcnRfYnVmKSwgQVZfT1BUX1RZUEVfU1RSSU5HLCAuZmxh Z3MgPSBUTFNfT1BURkx9LCBcCisgICAgeyJrZXlfYnVmIiwgIlRoZSBvcHRpb25hbCBwcml2YXRl IGtleSBidWZmZXIgZm9yIERUTFMiLCBvZmZzZXRvZihwc3RydWN0LCBvcHRpb25zX2ZpZWxkIC4g a2V5X2J1ZiksIEFWX09QVF9UWVBFX1NUUklORywgLmZsYWdzID0gVExTX09QVEZMfQogCiBpbnQg ZmZfdGxzX29wZW5fdW5kZXJseWluZyhUTFNTaGFyZWQgKmMsIFVSTENvbnRleHQgKnBhcmVudCwg Y29uc3QgY2hhciAqdXJpLCBBVkRpY3Rpb25hcnkgKipvcHRpb25zKTsKIAoraW50IGZmX3VybF9y ZWFkX2FsbChjb25zdCBjaGFyICp1cmwsIEFWQlByaW50ICpicCk7CisKK2ludCBmZl9kdGxzX3Nl dF91ZHAoVVJMQ29udGV4dCAqaCwgVVJMQ29udGV4dCAqdWRwKTsKKworaW50IGZmX2R0bHNfZXhw b3J0X21hdGVyaWFscyhVUkxDb250ZXh0ICpoLCBjaGFyICpkdGxzX3NydHBfbWF0ZXJpYWxzLCBz aXplX3QgbWF0ZXJpYWxzX3N6KTsKKworaW50IGZmX2R0bHNfc3RhdGUoVVJMQ29udGV4dCAqaCk7 CisKK2ludCBmZl9zc2xfcmVhZF9rZXlfY2VydChjaGFyICprZXlfdXJsLCBjaGFyICpjZXJ0X3Vy bCwgY2hhciAqa2V5X2J1Ziwgc2l6ZV90IGtleV9zeiwgY2hhciAqY2VydF9idWYsIHNpemVfdCBj ZXJ0X3N6LCBjaGFyICoqZmluZ2VycHJpbnQpOworCitpbnQgZmZfc3NsX2dlbl9rZXlfY2VydChj aGFyICprZXlfYnVmLCBzaXplX3Qga2V5X3N6LCBjaGFyICpjZXJ0X2J1Ziwgc2l6ZV90IGNlcnRf c3osIGNoYXIgKipmaW5nZXJwcmludCk7CisKIHZvaWQgZmZfZ251dGxzX2luaXQodm9pZCk7CiB2 b2lkIGZmX2dudXRsc19kZWluaXQodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L3Rs c19vcGVuc3NsLmMgYi9saWJhdmZvcm1hdC90bHNfb3BlbnNzbC5jCmluZGV4IDhiMGNmOWVmYjIu LmEzODExNDkwY2QgMTAwNjQ0Ci0tLSBhL2xpYmF2Zm9ybWF0L3Rsc19vcGVuc3NsLmMKKysrIGIv bGliYXZmb3JtYXQvdGxzX29wZW5zc2wuYwpAQCAtMSw2ICsxLDcgQEAKIC8qCi0gKiBUTFMvU1NM IFByb3RvY29sCisgKiBUTFMvRFRMUy9TU0wgUHJvdG9jb2wKICAqIENvcHlyaWdodCAoYykgMjAx MSBNYXJ0aW4gU3RvcnNqbworICogQ29weXJpZ2h0IChjKSAyMDI1IEphY2sgTGF1CiAgKgogICog VGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgogICoKQEAgLTE5LDggKzIwLDEwIEBACiAgKiBG b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s IE1BIDAyMTEwLTEzMDEgVVNBCiAgKi8KIAorI2luY2x1ZGUgImxpYmF2dXRpbC9tZW0uaCIKICNp bmNsdWRlICJuZXR3b3JrLmgiCiAjaW5jbHVkZSAib3Nfc3VwcG9ydC5oIgorI2luY2x1ZGUgImxp YmF2dXRpbC9yYW5kb21fc2VlZC5oIgogI2luY2x1ZGUgInVybC5oIgogI2luY2x1ZGUgInRscy5o IgogI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKQEAgLTI5LDYgKzMyLDQzNiBAQAogI2luY2x1 ZGUgPG9wZW5zc2wvc3NsLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KIAorLyoqCisgKiBS ZXR1cm5zIGEgaGVhcOKAkGFsbG9jYXRlZCBudWxs4oCQdGVybWluYXRlZCBzdHJpbmcgY29udGFp bmluZworICogdGhlIFBFTeKAkGVuY29kZWQgcHVibGljIGtleS4gIENhbGxlciBtdXN0IGZyZWUu CisgKi8KK3N0YXRpYyBjaGFyICpwa2V5X3RvX3BlbV9zdHJpbmcoRVZQX1BLRVkgKnBrZXkpIHsK KyAgICBCSU8gICAgICAgICptZW0gPSBOVUxMOworICAgIEJVRl9NRU0gICAgKmJwdHIgPSBOVUxM OworICAgIGNoYXIgICAgICAgKnBlbV9zdHIgPSBOVUxMOworCisgICAgLy8gQ3JlYXRlIGEgbWVt b3J5IEJJTworICAgIGlmICghKG1lbSA9IEJJT19uZXcoQklPX3NfbWVtKCkpKSkKKyAgICAgICAg Z290byBlcnI7CisKKyAgICAvLyBXcml0ZSBwdWJsaWMga2V5IGluIFBFTSBmb3JtCisgICAgaWYg KCFQRU1fd3JpdGVfYmlvX1ByaXZhdGVLZXkobWVtLCBwa2V5LCBOVUxMLCBOVUxMLCAwLCBOVUxM LCBOVUxMKSkKKyAgICAgICAgZ290byBlcnI7CisKKyAgICAvLyBFeHRyYWN0IHBvaW50ZXIvbGVu Z3RoCisgICAgQklPX2dldF9tZW1fcHRyKG1lbSwgJmJwdHIpOworICAgIGlmICghYnB0ciB8fCAh YnB0ci0+bGVuZ3RoKQorICAgICAgICBnb3RvIGVycjsKKworICAgIC8vIEFsbG9jYXRlIHN0cmlu ZyAoKzEgZm9yIE5VTCkKKyAgICBwZW1fc3RyID0gYXZfbWFsbG9jKGJwdHItPmxlbmd0aCArIDEp OworICAgIGlmICghcGVtX3N0cikKKyAgICAgICAgZ290byBlcnI7CisKKyAgICAvLyBDb3B5IGRh dGEgJiBOVUzigJB0ZXJtaW5hdGUKKyAgICBtZW1jcHkocGVtX3N0ciwgYnB0ci0+ZGF0YSwgYnB0 ci0+bGVuZ3RoKTsKKyAgICBwZW1fc3RyW2JwdHItPmxlbmd0aF0gPSAnXDAnOworCitjbGVhbnVw OgorICAgIEJJT19mcmVlKG1lbSk7CisgICAgcmV0dXJuIHBlbV9zdHI7CisKK2VycjoKKyAgICAv LyBlcnJvciBwYXRoOiBmcmVlIGFuZCByZXR1cm4gTlVMTAorICAgIGZyZWUocGVtX3N0cik7Cisg ICAgcGVtX3N0ciA9IE5VTEw7CisgICAgZ290byBjbGVhbnVwOworfQorCisvKioKKyAqIFNlcmlh bGl6ZSBhbiBYNTA5IGNlcnRpZmljYXRlIHRvIGEgYXZfbWFsbG9j4oCZZCBQRU0gc3RyaW5nLgor ICogQ2FsbGVyIG11c3QgZnJlZSB0aGUgcmV0dXJuZWQgcG9pbnRlci4KKyAqLworc3RhdGljIGNo YXIgKmNlcnRfdG9fcGVtX3N0cmluZyhYNTA5ICpjZXJ0KQoreworICAgIEJJTyAgICAgKm1lbSA9 IEJJT19uZXcoQklPX3NfbWVtKCkpOworICAgIEJVRl9NRU0gKmJwdHIgPSBOVUxMOworICAgIGNo YXIgICAgKm91dCA9IE5VTEw7CisKKyAgICBpZiAoIW1lbSkgZ290byBlcnI7CisKKyAgICAvKiBX cml0ZSB0aGUgUEVNIGNlcnRpZmljYXRlICovCisgICAgaWYgKCFQRU1fd3JpdGVfYmlvX1g1MDko bWVtLCBjZXJ0KSkKKyAgICAgICAgZ290byBlcnI7CisKKyAgICBCSU9fZ2V0X21lbV9wdHIobWVt LCAmYnB0cik7CisgICAgaWYgKCFicHRyIHx8ICFicHRyLT5sZW5ndGgpIGdvdG8gZXJyOworCisg ICAgb3V0ID0gYXZfbWFsbG9jKGJwdHItPmxlbmd0aCArIDEpOworICAgIGlmICghb3V0KSBnb3Rv IGVycjsKKworICAgIG1lbWNweShvdXQsIGJwdHItPmRhdGEsIGJwdHItPmxlbmd0aCk7CisgICAg b3V0W2JwdHItPmxlbmd0aF0gPSAnXDAnOworCitjbGVhbnVwOgorICAgIEJJT19mcmVlKG1lbSk7 CisgICAgcmV0dXJuIG91dDsKKworZXJyOgorICAgIGZyZWUob3V0KTsKKyAgICBvdXQgPSBOVUxM OworICAgIGdvdG8gY2xlYW51cDsKK30KKworCisvKioKKyAqIEdlbmVyYXRlIGEgU0hBLTI1NiBm aW5nZXJwcmludCBvZiBhbiBYLjUwOSBjZXJ0aWZpY2F0ZS4KKyAqCisgKiBAcGFyYW0gY3R4ICAg ICAgIEFWRm9ybWF0Q29udGV4dCBmb3IgbG9nZ2luZyAoY2FuIGJlIE5VTEwpCisgKiBAcGFyYW0g Y2VydCAgICAgIFg1MDkgY2VydGlmaWNhdGUgdG8gZmluZ2VycHJpbnQKKyAqIEByZXR1cm4gICAg ICAgICAgTmV3bHkgYWxsb2NhdGVkIGZpbmdlcnByaW50IHN0cmluZyBpbiAiQUE6QkI6Q0M64oCm IiBmb3JtYXQsCisgKiAgICAgICAgICAgICAgICAgIG9yIE5VTEwgb24gZXJyb3IgKGxvZ3Mgdmlh IGF2X2xvZyBpZiBjdHggaXMgbm90IE5VTEwpLgorICogICAgICAgICAgICAgICAgICBDYWxsZXIg bXVzdCBmcmVlKCkgdGhlIHJldHVybmVkIHN0cmluZy4KKyAqLworc3RhdGljIGNoYXIgKmdlbmVy YXRlX2ZpbmdlcnByaW50KFg1MDkgKmNlcnQpCit7CisgICAgdW5zaWduZWQgY2hhciBtZFtFVlBf TUFYX01EX1NJWkVdOworICAgIGludCBuID0gMDsKKyAgICBBVkJQcmludCBmaW5nZXJwcmludDsK KyAgICBjaGFyICpyZXN1bHQgPSBOVUxMOworICAgIGludCBpOworCisgICAgLyogVG8gcHJldmVu dCBhIGNyYXNoIGR1cmluZyBjbGVhbnVwLCBhbHdheXMgaW5pdGlhbGl6ZSBpdC4gKi8KKyAgICBh dl9icHJpbnRfaW5pdCgmZmluZ2VycHJpbnQsIDAsIEFWX0JQUklOVF9TSVpFX1VOTElNSVRFRCk7 CisKKyAgICBpZiAoWDUwOV9kaWdlc3QoY2VydCwgRVZQX3NoYTI1NigpLCBtZCwgJm4pICE9IDEp IHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlRMUzogRmFpbGVkIHRvIGdl bmVyYXRlIGZpbmdlcnByaW50LCAlc1xuIiwgRVJSX2Vycm9yX3N0cmluZyhFUlJfZ2V0X2Vycm9y KCksIE5VTEwpKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgZm9yIChpID0gMDsg aSA8IG47IGkrKykgeworICAgICAgICBhdl9icHJpbnRmKCZmaW5nZXJwcmludCwgIiUwMlgiLCBt ZFtpXSk7CisgICAgICAgIGlmIChpICsgMSA8IG4pCisgICAgICAgICAgICBhdl9icHJpbnRmKCZm aW5nZXJwcmludCwgIjoiKTsKKyAgICB9CisKKyAgICBpZiAoIWZpbmdlcnByaW50LnN0ciB8fCAh c3RybGVuKGZpbmdlcnByaW50LnN0cikpIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19F UlJPUiwgIlRMUzogRmluZ2VycHJpbnQgaXMgZW1wdHlcbiIpOworICAgICAgICBnb3RvIGVuZDsK KyAgICB9CisKKyAgICByZXN1bHQgPSBhdl9zdHJkdXAoZmluZ2VycHJpbnQuc3RyKTsKKyAgICBp ZiAoIXJlc3VsdCkgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBP dXQgb2YgbWVtb3J5IGdlbmVyYXRpbmcgZmluZ2VycHJpbnRcbiIpOworICAgIH0KKworZW5kOgor ICAgIGF2X2JwcmludF9maW5hbGl6ZSgmZmluZ2VycHJpbnQsIE5VTEwpOworICAgIHJldHVybiBy ZXN1bHQ7Cit9CisKK2ludCBmZl9zc2xfcmVhZF9rZXlfY2VydChjaGFyICprZXlfdXJsLCBjaGFy ICpjZXJ0X3VybCwgY2hhciAqa2V5X2J1Ziwgc2l6ZV90IGtleV9zeiwgY2hhciAqY2VydF9idWYs IHNpemVfdCBjZXJ0X3N6LCBjaGFyICoqZmluZ2VycHJpbnQpCit7CisgICAgaW50IHJldCA9IDA7 CisgICAgQklPICprZXlfYiA9IE5VTEwsICpjZXJ0X2IgPSBOVUxMOworICAgIEFWQlByaW50IGtl eV9icCwgY2VydF9icDsKKyAgICBFVlBfUEtFWSAqcGtleTsKKyAgICBYNTA5ICpjZXJ0OworICAg IGNoYXIgKmtleV90ZW0gPSBOVUxMLCAqY2VydF90ZW0gPSBOVUxMOworCisgICAgLyogVG8gcHJl dmVudCBhIGNyYXNoIGR1cmluZyBjbGVhbnVwLCBhbHdheXMgaW5pdGlhbGl6ZSBpdC4gKi8KKyAg ICBhdl9icHJpbnRfaW5pdCgma2V5X2JwLCAxLCBNQVhfQ0VSVElGSUNBVEVfU0laRSk7CisgICAg YXZfYnByaW50X2luaXQoJmNlcnRfYnAsIDEsIE1BWF9DRVJUSUZJQ0FURV9TSVpFKTsKKworICAg IC8qIFJlYWQga2V5IGZpbGUuICovCisgICAgcmV0ID0gZmZfdXJsX3JlYWRfYWxsKGtleV91cmws ICZrZXlfYnApOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9M T0dfRVJST1IsICJUTFM6IEZhaWxlZCB0byBvcGVuIGtleSBmaWxlICVzXG4iLCBrZXlfdXJsKTsK KyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgaWYgKCEoa2V5X2IgPSBCSU9fbmV3KEJJ T19zX21lbSgpKSkpIHsKKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICBn b3RvIGVuZDsKKyAgICB9CisKKyAgICBCSU9fd3JpdGUoa2V5X2IsIGtleV9icC5zdHIsIGtleV9i cC5sZW4pOworICAgIHBrZXkgPSBQRU1fcmVhZF9iaW9fUHJpdmF0ZUtleShrZXlfYiwgTlVMTCwg TlVMTCwgTlVMTCk7CisgICAgaWYgKCFwa2V5KSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9M T0dfRVJST1IsICJUTFM6IEZhaWxlZCB0byByZWFkIHByaXZhdGUga2V5IGZyb20gJXNcbiIsIGtl eV91cmwpOworICAgICAgICByZXQgPSBBVkVSUk9SKEVJTyk7CisgICAgICAgIGdvdG8gZW5kOwor ICAgIH0KKworICAgIC8qIFJlYWQgY2VydGlmaWNhdGUuICovCisgICAgcmV0ID0gZmZfdXJsX3Jl YWRfYWxsKGNlcnRfdXJsLCAmY2VydF9icCk7CisgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAg YXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlRMUzogRmFpbGVkIHRvIG9wZW4gY2VydCBmaWxl ICVzXG4iLCBjZXJ0X3VybCk7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIGlmICgh KGNlcnRfYiA9IEJJT19uZXcoQklPX3NfbWVtKCkpKSkgeworICAgICAgICByZXQgPSBBVkVSUk9S KEVOT01FTSk7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIEJJT193cml0ZShjZXJ0 X2IsIGNlcnRfYnAuc3RyLCBjZXJ0X2JwLmxlbik7CisgICAgY2VydCA9IFBFTV9yZWFkX2Jpb19Y NTA5KGNlcnRfYiwgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgaWYgKCFjZXJ0KSB7CisgICAgICAg IGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJUTFM6IEZhaWxlZCB0byByZWFkIGNlcnRpZmlj YXRlIGZyb20gJXNcbiIsIGNlcnRfdXJsKTsKKyAgICAgICAgcmV0ID0gQVZFUlJPUihFSU8pOwor ICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICBrZXlfdGVtID0gcGtleV90b19wZW1fc3Ry aW5nKHBrZXkpOworICAgIGNlcnRfdGVtID0gY2VydF90b19wZW1fc3RyaW5nKGNlcnQpOworCisg ICAgc25wcmludGYoa2V5X2J1ZiwgIGtleV9zeiwgICIlcyIsIGtleV90ZW0pOworICAgIHNucHJp bnRmKGNlcnRfYnVmLCBjZXJ0X3N6LCAiJXMiLCBjZXJ0X3RlbSk7CisKKyAgICAvKiBHZW5lcmF0 ZSBmaW5nZXJwcmludC4gKi8KKyAgICAqZmluZ2VycHJpbnQgPSBnZW5lcmF0ZV9maW5nZXJwcmlu dChjZXJ0KTsKKyAgICBpZiAoISpmaW5nZXJwcmludCkgeworICAgICAgICBhdl9sb2coTlVMTCwg QVZfTE9HX0VSUk9SLCAiVExTOiBGYWlsZWQgdG8gZ2VuZXJhdGUgZmluZ2VycHJpbnQgZnJvbSAl c1xuIiwgY2VydF91cmwpOworICAgICAgICByZXQgPSBBVkVSUk9SKEVJTyk7CisgICAgICAgIGdv dG8gZW5kOworICAgIH0KKworZW5kOgorICAgIEJJT19mcmVlKGtleV9iKTsKKyAgICBhdl9icHJp bnRfZmluYWxpemUoJmtleV9icCwgTlVMTCk7CisgICAgQklPX2ZyZWUoY2VydF9iKTsKKyAgICBh dl9icHJpbnRfZmluYWxpemUoJmNlcnRfYnAsIE5VTEwpOworICAgIGlmIChrZXlfdGVtKSBhdl9m cmVlKGtleV90ZW0pOworICAgIGlmIChjZXJ0X3RlbSkgYXZfZnJlZShjZXJ0X3RlbSk7CisgICAg cmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvcGVuc3NsX2dlbl9wcml2YXRlX2tleShFVlBf UEtFWSAqKnBrZXksIEVDX0tFWSAqKmVja2V5KQoreworICAgIGludCByZXQgPSAwOworCisgICAg LyoqCisgICAgICogTm90ZSB0aGF0IHNlY3AyNTZyMSBpbiBvcGVuc3NsIGlzIGNhbGxlZCBOSURf WDlfNjJfcHJpbWUyNTZ2MSBvciBwcmltZTI1NnYxIGluIHN0cmluZywKKyAgICAgKiBub3QgTklE X3NlY3AyNTZrMSBvciBzZWNwMjU2azEgaW4gc3RyaW5nLgorICAgICAqCisgICAgICogVE9ETzog U2hvdWxkIGNob29zZSB0aGUgY3VydmVzIGluIENsaWVudEhlbGxvLnN1cHBvcnRlZF9ncm91cHMs IGZvciBleGFtcGxlOgorICAgICAqICAgICAgU3VwcG9ydGVkIEdyb3VwOiB4MjU1MTkgKDB4MDAx ZCkKKyAgICAgKiAgICAgIFN1cHBvcnRlZCBHcm91cDogc2VjcDI1NnIxICgweDAwMTcpCisgICAg ICogICAgICBTdXBwb3J0ZWQgR3JvdXA6IHNlY3AzODRyMSAoMHgwMDE4KQorICAgICAqLworI2lm IE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPCAweDMwMDAwMDAwTCAvKiBPcGVuU1NMIDMuMCAqLwor ICAgIEVDX0dST1VQICplY2dyb3VwID0gTlVMTDsKKyAgICBpbnQgY3VydmUgPSBOSURfWDlfNjJf cHJpbWUyNTZ2MTsKKyNlbHNlCisgICAgY29uc3QgY2hhciAqY3VydmUgPSBTTl9YOV82Ml9wcmlt ZTI1NnYxOworI2VuZGlmCisKKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgzMDAwMDAw MEwgLyogT3BlblNTTCAzLjAgKi8KKyAgICAqcGtleSA9IEVWUF9QS0VZX25ldygpOworICAgICpl Y2tleSA9IEVDX0tFWV9uZXcoKTsKKyAgICBlY2dyb3VwID0gRUNfR1JPVVBfbmV3X2J5X2N1cnZl X25hbWUoY3VydmUpOworICAgIGlmICghZWNncm91cCkgeworICAgICAgICBhdl9sb2cod2hpcCwg QVZfTE9HX0VSUk9SLCAiVExTOiBDcmVhdGUgRUMgZ3JvdXAgYnkgY3VydmU9JWQgZmFpbGVkLCAl cyIsIGN1cnZlLCBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSwgTlVMTCkpOworICAg ICAgICBnb3RvIGVpbnZhbF9lbmQ7CisgICAgfQorCisjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJF UiA8IDB4MTAxMDAwMDBMIC8vIHYxLjEueAorICAgIC8qIEZvciBvcGVuc3NsIDEuMCwgd2UgbXVz dCBzZXQgdGhlIGdyb3VwIHBhcmFtZXRlcnMsIHNvIHRoYXQgY2VydCBpcyBvay4gKi8KKyAgICBF Q19HUk9VUF9zZXRfYXNuMV9mbGFnKGVjZ3JvdXAsIE9QRU5TU0xfRUNfTkFNRURfQ1VSVkUpOwor I2VuZGlmCisKKyAgICBpZiAoRUNfS0VZX3NldF9ncm91cCgqZWNrZXksIGVjZ3JvdXApICE9IDEp IHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlRMUzogR2VuZXJhdGUgcHJp dmF0ZSBrZXksIEVDX0tFWV9zZXRfZ3JvdXAgZmFpbGVkLCAlc1xuIiwgRVJSX2Vycm9yX3N0cmlu ZyhFUlJfZ2V0X2Vycm9yKCksIE5VTEwpKTsKKyAgICAgICAgZ290byBlaW52YWxfZW5kOworICAg IH0KKworICAgIGlmIChFQ19LRVlfZ2VuZXJhdGVfa2V5KCplY2tleSkgIT0gMSkgeworICAgICAg ICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBHZW5lcmF0ZSBwcml2YXRlIGtleSwg RUNfS0VZX2dlbmVyYXRlX2tleSBmYWlsZWQsICVzXG4iLCBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9n ZXRfZXJyb3IoKSwgTlVMTCkpOworICAgICAgICBnb3RvIGVpbnZhbF9lbmQ7CisgICAgfQorCisg ICAgaWYgKEVWUF9QS0VZX3NldDFfRUNfS0VZKCpwa2V5LCAqZWNrZXkpICE9IDEpIHsKKyAgICAg ICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlRMUzogR2VuZXJhdGUgcHJpdmF0ZSBrZXks IEVWUF9QS0VZX3NldDFfRUNfS0VZIGZhaWxlZCwgJXNcbiIsIEVSUl9lcnJvcl9zdHJpbmcoRVJS X2dldF9lcnJvcigpLCBOVUxMKSk7CisgICAgICAgIGdvdG8gZWludmFsX2VuZDsKKyAgICB9Cisj ZWxzZQorICAgICpwa2V5ID0gRVZQX0VDX2dlbihjdXJ2ZSk7CisgICAgaWYgKCEqcGtleSkgewor ICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBHZW5lcmF0ZSBwcml2YXRl IGtleSwgRVZQX0VDX2dlbiBjdXJ2ZT0lcyBmYWlsZWQsICVzXG4iLCBjdXJ2ZSwgRVJSX2Vycm9y X3N0cmluZyhFUlJfZ2V0X2Vycm9yKCksIE5VTEwpKTsKKyAgICAgICAgZ290byBlaW52YWxfZW5k OworICAgIH0KKyNlbmRpZgorICAgIGdvdG8gZW5kOworCitlaW52YWxfZW5kOgorICAgIHJldCA9 IEFWRVJST1IoRUlOVkFMKTsKK2VuZDoKKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgz MDAwMDAwMEwgLyogT3BlblNTTCAzLjAgKi8KKyAgICBFQ19HUk9VUF9mcmVlKGVjZ3JvdXApOwor I2VuZGlmCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvcGVuc3NsX2dlbl9jZXJ0 aWZpY2F0ZShFVlBfUEtFWSAqcGtleSwgWDUwOSAqKmNlcnQsIGNoYXIgKipmaW5nZXJwcmludCkK K3sKKyAgICBpbnQgcmV0ID0gMCwgc2VyaWFsLCBleHBpcmVfZGF5OworICAgIGNvbnN0IGNoYXIg KmFvciA9ICJsYXZmIjsKKyAgICBYNTA5X05BTUUqIHN1YmplY3QgPSBOVUxMOworCisgICAgKmNl cnQ9IFg1MDlfbmV3KCk7CisgICAgaWYgKCEqY2VydCkgeworICAgICAgICBnb3RvIGVub21lbV9l bmQ7CisgICAgfQorCisgICAgLy8gVE9ETzogU3VwcG9ydCBub24tc2VsZi1zaWduZWQgY2VydGlm aWNhdGUsIGZvciBleGFtcGxlLCBsb2FkIGZyb20gYSBmaWxlLgorICAgIHN1YmplY3QgPSBYNTA5 X05BTUVfbmV3KCk7CisgICAgaWYgKCFzdWJqZWN0KSB7CisgICAgICAgIGdvdG8gZW5vbWVtX2Vu ZDsKKyAgICB9CisKKyAgICBzZXJpYWwgPSAoaW50KWF2X2dldF9yYW5kb21fc2VlZCgpOworICAg IGlmIChBU04xX0lOVEVHRVJfc2V0KFg1MDlfZ2V0X3NlcmlhbE51bWJlcigqY2VydCksIHNlcmlh bCkgIT0gMSkgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBGYWls ZWQgdG8gc2V0IHNlcmlhbCwgJXNcbiIsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigp LCBOVUxMKSk7CisgICAgICAgIGdvdG8gZWludmFsX2VuZDsKKyAgICB9CisKKyAgICBpZiAoWDUw OV9OQU1FX2FkZF9lbnRyeV9ieV90eHQoc3ViamVjdCwgIkNOIiwgTUJTVFJJTkdfQVNDLCBhb3Is IHN0cmxlbihhb3IpLCAtMSwgMCkgIT0gMSkgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9H X0VSUk9SLCAiVExTOiBGYWlsZWQgdG8gc2V0IENOLCAlc1xuIiwgRVJSX2Vycm9yX3N0cmluZyhF UlJfZ2V0X2Vycm9yKCksIE5VTEwpKTsKKyAgICAgICAgZ290byBlaW52YWxfZW5kOworICAgIH0K KworICAgIGlmIChYNTA5X3NldF9pc3N1ZXJfbmFtZSgqY2VydCwgc3ViamVjdCkgIT0gMSkgewor ICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBGYWlsZWQgdG8gc2V0IGlz c3VlciwgJXNcbiIsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLCBOVUxMKSk7Cisg ICAgICAgIGdvdG8gZWludmFsX2VuZDsKKyAgICB9CisgICAgaWYgKFg1MDlfc2V0X3N1YmplY3Rf bmFtZSgqY2VydCwgc3ViamVjdCkgIT0gMSkgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9H X0VSUk9SLCAiVExTOiBGYWlsZWQgdG8gc2V0IHN1YmplY3QgbmFtZSwgJXNcbiIsIEVSUl9lcnJv cl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLCBOVUxMKSk7CisgICAgICAgIGdvdG8gZWludmFsX2Vu ZDsKKyAgICB9CisKKyAgICBleHBpcmVfZGF5ID0gMzY1OworICAgIGlmICghWDUwOV9nbXRpbWVf YWRqKFg1MDlfZ2V0X25vdEJlZm9yZSgqY2VydCksIDApKSB7CisgICAgICAgIGF2X2xvZyhOVUxM LCBBVl9MT0dfRVJST1IsICJUTFM6IEZhaWxlZCB0byBzZXQgbm90QmVmb3JlLCAlc1xuIiwgRVJS X2Vycm9yX3N0cmluZyhFUlJfZ2V0X2Vycm9yKCksIE5VTEwpKTsKKyAgICAgICAgZ290byBlaW52 YWxfZW5kOworICAgIH0KKyAgICBpZiAoIVg1MDlfZ210aW1lX2FkaihYNTA5X2dldF9ub3RBZnRl cigqY2VydCksIDYwKjYwKjI0KmV4cGlyZV9kYXkpKSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfRVJST1IsICJUTFM6IEZhaWxlZCB0byBzZXQgbm90QWZ0ZXIsICVzXG4iLCBFUlJfZXJy b3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSwgTlVMTCkpOworICAgICAgICBnb3RvIGVpbnZhbF9l bmQ7CisgICAgfQorCisgICAgaWYgKFg1MDlfc2V0X3ZlcnNpb24oKmNlcnQsIDIpICE9IDEpIHsK KyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlRMUzogRmFpbGVkIHRvIHNldCB2 ZXJzaW9uLCAlc1xuIiwgRVJSX2Vycm9yX3N0cmluZyhFUlJfZ2V0X2Vycm9yKCksIE5VTEwpKTsK KyAgICAgICAgZ290byBlaW52YWxfZW5kOworICAgIH0KKworICAgIGlmIChYNTA5X3NldF9wdWJr ZXkoKmNlcnQsIHBrZXkpICE9IDEpIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJP UiwgIlRMUzogRmFpbGVkIHRvIHNldCBwdWJsaWMga2V5LCAlc1xuIiwgRVJSX2Vycm9yX3N0cmlu ZyhFUlJfZ2V0X2Vycm9yKCksIE5VTEwpKTsKKyAgICAgICAgZ290byBlaW52YWxfZW5kOworICAg IH0KKworICAgIGlmICghWDUwOV9zaWduKCpjZXJ0LCBwa2V5LCBFVlBfc2hhMSgpKSkgeworICAg ICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBGYWlsZWQgdG8gc2lnbiBjZXJ0 aWZpY2F0ZSwgJXNcbiIsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLCBOVUxMKSk7 CisgICAgICAgIGdvdG8gZWludmFsX2VuZDsKKyAgICB9CisKKyAgICAqZmluZ2VycHJpbnQgPSBn ZW5lcmF0ZV9maW5nZXJwcmludCgqY2VydCk7CisgICAgaWYgKCEqZmluZ2VycHJpbnQpIHsKKyAg ICAgICAgZ290byBlbm9tZW1fZW5kOworICAgIH0KKworICAgIGdvdG8gZW5kOworZW5vbWVtX2Vu ZDoKKyAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgZ290byBlbmQ7CitlaW52YWxfZW5k OgorICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKK2VuZDoKKyAgICBYNTA5X05BTUVfZnJlZShz dWJqZWN0KTsKKyAgICAvL2F2X2JwcmludF9maW5hbGl6ZSgmZmluZ2VycHJpbnQsIE5VTEwpOwor ICAgIHJldHVybiByZXQ7Cit9CisKK2ludCBmZl9zc2xfZ2VuX2tleV9jZXJ0KGNoYXIgKmtleV9i dWYsIHNpemVfdCBrZXlfc3osIGNoYXIgKmNlcnRfYnVmLCBzaXplX3QgY2VydF9zeiwgY2hhciAq KmZpbmdlcnByaW50KQoreworICAgIGludCByZXQgPSAwOworICAgIEVWUF9QS0VZICpwa2V5ID0g TlVMTDsKKyAgICBFQ19LRVkgKmVjX2tleSA9IE5VTEw7CisgICAgWDUwOSAqY2VydCA9IE5VTEw7 CisgICAgY2hhciAqa2V5X3RlbSA9IE5VTEwsICpjZXJ0X3RlbSA9IE5VTEw7CisKKyAgICByZXQg PSBvcGVuc3NsX2dlbl9wcml2YXRlX2tleSgmcGtleSwgJmVjX2tleSk7CisgICAgaWYgKHJldCA8 IDApIGdvdG8gZXJyb3I7CisKKyAgICByZXQgPSBvcGVuc3NsX2dlbl9jZXJ0aWZpY2F0ZShwa2V5 LCAmY2VydCwgZmluZ2VycHJpbnQpOworICAgIGlmIChyZXQgPCAwKSBnb3RvIGVycm9yOworCisg ICAga2V5X3RlbSA9IHBrZXlfdG9fcGVtX3N0cmluZyhwa2V5KTsKKyAgICBjZXJ0X3RlbSA9IGNl cnRfdG9fcGVtX3N0cmluZyhjZXJ0KTsKKworICAgIHNucHJpbnRmKGtleV9idWYsICBrZXlfc3os ICAiJXMiLCBrZXlfdGVtKTsKKyAgICBzbnByaW50ZihjZXJ0X2J1ZiwgY2VydF9zeiwgIiVzIiwg Y2VydF90ZW0pOworCisgICAgaWYgKGtleV90ZW0pIGF2X2ZyZWUoa2V5X3RlbSk7CisgICAgaWYg KGNlcnRfdGVtKSBhdl9mcmVlKGNlcnRfdGVtKTsKK2Vycm9yOgorICAgIHJldHVybiByZXQ7Cit9 CisKKworLyoqCisgKiBEZXNlcmlhbGl6ZSBhIFBFTeKAkGVuY29kZWQgcHJpdmF0ZSBvciBwdWJs aWMga2V5IGZyb20gYSBOVUwtdGVybWluYXRlZCBDIHN0cmluZy4KKyAqCisgKiBAcGFyYW0gcGVt X3N0ciAgIFRoZSBQRU0gdGV4dCwgZS5nLgorICogICAgICAgICAgICAgICAgICAiLS0tLS1CRUdJ TiBQUklWQVRFIEtFWS0tLS0tXG7igKZcbi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS1cbiIKKyAq IEBwYXJhbSBpc19wcml2ICAgSWYgbm9uLXplcm8sIHBhcnNlIGFzIGEgUFJJVkFURSBrZXk7IG90 aGVyd2lzZSwgcGFyc2UgYXMgYSBQVUJMSUMga2V5LgorICogQHJldHVybiAgICAgICAgICBFVlBf UEtFWSogb24gc3VjY2VzcyAobXVzdCBFVlBfUEtFWV9mcmVlKCkpLCBvciBOVUxMIG9uIGVycm9y LgorICovCitzdGF0aWMgRVZQX1BLRVkgKnBrZXlfZnJvbV9wZW1fc3RyaW5nKGNvbnN0IGNoYXIg KnBlbV9zdHIsIGludCBpc19wcml2KQoreworICAgIEJJTyAqbWVtID0gQklPX25ld19tZW1fYnVm KHBlbV9zdHIsIC0xKTsKKyAgICBpZiAoIW1lbSkgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZf TE9HX0VSUk9SLCAiQklPX25ld19tZW1fYnVmIGZhaWxlZFxuIik7CisgICAgICAgIHJldHVybiBO VUxMOworICAgIH0KKworICAgIEVWUF9QS0VZICpwa2V5ID0gTlVMTDsKKyAgICBpZiAoaXNfcHJp dikgeworICAgICAgICBwa2V5ID0gUEVNX3JlYWRfYmlvX1ByaXZhdGVLZXkobWVtLCBOVUxMLCBO VUxMLCBOVUxMKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwa2V5ID0gUEVNX3JlYWRfYmlvX1BV QktFWShtZW0sIE5VTEwsIE5VTEwsIE5VTEwpOworICAgIH0KKworICAgIGlmICghcGtleSkKKyAg ICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBwYXJzZSAlcyBrZXkg ZnJvbSBzdHJpbmdcbiIsCisgICAgICAgICAgICAgIGlzX3ByaXYgPyAicHJpdmF0ZSIgOiAicHVi bGljIik7CisKKyAgICBCSU9fZnJlZShtZW0pOworICAgIHJldHVybiBwa2V5OworfQorCisvKioK KyAqIERlc2VyaWFsaXplIGEgUEVN4oCQZW5jb2RlZCBjZXJ0aWZpY2F0ZSBmcm9tIGEgTlVMLXRl cm1pbmF0ZWQgQyBzdHJpbmcuCisgKgorICogQHBhcmFtIHBlbV9zdHIgICBUaGUgUEVNIHRleHQs IGUuZy4KKyAqICAgICAgICAgICAgICAgICAgIi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVxu 4oCmXG4tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tXG4iCisgKiBAcmV0dXJuICAgICAgICAgIFg1 MDkqIG9uIHN1Y2Nlc3MgKG11c3QgWDUwOV9mcmVlKCkpLCBvciBOVUxMIG9uIGVycm9yLgorICov CitzdGF0aWMgWDUwOSAqY2VydF9mcm9tX3BlbV9zdHJpbmcoY29uc3QgY2hhciAqcGVtX3N0cikK K3sKKyAgICBCSU8gKm1lbSA9IEJJT19uZXdfbWVtX2J1ZihwZW1fc3RyLCAtMSk7CisgICAgaWYg KCFtZW0pIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkJJT19uZXdfbWVt X2J1ZiBmYWlsZWRcbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBYNTA5 ICpjZXJ0ID0gUEVNX3JlYWRfYmlvX1g1MDkobWVtLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICBp ZiAoIWNlcnQpIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0 byBwYXJzZSBjZXJ0aWZpY2F0ZSBmcm9tIHN0cmluZ1xuIik7CisgICAgICAgIHJldHVybiBOVUxM OworICAgIH0KKworICAgIEJJT19mcmVlKG1lbSk7CisgICAgcmV0dXJuIGNlcnQ7Cit9CisKKwog dHlwZWRlZiBzdHJ1Y3QgVExTQ29udGV4dCB7CiAgICAgY29uc3QgQVZDbGFzcyAqY2xhc3M7CiAg ICAgVExTU2hhcmVkIHRsc19zaGFyZWQ7CkBAIC0zOCw4ICs0NzEsNTYgQEAgdHlwZWRlZiBzdHJ1 Y3QgVExTQ29udGV4dCB7CiAgICAgQklPX01FVEhPRCogdXJsX2Jpb19tZXRob2Q7CiAjZW5kaWYK ICAgICBpbnQgaW9fZXJyOworICAgIGNoYXIgZXJyb3JfbWVzc2FnZVsyNTZdOwogfSBUTFNDb250 ZXh0OwogCisvKioKKyAqIFJldHJpZXZlcyB0aGUgZXJyb3IgbWVzc2FnZSBmb3IgdGhlIGxhdGVz dCBPcGVuU1NMIGVycm9yLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBlcnJv ciBjb2RlIGZyb20gdGhlIHRocmVhZCdzIGVycm9yIHF1ZXVlLCBjb252ZXJ0cyBpdAorICogdG8g YSBodW1hbi1yZWFkYWJsZSBzdHJpbmcsIGFuZCBzdG9yZXMgaXQgaW4gdGhlIFRMU0NvbnRleHQn cyBlcnJvcl9tZXNzYWdlIGZpZWxkLgorICogVGhlIGVycm9yIHF1ZXVlIGlzIHRoZW4gY2xlYXJl ZCB1c2luZyBFUlJfY2xlYXJfZXJyb3IoKS4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIqIG9wZW5z c2xfZ2V0X2Vycm9yKFRMU0NvbnRleHQgKmN0eCkKK3sKKyAgICBpbnQgcjIgPSBFUlJfZ2V0X2Vy cm9yKCk7CisgICAgaWYgKHIyKSB7CisgICAgICAgIEVSUl9lcnJvcl9zdHJpbmdfbihyMiwgY3R4 LT5lcnJvcl9tZXNzYWdlLCBzaXplb2YoY3R4LT5lcnJvcl9tZXNzYWdlKSk7CisgICAgfSBlbHNl CisgICAgICAgIGN0eC0+ZXJyb3JfbWVzc2FnZVswXSA9ICdcMCc7CisKKyAgICBFUlJfY2xlYXJf ZXJyb3IoKTsKKyAgICByZXR1cm4gY3R4LT5lcnJvcl9tZXNzYWdlOworfQorCitpbnQgZmZfZHRs c19zZXRfdWRwKFVSTENvbnRleHQgKmgsIFVSTENvbnRleHQgKnVkcCkKK3sKKyAgICBUTFNDb250 ZXh0ICpjID0gaC0+cHJpdl9kYXRhOworICAgIGMtPnRsc19zaGFyZWQudWRwID0gdWRwOworICAg IHJldHVybiAwOworfQorCitpbnQgZmZfZHRsc19leHBvcnRfbWF0ZXJpYWxzKFVSTENvbnRleHQg KmgsIGNoYXIgKmR0bHNfc3J0cF9tYXRlcmlhbHMsIHNpemVfdCBtYXRlcmlhbHNfc3opCit7Cisg ICAgaW50IHJldCA9IDA7CisgICAgY29uc3QgY2hhciogZHN0ID0gIkVYVFJBQ1RPUi1kdGxzX3Ny dHAiOworICAgIFRMU0NvbnRleHQgKmMgPSBoLT5wcml2X2RhdGE7CisKKyAgICByZXQgPSBTU0xf ZXhwb3J0X2tleWluZ19tYXRlcmlhbChjLT5zc2wsIGR0bHNfc3J0cF9tYXRlcmlhbHMsIG1hdGVy aWFsc19zeiwKKyAgICAgICAgZHN0LCBzdHJsZW4oZHN0KSwgTlVMTCwgMCwgMCk7CisgICAgaWYg KCFyZXQpIHsKKyAgICAgICAgYXZfbG9nKGMsIEFWX0xPR19FUlJPUiwgIlRMUzogRmFpbGVkIHRv IGV4cG9ydCBTUlRQIG1hdGVyaWFsLCAlc1xuIiwgb3BlbnNzbF9nZXRfZXJyb3IoYykpOworICAg ICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitpbnQgZmZfZHRsc19z dGF0ZShVUkxDb250ZXh0ICpoKQoreworICAgIFRMU0NvbnRleHQgKmMgPSBoLT5wcml2X2RhdGE7 CisgICAgcmV0dXJuIGMtPnRsc19zaGFyZWQuc3RhdGU7Cit9CisKIC8qIE9wZW5TU0wgMS4wLjIg b3IgYmVsb3csIHRoZW4geW91IHdvdWxkIHVzZSBTU0xfbGlicmFyeV9pbml0LiBJZiB5b3UgYXJl CiAgKiB1c2luZyBPcGVuU1NMIDEuMS4wIG9yIGFib3ZlLCB0aGVuIHRoZSBsaWJyYXJ5IHdpbGwg aW5pdGlhbGl6ZQogICogaXRzZWxmIGF1dG9tYXRpY2FsbHkuCkBAIC0xMjEsNyArNjAyLDcgQEAg dm9pZCBmZl9vcGVuc3NsX2RlaW5pdCh2b2lkKQogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgcHJp bnRfdGxzX2Vycm9yKFVSTENvbnRleHQgKmgsIGludCByZXQpCitzdGF0aWMgaW50IHByaW50X3Nz bF9lcnJvcihVUkxDb250ZXh0ICpoLCBpbnQgcmV0KQogewogICAgIFRMU0NvbnRleHQgKmMgPSBo LT5wcml2X2RhdGE7CiAgICAgaW50IHByaW50ZWQgPSAwLCBlLCBhdmVyciA9IEFWRVJST1IoRUlP KTsKQEAgLTE5Myw3ICs2NzQsNyBAQCBzdGF0aWMgaW50IHVybF9iaW9fZGVzdHJveShCSU8gKmIp CiBzdGF0aWMgaW50IHVybF9iaW9fYnJlYWQoQklPICpiLCBjaGFyICpidWYsIGludCBsZW4pCiB7 CiAgICAgVExTQ29udGV4dCAqYyA9IEdFVF9CSU9fREFUQShiKTsKLSAgICBpbnQgcmV0ID0gZmZ1 cmxfcmVhZChjLT50bHNfc2hhcmVkLnRjcCwgYnVmLCBsZW4pOworICAgIGludCByZXQgPSBmZnVy bF9yZWFkKGMtPnRsc19zaGFyZWQuaXNfZHRscyA/IGMtPnRsc19zaGFyZWQudWRwIDogYy0+dGxz X3NoYXJlZC50Y3AsIGJ1ZiwgbGVuKTsKICAgICBpZiAocmV0ID49IDApCiAgICAgICAgIHJldHVy biByZXQ7CiAgICAgQklPX2NsZWFyX3JldHJ5X2ZsYWdzKGIpOwpAQCAtMjA5LDcgKzY5MCw3IEBA IHN0YXRpYyBpbnQgdXJsX2Jpb19icmVhZChCSU8gKmIsIGNoYXIgKmJ1ZiwgaW50IGxlbikKIHN0 YXRpYyBpbnQgdXJsX2Jpb19id3JpdGUoQklPICpiLCBjb25zdCBjaGFyICpidWYsIGludCBsZW4p CiB7CiAgICAgVExTQ29udGV4dCAqYyA9IEdFVF9CSU9fREFUQShiKTsKLSAgICBpbnQgcmV0ID0g ZmZ1cmxfd3JpdGUoYy0+dGxzX3NoYXJlZC50Y3AsIGJ1ZiwgbGVuKTsKKyAgICBpbnQgcmV0ID0g ZmZ1cmxfd3JpdGUoYy0+dGxzX3NoYXJlZC5pc19kdGxzID8gYy0+dGxzX3NoYXJlZC51ZHAgOiBj LT50bHNfc2hhcmVkLnRjcCwgYnVmLCBsZW4pOwogICAgIGlmIChyZXQgPj0gMCkKICAgICAgICAg cmV0dXJuIHJldDsKICAgICBCSU9fY2xlYXJfcmV0cnlfZmxhZ3MoYik7CkBAIC0yNTAsMTEgKzcz MSwzMDAgQEAgc3RhdGljIEJJT19NRVRIT0QgdXJsX2Jpb19tZXRob2QgPSB7CiB9OwogI2VuZGlm CiAKK3N0YXRpYyBhdl9jb2xkIHZvaWQgaW5pdF9iaW9fbWV0aG9kKFVSTENvbnRleHQgKmgpCit7 CisgICAgVExTQ29udGV4dCAqcCA9IGgtPnByaXZfZGF0YTsKKyAgICBCSU8gKmJpbzsKKyNpZiBP UEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAxMDAwMGZMCisgICAgcC0+dXJsX2Jpb19tZXRo b2QgPSBCSU9fbWV0aF9uZXcoQklPX1RZUEVfU09VUkNFX1NJTkssICJ1cmxwcm90b2NvbCBiaW8i KTsKKyAgICBCSU9fbWV0aF9zZXRfd3JpdGUocC0+dXJsX2Jpb19tZXRob2QsIHVybF9iaW9fYndy aXRlKTsKKyAgICBCSU9fbWV0aF9zZXRfcmVhZChwLT51cmxfYmlvX21ldGhvZCwgdXJsX2Jpb19i cmVhZCk7CisgICAgQklPX21ldGhfc2V0X3B1dHMocC0+dXJsX2Jpb19tZXRob2QsIHVybF9iaW9f YnB1dHMpOworICAgIEJJT19tZXRoX3NldF9jdHJsKHAtPnVybF9iaW9fbWV0aG9kLCB1cmxfYmlv X2N0cmwpOworICAgIEJJT19tZXRoX3NldF9jcmVhdGUocC0+dXJsX2Jpb19tZXRob2QsIHVybF9i aW9fY3JlYXRlKTsKKyAgICBCSU9fbWV0aF9zZXRfZGVzdHJveShwLT51cmxfYmlvX21ldGhvZCwg dXJsX2Jpb19kZXN0cm95KTsKKyAgICBiaW8gPSBCSU9fbmV3KHAtPnVybF9iaW9fbWV0aG9kKTsK KyAgICBCSU9fc2V0X2RhdGEoYmlvLCBwKTsKKyNlbHNlCisgICAgYmlvID0gQklPX25ldygmdXJs X2Jpb19tZXRob2QpOworICAgIGJpby0+cHRyID0gcDsKKyNlbmRpZgorICAgIFNTTF9zZXRfYmlv KHAtPnNzbCwgYmlvLCBiaW8pOworfQorCitzdGF0aWMgdm9pZCBvcGVuc3NsX2luZm9fY2FsbGJh Y2soY29uc3QgU1NMICpzc2wsIGludCB3aGVyZSwgaW50IHJldCkgeworICAgIGNvbnN0IGNoYXIg Km1ldGhvZCA9ICJ1bmRlZmluZWQiOworICAgIFRMU0NvbnRleHQgKmN0eCA9IChUTFNDb250ZXh0 KilTU0xfZ2V0X2V4X2RhdGEoc3NsLCAwKTsKKworICAgIGlmICh3aGVyZSAmIFNTTF9TVF9DT05O RUNUKSB7CisgICAgICAgIG1ldGhvZCA9ICJTU0xfY29ubmVjdCI7CisgICAgfSBlbHNlIGlmICh3 aGVyZSAmIFNTTF9TVF9BQ0NFUFQpCisgICAgICAgIG1ldGhvZCA9ICJTU0xfYWNjZXB0IjsKKwor ICAgIGlmICh3aGVyZSAmIFNTTF9DQl9MT09QKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xP R19ERUJVRywgIkluZm8gbWV0aG9kPSVzIHN0YXRlPSVzKCVzKSwgd2hlcmU9JWQsIHJldD0lZFxu IiwKKyAgICAgICAgICAgICAgIG1ldGhvZCwgU1NMX3N0YXRlX3N0cmluZyhzc2wpLCBTU0xfc3Rh dGVfc3RyaW5nX2xvbmcoc3NsKSwgd2hlcmUsIHJldCk7CisgICAgfSBlbHNlIGlmICh3aGVyZSAm IFNTTF9DQl9BTEVSVCkgeworICAgICAgICBtZXRob2QgPSAod2hlcmUgJiBTU0xfQ0JfUkVBRCkg PyAicmVhZCI6IndyaXRlIjsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiQWxl cnQgbWV0aG9kPSVzIHN0YXRlPSVzKCVzKSwgd2hlcmU9JWQsIHJldD0lZFxuIiwKKyAgICAgICAg ICAgICAgIG1ldGhvZCwgU1NMX3N0YXRlX3N0cmluZyhzc2wpLCBTU0xfc3RhdGVfc3RyaW5nX2xv bmcoc3NsKSwgd2hlcmUsIHJldCk7CisgICAgfQorfQorCisvKioKKyAqIEFsd2F5cyByZXR1cm4g MSB0byBhY2NlcHQgYW55IGNlcnRpZmljYXRlLiBUaGlzIGlzIGJlY2F1c2Ugd2UgYWxsb3cgdGhl IHBlZXIgdG8KKyAqIHVzZSBhIHRlbXBvcmFyeSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSBmb3Ig RFRMUy4KKyAqLworc3RhdGljIGludCBvcGVuc3NsX2R0bHNfdmVyaWZ5X2NhbGxiYWNrKGludCBw cmV2ZXJpZnlfb2ssIFg1MDlfU1RPUkVfQ1RYICpjdHgpCit7CisgICAgcmV0dXJuIDE7Cit9CisK K3N0YXRpYyBpbnQgZHRsc19oYW5kc2hha2UoVVJMQ29udGV4dCAqaCkKK3sKKyAgICBpbnQgcmV0 ID0gMCwgcjAsIHIxOworICAgIFRMU0NvbnRleHQgKnAgPSBoLT5wcml2X2RhdGE7CisKKyAgICBy MCA9IFNTTF9kb19oYW5kc2hha2UocC0+c3NsKTsKKyAgICByMSA9IFNTTF9nZXRfZXJyb3IocC0+ c3NsLCByMCk7CisgICAgaWYgKHIwIDw9IDApIHsKKyAgICAgICAgaWYgKHIxICE9IFNTTF9FUlJP Ul9XQU5UX1JFQUQgJiYgcjEgIT0gU1NMX0VSUk9SX1dBTlRfV1JJVEUgJiYgcjEgIT0gU1NMX0VS Uk9SX1pFUk9fUkVUVVJOKSB7CisgICAgICAgICAgICBhdl9sb2cocCwgQVZfTE9HX0VSUk9SLCAi VExTOiBSZWFkIGZhaWxlZCwgcjA9JWQsIHIxPSVkICVzXG4iLCByMCwgcjEsIG9wZW5zc2xfZ2V0 X2Vycm9yKHApKTsKKyAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRUlPKTsKKyAgICAgICAgICAg IGdvdG8gZW5kOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXZfbG9nKHAsIEFW X0xPR19UUkFDRSwgIlRMUzogUmVhZCAlZCBieXRlcywgcjA9JWQsIHIxPSVkXG4iLCByMCwgcjAs IHIxKTsKKyAgICB9CisKKyAgICAvKiBDaGVjayB3aGV0aGVyIHRoZSBEVExTIGlzIGNvbXBsZXRl ZC4gKi8KKyAgICBpZiAoU1NMX2lzX2luaXRfZmluaXNoZWQocC0+c3NsKSAhPSAxKQorICAgICAg ICBnb3RvIGVuZDsKKworICAgIHAtPnRsc19zaGFyZWQuc3RhdGUgPSBEVExTX1NUQVRFX0ZJTklT SEVEOworZW5kOgorICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBhdl9jb2xkIGludCBvcGVu c3NsX2luaXRfY2Ffa2V5X2NlcnQoVVJMQ29udGV4dCAqaCkKK3sKKyAgICBpbnQgcmV0OworICAg IFRMU0NvbnRleHQgKnAgPSBoLT5wcml2X2RhdGE7CisgICAgVExTU2hhcmVkICpjID0gJnAtPnRs c19zaGFyZWQ7CisgICAgRVZQX1BLRVkgKnBrZXkgPSBOVUxMOworICAgIFg1MDkgKmNlcnQgPSBO VUxMOworICAgIC8qIHNldHVwIGNhLCBwcml2YXRlIGtleSwgY2VydGlmaWNhdGUgKi8KKyAgICBp ZiAoYy0+Y2FfZmlsZSkgeworICAgICAgICBpZiAoIVNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRp b25zKHAtPmN0eCwgYy0+Y2FfZmlsZSwgTlVMTCkpCisgICAgICAgICAgICBhdl9sb2coaCwgQVZf TE9HX0VSUk9SLCAiU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMgJXNcbiIsIG9wZW5zc2xf Z2V0X2Vycm9yKHApKTsKKyAgICB9CisKKyAgICBpZiAoYy0+Y2VydF9maWxlKSB7CisgICAgICAg IHJldCA9IFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2NoYWluX2ZpbGUocC0+Y3R4LCBjLT5jZXJ0 X2ZpbGUpOworICAgICAgICBpZiAocmV0IDw9IDApIHsKKyAgICAgICAgICAgIGF2X2xvZyhoLCBB Vl9MT0dfRVJST1IsICJVbmFibGUgdG8gbG9hZCBjZXJ0IGZpbGUgJXM6ICVzXG4iLAorICAgICAg ICAgICAgICAgYy0+Y2VydF9maWxlLCBvcGVuc3NsX2dldF9lcnJvcihwKSk7CisgICAgICAgICAg ICByZXQgPSBBVkVSUk9SKEVJTyk7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0K KyAgICB9IGVsc2UgaWYgKHAtPnRsc19zaGFyZWQuY2VydF9idWYpIHsKKyAgICAgICAgY2VydCA9 IGNlcnRfZnJvbV9wZW1fc3RyaW5nKHAtPnRsc19zaGFyZWQuY2VydF9idWYpOworICAgICAgICBp ZiAoU1NMX0NUWF91c2VfY2VydGlmaWNhdGUocC0+Y3R4LCBjZXJ0KSAhPSAxKSB7CisgICAgICAg ICAgICBhdl9sb2cocCwgQVZfTE9HX0VSUk9SLCAiU1NMOiBJbml0IFNTTF9DVFhfdXNlX2NlcnRp ZmljYXRlIGZhaWxlZCwgJXNcbiIsIG9wZW5zc2xfZ2V0X2Vycm9yKHApKTsKKyAgICAgICAgICAg IHJldCA9IEFWRVJST1IoRUlOVkFMKTsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAg IH0KKyAgICB9IGVsc2UgaWYgKHAtPnRsc19zaGFyZWQuaXNfZHRscyl7CisgICAgICAgIGF2X2xv ZyhwLCBBVl9MT0dfRVJST1IsICJUTFM6IEluaXQgY2VydCBmYWlsZWQsICVzXG4iLCBvcGVuc3Ns X2dldF9lcnJvcihwKSk7CisgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKKyAgICAgICAg Z290byBmYWlsOworICAgIH0KKworICAgIGlmIChjLT5rZXlfZmlsZSkgeworICAgICAgICByZXQg PSBTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2ZpbGUocC0+Y3R4LCBjLT5rZXlfZmlsZSwgU1NMX0ZJ TEVUWVBFX1BFTSk7CisgICAgICAgIGlmIChyZXQgPD0gMCkgeworICAgICAgICAgICAgYXZfbG9n KGgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBsb2FkIGtleSBmaWxlICVzOiAlc1xuIiwKKyAg ICAgICAgICAgICAgICBjLT5rZXlfZmlsZSwgb3BlbnNzbF9nZXRfZXJyb3IocCkpOworICAgICAg ICAgICAgcmV0ID0gQVZFUlJPUihFSU8pOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAg ICB9CisgICAgfSBlbHNlIGlmIChwLT50bHNfc2hhcmVkLmtleV9idWYpIHsKKyAgICAgICAgcGtl eSA9IHBrZXlfZnJvbV9wZW1fc3RyaW5nKHAtPnRsc19zaGFyZWQua2V5X2J1ZiwgMSk7CisgICAg ICAgIGlmIChTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5KHAtPmN0eCwgcGtleSkgIT0gMSkgeworICAg ICAgICAgICAgYXZfbG9nKHAsIEFWX0xPR19FUlJPUiwgIlRMUzogSW5pdCBTU0xfQ1RYX3VzZV9Q cml2YXRlS2V5IGZhaWxlZCwgJXNcbiIsIG9wZW5zc2xfZ2V0X2Vycm9yKHApKTsKKyAgICAgICAg ICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAg ICAgIH0KKyAgICB9IGVsc2UgaWYgKHAtPnRsc19zaGFyZWQuaXNfZHRscyl7CisgICAgICAgIGF2 X2xvZyhwLCBBVl9MT0dfRVJST1IsICJUTFM6IEluaXQgcGtleSBmYWlsZWQsICVzXG4iLCBvcGVu c3NsX2dldF9lcnJvcihwKSk7CisgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKKyAgICAg ICAgZ290byBmYWlsOworICAgIH0KKyAgICByZXQgPSAwOworZmFpbDoKKyAgICByZXR1cm4gcmV0 OworfQorCisvKioKKyAqIE9uY2UgdGhlIERUTFMgcm9sZSBoYXMgYmVlbiBuZWdvdGlhdGVkIC0g YWN0aXZlIGZvciB0aGUgRFRMUyBjbGllbnQgb3IgcGFzc2l2ZSBmb3IgdGhlCisgKiBEVExTIHNl cnZlciAtIHdlIHByb2NlZWQgdG8gc2V0IHVwIHRoZSBEVExTIHN0YXRlIGFuZCBpbml0aWF0ZSB0 aGUgaGFuZHNoYWtlLgorICovCitzdGF0aWMgaW50IGR0bHNfc3RhcnQoVVJMQ29udGV4dCAqaCwg Y29uc3QgY2hhciAqdXJsLCBpbnQgZmxhZ3MsIEFWRGljdGlvbmFyeSAqKm9wdGlvbnMpCit7Cisg ICAgVExTQ29udGV4dCAqcCA9IGgtPnByaXZfZGF0YTsKKyAgICBUTFNTaGFyZWQgKmMgPSAmcC0+ dGxzX3NoYXJlZDsKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBjLT5pc19kdGxzID0gMTsKKyAgICBj b25zdCBjaGFyKiBjaXBoZXJzID0gIkFMTCI7CisgICAgLyoqCisgICAgICogVGhlIHByb2ZpbGUg Zm9yIE9wZW5TU0wncyBTUlRQIGlzIFNSVFBfQUVTMTI4X0NNX1NIQTFfODAsIHNlZSBzc2wvZDFf c3J0cC5jLgorICAgICAqIFRoZSBwcm9maWxlIGZvciBGRm1wZWcncyBTUlRQIGlzIFNSVFBfQUVT MTI4X0NNX0hNQUNfU0hBMV84MCwgc2VlIGxpYmF2Zm9ybWF0L3NydHAuYy4KKyAgICAgKi8KKyAg ICBjb25zdCBjaGFyKiBwcm9maWxlcyA9ICJTUlRQX0FFUzEyOF9DTV9TSEExXzgwIjsKKyAgICAv KiBSZWZlciB0byB0aGUgdGVzdCBjYXNlcyByZWdhcmRpbmcgdGhlc2UgY3VydmVzIGluIHRoZSBX ZWJSVEMgY29kZS4gKi8KKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAxMDAwMDBM IC8qIE9wZW5TU0wgMS4xLjAgKi8KKyAgICBjb25zdCBjaGFyKiBjdXJ2ZXMgPSAiWDI1NTE5OlAt MjU2OlAtMzg0OlAtNTIxIjsKKyNlbGlmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDAw MjAwMEwgLyogT3BlblNTTCAxLjAuMiAqLworICAgIGNvbnN0IGNoYXIqIGN1cnZlcyA9ICJQLTI1 NjpQLTM4NDpQLTUyMSI7CisjZW5kaWYKKworI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPCAw eDEwMDAyMDAwTCAvKiBPcGVuU1NMIHYxLjAuMiAqLworICAgIHAtPmN0eCA9IFNTTF9DVFhfbmV3 KERUTFN2MV9tZXRob2QoKSk7CisjZWxzZQorICAgIHAtPmN0eCA9IFNTTF9DVFhfbmV3KERUTFNf bWV0aG9kKCkpOworI2VuZGlmCisgICAgaWYgKCFwLT5jdHgpIHsKKyAgICAgICAgcmV0ID0gQVZF UlJPUihFTk9NRU0pOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisjaWYgT1BFTlNTTF9W RVJTSU9OX05VTUJFUiA+PSAweDEwMDAyMDAwTCAvKiBPcGVuU1NMIDEuMC4yICovCisgICAgLyog Rm9yIEVDRFNBLCB3ZSBjb3VsZCBzZXQgdGhlIGN1cnZlcyBsaXN0LiAqLworICAgIGlmIChTU0xf Q1RYX3NldDFfY3VydmVzX2xpc3QocC0+Y3R4LCBjdXJ2ZXMpICE9IDEpIHsKKyAgICAgICAgYXZf bG9nKHAsIEFWX0xPR19FUlJPUiwgIlRMUzogSW5pdCBTU0xfQ1RYX3NldDFfY3VydmVzX2xpc3Qg ZmFpbGVkLCBjdXJ2ZXM9JXMsICVzXG4iLAorICAgICAgICAgICAgY3VydmVzLCBvcGVuc3NsX2dl dF9lcnJvcihwKSk7CisgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKKyAgICAgICAgcmV0 dXJuIHJldDsKKyAgICB9CisjZW5kaWYKKworI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPCAw eDEwMTAwMDAwTCAvLyB2MS4xLngKKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgxMDAw MjAwMEwgLy8gdjEuMC4yCisgICAgaWYgKGN0eC0+ZHRsc19lY2tleSkKKyAgICAgICAgU1NMX0NU WF9zZXRfdG1wX2VjZGgocC0+Y3R4LCBwLT5kdGxzX2Vja2V5KTsKKyNlbHNlCisgICAgU1NMX0NU WF9zZXRfZWNkaF9hdXRvKHAtPmN0eCwgMSk7CisjZW5kaWYKKyNlbmRpZgorCisgICAgLyoqCisg ICAgICogV2UgYWN0aXZhdGUgIkFMTCIgY2lwaGVyIHN1aXRlcyB0byBhbGlnbiB3aXRoIHRoZSBw ZWVyJ3MgY2FwYWJpbGl0aWVzLAorICAgICAqIGVuc3VyaW5nIG1heGltdW0gY29tcGF0aWJpbGl0 eS4KKyAgICAgKi8KKyAgICBpZiAoU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3QocC0+Y3R4LCBjaXBo ZXJzKSAhPSAxKSB7CisgICAgICAgIGF2X2xvZyhwLCBBVl9MT0dfRVJST1IsICJUTFM6IEluaXQg U1NMX0NUWF9zZXRfY2lwaGVyX2xpc3QgZmFpbGVkLCBjaXBoZXJzPSVzLCAlc1xuIiwKKyAgICAg ICAgICAgIGNpcGhlcnMsIG9wZW5zc2xfZ2V0X2Vycm9yKHApKTsKKyAgICAgICAgcmV0ID0gQVZF UlJPUihFSU5WQUwpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgICByZXQgPSBvcGVu c3NsX2luaXRfY2Ffa2V5X2NlcnQoaCk7CisgICAgaWYgKHJldCA8IDApIGdvdG8gZmFpbDsKKwor ICAgIC8qIFNlcnZlciB3aWxsIHNlbmQgQ2VydGlmaWNhdGUgUmVxdWVzdC4gKi8KKyAgICBTU0xf Q1RYX3NldF92ZXJpZnkocC0+Y3R4LCBTU0xfVkVSSUZZX1BFRVIgfCBTU0xfVkVSSUZZX0NMSUVO VF9PTkNFLCBvcGVuc3NsX2R0bHNfdmVyaWZ5X2NhbGxiYWNrKTsKKyAgICAvKiBUaGUgZGVwdGgg Y291bnQgaXMgImxldmVsIDA6cGVlciBjZXJ0aWZpY2F0ZSIsICJsZXZlbCAxOiBDQSBjZXJ0aWZp Y2F0ZSIsCisgICAgICogImxldmVsIDI6IGhpZ2hlciBsZXZlbCBDQSBjZXJ0aWZpY2F0ZSIsIGFu ZCBzbyBvbi4gKi8KKyAgICBTU0xfQ1RYX3NldF92ZXJpZnlfZGVwdGgocC0+Y3R4LCA0KTsKKyAg ICAvKiBXaGV0aGVyIHdlIHNob3VsZCByZWFkIGFzIG1hbnkgaW5wdXQgYnl0ZXMgYXMgcG9zc2li bGUgKGZvciBub24tYmxvY2tpbmcgcmVhZHMpIG9yIG5vdC4gKi8KKyAgICBTU0xfQ1RYX3NldF9y ZWFkX2FoZWFkKHAtPmN0eCwgMSk7CisgICAgLyogU2V0dXAgdGhlIFNSVFAgY29udGV4dCAqLwor ICAgIGlmIChTU0xfQ1RYX3NldF90bHNleHRfdXNlX3NydHAocC0+Y3R4LCBwcm9maWxlcykpIHsK KyAgICAgICAgYXZfbG9nKHAsIEFWX0xPR19FUlJPUiwgIlRMUzogSW5pdCBTU0xfQ1RYX3NldF90 bHNleHRfdXNlX3NydHAgZmFpbGVkLCBwcm9maWxlcz0lcywgJXNcbiIsCisgICAgICAgICAgICBw cm9maWxlcywgb3BlbnNzbF9nZXRfZXJyb3IocCkpOworICAgICAgICByZXQgPSBBVkVSUk9SKEVJ TlZBTCk7CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgLyogVGhlIHNzbCBzaG91 bGQgbm90IGJlIGNyZWF0ZWQgdW5sZXNzIHRoZSBjdHggaGFzIGJlZW4gaW5pdGlhbGl6ZWQuICov CisgICAgcC0+c3NsID0gU1NMX25ldyhwLT5jdHgpOworICAgIGlmICghcC0+c3NsKSB7CisgICAg ICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKwor ICAgIC8qIFNldHVwIHRoZSBjYWxsYmFjayBmb3IgbG9nZ2luZy4gKi8KKyAgICBTU0xfc2V0X2V4 X2RhdGEocC0+c3NsLCAwLCBwKTsKKyAgICBTU0xfc2V0X2luZm9fY2FsbGJhY2socC0+c3NsLCBv cGVuc3NsX2luZm9fY2FsbGJhY2spOworICAgIC8qKgorICAgICAqIFdlIGhhdmUgc2V0IHRoZSBN VFUgdG8gZnJhZ21lbnQgdGhlIERUTFMgcGFja2V0LiBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0 aGF0IHRoZQorICAgICAqIHBhY2tldCBpcyBzcGxpdCB0byBlbnN1cmUgdGhhdCBlYWNoIGhhbmRz aGFrZSBwYWNrZXQgaXMgc21hbGxlciB0aGFuIHRoZSBNVFUuCisgICAgICovCisgICAgU1NMX3Nl dF9vcHRpb25zKHAtPnNzbCwgU1NMX09QX05PX1FVRVJZX01UVSk7CisgICAgU1NMX3NldF9tdHUo cC0+c3NsLCBwLT50bHNfc2hhcmVkLm10dSk7CisjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+ PSAweDEwMDAxMGIwTCAvKiBPcGVuU1NMIDEuMC4xayAqLworICAgIERUTFNfc2V0X2xpbmtfbXR1 KHAtPnNzbCwgcC0+dGxzX3NoYXJlZC5tdHUpOworI2VuZGlmCisgICAgaW5pdF9iaW9fbWV0aG9k KGgpOworCisgICAgaWYgKHAtPnRsc19zaGFyZWQudXNlX2V4dGVybmFsX3VkcCAhPSAxKSB7Cisg ICAgICAgIGlmICgocmV0ID0gZmZfdGxzX29wZW5fdW5kZXJseWluZygmcC0+dGxzX3NoYXJlZCwg aCwgdXJsLCBvcHRpb25zKSkgPCAwKSB7CisgICAgICAgICAgICBhdl9sb2cocCwgQVZfTE9HX0VS Uk9SLCAiV0hJUDogRmFpbGVkIHRvIGNvbm5lY3QgJXNcbiIsIHVybCk7CisgICAgICAgICAgICBy ZXR1cm4gcmV0OworICAgICAgICB9CisgICAgfQorCisgICAgLyogU2V0dXAgRFRMUyBhcyBwYXNz aXZlLCB3aGljaCBpcyBzZXJ2ZXIgcm9sZS4gKi8KKyAgICBjLT5saXN0ZW4gPyBTU0xfc2V0X2Fj Y2VwdF9zdGF0ZShwLT5zc2wpIDogU1NMX3NldF9jb25uZWN0X3N0YXRlKHAtPnNzbCk7CisKKyAg ICAvKioKKyAgICAgKiBEdXJpbmcgaW5pdGlhbGl6YXRpb24sIHdlIG9ubHkgbmVlZCB0byBjYWxs IFNTTF9kb19oYW5kc2hha2Ugb25jZSBiZWNhdXNlIFNTTF9yZWFkIGNvbnN1bWVzCisgICAgICog dGhlIGhhbmRzaGFrZSBtZXNzYWdlIGlmIHRoZSBoYW5kc2hha2UgaXMgaW5jb21wbGV0ZS4KKyAg ICAgKiBUbyBzaW1wbGlmeSBtYWludGVuYW5jZSwgd2UgaW5pdGlhdGUgdGhlIGhhbmRzaGFrZSBm b3IgYm90aCB0aGUgRFRMUyBzZXJ2ZXIgYW5kIGNsaWVudCBhZnRlcgorICAgICAqIHNlbmRpbmcg b3V0IHRoZSBJQ0UgcmVzcG9uc2UgaW4gdGhlIHN0YXJ0X2FjdGl2ZV9oYW5kc2hha2UgZnVuY3Rp b24uIEl0J3Mgd29ydGggbm90aW5nIHRoYXQKKyAgICAgKiBhbHRob3VnaCB0aGUgRFRMUyBzZXJ2 ZXIgbWF5IHJlY2VpdmUgdGhlIENsaWVudEhlbGxvIGltbWVkaWF0ZWx5IGFmdGVyIHNlbmRpbmcg b3V0IHRoZSBJQ0UKKyAgICAgKiByZXNwb25zZSwgdGhpcyBzaG91bGRuJ3QgYmUgYW4gaXNzdWUg YXMgdGhlIGhhbmRzaGFrZSBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIGFueSBEVExTCisgICAg ICogcGFja2V0cyBhcmUgcmVjZWl2ZWQuCisgICAgICoKKyAgICAgKiBUaGUgU1NMX2RvX2hhbmRz aGFrZSBjYW4ndCBiZSBjYWxsZWQgaWYgRFRMUyBoYXNuJ3QgcHJlcGFyZSBmb3IgdWRwLgorICAg ICAqLworICAgIGlmIChwLT50bHNfc2hhcmVkLnVzZV9leHRlcm5hbF91ZHAgIT0gMSkgeworICAg ICAgICByZXQgPSBkdGxzX2hhbmRzaGFrZShoKTsKKyAgICAgICAgLy8gRmF0YWwgU1NMIGVycm9y LCBmb3IgZXhhbXBsZSwgbm8gYXZhaWxhYmxlIHN1aXRlIHdoZW4gcGVlciBpcyBEVExTIDEuMCB3 aGlsZSB3ZSBhcmUgRFRMUyAxLjIuCisgICAgICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgICAg ICBhdl9sb2cocCwgQVZfTE9HX0VSUk9SLCAiVExTOiBGYWlsZWQgdG8gZHJpdmUgU1NMIGNvbnRl eHQsIHJldD0lZFxuIiwgcmV0KTsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTyk7Cisg ICAgICAgIH0KKyAgICB9CisKKyAgICBhdl9sb2cocCwgQVZfTE9HX1ZFUkJPU0UsICJUTFM6IFNl dHVwIG9rLCBNVFU9JWQsIGZpbmdlcnByaW50ICVzXG4iLAorICAgICAgICBwLT50bHNfc2hhcmVk Lm10dSwgcC0+dGxzX3NoYXJlZC5maW5nZXJwcmludCk7CisKKyAgICByZXQgPSAwOworZmFpbDoK KyAgICByZXR1cm4gcmV0OworfQorCisvKioKKyAqIENsZWFudXAgdGhlIERUTFMgY29udGV4dC4K KyAqLworc3RhdGljIGF2X2NvbGQgaW50IGR0bHNfY2xvc2UoVVJMQ29udGV4dCAqaCkKK3sKKyAg ICBUTFNDb250ZXh0ICpjdHggPSBoLT5wcml2X2RhdGE7CisgICAgU1NMX2ZyZWUoY3R4LT5zc2wp OworICAgIFNTTF9DVFhfZnJlZShjdHgtPmN0eCk7CisgICAgYXZfZnJlZXAoJmN0eC0+dGxzX3No YXJlZC5maW5nZXJwcmludCk7CisgICAgYXZfZnJlZXAoJmN0eC0+dGxzX3NoYXJlZC5jZXJ0X2J1 Zik7CisgICAgYXZfZnJlZXAoJmN0eC0+dGxzX3NoYXJlZC5rZXlfYnVmKTsKKyNpZiBPUEVOU1NM X1ZFUlNJT05fTlVNQkVSIDwgMHgzMDAwMDAwMEwgLyogT3BlblNTTCAzLjAgKi8KKyAgICBFQ19L RVlfZnJlZShjdHgtPmR0bHNfZWNrZXkpOworI2VuZGlmCisgICAgcmV0dXJuIDA7Cit9CisKIHN0 YXRpYyBpbnQgdGxzX29wZW4oVVJMQ29udGV4dCAqaCwgY29uc3QgY2hhciAqdXJpLCBpbnQgZmxh Z3MsIEFWRGljdGlvbmFyeSAqKm9wdGlvbnMpCiB7CiAgICAgVExTQ29udGV4dCAqcCA9IGgtPnBy aXZfZGF0YTsKICAgICBUTFNTaGFyZWQgKmMgPSAmcC0+dGxzX3NoYXJlZDsKLSAgICBCSU8gKmJp bzsKICAgICBpbnQgcmV0OwogCiAjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA8IDB4MTAxMDAw MDBMCkBAIC0yNzEsNTIgKzEwNDEsMjYgQEAgc3RhdGljIGludCB0bHNfb3BlbihVUkxDb250ZXh0 ICpoLCBjb25zdCBjaGFyICp1cmksIGludCBmbGFncywgQVZEaWN0aW9uYXJ5ICoqb3AKICAgICAv LyBzdXBwb3J0IGZvciB0aGUgb2xkIHByb3RvY29scyBpbW1lZGlhdGVseSBhZnRlciBjcmVhdGlu ZyB0aGUgY29udGV4dC4KICAgICBwLT5jdHggPSBTU0xfQ1RYX25ldyhjLT5saXN0ZW4gPyBTU0x2 MjNfc2VydmVyX21ldGhvZCgpIDogU1NMdjIzX2NsaWVudF9tZXRob2QoKSk7CiAgICAgaWYgKCFw LT5jdHgpIHsKLSAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19FUlJPUiwgIiVzXG4iLCBFUlJfZXJy b3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSwgTlVMTCkpOworICAgICAgICBhdl9sb2coaCwgQVZf TE9HX0VSUk9SLCAiJXNcbiIsIG9wZW5zc2xfZ2V0X2Vycm9yKHApKTsKICAgICAgICAgcmV0ID0g QVZFUlJPUihFSU8pOwogICAgICAgICBnb3RvIGZhaWw7CiAgICAgfQogICAgIFNTTF9DVFhfc2V0 X29wdGlvbnMocC0+Y3R4LCBTU0xfT1BfTk9fU1NMdjIgfCBTU0xfT1BfTk9fU1NMdjMpOwotICAg IGlmIChjLT5jYV9maWxlKSB7Ci0gICAgICAgIGlmICghU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2Nh dGlvbnMocC0+Y3R4LCBjLT5jYV9maWxlLCBOVUxMKSkKLSAgICAgICAgICAgIGF2X2xvZyhoLCBB Vl9MT0dfRVJST1IsICJTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyAlc1xuIiwgRVJSX2Vy cm9yX3N0cmluZyhFUlJfZ2V0X2Vycm9yKCksIE5VTEwpKTsKLSAgICB9Ci0gICAgaWYgKGMtPmNl cnRfZmlsZSAmJiAhU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfY2hhaW5fZmlsZShwLT5jdHgsIGMt PmNlcnRfZmlsZSkpIHsKLSAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0 byBsb2FkIGNlcnQgZmlsZSAlczogJXNcbiIsCi0gICAgICAgICAgICAgICBjLT5jZXJ0X2ZpbGUs IEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLCBOVUxMKSk7Ci0gICAgICAgIHJldCA9 IEFWRVJST1IoRUlPKTsKLSAgICAgICAgZ290byBmYWlsOwotICAgIH0KLSAgICBpZiAoYy0+a2V5 X2ZpbGUgJiYgIVNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfZmlsZShwLT5jdHgsIGMtPmtleV9maWxl LCBTU0xfRklMRVRZUEVfUEVNKSkgewotICAgICAgICBhdl9sb2coaCwgQVZfTE9HX0VSUk9SLCAi VW5hYmxlIHRvIGxvYWQga2V5IGZpbGUgJXM6ICVzXG4iLAotICAgICAgICAgICAgICAgYy0+a2V5 X2ZpbGUsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLCBOVUxMKSk7Ci0gICAgICAg IHJldCA9IEFWRVJST1IoRUlPKTsKLSAgICAgICAgZ290byBmYWlsOwotICAgIH0KKyAgICByZXQg PSBvcGVuc3NsX2luaXRfY2Ffa2V5X2NlcnQoaCk7CisgICAgaWYgKHJldCA8IDApIGdvdG8gZmFp bDsKICAgICAvLyBOb3RlLCB0aGlzIGRvZXNuJ3QgY2hlY2sgdGhhdCB0aGUgcGVlciBjZXJ0aWZp Y2F0ZSBhY3R1YWxseSBtYXRjaGVzCiAgICAgLy8gdGhlIHJlcXVlc3RlZCBob3N0bmFtZS4KICAg ICBpZiAoYy0+dmVyaWZ5KQogICAgICAgICBTU0xfQ1RYX3NldF92ZXJpZnkocC0+Y3R4LCBTU0xf VkVSSUZZX1BFRVJ8U1NMX1ZFUklGWV9GQUlMX0lGX05PX1BFRVJfQ0VSVCwgTlVMTCk7CiAgICAg cC0+c3NsID0gU1NMX25ldyhwLT5jdHgpOwogICAgIGlmICghcC0+c3NsKSB7Ci0gICAgICAgIGF2 X2xvZyhoLCBBVl9MT0dfRVJST1IsICIlc1xuIiwgRVJSX2Vycm9yX3N0cmluZyhFUlJfZ2V0X2Vy cm9yKCksIE5VTEwpKTsKKyAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19FUlJPUiwgIiVzXG4iLCBv cGVuc3NsX2dldF9lcnJvcihwKSk7CiAgICAgICAgIHJldCA9IEFWRVJST1IoRUlPKTsKICAgICAg ICAgZ290byBmYWlsOwogICAgIH0KLSNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAx MDAwMGZMCi0gICAgcC0+dXJsX2Jpb19tZXRob2QgPSBCSU9fbWV0aF9uZXcoQklPX1RZUEVfU09V UkNFX1NJTkssICJ1cmxwcm90b2NvbCBiaW8iKTsKLSAgICBCSU9fbWV0aF9zZXRfd3JpdGUocC0+ dXJsX2Jpb19tZXRob2QsIHVybF9iaW9fYndyaXRlKTsKLSAgICBCSU9fbWV0aF9zZXRfcmVhZChw LT51cmxfYmlvX21ldGhvZCwgdXJsX2Jpb19icmVhZCk7Ci0gICAgQklPX21ldGhfc2V0X3B1dHMo cC0+dXJsX2Jpb19tZXRob2QsIHVybF9iaW9fYnB1dHMpOwotICAgIEJJT19tZXRoX3NldF9jdHJs KHAtPnVybF9iaW9fbWV0aG9kLCB1cmxfYmlvX2N0cmwpOwotICAgIEJJT19tZXRoX3NldF9jcmVh dGUocC0+dXJsX2Jpb19tZXRob2QsIHVybF9iaW9fY3JlYXRlKTsKLSAgICBCSU9fbWV0aF9zZXRf ZGVzdHJveShwLT51cmxfYmlvX21ldGhvZCwgdXJsX2Jpb19kZXN0cm95KTsKLSAgICBiaW8gPSBC SU9fbmV3KHAtPnVybF9iaW9fbWV0aG9kKTsKLSAgICBCSU9fc2V0X2RhdGEoYmlvLCBwKTsKLSNl bHNlCi0gICAgYmlvID0gQklPX25ldygmdXJsX2Jpb19tZXRob2QpOwotICAgIGJpby0+cHRyID0g cDsKLSNlbmRpZgotICAgIFNTTF9zZXRfYmlvKHAtPnNzbCwgYmlvLCBiaW8pOworICAgIFNTTF9z ZXRfZXhfZGF0YShwLT5zc2wsIDAsIHApOworICAgIFNTTF9DVFhfc2V0X2luZm9fY2FsbGJhY2so cC0+Y3R4LCBvcGVuc3NsX2luZm9fY2FsbGJhY2spOworICAgIGluaXRfYmlvX21ldGhvZChoKTsK ICAgICBpZiAoIWMtPmxpc3RlbiAmJiAhYy0+bnVtZXJpY2hvc3QpCiAgICAgICAgIFNTTF9zZXRf dGxzZXh0X2hvc3RfbmFtZShwLT5zc2wsIGMtPmhvc3QpOwogICAgIHJldCA9IGMtPmxpc3RlbiA/ IFNTTF9hY2NlcHQocC0+c3NsKSA6IFNTTF9jb25uZWN0KHAtPnNzbCk7CkBAIC0zMjUsNyArMTA2 OSw3IEBAIHN0YXRpYyBpbnQgdGxzX29wZW4oVVJMQ29udGV4dCAqaCwgY29uc3QgY2hhciAqdXJp LCBpbnQgZmxhZ3MsIEFWRGljdGlvbmFyeSAqKm9wCiAgICAgICAgIHJldCA9IEFWRVJST1IoRUlP KTsKICAgICAgICAgZ290byBmYWlsOwogICAgIH0gZWxzZSBpZiAocmV0IDwgMCkgewotICAgICAg ICByZXQgPSBwcmludF90bHNfZXJyb3IoaCwgcmV0KTsKKyAgICAgICAgcmV0ID0gcHJpbnRfc3Ns X2Vycm9yKGgsIHJldCk7CiAgICAgICAgIGdvdG8gZmFpbDsKICAgICB9CiAKQEAgLTMzOCwzMSAr MTA4MiwzNSBAQCBmYWlsOgogc3RhdGljIGludCB0bHNfcmVhZChVUkxDb250ZXh0ICpoLCB1aW50 OF90ICpidWYsIGludCBzaXplKQogewogICAgIFRMU0NvbnRleHQgKmMgPSBoLT5wcml2X2RhdGE7 CisgICAgVVJMQ29udGV4dCAqdWMgPSBjLT50bHNfc2hhcmVkLmlzX2R0bHMgPyBjLT50bHNfc2hh cmVkLnVkcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYy0+ dGxzX3NoYXJlZC50Y3A7CiAgICAgaW50IHJldDsKICAgICAvLyBTZXQgb3IgY2xlYXIgdGhlIEFW SU9fRkxBR19OT05CTE9DSyBvbiBjLT50bHNfc2hhcmVkLnRjcAotICAgIGMtPnRsc19zaGFyZWQu dGNwLT5mbGFncyAmPSB+QVZJT19GTEFHX05PTkJMT0NLOwotICAgIGMtPnRsc19zaGFyZWQudGNw LT5mbGFncyB8PSBoLT5mbGFncyAmIEFWSU9fRkxBR19OT05CTE9DSzsKKyAgICB1Yy0+ZmxhZ3Mg Jj0gfkFWSU9fRkxBR19OT05CTE9DSzsKKyAgICB1Yy0+ZmxhZ3MgfD0gaC0+ZmxhZ3MgJiBBVklP X0ZMQUdfTk9OQkxPQ0s7CiAgICAgcmV0ID0gU1NMX3JlYWQoYy0+c3NsLCBidWYsIHNpemUpOwog ICAgIGlmIChyZXQgPiAwKQogICAgICAgICByZXR1cm4gcmV0OwogICAgIGlmIChyZXQgPT0gMCkK ICAgICAgICAgcmV0dXJuIEFWRVJST1JfRU9GOwotICAgIHJldHVybiBwcmludF90bHNfZXJyb3Io aCwgcmV0KTsKKyAgICByZXR1cm4gcHJpbnRfc3NsX2Vycm9yKGgsIHJldCk7CiB9CiAKIHN0YXRp YyBpbnQgdGxzX3dyaXRlKFVSTENvbnRleHQgKmgsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IHNp emUpCiB7CiAgICAgVExTQ29udGV4dCAqYyA9IGgtPnByaXZfZGF0YTsKKyAgICBVUkxDb250ZXh0 ICp1YyA9IGMtPnRsc19zaGFyZWQuaXNfZHRscyA/IGMtPnRsc19zaGFyZWQudWRwCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjLT50bHNfc2hhcmVkLnRjcDsK ICAgICBpbnQgcmV0OwogICAgIC8vIFNldCBvciBjbGVhciB0aGUgQVZJT19GTEFHX05PTkJMT0NL IG9uIGMtPnRsc19zaGFyZWQudGNwCi0gICAgYy0+dGxzX3NoYXJlZC50Y3AtPmZsYWdzICY9IH5B VklPX0ZMQUdfTk9OQkxPQ0s7Ci0gICAgYy0+dGxzX3NoYXJlZC50Y3AtPmZsYWdzIHw9IGgtPmZs YWdzICYgQVZJT19GTEFHX05PTkJMT0NLOworICAgIHVjLT5mbGFncyAmPSB+QVZJT19GTEFHX05P TkJMT0NLOworICAgIHVjLT5mbGFncyB8PSBoLT5mbGFncyAmIEFWSU9fRkxBR19OT05CTE9DSzsK ICAgICByZXQgPSBTU0xfd3JpdGUoYy0+c3NsLCBidWYsIHNpemUpOwogICAgIGlmIChyZXQgPiAw KQogICAgICAgICByZXR1cm4gcmV0OwogICAgIGlmIChyZXQgPT0gMCkKICAgICAgICAgcmV0dXJu IEFWRVJST1JfRU9GOwotICAgIHJldHVybiBwcmludF90bHNfZXJyb3IoaCwgcmV0KTsKKyAgICBy ZXR1cm4gcHJpbnRfc3NsX2Vycm9yKGgsIHJldCk7CiB9CiAKIHN0YXRpYyBpbnQgdGxzX2dldF9m aWxlX2hhbmRsZShVUkxDb250ZXh0ICpoKQpAQCAtNDAxLDMgKzExNDksMjIgQEAgY29uc3QgVVJM UHJvdG9jb2wgZmZfdGxzX3Byb3RvY29sID0gewogICAgIC5mbGFncyAgICAgICAgICA9IFVSTF9Q Uk9UT0NPTF9GTEFHX05FVFdPUkssCiAgICAgLnByaXZfZGF0YV9jbGFzcyA9ICZ0bHNfY2xhc3Ms CiB9OworCitzdGF0aWMgY29uc3QgQVZDbGFzcyBkdGxzX2NsYXNzID0geworICAgIC5jbGFzc19u YW1lID0gImR0bHMiLAorICAgIC5pdGVtX25hbWUgID0gYXZfZGVmYXVsdF9pdGVtX25hbWUsCisg ICAgLm9wdGlvbiAgICAgPSBvcHRpb25zLAorICAgIC52ZXJzaW9uICAgID0gTElCQVZVVElMX1ZF UlNJT05fSU5ULAorfTsKKworY29uc3QgVVJMUHJvdG9jb2wgZmZfZHRsc19wcm90b2NvbCA9IHsK KyAgICAubmFtZSAgICAgICAgICAgPSAiZHRscyIsCisgICAgLnVybF9vcGVuMiAgICAgID0gZHRs c19zdGFydCwKKyAgICAudXJsX2hhbmRzaGFrZSAgPSBkdGxzX2hhbmRzaGFrZSwKKyAgICAudXJs X2Nsb3NlICAgICAgPSBkdGxzX2Nsb3NlLAorICAgIC51cmxfcmVhZCAgICAgICA9IHRsc19yZWFk LAorICAgIC51cmxfd3JpdGUgICAgICA9IHRsc193cml0ZSwKKyAgICAucHJpdl9kYXRhX3NpemUg PSBzaXplb2YoVExTQ29udGV4dCksCisgICAgLmZsYWdzICAgICAgICAgID0gVVJMX1BST1RPQ09M X0ZMQUdfTkVUV09SSywKKyAgICAucHJpdl9kYXRhX2NsYXNzID0gJmR0bHNfY2xhc3MsCit9Owpk aWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvd2hpcC5jIGIvbGliYXZmb3JtYXQvd2hpcC5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjA2NzFlMjM2MzUKLS0tIC9kZXYvbnVs bAorKysgYi9saWJhdmZvcm1hdC93aGlwLmMKQEAgLTAsMCArMSwxOTE3IEBACisvKgorICogV2Vi UlRDLUhUVFAgaW5nZXN0aW9uIHByb3RvY29sIChXSElQKSBtdXhlcgorICogQ29weXJpZ2h0IChj KSAyMDIzIFRoZSBGRm1wZWcgUHJvamVjdAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZG bXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNl LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7 IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4s IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBV U0EKKyAqLworCisjaW5jbHVkZSAibGliYXZjb2RlYy9hdmNvZGVjLmgiCisjaW5jbHVkZSAibGli YXZjb2RlYy9jb2RlY19kZXNjLmgiCisjaW5jbHVkZSAibGliYXZjb2RlYy9oMjY0LmgiCisjaW5j bHVkZSAibGliYXZjb2RlYy9zdGFydGNvZGUuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvYmFzZTY0 LmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2JwcmludC5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9j cmMuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvaG1hYy5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9p bnRyZWFkd3JpdGUuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvbGZnLmgiCisjaW5jbHVkZSAibGli YXZ1dGlsL29wdC5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9tZW0uaCIKKyNpbmNsdWRlICJsaWJh dnV0aWwvcmFuZG9tX3NlZWQuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvdGltZS5oIgorI2luY2x1 ZGUgImF2Yy5oIgorI2luY2x1ZGUgIm5hbC5oIgorI2luY2x1ZGUgImF2aW9faW50ZXJuYWwuaCIK KyNpbmNsdWRlICJodHRwLmgiCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJtdXgu aCIKKyNpbmNsdWRlICJuZXR3b3JrLmgiCisjaW5jbHVkZSAic3J0cC5oIgorI2luY2x1ZGUgInRs cy5oIgorCisvKioKKyAqIE1heGltdW0gc2l6ZSBsaW1pdCBvZiBhIFNlc3Npb24gRGVzY3JpcHRp b24gUHJvdG9jb2wgKFNEUCksCisgKiBiZSBpdCBhbiBvZmZlciBvciBhbnN3ZXIuCisgKi8KKyNk ZWZpbmUgTUFYX1NEUF9TSVpFIDgxOTIKKworLyoqCisgKiBUaGUgc2l6ZSBvZiB0aGUgU2VjdXJl IFJlYWwtdGltZSBUcmFuc3BvcnQgUHJvdG9jb2wgKFNSVFApIG1hc3RlciBrZXkgbWF0ZXJpYWwK KyAqIHRoYXQgaXMgZXhwb3J0ZWQgYnkgU2VjdXJlIFNvY2tldHMgTGF5ZXIgKFNTTCkgYWZ0ZXIg YSBzdWNjZXNzZnVsIERhdGFncmFtCisgKiBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKERUTFMp IGhhbmRzaGFrZS4gVGhpcyBtYXRlcmlhbCBjb25zaXN0cyBvZiBhIGtleQorICogb2YgMTYgYnl0 ZXMgYW5kIGEgc2FsdCBvZiAxNCBieXRlcy4KKyAqLworI2RlZmluZSBEVExTX1NSVFBfS0VZX0xF TiAxNgorI2RlZmluZSBEVExTX1NSVFBfU0FMVF9MRU4gMTQKKworLyoqCisgKiBUaGUgbWF4aW11 bSBzaXplIG9mIHRoZSBTZWN1cmUgUmVhbC10aW1lIFRyYW5zcG9ydCBQcm90b2NvbCAoU1JUUCkg SE1BQyBjaGVja3N1bQorICogYW5kIHBhZGRpbmcgdGhhdCBpcyBhcHBlbmRlZCB0byB0aGUgZW5k IG9mIHRoZSBwYWNrZXQuIFRvIGNhbGN1bGF0ZSB0aGUgbWF4aW11bQorICogc2l6ZSBvZiB0aGUg VXNlciBEYXRhZ3JhbSBQcm90b2NvbCAoVURQKSBwYWNrZXQgdGhhdCBjYW4gYmUgc2VudCBvdXQs IHN1YnRyYWN0CisgKiB0aGlzIHNpemUgZnJvbSB0aGUgYHBrdF9zaXplYC4KKyAqLworI2RlZmlu ZSBEVExTX1NSVFBfQ0hFQ0tTVU1fTEVOIDE2CisKKy8qKgorICogV2hlbiBzZW5kaW5nIElDRSBv ciBEVExTIG1lc3NhZ2VzLCByZXNwb25zZXMgYXJlIHJlY2VpdmVkIHZpYSBVRFAuIEhvd2V2ZXIs IHRoZSBwZWVyCisgKiBtYXkgbm90IGJlIHJlYWR5IGFuZCByZXR1cm4gRUFHQUlOLCBpbiB3aGlj aCBjYXNlIHdlIHNob3VsZCB3YWl0IGZvciBhIHNob3J0IGR1cmF0aW9uCisgKiBhbmQgcmV0cnkg cmVhZGluZy4KKyAqIEZvciBpbnN0YW5jZSwgaWYgd2UgdHJ5IHRvIHJlYWQgZnJvbSBVRFAgYW5k IGdldCBFQUdBSU4sIHdlIHNsZWVwIGZvciA1bXMgYW5kIHJldHJ5LgorICogVGhpcyBtYWNybyBp cyB1c2VkIHRvIGxpbWl0IHRoZSB0b3RhbCBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgKGUuZy4s IDUwbXMpLCBzbyB3ZQorICogd2lsbCB0cnkgYXQgbW9zdCA1IHRpbWVzLgorICogS2VlcCBpbiBt aW5kIHRoYXQgdGhpcyBtYWNybyBzaG91bGQgaGF2ZSBhIG1pbmltdW0gZHVyYXRpb24gb2YgNSBt cy4KKyAqLworI2RlZmluZSBJQ0VfRFRMU19SRUFEX0lOVEVSVkFMIDUwCisKKy8qIFRoZSBtYWdp YyBjb29raWUgZm9yIFNlc3Npb24gVHJhdmVyc2FsIFV0aWxpdGllcyBmb3IgTkFUIChTVFVOKSBt ZXNzYWdlcy4gKi8KKyNkZWZpbmUgU1RVTl9NQUdJQ19DT09LSUUgMHgyMTEyQTQ0MgorCisvKioK KyAqIFRoZSBEVExTIGNvbnRlbnQgdHlwZS4KKyAqIFNlZSBodHRwczovL3Rvb2xzLmlldGYub3Jn L2h0bWwvcmZjMjI0NiNzZWN0aW9uLTYuMi4xCisgKiBjaGFuZ2VfY2lwaGVyX3NwZWMoMjApLCBh bGVydCgyMSksIGhhbmRzaGFrZSgyMiksIGFwcGxpY2F0aW9uX2RhdGEoMjMpCisgKi8KKyNkZWZp bmUgRFRMU19DT05URU5UX1RZUEVfQ0hBTkdFX0NJUEhFUl9TUEVDIDIwCisKKy8qKgorICogVGhl IERUTFMgcmVjb3JkIGxheWVyIGhlYWRlciBoYXMgYSB0b3RhbCBzaXplIG9mIDEzIGJ5dGVzLCBj b25zaXN0aW5nIG9mCisgKiBDb250ZW50VHlwZSAoMSBieXRlKSwgUHJvdG9jb2xWZXJzaW9uICgy IGJ5dGVzKSwgRXBvY2ggKDIgYnl0ZXMpLAorICogU2VxdWVuY2VOdW1iZXIgKDYgYnl0ZXMpLCBh bmQgTGVuZ3RoICgyIGJ5dGVzKS4KKyAqIFNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3Jn L2RvYy9odG1sL3JmYzkxNDcjc2VjdGlvbi00CisgKi8KKyNkZWZpbmUgRFRMU19SRUNPUkRfTEFZ RVJfSEVBREVSX0xFTiAxMworCisvKioKKyAqIFRoZSBEVExTIHZlcnNpb24gbnVtYmVyLCB3aGlj aCBpcyAweGZlZmYgZm9yIERUTFMgMS4wLCBvciAweGZlZmQgZm9yIERUTFMgMS4yLgorICogU2Vl IGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjOTE0NyNuYW1lLXRoZS1k dGxzLXJlY29yZC1sYXllcgorICovCisjZGVmaW5lIERUTFNfVkVSU0lPTl8xMCAweGZlZmYKKyNk ZWZpbmUgRFRMU19WRVJTSU9OXzEyIDB4ZmVmZAorCisvKioKKyAqIE1heGltdW0gc2l6ZSBvZiB0 aGUgYnVmZmVyIGZvciBzZW5kaW5nIGFuZCByZWNlaXZpbmcgVURQIHBhY2tldHMuCisgKiBQbGVh c2Ugbm90ZSB0aGF0IHRoaXMgc2l6ZSBkb2VzIG5vdCBsaW1pdCB0aGUgc2l6ZSBvZiB0aGUgVURQ IHBhY2tldCB0aGF0IGNhbiBiZSBzZW50LgorICogVG8gc2V0IHRoZSBsaW1pdCBmb3IgcGFja2V0 IHNpemUsIG1vZGlmeSB0aGUgYHBrdF9zaXplYCBwYXJhbWV0ZXIuCisgKiBGb3IgaW5zdGFuY2Us IGl0IGlzIHBvc3NpYmxlIHRvIHNldCB0aGUgVURQIGJ1ZmZlciB0byA0MDk2IHRvIHNlbmQgb3Ig cmVjZWl2ZSBwYWNrZXRzLAorICogYnV0IHBsZWFzZSBrZWVwIGluIG1pbmQgdGhhdCB0aGUgYHBr dF9zaXplYCBvcHRpb24gbGltaXRzIHRoZSBwYWNrZXQgc2l6ZSB0byAxNDAwLgorICovCisjZGVm aW5lIE1BWF9VRFBfQlVGRkVSX1NJWkUgNDA5NgorCisvKiBSZWZlcnJpbmcgdG8gQ2hyb21lJ3Mg ZGVmaW5pdGlvbiBvZiBSVFAgcGF5bG9hZCB0eXBlcy4gKi8KKyNkZWZpbmUgV0hJUF9SVFBfUEFZ TE9BRF9UWVBFX0gyNjQgMTA2CisjZGVmaW5lIFdISVBfUlRQX1BBWUxPQURfVFlQRV9PUFVTIDEx MQorCisvKioKKyAqIFRoZSBTVFVOIG1lc3NhZ2UgaGVhZGVyLCB3aGljaCBpcyAyMCBieXRlcyBs b25nLCBjb21wcmlzZXMgdGhlCisgKiBTVFVOTWVzc2FnZVR5cGUgKDFCKSwgTWVzc2FnZUxlbmd0 aCAoMkIpLCBNYWdpY0Nvb2tpZSAoNEIpLAorICogYW5kIFRyYW5zYWN0aW9uSUQgKDEyQikuCisg KiBTZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM1Mzg5I3NlY3Rp b24tNgorICovCisjZGVmaW5lIElDRV9TVFVOX0hFQURFUl9TSVpFIDIwCisKKy8qKgorICogVGhl IFJUUCBoZWFkZXIgaXMgMTIgYnl0ZXMgbG9uZywgY29tcHJpc2luZyB0aGUgVmVyc2lvbigxQiks IFBUKDFCKSwKKyAqIFNlcXVlbmNlTnVtYmVyKDJCKSwgVGltZXN0YW1wKDRCKSwgYW5kIFNTUkMo NEIpLgorICogU2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmMzNTUwI3NlY3Rp b24tNS4xCisgKi8KKyNkZWZpbmUgV0hJUF9SVFBfSEVBREVSX1NJWkUgMTIKKworLyoqCisgKiBG b3IgUlRDUCwgUFQgaXMgWzEyOCwgMjIzXSAob3Igd2l0aG91dCBtYXJrZXIgWzAsIDk1XSkuIExp dGVyYWxseSwgUlRDUCBzdGFydHMKKyAqIGZyb20gNjQgbm90IDAsIHNvIFBUIGlzIFsxOTIsIDIy M10gKG9yIHdpdGhvdXQgbWFya2VyIFs2NCwgOTVdKSwgc2VlICJSVENQIENvbnRyb2wKKyAqIFBh Y2tldCBUeXBlcyAoUFQpIiBhdAorICogaHR0cHM6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMv cnRwLXBhcmFtZXRlcnMvcnRwLXBhcmFtZXRlcnMueGh0bWwjcnRwLXBhcmFtZXRlcnMtNAorICoK KyAqIEZvciBSVFAsIHRoZSBQVCBpcyBbOTYsIDEyN10sIG9yIFsyMjQsIDI1NV0gd2l0aCBtYXJr ZXIuIFNlZSAiUlRQIFBheWxvYWQgVHlwZXMgKFBUKQorICogZm9yIHN0YW5kYXJkIGF1ZGlvIGFu ZCB2aWRlbyBlbmNvZGluZ3MiIGF0CisgKiBodHRwczovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50 cy9ydHAtcGFyYW1ldGVycy9ydHAtcGFyYW1ldGVycy54aHRtbCNydHAtcGFyYW1ldGVycy0xCisg Ki8KKyNkZWZpbmUgV0hJUF9SVENQX1BUX1NUQVJUIDE5MgorI2RlZmluZSBXSElQX1JUQ1BfUFRf RU5EICAgMjIzCisKKy8qKgorICogSW4gdGhlIGNhc2Ugb2YgSUNFLUxJVEUsIHRoZXNlIGZpZWxk cyBhcmUgbm90IHVzZWQ7IGluc3RlYWQsIHRoZXkgYXJlIGRlZmluZWQKKyAqIGFzIGNvbnN0YW50 IHZhbHVlcy4KKyAqLworI2RlZmluZSBXSElQX1NEUF9TRVNTSU9OX0lEICI0NDg5MDQ1MTQxNjky Nzk5MzU5IgorI2RlZmluZSBXSElQX1NEUF9DUkVBVE9SX0lQICIxMjcuMC4wLjEiCisKKy8qIENh bGN1bGF0ZSB0aGUgZWxhcHNlZCB0aW1lIGZyb20gc3RhcnR0aW1lIHRvIGVuZHRpbWUgaW4gbWls bGlzZWNvbmRzLiAqLworI2RlZmluZSBFTEFQU0VEKHN0YXJ0dGltZSwgZW5kdGltZSkgKChpbnQp KGVuZHRpbWUgLSBzdGFydHRpbWUpIC8gMTAwMCkKKworLyogU1RVTiBBdHRyaWJ1dGUsIGNvbXBy ZWhlbnNpb24tcmVxdWlyZWQgcmFuZ2UgKDB4MDAwMC0weDdGRkYpICovCitlbnVtIFNUVU5BdHRy IHsKKyAgICBTVFVOX0FUVFJfVVNFUk5BTUUgICAgICAgICAgICAgICAgICA9IDB4MDAwNiwgLy8v IHNoYXJlZCBzZWNyZXQgcmVzcG9uc2UvYmluZCByZXF1ZXN0CisgICAgU1RVTl9BVFRSX1VTRV9D QU5ESURBVEUgICAgICAgICAgICAgPSAweDAwMjUsIC8vLyBiaW5kIHJlcXVlc3QKKyAgICBTVFVO X0FUVFJfTUVTU0FHRV9JTlRFR1JJVFkgICAgICAgICA9IDB4MDAwOCwgLy8vIGJpbmQgcmVxdWVz dC9yZXNwb25zZQorICAgIFNUVU5fQVRUUl9GSU5HRVJQUklOVCAgICAgICAgICAgICAgID0gMHg4 MDI4LCAvLy8gcmZjNTM4OQorfTsKKworZW51bSBXSElQU3RhdGUgeworICAgIFdISVBfU1RBVEVf Tk9ORSwKKworICAgIC8qIFRoZSBpbml0aWFsIHN0YXRlLiAqLworICAgIFdISVBfU1RBVEVfSU5J VCwKKyAgICAvKiBUaGUgbXV4ZXIgaGFzIHNlbnQgdGhlIG9mZmVyIHRvIHRoZSBwZWVyLiAqLwor ICAgIFdISVBfU1RBVEVfT0ZGRVIsCisgICAgLyogVGhlIG11eGVyIGhhcyByZWNlaXZlZCB0aGUg YW5zd2VyIGZyb20gdGhlIHBlZXIuICovCisgICAgV0hJUF9TVEFURV9BTlNXRVIsCisgICAgLyoq CisgICAgICogQWZ0ZXIgcGFyc2luZyB0aGUgYW5zd2VyIHJlY2VpdmVkIGZyb20gdGhlIHBlZXIs IHRoZSBtdXhlciBuZWdvdGlhdGVzIHRoZSBhYmlsaXRpZXMKKyAgICAgKiBpbiB0aGUgb2ZmZXIg dGhhdCBpdCBnZW5lcmF0ZWQuCisgICAgICovCisgICAgV0hJUF9TVEFURV9ORUdPVElBVEVELAor ICAgIC8qIFRoZSBtdXhlciBoYXMgY29ubmVjdGVkIHRvIHRoZSBwZWVyIHZpYSBVRFAuICovCisg ICAgV0hJUF9TVEFURV9VRFBfQ09OTkVDVEVELAorICAgIC8qIFRoZSBtdXhlciBoYXMgc2VudCB0 aGUgSUNFIHJlcXVlc3QgdG8gdGhlIHBlZXIuICovCisgICAgV0hJUF9TVEFURV9JQ0VfQ09OTkVD VElORywKKyAgICAvKiBUaGUgbXV4ZXIgaGFzIHJlY2VpdmVkIHRoZSBJQ0UgcmVzcG9uc2UgZnJv bSB0aGUgcGVlci4gKi8KKyAgICBXSElQX1NUQVRFX0lDRV9DT05ORUNURUQsCisgICAgLyogVGhl IG11eGVyIHN0YXJ0cyBhdHRlbXB0aW5nIHRoZSBEVExTIGhhbmRzaGFrZS4gKi8KKyAgICBXSElQ X1NUQVRFX0RUTFNfQ09OTkVDVElORywKKyAgICAvKiBUaGUgbXV4ZXIgaGFzIGZpbmlzaGVkIHRo ZSBEVExTIGhhbmRzaGFrZSB3aXRoIHRoZSBwZWVyLiAqLworICAgIFdISVBfU1RBVEVfRFRMU19G SU5JU0hFRCwKKyAgICAvKiBUaGUgbXV4ZXIgaGFzIGZpbmlzaGVkIHRoZSBTUlRQIHNldHVwLiAq LworICAgIFdISVBfU1RBVEVfU1JUUF9GSU5JU0hFRCwKKyAgICAvKiBUaGUgbXV4ZXIgaXMgcmVh ZHkgdG8gc2VuZC9yZWNlaXZlIG1lZGlhIGZyYW1lcy4gKi8KKyAgICBXSElQX1NUQVRFX1JFQURZ LAorICAgIC8qIFRoZSBtdXhlciBpcyBmYWlsZWQuICovCisgICAgV0hJUF9TVEFURV9GQUlMRUQs Cit9OworCit0eXBlZGVmIHN0cnVjdCBXSElQQ29udGV4dCB7CisgICAgQVZDbGFzcyAqYXZfY2xh c3M7CisKKyAgICAvKiBUaGUgc3RhdGUgb2YgdGhlIFJUQyBjb25uZWN0aW9uLiAqLworICAgIGVu dW0gV0hJUFN0YXRlIHN0YXRlOworICAgIC8qIFRoZSBjYWxsYmFjayByZXR1cm4gdmFsdWUgZm9y IERUTFMuICovCisgICAgaW50IGR0bHNfcmV0OworICAgIGludCBkdGxzX2Nsb3NlZDsKKworICAg IC8qIFBhcmFtZXRlcnMgZm9yIHRoZSBpbnB1dCBhdWRpbyBhbmQgdmlkZW8gY29kZWNzLiAqLwor ICAgIEFWQ29kZWNQYXJhbWV0ZXJzICphdWRpb19wYXI7CisgICAgQVZDb2RlY1BhcmFtZXRlcnMg KnZpZGVvX3BhcjsKKworICAgIC8qKgorICAgICAqIFRoZSBoMjY0X21wNHRvYW5uZXhiIEJpdHN0 cmVhbSBGaWx0ZXIgKEJTRikgYnlwYXNzZXMgdGhlIEFubmV4QiBwYWNrZXQ7CisgICAgICogdGhl cmVmb3JlLCBpdCBpcyBlc3NlbnRpYWwgdG8gaW5zZXJ0IHRoZSBTUFMgYW5kIFBQUyBiZWZvcmUg ZWFjaCBJRFIgZnJhbWUKKyAgICAgKiBpbiBzdWNoIGNhc2VzLgorICAgICAqLworICAgIGludCBo MjY0X2FubmV4Yl9pbnNlcnRfc3BzX3BwczsKKworICAgIC8qIFRoZSByYW5kb20gbnVtYmVyIGdl bmVyYXRvci4gKi8KKyAgICBBVkxGRyBybmQ7CisKKyAgICAvKiBUaGUgSUNFIHVzZXJuYW1lIGFu ZCBwd2QgZnJhZ21lbnQgZ2VuZXJhdGVkIGJ5IHRoZSBtdXhlci4gKi8KKyAgICBjaGFyIGljZV91 ZnJhZ19sb2NhbFs5XTsKKyAgICBjaGFyIGljZV9wd2RfbG9jYWxbMzNdOworICAgIC8qIFRoZSBT U1JDIG9mIHRoZSBhdWRpbyBhbmQgdmlkZW8gc3RyZWFtLCBnZW5lcmF0ZWQgYnkgdGhlIG11eGVy LiAqLworICAgIHVpbnQzMl90IGF1ZGlvX3NzcmM7CisgICAgdWludDMyX3QgdmlkZW9fc3NyYzsK KyAgICAvKiBUaGUgUFQoUGF5bG9hZCBUeXBlKSBvZiBzdHJlYW0sIGdlbmVyYXRlZCBieSB0aGUg bXV4ZXIuICovCisgICAgdWludDhfdCBhdWRpb19wYXlsb2FkX3R5cGU7CisgICAgdWludDhfdCB2 aWRlb19wYXlsb2FkX3R5cGU7CisgICAgLyoqCisgICAgICogVGhpcyBpcyB0aGUgU0RQIG9mZmVy IGdlbmVyYXRlZCBieSB0aGUgbXV4ZXIgYmFzZWQgb24gdGhlIGNvZGVjIHBhcmFtZXRlcnMsCisg ICAgICogRFRMUywgYW5kIElDRSBpbmZvcm1hdGlvbi4KKyAgICAgKi8KKyAgICBjaGFyICpzZHBf b2ZmZXI7CisKKyAgICAvKiBUaGUgSUNFIHVzZXJuYW1lIGFuZCBwd2QgZnJvbSByZW1vdGUgc2Vy dmVyLiAqLworICAgIGNoYXIgKmljZV91ZnJhZ19yZW1vdGU7CisgICAgY2hhciAqaWNlX3B3ZF9y ZW1vdGU7CisgICAgLyoqCisgICAgICogVGhpcyByZXByZXNlbnRzIHRoZSBJQ0UgY2FuZGlkYXRl IHByb3RvY29sLCBwcmlvcml0eSwgaG9zdCBhbmQgcG9ydC4KKyAgICAgKiBDdXJyZW50bHksIHdl IG9ubHkgc3VwcG9ydCBvbmUgY2FuZGlkYXRlIGFuZCBjaG9vc2UgdGhlIGZpcnN0IFVEUCBjYW5k aWRhdGUuCisgICAgICogSG93ZXZlciwgd2UgcGxhbiB0byBzdXBwb3J0IG11bHRpcGxlIGNhbmRp ZGF0ZXMgaW4gdGhlIGZ1dHVyZS4KKyAgICAgKi8KKyAgICBjaGFyICppY2VfcHJvdG9jb2w7Cisg ICAgY2hhciAqaWNlX2hvc3Q7CisgICAgaW50IGljZV9wb3J0OworCisgICAgLyogVGhlIFNEUCBh bnN3ZXIgcmVjZWl2ZWQgZnJvbSB0aGUgV2ViUlRDIHNlcnZlci4gKi8KKyAgICBjaGFyICpzZHBf YW5zd2VyOworICAgIC8qIFRoZSByZXNvdXJjZSBVUkwgcmV0dXJuZWQgaW4gdGhlIExvY2F0aW9u IGhlYWRlciBvZiBXSElQIEhUVFAgcmVzcG9uc2UuICovCisgICAgY2hhciAqd2hpcF9yZXNvdXJj ZV91cmw7CisKKyAgICAvKiBUaGVzZSB2YXJpYWJsZXMgcmVwcmVzZW50IHRpbWVzdGFtcHMgdXNl ZCBmb3IgY2FsY3VsYXRpbmcgYW5kIHRyYWNraW5nIHRoZSBjb3N0LiAqLworICAgIGludDY0X3Qg d2hpcF9zdGFydHRpbWU7CisgICAgaW50NjRfdCB3aGlwX2luaXRfdGltZTsKKyAgICBpbnQ2NF90 IHdoaXBfb2ZmZXJfdGltZTsKKyAgICBpbnQ2NF90IHdoaXBfYW5zd2VyX3RpbWU7CisgICAgaW50 NjRfdCB3aGlwX3VkcF90aW1lOworICAgIGludDY0X3Qgd2hpcF9pY2VfdGltZTsKKyAgICBpbnQ2 NF90IHdoaXBfZHRsc190aW1lOworICAgIGludDY0X3Qgd2hpcF9zcnRwX3RpbWU7CisKKyAgICAv KiBUaGUgY2VydGlmaWNhdGUgYW5kIHByaXZhdGUga2V5IGNvbnRlbnQgdXNlZCBmb3IgRFRMUyBo YW5zaGFrZSAqLworICAgIGNoYXIgY2VydF9idWZbTUFYX0NFUlRJRklDQVRFX1NJWkVdOworICAg IGNoYXIga2V5X2J1ZltNQVhfQ0VSVElGSUNBVEVfU0laRV07CisgICAgLyogVGhlIGZpbmdlcnBy aW50IG9mIGNlcnRpZmljYXRlLCB1c2VkIGluIFNEUCBvZmZlci4gKi8KKyAgICBjaGFyICpkdGxz X2ZpbmdlcnByaW50OworICAgIC8qKgorICAgICAqIFRoaXMgcmVwcmVzZW50cyB0aGUgbWF0ZXJp YWwgdXNlZCB0byBidWlsZCB0aGUgU1JUUCBtYXN0ZXIga2V5LiBJdCBpcworICAgICAqIGdlbmVy YXRlZCBieSBEVExTIGFuZCBoYXMgdGhlIGZvbGxvd2luZyBsYXlvdXQ6CisgICAgICogICAgICAg ICAgMTZCICAgICAgICAgMTZCICAgICAgICAgMTRCICAgICAgICAgICAgIDE0QgorICAgICAqICAg ICAgY2xpZW50X2tleSB8IHNlcnZlcl9rZXkgfCBjbGllbnRfc2FsdCB8IHNlcnZlcl9zYWx0Cisg ICAgICovCisgICAgdWludDhfdCBkdGxzX3NydHBfbWF0ZXJpYWxzWyhEVExTX1NSVFBfS0VZX0xF TiArIERUTFNfU1JUUF9TQUxUX0xFTikgKiAyXTsKKworICAgIGNoYXIgc3NsX2Vycm9yX21lc3Nh Z2VbMjU2XTsKKworICAgIC8qIFRPRE86IFVzZSBBVklPQ29udGV4dCBpbnN0ZWFkIG9mIFVSTENv bnRleHQgKi8KKyAgICBVUkxDb250ZXh0ICpkdGxzX3VjOworCisgICAgLyogVGhlIFNSVFAgc2Vu ZCBjb250ZXh0LCB0byBlbmNyeXB0IG91dGdvaW5nIHBhY2tldHMuICovCisgICAgU1JUUENvbnRl eHQgc3J0cF9hdWRpb19zZW5kOworICAgIFNSVFBDb250ZXh0IHNydHBfdmlkZW9fc2VuZDsKKyAg ICBTUlRQQ29udGV4dCBzcnRwX3J0Y3Bfc2VuZDsKKyAgICAvKiBUaGUgU1JUUCByZWNlaXZlIGNv bnRleHQsIHRvIGRlY3J5cHQgaW5jb21pbmcgcGFja2V0cy4gKi8KKyAgICBTUlRQQ29udGV4dCBz cnRwX3JlY3Y7CisKKyAgICAvKiBUaGUgVURQIHRyYW5zcG9ydCBpcyB1c2VkIGZvciBkZWxpdmVy aW5nIElDRSwgRFRMUyBhbmQgU1JUUCBwYWNrZXRzLiAqLworICAgIFVSTENvbnRleHQgKnVkcDsK KyAgICAvKiBUaGUgYnVmZmVyIGZvciBVRFAgdHJhbnNtaXNzaW9uLiAqLworICAgIGNoYXIgYnVm W01BWF9VRFBfQlVGRkVSX1NJWkVdOworCisgICAgLyogVGhlIHRpbWVvdXQgaW4gbWlsbGlzZWNv bmRzIGZvciBJQ0UgYW5kIERUTFMgaGFuZHNoYWtlLiAqLworICAgIGludCBoYW5kc2hha2VfdGlt ZW91dDsKKyAgICAvKioKKyAgICAgKiBUaGUgc2l6ZSBvZiBSVFAgcGFja2V0LCBzaG91bGQgZ2Vu ZXJhbGx5IGJlIHNldCB0byBNVFUuCisgICAgICogTm90ZSB0aGF0IHBpb24gcmVxdWlyZXMgYSBz bWFsbGVyIHZhbHVlLCBmb3IgZXhhbXBsZSwgMTIwMC4KKyAgICAgKi8KKyAgICBpbnQgcGt0X3Np emU7CisgICAgLyoqCisgICAgICogVGhlIG9wdGlvbmFsIEJlYXJlciB0b2tlbiBmb3IgV0hJUCBB dXRob3JpemF0aW9uLgorICAgICAqIFNlZSBodHRwczovL3d3dy5pZXRmLm9yZy9hcmNoaXZlL2lk L2RyYWZ0LWlldGYtd2lzaC13aGlwLTA4Lmh0bWwjbmFtZS1hdXRoZW50aWNhdGlvbi1hbmQtYXV0 aG9yaXoKKyAgICAgKi8KKyAgICBjaGFyKiBhdXRob3JpemF0aW9uOworICAgIC8qIFRoZSBjZXJ0 aWZpY2F0ZSBhbmQgcHJpdmF0ZSBrZXkgdXNlZCBmb3IgRFRMUyBoYW5kc2hha2UuICovCisgICAg Y2hhciogY2VydF9maWxlOworICAgIGNoYXIqIGtleV9maWxlOworfSBXSElQQ29udGV4dDsKKwor LyoqCisgKiBXaGV0aGVyIHRoZSBwYWNrZXQgaXMgYSBEVExTIHBhY2tldC4KKyAqLworc3RhdGlj IGludCBpc19kdGxzX3BhY2tldCh1aW50OF90ICpiLCBpbnQgc2l6ZSkgeworICAgIHVpbnQxNl90 IHZlcnNpb24gPSBBVl9SQjE2KCZiWzFdKTsKKyAgICByZXR1cm4gc2l6ZSA+IERUTFNfUkVDT1JE X0xBWUVSX0hFQURFUl9MRU4gJiYKKyAgICAgICAgYlswXSA+PSBEVExTX0NPTlRFTlRfVFlQRV9D SEFOR0VfQ0lQSEVSX1NQRUMgJiYKKyAgICAgICAgKHZlcnNpb24gPT0gRFRMU19WRVJTSU9OXzEw IHx8IHZlcnNpb24gPT0gRFRMU19WRVJTSU9OXzEyKTsKK30KKworCisvKioKKyAqIEdldCBvciBH ZW5lcmF0ZSBhIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlIGFuZCBwcml2YXRlIGtleSBmb3IgRFRM UywKKyAqIGZpbmdlcnByaW50IGZvciBTRFAKKyAqLworc3RhdGljIGF2X2NvbGQgaW50IGNlcnRp ZmljYXRlX2tleV9pbml0KEFWRm9ybWF0Q29udGV4dCAqcykKK3sKKyAgICBpbnQgcmV0ID0gMDsK KyAgICBXSElQQ29udGV4dCAqd2hpcCA9IHMtPnByaXZfZGF0YTsKKworICAgIGlmICh3aGlwLT5j ZXJ0X2ZpbGUgJiYgd2hpcC0+a2V5X2ZpbGUpIHsKKyAgICAgICAgLyogUmVhZCB0aGUgcHJpdmF0 ZSBrZXkgYW5kIGNlcnRpZmljYXRlIGZyb20gdGhlIGZpbGUuICovCisgICAgICAgIGlmICgocmV0 ID0gZmZfc3NsX3JlYWRfa2V5X2NlcnQod2hpcC0+a2V5X2ZpbGUsIHdoaXAtPmNlcnRfZmlsZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlwLT5rZXlfYnVmLCBz aXplb2Yod2hpcC0+a2V5X2J1ZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgd2hpcC0+Y2VydF9idWYsIHNpemVvZih3aGlwLT5jZXJ0X2J1ZiksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJndoaXAtPmR0bHNfZmluZ2VycHJpbnQpKSA8 IDApIHsKKyAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJEVExTOiBGYWlsZWQg dG8gcmVhZCBEVExTIGNlcnRpZmljYXRlIGZyb20gY2VydD0lcywga2V5PSVzXG4iLAorICAgICAg ICAgICAgICAgIHdoaXAtPmNlcnRfZmlsZSwgd2hpcC0+a2V5X2ZpbGUpOworICAgICAgICAgICAg cmV0dXJuIHJldDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8qIEdlbmVyYXRl IGEgcHJpdmF0ZSBrZXkgdG8gY3R4LT5kdGxzX3BrZXkgYW5kIHNlbGYtc2lnbmVkIGNlcnRpZmlj YXRlLiAqLworICAgICAgICBpZiAoKHJldCA9IGZmX3NzbF9nZW5fa2V5X2NlcnQod2hpcC0+a2V5 X2J1Ziwgc2l6ZW9mKHdoaXAtPmtleV9idWYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgd2hpcC0+Y2VydF9idWYsIHNpemVvZih3aGlwLT5jZXJ0X2J1ZiksCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd2hpcC0+ZHRsc19maW5nZXJwcmlu dCkpIDwgMCkgeworICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIkRUTFM6IEZh aWxlZCB0byBnZW5lcmF0ZSBEVExTIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZVxuIik7Cisg ICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJl dDsKK30KKworLyoqCisgKiBXaGVuIERUTFMgc3RhdGUgY2hhbmdlLgorICovCitzdGF0aWMgaW50 IGR0bHNfY29udGV4dF9vbl9zdGF0ZShBVkZvcm1hdENvbnRleHQgKnMsIGNvbnN0IGNoYXIqIHR5 cGUsIGNvbnN0IGNoYXIqIGRlc2MpCit7CisgICAgaW50IHJldCA9IDA7CisgICAgV0hJUENvbnRl eHQgKndoaXAgPSBzLT5wcml2X2RhdGE7CisgICAgaW50IHN0YXRlID0gZmZfZHRsc19zdGF0ZSh3 aGlwLT5kdGxzX3VjKTsKKworICAgIGlmIChzdGF0ZSA9PSBEVExTX1NUQVRFX0NMT1NFRCkgewor ICAgICAgICB3aGlwLT5kdGxzX2Nsb3NlZCA9IDE7CisgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9M T0dfVkVSQk9TRSwgIldISVA6IERUTFMgc2Vzc2lvbiBjbG9zZWQsIHR5cGU9JXMsIGRlc2M9JXMs IGVsYXBzZWQ9JWRtc1xuIiwKKyAgICAgICAgICAgIHR5cGUgPyB0eXBlIDogIiIsIGRlc2MgPyBk ZXNjIDogIiIsIEVMQVBTRUQod2hpcC0+d2hpcF9zdGFydHRpbWUsIGF2X2dldHRpbWUoKSkpOwor ICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIGlmIChzdGF0ZSA9PSBEVExTX1NUQVRF X0ZBSUxFRCkgeworICAgICAgICB3aGlwLT5zdGF0ZSA9IFdISVBfU1RBVEVfRkFJTEVEOworICAg ICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRFRMUyBzZXNzaW9uIGZhaWxl ZCwgdHlwZT0lcywgZGVzYz0lc1xuIiwKKyAgICAgICAgICAgIHR5cGUgPyB0eXBlIDogIiIsIGRl c2MgPyBkZXNjIDogIiIpOworICAgICAgICB3aGlwLT5kdGxzX3JldCA9IEFWRVJST1IoRUlPKTsK KyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBpZiAoc3RhdGUgPT0gRFRMU19TVEFU RV9GSU5JU0hFRCAmJiB3aGlwLT5zdGF0ZSA8IFdISVBfU1RBVEVfRFRMU19GSU5JU0hFRCkgewor ICAgICAgICB3aGlwLT5zdGF0ZSA9IFdISVBfU1RBVEVfRFRMU19GSU5JU0hFRDsKKyAgICAgICAg d2hpcC0+d2hpcF9kdGxzX3RpbWUgPSBhdl9nZXR0aW1lKCk7CisgICAgICAgIGF2X2xvZyh3aGlw LCBBVl9MT0dfVkVSQk9TRSwgIldISVA6IERUTFMgaGFuZHNoYWtlIGlzIGRvbmUsIGVsYXBzZWQ9 JWRtc1xuIiwKKyAgICAgICAgICAgIEVMQVBTRUQod2hpcC0+d2hpcF9zdGFydHRpbWUsIGF2X2dl dHRpbWUoKSkpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KK2Vycm9yOgorICAgIHJldHVy biAtMTsKK30KKworc3RhdGljIGF2X2NvbGQgaW50IGR0bHNfaW5pdGlhbGl6ZShBVkZvcm1hdENv bnRleHQgKnMpCit7CisgICAgV0hJUENvbnRleHQgKndoaXAgPSBzLT5wcml2X2RhdGE7CisgICAg LyogcmV1c2UgdGhlIHVkcCBjcmVhdGVkIGJ5IHdoaXAgKi8KKyAgICBmZl9kdGxzX3NldF91ZHAo d2hpcC0+ZHRsc191Yywgd2hpcC0+dWRwKTsKKyAgICByZXR1cm4gMDsKK30KKworLyoqCisgKiBJ bml0aWFsaXplIGFuZCBjaGVjayB0aGUgb3B0aW9ucyBmb3IgdGhlIFdlYlJUQyBtdXhlci4KKyAq Lworc3RhdGljIGF2X2NvbGQgaW50IGluaXRpYWxpemUoQVZGb3JtYXRDb250ZXh0ICpzKQorewor ICAgIGludCByZXQsIGlkZWFsX3BrdF9zaXplID0gNTMyOworICAgIFdISVBDb250ZXh0ICp3aGlw ID0gcy0+cHJpdl9kYXRhOworICAgIHVpbnQzMl90IHNlZWQ7CisKKyAgICB3aGlwLT53aGlwX3N0 YXJ0dGltZSA9IGF2X2dldHRpbWUoKTsKKworICAgIHJldCA9IGNlcnRpZmljYXRlX2tleV9pbml0 KHMpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJS T1IsICJXSElQOiBGYWlsZWQgdG8gaW5pdCBjZXJ0aWZpY2F0ZSBhbmQga2V5XG4iKTsKKyAgICAg ICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSByYW5kb20gbnVt YmVyIGdlbmVyYXRvci4gKi8KKyAgICBzZWVkID0gYXZfZ2V0X3JhbmRvbV9zZWVkKCk7CisgICAg YXZfbGZnX2luaXQoJndoaXAtPnJuZCwgc2VlZCk7CisKKyAgICBpZiAod2hpcC0+cGt0X3NpemUg PCBpZGVhbF9wa3Rfc2l6ZSkKKyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19XQVJOSU5HLCAi V0hJUDogcGt0X3NpemU9JWQoPCVkKSBpcyB0b28gc21hbGwsIG1heSBjYXVzZSBwYWNrZXQgbG9z c1xuIiwKKyAgICAgICAgICAgICAgIHdoaXAtPnBrdF9zaXplLCBpZGVhbF9wa3Rfc2l6ZSk7CisK KyAgICBpZiAod2hpcC0+c3RhdGUgPCBXSElQX1NUQVRFX0lOSVQpCisgICAgICAgIHdoaXAtPnN0 YXRlID0gV0hJUF9TVEFURV9JTklUOworICAgIHdoaXAtPndoaXBfaW5pdF90aW1lID0gYXZfZ2V0 dGltZSgpOworICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfVkVSQk9TRSwgIldISVA6IEluaXQgc3Rh dGU9JWQsIGhhbmRzaGFrZV90aW1lb3V0PSVkbXMsIHBrdF9zaXplPSVkLCBzZWVkPSVkLCBlbGFw c2VkPSVkbXNcbiIsCisgICAgICAgIHdoaXAtPnN0YXRlLCB3aGlwLT5oYW5kc2hha2VfdGltZW91 dCwgd2hpcC0+cGt0X3NpemUsIHNlZWQsIEVMQVBTRUQod2hpcC0+d2hpcF9zdGFydHRpbWUsIGF2 X2dldHRpbWUoKSkpOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qKgorICogV2hlbiBkdXBsaWNh dGluZyBhIHN0cmVhbSwgdGhlIGRlbXV4ZXIgaGFzIGFscmVhZHkgc2V0IHRoZSBleHRyYWRhdGEs IHByb2ZpbGUsIGFuZAorICogbGV2ZWwgb2YgdGhlIHBhci4gS2VlcCBpbiBtaW5kIHRoYXQgdGhp cyBmdW5jdGlvbiB3aWxsIG5vdCBiZSBpbnZva2VkIHNpbmNlIHRoZQorICogcHJvZmlsZSBhbmQg bGV2ZWwgYXJlIHNldC4KKyAqCisgKiBXaGVuIHV0aWxpemluZyBhbiBlbmNvZGVyLCBzdWNoIGFz IGxpYngyNjQsIHRvIGVuY29kZSBhIHN0cmVhbSwgdGhlIGV4dHJhZGF0YSBpbgorICogcGFyLT5l eHRyYWRhdGEgY29udGFpbnMgdGhlIFNQUywgd2hpY2ggaW5jbHVkZXMgcHJvZmlsZSBhbmQgbGV2 ZWwgaW5mb3JtYXRpb24uCisgKiBIb3dldmVyLCB0aGUgcHJvZmlsZSBhbmQgbGV2ZWwgb2YgcGFy IHJlbWFpbiB1bnNwZWNpZmllZC4gVGhlcmVmb3JlLCBpdCBpcyBuZWNlc3NhcnkKKyAqIHRvIGV4 dHJhY3QgdGhlIHByb2ZpbGUgYW5kIGxldmVsIGRhdGEgZnJvbSB0aGUgZXh0cmFkYXRhIGFuZCBh c3NpZ24gaXQgdG8gdGhlIHBhcidzCisgKiBwcm9maWxlIGFuZCBsZXZlbC4gS2VlcCBpbiBtaW5k IHRoYXQgQVZGTVRfR0xPQkFMSEVBREVSIG11c3QgYmUgZW5hYmxlZDsgb3RoZXJ3aXNlLAorICog dGhlIGV4dHJhZGF0YSB3aWxsIHJlbWFpbiBlbXB0eS4KKyAqLworc3RhdGljIGludCBwYXJzZV9w cm9maWxlX2xldmVsKEFWRm9ybWF0Q29udGV4dCAqcywgQVZDb2RlY1BhcmFtZXRlcnMgKnBhcikK K3sKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBjb25zdCB1aW50OF90ICpyID0gcGFyLT5leHRyYWRh dGEsICpyMSwgKmVuZCA9IHBhci0+ZXh0cmFkYXRhICsgcGFyLT5leHRyYWRhdGFfc2l6ZTsKKyAg ICBIMjY0U1BTIHNlcSwgKmNvbnN0IHNwcyA9ICZzZXE7CisgICAgdWludDMyX3Qgc3RhdGU7Cisg ICAgV0hJUENvbnRleHQgKndoaXAgPSBzLT5wcml2X2RhdGE7CisKKyAgICBpZiAocGFyLT5jb2Rl Y19pZCAhPSBBVl9DT0RFQ19JRF9IMjY0KQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgaWYg KHBhci0+cHJvZmlsZSAhPSBBVl9QUk9GSUxFX1VOS05PV04gJiYgcGFyLT5sZXZlbCAhPSBBVl9M RVZFTF9VTktOT1dOKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgaWYgKCFwYXItPmV4dHJh ZGF0YSB8fCBwYXItPmV4dHJhZGF0YV9zaXplIDw9IDApIHsKKyAgICAgICAgYXZfbG9nKHdoaXAs IEFWX0xPR19FUlJPUiwgIldISVA6IFVuYWJsZSB0byBwYXJzZSBwcm9maWxlIGZyb20gZW1wdHkg ZXh0cmFkYXRhPSVwLCBzaXplPSVkXG4iLAorICAgICAgICAgICAgcGFyLT5leHRyYWRhdGEsIHBh ci0+ZXh0cmFkYXRhX3NpemUpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAg IH0KKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIHIgPSBhdnByaXZfZmluZF9zdGFydF9jb2Rl KHIsIGVuZCwgJnN0YXRlKTsKKyAgICAgICAgaWYgKHIgPj0gZW5kKQorICAgICAgICAgICAgYnJl YWs7CisKKyAgICAgICAgcjEgPSBmZl9uYWxfZmluZF9zdGFydGNvZGUociwgZW5kKTsKKyAgICAg ICAgaWYgKChzdGF0ZSAmIDB4MWYpID09IEgyNjRfTkFMX1NQUykgeworICAgICAgICAgICAgcmV0 ID0gZmZfYXZjX2RlY29kZV9zcHMoc3BzLCByLCByMSAtIHIpOworICAgICAgICAgICAgaWYgKHJl dCA8IDApIHsKKyAgICAgICAgICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJ UDogRmFpbGVkIHRvIGRlY29kZSBTUFMsIHN0YXRlPSV4LCBzaXplPSVkXG4iLAorICAgICAgICAg ICAgICAgICAgICBzdGF0ZSwgKGludCkocjEgLSByKSk7CisgICAgICAgICAgICAgICAgcmV0dXJu IHJldDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19W RVJCT1NFLCAiV0hJUDogUGFyc2UgcHJvZmlsZT0lZCwgbGV2ZWw9JWQgZnJvbSBTUFNcbiIsCisg ICAgICAgICAgICAgICAgc3BzLT5wcm9maWxlX2lkYywgc3BzLT5sZXZlbF9pZGMpOworICAgICAg ICAgICAgcGFyLT5wcm9maWxlID0gc3BzLT5wcm9maWxlX2lkYzsKKyAgICAgICAgICAgIHBhci0+ bGV2ZWwgPSBzcHMtPmxldmVsX2lkYzsKKyAgICAgICAgfQorCisgICAgICAgIHIgPSByMTsKKyAg ICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCisvKioKKyAqIFBhcnNlcyB2aWRlbyBTUFMvUFBT IGZyb20gdGhlIGV4dHJhZGF0YSBvZiBjb2RlY3BhciBhbmQgY2hlY2tzIHRoZSBjb2RlYy4KKyAq IEN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIHZpZGVvKGgyNjQpIGFuZCBhdWRpbyhvcHVzKS4gTm90 ZSB0aGF0IG9ubHkgYmFzZWxpbmUKKyAqIGFuZCBjb25zdHJhaW5lZCBiYXNlbGluZSBwcm9maWxl cyBvZiBoMjY0IGFyZSBzdXBwb3J0ZWQuCisgKgorICogSWYgdGhlIHByb2ZpbGUgaXMgbGVzcyB0 aGFuIDAsIHRoZSBmdW5jdGlvbiBjb25zaWRlcnMgdGhlIHByb2ZpbGUgYXMgYmFzZWxpbmUuCisg KiBJdCBtYXkgbmVlZCB0byBwYXJzZSB0aGUgcHJvZmlsZSBmcm9tIFNQUy9QUFMuIFRoaXMgc2l0 dWF0aW9uIG9jY3VycyB3aGVuIGluZ2VzdGluZworICogZGVza3RvcCBhbmQgdHJhbnNjb2Rpbmcu CisgKgorICogQHBhcmFtIHMgUG9pbnRlciB0byB0aGUgQVZGb3JtYXRDb250ZXh0CisgKiBAcmV0 dXJucyBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCBvciBBVkVSUk9SX3h4eCBpbiBjYXNlIG9mIGFu IGVycm9yLgorICoKKyAqIFRPRE86IEZJWE1FOiBUaGVyZSBpcyBhbiBpc3N1ZSB3aXRoIHRoZSB0 aW1lc3RhbXAgb2YgT1BVUyBhdWRpbywgZXNwZWNpYWxseSB3aGVuCisgKiAgdGhlIGlucHV0IGlz IGFuIE1QNCBmaWxlLiBUaGUgdGltZXN0YW1wIGRldmlhdGVzIGZyb20gdGhlIGV4cGVjdGVkIHZh bHVlIG9mIDk2MCwKKyAqICBjYXVzaW5nIENocm9tZSB0byBwbGF5IHRoZSBhdWRpbyBzdHJlYW0g d2l0aCBub2lzZS4gVGhpcyBwcm9ibGVtIGNhbiBiZSByZXBsaWNhdGVkCisgKiAgYnkgdHJhbnNj b2RpbmcgYSBzcGVjaWZpYyBmaWxlIGludG8gTVA0IGZvcm1hdCBhbmQgcHVibGlzaGluZyBpdCB1 c2luZyB0aGUgV0hJUAorICogIG11eGVyLiBIb3dldmVyLCB3aGVuIGRpcmVjdGx5IHRyYW5zY29k aW5nIGFuZCBwdWJsaXNoaW5nIHRocm91Z2ggdGhlIFdISVAgbXV4ZXIsCisgKiAgdGhlIGlzc3Vl IGlzIG5vdCBwcmVzZW50LCBhbmQgdGhlIGF1ZGlvIHRpbWVzdGFtcCByZW1haW5zIGNvbnNpc3Rl bnQuIFRoZSByb290CisgKiAgY2F1c2UgaXMgc3RpbGwgdW5rbm93biwgYW5kIHRoaXMgY29tbWVu dCBoYXMgYmVlbiBhZGRlZCB0byBhZGRyZXNzIHRoaXMgaXNzdWUKKyAqICBpbiB0aGUgZnV0dXJl LiBGdXJ0aGVyIHJlc2VhcmNoIGlzIG5lZWRlZCB0byByZXNvbHZlIHRoZSBwcm9ibGVtLgorICov CitzdGF0aWMgaW50IHBhcnNlX2NvZGVjKEFWRm9ybWF0Q29udGV4dCAqcykKK3sKKyAgICBpbnQg aSwgcmV0ID0gMDsKKyAgICBXSElQQ29udGV4dCAqd2hpcCA9IHMtPnByaXZfZGF0YTsKKworICAg IGZvciAoaSA9IDA7IGkgPCBzLT5uYl9zdHJlYW1zOyBpKyspIHsKKyAgICAgICAgQVZDb2RlY1Bh cmFtZXRlcnMgKnBhciA9IHMtPnN0cmVhbXNbaV0tPmNvZGVjcGFyOworICAgICAgICBjb25zdCBB VkNvZGVjRGVzY3JpcHRvciAqZGVzYyA9IGF2Y29kZWNfZGVzY3JpcHRvcl9nZXQocGFyLT5jb2Rl Y19pZCk7CisgICAgICAgIHN3aXRjaCAocGFyLT5jb2RlY190eXBlKSB7CisgICAgICAgIGNhc2Ug QVZNRURJQV9UWVBFX1ZJREVPOgorICAgICAgICAgICAgaWYgKHdoaXAtPnZpZGVvX3Bhcikgewor ICAgICAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBPbmx5IG9u ZSB2aWRlbyBzdHJlYW0gaXMgc3VwcG9ydGVkIGJ5IFJUQ1xuIik7CisgICAgICAgICAgICAgICAg cmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaXAt PnZpZGVvX3BhciA9IHBhcjsKKworICAgICAgICAgICAgaWYgKHBhci0+Y29kZWNfaWQgIT0gQVZf Q09ERUNfSURfSDI2NCkgeworICAgICAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJS T1IsICJXSElQOiBVbnN1cHBvcnRlZCB2aWRlbyBjb2RlYyAlcyBieSBSVEMsIGNob29zZSBoMjY0 XG4iLAorICAgICAgICAgICAgICAgICAgICAgICBkZXNjID8gZGVzYy0+bmFtZSA6ICJ1bmtub3du Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOworICAgICAg ICAgICAgfQorCisgICAgICAgICAgICBpZiAocGFyLT52aWRlb19kZWxheSA+IDApIHsKKyAgICAg ICAgICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogVW5zdXBwb3J0ZWQg QiBmcmFtZXMgYnkgUlRDXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9QQVRD SFdFTENPTUU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgocmV0ID0gcGFyc2Vf cHJvZmlsZV9sZXZlbChzLCBwYXIpKSA8IDApIHsKKyAgICAgICAgICAgICAgICBhdl9sb2cod2hp cCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIHBhcnNlIFNQUy9QUFMgZnJvbSBleHRy YWRhdGFcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAg ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwYXItPnByb2ZpbGUgPT0gQVZfUFJPRklMRV9V TktOT1dOKSB7CisgICAgICAgICAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19XQVJOSU5HLCAi V0hJUDogTm8gcHJvZmlsZSBmb3VuZCBpbiBleHRyYWRhdGEsIGNvbnNpZGVyIGJhc2VsaW5lXG4i KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgICAgICAgICAg fQorICAgICAgICAgICAgaWYgKHBhci0+bGV2ZWwgPT0gQVZfTEVWRUxfVU5LTk9XTikgeworICAg ICAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfV0FSTklORywgIldISVA6IE5vIGxldmVs IGZvdW5kIGluIGV4dHJhZGF0YSwgY29uc2lkZXIgMy4xXG4iKTsKKyAgICAgICAgICAgICAgICBy ZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgIGNhc2UgQVZNRURJQV9UWVBFX0FVRElPOgorICAgICAgICAgICAgaWYgKHdoaXAt PmF1ZGlvX3BhcikgeworICAgICAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1Is ICJXSElQOiBPbmx5IG9uZSBhdWRpbyBzdHJlYW0gaXMgc3VwcG9ydGVkIGJ5IFJUQ1xuIik7Cisg ICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIHdoaXAtPmF1ZGlvX3BhciA9IHBhcjsKKworICAgICAgICAgICAgaWYgKHBhci0+ Y29kZWNfaWQgIT0gQVZfQ09ERUNfSURfT1BVUykgeworICAgICAgICAgICAgICAgIGF2X2xvZyh3 aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBVbnN1cHBvcnRlZCBhdWRpbyBjb2RlYyAlcyBieSBS VEMsIGNob29zZSBvcHVzXG4iLAorICAgICAgICAgICAgICAgICAgICBkZXNjID8gZGVzYy0+bmFt ZSA6ICJ1bmtub3duIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxD T01FOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocGFyLT5jaF9sYXlvdXQubmJf Y2hhbm5lbHMgIT0gMikgeworICAgICAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJS T1IsICJXSElQOiBVbnN1cHBvcnRlZCBhdWRpbyBjaGFubmVscyAlZCBieSBSVEMsIGNob29zZSBz dGVyZW9cbiIsCisgICAgICAgICAgICAgICAgICAgIHBhci0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxz KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7CisgICAgICAg ICAgICB9CisKKyAgICAgICAgICAgIGlmIChwYXItPnNhbXBsZV9yYXRlICE9IDQ4MDAwKSB7Cisg ICAgICAgICAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IFVuc3VwcG9y dGVkIGF1ZGlvIHNhbXBsZSByYXRlICVkIGJ5IFJUQywgY2hvb3NlIDQ4MDAwXG4iLCBwYXItPnNh bXBsZV9yYXRlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg ICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBDb2RlYyB0eXBlICcl cycgZm9yIHN0cmVhbSAlZCBpcyBub3Qgc3VwcG9ydGVkIGJ5IFJUQ1xuIiwKKyAgICAgICAgICAg ICAgICAgICBhdl9nZXRfbWVkaWFfdHlwZV9zdHJpbmcocGFyLT5jb2RlY190eXBlKSwgaSk7Cisg ICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7CisgICAgICAgIH0KKyAgICB9 CisKKyAgICByZXR1cm4gcmV0OworfQorCisvKioKKyAqIEdlbmVyYXRlIFNEUCBvZmZlciBhY2Nv cmRpbmcgdG8gdGhlIGNvZGVjIHBhcmFtZXRlcnMsIERUTFMgYW5kIElDRSBpbmZvcm1hdGlvbi4K KyAqCisgKiBOb3RlIHRoYXQgd2UgZG9uJ3QgdXNlIGF2X3NkcF9jcmVhdGUgdG8gZ2VuZXJhdGUg U0RQIG9mZmVyIGJlY2F1c2UgaXQgZG9lc24ndAorICogc3VwcG9ydCBEVExTIGFuZCBJQ0UgaW5m b3JtYXRpb24uCisgKgorICogQHJldHVybiAwIGlmIE9LLCBBVkVSUk9SX3h4eCBvbiBlcnJvcgor ICovCitzdGF0aWMgaW50IGdlbmVyYXRlX3NkcF9vZmZlcihBVkZvcm1hdENvbnRleHQgKnMpCit7 CisgICAgaW50IHJldCA9IDAsIHByb2ZpbGUsIGxldmVsLCBwcm9maWxlX2lvcDsKKyAgICBjb25z dCBjaGFyICphY29kZWNfbmFtZSA9IE5VTEwsICp2Y29kZWNfbmFtZSA9IE5VTEw7CisgICAgQVZC UHJpbnQgYnA7CisgICAgV0hJUENvbnRleHQgKndoaXAgPSBzLT5wcml2X2RhdGE7CisKKyAgICAv KiBUbyBwcmV2ZW50IGEgY3Jhc2ggZHVyaW5nIGNsZWFudXAsIGFsd2F5cyBpbml0aWFsaXplIGl0 LiAqLworICAgIGF2X2JwcmludF9pbml0KCZicCwgMSwgTUFYX1NEUF9TSVpFKTsKKworICAgIGlm ICh3aGlwLT5zZHBfb2ZmZXIpIHsKKyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwg IldISVA6IFNEUCBvZmZlciBpcyBhbHJlYWR5IHNldFxuIik7CisgICAgICAgIHJldCA9IEFWRVJS T1IoRUlOVkFMKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgc25wcmludGYod2hp cC0+aWNlX3VmcmFnX2xvY2FsLCBzaXplb2Yod2hpcC0+aWNlX3VmcmFnX2xvY2FsKSwgIiUwOHgi LAorICAgICAgICBhdl9sZmdfZ2V0KCZ3aGlwLT5ybmQpKTsKKyAgICBzbnByaW50Zih3aGlwLT5p Y2VfcHdkX2xvY2FsLCBzaXplb2Yod2hpcC0+aWNlX3B3ZF9sb2NhbCksICIlMDh4JTA4eCUwOHgl MDh4IiwKKyAgICAgICAgYXZfbGZnX2dldCgmd2hpcC0+cm5kKSwgYXZfbGZnX2dldCgmd2hpcC0+ cm5kKSwgYXZfbGZnX2dldCgmd2hpcC0+cm5kKSwKKyAgICAgICAgYXZfbGZnX2dldCgmd2hpcC0+ cm5kKSk7CisKKyAgICB3aGlwLT5hdWRpb19zc3JjID0gYXZfbGZnX2dldCgmd2hpcC0+cm5kKTsK KyAgICB3aGlwLT52aWRlb19zc3JjID0gYXZfbGZnX2dldCgmd2hpcC0+cm5kKTsKKworICAgIHdo aXAtPmF1ZGlvX3BheWxvYWRfdHlwZSA9IFdISVBfUlRQX1BBWUxPQURfVFlQRV9PUFVTOworICAg IHdoaXAtPnZpZGVvX3BheWxvYWRfdHlwZSA9IFdISVBfUlRQX1BBWUxPQURfVFlQRV9IMjY0Owor CisgICAgYXZfYnByaW50ZigmYnAsICIiCisgICAgICAgICJ2PTBcclxuIgorICAgICAgICAibz1G Rm1wZWcgJXMgMiBJTiBJUDQgJXNcclxuIgorICAgICAgICAicz1GRm1wZWdQdWJsaXNoU2Vzc2lv blxyXG4iCisgICAgICAgICJ0PTAgMFxyXG4iCisgICAgICAgICJhPWdyb3VwOkJVTkRMRSAwIDFc clxuIgorICAgICAgICAiYT1leHRtYXAtYWxsb3ctbWl4ZWRcclxuIgorICAgICAgICAiYT1tc2lk LXNlbWFudGljOiBXTVNcclxuIiwKKyAgICAgICAgV0hJUF9TRFBfU0VTU0lPTl9JRCwKKyAgICAg ICAgV0hJUF9TRFBfQ1JFQVRPUl9JUCk7CisKKyAgICBpZiAod2hpcC0+YXVkaW9fcGFyKSB7Cisg ICAgICAgIGlmICh3aGlwLT5hdWRpb19wYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX09QVVMp CisgICAgICAgICAgICBhY29kZWNfbmFtZSA9ICJvcHVzIjsKKworICAgICAgICBhdl9icHJpbnRm KCZicCwgIiIKKyAgICAgICAgICAgICJtPWF1ZGlvIDkgVURQL1RMUy9SVFAvU0FWUEYgJXVcclxu IgorICAgICAgICAgICAgImM9SU4gSVA0IDAuMC4wLjBcclxuIgorICAgICAgICAgICAgImE9aWNl LXVmcmFnOiVzXHJcbiIKKyAgICAgICAgICAgICJhPWljZS1wd2Q6JXNcclxuIgorICAgICAgICAg ICAgImE9ZmluZ2VycHJpbnQ6c2hhLTI1NiAlc1xyXG4iCisgICAgICAgICAgICAiYT1zZXR1cDpw YXNzaXZlXHJcbiIKKyAgICAgICAgICAgICJhPW1pZDowXHJcbiIKKyAgICAgICAgICAgICJhPXNl bmRvbmx5XHJcbiIKKyAgICAgICAgICAgICJhPW1zaWQ6RkZtcGVnIGF1ZGlvXHJcbiIKKyAgICAg ICAgICAgICJhPXJ0Y3AtbXV4XHJcbiIKKyAgICAgICAgICAgICJhPXJ0cG1hcDoldSAlcy8lZC8l ZFxyXG4iCisgICAgICAgICAgICAiYT1zc3JjOiV1IGNuYW1lOkZGbXBlZ1xyXG4iCisgICAgICAg ICAgICAiYT1zc3JjOiV1IG1zaWQ6RkZtcGVnIGF1ZGlvXHJcbiIsCisgICAgICAgICAgICB3aGlw LT5hdWRpb19wYXlsb2FkX3R5cGUsCisgICAgICAgICAgICB3aGlwLT5pY2VfdWZyYWdfbG9jYWws CisgICAgICAgICAgICB3aGlwLT5pY2VfcHdkX2xvY2FsLAorICAgICAgICAgICAgd2hpcC0+ZHRs c19maW5nZXJwcmludCwKKyAgICAgICAgICAgIHdoaXAtPmF1ZGlvX3BheWxvYWRfdHlwZSwKKyAg ICAgICAgICAgIGFjb2RlY19uYW1lLAorICAgICAgICAgICAgd2hpcC0+YXVkaW9fcGFyLT5zYW1w bGVfcmF0ZSwKKyAgICAgICAgICAgIHdoaXAtPmF1ZGlvX3Bhci0+Y2hfbGF5b3V0Lm5iX2NoYW5u ZWxzLAorICAgICAgICAgICAgd2hpcC0+YXVkaW9fc3NyYywKKyAgICAgICAgICAgIHdoaXAtPmF1 ZGlvX3NzcmMpOworICAgIH0KKworICAgIGlmICh3aGlwLT52aWRlb19wYXIpIHsKKyAgICAgICAg cHJvZmlsZV9pb3AgPSBwcm9maWxlID0gd2hpcC0+dmlkZW9fcGFyLT5wcm9maWxlOworICAgICAg ICBsZXZlbCA9IHdoaXAtPnZpZGVvX3Bhci0+bGV2ZWw7CisgICAgICAgIGlmICh3aGlwLT52aWRl b19wYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0gyNjQpIHsKKyAgICAgICAgICAgIHZjb2Rl Y19uYW1lID0gIkgyNjQiOworICAgICAgICAgICAgcHJvZmlsZV9pb3AgJj0gQVZfUFJPRklMRV9I MjY0X0NPTlNUUkFJTkVEOworICAgICAgICAgICAgcHJvZmlsZSAmPSAofkFWX1BST0ZJTEVfSDI2 NF9DT05TVFJBSU5FRCk7CisgICAgICAgIH0KKworICAgICAgICBhdl9icHJpbnRmKCZicCwgIiIK KyAgICAgICAgICAgICJtPXZpZGVvIDkgVURQL1RMUy9SVFAvU0FWUEYgJXVcclxuIgorICAgICAg ICAgICAgImM9SU4gSVA0IDAuMC4wLjBcclxuIgorICAgICAgICAgICAgImE9aWNlLXVmcmFnOiVz XHJcbiIKKyAgICAgICAgICAgICJhPWljZS1wd2Q6JXNcclxuIgorICAgICAgICAgICAgImE9Zmlu Z2VycHJpbnQ6c2hhLTI1NiAlc1xyXG4iCisgICAgICAgICAgICAiYT1zZXR1cDpwYXNzaXZlXHJc biIKKyAgICAgICAgICAgICJhPW1pZDoxXHJcbiIKKyAgICAgICAgICAgICJhPXNlbmRvbmx5XHJc biIKKyAgICAgICAgICAgICJhPW1zaWQ6RkZtcGVnIHZpZGVvXHJcbiIKKyAgICAgICAgICAgICJh PXJ0Y3AtbXV4XHJcbiIKKyAgICAgICAgICAgICJhPXJ0Y3AtcnNpemVcclxuIgorICAgICAgICAg ICAgImE9cnRwbWFwOiV1ICVzLzkwMDAwXHJcbiIKKyAgICAgICAgICAgICJhPWZtdHA6JXUgbGV2 ZWwtYXN5bW1ldHJ5LWFsbG93ZWQ9MTtwYWNrZXRpemF0aW9uLW1vZGU9MTtwcm9maWxlLWxldmVs LWlkPSUwMnglMDJ4JTAyeFxyXG4iCisgICAgICAgICAgICAiYT1zc3JjOiV1IGNuYW1lOkZGbXBl Z1xyXG4iCisgICAgICAgICAgICAiYT1zc3JjOiV1IG1zaWQ6RkZtcGVnIHZpZGVvXHJcbiIsCisg ICAgICAgICAgICB3aGlwLT52aWRlb19wYXlsb2FkX3R5cGUsCisgICAgICAgICAgICB3aGlwLT5p Y2VfdWZyYWdfbG9jYWwsCisgICAgICAgICAgICB3aGlwLT5pY2VfcHdkX2xvY2FsLAorICAgICAg ICAgICAgd2hpcC0+ZHRsc19maW5nZXJwcmludCwKKyAgICAgICAgICAgIHdoaXAtPnZpZGVvX3Bh eWxvYWRfdHlwZSwKKyAgICAgICAgICAgIHZjb2RlY19uYW1lLAorICAgICAgICAgICAgd2hpcC0+ dmlkZW9fcGF5bG9hZF90eXBlLAorICAgICAgICAgICAgcHJvZmlsZSwKKyAgICAgICAgICAgIHBy b2ZpbGVfaW9wLAorICAgICAgICAgICAgbGV2ZWwsCisgICAgICAgICAgICB3aGlwLT52aWRlb19z c3JjLAorICAgICAgICAgICAgd2hpcC0+dmlkZW9fc3NyYyk7CisgICAgfQorCisgICAgaWYgKCFh dl9icHJpbnRfaXNfY29tcGxldGUoJmJwKSkgeworICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9H X0VSUk9SLCAiV0hJUDogT2ZmZXIgZXhjZWVkIG1heCAlZCwgJXNcbiIsIE1BWF9TRFBfU0laRSwg YnAuc3RyKTsKKyAgICAgICAgcmV0ID0gQVZFUlJPUihFSU8pOworICAgICAgICBnb3RvIGVuZDsK KyAgICB9CisKKyAgICB3aGlwLT5zZHBfb2ZmZXIgPSBhdl9zdHJkdXAoYnAuc3RyKTsKKyAgICBp ZiAoIXdoaXAtPnNkcF9vZmZlcikgeworICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7Cisg ICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIGlmICh3aGlwLT5zdGF0ZSA8IFdISVBfU1RB VEVfT0ZGRVIpCisgICAgICAgIHdoaXAtPnN0YXRlID0gV0hJUF9TVEFURV9PRkZFUjsKKyAgICB3 aGlwLT53aGlwX29mZmVyX3RpbWUgPSBhdl9nZXR0aW1lKCk7CisgICAgYXZfbG9nKHdoaXAsIEFW X0xPR19WRVJCT1NFLCAiV0hJUDogR2VuZXJhdGVkIHN0YXRlPSVkLCBvZmZlcjogJXNcbiIsIHdo aXAtPnN0YXRlLCB3aGlwLT5zZHBfb2ZmZXIpOworCitlbmQ6CisgICAgYXZfYnByaW50X2ZpbmFs aXplKCZicCwgTlVMTCk7CisgICAgcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBFeGNoYW5nZSBT RFAgb2ZmZXIgd2l0aCBXZWJSVEMgcGVlciB0byBnZXQgdGhlIGFuc3dlci4KKyAqCisgKiBAcmV0 dXJuIDAgaWYgT0ssIEFWRVJST1JfeHh4IG9uIGVycm9yCisgKi8KK3N0YXRpYyBpbnQgZXhjaGFu Z2Vfc2RwKEFWRm9ybWF0Q29udGV4dCAqcykKK3sKKyAgICBpbnQgcmV0OworICAgIGNoYXIgYnVm W01BWF9VUkxfU0laRV07CisgICAgQVZCUHJpbnQgYnA7CisgICAgV0hJUENvbnRleHQgKndoaXAg PSBzLT5wcml2X2RhdGE7CisgICAgLyogVGhlIFVSTCBjb250ZXh0IGlzIGFuIEhUVFAgdHJhbnNw b3J0IGxheWVyIGZvciB0aGUgV0hJUCBwcm90b2NvbC4gKi8KKyAgICBVUkxDb250ZXh0ICp3aGlw X3VjID0gTlVMTDsKKyAgICBBVkRpY3Rpb25hcnkgKm9wdHMgPSBOVUxMOworICAgIGNoYXIgKmhl eF9kYXRhID0gTlVMTDsKKworICAgIC8qIFRvIHByZXZlbnQgYSBjcmFzaCBkdXJpbmcgY2xlYW51 cCwgYWx3YXlzIGluaXRpYWxpemUgaXQuICovCisgICAgYXZfYnByaW50X2luaXQoJmJwLCAxLCBN QVhfU0RQX1NJWkUpOworCisgICAgaWYgKCF3aGlwLT5zZHBfb2ZmZXIgfHwgIXN0cmxlbih3aGlw LT5zZHBfb2ZmZXIpKSB7CisgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQ OiBObyBvZmZlciB0byBleGNoYW5nZVxuIik7CisgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFM KTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgcmV0ID0gc25wcmludGYoYnVmLCBz aXplb2YoYnVmKSwgIkNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlXHJcbkNvbnRlbnQtVHlwZTogYXBw bGljYXRpb24vc2RwXHJcbiIpOworICAgIGlmICh3aGlwLT5hdXRob3JpemF0aW9uKQorICAgICAg ICByZXQgKz0gc25wcmludGYoYnVmICsgcmV0LCBzaXplb2YoYnVmKSAtIHJldCwgIkF1dGhvcml6 YXRpb246IEJlYXJlciAlc1xyXG4iLCB3aGlwLT5hdXRob3JpemF0aW9uKTsKKyAgICBpZiAocmV0 IDw9IDAgfHwgcmV0ID49IHNpemVvZihidWYpKSB7CisgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9M T0dfRVJST1IsICJXSElQOiBGYWlsZWQgdG8gZ2VuZXJhdGUgaGVhZGVycywgc2l6ZT0lZCwgJXNc biIsIHJldCwgYnVmKTsKKyAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOworICAgICAgICBn b3RvIGVuZDsKKyAgICB9CisKKyAgICBhdl9kaWN0X3NldCgmb3B0cywgImhlYWRlcnMiLCBidWYs IDApOworICAgIGF2X2RpY3Rfc2V0X2ludCgmb3B0cywgImNodW5rZWRfcG9zdCIsIDAsIDApOwor CisgICAgaGV4X2RhdGEgPSBhdl9tYWxsb2N6KDIgKiBzdHJsZW4od2hpcC0+c2RwX29mZmVyKSAr IDEpOworICAgIGlmICghaGV4X2RhdGEpIHsKKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0p OworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisgICAgZmZfZGF0YV90b19oZXgoaGV4X2RhdGEs IHdoaXAtPnNkcF9vZmZlciwgc3RybGVuKHdoaXAtPnNkcF9vZmZlciksIDApOworICAgIGF2X2Rp Y3Rfc2V0KCZvcHRzLCAicG9zdF9kYXRhIiwgaGV4X2RhdGEsIDApOworCisgICAgcmV0ID0gZmZ1 cmxfb3Blbl93aGl0ZWxpc3QoJndoaXBfdWMsIHMtPnVybCwgQVZJT19GTEFHX1JFQURfV1JJVEUs ICZzLT5pbnRlcnJ1cHRfY2FsbGJhY2ssCisgICAgICAgICZvcHRzLCBzLT5wcm90b2NvbF93aGl0 ZWxpc3QsIHMtPnByb3RvY29sX2JsYWNrbGlzdCwgTlVMTCk7CisgICAgaWYgKHJldCA8IDApIHsK KyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IEZhaWxlZCB0byByZXF1 ZXN0IHVybD0lcywgb2ZmZXI6ICVzXG4iLCBzLT51cmwsIHdoaXAtPnNkcF9vZmZlcik7CisgICAg ICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIGlmIChmZl9odHRwX2dldF9uZXdfbG9jYXRpb24o d2hpcF91YykpIHsKKyAgICAgICAgd2hpcC0+d2hpcF9yZXNvdXJjZV91cmwgPSBhdl9zdHJkdXAo ZmZfaHR0cF9nZXRfbmV3X2xvY2F0aW9uKHdoaXBfdWMpKTsKKyAgICAgICAgaWYgKCF3aGlwLT53 aGlwX3Jlc291cmNlX3VybCkgeworICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwor ICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB3aGlsZSAoMSkg eworICAgICAgICByZXQgPSBmZnVybF9yZWFkKHdoaXBfdWMsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwor ICAgICAgICBpZiAocmV0ID09IEFWRVJST1JfRU9GKSB7CisgICAgICAgICAgICAvKiBSZXNldCB0 aGUgZXJyb3IgYmVjYXVzZSB3ZSByZWFkIGFsbCByZXNwb25zZSBhcyBhbnN3ZXIgdXRpbCBFT0Yu ICovCisgICAgICAgICAgICByZXQgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K KyAgICAgICAgaWYgKHJldCA8PSAwKSB7CisgICAgICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9H X0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIHJlYWQgcmVzcG9uc2UgZnJvbSB1cmw9JXMsIG9mZmVy IGlzICVzLCBhbnN3ZXIgaXMgJXNcbiIsCisgICAgICAgICAgICAgICAgcy0+dXJsLCB3aGlwLT5z ZHBfb2ZmZXIsIHdoaXAtPnNkcF9hbnN3ZXIpOworICAgICAgICAgICAgZ290byBlbmQ7CisgICAg ICAgIH0KKworICAgICAgICBhdl9icHJpbnRmKCZicCwgIiUuKnMiLCByZXQsIGJ1Zik7CisgICAg ICAgIGlmICghYXZfYnByaW50X2lzX2NvbXBsZXRlKCZicCkpIHsKKyAgICAgICAgICAgIGF2X2xv Zyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBBbnN3ZXIgZXhjZWVkIG1heCBzaXplICVkLCAl LipzLCAlc1xuIiwgTUFYX1NEUF9TSVpFLCByZXQsIGJ1ZiwgYnAuc3RyKTsKKyAgICAgICAgICAg IHJldCA9IEFWRVJST1IoRUlPKTsKKyAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICB9Cisg ICAgfQorCisgICAgaWYgKCFhdl9zdHJzdGFydChicC5zdHIsICJ2PSIsIE5VTEwpKSB7CisgICAg ICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBJbnZhbGlkIGFuc3dlcjogJXNc biIsIGJwLnN0cik7CisgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKKyAgICAgICAgZ290 byBlbmQ7CisgICAgfQorCisgICAgd2hpcC0+c2RwX2Fuc3dlciA9IGF2X3N0cmR1cChicC5zdHIp OworICAgIGlmICghd2hpcC0+c2RwX2Fuc3dlcikgeworICAgICAgICByZXQgPSBBVkVSUk9SKEVO T01FTSk7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIGlmICh3aGlwLT5zdGF0ZSA8 IFdISVBfU1RBVEVfQU5TV0VSKQorICAgICAgICB3aGlwLT5zdGF0ZSA9IFdISVBfU1RBVEVfQU5T V0VSOworICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfVkVSQk9TRSwgIldISVA6IEdvdCBzdGF0ZT0l ZCwgYW5zd2VyOiAlc1xuIiwgd2hpcC0+c3RhdGUsIHdoaXAtPnNkcF9hbnN3ZXIpOworCitlbmQ6 CisgICAgZmZ1cmxfY2xvc2VwKCZ3aGlwX3VjKTsKKyAgICBhdl9icHJpbnRfZmluYWxpemUoJmJw LCBOVUxMKTsKKyAgICBhdl9kaWN0X2ZyZWUoJm9wdHMpOworICAgIGF2X2ZyZWVwKCZoZXhfZGF0 YSk7CisgICAgcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBQYXJzZXMgdGhlIElDRSB1ZnJhZywg cHdkLCBhbmQgY2FuZGlkYXRlcyBmcm9tIHRoZSBTRFAgYW5zd2VyLgorICoKKyAqIFRoaXMgZnVu Y3Rpb24gaXMgdXNlZCB0byBleHRyYWN0IHRoZSBJQ0UgdWZyYWcsIHB3ZCwgYW5kIGNhbmRpZGF0 ZXMgZnJvbSB0aGUgU0RQIGFuc3dlci4KKyAqIEl0IHJldHVybnMgYW4gZXJyb3IgaWYgYW55IG9m IHRoZXNlIGZpZWxkcyBpcyBOVUxMLiBUaGUgZnVuY3Rpb24gb25seSB1c2VzIHRoZSBmaXJzdAor ICogY2FuZGlkYXRlIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBjYW5kaWRhdGVzLiBIb3dldmVyLCBz dXBwb3J0IGZvciBtdWx0aXBsZSBjYW5kaWRhdGVzCisgKiB3aWxsIGJlIGFkZGVkIGluIHRoZSBm dXR1cmUuCisgKgorICogQHBhcmFtIHMgUG9pbnRlciB0byB0aGUgQVZGb3JtYXRDb250ZXh0Cisg KiBAcmV0dXJucyBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCBvciBBVkVSUk9SX3h4eCBpZiBhbiBl cnJvciBvY2N1cnMuCisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfYW5zd2VyKEFWRm9ybWF0Q29udGV4 dCAqcykKK3sKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBBVklPQ29udGV4dCAqcGI7CisgICAgY2hh ciBsaW5lW01BWF9VUkxfU0laRV07CisgICAgY29uc3QgY2hhciAqcHRyOworICAgIGludCBpOwor ICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRhOworCisgICAgaWYgKCF3aGlwLT5z ZHBfYW5zd2VyIHx8ICFzdHJsZW4od2hpcC0+c2RwX2Fuc3dlcikpIHsKKyAgICAgICAgYXZfbG9n KHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IE5vIGFuc3dlciB0byBwYXJzZVxuIik7CisgICAg ICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisg ICAgcGIgPSBhdmlvX2FsbG9jX2NvbnRleHQod2hpcC0+c2RwX2Fuc3dlciwgc3RybGVuKHdoaXAt PnNkcF9hbnN3ZXIpLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICBpZiAoIXBiKQor ICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAgZm9yIChpID0gMDsgIWF2aW9f ZmVvZihwYik7IGkrKykgeworICAgICAgICBmZl9nZXRfY2hvbXBfbGluZShwYiwgbGluZSwgc2l6 ZW9mKGxpbmUpKTsKKyAgICAgICAgaWYgKGF2X3N0cnN0YXJ0KGxpbmUsICJhPWljZS11ZnJhZzoi LCAmcHRyKSAmJiAhd2hpcC0+aWNlX3VmcmFnX3JlbW90ZSkgeworICAgICAgICAgICAgd2hpcC0+ aWNlX3VmcmFnX3JlbW90ZSA9IGF2X3N0cmR1cChwdHIpOworICAgICAgICAgICAgaWYgKCF3aGlw LT5pY2VfdWZyYWdfcmVtb3RlKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9N RU0pOworICAgICAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICAgICAgfQorICAgICAgICB9 IGVsc2UgaWYgKGF2X3N0cnN0YXJ0KGxpbmUsICJhPWljZS1wd2Q6IiwgJnB0cikgJiYgIXdoaXAt PmljZV9wd2RfcmVtb3RlKSB7CisgICAgICAgICAgICB3aGlwLT5pY2VfcHdkX3JlbW90ZSA9IGF2 X3N0cmR1cChwdHIpOworICAgICAgICAgICAgaWYgKCF3aGlwLT5pY2VfcHdkX3JlbW90ZSkgewor ICAgICAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgICAgICAgICBn b3RvIGVuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChhdl9zdHJzdGFydChs aW5lLCAiYT1jYW5kaWRhdGU6IiwgJnB0cikgJiYgIXdoaXAtPmljZV9wcm90b2NvbCkgeworICAg ICAgICAgICAgcHRyID0gYXZfc3RyaXN0cihwdHIsICJ1ZHAiKTsKKyAgICAgICAgICAgIGlmIChw dHIgJiYgYXZfc3RyaXN0cihwdHIsICJob3N0IikpIHsKKyAgICAgICAgICAgICAgICBjaGFyIHBy b3RvY29sWzE3XSwgaG9zdFsxMjldOworICAgICAgICAgICAgICAgIGludCBwcmlvcml0eSwgcG9y dDsKKyAgICAgICAgICAgICAgICByZXQgPSBzc2NhbmYocHRyLCAiJTE2cyAlZCAlMTI4cyAlZCB0 eXAgaG9zdCIsIHByb3RvY29sLCAmcHJpb3JpdHksIGhvc3QsICZwb3J0KTsKKyAgICAgICAgICAg ICAgICBpZiAocmV0ICE9IDQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXZfbG9nKHdoaXAsIEFW X0xPR19FUlJPUiwgIldISVA6IEZhaWxlZCAlZCB0byBwYXJzZSBsaW5lICVkICVzIGZyb20gJXNc biIsCisgICAgICAgICAgICAgICAgICAgICAgICByZXQsIGksIGxpbmUsIHdoaXAtPnNkcF9hbnN3 ZXIpOworICAgICAgICAgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVJTyk7CisgICAgICAgICAg ICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg IGlmIChhdl9zdHJjYXNlY21wKHByb3RvY29sLCAidWRwIikpIHsKKyAgICAgICAgICAgICAgICAg ICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IFByb3RvY29sICVzIGlzIG5vdCBz dXBwb3J0ZWQgYnkgUlRDLCBjaG9vc2UgdWRwLCBsaW5lICVkICVzIG9mICVzXG4iLAorICAgICAg ICAgICAgICAgICAgICAgICAgcHJvdG9jb2wsIGksIGxpbmUsIHdoaXAtPnNkcF9hbnN3ZXIpOwor ICAgICAgICAgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVJTyk7CisgICAgICAgICAgICAgICAg ICAgIGdvdG8gZW5kOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHdoaXAt PmljZV9wcm90b2NvbCA9IGF2X3N0cmR1cChwcm90b2NvbCk7CisgICAgICAgICAgICAgICAgd2hp cC0+aWNlX2hvc3QgPSBhdl9zdHJkdXAoaG9zdCk7CisgICAgICAgICAgICAgICAgd2hpcC0+aWNl X3BvcnQgPSBwb3J0OworICAgICAgICAgICAgICAgIGlmICghd2hpcC0+aWNlX3Byb3RvY29sIHx8 ICF3aGlwLT5pY2VfaG9zdCkgeworICAgICAgICAgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVO T01FTSk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghd2hpcC0+aWNlX3B3 ZF9yZW1vdGUgfHwgIXN0cmxlbih3aGlwLT5pY2VfcHdkX3JlbW90ZSkpIHsKKyAgICAgICAgYXZf bG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IE5vIHJlbW90ZSBpY2UgcHdkIHBhcnNlZCBm cm9tICVzXG4iLCB3aGlwLT5zZHBfYW5zd2VyKTsKKyAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5W QUwpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICBpZiAoIXdoaXAtPmljZV91ZnJh Z19yZW1vdGUgfHwgIXN0cmxlbih3aGlwLT5pY2VfdWZyYWdfcmVtb3RlKSkgeworICAgICAgICBh dl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogTm8gcmVtb3RlIGljZSB1ZnJhZyBwYXJz ZWQgZnJvbSAlc1xuIiwgd2hpcC0+c2RwX2Fuc3dlcik7CisgICAgICAgIHJldCA9IEFWRVJST1Io RUlOVkFMKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgaWYgKCF3aGlwLT5pY2Vf cHJvdG9jb2wgfHwgIXdoaXAtPmljZV9ob3N0IHx8ICF3aGlwLT5pY2VfcG9ydCkgeworICAgICAg ICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogTm8gaWNlIGNhbmRpZGF0ZSBwYXJz ZWQgZnJvbSAlc1xuIiwgd2hpcC0+c2RwX2Fuc3dlcik7CisgICAgICAgIHJldCA9IEFWRVJST1Io RUlOVkFMKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgaWYgKHdoaXAtPnN0YXRl IDwgV0hJUF9TVEFURV9ORUdPVElBVEVEKQorICAgICAgICB3aGlwLT5zdGF0ZSA9IFdISVBfU1RB VEVfTkVHT1RJQVRFRDsKKyAgICB3aGlwLT53aGlwX2Fuc3dlcl90aW1lID0gYXZfZ2V0dGltZSgp OworICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfVkVSQk9TRSwgIldISVA6IFNEUCBzdGF0ZT0lZCwg b2ZmZXI9JWx1QiwgYW5zd2VyPSVsdUIsIHVmcmFnPSVzLCBwd2Q9JWx1QiwgdHJhbnNwb3J0PSVz Oi8vJXM6JWQsIGVsYXBzZWQ9JWRtc1xuIiwKKyAgICAgICAgd2hpcC0+c3RhdGUsIHN0cmxlbih3 aGlwLT5zZHBfb2ZmZXIpLCBzdHJsZW4od2hpcC0+c2RwX2Fuc3dlciksIHdoaXAtPmljZV91ZnJh Z19yZW1vdGUsIHN0cmxlbih3aGlwLT5pY2VfcHdkX3JlbW90ZSksCisgICAgICAgIHdoaXAtPmlj ZV9wcm90b2NvbCwgd2hpcC0+aWNlX2hvc3QsIHdoaXAtPmljZV9wb3J0LCBFTEFQU0VEKHdoaXAt PndoaXBfc3RhcnR0aW1lLCBhdl9nZXR0aW1lKCkpKTsKKworZW5kOgorICAgIGF2aW9fY29udGV4 dF9mcmVlKCZwYik7CisgICAgcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBDcmVhdGVzIGFuZCBt YXJzaGFscyBhbiBJQ0UgYmluZGluZyByZXF1ZXN0IHBhY2tldC4KKyAqCisgKiBUaGlzIGZ1bmN0 aW9uIGNyZWF0ZXMgYW5kIG1hcnNoYWxzIGFuIElDRSBiaW5kaW5nIHJlcXVlc3QgcGFja2V0LiBU aGUgZnVuY3Rpb24gb25seQorICogZ2VuZXJhdGVzIHRoZSB1c2VybmFtZSBhdHRyaWJ1dGUgYW5k IGRvZXMgbm90IGluY2x1ZGUgZ29vZy1uZXR3b3JrLWluZm8sIGljZS1jb250cm9sbGluZywKKyAq IHVzZS1jYW5kaWRhdGUsIGFuZCBwcmlvcml0eS4gSG93ZXZlciwgc29tZSBvZiB0aGVzZSBhdHRy aWJ1dGVzIG1heSBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLgorICoKKyAqIEBwYXJhbSBzIFBvaW50 ZXIgdG8gdGhlIEFWRm9ybWF0Q29udGV4dAorICogQHBhcmFtIGJ1ZiBQb2ludGVyIHRvIG1lbW9y eSBidWZmZXIgdG8gc3RvcmUgdGhlIHJlcXVlc3QgcGFja2V0CisgKiBAcGFyYW0gYnVmX3NpemUg U2l6ZSBvZiB0aGUgbWVtb3J5IGJ1ZmZlcgorICogQHBhcmFtIHJlcXVlc3Rfc2l6ZSBQb2ludGVy IHRvIGFuIGludGVnZXIgdGhhdCByZWNlaXZlcyB0aGUgc2l6ZSBvZiB0aGUgcmVxdWVzdCBwYWNr ZXQKKyAqIEByZXR1cm4gUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwgb3IgQVZFUlJPUl94eHggaWYg YW4gZXJyb3Igb2NjdXJzLgorICovCitzdGF0aWMgaW50IGljZV9jcmVhdGVfcmVxdWVzdChBVkZv cm1hdENvbnRleHQgKnMsIHVpbnQ4X3QgKmJ1ZiwgaW50IGJ1Zl9zaXplLCBpbnQgKnJlcXVlc3Rf c2l6ZSkKK3sKKyAgICBpbnQgcmV0LCBzaXplLCBjcmMzMjsKKyAgICBjaGFyIHVzZXJuYW1lWzEy OF07CisgICAgQVZJT0NvbnRleHQgKnBiID0gTlVMTDsKKyAgICBBVkhNQUMgKmhtYWMgPSBOVUxM OworICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRhOworCisgICAgcGIgPSBhdmlv X2FsbG9jX2NvbnRleHQoYnVmLCBidWZfc2l6ZSwgMSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7 CisgICAgaWYgKCFwYikKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIGht YWMgPSBhdl9obWFjX2FsbG9jKEFWX0hNQUNfU0hBMSk7CisgICAgaWYgKCFobWFjKSB7CisgICAg ICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisg ICAgLyogV3JpdGUgMjAgYnl0ZXMgaGVhZGVyICovCisgICAgYXZpb193YjE2KHBiLCAweDAwMDEp OyAvKiBTVFVOIGJpbmRpbmcgcmVxdWVzdCAqLworICAgIGF2aW9fd2IxNihwYiwgMCk7ICAgICAg LyogbGVuZ3RoICovCisgICAgYXZpb193YjMyKHBiLCBTVFVOX01BR0lDX0NPT0tJRSk7IC8qIG1h Z2ljIGNvb2tpZSAqLworICAgIGF2aW9fd2IzMihwYiwgYXZfbGZnX2dldCgmd2hpcC0+cm5kKSk7 IC8qIHRyYW5zYWN0aW9uIElEICovCisgICAgYXZpb193YjMyKHBiLCBhdl9sZmdfZ2V0KCZ3aGlw LT5ybmQpKTsgLyogdHJhbnNhY3Rpb24gSUQgKi8KKyAgICBhdmlvX3diMzIocGIsIGF2X2xmZ19n ZXQoJndoaXAtPnJuZCkpOyAvKiB0cmFuc2FjdGlvbiBJRCAqLworCisgICAgLyogVGhlIHVzZXJu YW1lIGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSB0d28gSUNFIHVmcmFnICovCisgICAgcmV0 ID0gc25wcmludGYodXNlcm5hbWUsIHNpemVvZih1c2VybmFtZSksICIlczolcyIsIHdoaXAtPmlj ZV91ZnJhZ19yZW1vdGUsIHdoaXAtPmljZV91ZnJhZ19sb2NhbCk7CisgICAgaWYgKHJldCA8PSAw IHx8IHJldCA+PSBzaXplb2YodXNlcm5hbWUpKSB7CisgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9M T0dfRVJST1IsICJXSElQOiBGYWlsZWQgdG8gYnVpbGQgdXNlcm5hbWUgJXM6JXMsIG1heD0lbHUs IHJldD0lZFxuIiwKKyAgICAgICAgICAgIHdoaXAtPmljZV91ZnJhZ19yZW1vdGUsIHdoaXAtPmlj ZV91ZnJhZ19sb2NhbCwgc2l6ZW9mKHVzZXJuYW1lKSwgcmV0KTsKKyAgICAgICAgcmV0ID0gQVZF UlJPUihFSU8pOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICAvKiBXcml0ZSB0aGUg dXNlcm5hbWUgYXR0cmlidXRlICovCisgICAgYXZpb193YjE2KHBiLCBTVFVOX0FUVFJfVVNFUk5B TUUpOyAvKiBhdHRyaWJ1dGUgdHlwZSB1c2VybmFtZSAqLworICAgIGF2aW9fd2IxNihwYiwgcmV0 KTsgLyogc2l6ZSBvZiB1c2VybmFtZSAqLworICAgIGF2aW9fd3JpdGUocGIsIHVzZXJuYW1lLCBy ZXQpOyAvKiBieXRlcyBvZiB1c2VybmFtZSAqLworICAgIGZmaW9fZmlsbChwYiwgMCwgKDQgLSAo cmV0ICUgNCkpICUgNCk7IC8qIHBhZGRpbmcgKi8KKworICAgIC8qIFdyaXRlIHRoZSB1c2UtY2Fu ZGlkYXRlIGF0dHJpYnV0ZSAqLworICAgIGF2aW9fd2IxNihwYiwgU1RVTl9BVFRSX1VTRV9DQU5E SURBVEUpOyAvKiBhdHRyaWJ1dGUgdHlwZSB1c2UtY2FuZGlkYXRlICovCisgICAgYXZpb193YjE2 KHBiLCAwKTsgLyogc2l6ZSBvZiB1c2UtY2FuZGlkYXRlICovCisKKyAgICAvKiBCdWlsZCBhbmQg dXBkYXRlIG1lc3NhZ2UgaW50ZWdyaXR5ICovCisgICAgYXZpb193YjE2KHBiLCBTVFVOX0FUVFJf TUVTU0FHRV9JTlRFR1JJVFkpOyAvKiBhdHRyaWJ1dGUgdHlwZSBtZXNzYWdlIGludGVncml0eSAq LworICAgIGF2aW9fd2IxNihwYiwgMjApOyAvKiBzaXplIG9mIG1lc3NhZ2UgaW50ZWdyaXR5ICov CisgICAgZmZpb19maWxsKHBiLCAwLCAyMCk7IC8qIGZpbGwgd2l0aCB6ZXJvIHRvIGRpcmVjdGx5 IHdyaXRlIGFuZCBza2lwIGl0ICovCisgICAgc2l6ZSA9IGF2aW9fdGVsbChwYik7CisgICAgYnVm WzJdID0gKHNpemUgLSAyMCkgPj4gODsKKyAgICBidWZbM10gPSAoc2l6ZSAtIDIwKSAmIDB4RkY7 CisgICAgYXZfaG1hY19pbml0KGhtYWMsIHdoaXAtPmljZV9wd2RfcmVtb3RlLCBzdHJsZW4od2hp cC0+aWNlX3B3ZF9yZW1vdGUpKTsKKyAgICBhdl9obWFjX3VwZGF0ZShobWFjLCBidWYsIHNpemUg LSAyNCk7CisgICAgYXZfaG1hY19maW5hbChobWFjLCBidWYgKyBzaXplIC0gMjAsIDIwKTsKKwor ICAgIC8qIFdyaXRlIHRoZSBmaW5nZXJwcmludCBhdHRyaWJ1dGUgKi8KKyAgICBhdmlvX3diMTYo cGIsIFNUVU5fQVRUUl9GSU5HRVJQUklOVCk7IC8qIGF0dHJpYnV0ZSB0eXBlIGZpbmdlcnByaW50 ICovCisgICAgYXZpb193YjE2KHBiLCA0KTsgLyogc2l6ZSBvZiBmaW5nZXJwcmludCAqLworICAg IGZmaW9fZmlsbChwYiwgMCwgNCk7IC8qIGZpbGwgd2l0aCB6ZXJvIHRvIGRpcmVjdGx5IHdyaXRl IGFuZCBza2lwIGl0ICovCisgICAgc2l6ZSA9IGF2aW9fdGVsbChwYik7CisgICAgYnVmWzJdID0g KHNpemUgLSAyMCkgPj4gODsKKyAgICBidWZbM10gPSAoc2l6ZSAtIDIwKSAmIDB4RkY7CisgICAg LyogUmVmZXIgdG8gdGhlIGF2X2hhc2hfYWxsb2MoIkNSQzMyIiksIGF2X2hhc2hfaW5pdCBhbmQg YXZfaGFzaF9maW5hbCAqLworICAgIGNyYzMyID0gYXZfY3JjKGF2X2NyY19nZXRfdGFibGUoQVZf Q1JDXzMyX0lFRUVfTEUpLCAweEZGRkZGRkZGLCBidWYsIHNpemUgLSA4KSBeIDB4RkZGRkZGRkY7 CisgICAgYXZpb19za2lwKHBiLCAtNCk7CisgICAgYXZpb193YjMyKHBiLCBjcmMzMiBeIDB4NTM1 NDU1NEUpOyAvKiB4b3Igd2l0aCAiU1RVTiIgKi8KKworICAgICpyZXF1ZXN0X3NpemUgPSBzaXpl OworCitlbmQ6CisgICAgYXZpb19jb250ZXh0X2ZyZWUoJnBiKTsKKyAgICBhdl9obWFjX2ZyZWUo aG1hYyk7CisgICAgcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBDcmVhdGUgYW4gSUNFIGJpbmRp bmcgcmVzcG9uc2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgYW4gSUNFIGJpbmRp bmcgcmVzcG9uc2UgYW5kIHdyaXRlcyBpdCB0byB0aGUgcHJvdmlkZWQKKyAqIGJ1ZmZlci4gVGhl IHJlc3BvbnNlIGlzIHNpZ25lZCB1c2luZyB0aGUgbG9jYWwgcGFzc3dvcmQgZm9yIG1lc3NhZ2Ug aW50ZWdyaXR5LgorICoKKyAqIEBwYXJhbSBzIFBvaW50ZXIgdG8gdGhlIEFWRm9ybWF0Q29udGV4 dCBzdHJ1Y3R1cmUuCisgKiBAcGFyYW0gdGlkIFBvaW50ZXIgdG8gdGhlIHRyYW5zYWN0aW9uIElE IG9mIHRoZSBiaW5kaW5nIHJlcXVlc3QuIFRoZSB0aWRfc2l6ZSBzaG91bGQgYmUgMTIuCisgKiBA cGFyYW0gdGlkX3NpemUgVGhlIHNpemUgb2YgdGhlIHRyYW5zYWN0aW9uIElELCBzaG91bGQgYmUg MTIuCisgKiBAcGFyYW0gYnVmIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB3aGVyZSB0aGUgcmVzcG9u c2Ugd2lsbCBiZSB3cml0dGVuLgorICogQHBhcmFtIGJ1Zl9zaXplIFRoZSBzaXplIG9mIHRoZSBi dWZmZXIgcHJvdmlkZWQgZm9yIHRoZSByZXNwb25zZS4KKyAqIEBwYXJhbSByZXNwb25zZV9zaXpl IFBvaW50ZXIgdG8gYW4gaW50ZWdlciB0aGF0IHdpbGwgc3RvcmUgdGhlIHNpemUgb2YgdGhlIGdl bmVyYXRlZCByZXNwb25zZS4KKyAqIEByZXR1cm4gUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwgb3Ig QVZFUlJPUl94eHggaWYgYW4gZXJyb3Igb2NjdXJzLgorICovCitzdGF0aWMgaW50IGljZV9jcmVh dGVfcmVzcG9uc2UoQVZGb3JtYXRDb250ZXh0ICpzLCBjaGFyICp0aWQsIGludCB0aWRfc2l6ZSwg dWludDhfdCAqYnVmLCBpbnQgYnVmX3NpemUsIGludCAqcmVzcG9uc2Vfc2l6ZSkKK3sKKyAgICBp bnQgcmV0ID0gMCwgc2l6ZSwgY3JjMzI7CisgICAgQVZJT0NvbnRleHQgKnBiID0gTlVMTDsKKyAg ICBBVkhNQUMgKmhtYWMgPSBOVUxMOworICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9k YXRhOworCisgICAgaWYgKHRpZF9zaXplICE9IDEyKSB7CisgICAgICAgIGF2X2xvZyh3aGlwLCBB Vl9MT0dfRVJST1IsICJXSElQOiBJbnZhbGlkIHRyYW5zYWN0aW9uIElEIHNpemUuIEV4cGVjdGVk IDEyLCBnb3QgJWRcbiIsIHRpZF9zaXplKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFM KTsKKyAgICB9CisKKyAgICBwYiA9IGF2aW9fYWxsb2NfY29udGV4dChidWYsIGJ1Zl9zaXplLCAx LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICBpZiAoIXBiKQorICAgICAgICByZXR1cm4g QVZFUlJPUihFTk9NRU0pOworCisgICAgaG1hYyA9IGF2X2htYWNfYWxsb2MoQVZfSE1BQ19TSEEx KTsKKyAgICBpZiAoIWhtYWMpIHsKKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAg ICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICAvKiBXcml0ZSAyMCBieXRlcyBoZWFkZXIgKi8K KyAgICBhdmlvX3diMTYocGIsIDB4MDEwMSk7IC8qIFNUVU4gYmluZGluZyByZXNwb25zZSAqLwor ICAgIGF2aW9fd2IxNihwYiwgMCk7ICAgICAgLyogbGVuZ3RoICovCisgICAgYXZpb193YjMyKHBi LCBTVFVOX01BR0lDX0NPT0tJRSk7IC8qIG1hZ2ljIGNvb2tpZSAqLworICAgIGF2aW9fd3JpdGUo cGIsIHRpZCwgdGlkX3NpemUpOyAvKiB0cmFuc2FjdGlvbiBJRCAqLworCisgICAgLyogQnVpbGQg YW5kIHVwZGF0ZSBtZXNzYWdlIGludGVncml0eSAqLworICAgIGF2aW9fd2IxNihwYiwgU1RVTl9B VFRSX01FU1NBR0VfSU5URUdSSVRZKTsgLyogYXR0cmlidXRlIHR5cGUgbWVzc2FnZSBpbnRlZ3Jp dHkgKi8KKyAgICBhdmlvX3diMTYocGIsIDIwKTsgLyogc2l6ZSBvZiBtZXNzYWdlIGludGVncml0 eSAqLworICAgIGZmaW9fZmlsbChwYiwgMCwgMjApOyAvKiBmaWxsIHdpdGggemVybyB0byBkaXJl Y3RseSB3cml0ZSBhbmQgc2tpcCBpdCAqLworICAgIHNpemUgPSBhdmlvX3RlbGwocGIpOworICAg IGJ1ZlsyXSA9IChzaXplIC0gMjApID4+IDg7CisgICAgYnVmWzNdID0gKHNpemUgLSAyMCkgJiAw eEZGOworICAgIGF2X2htYWNfaW5pdChobWFjLCB3aGlwLT5pY2VfcHdkX2xvY2FsLCBzdHJsZW4o d2hpcC0+aWNlX3B3ZF9sb2NhbCkpOworICAgIGF2X2htYWNfdXBkYXRlKGhtYWMsIGJ1Ziwgc2l6 ZSAtIDI0KTsKKyAgICBhdl9obWFjX2ZpbmFsKGhtYWMsIGJ1ZiArIHNpemUgLSAyMCwgMjApOwor CisgICAgLyogV3JpdGUgdGhlIGZpbmdlcnByaW50IGF0dHJpYnV0ZSAqLworICAgIGF2aW9fd2Ix NihwYiwgU1RVTl9BVFRSX0ZJTkdFUlBSSU5UKTsgLyogYXR0cmlidXRlIHR5cGUgZmluZ2VycHJp bnQgKi8KKyAgICBhdmlvX3diMTYocGIsIDQpOyAvKiBzaXplIG9mIGZpbmdlcnByaW50ICovCisg ICAgZmZpb19maWxsKHBiLCAwLCA0KTsgLyogZmlsbCB3aXRoIHplcm8gdG8gZGlyZWN0bHkgd3Jp dGUgYW5kIHNraXAgaXQgKi8KKyAgICBzaXplID0gYXZpb190ZWxsKHBiKTsKKyAgICBidWZbMl0g PSAoc2l6ZSAtIDIwKSA+PiA4OworICAgIGJ1ZlszXSA9IChzaXplIC0gMjApICYgMHhGRjsKKyAg ICAvKiBSZWZlciB0byB0aGUgYXZfaGFzaF9hbGxvYygiQ1JDMzIiKSwgYXZfaGFzaF9pbml0IGFu ZCBhdl9oYXNoX2ZpbmFsICovCisgICAgY3JjMzIgPSBhdl9jcmMoYXZfY3JjX2dldF90YWJsZShB Vl9DUkNfMzJfSUVFRV9MRSksIDB4RkZGRkZGRkYsIGJ1Ziwgc2l6ZSAtIDgpIF4gMHhGRkZGRkZG RjsKKyAgICBhdmlvX3NraXAocGIsIC00KTsKKyAgICBhdmlvX3diMzIocGIsIGNyYzMyIF4gMHg1 MzU0NTU0RSk7IC8qIHhvciB3aXRoICJTVFVOIiAqLworCisgICAgKnJlc3BvbnNlX3NpemUgPSBz aXplOworCitlbmQ6CisgICAgYXZpb19jb250ZXh0X2ZyZWUoJnBiKTsKKyAgICBhdl9obWFjX2Zy ZWUoaG1hYyk7CisgICAgcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBBIEJpbmRpbmcgcmVxdWVz dCBoYXMgY2xhc3M9MGIwMCAocmVxdWVzdCkgYW5kIG1ldGhvZD0wYjAwMDAwMDAwMDAwMSAoQmlu ZGluZykKKyAqIGFuZCBpcyBlbmNvZGVkIGludG8gdGhlIGZpcnN0IDE2IGJpdHMgYXMgMHgwMDAx LgorICogU2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNTM4OSNz ZWN0aW9uLTYKKyAqLworc3RhdGljIGludCBpY2VfaXNfYmluZGluZ19yZXF1ZXN0KHVpbnQ4X3Qg KmIsIGludCBzaXplKQoreworICAgIHJldHVybiBzaXplID49IElDRV9TVFVOX0hFQURFUl9TSVpF ICYmIEFWX1JCMTYoJmJbMF0pID09IDB4MDAwMTsKK30KKworLyoqCisgKiBBIEJpbmRpbmcgcmVz cG9uc2UgaGFzIGNsYXNzPTBiMTAgKHN1Y2Nlc3MgcmVzcG9uc2UpIGFuZCBtZXRob2Q9MGIwMDAw MDAwMDAwMDEsCisgKiBhbmQgaXMgZW5jb2RlZCBpbnRvIHRoZSBmaXJzdCAxNiBiaXRzIGFzIDB4 MDEwMS4KKyAqLworc3RhdGljIGludCBpY2VfaXNfYmluZGluZ19yZXNwb25zZSh1aW50OF90ICpi LCBpbnQgc2l6ZSkKK3sKKyAgICByZXR1cm4gc2l6ZSA+PSBJQ0VfU1RVTl9IRUFERVJfU0laRSAm JiBBVl9SQjE2KCZiWzBdKSA9PSAweDAxMDE7Cit9CisKKy8qKgorICogSW4gUlRQIHBhY2tldHMs IHRoZSBmaXJzdCBieXRlIGlzIHJlcHJlc2VudGVkIGFzIDBiMTB4eHh4eHgsIHdoZXJlIHRoZSBp bml0aWFsCisgKiB0d28gYml0cyAoMGIxMCkgaW5kaWNhdGUgdGhlIFJUUCB2ZXJzaW9uLAorICog c2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmMzNTUwI3NlY3Rpb24tNS4xCisg KiBUaGUgUlRDUCBwYWNrZXQgaGVhZGVyIGlzIHNpbWlsYXIgdG8gUlRQLAorICogc2VlIGh0dHBz Oi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmMzNTUwI3NlY3Rpb24tNi40LjEKKyAqLworc3Rh dGljIGludCBtZWRpYV9pc19ydHBfcnRjcCh1aW50OF90ICpiLCBpbnQgc2l6ZSkKK3sKKyAgICBy ZXR1cm4gc2l6ZSA+PSBXSElQX1JUUF9IRUFERVJfU0laRSAmJiAoYlswXSAmIDB4QzApID09IDB4 ODA7Cit9CisKKy8qIFdoZXRoZXIgdGhlIHBhY2tldCBpcyBSVENQLiAqLworc3RhdGljIGludCBt ZWRpYV9pc19ydGNwKHVpbnQ4X3QgKmIsIGludCBzaXplKQoreworICAgIHJldHVybiBzaXplID49 IFdISVBfUlRQX0hFQURFUl9TSVpFICYmIGJbMV0gPj0gV0hJUF9SVENQX1BUX1NUQVJUICYmIGJb MV0gPD0gV0hJUF9SVENQX1BUX0VORDsKK30KKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRs ZXMgaW5jb21pbmcgYmluZGluZyByZXF1ZXN0IG1lc3NhZ2VzIGJ5IHJlc3BvbmRpbmcgdG8gdGhl bS4KKyAqIElmIHRoZSBtZXNzYWdlIGlzIG5vdCBhIGJpbmRpbmcgcmVxdWVzdCwgaXQgd2lsbCBi ZSBpZ25vcmVkLgorICovCitzdGF0aWMgaW50IGljZV9oYW5kbGVfYmluZGluZ19yZXF1ZXN0KEFW Rm9ybWF0Q29udGV4dCAqcywgY2hhciAqYnVmLCBpbnQgYnVmX3NpemUpCit7CisgICAgaW50IHJl dCA9IDAsIHNpemU7CisgICAgY2hhciB0aWRbMTJdOworICAgIFdISVBDb250ZXh0ICp3aGlwID0g cy0+cHJpdl9kYXRhOworCisgICAgLyogSWdub3JlIGlmIG5vdCBhIGJpbmRpbmcgcmVxdWVzdC4g Ki8KKyAgICBpZiAoIWljZV9pc19iaW5kaW5nX3JlcXVlc3QoYnVmLCBidWZfc2l6ZSkpCisgICAg ICAgIHJldHVybiByZXQ7CisKKyAgICBpZiAoYnVmX3NpemUgPCBJQ0VfU1RVTl9IRUFERVJfU0la RSkgeworICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogSW52YWxpZCBT VFVOIG1lc3NhZ2UsIGV4cGVjdGVkIGF0IGxlYXN0ICVkLCBnb3QgJWRcbiIsCisgICAgICAgICAg ICBJQ0VfU1RVTl9IRUFERVJfU0laRSwgYnVmX3NpemUpOworICAgICAgICByZXR1cm4gQVZFUlJP UihFSU5WQUwpOworICAgIH0KKworICAgIC8qIFBhcnNlIHRyYW5zYWN0aW9uIGlkIGZyb20gYmlu ZGluZyByZXF1ZXN0IGluIGJ1Zi4gKi8KKyAgICBtZW1jcHkodGlkLCBidWYgKyA4LCAxMik7CisK KyAgICAvKiBCdWlsZCB0aGUgU1RVTiBiaW5kaW5nIHJlc3BvbnNlLiAqLworICAgIHJldCA9IGlj ZV9jcmVhdGVfcmVzcG9uc2UocywgdGlkLCBzaXplb2YodGlkKSwgd2hpcC0+YnVmLCBzaXplb2Yo d2hpcC0+YnVmKSwgJnNpemUpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGF2X2xvZyh3 aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBGYWlsZWQgdG8gY3JlYXRlIFNUVU4gYmluZGluZyBy ZXNwb25zZSwgc2l6ZT0lZFxuIiwgc2l6ZSk7CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQor CisgICAgcmV0ID0gZmZ1cmxfd3JpdGUod2hpcC0+dWRwLCB3aGlwLT5idWYsIHNpemUpOworICAg IGlmIChyZXQgPCAwKSB7CisgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQ OiBGYWlsZWQgdG8gc2VuZCBTVFVOIGJpbmRpbmcgcmVzcG9uc2UsIHNpemU9JWRcbiIsIHNpemUp OworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisvKioK KyAqIFRvIGVzdGFibGlzaCBhIGNvbm5lY3Rpb24gd2l0aCB0aGUgVURQIHNlcnZlciwgd2UgdXRp bGl6ZSBJQ0UtTElURSBpbiBhIENsaWVudC1TZXJ2ZXIKKyAqIG1vZGUuIEluIHRoaXMgc2V0dXAs IEZGbXBlZyBhY3RzIGFzIHRoZSBVRFAgY2xpZW50LCB3aGlsZSB0aGUgcGVlciBmdW5jdGlvbnMg YXMgdGhlCisgKiBVRFAgc2VydmVyLgorICovCitzdGF0aWMgaW50IHVkcF9jb25uZWN0KEFWRm9y bWF0Q29udGV4dCAqcykKK3sKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBjaGFyIHVybFsyNTZdOwor ICAgIEFWRGljdGlvbmFyeSAqb3B0cyA9IE5VTEw7CisgICAgV0hJUENvbnRleHQgKndoaXAgPSBz LT5wcml2X2RhdGE7CisKKyAgICAvKiBCdWlsZCBVRFAgVVJMIGFuZCBjcmVhdGUgdGhlIFVEUCBj b250ZXh0IGFzIHRyYW5zcG9ydC4gKi8KKyAgICBmZl91cmxfam9pbih1cmwsIHNpemVvZih1cmwp LCAidWRwIiwgTlVMTCwgd2hpcC0+aWNlX2hvc3QsIHdoaXAtPmljZV9wb3J0LCBOVUxMKTsKKwor ICAgIGF2X2RpY3Rfc2V0X2ludCgmb3B0cywgImNvbm5lY3QiLCAxLCAwKTsKKyAgICBhdl9kaWN0 X3NldF9pbnQoJm9wdHMsICJmaWZvX3NpemUiLCAwLCAwKTsKKyAgICAvKiBTZXQgdGhlIG1heCBw YWNrZXQgc2l6ZSB0byB0aGUgYnVmZmVyIHNpemUuICovCisgICAgYXZfZGljdF9zZXRfaW50KCZv cHRzLCAicGt0X3NpemUiLCB3aGlwLT5wa3Rfc2l6ZSwgMCk7CisKKyAgICByZXQgPSBmZnVybF9v cGVuX3doaXRlbGlzdCgmd2hpcC0+dWRwLCB1cmwsIEFWSU9fRkxBR19XUklURSwgJnMtPmludGVy cnVwdF9jYWxsYmFjaywKKyAgICAgICAgJm9wdHMsIHMtPnByb3RvY29sX3doaXRlbGlzdCwgcy0+ cHJvdG9jb2xfYmxhY2tsaXN0LCBOVUxMKTsKKyAgICBpZiAocmV0IDwgMCkgeworICAgICAgICBh dl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIGNvbm5lY3QgdWRwOi8v JXM6JWRcbiIsIHdoaXAtPmljZV9ob3N0LCB3aGlwLT5pY2VfcG9ydCk7CisgICAgICAgIGdvdG8g ZW5kOworICAgIH0KKworICAgIC8qIE1ha2UgdGhlIHNvY2tldCBub24tYmxvY2tpbmcsIHNldCB0 byBSRUFEIGFuZCBXUklURSBtb2RlIGFmdGVyIGNvbm5lY3RlZCAqLworICAgIGZmX3NvY2tldF9u b25ibG9jayhmZnVybF9nZXRfZmlsZV9oYW5kbGUod2hpcC0+dWRwKSwgMSk7CisgICAgd2hpcC0+ dWRwLT5mbGFncyB8PSBBVklPX0ZMQUdfUkVBRCB8IEFWSU9fRkxBR19OT05CTE9DSzsKKworICAg IGlmICh3aGlwLT5zdGF0ZSA8IFdISVBfU1RBVEVfVURQX0NPTk5FQ1RFRCkKKyAgICAgICAgd2hp cC0+c3RhdGUgPSBXSElQX1NUQVRFX1VEUF9DT05ORUNURUQ7CisgICAgd2hpcC0+d2hpcF91ZHBf dGltZSA9IGF2X2dldHRpbWUoKTsKKyAgICBhdl9sb2cod2hpcCwgQVZfTE9HX1ZFUkJPU0UsICJX SElQOiBVRFAgc3RhdGU9JWQsIGVsYXBzZWQ9JWRtcywgY29ubmVjdGVkIHRvIHVkcDovLyVzOiVk XG4iLAorICAgICAgICB3aGlwLT5zdGF0ZSwgRUxBUFNFRCh3aGlwLT53aGlwX3N0YXJ0dGltZSwg YXZfZ2V0dGltZSgpKSwgd2hpcC0+aWNlX2hvc3QsIHdoaXAtPmljZV9wb3J0KTsKKworZW5kOgor ICAgIGF2X2RpY3RfZnJlZSgmb3B0cyk7CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlu dCBpY2VfZHRsc19oYW5kc2hha2UoQVZGb3JtYXRDb250ZXh0ICpzKQoreworICAgIGludCByZXQg PSAwLCBzaXplLCBpOworICAgIGludDY0X3Qgc3RhcnR0aW1lID0gYXZfZ2V0dGltZSgpLCBub3c7 CisgICAgV0hJUENvbnRleHQgKndoaXAgPSBzLT5wcml2X2RhdGE7CisgICAgQVZEaWN0aW9uYXJ5 ICpvcHRzID0gTlVMTDsKKyAgICBjaGFyIHN0cls4XTsKKyAgICBjaGFyIGJ1ZlsyNTZdLCAqY2Vy dF9idWYgPSBOVUxMLCAqa2V5X2J1ZiA9IE5VTEw7CisKKyAgICBpZiAod2hpcC0+c3RhdGUgPCBX SElQX1NUQVRFX1VEUF9DT05ORUNURUQgfHwgIXdoaXAtPnVkcCkgeworICAgICAgICBhdl9sb2co d2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogVURQIG5vdCBjb25uZWN0ZWQsIHN0YXRlPSVkLCB1 ZHA9JXBcbiIsIHdoaXAtPnN0YXRlLCB3aGlwLT51ZHApOworICAgICAgICByZXR1cm4gQVZFUlJP UihFSU5WQUwpOworICAgIH0KKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlmICh3aGlwLT5z dGF0ZSA8PSBXSElQX1NUQVRFX0lDRV9DT05ORUNUSU5HKSB7CisgICAgICAgICAgICAvKiBCdWls ZCB0aGUgU1RVTiBiaW5kaW5nIHJlcXVlc3QuICovCisgICAgICAgICAgICByZXQgPSBpY2VfY3Jl YXRlX3JlcXVlc3Qocywgd2hpcC0+YnVmLCBzaXplb2Yod2hpcC0+YnVmKSwgJnNpemUpOworICAg ICAgICAgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgICAgICAgICBhdl9sb2cod2hpcCwgQVZf TE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIGNyZWF0ZSBTVFVOIGJpbmRpbmcgcmVxdWVzdCwg c2l6ZT0lZFxuIiwgc2l6ZSk7CisgICAgICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgICAg ICB9CisKKyAgICAgICAgICAgIHJldCA9IGZmdXJsX3dyaXRlKHdoaXAtPnVkcCwgd2hpcC0+YnVm LCBzaXplKTsKKyAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgICAgICAgICAgYXZf bG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IEZhaWxlZCB0byBzZW5kIFNUVU4gYmluZGlu ZyByZXF1ZXN0LCBzaXplPSVkXG4iLCBzaXplKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVuZDsK KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHdoaXAtPnN0YXRlIDwgV0hJUF9TVEFU RV9JQ0VfQ09OTkVDVElORykKKyAgICAgICAgICAgICAgICB3aGlwLT5zdGF0ZSA9IFdISVBfU1RB VEVfSUNFX0NPTk5FQ1RJTkc7CisgICAgICAgIH0KKworbmV4dF9wYWNrZXQ6CisgICAgICAgIGlm ICh3aGlwLT5zdGF0ZSA+PSBXSElQX1NUQVRFX0RUTFNfRklOSVNIRUQpCisgICAgICAgICAgICAv KiBEVExTIGhhbmRzaGFrZSBpcyBkb25lLCBleGl0IHRoZSBsb29wLiAqLworICAgICAgICAgICAg YnJlYWs7CisKKyAgICAgICAgbm93ID0gYXZfZ2V0dGltZSgpOworICAgICAgICBpZiAobm93IC0g c3RhcnR0aW1lID49IHdoaXAtPmhhbmRzaGFrZV90aW1lb3V0ICogMTAwMCkgeworICAgICAgICAg ICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IERUTFMgaGFuZHNoYWtlIHRpbWVv dXQ9JWRtcywgY29zdD0lZG1zLCBlbGFwc2VkPSVkbXMsIHN0YXRlPSVkXG4iLAorICAgICAgICAg ICAgICAgIHdoaXAtPmhhbmRzaGFrZV90aW1lb3V0LCBFTEFQU0VEKHN0YXJ0dGltZSwgbm93KSwg RUxBUFNFRCh3aGlwLT53aGlwX3N0YXJ0dGltZSwgbm93KSwgd2hpcC0+c3RhdGUpOworICAgICAg ICAgICAgcmV0ID0gQVZFUlJPUihFVElNRURPVVQpOworICAgICAgICAgICAgZ290byBlbmQ7Cisg ICAgICAgIH0KKworICAgICAgICAvKiBSZWFkIHRoZSBTVFVOIG9yIERUTFMgbWVzc2FnZXMgZnJv bSBwZWVyLiAqLworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgSUNFX0RUTFNfUkVBRF9JTlRFUlZB TCAvIDUgJiYgd2hpcC0+c3RhdGUgPCBXSElQX1NUQVRFX0RUTFNfQ09OTkVDVElORzsgaSsrKSB7 CisgICAgICAgICAgICByZXQgPSBmZnVybF9yZWFkKHdoaXAtPnVkcCwgd2hpcC0+YnVmLCBzaXpl b2Yod2hpcC0+YnVmKSk7CisgICAgICAgICAgICBpZiAocmV0ID4gMCkKKyAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgIGlmIChyZXQgPT0gQVZFUlJPUihFQUdBSU4pKSB7CisgICAg ICAgICAgICAgICAgYXZfdXNsZWVwKDUgKiAxMDAwKTsKKyAgICAgICAgICAgICAgICBjb250aW51 ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1Is ICJXSElQOiBGYWlsZWQgdG8gcmVhZCBtZXNzYWdlXG4iKTsKKyAgICAgICAgICAgIGdvdG8gZW5k OworICAgICAgICB9CisKKyAgICAgICAgLyogR290IG5vdGhpbmcsIGNvbnRpbnVlIHRvIHByb2Nl c3MgaGFuZHNoYWtlLiAqLworICAgICAgICBpZiAocmV0IDw9IDAgJiYgd2hpcC0+c3RhdGUgPCBX SElQX1NUQVRFX0RUTFNfQ09OTkVDVElORykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg ICAgIC8qIEhhbmRsZSB0aGUgSUNFIGJpbmRpbmcgcmVzcG9uc2UuICovCisgICAgICAgIGlmIChp Y2VfaXNfYmluZGluZ19yZXNwb25zZSh3aGlwLT5idWYsIHJldCkpIHsKKyAgICAgICAgICAgIGlm ICh3aGlwLT5zdGF0ZSA8IFdISVBfU1RBVEVfSUNFX0NPTk5FQ1RFRCkgeworICAgICAgICAgICAg ICAgIHdoaXAtPnN0YXRlID0gV0hJUF9TVEFURV9JQ0VfQ09OTkVDVEVEOworICAgICAgICAgICAg ICAgIHdoaXAtPndoaXBfaWNlX3RpbWUgPSBhdl9nZXR0aW1lKCk7CisgICAgICAgICAgICAgICAg YXZfbG9nKHdoaXAsIEFWX0xPR19WRVJCT1NFLCAiV0hJUDogSUNFIFNUVU4gb2ssIHN0YXRlPSVk LCB1cmw9dWRwOi8vJXM6JWQsIGxvY2F0aW9uPSVzLCB1c2VybmFtZT0lczolcywgcmVzPSVkQiwg ZWxhcHNlZD0lZG1zXG4iLAorICAgICAgICAgICAgICAgICAgICB3aGlwLT5zdGF0ZSwgd2hpcC0+ aWNlX2hvc3QsIHdoaXAtPmljZV9wb3J0LCB3aGlwLT53aGlwX3Jlc291cmNlX3VybCA/IHdoaXAt PndoaXBfcmVzb3VyY2VfdXJsIDogIiIsCisgICAgICAgICAgICAgICAgICAgIHdoaXAtPmljZV91 ZnJhZ19yZW1vdGUsIHdoaXAtPmljZV91ZnJhZ19sb2NhbCwgcmV0LCBFTEFQU0VEKHdoaXAtPndo aXBfc3RhcnR0aW1lLCBhdl9nZXR0aW1lKCkpKTsKKworICAgICAgICAgICAgICAgIGZmX3VybF9q b2luKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJkdGxzIiwgTlVMTCwgd2hpcC0+aWNlX2hvc3QsIHdoaXAt PmljZV9wb3J0LCBOVUxMKTsKKyAgICAgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihz dHIpLCAiJWQiLCB3aGlwLT5wa3Rfc2l6ZSk7CisgICAgICAgICAgICAgICAgYXZfZGljdF9zZXQo Jm9wdHMsICJtdHUiLCBzdHIsIDApOworICAgICAgICAgICAgICAgIGlmICh3aGlwLT5jZXJ0X2Zp bGUpIHsKKyAgICAgICAgICAgICAgICAgICAgYXZfZGljdF9zZXQoJm9wdHMsICJjZXJ0X2ZpbGUi LCB3aGlwLT5jZXJ0X2ZpbGUsIDApOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg ICAgICAgICAgICBhdl9kaWN0X3NldCgmb3B0cywgImNlcnRfYnVmIiwgd2hpcC0+Y2VydF9idWYs IDApOworCisgICAgICAgICAgICAgICAgaWYgKHdoaXAtPmtleV9maWxlKSB7CisgICAgICAgICAg ICAgICAgICAgIGF2X2RpY3Rfc2V0KCZvcHRzLCAia2V5X2ZpbGUiLCB3aGlwLT5rZXlfZmlsZSwg MCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGF2X2RpY3Rf c2V0KCZvcHRzLCAia2V5X2J1ZiIsIHdoaXAtPmtleV9idWYsIDApOworCisgICAgICAgICAgICAg ICAgYXZfZGljdF9zZXQoJm9wdHMsICJmaW5nZXJwcmludCIsIHdoaXAtPmR0bHNfZmluZ2VycHJp bnQsIDApOworICAgICAgICAgICAgICAgIGF2X2RpY3Rfc2V0KCZvcHRzLCAidXNlX2V4dGVybmFs X3VkcCIsICIxIiwgMCk7CisgICAgICAgICAgICAgICAgYXZfZGljdF9zZXQoJm9wdHMsICJsaXN0 ZW4iLCAiMSIsIDApOworICAgICAgICAgICAgICAgIC8qIElmIGdvdCB0aGUgZmlyc3QgYmluZGlu ZyByZXNwb25zZSwgc3RhcnQgRFRMUyBoYW5kc2hha2UuICovCisgICAgICAgICAgICAgICAgcmV0 ID0gZmZ1cmxfb3Blbl93aGl0ZWxpc3QoJndoaXAtPmR0bHNfdWMsIGJ1ZiwgQVZJT19GTEFHX1JF QURfV1JJVEUsICZzLT5pbnRlcnJ1cHRfY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICZv cHRzLCBzLT5wcm90b2NvbF93aGl0ZWxpc3QsIHMtPnByb3RvY29sX2JsYWNrbGlzdCwgTlVMTCk7 CisgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICAgICAgICAgIGdvdG8g ZW5kOworICAgICAgICAgICAgICAgIGR0bHNfaW5pdGlhbGl6ZShzKTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGdvdG8gbmV4dF9wYWNrZXQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBX aGVuIGEgYmluZGluZyByZXF1ZXN0IGlzIHJlY2VpdmVkLCBpdCBpcyBuZWNlc3NhcnkgdG8gcmVz cG9uZCBpbW1lZGlhdGVseS4gKi8KKyAgICAgICAgaWYgKGljZV9pc19iaW5kaW5nX3JlcXVlc3Qo d2hpcC0+YnVmLCByZXQpKSB7CisgICAgICAgICAgICBpZiAoKHJldCA9IGljZV9oYW5kbGVfYmlu ZGluZ19yZXF1ZXN0KHMsIHdoaXAtPmJ1ZiwgcmV0KSkgPCAwKQorICAgICAgICAgICAgICAgIGdv dG8gZW5kOworICAgICAgICAgICAgZ290byBuZXh0X3BhY2tldDsKKyAgICAgICAgfQorCisgICAg ICAgIC8qIElmIGdvdCBhbnkgRFRMUyBtZXNzYWdlcywgaGFuZGxlIGl0LiAqLworICAgICAgICBp ZiAoaXNfZHRsc19wYWNrZXQod2hpcC0+YnVmLCByZXQpICYmIHdoaXAtPnN0YXRlID49IFdISVBf U1RBVEVfSUNFX0NPTk5FQ1RFRCB8fCB3aGlwLT5zdGF0ZSA9PSBXSElQX1NUQVRFX0RUTFNfQ09O TkVDVElORykgeworICAgICAgICAgICAgd2hpcC0+c3RhdGUgPSBXSElQX1NUQVRFX0RUTFNfQ09O TkVDVElORzsKKyAgICAgICAgICAgIGlmICgocmV0ID0gZmZ1cmxfaGFuZHNoYWtlKHdoaXAtPmR0 bHNfdWMpKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgICAgICBkdGxz X2NvbnRleHRfb25fc3RhdGUocywgTlVMTCwgTlVMTCk7CisgICAgICAgICAgICBnb3RvIG5leHRf cGFja2V0OworICAgICAgICB9CisgICAgfQorCitlbmQ6CisgICAgaWYgKGNlcnRfYnVmKQorICAg ICAgICBhdl9mcmVlKGNlcnRfYnVmKTsKKyAgICBpZiAoa2V5X2J1ZikKKyAgICAgICAgYXZfZnJl ZShrZXlfYnVmKTsKKyAgICByZXR1cm4gcmV0OworfQorCisvKioKKyAqIEVzdGFibGlzaCB0aGUg U1JUUCBjb250ZXh0IHVzaW5nIHRoZSBrZXlpbmcgbWF0ZXJpYWwgZXhwb3J0ZWQgZnJvbSBEVExT LgorICoKKyAqIENyZWF0ZSBzZXBhcmF0ZSBTUlRQIGNvbnRleHRzIGZvciBzZW5kaW5nIHZpZGVv IGFuZCBhdWRpbywgYXMgdGhlaXIgc2VxdWVuY2VzIGRpZmZlcgorICogYW5kIHNob3VsZCBub3Qg c2hhcmUgYSBzaW5nbGUgY29udGV4dC4gR2VuZXJhdGUgYSBzaW5nbGUgU1JUUCBjb250ZXh0IGZv ciByZWNlaXZpbmcKKyAqIFJUQ1Agb25seS4KKyAqCisgKiBAcmV0dXJuIDAgaWYgT0ssIEFWRVJS T1JfeHh4IG9uIGVycm9yCisgKi8KK3N0YXRpYyBpbnQgc2V0dXBfc3J0cChBVkZvcm1hdENvbnRl eHQgKnMpCit7CisgICAgaW50IHJldDsKKyAgICBjaGFyIHJlY3Zfa2V5W0RUTFNfU1JUUF9LRVlf TEVOICsgRFRMU19TUlRQX1NBTFRfTEVOXTsKKyAgICBjaGFyIHNlbmRfa2V5W0RUTFNfU1JUUF9L RVlfTEVOICsgRFRMU19TUlRQX1NBTFRfTEVOXTsKKyAgICBjaGFyIGJ1ZltBVl9CQVNFNjRfU0la RShEVExTX1NSVFBfS0VZX0xFTiArIERUTFNfU1JUUF9TQUxUX0xFTildOworICAgIC8qKgorICAg ICAqIFRoZSBwcm9maWxlIGZvciBPcGVuU1NMJ3MgU1JUUCBpcyBTUlRQX0FFUzEyOF9DTV9TSEEx XzgwLCBzZWUgc3NsL2QxX3NydHAuYy4KKyAgICAgKiBUaGUgcHJvZmlsZSBmb3IgRkZtcGVnJ3Mg U1JUUCBpcyBTUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfODAsIHNlZSBsaWJhdmZvcm1hdC9zcnRw LmMuCisgICAgICovCisgICAgY29uc3QgY2hhciogc3VpdGUgPSAiU1JUUF9BRVMxMjhfQ01fSE1B Q19TSEExXzgwIjsKKyAgICBXSElQQ29udGV4dCAqd2hpcCA9IHMtPnByaXZfZGF0YTsKKyAgICBy ZXQgPSBmZl9kdGxzX2V4cG9ydF9tYXRlcmlhbHMod2hpcC0+ZHRsc191Yywgd2hpcC0+ZHRsc19z cnRwX21hdGVyaWFscywgc2l6ZW9mKHdoaXAtPmR0bHNfc3J0cF9tYXRlcmlhbHMpKTsKKyAgICBp ZiAocmV0IDwgMCkKKyAgICAgICAgZ290byBlbmQ7CisgICAgLyoqCisgICAgICogVGhpcyByZXBy ZXNlbnRzIHRoZSBtYXRlcmlhbCB1c2VkIHRvIGJ1aWxkIHRoZSBTUlRQIG1hc3RlciBrZXkuIEl0 IGlzCisgICAgICogZ2VuZXJhdGVkIGJ5IERUTFMgYW5kIGhhcyB0aGUgZm9sbG93aW5nIGxheW91 dDoKKyAgICAgKiAgICAgICAgICAxNkIgICAgICAgICAxNkIgICAgICAgICAxNEIgICAgICAgICAg ICAgMTRCCisgICAgICogICAgICBjbGllbnRfa2V5IHwgc2VydmVyX2tleSB8IGNsaWVudF9zYWx0 IHwgc2VydmVyX3NhbHQKKyAgICAgKi8KKyAgICBjaGFyICpjbGllbnRfa2V5ID0gd2hpcC0+ZHRs c19zcnRwX21hdGVyaWFsczsKKyAgICBjaGFyICpzZXJ2ZXJfa2V5ID0gd2hpcC0+ZHRsc19zcnRw X21hdGVyaWFscyArIERUTFNfU1JUUF9LRVlfTEVOOworICAgIGNoYXIgKmNsaWVudF9zYWx0ID0g c2VydmVyX2tleSArIERUTFNfU1JUUF9LRVlfTEVOOworICAgIGNoYXIgKnNlcnZlcl9zYWx0ID0g Y2xpZW50X3NhbHQgKyBEVExTX1NSVFBfU0FMVF9MRU47CisKKyAgICAvKiBBcyBEVExTIHNlcnZl ciwgdGhlIHJlY3Yga2V5IGlzIGNsaWVudCBtYXN0ZXIga2V5IHBsdXMgc2FsdC4gKi8KKyAgICBt ZW1jcHkocmVjdl9rZXksIGNsaWVudF9rZXksIERUTFNfU1JUUF9LRVlfTEVOKTsKKyAgICBtZW1j cHkocmVjdl9rZXkgKyBEVExTX1NSVFBfS0VZX0xFTiwgY2xpZW50X3NhbHQsIERUTFNfU1JUUF9T QUxUX0xFTik7CisKKyAgICAvKiBBcyBEVExTIHNlcnZlciwgdGhlIHNlbmQga2V5IGlzIHNlcnZl ciBtYXN0ZXIga2V5IHBsdXMgc2FsdC4gKi8KKyAgICBtZW1jcHkoc2VuZF9rZXksIHNlcnZlcl9r ZXksIERUTFNfU1JUUF9LRVlfTEVOKTsKKyAgICBtZW1jcHkoc2VuZF9rZXkgKyBEVExTX1NSVFBf S0VZX0xFTiwgc2VydmVyX3NhbHQsIERUTFNfU1JUUF9TQUxUX0xFTik7CisKKyAgICAvKiBTZXR1 cCBTUlRQIGNvbnRleHQgZm9yIG91dGdvaW5nIHBhY2tldHMgKi8KKyAgICBpZiAoIWF2X2Jhc2U2 NF9lbmNvZGUoYnVmLCBzaXplb2YoYnVmKSwgc2VuZF9rZXksIHNpemVvZihzZW5kX2tleSkpKSB7 CisgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBGYWlsZWQgdG8gZW5j b2RlIHNlbmQga2V5XG4iKTsKKyAgICAgICAgcmV0ID0gQVZFUlJPUihFSU8pOworICAgICAgICBn b3RvIGVuZDsKKyAgICB9CisKKyAgICByZXQgPSBmZl9zcnRwX3NldF9jcnlwdG8oJndoaXAtPnNy dHBfYXVkaW9fc2VuZCwgc3VpdGUsIGJ1Zik7CisgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAg YXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IEZhaWxlZCB0byBzZXQgY3J5cHRvIGZv ciBhdWRpbyBzZW5kXG4iKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgcmV0ID0g ZmZfc3J0cF9zZXRfY3J5cHRvKCZ3aGlwLT5zcnRwX3ZpZGVvX3NlbmQsIHN1aXRlLCBidWYpOwor ICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJX SElQOiBGYWlsZWQgdG8gc2V0IGNyeXB0byBmb3IgdmlkZW8gc2VuZFxuIik7CisgICAgICAgIGdv dG8gZW5kOworICAgIH0KKworICAgIHJldCA9IGZmX3NydHBfc2V0X2NyeXB0bygmd2hpcC0+c3J0 cF9ydGNwX3NlbmQsIHN1aXRlLCBidWYpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGF2 X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gc2V0IGNyeXB0byBmb3IgcnRjcCBz ZW5kXG4iKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgLyogU2V0dXAgU1JUUCBj b250ZXh0IGZvciBpbmNvbWluZyBwYWNrZXRzICovCisgICAgaWYgKCFhdl9iYXNlNjRfZW5jb2Rl KGJ1Ziwgc2l6ZW9mKGJ1ZiksIHJlY3Zfa2V5LCBzaXplb2YocmVjdl9rZXkpKSkgeworICAgICAg ICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIGVuY29kZSByZWN2 IGtleVxuIik7CisgICAgICAgIHJldCA9IEFWRVJST1IoRUlPKTsKKyAgICAgICAgZ290byBlbmQ7 CisgICAgfQorCisgICAgcmV0ID0gZmZfc3J0cF9zZXRfY3J5cHRvKCZ3aGlwLT5zcnRwX3JlY3Ys IHN1aXRlLCBidWYpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGF2X2xvZyh3aGlwLCBB Vl9MT0dfRVJST1IsICJXSElQOiBGYWlsZWQgdG8gc2V0IGNyeXB0byBmb3IgcmVjdlxuIik7Cisg ICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIGlmICh3aGlwLT5zdGF0ZSA8IFdISVBfU1RB VEVfU1JUUF9GSU5JU0hFRCkKKyAgICAgICAgd2hpcC0+c3RhdGUgPSBXSElQX1NUQVRFX1NSVFBf RklOSVNIRUQ7CisgICAgd2hpcC0+d2hpcF9zcnRwX3RpbWUgPSBhdl9nZXR0aW1lKCk7CisgICAg YXZfbG9nKHdoaXAsIEFWX0xPR19WRVJCT1NFLCAiV0hJUDogU1JUUCBzZXR1cCBkb25lLCBzdGF0 ZT0lZCwgc3VpdGU9JXMsIGtleT0lbHVCLCBlbGFwc2VkPSVkbXNcbiIsCisgICAgICAgIHdoaXAt PnN0YXRlLCBzdWl0ZSwgc2l6ZW9mKHNlbmRfa2V5KSwgRUxBUFNFRCh3aGlwLT53aGlwX3N0YXJ0 dGltZSwgYXZfZ2V0dGltZSgpKSk7CisKK2VuZDoKKyAgICByZXR1cm4gcmV0OworfQorCisvKioK KyAqIENhbGxiYWNrIHRyaWdnZXJlZCBieSB0aGUgUlRQIG11eGVyIHdoZW4gaXQgY3JlYXRlcyBh bmQgc2VuZHMgb3V0IGFuIFJUUCBwYWNrZXQuCisgKgorICogVGhpcyBmdW5jdGlvbiBtb2RpZmll cyB0aGUgdmlkZW8gU1RBUCBwYWNrZXQsIHJlbW92aW5nIHRoZSBtYXJrZXJzLCBhbmQgdXBkYXRp bmcgdGhlCisgKiBOUkkgb2YgdGhlIGZpcnN0IE5BTFUuIEFkZGl0aW9uYWxseSwgaXQgdXNlcyB0 aGUgY29ycmVzcG9uZGluZyBTUlRQIGNvbnRleHQgdG8gZW5jcnlwdAorICogdGhlIFJUUCBwYWNr ZXQsIHdoZXJlIHRoZSB2aWRlbyBwYWNrZXQgaXMgaGFuZGxlZCBieSB0aGUgdmlkZW8gU1JUUCBj b250ZXh0LgorICovCitzdGF0aWMgaW50IG9uX3J0cF93cml0ZV9wYWNrZXQodm9pZCAqb3BhcXVl LCBjb25zdCB1aW50OF90ICpidWYsIGludCBidWZfc2l6ZSkKK3sKKyAgICBpbnQgcmV0LCBjaXBo ZXJfc2l6ZSwgaXNfcnRjcCwgaXNfdmlkZW87CisgICAgdWludDhfdCBwYXlsb2FkX3R5cGU7Cisg ICAgQVZGb3JtYXRDb250ZXh0ICpzID0gb3BhcXVlOworICAgIFdISVBDb250ZXh0ICp3aGlwID0g cy0+cHJpdl9kYXRhOworICAgIFNSVFBDb250ZXh0ICpzcnRwOworCisgICAgLyogSWdub3JlIGlm IG5vdCBSVFAgb3IgUlRDUCBwYWNrZXQuICovCisgICAgaWYgKCFtZWRpYV9pc19ydHBfcnRjcChi dWYsIGJ1Zl9zaXplKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiBPbmx5IHN1cHBvcnQg YXVkaW8sIHZpZGVvIGFuZCBydGNwLiAqLworICAgIGlzX3J0Y3AgPSBtZWRpYV9pc19ydGNwKGJ1 ZiwgYnVmX3NpemUpOworICAgIHBheWxvYWRfdHlwZSA9IGJ1ZlsxXSAmIDB4N2Y7CisgICAgaXNf dmlkZW8gPSBwYXlsb2FkX3R5cGUgPT0gd2hpcC0+dmlkZW9fcGF5bG9hZF90eXBlOworICAgIGlm ICghaXNfcnRjcCAmJiBwYXlsb2FkX3R5cGUgIT0gd2hpcC0+dmlkZW9fcGF5bG9hZF90eXBlICYm IHBheWxvYWRfdHlwZSAhPSB3aGlwLT5hdWRpb19wYXlsb2FkX3R5cGUpCisgICAgICAgIHJldHVy biAwOworCisgICAgLyogR2V0IHRoZSBjb3JyZXNwb25kaW5nIFNSVFAgY29udGV4dC4gKi8KKyAg ICBzcnRwID0gaXNfcnRjcCA/ICZ3aGlwLT5zcnRwX3J0Y3Bfc2VuZCA6IChpc192aWRlbz8gJndo aXAtPnNydHBfdmlkZW9fc2VuZCA6ICZ3aGlwLT5zcnRwX2F1ZGlvX3NlbmQpOworCisgICAgLyog RW5jcnlwdCBieSBTUlRQIGFuZCBzZW5kIG91dC4gKi8KKyAgICBjaXBoZXJfc2l6ZSA9IGZmX3Ny dHBfZW5jcnlwdChzcnRwLCBidWYsIGJ1Zl9zaXplLCB3aGlwLT5idWYsIHNpemVvZih3aGlwLT5i dWYpKTsKKyAgICBpZiAoY2lwaGVyX3NpemUgPD0gMCB8fCBjaXBoZXJfc2l6ZSA8IGJ1Zl9zaXpl KSB7CisgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfV0FSTklORywgIldISVA6IEZhaWxlZCB0 byBlbmNyeXB0IHBhY2tldD0lZEIsIGNpcGhlcj0lZEJcbiIsIGJ1Zl9zaXplLCBjaXBoZXJfc2l6 ZSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldCA9IGZmdXJsX3dyaXRlKHdo aXAtPnVkcCwgd2hpcC0+YnVmLCBjaXBoZXJfc2l6ZSk7CisgICAgaWYgKHJldCA8IDApIHsKKyAg ICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IEZhaWxlZCB0byB3cml0ZSBw YWNrZXQ9JWRCLCByZXQ9JWRcbiIsIGNpcGhlcl9zaXplLCByZXQpOworICAgICAgICByZXR1cm4g cmV0OworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICogQ3JlYXRlcyBkZWRp Y2F0ZWQgUlRQIG11eGVycyBmb3IgZWFjaCBzdHJlYW0gaW4gdGhlIEFWRm9ybWF0Q29udGV4dCB0 byBidWlsZCBSVFAKKyAqIHBhY2tldHMgZnJvbSB0aGUgZW5jb2RlZCBmcmFtZXMuCisgKgorICog VGhlIGNvcnJlc3BvbmRpbmcgU1JUUCBjb250ZXh0IGlzIHV0aWxpemVkIHRvIGVuY3J5cHQgZWFj aCBzdHJlYW0ncyBSVFAgcGFja2V0cy4gRm9yCisgKiBleGFtcGxlLCBhIHZpZGVvIFNSVFAgY29u dGV4dCBpcyB1c2VkIGZvciB0aGUgdmlkZW8gc3RyZWFtLiBBZGRpdGlvbmFsbHksIHRoZQorICog Im9uX3J0cF93cml0ZV9wYWNrZXQiIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIHNldCBhcyB0aGUgd3Jp dGUgZnVuY3Rpb24gZm9yIGVhY2ggUlRQCisgKiBtdXhlciB0byBzZW5kIG91dCBlbmNyeXB0ZWQg UlRQIHBhY2tldHMuCisgKgorICogQHJldHVybiAwIGlmIE9LLCBBVkVSUk9SX3h4eCBvbiBlcnJv cgorICovCitzdGF0aWMgaW50IGNyZWF0ZV9ydHBfbXV4ZXIoQVZGb3JtYXRDb250ZXh0ICpzKQor eworICAgIGludCByZXQsIGksIGlzX3ZpZGVvLCBidWZmZXJfc2l6ZSwgbWF4X3BhY2tldF9zaXpl OworICAgIEFWRm9ybWF0Q29udGV4dCAqcnRwX2N0eCA9IE5VTEw7CisgICAgQVZEaWN0aW9uYXJ5 ICpvcHRzID0gTlVMTDsKKyAgICB1aW50OF90ICpidWZmZXIgPSBOVUxMOworICAgIGNoYXIgYnVm WzY0XTsKKyAgICBXSElQQ29udGV4dCAqd2hpcCA9IHMtPnByaXZfZGF0YTsKKworICAgIGNvbnN0 IEFWT3V0cHV0Rm9ybWF0ICpydHBfZm9ybWF0ID0gYXZfZ3Vlc3NfZm9ybWF0KCJydHAiLCBOVUxM LCBOVUxMKTsKKyAgICBpZiAoIXJ0cF9mb3JtYXQpIHsKKyAgICAgICAgYXZfbG9nKHdoaXAsIEFW X0xPR19FUlJPUiwgIldISVA6IEZhaWxlZCB0byBndWVzcyBydHAgbXV4ZXJcbiIpOworICAgICAg ICByZXQgPSBBVkVSUk9SKEVOT1NZUyk7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAg IC8qIFRoZSBVRFAgYnVmZmVyIHNpemUsIG1heSBncmVhdGVyIHRoYW4gTVRVLiAqLworICAgIGJ1 ZmZlcl9zaXplID0gTUFYX1VEUF9CVUZGRVJfU0laRTsKKyAgICAvKiBUaGUgUlRQIHBheWxvYWQg bWF4IHNpemUuIFJlc2VydmVkIHNvbWUgYnl0ZXMgZm9yIFNSVFAgY2hlY2tzdW0gYW5kIHBhZGRp bmcuICovCisgICAgbWF4X3BhY2tldF9zaXplID0gd2hpcC0+cGt0X3NpemUgLSBEVExTX1NSVFBf Q0hFQ0tTVU1fTEVOOworCisgICAgZm9yIChpID0gMDsgaSA8IHMtPm5iX3N0cmVhbXM7IGkrKykg eworICAgICAgICBydHBfY3R4ID0gYXZmb3JtYXRfYWxsb2NfY29udGV4dCgpOworICAgICAgICBp ZiAoIXJ0cF9jdHgpIHsKKyAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKKyAgICAg ICAgICAgIGdvdG8gZW5kOworICAgICAgICB9CisKKyAgICAgICAgcnRwX2N0eC0+b2Zvcm1hdCA9 IHJ0cF9mb3JtYXQ7CisgICAgICAgIGlmICghYXZmb3JtYXRfbmV3X3N0cmVhbShydHBfY3R4LCBO VUxMKSkgeworICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICAgICAg Z290byBlbmQ7CisgICAgICAgIH0KKyAgICAgICAgLyogUGFzcyB0aGUgaW50ZXJydXB0IGNhbGxi YWNrIG9uICovCisgICAgICAgIHJ0cF9jdHgtPmludGVycnVwdF9jYWxsYmFjayA9IHMtPmludGVy cnVwdF9jYWxsYmFjazsKKyAgICAgICAgLyogQ29weSB0aGUgbWF4IGRlbGF5IHNldHRpbmc7IHRo ZSBydHAgbXV4ZXIgcmVhZHMgdGhpcy4gKi8KKyAgICAgICAgcnRwX2N0eC0+bWF4X2RlbGF5ID0g cy0+bWF4X2RlbGF5OworICAgICAgICAvKiBDb3B5IG90aGVyIHN0cmVhbSBwYXJhbWV0ZXJzLiAq LworICAgICAgICBydHBfY3R4LT5zdHJlYW1zWzBdLT5zYW1wbGVfYXNwZWN0X3JhdGlvID0gcy0+ c3RyZWFtc1tpXS0+c2FtcGxlX2FzcGVjdF9yYXRpbzsKKyAgICAgICAgcnRwX2N0eC0+ZmxhZ3Mg fD0gcy0+ZmxhZ3MgJiBBVkZNVF9GTEFHX0JJVEVYQUNUOworICAgICAgICBydHBfY3R4LT5zdHJp Y3Rfc3RkX2NvbXBsaWFuY2UgPSBzLT5zdHJpY3Rfc3RkX2NvbXBsaWFuY2U7CisKKyAgICAgICAg LyogU2V0IHRoZSBzeW5jaHJvbml6ZWQgc3RhcnQgdGltZS4gKi8KKyAgICAgICAgcnRwX2N0eC0+ c3RhcnRfdGltZV9yZWFsdGltZSA9IHMtPnN0YXJ0X3RpbWVfcmVhbHRpbWU7CisKKyAgICAgICAg YXZjb2RlY19wYXJhbWV0ZXJzX2NvcHkocnRwX2N0eC0+c3RyZWFtc1swXS0+Y29kZWNwYXIsIHMt PnN0cmVhbXNbaV0tPmNvZGVjcGFyKTsKKyAgICAgICAgcnRwX2N0eC0+c3RyZWFtc1swXS0+dGlt ZV9iYXNlID0gcy0+c3RyZWFtc1tpXS0+dGltZV9iYXNlOworCisgICAgICAgIC8qKgorICAgICAg ICAgKiBGb3IgSC4yNjQsIGNvbnNpc3RlbnRseSB1dGlsaXplIHRoZSBhbm5leGIgZm9ybWF0IHRo cm91Z2ggdGhlIEJpdHN0cmVhbSBGaWx0ZXIgKEJTRik7CisgICAgICAgICAqIHRoZXJlZm9yZSwg d2UgZGVhY3RpdmF0ZSB0aGUgZXh0cmFkYXRhIGRldGVjdGlvbiBmb3IgdGhlIFJUUCBtdXhlci4K KyAgICAgICAgICovCisgICAgICAgIGlmIChzLT5zdHJlYW1zW2ldLT5jb2RlY3Bhci0+Y29kZWNf aWQgPT0gQVZfQ09ERUNfSURfSDI2NCkgeworICAgICAgICAgICAgYXZfZnJlZXAoJnJ0cF9jdHgt PnN0cmVhbXNbaV0tPmNvZGVjcGFyLT5leHRyYWRhdGEpOworICAgICAgICAgICAgcnRwX2N0eC0+ c3RyZWFtc1tpXS0+Y29kZWNwYXItPmV4dHJhZGF0YV9zaXplID0gMDsKKyAgICAgICAgfQorCisg ICAgICAgIGJ1ZmZlciA9IGF2X21hbGxvYyhidWZmZXJfc2l6ZSk7CisgICAgICAgIGlmICghYnVm ZmVyKSB7CisgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgICAgICBn b3RvIGVuZDsKKyAgICAgICAgfQorCisgICAgICAgIHJ0cF9jdHgtPnBiID0gYXZpb19hbGxvY19j b250ZXh0KGJ1ZmZlciwgYnVmZmVyX3NpemUsIDEsIHMsIE5VTEwsIG9uX3J0cF93cml0ZV9wYWNr ZXQsIE5VTEwpOworICAgICAgICBpZiAoIXJ0cF9jdHgtPnBiKSB7CisgICAgICAgICAgICByZXQg PSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgfQorICAg ICAgICBydHBfY3R4LT5wYi0+bWF4X3BhY2tldF9zaXplID0gbWF4X3BhY2tldF9zaXplOworICAg ICAgICBydHBfY3R4LT5wYi0+YXZfY2xhc3MgPSAmZmZfYXZpb19jbGFzczsKKworICAgICAgICBp c192aWRlbyA9IHMtPnN0cmVhbXNbaV0tPmNvZGVjcGFyLT5jb2RlY190eXBlID09IEFWTUVESUFf VFlQRV9WSURFTzsKKyAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgaXNf dmlkZW8/IHdoaXAtPnZpZGVvX3BheWxvYWRfdHlwZSA6IHdoaXAtPmF1ZGlvX3BheWxvYWRfdHlw ZSk7CisgICAgICAgIGF2X2RpY3Rfc2V0KCZvcHRzLCAicGF5bG9hZF90eXBlIiwgYnVmLCAwKTsK KyAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgaXNfdmlkZW8/IHdoaXAt PnZpZGVvX3NzcmMgOiB3aGlwLT5hdWRpb19zc3JjKTsKKyAgICAgICAgYXZfZGljdF9zZXQoJm9w dHMsICJzc3JjIiwgYnVmLCAwKTsKKworICAgICAgICByZXQgPSBhdmZvcm1hdF93cml0ZV9oZWFk ZXIocnRwX2N0eCwgJm9wdHMpOworICAgICAgICBpZiAocmV0IDwgMCkgeworICAgICAgICAgICAg YXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IEZhaWxlZCB0byB3cml0ZSBydHAgaGVh ZGVyXG4iKTsKKyAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICB9CisKKyAgICAgICAgZmZf Zm9ybWF0X3NldF91cmwocnRwX2N0eCwgYXZfc3RyZHVwKHMtPnVybCkpOworICAgICAgICBzLT5z dHJlYW1zW2ldLT50aW1lX2Jhc2UgPSBydHBfY3R4LT5zdHJlYW1zWzBdLT50aW1lX2Jhc2U7Cisg ICAgICAgIHMtPnN0cmVhbXNbaV0tPnByaXZfZGF0YSA9IHJ0cF9jdHg7CisgICAgICAgIHJ0cF9j dHggPSBOVUxMOworICAgIH0KKworICAgIGlmICh3aGlwLT5zdGF0ZSA8IFdISVBfU1RBVEVfUkVB RFkpCisgICAgICAgIHdoaXAtPnN0YXRlID0gV0hJUF9TVEFURV9SRUFEWTsKKyAgICBhdl9sb2co d2hpcCwgQVZfTE9HX0lORk8sICJXSElQOiBNdXhlciBzdGF0ZT0lZCwgYnVmZmVyX3NpemU9JWQs IG1heF9wYWNrZXRfc2l6ZT0lZCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgImVsYXBz ZWQ9JWRtcyhpbml0OiVkLG9mZmVyOiVkLGFuc3dlcjolZCx1ZHA6JWQsaWNlOiVkLGR0bHM6JWQs c3J0cDolZClcbiIsCisgICAgICAgIHdoaXAtPnN0YXRlLCBidWZmZXJfc2l6ZSwgbWF4X3BhY2tl dF9zaXplLCBFTEFQU0VEKHdoaXAtPndoaXBfc3RhcnR0aW1lLCBhdl9nZXR0aW1lKCkpLAorICAg ICAgICBFTEFQU0VEKHdoaXAtPndoaXBfc3RhcnR0aW1lLCAgIHdoaXAtPndoaXBfaW5pdF90aW1l KSwKKyAgICAgICAgRUxBUFNFRCh3aGlwLT53aGlwX2luaXRfdGltZSwgICB3aGlwLT53aGlwX29m ZmVyX3RpbWUpLAorICAgICAgICBFTEFQU0VEKHdoaXAtPndoaXBfb2ZmZXJfdGltZSwgIHdoaXAt PndoaXBfYW5zd2VyX3RpbWUpLAorICAgICAgICBFTEFQU0VEKHdoaXAtPndoaXBfYW5zd2VyX3Rp bWUsIHdoaXAtPndoaXBfdWRwX3RpbWUpLAorICAgICAgICBFTEFQU0VEKHdoaXAtPndoaXBfdWRw X3RpbWUsICAgIHdoaXAtPndoaXBfaWNlX3RpbWUpLAorICAgICAgICBFTEFQU0VEKHdoaXAtPndo aXBfaWNlX3RpbWUsICAgIHdoaXAtPndoaXBfZHRsc190aW1lKSwKKyAgICAgICAgRUxBUFNFRCh3 aGlwLT53aGlwX2R0bHNfdGltZSwgICB3aGlwLT53aGlwX3NydHBfdGltZSkpOworCitlbmQ6Cisg ICAgaWYgKHJ0cF9jdHgpCisgICAgICAgIGF2aW9fY29udGV4dF9mcmVlKCZydHBfY3R4LT5wYik7 CisgICAgYXZmb3JtYXRfZnJlZV9jb250ZXh0KHJ0cF9jdHgpOworICAgIGF2X2RpY3RfZnJlZSgm b3B0cyk7CisgICAgcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBSVEMgaXMgY29ubmVjdGlvbmxl c3MsIGZvciBpdCdzIGJhc2VkIG9uIFVEUCwgc28gaXQgY2hlY2sgd2hldGhlciBzZXNpc29uIGlz CisgKiB0aW1lb3V0LiBJbiBzdWNoIGNhc2UsIHB1Ymxpc2hlcnMgY2FuJ3QgcmVwdWJsaXNoIHRo ZSBzdHJlYW0gdXRpbCB0aGUgc2Vzc2lvbgorICogaXMgdGltZW91dC4KKyAqIFRoaXMgZnVuY3Rp b24gaXMgY2FsbGVkIHRvIG5vdGlmeSB0aGUgc2VydmVyIHRoYXQgdGhlIHN0cmVhbSBpcyBlbmRl ZCwgc2VydmVyCisgKiBzaG91bGQgZXhwaXJlIGFuZCBjbG9zZSB0aGUgc2Vzc2lvbiBpbW1lZGlh dGVseSwgc28gdGhhdCBwdWJsaXNoZXJzIGNhbiByZXB1Ymxpc2gKKyAqIHRoZSBzdHJlYW0gcXVp Y2tseS4KKyAqLworc3RhdGljIGludCBkaXNwb3NlX3Nlc3Npb24oQVZGb3JtYXRDb250ZXh0ICpz KQoreworICAgIGludCByZXQ7CisgICAgY2hhciBidWZbTUFYX1VSTF9TSVpFXTsKKyAgICBVUkxD b250ZXh0ICp3aGlwX3VjID0gTlVMTDsKKyAgICBBVkRpY3Rpb25hcnkgKm9wdHMgPSBOVUxMOwor ICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRhOworCisgICAgaWYgKCF3aGlwLT53 aGlwX3Jlc291cmNlX3VybCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXQgPSBzbnByaW50 ZihidWYsIHNpemVvZihidWYpLCAiQ2FjaGUtQ29udHJvbDogbm8tY2FjaGVcclxuIik7CisgICAg aWYgKHdoaXAtPmF1dGhvcml6YXRpb24pCisgICAgICAgIHJldCArPSBzbnByaW50ZihidWYgKyBy ZXQsIHNpemVvZihidWYpIC0gcmV0LCAiQXV0aG9yaXphdGlvbjogQmVhcmVyICVzXHJcbiIsIHdo aXAtPmF1dGhvcml6YXRpb24pOworICAgIGlmIChyZXQgPD0gMCB8fCByZXQgPj0gc2l6ZW9mKGJ1 ZikpIHsKKyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IEZhaWxlZCB0 byBnZW5lcmF0ZSBoZWFkZXJzLCBzaXplPSVkLCAlc1xuIiwgcmV0LCBidWYpOworICAgICAgICBy ZXQgPSBBVkVSUk9SKEVJTlZBTCk7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIGF2 X2RpY3Rfc2V0KCZvcHRzLCAiaGVhZGVycyIsIGJ1ZiwgMCk7CisgICAgYXZfZGljdF9zZXRfaW50 KCZvcHRzLCAiY2h1bmtlZF9wb3N0IiwgMCwgMCk7CisgICAgYXZfZGljdF9zZXQoJm9wdHMsICJt ZXRob2QiLCAiREVMRVRFIiwgMCk7CisgICAgcmV0ID0gZmZ1cmxfb3Blbl93aGl0ZWxpc3QoJndo aXBfdWMsIHdoaXAtPndoaXBfcmVzb3VyY2VfdXJsLCBBVklPX0ZMQUdfUkVBRF9XUklURSwgJnMt PmludGVycnVwdF9jYWxsYmFjaywKKyAgICAgICAgJm9wdHMsIHMtPnByb3RvY29sX3doaXRlbGlz dCwgcy0+cHJvdG9jb2xfYmxhY2tsaXN0LCBOVUxMKTsKKyAgICBpZiAocmV0IDwgMCkgeworICAg ICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIERFTEVURSB1 cmw9JXNcbiIsIHdoaXAtPndoaXBfcmVzb3VyY2VfdXJsKTsKKyAgICAgICAgZ290byBlbmQ7Cisg ICAgfQorCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgcmV0ID0gZmZ1cmxfcmVhZCh3aGlwX3Vj LCBidWYsIHNpemVvZihidWYpKTsKKyAgICAgICAgaWYgKHJldCA9PSBBVkVSUk9SX0VPRikgewor ICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg ICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9S LCAiV0hJUDogRmFpbGVkIHRvIHJlYWQgcmVzcG9uc2UgZnJvbSBERUxFVEUgdXJsPSVzXG4iLCB3 aGlwLT53aGlwX3Jlc291cmNlX3VybCk7CisgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAg fQorICAgIH0KKworICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfSU5GTywgIldISVA6IERpc3Bvc2Ug cmVzb3VyY2UgJXMgb2tcbiIsIHdoaXAtPndoaXBfcmVzb3VyY2VfdXJsKTsKKworZW5kOgorICAg IGZmdXJsX2Nsb3NlcCgmd2hpcF91Yyk7CisgICAgYXZfZGljdF9mcmVlKCZvcHRzKTsKKyAgICBy ZXR1cm4gcmV0OworfQorCisvKioKKyAqIFNpbmNlIHRoZSBoMjY0X21wNHRvYW5uZXhiIGZpbHRl ciBvbmx5IHByb2Nlc3NlcyB0aGUgTVA0IElTT00gZm9ybWF0IGFuZCBieXBhc3NlcworICogdGhl IGFubmV4YiBmb3JtYXQsIGl0IGlzIG5lY2Vzc2FyeSB0byBtYW51YWxseSBpbnNlcnQgZW5jb2Rl ciBtZXRhZGF0YSBiZWZvcmUgZWFjaAorICogSURSIHdoZW4gZGVhbGluZyB3aXRoIGFubmV4YiBm b3JtYXQgcGFja2V0cy4gRm9yIGluc3RhbmNlLCBpbiB0aGUgY2FzZSBvZiBILjI2NCwKKyAqIHdl IG11c3QgaW5zZXJ0IFNQUyBhbmQgUFBTIGJlZm9yZSB0aGUgSURSIGZyYW1lLgorICovCitzdGF0 aWMgaW50IGgyNjRfYW5uZXhiX2luc2VydF9zcHNfcHBzKEFWRm9ybWF0Q29udGV4dCAqcywgQVZQ YWNrZXQgKnBrdCkKK3sKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBBVlBhY2tldCAqaW4gPSBOVUxM OworICAgIEFWQ29kZWNQYXJhbWV0ZXJzICpwYXIgPSBzLT5zdHJlYW1zW3BrdC0+c3RyZWFtX2lu ZGV4XS0+Y29kZWNwYXI7CisgICAgdWludDMyX3QgbmFsX3NpemUgPSAwLCBvdXRfc2l6ZSA9IHBh ciA/IHBhci0+ZXh0cmFkYXRhX3NpemUgOiAwOworICAgIHVpbnQ4X3QgdW5pdF90eXBlLCBzcHNf c2VlbiA9IDAsIHBwc19zZWVuID0gMCwgaWRyX3NlZW4gPSAwLCAqb3V0OworICAgIGNvbnN0IHVp bnQ4X3QgKmJ1ZiwgKmJ1Zl9lbmQsICpyMTsKKworICAgIGlmICghcGt0IHx8ICFwa3QtPmRhdGEg fHwgcGt0LT5zaXplIDw9IDApCisgICAgICAgIHJldHVybiByZXQ7CisgICAgaWYgKCFwYXIgfHwg IXBhci0+ZXh0cmFkYXRhIHx8IHBhci0+ZXh0cmFkYXRhX3NpemUgPD0gMCkKKyAgICAgICAgcmV0 dXJuIHJldDsKKworICAgIC8qIERpc2NvdmVyIE5BTFUgdHlwZSBmcm9tIHBhY2tldC4gKi8KKyAg ICBidWZfZW5kICA9IHBrdC0+ZGF0YSArIHBrdC0+c2l6ZTsKKyAgICBmb3IgKGJ1ZiA9IGZmX25h bF9maW5kX3N0YXJ0Y29kZShwa3QtPmRhdGEsIGJ1Zl9lbmQpOyBidWYgPCBidWZfZW5kOyBidWYg Kz0gbmFsX3NpemUpIHsKKyAgICAgICAgd2hpbGUgKCEqKGJ1ZisrKSk7CisgICAgICAgIHIxID0g ZmZfbmFsX2ZpbmRfc3RhcnRjb2RlKGJ1ZiwgYnVmX2VuZCk7CisgICAgICAgIGlmICgobmFsX3Np emUgPSByMSAtIGJ1ZikgPiAwKSB7CisgICAgICAgICAgICB1bml0X3R5cGUgPSAqYnVmICYgMHgx ZjsKKyAgICAgICAgICAgIGlmICh1bml0X3R5cGUgPT0gSDI2NF9OQUxfU1BTKSB7CisgICAgICAg ICAgICAgICAgc3BzX3NlZW4gPSAxOworICAgICAgICAgICAgfSBlbHNlIGlmICh1bml0X3R5cGUg PT0gSDI2NF9OQUxfUFBTKSB7CisgICAgICAgICAgICAgICAgcHBzX3NlZW4gPSAxOworICAgICAg ICAgICAgfSBlbHNlIGlmICh1bml0X3R5cGUgPT0gSDI2NF9OQUxfSURSX1NMSUNFKSB7CisgICAg ICAgICAgICAgICAgaWRyX3NlZW4gPSAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBv dXRfc2l6ZSArPSAzICsgbmFsX3NpemU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWlk cl9zZWVuIHx8IChzcHNfc2VlbiAmJiBwcHNfc2VlbikpCisgICAgICAgIHJldHVybiByZXQ7CisK KyAgICAvKiBTZWUgYXZfYnNmX3NlbmRfcGFja2V0ICovCisgICAgaW4gPSBhdl9wYWNrZXRfYWxs b2MoKTsKKyAgICBpZiAoIWluKQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisg ICAgcmV0ID0gYXZfcGFja2V0X21ha2VfcmVmY291bnRlZChwa3QpOworICAgIGlmIChyZXQgPCAw KQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBhdl9wYWNrZXRfbW92ZV9yZWYoaW4sIHBrdCk7 CisKKyAgICAvKiBDcmVhdGUgYSBuZXcgcGFja2V0IHdpdGggc3BzL3BwcyBpbnNlcnRlZC4gKi8K KyAgICByZXQgPSBhdl9uZXdfcGFja2V0KHBrdCwgb3V0X3NpemUpOworICAgIGlmIChyZXQgPCAw KQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICByZXQgPSBhdl9wYWNrZXRfY29weV9wcm9wcyhw a3QsIGluKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgbWVt Y3B5KHBrdC0+ZGF0YSwgcGFyLT5leHRyYWRhdGEsIHBhci0+ZXh0cmFkYXRhX3NpemUpOworICAg IG91dCA9IHBrdC0+ZGF0YSArIHBhci0+ZXh0cmFkYXRhX3NpemU7CisgICAgYnVmX2VuZCAgPSBp bi0+ZGF0YSArIGluLT5zaXplOworICAgIGZvciAoYnVmID0gZmZfbmFsX2ZpbmRfc3RhcnRjb2Rl KGluLT5kYXRhLCBidWZfZW5kKTsgYnVmIDwgYnVmX2VuZDsgYnVmICs9IG5hbF9zaXplKSB7Cisg ICAgICAgIHdoaWxlICghKihidWYrKykpOworICAgICAgICByMSA9IGZmX25hbF9maW5kX3N0YXJ0 Y29kZShidWYsIGJ1Zl9lbmQpOworICAgICAgICBpZiAoKG5hbF9zaXplID0gcjEgLSBidWYpID4g MCkgeworICAgICAgICAgICAgQVZfV0IyNChvdXQsIDB4MDAwMDEpOworICAgICAgICAgICAgbWVt Y3B5KG91dCArIDMsIGJ1ZiwgbmFsX3NpemUpOworICAgICAgICAgICAgb3V0ICs9IDMgKyBuYWxf c2l6ZTsKKyAgICAgICAgfQorICAgIH0KKworZmFpbDoKKyAgICBpZiAocmV0IDwgMCkKKyAgICAg ICAgYXZfcGFja2V0X3VucmVmKHBrdCk7CisgICAgYXZfcGFja2V0X2ZyZWUoJmluKTsKKworICAg IHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBhdl9jb2xkIGludCB3aGlwX2luaXQoQVZGb3JtYXRD b250ZXh0ICpzKQoreworICAgIGludCByZXQ7CisgICAgV0hJUENvbnRleHQgKndoaXAgPSBzLT5w cml2X2RhdGE7CisKKyAgICBpZiAoKHJldCA9IGluaXRpYWxpemUocykpIDwgMCkKKyAgICAgICAg Z290byBlbmQ7CisKKyAgICBpZiAoKHJldCA9IHBhcnNlX2NvZGVjKHMpKSA8IDApCisgICAgICAg IGdvdG8gZW5kOworCisgICAgaWYgKChyZXQgPSBnZW5lcmF0ZV9zZHBfb2ZmZXIocykpIDwgMCkK KyAgICAgICAgZ290byBlbmQ7CisKKyAgICBpZiAoKHJldCA9IGV4Y2hhbmdlX3NkcChzKSkgPCAw KQorICAgICAgICBnb3RvIGVuZDsKKworICAgIGlmICgocmV0ID0gcGFyc2VfYW5zd2VyKHMpKSA8 IDApCisgICAgICAgIGdvdG8gZW5kOworCisgICAgaWYgKChyZXQgPSB1ZHBfY29ubmVjdChzKSkg PCAwKQorICAgICAgICBnb3RvIGVuZDsKKworICAgIGlmICgocmV0ID0gaWNlX2R0bHNfaGFuZHNo YWtlKHMpKSA8IDApCisgICAgICAgIGdvdG8gZW5kOworCisgICAgaWYgKChyZXQgPSBzZXR1cF9z cnRwKHMpKSA8IDApCisgICAgICAgIGdvdG8gZW5kOworCisgICAgaWYgKChyZXQgPSBjcmVhdGVf cnRwX211eGVyKHMpKSA8IDApCisgICAgICAgIGdvdG8gZW5kOworCitlbmQ6CisgICAgaWYgKHJl dCA8IDAgJiYgd2hpcC0+c3RhdGUgPCBXSElQX1NUQVRFX0ZBSUxFRCkKKyAgICAgICAgd2hpcC0+ c3RhdGUgPSBXSElQX1NUQVRFX0ZBSUxFRDsKKyAgICBpZiAocmV0ID49IDAgJiYgd2hpcC0+c3Rh dGUgPj0gV0hJUF9TVEFURV9GQUlMRUQgJiYgd2hpcC0+ZHRsc19yZXQgPCAwKQorICAgICAgICBy ZXQgPSB3aGlwLT5kdGxzX3JldDsKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdo aXBfd3JpdGVfcGFja2V0KEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCkKK3sKKyAg ICBpbnQgcmV0OworICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRhOworICAgIEFW U3RyZWFtICpzdCA9IHMtPnN0cmVhbXNbcGt0LT5zdHJlYW1faW5kZXhdOworICAgIEFWRm9ybWF0 Q29udGV4dCAqcnRwX2N0eCA9IHN0LT5wcml2X2RhdGE7CisKKyAgICAvKiBUT0RPOiBTZW5kIGJp bmRpbmcgcmVxdWVzdCBldmVyeSAxcyBhcyBXZWJSVEMgaGVhcnRiZWF0LiAqLworCisgICAgLyoq CisgICAgICogUmVjZWl2ZSBwYWNrZXRzIGZyb20gdGhlIHNlcnZlciBzdWNoIGFzIElDRSBiaW5k aW5nIHJlcXVlc3RzLCBEVExTIG1lc3NhZ2VzLAorICAgICAqIGFuZCBSVENQIGxpa2UgUExJIHJl cXVlc3RzLCB0aGVuIHJlc3BvbmQgdG8gdGhlbS4KKyAgICAgKi8KKyAgICByZXQgPSBmZnVybF9y ZWFkKHdoaXAtPnVkcCwgd2hpcC0+YnVmLCBzaXplb2Yod2hpcC0+YnVmKSk7CisgICAgaWYgKHJl dCA+IDApIHsKKyAgICAgICAgaWYgKGlzX2R0bHNfcGFja2V0KHdoaXAtPmJ1ZiwgcmV0KSkgewor ICAgICAgICAgICAgaWYgKChyZXQgPSBmZnVybF93cml0ZSh3aGlwLT5kdGxzX3VjLCB3aGlwLT5i dWYsIHJldCkpIDwgMCkgeworICAgICAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJS T1IsICJXSElQOiBGYWlsZWQgdG8gaGFuZGxlIERUTFMgbWVzc2FnZVxuIik7CisgICAgICAgICAg ICAgICAgZ290byBlbmQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYg KHJldCAhPSBBVkVSUk9SKEVBR0FJTikpIHsKKyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19F UlJPUiwgIldISVA6IEZhaWxlZCB0byByZWFkIGZyb20gVURQIHNvY2tldFxuIik7CisgICAgICAg IGdvdG8gZW5kOworICAgIH0KKworICAgIGlmICh3aGlwLT5oMjY0X2FubmV4Yl9pbnNlcnRfc3Bz X3BwcyAmJiBzdC0+Y29kZWNwYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0gyNjQpIHsKKyAg ICAgICAgaWYgKChyZXQgPSBoMjY0X2FubmV4Yl9pbnNlcnRfc3BzX3BwcyhzLCBwa3QpKSA8IDAp IHsKKyAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBGYWlsZWQg dG8gaW5zZXJ0IFNQUy9QUFMgYmVmb3JlIElEUlxuIik7CisgICAgICAgICAgICBnb3RvIGVuZDsK KyAgICAgICAgfQorICAgIH0KKworICAgIHJldCA9IGZmX3dyaXRlX2NoYWluZWQocnRwX2N0eCwg MCwgcGt0LCBzLCAwKTsKKyAgICBpZiAocmV0IDwgMCkgeworICAgICAgICBpZiAocmV0ID09IEFW RVJST1IoRUlOVkFMKSkgeworICAgICAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19XQVJOSU5H LCAiV0hJUDogSWdub3JlIGZhaWxlZCB0byB3cml0ZSBwYWNrZXQ9JWRCLCByZXQ9JWRcbiIsIHBr dC0+c2l6ZSwgcmV0KTsKKyAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgIH0gZWxzZQorICAg ICAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IEZhaWxlZCB0byB3cml0 ZSBwYWNrZXQsIHNpemU9JWRcbiIsIHBrdC0+c2l6ZSk7CisgICAgICAgIGdvdG8gZW5kOworICAg IH0KKworZW5kOgorICAgIGlmIChyZXQgPCAwICYmIHdoaXAtPnN0YXRlIDwgV0hJUF9TVEFURV9G QUlMRUQpCisgICAgICAgIHdoaXAtPnN0YXRlID0gV0hJUF9TVEFURV9GQUlMRUQ7CisgICAgaWYg KHJldCA+PSAwICYmIHdoaXAtPnN0YXRlID49IFdISVBfU1RBVEVfRkFJTEVEICYmIHdoaXAtPmR0 bHNfcmV0IDwgMCkKKyAgICAgICAgcmV0ID0gd2hpcC0+ZHRsc19yZXQ7CisgICAgaWYgKHJldCA+ PSAwICYmIHdoaXAtPmR0bHNfY2xvc2VkKQorICAgICAgICByZXQgPSBBVkVSUk9SKEVJTyk7Cisg ICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGF2X2NvbGQgdm9pZCB3aGlwX2RlaW5pdChBVkZv cm1hdENvbnRleHQgKnMpCit7CisgICAgaW50IGksIHJldDsKKyAgICBXSElQQ29udGV4dCAqd2hp cCA9IHMtPnByaXZfZGF0YTsKKworICAgIHJldCA9IGRpc3Bvc2Vfc2Vzc2lvbihzKTsKKyAgICBp ZiAocmV0IDwgMCkKKyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19XQVJOSU5HLCAiV0hJUDog RmFpbGVkIHRvIGRpc3Bvc2UgcmVzb3VyY2UsIHJldD0lZFxuIiwgcmV0KTsKKworICAgIGZvciAo aSA9IDA7IGkgPCBzLT5uYl9zdHJlYW1zOyBpKyspIHsKKyAgICAgICAgQVZGb3JtYXRDb250ZXh0 KiBydHBfY3R4ID0gcy0+c3RyZWFtc1tpXS0+cHJpdl9kYXRhOworICAgICAgICBpZiAoIXJ0cF9j dHgpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBhdl93cml0ZV90cmFpbGVyKHJ0 cF9jdHgpOworICAgICAgICAvKioKKyAgICAgICAgICogS2VlcCBpbiBtaW5kIHRoYXQgaXQgaXMg bmVjZXNzYXJ5IHRvIGZyZWUgdGhlIGJ1ZmZlciBvZiBwYiBzaW5jZSB3ZSBhbGxvY2F0ZQorICAg ICAgICAgKiBpdCBhbmQgcGFzcyBpdCB0byBwYiB1c2luZyBhdmlvX2FsbG9jX2NvbnRleHQsIHdo aWxlIGF2aW9fY29udGV4dF9mcmVlIGRvZXMKKyAgICAgICAgICogbm90IHBlcmZvcm0gdGhpcyBh Y3Rpb24uCisgICAgICAgICAqLworICAgICAgICBhdl9mcmVlcCgmcnRwX2N0eC0+cGItPmJ1ZmZl cik7CisgICAgICAgIGF2aW9fY29udGV4dF9mcmVlKCZydHBfY3R4LT5wYik7CisgICAgICAgIGF2 Zm9ybWF0X2ZyZWVfY29udGV4dChydHBfY3R4KTsKKyAgICAgICAgcy0+c3RyZWFtc1tpXS0+cHJp dl9kYXRhID0gTlVMTDsKKyAgICB9CisKKyAgICBhdl9mcmVlcCgmd2hpcC0+c2RwX29mZmVyKTsK KyAgICBhdl9mcmVlcCgmd2hpcC0+c2RwX2Fuc3dlcik7CisgICAgYXZfZnJlZXAoJndoaXAtPndo aXBfcmVzb3VyY2VfdXJsKTsKKyAgICBhdl9mcmVlcCgmd2hpcC0+aWNlX3VmcmFnX3JlbW90ZSk7 CisgICAgYXZfZnJlZXAoJndoaXAtPmljZV9wd2RfcmVtb3RlKTsKKyAgICBhdl9mcmVlcCgmd2hp cC0+aWNlX3Byb3RvY29sKTsKKyAgICBhdl9mcmVlcCgmd2hpcC0+aWNlX2hvc3QpOworICAgIGF2 X2ZyZWVwKCZ3aGlwLT5hdXRob3JpemF0aW9uKTsKKyAgICBhdl9mcmVlcCgmd2hpcC0+Y2VydF9m aWxlKTsKKyAgICBhdl9mcmVlcCgmd2hpcC0+a2V5X2ZpbGUpOworICAgIGZmdXJsX2Nsb3NlcCgm d2hpcC0+dWRwKTsKKyAgICBmZl9zcnRwX2ZyZWUoJndoaXAtPnNydHBfYXVkaW9fc2VuZCk7Cisg ICAgZmZfc3J0cF9mcmVlKCZ3aGlwLT5zcnRwX3ZpZGVvX3NlbmQpOworICAgIGZmX3NydHBfZnJl ZSgmd2hpcC0+c3J0cF9ydGNwX3NlbmQpOworICAgIGZmX3NydHBfZnJlZSgmd2hpcC0+c3J0cF9y ZWN2KTsKKyAgICBmZnVybF9jbG9zZSh3aGlwLT5kdGxzX3VjKTsKK30KKworc3RhdGljIGludCB3 aGlwX2NoZWNrX2JpdHN0cmVhbShBVkZvcm1hdENvbnRleHQgKnMsIEFWU3RyZWFtICpzdCwgY29u c3QgQVZQYWNrZXQgKnBrdCkKK3sKKyAgICBpbnQgcmV0ID0gMSwgZXh0cmFkYXRhX2lzb20gPSAw OworICAgIHVpbnQ4X3QgKmIgPSBwa3QtPmRhdGE7CisgICAgV0hJUENvbnRleHQgKndoaXAgPSBz LT5wcml2X2RhdGE7CisKKyAgICBpZiAoc3QtPmNvZGVjcGFyLT5jb2RlY19pZCA9PSBBVl9DT0RF Q19JRF9IMjY0KSB7CisgICAgICAgIGV4dHJhZGF0YV9pc29tID0gc3QtPmNvZGVjcGFyLT5leHRy YWRhdGFfc2l6ZSA+IDAgJiYgc3QtPmNvZGVjcGFyLT5leHRyYWRhdGFbMF0gPT0gMTsKKyAgICAg ICAgaWYgKHBrdC0+c2l6ZSA+PSA1ICYmIEFWX1JCMzIoYikgIT0gMHgwMDAwMDAxICYmIChBVl9S QjI0KGIpICE9IDB4MDAwMDAxIHx8IGV4dHJhZGF0YV9pc29tKSkgeworICAgICAgICAgICAgcmV0 ID0gZmZfc3RyZWFtX2FkZF9iaXRzdHJlYW1fZmlsdGVyKHN0LCAiaDI2NF9tcDR0b2FubmV4YiIs IE5VTEwpOworICAgICAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19WRVJCT1NFLCAiV0hJUDog RW5hYmxlIEJTRiBoMjY0X21wNHRvYW5uZXhiLCBwYWNrZXQ9WyV4ICV4ICV4ICV4ICV4IC4uLl0s IGV4dHJhZGF0YV9pc29tPSVkXG4iLAorICAgICAgICAgICAgICAgIGJbMF0sIGJbMV0sIGJbMl0s IGJbM10sIGJbNF0sIGV4dHJhZGF0YV9pc29tKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg ICB3aGlwLT5oMjY0X2FubmV4Yl9pbnNlcnRfc3BzX3BwcyA9IDE7CisgICAgfQorCisgICAgcmV0 dXJuIHJldDsKK30KKworI2RlZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2YoV0hJUENvbnRleHQsIHgp CisjZGVmaW5lIERFQyBBVl9PUFRfRkxBR19ERUNPRElOR19QQVJBTQorc3RhdGljIGNvbnN0IEFW T3B0aW9uIG9wdGlvbnNbXSA9IHsKKyAgICB7ICJoYW5kc2hha2VfdGltZW91dCIsICAiVGltZW91 dCBpbiBtaWxsaXNlY29uZHMgZm9yIElDRSBhbmQgRFRMUyBoYW5kc2hha2UuIiwgICAgICBPRkZT RVQoaGFuZHNoYWtlX3RpbWVvdXQpLCAgQVZfT1BUX1RZUEVfSU5ULCAgICB7IC5pNjQgPSA1MDAw IH0sICAgIC0xLCBJTlRfTUFYLCBERUMgfSwKKyAgICB7ICJwa3Rfc2l6ZSIsICAgICAgICAgICAi VGhlIG1heGltdW0gc2l6ZSwgaW4gYnl0ZXMsIG9mIFJUUCBwYWNrZXRzIHRoYXQgc2VuZCBvdXQi LCBPRkZTRVQocGt0X3NpemUpLCAgICAgICAgICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7IC5pNjQg PSAxMjAwIH0sICAgIC0xLCBJTlRfTUFYLCBERUMgfSwKKyAgICB7ICJhdXRob3JpemF0aW9uIiwg ICAgICAiVGhlIG9wdGlvbmFsIEJlYXJlciB0b2tlbiBmb3IgV0hJUCBBdXRob3JpemF0aW9uIiwg ICAgICAgICBPRkZTRVQoYXV0aG9yaXphdGlvbiksICAgICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7 IC5zdHIgPSBOVUxMIH0sICAgICAwLCAgICAgICAwLCBERUMgfSwKKyAgICB7ICJjZXJ0X2ZpbGUi LCAgICAgICAgICAiVGhlIG9wdGlvbmFsIGNlcnRpZmljYXRlIGZpbGUgcGF0aCBmb3IgRFRMUyIs ICAgICAgICAgICAgICBPRkZTRVQoY2VydF9maWxlKSwgICAgICAgICAgQVZfT1BUX1RZUEVfU1RS SU5HLCB7IC5zdHIgPSBOVUxMIH0sICAgICAwLCAgICAgICAwLCBERUMgfSwKKyAgICB7ICJrZXlf ZmlsZSIsICAgICAgICAgICAiVGhlIG9wdGlvbmFsIHByaXZhdGUga2V5IGZpbGUgcGF0aCBmb3Ig RFRMUyIsICAgICAgICAgICAgICBPRkZTRVQoa2V5X2ZpbGUpLCAgICAgIEFWX09QVF9UWVBFX1NU UklORywgeyAuc3RyID0gTlVMTCB9LCAgICAgMCwgICAgICAgMCwgREVDIH0sCisgICAgeyBOVUxM IH0sCit9OworCitzdGF0aWMgY29uc3QgQVZDbGFzcyB3aGlwX211eGVyX2NsYXNzID0geworICAg IC5jbGFzc19uYW1lID0gIldISVAgbXV4ZXIiLAorICAgIC5pdGVtX25hbWUgID0gYXZfZGVmYXVs dF9pdGVtX25hbWUsCisgICAgLm9wdGlvbiAgICAgPSBvcHRpb25zLAorICAgIC52ZXJzaW9uICAg ID0gTElCQVZVVElMX1ZFUlNJT05fSU5ULAorfTsKKworY29uc3QgRkZPdXRwdXRGb3JtYXQgZmZf d2hpcF9tdXhlciA9IHsKKyAgICAucC5uYW1lICAgICAgICAgICAgID0gIndoaXAiLAorICAgIC5w LmxvbmdfbmFtZSAgICAgICAgPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgiV0hJUChXZWJSVEMtSFRU UCBpbmdlc3Rpb24gcHJvdG9jb2wpIG11eGVyIiksCisgICAgLnAuYXVkaW9fY29kZWMgICAgICA9 IEFWX0NPREVDX0lEX09QVVMsCisgICAgLnAudmlkZW9fY29kZWMgICAgICA9IEFWX0NPREVDX0lE X0gyNjQsCisgICAgLnAuZmxhZ3MgICAgICAgICAgICA9IEFWRk1UX0dMT0JBTEhFQURFUiB8IEFW Rk1UX05PRklMRSwKKyAgICAucC5wcml2X2NsYXNzICAgICAgID0gJndoaXBfbXV4ZXJfY2xhc3Ms CisgICAgLnByaXZfZGF0YV9zaXplICAgICA9IHNpemVvZihXSElQQ29udGV4dCksCisgICAgLmlu aXQgICAgICAgICAgICAgICA9IHdoaXBfaW5pdCwKKyAgICAud3JpdGVfcGFja2V0ICAgICAgID0g d2hpcF93cml0ZV9wYWNrZXQsCisgICAgLmRlaW5pdCAgICAgICAgICAgICA9IHdoaXBfZGVpbml0 LAorICAgIC5jaGVja19iaXRzdHJlYW0gICAgPSB3aGlwX2NoZWNrX2JpdHN0cmVhbSwKK307Ci0t IAoyLjQ5LjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6 Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmli ZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVn Lm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K