From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by mx.groups.io with SMTP id smtpd.web12.55332.1597706639611820653 for ; Mon, 17 Aug 2020 16:23:59 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=y8LILHPg; spf=pass (domain: intel.com, ip: 134.134.136.65, mailfrom: jiewen.yao@intel.com) IronPort-SDR: zOc6aHeGErFOTFAxgZ8UxNqxWHfQWdy9V+vEr/SjkhvmgJFK5F2ZhY0S0pAYBzgXyOhug1iqwi hdLEvI2h+H/g== X-IronPort-AV: E=McAfee;i="6000,8403,9716"; a="154781011" X-IronPort-AV: E=Sophos;i="5.76,324,1592895600"; d="scan'208";a="154781011" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Aug 2020 16:23:58 -0700 IronPort-SDR: cVEygvmz9l+0wlAcqWpkQgxo7I4/nO1MEMdrYy+ywyvJN+rDLuPthVGXf1KdhHL98oSA+YpFC6 HaXJQ1hxwFUg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.76,324,1592895600"; d="scan'208";a="326555482" Received: from fmsmsx603-2.cps.intel.com (HELO fmsmsx603.amr.corp.intel.com) ([10.18.84.213]) by orsmga008.jf.intel.com with ESMTP; 17 Aug 2020 16:23:57 -0700 Received: from fmsmsx609.amr.corp.intel.com (10.18.126.89) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 17 Aug 2020 16:23:57 -0700 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx609.amr.corp.intel.com (10.18.126.89) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5 via Frontend Transport; Mon, 17 Aug 2020 16:23:57 -0700 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (104.47.56.171) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.1713.5; Mon, 17 Aug 2020 16:23:56 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UrZWv9dPpoSzR0POszPV+Fk0EnZ6k0LuPCqMlX3sew240iHuxA8zroYI5wcQJ07kaSWHXq+DFnEDu8z8DiSAHYO2jERKT+7RVx9k75qQZfzdv3Bgu92DdbxVbRhNTEnJmAo5a9Fta3qdkm5iwjMGwu8hGXWZhw3cv40Bh5OcQdV0YfFSF3vfdREZ2cQo9Vuio2K8RGCJVMGGSZ1RKgC55Yp6PJrmKhhuqzIgmeshmbCPYDNaOgXIsmEDnRjY8w2OCugmcHbDWHzMIgikx4Da4qugwb/uf5SP2WhAA76TrqPO05mcXsNsWG1S4OfrGt063HT2lAomsg9R5Q6FI02Z9Q== 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=u6xqh3barNN10ihLUmrRe6hi5fG72DtYbl1sWy2Gzig=; b=csHsrAALnDv61XFyfHpPidU3tM+2JcrPi5fx065LG1MIpR37c+GNJMFEdUOd2lOhTeo3Ob7y+mPfavbTHGsVFg1dJev1CZDR7M702lt6qNtT+hW7Fp3l7vYFfRz7x3eEhv3TTAzjSxeJj4RZryQpimetwuOPWt68Jjz3QkwCaUImlYhdkNHh6V1JdreYGk4nBEdbGH+zAgccbgeeR8o0g7RWu0szC682tyxA9YRa45uIXwcUfP9qUD6atX1RJ1godyOH4m9J9gBHRfcVc2I7f1c8VuUFjBF4ntn9vxZ5gUO9B9WdsD1sk09an54tzxrfQi2go/baupb/YKHIQsHjEQ== 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=u6xqh3barNN10ihLUmrRe6hi5fG72DtYbl1sWy2Gzig=; b=y8LILHPgTiAY4VEYxHvb0neUyg1jdzyGt80ihsy07YvQmCGMsc99054LddBiZ1TC2iCWTIHrMnCeKElgartvYArQRHB7OOc/oMS9821UBwYfBn07fBh9Y05E/kMIuVSwOKcJ0f0VBUE3I3ptc+2QvDIUk2puLpKG4iPaLTVNkuU= Received: from CY4PR11MB1288.namprd11.prod.outlook.com (2603:10b6:903:23::8) by CY4PR11MB1991.namprd11.prod.outlook.com (2603:10b6:903:30::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3283.16; Mon, 17 Aug 2020 23:23:55 +0000 Received: from CY4PR11MB1288.namprd11.prod.outlook.com ([fe80::163:9209:a92d:812]) by CY4PR11MB1288.namprd11.prod.outlook.com ([fe80::163:9209:a92d:812%6]) with mapi id 15.20.3283.027; Mon, 17 Aug 2020 23:23:55 +0000 From: "Yao, Jiewen" To: "devel@edk2.groups.io" , "lersek@redhat.com" , "xiewenyi2@huawei.com" , "Wang, Jian J" CC: "huangming23@huawei.com" , "songdongkuang@huawei.com" Subject: Re: [edk2-devel] [PATCH EDK2 v2 1/1] SecurityPkg/DxeImageVerificationLib:Enhanced verification of Offset Thread-Topic: [edk2-devel] [PATCH EDK2 v2 1/1] SecurityPkg/DxeImageVerificationLib:Enhanced verification of Offset Thread-Index: AQHWcWlFNRwdlg90V0KlansqAmSeZak2Ym0AgADa0ICAABAfoIAFPYAAgABdzpA= Date: Mon, 17 Aug 2020 23:23:55 +0000 Message-ID: References: <1597319741-59646-1-git-send-email-xiewenyi2@huawei.com> <1597319741-59646-2-git-send-email-xiewenyi2@huawei.com> <024b1279-609d-fefa-8535-5af072815bf8@huawei.com> <250fc485-8705-88b7-21c9-ecd28132934d@redhat.com> In-Reply-To: <250fc485-8705-88b7-21c9-ecd28132934d@redhat.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiNjcxM2RhMDEtZmE1ZC00MDA1LWEyOGUtZjY0NTJlNmQ0MTNhIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiNUdHY29xUFloVmUwRWJ4NVA5OVJlcnQ2R3B6cTh0NEZKamtHNUloNnZFdmRGc2RmMlwvcndpNGdxRzg4T2luQkMifQ== x-ctpclassification: CTP_NT dlp-version: 11.5.1.3 dlp-product: dlpe-windows dlp-reaction: no-action authentication-results: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=intel.com; x-originating-ip: [192.198.147.220] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: e15e2e52-d100-4e82-c923-08d843049c51 x-ms-traffictypediagnostic: CY4PR11MB1991: 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: KHgL7vJICowRwfZgf4vgdzL4FO9MbuloizrxL2BNi6r8F5S5Ez4i8AqeQehDUeQQ72MXxDooV+kvQLpdmB65uwhclLCRpYyGyCwUg7Z4MhgC/o6LJ2/pcJ+EM7/VGdUtArVTkaE7hYFNooW/KFpIhpSbN1s0QoYJKvhixlrMbapGfCw4fO6d3xkD+4K5rF6BUq6Xl0NNH70M3hRn6R1a6nu56+PKVpSP8hfGKVvHHLT2JpNOiJbuGFdJ7MXi6MSXwSjgC5PTBbRc31VZRfkTa8/5hrbhJACIDMO2BZ9tyIw2TgNAs2PdfgBrGOU+mNehL89yqlYCJWSOz1NC/KrRAQfvSPko5RxTU/G2PSn9fwI9Q+8Mag0I9VW+GpQ+j5ALIWZS0QMan/4i1A66FAK6hw== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CY4PR11MB1288.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(376002)(39860400002)(346002)(366004)(136003)(8676002)(71200400001)(966005)(15650500001)(6636002)(2906002)(83380400001)(7696005)(478600001)(316002)(4326008)(76116006)(66556008)(6506007)(5660300002)(64756008)(54906003)(19627235002)(55016002)(9686003)(33656002)(186003)(66946007)(66476007)(86362001)(26005)(30864003)(52536014)(110136005)(53546011)(66446008)(8936002)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: qWgObs2Zu4T4fi/oAeI41UuHfA10M24g9qRaKOakMuwBwIkkKZRF6aZ1MmgqKJBPB2Qs5AGr//Kb73JCl+7qP1nF4dGLOB2DwinZqHnUWGrPDJYNAaBP5n6Yr1DICc+t6+A9qjn5ee9Qk70EQcC1vAfQqGnKhsITIHWjC0EDMPFnMgm0wnsFAp5DNs97hbCCnrYNAt/En4NoNJHGCJYN4YSekfbIAXZroCKL5bNSzu5HBuw6Mdh3sn3O7RuWcS9M5rAds8APEwTDx6HMlcGo44XZQibvL02GPl/vfeCVsfH56ei6Vd8uPDpBSIk/lgH2kkgC0wfCTjWnBEbEPhCQFxxiIuPahRsroJLrVrjeC1QL9kLwxK8JMfXPT/c5HLtDKVMAGexadveo3ypWq90gV3JAtn65oVwxXX3R2kXeKR3CX8meIWL5UZJ7+ZAMTnblJ18vrMuCX/dUUswBCIaHfDItsd4HFcKzdT6OwajXLbtwg25m0mpoMdUvCbsEM1b5kW7aiaX/pLSn5AbRDKDB/Ydk2F7dfM0HSt4OGLTwxMPbQ1mHe6unNVqad/aPWjbCsZtD8DEFQet5wDL00svbGPKxKJSeafG1io9PqAPJ9VyePepXpdQQpHnVHla6fBAzLs+6jhdJ4M+/7glFEPnu2w== MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CY4PR11MB1288.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e15e2e52-d100-4e82-c923-08d843049c51 X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Aug 2020 23:23:55.3391 (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: kZ7PZVyeIKrbNfWliQzd2NdQ8lgrG288fMHroZH3BI0z2hBgAf3VygCWYMa/vvp//MZvxG+skz1yORoCJuvQzQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR11MB1991 Return-Path: jiewen.yao@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 VGhhbmtzIExhc3psby4gR29vZCBmZWVkYmFjay4NCkkgdGhpbmsgd2UgbmVlZCBjbGFyaWZ5IHRo ZSByb2xlIGFuZCByZXNwb25zaWJpbGl0eSBmb3IgdGhlIGFjdGl2aXR5Lg0KDQpJIHByb3ZpZGUg bXkgdW5kZXJzdGFuZGluZyBhbmQgdGhvdWdodCwgYW5kIEkgd291bGQgbGlrZSB0byBoYXZlIG1v cmUgZmVlZGJhY2sgZnJvbSBvdGhlciBwZW9wbGUuDQoNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3Nh Z2UtLS0tLQ0KPiBGcm9tOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbyA8ZGV2ZWxAZWRrMi5ncm91cHMu aW8+IE9uIEJlaGFsZiBPZiBMYXN6bG8gRXJzZWsNCj4gU2VudDogVHVlc2RheSwgQXVndXN0IDE4 LCAyMDIwIDEyOjUzIEFNDQo+IFRvOiBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb20+ OyBkZXZlbEBlZGsyLmdyb3Vwcy5pbzsNCj4geGlld2VueWkyQGh1YXdlaS5jb207IFdhbmcsIEpp YW4gSiA8amlhbi5qLndhbmdAaW50ZWwuY29tPg0KPiBDYzogaHVhbmdtaW5nMjNAaHVhd2VpLmNv bTsgc29uZ2RvbmdrdWFuZ0BodWF3ZWkuY29tDQo+IFN1YmplY3Q6IFJlOiBbZWRrMi1kZXZlbF0g W1BBVENIIEVESzIgdjIgMS8xXQ0KPiBTZWN1cml0eVBrZy9EeGVJbWFnZVZlcmlmaWNhdGlvbkxp YjpFbmhhbmNlZCB2ZXJpZmljYXRpb24gb2YgT2Zmc2V0DQo+IA0KPiBIaSBKaWV3ZW4sDQo+IA0K PiBPbiAwOC8xNC8yMCAxMDo1MywgWWFvLCBKaWV3ZW4gd3JvdGU6DQo+ID4+IFRvIEppZXdlbiwN Cj4gPj4gU29ycnksIEkgZG9uJ3QgaGF2ZSBlbnZpcm9ubWVudCB0byByZXByb2R1Y2UgdGhlIGlz c3VlLg0KPiA+DQo+ID4gUGxlYXNlIGhlbHAgbWUgdW5kZXJzdGFuZCwgaWYgeW91IGRvbuKAmXQg aGF2ZSBlbnZpcm9ubWVudCB0byByZXByb2R1Y2UgdGhlDQo+IGlzc3VlLCBob3cgZG8geW91IGd1 YXJhbnRlZSB0aGF0IHlvdXIgcGF0Y2ggZG9lcyBmaXggdGhlIHByb2JsZW0gYW5kIHdlIGRvbuKA mXQNCj4gaGF2ZSBhbnkgb3RoZXIgdnVsbmVyYWJpbGl0aWVzPw0KPiANCj4gVGhlIG9yaWdpbmFs IGJ1ZyByZXBvcnQgaW4NCj4gPGh0dHBzOi8vYnVnemlsbGEudGlhbm9jb3JlLm9yZy9zaG93X2J1 Zy5jZ2k/aWQ9MjIxNSNjMD4gaXMgc2VyaW91c2x5DQo+IGxhY2tpbmcuIEl0IGRvZXMgbm90IGdv IGludG8gZGV0YWlsIGFib3V0IHRoZSBhbGxlZ2VkIGludGVnZXIgb3ZlcmZsb3cuDQo+IEl0IGRv ZXMgbm90IHF1b3RlIHRoZSBjb2RlLCBkb2VzIG5vdCBleHBsYWluIHRoZSBjb250cm9sIGZsb3cs IGRvZXMgbm90DQo+IGlkZW50aWZ5IHRoZSBleGFjdCBlZGsyIGNvbW1pdCBhdCB3aGljaCB0aGUg dnVsbmVyYWJpbGl0eSBleGlzdHMuDQoNCltKaWV3ZW5dIFllcywgSSBhZ3JlZSB3aXRoIHlvdSB0 aGF0IHRoaXMgaXMgcHJvYmxlbWF0aWMuDQoNCj4gDQo+IFRoZSBidWcgcmVwb3J0IGFsc28gZG9l cyBub3Qgb2ZmZXIgYSByZXByb2R1Y2VyLg0KDQpbSmlld2VuXSBJIGRvbuKAmXQgYmVsaWV2ZSBp dCBpcyByZXBvcnRlcidzIHJlc3BvbnNpYmlsaXR5IHRvIHByb3ZpZGUgYSByZXByb2R1Y2VyLg0K VGhlIHJlcG9ydGVyIG1heSBwcm92aWRlIGEgcmVwcm9kdWNlciB0byBjb252aW5jZSBvdGhlciBw ZW9wbGUgdGhlIGlzc3VlIGlzIHRoZXJlLg0KSXQgaXMgZW5jb3VyYWdlZCBhbmQgaGlnaGx5IHJl Y29tbWVuZGVkLCBidXQgaXQgaXMgTk9UIG1hbmRhdG9yeS4NCk1hbnkgdGltZXMsIHBlb3BsZSBq dXN0IHJldmlldyB0aGUgY29kZSBhbmQgaGFwcGVuIHRvIGZpbmQgc29tZXRoaW5nIHN1c3BpY2lv dXMuDQpQZW9wbGUgY2FuIHJlcG9ydCB0aGUgc3VzcGljaW91cyBhbmQgYXNrIGZvciBoZWxwIG9u IGludmVzdGlnYXRpb24uIFdlIHNob3VsZCBlbmNvdXJhZ2UgdGhhdCBhY3Rpdml0eS4NCg0KSG93 ZXZlciwgSSBkbyB0aGluayB0aGUgcHJvZHVjZXIgaXMgbWFuZGF0b3J5IGZvciBhIGZpeCBvciBh dCBsZWFzdCBhIHNlY3VyaXR5IGZpeC4NClRoZSBvd25lciB0byBmaXggdGhlIGlzc3VlIHNob3Vs ZCBndWFyYW50ZWUgdGhlIHBhdGNoIGlzIGdvb2QuDQpUaGUgb3duZXIgc2hhbGwgbmV2ZXIgcmVs eSBvbiB0aGUgY29kZSByZXZpZXdlciB0byBmaWd1cmUgb3V0IGlmIHRoZSBwYXRjaCBpcyBnb29k IGFuZCBjb21wbGV0ZS4NCg0KSSBoYXZlIHNvbWUgYmFkIGV4cGVyaWVuY2UgdGhhdCBidWcgb3du ZXIganVzdCB3cm90ZSBhIHBhdGNoIGFuZCB0cmllZCB0byBmaXggYSBwcm9ibGVtLCB3aXRob3V0 IGFueSB0ZXN0Lg0KQW5kIGl0IGhhcHBlbmVkIHBhc3NlZCBjb2RlIHJldmlldyBmcm9tIHNvbWVv bmUgd2hvIGRvZXMgbm90IHdlbGwgdW5kZXJzdGFuZCB0aGUgcHJvYmxlbSwgYnV0IGdpdmUgcmIg YmFzZWQgdXBvbiB0aGUgdGltZSBwcmVzc3VyZS4NCkxhdGVyLCB0aGUgZml4IHdhcyBhcHByb3Zl ZCB0byBiZSB1c2VsZXNzLg0KDQpJbiBteSBtZW1vcnksIGF0IGxlYXN0IDMgY2FzZXMgd2VyZSBz ZWN1cml0eSBmaXguIFRoZXkgYXJlIGZvdW5kLCBqdXN0IGJlY2F1c2UgdGhleSBhcmUgc2Vuc2l0 aXZlLCBtb3JlIHBlb3BsZSB0b29rIGEgbG9vayBsYXRlci4NCiAgICBJdCB3YXMgc2ltcGxlLiBJ dCB3YXMgb25lLWxpbmUgY2hhbmdlLg0KICAgQnV0IGl0IGhhcyBub3QgdGVzdCwgYW5kIGl0IHdh cyB3cm9uZy4NCiJJdCB3YXMgcmlkaWN1bG91cyIgLS0gY29tbWVudGVkIGJ5IHRoZSBwZW9wbGUg d2hvIGZpbmQgdGhlIHNvLWNhbGxlZCBzZWN1cml0eSBmaXggZG9lcyBub3QgZml4IHRoZSBpc3N1 ZS4NCg0KDQo+IA0KPiBBZGRpdGlvbmFsbHksIHRoZSBleGFjdCBzdGF0ZW1lbnQgdGhhdCB0aGUg YnVnIHJlcG9ydCBkb2VzIG1ha2UsIG5hbWVseQ0KPiANCj4gICBpdCdzIHBvc3NpYmxlIHRvIG92 ZXJmbG93IE9mZnNldCBiYWNrIHRvIDAgY2F1c2luZyBhbiBlbmRsZXNzIGxvb3ANCj4gDQo+IGlz IHdyb25nIChhcyBmYXIgYXMgSSBjYW4gdGVsbCBhbnl3YXkpLiBJdCBpcyBub3QgIk9mZlNldCIg dGhhdCBjYW4gYmUNCj4gb3ZlcmZsb3dlZCB0byB6ZXJvLCBidXQgdGhlICphZGRlbmQqIHRoYXQg aXMgYWRkZWQgdG8gT2ZmU2V0IGNhbiBiZQ0KPiBvdmVyZmxvd2VkIHRvIHplcm8uIFRoZXJlZm9y ZSB0aGUgaW5maW5pdGUgbG9vcCB3aWxsIGFyaXNlIGJlY2F1c2UNCj4gT2ZmU2V0IHJlbWFpbnMg c3R1Y2sgYXQgaXRzIHByZXNlbnQgdmFsdWUsIGFuZCBub3QgYmVjYXVzZSBPZmZTZXQgd2lsbA0K PiBiZSByZS1zZXQgdG8gemVyby4NCj4gDQo+IEZvciB0aGUgcmVhc29ucywgd2UgY2FuIG9ubHkg c3BlY3VsYXRlIGFzIHRvIHdoYXQgdGhlIGFjdHVhbCBwcm9ibGVtIGlzLA0KPiB1bmxlc3MgSmlh biBkZWNpZGVzIHRvIGpvaW4gdGhlIGRpc2N1c3Npb24gYW5kIGNsYXJpZmllcyB3aGF0IGhlIGhh ZCBpbg0KPiBtaW5kIG9yaWdpbmFsbHkuDQoNCltKaWV3ZW5dIFdvdWxkIHlvdSBwbGVhc2UgY2xh cmlmeSB3aGF0IGRvIHlvdSBtZWFuICJ3ZSIgaGVyZT8NCklmICJ3ZSIgbWVhbnMgdGhlIGJ1ZyBk aXNwYXRjaGVyLCBpdCBpcyB0b3RhbGx5IE9LLiBUaGUgZGlzcGF0Y2hlciBqdXN0IGFzc2lnbiB0 aGUgYnVnLg0KSWYgIndlIiBtZWFucyB0aGUgZGV2ZWxvcGVyIGFzc2lnbmVkIHRvIGZpeCB0aGUg YnVnLCBpdCBpcyBOT1QgT0suIFRoZSBkZXZlbG9wZXIgc2hvdWxkIHRha2UgdGhlIHJlc3BvbnNp YmlsaXR5IHRvIHVuZGVyc3RhbmQgdGhlIHByb2JsZW0uIA0KDQo+IA0KPiBNeSB1bmRlcnN0YW5k aW5nIChvciBldmVuICJyZWNvbnN0cnVjdGlvbiIpIG9mIHRoZSB2dWxuZXJhYmlsaXR5IGlzDQo+ IGRlc2NyaWJlZCBhYm92ZSwgYW5kIGluIHRoZSBwYXRjaGVzIHRoYXQgSSBwcm9wb3NlZC4NCg0K W0ppZXdlbl0gWWVzLiBJIHRlbmQgdG8gYWdyZWUgd2l0aCB5b3Ugb24gdGhlIGFuYWx5c2lzLiBB cHByZWNpYXRlIHlvdXIgaGVscCENCg0KPiANCj4gV2UgY2FuIHdyaXRlIGEgcGF0Y2ggYmFzZWQg b24gY29kZSBhbmFseXNpcy4gSXQncyBwb3NzaWJsZSB0byBpZGVudGlmeQ0KPiBpbnRlZ2VyIG92 ZXJmbG93cyBiYXNlZCBvbiBjb2RlIGFuYWx5c2lzLCBhbmQgaXQncyBwb3NzaWJsZSB0byB2ZXJp ZnkNCj4gdGhlIGNvcnJlY3RuZXNzIG9mIGZpeGVzIGJ5IGNvZGUgcmV2aWV3LiBPYnZpb3VzbHkg dGVzdGluZyBpcyBhbHdheXMNCj4gZ29vZCwgYnV0IG1hbnkgdGltZXMsIGNvbnN0cnVjdGluZyBy ZXByb2R1Y2VycyBmb3Igc3VjaCBpc3N1ZXMgdGhhdCB3ZXJlDQo+IGZvdW5kIGJ5IGNvZGUgcmV2 aWV3LCBpcyBkaWZmaWN1bHQgYW5kIHRpbWUgY29uc3VtaW5nLiBXZSBjYW4gc2F5IHRoYXQNCj4g d2UgZG9uJ3QgZml4IHZ1bG5lcmFiaWxpdGllcyB3aXRob3V0IHJlcHJvZHVjZXJzLCBvciB3ZSBj YW4gc2F5IHRoYXQgd2UNCj4gbWFrZSBhbiBlZmZvcnQgdG8gZml4IHRoZW0gZXZlbiBpZiBhbGwg d2UgaGF2ZSBpcyBjb2RlIGFuYWx5c2lzIChhbmQgbm90DQo+IGEgcmVwcm9kdWNlcikuDQoNCltK aWV3ZW5dIEkgd291bGQgc2F5OiB5ZXMgYW5kIG5vLg0KWWVzLCBJIGFncmVlIHdpdGggeW91IHRo YXQgaXQgbWlnaHQgYmUgZGlmZmljdWx0IGFuZCB0aW1lIGNvbnN1bWluZyB0byBjb25zdHJ1Y3Qg dGhlIHJlcHJvZHVjZXIuDQpIb3dldmVyLCAib2J2aW91c2x5IiBpcyBhIHN1YmplY3QgdGVybS4g U29tZW9uZSBtYXkgdGhpbmsgc29tZXRoaW5nIGlzIG9idmlvdXMsIGJ1dCBvdGhlciBwZW9wbGUg ZG9lcyBub3QuDQpXZSBzaG91bGQgYmUgY2xlYXIgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBw YXRjaCBwcm92aWRlciBpcyB0byBwcm92aWRlIGhpZ2ggcXVhbGl0eSBwYXRjaC4NCkhhdmluZyBi YXNpYyB1bml0IHRlc3QgaXMgdGhlIGJlc3Qgd2F5IHRvIHByb3ZlIHRoYXQgdGhlIGZpeCBpcyBn b29kLg0KDQpJIGhhdmUgc2VlbiBiYWQgY2FzZXMgd2hlbiBJIGFzayBmb3IgdGhlIHRlc3QgZm9y IHBhdGNoLCB0aGVuIHRoZSBhbnN3ZXIgSSBnb3QgaXM6ICJJIHRlc3QgdGhlIHdpbmRvd3MgYm9v dCIuDQpCdXQgdGhlIHRlc3QgLSB3aW5kb3dzIGJvb3QgLSBoYXMgbm90aGluZyByZWxhdGVkIHRv IHRoZSBwYXRjaC4gSXQgb25seSBwcm92ZXMgbm8gcmVncmVzc2lvbiwgYnV0IGNhbm5vdCBwcm92 ZSB0aGUgaXNzdWUgZGVzY3JpYmVkIGlzIHJlc29sdmVkLg0KDQpMZXQncyB0aGluayBhZ2FpbiBp biB0aGlzIGNhc2UsIGlmIHRoZSBwYXRjaCBwcm92aWRlciBkb2VzIHNvbWUgYmFzaWMgdW5pdCB0 ZXN0LCBoZS9zaGUgbWF5IGZpbmQgb3V0IHRoZSBwcm9ibGVtIGJ5IGhpbXNlbGYvaGVyc2VsZi4N ClRoYXQgY2FuIHNhdmUgb3RoZXIgcGVvcGxlJ3MgdGltZSB0byByZXZpZXcuDQoNCkkgZG9u4oCZ dCBwcmVmZXIgdG8gbW92ZSB0aGUgcmVzcG9uc2liaWxpdHkgZnJvbSBwYXRjaCBwcm92aWRlciB0 byB0aGUgY29kZSByZXZpZXdlciB0byBjaGVjayBpZiB0aGUgZml4IGlzIGdvb2QuDQpPdGhlcndp c2UsIHRoZSBjb2RlIHJldmlld2VyIG1heSBiZSBvdmVyd2hlbG1lZC4NCg0KV2UgbWF5IGNsYXJp ZnkgYW5kIGRvY3VtZW50IHRoZSByb2xlIGFuZCByZXNwb25zaWJpbGl0eSBpbiBFREtJSSBjbGVh cmx5LiBPbmNlIHRoYXQgaXMgcmVhZHksIHdlIGNhbiBmb2xsb3cgdGhlIHJ1bGUuDQpCZWZvcmUg dGhhdCBpcyByZWFkeSwgaW4gdGhpcyBwYXJ0aWN1bGFyIGNhc2UsIEkgc3RpbGwgcHJlZmVyIHdl IGhhdmUgcHJvZHVjZXIgdG8gcHJvdmUgdGhlIHBhdGNoIGlzIGdvb2QuDQoNCg0KPiANCj4gU28g dGhlIGFib3ZlIHBhcmFncmFwaCBjb25jZXJucyAiY29ycmVjdG5lc3MiLiBSZWdhcmRpbmcgImNv bXBsZXRlbmVzcyIsDQo+IEkgZ3VhcmFudGVlIHlvdSB0aGF0IHRoaXMgcGF0Y2ggZG9lcyBub3Qg Zml4ICphbGwqIHByb2JsZW1zIHJlbGF0ZWQgdG8NCj4gUEUgcGFyc2luZy4gKFNlZSB0aGUgb3Ro ZXIgQlogdGlja2V0cy4pIEl0IGRvZXMgZml4ICpvbmUqIGlzc3VlIHdpdGggUEUNCj4gcGFyc2lu Zy4gV2UgY2FuIHNheSB0aGF0IHdlIHRyeSB0byBmaXggc3VjaCBpc3N1ZXMgZ3JhZHVhbGx5IChn aXZlDQo+IGRpZmZlcmVudCBDVkUgbnVtYmVycyB0byBkaWZmZXJlbnQgaXNzdWVzLCBhbmQgYWRk cmVzcyB0aGVtIG9uZSBhdCBhDQo+IHRpbWUpLCBvciB3ZSBjYW4gc2F5IHRoYXQgd2UgcmV3cml0 ZSBQRSBwYXJzaW5nIGZyb20gdGhlIGdyb3VuZCB1cC4NCj4gKEJUVzogSSBoYXZlIHNlcmlvdXNs eSBhdHRlbXB0ZWQgdGhhdCBpbiB0aGUgcGFzdCwgYW5kIEkgZ2F2ZSB1cCwNCj4gYmVjYXVzZSB0 aGUgUEUgZm9ybWF0IGlzIEZVQkFSLikNCg0KW0ppZXdlbl0gTWF5YmUgdGhlcmUgaXMgbWlzdW5k ZXJzdGFuZGluZy4NCkkgZG8gbm90IG1lYW4gdG8gbGV0IHBhdGNoIHByb3ZpZGVyIHRvIGZpeCBh bGwgaXNzdWUgaW4gUEUgcGFyc2luZy4NCkp1c3QgbGlrZSB3ZSBjYW5ub3QgZmlsZSBvbmUgQnVn emlsbGEgdG8gZml4IGFsbCBpc3N1ZSBpbiBFREtJSSAtIGl0IGlzIHVuZmFpci4NCg0KV2hhdCBJ IG1lYW4gaXMgdGhhdCB0aGUgcGF0Y2ggcHJvdmlkZXIgc2hvdWxkIGd1YXJhbnRlZSB0aGUgY29y cmVjdG5lc3MgYW5kIGNvbXBsZXRlbmVzcyBvZiB0aGUgaXNzdWUgaW4gdGhlIGJ1ZyByZXBvcnQu DQoNCk9uZSBmYWtlZCBiYWQgZXhhbXBsZSBvZiBjb3JyZWN0bmVzcyBpczoNCiAgICBBIGJ1ZyBy ZXBvcnQgaXMgZmlsZSB0byBzYXk6IHRoZSBjb2RlIGhhcyBvdmVyZmxvdyBjbGFzcyBBLg0KICAg IFRoZSBmYWN0b3IgaXM6IHRoZSBjb2RlIGhhcyBvdmVyZmxvdyBjbGFzcyBBIGF0IGxpbmUgWCBh bmQgbGluZSBZLg0KICAgIFRoZSBwYXRjaCBvbmx5IG1vZGlmaWVkIHNvbWUgY29kZSBhdCBsaW5l IFgsIGJ1dCB0aGUgb3ZlcmZsb3cgY2xhc3MgQSBhdCBsaW5lIFggc3RpbGwgZXhpc3RzLg0KDQpP bmUgZmFrZWQgYmFkIGV4YW1wbGUgb2YgY29tcGxldGVuZXNzIGlzOg0KICAgIEEgYnVnIHJlcG9y dCBpcyBmaWxlIHRvIHNheTogdGhlIGNvZGUgaGFzIG92ZXJmbG93IGNsYXNzIEEuDQogICAgVGhl IGZhY3RvciBpczogdGhlIGNvZGUgaGFzIG92ZXJmbG93IGNsYXNzIEEgYXQgbGluZSBYIGFuZCBs aW5lIFkuDQogICAgVGhlIHBhdGNoIG9ubHkgZml4ZWQgdGhlIG92ZXJmbG93IGNsYXNzIEEgYXQg bGluZSBYIGJ1dCBub3QgbGluZSBZLg0KDQpUaGUgcGF0Y2ggcHJvdmlkZXIgc2hvdWxkIHRha2Ug cmVzcG9uc2liaWxpdHkgdG8gZG8gdGhhdCB3b3JrIHNlcmlvdXNseSB0byBmaW5kIG91dCBpc3N1 ZSBpbiBsaW5lIFggYW5kIGxpbmUgWSBhbmQgZml4IHRoZW0uDQpIZS9zaGUgbWF5IGNob29zZSB0 byBqdXN0IGZpeCBsaW5lIFggYW5kIGxpbmUgWS4gUmV3cml0ZSBpcyB3aG9sZSBtb2R1bGUgaXMg Tk9UIHJlcXVpcmVkLg0KDQoNCg0KPiANCj4gSW4gc3VtbWFyeToNCj4gDQo+IC0gdGhlIHByb2Js ZW0gc3RhdGVtZW50IGlzIHVuY2xlYXIsDQpbSmlld2VuXSBBZ3JlZS4NCg0KPiANCj4gLSBpdCBz ZWVtcyBsaWtlIHRoZXJlIGlzIGluZGVlZCBhbiBpbnRlZ2VyIG92ZXJmbG93IHByb2JsZW0gaW4g dGhlDQo+IFNlY0RhdGFEaXIgcGFyc2luZyBsb29wLCBidXQgaXQncyB1bmNlcnRhaW4gd2hldGhl ciB0aGUgYnVnIHJlcG9ydGVyIGhhZA0KPiBleGFjdGx5IHRoYXQgaW4gbWluZA0KW0ppZXdlbl0g QWdyZWUuDQoNCj4gDQo+IC0gUEUgcGFyc2luZyBpcyBndWFyYW50ZWVkIHRvIGhhdmUgb3RoZXIg dnVsbmVyYWJpbGl0aWVzIGVsc2V3aGVyZSBpbg0KPiBlZGsyLCBidXQgSSdtIGN1cnJlbnRseSB1 bmF3YXJlIG9mIG90aGVyIHN1Y2ggaXNzdWVzIGluDQo+IER4ZUltYWdlVmVyaWZpY2F0aW9uTGli IHNwZWNpZmljYWxseQ0KW0ppZXdlbl0gQWdyZWUuDQoNCj4gDQo+IC0gZXZlbiBpZiB0aGVyZSBh cmUgb3RoZXIgc3VjaCBwcm9ibGVtcyAoaW4gRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIgb3INCj4g ZWxzd2VoZXJlKSwgZml4aW5nIHRoaXMgYnVnIHRoYXQgd2Uga25vdyBhYm91dCBpcyBsaWtlbHkg d29ydGh3aGlsZQ0KW0ppZXdlbl0gQWdyZWUuDQoNCj4gDQo+IC0gZm9yIG1hbnkgc3VjaCBidWdz LCBjb25zdHJ1Y3RpbmcgYSByZXByb2R1Y2VyIGlzIGRpZmZpY3VsdCBhbmQgdGltZQ0KPiBjb25z dW1pbmc7IGNvZGUgYW5hbHlzaXMsIGFuZCAqcmVncmVzc2lvbi10ZXN0aW5nKiBhcmUgZnJlcXVl bnRseSB0aGUNCj4gb25seSB0b29scyB3ZSBoYXZlLiBUaGF0IGRvZXNuJ3QgbWVhbiB3ZSBzaG91 bGQgaWdub3JlIHRoaXMgY2xhc3Mgb2YgYnVncy4NCltKaWV3ZW5dIEkgYWdyZWUgd2l0aCB5b3Ug YWJvdmUgdHdvIHNlbnRlbmNlLg0KQW5kIEkgc3RpbGwgYmVsaWV2ZSB0aGUgcmVwcm9kdWNlciBp cyByZXF1aXJlZC4gDQoNCj4gDQo+IChGaXhpbmcgaW50ZWdlciBvdmVyZmxvd3MgcmV0cm8tYWN0 aXZlbHkgaXMgbW9yZSBkaWZmaWN1bHQgdGhhbiB3cml0aW5nDQo+IG92ZXJmbG93LWZyZWUgY29k ZSBpbiB0aGUgZmlyc3QgcGxhY2UsIGJ1dCB0aGF0IHNoaXAgaGFzIHNhaWxlZDsgc28gd2UNCj4g Y2FuIG9ubHkgZmlnaHQgdGhlc2UgYnVncyBpbmNyZW1lbnRhbGx5IG5vdywgdW5sZXNzIHdlIGNh biByZXdyaXRlIFBFDQo+IHBhcnNpbmcgd2l0aCBhIG5ldyBkYXRhIHN0cnVjdHVyZSBmcm9tIHRo ZSBncm91bmQgdXAuIEFnYWluIEkgdHJpZWQgdGhhdA0KPiBhbmQgZ2F2ZSB1cCwgYmVjYXVzZSB0 aGUgc3BlYyBpcyBub3QgcHVibGljLCBhbmQgd2hhdCBJIGRpZCBtYW5hZ2UgdG8NCj4gbGVhcm4g YWJvdXQgUEUsIHNob3dlZCB0aGF0IGl0IHdhcyBpbnNhbmVseSBvdmVyLWVuZ2luZWVyZWQuIEkn bSBub3QNCj4gc2F5aW5nIHRoYXQgb3RoZXIgYmluYXJ5IC8gZXhlY3V0YWJsZSBmb3JtYXRzIGFy ZSBiZXR0ZXIsIG9mIGNvdXJzZS4pDQo+IA0KPiBQbGVhc2UgY2hlY2sgb3V0IG15IHBhdGNoZXMg KGlubGluZWQgZWxzZXdoZXJlIGluIHRoaXMgdGhyZWFkKSwgYW5kDQo+IGNvbW1lbnQgd2hldGhl ciB5b3UnZCBsaWtlIG1lIHRvIHBvc3QgdGhlbSB0byB0aGUgbGlzdCBhcyBhIHN0YW5kYWxvbmUN Cj4gc2VyaWVzLg0KW0ppZXdlbl0gRnJvbSBjb2RlIHN0cnVjdHVyZSBwZXJzcGVjdGl2ZSwgSSBh Z3JlZSB3aXRoIHlvdSBvbiB0aGUgYW5hbHlzaXMuIEFwcHJlY2lhdGUgdGhhdC4NCg0KSWYgSSBj YW4gZ2l2ZSBzb21lIGNvbW1lbnQsIEkgd291bGQgdGhpbmsgYWJvdXQgdGhlIHByb3ZpZGUgdGhl IGZpeCBpbiBCYXNlUGVDb2ZmTGliLg0KVGhlIHJlYXNvbiBpcyB0aGF0OiBUaGUgUEUgcGFyc2lu ZyBtYXkgc2NhdHRlcmVkIGluIHRoZSBFREtJSS4gVGhlIEJhc2VQZUNvZmZMaWIgd2lsbCBiZSBj b25zdW1lZCBhcyB0aGUgcm9vdCBvZiBwYXJzaW5nLg0KSnVzdCBpbiBjYXNlLCB0aGVyZSBpcyBv dGhlciBwYXJzaW5nIGxvZ2ljLiBJdCBtYXkgY29uc3VtZSB0aGUgQmFzZVBlQ29mZkxpYiBidXQg bm90IEltYWdlVmVyaWZpY2F0aW9uTGliLg0KSGF2aW5nIGZpeCBpbiBJbWFnZVZlcmlmaWNhdGlv bkxpYiBkb2VzIG5vdCBoZWxwIHRvIHJlc29sdmUgdGhlIHByb2JsZW0gaW4gb3RoZXIgcGFyc2Vy Lg0KSWYgd2UgY2FuIHJlamVjdCB0aGUgYmFkIGltYWdlIGluIEJhc2VQZUNvZmZMaWIsIGl0IHdv dWxkIGJlIHRoZSBiZXN0IHdheS4NCg0KQnV0IEkgbWlnaHQgYmUgbXlvcGlhIGFuZCBvdmVybG9v ayBzb21lIHByb2JsZW0uDQpBcyBzdWNoLCBoYXZpbmcgcmVwcm9kdWNlciBpcyB0aGUgYmVzdCB3 YXkgdG8gcHJvdmUgYW5kIGdpdmUgY29uZmlkZW5jZSB0byBvdGhlciBwZW9wbGUuDQoNCg0KPiAN Cj4gSmlhbjogaXQgd291bGRuJ3QgaHVydCBpZiB5b3UgY29tbWVudGVkIGFzIHdlbGwuDQo+IA0K PiBUaGFua3MNCj4gTGFzemxvDQo+IA0KPiA+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0K PiA+PiBGcm9tOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbyA8ZGV2ZWxAZWRrMi5ncm91cHMuaW8+IE9u IEJlaGFsZiBPZg0KPiB3ZW55aSx4aWUNCj4gPj4gdmlhIGdyb3Vwcy5pbw0KPiA+PiBTZW50OiBG cmlkYXksIEF1Z3VzdCAxNCwgMjAyMCAzOjU0IFBNDQo+ID4+IFRvOiBMYXN6bG8gRXJzZWsgPGxl cnNla0ByZWRoYXQuY29tPjsgZGV2ZWxAZWRrMi5ncm91cHMuaW87IFlhbywgSmlld2VuDQo+ID4+ IDxqaWV3ZW4ueWFvQGludGVsLmNvbT47IFdhbmcsIEppYW4gSiA8amlhbi5qLndhbmdAaW50ZWwu Y29tPg0KPiA+PiBDYzogaHVhbmdtaW5nMjNAaHVhd2VpLmNvbTsgc29uZ2RvbmdrdWFuZ0BodWF3 ZWkuY29tDQo+ID4+IFN1YmplY3Q6IFJlOiBbZWRrMi1kZXZlbF0gW1BBVENIIEVESzIgdjIgMS8x XQ0KPiA+PiBTZWN1cml0eVBrZy9EeGVJbWFnZVZlcmlmaWNhdGlvbkxpYjpFbmhhbmNlZCB2ZXJp ZmljYXRpb24gb2YgT2Zmc2V0DQo+ID4+DQo+ID4+IFRvIExhc3psbywNCj4gPj4gVGhhbmsgeW91 IGZvciB5b3VyIGRldGFpbGVkIGRlc2NyaXB0aW9uLCBJIGFncmVlIHdpdGggd2hhdCB5b3UgYW5h bHl6ZWQgYW5kDQo+IEknbQ0KPiA+PiBPSyB3aXRoIHlvdXIgcGF0Y2hlcywgaXQncw0KPiA+PiBj b3JyZWN0IGFuZCBtdWNoIHNpbXBsZXIuDQo+ID4+DQo+ID4+IFRvIEppZXdlbiwNCj4gPj4gU29y cnksIEkgZG9uJ3QgaGF2ZSBlbnZpcm9ubWVudCB0byByZXByb2R1Y2UgdGhlIGlzc3VlLg0KPiA+ Pg0KPiA+PiBUaGFua3MNCj4gPj4gV2VueWkNCj4gPj4NCj4gPj4gT24gMjAyMC84LzE0IDI6NTAs IExhc3psbyBFcnNlayB3cm90ZToNCj4gPj4+IE9uIDA4LzEzLzIwIDEzOjU1LCBXZW55aSBYaWUg d3JvdGU6DQo+ID4+Pj4gUkVGOmh0dHBzOi8vYnVnemlsbGEudGlhbm9jb3JlLm9yZy9zaG93X2J1 Zy5jZ2k/aWQ9MjIxNQ0KPiA+Pj4+DQo+ID4+Pj4gVGhlcmUgaXMgYW4gaW50ZWdlciBvdmVyZmxv dyB2dWxuZXJhYmlsaXR5IGluIER4ZUltYWdlVmVyaWZpY2F0aW9uSGFuZGxlcg0KPiA+Pj4+IGZ1 bmN0aW9uIHdoZW4gcGFyc2luZyB0aGUgUEUgZmlsZXMgYXR0cmlidXRlIGNlcnRpZmljYXRlIHRh YmxlLiBJbiBjYXNlcw0KPiA+Pj4+IHdoZXJlIFdpbkNlcnRpZmljYXRlLT5kd0xlbmd0aCBpcyBz dWZmaWNpZW50bHkgbGFyZ2UsIGl0J3MgcG9zc2libGUgdG8NCj4gPj4+PiBvdmVyZmxvdyBPZmZz ZXQgYmFjayB0byAwIGNhdXNpbmcgYW4gZW5kbGVzcyBsb29wLg0KPiA+Pj4+DQo+ID4+Pj4gQ2hl Y2sgb2Zmc2V0IGluYmV0d2VlbiBWaXJ0dWFsQWRkcmVzcyBhbmQgVmlydHVhbEFkZHJlc3MgKyBT aXplLg0KPiA+Pj4+IFVzaW5nIFNhZmVpbnRMaWIgdG8gZG8gb2Zmc2V0IGFkZGl0aW9uIHdpdGgg cmVzdWx0IGNoZWNrLg0KPiA+Pj4+DQo+ID4+Pj4gQ2M6IEppZXdlbiBZYW8gPGppZXdlbi55YW9A aW50ZWwuY29tPg0KPiA+Pj4+IENjOiBKaWFuIEogV2FuZyA8amlhbi5qLndhbmdAaW50ZWwuY29t Pg0KPiA+Pj4+IENjOiBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPg0KPiA+Pj4+IFNp Z25lZC1vZmYtYnk6IFdlbnlpIFhpZSA8eGlld2VueWkyQGh1YXdlaS5jb20+DQo+ID4+Pj4gLS0t DQo+ID4+Pj4gIFNlY3VyaXR5UGtnL0xpYnJhcnkvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIvRHhl SW1hZ2VWZXJpZmljYXRpb25MaWIuaW5mDQo+IHwNCj4gPj4gMSArDQo+ID4+Pj4gIFNlY3VyaXR5 UGtnL0xpYnJhcnkvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIvRHhlSW1hZ2VWZXJpZmljYXRpb25M aWIuaA0KPiB8DQo+ID4+IDEgKw0KPiA+Pj4+ICBTZWN1cml0eVBrZy9MaWJyYXJ5L0R4ZUltYWdl VmVyaWZpY2F0aW9uTGliL0R4ZUltYWdlVmVyaWZpY2F0aW9uTGliLmMNCj4gfA0KPiA+PiAxMTEg KysrKysrKysrKystLS0tLS0tLS0NCj4gPj4+PiAgMyBmaWxlcyBjaGFuZ2VkLCA2MyBpbnNlcnRp b25zKCspLCA1MCBkZWxldGlvbnMoLSkNCj4gPj4+Pg0KPiA+Pj4+IGRpZmYgLS1naXQNCj4gPj4g YS9TZWN1cml0eVBrZy9MaWJyYXJ5L0R4ZUltYWdlVmVyaWZpY2F0aW9uTGliL0R4ZUltYWdlVmVy aWZpY2F0aW9uTGliLmluZg0KPiA+PiBiL1NlY3VyaXR5UGtnL0xpYnJhcnkvRHhlSW1hZ2VWZXJp ZmljYXRpb25MaWIvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIuaW5mDQo+ID4+Pj4gaW5kZXggMWUx YTYzOTg1N2UwLi5hN2FjNDgzMGIzZDQgMTAwNjQ0DQo+ID4+Pj4gLS0tDQo+ID4+IGEvU2VjdXJp dHlQa2cvTGlicmFyeS9EeGVJbWFnZVZlcmlmaWNhdGlvbkxpYi9EeGVJbWFnZVZlcmlmaWNhdGlv bkxpYi5pbmYNCj4gPj4+PiArKysNCj4gPj4gYi9TZWN1cml0eVBrZy9MaWJyYXJ5L0R4ZUltYWdl VmVyaWZpY2F0aW9uTGliL0R4ZUltYWdlVmVyaWZpY2F0aW9uTGliLmluZg0KPiA+Pj4+IEBAIC01 Myw2ICs1Myw3IEBAIFtMaWJyYXJ5Q2xhc3Nlc10NCj4gPj4+PiAgICBTZWN1cml0eU1hbmFnZW1l bnRMaWINCj4gPj4+PiAgICBQZUNvZmZMaWINCj4gPj4+PiAgICBUcG1NZWFzdXJlbWVudExpYg0K PiA+Pj4+ICsgIFNhZmVJbnRMaWINCj4gPj4+Pg0KPiA+Pj4+ICBbUHJvdG9jb2xzXQ0KPiA+Pj4+ ICAgIGdFZmlGaXJtd2FyZVZvbHVtZTJQcm90b2NvbEd1aWQgICAgICAgIyMgU09NRVRJTUVTX0NP TlNVTUVTDQo+ID4+Pj4gZGlmZiAtLWdpdA0KPiA+PiBhL1NlY3VyaXR5UGtnL0xpYnJhcnkvRHhl SW1hZ2VWZXJpZmljYXRpb25MaWIvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIuaA0KPiA+PiBiL1Nl Y3VyaXR5UGtnL0xpYnJhcnkvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIvRHhlSW1hZ2VWZXJpZmlj YXRpb25MaWIuaA0KPiA+Pj4+IGluZGV4IDE3OTU1ZmY5Nzc0Yy4uMDYwMjczOTE3ZDVkIDEwMDY0 NA0KPiA+Pj4+IC0tLQ0KPiA+PiBhL1NlY3VyaXR5UGtnL0xpYnJhcnkvRHhlSW1hZ2VWZXJpZmlj YXRpb25MaWIvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIuaA0KPiA+Pj4+ICsrKw0KPiA+PiBiL1Nl Y3VyaXR5UGtnL0xpYnJhcnkvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIvRHhlSW1hZ2VWZXJpZmlj YXRpb25MaWIuaA0KPiA+Pj4+IEBAIC0yMyw2ICsyMyw3IEBAIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4+Pj4gICNpbmNsdWRlIDxMaWJyYXJ5L0Rldmlj ZVBhdGhMaWIuaD4NCj4gPj4+PiAgI2luY2x1ZGUgPExpYnJhcnkvU2VjdXJpdHlNYW5hZ2VtZW50 TGliLmg+DQo+ID4+Pj4gICNpbmNsdWRlIDxMaWJyYXJ5L1BlQ29mZkxpYi5oPg0KPiA+Pj4+ICsj aW5jbHVkZSA8TGlicmFyeS9TYWZlSW50TGliLmg+DQo+ID4+Pj4gICNpbmNsdWRlIDxQcm90b2Nv bC9GaXJtd2FyZVZvbHVtZTIuaD4NCj4gPj4+PiAgI2luY2x1ZGUgPFByb3RvY29sL0RldmljZVBh dGguaD4NCj4gPj4+PiAgI2luY2x1ZGUgPFByb3RvY29sL0Jsb2NrSW8uaD4NCj4gPj4+PiBkaWZm IC0tZ2l0DQo+ID4+IGEvU2VjdXJpdHlQa2cvTGlicmFyeS9EeGVJbWFnZVZlcmlmaWNhdGlvbkxp Yi9EeGVJbWFnZVZlcmlmaWNhdGlvbkxpYi5jDQo+ID4+IGIvU2VjdXJpdHlQa2cvTGlicmFyeS9E eGVJbWFnZVZlcmlmaWNhdGlvbkxpYi9EeGVJbWFnZVZlcmlmaWNhdGlvbkxpYi5jDQo+ID4+Pj4g aW5kZXggMzZiODdlMTZkNTNkLi5kYmMwM2UyOGMwNWIgMTAwNjQ0DQo+ID4+Pj4gLS0tDQo+IGEv U2VjdXJpdHlQa2cvTGlicmFyeS9EeGVJbWFnZVZlcmlmaWNhdGlvbkxpYi9EeGVJbWFnZVZlcmlm aWNhdGlvbkxpYi5jDQo+ID4+Pj4gKysrDQo+ID4+IGIvU2VjdXJpdHlQa2cvTGlicmFyeS9EeGVJ bWFnZVZlcmlmaWNhdGlvbkxpYi9EeGVJbWFnZVZlcmlmaWNhdGlvbkxpYi5jDQo+ID4+Pj4gQEAg LTE2NTgsNiArMTY1OCwxMCBAQCBEeGVJbWFnZVZlcmlmaWNhdGlvbkhhbmRsZXIgKA0KPiA+Pj4+ ICAgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoU3RhdHVzOw0KPiA+ Pj4+ICAgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICBEYlN0YXR1czsNCj4g Pj4+PiAgICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXNGb3VuZDsNCj4g Pj4+PiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxpZ25lZExlbmd0 aDsNCj4gPj4+PiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0 Ow0KPiA+Pj4+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRTdGF0 dXM7DQo+ID4+Pj4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElzQXV0 aERhdGFBc3NpZ25lZDsNCj4gPj4+Pg0KPiA+Pj4+ICAgIFNpZ25hdHVyZUxpc3QgICAgID0gTlVM TDsNCj4gPj4+PiAgICBTaWduYXR1cmVMaXN0U2l6ZSA9IDA7DQo+ID4+Pj4gQEAgLTE2NjcsNiAr MTY3MSw3IEBAIER4ZUltYWdlVmVyaWZpY2F0aW9uSGFuZGxlciAoDQo+ID4+Pj4gICAgQWN0aW9u ICAgICAgICAgICAgPSBFRklfSU1BR0VfRVhFQ1VUSU9OX0FVVEhfVU5URVNURUQ7DQo+ID4+Pj4g ICAgSXNWZXJpZmllZCAgICAgICAgPSBGQUxTRTsNCj4gPj4+PiAgICBJc0ZvdW5kICAgICAgICAg ICA9IEZBTFNFOw0KPiA+Pj4+ICsgIFJlc3VsdCAgICAgICAgICAgID0gMDsNCj4gPj4+Pg0KPiA+ Pj4+ICAgIC8vDQo+ID4+Pj4gICAgLy8gQ2hlY2sgdGhlIGltYWdlIHR5cGUgYW5kIGdldCBwb2xp Y3kgc2V0dGluZy4NCj4gPj4+PiBAQCAtMTg1MCw5ICsxODU1LDEwIEBAIER4ZUltYWdlVmVyaWZp Y2F0aW9uSGFuZGxlciAoDQo+ID4+Pj4gICAgLy8gVGhlIGZpcnN0IGNlcnRpZmljYXRlIHN0YXJ0 cyBhdCBvZmZzZXQgKFNlY0RhdGFEaXItPlZpcnR1YWxBZGRyZXNzKSBmcm9tDQo+IHRoZQ0KPiA+ PiBzdGFydCBvZiB0aGUgZmlsZS4NCj4gPj4+PiAgICAvLw0KPiA+Pj4+ICAgIGZvciAoT2ZmU2V0 ID0gU2VjRGF0YURpci0+VmlydHVhbEFkZHJlc3M7DQo+ID4+Pj4gLSAgICAgICBPZmZTZXQgPCAo U2VjRGF0YURpci0+VmlydHVhbEFkZHJlc3MgKyBTZWNEYXRhRGlyLT5TaXplKTsNCj4gPj4+PiAt ICAgICAgIE9mZlNldCArPSAoV2luQ2VydGlmaWNhdGUtPmR3TGVuZ3RoICsgQUxJR05fU0laRSAo V2luQ2VydGlmaWNhdGUtDQo+ID4+PiBkd0xlbmd0aCkpKSB7DQo+ID4+Pj4gKyAgICAgICAoT2Zm U2V0ID49IFNlY0RhdGFEaXItPlZpcnR1YWxBZGRyZXNzKSAmJiAoT2ZmU2V0IDwgKFNlY0RhdGFE aXItDQo+ID4+PiBWaXJ0dWFsQWRkcmVzcyArIFNlY0RhdGFEaXItPlNpemUpKTspIHsNCj4gPj4+ PiArICAgIElzQXV0aERhdGFBc3NpZ25lZCA9IEZBTFNFOw0KPiA+Pj4+ICAgICAgV2luQ2VydGlm aWNhdGUgPSAoV0lOX0NFUlRJRklDQVRFICopIChtSW1hZ2VCYXNlICsgT2ZmU2V0KTsNCj4gPj4+ PiArICAgIEFsaWduZWRMZW5ndGggPSBXaW5DZXJ0aWZpY2F0ZS0+ZHdMZW5ndGggKyBBTElHTl9T SVpFDQo+IChXaW5DZXJ0aWZpY2F0ZS0NCj4gPj4+IGR3TGVuZ3RoKTsNCj4gPj4+DQo+ID4+PiBJ IGRpc2FncmVlIHdpdGggdGhpcyBwYXRjaC4NCj4gPj4+DQo+ID4+PiBUaGUgcHJpbWFyeSByZWFz b24gZm9yIG15IGRpc2FncmVlbWVudCBpcyB0aGF0IHRoZSBidWcgcmVwb3J0DQo+ID4+PiA8aHR0 cHM6Ly9idWd6aWxsYS50aWFub2NvcmUub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjE1I2MwPiBpcyBp bmV4YWN0LCBhbmQNCj4gPj4+IHNvIHRoaXMgcGF0Y2ggdHJpZXMgdG8gZml4IHRoZSB3cm9uZyB0 aGluZy4NCj4gPj4+DQo+ID4+PiBXaXRoIGVkazIgbWFzdGVyIGF0IGNvbW1pdCA2NTkwNGNkYmIz M2MsIGl0IGlzICpub3QqIHBvc3NpYmxlIHRvDQo+ID4+PiBvdmVyZmxvdyB0aGUgT2ZmU2V0IHZh cmlhYmxlIHRvIHplcm8gd2l0aCAiV2luQ2VydGlmaWNhdGUtPmR3TGVuZ3RoIg0KPiA+Pj4gKnB1 cmVseSosIGFuZCBjYXVzZSBhbiBlbmRsZXNzIGxvb3AuIE5vdGUgdGhhdCB3ZSBoYXZlIChhdCBj b21taXQNCj4gPj4+IDY1OTA0Y2RiYjMzYyk6DQo+ID4+Pg0KPiA+Pj4gICBmb3IgKE9mZlNldCA9 IFNlY0RhdGFEaXItPlZpcnR1YWxBZGRyZXNzOw0KPiA+Pj4gICAgICAgIE9mZlNldCA8IChTZWNE YXRhRGlyLT5WaXJ0dWFsQWRkcmVzcyArIFNlY0RhdGFEaXItPlNpemUpOw0KPiA+Pj4gICAgICAg IE9mZlNldCArPSAoV2luQ2VydGlmaWNhdGUtPmR3TGVuZ3RoICsgQUxJR05fU0laRSAoV2luQ2Vy dGlmaWNhdGUtDQo+ID4+PiBkd0xlbmd0aCkpKSB7DQo+ID4+PiAgICAgV2luQ2VydGlmaWNhdGUg PSAoV0lOX0NFUlRJRklDQVRFICopIChtSW1hZ2VCYXNlICsgT2ZmU2V0KTsNCj4gPj4+ICAgICBp ZiAoKFNlY0RhdGFEaXItPlZpcnR1YWxBZGRyZXNzICsgU2VjRGF0YURpci0+U2l6ZSAtIE9mZlNl dCkgPD0gc2l6ZW9mDQo+ID4+IChXSU5fQ0VSVElGSUNBVEUpIHx8DQo+ID4+PiAgICAgICAgIChT ZWNEYXRhRGlyLT5WaXJ0dWFsQWRkcmVzcyArIFNlY0RhdGFEaXItPlNpemUgLSBPZmZTZXQpIDwN Cj4gV2luQ2VydGlmaWNhdGUtDQo+ID4+PiBkd0xlbmd0aCkgew0KPiA+Pj4gICAgICAgYnJlYWs7 DQo+ID4+PiAgICAgfQ0KPiA+Pj4NCj4gPj4+IFRoZSBsYXN0IHN1Yi1jb25kaXRpb24gY2hlY2tz IHdoZXRoZXIgdGhlIFNlY3VyaXR5IERhdGEgRGlyZWN0b3J5IGhhcw0KPiA+Pj4gZW5vdWdoIHJv b20gbGVmdCBmb3IgIldpbkNlcnRpZmljYXRlLT5kd0xlbmd0aCIuIElmIG5vdCwgdGhlbiB3ZSBi cmVhaw0KPiA+Pj4gb3V0IG9mIHRoZSBsb29wLg0KPiA+Pj4NCj4gPj4+IElmIHdlICpkbyogaGF2 ZSBlbm91Z2ggcm9vbSwgdGhhdCBpczoNCj4gPj4+DQo+ID4+PiAgIChTZWNEYXRhRGlyLT5WaXJ0 dWFsQWRkcmVzcyArIFNlY0RhdGFEaXItPlNpemUgLSBPZmZTZXQpID49DQo+IFdpbkNlcnRpZmlj YXRlLQ0KPiA+Pj4gZHdMZW5ndGgNCj4gPj4+DQo+ID4+PiB0aGVuIHdlIGhhdmUgKGJ5IGFkZGlu ZyBPZmZTZXQgdG8gYm90aCBzaWRlcyk6DQo+ID4+Pg0KPiA+Pj4gICBTZWNEYXRhRGlyLT5WaXJ0 dWFsQWRkcmVzcyArIFNlY0RhdGFEaXItPlNpemUgPj0gT2ZmU2V0ICsgV2luQ2VydGlmaWNhdGUt DQo+ID4+PiBkd0xlbmd0aA0KPiA+Pj4NCj4gPj4+IFRoZSBsZWZ0IGhhbmQgc2lkZSBpcyBhIGtu b3duLWdvb2QgVUlOVDMyLCBhbmQgc28gaW5jcmVtZW50aW5nIE9mZlNldCAoYQ0KPiA+Pj4gVUlO VDMyKSAqc29sZWx5KiBieSAiV2luQ2VydGlmaWNhdGUtPmR3TGVuZ3RoIiAoYWxzbyBhIFVJTlQz MikgZG9lcyBub3QNCj4gPj4+IGNhdXNlIGFuIG92ZXJmbG93Lg0KPiA+Pj4NCj4gPj4+IEluc3Rl YWQsIHRoZSBwcm9ibGVtIGlzIHdpdGggdGhlIGFsaWdubWVudC4gVGhlICJpZiIgc3RhdGVtZW50 IGNoZWNrcw0KPiA+Pj4gd2hldGhlciB3ZSBoYXZlIGVub3VnaCByb29tIGZvciAiZHdMZW5ndGgi LCBidXQgdGhlbiAiT2ZmU2V0IiBpcw0KPiA+Pj4gYWR2YW5jZWQgYnkgImR3TGVuZ3RoIiAqYWxp Z25lZCB1cCogdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgOC4gQW5kIHRoYXQNCj4gPj4+IG1heSBp bmRlZWQgY2F1c2UgdmFyaW91cyBvdmVyZmxvd3MuDQo+ID4+Pg0KPiA+Pj4gTm93LCB0aGUgbWFp biBwcm9ibGVtIHdpdGggdGhlIHByZXNlbnQgcGF0Y2ggaXMgdGhhdCBpdCBkb2VzIG5vdCBmaXgg b25lDQo+ID4+PiBvZiB0aG9zZSBvdmVyZmxvd3MuIE5hbWVseSwgY29uc2lkZXIgdGhhdCAiZHdM ZW5ndGgiIGlzIHZlcnkgY2xvc2UgdG8NCj4gPj4+IE1BWF9VSU5UMzIgKG9yIGV2ZW4gdGhpbmsg aXQncyBleGFjdGx5IE1BWF9VSU5UMzIpLiBUaGVuIGFsaWduaW5nIGl0IHVwDQo+ID4+PiB0byB0 aGUgbmV4dCBtdWx0aXBsZSBvZiA4IHdpbGwgeWllbGQgMC4gSW4gb3RoZXIgd29yZHMsICJBbGln bmVkTGVuZ3RoIg0KPiA+Pj4gd2lsbCBiZSB6ZXJvLg0KPiA+Pj4NCj4gPj4+IEFuZCB3aGVuIHRo YXQgaGFwcGVucywgdGhlcmUncyBnb2luZyB0byBiZSBhbiBpbmZpbml0ZSBsb29wIGp1c3QgdGhl DQo+ID4+PiBzYW1lOiAiT2ZmU2V0IiB3aWxsIG5vdCBiZSB6ZXJvLCBidXQgaXQgd2lsbCBiZSAq c3R1Y2sqLiBUaGUNCj4gPj4+IFNhZmVVaW50MzJBZGQoKSBjYWxsIGF0IHRoZSBib3R0b20gd2ls bCBzdWNjZWVkLCBidXQgaXQgd2lsbCBub3QgY2hhbmdlDQo+ID4+PiB0aGUgdmFsdWUgb2YgIk9m ZlNldCIuDQo+ID4+Pg0KPiA+Pj4gTW9yZSBhdCB0aGUgYm90dG9tLg0KPiA+Pj4NCj4gPj4+DQo+ ID4+Pj4gICAgICBpZiAoKFNlY0RhdGFEaXItPlZpcnR1YWxBZGRyZXNzICsgU2VjRGF0YURpci0+ U2l6ZSAtIE9mZlNldCkgPD0gc2l6ZW9mDQo+ID4+IChXSU5fQ0VSVElGSUNBVEUpIHx8DQo+ID4+ Pj4gICAgICAgICAgKFNlY0RhdGFEaXItPlZpcnR1YWxBZGRyZXNzICsgU2VjRGF0YURpci0+U2l6 ZSAtIE9mZlNldCkgPA0KPiA+PiBXaW5DZXJ0aWZpY2F0ZS0+ZHdMZW5ndGgpIHsNCj4gPj4+PiAg ICAgICAgYnJlYWs7DQo+ID4+Pj4gQEAgLTE4NzIsNiArMTg3OCw4IEBAIER4ZUltYWdlVmVyaWZp Y2F0aW9uSGFuZGxlciAoDQo+ID4+Pj4gICAgICAgIH0NCj4gPj4+PiAgICAgICAgQXV0aERhdGEg ICA9IFBrY3NDZXJ0RGF0YS0+Q2VydERhdGE7DQo+ID4+Pj4gICAgICAgIEF1dGhEYXRhU2l6ZSA9 IFBrY3NDZXJ0RGF0YS0+SGRyLmR3TGVuZ3RoIC0gc2l6ZW9mKFBrY3NDZXJ0RGF0YS0NCj4gPkhk cik7DQo+ID4+Pj4gKyAgICAgIElzQXV0aERhdGFBc3NpZ25lZCA9IFRSVUU7DQo+ID4+Pj4gKyAg ICAgIEhhc2hTdGF0dXMgPSBIYXNoUGVJbWFnZUJ5VHlwZSAoQXV0aERhdGEsIEF1dGhEYXRhU2l6 ZSk7DQo+ID4+Pj4gICAgICB9IGVsc2UgaWYgKFdpbkNlcnRpZmljYXRlLT53Q2VydGlmaWNhdGVU eXBlID09DQo+IFdJTl9DRVJUX1RZUEVfRUZJX0dVSUQpDQo+ID4+IHsNCj4gPj4+PiAgICAgICAg Ly8NCj4gPj4+PiAgICAgICAgLy8gVGhlIGNlcnRpZmljYXRlIGlzIGZvcm1hdHRlZCBhcyBXSU5f Q0VSVElGSUNBVEVfVUVGSV9HVUlEIHdoaWNoDQo+IGlzDQo+ID4+IGRlc2NyaWJlZCBpbiBVRUZJ IFNwZWMuDQo+ID4+Pj4gQEAgLTE4ODAsNzIgKzE4ODgsNzUgQEAgRHhlSW1hZ2VWZXJpZmljYXRp b25IYW5kbGVyICgNCj4gPj4+PiAgICAgICAgaWYgKFdpbkNlcnRVZWZpR3VpZC0+SGRyLmR3TGVu Z3RoIDw9DQo+ID4+IE9GRlNFVF9PRihXSU5fQ0VSVElGSUNBVEVfVUVGSV9HVUlELCBDZXJ0RGF0 YSkpIHsNCj4gPj4+PiAgICAgICAgICBicmVhazsNCj4gPj4+PiAgICAgICAgfQ0KPiA+Pj4+IC0g ICAgICBpZiAoIUNvbXBhcmVHdWlkICgmV2luQ2VydFVlZmlHdWlkLT5DZXJ0VHlwZSwgJmdFZmlD ZXJ0UGtjczdHdWlkKSkNCj4gew0KPiA+Pj4+IC0gICAgICAgIGNvbnRpbnVlOw0KPiA+Pj4+ICsg ICAgICBpZiAoQ29tcGFyZUd1aWQgKCZXaW5DZXJ0VWVmaUd1aWQtPkNlcnRUeXBlLCAmZ0VmaUNl cnRQa2NzN0d1aWQpKQ0KPiB7DQo+ID4+Pj4gKyAgICAgICAgQXV0aERhdGEgPSBXaW5DZXJ0VWVm aUd1aWQtPkNlcnREYXRhOw0KPiA+Pj4+ICsgICAgICAgIEF1dGhEYXRhU2l6ZSA9IFdpbkNlcnRV ZWZpR3VpZC0+SGRyLmR3TGVuZ3RoIC0NCj4gPj4gT0ZGU0VUX09GKFdJTl9DRVJUSUZJQ0FURV9V RUZJX0dVSUQsIENlcnREYXRhKTsNCj4gPj4+PiArICAgICAgICBJc0F1dGhEYXRhQXNzaWduZWQg PSBUUlVFOw0KPiA+Pj4+ICsgICAgICAgIEhhc2hTdGF0dXMgPSBIYXNoUGVJbWFnZUJ5VHlwZSAo QXV0aERhdGEsIEF1dGhEYXRhU2l6ZSk7DQo+ID4+Pj4gICAgICAgIH0NCj4gPj4+PiAtICAgICAg QXV0aERhdGEgPSBXaW5DZXJ0VWVmaUd1aWQtPkNlcnREYXRhOw0KPiA+Pj4+IC0gICAgICBBdXRo RGF0YVNpemUgPSBXaW5DZXJ0VWVmaUd1aWQtPkhkci5kd0xlbmd0aCAtDQo+ID4+IE9GRlNFVF9P RihXSU5fQ0VSVElGSUNBVEVfVUVGSV9HVUlELCBDZXJ0RGF0YSk7DQo+ID4+Pj4gICAgICB9IGVs c2Ugew0KPiA+Pj4+ICAgICAgICBpZiAoV2luQ2VydGlmaWNhdGUtPmR3TGVuZ3RoIDwgc2l6ZW9m IChXSU5fQ0VSVElGSUNBVEUpKSB7DQo+ID4+Pj4gICAgICAgICAgYnJlYWs7DQo+ID4+Pj4gICAg ICAgIH0NCj4gPj4+PiAtICAgICAgY29udGludWU7DQo+ID4+Pj4gICAgICB9DQo+ID4+Pj4NCj4g Pj4+PiAtICAgIEhhc2hTdGF0dXMgPSBIYXNoUGVJbWFnZUJ5VHlwZSAoQXV0aERhdGEsIEF1dGhE YXRhU2l6ZSk7DQo+ID4+Pj4gLSAgICBpZiAoRUZJX0VSUk9SIChIYXNoU3RhdHVzKSkgew0KPiA+ Pj4+IC0gICAgICBjb250aW51ZTsNCj4gPj4+PiAtICAgIH0NCj4gPj4+PiAtDQo+ID4+Pj4gLSAg ICAvLw0KPiA+Pj4+IC0gICAgLy8gQ2hlY2sgdGhlIGRpZ2l0YWwgc2lnbmF0dXJlIGFnYWluc3Qg dGhlIHJldm9rZWQgY2VydGlmaWNhdGUgaW4NCj4gZm9yYmlkZGVuDQo+ID4+IGRhdGFiYXNlIChk YngpLg0KPiA+Pj4+IC0gICAgLy8NCj4gPj4+PiAtICAgIGlmIChJc0ZvcmJpZGRlbkJ5RGJ4IChB dXRoRGF0YSwgQXV0aERhdGFTaXplKSkgew0KPiA+Pj4+IC0gICAgICBBY3Rpb24gPSBFRklfSU1B R0VfRVhFQ1VUSU9OX0FVVEhfU0lHX0ZBSUxFRDsNCj4gPj4+PiAtICAgICAgSXNWZXJpZmllZCA9 IEZBTFNFOw0KPiA+Pj4+IC0gICAgICBicmVhazsNCj4gPj4+PiAtICAgIH0NCj4gPj4+PiAtDQo+ ID4+Pj4gLSAgICAvLw0KPiA+Pj4+IC0gICAgLy8gQ2hlY2sgdGhlIGRpZ2l0YWwgc2lnbmF0dXJl IGFnYWluc3QgdGhlIHZhbGlkIGNlcnRpZmljYXRlIGluIGFsbG93ZWQNCj4gPj4gZGF0YWJhc2Ug KGRiKS4NCj4gPj4+PiAtICAgIC8vDQo+ID4+Pj4gLSAgICBpZiAoIUlzVmVyaWZpZWQpIHsNCj4g Pj4+PiAtICAgICAgaWYgKElzQWxsb3dlZEJ5RGIgKEF1dGhEYXRhLCBBdXRoRGF0YVNpemUpKSB7 DQo+ID4+Pj4gLSAgICAgICAgSXNWZXJpZmllZCA9IFRSVUU7DQo+ID4+Pj4gKyAgICBpZiAoSXNB dXRoRGF0YUFzc2lnbmVkICYmICFFRklfRVJST1IgKEhhc2hTdGF0dXMpKSB7DQo+ID4+Pj4gKyAg ICAgIC8vDQo+ID4+Pj4gKyAgICAgIC8vIENoZWNrIHRoZSBkaWdpdGFsIHNpZ25hdHVyZSBhZ2Fp bnN0IHRoZSByZXZva2VkIGNlcnRpZmljYXRlIGluDQo+IGZvcmJpZGRlbg0KPiA+PiBkYXRhYmFz ZSAoZGJ4KS4NCj4gPj4+PiArICAgICAgLy8NCj4gPj4+PiArICAgICAgaWYgKElzRm9yYmlkZGVu QnlEYnggKEF1dGhEYXRhLCBBdXRoRGF0YVNpemUpKSB7DQo+ID4+Pj4gKyAgICAgICAgQWN0aW9u ID0gRUZJX0lNQUdFX0VYRUNVVElPTl9BVVRIX1NJR19GQUlMRUQ7DQo+ID4+Pj4gKyAgICAgICAg SXNWZXJpZmllZCA9IEZBTFNFOw0KPiA+Pj4+ICsgICAgICAgIGJyZWFrOw0KPiA+Pj4+ICAgICAg ICB9DQo+ID4+Pj4gLSAgICB9DQo+ID4+Pj4NCj4gPj4+PiAtICAgIC8vDQo+ID4+Pj4gLSAgICAv LyBDaGVjayB0aGUgaW1hZ2UncyBoYXNoIHZhbHVlLg0KPiA+Pj4+IC0gICAgLy8NCj4gPj4+PiAt ICAgIERiU3RhdHVzID0gSXNTaWduYXR1cmVGb3VuZEluRGF0YWJhc2UgKA0KPiA+Pj4+IC0gICAg ICAgICAgICAgICAgIEVGSV9JTUFHRV9TRUNVUklUWV9EQVRBQkFTRTEsDQo+ID4+Pj4gLSAgICAg ICAgICAgICAgICAgbUltYWdlRGlnZXN0LA0KPiA+Pj4+IC0gICAgICAgICAgICAgICAgICZtQ2Vy dFR5cGUsDQo+ID4+Pj4gLSAgICAgICAgICAgICAgICAgbUltYWdlRGlnZXN0U2l6ZSwNCj4gPj4+ PiAtICAgICAgICAgICAgICAgICAmSXNGb3VuZA0KPiA+Pj4+IC0gICAgICAgICAgICAgICAgICk7 DQo+ID4+Pj4gLSAgICBpZiAoRUZJX0VSUk9SIChEYlN0YXR1cykgfHwgSXNGb3VuZCkgew0KPiA+ Pj4+IC0gICAgICBBY3Rpb24gPSBFRklfSU1BR0VfRVhFQ1VUSU9OX0FVVEhfU0lHX0ZPVU5EOw0K PiA+Pj4+IC0gICAgICBERUJVRyAoKERFQlVHX0lORk8sICJEeGVJbWFnZVZlcmlmaWNhdGlvbkxp YjogSW1hZ2UgaXMgc2lnbmVkDQo+IGJ1dCAlcw0KPiA+PiBoYXNoIG9mIGltYWdlIGlzIGZvdW5k IGluIERCWC5cbiIsIG1IYXNoVHlwZVN0cikpOw0KPiA+Pj4+IC0gICAgICBJc1ZlcmlmaWVkID0g RkFMU0U7DQo+ID4+Pj4gLSAgICAgIGJyZWFrOw0KPiA+Pj4+IC0gICAgfQ0KPiA+Pj4+ICsgICAg ICAvLw0KPiA+Pj4+ICsgICAgICAvLyBDaGVjayB0aGUgZGlnaXRhbCBzaWduYXR1cmUgYWdhaW5z dCB0aGUgdmFsaWQgY2VydGlmaWNhdGUgaW4gYWxsb3dlZA0KPiA+PiBkYXRhYmFzZSAoZGIpLg0K PiA+Pj4+ICsgICAgICAvLw0KPiA+Pj4+ICsgICAgICBpZiAoIUlzVmVyaWZpZWQpIHsNCj4gPj4+ PiArICAgICAgICBpZiAoSXNBbGxvd2VkQnlEYiAoQXV0aERhdGEsIEF1dGhEYXRhU2l6ZSkpIHsN Cj4gPj4+PiArICAgICAgICAgIElzVmVyaWZpZWQgPSBUUlVFOw0KPiA+Pj4+ICsgICAgICAgIH0N Cj4gPj4+PiArICAgICAgfQ0KPiA+Pj4+DQo+ID4+Pj4gLSAgICBpZiAoIUlzVmVyaWZpZWQpIHsN Cj4gPj4+PiArICAgICAgLy8NCj4gPj4+PiArICAgICAgLy8gQ2hlY2sgdGhlIGltYWdlJ3MgaGFz aCB2YWx1ZS4NCj4gPj4+PiArICAgICAgLy8NCj4gPj4+PiAgICAgICAgRGJTdGF0dXMgPSBJc1Np Z25hdHVyZUZvdW5kSW5EYXRhYmFzZSAoDQo+ID4+Pj4gLSAgICAgICAgICAgICAgICAgICBFRklf SU1BR0VfU0VDVVJJVFlfREFUQUJBU0UsDQo+ID4+Pj4gKyAgICAgICAgICAgICAgICAgICBFRklf SU1BR0VfU0VDVVJJVFlfREFUQUJBU0UxLA0KPiA+Pj4+ICAgICAgICAgICAgICAgICAgICAgbUlt YWdlRGlnZXN0LA0KPiA+Pj4+ICAgICAgICAgICAgICAgICAgICAgJm1DZXJ0VHlwZSwNCj4gPj4+ PiAgICAgICAgICAgICAgICAgICAgIG1JbWFnZURpZ2VzdFNpemUsDQo+ID4+Pj4gICAgICAgICAg ICAgICAgICAgICAmSXNGb3VuZA0KPiA+Pj4+ICAgICAgICAgICAgICAgICAgICAgKTsNCj4gPj4+ PiAtICAgICAgaWYgKCFFRklfRVJST1IgKERiU3RhdHVzKSAmJiBJc0ZvdW5kKSB7DQo+ID4+Pj4g LSAgICAgICAgSXNWZXJpZmllZCA9IFRSVUU7DQo+ID4+Pj4gLSAgICAgIH0gZWxzZSB7DQo+ID4+ Pj4gLSAgICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiRHhlSW1hZ2VWZXJpZmljYXRpb25MaWI6 IEltYWdlIGlzIHNpZ25lZA0KPiBidXQNCj4gPj4gc2lnbmF0dXJlIGlzIG5vdCBhbGxvd2VkIGJ5 IERCIGFuZCAlcyBoYXNoIG9mIGltYWdlIGlzIG5vdCBmb3VuZCBpbg0KPiBEQi9EQlguXG4iLA0K PiA+PiBtSGFzaFR5cGVTdHIpKTsNCj4gPj4+PiArICAgICAgaWYgKEVGSV9FUlJPUiAoRGJTdGF0 dXMpIHx8IElzRm91bmQpIHsNCj4gPj4+PiArICAgICAgICBBY3Rpb24gPSBFRklfSU1BR0VfRVhF Q1VUSU9OX0FVVEhfU0lHX0ZPVU5EOw0KPiA+Pj4+ICsgICAgICAgIERFQlVHICgoREVCVUdfSU5G TywgIkR4ZUltYWdlVmVyaWZpY2F0aW9uTGliOiBJbWFnZSBpcyBzaWduZWQNCj4gPj4gYnV0ICVz IGhhc2ggb2YgaW1hZ2UgaXMgZm91bmQgaW4gREJYLlxuIiwgbUhhc2hUeXBlU3RyKSk7DQo+ID4+ Pj4gKyAgICAgICAgSXNWZXJpZmllZCA9IEZBTFNFOw0KPiA+Pj4+ICsgICAgICAgIGJyZWFrOw0K PiA+Pj4+ICAgICAgICB9DQo+ID4+Pj4gKw0KPiA+Pj4+ICsgICAgICBpZiAoIUlzVmVyaWZpZWQp IHsNCj4gPj4+PiArICAgICAgICBEYlN0YXR1cyA9IElzU2lnbmF0dXJlRm91bmRJbkRhdGFiYXNl ICgNCj4gPj4+PiArICAgICAgICAgICAgICAgICAgICAgRUZJX0lNQUdFX1NFQ1VSSVRZX0RBVEFC QVNFLA0KPiA+Pj4+ICsgICAgICAgICAgICAgICAgICAgICBtSW1hZ2VEaWdlc3QsDQo+ID4+Pj4g KyAgICAgICAgICAgICAgICAgICAgICZtQ2VydFR5cGUsDQo+ID4+Pj4gKyAgICAgICAgICAgICAg ICAgICAgIG1JbWFnZURpZ2VzdFNpemUsDQo+ID4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICZJ c0ZvdW5kDQo+ID4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICk7DQo+ID4+Pj4gKyAgICAgICAg aWYgKCFFRklfRVJST1IgKERiU3RhdHVzKSAmJiBJc0ZvdW5kKSB7DQo+ID4+Pj4gKyAgICAgICAg ICBJc1ZlcmlmaWVkID0gVFJVRTsNCj4gPj4+PiArICAgICAgICB9IGVsc2Ugew0KPiA+Pj4+ICsg ICAgICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiRHhlSW1hZ2VWZXJpZmljYXRpb25MaWI6IElt YWdlIGlzIHNpZ25lZA0KPiBidXQNCj4gPj4gc2lnbmF0dXJlIGlzIG5vdCBhbGxvd2VkIGJ5IERC IGFuZCAlcyBoYXNoIG9mIGltYWdlIGlzIG5vdCBmb3VuZCBpbg0KPiBEQi9EQlguXG4iLA0KPiA+ PiBtSGFzaFR5cGVTdHIpKTsNCj4gPj4+PiArICAgICAgICB9DQo+ID4+Pj4gKyAgICAgIH0NCj4g Pj4+PiArICAgIH0NCj4gPj4+PiArDQo+ID4+Pj4gKyAgICBBZGRTdGF0dXMgPSBTYWZlVWludDMy QWRkIChPZmZTZXQsIEFsaWduZWRMZW5ndGgsICZSZXN1bHQpOw0KPiA+Pj4+ICsgICAgaWYgKEVG SV9FUlJPUiAoQWRkU3RhdHVzKSkgew0KPiA+Pj4+ICsgICAgICBicmVhazsNCj4gPj4+PiAgICAg IH0NCj4gPj4+PiArICAgIE9mZlNldCA9IFJlc3VsdDsNCj4gPj4+PiAgICB9DQo+ID4+Pj4NCj4g Pj4+PiAgICBpZiAoT2ZmU2V0ICE9IChTZWNEYXRhRGlyLT5WaXJ0dWFsQWRkcmVzcyArIFNlY0Rh dGFEaXItPlNpemUpKSB7DQo+ID4+Pj4NCj4gPj4+DQo+ID4+PiBUaGVyZSBhcmUgb3RoZXIgKHNt YWxsZXIpIHJlYXNvbnMgd2h5IEkgZGlzbGlrZSB0aGlzIHBhdGNoOg0KPiA+Pj4NCj4gPj4+IC0g VGhlICJJc0F1dGhEYXRhQXNzaWduZWQiIHZhcmlhYmxlIGlzIHN1cGVyZmx1b3VzOyB3ZSBjb3Vs ZCB1c2UgdGhlDQo+ID4+PiBleGlzdGVudCAiQXV0aERhdGEiIHZhcmlhYmxlICh3aXRoIGEgTlVM TC1jaGVjayBhbmQgYSBOVUxMLWFzc2lnbm1lbnQpDQo+ID4+PiBzaW1pbGFybHkuDQo+ID4+Pg0K PiA+Pj4gLSBUaGUgcGF0Y2ggY29tcGxpY2F0ZXMgLyByZW9yZ2FuaXplcyB0aGUgY29udHJvbCBm bG93IG5lZWRsZXNzbHkuIFRoaXMNCj4gPj4+IGNvbXBsaWNhdGlvbiBvcmlnaW5hdGVzIGZyb20g cGxhY2luZyB0aGUgY2hlY2tlZCAiT2ZmU2V0IiBpbmNyZW1lbnQgYXQNCj4gPj4+IHRoZSBib3R0 b20gb2YgdGhlIGxvb3AsIHdoaWNoIHRoZW4gcmVxdWlyZXMgdGhlIHJlbW92YWwgb2YgYWxsIHRo ZQ0KPiA+Pj4gImNvbnRpbnVlIiBzdGF0ZW1lbnRzLiBCdXQgd2UgZG9uJ3QgbmVlZCB0byBjaGVj ay1hbmQtaW5jcmVtZW50IGF0IHRoZQ0KPiA+Pj4gYm90dG9tLiBXZSBjYW4ga2VlcCB0aGUgaW5j cmVtZW50IGluc2lkZSB0aGUgImZvciIgc3RhdGVtZW50LCBvbmx5DQo+ID4+PiBleHRlbmQgdGhl ICpleGlzdGVudCogcm9vbSBjaGVjayAod2hpY2ggSSd2ZSBxdW90ZWQpIHRvIHRha2UgdGhlDQo+ ID4+PiBhbGlnbm1lbnQgaW50byBhY2NvdW50IGFzIHdlbGwuIElmIHRoZXJlIGlzIGVub3VnaCBy b29tIGZvciB0aGUNCj4gPj4+IGFsaWdubWVudCBpbiB0aGUgc2VjdXJpdHkgZGF0YSBkaXJlY3Rv cnksIHRoZW4gdGhhdCBndWFyYW50ZWVzIHRoZXJlDQo+ID4+PiB3b24ndCBiZSBhIFVJTlQzMiBv dmVyZmxvdyBlaXRoZXIuDQo+ID4+Pg0KPiA+Pj4gQWxsIGluIGFsbCwgSSdtIHByb3Bvc2luZyB0 aGUgZm9sbG93aW5nIHRocmVlIHBhdGNoZXMgaW5zdGVhZC4gVGhlIGZpcnN0DQo+ID4+PiB0d28g cGF0Y2hlcyBhcmUgcHJlcGFyYXRpb24sIHRoZSBsYXN0IHBhdGNoIGlzIHRoZSBmaXguDQo+ID4+ Pg0KPiA+Pj4gUGF0Y2gjMToNCj4gPj4+DQo+ID4+Pj4gRnJvbSAxMWFmMGExMDRkMzRkMzliZjFi MWFhYjI1NjQyOGFlNGVkYmRkZDc3IE1vbiBTZXAgMTcNCj4gMDA6MDA6MDANCj4gPj4gMjAwMQ0K PiA+Pj4+IEZyb206IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb20+DQo+ID4+Pj4gRGF0 ZTogVGh1LCAxMyBBdWcgMjAyMCAxOToxMTozOSArMDIwMA0KPiA+Pj4+IFN1YmplY3Q6IFtQQVRD SCAxLzNdIFNlY3VyaXR5UGtnL0R4ZUltYWdlVmVyaWZpY2F0aW9uTGliOiBleHRyYWN0DQo+ID4+ Pj4gIFNlY0RhdGFEaXJFbmQsIFNlY0RhdGFEaXJMZWZ0DQo+ID4+Pj4NCj4gPj4+PiBUaGUgZm9s bG93aW5nIHR3byBxdWFudGl0aWVzOg0KPiA+Pj4+DQo+ID4+Pj4gICBTZWNEYXRhRGlyLT5WaXJ0 dWFsQWRkcmVzcyArIFNlY0RhdGFEaXItPlNpemUNCj4gPj4+PiAgIFNlY0RhdGFEaXItPlZpcnR1 YWxBZGRyZXNzICsgU2VjRGF0YURpci0+U2l6ZSAtIE9mZlNldA0KPiA+Pj4+DQo+ID4+Pj4gYXJl IHVzZWQgbXVsdGlwbGUgdGltZXMgaW4gRHhlSW1hZ2VWZXJpZmljYXRpb25IYW5kbGVyKCkuIElu dHJvZHVjZSBoZWxwZXINCj4gPj4+PiB2YXJpYWJsZXMgZm9yIHRoZW06ICJTZWNEYXRhRGlyRW5k IiBhbmQgIlNlY0RhdGFEaXJMZWZ0IiwgcmVzcGVjdGl2ZWx5Lg0KPiA+Pj4+IFRoaXMgc2F2ZXMg dXMgbXVsdGlwbGUgY2FsY3VsYXRpb25zIGFuZCBzaWduaWZpY2FudGx5IHNpbXBsaWZpZXMgdGhl IGNvZGUuDQo+ID4+Pj4NCj4gPj4+PiBOb3RlIHRoYXQgYWxsIHRocmVlIHN1bW1hbmRzIGFib3Zl IGhhdmUgdHlwZSBVSU5UMzIsIHRoZXJlZm9yZSB0aGUgbmV3DQo+ID4+Pj4gdmFyaWFibGVzIGFy ZSBhbHNvIG9mIHR5cGUgVUlOVDMyLg0KPiA+Pj4+DQo+ID4+Pj4gVGhpcyBwYXRjaCBkb2VzIG5v dCBjaGFuZ2UgYmVoYXZpb3IuDQo+ID4+Pj4NCj4gPj4+PiAoTm90ZSB0aGF0IHRoZSBjb2RlIGFs cmVhZHkgaGFuZGxlcyB0aGUgY2FzZSB3aGVuIHRoZQ0KPiA+Pj4+DQo+ID4+Pj4gICBTZWNEYXRh RGlyLT5WaXJ0dWFsQWRkcmVzcyArIFNlY0RhdGFEaXItPlNpemUNCj4gPj4+Pg0KPiA+Pj4+IFVJ TlQzMiBhZGRpdGlvbiBvdmVyZmxvd3MgLS0gbmFtZWx5LCBpbiB0aGF0IGNhc2UsIHRoZSBjZXJ0 aWZpY2F0ZSBsb29wIGlzDQo+ID4+Pj4gbmV2ZXIgZW50ZXJlZCwgYW5kIHRoZSBjb3JydXB0aW9u IGNoZWNrIHJpZ2h0IGFmdGVyIHRoZSBsb29wIGZpcmVzLikNCj4gPj4+Pg0KPiA+Pj4+IFNpZ25l ZC1vZmYtYnk6IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb20+DQo+ID4+Pj4gLS0tDQo+ ID4+Pj4gIFNlY3VyaXR5UGtnL0xpYnJhcnkvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIvRHhlSW1h Z2VWZXJpZmljYXRpb25MaWIuYyB8DQo+IDEyDQo+ID4+ICsrKysrKysrLS0tLQ0KPiA+Pj4+ICAx IGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQ0KPiA+Pj4+DQo+ ID4+Pj4gZGlmZiAtLWdpdA0KPiA+PiBhL1NlY3VyaXR5UGtnL0xpYnJhcnkvRHhlSW1hZ2VWZXJp ZmljYXRpb25MaWIvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIuYw0KPiA+PiBiL1NlY3VyaXR5UGtn L0xpYnJhcnkvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIu Yw0KPiA+Pj4+IGluZGV4IDM2Yjg3ZTE2ZDUzZC4uODc2MTk4MGM4OGFhIDEwMDY0NA0KPiA+Pj4+ IC0tLQ0KPiBhL1NlY3VyaXR5UGtnL0xpYnJhcnkvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIvRHhl SW1hZ2VWZXJpZmljYXRpb25MaWIuYw0KPiA+Pj4+ICsrKw0KPiA+PiBiL1NlY3VyaXR5UGtnL0xp YnJhcnkvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIuYw0K PiA+Pj4+IEBAIC0xNjUyLDYgKzE2NTIsOCBAQCBEeGVJbWFnZVZlcmlmaWNhdGlvbkhhbmRsZXIg KA0KPiA+Pj4+ICAgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQXV0aERh dGE7DQo+ID4+Pj4gICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhE YXRhU2l6ZTsNCj4gPj4+PiAgICBFRklfSU1BR0VfREFUQV9ESVJFQ1RPUlkgICAgICAgICAgICAg KlNlY0RhdGFEaXI7DQo+ID4+Pj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFNlY0RhdGFEaXJFbmQ7DQo+ID4+Pj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFNlY0RhdGFEaXJMZWZ0Ow0KPiA+Pj4+ICAgIFVJTlQzMiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBPZmZTZXQ7DQo+ID4+Pj4gICAgQ0hBUjE2ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICpOYW1lU3RyOw0KPiA+Pj4+ICAgIFJFVFVSTl9TVEFUVVMgICAgICAg ICAgICAgICAgICAgICAgICBQZUNvZmZTdGF0dXM7DQo+ID4+Pj4gQEAgLTE4NDksMTIgKzE4NTEs MTQgQEAgRHhlSW1hZ2VWZXJpZmljYXRpb25IYW5kbGVyICgNCj4gPj4+PiAgICAvLyAiQXR0cmli dXRlIENlcnRpZmljYXRlIFRhYmxlIi4NCj4gPj4+PiAgICAvLyBUaGUgZmlyc3QgY2VydGlmaWNh dGUgc3RhcnRzIGF0IG9mZnNldCAoU2VjRGF0YURpci0+VmlydHVhbEFkZHJlc3MpIGZyb20NCj4g dGhlDQo+ID4+IHN0YXJ0IG9mIHRoZSBmaWxlLg0KPiA+Pj4+ICAgIC8vDQo+ID4+Pj4gKyAgU2Vj RGF0YURpckVuZCA9IFNlY0RhdGFEaXItPlZpcnR1YWxBZGRyZXNzICsgU2VjRGF0YURpci0+U2l6 ZTsNCj4gPj4+PiAgICBmb3IgKE9mZlNldCA9IFNlY0RhdGFEaXItPlZpcnR1YWxBZGRyZXNzOw0K PiA+Pj4+IC0gICAgICAgT2ZmU2V0IDwgKFNlY0RhdGFEaXItPlZpcnR1YWxBZGRyZXNzICsgU2Vj RGF0YURpci0+U2l6ZSk7DQo+ID4+Pj4gKyAgICAgICBPZmZTZXQgPCBTZWNEYXRhRGlyRW5kOw0K PiA+Pj4+ICAgICAgICAgT2ZmU2V0ICs9IChXaW5DZXJ0aWZpY2F0ZS0+ZHdMZW5ndGggKyBBTElH Tl9TSVpFIChXaW5DZXJ0aWZpY2F0ZS0NCj4gPj4+IGR3TGVuZ3RoKSkpIHsNCj4gPj4+PiAgICAg IFdpbkNlcnRpZmljYXRlID0gKFdJTl9DRVJUSUZJQ0FURSAqKSAobUltYWdlQmFzZSArIE9mZlNl dCk7DQo+ID4+Pj4gLSAgICBpZiAoKFNlY0RhdGFEaXItPlZpcnR1YWxBZGRyZXNzICsgU2VjRGF0 YURpci0+U2l6ZSAtIE9mZlNldCkgPD0gc2l6ZW9mDQo+ID4+IChXSU5fQ0VSVElGSUNBVEUpIHx8 DQo+ID4+Pj4gLSAgICAgICAgKFNlY0RhdGFEaXItPlZpcnR1YWxBZGRyZXNzICsgU2VjRGF0YURp ci0+U2l6ZSAtIE9mZlNldCkgPA0KPiA+PiBXaW5DZXJ0aWZpY2F0ZS0+ZHdMZW5ndGgpIHsNCj4g Pj4+PiArICAgIFNlY0RhdGFEaXJMZWZ0ID0gU2VjRGF0YURpckVuZCAtIE9mZlNldDsNCj4gPj4+ PiArICAgIGlmIChTZWNEYXRhRGlyTGVmdCA8PSBzaXplb2YgKFdJTl9DRVJUSUZJQ0FURSkgfHwN Cj4gPj4+PiArICAgICAgICBTZWNEYXRhRGlyTGVmdCA8IFdpbkNlcnRpZmljYXRlLT5kd0xlbmd0 aCkgew0KPiA+Pj4+ICAgICAgICBicmVhazsNCj4gPj4+PiAgICAgIH0NCj4gPj4+Pg0KPiA+Pj4+ IEBAIC0xOTQ4LDcgKzE5NTIsNyBAQCBEeGVJbWFnZVZlcmlmaWNhdGlvbkhhbmRsZXIgKA0KPiA+ Pj4+ICAgICAgfQ0KPiA+Pj4+ICAgIH0NCj4gPj4+Pg0KPiA+Pj4+IC0gIGlmIChPZmZTZXQgIT0g KFNlY0RhdGFEaXItPlZpcnR1YWxBZGRyZXNzICsgU2VjRGF0YURpci0+U2l6ZSkpIHsNCj4gPj4+ PiArICBpZiAoT2ZmU2V0ICE9IFNlY0RhdGFEaXJFbmQpIHsNCj4gPj4+PiAgICAgIC8vDQo+ID4+ Pj4gICAgICAvLyBUaGUgU2l6ZSBpbiBDZXJ0aWZpY2F0ZSBUYWJsZSBvciB0aGUgYXR0cmlidXRl IGNlcnRpZmljYXRlIHRhYmxlIGlzDQo+IGNvcnJ1cHRlZC4NCj4gPj4+PiAgICAgIC8vDQo+ID4+ Pj4gLS0NCj4gPj4+PiAyLjE5LjEuMy5nMzAyNDdhYTVkMjAxDQo+ID4+Pj4NCj4gPj4+DQo+ID4+ PiBQYXRjaCMyOg0KPiA+Pj4NCj4gPj4+PiBGcm9tIDcyMDEyYzA2NWE1MzU4MmY3ZGY2OTVlN2I5 NzMwYzQ1ZjQ5MjI2YzYgTW9uIFNlcCAxNyAwMDowMDowMA0KPiA+PiAyMDAxDQo+ID4+Pj4gRnJv bTogTGFzemxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT4NCj4gPj4+PiBEYXRlOiBUaHUsIDEz IEF1ZyAyMDIwIDE5OjE5OjA2ICswMjAwDQo+ID4+Pj4gU3ViamVjdDogW1BBVENIIDIvM10gU2Vj dXJpdHlQa2cvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWI6IGFzc2lnbg0KPiA+Pj4+ICBXaW5DZXJ0 aWZpY2F0ZSBhZnRlciBzaXplIGNoZWNrDQo+ID4+Pj4NCj4gPj4+PiBDdXJyZW50bHkgdGhlIChT ZWNEYXRhRGlyTGVmdCA8PSBzaXplb2YgKFdJTl9DRVJUSUZJQ0FURSkpIGNoZWNrIG9ubHkNCj4g Pj4+PiBndWFyZHMgdGhlIGRlLXJlZmVyZW5jaW5nIG9mIHRoZSAiV2luQ2VydGlmaWNhdGUiIHBv aW50ZXIuIEl0IGRvZXMgbm90DQo+ID4+Pj4gZ3VhcmQgdGhlIGNhbGN1bGF0aW9uIG9mIGh0ZSBw b2ludGVyIGl0c2VsZjoNCj4gPj4+Pg0KPiA+Pj4+ICAgV2luQ2VydGlmaWNhdGUgPSAoV0lOX0NF UlRJRklDQVRFICopIChtSW1hZ2VCYXNlICsgT2ZmU2V0KTsNCj4gPj4+Pg0KPiA+Pj4+IFRoaXMg aXMgd3Jvbmc7IGlmIHdlIGRvbid0IGtub3cgZm9yIHN1cmUgdGhhdCB3ZSBoYXZlIGVub3VnaCBy b29tIGZvciBhDQo+ID4+Pj4gV0lOX0NFUlRJRklDQVRFLCB0aGVuIGV2ZW4gY3JlYXRpbmcgc3Vj aCBhIHBvaW50ZXIsIG5vdCBqdXN0DQo+ID4+Pj4gZGUtcmVmZXJlbmNpbmcgaXQsIG1heSBpbnZv a2UgdW5kZWZpbmVkIGJlaGF2aW9yLg0KPiA+Pj4+DQo+ID4+Pj4gTW92ZSB0aGUgcG9pbnRlciBj YWxjdWxhdGlvbiBhZnRlciB0aGUgc2l6ZSBjaGVjay4NCj4gPj4+Pg0KPiA+Pj4+IFNpZ25lZC1v ZmYtYnk6IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb20+DQo+ID4+Pj4gLS0tDQo+ID4+ Pj4gIFNlY3VyaXR5UGtnL0xpYnJhcnkvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIvRHhlSW1hZ2VW ZXJpZmljYXRpb25MaWIuYyB8DQo+IDgNCj4gPj4gKysrKystLS0NCj4gPj4+PiAgMSBmaWxlIGNo YW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkNCj4gPj4+Pg0KPiA+Pj4+IGRp ZmYgLS1naXQNCj4gPj4gYS9TZWN1cml0eVBrZy9MaWJyYXJ5L0R4ZUltYWdlVmVyaWZpY2F0aW9u TGliL0R4ZUltYWdlVmVyaWZpY2F0aW9uTGliLmMNCj4gPj4gYi9TZWN1cml0eVBrZy9MaWJyYXJ5 L0R4ZUltYWdlVmVyaWZpY2F0aW9uTGliL0R4ZUltYWdlVmVyaWZpY2F0aW9uTGliLmMNCj4gPj4+ PiBpbmRleCA4NzYxOTgwYzg4YWEuLjQ2MWVkN2NmYjVhYyAxMDA2NDQNCj4gPj4+PiAtLS0NCj4g YS9TZWN1cml0eVBrZy9MaWJyYXJ5L0R4ZUltYWdlVmVyaWZpY2F0aW9uTGliL0R4ZUltYWdlVmVy aWZpY2F0aW9uTGliLmMNCj4gPj4+PiArKysNCj4gPj4gYi9TZWN1cml0eVBrZy9MaWJyYXJ5L0R4 ZUltYWdlVmVyaWZpY2F0aW9uTGliL0R4ZUltYWdlVmVyaWZpY2F0aW9uTGliLmMNCj4gPj4+PiBA QCAtMTg1NSwxMCArMTg1NSwxMiBAQCBEeGVJbWFnZVZlcmlmaWNhdGlvbkhhbmRsZXIgKA0KPiA+ Pj4+ICAgIGZvciAoT2ZmU2V0ID0gU2VjRGF0YURpci0+VmlydHVhbEFkZHJlc3M7DQo+ID4+Pj4g ICAgICAgICBPZmZTZXQgPCBTZWNEYXRhRGlyRW5kOw0KPiA+Pj4+ICAgICAgICAgT2ZmU2V0ICs9 IChXaW5DZXJ0aWZpY2F0ZS0+ZHdMZW5ndGggKyBBTElHTl9TSVpFIChXaW5DZXJ0aWZpY2F0ZS0N Cj4gPj4+IGR3TGVuZ3RoKSkpIHsNCj4gPj4+PiAtICAgIFdpbkNlcnRpZmljYXRlID0gKFdJTl9D RVJUSUZJQ0FURSAqKSAobUltYWdlQmFzZSArIE9mZlNldCk7DQo+ID4+Pj4gICAgICBTZWNEYXRh RGlyTGVmdCA9IFNlY0RhdGFEaXJFbmQgLSBPZmZTZXQ7DQo+ID4+Pj4gLSAgICBpZiAoU2VjRGF0 YURpckxlZnQgPD0gc2l6ZW9mIChXSU5fQ0VSVElGSUNBVEUpIHx8DQo+ID4+Pj4gLSAgICAgICAg U2VjRGF0YURpckxlZnQgPCBXaW5DZXJ0aWZpY2F0ZS0+ZHdMZW5ndGgpIHsNCj4gPj4+PiArICAg IGlmIChTZWNEYXRhRGlyTGVmdCA8PSBzaXplb2YgKFdJTl9DRVJUSUZJQ0FURSkpIHsNCj4gPj4+ PiArICAgICAgYnJlYWs7DQo+ID4+Pj4gKyAgICB9DQo+ID4+Pj4gKyAgICBXaW5DZXJ0aWZpY2F0 ZSA9IChXSU5fQ0VSVElGSUNBVEUgKikgKG1JbWFnZUJhc2UgKyBPZmZTZXQpOw0KPiA+Pj4+ICsg ICAgaWYgKFNlY0RhdGFEaXJMZWZ0IDwgV2luQ2VydGlmaWNhdGUtPmR3TGVuZ3RoKSB7DQo+ID4+ Pj4gICAgICAgIGJyZWFrOw0KPiA+Pj4+ICAgICAgfQ0KPiA+Pj4+DQo+ID4+Pj4gLS0NCj4gPj4+ PiAyLjE5LjEuMy5nMzAyNDdhYTVkMjAxDQo+ID4+Pj4NCj4gPj4+DQo+ID4+PiBQYXRjaCMzOg0K PiA+Pj4NCj4gPj4+PiBGcm9tIDBiYmJhMTViODRmOGY5ZjJjZGM3NzBhODlmNDE4YWFlYzZjZmIz MWUgTW9uIFNlcCAxNyAwMDowMDowMA0KPiA+PiAyMDAxDQo+ID4+Pj4gRnJvbTogTGFzemxvIEVy c2VrIDxsZXJzZWtAcmVkaGF0LmNvbT4NCj4gPj4+PiBEYXRlOiBUaHUsIDEzIEF1ZyAyMDIwIDE5 OjM0OjMzICswMjAwDQo+ID4+Pj4gU3ViamVjdDogW1BBVENIIDMvM10gU2VjdXJpdHlQa2cvRHhl SW1hZ2VWZXJpZmljYXRpb25MaWI6IGNhdGNoDQo+IGFsaWdubWVudA0KPiA+Pj4+ICBvdmVyZmxv dyAoQ1ZFLTIwMTktMTQ1NjIpDQo+ID4+Pj4NCj4gPj4+PiBUaGUgRHhlSW1hZ2VWZXJpZmljYXRp b25IYW5kbGVyKCkgZnVuY3Rpb24gY3VycmVudGx5IGNoZWNrcyB3aGV0aGVyDQo+ID4+Pj4gIlNl Y0RhdGFEaXIiIGhhcyBlbm91Z2ggcm9vbSBmb3IgIldpbkNlcnRpZmljYXRlLT5kd0xlbmd0aCIu IEhvd2V2ZXIsDQo+ID4+IGZvcg0KPiA+Pj4+IGFkdmFuY2luZyAiT2ZmU2V0IiwgIldpbkNlcnRp ZmljYXRlLT5kd0xlbmd0aCIgaXMgYWxpZ25lZCB0byB0aGUgbmV4dA0KPiA+Pj4+IG11bHRpcGxl IG9mIDguIElmICJXaW5DZXJ0aWZpY2F0ZS0+ZHdMZW5ndGgiIGlzIGxhcmdlIGVub3VnaCwgdGhl DQo+ID4+Pj4gYWxpZ25tZW50IHdpbGwgcmV0dXJuIDAsIGFuZCAiT2ZmU2V0IiB3aWxsIGJlIHN0 dWNrIGF0IHRoZSBzYW1lIHZhbHVlLg0KPiA+Pj4+DQo+ID4+Pj4gQ2hlY2sgd2hldGhlciAiU2Vj RGF0YURpciIgaGFzIHJvb20gbGVmdCBmb3IgYm90aA0KPiA+Pj4+ICJXaW5DZXJ0aWZpY2F0ZS0+ ZHdMZW5ndGgiIGFuZCB0aGUgYWxpZ25tZW50Lg0KPiA+Pj4+DQo+ID4+Pj4gU2lnbmVkLW9mZi1i eTogTGFzemxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT4NCj4gPj4+PiAtLS0NCj4gPj4+PiAg U2VjdXJpdHlQa2cvTGlicmFyeS9EeGVJbWFnZVZlcmlmaWNhdGlvbkxpYi9EeGVJbWFnZVZlcmlm aWNhdGlvbkxpYi5jIHwNCj4gNA0KPiA+PiArKystDQo+ID4+Pj4gIDEgZmlsZSBjaGFuZ2VkLCAz IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkNCj4gPj4+Pg0KPiA+Pj4+IGRpZmYgLS1naXQN Cj4gPj4gYS9TZWN1cml0eVBrZy9MaWJyYXJ5L0R4ZUltYWdlVmVyaWZpY2F0aW9uTGliL0R4ZUlt YWdlVmVyaWZpY2F0aW9uTGliLmMNCj4gPj4gYi9TZWN1cml0eVBrZy9MaWJyYXJ5L0R4ZUltYWdl VmVyaWZpY2F0aW9uTGliL0R4ZUltYWdlVmVyaWZpY2F0aW9uTGliLmMNCj4gPj4+PiBpbmRleCA0 NjFlZDdjZmI1YWMuLmUzOGViOTgxYjdhMCAxMDA2NDQNCj4gPj4+PiAtLS0NCj4gYS9TZWN1cml0 eVBrZy9MaWJyYXJ5L0R4ZUltYWdlVmVyaWZpY2F0aW9uTGliL0R4ZUltYWdlVmVyaWZpY2F0aW9u TGliLmMNCj4gPj4+PiArKysNCj4gPj4gYi9TZWN1cml0eVBrZy9MaWJyYXJ5L0R4ZUltYWdlVmVy aWZpY2F0aW9uTGliL0R4ZUltYWdlVmVyaWZpY2F0aW9uTGliLmMNCj4gPj4+PiBAQCAtMTg2MCw3 ICsxODYwLDkgQEAgRHhlSW1hZ2VWZXJpZmljYXRpb25IYW5kbGVyICgNCj4gPj4+PiAgICAgICAg YnJlYWs7DQo+ID4+Pj4gICAgICB9DQo+ID4+Pj4gICAgICBXaW5DZXJ0aWZpY2F0ZSA9IChXSU5f Q0VSVElGSUNBVEUgKikgKG1JbWFnZUJhc2UgKyBPZmZTZXQpOw0KPiA+Pj4+IC0gICAgaWYgKFNl Y0RhdGFEaXJMZWZ0IDwgV2luQ2VydGlmaWNhdGUtPmR3TGVuZ3RoKSB7DQo+ID4+Pj4gKyAgICBp ZiAoU2VjRGF0YURpckxlZnQgPCBXaW5DZXJ0aWZpY2F0ZS0+ZHdMZW5ndGggfHwNCj4gPj4+PiAr ICAgICAgICAoU2VjRGF0YURpckxlZnQgLSBXaW5DZXJ0aWZpY2F0ZS0+ZHdMZW5ndGggPA0KPiA+ Pj4+ICsgICAgICAgICBBTElHTl9TSVpFIChXaW5DZXJ0aWZpY2F0ZS0+ZHdMZW5ndGgpKSkgew0K PiA+Pj4+ICAgICAgICBicmVhazsNCj4gPj4+PiAgICAgIH0NCj4gPj4+Pg0KPiA+Pj4+IC0tDQo+ ID4+Pj4gMi4xOS4xLjMuZzMwMjQ3YWE1ZDIwMQ0KPiA+Pj4+DQo+ID4+Pg0KPiA+Pj4gSWYgV2Vu eWkgYW5kIHRoZSByZXZpZXdlcnMgYXJlIE9LIHdpdGggdGhlc2UgcGF0Y2hlcywgSSBjYW4gc3Vi bWl0IHRoZW0NCj4gPj4+IGFzIGEgc3RhbmRhbG9uZSBwYXRjaCBzZXJpZXMuDQo+ID4+Pg0KPiA+ Pj4gTm90ZSB0aGF0IEkgZG8gbm90IGhhdmUgYW55IHJlcHJvZHVjZXIgZm9yIHRoZSBpc3N1ZTsg dGhlIGJlc3QgdGVzdGluZw0KPiA+Pj4gdGhhdCBJIGNvdWxkIG9mZmVyIHdvdWxkIGJlIHNvbWUg bGlnaHQtd2VpZ2h0IFNlY3VyZSBCb290IHJlZ3Jlc3Npb24NCj4gPj4+IHRlc3RzLg0KPiA+Pj4N Cj4gPj4+IFRoYW5rcw0KPiA+Pj4gTGFzemxvDQo+ID4+Pg0KPiA+Pj4NCj4gPj4+IC4NCj4gPj4+ DQo+ID4+DQo+ID4+DQo+ID4+DQo+ID4NCj4gDQo+IA0KPiANCg0K