From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id iBX/DaWMjGjbhQEAWB0awg (envelope-from ) for ; Fri, 01 Aug 2025 05:45:09 -0400 Authentication-Results: simark.ca; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=O/g5dZUM; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 3509F1E102; Fri, 1 Aug 2025 05:45:09 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-10.1 required=5.0 tests=ARC_SIGNED,ARC_VALID, BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED, RCVD_IN_VALIDITY_RPBL,RCVD_IN_VALIDITY_SAFE autolearn=ham autolearn_force=no version=4.0.1 Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 2E47D1E089 for ; Fri, 1 Aug 2025 05:45:07 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id C01E3385840E for ; Fri, 1 Aug 2025 09:45:06 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C01E3385840E Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=O/g5dZUM Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) by sourceware.org (Postfix) with ESMTPS id D1A8D3858D20 for ; Fri, 1 Aug 2025 09:39:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D1A8D3858D20 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=intel.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org D1A8D3858D20 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=192.198.163.14 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1754041164; cv=none; b=NgPnonQ7plf56Z6zUSXblQHYjj+NJgx0R1t05sanBAIwGuPE+e4xWv5qVIGAm+dHd+oqahckXwXTeL40F6GAbRdMPbUuDZhaBAgng4qw4Q+aryPj+zedsaN0/o3W3Ao7YXPshwrgy76DqdGPBzaa4+EhUwscHSmLBp4CvUWEHQE= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1754041164; c=relaxed/simple; bh=uBR6/hArBUhOL64qkQNOx1k0BJDJnQSkbt8MtkgfwNg=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=j46y5nz94R8+3wLLvXFl42CDzNxzYTC9C49XWaMqFIxVgGEhVYRWG09jdyFZ1x54b8Ag05BgV24o/V8g6nYVGgSs3gWkSH0Tjxe0AfiBongMudEx231EZmNHRiNOvESDdlAcXWJCkYLISUTl6bxI+CEaDcvrXya/Z88gHbL5+C0= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D1A8D3858D20 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1754041164; x=1785577164; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=uBR6/hArBUhOL64qkQNOx1k0BJDJnQSkbt8MtkgfwNg=; b=O/g5dZUMjhyQOGAiFCGZBOcThoG0G1mPodT6nW5+AkxaCYP2p/dBm700 rmpM8kqesoizi1bDX4wA2WEreZOCDi6hyTE9VmIZobifqXQmTmK8mwGPq Rpz2dmwkTsDcYv1J1FhjHweTQGqtAbcz3Gbby6uceNEwytMd4mP6oEEAc IT1f6Rp6/JG4HiR9gFGzlxCO52vXtC1R0RmC5t2YWHWp/CVXATfgba+Y1 YoAsW+uyjPFrPgb98T+74BLnFJccSW/qqz1SFrjxoN+BQkYys54FqOy6C JRLb/+PIUaJFSVNXzj5mitn1lp/vqizlNih9/vrvKT1aY3fIZpQfy1ASJ g==; X-CSE-ConnectionGUID: Dsiw2dEaQCSJFPpq0wgEZg== X-CSE-MsgGUID: /elsYmqBRkOHQ0TIIkP5LQ== X-IronPort-AV: E=McAfee;i="6800,10657,11508"; a="56465233" X-IronPort-AV: E=Sophos;i="6.17,255,1747724400"; d="scan'208";a="56465233" Received: from fmviesa002.fm.intel.com ([10.60.135.142]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Aug 2025 02:39:23 -0700 X-CSE-ConnectionGUID: NgGwiNP7RxGtWyBourP29w== X-CSE-MsgGUID: c3kEy9S8SUWXGSWwoz4hgQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.17,255,1747724400"; d="scan'208";a="187196778" Received: from gkldtt-dev-004.igk.intel.com (HELO localhost) ([10.123.221.202]) by fmviesa002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Aug 2025 02:39:22 -0700 From: Tankut Baris Aktemur To: gdb-patches@sourceware.org, Markus Metzger Subject: [PATCH v3 07/44] gdb, intelgt: add the target-dependent definitions for the Intel GT architecture Date: Fri, 1 Aug 2025 11:37:09 +0200 Message-Id: <20250801-upstream-intelgt-mvp-v3-7-59ce0f87075b@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250801-upstream-intelgt-mvp-v3-0-59ce0f87075b@intel.com> References: <20250801-upstream-intelgt-mvp-v3-0-59ce0f87075b@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.2 Content-Transfer-Encoding: base64 X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org SW50cm9kdWNlIGdkYi9pbnRlbGd0LXRkZXAuYyBmb3IgdGhlIEludGVsIEdUIHRhcmdldC4gIFRo ZSB0YXJnZXQgaXMKZGVmaW5lZCBpbiBhIGZ1dHVyZSBwYXRjaCBhcyBhIGdkYnNlcnZlciBsb3cg dGFyZ2V0IGltcGxlbWVudGF0aW9uLgoKVW5saWtlLCBmb3IgZXhhbXBsZSwgWDg2LTY0LCBJbnRl bEdUIGRvZXMgbm90IGhhdmUgYSBkZWRpY2F0ZWQKYnJlYWtwb2ludCBpbnN0cnVjdGlvbi4gIElu c3RlYWQsIGl0IGhhcyBhIGJyZWFrcG9pbnQgYml0IGluIGVhY2gKaW5zdHJ1Y3Rpb24uICBIZW5j ZSwgYW55IGluc3RydWN0aW9uIGNhbiBiZSB1c2VkIGFzIGEgYnJlYWtwb2ludAppbnN0cnVjdGlv bi4KCkl0IGZ1cnRoZXIgc3VwcG9ydHMgaWdub3JpbmcgYnJlYWtwb2ludHMgZm9yIHN0ZXBwaW5n IG92ZXIgb3IgcmVzdW1pbmcKZnJvbSBhIGJyZWFrcG9pbnQuICBUaGlzIG9ubHkgd29ya3MsIG9m IGNvdXJzZSwgaWYgd2UgdXNlIGJyZWFrcG9pbnQKYml0cyBpbnNpZGUgdGhlIG9yaWdpbmFsIGlu c3RydWN0aW9uIHJhdGhlciB0aGFuIHJlcGxhY2luZyBpdCB3aXRoIGEKZml4ZWQgYnJlYWtwb2lu dCBpbnN0cnVjdGlvbi4KCkFkZCBnZGJhcmNoIG1ldGhvZHMgZm9yIGluc2VydGluZyBhbmQgcmVt b3ZpbmcgbWVtb3J5IGJyZWFrcG9pbnRzIGJ5CnNldHRpbmcgYW5kIGNsZWFyaW5nIHRob3NlIGJy ZWFrcG9pbnQgYml0cy4KCldlIGRlZmluZSBvbmUgcHNldWRvLXJlZ2lzdGVyLCAkZnJhbWVkZXNj LCB0aGF0IHByb3ZpZGVzIGEgdHlwZSBhbGlhcwpmb3IgdGhlIGZyYW1lIGRlc2NyaXB0b3IgcmVn aXN0ZXIgaW4gR1JGLCByZXByZXNlbnRpbmcgaXQgYXMgYSBzdHJ1Y3QuCgpUaGUgdmFsdWUgb2Yg dGhlICRwYyByZWdpc3RlciBpcyB0aGUgJGlwIHJlZ2lzdGVyLCB3aGljaCBpcyBwcm92aWRlZApp biAkY3IwLjIsIG9mZnNldCBieSAkaXNhYmFzZS4KCkEgdHJhbnNsYXRpb24gZnVuY3Rpb24gdG8g bWFwIHRoZSBkZXZpY2VfaWQgdG8gYSBnZW5fdmVyc2lvbiBpcwpwcm92aWRlZC4gIFRoaXMgd2ls bCBiZSB1c2VmdWwgaW4gdmFyaW91cyBwbGFjZXMsIGluIHBhcnRpY3VsYXIgdG8KZ2VuZXJhdGUg dGhlIGNvcnJlY3QgZGlzYXNzZW1ibHkuCgpDby1hdXRob3JlZC1ieTogTWFya3VzIE1ldHpnZXIg PG1hcmt1cy50Lm1ldHpnZXJAaW50ZWwuY29tPgpDby1hdXRob3JlZC1ieTogTmF0YWxpYSBTYWlh cG92YSA8bmF0YWxpYS5zYWlhcG92YUBpbnRlbC5jb20+CkNvLWF1dGhvcmVkLWJ5OiBNaWhhaWxz IFN0cmFzdW5zIDxtaWhhaWxzLnN0cmFzdW5zQGludGVsLmNvbT4KQ28tYXV0aG9yZWQtYnk6IE1v aGFtZWQgQm91aGFvdWVsIDxtb2hhbWVkLmJvdWhhb3VlbEBpbnRlbC5jb20+Ci0tLQogZ2RiL01h a2VmaWxlLmluICAgICB8ICAgMSArCiBnZGIvY29uZmlndXJlLnRndCAgIHwgICA1ICsKIGdkYi9p bnRlbGd0LXRkZXAuYyAgfCA4NzUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwogZ2RiL3NlbGZ0ZXN0LWFyY2guYyB8ICAgNiArLQogNCBmaWxlcyBj aGFuZ2VkLCA4ODYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL2dk Yi9NYWtlZmlsZS5pbiBiL2dkYi9NYWtlZmlsZS5pbgppbmRleCA4YWFjNzFkNzA1Nzk4MGE0NWUz Y2I4OWJlMmM1ODMyMjM3NjJhMWM3Li5hNmYzMmI1YzAyODc3NTkyZmYzMDcyYTQzMWI3ZTIyOWUw MzFlYmRlIDEwMDY0NAotLS0gYS9nZGIvTWFrZWZpbGUuaW4KKysrIGIvZ2RiL01ha2VmaWxlLmlu CkBAIC03NjIsNiArNzYyLDcgQEAgQUxMXzY0X1RBUkdFVF9PQlMgPSBcCiAJaWE2NC1saW51eC10 ZGVwLm8gXAogCWlhNjQtdGRlcC5vIFwKIAlpYTY0LXZtcy10ZGVwLm8gXAorCWludGVsZ3QtdGRl cC5vIFwKIAlsb29uZ2FyY2gtbGludXgtdGRlcC5vIFwKIAlsb29uZ2FyY2gtdGRlcC5vIFwKIAlt aXBzLWZic2QtdGRlcC5vIFwKZGlmZiAtLWdpdCBhL2dkYi9jb25maWd1cmUudGd0IGIvZ2RiL2Nv bmZpZ3VyZS50Z3QKaW5kZXggMjU1Yzc3ZTlmOGMwZDY0MmZhMTc3M2I1NGFlN2RmYWFmMjVlNmVm NS4uYWEwMzM2ZDg3NGUyOTBkY2I0ZWZlZGZhNGFmNDMyYzFhMTUyOTNjNiAxMDA2NDQKLS0tIGEv Z2RiL2NvbmZpZ3VyZS50Z3QKKysrIGIvZ2RiL2NvbmZpZ3VyZS50Z3QKQEAgLTM1Nyw2ICszNTcs MTEgQEAgaWE2NC0qLSp2bXMqKQogCWdkYl90YXJnZXRfb2JzPSJpYTY0LXZtcy10ZGVwLm8iCiAJ OzsKIAoraW50ZWxndC0qLWVsZikKKwkjIFRhcmdldDogSW50ZWwoUikgR3JhcGhpY3MgVGVjaG5v bG9neSBncmFwaGljcyBwcm9jZXNzb3IKKwlnZGJfdGFyZ2V0X29icz0iaW50ZWxndC10ZGVwLm8g YXJjaC9pbnRlbGd0Lm8iCisJOzsKKwogaXEyMDAwLSotKikKIAlnZGJfdGFyZ2V0X29icz0iaXEy MDAwLXRkZXAubyIKIAk7OwpkaWZmIC0tZ2l0IGEvZ2RiL2ludGVsZ3QtdGRlcC5jIGIvZ2RiL2lu dGVsZ3QtdGRlcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM5MTk5NDdmZWQ0NGM5ZTkzOWJlZjZjMTRiODU0YWU0 MTZhYjdjNDEKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvaW50ZWxndC10ZGVwLmMKQEAgLTAsMCAr MSw4NzUgQEAKKy8qIFRhcmdldC1kZXBlbmRlbnQgY29kZSBmb3IgdGhlIEludGVsKFIpIEdyYXBo aWNzIFRlY2hub2xvZ3kgYXJjaGl0ZWN0dXJlLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMTktMjAy NSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQg b2YgR0RCLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisg ICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3Qs IHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSAiYXJj aC11dGlscy5oIgorI2luY2x1ZGUgImFyY2gvaW50ZWxndC5oIgorI2luY2x1ZGUgImNsaS9jbGkt Y21kcy5oIgorI2luY2x1ZGUgImR3YXJmMi9mcmFtZS5oIgorI2luY2x1ZGUgImZyYW1lLXVud2lu ZC5oIgorI2luY2x1ZGUgImdkYnN1cHBvcnQvZ2RiX29ic3RhY2suaCIKKyNpbmNsdWRlICJnZGJ0 eXBlcy5oIgorI2luY2x1ZGUgInRhcmdldC5oIgorI2luY2x1ZGUgInRhcmdldC1kZXNjcmlwdGlv bnMuaCIKKyNpbmNsdWRlICJ2YWx1ZS5oIgorI2luY2x1ZGUgImdkYnRocmVhZC5oIgorI2luY2x1 ZGUgImluZmVyaW9yLmgiCisjaW5jbHVkZSAidXNlci1yZWdzLmgiCisjaW5jbHVkZSA8YWxnb3Jp dGhtPgorCisvKiBHbG9iYWwgZGVidWcgZmxhZy4gICovCitzdGF0aWMgYm9vbCBpbnRlbGd0X2Rl YnVnID0gZmFsc2U7CisKKy8qIFByaW50IGFuICJpbnRlbGd0IiBkZWJ1ZyBzdGF0ZW1lbnQuICAq LworCisjZGVmaW5lIGludGVsZ3RfZGVidWdfcHJpbnRmKGZtdCwgLi4uKSBcCisgIGRlYnVnX3By ZWZpeGVkX3ByaW50Zl9jb25kIChpbnRlbGd0X2RlYnVnLCAiaW50ZWxndCIsIGZtdCwgIyNfX1ZB X0FSR1NfXykKKworLyogUmVnbnVtIHBhaXIgZGVzY3JpYmluZyB0aGUgYXNzaWduZWQgcmVnbnVt IHJhbmdlIGZvciBhIHNpbmdsZQorICAgcmVnc2V0LiAgU1RBUlQgaXMgaW5jbHVzaXZlLCBFTkQg aXMgZXhjbHVzaXZlLiAgKi8KKworc3RydWN0IHJlZ251bV9yYW5nZQoreworICBpbnQgc3RhcnQ7 CisgIGludCBlbmQ7Cit9OworCisvKiBEYXRhIHNwZWNpZmljIGZvciB0aGlzIGFyY2hpdGVjdHVy ZS4gICovCisKK3N0cnVjdCBpbnRlbGd0X2dkYmFyY2hfdGRlcCA6IGdkYmFyY2hfdGRlcF9iYXNl Cit7CisgIC8qICRyMCBHUkYgcmVnaXN0ZXIgbnVtYmVyLiAgKi8KKyAgaW50IHIwX3JlZ251bSA9 IC0xOworCisgIC8qICRjZSByZWdpc3RlciBudW1iZXIgaW4gdGhlIHJlZ2NhY2hlLiAgKi8KKyAg aW50IGNlX3JlZ251bSA9IC0xOworCisgIC8qIFJlZ2lzdGVyIG51bWJlciBmb3IgdGhlIEdSRiBj b250YWluaW5nIGZ1bmN0aW9uIHJldHVybiB2YWx1ZS4gICovCisgIGludCByZXR2YWxfcmVnbnVt ID0gLTE7CisKKyAgLyogUmVnaXN0ZXIgbnVtYmVyIGZvciB0aGUgY29udHJvbCByZWdpc3Rlci4g ICovCisgIGludCBjcjBfcmVnbnVtID0gLTE7CisKKyAgLyogUmVnaXN0ZXIgbnVtYmVyIGZvciB0 aGUgc3RhdGUgcmVnaXN0ZXIuICAqLworICBpbnQgc3IwX3JlZ251bSA9IC0xOworCisgIC8qIFJl Z2lzdGVyIG51bWJlciBmb3IgdGhlIGluc3RydWN0aW9uIGJhc2UgdmlydHVhbCByZWdpc3Rlci4g ICovCisgIGludCBpc2FiYXNlX3JlZ251bSA9IC0xOworCisgIC8qIFJlZ2lzdGVyIG51bWJlciBm b3IgdGhlIGdlbmVyYWwgc3RhdGUgYmFzZSBTQkEgcmVnaXN0ZXIuICAqLworICBpbnQgZ2Vuc3Ri YXNlX3JlZ251bSA9IC0xOworCisgIC8qIFJlZ2lzdGVyIG51bWJlciBmb3IgdGhlIERCRzAgcmVn aXN0ZXIuICAqLworICBpbnQgZGJnMF9yZWdudW0gPSAtMTsKKworICAvKiBBc3NpZ25lZCByZWdu dW0gcmFuZ2VzIGZvciBEV0FSRiByZWdzZXRzLiAgKi8KKyAgcmVnbnVtX3JhbmdlIHJlZ3NldF9y YW5nZXNbaW50ZWxndDo6UkVHU0VUX0NPVU5UXTsKKworICAvKiBFbmFibGVkIHBzZXVkby1yZWdp c3RlcnMgZm9yIHRoZSBjdXJyZW50IHRhcmdldCBkZXNjcmlwdGlvbi4gICovCisgIHN0ZDo6dmVj dG9yPHN0ZDo6c3RyaW5nPiBlbmFibGVkX3BzZXVkb19yZWdzOworCisgIC8qIENhY2hlZCAkZnJh bWVkZXNjIHBzZXVkby1yZWdpc3RlciB0eXBlLiAgKi8KKyAgdHlwZSAqZnJhbWVkZXNjX3R5cGUg PSBudWxscHRyOworCisgIC8qIEluaXRpYWxpemUgcmFuZ2VzIHRvIC0xIGFzICJub3QteWV0LXNl dCIgaW5kaWNhdG9yLiAgKi8KKyAgaW50ZWxndF9nZGJhcmNoX3RkZXAgKCkKKyAgeworICAgIG1l bXNldCAoJnJlZ3NldF9yYW5nZXMsIC0xLCBzaXplb2YgcmVnc2V0X3Jhbmdlcyk7CisgIH0KKwor ICAvKiBSZXR1cm4gcmVnbnVtIHdoZXJlIGZyYW1lIGRlc2NyaXB0b3JzIGFyZSBzdG9yZWQuICAq LworICBpbnQgZnJhbWVkZXNjX2Jhc2VfcmVnbnVtICgpCisgIHsKKyAgICAvKiBGb3IgRU1fSU5U RUxHVCBmcmFtZSBkZXNjcmlwdG9ycyBhcmUgc3RvcmVkIGF0IE1BWF9HUkYgLSAxLiAgKi8KKyAg ICBnZGJfYXNzZXJ0IChyZWdzZXRfcmFuZ2VzW2ludGVsZ3Q6OlJFR1NFVF9HUkZdLmVuZCA+IDEp OworICAgIHJldHVybiByZWdzZXRfcmFuZ2VzW2ludGVsZ3Q6OlJFR1NFVF9HUkZdLmVuZCAtIDE7 CisgIH0KK307CisKKy8qIFBlci1pbmZlcmlvciBjYWNoZWQgZGF0YSBmb3IgdGhlIEludGVsZ3Qg dGFyZ2V0LiAgKi8KKworc3RydWN0IGludGVsZ3RfaW5mZXJpb3JfZGF0YQoreworICAvKiBEZXZp Y2UgdGFyZ2V0IGlkLiAgKi8KKyAgdWludDMyX3QgZGV2aWNlX2lkID0gMHU7Cit9OworCitzdGF0 aWMgY29uc3QgcmVnaXN0cnk8aW5mZXJpb3I+OjprZXk8aW50ZWxndF9pbmZlcmlvcl9kYXRhPgor ICBpbnRlbGd0X2luZmVyaW9yX2RhdGFfaGFuZGxlOworCisvKiBGZXRjaCB0aGUgcGVyLWluZmVy aW9yIGRhdGEuICAqLworCitzdGF0aWMgaW50ZWxndF9pbmZlcmlvcl9kYXRhICoKK2dldF9pbnRl bGd0X2luZmVyaW9yX2RhdGEgKGluZmVyaW9yICppbmYpCit7CisgIGludGVsZ3RfaW5mZXJpb3Jf ZGF0YSAqaW5mX2RhdGEgPSBpbnRlbGd0X2luZmVyaW9yX2RhdGFfaGFuZGxlLmdldCAoaW5mKTsK KyAgaWYgKGluZl9kYXRhID09IG51bGxwdHIpCisgICAgaW5mX2RhdGEgPSBpbnRlbGd0X2luZmVy aW9yX2RhdGFfaGFuZGxlLmVtcGxhY2UgKGluZik7CisKKyAgcmV0dXJuIGluZl9kYXRhOworfQor CisvKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmV0dXJuIHRoZSBkZXZpY2UgaWQgdXNpbmcgR0RCQVJD SC4gICovCisKK3N0YXRpYyB1aW50MzJfdAorZ2V0X2RldmljZV9pZCAoZ2RiYXJjaCAqZ2RiYXJj aCkKK3sKKyAgY29uc3QgdGFyZ2V0X2Rlc2MgKnRkZXNjID0gZ2RiYXJjaF90YXJnZXRfZGVzYyAo Z2RiYXJjaCk7CisgIGNvbnN0IHRkZXNjX2RldmljZSAqZGV2aWNlX2luZm8gPSB0ZGVzY19kZXZp Y2VfaW5mbyAodGRlc2MpOworICBpZiAoIWRldmljZV9pbmZvLT50YXJnZXRfaWQuaGFzX3ZhbHVl ICgpKQorICAgIGVycm9yIChfKCJBIHRhcmdldCBpZCBmb3IgdGhlIGRldmljZSBpcyByZXF1aXJl ZC4iKSk7CisKKyAgcmV0dXJuICpkZXZpY2VfaW5mby0+dGFyZ2V0X2lkOworfQorCisvKiBIZWxw ZXIgZnVuY3Rpb24gdG8gcmV0dXJuIHRoZSBkZXZpY2UgaWQgdXNpbmcgdGhlIGluZmVyaW9yLiAg Ki8KKworc3RhdGljIHVpbnQzMl90CitnZXRfZGV2aWNlX2lkIChpbmZlcmlvciAqaW5mZXJpb3Ip Cit7CisgIGludGVsZ3RfaW5mZXJpb3JfZGF0YSAqaW5mX2RhdGEgPSBnZXRfaW50ZWxndF9pbmZl cmlvcl9kYXRhIChpbmZlcmlvcik7CisgIGlmIChpbmZfZGF0YS0+ZGV2aWNlX2lkID09IDB1KQor ICAgIGluZl9kYXRhLT5kZXZpY2VfaWQgPSBnZXRfZGV2aWNlX2lkIChpbmZlcmlvci0+YXJjaCAo KSk7CisKKyAgcmV0dXJuIGluZl9kYXRhLT5kZXZpY2VfaWQ7Cit9CisKKy8qIFJlYWQgcGFydCBv ZiBSRUdOVU0gYXQgT0ZGU0VUIGludG8gQlVGRkVSLiAgVGhlIGxlbmd0aCBvZiBkYXRhIHRvCisg ICByZWFkIGlzIFNJWkUuICBDb25zaWRlciB1c2luZyB0aGlzIGhlbHBlciBmdW5jdGlvbiB3aGVu IHJlYWRpbmcKKyAgIHN1YnJlZ2lzdGVycyBvZiBDUjAsIFNSMCwgYW5kIFIwLiAgKi8KKworc3Rh dGljIHZvaWQKK2ludGVsZ3RfcmVhZF9yZWdpc3Rlcl9wYXJ0IChyZWFkYWJsZV9yZWdjYWNoZSAq cmVnY2FjaGUsIGludCByZWdudW0sCisJCQkgICAgc2l6ZV90IG9mZnNldCwKKwkJCSAgICBnZGI6 OmFycmF5X3ZpZXc8Z2RiX2J5dGU+IGJ1ZmZlciwKKwkJCSAgICBjb25zdCBjaGFyICplcnJvcl9t ZXNzYWdlKQoreworICBpZiAocmVnbnVtID09IC0xKQorICAgIGVycm9yIChfKCIlcyAgVW5leHBl Y3RlZCByZWcgbnVtICctMScuIiksIGVycm9yX21lc3NhZ2UpOworCisgIGdkYmFyY2ggKmFyY2gg PSByZWdjYWNoZS0+YXJjaCAoKTsKKyAgY29uc3QgY2hhciAqcmVnbmFtZSA9IGdkYmFyY2hfcmVn aXN0ZXJfbmFtZSAoYXJjaCwgcmVnbnVtKTsKKyAgaW50IHJlZ3NpemUgPSByZWdpc3Rlcl9zaXpl IChhcmNoLCByZWdudW0pOworCisgIGlmIChvZmZzZXQgKyBidWZmZXIuc2l6ZSAoKSA+IHJlZ3Np emUpCisgICAgZXJyb3IgKF8oIiVzICAlc1slenU6JXp1XSBpcyBvdXRzaWRlIHRoZSByYW5nZSBv ZiAlc1slZDowXS4iKSwKKwkgICBlcnJvcl9tZXNzYWdlLCByZWduYW1lLCAob2Zmc2V0ICsgYnVm ZmVyLnNpemUgKCkgLSAxKSwgb2Zmc2V0LAorCSAgIHJlZ25hbWUsIChyZWdzaXplIC0gMSkpOwor CisgIHJlZ2lzdGVyX3N0YXR1cyByZWdfc3RhdHVzCisgICAgPSByZWdjYWNoZS0+Y29va2VkX3Jl YWRfcGFydCAocmVnbnVtLCBvZmZzZXQsIGJ1ZmZlcik7CisKKyAgaWYgKHJlZ19zdGF0dXMgPT0g UkVHX1VOQVZBSUxBQkxFKQorICAgIHRocm93X2Vycm9yIChOT1RfQVZBSUxBQkxFX0VSUk9SLAor CQkgXygiJXMgIFJlZ2lzdGVyICVzICglZCkgaXMgbm90IGF2YWlsYWJsZS4iKSwKKwkJIGVycm9y X21lc3NhZ2UsIHJlZ25hbWUsIHJlZ251bSk7CisKKyAgaWYgKHJlZ19zdGF0dXMgPT0gUkVHX1VO S05PV04pCisgICAgZXJyb3IgKF8oIiVzICBSZWdpc3RlciAlcyAoJWQpIGlzIHVua25vd24uIiks IGVycm9yX21lc3NhZ2UsCisJICAgcmVnbmFtZSwgcmVnbnVtKTsKK30KKworLyogVXRpbGl0eSBm dW5jdGlvbiB0byBsb29rIHVwIHRoZSBwc2V1ZG8tcmVnaXN0ZXIgbnVtYmVyIGJ5IG5hbWUuICBF eGFjdAorICAgYW1vdW50IG9mIHBzZXVkby1yZWdpc3RlcnMgbWF5IGRpZmZlciBhbmQgdGh1cyBm aXhlZCBjb25zdGFudHMgY2FuJ3QgYmUKKyAgIHVzZWQgZm9yIHRoaXMuICAqLworCitzdGF0aWMg aW50CitpbnRlbGd0X3BzZXVkb19yZWdpc3Rlcl9udW0gKGdkYmFyY2ggKmFyY2gsIGNvbnN0IGNo YXIgKm5hbWUpCit7CisgIGludGVsZ3RfZ2RiYXJjaF90ZGVwICpkYXRhID0gZ2RiYXJjaF90ZGVw PGludGVsZ3RfZ2RiYXJjaF90ZGVwPiAoYXJjaCk7CisgIGF1dG8gaXRlciA9IHN0ZDo6ZmluZCAo ZGF0YS0+ZW5hYmxlZF9wc2V1ZG9fcmVncy5iZWdpbiAoKSwKKwkJCSBkYXRhLT5lbmFibGVkX3Bz ZXVkb19yZWdzLmVuZCAoKSwgbmFtZSk7CisgIGdkYl9hc3NlcnQgKGl0ZXIgIT0gZGF0YS0+ZW5h YmxlZF9wc2V1ZG9fcmVncy5lbmQgKCkpOworICByZXR1cm4gZ2RiYXJjaF9udW1fcmVncyAoYXJj aCkgKyAoaXRlciAtIGRhdGEtPmVuYWJsZWRfcHNldWRvX3JlZ3MuYmVnaW4gKCkpOworfQorCisv KiBDb252ZXJ0IGEgRFdBUkYgcmVnaXN0ZXIgbnVtYmVyIHRvIGEgR0RCIHJlZ2lzdGVyIG51bWJl ci4gIFRoaXMKKyAgIGZ1bmN0aW9uIHJlcXVpcmVzIHRoZSByZWdpc3RlciBsaXN0aW5nIGluIHRo ZSB0YXJnZXQgZGVzY3JpcHRpb24gdG8KKyAgIGJlIGluIHRoZSBzYW1lIG9yZGVyIGluIGVhY2gg cmVnc2V0IGFzIHRoZSBpbnRlbmRlZCBEV0FSRiBudW1iZXJpbmcKKyAgIG9yZGVyLiAgQ3VycmVu dGx5IHRoaXMgYWx3YXlzIGhvbGRzIHRydWUgd2hlbiBnZGJzZXJ2ZXIgZ2VuZXJhdGVzCisgICB0 aGUgdGFyZ2V0IGRlc2NyaXB0aW9uLiAgKi8KKworc3RhdGljIGludAoraW50ZWxndF9kd2FyZl9y ZWdfdG9fcmVnbnVtIChnZGJhcmNoICpnZGJhcmNoLCBpbnQgbnVtKQoreworICBjb25zdGV4cHIg aW50IGlwID0gMDsKKyAgY29uc3RleHByIGludCBjZSA9IDE7CisKKyAgLyogUmVnaXN0ZXIgc2V0 cyBmb2xsb3cgdGhpcyBmb3JtYXQ6IFtTVEFSVCwgRU5EKSwgd2hlcmUgU1RBUlQgaXMKKyAgICAg aW5jbHVzaXZlIGFuZCBFTkQgaXMgZXhjbHVzaXZlLiAgKi8KKyAgY29uc3RleHByIHJlZ251bV9y YW5nZSBkd2FyZl9udW1zW2ludGVsZ3Q6OlJFR1NFVF9DT1VOVF0gPSB7CisgICAgW2ludGVsZ3Q6 OlJFR1NFVF9TQkFdID0geyA1LCAxMiB9LAorICAgIFtpbnRlbGd0OjpSRUdTRVRfR1JGXSA9IHsg MTYsIDI3MiB9LAorICAgIFtpbnRlbGd0OjpSRUdTRVRfQUREUl0gPSB7IDI3MiwgMjg4IH0sCisg ICAgW2ludGVsZ3Q6OlJFR1NFVF9GTEFHXSA9IHsgMjg4LCAzMDQgfSwKKyAgICBbaW50ZWxndDo6 UkVHU0VUX0FDQ10gPSB7IDMwNCwgMzIwIH0sCisgICAgW2ludGVsZ3Q6OlJFR1NFVF9NTUVdID0g eyAzMjAsIDMzNiB9LAorICB9OworCisgIC8qIE51bWJlciBvZiBTQkEgcmVnaXN0ZXJzLiAgKi8K KyAgY29uc3RleHByIHNpemVfdCBzYmFfZHdhcmZfbGVuID0gZHdhcmZfbnVtc1tpbnRlbGd0OjpS RUdTRVRfU0JBXS5lbmQKKyAgICAtIGR3YXJmX251bXNbaW50ZWxndDo6UkVHU0VUX1NCQV0uc3Rh cnQ7CisKKyAgLyogTWFwIHRoZSBEV0FSRiByZWdpc3RlciBudW1iZXJzIG9mIFNCQSByZWdpc3Rl cnMgdG8gdGhlaXIgbmFtZXMuCisgICAgIEJhc2UgbnVtYmVyIGlzIGR3YXJmX251bXNbaW50ZWxn dDo6UkVHU0VUX1NCQV0uc3RhcnQuICAqLworICBjb25zdGV4cHIgY29uc3QgY2hhciogc2JhX2R3 YXJmX3JlZ19vcmRlcltzYmFfZHdhcmZfbGVuXSB7CisgICAgImJ0YmFzZSIsCisgICAgInNjcmJh c2UiLAorICAgICJnZW5zdGJhc2UiLAorICAgICJzdXN0YmFzZSIsCisgICAgImJsc3VzdGJhc2Ui LAorICAgICJibHNhc3RiYXNlIiwKKyAgICAic2NyYmFzZTIiCisgIH07CisKKyAgaW50ZWxndF9n ZGJhcmNoX3RkZXAgKmRhdGEKKyAgICA9IGdkYmFyY2hfdGRlcDxpbnRlbGd0X2dkYmFyY2hfdGRl cD4gKGdkYmFyY2gpOworCisgIGlmIChudW0gPT0gaXApCisgICAgcmV0dXJuIGludGVsZ3RfcHNl dWRvX3JlZ2lzdGVyX251bSAoZ2RiYXJjaCwgImlwIik7CisgIGlmIChudW0gPT0gY2UpCisgICAg cmV0dXJuIGRhdGEtPmNlX3JlZ251bTsKKworICBmb3IgKGludCByZWdzZXQgPSAwOyByZWdzZXQg PCBpbnRlbGd0OjpSRUdTRVRfQ09VTlQ7ICsrcmVnc2V0KQorICAgIGlmIChudW0gPj0gZHdhcmZf bnVtc1tyZWdzZXRdLnN0YXJ0ICYmIG51bSA8IGR3YXJmX251bXNbcmVnc2V0XS5lbmQpCisgICAg ICB7CisJaWYgKHJlZ3NldCA9PSBpbnRlbGd0OjpSRUdTRVRfU0JBKQorCSAgeworCSAgICAvKiBG b3IgU0JBIHJlZ2lzdGVycyB3ZSBmaXJzdCBmaW5kIG91dCB0aGUgbmFtZSBvZiB0aGUKKwkgICAg ICAgcmVnaXN0ZXIgb3V0IG9mIERXQVJGIHJlZ2lzdGVyIG51bWJlciBhbmQgdGhlbiBmaW5kIHRo ZQorCSAgICAgICByZWdpc3RlciBudW1iZXIgY29ycmVzcG9uZGluZyB0byB0aGUgbmFtZS4gICov CisJICAgIGludCBzYmFfbnVtID0gbnVtIC0gZHdhcmZfbnVtc1tpbnRlbGd0OjpSRUdTRVRfU0JB XS5zdGFydDsKKwkgICAgY29uc3QgY2hhciogbmFtZSA9IHNiYV9kd2FyZl9yZWdfb3JkZXIgW3Ni YV9udW1dOworCisJICAgIHJldHVybiB1c2VyX3JlZ19tYXBfbmFtZV90b19yZWdudW0gKGdkYmFy Y2gsIG5hbWUsIC0xKTsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIGludCBjYW5kaWRhdGUgPSBk YXRhLT5yZWdzZXRfcmFuZ2VzW3JlZ3NldF0uc3RhcnQgKyBudW0KKwkgICAgICAtIGR3YXJmX251 bXNbcmVnc2V0XS5zdGFydDsKKworCSAgICBpZiAoY2FuZGlkYXRlIDwgZGF0YS0+cmVnc2V0X3Jh bmdlc1tyZWdzZXRdLmVuZCkKKwkgICAgICByZXR1cm4gY2FuZGlkYXRlOworCSAgfQorICAgICAg fQorCisgIHJldHVybiAtMTsKK30KKworLyogUmV0dXJuIHRoZSBQQyBvZiB0aGUgZmlyc3QgcmVh bCBpbnN0cnVjdGlvbi4gICovCisKK3N0YXRpYyBDT1JFX0FERFIKK2ludGVsZ3Rfc2tpcF9wcm9s b2d1ZSAoZ2RiYXJjaCAqZ2RiYXJjaCwgQ09SRV9BRERSIHN0YXJ0X3BjKQoreworICBpbnRlbGd0 X2RlYnVnX3ByaW50ZiAoInN0YXJ0X3BjOiAlcyIsIHBhZGRyZXNzIChnZGJhcmNoLCBzdGFydF9w YykpOworICBDT1JFX0FERFIgZnVuY19hZGRyOworCisgIGlmIChmaW5kX3BjX3BhcnRpYWxfZnVu Y3Rpb24gKHN0YXJ0X3BjLCBudWxscHRyLCAmZnVuY19hZGRyLCBudWxscHRyKSkKKyAgICB7Cisg ICAgICBDT1JFX0FERFIgcG9zdF9wcm9sb2d1ZV9wYworICAgICAgID0gc2tpcF9wcm9sb2d1ZV91 c2luZ19zYWwgKGdkYmFyY2gsIGZ1bmNfYWRkcik7CisKKyAgICAgIGludGVsZ3RfZGVidWdfcHJp bnRmICgicG9zdCBwcm9sb2d1ZSBwYzogJXMiLAorCQkJICAgIHBhZGRyZXNzIChnZGJhcmNoLCBw b3N0X3Byb2xvZ3VlX3BjKSk7CisKKyAgICAgIGlmIChwb3N0X3Byb2xvZ3VlX3BjICE9IDApCisJ cmV0dXJuIHBvc3RfcHJvbG9ndWVfcGM7CisgICAgfQorCisgIC8qIENvdWxkIG5vdCBmaW5kIHRo ZSBlbmQgb2YgcHJvbG9ndWUgdXNpbmcgU0FMLiAgKi8KKyAgcmV0dXJuIHN0YXJ0X3BjOworfQor CisvKiBJbXBsZW1lbnRhdGlvbiBvZiBnZGJhcmNoJ3MgcmV0dXJuX3ZhbHVlIG1ldGhvZC4gICov CisKK3N0YXRpYyBlbnVtIHJldHVybl92YWx1ZV9jb252ZW50aW9uCitpbnRlbGd0X3JldHVybl92 YWx1ZV9hc192YWx1ZSAoZ2RiYXJjaCAqZ2RiYXJjaCwgdmFsdWUgKmZ1bmN0aW9uLAorCQkJICAg ICAgIHR5cGUgKnZhbHR5cGUsIHJlZ2NhY2hlICpyZWdjYWNoZSwKKwkJCSAgICAgICB2YWx1ZSAq KnJlYWRfdmFsdWUsIGNvbnN0IGdkYl9ieXRlICp3cml0ZWJ1ZikKK3sKKyAgZ2RiX2Fzc2VydF9u b3RfcmVhY2hlZCAoImludGVsZ3RfcmV0dXJuX3ZhbHVlX2FzX3ZhbHVlIGlzIHRvIGJlICIKKwkJ CSAgImltcGxlbWVudGVkIGxhdGVyLiIpOworfQorCisvKiBDYWxsYmFjayBmdW5jdGlvbiB0byB1 bndpbmQgdGhlICRmcmFtZWRlc2MgcmVnaXN0ZXIuICAqLworCitzdGF0aWMgdmFsdWUgKgoraW50 ZWxndF9kd2FyZjJfcHJldl9mcmFtZWRlc2MgKGNvbnN0IGZyYW1lX2luZm9fcHRyICZ0aGlzX2Zy YW1lLAorCQkJICAgICAgIHZvaWQgKip0aGlzX2NhY2hlLCBpbnQgcmVnbnVtKQoreworICBnZGJh cmNoICpnZGJhcmNoID0gZ2V0X2ZyYW1lX2FyY2ggKHRoaXNfZnJhbWUpOworICBpbnRlbGd0X2dk YmFyY2hfdGRlcCAqZGF0YQorICAgID0gZ2RiYXJjaF90ZGVwPGludGVsZ3RfZ2RiYXJjaF90ZGVw PiAoZ2RiYXJjaCk7CisKKyAgaW50IGFjdHVhbF9yZWdudW0gPSBkYXRhLT5mcmFtZWRlc2NfYmFz ZV9yZWdudW0gKCk7CisKKyAgLyogVW53aW5kIHRoZSBhY3R1YWwgR1JGIHJlZ2lzdGVyLiAgKi8K KyAgcmV0dXJuIGZyYW1lX3Vud2luZF9yZWdpc3Rlcl92YWx1ZSAodGhpc19mcmFtZSwgYWN0dWFs X3JlZ251bSk7Cit9CisKKy8qIEFyY2hpdGVjdHVyZS1zcGVjaWZpYyByZWdpc3RlciBzdGF0ZSBp bml0aWFsaXphdGlvbi4gICovCisKK3N0YXRpYyB2b2lkCitpbnRlbGd0X2luaXRfcmVnIChnZGJh cmNoICpnZGJhcmNoLCBpbnQgcmVnbnVtLCBkd2FyZjJfZnJhbWVfc3RhdGVfcmVnICpyZWcsCisJ CSAgY29uc3QgZnJhbWVfaW5mb19wdHIgJnRoaXNfZnJhbWUpCit7CisgIGludCBpcF9yZWdudW0g PSBpbnRlbGd0X3BzZXVkb19yZWdpc3Rlcl9udW0gKGdkYmFyY2gsICJpcCIpOworICBpbnQgZnJh bWVkZXNjX3JlZ251bSA9IGludGVsZ3RfcHNldWRvX3JlZ2lzdGVyX251bSAoZ2RiYXJjaCwgImZy YW1lZGVzYyIpOworCisgIGlmIChyZWdudW0gPT0gaXBfcmVnbnVtKQorICAgIHJlZy0+aG93ID0g RFdBUkYyX0ZSQU1FX1JFR19SQTsKKyAgZWxzZSBpZiAocmVnbnVtID09IGdkYmFyY2hfc3BfcmVn bnVtIChnZGJhcmNoKSkKKyAgICByZWctPmhvdyA9IERXQVJGMl9GUkFNRV9SRUdfQ0ZBOworICAv KiBXZSB1c2UgYSBzcGVjaWFsIGZ1bmN0aW9uIHRvIHVud2luZCB0aGUgJGZyYW1lZGVzYyByZWdp c3Rlci4gICovCisgIGVsc2UgaWYgKHJlZ251bSA9PSBmcmFtZWRlc2NfcmVnbnVtKQorICAgIHsK KyAgICAgIHJlZy0+aG93ID0gRFdBUkYyX0ZSQU1FX1JFR19GTjsKKyAgICAgIHJlZy0+bG9jLmZu ID0gaW50ZWxndF9kd2FyZjJfcHJldl9mcmFtZWRlc2M7CisgICAgfQorfQorCisvKiBBIGhlbHBl ciBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBJU0FCQVNFIHJlZ2lzdGVy LiAgKi8KKworc3RhdGljIENPUkVfQUREUgoraW50ZWxndF9nZXRfaXNhYmFzZSAocmVhZGFibGVf cmVnY2FjaGUgKnJlZ2NhY2hlKQoreworICBnZGJhcmNoICpnZGJhcmNoID0gcmVnY2FjaGUtPmFy Y2ggKCk7CisgIGludGVsZ3RfZ2RiYXJjaF90ZGVwICpkYXRhCisgICAgPSBnZGJhcmNoX3RkZXA8 aW50ZWxndF9nZGJhcmNoX3RkZXA+IChnZGJhcmNoKTsKKyAgZ2RiX2Fzc2VydCAoZGF0YS0+aXNh YmFzZV9yZWdudW0gIT0gLTEpOworCisgIHVpbnQ2NF90IGlzYWJhc2UgPSAwOworICBpZiAocmVn Y2FjaGUtPmNvb2tlZF9yZWFkIChkYXRhLT5pc2FiYXNlX3JlZ251bSwgJmlzYWJhc2UpICE9IFJF R19WQUxJRCkKKyAgICB0aHJvd19lcnJvciAoTk9UX0FWQUlMQUJMRV9FUlJPUiwKKwkJIF8oIlJl Z2lzdGVyICVkIChpc2FiYXNlKSBpcyBub3QgYXZhaWxhYmxlIiksCisJCSBkYXRhLT5pc2FiYXNl X3JlZ251bSk7CisgIHJldHVybiBpc2FiYXNlOworfQorCisvKiBUaGUgJ3Vud2luZF9wYycgZ2Ri YXJjaCBtZXRob2QuICAqLworCitzdGF0aWMgQ09SRV9BRERSCitpbnRlbGd0X3Vud2luZF9wYyAo Z2RiYXJjaCAqZ2RiYXJjaCwgY29uc3QgZnJhbWVfaW5mb19wdHIgJm5leHRfZnJhbWUpCit7Cisg IC8qIFVzZSBpcCByZWdpc3RlciBoZXJlLCBhcyBJR0MgdXNlcyAzMmJpdCB2YWx1ZXMgKHBjIGlz IDY0Yml0KS4gICovCisgIGludCBpcF9yZWdudW0gPSBpbnRlbGd0X3BzZXVkb19yZWdpc3Rlcl9u dW0gKGdkYmFyY2gsICJpcCIpOworICBDT1JFX0FERFIgcHJldl9pcCA9IGZyYW1lX3Vud2luZF9y ZWdpc3Rlcl91bnNpZ25lZCAobmV4dF9mcmFtZSwKKwkJCQkJCSAgICAgIGlwX3JlZ251bSk7Cisg IGludGVsZ3RfZGVidWdfcHJpbnRmICgicHJldl9pcDogJXMiLCBwYWRkcmVzcyAoZ2RiYXJjaCwg cHJldl9pcCkpOworCisgIC8qIFByb2dyYW0gY291bnRlciBpcyAkaXAgKyAkaXNhYmFzZS4gIFJl YWQgZGlyZWN0bHkgZnJvbSB0aGUKKyAgICAgcmVnY2FjaGUgaW5zdGVhZCBvZiB1bndpbmRpbmcs IGFzIHRoZSBmcmFtZSB1bndpbmQgaW5mbyBtYXkKKyAgICAgc2ltcGx5IGJlIHVuYXZhaWxhYmxl LiAgVGhlIGlzYWJhc2UgcmVnaXN0ZXIgZG9lcyBub3QgY2hhbmdlCisgICAgIGR1cmluZyBrZXJu ZWwgZXhlY3V0aW9uLCBzbyB0aGlzIG11c3QgYmUgc2FmZS4gICovCisgIHJlZ2NhY2hlICpyZWdj YWNoZSA9IGdldF90aHJlYWRfcmVnY2FjaGUgKGluZmVyaW9yX3RocmVhZCAoKSk7CisgIENPUkVf QUREUiBpc2FiYXNlID0gaW50ZWxndF9nZXRfaXNhYmFzZSAocmVnY2FjaGUpOworCisgIHJldHVy biBpc2FiYXNlICsgcHJldl9pcDsKK30KKworLyogRnJhbWUgdW53aW5kaW5nLiAgKi8KKworc3Rh dGljIHZvaWQKK2ludGVsZ3RfZnJhbWVfdGhpc19pZCAoY29uc3QgZnJhbWVfaW5mb19wdHIgJnRo aXNfZnJhbWUsCisJCSAgICAgICB2b2lkICoqdGhpc19wcm9sb2d1ZV9jYWNoZSwgZnJhbWVfaWQg KnRoaXNfaWQpCit7CisgIC8qIEZJWE1FOiBBc3NlbWJseS1sZXZlbCB1bndpbmRpbmcgZm9yIGlu dGVsZ3QgaXMgbm90IGF2YWlsYWJsZSBhdAorICAgICB0aGUgbW9tZW50LiAgU3RvcCBhdCB0aGUg Zmlyc3QgZnJhbWUuICAqLworICAqdGhpc19pZCA9IG91dGVyX2ZyYW1lX2lkOworfQorCisvKiBU aGlzIGlzIGEgImJhcmUgbWluaW11bSIgdW53aW5kZXIgdGhhdCBhdm9pZHMgY3Jhc2hpbmcgR0RC CisgICBpZiBkZWJ1Z2dpbmcgYSBwcm9ncmFtIHdpdGhvdXQgZGVidWcgaW5mby4gICovCisKK3N0 YXRpYyBjb25zdCBmcmFtZV91bndpbmRfbGVnYWN5IGludGVsZ3RfZnJhbWVfdW53aW5kICgKKyAg ImludGVsZ3QgcHJvbG9ndWUiLAorICBOT1JNQUxfRlJBTUUsCQkJLyogdHlwZSAqLworICBGUkFN RV9VTldJTkRfQVJDSCwJCQkvKiBjbGFzcyAqLworICBkZWZhdWx0X2ZyYW1lX3Vud2luZF9zdG9w X3JlYXNvbiwJLyogc3RvcF9yZWFzb24gKi8KKyAgaW50ZWxndF9mcmFtZV90aGlzX2lkLAkJLyog dGhpc19pZCAqLworICBudWxscHRyLAkJCQkvKiBwcmV2X3JlZ2lzdGVyICovCisgIG51bGxwdHIs CQkJCS8qIHVud2luZF9kYXRhICovCisgIGRlZmF1bHRfZnJhbWVfc25pZmZlcgkJLyogc25pZmZl ciAqLworKTsKKworLyogVGhlIG1lbW9yeV9pbnNlcnRfYnJlYWtwb2ludCBnZGJhcmNoIG1ldGhv ZC4gICovCisKK3N0YXRpYyBpbnQKK2ludGVsZ3RfbWVtb3J5X2luc2VydF9icmVha3BvaW50IChn ZGJhcmNoICpnZGJhcmNoLCBicF90YXJnZXRfaW5mbyAqYnApCit7CisgIGludGVsZ3RfZGVidWdf cHJpbnRmICgicmVxIGlwOiAlcyIsIHBhZGRyZXNzIChnZGJhcmNoLAorCQkJCQkJYnAtPnJlcXN0 ZF9hZGRyZXNzKSk7CisKKyAgLyogRW5zdXJlIHRoYXQgd2UgaGF2ZSBlbm91Z2ggc3BhY2UgaW4g dGhlIGJyZWFrcG9pbnQuICAqLworICBzdGF0aWNfYXNzZXJ0IChpbnRlbGd0OjpNQVhfSU5TVF9M RU5HVEggPD0gQlJFQUtQT0lOVF9NQVgpOworCisgIGdkYl9ieXRlIGluc3RbaW50ZWxndDo6TUFY X0lOU1RfTEVOR1RIXTsKKyAgaW50IGVyciA9IHRhcmdldF9yZWFkX21lbW9yeSAoYnAtPnJlcXN0 ZF9hZGRyZXNzLCBpbnN0LAorCQkJCWludGVsZ3Q6Ok1BWF9JTlNUX0xFTkdUSCk7CisgIGlmIChl cnIgIT0gMCkKKyAgICB7CisgICAgICAvKiBXZSBjb3VsZCBmYWxsIGJhY2sgdG8gcmVhZGluZyBh IGZ1bGwgYW5kIHRoZW4gYSBjb21wYWN0ZWQKKwkgaW5zdHJ1Y3Rpb24gYnV0IEkgdGhpbmsgd2Ug c2hvdWxkIHJhdGhlciBhbGxvdyBzaG9ydCByZWFkcyB0aGFuCisJIGhhdmluZyB0aGUgY2FsbGVy IHRyeSBzbWFsbGVyIGFuZCBzbWFsbGVyIHNpemVzLiAgKi8KKyAgICAgIGludGVsZ3RfZGVidWdf cHJpbnRmICgiRmFpbGVkIHRvIHJlYWQgbWVtb3J5IGF0ICVzICglcykuIiwKKwkJCSAgICBwYWRk cmVzcyAoZ2RiYXJjaCwgYnAtPnJlcXN0ZF9hZGRyZXNzKSwKKwkJCSAgICBzdHJlcnJvciAoZXJy KSk7CisgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICBicC0+cGxhY2VkX2FkZHJlc3MgPSBi cC0+cmVxc3RkX2FkZHJlc3M7CisgIHVpbnQzMl90IGRldmljZV9pZCA9IGdldF9kZXZpY2VfaWQg KGN1cnJlbnRfaW5mZXJpb3IgKCkpOworICBicC0+c2hhZG93X2xlbiA9IGludGVsZ3Q6Omluc3Rf bGVuZ3RoIChpbnN0LCBkZXZpY2VfaWQpOworCisgIC8qIE1ha2UgYSBjb3B5IGJlZm9yZSB3ZSBz ZXQgdGhlIGJyZWFrcG9pbnQgc28gd2UgY2FuIHJlc3RvcmUgdGhlCisgICAgIG9yaWdpbmFsIGlu c3RydWN0aW9uIHdoZW4gcmVtb3ZpbmcgdGhlIGJyZWFrcG9pbnQgYWdhaW4uCisKKyAgICAgVGhp cyBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgYnV0IGl0IHNhdmVzIG9uZSB0YXJnZXQgYWNjZXNz LiAgKi8KKyAgbWVtY3B5IChicC0+c2hhZG93X2NvbnRlbnRzLCBpbnN0LCBicC0+c2hhZG93X2xl bik7CisKKyAgY29uc3QgYm9vbCBhbHJlYWR5ID0gaW50ZWxndDo6c2V0X2JyZWFrcG9pbnQgKGlu c3QsIGRldmljZV9pZCk7CisgIGlmIChhbHJlYWR5KQorICAgIHsKKyAgICAgIC8qIFdhcm4gaWYg dGhlIGJyZWFrcG9pbnQgYml0IGlzIGFscmVhZHkgc2V0LgorCisJIFRoZXJlIGlzIHN0aWxsIGEg YnJlYWtwb2ludCwgcHJvYmFibHkgaGFyZC1jb2RlZCwgYW5kIGl0IHNob3VsZAorCSBzdGlsbCB0 cmlnZ2VyIGFuZCB3ZSdyZSBzdGlsbCBhYmxlIHRvIHN0ZXAgb3ZlciBpdC4gIEl0J3MganVzdAor CSBub3Qgb3VyIGJyZWFrcG9pbnQuICAqLworICAgICAgd2FybmluZyAoXygiVXNpbmcgcGVybWFu ZW50IGJyZWFrcG9pbnQgYXQgJXMuIiksCisJICAgICAgIHBhZGRyZXNzIChnZGJhcmNoLCBicC0+ cGxhY2VkX2FkZHJlc3MpKTsKKworICAgICAgLyogVGhlcmUncyBubyBuZWVkIHRvIHdyaXRlIHRo ZSB1bm1vZGlmaWVkIGluc3RydWN0aW9uIGJhY2suICAqLworICAgICAgcmV0dXJuIDA7CisgICAg fQorCisgIGVyciA9IHRhcmdldF93cml0ZV9yYXdfbWVtb3J5IChicC0+cGxhY2VkX2FkZHJlc3Ms IGluc3QsIGJwLT5zaGFkb3dfbGVuKTsKKyAgaWYgKGVyciAhPSAwKQorICAgIGludGVsZ3RfZGVi dWdfcHJpbnRmICgiRmFpbGVkIHRvIGluc2VydCBicmVha3BvaW50IGF0ICVzICglcykuIiwKKwkJ CSAgcGFkZHJlc3MgKGdkYmFyY2gsIGJwLT5wbGFjZWRfYWRkcmVzcyksCisJCQkgIHN0cmVycm9y IChlcnIpKTsKKworICByZXR1cm4gZXJyOworfQorCisvKiBUaGUgbWVtb3J5X3JlbW92ZV9icmVh a3BvaW50IGdkYmFyY2ggbWV0aG9kLiAgKi8KKworc3RhdGljIGludAoraW50ZWxndF9tZW1vcnlf cmVtb3ZlX2JyZWFrcG9pbnQgKGdkYmFyY2ggKmdkYmFyY2gsIHN0cnVjdCBicF90YXJnZXRfaW5m byAqYnApCit7CisgIGludGVsZ3RfZGVidWdfcHJpbnRmICgicmVxIGlwOiAlcywgcGxhY2VkIGlw OiAlcyIsCisJCQlwYWRkcmVzcyAoZ2RiYXJjaCwgYnAtPnJlcXN0ZF9hZGRyZXNzKSwKKwkJCXBh ZGRyZXNzIChnZGJhcmNoLCBicC0+cGxhY2VkX2FkZHJlc3MpKTsKKworICAvKiBXYXJuIGlmIHdl J3JlIGluc2VydGluZyBhIHBlcm1hbmVudCBicmVha3BvaW50LiAgKi8KKyAgdWludDMyX3QgZGV2 aWNlX2lkID0gZ2V0X2RldmljZV9pZCAoY3VycmVudF9pbmZlcmlvciAoKSk7CisgIGlmIChpbnRl bGd0OjpoYXNfYnJlYWtwb2ludCAoYnAtPnNoYWRvd19jb250ZW50cywgZGV2aWNlX2lkKSkKKyAg ICB3YXJuaW5nIChfKCJSZS1pbnNlcnRpbmcgcGVybWFuZW50IGJyZWFrcG9pbnQgYXQgJXMuIiks CisJICAgICBwYWRkcmVzcyAoZ2RiYXJjaCwgYnAtPnBsYWNlZF9hZGRyZXNzKSk7CisKKyAgaW50 IGVyciA9IHRhcmdldF93cml0ZV9yYXdfbWVtb3J5IChicC0+cGxhY2VkX2FkZHJlc3MsIGJwLT5z aGFkb3dfY29udGVudHMsCisJCQkJICAgICBicC0+c2hhZG93X2xlbik7CisgIGlmIChlcnIgIT0g MCkKKyAgICBpbnRlbGd0X2RlYnVnX3ByaW50ZiAoIkZhaWxlZCB0byByZW1vdmUgYnJlYWtwb2lu dCBhdCAlcyAoJXMpLiIsCisJCQkgIHBhZGRyZXNzIChnZGJhcmNoLCBicC0+cGxhY2VkX2FkZHJl c3MpLAorCQkJICBzdHJlcnJvciAoZXJyKSk7CisKKyAgcmV0dXJuIGVycjsKK30KKworLyogVGhl IHByb2dyYW1fYnJlYWtwb2ludF9oZXJlX3AgZ2RiYXJjaCBtZXRob2QuICAqLworCitzdGF0aWMg Ym9vbAoraW50ZWxndF9wcm9ncmFtX2JyZWFrcG9pbnRfaGVyZV9wIChnZGJhcmNoICpnZGJhcmNo LCBDT1JFX0FERFIgcGMpCit7CisgIGludGVsZ3RfZGVidWdfcHJpbnRmICgicGM6ICVzIiwgcGFk ZHJlc3MgKGdkYmFyY2gsIHBjKSk7CisKKyAgZ2RiX2J5dGUgaW5zdFtpbnRlbGd0OjpNQVhfSU5T VF9MRU5HVEhdOworICBpbnQgZXJyID0gdGFyZ2V0X3JlYWRfbWVtb3J5IChwYywgaW5zdCwgaW50 ZWxndDo6TUFYX0lOU1RfTEVOR1RIKTsKKyAgaWYgKGVyciAhPSAwKQorICAgIHsKKyAgICAgIC8q IFdlIGNvdWxkIGZhbGwgYmFjayB0byByZWFkaW5nIGEgZnVsbCBhbmQgdGhlbiBhIGNvbXBhY3Rl ZAorCSBpbnN0cnVjdGlvbiBidXQgSSB0aGluayB3ZSBzaG91bGQgcmF0aGVyIGFsbG93IHNob3J0 IHJlYWRzIHRoYW4KKwkgaGF2aW5nIHRoZSBjYWxsZXIgdHJ5IHNtYWxsZXIgYW5kIHNtYWxsZXIg c2l6ZXMuICAqLworICAgICAgaW50ZWxndF9kZWJ1Z19wcmludGYgKCJGYWlsZWQgdG8gcmVhZCBt ZW1vcnkgYXQgJXMgKCVzKS4iLAorCQkJICAgIHBhZGRyZXNzIChnZGJhcmNoLCBwYyksIHN0cmVy cm9yIChlcnIpKTsKKyAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgIHVpbnQzMl90IGRldmlj ZV9pZCA9IGdldF9kZXZpY2VfaWQgKGN1cnJlbnRfaW5mZXJpb3IgKCkpOworICBjb25zdCBib29s IGlzX2JrcHQgPSBpbnRlbGd0OjpoYXNfYnJlYWtwb2ludCAoaW5zdCwgZGV2aWNlX2lkKTsKKwor ICBpbnRlbGd0X2RlYnVnX3ByaW50ZiAoIiVzYnJlYWtwb2ludCBmb3VuZC4iLCBpc19ia3B0ID8g IiIgOiAibm8gIik7CisKKyAgcmV0dXJuIGlzX2JrcHQ7Cit9CisKKy8qIFRoZSAnYnJlYWtwb2lu dF9raW5kX2Zyb21fcGMnIGdkYmFyY2ggbWV0aG9kLgorICAgVGhpcyBpcyBhIHJlcXVpcmVkIGdk YmFyY2ggZnVuY3Rpb24uICAqLworCitzdGF0aWMgaW50CitpbnRlbGd0X2JyZWFrcG9pbnRfa2lu ZF9mcm9tX3BjIChnZGJhcmNoICpnZGJhcmNoLCBDT1JFX0FERFIgKnBjcHRyKQoreworICBpbnRl bGd0X2RlYnVnX3ByaW50ZiAoIipwY3B0cjogJXMiLCBwYWRkcmVzcyAoZ2RiYXJjaCwgKnBjcHRy KSk7CisKKyAgcmV0dXJuIGludGVsZ3Q6OkJQX0lOU1RSVUNUSU9OOworfQorCisvKiBUaGUgJ3N3 X2JyZWFrcG9pbnRfZnJvbV9raW5kJyBnZGJhcmNoIG1ldGhvZC4gICovCisKK3N0YXRpYyBjb25z dCBnZGJfYnl0ZSAqCitpbnRlbGd0X3N3X2JyZWFrcG9pbnRfZnJvbV9raW5kIChnZGJhcmNoICpn ZGJhcmNoLCBpbnQga2luZCwgaW50ICpzaXplKQoreworICBpbnRlbGd0X2RlYnVnX3ByaW50ZiAo ImtpbmQ6ICVkIiwga2luZCk7CisKKyAgLyogV2UgZG8gbm90IHN1cHBvcnQgYnJlYWtwb2ludCBp bnN0cnVjdGlvbnMuCisKKyAgICAgV2UgdXNlIGJyZWFrcG9pbnQgYml0cyBpbiBpbnN0cnVjdGlv bnMsIGluc3RlYWQuICBTZWUKKyAgICAgaW50ZWxndF9tZW1vcnlfaW5zZXJ0X2JyZWFrcG9pbnQu ICAqLworICAqc2l6ZSA9IDA7CisgIHJldHVybiBudWxscHRyOworfQorCisvKiBQcmludCBvbmUg aW5zdHJ1Y3Rpb24gZnJvbSBNRU1BRERSIG9uIElORk8tPlNUUkVBTS4gICovCisKK3N0YXRpYyBp bnQKK2ludGVsZ3RfcHJpbnRfaW5zbiAoYmZkX3ZtYSBtZW1hZGRyLCBzdHJ1Y3QgZGlzYXNzZW1i bGVfaW5mbyAqaW5mbykKK3sKKyAgLyogRGlzYXNzZW1ibGVyIGlzIHRvIGJlIGFkZGVkIGluIGEg bGF0ZXIgcGF0Y2guICAqLworICByZXR1cm4gLTE7Cit9CisKKy8qIFRoZSAicmVhZF9wYyIgZ2Ri YXJjaCBtZXRob2QuICAqLworCitzdGF0aWMgQ09SRV9BRERSCitpbnRlbGd0X3JlYWRfcGMgKHJl YWRhYmxlX3JlZ2NhY2hlICpyZWdjYWNoZSkKK3sKKyAgZ2RiYXJjaCAqYXJjaCA9IHJlZ2NhY2hl LT5hcmNoICgpOworICBpbnRlbGd0X2dkYmFyY2hfdGRlcCAqZGF0YSA9IGdkYmFyY2hfdGRlcDxp bnRlbGd0X2dkYmFyY2hfdGRlcD4gKGFyY2gpOworCisgIC8qIEluc3RydWN0aW9uIHBvaW50ZXIg aXMgc3RvcmVkIGluIENSMC4yLiAgKi8KKyAgdWludDMyX3QgaXA7CisgIGludGVsZ3RfcmVhZF9y ZWdpc3Rlcl9wYXJ0IChyZWdjYWNoZSwgZGF0YS0+Y3IwX3JlZ251bSwKKwkJCSAgICAgIHNpemVv ZiAodWludDMyX3QpICogMiwKKwkJCSAgICAgIGdkYjo6bWFrZV9hcnJheV92aWV3ICgoZ2RiX2J5 dGUgKikgJmlwLAorCQkJCQkJICAgIHNpemVvZiAodWludDMyX3QpKSwKKwkJCSAgICAgIF8oIkNh bm5vdCBjb21wdXRlIFBDLiIpKTsKKworICAvKiBQcm9ncmFtIGNvdW50ZXIgaXMgJGlwICsgJGlz YWJhc2UuICAqLworICBDT1JFX0FERFIgaXNhYmFzZSA9IGludGVsZ3RfZ2V0X2lzYWJhc2UgKHJl Z2NhY2hlKTsKKyAgcmV0dXJuIGlzYWJhc2UgKyBpcDsKK30KKworLyogVGhlICJ3cml0ZV9wYyIg Z2RiYXJjaCBtZXRob2QuICAqLworCitzdGF0aWMgdm9pZAoraW50ZWxndF93cml0ZV9wYyAoc3Ry dWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgQ09SRV9BRERSIHBjKQoreworICBnZGJhcmNoICphcmNo ID0gcmVnY2FjaGUtPmFyY2ggKCk7CisgIC8qIFByb2dyYW0gY291bnRlciBpcyAkaXAgKyAkaXNh YmFzZSwgY2FuIG9ubHkgbW9kaWZ5ICRpcC4gIE5lZWQKKyAgICAgdG8gZW5zdXJlIHRoYXQgdGhl IG5ldyB2YWx1ZSBmaXRzIHdpdGhpbiAkaXAgbW9kaWZpY2F0aW9uIHJhbmdlCisgICAgIGFuZCBw cm9wYWdhdGUgdGhlIHdyaXRlIGFjY29yZGluZ2x5LiAgKi8KKyAgQ09SRV9BRERSIGlzYWJhc2Ug PSBpbnRlbGd0X2dldF9pc2FiYXNlIChyZWdjYWNoZSk7CisgIGlmIChwYyA8IGlzYWJhc2UgfHwg cGMgPiBpc2FiYXNlICsgVUlOVDMyX01BWCkKKyAgICBlcnJvciAoXygiQ2FuJ3QgdXBkYXRlICRw YyB0byB2YWx1ZSAlcywgb3V0IG9mIHJhbmdlIiksCisJICAgcGFkZHJlc3MgKGFyY2gsIHBjKSk7 CisKKyAgaW50ZWxndF9nZGJhcmNoX3RkZXAgKmRhdGEgPSBnZGJhcmNoX3RkZXA8aW50ZWxndF9n ZGJhcmNoX3RkZXA+IChhcmNoKTsKKworICAvKiBJbnN0cnVjdGlvbiBwb2ludGVyIGlzIHN0b3Jl ZCBpbiBDUjAuMi4gICovCisgIHVpbnQzMl90IGlwID0gcGMgLSBpc2FiYXNlOworICByZWdjYWNo ZS0+Y29va2VkX3dyaXRlX3BhcnQgKGRhdGEtPmNyMF9yZWdudW0sIHNpemVvZiAodWludDMyX3Qp ICogMiwKKwkJCSAgICAgICBnZGI6Om1ha2VfYXJyYXlfdmlldyAoKGdkYl9ieXRlICopICZpcCwK KwkJCQkJCSAgICAgc2l6ZW9mICh1aW50MzJfdCkpKTsKK30KKworLyogUmV0dXJuIHRoZSBuYW1l IG9mIHBzZXVkby1yZWdpc3RlciBSRUdOVU0uICAqLworCitzdGF0aWMgY29uc3QgY2hhciAqCitp bnRlbGd0X3BzZXVkb19yZWdpc3Rlcl9uYW1lIChnZGJhcmNoICphcmNoLCBpbnQgcmVnbnVtKQor eworICBpbnRlbGd0X2dkYmFyY2hfdGRlcCAqZGF0YSA9IGdkYmFyY2hfdGRlcDxpbnRlbGd0X2dk YmFyY2hfdGRlcD4gKGFyY2gpOworICBpbnQgYmFzZV9udW0gPSBnZGJhcmNoX251bV9yZWdzIChh cmNoKTsKKyAgaWYgKHJlZ251bSA8IGJhc2VfbnVtCisgICAgICB8fCByZWdudW0gPj0gYmFzZV9u dW0gKyBkYXRhLT5lbmFibGVkX3BzZXVkb19yZWdzLnNpemUgKCkpCisgICAgZXJyb3IgKF8oIklu dmFsaWQgcHNldWRvLXJlZ2lzdGVyIHJlZ251bSAlZCIpLCByZWdudW0pOworICByZXR1cm4gZGF0 YS0+ZW5hYmxlZF9wc2V1ZG9fcmVnc1tyZWdudW0gLSBiYXNlX251bV0uY19zdHIgKCk7Cit9CisK Ky8qIFJldHVybiB0aGUgR0RCIHR5cGUgb2JqZWN0IGZvciB0aGUgInN0YW5kYXJkIiBkYXRhIHR5 cGUgb2YgZGF0YSBpbgorICAgcHNldWRvLXJlZ2lzdGVyIFJFR05VTS4gICovCisKK3N0YXRpYyB0 eXBlICoKK2ludGVsZ3RfcHNldWRvX3JlZ2lzdGVyX3R5cGUgKGdkYmFyY2ggKmFyY2gsIGludCBy ZWdudW0pCit7CisgIGNvbnN0IGNoYXIgKm5hbWUgPSBpbnRlbGd0X3BzZXVkb19yZWdpc3Rlcl9u YW1lIChhcmNoLCByZWdudW0pOworICBjb25zdCBzdHJ1Y3QgYnVpbHRpbl90eXBlICpidCA9IGJ1 aWx0aW5fdHlwZSAoYXJjaCk7CisgIGludGVsZ3RfZ2RiYXJjaF90ZGVwICpkYXRhID0gZ2RiYXJj aF90ZGVwPGludGVsZ3RfZ2RiYXJjaF90ZGVwPiAoYXJjaCk7CisKKyAgaWYgKHN0cmNtcCAobmFt ZSwgImZyYW1lZGVzYyIpID09IDApCisgICAgeworICAgICAgaWYgKGRhdGEtPmZyYW1lZGVzY190 eXBlICE9IG51bGxwdHIpCisJcmV0dXJuIGRhdGEtPmZyYW1lZGVzY190eXBlOworICAgICAgdHlw ZSAqZnJhbWUgPSBhcmNoX2NvbXBvc2l0ZV90eXBlIChhcmNoLCAiZnJhbWVfZGVzYyIsIFRZUEVf Q09ERV9TVFJVQ1QpOworICAgICAgYXBwZW5kX2NvbXBvc2l0ZV90eXBlX2ZpZWxkIChmcmFtZSwg InJldHVybl9pcCIsIGJ0LT5idWlsdGluX3VpbnQzMik7CisgICAgICBhcHBlbmRfY29tcG9zaXRl X3R5cGVfZmllbGQgKGZyYW1lLCAicmV0dXJuX2NhbGxtYXNrIiwKKwkJCQkgICBidC0+YnVpbHRp bl91aW50MzIpOworICAgICAgYXBwZW5kX2NvbXBvc2l0ZV90eXBlX2ZpZWxkIChmcmFtZSwgImJl X3NwIiwgYnQtPmJ1aWx0aW5fdWludDMyKTsKKyAgICAgIGFwcGVuZF9jb21wb3NpdGVfdHlwZV9m aWVsZCAoZnJhbWUsICJiZV9mcCIsIGJ0LT5idWlsdGluX3VpbnQzMik7CisgICAgICBhcHBlbmRf Y29tcG9zaXRlX3R5cGVfZmllbGQgKGZyYW1lLCAiZmVfZnAiLCBidC0+YnVpbHRpbl9kYXRhX3B0 cik7CisgICAgICBhcHBlbmRfY29tcG9zaXRlX3R5cGVfZmllbGQgKGZyYW1lLCAiZmVfc3AiLCBi dC0+YnVpbHRpbl9kYXRhX3B0cik7CisgICAgICBkYXRhLT5mcmFtZWRlc2NfdHlwZSA9IGZyYW1l OworICAgICAgcmV0dXJuIGZyYW1lOworICAgIH0KKyAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAi aXAiKSA9PSAwKQorICAgIHJldHVybiBidC0+YnVpbHRpbl91aW50MzI7CisKKyAgcmV0dXJuIG51 bGxwdHI7Cit9CisKKy8qIFJlYWQgdGhlIHZhbHVlIG9mIGEgcHNldWRvLXJlZ2lzdGVyIFJFR05V TS4gICovCisKK3N0YXRpYyBzdHJ1Y3QgdmFsdWUgKgoraW50ZWxndF9wc2V1ZG9fcmVnaXN0ZXJf cmVhZF92YWx1ZSAoZ2RiYXJjaCAqYXJjaCwKKwkJCQkgICAgY29uc3QgZnJhbWVfaW5mb19wdHIg Jm5leHRfZnJhbWUsCisJCQkJICAgIGludCBwc2V1ZG9fcmVnbnVtKQoreworICBjb25zdCBjaGFy ICpuYW1lID0gaW50ZWxndF9wc2V1ZG9fcmVnaXN0ZXJfbmFtZSAoYXJjaCwgcHNldWRvX3JlZ251 bSk7CisgIGludGVsZ3RfZ2RiYXJjaF90ZGVwICpkYXRhID0gZ2RiYXJjaF90ZGVwPGludGVsZ3Rf Z2RiYXJjaF90ZGVwPiAoYXJjaCk7CisKKyAgaWYgKHN0cmNtcCAobmFtZSwgImZyYW1lZGVzYyIp ID09IDApCisgICAgeworICAgICAgaW50IGdyZl9udW0gPSBkYXRhLT5mcmFtZWRlc2NfYmFzZV9y ZWdudW0gKCk7CisgICAgICByZXR1cm4gcHNldWRvX2Zyb21fcmF3X3BhcnQgKG5leHRfZnJhbWUs IHBzZXVkb19yZWdudW0sIGdyZl9udW0sIDApOworICAgIH0KKyAgZWxzZSBpZiAoc3RyY21wIChu YW1lLCAiaXAiKSA9PSAwKQorICAgIHsKKyAgICAgIGludCByZWdzaXplID0gcmVnaXN0ZXJfc2l6 ZSAoYXJjaCwgcHNldWRvX3JlZ251bSk7CisgICAgICAvKiBJbnN0cnVjdGlvbiBwb2ludGVyIGlz IHN0b3JlZCBpbiBDUjAuMi4gICovCisgICAgICBnZGJfYXNzZXJ0IChkYXRhLT5jcjBfcmVnbnVt ICE9IC0xKTsKKyAgICAgIC8qIENSMCBlbGVtZW50cyBhcmUgNCBieXRlIHdpZGUuICAqLworICAg ICAgZ2RiX2Fzc2VydCAocmVnc2l6ZSArIDggPD0gcmVnaXN0ZXJfc2l6ZSAoYXJjaCwgZGF0YS0+ Y3IwX3JlZ251bSkpOworCisgICAgICByZXR1cm4gcHNldWRvX2Zyb21fcmF3X3BhcnQgKG5leHRf ZnJhbWUsIHBzZXVkb19yZWdudW0sCisJCQkJICAgZGF0YS0+Y3IwX3JlZ251bSwgOCk7CisgICAg fQorCisgIHJldHVybiBudWxscHRyOworfQorCisvKiBXcml0ZSB0aGUgdmFsdWUgb2YgYSBwc2V1 ZG8tcmVnaXN0ZXIgUkVHTlVNLiAgKi8KKworc3RhdGljIHZvaWQKK2ludGVsZ3RfcHNldWRvX3Jl Z2lzdGVyX3dyaXRlIChnZGJhcmNoICphcmNoLAorCQkJICAgICAgIGNvbnN0IGZyYW1lX2luZm9f cHRyICZuZXh0X2ZyYW1lLAorCQkJICAgICAgIGludCBwc2V1ZG9fcmVnbnVtLAorCQkJICAgICAg IGdkYjo6YXJyYXlfdmlldzxjb25zdCBnZGJfYnl0ZT4gYnVmKQoreworICBjb25zdCBjaGFyICpu YW1lID0gaW50ZWxndF9wc2V1ZG9fcmVnaXN0ZXJfbmFtZSAoYXJjaCwgcHNldWRvX3JlZ251bSk7 CisgIGludGVsZ3RfZ2RiYXJjaF90ZGVwICpkYXRhID0gZ2RiYXJjaF90ZGVwPGludGVsZ3RfZ2Ri YXJjaF90ZGVwPiAoYXJjaCk7CisKKyAgaWYgKHN0cmNtcCAobmFtZSwgImZyYW1lZGVzYyIpID09 IDApCisgICAgeworICAgICAgaW50IGdyZl9udW0gPSBkYXRhLT5mcmFtZWRlc2NfYmFzZV9yZWdu dW0gKCk7CisgICAgICBpbnQgZ3JmX3NpemUgPSByZWdpc3Rlcl9zaXplIChhcmNoLCBncmZfbnVt KTsKKyAgICAgIGludCBkZXNjX3NpemUgPSByZWdpc3Rlcl9zaXplIChhcmNoLCBwc2V1ZG9fcmVn bnVtKTsKKyAgICAgIGdkYl9hc3NlcnQgKGdyZl9zaXplID49IGRlc2Nfc2l6ZSk7CisgICAgICBw c2V1ZG9fdG9fcmF3X3BhcnQgKG5leHRfZnJhbWUsIGJ1ZiwgZ3JmX251bSwgMCk7CisgICAgfQor ICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICJpcCIpID09IDApCisgICAgeworICAgICAgLyogSW5z dHJ1Y3Rpb24gcG9pbnRlciBpcyBzdG9yZWQgaW4gQ1IwLjIuICAqLworICAgICAgZ2RiX2Fzc2Vy dCAoZGF0YS0+Y3IwX3JlZ251bSAhPSAtMSk7CisgICAgICBpbnQgY3IwX3NpemUgPSByZWdpc3Rl cl9zaXplIChhcmNoLCBkYXRhLT5jcjBfcmVnbnVtKTsKKworICAgICAgLyogQ1IwIGVsZW1lbnRz IGFyZSA0IGJ5dGUgd2lkZS4gICovCisgICAgICBpbnQgcmVnX3NpemUgPSByZWdpc3Rlcl9zaXpl IChhcmNoLCBwc2V1ZG9fcmVnbnVtKTsKKyAgICAgIGdkYl9hc3NlcnQgKHJlZ19zaXplICsgOCA8 PSBjcjBfc2l6ZSk7CisgICAgICBwc2V1ZG9fdG9fcmF3X3BhcnQgKG5leHRfZnJhbWUsIGJ1Ziwg ZGF0YS0+Y3IwX3JlZ251bSwgOCk7CisgICAgfQorICBlbHNlCisgICAgZXJyb3IgKCJQc2V1ZG8t cmVnaXN0ZXIgJXMgaXMgcmVhZC1vbmx5IiwgbmFtZSk7Cit9CisKKy8qIENhbGxlZCBieSB0ZGVz Y191c2VfcmVnaXN0ZXJzIGVhY2ggdGltZSBhIG5ldyByZWdudW0KKyAgIGlzIGFzc2lnbmVkLiAg VXNlZCB0byB0cmFjayBkb3duIGFzc2lnbmVkIG51bWJlcnMgZm9yCisgICBhbnkgaW1wb3J0YW50 IHJlZ251bXMuICAqLworCitzdGF0aWMgaW50CitpbnRlbGd0X3Vua25vd25fcmVnaXN0ZXJfY2Ig KGdkYmFyY2ggKmFyY2gsIHRkZXNjX2ZlYXR1cmUgKmZlYXR1cmUsCisJCQkgICAgIGNvbnN0IGNo YXIgKnJlZ19uYW1lLCBpbnQgcG9zc2libGVfcmVnbnVtKQoreworICBpbnRlbGd0X2dkYmFyY2hf dGRlcCAqZGF0YSA9IGdkYmFyY2hfdGRlcDxpbnRlbGd0X2dkYmFyY2hfdGRlcD4gKGFyY2gpOwor CisgIC8qIEZpcnN0LCBjaGVjayBpZiB0aGlzIGEgYmVnaW5uaW5nIG9mIGEgbm90IHlldCB0cmFj a2VkIHJlZ3NldAorICAgICBhc3NpZ25tZW50LiAgKi8KKworICBmb3IgKGludCByZWdzZXQgPSAw OyByZWdzZXQgPCBpbnRlbGd0OjpSRUdTRVRfQ09VTlQ7ICsrcmVnc2V0KQorICAgIHsKKyAgICAg IGlmIChkYXRhLT5yZWdzZXRfcmFuZ2VzW3JlZ3NldF0uc3RhcnQgPT0gLTEKKwkgICYmIGZlYXR1 cmUtPm5hbWUgPT0gaW50ZWxndDo6RFdBUkZfUkVHU0VUX0ZFQVRVUkVTW3JlZ3NldF0pCisJewor CSAgZGF0YS0+cmVnc2V0X3Jhbmdlc1tyZWdzZXRdLnN0YXJ0ID0gcG9zc2libGVfcmVnbnVtOwor CSAgZGF0YS0+cmVnc2V0X3Jhbmdlc1tyZWdzZXRdLmVuZAorCSAgICAgID0gZmVhdHVyZS0+cmVn aXN0ZXJzLnNpemUgKCkgKyBwb3NzaWJsZV9yZWdudW07CisJICBicmVhazsKKwl9CisgICAgfQor CisgIC8qIFNlY29uZCwgY2hlY2sgaWYgaXQgaXMgYW55IHNwZWNpZmljIGluZGl2aWR1YWwgcmVn aXN0ZXIgdGhhdAorICAgICBuZWVkcyB0byBiZSB0cmFja2VkLiAgKi8KKworICBpZiAoc3RyY21w ICgicjAiLCByZWdfbmFtZSkgPT0gMCkKKyAgICBkYXRhLT5yMF9yZWdudW0gPSBwb3NzaWJsZV9y ZWdudW07CisgIGVsc2UgaWYgKHN0cmNtcCAoInIyNiIsIHJlZ19uYW1lKSA9PSAwKQorICAgIGRh dGEtPnJldHZhbF9yZWdudW0gPSBwb3NzaWJsZV9yZWdudW07CisgIGVsc2UgaWYgKHN0cmNtcCAo ImNyMCIsIHJlZ19uYW1lKSA9PSAwKQorICAgIGRhdGEtPmNyMF9yZWdudW0gPSBwb3NzaWJsZV9y ZWdudW07CisgIGVsc2UgaWYgKHN0cmNtcCAoInNyMCIsIHJlZ19uYW1lKSA9PSAwKQorICAgIGRh dGEtPnNyMF9yZWdudW0gPSBwb3NzaWJsZV9yZWdudW07CisgIGVsc2UgaWYgKHN0cmNtcCAoImlz YWJhc2UiLCByZWdfbmFtZSkgPT0gMCkKKyAgICBkYXRhLT5pc2FiYXNlX3JlZ251bSA9IHBvc3Np YmxlX3JlZ251bTsKKyAgZWxzZSBpZiAoc3RyY21wICgiY2UiLCByZWdfbmFtZSkgPT0gMCkKKyAg ICBkYXRhLT5jZV9yZWdudW0gPSBwb3NzaWJsZV9yZWdudW07CisgIGVsc2UgaWYgKHN0cmNtcCAo ImdlbnN0YmFzZSIsIHJlZ19uYW1lKSA9PSAwKQorICAgIGRhdGEtPmdlbnN0YmFzZV9yZWdudW0g PSBwb3NzaWJsZV9yZWdudW07CisgIGVsc2UgaWYgKHN0cmNtcCAoImRiZzAiLCByZWdfbmFtZSkg PT0gMCkKKyAgICBkYXRhLT5kYmcwX3JlZ251bSA9IHBvc3NpYmxlX3JlZ251bTsKKworICByZXR1 cm4gcG9zc2libGVfcmVnbnVtOworfQorCisvKiBBcmNoaXRlY3R1cmUgaW5pdGlhbGl6YXRpb24u ICAqLworCitzdGF0aWMgZ2RiYXJjaCAqCitpbnRlbGd0X2dkYmFyY2hfaW5pdCAoZ2RiYXJjaF9p bmZvIGluZm8sIGdkYmFyY2hfbGlzdCAqYXJjaGVzKQoreworICAvKiBJZiB0aGVyZSBpcyBhbHJl YWR5IGEgY2FuZGlkYXRlLCB1c2UgaXQuICAqLworICBhcmNoZXMgPSBnZGJhcmNoX2xpc3RfbG9v a3VwX2J5X2luZm8gKGFyY2hlcywgJmluZm8pOworICBpZiAoYXJjaGVzICE9IG51bGxwdHIpCisg ICAgcmV0dXJuIGFyY2hlcy0+Z2RiYXJjaDsKKworICBjb25zdCB0YXJnZXRfZGVzYyAqdGRlc2Mg PSBpbmZvLnRhcmdldF9kZXNjOworICBnZGJhcmNoX3VwIGdkYmFyY2hfdQorICAgIChnZGJhcmNo X2FsbG9jICgmaW5mbywKKwkJICAgIGdkYmFyY2hfdGRlcF91cCAobmV3IGludGVsZ3RfZ2RiYXJj aF90ZGVwKSkpOworICBnZGJhcmNoICpnZGJhcmNoID0gZ2RiYXJjaF91LmdldCAoKTsKKyAgaW50 ZWxndF9nZGJhcmNoX3RkZXAgKmRhdGEKKyAgICA9IGdkYmFyY2hfdGRlcDxpbnRlbGd0X2dkYmFy Y2hfdGRlcD4gKGdkYmFyY2gpOworCisgIC8qIEluaXRpYWxpemUgcmVnaXN0ZXIgaW5mby4gICov CisgIHNldF9nZGJhcmNoX251bV9yZWdzIChnZGJhcmNoLCAwKTsKKyAgc2V0X2dkYmFyY2hfcmVn aXN0ZXJfbmFtZSAoZ2RiYXJjaCwgdGRlc2NfcmVnaXN0ZXJfbmFtZSk7CisKKyAgaWYgKHRkZXNj X2hhc19yZWdpc3RlcnMgKHRkZXNjKSkKKyAgICB7CisgICAgICB0ZGVzY19hcmNoX2RhdGFfdXAg dGRlc2NfZGF0YSA9IHRkZXNjX2RhdGFfYWxsb2MgKCk7CisKKyAgICAgIC8qIEZpcnN0IGFzc2ln biByZWdpc3RlciBudW1iZXJzIHRvIGFsbCByZWdpc3RlcnMuICBUaGUKKwkgY2FsbGJhY2sgZnVu Y3Rpb24gd2lsbCByZWNvcmQgYW55IHJlbGV2YW50IG1ldGFkYXRhCisJIGFib3V0IGl0IGluIHRo ZSBpbnRlbGd0X2dkYmFyY2hfZGF0YSBpbnN0YW5jZSB0byBiZQorCSBpbnNwZWN0ZWQgYWZ0ZXIu ICAqLworCisgICAgICB0ZGVzY191c2VfcmVnaXN0ZXJzIChnZGJhcmNoLCB0ZGVzYywgc3RkOjpt b3ZlICh0ZGVzY19kYXRhKSwKKwkJCSAgIGludGVsZ3RfdW5rbm93bl9yZWdpc3Rlcl9jYik7CisK KyAgICAgIC8qIE5vdyBjaGVjayB0aGUgY29sbGVjdGVkIG1ldGFkYXRhIHRvIGVuc3VyZSB0aGF0 IGFsbAorCSBtYW5kYXRvcnkgcGllY2VzIGFyZSBpbiBwbGFjZS4gICovCisKKyAgICAgIGlmIChk YXRhLT5jZV9yZWdudW0gPT0gLTEpCisJZXJyb3IgKF8oIkRlYnVnZ2luZyByZXF1aXJlcyAkY2Ug cHJvdmlkZWQgYnkgdGhlIHRhcmdldCIpKTsKKyAgICAgIGlmIChkYXRhLT5yZXR2YWxfcmVnbnVt ID09IC0xKQorCWVycm9yIChfKCJEZWJ1Z2dpbmcgcmVxdWlyZXMgcmV0dXJuIHZhbHVlIHJlZ2lz dGVyIHRvIGJlIHByb3ZpZGVkICIKKwkJICJieSB0aGUgdGFyZ2V0IikpOworICAgICAgaWYgKGRh dGEtPmNyMF9yZWdudW0gPT0gLTEpCisJZXJyb3IgKF8oIkRlYnVnZ2luZyByZXF1aXJlcyBjb250 cm9sIHJlZ2lzdGVyIHRvIGJlIHByb3ZpZGVkIGJ5ICIKKwkJICJ0aGUgdGFyZ2V0IikpOworICAg ICAgaWYgKGRhdGEtPnNyMF9yZWdudW0gPT0gLTEpCisJZXJyb3IgKF8oIkRlYnVnZ2luZyByZXF1 aXJlcyBzdGF0ZSByZWdpc3RlciB0byBiZSBwcm92aWRlZCBieSAiCisJCSAidGhlIHRhcmdldCIp KTsKKworICAgICAgLyogVW5jb25kaXRpb25hbGx5IGVuYWJsZWQgcHNldWRvLXJlZ2lzdGVyczog ICovCisgICAgICBkYXRhLT5lbmFibGVkX3BzZXVkb19yZWdzLnB1c2hfYmFjayAoImlwIik7Cisg ICAgICBkYXRhLT5lbmFibGVkX3BzZXVkb19yZWdzLnB1c2hfYmFjayAoImZyYW1lZGVzYyIpOwor CisgICAgICBzZXRfZ2RiYXJjaF9udW1fcHNldWRvX3JlZ3MgKGdkYmFyY2gsIGRhdGEtPmVuYWJs ZWRfcHNldWRvX3JlZ3Muc2l6ZSAoKSk7CisgICAgICBzZXRfZ2RiYXJjaF9wc2V1ZG9fcmVnaXN0 ZXJfcmVhZF92YWx1ZSAoCisJICBnZGJhcmNoLCBpbnRlbGd0X3BzZXVkb19yZWdpc3Rlcl9yZWFk X3ZhbHVlKTsKKyAgICAgIHNldF9nZGJhcmNoX3BzZXVkb19yZWdpc3Rlcl93cml0ZSAoZ2RiYXJj aCwKKwkJCQkJIGludGVsZ3RfcHNldWRvX3JlZ2lzdGVyX3dyaXRlKTsKKyAgICAgIHNldF90ZGVz Y19wc2V1ZG9fcmVnaXN0ZXJfdHlwZSAoZ2RiYXJjaCwgaW50ZWxndF9wc2V1ZG9fcmVnaXN0ZXJf dHlwZSk7CisgICAgICBzZXRfdGRlc2NfcHNldWRvX3JlZ2lzdGVyX25hbWUgKGdkYmFyY2gsIGlu dGVsZ3RfcHNldWRvX3JlZ2lzdGVyX25hbWUpOworICAgICAgc2V0X2dkYmFyY2hfcmVhZF9wYyAo Z2RiYXJjaCwgaW50ZWxndF9yZWFkX3BjKTsKKyAgICAgIHNldF9nZGJhcmNoX3dyaXRlX3BjIChn ZGJhcmNoLCBpbnRlbGd0X3dyaXRlX3BjKTsKKyAgICB9CisKKyAgLyogUG9wdWxhdGUgZ2RiYXJj aCBmaWVsZHMuICAqLworICBzZXRfZ2RiYXJjaF9wdHJfYml0IChnZGJhcmNoLCA2NCk7CisgIHNl dF9nZGJhcmNoX2FkZHJfYml0IChnZGJhcmNoLCA2NCk7CisgIHNldF9nZGJhcmNoX2xvbmdfYml0 IChnZGJhcmNoLCA2NCk7CisKKyAgc2V0X2dkYmFyY2hfcmVnaXN0ZXJfdHlwZSAoZ2RiYXJjaCwg dGRlc2NfcmVnaXN0ZXJfdHlwZSk7CisgIHNldF9nZGJhcmNoX2R3YXJmMl9yZWdfdG9fcmVnbnVt IChnZGJhcmNoLCBpbnRlbGd0X2R3YXJmX3JlZ190b19yZWdudW0pOworCisgIHNldF9nZGJhcmNo X3NraXBfcHJvbG9ndWUgKGdkYmFyY2gsIGludGVsZ3Rfc2tpcF9wcm9sb2d1ZSk7CisgIHNldF9n ZGJhcmNoX2lubmVyX3RoYW4gKGdkYmFyY2gsIGNvcmVfYWRkcl9ncmVhdGVydGhhbik7CisgIHNl dF9nZGJhcmNoX3Vud2luZF9wYyAoZ2RiYXJjaCwgaW50ZWxndF91bndpbmRfcGMpOworICBkd2Fy ZjJfYXBwZW5kX3Vud2luZGVycyAoZ2RiYXJjaCk7CisgIGZyYW1lX3Vud2luZF9hcHBlbmRfdW53 aW5kZXIgKGdkYmFyY2gsICZpbnRlbGd0X2ZyYW1lX3Vud2luZCk7CisKKyAgc2V0X2dkYmFyY2hf cmV0dXJuX3ZhbHVlX2FzX3ZhbHVlIChnZGJhcmNoLCBpbnRlbGd0X3JldHVybl92YWx1ZV9hc192 YWx1ZSk7CisKKyAgc2V0X2dkYmFyY2hfbWVtb3J5X2luc2VydF9icmVha3BvaW50IChnZGJhcmNo LAorCQkJCQlpbnRlbGd0X21lbW9yeV9pbnNlcnRfYnJlYWtwb2ludCk7CisgIHNldF9nZGJhcmNo X21lbW9yeV9yZW1vdmVfYnJlYWtwb2ludCAoZ2RiYXJjaCwKKwkJCQkJaW50ZWxndF9tZW1vcnlf cmVtb3ZlX2JyZWFrcG9pbnQpOworICBzZXRfZ2RiYXJjaF9wcm9ncmFtX2JyZWFrcG9pbnRfaGVy ZV9wIChnZGJhcmNoLAorCQkJCQkgaW50ZWxndF9wcm9ncmFtX2JyZWFrcG9pbnRfaGVyZV9wKTsK KyAgc2V0X2dkYmFyY2hfYnJlYWtwb2ludF9raW5kX2Zyb21fcGMgKGdkYmFyY2gsCisJCQkJICAg ICAgIGludGVsZ3RfYnJlYWtwb2ludF9raW5kX2Zyb21fcGMpOworICBzZXRfZ2RiYXJjaF9zd19i cmVha3BvaW50X2Zyb21fa2luZCAoZ2RiYXJjaCwKKwkJCQkgICAgICAgaW50ZWxndF9zd19icmVh a3BvaW50X2Zyb21fa2luZCk7CisgIGR3YXJmMl9mcmFtZV9zZXRfaW5pdF9yZWcgKGdkYmFyY2gs IGludGVsZ3RfaW5pdF9yZWcpOworCisgIC8qIERpc2Fzc2VtYmx5LiAgKi8KKyAgc2V0X2dkYmFy Y2hfcHJpbnRfaW5zbiAoZ2RiYXJjaCwgaW50ZWxndF9wcmludF9pbnNuKTsKKworICByZXR1cm4g Z2RiYXJjaF91LnJlbGVhc2UgKCk7Cit9CisKK3N0YXRpYyB2b2lkCitzaG93X2ludGVsZ3RfZGVi dWcgKHVpX2ZpbGUgKmZpbGUsIGludCBmcm9tX3R0eSwKKwkJICAgIGNtZF9saXN0X2VsZW1lbnQg KmMsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworICBnZGJfcHJpbnRmIChmaWxlLCBfKCJJbnRlbChS KSBHcmFwaGljcyBUZWNobm9sb2d5IGRlYnVnZ2luZyBpcyAiCisJCSAgICAgICIlcy5cbiIpLCB2 YWx1ZSk7Cit9CisKK0lOSVRfR0RCX0ZJTEUgKGludGVsZ3RfdGRlcCkKK3sKKyAgZ2RiYXJjaF9y ZWdpc3RlciAoYmZkX2FyY2hfaW50ZWxndCwgaW50ZWxndF9nZGJhcmNoX2luaXQpOworCisgIC8q IERlYnVnZ2luZyBmbGFnLiAgKi8KKyAgYWRkX3NldHNob3dfYm9vbGVhbl9jbWQgKCJpbnRlbGd0 IiwgY2xhc3NfbWFpbnRlbmFuY2UsICZpbnRlbGd0X2RlYnVnLAorCQkJICAgXygiU2V0IEludGVs KFIpIEdyYXBoaWNzIFRlY2hub2xvZ3kgZGVidWdnaW5nLiIpLAorCQkJICAgXygiU2hvdyBJbnRl bChSKSBHcmFwaGljcyBUZWNobm9sb2d5IGRlYnVnZ2luZy4iKSwKKwkJCSAgIF8oIldoZW4gb24s IEludGVsKFIpIEdyYXBoaWNzIFRlY2hub2xvZ3kgIgorCQkJICAgICAiZGVidWdnaW5nIGlzIGVu YWJsZWQuIiksCisJCQkgICBudWxscHRyLAorCQkJICAgc2hvd19pbnRlbGd0X2RlYnVnLAorCQkJ ICAgJnNldGRlYnVnbGlzdCwgJnNob3dkZWJ1Z2xpc3QpOworfQpkaWZmIC0tZ2l0IGEvZ2RiL3Nl bGZ0ZXN0LWFyY2guYyBiL2dkYi9zZWxmdGVzdC1hcmNoLmMKaW5kZXggNDUyMjU4YzBlYjlhMTM0 NjIyMjQ3N2FlNjgyYjcxMmY0NWQwMDcyOS4uMWNiYjA2NWU1ODExZTE2Yzc0NmQyZDAwNjEzMjFi MmZiZGY1YjNlYSAxMDA2NDQKLS0tIGEvZ2RiL3NlbGZ0ZXN0LWFyY2guYworKysgYi9nZGIvc2Vs ZnRlc3QtYXJjaC5jCkBAIC0xMjIsOSArMTIyLDEzIEBAIHNlbGZ0ZXN0X3NraXBfd2FybmluZ19h cmNoIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCkKICAgICAgICBTdGFjayBiYWNrdHJhY2Ugd2ls bCBub3Qgd29yay4KICAgICAgV2UgY291bGQgaW5zdGVhZCBjYXB0dXJlIHRoZSBvdXRwdXQgYW5k IHRoZW4gZmlsdGVyIG91dCB0aGUgd2FybmluZywgYnV0CiAgICAgIHRoYXQgc2VlbXMgbW9yZSB0 cm91YmxlIHRoYW4gaXQncyB3b3J0aC4gICovCisgIC8qIFRoZSAnaW50ZWxndCcgYXJjaCBwb3B1 bGF0ZXMgdGhlIHJlZ2lzdGVyIHNldHMgZHluYW1pY2FsbHkgYmFzZWQgb24KKyAgICAgd2hhdCB0 aGUgdGFyZ2V0IHJlcG9ydHMuICBXaXRoIG5vIHRhcmdldCBkZXNjcmlwdGlvbiwgdGhlIHJlZ2lz dGVyCisgICAgIGZpbGUgaXMgZW1wdHkuICAqLwogICByZXR1cm4gKHN0cmNtcCAobmFtZSwgIm02 OGhjMTEiKSA9PSAwCiAJICB8fCBzdHJjbXAgKG5hbWUsICJtNjhoYzEyIikgPT0gMAotCSAgfHwg c3RyY21wIChuYW1lLCAibTY4aGMxMjpIQ1MxMiIpID09IDApOworCSAgfHwgc3RyY21wIChuYW1l LCAibTY4aGMxMjpIQ1MxMiIpID09IDAKKwkgIHx8IHN0cmNtcCAobmFtZSwgImludGVsZ3QiKSA9 PSAwKTsKIH0KIAogfSAvKiBuYW1lc3BhY2Ugc2VsZnRlc3RzICovCgotLSAKMi4zNC4xCgpJbnRl bCBEZXV0c2NobGFuZCBHbWJIDQpSZWdpc3RlcmVkIEFkZHJlc3M6IEFtIENhbXBlb24gMTAsIDg1 NTc5IE5ldWJpYmVyZywgR2VybWFueQ0KVGVsOiArNDkgODkgOTkgODg1My0wLCB3d3cuaW50ZWwu ZGUNCk1hbmFnaW5nIERpcmVjdG9yczogU2VhbiBGZW5uZWxseSwgSmVmZnJleSBTY2huZWlkZXJt YW4sIFRpZmZhbnkgRG9vbiBTaWx2YQ0KQ2hhaXJwZXJzb24gb2YgdGhlIFN1cGVydmlzb3J5IEJv YXJkOiBOaWNvbGUgTGF1DQpSZWdpc3RlcmVkIE9mZmljZTogTXVuaWNoDQpDb21tZXJjaWFsIFJl Z2lzdGVyOiBBbXRzZ2VyaWNodCBNdWVuY2hlbiBIUkIgMTg2OTI4Cg==