From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2057.outbound.protection.outlook.com [40.107.22.57]) by sourceware.org (Postfix) with ESMTPS id 7B6033858D20 for ; Tue, 22 Nov 2022 10:57:45 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 7B6033858D20 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=TlEF0ddxsCw6TZ6Hmw/sULMCr8d0Hqn7KVvnYAt8VkA=; b=9Q3yAlnLVkzK59iUJQLRZHT0W/twMxWSUB7MHc765xJIROGKcISya7KOoGdaDW/bF1c7CQM9z81z1SnJEpF3/m9d5LylDjIHxHhIpleHfO/nnewXqwvbBqCAdxdqkGfF3q++y46FYBXeo+vgP0V2Lksq3gYBmkWo+DkV/kpXCTY= Received: from DB6PR0501CA0033.eurprd05.prod.outlook.com (2603:10a6:4:67::19) by DU0PR08MB9629.eurprd08.prod.outlook.com (2603:10a6:10:44a::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5857.17; Tue, 22 Nov 2022 10:57:32 +0000 Received: from DBAEUR03FT035.eop-EUR03.prod.protection.outlook.com (2603:10a6:4:67:cafe::d6) by DB6PR0501CA0033.outlook.office365.com (2603:10a6:4:67::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5834.9 via Frontend Transport; Tue, 22 Nov 2022 10:57:32 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DBAEUR03FT035.mail.protection.outlook.com (100.127.142.136) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5834.8 via Frontend Transport; Tue, 22 Nov 2022 10:57:32 +0000 Received: ("Tessian outbound 58faf9791229:v130"); Tue, 22 Nov 2022 10:57:32 +0000 X-CR-MTA-TID: 64aa7808 Received: from 14ccc4649891.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id F8997DB3-8FAA-4E24-B025-A17BDB557826.1; Tue, 22 Nov 2022 10:57:26 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 14ccc4649891.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 22 Nov 2022 10:57:26 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=URkauv37udikIJNC6Emi7+OBjjuibJLtiiBsvo1KD6RGBSHRfEvcbLo+aAFTAqGGKBeOtUPfm8cY0HbHeieET3McwVaJ31hAtyc0p9wEJKB0Bxm4mttQZ51ltbnJfH1eDA234HwiMMUhiCE6drk7a4YW69RFDDIMWeWQtCeT9RBA43GN4+b8HEq9+kLLAb2vsgQ1UqH+bOkjERan7OmY7ZiRw2rWprqIYw1Jlwmxv6rxqGoWIVGF34izql8TOIqNVl3c4/mFVjcudfqyhLO6VgVaxiKf5HvCGv2nxY38PeRS4BkFvLGeueXaHXC2UXCyQrubvQjrKf0N9B1aRjYtZg== 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=TlEF0ddxsCw6TZ6Hmw/sULMCr8d0Hqn7KVvnYAt8VkA=; b=NF8V+bn738nHfJl3rDftASCQmfPXDZdmxn3dQVO80xrmjH+zmRiVBj/ftVkFgS64g3GqeFao+OfYOshq2jIzB/20u/XjFO4/D9N2i3aUkN1J7wbeLUxPd1XMxQdPMi4vkzfQ2NwKkA1AfF1MAGlfT4bselBEyoCzQqisAAEf7uvFTOaX/qqiyQPQynfTnmpvnTkBR5MFvzD/MzgBN04sJ8/apa5viFWlMfhZKUWaEaqIzA6gVVkpVoG781SR+7PKtOqX//d9xCsILAhBYja70N131L3TfcI7t/U43AWyPmsWonGtiB+dJR4szCLc5ZD7qw+43r4Cy6bUGqg4YpkoKQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=TlEF0ddxsCw6TZ6Hmw/sULMCr8d0Hqn7KVvnYAt8VkA=; b=9Q3yAlnLVkzK59iUJQLRZHT0W/twMxWSUB7MHc765xJIROGKcISya7KOoGdaDW/bF1c7CQM9z81z1SnJEpF3/m9d5LylDjIHxHhIpleHfO/nnewXqwvbBqCAdxdqkGfF3q++y46FYBXeo+vgP0V2Lksq3gYBmkWo+DkV/kpXCTY= Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by DBAPR08MB5734.eurprd08.prod.outlook.com (2603:10a6:10:1aa::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5857.17; Tue, 22 Nov 2022 10:57:22 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::bd2a:aff9:b1a0:2fc7]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::bd2a:aff9:b1a0:2fc7%4]) with mapi id 15.20.5857.017; Tue, 22 Nov 2022 10:57:22 +0000 From: Tamar Christina To: Philipp Tomsich CC: Richard Biener , mtsamis , GCC Patches , "jiangning.liu@amperecomputing.com" Subject: RE: [PATCH] Add pattern to convert vector shift + bitwise and + multiply to vector compare in some cases. Thread-Topic: [PATCH] Add pattern to convert vector shift + bitwise and + multiply to vector compare in some cases. Thread-Index: AQHYrvtczde7mPnYek6BnngnKanPM63A+M2AgABIJzCAih0ygIAABSmw Date: Tue, 22 Nov 2022 10:57:22 +0000 Message-ID: References: <20220813095843.1452308-1-manolis.tsamis@vrull.eu> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: 90EDC1CD67EC6C4EB366C0EACCC3EBFF.0 x-checkrecipientchecked: true Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: VI1PR08MB5325:EE_|DBAPR08MB5734:EE_|DBAEUR03FT035:EE_|DU0PR08MB9629:EE_ X-MS-Office365-Filtering-Correlation-Id: 99b40837-08db-44b0-b8cc-08dacc785b02 x-checkrecipientrouted: true nodisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: 1xk/Q1rq2Db5LO46YjuEQHOeO90w8qGKbwvCp+qaDUtFJsdlEsrPJQ94pqY4Hi9+RF3FddeHSb2EAdFd38O2snhvETe2aMzcTpwrk82kDiXqIvX8VetzomfhYO016+eVGdsErDf5MEyjL3yp0DuCbwIssd9dDi2ODlDNope/TW8xhgx3tU5qN8h17nOkzznX4QT7SaePIps5/l1nDKdDEh3MeHM7dekSW+7WhJyjXaCLPeua6oB0vqaPrJKnssauaD6/RtGlV8p05h/RcX1MBhdiASlC9b7xXXnIJDf8mrM8tlRxSCVU/TXpBryY5r/XzGLAFAbLIzS2kKFG+7YMblGq+yPdNY7hNGQsITwR6R8LhfoWOEiDEguzUjNme74PH4lCFIvUMCocxxhoxOuGJsXsQhDjQMCOLLwbDqeCCYGuyqXOfnkfqHgdycFC0W7uPbXGTAD8H63iIvOU4WqXYYM1pfbDUYn6kyMarBfdF3W7xN3Y5qvK5HMyM/Z21PYos2z46oMB1vq+6JnJU5u0xUBKw8sW1bGNBHAMdoXjbADbFPswxA+X8fNz/OJK9FfNSp6oUU0Cg0hqRgRCk+bxom40iGADgA0iaPxAG19YZP63Mq8XcL1JCxhRBsck7tlOjtihLdUvOY4GblSfNrnA5ZuFwJHgh2K/jRnQI4/JNnbBm/2/5UlXZIv3FS0iIlUhk8NK8AB3ws5yCmoUULY1qyPT4uVjUYVKkZC//Eb5NGo= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR08MB5325.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(136003)(376002)(39860400002)(396003)(346002)(366004)(451199015)(7696005)(6506007)(53546011)(26005)(186003)(122000001)(2906002)(478600001)(71200400001)(9686003)(38070700005)(38100700002)(33656002)(55016003)(83380400001)(86362001)(8936002)(41300700001)(30864003)(76116006)(66556008)(64756008)(66946007)(66476007)(52536014)(8676002)(66446008)(5660300002)(4326008)(54906003)(6916009)(84970400001)(316002);DIR:OUT;SFP:1101; Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBAPR08MB5734 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT035.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 1c206dd3-8700-45a4-6222-08dacc78555c X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: RYDIWLd3slawbzRMqYQIOW8wBiQff2gdPGtUndIf2beMXabtyccBNytn/cRD1nFwUFuIXi9Yx4Zf/sOXNEPia3t6EKdsW9XkAwpHFdH31kN7q4PCxMhoE0WlR78VwL9ALqOx6xB85Y5J//1inc3pvVmUCGT9Gj1+bLiPNxC0+LxFS6qN6ffF0+TENfpcawyhLiaB2ib+SXMqkCN/uBPAbj2/MTx+5KfXiH5x8kbDCl8QYyRzK1YtWZepPONtA/sy2b2ZhoPa8AGDH3oe4Zcv5GuT49IbeLF4OoYnXj5t29y0fxPs0OPY0HjZZ9D02zwdGBQ08/muIPGGtS7XpYKtSbBYFw44hbJdojIwF7hySsvI+n9OZeHy3id+/3+RjeY2kHxMDYireeHkYuXaQm8YX5WztTVeMhL92jK2i7njs60Q0SraLaHj1aKEdhaa+dEj4dLV3GH4rirt3BvGFvBK3t0dLLSE1NRjdnTcp9xO7tnoB3lE7SUE6R1wivigVkWgRfviHFqZH9iBj6S39FexbjGxMqohH1/J9aMQ0h0jN+r/8yMLzD/ByNMr4OocMWGuabDxGE76QZL96xkCctDl7vmo2COrUvPg3jjgYCOG+XChKQUCLxhmQ1H0afsLwIl2xzhRnFeWo88Dxedr/lJtfx8EP9M/yxxA/5aaSi66jJVQIfWiZwTZ5ezKe2XhWPYcBRKRZsSG7YXo1YYQ9SZVXWSlqDo5GxIwCwr7BFtMLRg= X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230022)(4636009)(346002)(376002)(39860400002)(396003)(136003)(451199015)(40470700004)(46966006)(36840700001)(86362001)(33656002)(2906002)(36860700001)(5660300002)(6862004)(52536014)(8936002)(30864003)(47076005)(186003)(336012)(83380400001)(55016003)(82310400005)(81166007)(84970400001)(82740400003)(107886003)(356005)(316002)(478600001)(54906003)(40480700001)(40460700003)(41300700001)(7696005)(70206006)(8676002)(4326008)(9686003)(70586007)(6506007)(26005)(53546011);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Nov 2022 10:57:32.1393 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 99b40837-08db-44b0-b8cc-08dacc785b02 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: DBAEUR03FT035.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB9629 X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,UNPARSEABLE_RELAY 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: SGksDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogUGhpbGlwcCBUb21z aWNoIDxwaGlsaXBwLnRvbXNpY2hAdnJ1bGwuZXU+DQo+IFNlbnQ6IFR1ZXNkYXksIE5vdmVtYmVy IDIyLCAyMDIyIDEwOjM1IEFNDQo+IFRvOiBUYW1hciBDaHJpc3RpbmEgPFRhbWFyLkNocmlzdGlu YUBhcm0uY29tPg0KPiBDYzogUmljaGFyZCBCaWVuZXIgPHJpY2hhcmQuZ3VlbnRoZXJAZ21haWwu Y29tPjsgbXRzYW1pcw0KPiA8bWFub2xpcy50c2FtaXNAdnJ1bGwuZXU+OyBHQ0MgUGF0Y2hlcyA8 Z2NjLXBhdGNoZXNAZ2NjLmdudS5vcmc+Ow0KPiBqaWFuZ25pbmcubGl1QGFtcGVyZWNvbXB1dGlu Zy5jb20NCj4gU3ViamVjdDogUmU6IFtQQVRDSF0gQWRkIHBhdHRlcm4gdG8gY29udmVydCB2ZWN0 b3Igc2hpZnQgKyBiaXR3aXNlIGFuZCArDQo+IG11bHRpcGx5IHRvIHZlY3RvciBjb21wYXJlIGlu IHNvbWUgY2FzZXMuDQo+IA0KPiBSaWNoYXJkICYgVGFtYXIsDQo+IA0KPiBPbiBGcmksIDI2IEF1 ZyAyMDIyIGF0IDE1OjI5LCBUYW1hciBDaHJpc3RpbmEgPFRhbWFyLkNocmlzdGluYUBhcm0uY29t Pg0KPiB3cm90ZToNCj4gPg0KPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+ IEZyb206IEdjYy1wYXRjaGVzIDxnY2MtcGF0Y2hlcy0NCj4gPiA+IGJvdW5jZXMrdGFtYXIuY2hy aXN0aW5hPWFybS5jb21AZ2NjLmdudS5vcmc+IE9uIEJlaGFsZiBPZiBSaWNoYXJkDQo+ID4gPiBC aWVuZXIgdmlhIEdjYy1wYXRjaGVzDQo+ID4gPiBTZW50OiBGcmlkYXksIEF1Z3VzdCAyNiwgMjAy MiAxMDowOCBBTQ0KPiA+ID4gVG86IG10c2FtaXMgPG1hbm9saXMudHNhbWlzQHZydWxsLmV1Pg0K PiA+ID4gQ2M6IEdDQyBQYXRjaGVzIDxnY2MtcGF0Y2hlc0BnY2MuZ251Lm9yZz47DQo+ID4gPiBq aWFuZ25pbmcubGl1QGFtcGVyZWNvbXB1dGluZy5jb207IFBoaWxpcHAgVG9tc2ljaA0KPiA+ID4g PHBoaWxpcHAudG9tc2ljaEB2cnVsbC5ldT4NCj4gPiA+IFN1YmplY3Q6IFJlOiBbUEFUQ0hdIEFk ZCBwYXR0ZXJuIHRvIGNvbnZlcnQgdmVjdG9yIHNoaWZ0ICsgYml0d2lzZQ0KPiA+ID4gYW5kICsg bXVsdGlwbHkgdG8gdmVjdG9yIGNvbXBhcmUgaW4gc29tZSBjYXNlcy4NCj4gPiA+DQo+ID4gPiBP biBTYXQsIEF1ZyAxMywgMjAyMiBhdCAxMTo1OSBBTSBtdHNhbWlzIDxtYW5vbGlzLnRzYW1pc0B2 cnVsbC5ldT4NCj4gd3JvdGU6DQo+ID4gPiA+DQo+ID4gPiA+IFdoZW4gdXNpbmcgU1dBUiAoU0lN RCBpbiBhIHJlZ2lzdGVyKSB0ZWNobmlxdWVzIGEgY29tcGFyaXNvbg0KPiA+ID4gPiBvcGVyYXRp b24gd2l0aGluIHN1Y2ggYSByZWdpc3RlciBjYW4gYmUgbWFkZSBieSB1c2luZyBhDQo+ID4gPiA+ IGNvbWJpbmF0aW9uIG9mIHNoaWZ0cywgYml0d2lzZSBhbmQgYW5kIG11bHRpcGxpY2F0aW9uLiBJ ZiBjb2RlDQo+ID4gPiA+IHVzaW5nIHRoaXMgc2NoZW1lIGlzIHZlY3Rvcml6ZWQgdGhlbiB0aGVy ZSBpcyBwb3RlbnRpYWwgdG8gcmVwbGFjZQ0KPiA+ID4gPiBhbGwgdGhlc2Ugb3BlcmF0aW9ucyB3 aXRoIGEgc2luZ2xlIHZlY3RvciBjb21wYXJpc29uLCBieQ0KPiA+ID4gPiByZWludGVycHJldGlu ZyB0aGUgdmVjdG9yIHR5cGVzIHRvDQo+ID4gPiBtYXRjaCB0aGUgd2lkdGggb2YgdGhlIFNXQVIg cmVnaXN0ZXIuDQo+ID4gPiA+DQo+ID4gPiA+IEZvciBleGFtcGxlLCBmb3IgdGhlIHRlc3QgZnVu Y3Rpb24gcGFja2VkX2NtcF8xNl8zMiwgdGhlIG9yaWdpbmFsDQo+ID4gPiBnZW5lcmF0ZWQgY29k ZSBpczoNCj4gPiA+ID4NCj4gPiA+ID4gICAgICAgICBsZHIgICAgIHEwLCBbeDBdDQo+ID4gPiA+ ICAgICAgICAgYWRkICAgICB3MSwgdzEsIDENCj4gPiA+ID4gICAgICAgICB1c2hyICAgIHYwLjRz LCB2MC40cywgMTUNCj4gPiA+ID4gICAgICAgICBhbmQgICAgIHYwLjE2YiwgdjAuMTZiLCB2Mi4x NmINCj4gPiA+ID4gICAgICAgICBzaGwgICAgIHYxLjRzLCB2MC40cywgMTYNCj4gPiA+ID4gICAg ICAgICBzdWIgICAgIHYwLjRzLCB2MS40cywgdjAuNHMNCj4gPiA+ID4gICAgICAgICBzdHIgICAg IHEwLCBbeDBdLCAxNg0KPiA+ID4gPiAgICAgICAgIGNtcCAgICAgdzIsIHcxDQo+ID4gPiA+ICAg ICAgICAgYmhpICAgICAuTDIwDQo+ID4gPiA+DQo+ID4gPiA+IHdpdGggdGhpcyBwYXR0ZXJuIHRo ZSBhYm92ZSBjYW4gYmUgb3B0aW1pemVkIHRvOg0KPiA+ID4gPg0KPiA+ID4gPiAgICAgICAgIGxk ciAgICAgcTAsIFt4MF0NCj4gPiA+ID4gICAgICAgICBhZGQgICAgIHcxLCB3MSwgMQ0KPiA+ID4g PiAgICAgICAgIGNtbHQgICAgdjAuOGgsIHYwLjhoLCAjMA0KPiA+ID4gPiAgICAgICAgIHN0ciAg ICAgcTAsIFt4MF0sIDE2DQo+ID4gPiA+ICAgICAgICAgY21wICAgICB3MiwgdzENCj4gPiA+ID4g ICAgICAgICBiaGkgICAgIC5MMjANCj4gPiA+ID4NCj4gPiA+ID4gVGhlIGVmZmVjdCBpcyBzaW1p bGFyIGZvciB4ODYtNjQuDQo+ID4gPiA+DQo+ID4gPiA+IGdjYy9DaGFuZ2VMb2c6DQo+ID4gPiA+ DQo+ID4gPiA+ICAgICAgICAgKiBtYXRjaC5wZDogU2ltcGxpZnkgdmVjdG9yIHNoaWZ0ICsgYml0 X2FuZCArIG11bHRpcGx5IGluIHNvbWUgY2FzZXMuDQo+ID4gPiA+DQo+ID4gPiA+IGdjYy90ZXN0 c3VpdGUvQ2hhbmdlTG9nOg0KPiA+ID4gPg0KPiA+ID4gPiAgICAgICAgICogZ2NjLnRhcmdldC9h YXJjaDY0L3N3YXJfdG9fdmVjX2NtcC5jOiBOZXcgdGVzdC4NCj4gPiA+ID4NCj4gPiA+ID4gU2ln bmVkLW9mZi1ieTogbXRzYW1pcyA8bWFub2xpcy50c2FtaXNAdnJ1bGwuZXU+DQo+ID4gPiA+IC0t LQ0KPiA+ID4gPiAgZ2NjL21hdGNoLnBkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgNTcgKysrKysrKysrKysrKysrDQo+ID4gPiA+ICAuLi4vZ2NjLnRhcmdldC9hYXJjaDY0L3N3 YXJfdG9fdmVjX2NtcC5jICAgICAgfCA3Mg0KPiA+ID4gKysrKysrKysrKysrKysrKysrKw0KPiA+ ID4gPiAgMiBmaWxlcyBjaGFuZ2VkLCAxMjkgaW5zZXJ0aW9ucygrKSAgY3JlYXRlIG1vZGUgMTAw NjQ0DQo+ID4gPiA+IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3N3YXJfdG9fdmVj X2NtcC5jDQo+ID4gPiA+DQo+ID4gPiA+IGRpZmYgLS1naXQgYS9nY2MvbWF0Y2gucGQgYi9nY2Mv bWF0Y2gucGQgaW5kZXgNCj4gPiA+ID4gOGJiYzBkYmQ1Y2QuLjVjNzY4YTk0ODQ2IDEwMDY0NA0K PiA+ID4gPiAtLS0gYS9nY2MvbWF0Y2gucGQNCj4gPiA+ID4gKysrIGIvZ2NjL21hdGNoLnBkDQo+ ID4gPiA+IEBAIC0zMDEsNiArMzAxLDYzIEBAIERFRklORV9JTlRfQU5EX0ZMT0FUX1JPVU5EX0ZO IChSSU5UKQ0KPiA+ID4gPiAgICAgICh2aWV3X2NvbnZlcnQgKGJpdF9hbmQ6aXR5cGUgKHZpZXdf Y29udmVydCBAMCkNCj4gPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5l IEAxIHsgYnVpbGRfemVyb19jc3QgKHR5cGUpOw0KPiA+ID4gPiB9KSkpKSkpKQ0KPiA+ID4gPg0K PiA+ID4gPiArLyogSW4gU1dBUiAoU0lNRCBpbiBhIHJlZ2lzdGVyKSBjb2RlIGEgY29tcGFyaXNv biBvZiBwYWNrZWQgZGF0YSBjYW4NCj4gPiA+ID4gKyAgIGJlIGNvbnN0dXJjdGVkIHdpdGggYSBw YXJ0aWN1bGFyIGNvbWJpbmF0aW9uIG9mIHNoaWZ0LCBiaXR3aXNlIGFuZCwNCj4gPiA+ID4gKyAg IGFuZCBtdWx0aXBsaWNhdGlvbiBieSBjb25zdGFudHMuICBJZiB0aGF0IGNvZGUgaXMgdmVjdG9y aXplZCB3ZSBjYW4NCj4gPiA+ID4gKyAgIGNvbnZlcnQgdGhpcyBwYXR0ZXJuIGludG8gYSBtb3Jl IGVmZmljaWVudCB2ZWN0b3IgY29tcGFyaXNvbi4NCj4gPiA+ID4gKyovIChzaW1wbGlmeSAgKG11 bHQgKGJpdF9hbmQgKHJzaGlmdCBAMCBAMSkgQDIpIEAzKQ0KPiA+ID4NCj4gPiA+IFlvdSBzaG91 bGQgcmVzdHJpY3QgdGhlIHBhdHRlcm4gYSBiaXQgbW9yZSwgYmVsb3cgeW91IHVzZQ0KPiA+ID4g dW5pZm9ybV9pbnRlZ2VyX2NzdF9wIGFuZCBhbHNvIHJlcXVpcmUgYSB2ZWN0b3IgdHlwZSB0aHVz DQo+ID4gPg0KPiA+ID4gICAoc2ltcGxpZnkNCj4gPiA+ICAgIChtdWx0IChiaXRfYW5kIChyc2hp ZnQgQDAgVkVDVE9SX0NTVEAxKSBWRUNUT1JfQ1NUQDIpDQo+ID4gPiBWRUNUT1JfQ1NUQDMpDQo+ ID4gPg0KPiA+ID4NCj4gPiA+ID4gKyAod2l0aCB7DQo+ID4gPiA+ICsgICB0cmVlIG9wX3R5cGUg PSBUUkVFX1RZUEUgKEAwKTsNCj4gPiA+DQo+ID4gPiB0aGF0J3MgdGhlIHNhbWUgYXMgJ3R5cGUn IHdoaWNoIGlzIGFscmVhZHkgYXZhaWxhYmxlLg0KPiA+ID4NCj4gPiA+ID4gKyAgIHRyZWUgcnNo aWZ0X2NzdCA9IE5VTExfVFJFRTsNCj4gPiA+ID4gKyAgIHRyZWUgYml0X2FuZF9jc3QgPSBOVUxM X1RSRUU7DQo+ID4gPiA+ICsgICB0cmVlIG11bHRfY3N0ID0gTlVMTF9UUkVFOw0KPiA+ID4gPiAr ICB9DQo+ID4gPiA+ICsgIC8qIE1ha2Ugc3VyZSB3ZSdyZSB3b3JraW5nIHdpdGggdmVjdG9ycyBh bmQgdW5pZm9ybSB2ZWN0b3INCj4gPiA+ID4gKyBjb25zdGFudHMuICAqLyAgKGlmIChWRUNUT1Jf VFlQRV9QIChvcF90eXBlKQ0KPiA+ID4gPiArICAgICAgICYmIChyc2hpZnRfY3N0ID0gdW5pZm9y bV9pbnRlZ2VyX2NzdF9wIChAMSkpDQo+ID4gPiA+ICsgICAgICAgJiYgKGJpdF9hbmRfY3N0ID0g dW5pZm9ybV9pbnRlZ2VyX2NzdF9wIChAMikpDQo+ID4gPiA+ICsgICAgICAgJiYgKG11bHRfY3N0 ID0gdW5pZm9ybV9pbnRlZ2VyX2NzdF9wIChAMykpKQ0KPiA+ID4gPiArICAgLyogQ29tcHV0ZSB3 aGF0IGNvbnN0YW50cyB3b3VsZCBiZSBuZWVkZWQgZm9yIHRoaXMgdG8NCj4gPiA+ID4gKyByZXBy ZXNlbnQgYQ0KPiA+ID4gcGFja2VkDQo+ID4gPiA+ICsgICAgICBjb21wYXJpc29uIGJhc2VkIG9u IHRoZSBzaGlmdCBhbW91bnQgZGVub3RlZCBieSBSU0hJRlRfQ1NULiAgKi8NCj4gPiA+ID4gKyAg ICh3aXRoIHsNCj4gPiA+ID4gKyAgICAgSE9TVF9XSURFX0lOVCB2ZWNfZWxlbV9iaXRzID0gdmVj dG9yX2VsZW1lbnRfYml0cyAob3BfdHlwZSk7DQo+ID4gPiA+ICsgICAgIEhPU1RfV0lERV9JTlQg dmVjX25lbHRzID0gVFlQRV9WRUNUT1JfU1VCUEFSVFMNCj4gPiA+ID4gKyAob3BfdHlwZSkudG9f Y29uc3RhbnQgKCk7DQo+ID4gPg0KPiA+ID4geW91IG5lZWQgdG8gY2hlY2sgdGhhdCB0aGlzIGlz bid0IGEgVkxBIHZlY3RvciBvcGVyYXRpb24uDQo+ID4NCj4gPiBTZWVtcyBsaWtlIHRoaXMgcGF0 dGVybiBzaG91bGQgYmUgYXBwbGljYWJsZSB0byBWTEEgYXMgd2VsbCBubz8NCj4gPiBTbyBjb3Vs ZCB3ZSBub3Qga2VlcCB2ZWNfbmVsdHMgYXMgYSBwb2x5IGFuZCBqdXN0IHVzZSBleGFjdF9kaXYg QmVsb3cNCj4gPiBpbiB0aGUgZGl2aXNpb24/IFRoZSBwYXR0ZXJuIGlzIG9ubHkgdmFsaWQgaWYg Y21wX2JpdHNfaSBpcyBhIG11bHRpcGxlDQo+ID4gb2YgdmVjX2VsZW1fYml0cyBhbnl3YXkuICBU aGUgYnVpbGRfdmVjdG9yXyogc2hvdWxkIHRoZW4gZG8gdGhlIHJpZ2h0DQo+ID4gdGhpbmcuDQo+ IA0KPiBTZWVtcyBsaWtlIHdlIG5ldmVyIGFncmVlZCBvbiB3aGF0IHNob3VsZCBnbyBpbnRvIHRo ZSBuZXh0IHZlcnNpb24uDQo+IEFtIEkgcmlnaHQgaW4gYXNzdW1pbmcgdGhhdCBhcHBsaWNhYmls aXR5IHRvIFZMQSBpcyBvayBhbmQgdGhhdCB3ZSBzaG91bGQNCj4gcHJpbWFyaWx5IGZvY3VzIG9u IGFkZHJlc3NpbmcgdGhlIGJlbG93IGNvbW1lbnRzIGZvciB2Mj8NCg0KSSBkb24ndCB0aGluayB0 aGVyZSB3YXMgYSBkaXNhZ3JlZW1lbnQgaGVyZSBwZXIgc2F5LiAgUmljaGFyZCdzIHBvaW50IHdh cyB0aGF0IGluIHRoZQ0KY3VycmVudCBmb3JtIHRoZSBwYXRjaCBpcyB1bnNhZmUgZm9yIFZMQSwg YXMgdG9fY29uc3RhbnQgKCkgd291bGQgZmFpbC4gIFRoYXQgaXMNCmlmIHRoZSBpZGVhIHdhcyBu b3QgdG8gc3VwcG9ydCBWTEEgdGhlbiB0aGlzIG5lZWRzIGEgY2hlY2ssIG9yIHVzZSB0aGUgY2hl Y2tpbmcNCnZlcnNpb24gb2YgdG9fY29uc3RhbnQuDQoNCkkgd2FzIHNheWluZyB0aGF0IHdlIGRv buKAmXQgbmVlZCB0byBtYWtlIHRoaXMgaWdub3JlIFZMQSwgdGhhdCB0aGUgcGF0dGVybiBzaG91 bGQNCmJlIGFwcGxpY2FibGUgZm9yIFZMQSBhcyB3ZWxsLiAgVGhhdCBpcyB0byBzYXksIHByb3Bl cmx5IGhhbmRsaW5nIFZMQSB3b3VsZCBhZGRyZXNzDQpSaWNoYXJkJ3MgY29uY2VybnMgYXMgd2Vs bC4NCg0KQ2hlZXJzLA0KVGFtYXINCg0KPiANCj4gQ2hlZXJzLA0KPiBQaGlsaXBwLg0KPiANCj4g PiA+DQo+ID4gPiA+ICsgICAgIEhPU1RfV0lERV9JTlQgdmVjX2JpdHMgPSB2ZWNfZWxlbV9iaXRz ICogdmVjX25lbHRzOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgIHVuc2lnbmVkIEhPU1RfV0lE RV9JTlQgY21wX2JpdHNfaSwgYml0X2FuZF9pLCBtdWx0X2k7DQo+ID4gPiA+ICsgICAgIHVuc2ln bmVkIEhPU1RfV0lERV9JTlQgdGFyZ2V0X211bHRfaSwgdGFyZ2V0X2JpdF9hbmRfaTsNCj4gPiA+ ID4gKyAgICAgY21wX2JpdHNfaSA9IHRyZWVfdG9fdWh3aSAocnNoaWZ0X2NzdCkgKyAxOw0KPiA+ ID4NCj4gPiA+IGFuZCB0aGF0IHRoZSByc2hpZnRfY3N0IGFuZCBvdGhlcnMgYWN0dWFsbHkgZml0 IGFuIHVod2kuDQo+ID4gPg0KPiA+ID4gPiArICAgICB0YXJnZXRfbXVsdF9pID0gKEhPU1RfV0lE RV9JTlRfMVUgPDwgY21wX2JpdHNfaSkgLSAxOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgIG11 bHRfaSA9IHRyZWVfdG9fdWh3aSAobXVsdF9jc3QpOw0KPiA+ID4gPiArICAgICBiaXRfYW5kX2kg PSB0cmVlX3RvX3Vod2kgKGJpdF9hbmRfY3N0KTsNCj4gPiA+ID4gKyAgICAgdGFyZ2V0X2JpdF9h bmRfaSA9IDA7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg aSA8IHZlY19lbGVtX2JpdHMgLyBjbXBfYml0c19pOyBpKyspDQo+ID4gPiA+ICsgICAgICAgdGFy Z2V0X2JpdF9hbmRfaSA9ICh0YXJnZXRfYml0X2FuZF9pIDw8IGNtcF9iaXRzX2kpIHwgMVU7DQo+ ID4gPg0KPiA+ID4gaXQgd291bGQgYmUgbmljZSB0byBoYXZlIGEgY29tbWVudCBvbiB3aGF0IHRo aXMgYWN0dWFsbHkgZG9lcyAuLi4NCj4gPiA+DQo+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiArICAg IChpZiAoKGV4YWN0X2xvZzIgKGNtcF9iaXRzX2kpKSA+PSAwDQo+ID4gPiA+ICsgICAgICAgICYm IGNtcF9iaXRzX2kgPCBIT1NUX0JJVFNfUEVSX1dJREVfSU5UDQo+ID4gPiA+ICsgICAgICAgICYm IHZlY19lbGVtX2JpdHMgPD0gSE9TVF9CSVRTX1BFUl9XSURFX0lOVA0KPiA+ID4gPiArICAgICAg ICAmJiB0cmVlX2ZpdHNfdWh3aV9wIChyc2hpZnRfY3N0KQ0KPiA+ID4gPiArICAgICAgICAmJiB0 cmVlX2ZpdHNfdWh3aV9wIChtdWx0X2NzdCkNCj4gPiA+ID4gKyAgICAgICAgJiYgdHJlZV9maXRz X3Vod2lfcCAoYml0X2FuZF9jc3QpDQo+ID4gPiA+ICsgICAgICAgICYmIHRhcmdldF9tdWx0X2kg PT0gbXVsdF9pDQo+ID4gPiA+ICsgICAgICAgICYmIHRhcmdldF9iaXRfYW5kX2kgPT0gYml0X2Fu ZF9pKQ0KPiA+ID4gPiArICAgICAvKiBDb21wdXRlIHRoZSB2ZWN0b3Igc2hhcGUgZm9yIHRoZSBj b21wYXJpc29uIGFuZCBjaGVjayBpZg0KPiA+ID4gPiArIHRoZQ0KPiA+ID4gdGFyZ2V0IGlzDQo+ ID4gPiA+ICsgICAgICAgYWJsZSB0byBleHBhbmQgdGhlIGNvbXBhcmlzb24gd2l0aCB0aGF0IHR5 cGUuICAqLw0KPiA+ID4gPiArICAgICAod2l0aCB7DQo+ID4gPiA+ICsgICAgICAgdHJlZSBib29s X3R5cGUgPSBidWlsZF9ub25zdGFuZGFyZF9ib29sZWFuX3R5cGUgKGNtcF9iaXRzX2kpOw0KPiA+ ID4gPiArICAgICAgIGludCB2ZWN0b3JfdHlwZV9uZWx0cyA9IHZlY19iaXRzIC8gY21wX2JpdHNf aTsNCj4gPiA+ID4gKyAgICAgICB0cmVlIHZlY3Rvcl90eXBlID0gYnVpbGRfdmVjdG9yX3R5cGUg KGJvb2xfdHlwZSwNCj4gPiA+ID4gKyB2ZWN0b3JfdHlwZV9uZWx0cyk7DQo+ID4gPg0KPiA+ID4g d2h5IGRvIHlvdSBidWlsZCBhIGJvb2wgdmVjdG9yIHR5cGUgaGVyZSBhbmQgdGhlbiAuLi4NCj4g PiA+DQo+ID4gPiA+ICsgICAgICAgdHJlZSB6ZXJvcyA9IGJ1aWxkX3plcm9fY3N0ICh2ZWN0b3Jf dHlwZSk7DQo+ID4gPiA+ICsgICAgICAgdHJlZSBtYXNrX3R5cGUgPSB0cnV0aF90eXBlX2ZvciAo dmVjdG9yX3R5cGUpOw0KPiA+ID4NCj4gPiA+IC4uLiBpdHMgdHJ1dGggdHlwZT8gIE5vdGUgYm90 aCBtaWdodCBub3QgYmUgYWN0dWFsbHkgc3VwcG9ydGVkIGJ5DQo+ID4gPiB0aGUgdGFyZ2V0IGFu ZCB0aHVzIHJlY2VpdmUgQkxLbW9kZSBvciBhbiBpbnRlZ2VyIG1vZGUuICBUaGUgbGF0dGVyDQo+ ID4gPiBpcyBhIHByb2JsZW0gZm9yIGV4cGFuZF92ZWNfY21wX2V4cHJfcCBhcyB0aGF0IG1pZ2h0 IHBpY2sgdXAgYSBwYXR0ZXJuDQo+IG5vdCBzdWl0YWJsZQ0KPiA+ID4gaGVyZS4gICBBbHNvIG5v dGUgdGhhdCB0cnV0aF90eXBlX2ZvciBjYW4gcmVzdWx0IGluIGEgbWFzayBtb2RlLCBha2ENCj4g PiA+IFFJbW9kZSB3aXRoIEFWWDUxMiBvciBzb21lIFZuQkltb2RlIG9uIG90aGVyIGFyY2hzIC0g dGhvc2UgYXJlIG5vdA0KPiA+ID4gT0sgdG8gYmUgc2ltcGx5IHZpZXdfY29udmVydGVkIGJhY2sg dG8gb3BfdHlwZS4gIEluIGdlbmVyYWwgYSB2ZWN0b3INCj4gPiA+IGNvbXBhcmUgb3BlcmF0aW9u IHlpZWxkcyBhIG1hc2sgYW5kIHlvdSBjYW4gY29udmVydCB0aGF0IHRvIGEgLTEvMA0KPiA+ID4g dmFsdWUgdXNpbmcgYSB2ZWNfY29uZF9leHByLiAgSSB0aGluayB3ZSBoYXZlIGEgcGF0dGVybiB0 aGF0IGNhbg0KPiA+ID4gdGhlbiBwcm9wZXJseSBzaW1wbGlmeSB0aGUgY2FzZSB3aGVyZSB0aGlz IGNhbiBiZSBleHByZXNzZWQgYXMgYQ0KPiA+ID4gdmlld19jb252ZXJ0LCBidXQgb2YgY291cnNl IHlvdSB0aGVuIGFsc28gbmVlZCB0byBjaGVjayBmb3INCj4gdmVjX2NvbmRfZXhwciBzdXBwb3J0 Lg0KPiA+ID4NCj4gPiA+IEkgd291bGQgc3VnZ2VzdCB5b3UgbWFrZSAndmVjdG9yX3R5cGUnIGFu IGludGVnZXIgZWxlbWVudCB0eXBlICh0aGF0DQo+ID4gPiBhbHNvIHByb3Blcmx5IHNwZWNpZmll cyB0aGUgc2lnbiBvZiB0aGUgY29tcGFyaXNvbiEpIGFuZCBjaGVjayB5b3UNCj4gPiA+IGVuZCB1 cCB3aXRoIGEgdmVjdG9yIG1vZGUgYW5kIHRoZSBtb2RlIG9mIHRoZSBtYXNrX3R5cGUgYWdyZWVz IHdpdGgNCj4gPiA+IHRoYXQgaWYgeW91IGRvbid0IHdhbnQgdG8gZ28gdGhlIHZlY19jb25kX2V4 cHIgcm91dGUuDQo+ID4gPg0KPiA+ID4NCj4gPiA+ID4gKyAgICAgIH0NCj4gPiA+ID4gKyAgICAg IChpZiAoZXhwYW5kX3ZlY19jbXBfZXhwcl9wICh2ZWN0b3JfdHlwZSwgbWFza190eXBlLCBMVF9F WFBSKSkNCj4gPiA+ID4gKyAgICAgICAodmlld19jb252ZXJ0Om9wX3R5cGUgKGx0Om1hc2tfdHlw ZQ0KPiA+ID4gPiArICh2aWV3X2NvbnZlcnQ6dmVjdG9yX3R5cGUNCj4gPiA+IEAwKQ0KPiA+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB6ZXJvczsgfSkp KSkpKSkpKQ0KPiA+ID4gPiArDQo+ID4gPiA+ICAoZm9yIGNtcCAoZ3QgZ2UgbHQgbGUpDQo+ID4g PiA+ICAgICAgIG91dHAgKGNvbnZlcnQgY29udmVydCBuZWdhdGUgbmVnYXRlKQ0KPiA+ID4gPiAg ICAgICBvdXRuIChuZWdhdGUgbmVnYXRlIGNvbnZlcnQgY29udmVydCkgZGlmZiAtLWdpdA0KPiA+ ID4gPiBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3N3YXJfdG9fdmVjX2NtcC5j DQo+ID4gPiA+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvc3dhcl90b192ZWNf Y21wLmMNCj4gPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiA+ID4gaW5kZXggMDAwMDAw MDAwMDAuLjI2ZjlhZDllZjI4DQo+ID4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ID4gKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvc3dhcl90b192ZWNfY21wLmMNCj4gPiA+ ID4gQEAgLTAsMCArMSw3MiBAQA0KPiA+ID4gPiArLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCj4g PiA+ID4gKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1mdHJlZS12ZWN0b3JpemUiIH0gKi8NCj4gPiA+ ID4gKw0KPiA+ID4gPiArdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnQ4X3Q7DQo+ID4gPiA+ICt0 eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVpbnQxNl90Ow0KPiA+ID4gPiArdHlwZWRlZiB1bnNpZ25l ZCBpbnQgdWludDMyX3Q7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qIDgtYml0IFNXQVIgdGVzdHMu ICAqLw0KPiA+ID4gPiArDQo+ID4gPiA+ICtzdGF0aWMgdWludDhfdCBwYWNrZWRfY21wXzhfOCh1 aW50OF90IGEpIHsNCj4gPiA+ID4gKyAgcmV0dXJuICgoYSA+PiA3KSAmIDB4MVUpICogMHhmZlU7 IH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyogMTYtYml0IFNXQVIgdGVzdHMuICAqLw0KPiA+ID4g PiArDQo+ID4gPiA+ICtzdGF0aWMgdWludDE2X3QgcGFja2VkX2NtcF84XzE2KHVpbnQxNl90IGEp IHsNCj4gPiA+ID4gKyAgcmV0dXJuICgoYSA+PiA3KSAmIDB4MTAxVSkgKiAweGZmVTsgfQ0KPiA+ ID4gPiArDQo+ID4gPiA+ICtzdGF0aWMgdWludDE2X3QgcGFja2VkX2NtcF8xNl8xNih1aW50MTZf dCBhKSB7DQo+ID4gPiA+ICsgIHJldHVybiAoKGEgPj4gMTUpICYgMHgxVSkgKiAweGZmZmZVOyB9 DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qIDMyLWJpdCBTV0FSIHRlc3RzLiAgKi8NCj4gPiA+ID4g Kw0KPiA+ID4gPiArc3RhdGljIHVpbnQzMl90IHBhY2tlZF9jbXBfOF8zMih1aW50MzJfdCBhKSB7 DQo+ID4gPiA+ICsgIHJldHVybiAoKGEgPj4gNykgJiAweDEwMTAxMDFVKSAqIDB4ZmZVOyB9DQo+ ID4gPiA+ICsNCj4gPiA+ID4gK3N0YXRpYyB1aW50MzJfdCBwYWNrZWRfY21wXzE2XzMyKHVpbnQz Ml90IGEpIHsNCj4gPiA+ID4gKyAgcmV0dXJuICgoYSA+PiAxNSkgJiAweDEwMDAxVSkgKiAweGZm ZmZVOyB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gK3N0YXRpYyB1aW50MzJfdCBwYWNrZWRfY21wXzMy XzMyKHVpbnQzMl90IGEpIHsNCj4gPiA+ID4gKyAgcmV0dXJuICgoYSA+PiAzMSkgJiAweDFVKSAq IDB4ZmZmZmZmZmZVOyB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qIERyaXZlciBmdW5jdGlvbiB0 byB0ZXN0IHRoZSB2ZWN0b3JpemVkIGNvZGUgZ2VuZXJhdGVkIGZvciB0aGUNCj4gZGlmZmVyZW50 DQo+ID4gPiA+ICsgICBwYWNrZWRfY21wIHZhcmlhbnRzLiAgKi8NCj4gPiA+ID4gKw0KPiA+ID4g PiArI2RlZmluZSBWRUNUT1JJWkVEX1BBQ0tFRF9DTVAoVCwgRlVOQykgICAgICAgICBcDQo+ID4g PiA+ICsgIHZvaWQgdmVjdG9yaXplZF9jbXBfIyNGVU5DKFQqIGEsIGludCBuKSAgICAgIFwNCj4g PiA+ID4gKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0K PiA+ID4gPiArICAgIG4gPSAobiAvIDMyKSAqIDMyOyAgICAgICAgICAgICAgICAgICAgICAgICBc DQo+ID4gPiA+ICsgICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkgKz0gNCkgICAgICAgICAgICAg IFwNCj4gPiA+ID4gKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXA0KPiA+ID4gPiArICAgICAgYVtpICsgMF0gPSBGVU5DKGFbaSArIDBdKTsgICAgICAgICAg ICAgICBcDQo+ID4gPiA+ICsgICAgICBhW2kgKyAxXSA9IEZVTkMoYVtpICsgMV0pOyAgICAgICAg ICAgICAgIFwNCj4gPiA+ID4gKyAgICAgIGFbaSArIDJdID0gRlVOQyhhW2kgKyAyXSk7ICAgICAg ICAgICAgICAgXA0KPiA+ID4gPiArICAgICAgYVtpICsgM10gPSBGVU5DKGFbaSArIDNdKTsgICAg ICAgICAgICAgICBcDQo+ID4gPiA+ICsgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICtWRUNUT1JJ WkVEX1BBQ0tFRF9DTVAodWludDhfdCwgcGFja2VkX2NtcF84XzgpOw0KPiA+ID4gPiArDQo+ID4g PiA+ICtWRUNUT1JJWkVEX1BBQ0tFRF9DTVAodWludDE2X3QsIHBhY2tlZF9jbXBfOF8xNik7DQo+ ID4gPiA+ICtWRUNUT1JJWkVEX1BBQ0tFRF9DTVAodWludDE2X3QsIHBhY2tlZF9jbXBfMTZfMTYp Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICtWRUNUT1JJWkVEX1BBQ0tFRF9DTVAodWludDMyX3QsIHBh Y2tlZF9jbXBfOF8zMik7DQo+ID4gPiA+ICtWRUNUT1JJWkVEX1BBQ0tFRF9DTVAodWludDMyX3Qs IHBhY2tlZF9jbXBfMTZfMzIpOw0KPiA+ID4gPiArVkVDVE9SSVpFRF9QQUNLRURfQ01QKHVpbnQz Ml90LCBwYWNrZWRfY21wXzMyXzMyKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyIHtcdGNtbHRcdH0gfSB9ICovDQo+ID4gPiA+ICsvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90IHtcdHVzaHJcdH0gfSB9ICovDQo+ID4gPiA+ICsvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90IHtcdHNobFx0fSB9IH0gKi8NCj4gPiA+ID4g Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3Qge1x0bXVsXHR9IH0gfSAqLw0KPiA+ ID4gPiAtLQ0KPiA+ID4gPiAyLjM0LjENCj4gPiA+ID4NCg==