From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 59246 invoked by alias); 8 Dec 2016 19:50:27 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 59233 invoked by uid 89); 8 Dec 2016 19:50:26 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=UD:orig, 7j, HX-OriginatorOrg:outlook.com, HX-HELO:sk:SNT004- X-HELO: SNT004-OMC1S21.hotmail.com Received: from snt004-omc1s21.hotmail.com (HELO SNT004-OMC1S21.hotmail.com) (65.55.90.32) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 08 Dec 2016 19:50:16 +0000 Received: from EUR01-HE1-obe.outbound.protection.outlook.com ([65.55.90.7]) by SNT004-OMC1S21.hotmail.com over TLS secured channel with Microsoft SMTPSVC(7.5.7601.23008); Thu, 8 Dec 2016 11:50:14 -0800 Received: from HE1EUR01FT053.eop-EUR01.prod.protection.outlook.com (10.152.0.52) by HE1EUR01HT091.eop-EUR01.prod.protection.outlook.com (10.152.0.213) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.761.6; Thu, 8 Dec 2016 19:50:07 +0000 Received: from AM4PR0701MB2162.eurprd07.prod.outlook.com (10.152.0.52) by HE1EUR01FT053.mail.protection.outlook.com (10.152.1.73) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.761.6 via Frontend Transport; Thu, 8 Dec 2016 19:50:07 +0000 Received: from AM4PR0701MB2162.eurprd07.prod.outlook.com ([10.167.132.147]) by AM4PR0701MB2162.eurprd07.prod.outlook.com ([10.167.132.147]) with mapi id 15.01.0771.008; Thu, 8 Dec 2016 19:50:06 +0000 From: Bernd Edlinger To: Wilco Dijkstra , Ramana Radhakrishnan CC: GCC Patches , Kyrill Tkachov , Richard Earnshaw , nd Subject: Re: [PATCH, ARM] Further improve stack usage on sha512 (PR 77308) Date: Thu, 08 Dec 2016 19:50:00 -0000 Message-ID: References: In-Reply-To: authentication-results: arm.com; dkim=none (message not signed) header.d=none;arm.com; dmarc=none action=none header.from=hotmail.de; x-incomingtopheadermarker: OriginalChecksum:5451F6F26C02B9A0EB7421C3C51FC03BDCBC465A08A162CFAD628ABCA4CD178E;UpperCasedChecksum:0E44C372FF2D764E2091CF6BBFA4E883DB8E4491020F25507963917B17D7E92B;SizeAsReceived:8231;Count:37 x-ms-exchange-messagesentrepresentingtype: 1 x-incomingheadercount: 37 x-eopattributedmessage: 0 x-microsoft-exchange-diagnostics: 1;HE1EUR01HT091;7:wcWVNp7YAKsrA8PHYTK/XV6a1ejCjgVePC8lvCNHn8oMKb3lwr7ZGn7CkkvI1+pk8PA+LOyZ/tAXByuqP+KkI3fCIJ+LuWlYzXjDtc/X4/48Fa+4oChI6JYYLLp07GzmQm9KD++eAW6CrETdBvOj+/I0VJ9a/TyWocZEDTbBQjnmYp9WM0XNC/stCMwmBg4dSkKv3oiAfE3meoZhpm8Ki0JCpDna7SluakBmU4VC2xH4FdHATw2n3kA8W0EJGRpoJtPU40GathUo+vkje8/SKqaB86V92AAW3+HqktHMwP9jmaLtv5+S4L9jCtND5N5TOFmFYKsjufkSwrqdg5rDTLTFUFU7fkSuI3aTwNvFIljQjaxf8qRXvszoYKfBkbKorwGZxnozmAkG6NYpam0BIJwZCaU1u5R8ANeD+UVmVkGH49jyckMkrkWM/W3s7GJOLjuYbKCl+Mg5BE4AhqzWAg== x-forefront-antispam-report: EFV:NLI;SFV:NSPM;SFS:(10019020)(98900003);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1EUR01HT091;H:AM4PR0701MB2162.eurprd07.prod.outlook.com;FPR:;SPF:None;LANG:en; x-ms-office365-filtering-correlation-id: 60b03035-55c8-47b0-eaa5-08d41fa36842 x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(1601124038)(1603103113)(1601125047);SRVR:HE1EUR01HT091; x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(432015012)(102415395)(82015046);SRVR:HE1EUR01HT091;BCL:0;PCL:0;RULEID:;SRVR:HE1EUR01HT091; x-forefront-prvs: 0150F3F97D spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: multipart/mixed; boundary="_002_AM4PR0701MB2162B1578B69466A7FDEC294E4840AM4PR0701MB2162_" MIME-Version: 1.0 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Dec 2016 19:50:06.7789 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Internet X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1EUR01HT091 X-SW-Source: 2016-12/txt/msg00680.txt.bz2 --_002_AM4PR0701MB2162B1578B69466A7FDEC294E4840AM4PR0701MB2162_ Content-Type: text/plain; charset="Windows-1252" Content-ID: <90A007E89DC9E540A6A3B68108787AC2@eurprd07.prod.outlook.com> Content-Transfer-Encoding: quoted-printable Content-length: 3425 Hi Wilco, On 11/30/16 18:01, Bernd Edlinger wrote: > I attached the completely untested follow-up patch now, but I would > like to post that one again for review, after I applied my current > patch, which is still waiting for final review (please feel pinged!). > > > This is really exciting... > > when testing the follow-up patch I discovered a single regression in gcc.dg/fixed-point/convert-sat.c that was caused by a mis-compilation of the libgcc function __gnu_satfractdasq. I think it triggerd a latent bug in the carryin_compare patterns. everything is as expected until reload. First what is left over of a split cmpdi_insn followed by a former cmpdi_unsigned, if the branch is not taken. (insn 109 10 110 2 (set (reg:CC 100 cc) (compare:CC (reg:SI 0 r0 [orig:124 _10 ] [124]) (const_int 0 [0])))=20 "../../../gcc-trunk/libgcc/fixed-bit.c":785 196 {*arm_cmpsi_insn} (nil)) (insn 110 109 13 2 (parallel [ (set (reg:CC 100 cc) (compare:CC (reg:SI 1 r1 [orig:125 _10+4 ] [125]) (const_int -1 [0xffffffffffffffff]))) (set (reg:SI 3 r3 [123]) (minus:SI (plus:SI (reg:SI 1 r1 [orig:125 _10+4 ] [125]) (const_int -1 [0xffffffffffffffff])) (ltu:SI (reg:CC_C 100 cc) (const_int 0 [0])))) ]) "../../../gcc-trunk/libgcc/fixed-bit.c":785 32=20 {*subsi3_carryin_compare_const} (nil)) (jump_insn 13 110 31 2 (set (pc) (if_then_else (ge (reg:CC_NCV 100 cc) (const_int 0 [0])) (label_ref:SI 102) (pc))) "../../../gcc-trunk/libgcc/fixed-bit.c":785 204=20 {arm_cond_branch} (int_list:REG_BR_PROB 6400 (nil)) (note 31 13 97 3 [bb 3] NOTE_INSN_BASIC_BLOCK) (note 97 31 114 3 NOTE_INSN_DELETED) (insn 114 97 113 3 (set (reg:SI 2 r2 [orig:127+4 ] [127]) (const_int -1 [0xffffffffffffffff]))=20 "../../../gcc-trunk/libgcc/fixed-bit.c":831 630 {*arm_movsi_vfp} (expr_list:REG_EQUIV (const_int -1 [0xffffffffffffffff]) (nil))) (insn 113 114 107 3 (set (reg:SI 3 r3 [126]) (const_int 2147483647 [0x7fffffff]))=20 "../../../gcc-trunk/libgcc/fixed-bit.c":831 630 {*arm_movsi_vfp} (expr_list:REG_EQUIV (const_int 2147483647 [0x7fffffff]) (nil))) (insn 107 113 108 3 (set (reg:CC 100 cc) (compare:CC (reg:SI 1 r1 [orig:125 _10+4 ] [125]) (reg:SI 2 r2 [orig:127+4 ] [127])))=20 "../../../gcc-trunk/libgcc/fixed-bit.c":831 196 {*arm_cmpsi_insn} (nil)) Note that the CC register is not really set as implied by insn 110, because the C flag depends on the comparison of r1, 0xFFFF and the carry flag from insn 109. Therefore in the postreload pass the insn 107 appears to be unnecessary, as if should compute exactly the same CC flag, as insn 110, i.e. not dependent on previous CC flag. I think all carryin_compare patterns are wrong because they do not describe the true value of the CC reg. I think the CC reg is actually dependent on left, right and CC-in value, as in the new version of the patch it must be a computation in DI mode without overflow, as in my new version of the patch. I attached an update of the followup patch which is not yet adjusted on your pending negdi patch. Reg-testing is no yet done, but the mis-compilation on libgcc is fixed at least. What do you think? Thanks Bernd. --_002_AM4PR0701MB2162B1578B69466A7FDEC294E4840AM4PR0701MB2162_ Content-Type: text/x-patch; name="patch-pr77308-5.diff" Content-Description: patch-pr77308-5.diff Content-Disposition: attachment; filename="patch-pr77308-5.diff"; size=15481; creation-date="Thu, 08 Dec 2016 19:50:05 GMT"; modification-date="Thu, 08 Dec 2016 19:50:05 GMT" Content-ID: Content-Transfer-Encoding: base64 Content-length: 20989 MjAxNi0xMi0wOCAgQmVybmQgRWRsaW5nZXIgIDxiZXJuZC5lZGxpbmdlckBo b3RtYWlsLmRlPg0KDQoJUFIgdGFyZ2V0Lzc3MzA4DQoJKiBjb25maWcvYXJt L2FybS5tZCAoc3ViZGkzX2NvbXBhcmUxLCBzdWJzaTNfY2Fycnlpbl9jb21w YXJlLA0KCXN1YnNpM19jYXJyeWluX2NvbXBhcmVfY29uc3QsIG5lZ2RpMl9j b21wYXJlKTogRml4IHRoZSBDQyByZWcgZGF0YWZsb3cuDQoJKCphcm1fbmVn ZGkyLCAqYXJtX2NtcGRpX3Vuc2lnbmVkKTogU3BsaXQgZWFybHkgZXhjZXB0 IGZvcg0KICAgICAgICBUQVJHRVRfTkVPTiBhbmQgVEFSR0VUX0lXTU1YVC4N CgkoKmFybV9jbXBkaV9pbnNuKTogU3BsaXQgZWFybHkgZXhjZXB0IGZvcg0K CVRBUkdFVF9ORU9OIGFuZCBUQVJHRVRfSVdNTVhULiAgRml4IHRoZSBDQyBy ZWcgZGF0YWZsb3cuDQoJKiBjb25maWcvYXJtL3RodW1iMi5tZCAoKnRodW1i Ml9uZWdkaTIpOiBTcGxpdCBlYXJseSBleGNlcHQgZm9yDQoJVEFSR0VUX05F T04gYW5kIFRBUkdFVF9JV01NWFQuDQoNCnRlc3RzdWl0ZToNCjIwMTYtMTIt MDggIEJlcm5kIEVkbGluZ2VyICA8YmVybmQuZWRsaW5nZXJAaG90bWFpbC5k ZT4NCg0KCVBSIHRhcmdldC83NzMwOA0KCSogZ2NjLnRhcmdldC9hcm0vcHI3 NzMwOC0yLmM6IE5ldyB0ZXN0Lg0KDQotLS0gZ2NjL2NvbmZpZy9hcm0vYXJt Lm1kLm9yaWcJMjAxNi0xMi0wOCAxNjowMTo0My4yOTA1OTUxMjcgKzAxMDAN CisrKyBnY2MvY29uZmlnL2FybS9hcm0ubWQJMjAxNi0xMi0wOCAxOTowNDoy Mi4yNTEwNjU4NDggKzAxMDANCkBAIC0xMDg2LDggKzEwODYsOCBAQA0KIH0p DQogDQogKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAic3ViZGkzX2NvbXBhcmUx Ig0KLSAgWyhzZXQgKHJlZzpDQyBDQ19SRUdOVU0pDQotCShjb21wYXJlOkND DQorICBbKHNldCAocmVnOkNDX05DViBDQ19SRUdOVU0pDQorCShjb21wYXJl OkNDX05DVg0KIAkgIChtYXRjaF9vcGVyYW5kOkRJIDEgInJlZ2lzdGVyX29w ZXJhbmQiICJyIikNCiAJICAobWF0Y2hfb3BlcmFuZDpESSAyICJyZWdpc3Rl cl9vcGVyYW5kIiAiciIpKSkNCiAgICAoc2V0IChtYXRjaF9vcGVyYW5kOkRJ IDAgInJlZ2lzdGVyX29wZXJhbmQiICI9JnIiKQ0KQEAgLTEwOTgsMTAgKzEw OTgsMTUgQEANCiAgIFsocGFyYWxsZWwgWyhzZXQgKHJlZzpDQyBDQ19SRUdO VU0pDQogCQkgICAoY29tcGFyZTpDQyAobWF0Y2hfZHVwIDEpIChtYXRjaF9k dXAgMikpKQ0KIAkgICAgICAoc2V0IChtYXRjaF9kdXAgMCkgKG1pbnVzOlNJ IChtYXRjaF9kdXAgMSkgKG1hdGNoX2R1cCAyKSkpXSkNCi0gICAocGFyYWxs ZWwgWyhzZXQgKHJlZzpDQyBDQ19SRUdOVU0pDQotCQkgICAoY29tcGFyZTpD QyAobWF0Y2hfZHVwIDQpIChtYXRjaF9kdXAgNSkpKQ0KLQkgICAgIChzZXQg KG1hdGNoX2R1cCAzKSAobWludXM6U0kgKG1pbnVzOlNJIChtYXRjaF9kdXAg NCkgKG1hdGNoX2R1cCA1KSkNCi0JCQkgICAgICAgKGx0dTpTSSAocmVnOkND X0MgQ0NfUkVHTlVNKSAoY29uc3RfaW50IDApKSkpXSldDQorICAgKHBhcmFs bGVsIFsoc2V0IChyZWc6Q0NfQyBDQ19SRUdOVU0pDQorCQkgICAoY29tcGFy ZTpDQ19DDQorCQkgICAgICh6ZXJvX2V4dGVuZDpESSAobWF0Y2hfZHVwIDQp KQ0KKwkJICAgICAocGx1czpESQ0KKwkJICAgICAgICh6ZXJvX2V4dGVuZDpE SSAobWF0Y2hfZHVwIDUpKQ0KKwkJICAgICAgIChsdHU6REkgKHJlZzpDQ19D IENDX1JFR05VTSkgKGNvbnN0X2ludCAwKSkpKSkNCisJICAgICAgKHNldCAo bWF0Y2hfZHVwIDMpDQorCQkgICAobWludXM6U0kgKG1pbnVzOlNJIChtYXRj aF9kdXAgNCkgKG1hdGNoX2R1cCA1KSkNCisJCQkgICAgIChsdHU6U0kgKHJl ZzpDQ19DIENDX1JFR05VTSkgKGNvbnN0X2ludCAwKSkpKV0pXQ0KICAgew0K ICAgICBvcGVyYW5kc1szXSA9IGdlbl9oaWdocGFydCAoU0ltb2RlLCBvcGVy YW5kc1swXSk7DQogICAgIG9wZXJhbmRzWzBdID0gZ2VuX2xvd3BhcnQgKFNJ bW9kZSwgb3BlcmFuZHNbMF0pOw0KQEAgLTExNTYsMTMgKzExNjEsMTUgQEAN CiApDQogDQogKGRlZmluZV9pbnNuICIqc3Vic2kzX2NhcnJ5aW5fY29tcGFy ZSINCi0gIFsoc2V0IChyZWc6Q0MgQ0NfUkVHTlVNKQ0KLSAgICAgICAgKGNv bXBhcmU6Q0MgKG1hdGNoX29wZXJhbmQ6U0kgMSAic19yZWdpc3Rlcl9vcGVy YW5kIiAiciIpDQotICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFu ZDpTSSAyICJzX3JlZ2lzdGVyX29wZXJhbmQiICJyIikpKQ0KKyAgWyhzZXQg KHJlZzpDQ19DIENDX1JFR05VTSkNCisJKGNvbXBhcmU6Q0NfQw0KKwkgICh6 ZXJvX2V4dGVuZDpESSAobWF0Y2hfb3BlcmFuZDpTSSAxICJzX3JlZ2lzdGVy X29wZXJhbmQiICJyIikpDQorCSAgKHBsdXM6REkNCisJICAgICh6ZXJvX2V4 dGVuZDpESSAobWF0Y2hfb3BlcmFuZDpTSSAyICJzX3JlZ2lzdGVyX29wZXJh bmQiICJyIikpDQorCSAgICAobHR1OkRJIChyZWc6Q0NfQyBDQ19SRUdOVU0p IChjb25zdF9pbnQgMCkpKSkpDQogICAgKHNldCAobWF0Y2hfb3BlcmFuZDpT SSAwICJzX3JlZ2lzdGVyX29wZXJhbmQiICI9ciIpDQotICAgICAgICAobWlu dXM6U0kgKG1pbnVzOlNJIChtYXRjaF9kdXAgMSkNCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgKG1hdGNoX2R1cCAyKSkNCi0gICAgICAgICAgICAg ICAgICAobHR1OlNJIChyZWc6Q0NfQyBDQ19SRUdOVU0pIChjb25zdF9pbnQg MCkpKSldDQorCShtaW51czpTSSAobWludXM6U0kgKG1hdGNoX2R1cCAxKSAo bWF0Y2hfZHVwIDIpKQ0KKwkJICAobHR1OlNJIChyZWc6Q0NfQyBDQ19SRUdO VU0pIChjb25zdF9pbnQgMCkpKSldDQogICAiVEFSR0VUXzMyQklUIg0KICAg InNiY3NcXHQlMCwgJTEsICUyIg0KICAgWyhzZXRfYXR0ciAiY29uZHMiICJz ZXQiKQ0KQEAgLTExNzAsMTIgKzExNzcsMTQgQEANCiApDQogDQogKGRlZmlu ZV9pbnNuICIqc3Vic2kzX2NhcnJ5aW5fY29tcGFyZV9jb25zdCINCi0gIFso c2V0IChyZWc6Q0MgQ0NfUkVHTlVNKQ0KLSAgICAgICAgKGNvbXBhcmU6Q0Mg KG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnX29yX2ludF9vcGVyYW5kIiAiciIp DQotICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJh cm1fbm90X29wZXJhbmQiICJLIikpKQ0KKyAgWyhzZXQgKHJlZzpDQ19DIEND X1JFR05VTSkNCisJKGNvbXBhcmU6Q0NfQw0KKwkgICh6ZXJvX2V4dGVuZDpE SSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdfb3JfaW50X29wZXJhbmQiICJy IikpDQorCSAgKHBsdXM6REkNCisJICAgICh6ZXJvX2V4dGVuZDpESSAobWF0 Y2hfb3BlcmFuZDpTSSAyICJhcm1fbm90X29wZXJhbmQiICJLIikpDQorCSAg ICAobHR1OkRJIChyZWc6Q0NfQyBDQ19SRUdOVU0pIChjb25zdF9pbnQgMCkp KSkpDQogICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJzX3JlZ2lzdGVy X29wZXJhbmQiICI9ciIpDQotICAgICAgICAobWludXM6U0kgKHBsdXM6U0kg KG1hdGNoX2R1cCAxKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICht YXRjaF9kdXAgMikpDQorICAgICAgICAobWludXM6U0kgKHBsdXM6U0kgKG1h dGNoX2R1cCAxKSAobWF0Y2hfZHVwIDIpKQ0KICAgICAgICAgICAgICAgICAg IChsdHU6U0kgKHJlZzpDQ19DIENDX1JFR05VTSkgKGNvbnN0X2ludCAwKSkp KV0NCiAgICJUQVJHRVRfMzJCSVQiDQogICAic2Jjc1xcdCUwLCAlMSwgIyVC MiINCkBAIC00Njg0LDggKzQ2OTMsOCBAQA0KIA0KIA0KIChkZWZpbmVfaW5z bl9hbmRfc3BsaXQgIm5lZ2RpMl9jb21wYXJlIg0KLSAgWyhzZXQgKHJlZzpD QyBDQ19SRUdOVU0pDQotCShjb21wYXJlOkNDDQorICBbKHNldCAocmVnOkND X05DViBDQ19SRUdOVU0pDQorCShjb21wYXJlOkNDX05DVg0KIAkgIChjb25z dF9pbnQgMCkNCiAJICAobWF0Y2hfb3BlcmFuZDpESSAxICJyZWdpc3Rlcl9v cGVyYW5kIiAiMCxyIikpKQ0KICAgIChzZXQgKG1hdGNoX29wZXJhbmQ6REkg MCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yLCZyIikNCkBAIC00Njk3LDggKzQ3 MDYsMTIgQEANCiAJCSAgIChjb21wYXJlOkNDIChjb25zdF9pbnQgMCkgKG1h dGNoX2R1cCAxKSkpDQogCSAgICAgIChzZXQgKG1hdGNoX2R1cCAwKSAobWlu dXM6U0kgKGNvbnN0X2ludCAwKQ0KIAkJCQkJICAgKG1hdGNoX2R1cCAxKSkp XSkNCi0gICAocGFyYWxsZWwgWyhzZXQgKHJlZzpDQyBDQ19SRUdOVU0pDQot CQkgICAoY29tcGFyZTpDQyAoY29uc3RfaW50IDApIChtYXRjaF9kdXAgMykp KQ0KKyAgIChwYXJhbGxlbCBbKHNldCAocmVnOkNDX0MgQ0NfUkVHTlVNKQ0K KwkJICAgKGNvbXBhcmU6Q0NfQw0KKwkJICAgICAoY29uc3RfaW50IDApDQor CQkgICAgIChwbHVzOkRJDQorCQkgICAgICAgKHplcm9fZXh0ZW5kOkRJICht YXRjaF9kdXAgMykpDQorCQkgICAgICAgKGx0dTpESSAocmVnOkNDX0MgQ0Nf UkVHTlVNKSAoY29uc3RfaW50IDApKSkpKQ0KIAkgICAgIChzZXQgKG1hdGNo X2R1cCAyKQ0KIAkJICAobWludXM6U0kNCiAJCSAgIChtaW51czpTSSAoY29u c3RfaW50IDApIChtYXRjaF9kdXAgMykpDQpAQCAtNDczOCw3ICs0NzUxLDcg QEANCiAgICAoY2xvYmJlciAocmVnOkNDIENDX1JFR05VTSkpXQ0KICAgIlRB UkdFVF9BUk0iDQogICAiIyIgICA7ICJyc2JzXFx0JVEwLCAlUTEsICMwXDty c2NcXHQlUjAsICVSMSwgIzAiDQotICAiJiYgcmVsb2FkX2NvbXBsZXRlZCIN CisgICImJiAoKCFUQVJHRVRfTkVPTiAmJiAhVEFSR0VUX0lXTU1YVCkgfHwg cmVsb2FkX2NvbXBsZXRlZCkiDQogICBbKHBhcmFsbGVsIFsoc2V0IChyZWc6 Q0MgQ0NfUkVHTlVNKQ0KIAkJICAgKGNvbXBhcmU6Q0MgKGNvbnN0X2ludCAw KSAobWF0Y2hfZHVwIDEpKSkNCiAJICAgICAgKHNldCAobWF0Y2hfZHVwIDAp IChtaW51czpTSSAoY29uc3RfaW50IDApIChtYXRjaF9kdXAgMSkpKV0pDQpA QCAtNDc1NiwxMiArNDc2OSwxNCBAQA0KICkNCiANCiAoZGVmaW5lX2luc24g IipuZWdzaTJfY2Fycnlpbl9jb21wYXJlIg0KLSAgWyhzZXQgKHJlZzpDQyBD Q19SRUdOVU0pDQotCShjb21wYXJlOkNDIChjb25zdF9pbnQgMCkNCi0JCSAg ICAobWF0Y2hfb3BlcmFuZDpTSSAxICJzX3JlZ2lzdGVyX29wZXJhbmQiICJy IikpKQ0KKyAgWyhzZXQgKHJlZzpDQ19DIENDX1JFR05VTSkNCisJKGNvbXBh cmU6Q0NfQw0KKwkgIChjb25zdF9pbnQgMCkNCisJICAocGx1czpESQ0KKwkg ICAgKHplcm9fZXh0ZW5kOkRJIChtYXRjaF9vcGVyYW5kOlNJIDEgInNfcmVn aXN0ZXJfb3BlcmFuZCIgInIiKSkNCisJICAgIChsdHU6REkgKHJlZzpDQ19D IENDX1JFR05VTSkgKGNvbnN0X2ludCAwKSkpKSkNCiAgICAoc2V0IChtYXRj aF9vcGVyYW5kOlNJIDAgInNfcmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikNCi0J KG1pbnVzOlNJIChtaW51czpTSSAoY29uc3RfaW50IDApDQotCQkJICAgICht YXRjaF9kdXAgMSkpDQorCShtaW51czpTSSAobWludXM6U0kgKGNvbnN0X2lu dCAwKSAobWF0Y2hfZHVwIDEpKQ0KIAkJICAobHR1OlNJIChyZWc6Q0NfQyBD Q19SRUdOVU0pIChjb25zdF9pbnQgMCkpKSldDQogICAiVEFSR0VUX0FSTSIN CiAgICJyc2NzXFx0JTAsICUxLCAjMCINCkBAIC03NDMyLDE0ICs3NDQ3LDE3 IEBADQogICAgKGNsb2JiZXIgKG1hdGNoX3NjcmF0Y2g6U0kgMiAiPXIiKSld DQogICAiVEFSR0VUXzMyQklUIg0KICAgIiMiICAgOyAiY21wXFx0JVEwLCAl UTFcO3NiY3NcXHQlMiwgJVIwLCAlUjEiDQotICAiJiYgcmVsb2FkX2NvbXBs ZXRlZCINCisgICImJiAoKCFUQVJHRVRfTkVPTiAmJiAhVEFSR0VUX0lXTU1Y VCkgfHwgcmVsb2FkX2NvbXBsZXRlZCkiDQogICBbKHNldCAocmVnOkNDIEND X1JFR05VTSkNCi0gICAgICAgIChjb21wYXJlOkNDIChtYXRjaF9kdXAgMCkg KG1hdGNoX2R1cCAxKSkpDQotICAgKHBhcmFsbGVsIFsoc2V0IChyZWc6Q0Mg Q0NfUkVHTlVNKQ0KLSAgICAgICAgICAgICAgICAgICAoY29tcGFyZTpDQyAo bWF0Y2hfZHVwIDMpIChtYXRjaF9kdXAgNCkpKQ0KLSAgICAgICAgICAgICAg KHNldCAobWF0Y2hfZHVwIDIpDQotICAgICAgICAgICAgICAgICAgIChtaW51 czpTSSAobWF0Y2hfZHVwIDUpDQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChsdHU6U0kgKHJlZzpDQ19DIENDX1JFR05VTSkgKGNvbnN0X2ludCAw KSkpKV0pXQ0KKwkoY29tcGFyZTpDQyAobWF0Y2hfZHVwIDApIChtYXRjaF9k dXAgMSkpKQ0KKyAgIChwYXJhbGxlbCBbKHNldCAocmVnOkNDX0MgQ0NfUkVH TlVNKQ0KKwkJICAgKGNvbXBhcmU6Q0NfQw0KKwkJICAgICAoemVyb19leHRl bmQ6REkgKG1hdGNoX2R1cCAzKSkNCisJCSAgICAgKHBsdXM6REkgKHplcm9f ZXh0ZW5kOkRJIChtYXRjaF9kdXAgNCkpDQorCQkJICAgICAgKGx0dTpESSAo cmVnOkNDX0MgQ0NfUkVHTlVNKSAoY29uc3RfaW50IDApKSkpKQ0KKwkgICAg ICAoc2V0IChtYXRjaF9kdXAgMikNCisJCSAgIChtaW51czpTSSAobWF0Y2hf ZHVwIDUpDQorCQkJICAgICAobHR1OlNJIChyZWc6Q0NfQyBDQ19SRUdOVU0p IChjb25zdF9pbnQgMCkpKSldKV0NCiAgIHsNCiAgICAgb3BlcmFuZHNbM10g PSBnZW5faGlnaHBhcnQgKFNJbW9kZSwgb3BlcmFuZHNbMF0pOw0KICAgICBv cGVyYW5kc1swXSA9IGdlbl9sb3dwYXJ0IChTSW1vZGUsIG9wZXJhbmRzWzBd KTsNCkBAIC03NDU2LDcgKzc0NzQsMTAgQEANCiAgICAgICAgIG9wZXJhbmRz WzVdID0gZ2VuX3J0eF9NSU5VUyAoU0ltb2RlLCBvcGVyYW5kc1szXSwgb3Bl cmFuZHNbNF0pOw0KICAgICAgIH0NCiAgICAgb3BlcmFuZHNbMV0gPSBnZW5f bG93cGFydCAoU0ltb2RlLCBvcGVyYW5kc1sxXSk7DQotICAgIG9wZXJhbmRz WzJdID0gZ2VuX2xvd3BhcnQgKFNJbW9kZSwgb3BlcmFuZHNbMl0pOw0KKyAg ICBpZiAoY2FuX2NyZWF0ZV9wc2V1ZG9fcCAoKSkNCisgICAgICBvcGVyYW5k c1syXSA9IGdlbl9yZWdfcnR4IChTSW1vZGUpOw0KKyAgICBlbHNlDQorICAg ICAgb3BlcmFuZHNbMl0gPSBnZW5fbG93cGFydCAoU0ltb2RlLCBvcGVyYW5k c1syXSk7DQogICB9DQogICBbKHNldF9hdHRyICJjb25kcyIgInNldCIpDQog ICAgKHNldF9hdHRyICJsZW5ndGgiICI4IikNCkBAIC03NDcwLDcgKzc0OTEs NyBAQA0KIA0KICAgIlRBUkdFVF8zMkJJVCINCiAgICIjIiAgIDsgImNtcFxc dCVSMCwgJVIxXDtpdCBlcVw7Y21wZXFcXHQlUTAsICVRMSINCi0gICImJiBy ZWxvYWRfY29tcGxldGVkIg0KKyAgIiYmICgoIVRBUkdFVF9ORU9OICYmICFU QVJHRVRfSVdNTVhUKSB8fCByZWxvYWRfY29tcGxldGVkKSINCiAgIFsoc2V0 IChyZWc6Q0MgQ0NfUkVHTlVNKQ0KICAgICAgICAgKGNvbXBhcmU6Q0MgKG1h dGNoX2R1cCAyKSAobWF0Y2hfZHVwIDMpKSkNCiAgICAoY29uZF9leGVjIChl cTpTSSAocmVnOkNDIENDX1JFR05VTSkgKGNvbnN0X2ludCAwKSkNCi0tLSBn Y2MvY29uZmlnL2FybS90aHVtYjIubWQub3JpZwkyMDE2LTEyLTA4IDE2OjAw OjU5LjAxNzU5NzI2NSArMDEwMA0KKysrIGdjYy9jb25maWcvYXJtL3RodW1i Mi5tZAkyMDE2LTEyLTA4IDE2OjAyOjM4LjU5MTU5MjQ1NiArMDEwMA0KQEAg LTEzMiw3ICsxMzIsNyBAQA0KICAgIChjbG9iYmVyIChyZWc6Q0MgQ0NfUkVH TlVNKSldDQogICAiVEFSR0VUX1RIVU1CMiINCiAgICIjIiA7IG5lZ3NcXHQl UTAsICVRMVw7c2JjXFx0JVIwLCAlUjEsICVSMSwgbHNsICMxDQotICAiJiYg cmVsb2FkX2NvbXBsZXRlZCINCisgICImJiAoIVRBUkdFVF9ORU9OIHx8IHJl bG9hZF9jb21wbGV0ZWQpIg0KICAgWyhwYXJhbGxlbCBbKHNldCAocmVnOkND IENDX1JFR05VTSkNCiAJCSAgIChjb21wYXJlOkNDIChjb25zdF9pbnQgMCkg KG1hdGNoX2R1cCAxKSkpDQogCSAgICAgIChzZXQgKG1hdGNoX2R1cCAwKSAo bWludXM6U0kgKGNvbnN0X2ludCAwKSAobWF0Y2hfZHVwIDEpKSldKQ0KLS0t IC9kZXYvbnVsbAkyMDE2LTEyLTA4IDE1OjUwOjQ1LjQyNjI3MTQ1MCArMDEw MA0KKysrIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vcHI3NzMwOC0y LmMJMjAxNi0xMi0wOCAxNjowMjozOC41OTE1OTI0NTYgKzAxMDANCkBAIC0w LDAgKzEsMTY5IEBADQorLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCisvKiB7 IGRnLW9wdGlvbnMgIi1PcyAtV3N0YWNrLXVzYWdlPTI1MDAiIH0gKi8NCisN CisvKiBUaGlzIGlzIGEgbW9kaWZpZWQgYWxnb3JpdGhtIHdpdGggNjRiaXQg Y21wIGFuZCBuZWcgYXQgdGhlIFNpZ21hLWJsb2Nrcy4NCisgICBJdCBpbXBy b3ZlcyB0aGUgdGVzdCBjb3ZlcmFnZSBvZiBjbXBkaSBhbmQgbmVnZGkyIHBh dHRlcm5zLg0KKyAgIFVubGlrZSB0aGUgb3JpZ2luYWwgdGVzdCBjYXNlIHRo ZXNlIGluc25zIGNhbiByZWFjaCB0aGUgcmVsb2FkIHBhc3MsDQorICAgd2hp Y2ggbWF5IHJlc3VsdCBpbiBsYXJnZSBzdGFjayB1c2FnZS4gICovDQorDQor I2RlZmluZSBTSEFfTE9ORzY0IHVuc2lnbmVkIGxvbmcgbG9uZw0KKyNkZWZp bmUgVTY0KEMpICAgICBDIyNVTEwNCisNCisjZGVmaW5lIFNIQV9MQkxPQ0sg ICAgICAxNg0KKyNkZWZpbmUgU0hBNTEyX0NCTE9DSyAgIChTSEFfTEJMT0NL KjgpDQorDQordHlwZWRlZiBzdHJ1Y3QgU0hBNTEyc3RhdGVfc3Qgew0KKyAg ICBTSEFfTE9ORzY0IGhbOF07DQorICAgIFNIQV9MT05HNjQgTmwsIE5oOw0K KyAgICB1bmlvbiB7DQorICAgICAgICBTSEFfTE9ORzY0IGRbU0hBX0xCTE9D S107DQorICAgICAgICB1bnNpZ25lZCBjaGFyIHBbU0hBNTEyX0NCTE9DS107 DQorICAgIH0gdTsNCisgICAgdW5zaWduZWQgaW50IG51bSwgbWRfbGVuOw0K K30gU0hBNTEyX0NUWDsNCisNCitzdGF0aWMgY29uc3QgU0hBX0xPTkc2NCBL NTEyWzgwXSA9IHsNCisgICAgVTY0KDB4NDI4YTJmOThkNzI4YWUyMiksIFU2 NCgweDcxMzc0NDkxMjNlZjY1Y2QpLA0KKyAgICBVNjQoMHhiNWMwZmJjZmVj NGQzYjJmKSwgVTY0KDB4ZTliNWRiYTU4MTg5ZGJiYyksDQorICAgIFU2NCgw eDM5NTZjMjViZjM0OGI1MzgpLCBVNjQoMHg1OWYxMTFmMWI2MDVkMDE5KSwN CisgICAgVTY0KDB4OTIzZjgyYTRhZjE5NGY5YiksIFU2NCgweGFiMWM1ZWQ1 ZGE2ZDgxMTgpLA0KKyAgICBVNjQoMHhkODA3YWE5OGEzMDMwMjQyKSwgVTY0 KDB4MTI4MzViMDE0NTcwNmZiZSksDQorICAgIFU2NCgweDI0MzE4NWJlNGVl NGIyOGMpLCBVNjQoMHg1NTBjN2RjM2Q1ZmZiNGUyKSwNCisgICAgVTY0KDB4 NzJiZTVkNzRmMjdiODk2ZiksIFU2NCgweDgwZGViMWZlM2IxNjk2YjEpLA0K KyAgICBVNjQoMHg5YmRjMDZhNzI1YzcxMjM1KSwgVTY0KDB4YzE5YmYxNzRj ZjY5MjY5NCksDQorICAgIFU2NCgweGU0OWI2OWMxOWVmMTRhZDIpLCBVNjQo MHhlZmJlNDc4NjM4NGYyNWUzKSwNCisgICAgVTY0KDB4MGZjMTlkYzY4Yjhj ZDViNSksIFU2NCgweDI0MGNhMWNjNzdhYzljNjUpLA0KKyAgICBVNjQoMHgy ZGU5MmM2ZjU5MmIwMjc1KSwgVTY0KDB4NGE3NDg0YWE2ZWE2ZTQ4MyksDQor ICAgIFU2NCgweDVjYjBhOWRjYmQ0MWZiZDQpLCBVNjQoMHg3NmY5ODhkYTgz MTE1M2I1KSwNCisgICAgVTY0KDB4OTgzZTUxNTJlZTY2ZGZhYiksIFU2NCgw eGE4MzFjNjZkMmRiNDMyMTApLA0KKyAgICBVNjQoMHhiMDAzMjdjODk4ZmIy MTNmKSwgVTY0KDB4YmY1OTdmYzdiZWVmMGVlNCksDQorICAgIFU2NCgweGM2 ZTAwYmYzM2RhODhmYzIpLCBVNjQoMHhkNWE3OTE0NzkzMGFhNzI1KSwNCisg ICAgVTY0KDB4MDZjYTYzNTFlMDAzODI2ZiksIFU2NCgweDE0MjkyOTY3MGEw ZTZlNzApLA0KKyAgICBVNjQoMHgyN2I3MGE4NTQ2ZDIyZmZjKSwgVTY0KDB4 MmUxYjIxMzg1YzI2YzkyNiksDQorICAgIFU2NCgweDRkMmM2ZGZjNWFjNDJh ZWQpLCBVNjQoMHg1MzM4MGQxMzlkOTViM2RmKSwNCisgICAgVTY0KDB4NjUw YTczNTQ4YmFmNjNkZSksIFU2NCgweDc2NmEwYWJiM2M3N2IyYTgpLA0KKyAg ICBVNjQoMHg4MWMyYzkyZTQ3ZWRhZWU2KSwgVTY0KDB4OTI3MjJjODUxNDgy MzUzYiksDQorICAgIFU2NCgweGEyYmZlOGExNGNmMTAzNjQpLCBVNjQoMHhh ODFhNjY0YmJjNDIzMDAxKSwNCisgICAgVTY0KDB4YzI0YjhiNzBkMGY4OTc5 MSksIFU2NCgweGM3NmM1MWEzMDY1NGJlMzApLA0KKyAgICBVNjQoMHhkMTky ZTgxOWQ2ZWY1MjE4KSwgVTY0KDB4ZDY5OTA2MjQ1NTY1YTkxMCksDQorICAg IFU2NCgweGY0MGUzNTg1NTc3MTIwMmEpLCBVNjQoMHgxMDZhYTA3MDMyYmJk MWI4KSwNCisgICAgVTY0KDB4MTlhNGMxMTZiOGQyZDBjOCksIFU2NCgweDFl Mzc2YzA4NTE0MWFiNTMpLA0KKyAgICBVNjQoMHgyNzQ4Nzc0Y2RmOGVlYjk5 KSwgVTY0KDB4MzRiMGJjYjVlMTliNDhhOCksDQorICAgIFU2NCgweDM5MWMw Y2IzYzVjOTVhNjMpLCBVNjQoMHg0ZWQ4YWE0YWUzNDE4YWNiKSwNCisgICAg VTY0KDB4NWI5Y2NhNGY3NzYzZTM3MyksIFU2NCgweDY4MmU2ZmYzZDZiMmI4 YTMpLA0KKyAgICBVNjQoMHg3NDhmODJlZTVkZWZiMmZjKSwgVTY0KDB4Nzhh NTYzNmY0MzE3MmY2MCksDQorICAgIFU2NCgweDg0Yzg3ODE0YTFmMGFiNzIp LCBVNjQoMHg4Y2M3MDIwODFhNjQzOWVjKSwNCisgICAgVTY0KDB4OTBiZWZm ZmEyMzYzMWUyOCksIFU2NCgweGE0NTA2Y2ViZGU4MmJkZTkpLA0KKyAgICBV NjQoMHhiZWY5YTNmN2IyYzY3OTE1KSwgVTY0KDB4YzY3MTc4ZjJlMzcyNTMy YiksDQorICAgIFU2NCgweGNhMjczZWNlZWEyNjYxOWMpLCBVNjQoMHhkMTg2 YjhjNzIxYzBjMjA3KSwNCisgICAgVTY0KDB4ZWFkYTdkZDZjZGUwZWIxZSks IFU2NCgweGY1N2Q0ZjdmZWU2ZWQxNzgpLA0KKyAgICBVNjQoMHgwNmYwNjdh YTcyMTc2ZmJhKSwgVTY0KDB4MGE2MzdkYzVhMmM4OThhNiksDQorICAgIFU2 NCgweDExM2Y5ODA0YmVmOTBkYWUpLCBVNjQoMHgxYjcxMGIzNTEzMWM0NzFi KSwNCisgICAgVTY0KDB4MjhkYjc3ZjUyMzA0N2Q4NCksIFU2NCgweDMyY2Fh YjdiNDBjNzI0OTMpLA0KKyAgICBVNjQoMHgzYzllYmUwYTE1YzliZWJjKSwg VTY0KDB4NDMxZDY3YzQ5YzEwMGQ0YyksDQorICAgIFU2NCgweDRjYzVkNGJl Y2IzZTQyYjYpLCBVNjQoMHg1OTdmMjk5Y2ZjNjU3ZTJhKSwNCisgICAgVTY0 KDB4NWZjYjZmYWIzYWQ2ZmFlYyksIFU2NCgweDZjNDQxOThjNGE0NzU4MTcp DQorfTsNCisNCisjZGVmaW5lIEIoeCxqKSAgICAoKChTSEFfTE9ORzY0KSgq KCgoY29uc3QgdW5zaWduZWQgY2hhciAqKSgmeCkpK2opKSk8PCgoNy1qKSo4 KSkNCisjZGVmaW5lIFBVTEw2NCh4KSAoQih4LDApfEIoeCwxKXxCKHgsMil8 Qih4LDMpfEIoeCw0KXxCKHgsNSl8Qih4LDYpfEIoeCw3KSkNCisjZGVmaW5l IFJPVFIoeCxzKSAgICAgICAoKCh4KT4+cykgfCAoeCk8PCg2NC1zKSkNCisj ZGVmaW5lIFNpZ21hMCh4KSAgICAgICAoUk9UUigoeCksMjgpIF4gUk9UUigo eCksMzQpIF4gKFJPVFIoKHgpLDM5KSA9PSAoeCkpID8gLSh4KSA6ICh4KSkN CisjZGVmaW5lIFNpZ21hMSh4KSAgICAgICAoUk9UUigoeCksMTQpIF4gUk9U UigtKHgpLDE4KSBeICgobG9uZyBsb25nKVJPVFIoKHgpLDQxKSA8IChsb25n IGxvbmcpKHgpKSA/IC0oeCkgOiAoeCkpDQorI2RlZmluZSBzaWdtYTAoeCkg ICAgICAgKFJPVFIoKHgpLDEpICBeIFJPVFIoKHgpLDgpICBeICgoKHgpPj43 KSA+ICh4KSkgPyAtKHgpIDogKHgpKQ0KKyNkZWZpbmUgc2lnbWExKHgpICAg ICAgIChST1RSKCh4KSwxOSkgXiBST1RSKCh4KSw2MSkgXiAoKGxvbmcgbG9u ZykoKHgpPj42KSA8IChsb25nIGxvbmcpKHgpKSA/IC0oeCkgOiAoeCkpDQor I2RlZmluZSBDaCh4LHkseikgICAgICAgKCgoeCkgJiAoeSkpIF4gKCh+KHgp KSAmICh6KSkpDQorI2RlZmluZSBNYWooeCx5LHopICAgICAgKCgoeCkgJiAo eSkpIF4gKCh4KSAmICh6KSkgXiAoKHkpICYgKHopKSkNCisNCisjZGVmaW5l IFJPVU5EXzAwXzE1KGksYSxiLGMsZCxlLGYsZyxoKSAgICAgICAgICBkbyB7 ICAgIFwNCisgICAgICAgIFQxICs9IGggKyBTaWdtYTEoZSkgKyBDaChlLGYs ZykgKyBLNTEyW2ldOyAgICAgIFwNCisgICAgICAgIGggPSBTaWdtYTAoYSkg KyBNYWooYSxiLGMpOyAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAg IGQgKz0gVDE7ICAgICAgICBoICs9IFQxOyAgICAgICAgICAgICAgICB9IHdo aWxlICgwKQ0KKyNkZWZpbmUgUk9VTkRfMTZfODAoaSxqLGEsYixjLGQsZSxm LGcsaCxYKSAgICAgIGRvIHsgICAgXA0KKyAgICAgICAgczAgPSBYWyhqKzEp JjB4MGZdOyAgICAgczAgPSBzaWdtYTAoczApOyAgICAgICAgXA0KKyAgICAg ICAgczEgPSBYWyhqKzE0KSYweDBmXTsgICAgczEgPSBzaWdtYTEoczEpOyAg ICAgICAgXA0KKyAgICAgICAgVDEgPSBYWyhqKSYweDBmXSArPSBzMCArIHMx ICsgWFsoais5KSYweDBmXTsgICAgXA0KKyAgICAgICAgUk9VTkRfMDBfMTUo aStqLGEsYixjLGQsZSxmLGcsaCk7ICAgICAgICAgICAgICAgfSB3aGlsZSAo MCkNCit2b2lkIHNoYTUxMl9ibG9ja19kYXRhX29yZGVyKFNIQTUxMl9DVFgg KmN0eCwgY29uc3Qgdm9pZCAqaW4sDQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bSkNCit7DQorICAgIGNv bnN0IFNIQV9MT05HNjQgKlcgPSBpbjsNCisgICAgU0hBX0xPTkc2NCBhLCBi LCBjLCBkLCBlLCBmLCBnLCBoLCBzMCwgczEsIFQxOw0KKyAgICBTSEFfTE9O RzY0IFhbMTZdOw0KKyAgICBpbnQgaTsNCisNCisgICAgd2hpbGUgKG51bS0t KSB7DQorDQorICAgICAgICBhID0gY3R4LT5oWzBdOw0KKyAgICAgICAgYiA9 IGN0eC0+aFsxXTsNCisgICAgICAgIGMgPSBjdHgtPmhbMl07DQorICAgICAg ICBkID0gY3R4LT5oWzNdOw0KKyAgICAgICAgZSA9IGN0eC0+aFs0XTsNCisg ICAgICAgIGYgPSBjdHgtPmhbNV07DQorICAgICAgICBnID0gY3R4LT5oWzZd Ow0KKyAgICAgICAgaCA9IGN0eC0+aFs3XTsNCisNCisgICAgICAgIFQxID0g WFswXSA9IFBVTEw2NChXWzBdKTsNCisgICAgICAgIFJPVU5EXzAwXzE1KDAs IGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgpOw0KKyAgICAgICAgVDEgPSBYWzFd ID0gUFVMTDY0KFdbMV0pOw0KKyAgICAgICAgUk9VTkRfMDBfMTUoMSwgaCwg YSwgYiwgYywgZCwgZSwgZiwgZyk7DQorICAgICAgICBUMSA9IFhbMl0gPSBQ VUxMNjQoV1syXSk7DQorICAgICAgICBST1VORF8wMF8xNSgyLCBnLCBoLCBh LCBiLCBjLCBkLCBlLCBmKTsNCisgICAgICAgIFQxID0gWFszXSA9IFBVTEw2 NChXWzNdKTsNCisgICAgICAgIFJPVU5EXzAwXzE1KDMsIGYsIGcsIGgsIGEs IGIsIGMsIGQsIGUpOw0KKyAgICAgICAgVDEgPSBYWzRdID0gUFVMTDY0KFdb NF0pOw0KKyAgICAgICAgUk9VTkRfMDBfMTUoNCwgZSwgZiwgZywgaCwgYSwg YiwgYywgZCk7DQorICAgICAgICBUMSA9IFhbNV0gPSBQVUxMNjQoV1s1XSk7 DQorICAgICAgICBST1VORF8wMF8xNSg1LCBkLCBlLCBmLCBnLCBoLCBhLCBi LCBjKTsNCisgICAgICAgIFQxID0gWFs2XSA9IFBVTEw2NChXWzZdKTsNCisg ICAgICAgIFJPVU5EXzAwXzE1KDYsIGMsIGQsIGUsIGYsIGcsIGgsIGEsIGIp Ow0KKyAgICAgICAgVDEgPSBYWzddID0gUFVMTDY0KFdbN10pOw0KKyAgICAg ICAgUk9VTkRfMDBfMTUoNywgYiwgYywgZCwgZSwgZiwgZywgaCwgYSk7DQor ICAgICAgICBUMSA9IFhbOF0gPSBQVUxMNjQoV1s4XSk7DQorICAgICAgICBS T1VORF8wMF8xNSg4LCBhLCBiLCBjLCBkLCBlLCBmLCBnLCBoKTsNCisgICAg ICAgIFQxID0gWFs5XSA9IFBVTEw2NChXWzldKTsNCisgICAgICAgIFJPVU5E XzAwXzE1KDksIGgsIGEsIGIsIGMsIGQsIGUsIGYsIGcpOw0KKyAgICAgICAg VDEgPSBYWzEwXSA9IFBVTEw2NChXWzEwXSk7DQorICAgICAgICBST1VORF8w MF8xNSgxMCwgZywgaCwgYSwgYiwgYywgZCwgZSwgZik7DQorICAgICAgICBU MSA9IFhbMTFdID0gUFVMTDY0KFdbMTFdKTsNCisgICAgICAgIFJPVU5EXzAw XzE1KDExLCBmLCBnLCBoLCBhLCBiLCBjLCBkLCBlKTsNCisgICAgICAgIFQx ID0gWFsxMl0gPSBQVUxMNjQoV1sxMl0pOw0KKyAgICAgICAgUk9VTkRfMDBf MTUoMTIsIGUsIGYsIGcsIGgsIGEsIGIsIGMsIGQpOw0KKyAgICAgICAgVDEg PSBYWzEzXSA9IFBVTEw2NChXWzEzXSk7DQorICAgICAgICBST1VORF8wMF8x NSgxMywgZCwgZSwgZiwgZywgaCwgYSwgYiwgYyk7DQorICAgICAgICBUMSA9 IFhbMTRdID0gUFVMTDY0KFdbMTRdKTsNCisgICAgICAgIFJPVU5EXzAwXzE1 KDE0LCBjLCBkLCBlLCBmLCBnLCBoLCBhLCBiKTsNCisgICAgICAgIFQxID0g WFsxNV0gPSBQVUxMNjQoV1sxNV0pOw0KKyAgICAgICAgUk9VTkRfMDBfMTUo MTUsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIGEpOw0KKw0KKyAgICAgICAgZm9y IChpID0gMTY7IGkgPCA4MDsgaSArPSAxNikgew0KKyAgICAgICAgICAgIFJP VU5EXzE2XzgwKGksIDAsIGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIFgpOw0K KyAgICAgICAgICAgIFJPVU5EXzE2XzgwKGksIDEsIGgsIGEsIGIsIGMsIGQs IGUsIGYsIGcsIFgpOw0KKyAgICAgICAgICAgIFJPVU5EXzE2XzgwKGksIDIs IGcsIGgsIGEsIGIsIGMsIGQsIGUsIGYsIFgpOw0KKyAgICAgICAgICAgIFJP VU5EXzE2XzgwKGksIDMsIGYsIGcsIGgsIGEsIGIsIGMsIGQsIGUsIFgpOw0K KyAgICAgICAgICAgIFJPVU5EXzE2XzgwKGksIDQsIGUsIGYsIGcsIGgsIGEs IGIsIGMsIGQsIFgpOw0KKyAgICAgICAgICAgIFJPVU5EXzE2XzgwKGksIDUs IGQsIGUsIGYsIGcsIGgsIGEsIGIsIGMsIFgpOw0KKyAgICAgICAgICAgIFJP VU5EXzE2XzgwKGksIDYsIGMsIGQsIGUsIGYsIGcsIGgsIGEsIGIsIFgpOw0K KyAgICAgICAgICAgIFJPVU5EXzE2XzgwKGksIDcsIGIsIGMsIGQsIGUsIGYs IGcsIGgsIGEsIFgpOw0KKyAgICAgICAgICAgIFJPVU5EXzE2XzgwKGksIDgs IGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIFgpOw0KKyAgICAgICAgICAgIFJP VU5EXzE2XzgwKGksIDksIGgsIGEsIGIsIGMsIGQsIGUsIGYsIGcsIFgpOw0K KyAgICAgICAgICAgIFJPVU5EXzE2XzgwKGksIDEwLCBnLCBoLCBhLCBiLCBj LCBkLCBlLCBmLCBYKTsNCisgICAgICAgICAgICBST1VORF8xNl84MChpLCAx MSwgZiwgZywgaCwgYSwgYiwgYywgZCwgZSwgWCk7DQorICAgICAgICAgICAg Uk9VTkRfMTZfODAoaSwgMTIsIGUsIGYsIGcsIGgsIGEsIGIsIGMsIGQsIFgp Ow0KKyAgICAgICAgICAgIFJPVU5EXzE2XzgwKGksIDEzLCBkLCBlLCBmLCBn LCBoLCBhLCBiLCBjLCBYKTsNCisgICAgICAgICAgICBST1VORF8xNl84MChp LCAxNCwgYywgZCwgZSwgZiwgZywgaCwgYSwgYiwgWCk7DQorICAgICAgICAg ICAgUk9VTkRfMTZfODAoaSwgMTUsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIGEs IFgpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgY3R4LT5oWzBdICs9IGE7 DQorICAgICAgICBjdHgtPmhbMV0gKz0gYjsNCisgICAgICAgIGN0eC0+aFsy XSArPSBjOw0KKyAgICAgICAgY3R4LT5oWzNdICs9IGQ7DQorICAgICAgICBj dHgtPmhbNF0gKz0gZTsNCisgICAgICAgIGN0eC0+aFs1XSArPSBmOw0KKyAg ICAgICAgY3R4LT5oWzZdICs9IGc7DQorICAgICAgICBjdHgtPmhbN10gKz0g aDsNCisNCisgICAgICAgIFcgKz0gU0hBX0xCTE9DSzsNCisgICAgfQ0KK30N Cg== --_002_AM4PR0701MB2162B1578B69466A7FDEC294E4840AM4PR0701MB2162_--