From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mx.groups.io with SMTP id smtpd.web09.9037.1663948207329276424 for ; Fri, 23 Sep 2022 08:50:07 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=gO23ZLjL; spf=pass (domain: intel.com, ip: 192.55.52.88, 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=1663948207; x=1695484207; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=KgKTZo54Aj+qCXXCeguemTLNFXzL2LBVww+zGDNmkN8=; b=gO23ZLjLdD7/KNMXLTvVg1PuOhZRBonpYzrjXV/S9bywDCx3eOpMA0VA GDFpao/xg3JuCpzXekVvWSfPx4huSNi7zjlfwIWIwy0eOQPFsS+IfQxsM 0SZgOZ+hea0nOPXTav0lFTBtdI94TP50rhcBMLrNUrrwNrjPcsiO5bxzy DLZkpXbsiCsbg8Shc/LRMxKjLjVgB6G+AQJZC1Bm31GFAE+tPLJXUCNNS hwmH4Ee/Erq/Dl8XHgF23pboIcghg5CX19VyyoPRerDVdO5W6IXbgONoL Yg24hQcscHIMVPD9hzgf9/GLckd+3/x2nCF7XQV1GCrzJghK/PYlMRnap Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10479"; a="326949541" X-IronPort-AV: E=Sophos;i="5.93,339,1654585200"; d="scan'208";a="326949541" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Sep 2022 08:50:07 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,339,1654585200"; d="scan'208";a="724167661" Received: from orsmsx601.amr.corp.intel.com ([10.22.229.14]) by fmsmga002.fm.intel.com with ESMTP; 23 Sep 2022 08:50:06 -0700 Received: from orsmsx601.amr.corp.intel.com (10.22.229.14) by ORSMSX601.amr.corp.intel.com (10.22.229.14) 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:50:06 -0700 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by orsmsx601.amr.corp.intel.com (10.22.229.14) 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:50:06 -0700 Received: from NAM02-SN1-obe.outbound.protection.outlook.com (104.47.57.47) by edgegateway.intel.com (134.134.137.100) 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:50:06 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=b2BdZ8v5GjcJ1ZX9ibhck2Ee2MQ6H0t7u/YTTriNPdSDeh+yAUETYE6FLIDbS7LRlHM80KQATGKmLNNGuOD2G2bjniSwyWwvmGEZ9lnSV1ND0EX5aGOa7S45dJ0JDKHqY/vbLyhnlqkIPgl33bG1AvXQDgBsFYoID8cSQTOgtgm9AreWUZeBzQ6yIw6KNJwi1nRSBIr+/LCIDgdnZvqCs+VITp+759TEBkS4OVifyfgXmt9lBveK6kfbzBdUBdOJFsH10dvrot31G9m66zFOrtWCDJr508InW4yi36uJFbvbT6X1ojCR30zUzxMJ2eoCA81ADprrYeBCJna4RIlunQ== 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=KgKTZo54Aj+qCXXCeguemTLNFXzL2LBVww+zGDNmkN8=; b=EiCocVl6lqb7jS5qYsxoVo+hNzTzeb9k9EHWc5JuWy0xlSqHfl8pXCfmH2c1zJAb/iJbjeJu9CcoxlNIq+/nut1XtBU6pGeYwY36ypIrRjWerKpHNdtGl8o1htBFbeT8o8FhqJgj7JxqLbdgxdhnA8wUn7Fxalg+WKTBiDlldZfVo7gGJtIAK9VR7yEuTuUHJOyfNeuWGISseOF9XN1fU659ioxPkt2lRAdRd59HB1OnQ/t1TNMELCAC/heoPsm5BlYCLc2pBR2riUVsEqcCUjvlhC0fyuaWiSbAwzNvalL7Fe87UL451bcRYyDouUaH4z5mNGkgrNeccPxdwxS2DA== 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 CH0PR11MB5345.namprd11.prod.outlook.com (2603:10b6:610:b8::22) 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:50:03 +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:50:03 +0000 From: "Michael D Kinney" To: Chao Li , "devel@edk2.groups.io" , "Kinney, Michael D" CC: "Gao, Liming" , "Liu, Zhiguang" , Baoqi Zhang Subject: Re: [PATCH v2 26/34] MdePkg/BasePeCoff: Add LoongArch PE/Coff related code. Thread-Topic: [PATCH v2 26/34] MdePkg/BasePeCoff: Add LoongArch PE/Coff related code. Thread-Index: AQHYyB446OC7YpKF0UuIRPAxHzAoYa3tOAGg Date: Fri, 23 Sep 2022 15:50:03 +0000 Message-ID: References: <20220914094131.3697140-1-lichao@loongson.cn> In-Reply-To: <20220914094131.3697140-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_|CH0PR11MB5345:EE_ x-ms-office365-filtering-correlation-id: 857a9f83-ffe8-4ed7-26d4-08da9d7b4774 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: 2W0xZ6k7jRaDPyVtguRzXAxpC1MVJEQeYlJh4CUKBKveGh/g2h+urcddmYwQCb6TLIH5opauhtgbfHcRPNUwc9IvMP8RBqDDq6SvQnGTXgrKRkosB1XHpPusP6mrq8jMsHKnJ4PWNbQW/QC6b950v2uviyZFI8gcupdS49ssM2GsfiIOiHH2S0ThXUwT8ssRcy7cT0MIX+Il23rJWhu6DbLSZtwi7ugcY6DnJbM2hj35Jn9SxeHZnC2Jl/QK6HYMEYaaR3q85lE93ol2HlUg1Yrg2xx2lnbUhH7Gx3bq0SWjjUzB2S0YiW5OVg009QuBm/2YSGg1y06UnQA2IDQDE4hzgWnytc8raIOqaWOWgkpKzIqkJrjiTS54OxD56gIZZMOHKmfz325Yvg37XwLVW0BnoOORqEs+hTE3J17sRG/aiMRw1CrzMrncV0c8suWiRnBYpXg2BqgOyFKSOybGoPPnDsx/meNEjir7ypAAjrMBNzftdasZOk2xb0q+o8/c6Zwvr7MIUj3SkYK5N46tUU2yNGcCncIsJiDxFtwBmcaM9Nh5Chesvsk/94IhBPEH+fRWT0zzzy0yDFHqT5vSYN0xywMQl+qqE+kftTxXOw0CRLBB8rewIgFeOmVIddwQk+QZc/gJR9d9VkDzz9yM96d5x+5TpF9Q8kVdzhDmQZL7RKcy7Q62VS0n5aDOoms8nhGBUl4uE4MR86130p029f03uVdoXlKKDCCyuEEitlP5Wlgfhpa3zX0ybDUrFJUkkO+iWUfh8psuakjzYMOFqU6jpgWb0mmPqJFSxLXEtlE= 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)(6029001)(136003)(376002)(396003)(39860400002)(346002)(366004)(451199015)(66446008)(4326008)(8936002)(82960400001)(66476007)(66556008)(76116006)(66946007)(64756008)(38100700002)(122000001)(86362001)(33656002)(38070700005)(2906002)(52536014)(5660300002)(53546011)(9686003)(26005)(6506007)(83380400001)(55016003)(71200400001)(7696005)(478600001)(110136005)(966005)(8676002)(41300700001)(186003)(54906003)(316002);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?TXRmdForMytqbGhtMVpRc3FUMkdId1VVM1VSV0xyVEEzMmxseFJFaDVxTWlV?= =?utf-8?B?VVZPcjFLUkJEaDh6Njk3NklUT05iZm9SNVdzcTUvM0tIOWd3a09JQjdaM1JJ?= =?utf-8?B?QjF3UDUxdE5xZXUySDRlYVhaMHJYYjBUZGNJYXo3Q3paTGs4UzFyMUdmNFkx?= =?utf-8?B?Q0dabTVVSlRRVFI3L0MrVllwTGdqYXV4cUQ0dmdmRkZ1ZlV3YWJIeDh2MTlx?= =?utf-8?B?dkhEY3VNVXNxajVnLzN4NWhQQWZtQjFrd1dPUnhsRmFvK2RtV1FBaGhPMzBT?= =?utf-8?B?SDRnVlNJZ2RaSWVIYk5JN2hOY3NqaG5HVHEram9WZWlxVExhcUMzTFZvbCs1?= =?utf-8?B?dGdUcXNzTTdYV1VnMmJOUDVOQ1JKRlo0TlkxMVVKaXZNdGhUdVpOQW5WR1R5?= =?utf-8?B?R0drMTBHQ09qTGlzN0tsdTliTGNzQ21qMVQveWp5d3RFcy9QZHBmUmZTN210?= =?utf-8?B?dHdFLzJOOXBVbVlhd1lxUjZLME9ySmllZmhqNUEzWGpFOEZRenNaVUpBRzJj?= =?utf-8?B?VUt2Y1ppWGFqaEZubm1NT1c3OWd3OTAraktVM053RHNYSVpTUmpmYnNDZXBR?= =?utf-8?B?MndxMHlwQ1JKaTJYR3RKa2xuZ1oyWm5nMFdxM1Z3RUJOVnNEanRqbXVYS0Fi?= =?utf-8?B?d1prVXBuR1RLQ0ZDS0dVdERTRUFrYVV4amxnaENyaXBydHMrVkI5VWNxSHo4?= =?utf-8?B?Q1VhNWg2Nm10bnlpZ0pBU09FeVdHOGNqbGNlQzE2UXh6VkV4UnhvdDhxZUtQ?= =?utf-8?B?cjlOR3NMNU1xeHp1OUZZQlliaVd0ckg5bUdwLzlWMWY0T2dqMmM3MmZtc2Ro?= =?utf-8?B?aEo3NWNwMFFkbjdtd0E4ZkZ1UjVuNU5GNXh1ZmtkTkRINWxwMThXTXlTbXVq?= =?utf-8?B?d3VGMEEvTkJ4SEpFR1NwRStldk1uZU44ai9MTC9ZdU1qWWh0OVlSbnlwZUdC?= =?utf-8?B?aUZSSlBkU0xUaFpEWnh0YkRVS2w3em90OGhWWGJ4bHlXTmQwZjZHOG1NNXh2?= =?utf-8?B?cnkweExQcUNQSDNYQ1hlOExLN1FrSUFnSGFnWVo4U1JwTzN2bnJaQ0VUWHg0?= =?utf-8?B?S3BiY3hsUXhwbXNyM0V1bnduRDE4clBwdHdjc243RmJ2WmROdkVsN1pIREVi?= =?utf-8?B?YkZRcVpqSXlLdFNBL0ZJTUNuYzVuczFTbXVNbnI4Rkk1dEVhUzFmUHgxRWYx?= =?utf-8?B?Um1seVRDWUppQmlMWnJiNk91cXVUdXNuMTBiRWt1M3h1RTgrVjBnRTFlcnZF?= =?utf-8?B?Vk5UamR0bytkVHcwZkIxUXFhelFiT0tlM0tmdWgvUi9jS040aTJWUVBwZWxt?= =?utf-8?B?OGVnVlpsa25JMC9lTlphc2tFc2RKVmlPSWpyUDlsbHc1aG0rVWhtb2xEYVNu?= =?utf-8?B?RFVad0NNbFdpTDA1MFFPY2NIZzRlaHhnTXVSeXFCWlo5UnBXZjBxTzIzWVRp?= =?utf-8?B?Ly9pWmZuVzBkQzEwM1hFREFnZU5LYjlTWXhkdHdVNXR2VVdqaUlsaDhhMlhE?= =?utf-8?B?OE9PS1ZQYk84SXFFQVp2dDlDWkpTSUswd0gxbWgraUdTdDNyYWVicVlNelh2?= =?utf-8?B?L0VJM1lLbVlXenBST3BnMnlkcElIZGRrY0JocFN2a3dESEFKWVZKczJZNHEw?= =?utf-8?B?b0NZT0J4NFpaR3RzYmloODczbmJMUS9ybFNhN1g5OXZrQngzeWJsM0FVQzE4?= =?utf-8?B?RWhqbnZHelYveGVWZ3lGTGNqMkVTUXdVTWI3RE9uK1FqUkZLM1JHQXI5L1Qz?= =?utf-8?B?Mmk3QUFuUzlLeE95ZnJkdkZDamlXTmpueVhZTkJSS2RMSklWc2l6ZHJBVlpz?= =?utf-8?B?RFNtUk9EY2pweU1zY2FLK1d0QkxVeXBFWkt6a1JCclZ1SWpnZFdGUG42Q2NN?= =?utf-8?B?NUhlZktGaHhQT2podXAzTURBaU1HUVc4VnltTWpwY0VhUFZiUmlOaG1VTURS?= =?utf-8?B?aG9yMTJCcHh6Y3BwV1pKNEVJTkJtcUYzdjJtdURlWkJ0NDEzZzJzN1kvTlRT?= =?utf-8?B?d3dyY0s2c2N0amFrcWdweHRoNW5pU1NUSEppUGE2RGRGeHM1RDhIZE5OaTFh?= =?utf-8?B?OXJmMjgzRllQTnNVMUgyTFNRU1l0dlQvNTFjTXE4aFhUZTFnL2lab1RhOXlt?= =?utf-8?B?RVB2eDU4eWg3QjE4QWNjSHFvZmdBYlBid1pXejNYb1M0QWNxT2crWThqalRv?= =?utf-8?B?b0E9PQ==?= 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: 857a9f83-ffe8-4ed7-26d4-08da9d7b4774 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Sep 2022 15:50:03.1054 (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: +L/IkRflmuAZDnb5SU+xvGmTKW+55EGnEC+nrqXDbeworn8B/6CU7DCsOrVpsF6c8HvtGCCSdOemUR0jXl5RD90r8L1NVcOrhEcxVvog5Sg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH0PR11MB5345 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 MiBBTQ0KPiBUbzogZGV2ZWxAZWRrMi5ncm91cHMuaW8NCj4gQ2M6IEtpbm5leSwgTWljaGFlbCBE IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47IEdhbywgTGltaW5nIDxnYW9saW1pbmdAYnlv c29mdC5jb20uY24+OyBMaXUsIFpoaWd1YW5nIDx6aGlndWFuZy5saXVAaW50ZWwuY29tPjsNCj4g QmFvcWkgWmhhbmcgPHpoYW5nYmFvcWlAbG9vbmdzb24uY24+DQo+IFN1YmplY3Q6IFtQQVRDSCB2 MiAyNi8zNF0gTWRlUGtnL0Jhc2VQZUNvZmY6IEFkZCBMb29uZ0FyY2ggUEUvQ29mZiByZWxhdGVk IGNvZGUuDQo+IA0KPiBSRUY6IGh0dHBzOi8vYnVnemlsbGEudGlhbm9jb3JlLm9yZy9zaG93X2J1 Zy5jZ2k/aWQ9NDA1Mw0KPiANCj4gQWRkIExvb25nQXJjaCBpbWFnZSByZWxvY2F0aW9uLg0KPiAN Cj4gQ2M6IE1pY2hhZWwgRCBLaW5uZXkgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPg0KPiBD YzogTGltaW5nIEdhbyA8Z2FvbGltaW5nQGJ5b3NvZnQuY29tLmNuPg0KPiBDYzogWmhpZ3Vhbmcg TGl1IDx6aGlndWFuZy5saXVAaW50ZWwuY29tPg0KPiANCj4gU2lnbmVkLW9mZi1ieTogQ2hhbyBM aSA8bGljaGFvQGxvb25nc29uLmNuPg0KPiBDby1hdXRob3JlZC1ieTogQmFvcWkgWmhhbmcgPHpo YW5nYmFvcWlAbG9vbmdzb24uY24+DQo+IC0tLQ0KPiAgTWRlUGtnL0xpYnJhcnkvQmFzZVBlQ29m ZkxpYi9CYXNlUGVDb2ZmLmMgICAgIHwgICAzICstDQo+ICAuLi4vTGlicmFyeS9CYXNlUGVDb2Zm TGliL0Jhc2VQZUNvZmZMaWIuaW5mICAgfCAgIDUgKw0KPiAgLi4uL0xpYnJhcnkvQmFzZVBlQ29m ZkxpYi9CYXNlUGVDb2ZmTGliLnVuaSAgIHwgICAyICsNCj4gIC4uLi9CYXNlUGVDb2ZmTGliL0xv b25nQXJjaC9QZUNvZmZMb2FkZXJFeC5jICB8IDEzNyArKysrKysrKysrKysrKysrKysNCj4gIDQg ZmlsZXMgY2hhbmdlZCwgMTQ2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkNCj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBNZGVQa2cvTGlicmFyeS9CYXNlUGVDb2ZmTGliL0xvb25nQXJjaC9QZUNv ZmZMb2FkZXJFeC5jDQo+IA0KPiBkaWZmIC0tZ2l0IGEvTWRlUGtnL0xpYnJhcnkvQmFzZVBlQ29m ZkxpYi9CYXNlUGVDb2ZmLmMgYi9NZGVQa2cvTGlicmFyeS9CYXNlUGVDb2ZmTGliL0Jhc2VQZUNv ZmYuYw0KPiBpbmRleCA2ZDhkOWZhZWI4Li45N2E4YWFmOGM3IDEwMDY0NA0KPiAtLS0gYS9NZGVQ a2cvTGlicmFyeS9CYXNlUGVDb2ZmTGliL0Jhc2VQZUNvZmYuYw0KPiArKysgYi9NZGVQa2cvTGli cmFyeS9CYXNlUGVDb2ZmTGliL0Jhc2VQZUNvZmYuYw0KPiBAQCAtMSw2ICsxLDYgQEANCj4gIC8q KiBAZmlsZQ0KPiANCj4gICAgQmFzZSBQRS9DT0ZGIGxvYWRlciBzdXBwb3J0cyBsb2FkaW5nIGFu eSBQRTMyL1BFMzIrIG9yIFRFIGltYWdlLCBidXQNCj4gDQo+IC0gIG9ubHkgc3VwcG9ydHMgcmVs b2NhdGluZyBJQTMyLCB4NjQsIElQRiwgQVJNLCBSSVNDLVYgYW5kIEVCQyBpbWFnZXMuDQo+IA0K PiArICBvbmx5IHN1cHBvcnRzIHJlbG9jYXRpbmcgSUEzMiwgeDY0LCBJUEYsIEFSTSwgUklTQy1W LCBMb29uZ0FyY2ggYW5kIEVCQyBpbWFnZXMuDQo+IA0KPiANCj4gDQo+ICAgIENhdXRpb246IFRo aXMgZmlsZSByZXF1aXJlcyBhZGRpdGlvbmFsIHJldmlldyB3aGVuIG1vZGlmaWVkLg0KPiANCj4g ICAgVGhpcyBsaWJyYXJ5IHdpbGwgaGF2ZSBleHRlcm5hbCBpbnB1dCAtIFBFL0NPRkYgaW1hZ2Uu DQo+IA0KPiBAQCAtMTgsNiArMTgsNyBAQA0KPiAgICBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDE5 LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+IA0KPiAgICBQ b3J0aW9ucyBjb3B5cmlnaHQgKGMpIDIwMDggLSAyMDA5LCBBcHBsZSBJbmMuIEFsbCByaWdodHMg cmVzZXJ2ZWQuPEJSPg0KPiANCj4gICAgUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDIwLCBIZXds ZXR0IFBhY2thcmQgRW50ZXJwcmlzZSBEZXZlbG9wbWVudCBMUC4gQWxsIHJpZ2h0cyByZXNlcnZl ZC48QlI+DQo+IA0KPiArICBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMjIsIExvb25nc29uIFRl Y2hub2xvZ3kgQ29ycG9yYXRpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ IA0KPiAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiAN Cj4gDQo+IA0KPiAgKiovDQo+IA0KPiBkaWZmIC0tZ2l0IGEvTWRlUGtnL0xpYnJhcnkvQmFzZVBl Q29mZkxpYi9CYXNlUGVDb2ZmTGliLmluZiBiL01kZVBrZy9MaWJyYXJ5L0Jhc2VQZUNvZmZMaWIv QmFzZVBlQ29mZkxpYi5pbmYNCj4gaW5kZXggMTEwYjZkNWEwOS4uM2I4YjhlYjE5MSAxMDA2NDQN Cj4gLS0tIGEvTWRlUGtnL0xpYnJhcnkvQmFzZVBlQ29mZkxpYi9CYXNlUGVDb2ZmTGliLmluZg0K PiArKysgYi9NZGVQa2cvTGlicmFyeS9CYXNlUGVDb2ZmTGliL0Jhc2VQZUNvZmZMaWIuaW5mDQo+ IEBAIC00LDYgKzQsNyBAQA0KPiAgIyAgVGhlIElBMzIgdmVyc2lvbiBsaWJyYXJ5IHN1cHBvcnQg bG9hZGluZyBJQTMyLCBYNjQgYW5kIEVCQyBQRS9DT0ZGIGltYWdlcy4NCj4gDQo+ICAjICBUaGUg WDY0IHZlcnNpb24gbGlicmFyeSBzdXBwb3J0IGxvYWRpbmcgSUEzMiwgWDY0IGFuZCBFQkMgUEUv Q09GRiBpbWFnZXMuDQo+IA0KPiAgIyAgVGhlIFJJU0MtViB2ZXJzaW9uIGxpYnJhcnkgc3VwcG9y dCBsb2FkaW5nIFJJU0MtViBpbWFnZXMuDQo+IA0KPiArIyAgVGhlIExvb25nQXJjaCB2ZXJzaW9u IGxpYnJhcnkgc3VwcG9ydCBsb2FkaW5nIExvb25nQXJjaCBpbWFnZXMuDQo+IA0KPiAgIw0KPiAN Cj4gICMgIENhdXRpb246IFRoaXMgbW9kdWxlIHJlcXVpcmVzIGFkZGl0aW9uYWwgcmV2aWV3IHdo ZW4gbW9kaWZpZWQuDQo+IA0KPiAgIyAgVGhpcyBsaWJyYXJ5IHdpbGwgaGF2ZSBleHRlcm5hbCBp bnB1dCAtIFBFL0NPRkYgaW1hZ2UuDQo+IA0KPiBAQCAtMTMsNiArMTQsNyBAQA0KPiAgIyAgQ29w eXJpZ2h0IChjKSAyMDA2IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVz ZXJ2ZWQuPEJSPg0KPiANCj4gICMgIFBvcnRpb25zIGNvcHlyaWdodCAoYykgMjAwOCAtIDIwMDks IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+IA0KPiAgIyAgUG9ydGlvbnMg Q29weXJpZ2h0IChjKSAyMDIwLCBIZXdsZXR0IFBhY2thcmQgRW50ZXJwcmlzZSBEZXZlbG9wbWVu dCBMUC4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+IA0KPiArIyAgUG9ydGlvbnMgQ29weXJp Z2h0IChjKSAyMDIyLCBMb29uZ3NvbiBUZWNobm9sb2d5IENvcnBvcmF0aW9uIExpbWl0ZWQuIEFs bCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiANCj4gICMNCj4gDQo+ICAjICBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiANCj4gICMNCj4gDQo+IEBAIC00Niw2 ICs0OCw5IEBADQo+ICBbU291cmNlcy5SSVNDVjY0XQ0KPiANCj4gICAgUmlzY1YvUGVDb2ZmTG9h ZGVyRXguYw0KPiANCj4gDQo+IA0KPiArW1NvdXJjZXMuTE9PTkdBUkNINjRdDQo+IA0KPiArICBM b29uZ0FyY2gvUGVDb2ZmTG9hZGVyRXguYw0KPiANCj4gKw0KPiANCj4gIFtQYWNrYWdlc10NCj4g DQo+ICAgIE1kZVBrZy9NZGVQa2cuZGVjDQo+IA0KPiANCj4gDQo+IGRpZmYgLS1naXQgYS9NZGVQ a2cvTGlicmFyeS9CYXNlUGVDb2ZmTGliL0Jhc2VQZUNvZmZMaWIudW5pIGIvTWRlUGtnL0xpYnJh cnkvQmFzZVBlQ29mZkxpYi9CYXNlUGVDb2ZmTGliLnVuaQ0KPiBpbmRleCA1NTQxNzAyOWYyLi4x ZjczMTM0NGUxIDEwMDY0NA0KPiAtLS0gYS9NZGVQa2cvTGlicmFyeS9CYXNlUGVDb2ZmTGliL0Jh c2VQZUNvZmZMaWIudW5pDQo+ICsrKyBiL01kZVBrZy9MaWJyYXJ5L0Jhc2VQZUNvZmZMaWIvQmFz ZVBlQ29mZkxpYi51bmkNCj4gQEAgLTUsNiArNSw3IEBADQo+ICAvLyBUaGUgSUEzMiB2ZXJzaW9u IGxpYnJhcnkgc3VwcG9ydCBsb2FkaW5nIElBMzIsIFg2NCBhbmQgRUJDIFBFL0NPRkYgaW1hZ2Vz Lg0KPiANCj4gIC8vIFRoZSBYNjQgdmVyc2lvbiBsaWJyYXJ5IHN1cHBvcnQgbG9hZGluZyBJQTMy LCBYNjQgYW5kIEVCQyBQRS9DT0ZGIGltYWdlcy4NCj4gDQo+ICAvLyBUaGUgUklTQy1WIHZlcnNp b24gbGlicmFyeSBzdXBwb3J0IGxvYWRpbmcgUklTQy1WMzIgYW5kIFJJU0MtVjY0IFBFL0NPRkYg aW1hZ2VzLg0KPiANCj4gKy8vIFRoZSBMb29uZ0FyY2ggdmVyc2lvbiBsaWJyYXJ5IHN1cHBvcnQg bG9hZGluZyBMb29uZ0FyY2gzMiBhbmQgTG9vbmdBcmNoNjQgUEUvQ09GRiBpbWFnZXMuDQo+IA0K PiAgLy8NCj4gDQo+ICAvLyBDYXV0aW9uOiBUaGlzIG1vZHVsZSByZXF1aXJlcyBhZGRpdGlvbmFs IHJldmlldyB3aGVuIG1vZGlmaWVkLg0KPiANCj4gIC8vIFRoaXMgbGlicmFyeSB3aWxsIGhhdmUg ZXh0ZXJuYWwgaW5wdXQgLSBQRS9DT0ZGIGltYWdlLg0KPiANCj4gQEAgLTE0LDYgKzE1LDcgQEAN Cj4gIC8vIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwg cmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gDQo+ICAvLyBQb3J0aW9ucyBjb3B5cmlnaHQgKGMpIDIw MDggLSAyMDA5LCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiANCj4gIC8v IFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAyMCwgSGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2Ug RGV2ZWxvcG1lbnQgTFAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiANCj4gKy8vIFBvcnRp b25zIENvcHlyaWdodCAoYykgMjAyMiwgTG9vbmdzb24gVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiBM aW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gDQo+ICAvLw0KPiANCj4gIC8vIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+IA0KPiAgLy8NCj4g DQo+IGRpZmYgLS1naXQgYS9NZGVQa2cvTGlicmFyeS9CYXNlUGVDb2ZmTGliL0xvb25nQXJjaC9Q ZUNvZmZMb2FkZXJFeC5jIGIvTWRlUGtnL0xpYnJhcnkvQmFzZVBlQ29mZkxpYi9Mb29uZ0FyY2gv UGVDb2ZmTG9hZGVyRXguYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAw MDAwLi40MTcwOTZmMzM0DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvTWRlUGtnL0xpYnJhcnkv QmFzZVBlQ29mZkxpYi9Mb29uZ0FyY2gvUGVDb2ZmTG9hZGVyRXguYw0KPiBAQCAtMCwwICsxLDEz NyBAQA0KPiArLyoqIEBmaWxlDQo+IA0KPiArICBQRS9Db2ZmIGxvYWRlciBmb3IgTG9vbmdBcmNo IFBFIGltYWdlDQo+IA0KPiArDQo+IA0KPiArICBDb3B5cmlnaHQgKGMpIDIwMjIsIExvb25nc29u IFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+ DQo+IA0KPiArDQo+IA0KPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNl LVBhdGVudA0KPiANCj4gKyoqLw0KPiANCj4gKw0KPiANCj4gKyNpbmNsdWRlICJCYXNlUGVDb2Zm TGliSW50ZXJuYWxzLmgiDQo+IA0KPiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5oPg0KPiAN Cj4gKw0KPiANCj4gKy8qKg0KPiANCj4gKyAgUGVyZm9ybXMgYW4gTG9vbmdBcmNoIHNwZWNpZmlj IHJlbG9jYXRpb24gZml4dXAgYW5kIGlzIGEgbm8tb3Agb24gb3RoZXINCj4gDQo+ICsgIGluc3Ry dWN0aW9uIHNldHMuDQo+IA0KPiArDQo+IA0KPiArICBAcGFyYW1baW5dICAgICAgIFJlbG9jICAg ICAgIFBvaW50ZXIgdG8gdGhlIHJlbG9jYXRpb24gcmVjb3JkLg0KPiANCj4gKyAgQHBhcmFtW2lu LCBvdXRdICBGaXh1cCAgICAgICBQb2ludGVyIHRvIHRoZSBhZGRyZXNzIHRvIGZpeCB1cC4NCj4g DQo+ICsgIEBwYXJhbVtpbiwgb3V0XSAgRml4dXBEYXRhICAgUG9pbnRlciB0byBhIGJ1ZmZlciB0 byBsb2cgdGhlIGZpeHVwcy4NCj4gDQo+ICsgIEBwYXJhbVtpbl0gICAgICAgQWRqdXN0ICAgICAg VGhlIG9mZnNldCB0byBhZGp1c3QgdGhlIGZpeHVwLg0KPiANCj4gKw0KPiANCj4gKyAgQHJldHVy biBTdGF0dXMgY29kZS4NCj4gDQo+ICsNCj4gDQo+ICsqKi8NCj4gDQo+ICtSRVRVUk5fU1RBVFVT DQo+IA0KPiArUGVDb2ZmTG9hZGVyUmVsb2NhdGVJbWFnZUV4ICgNCj4gDQo+ICsgIElOIFVJTlQx NiAgICAgKlJlbG9jLA0KPiANCj4gKyAgSU4gT1VUIENIQVI4ICAqRml4dXAsDQo+IA0KPiArICBJ TiBPVVQgQ0hBUjggICoqRml4dXBEYXRhLA0KPiANCj4gKyAgSU4gVUlOVDY0ICAgICBBZGp1c3QN Cj4gDQo+ICsgICkNCj4gDQo+ICt7DQo+IA0KPiArICBVSU5UOCAgIFJlbG9jVHlwZTsNCj4gDQo+ ICsgIFVJTlQ2NCAgVmFsdWU7DQo+IA0KPiArICBVSU5UNjQgIFRtcDE7DQo+IA0KPiArICBVSU5U NjQgIFRtcDI7DQo+IA0KPiArDQo+IA0KPiArICBSZWxvY1R5cGUgPSAoKlJlbG9jKSA+PiAxMjsN Cj4gDQo+ICsgIFZhbHVlICAgICA9IDA7DQo+IA0KPiArICBUbXAxICAgICAgPSAwOw0KPiANCj4g KyAgVG1wMiAgICAgID0gMDsNCj4gDQo+ICsNCj4gDQo+ICsgIHN3aXRjaCAoUmVsb2NUeXBlKSB7 DQo+IA0KPiArICAgIGNhc2UgRUZJX0lNQUdFX1JFTF9CQVNFRF9MT09OR0FSQ0g2NF9NQVJLX0xB Og0KPiANCj4gKyAgICAgIC8vIFRoZSBuZXh0IGZvdXIgaW5zdHJ1Y3Rpb25zIGFyZSB1c2VkIHRv IGxvYWQgYSA2NCBiaXQgYWRkcmVzcywgcmVsb2NhdGUgYWxsIG9mIHRoZW0NCj4gDQo+ICsgICAg ICBWYWx1ZSA9ICgqKFVJTlQzMiAqKUZpeHVwICYgMHgxZmZmZmUwKSA8PCA3IHwgICAgICAgLy8g bHUxMmkudyAyMGJpdHMgZnJvbSBiaXQ1DQo+IA0KPiArICAgICAgICAgICAgICAoKigoVUlOVDMy ICopRml4dXAgKyAxKSAmIDB4M2ZmYzAwKSA+PiAxMDsgIC8vIG9yaSAgICAgMTJiaXRzIGZyb20g Yml0MTANCj4gDQo+ICsgICAgICBUbXAxICAgPSAqKChVSU5UMzIgKilGaXh1cCArIDIpICYgMHgx ZmZmZmUwOyAgICAgICAgLy8gbHUzMmkuZCAyMGJpdHMgZnJvbSBiaXQ1DQo+IA0KPiArICAgICAg VG1wMiAgID0gKigoVUlOVDMyICopRml4dXAgKyAzKSAmIDB4M2ZmYzAwOyAgICAgICAgIC8vIGx1 NTJpLmQgMTJiaXRzIGZyb20gYml0MTANCj4gDQo+ICsgICAgICBWYWx1ZSAgPSBWYWx1ZSB8IChU bXAxIDw8IDI3KSB8IChUbXAyIDw8IDQyKTsNCj4gDQo+ICsgICAgICBWYWx1ZSArPSBBZGp1c3Q7 DQo+IA0KPiArDQo+IA0KPiArICAgICAgKihVSU5UMzIgKilGaXh1cCA9ICgqKFVJTlQzMiAqKUZp eHVwICYgfjB4MWZmZmZlMCkgfCAoKChWYWx1ZSA+PiAxMikgJiAweGZmZmZmKSA8PCA1KTsNCj4g DQo+ICsgICAgICBpZiAoKkZpeHVwRGF0YSAhPSBOVUxMKSB7DQo+IA0KPiArICAgICAgICAqRml4 dXBEYXRhICAgICAgICAgICAgICA9IEFMSUdOX1BPSU5URVIgKCpGaXh1cERhdGEsIHNpemVvZiAo VUlOVDMyKSk7DQo+IA0KPiArICAgICAgICAqKFVJTlQzMiAqKSgqRml4dXBEYXRhKSA9ICooVUlO VDMyICopRml4dXA7DQo+IA0KPiArICAgICAgICAqRml4dXBEYXRhICAgICAgICAgICAgICA9ICpG aXh1cERhdGEgKyBzaXplb2YgKFVJTlQzMik7DQo+IA0KPiArICAgICAgfQ0KPiANCj4gKw0KPiAN Cj4gKyAgICAgIEZpeHVwICAgICAgICAgICArPSBzaXplb2YgKFVJTlQzMik7DQo+IA0KPiArICAg ICAgKihVSU5UMzIgKilGaXh1cCA9ICgqKFVJTlQzMiAqKUZpeHVwICYgfjB4M2ZmYzAwKSB8ICgo VmFsdWUgJiAweGZmZikgPDwgMTApOw0KPiANCj4gKyAgICAgIGlmICgqRml4dXBEYXRhICE9IE5V TEwpIHsNCj4gDQo+ICsgICAgICAgICpGaXh1cERhdGEgICAgICAgICAgICAgID0gQUxJR05fUE9J TlRFUiAoKkZpeHVwRGF0YSwgc2l6ZW9mIChVSU5UMzIpKTsNCj4gDQo+ICsgICAgICAgICooVUlO VDMyICopKCpGaXh1cERhdGEpID0gKihVSU5UMzIgKilGaXh1cDsNCj4gDQo+ICsgICAgICAgICpG aXh1cERhdGEgICAgICAgICAgICAgID0gKkZpeHVwRGF0YSArIHNpemVvZiAoVUlOVDMyKTsNCj4g DQo+ICsgICAgICB9DQo+IA0KPiArDQo+IA0KPiArICAgICAgRml4dXAgICAgICAgICAgICs9IHNp emVvZiAoVUlOVDMyKTsNCj4gDQo+ICsgICAgICAqKFVJTlQzMiAqKUZpeHVwID0gKCooVUlOVDMy ICopRml4dXAgJiB+MHgxZmZmZmUwKSB8ICgoKFZhbHVlID4+IDMyKSAmIDB4ZmZmZmYpIDw8IDUp Ow0KPiANCj4gKyAgICAgIGlmICgqRml4dXBEYXRhICE9IE5VTEwpIHsNCj4gDQo+ICsgICAgICAg ICpGaXh1cERhdGEgICAgICAgICAgICAgID0gQUxJR05fUE9JTlRFUiAoKkZpeHVwRGF0YSwgc2l6 ZW9mIChVSU5UMzIpKTsNCj4gDQo+ICsgICAgICAgICooVUlOVDMyICopKCpGaXh1cERhdGEpID0g KihVSU5UMzIgKilGaXh1cDsNCj4gDQo+ICsgICAgICAgICpGaXh1cERhdGEgICAgICAgICAgICAg ID0gKkZpeHVwRGF0YSArIHNpemVvZiAoVUlOVDMyKTsNCj4gDQo+ICsgICAgICB9DQo+IA0KPiAr DQo+IA0KPiArICAgICAgRml4dXAgICAgICAgICAgICs9IHNpemVvZiAoVUlOVDMyKTsNCj4gDQo+ ICsgICAgICAqKFVJTlQzMiAqKUZpeHVwID0gKCooVUlOVDMyICopRml4dXAgJiB+MHgzZmZjMDAp IHwgKCgoVmFsdWUgPj4gNTIpICYgMHhmZmYpIDw8IDEwKTsNCj4gDQo+ICsgICAgICBpZiAoKkZp eHVwRGF0YSAhPSBOVUxMKSB7DQo+IA0KPiArICAgICAgICAqRml4dXBEYXRhICAgICAgICAgICAg ICA9IEFMSUdOX1BPSU5URVIgKCpGaXh1cERhdGEsIHNpemVvZiAoVUlOVDMyKSk7DQo+IA0KPiAr ICAgICAgICAqKFVJTlQzMiAqKSgqRml4dXBEYXRhKSA9ICooVUlOVDMyICopRml4dXA7DQo+IA0K PiArICAgICAgICAqRml4dXBEYXRhICAgICAgICAgICAgICA9ICpGaXh1cERhdGEgKyBzaXplb2Yg KFVJTlQzMik7DQo+IA0KPiArICAgICAgfQ0KPiANCj4gKw0KPiANCj4gKyAgICAgIGJyZWFrOw0K PiANCj4gKyAgICBkZWZhdWx0Og0KPiANCj4gKyAgICAgIHJldHVybiBSRVRVUk5fVU5TVVBQT1JU RUQ7DQo+IA0KPiArICB9DQo+IA0KPiArDQo+IA0KPiArICByZXR1cm4gUkVUVVJOX1NVQ0NFU1M7 DQo+IA0KPiArfQ0KPiANCj4gKw0KPiANCj4gKy8qKg0KPiANCj4gKyAgUmV0dXJucyBUUlVFIGlm IHRoZSBtYWNoaW5lIHR5cGUgb2YgUEUvQ09GRiBpbWFnZSBpcyBzdXBwb3J0ZWQuIFN1cHBvcnRl ZA0KPiANCj4gKyAgZG9lcyBub3QgbWVhbiB0aGUgaW1hZ2UgY2FuIGJlIGV4ZWN1dGVkIGl0IG1l YW5zIHRoZSBQRS9DT0ZGIGxvYWRlciBzdXBwb3J0cw0KPiANCj4gKyAgbG9hZGluZyBhbmQgcmVs b2NhdGluZyBvZiB0aGUgaW1hZ2UgdHlwZS4gSXQncyB1cCB0byB0aGUgY2FsbGVyIHRvIHN1cHBv cnQNCj4gDQo+ICsgIHRoZSBlbnRyeSBwb2ludC4NCj4gDQo+ICsNCj4gDQo+ICsgIEBwYXJhbVtp bl0gIE1hY2hpbmUgICBNYWNoaW5lIHR5cGUgZnJvbSB0aGUgUEUgSGVhZGVyLg0KPiANCj4gKw0K PiANCj4gKyAgQHJldHVybiBUUlVFIGlmIHRoaXMgUEUvQ09GRiBsb2FkZXIgY2FuIGxvYWQgdGhl IGltYWdlDQo+IA0KPiArDQo+IA0KPiArKiovDQo+IA0KPiArQk9PTEVBTg0KPiANCj4gK1BlQ29m ZkxvYWRlckltYWdlRm9ybWF0U3VwcG9ydGVkICgNCj4gDQo+ICsgIElOICBVSU5UMTYgIE1hY2hp bmUNCj4gDQo+ICsgICkNCj4gDQo+ICt7DQo+IA0KPiArICBpZiAoTWFjaGluZSA9PSBJTUFHRV9G SUxFX01BQ0hJTkVfTE9PTkdBUkNINjQpIHsNCj4gDQo+ICsgICAgcmV0dXJuIFRSVUU7DQo+IA0K PiArICB9DQo+IA0KPiArDQo+IA0KPiArICByZXR1cm4gRkFMU0U7DQo+IA0KPiArfQ0KPiANCj4g Kw0KPiANCj4gKy8qKg0KPiANCj4gKyAgUGVyZm9ybXMgYW4gTE9PTkdBUkNILWJhc2VkIHNwZWNp ZmljIHJlLXJlbG9jYXRpb24gZml4dXAgYW5kIGlzIGEgbm8tb3Agb24gb3RoZXINCj4gDQo+ICsg IGluc3RydWN0aW9uIHNldHMuIFRoaXMgaXMgdXNlZCB0byByZS1yZWxvY2F0ZWQgdGhlIGltYWdl IGludG8gdGhlIEVGSSB2aXJ0dWFsDQo+IA0KPiArICBzcGFjZSBmb3IgcnVudGltZSBjYWxscy4N Cj4gDQo+ICsNCj4gDQo+ICsgIEBwYXJhbVtpbl0gICAgICAgUmVsb2MgICAgICAgVGhlIHBvaW50 ZXIgdG8gdGhlIHJlbG9jYXRpb24gcmVjb3JkLg0KPiANCj4gKyAgQHBhcmFtW2luLCBvdXRdICBG aXh1cCAgICAgICBUaGUgcG9pbnRlciB0byB0aGUgYWRkcmVzcyB0byBmaXggdXAuDQo+IA0KPiAr ICBAcGFyYW1baW4sIG91dF0gIEZpeHVwRGF0YSAgIFRoZSBwb2ludGVyIHRvIGEgYnVmZmVyIHRv IGxvZyB0aGUgZml4dXBzLg0KPiANCj4gKyAgQHBhcmFtW2luXSAgICAgICBBZGp1c3QgICAgICBU aGUgb2Zmc2V0IHRvIGFkanVzdCB0aGUgZml4dXAuDQo+IA0KPiArDQo+IA0KPiArICBAcmV0dXJu IFN0YXR1cyBjb2RlLg0KPiANCj4gKw0KPiANCj4gKyoqLw0KPiANCj4gK1JFVFVSTl9TVEFUVVMN Cj4gDQo+ICtQZUhvdFJlbG9jYXRlSW1hZ2VFeCAoDQo+IA0KPiArICBJTiBVSU5UMTYgICAgICpS ZWxvYywNCj4gDQo+ICsgIElOIE9VVCBDSEFSOCAgKkZpeHVwLA0KPiANCj4gKyAgSU4gT1VUIENI QVI4ICAqKkZpeHVwRGF0YSwNCj4gDQo+ICsgIElOIFVJTlQ2NCAgICAgQWRqdXN0DQo+IA0KPiAr ICApDQo+IA0KPiArew0KPiANCj4gKyAgLy8gVG8gY2hlY2sNCj4gDQo+ICsgIHJldHVybiBQZUNv ZmZMb2FkZXJSZWxvY2F0ZUltYWdlRXggKFJlbG9jLCBGaXh1cCwgRml4dXBEYXRhLCBBZGp1c3Qp Ow0KPiANCj4gK30NCj4gDQo+IC0tDQo+IDIuMjcuMA0KDQo=