From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa4.mentor.iphmx.com (esa4.mentor.iphmx.com [68.232.137.252]) by sourceware.org (Postfix) with ESMTPS id B3FF93858D28 for ; Tue, 18 Jan 2022 15:22:45 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org B3FF93858D28 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com IronPort-SDR: ow3jK3+2m1dIQzGt5S+Rb9c6qknnkNJ2gCzR2PnvMk/n16Yr/7hQsK7N7wUr3bAYa2w9yVx/x9 bW20z5EQoEjQuuITKxwA7CfzMeJaAynzu57ruEwgd8OHN9vUNIxvNGwwdbhCrmWsVSTxOnOw/3 keqsjHFg1tOCCN3USlynDq6racxTkziQXe5JmunqKi7s7qEqQop2WYHvqpF14S2NQrLLG+8ra3 EisGm/oxHTj3IppAU5mdf/rMMrQGWSzEBYPjyB6Y1me33LLPxECv+2QZabq8RJiRid+0nRS3P4 bOhBSpWEtYkAP6ee8oUjQLjw X-IronPort-AV: E=Sophos;i="5.88,297,1635235200"; d="diff'?scan'208";a="70882340" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa4.mentor.iphmx.com with ESMTP; 18 Jan 2022 07:22:43 -0800 IronPort-SDR: r9W8jSF3KodBbxh/9YOW0ezjxibSPr2V/D7wo9xW05M/K7CNPqgzYvnzqOoQAuaci3iVn94pod maKMVtwAyZbyId+7pvkiPkdEtxXI5bRsYiIwMrkRh3Qln57ARxnzMXTdv3/huEyFSR4QetdpDb oPHH7k/zOvUwM9ElY8Y36w2x7LaSkE9LUCBGRHNVkt13HUUQYvotRvltS0b0HwKoGP6Ezr/vCP TN27klHpg9ssEii3+CgJJ1DAvPLGASgEyfkgNlxEQR+P4MtjCEbmhk4O3cKScPgReMjIJT54FR o3Q= Content-Type: multipart/mixed; boundary="------------xqt5fNPsMjiDo5D1NhAM0y19" Message-ID: Date: Tue, 18 Jan 2022 16:22:37 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 From: Marcel Vollweiler Subject: OpenMP, libgomp: Environment variable syntax extension. To: X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: SVR-IES-MBX-08.mgc.mentorg.com (139.181.222.8) To SVR-IES-MBX-03.mgc.mentorg.com (139.181.222.3) X-Spam-Status: No, score=-12.8 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 18 Jan 2022 15:22:52 -0000 --------------xqt5fNPsMjiDo5D1NhAM0y19 Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable Hi, This patch considers the environment variable syntax extension for device-specific variants of environment variables from OpenMP 5.1 (see OpenMP 5.1 specification, p. 75 and p. 639). An environment variable (e.g. OMP_NUM_TEAMS) can have different suffixes: _DEV (e.g. OMP_NUM_TEAMS_DEV): affects all devices but not the host. _DEV_ (e.g. OMP_NUM_TEAMS_DEV_42): affects only device with number . no suffix (e.g. OMP_NUM_TEAMS): affects only the host. In future OpenMP versions also suffix _ALL will be introduced (see discussion https://github.com/OpenMP/spec/issues/3179). This is also considered in this patch: _ALL (e.g. OMP_NUM_TEAMS_ALL): affects all devices and the host. The precedence is as follows (descending). For the host: 1. no suffix 2. _ALL For devices: 1. _DEV_ 2. _DEV 3. _ALL That means, _DEV_ is used whenever available. Otherwise _DEV is used if available, and at last _ALL. If there is no value for any of the variable variants, default values are used as already implemented before. This patch concerns parsing (a), storing (b), output (c) and transmission to the device (d): (a) The actual number of devices and the numbering are not known when parsing the environment variables. Thus all environment variables are iterated and searched for device-specific ones. (b) Only configured device-specific variables are stored. Thus, linked lists are used. (c) The output is done in omp_display_env (see specification p. 468f). Global ICVs are tagged with [all], see https://github.com/OpenMP/spec/issues/3179. ICVs which are not global but aren't handled device-specific yet are tagged with [host]. omp_display_env outputs the initial values of the ICVs. That's why separate data structures are introduced (like gomp_initial_icv...). (d) Device-specific ICVs which are already user accessible on the device are transmitted to the device (moreover nteams-var is added and used for the tests). There are ICVs which values are currently set explicitly in the config when copying them to the device: GOMP_NTHREADS_VAR, GOMP_THREAD_LIMIT_VAR, GOMP_DYN_VAR (see gomp_gcn_enter_kernel in libgomp/config/gcn/team.c and gomp_nvptx_main in libgomp/config/nvptx/team.c). The corresponding environment variables are nevertheless parsed and stored device-specific but the transmission to the device is not changed. Marcel ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstra=C3=9Fe 201= , 80634 M=C3=BCnchen; Gesellschaft mit beschr=C3=A4nkter Haftung; Gesch=C3= =A4ftsf=C3=BChrer: Thomas Heurung, Frank Th=C3=BCrauf; Sitz der Gesellschaf= t: M=C3=BCnchen; Registergericht M=C3=BCnchen, HRB 106955 --------------xqt5fNPsMjiDo5D1NhAM0y19 Content-Type: text/plain; charset="UTF-8"; name="extend-env-variables-syntax.diff" Content-Disposition: attachment; filename="extend-env-variables-syntax.diff" Content-Transfer-Encoding: base64 T3Blbk1QLCBsaWJnb21wOiBFbnZpcm9ubWVudCB2YXJpYWJsZSBzeW50YXggZXh0ZW5zaW9u LgoKVGhpcyBwYXRjaCBjb25zaWRlcnMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHN5bnRh eCBleHRlbnNpb24gZm9yCmRldmljZS1zcGVjaWZpYyB2YXJpYW50cyBvZiBlbnZpcm9ubWVu dCB2YXJpYWJsZXMgZnJvbSBPcGVuTVAgNS4xIChzZWUKT3Blbk1QIDUuMSBzcGVjaWZpY2F0 aW9uLCBwLiA3NSBhbmQgcC4gNjM5KS4gQW4gZW52aXJvbm1lbnQgdmFyaWFibGUgKGUuZy4K T01QX05VTV9URUFNUykgY2FuIGhhdmUgZGlmZmVyZW50IHN1ZmZpeGVzOgoKX0RFViAoZS5n LiBPTVBfTlVNX1RFQU1TX0RFVik6IGFmZmVjdHMgYWxsIGRldmljZXMgYnV0IG5vdCB0aGUg aG9zdC4KX0RFVl88ZGV2aWNlPiAoZS5nLiBPTVBfTlVNX1RFQU1TX0RFVl80Mik6IGFmZmVj dHMgb25seSBkZXZpY2Ugd2l0aApudW1iZXIgPGRldmljZT4uCm5vIHN1ZmZpeCAoZS5nLiBP TVBfTlVNX1RFQU1TKTogYWZmZWN0cyBvbmx5IHRoZSBob3N0LgoKSW4gZnV0dXJlIE9wZW5N UCB2ZXJzaW9ucyBhbHNvIHN1ZmZpeCBfQUxMIHdpbGwgYmUgaW50cm9kdWNlZCAoc2VlIGRp c2N1c3Npb24KaHR0cHM6Ly9naXRodWIuY29tL09wZW5NUC9zcGVjL2lzc3Vlcy8zMTc5KS4g VGhpcyBpcyBhbHNvIGNvbnNpZGVyZWQgaW4gdGhpcwpwYXRjaDoKCl9BTEwgKGUuZy4gT01Q X05VTV9URUFNU19BTEwpOiBhZmZlY3RzIGFsbCBkZXZpY2VzIGFuZCB0aGUgaG9zdC4KCQpU aGUgcHJlY2VkZW5jZSBpcyBhcyBmb2xsb3dzIChkZXNjZW5kaW5nKS4gRm9yIHRoZSBob3N0 OgoKCTEuIG5vIHN1ZmZpeAoJMi4gX0FMTAoJCkZvciBkZXZpY2VzOgoKCTEuIF9ERVZfPGRl dmljZT4KCTIuIF9ERVYKCTMuIF9BTEwKCQpUaGF0IG1lYW5zLCBfREVWXzxkZXZpY2U+IGlz IHVzZWQgd2hlbmV2ZXIgYXZhaWxhYmxlLiBPdGhlcndpc2UgX0RFViBpcyB1c2VkIGlmCmF2 YWlsYWJsZSwgYW5kIGF0IGxhc3QgX0FMTC4gSWYgdGhlcmUgaXMgbm8gdmFsdWUgZm9yIGFu eSBvZiB0aGUgdmFyaWFibGUKdmFyaWFudHMsIGRlZmF1bHQgdmFsdWVzIGFyZSB1c2VkIGFz IGFscmVhZHkgaW1wbGVtZW50ZWQgYmVmb3JlLgoKVGhpcyBwYXRjaCBjb25jZXJucyBwYXJz aW5nIChhKSwgc3RvcmluZyAoYiksIG91dHB1dCAoYykgYW5kIHRyYW5zbWlzc2lvbiB0byB0 aGUgZGV2aWNlIChkKToKCihhKSBUaGUgYWN0dWFsIG51bWJlciBvZiBkZXZpY2VzIGFuZCB0 aGUgbnVtYmVyaW5nIGFyZSBub3Qga25vd24gd2hlbiBwYXJzaW5nCnRoZSBlbnZpcm9ubWVu dCB2YXJpYWJsZXMuIFRodXMgYWxsIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgaXRlcmF0 ZWQgYW5kCnNlYXJjaGVkIGZvciBkZXZpY2Utc3BlY2lmaWMgb25lcy4KKGIpIE9ubHkgY29u ZmlndXJlZCBkZXZpY2Utc3BlY2lmaWMgdmFyaWFibGVzIGFyZSBzdG9yZWQuIFRodXMsIGxp bmtlZCBsaXN0cwphcmUgdXNlZC4KKGMpIFRoZSBvdXRwdXQgaXMgZG9uZSBpbiBvbXBfZGlz cGxheV9lbnYgKHNlZSBzcGVjaWZpY2F0aW9uIHAuIDQ2OGYpLiBHbG9iYWwKSUNWcyBhcmUg dGFnZ2VkIHdpdGggW2FsbF0sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vT3Blbk1QL3NwZWMv aXNzdWVzLzMxNzkuCklDVnMgd2hpY2ggYXJlIG5vdCBnbG9iYWwgYnV0IGFyZW4ndCBoYW5k bGVkIGRldmljZS1zcGVjaWZpYyB5ZXQgYXJlIHRhZ2dlZAp3aXRoIFtob3N0XS4gb21wX2Rp c3BsYXlfZW52IG91dHB1dHMgdGhlIGluaXRpYWwgdmFsdWVzIG9mIHRoZSBJQ1ZzLiBUaGF0 J3Mgd2h5CnNlcGFyYXRlIGRhdGEgc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZCAobGlrZSBn b21wX2luaXRpYWxfaWN2Li4uKS4KKGQpIERldmljZS1zcGVjaWZpYyBJQ1ZzIHdoaWNoIGFy ZSBhbHJlYWR5IHVzZXIgYWNjZXNzaWJsZSBvbiB0aGUgZGV2aWNlIGFyZQp0cmFuc21pdHRl ZCB0byB0aGUgZGV2aWNlIChtb3Jlb3ZlciBudGVhbXMtdmFyIGlzIGFkZGVkIGFuZCB1c2Vk IGZvciB0aGUgdGVzdHMpLgpUaGVyZSBhcmUgSUNWcyB3aGljaCB2YWx1ZXMgYXJlIGN1cnJl bnRseSBzZXQgZXhwbGljaXRseSBpbiB0aGUgY29uZmlnIHdoZW4KY29weWluZyB0aGVtIHRv IHRoZSBkZXZpY2U6IEdPTVBfTlRIUkVBRFNfVkFSLCBHT01QX1RIUkVBRF9MSU1JVF9WQVIs CkdPTVBfRFlOX1ZBUiAoc2VlIGdvbXBfZ2NuX2VudGVyX2tlcm5lbCBpbiBsaWJnb21wL2Nv bmZpZy9nY24vdGVhbS5jIGFuZApnb21wX252cHR4X21haW4gaW4gbGliZ29tcC9jb25maWcv bnZwdHgvdGVhbS5jKS4gVGhlIGNvcnJlc3BvbmRpbmcgZW52aXJvbm1lbnQKdmFyaWFibGVz IGFyZSBuZXZlcnRoZWxlc3MgcGFyc2VkIGFuZCBzdG9yZWQgZGV2aWNlLXNwZWNpZmljIGJ1 dCB0aGUKdHJhbnNtaXNzaW9uIHRvIHRoZSBkZXZpY2UgaXMgbm90IGNoYW5nZWQuIAoKbGli Z29tcC9DaGFuZ2VMb2c6CgoJKiBjb25maWcvZ2NuL2ljdi1kZXZpY2UuYyAob21wX2dldF9k ZWZhdWx0X2RldmljZSk6IFJldHVybiBJQ1YgdmFsdWUuCgkob21wX2dldF9tYXhfdGVhbXMp OiBBZGRlZCBmb3IgR0NOIGRldmljZXMuCgkqIGNvbmZpZy9udnB0eC9pY3YtZGV2aWNlLmMg KG9tcF9nZXRfZGVmYXVsdF9kZXZpY2UpOiBSZXR1cm4gSUNWIHZhbHVlLgoJKG9tcF9nZXRf bWF4X3RlYW1zKTogQWRkZWQgZm9yIG52cHR4IGRldmljZXMuCgkqIGVudi5jIChnb21wX2dl dF9pY3ZfbGlzdCk6IE5ldyBoZWxwZXIgZnVuY3Rpb24gdG8gcmV0dXJuIHRoZSBlbGVtZW50 IG9mIHRoZQoJbGlzdCBvZiBkZXZpY2Utc3BlY2lmaWMgSUNWIHZhbHVlcyBmb3IgdGhlIHNw ZWNpZmllZCBkZXZpY2UgbnVtYmVyLgoJKGdvbXBfZ2V0X2ljdl92YWx1ZV9wdHIpOiBMaWtl IGdvbXBfZ2V0X2ljdl9saXN0IGJ1dCByZXR1cm5zIHRoZSBhY3R1YWwgSUNWCgl2YWx1ZS4K CShwYXJzZV9zY2hlZHVsZSk6IEdlbmVyYWxpemVkIGZvciBkaWZmZXJlbnQgdmFyaWFudHMg b2YgT01QX1NDSEVEVUxFLgoJKHBhcnNlX3dhaXRfcG9saWN5KTogR2VuZXJhbGl6ZWQgZm9y IGRpZmZlcmVudCB2YXJpYW50cyBvZiBPTVBfV0FJVF9QT0xJQ1kuCgkob21wX2Rpc3BsYXlf ZW52KTogRXh0ZW5kZWQgdG8gb3V0cHV0IGRpZmZlcmVudCB2YXJpYW50cyBvZiBlbnZpcm9u bWVudAoJdmFyaWFibGVzLgoJKHByaW50X3NjaGVkdWxlKTogTmV3IGhlbHBlciBmdW5jdGlv biBmb3Igb21wX2Rpc3BsYXlfZW52IHdoaWNoIHByaW50cyB0aGUKCXZhbHVlcyBvZiBydW5f c2NoZWRfdmFyLgoJKHByaW50X3Byb2NfYmluZCk6IE5ldyBoZWxwZXIgZnVuY3Rpb24gZm9y IG9tcF9kaXNwbGF5X2VudiB3aGljaCBwcmludHMgdGhlCgl2YWx1ZXMgb2YgcHJvY19iaW5k X3Zhci4KCShnZXRfZGV2aWNlX251bSk6IE5ldyBoZWxwZXIgZnVuY3Rpb24gZm9yIHBhcnNl X2RldmljZV9zcGVjaWZpYy4gRXh0cmFjdHMgdGhlCglkZXZpY2UgbnVtYmVyIGZyb20gYW4g ZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZS4KCShhZGRfZGV2aWNlX3NwZWNpZmljX2ljdik6 IE5ldyBoZWxwZXIgZnVuY3Rpb24gZm9yIHBhcnNlX2RldmljZV9zcGVjaWZpYy4gQWRkcwoJ YSBuZXcgbm9kZSB0byB0aGUgZ2l2ZW4gbGlzdC4KCShwYXJzZV9kZXZpY2Vfc3BlY2lmaWMp OiBOZXcgaGVscGVyIGZ1bmN0aW9uIGZvciAnaW5pdGlhbGl6ZV9lbnYnIHRvIHBhcnNlCglk ZXZpY2Utc3BlY2lmaWMgZW52aXJvbm1lbnQgdmFyaWFibGVzLgoJKGluaXRpYWxpemVfZW52 KTogRXh0ZW5kZWQgdG8gcGFyc2UgdGhlIG5ldyBzeW50YXggb2YgZW52aXJvbm1lbnQgdmFy aWFibGVzLgoJKiBpY3YtZGV2aWNlLmMgKG9tcF9nZXRfbWF4X3RlYW1zKTogQWRkZWQgb21w X2dldF9tYXhfdGVhbXMuCgkqIGljdi5jIChvbXBfZ2V0X21heF90ZWFtcyk6IE1vdmVkIHRv IGljdi1kZXZpY2UuYy4KCSogbGliZ29tcC1wbHVnaW4uaCAoR09NUF9OVEhSRUFEU19WQVIp OiBOZXcgdGFyZ2V0LXNpZGUgdmFyaWFibGUgdGhhdCBob2xkcyB0aGUKCWRlc2lnbmF0ZWQg SUNWIG9mIHRoZSB0YXJnZXQgZGV2aWNlLgoJKEdPTVBfVEhSRUFEX0xJTUlUX1ZBUik6IExp a2V3aXNlLgoJKEdPTVBfUlVOX1NDSEVEX1ZBUik6IExpa2V3aXNlLgoJKEdPTVBfUlVOX1ND SEVEX0NIVU5LX1NJWkUpOiBMaWtld2lzZS4KCShHT01QX0RFRkFVTFRfREVWSUNFX1ZBUik6 IExpa2V3aXNlLgoJKEdPTVBfRFlOX1ZBUik6IExpa2V3aXNlLgoJKEdPTVBfTUFYX0FDVElW RV9MRVZFTFNfVkFSKTogTGlrZXdpc2UuCgkoR09NUF9CSU5EX1ZBUik6IExpa2V3aXNlLgoJ KEdPTVBfTlRFQU1TX1ZBUik6IExpa2V3aXNlLgoJKiBsaWJnb21wLmggKGVudW0gZ29tcF9l bnZfdmFyX3N1ZmZpeF90KTogRW51bSBvZiBmbGFncyB3aGljaCBhcmUgdXNlZCB0bwoJc3Rv cmUgd2l0aCB3aGljaCBzdWZmaXhlcyAoZm9yIHdoaWNoIHZhcmlhbnRzKSBlbnZpcm9ubWVu dCB2YXJpYWJsZXMgYXJlCglkZWZpbmVkLgoJKHN0cnVjdCBnb21wX2luaXRpYWxfaWN2X3Qp OiBDY29udGFpbnMgYWxsIElDVnMgZm9yIHdoaWNoIHdlIG5lZWQgdG8gc3RvcmUKCWluaXRp YWwgdmFsdWVzLgoJKHN0cnVjdCBnb21wX2ljdl9mbGFnc190KTogU3RvcmUgd2l0aCB3aGlj aCBzdWZmaXhlcyAoZm9yIHdoaWNoIHZhcmlhbnRzKQoJZW52aXJvbm1lbnQgdmFyaWFibGVz IGFyZSBkZWZpbmVkLgoJKHN0cnVjdCBnb21wX2ljdl9saXN0KTogRGVmaW5pdGlvbiBvZiBh IGxpbmtlZCBsaXN0IHRoYXQgaXMgdXNlZCBmb3Igc3RvcmluZwoJSUNWcyBmb3IgdGhlIGRl dmljZXMuCgkoZ29tcF9nZXRfaWN2X3ZhbHVlX3B0cik6IEltcGxlbWVudGVkIGluIGVudi5j LgoJKiBwbHVnaW4vcGx1Z2luLWdjbi5jIChHT01QX09GRkxPQURfbG9hZF9pbWFnZSk6IEV4 dGVuZGVkIHRvIHJlYWQgZnVydGhlciBJQ1ZzCglmcm9tIHRoZSBvZmZsb2FkIGltYWdlLgoJ KiBwbHVnaW4vcGx1Z2luLW52cHR4LmMgKEdPTVBfT0ZGTE9BRF9sb2FkX2ltYWdlKTogRXh0 ZW5kZWQgdG8gcmVhZCBmdXJ0aGVyCglJQ1ZzIGZyb20gdGhlIG9mZmxvYWQgaW1hZ2UuCgkq IHRhcmdldC5jIChnb21wX2dldF9pY3YpOiBOZXcgaGVscGVyIGZ1bmN0aW9uIGZvciAnZ29t cF9sb2FkX2ltYWdlX3RvX2RldmljZScKCXRoYXQgcmV0dXJucyB0aGUgcG9pbnRlciBmb3Ig YW4gSUNWIHZhbHVlIGRlcGVuZGluZyBvbiB0aGUgZGV2aWNlIG51bWJlciBhbmQKCXRoZSB2 YXJpYWJsZSBoaWVyYXJjaHkuCgkoZ29tcF9sb2FkX2ltYWdlX3RvX2RldmljZSk6IEV4dGVu ZGVkIHRvIGNvcHkgZnVydGhlciBJQ1ZzIHRvIHRoZSBkZXZpY2UuCgkqIHRlc3RzdWl0ZS9s aWJnb21wLmMtYysrLWNvbW1vbi9pY3YtNS5jOiBOZXcgdGVzdC4KCSogdGVzdHN1aXRlL2xp YmdvbXAuYy1jKystY29tbW9uL2ljdi02LmM6IE5ldyB0ZXN0LgoJKiB0ZXN0c3VpdGUvbGli Z29tcC5jLWMrKy1jb21tb24vaWN2LTcuYzogTmV3IHRlc3QuCgkqIHRlc3RzdWl0ZS9saWJn b21wLmMtYysrLWNvbW1vbi9vbXAtZGlzcGxheS1lbnYtMS5jOiBOZXcgdGVzdC4KCSogdGVz dHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL29tcC1kaXNwbGF5LWVudi0yLmM6IE5ldyB0 ZXN0LgoKZGlmZiAtLWdpdCBhL2xpYmdvbXAvY29uZmlnL2djbi9pY3YtZGV2aWNlLmMgYi9s aWJnb21wL2NvbmZpZy9nY24vaWN2LWRldmljZS5jCmluZGV4IGZjZmEwZjMuLjI2YjJlN2Eg MTAwNjQ0Ci0tLSBhL2xpYmdvbXAvY29uZmlnL2djbi9pY3YtZGV2aWNlLmMKKysrIGIvbGli Z29tcC9jb25maWcvZ2NuL2ljdi1kZXZpY2UuYwpAQCAtMjgsNiArMjgsMTYgQEAKIAogI2lu Y2x1ZGUgImxpYmdvbXAuaCIKIAorLyogVGhpcyBpcyBzZXQgdG8gdGhlIElDViB2YWx1ZXMg b2YgY3VycmVudCBHUFUgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbiwKKyAgIHdoZW4g dGhlIG9mZmxvYWQgaW1hZ2UgY29udGFpbmluZyB0aGlzIGxpYmdvbXAgcG9ydGlvbiBpcyBs b2FkZWQuICAqLwordm9sYXRpbGUgaW50IEdPTVBfREVWSUNFX05VTV9WQVI7Cit2b2xhdGls ZSBpbnQgR09NUF9SVU5fU0NIRURfVkFSOwordm9sYXRpbGUgaW50IEdPTVBfUlVOX1NDSEVE X0NIVU5LX1NJWkU7Cit2b2xhdGlsZSBpbnQgR09NUF9ERUZBVUxUX0RFVklDRV9WQVI7Cit2 b2xhdGlsZSBpbnQgR09NUF9NQVhfQUNUSVZFX0xFVkVMU19WQVI7Cit2b2xhdGlsZSBvbXBf cHJvY19iaW5kX3QgR09NUF9CSU5EX1ZBUjsKK3ZvbGF0aWxlIGludCBHT01QX05URUFNU19W QVI7CisKIHZvaWQKIG9tcF9zZXRfZGVmYXVsdF9kZXZpY2UgKGludCBkZXZpY2VfbnVtIF9f YXR0cmlidXRlX18oKHVudXNlZCkpKQogewpAQCAtMzYsNyArNDYsNyBAQCBvbXBfc2V0X2Rl ZmF1bHRfZGV2aWNlIChpbnQgZGV2aWNlX251bSBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSkK IGludAogb21wX2dldF9kZWZhdWx0X2RldmljZSAodm9pZCkKIHsKLSAgcmV0dXJuIDA7Cisg IHJldHVybiBHT01QX0RFRkFVTFRfREVWSUNFX1ZBUjsKIH0KIAogaW50CkBAIC01OCwxOSAr NjgsMjIgQEAgb21wX2lzX2luaXRpYWxfZGV2aWNlICh2b2lkKQogICByZXR1cm4gMDsKIH0K IAotLyogVGhpcyBpcyBzZXQgdG8gdGhlIGRldmljZSBudW1iZXIgb2YgY3VycmVudCBHUFUg ZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbiwKLSAgIHdoZW4gdGhlIG9mZmxvYWQgaW1h Z2UgY29udGFpbmluZyB0aGlzIGxpYmdvbXAgcG9ydGlvbiBpcyBsb2FkZWQuICAqLwotc3Rh dGljIHZvbGF0aWxlIGludCBHT01QX0RFVklDRV9OVU1fVkFSOwotCiBpbnQKIG9tcF9nZXRf ZGV2aWNlX251bSAodm9pZCkKIHsKICAgcmV0dXJuIEdPTVBfREVWSUNFX05VTV9WQVI7CiB9 CiAKK2ludAorb21wX2dldF9tYXhfdGVhbXMgKHZvaWQpCit7CisgIHJldHVybiBHT01QX05U RUFNU19WQVI7Cit9CisKIGlhbGlhcyAob21wX3NldF9kZWZhdWx0X2RldmljZSkKIGlhbGlh cyAob21wX2dldF9kZWZhdWx0X2RldmljZSkKIGlhbGlhcyAob21wX2dldF9pbml0aWFsX2Rl dmljZSkKIGlhbGlhcyAob21wX2dldF9udW1fZGV2aWNlcykKIGlhbGlhcyAob21wX2lzX2lu aXRpYWxfZGV2aWNlKQogaWFsaWFzIChvbXBfZ2V0X2RldmljZV9udW0pCitpYWxpYXMgKG9t cF9nZXRfbWF4X3RlYW1zKQpkaWZmIC0tZ2l0IGEvbGliZ29tcC9jb25maWcvbnZwdHgvaWN2 LWRldmljZS5jIGIvbGliZ29tcC9jb25maWcvbnZwdHgvaWN2LWRldmljZS5jCmluZGV4IGZh ZjkwZjkuLmY3NDRlNzUgMTAwNjQ0Ci0tLSBhL2xpYmdvbXAvY29uZmlnL252cHR4L2ljdi1k ZXZpY2UuYworKysgYi9saWJnb21wL2NvbmZpZy9udnB0eC9pY3YtZGV2aWNlLmMKQEAgLTI4 LDYgKzI4LDE2IEBACiAKICNpbmNsdWRlICJsaWJnb21wLmgiCiAKKy8qIFRoaXMgaXMgc2V0 IHRvIHRoZSBJQ1YgdmFsdWVzIG9mIGN1cnJlbnQgR1BVIGR1cmluZyBkZXZpY2UgaW5pdGlh bGl6YXRpb24sCisgICB3aGVuIHRoZSBvZmZsb2FkIGltYWdlIGNvbnRhaW5pbmcgdGhpcyBs aWJnb21wIHBvcnRpb24gaXMgbG9hZGVkLiAgKi8KK3N0YXRpYyB2b2xhdGlsZSBpbnQgR09N UF9ERVZJQ0VfTlVNX1ZBUjsKK3N0YXRpYyB2b2xhdGlsZSBpbnQgR09NUF9SVU5fU0NIRURf VkFSOworc3RhdGljIHZvbGF0aWxlIGludCBHT01QX1JVTl9TQ0hFRF9DSFVOS19TSVpFOwor c3RhdGljIHZvbGF0aWxlIGludCBHT01QX0RFRkFVTFRfREVWSUNFX1ZBUjsKK3N0YXRpYyB2 b2xhdGlsZSBpbnQgR09NUF9NQVhfQUNUSVZFX0xFVkVMU19WQVI7CitzdGF0aWMgdm9sYXRp bGUgb21wX3Byb2NfYmluZF90IEdPTVBfQklORF9WQVI7CitzdGF0aWMgdm9sYXRpbGUgaW50 IEdPTVBfTlRFQU1TX1ZBUjsKKwogdm9pZAogb21wX3NldF9kZWZhdWx0X2RldmljZSAoaW50 IGRldmljZV9udW0gX19hdHRyaWJ1dGVfXygodW51c2VkKSkpCiB7CkBAIC0zNiw3ICs0Niw3 IEBAIG9tcF9zZXRfZGVmYXVsdF9kZXZpY2UgKGludCBkZXZpY2VfbnVtIF9fYXR0cmlidXRl X18oKHVudXNlZCkpKQogaW50CiBvbXBfZ2V0X2RlZmF1bHRfZGV2aWNlICh2b2lkKQogewot ICByZXR1cm4gMDsKKyAgcmV0dXJuIEdPTVBfREVGQVVMVF9ERVZJQ0VfVkFSOwogfQogCiBp bnQKQEAgLTU4LDE5ICs2OCwyMiBAQCBvbXBfaXNfaW5pdGlhbF9kZXZpY2UgKHZvaWQpCiAg IHJldHVybiAwOwogfQogCi0vKiBUaGlzIGlzIHNldCB0byB0aGUgZGV2aWNlIG51bWJlciBv ZiBjdXJyZW50IEdQVSBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLAotICAgd2hlbiB0 aGUgb2ZmbG9hZCBpbWFnZSBjb250YWluaW5nIHRoaXMgbGliZ29tcCBwb3J0aW9uIGlzIGxv YWRlZC4gICovCi1zdGF0aWMgdm9sYXRpbGUgaW50IEdPTVBfREVWSUNFX05VTV9WQVI7Ci0K IGludAogb21wX2dldF9kZXZpY2VfbnVtICh2b2lkKQogewogICByZXR1cm4gR09NUF9ERVZJ Q0VfTlVNX1ZBUjsKIH0KIAoraW50CitvbXBfZ2V0X21heF90ZWFtcyAodm9pZCkKK3sKKyAg cmV0dXJuIEdPTVBfTlRFQU1TX1ZBUjsKK30KKwogaWFsaWFzIChvbXBfc2V0X2RlZmF1bHRf ZGV2aWNlKQogaWFsaWFzIChvbXBfZ2V0X2RlZmF1bHRfZGV2aWNlKQogaWFsaWFzIChvbXBf Z2V0X2luaXRpYWxfZGV2aWNlKQogaWFsaWFzIChvbXBfZ2V0X251bV9kZXZpY2VzKQogaWFs aWFzIChvbXBfaXNfaW5pdGlhbF9kZXZpY2UpCiBpYWxpYXMgKG9tcF9nZXRfZGV2aWNlX251 bSkKK2lhbGlhcyAob21wX2dldF9tYXhfdGVhbXMpCmRpZmYgLS1naXQgYS9saWJnb21wL2Vu di5jIGIvbGliZ29tcC9lbnYuYwppbmRleCAxYzRlZTg5Li43NDgwM2VjIDEwMDY0NAotLS0g YS9saWJnb21wL2Vudi5jCisrKyBiL2xpYmdvbXAvZW52LmMKQEAgLTczLDYgKzczLDc0IEBA IHN0cnVjdCBnb21wX3Rhc2tfaWN2IGdvbXBfZ2xvYmFsX2ljdiA9IHsKICAgLnRhcmdldF9k YXRhID0gTlVMTAogfTsKIAorLyogVGhlIGluaXRpYWwgSUNWIHZhbHVlcyBmb3IgdGhlIGhv c3QuICAqLworc3RydWN0IGdvbXBfaW5pdGlhbF9pY3ZfdCBnb21wX2luaXRpYWxfaWN2Owor CisvKiBJbml0aWFsIElDViB2YWx1ZXMgdGhhdCB3ZXJlIGNvbmZpZ3VyZWQgZm9yIHRoZSBo b3N0IGFuZCBmb3IgYWxsIGRldmljZXMgYnkKKyAgIHVzaW5nIGVudmlyb25tZW50IHZhcmlh YmxlcyBsaWtlIE9NUF9OVU1fVEVBTVNfQUxMLiAgKi8KK3N0cnVjdCBnb21wX2luaXRpYWxf aWN2X3QgZ29tcF9pbml0aWFsX2ljdl9hbGw7CisKKy8qIEluaXRpYWwgSUNWIHZhbHVlcyB0 aGF0IHdlcmUgY29uZmlndXJlZCBvbmx5IGZvciBkZXZpY2VzIChub3QgZm9yIHRoZSBob3N0 KQorICAgYnkgdXNpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGxpa2UgT01QX05VTV9URUFN U19ERVYuICAqLworc3RydWN0IGdvbXBfaW5pdGlhbF9pY3ZfdCBnb21wX2luaXRpYWxfaWN2 X2RldjsKKworLyogUmV0dXJucyB0aGUgZWxlbWVudCBvZiB0aGUgbGlzdCBmb3IgdGhlIHNw ZWNpZmllZCBkZXZpY2UgbnVtYmVyLiAgKi8KK3N0cnVjdCBnb21wX2ljdl9saXN0KgorZ29t cF9nZXRfaWN2X2xpc3QgKHN0cnVjdCBnb21wX2ljdl9saXN0ICoqbGlzdCwgaW50IGRldmlj ZV9udW0pCit7CisgIHN0cnVjdCBnb21wX2ljdl9saXN0ICpsID0gKmxpc3Q7CisgIHdoaWxl IChsICE9IE5VTEwpCisgICAgeworICAgICAgaWYgKGwtPmRldmljZV9udW0gPT0gZGV2aWNl X251bSkKKwlyZXR1cm4gbDsKKyAgICAgIGwgPSBsLT5uZXh0OworICAgIH0KKyAgcmV0dXJu IE5VTEw7Cit9CisKK3ZvaWQqCitnb21wX2dldF9pY3ZfdmFsdWVfcHRyIChzdHJ1Y3QgZ29t cF9pY3ZfbGlzdCAqKmxpc3QsIGludCBkZXZpY2VfbnVtKQoreworICBzdHJ1Y3QgZ29tcF9p Y3ZfbGlzdCAqbCA9IGdvbXBfZ2V0X2ljdl9saXN0IChsaXN0LCBkZXZpY2VfbnVtKTsKKyAg aWYgKGwgPT0gTlVMTCkKKyAgICByZXR1cm4gTlVMTDsKKyAgcmV0dXJuIGwtPnZhbHVlOwor fQorCisvKiBMaXN0cyBmb3IgaW5pdGlhbCBkZXZpY2Utc3BlY2lmaWMgSUNWcywgaS5lLiBJ Q1ZzIHRoYXQgYXJlIGNvbmZpZ3VyZWQgZm9yCisgICBwYXJ0aWN1bGFyIGRldmljZXMgKHdp dGggZW52aXJvbm1lbnQgdmFyaWFibGVzIGxpa2UgT01QX05VTV9URUFNU19ERVZfNDIpLiAq Lworc3RydWN0IGdvbXBfaWN2X2xpc3QgKmdvbXBfZHluX3Zhcl9kZXZfbGlzdCA9IE5VTEw7 CitzdHJ1Y3QgZ29tcF9pY3ZfbGlzdCAqZ29tcF9udGhyZWFkc192YXJfZGV2X2xpc3QgPSBO VUxMOworc3RydWN0IGdvbXBfaWN2X2xpc3QgKmdvbXBfbnRocmVhZHNfdmFyX2xpc3RfZGV2 X2xpc3QgPSBOVUxMOworc3RydWN0IGdvbXBfaWN2X2xpc3QgKmdvbXBfbnRocmVhZHNfdmFy X2xpc3RfbGVuX2Rldl9saXN0ID0gTlVMTDsKK3N0cnVjdCBnb21wX2ljdl9saXN0ICpnb21w X3J1bl9zY2hlZF92YXJfZGV2X2xpc3QgPSBOVUxMOworc3RydWN0IGdvbXBfaWN2X2xpc3Qg KmdvbXBfcnVuX3NjaGVkX2NodW5rX3NpemVfZGV2X2xpc3QgPSBOVUxMOworc3RydWN0IGdv bXBfaWN2X2xpc3QgKmdvbXBfbnRlYW1zX3Zhcl9kZXZfbGlzdCA9IE5VTEw7CitzdHJ1Y3Qg Z29tcF9pY3ZfbGlzdCAqZ29tcF90aHJlYWRfbGltaXRfdmFyX2Rldl9saXN0ID0gTlVMTDsK K3N0cnVjdCBnb21wX2ljdl9saXN0ICpnb21wX21heF9hY3RpdmVfbGV2ZWxzX3Zhcl9kZXZf bGlzdCA9IE5VTEw7CitzdHJ1Y3QgZ29tcF9pY3ZfbGlzdCAqZ29tcF9wcm9jX2JpbmRfdmFy X2Rldl9saXN0ID0gTlVMTDsKK3N0cnVjdCBnb21wX2ljdl9saXN0ICpnb21wX3Byb2NfYmlu ZF92YXJfbGlzdF9kZXZfbGlzdCA9IE5VTEw7CitzdHJ1Y3QgZ29tcF9pY3ZfbGlzdCAqZ29t cF9wcm9jX2JpbmRfdmFyX2xpc3RfbGVuX2Rldl9saXN0ID0gTlVMTDsKK3N0cnVjdCBnb21w X2ljdl9saXN0ICpzdGFja3NpemVfZGV2X2xpc3QgPSBOVUxMOworc3RydWN0IGdvbXBfaWN2 X2xpc3QgKndhaXRfcG9saWN5X2Rldl9saXN0ID0gTlVMTDsKK3N0cnVjdCBnb21wX2ljdl9s aXN0ICp0ZWFtc190aHJlYWRfbGltaXRfdmFyX2Rldl9saXN0ID0gTlVMTDsKKworLyogRmxh Z3MgZm9yIG5vbi1nbG9iYWwgSUNWcyB0byBzdG9yZSBieSB3aGljaCBlbnZpcm9ubWVudCB2 YXJpYWJsZXMgdGhleSBhcmUKKyAgIGFmZmVjdGVkLiAgKi8KK3N0cnVjdCBnb21wX2ljdl9m bGFnc190IGdvbXBfaW5pdGlhbF9pY3ZfZmxhZ3MgPSB7CisgIC5udGhyZWFkc192YXIgPSBH T01QX0VOVl9WQVJfU1VGRklYX1VOS05PV04sCisgIC5ydW5fc2NoZWRfdmFyID0gR09NUF9F TlZfVkFSX1NVRkZJWF9VTktOT1dOLAorICAucnVuX3NjaGVkX2NodW5rX3NpemUgPSBHT01Q X0VOVl9WQVJfU1VGRklYX1VOS05PV04sCisgIC50aHJlYWRfbGltaXRfdmFyID0gR09NUF9F TlZfVkFSX1NVRkZJWF9VTktOT1dOLAorICAuZHluX3ZhciA9IEdPTVBfRU5WX1ZBUl9TVUZG SVhfVU5LTk9XTiwKKyAgLm1heF9hY3RpdmVfbGV2ZWxzX3ZhciA9IEdPTVBfRU5WX1ZBUl9T VUZGSVhfVU5LTk9XTiwKKyAgLmJpbmRfdmFyID0gR09NUF9FTlZfVkFSX1NVRkZJWF9VTktO T1dOLAorICAubnRlYW1zX3ZhciA9IEdPTVBfRU5WX1ZBUl9TVUZGSVhfVU5LTk9XTiwKKyAg LnN0YWNrc2l6ZSA9IEdPTVBfRU5WX1ZBUl9TVUZGSVhfVU5LTk9XTiwKKyAgLndhaXRfcG9s aWN5ID0gR09NUF9FTlZfVkFSX1NVRkZJWF9VTktOT1dOLAorICAudGVhbXNfdGhyZWFkX2xp bWl0X3ZhciA9IEdPTVBfRU5WX1ZBUl9TVUZGSVhfVU5LTk9XTgorfTsKKwogYm9vbCBnb21w X2NhbmNlbF92YXIgPSBmYWxzZTsKIGVudW0gZ29tcF90YXJnZXRfb2ZmbG9hZF90IGdvbXBf dGFyZ2V0X29mZmxvYWRfdmFyCiAgID0gR09NUF9UQVJHRVRfT0ZGTE9BRF9ERUZBVUxUOwpA QCAtMTA2LDE2ICsxNzQsMTcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc3RhY2tzaXplID0g R09NUF9ERUZBVUxUX1NUQUNLU0laRTsKIAogLyogUGFyc2UgdGhlIE9NUF9TQ0hFRFVMRSBl bnZpcm9ubWVudCB2YXJpYWJsZS4gICovCiAKLXN0YXRpYyB2b2lkCi1wYXJzZV9zY2hlZHVs ZSAodm9pZCkKK3N0YXRpYyBib29sCitwYXJzZV9zY2hlZHVsZSAoY29uc3QgY2hhciAqbmFt ZSwgZW51bSBnb21wX3NjaGVkdWxlX3R5cGUgKnNjaGVkdWxlLAorCQlpbnQgKmNodW5rX3Np emUpCiB7CiAgIGNoYXIgKmVudiwgKmVuZDsKICAgdW5zaWduZWQgbG9uZyB2YWx1ZTsKICAg aW50IG1vbm90b25pYyA9IDA7CiAKLSAgZW52ID0gZ2V0ZW52ICgiT01QX1NDSEVEVUxFIik7 CisgIGVudiA9IGdldGVudiAobmFtZSk7CiAgIGlmIChlbnYgPT0gTlVMTCkKLSAgICByZXR1 cm47CisgICAgcmV0dXJuIGZhbHNlOwogCiAgIHdoaWxlIChpc3NwYWNlICgodW5zaWduZWQg Y2hhcikgKmVudikpCiAgICAgKytlbnY7CkBAIC0xNDEsMzggKzIxMCwzNyBAQCBwYXJzZV9z Y2hlZHVsZSAodm9pZCkKICAgICB9CiAgIGlmIChzdHJuY2FzZWNtcCAoZW52LCAic3RhdGlj IiwgNikgPT0gMCkKICAgICB7Ci0gICAgICBnb21wX2dsb2JhbF9pY3YucnVuX3NjaGVkX3Zh ciA9IEdGU19TVEFUSUM7CisgICAgICAqc2NoZWR1bGUgPSBHRlNfU1RBVElDOwogICAgICAg ZW52ICs9IDY7CiAgICAgfQogICBlbHNlIGlmIChzdHJuY2FzZWNtcCAoZW52LCAiZHluYW1p YyIsIDcpID09IDApCiAgICAgewotICAgICAgZ29tcF9nbG9iYWxfaWN2LnJ1bl9zY2hlZF92 YXIgPSBHRlNfRFlOQU1JQzsKKyAgICAgICpzY2hlZHVsZSA9IEdGU19EWU5BTUlDOwogICAg ICAgZW52ICs9IDc7CiAgICAgfQogICBlbHNlIGlmIChzdHJuY2FzZWNtcCAoZW52LCAiZ3Vp ZGVkIiwgNikgPT0gMCkKICAgICB7Ci0gICAgICBnb21wX2dsb2JhbF9pY3YucnVuX3NjaGVk X3ZhciA9IEdGU19HVUlERUQ7CisgICAgICAqc2NoZWR1bGUgPSBHRlNfR1VJREVEOwogICAg ICAgZW52ICs9IDY7CiAgICAgfQogICBlbHNlIGlmIChzdHJuY2FzZWNtcCAoZW52LCAiYXV0 byIsIDQpID09IDApCiAgICAgewotICAgICAgZ29tcF9nbG9iYWxfaWN2LnJ1bl9zY2hlZF92 YXIgPSBHRlNfQVVUTzsKKyAgICAgICpzY2hlZHVsZSA9IEdGU19BVVRPOwogICAgICAgZW52 ICs9IDQ7CiAgICAgfQogICBlbHNlCiAgICAgZ290byB1bmtub3duOwogCiAgIGlmIChtb25v dG9uaWMgPT0gMQotICAgICAgfHwgKG1vbm90b25pYyA9PSAwICYmIGdvbXBfZ2xvYmFsX2lj di5ydW5fc2NoZWRfdmFyID09IEdGU19TVEFUSUMpKQotICAgIGdvbXBfZ2xvYmFsX2ljdi5y dW5fc2NoZWRfdmFyIHw9IEdGU19NT05PVE9OSUM7CisgICAgICB8fCAobW9ub3RvbmljID09 IDAgJiYgKnNjaGVkdWxlID09IEdGU19TVEFUSUMpKQorICAgICpzY2hlZHVsZSB8PSBHRlNf TU9OT1RPTklDOwogCiAgIHdoaWxlIChpc3NwYWNlICgodW5zaWduZWQgY2hhcikgKmVudikp CiAgICAgKytlbnY7CiAgIGlmICgqZW52ID09ICdcMCcpCiAgICAgewotICAgICAgZ29tcF9n bG9iYWxfaWN2LnJ1bl9zY2hlZF9jaHVua19zaXplCi0JPSAoZ29tcF9nbG9iYWxfaWN2LnJ1 bl9zY2hlZF92YXIgJiB+R0ZTX01PTk9UT05JQykgIT0gR0ZTX1NUQVRJQzsKLSAgICAgIHJl dHVybjsKKyAgICAgICpjaHVua19zaXplID0gKCpzY2hlZHVsZSAmIH5HRlNfTU9OT1RPTklD KSAhPSBHRlNfU1RBVElDOworICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICBpZiAoKmVu disrICE9ICcsJykKICAgICBnb3RvIHVua25vd247CkBAIC0xOTQsMjAgKzI2MiwxOSBAQCBw YXJzZV9zY2hlZHVsZSAodm9pZCkKICAgaWYgKChpbnQpdmFsdWUgIT0gdmFsdWUpCiAgICAg Z290byBpbnZhbGlkOwogCi0gIGlmICh2YWx1ZSA9PSAwCi0gICAgICAmJiAoZ29tcF9nbG9i YWxfaWN2LnJ1bl9zY2hlZF92YXIgJiB+R0ZTX01PTk9UT05JQykgIT0gR0ZTX1NUQVRJQykK KyAgaWYgKHZhbHVlID09IDAgJiYgKCpzY2hlZHVsZSAmIH5HRlNfTU9OT1RPTklDKSAhPSBH RlNfU1RBVElDKQogICAgIHZhbHVlID0gMTsKLSAgZ29tcF9nbG9iYWxfaWN2LnJ1bl9zY2hl ZF9jaHVua19zaXplID0gdmFsdWU7Ci0gIHJldHVybjsKKyAgKmNodW5rX3NpemUgPSB2YWx1 ZTsKKyAgcmV0dXJuIHRydWU7CiAKICB1bmtub3duOgogICBnb21wX2Vycm9yICgiVW5rbm93 biB2YWx1ZSBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGUgT01QX1NDSEVEVUxFIik7Ci0gIHJl dHVybjsKKyAgcmV0dXJuIGZhbHNlOwogCiAgaW52YWxpZDoKICAgZ29tcF9lcnJvciAoIklu dmFsaWQgdmFsdWUgZm9yIGNodW5rIHNpemUgaW4gIgogCSAgICAgICJlbnZpcm9ubWVudCB2 YXJpYWJsZSBPTVBfU0NIRURVTEUiKTsKLSAgcmV0dXJuOworICByZXR1cm4gZmFsc2U7CiB9 CiAKIC8qIFBhcnNlIGFuIHVuc2lnbmVkIGxvbmcgZW52aXJvbm1lbnQgdmFyaWFibGUuICBS ZXR1cm4gdHJ1ZSBpZiBvbmUgd2FzCkBAIC0xMDM0LDE1ICsxMTAxLDE4IEBAIHBhcnNlX2Jv b2xlYW4gKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgKnZhbHVlKQogCiAvKiBQYXJzZSB0aGUg T01QX1dBSVRfUE9MSUNZIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCByZXR1cm4gdGhlIHZh bHVlLiAgKi8KIAotc3RhdGljIGludAotcGFyc2Vfd2FpdF9wb2xpY3kgKHZvaWQpCitzdGF0 aWMgYm9vbAorcGFyc2Vfd2FpdF9wb2xpY3kgKGNvbnN0IGNoYXIgKm5hbWUsIGludCAqcHZh bHVlKQogewogICBjb25zdCBjaGFyICplbnY7CiAgIGludCByZXQgPSAtMTsKIAotICBlbnYg PSBnZXRlbnYgKCJPTVBfV0FJVF9QT0xJQ1kiKTsKKyAgZW52ID0gZ2V0ZW52IChuYW1lKTsK ICAgaWYgKGVudiA9PSBOVUxMKQotICAgIHJldHVybiAtMTsKKyAgeworICAgICpwdmFsdWUg PSAtMTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KIAogICB3aGlsZSAoaXNzcGFjZSAoKHVu c2lnbmVkIGNoYXIpICplbnYpKQogICAgICsrZW52OwpAQCAtMTA2MSw5ICsxMTMxLDEzIEBA IHBhcnNlX3dhaXRfcG9saWN5ICh2b2lkKQogICB3aGlsZSAoaXNzcGFjZSAoKHVuc2lnbmVk IGNoYXIpICplbnYpKQogICAgICsrZW52OwogICBpZiAoKmVudiA9PSAnXDAnKQotICAgIHJl dHVybiByZXQ7CisgICAgeworICAgICAgKnB2YWx1ZSA9IHJldDsKKyAgICAgIHJldHVybiB0 cnVlOworICAgIH0KICAgZ29tcF9lcnJvciAoIkludmFsaWQgdmFsdWUgZm9yIGVudmlyb25t ZW50IHZhcmlhYmxlIE9NUF9XQUlUX1BPTElDWSIpOwotICByZXR1cm4gLTE7CisgICpwdmFs dWUgPSAtMTsKKyAgcmV0dXJuIGZhbHNlOwogfQogCiAvKiBQYXJzZSB0aGUgR09NUF9DUFVf QUZGSU5JVFkgZW52aXJvbm1lbnQgdmFyaWJsZS4gIFJldHVybiB0cnVlIGlmIG9uZSB3YXMK QEAgLTEyNTEsNjIgKzEzMjUsNTYgQEAgcGFyc2VfZ29tcF9vcGVuYWNjX2RpbSAodm9pZCkK ICAgICB9CiB9CiAKLXZvaWQKLW9tcF9kaXNwbGF5X2VudiAoaW50IHZlcmJvc2UpCisvKiBI ZWxwZXIgZnVuY3Rpb24gZm9yIG9tcF9kaXNwbGF5X2VudiB3aGljaCBwcmludHMgdGhlIHZh bHVlcyBvZiBydW5fc2NoZWRfdmFyLgorICAgJ2RldmljZScgY2FuIGJlICdob3N0JywgJ2Rl dicsICdhbGwnIG9yIGEgcGFydGljdWxhciBkZXZpY2UgbnVtYmVyLiAgKi8KK3N0YXRpYyB2 b2lkCitwcmludF9zY2hlZHVsZSAoZW51bSBnb21wX3NjaGVkdWxlX3R5cGUgcnVuX3NjaGVk X3ZhciwgaW50IHJ1bl9zY2hlZF9jaHVua19zaXplLAorCQljb25zdCBjaGFyKiBkZXZpY2Up CiB7Ci0gIGludCBpOwotCi0gIGZwdXRzICgiXG5PUEVOTVAgRElTUExBWSBFTlZJUk9OTUVO VCBCRUdJTlxuIiwgc3RkZXJyKTsKLQotICBmcHV0cyAoIiAgX09QRU5NUCA9ICcyMDE1MTEn XG4iLCBzdGRlcnIpOwotICBmcHJpbnRmIChzdGRlcnIsICIgIE9NUF9EWU5BTUlDID0gJyVz J1xuIiwKLQkgICBnb21wX2dsb2JhbF9pY3YuZHluX3ZhciA/ICJUUlVFIiA6ICJGQUxTRSIp OwotICBmcHJpbnRmIChzdGRlcnIsICIgIE9NUF9ORVNURUQgPSAnJXMnXG4iLAotCSAgIGdv bXBfZ2xvYmFsX2ljdi5tYXhfYWN0aXZlX2xldmVsc192YXIgPiAxID8gIlRSVUUiIDogIkZB TFNFIik7Ci0KLSAgZnByaW50ZiAoc3RkZXJyLCAiICBPTVBfTlVNX1RIUkVBRFMgPSAnJWx1 IiwgZ29tcF9nbG9iYWxfaWN2Lm50aHJlYWRzX3Zhcik7Ci0gIGZvciAoaSA9IDE7IGkgPCBn b21wX250aHJlYWRzX3Zhcl9saXN0X2xlbjsgaSsrKQotICAgIGZwcmludGYgKHN0ZGVyciwg IiwlbHUiLCBnb21wX250aHJlYWRzX3Zhcl9saXN0W2ldKTsKLSAgZnB1dHMgKCInXG4iLCBz dGRlcnIpOwotCi0gIGZwcmludGYgKHN0ZGVyciwgIiAgT01QX1NDSEVEVUxFID0gJyIpOwot ICBpZiAoKGdvbXBfZ2xvYmFsX2ljdi5ydW5fc2NoZWRfdmFyICYgR0ZTX01PTk9UT05JQykp CisgIGZwcmludGYgKHN0ZGVyciwgIiAgWyVzXSBPTVBfU0NIRURVTEUgPSAnIiwgZGV2aWNl KTsKKyAgaWYgKChydW5fc2NoZWRfdmFyICYgR0ZTX01PTk9UT05JQykpCiAgICAgewotICAg ICAgaWYgKGdvbXBfZ2xvYmFsX2ljdi5ydW5fc2NoZWRfdmFyICE9IChHRlNfTU9OT1RPTklD IHwgR0ZTX1NUQVRJQykpCisgICAgICBpZiAocnVuX3NjaGVkX3ZhciAhPSAoR0ZTX01PTk9U T05JQyB8IEdGU19TVEFUSUMpKQogCWZwdXRzICgiTU9OT1RPTklDOiIsIHN0ZGVycik7CiAg ICAgfQotICBlbHNlIGlmIChnb21wX2dsb2JhbF9pY3YucnVuX3NjaGVkX3ZhciA9PSBHRlNf U1RBVElDKQorICBlbHNlIGlmIChydW5fc2NoZWRfdmFyID09IEdGU19TVEFUSUMpCiAgICAg ZnB1dHMgKCJOT05NT05PVE9OSUM6Iiwgc3RkZXJyKTsKLSAgc3dpdGNoIChnb21wX2dsb2Jh bF9pY3YucnVuX3NjaGVkX3ZhciAmIH5HRlNfTU9OT1RPTklDKQorICBzd2l0Y2ggKHJ1bl9z Y2hlZF92YXIgJiB+R0ZTX01PTk9UT05JQykKICAgICB7CiAgICAgY2FzZSBHRlNfUlVOVElN RToKICAgICAgIGZwdXRzICgiUlVOVElNRSIsIHN0ZGVycik7Ci0gICAgICBpZiAoZ29tcF9n bG9iYWxfaWN2LnJ1bl9zY2hlZF9jaHVua19zaXplICE9IDEpCi0JZnByaW50ZiAoc3RkZXJy LCAiLCVkIiwgZ29tcF9nbG9iYWxfaWN2LnJ1bl9zY2hlZF9jaHVua19zaXplKTsKKyAgICAg IGlmIChydW5fc2NoZWRfY2h1bmtfc2l6ZSAhPSAxKQorCWZwcmludGYgKHN0ZGVyciwgIiwl ZCIsIHJ1bl9zY2hlZF9jaHVua19zaXplKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgR0ZT X1NUQVRJQzoKICAgICAgIGZwdXRzICgiU1RBVElDIiwgc3RkZXJyKTsKLSAgICAgIGlmIChn b21wX2dsb2JhbF9pY3YucnVuX3NjaGVkX2NodW5rX3NpemUgIT0gMCkKLQlmcHJpbnRmIChz dGRlcnIsICIsJWQiLCBnb21wX2dsb2JhbF9pY3YucnVuX3NjaGVkX2NodW5rX3NpemUpOwor ICAgICAgaWYgKHJ1bl9zY2hlZF9jaHVua19zaXplICE9IDApCisJZnByaW50ZiAoc3RkZXJy LCAiLCVkIiwgcnVuX3NjaGVkX2NodW5rX3NpemUpOwogICAgICAgYnJlYWs7CiAgICAgY2Fz ZSBHRlNfRFlOQU1JQzoKICAgICAgIGZwdXRzICgiRFlOQU1JQyIsIHN0ZGVycik7Ci0gICAg ICBpZiAoZ29tcF9nbG9iYWxfaWN2LnJ1bl9zY2hlZF9jaHVua19zaXplICE9IDEpCi0JZnBy aW50ZiAoc3RkZXJyLCAiLCVkIiwgZ29tcF9nbG9iYWxfaWN2LnJ1bl9zY2hlZF9jaHVua19z aXplKTsKKyAgICAgIGlmIChydW5fc2NoZWRfY2h1bmtfc2l6ZSAhPSAxKQorCWZwcmludGYg KHN0ZGVyciwgIiwlZCIsIHJ1bl9zY2hlZF9jaHVua19zaXplKTsKICAgICAgIGJyZWFrOwog ICAgIGNhc2UgR0ZTX0dVSURFRDoKICAgICAgIGZwdXRzICgiR1VJREVEIiwgc3RkZXJyKTsK LSAgICAgIGlmIChnb21wX2dsb2JhbF9pY3YucnVuX3NjaGVkX2NodW5rX3NpemUgIT0gMSkK LQlmcHJpbnRmIChzdGRlcnIsICIsJWQiLCBnb21wX2dsb2JhbF9pY3YucnVuX3NjaGVkX2No dW5rX3NpemUpOworICAgICAgaWYgKHJ1bl9zY2hlZF9jaHVua19zaXplICE9IDEpCisJZnBy aW50ZiAoc3RkZXJyLCAiLCVkIiwgcnVuX3NjaGVkX2NodW5rX3NpemUpOwogICAgICAgYnJl YWs7CiAgICAgY2FzZSBHRlNfQVVUTzoKICAgICAgIGZwdXRzICgiQVVUTyIsIHN0ZGVycik7 CiAgICAgICBicmVhazsKICAgICB9CiAgIGZwdXRzICgiJ1xuIiwgc3RkZXJyKTsKK30KIAot ICBmcHV0cyAoIiAgT01QX1BST0NfQklORCA9ICciLCBzdGRlcnIpOwotICBzd2l0Y2ggKGdv bXBfZ2xvYmFsX2ljdi5iaW5kX3ZhcikKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3Igb21wX2Rp c3BsYXlfZW52IHdoaWNoIHByaW50cyB0aGUgdmFsdWVzIG9mIHByb2NfYmluZF92YXIuCisg ICAnZGV2aWNlJyBjYW4gYmUgJ2hvc3QnLCAnZGV2JywgJ2FsbCcsIG9yIGEgcGFydGljdWxh ciBkZXZpY2UgbnVtYmVyLiAgKi8KK3N0YXRpYyB2b2lkIHByaW50X3Byb2NfYmluZCAoY2hh ciBwcm9jX2JpbmRfdmFyLCB1bnNpZ25lZCBsb25nIGxlbiwgY2hhciAqKmxpc3QsCisJCQkg ICAgIGNvbnN0IGNoYXIqIGRldmljZSkKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiICBbJXNd IE9NUF9QUk9DX0JJTkQgPSAnIiwgZGV2aWNlKTsKKyAgc3dpdGNoIChwcm9jX2JpbmRfdmFy KQogICAgIHsKICAgICBjYXNlIG9tcF9wcm9jX2JpbmRfZmFsc2U6CiAgICAgICBmcHV0cyAo IkZBTFNFIiwgc3RkZXJyKTsKQEAgLTEzMjQsOCArMTM5Miw4IEBAIG9tcF9kaXNwbGF5X2Vu diAoaW50IHZlcmJvc2UpCiAgICAgICBmcHV0cyAoIlNQUkVBRCIsIHN0ZGVycik7CiAgICAg ICBicmVhazsKICAgICB9Ci0gIGZvciAoaSA9IDE7IGkgPCBnb21wX2JpbmRfdmFyX2xpc3Rf bGVuOyBpKyspCi0gICAgc3dpdGNoIChnb21wX2JpbmRfdmFyX2xpc3RbaV0pCisgIGZvciAo aW50IGkgPSAxOyBpIDwgbGVuOyBpKyspCisgICAgc3dpdGNoICgoKmxpc3QpW2ldKQogICAg ICAgewogICAgICAgY2FzZSBvbXBfcHJvY19iaW5kX21hc3RlcjoKIAlmcHV0cyAoIixNQVNU RVIiLCBzdGRlcnIpOyAvKiBUT0RPOiBDaGFuZ2UgdG8gUFJJTUFSWSBmb3IgT3Blbk1QIDUu MS4gKi8KQEAgLTEzMzgsNyArMTQwNiwxMzEgQEAgb21wX2Rpc3BsYXlfZW52IChpbnQgdmVy Ym9zZSkKIAlicmVhazsKICAgICAgIH0KICAgZnB1dHMgKCInXG4iLCBzdGRlcnIpOwotICBm cHV0cyAoIiAgT01QX1BMQUNFUyA9ICciLCBzdGRlcnIpOworfQorCit2b2lkCitvbXBfZGlz cGxheV9lbnYgKGludCB2ZXJib3NlKQoreworICBpbnQgaTsKKworICBmcHV0cyAoIlxuT1BF Tk1QIERJU1BMQVkgRU5WSVJPTk1FTlQgQkVHSU5cbiIsIHN0ZGVycik7CisKKyAgZnB1dHMg KCIgIF9PUEVOTVAgPSAnMjAxNTExJ1xuIiwgc3RkZXJyKTsKKworICBmcHJpbnRmIChzdGRl cnIsICIgIFtob3N0XSBPTVBfRFlOQU1JQyA9ICclcydcbiIsCisJICAgZ29tcF9pbml0aWFs X2ljdi5keW5fdmFyID8gIlRSVUUiIDogIkZBTFNFIik7CisgIGlmIChnb21wX2luaXRpYWxf aWN2X2ZsYWdzLmR5bl92YXIgJiBHT01QX0VOVl9WQVJfU1VGRklYX0FMTCkKKyAgICBmcHJp bnRmIChzdGRlcnIsICIgIFthbGxdIE9NUF9EWU5BTUlDID0gJyVzJ1xuIiwKKwkgICAgIGdv bXBfaW5pdGlhbF9pY3ZfYWxsLmR5bl92YXIgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKyAgaWYg KGdvbXBfaW5pdGlhbF9pY3ZfZmxhZ3MuZHluX3ZhciAmIEdPTVBfRU5WX1ZBUl9TVUZGSVhf REVWKQorICAgIGZwcmludGYgKHN0ZGVyciwgIiAgW2RldmljZV0gT01QX0RZTkFNSUMgPSAn JXMnXG4iLAorCSAgICAgZ29tcF9pbml0aWFsX2ljdl9kZXYuZHluX3ZhciA/ICJUUlVFIiA6 ICJGQUxTRSIpOworICBzdHJ1Y3QgZ29tcF9pY3ZfbGlzdCogbF9keW5fdmFyID0gZ29tcF9k eW5fdmFyX2Rldl9saXN0OworICB3aGlsZSAobF9keW5fdmFyICE9IE5VTEwpCisgICAgewor ICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICBbJWRdIE9NUF9EWU5BTUlDID0gJyVzJ1xuIiwg bF9keW5fdmFyLT5kZXZpY2VfbnVtLAorCSAgICAgICAqKGJvb2wqKWxfZHluX3Zhci0+dmFs dWUgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKyAgICAgIGxfZHluX3ZhciA9IGxfZHluX3Zhci0+ bmV4dDsKKyAgICB9CisKKyAgLyogVGhlIE9NUF9ORVNURUQgZW52aXJvbm1lbnQgdmFyaWFi bGUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gICovCisgIGZwcmludGYgKHN0ZGVyciwgIiAgW2hv c3RdIE9NUF9ORVNURUQgPSAnJXMnXG4iLAorCSAgIGdvbXBfaW5pdGlhbF9pY3YubWF4X2Fj dGl2ZV9sZXZlbHNfdmFyID4gMSA/ICJUUlVFIiA6ICJGQUxTRSIpOworCisgIGZwcmludGYg KHN0ZGVyciwgIiAgW2hvc3RdIE9NUF9OVU1fVEhSRUFEUyA9ICclbHUiLAorCSAgIGdvbXBf aW5pdGlhbF9pY3YubnRocmVhZHNfdmFyKTsKKyAgZm9yIChpID0gMTsgaSA8IGdvbXBfbnRo cmVhZHNfdmFyX2xpc3RfbGVuOyBpKyspCisgICAgZnByaW50ZiAoc3RkZXJyLCAiLCVsdSIs IGdvbXBfbnRocmVhZHNfdmFyX2xpc3RbaV0pOworICBmcHV0cyAoIidcbiIsIHN0ZGVycik7 CisgIGlmIChnb21wX2luaXRpYWxfaWN2X2ZsYWdzLm50aHJlYWRzX3ZhciAmIEdPTVBfRU5W X1ZBUl9TVUZGSVhfQUxMKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgW2Fs bF0gT01QX05VTV9USFJFQURTID0gJyVsdSIsCisJICAgICAgIGdvbXBfaW5pdGlhbF9pY3Zf YWxsLm50aHJlYWRzX3Zhcik7CisgICAgICBmb3IgKGkgPSAxOyBpIDwgZ29tcF9pbml0aWFs X2ljdl9hbGwubnRocmVhZHNfdmFyX2xpc3RfbGVuOyBpKyspCisJZnByaW50ZiAoc3RkZXJy LCAiLCVsdSIsIGdvbXBfaW5pdGlhbF9pY3ZfYWxsLm50aHJlYWRzX3Zhcl9saXN0W2ldKTsK KyAgICAgIGZwdXRzICgiJ1xuIiwgc3RkZXJyKTsKKyAgICB9CisgIGlmIChnb21wX2luaXRp YWxfaWN2X2ZsYWdzLm50aHJlYWRzX3ZhciAmIEdPTVBfRU5WX1ZBUl9TVUZGSVhfREVWKQor ICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgW2RldmljZV0gT01QX05VTV9USFJF QURTID0gJyVsdSIsCisJICAgICAgIGdvbXBfaW5pdGlhbF9pY3ZfZGV2Lm50aHJlYWRzX3Zh cik7CisgICAgICBmb3IgKGkgPSAxOyBpIDwgZ29tcF9pbml0aWFsX2ljdl9kZXYubnRocmVh ZHNfdmFyX2xpc3RfbGVuOyBpKyspCisJZnByaW50ZiAoc3RkZXJyLCAiLCVsdSIsIGdvbXBf aW5pdGlhbF9pY3ZfZGV2Lm50aHJlYWRzX3Zhcl9saXN0W2ldKTsKKyAgICAgIGZwdXRzICgi J1xuIiwgc3RkZXJyKTsKKyAgICB9CisgIHN0cnVjdCBnb21wX2ljdl9saXN0KiBsX250aHJl YWRzX3ZhciA9IGdvbXBfbnRocmVhZHNfdmFyX2Rldl9saXN0OworICB3aGlsZSAobF9udGhy ZWFkc192YXIgIT0gTlVMTCkKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICIgIFsl ZF0gT01QX05VTV9USFJFQURTID0gJyVsdSIsCisJICAgICAgIGxfbnRocmVhZHNfdmFyLT5k ZXZpY2VfbnVtLAorCSAgICAgICAqKHVuc2lnbmVkIGxvbmcqKWxfbnRocmVhZHNfdmFyLT52 YWx1ZSk7CisgICAgICBzdHJ1Y3QgZ29tcF9pY3ZfbGlzdCAqbGVuCisJPSBnb21wX2dldF9p Y3ZfbGlzdCAoJmdvbXBfbnRocmVhZHNfdmFyX2xpc3RfbGVuX2Rldl9saXN0LAorCQkJICAg ICBsX250aHJlYWRzX3Zhci0+ZGV2aWNlX251bSk7CisgICAgICBpZiAobGVuICE9IE5VTEwp CisJeworCSAgc3RydWN0IGdvbXBfaWN2X2xpc3QgKmxpc3QKKwkgICAgPSBnb21wX2dldF9p Y3ZfbGlzdCAoJmdvbXBfbnRocmVhZHNfdmFyX2xpc3RfZGV2X2xpc3QsCisJCQkJIGxfbnRo cmVhZHNfdmFyLT5kZXZpY2VfbnVtKTsKKwkgIGZvciAoaSA9IDE7IGkgPCAqKHVuc2lnbmVk IGxvbmcqKWxlbi0+dmFsdWU7IGkrKykKKwkgICAgZnByaW50ZiAoc3RkZXJyLCAiLCVsdSIs ICgqKHVuc2lnbmVkIGxvbmcqKilsaXN0LT52YWx1ZSlbaV0pOworCX0KKyAgICAgIGZwdXRz ICgiJ1xuIiwgc3RkZXJyKTsKKyAgICAgIGxfbnRocmVhZHNfdmFyID0gbF9udGhyZWFkc192 YXItPm5leHQ7CisgICAgfQorCisgIHByaW50X3NjaGVkdWxlIChnb21wX2luaXRpYWxfaWN2 LnJ1bl9zY2hlZF92YXIsCisJCSAgZ29tcF9pbml0aWFsX2ljdi5ydW5fc2NoZWRfY2h1bmtf c2l6ZSwgImhvc3QiKTsKKyAgaWYgKGdvbXBfaW5pdGlhbF9pY3ZfZmxhZ3MucnVuX3NjaGVk X3ZhciAmIEdPTVBfRU5WX1ZBUl9TVUZGSVhfQUxMKQorICAgIHByaW50X3NjaGVkdWxlIChn b21wX2luaXRpYWxfaWN2X2FsbC5ydW5fc2NoZWRfdmFyLAorCQkgICAgZ29tcF9pbml0aWFs X2ljdl9hbGwucnVuX3NjaGVkX2NodW5rX3NpemUsICJhbGwiKTsKKyAgaWYgKGdvbXBfaW5p dGlhbF9pY3ZfZmxhZ3MucnVuX3NjaGVkX3ZhciAmIEdPTVBfRU5WX1ZBUl9TVUZGSVhfREVW KQorICAgIHByaW50X3NjaGVkdWxlIChnb21wX2luaXRpYWxfaWN2X2Rldi5ydW5fc2NoZWRf dmFyLAorCQkgICAgZ29tcF9pbml0aWFsX2ljdl9kZXYucnVuX3NjaGVkX2NodW5rX3NpemUs ICJkZXZpY2UiKTsKKyAgc3RydWN0IGdvbXBfaWN2X2xpc3QqIGxfcnVuX3NjaGVkX3ZhciA9 IGdvbXBfcnVuX3NjaGVkX3Zhcl9kZXZfbGlzdDsKKyAgd2hpbGUgKGxfcnVuX3NjaGVkX3Zh ciAhPSBOVUxMKQorICAgIHsKKyAgICAgIHN0cnVjdCBnb21wX2ljdl9saXN0KiBsX3J1bl9z Y2hlZF9jaHVua19zaXplCisJPSBnb21wX2dldF9pY3ZfbGlzdCAoJmdvbXBfcnVuX3NjaGVk X2NodW5rX3NpemVfZGV2X2xpc3QsCisJCQkgICAgIGxfcnVuX3NjaGVkX3Zhci0+ZGV2aWNl X251bSk7CisgICAgICBpbnQgY2h1bmtfc2l6ZSA9ICooaW50KilsX3J1bl9zY2hlZF9jaHVu a19zaXplLT52YWx1ZTsKKyAgICAgIGNoYXIgZGV2X251bVsxMF07CisgICAgICBzcHJpbnRm IChkZXZfbnVtLCAiJWQiLCBsX3J1bl9zY2hlZF92YXItPmRldmljZV9udW0pOworICAgICAg ZW51bSBnb21wX3NjaGVkdWxlX3R5cGUgc2NoZWR1bGVfdHlwZQorCT0gKihlbnVtIGdvbXBf c2NoZWR1bGVfdHlwZSopbF9ydW5fc2NoZWRfdmFyLT52YWx1ZTsKKyAgICAgIHByaW50X3Nj aGVkdWxlIChzY2hlZHVsZV90eXBlLCBjaHVua19zaXplLCBkZXZfbnVtKTsKKyAgICAgIGxf cnVuX3NjaGVkX3ZhciA9IGxfcnVuX3NjaGVkX3Zhci0+bmV4dDsKKyAgICB9CisKKyAgcHJp bnRfcHJvY19iaW5kIChnb21wX2luaXRpYWxfaWN2LmJpbmRfdmFyLAorCQkgICBnb21wX2lu aXRpYWxfaWN2LmJpbmRfdmFyX2xpc3RfbGVuLAorCQkgICAmZ29tcF9pbml0aWFsX2ljdi5i aW5kX3Zhcl9saXN0LCAiaG9zdCIpOworICBpZiAoZ29tcF9pbml0aWFsX2ljdl9mbGFncy5i aW5kX3ZhciAmIEdPTVBfRU5WX1ZBUl9TVUZGSVhfQUxMKQorICAgIHByaW50X3Byb2NfYmlu ZCAoZ29tcF9pbml0aWFsX2ljdl9hbGwuYmluZF92YXIsCisJCSAgICAgZ29tcF9pbml0aWFs X2ljdl9hbGwuYmluZF92YXJfbGlzdF9sZW4sCisJCSAgICAgJmdvbXBfaW5pdGlhbF9pY3Zf YWxsLmJpbmRfdmFyX2xpc3QsICJhbGwiKTsKKyAgaWYgKGdvbXBfaW5pdGlhbF9pY3ZfZmxh Z3MuYmluZF92YXIgJiBHT01QX0VOVl9WQVJfU1VGRklYX0RFVikKKyAgICBwcmludF9wcm9j X2JpbmQgKGdvbXBfaW5pdGlhbF9pY3ZfZGV2LmJpbmRfdmFyLAorCQkgICAgIGdvbXBfaW5p dGlhbF9pY3ZfZGV2LmJpbmRfdmFyX2xpc3RfbGVuLAorCQkgICAgICZnb21wX2luaXRpYWxf aWN2X2Rldi5iaW5kX3Zhcl9saXN0LCAiZGV2aWNlIik7CisgIHN0cnVjdCBnb21wX2ljdl9s aXN0KiBsX3Byb2NfYmluZF92YXIgPSBnb21wX3Byb2NfYmluZF92YXJfZGV2X2xpc3Q7Cisg IHdoaWxlIChsX3Byb2NfYmluZF92YXIgIT0gTlVMTCkKKyAgICB7CisgICAgICBzdHJ1Y3Qg Z29tcF9pY3ZfbGlzdCAqbGlzdAorCT0gZ29tcF9nZXRfaWN2X2xpc3QgKCZnb21wX3Byb2Nf YmluZF92YXJfbGlzdF9kZXZfbGlzdCwKKwkJCSAgICAgbF9wcm9jX2JpbmRfdmFyLT5kZXZp Y2VfbnVtKTsKKyAgICAgIHN0cnVjdCBnb21wX2ljdl9saXN0ICpsZW4KKwk9IGdvbXBfZ2V0 X2ljdl9saXN0ICgmZ29tcF9wcm9jX2JpbmRfdmFyX2xpc3RfbGVuX2Rldl9saXN0LAorCQkJ ICAgICBsX3Byb2NfYmluZF92YXItPmRldmljZV9udW0pOworICAgICAgY2hhciBkZXZfbnVt WzEwXTsKKyAgICAgIHNwcmludGYgKGRldl9udW0sICIlZCIsIGxfcHJvY19iaW5kX3Zhci0+ ZGV2aWNlX251bSk7CisgICAgICBjaGFyIHByb2NfYmluZCA9ICooY2hhciopbF9wcm9jX2Jp bmRfdmFyLT52YWx1ZTsKKyAgICAgIHByaW50X3Byb2NfYmluZCAocHJvY19iaW5kLCAqKHVu c2lnbmVkIGxvbmcqKWxlbi0+dmFsdWUsCisJCSAgICAgICAmKihjaGFyKiopbGlzdC0+dmFs dWUsIGRldl9udW0pOworICAgICAgbF9wcm9jX2JpbmRfdmFyID0gbF9wcm9jX2JpbmRfdmFy LT5uZXh0OworICAgIH0KKworICBmcHV0cyAoIiAgW2hvc3RdIE9NUF9QTEFDRVMgPSAnIiwg c3RkZXJyKTsKICAgZm9yIChpID0gMDsgaSA8IGdvbXBfcGxhY2VzX2xpc3RfbGVuOyBpKysp CiAgICAgewogICAgICAgZnB1dHMgKCJ7Iiwgc3RkZXJyKTsKQEAgLTEzNDcsMzAgKzE1Mzks MTE5IEBAIG9tcF9kaXNwbGF5X2VudiAoaW50IHZlcmJvc2UpCiAgICAgfQogICBmcHV0cyAo IidcbiIsIHN0ZGVycik7CiAKLSAgZnByaW50ZiAoc3RkZXJyLCAiICBPTVBfU1RBQ0tTSVpF ID0gJyVsdSdcbiIsIHN0YWNrc2l6ZSk7CisgIGZwcmludGYgKHN0ZGVyciwgIiAgW2hvc3Rd IE9NUF9TVEFDS1NJWkUgPSAnJWx1J1xuIiwKKwkgICBnb21wX2luaXRpYWxfaWN2LnN0YWNr c2l6ZSk7CisgIGlmIChnb21wX2luaXRpYWxfaWN2X2ZsYWdzLnN0YWNrc2l6ZSAmIEdPTVBf RU5WX1ZBUl9TVUZGSVhfQUxMKQorICAgIGZwcmludGYgKHN0ZGVyciwgIiAgW2FsbF0gT01Q X1NUQUNLU0laRSA9ICclbHUnXG4iLAorCSAgICAgZ29tcF9pbml0aWFsX2ljdl9hbGwuc3Rh Y2tzaXplKTsKKyAgaWYgKGdvbXBfaW5pdGlhbF9pY3ZfZmxhZ3Muc3RhY2tzaXplICYgR09N UF9FTlZfVkFSX1NVRkZJWF9ERVYpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiICBbZGV2aWNl XSBPTVBfU1RBQ0tTSVpFID0gJyVsdSdcbiIsCisJICAgICBnb21wX2luaXRpYWxfaWN2X2Rl di5zdGFja3NpemUpOworICBzdHJ1Y3QgZ29tcF9pY3ZfbGlzdCogbF9zdGFja3NpemUgPSBz dGFja3NpemVfZGV2X2xpc3Q7CisgIHdoaWxlIChsX3N0YWNrc2l6ZSAhPSBOVUxMKQorICAg IHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgWyVkXSBPTVBfU1RBQ0tTSVpFID0gJyVs dSdcbiIsCisJICAgICAgIGxfc3RhY2tzaXplLT5kZXZpY2VfbnVtLCAqKHVuc2lnbmVkIGxv bmcqKWxfc3RhY2tzaXplLT52YWx1ZSk7CisgICAgICBsX3N0YWNrc2l6ZSA9IGxfc3RhY2tz aXplLT5uZXh0OworICAgIH0KIAogICAvKiBHT01QJ3MgZGVmYXVsdCB2YWx1ZSBpcyBhY3R1 YWxseSBuZWl0aGVyIGFjdGl2ZSBub3IgcGFzc2l2ZS4gICovCi0gIGZwcmludGYgKHN0ZGVy ciwgIiAgT01QX1dBSVRfUE9MSUNZID0gJyVzJ1xuIiwKLQkgICB3YWl0X3BvbGljeSA+IDAg PyAiQUNUSVZFIiA6ICJQQVNTSVZFIik7Ci0gIGZwcmludGYgKHN0ZGVyciwgIiAgT01QX1RI UkVBRF9MSU1JVCA9ICcldSdcbiIsCi0JICAgZ29tcF9nbG9iYWxfaWN2LnRocmVhZF9saW1p dF92YXIpOwotICBmcHJpbnRmIChzdGRlcnIsICIgIE9NUF9NQVhfQUNUSVZFX0xFVkVMUyA9 ICcldSdcbiIsCi0JICAgZ29tcF9nbG9iYWxfaWN2Lm1heF9hY3RpdmVfbGV2ZWxzX3Zhcik7 Ci0gIGZwcmludGYgKHN0ZGVyciwgIiAgT01QX05VTV9URUFNUyA9ICcldSdcbiIsIGdvbXBf bnRlYW1zX3Zhcik7Ci0gIGZwcmludGYgKHN0ZGVyciwgIiAgT01QX1RFQU1TX1RIUkVBRF9M SU1JVCA9ICcldSdcbiIsCi0JICAgZ29tcF90ZWFtc190aHJlYWRfbGltaXRfdmFyKTsKLQot ICBmcHJpbnRmIChzdGRlcnIsICIgIE9NUF9DQU5DRUxMQVRJT04gPSAnJXMnXG4iLAorICBm cHJpbnRmIChzdGRlcnIsICIgIFtob3N0XSBPTVBfV0FJVF9QT0xJQ1kgPSAnJXMnXG4iLAor CSAgIGdvbXBfaW5pdGlhbF9pY3Yud2FpdF9wb2xpY3kgPiAwID8gIkFDVElWRSIgOiAiUEFT U0lWRSIpOworICBpZiAoZ29tcF9pbml0aWFsX2ljdl9mbGFncy53YWl0X3BvbGljeSAmIEdP TVBfRU5WX1ZBUl9TVUZGSVhfQUxMKQorICAgIGZwcmludGYgKHN0ZGVyciwgIiAgW2FsbF0g T01QX1dBSVRfUE9MSUNZID0gJyVzJ1xuIiwKKwkgICAgIGdvbXBfaW5pdGlhbF9pY3ZfYWxs LndhaXRfcG9saWN5ID4gMCA/ICJBQ1RJVkUiIDogIlBBU1NJVkUiKTsKKyAgaWYgKGdvbXBf aW5pdGlhbF9pY3ZfZmxhZ3Mud2FpdF9wb2xpY3kgJiBHT01QX0VOVl9WQVJfU1VGRklYX0RF VikKKyAgICBmcHJpbnRmIChzdGRlcnIsICIgIFtkZXZpY2VdIE9NUF9XQUlUX1BPTElDWSA9 ICclcydcbiIsCisJICAgICBnb21wX2luaXRpYWxfaWN2X2Rldi53YWl0X3BvbGljeSA+IDAg PyAiQUNUSVZFIiA6ICJQQVNTSVZFIik7CisgIHN0cnVjdCBnb21wX2ljdl9saXN0KiBsX3dh aXRfcG9saWN5ID0gd2FpdF9wb2xpY3lfZGV2X2xpc3Q7CisgIHdoaWxlIChsX3dhaXRfcG9s aWN5ICE9IE5VTEwpCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICBbJWRdIE9N UF9XQUlUX1BPTElDWSA9ICclcydcbiIsCisJICAgICAgIGxfd2FpdF9wb2xpY3ktPmRldmlj ZV9udW0sCisJICAgICAgICooaW50KilsX3dhaXRfcG9saWN5LT52YWx1ZSA+IDAgPyAiQUNU SVZFIiA6ICJQQVNTSVZFIik7CisgICAgICBsX3dhaXRfcG9saWN5ID0gbF93YWl0X3BvbGlj eS0+bmV4dDsKKyAgICB9CisKKyAgZnByaW50ZiAoc3RkZXJyLCAiICBbaG9zdF0gT01QX1RI UkVBRF9MSU1JVCA9ICcldSdcbiIsCisJICAgZ29tcF9pbml0aWFsX2ljdi50aHJlYWRfbGlt aXRfdmFyKTsKKyAgaWYgKGdvbXBfaW5pdGlhbF9pY3ZfZmxhZ3MudGhyZWFkX2xpbWl0X3Zh ciAmIEdPTVBfRU5WX1ZBUl9TVUZGSVhfQUxMKQorICAgIGZwcmludGYgKHN0ZGVyciwgIiAg W2FsbF0gT01QX1RIUkVBRF9MSU1JVCA9ICclZCdcbiIsCisJICAgICBnb21wX2luaXRpYWxf aWN2X2FsbC50aHJlYWRfbGltaXRfdmFyKTsKKyAgaWYgKGdvbXBfaW5pdGlhbF9pY3ZfZmxh Z3MudGhyZWFkX2xpbWl0X3ZhciAmIEdPTVBfRU5WX1ZBUl9TVUZGSVhfREVWKQorICAgIGZw cmludGYgKHN0ZGVyciwgIiAgW2RldmljZV0gT01QX1RIUkVBRF9MSU1JVCA9ICclZCdcbiIs CisJICAgICBnb21wX2luaXRpYWxfaWN2X2Rldi50aHJlYWRfbGltaXRfdmFyKTsKKyAgc3Ry dWN0IGdvbXBfaWN2X2xpc3QqIGxfdGhyZWFkX2xpbWl0ID0gZ29tcF90aHJlYWRfbGltaXRf dmFyX2Rldl9saXN0OworICB3aGlsZSAobF90aHJlYWRfbGltaXQgIT0gTlVMTCkKKyAgICB7 CisgICAgICBmcHJpbnRmIChzdGRlcnIsICIgIFslZF0gT01QX1RIUkVBRF9MSU1JVCA9ICcl ZCdcbiIsCisJICAgICAgIGxfdGhyZWFkX2xpbWl0LT5kZXZpY2VfbnVtLCAqKGludCopbF90 aHJlYWRfbGltaXQtPnZhbHVlKTsKKyAgICAgIGxfdGhyZWFkX2xpbWl0ID0gbF90aHJlYWRf bGltaXQtPm5leHQ7CisgICAgfQorCisgIGZwcmludGYgKHN0ZGVyciwgIiAgW2hvc3RdIE9N UF9NQVhfQUNUSVZFX0xFVkVMUyA9ICcldSdcbiIsCisJICAgZ29tcF9pbml0aWFsX2ljdi5t YXhfYWN0aXZlX2xldmVsc192YXIpOworICBpZiAoZ29tcF9pbml0aWFsX2ljdl9mbGFncy5t YXhfYWN0aXZlX2xldmVsc192YXIgJiBHT01QX0VOVl9WQVJfU1VGRklYX0FMTCkKKyAgICBm cHJpbnRmIChzdGRlcnIsICIgIFthbGxdIE9NUF9NQVhfQUNUSVZFX0xFVkVMUyA9ICcldSdc biIsCisJICAgICBnb21wX2luaXRpYWxfaWN2X2FsbC5tYXhfYWN0aXZlX2xldmVsc192YXIp OworICBpZiAoZ29tcF9pbml0aWFsX2ljdl9mbGFncy5tYXhfYWN0aXZlX2xldmVsc192YXIg JiBHT01QX0VOVl9WQVJfU1VGRklYX0RFVikKKyAgICBmcHJpbnRmIChzdGRlcnIsICIgIFtk ZXZpY2VdIE9NUF9NQVhfQUNUSVZFX0xFVkVMUyA9ICcldSdcbiIsCisJICAgICBnb21wX2lu aXRpYWxfaWN2X2Rldi5tYXhfYWN0aXZlX2xldmVsc192YXIpOworICBzdHJ1Y3QgZ29tcF9p Y3ZfbGlzdCogbF9tYXhfYWN0aXZlX2xldmVscworICAgID0gZ29tcF9tYXhfYWN0aXZlX2xl dmVsc192YXJfZGV2X2xpc3Q7CisgIHdoaWxlIChsX21heF9hY3RpdmVfbGV2ZWxzICE9IE5V TEwpCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICBbJWRdIE9NUF9NQVhfQUNU SVZFX0xFVkVMUyA9ICcldSdcbiIsCisJICAgICAgIGxfbWF4X2FjdGl2ZV9sZXZlbHMtPmRl dmljZV9udW0sCisJICAgICAgICooaW50KilsX21heF9hY3RpdmVfbGV2ZWxzLT52YWx1ZSk7 CisgICAgICBsX21heF9hY3RpdmVfbGV2ZWxzID0gbF9tYXhfYWN0aXZlX2xldmVscy0+bmV4 dDsKKyAgICB9CisKKyAgZnByaW50ZiAoc3RkZXJyLCAiICBbaG9zdF0gT01QX05VTV9URUFN UyA9ICclZCdcbiIsCisJICAgZ29tcF9pbml0aWFsX2ljdi5udGVhbXNfdmFyKTsKKyAgaWYg KGdvbXBfaW5pdGlhbF9pY3ZfZmxhZ3MubnRlYW1zX3ZhciAmIEdPTVBfRU5WX1ZBUl9TVUZG SVhfQUxMKQorICAgIGZwcmludGYgKHN0ZGVyciwgIiAgW2FsbF0gT01QX05VTV9URUFNUyA9 ICclZCdcbiIsCisJICAgICBnb21wX2luaXRpYWxfaWN2X2FsbC5udGVhbXNfdmFyKTsKKyAg aWYgKGdvbXBfaW5pdGlhbF9pY3ZfZmxhZ3MubnRlYW1zX3ZhciAmIEdPTVBfRU5WX1ZBUl9T VUZGSVhfREVWKQorICAgIGZwcmludGYgKHN0ZGVyciwgIiAgW2RldmljZV0gT01QX05VTV9U RUFNUyA9ICclZCdcbiIsCisJICAgICBnb21wX2luaXRpYWxfaWN2X2Rldi5udGVhbXNfdmFy KTsKKyAgc3RydWN0IGdvbXBfaWN2X2xpc3QqIGxfbnRlYW1zX3ZhciA9IGdvbXBfbnRlYW1z X3Zhcl9kZXZfbGlzdDsKKyAgd2hpbGUgKGxfbnRlYW1zX3ZhciAhPSBOVUxMKQorICAgIHsK KyAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgWyVkXSBPTVBfTlVNX1RFQU1TID0gJyVkJ1xu IiwKKwkgICAgICAgbF9udGVhbXNfdmFyLT5kZXZpY2VfbnVtLCAqKGludCopbF9udGVhbXNf dmFyLT52YWx1ZSk7CisgICAgICBsX250ZWFtc192YXIgPSBsX250ZWFtc192YXItPm5leHQ7 CisgICAgfQorCisgIGZwcmludGYgKHN0ZGVyciwgIiAgW2hvc3RdIE9NUF9URUFNU19USFJF QURfTElNSVQgPSAnJXUnXG4iLAorCSAgIGdvbXBfaW5pdGlhbF9pY3YudGVhbXNfdGhyZWFk X2xpbWl0X3Zhcik7CisgIGlmIChnb21wX2luaXRpYWxfaWN2X2ZsYWdzLnRlYW1zX3RocmVh ZF9saW1pdF92YXIgJiBHT01QX0VOVl9WQVJfU1VGRklYX0FMTCkKKyAgICBmcHJpbnRmIChz dGRlcnIsICIgIFthbGxdIE9NUF9URUFNU19USFJFQURfTElNSVQgPSAnJXUnXG4iLAorCSAg ICAgZ29tcF9pbml0aWFsX2ljdl9hbGwudGVhbXNfdGhyZWFkX2xpbWl0X3Zhcik7CisgIGlm IChnb21wX2luaXRpYWxfaWN2X2ZsYWdzLnRlYW1zX3RocmVhZF9saW1pdF92YXIgJiBHT01Q X0VOVl9WQVJfU1VGRklYX0RFVikKKyAgICBmcHJpbnRmIChzdGRlcnIsICIgIFtkZXZpY2Vd IE9NUF9URUFNU19USFJFQURfTElNSVQgPSAnJXUnXG4iLAorCSAgICAgZ29tcF9pbml0aWFs X2ljdl9kZXYudGVhbXNfdGhyZWFkX2xpbWl0X3Zhcik7CisgIHN0cnVjdCBnb21wX2ljdl9s aXN0KiBsX3RlYW1zX3Rocl9saW1pdCA9IHRlYW1zX3RocmVhZF9saW1pdF92YXJfZGV2X2xp c3Q7CisgIHdoaWxlIChsX3RlYW1zX3Rocl9saW1pdCAhPSBOVUxMKQorICAgIHsKKyAgICAg IGZwcmludGYgKHN0ZGVyciwgIiAgWyVkXSBPTVBfVEVBTVNfVEhSRUFEX0xJTUlUID0gJyV1 J1xuIiwKKwkgICAgICAgbF90ZWFtc190aHJfbGltaXQtPmRldmljZV9udW0sICooaW50Kils X3RlYW1zX3Rocl9saW1pdC0+dmFsdWUpOworICAgICAgbF90ZWFtc190aHJfbGltaXQgPSBs X3RlYW1zX3Rocl9saW1pdC0+bmV4dDsKKyAgICB9CisKKyAgZnByaW50ZiAoc3RkZXJyLCAi ICBbYWxsXSBPTVBfQ0FOQ0VMTEFUSU9OID0gJyVzJ1xuIiwKIAkgICBnb21wX2NhbmNlbF92 YXIgPyAiVFJVRSIgOiAiRkFMU0UiKTsKLSAgZnByaW50ZiAoc3RkZXJyLCAiICBPTVBfREVG QVVMVF9ERVZJQ0UgPSAnJWQnXG4iLAotCSAgIGdvbXBfZ2xvYmFsX2ljdi5kZWZhdWx0X2Rl dmljZV92YXIpOwotICBmcHJpbnRmIChzdGRlcnIsICIgIE9NUF9NQVhfVEFTS19QUklPUklU WSA9ICclZCdcbiIsCisKKyAgZnByaW50ZiAoc3RkZXJyLCAiICBbYWxsXSBPTVBfREVGQVVM VF9ERVZJQ0UgPSAnJWQnXG4iLAorCSAgIGdvbXBfaW5pdGlhbF9pY3YuZGVmYXVsdF9kZXZp Y2VfdmFyKTsKKworICBmcHJpbnRmIChzdGRlcnIsICIgIFthbGxdIE9NUF9NQVhfVEFTS19Q UklPUklUWSA9ICclZCdcbiIsCiAJICAgZ29tcF9tYXhfdGFza19wcmlvcml0eV92YXIpOwot ICBmcHJpbnRmIChzdGRlcnIsICIgIE9NUF9ESVNQTEFZX0FGRklOSVRZID0gJyVzJ1xuIiwK KyAgZnByaW50ZiAoc3RkZXJyLCAiICBbYWxsXSBPTVBfRElTUExBWV9BRkZJTklUWSA9ICcl cydcbiIsCiAJICAgZ29tcF9kaXNwbGF5X2FmZmluaXR5X3ZhciA/ICJUUlVFIiA6ICJGQUxT RSIpOwotICBmcHJpbnRmIChzdGRlcnIsICIgIE9NUF9BRkZJTklUWV9GT1JNQVQgPSAnJXMn XG4iLAorICBmcHJpbnRmIChzdGRlcnIsICIgIFtob3N0XSBPTVBfQUZGSU5JVFlfRk9STUFU ID0gJyVzJ1xuIiwKIAkgICBnb21wX2FmZmluaXR5X2Zvcm1hdF92YXIpOwotICBmcHJpbnRm IChzdGRlcnIsICIgIE9NUF9BTExPQ0FUT1IgPSAnIik7CisgIGZwcmludGYgKHN0ZGVyciwg IiAgW2hvc3RdIE9NUF9BTExPQ0FUT1IgPSAnIik7CiAgIHN3aXRjaCAoZ29tcF9kZWZfYWxs b2NhdG9yKQogICAgIHsKICNkZWZpbmUgQyh2KSBjYXNlIHY6IGZwdXRzICgjdiwgc3RkZXJy KTsgYnJlYWs7CkBAIC0xMzg3LDcgKzE2NjgsNyBAQCBvbXBfZGlzcGxheV9lbnYgKGludCB2 ZXJib3NlKQogICAgIH0KICAgZnB1dHMgKCInXG4iLCBzdGRlcnIpOwogCi0gIGZwdXRzICgi ICBPTVBfVEFSR0VUX09GRkxPQUQgPSAnIiwgc3RkZXJyKTsKKyAgZnB1dHMgKCIgIFthbGxd IE9NUF9UQVJHRVRfT0ZGTE9BRCA9ICciLCBzdGRlcnIpOwogICBzd2l0Y2ggKGdvbXBfdGFy Z2V0X29mZmxvYWRfdmFyKQogICAgIHsKICAgICBjYXNlIEdPTVBfVEFSR0VUX09GRkxPQURf REVGQVVMVDoKQEAgLTE0MDQsMTMgKzE2ODUsMTMgQEAgb21wX2Rpc3BsYXlfZW52IChpbnQg dmVyYm9zZSkKIAogICBpZiAodmVyYm9zZSkKICAgICB7Ci0gICAgICBmcHV0cyAoIiAgR09N UF9DUFVfQUZGSU5JVFkgPSAnJ1xuIiwgc3RkZXJyKTsKLSAgICAgIGZwcmludGYgKHN0ZGVy ciwgIiAgR09NUF9TVEFDS1NJWkUgPSAnJWx1J1xuIiwgc3RhY2tzaXplKTsKKyAgICAgIGZw dXRzICgiICBbaG9zdF0gR09NUF9DUFVfQUZGSU5JVFkgPSAnJ1xuIiwgc3RkZXJyKTsKKyAg ICAgIGZwcmludGYgKHN0ZGVyciwgIiAgW2hvc3RdIEdPTVBfU1RBQ0tTSVpFID0gJyVsdSdc biIsIHN0YWNrc2l6ZSk7CiAjaWZkZWYgSEFWRV9JTlRUWVBFU19ICi0gICAgICBmcHJpbnRm IChzdGRlcnIsICIgIEdPTVBfU1BJTkNPVU5UID0gJyUiUFJJdTY0IidcbiIsCisgICAgICBm cHJpbnRmIChzdGRlcnIsICIgIFtob3N0XSBHT01QX1NQSU5DT1VOVCA9ICclIlBSSXU2NCIn XG4iLAogCSAgICAgICAodWludDY0X3QpIGdvbXBfc3Bpbl9jb3VudF92YXIpOwogI2Vsc2UK LSAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgR09NUF9TUElOQ09VTlQgPSAnJWx1J1xuIiwK KyAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgW2hvc3RdIEdPTVBfU1BJTkNPVU5UID0gJyVs dSdcbiIsCiAJICAgICAgICh1bnNpZ25lZCBsb25nKSBnb21wX3NwaW5fY291bnRfdmFyKTsK ICNlbmRpZgogICAgIH0KQEAgLTE0NTksNiArMTc0MCwyNDkgQEAgaGFuZGxlX29tcF9kaXNw bGF5X2VudiAodm9pZCkKICAgICBpYWxpYXNfY2FsbCAob21wX2Rpc3BsYXlfZW52KSAodmVy Ym9zZSk7CiB9CiAKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgcGFyc2VfZGV2aWNlX3NwZWNp ZmljLiBFeHRyYWN0cyB0aGUgZGV2aWNlIG51bWJlciBmcm9tCisgICBhbiBlbnZpcm9ubWVu dCB2YXJpYWJsZSBuYW1lLiAgKi8KK3N0YXRpYyB2b2lkCitnZXRfZGV2aWNlX251bSAoY2hh ciAqKmVudiwgaW50IHByZWZpeF9sZW4sIGludCAqZGV2X251bSwgaW50ICpuYW1lX2xlbikK K3sKKyAgaWYgKGVudiA9PSBOVUxMIHx8ICplbnYgPT0gTlVMTCkKKyAgICB7CisgICAgICAq bmFtZV9sZW4gPSAwOworICAgICAgKmRldl9udW0gPSAtMTsKKyAgICAgIHJldHVybjsKKyAg ICB9CisKKyAgaW50IGVxX3BvcyA9IHN0cmNociAoKmVudiwgJz0nKSAtICplbnY7CisgIGlu dCBkZXZfbnVtX2xlbiA9IGVxX3BvcyAtIHByZWZpeF9sZW47CisgIGNoYXIgYnVmX2Rldl9u dW1bZGV2X251bV9sZW4rMV07CisKKyAgc3RybmNweShidWZfZGV2X251bSwgKmVudiArIHBy ZWZpeF9sZW4sIGRldl9udW1fbGVuKTsKKyAgYnVmX2Rldl9udW1bZGV2X251bV9sZW5dID0g J1wwJzsKKyAgKmRldl9udW0gPSBhdG9pIChidWZfZGV2X251bSk7CisgICpuYW1lX2xlbiA9 IGVxX3BvczsKK30KKworLyogSGVscGVyIGZ1bmN0aW9uIGZvciBwYXJzZV9kZXZpY2Vfc3Bl Y2lmaWMuIEFkZHMgYSBuZXcgbm9kZSB0byB0aGUgZ2l2ZW4KKyAgIGxpc3QuICAqLworc3Rh dGljIHN0cnVjdCBnb21wX2ljdl9saXN0KgorYWRkX2RldmljZV9zcGVjaWZpY19pY3YgKGlu dCBkZXZfbnVtLCBzaXplX3Qgc2l6ZSwgc3RydWN0IGdvbXBfaWN2X2xpc3QgKipsaXN0KQor eworICBpZiAobGlzdCA9PSBOVUxMKQorICAgIHJldHVybiBOVUxMOworCisgIHN0cnVjdCBn b21wX2ljdl9saXN0ICpuZXdfbm9kZSA9CisgICAgKHN0cnVjdCBnb21wX2ljdl9saXN0Kikg bWFsbG9jIChzaXplb2YgKHN0cnVjdCBnb21wX2ljdl9saXN0KSk7CisgIG5ld19ub2RlLT5k ZXZpY2VfbnVtID0gZGV2X251bTsKKyAgbmV3X25vZGUtPnZhbHVlID0gbWFsbG9jIChzaXpl KTsKKyAgbmV3X25vZGUtPm5leHQgPSAqbGlzdDsKKyAgKmxpc3QgPSBuZXdfbm9kZTsKKwor ICByZXR1cm4gbmV3X25vZGU7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgJ2luaXRp YWxpemVfZW52JyB0byBwYXJzZSBkZXZpY2Utc3BlY2lmaWMgZW52aXJvbm1lbnQKKyAgIHZh cmlhYmxlcyBsaWtlICdPTVBfTlVNX1RFQU1TX0RFVl80MicuICAqLworc3RhdGljIHZvaWQK K3BhcnNlX2RldmljZV9zcGVjaWZpYyAoKQoreworICBleHRlcm4gY2hhciAqKmVudmlyb247 CisgIGludCBkZXZfbnVtOworICBpbnQgbmFtZV9sZW47CisgIHN0cnVjdCBnb21wX2ljdl9s aXN0ICpuZXdfbm9kZTsKKworICBmb3IgKGNoYXIgKiplbnYgPSBlbnZpcm9uOyAqZW52ICE9 IDA7IGVudisrKQorICB7CisgICAgaWYgKHN0cm5jbXAgKCplbnYsICJPTVBfU0NIRURVTEVf REVWXyIsIDE3KSA9PSAwKQorICAgICAgeworCWdldF9kZXZpY2VfbnVtIChlbnYsIDE3LCAm ZGV2X251bSwgJm5hbWVfbGVuKTsKKwljaGFyIG5hbWVbbmFtZV9sZW4rMV07CisJc3RybmNw eShuYW1lLCAqZW52LCBuYW1lX2xlbik7CisJbmFtZVtuYW1lX2xlbl0gPSAnXDAnOworCWVu dW0gZ29tcF9zY2hlZHVsZV90eXBlIHNjaGVkdWxlX3R5cGU7CisJaW50IGNodW5rX3NpemU7 CisJcGFyc2Vfc2NoZWR1bGUgKG5hbWUsICZzY2hlZHVsZV90eXBlLCAmY2h1bmtfc2l6ZSk7 CisJbmV3X25vZGUgPSBhZGRfZGV2aWNlX3NwZWNpZmljX2ljdiAoZGV2X251bSwKKwkJCQkJ ICAgIHNpemVvZiAoZW51bSBnb21wX3NjaGVkdWxlX3R5cGUpLAorCQkJCQkgICAgJmdvbXBf cnVuX3NjaGVkX3Zhcl9kZXZfbGlzdCk7CisJKigoZW51bSBnb21wX3NjaGVkdWxlX3R5cGUq KShuZXdfbm9kZS0+dmFsdWUpKSA9IHNjaGVkdWxlX3R5cGU7CisJbmV3X25vZGUgPSBhZGRf ZGV2aWNlX3NwZWNpZmljX2ljdiAoZGV2X251bSwgc2l6ZW9mIChpbnQpLAorCQkJCQkgICAg JmdvbXBfcnVuX3NjaGVkX2NodW5rX3NpemVfZGV2X2xpc3QpOworCSooKGludCopKG5ld19u b2RlLT52YWx1ZSkpID0gY2h1bmtfc2l6ZTsKKwlnb3RvIG5leHQ7CisgICAgICB9CisgICAg ZWxzZSBpZiAoc3RybmNtcCAoKmVudiwgIk9NUF9EWU5BTUlDX0RFVl8iLCAxNikgPT0gMCkK KyAgICAgIHsKKwlnZXRfZGV2aWNlX251bSAoZW52LCAxNiwgJmRldl9udW0sICZuYW1lX2xl bik7CisJY2hhciBuYW1lW25hbWVfbGVuKzFdOworCXN0cm5jcHkobmFtZSwgKmVudiwgbmFt ZV9sZW4pOworCW5hbWVbbmFtZV9sZW5dID0gJ1wwJzsKKwlib29sIHZhbHVlOworCWlmICgh cGFyc2VfYm9vbGVhbiAobmFtZSwgJnZhbHVlKSkKKwkgIGNvbnRpbnVlOworCW5ld19ub2Rl ID0gYWRkX2RldmljZV9zcGVjaWZpY19pY3YgKGRldl9udW0sIHNpemVvZiAoYm9vbCksCisJ CQkJCSAgICAmZ29tcF9keW5fdmFyX2Rldl9saXN0KTsKKwkqKChib29sKikobmV3X25vZGUt PnZhbHVlKSkgPSB2YWx1ZTsKKwlnb3RvIG5leHQ7CisgICAgICB9CisgICAgZWxzZSBpZiAo c3RybmNtcCAoKmVudiwgIk9NUF9USFJFQURfTElNSVRfREVWXyIsIDIxKSA9PSAwKQorICAg ICAgeworCWdldF9kZXZpY2VfbnVtIChlbnYsIDIxLCAmZGV2X251bSwgJm5hbWVfbGVuKTsK KwljaGFyIG5hbWVbbmFtZV9sZW4rMV07CisJc3RybmNweShuYW1lLCAqZW52LCBuYW1lX2xl bik7CisJbmFtZVtuYW1lX2xlbl0gPSAnXDAnOworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisJ aWYgKCFwYXJzZV91bnNpZ25lZF9sb25nIChuYW1lLCAmdmFsdWUsIGZhbHNlKSkKKwkgIGNv bnRpbnVlOworCXZhbHVlID0gdmFsdWUgPiBJTlRfTUFYID8gVUlOVF9NQVggOiB2YWx1ZTsK KwluZXdfbm9kZSA9IGFkZF9kZXZpY2Vfc3BlY2lmaWNfaWN2IChkZXZfbnVtLCBzaXplb2Yg KHVuc2lnbmVkIGxvbmcpLAorCQkJCQkgICAgJmdvbXBfdGhyZWFkX2xpbWl0X3Zhcl9kZXZf bGlzdCk7CisJKigodW5zaWduZWQgbG9uZyopKG5ld19ub2RlLT52YWx1ZSkpID0gdmFsdWU7 CisJZ290byBuZXh0OworICAgICAgfQorICAgIGVsc2UgaWYgKHN0cm5jbXAgKCplbnYsICJP TVBfTlVNX1RIUkVBRFNfREVWXyIsIDIwKSA9PSAwKQorICAgICAgeworCWdldF9kZXZpY2Vf bnVtIChlbnYsIDIwLCAmZGV2X251bSwgJm5hbWVfbGVuKTsKKwljaGFyIG5hbWVbbmFtZV9s ZW4rMV07CisJc3RybmNweShuYW1lLCAqZW52LCBuYW1lX2xlbik7CisJbmFtZVtuYW1lX2xl bl0gPSAnXDAnOworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisJdW5zaWduZWQgbG9uZyAqcHZh bHVlczsKKwl1bnNpZ25lZCBsb25nIG52YWx1ZXMgPSAwOworCWlmICghcGFyc2VfdW5zaWdu ZWRfbG9uZ19saXN0IChuYW1lLCAmdmFsdWUsICZwdmFsdWVzLCAmbnZhbHVlcykpCisJICBj b250aW51ZTsKKwluZXdfbm9kZSA9IGFkZF9kZXZpY2Vfc3BlY2lmaWNfaWN2IChkZXZfbnVt LCBzaXplb2YgKHVuc2lnbmVkIGxvbmcpLAorCQkJCQkgICAgJmdvbXBfbnRocmVhZHNfdmFy X2Rldl9saXN0KTsKKwkqKCh1bnNpZ25lZCBsb25nKikobmV3X25vZGUtPnZhbHVlKSkgPSB2 YWx1ZTsKKwlpZiAobnZhbHVlcyA+IDApCisJICB7CisJICAgIG5ld19ub2RlID0gYWRkX2Rl dmljZV9zcGVjaWZpY19pY3YgKGRldl9udW0sIHNpemVvZiAodW5zaWduZWQgbG9uZyopLAor CQkJCQkJJmdvbXBfbnRocmVhZHNfdmFyX2xpc3RfZGV2X2xpc3QpOworCSAgICAqKCh1bnNp Z25lZCBsb25nKiopKG5ld19ub2RlLT52YWx1ZSkpID0gcHZhbHVlczsKKworCSAgICBuZXdf bm9kZSA9IGFkZF9kZXZpY2Vfc3BlY2lmaWNfaWN2IChkZXZfbnVtLCBzaXplb2YgKHVuc2ln bmVkIGxvbmcqKSwKKwkJCQkJCSZnb21wX250aHJlYWRzX3Zhcl9saXN0X2xlbl9kZXZfbGlz dCk7CisJICAgICooKHVuc2lnbmVkIGxvbmcqKShuZXdfbm9kZS0+dmFsdWUpKSA9IG52YWx1 ZXM7CisJICB9CisJZ290byBuZXh0OworICAgICAgfQorICAgIGVsc2UgaWYgKHN0cm5jbXAg KCplbnYsICJPTVBfTlVNX1RFQU1TX0RFVl8iLCAxOCkgPT0gMCkKKyAgICAgIHsKKwlnZXRf ZGV2aWNlX251bSAoZW52LCAxOCwgJmRldl9udW0sICZuYW1lX2xlbik7CisJY2hhciBuYW1l W25hbWVfbGVuKzFdOworCXN0cm5jcHkobmFtZSwgKmVudiwgbmFtZV9sZW4pOworCW5hbWVb bmFtZV9sZW5dID0gJ1wwJzsKKwlpbnQgdmFsdWU7CisJaWYgKCFwYXJzZV9pbnQgKG5hbWUs ICZ2YWx1ZSwgZmFsc2UpKQorCSAgY29udGludWU7CisJbmV3X25vZGUgPSBhZGRfZGV2aWNl X3NwZWNpZmljX2ljdiAoZGV2X251bSwgc2l6ZW9mIChpbnQpLAorCQkJCQkgICAgJmdvbXBf bnRlYW1zX3Zhcl9kZXZfbGlzdCk7CisJKigoaW50KikobmV3X25vZGUtPnZhbHVlKSkgPSB2 YWx1ZTsKKwlnb3RvIG5leHQ7CisgICAgICB9CisgICAgZWxzZSBpZiAoc3RybmNtcCAoKmVu diwgIk9NUF9QUk9DX0JJTkRfREVWXyIsIDE4KSA9PSAwKQorICAgICAgeworCWdldF9kZXZp Y2VfbnVtIChlbnYsIDE4LCAmZGV2X251bSwgJm5hbWVfbGVuKTsKKwljaGFyIG5hbWVbbmFt ZV9sZW4rMV07CisJc3RybmNweShuYW1lLCAqZW52LCBuYW1lX2xlbik7CisJbmFtZVtuYW1l X2xlbl0gPSAnXDAnOworCWNoYXIgdmFsdWUgPSBvbXBfcHJvY19iaW5kX2ZhbHNlOworCWNo YXIgKnB2YWx1ZXM7CisJdW5zaWduZWQgbG9uZyBudmFsdWVzID0gMDsKKwlib29sIGlnbm9y ZSA9IGZhbHNlOworCWlmIChwYXJzZV9iaW5kX3ZhciAobmFtZSwgJnZhbHVlLCAmcHZhbHVl cywgJm52YWx1ZXMpKQorCSAgaWdub3JlID0gdHJ1ZTsKKworCWNoYXIgb21wX3BsYWNlc1tu YW1lX2xlbl07CisJc3RybmNweShvbXBfcGxhY2VzLCAqZW52LCBuYW1lX2xlbik7CisJaWYg KHBhcnNlX3BsYWNlc192YXIgKG9tcF9wbGFjZXMsIGlnbm9yZSkpCisJICB7CisJICAgIGlm ICh2YWx1ZSA9PSBvbXBfcHJvY19iaW5kX2ZhbHNlKQorCSAgICAgIHZhbHVlID0gdHJ1ZTsK KwkgICAgaWdub3JlID0gdHJ1ZTsKKwkgIH0KKwlpZiAocGFyc2VfYWZmaW5pdHkgKGlnbm9y ZSkpCisJICBpZiAodmFsdWUgPT0gb21wX3Byb2NfYmluZF9mYWxzZSkKKwkgICAgdmFsdWUg PSB0cnVlOworCisJbmV3X25vZGUgPSBhZGRfZGV2aWNlX3NwZWNpZmljX2ljdiAoZGV2X251 bSwgc2l6ZW9mIChjaGFyKSwKKwkJCQkJICAgICZnb21wX3Byb2NfYmluZF92YXJfZGV2X2xp c3QpOworCSooKGNoYXIqKShuZXdfbm9kZS0+dmFsdWUpKSA9IHZhbHVlOworCisJaWYgKG52 YWx1ZXMgPiAwKQorCSAgeworCSAgICBuZXdfbm9kZSA9IGFkZF9kZXZpY2Vfc3BlY2lmaWNf aWN2IChkZXZfbnVtLCBzaXplb2YgKGNoYXIqKSwKKwkJCQkJCSZnb21wX3Byb2NfYmluZF92 YXJfbGlzdF9kZXZfbGlzdCk7CisJICAgICooKGNoYXIqKikobmV3X25vZGUtPnZhbHVlKSkg PSBwdmFsdWVzOworCisJICAgIG5ld19ub2RlID0gYWRkX2RldmljZV9zcGVjaWZpY19pY3Yg KGRldl9udW0sIHNpemVvZiAodW5zaWduZWQgbG9uZyksCisJCQkJCQkmZ29tcF9wcm9jX2Jp bmRfdmFyX2xpc3RfbGVuX2Rldl9saXN0KTsKKwkgICAgKigodW5zaWduZWQgbG9uZyopKG5l d19ub2RlLT52YWx1ZSkpID0gbnZhbHVlczsKKwkgIH0KKwlnb3RvIG5leHQ7CisgICAgICB9 CisgICAgZWxzZSBpZiAoc3RybmNtcCAoKmVudiwgIk9NUF9NQVhfQUNUSVZFX0xFVkVMU19E RVZfIiwgMjYpID09IDApCisgICAgICB7CisJZ2V0X2RldmljZV9udW0gKGVudiwgMjYsICZk ZXZfbnVtLCAmbmFtZV9sZW4pOworCWNoYXIgbmFtZVtuYW1lX2xlbisxXTsKKwlzdHJuY3B5 KG5hbWUsICplbnYsIG5hbWVfbGVuKTsKKwluYW1lW25hbWVfbGVuXSA9ICdcMCc7CisJdW5z aWduZWQgbG9uZyB2YWx1ZTsKKwlpZiAoIXBhcnNlX3Vuc2lnbmVkX2xvbmcgKG5hbWUsICZ2 YWx1ZSwgdHJ1ZSkpCisJICBjb250aW51ZTsKKwl2YWx1ZSA9ICh2YWx1ZSA+IGdvbXBfc3Vw cG9ydGVkX2FjdGl2ZV9sZXZlbHMpCisJCT8gZ29tcF9zdXBwb3J0ZWRfYWN0aXZlX2xldmVs cyA6IHZhbHVlOworCW5ld19ub2RlID0gYWRkX2RldmljZV9zcGVjaWZpY19pY3YgKGRldl9u dW0sIHNpemVvZiAodW5zaWduZWQgbG9uZyksCisJCQkJCSAgICAmZ29tcF9tYXhfYWN0aXZl X2xldmVsc192YXJfZGV2X2xpc3QpOworCSooKHVuc2lnbmVkIGxvbmcqKShuZXdfbm9kZS0+ dmFsdWUpKSA9IHZhbHVlOworCWdvdG8gbmV4dDsKKyAgICAgIH0KKyAgICBlbHNlIGlmIChz dHJuY21wICgqZW52LCAiT01QX1NUQUNLU0laRV9ERVZfIiwgMTgpID09IDApCisgICAgICB7 CisJZ2V0X2RldmljZV9udW0gKGVudiwgMTgsICZkZXZfbnVtLCAmbmFtZV9sZW4pOworCWNo YXIgbmFtZVtuYW1lX2xlbisxXTsKKwlzdHJuY3B5KG5hbWUsICplbnYsIG5hbWVfbGVuKTsK KwluYW1lW25hbWVfbGVuXSA9ICdcMCc7CisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwlpZiAo IXBhcnNlX3N0YWNrc2l6ZSAobmFtZSwgJnZhbHVlKSkKKwkgIGNvbnRpbnVlOworCW5ld19u b2RlID0gYWRkX2RldmljZV9zcGVjaWZpY19pY3YgKGRldl9udW0sIHNpemVvZiAodW5zaWdu ZWQgbG9uZyksCisJCQkJCSAgICAmc3RhY2tzaXplX2Rldl9saXN0KTsKKwkqKCh1bnNpZ25l ZCBsb25nKikobmV3X25vZGUtPnZhbHVlKSkgPSB2YWx1ZTsKKwlnb3RvIG5leHQ7CisgICAg ICB9CisgICAgZWxzZSBpZiAoc3RybmNtcCAoKmVudiwgIk9NUF9XQUlUX1BPTElDWV9ERVZf IiwgMjApID09IDApCisgICAgICB7CisJZ2V0X2RldmljZV9udW0gKGVudiwgMjAsICZkZXZf bnVtLCAmbmFtZV9sZW4pOworCWNoYXIgbmFtZVtuYW1lX2xlbisxXTsKKwlzdHJuY3B5KG5h bWUsICplbnYsIG5hbWVfbGVuKTsKKwluYW1lW25hbWVfbGVuXSA9ICdcMCc7CisJaW50IHZh bHVlOworCWlmICghcGFyc2Vfd2FpdF9wb2xpY3kgKG5hbWUsICZ2YWx1ZSkpCisJICBjb250 aW51ZTsKKwluZXdfbm9kZSA9IGFkZF9kZXZpY2Vfc3BlY2lmaWNfaWN2IChkZXZfbnVtLCBz aXplb2YgKGludCksCisJCQkJCSAgICAmd2FpdF9wb2xpY3lfZGV2X2xpc3QpOworCSooKGlu dCopKG5ld19ub2RlLT52YWx1ZSkpID0gdmFsdWU7CisJZ290byBuZXh0OworICAgICAgfQor ICAgIGVsc2UgaWYgKHN0cm5jbXAgKCplbnYsICJPTVBfVEVBTVNfVEhSRUFEX0xJTUlUX0RF Vl8iLCAyNykgPT0gMCkKKyAgICAgIHsKKwlnZXRfZGV2aWNlX251bSAoZW52LCAyNywgJmRl dl9udW0sICZuYW1lX2xlbik7CisJY2hhciBuYW1lW25hbWVfbGVuKzFdOworCXN0cm5jcHko bmFtZSwgKmVudiwgbmFtZV9sZW4pOworCW5hbWVbbmFtZV9sZW5dID0gJ1wwJzsKKwlpbnQg dmFsdWU7CisJaWYgKCFwYXJzZV9pbnQgKG5hbWUsICZ2YWx1ZSwgZmFsc2UpKQorCSAgY29u dGludWU7CisJbmV3X25vZGUgPSBhZGRfZGV2aWNlX3NwZWNpZmljX2ljdiAoZGV2X251bSwg c2l6ZW9mIChpbnQpLAorCQkJCQkgICAgJnRlYW1zX3RocmVhZF9saW1pdF92YXJfZGV2X2xp c3QpOworCSooKGludCopKG5ld19ub2RlLT52YWx1ZSkpID0gdmFsdWU7CisJZ290byBuZXh0 OworICAgICAgfQorCisgbmV4dDoKKyAgICBuZXdfbm9kZSA9IE5VTEw7CisgIH0KK30KIAog c3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygoY29uc3RydWN0b3IpKQogaW5pdGlhbGl6ZV9l bnYgKHZvaWQpCkBAIC0xNDY5LDQ0ICsxOTkzLDIxMiBAQCBpbml0aWFsaXplX2VudiAodm9p ZCkKICAgLyogRG8gYSBjb21waWxlIHRpbWUgY2hlY2sgdGhhdCBta29tcF9oLnBsIGRpZCBn b29kIGpvYi4gICovCiAgIG9tcF9jaGVja19kZWZpbmVzICgpOwogCi0gIHBhcnNlX3NjaGVk dWxlICgpOwotICBwYXJzZV9ib29sZWFuICgiT01QX0RZTkFNSUMiLCAmZ29tcF9nbG9iYWxf aWN2LmR5bl92YXIpOworICBwYXJzZV9kZXZpY2Vfc3BlY2lmaWMgKCk7CisKKyAgLyogUGFy c2UgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgc3RvcmUgdGhlaXIgdmFsdWVzIGlu IHRoZSBpbml0aWFsCisgICAgIHN0cnVjdC4gICovCisgIGlmIChwYXJzZV9zY2hlZHVsZSAo Ik9NUF9TQ0hFRFVMRSIsICZnb21wX2luaXRpYWxfaWN2LnJ1bl9zY2hlZF92YXIsCisJCSAg ICAgICZnb21wX2luaXRpYWxfaWN2LnJ1bl9zY2hlZF9jaHVua19zaXplKSkKKyAgICB7Cisg ICAgICBnb21wX2luaXRpYWxfaWN2X2ZsYWdzLnJ1bl9zY2hlZF92YXIgfD0gR09NUF9FTlZf VkFSX1NVRkZJWF9OT05FOworICAgICAgZ29tcF9pbml0aWFsX2ljdl9mbGFncy5ydW5fc2No ZWRfY2h1bmtfc2l6ZSB8PSBHT01QX0VOVl9WQVJfU1VGRklYX05PTkU7CisgICAgfQorICBp ZiAocGFyc2Vfc2NoZWR1bGUgKCJPTVBfU0NIRURVTEVfQUxMIiwgJmdvbXBfaW5pdGlhbF9p Y3ZfYWxsLnJ1bl9zY2hlZF92YXIsCisJCSAgICAgICZnb21wX2luaXRpYWxfaWN2X2FsbC5y dW5fc2NoZWRfY2h1bmtfc2l6ZSkpCisgICAgeworICAgICAgZ29tcF9pbml0aWFsX2ljdl9m bGFncy5ydW5fc2NoZWRfdmFyIHw9IEdPTVBfRU5WX1ZBUl9TVUZGSVhfQUxMOworICAgICAg Z29tcF9pbml0aWFsX2ljdl9mbGFncy5ydW5fc2NoZWRfY2h1bmtfc2l6ZSB8PSBHT01QX0VO Vl9WQVJfU1VGRklYX0FMTDsKKyAgICB9CisgIGlmIChwYXJzZV9zY2hlZHVsZSAoIk9NUF9T Q0hFRFVMRV9ERVYiLCAmZ29tcF9pbml0aWFsX2ljdl9kZXYucnVuX3NjaGVkX3ZhciwKKwkJ ICAgICAgJmdvbXBfaW5pdGlhbF9pY3ZfZGV2LnJ1bl9zY2hlZF9jaHVua19zaXplKSkKKyAg ICB7CisgICAgICBnb21wX2luaXRpYWxfaWN2X2ZsYWdzLnJ1bl9zY2hlZF92YXIgfD0gR09N UF9FTlZfVkFSX1NVRkZJWF9ERVY7CisgICAgICBnb21wX2luaXRpYWxfaWN2X2ZsYWdzLnJ1 bl9zY2hlZF9jaHVua19zaXplIHw9IEdPTVBfRU5WX1ZBUl9TVUZGSVhfREVWOworICAgIH0K KworICAvKiBTZXQgdGhlIElDViB2YWx1ZXMgZm9yIHRoZSBob3N0LiAgKi8KKyAgaWYgKGdv bXBfaW5pdGlhbF9pY3ZfZmxhZ3MucnVuX3NjaGVkX3ZhciAmIEdPTVBfRU5WX1ZBUl9TVUZG SVhfTk9ORSkKKyAgICB7CisgICAgICBnb21wX2dsb2JhbF9pY3YucnVuX3NjaGVkX3ZhciA9 IGdvbXBfaW5pdGlhbF9pY3YucnVuX3NjaGVkX3ZhcjsKKyAgICAgIGdvbXBfZ2xvYmFsX2lj di5ydW5fc2NoZWRfY2h1bmtfc2l6ZSA9CisJZ29tcF9pbml0aWFsX2ljdi5ydW5fc2NoZWRf Y2h1bmtfc2l6ZTsKKyAgICB9CisgIGVsc2UgaWYgKGdvbXBfaW5pdGlhbF9pY3ZfZmxhZ3Mu cnVuX3NjaGVkX3ZhciAmIEdPTVBfRU5WX1ZBUl9TVUZGSVhfQUxMKQorICAgIHsKKyAgICAg IGdvbXBfZ2xvYmFsX2ljdi5ydW5fc2NoZWRfdmFyID0gZ29tcF9pbml0aWFsX2ljdl9hbGwu cnVuX3NjaGVkX3ZhcjsKKyAgICAgIGdvbXBfZ2xvYmFsX2ljdi5ydW5fc2NoZWRfY2h1bmtf c2l6ZSA9CisJZ29tcF9pbml0aWFsX2ljdl9hbGwucnVuX3NjaGVkX2NodW5rX3NpemU7Cisg ICAgfQorCisgIGlmIChwYXJzZV9ib29sZWFuICgiT01QX0RZTkFNSUMiLCAmZ29tcF9pbml0 aWFsX2ljdi5keW5fdmFyKSkKKyAgICBnb21wX2luaXRpYWxfaWN2X2ZsYWdzLmR5bl92YXIg fD0gR09NUF9FTlZfVkFSX1NVRkZJWF9OT05FOworICBpZiAocGFyc2VfYm9vbGVhbiAoIk9N UF9EWU5BTUlDX0FMTCIsICZnb21wX2luaXRpYWxfaWN2X2FsbC5keW5fdmFyKSkKKyAgICBn b21wX2luaXRpYWxfaWN2X2ZsYWdzLmR5bl92YXIgfD0gR09NUF9FTlZfVkFSX1NVRkZJWF9B TEw7CisgIGlmIChwYXJzZV9ib29sZWFuICgiT01QX0RZTkFNSUNfREVWIiwgJmdvbXBfaW5p dGlhbF9pY3ZfZGV2LmR5bl92YXIpKQorICAgIGdvbXBfaW5pdGlhbF9pY3ZfZmxhZ3MuZHlu X3ZhciB8PSBHT01QX0VOVl9WQVJfU1VGRklYX0RFVjsKKyAgaWYgKGdvbXBfaW5pdGlhbF9p Y3ZfZmxhZ3MuZHluX3ZhciAmIEdPTVBfRU5WX1ZBUl9TVUZGSVhfTk9ORSkKKyAgICBnb21w X2dsb2JhbF9pY3YuZHluX3ZhciA9IGdvbXBfaW5pdGlhbF9pY3YuZHluX3ZhcjsKKyAgZWxz ZSBpZiAoZ29tcF9pbml0aWFsX2ljdl9mbGFncy5keW5fdmFyICYgR09NUF9FTlZfVkFSX1NV RkZJWF9BTEwpCisgICAgZ29tcF9nbG9iYWxfaWN2LmR5bl92YXIgPSBnb21wX2luaXRpYWxf aWN2X2FsbC5keW5fdmFyOworCiAgIHBhcnNlX2Jvb2xlYW4gKCJPTVBfQ0FOQ0VMTEFUSU9O IiwgJmdvbXBfY2FuY2VsX3Zhcik7CiAgIHBhcnNlX2Jvb2xlYW4gKCJPTVBfRElTUExBWV9B RkZJTklUWSIsICZnb21wX2Rpc3BsYXlfYWZmaW5pdHlfdmFyKTsKLSAgcGFyc2VfaW50ICgi T01QX0RFRkFVTFRfREVWSUNFIiwgJmdvbXBfZ2xvYmFsX2ljdi5kZWZhdWx0X2RldmljZV92 YXIsIHRydWUpOworCisgIGlmIChwYXJzZV9pbnQgKCJPTVBfREVGQVVMVF9ERVZJQ0UiLCAm Z29tcF9pbml0aWFsX2ljdi5kZWZhdWx0X2RldmljZV92YXIsCisJCSB0cnVlKSkKKyAgICBn b21wX2dsb2JhbF9pY3YuZGVmYXVsdF9kZXZpY2VfdmFyID0gZ29tcF9pbml0aWFsX2ljdi5k ZWZhdWx0X2RldmljZV92YXI7CisKICAgcGFyc2VfdGFyZ2V0X29mZmxvYWQgKCJPTVBfVEFS R0VUX09GRkxPQUQiLCAmZ29tcF90YXJnZXRfb2ZmbG9hZF92YXIpOwogICBwYXJzZV9pbnQg KCJPTVBfTUFYX1RBU0tfUFJJT1JJVFkiLCAmZ29tcF9tYXhfdGFza19wcmlvcml0eV92YXIs IHRydWUpOwogICBnb21wX2RlZl9hbGxvY2F0b3IgPSBwYXJzZV9hbGxvY2F0b3IgKCk7CiAg IGlmIChwYXJzZV91bnNpZ25lZF9sb25nICgiT01QX1RIUkVBRF9MSU1JVCIsICZ0aHJlYWRf bGltaXRfdmFyLCBmYWxzZSkpCiAgICAgewotICAgICAgZ29tcF9nbG9iYWxfaWN2LnRocmVh ZF9saW1pdF92YXIKKyAgICAgIGdvbXBfaW5pdGlhbF9pY3YudGhyZWFkX2xpbWl0X3Zhcgor CT0gdGhyZWFkX2xpbWl0X3ZhciA+IElOVF9NQVggPyBVSU5UX01BWCA6IHRocmVhZF9saW1p dF92YXI7CisgICAgICBnb21wX2luaXRpYWxfaWN2X2ZsYWdzLnRocmVhZF9saW1pdF92YXIg fD0gR09NUF9FTlZfVkFSX1NVRkZJWF9OT05FOworICAgIH0KKyAgaWYgKHBhcnNlX3Vuc2ln bmVkX2xvbmcgKCJPTVBfVEhSRUFEX0xJTUlUX0FMTCIsICZ0aHJlYWRfbGltaXRfdmFyLCBm YWxzZSkpCisgICAgeworICAgICAgZ29tcF9pbml0aWFsX2ljdl9hbGwudGhyZWFkX2xpbWl0 X3ZhcgogCT0gdGhyZWFkX2xpbWl0X3ZhciA+IElOVF9NQVggPyBVSU5UX01BWCA6IHRocmVh ZF9saW1pdF92YXI7CisgICAgICBnb21wX2luaXRpYWxfaWN2X2ZsYWdzLnRocmVhZF9saW1p dF92YXIgfD0gR09NUF9FTlZfVkFSX1NVRkZJWF9BTEw7CiAgICAgfQorICBpZiAocGFyc2Vf dW5zaWduZWRfbG9uZyAoIk9NUF9USFJFQURfTElNSVRfREVWIiwgJnRocmVhZF9saW1pdF92 YXIsIGZhbHNlKSkKKyAgICB7CisgICAgICBnb21wX2luaXRpYWxfaWN2X2Rldi50aHJlYWRf bGltaXRfdmFyCisJPSB0aHJlYWRfbGltaXRfdmFyID4gSU5UX01BWCA/IFVJTlRfTUFYIDog dGhyZWFkX2xpbWl0X3ZhcjsKKyAgICAgIGdvbXBfaW5pdGlhbF9pY3ZfZmxhZ3MudGhyZWFk X2xpbWl0X3ZhciB8PSBHT01QX0VOVl9WQVJfU1VGRklYX0RFVjsKKyAgICB9CisgIGlmIChn b21wX2luaXRpYWxfaWN2X2ZsYWdzLnRocmVhZF9saW1pdF92YXIgJiBHT01QX0VOVl9WQVJf U1VGRklYX05PTkUpCisgICAgZ29tcF9nbG9iYWxfaWN2LnRocmVhZF9saW1pdF92YXIgPSBn b21wX2luaXRpYWxfaWN2LnRocmVhZF9saW1pdF92YXI7CisgIGVsc2UgaWYgKGdvbXBfaW5p dGlhbF9pY3ZfZmxhZ3MudGhyZWFkX2xpbWl0X3ZhciAmIEdPTVBfRU5WX1ZBUl9TVUZGSVhf QUxMKQorICAgIGdvbXBfZ2xvYmFsX2ljdi50aHJlYWRfbGltaXRfdmFyID0gZ29tcF9pbml0 aWFsX2ljdl9hbGwudGhyZWFkX2xpbWl0X3ZhcjsKKwogICBwYXJzZV9pbnRfc2VjdXJlICgi R09NUF9ERUJVRyIsICZnb21wX2RlYnVnX3ZhciwgdHJ1ZSk7CiAjaWZuZGVmIEhBVkVfU1lO Q19CVUlMVElOUwogICBnb21wX211dGV4X2luaXQgKCZnb21wX21hbmFnZWRfdGhyZWFkc19s b2NrKTsKICNlbmRpZgogICBnb21wX2luaXRfbnVtX3RocmVhZHMgKCk7CiAgIGdvbXBfYXZh aWxhYmxlX2NwdXMgPSBnb21wX2dsb2JhbF9pY3YubnRocmVhZHNfdmFyOwotICBpZiAoIXBh cnNlX3Vuc2lnbmVkX2xvbmdfbGlzdCAoIk9NUF9OVU1fVEhSRUFEUyIsCi0JCQkJICZnb21w X2dsb2JhbF9pY3YubnRocmVhZHNfdmFyLAotCQkJCSAmZ29tcF9udGhyZWFkc192YXJfbGlz dCwKLQkJCQkgJmdvbXBfbnRocmVhZHNfdmFyX2xpc3RfbGVuKSkKKworICBpZiAocGFyc2Vf dW5zaWduZWRfbG9uZ19saXN0ICgiT01QX05VTV9USFJFQURTIiwKKwkJCQkmZ29tcF9pbml0 aWFsX2ljdi5udGhyZWFkc192YXIsCisJCQkJJmdvbXBfaW5pdGlhbF9pY3YubnRocmVhZHNf dmFyX2xpc3QsCisJCQkJJmdvbXBfaW5pdGlhbF9pY3YubnRocmVhZHNfdmFyX2xpc3RfbGVu KSkKKyAgICBnb21wX2luaXRpYWxfaWN2X2ZsYWdzLm50aHJlYWRzX3ZhciB8PSBHT01QX0VO Vl9WQVJfU1VGRklYX05PTkU7CisgIGlmIChwYXJzZV91bnNpZ25lZF9sb25nX2xpc3QgKCJP TVBfTlVNX1RIUkVBRFNfQUxMIiwKKwkJCQkmZ29tcF9pbml0aWFsX2ljdl9hbGwubnRocmVh ZHNfdmFyLAorCQkJCSZnb21wX2luaXRpYWxfaWN2X2FsbC5udGhyZWFkc192YXJfbGlzdCwK KwkJCQkmZ29tcF9pbml0aWFsX2ljdl9hbGwubnRocmVhZHNfdmFyX2xpc3RfbGVuKSkKKyAg ICBnb21wX2luaXRpYWxfaWN2X2ZsYWdzLm50aHJlYWRzX3ZhciB8PSBHT01QX0VOVl9WQVJf U1VGRklYX0FMTDsKKyAgaWYgKHBhcnNlX3Vuc2lnbmVkX2xvbmdfbGlzdCAoIk9NUF9OVU1f VEhSRUFEU19ERVYiLAorCQkJCSZnb21wX2luaXRpYWxfaWN2X2Rldi5udGhyZWFkc192YXIs CisJCQkJJmdvbXBfaW5pdGlhbF9pY3ZfZGV2Lm50aHJlYWRzX3Zhcl9saXN0LAorCQkJCSZn b21wX2luaXRpYWxfaWN2X2Rldi5udGhyZWFkc192YXJfbGlzdF9sZW4pKQorICAgIGdvbXBf aW5pdGlhbF9pY3ZfZmxhZ3MubnRocmVhZHNfdmFyIHw9IEdPTVBfRU5WX1ZBUl9TVUZGSVhf REVWOworICBpZiAoZ29tcF9pbml0aWFsX2ljdl9mbGFncy5udGhyZWFkc192YXIgJiBHT01Q X0VOVl9WQVJfU1VGRklYX05PTkUpCisgICAgeworICAgICAgZ29tcF9nbG9iYWxfaWN2Lm50 aHJlYWRzX3ZhciA9IGdvbXBfaW5pdGlhbF9pY3YubnRocmVhZHNfdmFyOworICAgICAgZ29t cF9udGhyZWFkc192YXJfbGlzdCA9IGdvbXBfaW5pdGlhbF9pY3YubnRocmVhZHNfdmFyX2xp c3Q7CisgICAgICBnb21wX250aHJlYWRzX3Zhcl9saXN0X2xlbiA9IGdvbXBfaW5pdGlhbF9p Y3YubnRocmVhZHNfdmFyX2xpc3RfbGVuOworICAgIH0KKyAgZWxzZSBpZiAoZ29tcF9pbml0 aWFsX2ljdl9mbGFncy5udGhyZWFkc192YXIgJiBHT01QX0VOVl9WQVJfU1VGRklYX0FMTCkK KyAgICB7CisgICAgICBnb21wX2dsb2JhbF9pY3YubnRocmVhZHNfdmFyID0gZ29tcF9pbml0 aWFsX2ljdl9hbGwubnRocmVhZHNfdmFyOworICAgICAgZ29tcF9udGhyZWFkc192YXJfbGlz dCA9IGdvbXBfaW5pdGlhbF9pY3ZfYWxsLm50aHJlYWRzX3Zhcl9saXN0OworICAgICAgZ29t cF9udGhyZWFkc192YXJfbGlzdF9sZW4gPSBnb21wX2luaXRpYWxfaWN2X2FsbC5udGhyZWFk c192YXJfbGlzdF9sZW47CisgICAgfQorICBlbHNlCiAgICAgZ29tcF9nbG9iYWxfaWN2Lm50 aHJlYWRzX3ZhciA9IGdvbXBfYXZhaWxhYmxlX2NwdXM7Ci0gIHBhcnNlX2ludCAoIk9NUF9O VU1fVEVBTVMiLCAmZ29tcF9udGVhbXNfdmFyLCBmYWxzZSk7Ci0gIHBhcnNlX2ludCAoIk9N UF9URUFNU19USFJFQURfTElNSVQiLCAmZ29tcF90ZWFtc190aHJlYWRfbGltaXRfdmFyLCBm YWxzZSk7CisKKyAgaWYgKHBhcnNlX2ludCAoIk9NUF9OVU1fVEVBTVMiLCAmZ29tcF9pbml0 aWFsX2ljdi5udGVhbXNfdmFyLCBmYWxzZSkpCisgICAgZ29tcF9pbml0aWFsX2ljdl9mbGFn cy5udGVhbXNfdmFyIHw9IEdPTVBfRU5WX1ZBUl9TVUZGSVhfTk9ORTsKKyAgaWYgKHBhcnNl X2ludCAoIk9NUF9OVU1fVEVBTVNfQUxMIiwgJmdvbXBfaW5pdGlhbF9pY3ZfYWxsLm50ZWFt c192YXIsIGZhbHNlKSkKKyAgICBnb21wX2luaXRpYWxfaWN2X2ZsYWdzLm50ZWFtc192YXIg fD0gR09NUF9FTlZfVkFSX1NVRkZJWF9BTEw7CisgIGlmIChwYXJzZV9pbnQgKCJPTVBfTlVN X1RFQU1TX0RFViIsICZnb21wX2luaXRpYWxfaWN2X2Rldi5udGVhbXNfdmFyLCBmYWxzZSkp CisgICAgZ29tcF9pbml0aWFsX2ljdl9mbGFncy5udGVhbXNfdmFyIHw9IEdPTVBfRU5WX1ZB Ul9TVUZGSVhfREVWOworICBpZiAoZ29tcF9pbml0aWFsX2ljdl9mbGFncy5udGVhbXNfdmFy ICYgR09NUF9FTlZfVkFSX1NVRkZJWF9OT05FKQorICAgIGdvbXBfbnRlYW1zX3ZhciA9IGdv bXBfaW5pdGlhbF9pY3YubnRlYW1zX3ZhcjsKKyAgZWxzZSBpZiAoZ29tcF9pbml0aWFsX2lj dl9mbGFncy5udGVhbXNfdmFyICYgR09NUF9FTlZfVkFSX1NVRkZJWF9BTEwpCisgICAgZ29t cF9udGVhbXNfdmFyID0gZ29tcF9pbml0aWFsX2ljdl9hbGwubnRlYW1zX3ZhcjsKKworICBp ZiAocGFyc2VfaW50ICgiT01QX1RFQU1TX1RIUkVBRF9MSU1JVCIsCisJCSAmZ29tcF9pbml0 aWFsX2ljdi50ZWFtc190aHJlYWRfbGltaXRfdmFyLCBmYWxzZSkpCisgICAgZ29tcF9pbml0 aWFsX2ljdl9mbGFncy50ZWFtc190aHJlYWRfbGltaXRfdmFyIHw9IEdPTVBfRU5WX1ZBUl9T VUZGSVhfTk9ORTsKKyAgaWYgKHBhcnNlX2ludCAoIk9NUF9URUFNU19USFJFQURfTElNSVRf QUxMIiwKKwkJICZnb21wX2luaXRpYWxfaWN2X2FsbC50ZWFtc190aHJlYWRfbGltaXRfdmFy LCBmYWxzZSkpCisgICAgZ29tcF9pbml0aWFsX2ljdl9mbGFncy50ZWFtc190aHJlYWRfbGlt aXRfdmFyIHw9IEdPTVBfRU5WX1ZBUl9TVUZGSVhfQUxMOworICBpZiAocGFyc2VfaW50ICgi T01QX1RFQU1TX1RIUkVBRF9MSU1JVF9ERVYiLAorCQkgJmdvbXBfaW5pdGlhbF9pY3ZfZGV2 LnRlYW1zX3RocmVhZF9saW1pdF92YXIsIGZhbHNlKSkKKyAgICBnb21wX2luaXRpYWxfaWN2 X2ZsYWdzLnRlYW1zX3RocmVhZF9saW1pdF92YXIgfD0gR09NUF9FTlZfVkFSX1NVRkZJWF9E RVY7CisgIGlmIChnb21wX2luaXRpYWxfaWN2X2ZsYWdzLnRlYW1zX3RocmVhZF9saW1pdF92 YXIgJiBHT01QX0VOVl9WQVJfU1VGRklYX05PTkUpCisgICAgZ29tcF90ZWFtc190aHJlYWRf bGltaXRfdmFyID0gZ29tcF9pbml0aWFsX2ljdi50ZWFtc190aHJlYWRfbGltaXRfdmFyOwor ICBlbHNlIGlmIChnb21wX2luaXRpYWxfaWN2X2ZsYWdzLnRlYW1zX3RocmVhZF9saW1pdF92 YXIKKwkgICAmIEdPTVBfRU5WX1ZBUl9TVUZGSVhfQUxMKQorICAgIGdvbXBfdGVhbXNfdGhy ZWFkX2xpbWl0X3ZhciA9IGdvbXBfaW5pdGlhbF9pY3ZfYWxsLnRlYW1zX3RocmVhZF9saW1p dF92YXI7CisKICAgYm9vbCBpZ25vcmUgPSBmYWxzZTsKLSAgaWYgKHBhcnNlX2JpbmRfdmFy ICgiT01QX1BST0NfQklORCIsCi0JCSAgICAgICZnb21wX2dsb2JhbF9pY3YuYmluZF92YXIs Ci0JCSAgICAgICZnb21wX2JpbmRfdmFyX2xpc3QsCi0JCSAgICAgICZnb21wX2JpbmRfdmFy X2xpc3RfbGVuKQotICAgICAgJiYgZ29tcF9nbG9iYWxfaWN2LmJpbmRfdmFyID09IG9tcF9w cm9jX2JpbmRfZmFsc2UpCi0gICAgaWdub3JlID0gdHJ1ZTsKKyAgaWYgKHBhcnNlX2JpbmRf dmFyICgiT01QX1BST0NfQklORCIsICZnb21wX2luaXRpYWxfaWN2LmJpbmRfdmFyLAorCQkg ICAgICAmZ29tcF9pbml0aWFsX2ljdi5iaW5kX3Zhcl9saXN0LAorCQkgICAgICAmZ29tcF9p bml0aWFsX2ljdi5iaW5kX3Zhcl9saXN0X2xlbikpCisgICAgZ29tcF9pbml0aWFsX2ljdl9m bGFncy5iaW5kX3ZhciB8PSBHT01QX0VOVl9WQVJfU1VGRklYX05PTkU7CisgIGlmIChwYXJz ZV9iaW5kX3ZhciAoIk9NUF9QUk9DX0JJTkRfQUxMIiwgJmdvbXBfaW5pdGlhbF9pY3ZfYWxs LmJpbmRfdmFyLAorCQkgICAgICAmZ29tcF9pbml0aWFsX2ljdl9hbGwuYmluZF92YXJfbGlz dCwKKwkJICAgICAgJmdvbXBfaW5pdGlhbF9pY3ZfYWxsLmJpbmRfdmFyX2xpc3RfbGVuKSkK KyAgICBnb21wX2luaXRpYWxfaWN2X2ZsYWdzLmJpbmRfdmFyIHw9IEdPTVBfRU5WX1ZBUl9T VUZGSVhfQUxMOworICBpZiAocGFyc2VfYmluZF92YXIgKCJPTVBfUFJPQ19CSU5EX0RFViIs CisJCSAgICAgICZnb21wX2luaXRpYWxfaWN2X2Rldi5iaW5kX3ZhciwKKwkJICAgICAgJmdv bXBfaW5pdGlhbF9pY3ZfZGV2LmJpbmRfdmFyX2xpc3QsCisJCSAgICAgICZnb21wX2luaXRp YWxfaWN2X2Rldi5iaW5kX3Zhcl9saXN0X2xlbikpCisgICAgZ29tcF9pbml0aWFsX2ljdl9m bGFncy5iaW5kX3ZhciB8PSBHT01QX0VOVl9WQVJfU1VGRklYX0RFVjsKKyAgaWYgKGdvbXBf aW5pdGlhbF9pY3ZfZmxhZ3MuYmluZF92YXIgJiBHT01QX0VOVl9WQVJfU1VGRklYX05PTkUp CisgICAgeworICAgICAgZ29tcF9nbG9iYWxfaWN2LmJpbmRfdmFyID0gZ29tcF9pbml0aWFs X2ljdi5iaW5kX3ZhcjsKKyAgICAgIGdvbXBfYmluZF92YXJfbGlzdCA9IGdvbXBfaW5pdGlh bF9pY3YuYmluZF92YXJfbGlzdDsKKyAgICAgIGdvbXBfYmluZF92YXJfbGlzdF9sZW4gPSBn b21wX2luaXRpYWxfaWN2LmJpbmRfdmFyX2xpc3RfbGVuOworICAgICAgaWYgKGdvbXBfZ2xv YmFsX2ljdi5iaW5kX3ZhciA9PSBvbXBfcHJvY19iaW5kX2ZhbHNlKQorCWlnbm9yZSA9IHRy dWU7CisgICAgfQorICBlbHNlIGlmIChnb21wX2luaXRpYWxfaWN2X2ZsYWdzLmJpbmRfdmFy ICYgR09NUF9FTlZfVkFSX1NVRkZJWF9BTEwpCisgICAgeworICAgICAgZ29tcF9nbG9iYWxf aWN2LmJpbmRfdmFyID0gZ29tcF9pbml0aWFsX2ljdl9hbGwuYmluZF92YXI7CisgICAgICBn b21wX2JpbmRfdmFyX2xpc3QgPSBnb21wX2luaXRpYWxfaWN2X2FsbC5iaW5kX3Zhcl9saXN0 OworICAgICAgZ29tcF9iaW5kX3Zhcl9saXN0X2xlbiA9IGdvbXBfaW5pdGlhbF9pY3ZfYWxs LmJpbmRfdmFyX2xpc3RfbGVuOworICAgICAgaWYgKGdvbXBfZ2xvYmFsX2ljdi5iaW5kX3Zh ciA9PSBvbXBfcHJvY19iaW5kX2ZhbHNlKQorCWlnbm9yZSA9IHRydWU7CisgICAgfQorCiAg IGlmIChwYXJzZV91bnNpZ25lZF9sb25nICgiT01QX01BWF9BQ1RJVkVfTEVWRUxTIiwKIAkJ CSAgICZtYXhfYWN0aXZlX2xldmVsc192YXIsIHRydWUpKQorICAgIHsKKyAgICAgIGdvbXBf aW5pdGlhbF9pY3YubWF4X2FjdGl2ZV9sZXZlbHNfdmFyCisJPSAobWF4X2FjdGl2ZV9sZXZl bHNfdmFyID4gZ29tcF9zdXBwb3J0ZWRfYWN0aXZlX2xldmVscykKKwkgID8gZ29tcF9zdXBw b3J0ZWRfYWN0aXZlX2xldmVscyA6IG1heF9hY3RpdmVfbGV2ZWxzX3ZhcjsKKyAgICAgIGdv bXBfaW5pdGlhbF9pY3ZfZmxhZ3MubWF4X2FjdGl2ZV9sZXZlbHNfdmFyIHw9IEdPTVBfRU5W X1ZBUl9TVUZGSVhfTk9ORTsKKyAgICB9CisgIGlmIChwYXJzZV91bnNpZ25lZF9sb25nICgi T01QX01BWF9BQ1RJVkVfTEVWRUxTX0FMTCIsCisJCQkgICAmbWF4X2FjdGl2ZV9sZXZlbHNf dmFyLCB0cnVlKSkKKyAgICB7CisgICAgICBnb21wX2luaXRpYWxfaWN2X2FsbC5tYXhfYWN0 aXZlX2xldmVsc192YXIKKwk9IChtYXhfYWN0aXZlX2xldmVsc192YXIgPiBnb21wX3N1cHBv cnRlZF9hY3RpdmVfbGV2ZWxzKQorCSAgPyBnb21wX3N1cHBvcnRlZF9hY3RpdmVfbGV2ZWxz IDogbWF4X2FjdGl2ZV9sZXZlbHNfdmFyOworICAgICAgZ29tcF9pbml0aWFsX2ljdl9mbGFn cy5tYXhfYWN0aXZlX2xldmVsc192YXIgfD0gR09NUF9FTlZfVkFSX1NVRkZJWF9BTEw7Cisg ICAgfQorICBpZiAocGFyc2VfdW5zaWduZWRfbG9uZyAoIk9NUF9NQVhfQUNUSVZFX0xFVkVM U19ERVYiLAorCQkJICAgJm1heF9hY3RpdmVfbGV2ZWxzX3ZhciwgdHJ1ZSkpCisgICAgewor ICAgICAgZ29tcF9pbml0aWFsX2ljdl9kZXYubWF4X2FjdGl2ZV9sZXZlbHNfdmFyCisJPSAo bWF4X2FjdGl2ZV9sZXZlbHNfdmFyID4gZ29tcF9zdXBwb3J0ZWRfYWN0aXZlX2xldmVscykK KwkgID8gZ29tcF9zdXBwb3J0ZWRfYWN0aXZlX2xldmVscyA6IG1heF9hY3RpdmVfbGV2ZWxz X3ZhcjsKKyAgICAgIGdvbXBfaW5pdGlhbF9pY3ZfZmxhZ3MubWF4X2FjdGl2ZV9sZXZlbHNf dmFyIHw9IEdPTVBfRU5WX1ZBUl9TVUZGSVhfREVWOworICAgIH0KKyAgaWYgKGdvbXBfaW5p dGlhbF9pY3ZfZmxhZ3MubWF4X2FjdGl2ZV9sZXZlbHNfdmFyICYgR09NUF9FTlZfVkFSX1NV RkZJWF9OT05FKQogICAgIGdvbXBfZ2xvYmFsX2ljdi5tYXhfYWN0aXZlX2xldmVsc192YXIK LSAgICAgID0gKG1heF9hY3RpdmVfbGV2ZWxzX3ZhciA+IGdvbXBfc3VwcG9ydGVkX2FjdGl2 ZV9sZXZlbHMpCi0JPyBnb21wX3N1cHBvcnRlZF9hY3RpdmVfbGV2ZWxzIDogbWF4X2FjdGl2 ZV9sZXZlbHNfdmFyOworICAgICAgPSBnb21wX2luaXRpYWxfaWN2Lm1heF9hY3RpdmVfbGV2 ZWxzX3ZhcjsKKyAgZWxzZSBpZiAoZ29tcF9pbml0aWFsX2ljdl9mbGFncy5tYXhfYWN0aXZl X2xldmVsc192YXIKKwkgICAmIEdPTVBfRU5WX1ZBUl9TVUZGSVhfQUxMKQorICAgIGdvbXBf Z2xvYmFsX2ljdi5tYXhfYWN0aXZlX2xldmVsc192YXIKKyAgICAgID0gZ29tcF9pbml0aWFs X2ljdl9hbGwubWF4X2FjdGl2ZV9sZXZlbHNfdmFyOwogICBlbHNlCiAgICAgewogICAgICAg Ym9vbCBuZXN0ZWQgPSB0cnVlOwpAQCAtMTU0Nyw3ICsyMjM5LDE5IEBAIGluaXRpYWxpemVf ZW52ICh2b2lkKQogICAgICAgZ29tcF9zZXRfYWZmaW5pdHlfZm9ybWF0IChlbnYsIHN0cmxl biAoZW52KSk7CiAgIH0KIAotICB3YWl0X3BvbGljeSA9IHBhcnNlX3dhaXRfcG9saWN5ICgp OworICBpZiAocGFyc2Vfd2FpdF9wb2xpY3kgKCJPTVBfV0FJVF9QT0xJQ1kiLCAmZ29tcF9p bml0aWFsX2ljdi53YWl0X3BvbGljeSkpCisgICAgZ29tcF9pbml0aWFsX2ljdl9mbGFncy53 YWl0X3BvbGljeSB8PSBHT01QX0VOVl9WQVJfU1VGRklYX05PTkU7CisgIGlmIChwYXJzZV93 YWl0X3BvbGljeSAoIk9NUF9XQUlUX1BPTElDWV9BTEwiLAorCQkJICZnb21wX2luaXRpYWxf aWN2X2FsbC53YWl0X3BvbGljeSkpCisgICAgZ29tcF9pbml0aWFsX2ljdl9mbGFncy53YWl0 X3BvbGljeSB8PSBHT01QX0VOVl9WQVJfU1VGRklYX0FMTDsKKyAgaWYgKHBhcnNlX3dhaXRf cG9saWN5ICgiT01QX1dBSVRfUE9MSUNZX0RFViIsCisJCQkgJmdvbXBfaW5pdGlhbF9pY3Zf ZGV2LndhaXRfcG9saWN5KSkKKyAgICBnb21wX2luaXRpYWxfaWN2X2ZsYWdzLndhaXRfcG9s aWN5IHw9IEdPTVBfRU5WX1ZBUl9TVUZGSVhfREVWOworICBpZiAoZ29tcF9pbml0aWFsX2lj dl9mbGFncy53YWl0X3BvbGljeSAmIEdPTVBfRU5WX1ZBUl9TVUZGSVhfTk9ORSkKKyAgICB3 YWl0X3BvbGljeSA9IGdvbXBfaW5pdGlhbF9pY3Yud2FpdF9wb2xpY3k7CisgIGVsc2UgaWYg KGdvbXBfaW5pdGlhbF9pY3ZfZmxhZ3Mud2FpdF9wb2xpY3kgJiBHT01QX0VOVl9WQVJfU1VG RklYX0FMTCkKKyAgICB3YWl0X3BvbGljeSA9IGdvbXBfaW5pdGlhbF9pY3ZfYWxsLndhaXRf cG9saWN5OworCiAgIGlmICghcGFyc2Vfc3BpbmNvdW50ICgiR09NUF9TUElOQ09VTlQiLCAm Z29tcF9zcGluX2NvdW50X3ZhcikpCiAgICAgewogICAgICAgLyogVXNpbmcgYSByb3VnaCBl c3RpbWF0aW9uIG9mIDEwMDAwMCBzcGlucyBwZXIgbXNlYywKQEAgLTE1NzMsOCArMjI3Nywy MCBAQCBpbml0aWFsaXplX2VudiAodm9pZCkKICAgLyogTm90IHN0cmljdGx5IGVudmlyb25t ZW50IHJlbGF0ZWQsIGJ1dCBvcmRlcmluZyBjb25zdHJ1Y3RvcnMgaXMgdHJpY2t5LiAgKi8K ICAgcHRocmVhZF9hdHRyX2luaXQgKCZnb21wX3RocmVhZF9hdHRyKTsKIAotICBpZiAocGFy c2Vfc3RhY2tzaXplICgiT01QX1NUQUNLU0laRSIsICZzdGFja3NpemUpCi0gICAgICB8fCBw YXJzZV9zdGFja3NpemUgKCJHT01QX1NUQUNLU0laRSIsICZzdGFja3NpemUpCisgIGlmIChw YXJzZV9zdGFja3NpemUgKCJPTVBfU1RBQ0tTSVpFIiwgJmdvbXBfaW5pdGlhbF9pY3Yuc3Rh Y2tzaXplKQorICAgICAgfHwgcGFyc2Vfc3RhY2tzaXplICgiR09NUF9TVEFDS1NJWkUiLCAm Z29tcF9pbml0aWFsX2ljdi5zdGFja3NpemUpKQorICAgIGdvbXBfaW5pdGlhbF9pY3ZfZmxh Z3Muc3RhY2tzaXplIHw9IEdPTVBfRU5WX1ZBUl9TVUZGSVhfTk9ORTsKKyAgaWYgKHBhcnNl X3N0YWNrc2l6ZSAoIk9NUF9TVEFDS1NJWkVfQUxMIiwgJmdvbXBfaW5pdGlhbF9pY3ZfYWxs LnN0YWNrc2l6ZSkpCisgICAgZ29tcF9pbml0aWFsX2ljdl9mbGFncy5zdGFja3NpemUgfD0g R09NUF9FTlZfVkFSX1NVRkZJWF9BTEw7CisgIGlmIChwYXJzZV9zdGFja3NpemUgKCJPTVBf U1RBQ0tTSVpFX0RFViIsICZnb21wX2luaXRpYWxfaWN2X2Rldi5zdGFja3NpemUpKQorICAg IGdvbXBfaW5pdGlhbF9pY3ZfZmxhZ3Muc3RhY2tzaXplIHw9IEdPTVBfRU5WX1ZBUl9TVUZG SVhfREVWOworICBpZiAoZ29tcF9pbml0aWFsX2ljdl9mbGFncy5zdGFja3NpemUgJiBHT01Q X0VOVl9WQVJfU1VGRklYX05PTkUpCisgICAgc3RhY2tzaXplID0gZ29tcF9pbml0aWFsX2lj di5zdGFja3NpemU7CisgIGVsc2UgaWYgKGdvbXBfaW5pdGlhbF9pY3ZfZmxhZ3Muc3RhY2tz aXplICYgR09NUF9FTlZfVkFSX1NVRkZJWF9BTEwpCisgICAgc3RhY2tzaXplID0gZ29tcF9p bml0aWFsX2ljdl9hbGwuc3RhY2tzaXplOworCisgIGlmIChnb21wX2luaXRpYWxfaWN2X2Zs YWdzLnN0YWNrc2l6ZSAmIEdPTVBfRU5WX1ZBUl9TVUZGSVhfTk9ORQorICAgICAgfHwgZ29t cF9pbml0aWFsX2ljdl9mbGFncy5zdGFja3NpemUgJiBHT01QX0VOVl9WQVJfU1VGRklYX0FM TAogICAgICAgfHwgR09NUF9ERUZBVUxUX1NUQUNLU0laRSkKICAgICB7CiAgICAgICBpbnQg ZXJyOwpkaWZmIC0tZ2l0IGEvbGliZ29tcC9pY3YtZGV2aWNlLmMgYi9saWJnb21wL2ljdi1k ZXZpY2UuYwppbmRleCA3OTI2MWFiLi5iYzFhZjk3IDEwMDY0NAotLS0gYS9saWJnb21wL2lj di1kZXZpY2UuYworKysgYi9saWJnb21wL2ljdi1kZXZpY2UuYwpAQCAtODAsMyArODAsMTEg QEAgb21wX2dldF9kZXZpY2VfbnVtICh2b2lkKQogfQogCiBpYWxpYXMgKG9tcF9nZXRfZGV2 aWNlX251bSkKKworaW50CitvbXBfZ2V0X21heF90ZWFtcyAodm9pZCkKK3sKKyAgcmV0dXJu IGdvbXBfbnRlYW1zX3ZhcjsKK30KKworaWFsaWFzIChvbXBfZ2V0X21heF90ZWFtcykKZGlm ZiAtLWdpdCBhL2xpYmdvbXAvaWN2LmMgYi9saWJnb21wL2ljdi5jCmluZGV4IGRlMTVjYzgu LjVjNDM1ZDYgMTAwNjQ0Ci0tLSBhL2xpYmdvbXAvaWN2LmMKKysrIGIvbGliZ29tcC9pY3Yu YwpAQCAtMTU1LDEyICsxNTUsNiBAQCBvbXBfc2V0X251bV90ZWFtcyAoaW50IG51bV90ZWFt cykKICAgICBnb21wX250ZWFtc192YXIgPSBudW1fdGVhbXM7CiB9CiAKLWludAotb21wX2dl dF9tYXhfdGVhbXMgKHZvaWQpCi17Ci0gIHJldHVybiBnb21wX250ZWFtc192YXI7Ci19Ci0K IHZvaWQKIG9tcF9zZXRfdGVhbXNfdGhyZWFkX2xpbWl0IChpbnQgdGhyZWFkX2xpbWl0KQog ewpAQCAtMjc1LDcgKzI2OSw2IEBAIGlhbGlhcyAob21wX3NldF9tYXhfYWN0aXZlX2xldmVs cykKIGlhbGlhcyAob21wX2dldF9tYXhfYWN0aXZlX2xldmVscykKIGlhbGlhcyAob21wX2dl dF9zdXBwb3J0ZWRfYWN0aXZlX2xldmVscykKIGlhbGlhcyAob21wX3NldF9udW1fdGVhbXMp Ci1pYWxpYXMgKG9tcF9nZXRfbWF4X3RlYW1zKQogaWFsaWFzIChvbXBfc2V0X3RlYW1zX3Ro cmVhZF9saW1pdCkKIGlhbGlhcyAob21wX2dldF90ZWFtc190aHJlYWRfbGltaXQpCiBpYWxp YXMgKG9tcF9nZXRfY2FuY2VsbGF0aW9uKQpkaWZmIC0tZ2l0IGEvbGliZ29tcC9saWJnb21w LXBsdWdpbi5oIGIvbGliZ29tcC9saWJnb21wLXBsdWdpbi5oCmluZGV4IDA3YWI3MDAuLjA3 MmNjNDcgMTAwNjQ0Ci0tLSBhL2xpYmdvbXAvbGliZ29tcC1wbHVnaW4uaAorKysgYi9saWJn b21wL2xpYmdvbXAtcGx1Z2luLmgKQEAgLTEwMiwxMSArMTAyLDIwIEBAIHN0cnVjdCBhZGRy X3BhaXIKICAgdWludHB0cl90IGVuZDsKIH07CiAKLS8qIFRoaXMgc3ltYm9sIGlzIHRvIG5h bWUgYSB0YXJnZXQgc2lkZSB2YXJpYWJsZSB0aGF0IGhvbGRzIHRoZSBkZXNpZ25hdGVkCi0g ICAnZGV2aWNlIG51bWJlcicgb2YgdGhlIHRhcmdldCBkZXZpY2UuIFRoZSBzeW1ib2wgbmVl ZHMgdG8gYmUgYXZhaWxhYmxlIHRvCisvKiBUaGlzIGZvbGxvd2luZyBzeW1ib2xzIGFyZSB0 byBuYW1lIHRhcmdldCBzaWRlIHZhcmlhYmxlcyB0aGF0IGhvbGQgdGhlCisgICBkZXNpZ25h dGVkIElDVnMgb2YgdGhlIHRhcmdldCBkZXZpY2UuIFRoZSBzeW1ib2xzIG5lZWQgdG8gYmUg YXZhaWxhYmxlIHRvCiAgICBsaWJnb21wIGNvZGUgYW5kIHRoZSBvZmZsb2FkIHBsdWdpbiAo d2hpY2ggaW4gdGhlIGxhdHRlciBjYXNlIG11c3QgYmUKICAgIHN0cmluZ2lmaWVkKS4gICov CiAjZGVmaW5lIEdPTVBfREVWSUNFX05VTV9WQVIgX19nb21wX2RldmljZV9udW0KKyNkZWZp bmUgR09NUF9OVEhSRUFEU19WQVIgX19nb21wX250aHJlYWRzCisjZGVmaW5lIEdPTVBfVEhS RUFEX0xJTUlUX1ZBUiBfX2dvbXBfdGhyZWFkX2xpbWl0CisjZGVmaW5lIEdPTVBfUlVOX1ND SEVEX1ZBUiBfX2dvbXBfcnVuX3NjaGVkCisjZGVmaW5lIEdPTVBfUlVOX1NDSEVEX0NIVU5L X1NJWkUgX19nb21wX3J1bl9zY2hlZF9jaHVua19zaXplCisjZGVmaW5lIEdPTVBfREVGQVVM VF9ERVZJQ0VfVkFSIF9fZ29tcF9kZWZhdWx0X2RldmljZQorI2RlZmluZSBHT01QX0RZTl9W QVIgX19nb21wX2R5bgorI2RlZmluZSBHT01QX01BWF9BQ1RJVkVfTEVWRUxTX1ZBUiBfX2dv bXBfbWF4X2FjdGl2ZV9sZXZlbHMKKyNkZWZpbmUgR09NUF9CSU5EX1ZBUiBfX2dvbXBfYmlu ZAorI2RlZmluZSBHT01QX05URUFNU19WQVIgX19nb21wX250ZWFtcwogCiAvKiBNaXNjZWxs YW5lb3VzIGZ1bmN0aW9ucy4gICovCiBleHRlcm4gdm9pZCAqR09NUF9QTFVHSU5fbWFsbG9j IChzaXplX3QpIF9fYXR0cmlidXRlX18gKChtYWxsb2MpKTsKZGlmZiAtLWdpdCBhL2xpYmdv bXAvbGliZ29tcC5oIGIvbGliZ29tcC9saWJnb21wLmgKaW5kZXggYjllMDM5MS4uODlkMTQ1 MyAxMDA2NDQKLS0tIGEvbGliZ29tcC9saWJnb21wLmgKKysrIGIvbGliZ29tcC9saWJnb21w LmgKQEAgLTQ3Myw2ICs0NzMsNzIgQEAgc3RydWN0IGdvbXBfdGFza19pY3YKICAgc3RydWN0 IHRhcmdldF9tZW1fZGVzYyAqdGFyZ2V0X2RhdGE7CiB9OwogCitlbnVtIGdvbXBfZW52X3Zh cl9zdWZmaXhfdAoreworICBHT01QX0VOVl9WQVJfU1VGRklYX1VOS05PV04gPSAwLAorICBH T01QX0VOVl9WQVJfU1VGRklYX05PTkUgPSAxLAorICBHT01QX0VOVl9WQVJfU1VGRklYX0RF ViA9IDIsCisgIEdPTVBfRU5WX1ZBUl9TVUZGSVhfQUxMID0gNAorfTsKKworLyogU3RydWN0 IHRoYXQgY29udGFpbnMgYWxsIElDVnMgZm9yIHdoaWNoIHdlIG5lZWQgdG8gc3RvcmUgaW5p dGlhbCB2YWx1ZXMuCisgICBLZWVwaW5nIHRoZSBpbml0aWFsIHZhbHVlcyBpcyBuZWVkZWQg Zm9yIG9tcF9kaXNwbGF5X2VudiBhbmQgYWxzbyB1c2VkIGZvcgorICAgdHJhbnNtaXR0aW5n IGRldmljZS1zcGVjaWZpYyB2YWx1ZXMgdG8gdGhlIHRhcmdldC4gICovCitzdHJ1Y3QgZ29t cF9pbml0aWFsX2ljdl90Cit7CisgIHVuc2lnbmVkIGxvbmcgbnRocmVhZHNfdmFyOworICB1 bnNpZ25lZCBsb25nICpudGhyZWFkc192YXJfbGlzdDsKKyAgdW5zaWduZWQgbG9uZyBudGhy ZWFkc192YXJfbGlzdF9sZW47CisgIGVudW0gZ29tcF9zY2hlZHVsZV90eXBlIHJ1bl9zY2hl ZF92YXI7CisgIGludCBydW5fc2NoZWRfY2h1bmtfc2l6ZTsKKyAgaW50IGRlZmF1bHRfZGV2 aWNlX3ZhcjsKKyAgdW5zaWduZWQgaW50IHRocmVhZF9saW1pdF92YXI7CisgIGJvb2wgZHlu X3ZhcjsKKyAgdW5zaWduZWQgY2hhciBtYXhfYWN0aXZlX2xldmVsc192YXI7CisgIGNoYXIg YmluZF92YXI7CisgIGNoYXIgKmJpbmRfdmFyX2xpc3Q7CisgIHVuc2lnbmVkIGxvbmcgYmlu ZF92YXJfbGlzdF9sZW47CisgIGludCBudGVhbXNfdmFyOworICBpbnQgdGVhbXNfdGhyZWFk X2xpbWl0X3ZhcjsKKyAgaW50IHdhaXRfcG9saWN5OworICB1bnNpZ25lZCBsb25nIHN0YWNr c2l6ZTsKK307CisKK3N0cnVjdCBnb21wX2ljdl9mbGFnc190Cit7CisgIGVudW0gZ29tcF9l bnZfdmFyX3N1ZmZpeF90IG50aHJlYWRzX3ZhcjsKKyAgZW51bSBnb21wX2Vudl92YXJfc3Vm Zml4X3QgcnVuX3NjaGVkX3ZhcjsKKyAgZW51bSBnb21wX2Vudl92YXJfc3VmZml4X3QgcnVu X3NjaGVkX2NodW5rX3NpemU7CisgIGVudW0gZ29tcF9lbnZfdmFyX3N1ZmZpeF90IHRocmVh ZF9saW1pdF92YXI7CisgIGVudW0gZ29tcF9lbnZfdmFyX3N1ZmZpeF90IGR5bl92YXI7Cisg IGVudW0gZ29tcF9lbnZfdmFyX3N1ZmZpeF90IG1heF9hY3RpdmVfbGV2ZWxzX3ZhcjsKKyAg ZW51bSBnb21wX2Vudl92YXJfc3VmZml4X3QgYmluZF92YXI7CisgIGVudW0gZ29tcF9lbnZf dmFyX3N1ZmZpeF90IG50ZWFtc192YXI7CisgIGVudW0gZ29tcF9lbnZfdmFyX3N1ZmZpeF90 IHN0YWNrc2l6ZTsKKyAgZW51bSBnb21wX2Vudl92YXJfc3VmZml4X3Qgd2FpdF9wb2xpY3k7 CisgIGVudW0gZ29tcF9lbnZfdmFyX3N1ZmZpeF90IHRlYW1zX3RocmVhZF9saW1pdF92YXI7 Cit9OworCitzdHJ1Y3QgZ29tcF9pY3ZfbGlzdCB7CisgIGludCBkZXZpY2VfbnVtOworICB2 b2lkKiB2YWx1ZTsKKyAgc3RydWN0IGdvbXBfaWN2X2xpc3QgKm5leHQ7Cit9OworCitleHRl cm4gdm9pZCAqZ29tcF9nZXRfaWN2X3ZhbHVlX3B0ciAoc3RydWN0IGdvbXBfaWN2X2xpc3Qg KipsaXN0LAorCQkJCSAgICAgaW50IGRldmljZV9udW0pOworZXh0ZXJuIHN0cnVjdCBnb21w X2ljdl9saXN0ICpnb21wX3J1bl9zY2hlZF92YXJfZGV2X2xpc3Q7CitleHRlcm4gc3RydWN0 IGdvbXBfaWN2X2xpc3QgKmdvbXBfcnVuX3NjaGVkX2NodW5rX3NpemVfZGV2X2xpc3Q7Citl eHRlcm4gc3RydWN0IGdvbXBfaWN2X2xpc3QgKmdvbXBfbnRlYW1zX3Zhcl9kZXZfbGlzdDsK K2V4dGVybiBzdHJ1Y3QgZ29tcF9pY3ZfbGlzdCAqZ29tcF9tYXhfYWN0aXZlX2xldmVsc192 YXJfZGV2X2xpc3Q7CitleHRlcm4gc3RydWN0IGdvbXBfaWN2X2xpc3QgKmdvbXBfcHJvY19i aW5kX3Zhcl9kZXZfbGlzdDsKK2V4dGVybiBzdHJ1Y3QgZ29tcF9pY3ZfbGlzdCAqZ29tcF9w cm9jX2JpbmRfdmFyX2xpc3RfZGV2X2xpc3Q7CitleHRlcm4gc3RydWN0IGdvbXBfaWN2X2xp c3QgKmdvbXBfcHJvY19iaW5kX3Zhcl9saXN0X2xlbl9kZXZfbGlzdDsKKworZXh0ZXJuIHN0 cnVjdCBnb21wX2luaXRpYWxfaWN2X3QgZ29tcF9pbml0aWFsX2ljdl9hbGw7CitleHRlcm4g c3RydWN0IGdvbXBfaW5pdGlhbF9pY3ZfdCBnb21wX2luaXRpYWxfaWN2X2RldjsKK2V4dGVy biBzdHJ1Y3QgZ29tcF9pY3ZfZmxhZ3NfdCBnb21wX2luaXRpYWxfaWN2X2ZsYWdzOworCiBl bnVtIGdvbXBfdGFyZ2V0X29mZmxvYWRfdAogewogICBHT01QX1RBUkdFVF9PRkZMT0FEX0RF RkFVTFQsCmRpZmYgLS1naXQgYS9saWJnb21wL3BsdWdpbi9wbHVnaW4tZ2NuLmMgYi9saWJn b21wL3BsdWdpbi9wbHVnaW4tZ2NuLmMKaW5kZXggZjMwNWQ3Mi4uNDRhYjM2OSAxMDA2NDQK LS0tIGEvbGliZ29tcC9wbHVnaW4vcGx1Z2luLWdjbi5jCisrKyBiL2xpYmdvbXAvcGx1Z2lu L3BsdWdpbi1nY24uYwpAQCAtNTYwLDYgKzU2MCwyMSBAQCBzdHJ1Y3QgaGVhcCB7CiAgIGNo YXIgZGF0YVswXTsKIH07CiAKKy8qIFN0cmluZ3Mgb2YgSUNWcyB3aGljaCBhcmUgY29waWVk IHRvIHRoZSBkZXZpY2UuICAqLworc3RhdGljIGNoYXIgKkdPTVBfSUNWX1NUUklOR1NbXSA9 Cit7CisgIFhTVFJJTkcgKEdPTVBfREVWSUNFX05VTV9WQVIpLAorICBYU1RSSU5HIChHT01Q X05USFJFQURTX1ZBUiksCisgIFhTVFJJTkcgKEdPTVBfVEhSRUFEX0xJTUlUX1ZBUiksCisg IFhTVFJJTkcgKEdPTVBfUlVOX1NDSEVEX1ZBUiksCisgIFhTVFJJTkcgKEdPTVBfUlVOX1ND SEVEX0NIVU5LX1NJWkUpLAorICBYU1RSSU5HIChHT01QX0RFRkFVTFRfREVWSUNFX1ZBUiks CisgIFhTVFJJTkcgKEdPTVBfRFlOX1ZBUiksCisgIFhTVFJJTkcgKEdPTVBfTUFYX0FDVElW RV9MRVZFTFNfVkFSKSwKKyAgWFNUUklORyAoR09NUF9CSU5EX1ZBUiksCisgIFhTVFJJTkcg KEdPTVBfTlRFQU1TX1ZBUikKK307CisKIC8qIH19fSAgKi8KIC8qIHt7eyBHbG9iYWwgdmFy aWFibGVzICAqLwogCkBAIC0zMzU2LDcgKzMzNzEsNyBAQCBHT01QX09GRkxPQURfbG9hZF9p bWFnZSAoaW50IG9yZCwgdW5zaWduZWQgdmVyc2lvbiwgY29uc3Qgdm9pZCAqdGFyZ2V0X2Rh dGEsCiAgIHN0cnVjdCBrZXJuZWxfaW5mbyAqa2VybmVsOwogICBpbnQga2VybmVsX2NvdW50 ID0gaW1hZ2VfZGVzYy0+a2VybmVsX2NvdW50OwogICB1bnNpZ25lZCB2YXJfY291bnQgPSBp bWFnZV9kZXNjLT5nbG9iYWxfdmFyaWFibGVfY291bnQ7Ci0gIGludCBvdGhlcl9jb3VudCA9 IDE7CisgIGludCBvdGhlcl9jb3VudCA9IDEwOwogCiAgIGFnZW50ID0gZ2V0X2FnZW50X2lu Zm8gKG9yZCk7CiAgIGlmICghYWdlbnQpCkBAIC0zNDUzLDM2ICszNDY4LDQzIEBAIEdPTVBf T0ZGTE9BRF9sb2FkX2ltYWdlIChpbnQgb3JkLCB1bnNpZ25lZCB2ZXJzaW9uLCBjb25zdCB2 b2lkICp0YXJnZXRfZGF0YSwKIAl9CiAgICAgfQogCi0gIEdDTl9ERUJVRyAoIkxvb2tpbmcg Zm9yIHZhcmlhYmxlICVzXG4iLCBYU1RSSU5HIChHT01QX0RFVklDRV9OVU1fVkFSKSk7Ci0K LSAgaHNhX3N0YXR1c190IHN0YXR1czsKLSAgaHNhX2V4ZWN1dGFibGVfc3ltYm9sX3QgdmFy X3N5bWJvbDsKLSAgc3RhdHVzID0gaHNhX2Zucy5oc2FfZXhlY3V0YWJsZV9nZXRfc3ltYm9s X2ZuIChhZ2VudC0+ZXhlY3V0YWJsZSwgTlVMTCwKLQkJCQkJCSBYU1RSSU5HIChHT01QX0RF VklDRV9OVU1fVkFSKSwKLQkJCQkJCSBhZ2VudC0+aWQsIDAsICZ2YXJfc3ltYm9sKTsKLSAg aWYgKHN0YXR1cyA9PSBIU0FfU1RBVFVTX1NVQ0NFU1MpCisgIGZvciAodW5zaWduZWQgaSA9 IDA7IGkgPCBvdGhlcl9jb3VudDsgaSsrKQogICAgIHsKLSAgICAgIHVpbnQ2NF90IGRldmlj ZV9udW1fdmFycHRyOwotICAgICAgdWludDMyX3QgZGV2aWNlX251bV92YXJzaXplOworICAg ICAgR0NOX0RFQlVHICgiTG9va2luZyBmb3IgdmFyaWFibGUgJXNcbiIsIEdPTVBfSUNWX1NU UklOR1NbaV0pOwogCi0gICAgICBzdGF0dXMgPSBoc2FfZm5zLmhzYV9leGVjdXRhYmxlX3N5 bWJvbF9nZXRfaW5mb19mbgotCSh2YXJfc3ltYm9sLCBIU0FfRVhFQ1VUQUJMRV9TWU1CT0xf SU5GT19WQVJJQUJMRV9BRERSRVNTLAotCSAmZGV2aWNlX251bV92YXJwdHIpOwotICAgICAg aWYgKHN0YXR1cyAhPSBIU0FfU1RBVFVTX1NVQ0NFU1MpCi0JaHNhX2ZhdGFsICgiQ291bGQg bm90IGV4dHJhY3QgYSB2YXJpYWJsZSBmcm9tIGl0cyBzeW1ib2wiLCBzdGF0dXMpOwotICAg ICAgc3RhdHVzID0gaHNhX2Zucy5oc2FfZXhlY3V0YWJsZV9zeW1ib2xfZ2V0X2luZm9fZm4K LQkodmFyX3N5bWJvbCwgSFNBX0VYRUNVVEFCTEVfU1lNQk9MX0lORk9fVkFSSUFCTEVfU0la RSwKLQkgJmRldmljZV9udW1fdmFyc2l6ZSk7Ci0gICAgICBpZiAoc3RhdHVzICE9IEhTQV9T VEFUVVNfU1VDQ0VTUykKLQloc2FfZmF0YWwgKCJDb3VsZCBub3QgZXh0cmFjdCBhIHZhcmlh YmxlIHNpemUgZnJvbSBpdHMgc3ltYm9sIiwgc3RhdHVzKTsKKyAgICAgIGhzYV9zdGF0dXNf dCBzdGF0dXM7CisgICAgICBoc2FfZXhlY3V0YWJsZV9zeW1ib2xfdCB2YXJfc3ltYm9sOwor ICAgICAgc3RhdHVzID0gaHNhX2Zucy5oc2FfZXhlY3V0YWJsZV9nZXRfc3ltYm9sX2ZuIChh Z2VudC0+ZXhlY3V0YWJsZSwgTlVMTCwKKwkJCQkJCSAgICAgR09NUF9JQ1ZfU1RSSU5HU1tp XSwKKwkJCQkJCSAgICAgYWdlbnQtPmlkLCAwLCAmdmFyX3N5bWJvbCk7CisgICAgICBpZiAo c3RhdHVzID09IEhTQV9TVEFUVVNfU1VDQ0VTUykKKwl7CisJICB1aW50NjRfdCB2YXJwdHI7 CisJICB1aW50MzJfdCB2YXJzaXplOwogCi0gICAgICBwYWlyLT5zdGFydCA9IGRldmljZV9u dW1fdmFycHRyOwotICAgICAgcGFpci0+ZW5kID0gZGV2aWNlX251bV92YXJwdHIgKyBkZXZp Y2VfbnVtX3ZhcnNpemU7CisJICBzdGF0dXMgPSBoc2FfZm5zLmhzYV9leGVjdXRhYmxlX3N5 bWJvbF9nZXRfaW5mb19mbgorCSAgICAodmFyX3N5bWJvbCwgSFNBX0VYRUNVVEFCTEVfU1lN Qk9MX0lORk9fVkFSSUFCTEVfQUREUkVTUywKKwkgICAgICZ2YXJwdHIpOworCSAgaWYgKHN0 YXR1cyAhPSBIU0FfU1RBVFVTX1NVQ0NFU1MpCisJICAgIGhzYV9mYXRhbCAoIkNvdWxkIG5v dCBleHRyYWN0IGEgdmFyaWFibGUgZnJvbSBpdHMgc3ltYm9sIiwgc3RhdHVzKTsKKwkgIHN0 YXR1cyA9IGhzYV9mbnMuaHNhX2V4ZWN1dGFibGVfc3ltYm9sX2dldF9pbmZvX2ZuCisJICAg ICh2YXJfc3ltYm9sLCBIU0FfRVhFQ1VUQUJMRV9TWU1CT0xfSU5GT19WQVJJQUJMRV9TSVpF LAorCSAgICAgJnZhcnNpemUpOworCSAgaWYgKHN0YXR1cyAhPSBIU0FfU1RBVFVTX1NVQ0NF U1MpCisJICAgIGhzYV9mYXRhbCAoIkNvdWxkIG5vdCBleHRyYWN0IGEgdmFyaWFibGUgc2l6 ZSBmcm9tIGl0cyBzeW1ib2wiLAorCQkgICAgICAgc3RhdHVzKTsKKworCSAgcGFpci0+c3Rh cnQgPSB2YXJwdHI7CisJICBwYWlyLT5lbmQgPSB2YXJwdHIgKyB2YXJzaXplOworCX0KKyAg ICAgIGVsc2UKKwl7CisJICAvKiBUaGUgdmFyaWFibGUgd2FzIG5vdCBpbiB0aGlzIGltYWdl LiAgKi8KKwkgIEdDTl9ERUJVRyAoIlZhcmlhYmxlIG5vdCBmb3VuZCBpbiBpbWFnZTogJXNc biIsIEdPTVBfSUNWX1NUUklOR1NbaV0pOworCSAgcGFpci0+c3RhcnQgPSBwYWlyLT5lbmQg PSAwOworCX0KKyAgICAgIHBhaXIrKzsKICAgICB9Ci0gIGVsc2UKLSAgICAvKiBUaGUgJ0dP TVBfREVWSUNFX05VTV9WQVInIHZhcmlhYmxlIHdhcyBub3QgaW4gdGhpcyBpbWFnZS4gICov Ci0gICAgcGFpci0+c3RhcnQgPSBwYWlyLT5lbmQgPSAwOwotICBwYWlyKys7CiAKICAgLyog RW5zdXJlIHRoYXQgY29uc3RydWN0b3JzIGFyZSBydW4gZmlyc3QuICAqLwogICBzdHJ1Y3Qg R09NUF9rZXJuZWxfbGF1bmNoX2F0dHJpYnV0ZXMga2xhID0KZGlmZiAtLWdpdCBhL2xpYmdv bXAvcGx1Z2luL3BsdWdpbi1udnB0eC5jIGIvbGliZ29tcC9wbHVnaW4vcGx1Z2luLW52cHR4 LmMKaW5kZXggYjRmMGE4NC4uNTAzNGQ1ZSAxMDA2NDQKLS0tIGEvbGliZ29tcC9wbHVnaW4v cGx1Z2luLW52cHR4LmMKKysrIGIvbGliZ29tcC9wbHVnaW4vcGx1Z2luLW52cHR4LmMKQEAg LTMzMCw2ICszMzAsMjEgQEAgc3RydWN0IHB0eF9kZXZpY2UKIAogc3RhdGljIHN0cnVjdCBw dHhfZGV2aWNlICoqcHR4X2RldmljZXM7CiAKKy8qIFN0cmluZ3Mgb2YgSUNWcyB3aGljaCBh cmUgY29waWVkIHRvIHRoZSBkZXZpY2UuICAqLworc3RhdGljIGNoYXIgKkdPTVBfSUNWX1NU UklOR1NbXSA9Cit7CisgIFhTVFJJTkcgKEdPTVBfREVWSUNFX05VTV9WQVIpLAorICBYU1RS SU5HIChHT01QX05USFJFQURTX1ZBUiksCisgIFhTVFJJTkcgKEdPTVBfVEhSRUFEX0xJTUlU X1ZBUiksCisgIFhTVFJJTkcgKEdPTVBfUlVOX1NDSEVEX1ZBUiksCisgIFhTVFJJTkcgKEdP TVBfUlVOX1NDSEVEX0NIVU5LX1NJWkUpLAorICBYU1RSSU5HIChHT01QX0RFRkFVTFRfREVW SUNFX1ZBUiksCisgIFhTVFJJTkcgKEdPTVBfRFlOX1ZBUiksCisgIFhTVFJJTkcgKEdPTVBf TUFYX0FDVElWRV9MRVZFTFNfVkFSKSwKKyAgWFNUUklORyAoR09NUF9CSU5EX1ZBUiksCisg IFhTVFJJTkcgKEdPTVBfTlRFQU1TX1ZBUikKK307CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0 IG52cHR4X3RocmVhZCAqCiBudnB0eF90aHJlYWQgKHZvaWQpCiB7CkBAIC0xMjY2LDcgKzEy ODEsNyBAQCBHT01QX09GRkxPQURfbG9hZF9pbWFnZSAoaW50IG9yZCwgdW5zaWduZWQgdmVy c2lvbiwgY29uc3Qgdm9pZCAqdGFyZ2V0X2RhdGEsCiAgIENVbW9kdWxlIG1vZHVsZTsKICAg Y29uc3QgY2hhciAqY29uc3QgKnZhcl9uYW1lczsKICAgY29uc3Qgc3RydWN0IHRhcmdfZm5f bGF1bmNoICpmbl9kZXNjczsKLSAgdW5zaWduZWQgaW50IGZuX2VudHJpZXMsIHZhcl9lbnRy aWVzLCBvdGhlcl9lbnRyaWVzLCBpLCBqOworICB1bnNpZ25lZCBpbnQgZm5fZW50cmllcywg dmFyX2VudHJpZXMsIG90aGVyX2VudHJpZXMsIGksIGosIGs7CiAgIHN0cnVjdCB0YXJnX2Zu X2Rlc2NyaXB0b3IgKnRhcmdfZm5zOwogICBzdHJ1Y3QgYWRkcl9wYWlyICp0YXJnX3RibDsK ICAgY29uc3QgbnZwdHhfdGRhdGFfdCAqaW1nX2hlYWRlciA9IChjb25zdCBudnB0eF90ZGF0 YV90ICopIHRhcmdldF9kYXRhOwpAQCAtMTI5Niw4ICsxMzExLDggQEAgR09NUF9PRkZMT0FE X2xvYWRfaW1hZ2UgKGludCBvcmQsIHVuc2lnbmVkIHZlcnNpb24sIGNvbnN0IHZvaWQgKnRh cmdldF9kYXRhLAogICBmbl9lbnRyaWVzID0gaW1nX2hlYWRlci0+Zm5fbnVtOwogICBmbl9k ZXNjcyA9IGltZ19oZWFkZXItPmZuX2Rlc2NzOwogCi0gIC8qIEN1cnJlbnRseSwgdGhlIG9u bHkgb3RoZXIgZW50cnkga2luZCBpcyAnZGV2aWNlIG51bWJlcicuICAqLwotICBvdGhlcl9l bnRyaWVzID0gMTsKKyAgLyogQ3VycmVudGx5LCBvdGhlciBlbnRyeSBraW5kcyBhcmUgJ2Rl dmljZSBudW1iZXInIGFuZCBmdXJ0aGVyIElDVnMuICAqLworICBvdGhlcl9lbnRyaWVzID0g MTA7CiAKICAgdGFyZ190YmwgPSBHT01QX1BMVUdJTl9tYWxsb2MgKHNpemVvZiAoc3RydWN0 IGFkZHJfcGFpcikKIAkJCQkgKiAoZm5fZW50cmllcyArIHZhcl9lbnRyaWVzICsgb3RoZXJf ZW50cmllcykpOwpAQCAtMTM0OSwyMCArMTM2NCwyMyBAQCBHT01QX09GRkxPQURfbG9hZF9p bWFnZSAoaW50IG9yZCwgdW5zaWduZWQgdmVyc2lvbiwgY29uc3Qgdm9pZCAqdGFyZ2V0X2Rh dGEsCiAgICAgICB0YXJnX3RibC0+ZW5kID0gdGFyZ190YmwtPnN0YXJ0ICsgYnl0ZXM7CiAg ICAgfQogCi0gIENVZGV2aWNlcHRyIGRldmljZV9udW1fdmFycHRyOwotICBzaXplX3QgZGV2 aWNlX251bV92YXJzaXplOwotICBDVXJlc3VsdCByID0gQ1VEQV9DQUxMX05PQ0hFQ0sgKGN1 TW9kdWxlR2V0R2xvYmFsLCAmZGV2aWNlX251bV92YXJwdHIsCi0JCQkJICAmZGV2aWNlX251 bV92YXJzaXplLCBtb2R1bGUsCi0JCQkJICBYU1RSSU5HIChHT01QX0RFVklDRV9OVU1fVkFS KSk7Ci0gIGlmIChyID09IENVREFfU1VDQ0VTUykKKyAgZm9yIChrID0gMDsgayA8IG90aGVy X2VudHJpZXM7IGsrKywgdGFyZ190YmwrKykKICAgICB7Ci0gICAgICB0YXJnX3RibC0+c3Rh cnQgPSAodWludHB0cl90KSBkZXZpY2VfbnVtX3ZhcnB0cjsKLSAgICAgIHRhcmdfdGJsLT5l bmQgPSAodWludHB0cl90KSAoZGV2aWNlX251bV92YXJwdHIgKyBkZXZpY2VfbnVtX3ZhcnNp emUpOworICAgICAgQ1VkZXZpY2VwdHIgdmFycHRyOworICAgICAgc2l6ZV90IHZhcnNpemU7 CisgICAgICBDVXJlc3VsdCByID0gQ1VEQV9DQUxMX05PQ0hFQ0sgKGN1TW9kdWxlR2V0R2xv YmFsLCAmdmFycHRyLCAmdmFyc2l6ZSwKKwkJCQkgICAgICBtb2R1bGUsIEdPTVBfSUNWX1NU UklOR1Nba10pOworICAgICAgaWYgKHIgPT0gQ1VEQV9TVUNDRVNTKQorCXsKKwkgIHRhcmdf dGJsLT5zdGFydCA9ICh1aW50cHRyX3QpIHZhcnB0cjsKKwkgIHRhcmdfdGJsLT5lbmQgPSAo dWludHB0cl90KSAodmFycHRyICsgdmFyc2l6ZSk7CisJfQorICAgICAgZWxzZQorCXsKKwkg IC8qIFRoZSB2YXJpYWJsZSB3YXMgbm90IGluIHRoaXMgaW1hZ2UuICAqLworCSAgdGFyZ190 YmwtPnN0YXJ0ID0gdGFyZ190YmwtPmVuZCA9IDA7CisJfQogICAgIH0KLSAgZWxzZQotICAg IC8qIFRoZSAnR09NUF9ERVZJQ0VfTlVNX1ZBUicgdmFyaWFibGUgd2FzIG5vdCBpbiB0aGlz IGltYWdlLiAgKi8KLSAgICB0YXJnX3RibC0+c3RhcnQgPSB0YXJnX3RibC0+ZW5kID0gMDsK LSAgdGFyZ190YmwrKzsKIAogICBudnB0eF9zZXRfY2xvY2t0aWNrIChtb2R1bGUsIGRldik7 CiAKZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGFyZ2V0LmMgYi9saWJnb21wL3RhcmdldC5jCmlu ZGV4IDY5OGZmMTQuLmRkM2I3ZTMgMTAwNjQ0Ci0tLSBhL2xpYmdvbXAvdGFyZ2V0LmMKKysr IGIvbGliZ29tcC90YXJnZXQuYwpAQCAtMjA3Miw2ICsyMDcyLDIxIEBAIGdvbXBfdXBkYXRl IChzdHJ1Y3QgZ29tcF9kZXZpY2VfZGVzY3IgKmRldmljZXAsIHNpemVfdCBtYXBudW0sIHZv aWQgKipob3N0YWRkcnMsCiAgIGdvbXBfbXV0ZXhfdW5sb2NrICgmZGV2aWNlcC0+bG9jayk7 CiB9CiAKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgJ2dvbXBfbG9hZF9pbWFnZV90b19kZXZp Y2UnLiBSZXR1cm5zIHRoZSBwb2ludGVyIGZvciBhbgorICAgSUNWIHZhbHVlIGRlcGVuZGlu ZyBvbiB0aGUgZGV2aWNlIG51bSBERVZfTlVNIGFuZCB0aGUgdmFyaWFibGUgaGllcmFyY2h5 CisgICAoX0RFVl80MiwgX0RFViwgX0FMTCkuICAqLworc3RhdGljIHZvaWQqCitnb21wX2dl dF9pY3YgKHN0cnVjdCBnb21wX2ljdl9saXN0ICoqbGlzdCwgaW50IGRldl9udW0sCisJICAg ICAgZW51bSBnb21wX2Vudl92YXJfc3VmZml4X3QgZmxhZywgdm9pZCAqZGV2X3ZhbCwgdm9p ZCAqYWxsX3ZhbCkKK3sKKyAgdm9pZCAqdmFsID0gZ29tcF9nZXRfaWN2X3ZhbHVlX3B0ciAo bGlzdCwgZGV2X251bSk7CisgIGlmICh2YWwgPT0gTlVMTCAmJiAoZmxhZyAmIEdPTVBfRU5W X1ZBUl9TVUZGSVhfREVWKSkKKyAgICAgIHZhbCA9IGRldl92YWw7CisgIGlmICh2YWwgPT0g TlVMTCAmJiAoZmxhZyAmIEdPTVBfRU5WX1ZBUl9TVUZGSVhfQUxMKSkKKyAgICAgIHZhbCA9 IGFsbF92YWw7CisgIHJldHVybiB2YWw7Cit9CisKIC8qIExvYWQgaW1hZ2UgcG9pbnRlZCBi eSBUQVJHRVRfREFUQSB0byB0aGUgZGV2aWNlLCBzcGVjaWZpZWQgYnkgREVWSUNFUC4KICAg IEFuZCBpbnNlcnQgdG8gc3BsYXkgdHJlZSB0aGUgbWFwcGluZyBiZXR3ZWVuIGFkZHJlc3Nl cyBmcm9tIEhPU1RfVEFCTEUgYW5kCiAgICBmcm9tIGxvYWRlZCB0YXJnZXQgaW1hZ2UuICBX ZSByZWx5IGluIHRoZSBob3N0IGFuZCBkZXZpY2UgY29tcGlsZXIKQEAgLTIwOTMsNyArMjEw OCw3IEBAIGdvbXBfbG9hZF9pbWFnZV90b19kZXZpY2UgKHN0cnVjdCBnb21wX2RldmljZV9k ZXNjciAqZGV2aWNlcCwgdW5zaWduZWQgdmVyc2lvbiwKICAgaW50IG51bV92YXJzICA9ICho b3N0X3ZhcnNfZW5kIC0gaG9zdF92YXJfdGFibGUpIC8gMjsKIAogICAvKiBPdGhlcnMgY3Vy cmVudGx5IGlzIG9ubHkgJ2RldmljZV9udW0nICovCi0gIGludCBudW1fb3RoZXJzID0gMTsK KyAgaW50IG51bV9vdGhlcnMgPSAxMDsKIAogICAvKiBMb2FkIGltYWdlIHRvIGRldmljZSBh bmQgZ2V0IHRhcmdldCBhZGRyZXNzZXMgZm9yIHRoZSBpbWFnZS4gICovCiAgIHN0cnVjdCBh ZGRyX3BhaXIgKnRhcmdldF90YWJsZSA9IE5VTEw7CkBAIC0yMTc3LDMyICsyMTkyLDgzIEBA IGdvbXBfbG9hZF9pbWFnZV90b19kZXZpY2UgKHN0cnVjdCBnb21wX2RldmljZV9kZXNjciAq ZGV2aWNlcCwgdW5zaWduZWQgdmVyc2lvbiwKICAgICAgIGFycmF5Kys7CiAgICAgfQogCi0g IC8qIExhc3QgZW50cnkgaXMgZm9yIHRoZSBvbi1kZXZpY2UgJ2RldmljZV9udW0nIHZhcmlh YmxlLiBUb2xlcmF0ZSBjYXNlCi0gICAgIHdoZXJlIHBsdWdpbiBkb2VzIG5vdCByZXR1cm4g dGhpcyBlbnRyeS4gICovCisgIC8qIExhc3QgZW50cmllcyBhcmUgZm9yIHRoZSBvbi1kZXZp Y2UgJ2RldmljZV9udW0nIHZhcmlhYmxlIGFuZCBvdGhlciBJQ1ZzLgorICAgICBUaGUgcG9z aXRpb24gb2YgdGhlIHZhcmlhYmxlcyBpbiBUQVJHRVRfVEFCTEUgcmVzdWx0cyBmcm9tIEdP TVBfSUNWX1NUUklOR1MKKyAgICAgYXJyYXkuIFRvbGVyYXRlIGNhc2Ugd2hlcmUgcGx1Z2lu IGRvZXMgbm90IHJldHVybiB0aG9zZSBlbnRyaWVzLiAgKi8KICAgaWYgKG51bV9mdW5jcyAr IG51bV92YXJzIDwgbnVtX3RhcmdldF9lbnRyaWVzKQogICAgIHsKLSAgICAgIHN0cnVjdCBh ZGRyX3BhaXIgKmRldmljZV9udW1fdmFyID0gJnRhcmdldF90YWJsZVtudW1fZnVuY3MgKyBu dW1fdmFyc107Ci0gICAgICAvKiBTdGFydCBhZGRyZXNzIHdpbGwgYmUgbm9uLXplcm8gZm9y IGxhc3QgZW50cnkgaWYgR09NUF9ERVZJQ0VfTlVNX1ZBUgotCSB3YXMgZm91bmQgaW4gdGhp cyBpbWFnZS4gICovCi0gICAgICBpZiAoZGV2aWNlX251bV92YXItPnN0YXJ0ICE9IDApCisg ICAgICAvKiBUaGUgaW5kZXggb2YgdGhlIGRldmljZXAgd2l0aGluIGRldmljZXNbXSBpcyBy ZWdhcmRlZCBhcyBpdHMKKwkgJ2RldmljZSBudW1iZXInLCB3aGljaCBpcyBkaWZmZXJlbnQg ZnJvbSB0aGUgcGVyLWRldmljZSB0eXBlCisJIGRldmljZXAtPnRhcmdldF9pZC4gICovCisg ICAgICBpbnQgZGV2X251bSA9IChpbnQpIChkZXZpY2VwIC0gJmRldmljZXNbMF0pOworICAg ICAgZm9yIChpID0gMDsgaSA8IG51bV9vdGhlcnM7ICsraSkKIAl7Ci0JICAvKiBUaGUgaW5k ZXggb2YgdGhlIGRldmljZXAgd2l0aGluIGRldmljZXNbXSBpcyByZWdhcmRlZCBhcyBpdHMK LQkgICAgICdkZXZpY2UgbnVtYmVyJywgd2hpY2ggaXMgZGlmZmVyZW50IGZyb20gdGhlIHBl ci1kZXZpY2UgdHlwZQotCSAgICAgZGV2aWNlcC0+dGFyZ2V0X2lkLiAgKi8KLQkgIGludCBk ZXZpY2VfbnVtX3ZhbCA9IChpbnQpIChkZXZpY2VwIC0gJmRldmljZXNbMF0pOwotCSAgaWYg KGRldmljZV9udW1fdmFyLT5lbmQgLSBkZXZpY2VfbnVtX3Zhci0+c3RhcnQgIT0gc2l6ZW9m IChpbnQpKQorCSAgc3RydWN0IGFkZHJfcGFpciAqdmFyID0gJnRhcmdldF90YWJsZVtudW1f ZnVuY3MgKyBudW1fdmFycyArIGldOworCSAgLyogU3RhcnQgYWRkcmVzcyB3aWxsIGJlIG5v bi16ZXJvIGZvciB0aGUgY3VycmVudCBlbnRyeSBpZgorCSAgICAgdGhlIHZhcmlhYmxlIHdh cyBmb3VuZCBpbiB0aGlzIGltYWdlLiAgKi8KKwkgIGlmICh2YXItPnN0YXJ0ICE9IDApCiAJ ICAgIHsKLQkgICAgICBnb21wX211dGV4X3VubG9jayAoJmRldmljZXAtPmxvY2spOwotCSAg ICAgIGlmIChpc19yZWdpc3Rlcl9sb2NrKQotCQlnb21wX211dGV4X3VubG9jayAoJnJlZ2lz dGVyX2xvY2spOwotCSAgICAgIGdvbXBfZmF0YWwgKCJvZmZsb2FkIHBsdWdpbiBtYW5hZ2Vk ICdkZXZpY2VfbnVtJyBub3Qgb2YgZXhwZWN0ZWQgIgotCQkJICAiZm9ybWF0Iik7Ci0JICAg IH0KLQotCSAgLyogQ29weSBkZXZpY2VfbnVtIHZhbHVlIHRvIHBsYWNlIG9uIGRldmljZSBt ZW1vcnksIGhlcmVieSBhY3R1YWxseQotCSAgICAgZGVzaWduYXRpbmcgaXRzIGRldmljZSBu dW1iZXIgaW50byBlZmZlY3QuICAqLwotCSAgZ29tcF9jb3B5X2hvc3QyZGV2IChkZXZpY2Vw LCBOVUxMLCAodm9pZCAqKSBkZXZpY2VfbnVtX3Zhci0+c3RhcnQsCi0JCQkgICAgICAmZGV2 aWNlX251bV92YWwsIHNpemVvZiAoaW50KSwgZmFsc2UsIE5VTEwpOworCSAgICAgIHZvaWQg KnZhbCA9IE5VTEw7CisJICAgICAgc3dpdGNoIChpKQorCQl7CisJCSAgY2FzZSAwOiAgLy8g R09NUF9ERVZJQ0VfTlVNX1ZBUgorCQkgICAgdmFsID0gJmRldl9udW07CisJCSAgICBicmVh azsKKwkJICBjYXNlIDE6ICAvLyBHT01QX05USFJFQURTX1ZBUgorCQkgICAgLyogVGhpcyBp cyBpZ25vcmVkIHNpbmNlIHdlIGRvbid0IHdhbnQgdG8gb3ZlcndyaXRlIHRoZQorCQkgICAg ICAgdmFsdWVzIHRoYXQgYXJlIHNldCBkdXJpbmcga2VybmVsIGVudGVyaW5nLiAgKi8KKwkJ ICAgIGJyZWFrOworCQkgIGNhc2UgMjogIC8vIEdPTVBfVEhSRUFEX0xJTUlUX1ZBUgorCQkg ICAgLyogVGhpcyBpcyBpZ25vcmVkIHNpbmNlIHdlIGRvbid0IHdhbnQgdG8gb3ZlcndyaXRl IHRoZQorCQkgICAgICAgdmFsdWVzIHRoYXQgYXJlIHNldCBkdXJpbmcga2VybmVsIGVudGVy aW5nLiAgKi8KKwkJICAgIGJyZWFrOworCQkgIGNhc2UgMzogIC8vIEdPTVBfUlVOX1NDSEVE X1ZBUgorCQkgICAgdmFsID0gZ29tcF9nZXRfaWN2ICgmZ29tcF9ydW5fc2NoZWRfdmFyX2Rl dl9saXN0LCBkZXZfbnVtLAorCQkJCQlnb21wX2luaXRpYWxfaWN2X2ZsYWdzLnJ1bl9zY2hl ZF92YXIsCisJCQkJCSZnb21wX2luaXRpYWxfaWN2X2Rldi5ydW5fc2NoZWRfdmFyLAorCQkJ CQkmZ29tcF9pbml0aWFsX2ljdl9hbGwucnVuX3NjaGVkX3Zhcik7CisJCSAgICBicmVhazsK KwkJICBjYXNlIDQ6ICAvLyBHT01QX1JVTl9TQ0hFRF9DSFVOS19TSVpFCisJCSAgICB2YWwg PSBnb21wX2dldF9pY3YgKCZnb21wX3J1bl9zY2hlZF9jaHVua19zaXplX2Rldl9saXN0LCBk ZXZfbnVtLAorCQkJCQlnb21wX2luaXRpYWxfaWN2X2ZsYWdzLnJ1bl9zY2hlZF9jaHVua19z aXplLAorCQkJCQkmZ29tcF9pbml0aWFsX2ljdl9kZXYucnVuX3NjaGVkX2NodW5rX3NpemUs CisJCQkJCSZnb21wX2luaXRpYWxfaWN2X2FsbC5ydW5fc2NoZWRfY2h1bmtfc2l6ZSk7CisJ CSAgICBicmVhazsKKwkJICBjYXNlIDU6ICAvLyBHT01QX0RFRkFVTFRfREVWSUNFX1ZBUgor CQkgICAgdmFsID0gJmdvbXBfZ2xvYmFsX2ljdi5kZWZhdWx0X2RldmljZV92YXI7CisJCSAg ICBicmVhazsKKwkJICBjYXNlIDY6ICAvLyBHT01QX0RZTl9WQVIKKwkJICAgIC8qIFRoaXMg aXMgaWdub3JlZCBzaW5jZSB3ZSBkb24ndCB3YW50IHRvIG92ZXJ3cml0ZSB0aGUKKwkJICAg ICAgIHZhbHVlcyB0aGF0IGFyZSBzZXQgZHVyaW5nIGtlcm5lbCBlbnRlcmluZy4gICovCisJ CSAgICBicmVhazsKKwkJICBjYXNlIDc6ICAvLyBHT01QX01BWF9BQ1RJVkVfTEVWRUxTX1ZB UgorCQkgICAgdmFsID0gZ29tcF9nZXRfaWN2ICgmZ29tcF9tYXhfYWN0aXZlX2xldmVsc192 YXJfZGV2X2xpc3QsIGRldl9udW0sCisJCQkJCWdvbXBfaW5pdGlhbF9pY3ZfZmxhZ3MubWF4 X2FjdGl2ZV9sZXZlbHNfdmFyLAorCQkJCQkmZ29tcF9pbml0aWFsX2ljdl9kZXYubWF4X2Fj dGl2ZV9sZXZlbHNfdmFyLAorCQkJCQkmZ29tcF9pbml0aWFsX2ljdl9hbGwubWF4X2FjdGl2 ZV9sZXZlbHNfdmFyKTsKKwkJICAgIGJyZWFrOworCQkgIGNhc2UgODogIC8vIEdPTVBfQklO RF9WQVIKKwkJICAgIHZhbCA9IGdvbXBfZ2V0X2ljdiAoJmdvbXBfcHJvY19iaW5kX3Zhcl9k ZXZfbGlzdCwgZGV2X251bSwKKwkJCQkJZ29tcF9pbml0aWFsX2ljdl9mbGFncy5iaW5kX3Zh ciwKKwkJCQkJJmdvbXBfaW5pdGlhbF9pY3ZfZGV2LmJpbmRfdmFyLAorCQkJCQkmZ29tcF9p bml0aWFsX2ljdl9hbGwuYmluZF92YXIpOworCQkgICAgYnJlYWs7CisJCSAgY2FzZSA5OiAv LyBHT01QX05URUFNU19WQVIKKwkJICAgIHZhbCA9IGdvbXBfZ2V0X2ljdiAoJmdvbXBfbnRl YW1zX3Zhcl9kZXZfbGlzdCwgZGV2X251bSwKKwkJCQkJZ29tcF9pbml0aWFsX2ljdl9mbGFn cy5udGVhbXNfdmFyLAorCQkJCQkmZ29tcF9pbml0aWFsX2ljdl9kZXYubnRlYW1zX3ZhciwK KwkJCQkJJmdvbXBfaW5pdGlhbF9pY3ZfYWxsLm50ZWFtc192YXIpOworCQkgICAgYnJlYWs7 CisJCX0KKwkgICAgICBpZiAodmFsICE9IE5VTEwpCisJCXsKKwkJICBzaXplX3QgdmFyX3Np emUgPSB2YXItPmVuZCAtIHZhci0+c3RhcnQ7CisJCSAgLyogQ29weSBkZXZpY2VfbnVtIHZh bHVlIHRvIHBsYWNlIG9uIGRldmljZSBtZW1vcnksIGhlcmVieQorCQkgICAgIGFjdHVhbGx5 IGRlc2lnbmF0aW5nIGl0cyBkZXZpY2UgbnVtYmVyIGludG8gZWZmZWN0LiAgKi8KKwkJICBn b21wX2NvcHlfaG9zdDJkZXYgKGRldmljZXAsIE5VTEwsICh2b2lkICopIHZhci0+c3RhcnQs IHZhbCwKKwkJCQkgICAgICB2YXJfc2l6ZSwgZmFsc2UsIE5VTEwpOworCQl9CisJICB9CiAJ fQogICAgIH0KIApkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jLWMr Ky1jb21tb24vaWN2LTUuYyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29t bW9uL2ljdi01LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFiZjQ0 ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy1jKyst Y29tbW9uL2ljdi01LmMKQEAgLTAsMCArMSw0OCBAQAorLyogeyBkZy1kbyBydW4gfSAqLwor CisjaW5jbHVkZSA8b21wLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3Ry aW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK2NoYXIgY29uc3QgKnZhcm5hbWVzW10g PSB7CisgICJPTVBfTlVNX1RFQU1TX0RFVl8wIiwKKyAgIk9NUF9OVU1fVEVBTVNfREVWXzEi LAorICAiT01QX05VTV9URUFNU19ERVZfMiIsCisgICJPTVBfTlVNX1RFQU1TX0FMTCIsCisg ICJPTVBfTlVNX1RFQU1TX0RFViIsCisgICJPTVBfTlVNX1RFQU1TIgorfTsKK2NoYXIgY29u c3QgKnZhbHVlc1tdID0geyAiNDIiLCAiNDMiLCAiNDQiLCAiNDUiLCAiNDYiLCAiNDciIH07 Citjb25zdCBpbnQgY250ID0gNjsKKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqY29u c3QgKmFyZ3YpCit7CisgIGludCB1cGRhdGVkID0gMDsKKyAgZm9yIChpbnQgaSA9IDA7IGkg PCBjbnQ7IGkrKykKKyAgICB7CisgICAgICBpZiAoZ2V0ZW52ICh2YXJuYW1lc1tpXSkgPT0g TlVMTAorCSAgfHwgc3RyY21wIChnZXRlbnYgKHZhcm5hbWVzW2ldKSwgdmFsdWVzW2ldKSAh PSAwKQorCXsKKwkgIHNldGVudiAodmFybmFtZXNbaV0sIHZhbHVlc1tpXSwgMSk7CisJICB1 cGRhdGVkID0gMTsKKwl9CisgICAgfQorICBpZiAodXBkYXRlZCkKKyAgICB7CisgICAgICBl eGVjdiAoYXJndlswXSwgYXJndik7CisgICAgICBhYm9ydCAoKTsKKyAgICB9CisKKyAgaWYg KG9tcF9nZXRfbWF4X3RlYW1zICgpICE9IDQ3KQorICAgIGFib3J0ICgpOworCisgIGludCBu dW1fZGV2aWNlcyA9IG9tcF9nZXRfbnVtX2RldmljZXMgKCkgPiAzID8gMyA6IG9tcF9nZXRf bnVtX2RldmljZXMgKCk7CisgIGZvciAoaW50IGk9MDsgaSA8IG51bV9kZXZpY2VzOyBpKysp CisgICAgI3ByYWdtYSBvbXAgdGFyZ2V0IGRldmljZSAoaSkKKyAgICAgIGlmIChvbXBfZ2V0 X21heF90ZWFtcyAoKSAhPSA0MiArIGkpCisJYWJvcnQgKCk7CisKKyAgcmV0dXJuIDA7Cit9 ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0 c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24vaWN2LTYuYyBiL2xpYmdvbXAvdGVzdHN1aXRl L2xpYmdvbXAuYy1jKystY29tbW9uL2ljdi02LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uOTQzMTQ3YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAvdGVzdHN1 aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL2ljdi02LmMKQEAgLTAsMCArMSw2MyBAQAorLyog eyBkZy1kbyBydW4gfSAqLworCisvKiBUaGlzIHRlc3RzIHRoZSBoaWVyYXJjaGljYWwgdXNh Z2Ugb2YgSUNWcyBvbiB0aGUgZGV2aWNlLCBpLmUuIGlmCisgICBPTVBfTlVNX1RFQU1TX0RF Vl88ZGV2aWNlX251bT4gaXMgbm90IGNvbmZpZ3VyZWQsIHRoZW4gdGhlIHZhbHVlIG9mCisg ICBPTVBfTlVNX1RFQU1TX0RFViBzaG91bGQgYmUgdXNlZC4gICovCisKKyNpbmNsdWRlIDxv bXAuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNs dWRlIDx1bmlzdGQuaD4KKworY2hhciBjb25zdCAqdmFybmFtZXNbXSA9IHsKKyAgIk9NUF9O VU1fVEVBTVNfQUxMIiwKKyAgIk9NUF9OVU1fVEVBTVNfREVWIiwKK307CitjaGFyIGNvbnN0 ICp2YWx1ZXNbXSA9IHsgIjQyIiwgIjQzIiB9OworY29uc3QgaW50IGNudCA9IDI7CisKK2No YXIgY29uc3QgKmV4Y2x1ZGVzW10gPSB7CisgICJPTVBfTlVNX1RFQU1TX0RFVl8wIiwKKyAg Ik9NUF9OVU1fVEVBTVNfREVWXzEiLAorICAiT01QX05VTV9URUFNU19ERVZfMiIsCit9Owor Y29uc3QgaW50IGNudF9leGx1ZGVzID0gMzsKKworaW50CittYWluIChpbnQgYXJnYywgY2hh ciAqY29uc3QgKmFyZ3YpCit7CisgIGludCB1cGRhdGVkID0gMDsKKyAgZm9yIChpbnQgaSA9 IDA7IGkgPCBjbnQ7IGkrKykKKyAgICB7CisgICAgICBpZiAoZ2V0ZW52ICh2YXJuYW1lc1tp XSkgPT0gTlVMTAorCSAgfHwgc3RyY21wIChnZXRlbnYgKHZhcm5hbWVzW2ldKSwgdmFsdWVz W2ldKSAhPSAwKQorCXsKKwkgIHNldGVudiAodmFybmFtZXNbaV0sIHZhbHVlc1tpXSwgMSk7 CisJICB1cGRhdGVkID0gMTsKKwl9CisgICAgfQorICBmb3IgKGludCBpID0gMDsgaSA8IGNu dF9leGx1ZGVzOyBpKyspCisgICAgeworICAgICAgaWYgKGdldGVudiAoZXhjbHVkZXNbaV0p ICE9IE5VTEwpCisJeworCSAgdW5zZXRlbnYgKGV4Y2x1ZGVzW2ldKTsKKwkgIHVwZGF0ZWQg PSAxOworCX0KKyAgICB9CisgIGlmICh1cGRhdGVkKQorICAgIHsKKyAgICAgIGV4ZWN2IChh cmd2WzBdLCBhcmd2KTsKKyAgICAgIGFib3J0ICgpOworICAgIH0KKworICBpZiAob21wX2dl dF9tYXhfdGVhbXMgKCkgIT0gNDIpCisgICAgYWJvcnQgKCk7CisKKyAgaW50IG51bV9kZXZp Y2VzID0gb21wX2dldF9udW1fZGV2aWNlcyAoKSA+IDMgPyAzIDogb21wX2dldF9udW1fZGV2 aWNlcyAoKTsKKyAgZm9yIChpbnQgaT0wOyBpIDwgbnVtX2RldmljZXM7IGkrKykKKyAgICAj cHJhZ21hIG9tcCB0YXJnZXQgZGV2aWNlIChpKQorICAgICAgaWYgKG9tcF9nZXRfbWF4X3Rl YW1zICgpICE9IDQzKQorCWFib3J0ICgpOworCisgIHJldHVybiAwOworfQpcIE5vIG5ld2xp bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdv bXAuYy1jKystY29tbW9uL2ljdi03LmMgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMt YysrLWNvbW1vbi9pY3YtNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu Ljg1N2Q3OTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21w LmMtYysrLWNvbW1vbi9pY3YtNy5jCkBAIC0wLDAgKzEsNjYgQEAKKy8qIHsgZGctZG8gcnVu IH0gKi8KKworLyogVGhpcyB0ZXN0cyB0aGUgaGllcmFyY2hpY2FsIHVzYWdlIG9mIElDVnMg b24gdGhlIGhvc3QgYW5kIG9uIGRldmljZXMsIGkuZS4gaWYKKyAgIE9NUF9OVU1fVEVBTVNf REVWXzxkZXZpY2VfbnVtPiwgT01QX05VTV9URUFNU19ERVYsIGFuZAorICAgT01QX05VTV9U RUFNUyBhcmUgbm90IGNvbmZpZ3VyZWQsIHRoZW4gdGhlIHZhbHVlIG9mCisgICBPTVBfTlVN X1RFQU1TX0FMTCBzaG91bGQgYmUgdXNlZCBmb3IgdGhlIGhvc3QgYXMgd2VsbCBhcyBmb3Ig dGhlCisgICBkZXZpY2VzLiAgKi8KKworI2luY2x1ZGUgPG9tcC5oPgorI2luY2x1ZGUgPHN0 ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitj aGFyIGNvbnN0ICp2YXJuYW1lc1tdID0geworICAiT01QX05VTV9URUFNU19BTEwiCit9Owor Y2hhciBjb25zdCAqdmFsdWVzW10gPSB7ICI0MiIgfTsKK2NvbnN0IGludCBjbnQgPSAxOwor CitjaGFyIGNvbnN0ICpleGNsdWRlc1tdID0geworICAiT01QX05VTV9URUFNU19ERVZfMCIs CisgICJPTVBfTlVNX1RFQU1TX0RFVl8xIiwKKyAgIk9NUF9OVU1fVEVBTVNfREVWXzIiLAor ICAiT01QX05VTV9URUFNU19ERVYiLAorICAiT01QX05VTV9URUFNUyIKK307Citjb25zdCBp bnQgY250X2V4bHVkZXMgPSA1OworCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICpjb25z dCAqYXJndikKK3sKKyAgaW50IHVwZGF0ZWQgPSAwOworICBmb3IgKGludCBpID0gMDsgaSA8 IGNudDsgaSsrKQorICAgIHsKKyAgICAgIGlmIChnZXRlbnYgKHZhcm5hbWVzW2ldKSA9PSBO VUxMCisJICB8fCBzdHJjbXAgKGdldGVudiAodmFybmFtZXNbaV0pLCB2YWx1ZXNbaV0pICE9 IDApCisJeworCSAgc2V0ZW52ICh2YXJuYW1lc1tpXSwgdmFsdWVzW2ldLCAxKTsKKwkgIHVw ZGF0ZWQgPSAxOworCX0KKyAgICB9CisgIGZvciAoaW50IGkgPSAwOyBpIDwgY250X2V4bHVk ZXM7IGkrKykKKyAgICB7CisgICAgICBpZiAoZ2V0ZW52IChleGNsdWRlc1tpXSkgIT0gTlVM TCkKKwl7CisJICB1bnNldGVudiAoZXhjbHVkZXNbaV0pOworCSAgdXBkYXRlZCA9IDE7CisJ fQorICAgIH0KKyAgaWYgKHVwZGF0ZWQpCisgICAgeworICAgICAgZXhlY3YgKGFyZ3ZbMF0s IGFyZ3YpOworICAgICAgYWJvcnQgKCk7CisgICAgfQorCisgIGlmIChvbXBfZ2V0X21heF90 ZWFtcyAoKSAhPSA0MikKKyAgICBhYm9ydCAoKTsKKworICBpbnQgbnVtX2RldmljZXMgPSBv bXBfZ2V0X251bV9kZXZpY2VzICgpID4gMyA/IDMgOiBvbXBfZ2V0X251bV9kZXZpY2VzICgp OworICBmb3IgKGludCBpPTA7IGkgPCBudW1fZGV2aWNlczsgaSsrKQorICAgICNwcmFnbWEg b21wIHRhcmdldCBkZXZpY2UgKGkpCisgICAgICBpZiAob21wX2dldF9tYXhfdGVhbXMgKCkg IT0gNDIpCisJYWJvcnQgKCk7CisKKyAgcmV0dXJuIDA7Cit9ClwgTm8gbmV3bGluZSBhdCBl bmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jLWMr Ky1jb21tb24vb21wLWRpc3BsYXktZW52LTEuYyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdv bXAuYy1jKystY29tbW9uL29tcC1kaXNwbGF5LWVudi0xLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uMGIzN2UzZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAv dGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL29tcC1kaXNwbGF5LWVudi0xLmMKQEAg LTAsMCArMSwxNzAgQEAKKy8qIHsgZGctZG8gcnVuIH0gKi8KKworI2luY2x1ZGUgPG9tcC5o PgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUg PHVuaXN0ZC5oPgorCitjaGFyIGNvbnN0ICp2YXJuYW1lc1tdID0geworICAiT01QX1RIUkVB RF9MSU1JVF9ERVZfMjQiLAorICAiT01QX1RIUkVBRF9MSU1JVF9BTEwiLAorICAiT01QX1RI UkVBRF9MSU1JVF9ERVYiLAorICAiT01QX1RIUkVBRF9MSU1JVCIsCisgICJPTVBfREVGQVVM VF9ERVZJQ0UiLAorICAiT01QX1NDSEVEVUxFX0RFVl8yNCIsCisgICJPTVBfU0NIRURVTEVf QUxMIiwKKyAgIk9NUF9TQ0hFRFVMRV9ERVYiLAorICAiT01QX1NDSEVEVUxFIiwKKyAgIk9N UF9EWU5BTUlDX0RFVl8yNCIsCisgICJPTVBfRFlOQU1JQ19BTEwiLAorICAiT01QX0RZTkFN SUNfREVWIiwKKyAgIk9NUF9EWU5BTUlDIiwKKyAgIk9NUF9OVU1fVEhSRUFEUyIsCisgICJP TVBfTlVNX1RIUkVBRFNfQUxMIiwKKyAgIk9NUF9OVU1fVEhSRUFEU19ERVYiLAorICAiT01Q X05VTV9USFJFQURTX0RFVl8yNCIsCisgICJPTVBfTUFYX0FDVElWRV9MRVZFTFMiLAorICAi T01QX01BWF9BQ1RJVkVfTEVWRUxTX0FMTCIsCisgICJPTVBfTUFYX0FDVElWRV9MRVZFTFNf REVWIiwKKyAgIk9NUF9NQVhfQUNUSVZFX0xFVkVMU19ERVZfMjQiLAorICAiT01QX05VTV9U RUFNUyIsCisgICJPTVBfTlVNX1RFQU1TX0FMTCIsCisgICJPTVBfTlVNX1RFQU1TX0RFViIs CisgICJPTVBfTlVNX1RFQU1TX0RFVl8yNCIsCisgICJPTVBfUFJPQ19CSU5EIiwKKyAgIk9N UF9QUk9DX0JJTkRfQUxMIiwKKyAgIk9NUF9QUk9DX0JJTkRfREVWIiwKKyAgIk9NUF9QUk9D X0JJTkRfREVWXzI0IiwKKyAgIk9NUF9TVEFDS1NJWkUiLAorICAiT01QX1NUQUNLU0laRV9B TEwiLAorICAiT01QX1NUQUNLU0laRV9ERVYiLAorICAiT01QX1NUQUNLU0laRV9ERVZfMjQi LAorICAiT01QX1dBSVRfUE9MSUNZIiwKKyAgIk9NUF9XQUlUX1BPTElDWV9BTEwiLAorICAi T01QX1dBSVRfUE9MSUNZX0RFViIsCisgICJPTVBfV0FJVF9QT0xJQ1lfREVWXzI0IiwKKyAg Ik9NUF9URUFNU19USFJFQURfTElNSVQiLAorICAiT01QX1RFQU1TX1RIUkVBRF9MSU1JVF9B TEwiLAorICAiT01QX1RFQU1TX1RIUkVBRF9MSU1JVF9ERVYiLAorICAiT01QX1RFQU1TX1RI UkVBRF9MSU1JVF9ERVZfMjQiCit9OworCitjaGFyIGNvbnN0ICp2YWx1ZXNbXSA9IHsKKyAg IjQyIiwKKyAgIjQzIiwKKyAgIjQ0IiwKKyAgIjQ1IiwKKyAgIjQyIiwKKyAgImd1aWRlZCw0 IiwKKyAgImR5bmFtaWMiLAorICAiZ3VpZGVkLDEiLAorICAiZ3VpZGVkLDIiLAorICAidHJ1 ZSIsCisgICJ0cnVlIiwKKyAgInRydWUiLAorICAidHJ1ZSIsCisgICI0LDMsMiIsCisgICI0 NSw0Niw0NyIsCisgICI0Miw0Myw0NCIsCisgICIxNCwxMywxMiIsCisgICI0MiIsCisgICI0 MyIsCisgICI0NCIsCisgICI0NSIsCisgICI0MiIsCisgICI0MyIsCisgICI0NCIsCisgICI0 NSIsCisgICJzcHJlYWQiLAorICAiZmFsc2UiLAorICAic3ByZWFkLHNwcmVhZCIsCisgICJz cHJlYWQsY2xvc2UiLAorICAiNDIiLAorICAiNDIgTSIsCisgICI0MyBrIiwKKyAgIjQ0IiwK KyAgImFjdGl2ZSIsCisgICJBQ1RJVkUiLAorICAicGFzc2l2ZSIsCisgICJQQVNTSVZFIiwK KyAgIjQyIiwKKyAgIjQzIiwKKyAgIjQ0IiwKKyAgIjQ1IgorfTsKKworY29uc3QgaW50IGNu dCA9IDQxOworCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICpjb25zdCAqYXJndikKK3sK KyAgaW50IHVwZGF0ZWQgPSAwOworICBmb3IgKGludCBpID0gMDsgaSA8IGNudDsgaSsrKQor ICAgIHsKKyAgICAgIGlmIChnZXRlbnYgKHZhcm5hbWVzW2ldKSA9PSBOVUxMCisJICB8fCBz dHJjbXAgKGdldGVudiAodmFybmFtZXNbaV0pLCB2YWx1ZXNbaV0pICE9IDApCisJeworCSAg c2V0ZW52ICh2YXJuYW1lc1tpXSwgdmFsdWVzW2ldLCAxKTsKKwkgIHVwZGF0ZWQgPSAxOwor CX0KKyAgICB9CisgIGlmICh1cGRhdGVkKQorICAgIHsKKyAgICAgIGV4ZWN2IChhcmd2WzBd LCBhcmd2KTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgb21wX2Rpc3BsYXlfZW52ICgx KTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIHsgZGctb3V0cHV0ICIuKlxcXFtob3N0XSBPTVBf RFlOQU1JQyA9ICdUUlVFJy4qIiB9ICovCisvKiB7IGRnLW91dHB1dCAiLipcXFxbYWxsXF0g T01QX0RZTkFNSUMgPSAnVFJVRScuKiIgfSAqLworLyogeyBkZy1vdXRwdXQgIi4qXFxcW2Rl dmljZVxdIE9NUF9EWU5BTUlDID0gJ1RSVUUnLioiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICIu KlxcXFsyNFxdIE9NUF9EWU5BTUlDID0gJ1RSVUUnLioiIH0gKi8KKworLyogeyBkZy1vdXRw dXQgIi4qXFxcW2hvc3RdIE9NUF9OVU1fVEhSRUFEUyA9ICc0LDMsMicuKiIgfSAqLworLyog eyBkZy1vdXRwdXQgIi4qXFxcW2FsbFxdIE9NUF9OVU1fVEhSRUFEUyA9ICc0NSw0Niw0Nycu KiIgfSAqLworLyogeyBkZy1vdXRwdXQgIi4qXFxcW2RldmljZVxdIE9NUF9OVU1fVEhSRUFE UyA9ICc0Miw0Myw0NCcuKiIgfSAqLworLyogeyBkZy1vdXRwdXQgIi4qXFxcWzI0XF0gT01Q X05VTV9USFJFQURTID0gJzE0LDEzLDEyJy4qIiB9ICovCisKKy8qIHsgZGctb3V0cHV0ICIu KlxcXFtob3N0XSBPTVBfU0NIRURVTEUgPSAnR1VJREVELDInLioiIH0gKi8KKy8qIHsgZGct b3V0cHV0ICIuKlxcXFthbGxcXSBPTVBfU0NIRURVTEUgPSAnRFlOQU1JQycuKiIgfSAqLwor LyogeyBkZy1vdXRwdXQgIi4qXFxcW2RldmljZVxdIE9NUF9TQ0hFRFVMRSA9ICdHVUlERUQn LioiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICIuKlxcXFsyNFxdIE9NUF9TQ0hFRFVMRSA9ICdH VUlERUQsNCcuKiIgfSAqLworCisvKiB7IGRnLW91dHB1dCAiLipcXFxbaG9zdF0gT01QX1BS T0NfQklORCA9ICdTUFJFQUQnLioiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICIuKlxcXFthbGxc XSBPTVBfUFJPQ19CSU5EID0gJ0ZBTFNFJy4qIiB9ICovCisvKiB7IGRnLW91dHB1dCAiLipc XFxbZGV2aWNlXF0gT01QX1BST0NfQklORCA9ICdTUFJFQUQsU1BSRUFEJy4qIiB9ICovCisv KiB7IGRnLW91dHB1dCAiLipcXFxbMjRcXSBPTVBfUFJPQ19CSU5EID0gJ1NQUkVBRCxDTE9T RScuKiIgfSAqLworCisvKiB7IGRnLW91dHB1dCAiLipcXFxbaG9zdF0gT01QX1NUQUNLU0la RSA9ICc0MzAwOCcuKiIgfSAqLworLyogeyBkZy1vdXRwdXQgIi4qXFxcW2FsbFxdIE9NUF9T VEFDS1NJWkUgPSAnNDQwNDAxOTInLioiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICIuKlxcXFtk ZXZpY2VcXSBPTVBfU1RBQ0tTSVpFID0gJzQ0MDMyJy4qIiB9ICovCisvKiB7IGRnLW91dHB1 dCAiLipcXFxbMjRcXSBPTVBfU1RBQ0tTSVpFID0gJzQ1MDU2Jy4qIiB9ICovCisKKy8qIHsg ZGctb3V0cHV0ICIuKlxcXFtob3N0XSBPTVBfV0FJVF9QT0xJQ1kgPSAnQUNUSVZFJy4qIiB9 ICovCisvKiB7IGRnLW91dHB1dCAiLipcXFxbYWxsXF0gT01QX1dBSVRfUE9MSUNZID0gJ0FD VElWRScuKiIgfSAqLworLyogeyBkZy1vdXRwdXQgIi4qXFxcW2RldmljZVxdIE9NUF9XQUlU X1BPTElDWSA9ICdQQVNTSVZFJy4qIiB9ICovCisvKiB7IGRnLW91dHB1dCAiLipcXFxbMjRc XSBPTVBfV0FJVF9QT0xJQ1kgPSAnUEFTU0lWRScuKiIgfSAqLworCisvKiB7IGRnLW91dHB1 dCAiLipcXFxbaG9zdF0gT01QX1RIUkVBRF9MSU1JVCA9ICc0NScuKiIgfSAqLworLyogeyBk Zy1vdXRwdXQgIi4qXFxcW2FsbFxdIE9NUF9USFJFQURfTElNSVQgPSAnNDMnLioiIH0gKi8K Ky8qIHsgZGctb3V0cHV0ICIuKlxcXFtkZXZpY2VcXSBPTVBfVEhSRUFEX0xJTUlUID0gJzQ0 Jy4qIiB9ICovCisvKiB7IGRnLW91dHB1dCAiLipcXFxbMjRcXSBPTVBfVEhSRUFEX0xJTUlU ID0gJzQyJy4qIiB9ICovCisKKy8qIHsgZGctb3V0cHV0ICIuKlxcXFtob3N0XSBPTVBfTUFY X0FDVElWRV9MRVZFTFMgPSAnNDInLioiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICIuKlxcXFth bGxcXSBPTVBfTUFYX0FDVElWRV9MRVZFTFMgPSAnNDMnLioiIH0gKi8KKy8qIHsgZGctb3V0 cHV0ICIuKlxcXFtkZXZpY2VcXSBPTVBfTUFYX0FDVElWRV9MRVZFTFMgPSAnNDQnLioiIH0g Ki8KKy8qIHsgZGctb3V0cHV0ICIuKlxcXFsyNFxdIE9NUF9NQVhfQUNUSVZFX0xFVkVMUyA9 ICc0NScuKiIgfSAqLworCisvKiB7IGRnLW91dHB1dCAiLipcXFxbaG9zdF0gT01QX05VTV9U RUFNUyA9ICc0MicuKiIgfSAqLworLyogeyBkZy1vdXRwdXQgIi4qXFxcW2FsbFxdIE9NUF9O VU1fVEVBTVMgPSAnNDMnLioiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICIuKlxcXFtkZXZpY2Vc XSBPTVBfTlVNX1RFQU1TID0gJzQ0Jy4qIiB9ICovCisvKiB7IGRnLW91dHB1dCAiLipcXFxb MjRcXSBPTVBfTlVNX1RFQU1TID0gJzQ1Jy4qIiB9ICovCisKKy8qIHsgZGctb3V0cHV0ICIu KlxcXFtob3N0XSBPTVBfVEVBTVNfVEhSRUFEX0xJTUlUID0gJzQyJy4qIiB9ICovCisvKiB7 IGRnLW91dHB1dCAiLipcXFxbYWxsXF0gT01QX1RFQU1TX1RIUkVBRF9MSU1JVCA9ICc0Mycu KiIgfSAqLworLyogeyBkZy1vdXRwdXQgIi4qXFxcW2RldmljZVxdIE9NUF9URUFNU19USFJF QURfTElNSVQgPSAnNDQnLioiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICIuKlxcXFsyNFxdIE9N UF9URUFNU19USFJFQURfTElNSVQgPSAnNDUnLioiIH0gKi8KKworLyogeyBkZy1vdXRwdXQg Ii4qXFxcW2FsbF0gT01QX0RFRkFVTFRfREVWSUNFID0gJzQyJy4qIiB9ICovCmRpZmYgLS1n aXQgYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1vbi9vbXAtZGlzcGxh eS1lbnYtMi5jIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24vb21w LWRpc3BsYXktZW52LTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45 Nzg5NDMwCi0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5j LWMrKy1jb21tb24vb21wLWRpc3BsYXktZW52LTIuYwpAQCAtMCwwICsxLDMyIEBACisvKiB7 IGRnLWRvIHJ1biB9ICovCisKKy8qIFRoaXMgdGVzdCBjaGVja3MgaWYgb21wX2Rpc3BsYXlf ZW52IG91dHB1dHMgdGhlIGluaXRpYWwgSUNWIHZhbHVlcy4gICovCisKKyNpbmNsdWRlIDxv bXAuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNs dWRlIDx1bmlzdGQuaD4KKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqY29uc3QgKmFy Z3YpCit7CisgIGludCB1cGRhdGVkID0gMDsKKyAgaWYgKGdldGVudiAoIk9NUF9OVU1fVEVB TVMiKSA9PSBOVUxMCisgICAgICB8fCBzdHJjbXAgKGdldGVudiAoIk9NUF9OVU1fVEVBTVMi KSwgIjQyIikgIT0gMCkKKyAgICB7CisgICAgICBzZXRlbnYgKCJPTVBfTlVNX1RFQU1TIiwg IjQyIiwgMSk7CisgICAgICB1cGRhdGVkID0gMTsKKyAgICB9CisgIGlmICh1cGRhdGVkKQor ICAgIGV4ZWN2IChhcmd2WzBdLCBhcmd2KTsKKworICBvbXBfZGlzcGxheV9lbnYgKDEpOwor ICBvbXBfc2V0X251bV90ZWFtcyAoMjQpOworICBpZiAob21wX2dldF9tYXhfdGVhbXMgKCkg IT0gMjQpCisgICAgYWJvcnQgKCk7CisgIG9tcF9kaXNwbGF5X2VudiAoMSk7CisKKyAgcmV0 dXJuIDA7Cit9CisKKy8qIHsgZGctb3V0cHV0ICIuKlxcXFtob3N0XSBPTVBfTlVNX1RFQU1T ID0gJzQyJy4qXFxcW2hvc3RdIE9NUF9OVU1fVEVBTVMgPSAnNDInIiB9ICovCg== --------------xqt5fNPsMjiDo5D1NhAM0y19--