From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by mx.groups.io with SMTP id smtpd.web11.8744.1670724260872591868 for ; Sat, 10 Dec 2022 18:04:21 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=CBHj4XLE; spf=pass (domain: intel.com, ip: 192.55.52.115, mailfrom: min.m.xu@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1670724260; x=1702260260; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=2U36ymvlRcRjX1KLQENpDZ6MlfQQX0n7QC1h0MgJVY8=; b=CBHj4XLEeZR4zXC1mWopUNijHgyTjklVWxYcJyI487kD64sXXH7bGxiY G7qKmuPxfn/gkI0k5CkNIWUnDlBbDFbbIa+4+BRVmzvPS1gOkoEoWGsR6 lq1hkE3hEd2oK4Xv+yhFmQ5sHz9bca4/tr5jHdADVE1APecTQ3ph2RyNW AqEi0omdtPHhtbO7QXwACdyrJ3EWB8DTOTjdpWL1LriqBdN807DZyZcqE yNjvsMNJtkXxyMtWUomg6ozZZkC2kwDiqqqeZCv32n5D7TudBCeYPuEGc eu/DIIzTMv+NhR6j7WVTD7gc3L963g6BkYf0V7tEWQRZZ0iwjc5vSr2da A==; X-IronPort-AV: E=McAfee;i="6500,9779,10557"; a="317688630" X-IronPort-AV: E=Sophos;i="5.96,235,1665471600"; d="scan'208";a="317688630" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Dec 2022 18:04:20 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10557"; a="716407459" X-IronPort-AV: E=Sophos;i="5.96,235,1665471600"; d="scan'208";a="716407459" Received: from fmsmsx601.amr.corp.intel.com ([10.18.126.81]) by fmsmga004.fm.intel.com with ESMTP; 10 Dec 2022 18:04:20 -0800 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16; Sat, 10 Dec 2022 18:04:19 -0800 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16 via Frontend Transport; Sat, 10 Dec 2022 18:04:19 -0800 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.105) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.16; Sat, 10 Dec 2022 18:04:19 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=c/2l8wxbu0KQVTOQTkS/ZRAh67La6QKJxx86ZtOQoOo2dNIOPlZQaVlyG4NbBmBd6nV0qb/ZqlWBNjHysV/F5BRCc4EYVXb5pyty89own95Nc58ANXS+ca4Hreqd6J5NpAEgaQUSi7uw39mBs5ZokynuUN422f2Kpm9xyrPvkduh5boT71HFqErXOJL8Eu0QSy+sk5SYDhD1QTZA6805k+rEiDveAwmA75CCi/aMTj1h+26aJNVJ/wk07D58mxaXOHQwBVq9jF5a/WrEfPiSb5/LSGQh0IkAPhlrbw7XfDpi2pLzmurq2DiYtAe9zmKUGNgYyHjcXg2OYAGzZzZD9g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=2U36ymvlRcRjX1KLQENpDZ6MlfQQX0n7QC1h0MgJVY8=; b=Tx7jzwYFnh/USTcM1COlU8QgJxyOyUV4OaHa+uDImZHV9ojSaHaQk9iCzrjkysjKluQXPWCW2NQj78kHewCcUGkbHAdfTC7LHrxww7L6z2cHkZ3Tq3D8WtrohbA2igDEf4S57G7/UQvmBfdcdZ6+7xoJ//thVSELKCyexO18Ql5RiNBlWip+fWhonb1asaGO1XF5lcFm0A65y6QdyrEVvAcQ0qIce1oURPuUzwZWHPcTWZ7pMuYG6H9ucabVvrzDNTpPnNl2QzlU4MdKCwvX5fD2F9WN0W61DTRUUmk/Df8SbGoz2oR5ACysZsRdtb5ePwDknoJWHWkDn39cYzO4sQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from SJ0PR11MB5069.namprd11.prod.outlook.com (2603:10b6:a03:2ad::6) by SA1PR11MB6942.namprd11.prod.outlook.com (2603:10b6:806:2bf::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5880.19; Sun, 11 Dec 2022 02:04:16 +0000 Received: from SJ0PR11MB5069.namprd11.prod.outlook.com ([fe80::10be:d81f:bb30:52d0]) by SJ0PR11MB5069.namprd11.prod.outlook.com ([fe80::10be:d81f:bb30:52d0%5]) with mapi id 15.20.5880.014; Sun, 11 Dec 2022 02:04:16 +0000 From: "Min Xu" To: "Yao, Jiewen" , Tom Lendacky , "devel@edk2.groups.io" CC: "Aktas, Erdem" , James Bottomley , Gerd Hoffmann Subject: Re: [PATCH V1 1/3] OvmfPkg/IoMmuDxe: Reserve shared memory region for DMA operation Thread-Topic: [PATCH V1 1/3] OvmfPkg/IoMmuDxe: Reserve shared memory region for DMA operation Thread-Index: AQHZCIDf65nI8VwxFU+F7GaWtx+ds65fgcUAgAAJM4CABhkIAIACVI/w Date: Sun, 11 Dec 2022 02:04:16 +0000 Message-ID: References: <20221205080853.356-1-min.m.xu@intel.com> <20221205080853.356-2-min.m.xu@intel.com> <73a15a50-7657-479f-0cf8-6b8ef44db0cb@amd.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: SJ0PR11MB5069:EE_|SA1PR11MB6942:EE_ x-ms-office365-filtering-correlation-id: 111a6c16-13f3-4aad-8db6-08dadb1c01df x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: OAiV5ayALEf23pAEFzQ/8hA/egCejFWKUhks0buNQ3bRKiAni3FmTtJlrtV/AJf8N3sXftv6jLQiozZHBS6ORj3W2iUXXrHysB3XlbN5wjbMPzmoNqRb6NwAnmLjA1n2k8ddTfj4Kdu/1QwJrmCM3JMV//BFsPYSRPFiuC4593XT5pKFKaTRHLZkRlzoTUzIfMoGQP7AqHuORhHCzccRmaT78rgKPDN0mpQOeXgPiMpBiibG8Fj+9JNz/6vmO9MWXIAdwhjUwWvIbB+OpHd3uEHrTczG5o8nhSV8e302l8PULOD6WKqIgTcPb9pp//z5jwc2rwoMnXSOCmFGZjZfhXWswsojwOJmwnxmDPK1aISsVoQectBWl8nAVjLAfmsloMtkC7/nZTSUKTLhIEwRZhQQd36eynEmGuiGrZErH55d/+B+GWGmTLSsWQKOSnQer7ZkVcfyooswOMhDRBglOUr0Bm5ire31OtgQ9gtlyASWG8eA6D7rXvol4iQNK2FyeXwUb01gdrjiTsltPBP+YzL3t6ecIa5NNtHA3M1CDdXU0+PXZuUIOp2mh7MBxXGBeNm5UcAnTD+JFDJyAl6tEtbAc7BuB2VGgrJPypwvDgH+EaqM0HkqB/tPiEYv4oKaV110WoSHFpNfeJxb1ErKAmrU+/lO4ZO3lCawf334YwHchYTA8uSbuZDuRVs3ofpxH9bJzv/oLbD2dp11GrJtgoti5evFpXtaihPeqdfKk9g= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SJ0PR11MB5069.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(6029001)(136003)(366004)(376002)(346002)(39860400002)(396003)(451199015)(478600001)(966005)(86362001)(5660300002)(41300700001)(52536014)(71200400001)(53546011)(55016003)(9686003)(6506007)(7696005)(26005)(316002)(54906003)(110136005)(38100700002)(122000001)(186003)(66556008)(66946007)(4326008)(8936002)(66476007)(33656002)(8676002)(64756008)(66446008)(76116006)(30864003)(2906002)(83380400001)(82960400001)(38070700005)(559001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?SDJObTdLMmVaWFl3TnZ0VldYa1FvNTdML1pMd09jYmZSbytOQWp0OGxsODI3?= =?utf-8?B?cGxNUWlPd0Q5VW1pODhzcWVpQ05odW96b0F0QW1jMXhnNlBBSTlVYWhFamdT?= =?utf-8?B?L2dvc0JaN3BjZExBb2c4c05vUW5QV3hGTk9hYWhlaVcrbzErOXFCVXozeGJx?= =?utf-8?B?U2tmclFqdU5UMjNISlVDTWh0VTVnZStGMk94MDJrY2MzOEpvS2tYUW8zc1Ry?= =?utf-8?B?dTVNb2ZLZVVxZGRHVE9XL0VoZ29zZDFGQ0MxeW5TUEx6QnB0bkVoK1Btck5P?= =?utf-8?B?UDBYSmEwb0pFczlvRDVxMjdFdzQwOXlmb0FhRFZyRGZXOXhIRy93YnNOajUw?= =?utf-8?B?MGkzTnh2RCttdXFPT0Vwem5QbUI5UFlvZ0ZzSkF3WVB4amxDTnRWTzVIclA0?= =?utf-8?B?UEp1ZVQwcWxOR1JJTDhnMGZ6dU5yS1RMcW1OVTlML2phKzNTOVRWbVRQblk1?= =?utf-8?B?Q2ZhMWp6NndRUG8vc1poQXFndVdsR0FGWkVKNkFGY0M3bmNzdHA0NzlqZE1G?= =?utf-8?B?NkMyNlN4M05rMTJmclJaT1ZYTVMvdSs5aVQzNXg0TDdqbnVZMXh1Y3JRbkhG?= =?utf-8?B?UzM1RE1Ganp6dlpEL0JRSTQ2cnZTWXFic3ZXWm5UaGh4SE1LZ2FLVkJST2Yv?= =?utf-8?B?L2NNQXNmVUFGWU9mVkpYZE5FdmVHZHdhc2tVVDcyUzZySGtYRG12NEVKVmdv?= =?utf-8?B?K01CV0lYSFhNV0J6ZUNQTGcvQXM3TEJ2TkkzR2VyMDZ2c1FZWjd5NXNqSGpJ?= =?utf-8?B?d09SOUh4dGVCMFpTTHJzMXFyaFhLM21CTjF0SjV6OUJMSnl4cFArZWJMWS9E?= =?utf-8?B?VjZ1M2VFb2l3a0l0T0wzanAvR0JQRjhRdGN3OTMraFp0b0NLKzZSMWpWb245?= =?utf-8?B?bnpWejExWU5wNC9DaTlTVlVDSTE3bU5QT3dFZ1hGMkxXa2lkVTZ2TGludU9S?= =?utf-8?B?aGtwVzNLeFR1Z1hVMlU0cjc5azE5VEQvaTIreUV0bVhkVVhQRlQ2TnJhUTc2?= =?utf-8?B?aVVyY21WRUR1QzBRV0Y3Y3l5TnI4VjBCajA0RU4vL1VtaWVraWVlS3dNTjJ0?= =?utf-8?B?eUZ5bGlrTTBDK01WUVQ1TUdBSmo5K3dCOW1XRWtqdVpnaW1JVURQbDc4UVM0?= =?utf-8?B?ZVVoQTNYZ2dYRXBOYm14cW9DNC8wZ3FpKzE2OXZFcnJWTWF1Mmh2Y1I0NE9K?= =?utf-8?B?RWU5Q3BCTHl5bm05ME5YUFNSNldUV2Rhb0hIdjBpOVFmY09qaFFZWXJWZklC?= =?utf-8?B?VXdzWWxpdWp1bTdaK05OSTAvUTFKVnY5QnBVaTlQWkd2dTVUenI0MklkL3VQ?= =?utf-8?B?TjQ4Y3BQWGxsRVd4Sm1tb2VqV1lEcTZoVWpZVURVMFE2eFROZFptYVdwRmR3?= =?utf-8?B?SDVvS1gyYjF4dUdVWU9oamdLTW1scnhPaFAyR1JGb2luVTQ2Y1h3aDBTai9n?= =?utf-8?B?ME1lcSt0MTlUMWsrWEZVY0FzVGhremhGd1RXU2JacEEwVkxyWU5DZmVuK3dr?= =?utf-8?B?VlllOEU2WmJrMzhOWVVBN3NsK1ZHMkdCd2NPQWxtcjNzYzVhSFBCc3d0cktH?= =?utf-8?B?aUVrQlE1UGU2TG81Si9wamEyV0NhMDVxaGdqTU0xV3VpWXpQaGRDbHZUMUlm?= =?utf-8?B?SldyV3RxS0NWZGQvMFVVM3RlWE9BN0lBcnNtSStCVkZyOHpqNEhSNEhvdnB5?= =?utf-8?B?aWhJMHczS1c1Y2tXNGNUWUhiQlM4UWo2WWR1c05pUElMTkVOejBzY2RjT0xF?= =?utf-8?B?clRrY25FOHp4SXNUUGZOS3BuYURyc0VvamdMWWZnNVBMSXQzenlFRURKTC9P?= =?utf-8?B?eENsc1FyYVVDeUZLbVV5UmNXaGE1WVdLMU8zQTdxc0dqdnBWZk1XUUVCaE5u?= =?utf-8?B?Sm51dmFqVFVVeHBCZGJQMjZIeHFqMnVkdE1mbk5tNUhPQmp3Z25nVTFoWTBV?= =?utf-8?B?cXozRG80YUtEN09RMWVpWjFPMmthTFc4Y0I3a1o2WG5vOTRYWWJoQ093SFRB?= =?utf-8?B?Mk1VeTE5TFdpWmdrN2c4ZTN1USt5SjQ0YlhOdUpBTG42OU9zbUZ3Zmk0S3do?= =?utf-8?B?S2d4U0Y3U25hRnNIdU50aWhHODRZcG5xNlVKdWJMa3BOQjQ4QlQzRitPQ0N6?= =?utf-8?Q?DeHCz1mKGJC8YQd9zMrksrDkC?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SJ0PR11MB5069.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 111a6c16-13f3-4aad-8db6-08dadb1c01df X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Dec 2022 02:04:16.2872 (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: V94mHXGqwMHLcFzTXVDLMgT5CJD6pel+VsmssCyKlQUcBC9dOn4kL5nCTxmt4cT1fPkwzTBxamTyfoBXt/HbHQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR11MB6942 Return-Path: min.m.xu@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 U3VyZSBJIHdpbGwgYWRkIG1vcmUgZGVzY3JpcHRpb24gaW4gdGhlIG5leHQgdmVyc2lvbi4gVGhh bmtzIGZvciB0aGUgY29tbWVudHMuDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4g RnJvbTogWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwuY29tPg0KPiBTZW50OiBGcmlkYXks IERlY2VtYmVyIDksIDIwMjIgMTA6MjggUE0NCj4gVG86IFRvbSBMZW5kYWNreSA8dGhvbWFzLmxl bmRhY2t5QGFtZC5jb20+OyBYdSwgTWluIE0NCj4gPG1pbi5tLnh1QGludGVsLmNvbT47IGRldmVs QGVkazIuZ3JvdXBzLmlvDQo+IENjOiBBa3RhcywgRXJkZW0gPGVyZGVtYWt0YXNAZ29vZ2xlLmNv bT47IEphbWVzIEJvdHRvbWxleQ0KPiA8amVqYkBsaW51eC5pYm0uY29tPjsgR2VyZCBIb2ZmbWFu biA8a3JheGVsQHJlZGhhdC5jb20+OyBZYW8sIEppZXdlbg0KPiA8amlld2VuLnlhb0BpbnRlbC5j b20+DQo+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggVjEgMS8zXSBPdm1mUGtnL0lvTW11RHhlOiBSZXNl cnZlIHNoYXJlZCBtZW1vcnkNCj4gcmVnaW9uIGZvciBETUEgb3BlcmF0aW9uDQo+IA0KPiBIaSBN aW4NCj4gVGhhbmtzIGZvciB0aGUgY29udHJpYnV0aW9uLg0KPiBJdCBpcyBnb29kIHBlcmZvcm1h bmNlIGltcHJvdmVtZW50Lg0KPiANCj4gV291bGQgeW91IHBsZWFzZSBhZGQgbW9yZSBkZXNjcmlw dGlvbiBmb3IgYmVsb3cgUmVzZXJ2ZWRNZW1SYW5nZXM/DQo+IC0tLS0tLS0tLQ0KPiBTVEFUSUMg SU9NTVVfUkVTRVJWRURfTUVNX1JBTkdFICBtUmVzZXJ2ZWRNZW1SYW5nZXNbXSA9IHsNCj4gLS0t LS0tLS0tDQo+IFBsZWFzZSBhZGQgY29tbWVudCB0byBkZXNjcmliZToNCj4gMSkgSG93IHRoZSBw cmUtYWxsb2NhdGVkIG1lbW9yeSBpcyBtYW5hZ2VkPw0KPiAyKSBXaGF0IGlmIHRoZSBwcmUtYWxs b2NhdGVkIG1lbW9yeSBpcyB1c2VkIHVwPw0KPiANCj4gDQo+IA0KPiBXaXRoIGNvbW1lbnQgY2hh bmdlLCBwYXRjaCAxfjMgZnJvbSBNaW4gWHU6IHJldmlld2VkLWJ5IEppZXdlbiBZYW8NCj4gPEpp ZXdlbi55YW9AaW50ZWwuY29tPg0KPiANCj4gU0VWIHBhdGNoIChPdm1mUGtnL0lvTW11RHhlOiBB ZGQgU0VWIHN1cHBvcnQgZm9yIHJlc2VydmVkIHNoYXJlZA0KPiBtZW1vcnkpIGZyb20gVG9tIExl bmRhY2t5OiBhY2tlZC1ieTogSmlld2VuIFlhbyA8amlld2VuLnlhb0BpbnRlbC5jb20+DQo+IA0K PiBUaGFuayB5b3UNCj4gWWFvLCBKaWV3ZW4NCj4gDQo+IA0KPiA+IC0tLS0tT3JpZ2luYWwgTWVz c2FnZS0tLS0tDQo+ID4gRnJvbTogWWFvLCBKaWV3ZW4NCj4gPiBTZW50OiBUdWVzZGF5LCBEZWNl bWJlciA2LCAyMDIyIDE6MjEgQU0NCj4gPiBUbzogVG9tIExlbmRhY2t5IDx0aG9tYXMubGVuZGFj a3lAYW1kLmNvbT47IFh1LCBNaW4gTQ0KPiA+IDxtaW4ubS54dUBpbnRlbC5jb20+OyBkZXZlbEBl ZGsyLmdyb3Vwcy5pbw0KPiA+IENjOiBBa3RhcywgRXJkZW0gPGVyZGVtYWt0YXNAZ29vZ2xlLmNv bT47IEphbWVzIEJvdHRvbWxleQ0KPiA+IDxqZWpiQGxpbnV4LmlibS5jb20+OyBHZXJkIEhvZmZt YW5uIDxrcmF4ZWxAcmVkaGF0LmNvbT4NCj4gPiBTdWJqZWN0OiBSRTogW1BBVENIIFYxIDEvM10g T3ZtZlBrZy9Jb01tdUR4ZTogUmVzZXJ2ZSBzaGFyZWQgbWVtb3J5DQo+ID4gcmVnaW9uIGZvciBE TUEgb3BlcmF0aW9uDQo+ID4NCj4gPiBJIHN1Z2dlc3QgaXQgYmUgaW4gc2FtZSBQUiwgYW5kIGRp ZmZlcmVudCBwYXRjaC4gKEUuZy4gdGhlIGxhc3Qgb25lDQo+ID4gZm9yIFNFVikNCj4gPg0KPiA+ DQo+ID4NCj4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiBGcm9tOiBUb20g TGVuZGFja3kgPHRob21hcy5sZW5kYWNreUBhbWQuY29tPg0KPiA+ID4gU2VudDogVHVlc2RheSwg RGVjZW1iZXIgNiwgMjAyMiAxMjo0OCBBTQ0KPiA+ID4gVG86IFh1LCBNaW4gTSA8bWluLm0ueHVA aW50ZWwuY29tPjsgZGV2ZWxAZWRrMi5ncm91cHMuaW8NCj4gPiA+IENjOiBBa3RhcywgRXJkZW0g PGVyZGVtYWt0YXNAZ29vZ2xlLmNvbT47IEphbWVzIEJvdHRvbWxleQ0KPiA+ID4gPGplamJAbGlu dXguaWJtLmNvbT47IFlhbywgSmlld2VuIDxqaWV3ZW4ueWFvQGludGVsLmNvbT47IEdlcmQNCj4g PiA+IEhvZmZtYW5uIDxrcmF4ZWxAcmVkaGF0LmNvbT4NCj4gPiA+IFN1YmplY3Q6IFJlOiBbUEFU Q0ggVjEgMS8zXSBPdm1mUGtnL0lvTW11RHhlOiBSZXNlcnZlIHNoYXJlZA0KPiA+IG1lbW9yeQ0K PiA+ID4gcmVnaW9uIGZvciBETUEgb3BlcmF0aW9uDQo+ID4gPg0KPiA+ID4gT24gMTIvNS8yMiAw MjowOCwgTWluIFh1IHdyb3RlOg0KPiA+ID4gPiBGcm9tOiBNaW4gTSBYdSA8bWluLm0ueHVAaW50 ZWwuY29tPg0KPiA+ID4gPg0KPiA+ID4gPiBCWjogaHR0cHM6Ly9idWd6aWxsYS50aWFub2NvcmUu b3JnL3Nob3dfYnVnLmNnaT9pZD00MTcxDQo+ID4gPiA+DQo+ID4gPiA+IEEgdHlwaWNhbCBRRU1V IGZ3X2NmZyByZWFkIGJ5dGVzIHdpdGggSU9NTVUgZm9yIHRkIGd1ZXN0IGlzIHRoYXQ6DQo+ID4g PiA+IChRZW11RndDZmdSZWFkQnl0ZXNAUWVtdUZ3Q2ZnTGliLmMgaXMgdGhlIGV4YW1wbGUpDQo+ ID4gPiA+IDEpIEFsbG9jYXRlIERNQSBBY2Nlc3MgYnVmZmVyDQo+ID4gPiA+IDIpIE1hcCBhY3R1 YWwgZGF0YSBidWZmZXINCj4gPiA+ID4gMykgc3RhcnQgdGhlIHRyYW5zZmVyIGFuZCB3YWl0IGZv ciB0aGUgdHJhbnNmZXIgdG8gY29tcGxldGUNCj4gPiA+ID4gNCkgRnJlZSBETUEgQWNjZXNzIGJ1 ZmZlcg0KPiA+ID4gPiA1KSBVbi1tYXAgYWN0dWFsIGRhdGEgYnVmZmVyDQo+ID4gPiA+DQo+ID4g PiA+IEluIHN0ZXAgMS8yLCBQcml2YXRlIG1lbW9yaWVzIGFyZSBhbGxvY2F0ZWQsIGNvbnZlcnRl ZCB0byBzaGFyZWQNCj4gPiA+IG1lbW9yaWVzLg0KPiA+ID4gPiBJbiBTdGVwIDQvNSB0aGUgc2hh cmVkIG1lbW9yaWVzIGFyZSBjb252ZXJ0ZWQgdG8gcHJpdmF0ZSBtZW1vcmllcw0KPiA+IGFuZA0K PiA+ID4gPiBhY2NlcHRlZCBhZ2Fpbi4gVGhlIGZpbmFsIHN0ZXAgaXMgdG8gZnJlZSB0aGUgcGFn ZXMuDQo+ID4gPiA+DQo+ID4gPiA+IFRoaXMgaXMgdGltZS1jb25zdW1pbmcgYW5kIGltcGFjdHMg dGQgZ3Vlc3QncyBib290IHBlcmYgKGJvdGgNCj4gPiA+ID4gZGlyZWN0DQo+ID4gYm9vdA0KPiA+ ID4gPiBhbmQgZ3J1YiBib290KSBiYWRseS4NCj4gPiA+ID4NCj4gPiA+ID4gSW4gYSB0eXBpY2Fs IGdydWIgYm9vdCwgdGhlcmUgYXJlIGFib3V0IDUwMDAgY2FsbHMgb2YgcGFnZQ0KPiA+ID4gPiBh bGxvY2F0aW9uIGFuZCBwcml2YXRlL3NoYXJlIGNvbnZlcnNpb24uIE1vc3Qgb2YgcGFnZSBzaXpl IGlzIGxlc3MgdGhhbg0KPiAzMktCLg0KPiA+ID4gPg0KPiA+ID4gPiBUaGlzIHBhdGNoIGFsbG9j YXRlcyBhIG1lbW9yeSByZWdpb24gYW5kIGluaXRpYWxpemVzIGl0IGludG8NCj4gPiA+ID4gcGll Y2VzIG9mIG1lbW9yeSB3aXRoIGRpZmZlcmVudCBzaXplcy4gQSBwaWVjZSBvZiBzdWNoIG1lbW9y eSBjb25zaXN0cw0KPiBvZiAyIHBhcnRzOg0KPiA+ID4gPiB0aGUgZmlyc3QgcGFnZSBpcyBvZiBw cml2YXRlIG1lbW9yeSwgYW5kIHRoZSBvdGhlciBwYWdlcyBhcmUNCj4gPiA+ID4gc2hhcmVkIG1l bW9yeS4gVGhpcyBpcyB0byBtZWV0IHRoZSBsYXlvdXQgb2YgY29tbW9uIGJ1ZmZlci4NCj4gPiA+ ID4NCj4gPiA+ID4gV2hlbiBhbGxvY2F0aW5nIGJvdW5jZSBidWZmZXIgaW4gSW9NbXVNYXAoKSwN Cj4gPiA+IElvTW11QWxsb2NhdGVCb3VuY2VCdWZmZXIoKQ0KPiA+ID4gPiBpcyBjYWxsZWQgdG8g YWxsb2NhdGUgdGhlIGJ1ZmZlci4gQWNjb3JkaW5nbHkgd2hlbiBmcmVlaW5nIGJvdW5jZQ0KPiA+ ID4gPiBidWZmZXIgaW4gSW9NbXVVbm1hcFdvcmtlcigpLCBJb01tdUZyZWVCb3VuY2VCdWZmZXIo KSBpcyBjYWxsZWQNCj4gdG8NCj4gPiA+ID4gZnJlZQ0KPiA+IHRoZQ0KPiA+ID4gPiBib3VuY2Ug YnVmZmVyLiBDb21tb25CdWZmZXIgaXMgYWxsb2NhdGVkIGJ5DQo+ID4gPiBJb01tdUFsbG9jYXRl Q29tbW9uQnVmZmVyDQo+ID4gPiA+IGFuZCBhY2NvcmRpbmdseSBmcmVlZCBieSBJb01tdUZyZWVD b21tb25CdWZmZXIuDQo+ID4gPiA+DQo+ID4gPiA+IFRoaXMgZmVhdHVyZSBpcyB0ZXN0ZWQgaW4g SW50ZWwgVERYIHByZS1wcm9kdWN0aW9uIHBsYXRmb3JtLiBJdA0KPiA+ID4gPiBzYXZlcyB1cCB0 byBodW5kcmVkcyBvZiBtcyBpbiBhIGdydWIgYm9vdC4NCj4gPiA+DQo+ID4gPiBUaGlzIGNyYXNo ZXMgU0VWIGd1ZXN0cy4gSSBwcmVzdW1lIGJlY2F1c2UgdGhlIGNhbGwgdG8NCj4gPiA+IElvTW11 UmVsZWFzZVJlc2VydmVkU2hhcmVkTWVtKCkgaXMgbm90IGJyYWNrZXRlZCBieSBhIGNoZWNrIGZv ciBURFguDQo+ID4gPg0KPiA+ID4gSSBwbGFuIHRvIGFkZCBzdXBwb3J0IGZvciBTRVYsIHdoaWNo IHdvdWxkIGF2b2lkIHRoZSBjcmFzaCwgbm90IHN1cmUNCj4gPiA+IGlmIHlvdSB3YW50IHRvIGlu dGVncmF0ZSBpdCBpbnRvIGEgc2luZ2xlIHNlcmllcyBvciBub3QuIEhlcmUncyB0aGUNCj4gPiA+ IHBhdGNoIEkgd2FzIGxvb2tpbmcgdG8gYWRkIHRoYXQgc2hvdWxkIGJlIHByZXR0eSBlYXN5IHRv IGludGVncmF0ZS4NCj4gPiA+IExldCBtZSBrbm93IGlmIHlvdSB3b3VsZCBsaWtlIHRvIGludGVn cmF0ZSBpdCBpbiB5b3VyIHNlcmllcyBvciBqdXN0DQo+ID4gPiBoYXZlIG1lIHN1Ym1pdCBpdCBh cyBhIHJlcGx5IHRvIHlvdXIgc2VyaWVzOg0KPiA+ID4NCj4gPiA+DQo+ID4gPiBPdm1mUGtnL0lv TW11RHhlOiBBZGQgU0VWIHN1cHBvcnQgZm9yIHJlc2VydmVkIHNoYXJlZCBtZW1vcnkNCj4gPiA+ DQo+ID4gPiBGcm9tOiBUb20gTGVuZGFja3kgPHRob21hcy5sZW5kYWNreUBhbWQuY29tPg0KPiA+ ID4NCj4gPiA+IEFkZCBzdXBwb3J0IHRvIHVzZSB0aGUgcmVzZXJ2ZWQgc2hhcmVkIG1lbW9yeSB3 aXRoaW4gdGhlIElvTW11DQo+ID4gbGlicmFyeS4NCj4gPiA+IFRoaXMgaW1wcm92ZXMgYm9vdCB0 aW1lcyBmb3IgYWxsIFNFViBndWVzdHMsIHdpdGggU0VWLVNOUCBiZW5lZml0aW5nDQo+ID4gPiB0 aGUgbW9zdCBhcyBpdCBhdm9pZHMgdGhlIHBhZ2Ugc3RhdGUgY2hhbmdlIGNhbGwgdG8gdGhlIGh5 cGVydmlzb3IuDQo+ID4gPg0KPiA+ID4gU2lnbmVkLW9mZi1ieTogVG9tIExlbmRhY2t5IDx0aG9t YXMubGVuZGFja3lAYW1kLmNvbT4NCj4gPiA+IC0tLQ0KPiA+ID4gICBPdm1mUGtnL0lvTW11RHhl L0NjSW9NbXUuYyAgICAgfCAgIDgyICsrKysrKysrKysrKysrKysrKysrLS0tLS0tLQ0KPiA+IC0t DQo+ID4gPiAtLS0tLS0tLS0tLQ0KPiA+ID4gICBPdm1mUGtnL0lvTW11RHhlL0lvTW11QnVmZmVy LmMgfCAgIDU0ICsrKysrKysrKysrKysrKysrKysrLS0tLS0NCj4gPiAtDQo+ID4gPiAgIDIgZmls ZXMgY2hhbmdlZCwgODMgaW5zZXJ0aW9ucygrKSwgNTMgZGVsZXRpb25zKC0pDQo+ID4gPg0KPiA+ ID4gZGlmZiAtLWdpdCBhL092bWZQa2cvSW9NbXVEeGUvQ2NJb01tdS5jDQo+IGIvT3ZtZlBrZy9J b01tdUR4ZS9DY0lvTW11LmMNCj4gPiA+IGluZGV4IDE0NzlhZjQ2OTg4MS4uN2MyODQzY2QyMzhh IDEwMDY0NA0KPiA+ID4gLS0tIGEvT3ZtZlBrZy9Jb01tdUR4ZS9DY0lvTW11LmMNCj4gPiA+ICsr KyBiL092bWZQa2cvSW9NbXVEeGUvQ2NJb01tdS5jDQo+ID4gPiBAQCAtMjIzLDMwICsyMjMsMzIg QEAgSW9NbXVNYXAgKA0KPiA+ID4gICAgICAgICBnb3RvIEZyZWVNYXBJbmZvOw0KPiA+ID4gICAg IH0NCj4gPiA+DQo+ID4gPiAtICBpZiAoQ0NfR1VFU1RfSVNfU0VWIChQY2RHZXQ2NA0KPiA+ID4g KFBjZENvbmZpZGVudGlhbENvbXB1dGluZ0d1ZXN0QXR0cikpKQ0KPiA+IHsNCj4gPiA+ICsgIGlm IChNYXBJbmZvLT5SZXNlcnZlZE1lbUJpdG1hcCA9PSAwKSB7DQo+ID4gPiAgICAgICAvLw0KPiA+ ID4gLSAgICAvLyBDbGVhciB0aGUgbWVtb3J5IGVuY3J5cHRpb24gbWFzayBvbiB0aGUgcGxhaW50 ZXh0IGJ1ZmZlci4NCj4gPiA+IC0gICAgLy8NCj4gPiA+IC0gICAgU3RhdHVzID0gTWVtRW5jcnlw dFNldkNsZWFyUGFnZUVuY01hc2sgKA0KPiA+ID4gLSAgICAgICAgICAgICAgIDAsDQo+ID4gPiAt ICAgICAgICAgICAgICAgTWFwSW5mby0+UGxhaW5UZXh0QWRkcmVzcywNCj4gPiA+IC0gICAgICAg ICAgICAgICBNYXBJbmZvLT5OdW1iZXJPZlBhZ2VzDQo+ID4gPiAtICAgICAgICAgICAgICAgKTsN Cj4gPiA+IC0gIH0gZWxzZSBpZiAoQ0NfR1VFU1RfSVNfVERYIChQY2RHZXQ2NA0KPiA+ID4gKFBj ZENvbmZpZGVudGlhbENvbXB1dGluZ0d1ZXN0QXR0cikpKSB7DQo+ID4gPiAtICAgIC8vDQo+ID4g PiAtICAgIC8vIFNldCB0aGUgbWVtb3J5IHNoYXJlZCBiaXQuDQo+ID4gPiAgICAgICAvLyBJZiBN YXBJbmZvLT5SZXNlcnZlZE1lbUJpdG1hcCBpcyAwLCBpdCBtZWFucyB0aGUgYm91bmNlDQo+ID4g PiBidWZmZXINCj4gPiBpcw0KPiA+ID4gbm90IGFsbG9jYXRlZA0KPiA+ID4gICAgICAgLy8gZnJv bSB0aGUgcHJlLWFsbG9jYXRlZCBzaGFyZWQgbWVtb3J5LCBzbyBpdCBtdXN0IGJlDQo+ID4gPiBj b252ZXJ0ZWQgdG8gc2hhcmVkIG1lbW9yeSBoZXJlLg0KPiA+ID4gICAgICAgLy8NCj4gPiA+IC0g ICAgaWYgKE1hcEluZm8tPlJlc2VydmVkTWVtQml0bWFwID09IDApIHsNCj4gPiA+ICsgICAgaWYg KENDX0dVRVNUX0lTX1NFViAoUGNkR2V0NjQNCj4gPiAoUGNkQ29uZmlkZW50aWFsQ29tcHV0aW5n R3Vlc3RBdHRyKSkpDQo+ID4gPiB7DQo+ID4gPiArICAgICAgLy8NCj4gPiA+ICsgICAgICAvLyBD bGVhciB0aGUgbWVtb3J5IGVuY3J5cHRpb24gbWFzayBvbiB0aGUgcGxhaW50ZXh0IGJ1ZmZlci4N Cj4gPiA+ICsgICAgICAvLw0KPiA+ID4gKyAgICAgIFN0YXR1cyA9IE1lbUVuY3J5cHRTZXZDbGVh clBhZ2VFbmNNYXNrICgNCj4gPiA+ICsgICAgICAgICAgICAgICAgIDAsDQo+ID4gPiArICAgICAg ICAgICAgICAgICBNYXBJbmZvLT5QbGFpblRleHRBZGRyZXNzLA0KPiA+ID4gKyAgICAgICAgICAg ICAgICAgTWFwSW5mby0+TnVtYmVyT2ZQYWdlcw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgKTsN Cj4gPiA+ICsgICAgfSBlbHNlIGlmIChDQ19HVUVTVF9JU19URFggKFBjZEdldDY0DQo+ID4gPiAo UGNkQ29uZmlkZW50aWFsQ29tcHV0aW5nR3Vlc3RBdHRyKSkpIHsNCj4gPiA+ICsgICAgICAvLw0K PiA+ID4gKyAgICAgIC8vIFNldCB0aGUgbWVtb3J5IHNoYXJlZCBiaXQuDQo+ID4gPiArICAgICAg Ly8NCj4gPiA+ICAgICAgICAgU3RhdHVzID0gTWVtRW5jcnlwdFRkeFNldFBhZ2VTaGFyZWRCaXQg KA0KPiA+ID4gICAgICAgICAgICAgICAgICAgIDAsDQo+ID4gPiAgICAgICAgICAgICAgICAgICAg TWFwSW5mby0+UGxhaW5UZXh0QWRkcmVzcywNCj4gPiA+ICAgICAgICAgICAgICAgICAgICBNYXBJ bmZvLT5OdW1iZXJPZlBhZ2VzDQo+ID4gPiAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiA+ICsg ICAgfSBlbHNlIHsNCj4gPiA+ICsgICAgICBBU1NFUlQgKEZBTFNFKTsNCj4gPiA+ICAgICAgIH0N Cj4gPiA+IC0gIH0gZWxzZSB7DQo+ID4gPiAtICAgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ID4gICAg IH0NCj4gPiA+DQo+ID4gPiAgICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gPiA+IEBA IC0zOTYsMzAgKzM5OCwzMCBAQCBJb01tdVVubWFwV29ya2VyICgNCj4gPiA+ICAgICAgICAgYnJl YWs7DQo+ID4gPiAgICAgfQ0KPiA+ID4NCj4gPiA+IC0gIGlmIChDQ19HVUVTVF9JU19TRVYgKFBj ZEdldDY0DQo+ID4gPiAoUGNkQ29uZmlkZW50aWFsQ29tcHV0aW5nR3Vlc3RBdHRyKSkpDQo+ID4g ew0KPiA+ID4gLSAgICAvLw0KPiA+ID4gLSAgICAvLyBSZXN0b3JlIHRoZSBtZW1vcnkgZW5jcnlw dGlvbiBtYXNrIG9uIHRoZSBhcmVhIHdlIHVzZWQgdG8gaG9sZA0KPiA+IHRoZQ0KPiA+ID4gLSAg ICAvLyBwbGFpbnRleHQuDQo+ID4gPiAtICAgIC8vDQo+ID4gPiAtICAgIFN0YXR1cyA9IE1lbUVu Y3J5cHRTZXZTZXRQYWdlRW5jTWFzayAoDQo+ID4gPiAtICAgICAgICAgICAgICAgMCwNCj4gPiA+ IC0gICAgICAgICAgICAgICBNYXBJbmZvLT5QbGFpblRleHRBZGRyZXNzLA0KPiA+ID4gLSAgICAg ICAgICAgICAgIE1hcEluZm8tPk51bWJlck9mUGFnZXMNCj4gPiA+IC0gICAgICAgICAgICAgICAp Ow0KPiA+ID4gLSAgfSBlbHNlIGlmIChDQ19HVUVTVF9JU19URFggKFBjZEdldDY0DQo+ID4gPiAo UGNkQ29uZmlkZW50aWFsQ29tcHV0aW5nR3Vlc3RBdHRyKSkpIHsNCj4gPiA+IC0gICAgLy8NCj4g PiA+IC0gICAgLy8gUmVzdG9yZSB0aGUgbWVtb3J5IHNoYXJlZCBiaXQgbWFzayBvbiB0aGUgYXJl YSB3ZSB1c2VkIHRvIGhvbGQNCj4gPiB0aGUNCj4gPiA+IC0gICAgLy8gcGxhaW50ZXh0Lg0KPiA+ ID4gLSAgICAvLw0KPiA+ID4gLSAgICBpZiAoTWFwSW5mby0+UmVzZXJ2ZWRNZW1CaXRtYXAgPT0g MCkgew0KPiA+ID4gKyAgaWYgKE1hcEluZm8tPlJlc2VydmVkTWVtQml0bWFwID09IDApIHsNCj4g PiA+ICsgICAgaWYgKENDX0dVRVNUX0lTX1NFViAoUGNkR2V0NjQNCj4gPiAoUGNkQ29uZmlkZW50 aWFsQ29tcHV0aW5nR3Vlc3RBdHRyKSkpDQo+ID4gPiB7DQo+ID4gPiArICAgICAgLy8NCj4gPiA+ ICsgICAgICAvLyBSZXN0b3JlIHRoZSBtZW1vcnkgZW5jcnlwdGlvbiBtYXNrIG9uIHRoZSBhcmVh IHdlIHVzZWQgdG8NCj4gPiA+ICsgaG9sZA0KPiA+ID4gdGhlDQo+ID4gPiArICAgICAgLy8gcGxh aW50ZXh0Lg0KPiA+ID4gKyAgICAgIC8vDQo+ID4gPiArICAgICAgU3RhdHVzID0gTWVtRW5jcnlw dFNldlNldFBhZ2VFbmNNYXNrICgNCj4gPiA+ICsgICAgICAgICAgICAgICAgIDAsDQo+ID4gPiAr ICAgICAgICAgICAgICAgICBNYXBJbmZvLT5QbGFpblRleHRBZGRyZXNzLA0KPiA+ID4gKyAgICAg ICAgICAgICAgICAgTWFwSW5mby0+TnVtYmVyT2ZQYWdlcw0KPiA+ID4gKyAgICAgICAgICAgICAg ICAgKTsNCj4gPiA+ICsgICAgfSBlbHNlIGlmIChDQ19HVUVTVF9JU19URFggKFBjZEdldDY0DQo+ ID4gPiAoUGNkQ29uZmlkZW50aWFsQ29tcHV0aW5nR3Vlc3RBdHRyKSkpIHsNCj4gPiA+ICsgICAg ICAvLw0KPiA+ID4gKyAgICAgIC8vIFJlc3RvcmUgdGhlIG1lbW9yeSBzaGFyZWQgYml0IG1hc2sg b24gdGhlIGFyZWEgd2UgdXNlZCB0bw0KPiA+ID4gKyBob2xkDQo+ID4gPiB0aGUNCj4gPiA+ICsg ICAgICAvLyBwbGFpbnRleHQuDQo+ID4gPiArICAgICAgLy8NCj4gPiA+ICAgICAgICAgU3RhdHVz ID0gTWVtRW5jcnlwdFRkeENsZWFyUGFnZVNoYXJlZEJpdCAoDQo+ID4gPiAgICAgICAgICAgICAg ICAgICAgMCwNCj4gPiA+ICAgICAgICAgICAgICAgICAgICBNYXBJbmZvLT5QbGFpblRleHRBZGRy ZXNzLA0KPiA+ID4gICAgICAgICAgICAgICAgICAgIE1hcEluZm8tPk51bWJlck9mUGFnZXMNCj4g PiA+ICAgICAgICAgICAgICAgICAgICApOw0KPiA+ID4gKyAgICB9IGVsc2Ugew0KPiA+ID4gKyAg ICAgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ID4gICAgICAgfQ0KPiA+ID4gLSAgfSBlbHNlIHsNCj4g PiA+IC0gICAgQVNTRVJUIChGQUxTRSk7DQo+ID4gPiAgICAgfQ0KPiA+ID4NCj4gPiA+ICAgICBB U1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+ID4gQEAgLTkyNCwxNiArOTI2LDE0IEBAIElu c3RhbGxJb01tdVByb3RvY29sICgNCj4gPiA+ICAgICB9DQo+ID4gPg0KPiA+ID4gICAgIC8vDQo+ ID4gPiAtICAvLyBDdXJyZW50bHkgb25seSBUZHggZ3Vlc3Qgc3VwcG9ydCBSZXNlcnZlZCBzaGFy ZWQgbWVtb3J5IGZvcg0KPiA+ID4gRE1BIG9wZXJhdGlvbi4NCj4gPiA+ICsgIC8vIEZvciBDQyBn dWVzdHMsIHVzZSByZXNlcnZlZCBzaGFyZWQgbWVtb3J5IGZvciBETUEgb3BlcmF0aW9uLg0KPiA+ ID4gICAgIC8vDQo+ID4gPiAtICBpZiAoQ0NfR1VFU1RfSVNfVERYIChQY2RHZXQ2NA0KPiA+ID4g KFBjZENvbmZpZGVudGlhbENvbXB1dGluZ0d1ZXN0QXR0cikpKQ0KPiA+IHsNCj4gPiA+IC0gICAg bVJlc2VydmVkU2hhcmVkTWVtU3VwcG9ydGVkID0gVFJVRTsNCj4gPiA+IC0gICAgU3RhdHVzICAg ICAgICAgICAgICAgICAgICAgID0gSW9NbXVJbml0UmVzZXJ2ZWRTaGFyZWRNZW0gKCk7DQo+ID4g PiAtICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiA+IC0gICAgICBtUmVzZXJ2ZWRT aGFyZWRNZW1TdXBwb3J0ZWQgPSBGQUxTRTsNCj4gPiA+IC0gICAgfSBlbHNlIHsNCj4gPiA+IC0g ICAgICBERUJVRyAoKERFQlVHX0lORk8sICIlYTogRmVhdHVyZSBvZiByZXNlcnZlZCBtZW1vcnkg Zm9yIERNQSBpcw0KPiA+ID4gc3VwcG9ydGVkLlxuIiwgX19GVU5DVElPTl9fKSk7DQo+ID4gPiAt ICAgIH0NCj4gPiA+ICsgIG1SZXNlcnZlZFNoYXJlZE1lbVN1cHBvcnRlZCA9IFRSVUU7DQo+ID4g PiArICBTdGF0dXMgICAgICAgICAgICAgICAgICAgICAgPSBJb01tdUluaXRSZXNlcnZlZFNoYXJl ZE1lbSAoKTsNCj4gPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiA+ICsgICAg bVJlc2VydmVkU2hhcmVkTWVtU3VwcG9ydGVkID0gRkFMU0U7ICB9IGVsc2Ugew0KPiA+ID4gKyAg ICBERUJVRyAoKERFQlVHX0lORk8sICIlYTogRmVhdHVyZSBvZiByZXNlcnZlZCBtZW1vcnkgZm9y IERNQSBpcw0KPiA+ID4gc3VwcG9ydGVkLlxuIiwgX19GVU5DVElPTl9fKSk7DQo+ID4gPiAgICAg fQ0KPiA+ID4NCj4gPiA+ICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gPiBkaWZmIC0tZ2l0 IGEvT3ZtZlBrZy9Jb01tdUR4ZS9Jb01tdUJ1ZmZlci5jDQo+ID4gPiBiL092bWZQa2cvSW9NbXVE eGUvSW9NbXVCdWZmZXIuYyBpbmRleA0KPiA1YWRhOGU5ZDU3YmQuLmQ2OTk2OWI2Yjc2Mw0KPiA+ ID4gMTAwNjQ0DQo+ID4gPiAtLS0gYS9Pdm1mUGtnL0lvTW11RHhlL0lvTW11QnVmZmVyLmMNCj4g PiA+ICsrKyBiL092bWZQa2cvSW9NbXVEeGUvSW9NbXVCdWZmZXIuYw0KPiA+ID4gQEAgLTksNyAr OSw5IEBADQo+ID4gPiAgICNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCj4gPiA+ ICAgI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4gPiA+ICAgI2luY2x1ZGUgPExpYnJh cnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KPiA+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L01lbUVu Y3J5cHRTZXZMaWIuaD4NCj4gPiA+ICAgI2luY2x1ZGUgPExpYnJhcnkvTWVtRW5jcnlwdFRkeExp Yi5oPg0KPiA+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1BjZExpYi5oPg0KPiA+ID4gICAjaW5jbHVk ZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIuaD4NCj4gPiA+ICAgI2luY2x1ZGUg IklvTW11SW50ZXJuYWwuaCINCj4gPiA+DQo+ID4gPiBAQCAtMTA1LDYgKzEwNyw3IEBAIElvTW11 SW5pdFJlc2VydmVkU2hhcmVkTWVtICgNCj4gPiA+ICAgICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgIFRvdGFsUGFnZXM7DQo+ID4gPiAgICAgSU9NTVVfUkVTRVJWRURfTUVNX1JBTkdFICAqTWVt UmFuZ2U7DQo+ID4gPiAgICAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICBQaHlzaWNhbEFkZHJl c3M7DQo+ID4gPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgIFNoYXJlZEFkZHJlc3M7DQo+ ID4gPg0KPiA+ID4gICAgIGlmICghbVJlc2VydmVkU2hhcmVkTWVtU3VwcG9ydGVkKSB7DQo+ID4g PiAgICAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiA+ID4gQEAgLTEyOSwxMiArMTMyLDI1 IEBAIElvTW11SW5pdFJlc2VydmVkU2hhcmVkTWVtICgNCj4gPiA+ICAgICAgIE1lbVJhbmdlLT5T dGFydEFkZHJlc3NPZk1lbVJhbmdlID0gUGh5c2ljYWxBZGRyZXNzOw0KPiA+ID4NCj4gPiA+ICAg ICAgIGZvciAoSW5kZXgyID0gMDsgSW5kZXgyIDwgTWVtUmFuZ2UtPlNsb3RzOyBJbmRleDIrKykg ew0KPiA+ID4gLSAgICAgIFN0YXR1cyA9IE1lbUVuY3J5cHRUZHhTZXRQYWdlU2hhcmVkQml0ICgN Cj4gPiA+IC0gICAgICAgICAgICAgICAgIDAsDQo+ID4gPiAtICAgICAgICAgICAgICAgICAoVUlO VDY0KShVSU5UTikoTWVtUmFuZ2UtPlN0YXJ0QWRkcmVzc09mTWVtUmFuZ2UgKw0KPiA+ID4gSW5k ZXgyICogU0laRV9PRl9NRU1fUkFOR0UgKE1lbVJhbmdlKSArIE1lbVJhbmdlLT5IZWFkZXJTaXpl KSwNCj4gPiA+IC0gICAgICAgICAgICAgICAgIEVGSV9TSVpFX1RPX1BBR0VTIChNZW1SYW5nZS0+ RGF0YVNpemUpDQo+ID4gPiAtICAgICAgICAgICAgICAgICApOw0KPiA+ID4gLSAgICAgIEFTU0VS VCAoIUVGSV9FUlJPUiAoU3RhdHVzKSk7DQo+ID4gPiArICAgICAgU2hhcmVkQWRkcmVzcyA9IChV SU5UNjQpKFVJTlROKShNZW1SYW5nZS0NCj4gPiA+ID5TdGFydEFkZHJlc3NPZk1lbVJhbmdlICsg SW5kZXgyICogU0laRV9PRl9NRU1fUkFOR0UNCj4gPiAoTWVtUmFuZ2UpDQo+ID4gPiArIE1lbVJh bmdlLT5IZWFkZXJTaXplKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICBpZiAoQ0NfR1VFU1RfSVNf U0VWIChQY2RHZXQ2NA0KPiA+ID4gKFBjZENvbmZpZGVudGlhbENvbXB1dGluZ0d1ZXN0QXR0cikp KSB7DQo+ID4gPiArICAgICAgICBTdGF0dXMgPSBNZW1FbmNyeXB0U2V2Q2xlYXJQYWdlRW5jTWFz ayAoDQo+ID4gPiArICAgICAgICAgICAgICAgICAgIDAsDQo+ID4gPiArICAgICAgICAgICAgICAg ICAgIFNoYXJlZEFkZHJlc3MsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgIEVGSV9TSVpFX1RP X1BBR0VTIChNZW1SYW5nZS0+RGF0YVNpemUpDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICk7 DQo+ID4gPiArICAgICAgICBBU1NFUlQgKCFFRklfRVJST1IgKFN0YXR1cykpOw0KPiA+ID4gKyAg ICAgIH0gZWxzZSBpZiAoQ0NfR1VFU1RfSVNfVERYIChQY2RHZXQ2NA0KPiA+ID4gKFBjZENvbmZp ZGVudGlhbENvbXB1dGluZ0d1ZXN0QXR0cikpKSB7DQo+ID4gPiArICAgICAgICBTdGF0dXMgPSBN ZW1FbmNyeXB0VGR4U2V0UGFnZVNoYXJlZEJpdCAoDQo+ID4gPiArICAgICAgICAgICAgICAgICAg IDAsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgIFNoYXJlZEFkZHJlc3MsDQo+ID4gPiArICAg ICAgICAgICAgICAgICAgIEVGSV9TSVpFX1RPX1BBR0VTIChNZW1SYW5nZS0+RGF0YVNpemUpDQo+ ID4gPiArICAgICAgICAgICAgICAgICAgICk7DQo+ID4gPiArICAgICAgICBBU1NFUlQgKCFFRklf RVJST1IgKFN0YXR1cykpOw0KPiA+ID4gKyAgICAgIH0gZWxzZSB7DQo+ID4gPiArICAgICAgICBB U1NFUlQgKEZBTFNFKTsNCj4gPiA+ICsgICAgICB9DQo+ID4gPiAgICAgICB9DQo+ID4gPg0KPiA+ ID4gICAgICAgUGh5c2ljYWxBZGRyZXNzICs9IChNZW1SYW5nZS0+U2xvdHMgKiBTSVpFX09GX01F TV9SQU5HRQ0KPiA+ID4gKE1lbVJhbmdlKSk7IEBAIC0xNTYsMTYgKzE3MiwzMCBAQA0KPiBJb01t dVJlbGVhc2VSZXNlcnZlZFNoYXJlZE1lbSAoDQo+ID4gPiAgICAgRUZJX1NUQVRVUyAgICAgICAg ICAgICAgICBTdGF0dXM7DQo+ID4gPiAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBJbmRl eDEsIEluZGV4MjsNCj4gPiA+ICAgICBJT01NVV9SRVNFUlZFRF9NRU1fUkFOR0UgICpNZW1SYW5n ZTsNCj4gPiA+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgU2hhcmVkQWRkcmVzczsNCj4g PiA+DQo+ID4gPiAgICAgZm9yIChJbmRleDEgPSAwOyBJbmRleDEgPCBBUlJBWV9TSVpFIChtUmVz ZXJ2ZWRNZW1SYW5nZXMpOw0KPiA+IEluZGV4MSsrKQ0KPiA+ID4gew0KPiA+ID4gICAgICAgTWVt UmFuZ2UgPSAmbVJlc2VydmVkTWVtUmFuZ2VzW0luZGV4MV07DQo+ID4gPiAgICAgICBmb3IgKElu ZGV4MiA9IDA7IEluZGV4MiA8IE1lbVJhbmdlLT5TbG90czsgSW5kZXgyKyspIHsNCj4gPiA+IC0g ICAgICBTdGF0dXMgPSBNZW1FbmNyeXB0VGR4Q2xlYXJQYWdlU2hhcmVkQml0ICgNCj4gPiA+IC0g ICAgICAgICAgICAgICAgIDAsDQo+ID4gPiAtICAgICAgICAgICAgICAgICAoVUlOVDY0KShVSU5U TikoTWVtUmFuZ2UtPlN0YXJ0QWRkcmVzc09mTWVtUmFuZ2UgKw0KPiA+ID4gSW5kZXgyICogU0la RV9PRl9NRU1fUkFOR0UgKE1lbVJhbmdlKSArIE1lbVJhbmdlLT5IZWFkZXJTaXplKSwNCj4gPiA+ IC0gICAgICAgICAgICAgICAgIEVGSV9TSVpFX1RPX1BBR0VTIChNZW1SYW5nZS0+RGF0YVNpemUp DQo+ID4gPiAtICAgICAgICAgICAgICAgICApOw0KPiA+ID4gLSAgICAgIEFTU0VSVCAoIUVGSV9F UlJPUiAoU3RhdHVzKSk7DQo+ID4gPiArICAgICAgU2hhcmVkQWRkcmVzcyA9IChVSU5UNjQpKFVJ TlROKShNZW1SYW5nZS0NCj4gPiA+ID5TdGFydEFkZHJlc3NPZk1lbVJhbmdlICsgSW5kZXgyICog U0laRV9PRl9NRU1fUkFOR0UNCj4gPiAoTWVtUmFuZ2UpDQo+ID4gPiArIE1lbVJhbmdlLT5IZWFk ZXJTaXplKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICBpZiAoQ0NfR1VFU1RfSVNfU0VWIChQY2RH ZXQ2NA0KPiA+ID4gKFBjZENvbmZpZGVudGlhbENvbXB1dGluZ0d1ZXN0QXR0cikpKSB7DQo+ID4g PiArICAgICAgICBTdGF0dXMgPSBNZW1FbmNyeXB0U2V2U2V0UGFnZUVuY01hc2sgKA0KPiA+ID4g KyAgICAgICAgICAgICAgICAgICAwLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICBTaGFyZWRB ZGRyZXNzLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICBFRklfU0laRV9UT19QQUdFUyAoTWVt UmFuZ2UtPkRhdGFTaXplKQ0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICApOw0KPiA+ID4gKyAg ICAgICAgQVNTRVJUICghRUZJX0VSUk9SIChTdGF0dXMpKTsNCj4gPiA+ICsgICAgICB9IGVsc2Ug aWYgKENDX0dVRVNUX0lTX1REWCAoUGNkR2V0NjQNCj4gPiA+IChQY2RDb25maWRlbnRpYWxDb21w dXRpbmdHdWVzdEF0dHIpKSkgew0KPiA+ID4gKyAgICAgICAgU3RhdHVzID0gTWVtRW5jcnlwdFRk eENsZWFyUGFnZVNoYXJlZEJpdCAoDQo+ID4gPiArICAgICAgICAgICAgICAgICAgIDAsDQo+ID4g PiArICAgICAgICAgICAgICAgICAgIFNoYXJlZEFkZHJlc3MsDQo+ID4gPiArICAgICAgICAgICAg ICAgICAgIEVGSV9TSVpFX1RPX1BBR0VTIChNZW1SYW5nZS0+RGF0YVNpemUpDQo+ID4gPiArICAg ICAgICAgICAgICAgICAgICk7DQo+ID4gPiArICAgICAgICBBU1NFUlQgKCFFRklfRVJST1IgKFN0 YXR1cykpOw0KPiA+ID4gKyAgICAgIH0gZWxzZSB7DQo+ID4gPiArICAgICAgICBBU1NFUlQgKEZB TFNFKTsNCj4gPiA+ICsgICAgICB9DQo+ID4gPiAgICAgICB9DQo+ID4gPiAgICAgfQ0KPiA+ID4N Cj4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+IENjOiBFcmRlbSBBa3RhcyA8ZXJkZW1ha3Rhc0Bnb29n bGUuY29tPg0KPiA+ID4gPiBDYzogSmFtZXMgQm90dG9tbGV5IDxqZWpiQGxpbnV4LmlibS5jb20+ DQo+ID4gPiA+IENjOiBKaWV3ZW4gWWFvIDxqaWV3ZW4ueWFvQGludGVsLmNvbT4NCj4gPiA+ID4g Q2M6IFRvbSBMZW5kYWNreSA8dGhvbWFzLmxlbmRhY2t5QGFtZC5jb20+DQo+ID4gPiA+IENjOiBH ZXJkIEhvZmZtYW5uIDxrcmF4ZWxAcmVkaGF0LmNvbT4NCj4gPiA+ID4gU2lnbmVkLW9mZi1ieTog TWluIFh1IDxtaW4ubS54dUBpbnRlbC5jb20+DQo+ID4gPiA+IC0tLQ0KPiA+ID4gPiAgIE92bWZQ a2cvSW9NbXVEeGUvQW1kU2V2SW9NbXUuYyAgIHwgMTQyICsrKysrLS0tLS0tDQo+ID4gPiA+ICAg T3ZtZlBrZy9Jb01tdUR4ZS9Jb01tdUJ1ZmZlci5jICAgfCA0MjUNCj4gPiA+ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysNCj4gPiA+ID4gICBPdm1mUGtnL0lvTW11RHhlL0lvTW11RHhl LmluZiAgICB8ICAgMSArDQo+ID4gPiA+ICAgT3ZtZlBrZy9Jb01tdUR4ZS9Jb01tdUludGVybmFs LmggfCAxNzkgKysrKysrKysrKysrKw0KPiA+ID4gPiAgIDQgZmlsZXMgY2hhbmdlZCwgNjc2IGlu c2VydGlvbnMoKyksIDcxIGRlbGV0aW9ucygtKQ0KPiA+ID4gPiAgIGNyZWF0ZSBtb2RlIDEwMDY0 NCBPdm1mUGtnL0lvTW11RHhlL0lvTW11QnVmZmVyLmMNCj4gPiA+ID4gICBjcmVhdGUgbW9kZSAx MDA2NDQgT3ZtZlBrZy9Jb01tdUR4ZS9Jb01tdUludGVybmFsLmgNCj4gPiA+ID4NCj4gPiA+ID4g ZGlmZiAtLWdpdCBhL092bWZQa2cvSW9NbXVEeGUvQW1kU2V2SW9NbXUuYw0KPiA+ID4gYi9Pdm1m UGtnL0lvTW11RHhlL0FtZFNldklvTW11LmMNCj4gPiA+ID4gaW5kZXggNmI2NTg5N2YwMzJhLi43 N2U0NmJiZjRhNjAgMTAwNjQ0DQo+ID4gPiA+IC0tLSBhL092bWZQa2cvSW9NbXVEeGUvQW1kU2V2 SW9NbXUuYw0KPiA+ID4gPiArKysgYi9Pdm1mUGtnL0lvTW11RHhlL0FtZFNldklvTW11LmMNCj4g PiA+ID4gQEAgLTE1LDE4ICsxNSw3IEBADQo+ID4gPiA+ICAgI2luY2x1ZGUgPExpYnJhcnkvUGNk TGliLmg+DQo+ID4gPiA+ICAgI2luY2x1ZGUgPENvbmZpZGVudGlhbENvbXB1dGluZ0d1ZXN0QXR0 ci5oPg0KPiA+ID4gPiAgICNpbmNsdWRlICJBbWRTZXZJb01tdS5oIg0KPiA+ID4gPiAtDQo+ID4g PiA+IC0jZGVmaW5lIE1BUF9JTkZPX1NJRyAgU0lHTkFUVVJFXzY0ICgnTScsICdBJywgJ1AnLCAn XycsICdJJywgJ04nLA0KPiA+ID4gPiAnRicsICdPJykNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtdHlw ZWRlZiBzdHJ1Y3Qgew0KPiA+ID4gPiAtICBVSU5UNjQgICAgICAgICAgICAgICAgICAgU2lnbmF0 dXJlOw0KPiA+ID4gPiAtICBMSVNUX0VOVFJZICAgICAgICAgICAgICAgTGluazsNCj4gPiA+ID4g LSAgRURLSUlfSU9NTVVfT1BFUkFUSU9OICAgIE9wZXJhdGlvbjsNCj4gPiA+ID4gLSAgVUlOVE4g ICAgICAgICAgICAgICAgICAgIE51bWJlck9mQnl0ZXM7DQo+ID4gPiA+IC0gIFVJTlROICAgICAg ICAgICAgICAgICAgICBOdW1iZXJPZlBhZ2VzOw0KPiA+ID4gPiAtICBFRklfUEhZU0lDQUxfQURE UkVTUyAgICAgQ3J5cHRlZEFkZHJlc3M7DQo+ID4gPiA+IC0gIEVGSV9QSFlTSUNBTF9BRERSRVNT ICAgICBQbGFpblRleHRBZGRyZXNzOw0KPiA+ID4gPiAtfSBNQVBfSU5GTzsNCj4gPiA+ID4gKyNp bmNsdWRlICJJb01tdUludGVybmFsLmgiDQo+ID4gPiA+DQo+ID4gPiA+ICAgLy8NCj4gPiA+ID4g ICAvLyBMaXN0IG9mIHRoZSBNQVBfSU5GTyBzdHJ1Y3R1cmVzIHRoYXQgaGF2ZSBiZWVuIHNldCB1 cCBieQ0KPiA+ID4gSW9NbXVNYXAoKSBhbmQgbm90DQo+ID4gPiA+IEBAIC0zNSw3ICsyNCwxMCBA QCB0eXBlZGVmIHN0cnVjdCB7DQo+ID4gPiA+ICAgLy8NCj4gPiA+ID4gICBTVEFUSUMgTElTVF9F TlRSWSAgbU1hcEluZm9zID0gSU5JVElBTElaRV9MSVNUX0hFQURfVkFSSUFCTEUNCj4gPiA+ICht TWFwSW5mb3MpOw0KPiA+ID4gPg0KPiA+ID4gPiAtI2RlZmluZSBDT01NT05fQlVGRkVSX1NJRyAg U0lHTkFUVVJFXzY0ICgnQycsICdNJywgJ04nLCAnQicsICdVJywNCj4gPiA+ID4gJ0YnLA0KPiA+ ID4gJ0YnLCAnUicpDQo+ID4gPiA+ICsvLw0KPiA+ID4gPiArLy8gSW5kaWNhdGUgaWYgdGhlIGZl YXR1cmUgb2YgcmVzZXJ2ZWQgbWVtb3J5IGlzIHN1cHBvcnRlZCBpbiBETUENCj4gPiA+IG9wZXJh dGlvbi4NCj4gPiA+ID4gKy8vDQo+ID4gPiA+ICtCT09MRUFOICBtUmVzZXJ2ZWRTaGFyZWRNZW1T dXBwb3J0ZWQgPSBGQUxTRTsNCj4gPiA+ID4NCj4gPiA+ID4gICAvLw0KPiA+ID4gPiAgIC8vIEFT Q0lJIG5hbWVzIGZvciBFREtJSV9JT01NVV9PUEVSQVRJT04gY29uc3RhbnRzLCBmb3IgZGVidWcN Cj4gPiA+IGxvZ2dpbmcuDQo+ID4gPiA+IEBAIC01MCwzMCArNDIsNiBAQA0KPiA+ID4gbUJ1c01h c3Rlck9wZXJhdGlvbk5hbWVbRWRraWlJb01tdU9wZXJhdGlvbk1heGltdW1dID0gew0KPiA+ID4g PiAgICAgIkNvbW1vbkJ1ZmZlcjY0Ig0KPiA+ID4gPiAgIH07DQo+ID4gPiA+DQo+ID4gPiA+IC0v Lw0KPiA+ID4gPiAtLy8gVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgZW5hYmxlcyBNYXAoKSBhbmQg VW5tYXAoKSB0byBwZXJmb3JtDQo+ID4gPiA+IGluLQ0KPiA+ID4gcGxhY2UNCj4gPiA+ID4gLS8v IGRlY3J5cHRpb24gYW5kIGVuY3J5cHRpb24sIHJlc3BlY3RpdmVseSwgZm9yDQo+ID4gPiBCdXNN YXN0ZXJDb21tb25CdWZmZXJbNjRdDQo+ID4gPiA+IC0vLyBvcGVyYXRpb25zLCB3aXRob3V0IGR5 bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24gb3IgcmVsZWFzZS4NCj4gPiA+ID4gLS8vDQo+ID4gPiA+ IC0vLyBCb3RoIENPTU1PTl9CVUZGRVJfSEVBREVSIGFuZA0KPiA+ID4gQ09NTU9OX0JVRkZFUl9I RUFERVIuU3Rhc2hCdWZmZXIgYXJlIGFsbG9jYXRlZA0KPiA+ID4gPiAtLy8gYnkgQWxsb2NhdGVC dWZmZXIoKSBhbmQgcmVsZWFzZWQgYnkgRnJlZUJ1ZmZlcigpLg0KPiA+ID4gPiAtLy8NCj4gPiA+ ID4gLSNwcmFnbWEgcGFjayAoMSkNCj4gPiA+ID4gLXR5cGVkZWYgc3RydWN0IHsNCj4gPiA+ID4g LSAgVUlOVDY0ICAgIFNpZ25hdHVyZTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICAvLw0KPiA+ID4g PiAtICAvLyBBbHdheXMgYWxsb2NhdGVkIGZyb20gRWZpQm9vdFNlcnZpY2VzRGF0YSB0eXBlIG1l bW9yeSwgYW5kDQo+ID4gYWx3YXlzDQo+ID4gPiA+IC0gIC8vIGVuY3J5cHRlZC4NCj4gPiA+ID4g LSAgLy8NCj4gPiA+ID4gLSAgVk9JRCAgICAgICpTdGFzaEJ1ZmZlcjsNCj4gPiA+ID4gLQ0KPiA+ ID4gPiAtICAvLw0KPiA+ID4gPiAtICAvLyBGb2xsb3dlZCBieSB0aGUgYWN0dWFsIGNvbW1vbiBi dWZmZXIsIHN0YXJ0aW5nIGF0IHRoZSBuZXh0IHBhZ2UuDQo+ID4gPiA+IC0gIC8vDQo+ID4gPiA+ IC19IENPTU1PTl9CVUZGRVJfSEVBREVSOw0KPiA+ID4gPiAtI3ByYWdtYSBwYWNrICgpDQo+ID4g PiA+IC0NCj4gPiA+ID4gICAvKioNCj4gPiA+ID4gICAgIFByb3ZpZGVzIHRoZSBjb250cm9sbGVy LXNwZWNpZmljIGFkZHJlc3NlcyByZXF1aXJlZCB0byBhY2Nlc3MNCj4gPiA+ID4gc3lzdGVtDQo+ ID4gPiBtZW1vcnkNCj4gPiA+ID4gICAgIGZyb20gYSBETUEgYnVzIG1hc3Rlci4gT24gU0VWL1RE WCBndWVzdCwgdGhlIERNQSBvcGVyYXRpb25zDQo+ID4gbXVzdA0KPiA+ID4gYmUgcGVyZm9ybWVk IG9uDQo+ID4gPiA+IEBAIC0xMzksNiArMTA3LDggQEAgSW9NbXVNYXAgKA0KPiA+ID4gPiAgICAg ICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ID4gPiAgICAgfQ0KPiA+ID4gPg0K PiA+ID4gPiArICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gPiA+ID4gKw0KPiA+ID4gPiAgICAg Ly8NCj4gPiA+ID4gICAgIC8vIEFsbG9jYXRlIGEgTUFQX0lORk8gc3RydWN0dXJlIHRvIHJlbWVt YmVyIHRoZSBtYXBwaW5nIHdoZW4NCj4gPiA+IFVubWFwKCkgaXMNCj4gPiA+ID4gICAgIC8vIGNh bGxlZCBsYXRlci4NCj4gPiA+ID4gQEAgLTE1MywxMSArMTIzLDEyIEBAIElvTW11TWFwICgNCj4g PiA+ID4gICAgIC8vIEluaXRpYWxpemUgdGhlIE1BUF9JTkZPIHN0cnVjdHVyZSwgZXhjZXB0IHRo ZQ0KPiA+ID4gPiBQbGFpblRleHRBZGRyZXNzDQo+ID4gZmllbGQNCj4gPiA+ID4gICAgIC8vDQo+ ID4gPiA+ICAgICBaZXJvTWVtICgmTWFwSW5mby0+TGluaywgc2l6ZW9mIE1hcEluZm8tPkxpbmsp Ow0KPiA+ID4gPiAtICBNYXBJbmZvLT5TaWduYXR1cmUgICAgICA9IE1BUF9JTkZPX1NJRzsNCj4g PiA+ID4gLSAgTWFwSW5mby0+T3BlcmF0aW9uICAgICAgPSBPcGVyYXRpb247DQo+ID4gPiA+IC0g IE1hcEluZm8tPk51bWJlck9mQnl0ZXMgID0gKk51bWJlck9mQnl0ZXM7DQo+ID4gPiA+IC0gIE1h cEluZm8tPk51bWJlck9mUGFnZXMgID0gRUZJX1NJWkVfVE9fUEFHRVMgKE1hcEluZm8tDQo+ID4g PiA+TnVtYmVyT2ZCeXRlcyk7DQo+ID4gPiA+IC0gIE1hcEluZm8tPkNyeXB0ZWRBZGRyZXNzID0g KFVJTlROKUhvc3RBZGRyZXNzOw0KPiA+ID4gPiArICBNYXBJbmZvLT5TaWduYXR1cmUgICAgICAg ICA9IE1BUF9JTkZPX1NJRzsNCj4gPiA+ID4gKyAgTWFwSW5mby0+T3BlcmF0aW9uICAgICAgICAg PSBPcGVyYXRpb247DQo+ID4gPiA+ICsgIE1hcEluZm8tPk51bWJlck9mQnl0ZXMgICAgID0gKk51 bWJlck9mQnl0ZXM7DQo+ID4gPiA+ICsgIE1hcEluZm8tPk51bWJlck9mUGFnZXMgICAgID0gRUZJ X1NJWkVfVE9fUEFHRVMgKE1hcEluZm8tDQo+ID4gPiA+TnVtYmVyT2ZCeXRlcyk7DQo+ID4gPiA+ ICsgIE1hcEluZm8tPkNyeXB0ZWRBZGRyZXNzICAgID0gKFVJTlROKUhvc3RBZGRyZXNzOw0KPiA+ ID4gPiArICBNYXBJbmZvLT5SZXNlcnZlZE1lbUJpdG1hcCA9IDA7DQo+ID4gPiA+DQo+ID4gPiA+ ICAgICAvLw0KPiA+ID4gPiAgICAgLy8gSW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQgYmVsb3csIHdl IHBvaW50ICJNYXBJbmZvLQ0KPiA+ID4gPlBsYWluVGV4dEFkZHJlc3MiIHRvIHRoZSAgQEAgLTE4 NSwxMiArMTU2LDExIEBAIElvTW11TWFwICgNCj4gPiA+ID4gICAgICAgICAvLw0KPiA+ID4gPiAg ICAgICAgIC8vIEFsbG9jYXRlIHRoZSBpbXBsaWNpdCBwbGFpbnRleHQgYm91bmNlIGJ1ZmZlci4N Cj4gPiA+ID4gICAgICAgICAvLw0KPiA+ID4gPiAtICAgICAgU3RhdHVzID0gZ0JTLT5BbGxvY2F0 ZVBhZ2VzICgNCj4gPiA+ID4gLSAgICAgICAgICAgICAgICAgICAgICBBbGxvY2F0ZVR5cGUsDQo+ ID4gPiA+IC0gICAgICAgICAgICAgICAgICAgICAgRWZpQm9vdFNlcnZpY2VzRGF0YSwNCj4gPiA+ ID4gLSAgICAgICAgICAgICAgICAgICAgICBNYXBJbmZvLT5OdW1iZXJPZlBhZ2VzLA0KPiA+ID4g PiAtICAgICAgICAgICAgICAgICAgICAgICZNYXBJbmZvLT5QbGFpblRleHRBZGRyZXNzDQo+ID4g PiA+IC0gICAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiA+ID4gKyAgICAgIFN0YXR1cyA9IElv TW11QWxsb2NhdGVCb3VuY2VCdWZmZXIgKA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICBBbGxv Y2F0ZVR5cGUsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgIEVmaUJvb3RTZXJ2aWNlc0RhdGEs DQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgIE1hcEluZm8NCj4gPiA+ID4gKyAgICAgICAgICAg ICAgICAgKTsNCj4gPiA+ID4gICAgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4g PiA+ICAgICAgICAgICBnb3RvIEZyZWVNYXBJbmZvOw0KPiA+ID4gPiAgICAgICAgIH0NCj4gPiA+ ID4gQEAgLTI0MSw3ICsyMTEsOCBAQCBJb01tdU1hcCAoDQo+ID4gPiA+ICAgICAgICAgLy8gUG9p bnQgIkRlY3J5cHRpb25Tb3VyY2UiIHRvIHRoZSBzdGFzaCBidWZmZXIgc28gdGhhdCB3ZSBkZWNy eXB0DQo+ID4gPiA+ICAgICAgICAgLy8gaXQgdG8gdGhlIG9yaWdpbmFsIGxvY2F0aW9uLCBhZnRl ciB0aGUgc3dpdGNoIHN0YXRlbWVudC4NCj4gPiA+ID4gICAgICAgICAvLw0KPiA+ID4gPiAtICAg ICAgRGVjcnlwdGlvblNvdXJjZSA9IENvbW1vbkJ1ZmZlckhlYWRlci0+U3Rhc2hCdWZmZXI7DQo+ ID4gPiA+ICsgICAgICBEZWNyeXB0aW9uU291cmNlICAgICAgICAgICA9IENvbW1vbkJ1ZmZlckhl YWRlci0+U3Rhc2hCdWZmZXI7DQo+ID4gPiA+ICsgICAgICBNYXBJbmZvLT5SZXNlcnZlZE1lbUJp dG1hcCA9IENvbW1vbkJ1ZmZlckhlYWRlci0NCj4gPiA+ID5SZXNlcnZlZE1lbUJpdG1hcDsNCj4g PiA+ID4gICAgICAgICBicmVhazsNCj4gPiA+ID4NCj4gPiA+ID4gICAgICAgZGVmYXVsdDoNCj4g PiA+ID4gQEAgLTI2NCwxMiArMjM1LDE2IEBAIElvTW11TWFwICgNCj4gPiA+ID4gICAgIH0gZWxz ZSBpZiAoQ0NfR1VFU1RfSVNfVERYIChQY2RHZXQ2NA0KPiA+ID4gKFBjZENvbmZpZGVudGlhbENv bXB1dGluZ0d1ZXN0QXR0cikpKSB7DQo+ID4gPiA+ICAgICAgIC8vDQo+ID4gPiA+ICAgICAgIC8v IFNldCB0aGUgbWVtb3J5IHNoYXJlZCBiaXQuDQo+ID4gPiA+ICsgICAgLy8gSWYgTWFwSW5mby0+ UmVzZXJ2ZWRNZW1CaXRtYXAgaXMgMCwgaXQgbWVhbnMgdGhlIGJvdW5jZQ0KPiA+ID4gPiArIGJ1 ZmZlcg0KPiA+ID4gaXMgbm90IGFsbG9jYXRlZA0KPiA+ID4gPiArICAgIC8vIGZyb20gdGhlIHBy ZS1hbGxvY2F0ZWQgc2hhcmVkIG1lbW9yeSwgc28gaXQgbXVzdCBiZQ0KPiA+ID4gPiArIGNvbnZl cnRlZA0KPiA+IHRvDQo+ID4gPiBzaGFyZWQgbWVtb3J5IGhlcmUuDQo+ID4gPiA+ICAgICAgIC8v DQo+ID4gPiA+IC0gICAgU3RhdHVzID0gTWVtRW5jcnlwdFRkeFNldFBhZ2VTaGFyZWRCaXQgKA0K PiA+ID4gPiAtICAgICAgICAgICAgICAgMCwNCj4gPiA+ID4gLSAgICAgICAgICAgICAgIE1hcElu Zm8tPlBsYWluVGV4dEFkZHJlc3MsDQo+ID4gPiA+IC0gICAgICAgICAgICAgICBNYXBJbmZvLT5O dW1iZXJPZlBhZ2VzDQo+ID4gPiA+IC0gICAgICAgICAgICAgICApOw0KPiA+ID4gPiArICAgIGlm IChNYXBJbmZvLT5SZXNlcnZlZE1lbUJpdG1hcCA9PSAwKSB7DQo+ID4gPiA+ICsgICAgICBTdGF0 dXMgPSBNZW1FbmNyeXB0VGR4U2V0UGFnZVNoYXJlZEJpdCAoDQo+ID4gPiA+ICsgICAgICAgICAg ICAgICAgIDAsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgIE1hcEluZm8tPlBsYWluVGV4dEFk ZHJlc3MsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgIE1hcEluZm8tPk51bWJlck9mUGFnZXMN Cj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgKTsNCj4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ICAg ICB9IGVsc2Ugew0KPiA+ID4gPiAgICAgICBBU1NFUlQgKEZBTFNFKTsNCj4gPiA+ID4gICAgIH0N Cj4gPiA+ID4gQEAgLTMxMSwxMiArMjg2LDEzIEBAIElvTW11TWFwICgNCj4gPiA+ID4NCj4gPiA+ ID4gICAgIERFQlVHICgoDQo+ID4gPiA+ICAgICAgIERFQlVHX1ZFUkJPU0UsDQo+ID4gPiA+IC0g ICAgIiVhOiBNYXBwaW5nPTB4JXAgRGV2aWNlKFBsYWluVGV4dCk9MHglTHggQ3J5cHRlZD0weCVM eA0KPiA+ID4gUGFnZXM9MHglTHhcbiIsDQo+ID4gPiA+ICsgICAgIiVhOiBNYXBwaW5nPTB4JXAg RGV2aWNlKFBsYWluVGV4dCk9MHglTHggQ3J5cHRlZD0weCVMeA0KPiA+ID4gUGFnZXM9MHglTHgs IFJlc2VydmVkTWVtQml0bWFwPTB4JUx4XG4iLA0KPiA+ID4gPiAgICAgICBfX0ZVTkNUSU9OX18s DQo+ID4gPiA+ICAgICAgIE1hcEluZm8sDQo+ID4gPiA+ICAgICAgIE1hcEluZm8tPlBsYWluVGV4 dEFkZHJlc3MsDQo+ID4gPiA+ICAgICAgIE1hcEluZm8tPkNyeXB0ZWRBZGRyZXNzLA0KPiA+ID4g PiAtICAgIChVSU5UNjQpTWFwSW5mby0+TnVtYmVyT2ZQYWdlcw0KPiA+ID4gPiArICAgIChVSU5U NjQpTWFwSW5mby0+TnVtYmVyT2ZQYWdlcywNCj4gPiA+ID4gKyAgICBNYXBJbmZvLT5SZXNlcnZl ZE1lbUJpdG1hcA0KPiA+ID4gPiAgICAgICApKTsNCj4gPiA+ID4NCj4gPiA+ID4gICAgIHJldHVy biBFRklfU1VDQ0VTUzsNCj4gPiA+ID4gQEAgLTQzNSwxMSArNDExLDEzIEBAIElvTW11VW5tYXBX b3JrZXIgKA0KPiA+ID4gPiAgICAgICAvLyBSZXN0b3JlIHRoZSBtZW1vcnkgc2hhcmVkIGJpdCBt YXNrIG9uIHRoZSBhcmVhIHdlIHVzZWQgdG8NCj4gPiA+ID4gaG9sZA0KPiA+ID4gdGhlDQo+ID4g PiA+ICAgICAgIC8vIHBsYWludGV4dC4NCj4gPiA+ID4gICAgICAgLy8NCj4gPiA+ID4gLSAgICBT dGF0dXMgPSBNZW1FbmNyeXB0VGR4Q2xlYXJQYWdlU2hhcmVkQml0ICgNCj4gPiA+ID4gLSAgICAg ICAgICAgICAgIDAsDQo+ID4gPiA+IC0gICAgICAgICAgICAgICBNYXBJbmZvLT5QbGFpblRleHRB ZGRyZXNzLA0KPiA+ID4gPiAtICAgICAgICAgICAgICAgTWFwSW5mby0+TnVtYmVyT2ZQYWdlcw0K PiA+ID4gPiAtICAgICAgICAgICAgICAgKTsNCj4gPiA+ID4gKyAgICBpZiAoTWFwSW5mby0+UmVz ZXJ2ZWRNZW1CaXRtYXAgPT0gMCkgew0KPiA+ID4gPiArICAgICAgU3RhdHVzID0gTWVtRW5jcnlw dFRkeENsZWFyUGFnZVNoYXJlZEJpdCAoDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgIDAsDQo+ ID4gPiA+ICsgICAgICAgICAgICAgICAgIE1hcEluZm8tPlBsYWluVGV4dEFkZHJlc3MsDQo+ID4g PiA+ICsgICAgICAgICAgICAgICAgIE1hcEluZm8tPk51bWJlck9mUGFnZXMNCj4gPiA+ID4gKyAg ICAgICAgICAgICAgICAgKTsNCj4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ICAgICB9IGVsc2Ugew0K PiA+ID4gPiAgICAgICBBU1NFUlQgKEZBTFNFKTsNCj4gPiA+ID4gICAgIH0NCj4gPiA+ID4gQEAg LTQ3MCw4ICs0NDgsOSBAQCBJb01tdVVubWFwV29ya2VyICgNCj4gPiA+ID4gICAgICAgICAoVk9J RCAqKShVSU5UTilNYXBJbmZvLT5QbGFpblRleHRBZGRyZXNzLA0KPiA+ID4gPiAgICAgICAgIEVG SV9QQUdFU19UT19TSVpFIChNYXBJbmZvLT5OdW1iZXJPZlBhZ2VzKQ0KPiA+ID4gPiAgICAgICAg ICk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gICAgICAgaWYgKCFNZW1vcnlNYXBMb2NrZWQpIHsNCj4g PiA+ID4gLSAgICAgIGdCUy0+RnJlZVBhZ2VzIChNYXBJbmZvLT5QbGFpblRleHRBZGRyZXNzLCBN YXBJbmZvLQ0KPiA+ID4gPk51bWJlck9mUGFnZXMpOw0KPiA+ID4gPiArICAgICAgSW9NbXVGcmVl Qm91bmNlQnVmZmVyIChNYXBJbmZvKTsNCj4gPiA+ID4gICAgICAgfQ0KPiA+ID4gPiAgICAgfQ0K PiA+ID4gPg0KPiA+ID4gPiBAQCAtNTUxLDYgKzUzMCw3IEBAIElvTW11QWxsb2NhdGVCdWZmZXIg KA0KPiA+ID4gPiAgICAgVk9JRCAgICAgICAgICAgICAgICAgICpTdGFzaEJ1ZmZlcjsNCj4gPiA+ ID4gICAgIFVJTlROICAgICAgICAgICAgICAgICBDb21tb25CdWZmZXJQYWdlczsNCj4gPiA+ID4g ICAgIENPTU1PTl9CVUZGRVJfSEVBREVSICAqQ29tbW9uQnVmZmVySGVhZGVyOw0KPiA+ID4gPiAr ICBVSU5UMzIgICAgICAgICAgICAgICAgUmVzZXJ2ZWRNZW1CaXRtYXA7DQo+ID4gPiA+DQo+ID4g PiA+ICAgICBERUJVRyAoKA0KPiA+ID4gPiAgICAgICBERUJVR19WRVJCT1NFLA0KPiA+ID4gPiBA QCAtNjIwLDEyICs2MDAsMTMgQEAgSW9NbXVBbGxvY2F0ZUJ1ZmZlciAoDQo+ID4gPiA+ICAgICAg IFBoeXNpY2FsQWRkcmVzcyA9IFNJWkVfNEdCIC0gMTsNCj4gPiA+ID4gICAgIH0NCj4gPiA+ID4N Cj4gPiA+ID4gLSAgU3RhdHVzID0gZ0JTLT5BbGxvY2F0ZVBhZ2VzICgNCj4gPiA+ID4gLSAgICAg ICAgICAgICAgICAgIEFsbG9jYXRlTWF4QWRkcmVzcywNCj4gPiA+ID4gLSAgICAgICAgICAgICAg ICAgIE1lbW9yeVR5cGUsDQo+ID4gPiA+IC0gICAgICAgICAgICAgICAgICBDb21tb25CdWZmZXJQ YWdlcywNCj4gPiA+ID4gLSAgICAgICAgICAgICAgICAgICZQaHlzaWNhbEFkZHJlc3MNCj4gPiA+ ID4gLSAgICAgICAgICAgICAgICAgICk7DQo+ID4gPiA+ICsgIFN0YXR1cyA9IElvTW11QWxsb2Nh dGVDb21tb25CdWZmZXIgKA0KPiA+ID4gPiArICAgICAgICAgICAgIE1lbW9yeVR5cGUsDQo+ID4g PiA+ICsgICAgICAgICAgICAgQ29tbW9uQnVmZmVyUGFnZXMsDQo+ID4gPiA+ICsgICAgICAgICAg ICAgJlBoeXNpY2FsQWRkcmVzcywNCj4gPiA+ID4gKyAgICAgICAgICAgICAmUmVzZXJ2ZWRNZW1C aXRtYXANCj4gPiA+ID4gKyAgICAgICAgICAgICApOw0KPiA+ID4gPiArDQo+ID4gPiA+ICAgICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiA+ICAgICAgIGdvdG8gRnJlZVN0YXNoQnVm ZmVyOw0KPiA+ID4gPiAgICAgfQ0KPiA+ID4gPiBAQCAtNjMzLDggKzYxNCw5IEBAIElvTW11QWxs b2NhdGVCdWZmZXIgKA0KPiA+ID4gPiAgICAgQ29tbW9uQnVmZmVySGVhZGVyID0gKFZPSUQgKiko VUlOVE4pUGh5c2ljYWxBZGRyZXNzOw0KPiA+ID4gPiAgICAgUGh5c2ljYWxBZGRyZXNzICAgKz0g RUZJX1BBR0VfU0laRTsNCj4gPiA+ID4NCj4gPiA+ID4gLSAgQ29tbW9uQnVmZmVySGVhZGVyLT5T aWduYXR1cmUgICA9IENPTU1PTl9CVUZGRVJfU0lHOw0KPiA+ID4gPiAtICBDb21tb25CdWZmZXJI ZWFkZXItPlN0YXNoQnVmZmVyID0gU3Rhc2hCdWZmZXI7DQo+ID4gPiA+ICsgIENvbW1vbkJ1ZmZl ckhlYWRlci0+U2lnbmF0dXJlICAgICAgICAgPSBDT01NT05fQlVGRkVSX1NJRzsNCj4gPiA+ID4g KyAgQ29tbW9uQnVmZmVySGVhZGVyLT5TdGFzaEJ1ZmZlciAgICAgICA9IFN0YXNoQnVmZmVyOw0K PiA+ID4gPiArICBDb21tb25CdWZmZXJIZWFkZXItPlJlc2VydmVkTWVtQml0bWFwID0NCj4gPiBS ZXNlcnZlZE1lbUJpdG1hcDsNCj4gPiA+ID4NCj4gPiA+ID4gICAgICpIb3N0QWRkcmVzcyA9IChW T0lEICopKFVJTlROKVBoeXNpY2FsQWRkcmVzczsNCj4gPiA+ID4NCj4gPiA+ID4gQEAgLTcwNyw3 ICs2ODksNyBAQCBJb01tdUZyZWVCdWZmZXIgKA0KPiA+ID4gPiAgICAgLy8gUmVsZWFzZSB0aGUg Y29tbW9uIGJ1ZmZlciBpdHNlbGYuIFVubWFwKCkgaGFzIHJlLWVuY3J5cHRlZA0KPiA+ID4gPiBp dCBpbi0NCj4gPiA+IHBsYWNlLCBzbw0KPiA+ID4gPiAgICAgLy8gbm8gbmVlZCB0byB6ZXJvIGl0 Lg0KPiA+ID4gPiAgICAgLy8NCj4gPiA+ID4gLSAgcmV0dXJuIGdCUy0+RnJlZVBhZ2VzICgoVUlO VE4pQ29tbW9uQnVmZmVySGVhZGVyLA0KPiA+ID4gQ29tbW9uQnVmZmVyUGFnZXMpOw0KPiA+ID4g PiArICByZXR1cm4gSW9NbXVGcmVlQ29tbW9uQnVmZmVyIChDb21tb25CdWZmZXJIZWFkZXIsDQo+ ID4gPiBDb21tb25CdWZmZXJQYWdlcyk7DQo+ID4gPiA+ICAgfQ0KPiA+ID4gPg0KPiA+ID4gPiAg IC8qKg0KPiA+ID4gPiBAQCAtODc4LDYgKzg2MCwxMSBAQCBJb01tdVVubWFwQWxsTWFwcGluZ3Mg KA0KPiA+ID4gPiAgICAgICAgIFRSVUUgICAgICAvLyBNZW1vcnlNYXBMb2NrZWQNCj4gPiA+ID4g ICAgICAgICApOw0KPiA+ID4gPiAgICAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIC8vDQo+ID4g PiA+ICsgIC8vIFJlbGVhc2UgdGhlIHJlc2VydmVkIHNoYXJlZCBtZW1vcnkgYXMgd2VsbC4NCj4g PiA+ID4gKyAgLy8NCj4gPiA+ID4gKyAgSW9NbXVSZWxlYXNlUmVzZXJ2ZWRTaGFyZWRNZW0gKFRS VUUpOw0KPiA+ID4gPiAgIH0NCj4gPiA+ID4NCj4gPiA+ID4gICAvKioNCj4gPiA+ID4gQEAgLTkz Niw2ICs5MjMsMTkgQEAgSW5zdGFsbElvTW11UHJvdG9jb2wgKA0KPiA+ID4gPiAgICAgICBnb3Rv IENsb3NlRXhpdEJvb3RFdmVudDsNCj4gPiA+ID4gICAgIH0NCj4gPiA+ID4NCj4gPiA+ID4gKyAg Ly8NCj4gPiA+ID4gKyAgLy8gQ3VycmVudGx5IG9ubHkgVGR4IGd1ZXN0IHN1cHBvcnQgUmVzZXJ2 ZWQgc2hhcmVkIG1lbW9yeSBmb3INCj4gPiBETUENCj4gPiA+IG9wZXJhdGlvbi4NCj4gPiA+ID4g KyAgLy8NCj4gPiA+ID4gKyAgaWYgKENDX0dVRVNUX0lTX1REWCAoUGNkR2V0NjQNCj4gPiAoUGNk Q29uZmlkZW50aWFsQ29tcHV0aW5nR3Vlc3RBdHRyKSkpDQo+ID4gPiB7DQo+ID4gPiA+ICsgICAg bVJlc2VydmVkU2hhcmVkTWVtU3VwcG9ydGVkID0gVFJVRTsNCj4gPiA+ID4gKyAgICBTdGF0dXMg ICAgICAgICAgICAgICAgICAgICAgPSBJb01tdUluaXRSZXNlcnZlZFNoYXJlZE1lbSAoKTsNCj4g PiA+ID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiA+ICsgICAgICBtUmVz ZXJ2ZWRTaGFyZWRNZW1TdXBwb3J0ZWQgPSBGQUxTRTsNCj4gPiA+ID4gKyAgICB9IGVsc2Ugew0K PiA+ID4gPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiJWE6IEZlYXR1cmUgb2YgcmVzZXJ2 ZWQgbWVtb3J5IGZvciBETUENCj4gPiBpcw0KPiA+ID4gc3VwcG9ydGVkLlxuIiwgX19GVU5DVElP Tl9fKSk7DQo+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4g ICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiA+ID4NCj4gPiA+ID4gICBDbG9zZUV4aXRCb290 RXZlbnQ6DQo+ID4gPiA+IGRpZmYgLS1naXQgYS9Pdm1mUGtnL0lvTW11RHhlL0lvTW11QnVmZmVy LmMNCj4gPiA+IGIvT3ZtZlBrZy9Jb01tdUR4ZS9Jb01tdUJ1ZmZlci5jDQo+ID4gPiA+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+ID4gPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uNWFkYThlOWQ1N2Jk DQo+ID4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ID4gKysrIGIvT3ZtZlBrZy9Jb01tdUR4ZS9J b01tdUJ1ZmZlci5jDQo+ID4gPiA+IEBAIC0wLDAgKzEsNDI1IEBADQo+ID4gPiA+ICsvKiogQGZp bGUNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBDb3B5cmlnaHQgKGMpIDIwMjIsIEludGVsIENvcnBv cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ID4gPiArDQo+ ID4gPiA+ICsqKi8NCj4gPiA+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VMaWIuaD4NCj4gPiA+ ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4gI2luY2x1ZGUgPExpYnJhcnkv RGVidWdMaWIuaD4NCj4gPiA+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25M aWIuaD4gI2luY2x1ZGUNCj4gPiA+ID4gKzxMaWJyYXJ5L01lbUVuY3J5cHRUZHhMaWIuaD4gI2lu Y2x1ZGUNCj4gPiA+ID4gKzxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5oPg0KPiA+ ID4gPiArI2luY2x1ZGUgIklvTW11SW50ZXJuYWwuaCINCj4gPiA+ID4gKw0KPiA+ID4gPiArZXh0 ZXJuIEJPT0xFQU4gIG1SZXNlcnZlZFNoYXJlZE1lbVN1cHBvcnRlZDsNCj4gPiA+ID4gKw0KPiA+ ID4gPiArI2RlZmluZSBTSVpFX09GX01FTV9SQU5HRShNZW1SYW5nZSkgIChNZW1SYW5nZS0+SGVh ZGVyU2l6ZQ0KPiA+ICsNCj4gPiA+IE1lbVJhbmdlLT5EYXRhU2l6ZSkNCj4gPiA+ID4gKw0KPiA+ ID4gPiArI2RlZmluZSBSRVNFUlZFRF9NRU1fQklUTUFQXzRLX01BU0sgICAgMHhmDQo+ID4gPiA+ ICsjZGVmaW5lIFJFU0VSVkVEX01FTV9CSVRNQVBfMzJLX01BU0sgICAweGZmMA0KPiA+ID4gPiAr I2RlZmluZSBSRVNFUlZFRF9NRU1fQklUTUFQXzEyOEtfTUFTSyAgMHgzMDAwDQo+ID4gPiA+ICsj ZGVmaW5lIFJFU0VSVkVEX01FTV9CSVRNQVBfMU1fTUFTSyAgICAweDQwMDAwDQo+ID4gPiA+ICsj ZGVmaW5lIFJFU0VSVkVEX01FTV9CSVRNQVBfMk1fTUFTSyAgICAweDE4MDAwMA0KPiA+ID4gPiAr I2RlZmluZSBSRVNFUlZFRF9NRU1fQklUTUFQX01BU0sgICAgICAgMHgxZmZmZmYNCj4gPiA+ID4g Kw0KPiA+ID4gPiArU1RBVElDIElPTU1VX1JFU0VSVkVEX01FTV9SQU5HRSAgbVJlc2VydmVkTWVt UmFuZ2VzW10gPQ0KPiB7DQo+ID4gPiA+ICsgIHsgUkVTRVJWRURfTUVNX0JJVE1BUF80S19NQVNL LCAgIDAsICA0LCBTSVpFXzRLQiwgICBTSVpFXzRLQiwNCj4gPiAwIH0sDQo+ID4gPiA+ICsgIHsg UkVTRVJWRURfTUVNX0JJVE1BUF8zMktfTUFTSywgIDQsICA4LCBTSVpFXzMyS0IsICBTSVpFXzRL QiwNCj4gPiA+IDAgfSwNCj4gPiA+ID4gKyAgeyBSRVNFUlZFRF9NRU1fQklUTUFQXzEyOEtfTUFT SywgMTIsIDIsIFNJWkVfMTI4S0IsDQo+ID4gU0laRV80S0IsDQo+ID4gPiAwIH0sDQo+ID4gPiA+ ICsgIHsgUkVTRVJWRURfTUVNX0JJVE1BUF8xTV9NQVNLLCAgIDE0LCAxLCBTSVpFXzFNQiwgICBT SVpFXzRLQiwNCj4gPiA+IDAgfSwNCj4gPiA+ID4gKyAgeyBSRVNFUlZFRF9NRU1fQklUTUFQXzJN X01BU0ssICAgMTUsIDIsIFNJWkVfMk1CLCAgIFNJWkVfNEtCLA0KPiA+ID4gMCB9LA0KPiA+ID4g PiArfTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArLy8NCj4gPiA+ID4gKy8vIEJpdG1hcCBvZiB0aGUg YWxsb2NhdGlvbiBvZiByZXNlcnZlZCBtZW1vcnkuDQo+ID4gPiA+ICsvLw0KPiA+ID4gPiArU1RB VElDIFVJTlQzMiAgbVJlc2VydmVkTWVtQml0bWFwID0gMDsNCj4gPiA+ID4gKw0KPiA+ID4gPiAr Ly8NCj4gPiA+ID4gKy8vIFN0YXJ0IGFkZHJlc3Mgb2YgdGhlIHJlc2VydmVkIG1lbW9yeSByZWdp b24uDQo+ID4gPiA+ICsvLw0KPiA+ID4gPiArU1RBVElDIEVGSV9QSFlTSUNBTF9BRERSRVNTICBt UmVzZXJ2ZWRTaGFyZWRNZW1BZGRyZXNzID0gMDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArLy8NCj4g PiA+ID4gKy8vIFRvdGFsIHNpemUgb2YgdGhlIHJlc2VydmVkIG1lbW9yeSByZWdpb24uDQo+ID4g PiA+ICsvLw0KPiA+ID4gPiArU1RBVElDIFVJTlQzMiAgbVJlc2VydmVkU2hhcmVkTWVtU2l6ZSA9 IDA7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICogQ2FsY3VsYXRlIHRoZSBz aXplIG9mIHJlc2VydmVkIG1lbW9yeS4NCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBAcmV0dmFs IFVJTlQzMiAgIFNpemUgb2YgdGhlIHJlc2VydmVkIG1lbW9yeQ0KPiA+ID4gPiArICovDQo+ID4g PiA+ICtTVEFUSUMNCj4gPiA+ID4gK1VJTlQzMg0KPiA+ID4gPiArQ2FsY3VhdGVSZXNlcnZlZE1l bVNpemUgKA0KPiA+ID4gPiArICBWT0lEDQo+ID4gPiA+ICsgICkNCj4gPiA+ID4gK3sNCj4gPiA+ ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gPiA+ID4gKyAgSU9NTVVf UkVTRVJWRURfTUVNX1JBTkdFICAqTWVtUmFuZ2U7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgaWYg KG1SZXNlcnZlZFNoYXJlZE1lbVNpemUgIT0gMCkgew0KPiA+ID4gPiArICAgIHJldHVybiBtUmVz ZXJ2ZWRTaGFyZWRNZW1TaXplOyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIGZvciAoSW5kZXgg PSAwOyBJbmRleCA8IEFSUkFZX1NJWkUgKG1SZXNlcnZlZE1lbVJhbmdlcyk7DQo+ID4gPiA+ICsg SW5kZXgrKykNCj4gPiB7DQo+ID4gPiA+ICsgICAgTWVtUmFuZ2UgICAgICAgICAgICAgICAgPSAm bVJlc2VydmVkTWVtUmFuZ2VzW0luZGV4XTsNCj4gPiA+ID4gKyAgICBtUmVzZXJ2ZWRTaGFyZWRN ZW1TaXplICs9IChTSVpFX09GX01FTV9SQU5HRSAoTWVtUmFuZ2UpDQo+ID4gKg0KPiA+ID4gTWVt UmFuZ2UtPlNsb3RzKTsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIHJldHVy biBtUmVzZXJ2ZWRTaGFyZWRNZW1TaXplOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ ICsvKioNCj4gPiA+ID4gKyAqIEFsbG9jYXRlIGEgbWVtb3J5IHJlZ2lvbiBhbmQgY29udmVydCBp dCB0byBiZSBzaGFyZWQuIFRoaXMNCj4gPiA+ID4gK21lbW9yeQ0KPiA+ID4gcmVnaW9uIHdpbGwg YmUNCj4gPiA+ID4gKyAqIHVzZWQgaW4gdGhlIERNQSBvcGVyYXRpb24uDQo+ID4gPiA+ICsgKg0K PiA+ID4gPiArICogVGhlIHByZS1hbGxvYyBtZW1vcnkgY29udGFpbnMgcGllY2VzIG9mIG1lbW9y eSByZWdpb25zIHdpdGgNCj4gPiA+IGRpZmZlcmVudCBzaXplLiBUaGUNCj4gPiA+ID4gKyAqIGFs bG9jYXRpb24gb2YgdGhlIHNoYXJlZCBtZW1vcnkgcmVnaW9ucyBhcmUgaW5kaWNhdGVkIGJ5IGEN Cj4gPiA+ID4gKyAzMi1iaXQNCj4gPiA+IGJpdG1hcCAobVJlc2VydmVkTWVtQml0bWFwKS4NCj4g PiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBUaGUgbWVtb3J5IHJlZ2lvbnMgYXJlIGNvbnN1bWVkIGJ5 IElvTW11QWxsb2NhdGVCdWZmZXIgKGluDQo+ID4gd2hpY2gNCj4gPiA+IENvbW1vbkJ1ZmZlciBp cyBhbGxvY2F0ZWQpIGFuZA0KPiA+ID4gPiArICogSW9NbXVNYXAgKGluIHdoaWNoIGJvdW5jZSBi dWZmZXIgaXMgYWxsb2NhdGVkKS4NCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBUaGUgQ29tbW9u QnVmZmVyIGNvbnRhaW5zIDIgcGFydHMsIG9uZSBwYWdlIGZvcg0KPiA+ID4gQ29tbW9uQnVmZmVy SGVhZGVyIHdoaWNoIGlzIHByaXZhdGUgbWVtb3J5LA0KPiA+ID4gPiArICogdGhlIG90aGVyIHBh cnQgaXMgc2hhcmVkIG1lbW9yeS4gU28gdGhlIGxheW91dCBvZiBhIHBpZWNlIG9mDQo+ID4gbWVt b3J5DQo+ID4gPiByZWdpb24gYWZ0ZXIgaW5pdGlhbGl6YXRpb24NCj4gPiA+ID4gKyAqIGxvb2tz IGxpa2U6DQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogICAgIHwtLS0tLS0tLS0tLS18LS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCj4gPiA+ID4gKyAqICAgICB8IEhlYWRlciAgICAgfCAg ICBEYXRhICAgICAgICAgICAgICAgICAgICB8ICA8LS0gYSBwaWVjZSBvZiBwcmUtYWxsb2MgbWVt b3J5DQo+ID4gPiByZWdpb24NCj4gPiA+ID4gKyAqICAgICB8IDRrLCBwcml2YXRlfCA0ay8zMmsv MTI4ay9ldGMsIHNoYXJlZCAgICB8DQo+ID4gPiA+ICsgKiAgICAgfC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgICBTdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZSB0aGUgcmVzZXJ2ZWQg bWVtb3J5Lg0KPiA+ID4gPiArICogQHJldHZhbCBFRklfVU5TVVBQT1JURUQgIFRoaXMgZmVhdHVy ZSBpcyBub3Qgc3VwcG9ydGVkLg0KPiA+ID4gPiArICovDQo+ID4gPiA+ICtFRklfU1RBVFVTDQo+ ID4gPiA+ICtJb01tdUluaXRSZXNlcnZlZFNoYXJlZE1lbSAoDQo+ID4gPiA+ICsgIFZPSUQNCj4g PiA+ID4gKyAgKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArICBFRklfU1RBVFVTICAgICAgICAgICAg ICAgIFN0YXR1czsNCj4gPiA+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBJbmRleDEs IEluZGV4MjsNCj4gPiA+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBUb3RhbFBhZ2Vz Ow0KPiA+ID4gPiArICBJT01NVV9SRVNFUlZFRF9NRU1fUkFOR0UgICpNZW1SYW5nZTsNCj4gPiA+ ID4gKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICBQaHlzaWNhbEFkZHJlc3M7DQo+ID4gPiA+ ICsNCj4gPiA+ID4gKyAgaWYgKCFtUmVzZXJ2ZWRTaGFyZWRNZW1TdXBwb3J0ZWQpIHsNCj4gPiA+ ID4gKyAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKyAgVG90YWxQYWdlcyA9IEVGSV9TSVpFX1RPX1BBR0VTIChDYWxjdWF0ZVJlc2Vy dmVkTWVtU2l6ZSAoKSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgUGh5c2ljYWxBZGRyZXNzID0g KEVGSV9QSFlTSUNBTF9BRERSRVNTKShVSU5UTilBbGxvY2F0ZVBhZ2VzDQo+ID4gPiAoVG90YWxQ YWdlcyk7DQo+ID4gPiA+ICsgIERFQlVHICgoDQo+ID4gPiA+ICsgICAgREVCVUdfVkVSQk9TRSwN Cj4gPiA+ID4gKyAgICAiJWE6IFJlc2VydmVkTWVtICglZCBwYWdlcykgYWRkcmVzcyA9IDB4JWxs eFxuIiwNCj4gPiA+ID4gKyAgICBfX0ZVTkNUSU9OX18sDQo+ID4gPiA+ICsgICAgVG90YWxQYWdl cywNCj4gPiA+ID4gKyAgICBQaHlzaWNhbEFkZHJlc3MNCj4gPiA+ID4gKyAgICApKTsNCj4gPiA+ ID4gKw0KPiA+ID4gPiArICBtUmVzZXJ2ZWRNZW1CaXRtYXAgICAgICAgID0gMDsNCj4gPiA+ID4g KyAgbVJlc2VydmVkU2hhcmVkTWVtQWRkcmVzcyA9IFBoeXNpY2FsQWRkcmVzczsNCj4gPiA+ID4g Kw0KPiA+ID4gPiArICBmb3IgKEluZGV4MSA9IDA7IEluZGV4MSA8IEFSUkFZX1NJWkUgKG1SZXNl cnZlZE1lbVJhbmdlcyk7DQo+ID4gPiBJbmRleDErKykgew0KPiA+ID4gPiArICAgIE1lbVJhbmdl ICAgICAgICAgICAgICAgICAgICAgICAgID0gJm1SZXNlcnZlZE1lbVJhbmdlc1tJbmRleDFdOw0K PiA+ID4gPiArICAgIE1lbVJhbmdlLT5TdGFydEFkZHJlc3NPZk1lbVJhbmdlID0gUGh5c2ljYWxB ZGRyZXNzOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgZm9yIChJbmRleDIgPSAwOyBJbmRleDIg PCBNZW1SYW5nZS0+U2xvdHM7IEluZGV4MisrKSB7DQo+ID4gPiA+ICsgICAgICBTdGF0dXMgPSBN ZW1FbmNyeXB0VGR4U2V0UGFnZVNoYXJlZEJpdCAoDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAg IDAsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgIChVSU5UNjQpKFVJTlROKShNZW1SYW5nZS0+ U3RhcnRBZGRyZXNzT2ZNZW1SYW5nZQ0KPiA+ID4gPiArICsNCj4gPiA+IEluZGV4MiAqIFNJWkVf T0ZfTUVNX1JBTkdFIChNZW1SYW5nZSkgKyBNZW1SYW5nZS0+SGVhZGVyU2l6ZSksDQo+ID4gPiA+ ICsgICAgICAgICAgICAgICAgIEVGSV9TSVpFX1RPX1BBR0VTIChNZW1SYW5nZS0+RGF0YVNpemUp DQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICk7DQo+ID4gPiA+ICsgICAgICBBU1NFUlQgKCFF RklfRVJST1IgKFN0YXR1cykpOw0KPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiAr ICAgIFBoeXNpY2FsQWRkcmVzcyArPSAoTWVtUmFuZ2UtPlNsb3RzICogU0laRV9PRl9NRU1fUkFO R0UNCj4gPiA+IChNZW1SYW5nZSkpOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4g KyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsv KioNCj4gPiA+ID4gKyAqIFJlbGVhc2UgdGhlIHByZS1hbGxvYyBzaGFyZWQgbWVtb3J5Lg0KPiA+ ID4gPiArICoNCj4gPiA+ID4gKyAqIEByZXR2YWwgRUZJX1NVQ0NFU1MgIFN1Y2Nlc3NmdWxseSBy ZWxlYXNlIHRoZSBzaGFyZWQgbWVtb3J5DQo+ID4gPiA+ICsqLyBFRklfU1RBVFVTIElvTW11UmVs ZWFzZVJlc2VydmVkU2hhcmVkTWVtICgNCj4gPiA+ID4gKyAgQk9PTEVBTiAgTWVtb3J5TWFwTG9j a2VkDQo+ID4gPiA+ICsgICkNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKyAgRUZJX1NUQVRVUyAgICAg ICAgICAgICAgICBTdGF0dXM7DQo+ID4gPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAg SW5kZXgxLCBJbmRleDI7DQo+ID4gPiA+ICsgIElPTU1VX1JFU0VSVkVEX01FTV9SQU5HRSAgKk1l bVJhbmdlOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIGZvciAoSW5kZXgxID0gMDsgSW5kZXgxIDwg QVJSQVlfU0laRSAobVJlc2VydmVkTWVtUmFuZ2VzKTsNCj4gPiA+IEluZGV4MSsrKSB7DQo+ID4g PiA+ICsgICAgTWVtUmFuZ2UgPSAmbVJlc2VydmVkTWVtUmFuZ2VzW0luZGV4MV07DQo+ID4gPiA+ ICsgICAgZm9yIChJbmRleDIgPSAwOyBJbmRleDIgPCBNZW1SYW5nZS0+U2xvdHM7IEluZGV4Misr KSB7DQo+ID4gPiA+ICsgICAgICBTdGF0dXMgPSBNZW1FbmNyeXB0VGR4Q2xlYXJQYWdlU2hhcmVk Qml0ICgNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgMCwNCj4gPiA+ID4gKyAgICAgICAgICAg ICAgICAgKFVJTlQ2NCkoVUlOVE4pKE1lbVJhbmdlLT5TdGFydEFkZHJlc3NPZk1lbVJhbmdlDQo+ ID4gPiA+ICsgKw0KPiA+ID4gSW5kZXgyICogU0laRV9PRl9NRU1fUkFOR0UgKE1lbVJhbmdlKSAr IE1lbVJhbmdlLT5IZWFkZXJTaXplKSwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgRUZJX1NJ WkVfVE9fUEFHRVMgKE1lbVJhbmdlLT5EYXRhU2l6ZSkNCj4gPiA+ID4gKyAgICAgICAgICAgICAg ICAgKTsNCj4gPiA+ID4gKyAgICAgIEFTU0VSVCAoIUVGSV9FUlJPUiAoU3RhdHVzKSk7DQo+ID4g PiA+ICsgICAgfQ0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgaWYgKCFNZW1v cnlNYXBMb2NrZWQpIHsNCj4gPiA+ID4gKyAgICBGcmVlUGFnZXMgKChWT0lEICopKFVJTlROKW1S ZXNlcnZlZFNoYXJlZE1lbUFkZHJlc3MsDQo+ID4gPiBFRklfU0laRV9UT19QQUdFUyAoQ2FsY3Vh dGVSZXNlcnZlZE1lbVNpemUgKCkpKTsNCj4gPiA+ID4gKyAgICBtUmVzZXJ2ZWRTaGFyZWRNZW1B ZGRyZXNzID0gMDsNCj4gPiA+ID4gKyAgICBtUmVzZXJ2ZWRNZW1CaXRtYXAgICAgICAgID0gMDsN Cj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsN Cj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgKiBBbGxvY2F0 ZSBmcm9tIHRoZSByZXNlcnZlZCBtZW1vcnkgcG9vbC4NCj4gPiA+ID4gKyAqIElmIHRoZSByZXNl cnZlZCBzaGFyZWQgbWVtb3J5IGlzIGV4YXVzdGVkIG9yIHRoZXJlIGlzIG5vDQo+ID4gPiA+ICtz dWl0YWxiZQ0KPiA+IHNpemUsDQo+ID4gPiBpdCB0dXJucw0KPiA+ID4gPiArICogdG8gdGhlIExl Z2FjeUFsbG9jYXRlQnVmZmVyLg0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIEBwYXJhbSBUeXBl ICAgICAgICAgICAgICAgIEFsbG9jYXRlIHR5cGUNCj4gPiA+ID4gKyAqIEBwYXJhbSBNZW1vcnlU eXBlICAgICAgICAgIFRoZSBtZW1vcnkgdHlwZSB0byBiZSBhbGxvY2F0ZWQNCj4gPiA+ID4gKyAq IEBwYXJhbSBQYWdlcyAgICAgICAgICAgICAgIFBhZ2VzIHRvIGJlIGFsbG9jYXRlZC4NCj4gPiA+ ID4gKyAqIEBwYXJhbSBSZXNlcnZlZE1lbUJpdG1hcCAgIEJpdG1hcCBvZiB0aGUgYWxsb2NhdGVk IG1lbW9yeQ0KPiA+ID4gcmVnaW9uDQo+ID4gPiA+ICsgKiBAcGFyYW0gUGh5c2ljYWxBZGRyZXNz ICAgICBQb2ludGVyIHRvIHRoZSBkYXRhIHBhcnQgb2YgYWxsb2NhdGVkDQo+ID4gPiBtZW1vcnkg cmVnaW9uDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgU3VjY2Vzc2Z1bGx5IGFsbG9jYXRlIHRoZSBidWZmZXINCj4gPiA+ID4gKyAqIEByZXR2YWwg T3RoZXIgICAgICAgICAgICAgIEFzIHRoZSBlcnJvciBjb2RlIGluZGljYXRlcw0KPiA+ID4gPiAr ICovDQo+ID4gPiA+ICtTVEFUSUMNCj4gPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ID4gK0ludGVy bmFsQWxsb2NhdGVCdWZmZXIgKA0KPiA+ID4gPiArICBJTiAgRUZJX0FMTE9DQVRFX1RZUEUgICAg ICAgIFR5cGUsDQo+ID4gPiA+ICsgIElOICBFRklfTUVNT1JZX1RZUEUgICAgICAgICAgTWVtb3J5 VHlwZSwNCj4gPiA+ID4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICBQYWdlcywNCj4g PiA+ID4gKyAgSU4gT1VUIFVJTlQzMiAgICAgICAgICAgICAgICAqUmVzZXJ2ZWRNZW1CaXRtYXAs DQo+ID4gPiA+ICsgIElOIE9VVCBFRklfUEhZU0lDQUxfQUREUkVTUyAgKlBoeXNpY2FsQWRkcmVz cw0KPiA+ID4gPiArICApDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgIFVJTlQzMiAgICAgICAgICAg ICAgICAgICAgTWVtQml0bWFwOw0KPiA+ID4gPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAg IEluZGV4Ow0KPiA+ID4gPiArICBJT01NVV9SRVNFUlZFRF9NRU1fUkFOR0UgICpNZW1SYW5nZTsN Cj4gPiA+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBQYWdlc09mTGFzdE1lbVJhbmdl Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICpSZXNlcnZlZE1lbUJpdG1hcCA9IDA7DQo+ID4gPiA+ ICsNCj4gPiA+ID4gKyAgaWYgKFBhZ2VzID09IDApIHsNCj4gPiA+ID4gKyAgICBBU1NFUlQgKEZB TFNFKTsNCj4gPiA+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOyAgfQ0KPiA+ ID4gPiArDQo+ID4gPiA+ICsgIGlmICghbVJlc2VydmVkU2hhcmVkTWVtU3VwcG9ydGVkKSB7DQo+ ID4gPiA+ICsgICAgZ290byBMZWdhY3lBbGxvY2F0ZUJ1ZmZlcjsNCj4gPiA+ID4gKyAgfQ0KPiA+ ID4gPiArDQo+ID4gPiA+ICsgIGlmIChtUmVzZXJ2ZWRTaGFyZWRNZW1BZGRyZXNzID09IDApIHsN Cj4gPiA+ID4gKyAgICBnb3RvIExlZ2FjeUFsbG9jYXRlQnVmZmVyOw0KPiA+ID4gPiArICB9DQo+ ID4gPiA+ICsNCj4gPiA+ID4gKyAgUGFnZXNPZkxhc3RNZW1SYW5nZSA9IDA7DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgQVJSQVlfU0laRSAobVJlc2VydmVk TWVtUmFuZ2VzKTsNCj4gPiA+ID4gKyBJbmRleCsrKQ0KPiA+IHsNCj4gPiA+ID4gKyAgICBpZiAo KFBhZ2VzID4gUGFnZXNPZkxhc3RNZW1SYW5nZSkgJiYgKFBhZ2VzIDw9DQo+ID4gRUZJX1NJWkVf VE9fUEFHRVMNCj4gPiA+IChtUmVzZXJ2ZWRNZW1SYW5nZXNbSW5kZXhdLkRhdGFTaXplKSkpIHsN Cj4gPiA+ID4gKyAgICAgIGJyZWFrOw0KPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gKw0KPiA+ID4g PiArICAgIFBhZ2VzT2ZMYXN0TWVtUmFuZ2UgPSBFRklfU0laRV9UT19QQUdFUw0KPiA+ID4gKG1S ZXNlcnZlZE1lbVJhbmdlc1tJbmRleF0uRGF0YVNpemUpOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ ICsNCj4gPiA+ID4gKyAgaWYgKEluZGV4ID09IEFSUkFZX1NJWkUgKG1SZXNlcnZlZE1lbVJhbmdl cykpIHsNCj4gPiA+ID4gKyAgICAvLyBUaGVyZSBpcyBubyBzdWl0YWJsZSBzaXplIG9mIHJlc2Vy dmVkIG1lbW9yeS4gVHVybiB0bw0KPiA+ID4gPiArIGxlZ2FjeQ0KPiA+ID4gYWxsb2NhdGUuDQo+ ID4gPiA+ICsgICAgZ290byBMZWdhY3lBbGxvY2F0ZUJ1ZmZlcjsNCj4gPiA+ID4gKyAgfQ0KPiA+ ID4gPiArDQo+ID4gPiA+ICsgIE1lbVJhbmdlID0gJm1SZXNlcnZlZE1lbVJhbmdlc1tJbmRleF07 DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgaWYgKChtUmVzZXJ2ZWRNZW1CaXRtYXAgJiBNZW1SYW5n ZS0+Qml0bWFwTWFzaykgPT0NCj4gPiA+IE1lbVJhbmdlLT5CaXRtYXBNYXNrKSB7DQo+ID4gPiA+ ICsgICAgLy8gVGhlIHJlc2VydmVkIG1lbW9yeSBpcyBleGF1c3RlZC4gVHVybiB0byBsZWdhY3kg YWxsb2NhdGUuDQo+ID4gPiA+ICsgICAgZ290byBMZWdhY3lBbGxvY2F0ZUJ1ZmZlcjsNCj4gPiA+ ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIE1lbUJpdG1hcCA9IChtUmVzZXJ2ZWRNZW1C aXRtYXAgJiBNZW1SYW5nZS0NCj4gPiA+Qml0bWFwTWFzaykgPj4NCj4gPiA+IE1lbVJhbmdlLT5T aGlmdDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBNZW1S YW5nZS0+U2xvdHM7IEluZGV4KyspIHsNCj4gPiA+ID4gKyAgICBpZiAoKE1lbUJpdG1hcCAmIChV SU5UOCkoMTw8SW5kZXgpKSA9PSAwKSB7DQo+ID4gPiA+ICsgICAgICBicmVhazsNCj4gPiA+ID4g KyAgICB9DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBBU1NFUlQgKEluZGV4 ICE9IE1lbVJhbmdlLT5TbG90cyk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgKlBoeXNpY2FsQWRk cmVzcyAgID0gTWVtUmFuZ2UtPlN0YXJ0QWRkcmVzc09mTWVtUmFuZ2UgKyBJbmRleA0KPiA+ICoN Cj4gPiA+IFNJWkVfT0ZfTUVNX1JBTkdFIChNZW1SYW5nZSkgKyBNZW1SYW5nZS0+SGVhZGVyU2l6 ZTsNCj4gPiA+ID4gKyAgKlJlc2VydmVkTWVtQml0bWFwID0gKFVJTlQzMikoMSA8PCAoSW5kZXgg KyBNZW1SYW5nZS0+U2hpZnQpKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBERUJVRyAoKA0KPiA+ ID4gPiArICAgIERFQlVHX1ZFUkJPU0UsDQo+ID4gPiA+ICsgICAgIiVhOiByYW5nZS1zaXplOiAl bHgsIHN0YXJ0LWFkZHJlc3M9MHglbGx4LCBwYWdlcz0weCVsbHgsDQo+ID4gPiA+ICsgYml0cz0w eCVseCwNCj4gPiA+IGJpdG1hcDogJWx4ID0+ICVseFxuIiwNCj4gPiA+ID4gKyAgICBfX0ZVTkNU SU9OX18sDQo+ID4gPiA+ICsgICAgTWVtUmFuZ2UtPkRhdGFTaXplLA0KPiA+ID4gPiArICAgICpQ aHlzaWNhbEFkZHJlc3MsDQo+ID4gPiA+ICsgICAgUGFnZXMsDQo+ID4gPiA+ICsgICAgKlJlc2Vy dmVkTWVtQml0bWFwLA0KPiA+ID4gPiArICAgIG1SZXNlcnZlZE1lbUJpdG1hcCwNCj4gPiA+ID4g KyAgICBtUmVzZXJ2ZWRNZW1CaXRtYXAgfCAqUmVzZXJ2ZWRNZW1CaXRtYXANCj4gPiA+ID4gKyAg ICApKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gPiA+ ICsNCj4gPiA+ID4gK0xlZ2FjeUFsbG9jYXRlQnVmZmVyOg0KPiA+ID4gPiArDQo+ID4gPiA+ICsg ICpSZXNlcnZlZE1lbUJpdG1hcCA9IDA7DQo+ID4gPiA+ICsgIHJldHVybiBnQlMtPkFsbG9jYXRl UGFnZXMgKFR5cGUsIE1lbW9yeVR5cGUsIFBhZ2VzLA0KPiA+IFBoeXNpY2FsQWRkcmVzcyk7DQo+ ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICogQWxsb2NhdGUg cmVzZXJ2ZWQgc2hhcmVkIG1lbW9yeSBmb3IgYm91bmNlIGJ1ZmZlci4NCj4gPiA+ID4gKyAqDQo+ ID4gPiA+ICsgKiBAcGFyYW0gVHlwZSAgICAgICAgQWxsb2NhdGUgdHlwZQ0KPiA+ID4gPiArICog QHBhcmFtIE1lbW9yeVR5cGUgIFRoZSBtZW1vcnkgdHlwZSB0byBiZSBhbGxvY2F0ZWQNCj4gPiA+ ID4gKyAqIEBwYXJhbSBNYXBJbmZvICAgICBQb2ludGVyIHRvIHRoZSBNQVBfSU5GTw0KPiA+ID4g PiArICoNCj4gPiA+ID4gKyAqIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgIFN1Y2Nlc3NmdWxs eSBhbGxvY2F0ZSB0aGUgYm91bmNlIGJ1ZmZlcg0KPiA+ID4gPiArICogQHJldHZhbCBPdGhlciAg ICAgICAgICAgICAgQXMgdGhlIGVycm9yIGNvZGUgaW5kaWNhdGVzDQo+ID4gPiA+ICsNCj4gPiA+ ID4gKyAqLw0KPiA+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gPiArSW9NbXVBbGxvY2F0ZUJvdW5j ZUJ1ZmZlciAoDQo+ID4gPiA+ICsgIElOICAgICBFRklfQUxMT0NBVEVfVFlQRSAgVHlwZSwNCj4g PiA+ID4gKyAgSU4gICAgIEVGSV9NRU1PUllfVFlQRSAgICBNZW1vcnlUeXBlLA0KPiA+ID4gPiAr ICBJTiBPVVQgTUFQX0lORk8gICAgICAgICAgICpNYXBJbmZvDQo+ID4gPiA+ICsgICkNCj4gPiA+ ID4gK3sNCj4gPiA+ID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+ID4gPiArICBVSU5UMzIg ICAgICBSZXNlcnZlZE1lbUJpdG1hcDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBSZXNlcnZlZE1l bUJpdG1hcCA9IDA7DQo+ID4gPiA+ICsgIFN0YXR1cyAgICAgICAgICAgID0gSW50ZXJuYWxBbGxv Y2F0ZUJ1ZmZlciAoDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBUeXBlLA0KPiA+ ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgTWVtb3J5VHlwZSwNCj4gPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgIE1hcEluZm8tPk51bWJlck9mUGFnZXMsDQo+ID4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAmUmVzZXJ2ZWRNZW1CaXRtYXAsDQo+ID4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAmTWFwSW5mby0+UGxhaW5UZXh0QWRkcmVzcw0KPiA+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiA+ID4gKyAgTWFwSW5mby0+UmVzZXJ2ZWRNZW1C aXRtYXAgPSBSZXNlcnZlZE1lbUJpdG1hcDsNCj4gPiA+ID4gKyAgbVJlc2VydmVkTWVtQml0bWFw ICAgICAgICB8PSBSZXNlcnZlZE1lbUJpdG1hcDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBBU1NF UlQgKFN0YXR1cyA9PSBFRklfU1VDQ0VTUyk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgcmV0dXJu IFN0YXR1czsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsg KiBGcmVlIHRoZSBib3VuY2UgYnVmZmVyIGFsbG9jYXRlZCBpbiBJb01tdUFsbG9jYXRlQm91bmNl QnVmZmVyLg0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIEBwYXJhbSBNYXBJbmZvICAgICAgIFBv aW50ZXIgdG8gdGhlIE1BUF9JTkZPDQo+ID4gPiA+ICsgKiBAcmV0dXJuIEVGSV9TVUNDRVNTICBT dWNjZXNzZnVsbHkgZnJlZSB0aGUgYm91bmNlIGJ1ZmZlci4NCj4gPiA+ID4gKyAqLw0KPiA+ID4g PiArRUZJX1NUQVRVUw0KPiA+ID4gPiArSW9NbXVGcmVlQm91bmNlQnVmZmVyICgNCj4gPiA+ID4g KyAgSU4gT1VUICAgICBNQVBfSU5GTyAgKk1hcEluZm8NCj4gPiA+ID4gKyAgKQ0KPiA+ID4gPiAr ew0KPiA+ID4gPiArICBpZiAoTWFwSW5mby0+UmVzZXJ2ZWRNZW1CaXRtYXAgPT0gMCkgew0KPiA+ ID4gPiArICAgIGdCUy0+RnJlZVBhZ2VzIChNYXBJbmZvLT5QbGFpblRleHRBZGRyZXNzLCBNYXBJ bmZvLQ0KPiA+ID4gPk51bWJlck9mUGFnZXMpOw0KPiA+ID4gPiArICB9IGVsc2Ugew0KPiA+ID4g PiArICAgIERFQlVHICgoDQo+ID4gPiA+ICsgICAgICBERUJVR19WRVJCT1NFLA0KPiA+ID4gPiAr ICAgICAgIiVhOiBQbGFpblRleHRBZGRyZXNzPTB4JUx4LCBiaXRzPTB4JUx4LCBiaXRtYXA6ICVM eCA9PiAlTHhcbiIsDQo+ID4gPiA+ICsgICAgICBfX0ZVTkNUSU9OX18sDQo+ID4gPiA+ICsgICAg ICBNYXBJbmZvLT5QbGFpblRleHRBZGRyZXNzLA0KPiA+ID4gPiArICAgICAgTWFwSW5mby0+UmVz ZXJ2ZWRNZW1CaXRtYXAsDQo+ID4gPiA+ICsgICAgICBtUmVzZXJ2ZWRNZW1CaXRtYXAsDQo+ID4g PiA+ICsgICAgICBtUmVzZXJ2ZWRNZW1CaXRtYXAgJiAoKFVJTlQzMikofk1hcEluZm8tDQo+ID4g PiA+UmVzZXJ2ZWRNZW1CaXRtYXApKQ0KPiA+ID4gPiArICAgICAgKSk7DQo+ID4gPiA+ICsgICAg TWFwSW5mby0+UGxhaW5UZXh0QWRkcmVzcyAgPSAwOw0KPiA+ID4gPiArICAgIG1SZXNlcnZlZE1l bUJpdG1hcCAgICAgICAgJj0gKFVJTlQzMikofk1hcEluZm8tDQo+ID4gPiA+UmVzZXJ2ZWRNZW1C aXRtYXApOw0KPiA+ID4gPiArICAgIE1hcEluZm8tPlJlc2VydmVkTWVtQml0bWFwID0gMDsgIH0N Cj4gPiA+ID4gKw0KPiA+ID4gPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gPiA+ICt9DQo+ ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICogQWxsb2NhdGUgQ29tbW9uQnVmZmVy IGZyb20gcHJlLWFsbG9jYXRlZCBzaGFyZWQgbWVtb3J5Lg0KPiA+ID4gPiArICoNCj4gPiA+ID4g KyAqIEBwYXJhbSBNZW1vcnlUeXBlICAgICAgICAgIE1lbW9yeSB0eXBlDQo+ID4gPiA+ICsgKiBA cGFyYW0gQ29tbW9uQnVmZmVyUGFnZXMgICBQYWdlcyBvZiBDb21tb25CdWZmZXINCj4gPiA+ID4g KyAqIEBwYXJhbSBQaHlzaWNhbEFkZHJlc3MgICAgIEFsbG9jYXRlZCBwaHlzaWNhbCBhZGRyZXNz DQo+ID4gPiA+ICsgKiBAcGFyYW0gUmVzZXJ2ZWRNZW1CaXRtYXAgICBCaXRtYXAgd2hpY2ggaW5k aWNhdGVzIHRoZQ0KPiA+IGFsbG9jYXRpb24NCj4gPiA+IG9mIHJlc2VydmVkIG1lbW9yeQ0KPiA+ ID4gPiArICoNCj4gPiA+ID4gKyAqIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgIFN1Y2Nlc3Nm dWxseSBhbGxvY2F0ZSB0aGUgY29tbW9uIGJ1ZmZlcg0KPiA+ID4gPiArICogQHJldHZhbCBPdGhl ciAgICAgICAgICAgICAgQXMgdGhlIGVycm9yIGNvZGUgaW5kaWNhdGVzDQo+ID4gPiA+ICsgKi8N Cj4gPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ID4gK0lvTW11QWxsb2NhdGVDb21tb25CdWZmZXIg KA0KPiA+ID4gPiArICBJTiBFRklfTUVNT1JZX1RZUEUgICAgICAgIE1lbW9yeVR5cGUsDQo+ID4g PiA+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgQ29tbW9uQnVmZmVyUGFnZXMsDQo+ID4g PiA+ICsgIE9VVCBFRklfUEhZU0lDQUxfQUREUkVTUyAgKlBoeXNpY2FsQWRkcmVzcywNCj4gPiA+ ID4gKyAgT1VUIFVJTlQzMiAgICAgICAgICAgICAgICAqUmVzZXJ2ZWRNZW1CaXRtYXANCj4gPiA+ ID4gKyAgKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ID4g PiA+ICsNCj4gPiA+ID4gKyAgU3RhdHVzID0gSW50ZXJuYWxBbGxvY2F0ZUJ1ZmZlciAoDQo+ID4g PiA+ICsgICAgICAgICAgICAgQWxsb2NhdGVNYXhBZGRyZXNzLA0KPiA+ID4gPiArICAgICAgICAg ICAgIE1lbW9yeVR5cGUsDQo+ID4gPiA+ICsgICAgICAgICAgICAgQ29tbW9uQnVmZmVyUGFnZXMs DQo+ID4gPiA+ICsgICAgICAgICAgICAgUmVzZXJ2ZWRNZW1CaXRtYXAsDQo+ID4gPiA+ICsgICAg ICAgICAgICAgUGh5c2ljYWxBZGRyZXNzDQo+ID4gPiA+ICsgICAgICAgICAgICAgKTsNCj4gPiA+ ID4gKyAgQVNTRVJUIChTdGF0dXMgPT0gRUZJX1NVQ0NFU1MpOw0KPiA+ID4gPiArDQo+ID4gPiA+ ICsgIG1SZXNlcnZlZE1lbUJpdG1hcCB8PSAqUmVzZXJ2ZWRNZW1CaXRtYXA7DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKyAgaWYgKCpSZXNlcnZlZE1lbUJpdG1hcCAhPSAwKSB7DQo+ID4gPiA+ICsgICAg KlBoeXNpY2FsQWRkcmVzcyAtPSBTSVpFXzRLQjsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBy ZXR1cm4gU3RhdHVzOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ ID4gKyAqIEZyZWUgQ29tbW9uQnVmZmVyIHdoaWNoIGlzIGFsbG9jYXRlZCBieQ0KPiA+ID4gSW9N bXVBbGxvY2F0ZUNvbW1vbkJ1ZmZlcigpLg0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIEBwYXJh bSBDb21tb25CdWZmZXJIZWFkZXIgIFBvaW50ZXIgdG8gdGhlDQo+ID4gQ29tbW9uQnVmZmVySGVh ZGVyDQo+ID4gPiA+ICsgKiBAcGFyYW0gQ29tbW9uQnVmZmVyUGFnZXMgICBQYWdlcyBvZiBDb21t b25CdWZmZXINCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICBTdWNjZXNzZnVsbHkgZnJlZSB0aGUgY29tbW9uIGJ1ZmZlcg0KPiA+ID4gPiArICogQHJl dHZhbCBPdGhlciAgICAgICAgICAgICAgQXMgdGhlIGVycm9yIGNvZGUgaW5kaWNhdGVzDQo+ID4g PiA+ICsgKi8NCj4gPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ID4gK0lvTW11RnJlZUNvbW1vbkJ1 ZmZlciAoDQo+ID4gPiA+ICsgIElOIENPTU1PTl9CVUZGRVJfSEVBREVSICAqQ29tbW9uQnVmZmVy SGVhZGVyLA0KPiA+ID4gPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgQ29tbW9uQnVmZmVy UGFnZXMNCj4gPiA+ID4gKyAgKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArICBpZiAoIW1SZXNlcnZl ZFNoYXJlZE1lbVN1cHBvcnRlZCkgew0KPiA+ID4gPiArICAgIGdvdG8gTGVnYWN5RnJlZUNvbW1v bkJ1ZmZlcjsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIGlmIChDb21tb25C dWZmZXJIZWFkZXItPlJlc2VydmVkTWVtQml0bWFwID09IDApIHsNCj4gPiA+ID4gKyAgICBnb3Rv IExlZ2FjeUZyZWVDb21tb25CdWZmZXI7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4g PiArICBERUJVRyAoKA0KPiA+ID4gPiArICAgIERFQlVHX1ZFUkJPU0UsDQo+ID4gPiA+ICsgICAg IiVhOiBDb21tb25CdWZmZXI9MHglTHgsIGJpdHM9MHglTHgsIGJpdG1hcDogJUx4ID0+ICVMeFxu IiwNCj4gPiA+ID4gKyAgICBfX0ZVTkNUSU9OX18sDQo+ID4gPiA+ICsgICAgKFVJTlQ2NCkoVUlO VE4pQ29tbW9uQnVmZmVySGVhZGVyICsgU0laRV80S0IsDQo+ID4gPiA+ICsgICAgQ29tbW9uQnVm ZmVySGVhZGVyLT5SZXNlcnZlZE1lbUJpdG1hcCwNCj4gPiA+ID4gKyAgICBtUmVzZXJ2ZWRNZW1C aXRtYXAsDQo+ID4gPiA+ICsgICAgbVJlc2VydmVkTWVtQml0bWFwICYgKChVSU5UMzIpKH5Db21t b25CdWZmZXJIZWFkZXItDQo+ID4gPiA+UmVzZXJ2ZWRNZW1CaXRtYXApKQ0KPiA+ID4gPiArICAg ICkpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIG1SZXNlcnZlZE1lbUJpdG1hcCAmPSAoVUlOVDMy KSh+Q29tbW9uQnVmZmVySGVhZGVyLQ0KPiA+ID4gPlJlc2VydmVkTWVtQml0bWFwKTsNCj4gPiA+ ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ID4gPiArDQo+ID4gPiA+ICtMZWdhY3lGcmVl Q29tbW9uQnVmZmVyOg0KPiA+ID4gPiArICByZXR1cm4gZ0JTLT5GcmVlUGFnZXMgKChVSU5UTilD b21tb25CdWZmZXJIZWFkZXIsDQo+ID4gPiBDb21tb25CdWZmZXJQYWdlcyk7DQo+ID4gPiA+ICt9 DQo+ID4gPiA+IGRpZmYgLS1naXQgYS9Pdm1mUGtnL0lvTW11RHhlL0lvTW11RHhlLmluZg0KPiA+ ID4gYi9Pdm1mUGtnL0lvTW11RHhlL0lvTW11RHhlLmluZg0KPiA+ID4gPiBpbmRleCBlMTBiZTFk Y2ZmNDkuLjIxOTIxNDVlYTY2MSAxMDA2NDQNCj4gPiA+ID4gLS0tIGEvT3ZtZlBrZy9Jb01tdUR4 ZS9Jb01tdUR4ZS5pbmYNCj4gPiA+ID4gKysrIGIvT3ZtZlBrZy9Jb01tdUR4ZS9Jb01tdUR4ZS5p bmYNCj4gPiA+ID4gQEAgLTIxLDYgKzIxLDcgQEANCj4gPiA+ID4gICAgIEFtZFNldklvTW11LmMN Cj4gPiA+ID4gICAgIEFtZFNldklvTW11LmgNCj4gPiA+ID4gICAgIElvTW11RHhlLmMNCj4gPiA+ ID4gKyAgSW9NbXVCdWZmZXIuYw0KPiA+ID4gPg0KPiA+ID4gPiAgIFtQYWNrYWdlc10NCj4gPiA+ ID4gICAgIE1kZVBrZy9NZGVQa2cuZGVjDQo+ID4gPiA+IGRpZmYgLS1naXQgYS9Pdm1mUGtnL0lv TW11RHhlL0lvTW11SW50ZXJuYWwuaA0KPiA+ID4gYi9Pdm1mUGtnL0lvTW11RHhlL0lvTW11SW50 ZXJuYWwuaA0KPiA+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ID4gPiBpbmRleCAwMDAw MDAwMDAwMDAuLjkzNmMzNWFhNTM2Yw0KPiA+ID4gPiAtLS0gL2Rldi9udWxsDQo+ID4gPiA+ICsr KyBiL092bWZQa2cvSW9NbXVEeGUvSW9NbXVJbnRlcm5hbC5oDQo+ID4gPiA+IEBAIC0wLDAgKzEs MTc5IEBADQo+ID4gPiA+ICsvKiogQGZpbGUNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBDb3B5cmln aHQgKGMpIDIwMjIsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4N Cj4gPiA+ID4gKw0KPiA+ID4gPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xh dXNlLVBhdGVudA0KPiA+ID4gPiArDQo+ID4gPiA+ICsqKi8NCj4gPiA+ID4gKw0KPiA+ID4gPiAr I2lmbmRlZiBJT01NVV9JTlRFUk5BTF9IXw0KPiA+ID4gPiArI2RlZmluZSBJT01NVV9JTlRFUk5B TF9IXw0KPiA+ID4gPiArDQo+ID4gPiA+ICsjaW5jbHVkZSA8QmFzZS5oPg0KPiA+ID4gPiArI2lu Y2x1ZGUgPFByb3RvY29sL0lvTW11Lmg+DQo+ID4gPiA+ICsjaW5jbHVkZSA8VWVmaS9VZWZpQmFz ZVR5cGUuaD4NCj4gPiA+ID4gKyNpbmNsdWRlIDxVZWZpL1VlZmlTcGVjLmg+DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKyNkZWZpbmUgTUFQX0lORk9fU0lHICBTSUdOQVRVUkVfNjQgKCdNJywgJ0EnLCAn UCcsICdfJywgJ0knLCAnTicsDQo+ID4gPiA+ICsnRicsICdPJykNCj4gPiA+ID4gKw0KPiA+ID4g PiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ID4gPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAg U2lnbmF0dXJlOw0KPiA+ID4gPiArICBMSVNUX0VOVFJZICAgICAgICAgICAgICAgTGluazsNCj4g PiA+ID4gKyAgRURLSUlfSU9NTVVfT1BFUkFUSU9OICAgIE9wZXJhdGlvbjsNCj4gPiA+ID4gKyAg VUlOVE4gICAgICAgICAgICAgICAgICAgIE51bWJlck9mQnl0ZXM7DQo+ID4gPiA+ICsgIFVJTlRO ICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZlBhZ2VzOw0KPiA+ID4gPiArICBFRklfUEhZU0lD QUxfQUREUkVTUyAgICAgQ3J5cHRlZEFkZHJlc3M7DQo+ID4gPiA+ICsgIEVGSV9QSFlTSUNBTF9B RERSRVNTICAgICBQbGFpblRleHRBZGRyZXNzOw0KPiA+ID4gPiArICBVSU5UMzIgICAgICAgICAg ICAgICAgICAgUmVzZXJ2ZWRNZW1CaXRtYXA7DQo+ID4gPiA+ICt9IE1BUF9JTkZPOw0KPiA+ID4g PiArDQo+ID4gPiA+ICsjZGVmaW5lIENPTU1PTl9CVUZGRVJfU0lHICBTSUdOQVRVUkVfNjQgKCdD JywgJ00nLCAnTicsICdCJywgJ1UnLA0KPiA+ICdGJywNCj4gPiA+ICdGJywgJ1InKQ0KPiA+ID4g PiArDQo+ID4gPiA+ICsjcHJhZ21hIHBhY2sgKDEpDQo+ID4gPiA+ICsvLw0KPiA+ID4gPiArLy8g VGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgZW5hYmxlcyBNYXAoKSBhbmQgVW5tYXAoKSB0byBwZXJm b3JtDQo+ID4gPiA+ICtpbi0NCj4gPiA+IHBsYWNlDQo+ID4gPiA+ICsvLyBkZWNyeXB0aW9uIGFu ZCBlbmNyeXB0aW9uLCByZXNwZWN0aXZlbHksIGZvcg0KPiA+ID4gQnVzTWFzdGVyQ29tbW9uQnVm ZmVyWzY0XQ0KPiA+ID4gPiArLy8gb3BlcmF0aW9ucywgd2l0aG91dCBkeW5hbWljIG1lbW9yeSBh bGxvY2F0aW9uIG9yIHJlbGVhc2UuDQo+ID4gPiA+ICsvLw0KPiA+ID4gPiArLy8gQm90aCBDT01N T05fQlVGRkVSX0hFQURFUiBhbmQNCj4gPiA+IENPTU1PTl9CVUZGRVJfSEVBREVSLlN0YXNoQnVm ZmVyIGFyZSBhbGxvY2F0ZWQNCj4gPiA+ID4gKy8vIGJ5IEFsbG9jYXRlQnVmZmVyKCkgYW5kIHJl bGVhc2VkIGJ5IEZyZWVCdWZmZXIoKS4NCj4gPiA+ID4gKy8vDQo+ID4gPiA+ICt0eXBlZGVmIHN0 cnVjdCB7DQo+ID4gPiA+ICsgIFVJTlQ2NCAgICBTaWduYXR1cmU7DQo+ID4gPiA+ICsNCj4gPiA+ ID4gKyAgLy8NCj4gPiA+ID4gKyAgLy8gQWx3YXlzIGFsbG9jYXRlZCBmcm9tIEVmaUJvb3RTZXJ2 aWNlc0RhdGEgdHlwZSBtZW1vcnksIGFuZA0KPiA+IGFsd2F5cw0KPiA+ID4gPiArICAvLyBlbmNy eXB0ZWQuDQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIFZPSUQgICAgICAqU3Rhc2hCdWZmZXI7 DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgLy8NCj4gPiA+ID4gKyAgLy8gQml0bWFwIG9mIHJlc2Vy dmVkIG1lbW9yeQ0KPiA+ID4gPiArICAvLw0KPiA+ID4gPiArICBVSU5UMzIgICAgUmVzZXJ2ZWRN ZW1CaXRtYXA7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgLy8NCj4gPiA+ID4gKyAgLy8gRm9sbG93 ZWQgYnkgdGhlIGFjdHVhbCBjb21tb24gYnVmZmVyLCBzdGFydGluZyBhdCB0aGUgbmV4dCBwYWdl Lg0KPiA+ID4gPiArICAvLw0KPiA+ID4gPiArfSBDT01NT05fQlVGRkVSX0hFQURFUjsNCj4gPiA+ ID4gKw0KPiA+ID4gPiArLy8NCj4gPiA+ID4gKy8vIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgZGVmaW5l cyBhIG1lbW9yeSByYW5nZSBpbiB0aGUgcmVzZXJ2ZWQNCj4gPiA+ID4gK21lbW9yeQ0KPiA+ID4g cmVnaW9uLg0KPiA+ID4gPiArLy8gUGxlYXNlIHJlZmVyIHRvIElvTW11SW5pdFJlc2VydmVkU2hh cmVkTWVtKCkgZm9yIGRldGFpbGVkDQo+ID4gPiBpbmZvcm1hdGlvbi4NCj4gPiA+ID4gKy8vDQo+ ID4gPiA+ICsvLyBUaGUgbWVtb3J5IHJlZ2lvbiBsb29rcyBsaWtlOg0KPiA+ID4gPiArLy8gICAg IHwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCj4gPiA+ID4gKy8v ICAgICB8IEhlYWRlciAgICAgfCAgICBEYXRhICAgICAgICAgICAgICAgICAgICB8DQo+ID4gPiA+ ICsvLyAgICAgfCA0aywgcHJpdmF0ZXwgNGsvMzJrLzEyOGsvZXRjLCBzaGFyZWQgICAgfA0KPiA+ ID4gPiArLy8gICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwN Cj4gPiA+ID4gKy8vDQo+ID4gPiA+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4gPiA+ICsgIFVJTlQz MiAgICAgICAgICAgICAgICAgIEJpdG1hcE1hc2s7DQo+ID4gPiA+ICsgIFVJTlQzMiAgICAgICAg ICAgICAgICAgIFNoaWZ0Ow0KPiA+ID4gPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICBTbG90 czsNCj4gPiA+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgRGF0YVNpemU7DQo+ID4gPiA+ ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgIEhlYWRlclNpemU7DQo+ID4gPiA+ICsgIEVGSV9Q SFlTSUNBTF9BRERSRVNTICAgIFN0YXJ0QWRkcmVzc09mTWVtUmFuZ2U7DQo+ID4gPiA+ICt9IElP TU1VX1JFU0VSVkVEX01FTV9SQU5HRTsNCj4gPiA+ID4gKyNwcmFnbWEgcGFjaygpDQo+ID4gPiA+ ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICogQWxsb2NhdGUgYSBtZW1vcnkgcmVnaW9uIGFu ZCBjb252ZXJ0IGl0IHRvIGJlIHNoYXJlZC4gVGhpcw0KPiA+ID4gPiArbWVtb3J5DQo+ID4gPiBy ZWdpb24gd2lsbCBiZQ0KPiA+ID4gPiArICogdXNlZCBpbiB0aGUgRE1BIG9wZXJhdGlvbi4NCj4g PiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBUaGUgcHJlLWFsbG9jIG1lbW9yeSBjb250YWlucyBwaWVj ZXMgb2YgbWVtb3J5IHJlZ2lvbnMgd2l0aA0KPiA+ID4gZGlmZmVyZW50IHNpemUuIFRoZQ0KPiA+ ID4gPiArICogYWxsb2NhdGlvbiBvZiB0aGUgc2hhcmVkIG1lbW9yeSByZWdpb25zIGFyZSBpbmRp Y2F0ZWQgYnkgYQ0KPiA+ID4gPiArIDMyLWJpdA0KPiA+ID4gYml0bWFwIChtUmVzZXJ2ZWRNZW1C aXRtYXApLg0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIFRoZSBtZW1vcnkgcmVnaW9ucyBhcmUg Y29uc3VtZWQgYnkgSW9NbXVBbGxvY2F0ZUJ1ZmZlciAoaW4NCj4gPiB3aGljaA0KPiA+ID4gQ29t bW9uQnVmZmVyIGlzIGFsbG9jYXRlZCkgYW5kDQo+ID4gPiA+ICsgKiBJb01tdU1hcCAoaW4gd2hp Y2ggYm91bmNlIGJ1ZmZlciBpcyBhbGxvY2F0ZWQpLg0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAq IFRoZSBDb21tb25CdWZmZXIgY29udGFpbnMgMiBwYXJ0cywgb25lIHBhZ2UgZm9yDQo+ID4gPiBD b21tb25CdWZmZXJIZWFkZXIgd2hpY2ggaXMgcHJpdmF0ZSBtZW1vcnksDQo+ID4gPiA+ICsgKiB0 aGUgb3RoZXIgcGFydCBpcyBzaGFyZWQgbWVtb3J5LiBTbyB0aGUgbGF5b3V0IG9mIGEgcGllY2Ug b2YNCj4gPiBtZW1vcnkNCj4gPiA+IHJlZ2lvbiBhZnRlciBpbml0aWFsaXphdGlvbg0KPiA+ID4g PiArICogbG9va3MgbGlrZToNCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiAgICAgfC0tLS0tLS0t LS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KPiA+ID4gPiArICogICAgIHwgSGVh ZGVyICAgICB8ICAgIERhdGEgICAgICAgICAgICAgICAgICAgIHwgIDwtLSBhIHBpZWNlIG9mIHBy ZS1hbGxvYyBtZW1vcnkNCj4gPiA+IHJlZ2lvbg0KPiA+ID4gPiArICogICAgIHwgNGssIHByaXZh dGV8IDRrLzMyay8xMjhrL2V0Yywgc2hhcmVkICAgIHwNCj4gPiA+ID4gKyAqICAgICB8LS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQo+ID4gPiA+ICsgKg0KPiA+ID4g PiArICogQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgIFN1Y2Nlc3NmdWxseSBpbml0aWFsaXplIHRo ZSByZXNlcnZlZCBtZW1vcnkuDQo+ID4gPiA+ICsgKiBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAg VGhpcyBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQuDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gK0VG SV9TVEFUVVMNCj4gPiA+ID4gK0lvTW11SW5pdFJlc2VydmVkU2hhcmVkTWVtICgNCj4gPiA+ID4g KyAgVk9JRA0KPiA+ID4gPiArICApOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4g KyAqIFJlbGVhc2UgdGhlIHByZS1hbGxvYyBzaGFyZWQgbWVtb3J5Lg0KPiA+ID4gPiArICoNCj4g PiA+ID4gKyAqIEByZXR2YWwgRUZJX1NVQ0NFU1MgIFN1Y2Nlc3NmdWxseSByZWxlYXNlIHRoZSBz aGFyZWQgbWVtb3J5DQo+ID4gPiA+ICsqLyBFRklfU1RBVFVTIElvTW11UmVsZWFzZVJlc2VydmVk U2hhcmVkTWVtICgNCj4gPiA+ID4gKyAgQk9PTEVBTiAgTWVtb3J5TWFwTG9ja2VkDQo+ID4gPiA+ ICsgICk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICogQWxsb2NhdGUgcmVz ZXJ2ZWQgc2hhcmVkIG1lbW9yeSBmb3IgYm91bmNlIGJ1ZmZlci4NCj4gPiA+ID4gKyAqDQo+ID4g PiA+ICsgKiBAcGFyYW0gVHlwZSAgICAgICAgQWxsb2NhdGUgdHlwZQ0KPiA+ID4gPiArICogQHBh cmFtIE1lbW9yeVR5cGUgIFRoZSBtZW1vcnkgdHlwZSB0byBiZSBhbGxvY2F0ZWQNCj4gPiA+ID4g KyAqIEBwYXJhbSBNYXBJbmZvICAgICBQb2ludGVyIHRvIHRoZSBNQVBfSU5GTw0KPiA+ID4gPiAr ICoNCj4gPiA+ID4gKyAqIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgIFN1Y2Nlc3NmdWxseSBh bGxvY2F0ZSB0aGUgYm91bmNlIGJ1ZmZlcg0KPiA+ID4gPiArICogQHJldHZhbCBPdGhlciAgICAg ICAgICAgICAgQXMgdGhlIGVycm9yIGNvZGUgaW5kaWNhdGVzDQo+ID4gPiA+ICsgKi8NCj4gPiA+ ID4gK0VGSV9TVEFUVVMNCj4gPiA+ID4gK0lvTW11QWxsb2NhdGVCb3VuY2VCdWZmZXIgKA0KPiA+ ID4gPiArICBJTiAgICAgRUZJX0FMTE9DQVRFX1RZUEUgIFR5cGUsDQo+ID4gPiA+ICsgIElOICAg ICBFRklfTUVNT1JZX1RZUEUgICAgTWVtb3J5VHlwZSwNCj4gPiA+ID4gKyAgSU4gT1VUIE1BUF9J TkZPICAgICAgICAgICAqTWFwSW5mbw0KPiA+ID4gPiArICApOw0KPiA+ID4gPiArDQo+ID4gPiA+ ICsvKioNCj4gPiA+ID4gKyAqIEZyZWUgdGhlIGJvdW5jZSBidWZmZXIgYWxsb2NhdGVkIGluIElv TW11QWxsb2NhdGVCb3VuY2VCdWZmZXIuDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogQHBhcmFt IE1hcEluZm8gICAgICAgUG9pbnRlciB0byB0aGUgTUFQX0lORk8NCj4gPiA+ID4gKyAqIEByZXR1 cm4gRUZJX1NVQ0NFU1MgIFN1Y2Nlc3NmdWxseSBmcmVlIHRoZSBib3VuY2UgYnVmZmVyLg0KPiA+ ID4gPiArICovDQo+ID4gPiA+ICtFRklfU1RBVFVTDQo+ID4gPiA+ICtJb01tdUZyZWVCb3VuY2VC dWZmZXIgKA0KPiA+ID4gPiArICBJTiBPVVQgICAgIE1BUF9JTkZPICAqTWFwSW5mbw0KPiA+ID4g PiArICApOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAqIEFsbG9jYXRlIENv bW1vbkJ1ZmZlciBmcm9tIHByZS1hbGxvY2F0ZWQgc2hhcmVkIG1lbW9yeS4NCj4gPiA+ID4gKyAq DQo+ID4gPiA+ICsgKiBAcGFyYW0gTWVtb3J5VHlwZSAgICAgICAgICBNZW1vcnkgdHlwZQ0KPiA+ ID4gPiArICogQHBhcmFtIENvbW1vbkJ1ZmZlclBhZ2VzICAgUGFnZXMgb2YgQ29tbW9uQnVmZmVy DQo+ID4gPiA+ICsgKiBAcGFyYW0gUGh5c2ljYWxBZGRyZXNzICAgICBBbGxvY2F0ZWQgcGh5c2lj YWwgYWRkcmVzcw0KPiA+ID4gPiArICogQHBhcmFtIFJlc2VydmVkTWVtQml0bWFwICAgQml0bWFw IHdoaWNoIGluZGljYXRlcyB0aGUNCj4gPiBhbGxvY2F0aW9uDQo+ID4gPiBvZiByZXNlcnZlZCBt ZW1vcnkNCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICBTdWNjZXNzZnVsbHkgYWxsb2NhdGUgdGhlIGNvbW1vbiBidWZmZXINCj4gPiA+ID4gKyAqIEBy ZXR2YWwgT3RoZXIgICAgICAgICAgICAgIEFzIHRoZSBlcnJvciBjb2RlIGluZGljYXRlcw0KPiA+ ID4gPiArICovDQo+ID4gPiA+ICtFRklfU1RBVFVTDQo+ID4gPiA+ICtJb01tdUFsbG9jYXRlQ29t bW9uQnVmZmVyICgNCj4gPiA+ID4gKyAgSU4gRUZJX01FTU9SWV9UWVBFICAgICAgICBNZW1vcnlU eXBlLA0KPiA+ID4gPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgIENvbW1vbkJ1ZmZlclBh Z2VzLA0KPiA+ID4gPiArICBPVVQgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICpQaHlzaWNhbEFkZHJl c3MsDQo+ID4gPiA+ICsgIE9VVCBVSU5UMzIgICAgICAgICAgICAgICAgKlJlc2VydmVkTWVtQml0 bWFwDQo+ID4gPiA+ICsgICk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICog RnJlZSBDb21tb25CdWZmZXIgd2hpY2ggaXMgYWxsb2NhdGVkIGJ5DQo+ID4gPiBJb01tdUFsbG9j YXRlQ29tbW9uQnVmZmVyKCkuDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogQHBhcmFtIENvbW1v bkJ1ZmZlckhlYWRlciAgUG9pbnRlciB0byB0aGUNCj4gPiBDb21tb25CdWZmZXJIZWFkZXINCj4g PiA+ID4gKyAqIEBwYXJhbSBDb21tb25CdWZmZXJQYWdlcyAgIFBhZ2VzIG9mIENvbW1vbkJ1ZmZl cg0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgIFN1 Y2Nlc3NmdWxseSBmcmVlIHRoZSBjb21tb24gYnVmZmVyDQo+ID4gPiA+ICsgKiBAcmV0dmFsIE90 aGVyICAgICAgICAgICAgICBBcyB0aGUgZXJyb3IgY29kZSBpbmRpY2F0ZXMNCj4gPiA+ID4gKyAq Lw0KPiA+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gPiArSW9NbXVGcmVlQ29tbW9uQnVmZmVyICgN Cj4gPiA+ID4gKyAgSU4gQ09NTU9OX0JVRkZFUl9IRUFERVIgICpDb21tb25CdWZmZXJIZWFkZXIs DQo+ID4gPiA+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICBDb21tb25CdWZmZXJQYWdlcw0K PiA+ID4gPiArICApOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsjZW5kaWYNCg==