From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2106.outbound.protection.outlook.com [40.107.220.106]) by sourceware.org (Postfix) with ESMTPS id C68C13858C30 for ; Wed, 30 Aug 2023 09:33:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C68C13858C30 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-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FT0D8QqonkvTnv/c/ENWiS8pFDhrRurPbBrRioQc5ZwCEwYtCxuO2haRWSR3wQZUXQ8IvDQv8CyuOszPYYiqAQUGCSBQ+ahYRZJ58QWS1OofvrHWqJdQJv7CCsT1W15TER/SuVWKZIl/onBfaSW6F4fuKEe3gtAuTqv1McWxxBCLeJiECe5d9uc8eDRMqMG8xCzwW00ZnC+UOvTPPBTNGWmvocBG2ssVWaNoMnU1KAyN4Ev6AWPX4AdYacecBFvVwYlsBiukWuFMoKELD1UsowngIk+f/JKIr3p4pWBd/hGYd//ratDgsnlH6AoiDYajF1+22Bp5BdrmrltsB6ATsQ== 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=IzP4+ekMakHNwFPSIVyLzQM3VXUH617mEeoATxrYluw=; b=YX2I7a84X/BV8xE9QIPKMHrdzhFDO3TkxwxuIzRI/CWEj96mB5IeOIzLQYBlEGpfb1AtVonFQo0mAWAe0zZVnOcL5Fslems+kASzRdHed4A0xH0l51tW5N0WBn9H8stme1IsgnTQqKQ9mtJ0EjrYdGacQp9MiVNoLrmQGM0fIp6y7jpgBWfhy935LoDVJOOSzH7F99WtL4G1XcQDm3PSz0DMBlwCnfafP8LHewPOOc+wfE9K84lrpvQx+Ii5KGWVflIYTwX7jIAe9P0K6UP4vuZW9uS5bgl7d4UAO6AkBYfwjBKe7VNOocmCkjqNlc5zMydOUoRd/iaP2X0uY0kEOw== 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=IzP4+ekMakHNwFPSIVyLzQM3VXUH617mEeoATxrYluw=; b=faIFevHDX7tgfg/u/QeqeOIl6t57ST5UalLgluXQC6ONTL5vF99YAFmz11+lsPD8yNOouN2llHEoesTiMuUVCOJtclIpFvgpkg9resuCJh4gVOAhZ/3RVqbfS6tEcvKZnfY8XRC235iOkAN147v+wIEnq+FyvY6McpEVOkSv6rc= Received: from SN6PR01MB4240.prod.exchangelabs.com (2603:10b6:805:ae::22) by CYYPR01MB8292.prod.exchangelabs.com (2603:10b6:930:c2::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6699.35; Wed, 30 Aug 2023 09:33:54 +0000 Received: from SN6PR01MB4240.prod.exchangelabs.com ([fe80::44ff:531:6d29:85a]) by SN6PR01MB4240.prod.exchangelabs.com ([fe80::44ff:531:6d29:85a%7]) with mapi id 15.20.6745.020; Wed, 30 Aug 2023 09:33:53 +0000 From: Di Zhao OS To: Richard Biener CC: Jeff Law , Martin Jambor , "gcc-patches@gcc.gnu.org" Subject: RE: [PATCH] [tree-optimization/110279] swap operands in reassoc to reduce cross backedge FMA Thread-Topic: [PATCH] [tree-optimization/110279] swap operands in reassoc to reduce cross backedge FMA Thread-Index: AdnZh/Le9F594Tc5S4ekqukOGNY+CgAfpPqAABFqbYAAABuGoAAA3x2AAAAt8pAABiw4AAAr784Q Date: Wed, 30 Aug 2023 09:33:53 +0000 Message-ID: References: <4c3c9a1c-e182-30a9-342d-525adfb8cffd@gmail.com> In-Reply-To: Accept-Language: en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_ActionId=aabd752d-54ee-4075-bb52-0fefe32309da;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-08-30T08:09:12Z;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_|CYYPR01MB8292:EE_ x-ms-office365-filtering-correlation-id: 8824cef2-e712-41c6-d90f-08dba93c39b4 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: OPJPfPaX8p8j2OU9Kt2wpvQxKyUBHXncsPLTNdvnT9x/+rMZcoJ3eLtcBQtyTmLz0LaSkLlp+t2+KfIncNSzMOE+i2gQDKqSEu0zfNHgH40iDpoQKmWowozyZJxxlr9jEOo+J2GpuCsYQhmXJc9KW51njT5MDoudQ74HYrCTUsgbX48BJg3NQtJvU5bCpip/9iMVFFUKPpu1WYAiGbZhoyxlIzumfVhK2iSg8uHwPR01TvNeJee0AFI9yBeD6AUF/SAIr6zapfAuu4730lE1FfAvVg+4uVBjoFp+lWPYEUxjOomHPHyYhiMDssn3ZJN1dPEArtxrIqBBQLiytZcn7dOz+qRhUamCh1IchUeAokJIQqZokD6vT+DqYK8aKZ//QQIFucWMTbeswVhbVUkEUS/eSYFqI33vb4IdvdunWGBwiz733gy+H/DVq1zmWZJ93mM9kfS/pv6DMFycRIwuPAZOWEXNGpeJynNEXdArJzeM476y3E0gzgCmeVhaRJPCXvmeSjanxnjJXCvjAxdxpzr/2joJdK7Xt2SHrD9ELSZABknbsyX3myBBlglRNp66uikZ7Pu9gjxSEpMX6/y4+qg+Hv7KG0aeAL/oAr3ZGU8= 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)(366004)(39850400004)(376002)(136003)(346002)(396003)(1800799009)(451199024)(186009)(9686003)(38100700002)(316002)(41300700001)(6916009)(38070700005)(66899024)(4326008)(33656002)(55016003)(86362001)(26005)(83380400001)(52536014)(5660300002)(8676002)(2906002)(8936002)(84970400001)(966005)(71200400001)(6506007)(7696005)(66476007)(64756008)(66446008)(54906003)(66556008)(66946007)(76116006)(122000001)(478600001)(53546011);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?cGw1S0xTdU1LWEFYVXI0K0U3cFFOQXY5Wnh3eG5YZG4wN2V6MWZSTUo1cDh3?= =?utf-8?B?WXczWU9vclZuM0lXejhVUnNjLytiOGU0ODFnQXdSd2FlcHBoMHNXUzYxS1dE?= =?utf-8?B?cjhWbUd6K3pBb09wZU1YOXBiQU5keVJ4cEM2TWduVEhXSnNxNUhjRjEvSTlO?= =?utf-8?B?YldRSkYzUDVQRHNWWjlFUWZBWm5uTHp3YmF3enIybk4xZE4wcUorTE8wZXhm?= =?utf-8?B?NndEcmxsSUVKUHozemRYcjRoanIxaWxhbHp1YVQvME40MlJlQ040ajFHUXZ2?= =?utf-8?B?dkxSK2JYUHhxY05KWW4wQjNuWUpUbk9hcWg1VGwzRmQvSGkyTWVyeVVSbnoz?= =?utf-8?B?eEZjekFvL1RTTUM2RjdtV3pQRlI4OS9XQmt3V0xicmIyTWNkUmU1ZlV0Z3FJ?= =?utf-8?B?ZzlrNFh0K2lpNDV5WnpHaGVBOFNqek9WbEdDU1JuSE5YWU9sYlN1S0Rkek1T?= =?utf-8?B?YnI1Y1N6UHlLMVdrTm9UTXhnQXp1TDRLOXdrWmZSM2FFeGNqeWljcURlZjQr?= =?utf-8?B?K0pId01zRnloalVvOHpxNE1vN3d2a0hoMm9YTGFKM0k3SFhsNWI3K1ZJTGd2?= =?utf-8?B?L1cvOWhGVk53QUJsa0o1ckt4bm4zb1J4emEyN1dmaSt5blRvK1FTQWNvaWhp?= =?utf-8?B?SFUyKy95K2NTeTZkbEhQMk5XN0FjRUJ1c2NkMEI3dStqcTRNUW5CNDYwVmtH?= =?utf-8?B?aE5JekZ0YkJRS201VjQrTWdmcDZLcE5vZytEenBRMGtuWkF4RDEwTlVWcjlP?= =?utf-8?B?RElzdE5hZ1dqQzNIZ0NBZUZqcXpTZDUzVTFOYmpyZlVtRWhBd3RCdkVGTGpJ?= =?utf-8?B?SzVSK1g2cW1rVjF2NW1RUEsxSUwvT01URUs1aGdldXZ5WVJPbEU0MGVoSWNh?= =?utf-8?B?ZC9IYzJhS3lEMFZNQXV2Q0ozeno2d0FOcXFCVVovK2kzSml2RmNUaEdXWTVm?= =?utf-8?B?VkQrUTNsSG8zd2kvVFFVcEZQczZGY3gvRXVlNUVMYThSMzYxeXQ3MGNuVmRj?= =?utf-8?B?cTF1Z3cyRWJ0RTJmMEpzaCtvVTRQdThaQWNudDJRRWsxQXRwSGdkTEVFekdi?= =?utf-8?B?ZUhNVHl2NFJ0blhJZ3ZNMjFkS1NTdFdoNm9VbjJRSEdibjBEb0FRQ1QxRDds?= =?utf-8?B?OTJhSVVOUllqbXlJWmtVVEJZeDBaT2N1US9OUTlkQ3VqcUlIQjNpYmVISUVT?= =?utf-8?B?TnJBbkdYY283bzhkZTZORHlzR01raVRuQjBxeGxlZjU3V2Mvam9qY2F6UlM2?= =?utf-8?B?YW1Ob1g5d3ZIYld0M3NOOFJudGgrUDMzUWFFQVJ3SFBqL2p6K2w5SjY0WE5m?= =?utf-8?B?K2xIZnBHaEVteFhXMG9IamFDQXFxSW1icDJHRUVRVlp6RjJnRTdhV1BJVVNF?= =?utf-8?B?cFZsb3Jxb014WFgvQVB4NmVvQmxGSmpxSUlLRjcyNFJ6bHZnSFhzNThvbHdC?= =?utf-8?B?emZRZG1ndWx0UXJITXNuajNFL1dwbVV6OUFFaU9YNmpOeHpSQ3huU1NNbnov?= =?utf-8?B?STd3TmVFcjBVNzEwTVoyREgyenF0YlF6QUlkbWQvaERNMFZ3d2F6QnZLbjFU?= =?utf-8?B?NHBkcmgrU1ovcXFZamlBcm5OODFsQU96ZE5VM3hEUWt5UFpTZnlNclVaNm9z?= =?utf-8?B?VVJuckRsazNOTURuck91QW1Vd1NWYjAvM1B2WllWZzZOa1ZzWnVENHZYVGFK?= =?utf-8?B?VWRBVldmMHlTZzY4RUY5YmcvU0Q3ODNEd1h0VG9HaWdiY0x0K1h5STl0ZEll?= =?utf-8?B?R1lBdVl6REZTaWdkT0U2YittZndNRWVVWFpnMDJpYkVLUmZLQ25nTjBtWFFs?= =?utf-8?B?S1Z0cExBOHJRNXJSMzlYTVV4VnNPK25zMFVmRENnQlI2S21TWWIzeC9GOXdY?= =?utf-8?B?Z085R2ZwbEUzdjArYnZ6UHFCUWRTSUk2OXQ3S3JDQkRQN0MxSlVWNXFmYWZi?= =?utf-8?B?UllmVGRmazl5YXcxaG9QUnIzODhWWU5CMDlYMHlqb255aVdXQXJCeGFPZjVq?= =?utf-8?B?MDJnalk0dHpVeG52d1pLcnloU3BwQVVXT1VRc0NMZkxiOEUveUl5b2t4akFX?= =?utf-8?B?cWcwWVA2ZlpKeHozaFpvOW9JaEM1VU50WmFvNW5QdnZnREU1SWNOQ21UeEFj?= =?utf-8?B?NVZ1dUZJYll3ZWFiSnZqRjVQaUJ0dUZXdk5JcGViM3UveklFZHM1UnNOM2Rt?= =?utf-8?B?RWc9PQ==?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 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: 8824cef2-e712-41c6-d90f-08dba93c39b4 X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Aug 2023 09:33:53.4234 (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: zirwobEea9+NUIB6GUgP4IFHa2RbzbrqGyKWGEl58ZCf9fjAPEasJ7jeHENkc28usxpLx1DzI4BefwenORrQcpOYiMnTxd+1KlZczB80dM3+z1Gx3kV+S+QmdEWu+ItN X-MS-Exchange-Transport-CrossTenantHeadersStamped: CYYPR01MB8292 X-Spam-Status: No, score=-3.0 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 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: SGVsbG8gUmljaGFyZCwNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBS aWNoYXJkIEJpZW5lciA8cmljaGFyZC5ndWVudGhlckBnbWFpbC5jb20+DQo+IFNlbnQ6IFR1ZXNk YXksIEF1Z3VzdCAyOSwgMjAyMyA3OjExIFBNDQo+IFRvOiBEaSBaaGFvIE9TIDxkaXpoYW9Ab3Mu YW1wZXJlY29tcHV0aW5nLmNvbT4NCj4gQ2M6IEplZmYgTGF3IDxqZWZmcmV5YWxhd0BnbWFpbC5j b20+OyBNYXJ0aW4gSmFtYm9yIDxtamFtYm9yQHN1c2UuY3o+OyBnY2MtDQo+IHBhdGNoZXNAZ2Nj LmdudS5vcmcNCj4gU3ViamVjdDogUmU6IFtQQVRDSF0gW3RyZWUtb3B0aW1pemF0aW9uLzExMDI3 OV0gc3dhcCBvcGVyYW5kcyBpbiByZWFzc29jIHRvDQo+IHJlZHVjZSBjcm9zcyBiYWNrZWRnZSBG TUENCj4gDQo+IE9uIFR1ZSwgQXVnIDI5LCAyMDIzIGF0IDEwOjU54oCvQU0gRGkgWmhhbyBPUw0K PiA8ZGl6aGFvQG9zLmFtcGVyZWNvbXB1dGluZy5jb20+IHdyb3RlOg0KPiA+DQo+ID4gSGksDQo+ ID4NCj4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiBGcm9tOiBSaWNoYXJk IEJpZW5lciA8cmljaGFyZC5ndWVudGhlckBnbWFpbC5jb20+DQo+ID4gPiBTZW50OiBUdWVzZGF5 LCBBdWd1c3QgMjksIDIwMjMgNDowOSBQTQ0KPiA+ID4gVG86IERpIFpoYW8gT1MgPGRpemhhb0Bv cy5hbXBlcmVjb21wdXRpbmcuY29tPg0KPiA+ID4gQ2M6IEplZmYgTGF3IDxqZWZmcmV5YWxhd0Bn bWFpbC5jb20+OyBNYXJ0aW4gSmFtYm9yIDxtamFtYm9yQHN1c2UuY3o+Ow0KPiBnY2MtDQo+ID4g PiBwYXRjaGVzQGdjYy5nbnUub3JnDQo+ID4gPiBTdWJqZWN0OiBSZTogW1BBVENIXSBbdHJlZS1v cHRpbWl6YXRpb24vMTEwMjc5XSBzd2FwIG9wZXJhbmRzIGluIHJlYXNzb2MNCj4gdG8NCj4gPiA+ IHJlZHVjZSBjcm9zcyBiYWNrZWRnZSBGTUENCj4gPiA+DQo+ID4gPiBPbiBUdWUsIEF1ZyAyOSwg MjAyMyBhdCA5OjQ54oCvQU0gRGkgWmhhbyBPUw0KPiA+ID4gPGRpemhhb0Bvcy5hbXBlcmVjb21w dXRpbmcuY29tPiB3cm90ZToNCj4gPiA+ID4NCj4gPiA+ID4gSGksDQo+ID4gPiA+DQo+ID4gPiA+ ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+ID4gPiBGcm9tOiBSaWNoYXJkIEJp ZW5lciA8cmljaGFyZC5ndWVudGhlckBnbWFpbC5jb20+DQo+ID4gPiA+ID4gU2VudDogVHVlc2Rh eSwgQXVndXN0IDI5LCAyMDIzIDM6NDEgUE0NCj4gPiA+ID4gPiBUbzogSmVmZiBMYXcgPGplZmZy ZXlhbGF3QGdtYWlsLmNvbT47IE1hcnRpbiBKYW1ib3IgPG1qYW1ib3JAc3VzZS5jej4NCj4gPiA+ ID4gPiBDYzogRGkgWmhhbyBPUyA8ZGl6aGFvQG9zLmFtcGVyZWNvbXB1dGluZy5jb20+OyBnY2Mt DQo+IHBhdGNoZXNAZ2NjLmdudS5vcmcNCj4gPiA+ID4gPiBTdWJqZWN0OiBSZTogW1BBVENIXSBb dHJlZS1vcHRpbWl6YXRpb24vMTEwMjc5XSBzd2FwIG9wZXJhbmRzIGluDQo+IHJlYXNzb2MNCj4g PiA+IHRvDQo+ID4gPiA+ID4gcmVkdWNlIGNyb3NzIGJhY2tlZGdlIEZNQQ0KPiA+ID4gPiA+DQo+ ID4gPiA+ID4gT24gVHVlLCBBdWcgMjksIDIwMjMgYXQgMToyM+KAr0FNIEplZmYgTGF3IHZpYSBH Y2MtcGF0Y2hlcw0KPiA+ID4gPiA+IDxnY2MtcGF0Y2hlc0BnY2MuZ251Lm9yZz4gd3JvdGU6DQo+ ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiBPbiA4LzI4 LzIzIDAyOjE3LCBEaSBaaGFvIE9TIHZpYSBHY2MtcGF0Y2hlcyB3cm90ZToNCj4gPiA+ID4gPiA+ ID4gVGhpcyBwYXRjaCB0cmllcyB0byBmaXggdGhlIDIlIHJlZ3Jlc3Npb24gaW4gNTEwLnBhcmVz dF9yIG9uDQo+ID4gPiA+ID4gPiA+IGFtcGVyZTEgaW4gdGhlIHRyYWNrZXIuIChQcmV2aW91cyBk aXNjdXNzaW9uIGlzIGhlcmU6DQo+ID4gPiA+ID4gPiA+IGh0dHBzOi8vZ2NjLmdudS5vcmcvcGlw ZXJtYWlsL2djYy1wYXRjaGVzLzIwMjMtSnVseS82MjQ4OTMuaHRtbCkNCj4gPiA+ID4gPiA+ID4N Cj4gPiA+ID4gPiA+ID4gMS4gQWRkIHRlc3RjYXNlcyBmb3IgdGhlIHByb2JsZW0uIEZvciBhbiBv cCBsaXN0IGluIHRoZSBmb3JtIG9mDQo+ID4gPiA+ID4gPiA+ICJhY2MgPSBhICogYiArIGMgKiBk ICsgYWNjIiwgY3VycmVudGx5IHJlYXNzb2NpYXRpb24gZG9lc24ndA0KPiA+ID4gPiA+ID4gPiBT d2FwIHRoZSBvcGVyYW5kcyBzbyB0aGF0IG1vcmUgRk1BcyBjYW4gYmUgZ2VuZXJhdGVkLg0KPiA+ ID4gPiA+ID4gPiBBZnRlciB3aWRlbmluZ19tdWwgdGhlIHJlc3VsdCBsb29rcyBsaWtlOg0KPiA+ ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiAgICAgXzEgPSAuRk1BKGEsIGIsIGFjY18wKTsNCj4g PiA+ID4gPiA+ID4gICAgIGFjY18xID0gLkZNQShjLCBkLCBfMSk7DQo+ID4gPiA+ID4gPiA+DQo+ ID4gPiA+ID4gPiA+IFdoaWxlIHByZXZpb3VzbHkgKGJlZm9yZSB0aGUgIkhhbmRsZSBGTUEgZnJp ZW5kbHkuLi4iIHBhdGNoKSwNCj4gPiA+ID4gPiA+ID4gd2lkZW5pbmdfbXVsJ3MgcmVzdWx0IHdh cyBsaWtlOg0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiAgICAgXzEgPSBhICogYjsNCj4g PiA+ID4gPiA+ID4gICAgIF8yID0gLkZNQSAoYywgZCwgXzEpOw0KPiA+ID4gPiA+ID4gPiAgICAg YWNjXzEgPSBhY2NfMCArIF8yOw0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gSG93IGNhbiB3ZSBleGVj dXRlIHRoZSBtdWx0aXBseSBhbmQgdGhlIEZNQSBpbiBwYXJhbGxlbD8gIFRoZXkNCj4gPiA+ID4g PiBkZXBlbmQgb24gZWFjaCBvdGhlci4gIE9yIGlzIGl0IHRoZSB1YXJjaCBjYW4gaGFuZGxlIGRl cGVuZGVuY2UNCj4gPiA+ID4gPiBvbiB0aGUgYWRkIG9wZXJhbmQgYnV0IG9ubHkgd2hlbiBpdCBp cyB3aXRoIGEgbXVsdGlwbGljYXRpb24gYW5kDQo+ID4gPiA+ID4gbm90IGEgRk1BIGluIHNvbWUg YmV0dGVyIHdheXM/ICAoSSdkIGRvdWJ0IHNvIG11Y2ggY29tcGxleGl0eSkNCj4gPiA+ID4gPg0K PiA+ID4gPiA+IENhbiB5b3UgZXhwbGFpbiBpbiBtb3JlIGRldGFpbCBob3cgdGhlIHVhcmNoIGV4 ZWN1dGVzIG9uZSB2cy4gdGhlDQo+ID4gPiA+ID4gb3RoZXIgY2FzZT8NCj4gPg0KPiA+IEhlcmUn cyBteSB1bmRlcnN0YW5kaW5nIGFmdGVyIGNvbnN1bHRlZCBvdXIgaGFyZHdhcmUgdGVhbS4gRm9y IHRoZQ0KPiA+IHNlY29uZCBjYXNlLCB0aGUgdWFyY2ggb2Ygc29tZSBvdXQtb2Ytb3JkZXIgcHJv Y2Vzc29ycyBjYW4gY2FsY3VsYXRlDQo+ID4gIl8yIiBvZiBzZXZlcmFsIGxvb3BzIGF0IHRoZSBz YW1lIHRpbWUsIHNpbmNlIHRoZXJlJ3Mgbm8gZGVwZW5kZW5jeQ0KPiA+IGFtb25nIGRpZmZlcmVu dCBpdGVyYXRpb25zLiBXaGlsZSBmb3IgdGhlIGZpcnN0IGNhc2UgdGhlIG5leHQgaXRlcmF0aW9u DQo+ID4gaGFzIHRvIHdhaXQgZm9yIHRoZSBjdXJyZW50IGl0ZXJhdGlvbiB0byBmaW5pc2gsIHNv ICJhY2NfMCIncyB2YWx1ZSBpcw0KPiA+IGtub3duLiBJIGFzc3VtZSBpdCBpcyBhbHNvIHRoZSBj YXNlIGluIHNvbWUgaTM4NiBwcm9jZXNzb3JzLCBzaW5jZSBJDQo+ID4gc2F3IHRoZSBwYXRjaCAi RGVmZXJyaW5nIEZNQSB0cmFuc2Zvcm1hdGlvbnMgaW4gdGlnaHQgbG9vcHMiIGFsc28NCj4gPiBj aGFuZ2VkIGNvcnJlc3BvbmRpbmcgZmlsZXMuDQo+IA0KPiBUaGF0IHNob3VsZCBiZSB0cnVlIGZv ciBhbGwga2luZCBvZiBvcGVyYXRpb25zLCBubz8gIFRodXMgaXQgbWVhbnMNCj4gcmVhc3NvYyBz aG91bGQgaW4gZ2VuZXJhbCBhc3NvY2lhdGUgY3Jvc3MtaXRlcmF0aW9uIGFjY3VtdWxhdGlvbg0K WWVzIEkgdGhpbmsgYm90aCBhcmUgdHJ1ZS4NCg0KPiBsYXN0PyAgSGlzdG9yaWNhbGx5IHdlIGFz c29jaWF0ZWQgdGhvc2UgZmlyc3QgYmVjYXVzZSB0aGF0J3MgaG93IHRoZQ0KPiB2ZWN0b3JpemVy IGxpa2VkIHRvIHNlZSB0aGVtLCBidXQgSSB0aGluayB0aGF0J3Mgbm8gbG9uZ2VyIG5lY2Vzc2Fy eS4NCj4gDQo+IEl0IHNob3VsZCBiZSBhY2hpZXZhYmxlIGJ5IHByb3Blcmx5IGJpYXNpbmcgdGhl IG9wZXJhbmQgZHVyaW5nDQo+IHJhbmsgY29tcHV0YXRpb24gKGRvbid0IHdlIGFscmVhZHkgZG8g dGhhdD8pLg0KDQpUaGUgaXNzdWUgaXMgcmVsYXRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgY29kZXMg KGhhbmRsaW5nIGNhc2VzIHdpdGgNCnRocmVlIG9wZXJhbmRzIGxlZnQpOg0KICAgICAgLyogV2hl biB0aGVyZSBhcmUgdGhyZWUgb3BlcmFuZHMgbGVmdCwgd2Ugd2FudA0KCSB0byBtYWtlIHN1cmUg dGhlIG9uZXMgdGhhdCBnZXQgdGhlIGRvdWJsZQ0KCSBiaW5hcnkgb3AgYXJlIGNob3NlbiB3aXNl bHkuICAqLw0KICAgICAgaW50IGxlbiA9IG9wcy5sZW5ndGggKCk7DQogICAgICBpZiAobGVuID49 IDMgJiYgIWhhc19mbWEpDQoJc3dhcF9vcHNfZm9yX2JpbmFyeV9zdG10IChvcHMsIGxlbiAtIDMp Ow0KDQogICAgICBuZXdfbGhzID0gcmV3cml0ZV9leHByX3RyZWUgKHN0bXQsIHJoc19jb2RlLCAw LCBvcHMsDQoJCQkJICAgcG93aV9yZXN1bHQgIT0gTlVMTA0KCQkJCSAgIHx8IG5lZ2F0ZV9yZXN1 bHQsDQoJCQkJICAgbGVuICE9IG9yaWdfbGVuKTsNCg0KT3JpZ2luYWxseSAoYmVmb3JlIHRoZSAi SGFuZGxlIEZNQSBmcmllbmRseS4uLiIgcGF0Y2gpLCBmb3IgdGhlDQp0aW55IGV4YW1wbGUsIHRo ZSAyIG11bHRpcGxpY2F0aW9ucyB3aWxsIGJlIHBsYWNlZCBmaXJzdCBieSANCnN3YXBfb3BzX2Zv cl9iaW5hcnlfc3RtdCBhbmQgcmV3cml0ZV9leHByX3RyZWUsIGFjY29yZGluZyB0bw0KcmFua3Mu IFdoaWxlIGN1cnJlbnRseSwgdG8gcHJlc2VydmUgbW9yZSBGTUFzLA0Kc3dhcF9vcHNfZm9yX2Jp bmFyeV9zdG10IHdvbid0IGJlIGNhbGxlZCwgc28gdGhlIHJlc3VsdCB3b3VsZA0KYmUgTVVMVF9F WFBScyBhbmQgUExVU19FWFBScyBpbnRlcmxlYXZlZCB3aXRoIGVhY2ggb3RoZXIgKHdoaWNoDQpp cyBtb3N0bHkgZmluZSBpZiB0aGVzZSBhcmUgbm90IGluIHN1Y2ggdGlnaHQgbG9vcHMpLg0KDQpX aGF0IHRoaXMgcGF0Y2ggdHJpZXMgdG8gZG8gY2FuIGJlIHN1bW1hcml6ZWQgYXM6IHdoZW4gY3Jv c3MNCmJhY2tlZGdlIGRlcGVuZGVuY3kgaXMgZGV0ZWN0ZWQgKGFuZCB0aGUgdWFyY2ggZG9lc24n dCBsaWtlIGl0KSwNCmJldHRlciBmYWxsYmFjayB0byB0aGUgIm9sZCIgd2F5LCBzaW5jZSB3ZSBk b24ndCB3YW50IHRoZSBsb29wDQpkZXBlbmRpbmcgRk1BIGFueXdheS4gKEkgaG9wZSBJJ20gdW5k ZXJzdGFuZGluZyB0aGUgcXVlc3Rpb24NCmNvcnJlY3RseS4pDQoNCj4gDQo+ID4gPiA+ID4NCj4g PiA+ID4gPiA+ID4gSWYgdGhlIGNvZGUgZnJhZ21lbnQgaXMgaW4gYSBsb29wLCBzb21lIGFyY2hp dGVjdHVyZSBjYW4gZXhlY3V0ZQ0KPiA+ID4gPiA+ID4gPiB0aGUgbGF0dGVyIGluIHBhcmFsbGVs LCBzbyB0aGUgcGVyZm9ybWFuY2UgY2FuIGJlIG11Y2ggZmFzdGVyDQo+IHRoYW4NCj4gPiA+ID4g PiA+ID4gdGhlIGZvcm1lci4gRm9yIHRoZSBzbWFsbCB0ZXN0Y2FzZSwgdGhlIHBlcmZvcm1hbmNl IGdhcCBpcyBvdmVyDQo+ID4gPiA+ID4gPiA+IDEwJSBvbiBib3RoIGFtcGVyZTEgYW5kIG5lb3Zl cnNlLW4xLiBTbyB0aGUgcG9pbnQgaGVyZSBpcyB0bw0KPiBhdm9pZA0KPiA+ID4gPiA+ID4gPiB0 dXJuaW5nIHRoZSBsYXN0IHN0YXRlbWVudCBpbnRvIEZNQSwgYW5kIGtlZXAgaXQgYSBQTFVTX0VY UFIgYXMNCj4gPiA+ID4gPiA+ID4gbXVjaCBhcyBwb3NzaWJsZS4gKElmIHdlIGFyZSByZXdyaXRp bmcgdGhlIG9wIGxpc3QgaW50byBwYXJhbGxlbCwNCj4gPiA+ID4gPiA+ID4gbm8gc3BlY2lhbCB0 cmVhdG1lbnQgaXMgbmVlZGVkLCBzaW5jZSB0aGUgbGFzdCBzdGF0ZW1lbnQgYWZ0ZXINCj4gPiA+ ID4gPiA+ID4gcmV3cml0ZV9leHByX3RyZWVfcGFyYWxsZWwgd2lsbCBiZSBQTFVTX0VYUFIgYW55 d2F5LikNCj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gMi4gRnVuY3Rpb24gcmVzdWx0X2Zl ZWRzX2JhY2tfZnJvbV9waGlfcCBpcyB0byBjaGVjayBmb3IgY3Jvc3MNCj4gPiA+ID4gPiA+ID4g YmFja2VkZ2UgZGVwZW5kZW5jeS4gQWRkZWQgbmV3IGVudW0gZm1hX3N0YXRlIHRvIGRlc2NyaWJl IHRoZQ0KPiA+ID4gPiA+ID4gPiBzdGF0ZSBvZiBGTUEgY2FuZGlkYXRlcy4NCj4gPiA+ID4gPiA+ ID4NCj4gPiA+ID4gPiA+ID4gV2l0aCB0aGlzIHBhdGNoLCB0aGVyZSdzIGEgMyUgaW1wcm92ZW1l bnQgaW4gNTEwLnBhcmVzdF9yIDEtY29weQ0KPiA+ID4gPiA+ID4gPiBydW4gb24gYW1wZXJlMS4g VGhlIGNvbXBpbGUgb3B0aW9ucyBhcmU6DQo+ID4gPiA+ID4gPiA+ICItT2Zhc3QgLW1jcHU9YW1w ZXJlMSAtZmx0byAtLXBhcmFtIGF2b2lkLWZtYS1tYXgtYml0cz01MTIiLg0KPiA+ID4gPiA+ID4g Pg0KPiA+ID4gPiA+ID4gPiBCZXN0IHJlZ2FyZHMsDQo+ID4gPiA+ID4gPiA+IERpIFpoYW8NCj4g PiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gLS0tLQ0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ ID4gPiAgICAgICAgICBQUiB0cmVlLW9wdGltaXphdGlvbi8xMTAyNzkNCj4gPiA+ID4gPiA+ID4N Cj4gPiA+ID4gPiA+ID4gZ2NjL0NoYW5nZUxvZzoNCj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ ID4gICAgICAgICAgKiB0cmVlLXNzYS1yZWFzc29jLmNjIChlbnVtIGZtYV9zdGF0ZSk6IE5ldyBl bnVtIHRvDQo+ID4gPiA+ID4gPiA+ICAgICAgICAgIGRlc2NyaWJlIHRoZSBzdGF0ZSBvZiBGTUEg Y2FuZGlkYXRlcyBmb3IgYW4gb3AgbGlzdC4NCj4gPiA+ID4gPiA+ID4gICAgICAgICAgKHJld3Jp dGVfZXhwcl90cmVlX3BhcmFsbGVsKTogQ2hhbmdlZCBib29sZWFuDQo+ID4gPiA+ID4gPiA+ICAg ICAgICAgIHBhcmFtZXRlciB0byBlbnVtIHR5cGUuDQo+ID4gPiA+ID4gPiA+ICAgICAgICAgIChy ZXN1bHRfZmVlZHNfYmFja19mcm9tX3BoaV9wKTogTmV3IGZ1bmN0aW9uIHRvIGNoZWNrDQo+ID4g PiA+ID4gPiA+ICAgICAgICAgIGZvciBjcm9zcyBiYWNrZWRnZSBkZXBlbmRlbmN5Lg0KPiA+ID4g PiA+ID4gPiAgICAgICAgICAocmFua19vcHNfZm9yX2ZtYSk6IFJldHVybiBlbnVtIGZtYV9zdGF0 ZS4gQWRkZWQgbmV3DQo+ID4gPiA+ID4gPiA+ICAgICAgICAgIHBhcmFtZXRlci4NCj4gPiA+ID4g PiA+ID4gICAgICAgICAgKHJlYXNzb2NpYXRlX2JiKTogSWYgdGhlcmUncyBiYWNrZWRnZSBkZXBl bmRlbmN5IGluIGFuDQo+ID4gPiA+ID4gPiA+ICAgICAgICAgIG9wIGxpc3QsIHN3YXAgdGhlIG9w ZXJhbmRzIGJlZm9yZSByZXdyaXRlX2V4cHJfdHJlZS4NCj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4g PiA+ID4gZ2NjL3Rlc3RzdWl0ZS9DaGFuZ2VMb2c6DQo+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4g PiA+ICAgICAgICAgICogZ2NjLmRnL3ByMTEwMjc5LmM6IE5ldyB0ZXN0Lg0KPiA+ID4gPiA+ID4g Tm90IGEgcmV2aWV3LCBidXQgbW9yZSBvZiBhIHF1ZXN0aW9uIC0tIGlzbid0IHRoaXMgdHJhbnNm b3JtYXRpb24ncw0KPiA+ID4gPiA+ID4gcHJvZml0YWJpbGl0eSB1YXJjaCBzZW5zaXRpdmUuICBp ZSwganVzdCBiZWNhdXNlIGl0J3MgYmFkIGZvciBhIHNldA0KPiBvZg0KPiA+ID4gPiA+ID4gYWFy Y2g2NCB1YXJjaGVzLCBkb2Vzbid0IG1lYW4gaXQncyBiYWQgZXZlcnl3aGVyZS4NCj4gPiA+ID4g PiA+DQo+ID4gPiA+ID4gPiBBbmQgaW4gZ2VuZXJhbCB3ZSBzaHkgYXdheSBmcm9tIHRyeWluZyB0 byBhZGp1c3QgZ2ltcGxlIGNvZGUgYmFzZWQNCj4gb24NCj4gPiA+ID4gPiA+IHVhcmNoIHByZWZl cmVuY2VzLg0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IEl0IHNlZW1zIHRoZSByaWdodCBwbGFj ZSB0byBkbyB0aGlzIGlzIGdpbXBsZS0+cnRsIGV4cGFuc2lvbi4NCj4gPiA+ID4gPg0KPiA+ID4g PiA+IEFub3RoZXIgY29tbWVudCBpcyB0aGF0IEZNQSBmb3JtaW5nIGhhcyB0aGlzIGRlZmVycmlu ZyBjb2RlIHdoaWNoIEkNCj4gPiA+ID4gPiB0aGluayBkZWFscyBleGFjdGx5IHdpdGggdGhpcyBr aW5kIG9mIHRoaW5nPyAgQ0NpbmcgTWFydGluIHdobyBkaWQNCj4gdGhpcw0KPiA+ID4gPiA+IHdv cmsgYmFzZWQgb24gQU1EIHVhcmNocyBhbHNvIG5vdCB3YW50aW5nIGNyb3NzLWxvb3AgZGVwZW5k ZW5jZXMNCj4gPiA+ID4gPiBvbiBGTUFzIChvciBzbykuICBJbiBwYXJ0aWN1bGFyIEkgc2VlDQo+ ID4gPiA+ID4NCj4gPiA+ID4gPiAgIGlmIChmbWFfc3RhdGUubV9kZWZlcnJpbmdfcA0KPiA+ID4g PiA+ICAgICAgICYmIGZtYV9zdGF0ZS5tX2luaXRpYWxfcGhpKQ0KPiA+ID4gPiA+ICAgICB7DQo+ ID4gPiA+ID4gICAgICAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoZm1hX3N0YXRlLm1fbGFzdF9yZXN1 bHQpOw0KPiA+ID4gPiA+ICAgICAgIGlmICghbGFzdF9mbWFfY2FuZGlkYXRlX2ZlZWRzX2luaXRp YWxfcGhpICgmZm1hX3N0YXRlLA0KPiA+ID4gPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmbV9sYXN0X3Jlc3VsdF9zZXQpKQ0KPiA+ID4gPiA+ICAg ICAgICAgY2FuY2VsX2ZtYV9kZWZlcnJpbmcgKCZmbWFfc3RhdGUpOw0KPiA+ID4gPiA+DQo+ID4g PiA+ID4gYW5kIEkgdGhpbmsgY29kZSB0byBhdm9pZCBGTUFzIGluIG90aGVyL3JlbGF0ZWQgY2Fz ZXMgc2hvdWxkIGJlIGhlcmUNCj4gPiA+ID4gPiBhcyB3ZWxsLCBsaWtlIGF2b2lkIGZvcm1pbmcg YmFjay10by1iYWNrIEZNQXMuDQo+ID4gPiA+DQo+ID4gPiA+IFRoZSBjaGFuZ2VzIGluIHRoaXMg cGF0Y2ggaXMgY29udHJvbGxlZCBieSAicGFyYW1fYXZvaWRfZm1hX21heF9iaXRzIiwNCj4gc28N Cj4gPiA+ID4gSSB0aGluayBpdCBzaG91bGQgb25seSBhZmZlY3QgYXJjaGl0ZWN0dXJlcyB3aXRo IHNpbWlsYXIgYmVoYXZpb3IuIChUaGUNCj4gPiA+ID4gcGFyYW1ldGVyIHdhcyBhZGRlZCBpbiBh IHByZXZpb3VzIHBhdGNoICJEZWZlcnJpbmcgRk1BIHRyYW5zZm9ybWF0aW9ucw0KPiA+ID4gPiBp biB0aWdodCBsb29wcyIsIHdoaWNoIHNlZW1zIHRvIGJlIGRlYWxpbmcgd2l0aCB0aGUgc2FtZSBp c3N1ZS4pDQo+ID4gPg0KPiA+ID4gVGhhdCdzIHdoYXQgSSBzYWlkLiAgSXMgdGhlIHBpcGVsaW5l IGJlaGF2aW9yIHByb3Blcmx5IG1vZGVsZWQgYnkgdGhlDQo+ID4gPiBzY2hlZHVsZXIgZGVzY3Jp cHRpb24/ICBZb3VyIHBhdGNoIHNlZW1zIHRvIG5vdCBvbmx5IGFmZmVjdCBsb29wcw0KPiA+ID4g YnV0IHRoZSBGTUEgZm9ybWluZyBjYXNlIGFscmVhZHkgcHJlc2VudCBkb2VzIC0gaXMgdGhlIGNh c2UgeW91IGFyZQ0KPiA+ID4gYWZ0ZXIgbm90IGluIGEgdGlnaHQgbG9vcD8gIEluIHByaW5jaXBs ZSB3aXRoIGEgbG9vcCB3aXRoIGVub3VnaA0KPiBzY2hlZHVsaW5nDQo+ID4gPiBmcmVlZG9tIHRo aXMgc2hvdWxkIGJlIGEgbm9uLWlzc3VlIC0gdW5sZXNzIHRoZSBwaXBlbGluZSBtb2RlbCBpc24n dA0KPiA+ID4gYWNjdXJhdGUgYW5kIHdlIHB1dCB0aGUgRk1BcyB0b28gY2xvc2UgdG9nZXRoZXI/ DQo+ID4NCj4gPiBUaGUgY3VycmVudCBkZWZlcnJpbmcgRk1BIHNjaGVtZSBkaXNjYXJkcyBhbGwg dGhlIEZNQSBjYW5kaWRhdGVzIGluIHRoZSBGTUENCj4gPiBjaGFpbiB0aGF0IGhhcyBsb29wIGRl cGVuZGVuY3kuIFNvIGZvciB0aGlzIGNhc2UgdGhlcmUgd2lsbCBiZSB0b28gbGVzcw0KPiAoemVy bykNCj4gPiBGTUEgZ2VuZXJhdGVkOyB3aGlsZSBiZWZvcmUgdGhlICJIYW5kbGUgRk1BIGZyaWVu ZGx5Li4uIiBwYXRjaCBvciBhZnRlcg0KPiB0aGlzDQo+ID4gcGF0Y2ggd2UgY2FuIHN0aWxsIGhh dmUgMSBGTUEuIEkgYWxzbyB0cmllZCB0byBjaGFuZ2UgdGhlIGRlZmVycmluZyBGTUENCj4gc2No ZW1lDQo+ID4gc28gb25seSB0aGUgbGFzdCBGTUEgaXMgZGlzY2FyZGVkLCBidXQgaXQgc3RpbGwg Y2FuJ3Qgc29sdmUgdGhlIHJlZ3Jlc3Npb24uDQo+ID4gSSB0aGluayBpdCdzIGJlY2F1c2UgdGhp cyBkZWZlcnJpbmcgc2NoZW1lIGlzIGluIHRoZSBsYXRlciBwYXNzDQo+IHdpZGVuaW5nX211bCwN Cj4gPiB3aGljaCBvbmx5IGRlY2lkZXMgd2hldGhlciB0byBmb3JtIEZNQSwgYnV0IGRvZXNuJ3Qg bWFuaXB1bGF0ZSB0aGUgdHJlZSBmb3INCj4gPiBiZXR0ZXIgZGF0YSBwYXJhbGxlbGlzbS4gU28g aXQgc2VlbXMgYmV0dGVyIHRvIG9wdGltaXplIGZvciBkYXRhDQo+IHBhcmFsbGVsaXNtDQo+ID4g KHN3YXBwaW5nIHRoZSBvcGVyYW5kcykgaW4gcmVhc3NvYyBpZiB3ZSBrbm93IHRoZXJlIGNhbiBi ZSBGTUFzIHdpdGggbG9vcA0KPiA+IGRlcGVuZGVuY3ksIGFuZCBsZWF2ZSB0aGUgY3VycmVudCBk ZWZlcnJpbmcgRk1BIHNjaGVtZSBhcyB0aGUgbGFzdCByZXNvcnQ/DQo+ID4NCj4gPiA+DQo+ID4g PiBSaWNoYXJkLg0KPiA+ID4NCj4gPiA+ID4gPiBSaWNoYXJkLg0KPiA+ID4gPiA+DQo+ID4gPiA+ ID4gPiBKZWZmDQo+ID4gPiA+DQo+ID4NCj4gPg0KPiA+IFRoYW5rcywNCj4gPiBEaSBaaGFvDQoN Cg0KVGhhbmtzLA0KRGkgWmhhbw0K