From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mx.groups.io with SMTP id smtpd.web11.99.1595607847384897433 for ; Fri, 24 Jul 2020 09:24:07 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=Xcfn9hyw; spf=pass (domain: intel.com, ip: 192.55.52.93, mailfrom: michael.d.kinney@intel.com) IronPort-SDR: ku9sSmL1Uvn9SAAleQDmeMfY3wZXSlR4lcABcPjHlpajGJ06i7c5oL+iz/SKTAN6akz6EtaOCD dYCcmNPB95tQ== X-IronPort-AV: E=McAfee;i="6000,8403,9692"; a="148649653" X-IronPort-AV: E=Sophos;i="5.75,391,1589266800"; d="scan'208";a="148649653" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jul 2020 09:23:59 -0700 IronPort-SDR: +FgwA5jhhnDH+al5EJp2O8zOMH5PvdN7mg+/e5R6gqJmL7ZJ1Ky5i+wD9VVTPUzCYJD42RAzgu TAexpM6hl6Dg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,391,1589266800"; d="scan'208";a="327364249" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by FMSMGA003.fm.intel.com with ESMTP; 24 Jul 2020 09:23:59 -0700 Received: from fmsmsx125.amr.corp.intel.com (10.18.125.40) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.439.0; Fri, 24 Jul 2020 09:23:59 -0700 Received: from FMSEDG001.ED.cps.intel.com (10.1.192.133) by FMSMSX125.amr.corp.intel.com (10.18.125.40) with Microsoft SMTP Server (TLS) id 14.3.439.0; Fri, 24 Jul 2020 09:23:58 -0700 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.173) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (TLS) id 14.3.439.0; Fri, 24 Jul 2020 09:23:57 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hH6032bS7QSl6lIc0rjZv0GyIWozRzNdZJtqGfPrM8GEkuABF/iadUQLe9j/epeGr+rv/Ea5QsH65FXjGnPUCmQacSY3UQP40PfuE7YcgrjpeWDojwn5jySUUfaPPuPviVjo786itNdZfp6U7r/zVPLf1D0rCcFBmezgyZSw/nBXTWz0Wgti2hpirrqSb8iv72BiYKk8BjSJtUjSpRY+RKso0DkTNiP9/eeFkZLdpNA9RIsj5s4h3dbCBi8bbk1FXUV7pjcJq5LVbC+pEL89qunQxYPBjXRCK4SibO6fB8N4CzBHoVW2ObhaKe9Wv+D8jLQsuss5JoRnFpNjVFrYFA== 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=bbxKCH2XWZ8J80hddn5ibPD+wxRkxuO0pQD2fwV99jo=; b=TtKpoMidYFI5CSuD/BxcFPcNqJYnrbpaQ1d7GtzpUKuxFKQgSHnFrHTY9ntzBECnY2or4odqy9bxotDO/XwaJ9fZ6DWNOfWMCn3Q/SkGLrhALporXCrXXzvKtENFTxJS2tCIBSoc6in/2DgpixQ7u//9KD97JdLDXnfFu5tqwHBgiSFcYVmc04HQPZ8izxFZ7Pq6DPfJoillBv2+RRKUkJ2Ywk9ics3w9ft6iBGl8hRD8iTpmlnZ6a1wQWl35+C85gv0aLx6Z/SlZ2PiUlf212TQnMOo+e8NXlXRTzuakM90wdWIzucYliodbgTxKWIEdbMdMUedSYGzjIeN6kzWXA== 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=bbxKCH2XWZ8J80hddn5ibPD+wxRkxuO0pQD2fwV99jo=; b=Xcfn9hywb+HwFy+NvChBmE8diY/93lV7nrk9HSDmd3cuOOTIT/lAMDBMFSOPzwHwdKvVx8DSO1L04QMPa3p+TzCpk+Vf2D6JRA0hhYdqI3FGkOvvEYiH6tTct3BS1mVfkQpa7YT996sdFf/7CXl4QNc/H/iGRFCb0vtEYAsLBYU= Received: from MN2PR11MB4461.namprd11.prod.outlook.com (2603:10b6:208:192::29) by BL0PR11MB2916.namprd11.prod.outlook.com (2603:10b6:208:72::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3216.23; Fri, 24 Jul 2020 16:23:38 +0000 Received: from MN2PR11MB4461.namprd11.prod.outlook.com ([fe80::201e:29f2:a02:c260]) by MN2PR11MB4461.namprd11.prod.outlook.com ([fe80::201e:29f2:a02:c260%4]) with mapi id 15.20.3216.024; Fri, 24 Jul 2020 16:23:38 +0000 From: "Michael D Kinney" To: "Ni, Ray" , "devel@edk2.groups.io" , "Kinney, Michael D" CC: "Shao, Ming" , "Dong, Eric" , Laszlo Ersek , Sean Brogan , Bret Barkelew , "Yao, Jiewen" Subject: Re: [PATCH v2] UefiCpuPkg/MtrrLib/UnitTest: Add host based unit test Thread-Topic: [PATCH v2] UefiCpuPkg/MtrrLib/UnitTest: Add host based unit test Thread-Index: AQHWYYWq9JjGg5nBjEms8bvyhxA766kW6lsQ Date: Fri, 24 Jul 2020 16:23:38 +0000 Message-ID: References: <20200724064148.1896-1-ray.ni@intel.com> In-Reply-To: <20200724064148.1896-1-ray.ni@intel.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: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [24.19.191.44] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 65c9fbae-598e-4891-7592-08d82fedec08 x-ms-traffictypediagnostic: BL0PR11MB2916: x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: YCqvDzf6AptP/kLdBa049nv71iwM+uK2kAlnPZVmW6pU5yqSXquUoeO1bhyXl/W3mWqRQUzi1boEFZvErEPsX5XqKn15hrT5b9gRRbARXj8z/RPYX0n8OtYtZMgFLZDd5w7UQTS0K9XP3ZfLti4jUFEQEL1Esndx9KG4eWb78MkZ4sLOfYvdY4eEL/uoPGUm8X4ikkdUH0AD8q83YG4A/ibJJUMQA9RoAlTX+aA+OVV5FeXFkW5D9PhqvIHNQpupDSbX7lFLTj0VXnX+XlB1dLgYpllMd7kFa9bIax76qi66Y0kf57ak5lnucknIpGDY 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:(4636009)(396003)(376002)(136003)(366004)(39860400002)(346002)(71200400001)(66446008)(19627235002)(8676002)(64756008)(55016002)(9686003)(8936002)(66556008)(66476007)(66946007)(76116006)(4326008)(478600001)(110136005)(7696005)(52536014)(53546011)(5660300002)(86362001)(54906003)(6506007)(30864003)(26005)(107886003)(2906002)(316002)(33656002)(83380400001)(186003)(559001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: Dm1ARG0PKdZTXQFu8aI3rzujbkuaEq4CrxJTR8hMUi4RGa5dRAyrDecstIQdUMYZMq00kN+jo8Wq1kZH8b3XM/mxxCHa9jSlgXWQv/sa58WBK5SvNh3ZwwZVAlX5sLtI24RpaqFGhwWLZ8GW/GBLpNREbvT+R8rVmJN3dGR2sZ0OBpHoC2SCz92OPql3MA9akG0hb5lbBoCBPWNFwGZH+iz2g7ql0rTEROLoPM2i/lKh80dsCLUZezr/lQak8u3/RpTgwpcPbkMY3Wqwvn0u1XfXtyq+NGeym4fP0pXWetlJYXnUhWZe7Jcq4FE5gAyVRhQgcLmOmjBs1VIK0GxQbnC1FC4d1sNgk8LjESuk/J/vuZlsS806JynlglKFQ3d3XcVrcStJ0C68OtyU3sR8VibdTkO3fmNlhIqpiUhF5GpDd8J9Qo7ZuO3c+tZjnP1uZI9XB2O5DS0CdFQfpcV+gUeQ8JZ6xn1v+fX7ghshIP8= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN2PR11MB4461.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 65c9fbae-598e-4891-7592-08d82fedec08 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Jul 2020 16:23:38.2609 (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: a7YYEsHwTp8281gYyP+3yE8QBg1WVa5lN+aAYXiX30GxFLkw/W79Ig7ypxmLq1NqQV7f2pc1eycND9tz1V7JkaQ2kiv1ystGWiRpALvlwrA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL0PR11MB2916 Return-Path: michael.d.kinney@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 UmV2aWV3ZWQtYnk6IE1pY2hhZWwgRCBLaW5uZXkgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29t Pg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IE5pLCBSYXkgPHJheS5u aUBpbnRlbC5jb20+DQo+IFNlbnQ6IFRodXJzZGF5LCBKdWx5IDIzLCAyMDIwIDExOjQyIFBNDQo+ IFRvOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbw0KPiBDYzogS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hh ZWwuZC5raW5uZXlAaW50ZWwuY29tPjsNCj4gU2hhbywgTWluZyA8bWluZy5zaGFvQGludGVsLmNv bT47IERvbmcsIEVyaWMNCj4gPGVyaWMuZG9uZ0BpbnRlbC5jb20+OyBMYXN6bG8gRXJzZWsNCj4g PGxlcnNla0ByZWRoYXQuY29tPjsgU2VhbiBCcm9nYW4NCj4gPHNlYW4uYnJvZ2FuQG1pY3Jvc29m dC5jb20+OyBCcmV0IEJhcmtlbGV3DQo+IDxCcmV0LkJhcmtlbGV3QG1pY3Jvc29mdC5jb20+OyBZ YW8sIEppZXdlbg0KPiA8amlld2VuLnlhb0BpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFtQQVRDSCB2 Ml0gVWVmaUNwdVBrZy9NdHJyTGliL1VuaXRUZXN0OiBBZGQNCj4gaG9zdCBiYXNlZCB1bml0IHRl c3QNCj4gDQo+IEFkZCBob3N0IGJhc2VkIHVuaXQgdGVzdHMgZm9yIHRoZSBNdHJyTGliIHNlcnZp Y2VzLg0KPiBUaGUgQmFzZUxpYiBzZXJ2aWNlcyBBc21DcHVpZCgpLCBBc21SZWFkTXNyNjQoKSwg YW5kDQo+IEFzbVdyaXRlTXNyNjQoKSBhcmUgaG9va2VkIGFuZCBwcm92aWRlIHNpbXBsZSBlbXVs YXRpb24NCj4gb2YgdGhlIENQVUlEIGxlYWZzIGFuZCBNU1JzIHJlcXVpcmVkIGJ5IHRoZSBNdHJy TGliIHRvDQo+IHJ1biBhcyBhIGhvc3QgYmFzZWQgdW5pdCB0ZXN0Lg0KPiANCj4gVGVzdCBjYXNl cyBhcmUgZGV2ZWxvcGVkIGZvciBlYWNoIG9mIHRoZSBBUEkuDQo+IA0KPiBGb3IgdGhlIG1vc3Qg aW1wb3J0YW50IEFQSXMNCj4gTXRyclNldE1lbW9yeUF0dHJpYnV0ZXNJbk10cnJTZXR0aW5ncygp DQo+IGFuZCBNdHJyU2V0TWVtb3J5QXR0cmlidXRlSW5NdHJyU2V0dGluZ3MoKSwgcmFuZG9tDQo+ IGlucHV0cyBhcmUNCj4gZ2VuZXJhdGVkIGFuZCBmZWQgdG8gdGhlIEFQSXMgdG8gbWFrZSBzdXJl IHRoZQ0KPiBpbXBsZW1lbnRhdGlvbiBpcw0KPiBnb29kLiBUaGUgdGVzdCBhcHBsaWNhdGlvbiBh Y2NlcHRzIGFuIG9wdGlvbmFsDQo+IHBhcmFtZXRlciB3aGljaA0KPiBzcGVjaWZpZXMgaG93IG1h bnkgaXRlcmF0aW9ucyBvZiBmZWVkaW5nIHJhbmRvbSBpbnB1dHMNCj4gdG8gdGhlIHR3bw0KPiBB UElzLiBUaGUgb3ZlcmFsbCBudW1iZXIgb2YgdGVzdCBjYXNlcyBpbmNyZWFzZXMgd2hlbg0KPiB0 aGUgaXRlcmF0aW9uDQo+IGluY3JlYXNlcy4gRGVmYXVsdCBpdGVyYXRpb24gaXMgMTAgd2hlbiBu byBwYXJhbWV0ZXIgaXMNCj4gc3BlY2lmaWVkLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogUmF5IE5p IDxyYXkubmlAaW50ZWwuY29tPg0KPiBTaWduZWQtb2ZmLWJ5OiBNaWNoYWVsIEQgS2lubmV5DQo+ IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4NCj4gU2lnbmVkLW9mZi1ieTogTWluZyBTaGFv IDxtaW5nLnNoYW9AaW50ZWwuY29tPisrDQo+IENjOiBNaWNoYWVsIEQgS2lubmV5IDxtaWNoYWVs LmQua2lubmV5QGludGVsLmNvbT4NCj4gQ2M6IE1pbmcgU2hhbyA8bWluZy5zaGFvQGludGVsLmNv bT4NCj4gQ2M6IEVyaWMgRG9uZyA8ZXJpYy5kb25nQGludGVsLmNvbT4NCj4gQ2M6IFJheSBOaSA8 cmF5Lm5pQGludGVsLmNvbT4NCj4gQ2M6IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb20+ DQo+IENjOiBTZWFuIEJyb2dhbiA8c2Vhbi5icm9nYW5AbWljcm9zb2Z0LmNvbT4NCj4gQ2M6IEJy ZXQgQmFya2VsZXcgPEJyZXQuQmFya2VsZXdAbWljcm9zb2Z0LmNvbT4NCj4gQ2M6IEppZXdlbiBZ YW8gPGppZXdlbi55YW9AaW50ZWwuY29tPg0KPiAtLS0NCj4gIC4uLi9NdHJyTGliL1VuaXRUZXN0 L010cnJMaWJVbml0VGVzdC5jICAgICAgICB8IDExNDANCj4gKysrKysrKysrKysrKysrKysNCj4g IC4uLi9NdHJyTGliL1VuaXRUZXN0L010cnJMaWJVbml0VGVzdC5oICAgICAgICB8ICAxNzENCj4g KysrDQo+ICAuLi4vTXRyckxpYi9Vbml0VGVzdC9NdHJyTGliVW5pdFRlc3RIb3N0LmluZiAgfCAg IDM5ICsNCj4gIFVlZmlDcHVQa2cvTGlicmFyeS9NdHJyTGliL1VuaXRUZXN0L1N1cHBvcnQuYyB8 ICA5MTMNCj4gKysrKysrKysrKysrKw0KPiAgVWVmaUNwdVBrZy9UZXN0L1VlZmlDcHVQa2dIb3N0 VGVzdC5kc2MgICAgICAgIHwgICAzMSArDQo+ICA1IGZpbGVzIGNoYW5nZWQsIDIyOTQgaW5zZXJ0 aW9ucygrKQ0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+IFVlZmlDcHVQa2cvTGlicmFyeS9NdHJy TGliL1VuaXRUZXN0L010cnJMaWJVbml0VGVzdC5jDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4g VWVmaUNwdVBrZy9MaWJyYXJ5L010cnJMaWIvVW5pdFRlc3QvTXRyckxpYlVuaXRUZXN0LmgNCj4g IGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiBVZWZpQ3B1UGtnL0xpYnJhcnkvTXRyckxpYi9Vbml0VGVz dC9NdHJyTGliVW5pdFRlc3RIb3N0DQo+IC5pbmYNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiBV ZWZpQ3B1UGtnL0xpYnJhcnkvTXRyckxpYi9Vbml0VGVzdC9TdXBwb3J0LmMNCj4gIGNyZWF0ZSBt b2RlIDEwMDY0NA0KPiBVZWZpQ3B1UGtnL1Rlc3QvVWVmaUNwdVBrZ0hvc3RUZXN0LmRzYw0KPiAN Cj4gZGlmZiAtLWdpdA0KPiBhL1VlZmlDcHVQa2cvTGlicmFyeS9NdHJyTGliL1VuaXRUZXN0L010 cnJMaWJVbml0VGVzdC5jDQo+IGIvVWVmaUNwdVBrZy9MaWJyYXJ5L010cnJMaWIvVW5pdFRlc3Qv TXRyckxpYlVuaXRUZXN0LmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAw MDAwMC4uMmVhYzQxZmM3NA0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKw0KPiBiL1VlZmlDcHVQa2cv TGlicmFyeS9NdHJyTGliL1VuaXRUZXN0L010cnJMaWJVbml0VGVzdC5jDQo+IEBAIC0wLDAgKzEs MTE0MCBAQA0KPiArLyoqIEBmaWxlDQo+IA0KPiArICBVbml0IHRlc3RzIG9mIHRoZSBNdHJyTGli IGluc3RhbmNlIG9mIHRoZSBNdHJyTGliDQo+IGNsYXNzDQo+IA0KPiArDQo+IA0KPiArICBDb3B5 cmlnaHQgKGMpIDIwMjAsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzDQo+IHJlc2VydmVk LjxCUj4NCj4gDQo+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0 ZW50DQo+IA0KPiArDQo+IA0KPiArKiovDQo+IA0KPiArDQo+IA0KPiArI2luY2x1ZGUgIk10cnJM aWJVbml0VGVzdC5oIg0KPiANCj4gKw0KPiANCj4gK1NUQVRJQyBDT05TVCBNVFJSX0xJQl9TWVNU RU1fUEFSQU1FVEVSDQo+IG1EZWZhdWx0U3lzdGVtUGFyYW1ldGVyID0gew0KPiANCj4gKyAgNDIs IFRSVUUsIFRSVUUsIENhY2hlVW5jYWNoZWFibGUsIDEyDQo+IA0KPiArfTsNCj4gDQo+ICsNCj4g DQo+ICtTVEFUSUMgTVRSUl9MSUJfU1lTVEVNX1BBUkFNRVRFUiBtU3lzdGVtUGFyYW1ldGVyc1td ID0NCj4gew0KPiANCj4gKyAgeyAzOCwgVFJVRSwgVFJVRSwgQ2FjaGVVbmNhY2hlYWJsZSwgICAg MTIgfSwNCj4gDQo+ICsgIHsgMzgsIFRSVUUsIFRSVUUsIENhY2hlV3JpdGVCYWNrLCAgICAgIDEy IH0sDQo+IA0KPiArICB7IDM4LCBUUlVFLCBUUlVFLCBDYWNoZVdyaXRlVGhyb3VnaCwgICAxMiB9 LA0KPiANCj4gKyAgeyAzOCwgVFJVRSwgVFJVRSwgQ2FjaGVXcml0ZVByb3RlY3RlZCwgMTIgfSwN Cj4gDQo+ICsgIHsgMzgsIFRSVUUsIFRSVUUsIENhY2hlV3JpdGVDb21iaW5pbmcsIDEyIH0sDQo+ IA0KPiArDQo+IA0KPiArICB7IDQyLCBUUlVFLCBUUlVFLCBDYWNoZVVuY2FjaGVhYmxlLCAgICAx MiB9LA0KPiANCj4gKyAgeyA0MiwgVFJVRSwgVFJVRSwgQ2FjaGVXcml0ZUJhY2ssICAgICAgMTIg fSwNCj4gDQo+ICsgIHsgNDIsIFRSVUUsIFRSVUUsIENhY2hlV3JpdGVUaHJvdWdoLCAgIDEyIH0s DQo+IA0KPiArICB7IDQyLCBUUlVFLCBUUlVFLCBDYWNoZVdyaXRlUHJvdGVjdGVkLCAxMiB9LA0K PiANCj4gKyAgeyA0MiwgVFJVRSwgVFJVRSwgQ2FjaGVXcml0ZUNvbWJpbmluZywgMTIgfSwNCj4g DQo+ICsNCj4gDQo+ICsgIHsgNDgsIFRSVUUsIFRSVUUsIENhY2hlVW5jYWNoZWFibGUsICAgIDEy IH0sDQo+IA0KPiArICB7IDQ4LCBUUlVFLCBUUlVFLCBDYWNoZVdyaXRlQmFjaywgICAgICAxMiB9 LA0KPiANCj4gKyAgeyA0OCwgVFJVRSwgVFJVRSwgQ2FjaGVXcml0ZVRocm91Z2gsICAgMTIgfSwN Cj4gDQo+ICsgIHsgNDgsIFRSVUUsIFRSVUUsIENhY2hlV3JpdGVQcm90ZWN0ZWQsIDEyIH0sDQo+ IA0KPiArICB7IDQ4LCBUUlVFLCBUUlVFLCBDYWNoZVdyaXRlQ29tYmluaW5nLCAxMiB9LA0KPiAN Cj4gK307DQo+IA0KPiArDQo+IA0KPiArVUlOVDMyICAgICAgICAgICAgICAgICAgICBtRml4ZWRN dHJyc0luZGV4W10gPSB7DQo+IA0KPiArICBNU1JfSUEzMl9NVFJSX0ZJWDY0S18wMDAwMCwNCj4g DQo+ICsgIE1TUl9JQTMyX01UUlJfRklYMTZLXzgwMDAwLA0KPiANCj4gKyAgTVNSX0lBMzJfTVRS Ul9GSVgxNktfQTAwMDAsDQo+IA0KPiArICBNU1JfSUEzMl9NVFJSX0ZJWDRLX0MwMDAwLA0KPiAN Cj4gKyAgTVNSX0lBMzJfTVRSUl9GSVg0S19DODAwMCwNCj4gDQo+ICsgIE1TUl9JQTMyX01UUlJf RklYNEtfRDAwMDAsDQo+IA0KPiArICBNU1JfSUEzMl9NVFJSX0ZJWDRLX0Q4MDAwLA0KPiANCj4g KyAgTVNSX0lBMzJfTVRSUl9GSVg0S19FMDAwMCwNCj4gDQo+ICsgIE1TUl9JQTMyX01UUlJfRklY NEtfRTgwMDAsDQo+IA0KPiArICBNU1JfSUEzMl9NVFJSX0ZJWDRLX0YwMDAwLA0KPiANCj4gKyAg TVNSX0lBMzJfTVRSUl9GSVg0S19GODAwMA0KPiANCj4gK307DQo+IA0KPiArU1RBVElDX0FTU0VS VCAoDQo+IA0KPiArICAoQVJSQVlfU0laRSAobUZpeGVkTXRycnNJbmRleCkgPT0NCj4gTVRSUl9O VU1CRVJfT0ZfRklYRURfTVRSUiksDQo+IA0KPiArICAiZ0ZpeGVkTXRyckluZGV4IGRvZXMgTk9U IGNvbnRhaW4gYWxsIHRoZSBmaXhlZA0KPiBNVFJScyEiDQo+IA0KPiArICApOw0KPiANCj4gKw0K PiANCj4gKy8vDQo+IA0KPiArLy8gQ29udGV4dCBzdHJ1Y3R1cmUgdG8gYmUgdXNlZCBmb3IgbW9z dCBvZiB0aGUgdGVzdA0KPiBjYXNlcy4NCj4gDQo+ICsvLw0KPiANCj4gK3R5cGVkZWYgc3RydWN0 IHsNCj4gDQo+ICsgIENPTlNUIE1UUlJfTElCX1NZU1RFTV9QQVJBTUVURVIgKlN5c3RlbVBhcmFt ZXRlcjsNCj4gDQo+ICt9IE1UUlJfTElCX1RFU1RfQ09OVEVYVDsNCj4gDQo+ICsNCj4gDQo+ICsv Lw0KPiANCj4gKy8vIENvbnRleHQgc3RydWN0dXJlIHRvIGJlIHVzZWQgZm9yDQo+IEdldEZpcm13 YXJlVmFyaWFibGVNdHJyQ291bnQoKSB0ZXN0Lg0KPiANCj4gKy8vDQo+IA0KPiArdHlwZWRlZiBz dHJ1Y3Qgew0KPiANCj4gKyAgVUlOVDMyDQo+IE51bWJlck9mUmVzZXJ2ZWRWYXJpYWJsZU10cnJz Ow0KPiANCj4gKyAgQ09OU1QgTVRSUl9MSUJfU1lTVEVNX1BBUkFNRVRFUiAqU3lzdGVtUGFyYW1l dGVyOw0KPiANCj4gK30gTVRSUl9MSUJfR0VUX0ZJUk1XQVJFX1ZBUklBQkxFX01UUlJfQ09VTlRf Q09OVEVYVDsNCj4gDQo+ICsNCj4gDQo+ICtTVEFUSUMgQ0hBUjggKm1DYWNoZURlc2NyaXB0aW9u W10gPSB7ICJVQyIsICJXQyIsDQo+ICJOL0EiLCAiTi9BIiwgIldUIiwgIldQIiwgIldCIiB9Ow0K PiANCj4gKw0KPiANCj4gKy8qKg0KPiANCj4gKyAgQ29tcGFyZSB0aGUgYWN0dWFsIG1lbW9yeSBy YW5nZXMgYWdhaW5zdCBleHBlY3RlZA0KPiBtZW1vcnkgcmFuZ2VzIGFuZCByZXR1cm4gUEFTUyB3 aGVuIHRoZXkgbWF0Y2guDQo+IA0KPiArDQo+IA0KPiArICBAcGFyYW0gRXhwZWN0ZWRNZW1vcnlS YW5nZXMgICAgIEV4cGVjdGVkIG1lbW9yeQ0KPiByYW5nZXMuDQo+IA0KPiArICBAcGFyYW0gRXhw ZWN0ZWRNZW1vcnlSYW5nZUNvdW50IENvdW50IG9mIGV4cGVjdGVkDQo+IG1lbW9yeSByYW5nZXMu DQo+IA0KPiArICBAcGFyYW0gQWN0dWFsUmFuZ2VzICAgICAgICAgICAgIEFjdHVhbCBtZW1vcnkN Cj4gcmFuZ2VzLg0KPiANCj4gKyAgQHBhcmFtIEFjdHVhbFJhbmdlQ291bnQgICAgICAgICBDb3Vu dCBvZiBhY3R1YWwNCj4gbWVtb3J5IHJhbmdlcy4NCj4gDQo+ICsNCj4gDQo+ICsgIEByZXR2YWwg VU5JVF9URVNUX1BBU1NFRCAgVGVzdCBwYXNzZWQuDQo+IA0KPiArICBAcmV0dmFsIG90aGVycyAg ICAgICAgICAgIFRlc3QgZmFpbGVkLg0KPiANCj4gKyoqLw0KPiANCj4gK1VOSVRfVEVTVF9TVEFU VVMNCj4gDQo+ICtWZXJpZnlNZW1vcnlSYW5nZXMgKA0KPiANCj4gKyAgSU4gTVRSUl9NRU1PUllf UkFOR0UgICpFeHBlY3RlZE1lbW9yeVJhbmdlcywNCj4gDQo+ICsgIElOIFVJTlROICAgICAgICAg ICAgICBFeHBlY3RlZE1lbW9yeVJhbmdlQ291bnQsDQo+IA0KPiArICBJTiBNVFJSX01FTU9SWV9S QU5HRSAgKkFjdHVhbFJhbmdlcywNCj4gDQo+ICsgIElOIFVJTlROICAgICAgICAgICAgICBBY3R1 YWxSYW5nZUNvdW50DQo+IA0KPiArICApDQo+IA0KPiArew0KPiANCj4gKyAgVUlOVE4gIEluZGV4 Ow0KPiANCj4gKyAgVVRfQVNTRVJUX0VRVUFMIChFeHBlY3RlZE1lbW9yeVJhbmdlQ291bnQsDQo+ IEFjdHVhbFJhbmdlQ291bnQpOw0KPiANCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgRXhw ZWN0ZWRNZW1vcnlSYW5nZUNvdW50Ow0KPiBJbmRleCsrKSB7DQo+IA0KPiArICAgIFVUX0FTU0VS VF9FUVVBTA0KPiAoRXhwZWN0ZWRNZW1vcnlSYW5nZXNbSW5kZXhdLkJhc2VBZGRyZXNzLA0KPiBB Y3R1YWxSYW5nZXNbSW5kZXhdLkJhc2VBZGRyZXNzKTsNCj4gDQo+ICsgICAgVVRfQVNTRVJUX0VR VUFMDQo+IChFeHBlY3RlZE1lbW9yeVJhbmdlc1tJbmRleF0uTGVuZ3RoLA0KPiBBY3R1YWxSYW5n ZXNbSW5kZXhdLkxlbmd0aCk7DQo+IA0KPiArICAgIFVUX0FTU0VSVF9FUVVBTCAoRXhwZWN0ZWRN ZW1vcnlSYW5nZXNbSW5kZXhdLlR5cGUsDQo+IEFjdHVhbFJhbmdlc1tJbmRleF0uVHlwZSk7DQo+ IA0KPiArICB9DQo+IA0KPiArDQo+IA0KPiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4g DQo+ICt9DQo+IA0KPiArDQo+IA0KPiArLyoqDQo+IA0KPiArICBEdW1wIHRoZSBtZW1vcnkgcmFu Z2VzLg0KPiANCj4gKw0KPiANCj4gKyAgQHBhcmFtIFJhbmdlcyAgICAgICBNZW1vcnkgcmFuZ2Vz IHRvIGR1bXAuDQo+IA0KPiArICBAcGFyYW0gUmFuZ2VDb3VudCAgIENvdW50IG9mIG1lbW9yeSBy YW5nZXMuDQo+IA0KPiArKiovDQo+IA0KPiArVk9JRA0KPiANCj4gK0R1bXBNZW1vcnlSYW5nZXMg KA0KPiANCj4gKyAgTVRSUl9NRU1PUllfUkFOR0UgICAgKlJhbmdlcywNCj4gDQo+ICsgIFVJTlRO ICAgICAgICAgICAgICAgIFJhbmdlQ291bnQNCj4gDQo+ICsgICkNCj4gDQo+ICt7DQo+IA0KPiAr ICBVSU5UTiAgICAgSW5kZXg7DQo+IA0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBSYW5n ZUNvdW50OyBJbmRleCsrKSB7DQo+IA0KPiArICAgIFVUX0xPR19JTkZPICgiXHR7IDB4JTAxNmxs eCwgMHglMDE2bGx4LCAlYSB9LFxuIiwNCj4gUmFuZ2VzW0luZGV4XS5CYXNlQWRkcmVzcywgUmFu Z2VzW0luZGV4XS5MZW5ndGgsDQo+IG1DYWNoZURlc2NyaXB0aW9uW1Jhbmdlc1tJbmRleF0uVHlw ZV0pOw0KPiANCj4gKyAgfQ0KPiANCj4gK30NCj4gDQo+ICsNCj4gDQo+ICsvKioNCj4gDQo+ICsq Ki8NCj4gDQo+ICsNCj4gDQo+ICsvKioNCj4gDQo+ICsgIEdlbmVyYXRlIHJhbmRvbSBjb3VudCBv ZiBNVFJScyBmb3IgZWFjaCBjYWNoZSB0eXBlLg0KPiANCj4gKw0KPiANCj4gKyAgQHBhcmFtIFRv dGFsQ291bnQgVG90YWwgTVRSUiBjb3VudC4NCj4gDQo+ICsgIEBwYXJhbSBVY0NvdW50ICAgIFJl dHVybiBjb3VudCBvZiBVbmNhY2hlYWJsZSB0eXBlLg0KPiANCj4gKyAgQHBhcmFtIFd0Q291bnQg ICAgUmV0dXJuIGNvdW50IG9mIFdyaXRlIFRocm91Z2gNCj4gdHlwZS4NCj4gDQo+ICsgIEBwYXJh bSBXYkNvdW50ICAgIFJldHVybiBjb3VudCBvZiBXcml0ZSBCYWNrIHR5cGUuDQo+IA0KPiArICBA cGFyYW0gV3BDb3VudCAgICBSZXR1cm4gY291bnQgb2YgV3JpdGUgUHJvdGVjdGVkDQo+IHR5cGUu DQo+IA0KPiArICBAcGFyYW0gV2NDb3VudCAgICBSZXR1cm4gY291bnQgb2YgV3JpdGUgQ29tYmlu aW5nDQo+IHR5cGUuDQo+IA0KPiArKiovDQo+IA0KPiArVk9JRA0KPiANCj4gK0dlbmVyYXRlUmFu ZG9tTWVtb3J5VHlwZUNvbWJpbmF0aW9uICgNCj4gDQo+ICsgIElOICBVSU5UMzIgVG90YWxDb3Vu dCwNCj4gDQo+ICsgIE9VVCBVSU5UMzIgKlVjQ291bnQsDQo+IA0KPiArICBPVVQgVUlOVDMyICpX dENvdW50LA0KPiANCj4gKyAgT1VUIFVJTlQzMiAqV2JDb3VudCwNCj4gDQo+ICsgIE9VVCBVSU5U MzIgKldwQ291bnQsDQo+IA0KPiArICBPVVQgVUlOVDMyICpXY0NvdW50DQo+IA0KPiArICApDQo+ IA0KPiArew0KPiANCj4gKyAgVUlOVE4gIEluZGV4Ow0KPiANCj4gKyAgVUlOVDMyIFRvdGFsTXRy ckNvdW50Ow0KPiANCj4gKyAgVUlOVDMyICpDb3VudFBlclR5cGVbNV07DQo+IA0KPiArDQo+IA0K PiArICBDb3VudFBlclR5cGVbMF0gPSBVY0NvdW50Ow0KPiANCj4gKyAgQ291bnRQZXJUeXBlWzFd ID0gV3RDb3VudDsNCj4gDQo+ICsgIENvdW50UGVyVHlwZVsyXSA9IFdiQ291bnQ7DQo+IA0KPiAr ICBDb3VudFBlclR5cGVbM10gPSBXcENvdW50Ow0KPiANCj4gKyAgQ291bnRQZXJUeXBlWzRdID0g V2NDb3VudDsNCj4gDQo+ICsNCj4gDQo+ICsgIC8vDQo+IA0KPiArICAvLyBJbml0aWFsaXplIHRo ZSBjb3VudCBvZiBlYWNoIGNhY2hlIHR5cGUgdG8gMC4NCj4gDQo+ICsgIC8vDQo+IA0KPiArICBm b3IgKEluZGV4ID0gMDsgSW5kZXggPCBBUlJBWV9TSVpFIChDb3VudFBlclR5cGUpOw0KPiBJbmRl eCsrKSB7DQo+IA0KPiArICAgICooQ291bnRQZXJUeXBlW0luZGV4XSkgPSAwOw0KPiANCj4gKyAg fQ0KPiANCj4gKw0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIC8vIFBpY2sgYSByYW5kb20gY291bnQg b2YgTVRSUnMNCj4gDQo+ICsgIC8vDQo+IA0KPiArICBUb3RhbE10cnJDb3VudCA9IFJhbmRvbTMy ICgxLCBUb3RhbENvdW50KTsNCj4gDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFRvdGFs TXRyckNvdW50OyBJbmRleCsrKSB7DQo+IA0KPiArICAgIC8vDQo+IA0KPiArICAgIC8vIEZvciBl YWNoIG9mIHRoZW0sIHBpY2sgYSByYW5kb20gY2FjaGUgdHlwZS4NCj4gDQo+ICsgICAgLy8NCj4g DQo+ICsgICAgKCooQ291bnRQZXJUeXBlW1JhbmRvbTMyICgwLCBBUlJBWV9TSVpFDQo+IChDb3Vu dFBlclR5cGUpIC0gMSldKSkrKzsNCj4gDQo+ICsgIH0NCj4gDQo+ICt9DQo+IA0KPiArDQo+IA0K PiArLyoqDQo+IA0KPiArICBVbml0IHRlc3Qgb2YgTXRyckxpYiBzZXJ2aWNlDQo+IE10cnJTZXRN ZW1vcnlBdHRyaWJ1dGUoKQ0KPiANCj4gKw0KPiANCj4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAg ICBJZ25vcmVkDQo+IA0KPiArDQo+IA0KPiArICBAcmV0dmFsICBVTklUX1RFU1RfUEFTU0VEICAg ICAgICAgICAgIFRoZSBVbml0IHRlc3QNCj4gaGFzIGNvbXBsZXRlZCBhbmQgdGhlIHRlc3QNCj4g DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSB3YXMNCj4g c3VjY2Vzc2Z1bC4NCj4gDQo+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxF RCAgQSB0ZXN0IGNhc2UNCj4gYXNzZXJ0aW9uIGhhcyBmYWlsZWQuDQo+IA0KPiArDQo+IA0KPiAr KiovDQo+IA0KPiArVU5JVF9URVNUX1NUQVRVUw0KPiANCj4gK0VGSUFQSQ0KPiANCj4gK1VuaXRU ZXN0TXRyclNldE1lbW9yeUF0dHJpYnV0ZXNJbk10cnJTZXR0aW5ncyAoDQo+IA0KPiArICBJTiBV TklUX1RFU1RfQ09OVEVYVCAgQ29udGV4dA0KPiANCj4gKyAgKQ0KPiANCj4gK3sNCj4gDQo+ICsg IENPTlNUIE1UUlJfTElCX1NZU1RFTV9QQVJBTUVURVIgKlN5c3RlbVBhcmFtZXRlcjsNCj4gDQo+ ICsgIFJFVFVSTl9TVEFUVVMgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiANCj4gKyAgVUlO VDMyICAgICAgICAgICAgICAgICAgICAgICAgICBVY0NvdW50Ow0KPiANCj4gKyAgVUlOVDMyICAg ICAgICAgICAgICAgICAgICAgICAgICBXdENvdW50Ow0KPiANCj4gKyAgVUlOVDMyICAgICAgICAg ICAgICAgICAgICAgICAgICBXYkNvdW50Ow0KPiANCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAg ICAgICAgICAgICBXcENvdW50Ow0KPiANCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAg ICAgICBXY0NvdW50Ow0KPiANCj4gKw0KPiANCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAg ICAgICAgICBNdHJySW5kZXg7DQo+IA0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAg ICAgICpTY3JhdGNoOw0KPiANCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICBT Y3JhdGNoU2l6ZTsNCj4gDQo+ICsgIE1UUlJfU0VUVElOR1MgICAgICAgICAgICAgICAgICAgTG9j YWxNdHJyczsNCj4gDQo+ICsNCj4gDQo+ICsgIE1UUlJfTUVNT1JZX1JBTkdFDQo+IFJhd010cnJS YW5nZVtNVFJSX05VTUJFUl9PRl9WQVJJQUJMRV9NVFJSXTsNCj4gDQo+ICsgIE1UUlJfTUVNT1JZ X1JBTkdFDQo+IEV4cGVjdGVkTWVtb3J5UmFuZ2VzW01UUlJfTlVNQkVSX09GX0ZJWEVEX01UUlIg KiBzaXplb2YNCj4gKFVJTlQ2NCkgKyAyICogTVRSUl9OVU1CRVJfT0ZfVkFSSUFCTEVfTVRSUiAr IDFdOw0KPiANCj4gKyAgVUlOVDMyDQo+IEV4cGVjdGVkVmFyaWFibGVNdHJyVXNhZ2U7DQo+IA0K PiArICBVSU5UTg0KPiBFeHBlY3RlZE1lbW9yeVJhbmdlc0NvdW50Ow0KPiANCj4gKw0KPiANCj4g KyAgTVRSUl9NRU1PUllfUkFOR0UNCj4gQWN0dWFsTWVtb3J5UmFuZ2VzW01UUlJfTlVNQkVSX09G X0ZJWEVEX01UUlIgICAqIHNpemVvZg0KPiAoVUlOVDY0KSArIDIgKiBNVFJSX05VTUJFUl9PRl9W QVJJQUJMRV9NVFJSICsgMV07DQo+IA0KPiArICBVSU5UMzINCj4gQWN0dWFsVmFyaWFibGVNdHJy VXNhZ2U7DQo+IA0KPiArICBVSU5UTg0KPiBBY3R1YWxNZW1vcnlSYW5nZXNDb3VudDsNCj4gDQo+ ICsNCj4gDQo+ICsgIE1UUlJfU0VUVElOR1MgICAgICAgICAgICAgKk10cnJzWzJdOw0KPiANCj4g Kw0KPiANCj4gKyAgU3lzdGVtUGFyYW1ldGVyID0gKE1UUlJfTElCX1NZU1RFTV9QQVJBTUVURVIg KikNCj4gQ29udGV4dDsNCj4gDQo+ICsgIEdlbmVyYXRlUmFuZG9tTWVtb3J5VHlwZUNvbWJpbmF0 aW9uICgNCj4gDQo+ICsgICAgU3lzdGVtUGFyYW1ldGVyLT5WYXJpYWJsZU10cnJDb3VudCAtIFBh dGNoUGNkR2V0MzINCj4gKFBjZENwdU51bWJlck9mUmVzZXJ2ZWRWYXJpYWJsZU10cnJzKSwNCj4g DQo+ICsgICAgJlVjQ291bnQsICZXdENvdW50LCAmV2JDb3VudCwgJldwQ291bnQsICZXY0NvdW50 DQo+IA0KPiArICAgICk7DQo+IA0KPiArICBHZW5lcmF0ZVZhbGlkQW5kQ29uZmlndXJhYmxlTXRy clBhaXJzICgNCj4gDQo+ICsgICAgU3lzdGVtUGFyYW1ldGVyLT5QaHlzaWNhbEFkZHJlc3NCaXRz LA0KPiBSYXdNdHJyUmFuZ2UsDQo+IA0KPiArICAgIFVjQ291bnQsIFd0Q291bnQsIFdiQ291bnQs IFdwQ291bnQsIFdjQ291bnQNCj4gDQo+ICsgICAgKTsNCj4gDQo+ICsNCj4gDQo+ICsgIEV4cGVj dGVkVmFyaWFibGVNdHJyVXNhZ2UgPSBVY0NvdW50ICsgV3RDb3VudCArDQo+IFdiQ291bnQgKyBX cENvdW50ICsgV2NDb3VudDsNCj4gDQo+ICsgIEV4cGVjdGVkTWVtb3J5UmFuZ2VzQ291bnQgPSBB UlJBWV9TSVpFDQo+IChFeHBlY3RlZE1lbW9yeVJhbmdlcyk7DQo+IA0KPiArICBHZXRFZmZlY3Rp dmVNZW1vcnlSYW5nZXMgKA0KPiANCj4gKyAgICBTeXN0ZW1QYXJhbWV0ZXItPkRlZmF1bHRDYWNo ZVR5cGUsDQo+IA0KPiArICAgIFN5c3RlbVBhcmFtZXRlci0+UGh5c2ljYWxBZGRyZXNzQml0cywN Cj4gDQo+ICsgICAgUmF3TXRyclJhbmdlLCBFeHBlY3RlZFZhcmlhYmxlTXRyclVzYWdlLA0KPiAN Cj4gKyAgICBFeHBlY3RlZE1lbW9yeVJhbmdlcywgJkV4cGVjdGVkTWVtb3J5UmFuZ2VzQ291bnQN Cj4gDQo+ICsgICAgKTsNCj4gDQo+ICsNCj4gDQo+ICsgIFVUX0xPR19JTkZPICgNCj4gDQo+ICsg ICAgIlRvdGFsIE1UUlIgWyVkXTogVUM9JWQsIFdUPSVkLCBXQj0lZCwgV1A9JWQsDQo+IFdDPSVk XG4iLA0KPiANCj4gKyAgICBFeHBlY3RlZFZhcmlhYmxlTXRyclVzYWdlLCBVY0NvdW50LCBXdENv dW50LA0KPiBXYkNvdW50LCBXcENvdW50LCBXY0NvdW50DQo+IA0KPiArICAgICk7DQo+IA0KPiAr ICBVVF9MT0dfSU5GTyAoIi0tLSBFeHBlY3RlZCBNZW1vcnkgUmFuZ2VzIFslZF0gLS0tDQo+IFxu IiwgRXhwZWN0ZWRNZW1vcnlSYW5nZXNDb3VudCk7DQo+IA0KPiArICBEdW1wTWVtb3J5UmFuZ2Vz IChFeHBlY3RlZE1lbW9yeVJhbmdlcywNCj4gRXhwZWN0ZWRNZW1vcnlSYW5nZXNDb3VudCk7DQo+ IA0KPiArDQo+IA0KPiArICAvLw0KPiANCj4gKyAgLy8gRGVmYXVsdCBjYWNoZSB0eXBlIGlzIGFs d2F5cyBhbiBJTlBVVA0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIFplcm9NZW0gKCZMb2NhbE10cnJz LCBzaXplb2YgKExvY2FsTXRycnMpKTsNCj4gDQo+ICsgIExvY2FsTXRycnMuTXRyckRlZlR5cGUg PSBNdHJyR2V0RGVmYXVsdE1lbW9yeVR5cGUNCj4gKCk7DQo+IA0KPiArICBTY3JhdGNoU2l6ZSAg ICAgICAgICAgID0gU0NSQVRDSF9CVUZGRVJfU0laRTsNCj4gDQo+ICsgIE10cnJzWzBdICAgICAg ICAgICAgICAgPSAmTG9jYWxNdHJyczsNCj4gDQo+ICsgIE10cnJzWzFdICAgICAgICAgICAgICAg PSBOVUxMOw0KPiANCj4gKw0KPiANCj4gKyAgZm9yIChNdHJySW5kZXggPSAwOyBNdHJySW5kZXgg PCBBUlJBWV9TSVpFIChNdHJycyk7DQo+IE10cnJJbmRleCsrKSB7DQo+IA0KPiArICAgIFNjcmF0 Y2ggPSBjYWxsb2MgKFNjcmF0Y2hTaXplLCBzaXplb2YgKFVJTlQ4KSk7DQo+IA0KPiArICAgIFN0 YXR1cyA9IE10cnJTZXRNZW1vcnlBdHRyaWJ1dGVzSW5NdHJyU2V0dGluZ3MNCj4gKE10cnJzW010 cnJJbmRleF0sIFNjcmF0Y2gsICZTY3JhdGNoU2l6ZSwNCj4gRXhwZWN0ZWRNZW1vcnlSYW5nZXMs IEV4cGVjdGVkTWVtb3J5UmFuZ2VzQ291bnQpOw0KPiANCj4gKyAgICBpZiAoU3RhdHVzID09IFJF VFVSTl9CVUZGRVJfVE9PX1NNQUxMKSB7DQo+IA0KPiArICAgICAgU2NyYXRjaCA9IHJlYWxsb2Mg KFNjcmF0Y2gsIFNjcmF0Y2hTaXplKTsNCj4gDQo+ICsgICAgICBTdGF0dXMgPSBNdHJyU2V0TWVt b3J5QXR0cmlidXRlc0luTXRyclNldHRpbmdzDQo+IChNdHJyc1tNdHJySW5kZXhdLCBTY3JhdGNo LCAmU2NyYXRjaFNpemUsDQo+IEV4cGVjdGVkTWVtb3J5UmFuZ2VzLCBFeHBlY3RlZE1lbW9yeVJh bmdlc0NvdW50KTsNCj4gDQo+ICsgICAgfQ0KPiANCj4gKyAgICBVVF9BU1NFUlRfU1RBVFVTX0VR VUFMIChTdGF0dXMsIFJFVFVSTl9TVUNDRVNTKTsNCj4gDQo+ICsNCj4gDQo+ICsgICAgaWYgKE10 cnJzW010cnJJbmRleF0gPT0gTlVMTCkgew0KPiANCj4gKyAgICAgIFplcm9NZW0gKCZMb2NhbE10 cnJzLCBzaXplb2YgKExvY2FsTXRycnMpKTsNCj4gDQo+ICsgICAgICBNdHJyR2V0QWxsTXRycnMg KCZMb2NhbE10cnJzKTsNCj4gDQo+ICsgICAgfQ0KPiANCj4gKyAgICBBY3R1YWxNZW1vcnlSYW5n ZXNDb3VudCA9IEFSUkFZX1NJWkUNCj4gKEFjdHVhbE1lbW9yeVJhbmdlcyk7DQo+IA0KPiArICAg IENvbGxlY3RUZXN0UmVzdWx0ICgNCj4gDQo+ICsgICAgICBTeXN0ZW1QYXJhbWV0ZXItPkRlZmF1 bHRDYWNoZVR5cGUsDQo+IFN5c3RlbVBhcmFtZXRlci0+UGh5c2ljYWxBZGRyZXNzQml0cywgU3lz dGVtUGFyYW1ldGVyLQ0KPiA+VmFyaWFibGVNdHJyQ291bnQsDQo+IA0KPiArICAgICAgJkxvY2Fs TXRycnMsIEFjdHVhbE1lbW9yeVJhbmdlcywNCj4gJkFjdHVhbE1lbW9yeVJhbmdlc0NvdW50LCAm QWN0dWFsVmFyaWFibGVNdHJyVXNhZ2UNCj4gDQo+ICsgICAgICApOw0KPiANCj4gKw0KPiANCj4g KyAgICBVVF9MT0dfSU5GTyAoIi0tLSBBY3R1YWwgTWVtb3J5IFJhbmdlcyBbJWRdIC0tLQ0KPiBc biIsIEFjdHVhbE1lbW9yeVJhbmdlc0NvdW50KTsNCj4gDQo+ICsgICAgRHVtcE1lbW9yeVJhbmdl cyAoQWN0dWFsTWVtb3J5UmFuZ2VzLA0KPiBBY3R1YWxNZW1vcnlSYW5nZXNDb3VudCk7DQo+IA0K PiArICAgIFZlcmlmeU1lbW9yeVJhbmdlcyAoRXhwZWN0ZWRNZW1vcnlSYW5nZXMsDQo+IEV4cGVj dGVkTWVtb3J5UmFuZ2VzQ291bnQsIEFjdHVhbE1lbW9yeVJhbmdlcywNCj4gQWN0dWFsTWVtb3J5 UmFuZ2VzQ291bnQpOw0KPiANCj4gKyAgICBVVF9BU1NFUlRfVFJVRSAoRXhwZWN0ZWRWYXJpYWJs ZU10cnJVc2FnZSA+PQ0KPiBBY3R1YWxWYXJpYWJsZU10cnJVc2FnZSk7DQo+IA0KPiArDQo+IA0K PiArICAgIFplcm9NZW0gKCZMb2NhbE10cnJzLCBzaXplb2YgKExvY2FsTXRycnMpKTsNCj4gDQo+ ICsgIH0NCj4gDQo+ICsNCj4gDQo+ICsgIGZyZWUgKFNjcmF0Y2gpOw0KPiANCj4gKw0KPiANCj4g KyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNTRUQ7DQo+IA0KPiArfQ0KPiANCj4gKw0KPiANCj4gKy8q Kg0KPiANCj4gKyAgVGVzdCByb3V0aW5lIHRvIGNoZWNrIHdoZXRoZXIgaW52YWxpZCBiYXNlL3Np emUgY2FuDQo+IGJlIHJlamVjdGVkLg0KPiANCj4gKw0KPiANCj4gKyAgQHBhcmFtIENvbnRleHQg ICBQb2ludGVyIHRvDQo+IE1UUlJfTElCX1NZU1RFTV9QQVJBTUVURVIuDQo+IA0KPiArDQo+IA0K PiArICBAcmV0dXJuIFRlc3Qgc3RhdHVzLg0KPiANCj4gKyoqLw0KPiANCj4gK1VOSVRfVEVTVF9T VEFUVVMNCj4gDQo+ICtFRklBUEkNCj4gDQo+ICtVbml0VGVzdEludmFsaWRNZW1vcnlMYXlvdXRz ICgNCj4gDQo+ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICAgICAgICAgIENvbnRleHQNCj4gDQo+ ICsgICkNCj4gDQo+ICt7DQo+IA0KPiArICBDT05TVCBNVFJSX0xJQl9TWVNURU1fUEFSQU1FVEVS ICpTeXN0ZW1QYXJhbWV0ZXI7DQo+IA0KPiArICBNVFJSX01FTU9SWV9SQU5HRQ0KPiBSYW5nZXNb TVRSUl9OVU1CRVJfT0ZfVkFSSUFCTEVfTVRSUiAqIDIgKyAxXTsNCj4gDQo+ICsgIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICAgICAgUmFuZ2VDb3VudDsNCj4gDQo+ICsgIFVJTlQ2NCAgICAg ICAgICAgICAgICAgICAgICAgICAgTWF4QWRkcmVzczsNCj4gDQo+ICsgIFVJTlQzMiAgICAgICAg ICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+IA0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAg ICAgICAgICAgIEJhc2VBZGRyZXNzOw0KPiANCj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAg ICAgICAgICBMZW5ndGg7DQo+IA0KPiArICBSRVRVUk5fU1RBVFVTICAgICAgICAgICAgICAgICAg IFN0YXR1czsNCj4gDQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NyYXRj aFNpemU7DQo+IA0KPiArDQo+IA0KPiArICBTeXN0ZW1QYXJhbWV0ZXIgPSAoTVRSUl9MSUJfU1lT VEVNX1BBUkFNRVRFUiAqKQ0KPiBDb250ZXh0Ow0KPiANCj4gKw0KPiANCj4gKyAgUmFuZ2VDb3Vu dCA9IFJhbmRvbTMyICgxLCBBUlJBWV9TSVpFIChSYW5nZXMpKTsNCj4gDQo+ICsgIE1heEFkZHJl c3MgPSAxdWxsIDw8IFN5c3RlbVBhcmFtZXRlci0NCj4gPlBoeXNpY2FsQWRkcmVzc0JpdHM7DQo+ IA0KPiArDQo+IA0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBSYW5nZUNvdW50OyBJbmRl eCsrKSB7DQo+IA0KPiArICAgIGRvIHsNCj4gDQo+ICsgICAgICBCYXNlQWRkcmVzcyA9IFJhbmRv bTY0ICgwLCBNYXhBZGRyZXNzKTsNCj4gDQo+ICsgICAgICBMZW5ndGggICAgICA9IFJhbmRvbTY0 ICgxLCBNYXhBZGRyZXNzIC0NCj4gQmFzZUFkZHJlc3MpOw0KPiANCj4gKyAgICB9IHdoaWxlICgo KEJhc2VBZGRyZXNzICYgMHhGRkYpID09IDApIHx8ICgoTGVuZ3RoDQo+ICYgMHhGRkYpID09IDAp KTsNCj4gDQo+ICsNCj4gDQo+ICsgICAgUmFuZ2VzW0luZGV4XS5CYXNlQWRkcmVzcyA9IEJhc2VB ZGRyZXNzOw0KPiANCj4gKyAgICBSYW5nZXNbSW5kZXhdLkxlbmd0aCAgICAgID0gTGVuZ3RoOw0K PiANCj4gKyAgICBSYW5nZXNbSW5kZXhdLlR5cGUgICAgICAgID0NCj4gR2VuZXJhdGVSYW5kb21D YWNoZVR5cGUgKCk7DQo+IA0KPiArDQo+IA0KPiArICAgIFN0YXR1cyA9IE10cnJTZXRNZW1vcnlB dHRyaWJ1dGUgKA0KPiANCj4gKyAgICAgIFJhbmdlc1tJbmRleF0uQmFzZUFkZHJlc3MsIFJhbmdl c1tJbmRleF0uTGVuZ3RoLA0KPiBSYW5nZXNbSW5kZXhdLlR5cGUNCj4gDQo+ICsgICAgICApOw0K PiANCj4gKyAgICBVVF9BU1NFUlRfVFJVRSAoUkVUVVJOX0VSUk9SIChTdGF0dXMpKTsNCj4gDQo+ ICsgIH0NCj4gDQo+ICsNCj4gDQo+ICsgIFNjcmF0Y2hTaXplID0gMDsNCj4gDQo+ICsgIFN0YXR1 cyA9IE10cnJTZXRNZW1vcnlBdHRyaWJ1dGVzSW5NdHJyU2V0dGluZ3MNCj4gKE5VTEwsIE5VTEws ICZTY3JhdGNoU2l6ZSwgUmFuZ2VzLCBSYW5nZUNvdW50KTsNCj4gDQo+ICsgIFVUX0FTU0VSVF9U UlVFIChSRVRVUk5fRVJST1IgKFN0YXR1cykpOw0KPiANCj4gKw0KPiANCj4gKyAgcmV0dXJuIFVO SVRfVEVTVF9QQVNTRUQ7DQo+IA0KPiArfQ0KPiANCj4gKw0KPiANCj4gKy8qKg0KPiANCj4gKyAg VW5pdCB0ZXN0IG9mIE10cnJMaWIgc2VydmljZSBJc010cnJTdXBwb3J0ZWQoKQ0KPiANCj4gKw0K PiANCj4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAgICBJZ25vcmVkDQo+IA0KPiArDQo+IA0KPiAr ICBAcmV0dmFsICBVTklUX1RFU1RfUEFTU0VEICAgICAgICAgICAgIFRoZSBVbml0IHRlc3QNCj4g aGFzIGNvbXBsZXRlZCBhbmQgdGhlIHRlc3QNCj4gDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2FzZSB3YXMNCj4gc3VjY2Vzc2Z1bC4NCj4gDQo+ICsgIEByZXR2 YWwgIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNhc2UNCj4gYXNzZXJ0aW9u IGhhcyBmYWlsZWQuDQo+IA0KPiArDQo+IA0KPiArKiovDQo+IA0KPiArVU5JVF9URVNUX1NUQVRV Uw0KPiANCj4gK0VGSUFQSQ0KPiANCj4gK1VuaXRUZXN0SXNNdHJyU3VwcG9ydGVkICgNCj4gDQo+ ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQo+IA0KPiArICApDQo+IA0KPiArew0K PiANCj4gKyAgTVRSUl9MSUJfU1lTVEVNX1BBUkFNRVRFUiAgU3lzdGVtUGFyYW1ldGVyOw0KPiAN Cj4gKyAgTVRSUl9MSUJfVEVTVF9DT05URVhUICAgICAgKkxvY2FsQ29udGV4dDsNCj4gDQo+ICsN Cj4gDQo+ICsgIExvY2FsQ29udGV4dCA9IChNVFJSX0xJQl9URVNUX0NPTlRFWFQgKikgQ29udGV4 dDsNCj4gDQo+ICsNCj4gDQo+ICsgIENvcHlNZW0gKCZTeXN0ZW1QYXJhbWV0ZXIsIExvY2FsQ29u dGV4dC0NCj4gPlN5c3RlbVBhcmFtZXRlciwgc2l6ZW9mIChTeXN0ZW1QYXJhbWV0ZXIpKTsNCj4g DQo+ICsgIC8vDQo+IA0KPiArICAvLyBNVFJSIGNhcGFiaWxpdHkgb2ZmIGluIENQVUlEIGxlYWYu DQo+IA0KPiArICAvLw0KPiANCj4gKyAgU3lzdGVtUGFyYW1ldGVyLk10cnJTdXBwb3J0ZWQgPSBG QUxTRTsNCj4gDQo+ICsgIEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+ IA0KPiArICBVVF9BU1NFUlRfRkFMU0UgKElzTXRyclN1cHBvcnRlZCAoKSk7DQo+IA0KPiArDQo+ IA0KPiArICAvLw0KPiANCj4gKyAgLy8gTVRSUiBjYXBhYmlsaXR5IG9uIGluIENQVUlEIGxlYWYs IGJ1dCBubyB2YXJpYWJsZQ0KPiBvciBmaXhlZCBNVFJScy4NCj4gDQo+ICsgIC8vDQo+IA0KPiAr ICBTeXN0ZW1QYXJhbWV0ZXIuTXRyclN1cHBvcnRlZCA9IFRSVUU7DQo+IA0KPiArICBTeXN0ZW1Q YXJhbWV0ZXIuVmFyaWFibGVNdHJyQ291bnQgPSAwOw0KPiANCj4gKyAgU3lzdGVtUGFyYW1ldGVy LkZpeGVkTXRyclN1cHBvcnRlZCA9IEZBTFNFOw0KPiANCj4gKyAgSW5pdGlhbGl6ZU10cnJSZWdz ICgmU3lzdGVtUGFyYW1ldGVyKTsNCj4gDQo+ICsgIFVUX0FTU0VSVF9GQUxTRSAoSXNNdHJyU3Vw cG9ydGVkICgpKTsNCj4gDQo+ICsNCj4gDQo+ICsgIC8vDQo+IA0KPiArICAvLyBNVFJSIGNhcGFi aWxpdHkgb24gaW4gQ1BVSUQgbGVhZiwgYnV0IG5vIHZhcmlhYmxlDQo+IE1UUlJzLg0KPiANCj4g KyAgLy8NCj4gDQo+ICsgIFN5c3RlbVBhcmFtZXRlci5NdHJyU3VwcG9ydGVkID0gVFJVRTsNCj4g DQo+ICsgIFN5c3RlbVBhcmFtZXRlci5WYXJpYWJsZU10cnJDb3VudCA9IDA7DQo+IA0KPiArICBT eXN0ZW1QYXJhbWV0ZXIuRml4ZWRNdHJyU3VwcG9ydGVkID0gVFJVRTsNCj4gDQo+ICsgIEluaXRp YWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+IA0KPiArICBVVF9BU1NFUlRfRkFM U0UgKElzTXRyclN1cHBvcnRlZCAoKSk7DQo+IA0KPiArDQo+IA0KPiArICAvLw0KPiANCj4gKyAg Ly8gTVRSUiBjYXBhYmlsaXR5IG9uIGluIENQVUlEIGxlYWYsIGJ1dCBubyBmaXhlZA0KPiBNVFJS cy4NCj4gDQo+ICsgIC8vDQo+IA0KPiArICBTeXN0ZW1QYXJhbWV0ZXIuTXRyclN1cHBvcnRlZCA9 IFRSVUU7DQo+IA0KPiArICBTeXN0ZW1QYXJhbWV0ZXIuVmFyaWFibGVNdHJyQ291bnQgPSA3Ow0K PiANCj4gKyAgU3lzdGVtUGFyYW1ldGVyLkZpeGVkTXRyclN1cHBvcnRlZCA9IEZBTFNFOw0KPiAN Cj4gKyAgSW5pdGlhbGl6ZU10cnJSZWdzICgmU3lzdGVtUGFyYW1ldGVyKTsNCj4gDQo+ICsgIFVU X0FTU0VSVF9GQUxTRSAoSXNNdHJyU3VwcG9ydGVkICgpKTsNCj4gDQo+ICsNCj4gDQo+ICsgIC8v DQo+IA0KPiArICAvLyBNVFJSIGNhcGFiaWxpdHkgb24gaW4gQ1BVSUQgbGVhZiB3aXRoIGJvdGgN Cj4gdmFyaWFibGUgYW5kIGZpeGVkIE1UUlJzLg0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIFN5c3Rl bVBhcmFtZXRlci5NdHJyU3VwcG9ydGVkID0gVFJVRTsNCj4gDQo+ICsgIFN5c3RlbVBhcmFtZXRl ci5WYXJpYWJsZU10cnJDb3VudCA9IDc7DQo+IA0KPiArICBTeXN0ZW1QYXJhbWV0ZXIuRml4ZWRN dHJyU3VwcG9ydGVkID0gVFJVRTsNCj4gDQo+ICsgIEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3Rl bVBhcmFtZXRlcik7DQo+IA0KPiArICBVVF9BU1NFUlRfVFJVRSAoSXNNdHJyU3VwcG9ydGVkICgp KTsNCj4gDQo+ICsNCj4gDQo+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiANCj4gK30N Cj4gDQo+ICsNCj4gDQo+ICsvKioNCj4gDQo+ICsgIFVuaXQgdGVzdCBvZiBNdHJyTGliIHNlcnZp Y2UgR2V0VmFyaWFibGVNdHJyQ291bnQoKQ0KPiANCj4gKw0KPiANCj4gKyAgQHBhcmFtW2luXSAg Q29udGV4dCAgICBJZ25vcmVkDQo+IA0KPiArDQo+IA0KPiArICBAcmV0dmFsICBVTklUX1RFU1Rf UEFTU0VEICAgICAgICAgICAgIFRoZSBVbml0IHRlc3QNCj4gaGFzIGNvbXBsZXRlZCBhbmQgdGhl IHRlc3QNCj4gDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz ZSB3YXMNCj4gc3VjY2Vzc2Z1bC4NCj4gDQo+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9FUlJPUl9U RVNUX0ZBSUxFRCAgQSB0ZXN0IGNhc2UNCj4gYXNzZXJ0aW9uIGhhcyBmYWlsZWQuDQo+IA0KPiAr DQo+IA0KPiArKiovDQo+IA0KPiArVU5JVF9URVNUX1NUQVRVUw0KPiANCj4gK0VGSUFQSQ0KPiAN Cj4gK1VuaXRUZXN0R2V0VmFyaWFibGVNdHJyQ291bnQgKA0KPiANCj4gKyAgSU4gVU5JVF9URVNU X0NPTlRFWFQgIENvbnRleHQNCj4gDQo+ICsgICkNCj4gDQo+ICt7DQo+IA0KPiArICBVSU5UMzIg ICAgICAgICAgICAgICAgICAgIFJlc3VsdDsNCj4gDQo+ICsgIE1UUlJfTElCX1NZU1RFTV9QQVJB TUVURVIgU3lzdGVtUGFyYW1ldGVyOw0KPiANCj4gKyAgTVRSUl9MSUJfVEVTVF9DT05URVhUICAg ICAqTG9jYWxDb250ZXh0Ow0KPiANCj4gKw0KPiANCj4gKyAgTG9jYWxDb250ZXh0ID0gKE1UUlJf TElCX1RFU1RfQ09OVEVYVCAqKSBDb250ZXh0Ow0KPiANCj4gKw0KPiANCj4gKyAgQ29weU1lbSAo JlN5c3RlbVBhcmFtZXRlciwgTG9jYWxDb250ZXh0LQ0KPiA+U3lzdGVtUGFyYW1ldGVyLCBzaXpl b2YgKFN5c3RlbVBhcmFtZXRlcikpOw0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIC8vIElmIE1UUlIg Y2FwYWJpbGl0eSBvZmYgaW4gQ1BVSUQgbGVhZiwgdGhlbiB0aGUNCj4gY291bnQgaXMgYWx3YXlz IDAuDQo+IA0KPiArICAvLw0KPiANCj4gKyAgU3lzdGVtUGFyYW1ldGVyLk10cnJTdXBwb3J0ZWQg PSBGQUxTRTsNCj4gDQo+ICsgIGZvciAoU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRyckNvdW50 ID0gMTsNCj4gU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRyckNvdW50IDw9DQo+IE1UUlJfTlVN QkVSX09GX1ZBUklBQkxFX01UUlI7DQo+IFN5c3RlbVBhcmFtZXRlci5WYXJpYWJsZU10cnJDb3Vu dCsrKSB7DQo+IA0KPiArICAgIEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7 DQo+IA0KPiArICAgIFJlc3VsdCA9IEdldFZhcmlhYmxlTXRyckNvdW50ICgpOw0KPiANCj4gKyAg ICBVVF9BU1NFUlRfRVFVQUwgKFJlc3VsdCwgMCk7DQo+IA0KPiArICB9DQo+IA0KPiArDQo+IA0K PiArICAvLw0KPiANCj4gKyAgLy8gVHJ5IGFsbCBzdXBwb3J0ZWQgdmFyaWFibGUgTVRSUiBjb3Vu dHMuDQo+IA0KPiArICAvLyBJZiB2YXJpYWJsZSBNVFJSIGNvdW50IGlzID4NCj4gTVRSUl9OVU1C RVJfT0ZfVkFSSUFCTEVfTVRSUiwgdGhlbiBhbiBBU1NFUlQoKQ0KPiANCj4gKyAgLy8gaXMgZ2Vu ZXJhdGVkLg0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIFN5c3RlbVBhcmFtZXRlci5NdHJyU3VwcG9y dGVkID0gVFJVRTsNCj4gDQo+ICsgIGZvciAoU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRyckNv dW50ID0gMTsNCj4gU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRyckNvdW50IDw9DQo+IE1UUlJf TlVNQkVSX09GX1ZBUklBQkxFX01UUlI7DQo+IFN5c3RlbVBhcmFtZXRlci5WYXJpYWJsZU10cnJD b3VudCsrKSB7DQo+IA0KPiArICAgIEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRl cik7DQo+IA0KPiArICAgIFJlc3VsdCA9IEdldFZhcmlhYmxlTXRyckNvdW50ICgpOw0KPiANCj4g KyAgICBVVF9BU1NFUlRfRVFVQUwgKFJlc3VsdCwNCj4gU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxl TXRyckNvdW50KTsNCj4gDQo+ICsgIH0NCj4gDQo+ICsNCj4gDQo+ICsgIC8vDQo+IA0KPiArICAv LyBFeHBlY3QgQVNTRVJUKCkgaWYgdmFyaWFibGUgTVRSUiBjb3VudCBpcyA+DQo+IE1UUlJfTlVN QkVSX09GX1ZBUklBQkxFX01UUlINCj4gDQo+ICsgIC8vDQo+IA0KPiArICBTeXN0ZW1QYXJhbWV0 ZXIuVmFyaWFibGVNdHJyQ291bnQgPQ0KPiBNVFJSX05VTUJFUl9PRl9WQVJJQUJMRV9NVFJSICsg MTsNCj4gDQo+ICsgIEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+IA0K PiArICBVVF9FWFBFQ1RfQVNTRVJUX0ZBSUxVUkUgKEdldFZhcmlhYmxlTXRyckNvdW50ICgpLA0K PiBOVUxMKTsNCj4gDQo+ICsNCj4gDQo+ICsgIFN5c3RlbVBhcmFtZXRlci5NdHJyU3VwcG9ydGVk ID0gVFJVRTsNCj4gDQo+ICsgIFN5c3RlbVBhcmFtZXRlci5WYXJpYWJsZU10cnJDb3VudCA9IE1B WF9VSU5UODsNCj4gDQo+ICsgIEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7 DQo+IA0KPiArICBVVF9FWFBFQ1RfQVNTRVJUX0ZBSUxVUkUgKEdldFZhcmlhYmxlTXRyckNvdW50 ICgpLA0KPiBOVUxMKTsNCj4gDQo+ICsNCj4gDQo+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VE Ow0KPiANCj4gK30NCj4gDQo+ICsNCj4gDQo+ICsvKioNCj4gDQo+ICsgIFVuaXQgdGVzdCBvZiBN dHJyTGliIHNlcnZpY2UNCj4gR2V0RmlybXdhcmVWYXJpYWJsZU10cnJDb3VudCgpDQo+IA0KPiAr DQo+IA0KPiArICBAcGFyYW1baW5dICBDb250ZXh0ICAgIElnbm9yZWQNCj4gDQo+ICsNCj4gDQo+ ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVzdA0K PiBoYXMgY29tcGxldGVkIGFuZCB0aGUgdGVzdA0KPiANCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjYXNlIHdhcw0KPiBzdWNjZXNzZnVsLg0KPiANCj4gKyAgQHJl dHZhbCAgVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEICBBIHRlc3QgY2FzZQ0KPiBhc3NlcnRp b24gaGFzIGZhaWxlZC4NCj4gDQo+ICsNCj4gDQo+ICsqKi8NCj4gDQo+ICtVTklUX1RFU1RfU1RB VFVTDQo+IA0KPiArRUZJQVBJDQo+IA0KPiArVW5pdFRlc3RHZXRGaXJtd2FyZVZhcmlhYmxlTXRy ckNvdW50ICgNCj4gDQo+ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQo+IA0KPiAr ICApDQo+IA0KPiArew0KPiANCj4gKyAgVUlOVDMyDQo+IFJlc3VsdDsNCj4gDQo+ICsgIFVJTlQz Mg0KPiBSZXNlcnZlZE10cnJzOw0KPiANCj4gKyAgTVRSUl9MSUJfU1lTVEVNX1BBUkFNRVRFUg0K PiBTeXN0ZW1QYXJhbWV0ZXI7DQo+IA0KPiArICBNVFJSX0xJQl9HRVRfRklSTVdBUkVfVkFSSUFC TEVfTVRSUl9DT1VOVF9DT05URVhUDQo+ICpMb2NhbENvbnRleHQ7DQo+IA0KPiArDQo+IA0KPiAr ICBMb2NhbENvbnRleHQgPQ0KPiAoTVRSUl9MSUJfR0VUX0ZJUk1XQVJFX1ZBUklBQkxFX01UUlJf Q09VTlRfQ09OVEVYVCAqKQ0KPiBDb250ZXh0Ow0KPiANCj4gKw0KPiANCj4gKyAgQ29weU1lbSAo JlN5c3RlbVBhcmFtZXRlciwgTG9jYWxDb250ZXh0LQ0KPiA+U3lzdGVtUGFyYW1ldGVyLCBzaXpl b2YgKFN5c3RlbVBhcmFtZXRlcikpOw0KPiANCj4gKw0KPiANCj4gKyAgSW5pdGlhbGl6ZU10cnJS ZWdzICgmU3lzdGVtUGFyYW1ldGVyKTsNCj4gDQo+ICsgIC8vDQo+IA0KPiArICAvLyBQb3NpdGl2 ZSB0ZXN0IGNhc2VzIGZvciBWQ05UID0gMTAgYW5kIFJlc2VydmVkDQo+IFBDRCBpbiByYW5nZSAw Li4xMA0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIGZvciAoUmVzZXJ2ZWRNdHJycyA9IDA7IFJlc2Vy dmVkTXRycnMgPD0NCj4gU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRyckNvdW50OyBSZXNlcnZl ZE10cnJzKyspIHsNCj4gDQo+ICsgICAgUGF0Y2hQY2RTZXQzMg0KPiAoUGNkQ3B1TnVtYmVyT2ZS ZXNlcnZlZFZhcmlhYmxlTXRycnMsIFJlc2VydmVkTXRycnMpOw0KPiANCj4gKyAgICBSZXN1bHQg PSBHZXRGaXJtd2FyZVZhcmlhYmxlTXRyckNvdW50ICgpOw0KPiANCj4gKyAgICBVVF9BU1NFUlRf RVFVQUwgKFJlc3VsdCwNCj4gU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRyckNvdW50IC0gUmVz ZXJ2ZWRNdHJycyk7DQo+IA0KPiArICB9DQo+IA0KPiArDQo+IA0KPiArICAvLw0KPiANCj4gKyAg Ly8gTmVnYXRpdmUgdGVzdCBjYXNlcyB3aGVuIFJlc2VydmVkIFBDRCBpcyBsYXJnZXINCj4gdGhh biBWQ05UDQo+IA0KPiArICAvLw0KPiANCj4gKyAgZm9yIChSZXNlcnZlZE10cnJzID0NCj4gU3lz dGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRyckNvdW50ICsgMTsgUmVzZXJ2ZWRNdHJycyA8PQ0KPiAy NTU7IFJlc2VydmVkTXRycnMrKykgew0KPiANCj4gKyAgICBQYXRjaFBjZFNldDMyDQo+IChQY2RD cHVOdW1iZXJPZlJlc2VydmVkVmFyaWFibGVNdHJycywgUmVzZXJ2ZWRNdHJycyk7DQo+IA0KPiAr ICAgIFJlc3VsdCA9IEdldEZpcm13YXJlVmFyaWFibGVNdHJyQ291bnQgKCk7DQo+IA0KPiArICAg IFVUX0FTU0VSVF9FUVVBTCAoUmVzdWx0LCAwKTsNCj4gDQo+ICsgIH0NCj4gDQo+ICsNCj4gDQo+ ICsgIC8vDQo+IA0KPiArICAvLyBOZWdhdGl2ZSB0ZXN0IGNhc2VzIHdoZW4gUmVzZXJ2ZWQgUENE IGlzIGxhcmdlcg0KPiB0aGFuIFZDTlQNCj4gDQo+ICsgIC8vDQo+IA0KPiArICBQYXRjaFBjZFNl dDMyIChQY2RDcHVOdW1iZXJPZlJlc2VydmVkVmFyaWFibGVNdHJycywNCj4gTUFYX1VJTlQzMik7 DQo+IA0KPiArICBSZXN1bHQgPSBHZXRGaXJtd2FyZVZhcmlhYmxlTXRyckNvdW50ICgpOw0KPiAN Cj4gKyAgVVRfQVNTRVJUX0VRVUFMIChSZXN1bHQsIDApOw0KPiANCj4gKw0KPiANCj4gKyAgLy8N Cj4gDQo+ICsgIC8vIE5lZ2F0aXZlIHRlc3QgY2FzZSB3aGVuIE1UUlJzIGFyZSBub3Qgc3VwcG9y dGVkDQo+IA0KPiArICAvLw0KPiANCj4gKyAgU3lzdGVtUGFyYW1ldGVyLk10cnJTdXBwb3J0ZWQg PSBGQUxTRTsNCj4gDQo+ICsgIEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7 DQo+IA0KPiArICBQYXRjaFBjZFNldDMyIChQY2RDcHVOdW1iZXJPZlJlc2VydmVkVmFyaWFibGVN dHJycywNCj4gMik7DQo+IA0KPiArICBSZXN1bHQgPSBHZXRGaXJtd2FyZVZhcmlhYmxlTXRyckNv dW50ICgpOw0KPiANCj4gKyAgVVRfQVNTRVJUX0VRVUFMIChSZXN1bHQsIDApOw0KPiANCj4gKw0K PiANCj4gKyAgLy8NCj4gDQo+ICsgIC8vIE5lZ2F0aXZlIHRlc3QgY2FzZSB3aGVuIEZpeGVkIE1U UlJzIGFyZSBub3QNCj4gc3VwcG9ydGVkDQo+IA0KPiArICAvLw0KPiANCj4gKyAgU3lzdGVtUGFy YW1ldGVyLk10cnJTdXBwb3J0ZWQgPSBUUlVFOw0KPiANCj4gKyAgU3lzdGVtUGFyYW1ldGVyLkZp eGVkTXRyclN1cHBvcnRlZCA9IEZBTFNFOw0KPiANCj4gKyAgSW5pdGlhbGl6ZU10cnJSZWdzICgm U3lzdGVtUGFyYW1ldGVyKTsNCj4gDQo+ICsgIFBhdGNoUGNkU2V0MzIgKFBjZENwdU51bWJlck9m UmVzZXJ2ZWRWYXJpYWJsZU10cnJzLA0KPiAyKTsNCj4gDQo+ICsgIFJlc3VsdCA9IEdldEZpcm13 YXJlVmFyaWFibGVNdHJyQ291bnQgKCk7DQo+IA0KPiArICBVVF9BU1NFUlRfRVFVQUwgKFJlc3Vs dCwgMCk7DQo+IA0KPiArDQo+IA0KPiArICAvLw0KPiANCj4gKyAgLy8gRXhwZWN0IEFTU0VSVCgp IGlmIHZhcmlhYmxlIE1UUlIgY291bnQgaXMgPg0KPiBNVFJSX05VTUJFUl9PRl9WQVJJQUJMRV9N VFJSDQo+IA0KPiArICAvLw0KPiANCj4gKyAgU3lzdGVtUGFyYW1ldGVyLkZpeGVkTXRyclN1cHBv cnRlZCA9IFRSVUU7DQo+IA0KPiArICBTeXN0ZW1QYXJhbWV0ZXIuVmFyaWFibGVNdHJyQ291bnQg PQ0KPiBNVFJSX05VTUJFUl9PRl9WQVJJQUJMRV9NVFJSICsgMTsNCj4gDQo+ICsgIEluaXRpYWxp emVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+IA0KPiArICBVVF9FWFBFQ1RfQVNTRVJU X0ZBSUxVUkUNCj4gKEdldEZpcm13YXJlVmFyaWFibGVNdHJyQ291bnQgKCksIE5VTEwpOw0KPiAN Cj4gKw0KPiANCj4gKyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNTRUQ7DQo+IA0KPiArfQ0KPiANCj4g Kw0KPiANCj4gKy8qKg0KPiANCj4gKyAgVW5pdCB0ZXN0IG9mIE10cnJMaWIgc2VydmljZQ0KPiBN dHJyR2V0TWVtb3J5QXR0cmlidXRlKCkNCj4gDQo+ICsNCj4gDQo+ICsgIEBwYXJhbVtpbl0gIENv bnRleHQgICAgSWdub3JlZA0KPiANCj4gKw0KPiANCj4gKyAgQHJldHZhbCAgVU5JVF9URVNUX1BB U1NFRCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0DQo+IGhhcyBjb21wbGV0ZWQgYW5kIHRoZSB0 ZXN0DQo+IA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug d2FzDQo+IHN1Y2Nlc3NmdWwuDQo+IA0KPiArICBAcmV0dmFsICBVTklUX1RFU1RfRVJST1JfVEVT VF9GQUlMRUQgIEEgdGVzdCBjYXNlDQo+IGFzc2VydGlvbiBoYXMgZmFpbGVkLg0KPiANCj4gKw0K PiANCj4gKyoqLw0KPiANCj4gK1VOSVRfVEVTVF9TVEFUVVMNCj4gDQo+ICtFRklBUEkNCj4gDQo+ ICtVbml0VGVzdE10cnJHZXRNZW1vcnlBdHRyaWJ1dGUgKA0KPiANCj4gKyAgSU4gVU5JVF9URVNU X0NPTlRFWFQgIENvbnRleHQNCj4gDQo+ICsgICkNCj4gDQo+ICt7DQo+IA0KPiArICByZXR1cm4g VU5JVF9URVNUX1BBU1NFRDsNCj4gDQo+ICt9DQo+IA0KPiArDQo+IA0KPiArLyoqDQo+IA0KPiAr ICBVbml0IHRlc3Qgb2YgTXRyckxpYiBzZXJ2aWNlIE10cnJHZXRGaXhlZE10cnIoKQ0KPiANCj4g Kw0KPiANCj4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAgICBJZ25vcmVkDQo+IA0KPiArDQo+IA0K PiArICBAcmV0dmFsICBVTklUX1RFU1RfUEFTU0VEICAgICAgICAgICAgIFRoZSBVbml0IHRlc3QN Cj4gaGFzIGNvbXBsZXRlZCBhbmQgdGhlIHRlc3QNCj4gDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2FzZSB3YXMNCj4gc3VjY2Vzc2Z1bC4NCj4gDQo+ICsgIEBy ZXR2YWwgIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNhc2UNCj4gYXNzZXJ0 aW9uIGhhcyBmYWlsZWQuDQo+IA0KPiArDQo+IA0KPiArKiovDQo+IA0KPiArVU5JVF9URVNUX1NU QVRVUw0KPiANCj4gK0VGSUFQSQ0KPiANCj4gK1VuaXRUZXN0TXRyckdldEZpeGVkTXRyciAoDQo+ IA0KPiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4dA0KPiANCj4gKyAgKQ0KPiANCj4g K3sNCj4gDQo+ICsgIE1UUlJfRklYRURfU0VUVElOR1MgICAgICAgKlJlc3VsdDsNCj4gDQo+ICsg IE1UUlJfRklYRURfU0VUVElOR1MgICAgICAgRXhwZWN0ZWRGaXhlZFNldHRpbmdzOw0KPiANCj4g KyAgTVRSUl9GSVhFRF9TRVRUSU5HUyAgICAgICBGaXhlZFNldHRpbmdzOw0KPiANCj4gKyAgVUlO VE4gICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gDQo+ICsgIFVJTlROICAgICAgICAgICAg ICAgICAgICAgTXNySW5kZXg7DQo+IA0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEJ5 dGVJbmRleDsNCj4gDQo+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgTXNyVmFsdWU7DQo+ IA0KPiArICBNVFJSX0xJQl9TWVNURU1fUEFSQU1FVEVSIFN5c3RlbVBhcmFtZXRlcjsNCj4gDQo+ ICsgIE1UUlJfTElCX1RFU1RfQ09OVEVYVCAgICAgKkxvY2FsQ29udGV4dDsNCj4gDQo+ICsNCj4g DQo+ICsgIExvY2FsQ29udGV4dCA9IChNVFJSX0xJQl9URVNUX0NPTlRFWFQgKikgQ29udGV4dDsN Cj4gDQo+ICsNCj4gDQo+ICsgIENvcHlNZW0gKCZTeXN0ZW1QYXJhbWV0ZXIsIExvY2FsQ29udGV4 dC0NCj4gPlN5c3RlbVBhcmFtZXRlciwgc2l6ZW9mIChTeXN0ZW1QYXJhbWV0ZXIpKTsNCj4gDQo+ ICsgIEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+IA0KPiArICAvLw0K PiANCj4gKyAgLy8gU2V0IHJhbmRvbSBjYWNoZSB0eXBlIHRvIGRpZmZlcmVudCByYW5nZXMgdW5k ZXINCj4gMU1CIGFuZCBtYWtlIHN1cmUNCj4gDQo+ICsgIC8vIHRoZSBmaXhlZCBNVFJSIHNldHRp bmdzIGFyZSBleHBlY3RlZC4NCj4gDQo+ICsgIC8vIFRyeSAxMDAgdGltZXMuDQo+IA0KPiArICAv Lw0KPiANCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgMTAwOyBJbmRleCsrKSB7DQo+IA0K PiArICAgIGZvciAoTXNySW5kZXggPSAwOyBNc3JJbmRleCA8IEFSUkFZX1NJWkUNCj4gKG1GaXhl ZE10cnJzSW5kZXgpOyBNc3JJbmRleCsrKSB7DQo+IA0KPiArICAgICAgTXNyVmFsdWUgPSAwOw0K PiANCj4gKyAgICAgIGZvciAoQnl0ZUluZGV4ID0gMDsgQnl0ZUluZGV4IDwgc2l6ZW9mIChVSU5U NjQpOw0KPiBCeXRlSW5kZXgrKykgew0KPiANCj4gKyAgICAgICAgTXNyVmFsdWUgPSBNc3JWYWx1 ZSB8IExTaGlmdFU2NA0KPiAoR2VuZXJhdGVSYW5kb21DYWNoZVR5cGUgKCksIEJ5dGVJbmRleCAq IDgpOw0KPiANCj4gKyAgICAgIH0NCj4gDQo+ICsgICAgICBFeHBlY3RlZEZpeGVkU2V0dGluZ3Mu TXRycltNc3JJbmRleF0gPSBNc3JWYWx1ZTsNCj4gDQo+ICsgICAgICBBc21Xcml0ZU1zcjY0ICht Rml4ZWRNdHJyc0luZGV4W01zckluZGV4XSwNCj4gTXNyVmFsdWUpOw0KPiANCj4gKyAgICB9DQo+ IA0KPiArDQo+IA0KPiArICAgIFJlc3VsdCA9IE10cnJHZXRGaXhlZE10cnIgKCZGaXhlZFNldHRp bmdzKTsNCj4gDQo+ICsgICAgVVRfQVNTRVJUX0VRVUFMIChSZXN1bHQsICZGaXhlZFNldHRpbmdz KTsNCj4gDQo+ICsgICAgVVRfQVNTRVJUX01FTV9FUVVBTCAoJkZpeGVkU2V0dGluZ3MsDQo+ICZF eHBlY3RlZEZpeGVkU2V0dGluZ3MsIHNpemVvZiAoRml4ZWRTZXR0aW5ncykpOw0KPiANCj4gKyAg fQ0KPiANCj4gKw0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIC8vIE5lZ2F0aXZlIHRlc3QgY2FzZSB3 aGVuIE1UUlJzIGFyZSBub3Qgc3VwcG9ydGVkDQo+IA0KPiArICAvLw0KPiANCj4gKyAgU3lzdGVt UGFyYW1ldGVyLk10cnJTdXBwb3J0ZWQgPSBGQUxTRTsNCj4gDQo+ICsgIEluaXRpYWxpemVNdHJy UmVncyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+IA0KPiArDQo+IA0KPiArICBaZXJvTWVtICgmRml4 ZWRTZXR0aW5ncywgc2l6ZW9mIChGaXhlZFNldHRpbmdzKSk7DQo+IA0KPiArICBaZXJvTWVtICgm RXhwZWN0ZWRGaXhlZFNldHRpbmdzLCBzaXplb2YNCj4gKEV4cGVjdGVkRml4ZWRTZXR0aW5ncykp Ow0KPiANCj4gKyAgUmVzdWx0ID0gTXRyckdldEZpeGVkTXRyciAoJkZpeGVkU2V0dGluZ3MpOw0K PiANCj4gKyAgVVRfQVNTRVJUX0VRVUFMIChSZXN1bHQsICZGaXhlZFNldHRpbmdzKTsNCj4gDQo+ ICsgIFVUX0FTU0VSVF9NRU1fRVFVQUwgKCZFeHBlY3RlZEZpeGVkU2V0dGluZ3MsDQo+ICZGaXhl ZFNldHRpbmdzLCBzaXplb2YgKEV4cGVjdGVkRml4ZWRTZXR0aW5ncykpOw0KPiANCj4gKw0KPiAN Cj4gKyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNTRUQ7DQo+IA0KPiArfQ0KPiANCj4gKw0KPiANCj4g Ky8qKg0KPiANCj4gKyAgVW5pdCB0ZXN0IG9mIE10cnJMaWIgc2VydmljZSBNdHJyR2V0QWxsTXRy cnMoKQ0KPiANCj4gKw0KPiANCj4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAgICBJZ25vcmVkDQo+ IA0KPiArDQo+IA0KPiArICBAcmV0dmFsICBVTklUX1RFU1RfUEFTU0VEICAgICAgICAgICAgIFRo ZSBVbml0IHRlc3QNCj4gaGFzIGNvbXBsZXRlZCBhbmQgdGhlIHRlc3QNCj4gDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSB3YXMNCj4gc3VjY2Vzc2Z1bC4N Cj4gDQo+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNh c2UNCj4gYXNzZXJ0aW9uIGhhcyBmYWlsZWQuDQo+IA0KPiArDQo+IA0KPiArKiovDQo+IA0KPiAr VU5JVF9URVNUX1NUQVRVUw0KPiANCj4gK0VGSUFQSQ0KPiANCj4gK1VuaXRUZXN0TXRyckdldEFs bE10cnJzICgNCj4gDQo+ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICAgICAgQ29udGV4dA0KPiAN Cj4gKyAgKQ0KPiANCj4gK3sNCj4gDQo+ICsgIE1UUlJfU0VUVElOR1MgICAgICAgICAgICAgKlJl c3VsdDsNCj4gDQo+ICsgIE1UUlJfU0VUVElOR1MgICAgICAgICAgICAgTXRycnM7DQo+IA0KPiAr ICBNVFJSX1NFVFRJTkdTICAgICAgICAgICAgIEV4cGVjdGVkTXRycnM7DQo+IA0KPiArICBNVFJS X1ZBUklBQkxFX1NFVFRJTkcNCj4gVmFyaWFibGVNdHJyW01UUlJfTlVNQkVSX09GX1ZBUklBQkxF X01UUlJdOw0KPiANCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gDQo+ ICsgIE1UUlJfTElCX1NZU1RFTV9QQVJBTUVURVIgU3lzdGVtUGFyYW1ldGVyOw0KPiANCj4gKyAg TVRSUl9MSUJfVEVTVF9DT05URVhUICAgICAqTG9jYWxDb250ZXh0Ow0KPiANCj4gKw0KPiANCj4g KyAgTG9jYWxDb250ZXh0ID0gKE1UUlJfTElCX1RFU1RfQ09OVEVYVCAqKSBDb250ZXh0Ow0KPiAN Cj4gKw0KPiANCj4gKyAgQ29weU1lbSAoJlN5c3RlbVBhcmFtZXRlciwgTG9jYWxDb250ZXh0LQ0K PiA+U3lzdGVtUGFyYW1ldGVyLCBzaXplb2YgKFN5c3RlbVBhcmFtZXRlcikpOw0KPiANCj4gKyAg SW5pdGlhbGl6ZU10cnJSZWdzICgmU3lzdGVtUGFyYW1ldGVyKTsNCj4gDQo+ICsNCj4gDQo+ICsg IGZvciAoSW5kZXggPSAwOyBJbmRleCA8DQo+IFN5c3RlbVBhcmFtZXRlci5WYXJpYWJsZU10cnJD b3VudDsgSW5kZXgrKykgew0KPiANCj4gKyAgICBHZW5lcmF0ZVJhbmRvbU10cnJQYWlyDQo+IChT eXN0ZW1QYXJhbWV0ZXIuUGh5c2ljYWxBZGRyZXNzQml0cywNCj4gR2VuZXJhdGVSYW5kb21DYWNo ZVR5cGUgKCksICZWYXJpYWJsZU10cnJbSW5kZXhdLA0KPiBOVUxMKTsNCj4gDQo+ICsgICAgQXNt V3JpdGVNc3I2NCAoTVNSX0lBMzJfTVRSUl9QSFlTQkFTRTAgKyAoSW5kZXggPDwNCj4gMSksIFZh cmlhYmxlTXRycltJbmRleF0uQmFzZSk7DQo+IA0KPiArICAgIEFzbVdyaXRlTXNyNjQgKE1TUl9J QTMyX01UUlJfUEhZU01BU0swICsgKEluZGV4IDw8DQo+IDEpLCBWYXJpYWJsZU10cnJbSW5kZXhd Lk1hc2spOw0KPiANCj4gKyAgfQ0KPiANCj4gKyAgUmVzdWx0ID0gTXRyckdldEFsbE10cnJzICgm TXRycnMpOw0KPiANCj4gKyAgVVRfQVNTRVJUX0VRVUFMIChSZXN1bHQsICZNdHJycyk7DQo+IA0K PiArICBVVF9BU1NFUlRfTUVNX0VRVUFMIChNdHJycy5WYXJpYWJsZXMuTXRyciwNCj4gVmFyaWFi bGVNdHJyLCBzaXplb2YgKE1UUlJfVkFSSUFCTEVfU0VUVElORykgKg0KPiBTeXN0ZW1QYXJhbWV0 ZXIuVmFyaWFibGVNdHJyQ291bnQpOw0KPiANCj4gKw0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIC8v IE5lZ2F0aXZlIHRlc3QgY2FzZSB3aGVuIE1UUlJzIGFyZSBub3Qgc3VwcG9ydGVkDQo+IA0KPiAr ICAvLw0KPiANCj4gKyAgWmVyb01lbSAoJkV4cGVjdGVkTXRycnMsIHNpemVvZiAoRXhwZWN0ZWRN dHJycykpOw0KPiANCj4gKyAgWmVyb01lbSAoJk10cnJzLCBzaXplb2YgKE10cnJzKSk7DQo+IA0K PiArDQo+IA0KPiArICBTeXN0ZW1QYXJhbWV0ZXIuTXRyclN1cHBvcnRlZCA9IEZBTFNFOw0KPiAN Cj4gKyAgSW5pdGlhbGl6ZU10cnJSZWdzICgmU3lzdGVtUGFyYW1ldGVyKTsNCj4gDQo+ICsgIFJl c3VsdCA9IE10cnJHZXRBbGxNdHJycyAoJk10cnJzKTsNCj4gDQo+ICsgIFVUX0FTU0VSVF9FUVVB TCAoUmVzdWx0LCAmTXRycnMpOw0KPiANCj4gKyAgVVRfQVNTRVJUX01FTV9FUVVBTCAoJkV4cGVj dGVkTXRycnMsICZNdHJycywgc2l6ZW9mDQo+IChFeHBlY3RlZE10cnJzKSk7DQo+IA0KPiArDQo+ IA0KPiArICAvLw0KPiANCj4gKyAgLy8gRXhwZWN0IEFTU0VSVCgpIGlmIHZhcmlhYmxlIE1UUlIg Y291bnQgaXMgPg0KPiBNVFJSX05VTUJFUl9PRl9WQVJJQUJMRV9NVFJSDQo+IA0KPiArICAvLw0K PiANCj4gKyAgU3lzdGVtUGFyYW1ldGVyLk10cnJTdXBwb3J0ZWQgPSBUUlVFOw0KPiANCj4gKyAg U3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRyckNvdW50ID0NCj4gTVRSUl9OVU1CRVJfT0ZfVkFS SUFCTEVfTVRSUiArIDE7DQo+IA0KPiArICBJbml0aWFsaXplTXRyclJlZ3MgKCZTeXN0ZW1QYXJh bWV0ZXIpOw0KPiANCj4gKyAgVVRfRVhQRUNUX0FTU0VSVF9GQUlMVVJFIChNdHJyR2V0QWxsTXRy cnMgKCZNdHJycyksDQo+IE5VTEwpOw0KPiANCj4gKw0KPiANCj4gKyAgcmV0dXJuIFVOSVRfVEVT VF9QQVNTRUQ7DQo+IA0KPiArfQ0KPiANCj4gKw0KPiANCj4gKy8qKg0KPiANCj4gKyAgVW5pdCB0 ZXN0IG9mIE10cnJMaWIgc2VydmljZSBNdHJyU2V0QWxsTXRycnMoKQ0KPiANCj4gKw0KPiANCj4g KyAgQHBhcmFtW2luXSAgQ29udGV4dCAgICBJZ25vcmVkDQo+IA0KPiArDQo+IA0KPiArICBAcmV0 dmFsICBVTklUX1RFU1RfUEFTU0VEICAgICAgICAgICAgIFRoZSBVbml0IHRlc3QNCj4gaGFzIGNv bXBsZXRlZCBhbmQgdGhlIHRlc3QNCj4gDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2FzZSB3YXMNCj4gc3VjY2Vzc2Z1bC4NCj4gDQo+ICsgIEByZXR2YWwgIFVO SVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNhc2UNCj4gYXNzZXJ0aW9uIGhhcyBm YWlsZWQuDQo+IA0KPiArDQo+IA0KPiArKiovDQo+IA0KPiArVU5JVF9URVNUX1NUQVRVUw0KPiAN Cj4gK0VGSUFQSQ0KPiANCj4gK1VuaXRUZXN0TXRyclNldEFsbE10cnJzICgNCj4gDQo+ICsgIElO IFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQo+IA0KPiArICApDQo+IA0KPiArew0KPiANCj4g KyAgTVRSUl9TRVRUSU5HUyAgICAgICAgICAgICAgICAgICAqUmVzdWx0Ow0KPiANCj4gKyAgTVRS Ul9TRVRUSU5HUyAgICAgICAgICAgICAgICAgICBNdHJyczsNCj4gDQo+ICsgIFVJTlQzMiAgICAg ICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+IA0KPiArICBNU1JfSUEzMl9NVFJSX0RFRl9U WVBFX1JFR0lTVEVSIERlZmF1bHQ7DQo+IA0KPiArICBNVFJSX0xJQl9TWVNURU1fUEFSQU1FVEVS ICAgICAgIFN5c3RlbVBhcmFtZXRlcjsNCj4gDQo+ICsgIE1UUlJfTElCX1RFU1RfQ09OVEVYVCAg ICAgICAgICAgKkxvY2FsQ29udGV4dDsNCj4gDQo+ICsNCj4gDQo+ICsgIExvY2FsQ29udGV4dCA9 IChNVFJSX0xJQl9URVNUX0NPTlRFWFQgKikgQ29udGV4dDsNCj4gDQo+ICsNCj4gDQo+ICsgIENv cHlNZW0gKCZTeXN0ZW1QYXJhbWV0ZXIsIExvY2FsQ29udGV4dC0NCj4gPlN5c3RlbVBhcmFtZXRl ciwgc2l6ZW9mIChTeXN0ZW1QYXJhbWV0ZXIpKTsNCj4gDQo+ICsgIEluaXRpYWxpemVNdHJyUmVn cyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+IA0KPiArDQo+IA0KPiArICBEZWZhdWx0LlVpbnQ2NCA9 IDA7DQo+IA0KPiArICBEZWZhdWx0LkJpdHMuRSA9IDE7DQo+IA0KPiArICBEZWZhdWx0LkJpdHMu RkUgPSAxOw0KPiANCj4gKyAgRGVmYXVsdC5CaXRzLlR5cGUgPSBHZW5lcmF0ZVJhbmRvbUNhY2hl VHlwZSAoKTsNCj4gDQo+ICsNCj4gDQo+ICsgIFplcm9NZW0gKCZNdHJycywgc2l6ZW9mIChNdHJy cykpOw0KPiANCj4gKyAgTXRycnMuTXRyckRlZlR5cGUgPSBEZWZhdWx0LlVpbnQ2NDsNCj4gDQo+ ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8DQo+IFN5c3RlbVBhcmFtZXRlci5WYXJpYWJsZU10 cnJDb3VudDsgSW5kZXgrKykgew0KPiANCj4gKyAgICBHZW5lcmF0ZVJhbmRvbU10cnJQYWlyDQo+ IChTeXN0ZW1QYXJhbWV0ZXIuUGh5c2ljYWxBZGRyZXNzQml0cywNCj4gR2VuZXJhdGVSYW5kb21D YWNoZVR5cGUgKCksDQo+ICZNdHJycy5WYXJpYWJsZXMuTXRycltJbmRleF0sIE5VTEwpOw0KPiAN Cj4gKyAgfQ0KPiANCj4gKyAgUmVzdWx0ID0gTXRyclNldEFsbE10cnJzICgmTXRycnMpOw0KPiAN Cj4gKyAgVVRfQVNTRVJUX0VRVUFMIChSZXN1bHQsICZNdHJycyk7DQo+IA0KPiArDQo+IA0KPiAr ICBVVF9BU1NFUlRfRVFVQUwgKEFzbVJlYWRNc3I2NA0KPiAoTVNSX0lBMzJfTVRSUl9ERUZfVFlQ RSksIE10cnJzLk10cnJEZWZUeXBlKTsNCj4gDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8 DQo+IFN5c3RlbVBhcmFtZXRlci5WYXJpYWJsZU10cnJDb3VudDsgSW5kZXgrKykgew0KPiANCj4g KyAgICBVVF9BU1NFUlRfRVFVQUwgKEFzbVJlYWRNc3I2NA0KPiAoTVNSX0lBMzJfTVRSUl9QSFlT QkFTRTAgKyAoSW5kZXggPDwgMSkpLA0KPiBNdHJycy5WYXJpYWJsZXMuTXRycltJbmRleF0uQmFz ZSk7DQo+IA0KPiArICAgIFVUX0FTU0VSVF9FUVVBTCAoQXNtUmVhZE1zcjY0DQo+IChNU1JfSUEz Ml9NVFJSX1BIWVNNQVNLMCArIChJbmRleCA8PCAxKSksDQo+IE10cnJzLlZhcmlhYmxlcy5NdHJy W0luZGV4XS5NYXNrKTsNCj4gDQo+ICsgIH0NCj4gDQo+ICsNCj4gDQo+ICsgIHJldHVybiBVTklU X1RFU1RfUEFTU0VEOw0KPiANCj4gK30NCj4gDQo+ICsNCj4gDQo+ICsvKioNCj4gDQo+ICsgIFVu aXQgdGVzdCBvZiBNdHJyTGliIHNlcnZpY2UNCj4gTXRyckdldE1lbW9yeUF0dHJpYnV0ZUluVmFy aWFibGVNdHJyKCkNCj4gDQo+ICsNCj4gDQo+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAgSWdu b3JlZA0KPiANCj4gKw0KPiANCj4gKyAgQHJldHZhbCAgVU5JVF9URVNUX1BBU1NFRCAgICAgICAg ICAgICBUaGUgVW5pdCB0ZXN0DQo+IGhhcyBjb21wbGV0ZWQgYW5kIHRoZSB0ZXN0DQo+IA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugd2FzDQo+IHN1Y2Nl c3NmdWwuDQo+IA0KPiArICBAcmV0dmFsICBVTklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQgIEEg dGVzdCBjYXNlDQo+IGFzc2VydGlvbiBoYXMgZmFpbGVkLg0KPiANCj4gKw0KPiANCj4gKyoqLw0K PiANCj4gK1VOSVRfVEVTVF9TVEFUVVMNCj4gDQo+ICtFRklBUEkNCj4gDQo+ICtVbml0VGVzdE10 cnJHZXRNZW1vcnlBdHRyaWJ1dGVJblZhcmlhYmxlTXRyciAoDQo+IA0KPiArICBJTiBVTklUX1RF U1RfQ09OVEVYVCAgQ29udGV4dA0KPiANCj4gKyAgKQ0KPiANCj4gK3sNCj4gDQo+ICsgIE1UUlJf TElCX1RFU1RfQ09OVEVYVCAgICAgICAgICAgKkxvY2FsQ29udGV4dDsNCj4gDQo+ICsgIE1UUlJf TElCX1NZU1RFTV9QQVJBTUVURVIgICAgICAgU3lzdGVtUGFyYW1ldGVyOw0KPiANCj4gKyAgVUlO VDMyICAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQ7DQo+IA0KPiArICBNVFJSX1ZBUklB QkxFX1NFVFRJTkcNCj4gVmFyaWFibGVTZXR0aW5nW01UUlJfTlVNQkVSX09GX1ZBUklBQkxFX01U UlJdOw0KPiANCj4gKyAgVkFSSUFCTEVfTVRSUg0KPiBWYXJpYWJsZU10cnJbTVRSUl9OVU1CRVJf T0ZfVkFSSUFCTEVfTVRSUl07DQo+IA0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAg ICAgIFZhbGlkTXRyckJpdHNNYXNrOw0KPiANCj4gKyAgVUlOVDY0DQo+IFZhbGlkTXRyckFkZHJl c3NNYXNrOw0KPiANCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsN Cj4gDQo+ICsgIE1TUl9JQTMyX01UUlJfUEhZU0JBU0VfUkVHSVNURVIgQmFzZTsNCj4gDQo+ICsg IE1TUl9JQTMyX01UUlJfUEhZU01BU0tfUkVHSVNURVIgTWFzazsNCj4gDQo+ICsNCj4gDQo+ICsg IExvY2FsQ29udGV4dCA9IChNVFJSX0xJQl9URVNUX0NPTlRFWFQgKikgQ29udGV4dDsNCj4gDQo+ ICsNCj4gDQo+ICsgIENvcHlNZW0gKCZTeXN0ZW1QYXJhbWV0ZXIsIExvY2FsQ29udGV4dC0NCj4g PlN5c3RlbVBhcmFtZXRlciwgc2l6ZW9mIChTeXN0ZW1QYXJhbWV0ZXIpKTsNCj4gDQo+ICsNCj4g DQo+ICsgIEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+IA0KPiArDQo+ IA0KPiArICBWYWxpZE10cnJCaXRzTWFzayAgICA9ICgxdWxsIDw8DQo+IFN5c3RlbVBhcmFtZXRl ci5QaHlzaWNhbEFkZHJlc3NCaXRzKSAtIDE7DQo+IA0KPiArICBWYWxpZE10cnJBZGRyZXNzTWFz ayA9IFZhbGlkTXRyckJpdHNNYXNrICYNCj4gMHhmZmZmZmZmZmZmZmZmMDAwVUxMOw0KPiANCj4g Kw0KPiANCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwNCj4gU3lzdGVtUGFyYW1ldGVyLlZh cmlhYmxlTXRyckNvdW50OyBJbmRleCsrKSB7DQo+IA0KPiArICAgIEdlbmVyYXRlUmFuZG9tTXRy clBhaXINCj4gKFN5c3RlbVBhcmFtZXRlci5QaHlzaWNhbEFkZHJlc3NCaXRzLA0KPiBHZW5lcmF0 ZVJhbmRvbUNhY2hlVHlwZSAoKSwgJlZhcmlhYmxlU2V0dGluZ1tJbmRleF0sDQo+IE5VTEwpOw0K PiANCj4gKyAgICBBc21Xcml0ZU1zcjY0IChNU1JfSUEzMl9NVFJSX1BIWVNCQVNFMCArIChJbmRl eCA8PA0KPiAxKSwgVmFyaWFibGVTZXR0aW5nW0luZGV4XS5CYXNlKTsNCj4gDQo+ICsgICAgQXNt V3JpdGVNc3I2NCAoTVNSX0lBMzJfTVRSUl9QSFlTTUFTSzAgKyAoSW5kZXggPDwNCj4gMSksIFZh cmlhYmxlU2V0dGluZ1tJbmRleF0uTWFzayk7DQo+IA0KPiArICB9DQo+IA0KPiArICBSZXN1bHQg PSBNdHJyR2V0TWVtb3J5QXR0cmlidXRlSW5WYXJpYWJsZU10cnINCj4gKFZhbGlkTXRyckJpdHNN YXNrLCBWYWxpZE10cnJBZGRyZXNzTWFzaywNCj4gVmFyaWFibGVNdHJyKTsNCj4gDQo+ICsgIFVU X0FTU0VSVF9FUVVBTCAoUmVzdWx0LA0KPiBTeXN0ZW1QYXJhbWV0ZXIuVmFyaWFibGVNdHJyQ291 bnQpOw0KPiANCj4gKw0KPiANCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwNCj4gU3lzdGVt UGFyYW1ldGVyLlZhcmlhYmxlTXRyckNvdW50OyBJbmRleCsrKSB7DQo+IA0KPiArICAgIEJhc2Uu VWludDY0ICAgID0gVmFyaWFibGVNdHJyW0luZGV4XS5CYXNlQWRkcmVzczsNCj4gDQo+ICsgICAg QmFzZS5CaXRzLlR5cGUgPSAoVUlOVDMyKQ0KPiBWYXJpYWJsZU10cnJbSW5kZXhdLlR5cGU7DQo+ IA0KPiArICAgIFVUX0FTU0VSVF9FUVVBTCAoQmFzZS5VaW50NjQsDQo+IFZhcmlhYmxlU2V0dGlu Z1tJbmRleF0uQmFzZSk7DQo+IA0KPiArDQo+IA0KPiArICAgIE1hc2suVWludDY0ICAgID0gfihW YXJpYWJsZU10cnJbSW5kZXhdLkxlbmd0aCAtIDEpDQo+ICYgVmFsaWRNdHJyQml0c01hc2s7DQo+ IA0KPiArICAgIE1hc2suQml0cy5WICAgID0gMTsNCj4gDQo+ICsgICAgVVRfQVNTRVJUX0VRVUFM IChNYXNrLlVpbnQ2NCwNCj4gVmFyaWFibGVTZXR0aW5nW0luZGV4XS5NYXNrKTsNCj4gDQo+ICsg IH0NCj4gDQo+ICsNCj4gDQo+ICsgIC8vDQo+IA0KPiArICAvLyBOZWdhdGl2ZSB0ZXN0IGNhc2Ug d2hlbiBNVFJScyBhcmUgbm90IHN1cHBvcnRlZA0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIFN5c3Rl bVBhcmFtZXRlci5NdHJyU3VwcG9ydGVkID0gRkFMU0U7DQo+IA0KPiArICBJbml0aWFsaXplTXRy clJlZ3MgKCZTeXN0ZW1QYXJhbWV0ZXIpOw0KPiANCj4gKyAgUmVzdWx0ID0gTXRyckdldE1lbW9y eUF0dHJpYnV0ZUluVmFyaWFibGVNdHJyDQo+IChWYWxpZE10cnJCaXRzTWFzaywgVmFsaWRNdHJy QWRkcmVzc01hc2ssDQo+IFZhcmlhYmxlTXRycik7DQo+IA0KPiArICBVVF9BU1NFUlRfRVFVQUwg KFJlc3VsdCwgMCk7DQo+IA0KPiArDQo+IA0KPiArICAvLw0KPiANCj4gKyAgLy8gRXhwZWN0IEFT U0VSVCgpIGlmIHZhcmlhYmxlIE1UUlIgY291bnQgaXMgPg0KPiBNVFJSX05VTUJFUl9PRl9WQVJJ QUJMRV9NVFJSDQo+IA0KPiArICAvLw0KPiANCj4gKyAgU3lzdGVtUGFyYW1ldGVyLk10cnJTdXBw b3J0ZWQgPSBUUlVFOw0KPiANCj4gKyAgU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRyckNvdW50 ID0NCj4gTVRSUl9OVU1CRVJfT0ZfVkFSSUFCTEVfTVRSUiArIDE7DQo+IA0KPiArICBJbml0aWFs aXplTXRyclJlZ3MgKCZTeXN0ZW1QYXJhbWV0ZXIpOw0KPiANCj4gKyAgVVRfRVhQRUNUX0FTU0VS VF9GQUlMVVJFDQo+IChNdHJyR2V0TWVtb3J5QXR0cmlidXRlSW5WYXJpYWJsZU10cnINCj4gKFZh bGlkTXRyckJpdHNNYXNrLCBWYWxpZE10cnJBZGRyZXNzTWFzaywNCj4gVmFyaWFibGVNdHJyKSwg TlVMTCk7DQo+IA0KPiArDQo+IA0KPiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gDQo+ ICt9DQo+IA0KPiArDQo+IA0KPiArLyoqDQo+IA0KPiArICBVbml0IHRlc3Qgb2YgTXRyckxpYiBz ZXJ2aWNlDQo+IE10cnJEZWJ1Z1ByaW50QWxsTXRycnMoKQ0KPiANCj4gKw0KPiANCj4gKyAgQHBh cmFtW2luXSAgQ29udGV4dCAgICBJZ25vcmVkDQo+IA0KPiArDQo+IA0KPiArICBAcmV0dmFsICBV TklUX1RFU1RfUEFTU0VEICAgICAgICAgICAgIFRoZSBVbml0IHRlc3QNCj4gaGFzIGNvbXBsZXRl ZCBhbmQgdGhlIHRlc3QNCj4gDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2FzZSB3YXMNCj4gc3VjY2Vzc2Z1bC4NCj4gDQo+ICsgIEByZXR2YWwgIFVOSVRfVEVT VF9FUlJPUl9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNhc2UNCj4gYXNzZXJ0aW9uIGhhcyBmYWlsZWQu DQo+IA0KPiArDQo+IA0KPiArKiovDQo+IA0KPiArVU5JVF9URVNUX1NUQVRVUw0KPiANCj4gK0VG SUFQSQ0KPiANCj4gK1VuaXRUZXN0TXRyckRlYnVnUHJpbnRBbGxNdHJycyAoDQo+IA0KPiArICBJ TiBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4dA0KPiANCj4gKyAgKQ0KPiANCj4gK3sNCj4gDQo+ ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiANCj4gK30NCj4gDQo+ICsNCj4gDQo+ICsv KioNCj4gDQo+ICsgIFVuaXQgdGVzdCBvZiBNdHJyTGliIHNlcnZpY2UNCj4gTXRyckdldERlZmF1 bHRNZW1vcnlUeXBlKCkuDQo+IA0KPiArDQo+IA0KPiArICBAcGFyYW1baW5dICBDb250ZXh0ICAg IElnbm9yZWQNCj4gDQo+ICsNCj4gDQo+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9QQVNTRUQgICAg ICAgICAgICAgVGhlIFVuaXQgdGVzdA0KPiBoYXMgY29tcGxldGVkIGFuZCB0aGUgdGVzdA0KPiAN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHdhcw0KPiBz dWNjZXNzZnVsLg0KPiANCj4gKyAgQHJldHZhbCAgVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVE ICBBIHRlc3QgY2FzZQ0KPiBhc3NlcnRpb24gaGFzIGZhaWxlZC4NCj4gDQo+ICsNCj4gDQo+ICsq Ki8NCj4gDQo+ICtVTklUX1RFU1RfU1RBVFVTDQo+IA0KPiArRUZJQVBJDQo+IA0KPiArVW5pdFRl c3RNdHJyR2V0RGVmYXVsdE1lbW9yeVR5cGUgKA0KPiANCj4gKyAgSU4gVU5JVF9URVNUX0NPTlRF WFQgIENvbnRleHQNCj4gDQo+ICsgICkNCj4gDQo+ICt7DQo+IA0KPiArICBNVFJSX0xJQl9URVNU X0NPTlRFWFQgICAgICpMb2NhbENvbnRleHQ7DQo+IA0KPiArICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgIEluZGV4Ow0KPiANCj4gKyAgTVRSUl9NRU1PUllfQ0FDSEVfVFlQRSAgICBSZXN1bHQ7 DQo+IA0KPiArICBNVFJSX0xJQl9TWVNURU1fUEFSQU1FVEVSIFN5c3RlbVBhcmFtZXRlcjsNCj4g DQo+ICsgIE1UUlJfTUVNT1JZX0NBQ0hFX1RZUEUgICAgQ2FjaGVUeXBlWzVdOw0KPiANCj4gKw0K PiANCj4gKyAgQ2FjaGVUeXBlWzBdID0gQ2FjaGVVbmNhY2hlYWJsZTsNCj4gDQo+ICsgIENhY2hl VHlwZVsxXSA9IENhY2hlV3JpdGVDb21iaW5pbmc7DQo+IA0KPiArICBDYWNoZVR5cGVbMl0gPSBD YWNoZVdyaXRlVGhyb3VnaDsNCj4gDQo+ICsgIENhY2hlVHlwZVszXSA9IENhY2hlV3JpdGVQcm90 ZWN0ZWQ7DQo+IA0KPiArICBDYWNoZVR5cGVbNF0gPSBDYWNoZVdyaXRlQmFjazsNCj4gDQo+ICsN Cj4gDQo+ICsgIExvY2FsQ29udGV4dCA9IChNVFJSX0xJQl9URVNUX0NPTlRFWFQgKikgQ29udGV4 dDsNCj4gDQo+ICsNCj4gDQo+ICsgIENvcHlNZW0gKCZTeXN0ZW1QYXJhbWV0ZXIsIExvY2FsQ29u dGV4dC0NCj4gPlN5c3RlbVBhcmFtZXRlciwgc2l6ZW9mIChTeXN0ZW1QYXJhbWV0ZXIpKTsNCj4g DQo+ICsgIC8vDQo+IA0KPiArICAvLyBJZiBNVFJScyBhcmUgc3VwcG9ydGVkLCB0aGVuIGFsd2F5 cyByZXR1cm4gdGhlDQo+IGNhY2hlIHR5cGUgaW4gdGhlIE1TUg0KPiANCj4gKyAgLy8gTVNSX0lB MzJfTVRSUl9ERUZfVFlQRQ0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJ bmRleCA8IEFSUkFZX1NJWkUgKENhY2hlVHlwZSk7DQo+IEluZGV4KyspIHsNCj4gDQo+ICsgICAg U3lzdGVtUGFyYW1ldGVyLkRlZmF1bHRDYWNoZVR5cGUgPQ0KPiBDYWNoZVR5cGVbSW5kZXhdOw0K PiANCj4gKyAgICBJbml0aWFsaXplTXRyclJlZ3MgKCZTeXN0ZW1QYXJhbWV0ZXIpOw0KPiANCj4g KyAgICBSZXN1bHQgPSBNdHJyR2V0RGVmYXVsdE1lbW9yeVR5cGUgKCk7DQo+IA0KPiArICAgIFVU X0FTU0VSVF9FUVVBTCAoUmVzdWx0LA0KPiBTeXN0ZW1QYXJhbWV0ZXIuRGVmYXVsdENhY2hlVHlw ZSk7DQo+IA0KPiArICB9DQo+IA0KPiArDQo+IA0KPiArICAvLw0KPiANCj4gKyAgLy8gSWYgTVRS UnMgYXJlIG5vdCBzdXBwb3J0ZWQsIHRoZW4gYWx3YXlzIHJldHVybg0KPiBDYWNoZVVuY2FjaGVh YmxlDQo+IA0KPiArICAvLw0KPiANCj4gKyAgU3lzdGVtUGFyYW1ldGVyLk10cnJTdXBwb3J0ZWQg PSBGQUxTRTsNCj4gDQo+ICsgIEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7 DQo+IA0KPiArICBSZXN1bHQgPSBNdHJyR2V0RGVmYXVsdE1lbW9yeVR5cGUgKCk7DQo+IA0KPiAr ICBVVF9BU1NFUlRfRVFVQUwgKFJlc3VsdCwgQ2FjaGVVbmNhY2hlYWJsZSk7DQo+IA0KPiArDQo+ IA0KPiArICBTeXN0ZW1QYXJhbWV0ZXIuTXRyclN1cHBvcnRlZCA9IFRSVUU7DQo+IA0KPiArICBT eXN0ZW1QYXJhbWV0ZXIuRml4ZWRNdHJyU3VwcG9ydGVkID0gRkFMU0U7DQo+IA0KPiArICBJbml0 aWFsaXplTXRyclJlZ3MgKCZTeXN0ZW1QYXJhbWV0ZXIpOw0KPiANCj4gKyAgUmVzdWx0ID0gTXRy ckdldERlZmF1bHRNZW1vcnlUeXBlICgpOw0KPiANCj4gKyAgVVRfQVNTRVJUX0VRVUFMIChSZXN1 bHQsIENhY2hlVW5jYWNoZWFibGUpOw0KPiANCj4gKw0KPiANCj4gKyAgU3lzdGVtUGFyYW1ldGVy Lk10cnJTdXBwb3J0ZWQgPSBUUlVFOw0KPiANCj4gKyAgU3lzdGVtUGFyYW1ldGVyLkZpeGVkTXRy clN1cHBvcnRlZCA9IFRSVUU7DQo+IA0KPiArICBTeXN0ZW1QYXJhbWV0ZXIuVmFyaWFibGVNdHJy Q291bnQgPSAwOw0KPiANCj4gKyAgSW5pdGlhbGl6ZU10cnJSZWdzICgmU3lzdGVtUGFyYW1ldGVy KTsNCj4gDQo+ICsgIFJlc3VsdCA9IE10cnJHZXREZWZhdWx0TWVtb3J5VHlwZSAoKTsNCj4gDQo+ ICsgIFVUX0FTU0VSVF9FUVVBTCAoUmVzdWx0LCBDYWNoZVVuY2FjaGVhYmxlKTsNCj4gDQo+ICsN Cj4gDQo+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiANCj4gK30NCj4gDQo+ICsNCj4g DQo+ICsvKioNCj4gDQo+ICsgIFVuaXQgdGVzdCBvZiBNdHJyTGliIHNlcnZpY2UNCj4gTXRyclNl dE1lbW9yeUF0dHJpYnV0ZUluTXRyclNldHRpbmdzKCkuDQo+IA0KPiArDQo+IA0KPiArICBAcGFy YW1baW5dICBDb250ZXh0ICAgIElnbm9yZWQNCj4gDQo+ICsNCj4gDQo+ICsgIEByZXR2YWwgIFVO SVRfVEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVzdA0KPiBoYXMgY29tcGxldGVk IGFuZCB0aGUgdGVzdA0KPiANCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjYXNlIHdhcw0KPiBzdWNjZXNzZnVsLg0KPiANCj4gKyAgQHJldHZhbCAgVU5JVF9URVNU X0VSUk9SX1RFU1RfRkFJTEVEICBBIHRlc3QgY2FzZQ0KPiBhc3NlcnRpb24gaGFzIGZhaWxlZC4N Cj4gDQo+ICsNCj4gDQo+ICsqKi8NCj4gDQo+ICtVTklUX1RFU1RfU1RBVFVTDQo+IA0KPiArRUZJ QVBJDQo+IA0KPiArVW5pdFRlc3RNdHJyU2V0TWVtb3J5QXR0cmlidXRlSW5NdHJyU2V0dGluZ3Mg KA0KPiANCj4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4gDQo+ICsgICkNCj4g DQo+ICt7DQo+IA0KPiArICBDT05TVCBNVFJSX0xJQl9TWVNURU1fUEFSQU1FVEVSICpTeXN0ZW1Q YXJhbWV0ZXI7DQo+IA0KPiArICBSRVRVUk5fU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1 czsNCj4gDQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgVWNDb3VudDsNCj4g DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgV3RDb3VudDsNCj4gDQo+ICsg IFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgV2JDb3VudDsNCj4gDQo+ICsgIFVJTlQz MiAgICAgICAgICAgICAgICAgICAgICAgICAgV3BDb3VudDsNCj4gDQo+ICsgIFVJTlQzMiAgICAg ICAgICAgICAgICAgICAgICAgICAgV2NDb3VudDsNCj4gDQo+ICsNCj4gDQo+ICsgIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICAgICAgTXRyckluZGV4Ow0KPiANCj4gKyAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gDQo+ICsgIE1UUlJfU0VUVElOR1MgICAgICAg ICAgICAgICAgICAgTG9jYWxNdHJyczsNCj4gDQo+ICsNCj4gDQo+ICsgIE1UUlJfTUVNT1JZX1JB TkdFDQo+IFJhd010cnJSYW5nZVtNVFJSX05VTUJFUl9PRl9WQVJJQUJMRV9NVFJSXTsNCj4gDQo+ ICsgIE1UUlJfTUVNT1JZX1JBTkdFDQo+IEV4cGVjdGVkTWVtb3J5UmFuZ2VzW01UUlJfTlVNQkVS X09GX0ZJWEVEX01UUlIgKiBzaXplb2YNCj4gKFVJTlQ2NCkgKyAyICogTVRSUl9OVU1CRVJfT0Zf VkFSSUFCTEVfTVRSUiArIDFdOw0KPiANCj4gKyAgVUlOVDMyDQo+IEV4cGVjdGVkVmFyaWFibGVN dHJyVXNhZ2U7DQo+IA0KPiArICBVSU5UTg0KPiBFeHBlY3RlZE1lbW9yeVJhbmdlc0NvdW50Ow0K PiANCj4gKw0KPiANCj4gKyAgTVRSUl9NRU1PUllfUkFOR0UNCj4gQWN0dWFsTWVtb3J5UmFuZ2Vz W01UUlJfTlVNQkVSX09GX0ZJWEVEX01UUlIgKiBzaXplb2YNCj4gKFVJTlQ2NCkgKyAyICogTVRS Ul9OVU1CRVJfT0ZfVkFSSUFCTEVfTVRSUiArIDFdOw0KPiANCj4gKyAgVUlOVDMyDQo+IEFjdHVh bFZhcmlhYmxlTXRyclVzYWdlOw0KPiANCj4gKyAgVUlOVE4NCj4gQWN0dWFsTWVtb3J5UmFuZ2Vz Q291bnQ7DQo+IA0KPiArDQo+IA0KPiArICBNVFJSX1NFVFRJTkdTICAgICAgICAgICAgICAgICAg ICpNdHJyc1syXTsNCj4gDQo+ICsNCj4gDQo+ICsgIFN5c3RlbVBhcmFtZXRlciA9IChNVFJSX0xJ Ql9TWVNURU1fUEFSQU1FVEVSICopDQo+IENvbnRleHQ7DQo+IA0KPiArICBHZW5lcmF0ZVJhbmRv bU1lbW9yeVR5cGVDb21iaW5hdGlvbiAoDQo+IA0KPiArICAgIFN5c3RlbVBhcmFtZXRlci0+VmFy aWFibGVNdHJyQ291bnQgLSBQYXRjaFBjZEdldDMyDQo+IChQY2RDcHVOdW1iZXJPZlJlc2VydmVk VmFyaWFibGVNdHJycyksDQo+IA0KPiArICAgICZVY0NvdW50LCAmV3RDb3VudCwgJldiQ291bnQs ICZXcENvdW50LCAmV2NDb3VudA0KPiANCj4gKyAgICApOw0KPiANCj4gKyAgR2VuZXJhdGVWYWxp ZEFuZENvbmZpZ3VyYWJsZU10cnJQYWlycyAoDQo+IA0KPiArICAgIFN5c3RlbVBhcmFtZXRlci0+ UGh5c2ljYWxBZGRyZXNzQml0cywNCj4gUmF3TXRyclJhbmdlLA0KPiANCj4gKyAgICBVY0NvdW50 LCBXdENvdW50LCBXYkNvdW50LCBXcENvdW50LCBXY0NvdW50DQo+IA0KPiArICAgICk7DQo+IA0K PiArDQo+IA0KPiArICBFeHBlY3RlZFZhcmlhYmxlTXRyclVzYWdlID0gVWNDb3VudCArIFd0Q291 bnQgKw0KPiBXYkNvdW50ICsgV3BDb3VudCArIFdjQ291bnQ7DQo+IA0KPiArICBFeHBlY3RlZE1l bW9yeVJhbmdlc0NvdW50ID0gQVJSQVlfU0laRQ0KPiAoRXhwZWN0ZWRNZW1vcnlSYW5nZXMpOw0K PiANCj4gKyAgR2V0RWZmZWN0aXZlTWVtb3J5UmFuZ2VzICgNCj4gDQo+ICsgICAgU3lzdGVtUGFy YW1ldGVyLT5EZWZhdWx0Q2FjaGVUeXBlLA0KPiANCj4gKyAgICBTeXN0ZW1QYXJhbWV0ZXItPlBo eXNpY2FsQWRkcmVzc0JpdHMsDQo+IA0KPiArICAgIFJhd010cnJSYW5nZSwgRXhwZWN0ZWRWYXJp YWJsZU10cnJVc2FnZSwNCj4gDQo+ICsgICAgRXhwZWN0ZWRNZW1vcnlSYW5nZXMsICZFeHBlY3Rl ZE1lbW9yeVJhbmdlc0NvdW50DQo+IA0KPiArICAgICk7DQo+IA0KPiArDQo+IA0KPiArICBVVF9M T0dfSU5GTyAoIi0tLSBFeHBlY3RlZCBNZW1vcnkgUmFuZ2VzIFslZF0gLS0tDQo+IFxuIiwgRXhw ZWN0ZWRNZW1vcnlSYW5nZXNDb3VudCk7DQo+IA0KPiArICBEdW1wTWVtb3J5UmFuZ2VzIChFeHBl Y3RlZE1lbW9yeVJhbmdlcywNCj4gRXhwZWN0ZWRNZW1vcnlSYW5nZXNDb3VudCk7DQo+IA0KPiAr ICAvLw0KPiANCj4gKyAgLy8gRGVmYXVsdCBjYWNoZSB0eXBlIGlzIGFsd2F5cyBhbiBJTlBVVA0K PiANCj4gKyAgLy8NCj4gDQo+ICsgIFplcm9NZW0gKCZMb2NhbE10cnJzLCBzaXplb2YgKExvY2Fs TXRycnMpKTsNCj4gDQo+ICsgIExvY2FsTXRycnMuTXRyckRlZlR5cGUgPSBNdHJyR2V0RGVmYXVs dE1lbW9yeVR5cGUNCj4gKCk7DQo+IA0KPiArICBNdHJyc1swXSAgICAgICAgICAgICAgID0gJkxv Y2FsTXRycnM7DQo+IA0KPiArICBNdHJyc1sxXSAgICAgICAgICAgICAgID0gTlVMTDsNCj4gDQo+ ICsNCj4gDQo+ICsgIGZvciAoTXRyckluZGV4ID0gMDsgTXRyckluZGV4IDwgQVJSQVlfU0laRSAo TXRycnMpOw0KPiBNdHJySW5kZXgrKykgew0KPiANCj4gKyAgICBmb3IgKEluZGV4ID0gMDsgSW5k ZXggPCBFeHBlY3RlZE1lbW9yeVJhbmdlc0NvdW50Ow0KPiBJbmRleCsrKSB7DQo+IA0KPiArICAg ICAgU3RhdHVzID0gTXRyclNldE1lbW9yeUF0dHJpYnV0ZUluTXRyclNldHRpbmdzICgNCj4gDQo+ ICsgICAgICAgICAgICAgICAgIE10cnJzW010cnJJbmRleF0sDQo+IA0KPiArDQo+IEV4cGVjdGVk TWVtb3J5UmFuZ2VzW0luZGV4XS5CYXNlQWRkcmVzcywNCj4gDQo+ICsgICAgICAgICAgICAgICAg IEV4cGVjdGVkTWVtb3J5UmFuZ2VzW0luZGV4XS5MZW5ndGgsDQo+IA0KPiArICAgICAgICAgICAg ICAgICBFeHBlY3RlZE1lbW9yeVJhbmdlc1tJbmRleF0uVHlwZQ0KPiANCj4gKyAgICAgICAgICAg ICAgICAgKTsNCj4gDQo+ICsgICAgICBVVF9BU1NFUlRfVFJVRSAoU3RhdHVzID09IFJFVFVSTl9T VUNDRVNTIHx8DQo+IFN0YXR1cyA9PSBSRVRVUk5fT1VUX09GX1JFU09VUkNFUyB8fCBTdGF0dXMg PT0NCj4gUkVUVVJOX0JVRkZFUl9UT09fU01BTEwpOw0KPiANCj4gKyAgICAgIGlmIChTdGF0dXMg PT0gUkVUVVJOX09VVF9PRl9SRVNPVVJDRVMgfHwgU3RhdHVzDQo+ID09IFJFVFVSTl9CVUZGRVJf VE9PX1NNQUxMKSB7DQo+IA0KPiArICAgICAgICByZXR1cm4gVU5JVF9URVNUX1NLSVBQRUQ7DQo+ IA0KPiArICAgICAgfQ0KPiANCj4gKyAgICB9DQo+IA0KPiArDQo+IA0KPiArICAgIGlmIChNdHJy c1tNdHJySW5kZXhdID09IE5VTEwpIHsNCj4gDQo+ICsgICAgICBaZXJvTWVtICgmTG9jYWxNdHJy cywgc2l6ZW9mIChMb2NhbE10cnJzKSk7DQo+IA0KPiArICAgICAgTXRyckdldEFsbE10cnJzICgm TG9jYWxNdHJycyk7DQo+IA0KPiArICAgIH0NCj4gDQo+ICsgICAgQWN0dWFsTWVtb3J5UmFuZ2Vz Q291bnQgPSBBUlJBWV9TSVpFDQo+IChBY3R1YWxNZW1vcnlSYW5nZXMpOw0KPiANCj4gKyAgICBD b2xsZWN0VGVzdFJlc3VsdCAoDQo+IA0KPiArICAgICAgU3lzdGVtUGFyYW1ldGVyLT5EZWZhdWx0 Q2FjaGVUeXBlLA0KPiBTeXN0ZW1QYXJhbWV0ZXItPlBoeXNpY2FsQWRkcmVzc0JpdHMsIFN5c3Rl bVBhcmFtZXRlci0NCj4gPlZhcmlhYmxlTXRyckNvdW50LA0KPiANCj4gKyAgICAgICZMb2NhbE10 cnJzLCBBY3R1YWxNZW1vcnlSYW5nZXMsDQo+ICZBY3R1YWxNZW1vcnlSYW5nZXNDb3VudCwgJkFj dHVhbFZhcmlhYmxlTXRyclVzYWdlDQo+IA0KPiArICAgICAgKTsNCj4gDQo+ICsgICAgVVRfTE9H X0lORk8gKCItLS0gQWN0dWFsIE1lbW9yeSBSYW5nZXMgWyVkXSAtLS0NCj4gXG4iLCBBY3R1YWxN ZW1vcnlSYW5nZXNDb3VudCk7DQo+IA0KPiArICAgIER1bXBNZW1vcnlSYW5nZXMgKEFjdHVhbE1l bW9yeVJhbmdlcywNCj4gQWN0dWFsTWVtb3J5UmFuZ2VzQ291bnQpOw0KPiANCj4gKyAgICBWZXJp ZnlNZW1vcnlSYW5nZXMgKEV4cGVjdGVkTWVtb3J5UmFuZ2VzLA0KPiBFeHBlY3RlZE1lbW9yeVJh bmdlc0NvdW50LCBBY3R1YWxNZW1vcnlSYW5nZXMsDQo+IEFjdHVhbE1lbW9yeVJhbmdlc0NvdW50 KTsNCj4gDQo+ICsgICAgVVRfQVNTRVJUX1RSVUUgKEV4cGVjdGVkVmFyaWFibGVNdHJyVXNhZ2Ug Pj0NCj4gQWN0dWFsVmFyaWFibGVNdHJyVXNhZ2UpOw0KPiANCj4gKw0KPiANCj4gKyAgICBaZXJv TWVtICgmTG9jYWxNdHJycywgc2l6ZW9mIChMb2NhbE10cnJzKSk7DQo+IA0KPiArICB9DQo+IA0K PiArDQo+IA0KPiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gDQo+ICt9DQo+IA0KPiAr DQo+IA0KPiArDQo+IA0KPiArLyoqDQo+IA0KPiArICBQcmVwIHJvdXRpbmUgZm9yDQo+IFVuaXRU ZXN0R2V0RmlybXdhcmVWYXJpYWJsZU10cnJDb3VudCgpLg0KPiANCj4gKw0KPiANCj4gKyAgQHBh cmFtIENvbnRleHQgIFBvaW50IHRvIGEgVUlOVDMyIGRhdGEgdG8gc2F2ZSB0aGUNCj4gUGNkQ3B1 TnVtYmVyT2ZSZXNlcnZlZFZhcmlhYmxlTXRycnMuDQo+IA0KPiArKiovDQo+IA0KPiArVU5JVF9U RVNUX1NUQVRVUw0KPiANCj4gK0VGSUFQSQ0KPiANCj4gK1NhdmVQY2RWYWx1ZSAoDQo+IA0KPiAr ICBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4dA0KPiANCj4gKyAgKQ0KPiANCj4gK3sNCj4gDQo+ ICsgIE1UUlJfTElCX0dFVF9GSVJNV0FSRV9WQVJJQUJMRV9NVFJSX0NPVU5UX0NPTlRFWFQNCj4g KkxvY2FsQ29udGV4dDsNCj4gDQo+ICsNCj4gDQo+ICsgIExvY2FsQ29udGV4dCA9DQo+IChNVFJS X0xJQl9HRVRfRklSTVdBUkVfVkFSSUFCTEVfTVRSUl9DT1VOVF9DT05URVhUICopDQo+IENvbnRl eHQ7DQo+IA0KPiArICBMb2NhbENvbnRleHQtPk51bWJlck9mUmVzZXJ2ZWRWYXJpYWJsZU10cnJz ID0NCj4gUGF0Y2hQY2RHZXQzMiAoUGNkQ3B1TnVtYmVyT2ZSZXNlcnZlZFZhcmlhYmxlTXRycnMp Ow0KPiANCj4gKyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNTRUQ7DQo+IA0KPiArfQ0KPiANCj4gKw0K PiANCj4gKy8qKg0KPiANCj4gKyAgQ2xlYW4gdXAgcm91dGluZSBmb3INCj4gVW5pdFRlc3RHZXRG aXJtd2FyZVZhcmlhYmxlTXRyckNvdW50KCkuDQo+IA0KPiArDQo+IA0KPiArICBAcGFyYW0gQ29u dGV4dCAgUG9pbnQgdG8gYSBVSU5UMzIgZGF0YSB0byBzYXZlIHRoZQ0KPiBQY2RDcHVOdW1iZXJP ZlJlc2VydmVkVmFyaWFibGVNdHJycy4NCj4gDQo+ICsqKi8NCj4gDQo+ICtVTklUX1RFU1RfU1RB VFVTDQo+IA0KPiArRUZJQVBJDQo+IA0KPiArUmVzdG9yZVBjZFZhbHVlICgNCj4gDQo+ICsgIFVO SVRfVEVTVF9DT05URVhUICBDb250ZXh0DQo+IA0KPiArICApDQo+IA0KPiArew0KPiANCj4gKyAg TVRSUl9MSUJfR0VUX0ZJUk1XQVJFX1ZBUklBQkxFX01UUlJfQ09VTlRfQ09OVEVYVA0KPiAqTG9j YWxDb250ZXh0Ow0KPiANCj4gKw0KPiANCj4gKyAgTG9jYWxDb250ZXh0ID0NCj4gKE1UUlJfTElC X0dFVF9GSVJNV0FSRV9WQVJJQUJMRV9NVFJSX0NPVU5UX0NPTlRFWFQgKikNCj4gQ29udGV4dDsN Cj4gDQo+ICsgIFBhdGNoUGNkU2V0MzIgKFBjZENwdU51bWJlck9mUmVzZXJ2ZWRWYXJpYWJsZU10 cnJzLA0KPiBMb2NhbENvbnRleHQtPk51bWJlck9mUmVzZXJ2ZWRWYXJpYWJsZU10cnJzKTsNCj4g DQo+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiANCj4gK30NCj4gDQo+ICsNCj4gDQo+ ICsvKioNCj4gDQo+ICsgIEluaXRpYWxpemUgdGhlIHVuaXQgdGVzdCBmcmFtZXdvcmssIHN1aXRl LCBhbmQgdW5pdA0KPiB0ZXN0cyBmb3IgdGhlDQo+IA0KPiArICBSZXNldFN5c3RlbUxpYiBhbmQg cnVuIHRoZSBSZXNldFN5c3RlbUxpYiB1bml0IHRlc3QuDQo+IA0KPiArDQo+IA0KPiArICBAcGFy YW0gSXRlcmF0aW9uICAgICAgICAgICAgICAgSXRlcmF0aW9uIG9mIHRlc3RpbmcNCj4gTXRyclNl dE1lbW9yeUF0dHJpYnV0ZUluTXRyclNldHRpbmdzDQo+IA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYW5kDQo+IE10cnJTZXRNZW1vcnlBdHRyaWJ1dGVzSW5NdHJyU2V0dGlu Z3MgdXNpbmcgcmFuZG9tDQo+IGlucHV0cy4NCj4gDQo+ICsNCj4gDQo+ICsgIEByZXR2YWwgIEVG SV9TVUNDRVNTICAgICAgICAgICBBbGwgdGVzdCBjYXNlcyB3ZXJlDQo+IGRpc3BhdGNoZWQuDQo+ IA0KPiArICBAcmV0dmFsICBFRklfT1VUX09GX1JFU09VUkNFUyAgVGhlcmUgYXJlIG5vdCBlbm91 Z2gNCj4gcmVzb3VyY2VzIGF2YWlsYWJsZSB0bw0KPiANCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGluaXRpYWxpemUgdGhlIHVuaXQNCj4gdGVzdHMuDQo+IA0KPiArKiovDQo+ IA0KPiArU1RBVElDDQo+IA0KPiArRUZJX1NUQVRVUw0KPiANCj4gK0VGSUFQSQ0KPiANCj4gK1Vu aXRUZXN0aW5nRW50cnkgKA0KPiANCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgIEl0 ZXJhdGlvbg0KPiANCj4gKyAgKQ0KPiANCj4gK3sNCj4gDQo+ICsgIEVGSV9TVEFUVVMNCj4gU3Rh dHVzOw0KPiANCj4gKyAgVU5JVF9URVNUX0ZSQU1FV09SS19IQU5ETEUNCj4gRnJhbWV3b3JrOw0K PiANCj4gKyAgVU5JVF9URVNUX1NVSVRFX0hBTkRMRQ0KPiBNdHJyQXBpVGVzdHM7DQo+IA0KPiAr ICBVSU5UTg0KPiBJbmRleDsNCj4gDQo+ICsgIFVJTlRODQo+IFN5c3RlbUluZGV4Ow0KPiANCj4g KyAgTVRSUl9MSUJfVEVTVF9DT05URVhUDQo+IENvbnRleHQ7DQo+IA0KPiArICBNVFJSX0xJQl9H RVRfRklSTVdBUkVfVkFSSUFCTEVfTVRSUl9DT1VOVF9DT05URVhUDQo+IEdldEZpcm13YXJlVmFy aWFibGVNdHJyQ291bnRDb250ZXh0Ow0KPiANCj4gKw0KPiANCj4gKyAgQ29udGV4dC5TeXN0ZW1Q YXJhbWV0ZXINCj4gPSAmbURlZmF1bHRTeXN0ZW1QYXJhbWV0ZXI7DQo+IA0KPiArICBHZXRGaXJt d2FyZVZhcmlhYmxlTXRyckNvdW50Q29udGV4dC5TeXN0ZW1QYXJhbWV0ZXINCj4gPSAmbURlZmF1 bHRTeXN0ZW1QYXJhbWV0ZXI7DQo+IA0KPiArICBGcmFtZXdvcmsgPSBOVUxMOw0KPiANCj4gKw0K PiANCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiJWEgdiVhXG4iLCBVTklUX1RFU1RfQVBQX05B TUUsDQo+IFVOSVRfVEVTVF9BUFBfVkVSU0lPTikpOw0KPiANCj4gKw0KPiANCj4gKyAgLy8NCj4g DQo+ICsgIC8vIFNldHVwIHRoZSB0ZXN0IGZyYW1ld29yayBmb3IgcnVubmluZyB0aGUgdGVzdHMu DQo+IA0KPiArICAvLw0KPiANCj4gKyAgU3RhdHVzID0gSW5pdFVuaXRUZXN0RnJhbWV3b3JrICgm RnJhbWV3b3JrLA0KPiBVTklUX1RFU1RfQVBQX05BTUUsIGdFZmlDYWxsZXJCYXNlTmFtZSwNCj4g VU5JVF9URVNUX0FQUF9WRVJTSU9OKTsNCj4gDQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gDQo+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkZhaWxlZCBpbg0KPiBJbml0VW5p dFRlc3RGcmFtZXdvcmsuIFN0YXR1cyA9ICVyXG4iLCBTdGF0dXMpKTsNCj4gDQo+ICsgICAgZ290 byBFWElUOw0KPiANCj4gKyAgfQ0KPiANCj4gKw0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIC8vIC0t LS0tLS0tLS0tLS0tU3VpdGUtLS0tLS0tLS0tLURlc2NyaXB0aW9uLS0tLS0tLS0NCj4gLS0tLS0t TmFtZS0tLS0tLS0tLS1GdW5jdGlvbi0tLS0tLS0tUHJlLS0tUG9zdC0tLS0tLS0tLQ0KPiAtLS0t LS0tLS0tQ29udGV4dC0tLS0tLS0tLS0tDQo+IA0KPiArICAvLw0KPiANCj4gKw0KPiANCj4gKyAg Ly8NCj4gDQo+ICsgIC8vIFBvcHVsYXRlIHRoZSBNdHJyTGliIEFQSSBVbml0IFRlc3QgU3VpdGUu DQo+IA0KPiArICAvLw0KPiANCj4gKyAgU3RhdHVzID0gQ3JlYXRlVW5pdFRlc3RTdWl0ZSAoJk10 cnJBcGlUZXN0cywNCj4gRnJhbWV3b3JrLCAiTXRyckxpYiBBUEkgVGVzdHMiLCAiTXRyckxpYi5N dHJyTGliIiwNCj4gTlVMTCwgTlVMTCk7DQo+IA0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+IA0KPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICJGYWlsZWQgaW4NCj4gQ3JlYXRl VW5pdFRlc3RTdWl0ZSBmb3IgTXRyckxpYiBBUEkgVGVzdHNcbiIpKTsNCj4gDQo+ICsgICAgU3Rh dHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+IA0KPiArICAgIGdvdG8gRVhJVDsNCj4gDQo+ ICsgIH0NCj4gDQo+ICsgIEFkZFRlc3RDYXNlIChNdHJyQXBpVGVzdHMsICJUZXN0IElzTXRyclN1 cHBvcnRlZCIsDQo+ICJNdHJyU3VwcG9ydGVkIiwNCj4gVW5pdFRlc3RJc010cnJTdXBwb3J0ZWQs ICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+IE5VTEwsICZDb250ZXh0KTsNCj4gDQo+ICsg IEFkZFRlc3RDYXNlIChNdHJyQXBpVGVzdHMsICJUZXN0DQo+IEdldFZhcmlhYmxlTXRyckNvdW50 IiwNCj4gIkdldFZhcmlhYmxlTXRyckNvdW50IiwNCj4gVW5pdFRlc3RHZXRWYXJpYWJsZU10cnJD b3VudCwgICAgICAgICAgICAgICAgIE5VTEwsDQo+IE5VTEwsICZDb250ZXh0KTsNCj4gDQo+ICsg IEFkZFRlc3RDYXNlIChNdHJyQXBpVGVzdHMsICJUZXN0DQo+IEdldEZpcm13YXJlVmFyaWFibGVN dHJyQ291bnQiLA0KPiAiR2V0RmlybXdhcmVWYXJpYWJsZU10cnJDb3VudCIsDQo+IFVuaXRUZXN0 R2V0RmlybXdhcmVWYXJpYWJsZU10cnJDb3VudCwNCj4gU2F2ZVBjZFZhbHVlLCBSZXN0b3JlUGNk VmFsdWUsDQo+ICZHZXRGaXJtd2FyZVZhcmlhYmxlTXRyckNvdW50Q29udGV4dCk7DQo+IA0KPiAr ICBBZGRUZXN0Q2FzZSAoTXRyckFwaVRlc3RzLCAiVGVzdA0KPiBNdHJyR2V0TWVtb3J5QXR0cmli dXRlIiwNCj4gIk10cnJHZXRNZW1vcnlBdHRyaWJ1dGUiLA0KPiBVbml0VGVzdE10cnJHZXRNZW1v cnlBdHRyaWJ1dGUsICAgICAgICAgICAgICAgTlVMTCwNCj4gTlVMTCwgJkNvbnRleHQpOw0KPiAN Cj4gKyAgQWRkVGVzdENhc2UgKE10cnJBcGlUZXN0cywgIlRlc3QgTXRyckdldEZpeGVkTXRyciIs DQo+ICJNdHJyR2V0Rml4ZWRNdHJyIiwNCj4gVW5pdFRlc3RNdHJyR2V0Rml4ZWRNdHJyLCAgICAg ICAgICAgICAgICAgICAgIE5VTEwsDQo+IE5VTEwsICZDb250ZXh0KTsNCj4gDQo+ICsgIEFkZFRl c3RDYXNlIChNdHJyQXBpVGVzdHMsICJUZXN0IE10cnJHZXRBbGxNdHJycyIsDQo+ICJNdHJyR2V0 QWxsTXRycnMiLA0KPiBVbml0VGVzdE10cnJHZXRBbGxNdHJycywgICAgICAgICAgICAgICAgICAg ICAgTlVMTCwNCj4gTlVMTCwgJkNvbnRleHQpOw0KPiANCj4gKyAgQWRkVGVzdENhc2UgKE10cnJB cGlUZXN0cywgIlRlc3QgTXRyclNldEFsbE10cnJzIiwNCj4gIk10cnJTZXRBbGxNdHJycyIsDQo+ IFVuaXRUZXN0TXRyclNldEFsbE10cnJzLCAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiBO VUxMLCAmQ29udGV4dCk7DQo+IA0KPiArICBBZGRUZXN0Q2FzZSAoTXRyckFwaVRlc3RzLCAiVGVz dA0KPiBNdHJyR2V0TWVtb3J5QXR0cmlidXRlSW5WYXJpYWJsZU10cnIiLA0KPiAiTXRyckdldE1l bW9yeUF0dHJpYnV0ZUluVmFyaWFibGVNdHJyIiwNCj4gVW5pdFRlc3RNdHJyR2V0TWVtb3J5QXR0 cmlidXRlSW5WYXJpYWJsZU10cnIsIE5VTEwsDQo+IE5VTEwsICZDb250ZXh0KTsNCj4gDQo+ICsg IEFkZFRlc3RDYXNlIChNdHJyQXBpVGVzdHMsICJUZXN0DQo+IE10cnJEZWJ1Z1ByaW50QWxsTXRy cnMiLA0KPiAiTXRyckRlYnVnUHJpbnRBbGxNdHJycyIsDQo+IFVuaXRUZXN0TXRyckRlYnVnUHJp bnRBbGxNdHJycywgICAgICAgICAgICAgICBOVUxMLA0KPiBOVUxMLCAmQ29udGV4dCk7DQo+IA0K PiArICBBZGRUZXN0Q2FzZSAoTXRyckFwaVRlc3RzLCAiVGVzdA0KPiBNdHJyR2V0RGVmYXVsdE1l bW9yeVR5cGUiLA0KPiAiTXRyckdldERlZmF1bHRNZW1vcnlUeXBlIiwNCj4gVW5pdFRlc3RNdHJy R2V0RGVmYXVsdE1lbW9yeVR5cGUsICAgICAgICAgICAgIE5VTEwsDQo+IE5VTEwsICZDb250ZXh0 KTsNCj4gDQo+ICsNCj4gDQo+ICsgIGZvciAoU3lzdGVtSW5kZXggPSAwOyBTeXN0ZW1JbmRleCA8 IEFSUkFZX1NJWkUNCj4gKG1TeXN0ZW1QYXJhbWV0ZXJzKTsgU3lzdGVtSW5kZXgrKykgew0KPiAN Cj4gKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBJdGVyYXRpb247IEluZGV4KyspIHsNCj4g DQo+ICsgICAgICBBZGRUZXN0Q2FzZSAoTXRyckFwaVRlc3RzLCAiVGVzdA0KPiBJbnZhbGlkTWVt b3J5TGF5b3V0cyIsDQo+ICJJbnZhbGlkTWVtb3J5TGF5b3V0cyIsDQo+IFVuaXRUZXN0SW52YWxp ZE1lbW9yeUxheW91dHMsDQo+IEluaXRpYWxpemVNdHJyUmVncywgTlVMTCwNCj4gJm1TeXN0ZW1Q YXJhbWV0ZXJzW1N5c3RlbUluZGV4XSk7DQo+IA0KPiArICAgICAgQWRkVGVzdENhc2UgKE10cnJB cGlUZXN0cywgIlRlc3QNCj4gTXRyclNldE1lbW9yeUF0dHJpYnV0ZUluTXRyclNldHRpbmdzIiwN Cj4gIk10cnJTZXRNZW1vcnlBdHRyaWJ1dGVJbk10cnJTZXR0aW5ncyIsDQo+IFVuaXRUZXN0TXRy clNldE1lbW9yeUF0dHJpYnV0ZUluTXRyclNldHRpbmdzLA0KPiBJbml0aWFsaXplTXRyclJlZ3Ms IE5VTEwsDQo+ICZtU3lzdGVtUGFyYW1ldGVyc1tTeXN0ZW1JbmRleF0pOw0KPiANCj4gKyAgICAg IEFkZFRlc3RDYXNlIChNdHJyQXBpVGVzdHMsICJUZXN0DQo+IE10cnJTZXRNZW1vcnlBdHRyaWJ1 dGVzSW5NdHJyU2V0dGluZ3MiLA0KPiAiTXRyclNldE1lbW9yeUF0dHJpYnV0ZXNJbk10cnJTZXR0 aW5ncyIsDQo+IFVuaXRUZXN0TXRyclNldE1lbW9yeUF0dHJpYnV0ZXNJbk10cnJTZXR0aW5ncywN Cj4gSW5pdGlhbGl6ZU10cnJSZWdzLCBOVUxMLA0KPiAmbVN5c3RlbVBhcmFtZXRlcnNbU3lzdGVt SW5kZXhdKTsNCj4gDQo+ICsgICAgfQ0KPiANCj4gKyAgfQ0KPiANCj4gKyAgLy8NCj4gDQo+ICsg IC8vIEV4ZWN1dGUgdGhlIHRlc3RzLg0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIHNyYW5kICgodW5z aWduZWQgaW50KSB0aW1lIChOVUxMKSk7DQo+IA0KPiArICBTdGF0dXMgPSBSdW5BbGxUZXN0U3Vp dGVzIChGcmFtZXdvcmspOw0KPiANCj4gKw0KPiANCj4gK0VYSVQ6DQo+IA0KPiArICBpZiAoRnJh bWV3b3JrICE9IE5VTEwpIHsNCj4gDQo+ICsgICAgRnJlZVVuaXRUZXN0RnJhbWV3b3JrIChGcmFt ZXdvcmspOw0KPiANCj4gKyAgfQ0KPiANCj4gKw0KPiANCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4g DQo+ICt9DQo+IA0KPiArDQo+IA0KPiArLyoqDQo+IA0KPiArICBTdGFuZGFyZCBQT1NJWCBDIGVu dHJ5IHBvaW50IGZvciBob3N0IGJhc2VkIHVuaXQNCj4gdGVzdCBleGVjdXRpb24uDQo+IA0KPiAr DQo+IA0KPiArICBAcGFyYW0gQXJnYyAgTnVtYmVyIG9mIGFyZ3VtZW50cy4NCj4gDQo+ICsgIEBw YXJhbSBBcmd2ICBBcnJheSBvZiBhcmd1bWVudHMuDQo+IA0KPiArDQo+IA0KPiArICBAcmV0dXJu IFRlc3QgYXBwbGljYXRpb24gZXhpdCBjb2RlLg0KPiANCj4gKyoqLw0KPiANCj4gK0lOVDMyDQo+ IA0KPiArbWFpbiAoDQo+IA0KPiArICBJTlQzMiBBcmdjLA0KPiANCj4gKyAgQ0hBUjggKkFyZ3Zb XQ0KPiANCj4gKyAgKQ0KPiANCj4gK3sNCj4gDQo+ICsgIFVJTlROICAgIEl0ZXJhdGlvbjsNCj4g DQo+ICsNCj4gDQo+ICsgIC8vDQo+IA0KPiArICAvLyBGaXJzdCBwYXJhbWV0ZXIgc3BlY2lmaWVz IHRoZSB0ZXN0IGl0ZXJhdGlvbnMuDQo+IA0KPiArICAvLyBEZWZhdWx0IGlzIDEwLg0KPiANCj4g KyAgLy8NCj4gDQo+ICsgIEl0ZXJhdGlvbiA9IDEwOw0KPiANCj4gKyAgaWYgKEFyZ2MgPT0gMikg ew0KPiANCj4gKyAgICBJdGVyYXRpb24gPSBhdG9pIChBcmd2WzFdKTsNCj4gDQo+ICsgIH0NCj4g DQo+ICsgIHJldHVybiBVbml0VGVzdGluZ0VudHJ5IChJdGVyYXRpb24pOw0KPiANCj4gK30NCj4g DQo+IGRpZmYgLS1naXQNCj4gYS9VZWZpQ3B1UGtnL0xpYnJhcnkvTXRyckxpYi9Vbml0VGVzdC9N dHJyTGliVW5pdFRlc3QuaA0KPiBiL1VlZmlDcHVQa2cvTGlicmFyeS9NdHJyTGliL1VuaXRUZXN0 L010cnJMaWJVbml0VGVzdC5oDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAw MDAwMDAuLjI1ZDQyNjk1ODkNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysNCj4gYi9VZWZpQ3B1UGtn L0xpYnJhcnkvTXRyckxpYi9Vbml0VGVzdC9NdHJyTGliVW5pdFRlc3QuaA0KPiBAQCAtMCwwICsx LDE3MSBAQA0KPiArLyoqIEBmaWxlDQo+IA0KPiArDQo+IA0KPiArICBDb3B5cmlnaHQgKGMpIDIw MjAsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzDQo+IHJlc2VydmVkLjxCUj4NCj4gDQo+ ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+IA0KPiAr DQo+IA0KPiArKiovDQo+IA0KPiArDQo+IA0KPiArI2lmbmRlZiBfTVRSUl9TVVBQT1JUX0hfDQo+ IA0KPiArI2RlZmluZSBfTVRSUl9TVVBQT1JUX0hfDQo+IA0KPiArDQo+IA0KPiArI2luY2x1ZGUg PHN0ZGlvLmg+DQo+IA0KPiArI2luY2x1ZGUgPHN0ZGxpYi5oPg0KPiANCj4gKyNpbmNsdWRlIDxz dHJpbmcuaD4NCj4gDQo+ICsjaW5jbHVkZSA8c3RkYXJnLmg+DQo+IA0KPiArI2luY2x1ZGUgPHN0 ZGRlZi5oPg0KPiANCj4gKyNpbmNsdWRlIDxzZXRqbXAuaD4NCj4gDQo+ICsjaW5jbHVkZSA8Y21v Y2thLmg+DQo+IA0KPiArI2luY2x1ZGUgPHRpbWUuaD4NCj4gDQo+ICsNCj4gDQo+ICsjaW5jbHVk ZSA8VWVmaS5oPg0KPiANCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VMaWIuaD4NCj4gDQo+ICsj aW5jbHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQo+IA0KPiArI2luY2x1ZGUgPExpYnJh cnkvRGVidWdMaWIuaD4NCj4gDQo+ICsjaW5jbHVkZSA8TGlicmFyeS9Vbml0VGVzdExpYi5oPg0K PiANCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L010cnJMaWIuaD4NCj4gDQo+ICsjaW5jbHVkZSA8TGli cmFyeS9Vbml0VGVzdEhvc3RCYXNlTGliLmg+DQo+IA0KPiArDQo+IA0KPiArI2luY2x1ZGUgPFJl Z2lzdGVyL0FyY2hpdGVjdHVyYWxNc3IuaD4NCj4gDQo+ICsjaW5jbHVkZSA8UmVnaXN0ZXIvQ3B1 aWQuaD4NCj4gDQo+ICsjaW5jbHVkZSA8UmVnaXN0ZXIvTXNyLmg+DQo+IA0KPiArDQo+IA0KPiAr I2RlZmluZSBVTklUX1RFU1RfQVBQX05BTUUgICAgICAgICJNdHJyTGliIFVuaXQgVGVzdHMiDQo+ IA0KPiArI2RlZmluZSBVTklUX1RFU1RfQVBQX1ZFUlNJT04gICAgICIxLjAiDQo+IA0KPiArDQo+ IA0KPiArI2RlZmluZSBTQ1JBVENIX0JVRkZFUl9TSVpFICAgICAgIFNJWkVfMTZLQg0KPiANCj4g Kw0KPiANCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gDQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAg ICAgUGh5c2ljYWxBZGRyZXNzQml0czsNCj4gDQo+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAg TXRyclN1cHBvcnRlZDsNCj4gDQo+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgRml4ZWRNdHJy U3VwcG9ydGVkOw0KPiANCj4gKyAgTVRSUl9NRU1PUllfQ0FDSEVfVFlQRSBEZWZhdWx0Q2FjaGVU eXBlOw0KPiANCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICBWYXJpYWJsZU10cnJDb3VudDsN Cj4gDQo+ICt9IE1UUlJfTElCX1NZU1RFTV9QQVJBTUVURVI7DQo+IA0KPiArDQo+IA0KPiArZXh0 ZXJuIFVJTlQzMg0KPiBtRml4ZWRNdHJyc0luZGV4W107DQo+IA0KPiArDQo+IA0KPiArLyoqDQo+ IA0KPiArICBJbml0aWFsaXplIHRoZSBNVFJSIHJlZ2lzdGVycy4NCj4gDQo+ICsNCj4gDQo+ICsg IEBwYXJhbSBTeXN0ZW1QYXJhbWV0ZXIgU3lzdGVtIHBhcmFtZXRlciB0aGF0DQo+IGNvbnRyb2xz IHRoZSBNVFJSIHJlZ2lzdGVycyBpbml0aWFsaXphdGlvbi4NCj4gDQo+ICsqKi8NCj4gDQo+ICtV TklUX1RFU1RfU1RBVFVTDQo+IA0KPiArRUZJQVBJDQo+IA0KPiArSW5pdGlhbGl6ZU10cnJSZWdz ICgNCj4gDQo+ICsgIElOIE1UUlJfTElCX1NZU1RFTV9QQVJBTUVURVIgICpTeXN0ZW1QYXJhbWV0 ZXINCj4gDQo+ICsgICk7DQo+IA0KPiArDQo+IA0KPiArLyoqDQo+IA0KPiArICBSZXR1cm4gYSBy YW5kb20gbWVtb3J5IGNhY2hlIHR5cGUuDQo+IA0KPiArKiovDQo+IA0KPiArTVRSUl9NRU1PUllf Q0FDSEVfVFlQRQ0KPiANCj4gK0dlbmVyYXRlUmFuZG9tQ2FjaGVUeXBlICgNCj4gDQo+ICsgIFZP SUQNCj4gDQo+ICsgICk7DQo+IA0KPiArDQo+IA0KPiArLyoqDQo+IA0KPiArICBHZW5lcmF0ZSBy YW5kb20gTVRSUnMuDQo+IA0KPiArDQo+IA0KPiArICBAcGFyYW0gUGh5c2ljYWxBZGRyZXNzQml0 cyAgUGh5c2ljYWwgYWRkcmVzcyBiaXRzLg0KPiANCj4gKyAgQHBhcmFtIFJhd01lbW9yeVJhbmdl cyAgICAgIFJldHVybiB0aGUgcmFuZG9tbHkNCj4gZ2VuZXJhdGVkIE1UUlJzLg0KPiANCj4gKyAg QHBhcmFtIFVjQ291bnQgICAgICAgICAgICAgIENvdW50IG9mIFVuY2FjaGVhYmxlDQo+IE1UUlJz Lg0KPiANCj4gKyAgQHBhcmFtIFd0Q291bnQgICAgICAgICAgICAgIENvdW50IG9mIFdyaXRlIFRo cm91Z2gNCj4gTVRSUnMuDQo+IA0KPiArICBAcGFyYW0gV2JDb3VudCAgICAgICAgICAgICAgQ291 bnQgb2YgV3JpdGUgQmFjaw0KPiBNVFJScy4NCj4gDQo+ICsgIEBwYXJhbSBXcENvdW50ICAgICAg ICAgICAgICBDb3VudCBvZiBXcml0ZSBQcm90ZWN0ZWQNCj4gTVRSUnMuDQo+IA0KPiArICBAcGFy YW0gV2NDb3VudCAgICAgICAgICAgICAgQ291bnQgb2YgV3JpdGUgQ29tYmluaW5nDQo+IE1UUlJz Lg0KPiANCj4gKyoqLw0KPiANCj4gK1ZPSUQNCj4gDQo+ICtHZW5lcmF0ZVZhbGlkQW5kQ29uZmln dXJhYmxlTXRyclBhaXJzICgNCj4gDQo+ICsgIElOICAgICBVSU5UMzINCj4gUGh5c2ljYWxBZGRy ZXNzQml0cywNCj4gDQo+ICsgIElOIE9VVCBNVFJSX01FTU9SWV9SQU5HRSAgICAgICAgICpSYXdN ZW1vcnlSYW5nZXMsDQo+IA0KPiArICBJTiAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBV Y0NvdW50LA0KPiANCj4gKyAgSU4gICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgV3RDb3Vu dCwNCj4gDQo+ICsgIElOICAgICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIFdiQ291bnQsDQo+ IA0KPiArICBJTiAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBXcENvdW50LA0KPiANCj4g KyAgSU4gICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgV2NDb3VudA0KPiANCj4gKyAgKTsN Cj4gDQo+ICsNCj4gDQo+ICsvKioNCj4gDQo+ICsgIENvbnZlcnQgdGhlIE1UUlIgQkFTRS9NQVNL IGFycmF5IHRvIG1lbW9yeSByYW5nZXMuDQo+IA0KPiArDQo+IA0KPiArICBAcGFyYW0gRGVmYXVs dFR5cGUgICAgICAgICAgRGVmYXVsdCBtZW1vcnkgdHlwZS4NCj4gDQo+ICsgIEBwYXJhbSBQaHlz aWNhbEFkZHJlc3NCaXRzICBQaHlzaWNhbCBhZGRyZXNzIGJpdHMuDQo+IA0KPiArICBAcGFyYW0g UmF3TWVtb3J5UmFuZ2VzICAgICAgUmF3IG1lbW9yeSByYW5nZXMuDQo+IA0KPiArICBAcGFyYW0g UmF3TWVtb3J5UmFuZ2VDb3VudCAgQ291bnQgb2YgcmF3IG1lbW9yeQ0KPiByYW5nZXMuDQo+IA0K PiArICBAcGFyYW0gTWVtb3J5UmFuZ2VzICAgICAgICAgTWVtb3J5IHJhbmdlcy4NCj4gDQo+ICsg IEBwYXJhbSBNZW1vcnlSYW5nZUNvdW50ICAgICBDb3VudCBvZiBtZW1vcnkgcmFuZ2VzLg0KPiAN Cj4gKyoqLw0KPiANCj4gK1ZPSUQNCj4gDQo+ICtHZXRFZmZlY3RpdmVNZW1vcnlSYW5nZXMgKA0K PiANCj4gKyAgSU4gTVRSUl9NRU1PUllfQ0FDSEVfVFlQRSBEZWZhdWx0VHlwZSwNCj4gDQo+ICsg IElOIFVJTlQzMiAgICAgICAgICAgICAgICAgUGh5c2ljYWxBZGRyZXNzQml0cywNCj4gDQo+ICsg IElOIE1UUlJfTUVNT1JZX1JBTkdFICAgICAgKlJhd01lbW9yeVJhbmdlcywNCj4gDQo+ICsgIElO IFVJTlQzMiAgICAgICAgICAgICAgICAgUmF3TWVtb3J5UmFuZ2VDb3VudCwNCj4gDQo+ICsgIE9V VCBNVFJSX01FTU9SWV9SQU5HRSAgICAgKk1lbW9yeVJhbmdlcywNCj4gDQo+ICsgIE9VVCBVSU5U TiAgICAgICAgICAgICAgICAgKk1lbW9yeVJhbmdlQ291bnQNCj4gDQo+ICsgICk7DQo+IA0KPiAr DQo+IA0KPiArLyoqDQo+IA0KPiArICBHZW5lcmF0ZSByYW5kb20gTVRSUiBCQVNFL01BU0sgZm9y IGEgc3BlY2lmaWVkIHR5cGUuDQo+IA0KPiArDQo+IA0KPiArICBAcGFyYW0gUGh5c2ljYWxBZGRy ZXNzQml0cyBQaHlzaWNhbCBhZGRyZXNzIGJpdHMuDQo+IA0KPiArICBAcGFyYW0gQ2FjaGVUeXBl ICAgICAgICAgICBDYWNoZSB0eXBlLg0KPiANCj4gKyAgQHBhcmFtIE10cnJQYWlyICAgICAgICAg ICAgUmV0dXJuIHRoZSByYW5kb20gTVRSUi4NCj4gDQo+ICsgIEBwYXJhbSBNdHJyTWVtb3J5UmFu Z2UgICAgIFJldHVybiB0aGUgcmFuZG9tIG1lbW9yeQ0KPiByYW5nZS4NCj4gDQo+ICsqKi8NCj4g DQo+ICtWT0lEDQo+IA0KPiArR2VuZXJhdGVSYW5kb21NdHJyUGFpciAoDQo+IA0KPiArICBJTiAg VUlOVDMyICAgICAgICAgICAgICAgICBQaHlzaWNhbEFkZHJlc3NCaXRzLA0KPiANCj4gKyAgSU4g IE1UUlJfTUVNT1JZX0NBQ0hFX1RZUEUgQ2FjaGVUeXBlLA0KPiANCj4gKyAgT1VUIE1UUlJfVkFS SUFCTEVfU0VUVElORyAgKk10cnJQYWlyLCAgICAgICBPUFRJT05BTA0KPiANCj4gKyAgT1VUIE1U UlJfTUVNT1JZX1JBTkdFICAgICAgKk10cnJNZW1vcnlSYW5nZSBPUFRJT05BTA0KPiANCj4gKyAg KTsNCj4gDQo+ICsNCj4gDQo+ICsvKioNCj4gDQo+ICsgIENvbGxlY3QgdGhlIHRlc3QgcmVzdWx0 Lg0KPiANCj4gKw0KPiANCj4gKyAgQHBhcmFtIERlZmF1bHRUeXBlICAgICAgICAgIERlZmF1bHQg bWVtb3J5IHR5cGUuDQo+IA0KPiArICBAcGFyYW0gUGh5c2ljYWxBZGRyZXNzQml0cyAgUGh5c2lj YWwgYWRkcmVzcyBiaXRzLg0KPiANCj4gKyAgQHBhcmFtIFZhcmlhYmxlTXRyckNvdW50ICAgIENv dW50IG9mIHZhcmlhYmxlIE1UUlJzLg0KPiANCj4gKyAgQHBhcmFtIE10cnJzICAgICAgICAgICAg ICAgIE1UUlIgc2V0dGluZ3MgdG8gY29sbGVjdA0KPiBmcm9tLg0KPiANCj4gKyAgQHBhcmFtIFJh bmdlcyAgICAgICAgICAgICAgIFJldHVybiB0aGUgbWVtb3J5DQo+IHJhbmdlcy4NCj4gDQo+ICsg IEBwYXJhbSBSYW5nZUNvdW50ICAgICAgICAgICBSZXR1cm4gdGhlIGNvdW50IG9mDQo+IG1lbW9y eSByYW5nZXMuDQo+IA0KPiArICBAcGFyYW0gTXRyckNvdW50ICAgICAgICAgICAgUmV0dXJuIHRo ZSBjb3VudCBvZg0KPiB2YXJpYWJsZSBNVFJScyBiZWluZyB1c2VkLg0KPiANCj4gKyoqLw0KPiAN Cj4gK1ZPSUQNCj4gDQo+ICtDb2xsZWN0VGVzdFJlc3VsdCAoDQo+IA0KPiArICBJTiAgICAgTVRS Ul9NRU1PUllfQ0FDSEVfVFlQRSBEZWZhdWx0VHlwZSwNCj4gDQo+ICsgIElOICAgICBVSU5UMzIg ICAgICAgICAgICAgICAgIFBoeXNpY2FsQWRkcmVzc0JpdHMsDQo+IA0KPiArICBJTiAgICAgVUlO VDMyICAgICAgICAgICAgICAgICBWYXJpYWJsZU10cnJDb3VudCwNCj4gDQo+ICsgIElOICAgICBN VFJSX1NFVFRJTkdTICAgICAgICAgICpNdHJycywNCj4gDQo+ICsgIE9VVCAgICBNVFJSX01FTU9S WV9SQU5HRSAgICAgICpSYW5nZXMsDQo+IA0KPiArICBJTiBPVVQgVUlOVE4gICAgICAgICAgICAg ICAgICAqUmFuZ2VDb3VudCwNCj4gDQo+ICsgIE9VVCAgICBVSU5UMzIgICAgICAgICAgICAgICAg ICpNdHJyQ291bnQNCj4gDQo+ICsgICk7DQo+IA0KPiArDQo+IA0KPiArLyoqDQo+IA0KPiArICBS ZXR1cm4gYSA2NGJpdCByYW5kb20gbnVtYmVyLg0KPiANCj4gKw0KPiANCj4gKyAgQHBhcmFtIFN0 YXJ0ICBTdGFydCBvZiB0aGUgcmFuZG9tIG51bWJlciByYW5nZS4NCj4gDQo+ICsgIEBwYXJhbSBM aW1pdCAgTGltaXQgb2YgdGhlIHJhbmRvbSBudW1iZXIgcmFuZ2UuDQo+IA0KPiArICBAcmV0dXJu IDY0Yml0IHJhbmRvbSBudW1iZXINCj4gDQo+ICsqKi8NCj4gDQo+ICtVSU5UNjQNCj4gDQo+ICtS YW5kb202NCAoDQo+IA0KPiArICBVSU5UNjQgIFN0YXJ0LA0KPiANCj4gKyAgVUlOVDY0ICBMaW1p dA0KPiANCj4gKyAgKTsNCj4gDQo+ICsNCj4gDQo+ICsvKioNCj4gDQo+ICsgIFJldHVybiBhIDMy Yml0IHJhbmRvbSBudW1iZXIuDQo+IA0KPiArDQo+IA0KPiArICBAcGFyYW0gU3RhcnQgIFN0YXJ0 IG9mIHRoZSByYW5kb20gbnVtYmVyIHJhbmdlLg0KPiANCj4gKyAgQHBhcmFtIExpbWl0ICBMaW1p dCBvZiB0aGUgcmFuZG9tIG51bWJlciByYW5nZS4NCj4gDQo+ICsgIEByZXR1cm4gMzJiaXQgcmFu ZG9tIG51bWJlcg0KPiANCj4gKyoqLw0KPiANCj4gK1VJTlQzMg0KPiANCj4gK1JhbmRvbTMyICgN Cj4gDQo+ICsgIFVJTlQzMiAgU3RhcnQsDQo+IA0KPiArICBVSU5UMzIgIExpbWl0DQo+IA0KPiAr ICApOw0KPiANCj4gKyNlbmRpZg0KPiANCj4gZGlmZiAtLWdpdA0KPiBhL1VlZmlDcHVQa2cvTGli cmFyeS9NdHJyTGliL1VuaXRUZXN0L010cnJMaWJVbml0VGVzdEhvDQo+IHN0LmluZg0KPiBiL1Vl ZmlDcHVQa2cvTGlicmFyeS9NdHJyTGliL1VuaXRUZXN0L010cnJMaWJVbml0VGVzdEhvDQo+IHN0 LmluZg0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi40NDcyMzhk YzgxDQo+IC0tLSAvZGV2L251bGwNCj4gKysrDQo+IGIvVWVmaUNwdVBrZy9MaWJyYXJ5L010cnJM aWIvVW5pdFRlc3QvTXRyckxpYlVuaXRUZXN0SG8NCj4gc3QuaW5mDQo+IEBAIC0wLDAgKzEsMzkg QEANCj4gKyMjIEBmaWxlDQo+IA0KPiArIyBVbml0IHRlc3RzIG9mIHRoZSBNdHJyTGliIGluc3Rh bmNlIG9mIHRoZSBNdHJyTGliDQo+IGNsYXNzDQo+IA0KPiArIw0KPiANCj4gKyMgQ29weXJpZ2h0 IChjKSAyMDIwLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cw0KPiByZXNlcnZlZC48QlI+ DQo+IA0KPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0K PiANCj4gKyMjDQo+IA0KPiArDQo+IA0KPiArW0RlZmluZXNdDQo+IA0KPiArICBJTkZfVkVSU0lP TiAgICAgICAgICAgICAgICAgICAgPSAweDAwMDEwMDA2DQo+IA0KPiArICBCQVNFX05BTUUgICAg ICAgICAgICAgICAgICAgICAgPSBNdHJyTGliVW5pdFRlc3RIb3N0DQo+IA0KPiArICBGSUxFX0dV SUQgICAgICAgICAgICAgICAgICAgICAgPSBBMTU0MkQ4NC1CNjRELTQ4NDctDQo+IDg4NUUtMDUw OTA4NDM3NkFCDQo+IA0KPiArICBNT0RVTEVfVFlQRSAgICAgICAgICAgICAgICAgICAgPSBIT1NU X0FQUExJQ0FUSU9ODQo+IA0KPiArICBWRVJTSU9OX1NUUklORyAgICAgICAgICAgICAgICAgPSAx LjANCj4gDQo+ICsNCj4gDQo+ICsjDQo+IA0KPiArIyBUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9u IGlzIGZvciByZWZlcmVuY2Ugb25seSBhbmQNCj4gbm90IHJlcXVpcmVkIGJ5IHRoZSBidWlsZCB0 b29scy4NCj4gDQo+ICsjDQo+IA0KPiArIyAgVkFMSURfQVJDSElURUNUVVJFUyAgICAgICAgICAg PSBJQTMyIFg2NA0KPiANCj4gKyMNCj4gDQo+ICsNCj4gDQo+ICtbU291cmNlc10NCj4gDQo+ICsg IE10cnJMaWJVbml0VGVzdC5jDQo+IA0KPiArICBNdHJyTGliVW5pdFRlc3QuaA0KPiANCj4gKyAg U3VwcG9ydC5jDQo+IA0KPiArDQo+IA0KPiArW1BhY2thZ2VzXQ0KPiANCj4gKyAgTWRlUGtnL01k ZVBrZy5kZWMNCj4gDQo+ICsgIFVlZmlDcHVQa2cvVWVmaUNwdVBrZy5kZWMNCj4gDQo+ICsgIFVu aXRUZXN0RnJhbWV3b3JrUGtnL1VuaXRUZXN0RnJhbWV3b3JrUGtnLmRlYw0KPiANCj4gKw0KPiAN Cj4gK1tMaWJyYXJ5Q2xhc3Nlc10NCj4gDQo+ICsgIEJhc2VMaWINCj4gDQo+ICsgIEJhc2VNZW1v cnlMaWINCj4gDQo+ICsgIERlYnVnTGliDQo+IA0KPiArICBNdHJyTGliDQo+IA0KPiArICBVbml0 VGVzdExpYg0KPiANCj4gKw0KPiANCj4gK1tQY2RdDQo+IA0KPiArDQo+IGdVZWZpQ3B1UGtnVG9r ZW5TcGFjZUd1aWQuUGNkQ3B1TnVtYmVyT2ZSZXNlcnZlZFZhcmlhYmwNCj4gZU10cnJzICAgIyMg U09NRVRJTUVTX0NPTlNVTUVTDQo+IA0KPiBkaWZmIC0tZ2l0DQo+IGEvVWVmaUNwdVBrZy9MaWJy YXJ5L010cnJMaWIvVW5pdFRlc3QvU3VwcG9ydC5jDQo+IGIvVWVmaUNwdVBrZy9MaWJyYXJ5L010 cnJMaWIvVW5pdFRlc3QvU3VwcG9ydC5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4 IDAwMDAwMDAwMDAuLjlmZTRiMDI3OGUNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9VZWZpQ3B1 UGtnL0xpYnJhcnkvTXRyckxpYi9Vbml0VGVzdC9TdXBwb3J0LmMNCj4gQEAgLTAsMCArMSw5MTMg QEANCj4gKy8qKiBAZmlsZQ0KPiANCj4gKyAgVW5pdCB0ZXN0cyBvZiB0aGUgTXRyckxpYiBpbnN0 YW5jZSBvZiB0aGUgTXRyckxpYg0KPiBjbGFzcw0KPiANCj4gKw0KPiANCj4gKyAgQ29weXJpZ2h0 IChjKSAyMDE4IC0gMjAyMCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbA0KPiByaWdodHMgcmVzZXJ2 ZWQuPEJSPg0KPiANCj4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1Q YXRlbnQNCj4gDQo+ICsNCj4gDQo+ICsqKi8NCj4gDQo+ICsNCj4gDQo+ICsjaW5jbHVkZSAiTXRy ckxpYlVuaXRUZXN0LmgiDQo+IA0KPiArDQo+IA0KPiArTVRSUl9NRU1PUllfQ0FDSEVfVFlQRSBt TWVtb3J5Q2FjaGVUeXBlc1tdID0gew0KPiANCj4gKyAgQ2FjaGVVbmNhY2hlYWJsZSwgQ2FjaGVX cml0ZUNvbWJpbmluZywNCj4gQ2FjaGVXcml0ZVRocm91Z2gsIENhY2hlV3JpdGVQcm90ZWN0ZWQs IENhY2hlV3JpdGVCYWNrDQo+IA0KPiArICB9Ow0KPiANCj4gKw0KPiANCj4gK1VJTlQ2NA0KPiBt Rml4ZWRNdHJyc1ZhbHVlW01UUlJfTlVNQkVSX09GX0ZJWEVEX01UUlJdOw0KPiANCj4gK01TUl9J QTMyX01UUlJfUEhZU0JBU0VfUkVHSVNURVINCj4gbVZhcmlhYmxlTXRycnNQaHlzQmFzZVtNVFJS X05VTUJFUl9PRl9WQVJJQUJMRV9NVFJSXTsNCj4gDQo+ICtNU1JfSUEzMl9NVFJSX1BIWVNNQVNL X1JFR0lTVEVSDQo+IG1WYXJpYWJsZU10cnJzUGh5c01hc2tbTVRSUl9OVU1CRVJfT0ZfVkFSSUFC TEVfTVRSUl07DQo+IA0KPiArTVNSX0lBMzJfTVRSUl9ERUZfVFlQRV9SRUdJU1RFUiAgbURlZlR5 cGVNc3I7DQo+IA0KPiArTVNSX0lBMzJfTVRSUkNBUF9SRUdJU1RFUiAgICAgICAgbU10cnJDYXBN c3I7DQo+IA0KPiArQ1BVSURfVkVSU0lPTl9JTkZPX0VEWCAgICAgICAgICAgbUNwdWlkVmVyc2lv bkluZm9FZHg7DQo+IA0KPiArQ1BVSURfVklSX1BIWV9BRERSRVNTX1NJWkVfRUFYDQo+IG1DcHVp ZFZpclBoeUFkZHJlc3NTaXplRWF4Ow0KPiANCj4gKw0KPiANCj4gKy8qKg0KPiANCj4gKyAgUmV0 cmlldmVzIENQVUlEIGluZm9ybWF0aW9uLg0KPiANCj4gKw0KPiANCj4gKyAgRXhlY3V0ZXMgdGhl IENQVUlEIGluc3RydWN0aW9uIHdpdGggRUFYIHNldCB0byB0aGUNCj4gdmFsdWUgc3BlY2lmaWVk IGJ5IEluZGV4Lg0KPiANCj4gKyAgVGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBJbmRleC4N Cj4gDQo+ICsgIElmIEVheCBpcyBub3QgTlVMTCwgdGhlbiB0aGUgdmFsdWUgb2YgRUFYIGFmdGVy DQo+IENQVUlEIGlzIHJldHVybmVkIGluIEVheC4NCj4gDQo+ICsgIElmIEVieCBpcyBub3QgTlVM TCwgdGhlbiB0aGUgdmFsdWUgb2YgRUJYIGFmdGVyDQo+IENQVUlEIGlzIHJldHVybmVkIGluIEVi eC4NCj4gDQo+ICsgIElmIEVjeCBpcyBub3QgTlVMTCwgdGhlbiB0aGUgdmFsdWUgb2YgRUNYIGFm dGVyDQo+IENQVUlEIGlzIHJldHVybmVkIGluIEVjeC4NCj4gDQo+ICsgIElmIEVkeCBpcyBub3Qg TlVMTCwgdGhlbiB0aGUgdmFsdWUgb2YgRURYIGFmdGVyDQo+IENQVUlEIGlzIHJldHVybmVkIGlu IEVkeC4NCj4gDQo+ICsgIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhdmFpbGFibGUgb24gSUEtMzIg YW5kIHg2NC4NCj4gDQo+ICsNCj4gDQo+ICsgIEBwYXJhbSAgSW5kZXggVGhlIDMyLWJpdCB2YWx1 ZSB0byBsb2FkIGludG8gRUFYDQo+IHByaW9yIHRvIGludm9raW5nIHRoZSBDUFVJRA0KPiANCj4g KyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbi4NCj4gDQo+ICsgIEBwYXJhbSAgRWF4ICAgVGhl IHBvaW50ZXIgdG8gdGhlIDMyLWJpdCBFQVggdmFsdWUNCj4gcmV0dXJuZWQgYnkgdGhlIENQVUlE DQo+IA0KPiArICAgICAgICAgICAgICAgIGluc3RydWN0aW9uLiBUaGlzIGlzIGFuIG9wdGlvbmFs DQo+IHBhcmFtZXRlciB0aGF0IG1heSBiZSBOVUxMLg0KPiANCj4gKyAgQHBhcmFtICBFYnggICBU aGUgcG9pbnRlciB0byB0aGUgMzItYml0IEVCWCB2YWx1ZQ0KPiByZXR1cm5lZCBieSB0aGUgQ1BV SUQNCj4gDQo+ICsgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMgYW4gb3B0aW9u YWwNCj4gcGFyYW1ldGVyIHRoYXQgbWF5IGJlIE5VTEwuDQo+IA0KPiArICBAcGFyYW0gIEVjeCAg IFRoZSBwb2ludGVyIHRvIHRoZSAzMi1iaXQgRUNYIHZhbHVlDQo+IHJldHVybmVkIGJ5IHRoZSBD UFVJRA0KPiANCj4gKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbi4gVGhpcyBpcyBhbiBvcHRp b25hbA0KPiBwYXJhbWV0ZXIgdGhhdCBtYXkgYmUgTlVMTC4NCj4gDQo+ICsgIEBwYXJhbSAgRWR4 ICAgVGhlIHBvaW50ZXIgdG8gdGhlIDMyLWJpdCBFRFggdmFsdWUNCj4gcmV0dXJuZWQgYnkgdGhl IENQVUlEDQo+IA0KPiArICAgICAgICAgICAgICAgIGluc3RydWN0aW9uLiBUaGlzIGlzIGFuIG9w dGlvbmFsDQo+IHBhcmFtZXRlciB0aGF0IG1heSBiZSBOVUxMLg0KPiANCj4gKw0KPiANCj4gKyAg QHJldHVybiBJbmRleC4NCj4gDQo+ICsNCj4gDQo+ICsqKi8NCj4gDQo+ICtVSU5UMzINCj4gDQo+ ICtFRklBUEkNCj4gDQo+ICtVbml0VGVzdE10cnJMaWJBc21DcHVpZCAoDQo+IA0KPiArICBJTiAg ICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgSW5kZXgsDQo+IA0KPiArICBPVVQgICAgIFVJ TlQzMiAgICAgICAgICAgICAgICAgICAgKkVheCwgIE9QVElPTkFMDQo+IA0KPiArICBPVVQgICAg IFVJTlQzMiAgICAgICAgICAgICAgICAgICAgKkVieCwgIE9QVElPTkFMDQo+IA0KPiArICBPVVQg ICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgKkVjeCwgIE9QVElPTkFMDQo+IA0KPiArICBP VVQgICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgKkVkeCAgIE9QVElPTkFMDQo+IA0KPiAr ICApDQo+IA0KPiArew0KPiANCj4gKyAgc3dpdGNoIChJbmRleCkgew0KPiANCj4gKyAgY2FzZSBD UFVJRF9WRVJTSU9OX0lORk86DQo+IA0KPiArICAgIGlmIChFZHggIT0gTlVMTCkgew0KPiANCj4g KyAgICAgICpFZHggPSBtQ3B1aWRWZXJzaW9uSW5mb0VkeC5VaW50MzI7DQo+IA0KPiArICAgIH0N Cj4gDQo+ICsgICAgcmV0dXJuIEluZGV4Ow0KPiANCj4gKyAgICBicmVhazsNCj4gDQo+ICsgIGNh c2UgQ1BVSURfRVhURU5ERURfRlVOQ1RJT046DQo+IA0KPiArICAgIGlmIChFYXggIT0gTlVMTCkg ew0KPiANCj4gKyAgICAgICpFYXggPSBDUFVJRF9WSVJfUEhZX0FERFJFU1NfU0laRTsNCj4gDQo+ ICsgICAgfQ0KPiANCj4gKyAgICByZXR1cm4gSW5kZXg7DQo+IA0KPiArICAgIGJyZWFrOw0KPiAN Cj4gKyAgY2FzZSBDUFVJRF9WSVJfUEhZX0FERFJFU1NfU0laRToNCj4gDQo+ICsgICAgaWYgKEVh eCAhPSBOVUxMKSB7DQo+IA0KPiArICAgICAgKkVheCA9IG1DcHVpZFZpclBoeUFkZHJlc3NTaXpl RWF4LlVpbnQzMjsNCj4gDQo+ICsgICAgfQ0KPiANCj4gKyAgICByZXR1cm4gSW5kZXg7DQo+IA0K PiArICAgIGJyZWFrOw0KPiANCj4gKyAgfQ0KPiANCj4gKw0KPiANCj4gKyAgLy8NCj4gDQo+ICsg IC8vIFNob3VsZCBuZXZlciBmYWxsIHRocm91Z2ggdG8gaGVyZQ0KPiANCj4gKyAgLy8NCj4gDQo+ ICsgIEFTU0VSVChGQUxTRSk7DQo+IA0KPiArICByZXR1cm4gSW5kZXg7DQo+IA0KPiArfQ0KPiAN Cj4gKw0KPiANCj4gKy8qKg0KPiANCj4gKyAgUmV0dXJucyBhIDY0LWJpdCBNYWNoaW5lIFNwZWNp ZmljIFJlZ2lzdGVyKE1TUikuDQo+IA0KPiArDQo+IA0KPiArICBSZWFkcyBhbmQgcmV0dXJucyB0 aGUgNjQtYml0IE1TUiBzcGVjaWZpZWQgYnkgSW5kZXguDQo+IE5vIHBhcmFtZXRlciBjaGVja2lu ZyBpcw0KPiANCj4gKyAgcGVyZm9ybWVkIG9uIEluZGV4LCBhbmQgc29tZSBJbmRleCB2YWx1ZXMg bWF5IGNhdXNlDQo+IENQVSBleGNlcHRpb25zLiBUaGUNCj4gDQo+ICsgIGNhbGxlciBtdXN0IGVp dGhlciBndWFyYW50ZWUgdGhhdCBJbmRleCBpcyB2YWxpZCwgb3INCj4gdGhlIGNhbGxlciBtdXN0 IHNldCB1cA0KPiANCj4gKyAgZXhjZXB0aW9uIGhhbmRsZXJzIHRvIGNhdGNoIHRoZSBleGNlcHRp b25zLiBUaGlzDQo+IGZ1bmN0aW9uIGlzIG9ubHkgYXZhaWxhYmxlDQo+IA0KPiArICBvbiBJQS0z MiBhbmQgeDY0Lg0KPiANCj4gKw0KPiANCj4gKyAgQHBhcmFtICBNc3JJbmRleCBUaGUgMzItYml0 IE1TUiBpbmRleCB0byByZWFkLg0KPiANCj4gKw0KPiANCj4gKyAgQHJldHVybiBUaGUgdmFsdWUg b2YgdGhlIE1TUiBpZGVudGlmaWVkIGJ5IE1zckluZGV4Lg0KPiANCj4gKw0KPiANCj4gKyoqLw0K PiANCj4gK1VJTlQ2NA0KPiANCj4gK0VGSUFQSQ0KPiANCj4gK1VuaXRUZXN0TXRyckxpYkFzbVJl YWRNc3I2NCgNCj4gDQo+ICsgIElOIFVJTlQzMiAgTXNySW5kZXgNCj4gDQo+ICsgICkNCj4gDQo+ ICt7DQo+IA0KPiArICBVSU5UMzIgSW5kZXg7DQo+IA0KPiArDQo+IA0KPiArICBmb3IgKEluZGV4 ID0gMDsgSW5kZXggPCBBUlJBWV9TSVpFDQo+IChtRml4ZWRNdHJyc1ZhbHVlKTsgSW5kZXgrKykg ew0KPiANCj4gKyAgICBpZiAoTXNySW5kZXggPT0gbUZpeGVkTXRycnNJbmRleFtJbmRleF0pIHsN Cj4gDQo+ICsgICAgICByZXR1cm4gbUZpeGVkTXRycnNWYWx1ZVtJbmRleF07DQo+IA0KPiArICAg IH0NCj4gDQo+ICsgIH0NCj4gDQo+ICsNCj4gDQo+ICsgIGlmICgoTXNySW5kZXggPj0gTVNSX0lB MzJfTVRSUl9QSFlTQkFTRTApICYmDQo+IA0KPiArICAgICAgKE1zckluZGV4IDw9IE1TUl9JQTMy X01UUlJfUEhZU01BU0swICsNCj4gKE1UUlJfTlVNQkVSX09GX1ZBUklBQkxFX01UUlIgPDwgMSkp KSB7DQo+IA0KPiArICAgIGlmIChNc3JJbmRleCAlIDIgPT0gMCkgew0KPiANCj4gKyAgICAgIElu ZGV4ID0gKE1zckluZGV4IC0gTVNSX0lBMzJfTVRSUl9QSFlTQkFTRTApID4+DQo+IDE7DQo+IA0K PiArICAgICAgcmV0dXJuIG1WYXJpYWJsZU10cnJzUGh5c0Jhc2VbSW5kZXhdLlVpbnQ2NDsNCj4g DQo+ICsgICAgfSBlbHNlIHsNCj4gDQo+ICsgICAgICBJbmRleCA9IChNc3JJbmRleCAtIE1TUl9J QTMyX01UUlJfUEhZU01BU0swKSA+Pg0KPiAxOw0KPiANCj4gKyAgICAgIHJldHVybiBtVmFyaWFi bGVNdHJyc1BoeXNNYXNrW0luZGV4XS5VaW50NjQ7DQo+IA0KPiArICAgIH0NCj4gDQo+ICsgIH0N Cj4gDQo+ICsNCj4gDQo+ICsgIGlmIChNc3JJbmRleCA9PSBNU1JfSUEzMl9NVFJSX0RFRl9UWVBF KSB7DQo+IA0KPiArICAgIHJldHVybiBtRGVmVHlwZU1zci5VaW50NjQ7DQo+IA0KPiArICB9DQo+ IA0KPiArDQo+IA0KPiArICBpZiAoTXNySW5kZXggPT0gTVNSX0lBMzJfTVRSUkNBUCkgew0KPiAN Cj4gKyAgICByZXR1cm4gbU10cnJDYXBNc3IuVWludDY0Ow0KPiANCj4gKyAgfQ0KPiANCj4gKw0K PiANCj4gKyAgLy8NCj4gDQo+ICsgIC8vIFNob3VsZCBuZXZlciBmYWxsIHRocm91Z2ggdG8gaGVy ZQ0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIEFTU0VSVChGQUxTRSk7DQo+IA0KPiArICByZXR1cm4g MDsNCj4gDQo+ICt9DQo+IA0KPiArDQo+IA0KPiArLyoqDQo+IA0KPiArICBXcml0ZXMgYSA2NC1i aXQgdmFsdWUgdG8gYSBNYWNoaW5lIFNwZWNpZmljDQo+IFJlZ2lzdGVyKE1TUiksIGFuZCByZXR1 cm5zIHRoZQ0KPiANCj4gKyAgdmFsdWUuDQo+IA0KPiArDQo+IA0KPiArICBXcml0ZXMgdGhlIDY0 LWJpdCB2YWx1ZSBzcGVjaWZpZWQgYnkgVmFsdWUgdG8gdGhlDQo+IE1TUiBzcGVjaWZpZWQgYnkg SW5kZXguIFRoZQ0KPiANCj4gKyAgNjQtYml0IHZhbHVlIHdyaXR0ZW4gdG8gdGhlIE1TUiBpcyBy ZXR1cm5lZC4gTm8NCj4gcGFyYW1ldGVyIGNoZWNraW5nIGlzDQo+IA0KPiArICBwZXJmb3JtZWQg b24gSW5kZXggb3IgVmFsdWUsIGFuZCBzb21lIG9mIHRoZXNlIG1heQ0KPiBjYXVzZSBDUFUgZXhj ZXB0aW9ucy4gVGhlDQo+IA0KPiArICBjYWxsZXIgbXVzdCBlaXRoZXIgZ3VhcmFudGVlIHRoYXQg SW5kZXggYW5kIFZhbHVlDQo+IGFyZSB2YWxpZCwgb3IgdGhlIGNhbGxlcg0KPiANCj4gKyAgbXVz dCBlc3RhYmxpc2ggcHJvcGVyIGV4Y2VwdGlvbiBoYW5kbGVycy4gVGhpcw0KPiBmdW5jdGlvbiBp cyBvbmx5IGF2YWlsYWJsZSBvbg0KPiANCj4gKyAgSUEtMzIgYW5kIHg2NC4NCj4gDQo+ICsNCj4g DQo+ICsgIEBwYXJhbSAgTXNySW5kZXggVGhlIDMyLWJpdCBNU1IgaW5kZXggdG8gd3JpdGUuDQo+ IA0KPiArICBAcGFyYW0gIFZhbHVlIFRoZSA2NC1iaXQgdmFsdWUgdG8gd3JpdGUgdG8gdGhlIE1T Ui4NCj4gDQo+ICsNCj4gDQo+ICsgIEByZXR1cm4gVmFsdWUNCj4gDQo+ICsNCj4gDQo+ICsqKi8N Cj4gDQo+ICtVSU5UNjQNCj4gDQo+ICtFRklBUEkNCj4gDQo+ICtVbml0VGVzdE10cnJMaWJBc21X cml0ZU1zcjY0KA0KPiANCj4gKyAgSU4gICAgICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIE1z ckluZGV4LA0KPiANCj4gKyAgSU4gICAgICBVSU5UNjQgICAgICAgICAgICAgICAgICAgIFZhbHVl DQo+IA0KPiArICApDQo+IA0KPiArew0KPiANCj4gKyAgVUlOVDMyIEluZGV4Ow0KPiANCj4gKw0K PiANCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgQVJSQVlfU0laRQ0KPiAobUZpeGVkTXRy cnNWYWx1ZSk7IEluZGV4KyspIHsNCj4gDQo+ICsgICAgaWYgKE1zckluZGV4ID09IG1GaXhlZE10 cnJzSW5kZXhbSW5kZXhdKSB7DQo+IA0KPiArICAgICAgbUZpeGVkTXRycnNWYWx1ZVtJbmRleF0g PSBWYWx1ZTsNCj4gDQo+ICsgICAgICByZXR1cm4gVmFsdWU7DQo+IA0KPiArICAgIH0NCj4gDQo+ ICsgIH0NCj4gDQo+ICsNCj4gDQo+ICsgIGlmICgoTXNySW5kZXggPj0gTVNSX0lBMzJfTVRSUl9Q SFlTQkFTRTApICYmDQo+IA0KPiArICAgICAgKE1zckluZGV4IDw9IE1TUl9JQTMyX01UUlJfUEhZ U01BU0swICsNCj4gKE1UUlJfTlVNQkVSX09GX1ZBUklBQkxFX01UUlIgPDwgMSkpKSB7DQo+IA0K PiArICAgIGlmIChNc3JJbmRleCAlIDIgPT0gMCkgew0KPiANCj4gKyAgICAgIEluZGV4ID0gKE1z ckluZGV4IC0gTVNSX0lBMzJfTVRSUl9QSFlTQkFTRTApID4+DQo+IDE7DQo+IA0KPiArICAgICAg bVZhcmlhYmxlTXRycnNQaHlzQmFzZVtJbmRleF0uVWludDY0ID0gVmFsdWU7DQo+IA0KPiArICAg ICAgcmV0dXJuIFZhbHVlOw0KPiANCj4gKyAgICB9IGVsc2Ugew0KPiANCj4gKyAgICAgIEluZGV4 ID0gKE1zckluZGV4IC0gTVNSX0lBMzJfTVRSUl9QSFlTTUFTSzApID4+DQo+IDE7DQo+IA0KPiAr ICAgICAgbVZhcmlhYmxlTXRycnNQaHlzTWFza1tJbmRleF0uVWludDY0ID0gVmFsdWU7DQo+IA0K PiArICAgICAgcmV0dXJuIFZhbHVlOw0KPiANCj4gKyAgICB9DQo+IA0KPiArICB9DQo+IA0KPiAr DQo+IA0KPiArICBpZiAoTXNySW5kZXggPT0gTVNSX0lBMzJfTVRSUl9ERUZfVFlQRSkgew0KPiAN Cj4gKyAgICBtRGVmVHlwZU1zci5VaW50NjQgPSBWYWx1ZTsNCj4gDQo+ICsgICAgcmV0dXJuIFZh bHVlOw0KPiANCj4gKyAgfQ0KPiANCj4gKw0KPiANCj4gKyAgaWYgKE1zckluZGV4ID09IE1TUl9J QTMyX01UUlJDQVApIHsNCj4gDQo+ICsgICAgbU10cnJDYXBNc3IuVWludDY0ID0gVmFsdWU7DQo+ IA0KPiArICAgIHJldHVybiBWYWx1ZTsNCj4gDQo+ICsgIH0NCj4gDQo+ICsNCj4gDQo+ICsgIC8v DQo+IA0KPiArICAvLyBTaG91bGQgbmV2ZXIgZmFsbCB0aHJvdWdoIHRvIGhlcmUNCj4gDQo+ICsg IC8vDQo+IA0KPiArICBBU1NFUlQoRkFMU0UpOw0KPiANCj4gKyAgcmV0dXJuIDA7DQo+IA0KPiAr fQ0KPiANCj4gKw0KPiANCj4gKy8qKg0KPiANCj4gKyAgSW5pdGlhbGl6ZSBNVFJSIHJlZ2lzdGVy cy4NCj4gDQo+ICsqKi8NCj4gDQo+ICsNCj4gDQo+ICsvKioNCj4gDQo+ICsgIEluaXRpYWxpemUg dGhlIE1UUlIgcmVnaXN0ZXJzLg0KPiANCj4gKw0KPiANCj4gKyAgQHBhcmFtIFN5c3RlbVBhcmFt ZXRlciBTeXN0ZW0gcGFyYW1ldGVyIHRoYXQNCj4gY29udHJvbHMgdGhlIE1UUlIgcmVnaXN0ZXJz IGluaXRpYWxpemF0aW9uLg0KPiANCj4gKyoqLw0KPiANCj4gK1VOSVRfVEVTVF9TVEFUVVMNCj4g DQo+ICtFRklBUEkNCj4gDQo+ICtJbml0aWFsaXplTXRyclJlZ3MgKA0KPiANCj4gKyAgSU4gTVRS Ul9MSUJfU1lTVEVNX1BBUkFNRVRFUiAgKlN5c3RlbVBhcmFtZXRlcg0KPiANCj4gKyAgKQ0KPiAN Cj4gK3sNCj4gDQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+IA0KPiAr DQo+IA0KPiArICBTZXRNZW0gKG1GaXhlZE10cnJzVmFsdWUsIHNpemVvZiAobUZpeGVkTXRycnNW YWx1ZSksDQo+IFN5c3RlbVBhcmFtZXRlci0+RGVmYXVsdENhY2hlVHlwZSk7DQo+IA0KPiArDQo+ IA0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBBUlJBWV9TSVpFDQo+IChtVmFyaWFibGVN dHJyc1BoeXNCYXNlKTsgSW5kZXgrKykgew0KPiANCj4gKyAgICBtVmFyaWFibGVNdHJyc1BoeXNC YXNlW0luZGV4XS5VaW50NjQgICAgICAgICA9IDA7DQo+IA0KPiArICAgIG1WYXJpYWJsZU10cnJz UGh5c0Jhc2VbSW5kZXhdLkJpdHMuVHlwZSAgICAgID0NCj4gU3lzdGVtUGFyYW1ldGVyLT5EZWZh dWx0Q2FjaGVUeXBlOw0KPiANCj4gKyAgICBtVmFyaWFibGVNdHJyc1BoeXNCYXNlW0luZGV4XS5C aXRzLlJlc2VydmVkMSA9IDA7DQo+IA0KPiArDQo+IA0KPiArICAgIG1WYXJpYWJsZU10cnJzUGh5 c01hc2tbSW5kZXhdLlVpbnQ2NCAgICAgICAgID0gMDsNCj4gDQo+ICsgICAgbVZhcmlhYmxlTXRy cnNQaHlzTWFza1tJbmRleF0uQml0cy5WICAgICAgICAgPSAwOw0KPiANCj4gKyAgICBtVmFyaWFi bGVNdHJyc1BoeXNNYXNrW0luZGV4XS5CaXRzLlJlc2VydmVkMSA9IDA7DQo+IA0KPiArICB9DQo+ IA0KPiArDQo+IA0KPiArICBtRGVmVHlwZU1zci5CaXRzLkUgICAgICAgICA9IDE7DQo+IA0KPiAr ICBtRGVmVHlwZU1zci5CaXRzLkZFICAgICAgICA9IDE7DQo+IA0KPiArICBtRGVmVHlwZU1zci5C aXRzLlR5cGUgICAgICA9IFN5c3RlbVBhcmFtZXRlci0NCj4gPkRlZmF1bHRDYWNoZVR5cGU7DQo+ IA0KPiArICBtRGVmVHlwZU1zci5CaXRzLlJlc2VydmVkMSA9IDA7DQo+IA0KPiArICBtRGVmVHlw ZU1zci5CaXRzLlJlc2VydmVkMiA9IDA7DQo+IA0KPiArICBtRGVmVHlwZU1zci5CaXRzLlJlc2Vy dmVkMyA9IDA7DQo+IA0KPiArDQo+IA0KPiArICBtTXRyckNhcE1zci5CaXRzLlNNUlIgICAgICA9 IDA7DQo+IA0KPiArICBtTXRyckNhcE1zci5CaXRzLldDICAgICAgICA9IDA7DQo+IA0KPiArICBt TXRyckNhcE1zci5CaXRzLlZDTlQgICAgICA9IFN5c3RlbVBhcmFtZXRlci0NCj4gPlZhcmlhYmxl TXRyckNvdW50Ow0KPiANCj4gKyAgbU10cnJDYXBNc3IuQml0cy5GSVggICAgICAgPSBTeXN0ZW1Q YXJhbWV0ZXItDQo+ID5GaXhlZE10cnJTdXBwb3J0ZWQ7DQo+IA0KPiArICBtTXRyckNhcE1zci5C aXRzLlJlc2VydmVkMSA9IDA7DQo+IA0KPiArICBtTXRyckNhcE1zci5CaXRzLlJlc2VydmVkMiA9 IDA7DQo+IA0KPiArICBtTXRyckNhcE1zci5CaXRzLlJlc2VydmVkMyA9IDA7DQo+IA0KPiArDQo+ IA0KPiArICBtQ3B1aWRWZXJzaW9uSW5mb0VkeC5CaXRzLk1UUlINCj4gPSBTeXN0ZW1QYXJhbWV0 ZXItPk10cnJTdXBwb3J0ZWQ7DQo+IA0KPiArICBtQ3B1aWRWaXJQaHlBZGRyZXNzU2l6ZUVheC5C aXRzLlBoeXNpY2FsQWRkcmVzc0JpdHMNCj4gPSBTeXN0ZW1QYXJhbWV0ZXItPlBoeXNpY2FsQWRk cmVzc0JpdHM7DQo+IA0KPiArDQo+IA0KPiArICAvLw0KPiANCj4gKyAgLy8gSG9vayBCYXNlTGli IGZ1bmN0aW9ucyB1c2VkIGJ5IE10cnJMaWIgdGhhdA0KPiByZXF1aXJlIHNvbWUgZW11bGF0aW9u Lg0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIGdVbml0VGVzdEhvc3RCYXNlTGliLlg4Ni0+QXNtQ3B1 aWQgICAgICA9DQo+IFVuaXRUZXN0TXRyckxpYkFzbUNwdWlkOw0KPiANCj4gKyAgZ1VuaXRUZXN0 SG9zdEJhc2VMaWIuWDg2LT5Bc21SZWFkTXNyNjQgID0NCj4gVW5pdFRlc3RNdHJyTGliQXNtUmVh ZE1zcjY0Ow0KPiANCj4gKyAgZ1VuaXRUZXN0SG9zdEJhc2VMaWIuWDg2LT5Bc21Xcml0ZU1zcjY0 ID0NCj4gVW5pdFRlc3RNdHJyTGliQXNtV3JpdGVNc3I2NDsNCj4gDQo+ICsNCj4gDQo+ICsgIHJl dHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiANCj4gK30NCj4gDQo+ICsNCj4gDQo+ICsvKioNCj4g DQo+ICsgIENvbGxlY3QgdGhlIHRlc3QgcmVzdWx0Lg0KPiANCj4gKw0KPiANCj4gKyAgQHBhcmFt IERlZmF1bHRUeXBlICAgICAgICAgIERlZmF1bHQgbWVtb3J5IHR5cGUuDQo+IA0KPiArICBAcGFy YW0gUGh5c2ljYWxBZGRyZXNzQml0cyAgUGh5c2ljYWwgYWRkcmVzcyBiaXRzLg0KPiANCj4gKyAg QHBhcmFtIFZhcmlhYmxlTXRyckNvdW50ICAgIENvdW50IG9mIHZhcmlhYmxlIE1UUlJzLg0KPiAN Cj4gKyAgQHBhcmFtIE10cnJzICAgICAgICAgICAgICAgIE1UUlIgc2V0dGluZ3MgdG8gY29sbGVj dA0KPiBmcm9tLg0KPiANCj4gKyAgQHBhcmFtIFJhbmdlcyAgICAgICAgICAgICAgIFJldHVybiB0 aGUgbWVtb3J5DQo+IHJhbmdlcy4NCj4gDQo+ICsgIEBwYXJhbSBSYW5nZUNvdW50ICAgICAgICAg ICBSZXR1cm4gdGhlIGNvdW50IG9mDQo+IG1lbW9yeSByYW5nZXMuDQo+IA0KPiArICBAcGFyYW0g TXRyckNvdW50ICAgICAgICAgICAgUmV0dXJuIHRoZSBjb3VudCBvZg0KPiB2YXJpYWJsZSBNVFJS cyBiZWluZyB1c2VkLg0KPiANCj4gKyoqLw0KPiANCj4gK1ZPSUQNCj4gDQo+ICtDb2xsZWN0VGVz dFJlc3VsdCAoDQo+IA0KPiArICBJTiAgICAgTVRSUl9NRU1PUllfQ0FDSEVfVFlQRSBEZWZhdWx0 VHlwZSwNCj4gDQo+ICsgIElOICAgICBVSU5UMzIgICAgICAgICAgICAgICAgIFBoeXNpY2FsQWRk cmVzc0JpdHMsDQo+IA0KPiArICBJTiAgICAgVUlOVDMyICAgICAgICAgICAgICAgICBWYXJpYWJs ZU10cnJDb3VudCwNCj4gDQo+ICsgIElOICAgICBNVFJSX1NFVFRJTkdTICAgICAgICAgICpNdHJy cywNCj4gDQo+ICsgIE9VVCAgICBNVFJSX01FTU9SWV9SQU5HRSAgICAgICpSYW5nZXMsDQo+IA0K PiArICBJTiBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAqUmFuZ2VDb3VudCwNCj4gDQo+ICsg IE9VVCAgICBVSU5UMzIgICAgICAgICAgICAgICAgICpNdHJyQ291bnQNCj4gDQo+ICsgICkNCj4g DQo+ICt7DQo+IA0KPiArICBVSU5UTiAgICAgICAgICAgICBJbmRleDsNCj4gDQo+ICsgIFVJTlQ2 NCAgICAgICAgICAgIE10cnJWYWxpZEJpdHNNYXNrOw0KPiANCj4gKyAgVUlOVDY0ICAgICAgICAg ICAgTXRyclZhbGlkQWRkcmVzc01hc2s7DQo+IA0KPiArICBNVFJSX01FTU9SWV9SQU5HRSBSYXdN ZW1vcnlSYW5nZXNbQVJSQVlfU0laRSAoTXRycnMtDQo+ID5WYXJpYWJsZXMuTXRycildOw0KPiAN Cj4gKw0KPiANCj4gKyAgQVNTRVJUIChNdHJycyAhPSBOVUxMKTsNCj4gDQo+ICsgIEFTU0VSVCAo VmFyaWFibGVNdHJyQ291bnQgPD0gQVJSQVlfU0laRSAoTXRycnMtDQo+ID5WYXJpYWJsZXMuTXRy cikpOw0KPiANCj4gKw0KPiANCj4gKyAgTXRyclZhbGlkQml0c01hc2sgPSAoMXVsbCA8PCBQaHlz aWNhbEFkZHJlc3NCaXRzKSAtDQo+IDE7DQo+IA0KPiArICBNdHJyVmFsaWRBZGRyZXNzTWFzayA9 IE10cnJWYWxpZEJpdHNNYXNrICYNCj4gfjB4RkZGdWxsOw0KPiANCj4gKw0KPiANCj4gKyAgKk10 cnJDb3VudCA9IDA7DQo+IA0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBWYXJpYWJsZU10 cnJDb3VudDsgSW5kZXgrKykNCj4gew0KPiANCj4gKyAgICBpZiAoKChNU1JfSUEzMl9NVFJSX1BI WVNNQVNLX1JFR0lTVEVSICopICZNdHJycy0NCj4gPlZhcmlhYmxlcy5NdHJyW0luZGV4XS5NYXNr KS0+Qml0cy5WID09IDEpIHsNCj4gDQo+ICsgICAgICBSYXdNZW1vcnlSYW5nZXNbKk10cnJDb3Vu dF0uQmFzZUFkZHJlc3MgPSBNdHJycy0NCj4gPlZhcmlhYmxlcy5NdHJyW0luZGV4XS5CYXNlICYg TXRyclZhbGlkQWRkcmVzc01hc2s7DQo+IA0KPiArICAgICAgUmF3TWVtb3J5UmFuZ2VzWypNdHJy Q291bnRdLlR5cGUgICAgICAgID0NCj4gDQo+ICsgICAgICAgICgoTVNSX0lBMzJfTVRSUl9QSFlT QkFTRV9SRUdJU1RFUiAqKSAmTXRycnMtDQo+ID5WYXJpYWJsZXMuTXRycltJbmRleF0uQmFzZSkt PkJpdHMuVHlwZTsNCj4gDQo+ICsgICAgICBSYXdNZW1vcnlSYW5nZXNbKk10cnJDb3VudF0uTGVu Z3RoICAgICAgPQ0KPiANCj4gKyAgICAgICAgICAoKH4oTXRycnMtPlZhcmlhYmxlcy5NdHJyW0lu ZGV4XS5NYXNrICYNCj4gTXRyclZhbGlkQWRkcmVzc01hc2spKSAmIE10cnJWYWxpZEJpdHNNYXNr KSArIDE7DQo+IA0KPiArICAgICAgKCpNdHJyQ291bnQpKys7DQo+IA0KPiArICAgIH0NCj4gDQo+ ICsgIH0NCj4gDQo+ICsNCj4gDQo+ICsgIEdldEVmZmVjdGl2ZU1lbW9yeVJhbmdlcyAoRGVmYXVs dFR5cGUsDQo+IFBoeXNpY2FsQWRkcmVzc0JpdHMsIFJhd01lbW9yeVJhbmdlcywgKk10cnJDb3Vu dCwNCj4gUmFuZ2VzLCBSYW5nZUNvdW50KTsNCj4gDQo+ICt9DQo+IA0KPiArDQo+IA0KPiArLyoq DQo+IA0KPiArICBSZXR1cm4gYSAzMmJpdCByYW5kb20gbnVtYmVyLg0KPiANCj4gKw0KPiANCj4g KyAgQHBhcmFtIFN0YXJ0ICBTdGFydCBvZiB0aGUgcmFuZG9tIG51bWJlciByYW5nZS4NCj4gDQo+ ICsgIEBwYXJhbSBMaW1pdCAgTGltaXQgb2YgdGhlIHJhbmRvbSBudW1iZXIgcmFuZ2UuDQo+IA0K PiArICBAcmV0dXJuIDMyYml0IHJhbmRvbSBudW1iZXINCj4gDQo+ICsqKi8NCj4gDQo+ICtVSU5U MzINCj4gDQo+ICtSYW5kb20zMiAoDQo+IA0KPiArICBVSU5UMzIgIFN0YXJ0LA0KPiANCj4gKyAg VUlOVDMyICBMaW1pdA0KPiANCj4gKyAgKQ0KPiANCj4gK3sNCj4gDQo+ICsgIHJldHVybiAoVUlO VDMyKSAoKChkb3VibGUpIHJhbmQgKCkgLyBSQU5EX01BWCkgKg0KPiAoTGltaXQgLSBTdGFydCkp ICsgU3RhcnQ7DQo+IA0KPiArfQ0KPiANCj4gKw0KPiANCj4gKy8qKg0KPiANCj4gKyAgUmV0dXJu IGEgNjRiaXQgcmFuZG9tIG51bWJlci4NCj4gDQo+ICsNCj4gDQo+ICsgIEBwYXJhbSBTdGFydCAg U3RhcnQgb2YgdGhlIHJhbmRvbSBudW1iZXIgcmFuZ2UuDQo+IA0KPiArICBAcGFyYW0gTGltaXQg IExpbWl0IG9mIHRoZSByYW5kb20gbnVtYmVyIHJhbmdlLg0KPiANCj4gKyAgQHJldHVybiA2NGJp dCByYW5kb20gbnVtYmVyDQo+IA0KPiArKiovDQo+IA0KPiArVUlOVDY0DQo+IA0KPiArUmFuZG9t NjQgKA0KPiANCj4gKyAgVUlOVDY0ICBTdGFydCwNCj4gDQo+ICsgIFVJTlQ2NCAgTGltaXQNCj4g DQo+ICsgICkNCj4gDQo+ICt7DQo+IA0KPiArICByZXR1cm4gKFVJTlQ2NCkgKCgoZG91YmxlKSBy YW5kICgpIC8gUkFORF9NQVgpICoNCj4gKExpbWl0IC0gU3RhcnQpKSArIFN0YXJ0Ow0KPiANCj4g K30NCj4gDQo+ICsNCj4gDQo+ICsvKioNCj4gDQo+ICsgIEdlbmVyYXRlIHJhbmRvbSBNVFJSIEJB U0UvTUFTSyBmb3IgYSBzcGVjaWZpZWQgdHlwZS4NCj4gDQo+ICsNCj4gDQo+ICsgIEBwYXJhbSBQ aHlzaWNhbEFkZHJlc3NCaXRzIFBoeXNpY2FsIGFkZHJlc3MgYml0cy4NCj4gDQo+ICsgIEBwYXJh bSBDYWNoZVR5cGUgICAgICAgICAgIENhY2hlIHR5cGUuDQo+IA0KPiArICBAcGFyYW0gTXRyclBh aXIgICAgICAgICAgICBSZXR1cm4gdGhlIHJhbmRvbSBNVFJSLg0KPiANCj4gKyAgQHBhcmFtIE10 cnJNZW1vcnlSYW5nZSAgICAgUmV0dXJuIHRoZSByYW5kb20gbWVtb3J5DQo+IHJhbmdlLg0KPiAN Cj4gKyoqLw0KPiANCj4gK1ZPSUQNCj4gDQo+ICtHZW5lcmF0ZVJhbmRvbU10cnJQYWlyICgNCj4g DQo+ICsgIElOICBVSU5UMzIgICAgICAgICAgICAgICAgIFBoeXNpY2FsQWRkcmVzc0JpdHMsDQo+ IA0KPiArICBJTiAgTVRSUl9NRU1PUllfQ0FDSEVfVFlQRSBDYWNoZVR5cGUsDQo+IA0KPiArICBP VVQgTVRSUl9WQVJJQUJMRV9TRVRUSU5HICAqTXRyclBhaXIsICAgICAgIE9QVElPTkFMDQo+IA0K PiArICBPVVQgTVRSUl9NRU1PUllfUkFOR0UgICAgICAqTXRyck1lbW9yeVJhbmdlIE9QVElPTkFM DQo+IA0KPiArICApDQo+IA0KPiArew0KPiANCj4gKyAgTVNSX0lBMzJfTVRSUl9QSFlTQkFTRV9S RUdJU1RFUiBQaHlzQmFzZTsNCj4gDQo+ICsgIE1TUl9JQTMyX01UUlJfUEhZU01BU0tfUkVHSVNU RVIgUGh5c01hc2s7DQo+IA0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgIFNp emVTaGlmdDsNCj4gDQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzZVNo aWZ0Ow0KPiANCj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgICBSYW5kb21Cb3Vu ZGFyeTsNCj4gDQo+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4UGh5c2lj YWxBZGRyZXNzOw0KPiANCj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgICBSYW5n ZVNpemU7DQo+IA0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgIFJhbmdlQmFz ZTsNCj4gDQo+ICsgIFVJTlQ2NA0KPiBQaHlzQmFzZVBoeU1hc2tWYWxpZEJpdHNNYXNrOw0KPiAN Cj4gKw0KPiANCj4gKyAgTWF4UGh5c2ljYWxBZGRyZXNzID0gMXVsbCA8PCBQaHlzaWNhbEFkZHJl c3NCaXRzOw0KPiANCj4gKyAgZG8gew0KPiANCj4gKyAgICBTaXplU2hpZnQgPSBSYW5kb20zMiAo MTIsIFBoeXNpY2FsQWRkcmVzc0JpdHMgLQ0KPiAxKTsNCj4gDQo+ICsgICAgUmFuZ2VTaXplID0g MXVsbCA8PCBTaXplU2hpZnQ7DQo+IA0KPiArDQo+IA0KPiArICAgIEJhc2VTaGlmdCA9IFJhbmRv bTMyIChTaXplU2hpZnQsDQo+IFBoeXNpY2FsQWRkcmVzc0JpdHMgLSAxKTsNCj4gDQo+ICsgICAg UmFuZG9tQm91bmRhcnkgPSBSYW5kb202NCAoMCwgMXVsbCA8PA0KPiAoUGh5c2ljYWxBZGRyZXNz Qml0cyAtIEJhc2VTaGlmdCkpOw0KPiANCj4gKyAgICBSYW5nZUJhc2UgPSBSYW5kb21Cb3VuZGFy eSA8PCBCYXNlU2hpZnQ7DQo+IA0KPiArICB9IHdoaWxlIChSYW5nZUJhc2UgPCBTSVpFXzFNQiB8 fCBSYW5nZUJhc2UgPg0KPiBNYXhQaHlzaWNhbEFkZHJlc3MgLSAxKTsNCj4gDQo+ICsNCj4gDQo+ ICsgIFBoeXNCYXNlUGh5TWFza1ZhbGlkQml0c01hc2sgPSAoTWF4UGh5c2ljYWxBZGRyZXNzIC0N Cj4gMSkgJiAweGZmZmZmZmZmZmZmZmYwMDBVTEw7DQo+IA0KPiArDQo+IA0KPiArICBQaHlzQmFz ZS5VaW50NjQgICAgPSAwOw0KPiANCj4gKyAgUGh5c0Jhc2UuQml0cy5UeXBlID0gQ2FjaGVUeXBl Ow0KPiANCj4gKyAgUGh5c0Jhc2UuVWludDY0ICAgfD0gUmFuZ2VCYXNlICYNCj4gUGh5c0Jhc2VQ aHlNYXNrVmFsaWRCaXRzTWFzazsNCj4gDQo+ICsgIFBoeXNNYXNrLlVpbnQ2NCAgICA9IDA7DQo+ IA0KPiArICBQaHlzTWFzay5CaXRzLlYgICAgPSAxOw0KPiANCj4gKyAgUGh5c01hc2suVWludDY0 ICAgfD0gKCh+UmFuZ2VTaXplKSArIDEpICYNCj4gUGh5c0Jhc2VQaHlNYXNrVmFsaWRCaXRzTWFz azsNCj4gDQo+ICsNCj4gDQo+ICsgIGlmIChNdHJyUGFpciAhPSBOVUxMKSB7DQo+IA0KPiArICAg IE10cnJQYWlyLT5CYXNlID0gUGh5c0Jhc2UuVWludDY0Ow0KPiANCj4gKyAgICBNdHJyUGFpci0+ TWFzayA9IFBoeXNNYXNrLlVpbnQ2NDsNCj4gDQo+ICsgIH0NCj4gDQo+ICsNCj4gDQo+ICsgIGlm IChNdHJyTWVtb3J5UmFuZ2UgIT0gTlVMTCkgew0KPiANCj4gKyAgICBNdHJyTWVtb3J5UmFuZ2Ut PkJhc2VBZGRyZXNzID0gUmFuZ2VCYXNlOw0KPiANCj4gKyAgICBNdHJyTWVtb3J5UmFuZ2UtPkxl bmd0aCAgICAgID0gUmFuZ2VTaXplOw0KPiANCj4gKyAgICBNdHJyTWVtb3J5UmFuZ2UtPlR5cGUg ICAgICAgID0gQ2FjaGVUeXBlOw0KPiANCj4gKyAgfQ0KPiANCj4gK30NCj4gDQo+ICsNCj4gDQo+ ICsNCj4gDQo+ICsvKioNCj4gDQo+ICsgIENoZWNrIHdoZXRoZXIgdGhlIFJhbmdlIG92ZXJsYXBz IHdpdGggYW55IG9uZSBpbg0KPiBSYW5nZXMuDQo+IA0KPiArDQo+IA0KPiArICBAcGFyYW0gUmFu Z2UgIFRoZSBtZW1vcnkgcmFuZ2UgdG8gY2hlY2suDQo+IA0KPiArICBAcGFyYW0gUmFuZ2VzIFRo ZSBtZW1vcnkgcmFuZ2VzLg0KPiANCj4gKyAgQHBhcmFtIENvdW50ICBDb3VudCBvZiBtZW1vcnkg cmFuZ2VzLg0KPiANCj4gKw0KPiANCj4gKyAgQHJldHVybiBUUlVFIHdoZW4gb3ZlcmxhcCBleGlz dHMuDQo+IA0KPiArKiovDQo+IA0KPiArQk9PTEVBTg0KPiANCj4gK1Jhbmdlc092ZXJsYXAgKA0K PiANCj4gKyAgSU4gTVRSUl9NRU1PUllfUkFOR0UgKlJhbmdlLA0KPiANCj4gKyAgSU4gTVRSUl9N RU1PUllfUkFOR0UgKlJhbmdlcywNCj4gDQo+ICsgIElOIFVJTlROICAgICAgICAgICAgIENvdW50 DQo+IA0KPiArICApDQo+IA0KPiArew0KPiANCj4gKyAgd2hpbGUgKENvdW50LS0gIT0gMCkgew0K PiANCj4gKyAgICAvLw0KPiANCj4gKyAgICAvLyBUd28gcmFuZ2VzIG92ZXJsYXAgd2hlbjoNCj4g DQo+ICsgICAgLy8gMS4gcmFuZ2UjMi5iYXNlIGlzIGluIHRoZSBtaWRkbGUgb2YgcmFuZ2UjMQ0K PiANCj4gKyAgICAvLyAyLiByYW5nZSMxLmJhc2UgaXMgaW4gdGhlIG1pZGRsZSBvZiByYW5nZSMy DQo+IA0KPiArICAgIC8vDQo+IA0KPiArICAgIGlmICgoUmFuZ2UtPkJhc2VBZGRyZXNzIDw9DQo+ IFJhbmdlc1tDb3VudF0uQmFzZUFkZHJlc3MgJiYgUmFuZ2VzW0NvdW50XS5CYXNlQWRkcmVzcw0K PiA8IFJhbmdlLT5CYXNlQWRkcmVzcyArIFJhbmdlLT5MZW5ndGgpDQo+IA0KPiArICAgICB8fCAo UmFuZ2VzW0NvdW50XS5CYXNlQWRkcmVzcyA8PSBSYW5nZS0NCj4gPkJhc2VBZGRyZXNzICYmIFJh bmdlLT5CYXNlQWRkcmVzcyA8DQo+IFJhbmdlc1tDb3VudF0uQmFzZUFkZHJlc3MgKyBSYW5nZXNb Q291bnRdLkxlbmd0aCkpIHsNCj4gDQo+ICsgICAgICByZXR1cm4gVFJVRTsNCj4gDQo+ICsgICAg fQ0KPiANCj4gKyAgfQ0KPiANCj4gKyAgcmV0dXJuIEZBTFNFOw0KPiANCj4gK30NCj4gDQo+ICsN Cj4gDQo+ICsvKioNCj4gDQo+ICsgIEdlbmVyYXRlIHJhbmRvbSBNVFJScy4NCj4gDQo+ICsNCj4g DQo+ICsgIEBwYXJhbSBQaHlzaWNhbEFkZHJlc3NCaXRzICBQaHlzaWNhbCBhZGRyZXNzIGJpdHMu DQo+IA0KPiArICBAcGFyYW0gUmF3TWVtb3J5UmFuZ2VzICAgICAgUmV0dXJuIHRoZSByYW5kb21s eQ0KPiBnZW5lcmF0ZWQgTVRSUnMuDQo+IA0KPiArICBAcGFyYW0gVWNDb3VudCAgICAgICAgICAg ICAgQ291bnQgb2YgVW5jYWNoZWFibGUNCj4gTVRSUnMuDQo+IA0KPiArICBAcGFyYW0gV3RDb3Vu dCAgICAgICAgICAgICAgQ291bnQgb2YgV3JpdGUgVGhyb3VnaA0KPiBNVFJScy4NCj4gDQo+ICsg IEBwYXJhbSBXYkNvdW50ICAgICAgICAgICAgICBDb3VudCBvZiBXcml0ZSBCYWNrDQo+IE1UUlJz Lg0KPiANCj4gKyAgQHBhcmFtIFdwQ291bnQgICAgICAgICAgICAgIENvdW50IG9mIFdyaXRlIFBy b3RlY3RlZA0KPiBNVFJScy4NCj4gDQo+ICsgIEBwYXJhbSBXY0NvdW50ICAgICAgICAgICAgICBD b3VudCBvZiBXcml0ZSBDb21iaW5lDQo+IE1UUlJzLg0KPiANCj4gKyoqLw0KPiANCj4gK1ZPSUQN Cj4gDQo+ICtHZW5lcmF0ZVZhbGlkQW5kQ29uZmlndXJhYmxlTXRyclBhaXJzICgNCj4gDQo+ICsg IElOICAgICBVSU5UMzINCj4gUGh5c2ljYWxBZGRyZXNzQml0cywNCj4gDQo+ICsgIElOIE9VVCBN VFJSX01FTU9SWV9SQU5HRSAgICAgICAgICpSYXdNZW1vcnlSYW5nZXMsDQo+IA0KPiArICBJTiAg ICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBVY0NvdW50LA0KPiANCj4gKyAgSU4gICAgIFVJ TlQzMiAgICAgICAgICAgICAgICAgICAgV3RDb3VudCwNCj4gDQo+ICsgIElOICAgICBVSU5UMzIg ICAgICAgICAgICAgICAgICAgIFdiQ291bnQsDQo+IA0KPiArICBJTiAgICAgVUlOVDMyICAgICAg ICAgICAgICAgICAgICBXcENvdW50LA0KPiANCj4gKyAgSU4gICAgIFVJTlQzMiAgICAgICAgICAg ICAgICAgICAgV2NDb3VudA0KPiANCj4gKyAgKQ0KPiANCj4gK3sNCj4gDQo+ICsgIFVJTlQzMiAg ICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+IA0KPiArDQo+IA0KPiArICAvLw0KPiAN Cj4gKyAgLy8gMS4gR2VuZXJhdGUgVUMsIFdULCBXQiBpbiBvcmRlci4NCj4gDQo+ICsgIC8vDQo+ IA0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBVY0NvdW50OyBJbmRleCsrKSB7DQo+IA0K PiArICAgIEdlbmVyYXRlUmFuZG9tTXRyclBhaXIgKFBoeXNpY2FsQWRkcmVzc0JpdHMsDQo+IENh Y2hlVW5jYWNoZWFibGUsIE5VTEwsICZSYXdNZW1vcnlSYW5nZXNbSW5kZXhdKTsNCj4gDQo+ICsg IH0NCj4gDQo+ICsNCj4gDQo+ICsgIGZvciAoSW5kZXggPSBVY0NvdW50OyBJbmRleCA8IFVjQ291 bnQgKyBXdENvdW50Ow0KPiBJbmRleCsrKSB7DQo+IA0KPiArICAgIEdlbmVyYXRlUmFuZG9tTXRy clBhaXIgKFBoeXNpY2FsQWRkcmVzc0JpdHMsDQo+IENhY2hlV3JpdGVUaHJvdWdoLCBOVUxMLCAm UmF3TWVtb3J5UmFuZ2VzW0luZGV4XSk7DQo+IA0KPiArICB9DQo+IA0KPiArDQo+IA0KPiArICBm b3IgKEluZGV4ID0gVWNDb3VudCArIFd0Q291bnQ7IEluZGV4IDwgVWNDb3VudCArDQo+IFd0Q291 bnQgKyBXYkNvdW50OyBJbmRleCsrKSB7DQo+IA0KPiArICAgIEdlbmVyYXRlUmFuZG9tTXRyclBh aXIgKFBoeXNpY2FsQWRkcmVzc0JpdHMsDQo+IENhY2hlV3JpdGVCYWNrLCBOVUxMLCAmUmF3TWVt b3J5UmFuZ2VzW0luZGV4XSk7DQo+IA0KPiArICB9DQo+IA0KPiArDQo+IA0KPiArICAvLw0KPiAN Cj4gKyAgLy8gMi4gR2VuZXJhdGUgV1AgTVRSUiBhbmQgRE8gTk9UIG92ZXJsYXAgd2l0aCBXVCwN Cj4gV0IuDQo+IA0KPiArICAvLw0KPiANCj4gKyAgZm9yIChJbmRleCA9IFVjQ291bnQgKyBXdENv dW50ICsgV2JDb3VudDsgSW5kZXggPA0KPiBVY0NvdW50ICsgV3RDb3VudCArIFdiQ291bnQgKyBX cENvdW50OyBJbmRleCsrKSB7DQo+IA0KPiArICAgIEdlbmVyYXRlUmFuZG9tTXRyclBhaXIgKFBo eXNpY2FsQWRkcmVzc0JpdHMsDQo+IENhY2hlV3JpdGVQcm90ZWN0ZWQsIE5VTEwsICZSYXdNZW1v cnlSYW5nZXNbSW5kZXhdKTsNCj4gDQo+ICsgICAgd2hpbGUgKFJhbmdlc092ZXJsYXAgKCZSYXdN ZW1vcnlSYW5nZXNbSW5kZXhdLA0KPiAmUmF3TWVtb3J5UmFuZ2VzW1VjQ291bnRdLCBXdENvdW50 ICsgV2JDb3VudCkpIHsNCj4gDQo+ICsgICAgICBHZW5lcmF0ZVJhbmRvbU10cnJQYWlyIChQaHlz aWNhbEFkZHJlc3NCaXRzLA0KPiBDYWNoZVdyaXRlUHJvdGVjdGVkLCBOVUxMLCAmUmF3TWVtb3J5 UmFuZ2VzW0luZGV4XSk7DQo+IA0KPiArICAgIH0NCj4gDQo+ICsgIH0NCj4gDQo+ICsNCj4gDQo+ ICsgIC8vDQo+IA0KPiArICAvLyAzLiBHZW5lcmF0ZSBXQyBNVFJSIGFuZCBETyBOT1Qgb3Zlcmxh cCB3aXRoIFdULA0KPiBXQiwgV1AuDQo+IA0KPiArICAvLw0KPiANCj4gKyAgZm9yIChJbmRleCA9 IFVjQ291bnQgKyBXdENvdW50ICsgV2JDb3VudCArIFdwQ291bnQ7DQo+IEluZGV4IDwgVWNDb3Vu dCArIFd0Q291bnQgKyBXYkNvdW50ICsgV3BDb3VudCArDQo+IFdjQ291bnQ7IEluZGV4KyspIHsN Cj4gDQo+ICsgICAgR2VuZXJhdGVSYW5kb21NdHJyUGFpciAoUGh5c2ljYWxBZGRyZXNzQml0cywN Cj4gQ2FjaGVXcml0ZUNvbWJpbmluZywgTlVMTCwgJlJhd01lbW9yeVJhbmdlc1tJbmRleF0pOw0K PiANCj4gKyAgICB3aGlsZSAoUmFuZ2VzT3ZlcmxhcCAoJlJhd01lbW9yeVJhbmdlc1tJbmRleF0s DQo+ICZSYXdNZW1vcnlSYW5nZXNbVWNDb3VudF0sIFd0Q291bnQgKyBXYkNvdW50ICsNCj4gV3BD b3VudCkpIHsNCj4gDQo+ICsgICAgICBHZW5lcmF0ZVJhbmRvbU10cnJQYWlyIChQaHlzaWNhbEFk ZHJlc3NCaXRzLA0KPiBDYWNoZVdyaXRlQ29tYmluaW5nLCBOVUxMLCAmUmF3TWVtb3J5UmFuZ2Vz W0luZGV4XSk7DQo+IA0KPiArICAgIH0NCj4gDQo+ICsgIH0NCj4gDQo+ICt9DQo+IA0KPiArDQo+ IA0KPiArLyoqDQo+IA0KPiArICBSZXR1cm4gYSByYW5kb20gbWVtb3J5IGNhY2hlIHR5cGUuDQo+ IA0KPiArKiovDQo+IA0KPiArTVRSUl9NRU1PUllfQ0FDSEVfVFlQRQ0KPiANCj4gK0dlbmVyYXRl UmFuZG9tQ2FjaGVUeXBlICgNCj4gDQo+ICsgIFZPSUQNCj4gDQo+ICsgICkNCj4gDQo+ICt7DQo+ IA0KPiArICAgIHJldHVybiBtTWVtb3J5Q2FjaGVUeXBlc1tSYW5kb20zMiAoMCwgQVJSQVlfU0la RQ0KPiAobU1lbW9yeUNhY2hlVHlwZXMpIC0gMSldOw0KPiANCj4gK30NCj4gDQo+ICsNCj4gDQo+ ICsvKioNCj4gDQo+ICsgIENvbXBhcmUgZnVuY3Rpb24gdXNlZCBieSBxc29ydCgpLg0KPiANCj4g KyoqLw0KPiANCj4gKw0KPiANCj4gKy8qKg0KPiANCj4gKyAgQ29tcGFyZSBmdW5jdGlvbiB1c2Vk IGJ5IHFzb3J0KCkuDQo+IA0KPiArDQo+IA0KPiArICBAcGFyYW0gTGVmdCAgIExlZnQgb3BlcmFu ZCB0byBjb21wYXJlLg0KPiANCj4gKyAgQHBhcmFtIFJpZ2h0ICBSaWdodCBvcGVyYW5kIHRvIGNv bXBhcmUuDQo+IA0KPiArDQo+IA0KPiArICBAcmV0dmFsIDAgIExlZnQgPT0gUmlnaHQNCj4gDQo+ ICsgIEByZXR2YWwgLTEgTGVmdCA8IFJpZ2h0DQo+IA0KPiArICBAcmV0dmFsIDEgIExlZnQgPiBS aWdodA0KPiANCj4gKyoqLw0KPiANCj4gK0lOVDMyDQo+IA0KPiArQ29tcGFyZUZ1bmNVaW50NjQg KA0KPiANCj4gKyAgQ09OU1QgVk9JRCAqIExlZnQsDQo+IA0KPiArICBDT05TVCBWT0lEICogUmln aHQNCj4gDQo+ICsgICkNCj4gDQo+ICt7DQo+IA0KPiArICAgIElOVDY0IERlbHRhOw0KPiANCj4g KyAgICBEZWx0YSA9ICgqKFVJTlQ2NCopTGVmdCAtICooVUlOVDY0KilSaWdodCk7DQo+IA0KPiAr ICAgIGlmIChEZWx0YSA+IDApIHsNCj4gDQo+ICsgICAgICByZXR1cm4gMTsNCj4gDQo+ICsgICAg fSBlbHNlIGlmIChEZWx0YSA9PSAwKSB7DQo+IA0KPiArICAgICAgcmV0dXJuIDA7DQo+IA0KPiAr ICAgIH0gZWxzZSB7DQo+IA0KPiArICAgICAgcmV0dXJuIC0xOw0KPiANCj4gKyAgICB9DQo+IA0K PiArfQ0KPiANCj4gKw0KPiANCj4gKy8qKg0KPiANCj4gKyAgRGV0ZXJtaW4gdGhlIG1lbW9yeSBj YWNoZSB0eXBlIGZvciB0aGUgUmFuZ2UuDQo+IA0KPiArDQo+IA0KPiArICBAcGFyYW0gRGVmYXVs dFR5cGUgRGVmYXVsdCBjYWNoZSB0eXBlLg0KPiANCj4gKyAgQHBhcmFtIFJhbmdlICAgICAgIFRo ZSBtZW1vcnkgcmFuZ2UgdG8gZGV0ZXJtaW4gdGhlDQo+IGNhY2hlIHR5cGUuDQo+IA0KPiArICBA cGFyYW0gUmFuZ2VzICAgICAgVGhlIGVudGlyZSBtZW1vcnkgcmFuZ2VzLg0KPiANCj4gKyAgQHBh cmFtIFJhbmdlQ291bnQgIENvdW50IG9mIHRoZSBlbnRpcmUgbWVtb3J5DQo+IHJhbmdlcy4NCj4g DQo+ICsqKi8NCj4gDQo+ICtWT0lEDQo+IA0KPiArRGV0ZXJtaW5lTWVtb3J5Q2FjaGVUeXBlICgN Cj4gDQo+ICsgIElOICAgICBNVFJSX01FTU9SWV9DQUNIRV9UWVBFIERlZmF1bHRUeXBlLA0KPiAN Cj4gKyAgSU4gT1VUIE1UUlJfTUVNT1JZX1JBTkdFICAgICAgKlJhbmdlLA0KPiANCj4gKyAgSU4g ICAgIE1UUlJfTUVNT1JZX1JBTkdFICAgICAgKlJhbmdlcywNCj4gDQo+ICsgIElOICAgICBVSU5U MzIgICAgICAgICAgICAgICAgIFJhbmdlQ291bnQNCj4gDQo+ICsgICkNCj4gDQo+ICt7DQo+IA0K PiArICBVSU5UMzIgSW5kZXg7DQo+IA0KPiArICBSYW5nZS0+VHlwZSA9IENhY2hlSW52YWxpZDsN Cj4gDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFJhbmdlQ291bnQ7IEluZGV4KyspIHsN Cj4gDQo+ICsgICAgaWYgKFJhbmdlc092ZXJsYXAgKFJhbmdlLCAmUmFuZ2VzW0luZGV4XSwgMSkp IHsNCj4gDQo+ICsgICAgICBpZiAoUmFuZ2VzW0luZGV4XS5UeXBlIDwgUmFuZ2UtPlR5cGUpIHsN Cj4gDQo+ICsgICAgICAgIFJhbmdlLT5UeXBlID0gUmFuZ2VzW0luZGV4XS5UeXBlOw0KPiANCj4g KyAgICAgIH0NCj4gDQo+ICsgICAgfQ0KPiANCj4gKyAgfQ0KPiANCj4gKw0KPiANCj4gKyAgaWYg KFJhbmdlLT5UeXBlID09IENhY2hlSW52YWxpZCkgew0KPiANCj4gKyAgICBSYW5nZS0+VHlwZSA9 IERlZmF1bHRUeXBlOw0KPiANCj4gKyAgfQ0KPiANCj4gK30NCj4gDQo+ICsNCj4gDQo+ICsvKioN Cj4gDQo+ICsgIEdldCB0aGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgdGhhdCBkb2VzIE5PVCBlcXVh bHMgdG8NCj4gQXJyYXlbSW5kZXhdLg0KPiANCj4gKw0KPiANCj4gKyAgQHBhcmFtIEluZGV4ICAg Q3VycmVudCBlbGVtZW50Lg0KPiANCj4gKyAgQHBhcmFtIEFycmF5ICAgQXJyYXkgdG8gc2Nhbi4N Cj4gDQo+ICsgIEBwYXJhbSBDb3VudCAgIENvdW50IG9mIHRoZSBhcnJheS4NCj4gDQo+ICsNCj4g DQo+ICsgIEByZXR1cm4gTmV4dCBlbGVtZW50IHRoYXQgZG9lc24ndCBlcXVhbCB0byBjdXJyZW50 DQo+IG9uZS4NCj4gDQo+ICsqKi8NCj4gDQo+ICtVSU5UMzINCj4gDQo+ICtHZXROZXh0RGlmZmVy ZW50RWxlbWVudEluU29ydGVkQXJyYXkgKA0KPiANCj4gKyAgSU4gVUlOVDMyIEluZGV4LA0KPiAN Cj4gKyAgSU4gVUlOVDY0ICpBcnJheSwNCj4gDQo+ICsgIElOIFVJTlQzMiBDb3VudA0KPiANCj4g KyAgKQ0KPiANCj4gK3sNCj4gDQo+ICsgIFVJTlQ2NCBDdXJyZW50RWxlbWVudDsNCj4gDQo+ICsg IEN1cnJlbnRFbGVtZW50ID0gQXJyYXlbSW5kZXhdOw0KPiANCj4gKyAgd2hpbGUgKEN1cnJlbnRF bGVtZW50ID09IEFycmF5W0luZGV4XSAmJiBJbmRleCA8DQo+IENvdW50KSB7DQo+IA0KPiArICAg IEluZGV4Kys7DQo+IA0KPiArICB9DQo+IA0KPiArICByZXR1cm4gSW5kZXg7DQo+IA0KPiArfQ0K PiANCj4gKw0KPiANCj4gKy8qKg0KPiANCj4gKyAgUmVtb3ZlIHRoZSBkdXBsaWNhdGVzIGZyb20g dGhlIGFycmF5Lg0KPiANCj4gKw0KPiANCj4gKyAgQHBhcmFtIEFycmF5ICBUaGUgYXJyYXkgdG8g b3BlcmF0ZSBvbi4NCj4gDQo+ICsgIEBwYXJhbSBDb3VudCAgQ291bnQgb2YgdGhlIGFycmF5Lg0K PiANCj4gKyoqLw0KPiANCj4gK1ZPSUQNCj4gDQo+ICtSZW1vdmVEdXBsaWNhdGVzSW5Tb3J0ZWRB cnJheSAoDQo+IA0KPiArICBJTiBPVVQgVUlOVDY0ICpBcnJheSwNCj4gDQo+ICsgIElOIE9VVCBV SU5UMzIgKkNvdW50DQo+IA0KPiArICApDQo+IA0KPiArew0KPiANCj4gKyAgVUlOVDMyIEluZGV4 Ow0KPiANCj4gKyAgVUlOVDMyIE5ld0NvdW50Ow0KPiANCj4gKw0KPiANCj4gKyAgSW5kZXggICAg PSAwOw0KPiANCj4gKyAgTmV3Q291bnQgPSAwOw0KPiANCj4gKyAgd2hpbGUgKEluZGV4IDwgKkNv dW50KSB7DQo+IA0KPiArICAgIEFycmF5W05ld0NvdW50XSA9IEFycmF5W0luZGV4XTsNCj4gDQo+ ICsgICAgTmV3Q291bnQrKzsNCj4gDQo+ICsgICAgSW5kZXggPSBHZXROZXh0RGlmZmVyZW50RWxl bWVudEluU29ydGVkQXJyYXkNCj4gKEluZGV4LCBBcnJheSwgKkNvdW50KTsNCj4gDQo+ICsgIH0N Cj4gDQo+ICsgICpDb3VudCA9IE5ld0NvdW50Ow0KPiANCj4gK30NCj4gDQo+ICsNCj4gDQo+ICsv KioNCj4gDQo+ICsgIFJldHVybiBUUlVFIHdoZW4gQWRkcmVzcyBpcyBpbiB0aGUgUmFuZ2UuDQo+ IA0KPiArDQo+IA0KPiArICBAcGFyYW0gQWRkcmVzcyBUaGUgYWRkcmVzcyB0byBjaGVjay4NCj4g DQo+ICsgIEBwYXJhbSBSYW5nZSAgIFRoZSByYW5nZSB0byBjaGVjay4NCj4gDQo+ICsgIEByZXR1 cm4gVFJVRSB3aGVuIEFkZHJlc3MgaXMgaW4gdGhlIFJhbmdlLg0KPiANCj4gKyoqLw0KPiANCj4g K0JPT0xFQU4NCj4gDQo+ICtBZGRyZXNzSW5SYW5nZSAoDQo+IA0KPiArICBJTiBVSU5UNjQgICAg ICAgICAgICBBZGRyZXNzLA0KPiANCj4gKyAgSU4gTVRSUl9NRU1PUllfUkFOR0UgUmFuZ2UNCj4g DQo+ICsgICkNCj4gDQo+ICt7DQo+IA0KPiArICAgIHJldHVybiAoQWRkcmVzcyA+PSBSYW5nZS5C YXNlQWRkcmVzcykgJiYgKEFkZHJlc3MNCj4gPD0gUmFuZ2UuQmFzZUFkZHJlc3MgKyBSYW5nZS5M ZW5ndGggLSAxKTsNCj4gDQo+ICt9DQo+IA0KPiArDQo+IA0KPiArLyoqDQo+IA0KPiArICBHZXQg dGhlIG92ZXJsYXAgYml0IGZsYWcuDQo+IA0KPiArDQo+IA0KPiArICBAcGFyYW0gUmF3TWVtb3J5 UmFuZ2VzICAgICBSYXcgbWVtb3J5IHJhbmdlcy4NCj4gDQo+ICsgIEBwYXJhbSBSYXdNZW1vcnlS YW5nZUNvdW50IENvdW50IG9mIHJhdyBtZW1vcnkNCj4gcmFuZ2VzLg0KPiANCj4gKyAgQHBhcmFt IEFkZHJlc3MgICAgICAgICAgICAgVGhlIGFkZHJlc3MgdG8gY2hlY2suDQo+IA0KPiArKiovDQo+ IA0KPiArVUlOVDY0DQo+IA0KPiArR2V0T3ZlcmxhcEJpdEZsYWcgKA0KPiANCj4gKyAgSU4gTVRS Ul9NRU1PUllfUkFOR0UgKlJhd01lbW9yeVJhbmdlcywNCj4gDQo+ICsgIElOIFVJTlQzMiAgICAg ICAgICAgIFJhd01lbW9yeVJhbmdlQ291bnQsDQo+IA0KPiArICBJTiBVSU5UNjQgICAgICAgICAg ICBBZGRyZXNzDQo+IA0KPiArICApDQo+IA0KPiArew0KPiANCj4gKyAgVUlOVDY0IE92ZXJsYXBC aXRGbGFnOw0KPiANCj4gKyAgVUlOVDMyIEluZGV4Ow0KPiANCj4gKyAgT3ZlcmxhcEJpdEZsYWcg PSAwOw0KPiANCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUmF3TWVtb3J5UmFuZ2VDb3Vu dDsNCj4gSW5kZXgrKykgew0KPiANCj4gKyAgICBpZiAoQWRkcmVzc0luUmFuZ2UgKEFkZHJlc3Ms DQo+IFJhd01lbW9yeVJhbmdlc1tJbmRleF0pKSB7DQo+IA0KPiArICAgICAgT3ZlcmxhcEJpdEZs YWcgfD0gKDF1bGwgPDwgSW5kZXgpOw0KPiANCj4gKyAgICB9DQo+IA0KPiArICB9DQo+IA0KPiAr DQo+IA0KPiArICByZXR1cm4gT3ZlcmxhcEJpdEZsYWc7DQo+IA0KPiArfQ0KPiANCj4gKw0KPiAN Cj4gKy8qKg0KPiANCj4gKyAgUmV0dXJuIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBmbGFncy4N Cj4gDQo+ICsNCj4gDQo+ICsgIEBwYXJhbSBGbGFnMSBGbGFnIDENCj4gDQo+ICsgIEBwYXJhbSBG bGFnMiBGbGFnIDINCj4gDQo+ICsNCj4gDQo+ICsgIEByZXR2YWwgMCAgIEZsYWcxID09IEZsYWcy DQo+IA0KPiArICBAcmV0dmFsIDEgICBGbGFnMSBpcyBhIHN1YnNldCBvZiBGbGFnMg0KPiANCj4g KyAgQHJldHZhbCAyICAgRmxhZzIgaXMgYSBzdWJzZXQgb2YgRmxhZzENCj4gDQo+ICsgIEByZXR2 YWwgMyAgIE5vIHN1YnNldCByZWxhdGlvbnMgYmV0d2VlbiBGbGFnMSBhbmQNCj4gRmxhZzIuDQo+ IA0KPiArKiovDQo+IA0KPiArVUlOVDMyDQo+IA0KPiArQ2hlY2tPdmVybGFwQml0RmxhZ3NSZWxh dGlvbiAoDQo+IA0KPiArICBJTiBVSU5UNjQgRmxhZzEsDQo+IA0KPiArICBJTiBVSU5UNjQgRmxh ZzINCj4gDQo+ICsgICkNCj4gDQo+ICt7DQo+IA0KPiArICAgIGlmIChGbGFnMSA9PSBGbGFnMikg cmV0dXJuIDA7DQo+IA0KPiArICAgIGlmICgoRmxhZzEgfCBGbGFnMikgPT0gRmxhZzIpIHJldHVy biAxOw0KPiANCj4gKyAgICBpZiAoKEZsYWcxIHwgRmxhZzIpID09IEZsYWcxKSByZXR1cm4gMjsN Cj4gDQo+ICsgICAgcmV0dXJuIDM7DQo+IA0KPiArfQ0KPiANCj4gKw0KPiANCj4gKy8qKg0KPiAN Cj4gKyAgUmV0dXJuIFRSVUUgd2hlbiB0aGUgRW5kcG9pbnQgaXMgaW4gYW55IG9mIHRoZQ0KPiBS YW5nZXMuDQo+IA0KPiArDQo+IA0KPiArICBAcGFyYW0gRW5kcG9pbnQgICAgVGhlIGVuZHBvaW50 IHRvIGNoZWNrLg0KPiANCj4gKyAgQHBhcmFtIFJhbmdlcyAgICAgIFRoZSBtZW1vcnkgcmFuZ2Vz Lg0KPiANCj4gKyAgQHBhcmFtIFJhbmdlQ291bnQgIENvdW50IG9mIG1lbW9yeSByYW5nZXMuDQo+ IA0KPiArDQo+IA0KPiArICBAcmV0dmFsIFRSVUUgIEVuZHBvaW50IGlzIGluIG9uZSBvZiB0aGUg cmFuZ2UuDQo+IA0KPiArICBAcmV0dmFsIEZBTFNFIEVuZHBvaW50IGlzIG5vdCBpbiBhbnkgb2Yg dGhlIHJhbmdlcy4NCj4gDQo+ICsqKi8NCj4gDQo+ICtCT09MRUFODQo+IA0KPiArSXNFbmRwb2lu dEluUmFuZ2VzICgNCj4gDQo+ICsgIElOIFVJTlQ2NCAgICAgICAgICAgIEVuZHBvaW50LA0KPiAN Cj4gKyAgSU4gTVRSUl9NRU1PUllfUkFOR0UgKlJhbmdlcywNCj4gDQo+ICsgIElOIFVJTlROICAg ICAgICAgICAgIFJhbmdlQ291bnQNCj4gDQo+ICsgICkNCj4gDQo+ICt7DQo+IA0KPiArICAgIFVJ TlQzMiBJbmRleDsNCj4gDQo+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUmFuZ2VDb3Vu dDsgSW5kZXgrKykgew0KPiANCj4gKyAgICAgIGlmIChBZGRyZXNzSW5SYW5nZSAoRW5kcG9pbnQs IFJhbmdlc1tJbmRleF0pKSB7DQo+IA0KPiArICAgICAgICByZXR1cm4gVFJVRTsNCj4gDQo+ICsg ICAgICB9DQo+IA0KPiArICAgIH0NCj4gDQo+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiANCj4gK30N Cj4gDQo+ICsNCj4gDQo+ICsNCj4gDQo+ICsvKioNCj4gDQo+ICsgIENvbXBhY3QgYWRqYWNlbnQg cmFuZ2VzIG9mIHRoZSBzYW1lIHR5cGUuDQo+IA0KPiArDQo+IA0KPiArICBAcGFyYW0gRGVmYXVs dFR5cGUgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgbWVtb3J5DQo+IHR5cGUuDQo+IA0KPiAr ICBAcGFyYW0gUGh5c2ljYWxBZGRyZXNzQml0cyAgICAgICAgICAgIFBoeXNpY2FsDQo+IGFkZHJl c3MgYml0cy4NCj4gDQo+ICsgIEBwYXJhbSBFZmZlY3RpdmVNdHJyTWVtb3J5UmFuZ2VzICAgICAg TWVtb3J5IHJhbmdlcw0KPiB0byBjb21wYWN0Lg0KPiANCj4gKyAgQHBhcmFtIEVmZmVjdGl2ZU10 cnJNZW1vcnlSYW5nZXNDb3VudCBSZXR1cm4gdGhlIG5ldw0KPiBjb3VudCBvZiBtZW1vcnkgcmFu Z2VzLg0KPiANCj4gKyoqLw0KPiANCj4gK1ZPSUQNCj4gDQo+ICtDb21wYWN0QW5kRXh0ZW5kRWZm ZWN0aXZlTXRyck1lbW9yeVJhbmdlcyAoDQo+IA0KPiArICBJTiAgICAgTVRSUl9NRU1PUllfQ0FD SEVfVFlQRSBEZWZhdWx0VHlwZSwNCj4gDQo+ICsgIElOICAgICBVSU5UMzIgICAgICAgICAgICAg ICAgIFBoeXNpY2FsQWRkcmVzc0JpdHMsDQo+IA0KPiArICBJTiBPVVQgTVRSUl9NRU1PUllfUkFO R0UNCj4gKipFZmZlY3RpdmVNdHJyTWVtb3J5UmFuZ2VzLA0KPiANCj4gKyAgSU4gT1VUIFVJTlRO DQo+ICpFZmZlY3RpdmVNdHJyTWVtb3J5UmFuZ2VzQ291bnQNCj4gDQo+ICsgICkNCj4gDQo+ICt7 DQo+IA0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICBNYXhBZGRyZXNzOw0KPiAN Cj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgTmV3UmFuZ2VzQ291bnRBdE1vc3Q7 DQo+IA0KPiArICBNVFJSX01FTU9SWV9SQU5HRSAgICAgICAgICAgICAqTmV3UmFuZ2VzOw0KPiAN Cj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgTmV3UmFuZ2VzQ291bnRBY3R1YWw7 DQo+IA0KPiArICBNVFJSX01FTU9SWV9SQU5HRQ0KPiAqQ3VycmVudFJhbmdlSW5OZXdSYW5nZXM7 DQo+IA0KPiArICBNVFJSX01FTU9SWV9DQUNIRV9UWVBFDQo+IEN1cnJlbnRSYW5nZVR5cGVJbk9s ZFJhbmdlczsNCj4gDQo+ICsNCj4gDQo+ICsgIE1UUlJfTUVNT1JZX1JBTkdFICAgICAgICAgICAg ICpPbGRSYW5nZXM7DQo+IA0KPiArICBNVFJSX01FTU9SWV9SQU5HRSAgICAgICAgICAgICBPbGRM YXN0UmFuZ2U7DQo+IA0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBPbGRSYW5n ZXNJbmRleDsNCj4gDQo+ICsNCj4gDQo+ICsgIE5ld1Jhbmdlc0NvdW50QWN0dWFsID0gMDsNCj4g DQo+ICsgIE5ld1Jhbmdlc0NvdW50QXRNb3N0ID0NCj4gKkVmZmVjdGl2ZU10cnJNZW1vcnlSYW5n ZXNDb3VudCArIDI7ICAgLy8gQXQgbW9zdCB3aXRoDQo+IDIgbW9yZSByYW5nZSBlbnRyaWVzLg0K PiANCj4gKyAgTmV3UmFuZ2VzICAgICAgICAgICAgPSAoTVRSUl9NRU1PUllfUkFOR0UgKikgY2Fs bG9jDQo+IChOZXdSYW5nZXNDb3VudEF0TW9zdCwgc2l6ZW9mIChNVFJSX01FTU9SWV9SQU5HRSkp Ow0KPiANCj4gKyAgT2xkUmFuZ2VzICAgICAgICAgICAgPSAqRWZmZWN0aXZlTXRyck1lbW9yeVJh bmdlczsNCj4gDQo+ICsgIGlmIChPbGRSYW5nZXNbMF0uQmFzZUFkZHJlc3MgPiAwKSB7DQo+IA0K PiArICAgIE5ld1Jhbmdlc1tOZXdSYW5nZXNDb3VudEFjdHVhbF0uQmFzZUFkZHJlc3MgPSAwOw0K PiANCj4gKyAgICBOZXdSYW5nZXNbTmV3UmFuZ2VzQ291bnRBY3R1YWxdLkxlbmd0aCAgICAgID0N Cj4gT2xkUmFuZ2VzWzBdLkJhc2VBZGRyZXNzOw0KPiANCj4gKyAgICBOZXdSYW5nZXNbTmV3UmFu Z2VzQ291bnRBY3R1YWxdLlR5cGUgICAgICAgID0NCj4gRGVmYXVsdFR5cGU7DQo+IA0KPiArICAg IE5ld1Jhbmdlc0NvdW50QWN0dWFsKys7DQo+IA0KPiArICB9DQo+IA0KPiArDQo+IA0KPiArICBP bGRSYW5nZXNJbmRleCA9IDA7DQo+IA0KPiArICB3aGlsZSAoT2xkUmFuZ2VzSW5kZXggPA0KPiAq RWZmZWN0aXZlTXRyck1lbW9yeVJhbmdlc0NvdW50KSB7DQo+IA0KPiArICAgIEN1cnJlbnRSYW5n ZVR5cGVJbk9sZFJhbmdlcyA9DQo+IE9sZFJhbmdlc1tPbGRSYW5nZXNJbmRleF0uVHlwZTsNCj4g DQo+ICsgICAgQ3VycmVudFJhbmdlSW5OZXdSYW5nZXMgPSBOVUxMOw0KPiANCj4gKyAgICBpZiAo TmV3UmFuZ2VzQ291bnRBY3R1YWwgPiAwKSAgIC8vIFdlIG5lZWQgdG8NCj4gY2hlY2sgQ3VycmVu dE5ld1JhbmdlIGZpcnN0IGJlZm9yZSBnZW5lcmF0ZSBhIG5ldw0KPiBOZXdSYW5nZS4NCj4gDQo+ ICsgICAgew0KPiANCj4gKyAgICAgIEN1cnJlbnRSYW5nZUluTmV3UmFuZ2VzID0NCj4gJk5ld1Jh bmdlc1tOZXdSYW5nZXNDb3VudEFjdHVhbCAtIDFdOw0KPiANCj4gKyAgICB9DQo+IA0KPiArICAg IGlmIChDdXJyZW50UmFuZ2VJbk5ld1JhbmdlcyAhPSBOVUxMICYmDQo+IEN1cnJlbnRSYW5nZUlu TmV3UmFuZ2VzLT5UeXBlID09DQo+IEN1cnJlbnRSYW5nZVR5cGVJbk9sZFJhbmdlcykgew0KPiAN Cj4gKyAgICAgIEN1cnJlbnRSYW5nZUluTmV3UmFuZ2VzLT5MZW5ndGggKz0NCj4gT2xkUmFuZ2Vz W09sZFJhbmdlc0luZGV4XS5MZW5ndGg7DQo+IA0KPiArICAgIH0gZWxzZSB7DQo+IA0KPiArICAg ICAgTmV3UmFuZ2VzW05ld1Jhbmdlc0NvdW50QWN0dWFsXS5CYXNlQWRkcmVzcyA9DQo+IE9sZFJh bmdlc1tPbGRSYW5nZXNJbmRleF0uQmFzZUFkZHJlc3M7DQo+IA0KPiArICAgICAgTmV3UmFuZ2Vz W05ld1Jhbmdlc0NvdW50QWN0dWFsXS5MZW5ndGggICAgICs9DQo+IE9sZFJhbmdlc1tPbGRSYW5n ZXNJbmRleF0uTGVuZ3RoOw0KPiANCj4gKyAgICAgIE5ld1Jhbmdlc1tOZXdSYW5nZXNDb3VudEFj dHVhbF0uVHlwZSAgICAgICAgPQ0KPiBDdXJyZW50UmFuZ2VUeXBlSW5PbGRSYW5nZXM7DQo+IA0K PiArICAgICAgd2hpbGUgKE9sZFJhbmdlc0luZGV4ICsgMSA8DQo+ICpFZmZlY3RpdmVNdHJyTWVt b3J5UmFuZ2VzQ291bnQgJiYNCj4gT2xkUmFuZ2VzW09sZFJhbmdlc0luZGV4ICsgMV0uVHlwZSA9 PQ0KPiBDdXJyZW50UmFuZ2VUeXBlSW5PbGRSYW5nZXMpDQo+IA0KPiArICAgICAgew0KPiANCj4g KyAgICAgICAgT2xkUmFuZ2VzSW5kZXgrKzsNCj4gDQo+ICsgICAgICAgIE5ld1Jhbmdlc1tOZXdS YW5nZXNDb3VudEFjdHVhbF0uTGVuZ3RoICs9DQo+IE9sZFJhbmdlc1tPbGRSYW5nZXNJbmRleF0u TGVuZ3RoOw0KPiANCj4gKyAgICAgIH0NCj4gDQo+ICsgICAgICBOZXdSYW5nZXNDb3VudEFjdHVh bCsrOw0KPiANCj4gKyAgICB9DQo+IA0KPiArDQo+IA0KPiArICAgIE9sZFJhbmdlc0luZGV4Kys7 DQo+IA0KPiArICB9DQo+IA0KPiArDQo+IA0KPiArICBNYXhBZGRyZXNzID0gKDF1bGwgPDwgUGh5 c2ljYWxBZGRyZXNzQml0cykgLSAxOw0KPiANCj4gKyAgT2xkTGFzdFJhbmdlID0NCj4gT2xkUmFu Z2VzWygqRWZmZWN0aXZlTXRyck1lbW9yeVJhbmdlc0NvdW50KSAtIDFdOw0KPiANCj4gKyAgQ3Vy cmVudFJhbmdlSW5OZXdSYW5nZXMgPQ0KPiAmTmV3UmFuZ2VzW05ld1Jhbmdlc0NvdW50QWN0dWFs IC0gMV07DQo+IA0KPiArICBpZiAoT2xkTGFzdFJhbmdlLkJhc2VBZGRyZXNzICsgT2xkTGFzdFJh bmdlLkxlbmd0aCAtDQo+IDEgPCBNYXhBZGRyZXNzKSB7DQo+IA0KPiArICAgIGlmIChDdXJyZW50 UmFuZ2VJbk5ld1Jhbmdlcy0+VHlwZSA9PSBEZWZhdWx0VHlwZSkNCj4gew0KPiANCj4gKyAgICAg IEN1cnJlbnRSYW5nZUluTmV3UmFuZ2VzLT5MZW5ndGggPSBNYXhBZGRyZXNzIC0NCj4gQ3VycmVu dFJhbmdlSW5OZXdSYW5nZXMtPkJhc2VBZGRyZXNzICsgMTsNCj4gDQo+ICsgICAgfSBlbHNlIHsN Cj4gDQo+ICsgICAgICBOZXdSYW5nZXNbTmV3UmFuZ2VzQ291bnRBY3R1YWxdLkJhc2VBZGRyZXNz ID0NCj4gT2xkTGFzdFJhbmdlLkJhc2VBZGRyZXNzICsgT2xkTGFzdFJhbmdlLkxlbmd0aDsNCj4g DQo+ICsgICAgICBOZXdSYW5nZXNbTmV3UmFuZ2VzQ291bnRBY3R1YWxdLkxlbmd0aCA9DQo+IE1h eEFkZHJlc3MgLQ0KPiBOZXdSYW5nZXNbTmV3UmFuZ2VzQ291bnRBY3R1YWxdLkJhc2VBZGRyZXNz ICsgMTsNCj4gDQo+ICsgICAgICBOZXdSYW5nZXNbTmV3UmFuZ2VzQ291bnRBY3R1YWxdLlR5cGUg PQ0KPiBEZWZhdWx0VHlwZTsNCj4gDQo+ICsgICAgICBOZXdSYW5nZXNDb3VudEFjdHVhbCsrOw0K PiANCj4gKyAgICB9DQo+IA0KPiArICB9DQo+IA0KPiArDQo+IA0KPiArICBmcmVlICgqRWZmZWN0 aXZlTXRyck1lbW9yeVJhbmdlcyk7DQo+IA0KPiArICAqRWZmZWN0aXZlTXRyck1lbW9yeVJhbmdl cyA9IE5ld1JhbmdlczsNCj4gDQo+ICsgICpFZmZlY3RpdmVNdHJyTWVtb3J5UmFuZ2VzQ291bnQg PQ0KPiBOZXdSYW5nZXNDb3VudEFjdHVhbDsNCj4gDQo+ICt9DQo+IA0KPiArDQo+IA0KPiArLyoq DQo+IA0KPiArICBDb2xsZWN0IGFsbCB0aGUgZW5kcG9pbnRzIGluIHRoZSByYXcgbWVtb3J5IHJh bmdlcy4NCj4gDQo+ICsNCj4gDQo+ICsgIEBwYXJhbSBFbmRwb2ludHMgICAgICAgICAgIFJldHVy biB0aGUgY29sbGVjdGVkDQo+IGVuZHBvaW50cy4NCj4gDQo+ICsgIEBwYXJhbSBFbmRQb2ludENv dW50ICAgICAgIFJldHVybiB0aGUgY291bnQgb2YNCj4gZW5kcG9pbnRzLg0KPiANCj4gKyAgQHBh cmFtIFJhd01lbW9yeVJhbmdlcyAgICAgUmF3IG1lbW9yeSByYW5nZXMuDQo+IA0KPiArICBAcGFy YW0gUmF3TWVtb3J5UmFuZ2VDb3VudCBDb3VudCBvZiByYXcgbWVtb3J5DQo+IHJhbmdlcy4NCj4g DQo+ICsqKi8NCj4gDQo+ICtWT0lEDQo+IA0KPiArQ29sbGVjdEVuZHBvaW50cyAoDQo+IA0KPiAr ICBJTiBPVVQgVUlOVDY0ICAgICAgICAqRW5kcG9pbnRzLA0KPiANCj4gKyAgSU4gT1VUIFVJTlQz MiAgICAgICAgKkVuZFBvaW50Q291bnQsDQo+IA0KPiArICBJTiBNVFJSX01FTU9SWV9SQU5HRSAq UmF3TWVtb3J5UmFuZ2VzLA0KPiANCj4gKyAgSU4gVUlOVDMyICAgICAgICAgICAgUmF3TWVtb3J5 UmFuZ2VDb3VudA0KPiANCj4gKyAgKQ0KPiANCj4gK3sNCj4gDQo+ICsgIFVJTlQzMiBJbmRleDsN Cj4gDQo+ICsgIFVJTlQzMiBSYXdSYW5nZUluZGV4Ow0KPiANCj4gKw0KPiANCj4gKyAgQVNTRVJU ICgoUmF3TWVtb3J5UmFuZ2VDb3VudCA8PCAxKSA9PQ0KPiAqRW5kUG9pbnRDb3VudCk7DQo+IA0K PiArDQo+IA0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCAqRW5kUG9pbnRDb3VudDsgSW5k ZXggKz0gMikNCj4gew0KPiANCj4gKyAgICBSYXdSYW5nZUluZGV4ID0gSW5kZXggPj4gMTsNCj4g DQo+ICsgICAgRW5kcG9pbnRzW0luZGV4XSA9DQo+IFJhd01lbW9yeVJhbmdlc1tSYXdSYW5nZUlu ZGV4XS5CYXNlQWRkcmVzczsNCj4gDQo+ICsgICAgRW5kcG9pbnRzW0luZGV4ICsgMV0gPQ0KPiBS YXdNZW1vcnlSYW5nZXNbUmF3UmFuZ2VJbmRleF0uQmFzZUFkZHJlc3MgKw0KPiBSYXdNZW1vcnlS YW5nZXNbUmF3UmFuZ2VJbmRleF0uTGVuZ3RoIC0gMTsNCj4gDQo+ICsgIH0NCj4gDQo+ICsNCj4g DQo+ICsgIHFzb3J0IChFbmRwb2ludHMsICpFbmRQb2ludENvdW50LCBzaXplb2YgKFVJTlQ2NCks DQo+IENvbXBhcmVGdW5jVWludDY0KTsNCj4gDQo+ICsgIFJlbW92ZUR1cGxpY2F0ZXNJblNvcnRl ZEFycmF5IChFbmRwb2ludHMsDQo+IEVuZFBvaW50Q291bnQpOw0KPiANCj4gK30NCj4gDQo+ICsN Cj4gDQo+ICsvKioNCj4gDQo+ICsgIENvbnZlcnQgdGhlIE1UUlIgQkFTRS9NQVNLIGFycmF5IHRv IG1lbW9yeSByYW5nZXMuDQo+IA0KPiArDQo+IA0KPiArICBAcGFyYW0gRGVmYXVsdFR5cGUgICAg ICAgICAgRGVmYXVsdCBtZW1vcnkgdHlwZS4NCj4gDQo+ICsgIEBwYXJhbSBQaHlzaWNhbEFkZHJl c3NCaXRzICBQaHlzaWNhbCBhZGRyZXNzIGJpdHMuDQo+IA0KPiArICBAcGFyYW0gUmF3TWVtb3J5 UmFuZ2VzICAgICAgUmF3IG1lbW9yeSByYW5nZXMuDQo+IA0KPiArICBAcGFyYW0gUmF3TWVtb3J5 UmFuZ2VDb3VudCAgQ291bnQgb2YgcmF3IG1lbW9yeQ0KPiByYW5nZXMuDQo+IA0KPiArICBAcGFy YW0gTWVtb3J5UmFuZ2VzICAgICAgICAgTWVtb3J5IHJhbmdlcy4NCj4gDQo+ICsgIEBwYXJhbSBN ZW1vcnlSYW5nZUNvdW50ICAgICBDb3VudCBvZiBtZW1vcnkgcmFuZ2VzLg0KPiANCj4gKyoqLw0K PiANCj4gK1ZPSUQNCj4gDQo+ICtHZXRFZmZlY3RpdmVNZW1vcnlSYW5nZXMgKA0KPiANCj4gKyAg SU4gTVRSUl9NRU1PUllfQ0FDSEVfVFlQRSBEZWZhdWx0VHlwZSwNCj4gDQo+ICsgIElOIFVJTlQz MiAgICAgICAgICAgICAgICAgUGh5c2ljYWxBZGRyZXNzQml0cywNCj4gDQo+ICsgIElOIE1UUlJf TUVNT1JZX1JBTkdFICAgICAgKlJhd01lbW9yeVJhbmdlcywNCj4gDQo+ICsgIElOIFVJTlQzMiAg ICAgICAgICAgICAgICAgUmF3TWVtb3J5UmFuZ2VDb3VudCwNCj4gDQo+ICsgIE9VVCBNVFJSX01F TU9SWV9SQU5HRSAgICAgKk1lbW9yeVJhbmdlcywNCj4gDQo+ICsgIE9VVCBVSU5UTiAgICAgICAg ICAgICAgICAgKk1lbW9yeVJhbmdlQ291bnQNCj4gDQo+ICsgICkNCj4gDQo+ICt7DQo+IA0KPiAr ICBVSU5UTiAgICAgICAgICAgICAgICAgSW5kZXg7DQo+IA0KPiArICBVSU5UMzIgICAgICAgICAg ICAgICAgQWxsRW5kUG9pbnRzQ291bnQ7DQo+IA0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAg KkFsbEVuZFBvaW50c0luY2x1c2l2ZTsNCj4gDQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICBB bGxSYW5nZVBpZWNlc0NvdW50TWF4Ow0KPiANCj4gKyAgTVRSUl9NRU1PUllfUkFOR0UgICAgICpB bGxSYW5nZVBpZWNlczsNCj4gDQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICBBbGxSYW5nZVBp ZWNlc0NvdW50QWN0dWFsOw0KPiANCj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgIE92ZXJsYXBC aXRGbGFnMTsNCj4gDQo+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICBPdmVybGFwQml0RmxhZzI7 DQo+IA0KPiArICBJTlQzMiAgICAgICAgICAgICAgICAgT3ZlcmxhcEZsYWdSZWxhdGlvbjsNCj4g DQo+ICsNCj4gDQo+ICsgIGlmIChSYXdNZW1vcnlSYW5nZUNvdW50ID09IDApIHsNCj4gDQo+ICsg ICAgTWVtb3J5UmFuZ2VzWzBdLkJhc2VBZGRyZXNzID0gMDsNCj4gDQo+ICsgICAgTWVtb3J5UmFu Z2VzWzBdLkxlbmd0aCAgICAgID0gKDF1bGwgPDwNCj4gUGh5c2ljYWxBZGRyZXNzQml0cyk7DQo+ IA0KPiArICAgIE1lbW9yeVJhbmdlc1swXS5UeXBlICAgICAgICA9IERlZmF1bHRUeXBlOw0KPiAN Cj4gKyAgICAqTWVtb3J5UmFuZ2VDb3VudCA9IDE7DQo+IA0KPiArICAgIHJldHVybjsNCj4gDQo+ ICsgIH0NCj4gDQo+ICsNCj4gDQo+ICsgIEFsbEVuZFBvaW50c0NvdW50ICAgICAgICAgPSBSYXdN ZW1vcnlSYW5nZUNvdW50IDw8DQo+IDE7DQo+IA0KPiArICBBbGxFbmRQb2ludHNJbmNsdXNpdmUg ICAgID0gY2FsbG9jDQo+IChBbGxFbmRQb2ludHNDb3VudCwgc2l6ZW9mIChVSU5UNjQpKTsNCj4g DQo+ICsgIEFsbFJhbmdlUGllY2VzQ291bnRNYXggICAgPSBSYXdNZW1vcnlSYW5nZUNvdW50ICog Mw0KPiArIDE7DQo+IA0KPiArICBBbGxSYW5nZVBpZWNlcyAgICAgICAgICAgID0gY2FsbG9jDQo+ IChBbGxSYW5nZVBpZWNlc0NvdW50TWF4LCBzaXplb2YgKE1UUlJfTUVNT1JZX1JBTkdFKSk7DQo+ IA0KPiArICBDb2xsZWN0RW5kcG9pbnRzIChBbGxFbmRQb2ludHNJbmNsdXNpdmUsDQo+ICZBbGxF bmRQb2ludHNDb3VudCwgUmF3TWVtb3J5UmFuZ2VzLA0KPiBSYXdNZW1vcnlSYW5nZUNvdW50KTsN Cj4gDQo+ICsNCj4gDQo+ICsgIGZvciAoSW5kZXggPSAwLCBBbGxSYW5nZVBpZWNlc0NvdW50QWN0 dWFsID0gMDsgSW5kZXgNCj4gPCBBbGxFbmRQb2ludHNDb3VudCAtIDE7IEluZGV4KyspIHsNCj4g DQo+ICsgICAgT3ZlcmxhcEJpdEZsYWcxID0gR2V0T3ZlcmxhcEJpdEZsYWcNCj4gKFJhd01lbW9y eVJhbmdlcywgUmF3TWVtb3J5UmFuZ2VDb3VudCwNCj4gQWxsRW5kUG9pbnRzSW5jbHVzaXZlW0lu ZGV4XSk7DQo+IA0KPiArICAgIE92ZXJsYXBCaXRGbGFnMiA9IEdldE92ZXJsYXBCaXRGbGFnDQo+ IChSYXdNZW1vcnlSYW5nZXMsIFJhd01lbW9yeVJhbmdlQ291bnQsDQo+IEFsbEVuZFBvaW50c0lu Y2x1c2l2ZVtJbmRleCArIDFdKTsNCj4gDQo+ICsgICAgT3ZlcmxhcEZsYWdSZWxhdGlvbiA9IENo ZWNrT3ZlcmxhcEJpdEZsYWdzUmVsYXRpb24NCj4gKE92ZXJsYXBCaXRGbGFnMSwgT3ZlcmxhcEJp dEZsYWcyKTsNCj4gDQo+ICsgICAgc3dpdGNoIChPdmVybGFwRmxhZ1JlbGF0aW9uKSB7DQo+IA0K PiArICAgICAgY2FzZSAwOiAgIC8vIFsxLCAyXQ0KPiANCj4gKw0KPiBBbGxSYW5nZVBpZWNlc1tB bGxSYW5nZVBpZWNlc0NvdW50QWN0dWFsXS5CYXNlQWRkcmVzcyA9DQo+IEFsbEVuZFBvaW50c0lu Y2x1c2l2ZVtJbmRleF07DQo+IA0KPiArDQo+IEFsbFJhbmdlUGllY2VzW0FsbFJhbmdlUGllY2Vz Q291bnRBY3R1YWxdLkxlbmd0aCAgICAgID0NCj4gQWxsRW5kUG9pbnRzSW5jbHVzaXZlW0luZGV4 ICsgMV0gLQ0KPiBBbGxFbmRQb2ludHNJbmNsdXNpdmVbSW5kZXhdICsgMTsNCj4gDQo+ICsgICAg ICAgIEFsbFJhbmdlUGllY2VzQ291bnRBY3R1YWwrKzsNCj4gDQo+ICsgICAgICAgIGJyZWFrOw0K PiANCj4gKyAgICAgIGNhc2UgMTogICAvLyBbMSwgMikNCj4gDQo+ICsNCj4gQWxsUmFuZ2VQaWVj ZXNbQWxsUmFuZ2VQaWVjZXNDb3VudEFjdHVhbF0uQmFzZUFkZHJlc3MgPQ0KPiBBbGxFbmRQb2lu dHNJbmNsdXNpdmVbSW5kZXhdOw0KPiANCj4gKw0KPiBBbGxSYW5nZVBpZWNlc1tBbGxSYW5nZVBp ZWNlc0NvdW50QWN0dWFsXS5MZW5ndGggICAgICA9DQo+IChBbGxFbmRQb2ludHNJbmNsdXNpdmVb SW5kZXggKyAxXSAtIDEpIC0NCj4gQWxsRW5kUG9pbnRzSW5jbHVzaXZlW0luZGV4XSArIDE7DQo+ IA0KPiArICAgICAgICBBbGxSYW5nZVBpZWNlc0NvdW50QWN0dWFsKys7DQo+IA0KPiArICAgICAg ICBicmVhazsNCj4gDQo+ICsgICAgICBjYXNlIDI6ICAgLy8gKDEsIDJdDQo+IA0KPiArDQo+IEFs bFJhbmdlUGllY2VzW0FsbFJhbmdlUGllY2VzQ291bnRBY3R1YWxdLkJhc2VBZGRyZXNzID0NCj4g QWxsRW5kUG9pbnRzSW5jbHVzaXZlW0luZGV4XSArIDE7DQo+IA0KPiArDQo+IEFsbFJhbmdlUGll Y2VzW0FsbFJhbmdlUGllY2VzQ291bnRBY3R1YWxdLkxlbmd0aCAgICAgID0NCj4gQWxsRW5kUG9p bnRzSW5jbHVzaXZlW0luZGV4ICsgMV0gLQ0KPiAoQWxsRW5kUG9pbnRzSW5jbHVzaXZlW0luZGV4 XSArIDEpICsgMTsNCj4gDQo+ICsgICAgICAgIEFsbFJhbmdlUGllY2VzQ291bnRBY3R1YWwrKzsN Cj4gDQo+ICsNCj4gDQo+ICsgICAgICAgIGlmICghSXNFbmRwb2ludEluUmFuZ2VzDQo+IChBbGxF bmRQb2ludHNJbmNsdXNpdmVbSW5kZXhdLCBBbGxSYW5nZVBpZWNlcywNCj4gQWxsUmFuZ2VQaWVj ZXNDb3VudEFjdHVhbCkpIHsNCj4gDQo+ICsNCj4gQWxsUmFuZ2VQaWVjZXNbQWxsUmFuZ2VQaWVj ZXNDb3VudEFjdHVhbF0uQmFzZUFkZHJlc3MgPQ0KPiBBbGxFbmRQb2ludHNJbmNsdXNpdmVbSW5k ZXhdOw0KPiANCj4gKw0KPiBBbGxSYW5nZVBpZWNlc1tBbGxSYW5nZVBpZWNlc0NvdW50QWN0dWFs XS5MZW5ndGggICAgICA9DQo+IDE7DQo+IA0KPiArICAgICAgICAgIEFsbFJhbmdlUGllY2VzQ291 bnRBY3R1YWwrKzsNCj4gDQo+ICsgICAgICAgIH0NCj4gDQo+ICsgICAgICAgIGJyZWFrOw0KPiAN Cj4gKyAgICAgIGNhc2UgMzogICAvLyAoMSwgMikNCj4gDQo+ICsNCj4gQWxsUmFuZ2VQaWVjZXNb QWxsUmFuZ2VQaWVjZXNDb3VudEFjdHVhbF0uQmFzZUFkZHJlc3MgPQ0KPiBBbGxFbmRQb2ludHNJ bmNsdXNpdmVbSW5kZXhdICsgMTsNCj4gDQo+ICsNCj4gQWxsUmFuZ2VQaWVjZXNbQWxsUmFuZ2VQ aWVjZXNDb3VudEFjdHVhbF0uTGVuZ3RoICAgICAgPQ0KPiAoQWxsRW5kUG9pbnRzSW5jbHVzaXZl W0luZGV4ICsgMV0gLSAxKSAtDQo+IChBbGxFbmRQb2ludHNJbmNsdXNpdmVbSW5kZXhdICsgMSkg KyAxOw0KPiANCj4gKyAgICAgICAgaWYNCj4gKEFsbFJhbmdlUGllY2VzW0FsbFJhbmdlUGllY2Vz Q291bnRBY3R1YWxdLkxlbmd0aCA9PSAwKQ0KPiAvLyBPbmx5IGluIGNhc2UgMyBjYW4gZXhpc3Rz IExlbmd0aD0wLCB3ZSBzaG91bGQgc2tpcA0KPiBzdWNoICJzZWdtZW50Ii4NCj4gDQo+ICsgICAg ICAgICAgYnJlYWs7DQo+IA0KPiArICAgICAgICBBbGxSYW5nZVBpZWNlc0NvdW50QWN0dWFsKys7 DQo+IA0KPiArICAgICAgICBpZiAoIUlzRW5kcG9pbnRJblJhbmdlcw0KPiAoQWxsRW5kUG9pbnRz SW5jbHVzaXZlW0luZGV4XSwgQWxsUmFuZ2VQaWVjZXMsDQo+IEFsbFJhbmdlUGllY2VzQ291bnRB Y3R1YWwpKSB7DQo+IA0KPiArDQo+IEFsbFJhbmdlUGllY2VzW0FsbFJhbmdlUGllY2VzQ291bnRB Y3R1YWxdLkJhc2VBZGRyZXNzID0NCj4gQWxsRW5kUG9pbnRzSW5jbHVzaXZlW0luZGV4XTsNCj4g DQo+ICsNCj4gQWxsUmFuZ2VQaWVjZXNbQWxsUmFuZ2VQaWVjZXNDb3VudEFjdHVhbF0uTGVuZ3Ro ICAgICAgPQ0KPiAxOw0KPiANCj4gKyAgICAgICAgICBBbGxSYW5nZVBpZWNlc0NvdW50QWN0dWFs Kys7DQo+IA0KPiArICAgICAgICB9DQo+IA0KPiArICAgICAgICBicmVhazsNCj4gDQo+ICsgICAg ICBkZWZhdWx0Og0KPiANCj4gKyAgICAgICAgQVNTRVJUIChGQUxTRSk7DQo+IA0KPiArICAgIH0N Cj4gDQo+ICsgIH0NCj4gDQo+ICsNCj4gDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEFs bFJhbmdlUGllY2VzQ291bnRBY3R1YWw7DQo+IEluZGV4KyspIHsNCj4gDQo+ICsgICAgRGV0ZXJt aW5lTWVtb3J5Q2FjaGVUeXBlIChEZWZhdWx0VHlwZSwNCj4gJkFsbFJhbmdlUGllY2VzW0luZGV4 XSwgUmF3TWVtb3J5UmFuZ2VzLA0KPiBSYXdNZW1vcnlSYW5nZUNvdW50KTsNCj4gDQo+ICsgIH0N Cj4gDQo+ICsNCj4gDQo+ICsgIENvbXBhY3RBbmRFeHRlbmRFZmZlY3RpdmVNdHJyTWVtb3J5UmFu Z2VzDQo+IChEZWZhdWx0VHlwZSwgUGh5c2ljYWxBZGRyZXNzQml0cywgJkFsbFJhbmdlUGllY2Vz LA0KPiAmQWxsUmFuZ2VQaWVjZXNDb3VudEFjdHVhbCk7DQo+IA0KPiArICBBU1NFUlQgKCpNZW1v cnlSYW5nZUNvdW50ID49DQo+IEFsbFJhbmdlUGllY2VzQ291bnRBY3R1YWwpOw0KPiANCj4gKyAg bWVtY3B5IChNZW1vcnlSYW5nZXMsIEFsbFJhbmdlUGllY2VzLA0KPiBBbGxSYW5nZVBpZWNlc0Nv dW50QWN0dWFsICogc2l6ZW9mDQo+IChNVFJSX01FTU9SWV9SQU5HRSkpOw0KPiANCj4gKyAgKk1l bW9yeVJhbmdlQ291bnQgPSBBbGxSYW5nZVBpZWNlc0NvdW50QWN0dWFsOw0KPiANCj4gKw0KPiAN Cj4gKyAgZnJlZSAoQWxsRW5kUG9pbnRzSW5jbHVzaXZlKTsNCj4gDQo+ICsgIGZyZWUgKEFsbFJh bmdlUGllY2VzKTsNCj4gDQo+ICt9DQo+IA0KPiBkaWZmIC0tZ2l0IGEvVWVmaUNwdVBrZy9UZXN0 L1VlZmlDcHVQa2dIb3N0VGVzdC5kc2MNCj4gYi9VZWZpQ3B1UGtnL1Rlc3QvVWVmaUNwdVBrZ0hv c3RUZXN0LmRzYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi44 YTVjNDU2ODMwDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvVWVmaUNwdVBrZy9UZXN0L1VlZmlD cHVQa2dIb3N0VGVzdC5kc2MNCj4gQEAgLTAsMCArMSwzMSBAQA0KPiArIyMgQGZpbGUNCj4gDQo+ ICsjIFVlZmlDcHVQa2cgRFNDIGZpbGUgdXNlZCB0byBidWlsZCBob3N0LWJhc2VkIHVuaXQNCj4g dGVzdHMuDQo+IA0KPiArIw0KPiANCj4gKyMgQ29weXJpZ2h0IChjKSAyMDIwLCBJbnRlbCBDb3Jw b3JhdGlvbi4gQWxsIHJpZ2h0cw0KPiByZXNlcnZlZC48QlI+DQo+IA0KPiArIyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiANCj4gKyMNCj4gDQo+ICsjIw0K PiANCj4gKw0KPiANCj4gK1tEZWZpbmVzXQ0KPiANCj4gKyAgUExBVEZPUk1fTkFNRSAgICAgICAg ICAgPSBVZWZpQ3B1UGtnSG9zdFRlc3QNCj4gDQo+ICsgIFBMQVRGT1JNX0dVSUQgICAgICAgICAg ID0gRTAwQjk1OTktNUI3NC00RkY3LUFCOUYtDQo+IDgxODNGQjEzQjJGOQ0KPiANCj4gKyAgUExB VEZPUk1fVkVSU0lPTiAgICAgICAgPSAwLjENCj4gDQo+ICsgIERTQ19TUEVDSUZJQ0FUSU9OICAg ICAgID0gMHgwMDAxMDAwNQ0KPiANCj4gKyAgT1VUUFVUX0RJUkVDVE9SWSAgICAgICAgPSBCdWls ZC9VZWZpQ3B1UGtnL0hvc3RUZXN0DQo+IA0KPiArICBTVVBQT1JURURfQVJDSElURUNUVVJFUyA9 IElBMzJ8WDY0DQo+IA0KPiArICBCVUlMRF9UQVJHRVRTICAgICAgICAgICA9IE5PT1BUDQo+IA0K PiArICBTS1VJRF9JREVOVElGSUVSICAgICAgICA9IERFRkFVTFQNCj4gDQo+ICsNCj4gDQo+ICsh aW5jbHVkZQ0KPiBVbml0VGVzdEZyYW1ld29ya1BrZy9Vbml0VGVzdEZyYW1ld29ya1BrZ0hvc3Qu ZHNjLmluYw0KPiANCj4gKw0KPiANCj4gK1tMaWJyYXJ5Q2xhc3Nlc10NCj4gDQo+ICsgIE10cnJM aWJ8VWVmaUNwdVBrZy9MaWJyYXJ5L010cnJMaWIvTXRyckxpYi5pbmYNCj4gDQo+ICsNCj4gDQo+ ICtbUGNkc1BhdGNoYWJsZUluTW9kdWxlXQ0KPiANCj4gKw0KPiBnVWVmaUNwdVBrZ1Rva2VuU3Bh Y2VHdWlkLlBjZENwdU51bWJlck9mUmVzZXJ2ZWRWYXJpYWJsDQo+IGVNdHJyc3wwDQo+IA0KPiAr DQo+IA0KPiArW0NvbXBvbmVudHNdDQo+IA0KPiArICAjDQo+IA0KPiArICAjIEJ1aWxkIEhPU1Rf QVBQTElDQVRJT04gdGhhdCB0ZXN0cyB0aGUgTXRyckxpYg0KPiANCj4gKyAgIw0KPiANCj4gKw0K PiBVZWZpQ3B1UGtnL0xpYnJhcnkvTXRyckxpYi9Vbml0VGVzdC9NdHJyTGliVW5pdFRlc3RIb3N0 DQo+IC5pbmYNCj4gDQo+IC0tDQo+IDIuMjcuMC53aW5kb3dzLjENCg0K