From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2117.outbound.protection.outlook.com [40.107.93.117]) by sourceware.org (Postfix) with ESMTPS id EEB0F3858D28 for ; Wed, 29 Nov 2023 14:36:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org EEB0F3858D28 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=os.amperecomputing.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=os.amperecomputing.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org EEB0F3858D28 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=40.107.93.117 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1701268569; cv=pass; b=waMtFw1YPLoM9hx4u4OtMOxAksQWz5W1XEA76LMF24btAq8jPN181IN2rtSm6NZb6nQdnIeOVMaEPaY0xHaBXBe7lokCGaxb4tZraKp2qtdc30XMwOAyBT6ADkeYLbDJdZXvTPkGxMrCDl14d9PsO8F2WnuI5bUM/9PEnKVz2X8= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1701268569; c=relaxed/simple; bh=NhQoXxVy3/SQvSaVh+QAnPxiO+9mrlF5NGLjq3sSEvg=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=v92cW8IlnYcw7+L5wva+KxSatj9fJJx38FGjeC4nOJYkXA6//gutIbacUkfNyilLEYI66Of3ZylwtAfEXWnN5bZAP+gG7f6XIL8E3qkgg1gQAKoBBrazQVWaVVFvi0sht2CKF7nqURXwh6aYdauq8IlmHfk0y+NHR+XL/ZLUbJ0= ARC-Authentication-Results: i=2; server2.sourceware.org ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nJtSXL7bYA7HYaRlstWulXot6wfHfjeJJ6/3r98paMZuuOyJWVltEtbxR2zh96dHbVA4tuUehdpmasIUssCjdFxJRS93jVu8/3k+aGutr/LLHdpQ04esyaifI/iDcMGIjOAJ6xD/sFY7UHGi8JCYE0deiIo3eJS4aqcM8I/0M0z5P/SwbJlWoFeT9Jxxs7HMSU/BcSHYt4Pmx7b5WG4dackwxIrG4w2TJnZtDhWAaTcoIRP/LwVdcTtccJQy/7S+BzNZ2UQQxsDjg2IFGQT++NeZK6R4SCpXGGNO2d/xuiuuKYmeTa3jqeFmP2z2PM7Ltd+HNp/33xTp+r6bdYiYBg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=NqhGtnE6bRkgF4EXy2k37WbY7SiB6P6XYi7O74ct2yU=; b=fExkzofr6Qz11iTbvqwx2Gw7af2deWzxv1JzT0aBphJF1blcBnj+X8ioRA2ZjyVfseM/eT3miSIQRgwPFf6XbYxPAcPqj06SbDBe50GCk8IiRd0OESNTbTE55Dq6TbjnCwJZlH+k8lvzgxtwz5EtiSgfnbo7qMyUrh2wq76DcOFEXTKWAfCtHhsa6QVUROpMRAiExK+Subje3kuZT1H9dd693LCp9XuGLu//ZNzhj5cTLHTyMCmrTq1L6GceWxXnGJPuiLrvl+yPU9yHNXMFuen6zZnNfG619x6jwZSDY5rVpV/z+T0NuJArZIXXAGGJEmNIpasQzyevPO79Nek+VQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NqhGtnE6bRkgF4EXy2k37WbY7SiB6P6XYi7O74ct2yU=; b=fUuwH7Ze7nP78l997IJiwWvpHoupJ0axSeCYVryvUD1yubM73csks0lni1ND+zEJQurWobTRmrjbec9z33Mvc1vmwYn4iylLG1il7s4ODcgbIeR9ICfPrXC05Dhh3R50X3ON2VFoAfMWjr//j/KRzfo+waw6AjELZYpOcQ3QU0k= Received: from SN6PR01MB4240.prod.exchangelabs.com (2603:10b6:805:ae::22) by CH3PR01MB8213.prod.exchangelabs.com (2603:10b6:610:170::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7025.29; Wed, 29 Nov 2023 14:35:58 +0000 Received: from SN6PR01MB4240.prod.exchangelabs.com ([fe80::5669:ba60:a9d7:6ab0]) by SN6PR01MB4240.prod.exchangelabs.com ([fe80::5669:ba60:a9d7:6ab0%4]) with mapi id 15.20.7046.023; Wed, 29 Nov 2023 14:35:58 +0000 From: Di Zhao OS To: Richard Biener CC: "gcc-patches@gcc.gnu.org" Subject: RE: [PATCH v4] [tree-optimization/110279] Consider FMA in get_reassociation_width Thread-Topic: [PATCH v4] [tree-optimization/110279] Consider FMA in get_reassociation_width Thread-Index: AdnnBSPtK+NgbkElQ86FLpG1NcmCuQRMvhQAAHJVX2AEf9pAgAEvAawgAu98zgABhes98A== Date: Wed, 29 Nov 2023 14:35:58 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: zh-CN X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_ActionId=69287d24-37a2-448b-bfa8-b3fe88495999;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_ContentBits=0;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_Enabled=true;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_Method=Standard;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_Name=Confidential (Default);MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_SetDate=2023-11-29T07:05:59Z;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_SiteId=3bc2b170-fd94-476d-b0ce-4229bdc904a7; authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-traffictypediagnostic: SN6PR01MB4240:EE_|CH3PR01MB8213:EE_ x-ms-office365-filtering-correlation-id: efdd5ec8-c5cf-4d07-9161-08dbf0e8806c x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: YLhaWRD5KsdPKqd5lISf/AHYL09nGD/FDyc/M1vmVoXJH24I0gwpWcl5E5nhm50YUNAf2F3s0nOZTKTT28wc8MKbJSj7SvoBkU2xLEESrXjRHw2io+CHLRJU6TLHMNE3DeSQGWUiMfdYQjZ8t4zxml55gFiUvfvpIwxyq52ls8KUg+VUDoeuSyb5/piWTPAZMzjUGNU5TSEIF51Qb/MdPC7aS/GMNy/zjj6aj/VAp6u+2oyqWsO2GMmlQ3eQq5h0TqsHEHxhcNEYcArPAvD+ut/bB2ApDkih49Gp5wBtWyW+rpKsp71v1K+mH33KcC18tcuDgbqMtGm2kDjbxjCyxKegrYHWsUnrqLF2wihvorX7tGqrTZN2EYjPlcDasvTjmty2uvnLVaor8h2HBlXSAGXwRslDJo8Jc294PHRhmp2OmNkBmMgvDbruT7H/bgV7SdZinDInQKVY2jPL+srFW7Y3E1xFYjnrCkFdekiWCmzcSFW3wE0+siXo8EOZJUOgtkTzH4ZEBSLtJxae/0ynINP0mwWq0B5uqDNNFXe8BojYV5Plc84h3RefzeDS5ui3vzXAqWQGphB/WsOFQLQb9WQ5P+JTCUE5i1VU6Apom9o= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR01MB4240.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230031)(136003)(376002)(396003)(346002)(366004)(39850400004)(230922051799003)(451199024)(1800799012)(186009)(64100799003)(26005)(122000001)(83380400001)(99936003)(52536014)(55016003)(86362001)(6916009)(4326008)(8936002)(9686003)(7696005)(66574015)(76116006)(53546011)(66476007)(66446008)(316002)(66556008)(66946007)(38100700002)(966005)(64756008)(5660300002)(8676002)(478600001)(30864003)(2906002)(84970400001)(41300700001)(38070700009)(71200400001)(6506007)(33656002)(66899024)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Y0JIWXhKUjA1QmJyeC9MdHJQYXh0Y080ZUJlWTg4b2FtcVNsMEdXKzVLb2hD?= =?utf-8?B?dVJHNkdlL0VBdG93NElFQmxHUDl3VmhrekdYcjBmd05xZlJxclJQNFFRMk93?= =?utf-8?B?R01tRmVPeEU2T3RDZEl5NGZmck9oM0FTKzNPalJIZkRDaW1URzk3RDEyN1dR?= =?utf-8?B?Lys4UzlldmYzNVJWUm5oNERhR2kycGpybld3KzdFRFhlZ2dVTGcxeEExZVN2?= =?utf-8?B?T2Q3M3ZKSzdVTkZtcTZxM0REdDhRa1RLeklzeGNTT0IwSEVKVVl2SFB3b2dr?= =?utf-8?B?cjdwNTlIUjVseEwvcnkzUi90eVkxZlFhZHlGc3h3T0dyUk55VnpVY0VOZmxh?= =?utf-8?B?bkR6S3RDN0hibGU1VHRZRVpSL2pLTG16ZlJjMXJaYUpyYmhuZXFqQlJQdkRY?= =?utf-8?B?dGFqQzZ2SHhIQlJrUi9EdUsvRld5YkorZU50UkR3b1VYM0NrSzBNOGtHa0lB?= =?utf-8?B?Vmk2NCt2K1FsYXE4MXBXcEQ4RnFnTnMwYXZ1Wkt0aituV1daeHMxZEpLekZQ?= =?utf-8?B?YUFsMVNOOUE0SlNlZ2Nvc0ZZNFVQVlNRQzFtdjUwUzlEOFQvazdqVCtuWWFv?= =?utf-8?B?ZFpGazJXMk4vZ1JiUXpTQ0x4RjlFdHVXa0V6RHhPY0Vtc0lJK1hyeXU1b0R6?= =?utf-8?B?R1VHeU5QQVVuRGxFbzc2clVyVGVBMS9rVFZvTE1RUFd1S2hwRUY2UU5CN0s4?= =?utf-8?B?Z2s5aTFIY3dhcTIraFdmemF5eWcyVzBJZXNpVjAyb0cxcU93QzlRYVBnL1Yz?= =?utf-8?B?blZoTFB3eDVCOGJ6QTBYcG5IWTE3MWhnOFhEYmJzSW9wQ1E4b3pHSlhsbWdN?= =?utf-8?B?bzcvMXZ2Sk9kMXFSaG1MWW1DNlZDREpUY0drajY1QjZPdmNiN0tURXlyeXYv?= =?utf-8?B?Ky9YK2luOVR3K2kwZk1FeXBZa01Ta1NJVUhhM091WUVXMWZpbFg0RjVPMzF1?= =?utf-8?B?aUdoSTN2MWx6dVVObjU2K3lUOWExSFArekxJa1VGaTF5ZWRJajNFamRKMEZX?= =?utf-8?B?Y1kyWThjaHJlNzhXVzYvSm54czYxSHMrT3E2MjZBU2UwZDdtY1VrV3E2NU54?= =?utf-8?B?NGs0djY5K01nR1JoajZVSDd0T2xUNWJ3QVM5VytISDVtK0lNVXBpWXA0ZVJq?= =?utf-8?B?YzZJU1ZUUjNsSmpTb3JqSlc5R2NrbzdXOUJlMW85WTdNTm1lWHA1N0Y4ZjdE?= =?utf-8?B?c1VaUkc1ZU8zMnUvNzIvVXp1aCtOMHJBNjFibm9FNTJ1ZzFPVzZROG80Z0hV?= =?utf-8?B?TDdhcG42MWFKeEJLR1FoeTZhRFFsSnhtZDZFbVNuL3hUVGpvdzFKZzdQeU05?= =?utf-8?B?cnRLblBvS240YWczM1luWXowVm5CU1NwQnU2QWNtdVJVV0I2NGo4UllJQUZ0?= =?utf-8?B?cDlHVW1WREVRVTNMUzh2YXhlS0xZVnEreXZuUzZtTlk5cEsvRFpzOUpvTjBs?= =?utf-8?B?K0lFSGFnNjhsQ01GUGlwV1VyZ2FyWmVRb1d5YVJtOFdpMmNwKzA5ZTh4R2V2?= =?utf-8?B?SEM2TFhxa2FkOGZhTWRtVWhaalJIVk80b2hoZnVRamtlOCtWNUlFb2NEMVA1?= =?utf-8?B?ZmwwK2ZpQVdmZEJDTnU4bXRNZ1FNWjdhUk4wVmJ3MmlJUUEwYVBNVE5jL0RR?= =?utf-8?B?Z3NvSjB1MHhVWlE1Zkg1VUVGeXRqcnFqbFgvUjNRNnMrR2lVbkZSK2NmcVRJ?= =?utf-8?B?ZGVYZzE0Q3AvZ0FHd1JrQ3VMTG5HUDJpeEVicnMwK1VWcHlYNnU0cUNHWVpJ?= =?utf-8?B?K1lsbGRPTnNmd0xIb3BNdTJ0MFg0THF5UTVtOEFEei9MNWJxM0QyQXJjWUFX?= =?utf-8?B?cDRxMHZjMXVJNWQzL3N4Sm5odmU1Qk45TTY3TXlNZ0p1cFdxQkFxU1Z6Mi9B?= =?utf-8?B?MXZLdEZTZmhRanpGQXN0N1ZHTHNuQU5tcldnTUF4NUZ4UG5DSDBFUjhGNVRB?= =?utf-8?B?elhsY3pOdXFWQ1pHSFdzSmV1WGl5TWM2TC9uRzRHRlExSWZVbFY2MnlZS1hG?= =?utf-8?B?WUxVak9zMWRtREl1cU1xTzk2MlhXTXdKWDdDVm1BSld6dnpJV0lHSWhwK3lQ?= =?utf-8?B?NzlmMHowVCtnWjZWSUY2UXMxRm9RNWdSeng2ZVRqYkZsNXVMMzk2N3l0eFJX?= =?utf-8?B?ekR5SEZRU3R5QWpBUGlRTnZUWGMrQkt4TjhENnh4SHpTYzliNmE0K1lrWkdY?= =?utf-8?B?elE9PQ==?= Content-Type: multipart/mixed; boundary="_002_SN6PR01MB42407ECAB354244C7CC0BE58E883ASN6PR01MB4240prod_" MIME-Version: 1.0 X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SN6PR01MB4240.prod.exchangelabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: efdd5ec8-c5cf-4d07-9161-08dbf0e8806c X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Nov 2023 14:35:58.0643 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: cyYGC9zFaTCfYChFf8UL7PogQdYMTLB3QyvA/aPjVo2qF9153M9NEQ9lsxnNIpwqo2z7D1X3wd2YispF4/Ri1yXfekZZIylghtwbVg+V0ph3vOMLJZWUIdfeoREgjQvv X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR01MB8213 X-Spam-Status: No, score=-2.9 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --_002_SN6PR01MB42407ECAB354244C7CC0BE58E883ASN6PR01MB4240prod_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBSaWNoYXJkIEJpZW5lciA8cmlj aGFyZC5ndWVudGhlckBnbWFpbC5jb20+DQo+IFNlbnQ6IFR1ZXNkYXksIE5vdmVtYmVyIDIxLCAy MDIzIDk6MDEgUE0NCj4gVG86IERpIFpoYW8gT1MgPGRpemhhb0Bvcy5hbXBlcmVjb21wdXRpbmcu Y29tPg0KPiBDYzogZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmcNCj4gU3ViamVjdDogUmU6IFtQQVRD SCB2NF0gW3RyZWUtb3B0aW1pemF0aW9uLzExMDI3OV0gQ29uc2lkZXIgRk1BIGluDQo+IGdldF9y ZWFzc29jaWF0aW9uX3dpZHRoDQo+IA0KPiBPbiBUaHUsIE5vdiA5LCAyMDIzIGF0IDY6NTPigK9Q TSBEaSBaaGFvIE9TIDxkaXpoYW9Ab3MuYW1wZXJlY29tcHV0aW5nLmNvbT4NCj4gd3JvdGU6DQo+ ID4NCj4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiBGcm9tOiBSaWNoYXJk IEJpZW5lciA8cmljaGFyZC5ndWVudGhlckBnbWFpbC5jb20+DQo+ID4gPiBTZW50OiBUdWVzZGF5 LCBPY3RvYmVyIDMxLCAyMDIzIDk6NDggUE0NCj4gPiA+IFRvOiBEaSBaaGFvIE9TIDxkaXpoYW9A b3MuYW1wZXJlY29tcHV0aW5nLmNvbT4NCj4gPiA+IENjOiBnY2MtcGF0Y2hlc0BnY2MuZ251Lm9y Zw0KPiA+ID4gU3ViamVjdDogUmU6IFtQQVRDSCB2NF0gW3RyZWUtb3B0aW1pemF0aW9uLzExMDI3 OV0gQ29uc2lkZXIgRk1BIGluDQo+ID4gPiBnZXRfcmVhc3NvY2lhdGlvbl93aWR0aA0KPiA+ID4N Cj4gPiA+IE9uIFN1biwgT2N0IDgsIDIwMjMgYXQgNjo0MOKAr1BNIERpIFpoYW8gT1MgPGRpemhh b0Bvcy5hbXBlcmVjb21wdXRpbmcuY29tPg0KPiA+ID4gd3JvdGU6DQo+ID4gPiA+DQo+ID4gPiA+ IEF0dGFjaGVkIGlzIGEgbmV3IHZlcnNpb24gb2YgdGhlIHBhdGNoLg0KPiA+ID4gPg0KPiA+ID4g PiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+ID4gRnJvbTogUmljaGFyZCBC aWVuZXIgPHJpY2hhcmQuZ3VlbnRoZXJAZ21haWwuY29tPg0KPiA+ID4gPiA+IFNlbnQ6IEZyaWRh eSwgT2N0b2JlciA2LCAyMDIzIDU6MzMgUE0NCj4gPiA+ID4gPiBUbzogRGkgWmhhbyBPUyA8ZGl6 aGFvQG9zLmFtcGVyZWNvbXB1dGluZy5jb20+DQo+ID4gPiA+ID4gQ2M6IGdjYy1wYXRjaGVzQGdj Yy5nbnUub3JnDQo+ID4gPiA+ID4gU3ViamVjdDogUmU6IFtQQVRDSCB2NF0gW3RyZWUtb3B0aW1p emF0aW9uLzExMDI3OV0gQ29uc2lkZXIgRk1BIGluDQo+ID4gPiA+ID4gZ2V0X3JlYXNzb2NpYXRp b25fd2lkdGgNCj4gPiA+ID4gPg0KPiA+ID4gPiA+IE9uIFRodSwgU2VwIDE0LCAyMDIzIGF0IDI6 NDPigK9QTSBEaSBaaGFvIE9TDQo+ID4gPiA+ID4gPGRpemhhb0Bvcy5hbXBlcmVjb21wdXRpbmcu Y29tPiB3cm90ZToNCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiBUaGlzIGlzIGEgbmV3IHZlcnNp b24gb2YgdGhlIHBhdGNoIG9uICJuZXN0ZWQgRk1BIi4NCj4gPiA+ID4gPiA+IFNvcnJ5IGZvciB1 cGRhdGluZyB0aGlzIGFmdGVyIHNvIGxvbmcsIEkndmUgYmVlbiBzdHVkeWluZyBhbmQNCj4gPiA+ ID4gPiA+IHdyaXRpbmcgbWljcm8gY2FzZXMgdG8gc29ydCBvdXQgdGhlIGNhdXNlIG9mIHRoZSBy ZWdyZXNzaW9uLg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gU29ycnkgZm9yIHRha2luZyBzbyBsb25n IHRvIHJlcGx5Lg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiBGaXJzdCwgZm9sbG93aW5nIHByZXZp b3VzIGRpc2N1c3Npb246DQo+ID4gPiA+ID4gPiAoaHR0cHM6Ly9nY2MuZ251Lm9yZy9waXBlcm1h aWwvZ2NjLXBhdGNoZXMvMjAyMy0NCj4gU2VwdGVtYmVyLzYyOTA4MC5odG1sKQ0KPiA+ID4gPiA+ ID4NCj4gPiA+ID4gPiA+IDEuIEZyb20gdGVzdGluZyBtb3JlIGFsdGVyZWQgY2FzZXMsIEkgZG9u J3QgdGhpbmsgdGhlDQo+ID4gPiA+ID4gPiBwcm9ibGVtIGlzIHRoYXQgcmVhc3NvY2lhdGlvbiB3 b3JrcyBsb2NhbGx5LiBJbiB0aGF0Og0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ICAgMSkgT24g dGhlIGV4YW1wbGUgd2l0aCBtdWx0aXBsaWNhdGlvbnM6DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ ID4gICAgICAgICB0bXAxID0gYSArIGMgKiBjICsgZCAqIGQgKyB4ICogeTsNCj4gPiA+ID4gPiA+ ICAgICAgICAgdG1wMiA9IHggKiB0bXAxOw0KPiA+ID4gPiA+ID4gICAgICAgICByZXN1bHQgKz0g KGEgKyBjICsgZCArIHRtcDIpOw0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ICAgR2l2ZW4gInJl c3VsdCIgcmV3cml0dGVuIGJ5IHdpZHRoPTIsIHRoZSBwZXJmb3JtYW5jZSBpcw0KPiA+ID4gPiA+ ID4gICB3b3JzZSBpZiB3ZSByZXdyaXRlICJ0bXAxIiB3aXRoIHdpZHRoPTIuIEluIGNvbnRyYXN0 LCBpZiB3ZQ0KPiA+ID4gPiA+ID4gICByZW1vdmUgdGhlIG11bHRpcGxpY2F0aW9ucyBmcm9tIHRo ZSBleGFtcGxlIChhbmQgbWFrZSAidG1wMSINCj4gPiA+ID4gPiA+ICAgbm90IHNpbmdlIHVzZWQp LCBhbmQgc3RpbGwgcmV3cml0ZSAicmVzdWx0IiBieSB3aWR0aD0yLCB0aGVuDQo+ID4gPiA+ID4g PiAgIHJld3JpdGluZyAidG1wMSIgd2l0aCB3aWR0aD0yIGlzIGJldHRlci4gKE1ha2Ugc2Vuc2Ug YmVjYXVzZQ0KPiA+ID4gPiA+ID4gICB0aGUgdHJlZSdzIGRlcHRoIGF0ICJyZXN1bHQiIGlzIHN0 aWxsIHNtYWxsZXIgaWYgd2UgcmV3cml0ZQ0KPiA+ID4gPiA+ID4gICAidG1wMSIuKQ0KPiA+ID4g PiA+ID4NCj4gPiA+ID4gPiA+ICAgMikgSSB0cmllZCB0byBtb2RpZnkgdGhlIGFzc2VtYmx5IGNv ZGUgb2YgdGhlIGV4YW1wbGUgd2l0aG91dA0KPiA+ID4gPiA+ID4gICBGTUEsIHNvIHRoZSB3aWR0 aCBvZiAicmVzdWx0IiBpcyA0LiBPbiBBbXBlcmUxIHRoZXJlJ3Mgbm8NCj4gPiA+ID4gPiA+ICAg b2J2aW91cyBpbXByb3ZlbWVudC4gU28gYWx0aG91Z2ggdGhpcyBpcyBhbiBpbnRlcmVzdGluZw0K PiA+ID4gPiA+ID4gICBwcm9ibGVtLCBpdCBkb2Vzbid0IHNlZW0gbGlrZSB0aGUgY2F1c2Ugb2Yg dGhlIHJlZ3Jlc3Npb24uDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBPSywgSSBzZWUuDQo+ID4gPiA+ ID4NCj4gPiA+ID4gPiA+IDIuIEZyb20gYXNzZW1ibHkgY29kZSBvZiB0aGUgY2FzZSB3aXRoIEZN QSwgb25lIHByb2JsZW0gaXMNCj4gPiA+ID4gPiA+IHRoYXQsIHJld3JpdGluZyAidG1wMSIgdG8g cGFyYWxsZWwgZGlkbid0IGRlY3JlYXNlIHRoZQ0KPiA+ID4gPiA+ID4gbWluaW11bSBDUFUgY3lj bGVzICh0YWtpbmcgTVVMVF9FWFBScyBpbnRvIGFjY291bnQpLCBidXQNCj4gPiA+ID4gPiA+IGlu Y3JlYXNlZCBjb2RlIHNpemUsIHNvIHRoZSBvdmVyaGVhZCBpcyBpbmNyZWFzZWQuDQo+ID4gPiA+ ID4gPg0KPiA+ID4gPiA+ID4gICAgYSkgV2hlbiAidG1wMSIgaXMgbm90IHJlLXdyaXR0ZW4gdG8g cGFyYWxsZWw6DQo+ID4gPiA+ID4gPiAgICAgICAgIGZtYWRkIGQzMSwgZDIsIGQyLCBkMzANCj4g PiA+ID4gPiA+ICAgICAgICAgZm1hZGQgZDMxLCBkMywgZDMsIGQzMQ0KPiA+ID4gPiA+ID4gICAg ICAgICBmbWFkZCBkMzEsIGQ0LCBkNSwgZDMxICAvLyJ0bXAxIg0KPiA+ID4gPiA+ID4gICAgICAg ICBmbWFkZCBkMzEsIGQzMSwgZDQsIGQzDQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gICAgYikg V2hlbiAidG1wMSIgaXMgcmUtd3JpdHRlbiB0byBwYXJhbGxlbDoNCj4gPiA+ID4gPiA+ICAgICAg ICAgZm11bCAgZDMxLCBkNCwgZDUNCj4gPiA+ID4gPiA+ICAgICAgICAgZm1hZGQgZDI3LCBkMiwg ZDIsIGQzMA0KPiA+ID4gPiA+ID4gICAgICAgICBmbWFkZCBkMzEsIGQzLCBkMywgZDMxDQo+ID4g PiA+ID4gPiAgICAgICAgIGZhZGQgIGQzMSwgZDMxLCBkMjcgICAgIC8vInRtcDEiDQo+ID4gPiA+ ID4gPiAgICAgICAgIGZtYWRkIGQzMSwgZDMxLCBkNCwgZDMNCj4gPiA+ID4gPiA+DQo+ID4gPiA+ ID4gPiBGb3IgdmVyc2lvbiBhKSwgdGhlcmUgYXJlIDMgZGVwZW5kZW50IEZNQXMgdG8gY2FsY3Vs YXRlICJ0bXAxIi4NCj4gPiA+ID4gPiA+IEZvciB2ZXJzaW9uIGIpLCB0aGVyZSBhcmUgYWxzbyAz IGRlcGVuZGVudCBpbnN0cnVjdGlvbnMgaW4gdGhlDQo+ID4gPiA+ID4gPiBsb25nZXIgcGF0aDog dGhlIDFzdCwgM3JkIGFuZCA0dGguDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBZZXMsIGl0IGRvZXNu J3QgcmVhbGx5IGNoYW5nZSBhbnl0aGluZy4gIFRoZSBwYXRjaCBoYXMNCj4gPiA+ID4gPg0KPiA+ ID4gPiA+ICsgIC8qIElmIHRoZXJlJ3MgY29kZSBsaWtlICJhY2MgPSBhICogYiArIGMgKiBkICsg YWNjIiBpbiBhIHRpZ2h0IGxvb3AsDQo+ID4gPiBzb21lDQo+ID4gPiA+ID4gKyAgICAgdWFyY2hz IGNhbiBleGVjdXRlIHJlc3VsdHMgbGlrZToNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAgICAg ICBfMSA9IGEgKiBiOw0KPiA+ID4gPiA+ICsgICAgICAgXzIgPSAuRk1BIChjLCBkLCBfMSk7DQo+ ID4gPiA+ID4gKyAgICAgICBhY2NfMSA9IGFjY18wICsgXzI7DQo+ID4gPiA+ID4gKw0KPiA+ID4g PiA+ICsgICAgIGluIHBhcmFsbGVsLCB3aGlsZSB0dXJuaW5nIGl0IGludG8NCj4gPiA+ID4gPiAr DQo+ID4gPiA+ID4gKyAgICAgICBfMSA9IC5GTUEoYSwgYiwgYWNjXzApOw0KPiA+ID4gPiA+ICsg ICAgICAgYWNjXzEgPSAuRk1BKGMsIGQsIF8xKTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAg ICAgaGluZGVycyB0aGF0LCBiZWNhdXNlIHRoZW4gdGhlIGZpcnN0IEZNQSBkZXBlbmRzIG9uIHRo ZSByZXN1bHQNCj4gPiA+ID4gPiBvZiBwcmVjZWRpbmcNCj4gPiA+ID4gPiArICAgICBpdGVyYXRp b24uICAqLw0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gSSBjYW4ndCBzZWUgd2hhdCBjYW4gYmUgcnVu IGluIHBhcmFsbGVsIGZvciB0aGUgZmlyc3QgY2FzZS4gIFRoZSAuRk1BDQo+ID4gPiA+ID4gZGVw ZW5kcyBvbiB0aGUgbXVsdGlwbGljYXRpb24gYSAqIGIuICBJZmYgdGhlIHVhcmNoIHNvbWVob3cg ZGVjb21wb3Nlcw0KPiA+ID4gPiA+IC5GTUEgaW50byBtdWx0aXBseSArIGFkZCB0aGVuIHRoZSBj ICogZCBtdWx0aXBseSBjb3VsZCBydW4gaW4gcGFyYWxsZWwNCj4gPiA+ID4gPiB3aXRoIHRoZSBh ICogYiBtdWx0aXBseSB3aGljaCBfbWlnaHRfIGJlIGFibGUgdG8gaGlkZSBzb21lIG9mIHRoZQ0K PiA+ID4gPiA+IGxhdGVuY3kgb2YgdGhlIGZ1bGwgLkZNQS4gIExpa2Ugb24geDg2IFplbiBGTUEg aGFzIGEgbGF0ZW5jeSBvZiA0DQo+ID4gPiA+ID4gY3ljbGVzIGJ1dCBhIG11bHRpcGx5IG9ubHkg My4gIEJ1dCBJIG5ldmVyIGdvdCBjb25maXJtYXRpb24gZnJvbSBhbnkNCj4gPiA+ID4gPiBvZiB0 aGUgQ1BVIGRlc2lnbmVycyB0aGF0IC5GTUFzIGFyZSBpc3N1ZWQgd2hlbiB0aGUgbXVsdGlwbHkN Cj4gPiA+ID4gPiBvcGVyYW5kcyBhcmUgcmVhZHkgYW5kIHRoZSBhZGQgb3BlcmFuZCBjYW4gYmUg Zm9yd2FyZGVkLg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gSSBhbHNvIHdvbmRlciB3aHkgdGhlIG11 bHRpcGxpY2F0aW9ucyBvZiB0aGUgdHdvLUZNQSBzZXF1ZW5jZQ0KPiA+ID4gPiA+IHRoZW4gY2Fu bm90IGJlIGV4ZWN1dGVkIGF0IHRoZSBzYW1lIHRpbWU/ICBTbyBJIGhhdmUgc29tZSBkb3VidA0K PiA+ID4gPiA+IG9mIHRoZSB0aGVvcnkgYWJvdmUuDQo+ID4gPiA+DQo+ID4gPiA+IFRoZSBwYXJh bGxlbCBleGVjdXRpb24gZm9yIHRoZSBjb2RlIHNuaXBwZXQgYWJvdmUgd2FzIHRoZSBvdGhlcg0K PiA+ID4gPiBpc3N1ZSAocHJldmlvdXNseSBkaXNjdXNzZWQgaGVyZToNCj4gPiA+ID4gaHR0cHM6 Ly9nY2MuZ251Lm9yZy9waXBlcm1haWwvZ2NjLXBhdGNoZXMvMjAyMy1BdWd1c3QvNjI4OTYwLmh0 bWwpLg0KPiA+ID4gPiBTb3JyeSBpdCdzIGEgYml0IGNvbmZ1c2luZyB0byBpbmNsdWRlIHRoYXQg aGVyZSwgYnV0IHRoZXNlIDIgZml4ZXMNCj4gPiA+ID4gbmVlZHMgdG8gYmUgY29tYmluZWQgdG8g YXZvaWQgbmV3IHJlZ3Jlc3Npb25zLiBTaW5jZSBjb25zaWRlcmluZw0KPiA+ID4gPiBGTUEgaW4g Z2V0X3JlYXNzb2NpYXRpb25fd2lkdGggcHJvZHVjZXMgbW9yZSByZXN1bHRzIG9mIHdpZHRoPTEs DQo+ID4gPiA+IHNvIHRoZXJlIHdvdWxkIGJlIG1vcmUgbG9vcCBkZXBlbmRpbmcgRk1BIGNoYWlu cy4NCj4gPiA+ID4NCj4gPiA+ID4gPiBJZmYgdGhpcyByZWFsbHkgaXMgdGhlIHJlYXNvbiBmb3Ig dGhlIHNlcXVlbmNlIHRvIGV4ZWN1dGUgd2l0aCBsb3dlcg0KPiA+ID4gPiA+IG92ZXJhbGwgbGF0 ZW5jeSBhbmQgd2Ugd2FudCB0byBhdHRhY2sgdGhpcyBvbiBHSU1QTEUgdGhlbiBJIHRoaW5rDQo+ ID4gPiA+ID4gd2UgbmVlZCBhIHRhcmdldCBob29rIHRlbGxpbmcgdXMgdGhpcyBmYWN0IChJIGFs c28gd29uZGVyIGlmIHN1Y2gNCj4gPiA+ID4gPiBiZWhhdmlvciBjYW4gYmUgbW9kZWxlZCBpbiB0 aGUgc2NoZWR1bGVyIHBpcGVsaW5lIGRlc2NyaXB0aW9uIGF0IGFsbD8pDQo+ID4gPiA+ID4NCj4g PiA+ID4gPiA+IFNvIGl0IHNlZW1zIHRvIG1lIHRoZSBjdXJyZW50IGdldF9yZWFzc29jaWF0aW9u X3dpZHRoIGFsZ29yaXRobQ0KPiA+ID4gPiA+ID4gaXNuJ3Qgb3B0aW1hbCBpbiB0aGUgcHJlc2Vu Y2Ugb2YgRk1BLiBTbyBJIG1vZGlmaWVkIHRoZSBwYXRjaCB0bw0KPiA+ID4gPiA+ID4gaW1wcm92 ZSBnZXRfcmVhc3NvY2lhdGlvbl93aWR0aCwgcmF0aGVyIHRoYW4gY2hlY2sgZm9yIGNvZGUNCj4g PiA+ID4gPiA+IHBhdHRlcm5zLiAoQWx0aG91Z2ggdGhlcmUgY291bGQgYmUgc29tZSBvdGhlciBj b21wbGljYXRlZA0KPiA+ID4gPiA+ID4gZmFjdG9ycyBzbyB0aGUgcmVncmVzc2lvbiBpcyBtb3Jl IG9idmlvdXMgd2hlbiB0aGVyZSdzICJuZXN0ZWQNCj4gPiA+ID4gPiA+IEZNQSIuIEJ1dCB3aXRo IHRoaXMgcGF0Y2ggdGhhdCBzaG91bGQgYmUgYXZvaWRlZCBvciByZWR1Y2VkLikNCj4gPiA+ID4g PiA+DQo+ID4gPiA+ID4gPiBXaXRoIHRoaXMgcGF0Y2ggNTA4Lm5hbWRfciAxLWNvcHkgcnVuIGhh cyA3JSBpbXByb3ZlbWVudCBvbg0KPiA+ID4gPiA+ID4gQW1wZXJlMSwgb24gSW50ZWwgWGVvbiB0 aGVyZSdzIGFib3V0IDMlLiBXaGlsZSBJJ20gc3RpbGwNCj4gPiA+ID4gPiA+IGNvbGxlY3Rpbmcg ZGF0YSBvbiBvdGhlciBDUFVzLCBJJ2QgbGlrZSB0byBrbm93IGhvdyBkbyB5b3UNCj4gPiA+ID4g PiA+IHRoaW5rIG9mIHRoaXMuDQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gQWJvdXQgY2hhbmdl cyBpbiB0aGUgcGF0Y2g6DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gMS4gV2hlbiB0aGUgb3Ag bGlzdCBmb3JtcyBhIGNvbXBsZXRlIEZNQSBjaGFpbiwgdHJ5IHRvIHNlYXJjaA0KPiA+ID4gPiA+ ID4gZm9yIGEgc21hbGxlciB3aWR0aCBjb25zaWRlcmluZyB0aGUgYmVuZWZpdCBvZiB1c2luZyBG TUEuIFdpdGgNCj4gPiA+ID4gPiA+IGEgc21hbGxlciB3aWR0aCwgdGhlIGluY3JlbWVudCBvZiBj b2RlIHNpemUgaXMgc21hbGxlciB3aGVuDQo+ID4gPiA+ID4gPiBicmVha2luZyB0aGUgY2hhaW4u DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBCdXQgdGhpcyBpcyBhbGwgaGlnaGx5IHRhcmdldCBzcGVj aWZpYyAoY29kZSBzaXplIGV2ZW4gbW9yZSBzbykuDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBIb3cg SSB1bmRlcnN0YW5kIHlvdXIgYXBwcm9hY2ggdG8gZml4aW5nIHRoZSBpc3N1ZSBsZWFkcyBtZSB0 bw0KPiA+ID4gPiA+IHRoZSBzdWdnZXN0aW9uIHRvIHByaW9yaXRpemUgcGFyYWxsZWwgcmV3cml0 aW5nLCB0aHVzIGFsdGVyDQo+ID4gPiByYW5rX29wc19mb3JfZm1hLA0KPiA+ID4gPiA+IHRha2lu ZyB0aGUgcmVhc3NvYyB3aWR0aCBpbnRvIGFjY291bnQgKHRoZSBjb21wdXRlZCB3aWR0aCBzaG91 bGQgYmUNCj4gPiA+ID4gPiB1bmNoYW5nZWQgZnJvbSByYW5rX29wc19mb3JfZm1hKSBpbnN0ZWFk IG9mICJmaXhpbmcgdXAiIHRoZSBwYXJhbGxlbA0KPiA+ID4gPiA+IHJld3JpdGluZyBvZiBGTUFz ICh3ZWxsLCB0aGV5IGFyZSBub3QgeWV0IGZvcm1lZCBvZiBjb3Vyc2UpLg0KPiA+ID4gPiA+IGdl dF9yZWFzc29jaWF0aW9uX3dpZHRoIGhhcyAnZ2V0X3JlcXVpcmVkX2N5Y2xlcycsIHRoZSBhYm92 ZSB0aGVvcnkNCj4gPiA+ID4gPiBjb3VsZCBiZSB2ZXJpZmllZCB3aXRoIGEgdmVyeSBzaW1wbGUg dG95IHBpcGVsaW5lIG1vZGVsLiAgV2UnZCBoYXZlDQo+ID4gPiA+ID4gdG8gYXNrIHRoZSB0YXJn ZXQgZm9yIHRoZSByZWFzc29jIHdpZHRoIGZvciBNVUxUX0VYUFJzIGFzIHdlbGwgKG9yDQo+IG1h eWJlDQo+ID4gPiA+ID4gZXZlbiBGTUFfRVhQUnMpLg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gVGFr aW5nIHRoZSB3aWR0aCBvZiBGTUFzIGludG8gYWNjb3VudCB3aGVuIGNvbXB1dGluZyB0aGUgcmVh c3NvYyB3aWR0aA0KPiA+ID4gPiA+IG1pZ2h0IGJlIGFub3RoZXIgd2F5IHRvIGF0dGFjayB0aGlz Lg0KPiA+ID4gPg0KPiA+ID4gPiBQcmV2aW91c2x5IEkgdHJpZWQgdG8gc29sdmUgdGhpcyBnZW5l cmFsbHksIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQNCj4gPiA+ID4gRk1BIChzbWFsbGVyIGNvZGUg c2l6ZSkgaXMgcHJlZmVycmVkLiBOb3cgSSBhZ3JlZSBpdCdzIGRpZmZpY3VsdA0KPiA+ID4gPiBz aW5jZTogMSkgQXMgeW91IG1lbnRpb25lZCwgdGhlIGxhdGVuY3kgb2YgRk1BLCBGTVVMIGFuZCBG QUREIGNhbg0KPiA+ID4gPiBiZSBkaWZmZXJlbnQuIDIpIEZyb20gbXkgdGVzdCByZXN1bHQgb24g ZGlmZmVyZW50IG1hY2hpbmVzIHdlDQo+ID4gPiA+IGhhdmUsIGl0IHNlZW1zIHNpbXBseSBhZGRp bmcgdGhlIGN5Y2xlcyB0b2dldGhlciBpcyBub3QgYSBnb29kIHdheQ0KPiA+ID4gPiB0byBlc3Rp bWF0ZSB0aGUgbGF0ZW5jeSBvZiBjb25zZWN1dGl2ZSBGTUEuDQo+ID4gPiA+DQo+ID4gPiA+IEkg dGhpbmsgYW4gZWFzaWVyIHdheSB0byBmaXggdGhpcyBpcyB0byBhZGQgYSBwYXJhbWV0ZXIgdG8g c3VnZ2VzdA0KPiA+ID4gPiB0aGUgbGVuZ3RoIG9mIGNvbXBsZXRlIEZNQSBjaGFpbiB0byBrZWVw LiAoSXQgY2FuIGJlIHNldCBieSB0YXJnZXQNCj4gPiA+ID4gc3BlY2lmaWMgdHVuaW5nIHRoZW4u KSBBbmQgd2UgY2FuIGJyZWFrIGxvbmdlciBGTUEgY2hhaW5zIGZvcg0KPiA+ID4gPiBiZXR0ZXIg cGFyYWxsZWxpc20uIEF0dGFjaGVkIGlzIHRoZSBuZXcgaW1wbGVtZW50YXRpb24uIFdpdGgNCj4g PiA+ID4gbWF4LWZtYS1jaGFpbi1sZW49OCwgdGhlcmUncyBhYm91dCA3JSBpbXByb3ZlbWVudCBp biBzcGVjMjAxNw0KPiA+ID4gPiA1MDgubmFtZF9yIG9uIGFtcGVyZTEsIGFuZCB0aGUgb3ZlcmFs bCBpbXByb3ZlbWVudCBvbiBmcHJhdGUgaXMNCj4gPiA+ID4gYWJvdXQgMSUuDQo+ID4gPiA+DQo+ ID4gPiA+IFNpbmNlIHRoZXJlJ3MgY29kZSBpbiByYW5rX29wc19mb3JfZm1hIHRvIGlkZW50aWZ5 IE1VTFRfRVhQUnMgZnJvbQ0KPiA+ID4gPiBvdGhlcnMsIEkgbGVmdCBpdCBiZWZvcmUgZ2V0X3Jl YXNzb2NpYXRpb25fd2lkdGggc28gdGhlIG51bWJlciBvZg0KPiA+ID4gPiBNVUxUX0VYUFJzIGNh biBiZSB1c2VkLg0KPiA+ID4NCj4gPiA+IFNvcnJ5IGFnYWluIGZvciB0aGUgZGVsYXkgaW4gcmVw bHlpbmcuDQo+ID4gPg0KPiA+ID4gKyAgLyogQ2hlY2sgaWYga2VlcGluZyBjb21wbGV0ZSBGTUEg Y2hhaW5zIGlzIHByZWZlcnJlZC4gICovDQo+ID4gPiArICBpZiAod2lkdGggPiAxICYmIG11bHRf bnVtID49IDIgJiYgcGFyYW1fbWF4X2ZtYV9jaGFpbl9sZW4pDQo+ID4gPiArICAgIHsNCj4gPiA+ ICsgICAgICAvKiBudW1fZm1hX2NoYWluICsgKG51bV9mbWFfY2hhaW4gLSAxKSA+PSBudW1fcGx1 cyAuICAqLw0KPiA+ID4gKyAgICAgIGludCBudW1fb3RoZXJzID0gb3BzX251bSAtIG11bHRfbnVt Ow0KPiA+ID4gKyAgICAgIGludCBudW1fZm1hX2NoYWluID0gQ0VJTCAobnVtX290aGVycyArIDEs IDIpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgIGlmIChudW1fZm1hX2NoYWluIDwgd2lkdGgNCj4g PiA+ICsgICAgICAgICAmJiBDRUlMIChtdWx0X251bSwgbnVtX2ZtYV9jaGFpbikgPD0gcGFyYW1f bWF4X2ZtYV9jaGFpbl9sZW4pDQo+ID4gPiArICAgICAgIHdpZHRoID0gbnVtX2ZtYV9jaGFpbjsN Cj4gPiA+ICsgICAgfQ0KPiA+ID4NCj4gPiA+IHNvIGhlcmUgJ211bHRfbnVtJyBzZXJ2ZXMgYXMg YSBoZXVyaXN0aWNhbCB2YWx1ZSBob3cgbWFueQ0KPiA+ID4gRk1BcyB3ZSBjb3VsZCBidWlsZC4g IElmIHRoYXQgd2VyZSBjbG9zZSB0byBvcHNfbnVtIC0gMSB0aGVuDQo+ID4gPiB3ZSdkIGhhdmUg YSBjaGFpbiBvZiBGTUFzLiAgTm90IHN1cmUgaG93IHlvdSBnZXQgYXQNCj4gPiA+IG51bV9vdGhl cnMgLyAyIGhlcmUuICBNYXliZSB3ZSBuZWVkIHRvIGVsYWJvcmF0ZSBvbiB3aGF0IGFuDQo+ID4g PiBGTUEgY2hhaW4gaXM/ICBJIHRob3VnaHQgaXQgaXMgRk1BIChGTUEgKEZNQSAoLi4uLCBiLCBj KSwgZCwgZSksIGYsIGcpDQo+ID4gPiB3aGVyZSBlYWNoIChiLGMpIHBhaXIgaXMgcmVhbGx5IGp1 c3Qgb25lIG9wZXJhbmQgaW4gdGhlIG9wcyBhcnJheSwNCj4gPiA+IG9uZSBvZiB0aGUgJ211bHQn cy4gIFRodXMgYSBGTUEgY2hhaW4gaXMgX25vdF8NCj4gPiA+IEZNQSAoYSwgYiwgYykgKyBGTUEg KGQsIGUsIGYpICsgRk1BICguLi4pICsgLi4uLCByaWdodD8NCj4gPg0KPiA+IFRoZSAiRk1BIGNo YWluIiBoZXJlIHJlZmVycyB0byBjb25zZWN1dGl2ZSBGTUFzLCBlYWNoIHRha2luZw0KPiA+IFRo ZSBwcmV2aW91cyBvbmUncyByZXN1bHQgYXMgdGhlIHRoaXJkIG9wZXJhdG9yLCBpLmUuDQo+ID4g Li4uIEZNQShlLCBmLCBGTUEoYywgZCwgRk1BIChhLCBiLCByKSkpLi4uIC4gU28gb3JpZ2luYWwg b3ANCj4gPiBsaXN0IGxvb2tzIGxpa2UgInIgKyBhICogYiArIGMgKiBkICsgZSAqIGYgKyAuLi4i LiBUaGVzZSBGTUFzDQo+ID4gd2lsbCBlbmQgdXAgdXNpbmcgdGhlIHNhbWUgYWNjdW11bGF0ZSBy ZWdpc3Rlci4NCj4gPg0KPiA+IFdoZW4gbnVtX290aGVycz0yIG9yIDMsIHRoZXJlIGNhbiBiZSAy IGNvbXBsZXRlIGNoYWlucywgZS5nLg0KPiA+ICAgICAgICAgRk1BIChkLCBlLCBGTUEgKGEsIGIs IGMpKSArIEZNQSAoZiwgZywgaCkNCj4gPiBvcg0KPiA+ICAgICAgICAgRk1BIChkLCBlLCBGTUEg KGEsIGIsIGMpKSArIEZNQSAoZiwgZywgaCkgKyBpIC4NCj4gPiBBbmQgc28gb24sIHRoYXQncyB3 aGVyZSB0aGUgIkNFSUwgKG51bV9vdGhlcnMgKyAxLCAyKSIgY29tZXMgZnJvbS4NCj4gPg0KPiA+ ID4NCj4gPiA+IEZvcm1pbmcgYW4gRk1BIGNoYWluIGVmZmVjdGl2ZWx5IHJlZHVjZXMgdGhlIHJl YXNzb2NpYXRpb24gd2lkdGgNCj4gPiA+IG9mIHRoZSBwYXJ0aWNpcGF0aW5nIG11bHRpcGxpZXMu ICBJZiB3ZSB3ZXJlIG5vdCB0byBmb3JtIEZNQXMgYWxsDQo+ID4gPiB0aGUgbXVsdGlwbGllcyBj b3VsZCBleGVjdXRlIGluIHBhcmFsbGVsLg0KPiA+ID4NCj4gPiA+IFNvIHdoYXQgZG9lcyB0aGUg YWJvdmUgZG8sIGluIHRlcm1zIG9mIGFkanVzdGluZyB0aGUgcmVhc3NvY2lhdGlvbg0KPiA+ID4g d2lkdGggZm9yIHRoZSBfYWRkc18sIGFuZCB3aGF0J3MgdGhlIHJpcHBsZS1kb3duIGVmZmVjdCBv biBsYXRlcg0KPiA+ID4gRk1BIGZvcm1pbmc/DQo+ID4gPg0KPiA+DQo+ID4gVGhlIGFib3ZlIGNv ZGUgY2FsY3VsYXRlcyB0aGUgbnVtYmVyIG9mIHN1Y2ggRk1BIGNoYWlucyBpbiB0aGUgb3ANCj4g PiBsaXN0LiBBbmQgaWYgdGhlIGxlbmd0aCBvZiBlYWNoIGNoYWluIGRvZXNuJ3QgZXhjZWVkDQo+ ID4gcGFyYW1fbWF4X2ZtYV9jaGFpbl9sZW4sIHRoZW4gd2lkdGggaXMgc2V0IHRvIHRoZSBudW1i ZXIgb2YgY2hhaW5zLA0KPiA+IHNvIHdlIHdvbid0IGJyZWFrIHRoZW0gKGJlY2F1c2UgcmV3cml0 ZV9leHByX3RyZWVfcGFyYWxsZWwgaGFuZGxlcw0KPiA+IHRoaXMgd2VsbCkuDQo+ID4NCj4gPiA+ IFRoZSBjaGFuZ2Ugc3RpbGwgZmVlbHMgbGlrZSB3aGFjay1hLW1vbGUgcGxheWluZyByYXRoZXIg dGhhbiB1bmRlcnN0YW5kaW5nDQo+ID4gPiB0aGUgZnVuZGFtZW50YWwgaXNzdWUgb24gdGhlIHRh cmdldHMuDQo+ID4NCj4gPiBJIHRoaW5rIHRoZSBjb21wbGV4aXR5IGlzIGluIGhvdyB0aGUgaW5z dHJ1Y3Rpb25zIGFyZSBwaXBlZC4NCj4gPiBTb21lIEFybSBDUFVzIHN1Y2ggYXMgTmVvdmVyc2Ug VjIgc3VwcG9ydHMgImxhdGUtZm9yd2FyZGluZyI6DQo+ID4gIkZQIG11bHRpcGx5LWFjY3VtdWxh dGUgcGlwZWxpbmVzIHN1cHBvcnQgbGF0ZS1mb3J3YXJkaW5nIG9mDQo+ID4gYWNjdW11bGF0ZSBv cGVyYW5kcyBmcm9tIHNpbWlsYXIgzrxPUHMsIGFsbG93aW5nIGEgdHlwaWNhbA0KPiA+IHNlcXVl bmNlIG9mIG11bHRpcGx5LWFjY3VtdWxhdGUgzrxPUHMgdG8gaXNzdWUgb25lIGV2ZXJ5IE4NCj4g PiBjeWNsZXMiLiAoIk4iIGlzIHNtYWxsZXIgdGhhbiB0aGUgbGF0ZW5jeSBvZiBhIHNpbmdsZSBG TUENCj4gPiBpbnN0cnVjdGlvbi4pIFNvIGtlZXBpbmcgc3VjaCBGTUEgY2hhaW5zIGNhbiB1dGls aXplIHN1Y2gNCj4gPiBmZWF0dXJlIGFuZCB1c2VzIGxlc3MgRlAgdW5pdHMuIEkgZ3Vlc3MgdGhl IGNhc2UgaXMgc2ltaWxhciBvbg0KPiA+IHNvbWUgbGF0ZSBYODYgQ1BVcy4NCj4gPg0KPiA+IElm IHdlIHRyeSB0byBjb21wdXRlIHRoZSBtaW5pbXVtIGNpcmNsZXMgb2YgZWFjaCBvcHRpb24sIEkg dGhpbmsNCj4gPiBhdCBsZWFzdCB3ZSdsbCBuZWVkIHRvIGtub3cgd2hldGhlciB0aGUgdGFyZ2V0 IGhhcyBzaW1pbGFyDQo+ID4gZmVhdHVyZSwgYW5kIHRoZSBsYXRlbmN5IG9mIGVhY2ggdW9wLiBX aGlsZSB1c2luZyBhbg0KPiA+IGV4cGVyaWVudGlhbCBsZW5ndGggb2YgYmVuZWZpY2lhbCBGTUEg Y2hhaW4gY291bGQgYmUgYSBzaG9ydGN1dC4NCj4gPiAoTWF5YmUgYWxsb3dpbmcgZGlmZmVyZW50 IGxlbmd0aHMgZm9yIGRpZmZlcmVudCBkYXRhIHdpZHRocyBpcw0KPiA+IGJldHRlci4pDQo+IA0K PiBIbS4gIFNvIGV2ZW4gd2hlbiB3ZSBjYW4gbGF0ZS1mb3J3YXJkIGluIGFuIEZNQSBjaGFpbg0K PiBpbmNyZWFzaW5nIHRoZSB3aWR0aCBzaG91bGQgdHlwaWNhbGx5IGJlIHN0aWxsIGJldHRlcj8N Cj4gDQo+IF8xID0gRk1BIChfMiAqIF8zICsgXzQpOw0KPiBfNSA9IEZNQSAoXzYgKiBfNyArIF8x KTsNCj4gDQo+IHNheSB3aXRoIGxhdGUtZm9yd2FyZGluZyB3ZSBjYW4gaGlkZSB0aGUgbGF0ZW5j eSBvZiB0aGUgXzYgKiBfNw0KPiBtdWx0aXBseSBhbmQgdGhlIG92ZXJhbGwgbGF0ZW5jeSBvZiB0 aGUgdHdvIEZNQXMgYWJvdmUgYmVjb21lDQo+IGxhdCAoRk1BKSArIGxhdCAoQUREKSBpbiB0aGUg aWRlYWwgY2FzZS4gIEFsdGVybmF0aXZlbHkgd2UgZG8NCj4gDQo+IF8xID0gRk1BIChfMiAqIF8g MyArIF80KTsNCj4gXzggPSBfNiAqIF8gNzsNCj4gXzUgPSBfMSArIF84Ow0KPiANCj4gd2hlcmUg aWYgdGhlIEZNQSBhbmQgdGhlIG11bHRpcGx5IGNhbiBleGVjdXRlIGluIHBhcmFsbGVsDQo+ICh3 ZSBoYXZlIHR3byBGTUEgcGlwZXMpIHRoZSBsYXRlbmN5IHdvdWxkIGJlIGxhdCAoRk1BKSArIGxh dCAoQUREKS4NCj4gQnV0IHdoZW4gd2Ugb25seSBoYXZlIGEgc2luZ2xlIHBpcGVsaW5lIGNhcGFi bGUgb2YNCj4gRk1BIG9yIG11bHRpcGxpZXMgdGhlbiBpdCBpcyBhdCBsZWFzdCBNSU4gKGxhdCAo Rk1BKSArIDEsIGxhdCAoTVVMKSArIDEpDQo+ICsgbGF0IChBREQpLCBpdCBkZXBlbmRzIG9uIGx1 Y2sgd2hldGhlciB0aGUgRk1BIG9yIHRoZSBNVUwgaXMNCj4gaXNzdWVkIGZpcnN0IHRoZXJlLg0K PiANCj4gU28gaWYgbGF0ZS1mb3J3YXJkIHdvcmtzIHJlYWxseSB3ZWxsIGFuZCB0aGUgYWRkIHBh cnQgb2YgdGhlIEZNQQ0KPiBoYXMgdmVyeSBsb3cgbGF0ZW5jeSBjb21wYXJlZCB0byB0aGUgbXVs dGlwbGljYXRpb24gcGFydCBoYXZpbmcNCj4gYSBzbWFsbGVyIHJlYXNzb2Mgd2lkdGggc2hvdWxk IHBheSBvZmYgaGVyZSBhbmQgd2UgbWlnaHQgYmUNCj4gYWJsZSB0byBzaW1wbHkgY29udHJvbCB0 aGlzIHZpYSB0aGUgZXhpc3RpbmcgdGFyZ2V0IGhvb2s/DQo+IA0KPiBJJ20gbm90IGF3YXJlIG9m IHg4NiBDUFVzIGhhdmluZyBsYXRlLWZvcndhcmRpbmcgY2FwYWJpbGl0aWVzDQo+IGJ1dCB1c3Vh bGx5IHRoZSBsYXRlbmN5IG9mIG11bHRpcGxpY2F0aW9uIGFuZCBGTUEgaXMgdmVyeSBzaW1pbGFy DQo+IGFuZCBvbmUgY2FuIGlzc3VlIHR3byBGTUFzIGFuZCBwb3NzaWJseSBtb3JlIEFERHMgaW4g cGFyYWxsZWwuDQo+IA0KPiBBcyBzYWlkIEkgdGhpbmsgdGhpcyBkZXRhaWwgKGxhdGUtZm9yd2Fy ZCkgc2hvdWxkIG1heWJlIHJlZmxlY3RlZA0KPiBpbnRvIGdldF9yZXF1aXJlZF9jeWNsZXMsIHBv c3NpYmx5IGd1aWRlZCBieSBhIGRpZmZlcmVudA0KPiB0YXJnZXRtLnNjaGVkLnJlYXNzb2NpYXRp b25fd2lkdGggZm9yIE1VTFRfRVhQUiB2cyBQTFVTX0VYUFI/DQo+IA0KDQpUbyBteSB1bmRlcnN0 YW5kaW5nLCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGUgdGFyZ2V0IGZ1bGx5DQpwaXBlbGlu ZXMgRk1BIGluc3RydWN0aW9ucywgc28gdGhlIE1VTFQgcGFydCBjYW4gc3RhcnQgZmlyc3QgaWYN Cml0cyBvcGVyYW5kcyBhcmUgcmVhZHkuIFdoaWxlIHRhcmdldG0uc2NoZWQucmVhc3NvY2lhdGlv bl93aWR0aA0KcmVmbGVjdHMgdGhlIG51bWJlciBvZiBwaXBlcyBmb3Igc29tZSBvcGVyYXRpb24s IHNvIGl0IGNhbiBndWlkZQ0KZ2V0X3JlcXVpcmVkX2N5Y2xlcyBmb3IgYSBzZXF1ZW5jZSBvZiBp ZGVudGljYWwgb3BlcmF0aW9ucw0KKGUuZy4gQSAqIEIgKiBDICogRCBvciBBICsgQiArIEMgKyBE KS4gU2luY2UgdGhlIHByb2JsZW0gaW4NCnRoaXMgY2FzZSBpcyBub3QgdGhlIG51bWJlciBvZiBw aXBlcyBmb3IgRk1BLCBJIHRoaW5rIGFub3RoZXINCmluZGljYXRvciBtYXliZSBiZXR0ZXIuDQoN CihDdXJyZW50bHkgdGhlIGZtYV9yZWFzc29jX3dpZHRoIGZvciBBQXJjaDY0IGlzIHRvIGNvbnRy b2wNCndoZXRoZXIgcmVhc3NvY2lhdGlvbiBvbiBGQUREIGlzIE9LLiBUaGlzIHdvcmthcm91bmQg ZG9lc24ndA0Kd29yayB3ZWxsIG9uIHNvbWUgY2FzZXMsIGZvciBleGFtcGxlIGl0IHR1cm5zIGRv d24gcmVhc3NvY2lhdGlvbg0KZXZlbiB3aGVuIHRoZXJlJ3Mgbm8gRk1BIGF0IGFsbC4gU28gSSB0 aGluayB3ZSdkIGJldHRlciBub3QgDQpmb2xsb3cgdGhlIHNjaGVtYS4pDQoNCkF0dGFjaGVkIGlz IGEgbmV3IHZlcnNpb24gb2YgdGhlIHBhdGNoIHdpdGggYSBmbGFnIHRvIGluZGljYXRlDQp3aGV0 aGVyIEZNQSBpcyBmdWxseSBwaXBlbGluZWQsIGFuZDogMSkgbGF0IChNVUwpID49IGxhdCAoQURE KTsNCjIpIHN5bW1ldHJpYyB1bml0cyBhcmUgdXNlZCBvciBGTVVML0ZBREQvRk1BLiBPdGhlcndp c2UgdGhlDQpwYXRjaCBtYXkgbm90IGJlIGJlbmVmaWNpYWwuDQoNCkl0IHRyaWVzIHRvIGNhbGN1 bGF0ZSB0aGUgbGF0ZW5jaWVzIGluY2x1ZGluZyBNVUxUX0VYUFJzLiBTaW5jZQ0KdGhlIGNvZGUg aXMgZGlmZmVyZW50IHdpdGggdGhlIGN1cnJlbnQgY29kZSAodGhlIHF1aWNrLXNlYXJjaA0KcGFy dCksIEkgaGF2ZW4ndCBpbmNsdWRlZCBpdCBpbnNpZGUgZ2V0X3JlcXVpcmVkX2N5Y2xlcy4NCg0K PiA+ID4NCj4gPiA+ICsgIC8qIElmIHRoZXJlJ3MgbG9vcCBkZXBlbmRlbnQgRk1BIHJlc3VsdCwg cmV0dXJuIHdpZHRoPTIgdG8gYXZvaWQgaXQuDQo+IFRoaXMNCj4gPiA+IGlzDQo+ID4gPiArICAg ICBiZXR0ZXIgdGhhbiBza2lwcGluZyB0aGVzZSBGTUEgY2FuZGlkYXRlcyBpbiB3aWRlbmluZ19t dWwuICAqLw0KPiA+ID4NCj4gPiA+IGJldHRlciB0aGFuIHNraXBwaW5nLCBidXQgeW91IGRvbid0 IHRvdWNoIGl0IHRoZXJlPyAgSSBzdXBwb3NlIHdpZHRoID09IDINCj4gPiA+IHdpbGwgYnlwYXNz IHRoZSBza2lwcGluZywgcmlnaHQ/ICBUaGlzIGhldXJpc3RpYyBvbmx5IGNvbWVzIGluIHdoZW4g dGhlDQo+IGFib3ZlDQo+ID4gPiBjaGFuZ2UgbWFkZSB3aWR0aCA9PSAxLCBzaW5jZSBvdGhlcndp c2Ugd2UgaGF2ZSBhbiBlYXJsaWVyDQo+ID4gPg0KPiA+ID4gICBpZiAod2lkdGggPT0gMSkNCj4g PiA+ICAgICByZXR1cm4gd2lkdGg7DQo+ID4gPg0KPiA+ID4gd2hpY2ggYWxzIGd1YXJhbnRlZXMg d2lkdGggPT0gMiB3YXMgYWxsb3dlZCBieSB0aGUgaG9vay9wYXJhbSwgcmlnaHQ/DQo+ID4NCj4g PiBZZXMsIHRoYXQncyByaWdodC4NCj4gPg0KPiA+ID4NCj4gPiA+ICsgIGlmICh3aWR0aCA9PSAx ICYmIG11bHRfbnVtDQo+ID4gPiArICAgICAgJiYgbWF5YmVfbGUgKHRyZWVfdG9fcG9seV9pbnQ2 NCAoVFlQRV9TSVpFIChUUkVFX1RZUEUgKGxocykpKSwNCj4gPiA+ICsgICAgICAgICAgICAgICAg ICBwYXJhbV9hdm9pZF9mbWFfbWF4X2JpdHMpKQ0KPiA+ID4gKyAgICB7DQo+ID4gPiArICAgICAg LyogTG9vayBmb3IgY3Jvc3MgYmFja2VkZ2UgZGVwZW5kZW5jeToNCj4gPiA+ICsgICAgICAgMS4g TEhTIGlzIGEgcGhpIGFyZ3VtZW50IGluIHRoZSBzYW1lIGJhc2ljIGJsb2NrIGl0IGlzIGRlZmlu ZWQuDQo+ID4gPiArICAgICAgIDIuIEFuZCB0aGUgcmVzdWx0IG9mIHRoZSBwaGkgbm9kZSBpcyB1 c2VkIGluIE9QUy4gICovDQo+ID4gPiArICAgICAgYmFzaWNfYmxvY2sgYmIgPSBnaW1wbGVfYmIg KFNTQV9OQU1FX0RFRl9TVE1UIChsaHMpKTsNCj4gPiA+ICsgICAgICBnaW1wbGVfc3RtdF9pdGVy YXRvciBnc2k7DQo+ID4gPiArICAgICAgZm9yIChnc2kgPSBnc2lfc3RhcnRfcGhpcyAoYmIpOyAh Z3NpX2VuZF9wIChnc2kpOyBnc2lfbmV4dCAoJmdzaSkpDQo+ID4gPiArICAgICAgIHsNCj4gPiA+ ICsgICAgICAgICBncGhpICpwaGkgPSBkeW5fY2FzdDxncGhpICo+IChnc2lfc3RtdCAoZ3NpKSk7 DQo+ID4gPiArICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdpbXBsZV9waGlfbnVt X2FyZ3MgKHBoaSk7ICsraSkNCj4gPiA+ICsgICAgICAgICAgIHsNCj4gPiA+ICsgICAgICAgICAg ICAgdHJlZSBvcCA9IFBISV9BUkdfREVGIChwaGksIGkpOw0KPiA+ID4gKyAgICAgICAgICAgICBp ZiAoIShvcCA9PSBsaHMgJiYgZ2ltcGxlX3BoaV9hcmdfZWRnZSAocGhpLCBpKS0+c3JjID09IGJi KSkNCj4gPiA+ICsgICAgICAgICAgICAgICBjb250aW51ZTsNCj4gPiA+DQo+ID4gPiBJIHRoaW5r IGl0J3MgZWFzaWVyIHRvIGl0ZXJhdGUgb3ZlciB0aGUgaW1tZWRpYXRlIHVzZXMgb2YgTEhTIGxp a2UNCj4gPiA+DQo+ID4gPiAgIEZPUl9FQUNIX0lNTV9VU0VfRkFTVCAodXNlX3AsIGl0ZXIsIGxo cykNCj4gPiA+ICAgICAgaWYgKGdwaGkgKnBoaSA9IGR5bl9jYXN0IDxncGhpICo+IChVU0VfU1RN VCAodXNlX3ApKSkNCj4gPiA+ICAgICAgICB7DQo+ID4gPiAgICAgICAgICAgaWYgKGdpbXBsZV9w aGlfYXJnX2VkZ2UgKHBoaSwgcGhpX2FyZ19pbmRleF9mcm9tX3VzZQ0KPiA+ID4gKHVzZV9wKSkt PnNyYyAhPSBiYikNCj4gPiA+ICAgICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ID4gLi4uDQo+ID4g PiAgICAgICAgfQ0KPiA+ID4NCj4gPiA+IG90aGVyd2lzZSBJIHRoaW5rIF90aGlzXyBwYXJ0IG9m IHRoZSBwYXRjaCBsb29rcyByZWFzb25hYmxlLg0KPiA+ID4NCj4gPiA+IEFzIHlvdSBzYXkgaGV1 cmlzdGljYWxseSB0aGV5IG1pZ2h0IGdvIHRvZ2V0aGVyIGJ1dCBJIHRoaW5rIHdlIHNob3VsZA0K PiBzcGxpdA0KPiA+ID4gdGhlDQo+ID4gPiBwYXRjaCAtIHRoZSBjcm9zcy1sb29wIHBhcnQgY2Fu IHByb2JhYmx5IHN0YW5kIGluZGVwZW5kZW50bHkuICBDYW4geW91DQo+IGFkanVzdA0KPiA+ID4g YW5kIHJlLXBvc3Q/DQo+ID4NCj4gPiBBdHRhY2hlZCBpcyB0aGUgc2VwYXJhdGVkIHBhcnQgZm9y IGNyb3NzLWxvb3AgRk1BLiBUaGFuayB5b3UgZm9yIHRoZQ0KPiBjb3JyZWN0aW9uLg0KPiANCj4g VGhhdCBjcm9zcy1sb29wIEZNQSBwYXRjaCBpcyBPSy4NCg0KQ29tbWl0dGVkIHRoaXMgcGFydCBh dCA3NDYzNDRkZC4NCg0KVGhhbmtzLA0KRGkNCg0KPiANCj4gVGhhbmtzLA0KPiBSaWNoYXJkLg0K PiANCj4gPiA+DQo+ID4gPiBBcyBmb3IgdGhlIGZpcnN0IHBhcnQgSSBzdGlsbCBkb24ndCB1bmRl cnN0YW5kIHZlcnkgd2VsbCBhbmQgYW0gc3RpbGwNCj4gaG9waW5nDQo+ID4gPiB3ZQ0KPiA+ID4g Y2FuIGdldCBhd2F5IHdpdGhvdXQgeWV0IGFub3RoZXIga25vYiB0byB0dW5lLg0KPiA+ID4NCj4g PiA+IFJpY2hhcmQuDQo+ID4gPg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiAyLiBUbyBhdm9pZCBy ZWdyZXNzaW9ucywgaW5jbHVkZWQgdGhlIG90aGVyIHBhdGNoDQo+ID4gPiA+ID4gPiAoaHR0cHM6 Ly9nY2MuZ251Lm9yZy9waXBlcm1haWwvZ2NjLXBhdGNoZXMvMjAyMy0NCj4gU2VwdGVtYmVyLzYy OTIwMy5odG1sKQ0KPiA+ID4gPiA+ID4gb24gdGhpcyB0cmFja2VyIGFnYWluLiBUaGlzIGlzIGJl Y2F1c2UgbW9yZSBGTUEgd2lsbCBiZSBrZXB0DQo+ID4gPiA+ID4gPiB3aXRoIDEuLCBzbyB3ZSBu ZWVkIHRvIHJ1bGUgb3V0IHRoZSBsb29wIGRlcGVuZGVudA0KPiA+ID4gPiA+ID4gRk1BIGNoYWlu cyB3aGVuIHBhcmFtX2F2b2lkX2ZtYV9tYXhfYml0cyBpcyBzZXQuDQo+ID4gPiA+ID4NCj4gPiA+ ID4gPiBTb3JyeSBhZ2FpbiBmb3IgdGFraW5nIHNvIGxvbmcgdG8gcmVwbHkuDQo+ID4gPiA+ID4N Cj4gPiA+ID4gPiBJJ2xsIG5vdGUgd2UgaGF2ZSBhbiBvZGQgY2FzZSBvbiB4ODYgWmVuMig/KSBh cyB3ZWxsIHdoaWNoIHdlIGRvbid0DQo+IHJlYWxseQ0KPiA+ID4gPiA+IHVuZGVyc3RhbmQgZnJv bSBhIENQVSBiZWhhdmlvciBwZXJzcGVjdGl2ZS4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IFRoYW5r cywNCj4gPiA+ID4gPiBSaWNoYXJkLg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiBUaGFua3MsDQo+ ID4gPiA+ID4gPiBEaSBaaGFvDQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gLS0tLQ0KPiA+ID4g PiA+ID4NCj4gPiA+ID4gPiA+ICAgICAgICAgUFIgdHJlZS1vcHRpbWl6YXRpb24vMTEwMjc5DQo+ ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gZ2NjL0NoYW5nZUxvZzoNCj4gPiA+ID4gPiA+DQo+ID4g PiA+ID4gPiAgICAgICAgICogdHJlZS1zc2EtcmVhc3NvYy5jYyAocmFua19vcHNfZm9yX2JldHRl cl9wYXJhbGxlbGlzbV9wKToNCj4gPiA+ID4gPiA+ICAgICAgICAgTmV3IGZ1bmN0aW9uIHRvIGNo ZWNrIHdoZXRoZXIgcmFua2luZyB0aGUgb3BzIHJlc3VsdHMgaW4NCj4gPiA+ID4gPiA+ICAgICAg ICAgYmV0dGVyIHBhcmFsbGVsaXNtLg0KPiA+ID4gPiA+ID4gICAgICAgICAoZ2V0X3JlYXNzb2Np YXRpb25fd2lkdGgpOiBBZGQgbmV3IHBhcmFtZXRlcnMuIFNlYXJjaCBmb3INCj4gPiA+ID4gPiA+ ICAgICAgICAgc21hbGxlciB3aWR0aCBjb25zaWRlcmluZyB0aGUgYmVuZWZpdCBvZiBGTUEuDQo+ ID4gPiA+ID4gPiAgICAgICAgIChyYW5rX29wc19mb3JfZm1hKTogQ2hhbmdlIHJldHVybiB2YWx1 ZSB0byBiZSBudW1iZXIgb2YNCj4gPiA+ID4gPiA+ICAgICAgICAgTVVMVF9FWFBScy4NCj4gPiA+ ID4gPiA+ICAgICAgICAgKHJlYXNzb2NpYXRlX2JiKTogRm9yIDMgb3BzLCByZWZpbmUgdGhlIGNv bmRpdGlvbiB0byBjYWxsDQo+ID4gPiA+ID4gPiAgICAgICAgIHN3YXBfb3BzX2Zvcl9iaW5hcnlf c3RtdC4NCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiBnY2MvdGVzdHN1aXRlL0NoYW5nZUxvZzoN Cj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiAgICAgICAgICogZ2NjLmRnL3ByMTEwMjc5LmM6IE5l dyB0ZXN0Lg0KPiA+ID4gPg0KPiA+ID4gPiBUaGFua3MsDQo+ID4gPiA+IERpIFpoYW8NCj4gPiA+ ID4NCj4gPiA+ID4gLS0tLQ0KPiA+ID4gPg0KPiA+ID4gPiAgICAgICAgIFBSIHRyZWUtb3B0aW1p emF0aW9uLzExMDI3OQ0KPiA+ID4gPg0KPiA+ID4gPiBnY2MvQ2hhbmdlTG9nOg0KPiA+ID4gPg0K PiA+ID4gPiAgICAgICAgICogZG9jL2ludm9rZS50ZXhpOiBEZXNjcmlwdGlvbiBvZiBwYXJhbV9t YXhfZm1hX2NoYWluX2xlbi4NCj4gPiA+ID4gICAgICAgICAqIHBhcmFtcy5vcHQ6IE5ldyBwYXJh bWV0ZXIgcGFyYW1fbWF4X2ZtYV9jaGFpbl9sZW4uDQo+ID4gPiA+ICAgICAgICAgKiB0cmVlLXNz YS1yZWFzc29jLmNjIChnZXRfcmVhc3NvY2lhdGlvbl93aWR0aCk6DQo+ID4gPiA+ICAgICAgICAg U3VwcG9ydCBwYXJhbV9tYXhfZm1hX2NoYWluX2xlbjsgY2hlY2sgZm9yIGxvb3AgZGVwZW5kZW50 DQo+ID4gPiA+ICAgICAgICAgRk1Bcy4NCj4gPiA+ID4gICAgICAgICAocmFua19vcHNfZm9yX2Zt YSk6IFJldHVybiB0aGUgbnVtYmVyIG9mIE1VTFRfRVhQUnMuDQo+ID4gPiA+ICAgICAgICAgKHJl YXNzb2NpYXRlX2JiKTogRm9yIDMgb3BzLCByZWZpbmUgdGhlIGNvbmRpdGlvbiB0byBjYWxsDQo+ ID4gPiA+ICAgICAgICAgc3dhcF9vcHNfZm9yX2JpbmFyeV9zdG10Lg0KPiA+ID4gPg0KPiA+ID4g PiBnY2MvdGVzdHN1aXRlL0NoYW5nZUxvZzoNCj4gPiA+ID4NCj4gPiA+ID4gICAgICAgICAqIGdj Yy5kZy9wcjExMDI3OS0xLmM6IE5ldyB0ZXN0Lg0KPiA+ID4gPiAgICAgICAgICogZ2NjLmRnL3By MTEwMjc5LTIuYzogTmV3IHRlc3QuDQo+ID4gPiA+ICAgICAgICAgKiBnY2MuZGcvcHIxMTAyNzkt My5jOiBOZXcgdGVzdC4NCj4gPg0KPiA+IC0tLQ0KPiA+DQo+ID4gICAgICAgICBQUiB0cmVlLW9w dGltaXphdGlvbi8xMTAyNzkNCj4gPg0KPiA+IGdjYy9DaGFuZ2VMb2c6DQo+ID4NCj4gPiAgICAg ICAgICogdHJlZS1zc2EtcmVhc3NvYy5jYyAoZ2V0X3JlYXNzb2NpYXRpb25fd2lkdGgpOiBjaGVj aw0KPiA+ICAgICAgICAgZm9yIGxvb3AgZGVwZW5kZW50IEZNQXMuDQo+ID4gICAgICAgICAocmVh c3NvY2lhdGVfYmIpOiBGb3IgMyBvcHMsIHJlZmluZSB0aGUgY29uZGl0aW9uIHRvIGNhbGwNCj4g PiAgICAgICAgIHN3YXBfb3BzX2Zvcl9iaW5hcnlfc3RtdC4NCj4gPg0KPiA+IGdjYy90ZXN0c3Vp dGUvQ2hhbmdlTG9nOg0KPiA+DQo+ID4gICAgICAgICAqIGdjYy5kZy9wcjExMDI3OS0xLmM6IE5l dyB0ZXN0Lg0KLS0tDQoNCiAgICAgICAgUFIgdHJlZS1vcHRpbWl6YXRpb24vMTEwMjc5DQoNCmdj Yy9DaGFuZ2VMb2c6DQoNCiAgICAgICAgKiBjb21tb24ub3B0OiBOZXcgZmxhZyBmdWxseS1waXBl bGluZWQtZm1hLg0KICAgICAgICAqIHRyZWUtc3NhLXJlYXNzb2MuY2MgKGdldF9tdWx0X2xhdGVu Y3lfY29uc2lkZXJfZm1hKToNCglSZXR1cm4gbGF0ZW5jeSBvZiBNVUxUX0VYUFJzIHRoYXQgY2Fu J3QgYmUgaGlkZWQgYnkgRk1BLg0KICAgICAgICAoZ2V0X3JlYXNzb2NpYXRpb25fd2lkdGgpOiBT ZWFyY2ggZm9yIHNtYWxsZXIgd2lkdGhzDQoJY29uc2lkZXJpbmcgdGhlIGJlbmVmaXQgb2YgZnVs bHkgcGlwZWxpbmVkIEZNQS4NCiAgICAgICAgKHJhbmtfb3BzX2Zvcl9mbWEpOiBSZXR1cm4gdGhl IG51bWJlciBvZiBNVUxUX0VYUFJzLg0KICAgICAgICAocmVhc3NvY2lhdGVfYmIpOiBQYXNzIHRo ZSBudW1iZXIgb2YgTVVMVF9FWFBScyB0bw0KCWdldF9yZWFzc29jaWF0aW9uX3dpZHRoOyBhdm9p ZCBjYWxsaW5nDQoJZ2V0X3JlYXNzb2NpYXRpb25fd2lkdGggdHdpY2UuDQoNCmdjYy90ZXN0c3Vp dGUvQ2hhbmdlTG9nOg0KDQogICAgICAgICogZ2NjLmRnL3ByMTEwMjc5LTIuYzogTmV3IHRlc3Qu DQo= --_002_SN6PR01MB42407ECAB354244C7CC0BE58E883ASN6PR01MB4240prod_ Content-Type: application/octet-stream; name="0001-Consider-fully-pipelined-FMA-in-get_reassociation_wi.patch" Content-Description: 0001-Consider-fully-pipelined-FMA-in-get_reassociation_wi.patch Content-Disposition: attachment; filename="0001-Consider-fully-pipelined-FMA-in-get_reassociation_wi.patch"; size=10001; creation-date="Wed, 29 Nov 2023 14:35:36 GMT"; modification-date="Wed, 29 Nov 2023 14:35:57 GMT" Content-Transfer-Encoding: base64 RnJvbSA0ODUwNjliZjBhN2ZjNDcxNDgwZGUwOGFkMzdjMTBkMDFhNzYwMzBkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiZHpoYW8uYW1wZXJlIiA8ZGkuemhhb0BhbXBlcmVjb21wdXRp bmcuY29tPgpEYXRlOiBNb24sIDI3IE5vdiAyMDIzIDE4OjE5OjE0ICswODAwClN1YmplY3Q6IFtQ QVRDSF0gQ29uc2lkZXIgZnVsbHkgcGlwZWxpbmVkIEZNQSBpbiBnZXRfcmVhc3NvY2lhdGlvbl93 aWR0aAoKLS0tCiBnY2MvY29tbW9uLm9wdCAgICAgICAgICAgICAgICAgICAgfCAgIDcgKysKIGdj Yy90ZXN0c3VpdGUvZ2NjLmRnL3ByMTEwMjc5LTIuYyB8ICA0MSArKysrKysrKysKIGdjYy90cmVl LXNzYS1yZWFzc29jLmNjICAgICAgICAgICB8IDE0MCArKysrKysrKysrKysrKysrKysrKysrKyst LS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgMTYxIGluc2VydGlvbnMoKyksIDI3IGRlbGV0aW9ucygt KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ByMTEwMjc5LTIuYwoK ZGlmZiAtLWdpdCBhL2djYy9jb21tb24ub3B0IGIvZ2NjL2NvbW1vbi5vcHQKaW5kZXggMzU5NzFj NTAxZmMuLmM1M2U0ZDVlNWIwIDEwMDY0NAotLS0gYS9nY2MvY29tbW9uLm9wdAorKysgYi9nY2Mv Y29tbW9uLm9wdApAQCAtMTcxMCw2ICsxNzEwLDEzIEBAIGZmdW5jdGlvbi1jc2UKIENvbW1vbiBW YXIoZmxhZ19ub19mdW5jdGlvbl9jc2UsMCkgT3B0aW1pemF0aW9uCiBBbGxvdyBmdW5jdGlvbiBh ZGRyZXNzZXMgdG8gYmUgaGVsZCBpbiByZWdpc3RlcnMuCiAKKzsgSWYgdGhlIGZsYWcgJ2Z1bGx5 LXBpcGVsaW5lZC1mbWEnIGlzIHNldCwgcmVhc3NvY2lhdGlvbiB0YWtlcyBpbnRvIGFjY291bnQK KzsgdGhlIGJlbmlmaXQgb2YgcGFyYWxsZWxpemluZyBGTUEncyBtdWx0aXBseSBwYXJ0IGFuZCBh ZGRpdGlvbiBwYXJ0LgorZmZ1bGx5LXBpcGVsaW5lZC1mbWEKK0NvbW1vbiBWYXIoZmxhZ19mdWxs eV9waXBlbGluZWRfZm1hKQorQXNzdW1lIHRoZSB0YXJnZXQgZnVsbHkgcGlwZWxpbmVzIEZNQSBp bnN0cnVjdGlvbiwgYW5kIHN5bW1ldHJpYyB1bml0cyBhcmUgdXNlZAorZm9yIEZNVUwvRkFERC9G TUEuCisKIGZmdW5jdGlvbi1zZWN0aW9ucwogQ29tbW9uIFZhcihmbGFnX2Z1bmN0aW9uX3NlY3Rp b25zKQogUGxhY2UgZWFjaCBmdW5jdGlvbiBpbnRvIGl0cyBvd24gc2VjdGlvbi4KZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ByMTEwMjc5LTIuYyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL3ByMTEwMjc5LTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u M2U1YzU3YTdjMGUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9wcjEx MDI3OS0yLmMKQEAgLTAsMCArMSw0MSBAQAorLyogUFIgdHJlZS1vcHRpbWl6YXRpb24vMTEwMjc5 ICovCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItT2Zhc3QgLS1w YXJhbSB0cmVlLXJlYXNzb2Mtd2lkdGg9NCAtZmZ1bGx5LXBpcGVsaW5lZC1mbWEgLWZkdW1wLXRy ZWUtcmVhc3NvYzItZGV0YWlscyAtZmR1bXAtdHJlZS1vcHRpbWl6ZWQiIH0gKi8KKy8qIHsgZGct YWRkaXRpb25hbC1vcHRpb25zICItbWFyY2g9YXJtdjguMi1hIiB7IHRhcmdldCBhYXJjaDY0LSot KiB9IH0gKi8KKworI2RlZmluZSBMT09QX0NPVU5UIDgwMDAwMDAwMAordHlwZWRlZiBkb3VibGUg ZGF0YV9lOworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworX19hdHRyaWJ1dGVfbm9pbmxpbmVfXyBk YXRhX2UKK2ZvbyAoZGF0YV9lIGluKQoreworICBkYXRhX2UgYTEsIGEyLCBhMywgYTQ7CisgIGRh dGFfZSB0bXAsIHJlc3VsdCA9IDA7CisgIGExID0gaW4gKyAwLjE7CisgIGEyID0gaW4gKiAwLjE7 CisgIGEzID0gaW4gKyAwLjAxOworICBhNCA9IGluICogMC41OTsKKworICBkYXRhX2UgcmVzdWx0 MiA9IDA7CisKKyAgZm9yIChpbnQgaWMgPSAwOyBpYyA8IExPT1BfQ09VTlQ7IGljKyspCisgICAg eworICAgICAgLyogVGVzdCB0aGF0IGEgY29tcGxldGUgRk1BIGNoYWluIHdpdGggbGVuZ3RoPTQg aXMgbm90IGJyb2tlbi4gICovCisgICAgICB0bXAgPSBhMSArIGEyICogYTIgKyBhMyAqIGEzICsg YTQgKiBhNCA7CisgICAgICByZXN1bHQgKz0gdG1wIC0gaWM7CisgICAgICByZXN1bHQyID0gcmVz dWx0MiAvIDIgLSB0bXA7CisKKyAgICAgIGExICs9IDAuOTE7CisgICAgICBhMiArPSAwLjE7Cisg ICAgICBhMyAtPSAwLjAxOworICAgICAgYTQgLT0gMC44OTsKKworICAgIH0KKworICByZXR1cm4g cmVzdWx0ICsgcmVzdWx0MjsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLW5v dCAid2FzIGNob3NlbiBmb3IgcmVhc3NvY2lhdGlvbiIgInJlYXNzb2MyIn0gfSAqLworLyogeyBk Zy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzIHtcLkZNQSB9IDMgIm9wdGltaXplZCJ9IH0g Ki8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9nY2MvdHJlZS1zc2Et cmVhc3NvYy5jYyBiL2djYy90cmVlLXNzYS1yZWFzc29jLmNjCmluZGV4IDA3ZmM4ZTJmMWY5Li42 MjQ4ZGRhMmY2MCAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtc3NhLXJlYXNzb2MuY2MKKysrIGIvZ2Nj L3RyZWUtc3NhLXJlYXNzb2MuY2MKQEAgLTU0MzAsMTMgKzU0MzAsMzIgQEAgZ2V0X3JlcXVpcmVk X2N5Y2xlcyAoaW50IG9wc19udW0sIGludCBjcHVfd2lkdGgpCiAgIHJldHVybiByZXM7CiB9CiAK Ky8qIEdpdmVuIHRoYXQgdGhlIHRhcmdldCBmdWxseSBwaXBlbGluZXMgRk1BIGluc3RydWN0aW9u cywgcmV0dXJuIGxhdGVuY3kgb2YKKyAgIE1VTFRfRVhQUnMgdGhhdCBjYW4ndCBiZSBoaWRlZCBi eSBGTUEuICBXSURUSCBpcyB0aGUgbnVtYmVyIG9mIHBpcGVzLiAgKi8KKworc3RhdGljIGlubGlu ZSBpbnQKK2dldF9tdWx0X2xhdGVuY3lfY29uc2lkZXJfZm1hIChpbnQgb3BzX251bSwgaW50IG11 bHRfbnVtLCBpbnQgd2lkdGgpCit7CisgIC8qIEZvciBlYWNoIHBhcnRpdGlvbiwgaWYgbXVsdF9u dW0gPT0gb3BzX251bSwgdGhlcmUncyBsYXRlbmN5KE1VTFQpKjIuCisgICAgIGUuZzoKKworCUEg KiBCICsgQyAqIEQKKwk9PgorCV8xID0gQSAqIEI7CisJXzIgPSAuRk1BIChDLCBELCBfMSk7CisK KyAgICAgIE90aGVyd2lzZSB0aGVyZSdzIGxhdGVuY3koTVVMVCkqMSBpbiB0aGUgZmlyc3QgRk1B LiAgKi8KKyAgcmV0dXJuIENFSUwgKG9wc19udW0sIHdpZHRoKSA9PSBDRUlMIChtdWx0X251bSwg d2lkdGgpID8gMiA6IDE7Cit9CisKIC8qIFJldHVybnMgYW4gb3B0aW1hbCBudW1iZXIgb2YgcmVn aXN0ZXJzIHRvIHVzZSBmb3IgY29tcHV0YXRpb24gb2YKICAgIGdpdmVuIHN0YXRlbWVudHMuCiAK LSAgIExIUyBpcyB0aGUgcmVzdWx0IHNzYSBuYW1lIG9mIE9QUy4gICovCisgICBMSFMgaXMgdGhl IHJlc3VsdCBzc2EgbmFtZSBvZiBPUFMuICBNVUxUX05VTSBpcyBudW1iZXIgb2Ygc3ViLWV4cHJl c3Npb25zCisgICB0aGF0IGFyZSBNVUxUX0VYUFJzLCB3aGVuIE9QUyBhcmUgUExVU19FWFBScyBv ciBNSU5VU19FWFBScy4gICovCiAKIHN0YXRpYyBpbnQKLWdldF9yZWFzc29jaWF0aW9uX3dpZHRo ICh2ZWM8b3BlcmFuZF9lbnRyeSAqPiAqb3BzLCB0cmVlIGxocywKK2dldF9yZWFzc29jaWF0aW9u X3dpZHRoICh2ZWM8b3BlcmFuZF9lbnRyeSAqPiAqb3BzLCBpbnQgbXVsdF9udW0sIHRyZWUgbGhz LAogCQkJIGVudW0gdHJlZV9jb2RlIG9wYywgbWFjaGluZV9tb2RlIG1vZGUpCiB7CiAgIGludCBw YXJhbV93aWR0aCA9IHBhcmFtX3RyZWVfcmVhc3NvY193aWR0aDsKQEAgLTU0NjIsMTYgKzU0ODEs NjEgQEAgZ2V0X3JlYXNzb2NpYXRpb25fd2lkdGggKHZlYzxvcGVyYW5kX2VudHJ5ICo+ICpvcHMs IHRyZWUgbGhzLAogICAgICBzbyB3ZSBjYW4gcGVyZm9ybSBhIGJpbmFyeSBzZWFyY2ggZm9yIHRo ZSBtaW5pbWFsIHdpZHRoIHRoYXQgc3RpbGwKICAgICAgcmVzdWx0cyBpbiB0aGUgb3B0aW1hbCBj eWNsZSBjb3VudC4gICovCiAgIHdpZHRoX21pbiA9IDE7Ci0gIHdoaWxlICh3aWR0aCA+IHdpZHRo X21pbikKKworICAvKiBJZiB0aGUgdGFyZ2V0IGZ1bGx5IHBpcGVsaW5lcyBGTUEgaW5zdHJ1Y3Rp b24sIHRoZSBtdWx0aXBseSBwYXJ0IGNhbiBzdGFydAorICAgICBmaXJzdCBpZiBpdHMgb3BlcmFu ZHMgYXJlIHJlYWR5LiAgQXNzdW1pbmcgc3ltbWV0cmljIHBpcGVzIGFyZSB1c2VkIGZvcgorICAg ICBGTVVML0ZBREQvRk1BLCB0aGVuIGZvciBhIHNlcXVlbmNlIG9mIEZNQSBsaWtlOgorCisJXzgg PSAuRk1BIChfMiwgXzMsIF8xKTsKKwlfOSA9IC5GTUEgKF81LCBfNCwgXzgpOworCV8xMCA9IC5G TUEgKF83LCBfNiwgXzkpOworCisgICAgICwgaWYgd2lkdGg9MSwgdGhlIGxhdGVuY3kgaXMgbGF0 ZW5jeShNVUxUKSArIGxhdGVuY3koQUREKSozLgorICAgICBXaGlsZSB3aXRoIHdpZHRoPTI6CisK KwlfOCA9IF80ICogXzU7CisJXzkgPSAuRk1BIChfMiwgXzMsIF8xKTsKKwlfMTAgPSAuRk1BIChf NiwgXzcsIF84KTsKKwlfMTEgPSBfOSArIF8xMDsKKworICAgICAsIGl0IGlzIGxhdGVuY3koTVVM VCkqMiArIGxhdGVuY3koQUREKSoyLiAgQXNzdW1pbmcgbGF0ZW5jeShNVUxUKSA8PQorICAgICBs YXRlbmN5KEFERCksIHRoZSBwcmV2aW91cyBvbmUgaXMgcHJlZmVycmVkLgorCisgICAgIEZpbmQg b3V0IGlmIHdlIGNhbiBnZXQgYSBzbWFsbGVyIHdpZHRoIGNvbnNpZGVyaW5nIEZNQS4gICovCisg IGlmICh3aWR0aCA+IDEgJiYgbXVsdF9udW0gJiYgZmxhZ19mdWxseV9waXBlbGluZWRfZm1hKQog ICAgIHsKLSAgICAgIGludCB3aWR0aF9taWQgPSAod2lkdGggKyB3aWR0aF9taW4pIC8gMjsKKyAg ICAgIC8qIFdoZW4gZmxhZ19mdWxseV9waXBlbGluZWRfZm1hIGlzIHNldCwgYXNzdW1lcyBzeW1t ZXRyaWMgcGlwZXMgYXJlIHVzZWQKKwkgZm9yIEZNVUwvRkFERC9GTUEuICAqLworICAgICAgaW50 IGxhdF9tdWwgPSBnZXRfbXVsdF9sYXRlbmN5X2NvbnNpZGVyX2ZtYSAob3BzX251bSwgbXVsdF9u dW0sIHdpZHRoKTsKIAotICAgICAgaWYgKGdldF9yZXF1aXJlZF9jeWNsZXMgKG9wc19udW0sIHdp ZHRoX21pZCkgPT0gY3ljbGVzX2Jlc3QpCi0Jd2lkdGggPSB3aWR0aF9taWQ7Ci0gICAgICBlbHNl IGlmICh3aWR0aF9taW4gPCB3aWR0aF9taWQpCi0Jd2lkdGhfbWluID0gd2lkdGhfbWlkOwotICAg ICAgZWxzZQotCWJyZWFrOworICAgICAgLyogUXVpY2sgc2VhcmNoIG1pZ2h0IG5vdCBhcHBseS4g IFNvIHN0YXJ0IGZyb20gMS4gICovCisgICAgICBmb3IgKGludCBpID0gMTsgaSA8IHdpZHRoOyBp KyspCisJeworCSAgaW50IGxhdF9tdWxfbmV3CisJICAgID0gZ2V0X211bHRfbGF0ZW5jeV9jb25z aWRlcl9mbWEgKG9wc19udW0sIG11bHRfbnVtLCBpKTsKKwkgIGludCBsYXRfYWRkX25ldyA9IGdl dF9yZXF1aXJlZF9jeWNsZXMgKG9wc19udW0sIGkpOworCisJICAvKiBBc3N1bWUgbGF0ZW5jeShN VUxUKSA+PSBsYXRlbmN5KEFERCkuICAqLworCSAgaWYgKGxhdF9tdWwgLSBsYXRfbXVsX25ldyA+ PSBsYXRfYWRkX25ldyAtIGN5Y2xlc19iZXN0KQorCSAgICB7CisJICAgICAgd2lkdGggPSBpOwor CSAgICAgIGJyZWFrOworCSAgICB9CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHdo aWxlICh3aWR0aCA+IHdpZHRoX21pbikKKwl7CisJICBpbnQgd2lkdGhfbWlkID0gKHdpZHRoICsg d2lkdGhfbWluKSAvIDI7CisKKwkgIGlmIChnZXRfcmVxdWlyZWRfY3ljbGVzIChvcHNfbnVtLCB3 aWR0aF9taWQpID09IGN5Y2xlc19iZXN0KQorCSAgICB3aWR0aCA9IHdpZHRoX21pZDsKKwkgIGVs c2UgaWYgKHdpZHRoX21pbiA8IHdpZHRoX21pZCkKKwkgICAgd2lkdGhfbWluID0gd2lkdGhfbWlk OworCSAgZWxzZQorCSAgICBicmVhazsKKwl9CiAgICAgfQogCiAgIC8qIElmIHRoZXJlJ3MgbG9v cCBkZXBlbmRlbnQgRk1BIHJlc3VsdCwgcmV0dXJuIHdpZHRoPTIgdG8gYXZvaWQgaXQuICBUaGlz IGlzCkBAIC02ODQxLDggKzY5MDUsMTAgQEAgdHJhbnNmb3JtX3N0bXRfdG9fbXVsdGlwbHkgKGdp bXBsZV9zdG10X2l0ZXJhdG9yICpnc2ksIGdpbXBsZSAqc3RtdCwKICAgIFJlYXJyYW5nZSBvcHMg dG8gLT4gZSArIGEgKiBiICsgYyAqIGQgZ2VuZXJhdGVzOgogCiAgICBfNCAgPSAuRk1BIChjXzco RCksIGRfOChEKSwgXzMpOwotICAgXzExID0gLkZNQSAoYV81KEQpLCBiXzYoRCksIF80KTsgICov Ci1zdGF0aWMgYm9vbAorICAgXzExID0gLkZNQSAoYV81KEQpLCBiXzYoRCksIF80KTsKKworICAg UmV0dXJuIHRoZSBudW1iZXIgb2YgTVVMVF9FWFBScyBpbiB0aGUgY2hhaW4uICAqLworc3RhdGlj IGludAogcmFua19vcHNfZm9yX2ZtYSAodmVjPG9wZXJhbmRfZW50cnkgKj4gKm9wcykKIHsKICAg b3BlcmFuZF9lbnRyeSAqb2U7CkBAIC02ODU2LDkgKzY5MjIsMjYgQEAgcmFua19vcHNfZm9yX2Zt YSAodmVjPG9wZXJhbmRfZW50cnkgKj4gKm9wcykKICAgICAgIGlmIChUUkVFX0NPREUgKG9lLT5v cCkgPT0gU1NBX05BTUUpCiAJewogCSAgZ2ltcGxlICpkZWZfc3RtdCA9IFNTQV9OQU1FX0RFRl9T VE1UIChvZS0+b3ApOwotCSAgaWYgKGlzX2dpbXBsZV9hc3NpZ24gKGRlZl9zdG10KQotCSAgICAg ICYmIGdpbXBsZV9hc3NpZ25fcmhzX2NvZGUgKGRlZl9zdG10KSA9PSBNVUxUX0VYUFIpCi0JICAg IG9wc19tdWx0LnNhZmVfcHVzaCAob2UpOworCSAgaWYgKGlzX2dpbXBsZV9hc3NpZ24gKGRlZl9z dG10KSkKKwkgICAgeworCSAgICAgIGlmIChnaW1wbGVfYXNzaWduX3Joc19jb2RlIChkZWZfc3Rt dCkgPT0gTVVMVF9FWFBSKQorCQlvcHNfbXVsdC5zYWZlX3B1c2ggKG9lKTsKKwkgICAgICAvKiBB IG5lZ2F0ZSBvbiB0aGUgbXVsdGlwbGljYXRpb24gbGVhZHMgdG8gRk5NQS4gICovCisJICAgICAg ZWxzZSBpZiAoZ2ltcGxlX2Fzc2lnbl9yaHNfY29kZSAoZGVmX3N0bXQpID09IE5FR0FURV9FWFBS CisJCSAgICAgICAmJiBUUkVFX0NPREUgKGdpbXBsZV9hc3NpZ25fcmhzMSAoZGVmX3N0bXQpKSA9 PSBTU0FfTkFNRSkKKwkJeworCQkgIGdpbXBsZSAqbmVnX2RlZl9zdG10CisJCSAgICA9IFNTQV9O QU1FX0RFRl9TVE1UIChnaW1wbGVfYXNzaWduX3JoczEgKGRlZl9zdG10KSk7CisJCSAgaWYgKGlz X2dpbXBsZV9hc3NpZ24gKG5lZ19kZWZfc3RtdCkKKwkJICAgICAgJiYgZ2ltcGxlX2JiIChuZWdf ZGVmX3N0bXQpID09IGdpbXBsZV9iYiAoZGVmX3N0bXQpCisJCSAgICAgICYmIGdpbXBsZV9hc3Np Z25fcmhzX2NvZGUgKG5lZ19kZWZfc3RtdCkgPT0gTVVMVF9FWFBSKQorCQkgICAgb3BzX211bHQu c2FmZV9wdXNoIChvZSk7CisJCSAgZWxzZQorCQkgICAgb3BzX290aGVycy5zYWZlX3B1c2ggKG9l KTsKKwkJfQorCSAgICAgIGVsc2UKKwkJb3BzX290aGVycy5zYWZlX3B1c2ggKG9lKTsKKwkgICAg fQogCSAgZWxzZQogCSAgICBvcHNfb3RoZXJzLnNhZmVfcHVzaCAob2UpOwogCX0KQEAgLTY4NzQs NyArNjk1Nyw4IEBAIHJhbmtfb3BzX2Zvcl9mbWEgKHZlYzxvcGVyYW5kX2VudHJ5ICo+ICpvcHMp CiAgICAgIFB1dHRpbmcgb3BzIHRoYXQgbm90IGRlZiBmcm9tIG11bHQgaW4gZnJvbnQgY2FuIGdl bmVyYXRlIG1vcmUgRk1Bcy4KIAogICAgICAyLiBJZiBhbGwgb3BzIGFyZSBkZWZpbmVkIHdpdGgg bXVsdCwgd2UgZG9uJ3QgbmVlZCB0byByZWFycmFuZ2UgdGhlbS4gICovCi0gIGlmIChvcHNfbXVs dC5sZW5ndGggKCkgPj0gMiAmJiBvcHNfbXVsdC5sZW5ndGggKCkgIT0gb3BzX2xlbmd0aCkKKyAg dW5zaWduZWQgbXVsdF9udW0gPSBvcHNfbXVsdC5sZW5ndGggKCk7CisgIGlmIChtdWx0X251bSA+ PSAyICYmIG11bHRfbnVtICE9IG9wc19sZW5ndGgpCiAgICAgewogICAgICAgLyogUHV0IG5vLW11 bHQgb3BzIGFuZCBtdWx0IG9wcyBhbHRlcm5hdGVseSBhdCB0aGUgZW5kIG9mIHRoZQogCSBxdWV1 ZSwgd2hpY2ggaXMgY29uZHVjaXZlIHRvIGdlbmVyYXRpbmcgbW9yZSBGTUEgYW5kIHJlZHVjaW5n IHRoZQpAQCAtNjg5MCw5ICs2OTc0LDggQEAgcmFua19vcHNfZm9yX2ZtYSAodmVjPG9wZXJhbmRf ZW50cnkgKj4gKm9wcykKIAkgIGlmIChvcGluZGV4ID4gMCkKIAkgICAgb3BpbmRleC0tOwogCX0K LSAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgcmV0dXJuIGZhbHNlOworICByZXR1cm4gbXVs dF9udW07CiB9CiAvKiBSZWFzc29jaWF0ZSBleHByZXNzaW9ucyBpbiBiYXNpYyBibG9jayBCQiBh bmQgaXRzIHBvc3QtZG9taW5hdG9yIGFzCiAgICBjaGlsZHJlbi4KQEAgLTcwNTcsOCArNzE0MCw4 IEBAIHJlYXNzb2NpYXRlX2JiIChiYXNpY19ibG9jayBiYikKIAkJewogCQkgIG1hY2hpbmVfbW9k ZSBtb2RlID0gVFlQRV9NT0RFIChUUkVFX1RZUEUgKGxocykpOwogCQkgIGludCBvcHNfbnVtID0g b3BzLmxlbmd0aCAoKTsKLQkJICBpbnQgd2lkdGg7Ci0JCSAgYm9vbCBoYXNfZm1hID0gZmFsc2U7 CisJCSAgaW50IHdpZHRoID0gMDsKKwkJICBpbnQgbXVsdF9udW0gPSAwOwogCiAJCSAgLyogRm9y IGJpbmFyeSBiaXQgb3BlcmF0aW9ucywgaWYgdGhlcmUgYXJlIGF0IGxlYXN0IDMKIAkJICAgICBv cGVyYW5kcyBhbmQgdGhlIGxhc3Qgb3BlcmFuZCBpbiBPUFMgaXMgYSBjb25zdGFudCwKQEAgLTcw ODEsMTYgKzcxNjQsMTcgQEAgcmVhc3NvY2lhdGVfYmIgKGJhc2ljX2Jsb2NrIGJiKQogCQkJCQkJ ICAgICAgb3B0X3R5cGUpCiAJCSAgICAgICYmIChyaHNfY29kZSA9PSBQTFVTX0VYUFIgfHwgcmhz X2NvZGUgPT0gTUlOVVNfRVhQUikpCiAJCSAgICB7Ci0JCSAgICAgIGhhc19mbWEgPSByYW5rX29w c19mb3JfZm1hICgmb3BzKTsKKwkJICAgICAgbXVsdF9udW0gPSByYW5rX29wc19mb3JfZm1hICgm b3BzKTsKIAkJICAgIH0KIAogCQkgIC8qIE9ubHkgcmV3cml0ZSB0aGUgZXhwcmVzc2lvbiB0cmVl IHRvIHBhcmFsbGVsIGluIHRoZQogCQkgICAgIGxhc3QgcmVhc3NvYyBwYXNzIHRvIGF2b2lkIHVz ZWxlc3Mgd29yayBiYWNrLWFuZC1mb3J0aAogCQkgICAgIHdpdGggaW5pdGlhbCBsaW5lYXJpemF0 aW9uLiAgKi8KKwkJICBib29sIGhhc19mbWEgPSBtdWx0X251bSA+PSAyICYmIG11bHRfbnVtICE9 IG9wc19udW07CiAJCSAgaWYgKCFyZWFzc29jX2luc2VydF9wb3dpX3AKIAkJICAgICAgJiYgb3Bz Lmxlbmd0aCAoKSA+IDMKLQkJICAgICAgJiYgKHdpZHRoCi0JCQkgID0gZ2V0X3JlYXNzb2NpYXRp b25fd2lkdGggKCZvcHMsIGxocywgcmhzX2NvZGUsIG1vZGUpKQorCQkgICAgICAmJiAod2lkdGgg PSBnZXRfcmVhc3NvY2lhdGlvbl93aWR0aCAoJm9wcywgbXVsdF9udW0sIGxocywKKwkJCQkJCQkg ICByaHNfY29kZSwgbW9kZSkpCiAJCQkgICA+IDEpCiAJCSAgICB7CiAJCSAgICAgIGlmIChkdW1w X2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVUQUlMUykpCkBAIC03MTExLDEwICs3MTk1LDEy IEBAIHJlYXNzb2NpYXRlX2JiIChiYXNpY19ibG9jayBiYikKIAkJICAgICAgaWYgKGxlbiA+PSAz CiAJCQkgICYmICghaGFzX2ZtYQogCQkJICAgICAgLyogd2lkdGggPiAxIG1lYW5zIHJhbmtpbmcg b3BzIHJlc3VsdHMgaW4gYmV0dGVyCi0JCQkJIHBhcmFsbGVsaXNtLiAgKi8KLQkJCSAgICAgIHx8 IGdldF9yZWFzc29jaWF0aW9uX3dpZHRoICgmb3BzLCBsaHMsIHJoc19jb2RlLAotCQkJCQkJCSAg bW9kZSkKLQkJCQkgICA+IDEpKQorCQkJCSBwYXJhbGxlbGlzbS4gIENoZWNrIGN1cnJlbnQgdmFs dWUgdG8gYXZvaWQKKwkJCQkgY2FsbGluZyBnZXRfcmVhc3NvY2lhdGlvbl93aWR0aCBhZ2Fpbi4g ICovCisJCQkgICAgICB8fCAod2lkdGggIT0gMQorCQkJCSAgJiYgZ2V0X3JlYXNzb2NpYXRpb25f d2lkdGggKAorCQkJCSAgICAgICAmb3BzLCBtdWx0X251bSwgbGhzLCByaHNfY29kZSwgbW9kZSkK KwkJCQkgICAgICAgPiAxKSkpCiAJCQlzd2FwX29wc19mb3JfYmluYXJ5X3N0bXQgKG9wcywgbGVu IC0gMyk7CiAKIAkJICAgICAgbmV3X2xocyA9IHJld3JpdGVfZXhwcl90cmVlIChzdG10LCByaHNf Y29kZSwgMCwgb3BzLAotLSAKMi4yNS4xCgo= --_002_SN6PR01MB42407ECAB354244C7CC0BE58E883ASN6PR01MB4240prod_--