From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 55415 invoked by alias); 12 Jun 2017 07:56:58 -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 55387 invoked by uid 89); 12 Jun 2017 07:56:57 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.1 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=ABS, revival, H*Ad:U*ian, 12f X-HELO: EUR01-VE1-obe.outbound.protection.outlook.com Received: from mail-ve1eur01on0060.outbound.protection.outlook.com (HELO EUR01-VE1-obe.outbound.protection.outlook.com) (104.47.1.60) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 12 Jun 2017 07:56:53 +0000 Received: from VI1PR0801MB2031.eurprd08.prod.outlook.com (10.173.74.140) by VI1PR0801MB2032.eurprd08.prod.outlook.com (10.173.74.141) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1157.12; Mon, 12 Jun 2017 07:56:54 +0000 Received: from VI1PR0801MB2031.eurprd08.prod.outlook.com ([fe80::b9d4:b6e7:35f9:e399]) by VI1PR0801MB2031.eurprd08.prod.outlook.com ([fe80::b9d4:b6e7:35f9:e399%17]) with mapi id 15.01.1157.017; Mon, 12 Jun 2017 07:56:54 +0000 From: Tamar Christina To: GCC Patches CC: nd , "law@redhat.com" , "ian@airs.com" , "rguenther@suse.de" Subject: [GCC][PATCH][mid-end] Optimize x * copysign (1.0, y) [Patch (1/2)] Date: Mon, 12 Jun 2017 07:56:00 -0000 Message-ID: authentication-results: arm.com; dkim=none (message not signed) header.d=none;arm.com; dmarc=none action=none header.from=arm.com; x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;VI1PR0801MB2032;7:Ravk2BCE5QNRpltmI1C2uvR5as2bBh9/kuQjwVZiSqbF+XH5zSf7DOCW9GfiQX7K8Z/1D7r8H9BHlfbd2z9imBbI4xqfREwRS6+fzlNpuVKyXageAXzLUXNQ/fPh+h6Z9qvUz4kqmjuzfldPviehB6gd7jzUX9tf/6sHf6qGIh5E5NiSPJ+1xF8gSJ+RNNx1+LrraInrUASZQv5X08riYY+LG3R2wMb0ggQBLh0YCWqOsBli2Y9kikXkNOeUjDTonFOIERiDqUVyp8KaX/PttRzb2Kk8E4Sy2eDgh8tAkqDhShW3Zdv0pqk235R42udE2QFSwHqsJaZ9yv0YpBCVFA== x-ms-traffictypediagnostic: VI1PR0801MB2032: x-ms-office365-filtering-correlation-id: b2143cc1-7135-4be1-51de-08d4b16897d8 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(2017030254075)(48565401081)(201703131423075)(201703031133081);SRVR:VI1PR0801MB2032; nodisclaimer: True x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(180628864354917)(22074186197030)(183786458502308); x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(102415395)(6040450)(601004)(2401047)(8121501046)(5005006)(93006095)(93001095)(100000703101)(100105400095)(10201501046)(3002001)(6055026)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123560025)(20161123564025)(20161123558100)(20161123555025)(20161123562025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:VI1PR0801MB2032;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:VI1PR0801MB2032; x-forefront-prvs: 03361FCC43 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(6009001)(39450400003)(39410400002)(39860400002)(39850400002)(39400400002)(39840400002)(53754006)(377424004)(189998001)(4326008)(2900100001)(102836003)(72206003)(966005)(3660700001)(50986999)(99936001)(3846002)(14454004)(478600001)(2906002)(54356999)(6506006)(66066001)(6916009)(9686003)(3280700002)(305945005)(8676002)(81166006)(5250100002)(6436002)(8936002)(53936002)(6306002)(86362001)(7696004)(54906002)(38730400002)(25786009)(74316002)(7736002)(33656002)(110136004)(55016002)(99286003)(5660300001);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR0801MB2032;H:VI1PR0801MB2031.eurprd08.prod.outlook.com;FPR:;SPF:None;MLV:sfv;LANG:en; spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: multipart/mixed; boundary="_002_VI1PR0801MB20316B7A94D73C180C266C15FFCD0VI1PR0801MB2031_" MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Jun 2017 07:56:54.6146 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0801MB2032 X-IsSubscribed: yes X-SW-Source: 2017-06/txt/msg00749.txt.bz2 --_002_VI1PR0801MB20316B7A94D73C180C266C15FFCD0VI1PR0801MB2031_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-length: 1843 Hi All, this patch implements a optimization rewriting x * copysign (1.0, y) and=20 x * copysign (-1.0, y)=20 to: x ^ (y & (1 << sign_bit_position)) This is done by creating a special builtin during matching and generate the appropriate instructions during expand. This new builtin is called XORSIGN. The expansion of xorsign depends on if the backend has an appropriate optab available. If this is not the case then we use a modified version of the ex= isting copysign which does not take the abs value of the first argument as a fall = back. This patch is a revival of a previous patch https://gcc.gnu.org/ml/gcc-patches/2015-10/msg00069.html Bootstrapped on both aarch64-none-linux-gnu and x86_64 with no issues. Regression done on aarch64-none-linux-gnu and no regressions. Ok for trunk? gcc/ 2017-06-07 Tamar Christina * builtins.def (BUILT_IN_XORSIGN, BUILT_IN_XORSIGNF): New. (BUILT_IN_XORSIGNL, BUILT_IN_XORSIGN_FLOAT_NX): Likewise. * match.pd (mult (COPYSIGN:s real_onep @0) @1): New simplifier. (mult (COPYSIGN:s real_mus_onep @0) @1): Likewise. (copysigns @0 (negate @1)): Likewise. * builtins.c (expand_builtin_copysign): Promoted local to argument. (expand_builtin): Added CASE_FLT_FN_FLOATN_NX (BUILT_IN_XORSIGN) and CASE_FLT_FN (BUILT_IN_XORSIGN). (BUILT_IN_COPYSIGN): Updated function call. * optabs.h (expand_copysign): New bool. (expand_xorsign): New. * optabs.def (xorsign_optab): New. * optabs.c (expand_copysign): New parameter. * fortran/f95-lang.c (xorsignl, xorsign, xorsignf): New. * fortran/mathbuiltins.def (XORSIGN): New. gcc/testsuite/ 2017-06-07 Tamar Christina * gcc.dg/tree-ssa/xorsign.c: New. * gcc.dg/xorsign_exec.c: New. * gcc.dg/vec-xorsign_exec.c: New. * gcc.dg/tree-ssa/reassoc-39.c (f2, f3): Updated constant to 2.= --_002_VI1PR0801MB20316B7A94D73C180C266C15FFCD0VI1PR0801MB2031_ Content-Type: text/x-patch; name="xorgsign-1.patch" Content-Description: xorgsign-1.patch Content-Disposition: attachment; filename="xorgsign-1.patch"; size=14527; creation-date="Mon, 12 Jun 2017 07:50:55 GMT"; modification-date="Mon, 12 Jun 2017 07:50:55 GMT" Content-Transfer-Encoding: base64 Content-length: 19695 ZGlmZiAtLWdpdCBhL2djYy9idWlsdGlucy5jIGIvZ2NjL2J1aWx0aW5zLmMK aW5kZXggMzA0NjJhZDBmNDE5NzIxZmQwYWEyMDI5ZGJjOWY4ZjU1OTNiNTgy My4uMmE4NGJlYmY1ZjYyMzVmODRhMGY0NmYxNWJhMmZlZDY3YjFkNTU2NCAx MDA2NDQKLS0tIGEvZ2NjL2J1aWx0aW5zLmMKKysrIGIvZ2NjL2J1aWx0aW5z LmMKQEAgLTUxMTcsMTAgKzUxMTcsMTIgQEAgZXhwYW5kX2J1aWx0aW5fZmFi cyAodHJlZSBleHAsIHJ0eCB0YXJnZXQsIHJ0eCBzdWJ0YXJnZXQpCiAvKiBF eHBhbmQgRVhQLCBhIGNhbGwgdG8gY29weXNpZ24sIGNvcHlzaWduZiwgb3Ig Y29weXNpZ25sLgogICAgUmV0dXJuIE5VTEwgaXMgYSBub3JtYWwgY2FsbCBz aG91bGQgYmUgZW1pdHRlZCByYXRoZXIgdGhhbiBleHBhbmRpbmcgdGhlCiAg ICBmdW5jdGlvbiBpbmxpbmUuICBJZiBjb252ZW5pZW50LCB0aGUgcmVzdWx0 IHNob3VsZCBiZSBwbGFjZWQgaW4gVEFSR0VULgotICAgU1VCVEFSR0VUIG1h eSBiZSB1c2VkIGFzIHRoZSB0YXJnZXQgZm9yIGNvbXB1dGluZyB0aGUgb3Bl cmFuZC4gICovCisgICBTVUJUQVJHRVQgbWF5IGJlIHVzZWQgYXMgdGhlIHRh cmdldCBmb3IgY29tcHV0aW5nIHRoZSBvcGVyYW5kLgorICAgSWYgT1AwX05F RURTX0FCUyBpcyB0cnVlIHRoZW4gYWJzKCkgd2lsbCBiZSBwZXJmb3JtZWQg b24gdGhlIGZpcnN0CisgICBhcmd1bWVudC4gICovCiAKIHN0YXRpYyBydHgK LWV4cGFuZF9idWlsdGluX2NvcHlzaWduICh0cmVlIGV4cCwgcnR4IHRhcmdl dCwgcnR4IHN1YnRhcmdldCkKK2V4cGFuZF9idWlsdGluX2NvcHlzaWduICh0 cmVlIGV4cCwgcnR4IHRhcmdldCwgcnR4IHN1YnRhcmdldCwgYm9vbCBvcDBf bmVlZHNfYWJzKQogewogICBydHggb3AwLCBvcDE7CiAgIHRyZWUgYXJnOwpA QCAtNTEzNCw3ICs1MTM2LDcgQEAgZXhwYW5kX2J1aWx0aW5fY29weXNpZ24g KHRyZWUgZXhwLCBydHggdGFyZ2V0LCBydHggc3VidGFyZ2V0KQogICBhcmcg PSBDQUxMX0VYUFJfQVJHIChleHAsIDEpOwogICBvcDEgPSBleHBhbmRfbm9y bWFsIChhcmcpOwogCi0gIHJldHVybiBleHBhbmRfY29weXNpZ24gKG9wMCwg b3AxLCB0YXJnZXQpOworICByZXR1cm4gZXhwYW5kX2NvcHlzaWduIChvcDAs IG9wMSwgdGFyZ2V0LCBvcDBfbmVlZHNfYWJzKTsKIH0KIAogLyogRXhwYW5k IGEgY2FsbCB0byBfX2J1aWx0aW5fX19jbGVhcl9jYWNoZS4gICovCkBAIC02 NTg2LDcgKzY1ODgsMTQgQEAgZXhwYW5kX2J1aWx0aW4gKHRyZWUgZXhwLCBy dHggdGFyZ2V0LCBydHggc3VidGFyZ2V0LCBtYWNoaW5lX21vZGUgbW9kZSwK IAogICAgIENBU0VfRkxUX0ZOIChCVUlMVF9JTl9DT1BZU0lHTik6CiAgICAg Q0FTRV9GTFRfRk5fRkxPQVROX05YIChCVUlMVF9JTl9DT1BZU0lHTik6Ci0g ICAgICB0YXJnZXQgPSBleHBhbmRfYnVpbHRpbl9jb3B5c2lnbiAoZXhwLCB0 YXJnZXQsIHN1YnRhcmdldCk7CisgICAgICB0YXJnZXQgPSBleHBhbmRfYnVp bHRpbl9jb3B5c2lnbiAoZXhwLCB0YXJnZXQsIHN1YnRhcmdldCwgdHJ1ZSk7 CisgICAgICBpZiAodGFyZ2V0KQorCXJldHVybiB0YXJnZXQ7CisgICAgICBi cmVhazsKKworICAgIENBU0VfRkxUX0ZOIChCVUlMVF9JTl9YT1JTSUdOKToK KyAgICBDQVNFX0ZMVF9GTl9GTE9BVE5fTlggKEJVSUxUX0lOX1hPUlNJR04p OgorICAgICAgdGFyZ2V0ID0gZXhwYW5kX2J1aWx0aW5fY29weXNpZ24gKGV4 cCwgdGFyZ2V0LCBzdWJ0YXJnZXQsIGZhbHNlKTsKICAgICAgIGlmICh0YXJn ZXQpCiAJcmV0dXJuIHRhcmdldDsKICAgICAgIGJyZWFrOwpAQCAtNzY4OCw3 ICs3Njk3LDcgQEAgYnVpbHRpbl9tYXRoZm5fY29kZSAoY29uc3RfdHJlZSB0 KQogICBjb25zdF9jYWxsX2V4cHJfYXJnX2l0ZXJhdG9yIGl0ZXI7CiAKICAg aWYgKFRSRUVfQ09ERSAodCkgIT0gQ0FMTF9FWFBSCi0gICAgICB8fCBUUkVF X0NPREUgKENBTExfRVhQUl9GTiAodCkpICE9IEFERFJfRVhQUikKKyAgICAg IHx8IChDQUxMX0VYUFJfRk4gKHQpICYmIFRSRUVfQ09ERSAoQ0FMTF9FWFBS X0ZOICh0KSkgIT0gQUREUl9FWFBSKSkKICAgICByZXR1cm4gRU5EX0JVSUxU SU5TOwogCiAgIGZuZGVjbCA9IGdldF9jYWxsZWVfZm5kZWNsICh0KTsKZGlm ZiAtLWdpdCBhL2djYy9idWlsdGlucy5kZWYgYi9nY2MvYnVpbHRpbnMuZGVm CmluZGV4IDU4ZDc4ZGJiZGVlNThkZjc3ZmI3YmFkOTA0MzYyMzI3NzA0NDAz YzUuLjk1MDhmYzM1ZDYyMjM2OWFiNWI4OWZjNjNkM2FkZDM3Mjg5MzEyNzkg MTAwNjQ0Ci0tLSBhL2djYy9idWlsdGlucy5kZWYKKysrIGIvZ2NjL2J1aWx0 aW5zLmRlZgpAQCAtMzI1LDYgKzMyNSwxMiBAQCBERUZfQzk5X0JVSUxUSU4g ICAgICAgIChCVUlMVF9JTl9DT1BZU0lHTkwsICJjb3B5c2lnbmwiLCBCVF9G Tl9MT05HRE9VQkxFX0xPTkdETwogI2RlZmluZSBDT1BZU0lHTl9UWVBFKEYp IEJUX0ZOXyMjRiMjXyMjRiMjXyMjRgogREVGX0dDQ19GTE9BVE5fTlhfQlVJ TFRJTlMgKEJVSUxUX0lOX0NPUFlTSUdOLCAiY29weXNpZ24iLCBDT1BZU0lH Tl9UWVBFLCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQogI3VuZGVm IENPUFlTSUdOX1RZUEUKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxU X0lOX1hPUlNJR04sICJ4b3JzaWduIiwgQlRfRk5fRE9VQkxFX0RPVUJMRV9E T1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR0ND X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9YT1JTSUdORiwgInhvcnNpZ25m IiwgQlRfRk5fRkxPQVRfRkxPQVRfRkxPQVQsIEFUVFJfQ09OU1RfTk9USFJP V19MRUFGX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9J Tl9YT1JTSUdOTCwgInhvcnNpZ25sIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05H RE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJ U1QpCisjZGVmaW5lIFhPUlNJR05fVFlQRShGKSBCVF9GTl8jI0YjI18jI0Yj I18jI0YKK0RFRl9HQ0NfRkxPQVROX05YX0JVSUxUSU5TIChCVUlMVF9JTl9Y T1JTSUdOLCAieG9yc2lnbiIsIFhPUlNJR05fVFlQRSwgQVRUUl9DT05TVF9O T1RIUk9XX0xFQUZfTElTVCkKKyN1bmRlZiBYT1JTSUdOX1RZUEUKIERFRl9M SUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NPUywgImNvcyIsIEJUX0ZO X0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCiBERUZf Qzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9DT1NGLCAiY29zZiIsIEJU X0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQogREVG X0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ09TSCwgImNvc2giLCBC VF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VS Uk5PKQpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vZjk1LWxhbmcuYyBiL2dj Yy9mb3J0cmFuL2Y5NS1sYW5nLmMKaW5kZXggNDRiZDhkY2MyYWQwMjhhOGUx ZWMxY2Q0NzdkOWU4ZGMxNzkwZmI1Ny4uOGM1ZmM3MmFlZDY1NGYyNDcwZDFk NTc5Mzg5MzVlMGI4Nzk2NGZlOCAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4v Zjk1LWxhbmcuYworKysgYi9nY2MvZm9ydHJhbi9mOTUtbGFuZy5jCkBAIC03 NDcsNiArNzQ3LDE2IEBAIGdmY19pbml0X2J1aWx0aW5fZnVuY3Rpb25zICh2 b2lkKQogICBnZmNfZGVmaW5lX2J1aWx0aW4gKCJfX2J1aWx0aW5fY29weXNp Z25mIiwgbWZ1bmNfZmxvYXRbMV0sIAogCQkgICAgICBCVUlMVF9JTl9DT1BZ U0lHTkYsICJjb3B5c2lnbmYiLAogCQkgICAgICBBVFRSX0NPTlNUX05PVEhS T1dfTEVBRl9MSVNUKTsKKworICBnZmNfZGVmaW5lX2J1aWx0aW4gKCJfX2J1 aWx0aW5feG9yc2lnbmwiLCBtZnVuY19sb25nZG91YmxlWzFdLAorICAgICAg ICAgICAgICAgICAgICAgIEJVSUxUX0lOX1hPUlNJR05MLCAieG9yc2lnbmwi LAorICAgICAgICAgICAgICAgICAgICAgIEFUVFJfQ09OU1RfTk9USFJPV19M RUFGX0xJU1QpOworICBnZmNfZGVmaW5lX2J1aWx0aW4gKCJfX2J1aWx0aW5f eG9yc2lnbiIsIG1mdW5jX2RvdWJsZVsxXSwKKyAgICAgICAgICAgICAgICAg ICAgICBCVUlMVF9JTl9YT1JTSUdOLCAieG9yc2lnbiIsCisgICAgICAgICAg ICAgICAgICAgICAgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCk7Cisg IGdmY19kZWZpbmVfYnVpbHRpbiAoIl9fYnVpbHRpbl94b3JzaWduZiIsIG1m dW5jX2Zsb2F0WzFdLAorICAgICAgICAgICAgICAgICAgICAgIEJVSUxUX0lO X1hPUlNJR05GLCAieG9yc2lnbmYiLAorICAgICAgICAgICAgICAgICAgICAg IEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpOwogIAogICBnZmNfZGVm aW5lX2J1aWx0aW4gKCJfX2J1aWx0aW5fbmV4dGFmdGVybCIsIG1mdW5jX2xv bmdkb3VibGVbMV0sIAogCQkgICAgICBCVUlMVF9JTl9ORVhUQUZURVJMLCAi bmV4dGFmdGVybCIsCmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi9tYXRoYnVp bHRpbnMuZGVmIGIvZ2NjL2ZvcnRyYW4vbWF0aGJ1aWx0aW5zLmRlZgppbmRl eCBmYWRmZWRiMjVmZmUxNjgwNmM4MjMxOGU4YzNmMTNhOTk5M2Y5NmZmLi5l ODY1NzM1YzAyODA4NGRkNWRmMjIwNTU5YWRkZGQyM2VjZWM1ZGU5IDEwMDY0 NAotLS0gYS9nY2MvZm9ydHJhbi9tYXRoYnVpbHRpbnMuZGVmCisrKyBiL2dj Yy9mb3J0cmFuL21hdGhidWlsdGlucy5kZWYKQEAgLTU4LDYgKzU4LDcgQEAg REVGSU5FX01BVEhfQlVJTFRJTiAgIChIWVBPVCwgImh5cG90IiwgIDEpCiAg ICBkb3VibGUgYW5kIGxvbmcgZG91YmxlKSBhbmQgdG8gYnVpbGQgdGhlIHF1 YWQtcHJlY2lzaW9uIGRlY2xzLiAgKi8KIE9USEVSX0JVSUxUSU4gKENBQlMs ICAgICAgImNhYnMiLCAgICAgIGNhYnMsICAgIHRydWUpCiBPVEhFUl9CVUlM VElOIChDT1BZU0lHTiwgICJjb3B5c2lnbiIsICAyLCAgICAgICB0cnVlKQor T1RIRVJfQlVJTFRJTiAoWE9SU0lHTiwgICAieG9yc2lnbiIgLCAgMiwgICAg ICAgdHJ1ZSkKIE9USEVSX0JVSUxUSU4gKENQT1csICAgICAgImNwb3ciLCAg ICAgIGNwb3csICAgIHRydWUpCiBPVEhFUl9CVUlMVElOIChGQUJTLCAgICAg ICJmYWJzIiwgICAgICAxLCAgICAgICB0cnVlKQogT1RIRVJfQlVJTFRJTiAo Rk1PRCwgICAgICAiZm1vZCIsICAgICAgMiwgICAgICAgdHJ1ZSkKZGlmZiAt LWdpdCBhL2djYy9tYXRjaC5wZCBiL2djYy9tYXRjaC5wZAppbmRleCA1NGE4 ZTA0NDlmODMwMWZmYWY1NTNjMTM5YmJkMmQ3Y2NiMWU4NjQ4Li5kNmNlOGY2 MDZmMWZkZjc5MDIwY2IwZjE4YTAxMGZjNTU0Y2EzOWU2IDEwMDY0NAotLS0g YS9nY2MvbWF0Y2gucGQKKysrIGIvZ2NjL21hdGNoLnBkCkBAIC00NDEsNiAr NDQxLDIxIEBAIERFRklORV9JTlRfQU5EX0ZMT0FUX1JPVU5EX0ZOIChSSU5U KQogICAoY29zcyAoY29weXNpZ25zIEAwIEAxKSkKICAgIChjb3NzIEAwKSkp CiAKKy8qIHggKiBjb3B5c2lnbigxLjAsIHkpIC0+IHhvcnNpZ24oeCwgeSku ICAqLworKGZvciBjb3B5c2lnbnMgKENPUFlTSUdOKQorICAgICB4b3JzaWdu cyAoWE9SU0lHTikKKyAoc2ltcGxpZnkKKyAgKG11bHQ6YyAoY29weXNpZ25z OnMgcmVhbF9vbmVwIEAwKSBAMSkKKyAgICAoeG9yc2lnbnMgQDEgQDApKSkK KworCisvKiB4ICogY29weXNpZ24oLTEuMCwgeSkgLT4geG9yc2lnbih4LCB5 KS4gICovCisoZm9yIGNvcHlzaWducyAoQ09QWVNJR04pCisgICAgIHhvcnNp Z25zIChYT1JTSUdOKQorIChzaW1wbGlmeQorICAobXVsdDpjIChjb3B5c2ln bnM6cyByZWFsX21pbnVzX29uZXAgQDApIEAxKQorICAgICh4b3JzaWducyBA MSBAMCkpKQorCiAvKiBwb3coY29weXNpZ24oeCwgeSksIHopIC0+IHBvdyh4 LCB6KSBpZiB6IGlzIGFuIGV2ZW4gaW50ZWdlci4gICovCiAoZm9yIHBvd3Mg KFBPVykKICAgICAgY29weXNpZ25zIChDT1BZU0lHTikKZGlmZiAtLWdpdCBh L2djYy9vcHRhYnMuYyBiL2djYy9vcHRhYnMuYwppbmRleCBiNjllNzU5NDNj Yzk5ZDZjNTc5MmFlMmYxNTFmNTM0M2QyYmRiYzFhLi5hNzZkNmUzMDQxZGQz YjcwMjRiNjYxNmRlOGQxMzkwMDMxMzkwYjFlIDEwMDY0NAotLS0gYS9nY2Mv b3B0YWJzLmMKKysrIGIvZ2NjL29wdGFicy5jCkBAIC0zNDMzLDI0ICszNDMz LDI2IEBAIGV4cGFuZF9jb3B5c2lnbl9iaXQgKG1hY2hpbmVfbW9kZSBtb2Rl LCBydHggb3AwLCBydHggb3AxLCBydHggdGFyZ2V0LAogICByZXR1cm4gdGFy Z2V0OwogfQogCi0vKiBFeHBhbmQgdGhlIEM5OSBjb3B5c2lnbiBvcGVyYXRp b24uICBPUDAgYW5kIE9QMSBtdXN0IGJlIHRoZSBzYW1lCi0gICBzY2FsYXIg ZmxvYXRpbmcgcG9pbnQgbW9kZS4gIFJldHVybiBOVUxMIGlmIHdlIGRvIG5v dCBrbm93IGhvdyB0bwotICAgZXhwYW5kIHRoZSBvcGVyYXRpb24gaW5saW5l LiAgKi8KKy8qIEV4cGFuZCB0aGUgQzk5IGNvcHlzaWduIG9wZXJhdGlvbiBv ciBhbiBvcHRpbWl6ZWQgJ3hvcnNpZ24nIGRlcGVuZGluZyBvbgorICAgdGhl IHZhbHVlIG9mIE9QMF9ORUVEU19BQlMuCisgICBFc3NlbnRpYWxseSB4b3Jz aWduKGFicyh4KSx5KSA9PSBjb3B5c2lnbih4LHkpLgorICAgT1AwIGFuZCBP UDEgbXVzdCBiZSB0aGUgc2FtZSBzY2FsYXIgZmxvYXRpbmcgcG9pbnQgbW9k ZS4KKyAgIFJldHVybiBOVUxMIGlmIHdlIGRvIG5vdCBrbm93IGhvdyB0byBl eHBhbmQgdGhlIG9wZXJhdGlvbiBpbmxpbmUuICAqLwogCiBydHgKLWV4cGFu ZF9jb3B5c2lnbiAocnR4IG9wMCwgcnR4IG9wMSwgcnR4IHRhcmdldCkKK2V4 cGFuZF9jb3B5c2lnbiAocnR4IG9wMCwgcnR4IG9wMSwgcnR4IHRhcmdldCwg Ym9vbCBvcDBfbmVlZHNfYWJzKQogewogICBtYWNoaW5lX21vZGUgbW9kZSA9 IEdFVF9NT0RFIChvcDApOwogICBjb25zdCBzdHJ1Y3QgcmVhbF9mb3JtYXQg KmZtdDsKLSAgYm9vbCBvcDBfaXNfYWJzOwogICBydHggdGVtcDsKIAogICBn Y2NfYXNzZXJ0IChTQ0FMQVJfRkxPQVRfTU9ERV9QIChtb2RlKSk7CiAgIGdj Y19hc3NlcnQgKEdFVF9NT0RFIChvcDEpID09IG1vZGUpOwogCiAgIC8qIEZp cnN0IHRyeSB0byBkbyBpdCB3aXRoIGEgc3BlY2lhbCBpbnN0cnVjdGlvbi4g ICovCi0gIHRlbXAgPSBleHBhbmRfYmlub3AgKG1vZGUsIGNvcHlzaWduX29w dGFiLCBvcDAsIG9wMSwKLQkJICAgICAgIHRhcmdldCwgMCwgT1BUQUJfRElS RUNUKTsKKyAgdGVtcCA9IGV4cGFuZF9iaW5vcCAobW9kZSwgb3AwX25lZWRz X2FicyA/IGNvcHlzaWduX29wdGFiIDogeG9yc2lnbl9vcHRhYiwKKwkJICAg ICAgIG9wMCwgb3AxLCB0YXJnZXQsIDAsIE9QVEFCX0RJUkVDVCk7CisKICAg aWYgKHRlbXApCiAgICAgcmV0dXJuIHRlbXA7CiAKQEAgLTM0NTgsMTIgKzM0 NjAsMTEgQEAgZXhwYW5kX2NvcHlzaWduIChydHggb3AwLCBydHggb3AxLCBy dHggdGFyZ2V0KQogICBpZiAoZm10ID09IE5VTEwgfHwgIWZtdC0+aGFzX3Np Z25lZF96ZXJvKQogICAgIHJldHVybiBOVUxMX1JUWDsKIAotICBvcDBfaXNf YWJzID0gZmFsc2U7Ci0gIGlmIChDT05TVF9ET1VCTEVfQVNfRkxPQVRfUCAo b3AwKSkKKyAgaWYgKG9wMF9uZWVkc19hYnMgJiYgQ09OU1RfRE9VQkxFX0FT X0ZMT0FUX1AgKG9wMCkpCiAgICAgewogICAgICAgaWYgKHJlYWxfaXNuZWcg KENPTlNUX0RPVUJMRV9SRUFMX1ZBTFVFIChvcDApKSkKIAlvcDAgPSBzaW1w bGlmeV91bmFyeV9vcGVyYXRpb24gKEFCUywgbW9kZSwgb3AwLCBtb2RlKTsK LSAgICAgIG9wMF9pc19hYnMgPSB0cnVlOworICAgICAgb3AwX25lZWRzX2Fi cyA9IGZhbHNlOwogICAgIH0KIAogICBpZiAoZm10LT5zaWduYml0X3JvID49 IDAKQEAgLTM0NzIsNyArMzQ3Myw3IEBAIGV4cGFuZF9jb3B5c2lnbiAocnR4 IG9wMCwgcnR4IG9wMSwgcnR4IHRhcmdldCkKIAkgICAgICAmJiBvcHRhYl9o YW5kbGVyIChhYnNfb3B0YWIsIG1vZGUpICE9IENPREVfRk9SX25vdGhpbmcp KSkKICAgICB7CiAgICAgICB0ZW1wID0gZXhwYW5kX2NvcHlzaWduX2Fic25l ZyAobW9kZSwgb3AwLCBvcDEsIHRhcmdldCwKLQkJCQkgICAgIGZtdC0+c2ln bmJpdF9ybywgb3AwX2lzX2Ficyk7CisJCQkJICAgICBmbXQtPnNpZ25iaXRf cm8sICFvcDBfbmVlZHNfYWJzKTsKICAgICAgIGlmICh0ZW1wKQogCXJldHVy biB0ZW1wOwogICAgIH0KQEAgLTM0ODAsNyArMzQ4MSw3IEBAIGV4cGFuZF9j b3B5c2lnbiAocnR4IG9wMCwgcnR4IG9wMSwgcnR4IHRhcmdldCkKICAgaWYg KGZtdC0+c2lnbmJpdF9ydyA8IDApCiAgICAgcmV0dXJuIE5VTExfUlRYOwog ICByZXR1cm4gZXhwYW5kX2NvcHlzaWduX2JpdCAobW9kZSwgb3AwLCBvcDEs IHRhcmdldCwKLQkJCSAgICAgIGZtdC0+c2lnbmJpdF9ydywgb3AwX2lzX2Fi cyk7CisJCQkgICAgICBmbXQtPnNpZ25iaXRfcncsICFvcDBfbmVlZHNfYWJz KTsKIH0KIAwKIC8qIEdlbmVyYXRlIGFuIGluc3RydWN0aW9uIHdob3NlIGlu c24tY29kZSBpcyBJTlNOX0NPREUsCmRpZmYgLS1naXQgYS9nY2Mvb3B0YWJz LmRlZiBiL2djYy9vcHRhYnMuZGVmCmluZGV4IDUwNGM2NTViZTAyMTBhNzJl N2YwZjM0Y2RlMDEzMWUyMWNjZjgwODkuLjUwN2FmOWVhODFjNDJlYmE5ODc4 MGVmMzI2YzIyODQ3ZmRkMmMwNDMgMTAwNjQ0Ci0tLSBhL2djYy9vcHRhYnMu ZGVmCisrKyBiL2djYy9vcHRhYnMuZGVmCkBAIC0yNTMsNiArMjUzLDcgQEAg T1BUQUJfRCAoYXNpbl9vcHRhYiwgImFzaW4kYTIiKQogT1BUQUJfRCAoYXRh bjJfb3B0YWIsICJhdGFuMiRhMyIpCiBPUFRBQl9EIChhdGFuX29wdGFiLCAi YXRhbiRhMiIpCiBPUFRBQl9EIChjb3B5c2lnbl9vcHRhYiwgImNvcHlzaWdu JEYkYTMiKQorT1BUQUJfRCAoeG9yc2lnbl9vcHRhYiwgInhvcnNpZ24kRiRh MyIpCiBPUFRBQl9EIChjb3Nfb3B0YWIsICJjb3MkYTIiKQogT1BUQUJfRCAo ZXhwMTBfb3B0YWIsICJleHAxMCRhMiIpCiBPUFRBQl9EIChleHAyX29wdGFi LCAiZXhwMiRhMiIpCmRpZmYgLS1naXQgYS9nY2Mvb3B0YWJzLmggYi9nY2Mv b3B0YWJzLmgKaW5kZXggNzI4Yjg2NmYwOGRiMDFkZTJjYzMzMGFkMjkwODhh YjI1MmY0ZDNhZC4uNjc2YmUwYmM2YzhiNDllNDZkODY4ZmY2NjEwZGUyNjc1 YThhNmI3OSAxMDA2NDQKLS0tIGEvZ2NjL29wdGFicy5oCisrKyBiL2djYy9v cHRhYnMuaApAQCAtMjIwLDcgKzIyMCw4IEBAIGV4dGVybiBydHggZXhwYW5k X2FicyAobWFjaGluZV9tb2RlLCBydHgsIHJ0eCwgaW50LCBpbnQpOwogZXh0 ZXJuIHJ0eCBleHBhbmRfb25lX2NtcGxfYWJzX25vanVtcCAobWFjaGluZV9t b2RlLCBydHgsIHJ0eCk7CiAKIC8qIEV4cGFuZCB0aGUgY29weXNpZ24gb3Bl cmF0aW9uLiAgKi8KLWV4dGVybiBydHggZXhwYW5kX2NvcHlzaWduIChydHgs IHJ0eCwgcnR4KTsKK2V4dGVybiBydHggZXhwYW5kX2NvcHlzaWduIChydHgs IHJ0eCwgcnR4LCBib29sKTsKKwogLyogR2VuZXJhdGUgYW4gaW5zdHJ1Y3Rp b24gd2l0aCBhIGdpdmVuIElOU05fQ09ERSB3aXRoIGFuIG91dHB1dCBhbmQK ICAgIGFuIGlucHV0LiAgKi8KIGV4dGVybiBib29sIG1heWJlX2VtaXRfdW5v cF9pbnNuIChlbnVtIGluc25fY29kZSwgcnR4LCBydHgsIGVudW0gcnR4X2Nv ZGUpOwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1z c2EvcmVhc3NvYy0zOS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1z c2EvcmVhc3NvYy0zOS5jCmluZGV4IDliZWZlMTg0YTAxODUxNWRhNTBhNGRk MTQ3ODJkNzk0ODJmZDA3ZDkuLmI5MTcxNDZiYzgxMjMwMTE5NGZlZWY5YzE0 NWFkOTNlOWMyZWU0NDYgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL3RyZWUtc3NhL3JlYXNzb2MtMzkuYworKysgYi9nY2MvdGVzdHN1aXRl L2djYy5kZy90cmVlLXNzYS9yZWFzc29jLTM5LmMKQEAgLTIwLDEzICsyMCwx MyBAQCBmMSAoZmxvYXQgeCkKIGRvdWJsZQogZjIgKGRvdWJsZSB4LCBkb3Vi bGUgeSkKIHsKLSAgcmV0dXJuIHggKiAoKDEuMC8xMikgKiBfX2J1aWx0aW5f Y29weXNpZ24gKDEuMCwgeSkpOworICByZXR1cm4geCAqICgoMS4wLzEyKSAq IF9fYnVpbHRpbl9jb3B5c2lnbiAoMi4wLCB5KSk7CiB9CiAKIGRvdWJsZQog ZjMgKGRvdWJsZSB4LCBkb3VibGUgeSkKIHsKLSAgcmV0dXJuICh4ICogKC0x LjAvMTIpKSAqIF9fYnVpbHRpbl9jb3B5c2lnbiAoMS4wLCB5KTsKKyAgcmV0 dXJuICh4ICogKC0xLjAvMTIpKSAqIF9fYnVpbHRpbl9jb3B5c2lnbiAoMi4w LCB5KTsKIH0KIAogZG91YmxlCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRl L2djYy5kZy90cmVlLXNzYS94b3JzaWduLmMgYi9nY2MvdGVzdHN1aXRlL2dj Yy5kZy90cmVlLXNzYS94b3JzaWduLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MC4uNTk4OTcyN2JmOWE4MGY1ZmY0ODdkZDcyNjdiOTZjYzMyNzQ1ZjM0NQot LS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUt c3NhL3hvcnNpZ24uYwpAQCAtMCwwICsxLDg1IEBACisvKiB7IGRnLWRvIGNv bXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItTyAtZmR1bXAtdHJlZS1n aW1wbGUiIH0gKi8KKworZG91YmxlCitjaGVja19kX3BvcyAoZG91YmxlIHgs IGRvdWJsZSB5KQoreworICByZXR1cm4geCAqIF9fYnVpbHRpbl9jb3B5c2ln biAoMS4wLCB5KTsKK30KKworZmxvYXQKK2NoZWNrX2ZfcG9zIChmbG9hdCB4 LCBmbG9hdCB5KQoreworICByZXR1cm4geCAqIF9fYnVpbHRpbl9jb3B5c2ln bmYgKDEuMGYsIHkpOworfQorCitsb25nIGRvdWJsZQorY2hlY2tfbF9wb3Mg KGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHkpCit7CisgIHJldHVybiB4 ICogX19idWlsdGluX2NvcHlzaWdubCAoMS4wLCB5KTsKK30KKworLyogLS0t LS0tLS0tLS0tLS0tICovCisKK2RvdWJsZQorY2hlY2tfZF9uZWcgKGRvdWJs ZSB4LCBkb3VibGUgeSkKK3sKKyAgcmV0dXJuIHggKiBfX2J1aWx0aW5fY29w eXNpZ24gKC0xLjAsIHkpOworfQorCitmbG9hdAorY2hlY2tfZl9uZWcgKGZs b2F0IHgsIGZsb2F0IHkpCit7CisgIHJldHVybiB4ICogX19idWlsdGluX2Nv cHlzaWduZiAoLTEuMGYsIHkpOworfQorCitsb25nIGRvdWJsZQorY2hlY2tf bF9uZWcgKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHkpCit7CisgIHJl dHVybiB4ICogX19idWlsdGluX2NvcHlzaWdubCAoLTEuMCwgeSk7Cit9CisK Ky8qIC0tLS0tLS0tLS0tLS0tLSAqLworCitkb3VibGUKK2NoZWNrX2RfcG9z X3JldiAoZG91YmxlIHgsIGRvdWJsZSB5KQoreworICByZXR1cm4gX19idWls dGluX2NvcHlzaWduICgxLjAsIHkpICogeDsKK30KKworZmxvYXQKK2NoZWNr X2ZfcG9zX3JldiAoZmxvYXQgeCwgZmxvYXQgeSkKK3sKKyAgcmV0dXJuIF9f YnVpbHRpbl9jb3B5c2lnbmYgKDEuMGYsIHkpICogeDsKK30KKworbG9uZyBk b3VibGUKK2NoZWNrX2xfcG9zX3JldiAobG9uZyBkb3VibGUgeCwgbG9uZyBk b3VibGUgeSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9jb3B5c2lnbmwgKDEu MCwgeSkgKiB4OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0gKi8KKworZG91 YmxlCitjaGVja19kX25lZ19yZXYgKGRvdWJsZSB4LCBkb3VibGUgeSkKK3sK KyAgcmV0dXJuIF9fYnVpbHRpbl9jb3B5c2lnbiAoLTEuMCwgeSkgKiB4Owor fQorCitmbG9hdAorY2hlY2tfZl9uZWdfcmV2IChmbG9hdCB4LCBmbG9hdCB5 KQoreworICByZXR1cm4gX19idWlsdGluX2NvcHlzaWduZiAoLTEuMGYsIHkp ICogeDsKK30KKworbG9uZyBkb3VibGUKK2NoZWNrX2xfbmVnX3JldiAobG9u ZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkKK3sKKyAgcmV0dXJuIF9fYnVp bHRpbl9jb3B5c2lnbmwgKC0xLjAsIHkpICogeDsKK30KKworLyogeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ4b3JzaWduIiAxMiAiZ2lt cGxlIn0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRp bWVzICJ4b3JzaWduZiIgNCAiZ2ltcGxlIn0gfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ4b3JzaWdubCIgNCAiZ2ltcGxl In0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAi X19idWlsdGluX3hvcnNpZ24iIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvdmVjLXhvcnNpZ25fZXhlYy5jIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvdmVjLXhvcnNpZ25fZXhlYy5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAuLmY4YzhiZWZkMzM2YzdmMjc0M2ExNjIxZDNiMGY1M2Q3OGJh YjlkZjcKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5k Zy92ZWMteG9yc2lnbl9leGVjLmMKQEAgLTAsMCArMSw1MyBAQAorLyogeyBk Zy1kbyBydW4gfSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLWZ0cmVlLXZl Y3Rvcml6ZSAtZmR1bXAtdHJlZS12ZWN0LWRldGFpbHMiIH0gKi8KKy8qIHsg ZGctYWRkaXRpb25hbC1vcHRpb25zICItbWFyY2g9YXJtdjgtYSIgeyB0YXJn ZXQgeyBhYXJjaDY0Ki0qLSogfSB9IH0qLworCitleHRlcm4gdm9pZCBhYm9y dCAoKTsKKworI2RlZmluZSBOIDE2CitmbG9hdCBhW05dID0gey0wLjFmLCAt My4yZiwgLTYuM2YsIC05LjRmLAorCSAgICAgIC0xMi41ZiwgLTE1LjZmLCAt MTguN2YsIC0yMS44ZiwKKwkgICAgICAyNC45ZiwgMjcuMWYsIDMwLjJmLCAz My4zZiwKKwkgICAgICAzNi40ZiwgMzkuNWYsIDQyLjZmLCA0NS43Zn07Citm bG9hdCBiW05dID0gey0xLjJmLCAzLjRmLCAtNS42ZiwgNy44ZiwKKwkgICAg ICAtOS4wZiwgMS4wZiwgLTIuMGYsIDMuMGYsCisJICAgICAgLTQuMGYsIC01 LjBmLCA2LjBmLCA3LjBmLAorCSAgICAgIC04LjBmLCAtOS4wZiwgMTAuMGYs IDExLjBmfTsKK2Zsb2F0IHJbTl07CisKK2Zsb2F0IGFkW05dID0gey0wLjFm ZCwgIC0zLjJkLCAgLTYuM2QsICAtOS40ZCwKKyAgICAgICAgICAgICAgIC0x Mi41ZCwgLTE1LjZkLCAtMTguN2QsIC0yMS44ZCwKKyAgICAgICAgICAgICAg ICAyNC45ZCwgIDI3LjFkLCAgMzAuMmQsICAzMy4zZCwKKyAgICAgICAgICAg ICAgICAzNi40ZCwgIDM5LjVkLCAgNDIuNmQsIDQ1LjdkfTsKK2Zsb2F0IGJk W05dID0gey0xLjJkLCAgMy40ZCwgLTUuNmQsICA3LjhkLAorICAgICAgICAg ICAgICAgLTkuMGQsICAxLjBkLCAtMi4wZCwgIDMuMGQsCisgICAgICAgICAg ICAgICAtNC4wZCwgLTUuMGQsICA2LjBkLCAgNy4wZCwKKyAgICAgICAgICAg ICAgIC04LjBkLCAtOS4wZCwgMTAuMGQsIDExLjBkfTsKK2Zsb2F0IHJkW05d OworCitpbnQKK21haW4gKHZvaWQpCit7CisgIGludCBpOworCisgIGZvciAo aSA9IDA7IGkgPCBOOyBpKyspCisgICAgcltpXSA9IGFbaV0gKiBfYnVpbHRp bl9jb3B5c2lnbmYgKDEuMGYsIGJbaV0pOworCisgIC8qIGNoZWNrIHJlc3Vs dHM6ICAqLworICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIGlmIChy W2ldICE9IGFbaV0gKiBfX2J1aWx0aW5fY29weXNpZ25mICgxLjBmLCBiW2ld KSkKKyAgICAgIGFib3J0ICgpOworCisgIGZvciAoaSA9IDA7IGkgPCBOOyBp KyspCisgICAgcmRbaV0gPSBhZFtpXSAqIF9idWlsdGluX2NvcHlzaWduZCAo MS4wZCwgYmRbaV0pOworCisgIC8qIGNoZWNrIHJlc3VsdHM6ICAqLworICBm b3IgKGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIGlmIChyW2ldICE9IGFkW2ld ICogX19idWlsdGluX2NvcHlzaWduZCAoMS4wZCwgYmRbaV0pKQorICAgICAg YWJvcnQgKCk7CisKKworICByZXR1cm4gMDsKK30KKworLyogeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ2ZWN0b3JpemVkIDEgbG9vcHMi IDEgInZlY3QiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcveG9yc2lnbl9leGVjLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy94 b3JzaWduX2V4ZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NGJmODA0 NGNiZDEyYzFjYzc0NGZmOWIyYTMzMDhkNzEyNjdiZmYwCi0tLSAvZGV2L251 bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcveG9yc2lnbl9leGVjLmMK QEAgLTAsMCArMSwyNiBAQAorLyogeyBkZy1kbyBydW4gfSAqLworLyogeyBk Zy1vcHRpb25zICItTyAtZmZhc3QtbWF0aCIgfSAqLworCisjaW5jbHVkZSA8 bWF0aC5oPgorCitleHRlcm4gdm9pZCBhYm9ydCh2b2lkKTsKKworc3RhdGlj IGRvdWJsZSB4ID0gMi4wOworc3RhdGljIGZsb2F0ICB5ID0gMi4wOworCitp bnQgbWFpbigpCit7CisgIGlmICgoMi41ICogX19idWlsdGluX2NvcHlzaWdu KDEuMGQsIHgpKSAhPSAyLjUpCisgICAgIGFib3J0KCk7CisKKyAgaWYgKCgy LjUgKiBfX2J1aWx0aW5fY29weXNpZ24oMS4wZiwgeSkpICE9IDIuNSkKKyAg ICAgYWJvcnQoKTsKKworICBpZiAoKDIuNSAqIF9fYnVpbHRpbl9jb3B5c2ln bmYoMS4wZCwgLXgpKSAhPSAtMi41KQorICAgICBhYm9ydCgpOworCisgIGlm ICgoMi41ICogX19idWlsdGluX2NvcHlzaWduZigxLjBmLCAteSkpICE9IC0y LjUpCisgICAgIGFib3J0KCk7CisKKyAgcmV0dXJuIDA7Cit9Cg== --_002_VI1PR0801MB20316B7A94D73C180C266C15FFCD0VI1PR0801MB2031_--