From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 53987 invoked by alias); 28 Jul 2017 15:06:36 -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 53881 invoked by uid 89); 28 Jul 2017 15:06:26 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.4 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LOTSOFHASH,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 spammy=3519 X-HELO: EUR01-HE1-obe.outbound.protection.outlook.com Received: from mail-he1eur01on0045.outbound.protection.outlook.com (HELO EUR01-HE1-obe.outbound.protection.outlook.com) (104.47.0.45) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 28 Jul 2017 15:06:22 +0000 Received: from DB6PR0802MB2309.eurprd08.prod.outlook.com (10.172.228.13) by DB6PR0802MB2615.eurprd08.prod.outlook.com (10.172.252.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1282.10; Fri, 28 Jul 2017 15:06:18 +0000 Received: from DB6PR0802MB2309.eurprd08.prod.outlook.com ([fe80::bdbc:cb6a:43bc:90f9]) by DB6PR0802MB2309.eurprd08.prod.outlook.com ([fe80::bdbc:cb6a:43bc:90f9%17]) with mapi id 15.01.1282.023; Fri, 28 Jul 2017 15:06:18 +0000 From: Tamar Christina To: James Greenhalgh CC: Richard Sandiford , GCC Patches , nd , Marcus Shawcroft , Richard Earnshaw Subject: Re: [PATCH][GCC][AArch64] optimize float immediate moves (1 /4) - infrastructure. Date: Fri, 28 Jul 2017 15:06:00 -0000 Message-ID: References: <8760g6bwig.fsf@linaro.org> <20170613163934.GA1372@arm.com> <20170719154731.GA35511@arm.com> ,<20170727154237.GA31556@arm.com> In-Reply-To: <20170727154237.GA31556@arm.com> authentication-results: spf=none (sender IP is ) smtp.mailfrom=Tamar.Christina@arm.com; x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;DB6PR0802MB2615;7:ApUzmHgPyO5Yc5Iyopj971APwSLTVxuMO1+CGEix2kHsulT9m3E3HpG74KyWm4Gpnr/IUIj2QaT7XWvRmCDhfqUFqHdpB8UNWmEfwJ1kFY7DEBKt+qjvxX8qzT/1GCVs2Kulv++wIaeYuMGtxQ8MuoeZ2NibYLPR2ElYq9Io0ycHP0A0wNRawLEXNo2W4TghpzzKHp83BprXv2AKEejxPRrB1UQ5RMDgXkEJs1/N2egHF1YhnNlup0pX2HIvAl2bTWKxH+Q7yLa5aQqkQlLiarUfkNZ/zkq4vl6f76S9q+kRJ+lXJoXAYSpgXombyZ8m920RbeMQ7lQza9eLkYc8yAMxVGfJry8Vv/W0t1QUM/ivRYSRTc1m+r9y72U6VLhGFmmON/At7LyWixyTT8Ku9b2Oocr799BhhE1x3MoNToQcvCKc0tvzGshVuwfZlfH/DVZpVWVDANTJJz4Kyt5x0XXcw+DEyQLmDHxv7bHn0MjNCMwOtFVST+wfHGey3AaWEaU3Npv1s4pwtmXRlIF3tv5aa6HYqUJZq7Na7n3oFhnoPq4CROWqcoNAwU7zsLl748+1CbR4Gzx/FguWLxCBoWOsyILqmwvVABG8gJXqPladqVXoKoaL7YrIlciE7tvsEMxR2DSxjdATY6AcUPh1HQDfa+WtCVzICj/O+mU04AHeh043wEFfkYiK1SjXUJF9+U5clIQUVjBR3q+nEKVo5lUjJtYdhAh6hUJ6L3D8e7tWZjt7rbSWMsxLiBxbk5c5xpTseJidq2DOzUuX9Et6y5RSueo6OalraPupsUVJujM= x-ms-office365-filtering-correlation-id: 0eb9640a-dda0-4390-f3f4-08d4d5ca331d x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254127)(300000503095)(300135400095)(48565401081)(2017052603031)(49563074)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);SRVR:DB6PR0802MB2615; x-ms-traffictypediagnostic: DB6PR0802MB2615: nodisclaimer: True x-exchange-antispam-report-test: UriScan:(180628864354917); x-microsoft-antispam-prvs: x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(102415395)(6040450)(601004)(2401047)(8121501046)(5005006)(100000703101)(100105400095)(3002001)(93006095)(93001095)(10201501046)(6055026)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123562025)(20161123564025)(20161123560025)(20161123555025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:DB6PR0802MB2615;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:DB6PR0802MB2615; x-forefront-prvs: 03827AF76E x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(6009001)(39850400002)(39840400002)(39410400002)(39400400002)(39450400003)(51914003)(377454003)(199003)(189002)(24454002)(74316002)(25786009)(102836003)(6116002)(3846002)(2950100002)(4326008)(6636002)(2906002)(5660300001)(101416001)(54356999)(575784001)(55016002)(99936001)(50986999)(76176999)(86362001)(99286003)(53936002)(2900100001)(7736002)(6436002)(5250100002)(9686003)(54906002)(6862004)(8936002)(110136004)(3660700001)(68736007)(6246003)(38730400002)(8676002)(33656002)(3280700002)(6506006)(229853002)(105586002)(305945005)(106356001)(93886004)(478600001)(72206003)(7696004)(66066001)(14454004)(53546010)(81166006)(97736004)(81156014)(189998001)(14773001);DIR:OUT;SFP:1101;SCL:1;SRVR:DB6PR0802MB2615;H:DB6PR0802MB2309.eurprd08.prod.outlook.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: multipart/mixed; boundary="_002_DB6PR0802MB23093F5F45CA227BD2F5BE36FFBF0DB6PR0802MB2309_" MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Jul 2017 15:06:17.9887 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0802MB2615 X-IsSubscribed: yes X-SW-Source: 2017-07/txt/msg01921.txt.bz2 --_002_DB6PR0802MB23093F5F45CA227BD2F5BE36FFBF0DB6PR0802MB2309_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 7095 Hi James, I have made a tiny change in the patch to allow 0 to always pass through, s= ince in all cases we can always do a move of 0. I will assume your OK to still stand under the obvious rule and will commit= with this change. Thanks, Tamar ________________________________________ From: James Greenhalgh Sent: Thursday, July 27, 2017 4:42:37 PM To: Tamar Christina Cc: Richard Sandiford; GCC Patches; nd; Marcus Shawcroft; Richard Earnshaw Subject: Re: [PATCH][GCC][AArch64] optimize float immediate moves (1 /4) - = infrastructure. On Wed, Jul 26, 2017 at 05:00:05PM +0100, Tamar Christina wrote: > Hi James, > > I have updated the patch and have responded to your question blow. > > Ok for trunk? Ok, with a few small changes. > > > static bool > > > @@ -5857,12 +5955,6 @@ aarch64_preferred_reload_class (rtx x, > > reg_class_t regclass) > > > return NO_REGS; > > > } > > > > > > - /* If it's an integer immediate that MOVI can't handle, then > > > - FP_REGS is not an option, so we return NO_REGS instead. */ > > > - if (CONST_INT_P (x) && reg_class_subset_p (regclass, FP_REGS) > > > - && !aarch64_simd_imm_scalar_p (x, GET_MODE (x))) > > > - return NO_REGS; > > > - > > > > I don't understand this relaxation could you explain what this achieves= and > > why it is safe in this patch? > > Because this should be left up to the pattern to decide what should happen > and not reload. Leaving the check here also means you'll do a reasonably > expensive check twice for each constant > you can emit a move for. > > Removing extra restriction on the constant classes leaves it up to > aarch64_legitimate_constant_p to decide if if the constant can be emitted= as > a move or should be forced to memory. > aarch64_legitimate_constant_p also calls aarch64_cannot_force_const_mem. > > The documentation for TARGET_PREFERRED_RELOAD_CLASS also states: > > "One case where TARGET_PREFERRED_RELOAD_CLASS must not return rclass is i= f x > is a legitimate constant which cannot be loaded into some register class.= By > returning NO_REGS you can force x into a memory location. For example, rs= 6000 > can load immediate values into general-purpose registers, but does not ha= ve > an instruction for loading an immediate value into a floating-point regis= ter, > so TARGET_PREFERRED_RELOAD_CLASS returns NO_REGS when x is a floating-poi= nt > constant. If the constant can't be loaded into any kind of register, code > generation will be better if TARGET_LEGITIMATE_CONSTANT_P makes the const= ant > illegitimate instead of using TARGET_PREFERRED_RELOAD_CLASS. " > > So it seems that not only did the original constraint not add anything, we > may also generate better code now. Thanks for the explanation. > diff --git a/gcc/config/aarch64/aarch64-protos.h b/gcc/config/aarch64/aar= ch64-protos.h > index e397ff4afa73cfbc7e192fd5686b1beff9bbbadf..fd20576d23cfdc48761f65e41= 762b2a5a71f3e61 100644 > --- a/gcc/config/aarch64/aarch64-protos.h > +++ b/gcc/config/aarch64/aarch64-protos.h > @@ -326,6 +326,8 @@ bool aarch64_emit_approx_sqrt (rtx, rtx, bool); > void aarch64_expand_call (rtx, rtx, bool); > bool aarch64_expand_movmem (rtx *); > bool aarch64_float_const_zero_rtx_p (rtx); > +bool aarch64_float_const_rtx_p (rtx); > +bool aarch64_can_const_movi_rtx_p (rtx x, machine_mode mode); This list should be alphabetical, first by type, then by name. So I'd expect this to fit in just above aarch64_const_vec_all_same_int_p . > bool aarch64_function_arg_regno_p (unsigned); > bool aarch64_fusion_enabled_p (enum aarch64_fusion_pairs); > bool aarch64_gen_movmemqi (rtx *); > @@ -353,7 +355,6 @@ bool aarch64_regno_ok_for_base_p (int, bool); > bool aarch64_regno_ok_for_index_p (int, bool); > bool aarch64_simd_check_vect_par_cnst_half (rtx op, machine_mode mode, > bool high); > -bool aarch64_simd_imm_scalar_p (rtx x, machine_mode mode); > bool aarch64_simd_imm_zero_p (rtx, machine_mode); > bool aarch64_simd_scalar_immediate_valid_for_move (rtx, machine_mode); > bool aarch64_simd_shift_imm_p (rtx, machine_mode, bool); > @@ -488,4 +489,6 @@ std::string aarch64_get_extension_string_for_isa_flag= s (unsigned long, > > rtl_opt_pass *make_pass_fma_steering (gcc::context *ctxt); > > +bool aarch64_reinterpret_float_as_int (rtx value, unsigned HOST_WIDE_INT= *fail); This isn't defined in common/config/aarch64-common.c so shouldn't be in the section for functions which will be defined there. It should be in the list above between aarch64_regno_ok_for_index_p and aarch64_simd_check_vect_par_cnst_half. > + > #endif /* GCC_AARCH64_PROTOS_H */ > diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c > index d753666ef67fc524260c41f36743df3649a0a98a..b1ddd77823e50e63439e497f6= 95f3fad9bd9efc9 100644 > --- a/gcc/config/aarch64/aarch64.c > +++ b/gcc/config/aarch64/aarch64.c > @@ -147,6 +147,8 @@ static bool aarch64_builtin_support_vector_misalignme= nt (machine_mode mode, > const_tree type, > int misalignment, > bool is_packed); > +static machine_mode > +aarch64_simd_container_mode (machine_mode mode, unsigned width); > > /* Major revision number of the ARM Architecture implemented by the targ= et. */ > unsigned aarch64_architecture_version; > @@ -4723,6 +4725,62 @@ aarch64_legitimize_address_displacement (rtx *disp= , rtx *off, machine_mode mode) > return true; > } > > +/* Return the binary representation of floating point constant VALUE in = INTVAL. > + If the value cannot be converted, return false without setting INTVAL. > + The conversion is done in the given MODE. */ > +bool > +aarch64_reinterpret_float_as_int (rtx value, unsigned HOST_WIDE_INT *int= val) > +{ > + machine_mode mode =3D GET_MODE (value); > + if (GET_CODE (value) !=3D CONST_DOUBLE > + || !SCALAR_FLOAT_MODE_P (mode) > + || GET_MODE_BITSIZE (mode) > HOST_BITS_PER_WIDE_INT) > + return false; > + > + unsigned HOST_WIDE_INT ival =3D 0; > + > + /* Only support up to DF mode. */ > + gcc_assert (GET_MODE_BITSIZE (mode) <=3D GET_MODE_BITSIZE (DFmode)); I'm somewhere a bit hypothetical here, but on a machine with a 128-bit HOST_WIDE_INT, you would hit this case and take the assert. Just make this another case in your if statement above: machine_mode mode =3D GET_MODE (value); if (GET_CODE (value) !=3D CONST_DOUBLE || !SCALAR_FLOAT_MODE_P (mode) || GET_MODE_BITSIZE (mode) > HOST_BITS_PER_WIDE_INT || GET_MODE_BITSIZE (mode) > GET_MODE_BITSIZE (DFmode)) return false; > + long res[2]; > + real_to_target (res, > + CONST_DOUBLE_REAL_VALUE (value), > + REAL_MODE_FORMAT (mode)); > + > + ival =3D zext_hwi (res[0], 32); > + if (GET_MODE_BITSIZE (mode) =3D=3D GET_MODE_BITSIZE (DFmode)) > + ival |=3D (zext_hwi (res[1], 32) << 32); > + > + *intval =3D ival; > + return true; > +} > + Thanks, James --_002_DB6PR0802MB23093F5F45CA227BD2F5BE36FFBF0DB6PR0802MB2309_ Content-Type: text/x-patch; name="float-mov_infra-4.patch" Content-Description: float-mov_infra-4.patch Content-Disposition: attachment; filename="float-mov_infra-4.patch"; size=13939; creation-date="Fri, 28 Jul 2017 15:06:14 GMT"; modification-date="Fri, 28 Jul 2017 15:06:14 GMT" Content-Transfer-Encoding: base64 Content-length: 18898 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LXByb3Rv cy5oIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtcHJvdG9zLmgKaW5k ZXggZTM5N2ZmNGFmYTczY2ZiYzdlMTkyZmQ1Njg2YjFiZWZmOWJiYmFkZi4u YmVmZjI4ZTIyNzJiN2M3NzFjNWFlNWYzZTE3ZjEwZmM1Zjk3MTFkMCAxMDA2 NDQKLS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtcHJvdG9zLmgK KysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtcHJvdG9zLmgKQEAg LTMxOSw2ICszMTksNyBAQCB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGFhcmNo NjRfYW5kX3NwbGl0X2ltbTIgKEhPU1RfV0lERV9JTlQgdmFsX2luKTsKIGJv b2wgYWFyY2g2NF9hbmRfYml0bWFza19pbW0gKHVuc2lnbmVkIEhPU1RfV0lE RV9JTlQgdmFsX2luLCBtYWNoaW5lX21vZGUgbW9kZSk7CiBpbnQgYWFyY2g2 NF9icmFuY2hfY29zdCAoYm9vbCwgYm9vbCk7CiBlbnVtIGFhcmNoNjRfc3lt Ym9sX3R5cGUgYWFyY2g2NF9jbGFzc2lmeV9zeW1ib2xpY19leHByZXNzaW9u IChydHgpOworYm9vbCBhYXJjaDY0X2Nhbl9jb25zdF9tb3ZpX3J0eF9wIChy dHggeCwgbWFjaGluZV9tb2RlIG1vZGUpOwogYm9vbCBhYXJjaDY0X2NvbnN0 X3ZlY19hbGxfc2FtZV9pbnRfcCAocnR4LCBIT1NUX1dJREVfSU5UKTsKIGJv b2wgYWFyY2g2NF9jb25zdGFudF9hZGRyZXNzX3AgKHJ0eCk7CiBib29sIGFh cmNoNjRfZW1pdF9hcHByb3hfZGl2IChydHgsIHJ0eCwgcnR4KTsKQEAgLTMy Niw2ICszMjcsNyBAQCBib29sIGFhcmNoNjRfZW1pdF9hcHByb3hfc3FydCAo cnR4LCBydHgsIGJvb2wpOwogdm9pZCBhYXJjaDY0X2V4cGFuZF9jYWxsIChy dHgsIHJ0eCwgYm9vbCk7CiBib29sIGFhcmNoNjRfZXhwYW5kX21vdm1lbSAo cnR4ICopOwogYm9vbCBhYXJjaDY0X2Zsb2F0X2NvbnN0X3plcm9fcnR4X3Ag KHJ0eCk7Citib29sIGFhcmNoNjRfZmxvYXRfY29uc3RfcnR4X3AgKHJ0eCk7 CiBib29sIGFhcmNoNjRfZnVuY3Rpb25fYXJnX3JlZ25vX3AgKHVuc2lnbmVk KTsKIGJvb2wgYWFyY2g2NF9mdXNpb25fZW5hYmxlZF9wIChlbnVtIGFhcmNo NjRfZnVzaW9uX3BhaXJzKTsKIGJvb2wgYWFyY2g2NF9nZW5fbW92bWVtcWkg KHJ0eCAqKTsKQEAgLTM1MSw5ICszNTMsOSBAQCBib29sIGFhcmNoNjRfcGFk X2FyZ191cHdhcmQgKG1hY2hpbmVfbW9kZSwgY29uc3RfdHJlZSk7CiBib29s IGFhcmNoNjRfcGFkX3JlZ191cHdhcmQgKG1hY2hpbmVfbW9kZSwgY29uc3Rf dHJlZSwgYm9vbCk7CiBib29sIGFhcmNoNjRfcmVnbm9fb2tfZm9yX2Jhc2Vf cCAoaW50LCBib29sKTsKIGJvb2wgYWFyY2g2NF9yZWdub19va19mb3JfaW5k ZXhfcCAoaW50LCBib29sKTsKK2Jvb2wgYWFyY2g2NF9yZWludGVycHJldF9m bG9hdF9hc19pbnQgKHJ0eCB2YWx1ZSwgdW5zaWduZWQgSE9TVF9XSURFX0lO VCAqZmFpbCk7CiBib29sIGFhcmNoNjRfc2ltZF9jaGVja192ZWN0X3Bhcl9j bnN0X2hhbGYgKHJ0eCBvcCwgbWFjaGluZV9tb2RlIG1vZGUsCiAJCQkJCSAg ICBib29sIGhpZ2gpOwotYm9vbCBhYXJjaDY0X3NpbWRfaW1tX3NjYWxhcl9w IChydHggeCwgbWFjaGluZV9tb2RlIG1vZGUpOwogYm9vbCBhYXJjaDY0X3Np bWRfaW1tX3plcm9fcCAocnR4LCBtYWNoaW5lX21vZGUpOwogYm9vbCBhYXJj aDY0X3NpbWRfc2NhbGFyX2ltbWVkaWF0ZV92YWxpZF9mb3JfbW92ZSAocnR4 LCBtYWNoaW5lX21vZGUpOwogYm9vbCBhYXJjaDY0X3NpbWRfc2hpZnRfaW1t X3AgKHJ0eCwgbWFjaGluZV9tb2RlLCBib29sKTsKZGlmZiAtLWdpdCBhL2dj Yy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LmMgYi9nY2MvY29uZmlnL2FhcmNo NjQvYWFyY2g2NC5jCmluZGV4IGQ3NTM2NjZlZjY3ZmM1MjQyNjBjNDFmMzY3 NDNkZjM2NDlhMGE5OGEuLjc5MzgzYWQ4MDA5MGIxOWEzZTYwNGZhN2M5MTI1 MGZmYzYyOWY2ODIgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvYWFyY2g2NC9h YXJjaDY0LmMKKysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQuYwpA QCAtMTQ3LDYgKzE0Nyw4IEBAIHN0YXRpYyBib29sIGFhcmNoNjRfYnVpbHRp bl9zdXBwb3J0X3ZlY3Rvcl9taXNhbGlnbm1lbnQgKG1hY2hpbmVfbW9kZSBt b2RlLAogCQkJCQkJCSBjb25zdF90cmVlIHR5cGUsCiAJCQkJCQkJIGludCBt aXNhbGlnbm1lbnQsCiAJCQkJCQkJIGJvb2wgaXNfcGFja2VkKTsKK3N0YXRp YyBtYWNoaW5lX21vZGUKK2FhcmNoNjRfc2ltZF9jb250YWluZXJfbW9kZSAo bWFjaGluZV9tb2RlIG1vZGUsIHVuc2lnbmVkIHdpZHRoKTsKIAogLyogTWFq b3IgcmV2aXNpb24gbnVtYmVyIG9mIHRoZSBBUk0gQXJjaGl0ZWN0dXJlIGlt cGxlbWVudGVkIGJ5IHRoZSB0YXJnZXQuICAqLwogdW5zaWduZWQgYWFyY2g2 NF9hcmNoaXRlY3R1cmVfdmVyc2lvbjsKQEAgLTQ3MjMsNiArNDcyNSw2OSBA QCBhYXJjaDY0X2xlZ2l0aW1pemVfYWRkcmVzc19kaXNwbGFjZW1lbnQgKHJ0 eCAqZGlzcCwgcnR4ICpvZmYsIG1hY2hpbmVfbW9kZSBtb2RlKQogICByZXR1 cm4gdHJ1ZTsKIH0KIAorLyogUmV0dXJuIHRoZSBiaW5hcnkgcmVwcmVzZW50 YXRpb24gb2YgZmxvYXRpbmcgcG9pbnQgY29uc3RhbnQgVkFMVUUgaW4gSU5U VkFMLgorICAgSWYgdGhlIHZhbHVlIGNhbm5vdCBiZSBjb252ZXJ0ZWQsIHJl dHVybiBmYWxzZSB3aXRob3V0IHNldHRpbmcgSU5UVkFMLgorICAgVGhlIGNv bnZlcnNpb24gaXMgZG9uZSBpbiB0aGUgZ2l2ZW4gTU9ERS4gICovCitib29s CithYXJjaDY0X3JlaW50ZXJwcmV0X2Zsb2F0X2FzX2ludCAocnR4IHZhbHVl LCB1bnNpZ25lZCBIT1NUX1dJREVfSU5UICppbnR2YWwpCit7CisKKyAgLyog V2UgbWFrZSBhIGdlbmVyYWwgZXhjZXB0aW9uIGZvciAwLiAgKi8KKyAgaWYg KGFhcmNoNjRfZmxvYXRfY29uc3RfemVyb19ydHhfcCAodmFsdWUpKQorICAg IHsKKyAgICAgICppbnR2YWwgPSAwOworICAgICAgcmV0dXJuIHRydWU7Cisg ICAgfQorCisgIG1hY2hpbmVfbW9kZSBtb2RlID0gR0VUX01PREUgKHZhbHVl KTsKKyAgaWYgKEdFVF9DT0RFICh2YWx1ZSkgIT0gQ09OU1RfRE9VQkxFCisg ICAgICB8fCAhU0NBTEFSX0ZMT0FUX01PREVfUCAobW9kZSkKKyAgICAgIHx8 IEdFVF9NT0RFX0JJVFNJWkUgKG1vZGUpID4gSE9TVF9CSVRTX1BFUl9XSURF X0lOVAorICAgICAgLyogT25seSBzdXBwb3J0IHVwIHRvIERGIG1vZGUuICAq LworICAgICAgfHwgR0VUX01PREVfQklUU0laRSAobW9kZSkgPiBHRVRfTU9E RV9CSVRTSVpFIChERm1vZGUpKQorICAgIHJldHVybiBmYWxzZTsKKworICB1 bnNpZ25lZCBIT1NUX1dJREVfSU5UIGl2YWwgPSAwOworCisgIGxvbmcgcmVz WzJdOworICByZWFsX3RvX3RhcmdldCAocmVzLAorCQkgIENPTlNUX0RPVUJM RV9SRUFMX1ZBTFVFICh2YWx1ZSksCisJCSAgUkVBTF9NT0RFX0ZPUk1BVCAo bW9kZSkpOworCisgIGl2YWwgPSB6ZXh0X2h3aSAocmVzWzBdLCAzMik7Cisg IGlmIChHRVRfTU9ERV9CSVRTSVpFIChtb2RlKSA9PSBHRVRfTU9ERV9CSVRT SVpFIChERm1vZGUpKQorICAgIGl2YWwgfD0gKHpleHRfaHdpIChyZXNbMV0s IDMyKSA8PCAzMik7CisKKyAgKmludHZhbCA9IGl2YWw7CisgIHJldHVybiB0 cnVlOworfQorCisvKiBSZXR1cm4gVFJVRSBpZiBydHggWCBpcyBhbiBpbW1l ZGlhdGUgY29uc3RhbnQgdGhhdCBjYW4gYmUgbW92ZWQgdXNpbmcgYQorICAg c2luZ2xlIE1PVigrTU9WSykgZm9sbG93ZWQgYnkgYW4gRk1PVi4gICovCiti b29sCithYXJjaDY0X2Zsb2F0X2NvbnN0X3J0eF9wIChydHggeCkKK3sKKyAg bWFjaGluZV9tb2RlIG1vZGUgPSBHRVRfTU9ERSAoeCk7CisgIGlmIChtb2Rl ID09IFZPSURtb2RlKQorICAgIHJldHVybiBmYWxzZTsKKworICAvKiBEZXRl cm1pbmUgd2hldGhlciBpdCdzIGNoZWFwZXIgdG8gd3JpdGUgZmxvYXQgY29u c3RhbnRzIGFzCisgICAgIG1vdi9tb3ZrIHBhaXJzIG92ZXIgbGRyL2FkcnAg cGFpcnMuICAqLworICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGl2YWw7CisK KyAgaWYgKEdFVF9DT0RFICh4KSA9PSBDT05TVF9ET1VCTEUKKyAgICAgICYm IFNDQUxBUl9GTE9BVF9NT0RFX1AgKG1vZGUpCisgICAgICAmJiBhYXJjaDY0 X3JlaW50ZXJwcmV0X2Zsb2F0X2FzX2ludCAoeCwgJml2YWwpKQorICAgIHsK KyAgICAgIG1hY2hpbmVfbW9kZSBpbW9kZSA9IG1vZGUgPT0gSEZtb2RlID8g U0ltb2RlIDogaW50X21vZGVfZm9yX21vZGUgKG1vZGUpOworICAgICAgaW50 IG51bV9pbnN0ciA9IGFhcmNoNjRfaW50ZXJuYWxfbW92X2ltbWVkaWF0ZQor CQkJKE5VTExfUlRYLCBnZW5faW50X21vZGUgKGl2YWwsIGltb2RlKSwgZmFs c2UsIGltb2RlKTsKKyAgICAgIHJldHVybiBudW1faW5zdHIgPCAzOworICAg IH0KKworICByZXR1cm4gZmFsc2U7Cit9CisKIC8qIFJldHVybiBUUlVFIGlm IHJ0eCBYIGlzIGltbWVkaWF0ZSBjb25zdGFudCAwLjAgKi8KIGJvb2wKIGFh cmNoNjRfZmxvYXRfY29uc3RfemVyb19ydHhfcCAocnR4IHgpCkBAIC00NzM1 LDYgKzQ4MDAsNDkgQEAgYWFyY2g2NF9mbG9hdF9jb25zdF96ZXJvX3J0eF9w IChydHggeCkKICAgcmV0dXJuIHJlYWxfZXF1YWwgKENPTlNUX0RPVUJMRV9S RUFMX1ZBTFVFICh4KSwgJmRjb25zdDApOwogfQogCisvKiBSZXR1cm4gVFJV RSBpZiBydHggWCBpcyBpbW1lZGlhdGUgY29uc3RhbnQgdGhhdCBmaXRzIGlu IGEgc2luZ2xlCisgICBNT1ZJIGltbWVkaWF0ZSBvcGVyYXRpb24uICAqLwor Ym9vbAorYWFyY2g2NF9jYW5fY29uc3RfbW92aV9ydHhfcCAocnR4IHgsIG1h Y2hpbmVfbW9kZSBtb2RlKQoreworICBpZiAoIVRBUkdFVF9TSU1EKQorICAg ICByZXR1cm4gZmFsc2U7CisKKyAgLyogV2UgbWFrZSBhIGdlbmVyYWwgZXhj ZXB0aW9uIGZvciAwLiAgKi8KKyAgaWYgKGFhcmNoNjRfZmxvYXRfY29uc3Rf emVyb19ydHhfcCAoeCkpCisgICAgICByZXR1cm4gdHJ1ZTsKKworICBtYWNo aW5lX21vZGUgdm1vZGUsIGltb2RlOworICB1bnNpZ25lZCBIT1NUX1dJREVf SU5UIGl2YWw7CisKKyAgaWYgKEdFVF9DT0RFICh4KSA9PSBDT05TVF9ET1VC TEUKKyAgICAgICYmIFNDQUxBUl9GTE9BVF9NT0RFX1AgKG1vZGUpKQorICAg IHsKKyAgICAgIGlmICghYWFyY2g2NF9yZWludGVycHJldF9mbG9hdF9hc19p bnQgKHgsICZpdmFsKSkKKwlyZXR1cm4gZmFsc2U7CisKKyAgICAgIGltb2Rl ID0gaW50X21vZGVfZm9yX21vZGUgKG1vZGUpOworICAgIH0KKyAgZWxzZSBp ZiAoR0VUX0NPREUgKHgpID09IENPTlNUX0lOVAorCSAgICYmIFNDQUxBUl9J TlRfTU9ERV9QIChtb2RlKSkKKyAgICB7CisgICAgICAgaW1vZGUgPSBtb2Rl OworICAgICAgIGl2YWwgPSBJTlRWQUwgKHgpOworICAgIH0KKyAgZWxzZQor ICAgIHJldHVybiBmYWxzZTsKKworICAgLyogdXNlIGEgNjQgYml0IG1vZGUg Zm9yIGV2ZXJ5dGhpbmcgZXhjZXB0IGZvciBESS9ERiBtb2RlLCB3aGVyZSB3 ZSB1c2UKKyAgICAgYSAxMjggYml0IHZlY3RvciBtb2RlLiAgKi8KKyAgaW50 IHdpZHRoID0gR0VUX01PREVfQklUU0laRSAobW9kZSkgPT0gNjQgPyAxMjgg OiA2NDsKKworICB2bW9kZSA9IGFhcmNoNjRfc2ltZF9jb250YWluZXJfbW9k ZSAoaW1vZGUsIHdpZHRoKTsKKyAgcnR4IHZfb3AgPSBhYXJjaDY0X3NpbWRf Z2VuX2NvbnN0X3ZlY3Rvcl9kdXAgKHZtb2RlLCBpdmFsKTsKKworICByZXR1 cm4gYWFyY2g2NF9zaW1kX3ZhbGlkX2ltbWVkaWF0ZSAodl9vcCwgdm1vZGUs IGZhbHNlLCBOVUxMKTsKK30KKworCiAvKiBSZXR1cm4gdGhlIGZpeGVkIHJl Z2lzdGVycyB1c2VkIGZvciBjb25kaXRpb24gY29kZXMuICAqLwogCiBzdGF0 aWMgYm9vbApAQCAtNTkyOSwxMiArNjAzNyw2IEBAIGFhcmNoNjRfcHJlZmVy cmVkX3JlbG9hZF9jbGFzcyAocnR4IHgsIHJlZ19jbGFzc190IHJlZ2NsYXNz KQogICAgICAgcmV0dXJuIE5PX1JFR1M7CiAgICAgfQogCi0gIC8qIElmIGl0 J3MgYW4gaW50ZWdlciBpbW1lZGlhdGUgdGhhdCBNT1ZJIGNhbid0IGhhbmRs ZSwgdGhlbgotICAgICBGUF9SRUdTIGlzIG5vdCBhbiBvcHRpb24sIHNvIHdl IHJldHVybiBOT19SRUdTIGluc3RlYWQuICAqLwotICBpZiAoQ09OU1RfSU5U X1AgKHgpICYmIHJlZ19jbGFzc19zdWJzZXRfcCAocmVnY2xhc3MsIEZQX1JF R1MpCi0gICAgICAmJiAhYWFyY2g2NF9zaW1kX2ltbV9zY2FsYXJfcCAoeCwg R0VUX01PREUgKHgpKSkKLSAgICByZXR1cm4gTk9fUkVHUzsKLQogICAvKiBS ZWdpc3RlciBlbGltaW5pYXRpb24gY2FuIHJlc3VsdCBpbiBhIHJlcXVlc3Qg Zm9yCiAgICAgIFNQK2NvbnN0YW50LT5GUF9SRUdTLiAgV2UgY2Fubm90IHN1 cHBvcnQgc3VjaCBvcGVyYXRpb25zIHdoaWNoCiAgICAgIHVzZSBTUCBhcyBz b3VyY2UgYW5kIGFuIEZQX1JFRyBhcyBkZXN0aW5hdGlvbiwgc28gcmVqZWN0 IG91dApAQCAtNjg4NCw2ICs2OTg2LDI1IEBAIGFhcmNoNjRfcnR4X2Nvc3Rz IChydHggeCwgbWFjaGluZV9tb2RlIG1vZGUsIGludCBvdXRlciBBVFRSSUJV VEVfVU5VU0VELAogICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNlIENP TlNUX0RPVUJMRToKKworICAgICAgLyogRmlyc3QgZGV0ZXJtaW5lIG51bWJl ciBvZiBpbnN0cnVjdGlvbnMgdG8gZG8gdGhlIG1vdmUKKwkgIGFzIGFuIGlu dGVnZXIgY29uc3RhbnQuICAqLworICAgICAgaWYgKCFhYXJjaDY0X2Zsb2F0 X2NvbnN0X3JlcHJlc2VudGFibGVfcCAoeCkKKwkgICAmJiAhYWFyY2g2NF9j YW5fY29uc3RfbW92aV9ydHhfcCAoeCwgbW9kZSkKKwkgICAmJiBhYXJjaDY0 X2Zsb2F0X2NvbnN0X3J0eF9wICh4KSkKKwl7CisJICB1bnNpZ25lZCBIT1NU X1dJREVfSU5UIGl2YWw7CisJICBib29sIHN1Y2NlZWQgPSBhYXJjaDY0X3Jl aW50ZXJwcmV0X2Zsb2F0X2FzX2ludCAoeCwgJml2YWwpOworCSAgZ2NjX2Fz c2VydCAoc3VjY2VlZCk7CisKKwkgIG1hY2hpbmVfbW9kZSBpbW9kZSA9IG1v ZGUgPT0gSEZtb2RlID8gU0ltb2RlCisJCQkJCSAgICAgIDogaW50X21vZGVf Zm9yX21vZGUgKG1vZGUpOworCSAgaW50IG5jb3N0ID0gYWFyY2g2NF9pbnRl cm5hbF9tb3ZfaW1tZWRpYXRlCisJCShOVUxMX1JUWCwgZ2VuX2ludF9tb2Rl IChpdmFsLCBpbW9kZSksIGZhbHNlLCBpbW9kZSk7CisJICAqY29zdCArPSBD T1NUU19OX0lOU05TIChuY29zdCk7CisJICByZXR1cm4gdHJ1ZTsKKwl9CisK ICAgICAgIGlmIChzcGVlZCkKIAl7CiAJICAvKiBtb3ZbZGYsc2ZdX2FhcmNo NjQuICAqLwpAQCAtMTAyMjgsMTggKzEwMzQ5LDE2IEBAIGFhcmNoNjRfbGVn aXRpbWF0ZV9waWNfb3BlcmFuZF9wIChydHggeCkKIC8qIFJldHVybiB0cnVl IGlmIFggaG9sZHMgZWl0aGVyIGEgcXVhcnRlci1wcmVjaXNpb24gb3IKICAg ICAgZmxvYXRpbmctcG9pbnQgKzAuMCBjb25zdGFudC4gICovCiBzdGF0aWMg Ym9vbAotYWFyY2g2NF92YWxpZF9mbG9hdGluZ19jb25zdCAobWFjaGluZV9t b2RlIG1vZGUsIHJ0eCB4KQorYWFyY2g2NF92YWxpZF9mbG9hdGluZ19jb25z dCAocnR4IHgpCiB7CiAgIGlmICghQ09OU1RfRE9VQkxFX1AgKHgpKQogICAg IHJldHVybiBmYWxzZTsKIAotICBpZiAoYWFyY2g2NF9mbG9hdF9jb25zdF96 ZXJvX3J0eF9wICh4KSkKKyAgLyogVGhpcyBjYWxsIGRldGVybWluZXMgd2hp Y2ggY29uc3RhbnRzIGNhbiBiZSB1c2VkIGluIG1vdjxtb2RlPgorICAgICBh cyBpbnRlZ2VyIG1vdmVzIGluc3RlYWQgb2YgY29uc3RhbnQgbG9hZHMuICAq LworICBpZiAoYWFyY2g2NF9mbG9hdF9jb25zdF9ydHhfcCAoeCkpCiAgICAg cmV0dXJuIHRydWU7CiAKLSAgLyogV2Ugb25seSBoYW5kbGUgbW92aW5nIDAu MCB0byBhIFRGbW9kZSByZWdpc3Rlci4gICovCi0gIGlmICghKG1vZGUgPT0g U0Ztb2RlIHx8IG1vZGUgPT0gREZtb2RlKSkKLSAgICByZXR1cm4gZmFsc2U7 Ci0KICAgcmV0dXJuIGFhcmNoNjRfZmxvYXRfY29uc3RfcmVwcmVzZW50YWJs ZV9wICh4KTsKIH0KIApAQCAtMTAyNTEsMTEgKzEwMzcwLDE1IEBAIGFhcmNo NjRfbGVnaXRpbWF0ZV9jb25zdGFudF9wIChtYWNoaW5lX21vZGUgbW9kZSwg cnR4IHgpCiAgIGlmIChUQVJHRVRfU0lNRCAmJiBhYXJjaDY0X3ZlY3Rfc3Ry dWN0X21vZGVfcCAobW9kZSkpCiAgICAgcmV0dXJuIGZhbHNlOwogCi0gIC8q IFRoaXMgY291bGQgcHJvYmFibHkgZ28gYXdheSBiZWNhdXNlCi0gICAgIHdl IG5vdyBkZWNvbXBvc2UgQ09OU1RfSU5UcyBhY2NvcmRpbmcgdG8gZXhwYW5k X21vdl9pbW1lZGlhdGUuICAqLworICAvKiBGb3IgdGhlc2UgY2FzZXMgd2Ug bmV2ZXIgd2FudCB0byB1c2UgYSBsaXRlcmFsIGxvYWQuCisgICAgIEFzIHN1 Y2ggd2UgaGF2ZSB0byBwcmV2ZW50IHRoZSBjb21waWxlciBmcm9tIGZvcmNp bmcgdGhlc2UKKyAgICAgdG8gbWVtb3J5LiAgKi8KICAgaWYgKChHRVRfQ09E RSAoeCkgPT0gQ09OU1RfVkVDVE9SCiAgICAgICAgJiYgYWFyY2g2NF9zaW1k X3ZhbGlkX2ltbWVkaWF0ZSAoeCwgbW9kZSwgZmFsc2UsIE5VTEwpKQotICAg ICAgfHwgQ09OU1RfSU5UX1AgKHgpIHx8IGFhcmNoNjRfdmFsaWRfZmxvYXRp bmdfY29uc3QgKG1vZGUsIHgpKQorICAgICAgfHwgQ09OU1RfSU5UX1AgKHgp CisgICAgICB8fCBhYXJjaDY0X3ZhbGlkX2Zsb2F0aW5nX2NvbnN0ICh4KQor ICAgICAgfHwgYWFyY2g2NF9jYW5fY29uc3RfbW92aV9ydHhfcCAoeCwgbW9k ZSkKKyAgICAgIHx8IGFhcmNoNjRfZmxvYXRfY29uc3RfcnR4X3AgKHgpKQog CXJldHVybiAhdGFyZ2V0bS5jYW5ub3RfZm9yY2VfY29uc3RfbWVtIChtb2Rl LCB4KTsKIAogICBpZiAoR0VUX0NPREUgKHgpID09IEhJR0gKQEAgLTExNTM4 LDIzICsxMTY2MSw2IEBAIGFhcmNoNjRfbWFza19mcm9tX3pleHRyYWN0X29w cyAocnR4IHdpZHRoLCBydHggcG9zKQogfQogCiBib29sCi1hYXJjaDY0X3Np bWRfaW1tX3NjYWxhcl9wIChydHggeCwgbWFjaGluZV9tb2RlIG1vZGUgQVRU UklCVVRFX1VOVVNFRCkKLXsKLSAgSE9TVF9XSURFX0lOVCBpbW0gPSBJTlRW QUwgKHgpOwotICBpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgODsgaSsr KQotICAgIHsKLSAgICAgIHVuc2lnbmVkIGludCBieXRlID0gaW1tICYgMHhm ZjsKLSAgICAgIGlmIChieXRlICE9IDB4ZmYgJiYgYnl0ZSAhPSAwKQotICAg ICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGltbSA+Pj0gODsKLSAgICB9Ci0K LSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wKIGFhcmNoNjRfbW92X29wZXJh bmRfcCAocnR4IHgsIG1hY2hpbmVfbW9kZSBtb2RlKQogewogICBpZiAoR0VU X0NPREUgKHgpID09IEhJR0gKQEAgLTEyOTQ1LDE1ICsxMzA1MSwyOCBAQCBh YXJjaDY0X291dHB1dF9zaW1kX21vdl9pbW1lZGlhdGUgKHJ0eCBjb25zdF92 ZWN0b3IsCiB9CiAKIGNoYXIqCi1hYXJjaDY0X291dHB1dF9zY2FsYXJfc2lt ZF9tb3ZfaW1tZWRpYXRlIChydHggaW1tZWRpYXRlLAotCQkJCQkgIG1hY2hp bmVfbW9kZSBtb2RlKQorYWFyY2g2NF9vdXRwdXRfc2NhbGFyX3NpbWRfbW92 X2ltbWVkaWF0ZSAocnR4IGltbWVkaWF0ZSwgIG1hY2hpbmVfbW9kZSBtb2Rl KQogeworCisgIC8qIElmIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHdhcyBw YXNzZWQgYW5kIHdlIGRlc2lyZSB0byB1c2UgaXQgaW4gYW4KKyAgICAgaW50 ZWdlciBtb2RlIGRvIHRoZSBjb252ZXJzaW9uIHRvIGludGVnZXIuICAqLwor ICBpZiAoQ09OU1RfRE9VQkxFX1AgKGltbWVkaWF0ZSkgJiYgR0VUX01PREVf Q0xBU1MgKG1vZGUpID09IE1PREVfSU5UKQorICAgIHsKKyAgICAgIHVuc2ln bmVkIEhPU1RfV0lERV9JTlQgaXZhbDsKKyAgICAgIGlmICghYWFyY2g2NF9y ZWludGVycHJldF9mbG9hdF9hc19pbnQgKGltbWVkaWF0ZSwgJml2YWwpKQor CSAgZ2NjX3VucmVhY2hhYmxlICgpOworICAgICAgaW1tZWRpYXRlID0gZ2Vu X2ludF9tb2RlIChpdmFsLCBtb2RlKTsKKyAgICB9CisKICAgbWFjaGluZV9t b2RlIHZtb2RlOworICAvKiB1c2UgYSA2NCBiaXQgbW9kZSBmb3IgZXZlcnl0 aGluZyBleGNlcHQgZm9yIERJL0RGIG1vZGUsIHdoZXJlIHdlIHVzZQorICAg ICBhIDEyOCBiaXQgdmVjdG9yIG1vZGUuICAqLworICBpbnQgd2lkdGggPSBH RVRfTU9ERV9CSVRTSVpFIChtb2RlKSA9PSA2NCA/IDEyOCA6IDY0OwogCiAg IGdjY19hc3NlcnQgKCFWRUNUT1JfTU9ERV9QIChtb2RlKSk7Ci0gIHZtb2Rl ID0gYWFyY2g2NF9zaW1kX2NvbnRhaW5lcl9tb2RlIChtb2RlLCA2NCk7Cisg IHZtb2RlID0gYWFyY2g2NF9zaW1kX2NvbnRhaW5lcl9tb2RlIChtb2RlLCB3 aWR0aCk7CiAgIHJ0eCB2X29wID0gYWFyY2g2NF9zaW1kX2dlbl9jb25zdF92 ZWN0b3JfZHVwICh2bW9kZSwgSU5UVkFMIChpbW1lZGlhdGUpKTsKLSAgcmV0 dXJuIGFhcmNoNjRfb3V0cHV0X3NpbWRfbW92X2ltbWVkaWF0ZSAodl9vcCwg dm1vZGUsIDY0KTsKKyAgcmV0dXJuIGFhcmNoNjRfb3V0cHV0X3NpbWRfbW92 X2ltbWVkaWF0ZSAodl9vcCwgdm1vZGUsIHdpZHRoKTsKIH0KIAogLyogU3Bs aXQgb3BlcmFuZHMgaW50byBtb3ZlcyBmcm9tIG9wWzFdICsgb3BbMl0gaW50 byBvcFswXS4gICovCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FhcmNoNjQv YWFyY2g2NC5tZCBiL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0Lm1kCmlu ZGV4IGY4NzZhMmI3MjA4NTJkN2FlNDBiNDI0OTk2MzhmYTE1Zjg3MmFlYjAu LmU2ZWRiNGFmNWYzNmNiZDVhM2U1M2JlMDU1NDE2M2Y5Y2UyYmExY2EgMTAw NjQ0Ci0tLSBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0Lm1kCisrKyBi L2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0Lm1kCkBAIC05MjAsOCArOTIw LDggQEAKICkKIAogKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiKm1vdnNpX2Fh cmNoNjQiCi0gIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgIm5vbmltbWVk aWF0ZV9vcGVyYW5kIiAiPXIsayxyLHIscixyLCp3LG0sICBtLHIsciAgLCp3 LHIsKnciKQotCShtYXRjaF9vcGVyYW5kOlNJIDEgImFhcmNoNjRfbW92X29w ZXJhbmQiICAiIHIscixrLE0sbixtLCBtLHJaLCp3LFVzYSxVc2gsclosdywq dyIpKV0KKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAibm9uaW1tZWRp YXRlX29wZXJhbmQiICI9cixrLHIscixyLHIsKncsbSwgIG0scixyICAsKncs IHIsKncsdyIpCisJKG1hdGNoX29wZXJhbmQ6U0kgMSAiYWFyY2g2NF9tb3Zf b3BlcmFuZCIgICIgcixyLGssTSxuLG0sIG0sclosKncsVXNhLFVzaCxyWix3 LCp3LERzIikpXQogICAiKHJlZ2lzdGVyX29wZXJhbmQgKG9wZXJhbmRzWzBd LCBTSW1vZGUpCiAgICAgfHwgYWFyY2g2NF9yZWdfb3JfemVybyAob3BlcmFu ZHNbMV0sIFNJbW9kZSkpIgogICAiQApAQCAtOTM4LDggKzkzOCw5IEBACiAg ICBhZHJwXFx0JXgwLCAlQTEKICAgIGZtb3ZcXHQlczAsICV3MQogICAgZm1v dlxcdCV3MCwgJXMxCi0gICBmbW92XFx0JXMwLCAlczEiCi0gICAiQ09OU1Rf SU5UX1AgKG9wZXJhbmRzWzFdKSAmJiAhYWFyY2g2NF9tb3ZlX2ltbSAoSU5U VkFMIChvcGVyYW5kc1sxXSksIFNJbW9kZSkKKyAgIGZtb3ZcXHQlczAsICVz MQorICAgKiByZXR1cm4gYWFyY2g2NF9vdXRwdXRfc2NhbGFyX3NpbWRfbW92 X2ltbWVkaWF0ZSAob3BlcmFuZHNbMV0sIFNJbW9kZSk7IgorICAiQ09OU1Rf SU5UX1AgKG9wZXJhbmRzWzFdKSAmJiAhYWFyY2g2NF9tb3ZlX2ltbSAoSU5U VkFMIChvcGVyYW5kc1sxXSksIFNJbW9kZSkKICAgICAmJiBSRUdfUCAob3Bl cmFuZHNbMF0pICYmIEdQX1JFR05VTV9QIChSRUdOTyAob3BlcmFuZHNbMF0p KSIKICAgIFsoY29uc3RfaW50IDApXQogICAgInsKQEAgLTk0Nyw4ICs5NDgs OSBAQAogICAgICAgIERPTkU7CiAgICAgfSIKICAgWyhzZXRfYXR0ciAidHlw ZSIgIm1vdl9yZWcsbW92X3JlZyxtb3ZfcmVnLG1vdl9pbW0sbW92X2ltbSxs b2FkMSxsb2FkMSxzdG9yZTEsc3RvcmUxLFwKLSAgICAgICAgICAgICAgICAg ICAgIGFkcixhZHIsZl9tY3IsZl9tcmMsZm1vdiIpCi0gICAoc2V0X2F0dHIg ImZwIiAiKiwqLCosKiwqLCoseWVzLCoseWVzLCosKix5ZXMseWVzLHllcyIp XQorCQkgICAgYWRyLGFkcixmX21jcixmX21yYyxmbW92LG5lb25fbW92ZSIp CisgICAoc2V0X2F0dHIgImZwIiAiKiwqLCosKiwqLCoseWVzLCoseWVzLCos Kix5ZXMseWVzLHllcywqIikKKyAgIChzZXRfYXR0ciAic2ltZCIgIiosKiwq LCosKiwqLCosKiwqLCosKiwqLCosKix5ZXMiKV0KICkKIAogKGRlZmluZV9p bnNuX2FuZF9zcGxpdCAiKm1vdmRpX2FhcmNoNjQiCkBAIC05NzEsNyArOTcz LDcgQEAKICAgIGZtb3ZcXHQlZDAsICV4MQogICAgZm1vdlxcdCV4MCwgJWQx CiAgICBmbW92XFx0JWQwLCAlZDEKLSAgIG1vdmlcXHQlZDAsICUxIgorICAg KiByZXR1cm4gYWFyY2g2NF9vdXRwdXRfc2NhbGFyX3NpbWRfbW92X2ltbWVk aWF0ZSAob3BlcmFuZHNbMV0sIERJbW9kZSk7IgogICAgIihDT05TVF9JTlRf UCAob3BlcmFuZHNbMV0pICYmICFhYXJjaDY0X21vdmVfaW1tIChJTlRWQUwg KG9wZXJhbmRzWzFdKSwgREltb2RlKSkKICAgICAmJiBSRUdfUCAob3BlcmFu ZHNbMF0pICYmIEdQX1JFR05VTV9QIChSRUdOTyAob3BlcmFuZHNbMF0pKSIK ICAgIFsoY29uc3RfaW50IDApXQpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9h YXJjaDY0L2NvbnN0cmFpbnRzLm1kIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2Nv bnN0cmFpbnRzLm1kCmluZGV4IDg4ZTg0MGYyODk4ZDJkYTNlNTFlNzUzNTc4 ZWU1OWJjZTRmNDYyZmEuLjljZTNkNGVmYWYzMWEzMDFkZmI3YzE3NzJhNmI2 ODVmYjJjYmQyZWUgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvYWFyY2g2NC9j b25zdHJhaW50cy5tZAorKysgYi9nY2MvY29uZmlnL2FhcmNoNjQvY29uc3Ry YWludHMubWQKQEAgLTE3Niw2ICsxNzYsMTIgQEAKICAgKGFuZCAobWF0Y2hf Y29kZSAiY29uc3RfZG91YmxlIikKICAgICAgICAobWF0Y2hfdGVzdCAiYWFy Y2g2NF9mbG9hdF9jb25zdF9yZXByZXNlbnRhYmxlX3AgKG9wKSIpKSkKIAor KGRlZmluZV9jb25zdHJhaW50ICJVdmkiCisgICJBIGZsb2F0aW5nIHBvaW50 IGNvbnN0YW50IHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggYVwKKyAgIE1PVkkg aW1tZWRpYXRlIG9wZXJhdGlvbi4iCisgIChhbmQgKG1hdGNoX2NvZGUgImNv bnN0X2RvdWJsZSIpCisgICAgICAgKG1hdGNoX3Rlc3QgImFhcmNoNjRfY2Fu X2NvbnN0X21vdmlfcnR4X3AgKG9wLCBHRVRfTU9ERSAob3ApKSIpKSkKKwog KGRlZmluZV9jb25zdHJhaW50ICJEbiIKICAgIkBpbnRlcm5hbAogIEEgY29u c3RyYWludCB0aGF0IG1hdGNoZXMgdmVjdG9yIG9mIGltbWVkaWF0ZXMuIgpA QCAtMjIwLDkgKzIyNiwxNyBAQAogCiAoZGVmaW5lX2NvbnN0cmFpbnQgIkRk IgogICAiQGludGVybmFsCi0gQSBjb25zdHJhaW50IHRoYXQgbWF0Y2hlcyBh biBpbW1lZGlhdGUgb3BlcmFuZCB2YWxpZCBmb3IgQWR2U0lNRCBzY2FsYXIu IgorIEEgY29uc3RyYWludCB0aGF0IG1hdGNoZXMgYW4gaW50ZWdlciBpbW1l ZGlhdGUgb3BlcmFuZCB2YWxpZFwKKyBmb3IgQWR2U0lNRCBzY2FsYXIgb3Bl cmF0aW9ucyBpbiBESW1vZGUuIgorIChhbmQgKG1hdGNoX2NvZGUgImNvbnN0 X2ludCIpCisgICAgICAobWF0Y2hfdGVzdCAiYWFyY2g2NF9jYW5fY29uc3Rf bW92aV9ydHhfcCAob3AsIERJbW9kZSkiKSkpCisKKyhkZWZpbmVfY29uc3Ry YWludCAiRHMiCisgICJAaW50ZXJuYWwKKyBBIGNvbnN0cmFpbnQgdGhhdCBt YXRjaGVzIGFuIGludGVnZXIgaW1tZWRpYXRlIG9wZXJhbmQgdmFsaWRcCisg Zm9yIEFkdlNJTUQgc2NhbGFyIG9wZXJhdGlvbnMgaW4gU0ltb2RlLiIKICAo YW5kIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQotICAgICAgKG1hdGNoX3Rl c3QgImFhcmNoNjRfc2ltZF9pbW1fc2NhbGFyX3AgKG9wLCBHRVRfTU9ERSAo b3ApKSIpKSkKKyAgICAgIChtYXRjaF90ZXN0ICJhYXJjaDY0X2Nhbl9jb25z dF9tb3ZpX3J0eF9wIChvcCwgU0ltb2RlKSIpKSkKIAogKGRlZmluZV9hZGRy ZXNzX2NvbnN0cmFpbnQgIkRwIgogICAiQGludGVybmFsCg== --_002_DB6PR0802MB23093F5F45CA227BD2F5BE36FFBF0DB6PR0802MB2309_--