From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by mx.groups.io with SMTP id smtpd.web11.13202.1643501060776904482 for ; Sat, 29 Jan 2022 16:04:21 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=kkq34ypo; spf=pass (domain: intel.com, ip: 192.55.52.120, mailfrom: jiewen.yao@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643501060; x=1675037060; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=SVFalDrfPgp+WAg4htRcKKoGz3XfN3gfWCnluPd6TAc=; b=kkq34ypoHlmOzn7kLyg227LJT4mWs5zg6Mrp767/DSTl++bUa9BBzVxA nikbCY5fd5+VXuLRGqEIr0SAQ+a2cjEUx8Hcfj4mrDVfB3tKDUtXl8Jrz HWvYcvkebb5B80sITnW3RIYXwSHan2olh8P+rCaZt33Sh4HCkMuLnZ8HQ 7BL4x4U561M7XmcuBC5EsxcKMrKDlzuiXOWjcg6VynJ45cLyMamSRgyOP GefxMMYkshRfKmIR/YSz208631BL5KWRGL2eiIQAcgn6NFp5T1r4Dzs/c 6idJ7Pv+VUilfc4zQ/iur5XK8tvIT/f/Mzgylj4/loHQYzx5qVERzpUY7 w==; X-IronPort-AV: E=McAfee;i="6200,9189,10242"; a="246141473" X-IronPort-AV: E=Sophos;i="5.88,327,1635231600"; d="scan'208";a="246141473" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Jan 2022 16:04:19 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,327,1635231600"; d="scan'208";a="619047351" Received: from orsmsx601.amr.corp.intel.com ([10.22.229.14]) by FMSMGA003.fm.intel.com with ESMTP; 29 Jan 2022 16:04:19 -0800 Received: from orsmsx611.amr.corp.intel.com (10.22.229.24) 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.2308.20; Sat, 29 Jan 2022 16:04:19 -0800 Received: from orsmsx605.amr.corp.intel.com (10.22.229.18) by ORSMSX611.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Sat, 29 Jan 2022 16:04:18 -0800 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx605.amr.corp.intel.com (10.22.229.18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20 via Frontend Transport; Sat, 29 Jan 2022 16:04:18 -0800 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (104.47.66.46) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.20; Sat, 29 Jan 2022 16:04:18 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YH5kH2aJjbVev9W096Xo8dkUhecT29e3p9Kn0ylQZL3mddloYxS/VzAyyjCS51z1EFQ08cbABcYlJ9aARPFZLZ8xVrNv8Gh4XgSddi7pw141sqxTaVRWST7LocBLpsR5CYzIcEDm8+HlZVgQKyYdPBGPejOnymtAnkyPeDz6rGigGM7f8yw3EXplIsyx23S5wpimLT6v+7a4XU1c6ww+fiZAuK3BiQBVA0goKffW2tx5x9avlaFv20T24EyTHlP9k5v69VOj01TFpp9511yZDGJj78kZmIgbcJjCuAugh8GqFIC9SJZinAE+QGfKDZx1KA4ZbCHFBDPesKtMAVQPzg== 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=SVFalDrfPgp+WAg4htRcKKoGz3XfN3gfWCnluPd6TAc=; b=BGmk9FMe+MeCQM1Dbcffhzjpv4hu/n+ILmtTJL4IFcXKWZqUPw2/WtefJxsb7XLr0+VhaOVkKfLW0TIMfc1avo7VahSfyPvCPcKVHJPucELETzg6HcJFRMx8SPigj4yPTIERmDE3vkbWgWhASN4jQ620xlzuHps0GGNgCq6dB5eW2r9e0Jxk9KTCypGi4X8UCZVlIl7aVwoEFjdub1tULQqJHwntsA5EQJPQ6m8LfDg6TdMPdON8pjEdeWzRvR+83pXKeBa9ZxslgdcBVf0LxST8Mw1zNJkyc1L5T9MsN4KZsIlXsJuwx4ZLecLAQFQZwXjfNcpgf0Udisb9IIYt3g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none Received: from MW4PR11MB5872.namprd11.prod.outlook.com (2603:10b6:303:169::14) by BN7PR11MB2692.namprd11.prod.outlook.com (2603:10b6:406:aa::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4930.17; Sun, 30 Jan 2022 00:04:15 +0000 Received: from MW4PR11MB5872.namprd11.prod.outlook.com ([fe80::b8a9:e4f7:e037:771b]) by MW4PR11MB5872.namprd11.prod.outlook.com ([fe80::b8a9:e4f7:e037:771b%8]) with mapi id 15.20.4930.018; Sun, 30 Jan 2022 00:04:15 +0000 From: "Yao, Jiewen" To: "Li, Yi1" CC: "devel@edk2.groups.io" , "Wang, Jian J" , Xiaoyu Lu , "Jiang, Guomin" Subject: Re: [PATCH 2/2] CryptoPkg: Add BigNum NullLib Thread-Topic: [PATCH 2/2] CryptoPkg: Add BigNum NullLib Thread-Index: AQHYFVz4C708xwXxBEWdCd3rOjWTLKx6rxsh Date: Sun, 30 Jan 2022 00:04:15 +0000 Message-ID: <2453B62F-8856-4915-A6B4-7819F9B991C4@intel.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 825e9fb8-3b5e-44a2-b56e-08d9e3840d8d x-ms-traffictypediagnostic: BN7PR11MB2692:EE_ x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2512; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 7KNUz3CJ3pfcAalX6Ufit6ExSjM/gs9i0LCnO/QAAJNuPoN9IVrrMWkHs8vSJ2FwlxKnEP6Z1dAkT8/3w9jEtdF/l6Sl8VRuxFXMAqtyklCM+1KbLdjpD7VgmV5P88DNAmex/BUYbmpBWY4Do80vQUlb09omR73rxRH7KwDFLF51B0QRqlh5JS8PGSfG4O5uZF1og5cSnAnnqn71O0Z6YHrFcCggPrttZ43xgsqDkE1gn1zp2cEgfa6jWpiq4nx8C70lwqVJczvzbjGu/7me6o0fypAZhlcgJQRY21BwB5Qam/NScEvxRjoiN1o+FRDvKZM+1DdPwGDv8ynHtO4TA+Ru0grYFV523qZ/I97X3Gs2T3BjgUcfbNqJjeTAhNrwLUzM+Pk3gMhNpOwVsBf+MOFW/KtwqXPOkDRx1g2dgLFQytuaxEKf/Z+tnOn1JORW6Z2W/f8kjOUmWJHvaQmYg0oSwCqileiDpS5BrhY1tniB33ukRt253P6cDgoiLEke5cto5D6o4J0OMm/zCUl55dmGkATvneZkbJ7xGgS61Ir2fbzV3J5GAt5vb7FoU5KVp53jvGwtgOd5yVEyXH9pZvb7Uanqs+PDs7ykBZmQTsD/hsy7V1J+h/tqVoONXeG5L0jtmAhrwW0tUqfl8HMx/JzP3FTlaiGLOmvkfGiyDGsjXvIZJ5VADBrt2+Jllel9HCchT4cBjPER779LiEe5eYSMzo5uzWKPPl0SkvxKTa5Oo/PgRwNX/wmPBHegGpJcovk2TunqynnphgDCZBgVkLV9xi5zTP3JeI+l4pLztlk= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW4PR11MB5872.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(107886003)(2906002)(71200400001)(76116006)(2616005)(91956017)(6506007)(64756008)(66446008)(6512007)(4326008)(6862004)(66946007)(8676002)(66476007)(66556008)(30864003)(33656002)(5660300002)(8936002)(38070700005)(82960400001)(122000001)(26005)(37006003)(38100700002)(186003)(86362001)(508600001)(83380400001)(54906003)(316002)(6486002)(36756003)(6636002)(45980500001)(559001)(579004)(20210929001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?cHphMXhqcVV4bjA5ZTN4cS9lcTRrTVM0Qm1YL242SUh4TWNCNFh2WkdzalpC?= =?utf-8?B?c3U2QzRteCtVRlhwOHhvY0tHNlV6ZC9QSmtuY2txd21XcjBiN1Y4RjBEMUda?= =?utf-8?B?elFGTmgzOHBHb1pQQnJWT3lhWlZVbG1NTk5SOE8wbWR5d2xhU2YyVW1OQXgr?= =?utf-8?B?KzNZSkkyMVFqOFg5OXdvTWRTNEM0WERhbUN0bEs3SFJ2SktKNkVma011YWNP?= =?utf-8?B?blF3aVFXdVFUOGNsOTV6eWZrTjBKQmNWeGRWRndLbm5mTEx5Sm13MWpNQTF6?= =?utf-8?B?clJpZmk4YXZ1aU1KWnJ5ODl3a1I5cUFGdm1tbU9VZVgxTXA0cmdsMVdIeU9n?= =?utf-8?B?cUVidEFiVkNCbEh4WTNIblU3SmxKSlBOcHU4dncxQXRLWGlNVkJoaGZPZ2wy?= =?utf-8?B?V3NOK2czQ0lEN2ZzQjJ3LzZQUkdXNGlpazRQU2tIY2tZL2ZUbWNYSnhFSFpn?= =?utf-8?B?SUEzYTRqR280b0pXemIvVmJYaitSWm1VdEhublR6VG5ML3Z4WHE1NUhGbEtH?= =?utf-8?B?WHh4cmM0REt6V2ppR2swT1BqazBYZHFDWGJsc1grTlorVDhxNm5FVC9kcEd6?= =?utf-8?B?R25wbmw2NFNiUzMzOExUU3J4Sm1WcmF3SXd2L2svMzJONDFIbWxyenpBbnM0?= =?utf-8?B?c2RXeldWL3k4eTVScDlHODladHlBZ25qYjM5eXMwWlZ2TUlGMzZEb1ZiSENI?= =?utf-8?B?NFNIb0JnYjhzS3RoOXlQSFowUm0rWXZtVjBKWklIK1R5M2s5dS9lUWZGdDJG?= =?utf-8?B?aU9MdnU1dXhMcXpPU3dPbmx5L0RPM3ZrR3RKT2o3c1NoYTM3S0lmb3J0Zktr?= =?utf-8?B?Vk1mTHFPNExDQzFtQjVRbmdmVFc3TnNKN3VaM1d2cE1hYVg4ak1DcGNaUklO?= =?utf-8?B?Q0NZSDd2S0dNL2xFWFNoZk40ckU2TmpzUkVDZVRaY0UvK0JLWEtoZis0TEJH?= =?utf-8?B?Z2pNZVBhemY0d1NLMEllQmpzQTN0Wm01b3BOcUxvczRBeDBTajVXb0sxM0tI?= =?utf-8?B?SnF5SklqWnFDeHQ5QmtxNlNPUUVoNEtGTHlpWTkzMUhuNHVPbzY5WjlPT1pM?= =?utf-8?B?c2sya1A3dUpRVEx1dGtEQVlCUkRKcTZ3V25NN0RwcC84WmJOakJabmd5RXVD?= =?utf-8?B?YnpDLzlMTVdLeGRhdkRDaW1ycW5hNWZISnhSY2ExeFFMOHZvR2t0VEw3RVIx?= =?utf-8?B?dERVdzg2U3loc0VvZ2tHM1puWXRkeTIyL0ZxTytPU0drenZMVGIvQ3BXTFhY?= =?utf-8?B?SUN0UHIvVWxHUmdIUTc3dU95UE1xaU9BdmN2dHRqdGxWT0t3dVI3Z01JZHE3?= =?utf-8?B?TWd1SVlGWjkwck0vYlZUeHdWYXVBMVlCVGlZYm9hRExZUDZpR2J2YUJFTnRj?= =?utf-8?B?SDdXVUpTdU5IVC9BL05nanQ4TklSR2hPU0tWbXVqUitPTWl4TVNubGpHTldG?= =?utf-8?B?QVQydnQwVmpFZStlMXVBZi9COStYa1RMamNMNHRaYlE5Z3h0MHAyU2FlY1hI?= =?utf-8?B?TTRCTVF6cjBpbXFCYlo5OWRLY0lvaEc2RWxQS0ZVTDFSQU9DeWNVcWRRRlp2?= =?utf-8?B?Nk9ENzJVVEUwWGRybUVOS0xBMWVicTNDbmdGNCs4eTNqUVR2emlrQlV5VkJu?= =?utf-8?B?RDcvRzNlSG04OEhja3VhMGpaOGl5NkxvZi8xc2hzNWVoQ28wUVI5dXlGQy8z?= =?utf-8?B?eWhTRTRHa0l4R3NnOVZNclBTQ3hqWjdRempsZ0M2VlVleDhNSWpEVnNkNmo2?= =?utf-8?B?QTc1Q3ViYW5xemNqWWJzSitDU2cxUUVBME1SOTJtY2krQXk1RU9RNm03bnRv?= =?utf-8?B?dEJrMStkWVRFMWtpR2JqdGY4NHhyeTQrR0lOWW1wWklWZUlwckhicm5XMkVN?= =?utf-8?B?RnFLYXRSSjJ4N1R4alpMMlRlZ01vNnRrdS9NTTA0QmM0UmZ5Rm83a21ieXpv?= =?utf-8?B?Y2l2WnJ5cVBMMUV4TGtCQ1dqeGdtTEJhemhSdEp4S2hKYzI4Ukowdi9oQXdu?= =?utf-8?B?TS96b0hrblprbVNCR05XZ3BwMG9kN1diQU9SUnE5RmpKQVYzb1dZbGNaY08r?= =?utf-8?B?QnZpOWdTcFI5K1ZLNDVBdjNLU2ZkRzVKREVyUTNsbUZDSDF5enIzRGd5MjFa?= =?utf-8?B?OVNkbFVydVBKdXdiZUc1a1d3M05xaXZXZnpjSVBCMVk4OSs2am5nMGdJcG91?= =?utf-8?Q?bRWKnJxrVfbxQh0mRJfXQ/4=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW4PR11MB5872.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 825e9fb8-3b5e-44a2-b56e-08d9e3840d8d X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Jan 2022 00:04:15.1277 (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: 6hZOZUkcKaHC0C5sLxxfkeWjOsTT/eErexGSEwFy7/DawFO0pPkfBKuvWsO5mLufLiHEahbuHkU6q2iQ1wxW2g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN7PR11MB2692 Return-Path: jiewen.yao@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 dGhhbmsgeW91DQpzaW5jZSB5b3UgYXJlIHRhbGtpbmcgYWJvdXQgc2l6ZSBvcHRpbWl6YXRpb24s IHdvdWxkIHlvdSBwbGVhc2Ugc2hhcmUgdGhlIHJlc3VsdD8NCg0KdGhhbmsgeW91IQ0KWWFvLCBK aWV3ZW4NCg0KDQo+IOWcqCAyMDIy5bm0MeaciDMw5pel77yM5LiK5Y2INjoxMO+8jExpLCBZaTEg PHlpMS5saUBpbnRlbC5jb20+IOWGmemBk++8mg0KPiANCj4g77u/VGhpcyBwYXRjaCBpcyB1c2Vk IHRvIGFkZCBDcnlwdEJuTnVsbCBsaWJyYXJ5LCB3aGljaCBpcyB1c2VkIHRvDQo+IG9wdGltaXpl IGNvZGUgc2l6ZS4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IHlpMSBsaSA8eWkxLmxpQGludGVsLmNv bT4NCj4gDQo+IENjOiBKaWV3ZW4gWWFvIDxqaWV3ZW4ueWFvQGludGVsLmNvbT4NCj4gQ2M6IEpp YW4gSiBXYW5nIDxqaWFuLmoud2FuZ0BpbnRlbC5jb20+DQo+IENjOiBYaWFveXUgTHUgPHhpYW95 dXgubHVAaW50ZWwuY29tPg0KPiBDYzogR3VvbWluIEppYW5nIDxndW9taW4uamlhbmdAaW50ZWwu Y29tPg0KPiAtLS0NCj4gLi4uL0xpYnJhcnkvQmFzZUNyeXB0TGliL0JuL0NyeXB0Qm5OdWxsLmMg ICAgIHwgNTI1ICsrKysrKysrKysrKysrKysrKw0KPiAuLi4vTGlicmFyeS9CYXNlQ3J5cHRMaWIv UGVpQ3J5cHRMaWIuaW5mICAgICAgfCAgIDIgKy0NCj4gLi4uL0xpYnJhcnkvQmFzZUNyeXB0TGli L1NtbUNyeXB0TGliLmluZiAgICAgIHwgICAyICstDQo+IC4uLi9CYXNlQ3J5cHRMaWJOdWxsL0Jh c2VDcnlwdExpYk51bGwuaW5mICAgICB8ICAgMSArDQo+IC4uLi9MaWJyYXJ5L0Jhc2VDcnlwdExp Yk51bGwvQm4vQ3J5cHRCbk51bGwuYyB8IDUyNSArKysrKysrKysrKysrKysrKysNCj4gNSBmaWxl cyBjaGFuZ2VkLCAxMDUzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pDQo+IGNyZWF0ZSBt b2RlIDEwMDY0NCBDcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvQm4vQ3J5cHRCbk51bGwu Yw0KPiBjcmVhdGUgbW9kZSAxMDA2NDQgQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliTnVs bC9Cbi9DcnlwdEJuTnVsbC5jDQo+IA0KPiBkaWZmIC0tZ2l0IGEvQ3J5cHRvUGtnL0xpYnJhcnkv QmFzZUNyeXB0TGliL0JuL0NyeXB0Qm5OdWxsLmMgYi9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5 cHRMaWIvQm4vQ3J5cHRCbk51bGwuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAw MDAwMDAwMDAwMDAuLjlmMjIwYmE0MTA1OA0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL0NyeXB0 b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYi9Cbi9DcnlwdEJuTnVsbC5jDQo+IEBAIC0wLDAgKzEs NTI1IEBADQo+ICsvKiogQGZpbGUNCj4gKyAgQmlnIG51bWJlciBBUEkgaW1wbGVtZW50YXRpb24g YmFzZWQgb24gT3BlblNTTA0KPiArDQo+ICsgIENvcHlyaWdodCAoYykgMjAyMiwgSW50ZWwgQ29y cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArICBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiArDQo+ICsqKi8NCj4gKw0KPiArI2luY2x1 ZGUgPExpYnJhcnkvQmFzZUNyeXB0TGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xp Yi5oPg0KPiArDQo+ICsvKioNCj4gKyAgQWxsb2NhdGUgbmV3IEJpZyBOdW1iZXIuDQo+ICsNCj4g KyAgQHJldHZhbCBOZXcgQmlnTnVtIG9wYXF1ZSBzdHJ1Y3R1cmUgb3IgTlVMTCBvbiBmYWlsdXJl Lg0KPiArKiovDQo+ICtWT0lEICoNCj4gK0VGSUFQSQ0KPiArQmlnTnVtSW5pdCAoDQo+ICsgIFZP SUQNCj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIE5VTEw7 DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBBbGxvY2F0ZSBuZXcgQmlnIE51bWJlciBhbmQgYXNz aWduIHRoZSBwcm92aWRlZCB2YWx1ZSB0byBpdC4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgQnVm ICAgIEJpZyBlbmRpYW4gZW5jb2RlZCBidWZmZXIuDQo+ICsgIEBwYXJhbVtpbl0gICBMZW4gICAg QnVmZmVyIGxlbmd0aC4NCj4gKw0KPiArICBAcmV0dmFsIE5ldyBCaWdOdW0gb3BhcXVlIHN0cnVj dHVyZSBvciBOVUxMIG9uIGZhaWx1cmUuDQo+ICsqKi8NCj4gK1ZPSUQgKg0KPiArRUZJQVBJDQo+ ICtCaWdOdW1Gcm9tQmluICgNCj4gKyAgSU4gQ09OU1QgVUlOVDggICpCdWYsDQo+ICsgIElOIFVJ TlROICAgICAgICBMZW4NCj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAg cmV0dXJuIE5VTEw7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDb252ZXJ0IHRoZSBhYnNvbHV0 ZSB2YWx1ZSBvZiBCbiBpbnRvIGJpZy1lbmRpYW4gZm9ybSBhbmQgc3RvcmUgaXQgYXQgQnVmLg0K PiArICBUaGUgQnVmIGFycmF5IHNob3VsZCBoYXZlIGF0IGxlYXN0IEJpZ051bUJ5dGVzKCkgaW4g aXQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgIEJuICAgICBCaWcgbnVtYmVyIHRvIGNvbnZlcnQu DQo+ICsgIEBwYXJhbVtvdXRdICBCdWYgICAgT3V0cHV0IGJ1ZmZlci4NCj4gKw0KPiArICBAcmV0 dmFsIFRoZSBsZW5ndGggb2YgdGhlIGJpZy1lbmRpYW4gbnVtYmVyIHBsYWNlZCBhdCBCdWYgb3Ig LTEgb24gZXJyb3IuDQo+ICsqKi8NCj4gK0lOVE4NCj4gK0VGSUFQSQ0KPiArQmlnTnVtVG9CaW4g KA0KPiArICBJTiBWT0lEICAgICpCbiwNCj4gKyAgT1VUIFVJTlQ4ICAqQnVmDQo+ICsgICkNCj4g K3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiAtMTsNCj4gK30NCj4gKw0KPiAr LyoqDQo+ICsgIEZyZWUgdGhlIEJpZyBOdW1iZXIuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgIEJu ICAgICAgQmlnIG51bWJlciB0byBmcmVlLg0KPiArICBAcGFyYW1baW5dICAgQ2xlYXIgICBUUlVF IGlmIHRoZSBidWZmZXIgc2hvdWxkIGJlIGNsZWFyZWQuDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0VG SUFQSQ0KPiArQmlnTnVtRnJlZSAoDQo+ICsgIElOIFZPSUQgICAgICpCbiwNCj4gKyAgSU4gQk9P TEVBTiAgQ2xlYXINCj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gK30NCj4g Kw0KPiArLyoqDQo+ICsgIENhbGN1bGF0ZSB0aGUgc3VtIG9mIHR3byBCaWcgTnVtYmVycy4NCj4g KyAgUGxlYXNlIG5vdGUsIGFsbCAib3V0IiBCaWcgbnVtYmVyIGFyZ3VtZW50cyBzaG91bGQgYmUg cHJvcGVybHkgaW5pdGlhbGl6ZWQNCj4gKyAgYnkgY2FsbGluZyB0byBCaWdOdW1Jbml0KCkgb3Ig QmlnTnVtRnJvbUJpbigpIGZ1bmN0aW9ucy4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgQm5BICAg ICBCaWcgbnVtYmVyLg0KPiArICBAcGFyYW1baW5dICAgQm5CICAgICBCaWcgbnVtYmVyLg0KPiAr ICBAcGFyYW1bb3V0XSAgQm5SZXMgICBUaGUgcmVzdWx0IG9mIEJuQSArIEJuQi4NCj4gKw0KPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ICsgIEByZXR2YWwg RUZJX1BST1RPQ09MX0VSUk9SICAgT3RoZXJ3aXNlLg0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ ICtFRklBUEkNCj4gK0JpZ051bUFkZCAoDQo+ICsgIElOIENPTlNUIFZPSUQgICpCbkEsDQo+ICsg IElOIENPTlNUIFZPSUQgICpCbkIsDQo+ICsgIE9VVCBWT0lEICAgICAgICpCblJlcw0KPiArICAp DQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gRUZJX1VOU1VQUE9SVEVE Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgU3VidHJhY3QgdHdvIEJpZyBOdW1iZXJzLg0KPiAr ICBQbGVhc2Ugbm90ZSwgYWxsICJvdXQiIEJpZyBudW1iZXIgYXJndW1lbnRzIHNob3VsZCBiZSBw cm9wZXJseSBpbml0aWFsaXplZA0KPiArICBieSBjYWxsaW5nIHRvIEJpZ051bUluaXQoKSBvciBC aWdOdW1Gcm9tQmluKCkgZnVuY3Rpb25zLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICBCbkEgICAg IEJpZyBudW1iZXIuDQo+ICsgIEBwYXJhbVtpbl0gICBCbkIgICAgIEJpZyBudW1iZXIuDQo+ICsg IEBwYXJhbVtvdXRdICBCblJlcyAgIFRoZSByZXN1bHQgb2YgQm5BIC0gQm5CLg0KPiArDQo+ICsg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gKyAgQHJldHZhbCBF RklfUFJPVE9DT0xfRVJST1IgICBPdGhlcndpc2UuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4g K0VGSUFQSQ0KPiArQmlnTnVtU3ViICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuQSwNCj4gKyAg SU4gQ09OU1QgVk9JRCAgKkJuQiwNCj4gKyAgT1VUIFZPSUQgICAgICAgKkJuUmVzDQo+ICsgICkN Cj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7 DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDYWxjdWxhdGUgcmVtYWluZGVyOiBCblJlcyA9IEJu QSAlIEJuQi4NCj4gKyAgUGxlYXNlIG5vdGUsIGFsbCAib3V0IiBCaWcgbnVtYmVyIGFyZ3VtZW50 cyBzaG91bGQgYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQNCj4gKyAgYnkgY2FsbGluZyB0byBCaWdO dW1Jbml0KCkgb3IgQmlnTnVtRnJvbUJpbigpIGZ1bmN0aW9ucy4NCj4gKw0KPiArICBAcGFyYW1b aW5dICAgQm5BICAgICBCaWcgbnVtYmVyLg0KPiArICBAcGFyYW1baW5dICAgQm5CICAgICBCaWcg bnVtYmVyLg0KPiArICBAcGFyYW1bb3V0XSAgQm5SZXMgICBUaGUgcmVzdWx0IG9mIEJuQSAlIEJu Qi4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgSW4gY2FzZSBvZiBpbnRlcm5hbCBhbGxv Y2F0aW9uIGZhaWx1cmVzLg0KPiArICBAcmV0dmFsIEVGSV9QUk9UT0NPTF9FUlJPUiAgIE90aGVy d2lzZS4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtCaWdOdW1Nb2QgKA0K PiArICBJTiBDT05TVCBWT0lEICAqQm5BLA0KPiArICBJTiBDT05TVCBWT0lEICAqQm5CLA0KPiAr ICBPVVQgVk9JRCAgICAgICAqQm5SZXMNCj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNF KTsNCj4gKyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg IENvbXB1dGUgQm5BIHRvIHRoZSBCblAtdGggcG93ZXIgbW9kdWxvIEJuTS4NCj4gKyAgUGxlYXNl IG5vdGUsIGFsbCAib3V0IiBCaWcgbnVtYmVyIGFyZ3VtZW50cyBzaG91bGQgYmUgcHJvcGVybHkg aW5pdGlhbGl6ZWQuDQo+ICsgIGJ5IGNhbGxpbmcgdG8gQmlnTnVtSW5pdCgpIG9yIEJpZ051bUZy b21CaW4oKSBmdW5jdGlvbnMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgIEJuQSAgICAgQmlnIG51 bWJlci4NCj4gKyAgQHBhcmFtW2luXSAgIEJuUCAgICAgQmlnIG51bWJlciAocG93ZXIpLg0KPiAr ICBAcGFyYW1baW5dICAgQm5NICAgICBCaWcgbnVtYmVyIChtb2R1bG8pLg0KPiArICBAcGFyYW1b b3V0XSAgQm5SZXMgICBUaGUgcmVzdWx0IG9mIChCbkEgXiBCblApICUgQm5NLg0KPiArDQo+ICsg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gKyAgQHJldHZhbCBF RklfT1VUX09GX1JFU09VUkNFUyBJbiBjYXNlIG9mIGludGVybmFsIGFsbG9jYXRpb24gZmFpbHVy ZXMuDQo+ICsgIEByZXR2YWwgRUZJX1BST1RPQ09MX0VSUk9SICAgT3RoZXJ3aXNlLg0KPiArKiov DQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0JpZ051bUV4cE1vZCAoDQo+ICsgIElOIFZP SUQgICAqQm5BLA0KPiArICBJTiBWT0lEICAgKkJuUCwNCj4gKyAgSU4gVk9JRCAgICpCbk0sDQo+ ICsgIE9VVCBWT0lEICAqQm5SZXMNCj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsN Cj4gKyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENv bXB1dGUgQm5BIGludmVyc2UgbW9kdWxvIEJuTS4NCj4gKyAgUGxlYXNlIG5vdGUsIGFsbCAib3V0 IiBCaWcgbnVtYmVyIGFyZ3VtZW50cyBzaG91bGQgYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQNCj4g KyAgYnkgY2FsbGluZyB0byBCaWdOdW1Jbml0KCkgb3IgQmlnTnVtRnJvbUJpbigpIGZ1bmN0aW9u cy4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgQm5BICAgICBCaWcgbnVtYmVyLg0KPiArICBAcGFy YW1baW5dICAgQm5NICAgICBCaWcgbnVtYmVyIChtb2R1bG8pLg0KPiArICBAcGFyYW1bb3V0XSAg Qm5SZXMgICBUaGUgcmVzdWx0LCBzdWNoIHRoYXQgKEJuQSAqIEJuUmVzKSAlIEJuTSA9PSAxLg0K PiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gKyAg QHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyBJbiBjYXNlIG9mIGludGVybmFsIGFsbG9jYXRp b24gZmFpbHVyZXMuDQo+ICsgIEByZXR2YWwgRUZJX1BST1RPQ09MX0VSUk9SICAgT3RoZXJ3aXNl Lg0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0JpZ051bUludmVyc2VNb2Qg KA0KPiArICBJTiBDT05TVCBWT0lEICAqQm5BLA0KPiArICBJTiBDT05TVCBWT0lEICAqQm5NLA0K PiArICBPVVQgVk9JRCAgICAgICAqQm5SZXMNCj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZB TFNFKTsNCj4gKyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ ICsgIERpdmlkZSB0d28gQmlnIE51bWJlcnMuDQo+ICsgIFBsZWFzZSBub3RlLCBhbGwgIm91dCIg QmlnIG51bWJlciBhcmd1bWVudHMgc2hvdWxkIGJlIHByb3Blcmx5IGluaXRpYWxpemVkDQo+ICsg IGJ5IGNhbGxpbmcgdG8gQmlnTnVtSW5pdCgpIG9yIEJpZ051bUZyb21CaW4oKSBmdW5jdGlvbnMu DQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgIEJuQSAgICAgQmlnIG51bWJlci4NCj4gKyAgQHBhcmFt W2luXSAgIEJuTSAgICAgQmlnIG51bWJlciAobW9kdWxvKS4NCj4gKyAgQHBhcmFtW291dF0gIEJu UmVzICAgVGhlIHJlc3VsdCwgc3VjaCB0aGF0IEJuQSAvIEJuQi4NCj4gKw0KPiArICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ICsgIEByZXR2YWwgRUZJX09VVF9P Rl9SRVNPVVJDRVMgSW4gY2FzZSBvZiBpbnRlcm5hbCBhbGxvY2F0aW9uIGZhaWx1cmVzLg0KPiAr ICBAcmV0dmFsIEVGSV9QUk9UT0NPTF9FUlJPUiAgIE90aGVyd2lzZS4NCj4gKyoqLw0KPiArRUZJ X1NUQVRVUw0KPiArRUZJQVBJDQo+ICtCaWdOdW1EaXYgKA0KPiArICBJTiBDT05TVCBWT0lEICAq Qm5BLA0KPiArICBJTiBDT05TVCBWT0lEICAqQm5NLA0KPiArICBPVVQgVk9JRCAgICAgICAqQm5S ZXMNCj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIEVGSV9V TlNVUFBPUlRFRDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIE11bHRpcGx5IHR3byBCaWcgTnVt YmVycyBtb2R1bG8gQm5NLg0KPiArICBQbGVhc2Ugbm90ZSwgYWxsICJvdXQiIEJpZyBudW1iZXIg YXJndW1lbnRzIHNob3VsZCBiZSBwcm9wZXJseSBpbml0aWFsaXplZA0KPiArICBieSBjYWxsaW5n IHRvIEJpZ051bUluaXQoKSBvciBCaWdOdW1Gcm9tQmluKCkgZnVuY3Rpb25zLg0KPiArDQo+ICsg IEBwYXJhbVtpbl0gICBCbkEgICAgIEJpZyBudW1iZXIuDQo+ICsgIEBwYXJhbVtpbl0gICBCbkIg ICAgIEJpZyBudW1iZXIuDQo+ICsgIEBwYXJhbVtpbl0gICBCbk0gICAgIEJpZyBudW1iZXIgKG1v ZHVsbykuDQo+ICsgIEBwYXJhbVtvdXRdICBCblJlcyAgIFRoZSByZXN1bHQsIHN1Y2ggdGhhdCAo Qm5BICogQm5CKSAlIEJuTS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAg IE9uIHN1Y2Nlc3MuDQo+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgSW4gY2FzZSBv ZiBpbnRlcm5hbCBhbGxvY2F0aW9uIGZhaWx1cmVzLg0KPiArICBAcmV0dmFsIEVGSV9QUk9UT0NP TF9FUlJPUiAgIE90aGVyd2lzZS4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ ICtCaWdOdW1NdWxNb2QgKA0KPiArICBJTiBDT05TVCBWT0lEICAqQm5BLA0KPiArICBJTiBDT05T VCBWT0lEICAqQm5CLA0KPiArICBJTiBDT05TVCBWT0lEICAqQm5NLA0KPiArICBPVVQgVk9JRCAg ICAgICAqQm5SZXMNCj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0 dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENvbXBhcmUgdHdv IEJpZyBOdW1iZXJzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICBCbkEgICAgIEJpZyBudW1iZXIu DQo+ICsgIEBwYXJhbVtpbl0gICBCbkIgICAgIEJpZyBudW1iZXIuDQo+ICsNCj4gKyAgQHJldHZh bCAwICAgICAgICAgIEJuQSA9PSBCbkIuDQo+ICsgIEByZXR2YWwgMSAgICAgICAgICBCbkEgPiBC bkIuDQo+ICsgIEByZXR2YWwgLTEgICAgICAgICBCbkEgPCBCbkIuDQo+ICsqKi8NCj4gK0lOVE4N Cj4gK0VGSUFQSQ0KPiArQmlnTnVtQ21wICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuQSwNCj4g KyAgSU4gQ09OU1QgVk9JRCAgKkJuQg0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0Up Ow0KPiArICByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEdldCBudW1iZXIgb2Yg Yml0cyBpbiBCbi4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgQm4gICAgIEJpZyBudW1iZXIuDQo+ ICsNCj4gKyAgQHJldHZhbCBOdW1iZXIgb2YgYml0cy4NCj4gKyoqLw0KPiArVUlOVE4NCj4gK0VG SUFQSQ0KPiArQmlnTnVtQml0cyAoDQo+ICsgIElOIENPTlNUIFZPSUQgICpCbg0KPiArICApDQo+ ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiAr LyoqDQo+ICsgIEdldCBudW1iZXIgb2YgYnl0ZXMgaW4gQm4uDQo+ICsNCj4gKyAgQHBhcmFtW2lu XSAgIEJuICAgICBCaWcgbnVtYmVyLg0KPiArDQo+ICsgIEByZXR2YWwgTnVtYmVyIG9mIGJ5dGVz Lg0KPiArKiovDQo+ICtVSU5UTg0KPiArRUZJQVBJDQo+ICtCaWdOdW1CeXRlcyAoDQo+ICsgIElO IENPTlNUIFZPSUQgICpCbg0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiAr ICByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENoZWNrcyBpZiBCaWcgTnVtYmVy IGVxdWFscyB0byB0aGUgZ2l2ZW4gTnVtLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICBCbiAgICAg QmlnIG51bWJlci4NCj4gKyAgQHBhcmFtW2luXSAgIE51bSAgICBOdW1iZXIuDQo+ICsNCj4gKyAg QHJldHZhbCBUUlVFICAgaWZmIEJuID09IE51bS4NCj4gKyAgQHJldHZhbCBGQUxTRSAgb3RoZXJ3 aXNlLg0KPiArKiovDQo+ICtCT09MRUFODQo+ICtFRklBUEkNCj4gK0JpZ051bUlzV29yZCAoDQo+ ICsgIElOIENPTlNUIFZPSUQgICpCbiwNCj4gKyAgSU4gVUlOVE4gICAgICAgTnVtDQo+ICsgICkN Cj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiBGQUxTRTsNCj4gK30NCj4g Kw0KPiArLyoqDQo+ICsgIENoZWNrcyBpZiBCaWcgTnVtYmVyIGlzIG9kZC4NCj4gKw0KPiArICBA cGFyYW1baW5dICAgQm4gICAgIEJpZyBudW1iZXIuDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVFICAg Qm4gaXMgb2RkIChCbiAlIDIgPT0gMSkuDQo+ICsgIEByZXR2YWwgRkFMU0UgIG90aGVyd2lzZS4N Cj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJQVBJDQo+ICtCaWdOdW1Jc09kZCAoDQo+ICsgIElO IENPTlNUIFZPSUQgICpCbg0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiAr ICByZXR1cm4gRkFMU0U7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDb3B5IEJpZyBudW1iZXIu DQo+ICsNCj4gKyAgQHBhcmFtW291dF0gIEJuRHN0ICAgICBEZXN0aW5hdGlvbi4NCj4gKyAgQHBh cmFtW2luXSAgIEJuU3JjICAgICBTb3VyY2UuDQo+ICsNCj4gKyAgQHJldHZhbCBCbkRzdCBvbiBz dWNjZXNzLg0KPiArICBAcmV0dmFsIE5VTEwgb3RoZXJ3aXNlLg0KPiArKiovDQo+ICtWT0lEICoN Cj4gK0VGSUFQSQ0KPiArQmlnTnVtQ29weSAoDQo+ICsgIE9VVCBWT0lEICAgICAgICpCbkRzdCwN Cj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuU3JjDQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChG QUxTRSk7DQo+ICsgIHJldHVybiBOVUxMOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgR2V0IGNv bnN0YW50IEJpZyBudW1iZXIgd2l0aCB2YWx1ZSBvZiAiMSIuDQo+ICsgIFRoaXMgbWF5IGJlIHVz ZWQgdG8gc2F2ZSBleHBlbnNpdmUgYWxsb2NhdGlvbnMuDQo+ICsNCj4gKyAgQHJldHZhbCBCaWcg TnVtYmVyIHdpdGggdmFsdWUgb2YgMS4NCj4gKyoqLw0KPiArQ09OU1QgVk9JRCAqDQo+ICtFRklB UEkNCj4gK0JpZ051bVZhbHVlT25lICgNCj4gKyAgVk9JRA0KPiArICApDQo+ICt7DQo+ICsgIEFT U0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gTlVMTDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg IFNoaWZ0IHJpZ2h0IEJpZyBOdW1iZXIuDQo+ICsgIFBsZWFzZSBub3RlLCBhbGwgIm91dCIgQmln IG51bWJlciBhcmd1bWVudHMgc2hvdWxkIGJlIHByb3Blcmx5IGluaXRpYWxpemVkDQo+ICsgIGJ5 IGNhbGxpbmcgdG8gQmlnTnVtSW5pdCgpIG9yIEJpZ051bUZyb21CaW4oKSBmdW5jdGlvbnMuDQo+ ICsNCj4gKyAgQHBhcmFtW2luXSAgIEJuICAgICAgQmlnIG51bWJlci4NCj4gKyAgQHBhcmFtW2lu XSAgIG4gICAgICAgTnVtYmVyIG9mIGJpdHMgdG8gc2hpZnQuDQo+ICsgIEBwYXJhbVtvdXRdICBC blJlcyAgIFRoZSByZXN1bHQuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICBPbiBzdWNjZXNzLg0KPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTIEluIGNhc2Ug b2YgaW50ZXJuYWwgYWxsb2NhdGlvbiBmYWlsdXJlcy4NCj4gKyAgQHJldHZhbCBFRklfUFJPVE9D T0xfRVJST1IgICBPdGhlcndpc2UuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0K PiArQmlnTnVtUlNoaWZ0ICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuLA0KPiArICBJTiBVSU5U TiAgICAgICBuLA0KPiArICBPVVQgVk9JRCAgICAgICAqQm5SZXMNCj4gKyAgKQ0KPiArew0KPiAr ICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gK30NCj4g Kw0KPiArLyoqDQo+ICsgIE1hcmsgQmlnIE51bWJlciBmb3IgY29uc3RhbnQgdGltZSBjb21wdXRh dGlvbnMuDQo+ICsgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgYW55IGNv bnN0YW50IHRpbWUgY29tcHV0YXRpb25zIGFyZQ0KPiArICBwZXJmb3JtZWQgb24gdGhlIGdpdmVu IEJpZyBudW1iZXIuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgIEJuICAgICBCaWcgbnVtYmVyLg0K PiArKiovDQo+ICtWT0lEDQo+ICtFRklBUEkNCj4gK0JpZ051bUNvbnN0dGltZSAoDQo+ICsgIElO IFZPSUQgICpCbg0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAgQ2FsY3VsYXRlIHNxdWFyZSBtb2R1bG8uDQo+ICsgIFBsZWFzZSBub3Rl LCBhbGwgIm91dCIgQmlnIG51bWJlciBhcmd1bWVudHMgc2hvdWxkIGJlIHByb3Blcmx5IGluaXRp YWxpemVkDQo+ICsgIGJ5IGNhbGxpbmcgdG8gQmlnTnVtSW5pdCgpIG9yIEJpZ051bUZyb21CaW4o KSBmdW5jdGlvbnMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgIEJuQSAgICAgQmlnIG51bWJlci4N Cj4gKyAgQHBhcmFtW2luXSAgIEJuTSAgICAgQmlnIG51bWJlciAobW9kdWxvKS4NCj4gKyAgQHBh cmFtW291dF0gIEJuUmVzICAgVGhlIHJlc3VsdCwgc3VjaCB0aGF0IChCbkEgXiAyKSAlIEJuTS4N Cj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ICsg IEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgSW4gY2FzZSBvZiBpbnRlcm5hbCBhbGxvY2F0 aW9uIGZhaWx1cmVzLg0KPiArICBAcmV0dmFsIEVGSV9QUk9UT0NPTF9FUlJPUiAgIE90aGVyd2lz ZS4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtCaWdOdW1TcXJNb2QgKA0K PiArICBJTiBDT05TVCBWT0lEICAqQm5BLA0KPiArICBJTiBDT05TVCBWT0lEICAqQm5NLA0KPiAr ICBPVVQgVk9JRCAgICAgICAqQm5SZXMNCj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNF KTsNCj4gKyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg IENyZWF0ZSBuZXcgQmlnIE51bWJlciBjb21wdXRhdGlvbiBjb250ZXh0LiBUaGlzIGlzIGFuIG9w YXF1ZSBzdHJ1Y3R1cmUNCj4gKyAgd2hpY2ggc2hvdWxkIGJlIHBhc3NlZCB0byBhbnkgZnVuY3Rp b24gdGhhdCByZXF1aXJlcyBpdC4gVGhlIEJOIGNvbnRleHQgaXMNCj4gKyAgbmVlZGVkIHRvIG9w dGltaXplIGNhbGN1bGF0aW9ucyBhbmQgZXhwZW5zaXZlIGFsbG9jYXRpb25zLg0KPiArDQo+ICsg IEByZXR2YWwgQmlnIE51bWJlciBjb250ZXh0IHN0cnVjdCBvciBOVUxMIG9uIGZhaWx1cmUuDQo+ ICsqKi8NCj4gK1ZPSUQgKg0KPiArRUZJQVBJDQo+ICtCaWdOdW1OZXdDb250ZXh0ICgNCj4gKyAg Vk9JRA0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gTlVM TDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEZyZWUgQmlnIE51bWJlciBjb250ZXh0IHRoYXQg d2FzIGFsbG9jYXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQoKS4NCj4gKw0KPiArICBAcGFyYW1b aW5dICAgQm5DdHggICAgIEJpZyBudW1iZXIgY29udGV4dCB0byBmcmVlLg0KPiArKiovDQo+ICtW T0lEDQo+ICtFRklBUEkNCj4gK0JpZ051bUNvbnRleHRGcmVlICgNCj4gKyAgSU4gVk9JRCAgKkJu Q3R4DQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICBTZXQgQmlnIE51bWJlciB0byBhIGdpdmVuIHZhbHVlLg0KPiArDQo+ICsgIEBwYXJh bVtpbl0gICBCbiAgICAgQmlnIG51bWJlciB0byBzZXQuDQo+ICsgIEBwYXJhbVtpbl0gICBWYWwg ICAgVmFsdWUgdG8gc2V0Lg0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0Jp Z051bVNldFVpbnQgKA0KPiArICBJTiBWT0lEICAgKkJuLA0KPiArICBJTiBVSU5UTiAgVmFsDQo+ ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiBFRklfVU5TVVBQ T1JURUQ7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBBZGQgdHdvIEJpZyBOdW1iZXJzIG1vZHVs byBCbk0uDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgIEJuQSAgICAgICBCaWcgbnVtYmVyLg0KPiAr ICBAcGFyYW1baW5dICAgQm5CICAgICAgIEJpZyBudW1iZXIuDQo+ICsgIEBwYXJhbVtpbl0gICBC bk0gICAgICAgQmlnIG51bWJlciAobW9kdWxvKS4NCj4gKyAgQHBhcmFtW291dF0gIEJuUmVzICAg ICBUaGUgcmVzdWx0LCBzdWNoIHRoYXQgKEJuQSArIEJuQikgJSBCbk0uDQo+ICsNCj4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBPbiBzdWNjZXNzLg0KPiArICBAcmV0dmFsIEVGSV9P VVRfT0ZfUkVTT1VSQ0VTIEluIGNhc2Ugb2YgaW50ZXJuYWwgYWxsb2NhdGlvbiBmYWlsdXJlcy4N Cj4gKyAgQHJldHZhbCBFRklfUFJPVE9DT0xfRVJST1IgICBPdGhlcndpc2UuDQo+ICsqKi8NCj4g K0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArQmlnTnVtQWRkTW9kICgNCj4gKyAgSU4gQ09OU1Qg Vk9JRCAgKkJuQSwNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuQiwNCj4gKyAgSU4gQ09OU1QgVk9J RCAgKkJuTSwNCj4gKyAgT1VUIFZPSUQgICAgICAgKkJuUmVzDQo+ICsgICkNCj4gK3sNCj4gKyAg QVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ICt9DQo+IGRp ZmYgLS1naXQgYS9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvUGVpQ3J5cHRMaWIuaW5m IGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1BlaUNyeXB0TGliLmluZg0KPiBpbmRl eCA3NWQ4N2FmYmRjMDMuLmQwODBlNjY1YzIxOCAxMDA2NDQNCj4gLS0tIGEvQ3J5cHRvUGtnL0xp YnJhcnkvQmFzZUNyeXB0TGliL1BlaUNyeXB0TGliLmluZg0KPiArKysgYi9DcnlwdG9Qa2cvTGli cmFyeS9CYXNlQ3J5cHRMaWIvUGVpQ3J5cHRMaWIuaW5mDQo+IEBAIC01OSw3ICs1OSw3IEBADQo+ ICAgUGsvQ3J5cHRSc2FQc3NTaWduTnVsbC5jDQo+ICAgUGVtL0NyeXB0UGVtTnVsbC5jDQo+ICAg UmFuZC9DcnlwdFJhbmROdWxsLmMNCj4gLSAgQm4vQ3J5cHRCbi5jDQo+ICsgIEJuL0NyeXB0Qm5O dWxsLmMNCj4gDQo+ICAgU3lzQ2FsbC9DcnRXcmFwcGVyLmMNCj4gICBTeXNDYWxsL0NvbnN0YW50 VGltZUNsb2NrLmMNCj4gZGlmZiAtLWdpdCBhL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExp Yi9TbW1DcnlwdExpYi5pbmYgYi9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvU21tQ3J5 cHRMaWIuaW5mDQo+IGluZGV4IDQyMGNlZjg4ZWZiMS4uOGEzZmVjOWIwNzZjIDEwMDY0NA0KPiAt LS0gYS9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvU21tQ3J5cHRMaWIuaW5mDQo+ICsr KyBiL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYi9TbW1DcnlwdExpYi5pbmYNCj4gQEAg LTU2LDcgKzU2LDcgQEANCj4gICBQay9DcnlwdFJzYVBzcy5jDQo+ICAgUGsvQ3J5cHRSc2FQc3NT aWduTnVsbC5jDQo+ICAgUGVtL0NyeXB0UGVtLmMNCj4gLSAgQm4vQ3J5cHRCbi5jDQo+ICsgIEJu L0NyeXB0Qm5OdWxsLmMNCj4gICBTeXNDYWxsL0NydFdyYXBwZXIuYw0KPiAgIFN5c0NhbGwvQ29u c3RhbnRUaW1lQ2xvY2suYw0KPiAgIFN5c0NhbGwvQmFzZU1lbUFsbG9jYXRpb24uYw0KPiBkaWZm IC0tZ2l0IGEvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliTnVsbC9CYXNlQ3J5cHRMaWJO dWxsLmluZiBiL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYk51bGwvQmFzZUNyeXB0TGli TnVsbC5pbmYNCj4gaW5kZXggZmFmOTU5ODI3YjkwLi4xZmI0ZDVjNTRkNGYgMTAwNjQ0DQo+IC0t LSBhL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYk51bGwvQmFzZUNyeXB0TGliTnVsbC5p bmYNCj4gKysrIGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliTnVsbC9CYXNlQ3J5cHRM aWJOdWxsLmluZg0KPiBAQCAtNTIsNiArNTIsNyBAQA0KPiAgIFJhbmQvQ3J5cHRSYW5kTnVsbC5j DQo+ICAgUGsvQ3J5cHRSc2FQc3NOdWxsLmMNCj4gICBQay9DcnlwdFJzYVBzc1NpZ25OdWxsLmMN Cj4gKyAgQm4vQ3J5cHRCbk51bGwuYw0KPiANCj4gW1BhY2thZ2VzXQ0KPiAgIE1kZVBrZy9NZGVQ a2cuZGVjDQo+IGRpZmYgLS1naXQgYS9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWJOdWxs L0JuL0NyeXB0Qm5OdWxsLmMgYi9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWJOdWxsL0Ju L0NyeXB0Qm5OdWxsLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAw MDAwLi45ZjIyMGJhNDEwNTgNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9DcnlwdG9Qa2cvTGli cmFyeS9CYXNlQ3J5cHRMaWJOdWxsL0JuL0NyeXB0Qm5OdWxsLmMNCj4gQEAgLTAsMCArMSw1MjUg QEANCj4gKy8qKiBAZmlsZQ0KPiArICBCaWcgbnVtYmVyIEFQSSBpbXBsZW1lbnRhdGlvbiBiYXNl ZCBvbiBPcGVuU1NMDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDIyLCBJbnRlbCBDb3Jwb3Jh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsNCj4gKyoqLw0KPiArDQo+ICsjaW5jbHVkZSA8 TGlicmFyeS9CYXNlQ3J5cHRMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+ DQo+ICsNCj4gKy8qKg0KPiArICBBbGxvY2F0ZSBuZXcgQmlnIE51bWJlci4NCj4gKw0KPiArICBA cmV0dmFsIE5ldyBCaWdOdW0gb3BhcXVlIHN0cnVjdHVyZSBvciBOVUxMIG9uIGZhaWx1cmUuDQo+ ICsqKi8NCj4gK1ZPSUQgKg0KPiArRUZJQVBJDQo+ICtCaWdOdW1Jbml0ICgNCj4gKyAgVk9JRA0K PiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gTlVMTDsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgIEFsbG9jYXRlIG5ldyBCaWcgTnVtYmVyIGFuZCBhc3NpZ24g dGhlIHByb3ZpZGVkIHZhbHVlIHRvIGl0Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICBCdWYgICAg QmlnIGVuZGlhbiBlbmNvZGVkIGJ1ZmZlci4NCj4gKyAgQHBhcmFtW2luXSAgIExlbiAgICBCdWZm ZXIgbGVuZ3RoLg0KPiArDQo+ICsgIEByZXR2YWwgTmV3IEJpZ051bSBvcGFxdWUgc3RydWN0dXJl IG9yIE5VTEwgb24gZmFpbHVyZS4NCj4gKyoqLw0KPiArVk9JRCAqDQo+ICtFRklBUEkNCj4gK0Jp Z051bUZyb21CaW4gKA0KPiArICBJTiBDT05TVCBVSU5UOCAgKkJ1ZiwNCj4gKyAgSU4gVUlOVE4g ICAgICAgIExlbg0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1 cm4gTlVMTDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENvbnZlcnQgdGhlIGFic29sdXRlIHZh bHVlIG9mIEJuIGludG8gYmlnLWVuZGlhbiBmb3JtIGFuZCBzdG9yZSBpdCBhdCBCdWYuDQo+ICsg IFRoZSBCdWYgYXJyYXkgc2hvdWxkIGhhdmUgYXQgbGVhc3QgQmlnTnVtQnl0ZXMoKSBpbiBpdC4N Cj4gKw0KPiArICBAcGFyYW1baW5dICAgQm4gICAgIEJpZyBudW1iZXIgdG8gY29udmVydC4NCj4g KyAgQHBhcmFtW291dF0gIEJ1ZiAgICBPdXRwdXQgYnVmZmVyLg0KPiArDQo+ICsgIEByZXR2YWwg VGhlIGxlbmd0aCBvZiB0aGUgYmlnLWVuZGlhbiBudW1iZXIgcGxhY2VkIGF0IEJ1ZiBvciAtMSBv biBlcnJvci4NCj4gKyoqLw0KPiArSU5UTg0KPiArRUZJQVBJDQo+ICtCaWdOdW1Ub0JpbiAoDQo+ ICsgIElOIFZPSUQgICAgKkJuLA0KPiArICBPVVQgVUlOVDggICpCdWYNCj4gKyAgKQ0KPiArew0K PiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIC0xOw0KPiArfQ0KPiArDQo+ICsvKioN Cj4gKyAgRnJlZSB0aGUgQmlnIE51bWJlci4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgQm4gICAg ICBCaWcgbnVtYmVyIHRvIGZyZWUuDQo+ICsgIEBwYXJhbVtpbl0gICBDbGVhciAgIFRSVUUgaWYg dGhlIGJ1ZmZlciBzaG91bGQgYmUgY2xlYXJlZC4NCj4gKyoqLw0KPiArVk9JRA0KPiArRUZJQVBJ DQo+ICtCaWdOdW1GcmVlICgNCj4gKyAgSU4gVk9JRCAgICAgKkJuLA0KPiArICBJTiBCT09MRUFO ICBDbGVhcg0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArfQ0KPiArDQo+ ICsvKioNCj4gKyAgQ2FsY3VsYXRlIHRoZSBzdW0gb2YgdHdvIEJpZyBOdW1iZXJzLg0KPiArICBQ bGVhc2Ugbm90ZSwgYWxsICJvdXQiIEJpZyBudW1iZXIgYXJndW1lbnRzIHNob3VsZCBiZSBwcm9w ZXJseSBpbml0aWFsaXplZA0KPiArICBieSBjYWxsaW5nIHRvIEJpZ051bUluaXQoKSBvciBCaWdO dW1Gcm9tQmluKCkgZnVuY3Rpb25zLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICBCbkEgICAgIEJp ZyBudW1iZXIuDQo+ICsgIEBwYXJhbVtpbl0gICBCbkIgICAgIEJpZyBudW1iZXIuDQo+ICsgIEBw YXJhbVtvdXRdICBCblJlcyAgIFRoZSByZXN1bHQgb2YgQm5BICsgQm5CLg0KPiArDQo+ICsgIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gKyAgQHJldHZhbCBFRklf UFJPVE9DT0xfRVJST1IgICBPdGhlcndpc2UuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VG SUFQSQ0KPiArQmlnTnVtQWRkICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuQSwNCj4gKyAgSU4g Q09OU1QgVk9JRCAgKkJuQiwNCj4gKyAgT1VUIFZPSUQgICAgICAgKkJuUmVzDQo+ICsgICkNCj4g K3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ ICt9DQo+ICsNCj4gKy8qKg0KPiArICBTdWJ0cmFjdCB0d28gQmlnIE51bWJlcnMuDQo+ICsgIFBs ZWFzZSBub3RlLCBhbGwgIm91dCIgQmlnIG51bWJlciBhcmd1bWVudHMgc2hvdWxkIGJlIHByb3Bl cmx5IGluaXRpYWxpemVkDQo+ICsgIGJ5IGNhbGxpbmcgdG8gQmlnTnVtSW5pdCgpIG9yIEJpZ051 bUZyb21CaW4oKSBmdW5jdGlvbnMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgIEJuQSAgICAgQmln IG51bWJlci4NCj4gKyAgQHBhcmFtW2luXSAgIEJuQiAgICAgQmlnIG51bWJlci4NCj4gKyAgQHBh cmFtW291dF0gIEJuUmVzICAgVGhlIHJlc3VsdCBvZiBCbkEgLSBCbkIuDQo+ICsNCj4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBPbiBzdWNjZXNzLg0KPiArICBAcmV0dmFsIEVGSV9Q Uk9UT0NPTF9FUlJPUiAgIE90aGVyd2lzZS4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJ QVBJDQo+ICtCaWdOdW1TdWIgKA0KPiArICBJTiBDT05TVCBWT0lEICAqQm5BLA0KPiArICBJTiBD T05TVCBWT0lEICAqQm5CLA0KPiArICBPVVQgVk9JRCAgICAgICAqQm5SZXMNCj4gKyAgKQ0KPiAr ew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgIENhbGN1bGF0ZSByZW1haW5kZXI6IEJuUmVzID0gQm5BICUg Qm5CLg0KPiArICBQbGVhc2Ugbm90ZSwgYWxsICJvdXQiIEJpZyBudW1iZXIgYXJndW1lbnRzIHNo b3VsZCBiZSBwcm9wZXJseSBpbml0aWFsaXplZA0KPiArICBieSBjYWxsaW5nIHRvIEJpZ051bUlu aXQoKSBvciBCaWdOdW1Gcm9tQmluKCkgZnVuY3Rpb25zLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g ICBCbkEgICAgIEJpZyBudW1iZXIuDQo+ICsgIEBwYXJhbVtpbl0gICBCbkIgICAgIEJpZyBudW1i ZXIuDQo+ICsgIEBwYXJhbVtvdXRdICBCblJlcyAgIFRoZSByZXN1bHQgb2YgQm5BICUgQm5CLg0K PiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gKyAg QHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyBJbiBjYXNlIG9mIGludGVybmFsIGFsbG9jYXRp b24gZmFpbHVyZXMuDQo+ICsgIEByZXR2YWwgRUZJX1BST1RPQ09MX0VSUk9SICAgT3RoZXJ3aXNl Lg0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0JpZ051bU1vZCAoDQo+ICsg IElOIENPTlNUIFZPSUQgICpCbkEsDQo+ICsgIElOIENPTlNUIFZPSUQgICpCbkIsDQo+ICsgIE9V VCBWT0lEICAgICAgICpCblJlcw0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0K PiArICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ29t cHV0ZSBCbkEgdG8gdGhlIEJuUC10aCBwb3dlciBtb2R1bG8gQm5NLg0KPiArICBQbGVhc2Ugbm90 ZSwgYWxsICJvdXQiIEJpZyBudW1iZXIgYXJndW1lbnRzIHNob3VsZCBiZSBwcm9wZXJseSBpbml0 aWFsaXplZC4NCj4gKyAgYnkgY2FsbGluZyB0byBCaWdOdW1Jbml0KCkgb3IgQmlnTnVtRnJvbUJp bigpIGZ1bmN0aW9ucy4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgQm5BICAgICBCaWcgbnVtYmVy Lg0KPiArICBAcGFyYW1baW5dICAgQm5QICAgICBCaWcgbnVtYmVyIChwb3dlcikuDQo+ICsgIEBw YXJhbVtpbl0gICBCbk0gICAgIEJpZyBudW1iZXIgKG1vZHVsbykuDQo+ICsgIEBwYXJhbVtvdXRd ICBCblJlcyAgIFRoZSByZXN1bHQgb2YgKEJuQSBeIEJuUCkgJSBCbk0uDQo+ICsNCj4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBPbiBzdWNjZXNzLg0KPiArICBAcmV0dmFsIEVGSV9P VVRfT0ZfUkVTT1VSQ0VTIEluIGNhc2Ugb2YgaW50ZXJuYWwgYWxsb2NhdGlvbiBmYWlsdXJlcy4N Cj4gKyAgQHJldHZhbCBFRklfUFJPVE9DT0xfRVJST1IgICBPdGhlcndpc2UuDQo+ICsqKi8NCj4g K0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArQmlnTnVtRXhwTW9kICgNCj4gKyAgSU4gVk9JRCAg ICpCbkEsDQo+ICsgIElOIFZPSUQgICAqQm5QLA0KPiArICBJTiBWT0lEICAgKkJuTSwNCj4gKyAg T1VUIFZPSUQgICpCblJlcw0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiAr ICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ29tcHV0 ZSBCbkEgaW52ZXJzZSBtb2R1bG8gQm5NLg0KPiArICBQbGVhc2Ugbm90ZSwgYWxsICJvdXQiIEJp ZyBudW1iZXIgYXJndW1lbnRzIHNob3VsZCBiZSBwcm9wZXJseSBpbml0aWFsaXplZA0KPiArICBi eSBjYWxsaW5nIHRvIEJpZ051bUluaXQoKSBvciBCaWdOdW1Gcm9tQmluKCkgZnVuY3Rpb25zLg0K PiArDQo+ICsgIEBwYXJhbVtpbl0gICBCbkEgICAgIEJpZyBudW1iZXIuDQo+ICsgIEBwYXJhbVtp bl0gICBCbk0gICAgIEJpZyBudW1iZXIgKG1vZHVsbykuDQo+ICsgIEBwYXJhbVtvdXRdICBCblJl cyAgIFRoZSByZXN1bHQsIHN1Y2ggdGhhdCAoQm5BICogQm5SZXMpICUgQm5NID09IDEuDQo+ICsN Cj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBPbiBzdWNjZXNzLg0KPiArICBAcmV0 dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTIEluIGNhc2Ugb2YgaW50ZXJuYWwgYWxsb2NhdGlvbiBm YWlsdXJlcy4NCj4gKyAgQHJldHZhbCBFRklfUFJPVE9DT0xfRVJST1IgICBPdGhlcndpc2UuDQo+ ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArQmlnTnVtSW52ZXJzZU1vZCAoDQo+ ICsgIElOIENPTlNUIFZPSUQgICpCbkEsDQo+ICsgIElOIENPTlNUIFZPSUQgICpCbk0sDQo+ICsg IE9VVCBWT0lEICAgICAgICpCblJlcw0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0Up Ow0KPiArICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAg RGl2aWRlIHR3byBCaWcgTnVtYmVycy4NCj4gKyAgUGxlYXNlIG5vdGUsIGFsbCAib3V0IiBCaWcg bnVtYmVyIGFyZ3VtZW50cyBzaG91bGQgYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQNCj4gKyAgYnkg Y2FsbGluZyB0byBCaWdOdW1Jbml0KCkgb3IgQmlnTnVtRnJvbUJpbigpIGZ1bmN0aW9ucy4NCj4g Kw0KPiArICBAcGFyYW1baW5dICAgQm5BICAgICBCaWcgbnVtYmVyLg0KPiArICBAcGFyYW1baW5d ICAgQm5NICAgICBCaWcgbnVtYmVyIChtb2R1bG8pLg0KPiArICBAcGFyYW1bb3V0XSAgQm5SZXMg ICBUaGUgcmVzdWx0LCBzdWNoIHRoYXQgQm5BIC8gQm5CLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JF U09VUkNFUyBJbiBjYXNlIG9mIGludGVybmFsIGFsbG9jYXRpb24gZmFpbHVyZXMuDQo+ICsgIEBy ZXR2YWwgRUZJX1BST1RPQ09MX0VSUk9SICAgT3RoZXJ3aXNlLg0KPiArKiovDQo+ICtFRklfU1RB VFVTDQo+ICtFRklBUEkNCj4gK0JpZ051bURpdiAoDQo+ICsgIElOIENPTlNUIFZPSUQgICpCbkEs DQo+ICsgIElOIENPTlNUIFZPSUQgICpCbk0sDQo+ICsgIE9VVCBWT0lEICAgICAgICpCblJlcw0K PiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gRUZJX1VOU1VQ UE9SVEVEOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgTXVsdGlwbHkgdHdvIEJpZyBOdW1iZXJz IG1vZHVsbyBCbk0uDQo+ICsgIFBsZWFzZSBub3RlLCBhbGwgIm91dCIgQmlnIG51bWJlciBhcmd1 bWVudHMgc2hvdWxkIGJlIHByb3Blcmx5IGluaXRpYWxpemVkDQo+ICsgIGJ5IGNhbGxpbmcgdG8g QmlnTnVtSW5pdCgpIG9yIEJpZ051bUZyb21CaW4oKSBmdW5jdGlvbnMuDQo+ICsNCj4gKyAgQHBh cmFtW2luXSAgIEJuQSAgICAgQmlnIG51bWJlci4NCj4gKyAgQHBhcmFtW2luXSAgIEJuQiAgICAg QmlnIG51bWJlci4NCj4gKyAgQHBhcmFtW2luXSAgIEJuTSAgICAgQmlnIG51bWJlciAobW9kdWxv KS4NCj4gKyAgQHBhcmFtW291dF0gIEJuUmVzICAgVGhlIHJlc3VsdCwgc3VjaCB0aGF0IChCbkEg KiBCbkIpICUgQm5NLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgT24g c3VjY2Vzcy4NCj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyBJbiBjYXNlIG9mIGlu dGVybmFsIGFsbG9jYXRpb24gZmFpbHVyZXMuDQo+ICsgIEByZXR2YWwgRUZJX1BST1RPQ09MX0VS Uk9SICAgT3RoZXJ3aXNlLg0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0Jp Z051bU11bE1vZCAoDQo+ICsgIElOIENPTlNUIFZPSUQgICpCbkEsDQo+ICsgIElOIENPTlNUIFZP SUQgICpCbkIsDQo+ICsgIElOIENPTlNUIFZPSUQgICpCbk0sDQo+ICsgIE9VVCBWT0lEICAgICAg ICpCblJlcw0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4g RUZJX1VOU1VQUE9SVEVEOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ29tcGFyZSB0d28gQmln IE51bWJlcnMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgIEJuQSAgICAgQmlnIG51bWJlci4NCj4g KyAgQHBhcmFtW2luXSAgIEJuQiAgICAgQmlnIG51bWJlci4NCj4gKw0KPiArICBAcmV0dmFsIDAg ICAgICAgICAgQm5BID09IEJuQi4NCj4gKyAgQHJldHZhbCAxICAgICAgICAgIEJuQSA+IEJuQi4N Cj4gKyAgQHJldHZhbCAtMSAgICAgICAgIEJuQSA8IEJuQi4NCj4gKyoqLw0KPiArSU5UTg0KPiAr RUZJQVBJDQo+ICtCaWdOdW1DbXAgKA0KPiArICBJTiBDT05TVCBWT0lEICAqQm5BLA0KPiArICBJ TiBDT05TVCBWT0lEICAqQm5CDQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ ICsgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgR2V0IG51bWJlciBvZiBiaXRz IGluIEJuLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICBCbiAgICAgQmlnIG51bWJlci4NCj4gKw0K PiArICBAcmV0dmFsIE51bWJlciBvZiBiaXRzLg0KPiArKiovDQo+ICtVSU5UTg0KPiArRUZJQVBJ DQo+ICtCaWdOdW1CaXRzICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuDQo+ICsgICkNCj4gK3sN Cj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKioN Cj4gKyAgR2V0IG51bWJlciBvZiBieXRlcyBpbiBCbi4NCj4gKw0KPiArICBAcGFyYW1baW5dICAg Qm4gICAgIEJpZyBudW1iZXIuDQo+ICsNCj4gKyAgQHJldHZhbCBOdW1iZXIgb2YgYnl0ZXMuDQo+ ICsqKi8NCj4gK1VJTlRODQo+ICtFRklBUEkNCj4gK0JpZ051bUJ5dGVzICgNCj4gKyAgSU4gQ09O U1QgVk9JRCAgKkJuDQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJl dHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ2hlY2tzIGlmIEJpZyBOdW1iZXIgZXF1 YWxzIHRvIHRoZSBnaXZlbiBOdW0uDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgIEJuICAgICBCaWcg bnVtYmVyLg0KPiArICBAcGFyYW1baW5dICAgTnVtICAgIE51bWJlci4NCj4gKw0KPiArICBAcmV0 dmFsIFRSVUUgICBpZmYgQm4gPT0gTnVtLg0KPiArICBAcmV0dmFsIEZBTFNFICBvdGhlcndpc2Uu DQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0VGSUFQSQ0KPiArQmlnTnVtSXNXb3JkICgNCj4gKyAg SU4gQ09OU1QgVk9JRCAgKkJuLA0KPiArICBJTiBVSU5UTiAgICAgICBOdW0NCj4gKyAgKQ0KPiAr ew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIEZBTFNFOw0KPiArfQ0KPiArDQo+ ICsvKioNCj4gKyAgQ2hlY2tzIGlmIEJpZyBOdW1iZXIgaXMgb2RkLg0KPiArDQo+ICsgIEBwYXJh bVtpbl0gICBCbiAgICAgQmlnIG51bWJlci4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICBCbiBp cyBvZGQgKEJuICUgMiA9PSAxKS4NCj4gKyAgQHJldHZhbCBGQUxTRSAgb3RoZXJ3aXNlLg0KPiAr KiovDQo+ICtCT09MRUFODQo+ICtFRklBUEkNCj4gK0JpZ051bUlzT2RkICgNCj4gKyAgSU4gQ09O U1QgVk9JRCAgKkJuDQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJl dHVybiBGQUxTRTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENvcHkgQmlnIG51bWJlci4NCj4g Kw0KPiArICBAcGFyYW1bb3V0XSAgQm5Ec3QgICAgIERlc3RpbmF0aW9uLg0KPiArICBAcGFyYW1b aW5dICAgQm5TcmMgICAgIFNvdXJjZS4NCj4gKw0KPiArICBAcmV0dmFsIEJuRHN0IG9uIHN1Y2Nl c3MuDQo+ICsgIEByZXR2YWwgTlVMTCBvdGhlcndpc2UuDQo+ICsqKi8NCj4gK1ZPSUQgKg0KPiAr RUZJQVBJDQo+ICtCaWdOdW1Db3B5ICgNCj4gKyAgT1VUIFZPSUQgICAgICAgKkJuRHN0LA0KPiAr ICBJTiBDT05TVCBWT0lEICAqQm5TcmMNCj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNF KTsNCj4gKyAgcmV0dXJuIE5VTEw7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBHZXQgY29uc3Rh bnQgQmlnIG51bWJlciB3aXRoIHZhbHVlIG9mICIxIi4NCj4gKyAgVGhpcyBtYXkgYmUgdXNlZCB0 byBzYXZlIGV4cGVuc2l2ZSBhbGxvY2F0aW9ucy4NCj4gKw0KPiArICBAcmV0dmFsIEJpZyBOdW1i ZXIgd2l0aCB2YWx1ZSBvZiAxLg0KPiArKiovDQo+ICtDT05TVCBWT0lEICoNCj4gK0VGSUFQSQ0K PiArQmlnTnVtVmFsdWVPbmUgKA0KPiArICBWT0lEDQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJU IChGQUxTRSk7DQo+ICsgIHJldHVybiBOVUxMOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgU2hp ZnQgcmlnaHQgQmlnIE51bWJlci4NCj4gKyAgUGxlYXNlIG5vdGUsIGFsbCAib3V0IiBCaWcgbnVt YmVyIGFyZ3VtZW50cyBzaG91bGQgYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQNCj4gKyAgYnkgY2Fs bGluZyB0byBCaWdOdW1Jbml0KCkgb3IgQmlnTnVtRnJvbUJpbigpIGZ1bmN0aW9ucy4NCj4gKw0K PiArICBAcGFyYW1baW5dICAgQm4gICAgICBCaWcgbnVtYmVyLg0KPiArICBAcGFyYW1baW5dICAg biAgICAgICBOdW1iZXIgb2YgYml0cyB0byBzaGlmdC4NCj4gKyAgQHBhcmFtW291dF0gIEJuUmVz ICAgVGhlIHJlc3VsdC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgIE9u IHN1Y2Nlc3MuDQo+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgSW4gY2FzZSBvZiBp bnRlcm5hbCBhbGxvY2F0aW9uIGZhaWx1cmVzLg0KPiArICBAcmV0dmFsIEVGSV9QUk9UT0NPTF9F UlJPUiAgIE90aGVyd2lzZS4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtC aWdOdW1SU2hpZnQgKA0KPiArICBJTiBDT05TVCBWT0lEICAqQm4sDQo+ICsgIElOIFVJTlROICAg ICAgIG4sDQo+ICsgIE9VVCBWT0lEICAgICAgICpCblJlcw0KPiArICApDQo+ICt7DQo+ICsgIEFT U0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArfQ0KPiArDQo+ ICsvKioNCj4gKyAgTWFyayBCaWcgTnVtYmVyIGZvciBjb25zdGFudCB0aW1lIGNvbXB1dGF0aW9u cy4NCj4gKyAgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBhbnkgY29uc3Rh bnQgdGltZSBjb21wdXRhdGlvbnMgYXJlDQo+ICsgIHBlcmZvcm1lZCBvbiB0aGUgZ2l2ZW4gQmln IG51bWJlci4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgQm4gICAgIEJpZyBudW1iZXIuDQo+ICsq Ki8NCj4gK1ZPSUQNCj4gK0VGSUFQSQ0KPiArQmlnTnVtQ29uc3R0aW1lICgNCj4gKyAgSU4gVk9J RCAgKkJuDQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICt9DQo+ICsNCj4g Ky8qKg0KPiArICBDYWxjdWxhdGUgc3F1YXJlIG1vZHVsby4NCj4gKyAgUGxlYXNlIG5vdGUsIGFs bCAib3V0IiBCaWcgbnVtYmVyIGFyZ3VtZW50cyBzaG91bGQgYmUgcHJvcGVybHkgaW5pdGlhbGl6 ZWQNCj4gKyAgYnkgY2FsbGluZyB0byBCaWdOdW1Jbml0KCkgb3IgQmlnTnVtRnJvbUJpbigpIGZ1 bmN0aW9ucy4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgQm5BICAgICBCaWcgbnVtYmVyLg0KPiAr ICBAcGFyYW1baW5dICAgQm5NICAgICBCaWcgbnVtYmVyIChtb2R1bG8pLg0KPiArICBAcGFyYW1b b3V0XSAgQm5SZXMgICBUaGUgcmVzdWx0LCBzdWNoIHRoYXQgKEJuQSBeIDIpICUgQm5NLg0KPiAr DQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gKyAgQHJl dHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyBJbiBjYXNlIG9mIGludGVybmFsIGFsbG9jYXRpb24g ZmFpbHVyZXMuDQo+ICsgIEByZXR2YWwgRUZJX1BST1RPQ09MX0VSUk9SICAgT3RoZXJ3aXNlLg0K PiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0JpZ051bVNxck1vZCAoDQo+ICsg IElOIENPTlNUIFZPSUQgICpCbkEsDQo+ICsgIElOIENPTlNUIFZPSUQgICpCbk0sDQo+ICsgIE9V VCBWT0lEICAgICAgICpCblJlcw0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0K PiArICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ3Jl YXRlIG5ldyBCaWcgTnVtYmVyIGNvbXB1dGF0aW9uIGNvbnRleHQuIFRoaXMgaXMgYW4gb3BhcXVl IHN0cnVjdHVyZQ0KPiArICB3aGljaCBzaG91bGQgYmUgcGFzc2VkIHRvIGFueSBmdW5jdGlvbiB0 aGF0IHJlcXVpcmVzIGl0LiBUaGUgQk4gY29udGV4dCBpcw0KPiArICBuZWVkZWQgdG8gb3B0aW1p emUgY2FsY3VsYXRpb25zIGFuZCBleHBlbnNpdmUgYWxsb2NhdGlvbnMuDQo+ICsNCj4gKyAgQHJl dHZhbCBCaWcgTnVtYmVyIGNvbnRleHQgc3RydWN0IG9yIE5VTEwgb24gZmFpbHVyZS4NCj4gKyoq Lw0KPiArVk9JRCAqDQo+ICtFRklBUEkNCj4gK0JpZ051bU5ld0NvbnRleHQgKA0KPiArICBWT0lE DQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiBOVUxMOw0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAgRnJlZSBCaWcgTnVtYmVyIGNvbnRleHQgdGhhdCB3YXMg YWxsb2NhdGVkIHdpdGggQmlnTnVtTmV3Q29udGV4dCgpLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g ICBCbkN0eCAgICAgQmlnIG51bWJlciBjb250ZXh0IHRvIGZyZWUuDQo+ICsqKi8NCj4gK1ZPSUQN Cj4gK0VGSUFQSQ0KPiArQmlnTnVtQ29udGV4dEZyZWUgKA0KPiArICBJTiBWT0lEICAqQm5DdHgN Cj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ ICsgIFNldCBCaWcgTnVtYmVyIHRvIGEgZ2l2ZW4gdmFsdWUuDQo+ICsNCj4gKyAgQHBhcmFtW2lu XSAgIEJuICAgICBCaWcgbnVtYmVyIHRvIHNldC4NCj4gKyAgQHBhcmFtW2luXSAgIFZhbCAgICBW YWx1ZSB0byBzZXQuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArQmlnTnVt U2V0VWludCAoDQo+ICsgIElOIFZPSUQgICAqQm4sDQo+ICsgIElOIFVJTlROICBWYWwNCj4gKyAg KQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRF RDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEFkZCB0d28gQmlnIE51bWJlcnMgbW9kdWxvIEJu TS4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgQm5BICAgICAgIEJpZyBudW1iZXIuDQo+ICsgIEBw YXJhbVtpbl0gICBCbkIgICAgICAgQmlnIG51bWJlci4NCj4gKyAgQHBhcmFtW2luXSAgIEJuTSAg ICAgICBCaWcgbnVtYmVyIChtb2R1bG8pLg0KPiArICBAcGFyYW1bb3V0XSAgQm5SZXMgICAgIFRo ZSByZXN1bHQsIHN1Y2ggdGhhdCAoQm5BICsgQm5CKSAlIEJuTS4NCj4gKw0KPiArICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ICsgIEByZXR2YWwgRUZJX09VVF9P Rl9SRVNPVVJDRVMgSW4gY2FzZSBvZiBpbnRlcm5hbCBhbGxvY2F0aW9uIGZhaWx1cmVzLg0KPiAr ICBAcmV0dmFsIEVGSV9QUk9UT0NPTF9FUlJPUiAgIE90aGVyd2lzZS4NCj4gKyoqLw0KPiArRUZJ X1NUQVRVUw0KPiArRUZJQVBJDQo+ICtCaWdOdW1BZGRNb2QgKA0KPiArICBJTiBDT05TVCBWT0lE ICAqQm5BLA0KPiArICBJTiBDT05TVCBWT0lEICAqQm5CLA0KPiArICBJTiBDT05TVCBWT0lEICAq Qm5NLA0KPiArICBPVVQgVk9JRCAgICAgICAqQm5SZXMNCj4gKyAgKQ0KPiArew0KPiArICBBU1NF UlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gK30NCj4gLS0gDQo+ IDIuMzMuMC53aW5kb3dzLjINCj4gDQo=