From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by mx.groups.io with SMTP id smtpd.web11.775.1591135210868763317 for ; Tue, 02 Jun 2020 15:00:11 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=szIY3kkd; spf=pass (domain: intel.com, ip: 192.55.52.151, mailfrom: michael.d.kinney@intel.com) IronPort-SDR: ATlioUMFGz/9t8noxAlIie+pyziHxlv9UptdGNok85rkCEttWBVFwaY/NR1dALEOAtbzgzaHS7 aeyl9m/ECCGA== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Jun 2020 15:00:09 -0700 IronPort-SDR: lUyvNk/LA5GlH8GQcPU1UvJKvRccfrIu36lKXC4aqTkdq5xXnhZ7D5weEsaWuTiaKYy5XynZfd ZBmVMduWW/Og== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,466,1583222400"; d="scan'208";a="470821442" Received: from orsmsx101.amr.corp.intel.com ([10.22.225.128]) by fmsmga006.fm.intel.com with ESMTP; 02 Jun 2020 15:00:09 -0700 Received: from orsmsx155.amr.corp.intel.com (10.22.240.21) by ORSMSX101.amr.corp.intel.com (10.22.225.128) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 2 Jun 2020 15:00:09 -0700 Received: from ORSEDG001.ED.cps.intel.com (10.7.248.4) by ORSMSX155.amr.corp.intel.com (10.22.240.21) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 2 Jun 2020 15:00:08 -0700 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (104.47.59.168) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 2 Jun 2020 15:00:08 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=a3YxQt71PKv9MKEfgGPjkzei8Nuz+2qYjZIXkYno8Do9o8jXEYYktriFfovmZQB2T4X/T5VrhdmMV0tWjOPoZNw/byKKT6kgjtYDMbs9olXnsXqkSKvIARGszsoNOxAC8uWT2PqPjrrQ6OReQ7jwkPSABp04mj05zhqW41sRcAE+kUtQBp+ax15HIKF359RrgN0q24fjZS/b27gkdv5tEYnS9bL2g+fhoZM7KnrAS9a7Vhkcxo7inFhNZNywvAo1E2XpO/wNlxGHEW4OWPoze+aj+nNYXBO/f5jz9/QpGn9RRmF/QjNIvuLuzBbzVKduwZNdtpX/iQUTDXV65Y0pjw== 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-SenderADCheck; bh=5EHz0FhJFDsu0KFNbcqbyVaSdF9uZHWveryJ1x1DY/c=; b=QcRQGwGdP2mPl3hiTs25WoJqLg1119Rh+JozEJYYflNSpFFqyKXbHmbcJTIFwyav39KAVrTsHRFMkjrsyEYR4b4tCaXWUattpYOqF9BUmj1lwCP/BG3KTErxcC0U1oO8gr+c+KEIlItWS8x07pWMQp3zRlRFuGKUmxNdLYOy53B/v9cylyrON/Dvvuj7qlfAqt9s2IFD2A4seMxbEjh0gTJQSM6kMTMabYm15EUka59uIa46bE1AOrxMlTAprsTMZhsX7nTG3cHd7Tw1b94Fwp5nYmf1FLzTR7Wgx2xl0mppfb3FH6wAvjL/iOynG4BsYq9Is9jvowogRNRxpbNBAA== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5EHz0FhJFDsu0KFNbcqbyVaSdF9uZHWveryJ1x1DY/c=; b=szIY3kkdEZzj9JoinI1/PLLQBwV8Hasq39UuGcViPGsl/SsUawanhAqFP7aUOmGHtv1JOAgD+CbSg7m8u6qgfUsDHCwRB7COPECl5Vodbs5YKoe0w7hsOLixqOY0H7K5L4QL8me+vt1z9lbaoIHtiX75CSu7N2AwAsva+MgcXb0= Received: from MN2PR11MB4461.namprd11.prod.outlook.com (2603:10b6:208:192::29) by MN2PR11MB4383.namprd11.prod.outlook.com (2603:10b6:208:17b::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3045.17; Tue, 2 Jun 2020 22:00:06 +0000 Received: from MN2PR11MB4461.namprd11.prod.outlook.com ([fe80::10bc:1a4e:4745:ffc1]) by MN2PR11MB4461.namprd11.prod.outlook.com ([fe80::10bc:1a4e:4745:ffc1%3]) with mapi id 15.20.3045.024; Tue, 2 Jun 2020 22:00:06 +0000 From: "Michael D Kinney" To: "devel@edk2.groups.io" , "daniel.schaefer@hpe.com" , "Kinney, Michael D" CC: Leif Lindholm , Gilbert Chen , Abner Chang Subject: Re: [edk2-devel] [PATCH v4 1/1] ProcessorPkg/Library: Add RiscVEdk2SbiLib Thread-Topic: [edk2-devel] [PATCH v4 1/1] ProcessorPkg/Library: Add RiscVEdk2SbiLib Thread-Index: AQHWOP5HtM16AtnPE0e3DybqhhhJYqjF3kiw Date: Tue, 2 Jun 2020 22:00:06 +0000 Message-ID: References: <20200602165152.9823-1-daniel.schaefer@hpe.com> <20200602165152.9823-2-daniel.schaefer@hpe.com> In-Reply-To: <20200602165152.9823-2-daniel.schaefer@hpe.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.2.0.6 authentication-results: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=intel.com; x-originating-ip: [134.134.136.210] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 9340e460-f981-4516-4bd3-08d807404f67 x-ms-traffictypediagnostic: MN2PR11MB4383: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:3513; x-forefront-prvs: 0422860ED4 x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: dk2Sj432FN1MRCMp76CaznXnKI+9WX0vAV139o8NnBT9U9glbT2jy0Iswogc5+2Xx5Afb6n4uPPBvX58anJBKsRIAD1ytA0OvpoTw8hK+MsS46s63BAUdz+oK1FKh0JULBIdU1J2ACbB9OgqWYH7usZx6VND/32JMGrvy6jZP6Jh68OkQaPgg9efLSWVuZsW2gaAtzNavpK57hQ6GvrPDNLdABPGWP98exv6WVu9rwrOyUtLbkCU8NAQ/GBvpbd3TZdf/BWvKSLIOqAFP84dgAJo2Xw2KlZba0Z8aXkjkNDKQdil+7jNm/ke0r98snizpJOZ53r8s4bydXAGn0pxu3Wk33eTmc1ksDuJdbLBkB2bzGiO67eSRj+h261q7+Xqe7ZcOVzB7odGKtLKwpxCcQ== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR11MB4461.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(366004)(136003)(396003)(39860400002)(346002)(376002)(30864003)(19627235002)(53546011)(6506007)(52536014)(86362001)(33656002)(7696005)(8936002)(64756008)(66556008)(66946007)(66446008)(66476007)(110136005)(55016002)(478600001)(8676002)(966005)(71200400001)(83380400001)(76116006)(2906002)(186003)(316002)(4326008)(26005)(54906003)(5660300002)(9686003)(559001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: a9KcX2Lck9W7vfMbdhwu9be1mvDK/f3XlldoH7JwVo9wHgpjDBrM3l8c+d2NutHZivYe1cJ8CX+xtihdKcFvDrS1LqJsBHJuNEQGTjjeZ7pB1oa3Dgv6jcGtnwW7isMFW3aSFo+h9jo4WHwhmrTeTd7e12fWdoawahSardA/XO4kYi4qFWSVfXiwklMSFSaYwPpLiJbUqdD5jdsCRsSMDEgF+RY96FDJn93bGzrYrRDVpLBFH1LnrvyO9KEzCI0DHtgKZM+2dafDFcmgH5mjIUHxX6jlYI3kT/mWaSLj5wlDPcc4Jw2KLCSF2og/xn4U1bfgCp/7f7YwQKO2l8AkMkaSD+jKuHRcqwHQz93Xqeq4ypHhNecqTNBk5YAxnOkCaQ9eAOXFUWWMo2TN0jSNrUWra4BWPlL5r4lJz1YA6tyl3kX+HL9VXVqLABMJ9CjvIqbJp85pJh317JbJU5AfTrWeWjTne7sYTTTO2tmSna1A4ehkzcSS0vvAEng7ASFB MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 9340e460-f981-4516-4bd3-08d807404f67 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Jun 2020 22:00:06.3576 (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: Orrk7beM+h0ZxUgBspIva4MJy7uxl5jadQgOEAdeUzgLBruNRl3geS19PZy3eRkkcosKmcmxJX8P6U+qECZnJIzPLvB72HUfU4QZb/s63BI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB4383 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 SGkgRGFuaWVsLA0KDQpJIHNlZSBzb21lIGluY29uc2lzdGVuY2UgaW4gdGhlIG5hbWVzIHVzZWQg aW4gdGhlc2UgcGF0Y2hlcy4NCg0KRm9yIGV4YW1wbGUsIHRoZXJlIHNob3VsZCBub3QgYmUgYSBu ZWVkIHRvIHVzZSAiRWRrMiIgaW4gdGhlDQpuYW1lIG9mIGEgbGlicmFyeS4gIFRoaXMgbGlicmFy eSBpcyBpbiBhbiBlZGsyIHJlcG8uDQoNCkkgc2VlICJSaXNjViIgYW5kICJSaXNrLVYiIHVzZWQg aW4gZmlsZSBwYXRocy4gIEkgcmVjb21tZW5kDQp5b3UgcGljayBvbmUgYW5kIHVzZSBpdCBjb25z aXN0ZW50bHkuICBJbiB0aGUgTWRlUGtnLCBJIHNlZQ0KUmlzY1Y2NCwgYW5kIG1hY3JvcyB1c2lu ZyBSSVNDViwgUklTQ1YzMiwgUklTQ1Y2NCwgYW5kIFJJU0NWMTI4Lg0Kd2hpY2ggc2VlbXMgY29u c2lzdGVudCBhbmQgZG9lcyBub3QgdXNlIGEgJy0nLiAgUGVyaGFwcyB1c2UgDQoiUmlzY1YiIGZv ciBjb250ZW50IHRoYXQgd29ya3MgZm9yIDMyLCA2NCwgYW5kIDEyOCBiaXQgYW5kDQpSaXNjVjMy LCBSaXNjVjY0LCBhbmQgUmlza1YxMjggZm9yIGNvbnRlbnQgaXMgc3BlY2lmaWMgdG8gdGhlDQpi aXQgd2lkdGg/DQoNClRoYW5rcywNCg0KTWlrZQ0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t LS0tDQo+IEZyb206IGRldmVsQGVkazIuZ3JvdXBzLmlvIDxkZXZlbEBlZGsyLmdyb3Vwcy5pbz4g T24NCj4gQmVoYWxmIE9mIERhbmllbCBTY2hhZWZlcg0KPiBTZW50OiBUdWVzZGF5LCBKdW5lIDIs IDIwMjAgOTo1MiBBTQ0KPiBUbzogZGV2ZWxAZWRrMi5ncm91cHMuaW8NCj4gQ2M6IExlaWYgTGlu ZGhvbG0gPGxlaWZAbnV2aWFpbmMuY29tPjsgR2lsYmVydCBDaGVuDQo+IDxnaWxiZXJ0LmNoZW5A aHBlLmNvbT47IEFibmVyIENoYW5nDQo+IDxhYm5lci5jaGFuZ0BocGUuY29tPjsgS2lubmV5LCBN aWNoYWVsIEQNCj4gPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPg0KPiBTdWJqZWN0OiBbZWRr Mi1kZXZlbF0gW1BBVENIIHY0IDEvMV0NCj4gUHJvY2Vzc29yUGtnL0xpYnJhcnk6IEFkZCBSaXNj VkVkazJTYmlMaWINCj4gDQo+IExpYnJhcnkgcHJvdmlkZXMgaW50ZXJmYWNlcyB0byBpbnZva2Ug U0JJIGVjYWxscy4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IERhbmllbCBTY2hhZWZlciA8ZGFuaWVs LnNjaGFlZmVyQGhwZS5jb20+DQo+IA0KPiBDYzogTGVpZiBMaW5kaG9sbSA8bGVpZkBudXZpYWlu Yy5jb20+DQo+IENjOiBHaWxiZXJ0IENoZW4gPGdpbGJlcnQuY2hlbkBocGUuY29tPg0KPiBDYzog QWJuZXIgQ2hhbmcgPGFibmVyLmNoYW5nQGhwZS5jb20+DQo+IENjOiBNaWNoYWVsIEQuIEtpbm5l eSA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+DQo+IC0tLQ0KPiAgU2lsaWNvbi9SSVNDLQ0K PiBWL1Byb2Nlc3NvclBrZy9MaWJyYXJ5L1Jpc2NWRWRrMlNiaUxpYi9SaXNjVkVkazJTYmlMaWIu aQ0KPiBuZiB8ICAyOCArDQo+ICBTaWxpY29uL1JJU0MtDQo+IFYvUHJvY2Vzc29yUGtnL0luY2x1 ZGUvTGlicmFyeS9SaXNjVkVkazJTYmlMaWIuaA0KPiB8IDU2MyArKysrKysrKysrKysNCj4gIFNp bGljb24vUklTQy0NCj4gVi9Qcm9jZXNzb3JQa2cvTGlicmFyeS9SaXNjVkVkazJTYmlMaWIvUmlz Y1ZFZGsyU2JpTGliLmMNCj4gfCA4OTcgKysrKysrKysrKysrKysrKysrKysNCj4gIDMgZmlsZXMg Y2hhbmdlZCwgMTQ4OCBpbnNlcnRpb25zKCspDQo+IA0KPiBkaWZmIC0tZ2l0IGEvU2lsaWNvbi9S SVNDLQ0KPiBWL1Byb2Nlc3NvclBrZy9MaWJyYXJ5L1Jpc2NWRWRrMlNiaUxpYi9SaXNjVkVkazJT YmlMaWIuaQ0KPiBuZiBiL1NpbGljb24vUklTQy0NCj4gVi9Qcm9jZXNzb3JQa2cvTGlicmFyeS9S aXNjVkVkazJTYmlMaWIvUmlzY1ZFZGsyU2JpTGliLmkNCj4gbmYNCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi42NjVkY2JmNDBlMDENCj4gLS0tIC9kZXYvbnVs bA0KPiArKysgYi9TaWxpY29uL1JJU0MtDQo+IFYvUHJvY2Vzc29yUGtnL0xpYnJhcnkvUmlzY1ZF ZGsyU2JpTGliL1Jpc2NWRWRrMlNiaUxpYi5pDQo+IG5mDQo+IEBAIC0wLDAgKzEsMjggQEANCj4g KyMjIEBmaWxlDQo+IA0KPiANCj4gKyMgUklTQy1WIExpYnJhcnkgdG8gY2FsbCBTQkkgZWNhbGxz DQo+IA0KPiANCj4gKyMNCj4gDQo+IA0KPiArIyAgQ29weXJpZ2h0IChjKSAyMDIwLCBIZXdsZXR0 IFBhY2thcmQgRW50ZXJwcmlzZQ0KPiBEZXZlbG9wbWVudCBMUC4gQWxsIHJpZ2h0cyByZXNlcnZl ZC48QlI+DQo+IA0KPiANCj4gKyMNCj4gDQo+IA0KPiArIyAgU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gDQo+IA0KPiArIw0KPiANCj4gDQo+ICsjIw0KPiAN Cj4gDQo+ICsNCj4gDQo+IA0KPiArW0RlZmluZXNdDQo+IA0KPiANCj4gKyAgSU5GX1ZFUlNJT04g ICAgPSAweDAwMDEwMDFiDQo+IA0KPiANCj4gKyAgQkFTRV9OQU1FICAgICAgPSBSaXNjVkVkazJT YmlMaWINCj4gDQo+IA0KPiArICBGSUxFX0dVSUQgICAgICA9IDBERjFCQkJELUY3RTUtNEU4QS1C Q0YxLTlENjNEMkREOUZERA0KPiANCj4gDQo+ICsgIE1PRFVMRV9UWVBFICAgID0gQkFTRQ0KPiAN Cj4gDQo+ICsgIFZFUlNJT05fU1RSSU5HID0gMS4wDQo+IA0KPiANCj4gKyAgTElCUkFSWV9DTEFT UyAgPSBSaXNjVkVkazJTYmlMaWINCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gK1tTb3VyY2VzXQ0K PiANCj4gDQo+ICsgIFJpc2NWRWRrMlNiaUxpYi5jDQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICtb UGFja2FnZXNdDQo+IA0KPiANCj4gKyAgTWRlUGtnL01kZVBrZy5kZWMNCj4gDQo+IA0KPiArICBT aWxpY29uL1JJU0MtVi9Qcm9jZXNzb3JQa2cvUmlzY1ZQcm9jZXNzb3JQa2cuZGVjDQo+IA0KPiAN Cj4gKyAgUGxhdGZvcm0vUklTQy1WL1BsYXRmb3JtUGtnL1Jpc2NWUGxhdGZvcm1Qa2cuZGVjDQo+ IA0KPiANCj4gKw0KPiANCj4gDQo+ICtbTGlicmFyeUNsYXNzZXNdDQo+IA0KPiANCj4gKyAgQmFz ZUxpYg0KPiANCj4gDQo+ICsgIFJpc2NWT3BlbnNiaUxpYg0KPiANCj4gDQo+IGRpZmYgLS1naXQg YS9TaWxpY29uL1JJU0MtDQo+IFYvUHJvY2Vzc29yUGtnL0luY2x1ZGUvTGlicmFyeS9SaXNjVkVk azJTYmlMaWIuaA0KPiBiL1NpbGljb24vUklTQy0NCj4gVi9Qcm9jZXNzb3JQa2cvSW5jbHVkZS9M aWJyYXJ5L1Jpc2NWRWRrMlNiaUxpYi5oDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4 IDAwMDAwMDAwMDAwMC4uYzFhZTMxNzYxNDdmDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvU2ls aWNvbi9SSVNDLQ0KPiBWL1Byb2Nlc3NvclBrZy9JbmNsdWRlL0xpYnJhcnkvUmlzY1ZFZGsyU2Jp TGliLmgNCj4gQEAgLTAsMCArMSw1NjMgQEANCj4gKy8qKiBAZmlsZQ0KPiANCj4gDQo+ICsgIExp YnJhcnkgdG8gY2FsbCB0aGUgUklTQy1WIFNCSSBlY2FsbHMNCj4gDQo+IA0KPiArDQo+IA0KPiAN Cj4gKyAgQ29weXJpZ2h0IChjKSAyMDIwLCBIZXdsZXR0IFBhY2thcmQgRGV2ZWxvcG1lbnQgTFAu DQo+IEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiANCj4gDQo+ICsNCj4gDQo+IA0KPiArICBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiANCj4gDQo+ICsN Cj4gDQo+IA0KPiArICBAcGFyIEdsb3NzYXJ5Og0KPiANCj4gDQo+ICsgICAgLSBIYXJ0IC0gSGFy ZHdhcmUgVGhyZWFkLCBzaW1pbGFyIHRvIGEgQ1BVIGNvcmUNCj4gDQo+IA0KPiArKiovDQo+IA0K PiANCj4gKw0KPiANCj4gDQo+ICsjaWZuZGVmIFJJU0NWX1NCSV9MSUJfSF8NCj4gDQo+IA0KPiAr I2RlZmluZSBSSVNDVl9TQklfTElCX0hfDQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsjaW5jbHVk ZSA8VWVmaS5oPg0KPiANCj4gDQo+ICsjaW5jbHVkZSA8SW5kdXN0cnlTdGFuZGFyZC9SaXNjVk9w ZW5zYmkuaD4NCj4gDQo+IA0KPiArI2luY2x1ZGUgPHNiaS9zYmlfc2NyYXRjaC5oPg0KPiANCj4g DQo+ICsjaW5jbHVkZSA8c2JpL3NiaV9wbGF0Zm9ybS5oPg0KPiANCj4gDQo+ICsNCj4gDQo+IA0K PiArLy8NCj4gDQo+IA0KPiArLy8gRURLMiBPcGVuU0JJIEZpcm13YXJlIGV4dGVuc2lvbi4NCj4g DQo+IA0KPiArLy8NCj4gDQo+IA0KPiArI2RlZmluZSBTQklfRURLMl9GV19FWFQNCj4gKFNCSV9F WFRfRklSTVdBUkVfQ09ERV9CQVNFX1NUQVJUIHwgU0JJX09QRU5TQklfSU1QSUQpDQo+IA0KPiAN Cj4gKy8vDQo+IA0KPiANCj4gKy8vIEVESzIgT3BlblNCSSBGaXJtd2FyZSBleHRlbnNpb24gZnVu Y3Rpb25zLg0KPiANCj4gDQo+ICsvLw0KPiANCj4gDQo+ICsjZGVmaW5lIFNCSV9FWFRfRldfTVND UkFUQ0hfRlVOQyAgICAgICAgMA0KPiANCj4gDQo+ICsjZGVmaW5lIFNCSV9FWFRfRldfTVNDUkFU Q0hfSEFSVElEX0ZVTkMgMQ0KPiANCj4gDQo+ICsNCj4gDQo+IA0KPiArLy8NCj4gDQo+IA0KPiAr Ly8gRURLMiBPcGVuU0JJIGZpcm13YXJlIGV4dGVuc2lvbiByZXR1cm4gc3RhdHVzLg0KPiANCj4g DQo+ICsvLw0KPiANCj4gDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+IA0KPiANCj4gKyAgVUlOVE4g RXJyb3I7ICAgLy8vPCBTQkkgc3RhdHVzIGNvZGUNCj4gDQo+IA0KPiArICBVSU5UTiBWYWx1ZTsg ICAvLy88IFZhbHVlIHJldHVybmVkDQo+IA0KPiANCj4gK30gU2JpUmV0Ow0KPiANCj4gDQo+ICsN Cj4gDQo+IA0KPiArLyoqDQo+IA0KPiANCj4gKyAgR2V0IHRoZSBpbXBsZW1lbnRlZCBTQkkgc3Bl Y2lmaWNhdGlvbiB2ZXJzaW9uDQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsgIFRoZSBtaW5vciBu dW1iZXIgb2YgdGhlIFNCSSBzcGVjaWZpY2F0aW9uIGlzIGVuY29kZWQNCj4gaW4gdGhlIGxvdyAy NCBiaXRzLA0KPiANCj4gDQo+ICsgIHdpdGggdGhlIG1ham9yIG51bWJlciBlbmNvZGVkIGluIHRo ZSBuZXh0IDcgYml0cy4NCj4gQml0IDMyIG11c3QgYmUgMCBhbmQgaXMNCj4gDQo+IA0KPiArICBy ZXNlcnZlZCBmb3IgZnV0dXJlIGV4cGFuc2lvbi4NCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKyAg QHBhcmFtW291dF0gU3BlY1ZlcnNpb24gICAgICAgICAgVGhlIFZlcnNpb24gb2YgdGhlDQo+IFNC SSBzcGVjaWZpY2F0aW9uLg0KPiANCj4gDQo+ICsqKi8NCj4gDQo+IA0KPiArVk9JRA0KPiANCj4g DQo+ICtFRklBUEkNCj4gDQo+IA0KPiArU2JpR2V0U3BlY1ZlcnNpb24gKA0KPiANCj4gDQo+ICsg IE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgKlNwZWNWZXJzaW9uDQo+IA0KPiANCj4g KyAgKTsNCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKy8qKg0KPiANCj4gDQo+ICsgIEdldCB0aGUg U0JJIGltcGxlbWVudGF0aW9uIElEDQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsgIFRoaXMgSUQg aXMgdXNlZCB0byBpZGVuZXRpZnkgYSBzcGVjaWZpYyBTQkkNCj4gaW1wbGVtZW50YXRpb24gaW4g b3JkZXIgdG8gd29yaw0KPiANCj4gDQo+ICsgIGFyb3VuZCBhbnkgcXVpcmtzIGl0IG1pZ2h0IGhh dmUuDQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsgIEBwYXJhbVtvdXRdIEltcGxJZCAgICAgICAg ICAgICAgIFRoZSBJRCBvZiB0aGUgU0JJDQo+IGltcGxlbWVudGF0aW9uLg0KPiANCj4gDQo+ICsq Ki8NCj4gDQo+IA0KPiArVk9JRA0KPiANCj4gDQo+ICtFRklBUEkNCj4gDQo+IA0KPiArU2JpR2V0 SW1wbElkICgNCj4gDQo+IA0KPiArICBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgKklt cGxJZA0KPiANCj4gDQo+ICsgICk7DQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsvKioNCj4gDQo+ IA0KPiArICBHZXQgdGhlIFNCSSBpbXBsZW1lbnRhdGlvbiB2ZXJzaW9uDQo+IA0KPiANCj4gKw0K PiANCj4gDQo+ICsgIFRoZSB2ZXJzaW9uIG9mIHRoaXMgU0JJIGltcGxlbWVudGF0aW9uLg0KPiAN Cj4gDQo+ICsgIFRoZSBlbmNvZGluZyBvZiB0aGlzIG51bWJlciBpcyBkZXRlcm1pbmVkIGJ5IHRo ZQ0KPiBzcGVjaWZpYyBTQkkgaW1wbGVtZW50YXRpb24uDQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ ICsgIEBwYXJhbVtvdXRdIEltcGxWZXJzaW9uICAgICAgICAgIFRoZSB2ZXJzaW9uIG9mIHRoZQ0K PiBTQkkgaW1wbGVtZW50YXRpb24uDQo+IA0KPiANCj4gKyoqLw0KPiANCj4gDQo+ICtWT0lEDQo+ IA0KPiANCj4gK0VGSUFQSQ0KPiANCj4gDQo+ICtTYmlHZXRJbXBsVmVyc2lvbiAoDQo+IA0KPiAN Cj4gKyAgT1VUIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAqSW1wbFZlcnNpb24NCj4gDQo+ IA0KPiArICApOw0KPiANCj4gDQo+ICsNCj4gDQo+IA0KPiArLyoqDQo+IA0KPiANCj4gKyAgUHJv YmUgd2hldGhlciBhbiBTQkkgZXh0ZW5zaW9uIGlzIGF2YWlsYWJsZQ0KPiANCj4gDQo+ICsNCj4g DQo+IA0KPiArICBQcm9iZVJlc3VsdCBpcyBzZXQgdG8gMCBpZiB0aGUgZXh0ZW5zaW9uIGlzIG5v dA0KPiBhdmFpbGFibGUgb3IgdG8gYW4gZXh0ZW5zaW9uDQo+IA0KPiANCj4gKyAgc3BlY2lmaWVk IHZhbHVlIGlmIGl0IGlzIGF2YWlsYWJsZS4NCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKyAgQHBh cmFtW2luXSAgRXh0ZW5zaW9uSWQgICAgICAgICAgVGhlIGV4dGVuc2lvbiBJRC4NCj4gDQo+IA0K PiArICBAcGFyYW1bb3V0XSBQcm9iZVJlc3VsdCAgICAgICAgICBUaGUgcmV0dXJuIHZhbHVlIG9m DQo+IHRoZSBwcm9iZS4NCj4gDQo+IA0KPiArKiovDQo+IA0KPiANCj4gK1ZPSUQNCj4gDQo+IA0K PiArRUZJQVBJDQo+IA0KPiANCj4gK1NiaVByb2JlRXh0ZW5zaW9uICgNCj4gDQo+IA0KPiArICBJ TiAgSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBFeHRlbnNpb25JZCwNCj4gDQo+IA0KPiAr ICBPVVQgSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICpQcm9iZVJlc3VsdA0KPiANCj4gDQo+ ICsgICk7DQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsvKioNCj4gDQo+IA0KPiArICBHZXQgdGhl IENQVSdzIHZlbmRvciBJRA0KPiANCj4gDQo+ICsNCj4gDQo+IA0KPiArICBSZWFkcyB0aGUgbXZl bmRvcmlkIENTUi4NCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKyAgQHBhcmFtW291dF0gTWFjaGlu ZVZlbmRvcklkICAgICAgVGhlIENQVSdzIHZlbmRvciBJRC4NCj4gDQo+IA0KPiArKiovDQo+IA0K PiANCj4gK1ZPSUQNCj4gDQo+IA0KPiArRUZJQVBJDQo+IA0KPiANCj4gK1NiaUdldE1hY2hpbmVW ZW5kb3JJZCAoDQo+IA0KPiANCj4gKyAgT1VUIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAq TWFjaGluZVZlbmRvcklkDQo+IA0KPiANCj4gKyAgKTsNCj4gDQo+IA0KPiArDQo+IA0KPiANCj4g Ky8qKg0KPiANCj4gDQo+ICsgIEdldCB0aGUgQ1BVJ3MgYXJjaGl0ZWN0dXJlIElEDQo+IA0KPiAN Cj4gKw0KPiANCj4gDQo+ICsgIFJlYWRzIHRoZSBtYXJjaGlkIENTUi4NCj4gDQo+IA0KPiArDQo+ IA0KPiANCj4gKyAgQHBhcmFtW291dF0gTWFjaGluZUFyY2hJZCAgICAgICAgVGhlIENQVSdzDQo+ IGFyY2hpdGVjdHVyZSBJRC4NCj4gDQo+IA0KPiArKiovDQo+IA0KPiANCj4gK1ZPSUQNCj4gDQo+ IA0KPiArRUZJQVBJDQo+IA0KPiANCj4gK1NiaUdldE1hY2hpbmVBcmNoSWQgKA0KPiANCj4gDQo+ ICsgIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgKk1hY2hpbmVBcmNoSWQNCj4gDQo+ IA0KPiArICApOw0KPiANCj4gDQo+ICsNCj4gDQo+IA0KPiArLyoqDQo+IA0KPiANCj4gKyAgR2V0 IHRoZSBDUFUncyBpbXBsZW1lbnRhdGlvbiBJRA0KPiANCj4gDQo+ICsNCj4gDQo+IA0KPiArICBS ZWFkcyB0aGUgbWltcGlkIENTUi4NCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKyAgQHBhcmFtW291 dF0gTWFjaGluZUltcGxJZCAgICAgICAgVGhlIENQVSdzDQo+IGltcGxlbWVudGF0aW9uIElELg0K PiANCj4gDQo+ICsqKi8NCj4gDQo+IA0KPiArVk9JRA0KPiANCj4gDQo+ICtFRklBUEkNCj4gDQo+ IA0KPiArU2JpR2V0TWFjaGluZUltcGxJZCAoDQo+IA0KPiANCj4gKyAgT1VUIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICAqTWFjaGluZUltcGxJZA0KPiANCj4gDQo+ICsgICk7DQo+IA0KPiAN Cj4gKw0KPiANCj4gDQo+ICsvKioNCj4gDQo+IA0KPiArICBQb2xpdGVseSBhc2sgdGhlIFNCSSB0 byBzdGFydCBhIGdpdmVuIGhhcnQuDQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsgIFRoaXMgY2Fs bCBtYXkgcmV0dXJuIGJlZm9yZSB0aGUgaGFydCBoYXMgYWN0dWFsbHkNCj4gc3RhcnRlZCBleGVj dXRpbmcsIGlmIHRoZQ0KPiANCj4gDQo+ICsgIFNCSSBpbXBsZW1lbnRhdGlvbiBjYW4gZ3VhcmFu dGVlIHRoYXQgdGhlIGhhcnQgaXMNCj4gYWN0dWFsbHkgZ29pbmcgdG8gc3RhcnQuDQo+IA0KPiAN Cj4gKw0KPiANCj4gDQo+ICsgIEJlZm9yZSB0aGUgaGFydCBqdW1wcyB0byBTdGFydEFkZHIsIHRo ZSBoYXJ0IE1VU1QNCj4gY29uZmlndXJlIFBNUCBpZiBwcmVzZW50DQo+IA0KPiANCj4gKyAgYW5k IHN3aXRjaCB0byBTLW1vZGUuDQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsgIEBwYXJhbVtpbl0g IEhhcnRJZCAgICAgICAgICAgICAgIFRoZSBpZCBvZiB0aGUgaGFydA0KPiB0byBzdGFydC4NCj4g DQo+IA0KPiArICBAcGFyYW1baW5dICBTdGFydEFkZHIgICAgICAgICAgICBUaGUgcGh5c2ljYWwN Cj4gYWRkcmVzcywgd2hlcmUgdGhlIGhhcnQgc3RhcnRzDQo+IA0KPiANCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW5nIGZyb20uDQo+IA0KPiANCj4gKyAgQHBh cmFtW2luXSAgUHJpdiAgICAgICAgICAgICAgICAgQW4gWExFTi1iaXQgdmFsdWUsDQo+IHdoaWNo IHdpbGwgYmUgaW4gcmVnaXN0ZXINCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBhMSB3aGVuIHRoZSBoYXJ0DQo+IHN0YXJ0cy4NCj4gDQo+IA0KPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICBIYXJ0IHdhcyBzdG9wcGVkIGFuZA0KPiB3aWxs IHN0YXJ0IGV4ZWN1dGluZyBmcm9tIFN0YXJ0QWRkci4NCj4gDQo+IA0KPiArICBAcmV0dmFsIEVG SV9MT0FEX0VSUk9SICAgICAgICAgICBTdGFydEFkZHIgaXMgbm90DQo+IHZhbGlkLCBwb3NzaWJs eSBkdWUgdG8gZm9sbG93aW5nIHJlYXNvbnM6DQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0gSXQgaXMgbm90IGEgdmFsaWQNCj4gcGh5c2ljYWwgYWRkcmVz cy4NCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGUg YWRkcmVzcyBpcw0KPiBwcm9oaWJpdGVkIGJ5IFBNUCB0byBydW4gaW4NCj4gDQo+IA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBlcnZpc29yIG1vZGUuDQo+IA0K PiANCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICAgSGFydElkIGlzIG5vdCBh DQo+IHZhbGlkIGhhcnQgaWQNCj4gDQo+IA0KPiArICBAcmV0dmFsIEVGSV9BTFJFQURZX1NUQVJU RUQgICAgICBUaGUgaGFydCBpcyBhbHJlYWR5DQo+IHJ1bm5pbmcuDQo+IA0KPiANCj4gKyAgQHJl dHZhbCBvdGhlciAgICAgICAgICAgICAgICAgICAgVGhlIHN0YXJ0IHJlcXVlc3QNCj4gZmFpbGVk IGZvciB1bmtub3duIHJlYXNvbnMuDQo+IA0KPiANCj4gKyoqLw0KPiANCj4gDQo+ICtFRklfU1RB VFVTDQo+IA0KPiANCj4gK0VGSUFQSQ0KPiANCj4gDQo+ICtTYmlIYXJ0U3RhcnQgKA0KPiANCj4g DQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgSGFydElkLA0KPiANCj4g DQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBZGRyLA0KPiAN Cj4gDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpdg0KPiANCj4g DQo+ICsgICk7DQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsvKioNCj4gDQo+IA0KPiArICBSZXR1 cm4gZXhlY3V0aW9uIG9mIHRoZSBjYWxsaW5nIGhhcnQgdG8gU0JJLg0KPiANCj4gDQo+ICsNCj4g DQo+IA0KPiArICBNVVNUIGJlIGNhbGxlZCBpbiBTLU1vZGUgd2l0aCB1c2VyIGludGVycnVwdHMN Cj4gZGlzYWJsZWQuDQo+IA0KPiANCj4gKyAgVGhpcyBjYWxsIGlzIG5vdCBleHBlY3RlZCB0byBy ZXR1cm4sIHVubGVzcyBhIGZhaWx1cmUNCj4gb2NjdXJzLg0KPiANCj4gDQo+ICsNCj4gDQo+IA0K PiArICBAcmV0dmFsICAgICBFRklfU1VDQ0VTUyAgICAgICAgICBOZXZlciBvY2N1cnMuIFdoZW4N Cj4gc3VjY2Vzc2Z1bCwgdGhlIGNhbGwgZG9lcyBub3QgcmV0dXJuLg0KPiANCj4gDQo+ICsgIEBy ZXR2YWwgICAgIG90aGVyICAgICAgICAgICAgICAgIEZhaWxlZCB0byBzdG9wIGhhcmQNCj4gZm9y IGFuIHVua25vd24gcmVhc29uLg0KPiANCj4gDQo+ICsqKi8NCj4gDQo+IA0KPiArRUZJX1NUQVRV Uw0KPiANCj4gDQo+ICtFRklBUEkNCj4gDQo+IA0KPiArU2JpSGFydFN0b3AgKA0KPiANCj4gDQo+ ICsgICk7DQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsvKioNCj4gDQo+IA0KPiArICBHZXQgdGhl IGN1cnJlbnQgc3RhdHVzIG9mIGEgaGFydC4NCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKyAgU2lu Y2UgaGFydHMgY2FuIHRyYW5zaXRpb24gYmV0d2VlbiBzdGF0ZXMgYXQgYW55DQo+IHRpbWUsIHRo ZSBzdGF0dXMgcmV0cmlldmVkDQo+IA0KPiANCj4gKyAgYnkgdGhpcyBmdW5jdGlvbiBtYXkgYWxy ZWFkeSBiZSBvdXQgb2YgZGF0ZSwgb25jZSBpdA0KPiByZXR1cm5zLg0KPiANCj4gDQo+ICsNCj4g DQo+IA0KPiArICBQb3NzaWJsZSB2YWx1ZXMgZm9yIEhhcnRTdGF0dXMgYXJlOg0KPiANCj4gDQo+ ICsgIDA6IFNUQVJURUQNCj4gDQo+IA0KPiArICAxOiBTVE9QUEVEDQo+IA0KPiANCj4gKyAgMjog U1RBUlRfUkVRVUVTVF9QRU5ESU5HDQo+IA0KPiANCj4gKyAgMzogU1RPUF9SRVFVRVNUX1BFTkRJ TkcNCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKyAgQHBhcmFtW291dF0gSGFydFN0YXR1cyAgICAg ICAgICAgVGhlIHBvaW50ZXIgaW4gd2hpY2gNCj4gdGhlIGhhcnQncyBzdGF0dXMgaXMNCj4gDQo+ IA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZWQuDQo+IA0KPiAN Cj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgVGhlIG9wZXJhdGlvbg0KPiBz dWNjZWVkcy4NCj4gDQo+IA0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgICBB IHBhcmFtZXRlciBpcw0KPiBpbnZhbGlkLg0KPiANCj4gDQo+ICsqKi8NCj4gDQo+IA0KPiArRUZJ X1NUQVRVUw0KPiANCj4gDQo+ICtFRklBUEkNCj4gDQo+IA0KPiArU2JpSGFydEdldFN0YXR1cyAo DQo+IA0KPiANCj4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICBIYXJ0SWQs DQo+IA0KPiANCj4gKyAgT1VUIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICpIYXJ0U3Rh dHVzDQo+IA0KPiANCj4gKyAgKTsNCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKy8vLw0KPiANCj4g DQo+ICsvLy8gVGltZXIgZXh0ZW5zaW9uDQo+IA0KPiANCj4gKy8vLw0KPiANCj4gDQo+ICsNCj4g DQo+IA0KPiArLyoqDQo+IA0KPiANCj4gKyAgQ2xlYXIgcGVuZGluZyB0aW1lciBpbnRlcnJ1cHQg Yml0IGFuZCBzZXQgdGltZXIgZm9yDQo+IG5leHQgZXZlbnQgYWZ0ZXIgVGltZS4NCj4gDQo+IA0K PiArDQo+IA0KPiANCj4gKyAgVG8gY2xlYXIgdGhlIHRpbWVyIHdpdGhvdXQgc2NoZWR1bGluZyBh IHRpbWVyIGV2ZW50LA0KPiBzZXQgVGltZSB0byBhDQo+IA0KPiANCj4gKyAgcHJhY3RpY2FsbHkg aW5maW5pdGUgdmFsdWUgb3IgbWFzayB0aGUgdGltZXINCj4gaW50ZXJydXB0IGJ5IGNsZWFyaW5n IHNpZS5TVElFLg0KPiANCj4gDQo+ICsNCj4gDQo+IA0KPiArICBAcGFyYW1baW5dICBUaW1lICAg ICAgICAgICAgICAgICBUaGUgdGltZSBvZmZzZXQgdG8NCj4gdGhlIG5leHQgc2NoZWR1bGVkIHRp bWVyIGludGVycnVwdC4NCj4gDQo+IA0KPiArKiovDQo+IA0KPiANCj4gK1ZPSUQNCj4gDQo+IA0K PiArRUZJQVBJDQo+IA0KPiANCj4gK1NiaVNldFRpbWVyICgNCj4gDQo+IA0KPiArICBJTiAgVUlO VDY0ICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWUNCj4gDQo+IA0KPiArICApOw0KPiANCj4g DQo+ICsNCj4gDQo+IA0KPiArLy8vDQo+IA0KPiANCj4gKy8vLyBJUEkgZXh0ZW5zaW9uDQo+IA0K PiANCj4gKy8vLw0KPiANCj4gDQo+ICsNCj4gDQo+IA0KPiArLyoqDQo+IA0KPiANCj4gKyAgU2Vu ZCBJUEkgdG8gYWxsIGhhcnRzIHNwZWNpZmllZCBpbiB0aGUgbWFzay4NCj4gDQo+IA0KPiArDQo+ IA0KPiANCj4gKyAgVGhlIGludGVycnVwdHMgYXJlIHJlZ2lzdGVyZWQgYXMgc3VwZXJ2aXNvciBz b2Z0d2FyZQ0KPiBpbnRlcnJ1cHRzIGF0IHRoZQ0KPiANCj4gDQo+ICsgIHJlY2VpdmluZyBoYXJ0 Lg0KPiANCj4gDQo+ICsNCj4gDQo+IA0KPiArICBAcGFyYW1baW5dICBIYXJ0TWFzayAgICAgICAg ICAgICBTY2FsYXIgYml0LXZlY3Rvcg0KPiBjb250YWluaW5nIGhhcnQgaWRzDQo+IA0KPiANCj4g KyAgQHBhcmFtW2luXSAgSGFydE1hc2tCYXNlICAgICAgICAgVGhlIHN0YXJ0aW5nIGhhcnRpZA0K PiBmcm9tIHdoaWNoIHRoZSBiaXQtdmVjdG9yDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbXVzdCBiZSBjb21wdXRlZC4gSWYNCj4gc2V0IHRvIC0xLCBIYXJ0 TWFzayBpcw0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGln bm9yZWQgYW5kIGFsbA0KPiBoYXJ0cyBhcmUgY29uc2lkZXJlZC4NCj4gDQo+IA0KPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICBJUEkgd2FzIHNlbnQgdG8gYWxsDQo+IHRoZSB0 YXJnZXRlZCBoYXJ0cy4NCj4gDQo+IA0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiAgICBFaXRoZXINCj4gaGFydF9tYXNrX2Jhc2Ugb3IgYW55IG9mIHRoZSBoYXJ0aWQNCj4gDQo+ IA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIGhhcnRfbWFzayBp cw0KPiBub3QgdmFsaWQgaS5lLiBlaXRoZXIgdGhlDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaGFydGlkIGlzIG5vdA0KPiBlbmFibGVkIGJ5IHRoZSBwbGF0 Zm9ybSBvciBpcw0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5vdCBhdmFpbGFibGUgdG8gdGhlDQo+IHN1cGVydmlzb3IuDQo+IA0KPiANCj4gKyoqLw0KPiAN Cj4gDQo+ICtFRklfU1RBVFVTDQo+IA0KPiANCj4gK0VGSUFQSQ0KPiANCj4gDQo+ICtTYmlTZW5k SXBpICgNCj4gDQo+IA0KPiArICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgKkhh cnRNYXNrLA0KPiANCj4gDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAg SGFydE1hc2tCYXNlDQo+IA0KPiANCj4gKyAgKTsNCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKy8v Lw0KPiANCj4gDQo+ICsvLy8gUmVtb3RlIGZlbmNlIGV4dGVuc2lvbg0KPiANCj4gDQo+ICsvLy8N Cj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKy8qKg0KPiANCj4gDQo+ICsgIEluc3RydWN0cyByZW1v dGUgaGFydHMgdG8gZXhlY3V0ZSBhIEZFTkNFLkkNCj4gaW5zdHJ1Y3Rpb24uDQo+IA0KPiANCj4g Kw0KPiANCj4gDQo+ICsgIEBwYXJhbVtpbl0gIEhhcnRNYXNrICAgICAgICAgICAgIFNjYWxhciBi aXQtdmVjdG9yDQo+IGNvbnRhaW5pbmcgaGFydCBpZHMNCj4gDQo+IA0KPiArICBAcGFyYW1baW5d ICBIYXJ0TWFza0Jhc2UgICAgICAgICBUaGUgc3RhcnRpbmcgaGFydGlkDQo+IGZyb20gd2hpY2gg dGhlIGJpdC12ZWN0b3INCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtdXN0IGJlIGNvbXB1dGVkLiBJZg0KPiBzZXQgdG8gLTEsIEhhcnRNYXNrIGlzDQo+IA0K PiANCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlZCBhbmQgYWxs DQo+IGhhcnRzIGFyZSBjb25zaWRlcmVkLg0KPiANCj4gDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgICAgICAgIElQSSB3YXMgc2VudCB0byBhbGwNCj4gdGhlIHRhcmdldGVkIGhhcnRz Lg0KPiANCj4gDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgIEVpdGhlcg0K PiBoYXJ0X21hc2tfYmFzZSBvciBhbnkgb2YgdGhlIGhhcnRpZA0KPiANCj4gDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gaGFydF9tYXNrIGlzDQo+IG5vdCB2YWxp ZCBpLmUuIGVpdGhlciB0aGUNCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBoYXJ0aWQgaXMgbm90DQo+IGVuYWJsZWQgYnkgdGhlIHBsYXRmb3JtIG9yIGlzDQo+ IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGF2YWlsYWJs ZSB0byB0aGUNCj4gc3VwZXJ2aXNvci4NCj4gDQo+IA0KPiArKiovDQo+IA0KPiANCj4gK0VGSV9T VEFUVVMNCj4gDQo+IA0KPiArRUZJQVBJDQo+IA0KPiANCj4gK1NiaVJlbW90ZUZlbmNlSSAoDQo+ IA0KPiANCj4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICpIYXJ0TWFzaywN Cj4gDQo+IA0KPiArICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIEhhcnRNYXNr QmFzZQ0KPiANCj4gDQo+ICsgICk7DQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsvKioNCj4gDQo+ IA0KPiArICBJbnN0cnVjdHMgdGhlIHJlbW90ZSBoYXJ0cyB0byBleGVjdXRlIG9uZSBvciBtb3Jl DQo+IFNGRU5DRS5WTUEgaW5zdHJ1Y3Rpb25zLg0KPiANCj4gDQo+ICsNCj4gDQo+IA0KPiArICBU aGUgU0ZFTkNFLlZNQSBjb3ZlcnMgdGhlIHJhbmdlIG9mIHZpcnR1YWwgYWRkcmVzc2VzDQo+IGJl dHdlZW4gU3RhcnRBYWRkciBhbmQgU2l6ZS4NCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKyAgVGhl IHJlbW90ZSBmZW5jZSBmdW5jdGlvbiBhY3RzIGFzIGEgZnVsbCB0bGIgZmx1c2ggaWYNCj4gKiBT dGFydEFkZHIgYW5kIHNpemUNCj4gDQo+IA0KPiArICBhcmUgYm90aCAwICogc2l6ZSBpcyBlcXVh bCB0byAyXlhMRU4tMQ0KPiANCj4gDQo+ICsNCj4gDQo+IA0KPiArICBAcGFyYW1baW5dICBIYXJ0 TWFzayAgICAgICAgICAgICBTY2FsYXIgYml0LXZlY3Rvcg0KPiBjb250YWluaW5nIGhhcnQgaWRz DQo+IA0KPiANCj4gKyAgQHBhcmFtW2luXSAgSGFydE1hc2tCYXNlICAgICAgICAgVGhlIHN0YXJ0 aW5nIGhhcnRpZA0KPiBmcm9tIHdoaWNoIHRoZSBiaXQtdmVjdG9yDQo+IA0KPiANCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVzdCBiZSBjb21wdXRlZC4gSWYNCj4gc2V0 IHRvIC0xLCBIYXJ0TWFzayBpcw0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlnbm9yZWQgYW5kIGFsbA0KPiBoYXJ0cyBhcmUgY29uc2lkZXJlZC4NCj4gDQo+ IA0KPiArICBAcGFyYW1baW5dICBTdGFydEFkZHIgICAgICAgICAgICBUaGUgZmlyc3QgYWRkcmVz cyBvZg0KPiB0aGUgYWZmZWN0ZWQgcmFuZ2UuDQo+IA0KPiANCj4gKyAgQHBhcmFtW2luXSAgU2l6 ZSAgICAgICAgICAgICAgICAgSG93IG1hbnkgYWRkcmVzc2VzDQo+IGFyZSBhZmZlY3RlZC4NCj4g DQo+IA0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICBJUEkgd2FzIHNlbnQg dG8gYWxsDQo+IHRoZSB0YXJnZXRlZCBoYXJ0cy4NCj4gDQo+IA0KPiArICBAcmV0dmFsIEVGSV9M T0FEX0VSUk9SICAgICAgICAgICBTdGFydEFkZHIgb3IgU2l6ZSBpcw0KPiBub3QgdmFsaWQuDQo+ IA0KPiANCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICAgRWl0aGVyDQo+IGhh cnRfbWFza19iYXNlIG9yIGFueSBvZiB0aGUgaGFydGlkDQo+IA0KPiANCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBoYXJ0X21hc2sgaXMNCj4gbm90IHZhbGlkIGku ZS4gZWl0aGVyIHRoZQ0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGhhcnRpZCBpcyBub3QNCj4gZW5hYmxlZCBieSB0aGUgcGxhdGZvcm0gb3IgaXMNCj4gDQo+ IA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgYXZhaWxhYmxlIHRv IHRoZQ0KPiBzdXBlcnZpc29yLg0KPiANCj4gDQo+ICsqKi8NCj4gDQo+IA0KPiArRUZJX1NUQVRV Uw0KPiANCj4gDQo+ICtFRklBUEkNCj4gDQo+IA0KPiArU2JpUmVtb3RlU2ZlbmNlVm1hICgNCj4g DQo+IA0KPiArICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgKkhhcnRNYXNrLA0K PiANCj4gDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgSGFydE1hc2tC YXNlLA0KPiANCj4gDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgU3Rh cnRBZGRyLA0KPiANCj4gDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAg U2l6ZQ0KPiANCj4gDQo+ICsgICk7DQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsvKioNCj4gDQo+ IA0KPiArICBJbnN0cnVjdHMgdGhlIHJlbW90ZSBoYXJ0cyB0byBleGVjdXRlIG9uZSBvciBtb3Jl DQo+IFNGRU5DRS5WTUEgaW5zdHJ1Y3Rpb25zLg0KPiANCj4gDQo+ICsNCj4gDQo+IA0KPiArICBU aGUgU0ZFTkNFLlZNQSBjb3ZlcnMgdGhlIHJhbmdlIG9mIHZpcnR1YWwgYWRkcmVzc2VzDQo+IGJl dHdlZW4gU3RhcnRBYWRkciBhbmQgU2l6ZS4NCj4gDQo+IA0KPiArICBDb3ZlcnMgb25seSB0aGUg Z2l2ZW4gQVNJRC4NCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKyAgVGhlIHJlbW90ZSBmZW5jZSBm dW5jdGlvbiBhY3RzIGFzIGEgZnVsbCB0bGIgZmx1c2ggaWYNCj4gKiBTdGFydEFkZHIgYW5kIHNp emUNCj4gDQo+IA0KPiArICBhcmUgYm90aCAwICogc2l6ZSBpcyBlcXVhbCB0byAyXlhMRU4tMQ0K PiANCj4gDQo+ICsNCj4gDQo+IA0KPiArICBAcGFyYW1baW5dICBIYXJ0TWFzayAgICAgICAgICAg ICBTY2FsYXIgYml0LXZlY3Rvcg0KPiBjb250YWluaW5nIGhhcnQgaWRzDQo+IA0KPiANCj4gKyAg QHBhcmFtW2luXSAgSGFydE1hc2tCYXNlICAgICAgICAgVGhlIHN0YXJ0aW5nIGhhcnRpZA0KPiBm cm9tIHdoaWNoIHRoZSBiaXQtdmVjdG9yDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbXVzdCBiZSBjb21wdXRlZC4gSWYNCj4gc2V0IHRvIC0xLCBIYXJ0TWFz ayBpcw0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9y ZWQgYW5kIGFsbA0KPiBoYXJ0cyBhcmUgY29uc2lkZXJlZC4NCj4gDQo+IA0KPiArICBAcGFyYW1b aW5dICBTdGFydEFkZHIgICAgICAgICAgICBUaGUgZmlyc3QgYWRkcmVzcyBvZg0KPiB0aGUgYWZm ZWN0ZWQgcmFuZ2UuDQo+IA0KPiANCj4gKyAgQHBhcmFtW2luXSAgU2l6ZSAgICAgICAgICAgICAg ICAgSG93IG1hbnkgYWRkcmVzc2VzDQo+IGFyZSBhZmZlY3RlZC4NCj4gDQo+IA0KPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICBJUEkgd2FzIHNlbnQgdG8gYWxsDQo+IHRoZSB0 YXJnZXRlZCBoYXJ0cy4NCj4gDQo+IA0KPiArICBAcmV0dmFsIEVGSV9MT0FEX0VSUk9SICAgICAg ICAgICBTdGFydEFkZHIgb3IgU2l6ZSBpcw0KPiBub3QgdmFsaWQuDQo+IA0KPiANCj4gKyAgQHJl dHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICAgRWl0aGVyDQo+IGhhcnRfbWFza19iYXNlIG9y IGFueSBvZiB0aGUgaGFydGlkDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZnJvbSBoYXJ0X21hc2sgaXMNCj4gbm90IHZhbGlkIGkuZS4gZWl0aGVyIHRoZQ0K PiANCj4gDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcnRpZCBpcyBu b3QNCj4gZW5hYmxlZCBieSB0aGUgcGxhdGZvcm0gb3IgaXMNCj4gDQo+IA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgYXZhaWxhYmxlIHRvIHRoZQ0KPiBzdXBlcnZp c29yLg0KPiANCj4gDQo+ICsqKi8NCj4gDQo+IA0KPiArRUZJX1NUQVRVUw0KPiANCj4gDQo+ICtF RklBUEkNCj4gDQo+IA0KPiArU2JpUmVtb3RlU2ZlbmNlVm1hQXNpZCAoDQo+IA0KPiANCj4gKyAg SU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICpIYXJ0TWFzaywNCj4gDQo+IA0KPiAr ICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIEhhcnRNYXNrQmFzZSwNCj4gDQo+ IA0KPiArICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWRkciwNCj4g DQo+IA0KPiArICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIFNpemUsDQo+IA0K PiANCj4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICBBc2lkDQo+IA0KPiAN Cj4gKyAgKTsNCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKy8qKg0KPiANCj4gDQo+ICsgIEluc3Ry dWN0cyB0aGUgcmVtb3RlIGhhcnRzIHRvIGV4ZWN1dGUgb25lIG9yIG1vcmUNCj4gU0ZFTkNFLkdW TUEgaW5zdHJ1Y3Rpb25zLg0KPiANCj4gDQo+ICsNCj4gDQo+IA0KPiArICBUaGUgU0ZFTkNFLkdW TUEgY292ZXJzIHRoZSByYW5nZSBvZiB2aXJ0dWFsIGFkZHJlc3Nlcw0KPiBiZXR3ZWVuIFN0YXJ0 QWFkZHIgYW5kIFNpemUuDQo+IA0KPiANCj4gKyAgQ292ZXJzIG9ubHkgdGhlIGdpdmVuIFZNSUQu DQo+IA0KPiANCj4gKyAgVGhpcyBmdW5jdGlvbiBjYWxsIGlzIG9ubHkgdmFsaWQgZm9yIGhhcnRz DQo+IGltcGxlbWVudGluZyB0aGUgaHlwZXJ2aXNvciBleHRlbnNpb24uDQo+IA0KPiANCj4gKw0K PiANCj4gDQo+ICsgIFRoZSByZW1vdGUgZmVuY2UgZnVuY3Rpb24gYWN0cyBhcyBhIGZ1bGwgdGxi IGZsdXNoIGlmDQo+ICogU3RhcnRBZGRyIGFuZCBzaXplDQo+IA0KPiANCj4gKyAgYXJlIGJvdGgg MCAqIHNpemUgaXMgZXF1YWwgdG8gMl5YTEVOLTENCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKyAg QHBhcmFtW2luXSAgSGFydE1hc2sgICAgICAgICAgICAgU2NhbGFyIGJpdC12ZWN0b3INCj4gY29u dGFpbmluZyBoYXJ0IGlkcw0KPiANCj4gDQo+ICsgIEBwYXJhbVtpbl0gIEhhcnRNYXNrQmFzZSAg ICAgICAgIFRoZSBzdGFydGluZyBoYXJ0aWQNCj4gZnJvbSB3aGljaCB0aGUgYml0LXZlY3Rvcg0K PiANCj4gDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgYmUgY29t cHV0ZWQuIElmDQo+IHNldCB0byAtMSwgSGFydE1hc2sgaXMNCj4gDQo+IA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVkIGFuZCBhbGwNCj4gaGFydHMgYXJlIGNv bnNpZGVyZWQuDQo+IA0KPiANCj4gKyAgQHBhcmFtW2luXSAgU3RhcnRBZGRyICAgICAgICAgICAg VGhlIGZpcnN0IGFkZHJlc3Mgb2YNCj4gdGhlIGFmZmVjdGVkIHJhbmdlLg0KPiANCj4gDQo+ICsg IEBwYXJhbVtpbl0gIFNpemUgICAgICAgICAgICAgICAgIEhvdyBtYW55IGFkZHJlc3Nlcw0KPiBh cmUgYWZmZWN0ZWQuDQo+IA0KPiANCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg ICAgSVBJIHdhcyBzZW50IHRvIGFsbA0KPiB0aGUgdGFyZ2V0ZWQgaGFydHMuDQo+IA0KPiANCj4g KyAgQHJldHZhbCBFRklfTE9BRF9FUlJPUiAgICAgICAgICAgU3RhcnRBZGRyIG9yIFNpemUgaXMN Cj4gbm90IHZhbGlkLg0KPiANCj4gDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAg ICAgIFNCSSBkb2VzIG5vdA0KPiBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiBvciBvbmUNCj4gDQo+ IA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgdGFyZ2V0IGhh cnRzDQo+IGRvZXMgbm90IHN1cHBvcnQgdGhlDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaHlwZXJ2aXNvcg0KPiBleHRlbnNpb24uDQo+IA0KPiANCj4gKyAg QHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICAgRWl0aGVyDQo+IGhhcnRfbWFza19iYXNl IG9yIGFueSBvZiB0aGUgaGFydGlkDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZnJvbSBoYXJ0X21hc2sgaXMNCj4gbm90IHZhbGlkIGkuZS4gZWl0aGVyIHRo ZQ0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcnRpZCBp cyBub3QNCj4gZW5hYmxlZCBieSB0aGUgcGxhdGZvcm0gb3IgaXMNCj4gDQo+IA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgYXZhaWxhYmxlIHRvIHRoZQ0KPiBzdXBl cnZpc29yLg0KPiANCj4gDQo+ICsqKi8NCj4gDQo+IA0KPiArRUZJX1NUQVRVUw0KPiANCj4gDQo+ ICtFRklBUEkNCj4gDQo+IA0KPiArU2JpUmVtb3RlSGZlbmNlR3ZtYVZtaWQgKA0KPiANCj4gDQo+ ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAqSGFydE1hc2ssDQo+IA0KPiAN Cj4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICBIYXJ0TWFza0Jhc2UsDQo+ IA0KPiANCj4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFkZHIs DQo+IA0KPiANCj4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICBTaXplLA0K PiANCj4gDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgVm1pZA0KPiAN Cj4gDQo+ICsgICk7DQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsvKioNCj4gDQo+IA0KPiArICBJ bnN0cnVjdHMgdGhlIHJlbW90ZSBoYXJ0cyB0byBleGVjdXRlIG9uZSBvciBtb3JlDQo+IFNGRU5D RS5HVk1BIGluc3RydWN0aW9ucy4NCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKyAgVGhlIFNGRU5D RS5HVk1BIGNvdmVycyB0aGUgcmFuZ2Ugb2YgdmlydHVhbCBhZGRyZXNzZXMNCj4gYmV0d2VlbiBT dGFydEFhZGRyIGFuZCBTaXplLg0KPiANCj4gDQo+ICsgIFRoaXMgZnVuY3Rpb24gY2FsbCBpcyBv bmx5IHZhbGlkIGZvciBoYXJ0cw0KPiBpbXBsZW1lbnRpbmcgdGhlIGh5cGVydmlzb3IgZXh0ZW5z aW9uLg0KPiANCj4gDQo+ICsNCj4gDQo+IA0KPiArICBUaGUgcmVtb3RlIGZlbmNlIGZ1bmN0aW9u IGFjdHMgYXMgYSBmdWxsIHRsYiBmbHVzaCBpZg0KPiAqIFN0YXJ0QWRkciBhbmQgc2l6ZQ0KPiAN Cj4gDQo+ICsgIGFyZSBib3RoIDAgKiBzaXplIGlzIGVxdWFsIHRvIDJeWExFTi0xDQo+IA0KPiAN Cj4gKw0KPiANCj4gDQo+ICsgIEBwYXJhbVtpbl0gIEhhcnRNYXNrICAgICAgICAgICAgIFNjYWxh ciBiaXQtdmVjdG9yDQo+IGNvbnRhaW5pbmcgaGFydCBpZHMNCj4gDQo+IA0KPiArICBAcGFyYW1b aW5dICBIYXJ0TWFza0Jhc2UgICAgICAgICBUaGUgc3RhcnRpbmcgaGFydGlkDQo+IGZyb20gd2hp Y2ggdGhlIGJpdC12ZWN0b3INCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBtdXN0IGJlIGNvbXB1dGVkLiBJZg0KPiBzZXQgdG8gLTEsIEhhcnRNYXNrIGlzDQo+ IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlZCBhbmQg YWxsDQo+IGhhcnRzIGFyZSBjb25zaWRlcmVkLg0KPiANCj4gDQo+ICsgIEBwYXJhbVtpbl0gIFN0 YXJ0QWRkciAgICAgICAgICAgIFRoZSBmaXJzdCBhZGRyZXNzIG9mDQo+IHRoZSBhZmZlY3RlZCBy YW5nZS4NCj4gDQo+IA0KPiArICBAcGFyYW1baW5dICBTaXplICAgICAgICAgICAgICAgICBIb3cg bWFueSBhZGRyZXNzZXMNCj4gYXJlIGFmZmVjdGVkLg0KPiANCj4gDQo+ICsgIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgICAgIElQSSB3YXMgc2VudCB0byBhbGwNCj4gdGhlIHRhcmdldGVk IGhhcnRzLg0KPiANCj4gDQo+ICsgIEByZXR2YWwgRUZJX0xPQURfRVJST1IgICAgICAgICAgIFN0 YXJ0QWRkciBvciBTaXplIGlzDQo+IG5vdCB2YWxpZC4NCj4gDQo+IA0KPiArICBAcmV0dmFsIEVG SV9VTlNVUFBPUlRFRCAgICAgICAgICBTQkkgZG9lcyBub3QNCj4gaW1wbGVtZW50IHRoaXMgZnVu Y3Rpb24gb3Igb25lDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgb2YgdGhlIHRhcmdldCBoYXJ0cw0KPiBkb2VzIG5vdCBzdXBwb3J0IHRoZQ0KPiANCj4gDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh5cGVydmlzb3INCj4gZXh0ZW5z aW9uLg0KPiANCj4gDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgIEVpdGhl cg0KPiBoYXJ0X21hc2tfYmFzZSBvciBhbnkgb2YgdGhlIGhhcnRpZA0KPiANCj4gDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gaGFydF9tYXNrIGlzDQo+IG5vdCB2 YWxpZCBpLmUuIGVpdGhlciB0aGUNCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBoYXJ0aWQgaXMgbm90DQo+IGVuYWJsZWQgYnkgdGhlIHBsYXRmb3JtIG9yIGlz DQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGF2YWls YWJsZSB0byB0aGUNCj4gc3VwZXJ2aXNvci4NCj4gDQo+IA0KPiArKiovDQo+IA0KPiANCj4gK0VG SV9TVEFUVVMNCj4gDQo+IA0KPiArRUZJQVBJDQo+IA0KPiANCj4gK1NiaVJlbW90ZUhmZW5jZUd2 bWEgKA0KPiANCj4gDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAqSGFy dE1hc2ssDQo+IA0KPiANCj4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICBI YXJ0TWFza0Jhc2UsDQo+IA0KPiANCj4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICAgICBTdGFydEFkZHIsDQo+IA0KPiANCj4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgICBTaXplDQo+IA0KPiANCj4gKyAgKTsNCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKy8q Kg0KPiANCj4gDQo+ICsgIEluc3RydWN0cyB0aGUgcmVtb3RlIGhhcnRzIHRvIGV4ZWN1dGUgb25l IG9yIG1vcmUNCj4gU0ZFTkNFLlZWTUEgaW5zdHJ1Y3Rpb25zLg0KPiANCj4gDQo+ICsNCj4gDQo+ IA0KPiArICBUaGUgU0ZFTkNFLkdWTUEgY292ZXJzIHRoZSByYW5nZSBvZiB2aXJ0dWFsIGFkZHJl c3Nlcw0KPiBiZXR3ZWVuIFN0YXJ0QWFkZHIgYW5kIFNpemUuDQo+IA0KPiANCj4gKyAgQ292ZXJz IG9ubHkgdGhlIGdpdmVuIEFTSUQuDQo+IA0KPiANCj4gKyAgVGhpcyBmdW5jdGlvbiBjYWxsIGlz IG9ubHkgdmFsaWQgZm9yIGhhcnRzDQo+IGltcGxlbWVudGluZyB0aGUgaHlwZXJ2aXNvciBleHRl bnNpb24uDQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsgIFRoZSByZW1vdGUgZmVuY2UgZnVuY3Rp b24gYWN0cyBhcyBhIGZ1bGwgdGxiIGZsdXNoIGlmDQo+ICogU3RhcnRBZGRyIGFuZCBzaXplDQo+ IA0KPiANCj4gKyAgYXJlIGJvdGggMCAqIHNpemUgaXMgZXF1YWwgdG8gMl5YTEVOLTENCj4gDQo+ IA0KPiArDQo+IA0KPiANCj4gKyAgQHBhcmFtW2luXSAgSGFydE1hc2sgICAgICAgICAgICAgU2Nh bGFyIGJpdC12ZWN0b3INCj4gY29udGFpbmluZyBoYXJ0IGlkcw0KPiANCj4gDQo+ICsgIEBwYXJh bVtpbl0gIEhhcnRNYXNrQmFzZSAgICAgICAgIFRoZSBzdGFydGluZyBoYXJ0aWQNCj4gZnJvbSB3 aGljaCB0aGUgYml0LXZlY3Rvcg0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG11c3QgYmUgY29tcHV0ZWQuIElmDQo+IHNldCB0byAtMSwgSGFydE1hc2sgaXMN Cj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVkIGFu ZCBhbGwNCj4gaGFydHMgYXJlIGNvbnNpZGVyZWQuDQo+IA0KPiANCj4gKyAgQHBhcmFtW2luXSAg U3RhcnRBZGRyICAgICAgICAgICAgVGhlIGZpcnN0IGFkZHJlc3Mgb2YNCj4gdGhlIGFmZmVjdGVk IHJhbmdlLg0KPiANCj4gDQo+ICsgIEBwYXJhbVtpbl0gIFNpemUgICAgICAgICAgICAgICAgIEhv dyBtYW55IGFkZHJlc3Nlcw0KPiBhcmUgYWZmZWN0ZWQuDQo+IA0KPiANCj4gKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICAgICAgICAgSVBJIHdhcyBzZW50IHRvIGFsbA0KPiB0aGUgdGFyZ2V0 ZWQgaGFydHMuDQo+IA0KPiANCj4gKyAgQHJldHZhbCBFRklfTE9BRF9FUlJPUiAgICAgICAgICAg U3RhcnRBZGRyIG9yIFNpemUgaXMNCj4gbm90IHZhbGlkLg0KPiANCj4gDQo+ICsgIEByZXR2YWwg RUZJX1VOU1VQUE9SVEVEICAgICAgICAgIFNCSSBkb2VzIG5vdA0KPiBpbXBsZW1lbnQgdGhpcyBm dW5jdGlvbiBvciBvbmUNCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBvZiB0aGUgdGFyZ2V0IGhhcnRzDQo+IGRvZXMgbm90IHN1cHBvcnQgdGhlDQo+IA0KPiAN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHlwZXJ2aXNvcg0KPiBleHRl bnNpb24uDQo+IA0KPiANCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICAgRWl0 aGVyDQo+IGhhcnRfbWFza19iYXNlIG9yIGFueSBvZiB0aGUgaGFydGlkDQo+IA0KPiANCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBoYXJ0X21hc2sgaXMNCj4gbm90 IHZhbGlkIGkuZS4gZWl0aGVyIHRoZQ0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGhhcnRpZCBpcyBub3QNCj4gZW5hYmxlZCBieSB0aGUgcGxhdGZvcm0gb3Ig aXMNCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgYXZh aWxhYmxlIHRvIHRoZQ0KPiBzdXBlcnZpc29yLg0KPiANCj4gDQo+ICsqKi8NCj4gDQo+IA0KPiAr RUZJX1NUQVRVUw0KPiANCj4gDQo+ICtFRklBUEkNCj4gDQo+IA0KPiArU2JpUmVtb3RlSGZlbmNl VnZtYUFzaWQgKA0KPiANCj4gDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAg ICAqSGFydE1hc2ssDQo+IA0KPiANCj4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICAgICBIYXJ0TWFza0Jhc2UsDQo+IA0KPiANCj4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAg ICAgICAgICAgICBTdGFydEFkZHIsDQo+IA0KPiANCj4gKyAgSU4gIFVJTlROICAgICAgICAgICAg ICAgICAgICAgICAgICBTaXplLA0KPiANCj4gDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgICAgQXNpZA0KPiANCj4gDQo+ICsgICk7DQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ ICsvKioNCj4gDQo+IA0KPiArICBJbnN0cnVjdHMgdGhlIHJlbW90ZSBoYXJ0cyB0byBleGVjdXRl IG9uZSBvciBtb3JlDQo+IFNGRU5DRS5WVk1BIGluc3RydWN0aW9ucy4NCj4gDQo+IA0KPiArDQo+ IA0KPiANCj4gKyAgVGhlIFNGRU5DRS5HVk1BIGNvdmVycyB0aGUgcmFuZ2Ugb2YgdmlydHVhbCBh ZGRyZXNzZXMNCj4gYmV0d2VlbiBTdGFydEFhZGRyIGFuZCBTaXplLg0KPiANCj4gDQo+ICsgIFRo aXMgZnVuY3Rpb24gY2FsbCBpcyBvbmx5IHZhbGlkIGZvciBoYXJ0cw0KPiBpbXBsZW1lbnRpbmcg dGhlIGh5cGVydmlzb3IgZXh0ZW5zaW9uLg0KPiANCj4gDQo+ICsNCj4gDQo+IA0KPiArICBUaGUg cmVtb3RlIGZlbmNlIGZ1bmN0aW9uIGFjdHMgYXMgYSBmdWxsIHRsYiBmbHVzaCBpZg0KPiAqIFN0 YXJ0QWRkciBhbmQgc2l6ZQ0KPiANCj4gDQo+ICsgIGFyZSBib3RoIDAgKiBzaXplIGlzIGVxdWFs IHRvIDJeWExFTi0xDQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsgIEBwYXJhbVtpbl0gIEhhcnRN YXNrICAgICAgICAgICAgIFNjYWxhciBiaXQtdmVjdG9yDQo+IGNvbnRhaW5pbmcgaGFydCBpZHMN Cj4gDQo+IA0KPiArICBAcGFyYW1baW5dICBIYXJ0TWFza0Jhc2UgICAgICAgICBUaGUgc3RhcnRp bmcgaGFydGlkDQo+IGZyb20gd2hpY2ggdGhlIGJpdC12ZWN0b3INCj4gDQo+IA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IGJlIGNvbXB1dGVkLiBJZg0KPiBzZXQg dG8gLTEsIEhhcnRNYXNrIGlzDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWdub3JlZCBhbmQgYWxsDQo+IGhhcnRzIGFyZSBjb25zaWRlcmVkLg0KPiANCj4g DQo+ICsgIEBwYXJhbVtpbl0gIFN0YXJ0QWRkciAgICAgICAgICAgIFRoZSBmaXJzdCBhZGRyZXNz IG9mDQo+IHRoZSBhZmZlY3RlZCByYW5nZS4NCj4gDQo+IA0KPiArICBAcGFyYW1baW5dICBTaXpl ICAgICAgICAgICAgICAgICBIb3cgbWFueSBhZGRyZXNzZXMNCj4gYXJlIGFmZmVjdGVkLg0KPiAN Cj4gDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgIElQSSB3YXMgc2VudCB0 byBhbGwNCj4gdGhlIHRhcmdldGVkIGhhcnRzLg0KPiANCj4gDQo+ICsgIEByZXR2YWwgRUZJX0xP QURfRVJST1IgICAgICAgICAgIFN0YXJ0QWRkciBvciBTaXplIGlzDQo+IG5vdCB2YWxpZC4NCj4g DQo+IA0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgICBTQkkgZG9lcyBub3QN Cj4gaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gb3Igb25lDQo+IA0KPiANCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHRhcmdldCBoYXJ0cw0KPiBkb2VzIG5vdCBz dXBwb3J0IHRoZQ0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGh5cGVydmlzb3INCj4gZXh0ZW5zaW9uLg0KPiANCj4gDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFM SURfUEFSQU1FVEVSICAgIEVpdGhlcg0KPiBoYXJ0X21hc2tfYmFzZSBvciBhbnkgb2YgdGhlIGhh cnRpZA0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20g aGFydF9tYXNrIGlzDQo+IG5vdCB2YWxpZCBpLmUuIGVpdGhlciB0aGUNCj4gDQo+IA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJ0aWQgaXMgbm90DQo+IGVuYWJsZWQg YnkgdGhlIHBsYXRmb3JtIG9yIGlzDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbm90IGF2YWlsYWJsZSB0byB0aGUNCj4gc3VwZXJ2aXNvci4NCj4gDQo+IA0K PiArKiovDQo+IA0KPiANCj4gK0VGSV9TVEFUVVMNCj4gDQo+IA0KPiArRUZJQVBJDQo+IA0KPiAN Cj4gK1NiaVJlbW90ZUhmZW5jZVZ2bWEgKA0KPiANCj4gDQo+ICsgIElOICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgICAqSGFydE1hc2ssDQo+IA0KPiANCj4gKyAgSU4gIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICAgICBIYXJ0TWFza0Jhc2UsDQo+IA0KPiANCj4gKyAgSU4gIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFkZHIsDQo+IA0KPiANCj4gKyAgSU4gIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgICBTaXplDQo+IA0KPiANCj4gKyAgKTsNCj4gDQo+ IA0KPiArDQo+IA0KPiANCj4gKy8vLw0KPiANCj4gDQo+ICsvLy8gVmVuZG9yIFNwZWNpZmljIGV4 dGVuc2lvbiBzcGFjZTogRXh0ZW5zaW9uIElkcw0KPiAweDA5MDAwMDAwIHRocm91Z2ggMHgwOUZG RkZGRg0KPiANCj4gDQo+ICsvLy8NCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKy8qKg0KPiANCj4g DQo+ICsgIENhbGwgYSBmdW5jdGlvbiBpbiBhIHZlbmRvciBkZWZpbmVkIFNCSSBleHRlbnNpb24N Cj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKyAgQVNTRVJUKCkgaWYgdGhlIEV4dGVuc2lvbklkIGlz IG5vdCBpbiB0aGUgZGVzaWduYXRlZA0KPiBTQkkgVmVuZG9yIEV4dGVuc2lvbg0KPiANCj4gDQo+ ICsgIFNwYWNlLg0KPiANCj4gDQo+ICsNCj4gDQo+IA0KPiArICBAcGFyYW1baW5dICBFeHRlbnNp b25JZCAgICAgICAgICBUaGUgU0JJIHZlbmRvcg0KPiBleHRlbnNpb24gSUQuDQo+IA0KPiANCj4g KyAgQHBhcmFtW2luXSAgRnVuY3Rpb25JZCAgICAgICAgICAgVGhlIGZ1bmN0aW9uIElEIHRvDQo+ IGNhbGwgaW4gdGhpcyBleHRlbnNpb24uDQo+IA0KPiANCj4gKyAgQHBhcmFtW2luXSAgTnVtQXJn cyAgICAgICAgICAgICAgSG93IG1hbnkgYXJndW1lbnRzDQo+IGFyZSBwYXNzZWQuDQo+IA0KPiAN Cj4gKyAgQHBhcmFtW2luXSAgLi4uICAgICAgICAgICAgICAgICAgQWN0dWFsIEFyZ3VtZW50cyB0 bw0KPiB0aGUgZnVuY3Rpb24uDQo+IA0KPiANCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyBpZiB0 aGUgU0JJIGZ1bmN0aW9uIHdhcyBjYWxsZWQNCj4gYW5kIGl0IHdhcyBzdWNjZXNzZnVsDQo+IA0K PiANCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgaWYgTnVtQXJncyBleGNlZWRz IDYNCj4gDQo+IA0KPiArICBAcmV0dmFsIG90aGVycyBpZiB0aGUgY2FsbGVkIFNCSSBmdW5jdGlv biByZXR1cm5zIGFuDQo+IGVycm9yDQo+IA0KPiANCj4gKyoqLw0KPiANCj4gDQo+ICtFRklfU1RB VFVTDQo+IA0KPiANCj4gK0VGSUFQSQ0KPiANCj4gDQo+ICtTYmlWZW5kb3JDYWxsICgNCj4gDQo+ IA0KPiArICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIEV4dGVuc2lvbklkLA0K PiANCj4gDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25J ZCwNCj4gDQo+IA0KPiArICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIE51bUFy Z3MsDQo+IA0KPiANCj4gKyAgLi4uDQo+IA0KPiANCj4gKyAgKTsNCj4gDQo+IA0KPiArDQo+IA0K PiANCj4gKy8vLw0KPiANCj4gDQo+ICsvLy8gRmlybXdhcmUgU0JJIEV4dGVuc2lvbg0KPiANCj4g DQo+ICsvLy8NCj4gDQo+IA0KPiArLy8vIFRoaXMgU0JJIEV4dGVuc2lvbiBpcyBkZWZpbmVkIGFu ZCB1c2VkIGJ5IEVESzIgb25seQ0KPiBpbiBvcmRlciB0byBiZSBhYmxlIHRvDQo+IA0KPiANCj4g Ky8vLyBydW4gUEkgYW5kIERYRSBwaGFzZSBpbiBTLU1vZGUuDQo+IA0KPiANCj4gKy8vLw0KPiAN Cj4gDQo+ICsNCj4gDQo+IA0KPiArLyoqDQo+IA0KPiANCj4gKyAgR2V0IHNjcmF0Y2ggc3BhY2Ug b2YgdGhlIGN1cnJlbnQgaGFydC4NCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKyAgUGxlYXNlIGNv bnNpZGVyIHVzaW5nIHRoZSB3cmFwcGVyDQo+IFNiaUdldEZpcm13YXJlQ29udGV4dCBpZiB5b3Ug b25seSBuZWVkIHRvDQo+IA0KPiANCj4gKyAgYWNjZXNzIHRoZSBmaXJtd2FyZSBjb250ZXh0Lg0K PiANCj4gDQo+ICsNCj4gDQo+IA0KPiArICBAcGFyYW1bb3V0XSBTY3JhdGNoU3BhY2UgICAgICAg ICBUaGUgc2NyYXRjaCBzcGFjZQ0KPiBwb2ludGVyLg0KPiANCj4gDQo+ICsgIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgICAgIFRoZSBvcGVyYXRpb24NCj4gc3VjY2VlZHMuDQo+IA0KPiAN Cj4gKyoqLw0KPiANCj4gDQo+ICtFRklfU1RBVFVTDQo+IA0KPiANCj4gK0VGSUFQSQ0KPiANCj4g DQo+ICtTYmlHZXRNc2NyYXRjaCAoDQo+IA0KPiANCj4gKyAgT1VUIFNCSV9TQ1JBVENIICAgICAg ICAgICAgICAgICAgICAqKlNjcmF0Y2hTcGFjZQ0KPiANCj4gDQo+ICsgICk7DQo+IA0KPiANCj4g Kw0KPiANCj4gDQo+ICsvKioNCj4gDQo+IA0KPiArICBHZXQgc2NyYXRjaCBzcGFjZSBvZiB0aGUg Z2l2ZW4gaGFydCBpZC4NCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKyAgQHBhcmFtW2luXSAgSGFy dElkICAgICAgICAgICAgICAgVGhlIGhhcnQgaWQuDQo+IA0KPiANCj4gKyAgQHBhcmFtW291dF0g U2NyYXRjaFNwYWNlICAgICAgICAgVGhlIHNjcmF0Y2ggc3BhY2UNCj4gcG9pbnRlci4NCj4gDQo+ IA0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICBUaGUgb3BlcmF0aW9uDQo+ IHN1Y2NlZWRzLg0KPiANCj4gDQo+ICsqKi8NCj4gDQo+IA0KPiArRUZJX1NUQVRVUw0KPiANCj4g DQo+ICtFRklBUEkNCj4gDQo+IA0KPiArU2JpR2V0TXNjcmF0Y2hIYXJ0aWQgKA0KPiANCj4gDQo+ ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXJ0SWQsDQo+IA0KPiAN Cj4gKyAgT1VUIFNCSV9TQ1JBVENIICAgICAgICAgICAgICAgICAgICAqKlNjcmF0Y2hTcGFjZQ0K PiANCj4gDQo+ICsgICk7DQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsvKioNCj4gDQo+IA0KPiAr ICBHZXQgZmlybXdhcmUgY29udGV4dCBvZiB0aGUgY2FsbGluZyBoYXJ0Lg0KPiANCj4gDQo+ICsN Cj4gDQo+IA0KPiArICBAcGFyYW1bb3V0XSBGaXJtd2FyZUNvbnRleHQgICAgICBUaGUgZmlybXdh cmUgY29udGV4dA0KPiBwb2ludGVyLg0KPiANCj4gDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgICAgIFRoZSBvcGVyYXRpb24NCj4gc3VjY2VlZHMuDQo+IA0KPiANCj4gKyoqLw0K PiANCj4gDQo+ICtFRklfU1RBVFVTDQo+IA0KPiANCj4gK0VGSUFQSQ0KPiANCj4gDQo+ICtTYmlH ZXRGaXJtd2FyZUNvbnRleHQgKA0KPiANCj4gDQo+ICsgIE9VVCBFRklfUklTQ1ZfT1BFTlNCSV9G SVJNV0FSRV9DT05URVhUDQo+ICoqRmlybXdhcmVDb250ZXh0DQo+IA0KPiANCj4gKyAgKTsNCj4g DQo+IA0KPiArDQo+IA0KPiANCj4gKy8qKg0KPiANCj4gDQo+ICsgIFNldCBmaXJtd2FyZSBjb250 ZXh0IG9mIHRoZSBjYWxsaW5nIGhhcnQuDQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsgIEBwYXJh bVtpbl0gRmlybXdhcmVDb250ZXh0ICAgICAgIFRoZSBmaXJtd2FyZSBjb250ZXh0DQo+IHBvaW50 ZXIuDQo+IA0KPiANCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgVGhlIG9w ZXJhdGlvbg0KPiBzdWNjZWVkcy4NCj4gDQo+IA0KPiArKiovDQo+IA0KPiANCj4gK0VGSV9TVEFU VVMNCj4gDQo+IA0KPiArRUZJQVBJDQo+IA0KPiANCj4gK1NiaVNldEZpcm13YXJlQ29udGV4dCAo DQo+IA0KPiANCj4gKyAgSU4gRUZJX1JJU0NWX09QRU5TQklfRklSTVdBUkVfQ09OVEVYVA0KPiAq RmlybXdhcmVDb250ZXh0DQo+IA0KPiANCj4gKyAgKTsNCj4gDQo+IA0KPiArDQo+IA0KPiANCj4g KyNlbmRpZg0KPiANCj4gDQo+IGRpZmYgLS1naXQgYS9TaWxpY29uL1JJU0MtDQo+IFYvUHJvY2Vz c29yUGtnL0xpYnJhcnkvUmlzY1ZFZGsyU2JpTGliL1Jpc2NWRWRrMlNiaUxpYi5jDQo+IGIvU2ls aWNvbi9SSVNDLQ0KPiBWL1Byb2Nlc3NvclBrZy9MaWJyYXJ5L1Jpc2NWRWRrMlNiaUxpYi9SaXNj VkVkazJTYmlMaWIuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAw MDAuLjBkZjUwNWQyNjc1Yg0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL1NpbGljb24vUklTQy0N Cj4gVi9Qcm9jZXNzb3JQa2cvTGlicmFyeS9SaXNjVkVkazJTYmlMaWIvUmlzY1ZFZGsyU2JpTGli LmMNCj4gQEAgLTAsMCArMSw4OTcgQEANCj4gKy8qKiBAZmlsZQ0KPiANCj4gDQo+ICsgIEluc3Rh bmNlIG9mIHRoZSBTQkkgZWNhbGwgbGlicmFyeS4NCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKyAg SXQgYWxsb3dzIGNhbGxpbmcgYW4gU0JJIGZ1bmN0aW9uIHZpYSBhbiBlY2FsbCBmcm9tDQo+IFMt TW9kZS4NCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKyAgVGhlIGxlZ2FjeSBleHRlbnNpb25zIGFy ZSBub3QgaW5jbHVkZWQgYmVjYXVzZSB0aGV5DQo+IGFyZSBub3QgbmVjZXNzYXJ5Lg0KPiANCj4g DQo+ICsgIFRoZXkgd291bGQgYmU6DQo+IA0KPiANCj4gKyAgLSBTYmlMZWdhY3lTZXRUaW1lciAg ICAgICAgICAgIC0+IFVzZSBTYmlTZXRUaW1lcg0KPiANCj4gDQo+ICsgIC0gU2JpTGVnYWN5Q29u c29sZVB1dENoYXIgICAgICAtPiBObyByZXBsYWNlbWVudCAtDQo+IFVzZSByZWd1bGFyIFVFRkkg ZnVuY3Rpb25zDQo+IA0KPiANCj4gKyAgLSBTYmlMZWdhY3lDb25zb2xlR2V0Q2hhciAgICAgIC0+ IE5vIHJlcGxhY2VtZW50IC0NCj4gVXNlIHJlZ3VsYXIgVUVGSSBmdW5jdGlvbnMNCj4gDQo+IA0K PiArICAtIFNiaUxlZ2FjeUNsZWFySXBpICAgICAgICAgICAgLT4gV3JpdGUgMCB0byBTU0lQDQo+ IA0KPiANCj4gKyAgLSBTYmlMZWdhY3lTZW5kSXBpICAgICAgICAgICAgIC0+IFVzZSBTYmlTZW5k SXBpDQo+IA0KPiANCj4gKyAgLSBTYmlMZWdhY3lSZW1vdGVGZW5jZUkgICAgICAgIC0+IFVzZSBT YmlSZW1vdGVGZW5jZUkNCj4gDQo+IA0KPiArICAtIFNiaUxlZ2FjeVJlbW90ZVNmZW5jZVZtYSAg ICAgLT4gVXNlDQo+IFNiaVJlbW90ZVNmZW5jZVZtYQ0KPiANCj4gDQo+ICsgIC0gU2JpTGVnYWN5 UmVtb3RlU2ZlbmNlVm1hQXNpZCAtPiBVc2UNCj4gU2JpUmVtb3RlU2ZlbmNlVm1hQXNpZA0KPiAN Cj4gDQo+ICsgIC0gU2JpTGVnYWN5U2h1dGRvd24gICAgICAgICAgICAtPiBXYWl0IGZvciBuZXcg U3lzdGVtDQo+IFJlc2V0IGV4dGVuc2lvbg0KPiANCj4gDQo+ICsNCj4gDQo+IA0KPiArICBDb3B5 cmlnaHQgKGMpIDIwMjAsIEhld2xldHQgUGFja2FyZCBEZXZlbG9wbWVudCBMUC4NCj4gQWxsIHJp Z2h0cyByZXNlcnZlZC48QlI+DQo+IA0KPiANCj4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKyAgQHBhciBSZXZp c2lvbiBSZWZlcmVuY2U6DQo+IA0KPiANCj4gKyAgICAtIE9wZW5TQkkgVmVyc2lvbiAwLjYNCj4g DQo+IA0KPiArKiovDQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsjaW5jbHVkZSA8SW5kdXN0cnlT dGFuZGFyZC9SaXNjVk9wZW5zYmkuaD4NCj4gDQo+IA0KPiArI2luY2x1ZGUgPExpYnJhcnkvQmFz ZU1lbW9yeUxpYi5oPg0KPiANCj4gDQo+ICsjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0K PiANCj4gDQo+ICsjaW5jbHVkZSA8TGlicmFyeS9SaXNjVkVkazJTYmlMaWIuaD4NCj4gDQo+IA0K PiArI2luY2x1ZGUgPHNiaS9yaXNjdl9hc20uaD4NCj4gDQo+IA0KPiArI2luY2x1ZGUgPHNiaS9z YmlfaGFydC5oPg0KPiANCj4gDQo+ICsjaW5jbHVkZSA8c2JpL3NiaV90eXBlcy5oPg0KPiANCj4g DQo+ICsjaW5jbHVkZSA8c2JpL3NiaV9pbml0Lmg+DQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsN Cj4gDQo+IA0KPiArLy8NCj4gDQo+IA0KPiArLy8gTWF4aW11bSBhcmd1bWVudHMgZm9yIFNCSSBl Y2FsbA0KPiANCj4gDQo+ICsvLyBJdCdzIHBvc3NpYmxlIHRvIHBhc3MgbW9yZSBidXQgbm8gU0JJ IGNhbGwgdXNlcyBtb3JlDQo+IGFzIG9mIFNCSSAwLjIuDQo+IA0KPiANCj4gKy8vIFRoZSBhZGRp dGlvbmFsIGFyZ3VtZW50cyB3b3VsZCBoYXZlIHRvIGJlIHBhc3NlZCBvbg0KPiB0aGUgc3RhY2sg aW5zdGVhZCBvZiBhcw0KPiANCj4gDQo+ICsvLyByZWdpc3RlcnMsIGxpa2UgaXQncyBkb25lIG5v dy4NCj4gDQo+IA0KPiArLy8NCj4gDQo+IA0KPiArI2RlZmluZSBTQklfQ0FMTF9NQVhfQVJHUyA2 DQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsvKioNCj4gDQo+IA0KPiArICBDYWxsIFNCSSBjYWxs IHVzaW5nIGVjYWxsIGluc3RydWN0aW9uLg0KPiANCj4gDQo+ICsNCj4gDQo+IA0KPiArICBBc3Nl cnRzIHdoZW4gTnVtQXJncyBleGNlZWRzIFNCSV9DQUxMX01BWF9BUkdTLg0KPiANCj4gDQo+ICsN Cj4gDQo+IA0KPiArICBAcGFyYW1baW5dIEV4dElkICAgIFNCSSBleHRlbnNpb24gSUQuDQo+IA0K PiANCj4gKyAgQHBhcmFtW2luXSBGdW5jSWQgICBTQkkgZnVuY3Rpb24gSUQuDQo+IA0KPiANCj4g KyAgQHBhcmFtW2luXSBOdW1BcmdzICBOdW1iZXIgb2YgYXJndW1lbnRzIHRvIHBhc3MgdG8NCj4g dGhlIGVjYWxsLg0KPiANCj4gDQo+ICsgIEBwYXJhbVtpbl0gLi4uICAgICAgQXJndW1lbnQgbGlz dCBmb3IgdGhlIGVjYWxsLg0KPiANCj4gDQo+ICsNCj4gDQo+IA0KPiArICBAcmV0dmFsICBSZXR1 cm5zIFNiaVJldCBzdHJ1Y3R1cmUgd2l0aCB2YWx1ZSBhbmQNCj4gZXJyb3IgY29kZS4NCj4gDQo+ IA0KPiArDQo+IA0KPiANCj4gKyoqLw0KPiANCj4gDQo+ICtTVEFUSUMNCj4gDQo+IA0KPiArU2Jp UmV0DQo+IA0KPiANCj4gK0VGSUFQSQ0KPiANCj4gDQo+ICtTYmlDYWxsKA0KPiANCj4gDQo+ICsg IElOICBVSU5UTiBFeHRJZCwNCj4gDQo+IA0KPiArICBJTiAgVUlOVE4gRnVuY0lkLA0KPiANCj4g DQo+ICsgIElOICBVSU5UTiBOdW1BcmdzLA0KPiANCj4gDQo+ICsgIC4uLg0KPiANCj4gDQo+ICsg ICkNCj4gDQo+IA0KPiArew0KPiANCj4gDQo+ICsgICAgVUlOVE4gSTsNCj4gDQo+IA0KPiArICAg IFNiaVJldCBSZXQ7DQo+IA0KPiANCj4gKyAgICBVSU5UTiBBcmdzW1NCSV9DQUxMX01BWF9BUkdT XTsNCj4gDQo+IA0KPiArICAgIFZBX0xJU1QgQXJnTGlzdDsNCj4gDQo+IA0KPiArICAgIFZBX1NU QVJUIChBcmdMaXN0LCBOdW1BcmdzKTsNCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKyAgICBBU1NF UlQgKE51bUFyZ3MgPD0gU0JJX0NBTExfTUFYX0FSR1MpOw0KPiANCj4gDQo+ICsNCj4gDQo+IA0K PiArICAgIGZvciAoSSA9IDA7IEkgPCBTQklfQ0FMTF9NQVhfQVJHUzsgSSsrKSB7DQo+IA0KPiAN Cj4gKyAgICAgIGlmIChJIDwgTnVtQXJncykgew0KPiANCj4gDQo+ICsgICAgICAgIEFyZ3NbSV0g PSBWQV9BUkcgKEFyZ0xpc3QsIFVJTlROKTsNCj4gDQo+IA0KPiArICAgICAgfSBlbHNlIHsNCj4g DQo+IA0KPiArICAgICAgICAvLyBEZWZhdWx0IHRvIDAgZm9yIGFsbCBhcmd1bWVudHMgdGhhdCBh cmUgbm90DQo+IGdpdmVuDQo+IA0KPiANCj4gKyAgICAgICAgQXJnc1tJXSA9IDA7DQo+IA0KPiAN Cj4gKyAgICAgIH0NCj4gDQo+IA0KPiArICAgIH0NCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKyAg ICBWQV9FTkQoQXJnTGlzdCk7DQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsgICAgcmVnaXN0ZXIg VUlOVE4gYTAgYXNtICgiYTAiKSA9IEFyZ3NbMF07DQo+IA0KPiANCj4gKyAgICByZWdpc3RlciBV SU5UTiBhMSBhc20gKCJhMSIpID0gQXJnc1sxXTsNCj4gDQo+IA0KPiArICAgIHJlZ2lzdGVyIFVJ TlROIGEyIGFzbSAoImEyIikgPSBBcmdzWzJdOw0KPiANCj4gDQo+ICsgICAgcmVnaXN0ZXIgVUlO VE4gYTMgYXNtICgiYTMiKSA9IEFyZ3NbM107DQo+IA0KPiANCj4gKyAgICByZWdpc3RlciBVSU5U TiBhNCBhc20gKCJhNCIpID0gQXJnc1s0XTsNCj4gDQo+IA0KPiArICAgIHJlZ2lzdGVyIFVJTlRO IGE1IGFzbSAoImE1IikgPSBBcmdzWzVdOw0KPiANCj4gDQo+ICsgICAgcmVnaXN0ZXIgVUlOVE4g YTYgYXNtICgiYTYiKSA9IChVSU5UTikoRnVuY0lkKTsNCj4gDQo+IA0KPiArICAgIHJlZ2lzdGVy IFVJTlROIGE3IGFzbSAoImE3IikgPSAoVUlOVE4pKEV4dElkKTsNCj4gDQo+IA0KPiArICAgIGFz bSB2b2xhdGlsZSAoImVjYWxsIiBcDQo+IA0KPiANCj4gKyAgICAgICAgIDogIityIiAoYTApLCAi K3IiIChhMSkgXA0KPiANCj4gDQo+ICsgICAgICAgICA6ICJyIiAoYTIpLCAiciIgKGEzKSwgInIi IChhNCksICJyIiAoYTUpLCAiciINCj4gKGE2KSwgInIiIChhNykgXA0KPiANCj4gDQo+ICsgICAg ICAgICA6ICJtZW1vcnkiKTsgXA0KPiANCj4gDQo+ICsgICAgUmV0LkVycm9yID0gYTA7DQo+IA0K PiANCj4gKyAgICBSZXQuVmFsdWUgPSBhMTsNCj4gDQo+IA0KPiArICAgIHJldHVybiBSZXQ7DQo+ IA0KPiANCj4gK30NCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKy8qKg0KPiANCj4gDQo+ICsgIFRy YW5zbGF0ZSBTQkkgZXJyb3IgY29kZSB0byBFRkkgc3RhdHVzLg0KPiANCj4gDQo+ICsNCj4gDQo+ IA0KPiArICBAcGFyYW1baW5dIFNiaUVycm9yICAgU0JJIGVycm9yIGNvZGUNCj4gDQo+IA0KPiAr ICBAcmV0dmFsIEVGSV9TVEFUVVMNCj4gDQo+IA0KPiArKiovDQo+IA0KPiANCj4gKw0KPiANCj4g DQo+ICtTVEFUSUMNCj4gDQo+IA0KPiArRUZJX1NUQVRVUw0KPiANCj4gDQo+ICtFRklBUEkNCj4g DQo+IA0KPiArVHJhbnNsYXRlRXJyb3IoDQo+IA0KPiANCj4gKyAgSU4gIFVJTlROIFNiaUVycm9y DQo+IA0KPiANCj4gKyAgKQ0KPiANCj4gDQo+ICt7DQo+IA0KPiANCj4gKyAgc3dpdGNoIChTYmlF cnJvcikgew0KPiANCj4gDQo+ICsgICAgY2FzZSBTQklfU1VDQ0VTUzoNCj4gDQo+IA0KPiArICAg ICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiANCj4gDQo+ICsgICAgY2FzZSBTQklfRVJSX0ZBSUxF RDoNCj4gDQo+IA0KPiArICAgICAgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQo+IA0KPiANCj4g KyAgICAgIGJyZWFrOw0KPiANCj4gDQo+ICsgICAgY2FzZSBTQklfRVJSX05PVF9TVVBQT1JURUQ6 DQo+IA0KPiANCj4gKyAgICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+IA0KPiANCj4gKyAg ICAgIGJyZWFrOw0KPiANCj4gDQo+ICsgICAgY2FzZSBTQklfRVJSX0lOVkFMSURfUEFSQU06DQo+ IA0KPiANCj4gKyAgICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+IA0KPiANCj4g KyAgICAgIGJyZWFrOw0KPiANCj4gDQo+ICsgICAgY2FzZSBTQklfRVJSX0RFTklFRDoNCj4gDQo+ IA0KPiArICAgICAgcmV0dXJuIEVGSV9BQ0NFU1NfREVOSUVEOw0KPiANCj4gDQo+ICsgICAgICBi cmVhazsNCj4gDQo+IA0KPiArICAgIGNhc2UgU0JJX0VSUl9JTlZBTElEX0FERFJFU1M6DQo+IA0K PiANCj4gKyAgICAgIHJldHVybiBFRklfTE9BRF9FUlJPUjsNCj4gDQo+IA0KPiArICAgICAgYnJl YWs7DQo+IA0KPiANCj4gKyAgICBjYXNlIFNCSV9FUlJfQUxSRUFEWV9BVkFJTEFCTEU6DQo+IA0K PiANCj4gKyAgICAgIHJldHVybiBFRklfQUxSRUFEWV9TVEFSVEVEOw0KPiANCj4gDQo+ICsgICAg ICBicmVhazsNCj4gDQo+IA0KPiArICAgIGRlZmF1bHQ6DQo+IA0KPiANCj4gKyAgICAgIC8vDQo+ IA0KPiANCj4gKyAgICAgIC8vIFJlYWNoZXMgaGVyZSBvbmx5IGlmIFNCSSBoYXMgZGVmaW5lZCBh IG5ldw0KPiBlcnJvciB0eXBlDQo+IA0KPiANCj4gKyAgICAgIC8vDQo+IA0KPiANCj4gKyAgICAg IEFTU0VSVCAoRkFMU0UpOw0KPiANCj4gDQo+ICsgICAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVE Ow0KPiANCj4gDQo+ICsgICAgICBicmVhazsNCj4gDQo+IA0KPiArICB9DQo+IA0KPiANCj4gK30N Cj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKy8vDQo+IA0KPiANCj4gKy8vIE9wZW5TQkkgbGlicmFy eSBpbnRlcmZhY2UgZnVuY3Rpb24gZm9yIHRoZSBiYXNlDQo+IGV4dGVuc2lvbg0KPiANCj4gDQo+ ICsvLw0KPiANCj4gDQo+ICsNCj4gDQo+IA0KPiArLyoqDQo+IA0KPiANCj4gKyAgR2V0IHRoZSBp bXBsZW1lbnRlZCBTQkkgc3BlY2lmaWNhdGlvbiB2ZXJzaW9uDQo+IA0KPiANCj4gKw0KPiANCj4g DQo+ICsgIFRoZSBtaW5vciBudW1iZXIgb2YgdGhlIFNCSSBzcGVjaWZpY2F0aW9uIGlzIGVuY29k ZWQNCj4gaW4gdGhlIGxvdyAyNCBiaXRzLA0KPiANCj4gDQo+ICsgIHdpdGggdGhlIG1ham9yIG51 bWJlciBlbmNvZGVkIGluIHRoZSBuZXh0IDcgYml0cy4NCj4gQml0IDMyIG11c3QgYmUgMCBhbmQg aXMNCj4gDQo+IA0KPiArICByZXNlcnZlZCBmb3IgZnV0dXJlIGV4cGFuc2lvbi4NCj4gDQo+IA0K PiArDQo+IA0KPiANCj4gKyAgQHBhcmFtW291dF0gU3BlY1ZlcnNpb24gICAgICAgICAgVGhlIFZl cnNpb24gb2YgdGhlDQo+IFNCSSBzcGVjaWZpY2F0aW9uLg0KPiANCj4gDQo+ICsqKi8NCj4gDQo+ IA0KPiArVk9JRA0KPiANCj4gDQo+ICtFRklBUEkNCj4gDQo+IA0KPiArU2JpR2V0U3BlY1ZlcnNp b24gKA0KPiANCj4gDQo+ICsgIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgKlNwZWNW ZXJzaW9uDQo+IA0KPiANCj4gKyAgKQ0KPiANCj4gDQo+ICt7DQo+IA0KPiANCj4gKyAgU2JpUmV0 IFJldCA9IFNiaUNhbGwgKFNCSV9FWFRfQkFTRSwNCj4gU0JJX0VYVF9CQVNFX0dFVF9TUEVDX1ZF UlNJT04sIDApOw0KPiANCj4gDQo+ICsNCj4gDQo+IA0KPiArICBpZiAoIVJldC5FcnJvcikgew0K PiANCj4gDQo+ICsgICAgKlNwZWNWZXJzaW9uID0gKFVJTlROKVJldC5WYWx1ZTsNCj4gDQo+IA0K PiArICB9DQo+IA0KPiANCj4gK30NCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKy8qKg0KPiANCj4g DQo+ICsgIEdldCB0aGUgU0JJIGltcGxlbWVudGF0aW9uIElEDQo+IA0KPiANCj4gKw0KPiANCj4g DQo+ICsgIFRoaXMgSUQgaXMgdXNlZCB0byBpZGVuZXRpZnkgYSBzcGVjaWZpYyBTQkkNCj4gaW1w bGVtZW50YXRpb24gaW4gb3JkZXIgdG8gd29yaw0KPiANCj4gDQo+ICsgIGFyb3VuZCBhbnkgcXVp cmtzIGl0IG1pZ2h0IGhhdmUuDQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsgIEBwYXJhbVtvdXRd IEltcGxJZCAgICAgICAgICAgICAgIFRoZSBJRCBvZiB0aGUgU0JJDQo+IGltcGxlbWVudGF0aW9u Lg0KPiANCj4gDQo+ICsqKi8NCj4gDQo+IA0KPiArVk9JRA0KPiANCj4gDQo+ICtFRklBUEkNCj4g DQo+IA0KPiArU2JpR2V0SW1wbElkICgNCj4gDQo+IA0KPiArICBPVVQgVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgICpJbXBsSWQNCj4gDQo+IA0KPiArICApDQo+IA0KPiANCj4gK3sNCj4gDQo+ IA0KPiArICBTYmlSZXQgUmV0ID0gU2JpQ2FsbCAoU0JJX0VYVF9CQVNFLA0KPiBTQklfRVhUX0JB U0VfR0VUX0lNUF9JRCwgMCk7DQo+IA0KPiANCj4gKyAgKkltcGxJZCA9IChVSU5UTilSZXQuVmFs dWU7DQo+IA0KPiANCj4gK30NCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKy8qKg0KPiANCj4gDQo+ ICsgIEdldCB0aGUgU0JJIGltcGxlbWVudGF0aW9uIHZlcnNpb24NCj4gDQo+IA0KPiArDQo+IA0K PiANCj4gKyAgVGhlIHZlcnNpb24gb2YgdGhpcyBTQkkgaW1wbGVtZW50YXRpb24uDQo+IA0KPiAN Cj4gKyAgVGhlIGVuY29kaW5nIG9mIHRoaXMgbnVtYmVyIGlzIGRldGVybWluZWQgYnkgdGhlDQo+ IHNwZWNpZmljIFNCSSBpbXBsZW1lbnRhdGlvbi4NCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKyAg QHBhcmFtW291dF0gSW1wbFZlcnNpb24gICAgICAgICAgVGhlIHZlcnNpb24gb2YgdGhlDQo+IFNC SSBpbXBsZW1lbnRhdGlvbi4NCj4gDQo+IA0KPiArKiovDQo+IA0KPiANCj4gK1ZPSUQNCj4gDQo+ IA0KPiArRUZJQVBJDQo+IA0KPiANCj4gK1NiaUdldEltcGxWZXJzaW9uICgNCj4gDQo+IA0KPiAr ICBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICpJbXBsVmVyc2lvbg0KPiANCj4gDQo+ ICsgICkNCj4gDQo+IA0KPiArew0KPiANCj4gDQo+ICsgIFNiaVJldCBSZXQgPSBTYmlDYWxsIChT QklfRVhUX0JBU0UsDQo+IFNCSV9FWFRfQkFTRV9HRVRfSU1QX1ZFUlNJT04sIDApOw0KPiANCj4g DQo+ICsgICpJbXBsVmVyc2lvbiA9IChVSU5UTilSZXQuVmFsdWU7DQo+IA0KPiANCj4gK30NCj4g DQo+IA0KPiArDQo+IA0KPiANCj4gKy8qKg0KPiANCj4gDQo+ICsgIFByb2JlIHdoZXRoZXIgYW4g U0JJIGV4dGVuc2lvbiBpcyBhdmFpbGFibGUNCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKyAgUHJv YmVSZXN1bHQgaXMgc2V0IHRvIDAgaWYgdGhlIGV4dGVuc2lvbiBpcyBub3QNCj4gYXZhaWxhYmxl IG9yIHRvIGFuIGV4dGVuc2lvbg0KPiANCj4gDQo+ICsgIHNwZWNpZmllZCB2YWx1ZSBpZiBpdCBp cyBhdmFpbGFibGUuDQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsgIEBwYXJhbVtpbl0gIEV4dGVu c2lvbklkICAgICAgICAgIFRoZSBleHRlbnNpb24gSUQuDQo+IA0KPiANCj4gKyAgQHBhcmFtW291 dF0gUHJvYmVSZXN1bHQgICAgICAgICAgVGhlIHJldHVybiB2YWx1ZSBvZg0KPiB0aGUgcHJvYmUu DQo+IA0KPiANCj4gKyoqLw0KPiANCj4gDQo+ICtWT0lEDQo+IA0KPiANCj4gK0VGSUFQSQ0KPiAN Cj4gDQo+ICtTYmlQcm9iZUV4dGVuc2lvbiAoDQo+IA0KPiANCj4gKyAgSU4gIElOVE4gICAgICAg ICAgICAgICAgICAgICAgICAgRXh0ZW5zaW9uSWQsDQo+IA0KPiANCj4gKyAgT1VUIElOVE4gICAg ICAgICAgICAgICAgICAgICAgICAqUHJvYmVSZXN1bHQNCj4gDQo+IA0KPiArICApDQo+IA0KPiAN Cj4gK3sNCj4gDQo+IA0KPiArICBTYmlSZXQgUmV0ID0gU2JpQ2FsbCAoU0JJX0VYVF9CQVNFLA0K PiBTQklfRVhUX0JBU0VfUFJPQkVfRVhULCAwKTsNCj4gDQo+IA0KPiArICAqUHJvYmVSZXN1bHQg PSAoVUlOVE4pUmV0LlZhbHVlOw0KPiANCj4gDQo+ICt9DQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ ICsvKioNCj4gDQo+IA0KPiArICBHZXQgdGhlIENQVSdzIHZlbmRvciBJRA0KPiANCj4gDQo+ICsN Cj4gDQo+IA0KPiArICBSZWFkcyB0aGUgbXZlbmRvcmlkIENTUi4NCj4gDQo+IA0KPiArDQo+IA0K PiANCj4gKyAgQHBhcmFtW291dF0gTWFjaGluZVZlbmRvcklkICAgICAgVGhlIENQVSdzIHZlbmRv ciBJRC4NCj4gDQo+IA0KPiArKiovDQo+IA0KPiANCj4gK1ZPSUQNCj4gDQo+IA0KPiArRUZJQVBJ DQo+IA0KPiANCj4gK1NiaUdldE1hY2hpbmVWZW5kb3JJZCAoDQo+IA0KPiANCj4gKyAgT1VUIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAqTWFjaGluZVZlbmRvcklkDQo+IA0KPiANCj4gKyAg KQ0KPiANCj4gDQo+ICt7DQo+IA0KPiANCj4gKyAgU2JpUmV0IFJldCA9IFNiaUNhbGwgKFNCSV9F WFRfQkFTRSwNCj4gU0JJX0VYVF9CQVNFX0dFVF9NVkVORE9SSUQsIDApOw0KPiANCj4gDQo+ICsg ICpNYWNoaW5lVmVuZG9ySWQgPSAoVUlOVE4pUmV0LlZhbHVlOw0KPiANCj4gDQo+ICt9DQo+IA0K PiANCj4gKw0KPiANCj4gDQo+ICsvKioNCj4gDQo+IA0KPiArICBHZXQgdGhlIENQVSdzIGFyY2hp dGVjdHVyZSBJRA0KPiANCj4gDQo+ICsNCj4gDQo+IA0KPiArICBSZWFkcyB0aGUgbWFyY2hpZCBD U1IuDQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsgIEBwYXJhbVtvdXRdIE1hY2hpbmVBcmNoSWQg ICAgICAgIFRoZSBDUFUncw0KPiBhcmNoaXRlY3R1cmUgSUQuDQo+IA0KPiANCj4gKyoqLw0KPiAN Cj4gDQo+ICtWT0lEDQo+IA0KPiANCj4gK0VGSUFQSQ0KPiANCj4gDQo+ICtTYmlHZXRNYWNoaW5l QXJjaElkICgNCj4gDQo+IA0KPiArICBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICpN YWNoaW5lQXJjaElkDQo+IA0KPiANCj4gKyAgKQ0KPiANCj4gDQo+ICt7DQo+IA0KPiANCj4gKyAg U2JpUmV0IFJldCA9IFNiaUNhbGwgKFNCSV9FWFRfQkFTRSwNCj4gU0JJX0VYVF9CQVNFX0dFVF9N QVJDSElELCAwKTsNCj4gDQo+IA0KPiArICAqTWFjaGluZUFyY2hJZCA9IChVSU5UTilSZXQuVmFs dWU7DQo+IA0KPiANCj4gK30NCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKy8qKg0KPiANCj4gDQo+ ICsgIEdldCB0aGUgQ1BVJ3MgYXJjaGl0ZWN0dXJlIElEDQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ ICsgIFJlYWRzIHRoZSBtYXJjaGlkIENTUi4NCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKyAgQHBh cmFtW291dF0gTWFjaGluZUltcGxJZCAgICAgICAgVGhlIENQVSdzDQo+IGltcGxlbWVudGF0aW9u IElELg0KPiANCj4gDQo+ICsqKi8NCj4gDQo+IA0KPiArVk9JRA0KPiANCj4gDQo+ICtFRklBUEkN Cj4gDQo+IA0KPiArU2JpR2V0TWFjaGluZUltcGxJZCAoDQo+IA0KPiANCj4gKyAgT1VUIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAqTWFjaGluZUltcGxJZA0KPiANCj4gDQo+ICsgICkNCj4g DQo+IA0KPiArew0KPiANCj4gDQo+ICsgIFNiaVJldCBSZXQgPSBTYmlDYWxsIChTQklfRVhUX0JB U0UsDQo+IFNCSV9FWFRfQkFTRV9HRVRfTUlNUElELCAwKTsNCj4gDQo+IA0KPiArICAqTWFjaGlu ZUltcGxJZCA9IChVSU5UTilSZXQuVmFsdWU7DQo+IA0KPiANCj4gK30NCj4gDQo+IA0KPiArDQo+ IA0KPiANCj4gKy8vDQo+IA0KPiANCj4gKy8vIFNCSSBpbnRlcmZhY2UgZnVuY3Rpb24gZm9yIHRo ZSBoYXJ0IHN0YXRlIG1hbmFnZW1lbnQNCj4gZXh0ZW5zaW9uDQo+IA0KPiANCj4gKy8vDQo+IA0K PiANCj4gKw0KPiANCj4gDQo+ICsvKioNCj4gDQo+IA0KPiArICBQb2xpdGVseSBhc2sgdGhlIFNC SSB0byBzdGFydCBhIGdpdmVuIGhhcnQuDQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsgIFRoaXMg Y2FsbCBtYXkgcmV0dXJuIGJlZm9yZSB0aGUgaGFydCBoYXMgYWN0dWFsbHkNCj4gc3RhcnRlZCBl eGVjdXRpbmcsIGlmIHRoZQ0KPiANCj4gDQo+ICsgIFNCSSBpbXBsZW1lbnRhdGlvbiBjYW4gZ3Vh cmFudGVlIHRoYXQgdGhlIGhhcnQgaXMNCj4gYWN0dWFsbHkgZ29pbmcgdG8gc3RhcnQuDQo+IA0K PiANCj4gKw0KPiANCj4gDQo+ICsgIEJlZm9yZSB0aGUgaGFydCBqdW1wcyB0byBTdGFydEFkZHIs IHRoZSBoYXJ0IE1VU1QNCj4gY29uZmlndXJlIFBNUCBpZiBwcmVzZW50DQo+IA0KPiANCj4gKyAg YW5kIHN3aXRjaCB0byBTLW1vZGUuDQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsgIEBwYXJhbVtp bl0gIEhhcnRJZCAgICAgICAgICAgICAgIFRoZSBpZCBvZiB0aGUgaGFydA0KPiB0byBzdGFydC4N Cj4gDQo+IA0KPiArICBAcGFyYW1baW5dICBTdGFydEFkZHIgICAgICAgICAgICBUaGUgcGh5c2lj YWwNCj4gYWRkcmVzcywgd2hlcmUgdGhlIGhhcnQgc3RhcnRzDQo+IA0KPiANCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW5nIGZyb20uDQo+IA0KPiANCj4gKyAg QHBhcmFtW2luXSAgUHJpdiAgICAgICAgICAgICAgICAgQW4gWExFTi1iaXQgdmFsdWUsDQo+IHdo aWNoIHdpbGwgYmUgaW4gcmVnaXN0ZXINCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhMSB3aGVuIHRoZSBoYXJ0DQo+IHN0YXJ0cy4NCj4gDQo+IA0KPiArICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICBIYXJ0IHdhcyBzdG9wcGVkIGFuZA0KPiB3 aWxsIHN0YXJ0IGV4ZWN1dGluZyBmcm9tIFN0YXJ0QWRkci4NCj4gDQo+IA0KPiArICBAcmV0dmFs IEVGSV9MT0FEX0VSUk9SICAgICAgICAgICBTdGFydEFkZHIgaXMgbm90DQo+IHZhbGlkLCBwb3Nz aWJseSBkdWUgdG8gZm9sbG93aW5nIHJlYXNvbnM6DQo+IA0KPiANCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAtIEl0IGlzIG5vdCBhDQo+IHZhbGlkIHBoeXNpY2FsIGFk ZHJlc3MuDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt IFRoZSBhZGRyZXNzIGlzDQo+IHByb2hpYml0ZWQgYnkgUE1QIHRvIHJ1biBpbg0KPiANCj4gDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBlcnZpc29yIG1vZGUu DQo+IA0KPiANCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICAgSGFydElkIGlz IG5vdCBhDQo+IHZhbGlkIGhhcnQgaWQNCj4gDQo+IA0KPiArICBAcmV0dmFsIEVGSV9BTFJFQURZ X1NUQVJURUQgICAgICBUaGUgaGFydCBpcyBhbHJlYWR5DQo+IHJ1bm5pbmcuDQo+IA0KPiANCj4g KyAgQHJldHZhbCBvdGhlciAgICAgICAgICAgICAgICAgICAgVGhlIHN0YXJ0IHJlcXVlc3QNCj4g ZmFpbGVkIGZvciB1bmtub3duIHJlYXNvbnMuDQo+IA0KPiANCj4gKyoqLw0KPiANCj4gDQo+ICtF RklfU1RBVFVTDQo+IA0KPiANCj4gK0VGSUFQSQ0KPiANCj4gDQo+ICtTYmlIYXJ0U3RhcnQgKA0K PiANCj4gDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgSGFydElkLA0K PiANCj4gDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBZGRy LA0KPiANCj4gDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpdg0K PiANCj4gDQo+ICsgICkNCj4gDQo+IA0KPiArew0KPiANCj4gDQo+ICsgIFNiaVJldCBSZXQgPSBT YmlDYWxsICgNCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICBTQklfRVhUX0hTTSwNCj4gDQo+ IA0KPiArICAgICAgICAgICAgICAgICBTQklfRVhUX0hTTV9IQVJUX1NUQVJULA0KPiANCj4gDQo+ ICsgICAgICAgICAgICAgICAgIDMsDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgSGFydElk LA0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgIFN0YXJ0QWRkciwNCj4gDQo+IA0KPiArICAg ICAgICAgICAgICAgICBQcml2DQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgKTsNCj4gDQo+ IA0KPiArICByZXR1cm4gVHJhbnNsYXRlRXJyb3IgKFJldC5FcnJvcik7DQo+IA0KPiANCj4gK30N Cj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKy8qKg0KPiANCj4gDQo+ICsgIFJldHVybiBleGVjdXRp b24gb2YgdGhlIGNhbGxpbmcgaGFydCB0byBTQkkuDQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsg IE1VU1QgYmUgY2FsbGVkIGluIFMtTW9kZSB3aXRoIHVzZXIgaW50ZXJydXB0cw0KPiBkaXNhYmxl ZC4NCj4gDQo+IA0KPiArICBUaGlzIGNhbGwgaXMgbm90IGV4cGVjdGVkIHRvIHJldHVybiwgdW5s ZXNzIGEgZmFpbHVyZQ0KPiBvY2N1cnMuDQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsgIEByZXR2 YWwgICAgIEVGSV9TVUNDRVNTICAgICAgICAgIE5ldmVyIG9jY3Vycy4gV2hlbg0KPiBzdWNjZXNz ZnVsLCB0aGUgY2FsbCBkb2VzIG5vdCByZXR1cm4uDQo+IA0KPiANCj4gKyAgQHJldHZhbCAgICAg b3RoZXIgICAgICAgICAgICAgICAgRmFpbGVkIHRvIHN0b3AgaGFyZA0KPiBmb3IgYW4gdW5rbm93 biByZWFzb24uDQo+IA0KPiANCj4gKyoqLw0KPiANCj4gDQo+ICtFRklfU1RBVFVTDQo+IA0KPiAN Cj4gK0VGSUFQSQ0KPiANCj4gDQo+ICtTYmlIYXJ0U3RvcCAoDQo+IA0KPiANCj4gKyAgKQ0KPiAN Cj4gDQo+ICt7DQo+IA0KPiANCj4gKyAgU2JpUmV0IFJldCA9IFNiaUNhbGwgKFNCSV9FWFRfSFNN LA0KPiBTQklfRVhUX0hTTV9IQVJUX1NUT1AsIDApOw0KPiANCj4gDQo+ICsgIHJldHVybiBUcmFu c2xhdGVFcnJvciAoUmV0LkVycm9yKTsNCj4gDQo+IA0KPiArfQ0KPiANCj4gDQo+ICsNCj4gDQo+ IA0KPiArLyoqDQo+IA0KPiANCj4gKyAgR2V0IHRoZSBjdXJyZW50IHN0YXR1cyBvZiBhIGhhcnQu DQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsgIFNpbmNlIGhhcnRzIGNhbiB0cmFuc2l0aW9uIGJl dHdlZW4gc3RhdGVzIGF0IGFueQ0KPiB0aW1lLCB0aGUgc3RhdHVzIHJldHJpZXZlZA0KPiANCj4g DQo+ICsgIGJ5IHRoaXMgZnVuY3Rpb24gbWF5IGFscmVhZHkgYmUgb3V0IG9mIGRhdGUsIG9uY2Ug aXQNCj4gcmV0dXJucy4NCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKyAgUG9zc2libGUgdmFsdWVz IGZvciBIYXJ0U3RhdHVzIGFyZToNCj4gDQo+IA0KPiArICAwOiBTVEFSVEVEDQo+IA0KPiANCj4g KyAgMTogU1RPUFBFRA0KPiANCj4gDQo+ICsgIDI6IFNUQVJUX1JFUVVFU1RfUEVORElORw0KPiAN Cj4gDQo+ICsgIDM6IFNUT1BfUkVRVUVTVF9QRU5ESU5HDQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ ICsgIEBwYXJhbVtvdXRdIEhhcnRTdGF0dXMgICAgICAgICAgIFRoZSBwb2ludGVyIGluIHdoaWNo DQo+IHRoZSBoYXJ0J3Mgc3RhdHVzIGlzDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RvcmVkLg0KPiANCj4gDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgICAgIFRoZSBvcGVyYXRpb24NCj4gc3VjY2VlZHMuDQo+IA0KPiANCj4gKyAgQHJl dHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICAgQSBwYXJhbWV0ZXIgaXMNCj4gaW52YWxpZC4N Cj4gDQo+IA0KPiArKiovDQo+IA0KPiANCj4gK0VGSV9TVEFUVVMNCj4gDQo+IA0KPiArRUZJQVBJ DQo+IA0KPiANCj4gK1NiaUhhcnRHZXRTdGF0dXMgKA0KPiANCj4gDQo+ICsgIElOICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgICAgSGFydElkLA0KPiANCj4gDQo+ICsgIE9VVCBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgICAqSGFydFN0YXR1cw0KPiANCj4gDQo+ICsgICkNCj4gDQo+ IA0KPiArew0KPiANCj4gDQo+ICsgIFNiaVJldCBSZXQgPSBTYmlDYWxsIChTQklfRVhUX0hTTSwN Cj4gU0JJX0VYVF9IU01fSEFSVF9HRVRfU1RBVFVTLCAxLCBIYXJ0SWQpOw0KPiANCj4gDQo+ICsN Cj4gDQo+IA0KPiArICBpZiAoIVJldC5FcnJvcikgew0KPiANCj4gDQo+ICsgICAgKkhhcnRTdGF0 dXMgPSAoVUlOVE4pUmV0LlZhbHVlOw0KPiANCj4gDQo+ICsgIH0NCj4gDQo+IA0KPiArDQo+IA0K PiANCj4gKyAgcmV0dXJuIFRyYW5zbGF0ZUVycm9yIChSZXQuRXJyb3IpOw0KPiANCj4gDQo+ICt9 DQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsvKioNCj4gDQo+IA0KPiArICBDbGVhciBwZW5kaW5n IHRpbWVyIGludGVycnVwdCBiaXQgYW5kIHNldCB0aW1lciBmb3INCj4gbmV4dCBldmVudCBhZnRl ciBUaW1lLg0KPiANCj4gDQo+ICsNCj4gDQo+IA0KPiArICBUbyBjbGVhciB0aGUgdGltZXIgd2l0 aG91dCBzY2hlZHVsaW5nIGEgdGltZXIgZXZlbnQsDQo+IHNldCBUaW1lIHRvIGENCj4gDQo+IA0K PiArICBwcmFjdGljYWxseSBpbmZpbml0ZSB2YWx1ZSBvciBtYXNrIHRoZSB0aW1lcg0KPiBpbnRl cnJ1cHQgYnkgY2xlYXJpbmcgc2llLlNUSUUuDQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsgIEBw YXJhbVtpbl0gIFRpbWUgICAgICAgICAgICAgICAgIFRoZSB0aW1lIG9mZnNldCB0bw0KPiB0aGUg bmV4dCBzY2hlZHVsZWQgdGltZXIgaW50ZXJydXB0Lg0KPiANCj4gDQo+ICsqKi8NCj4gDQo+IA0K PiArVk9JRA0KPiANCj4gDQo+ICtFRklBUEkNCj4gDQo+IA0KPiArU2JpU2V0VGltZXIgKA0KPiAN Cj4gDQo+ICsgIElOICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgVGltZQ0KPiANCj4g DQo+ICsgICkNCj4gDQo+IA0KPiArew0KPiANCj4gDQo+ICsgIFNiaUNhbGwgKFNCSV9FWFRfVElN RSwgU0JJX0VYVF9USU1FX1NFVF9USU1FUiwgMSwNCj4gVGltZSk7DQo+IA0KPiANCj4gK30NCj4g DQo+IA0KPiArDQo+IA0KPiANCj4gK0VGSV9TVEFUVVMNCj4gDQo+IA0KPiArRUZJQVBJDQo+IA0K PiANCj4gK1NiaVNlbmRJcGkgKA0KPiANCj4gDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgICAqSGFydE1hc2ssDQo+IA0KPiANCj4gKyAgSU4gIFVJTlROICAgICAgICAgICAg ICAgICAgICAgICAgICBIYXJ0TWFza0Jhc2UNCj4gDQo+IA0KPiArICApDQo+IA0KPiANCj4gK3sN Cj4gDQo+IA0KPiArICBTYmlSZXQgUmV0ID0gU2JpQ2FsbCAoDQo+IA0KPiANCj4gKyAgICAgICAg ICAgICAgICAgU0JJX0VYVF9JUEksDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgU0JJX0VY VF9JUElfU0VORF9JUEksDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgMiwNCj4gDQo+IA0K PiArICAgICAgICAgICAgICAgICAoVUlOVE4pSGFydE1hc2ssDQo+IA0KPiANCj4gKyAgICAgICAg ICAgICAgICAgSGFydE1hc2tCYXNlDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgKTsNCj4g DQo+IA0KPiArICByZXR1cm4gVHJhbnNsYXRlRXJyb3IgKFJldC5FcnJvcik7DQo+IA0KPiANCj4g K30NCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKy8qKg0KPiANCj4gDQo+ICsgIEluc3RydWN0cyBy ZW1vdGUgaGFydHMgdG8gZXhlY3V0ZSBhIEZFTkNFLkkNCj4gaW5zdHJ1Y3Rpb24uDQo+IA0KPiAN Cj4gKw0KPiANCj4gDQo+ICsgIEBwYXJhbVtpbl0gIEhhcnRNYXNrICAgICAgICAgICAgIFNjYWxh ciBiaXQtdmVjdG9yDQo+IGNvbnRhaW5pbmcgaGFydCBpZHMNCj4gDQo+IA0KPiArICBAcGFyYW1b aW5dICBIYXJ0TWFza0Jhc2UgICAgICAgICBUaGUgc3RhcnRpbmcgaGFydGlkDQo+IGZyb20gd2hp Y2ggdGhlIGJpdC12ZWN0b3INCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBtdXN0IGJlIGNvbXB1dGVkLiBJZg0KPiBzZXQgdG8gLTEsIEhhcnRNYXNrIGlzDQo+ IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlZCBhbmQg YWxsDQo+IGhhcnRzIGFyZSBjb25zaWRlcmVkLg0KPiANCj4gDQo+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgICAgIElQSSB3YXMgc2VudCB0byBhbGwNCj4gdGhlIHRhcmdldGVkIGhh cnRzLg0KPiANCj4gDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgIEVpdGhl cg0KPiBoYXJ0X21hc2tfYmFzZSBvciBhbnkgb2YgdGhlIGhhcnRpZA0KPiANCj4gDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gaGFydF9tYXNrIGlzDQo+IG5vdCB2 YWxpZCBpLmUuIGVpdGhlciB0aGUNCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBoYXJ0aWQgaXMgbm90DQo+IGVuYWJsZWQgYnkgdGhlIHBsYXRmb3JtIG9yIGlz DQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGF2YWls YWJsZSB0byB0aGUNCj4gc3VwZXJ2aXNvci4NCj4gDQo+IA0KPiArKiovDQo+IA0KPiANCj4gK0VG SV9TVEFUVVMNCj4gDQo+IA0KPiArRUZJQVBJDQo+IA0KPiANCj4gK1NiaVJlbW90ZUZlbmNlSSAo DQo+IA0KPiANCj4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICpIYXJ0TWFz aywNCj4gDQo+IA0KPiArICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIEhhcnRN YXNrQmFzZQ0KPiANCj4gDQo+ICsgICkNCj4gDQo+IA0KPiArew0KPiANCj4gDQo+ICsgIFNiaVJl dCBSZXQgPSBTYmlDYWxsICgNCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICBTQklfRVhUX1JG RU5DRSwNCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICBTQklfRVhUX1JGRU5DRV9SRU1PVEVf RkVOQ0VfSSwNCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICAyLA0KPiANCj4gDQo+ICsgICAg ICAgICAgICAgICAgIChVSU5UTilIYXJ0TWFzaywNCj4gDQo+IA0KPiArICAgICAgICAgICAgICAg ICBIYXJ0TWFza0Jhc2UNCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICApOw0KPiANCj4gDQo+ ICsgIHJldHVybiBUcmFuc2xhdGVFcnJvciAoUmV0LkVycm9yKTsNCj4gDQo+IA0KPiArfQ0KPiAN Cj4gDQo+ICsNCj4gDQo+IA0KPiArLyoqDQo+IA0KPiANCj4gKyAgSW5zdHJ1Y3RzIHRoZSByZW1v dGUgaGFydHMgdG8gZXhlY3V0ZSBvbmUgb3IgbW9yZQ0KPiBTRkVOQ0UuVk1BIGluc3RydWN0aW9u cy4NCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKyAgVGhlIFNGRU5DRS5WTUEgY292ZXJzIHRoZSBy YW5nZSBvZiB2aXJ0dWFsIGFkZHJlc3Nlcw0KPiBiZXR3ZWVuIFN0YXJ0QWFkZHIgYW5kIFNpemUu DQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsgIFRoZSByZW1vdGUgZmVuY2UgZnVuY3Rpb24gYWN0 cyBhcyBhIGZ1bGwgdGxiIGZsdXNoIGlmDQo+ICogU3RhcnRBZGRyIGFuZCBzaXplDQo+IA0KPiAN Cj4gKyAgYXJlIGJvdGggMCAqIHNpemUgaXMgZXF1YWwgdG8gMl5YTEVOLTENCj4gDQo+IA0KPiAr DQo+IA0KPiANCj4gKyAgQHBhcmFtW2luXSAgSGFydE1hc2sgICAgICAgICAgICAgU2NhbGFyIGJp dC12ZWN0b3INCj4gY29udGFpbmluZyBoYXJ0IGlkcw0KPiANCj4gDQo+ICsgIEBwYXJhbVtpbl0g IEhhcnRNYXNrQmFzZSAgICAgICAgIFRoZSBzdGFydGluZyBoYXJ0aWQNCj4gZnJvbSB3aGljaCB0 aGUgYml0LXZlY3Rvcg0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG11c3QgYmUgY29tcHV0ZWQuIElmDQo+IHNldCB0byAtMSwgSGFydE1hc2sgaXMNCj4gDQo+ IA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVkIGFuZCBhbGwN Cj4gaGFydHMgYXJlIGNvbnNpZGVyZWQuDQo+IA0KPiANCj4gKyAgQHBhcmFtW2luXSAgU3RhcnRB ZGRyICAgICAgICAgICAgVGhlIGZpcnN0IGFkZHJlc3Mgb2YNCj4gdGhlIGFmZmVjdGVkIHJhbmdl Lg0KPiANCj4gDQo+ICsgIEBwYXJhbVtpbl0gIFNpemUgICAgICAgICAgICAgICAgIEhvdyBtYW55 IGFkZHJlc3Nlcw0KPiBhcmUgYWZmZWN0ZWQuDQo+IA0KPiANCj4gKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICAgICAgSVBJIHdhcyBzZW50IHRvIGFsbA0KPiB0aGUgdGFyZ2V0ZWQgaGFy dHMuDQo+IA0KPiANCj4gKyAgQHJldHZhbCBFRklfTE9BRF9FUlJPUiAgICAgICAgICAgU3RhcnRB ZGRyIG9yIFNpemUgaXMNCj4gbm90IHZhbGlkLg0KPiANCj4gDQo+ICsgIEByZXR2YWwgRUZJX0lO VkFMSURfUEFSQU1FVEVSICAgIEVpdGhlcg0KPiBoYXJ0X21hc2tfYmFzZSBvciBhbnkgb2YgdGhl IGhhcnRpZA0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZy b20gaGFydF9tYXNrIGlzDQo+IG5vdCB2YWxpZCBpLmUuIGVpdGhlciB0aGUNCj4gDQo+IA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJ0aWQgaXMgbm90DQo+IGVuYWJs ZWQgYnkgdGhlIHBsYXRmb3JtIG9yIGlzDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbm90IGF2YWlsYWJsZSB0byB0aGUNCj4gc3VwZXJ2aXNvci4NCj4gDQo+ IA0KPiArKiovDQo+IA0KPiANCj4gK0VGSV9TVEFUVVMNCj4gDQo+IA0KPiArRUZJQVBJDQo+IA0K PiANCj4gK1NiaVJlbW90ZVNmZW5jZVZtYSAoDQo+IA0KPiANCj4gKyAgSU4gIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICAgICpIYXJ0TWFzaywNCj4gDQo+IA0KPiArICBJTiAgVUlOVE4gICAg ICAgICAgICAgICAgICAgICAgICAgIEhhcnRNYXNrQmFzZSwNCj4gDQo+IA0KPiArICBJTiAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWRkciwNCj4gDQo+IA0KPiArICBJTiAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIFNpemUNCj4gDQo+IA0KPiArICApDQo+IA0K PiANCj4gK3sNCj4gDQo+IA0KPiArICBTYmlSZXQgUmV0ID0gU2JpQ2FsbCAoDQo+IA0KPiANCj4g KyAgICAgICAgICAgICAgICAgU0JJX0VYVF9SRkVOQ0UsDQo+IA0KPiANCj4gKyAgICAgICAgICAg ICAgICAgU0JJX0VYVF9SRkVOQ0VfUkVNT1RFX1NGRU5DRV9WTUEsDQo+IA0KPiANCj4gKyAgICAg ICAgICAgICAgICAgNCwNCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICAoVUlOVE4pSGFydE1h c2ssDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgSGFydE1hc2tCYXNlLA0KPiANCj4gDQo+ ICsgICAgICAgICAgICAgICAgIFN0YXJ0QWRkciwNCj4gDQo+IA0KPiArICAgICAgICAgICAgICAg ICBTaXplDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgKTsNCj4gDQo+IA0KPiArICByZXR1 cm4gVHJhbnNsYXRlRXJyb3IgKFJldC5FcnJvcik7DQo+IA0KPiANCj4gK30NCj4gDQo+IA0KPiAr DQo+IA0KPiANCj4gKy8qKg0KPiANCj4gDQo+ICsgIEluc3RydWN0cyB0aGUgcmVtb3RlIGhhcnRz IHRvIGV4ZWN1dGUgb25lIG9yIG1vcmUNCj4gU0ZFTkNFLlZNQSBpbnN0cnVjdGlvbnMuDQo+IA0K PiANCj4gKw0KPiANCj4gDQo+ICsgIFRoZSBTRkVOQ0UuVk1BIGNvdmVycyB0aGUgcmFuZ2Ugb2Yg dmlydHVhbCBhZGRyZXNzZXMNCj4gYmV0d2VlbiBTdGFydEFhZGRyIGFuZCBTaXplLg0KPiANCj4g DQo+ICsgIENvdmVycyBvbmx5IHRoZSBnaXZlbiBBU0lELg0KPiANCj4gDQo+ICsNCj4gDQo+IA0K PiArICBUaGUgcmVtb3RlIGZlbmNlIGZ1bmN0aW9uIGFjdHMgYXMgYSBmdWxsIHRsYiBmbHVzaCBp Zg0KPiAqIFN0YXJ0QWRkciBhbmQgc2l6ZQ0KPiANCj4gDQo+ICsgIGFyZSBib3RoIDAgKiBzaXpl IGlzIGVxdWFsIHRvIDJeWExFTi0xDQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsgIEBwYXJhbVtp bl0gIEhhcnRNYXNrICAgICAgICAgICAgIFNjYWxhciBiaXQtdmVjdG9yDQo+IGNvbnRhaW5pbmcg aGFydCBpZHMNCj4gDQo+IA0KPiArICBAcGFyYW1baW5dICBIYXJ0TWFza0Jhc2UgICAgICAgICBU aGUgc3RhcnRpbmcgaGFydGlkDQo+IGZyb20gd2hpY2ggdGhlIGJpdC12ZWN0b3INCj4gDQo+IA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IGJlIGNvbXB1dGVkLiBJ Zg0KPiBzZXQgdG8gLTEsIEhhcnRNYXNrIGlzDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWdub3JlZCBhbmQgYWxsDQo+IGhhcnRzIGFyZSBjb25zaWRlcmVk Lg0KPiANCj4gDQo+ICsgIEBwYXJhbVtpbl0gIFN0YXJ0QWRkciAgICAgICAgICAgIFRoZSBmaXJz dCBhZGRyZXNzIG9mDQo+IHRoZSBhZmZlY3RlZCByYW5nZS4NCj4gDQo+IA0KPiArICBAcGFyYW1b aW5dICBTaXplICAgICAgICAgICAgICAgICBIb3cgbWFueSBhZGRyZXNzZXMNCj4gYXJlIGFmZmVj dGVkLg0KPiANCj4gDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgIElQSSB3 YXMgc2VudCB0byBhbGwNCj4gdGhlIHRhcmdldGVkIGhhcnRzLg0KPiANCj4gDQo+ICsgIEByZXR2 YWwgRUZJX0xPQURfRVJST1IgICAgICAgICAgIFN0YXJ0QWRkciBvciBTaXplIGlzDQo+IG5vdCB2 YWxpZC4NCj4gDQo+IA0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgICBFaXRo ZXINCj4gaGFydF9tYXNrX2Jhc2Ugb3IgYW55IG9mIHRoZSBoYXJ0aWQNCj4gDQo+IA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIGhhcnRfbWFzayBpcw0KPiBub3Qg dmFsaWQgaS5lLiBlaXRoZXIgdGhlDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaGFydGlkIGlzIG5vdA0KPiBlbmFibGVkIGJ5IHRoZSBwbGF0Zm9ybSBvciBp cw0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBhdmFp bGFibGUgdG8gdGhlDQo+IHN1cGVydmlzb3IuDQo+IA0KPiANCj4gKyoqLw0KPiANCj4gDQo+ICtF RklfU1RBVFVTDQo+IA0KPiANCj4gK0VGSUFQSQ0KPiANCj4gDQo+ICtTYmlSZW1vdGVTZmVuY2VW bWFBc2lkICgNCj4gDQo+IA0KPiArICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAg KkhhcnRNYXNrLA0KPiANCj4gDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAg ICAgSGFydE1hc2tCYXNlLA0KPiANCj4gDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgICAgICAgU3RhcnRBZGRyLA0KPiANCj4gDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgICAgU2l6ZSwNCj4gDQo+IA0KPiArICBJTiAgVUlOVE4gICAgICAgICAgICAgICAg ICAgICAgICAgIEFzaWQNCj4gDQo+IA0KPiArICApDQo+IA0KPiANCj4gK3sNCj4gDQo+IA0KPiAr ICBTYmlSZXQgUmV0ID0gU2JpQ2FsbCAoDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgU0JJ X0VYVF9SRkVOQ0UsDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgU0JJX0VYVF9SRkVOQ0Vf UkVNT1RFX1NGRU5DRV9WTUFfQVNJRCwNCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICA1LA0K PiANCj4gDQo+ICsgICAgICAgICAgICAgICAgIChVSU5UTilIYXJ0TWFzaywNCj4gDQo+IA0KPiAr ICAgICAgICAgICAgICAgICBIYXJ0TWFza0Jhc2UsDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAg ICAgU3RhcnRBZGRyLA0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgIFNpemUsDQo+IA0KPiAN Cj4gKyAgICAgICAgICAgICAgICAgQXNpZA0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgICk7 DQo+IA0KPiANCj4gKyAgcmV0dXJuIFRyYW5zbGF0ZUVycm9yIChSZXQuRXJyb3IpOw0KPiANCj4g DQo+ICt9DQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsvKioNCj4gDQo+IA0KPiArICBJbnN0cnVj dHMgdGhlIHJlbW90ZSBoYXJ0cyB0byBleGVjdXRlIG9uZSBvciBtb3JlDQo+IFNGRU5DRS5HVk1B IGluc3RydWN0aW9ucy4NCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKyAgVGhlIFNGRU5DRS5HVk1B IGNvdmVycyB0aGUgcmFuZ2Ugb2YgdmlydHVhbCBhZGRyZXNzZXMNCj4gYmV0d2VlbiBTdGFydEFh ZGRyIGFuZCBTaXplLg0KPiANCj4gDQo+ICsgIENvdmVycyBvbmx5IHRoZSBnaXZlbiBWTUlELg0K PiANCj4gDQo+ICsgIFRoaXMgZnVuY3Rpb24gY2FsbCBpcyBvbmx5IHZhbGlkIGZvciBoYXJ0cw0K PiBpbXBsZW1lbnRpbmcgdGhlIGh5cGVydmlzb3IgZXh0ZW5zaW9uLg0KPiANCj4gDQo+ICsNCj4g DQo+IA0KPiArICBUaGUgcmVtb3RlIGZlbmNlIGZ1bmN0aW9uIGFjdHMgYXMgYSBmdWxsIHRsYiBm bHVzaCBpZg0KPiAqIFN0YXJ0QWRkciBhbmQgc2l6ZQ0KPiANCj4gDQo+ICsgIGFyZSBib3RoIDAg KiBzaXplIGlzIGVxdWFsIHRvIDJeWExFTi0xDQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsgIEBw YXJhbVtpbl0gIEhhcnRNYXNrICAgICAgICAgICAgIFNjYWxhciBiaXQtdmVjdG9yDQo+IGNvbnRh aW5pbmcgaGFydCBpZHMNCj4gDQo+IA0KPiArICBAcGFyYW1baW5dICBIYXJ0TWFza0Jhc2UgICAg ICAgICBUaGUgc3RhcnRpbmcgaGFydGlkDQo+IGZyb20gd2hpY2ggdGhlIGJpdC12ZWN0b3INCj4g DQo+IA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IGJlIGNvbXB1 dGVkLiBJZg0KPiBzZXQgdG8gLTEsIEhhcnRNYXNrIGlzDQo+IA0KPiANCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlZCBhbmQgYWxsDQo+IGhhcnRzIGFyZSBjb25z aWRlcmVkLg0KPiANCj4gDQo+ICsgIEBwYXJhbVtpbl0gIFN0YXJ0QWRkciAgICAgICAgICAgIFRo ZSBmaXJzdCBhZGRyZXNzIG9mDQo+IHRoZSBhZmZlY3RlZCByYW5nZS4NCj4gDQo+IA0KPiArICBA cGFyYW1baW5dICBTaXplICAgICAgICAgICAgICAgICBIb3cgbWFueSBhZGRyZXNzZXMNCj4gYXJl IGFmZmVjdGVkLg0KPiANCj4gDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAg IElQSSB3YXMgc2VudCB0byBhbGwNCj4gdGhlIHRhcmdldGVkIGhhcnRzLg0KPiANCj4gDQo+ICsg IEByZXR2YWwgRUZJX0xPQURfRVJST1IgICAgICAgICAgIFN0YXJ0QWRkciBvciBTaXplIGlzDQo+ IG5vdCB2YWxpZC4NCj4gDQo+IA0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAg ICBTQkkgZG9lcyBub3QNCj4gaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gb3Igb25lDQo+IA0KPiAN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHRhcmdldCBoYXJ0 cw0KPiBkb2VzIG5vdCBzdXBwb3J0IHRoZQ0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGh5cGVydmlzb3INCj4gZXh0ZW5zaW9uLg0KPiANCj4gDQo+ICsgIEBy ZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgIEVpdGhlcg0KPiBoYXJ0X21hc2tfYmFzZSBv ciBhbnkgb2YgdGhlIGhhcnRpZA0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZyb20gaGFydF9tYXNrIGlzDQo+IG5vdCB2YWxpZCBpLmUuIGVpdGhlciB0aGUN Cj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJ0aWQgaXMg bm90DQo+IGVuYWJsZWQgYnkgdGhlIHBsYXRmb3JtIG9yIGlzDQo+IA0KPiANCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGF2YWlsYWJsZSB0byB0aGUNCj4gc3VwZXJ2 aXNvci4NCj4gDQo+IA0KPiArKiovDQo+IA0KPiANCj4gK0VGSV9TVEFUVVMNCj4gDQo+IA0KPiAr RUZJQVBJDQo+IA0KPiANCj4gK1NiaVJlbW90ZUhGZW5jZUd2bWFWbWlkICgNCj4gDQo+IA0KPiAr ICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgKkhhcnRNYXNrLA0KPiANCj4gDQo+ ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgSGFydE1hc2tCYXNlLA0KPiAN Cj4gDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBZGRyLA0K PiANCj4gDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgU2l6ZSwNCj4g DQo+IA0KPiArICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIFZtaWQNCj4gDQo+ IA0KPiArICApDQo+IA0KPiANCj4gK3sNCj4gDQo+IA0KPiArICBTYmlSZXQgUmV0ID0gU2JpQ2Fs bCAoDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgU0JJX0VYVF9SRkVOQ0UsDQo+IA0KPiAN Cj4gKyAgICAgICAgICAgICAgICAgU0JJX0VYVF9SRkVOQ0VfUkVNT1RFX0hGRU5DRV9HVk1BLA0K PiANCj4gDQo+ICsgICAgICAgICAgICAgICAgIDUsDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAg ICAgKFVJTlROKUhhcnRNYXNrLA0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgIEhhcnRNYXNr QmFzZSwNCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICBTdGFydEFkZHIsDQo+IA0KPiANCj4g KyAgICAgICAgICAgICAgICAgU2l6ZSwNCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICBWbWlk DQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgKTsNCj4gDQo+IA0KPiArICByZXR1cm4gVHJh bnNsYXRlRXJyb3IgKFJldC5FcnJvcik7DQo+IA0KPiANCj4gK30NCj4gDQo+IA0KPiArDQo+IA0K PiANCj4gKy8qKg0KPiANCj4gDQo+ICsgIEluc3RydWN0cyB0aGUgcmVtb3RlIGhhcnRzIHRvIGV4 ZWN1dGUgb25lIG9yIG1vcmUNCj4gU0ZFTkNFLkdWTUEgaW5zdHJ1Y3Rpb25zLg0KPiANCj4gDQo+ ICsNCj4gDQo+IA0KPiArICBUaGUgU0ZFTkNFLkdWTUEgY292ZXJzIHRoZSByYW5nZSBvZiB2aXJ0 dWFsIGFkZHJlc3Nlcw0KPiBiZXR3ZWVuIFN0YXJ0QWFkZHIgYW5kIFNpemUuDQo+IA0KPiANCj4g KyAgVGhpcyBmdW5jdGlvbiBjYWxsIGlzIG9ubHkgdmFsaWQgZm9yIGhhcnRzDQo+IGltcGxlbWVu dGluZyB0aGUgaHlwZXJ2aXNvciBleHRlbnNpb24uDQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsg IFRoZSByZW1vdGUgZmVuY2UgZnVuY3Rpb24gYWN0cyBhcyBhIGZ1bGwgdGxiIGZsdXNoIGlmDQo+ ICogU3RhcnRBZGRyIGFuZCBzaXplDQo+IA0KPiANCj4gKyAgYXJlIGJvdGggMCAqIHNpemUgaXMg ZXF1YWwgdG8gMl5YTEVOLTENCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKyAgQHBhcmFtW2luXSAg SGFydE1hc2sgICAgICAgICAgICAgU2NhbGFyIGJpdC12ZWN0b3INCj4gY29udGFpbmluZyBoYXJ0 IGlkcw0KPiANCj4gDQo+ICsgIEBwYXJhbVtpbl0gIEhhcnRNYXNrQmFzZSAgICAgICAgIFRoZSBz dGFydGluZyBoYXJ0aWQNCj4gZnJvbSB3aGljaCB0aGUgYml0LXZlY3Rvcg0KPiANCj4gDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgYmUgY29tcHV0ZWQuIElmDQo+ IHNldCB0byAtMSwgSGFydE1hc2sgaXMNCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpZ25vcmVkIGFuZCBhbGwNCj4gaGFydHMgYXJlIGNvbnNpZGVyZWQuDQo+ IA0KPiANCj4gKyAgQHBhcmFtW2luXSAgU3RhcnRBZGRyICAgICAgICAgICAgVGhlIGZpcnN0IGFk ZHJlc3Mgb2YNCj4gdGhlIGFmZmVjdGVkIHJhbmdlLg0KPiANCj4gDQo+ICsgIEBwYXJhbVtpbl0g IFNpemUgICAgICAgICAgICAgICAgIEhvdyBtYW55IGFkZHJlc3Nlcw0KPiBhcmUgYWZmZWN0ZWQu DQo+IA0KPiANCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgSVBJIHdhcyBz ZW50IHRvIGFsbA0KPiB0aGUgdGFyZ2V0ZWQgaGFydHMuDQo+IA0KPiANCj4gKyAgQHJldHZhbCBF RklfTE9BRF9FUlJPUiAgICAgICAgICAgU3RhcnRBZGRyIG9yIFNpemUgaXMNCj4gbm90IHZhbGlk Lg0KPiANCj4gDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICAgIFNCSSBkb2Vz IG5vdA0KPiBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiBvciBvbmUNCj4gDQo+IA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgdGFyZ2V0IGhhcnRzDQo+IGRvZXMg bm90IHN1cHBvcnQgdGhlDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaHlwZXJ2aXNvcg0KPiBleHRlbnNpb24uDQo+IA0KPiANCj4gKyAgQHJldHZhbCBFRklf SU5WQUxJRF9QQVJBTUVURVIgICAgRWl0aGVyDQo+IGhhcnRfbWFza19iYXNlIG9yIGFueSBvZiB0 aGUgaGFydGlkDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZnJvbSBoYXJ0X21hc2sgaXMNCj4gbm90IHZhbGlkIGkuZS4gZWl0aGVyIHRoZQ0KPiANCj4gDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcnRpZCBpcyBub3QNCj4gZW5h YmxlZCBieSB0aGUgcGxhdGZvcm0gb3IgaXMNCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBub3QgYXZhaWxhYmxlIHRvIHRoZQ0KPiBzdXBlcnZpc29yLg0KPiAN Cj4gDQo+ICsqKi8NCj4gDQo+IA0KPiArRUZJX1NUQVRVUw0KPiANCj4gDQo+ICtFRklBUEkNCj4g DQo+IA0KPiArU2JpUmVtb3RlSEZlbmNlR3ZtYSAoDQo+IA0KPiANCj4gKyAgSU4gIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICAgICpIYXJ0TWFzaywNCj4gDQo+IA0KPiArICBJTiAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAgIEhhcnRNYXNrQmFzZSwNCj4gDQo+IA0KPiArICBJTiAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWRkciwNCj4gDQo+IA0KPiArICBJ TiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIFNpemUNCj4gDQo+IA0KPiArICApDQo+ IA0KPiANCj4gK3sNCj4gDQo+IA0KPiArICBTYmlSZXQgUmV0ID0gU2JpQ2FsbCAoDQo+IA0KPiAN Cj4gKyAgICAgICAgICAgICAgICAgU0JJX0VYVF9SRkVOQ0UsDQo+IA0KPiANCj4gKw0KPiBTQklf RVhUX1JGRU5DRV9SRU1PVEVfSEZFTkNFX0dWTUFfVk1JRCwNCj4gDQo+IA0KPiArICAgICAgICAg ICAgICAgICA0LA0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgIChVSU5UTilIYXJ0TWFzaywN Cj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICBIYXJ0TWFza0Jhc2UsDQo+IA0KPiANCj4gKyAg ICAgICAgICAgICAgICAgU3RhcnRBZGRyLA0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgIFNp emUNCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICApOw0KPiANCj4gDQo+ICsgIHJldHVybiBU cmFuc2xhdGVFcnJvciAoUmV0LkVycm9yKTsNCj4gDQo+IA0KPiArfQ0KPiANCj4gDQo+ICsNCj4g DQo+IA0KPiArLyoqDQo+IA0KPiANCj4gKyAgSW5zdHJ1Y3RzIHRoZSByZW1vdGUgaGFydHMgdG8g ZXhlY3V0ZSBvbmUgb3IgbW9yZQ0KPiBTRkVOQ0UuVlZNQSBpbnN0cnVjdGlvbnMuDQo+IA0KPiAN Cj4gKw0KPiANCj4gDQo+ICsgIFRoZSBTRkVOQ0UuR1ZNQSBjb3ZlcnMgdGhlIHJhbmdlIG9mIHZp cnR1YWwgYWRkcmVzc2VzDQo+IGJldHdlZW4gU3RhcnRBYWRkciBhbmQgU2l6ZS4NCj4gDQo+IA0K PiArICBDb3ZlcnMgb25seSB0aGUgZ2l2ZW4gQVNJRC4NCj4gDQo+IA0KPiArICBUaGlzIGZ1bmN0 aW9uIGNhbGwgaXMgb25seSB2YWxpZCBmb3IgaGFydHMNCj4gaW1wbGVtZW50aW5nIHRoZSBoeXBl cnZpc29yIGV4dGVuc2lvbi4NCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKyAgVGhlIHJlbW90ZSBm ZW5jZSBmdW5jdGlvbiBhY3RzIGFzIGEgZnVsbCB0bGIgZmx1c2ggaWYNCj4gKiBTdGFydEFkZHIg YW5kIHNpemUNCj4gDQo+IA0KPiArICBhcmUgYm90aCAwICogc2l6ZSBpcyBlcXVhbCB0byAyXlhM RU4tMQ0KPiANCj4gDQo+ICsNCj4gDQo+IA0KPiArICBAcGFyYW1baW5dICBIYXJ0TWFzayAgICAg ICAgICAgICBTY2FsYXIgYml0LXZlY3Rvcg0KPiBjb250YWluaW5nIGhhcnQgaWRzDQo+IA0KPiAN Cj4gKyAgQHBhcmFtW2luXSAgSGFydE1hc2tCYXNlICAgICAgICAgVGhlIHN0YXJ0aW5nIGhhcnRp ZA0KPiBmcm9tIHdoaWNoIHRoZSBiaXQtdmVjdG9yDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbXVzdCBiZSBjb21wdXRlZC4gSWYNCj4gc2V0IHRvIC0xLCBI YXJ0TWFzayBpcw0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlnbm9yZWQgYW5kIGFsbA0KPiBoYXJ0cyBhcmUgY29uc2lkZXJlZC4NCj4gDQo+IA0KPiArICBA cGFyYW1baW5dICBTdGFydEFkZHIgICAgICAgICAgICBUaGUgZmlyc3QgYWRkcmVzcyBvZg0KPiB0 aGUgYWZmZWN0ZWQgcmFuZ2UuDQo+IA0KPiANCj4gKyAgQHBhcmFtW2luXSAgU2l6ZSAgICAgICAg ICAgICAgICAgSG93IG1hbnkgYWRkcmVzc2VzDQo+IGFyZSBhZmZlY3RlZC4NCj4gDQo+IA0KPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICBJUEkgd2FzIHNlbnQgdG8gYWxsDQo+ IHRoZSB0YXJnZXRlZCBoYXJ0cy4NCj4gDQo+IA0KPiArICBAcmV0dmFsIEVGSV9MT0FEX0VSUk9S ICAgICAgICAgICBTdGFydEFkZHIgb3IgU2l6ZSBpcw0KPiBub3QgdmFsaWQuDQo+IA0KPiANCj4g KyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgICAgU0JJIGRvZXMgbm90DQo+IGltcGxl bWVudCB0aGlzIGZ1bmN0aW9uIG9yIG9uZQ0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG9mIHRoZSB0YXJnZXQgaGFydHMNCj4gZG9lcyBub3Qgc3VwcG9ydCB0 aGUNCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoeXBlcnZp c29yDQo+IGV4dGVuc2lvbi4NCj4gDQo+IA0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFN RVRFUiAgICBFaXRoZXINCj4gaGFydF9tYXNrX2Jhc2Ugb3IgYW55IG9mIHRoZSBoYXJ0aWQNCj4g DQo+IA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIGhhcnRfbWFz ayBpcw0KPiBub3QgdmFsaWQgaS5lLiBlaXRoZXIgdGhlDQo+IA0KPiANCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaGFydGlkIGlzIG5vdA0KPiBlbmFibGVkIGJ5IHRoZSBw bGF0Zm9ybSBvciBpcw0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5vdCBhdmFpbGFibGUgdG8gdGhlDQo+IHN1cGVydmlzb3IuDQo+IA0KPiANCj4gKyoqLw0K PiANCj4gDQo+ICtFRklfU1RBVFVTDQo+IA0KPiANCj4gK0VGSUFQSQ0KPiANCj4gDQo+ICtTYmlS ZW1vdGVIRmVuY2VWdm1hQXNpZCAoDQo+IA0KPiANCj4gKyAgSU4gIFVJTlROICAgICAgICAgICAg ICAgICAgICAgICAgICpIYXJ0TWFzaywNCj4gDQo+IA0KPiArICBJTiAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgICAgIEhhcnRNYXNrQmFzZSwNCj4gDQo+IA0KPiArICBJTiAgVUlOVE4gICAg ICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWRkciwNCj4gDQo+IA0KPiArICBJTiAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAgIFNpemUsDQo+IA0KPiANCj4gKyAgSU4gIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICAgICBBc2lkDQo+IA0KPiANCj4gKyAgKQ0KPiANCj4gDQo+ICt7 DQo+IA0KPiANCj4gKyAgU2JpUmV0IFJldCA9IFNiaUNhbGwgKA0KPiANCj4gDQo+ICsgICAgICAg ICAgICAgICAgIFNCSV9FWFRfUkZFTkNFLA0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgIFNC SV9FWFRfUkZFTkNFX1JFTU9URV9IRkVOQ0VfVlZNQSwNCj4gDQo+IA0KPiArICAgICAgICAgICAg ICAgICA1LA0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgIChVSU5UTilIYXJ0TWFzaywNCj4g DQo+IA0KPiArICAgICAgICAgICAgICAgICBIYXJ0TWFza0Jhc2UsDQo+IA0KPiANCj4gKyAgICAg ICAgICAgICAgICAgU3RhcnRBZGRyLA0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgIFNpemUs DQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgQXNpZA0KPiANCj4gDQo+ICsgICAgICAgICAg ICAgICAgICk7DQo+IA0KPiANCj4gKyAgcmV0dXJuIFRyYW5zbGF0ZUVycm9yIChSZXQuRXJyb3Ip Ow0KPiANCj4gDQo+ICt9DQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsvKioNCj4gDQo+IA0KPiAr ICBJbnN0cnVjdHMgdGhlIHJlbW90ZSBoYXJ0cyB0byBleGVjdXRlIG9uZSBvciBtb3JlDQo+IFNG RU5DRS5WVk1BIGluc3RydWN0aW9ucy4NCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKyAgVGhlIFNG RU5DRS5HVk1BIGNvdmVycyB0aGUgcmFuZ2Ugb2YgdmlydHVhbCBhZGRyZXNzZXMNCj4gYmV0d2Vl biBTdGFydEFhZGRyIGFuZCBTaXplLg0KPiANCj4gDQo+ICsgIFRoaXMgZnVuY3Rpb24gY2FsbCBp cyBvbmx5IHZhbGlkIGZvciBoYXJ0cw0KPiBpbXBsZW1lbnRpbmcgdGhlIGh5cGVydmlzb3IgZXh0 ZW5zaW9uLg0KPiANCj4gDQo+ICsNCj4gDQo+IA0KPiArICBUaGUgcmVtb3RlIGZlbmNlIGZ1bmN0 aW9uIGFjdHMgYXMgYSBmdWxsIHRsYiBmbHVzaCBpZg0KPiAqIFN0YXJ0QWRkciBhbmQgc2l6ZQ0K PiANCj4gDQo+ICsgIGFyZSBib3RoIDAgKiBzaXplIGlzIGVxdWFsIHRvIDJeWExFTi0xDQo+IA0K PiANCj4gKw0KPiANCj4gDQo+ICsgIEBwYXJhbVtpbl0gIEhhcnRNYXNrICAgICAgICAgICAgIFNj YWxhciBiaXQtdmVjdG9yDQo+IGNvbnRhaW5pbmcgaGFydCBpZHMNCj4gDQo+IA0KPiArICBAcGFy YW1baW5dICBIYXJ0TWFza0Jhc2UgICAgICAgICBUaGUgc3RhcnRpbmcgaGFydGlkDQo+IGZyb20g d2hpY2ggdGhlIGJpdC12ZWN0b3INCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtdXN0IGJlIGNvbXB1dGVkLiBJZg0KPiBzZXQgdG8gLTEsIEhhcnRNYXNrIGlz DQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlZCBh bmQgYWxsDQo+IGhhcnRzIGFyZSBjb25zaWRlcmVkLg0KPiANCj4gDQo+ICsgIEBwYXJhbVtpbl0g IFN0YXJ0QWRkciAgICAgICAgICAgIFRoZSBmaXJzdCBhZGRyZXNzIG9mDQo+IHRoZSBhZmZlY3Rl ZCByYW5nZS4NCj4gDQo+IA0KPiArICBAcGFyYW1baW5dICBTaXplICAgICAgICAgICAgICAgICBI b3cgbWFueSBhZGRyZXNzZXMNCj4gYXJlIGFmZmVjdGVkLg0KPiANCj4gDQo+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgICAgIElQSSB3YXMgc2VudCB0byBhbGwNCj4gdGhlIHRhcmdl dGVkIGhhcnRzLg0KPiANCj4gDQo+ICsgIEByZXR2YWwgRUZJX0xPQURfRVJST1IgICAgICAgICAg IFN0YXJ0QWRkciBvciBTaXplIGlzDQo+IG5vdCB2YWxpZC4NCj4gDQo+IA0KPiArICBAcmV0dmFs IEVGSV9VTlNVUFBPUlRFRCAgICAgICAgICBTQkkgZG9lcyBub3QNCj4gaW1wbGVtZW50IHRoaXMg ZnVuY3Rpb24gb3Igb25lDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgb2YgdGhlIHRhcmdldCBoYXJ0cw0KPiBkb2VzIG5vdCBzdXBwb3J0IHRoZQ0KPiANCj4g DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh5cGVydmlzb3INCj4gZXh0 ZW5zaW9uLg0KPiANCj4gDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgIEVp dGhlcg0KPiBoYXJ0X21hc2tfYmFzZSBvciBhbnkgb2YgdGhlIGhhcnRpZA0KPiANCj4gDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gaGFydF9tYXNrIGlzDQo+IG5v dCB2YWxpZCBpLmUuIGVpdGhlciB0aGUNCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBoYXJ0aWQgaXMgbm90DQo+IGVuYWJsZWQgYnkgdGhlIHBsYXRmb3JtIG9y IGlzDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGF2 YWlsYWJsZSB0byB0aGUNCj4gc3VwZXJ2aXNvci4NCj4gDQo+IA0KPiArKiovDQo+IA0KPiANCj4g K0VGSV9TVEFUVVMNCj4gDQo+IA0KPiArRUZJQVBJDQo+IA0KPiANCj4gK1NiaVJlbW90ZUhGZW5j ZVZ2bWEgKA0KPiANCj4gDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAq SGFydE1hc2ssDQo+IA0KPiANCj4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg ICBIYXJ0TWFza0Jhc2UsDQo+IA0KPiANCj4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgICBTdGFydEFkZHIsDQo+IA0KPiANCj4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAg ICAgICAgICAgICBTaXplDQo+IA0KPiANCj4gKyAgKQ0KPiANCj4gDQo+ICt7DQo+IA0KPiANCj4g KyAgU2JpUmV0IFJldCA9IFNiaUNhbGwgKA0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgIFNC SV9FWFRfUkZFTkNFLA0KPiANCj4gDQo+ICsNCj4gU0JJX0VYVF9SRkVOQ0VfUkVNT1RFX0hGRU5D RV9WVk1BX0FTSUQsDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgNCwNCj4gDQo+IA0KPiAr ICAgICAgICAgICAgICAgICAoVUlOVE4pSGFydE1hc2ssDQo+IA0KPiANCj4gKyAgICAgICAgICAg ICAgICAgSGFydE1hc2tCYXNlLA0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgIFN0YXJ0QWRk ciwNCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICBTaXplDQo+IA0KPiANCj4gKyAgICAgICAg ICAgICAgICAgKTsNCj4gDQo+IA0KPiArICByZXR1cm4gVHJhbnNsYXRlRXJyb3IgKFJldC5FcnJv cik7DQo+IA0KPiANCj4gK30NCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKy8vDQo+IA0KPiANCj4g Ky8vIFNCSSBpbnRlcmZhY2UgZnVuY3Rpb24gZm9yIHRoZSB2ZW5kb3IgZXh0ZW5zaW9uDQo+IA0K PiANCj4gKy8vDQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsvKioNCj4gDQo+IA0KPiArICBDYWxs IGEgZnVuY3Rpb24gaW4gYSB2ZW5kb3IgZGVmaW5lZCBTQkkgZXh0ZW5zaW9uDQo+IA0KPiANCj4g Kw0KPiANCj4gDQo+ICsgIEFTU0VSVCgpIGlmIHRoZSBFeHRlbnNpb25JZCBpcyBub3QgaW4gdGhl IGRlc2lnbmF0ZWQNCj4gU0JJIFZlbmRvciBFeHRlbnNpb24NCj4gDQo+IA0KPiArICBTcGFjZSBv ciBOdW1BcmdzIGV4Y2VlZHMgU0JJX0NBTExfTUFYX0FSR1MuDQo+IA0KPiANCj4gKw0KPiANCj4g DQo+ICsgIEBwYXJhbVtpbl0gIEV4dGVuc2lvbklkICAgICAgICAgIFRoZSBTQkkgdmVuZG9yDQo+ IGV4dGVuc2lvbiBJRC4NCj4gDQo+IA0KPiArICBAcGFyYW1baW5dICBGdW5jdGlvbklkICAgICAg ICAgICBUaGUgZnVuY3Rpb24gSUQgdG8NCj4gY2FsbCBpbiB0aGlzIGV4dGVuc2lvbi4NCj4gDQo+ IA0KPiArICBAcGFyYW1baW5dICBOdW1BcmdzICAgICAgICAgICAgICBIb3cgbWFueSBhcmd1bWVu dHMNCj4gYXJlIHBhc3NlZC4NCj4gDQo+IA0KPiArICBAcGFyYW1baW5dICAuLi4gICAgICAgICAg ICAgICAgICBBY3R1YWwgQXJndW1lbnRzIHRvDQo+IHRoZSBmdW5jdGlvbi4NCj4gDQo+IA0KPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTIGlmIHRoZSBTQkkgZnVuY3Rpb24gd2FzIGNhbGxlZA0KPiBh bmQgaXQgd2FzIHN1Y2Nlc3NmdWwNCj4gDQo+IA0KPiArICBAcmV0dmFsIG90aGVycyBpZiB0aGUg Y2FsbGVkIFNCSSBmdW5jdGlvbiByZXR1cm5zIGFuDQo+IGVycm9yDQo+IA0KPiANCj4gKyoqLw0K PiANCj4gDQo+ICtFRklfU1RBVFVTDQo+IA0KPiANCj4gK0VGSUFQSQ0KPiANCj4gDQo+ICtTYmlW ZW5kb3JDYWxsICgNCj4gDQo+IA0KPiArICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgIEV4dGVuc2lvbklkLA0KPiANCj4gDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgICAgICAgRnVuY3Rpb25JZCwNCj4gDQo+IA0KPiArICBJTiAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICAgIE51bUFyZ3MsDQo+IA0KPiANCj4gKyAgLi4uDQo+IA0KPiANCj4gKyAgKQ0K PiANCj4gDQo+ICt7DQo+IA0KPiANCj4gKyAgICBTYmlSZXQgUmV0Ow0KPiANCj4gDQo+ICsgICAg VkFfTElTVCBBcmdzOw0KPiANCj4gDQo+ICsgICAgVkFfU1RBUlQgKEFyZ3MsIE51bUFyZ3MpOw0K PiANCj4gDQo+ICsNCj4gDQo+IA0KPiArICAgIEFTU0VSVCAoRXh0ZW5zaW9uSWQgPj0gU0JJX0VY VF9WRU5ET1JfU1RBUlQgJiYNCj4gRXh0ZW5zaW9uSWQgPD0gU0JJX0VYVF9WRU5ET1JfRU5EKTsN Cj4gDQo+IA0KPiArICAgIEFTU0VSVCAoTnVtQXJncyA8PSBTQklfQ0FMTF9NQVhfQVJHUyk7DQo+ IA0KPiANCj4gKw0KPiANCj4gDQo+ICsgICAgc3dpdGNoIChOdW1BcmdzKSB7DQo+IA0KPiANCj4g KyAgICAgIGNhc2UgMDoNCj4gDQo+IA0KPiArICAgICAgICBSZXQgPSBTYmlDYWxsIChFeHRlbnNp b25JZCwgRnVuY3Rpb25JZCwNCj4gTnVtQXJncyk7DQo+IA0KPiANCj4gKyAgICAgICAgYnJlYWs7 DQo+IA0KPiANCj4gKyAgICAgIGNhc2UgMToNCj4gDQo+IA0KPiArICAgICAgICBSZXQgPSBTYmlD YWxsIChFeHRlbnNpb25JZCwgRnVuY3Rpb25JZCwNCj4gTnVtQXJncywgVkFfQVJHIChBcmdzLCBV SU5UTikpOw0KPiANCj4gDQo+ICsgICAgICAgIGJyZWFrOw0KPiANCj4gDQo+ICsgICAgICBjYXNl IDI6DQo+IA0KPiANCj4gKyAgICAgICAgUmV0ID0gU2JpQ2FsbCAoRXh0ZW5zaW9uSWQsIEZ1bmN0 aW9uSWQsDQo+IE51bUFyZ3MsIFZBX0FSRyAoQXJncywgVUlOVE4pLA0KPiANCj4gDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgIFZBX0FSRyAoQXJncywgVUlOVE4pKTsNCj4gDQo+IA0KPiArICAg ICAgICBicmVhazsNCj4gDQo+IA0KPiArICAgICAgY2FzZSAzOg0KPiANCj4gDQo+ICsgICAgICAg IFJldCA9IFNiaUNhbGwgKEV4dGVuc2lvbklkLCBGdW5jdGlvbklkLA0KPiBOdW1BcmdzLCBWQV9B UkcgKEFyZ3MsIFVJTlROKSwNCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICAgICAgICBWQV9B UkcgKEFyZ3MsIFVJTlROKSwgVkFfQVJHDQo+IChBcmdzLCBVSU5UTikpOw0KPiANCj4gDQo+ICsg ICAgICAgIGJyZWFrOw0KPiANCj4gDQo+ICsgICAgICBjYXNlIDQ6DQo+IA0KPiANCj4gKyAgICAg ICAgUmV0ID0gU2JpQ2FsbCAoRXh0ZW5zaW9uSWQsIEZ1bmN0aW9uSWQsDQo+IE51bUFyZ3MsIFZB X0FSRyAoQXJncywgVUlOVE4pLA0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIFZB X0FSRyAoQXJncywgVUlOVE4pLCBWQV9BUkcNCj4gKEFyZ3MsIFVJTlROKSwNCj4gDQo+IA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICBWQV9BUkcgKEFyZ3MsIFVJTlROKSk7DQo+IA0KPiANCj4g KyAgICAgICAgYnJlYWs7DQo+IA0KPiANCj4gKyAgICAgIGNhc2UgNToNCj4gDQo+IA0KPiArICAg ICAgICBSZXQgPSBTYmlDYWxsIChFeHRlbnNpb25JZCwgRnVuY3Rpb25JZCwNCj4gTnVtQXJncywg VkFfQVJHIChBcmdzLCBVSU5UTiksDQo+IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgICAgICAg VkFfQVJHIChBcmdzLCBVSU5UTiksIFZBX0FSRw0KPiAoQXJncywgVUlOVE4pLA0KPiANCj4gDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgIFZBX0FSRyAoQXJncywgVUlOVE4pLCBWQV9BUkcNCj4g KEFyZ3MsIFVJTlROKSk7DQo+IA0KPiANCj4gKyAgICAgICAgYnJlYWs7DQo+IA0KPiANCj4gKyAg ICAgIGNhc2UgNjoNCj4gDQo+IA0KPiArICAgICAgICBSZXQgPSBTYmlDYWxsIChFeHRlbnNpb25J ZCwgRnVuY3Rpb25JZCwNCj4gTnVtQXJncywgVkFfQVJHIChBcmdzLCBVSU5UTiksDQo+IA0KPiAN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgVkFfQVJHIChBcmdzLCBVSU5UTiksIFZBX0FSRw0K PiAoQXJncywgVUlOVE4pLA0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIFZBX0FS RyAoQXJncywgVUlOVE4pLCBWQV9BUkcNCj4gKEFyZ3MsIFVJTlROKSwNCj4gDQo+IA0KPiArICAg ICAgICAgICAgICAgICAgICAgICBWQV9BUkcgKEFyZ3MsIFVJTlROKSk7DQo+IA0KPiANCj4gKyAg ICAgICAgYnJlYWs7DQo+IA0KPiANCj4gKyAgICAgIGRlZmF1bHQ6DQo+IA0KPiANCj4gKyAgICAg ICAgLy8gVG9vIG1hbnkgYXJncy4gSW4gdGhlb3J5IFNCSSBjYW4gaGFuZGxlIG1vcmUNCj4gYXJn dW1lbnRzIHdoZW4gdGhleSBhcmUNCj4gDQo+IA0KPiArICAgICAgICAvLyBwYXNzZWQgb24gdGhl IHN0YWNrIGJ1dCBubyBTQkkgZXh0ZW5zaW9uDQo+IHVzZXMgdGhpcywgdGhlcmVmb3JlIGl0J3MN Cj4gDQo+IA0KPiArICAgICAgICAvLyBub3QgeWV0IGltcGxlbWVudGVkIGhlcmUuDQo+IA0KPiAN Cj4gKyAgICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gDQo+IA0KPiArICAg ICB9DQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsgICAgVkFfRU5EKEFyZ3MpOw0KPiANCj4gDQo+ ICsgICAgcmV0dXJuIFRyYW5zbGF0ZUVycm9yIChSZXQuRXJyb3IpOw0KPiANCj4gDQo+ICt9DQo+ IA0KPiANCj4gKw0KPiANCj4gDQo+ICsvLw0KPiANCj4gDQo+ICsvLyBTQkkgRmlybXdhcmUgZXh0 ZW5zaW9uDQo+IA0KPiANCj4gKy8vDQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsvKioNCj4gDQo+ IA0KPiArICBHZXQgc2NyYXRjaCBzcGFjZSBvZiB0aGUgY3VycmVudCBoYXJ0Lg0KPiANCj4gDQo+ ICsNCj4gDQo+IA0KPiArICBQbGVhc2UgY29uc2lkZXIgdXNpbmcgdGhlIHdyYXBwZXINCj4gU2Jp R2V0RmlybXdhcmVDb250ZXh0IGlmIHlvdSBvbmx5IG5lZWQgdG8NCj4gDQo+IA0KPiArICBhY2Nl c3MgdGhlIGZpcm13YXJlIGNvbnRleHQuDQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsgIEBwYXJh bVtvdXRdIFNjcmF0Y2hTcGFjZSAgICAgICAgIFRoZSBzY3JhdGNoIHNwYWNlDQo+IHBvaW50ZXIu DQo+IA0KPiANCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgVGhlIG9wZXJh dGlvbg0KPiBzdWNjZWVkcy4NCj4gDQo+IA0KPiArKiovDQo+IA0KPiANCj4gK0VGSV9TVEFUVVMN Cj4gDQo+IA0KPiArRUZJQVBJDQo+IA0KPiANCj4gK1NiaUdldE1zY3JhdGNoICgNCj4gDQo+IA0K PiArICBPVVQgU0JJX1NDUkFUQ0ggICAgICAgICAgICAgICAgICAgICoqU2NyYXRjaFNwYWNlDQo+ IA0KPiANCj4gKyAgKQ0KPiANCj4gDQo+ICt7DQo+IA0KPiANCj4gKyAgU2JpUmV0IFJldCA9IFNi aUNhbGwgKFNCSV9FREsyX0ZXX0VYVCwNCj4gU0JJX0VYVF9GV19NU0NSQVRDSF9GVU5DLCAwKTsN Cj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKyAgaWYgKCFSZXQuRXJyb3IpIHsNCj4gDQo+IA0KPiAr ICAgICpTY3JhdGNoU3BhY2UgPSAoU0JJX1NDUkFUQ0ggKilSZXQuVmFsdWU7DQo+IA0KPiANCj4g KyAgfQ0KPiANCj4gDQo+ICsNCj4gDQo+IA0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+IA0K PiANCj4gK30NCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKy8qKg0KPiANCj4gDQo+ICsgIEdldCBz Y3JhdGNoIHNwYWNlIG9mIHRoZSBnaXZlbiBoYXJ0IGlkLg0KPiANCj4gDQo+ICsNCj4gDQo+IA0K PiArICBAcGFyYW1baW5dICBIYXJ0SWQgICAgICAgICAgICAgICBUaGUgaGFydCBpZC4NCj4gDQo+ IA0KPiArICBAcGFyYW1bb3V0XSBTY3JhdGNoU3BhY2UgICAgICAgICBUaGUgc2NyYXRjaCBzcGFj ZQ0KPiBwb2ludGVyLg0KPiANCj4gDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg ICAgIFRoZSBvcGVyYXRpb24NCj4gc3VjY2VlZHMuDQo+IA0KPiANCj4gKyoqLw0KPiANCj4gDQo+ ICtFRklfU1RBVFVTDQo+IA0KPiANCj4gK0VGSUFQSQ0KPiANCj4gDQo+ICtTYmlHZXRNc2NyYXRj aEhhcnRpZCAoDQo+IA0KPiANCj4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEhhcnRJZCwNCj4gDQo+IA0KPiArICBPVVQgU0JJX1NDUkFUQ0ggICAgICAgICAgICAgICAg ICAgICoqU2NyYXRjaFNwYWNlDQo+IA0KPiANCj4gKyAgKQ0KPiANCj4gDQo+ICt7DQo+IA0KPiAN Cj4gKyAgU2JpUmV0IFJldCA9IFNiaUNhbGwgKA0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAg IFNCSV9FREsyX0ZXX0VYVCwNCj4gDQo+IA0KPiArICAgICAgICAgICAgICAgICBTQklfRVhUX0ZX X01TQ1JBVENIX0hBUlRJRF9GVU5DLA0KPiANCj4gDQo+ICsgICAgICAgICAgICAgICAgIDEsDQo+ IA0KPiANCj4gKyAgICAgICAgICAgICAgICAgSGFydElkDQo+IA0KPiANCj4gKyAgICAgICAgICAg ICAgICAgKTsNCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKyAgaWYgKCFSZXQuRXJyb3IpIHsNCj4g DQo+IA0KPiArICAgICpTY3JhdGNoU3BhY2UgPSAoU0JJX1NDUkFUQ0ggKilSZXQuVmFsdWU7DQo+ IA0KPiANCj4gKyAgfQ0KPiANCj4gDQo+ICsNCj4gDQo+IA0KPiArICByZXR1cm4gRUZJX1NVQ0NF U1M7DQo+IA0KPiANCj4gK30NCj4gDQo+IA0KPiArDQo+IA0KPiANCj4gKy8qKg0KPiANCj4gDQo+ ICsgIEdldCBmaXJtd2FyZSBjb250ZXh0IG9mIHRoZSBjYWxsaW5nIGhhcnQuDQo+IA0KPiANCj4g Kw0KPiANCj4gDQo+ICsgIEBwYXJhbVtvdXRdIEZpcm13YXJlQ29udGV4dCAgICAgIFRoZSBmaXJt d2FyZSBjb250ZXh0DQo+IHBvaW50ZXIuDQo+IA0KPiANCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICAgICAgVGhlIG9wZXJhdGlvbg0KPiBzdWNjZWVkcy4NCj4gDQo+IA0KPiArKiov DQo+IA0KPiANCj4gK0VGSV9TVEFUVVMNCj4gDQo+IA0KPiArRUZJQVBJDQo+IA0KPiANCj4gK1Ni aUdldEZpcm13YXJlQ29udGV4dCAoDQo+IA0KPiANCj4gKyAgT1VUIEVGSV9SSVNDVl9PUEVOU0JJ X0ZJUk1XQVJFX0NPTlRFWFQNCj4gKipGaXJtd2FyZUNvbnRleHQNCj4gDQo+IA0KPiArICApDQo+ IA0KPiANCj4gK3sNCj4gDQo+IA0KPiArICBTQklfU0NSQVRDSCAgKlNjcmF0Y2hTcGFjZTsNCj4g DQo+IA0KPiArICBTQklfUExBVEZPUk0gKlNiaVBsYXRmb3JtOw0KPiANCj4gDQo+ICsgIFNiaVJl dCBSZXQgPSBTYmlDYWxsIChTQklfRURLMl9GV19FWFQsDQo+IFNCSV9FWFRfRldfTVNDUkFUQ0hf RlVOQywgMCk7DQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsgIGlmICghUmV0LkVycm9yKSB7DQo+ IA0KPiANCj4gKyAgICBTY3JhdGNoU3BhY2UgPSAoU0JJX1NDUkFUQ0ggKilSZXQuVmFsdWU7DQo+ IA0KPiANCj4gKyAgICBTYmlQbGF0Zm9ybSA9IChTQklfUExBVEZPUk0NCj4gKilzYmlfcGxhdGZv cm1fcHRyKFNjcmF0Y2hTcGFjZSk7DQo+IA0KPiANCj4gKyAgICAqRmlybXdhcmVDb250ZXh0ID0N Cj4gKEVGSV9SSVNDVl9PUEVOU0JJX0ZJUk1XQVJFX0NPTlRFWFQgKilTYmlQbGF0Zm9ybS0NCj4g PmZpcm13YXJlX2NvbnRleHQ7DQo+IA0KPiANCj4gKyAgfQ0KPiANCj4gDQo+ICsNCj4gDQo+IA0K PiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+IA0KPiANCj4gK30NCj4gDQo+IA0KPiArDQo+IA0K PiANCj4gKy8qKg0KPiANCj4gDQo+ICsgIFNldCBmaXJtd2FyZSBjb250ZXh0IG9mIHRoZSBjYWxs aW5nIGhhcnQuDQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsgIEBwYXJhbVtpbl0gRmlybXdhcmVD b250ZXh0ICAgICAgIFRoZSBmaXJtd2FyZSBjb250ZXh0DQo+IHBvaW50ZXIuDQo+IA0KPiANCj4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgVGhlIG9wZXJhdGlvbg0KPiBzdWNj ZWVkcy4NCj4gDQo+IA0KPiArKiovDQo+IA0KPiANCj4gK0VGSV9TVEFUVVMNCj4gDQo+IA0KPiAr RUZJQVBJDQo+IA0KPiANCj4gK1NiaVNldEZpcm13YXJlQ29udGV4dCAoDQo+IA0KPiANCj4gKyAg SU4gRUZJX1JJU0NWX09QRU5TQklfRklSTVdBUkVfQ09OVEVYVA0KPiAqRmlybXdhcmVDb250ZXh0 DQo+IA0KPiANCj4gKyAgKQ0KPiANCj4gDQo+ICt7DQo+IA0KPiANCj4gKyAgU0JJX1NDUkFUQ0gg ICpTY3JhdGNoU3BhY2U7DQo+IA0KPiANCj4gKyAgU0JJX1BMQVRGT1JNICpTYmlQbGF0Zm9ybTsN Cj4gDQo+IA0KPiArICBTYmlSZXQgUmV0ID0gU2JpQ2FsbCAoU0JJX0VESzJfRldfRVhULA0KPiBT QklfRVhUX0ZXX01TQ1JBVENIX0ZVTkMsIDApOw0KPiANCj4gDQo+ICsNCj4gDQo+IA0KPiArICBp ZiAoIVJldC5FcnJvcikgew0KPiANCj4gDQo+ICsgICAgU2NyYXRjaFNwYWNlID0gKFNCSV9TQ1JB VENIICopUmV0LlZhbHVlOw0KPiANCj4gDQo+ICsgICAgU2JpUGxhdGZvcm0gPSAoU0JJX1BMQVRG T1JNICopc2JpX3BsYXRmb3JtX3B0cg0KPiAoU2NyYXRjaFNwYWNlKTsNCj4gDQo+IA0KPiArICAg IFNiaVBsYXRmb3JtLT5maXJtd2FyZV9jb250ZXh0ID0NCj4gKFVJTlROKUZpcm13YXJlQ29udGV4 dDsNCj4gDQo+IA0KPiArICB9DQo+IA0KPiANCj4gKw0KPiANCj4gDQo+ICsgIHJldHVybiBFRklf U1VDQ0VTUzsNCj4gDQo+IA0KPiArfQ0KPiANCj4gDQo+IC0tDQo+IDIuMjYuMQ0KPiANCj4gDQo+ IA0KDQo=