From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 126216 invoked by alias); 13 Jan 2017 18:29:07 -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 126198 invoked by uid 89); 13 Jan 2017 18:29:06 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.7 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=no version=3.3.2 spammy=H*c:sk:HMHPRHH, H*MI:sk:HE1PR07, H*i:sk:HE1PR07, H*f:sk:HE1PR07 X-HELO: COL004-OMC4S12.hotmail.com Received: from col004-omc4s12.hotmail.com (HELO COL004-OMC4S12.hotmail.com) (65.55.34.214) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 13 Jan 2017 18:28:56 +0000 Received: from EUR03-DB5-obe.outbound.protection.outlook.com ([65.55.34.199]) by COL004-OMC4S12.hotmail.com over TLS secured channel with Microsoft SMTPSVC(7.5.7601.23008); Fri, 13 Jan 2017 10:28:54 -0800 Received: from DB5EUR03FT039.eop-EUR03.prod.protection.outlook.com (10.152.20.58) by DB5EUR03HT069.eop-EUR03.prod.protection.outlook.com (10.152.20.212) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.803.8; Fri, 13 Jan 2017 18:28:52 +0000 Received: from AM4PR0701MB2162.eurprd07.prod.outlook.com (10.152.20.54) by DB5EUR03FT039.mail.protection.outlook.com (10.152.21.120) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.803.8 via Frontend Transport; Fri, 13 Jan 2017 18:28:51 +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.0860.008; Fri, 13 Jan 2017 18:28:52 +0000 From: Bernd Edlinger To: "Richard Earnshaw (lists)" , "gcc-patches@gcc.gnu.org" CC: Ramana Radhakrishnan , Kyrill Tkachov , Wilco Dijkstra Subject: Re: [PATCH, ARM] correctly encode the CC reg data flow Date: Fri, 13 Jan 2017 18:29:00 -0000 Message-ID: References: <3f5e5538-5dd3-b416-904f-b87f115336fe@arm.com> 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:5FB13527381EA445DB43D66E3884A683435DB80707B7377FC6B9978FA78BE7B5;UpperCasedChecksum:6E77F46C953FA6F5A7ED406B4010D3B1C456681446EC460CDF00EF877E4FA170;SizeAsReceived:7929;Count:37 x-ms-exchange-messagesentrepresentingtype: 1 x-incomingheadercount: 37 x-eopattributedmessage: 0 x-microsoft-exchange-diagnostics: 1;DB5EUR03HT069;7:ifAlz6y7IkqTQIPqGwkHkmOvPs6uvH6FXF+gDnZfMb1AnMjYBqASy6K7lead4t/K+ByRtMdB0YUGFNUociZfHCQQm2xDSOD4UcZ8hxHiKY2BH4UYNg1nLdJ5nINCmOwU2i4jxzp2ep9rzX2tFEE3zrCbmak87965yDeUhSjDvY+TH7mSz2ofo5FMC1Ql77gU7z223RF/M/ue7CMdYO2q2TiB/IYVGcDnkbmNpdlSomuaCw//HSwtHOBPTD/4B7R8ZATaJt7wNW4fOofR3o6ox+mBUo5Xj1RqBbg1I0JhCxL3N+zMpp7F4HJFss9yRccaDD7zOjxlPfA+WJzRGaHl+nOiA739dnW3U3ABgJ6SY6xezX/tno0ALw/waF9k2zIhkt9E5pvSUrQEQ1a1kzeuF9ybnEWEHduL6pZgaZtVxBKyi9B1zV6/YnsKobhzIJTjnQi0N7I/rjBeMfLWZCjQWA== x-forefront-antispam-report: EFV:NLI;SFV:NSPM;SFS:(10019020)(98900003);DIR:OUT;SFP:1102;SCL:1;SRVR:DB5EUR03HT069;H:AM4PR0701MB2162.eurprd07.prod.outlook.com;FPR:;SPF:None;LANG:en; x-ms-office365-filtering-correlation-id: 036b5bee-6265-44a9-011d-08d43be205b4 x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(1601124038)(5061506344)(5061507293)(1603103113)(1601125047)(1701031023);SRVR:DB5EUR03HT069; x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(444111334)(444112120)(432015012)(102415395)(82015046);SRVR:DB5EUR03HT069;BCL:0;PCL:0;RULEID:;SRVR:DB5EUR03HT069; x-forefront-prvs: 018632C080 spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: multipart/mixed; boundary="_002_AM4PR0701MB216294C83C28945778C84345E4780AM4PR0701MB2162_" MIME-Version: 1.0 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Jan 2017 18:28:52.3924 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Internet X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5EUR03HT069 X-SW-Source: 2017-01/txt/msg00988.txt.bz2 --_002_AM4PR0701MB216294C83C28945778C84345E4780AM4PR0701MB2162_ Content-Type: text/plain; charset="Windows-1252" Content-ID: <45037BBD7159C248B0C7F34E06AC9BBD@eurprd07.prod.outlook.com> Content-Transfer-Encoding: quoted-printable Content-length: 5956 On 01/13/17 17:10, Bernd Edlinger wrote: > On 01/13/17 14:50, Richard Earnshaw (lists) wrote: >> On 18/12/16 12:58, Bernd Edlinger wrote: >>> Hi, >>> >>> this is related to PR77308, the follow-up patch will depend on this one. >>> >>> When trying the split the *arm_cmpdi_insn and *arm_cmpdi_unsigned >>> before reload, a mis-compilation in libgcc function __gnu_satfractdasq >>> was discovered, see [1] for more details. >>> >>> The reason seems to be that when the *arm_cmpdi_insn is directly >>> followed by a *arm_cmpdi_unsigned instruction, both are split >>> up into this: >>> >>> [(set (reg:CC CC_REGNUM) >>> (compare:CC (match_dup 0) (match_dup 1))) >>> (parallel [(set (reg:CC CC_REGNUM) >>> (compare:CC (match_dup 3) (match_dup 4))) >>> (set (match_dup 2) >>> (minus:SI (match_dup 5) >>> (ltu:SI (reg:CC_C CC_REGNUM) (const_int >>> 0))))])] >>> >>> [(set (reg:CC CC_REGNUM) >>> (compare:CC (match_dup 2) (match_dup 3))) >>> (cond_exec (eq:SI (reg:CC CC_REGNUM) (const_int 0)) >>> (set (reg:CC CC_REGNUM) >>> (compare:CC (match_dup 0) (match_dup 1))))] >>> >>> The problem is that the reg:CC from the *subsi3_carryin_compare >>> is not mentioning that the reg:CC is also dependent on the reg:CC >>> from before. Therefore the *arm_cmpsi_insn appears to be >>> redundant and thus got removed, because the data values are identical. >>> >>> I think that applies to a number of similar pattern where data >>> flow is happening through the CC reg. >>> >>> So this is a kind of correctness issue, and should be fixed >>> independently from the optimization issue PR77308. >>> >>> Therefore I think the patterns need to specify the true >>> value that will be in the CC reg, in order for cse to >>> know what the instructions are really doing. >>> >>> >>> Bootstrapped and reg-tested on arm-linux-gnueabihf. >>> Is it OK for trunk? >>> >> >> I agree you've found a valid problem here, but I have some issues with >> the patch itself. >> >> >> (define_insn_and_split "subdi3_compare1" >> [(set (reg:CC_NCV CC_REGNUM) >> (compare:CC_NCV >> (match_operand:DI 1 "register_operand" "r") >> (match_operand:DI 2 "register_operand" "r"))) >> (set (match_operand:DI 0 "register_operand" "=3D&r") >> (minus:DI (match_dup 1) (match_dup 2)))] >> "TARGET_32BIT" >> "#" >> "&& reload_completed" >> [(parallel [(set (reg:CC CC_REGNUM) >> (compare:CC (match_dup 1) (match_dup 2))) >> (set (match_dup 0) (minus:SI (match_dup 1) (match_dup 2)))]) >> (parallel [(set (reg:CC_C CC_REGNUM) >> (compare:CC_C >> (zero_extend:DI (match_dup 4)) >> (plus:DI (zero_extend:DI (match_dup 5)) >> (ltu:DI (reg:CC_C CC_REGNUM) (const_int 0))))) >> (set (match_dup 3) >> (minus:SI (minus:SI (match_dup 4) (match_dup 5)) >> (ltu:SI (reg:CC_C CC_REGNUM) (const_int 0))))])] >> >> >> This pattern is now no-longer self consistent in that before the split >> the overall result for the condition register is in mode CC_NCV, but >> afterwards it is just CC_C. >> >> I think CC_NCV is correct mode (the N, C and V bits all correctly >> reflect the result of the 64-bit comparison), but that then implies that >> the cc mode of subsi3_carryin_compare is incorrect as well and should in >> fact also be CC_NCV. Thinking about this pattern, I'm inclined to agree >> that CC_NCV is the correct mode for this operation >> >> I'm not sure if there are other consequences that will fall out from >> fixing this (it's possible that we might need a change to select_cc_mode >> as well). >> > > Yes, this is still a bit awkward... > > The N and V bit will be the correct result for the subdi3_compare1 > a 64-bit comparison, but zero_extend:DI (match_dup 4) (plus:DI ...) > only gets the C bit correct, the expression for N and V is a different > one. > > It probably works, because the subsi3_carryin_compare instruction sets > more CC bits than the pattern does explicitly specify the value. > We know the subsi3_carryin_compare also computes the NV bits, but it is > hard to write down the correct rtl expression for it. > > In theory the pattern should describe everything correctly, > maybe, like: > > set (reg:CC_C CC_REGNUM) > (compare:CC_C > (zero_extend:DI (match_dup 4)) > (plus:DI (zero_extend:DI (match_dup 5)) > (ltu:DI (reg:CC_C CC_REGNUM) (const_int 0))))) > set (reg:CC_NV CC_REGNUM) > (compare:CC_NV > (match_dup 4)) > (plus:SI (match_dup 5) (ltu:SI (reg:CC_C CC_REGNUM) (const_int 0))) > set (match_dup 3) > (minus:SI (minus:SI (match_dup 4) (match_dup 5)) > (ltu:SI (reg:CC_C CC_REGNUM) (const_int 0))))) > > > But I doubt that will work to set CC_REGNUM with two different modes > in parallel? > > Another idea would be to invent a CC_CNV_NOOV mode, that implicitly > defines C from the DImode result, and NV from the SImode result, > similar to the CC_NOOVmode, that also leaves something open what > bits it really defines? > > > What do you think? > > > Thanks > Bernd. I think maybe the right solution is to invent a new CCmode that defines C as if the comparison is done in DImode but N and V as if the comparison is done in SImode. I thought maybe I would call it CC_NCV_CIC (CIC =3D Carry-In-Compare), furthermore I think the CC_NOOV should be renamed to CC_NZ (because only N and Z are set correctly), but in a different patch of course. Attached is a new version that implements the new CCmode. How do you like this new version? It seems to be able to build a cross-compiler at least. I will start a new bootstrap with this new patch, but that can take some time until I have definitive results. Is there still a chance that it can go into gcc-7 or should it wait for the next stage1? Thanks Bernd. --_002_AM4PR0701MB216294C83C28945778C84345E4780AM4PR0701MB2162_ 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=10956; creation-date="Fri, 13 Jan 2017 18:28:51 GMT"; modification-date="Fri, 13 Jan 2017 18:28:51 GMT" Content-ID: Content-Transfer-Encoding: base64 Content-length: 14852 MjAxNi0wMS0xMyAgQmVybmQgRWRsaW5nZXIgIDxiZXJuZC5lZGxpbmdlckBo b3RtYWlsLmRlPg0KDQoJUFIgdGFyZ2V0Lzc3MzA4DQoJKiBjb25maWcvYXJt L2FybS1tb2Rlcy5kZWYgKENDX05DVl9DSUMpOiBOZXcgbW9kZS4NCgkqIGNv bmZpZy9hcm0vYXJtLm1kIChhZGRkaTNfY29tcGFyZVYsICphZGRzaTNfY29t cGFyZVZfdXBwZXIsDQoJYWRkZGkzX2NvbXBhcmVDLCAqYWRkc2kzX2NvbXBh cmVDX3VwcGVyLCBzdWJkaTNfY29tcGFyZTEsDQoJc3Vic2kzX2NhcnJ5aW5f Y29tcGFyZSwgc3Vic2kzX2NhcnJ5aW5fY29tcGFyZV9jb25zdCwNCgluZWdk aTJfY29tcGFyZSwgKm5lZ3NpMl9jYXJyeWluX2NvbXBhcmUsDQoJKmFybV9j bXBkaV9pbnNuKTogRml4IHRoZSBDQyByZWcgZGF0YWZsb3cuDQoNCkluZGV4 OiBnY2MvY29uZmlnL2FybS9hcm0tbW9kZXMuZGVmDQo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQotLS0gZ2NjL2NvbmZpZy9hcm0vYXJtLW1vZGVzLmRlZgko cmV2aXNpb24gMjQ0NDM5KQ0KKysrIGdjYy9jb25maWcvYXJtL2FybS1tb2Rl cy5kZWYJKHdvcmtpbmcgY29weSkNCkBAIC0zOCw2ICszOCw4IEBADQogICAg KHVzZWQgZm9yIERJbW9kZSB1bnNpZ25lZCBjb21wYXJpc29ucykuDQogICAg Q0NfTkNWbW9kZSBzaG91bGQgYmUgdXNlZCBpZiBvbmx5IHRoZSBOLCBDLCBh bmQgViBmbGFncyBhcmUgY29ycmVjdA0KICAgICh1c2VkIGZvciBESW1vZGUg c2lnbmVkIGNvbXBhcmlzb25zKS4NCisgICBDQ19OQ1ZfQ0lDbW9kZSBkZWZp bmVzIE4gYW5kIFYgaW4gU0ltb2RlIGFuZCBDIGluIERJbW9kZQ0KKyAgICh1 c2VkIGZvciBjYXJyeWluX2NvbXBhcmUgcGF0dGVybnMpLg0KICAgIENDbW9k ZSBzaG91bGQgYmUgdXNlZCBvdGhlcndpc2UuICAqLw0KIA0KIENDX01PREUg KENDX05PT1YpOw0KQEAgLTQ0LDYgKzQ2LDcgQEANCiBDQ19NT0RFIChDQ19a KTsNCiBDQ19NT0RFIChDQ19DWik7DQogQ0NfTU9ERSAoQ0NfTkNWKTsNCitD Q19NT0RFIChDQ19OQ1ZfQ0lDKTsNCiBDQ19NT0RFIChDQ19TV1ApOw0KIEND X01PREUgKENDRlApOw0KIENDX01PREUgKENDRlBFKTsNCkluZGV4OiBnY2Mv Y29uZmlnL2FybS9hcm0ubWQNCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0t LSBnY2MvY29uZmlnL2FybS9hcm0ubWQJKHJldmlzaW9uIDI0NDQzOSkNCisr KyBnY2MvY29uZmlnL2FybS9hcm0ubWQJKHdvcmtpbmcgY29weSkNCkBAIC02 NjksMTcgKzY2OSwxNSBAQA0KIAkgICAgICAoc2V0IChtYXRjaF9kdXAgMCkg KHBsdXM6U0kgKG1hdGNoX2R1cCAxKSAobWF0Y2hfZHVwIDIpKSldKQ0KICAg IChwYXJhbGxlbCBbKHNldCAocmVnOkNDX1YgQ0NfUkVHTlVNKQ0KIAkJICAg KG5lOkNDX1YNCi0JCSAgICAocGx1czpESSAocGx1czpESQ0KLQkJCSAgICAg IChzaWduX2V4dGVuZDpESSAobWF0Y2hfZHVwIDQpKQ0KLQkJCSAgICAgIChz aWduX2V4dGVuZDpESSAobWF0Y2hfZHVwIDUpKSkNCi0JCQkgICAgIChsdHU6 REkgKHJlZzpDQ19DIENDX1JFR05VTSkgKGNvbnN0X2ludCAwKSkpDQotCQkg ICAgKHBsdXM6REkgKHNpZ25fZXh0ZW5kOkRJDQotCQkJICAgICAgKHBsdXM6 U0kgKG1hdGNoX2R1cCA0KSAobWF0Y2hfZHVwIDUpKSkNCi0JCQkgICAgIChs dHU6REkgKHJlZzpDQ19DIENDX1JFR05VTSkgKGNvbnN0X2ludCAwKSkpKSkN Ci0JICAgICAoc2V0IChtYXRjaF9kdXAgMykgKHBsdXM6U0kgKHBsdXM6U0kN Ci0JCQkJCSAgKG1hdGNoX2R1cCA0KSAobWF0Y2hfZHVwIDUpKQ0KLQkJCQkJ IChsdHU6U0kgKHJlZzpDQ19DIENDX1JFR05VTSkNCi0JCQkJCQkgKGNvbnN0 X2ludCAwKSkpKV0pXQ0KKwkJICAgICAocGx1czpESSAocGx1czpESSAoc2ln bl9leHRlbmQ6REkgKG1hdGNoX2R1cCA0KSkNCisJCQkJICAgICAgIChzaWdu X2V4dGVuZDpESSAobWF0Y2hfZHVwIDUpKSkNCisJCQkgICAgICAobHR1OkRJ IChyZWc6Q0NfQyBDQ19SRUdOVU0pIChjb25zdF9pbnQgMCkpKQ0KKwkJICAg IChzaWduX2V4dGVuZDpESQ0KKwkJICAgICAgKHBsdXM6U0kgKHBsdXM6U0kg KG1hdGNoX2R1cCA0KSAobWF0Y2hfZHVwIDUpKQ0KKwkJCSAgICAgICAobHR1 OlNJIChyZWc6Q0NfQyBDQ19SRUdOVU0pIChjb25zdF9pbnQgMCkpKSkpKQ0K KwkgICAgICAoc2V0IChtYXRjaF9kdXAgMykgKHBsdXM6U0kgKHBsdXM6U0kg KG1hdGNoX2R1cCA0KSAobWF0Y2hfZHVwIDUpKQ0KKwkJCQkJICAobHR1OlNJ IChyZWc6Q0NfQyBDQ19SRUdOVU0pDQorCQkJCQkJICAoY29uc3RfaW50IDAp KSkpXSldDQogICAiDQogICB7DQogICAgIG9wZXJhbmRzWzNdID0gZ2VuX2hp Z2hwYXJ0IChTSW1vZGUsIG9wZXJhbmRzWzBdKTsNCkBAIC03MTMsMTMgKzcx MSwxMyBAQA0KICAgWyhzZXQgKHJlZzpDQ19WIENDX1JFR05VTSkNCiAJKG5l OkNDX1YNCiAJICAocGx1czpESQ0KLQkgICAocGx1czpESQ0KLQkgICAgKHNp Z25fZXh0ZW5kOkRJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29w ZXJhbmQiICJyIikpDQotCSAgICAoc2lnbl9leHRlbmQ6REkgKG1hdGNoX29w ZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpDQotCSAgIChs dHU6REkgKHJlZzpDQ19DIENDX1JFR05VTSkgKGNvbnN0X2ludCAwKSkpDQot CSAgKHBsdXM6REkgKHNpZ25fZXh0ZW5kOkRJDQotCQkgICAgKHBsdXM6U0kg KG1hdGNoX2R1cCAxKSAobWF0Y2hfZHVwIDIpKSkNCi0JCSAgIChsdHU6REkg KHJlZzpDQ19DIENDX1JFR05VTSkgKGNvbnN0X2ludCAwKSkpKSkNCisJICAg IChwbHVzOkRJDQorCSAgICAgIChzaWduX2V4dGVuZDpESSAobWF0Y2hfb3Bl cmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKQ0KKwkgICAgICAo c2lnbl9leHRlbmQ6REkgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJf b3BlcmFuZCIgInIiKSkpDQorCSAgICAobHR1OkRJIChyZWc6Q0NfQyBDQ19S RUdOVU0pIChjb25zdF9pbnQgMCkpKQ0KKwkgIChzaWduX2V4dGVuZDpESSAo cGx1czpTSSAocGx1czpTSSAobWF0Y2hfZHVwIDEpIChtYXRjaF9kdXAgMikp DQorCQkJCSAgIChsdHU6U0kgKHJlZzpDQ19DIENDX1JFR05VTSkNCisJCQkJ CSAgIChjb25zdF9pbnQgMCkpKSkpKQ0KICAgIChzZXQgKG1hdGNoX29wZXJh bmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikNCiAJKHBsdXM6U0kN CiAJIChwbHVzOlNJIChtYXRjaF9kdXAgMSkgKG1hdGNoX2R1cCAyKSkNCkBA IC03NDgsMTcgKzc0NiwxNSBAQA0KIAkgICAgICAoc2V0IChtYXRjaF9kdXAg MCkgKHBsdXM6U0kgKG1hdGNoX2R1cCAxKSAobWF0Y2hfZHVwIDIpKSldKQ0K ICAgIChwYXJhbGxlbCBbKHNldCAocmVnOkNDX0MgQ0NfUkVHTlVNKQ0KIAkJ ICAgKG5lOkNDX0MNCi0JCSAgICAocGx1czpESSAocGx1czpESQ0KLQkJCSAg ICAgICh6ZXJvX2V4dGVuZDpESSAobWF0Y2hfZHVwIDQpKQ0KLQkJCSAgICAg ICh6ZXJvX2V4dGVuZDpESSAobWF0Y2hfZHVwIDUpKSkNCi0JCQkgICAgIChs dHU6REkgKHJlZzpDQ19DIENDX1JFR05VTSkgKGNvbnN0X2ludCAwKSkpDQot CQkgICAgKHBsdXM6REkgKHplcm9fZXh0ZW5kOkRJDQotCQkJICAgICAgKHBs dXM6U0kgKG1hdGNoX2R1cCA0KSAobWF0Y2hfZHVwIDUpKSkNCi0JCQkgICAg IChsdHU6REkgKHJlZzpDQ19DIENDX1JFR05VTSkgKGNvbnN0X2ludCAwKSkp KSkNCi0JICAgICAoc2V0IChtYXRjaF9kdXAgMykgKHBsdXM6U0kNCi0JCQkJ IChwbHVzOlNJIChtYXRjaF9kdXAgNCkgKG1hdGNoX2R1cCA1KSkNCi0JCQkJ IChsdHU6U0kgKHJlZzpDQ19DIENDX1JFR05VTSkNCi0JCQkJCSAoY29uc3Rf aW50IDApKSkpXSldDQorCQkgICAgIChwbHVzOkRJIChwbHVzOkRJICh6ZXJv X2V4dGVuZDpESSAobWF0Y2hfZHVwIDQpKQ0KKwkJCQkgICAgICAgKHplcm9f ZXh0ZW5kOkRJIChtYXRjaF9kdXAgNSkpKQ0KKwkJCSAgICAgIChsdHU6REkg KHJlZzpDQ19DIENDX1JFR05VTSkgKGNvbnN0X2ludCAwKSkpDQorCQkgICAg KHplcm9fZXh0ZW5kOkRJDQorCQkgICAgICAocGx1czpTSSAocGx1czpTSSAo bWF0Y2hfZHVwIDQpIChtYXRjaF9kdXAgNSkpDQorCQkJICAgICAgIChsdHU6 U0kgKHJlZzpDQ19DIENDX1JFR05VTSkgKGNvbnN0X2ludCAwKSkpKSkpDQor CSAgICAgIChzZXQgKG1hdGNoX2R1cCAzKSAocGx1czpTSSAocGx1czpTSSAo bWF0Y2hfZHVwIDQpIChtYXRjaF9kdXAgNSkpDQorCQkJCQkgIChsdHU6U0kg KHJlZzpDQ19DIENDX1JFR05VTSkNCisJCQkJCQkgIChjb25zdF9pbnQgMCkp KSldKV0NCiAgICINCiAgIHsNCiAgICAgb3BlcmFuZHNbM10gPSBnZW5faGln aHBhcnQgKFNJbW9kZSwgb3BlcmFuZHNbMF0pOw0KQEAgLTc3NywxNyArNzcz LDE2IEBADQogICBbKHNldCAocmVnOkNDX0MgQ0NfUkVHTlVNKQ0KIAkobmU6 Q0NfQw0KIAkgIChwbHVzOkRJDQotCSAgIChwbHVzOkRJDQotCSAgICAoemVy b19leHRlbmQ6REkgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3Bl cmFuZCIgInIiKSkNCi0JICAgICh6ZXJvX2V4dGVuZDpESSAobWF0Y2hfb3Bl cmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSkNCi0JICAgKGx0 dTpESSAocmVnOkNDX0MgQ0NfUkVHTlVNKSAoY29uc3RfaW50IDApKSkNCi0J ICAocGx1czpESSAoemVyb19leHRlbmQ6REkNCi0JCSAgICAocGx1czpTSSAo bWF0Y2hfZHVwIDEpIChtYXRjaF9kdXAgMikpKQ0KLQkJICAgKGx0dTpESSAo cmVnOkNDX0MgQ0NfUkVHTlVNKSAoY29uc3RfaW50IDApKSkpKQ0KKwkgICAg KHBsdXM6REkNCisJICAgICAgKHplcm9fZXh0ZW5kOkRJIChtYXRjaF9vcGVy YW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpDQorCSAgICAgICh6 ZXJvX2V4dGVuZDpESSAobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9v cGVyYW5kIiAiciIpKSkNCisJICAgIChsdHU6REkgKHJlZzpDQ19DIENDX1JF R05VTSkgKGNvbnN0X2ludCAwKSkpDQorCSAgKHplcm9fZXh0ZW5kOkRJDQor CSAgICAocGx1czpTSSAocGx1czpTSSAobWF0Y2hfZHVwIDEpIChtYXRjaF9k dXAgMikpDQorCQkgICAgIChsdHU6U0kgKHJlZzpDQ19DIENDX1JFR05VTSkg KGNvbnN0X2ludCAwKSkpKSkpDQogICAgKHNldCAobWF0Y2hfb3BlcmFuZDpT SSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQ0KLQkocGx1czpTSQ0KLQkg KHBsdXM6U0kgKG1hdGNoX2R1cCAxKSAobWF0Y2hfZHVwIDIpKQ0KLQkgKGx0 dTpTSSAocmVnOkNDX0MgQ0NfUkVHTlVNKSAoY29uc3RfaW50IDApKSkpXQ0K KwkocGx1czpTSSAocGx1czpTSSAobWF0Y2hfZHVwIDEpIChtYXRjaF9kdXAg MikpDQorCQkgKGx0dTpTSSAocmVnOkNDX0MgQ0NfUkVHTlVNKSAoY29uc3Rf aW50IDApKSkpXQ0KICAgIlRBUkdFVF8zMkJJVCINCiAgICJhZGNzJT9cXHQl MCwgJTEsICUyIg0KICAgWyhzZXRfYXR0ciAiY29uZHMiICJzZXQiKQ0KQEAg LTEwODYsOCArMTA4MSw4IEBADQogfSkNCiANCiAoZGVmaW5lX2luc25fYW5k X3NwbGl0ICJzdWJkaTNfY29tcGFyZTEiDQotICBbKHNldCAocmVnOkNDIEND X1JFR05VTSkNCi0JKGNvbXBhcmU6Q0MNCisgIFsoc2V0IChyZWc6Q0NfTkNW IENDX1JFR05VTSkNCisJKGNvbXBhcmU6Q0NfTkNWDQogCSAgKG1hdGNoX29w ZXJhbmQ6REkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKQ0KIAkgIChtYXRj aF9vcGVyYW5kOkRJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKQ0KICAg IChzZXQgKG1hdGNoX29wZXJhbmQ6REkgMCAicmVnaXN0ZXJfb3BlcmFuZCIg Ij0mciIpDQpAQCAtMTA5OCwxMCArMTA5MywxNCBAQA0KICAgWyhwYXJhbGxl bCBbKHNldCAocmVnOkNDIENDX1JFR05VTSkNCiAJCSAgIChjb21wYXJlOkND IChtYXRjaF9kdXAgMSkgKG1hdGNoX2R1cCAyKSkpDQogCSAgICAgIChzZXQg KG1hdGNoX2R1cCAwKSAobWludXM6U0kgKG1hdGNoX2R1cCAxKSAobWF0Y2hf ZHVwIDIpKSldKQ0KLSAgIChwYXJhbGxlbCBbKHNldCAocmVnOkNDIENDX1JF R05VTSkNCi0JCSAgIChjb21wYXJlOkNDIChtYXRjaF9kdXAgNCkgKG1hdGNo X2R1cCA1KSkpDQotCSAgICAgKHNldCAobWF0Y2hfZHVwIDMpIChtaW51czpT SSAobWludXM6U0kgKG1hdGNoX2R1cCA0KSAobWF0Y2hfZHVwIDUpKQ0KLQkJ CSAgICAgICAobHR1OlNJIChyZWc6Q0NfQyBDQ19SRUdOVU0pIChjb25zdF9p bnQgMCkpKSldKV0NCisgICAocGFyYWxsZWwgWyhzZXQgKHJlZzpDQ19OQ1Zf Q0lDIENDX1JFR05VTSkNCisJCSAgIChjb21wYXJlOkNDX05DVl9DSUMNCisJ CSAgICAgKHplcm9fZXh0ZW5kOkRJIChtYXRjaF9kdXAgNCkpDQorCQkgICAg IChwbHVzOkRJICh6ZXJvX2V4dGVuZDpESSAobWF0Y2hfZHVwIDUpKQ0KKwkJ CSAgICAgIChsdHU6REkgKHJlZzpDQ19DIENDX1JFR05VTSkgKGNvbnN0X2lu dCAwKSkpKSkNCisJICAgICAgKHNldCAobWF0Y2hfZHVwIDMpDQorCQkgICAo bWludXM6U0kgKG1pbnVzOlNJIChtYXRjaF9kdXAgNCkgKG1hdGNoX2R1cCA1 KSkNCisJCQkgICAgIChsdHU6U0kgKHJlZzpDQ19DIENDX1JFR05VTSkgKGNv bnN0X2ludCAwKSkpKV0pXQ0KICAgew0KICAgICBvcGVyYW5kc1szXSA9IGdl bl9oaWdocGFydCAoU0ltb2RlLCBvcGVyYW5kc1swXSk7DQogICAgIG9wZXJh bmRzWzBdID0gZ2VuX2xvd3BhcnQgKFNJbW9kZSwgb3BlcmFuZHNbMF0pOw0K QEAgLTExNTcsMTMgKzExNTYsMTUgQEANCiApDQogDQogKGRlZmluZV9pbnNu ICIqc3Vic2kzX2NhcnJ5aW5fY29tcGFyZSINCi0gIFsoc2V0IChyZWc6Q0Mg Q0NfUkVHTlVNKQ0KLSAgICAgICAgKGNvbXBhcmU6Q0MgKG1hdGNoX29wZXJh bmQ6U0kgMSAic19yZWdpc3Rlcl9vcGVyYW5kIiAiciIpDQotICAgICAgICAg ICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJzX3JlZ2lzdGVyX29w ZXJhbmQiICJyIikpKQ0KKyAgWyhzZXQgKHJlZzpDQ19OQ1ZfQ0lDIENDX1JF R05VTSkNCisJKGNvbXBhcmU6Q0NfTkNWX0NJQw0KKwkgICh6ZXJvX2V4dGVu ZDpESSAobWF0Y2hfb3BlcmFuZDpTSSAxICJzX3JlZ2lzdGVyX29wZXJhbmQi ICJyIikpDQorCSAgKHBsdXM6REkNCisJICAgICh6ZXJvX2V4dGVuZDpESSAo bWF0Y2hfb3BlcmFuZDpTSSAyICJzX3JlZ2lzdGVyX29wZXJhbmQiICJyIikp DQorCSAgICAobHR1OkRJIChyZWc6Q0NfQyBDQ19SRUdOVU0pIChjb25zdF9p bnQgMCkpKSkpDQogICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJzX3Jl Z2lzdGVyX29wZXJhbmQiICI9ciIpDQotICAgICAgICAobWludXM6U0kgKG1p bnVzOlNJIChtYXRjaF9kdXAgMSkNCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgKG1hdGNoX2R1cCAyKSkNCi0gICAgICAgICAgICAgICAgICAobHR1 OlNJIChyZWc6Q0NfQyBDQ19SRUdOVU0pIChjb25zdF9pbnQgMCkpKSldDQor CShtaW51czpTSSAobWludXM6U0kgKG1hdGNoX2R1cCAxKSAobWF0Y2hfZHVw IDIpKQ0KKwkJICAobHR1OlNJIChyZWc6Q0NfQyBDQ19SRUdOVU0pIChjb25z dF9pbnQgMCkpKSldDQogICAiVEFSR0VUXzMyQklUIg0KICAgInNiY3NcXHQl MCwgJTEsICUyIg0KICAgWyhzZXRfYXR0ciAiY29uZHMiICJzZXQiKQ0KQEAg LTExNzEsMTMgKzExNzIsMTUgQEANCiApDQogDQogKGRlZmluZV9pbnNuICIq c3Vic2kzX2NhcnJ5aW5fY29tcGFyZV9jb25zdCINCi0gIFsoc2V0IChyZWc6 Q0MgQ0NfUkVHTlVNKQ0KLSAgICAgICAgKGNvbXBhcmU6Q0MgKG1hdGNoX29w ZXJhbmQ6U0kgMSAicmVnX29yX2ludF9vcGVyYW5kIiAiciIpDQotICAgICAg ICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJhcm1fbm90X29w ZXJhbmQiICJLIikpKQ0KKyAgWyhzZXQgKHJlZzpDQ19OQ1ZfQ0lDIENDX1JF R05VTSkNCisJKGNvbXBhcmU6Q0NfTkNWX0NJQw0KKwkgICh6ZXJvX2V4dGVu ZDpESSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdfb3JfaW50X29wZXJhbmQi ICJyIikpDQorCSAgKHBsdXM6REkNCisJICAgICh6ZXJvX2V4dGVuZDpESSAo bWF0Y2hfb3BlcmFuZDpTSSAyICJhcm1fbm90X29wZXJhbmQiICJLIikpDQor CSAgICAobHR1OkRJIChyZWc6Q0NfQyBDQ19SRUdOVU0pIChjb25zdF9pbnQg MCkpKSkpDQogICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJzX3JlZ2lz dGVyX29wZXJhbmQiICI9ciIpDQotICAgICAgICAobWludXM6U0kgKHBsdXM6 U0kgKG1hdGNoX2R1cCAxKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg IChtYXRjaF9kdXAgMikpDQotICAgICAgICAgICAgICAgICAgKGx0dTpTSSAo cmVnOkNDX0MgQ0NfUkVHTlVNKSAoY29uc3RfaW50IDApKSkpXQ0KKwkobWlu dXM6U0kgKHBsdXM6U0kgKG1hdGNoX2R1cCAxKSAobWF0Y2hfZHVwIDIpKQ0K KwkJICAobHR1OlNJIChyZWc6Q0NfQyBDQ19SRUdOVU0pIChjb25zdF9pbnQg MCkpKSldDQogICAiVEFSR0VUXzMyQklUIg0KICAgInNiY3NcXHQlMCwgJTEs ICMlQjIiDQogICBbKHNldF9hdHRyICJjb25kcyIgInNldCIpDQpAQCAtNDYz NCw4ICs0NjM3LDggQEANCiANCiANCiAoZGVmaW5lX2luc25fYW5kX3NwbGl0 ICJuZWdkaTJfY29tcGFyZSINCi0gIFsoc2V0IChyZWc6Q0MgQ0NfUkVHTlVN KQ0KLQkoY29tcGFyZTpDQw0KKyAgWyhzZXQgKHJlZzpDQ19OQ1YgQ0NfUkVH TlVNKQ0KKwkoY29tcGFyZTpDQ19OQ1YNCiAJICAoY29uc3RfaW50IDApDQog CSAgKG1hdGNoX29wZXJhbmQ6REkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIjAs ciIpKSkNCiAgICAoc2V0IChtYXRjaF9vcGVyYW5kOkRJIDAgInJlZ2lzdGVy X29wZXJhbmQiICI9ciwmciIpDQpAQCAtNDY0Nyw4ICs0NjUwLDEyIEBADQog CQkgICAoY29tcGFyZTpDQyAoY29uc3RfaW50IDApIChtYXRjaF9kdXAgMSkp KQ0KIAkgICAgICAoc2V0IChtYXRjaF9kdXAgMCkgKG1pbnVzOlNJIChjb25z dF9pbnQgMCkNCiAJCQkJCSAgIChtYXRjaF9kdXAgMSkpKV0pDQotICAgKHBh cmFsbGVsIFsoc2V0IChyZWc6Q0MgQ0NfUkVHTlVNKQ0KLQkJICAgKGNvbXBh cmU6Q0MgKGNvbnN0X2ludCAwKSAobWF0Y2hfZHVwIDMpKSkNCisgICAocGFy YWxsZWwgWyhzZXQgKHJlZzpDQ19OQ1ZfQ0lDIENDX1JFR05VTSkNCisJCSAg IChjb21wYXJlOkNDX05DVl9DSUMNCisJCSAgICAgKGNvbnN0X2ludCAwKQ0K KwkJICAgICAocGx1czpESQ0KKwkJICAgICAgICh6ZXJvX2V4dGVuZDpESSAo bWF0Y2hfZHVwIDMpKQ0KKwkJICAgICAgIChsdHU6REkgKHJlZzpDQ19DIEND X1JFR05VTSkgKGNvbnN0X2ludCAwKSkpKSkNCiAJICAgICAoc2V0IChtYXRj aF9kdXAgMikNCiAJCSAgKG1pbnVzOlNJDQogCQkgICAobWludXM6U0kgKGNv bnN0X2ludCAwKSAobWF0Y2hfZHVwIDMpKQ0KQEAgLTQ3MDcsMTIgKzQ3MTQs MTQgQEANCiApDQogDQogKGRlZmluZV9pbnNuICIqbmVnc2kyX2NhcnJ5aW5f Y29tcGFyZSINCi0gIFsoc2V0IChyZWc6Q0MgQ0NfUkVHTlVNKQ0KLQkoY29t cGFyZTpDQyAoY29uc3RfaW50IDApDQotCQkgICAgKG1hdGNoX29wZXJhbmQ6 U0kgMSAic19yZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSkNCisgIFsoc2V0IChy ZWc6Q0NfTkNWX0NJQyBDQ19SRUdOVU0pDQorCShjb21wYXJlOkNDX05DVl9D SUMNCisJICAoY29uc3RfaW50IDApDQorCSAgKHBsdXM6REkNCisJICAgICh6 ZXJvX2V4dGVuZDpESSAobWF0Y2hfb3BlcmFuZDpTSSAxICJzX3JlZ2lzdGVy X29wZXJhbmQiICJyIikpDQorCSAgICAobHR1OkRJIChyZWc6Q0NfQyBDQ19S RUdOVU0pIChjb25zdF9pbnQgMCkpKSkpDQogICAgKHNldCAobWF0Y2hfb3Bl cmFuZDpTSSAwICJzX3JlZ2lzdGVyX29wZXJhbmQiICI9ciIpDQotCShtaW51 czpTSSAobWludXM6U0kgKGNvbnN0X2ludCAwKQ0KLQkJCSAgICAobWF0Y2hf ZHVwIDEpKQ0KKwkobWludXM6U0kgKG1pbnVzOlNJIChjb25zdF9pbnQgMCkg KG1hdGNoX2R1cCAxKSkNCiAJCSAgKGx0dTpTSSAocmVnOkNDX0MgQ0NfUkVH TlVNKSAoY29uc3RfaW50IDApKSkpXQ0KICAgIlRBUkdFVF9BUk0iDQogICAi cnNjc1xcdCUwLCAlMSwgIzAiDQpAQCAtNzM2MSwxMiArNzM3MCwxNSBAQA0K ICAgIiMiICAgOyAiY21wXFx0JVEwLCAlUTFcO3NiY3NcXHQlMiwgJVIwLCAl UjEiDQogICAiJiYgcmVsb2FkX2NvbXBsZXRlZCINCiAgIFsoc2V0IChyZWc6 Q0MgQ0NfUkVHTlVNKQ0KLSAgICAgICAgKGNvbXBhcmU6Q0MgKG1hdGNoX2R1 cCAwKSAobWF0Y2hfZHVwIDEpKSkNCi0gICAocGFyYWxsZWwgWyhzZXQgKHJl ZzpDQyBDQ19SRUdOVU0pDQotICAgICAgICAgICAgICAgICAgIChjb21wYXJl OkNDIChtYXRjaF9kdXAgMykgKG1hdGNoX2R1cCA0KSkpDQotICAgICAgICAg ICAgICAoc2V0IChtYXRjaF9kdXAgMikNCi0gICAgICAgICAgICAgICAgICAg KG1pbnVzOlNJIChtYXRjaF9kdXAgNSkNCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGx0dTpTSSAocmVnOkNDX0MgQ0NfUkVHTlVNKSAoY29uc3Rf aW50IDApKSkpXSldDQorCShjb21wYXJlOkNDIChtYXRjaF9kdXAgMCkgKG1h dGNoX2R1cCAxKSkpDQorICAgKHBhcmFsbGVsIFsoc2V0IChyZWc6Q0NfTkNW X0NJQyBDQ19SRUdOVU0pDQorCQkgICAoY29tcGFyZTpDQ19OQ1ZfQ0lDDQor CQkgICAgICh6ZXJvX2V4dGVuZDpESSAobWF0Y2hfZHVwIDMpKQ0KKwkJICAg ICAocGx1czpESSAoemVyb19leHRlbmQ6REkgKG1hdGNoX2R1cCA0KSkNCisJ CQkgICAgICAobHR1OkRJIChyZWc6Q0NfQyBDQ19SRUdOVU0pIChjb25zdF9p bnQgMCkpKSkpDQorCSAgICAgIChzZXQgKG1hdGNoX2R1cCAyKQ0KKwkJICAg KG1pbnVzOlNJIChtYXRjaF9kdXAgNSkNCisJCQkgICAgIChsdHU6U0kgKHJl ZzpDQ19DIENDX1JFR05VTSkgKGNvbnN0X2ludCAwKSkpKV0pXQ0KICAgew0K ICAgICBvcGVyYW5kc1szXSA9IGdlbl9oaWdocGFydCAoU0ltb2RlLCBvcGVy YW5kc1swXSk7DQogICAgIG9wZXJhbmRzWzBdID0gZ2VuX2xvd3BhcnQgKFNJ bW9kZSwgb3BlcmFuZHNbMF0pOw0K --_002_AM4PR0701MB216294C83C28945778C84345E4780AM4PR0701MB2162_--