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 655E53858D37; Mon, 21 Feb 2022 11:19:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 655E53858D37 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: yzit2uaOoZChd9S5fte0kIBIJcdbM2Fs49A3WfIOvq/ablm8PZf+XaPVwOEfGNzeAjPbyyEbjw eGeWwEDPY3T7Oc9IJmM2eDDuqZzliT22t1FS2pmO/+lUP2U+I4Q4E/6xkAHPYh7QegvisDG6+k aaHcCFW9I0dFcyqxqADNPN4WoMNUDeb32s/OgqeOeZgTzgNAKK64kkzJbf381LIfZXKgvn1O/l U59ERMBXUX6RmhhzFxdRP4bB1dQ33Uvc8enp0zTCEdo+9sY//z5yPR9QLPK8UXgNefHodRWYBT /6SBW2Od9lmGy8PDGhp9E/ho X-IronPort-AV: E=Sophos;i="5.88,385,1635235200"; d="diff'?scan'208";a="72204372" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa4.mentor.iphmx.com with ESMTP; 21 Feb 2022 03:19:34 -0800 IronPort-SDR: LFTuR4u6sp++FXiEK2EVS9K/sj1P9dwg+JJWjE79/q4+ORZhHHJ8rX6pJZT4eYyRZ7gXkDDw42 2O+Hqbhr7abzfO1axZ/LEvZobF98yvKRvaOxBRpBmvbQ3zYFDPg+3xESwYPo93tZcArMArT0V7 rQgjukH3oMypo88tnouk5mht+z+R/scEjEGz5uFfYAltdRKC6jQrX3kwtmzw3X64kyusrN+qVy e7f0iWm9iPacP4F8jc7LYtPLmPxtpw6ceXPegLSBgChZ0j0YPBwFmGe1tE06jTMLyCZ6j9UGIU 2G0= Content-Type: multipart/mixed; boundary="------------vuk851b88JSsLCwjEXKSaOzc" Message-ID: Date: Mon, 21 Feb 2022 12:19:20 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.6.1 To: CC: From: Marcel Vollweiler Subject: [PATCH] OpenMP, libgomp: Add new runtime routines omp_target_memcpy_async and omp_target_memcpy_rect_async X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-15.mgc.mentorg.com (139.181.222.15) 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, T_SCC_BODY_TEXT_LINE 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: fortran@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Fortran mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Feb 2022 11:19:41 -0000 --------------vuk851b88JSsLCwjEXKSaOzc Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable Hi, This patch adds two new OpenMP runtime routines: omp_target_memcpy_async an= d omp_target_memcpy_rect_async. Both functions are introduced in OpenMP 5.1 a= s asynchronous variants of omp_target_memcpy and omp_target_memcpy_rect. In contrast to the synchronous variants, the asynchronous functions have tw= o additional function parameters to allow the specification of task dependenc= es: int depobj_count omp_depend_t *depobj_list integer(c_int), value :: depobj_count integer(omp_depend_kind), optional :: depobj_list(*) The implementation splits the synchronous functions into two parts: (a) che= ck and (b) copy. Then (a) is used in the asynchronous functions for the sequen= tial part, and the actual copy process (b) is executed in a new created task. Th= e sequential part (a) takes into account the requirements for the return valu= es: "The routine returns zero if successful. Otherwise, it returns a non-zero value." (omp_target_memcpy_async, OpenMP 5.1 spec, section 3.8.7) "An application can determine the number of inclusive dimensions supported = by an implementation by passing NULL pointers (or C_NULL_PTR, for Fortran) for bo= th dst and src. The routine returns the number of dimensions supported by the implementation for the specified device numbers. No copy operation is performed." (omp_target_memcpy_rect_async, OpenMP 5.1 spec, section 3.8.8) Due to asynchronicity an error is thrown if the asynchronous memcpy is not successful (in contrast to the synchronous functions which use a return value unequal to zero). The patch was tested on x86_64-linux with nvptx and amdgcn offloading and w= ith PowerPC with nvptx offloading. All with no regressions. 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 --------------vuk851b88JSsLCwjEXKSaOzc Content-Type: text/plain; charset="UTF-8"; name="target-memcpy-async-patch.diff" Content-Disposition: attachment; filename="target-memcpy-async-patch.diff" Content-Transfer-Encoding: base64 T3Blbk1QLCBsaWJnb21wOiBBZGQgbmV3IHJ1bnRpbWUgcm91dGluZXMgb21wX3RhcmdldF9t ZW1jcHlfYXN5bmMgYW5kCm9tcF90YXJnZXRfbWVtY3B5X3JlY3RfYXN5bmMuCgpUaGlzIHBh dGNoIGFkZHMgdHdvIG5ldyBPcGVuTVAgcnVudGltZSByb3V0aW5lczogb21wX3RhcmdldF9t ZW1jcHlfYXN5bmMgYW5kCm9tcF90YXJnZXRfbWVtY3B5X3JlY3RfYXN5bmMuIEJvdGggZnVu Y3Rpb25zIGFyZSBpbnRyb2R1Y2VkIGluIE9wZW5NUCA1LjEgYXMKYXN5bmNocm9ub3VzIHZh cmlhbnRzIG9mIG9tcF90YXJnZXRfbWVtY3B5IGFuZCBvbXBfdGFyZ2V0X21lbWNweV9yZWN0 LgoKSW4gY29udHJhc3QgdG8gdGhlIHN5bmNocm9ub3VzIHZhcmlhbnRzLCB0aGUgYXN5bmNo cm9ub3VzIGZ1bmN0aW9ucyBoYXZlIHR3bwphZGRpdGlvbmFsIGZ1bmN0aW9uIHBhcmFtZXRl cnMgdG8gYWxsb3cgdGhlIHNwZWNpZmljYXRpb24gb2YgdGFzayBkZXBlbmRlbmNlczoKCglp bnQgZGVwb2JqX2NvdW50CglvbXBfZGVwZW5kX3QgKmRlcG9ial9saXN0CgoJaW50ZWdlcihj X2ludCksIHZhbHVlIDo6IGRlcG9ial9jb3VudAoJaW50ZWdlcihvbXBfZGVwZW5kX2tpbmQp LCBvcHRpb25hbCA6OiBkZXBvYmpfbGlzdCgqKQoKVGhlIGltcGxlbWVudGF0aW9uIHNwbGl0 cyB0aGUgc3luY2hyb25vdXMgZnVuY3Rpb25zIGludG8gdHdvIHBhcnRzOiAoYSkgY2hlY2sK YW5kIChiKSBjb3B5LiBUaGVuIChhKSBpcyB1c2VkIGluIHRoZSBhc3luY2hyb25vdXMgZnVu Y3Rpb25zIGZvciB0aGUgc2VxdWVudGlhbApwYXJ0LCBhbmQgdGhlIGFjdHVhbCBjb3B5IHBy b2Nlc3MgKGIpIGlzIGV4ZWN1dGVkIGluIGEgbmV3IGNyZWF0ZWQgdGFzay4gVGhlCnNlcXVl bnRpYWwgcGFydCAoYSkgdGFrZXMgaW50byBhY2NvdW50IHRoZSByZXF1aXJlbWVudHMgZm9y IHRoZSByZXR1cm4gdmFsdWVzOiAKCiJUaGUgcm91dGluZSByZXR1cm5zIHplcm8gaWYgc3Vj Y2Vzc2Z1bC4gT3RoZXJ3aXNlLCBpdCByZXR1cm5zIGEgbm9uLXplcm8KdmFsdWUuIiAob21w X3RhcmdldF9tZW1jcHlfYXN5bmMsIE9wZW5NUCA1LjEgc3BlYywgc2VjdGlvbiAzLjguNykK CiJBbiBhcHBsaWNhdGlvbiBjYW4gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgaW5jbHVzaXZl IGRpbWVuc2lvbnMgc3VwcG9ydGVkIGJ5IGFuCmltcGxlbWVudGF0aW9uIGJ5IHBhc3Npbmcg TlVMTCBwb2ludGVycyAob3IgQ19OVUxMX1BUUiwgZm9yIEZvcnRyYW4pIGZvciBib3RoCmRz dCBhbmQgc3JjLiBUaGUgcm91dGluZSByZXR1cm5zIHRoZSBudW1iZXIgb2YgZGltZW5zaW9u cyBzdXBwb3J0ZWQgYnkgdGhlCmltcGxlbWVudGF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIGRl dmljZSBudW1iZXJzLiBObyBjb3B5IG9wZXJhdGlvbiBpcwpwZXJmb3JtZWQuIiAob21wX3Rh cmdldF9tZW1jcHlfcmVjdF9hc3luYywgT3Blbk1QIDUuMSBzcGVjLCBzZWN0aW9uIDMuOC44 KQoKRHVlIHRvIGFzeW5jaHJvbmljaXR5IGFuIGVycm9yIGlzIHRocm93biBpZiB0aGUgYXN5 bmNocm9ub3VzIG1lbWNweSBpcyBub3QKc3VjY2Vzc2Z1bCAoaW4gY29udHJhc3QgdG8gdGhl IHN5bmNocm9ub3VzIGZ1bmN0aW9ucyB3aGljaCB1c2UgYSByZXR1cm4KdmFsdWUgdW5lcXVh bCB0byB6ZXJvKS4KCmdjYy9DaGFuZ2VMb2c6CgoJKiBvbXAtbG93LmNjIChvbXBfcnVudGlt ZV9hcGlfY2FsbCk6IEFkZGVkIHRhcmdldF9tZW1jcHlfYXN5bmMgYW5kCgl0YXJnZXRfbWVt Y3B5X3JlY3RfYXN5bmMgdG8gb21wX3J1bnRpbWVfYXBpcyBhcnJheS4KCmxpYmdvbXAvQ2hh bmdlTG9nOgoKCSogbGliZ29tcC5tYXA6IEFkZGVkIG9tcF90YXJnZXRfbWVtY3B5X2FzeW5j IGFuZAoJb21wX3RhcmdldF9tZW1jcHlfcmVjdF9hc3luYy4KCSogbGliZ29tcC50ZXhpOiBC b3RoIGZ1bmN0aW9ucyBhcmUgbm93IHN1cHBvcnRlZC4KCSogb21wLmguaW46IEFkZGVkIG9t cF90YXJnZXRfbWVtY3B5X2FzeW5jIGFuZAoJb21wX3RhcmdldF9tZW1jcHlfcmVjdF9hc3lu Yy4KCSogb21wX2xpYi5mOTAuaW46IEFkZGVkIGludGVyZmFjZXMgZm9yIGJvdGggbmV3IGZ1 bmN0aW9ucy4KCSogb21wX2xpYi5oLmluOiBMaWtld2lzZS4KCSogdGFyZ2V0LmMgKG9tcF90 YXJnZXRfbWVtY3B5KTogUmVzdHJ1Y3R1cmVkIGludG8gY2hlY2sgYW5kIGNvcHkgcGFydC4K CShvbXBfdGFyZ2V0X21lbWNweV9jaGVjayk6IE5ldyBoZWxwZXIgZnVuY3Rpb24gZm9yIG9t cF90YXJnZXRfbWVtY3B5IGFuZAoJb21wX3RhcmdldF9tZW1jcHlfYXN5bmMgdGhhdCBjaGVj a3MgcmVxdWlyZW1lbnRzLgoJKG9tcF90YXJnZXRfbWVtY3B5X2NvcHkpOiBOZXcgaGVscGVy IGZ1bmN0aW9uIGZvciBvbXBfdGFyZ2V0X21lbWNweSBhbmQKCW9tcF90YXJnZXRfbWVtY3B5 X2FzeW5jIHRoYXQgcGVyZm9ybXMgdGhlIG1lbWNweS4KCShvbXBfdGFyZ2V0X21lbWNweV9h c3luY19oZWxwZXIpOiBOZXcgaGVscGVyIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCBpbgoJb21w X3RhcmdldF9tZW1jcHlfYXN5bmMgZm9yIHRoZSBhc3luY2hyb25vdXMgdGFzay4KCShvbXBf dGFyZ2V0X21lbWNweV9hc3luYyk6IEFkZGVkLgoJKG9tcF90YXJnZXRfbWVtY3B5X3JlY3Qp OiBSZXN0cnVjdHVyZWQgaW50byBjaGVjayBhbmQgY29weSBwYXJ0LgoJKG9tcF90YXJnZXRf bWVtY3B5X3JlY3RfY2hlY2spOiBOZXcgaGVscGVyIGZ1bmN0aW9uIGZvcgoJb21wX3Rhcmdl dF9tZW1jcHlfcmVjdCBhbmQgb21wX3RhcmdldF9tZW1jcHlfcmVjdF9hc3luYyB0aGF0IGNo ZWNrcwoJcmVxdWlyZW1lbnRzLgoJKG9tcF90YXJnZXRfbWVtY3B5X3JlY3RfY29weSk6IE5l dyBoZWxwZXIgZnVuY3Rpb24gZm9yCglvbXBfdGFyZ2V0X21lbWNweV9yZWN0IGFuZCBvbXBf dGFyZ2V0X21lbWNweV9yZWN0X2FzeW5jIHRoYXQgcGVyZm9ybXMKCXRoZSBtZW1jcHkuCgko b21wX3RhcmdldF9tZW1jcHlfcmVjdF9hc3luY19oZWxwZXIpOiBOZXcgaGVscGVyIGZ1bmN0 aW9uIHRoYXQgaXMgdXNlZAoJaW4gb21wX3RhcmdldF9tZW1jcHlfcmVjdF9hc3luYyBmb3Ig dGhlIGFzeW5jaHJvbm91cyB0YXNrLgoJKG9tcF90YXJnZXRfbWVtY3B5X3JlY3RfYXN5bmMp OiBBZGRlZC4KCSogdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3RhcmdldC1tZW1j cHktYXN5bmMtMS5jOiBOZXcgdGVzdC4KCSogdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29t bW9uL3RhcmdldC1tZW1jcHktYXN5bmMtMi5jOiBOZXcgdGVzdC4KCSogdGVzdHN1aXRlL2xp YmdvbXAuYy1jKystY29tbW9uL3RhcmdldC1tZW1jcHktcmVjdC1hc3luYy0xLmM6IE5ldyB0 ZXN0LgoJKiB0ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24vdGFyZ2V0LW1lbWNweS1y ZWN0LWFzeW5jLTIuYzogTmV3IHRlc3QuCgkqIHRlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4v dGFyZ2V0LW1lbWNweS1hc3luYy0xLmY5MDogTmV3IHRlc3QuCgkqIHRlc3RzdWl0ZS9saWJn b21wLmZvcnRyYW4vdGFyZ2V0LW1lbWNweS1hc3luYy0yLmY5MDogTmV3IHRlc3QuCgkqIHRl c3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFyZ2V0LW1lbWNweS1yZWN0LWFzeW5jLTEuZjkw OiBOZXcgdGVzdC4KCSogdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXJnZXQtbWVtY3B5 LXJlY3QtYXN5bmMtMi5mOTA6IE5ldyB0ZXN0LgoKZGlmZiAtLWdpdCBhL2djYy9vbXAtbG93 LmNjIGIvZ2NjL29tcC1sb3cuY2MKaW5kZXggNzcxNzZlZi4uNDM5NGYyNCAxMDA2NDQKLS0t IGEvZ2NjL29tcC1sb3cuY2MKKysrIGIvZ2NjL29tcC1sb3cuY2MKQEAgLTM5NjEsNyArMzk2 MSw5IEBAIG9tcF9ydW50aW1lX2FwaV9jYWxsIChjb25zdF90cmVlIGZuZGVjbCkKICAgICAg ICJ0YXJnZXRfZnJlZSIsCiAgICAgICAidGFyZ2V0X2lzX3ByZXNlbnQiLAogICAgICAgInRh cmdldF9tZW1jcHkiLAorICAgICAgInRhcmdldF9tZW1jcHlfYXN5bmMiLAogICAgICAgInRh cmdldF9tZW1jcHlfcmVjdCIsCisgICAgICAidGFyZ2V0X21lbWNweV9yZWN0X2FzeW5jIiwK ICAgICAgIE5VTEwsCiAgICAgICAvKiBOb3cgb21wXyogY2FsbHMgdGhhdCBhcmUgYXZhaWxh YmxlIGFzIG9tcF8qIGFuZCBvbXBfKl87IGhvd2V2ZXIsIHRoZQogCSBERUNMX05BTUUgaXMg YWx3YXlzIG9tcF8qIHdpdGhvdXQgdGFpbGluZyB1bmRlcnNjb3JlLiAgKi8KZGlmZiAtLWdp dCBhL2xpYmdvbXAvbGliZ29tcC5tYXAgYi9saWJnb21wL2xpYmdvbXAubWFwCmluZGV4IDJh YzU4MDkuLjMyNjk3OTcgMTAwNjQ0Ci0tLSBhL2xpYmdvbXAvbGliZ29tcC5tYXAKKysrIGIv bGliZ29tcC9saWJnb21wLm1hcApAQCAtMjI0LDYgKzIyNCw4IEBAIE9NUF81LjEgewogCW9t cF9zZXRfdGVhbXNfdGhyZWFkX2xpbWl0XzhfOwogCW9tcF9nZXRfdGVhbXNfdGhyZWFkX2xp bWl0OwogCW9tcF9nZXRfdGVhbXNfdGhyZWFkX2xpbWl0XzsKKwlvbXBfdGFyZ2V0X21lbWNw eV9hc3luYzsKKwlvbXBfdGFyZ2V0X21lbWNweV9yZWN0X2FzeW5jOwogfSBPTVBfNS4wLjI7 CiAKIEdPTVBfMS4wIHsKZGlmZiAtLWdpdCBhL2xpYmdvbXAvbGliZ29tcC50ZXhpIGIvbGli Z29tcC9saWJnb21wLnRleGkKaW5kZXggMTYxYTQyMy4uNWZhYzU5ZiAxMDA2NDQKLS0tIGEv bGliZ29tcC9saWJnb21wLnRleGkKKysrIGIvbGliZ29tcC9saWJnb21wLnRleGkKQEAgLTMx Myw3ICszMTMsNyBAQCBUaGUgT3Blbk1QIDQuNSBzcGVjaWZpY2F0aW9uIGlzIGZ1bGx5IHN1 cHBvcnRlZC4KICAgICAgIHJvdXRpbmVzIEB0YWIgWSBAdGFiCiBAaXRlbSBAY29kZXtvbXBf dGFyZ2V0X2lzX2FjY2Vzc2libGV9IHJ1bnRpbWUgcm91dGluZSBAdGFiIE4gQHRhYgogQGl0 ZW0gQGNvZGV7b21wX3RhcmdldF9tZW1jcHlfYXN5bmN9IGFuZCBAY29kZXtvbXBfdGFyZ2V0 X21lbWNweV9yZWN0X2FzeW5jfQotICAgICAgcnVudGltZSByb3V0aW5lcyBAdGFiIE4gQHRh YgorICAgICAgcnVudGltZSByb3V0aW5lcyBAdGFiIFkgQHRhYgogQGl0ZW0gQGNvZGV7b21w X2dldF9tYXBwZWRfcHRyfSBydW50aW1lIHJvdXRpbmUgQHRhYiBOIEB0YWIKIEBpdGVtIEBj b2Rle29tcF9jYWxsb2N9LCBAY29kZXtvbXBfcmVhbGxvY30sIEBjb2Rle29tcF9hbGlnbmVk X2FsbG9jfSBhbmQKICAgICAgIEBjb2Rle29tcF9hbGlnbmVkX2NhbGxvY30gcnVudGltZSBy b3V0aW5lcyBAdGFiIFkgQHRhYgpkaWZmIC0tZ2l0IGEvbGliZ29tcC9vbXAuaC5pbiBiL2xp YmdvbXAvb21wLmguaW4KaW5kZXggODljNWQ2NS4uZTUzNDAxMSAxMDA2NDQKLS0tIGEvbGli Z29tcC9vbXAuaC5pbgorKysgYi9saWJnb21wL29tcC5oLmluCkBAIC0yNzIsNiArMjcyLDEw IEBAIGV4dGVybiBpbnQgb21wX3RhcmdldF9pc19wcmVzZW50IChjb25zdCB2b2lkICosIGlu dCkgX19HT01QX05PVEhST1c7CiBleHRlcm4gaW50IG9tcF90YXJnZXRfbWVtY3B5ICh2b2lk ICosIGNvbnN0IHZvaWQgKiwgX19TSVpFX1RZUEVfXywKIAkJCSAgICAgIF9fU0laRV9UWVBF X18sIF9fU0laRV9UWVBFX18sIGludCwgaW50KQogICBfX0dPTVBfTk9USFJPVzsKK2V4dGVy biBpbnQgb21wX3RhcmdldF9tZW1jcHlfYXN5bmMgKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBf X1NJWkVfVFlQRV9fLAorCQkJCSAgICBfX1NJWkVfVFlQRV9fLCBfX1NJWkVfVFlQRV9fLCBp bnQsIGludCwKKwkJCQkgICAgaW50LCBvbXBfZGVwZW5kX3QqKQorICBfX0dPTVBfTk9USFJP VzsKIGV4dGVybiBpbnQgb21wX3RhcmdldF9tZW1jcHlfcmVjdCAodm9pZCAqLCBjb25zdCB2 b2lkICosIF9fU0laRV9UWVBFX18sIGludCwKIAkJCQkgICBjb25zdCBfX1NJWkVfVFlQRV9f ICosCiAJCQkJICAgY29uc3QgX19TSVpFX1RZUEVfXyAqLApAQCAtMjc5LDYgKzI4MywxNCBA QCBleHRlcm4gaW50IG9tcF90YXJnZXRfbWVtY3B5X3JlY3QgKHZvaWQgKiwgY29uc3Qgdm9p ZCAqLCBfX1NJWkVfVFlQRV9fLCBpbnQsCiAJCQkJICAgY29uc3QgX19TSVpFX1RZUEVfXyAq LAogCQkJCSAgIGNvbnN0IF9fU0laRV9UWVBFX18gKiwgaW50LCBpbnQpCiAgIF9fR09NUF9O T1RIUk9XOworZXh0ZXJuIGludCBvbXBfdGFyZ2V0X21lbWNweV9yZWN0X2FzeW5jICh2b2lk ICosIGNvbnN0IHZvaWQgKiwgX19TSVpFX1RZUEVfXywKKwkJCQkJIGludCwgY29uc3QgX19T SVpFX1RZUEVfXyAqLAorCQkJCQkgY29uc3QgX19TSVpFX1RZUEVfXyAqLAorCQkJCQkgY29u c3QgX19TSVpFX1RZUEVfXyAqLAorCQkJCQkgY29uc3QgX19TSVpFX1RZUEVfXyAqLAorCQkJ CQkgY29uc3QgX19TSVpFX1RZUEVfXyAqLCBpbnQsIGludCwgaW50LAorCQkJCQkgb21wX2Rl cGVuZF90KikKKyAgX19HT01QX05PVEhST1c7CiBleHRlcm4gaW50IG9tcF90YXJnZXRfYXNz b2NpYXRlX3B0ciAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIF9fU0laRV9UWVBFX18s CiAJCQkJICAgICBfX1NJWkVfVFlQRV9fLCBpbnQpIF9fR09NUF9OT1RIUk9XOwogZXh0ZXJu IGludCBvbXBfdGFyZ2V0X2Rpc2Fzc29jaWF0ZV9wdHIgKGNvbnN0IHZvaWQgKiwgaW50KSBf X0dPTVBfTk9USFJPVzsKZGlmZiAtLWdpdCBhL2xpYmdvbXAvb21wX2xpYi5mOTAuaW4gYi9s aWJnb21wL29tcF9saWIuZjkwLmluCmluZGV4IGRhZjQwZGMuLjVhNTZkM2YgMTAwNjQ0Ci0t LSBhL2xpYmdvbXAvb21wX2xpYi5mOTAuaW4KKysrIGIvbGliZ29tcC9vbXBfbGliLmY5MC5p bgpAQCAtNzk5LDYgKzc5OSwyMiBAQAogICAgICAgICBlbmQgaW50ZXJmYWNlCiAKICAgICAg ICAgaW50ZXJmYWNlCisgICAgICAgICAgZnVuY3Rpb24gb21wX3RhcmdldF9tZW1jcHlfYXN5 bmMgKGRzdCwgc3JjLCBsZW5ndGgsIGRzdF9vZmZzZXQsICYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX29mZnNldCwgZHN0X2RldmljZV9udW0s ICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2Rl dmljZV9udW0sIGRlcG9ial9jb3VudCwgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkZXBvYmpfbGlzdCkgYmluZChjKQorICAgICAgICAgICAgdXNl LCBpbnRyaW5zaWMgOjogaXNvX2NfYmluZGluZywgb25seSA6IGNfcHRyLCBjX2ludCwgY19z aXplX3QKKyAgICAgICAgICAgIGltcG9ydCA6OiBvbXBfZGVwZW5kX2tpbmQKKyAgICAgICAg ICAgIGludGVnZXIoY19pbnQpIDo6IG9tcF90YXJnZXRfbWVtY3B5X2FzeW5jCisgICAgICAg ICAgICB0eXBlKGNfcHRyKSwgdmFsdWUgOjogZHN0LCBzcmMKKyAgICAgICAgICAgIGludGVn ZXIoY19zaXplX3QpLCB2YWx1ZSA6OiBsZW5ndGgsIGRzdF9vZmZzZXQsIHNyY19vZmZzZXQK KyAgICAgICAgICAgIGludGVnZXIoY19pbnQpLCB2YWx1ZSA6OiBkc3RfZGV2aWNlX251bSwg c3JjX2RldmljZV9udW0sICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkZXBvYmpfY291bnQKKyAgICAgICAgICAgIGludGVnZXIob21wX2RlcGVuZF9raW5kKSwg b3B0aW9uYWwgOjogZGVwb2JqX2xpc3QoKikKKyAgICAgICAgICBlbmQgZnVuY3Rpb24gb21w X3RhcmdldF9tZW1jcHlfYXN5bmMKKyAgICAgICAgZW5kIGludGVyZmFjZQorCisgICAgICAg IGludGVyZmFjZQogICAgICAgICAgIGZ1bmN0aW9uIG9tcF90YXJnZXRfbWVtY3B5X3JlY3Qg KGRzdCxzcmMsZWxlbWVudF9zaXplLCBudW1fZGltcywgJgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZvbHVtZSwgZHN0X29mZnNldHMsIHNyY19vZmZz ZXRzLCAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0 X2RpbWVuc2lvbnMsIHNyY19kaW1lbnNpb25zLCAmCkBAIC04MTYsNiArODMyLDMwIEBACiAg ICAgICAgIGVuZCBpbnRlcmZhY2UKIAogICAgICAgICBpbnRlcmZhY2UKKyAgICAgICAgICBm dW5jdGlvbiBvbXBfdGFyZ2V0X21lbWNweV9yZWN0X2FzeW5jIChkc3Qsc3JjLGVsZW1lbnRf c2l6ZSwgICAgICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBudW1fZGltcywgdm9sdW1lLCAgICAgICAgICYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3Rfb2Zmc2V0cywgc3JjX29mZnNl dHMsICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkc3RfZGltZW5zaW9ucywgICAgICAgICAgICYKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfZGltZW5zaW9ucywgICAgICAgICAgICYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3Rf ZGV2aWNlX251bSwgICAgICAgICAgICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzcmNfZGV2aWNlX251bSwgICAgICAgICAgICYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBvYmpfY291 bnQsICAgICAgICAgICAgICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkZXBvYmpfbGlzdCkgYmluZChjKQorICAgICAgICAgICAgdXNlLCBp bnRyaW5zaWMgOjogaXNvX2NfYmluZGluZywgb25seSA6IGNfcHRyLCBjX2ludCwgY19zaXpl X3QKKyAgICAgICAgICAgIGltcG9ydCA6OiBvbXBfZGVwZW5kX2tpbmQKKyAgICAgICAgICAg IGludGVnZXIoY19pbnQpIDo6IG9tcF90YXJnZXRfbWVtY3B5X3JlY3RfYXN5bmMKKyAgICAg ICAgICAgIHR5cGUoY19wdHIpLCB2YWx1ZSA6OiBkc3QsIHNyYworICAgICAgICAgICAgaW50 ZWdlcihjX3NpemVfdCksIHZhbHVlIDo6IGVsZW1lbnRfc2l6ZQorICAgICAgICAgICAgaW50 ZWdlcihjX2ludCksIHZhbHVlIDo6IG51bV9kaW1zLCBkc3RfZGV2aWNlX251bSwgc3JjX2Rl dmljZV9udW0sICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBv YmpfY291bnQKKyAgICAgICAgICAgIGludGVnZXIoY19zaXplX3QpLCBpbnRlbnQoaW4pIDo6 IHZvbHVtZSgqKSwgZHN0X29mZnNldHMoKiksICAmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzcmNfb2Zmc2V0cygqKSwgZHN0X2RpbWVuc2lvbnMo KiksICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNy Y19kaW1lbnNpb25zKCopCisgICAgICAgICAgICBpbnRlZ2VyKG9tcF9kZXBlbmRfa2luZCks IG9wdGlvbmFsIDo6IGRlcG9ial9saXN0KCopCisgICAgICAgICAgZW5kIGZ1bmN0aW9uIG9t cF90YXJnZXRfbWVtY3B5X3JlY3RfYXN5bmMKKyAgICAgICAgZW5kIGludGVyZmFjZQorCisg ICAgICAgIGludGVyZmFjZQogICAgICAgICAgIGZ1bmN0aW9uIG9tcF90YXJnZXRfYXNzb2Np YXRlX3B0ciAoaG9zdF9wdHIsIGRldmljZV9wdHIsIHNpemUsICYKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZV9vZmZzZXQsIGRldmljZV9u dW0pIGJpbmQoYykKICAgICAgICAgICAgIHVzZSwgaW50cmluc2ljIDo6IGlzb19jX2JpbmRp bmcsIG9ubHkgOiBjX3B0ciwgY19zaXplX3QsIGNfaW50CmRpZmYgLS1naXQgYS9saWJnb21w L29tcF9saWIuaC5pbiBiL2xpYmdvbXAvb21wX2xpYi5oLmluCmluZGV4IGZmODU3YTQuLmI1 NmYxYmIgMTAwNjQ0Ci0tLSBhL2xpYmdvbXAvb21wX2xpYi5oLmluCisrKyBiL2xpYmdvbXAv b21wX2xpYi5oLmluCkBAIC0zNzgsNiArMzc4LDIyIEBACiAgICAgICBlbmQgaW50ZXJmYWNl CiAKICAgICAgIGludGVyZmFjZQorICAgICAgICBmdW5jdGlvbiBvbXBfdGFyZ2V0X21lbWNw eV9hc3luYyAoZHN0LCBzcmMsIGxlbmd0aCwgZHN0X29mZnNldCwgICAgJgorICAgICAmICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX29mZnNldCwgZHN0X2RldmljZV9udW0s ICAgICAgICAgICAgJgorICAgICAmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Jj X2RldmljZV9udW0sIGRlcG9ial9jb3VudCwgICAgICAgICAgJgorICAgICAmICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZGVwb2JqX2xpc3QpIGJpbmQoYykKKyAgICAgICAgICB1 c2UsIGludHJpbnNpYyA6OiBpc29fY19iaW5kaW5nLCBvbmx5IDogY19wdHIsIGNfaW50LCBj X3NpemVfdAorICAgICAgICAgIGltcG9ydCA6OiBvbXBfZGVwZW5kX2tpbmQKKyAgICAgICAg ICBpbnRlZ2VyKGNfaW50KSA6OiBvbXBfdGFyZ2V0X21lbWNweV9hc3luYworICAgICAgICAg IHR5cGUoY19wdHIpLCB2YWx1ZSA6OiBkc3QsIHNyYworICAgICAgICAgIGludGVnZXIoY19z aXplX3QpLCB2YWx1ZSA6OiBsZW5ndGgsIGRzdF9vZmZzZXQsIHNyY19vZmZzZXQKKyAgICAg ICAgICBpbnRlZ2VyKGNfaW50KSwgdmFsdWUgOjogZHN0X2RldmljZV9udW0sIHNyY19kZXZp Y2VfbnVtCisgICAgICAgICAgaW50ZWdlcihjX2ludCksIHZhbHVlIDo6IGRlcG9ial9jb3Vu dAorICAgICAgICAgIGludGVnZXIob21wX2RlcGVuZF9raW5kKSwgb3B0aW9uYWwgOjogZGVw b2JqX2xpc3QoKikKKyAgICAgICAgZW5kIGZ1bmN0aW9uIG9tcF90YXJnZXRfbWVtY3B5X2Fz eW5jCisgICAgICBlbmQgaW50ZXJmYWNlCisKKyAgICAgIGludGVyZmFjZQogICAgICAgICBm dW5jdGlvbiBvbXBfdGFyZ2V0X21lbWNweV9yZWN0IChkc3Qsc3JjLGVsZW1lbnRfc2l6ZSwg bnVtX2RpbXMsICAgJgogICAgICAmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2b2x1bWUsIGRzdF9vZmZzZXRzLCAgICAgICAgICAgICAgJgogICAgICAmICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfb2Zmc2V0cywgZHN0X2RpbWVuc2lvbnMs ICAgICAgJgpAQCAtMzk3LDYgKzQxMywzMSBAQAogICAgICAgZW5kIGludGVyZmFjZQogCiAg ICAgICBpbnRlcmZhY2UKKyAgICAgICAgZnVuY3Rpb24gb21wX3RhcmdldF9tZW1jcHlfcmVj dF9hc3luYyAoZHN0LHNyYyxlbGVtZW50X3NpemUsICAgICAgICAmCisgICAgICYgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9kaW1zLCB2b2x1bWUsICAg ICAgICAgICAgJgorICAgICAmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkc3Rfb2Zmc2V0cywgc3JjX29mZnNldHMsICAgICYKKyAgICAgJiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0X2RpbWVuc2lvbnMsICAgICAgICAg ICAgICAmCisgICAgICYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNyY19kaW1lbnNpb25zLCAgICAgICAgICAgICAgJgorICAgICAmICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RfZGV2aWNlX251bSwgICAgICAgICAgICAg ICYKKyAgICAgJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Jj X2RldmljZV9udW0sICAgICAgICAgICAgICAmCisgICAgICYgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRlcG9ial9jb3VudCwgICAgICAgICAgICAgICAgJgor ICAgICAmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBvYmpf bGlzdCkgYmluZChjKQorICAgICAgICAgIHVzZSwgaW50cmluc2ljIDo6IGlzb19jX2JpbmRp bmcsIG9ubHkgOiBjX3B0ciwgY19pbnQsIGNfc2l6ZV90CisgICAgICAgICAgaW1wb3J0IDo6 IG9tcF9kZXBlbmRfa2luZAorICAgICAgICAgIGludGVnZXIoY19pbnQpIDo6IG9tcF90YXJn ZXRfbWVtY3B5X3JlY3RfYXN5bmMKKyAgICAgICAgICB0eXBlKGNfcHRyKSwgdmFsdWUgOjog ZHN0LCBzcmMKKyAgICAgICAgICBpbnRlZ2VyKGNfc2l6ZV90KSwgdmFsdWUgOjogZWxlbWVu dF9zaXplCisgICAgICAgICAgaW50ZWdlcihjX2ludCksIHZhbHVlIDo6IG51bV9kaW1zLCBk ZXBvYmpfY291bnQKKyAgICAgICAgICBpbnRlZ2VyKGNfaW50KSwgdmFsdWUgOjogZHN0X2Rl dmljZV9udW0sIHNyY19kZXZpY2VfbnVtCisgICAgICAgICAgaW50ZWdlcihjX3NpemVfdCks IGludGVudChpbikgOjogdm9sdW1lKCopLCBkc3Rfb2Zmc2V0cygqKQorICAgICAgICAgIGlu dGVnZXIoY19zaXplX3QpLCBpbnRlbnQoaW4pIDo6IHNyY19vZmZzZXRzKCopCisgICAgICAg ICAgaW50ZWdlcihjX3NpemVfdCksIGludGVudChpbikgOjogZHN0X2RpbWVuc2lvbnMoKikK KyAgICAgICAgICBpbnRlZ2VyKGNfc2l6ZV90KSwgaW50ZW50KGluKSA6OiBzcmNfZGltZW5z aW9ucygqKQorICAgICAgICAgIGludGVnZXIob21wX2RlcGVuZF9raW5kKSwgb3B0aW9uYWwg OjogZGVwb2JqX2xpc3QoKikKKyAgICAgICAgZW5kIGZ1bmN0aW9uIG9tcF90YXJnZXRfbWVt Y3B5X3JlY3RfYXN5bmMKKyAgICAgIGVuZCBpbnRlcmZhY2UKKworICAgICAgaW50ZXJmYWNl CiAgICAgICAgIGZ1bmN0aW9uIG9tcF90YXJnZXRfYXNzb2NpYXRlX3B0ciAoaG9zdF9wdHIs IGRldmljZV9wdHIsIHNpemUsICAgICAmCiAgICAgICYgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGV2aWNlX29mZnNldCwgZGV2aWNlX251bSkgICAgICAmCiAgICAg ICYgICAgICBiaW5kKGMpCmRpZmYgLS1naXQgYS9saWJnb21wL3RhcmdldC5jIGIvbGliZ29t cC90YXJnZXQuYwppbmRleCA5MDE3NDU4Li5hOThhYjE4IDEwMDY0NAotLS0gYS9saWJnb21w L3RhcmdldC5jCisrKyBiL2xpYmdvbXAvdGFyZ2V0LmMKQEAgLTMzNTUsNDAgKzMzNTUsNTAg QEAgb21wX3RhcmdldF9pc19wcmVzZW50IChjb25zdCB2b2lkICpwdHIsIGludCBkZXZpY2Vf bnVtKQogICByZXR1cm4gcmV0OwogfQogCi1pbnQKLW9tcF90YXJnZXRfbWVtY3B5ICh2b2lk ICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGxlbmd0aCwKLQkJICAgc2l6ZV90IGRz dF9vZmZzZXQsIHNpemVfdCBzcmNfb2Zmc2V0LCBpbnQgZHN0X2RldmljZV9udW0sCi0JCSAg IGludCBzcmNfZGV2aWNlX251bSkKK3N0YXRpYyBpbnQKK29tcF90YXJnZXRfbWVtY3B5X2No ZWNrICh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgaW50IGRzdF9kZXZpY2VfbnVtLAor CQkJIGludCBzcmNfZGV2aWNlX251bSwKKwkJCSBzdHJ1Y3QgZ29tcF9kZXZpY2VfZGVzY3Ig Kipkc3RfZGV2aWNlcCwKKwkJCSBzdHJ1Y3QgZ29tcF9kZXZpY2VfZGVzY3IgKipzcmNfZGV2 aWNlcCkKIHsKLSAgc3RydWN0IGdvbXBfZGV2aWNlX2Rlc2NyICpkc3RfZGV2aWNlcCA9IE5V TEwsICpzcmNfZGV2aWNlcCA9IE5VTEw7Ci0gIGJvb2wgcmV0OwotCiAgIGlmIChkc3RfZGV2 aWNlX251bSAhPSBnb21wX2dldF9udW1fZGV2aWNlcyAoKSkKICAgICB7CiAgICAgICBpZiAo ZHN0X2RldmljZV9udW0gPCAwKQogCXJldHVybiBFSU5WQUw7CiAKLSAgICAgIGRzdF9kZXZp Y2VwID0gcmVzb2x2ZV9kZXZpY2UgKGRzdF9kZXZpY2VfbnVtKTsKLSAgICAgIGlmIChkc3Rf ZGV2aWNlcCA9PSBOVUxMKQorICAgICAgKmRzdF9kZXZpY2VwID0gcmVzb2x2ZV9kZXZpY2Ug KGRzdF9kZXZpY2VfbnVtKTsKKyAgICAgIGlmICgqZHN0X2RldmljZXAgPT0gTlVMTCkKIAly ZXR1cm4gRUlOVkFMOwogCi0gICAgICBpZiAoIShkc3RfZGV2aWNlcC0+Y2FwYWJpbGl0aWVz ICYgR09NUF9PRkZMT0FEX0NBUF9PUEVOTVBfNDAwKQotCSAgfHwgZHN0X2RldmljZXAtPmNh cGFiaWxpdGllcyAmIEdPTVBfT0ZGTE9BRF9DQVBfU0hBUkVEX01FTSkKLQlkc3RfZGV2aWNl cCA9IE5VTEw7CisgICAgICBpZiAoISgoKmRzdF9kZXZpY2VwKS0+Y2FwYWJpbGl0aWVzICYg R09NUF9PRkZMT0FEX0NBUF9PUEVOTVBfNDAwKQorCSAgfHwgKCpkc3RfZGV2aWNlcCktPmNh cGFiaWxpdGllcyAmIEdPTVBfT0ZGTE9BRF9DQVBfU0hBUkVEX01FTSkKKwkqZHN0X2Rldmlj ZXAgPSBOVUxMOwogICAgIH0KKwogICBpZiAoc3JjX2RldmljZV9udW0gIT0gbnVtX2Rldmlj ZXNfb3Blbm1wKQogICAgIHsKICAgICAgIGlmIChzcmNfZGV2aWNlX251bSA8IDApCiAJcmV0 dXJuIEVJTlZBTDsKIAotICAgICAgc3JjX2RldmljZXAgPSByZXNvbHZlX2RldmljZSAoc3Jj X2RldmljZV9udW0pOwotICAgICAgaWYgKHNyY19kZXZpY2VwID09IE5VTEwpCisgICAgICAq c3JjX2RldmljZXAgPSByZXNvbHZlX2RldmljZSAoc3JjX2RldmljZV9udW0pOworICAgICAg aWYgKCpzcmNfZGV2aWNlcCA9PSBOVUxMKQogCXJldHVybiBFSU5WQUw7CiAKLSAgICAgIGlm ICghKHNyY19kZXZpY2VwLT5jYXBhYmlsaXRpZXMgJiBHT01QX09GRkxPQURfQ0FQX09QRU5N UF80MDApCi0JICB8fCBzcmNfZGV2aWNlcC0+Y2FwYWJpbGl0aWVzICYgR09NUF9PRkZMT0FE X0NBUF9TSEFSRURfTUVNKQotCXNyY19kZXZpY2VwID0gTlVMTDsKKyAgICAgIGlmICghKCgq c3JjX2RldmljZXApLT5jYXBhYmlsaXRpZXMgJiBHT01QX09GRkxPQURfQ0FQX09QRU5NUF80 MDApCisJICB8fCAoKnNyY19kZXZpY2VwKS0+Y2FwYWJpbGl0aWVzICYgR09NUF9PRkZMT0FE X0NBUF9TSEFSRURfTUVNKQorCSpzcmNfZGV2aWNlcCA9IE5VTEw7CiAgICAgfQorCisgIHJl dHVybiAwOworfQorCitzdGF0aWMgaW50CitvbXBfdGFyZ2V0X21lbWNweV9jb3B5ICh2b2lk ICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGxlbmd0aCwKKwkJCXNpemVfdCBkc3Rf b2Zmc2V0LCBzaXplX3Qgc3JjX29mZnNldCwKKwkJCXN0cnVjdCBnb21wX2RldmljZV9kZXNj ciAqZHN0X2RldmljZXAsCisJCQlzdHJ1Y3QgZ29tcF9kZXZpY2VfZGVzY3IgKnNyY19kZXZp Y2VwKQoreworICBib29sIHJldDsKICAgaWYgKHNyY19kZXZpY2VwID09IE5VTEwgJiYgZHN0 X2RldmljZXAgPT0gTlVMTCkKICAgICB7CiAgICAgICBtZW1jcHkgKChjaGFyICopIGRzdCAr IGRzdF9vZmZzZXQsIChjaGFyICopIHNyYyArIHNyY19vZmZzZXQsIGxlbmd0aCk7CkBAIC0z NDI0LDYgKzM0MzQsOTcgQEAgb21wX3RhcmdldF9tZW1jcHkgKHZvaWQgKmRzdCwgY29uc3Qg dm9pZCAqc3JjLCBzaXplX3QgbGVuZ3RoLAogICByZXR1cm4gRUlOVkFMOwogfQogCitpbnQK K29tcF90YXJnZXRfbWVtY3B5ICh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90 IGxlbmd0aCwgc2l6ZV90IGRzdF9vZmZzZXQsCisJCSAgIHNpemVfdCBzcmNfb2Zmc2V0LCBp bnQgZHN0X2RldmljZV9udW0sIGludCBzcmNfZGV2aWNlX251bSkKK3sKKyAgc3RydWN0IGdv bXBfZGV2aWNlX2Rlc2NyICpkc3RfZGV2aWNlcCA9IE5VTEwsICpzcmNfZGV2aWNlcCA9IE5V TEw7CisgIGludCByZXQ7CisKKyAgcmV0ID0gb21wX3RhcmdldF9tZW1jcHlfY2hlY2sgKGRz dCwgc3JjLCBkc3RfZGV2aWNlX251bSwgc3JjX2RldmljZV9udW0sCisJCQkJICZkc3RfZGV2 aWNlcCwgJnNyY19kZXZpY2VwKTsKKworICBpZiAocmV0KQorICAgIHJldHVybiByZXQ7CisK KyAgcmV0ID0gb21wX3RhcmdldF9tZW1jcHlfY29weSAoZHN0LCBzcmMsIGxlbmd0aCwgZHN0 X29mZnNldCwgc3JjX29mZnNldCwKKwkJCQlkc3RfZGV2aWNlcCwgc3JjX2RldmljZXApOwor CisgIHJldHVybiByZXQ7Cit9CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIHZvaWQgKmRzdDsK KyAgY29uc3Qgdm9pZCAqc3JjOworICBzaXplX3QgbGVuZ3RoOworICBzaXplX3QgZHN0X29m ZnNldDsKKyAgc2l6ZV90IHNyY19vZmZzZXQ7CisgIHN0cnVjdCBnb21wX2RldmljZV9kZXNj ciAqZHN0X2RldmljZXA7CisgIHN0cnVjdCBnb21wX2RldmljZV9kZXNjciAqc3JjX2Rldmlj ZXA7Cit9IG1lbWNweV90OworCit2b2lkCitvbXBfdGFyZ2V0X21lbWNweV9hc3luY19oZWxw ZXIgKHZvaWQgKmFyZ3MpCit7CisgIG1lbWNweV90ICphID0gYXJnczsKKyAgaW50IHJldCA9 IG9tcF90YXJnZXRfbWVtY3B5X2NvcHkgKGEtPmRzdCwgYS0+c3JjLCBhLT5sZW5ndGgsIGEt PmRzdF9vZmZzZXQsCisJCQkJICAgIGEtPnNyY19vZmZzZXQsIGEtPmRzdF9kZXZpY2VwLAor CQkJCSAgICBhLT5zcmNfZGV2aWNlcCk7CisgIGlmIChyZXQpCisgICAgZ29tcF9mYXRhbCAo ImFzeW5jaHJvbm91cyBtZW1jcHkgZmFpbGVkIik7Cit9CisKK2ludAorb21wX3RhcmdldF9t ZW1jcHlfYXN5bmMgKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuZ3Ro LAorCQkJIHNpemVfdCBkc3Rfb2Zmc2V0LCBzaXplX3Qgc3JjX29mZnNldCwKKwkJCSBpbnQg ZHN0X2RldmljZV9udW0sIGludCBzcmNfZGV2aWNlX251bSwKKwkJCSBpbnQgZGVwb2JqX2Nv dW50LCBvbXBfZGVwZW5kX3QgKmRlcG9ial9saXN0KQoreworICBzdHJ1Y3QgZ29tcF9kZXZp Y2VfZGVzY3IgKmRzdF9kZXZpY2VwID0gTlVMTCwgKnNyY19kZXZpY2VwID0gTlVMTDsKKwor ICBpbnQgY2hlY2sgPSBvbXBfdGFyZ2V0X21lbWNweV9jaGVjayAoZHN0LCBzcmMsIGRzdF9k ZXZpY2VfbnVtLCBzcmNfZGV2aWNlX251bSwKKwkJCQkgICAgICAgJmRzdF9kZXZpY2VwLCAm c3JjX2RldmljZXApOworICBpZiAoY2hlY2spCisgICAgcmV0dXJuIGNoZWNrOworCisgIHZv aWQgKCpmbikgKHZvaWQgKikgPSAmb21wX3RhcmdldF9tZW1jcHlfYXN5bmNfaGVscGVyOwor ICB2b2lkICpkYXRhID0gTlVMTDsKKyAgdm9pZCAoKmNweWZuKSAodm9pZCAqLCB2b2lkICop ID0gTlVMTDsKKyAgbG9uZyBhcmdfc2l6ZSA9IDA7CisgIGxvbmcgYXJnX2FsaWduID0gMDsK KyAgYm9vbCBpZl9jbGF1c2UgPSBmYWxzZTsKKyAgdW5zaWduZWQgZmxhZ3MgPSAwOworICBp bnQgcHJpb3JpdHlfYXJnID0gMDsKKyAgdm9pZCAqZGV0YWNoID0gTlVMTDsKKworICBtZW1j cHlfdCBzID0geworICAgIC5kc3QgPSBkc3QsCisgICAgLnNyYyA9IHNyYywKKyAgICAubGVu Z3RoID0gbGVuZ3RoLAorICAgIC5kc3Rfb2Zmc2V0ID0gZHN0X29mZnNldCwKKyAgICAuc3Jj X29mZnNldCA9IHNyY19vZmZzZXQsCisgICAgLmRzdF9kZXZpY2VwID0gZHN0X2RldmljZXAs CisgICAgLnNyY19kZXZpY2VwID0gc3JjX2RldmljZXAKKyAgfTsKKyAgZGF0YSA9ICZzOwor CisgIHZvaWQgKmRlcGVuZFtkZXBvYmpfY291bnQrNV07CisgIGRlcGVuZFswXSA9IDA7Cisg IGRlcGVuZFsxXSA9ICh2b2lkKikgKCh1aW50cHRyX3QpIGRlcG9ial9jb3VudCk7CisgIGRl cGVuZFsyXSA9IGRlcGVuZFszXSA9IGRlcGVuZFs0XSA9IDA7CisgIGZvciAoaW50IGkgPSAw OyBpIDwgZGVwb2JqX2NvdW50OyArK2kpCisgICAgZGVwZW5kW2krNV0gPSAmZGVwb2JqX2xp c3RbaV07CisKKyAgaWYgKGRlcG9ial9jb3VudCA+IDAgJiYgZGVwb2JqX2xpc3QgIT0gTlVM TCkKKyAgICBmbGFncyB8PSBHT01QX1RBU0tfRkxBR19ERVBFTkQ7CisKKyAgR09NUF90YXNr IChmbiwgZGF0YSwgY3B5Zm4sIGFyZ19zaXplLCBhcmdfYWxpZ24sIGlmX2NsYXVzZSwgZmxh Z3MsIGRlcGVuZCwKKwkgICAgIHByaW9yaXR5X2FyZywgZGV0YWNoKTsKKworICByZXR1cm4g MDsKK30KKwogc3RhdGljIGludAogb21wX3RhcmdldF9tZW1jcHlfcmVjdF93b3JrZXIgKHZv aWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgZWxlbWVudF9zaXplLAogCQkJICAg ICAgIGludCBudW1fZGltcywgY29uc3Qgc2l6ZV90ICp2b2x1bWUsCkBAIC0zNTAwLDUwICsz NjAxLDM2IEBAIG9tcF90YXJnZXRfbWVtY3B5X3JlY3Rfd29ya2VyICh2b2lkICpkc3QsIGNv bnN0IHZvaWQgKnNyYywgc2l6ZV90IGVsZW1lbnRfc2l6ZSwKICAgcmV0dXJuIDA7CiB9CiAK LWludAotb21wX3RhcmdldF9tZW1jcHlfcmVjdCAodm9pZCAqZHN0LCBjb25zdCB2b2lkICpz cmMsIHNpemVfdCBlbGVtZW50X3NpemUsCi0JCQlpbnQgbnVtX2RpbXMsIGNvbnN0IHNpemVf dCAqdm9sdW1lLAotCQkJY29uc3Qgc2l6ZV90ICpkc3Rfb2Zmc2V0cywKLQkJCWNvbnN0IHNp emVfdCAqc3JjX29mZnNldHMsCi0JCQljb25zdCBzaXplX3QgKmRzdF9kaW1lbnNpb25zLAot CQkJY29uc3Qgc2l6ZV90ICpzcmNfZGltZW5zaW9ucywKLQkJCWludCBkc3RfZGV2aWNlX251 bSwgaW50IHNyY19kZXZpY2VfbnVtKQorc3RhdGljIGludAorb21wX3RhcmdldF9tZW1jcHlf cmVjdF9jaGVjayAodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIGludCBkc3RfZGV2aWNl X251bSwKKwkJCSAgICAgIGludCBzcmNfZGV2aWNlX251bSwKKwkJCSAgICAgIHN0cnVjdCBn b21wX2RldmljZV9kZXNjciAqKmRzdF9kZXZpY2VwLAorCQkJICAgICAgc3RydWN0IGdvbXBf ZGV2aWNlX2Rlc2NyICoqc3JjX2RldmljZXApCiB7Ci0gIHN0cnVjdCBnb21wX2RldmljZV9k ZXNjciAqZHN0X2RldmljZXAgPSBOVUxMLCAqc3JjX2RldmljZXAgPSBOVUxMOwotCiAgIGlm ICghZHN0ICYmICFzcmMpCiAgICAgcmV0dXJuIElOVF9NQVg7CiAKLSAgaWYgKGRzdF9kZXZp Y2VfbnVtICE9IGdvbXBfZ2V0X251bV9kZXZpY2VzICgpKQotICAgIHsKLSAgICAgIGlmIChk c3RfZGV2aWNlX251bSA8IDApCi0JcmV0dXJuIEVJTlZBTDsKLQotICAgICAgZHN0X2Rldmlj ZXAgPSByZXNvbHZlX2RldmljZSAoZHN0X2RldmljZV9udW0pOwotICAgICAgaWYgKGRzdF9k ZXZpY2VwID09IE5VTEwpCi0JcmV0dXJuIEVJTlZBTDsKLQotICAgICAgaWYgKCEoZHN0X2Rl dmljZXAtPmNhcGFiaWxpdGllcyAmIEdPTVBfT0ZGTE9BRF9DQVBfT1BFTk1QXzQwMCkKLQkg IHx8IGRzdF9kZXZpY2VwLT5jYXBhYmlsaXRpZXMgJiBHT01QX09GRkxPQURfQ0FQX1NIQVJF RF9NRU0pCi0JZHN0X2RldmljZXAgPSBOVUxMOwotICAgIH0KLSAgaWYgKHNyY19kZXZpY2Vf bnVtICE9IG51bV9kZXZpY2VzX29wZW5tcCkKLSAgICB7Ci0gICAgICBpZiAoc3JjX2Rldmlj ZV9udW0gPCAwKQotCXJldHVybiBFSU5WQUw7Ci0KLSAgICAgIHNyY19kZXZpY2VwID0gcmVz b2x2ZV9kZXZpY2UgKHNyY19kZXZpY2VfbnVtKTsKLSAgICAgIGlmIChzcmNfZGV2aWNlcCA9 PSBOVUxMKQotCXJldHVybiBFSU5WQUw7Ci0KLSAgICAgIGlmICghKHNyY19kZXZpY2VwLT5j YXBhYmlsaXRpZXMgJiBHT01QX09GRkxPQURfQ0FQX09QRU5NUF80MDApCi0JICB8fCBzcmNf ZGV2aWNlcC0+Y2FwYWJpbGl0aWVzICYgR09NUF9PRkZMT0FEX0NBUF9TSEFSRURfTUVNKQot CXNyY19kZXZpY2VwID0gTlVMTDsKLSAgICB9CisgIGludCByZXQgPSBvbXBfdGFyZ2V0X21l bWNweV9jaGVjayAoZHN0LCBzcmMsIGRzdF9kZXZpY2VfbnVtLCBzcmNfZGV2aWNlX251bSwK KwkJCQkgICAgIGRzdF9kZXZpY2VwLCBzcmNfZGV2aWNlcCk7CisgIGlmIChyZXQpCisgICAg cmV0dXJuIHJldDsKIAotICBpZiAoc3JjX2RldmljZXAgIT0gTlVMTCAmJiBkc3RfZGV2aWNl cCAhPSBOVUxMICYmIHNyY19kZXZpY2VwICE9IGRzdF9kZXZpY2VwKQorICBpZiAoKnNyY19k ZXZpY2VwICE9IE5VTEwgJiYgKmRzdF9kZXZpY2VwICE9IE5VTEwgJiYgKnNyY19kZXZpY2Vw ICE9ICpkc3RfZGV2aWNlcCkKICAgICByZXR1cm4gRUlOVkFMOwogCisgIHJldHVybiAwOwor fQorCitzdGF0aWMgaW50CitvbXBfdGFyZ2V0X21lbWNweV9yZWN0X2NvcHkgKHZvaWQgKmRz dCwgY29uc3Qgdm9pZCAqc3JjLAorCQkJICAgICBzaXplX3QgZWxlbWVudF9zaXplLCBpbnQg bnVtX2RpbXMsCisJCQkgICAgIGNvbnN0IHNpemVfdCAqdm9sdW1lLCBjb25zdCBzaXplX3Qg KmRzdF9vZmZzZXRzLAorCQkJICAgICBjb25zdCBzaXplX3QgKnNyY19vZmZzZXRzLAorCQkJ ICAgICBjb25zdCBzaXplX3QgKmRzdF9kaW1lbnNpb25zLAorCQkJICAgICBjb25zdCBzaXpl X3QgKnNyY19kaW1lbnNpb25zLAorCQkJICAgICBzdHJ1Y3QgZ29tcF9kZXZpY2VfZGVzY3Ig KmRzdF9kZXZpY2VwLAorCQkJICAgICBzdHJ1Y3QgZ29tcF9kZXZpY2VfZGVzY3IgKnNyY19k ZXZpY2VwKQorewogICBpZiAoc3JjX2RldmljZXApCiAgICAgZ29tcF9tdXRleF9sb2NrICgm c3JjX2RldmljZXAtPmxvY2spOwogICBlbHNlIGlmIChkc3RfZGV2aWNlcCkKQEAgLTM1NTYs OSArMzY0MywxMjQgQEAgb21wX3RhcmdldF9tZW1jcHlfcmVjdCAodm9pZCAqZHN0LCBjb25z dCB2b2lkICpzcmMsIHNpemVfdCBlbGVtZW50X3NpemUsCiAgICAgZ29tcF9tdXRleF91bmxv Y2sgKCZzcmNfZGV2aWNlcC0+bG9jayk7CiAgIGVsc2UgaWYgKGRzdF9kZXZpY2VwKQogICAg IGdvbXBfbXV0ZXhfdW5sb2NrICgmZHN0X2RldmljZXAtPmxvY2spOworCisgIHJldHVybiBy ZXQ7Cit9CisKK2ludAorb21wX3RhcmdldF9tZW1jcHlfcmVjdCAodm9pZCAqZHN0LCBjb25z dCB2b2lkICpzcmMsIHNpemVfdCBlbGVtZW50X3NpemUsCisJCQlpbnQgbnVtX2RpbXMsIGNv bnN0IHNpemVfdCAqdm9sdW1lLAorCQkJY29uc3Qgc2l6ZV90ICpkc3Rfb2Zmc2V0cywKKwkJ CWNvbnN0IHNpemVfdCAqc3JjX29mZnNldHMsCisJCQljb25zdCBzaXplX3QgKmRzdF9kaW1l bnNpb25zLAorCQkJY29uc3Qgc2l6ZV90ICpzcmNfZGltZW5zaW9ucywKKwkJCWludCBkc3Rf ZGV2aWNlX251bSwgaW50IHNyY19kZXZpY2VfbnVtKQoreworICBzdHJ1Y3QgZ29tcF9kZXZp Y2VfZGVzY3IgKmRzdF9kZXZpY2VwID0gTlVMTCwgKnNyY19kZXZpY2VwID0gTlVMTDsKKwor ICBpbnQgY2hlY2sgPSBvbXBfdGFyZ2V0X21lbWNweV9yZWN0X2NoZWNrIChkc3QsIHNyYywg ZHN0X2RldmljZV9udW0sCisJCQkJCSAgICBzcmNfZGV2aWNlX251bSwgJmRzdF9kZXZpY2Vw LAorCQkJCQkgICAgJnNyY19kZXZpY2VwKTsKKworICBpZiAoY2hlY2spCisgICAgcmV0dXJu IGNoZWNrOworCisgIGludCByZXQgPSBvbXBfdGFyZ2V0X21lbWNweV9yZWN0X2NvcHkgKGRz dCwgc3JjLCBlbGVtZW50X3NpemUsIG51bV9kaW1zLAorCQkJCQkgdm9sdW1lLCBkc3Rfb2Zm c2V0cywgc3JjX29mZnNldHMsCisJCQkJCSBkc3RfZGltZW5zaW9ucywgc3JjX2RpbWVuc2lv bnMsCisJCQkJCSBkc3RfZGV2aWNlcCwgc3JjX2RldmljZXApOworCiAgIHJldHVybiByZXQ7 CiB9CiAKK3R5cGVkZWYgc3RydWN0Cit7CisgIHZvaWQgKmRzdDsKKyAgY29uc3Qgdm9pZCAq c3JjOworICBzaXplX3QgZWxlbWVudF9zaXplOworICBpbnQgbnVtX2RpbXM7CisgIGNvbnN0 IHNpemVfdCAqdm9sdW1lOworICBjb25zdCBzaXplX3QgKmRzdF9vZmZzZXRzOworICBjb25z dCBzaXplX3QgKnNyY19vZmZzZXRzOworICBjb25zdCBzaXplX3QgKmRzdF9kaW1lbnNpb25z OworICBjb25zdCBzaXplX3QgKnNyY19kaW1lbnNpb25zOworICBzdHJ1Y3QgZ29tcF9kZXZp Y2VfZGVzY3IgKmRzdF9kZXZpY2VwOworICBzdHJ1Y3QgZ29tcF9kZXZpY2VfZGVzY3IgKnNy Y19kZXZpY2VwOworfSBtZW1jcHlfcmVjdF90OworCit2b2lkCitvbXBfdGFyZ2V0X21lbWNw eV9yZWN0X2FzeW5jX2hlbHBlciAodm9pZCAqYXJncykKK3sKKyAgbWVtY3B5X3JlY3RfdCAq YSA9IGFyZ3M7CisgIGludCByZXQgPSBvbXBfdGFyZ2V0X21lbWNweV9yZWN0X2NvcHkgKGEt PmRzdCwgYS0+c3JjLCBhLT5lbGVtZW50X3NpemUsCisJCQkJCSBhLT5udW1fZGltcywgYS0+ dm9sdW1lLCBhLT5kc3Rfb2Zmc2V0cywKKwkJCQkJIGEtPnNyY19vZmZzZXRzLCBhLT5kc3Rf ZGltZW5zaW9ucywKKwkJCQkJIGEtPnNyY19kaW1lbnNpb25zLCBhLT5kc3RfZGV2aWNlcCwK KwkJCQkJIGEtPnNyY19kZXZpY2VwKTsKKyAgaWYgKHJldCkKKyAgICBnb21wX2ZhdGFsICgi YXN5bmNocm9ub3VzIG1lbWNweSBmYWlsZWQiKTsKK30KKworaW50CitvbXBfdGFyZ2V0X21l bWNweV9yZWN0X2FzeW5jICh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGVs ZW1lbnRfc2l6ZSwKKwkJCSAgICAgIGludCBudW1fZGltcywgY29uc3Qgc2l6ZV90ICp2b2x1 bWUsCisJCQkgICAgICBjb25zdCBzaXplX3QgKmRzdF9vZmZzZXRzLAorCQkJICAgICAgY29u c3Qgc2l6ZV90ICpzcmNfb2Zmc2V0cywKKwkJCSAgICAgIGNvbnN0IHNpemVfdCAqZHN0X2Rp bWVuc2lvbnMsCisJCQkgICAgICBjb25zdCBzaXplX3QgKnNyY19kaW1lbnNpb25zLAorCQkJ ICAgICAgaW50IGRzdF9kZXZpY2VfbnVtLCBpbnQgc3JjX2RldmljZV9udW0sCisJCQkgICAg ICBpbnQgZGVwb2JqX2NvdW50LCBvbXBfZGVwZW5kX3QgKmRlcG9ial9saXN0KQoreworICBz dHJ1Y3QgZ29tcF9kZXZpY2VfZGVzY3IgKmRzdF9kZXZpY2VwID0gTlVMTCwgKnNyY19kZXZp Y2VwID0gTlVMTDsKKworICBpbnQgY2hlY2sgPSBvbXBfdGFyZ2V0X21lbWNweV9yZWN0X2No ZWNrIChkc3QsIHNyYywgZHN0X2RldmljZV9udW0sCisJCQkJCSAgICBzcmNfZGV2aWNlX251 bSwgJmRzdF9kZXZpY2VwLAorCQkJCQkgICAgJnNyY19kZXZpY2VwKTsKKworICBpZiAoY2hl Y2spCisgICAgcmV0dXJuIGNoZWNrOworCisgIHZvaWQgKCpmbikgKHZvaWQgKikgPSAmb21w X3RhcmdldF9tZW1jcHlfcmVjdF9hc3luY19oZWxwZXI7CisgIHZvaWQgKmRhdGEgPSBOVUxM OworICB2b2lkICgqY3B5Zm4pICh2b2lkICosIHZvaWQgKikgPSBOVUxMOworICBsb25nIGFy Z19zaXplID0gMDsKKyAgbG9uZyBhcmdfYWxpZ24gPSAwOworICBib29sIGlmX2NsYXVzZSA9 IGZhbHNlOworICB1bnNpZ25lZCBmbGFncyA9IDA7CisgIGludCBwcmlvcml0eV9hcmcgPSAw OworICB2b2lkICpkZXRhY2ggPSBOVUxMOworCisgIG1lbWNweV9yZWN0X3QgcyA9IHsKKyAg ICAuZHN0ID0gZHN0LAorICAgIC5zcmMgPSBzcmMsCisgICAgLmVsZW1lbnRfc2l6ZSA9IGVs ZW1lbnRfc2l6ZSwKKyAgICAubnVtX2RpbXMgPSBudW1fZGltcywKKyAgICAudm9sdW1lID0g dm9sdW1lLAorICAgIC5kc3Rfb2Zmc2V0cyA9IGRzdF9vZmZzZXRzLAorICAgIC5zcmNfb2Zm c2V0cyA9IHNyY19vZmZzZXRzLAorICAgIC5kc3RfZGltZW5zaW9ucyA9IGRzdF9kaW1lbnNp b25zLAorICAgIC5zcmNfZGltZW5zaW9ucyA9IHNyY19kaW1lbnNpb25zLAorICAgIC5kc3Rf ZGV2aWNlcCA9IGRzdF9kZXZpY2VwLAorICAgIC5zcmNfZGV2aWNlcCA9IHNyY19kZXZpY2Vw CisgIH07CisgIGRhdGEgPSAmczsKKworICB2b2lkICpkZXBlbmRbZGVwb2JqX2NvdW50KzVd OworICBkZXBlbmRbMF0gPSAwOworICBkZXBlbmRbMV0gPSAodm9pZCopICgodWludHB0cl90 KSBkZXBvYmpfY291bnQpOworICBkZXBlbmRbMl0gPSBkZXBlbmRbM10gPSBkZXBlbmRbNF0g PSAwOworICBmb3IgKGludCBpID0gMDsgaSA8IGRlcG9ial9jb3VudDsgKytpKQorICAgIGRl cGVuZFtpKzVdID0gJmRlcG9ial9saXN0W2ldOworCisgIGlmIChkZXBvYmpfY291bnQgPiAw ICYmIGRlcG9ial9saXN0ICE9IE5VTEwpCisgICAgZmxhZ3MgfD0gR09NUF9UQVNLX0ZMQUdf REVQRU5EOworCisgIEdPTVBfdGFzayAoZm4sIGRhdGEsIGNweWZuLCBhcmdfc2l6ZSwgYXJn X2FsaWduLCBpZl9jbGF1c2UsIGZsYWdzLCBkZXBlbmQsCisJICAgICBwcmlvcml0eV9hcmcs IGRldGFjaCk7CisKKyAgcmV0dXJuIDA7Cit9CisKIGludAogb21wX3RhcmdldF9hc3NvY2lh dGVfcHRyIChjb25zdCB2b2lkICpob3N0X3B0ciwgY29uc3Qgdm9pZCAqZGV2aWNlX3B0ciwK IAkJCSAgc2l6ZV90IHNpemUsIHNpemVfdCBkZXZpY2Vfb2Zmc2V0LCBpbnQgZGV2aWNlX251 bSkKZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9u L3RhcmdldC1tZW1jcHktYXN5bmMtMS5jIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5j LWMrKy1jb21tb24vdGFyZ2V0LW1lbWNweS1hc3luYy0xLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uZjI1YzNiYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAv dGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3RhcmdldC1tZW1jcHktYXN5bmMtMS5j CkBAIC0wLDAgKzEsNDYgQEAKKy8qIFRlc3QgZm9yIG9tcF90YXJnZXRfbWVtY3B5X2FzeW5j IHdpdGhvdXQgY29uc2lkZXJpbmcgZGVwZW5kZW5jZSBvYmplY3RzLiAgKi8KKworI2luY2x1 ZGUgPG9tcC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitpbnQKK21haW4gKCkKK3sKKyAg aW50IGQgPSBvbXBfZ2V0X2RlZmF1bHRfZGV2aWNlICgpOworICBpbnQgaWQgPSBvbXBfZ2V0 X2luaXRpYWxfZGV2aWNlICgpOworICBpbnQgcVsxMjhdLCBpOworICB2b2lkICpwOworCisg IGlmIChkIDwgMCB8fCBkID49IG9tcF9nZXRfbnVtX2RldmljZXMgKCkpCisgICAgZCA9IGlk OworCisgIHAgPSBvbXBfdGFyZ2V0X2FsbG9jICgxMzAgKiBzaXplb2YgKGludCksIGQpOwor ICBpZiAocCA9PSBOVUxMKQorICAgIHJldHVybiAwOworCisgIGZvciAoaSA9IDA7IGkgPCAx Mjg7IGkrKykKKyAgICBxW2ldID0gaTsKKworICBpZiAob21wX3RhcmdldF9tZW1jcHlfYXN5 bmMgKHAsIHEsIDEyOCAqIHNpemVvZiAoaW50KSwgc2l6ZW9mIChpbnQpLCAwLCBkLCBpZCwK KyAgICAgIDAsIE5VTEwpKQorICAgIGFib3J0ICgpOworCisgICNwcmFnbWEgb21wIHRhc2t3 YWl0CisKKyAgaW50IHEyWzEyOF07CisgIGZvciAoaSA9IDA7IGkgPCAxMjg7ICsraSkKKyAg ICBxMltpXSA9IDA7CisgIGlmIChvbXBfdGFyZ2V0X21lbWNweV9hc3luYyAocTIsIHAsIDEy OCAqIHNpemVvZihpbnQpLCAwLCBzaXplb2YgKGludCksIGlkLCBkLAorICAgICAgMCwgTlVM TCkpCisgICAgYWJvcnQgKCk7CisKKyAgI3ByYWdtYSBvbXAgdGFza3dhaXQKKworICBmb3Ig KGkgPSAwOyBpIDwgMTI4OyArK2kpCisgICAgaWYgKHEyW2ldICE9IHFbaV0pCisgICAgICBh Ym9ydCAoKTsKKworICBvbXBfdGFyZ2V0X2ZyZWUgKHAsIGQpOworCisgIHJldHVybiAwOwor fQpkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24v dGFyZ2V0LW1lbWNweS1hc3luYy0yLmMgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMt YysrLWNvbW1vbi90YXJnZXQtbWVtY3B5LWFzeW5jLTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5kMTM1M2E1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90 ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24vdGFyZ2V0LW1lbWNweS1hc3luYy0yLmMK QEAgLTAsMCArMSw3NCBAQAorLyogVGVzdCBmb3Igb21wX3RhcmdldF9tZW1jcHlfYXN5bmMg Y29uc2lkZXJpbmcgZGVwZW5kZW5jZSBvYmplY3RzLiAgKi8KKworI2luY2x1ZGUgPG9tcC5o PgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitpbnQKK21haW4gKCkKK3sKKyAgaW50IGQgPSBv bXBfZ2V0X2RlZmF1bHRfZGV2aWNlICgpOworICBpbnQgaWQgPSBvbXBfZ2V0X2luaXRpYWxf ZGV2aWNlICgpOworICBpbnQgYVsxMjhdLCBiWzY0XSwgY1szMl0sIGVbMTZdLCBxWzEyOF0s IGk7CisgIHZvaWQgKnA7CisKKyAgaWYgKGQgPCAwIHx8IGQgPj0gb21wX2dldF9udW1fZGV2 aWNlcyAoKSkKKyAgICBkID0gaWQ7CisKKyAgcCA9IG9tcF90YXJnZXRfYWxsb2MgKDEzMCAq IHNpemVvZiAoaW50KSwgZCk7CisgIGlmIChwID09IE5VTEwpCisgICAgcmV0dXJuIDA7CisK KyAgZm9yIChpID0gMDsgaSA8IDEyODsgKytpKQorICAgIGFbaV0gPSBpICsgMTsKKyAgZm9y IChpID0gMDsgaSA8IDY0OyArK2kpCisgICAgYltpXSA9IGkgKyAyOworICBmb3IgKGkgPSAw OyBpIDwgMzI7IGkrKykKKyAgICBjW2ldID0gMDsKKyAgZm9yIChpID0gMDsgaSA8IDE2OyBp KyspCisgICAgZVtpXSA9IGkgKyA0OworCisgIG9tcF9kZXBlbmRfdCBvYmpbMl07CisKKyAg I3ByYWdtYSBvbXAgcGFyYWxsZWwgbnVtX3RocmVhZHMoNSkKKyAgI3ByYWdtYSBvbXAgc2lu Z2xlCisgIHsKKyAgICAjcHJhZ21hIG9tcCB0YXNrIGRlcGVuZChvdXQ6IHApCisgICAgb21w X3RhcmdldF9tZW1jcHkgKHAsIGEsIDEyOCAqIHNpemVvZiAoaW50KSwgMCwgMCwgZCwgaWQp OworCisgICAgI3ByYWdtYSBvbXAgdGFzayBkZXBlbmQoaW5vdXQ6IHApCisgICAgb21wX3Rh cmdldF9tZW1jcHkgKHAsIGIsIDY0ICogc2l6ZW9mIChpbnQpLCAwLCAwLCBkLCBpZCk7CisK KyAgICAjcHJhZ21hIG9tcCB0YXNrIGRlcGVuZChvdXQ6IGMpCisgICAgZm9yIChpID0gMDsg aSA8IDMyOyBpKyspCisgICAgICBjW2ldID0gaSArIDM7CisKKyAgICAjcHJhZ21hIG9tcCBk ZXBvYmoob2JqWzBdKSBkZXBlbmQoaW5vdXQ6IHApCisgICAgI3ByYWdtYSBvbXAgZGVwb2Jq KG9ialsxXSkgZGVwZW5kKGluOiBjKQorICAgIG9tcF90YXJnZXRfbWVtY3B5X2FzeW5jIChw LCBjLCAzMiAqIHNpemVvZiAoaW50KSwgMCwgMCwgZCwgaWQsIDIsIG9iaik7CisKKyAgICAj cHJhZ21hIG9tcCB0YXNrIGRlcGVuZChpbjogcCkKKyAgICBvbXBfdGFyZ2V0X21lbWNweSAo cCwgZSwgMTYgKiBzaXplb2YgKGludCksIDAsIDAsIGQsIGlkKTsKKyAgfQorCisgICNwcmFn bWEgb21wIHRhc2t3YWl0CisKKyAgZm9yIChpID0gMDsgaSA8IDEyODsgKytpKQorICAgIHFb aV0gPSAwOworICBvbXBfdGFyZ2V0X21lbWNweSAocSwgcCwgMTI4ICogc2l6ZW9mKGludCks IDAsIDAsIGlkLCBkKTsKKyAgZm9yIChpID0gMDsgaSA8IDE2OyArK2kpCisgICAgaWYgKHFb aV0gIT0gaSArIDQpCisgICAgICBhYm9ydCAoKTsKKyAgZm9yIChpID0gMTY7IGkgPCAzMjsg KytpKQorICAgIGlmIChxW2ldICE9IGkgKyAzKQorICAgICAgYWJvcnQgKCk7CisgIGZvciAo aSA9IDMyOyBpIDwgNjQ7ICsraSkKKyAgICBpZiAocVtpXSAhPSBpICsgMikKKyAgICAgIGFi b3J0ICgpOworICBmb3IgKGkgPSA2NDsgaSA8IDEyODsgKytpKQorICAgIGlmIChxW2ldICE9 IGkgKyAxKQorICAgICAgYWJvcnQgKCk7CisKKyAgb21wX3RhcmdldF9mcmVlIChwLCBkKTsK KworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdv bXAuYy1jKystY29tbW9uL3RhcmdldC1tZW1jcHktcmVjdC1hc3luYy0xLmMgYi9saWJnb21w L3Rlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1vbi90YXJnZXQtbWVtY3B5LXJlY3QtYXN5 bmMtMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NmJjZWIKLS0t IC9kZXYvbnVsbAorKysgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1v bi90YXJnZXQtbWVtY3B5LXJlY3QtYXN5bmMtMS5jCkBAIC0wLDAgKzEsNjggQEAKKy8qIFRl c3QgZm9yIG9tcF90YXJnZXRfbWVtY3B5X3JlY3RfYXN5bmMgd2l0aG91dCBjb25zaWRlcmlu ZyBkZXBlbmRlbmNlCisgICBvYmplY3RzLiAgKi8KKworI2luY2x1ZGUgPG9tcC5oPgorI2lu Y2x1ZGUgPHN0ZGxpYi5oPgorCisjZGVmaW5lIE5VTV9ESU1TIDMKKworaW50CittYWluICgp Cit7CisgIGludCBkID0gb21wX2dldF9kZWZhdWx0X2RldmljZSAoKTsKKyAgaW50IGlkID0g b21wX2dldF9pbml0aWFsX2RldmljZSAoKTsKKyAgaW50IHFbMTI4XSwgcTJbMTI4XSwgaTsK KyAgdm9pZCAqcDsKKworICBpZiAoZCA8IDAgfHwgZCA+PSBvbXBfZ2V0X251bV9kZXZpY2Vz ICgpKQorICAgIGQgPSBpZDsKKworICBwID0gb21wX3RhcmdldF9hbGxvYyAoMTMwICogc2l6 ZW9mIChpbnQpLCBkKTsKKyAgaWYgKHAgPT0gTlVMTCkKKyAgICByZXR1cm4gMDsKKworICBp ZiAob21wX3RhcmdldF9tZW1jcHlfcmVjdF9hc3luYyAoTlVMTCwgTlVMTCwgMCwgMCwgTlVM TCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkgICAgTlVMTCwgZCwgaWQsIDAsIE5VTEwpIDwg MworICAgICAgfHwgb21wX3RhcmdldF9tZW1jcHlfcmVjdF9hc3luYyAoTlVMTCwgTlVMTCwg MCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkgICAgICAgTlVMTCwgaWQsIGQs IDAsIE5VTEwpIDwgMworICAgICAgfHwgb21wX3RhcmdldF9tZW1jcHlfcmVjdF9hc3luYyAo TlVMTCwgTlVMTCwgMCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkgICAgICAg TlVMTCwgaWQsIGlkLCAwLCBOVUxMKSA8IDMpCisgICAgYWJvcnQgKCk7CisKKyAgZm9yIChp ID0gMDsgaSA8IDEyODsgaSsrKQorICAgIHFbaV0gPSAwOworICBpZiAob21wX3RhcmdldF9t ZW1jcHkgKHAsIHEsIDEyOCAqIHNpemVvZiAoaW50KSwgMCwgMCwgZCwgaWQpICE9IDApCisg ICAgYWJvcnQgKCk7CisKKyAgZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKQorICAgIHFbaV0g PSBpICsgMTsKKworICBzaXplX3Qgdm9sdW1lW05VTV9ESU1TXSA9IHsgMSwgMiwgMyB9Owor ICBzaXplX3QgZHN0X29mZnNldHNbTlVNX0RJTVNdID0geyAwLCAwLCAwIH07CisgIHNpemVf dCBzcmNfb2Zmc2V0c1tOVU1fRElNU10gPSB7IDAsIDAsIDAgfTsKKyAgc2l6ZV90IGRzdF9k aW1lbnNpb25zW05VTV9ESU1TXSA9IHsgMywgNCwgNSB9OworICBzaXplX3Qgc3JjX2RpbWVu c2lvbnNbTlVNX0RJTVNdID0geyAyLCAzLCA0IH07CisKKyAgaWYgKG9tcF90YXJnZXRfbWVt Y3B5X3JlY3RfYXN5bmMgKHAsIHEsIHNpemVvZiAoaW50KSwgTlVNX0RJTVMsIHZvbHVtZSwK KwkJCQkgICAgZHN0X29mZnNldHMsIHNyY19vZmZzZXRzLCBkc3RfZGltZW5zaW9ucywKKwkJ CQkgICAgc3JjX2RpbWVuc2lvbnMsIGQsIGlkLCAwLCBOVUxMKSAhPSAwKQorICAgIGFib3J0 ICgpOworCisgICNwcmFnbWEgb21wIHRhc2t3YWl0CisKKyAgZm9yIChpID0gMDsgaSA8IDEy ODsgaSsrKQorICAgIHEyW2ldID0gMDsKKyAgaWYgKG9tcF90YXJnZXRfbWVtY3B5IChxMiwg cCwgMTI4ICogc2l6ZW9mIChpbnQpLCAwLCAwLCBpZCwgZCkgIT0gMCkKKyAgICBhYm9ydCAo KTsKKworICAvKiBxMiBpcyBleHBlY3RlZCB0byBjb250YWluOiAxIDIgMyAwIDAgNSA2IDcg MCAwIC4uIDAgICovCisgIGlmIChxMlswXSAhPSAxIHx8IHEyWzFdICE9IDIgfHwgcTJbMl0g IT0zIHx8IHEyWzNdICE9IDAgfHwgcTJbNF0gIT0gMAorICAgICAgfHwgcTJbNV0gIT0gNSB8 fCBxMls2XSAhPSA2IHx8IHEyWzddICE9IDcpCisgICAgYWJvcnQgKCk7CisgIGZvciAoaSA9 IDg7IGkgPCAxMjg7ICsraSkKKyAgICBpZiAocTJbaV0gIT0gMCkKKyAgICAgIGFib3J0ICgp OworCisgIG9tcF90YXJnZXRfZnJlZSAocCwgZCk7CisgIHJldHVybiAwOworfQpkaWZmIC0t Z2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24vdGFyZ2V0LW1l bWNweS1yZWN0LWFzeW5jLTIuYyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy1jKyst Y29tbW9uL3RhcmdldC1tZW1jcHktcmVjdC1hc3luYy0yLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uNGE1ZDgwZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAv dGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3RhcmdldC1tZW1jcHktcmVjdC1hc3lu Yy0yLmMKQEAgLTAsMCArMSw5MSBAQAorLyogVGVzdCBmb3Igb21wX3RhcmdldF9tZW1jcHlf cmVjdF9hc3luYyBjb25zaWRlcmluZyBkZXBlbmRlbmNlIG9iamVjdHMuICAqLworCisjaW5j bHVkZSA8b21wLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNkZWZpbmUgTlVNX0RJTVMg MworCitpbnQKK21haW4gKCkKK3sKKyAgaW50IGQgPSBvbXBfZ2V0X2RlZmF1bHRfZGV2aWNl ICgpOworICBpbnQgaWQgPSBvbXBfZ2V0X2luaXRpYWxfZGV2aWNlICgpOworICBpbnQgYVsx MjhdLCBiWzY0XSwgY1sxMjhdLCBlWzE2XSwgcVsxMjhdLCBpOworICB2b2lkICpwOworCisg IGlmIChkIDwgMCB8fCBkID49IG9tcF9nZXRfbnVtX2RldmljZXMgKCkpCisgICAgZCA9IGlk OworCisgIHAgPSBvbXBfdGFyZ2V0X2FsbG9jICgxMzAgKiBzaXplb2YgKGludCksIGQpOwor ICBpZiAocCA9PSBOVUxMKQorICAgIHJldHVybiAwOworCisgIGZvciAoaSA9IDA7IGkgPCAx Mjg7IGkrKykKKyAgICBxW2ldID0gMDsKKyAgaWYgKG9tcF90YXJnZXRfbWVtY3B5IChwLCBx LCAxMjggKiBzaXplb2YgKGludCksIDAsIDAsIGQsIGlkKSAhPSAwKQorICAgIGFib3J0ICgp OworCisgIHNpemVfdCB2b2x1bWVbTlVNX0RJTVNdID0geyAyLCAyLCAzIH07CisgIHNpemVf dCBkc3Rfb2Zmc2V0c1tOVU1fRElNU10gPSB7IDAsIDAsIDAgfTsKKyAgc2l6ZV90IHNyY19v ZmZzZXRzW05VTV9ESU1TXSA9IHsgMCwgMCwgMCB9OworICBzaXplX3QgZHN0X2RpbWVuc2lv bnNbTlVNX0RJTVNdID0geyAzLCA0LCA1IH07CisgIHNpemVfdCBzcmNfZGltZW5zaW9uc1tO VU1fRElNU10gPSB7IDIsIDMsIDQgfTsKKworICBmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKysp CisgICAgYVtpXSA9IDQyOworICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykKKyAgICBiW2ld ID0gMjQ7CisgIGZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykKKyAgICBjW2ldID0gMDsKKyAg Zm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisgICAgZVtpXSA9IDc3OworCisgIG9tcF9kZXBl bmRfdCBvYmpbMl07CisKKyAgI3ByYWdtYSBvbXAgcGFyYWxsZWwgbnVtX3RocmVhZHMoNSkK KyAgI3ByYWdtYSBvbXAgc2luZ2xlCisgIHsKKyAgICAjcHJhZ21hIG9tcCB0YXNrIGRlcGVu ZCAob3V0OiBwKQorICAgIG9tcF90YXJnZXRfbWVtY3B5IChwLCBhLCAxMjggKiBzaXplb2Yg KGludCksIDAsIDAsIGQsIGlkKTsKKworICAgICNwcmFnbWEgb21wIHRhc2sgZGVwZW5kKGlu b3V0OiBwKQorICAgIG9tcF90YXJnZXRfbWVtY3B5IChwLCBiLCA2NCAqIHNpemVvZiAoaW50 KSwgMCwgMCwgZCwgaWQpOworCisgICAgI3ByYWdtYSBvbXAgdGFzayBkZXBlbmQob3V0OiBj KQorICAgIGZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykKKyAgICAgIGNbaV0gPSBpICsgMTsK KworICAgICNwcmFnbWEgb21wIGRlcG9iaihvYmpbMF0pIGRlcGVuZChpbm91dDogcCkKKyAg ICAjcHJhZ21hIG9tcCBkZXBvYmoob2JqWzFdKSBkZXBlbmQoaW46IGMpCisKKyAgICAvKiAg VGhpcyBwcm9kdWNlczogMSAyIDMgLSAtIDUgNiA3IC0gLSBhdCBwb3NpdGlvbnMgMC4uOSBh bmQKKwkJICAgICAgIDEzIDE0IDE1IC0gLSAxNyAxOCAxOSAtIC0gYXQgcG9zaXRpb25zIDIw Li4yOS4gICovCisgICAgb21wX3RhcmdldF9tZW1jcHlfcmVjdF9hc3luYyAocCwgYywgc2l6 ZW9mIChpbnQpLCBOVU1fRElNUywgdm9sdW1lLAorCQkJCSAgZHN0X29mZnNldHMsIHNyY19v ZmZzZXRzLCBkc3RfZGltZW5zaW9ucywKKwkJCQkgIHNyY19kaW1lbnNpb25zLCBkLCBpZCwg Miwgb2JqKTsKKworICAgICNwcmFnbWEgb21wIHRhc2sgZGVwZW5kKGluOiBwKQorICAgIG9t cF90YXJnZXRfbWVtY3B5IChwLCBlLCAxNiAqIHNpemVvZiAoaW50KSwgMCwgMCwgZCwgaWQp OworICB9CisKKyAgI3ByYWdtYSBvbXAgdGFza3dhaXQKKworICBpZiAob21wX3RhcmdldF9t ZW1jcHkgKHEsIHAsIDEyOCAqIHNpemVvZihpbnQpLCAwLCAwLCBpZCwgZCkgIT0gMCkKKyAg ICBhYm9ydCAoKTsKKworICBmb3IgKGkgPSAwOyBpIDwgMTY7ICsraSkKKyAgICBpZiAocVtp XSAhPSA3NykKKyAgICAgIGFib3J0ICgpOworICBpZiAocVsyMF0gIT0gMTMgfHwgcVsyMV0g IT0gMTQgfHwgcVsyMl0gIT0gMTUgfHwgcVsyNV0gIT0gMTcgfHwgcVsyNl0gIT0gMTgKKyAg ICAgIHx8IHFbMjddICE9IDE5KQorICAgIGFib3J0ICgpOworICBmb3IgKGkgPSAyODsgaSA8 IDY0OyArK2kpCisgICAgaWYgKHFbaV0gIT0gMjQpCisgICAgICBhYm9ydCAoKTsKKyAgZm9y IChpID0gNjQ7IGkgPCAxMjg7ICsraSkKKyAgICBpZiAocVtpXSAhPSA0MikKKyAgICAgIGFi b3J0ICgpOworCisgIG9tcF90YXJnZXRfZnJlZSAocCwgZCk7CisgIHJldHVybiAwOworfQpk aWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC1t ZW1jcHktYXN5bmMtMS5mOTAgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4v dGFyZ2V0LW1lbWNweS1hc3luYy0xLmY5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi40Njc5ZmQyCi0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUv bGliZ29tcC5mb3J0cmFuL3RhcmdldC1tZW1jcHktYXN5bmMtMS5mOTAKQEAgLTAsMCArMSw0 MiBAQAorISBUZXN0IGZvciBvbXBfdGFyZ2V0X21lbWNweV9hc3luYyB3aXRob3V0IGNvbnNp ZGVyaW5nIGRlcGVuZGVuY2Ugb2JqZWN0cy4KKworcHJvZ3JhbSBtYWluCisgIHVzZSBvbXBf bGliCisgIHVzZSBpc29fY19iaW5kaW5nCisgIGltcGxpY2l0IG5vbmUgKGV4dGVybmFsLCB0 eXBlKQorICBpbnRlZ2VyIDo6IGQsIGlkLCBpLCBqCisgIGludGVnZXIsIHRhcmdldCA6OiBx KDA6MTI3KSwgcTIoMDoxMjcpCisgIHR5cGUoY19wdHIpIDo6IHAKKyAgaW50ZWdlcihvbXBf ZGVwZW5kX2tpbmQpIDo6IG9iaigxOjApCisKKyAgZCA9IG9tcF9nZXRfZGVmYXVsdF9kZXZp Y2UgKCkKKyAgaWQgPSBvbXBfZ2V0X2luaXRpYWxfZGV2aWNlICgpCisKKyAgaWYgKGQgPCAw IC5vci4gZCA+PSBvbXBfZ2V0X251bV9kZXZpY2VzICgpKSAmCisgICAgZCA9IGlkCisKKyAg cCA9IG9tcF90YXJnZXRfYWxsb2MgKDEzMCAqIGNfc2l6ZW9mIChxKSwgZCkKKyAgaWYgKC5u b3QuIGNfYXNzb2NpYXRlZCAocCkpICYKKyAgICBzdG9wIDAgICEgb2theQorCisgIHEgPSBb KGksIGkgPSAwLCAxMjcpXQorICBpZiAob21wX3RhcmdldF9tZW1jcHlfYXN5bmMgKHAsIGNf bG9jIChxKSwgMTI4ICogc2l6ZW9mIChxKDApKSwgMF9jX3NpemVfdCwgJgorICAgICAgMF9j X3NpemVfdCwgZCwgaWQsIDAsIG9iaikgLz0gMCkgJgorICAgIHN0b3AgMQorCisgICEkb21w IHRhc2t3YWl0CisKKyAgcTIgPSBbKDAsIGkgPSAwLCAxMjcpXQorICBpZiAob21wX3Rhcmdl dF9tZW1jcHlfYXN5bmMgKGNfbG9jIChxMiksIHAsIDEyOCAqIHNpemVvZiAocTIoMCkpLCAw X2Nfc2l6ZV90LCYKKyAgICAgIDBfY19zaXplX3QsIGlkLCBkLCAwLCBvYmopIC89IDApICYK KyAgICBzdG9wIDIKKworICAhJG9tcCB0YXNrd2FpdAorCisgIGRvIGogPSAwLCAxMjcKKyAg ICBpZiAocShqKSAvPSBxMihqKSkgJgorICAgICAgc3RvcCAzCisgIGVuZCBkbworCisgIGNh bGwgb21wX3RhcmdldF9mcmVlIChwLCBkKQorZW5kIHByb2dyYW0gbWFpbgpkaWZmIC0tZ2l0 IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC1tZW1jcHktYXN5 bmMtMi5mOTAgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFyZ2V0LW1l bWNweS1hc3luYy0yLmY5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4y YWE0ODJhCi0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5m b3J0cmFuL3RhcmdldC1tZW1jcHktYXN5bmMtMi5mOTAKQEAgLTAsMCArMSw5MSBAQAorISBU ZXN0IGZvciBvbXBfdGFyZ2V0X21lbWNweV9hc3luYyBjb25zaWRlcmluZyBkZXBlbmRlbmNl IG9iamVjdHMuCisKK3Byb2dyYW0gbWFpbgorICB1c2Ugb21wX2xpYgorICB1c2UgaXNvX2Nf YmluZGluZworICBpbXBsaWNpdCBub25lIChleHRlcm5hbCwgdHlwZSkKKyAgaW50ZWdlciA6 OiBkLCBpZCwgaSwgagorICBpbnRlZ2VyLCB0YXJnZXQgOjogYSgwOjEyNyksIGIoMDo2Myks IGMoMDozMSksIGUoMDoxNSksIHEoMDoxMjcpCisgIHR5cGUoY19wdHIpIDo6IHAKKyAgaW50 ZWdlcihvbXBfZGVwZW5kX2tpbmQpIDo6IG9iaigwOjEpCisKKyAgZCA9IG9tcF9nZXRfZGVm YXVsdF9kZXZpY2UgKCkKKyAgaWQgPSBvbXBfZ2V0X2luaXRpYWxfZGV2aWNlICgpCisKKyAg aWYgKGQgPCAwIC5vci4gZCA+PSBvbXBfZ2V0X251bV9kZXZpY2VzICgpKSAmCisgICAgZCA9 IGlkCisKKyAgcCA9IG9tcF90YXJnZXRfYWxsb2MgKDEzMCAqIGNfc2l6ZW9mIChxKSwgZCkK KyAgaWYgKC5ub3QuIGNfYXNzb2NpYXRlZCAocCkpICYKKyAgICBzdG9wIDAgICEgb2theQor CisgIGEgPSBbKGkgKyAxLCBpID0gMCwgMTI3KV0KKyAgYiA9IFsoaSArIDIsIGkgPSAwLCA2 MyldCisgIGMgPSBbKDAsIGkgPSAwLCAzMSldCisgIGUgPSBbKGkgKyA0LCBpID0gMCwgMTUp XQorCisgICEkb21wIHBhcmFsbGVsIG51bV90aHJlYWRzKDUpCisgICEkb21wIHNpbmdsZQor CisgICAgISRvbXAgdGFzayBkZXBlbmQob3V0OiBwKQorICAgIGlmIChvbXBfdGFyZ2V0X21l bWNweSAocCwgY19sb2MgKGEpLCAxMjggKiBzaXplb2YgKGEoMCkpLCAwX2Nfc2l6ZV90LCAm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAwX2Nfc2l6ZV90LCBkLCBpZCkgLz0gMCkg JgorICAgICAgc3RvcCAxCisgICAgISRvbXAgZW5kIHRhc2sKKworICAgICEkb21wIHRhc2sg ZGVwZW5kKGlub3V0OiBwKQorICAgIGlmIChvbXBfdGFyZ2V0X21lbWNweSAocCwgY19sb2Mg KGIpLCA2NCAqIHNpemVvZiAoYigwKSksIDBfY19zaXplX3QsICYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIDBfY19zaXplX3QsIGQsIGlkKSAvPSAwKSAmCisgICAgICBzdG9wIDIK KyAgICAhJG9tcCBlbmQgdGFzaworCisgICAgISRvbXAgdGFzayBkZXBlbmQob3V0OiBjKQor ICAgIGRvIGogPSAwLCAzMQorICAgICAgYyhqKSA9IGogKyAzCisgICAgZW5kIGRvCisgICAg ISRvbXAgZW5kIHRhc2sKKworICAgICEkb21wIGRlcG9iaihvYmooMCkpIGRlcGVuZChpbm91 dDogcCkKKyAgICAhJG9tcCBkZXBvYmoob2JqKDEpKSBkZXBlbmQoaW46IGMpCisgICAgaWYg KG9tcF90YXJnZXRfbWVtY3B5X2FzeW5jIChwLCBjX2xvYyAoYyksIDMyICogc2l6ZW9mIChj KDApKSwgMF9jX3NpemVfdCwgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MF9jX3NpemVfdCwgZCwgaWQsIDIsIG9iaikgLz0gMCkgJgorICAgICAgc3RvcCAzCisKKyAg ICAhJG9tcCB0YXNrIGRlcGVuZChpbjogcCkKKyAgICBpZiAob21wX3RhcmdldF9tZW1jcHkg KHAsIGNfbG9jIChlKSwgMTYgKiBzaXplb2YgKGUoMCkpLCAwX2Nfc2l6ZV90LCAmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAwX2Nfc2l6ZV90LCBkLCBpZCkgLz0gMCkgJgorICAg ICAgc3RvcCA0CisgICAgISRvbXAgZW5kIHRhc2sKKworICAhJG9tcCBlbmQgc2luZ2xlCisg ICEkb21wIGVuZCBwYXJhbGxlbAorCisgICEkb21wIHRhc2t3YWl0CisKKyAgcSA9IFsoMCwg aSA9IDAsIDEyNyldCisgIGlmIChvbXBfdGFyZ2V0X21lbWNweSAoY19sb2MgKHEpLCBwLCAx MjggKiBzaXplb2YgKHEoMCkpLCAwX2Nfc2l6ZV90LCAmCisgICAgICAgICAgICAgICAgICAg ICAgICAgMF9jX3NpemVfdCwgaWQsIGQpIC89IDApICYKKyAgICBzdG9wIDUKKworICBkbyBq ID0gMCwgMTUKKyAgICBpZiAocShqKSAvPSBqKzQpICYKKyAgICAgIHN0b3AgMTAKKyAgZW5k IGRvCisKKyAgZG8gaiA9IDE2LCAzMQorICAgIGlmIChxKGopIC89IGorMykgJgorICAgICAg c3RvcCAxMQorICBlbmQgZG8KKworICBkbyBqID0gMzIsIDYzCisgICAgaWYgKHEoaikgLz0g aisyKSAmCisgICAgICBzdG9wIDEyCisgIGVuZCBkbworCisgIGRvIGogPSA2NCwgMTI3Cisg ICAgaWYgKHEoaikgLz0gaisxKSAmCisgICAgICBzdG9wIDEzCisgIGVuZCBkbworCisgIGNh bGwgb21wX3RhcmdldF9mcmVlIChwLCBkKQorZW5kIHByb2dyYW0gbWFpbgpkaWZmIC0tZ2l0 IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC1tZW1jcHktcmVj dC1hc3luYy0xLmY5MCBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXJn ZXQtbWVtY3B5LXJlY3QtYXN5bmMtMS5mOTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uYzhjODdjNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRl L2xpYmdvbXAuZm9ydHJhbi90YXJnZXQtbWVtY3B5LXJlY3QtYXN5bmMtMS5mOTAKQEAgLTAs MCArMSw4NiBAQAorISBUZXN0IGZvciBvbXBfdGFyZ2V0X21lbWNweV9yZWN0X2FzeW5jIHdp dGhvdXQgY29uc2lkZXJpbmcgZGVwZW5kZW5jZSBvYmplY3RzLgorCitwcm9ncmFtIG1haW4K KyAgdXNlIG9tcF9saWIKKyAgdXNlIGlzb19jX2JpbmRpbmcKKyAgaW1wbGljaXQgbm9uZSAo ZXh0ZXJuYWwsIHR5cGUpCisgIGludGVnZXIgOjogZCwgaWQsIGksIGoKKyAgaW50ZWdlciwg dGFyZ2V0IDo6IHEoMDoxMjcpLCBxMigwOjEyNykKKyAgdHlwZShjX3B0cikgOjogcAorICBp bnRlZ2VyKG9tcF9kZXBlbmRfa2luZCkgOjogb2JqKDE6MCkKKworICBpbnRlZ2VyKGtpbmQ9 Y19zaXplX3QpIDo6IHZvbHVtZSgwOjIpCisgIGludGVnZXIoa2luZD1jX3NpemVfdCkgOjog ZHN0X29mZnNldHMoMDoyKQorICBpbnRlZ2VyKGtpbmQ9Y19zaXplX3QpIDo6IHNyY19vZmZz ZXRzKDA6MikKKyAgaW50ZWdlcihraW5kPWNfc2l6ZV90KSA6OiBkc3RfZGltZW5zaW9ucygw OjIpCisgIGludGVnZXIoa2luZD1jX3NpemVfdCkgOjogc3JjX2RpbWVuc2lvbnMoMDoyKQor ICBpbnRlZ2VyKGtpbmQ9Y19zaXplX3QpIDo6IGVtcHR5KDE6MCkKKworICBkID0gb21wX2dl dF9kZWZhdWx0X2RldmljZSAoKQorICBpZCA9IG9tcF9nZXRfaW5pdGlhbF9kZXZpY2UgKCkK KworICBpZiAoZCA8IDAgLm9yLiBkID49IG9tcF9nZXRfbnVtX2RldmljZXMgKCkpICYKKyAg ICBkID0gaWQKKworICBwID0gb21wX3RhcmdldF9hbGxvYyAoMTMwICogY19zaXplb2YgKHEp LCBkKQorICBpZiAoLm5vdC4gY19hc3NvY2lhdGVkIChwKSkgJgorICAgIHN0b3AgMCAgISBv a2F5CisKKyAgaWYgKG9tcF90YXJnZXRfbWVtY3B5X3JlY3RfYXN5bmMgKENfTlVMTF9QVFIs IENfTlVMTF9QVFIsIDBfY19zaXplX3QsIDAsICYKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGVtcHR5LCBlbXB0eSwgZW1wdHksIGVtcHR5LCAgZW1wdHksIGQsIGlk LCAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBvYmopIDwgMyAm CisgICAgIC5vci4gb21wX3RhcmdldF9tZW1jcHlfcmVjdF9hc3luYyAoQ19OVUxMX1BUUiwg Q19OVUxMX1BUUiwgMF9jX3NpemVfdCwgMCwgJgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGVtcHR5LCBlbXB0eSwgZW1wdHksIGVtcHR5LCBlbXB0eSwgJgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkLCBkLCAwLCBvYmop IDwgMyAmCisgICAgIC5vci4gb21wX3RhcmdldF9tZW1jcHlfcmVjdF9hc3luYyAoQ19OVUxM X1BUUiwgQ19OVUxMX1BUUiwgMF9jX3NpemVfdCwgMCwgJgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGVtcHR5LCBlbXB0eSwgZW1wdHksIGVtcHR5LCBlbXB0 eSwgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkLCBpZCwg MCwgb2JqKSA8IDMpICYKKyAgICBzdG9wIDEKKworICBxID0gWygwLCBpID0gMCwgMTI3KV0K KyAgaWYgKG9tcF90YXJnZXRfbWVtY3B5IChwLCBjX2xvYyAocSksIDEyOCAqIHNpemVvZiAo cSgwKSksIDBfY19zaXplX3QsICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAwX2Nfc2l6 ZV90LCBkLCBpZCkgLz0gMCkgJgorICAgIHN0b3AgMgorCisgIHEgPSBbKGkrMSwgaSA9IDAs IDEyNyldCisKKyAgdm9sdW1lKDIpID0gMworICB2b2x1bWUoMSkgPSAyCisgIHZvbHVtZSgw KSA9IDEKKyAgZHN0X29mZnNldHMoMikgPSAwCisgIGRzdF9vZmZzZXRzKDEpID0gMAorICBk c3Rfb2Zmc2V0cygwKSA9IDAKKyAgc3JjX29mZnNldHMoMikgPSAwCisgIHNyY19vZmZzZXRz KDEpID0gMAorICBzcmNfb2Zmc2V0cygwKSA9IDAKKyAgZHN0X2RpbWVuc2lvbnMoMikgPSA1 CisgIGRzdF9kaW1lbnNpb25zKDEpID0gNAorICBkc3RfZGltZW5zaW9ucygwKSA9IDMKKyAg c3JjX2RpbWVuc2lvbnMoMikgPSA0CisgIHNyY19kaW1lbnNpb25zKDEpID0gMworICBzcmNf ZGltZW5zaW9ucygwKSA9IDIKKworICBpZiAob21wX3RhcmdldF9tZW1jcHlfcmVjdF9hc3lu YyAocCwgY19sb2MgKHEpLCBzaXplb2YgKHEoMCkpLCAzLCB2b2x1bWUsICYKKyAgICAgIGRz dF9vZmZzZXRzLCBzcmNfb2Zmc2V0cywgZHN0X2RpbWVuc2lvbnMsIHNyY19kaW1lbnNpb25z LCBkLCBpZCwgMCwgJgorICAgICAgb2JqKSAvPSAwKSAmCisgICAgc3RvcCAzCisKKyAgISRv bXAgdGFza3dhaXQKKworICBxMiA9IFsoMCwgaSA9IDAsIDEyNyldCisgIGlmIChvbXBfdGFy Z2V0X21lbWNweSAoY19sb2MgKHEyKSwgcCwgMTI4ICogc2l6ZW9mIChxMigwKSksIDBfY19z aXplX3QsICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAwX2Nfc2l6ZV90LCBpZCwgZCkg Lz0gMCkgJgorICAgIHN0b3AgNAorCisgICEgcTIgaXMgZXhwZWN0ZWQgdG8gY29udGFpbjog MSAyIDMgMCAwIDUgNiA3IDAgMCAuLiAwCisgIGlmIChxMigwKSAvPSAxIC5vci4gcTIoMSkg Lz0gMiAub3IuIHEyKDIpIC89IDMgLm9yLiBxMigzKSAvPSAwICYKKyAgICAgIC5vci4gcTIo NCkgLz0gMCAub3IuIHEyKDUpIC89IDUgLm9yLiBxMig2KSAvPSA2IC5vci4gcTIoNykgLz0g NykgJgorICAgIHN0b3AgNQorCisgIGRvIGogPSA4LCAxMjcKKyAgICBpZiAocTIoaikgLz0g MCkgJgorICAgICAgc3RvcCA2CisgIGVuZCBkbworCisgIGNhbGwgb21wX3RhcmdldF9mcmVl IChwLCBkKQorZW5kIHByb2dyYW0gbWFpbgpkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3Vp dGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC1tZW1jcHktcmVjdC1hc3luYy0yLmY5MCBiL2xp YmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXJnZXQtbWVtY3B5LXJlY3QtYXN5 bmMtMi5mOTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBiYzVmZgot LS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90 YXJnZXQtbWVtY3B5LXJlY3QtYXN5bmMtMi5mOTAKQEAgLTAsMCArMSwxMTcgQEAKKyEgVGVz dCBmb3Igb21wX3RhcmdldF9tZW1jcHlfcmVjdF9hc3luYyBjb25zaWRlcmluZyBkZXBlbmRl bmNlIG9iamVjdHMuCisKK3Byb2dyYW0gbWFpbgorICB1c2Ugb21wX2xpYgorICB1c2UgaXNv X2NfYmluZGluZworICBpbXBsaWNpdCBub25lIChleHRlcm5hbCwgdHlwZSkKKyAgaW50ZWdl ciA6OiBkLCBpZCwgaSwgagorICBpbnRlZ2VyLCB0YXJnZXQgOjogYSgwOjEyNyksIGIoMDo2 MyksIGMoMDoxMjcpLCBlKDA6MTUpLCBxKDA6MTI3KQorICB0eXBlKGNfcHRyKSA6OiBwCisg IGludGVnZXIob21wX2RlcGVuZF9raW5kKSA6OiBvYmooMDoyKQorCisgIGludGVnZXIoa2lu ZD1jX3NpemVfdCkgOjogdm9sdW1lKDA6MikKKyAgaW50ZWdlcihraW5kPWNfc2l6ZV90KSA6 OiBkc3Rfb2Zmc2V0cygwOjIpCisgIGludGVnZXIoa2luZD1jX3NpemVfdCkgOjogc3JjX29m ZnNldHMoMDoyKQorICBpbnRlZ2VyKGtpbmQ9Y19zaXplX3QpIDo6IGRzdF9kaW1lbnNpb25z KDA6MikKKyAgaW50ZWdlcihraW5kPWNfc2l6ZV90KSA6OiBzcmNfZGltZW5zaW9ucygwOjIp CisKKyAgZCA9IG9tcF9nZXRfZGVmYXVsdF9kZXZpY2UgKCkKKyAgaWQgPSBvbXBfZ2V0X2lu aXRpYWxfZGV2aWNlICgpCisKKyAgaWYgKGQgPCAwIC5vci4gZCA+PSBvbXBfZ2V0X251bV9k ZXZpY2VzICgpKSAmCisgICAgZCA9IGlkCisKKyAgcCA9IG9tcF90YXJnZXRfYWxsb2MgKDEz MCAqIGNfc2l6ZW9mIChxKSwgZCkKKyAgaWYgKC5ub3QuIGNfYXNzb2NpYXRlZCAocCkpICYK KyAgICBzdG9wIDAgICEgb2theQorCisgIGEgPSBbKDQyLCBpID0gMCwgMTI3KV0KKyAgYiA9 IFsoMjQsIGkgPSAwLCA2MyldCisgIGMgPSBbKDAsIGkgPSAwLCAxMjcpXQorICBlID0gWyg3 NywgaSA9IDAsIDE1KV0KKworICB2b2x1bWUoMikgPSAzCisgIHZvbHVtZSgxKSA9IDIKKyAg dm9sdW1lKDApID0gMgorICBkc3Rfb2Zmc2V0cygyKSA9IDAKKyAgZHN0X29mZnNldHMoMSkg PSAwCisgIGRzdF9vZmZzZXRzKDApID0gMAorICBzcmNfb2Zmc2V0cygyKSA9IDAKKyAgc3Jj X29mZnNldHMoMSkgPSAwCisgIHNyY19vZmZzZXRzKDApID0gMAorICBkc3RfZGltZW5zaW9u cygyKSA9IDUKKyAgZHN0X2RpbWVuc2lvbnMoMSkgPSA0CisgIGRzdF9kaW1lbnNpb25zKDAp ID0gMworICBzcmNfZGltZW5zaW9ucygyKSA9IDQKKyAgc3JjX2RpbWVuc2lvbnMoMSkgPSAz CisgIHNyY19kaW1lbnNpb25zKDApID0gMgorCisgICEkb21wIHBhcmFsbGVsIG51bV90aHJl YWRzKDUpCisgICEkb21wIHNpbmdsZQorCisgICAgISRvbXAgdGFzayBkZXBlbmQob3V0OiBw KQorICAgIGlmIChvbXBfdGFyZ2V0X21lbWNweSAocCwgY19sb2MgKGEpLCAxMjggKiBzaXpl b2YgKGEoMCkpLCAwX2Nfc2l6ZV90LCAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAw X2Nfc2l6ZV90LCBkLCBpZCkgLz0gMCkgJgorICAgICAgc3RvcCAxCisgICAgISRvbXAgZW5k IHRhc2sKKworICAgICEkb21wIHRhc2sgZGVwZW5kKGlub3V0OiBwKQorICAgIGlmIChvbXBf dGFyZ2V0X21lbWNweSAocCwgY19sb2MgKGIpLCA2NCAqIHNpemVvZiAoYigwKSksIDBfY19z aXplX3QsICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDBfY19zaXplX3QsIGQsIGlk KSAvPSAwKSAmCisgICAgICBzdG9wIDIKKyAgICAhJG9tcCBlbmQgdGFzaworCisgICAgISRv bXAgdGFzayBkZXBlbmQob3V0OiBjKQorICAgIGRvIGogPSAwLCAxMjcKKyAgICAgIGMoaikg PSBqICsgMQorICAgIGVuZCBkbworICAgICEkb21wIGVuZCB0YXNrCisKKyAgICAhJG9tcCBk ZXBvYmoob2JqKDApKSBkZXBlbmQoaW5vdXQ6IHApCisgICAgISRvbXAgZGVwb2JqKG9iaigx KSkgZGVwZW5kKGluOiBjKQorCisgICAgISBUaGlzIHByb2R1Y2VzOiAxIDIgMyAtIC0gNSA2 IDcgLSAtIGF0IHBvc2l0aW9ucyAwLi45IGFuZAorICAgICEgICAgICAgICAgICAgICAgMTMg MTQgMTUgLSAtIDE3IDE4IDE5IC0gLSBhdCBwb3NpdGlvbnMgMjAuLjI5LgorICAgIGlmIChv bXBfdGFyZ2V0X21lbWNweV9yZWN0X2FzeW5jIChwLCBjX2xvYyAoYyksIHNpemVvZiAoYygw KSksIDMsIHZvbHVtZSwgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkc3Rfb2Zmc2V0cywgc3JjX29mZnNldHMsICYKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZHN0X2RpbWVuc2lvbnMsIHNyY19kaW1lbnNpb25zLCBkLCBpZCwg JgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLCBvYmopIC89IDAp ICYKKyAgICAgIHN0b3AgMworCisgICAgISRvbXAgdGFzayBkZXBlbmQoaW46IHApCisgICAg aWYgKG9tcF90YXJnZXRfbWVtY3B5IChwLCBjX2xvYyAoZSksIDE2ICogc2l6ZW9mIChlKDAp KSwgMF9jX3NpemVfdCwgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgMF9jX3NpemVf dCwgZCwgaWQpIC89IDApICYKKyAgICAgIHN0b3AgNAorICAgICEkb21wIGVuZCB0YXNrCisK KyAgISRvbXAgZW5kIHNpbmdsZQorICAhJG9tcCBlbmQgcGFyYWxsZWwKKworICAhJG9tcCB0 YXNrd2FpdAorCisgIHEgPSBbKDAsIGkgPSAwLCAxMjcpXQorICBpZiAob21wX3RhcmdldF9t ZW1jcHkgKGNfbG9jIChxKSwgcCwgMTI4ICogc2l6ZW9mIChxKDApKSwgMF9jX3NpemVfdCwg JgorICAgICAgICAgICAgICAgICAgICAgICAgIDBfY19zaXplX3QsIGlkLCBkKSAvPSAwKSAm CisgICAgc3RvcCA1CisKKyAgZG8gaiA9IDAsIDE1CisgICAgaWYgKHEoaikgLz0gNzcpICYK KyAgICAgIHN0b3AgNgorICBlbmQgZG8KKworICBpZiAocSgyMCkgLz0gMTMgLm9yLiBxKDIx KSAvPSAxNCAub3IuIHEoMjIpIC89IDE1IC5vci4gcSgyNSkgLz0gMTcgJgorICAgICAgLm9y LiBxKDI2KSAvPSAxOCAub3IuIHEoMjcpIC89IDE5KSAmCisgICAgc3RvcCA3CisKKyAgZG8g aiA9IDI4LCA2MworICAgIGlmIChxKGopIC89IDI0KSAmCisgICAgICBzdG9wIDgKKyAgZW5k IGRvCisKKyAgZG8gaiA9IDY0LCAxMjcKKyAgICBpZiAocShqKSAvPSA0MikgJgorICAgICAg c3RvcCA5CisgIGVuZCBkbworCisgIGNhbGwgb21wX3RhcmdldF9mcmVlIChwLCBkKQorZW5k IHByb2dyYW0gbWFpbgo= --------------vuk851b88JSsLCwjEXKSaOzc--