From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by mx.groups.io with SMTP id smtpd.web09.8939.1663947784676668579 for ; Fri, 23 Sep 2022 08:43:05 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=dzhj9n0n; spf=pass (domain: intel.com, ip: 134.134.136.126, mailfrom: michael.d.kinney@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1663947784; x=1695483784; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=HX4v0Uly2qT0s7vj87VhqT0k9TjuBuIG4Xr4BFOg0f4=; b=dzhj9n0nIClypnPq5osZMzY+dMjLxFXLqlHR9m2QPzTzq+7P6rg2f+qO kw80cpDNZFJVIIwGOihEcza3Avkb3Fxc+CNMo79lxDbMiX0GwxYiYIv80 PPRhWtEz0EOhGdbSjWCk81Wh1QEo6StITknyThc/K55YrJfQe9oENPrpB lFWFRaajMUICVasa9yTrgAaWQDWnyh2Yypi6G4t8C753vXSxcM5ee5txb sbftOvE4wKpPyIhaQsxN35yWPCdPtX5VZ/bINV1FZSlxlx0WPJMsL7XcT CRY+V0WIO73MaHZLSZyrqXwfOkBwLKSbTOusEZYsSRV3A4cO1JjyC5mbn w==; X-IronPort-AV: E=McAfee;i="6500,9779,10479"; a="283717328" X-IronPort-AV: E=Sophos;i="5.93,339,1654585200"; d="scan'208";a="283717328" Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Sep 2022 08:43:04 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,339,1654585200"; d="scan'208";a="865331655" Received: from fmsmsx601.amr.corp.intel.com ([10.18.126.81]) by fmsmga006.fm.intel.com with ESMTP; 23 Sep 2022 08:43:03 -0700 Received: from fmsmsx608.amr.corp.intel.com (10.18.126.88) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Fri, 23 Sep 2022 08:43:03 -0700 Received: from fmsmsx608.amr.corp.intel.com (10.18.126.88) by fmsmsx608.amr.corp.intel.com (10.18.126.88) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Fri, 23 Sep 2022 08:43:02 -0700 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx608.amr.corp.intel.com (10.18.126.88) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31 via Frontend Transport; Fri, 23 Sep 2022 08:43:02 -0700 Received: from NAM02-BN1-obe.outbound.protection.outlook.com (104.47.51.45) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2375.31; Fri, 23 Sep 2022 08:43:02 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WJkbEvIp9Got6OiBu4kZj3ZWs7LCi81zs9rLrdw0YT+tmP4+C2MPDAyu1b26N40/sP1UM/ECLTdTUlFHPvgx3HZnhpD/tHqnAB4pcM1nDcz6deh1RnQ5Rr+PLLFn4Y/XWPG4s5TaN/048BYTsJQFHC8lMePpZ43ktQoGWHPHwjLJ5na1uxt6lVEDHTp1cyXe2nArugHX6rqfXf8ImEueSGMBCLHUQsGEu5YII1o+CgNe+1NTwSR+/NXjbX03Fs6bZIvaj3MtoQMHvXiyok1M9qPToq8KfihJSepRlfX6OSYOPT0Ozzmx8oIL7igZowvF2gIlAxSZIkA/Eblou8qobg== 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=HX4v0Uly2qT0s7vj87VhqT0k9TjuBuIG4Xr4BFOg0f4=; b=eZekaEz/4UA/xn/pq5qkxDDVkkT+YtmzmBfkoVXQbyBR+6CwxCMV/bGQTNiCZBPJJpmXSxuf6/1VHk2JATwysv0rD7VN+UlTZvcSD3zVBz0X+8QMfwTQ0Vr/KoEIWjZszOj1257rSKqAY9wsE9H/1W3n3m2Zb3p3bU5jKUnb+oGGxbSekpSvhR0yecUznmKWwL/rKC0IFkk/PuK+r3hodlJFMNuMVz5QWv9Q/vvk2RdzprtTeLIIJRAGr59PQepvDfzbb5KRDXJx/0mTl+2wcsYvVYlCuzoAUi4s40s7J2213dpwWntoiRrTPFS/rBXOlJCB9Y633nhiabDZHJMeoA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from CO1PR11MB4929.namprd11.prod.outlook.com (2603:10b6:303:6d::19) by BL1PR11MB5496.namprd11.prod.outlook.com (2603:10b6:208:314::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.20; Fri, 23 Sep 2022 15:42:58 +0000 Received: from CO1PR11MB4929.namprd11.prod.outlook.com ([fe80::ce64:b1b4:e087:4cc2]) by CO1PR11MB4929.namprd11.prod.outlook.com ([fe80::ce64:b1b4:e087:4cc2%7]) with mapi id 15.20.5654.020; Fri, 23 Sep 2022 15:42:58 +0000 From: "Michael D Kinney" To: Chao Li , "devel@edk2.groups.io" , "Kinney, Michael D" CC: "Gao, Liming" , "Liu, Zhiguang" Subject: Re: [PATCH v2 24/34] MdePkg/BaseCacheMaintenanceLib: LoongArch cache maintenance implementation. Thread-Topic: [PATCH v2 24/34] MdePkg/BaseCacheMaintenanceLib: LoongArch cache maintenance implementation. Thread-Index: AQHYyB4tKj8lKD37NkKQcDleF3iR063tNgYQ Date: Fri, 23 Sep 2022 15:42:58 +0000 Message-ID: References: <20220914094118.3696973-1-lichao@loongson.cn> In-Reply-To: <20220914094118.3696973-1-lichao@loongson.cn> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.6.500.17 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CO1PR11MB4929:EE_|BL1PR11MB5496:EE_ x-ms-office365-filtering-correlation-id: 04319327-e725-42e3-1bbf-08da9d7a4a84 x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: SylHbQN55YR1I3EDCGMwNnUEy+8r2hwIA57+W5l9Ceqhe3Lcw0X+xdCE499JxS6BFUfSUK/aieDMvC8BzbBM6FMlQzM1SPv4c9hYKSgfnDiOpGOC3mxtOtfckqWmAUS3YLloE/leyrCkpoP0o/HpB2A7cL/WwZUZ5sWDUr6pPC3FtFvM2biGev7ObQ2Xhlu99TI2YhlTKyFpA5AqxndRAabxiz0WGVC4qwSbA5PIvdsQFYOGq6QBUJfypMEzwyLsLAyGrW8s52ruVmJMSNnQbsI5E9CmgJzISnEXQN2UvGXtwz7x6LQ0f621FWmPYeNxcve3ve58n1lRd1YE8PaYRqBFB9xPK5X5Qc1IpoDVg5A9I9GnNvC2WrQfLlvjGclJs08CylUnQ4YDS3ht01/tV3dyUXIfisJNggua3qR7UiL7LLh0l0hXx5afNqIzsdyPiVBbpKOZYYGznLxYWK7scFCEc+ssWOfB5hhksnjcFoeti+1pAZc9FwpQXXgOw6TzPuWBtiReDvF311CgOnpFWjVraY4wyuZhvtNV13dgkuydEoEtbEAt1O63z79Cx8jpMlfhfqs0YPum1In6Nx9cWO7LgiLkXLB8vYX4h/QemoL+rAQ/7YWNGmtlg8ojUfiSuahIFWUGDLLQL7l35e5UkKD5mJI0fz27PE/alfaJWTIlI2OY1DwDze4/CDDqynzdh5J0y7zIQ3yb2vTAIQjTs+a9P/N937gmTgbujOVBZF9ogIng44mOgMlLTFi92PQ4bugmjTOUQfto8sWP9q+RRhCb5ikbyI3lZJnhQIZNEyY= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CO1PR11MB4929.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(346002)(136003)(376002)(366004)(396003)(39860400002)(451199015)(52536014)(8936002)(2906002)(30864003)(5660300002)(33656002)(71200400001)(8676002)(38070700005)(76116006)(110136005)(66946007)(478600001)(66476007)(66556008)(66446008)(64756008)(53546011)(107886003)(4326008)(316002)(41300700001)(7696005)(6506007)(54906003)(82960400001)(83380400001)(966005)(55016003)(86362001)(122000001)(38100700002)(9686003)(26005)(186003);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?WTJLU2IxUzhYNVpXTVYxUktvOSt5SHQ5OHRjZUxlZjRSL3J2VDV3ZG1ybi9I?= =?utf-8?B?ZVdQNERXckd3cXhEUWpteGZGQWp4eTZMU1Z2UVF3UFVCRnZOSzcrVnB6TGVm?= =?utf-8?B?ZFVvN3RXYUV2cjR4LzBvS2RTM1VodXJqOHdzL0ZQRFh4VEI3REgySUVyaC9I?= =?utf-8?B?N3JvNWdsSFErdTk4bWxpb3dodi9KenhxUk5tMDNDUm4rOENTSTd3YVJGSVk1?= =?utf-8?B?b1RSOWxSbnp1YWZobVhzQ1hHbEhLN09ybkVPUWFTWkFuejRtV2xmbmZzNUJn?= =?utf-8?B?VlNUcjBqVGtqd0ZqMkpXU0ZSWDJIUGFSMFVjdklVMGs2OE4vS3RlTWt2djNi?= =?utf-8?B?NWE2LzBnNWdKYTBJUHB3aDlLYVVwc2hqVktwSDdVUllIeWV4RERTN2xkQjF4?= =?utf-8?B?VkNCTzNFTTBEQm5VaXhWaGJsWUNOa2pLRWhCZ1VMMGkxQmZYT2VRVXk0ZzVN?= =?utf-8?B?TVBhRzk5NVpscG1KcjNIakM5Wngxb3V2NVEvL1NFUEx2STFQT0lhUk00aVZN?= =?utf-8?B?Y00wU0VZYm5IUE9qYnZZeVQrclcwdGZ0RVdod3ZiU09KZVpqZnhHZFcwS3ph?= =?utf-8?B?U0wwdmgwaDBxUkpWL3VKSS9Ud0R5Q0RoV0ZRcSs2cjNHV0Ria0dQZm0zcVgz?= =?utf-8?B?T04xMlpzUm5EZjJ1UGZCQ0FUT0hEQzZ0ZDVFWm11WkFSeTFJc0pURzc2ZHoy?= =?utf-8?B?cTNzb0gxQ0JqazlXTVlQQjJlWEdEMDh4c1puMHZoZlJHZzM0akV3Z1ZLMXp0?= =?utf-8?B?YTVVcFE5NGIvSlZOYjR1amJudllPYS9Zd1hGL0VCQ1JHb2J3dXlRTnQ1UGxl?= =?utf-8?B?bWVjVVB5c1Q2R1daemZRZlV3M3ZZTEYyd2hSMXVDRWd0SkJDN0xmYndYNEpw?= =?utf-8?B?TzgwVlE4TkMwTlRCeDlQaEw1eUloQVByYWNINUk2aDBSaWt2NnMyVXNCVXVW?= =?utf-8?B?T0ZkUTJlNFpQQnVsUmdwazBycW9xWUJ2S0V5bnhqaHRaS0psaHRmMEEyeW5p?= =?utf-8?B?ZW9Wc1BNcHBpRG5XUWZwV2theTN6N0dhZmc3MFFsR2NHZUQ1NENnQXhkN09C?= =?utf-8?B?emVSVWozM3Y5eXRNNmZSMGpJVmZDWEZmZHkwNGlWY3VZWFZHV05PTWtNbWRp?= =?utf-8?B?UktQZG1Hbys0K3lIMVBTamI4bzZWSjRXaHlXYkM1QkhWckpXUWxEK2lWVXc5?= =?utf-8?B?cm1vUnFtSTE0eEVLTjRaeEFNc3R0SHhYK1JoSUh5b3IyazVBMDllclNpNE9S?= =?utf-8?B?ZDAvVzVYT2dkbitkM1ROY2tuWXljb3YyelVmdFI1SWx1SU00N20xZTlyRFVj?= =?utf-8?B?a3c5a2t5VVRob2FZekVDRHIwV3ZnRVVYUWxuc2trTTh1dFgrblJzNExkOFZ5?= =?utf-8?B?QXdIRkk1dS9rem9mci91SVFFcWtTZWdycGJTNEdQaERvZDFxOTZIOStqenJ2?= =?utf-8?B?cm1ZLzdvbFFid1N2cExVRmpSbDhoUFVuK1M1UEZ1REw0dnFkWklaaDFuZm1I?= =?utf-8?B?VnZDWWlKTFhzUVYrdWlqQ1BxZUJINEx4cXdiMTdEeWNDUGVTQlJlNFFBMnkz?= =?utf-8?B?QzBpWUlZTHdDc25ScFczY09XaEgzTjBkeVJwc3FXaFNzL3lsZDJrM2cyUjBi?= =?utf-8?B?Vjk5K3R5UDNGbnF0MHVKZTNnUE5Va3hHckdnS3lmcjhGTWdTRXN2WVY5dEcv?= =?utf-8?B?WlRSN1RTNVFXM0hmWEZDdllhdW8weVhJdjZWZEpLc0ZKMzlLNUFiYkExbWNY?= =?utf-8?B?NlpQZndkVUFaSWlXMEV6cEl1NTluc00vRkFEWmVwMVFJYlhCSURUbS9CMURV?= =?utf-8?B?Yk9nZWMrUVJQY3pJcmtNYWNQU2tSU3RGQmJPdjJpU21OcENnajEvakNDMjNn?= =?utf-8?B?NHowdWVRREdUa3JINGJIVHJVY2NBZlFLYXFTb0t6dXBFWHhubXlxdGcyd0lr?= =?utf-8?B?MWJFV3JwZmMwN0xmTjE2K1RLZzNnUGYrbmVBL1JPeUJqa3FPMEo3UE9NMmpG?= =?utf-8?B?WXc2a3BuaDZXb2NmK09jWjU3Z1h1Zk9nVnNZdUd3YkJMcThZeC8rMStiT1dM?= =?utf-8?B?ZTZpZzRRSmVudGl3Z3JqZlhVNVYremFiYWZKdVlZYU9SODhlemhWRU1ZK0Ex?= =?utf-8?B?bStRMGJkb054ODFzL01zVTB0VVBVaTZyNkpILzVwc0drRFlwczBlc0ZIWmVi?= =?utf-8?B?TXc9PQ==?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO1PR11MB4929.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 04319327-e725-42e3-1bbf-08da9d7a4a84 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Sep 2022 15:42:58.7620 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: uOmyxPONQyc0OJADRG0/pFyk+Pi3n4IpUAA4EjnSTizt6eRbp/1fP+ha3E8+4zV39F205yjfSR3zMHohpxN3ddQwo69WbRllpQ1r3WfJmz0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR11MB5496 Return-Path: michael.d.kinney@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 UmV2aWV3ZWQtYnk6IE1pY2hhZWwgRCBLaW5uZXkgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29t Pg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IENoYW8gTGkgPGxpY2hh b0Bsb29uZ3Nvbi5jbj4NCj4gU2VudDogV2VkbmVzZGF5LCBTZXB0ZW1iZXIgMTQsIDIwMjIgMjo0 MSBBTQ0KPiBUbzogZGV2ZWxAZWRrMi5ncm91cHMuaW8NCj4gQ2M6IEtpbm5leSwgTWljaGFlbCBE IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47IEdhbywgTGltaW5nIDxnYW9saW1pbmdAYnlv c29mdC5jb20uY24+OyBMaXUsIFpoaWd1YW5nIDx6aGlndWFuZy5saXVAaW50ZWwuY29tPg0KPiBT dWJqZWN0OiBbUEFUQ0ggdjIgMjQvMzRdIE1kZVBrZy9CYXNlQ2FjaGVNYWludGVuYW5jZUxpYjog TG9vbmdBcmNoIGNhY2hlIG1haW50ZW5hbmNlIGltcGxlbWVudGF0aW9uLg0KPiANCj4gUkVGOiBo dHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dpP2lkPTQwNTMNCj4gDQo+ IEltcGxlbWVudCBMb29uZ0FyY2ggY2FjaGUgbWFpbnRlbmFuY2UgZnVuY3Rpb25zIGluDQo+IEJh c2VDYWNoZU1haW50ZW5hbmNlTGliLg0KPiANCj4gQ2M6IE1pY2hhZWwgRCBLaW5uZXkgPG1pY2hh ZWwuZC5raW5uZXlAaW50ZWwuY29tPg0KPiBDYzogTGltaW5nIEdhbyA8Z2FvbGltaW5nQGJ5b3Nv ZnQuY29tLmNuPg0KPiBDYzogWmhpZ3VhbmcgTGl1IDx6aGlndWFuZy5saXVAaW50ZWwuY29tPg0K PiANCj4gU2lnbmVkLW9mZi1ieTogQ2hhbyBMaSA8bGljaGFvQGxvb25nc29uLmNuPg0KPiAtLS0N Cj4gIC4uLi9CYXNlQ2FjaGVNYWludGVuYW5jZUxpYi5pbmYgICAgICAgICAgICAgICB8ICAgNiAr LQ0KPiAgLi4uL0Jhc2VDYWNoZU1haW50ZW5hbmNlTGliL0xvb25nQXJjaENhY2hlLmMgIHwgMjU0 ICsrKysrKysrKysrKysrKysrKw0KPiAgMiBmaWxlcyBjaGFuZ2VkLCAyNTkgaW5zZXJ0aW9ucygr KSwgMSBkZWxldGlvbigtKQ0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IE1kZVBrZy9MaWJyYXJ5L0Jh c2VDYWNoZU1haW50ZW5hbmNlTGliL0xvb25nQXJjaENhY2hlLmMNCj4gDQo+IGRpZmYgLS1naXQg YS9NZGVQa2cvTGlicmFyeS9CYXNlQ2FjaGVNYWludGVuYW5jZUxpYi9CYXNlQ2FjaGVNYWludGVu YW5jZUxpYi5pbmYNCj4gYi9NZGVQa2cvTGlicmFyeS9CYXNlQ2FjaGVNYWludGVuYW5jZUxpYi9C YXNlQ2FjaGVNYWludGVuYW5jZUxpYi5pbmYNCj4gaW5kZXggMzMxMTQyNDNkNS4uNmZkOWNiZTVm NiAxMDA2NDQNCj4gLS0tIGEvTWRlUGtnL0xpYnJhcnkvQmFzZUNhY2hlTWFpbnRlbmFuY2VMaWIv QmFzZUNhY2hlTWFpbnRlbmFuY2VMaWIuaW5mDQo+ICsrKyBiL01kZVBrZy9MaWJyYXJ5L0Jhc2VD YWNoZU1haW50ZW5hbmNlTGliL0Jhc2VDYWNoZU1haW50ZW5hbmNlTGliLmluZg0KPiBAQCAtNyw2 ICs3LDcgQEANCj4gICMgIENvcHlyaWdodCAoYykgMjAwNyAtIDIwMTgsIEludGVsIENvcnBvcmF0 aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gDQo+ICAjICBQb3J0aW9ucyBjb3B5cmln aHQgKGMpIDIwMDggLSAyMDA5LCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0K PiANCj4gICMgIENvcHlyaWdodCAoYykgMjAyMCwgSGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2Ug RGV2ZWxvcG1lbnQgTFAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiANCj4gKyMgIENvcHly aWdodCAoYykgMjAyMiwgTG9vbmdzb24gVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiBMaW1pdGVkLiBB bGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gDQo+ICAjDQo+IA0KPiAgIyAgU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gDQo+ICAjDQo+IA0KPiBAQCAtMjQs NyArMjUsNyBAQA0KPiANCj4gDQo+IA0KPiANCj4gICMNCj4gDQo+IC0jICBWQUxJRF9BUkNISVRF Q1RVUkVTICAgICAgICAgICA9IElBMzIgWDY0IEVCQyBBUk0gQUFSQ0g2NA0KPiANCj4gKyMgIFZB TElEX0FSQ0hJVEVDVFVSRVMgICAgICAgICAgID0gSUEzMiBYNjQgRUJDIEFSTSBBQVJDSDY0IFJJ U0NWNjQgTE9PTkdBUkNINjQNCj4gDQo+ICAjDQo+IA0KPiANCj4gDQo+ICBbU291cmNlcy5JQTMy XQ0KPiANCj4gQEAgLTQ1LDYgKzQ2LDkgQEANCj4gIFtTb3VyY2VzLlJJU0NWNjRdDQo+IA0KPiAg ICBSaXNjVkNhY2hlLmMNCj4gDQo+IA0KPiANCj4gK1tTb3VyY2VzLkxPT05HQVJDSDY0XQ0KPiAN Cj4gKyAgTG9vbmdBcmNoQ2FjaGUuYw0KPiANCj4gKw0KPiANCj4gIFtQYWNrYWdlc10NCj4gDQo+ ICAgIE1kZVBrZy9NZGVQa2cuZGVjDQo+IA0KPiANCj4gDQo+IGRpZmYgLS1naXQgYS9NZGVQa2cv TGlicmFyeS9CYXNlQ2FjaGVNYWludGVuYW5jZUxpYi9Mb29uZ0FyY2hDYWNoZS5jIGIvTWRlUGtn L0xpYnJhcnkvQmFzZUNhY2hlTWFpbnRlbmFuY2VMaWIvTG9vbmdBcmNoQ2FjaGUuYw0KPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi40Yzg3NzMyNzhjDQo+IC0tLSAv ZGV2L251bGwNCj4gKysrIGIvTWRlUGtnL0xpYnJhcnkvQmFzZUNhY2hlTWFpbnRlbmFuY2VMaWIv TG9vbmdBcmNoQ2FjaGUuYw0KPiBAQCAtMCwwICsxLDI1NCBAQA0KPiArLyoqIEBmaWxlDQo+IA0K PiArICBDYWNoZSBNYWludGVuYW5jZSBGdW5jdGlvbnMgZm9yIExvb25nQXJjaC4NCj4gDQo+ICsg IExvb25nQXJjaCBjYWNoZSBtYWludGVuYW5jZSBmdW5jdGlvbnMgaGFzIG5vdCB5ZXQgYmVlbiBj b21wbGV0ZWQsIGFuZCB3aWxsIGFkZGVkIGluIGxhdGVyLg0KPiANCj4gKyAgRnVuY3Rpb25zIGFy ZSBudWxsIGZ1bmN0aW9ucyBub3cuDQo+IA0KPiArDQo+IA0KPiArICBDb3B5cmlnaHQgKGMpIDIw MjIsIExvb25nc29uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC48QlI+DQo+IA0KPiArDQo+IA0KPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog QlNELTItQ2xhdXNlLVBhdGVudA0KPiANCj4gKw0KPiANCj4gKyoqLw0KPiANCj4gKw0KPiANCj4g Ky8vDQo+IA0KPiArLy8gSW5jbHVkZSBjb21tb24gaGVhZGVyIGZpbGUgZm9yIHRoaXMgbW9kdWxl Lg0KPiANCj4gKy8vDQo+IA0KPiArI2luY2x1ZGUgPEJhc2UuaD4NCj4gDQo+ICsjaW5jbHVkZSA8 TGlicmFyeS9CYXNlTGliLmg+DQo+IA0KPiArI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4N Cj4gDQo+ICsNCj4gDQo+ICsvKioNCj4gDQo+ICsgIExvb25nQXJjaCBkYXRhIGJhcnJpZXIgb3Bl cmF0aW9uLg0KPiANCj4gKyoqLw0KPiANCj4gK1ZPSUQNCj4gDQo+ICtFRklBUEkNCj4gDQo+ICtB c21EYXRhQmFycmllckxvb25nQXJjaCAoDQo+IA0KPiArICBWT0lEDQo+IA0KPiArICApOw0KPiAN Cj4gKw0KPiANCj4gKy8qKg0KPiANCj4gKyAgTG9vbmdBcmNoIGluc3RydWN0aW9uIGJhcnJpZXIg b3BlcmF0aW9uLg0KPiANCj4gKyoqLw0KPiANCj4gK1ZPSUQNCj4gDQo+ICtFRklBUEkNCj4gDQo+ ICtBc21JbnN0cnVjdGlvbkJhcnJpZXJMb29uZ0FyY2ggKA0KPiANCj4gKyAgVk9JRA0KPiANCj4g KyAgKTsNCj4gDQo+ICsNCj4gDQo+ICsvKioNCj4gDQo+ICsgIEludmFsaWRhdGVzIHRoZSBlbnRp cmUgaW5zdHJ1Y3Rpb24gY2FjaGUgaW4gY2FjaGUgY29oZXJlbmN5IGRvbWFpbiBvZiB0aGUNCj4g DQo+ICsgIGNhbGxpbmcgQ1BVLg0KPiANCj4gKw0KPiANCj4gKyoqLw0KPiANCj4gK1ZPSUQNCj4g DQo+ICtFRklBUEkNCj4gDQo+ICtJbnZhbGlkYXRlSW5zdHJ1Y3Rpb25DYWNoZSAoDQo+IA0KPiAr ICBWT0lEDQo+IA0KPiArICApDQo+IA0KPiArew0KPiANCj4gKyAgQXNtSW5zdHJ1Y3Rpb25CYXJy aWVyTG9vbmdBcmNoICgpOw0KPiANCj4gK30NCj4gDQo+ICsNCj4gDQo+ICsvKioNCj4gDQo+ICsg IEludmFsaWRhdGVzIGEgcmFuZ2Ugb2YgaW5zdHJ1Y3Rpb24gY2FjaGUgbGluZXMgaW4gdGhlIGNh Y2hlIGNvaGVyZW5jeSBkb21haW4NCj4gDQo+ICsgIG9mIHRoZSBjYWxsaW5nIENQVS4NCj4gDQo+ ICsNCj4gDQo+ICsgIEludmFsaWRhdGVzIHRoZSBpbnN0cnVjdGlvbiBjYWNoZSBsaW5lcyBzcGVj aWZpZWQgYnkgQWRkcmVzcyBhbmQgTGVuZ3RoLiBJZg0KPiANCj4gKyAgQWRkcmVzcyBpcyBub3Qg YWxpZ25lZCBvbiBhIGNhY2hlIGxpbmUgYm91bmRhcnksIHRoZW4gZW50aXJlIGluc3RydWN0aW9u DQo+IA0KPiArICBjYWNoZSBsaW5lIGNvbnRhaW5pbmcgQWRkcmVzcyBpcyBpbnZhbGlkYXRlZC4g SWYgQWRkcmVzcyArIExlbmd0aCBpcyBub3QNCj4gDQo+ICsgIGFsaWduZWQgb24gYSBjYWNoZSBs aW5lIGJvdW5kYXJ5LCB0aGVuIHRoZSBlbnRpcmUgaW5zdHJ1Y3Rpb24gY2FjaGUgbGluZQ0KPiAN Cj4gKyAgY29udGFpbmluZyBBZGRyZXNzICsgTGVuZ3RoIC0xIGlzIGludmFsaWRhdGVkLiBUaGlz IGZ1bmN0aW9uIG1heSBjaG9vc2UgdG8NCj4gDQo+ICsgIGludmFsaWRhdGUgdGhlIGVudGlyZSBp bnN0cnVjdGlvbiBjYWNoZSBpZiB0aGF0IGlzIG1vcmUgZWZmaWNpZW50IHRoYW4NCj4gDQo+ICsg IGludmFsaWRhdGluZyB0aGUgc3BlY2lmaWVkIHJhbmdlLiBJZiBMZW5ndGggaXMgMCwgdGhlIG5v IGluc3RydWN0aW9uIGNhY2hlDQo+IA0KPiArICBsaW5lcyBhcmUgaW52YWxpZGF0ZWQuIEFkZHJl c3MgaXMgcmV0dXJuZWQuDQo+IA0KPiArDQo+IA0KPiArICBJZiBMZW5ndGggaXMgZ3JlYXRlciB0 aGFuIChNQVhfQUREUkVTUyAtIEFkZHJlc3MgKyAxKSwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+ICsN Cj4gDQo+ICsgIEBwYXJhbVtpbl0gIEFkZHJlc3MgVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgaW5z dHJ1Y3Rpb24gY2FjaGUgbGluZXMgdG8NCj4gDQo+ICsgICAgICAgICAgICAgICAgICBpbnZhbGlk YXRlLiBJZiB0aGUgQ1BVIGlzIGluIGEgcGh5c2ljYWwgYWRkcmVzc2luZyBtb2RlLCB0aGVuDQo+ IA0KPiArICAgICAgICAgICAgICAgICAgQWRkcmVzcyBpcyBhIHBoeXNpY2FsIGFkZHJlc3MuIElm IHRoZSBDUFUgaXMgaW4gYSB2aXJ0dWFsDQo+IA0KPiArICAgICAgICAgICAgICAgICAgYWRkcmVz c2luZyBtb2RlLCB0aGVuIEFkZHJlc3MgaXMgYSB2aXJ0dWFsIGFkZHJlc3MuDQo+IA0KPiArDQo+ IA0KPiArICBAcGFyYW1baW5dICBMZW5ndGggIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gaW52YWxp ZGF0ZSBmcm9tIHRoZSBpbnN0cnVjdGlvbiBjYWNoZS4NCj4gDQo+ICsNCj4gDQo+ICsgIEByZXR1 cm4gQWRkcmVzcy4NCj4gDQo+ICsNCj4gDQo+ICsqKi8NCj4gDQo+ICtWT0lEICoNCj4gDQo+ICtF RklBUEkNCj4gDQo+ICtJbnZhbGlkYXRlSW5zdHJ1Y3Rpb25DYWNoZVJhbmdlICgNCj4gDQo+ICsg IElOICAgICAgIFZPSUQgICAqQWRkcmVzcywNCj4gDQo+ICsgIElOICAgICAgIFVJTlROICBMZW5n dGgNCj4gDQo+ICsgICkNCj4gDQo+ICt7DQo+IA0KPiArICBBc21JbnN0cnVjdGlvbkJhcnJpZXJM b29uZ0FyY2ggKCk7DQo+IA0KPiArICByZXR1cm4gQWRkcmVzczsNCj4gDQo+ICt9DQo+IA0KPiAr DQo+IA0KPiArLyoqDQo+IA0KPiArICBXcml0ZXMgQmFjayBhbmQgSW52YWxpZGF0ZXMgdGhlIGVu dGlyZSBkYXRhIGNhY2hlIGluIGNhY2hlIGNvaGVyZW5jeSBkb21haW4NCj4gDQo+ICsgIG9mIHRo ZSBjYWxsaW5nIENQVS4NCj4gDQo+ICsNCj4gDQo+ICsgIFdyaXRlcyBCYWNrIGFuZCBJbnZhbGlk YXRlcyB0aGUgZW50aXJlIGRhdGEgY2FjaGUgaW4gY2FjaGUgY29oZXJlbmN5IGRvbWFpbg0KPiAN Cj4gKyAgb2YgdGhlIGNhbGxpbmcgQ1BVLiBUaGlzIGZ1bmN0aW9uIGd1YXJhbnRlZXMgdGhhdCBh bGwgZGlydHkgY2FjaGUgbGluZXMgYXJlDQo+IA0KPiArICB3cml0dGVuIGJhY2sgdG8gc3lzdGVt IG1lbW9yeSwgYW5kIGFsc28gaW52YWxpZGF0ZXMgYWxsIHRoZSBkYXRhIGNhY2hlIGxpbmVzDQo+ IA0KPiArICBpbiB0aGUgY2FjaGUgY29oZXJlbmN5IGRvbWFpbiBvZiB0aGUgY2FsbGluZyBDUFUu DQo+IA0KPiArDQo+IA0KPiArKiovDQo+IA0KPiArVk9JRA0KPiANCj4gK0VGSUFQSQ0KPiANCj4g K1dyaXRlQmFja0ludmFsaWRhdGVEYXRhQ2FjaGUgKA0KPiANCj4gKyAgVk9JRA0KPiANCj4gKyAg KQ0KPiANCj4gK3sNCj4gDQo+ICsgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTogTm90IGN1cnJl bnRseSBpbXBsZW1lbnRlZCBvbiBMb29uZ0FyY2guXG4iLCBfX0ZVTkNUSU9OX18pKTsNCj4gDQo+ ICt9DQo+IA0KPiArDQo+IA0KPiArLyoqDQo+IA0KPiArICBXcml0ZXMgQmFjayBhbmQgSW52YWxp ZGF0ZXMgYSByYW5nZSBvZiBkYXRhIGNhY2hlIGxpbmVzIGluIHRoZSBjYWNoZQ0KPiANCj4gKyAg Y29oZXJlbmN5IGRvbWFpbiBvZiB0aGUgY2FsbGluZyBDUFUuDQo+IA0KPiArDQo+IA0KPiArICBX cml0ZXMgQmFjayBhbmQgSW52YWxpZGF0ZSB0aGUgZGF0YSBjYWNoZSBsaW5lcyBzcGVjaWZpZWQg YnkgQWRkcmVzcyBhbmQNCj4gDQo+ICsgIExlbmd0aC4gSWYgQWRkcmVzcyBpcyBub3QgYWxpZ25l ZCBvbiBhIGNhY2hlIGxpbmUgYm91bmRhcnksIHRoZW4gZW50aXJlIGRhdGENCj4gDQo+ICsgIGNh Y2hlIGxpbmUgY29udGFpbmluZyBBZGRyZXNzIGlzIHdyaXR0ZW4gYmFjayBhbmQgaW52YWxpZGF0 ZWQuIElmIEFkZHJlc3MgKw0KPiANCj4gKyAgTGVuZ3RoIGlzIG5vdCBhbGlnbmVkIG9uIGEgY2Fj aGUgbGluZSBib3VuZGFyeSwgdGhlbiB0aGUgZW50aXJlIGRhdGEgY2FjaGUNCj4gDQo+ICsgIGxp bmUgY29udGFpbmluZyBBZGRyZXNzICsgTGVuZ3RoIC0xIGlzIHdyaXR0ZW4gYmFjayBhbmQgaW52 YWxpZGF0ZWQuIFRoaXMNCj4gDQo+ICsgIGZ1bmN0aW9uIG1heSBjaG9vc2UgdG8gd3JpdGUgYmFj ayBhbmQgaW52YWxpZGF0ZSB0aGUgZW50aXJlIGRhdGEgY2FjaGUgaWYNCj4gDQo+ICsgIHRoYXQg aXMgbW9yZSBlZmZpY2llbnQgdGhhbiB3cml0aW5nIGJhY2sgYW5kIGludmFsaWRhdGluZyB0aGUg c3BlY2lmaWVkDQo+IA0KPiArICByYW5nZS4gSWYgTGVuZ3RoIGlzIDAsIHRoZSBubyBkYXRhIGNh Y2hlIGxpbmVzIGFyZSB3cml0dGVuIGJhY2sgYW5kDQo+IA0KPiArICBpbnZhbGlkYXRlZC4gQWRk cmVzcyBpcyByZXR1cm5lZC4NCj4gDQo+ICsNCj4gDQo+ICsgIElmIExlbmd0aCBpcyBncmVhdGVy IHRoYW4gKE1BWF9BRERSRVNTIC0gQWRkcmVzcyArIDEpLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4g Kw0KPiANCj4gKyAgQHBhcmFtW2luXSAgQWRkcmVzcyBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBk YXRhIGNhY2hlIGxpbmVzIHRvIHdyaXRlIGJhY2sgYW5kDQo+IA0KPiArICAgICAgICAgICAgICAg ICAgaW52YWxpZGF0ZS4gSWYgdGhlIENQVSBpcyBpbiBhIHBoeXNpY2FsIGFkZHJlc3NpbmcgbW9k ZSwgdGhlbg0KPiANCj4gKyAgICAgICAgICAgICAgICAgIEFkZHJlc3MgaXMgYSBwaHlzaWNhbCBh ZGRyZXNzLiBJZiB0aGUgQ1BVIGlzIGluIGEgdmlydHVhbA0KPiANCj4gKyAgICAgICAgICAgICAg ICAgIGFkZHJlc3NpbmcgbW9kZSwgdGhlbiBBZGRyZXNzIGlzIGEgdmlydHVhbCBhZGRyZXNzLg0K PiANCj4gKyAgQHBhcmFtW2luXSAgTGVuZ3RoICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRl IGJhY2sgYW5kIGludmFsaWRhdGUgZnJvbSB0aGUNCj4gDQo+ICsgICAgICAgICAgICAgICAgICBk YXRhIGNhY2hlLg0KPiANCj4gKw0KPiANCj4gKyAgQHJldHVybiBBZGRyZXNzIG9mIGNhY2hlIGlu dmFsaWRhdGlvbi4NCj4gDQo+ICsNCj4gDQo+ICsqKi8NCj4gDQo+ICtWT0lEICoNCj4gDQo+ICtF RklBUEkNCj4gDQo+ICtXcml0ZUJhY2tJbnZhbGlkYXRlRGF0YUNhY2hlUmFuZ2UgKA0KPiANCj4g KyAgSU4gICAgICBWT0lEICAgKkFkZHJlc3MsDQo+IA0KPiArICBJTiAgICAgIFVJTlROICBMZW5n dGgNCj4gDQo+ICsgICkNCj4gDQo+ICt7DQo+IA0KPiArICBERUJVRyAoKERFQlVHX0VSUk9SLCAi JWE6IE5vdCBjdXJyZW50bHkgaW1wbGVtZW50ZWQgb24gTG9vbmdBcmNoLlxuIiwgX19GVU5DVElP Tl9fKSk7DQo+IA0KPiArICByZXR1cm4gQWRkcmVzczsNCj4gDQo+ICt9DQo+IA0KPiArDQo+IA0K PiArLyoqDQo+IA0KPiArICBXcml0ZXMgQmFjayB0aGUgZW50aXJlIGRhdGEgY2FjaGUgaW4gY2Fj aGUgY29oZXJlbmN5IGRvbWFpbiBvZiB0aGUgY2FsbGluZw0KPiANCj4gKyAgQ1BVLg0KPiANCj4g Kw0KPiANCj4gKyAgV3JpdGVzIEJhY2sgdGhlIGVudGlyZSBkYXRhIGNhY2hlIGluIGNhY2hlIGNv aGVyZW5jeSBkb21haW4gb2YgdGhlIGNhbGxpbmcNCj4gDQo+ICsgIENQVS4gVGhpcyBmdW5jdGlv biBndWFyYW50ZWVzIHRoYXQgYWxsIGRpcnR5IGNhY2hlIGxpbmVzIGFyZSB3cml0dGVuIGJhY2sg dG8NCj4gDQo+ICsgIHN5c3RlbSBtZW1vcnkuIFRoaXMgZnVuY3Rpb24gbWF5IGFsc28gaW52YWxp ZGF0ZSBhbGwgdGhlIGRhdGEgY2FjaGUgbGluZXMgaW4NCj4gDQo+ICsgIHRoZSBjYWNoZSBjb2hl cmVuY3kgZG9tYWluIG9mIHRoZSBjYWxsaW5nIENQVS4NCj4gDQo+ICsNCj4gDQo+ICsqKi8NCj4g DQo+ICtWT0lEDQo+IA0KPiArRUZJQVBJDQo+IA0KPiArV3JpdGVCYWNrRGF0YUNhY2hlICgNCj4g DQo+ICsgIFZPSUQNCj4gDQo+ICsgICkNCj4gDQo+ICt7DQo+IA0KPiArICBXcml0ZUJhY2tJbnZh bGlkYXRlRGF0YUNhY2hlICgpOw0KPiANCj4gK30NCj4gDQo+ICsNCj4gDQo+ICsvKioNCj4gDQo+ ICsgIFdyaXRlcyBCYWNrIGEgcmFuZ2Ugb2YgZGF0YSBjYWNoZSBsaW5lcyBpbiB0aGUgY2FjaGUg Y29oZXJlbmN5IGRvbWFpbiBvZiB0aGUNCj4gDQo+ICsgIGNhbGxpbmcgQ1BVLg0KPiANCj4gKw0K PiANCj4gKyAgV3JpdGVzIEJhY2sgdGhlIGRhdGEgY2FjaGUgbGluZXMgc3BlY2lmaWVkIGJ5IEFk ZHJlc3MgYW5kIExlbmd0aC4gSWYgQWRkcmVzcw0KPiANCj4gKyAgaXMgbm90IGFsaWduZWQgb24g YSBjYWNoZSBsaW5lIGJvdW5kYXJ5LCB0aGVuIGVudGlyZSBkYXRhIGNhY2hlIGxpbmUNCj4gDQo+ ICsgIGNvbnRhaW5pbmcgQWRkcmVzcyBpcyB3cml0dGVuIGJhY2suIElmIEFkZHJlc3MgKyBMZW5n dGggaXMgbm90IGFsaWduZWQgb24gYQ0KPiANCj4gKyAgY2FjaGUgbGluZSBib3VuZGFyeSwgdGhl biB0aGUgZW50aXJlIGRhdGEgY2FjaGUgbGluZSBjb250YWluaW5nIEFkZHJlc3MgKw0KPiANCj4g KyAgTGVuZ3RoIC0xIGlzIHdyaXR0ZW4gYmFjay4gVGhpcyBmdW5jdGlvbiBtYXkgY2hvb3NlIHRv IHdyaXRlIGJhY2sgdGhlIGVudGlyZQ0KPiANCj4gKyAgZGF0YSBjYWNoZSBpZiB0aGF0IGlzIG1v cmUgZWZmaWNpZW50IHRoYW4gd3JpdGluZyBiYWNrIHRoZSBzcGVjaWZpZWQgcmFuZ2UuDQo+IA0K PiArICBJZiBMZW5ndGggaXMgMCwgdGhlIG5vIGRhdGEgY2FjaGUgbGluZXMgYXJlIHdyaXR0ZW4g YmFjay4gVGhpcyBmdW5jdGlvbiBtYXkNCj4gDQo+ICsgIGFsc28gaW52YWxpZGF0ZSBhbGwgdGhl IGRhdGEgY2FjaGUgbGluZXMgaW4gdGhlIHNwZWNpZmllZCByYW5nZSBvZiB0aGUgY2FjaGUNCj4g DQo+ICsgIGNvaGVyZW5jeSBkb21haW4gb2YgdGhlIGNhbGxpbmcgQ1BVLiBBZGRyZXNzIGlzIHJl dHVybmVkLg0KPiANCj4gKw0KPiANCj4gKyAgSWYgTGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiAoTUFY X0FERFJFU1MgLSBBZGRyZXNzICsgMSksIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiArDQo+IA0KPiAr ICBAcGFyYW1baW5dICBBZGRyZXNzIFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGRhdGEgY2FjaGUg bGluZXMgdG8gd3JpdGUgYmFjay4gSWYNCj4gDQo+ICsgICAgICAgICAgICAgICAgICB0aGUgQ1BV IGlzIGluIGEgcGh5c2ljYWwgYWRkcmVzc2luZyBtb2RlLCB0aGVuIEFkZHJlc3MgaXMgYQ0KPiAN Cj4gKyAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGFkZHJlc3MuIElmIHRoZSBDUFUgaXMgaW4g YSB2aXJ0dWFsIGFkZHJlc3NpbmcNCj4gDQo+ICsgICAgICAgICAgICAgICAgICBtb2RlLCB0aGVu IEFkZHJlc3MgaXMgYSB2aXJ0dWFsIGFkZHJlc3MuDQo+IA0KPiArICBAcGFyYW1baW5dICBMZW5n dGggIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUgYmFjayBmcm9tIHRoZSBkYXRhIGNhY2hl Lg0KPiANCj4gKw0KPiANCj4gKyAgQHJldHVybiBBZGRyZXNzIG9mIGNhY2hlIHdyaXR0ZW4gaW4g bWFpbiBtZW1vcnkuDQo+IA0KPiArDQo+IA0KPiArKiovDQo+IA0KPiArVk9JRCAqDQo+IA0KPiAr RUZJQVBJDQo+IA0KPiArV3JpdGVCYWNrRGF0YUNhY2hlUmFuZ2UgKA0KPiANCj4gKyAgSU4gICAg ICBWT0lEICAgKkFkZHJlc3MsDQo+IA0KPiArICBJTiAgICAgIFVJTlROICBMZW5ndGgNCj4gDQo+ ICsgICkNCj4gDQo+ICt7DQo+IA0KPiArICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6IE5vdCBj dXJyZW50bHkgaW1wbGVtZW50ZWQgb24gTG9vbmdBcmNoLlxuIiwgX19GVU5DVElPTl9fKSk7DQo+ IA0KPiArICByZXR1cm4gQWRkcmVzczsNCj4gDQo+ICt9DQo+IA0KPiArDQo+IA0KPiArLyoqDQo+ IA0KPiArICBJbnZhbGlkYXRlcyB0aGUgZW50aXJlIGRhdGEgY2FjaGUgaW4gY2FjaGUgY29oZXJl bmN5IGRvbWFpbiBvZiB0aGUgY2FsbGluZw0KPiANCj4gKyAgQ1BVLg0KPiANCj4gKw0KPiANCj4g KyAgSW52YWxpZGF0ZXMgdGhlIGVudGlyZSBkYXRhIGNhY2hlIGluIGNhY2hlIGNvaGVyZW5jeSBk b21haW4gb2YgdGhlIGNhbGxpbmcNCj4gDQo+ICsgIENQVS4gVGhpcyBmdW5jdGlvbiBtdXN0IGJl IHVzZWQgd2l0aCBjYXJlIGJlY2F1c2UgZGlydHkgY2FjaGUgbGluZXMgYXJlIG5vdA0KPiANCj4g KyAgd3JpdHRlbiBiYWNrIHRvIHN5c3RlbSBtZW1vcnkuIEl0IGlzIHR5cGljYWxseSB1c2VkIGZv ciBjYWNoZSBkaWFnbm9zdGljcy4gSWYNCj4gDQo+ICsgIHRoZSBDUFUgZG9lcyBub3Qgc3VwcG9y dCBpbnZhbGlkYXRpb24gb2YgdGhlIGVudGlyZSBkYXRhIGNhY2hlLCB0aGVuIGEgd3JpdGUNCj4g DQo+ICsgIGJhY2sgYW5kIGludmFsaWRhdGUgb3BlcmF0aW9uIHNob3VsZCBiZSBwZXJmb3JtZWQg b24gdGhlIGVudGlyZSBkYXRhIGNhY2hlLg0KPiANCj4gKw0KPiANCj4gKyoqLw0KPiANCj4gK1ZP SUQNCj4gDQo+ICtFRklBUEkNCj4gDQo+ICtJbnZhbGlkYXRlRGF0YUNhY2hlICgNCj4gDQo+ICsg IFZPSUQNCj4gDQo+ICsgICkNCj4gDQo+ICt7DQo+IA0KPiArICBBc21EYXRhQmFycmllckxvb25n QXJjaCAoKTsNCj4gDQo+ICt9DQo+IA0KPiArDQo+IA0KPiArLyoqDQo+IA0KPiArICBJbnZhbGlk YXRlcyBhIHJhbmdlIG9mIGRhdGEgY2FjaGUgbGluZXMgaW4gdGhlIGNhY2hlIGNvaGVyZW5jeSBk b21haW4gb2YgdGhlDQo+IA0KPiArICBjYWxsaW5nIENQVS4NCj4gDQo+ICsNCj4gDQo+ICsgIElu dmFsaWRhdGVzIHRoZSBkYXRhIGNhY2hlIGxpbmVzIHNwZWNpZmllZCBieSBBZGRyZXNzIGFuZCBM ZW5ndGguIElmIEFkZHJlc3MNCj4gDQo+ICsgIGlzIG5vdCBhbGlnbmVkIG9uIGEgY2FjaGUgbGlu ZSBib3VuZGFyeSwgdGhlbiBlbnRpcmUgZGF0YSBjYWNoZSBsaW5lDQo+IA0KPiArICBjb250YWlu aW5nIEFkZHJlc3MgaXMgaW52YWxpZGF0ZWQuIElmIEFkZHJlc3MgKyBMZW5ndGggaXMgbm90IGFs aWduZWQgb24gYQ0KPiANCj4gKyAgY2FjaGUgbGluZSBib3VuZGFyeSwgdGhlbiB0aGUgZW50aXJl IGRhdGEgY2FjaGUgbGluZSBjb250YWluaW5nIEFkZHJlc3MgKw0KPiANCj4gKyAgTGVuZ3RoIC0x IGlzIGludmFsaWRhdGVkLiBUaGlzIGZ1bmN0aW9uIG11c3QgbmV2ZXIgaW52YWxpZGF0ZSBhbnkg Y2FjaGUgbGluZXMNCj4gDQo+ICsgIG91dHNpZGUgdGhlIHNwZWNpZmllZCByYW5nZS4gSWYgTGVu Z3RoIGlzIDAsIHRoZSBubyBkYXRhIGNhY2hlIGxpbmVzIGFyZQ0KPiANCj4gKyAgaW52YWxpZGF0 ZWQuIEFkZHJlc3MgaXMgcmV0dXJuZWQuIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSB1c2VkIHdpdGgg Y2FyZQ0KPiANCj4gKyAgYmVjYXVzZSBkaXJ0eSBjYWNoZSBsaW5lcyBhcmUgbm90IHdyaXR0ZW4g YmFjayB0byBzeXN0ZW0gbWVtb3J5LiBJdCBpcw0KPiANCj4gKyAgdHlwaWNhbGx5IHVzZWQgZm9y IGNhY2hlIGRpYWdub3N0aWNzLiBJZiB0aGUgQ1BVIGRvZXMgbm90IHN1cHBvcnQNCj4gDQo+ICsg IGludmFsaWRhdGlvbiBvZiBhIGRhdGEgY2FjaGUgcmFuZ2UsIHRoZW4gYSB3cml0ZSBiYWNrIGFu ZCBpbnZhbGlkYXRlDQo+IA0KPiArICBvcGVyYXRpb24gc2hvdWxkIGJlIHBlcmZvcm1lZCBvbiB0 aGUgZGF0YSBjYWNoZSByYW5nZS4NCj4gDQo+ICsNCj4gDQo+ICsgIElmIExlbmd0aCBpcyBncmVh dGVyIHRoYW4gKE1BWF9BRERSRVNTIC0gQWRkcmVzcyArIDEpLCB0aGVuIEFTU0VSVCgpLg0KPiAN Cj4gKw0KPiANCj4gKyAgQHBhcmFtW2luXSAgQWRkcmVzcyBUaGUgYmFzZSBhZGRyZXNzIG9mIHRo ZSBkYXRhIGNhY2hlIGxpbmVzIHRvIGludmFsaWRhdGUuIElmDQo+IA0KPiArICAgICAgICAgICAg ICAgICAgdGhlIENQVSBpcyBpbiBhIHBoeXNpY2FsIGFkZHJlc3NpbmcgbW9kZSwgdGhlbiBBZGRy ZXNzIGlzIGENCj4gDQo+ICsgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBhZGRyZXNzLiBJZiB0 aGUgQ1BVIGlzIGluIGEgdmlydHVhbCBhZGRyZXNzaW5nIG1vZGUsDQo+IA0KPiArICAgICAgICAg ICAgICAgICAgdGhlbiBBZGRyZXNzIGlzIGEgdmlydHVhbCBhZGRyZXNzLg0KPiANCj4gKyAgQHBh cmFtW2luXSAgTGVuZ3RoICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGludmFsaWRhdGUgZnJvbSB0 aGUgZGF0YSBjYWNoZS4NCj4gDQo+ICsNCj4gDQo+ICsgIEByZXR1cm4gQWRkcmVzcy4NCj4gDQo+ ICsNCj4gDQo+ICsqKi8NCj4gDQo+ICtWT0lEICoNCj4gDQo+ICtFRklBUEkNCj4gDQo+ICtJbnZh bGlkYXRlRGF0YUNhY2hlUmFuZ2UgKA0KPiANCj4gKyAgSU4gICAgICBWT0lEICAgKkFkZHJlc3Ms DQo+IA0KPiArICBJTiAgICAgIFVJTlROICBMZW5ndGgNCj4gDQo+ICsgICkNCj4gDQo+ICt7DQo+ IA0KPiArICBBc21EYXRhQmFycmllckxvb25nQXJjaCAoKTsNCj4gDQo+ICsgIHJldHVybiBBZGRy ZXNzOw0KPiANCj4gK30NCj4gDQo+IC0tDQo+IDIuMjcuMA0KDQo=