From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 404B621E1B773 for ; Thu, 21 Sep 2017 06:44:05 -0700 (PDT) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga105.fm.intel.com with ESMTP; 21 Sep 2017 06:47:11 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.42,425,1500966000"; d="scan'208";a="137909599" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by orsmga002.jf.intel.com with ESMTP; 21 Sep 2017 06:47:11 -0700 Received: from fmsmsx120.amr.corp.intel.com (10.18.124.208) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 21 Sep 2017 06:47:11 -0700 Received: from shsmsx151.ccr.corp.intel.com (10.239.6.50) by fmsmsx120.amr.corp.intel.com (10.18.124.208) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 21 Sep 2017 06:47:10 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.175]) by SHSMSX151.ccr.corp.intel.com ([169.254.3.98]) with mapi id 14.03.0319.002; Thu, 21 Sep 2017 21:47:07 +0800 From: "Zeng, Star" To: Paulo Alcantara , "Wu, Hao A" , "edk2-devel@lists.01.org" CC: "Ni, Ruiyu" , Laszlo Ersek , "Dong, Eric" , "Zeng, Star" Thread-Topic: [edk2] [PATCH v3 2/2] MdeModulePkg/PartitionDxe: Fix creation of UDF logical partition Thread-Index: AQHTMjzuu1ffEG1kO0y3Wi7N1aYjeKK+xA0AgAAMm4CAAIrvgA== Date: Thu, 21 Sep 2017 13:47:07 +0000 Message-ID: <0C09AFA07DD0434D9E2A0C6AEB0483103B97756A@shsmsx102.ccr.corp.intel.com> References: <33171F84-A619-43B3-B9A8-0EC2CA8BA110@zytor.com> In-Reply-To: <33171F84-A619-43B3-B9A8-0EC2CA8BA110@zytor.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.0.0.116 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH v3 2/2] MdeModulePkg/PartitionDxe: Fix creation of UDF logical partition X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 21 Sep 2017 13:44:05 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 RG9lcyBpdCBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0Pw0KDQpUaGFua3MsDQpTdGFyDQotLS0tLU9y aWdpbmFsIE1lc3NhZ2UtLS0tLQ0KRnJvbTogUGF1bG8gQWxjYW50YXJhIFttYWlsdG86cGNhY2py QHp5dG9yLmNvbV0gDQpTZW50OiBUaHVyc2RheSwgU2VwdGVtYmVyIDIxLCAyMDE3IDk6MjkgUE0N ClRvOiBXdSwgSGFvIEEgPGhhby5hLnd1QGludGVsLmNvbT47IGVkazItZGV2ZWxAbGlzdHMuMDEu b3JnDQpDYzogTmksIFJ1aXl1IDxydWl5dS5uaUBpbnRlbC5jb20+OyBMYXN6bG8gRXJzZWsgPGxl cnNla0ByZWRoYXQuY29tPjsgRG9uZywgRXJpYyA8ZXJpYy5kb25nQGludGVsLmNvbT47IFplbmcs IFN0YXIgPHN0YXIuemVuZ0BpbnRlbC5jb20+DQpTdWJqZWN0OiBSRTogW2VkazJdIFtQQVRDSCB2 MyAyLzJdIE1kZU1vZHVsZVBrZy9QYXJ0aXRpb25EeGU6IEZpeCBjcmVhdGlvbiBvZiBVREYgbG9n aWNhbCBwYXJ0aXRpb24NCg0KDQoNCk9uIFNlcHRlbWJlciAyMSwgMjAxNyA5OjQ0OjEwIEFNIEdN VC0wMzowMCwgIld1LCBIYW8gQSIgPGhhby5hLnd1QGludGVsLmNvbT4gd3JvdGU6DQo+T25lIHNt YWxsIGNvbW1lbnQsIHdpdGhpbiBmdW5jdGlvbiBQYXJ0aXRpb25JbnN0YWxsVWRmQ2hpbGRIYW5k bGVzKCk6DQo+DQo+ICAuLi4NCj4gIC8vDQo+ICAvLyBJbnN0YWxsIHBhcnRpdGlvbiBjaGlsZCBo YW5kbGUgZm9yIFVERiBmaWxlIHN5c3RlbQ0KPiAgLy8NCj4gIFN0YXR1cyA9IFBhcnRpdGlvbklu c3RhbGxDaGlsZEhhbmRsZSAoDQo+ICAgIC4uLg0KPiAgICApOw0KPmlmICghRUZJX0VSUk9SIChT dGF0dXMpKSB7ICA8LS0tLS0gSXMgdGhpcyBhIHR5cG8/ICJpZiAoRUZJX0VSUk9SDQo+KFN0YXR1 cykpIHsiICANCj4gICAgU3RhdHVzID0gRUZJX05PVF9GT1VORDsNCj4gIH0NCg0KWWVzLCBpdCBp cy4gR29vZCBjYXRjaCEgQ291bGQgeW91IHBsZWFzZSBmaXggdGhhdCBmb3IgbWUgYnkgcmVtb3Zp bmcgdGhlIGlmIGNvbmRpdGlvbj8gT3RoZXJ3aXNlIEkgY2FuIHNlbmQgYSB2NCBsYXRlciB3aXRo IHRoYXQuDQoNClRoYW5rcyENClBhdWxvDQoNCj4gIA0KPg0KPkJlc3QgUmVnYXJkcywNCj5IYW8g V3UNCj4NCj4NCj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+PiBGcm9tOiBlZGsyLWRl dmVsIFttYWlsdG86ZWRrMi1kZXZlbC1ib3VuY2VzQGxpc3RzLjAxLm9yZ10gT24gQmVoYWxmDQo+ T2YgUGF1bG8NCj4+IEFsY2FudGFyYQ0KPj4gU2VudDogVGh1cnNkYXksIFNlcHRlbWJlciAyMSwg MjAxNyAyOjE2IEFNDQo+PiBUbzogZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmcNCj4+IENjOiBOaSwg UnVpeXU7IExhc3psbyBFcnNlazsgRG9uZywgRXJpYzsgWmVuZywgU3Rhcg0KPj4gU3ViamVjdDog W2VkazJdIFtQQVRDSCB2MyAyLzJdIE1kZU1vZHVsZVBrZy9QYXJ0aXRpb25EeGU6IEZpeA0KPmNy ZWF0aW9uIG9mDQo+PiBVREYgbG9naWNhbCBwYXJ0aXRpb24NCj4+IA0KPj4gRG8gbm90IHJlc2Vy dmUgZW50aXJlIGJsb2NrIGRldmljZSBzaXplIGZvciBhbiBVREYgZmlsZSBzeXN0ZW0gLSANCj4+ IGluc3RlYWQsIHJlc2VydmUgdGhlIGFwcHJvcHJpYXRlIHNwYWNlIChVREYgbG9naWNhbCB2b2x1 bWUgc3BhY2UpIGZvciANCj4+IGl0Lg0KPj4gDQo+PiBBZGRpdGlvbmFsbHksIG9ubHkgY3JlYXRl IGEgbG9naWNhbCBwYXJ0aXRpb24gZm9yIFVERiBsb2dpY2FsIHZvbHVtZXMgDQo+PiB0aGF0IGFy ZSBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IEVESzIgVURGIGZpbGUgc3lzdGVtIGltcGxlbWVudGF0 aW9uLg0KPkZvcg0KPj4gaW5zdGFuY2UsIGFuIFVERiB2b2x1bWUgd2l0aCBhIHNpbmdsZSBMVkQg YW5kIGEgc2luZ2xlIFBoeXNpY2FsIChUeXBlDQo+MSkNCj4+IFBhcnRpdGlvbiB3aWxsIGJlIHN1 cHBvcnRlZC4NCj4+IA0KPj4gQ2M6IEVyaWMgRG9uZyA8ZXJpYy5kb25nQGludGVsLmNvbT4NCj4+ IENjOiBSdWl5dSBOaSA8cnVpeXUubmlAaW50ZWwuY29tPg0KPj4gQ2M6IFN0YXIgWmVuZyA8c3Rh ci56ZW5nQGludGVsLmNvbT4NCj4+IENjOiBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29t Pg0KPj4gUmVwb3J0ZWQtYnk6IFJ1aXl1IE5pIDxydWl5dS5uaUBpbnRlbC5jb20+DQo+PiBDb250 cmlidXRlZC11bmRlcjogVGlhbm9Db3JlIENvbnRyaWJ1dGlvbiBBZ3JlZW1lbnQgMS4xDQo+PiBT aWduZWQtb2ZmLWJ5OiBQYXVsbyBBbGNhbnRhcmEgPHBjYWNqckB6eXRvci5jb20+DQo+PiAtLS0N Cj4+ICBNZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0Rpc2svUGFydGl0aW9uRHhlL1VkZi5jICAgICAg ICAgICAgfCAzNjMNCj4rKysrKysrKysrLS0NCj4+ICBNZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0Rp c2svVWRmRHhlL0ZpbGUuYyAgICAgICAgICAgICAgICAgfCAgMTYgKy0NCj4+ICBNZGVNb2R1bGVQ a2cvVW5pdmVyc2FsL0Rpc2svVWRmRHhlL0ZpbGVTeXN0ZW1PcGVyYXRpb25zLmMgfCA2MjcNCj4+ ICsrKysrKysrLS0tLS0tLS0tLS0tDQo+PiAgTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9EaXNrL1Vk ZkR4ZS9VZGYuYyAgICAgICAgICAgICAgICAgIHwgICA3IC0NCj4+ICBNZGVNb2R1bGVQa2cvVW5p dmVyc2FsL0Rpc2svVWRmRHhlL1VkZi5oICAgICAgICAgICAgICAgICAgfCAxNTgNCj4rKy0tLQ0K Pj4gIDUgZmlsZXMgY2hhbmdlZCwgNjA2IGluc2VydGlvbnMoKyksIDU2NSBkZWxldGlvbnMoLSkN Cj4+IA0KPj4gZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvRGlzay9QYXJ0aXRp b25EeGUvVWRmLmMNCj4+IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9EaXNrL1BhcnRpdGlvbkR4 ZS9VZGYuYw0KPj4gaW5kZXggNjA5ZjU2Y2VmNi4uNTcyYmE3YTgxYSAxMDA2NDQNCj4+IC0tLSBh L01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvRGlzay9QYXJ0aXRpb25EeGUvVWRmLmMNCj4+ICsrKyBi L01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvRGlzay9QYXJ0aXRpb25EeGUvVWRmLmMNCj4+IEBAIC02 NCwxMSArNjQsMTIgQEAgRmluZEFuY2hvclZvbHVtZURlc2NyaXB0b3JQb2ludGVyICgNCj4+ICAg IE9VVCAgVURGX0FOQ0hPUl9WT0xVTUVfREVTQ1JJUFRPUl9QT0lOVEVSICAqQW5jaG9yUG9pbnQN Cj4+ICAgICkNCj4+ICB7DQo+PiAtICBFRklfU1RBVFVTICBTdGF0dXM7DQo+PiAtICBVSU5UMzIg ICAgICBCbG9ja1NpemU7DQo+PiAtICBFRklfTEJBICAgICBFbmRMQkE7DQo+PiAtICBFRklfTEJB ICAgICBEZXNjcmlwdG9yTEJBc1s0XTsNCj4+IC0gIFVJTlROICAgICAgIEluZGV4Ow0KPj4gKyAg RUZJX1NUQVRVUyAgICAgICAgICBTdGF0dXM7DQo+PiArICBVSU5UMzIgICAgICAgICAgICAgIEJs b2NrU2l6ZTsNCj4+ICsgIEVGSV9MQkEgICAgICAgICAgICAgRW5kTEJBOw0KPj4gKyAgRUZJX0xC QSAgICAgICAgICAgICBEZXNjcmlwdG9yTEJBc1s0XTsNCj4+ICsgIFVJTlROICAgICAgICAgICAg ICAgSW5kZXg7DQo+PiArICBVREZfREVTQ1JJUFRPUl9UQUcgICpEZXNjcmlwdG9yVGFnOw0KPj4g DQo+PiAgICBCbG9ja1NpemUgPSBCbG9ja0lvLT5NZWRpYS0+QmxvY2tTaXplOw0KPj4gICAgRW5k TEJBID0gQmxvY2tJby0+TWVkaWEtPkxhc3RCbG9jazsgQEAgLTg4LDEwICs4OSwxMyBAQCANCj4+ IEZpbmRBbmNob3JWb2x1bWVEZXNjcmlwdG9yUG9pbnRlciAoDQo+PiAgICAgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4+ICAgICAgICByZXR1cm4gU3RhdHVzOw0KPj4gICAgICB9DQo+PiAr DQo+PiArICAgIERlc2NyaXB0b3JUYWcgPSAmQW5jaG9yUG9pbnQtPkRlc2NyaXB0b3JUYWc7DQo+ PiArDQo+PiAgICAgIC8vDQo+PiAgICAgIC8vIENoZWNrIGlmIHJlYWQgTEJBIGhhcyBhIHZhbGlk IEFWRFAgZGVzY3JpcHRvci4NCj4+ICAgICAgLy8NCj4+IC0gICAgaWYgKElTX0FWRFAgKEFuY2hv clBvaW50KSkgew0KPj4gKyAgICBpZiAoRGVzY3JpcHRvclRhZy0+VGFnSWRlbnRpZmllciA9PQ0K PlVkZkFuY2hvclZvbHVtZURlc2NyaXB0b3JQb2ludGVyKSB7DQo+PiAgICAgICAgcmV0dXJuIEVG SV9TVUNDRVNTOw0KPj4gICAgICB9DQo+PiAgICB9DQo+PiBAQCAtMTAyLDIzICsxMDYsMTggQEAg RmluZEFuY2hvclZvbHVtZURlc2NyaXB0b3JQb2ludGVyICggIH0NCj4+IA0KPj4gIC8qKg0KPj4g LSAgQ2hlY2sgaWYgYmxvY2sgZGV2aWNlIHN1cHBvcnRzIGEgdmFsaWQgVURGIGZpbGUgc3lzdGVt IGFzDQo+c3BlY2lmaWVkIGJ5IE9TVEENCj4+IC0gIFVuaXZlcnNhbCBEaXNrIEZvcm1hdCBTcGVj aWZpY2F0aW9uIDIuNjAuDQo+PiArICBGaW5kIFVERiB2b2x1bWUgaWRlbnRpZmllcnMgaW4gYSBW b2x1bWUgUmVjb2duaXRpb24gU2VxdWVuY2UuDQo+PiANCj4+IC0gIEBwYXJhbVtpbl0gICBCbG9j a0lvICBCbG9ja0lvIGludGVyZmFjZS4NCj4+IC0gIEBwYXJhbVtpbl0gICBEaXNrSW8gICBEaXNr SW8gaW50ZXJmYWNlLg0KPj4gKyAgQHBhcmFtW2luXSAgQmxvY2tJbyAgICAgICAgICAgICBCbG9j a0lvIGludGVyZmFjZS4NCj4+ICsgIEBwYXJhbVtpbl0gIERpc2tJbyAgICAgICAgICAgICAgRGlz a0lvIGludGVyZmFjZS4NCj4+IA0KPj4gLSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBV REYgZmlsZSBzeXN0ZW0gZm91bmQuDQo+PiAtICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAg IFVERiBmaWxlIHN5c3RlbSBub3QgZm91bmQuDQo+PiAtICBAcmV0dmFsIEVGSV9OT19NRURJQSAg ICAgICAgIFRoZSBkZXZpY2UgaGFzIG5vIG1lZGlhLg0KPj4gLSAgQHJldHZhbCBFRklfREVWSUNF X0VSUk9SICAgICBUaGUgZGV2aWNlIHJlcG9ydGVkIGFuIGVycm9yLg0KPj4gLSAgQHJldHZhbCBF RklfVk9MVU1FX0NPUlJVUFRFRCBUaGUgZmlsZSBzeXN0ZW0gc3RydWN0dXJlcyBhcmUNCj5jb3Jy dXB0ZWQuDQo+PiAtICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTIFRoZSBzY2FuIHdhcyBu b3Qgc3VjY2Vzc2Z1bCBkdWUgdG8NCj5sYWNrIG9mDQo+PiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJlc291cmNlcy4NCj4+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg ICAgVURGIHZvbHVtZSBpZGVudGlmaWVycyB3ZXJlIGZvdW5kLg0KPj4gKyAgQHJldHZhbCBFRklf Tk9UX0ZPVU5EICAgICAgICAgICBVREYgdm9sdW1lIGlkZW50aWZpZXJzIHdlcmUgbm90DQo+Zm91 bmQuDQo+PiArICBAcmV0dmFsIG90aGVyICAgICAgICAgICAgICAgICAgIEZhaWxlZCB0byBwZXJm b3JtIGRpc2sgSS9PLg0KPj4gDQo+PiAgKiovDQo+PiAgRUZJX1NUQVRVUw0KPj4gLVN1cHBvcnRV ZGZGaWxlU3lzdGVtICgNCj4+ICtGaW5kVWRmVm9sdW1lSWRlbnRpZmllcnMgKA0KPj4gICAgSU4g RUZJX0JMT0NLX0lPX1BST1RPQ09MICAqQmxvY2tJbywNCj4+ICAgIElOIEVGSV9ESVNLX0lPX1BS T1RPQ09MICAgKkRpc2tJbw0KPj4gICAgKQ0KPj4gQEAgLTEyOCw3ICsxMjcsNiBAQCBTdXBwb3J0 VWRmRmlsZVN5c3RlbSAoDQo+PiAgICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEVuZERpc2tPZmZzZXQ7DQo+PiAgICBDRFJPTV9WT0xVTUVfREVTQ1JJUFRPUiAgICAgICAg ICAgICAgIFZvbERlc2NyaXB0b3I7DQo+PiAgICBDRFJPTV9WT0xVTUVfREVTQ1JJUFRPUiAgICAg ICAgICAgICAgIFRlcm1pbmF0aW5nVm9sRGVzY3JpcHRvcjsNCj4+IC0gIFVERl9BTkNIT1JfVk9M VU1FX0RFU0NSSVBUT1JfUE9JTlRFUiAgQW5jaG9yUG9pbnQ7DQo+PiANCj4+ICAgIFplcm9NZW0g KChWT0lEICopJlRlcm1pbmF0aW5nVm9sRGVzY3JpcHRvciwgc2l6ZW9mIA0KPj4gKENEUk9NX1ZP TFVNRV9ERVNDUklQVE9SKSk7DQo+PiANCj4+IEBAIC0xNjcsNyArMTY1LDcgQEAgU3VwcG9ydFVk ZkZpbGVTeXN0ZW0gKA0KPj4gICAgICAgICAgKENvbXBhcmVNZW0gKChWT0lEICopJlZvbERlc2Ny aXB0b3IsDQo+PiAgICAgICAgICAgICAgICAgICAgICAgKFZPSUQgKikmVGVybWluYXRpbmdWb2xE ZXNjcmlwdG9yLA0KPj4gICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoQ0RST01fVk9MVU1F X0RFU0NSSVBUT1IpKSA9PSAwKSkgew0KPj4gLSAgICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7 DQo+PiArICAgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+PiAgICAgIH0NCj4+ICAgIH0NCj4+ IA0KPj4gQEAgLTE3Niw3ICsxNzQsNyBAQCBTdXBwb3J0VWRmRmlsZVN5c3RlbSAoDQo+PiAgICAv Lw0KPj4gICAgT2Zmc2V0ICs9IFVERl9MT0dJQ0FMX1NFQ1RPUl9TSVpFOw0KPj4gICAgaWYgKE9m ZnNldCA+PSBFbmREaXNrT2Zmc2V0KSB7DQo+PiAtICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7 DQo+PiArICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPj4gICAgfQ0KPj4gDQo+PiAgICBTdGF0 dXMgPSBEaXNrSW8tPlJlYWREaXNrICgNCj4+IEBAIC0xOTYsNyArMTk0LDcgQEAgU3VwcG9ydFVk ZkZpbGVTeXN0ZW0gKA0KPj4gICAgICAgIChDb21wYXJlTWVtICgoVk9JRCAqKVZvbERlc2NyaXB0 b3IuVW5rbm93bi5JZCwNCj4+ICAgICAgICAgICAgICAgICAgICAgKFZPSUQgKilVREZfTlNSM19J REVOVElGSUVSLA0KPj4gICAgICAgICAgICAgICAgICAgICBzaXplb2YgKFZvbERlc2NyaXB0b3Iu VW5rbm93bi5JZCkpICE9IDApKSB7DQo+PiAtICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ PiArICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPj4gICAgfQ0KPj4gDQo+PiAgICAvLw0KPj4g QEAgLTIwNCw3ICsyMDIsNyBAQCBTdXBwb3J0VWRmRmlsZVN5c3RlbSAoDQo+PiAgICAvLw0KPj4g ICAgT2Zmc2V0ICs9IFVERl9MT0dJQ0FMX1NFQ1RPUl9TSVpFOw0KPj4gICAgaWYgKE9mZnNldCA+ PSBFbmREaXNrT2Zmc2V0KSB7DQo+PiAtICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+PiAr ICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPj4gICAgfQ0KPj4gDQo+PiAgICBTdGF0dXMgPSBE aXNrSW8tPlJlYWREaXNrICgNCj4+IEBAIC0yMjEsMTUgKzIxOSwyOTEgQEAgU3VwcG9ydFVkZkZp bGVTeXN0ZW0gKA0KPj4gICAgaWYgKENvbXBhcmVNZW0gKChWT0lEICopVm9sRGVzY3JpcHRvci5V bmtub3duLklkLA0KPj4gICAgICAgICAgICAgICAgICAgIChWT0lEICopVURGX1RFQV9JREVOVElG SUVSLA0KPj4gICAgICAgICAgICAgICAgICAgIHNpemVvZiAoVm9sRGVzY3JpcHRvci5Vbmtub3du LklkKSkgIT0gMCkgew0KPj4gLSAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPj4gKyAgICBy ZXR1cm4gRUZJX05PVF9GT1VORDsNCj4+ICsgIH0NCj4+ICsNCj4+ICsgIHJldHVybiBFRklfU1VD Q0VTUzsNCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiArICBDaGVjayBpZiBMb2dpY2FsIFZvbHVt ZSBEZXNjcmlwdG9yIGlzIHN1cHBvcnRlZCBieSBjdXJyZW50IEVESzINCj5VREYgZmlsZQ0KPj4g KyAgc3lzdGVtIGltcGxlbWVudGF0aW9uLg0KPj4gKw0KPj4gKyAgQHBhcmFtW2luXSAgTG9naWNh bFZvbERlc2MgIExvZ2ljYWwgVm9sdW1lIERlc2NyaXB0b3IgcG9pbnRlci4NCj4+ICsNCj4+ICsg IEByZXR2YWwgVFJVRSAgICAgICAgICAgICAgICBMb2dpY2FsIFZvbHVtZSBEZXNjcmlwdG9yIGlz DQo+c3VwcG9ydGVkLg0KPj4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgICAgICAgIExvZ2ljYWwg Vm9sdW1lIERlc2NyaXB0b3IgaXMgbm90DQo+c3VwcG9ydGVkLg0KPj4gKw0KPj4gKyoqLw0KPj4g K0JPT0xFQU4NCj4+ICtJc0xvZ2ljYWxWb2x1bWVEZXNjcmlwdG9yU3VwcG9ydGVkICgNCj4+ICsg IFVERl9MT0dJQ0FMX1ZPTFVNRV9ERVNDUklQVE9SICpMb2dpY2FsVm9sRGVzYw0KPj4gKyAgKQ0K Pj4gK3sNCj4+ICsgIC8vDQo+PiArICAvLyBDaGVjayBmb3IgYSB2YWxpZCBVREYgcmV2aXNpb24g cmFuZ2UNCj4+ICsgIC8vDQo+PiArICBzd2l0Y2ggKFVERl9MVkRfUkVWSVNJT04gKExvZ2ljYWxW b2xEZXNjKSkgew0KPj4gKyAgY2FzZSAweDAxMDI6DQo+PiArICBjYXNlIDB4MDE1MDoNCj4+ICsg IGNhc2UgMHgwMjAwOg0KPj4gKyAgY2FzZSAweDAyMDE6DQo+PiArICBjYXNlIDB4MDI1MDoNCj4+ ICsgIGNhc2UgMHgwMjYwOg0KPj4gKyAgICBicmVhazsNCj4+ICsgIGRlZmF1bHQ6DQo+PiArICAg IHJldHVybiBGQUxTRTsNCj4+ICsgIH0NCj4+ICsNCj4+ICsgIC8vDQo+PiArICAvLyBDaGVjayBm b3IgYSBzaW5nbGUgUGFydGl0aW9uIE1hcCAgLy8gIGlmIA0KPj4gKyAoTG9naWNhbFZvbERlc2Mt Pk51bWJlck9mUGFydGl0aW9uTWFwcyA+IDEpIHsNCj4+ICsgICAgcmV0dXJuIEZBTFNFOw0KPj4g KyAgfQ0KPj4gKyAgLy8NCj4+ICsgIC8vIFVERiAxLjAyIHJldmlzaW9uIHN1cHBvcnRzIG9ubHkg VHlwZSAxIChQaHlzaWNhbCkgcGFydGl0aW9ucywNCj5idXQNCj4+ICsgIC8vIGxldCdzIGNoZWNr IGl0IGFueSB3YXkuDQo+PiArICAvLw0KPj4gKyAgLy8gUGFydGl0aW9uTWFwWzBdIC0+IHR5cGUN Cj4+ICsgIC8vIFBhcnRpdGlvbk1hcFsxXSAtPiBsZW5ndGggKGluIGJ5dGVzKSAgLy8gIGlmIA0K Pj4gKyAoTG9naWNhbFZvbERlc2MtPlBhcnRpdGlvbk1hcHNbMF0gIT0gMSB8fA0KPj4gKyAgICAg IExvZ2ljYWxWb2xEZXNjLT5QYXJ0aXRpb25NYXBzWzFdICE9IDYpIHsNCj4+ICsgICAgcmV0dXJu IEZBTFNFOw0KPj4gKyAgfQ0KPj4gKw0KPj4gKyAgcmV0dXJuIFRSVUU7DQo+PiArfQ0KPj4gKw0K Pj4gKy8qKg0KPj4gKyAgRmluZCBVREYgbG9naWNhbCB2b2x1bWUgbG9jYXRpb24gYW5kIHdoZXRo ZXIgaXQgaXMgc3VwcG9ydGVkIGJ5DQo+Y3VycmVudCBFREsyDQo+PiArICBVREYgZmlsZSBzeXN0 ZW0gaW1wbGVtZW50YXRpb24uDQo+PiArDQo+PiArICBAcGFyYW1baW5dICBCbG9ja0lvICAgICAg ICAgICAgIEJsb2NrSW8gaW50ZXJmYWNlLg0KPj4gKyAgQHBhcmFtW2luXSAgRGlza0lvICAgICAg ICAgICAgICBEaXNrSW8gaW50ZXJmYWNlLg0KPj4gKyAgQHBhcmFtW2luXSAgQW5jaG9yUG9pbnQg ICAgICAgICBBbmNob3Igdm9sdW1lIGRlc2NyaXB0b3IgcG9pbnRlci4NCj4+ICsgIEBwYXJhbVtv dXRdIE1haW5WZHNTdGFydEJsb2NrICAgTWFpbiBWRFMgc3RhcnRpbmcgYmxvY2sgbnVtYmVyLg0K Pj4gKyAgQHBhcmFtW291dF0gTWFpblZkc0VuZEJsb2NrICAgICBNYWluIFZEUyBlbmRpbmcgYmxv Y2sgbnVtYmVyLg0KPj4gKw0KPj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBV REYgbG9naWNhbCB2b2x1bWUgd2FzIGZvdW5kLg0KPj4gKyAgQHJldHZhbCBFRklfVk9MVU1FX0NP UlJVUFRFRCAgICBVREYgZmlsZSBzeXN0ZW0gc3RydWN0dXJlcyBhcmUNCj4+IGNvcnJ1cHRlZC4N Cj4+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICAgVURGIGxvZ2ljYWwgdm9sdW1l IGlzIG5vdA0KPnN1cHBvcnRlZC4NCj4+ICsgIEByZXR2YWwgb3RoZXIgICAgICAgICAgICAgICAg ICAgRmFpbGVkIHRvIHBlcmZvcm0gZGlzayBJL08uDQo+PiArDQo+PiArKiovDQo+PiArRUZJX1NU QVRVUw0KPj4gK0ZpbmRMb2dpY2FsVm9sdW1lTG9jYXRpb24gKA0KPj4gKyAgSU4gICBFRklfQkxP Q0tfSU9fUFJPVE9DT0wgICAgICAgICAgICAgICAgICpCbG9ja0lvLA0KPj4gKyAgSU4gICBFRklf RElTS19JT19QUk9UT0NPTCAgICAgICAgICAgICAgICAgICpEaXNrSW8sDQo+PiArICBJTiAgIFVE Rl9BTkNIT1JfVk9MVU1FX0RFU0NSSVBUT1JfUE9JTlRFUiAgKkFuY2hvclBvaW50LA0KPj4gKyAg T1VUICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpNYWluVmRzU3RhcnRC bG9jaywNCj4+ICsgIE9VVCAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq TWFpblZkc0VuZEJsb2NrDQo+PiArICApDQo+PiArew0KPj4gKyAgRUZJX1NUQVRVUyAgICAgICAg ICAgICAgICAgICAgIFN0YXR1czsNCj4+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAg ICBCbG9ja1NpemU7DQo+PiArICBFRklfTEJBICAgICAgICAgICAgICAgICAgICAgICAgTGFzdEJs b2NrOw0KPj4gKyAgVURGX0VYVEVOVF9BRCAgICAgICAgICAgICAgICAgICpFeHRlbnRBZDsNCj4+ ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICBTZXFCbG9ja3NOdW07DQo+PiArICBV SU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgU2VxU3RhcnRCbG9jazsNCj4+ICsgIFVJTlQ2 NCAgICAgICAgICAgICAgICAgICAgICAgICBHdWFyZE1haW5WZHNTdGFydEJsb2NrOw0KPj4gKyAg Vk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICpCdWZmZXI7DQo+PiArICBVSU5UNjQgICAg ICAgICAgICAgICAgICAgICAgICAgU2VxRW5kQmxvY2s7DQo+PiArICBCT09MRUFOICAgICAgICAg ICAgICAgICAgICAgICAgU3RvcFNlcXVlbmNlOw0KPj4gKyAgVUlOVE4gICAgICAgICAgICAgICAg ICAgICAgICAgIEx2ZHNDb3VudDsNCj4+ICsgIFVERl9MT0dJQ0FMX1ZPTFVNRV9ERVNDUklQVE9S ICAqTG9naWNhbFZvbERlc2M7DQo+PiArICBVREZfREVTQ1JJUFRPUl9UQUcgICAgICAgICAgICAg KkRlc2NyaXB0b3JUYWc7DQo+PiArDQo+PiArICBCbG9ja1NpemUgPSBCbG9ja0lvLT5NZWRpYS0+ QmxvY2tTaXplOyAgTGFzdEJsb2NrID0gDQo+PiArIEJsb2NrSW8tPk1lZGlhLT5MYXN0QmxvY2s7 ICBFeHRlbnRBZCA9IA0KPj4gKyAmQW5jaG9yUG9pbnQtPk1haW5Wb2x1bWVEZXNjcmlwdG9yU2Vx dWVuY2VFeHRlbnQ7DQo+PiArDQo+PiArICAvLw0KPj4gKyAgLy8gVURGIDIuNjAsIDIuMi4zLjEg c3RydWN0IE1haW5Wb2x1bWVEZXNjcmlwdG9yU2VxdWVuY2VFeHRlbnQNCj4+ICsgIC8vDQo+PiAr ICAvLyBUaGUgTWFpbiBWb2x1bWUgRGVzY3JpcHRvciBTZXF1ZW5jZSBFeHRlbnQgc2hhbGwgaGF2 ZSBhIG1pbmltdW0NCj5sZW5ndGgNCj4+IG9mDQo+PiArICAvLyAxNiBsb2dpY2FsIHNlY3RvcnMu DQo+PiArICAvLw0KPj4gKyAgLy8gQWxzbyBtYWtlIHN1cmUgaXQgZG9lcyBub3QgZXhjZWVkIG1h eGltdW0gbnVtYmVyIG9mIGJsb2NrcyBpbg0KPnRoZSBkaXNrLg0KPj4gKyAgLy8NCj4+ICsgIFNl cUJsb2Nrc051bSA9IERpdlU2NHgzMiAoKFVJTlQ2NClFeHRlbnRBZC0+RXh0ZW50TGVuZ3RoLA0K PkJsb2NrU2l6ZSk7DQo+PiArICBpZiAoU2VxQmxvY2tzTnVtIDwgMTYgfHwgKEVGSV9MQkEpU2Vx QmxvY2tzTnVtID4gTGFzdEJsb2NrICsgMSkgew0KPj4gKyAgICByZXR1cm4gRUZJX1ZPTFVNRV9D T1JSVVBURUQ7DQo+PiArICB9DQo+PiArDQo+PiArICAvLw0KPj4gKyAgLy8gQ2hlY2sgZm9yIHZh bGlkIFZvbHVtZSBEZXNjcmlwdG9yIFNlcXVlbmNlIHN0YXJ0aW5nIGJsb2NrDQo+bnVtYmVyDQo+ PiArICAvLw0KPj4gKyAgU2VxU3RhcnRCbG9jayA9IChVSU5UNjQpRXh0ZW50QWQtPkV4dGVudExv Y2F0aW9uOyAgaWYgDQo+PiArIChTZXFTdGFydEJsb2NrID4gTGFzdEJsb2NrIHx8DQo+PiArICAg ICAgU2VxU3RhcnRCbG9jayArIFNlcUJsb2Nrc051bSAtIDEgPiBMYXN0QmxvY2spIHsNCj4+ICsg ICAgcmV0dXJuIEVGSV9WT0xVTUVfQ09SUlVQVEVEOw0KPj4gICAgfQ0KPj4gDQo+PiArICBHdWFy ZE1haW5WZHNTdGFydEJsb2NrID0gU2VxU3RhcnRCbG9jazsNCj4+ICsNCj4+ICsgIC8vDQo+PiAr ICAvLyBBbGxvY2F0ZSBidWZmZXIgZm9yIHJlYWRpbmcgZGlzayBibG9ja3MgIC8vICBCdWZmZXIg PSANCj4+ICsgQWxsb2NhdGVaZXJvUG9vbCAoKFVJTlROKUJsb2NrU2l6ZSk7ICBpZiAoQnVmZmVy ID09IE5VTEwpIHsNCj4+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPj4gKyAg fQ0KPj4gKw0KPj4gKyAgU2VxRW5kQmxvY2sgPSBTZXFTdGFydEJsb2NrICsgU2VxQmxvY2tzTnVt OyAgU3RvcFNlcXVlbmNlID0gRkFMU0U7ICANCj4+ICsgTHZkc0NvdW50ID0gMDsgIFN0YXR1cyA9 IEVGSV9WT0xVTUVfQ09SUlVQVEVEOyAgLy8gIC8vIFN0YXJ0IE1haW4gDQo+PiArIFZvbHVtZSBE ZXNjcmlwdG9yIFNlcXVlbmNlICAvLyAgZm9yICg7IFNlcVN0YXJ0QmxvY2sgPCBTZXFFbmRCbG9j ayANCj4+ICsgJiYgIVN0b3BTZXF1ZW5jZTsNCj5TZXFTdGFydEJsb2NrKyspIHsNCj4+ICsgICAg Ly8NCj4+ICsgICAgLy8gUmVhZCBkaXNrIGJsb2NrDQo+PiArICAgIC8vDQo+PiArICAgIFN0YXR1 cyA9IEJsb2NrSW8tPlJlYWRCbG9ja3MgKA0KPj4gKyAgICAgIEJsb2NrSW8sDQo+PiArICAgICAg QmxvY2tJby0+TWVkaWEtPk1lZGlhSWQsDQo+PiArICAgICAgU2VxU3RhcnRCbG9jaywNCj4+ICsg ICAgICBCbG9ja1NpemUsDQo+PiArICAgICAgQnVmZmVyDQo+PiArICAgICAgKTsNCj4+ICsgICAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4gKyAgICAgIGdvdG8gT3V0X0ZyZWU7DQo+PiAr ICAgIH0NCj4+ICsNCj4+ICsgICAgRGVzY3JpcHRvclRhZyA9IEJ1ZmZlcjsNCj4+ICsNCj4+ICsg ICAgLy8NCj4+ICsgICAgLy8gRUNNQSAxNjcsIDguNC4xIENvbnRlbnRzIG9mIGEgVm9sdW1lIERl c2NyaXB0b3IgU2VxdWVuY2UNCj4+ICsgICAgLy8NCj4+ICsgICAgLy8gLSBBIFZvbHVtZSBEZXNj cmlwdG9yIFNlcXVlbmNlIHNoYWxsIGNvbnRhaW4gb25lIG9yIG1vcmUNCj5QcmltYXJ5DQo+PiBW b2x1bWUNCj4+ICsgICAgLy8gICBEZXNjcmlwdG9ycy4NCj4+ICsgICAgLy8gLSBBIFZvbHVtZSBE ZXNjcmlwdG9yIFNlcXVlbmNlIHNoYWxsIGNvbnRhaW4gemVybyBvciBtb3JlDQo+PiBJbXBsZW1l bnRhdGlvbg0KPj4gKyAgICAvLyAgIFVzZSBWb2x1bWUgRGVzY3JpcHRvcnMuDQo+PiArICAgIC8v IC0gQSBWb2x1bWUgRGVzY3JpcHRvciBTZXF1ZW5jZSBzaGFsbCBjb250YWluIHplcm8gb3IgbW9y ZQ0KPlBhcnRpdGlvbg0KPj4gKyAgICAvLyAgIERlc2NyaXB0b3JzLg0KPj4gKyAgICAvLyAtIEEg Vm9sdW1lIERlc2NyaXB0b3IgU2VxdWVuY2Ugc2hhbGwgY29udGFpbiB6ZXJvIG9yIG1vcmUNCj5M b2dpY2FsDQo+PiBWb2x1bWUNCj4+ICsgICAgLy8gICBEZXNjcmlwdG9ycy4NCj4+ICsgICAgLy8g LSBBIFZvbHVtZSBEZXNjcmlwdG9yIFNlcXVlbmNlIHNoYWxsIGNvbnRhaW4gemVybyBvciBtb3Jl DQo+VW5hbGxvY2F0ZWQNCj4+ICsgICAgLy8gICBTcGFjZSBEZXNjcmlwdG9ycy4NCj4+ICsgICAg Ly8NCj4+ICsgICAgc3dpdGNoIChVREZfVEFHX0lEIChEZXNjcmlwdG9yVGFnKSkgew0KPj4gKyAg ICBjYXNlIFVkZlByaW1hcnlWb2x1bWVEZXNjcmlwdG9yOg0KPj4gKyAgICBjYXNlIFVkZkltcGxl bWVuYXRpb25Vc2VWb2x1bWVEZXNjcmlwdG9yOg0KPj4gKyAgICBjYXNlIFVkZlBhcnRpdGlvbkRl c2NyaXB0b3I6DQo+PiArICAgIGNhc2UgVWRmVW5hbGxvY2F0ZWRTcGFjZURlc2NyaXB0b3I6DQo+ PiArICAgICAgYnJlYWs7DQo+PiArDQo+PiArICAgIGNhc2UgVWRmTG9naWNhbFZvbHVtZURlc2Ny aXB0b3I6DQo+PiArICAgICAgTG9naWNhbFZvbERlc2MgPSBCdWZmZXI7DQo+PiArDQo+PiArICAg ICAgLy8NCj4+ICsgICAgICAvLyBDaGVjayBmb3IgZXhpc3RlbmNlIG9mIGEgc2luZ2xlIExWRCBh bmQgd2hldGhlciBpdCBpcw0KPnN1cHBvcnRlZCBieQ0KPj4gKyAgICAgIC8vIGN1cnJlbnQgRURL MiBVREYgZmlsZSBzeXN0ZW0gaW1wbGVtZW50YXRpb24uDQo+PiArICAgICAgLy8NCj4+ICsgICAg ICBpZiAoKytMdmRzQ291bnQgPiAxIHx8DQo+PiArICAgICAgICAgICFJc0xvZ2ljYWxWb2x1bWVE ZXNjcmlwdG9yU3VwcG9ydGVkIChMb2dpY2FsVm9sRGVzYykpIHsNCj4+ICsgICAgICAgIFN0YXR1 cyA9IEVGSV9VTlNVUFBPUlRFRDsNCj4+ICsgICAgICAgIFN0b3BTZXF1ZW5jZSA9IFRSVUU7DQo+ PiArICAgICAgfQ0KPj4gKw0KPj4gKyAgICAgIGJyZWFrOw0KPj4gKw0KPj4gKyAgICBjYXNlIFVk ZlRlcm1pbmF0aW5nRGVzY3JpcHRvcjoNCj4+ICsgICAgICAvLw0KPj4gKyAgICAgIC8vIFN0b3Ag dGhlIHNlcXVlbmNlIHdoZW4gd2UgZmluZCBhIFRlcm1pbmF0aW5nIERlc2NyaXB0b3INCj4+ICsg ICAgICAvLyAoYWthIFVuYWxsb2NhdGVkIFNlY3RvciksIHNlIHdlIGRvbid0IGhhdmUgdG8gd2Fs ayBhbGwgdGhlDQo+dW5hbGxvY2F0ZWQNCj4+ICsgICAgICAvLyBhcmVhIHVubmVjZXNzYXJpbHku DQo+PiArICAgICAgLy8NCj4+ICsgICAgICBTdG9wU2VxdWVuY2UgPSBUUlVFOw0KPj4gKyAgICAg IGJyZWFrOw0KPj4gKw0KPj4gKyAgICBkZWZhdWx0Og0KPj4gKyAgICAgIC8vDQo+PiArICAgICAg Ly8gQW4gaW52YWxpZCBWb2x1bWUgRGVzY3JpcHRvciBoYXMgYmVlbiBmb3VuZCBpbiB0aGUgc2Vx dWVjZS4NCj5Wb2x1bWUgaXMNCj4+ICsgICAgICAvLyBjb3JydXB0ZWQuDQo+PiArICAgICAgLy8N Cj4+ICsgICAgICBTdGF0dXMgPSBFRklfVk9MVU1FX0NPUlJVUFRFRDsNCj4+ICsgICAgICBnb3Rv IE91dF9GcmVlOw0KPj4gKyAgICB9DQo+PiArICB9DQo+PiArDQo+PiArICAvLw0KPj4gKyAgLy8g Q2hlY2sgaWYgTFZEIHdhcyBmb3VuZA0KPj4gKyAgLy8NCj4+ICsgIGlmICghRUZJX0VSUk9SIChT dGF0dXMpICYmIEx2ZHNDb3VudCA9PSAxKSB7DQo+PiArICAgICpNYWluVmRzU3RhcnRCbG9jayA9 IEd1YXJkTWFpblZkc1N0YXJ0QmxvY2s7DQo+PiArICAgIC8vDQo+PiArICAgIC8vIFdlIGRvIG5v dCBuZWVkIHRvIHJlYWQgZWl0aGVyIExWRCBvciBQRCBkZXNjcmlwdG9ycyB0byBrbm93DQo+dGhl IGxhc3QNCj4+ICsgICAgLy8gdmFsaWQgYmxvY2sgaW4gdGhlIGZvdW5kIFVERiBmaWxlIHN5c3Rl bS4gSXQncyBhbHJlYWR5DQo+TGFzdEJsb2NrLg0KPj4gKyAgICAvLw0KPj4gKyAgICAqTWFpblZk c0VuZEJsb2NrID0gTGFzdEJsb2NrOw0KPj4gKw0KPj4gKyAgICBTdGF0dXMgPSBFRklfU1VDQ0VT UzsNCj4+ICsgIH0NCj4+ICsNCj4+ICtPdXRfRnJlZToNCj4+ICsgIC8vDQo+PiArICAvLyBGcmVl IGJsb2NrIHJlYWQgYnVmZmVyDQo+PiArICAvLw0KPj4gKyAgRnJlZVBvb2wgKEJ1ZmZlcik7DQo+ PiArDQo+PiArICByZXR1cm4gU3RhdHVzOw0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsgIEZp bmQgYSBzdXBwb3J0ZWQgVURGIGZpbGUgc3lzdGVtIGluIGJsb2NrIGRldmljZS4NCj4+ICsNCj4+ ICsgIEBwYXJhbVtpbl0gIEJsb2NrSW8gICAgICAgICAgICAgQmxvY2tJbyBpbnRlcmZhY2UuDQo+ PiArICBAcGFyYW1baW5dICBEaXNrSW8gICAgICAgICAgICAgIERpc2tJbyBpbnRlcmZhY2UuDQo+ PiArICBAcGFyYW1bb3V0XSBTdGFydGluZ0xCQSAgICAgICAgIFVERiBmaWxlIHN5c3RlbSBzdGFy dGluZyBMQkEuDQo+PiArICBAcGFyYW1bb3V0XSBFbmRpbmdMQkEgICAgICAgICAgIFVERiBmaWxl IHN5c3RlbSBzdGFydGluZyBMQkEuDQo+PiArDQo+PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICAgIFVERiBmaWxlIHN5c3RlbSB3YXMgZm91bmQuDQo+PiArICBAcmV0dmFsIG90aGVy ICAgICAgICAgICAgICAgICAgIFVERiBmaWxlIHN5c3RlbSB3YXMgbm90IGZvdW5kLg0KPj4gKw0K Pj4gKyoqLw0KPj4gK0VGSV9TVEFUVVMNCj4+ICtGaW5kVWRmRmlsZVN5c3RlbSAoDQo+PiArICBJ TiBFRklfQkxPQ0tfSU9fUFJPVE9DT0wgICpCbG9ja0lvLA0KPj4gKyAgSU4gRUZJX0RJU0tfSU9f UFJPVE9DT0wgICAqRGlza0lvLA0KPj4gKyAgT1VUIEVGSV9MQkEgICAgICAgICAgICAgICAqU3Rh cnRpbmdMQkEsDQo+PiArICBPVVQgRUZJX0xCQSAgICAgICAgICAgICAgICpFbmRpbmdMQkENCj4+ ICsgICkNCj4+ICt7DQo+PiArICBFRklfU1RBVFVTIFN0YXR1czsNCj4+ICsgIFVERl9BTkNIT1Jf Vk9MVU1FX0RFU0NSSVBUT1JfUE9JTlRFUiAgQW5jaG9yUG9pbnQ7DQo+PiArDQo+PiArICAvLw0K Pj4gKyAgLy8gRmluZCBVREYgdm9sdW1lIGlkZW50aWZpZXJzDQo+PiArICAvLw0KPj4gKyAgU3Rh dHVzID0gRmluZFVkZlZvbHVtZUlkZW50aWZpZXJzIChCbG9ja0lvLCBEaXNrSW8pOyAgaWYgDQo+ PiArIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4+ICsg IH0NCj4+ICsNCj4+ICsgIC8vDQo+PiArICAvLyBGaW5kIEFuY2hvciBWb2x1bWUgRGVzY3JpcHRv ciBQb2ludGVyICAvLw0KPj4gICAgU3RhdHVzID0gRmluZEFuY2hvclZvbHVtZURlc2NyaXB0b3JQ b2ludGVyIChCbG9ja0lvLCBEaXNrSW8sDQo+JkFuY2hvclBvaW50KTsNCj4+ICAgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4+IC0gICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4+ICsg ICAgcmV0dXJuIFN0YXR1czsNCj4+ICAgIH0NCj4+IA0KPj4gLSAgcmV0dXJuIEVGSV9TVUNDRVNT Ow0KPj4gKyAgLy8NCj4+ICsgIC8vIEZpbmQgTG9naWNhbCBWb2x1bWUgbG9jYXRpb24NCj4+ICsg IC8vDQo+PiArICBTdGF0dXMgPSBGaW5kTG9naWNhbFZvbHVtZUxvY2F0aW9uICgNCj4+ICsgICAg QmxvY2tJbywNCj4+ICsgICAgRGlza0lvLA0KPj4gKyAgICAmQW5jaG9yUG9pbnQsDQo+PiArICAg IChVSU5UNjQgKilTdGFydGluZ0xCQSwNCj4+ICsgICAgKFVJTlQ2NCAqKUVuZGluZ0xCQQ0KPj4g KyAgICApOw0KPj4gKw0KPj4gKyAgcmV0dXJuIFN0YXR1czsNCj4+ICB9DQo+PiANCj4+ICAvKioN Cj4+IEBAIC0yNjMsOSArNTM3LDkgQEAgUGFydGl0aW9uSW5zdGFsbFVkZkNoaWxkSGFuZGxlcyAo DQo+PiAgICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgIFJlbWFpbmRlckJ5TWVkaWFCbG9j a1NpemU7DQo+PiAgICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4+ICAg IEVGSV9CTE9DS19JT19NRURJQSAgICAgICAgICAgKk1lZGlhOw0KPj4gLSAgRUZJX0RFVklDRV9Q QVRIX1BST1RPQ09MICAgICAqRGV2aWNlUGF0aE5vZGU7DQo+PiAtICBFRklfR1VJRCAgICAgICAg ICAgICAgICAgICAgICpWZW5kb3JEZWZpbmVkR3VpZDsNCj4+ICAgIEVGSV9QQVJUSVRJT05fSU5G T19QUk9UT0NPTCAgUGFydGl0aW9uSW5mbzsNCj4+ICsgIEVGSV9MQkEgICAgICAgICAgICAgICAg ICAgICAgU3RhcnRpbmdMQkE7DQo+PiArICBFRklfTEJBICAgICAgICAgICAgICAgICAgICAgIEVu ZGluZ0xCQTsNCj4+IA0KPj4gICAgTWVkaWEgPSBCbG9ja0lvLT5NZWRpYTsNCj4+IA0KPj4gQEAg LTI4MSwzNSArNTU1LDEwIEBAIFBhcnRpdGlvbkluc3RhbGxVZGZDaGlsZEhhbmRsZXMgKA0KPj4g ICAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4+ICAgIH0NCj4+IA0KPj4gLSAgRGV2aWNlUGF0 aE5vZGUgPSBEZXZpY2VQYXRoOw0KPj4gLSAgd2hpbGUgKCFJc0RldmljZVBhdGhFbmQgKERldmlj ZVBhdGhOb2RlKSkgew0KPj4gLSAgICAvLw0KPj4gLSAgICAvLyBEbyBub3QgYWxsb3cgY2hlY2tp bmcgZm9yIFVERiBmaWxlIHN5c3RlbXMgaW4gQ0RST00gIkVsDQo+VG9yaXRvIg0KPj4gLSAgICAv LyBwYXJ0aXRpb25zLCBhbmQgc2tpcCBkdXBsaWNhdGUgaW5zdGFsbGF0aW9uIG9mIFVERiBmaWxl DQo+c3lzdGVtIGNoaWxkDQo+PiAtICAgIC8vIG5vZGVzLg0KPj4gLSAgICAvLw0KPj4gLSAgICBp ZiAoRGV2aWNlUGF0aFR5cGUgKERldmljZVBhdGhOb2RlKSA9PSBNRURJQV9ERVZJQ0VfUEFUSCkg ew0KPj4gLSAgICAgIGlmIChEZXZpY2VQYXRoU3ViVHlwZSAoRGV2aWNlUGF0aE5vZGUpID09IE1F RElBX0NEUk9NX0RQKSB7DQo+PiAtICAgICAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4+IC0g ICAgICB9DQo+PiAtICAgICAgaWYgKERldmljZVBhdGhTdWJUeXBlIChEZXZpY2VQYXRoTm9kZSkg PT0gTUVESUFfVkVORE9SX0RQKSB7DQo+PiAtICAgICAgICBWZW5kb3JEZWZpbmVkR3VpZCA9IChF RklfR1VJRCAqKSgoVUlOVE4pRGV2aWNlUGF0aE5vZGUgKw0KPj4gLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgT0ZGU0VUX09GDQo+KFZFTkRPUl9ERVZJQ0VfUEFUSCwg R3VpZCkpOw0KPj4gLSAgICAgICAgaWYgKENvbXBhcmVHdWlkIChWZW5kb3JEZWZpbmVkR3VpZCwg JmdVZGZEZXZQYXRoR3VpZCkpIHsNCj4+IC0gICAgICAgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7 DQo+PiAtICAgICAgICB9DQo+PiAtICAgICAgfQ0KPj4gLSAgICB9DQo+PiAtICAgIC8vDQo+PiAt ICAgIC8vIFRyeSBuZXh0IGRldmljZSBwYXRoIG5vZGUNCj4+IC0gICAgLy8NCj4+IC0gICAgRGV2 aWNlUGF0aE5vZGUgPSBOZXh0RGV2aWNlUGF0aE5vZGUgKERldmljZVBhdGhOb2RlKTsNCj4+IC0g IH0NCj4+IC0NCj4+ICAgIC8vDQo+PiAtICAvLyBDaGVjayBpZiBibG9jayBkZXZpY2Ugc3VwcG9y dHMgYW4gVURGIGZpbGUgc3lzdGVtDQo+PiArICAvLyBTZWFyY2ggZm9yIGFuIFVERiBmaWxlIHN5 c3RlbSBvbiBibG9jayBkZXZpY2UNCj4+ICAgIC8vDQo+PiAtICBTdGF0dXMgPSBTdXBwb3J0VWRm RmlsZVN5c3RlbSAoQmxvY2tJbywgRGlza0lvKTsNCj4+ICsgIFN0YXR1cyA9IEZpbmRVZGZGaWxl U3lzdGVtIChCbG9ja0lvLCBEaXNrSW8sICZTdGFydGluZ0xCQSwNCj4mRW5kaW5nTEJBKTsNCj4+ ICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+ICAgICAgcmV0dXJuIEVGSV9OT1RfRk9V TkQ7DQo+PiAgICB9DQo+PiBAQCAtMzM0LDggKzU4Myw4IEBAIFBhcnRpdGlvbkluc3RhbGxVZGZD aGlsZEhhbmRsZXMgKA0KPj4gICAgICBEZXZpY2VQYXRoLA0KPj4gICAgICAoRUZJX0RFVklDRV9Q QVRIX1BST1RPQ09MICopJmdVZGZEZXZpY2VQYXRoLA0KPj4gICAgICAmUGFydGl0aW9uSW5mbywN Cj4+IC0gICAgMCwNCj4+IC0gICAgTWVkaWEtPkxhc3RCbG9jaywNCj4+ICsgICAgU3RhcnRpbmdM QkEsDQo+PiArICAgIEVuZGluZ0xCQSwNCj4+ICAgICAgTWVkaWEtPkJsb2NrU2l6ZQ0KPj4gICAg ICApOw0KPj4gICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+IGRpZmYgLS1naXQgYS9N ZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0Rpc2svVWRmRHhlL0ZpbGUuYw0KPj4gYi9NZGVNb2R1bGVQ a2cvVW5pdmVyc2FsL0Rpc2svVWRmRHhlL0ZpbGUuYw0KPj4gaW5kZXggNjI1ZjJjNTYzNy4uNmYw N2JmMjA2NiAxMDA2NDQNCj4+IC0tLSBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvRGlzay9VZGZE eGUvRmlsZS5jDQo+PiArKysgYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0Rpc2svVWRmRHhlL0Zp bGUuYw0KPj4gQEAgLTEzMSw3ICsxMzEsNiBAQCBFcnJvcl9BbGxvY19Qcml2X0ZpbGVfRGF0YToN Cj4+ICAgIENsZWFudXBGaWxlSW5mb3JtYXRpb24gKCZQcml2RnNEYXRhLT5Sb290KTsNCj4+IA0K Pj4gIEVycm9yX0ZpbmRfUm9vdF9EaXI6DQo+PiAtICBDbGVhbnVwVm9sdW1lSW5mb3JtYXRpb24g KCZQcml2RnNEYXRhLT5Wb2x1bWUpOw0KPj4gDQo+PiAgRXJyb3JfUmVhZF9VZGZfVm9sdW1lOg0K Pj4gIEVycm9yX0ludmFsaWRfUGFyYW1zOg0KPj4gQEAgLTQyOSw3ICs0MjgsNyBAQCBVZGZSZWFk ICgNCj4+ICAgICAgfQ0KPj4gICAgICBBU1NFUlQgKE5ld0ZpbGVFbnRyeURhdGEgIT0gTlVMTCk7 DQo+PiANCj4+IC0gICAgaWYgKElTX0ZFX1NZTUxJTksgKE5ld0ZpbGVFbnRyeURhdGEpKSB7DQo+ PiArICAgIGlmIChGRV9JQ0JfRklMRV9UWVBFIChOZXdGaWxlRW50cnlEYXRhKSA9PSBVZGZGaWxl RW50cnlTeW1saW5rKQ0KPnsNCj4+ICAgICAgICBTdGF0dXMgPSBSZXNvbHZlU3ltbGluayAoDQo+ PiAgICAgICAgICBCbG9ja0lvLA0KPj4gICAgICAgICAgRGlza0lvLA0KPj4gQEAgLTUyOSw3ICs1 MjgsNiBAQCBVZGZDbG9zZSAoDQo+PiAgICBFRklfVFBMICAgICAgICAgICAgICAgICAgICAgT2xk VHBsOw0KPj4gICAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4+ICAgIFBS SVZBVEVfVURGX0ZJTEVfREFUQSAgICAgICAqUHJpdkZpbGVEYXRhOw0KPj4gLSAgUFJJVkFURV9V REZfU0lNUExFX0ZTX0RBVEEgICpQcml2RnNEYXRhOw0KPj4gDQo+PiAgICBPbGRUcGwgPSBnQlMt PlJhaXNlVFBMIChUUExfQ0FMTEJBQ0spOw0KPj4gDQo+PiBAQCAtNTQyLDggKzU0MCw2IEBAIFVk ZkNsb3NlICgNCj4+IA0KPj4gICAgUHJpdkZpbGVEYXRhID0gUFJJVkFURV9VREZfRklMRV9EQVRB X0ZST01fVEhJUyAoVGhpcyk7DQo+PiANCj4+IC0gIFByaXZGc0RhdGEgPSBQUklWQVRFX1VERl9T SU1QTEVfRlNfREFUQV9GUk9NX1RISVMgKFByaXZGaWxlRGF0YS0NCj4+ID5TaW1wbGVGcyk7DQo+ PiAtDQo+PiAgICBpZiAoIVByaXZGaWxlRGF0YS0+SXNSb290RGlyZWN0b3J5KSB7DQo+PiAgICAg IENsZWFudXBGaWxlSW5mb3JtYXRpb24gKCZQcml2RmlsZURhdGEtPkZpbGUpOw0KPj4gDQo+PiBA QCAtNTUyLDEwICs1NDgsNiBAQCBVZGZDbG9zZSAoDQo+PiAgICAgIH0NCj4+ICAgIH0NCj4+IA0K Pj4gLSAgaWYgKC0tUHJpdkZzRGF0YS0+T3BlbkZpbGVzID09IDApIHsNCj4+IC0gICAgQ2xlYW51 cFZvbHVtZUluZm9ybWF0aW9uICgmUHJpdkZzRGF0YS0+Vm9sdW1lKTsNCj4+IC0gIH0NCj4+IC0N Cj4+ICAgIEZyZWVQb29sICgoVk9JRCAqKVByaXZGaWxlRGF0YSk7DQo+PiANCj4+ICBFeGl0Og0K Pj4gQEAgLTY1Miw3ICs2NDQsNyBAQCBVZGZHZXRQb3NpdGlvbiAoDQo+PiAgICAvLyBBcyBwZXIg VUVGSSBzcGVjLCBpZiB0aGUgZmlsZSBoYW5kbGUgaXMgYSBkaXJlY3RvcnksIHRoZW4gdGhlDQo+ Y3VycmVudCBmaWxlDQo+PiAgICAvLyBwb3NpdGlvbiBoYXMgbm8gbWVhbmluZyBhbmQgdGhlIG9w ZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLg0KPj4gICAgLy8NCj4+IC0gIGlmIChJU19GSURfRElS RUNUT1JZX0ZJTEUNCj4oJlByaXZGaWxlRGF0YS0+RmlsZS5GaWxlSWRlbnRpZmllckRlc2MpKSB7 DQo+PiArICBpZiAoSVNfRklEX0RJUkVDVE9SWV9GSUxFIChQcml2RmlsZURhdGEtPkZpbGUuRmls ZUlkZW50aWZpZXJEZXNjKSkNCj57DQo+PiAgICAgIHJldHVybiAgRUZJX1VOU1VQUE9SVEVEOw0K Pj4gICAgfQ0KPj4gDQo+PiBAQCAtNzg4LDcgKzc4MCw3IEBAIFVkZkdldEluZm8gKA0KPj4gICAg fSBlbHNlIGlmIChDb21wYXJlR3VpZCAoSW5mb3JtYXRpb25UeXBlLCAmZ0VmaUZpbGVTeXN0ZW1J bmZvR3VpZCkpDQo+ew0KPj4gICAgICBTdHJpbmcgPSBWb2x1bWVMYWJlbDsNCj4+IA0KPj4gLSAg ICBGaWxlU2V0RGVzYyA9IFByaXZGc0RhdGEtPlZvbHVtZS5GaWxlU2V0RGVzY3NbMF07DQo+PiAr ICAgIEZpbGVTZXREZXNjID0gJlByaXZGc0RhdGEtPlZvbHVtZS5GaWxlU2V0RGVzYzsNCj4+IA0K Pj4gICAgICBPc3RhQ29tcHJlc3NlZCA9ICZGaWxlU2V0RGVzYy0+TG9naWNhbFZvbHVtZUlkZW50 aWZpZXJbMF07DQo+PiANCj4+IEBAIC04NDcsNyArODM5LDcgQEAgVWRmR2V0SW5mbyAoDQo+PiAg ICAgIEZpbGVTeXN0ZW1JbmZvLT5TaXplICAgICAgICA9IEZpbGVTeXN0ZW1JbmZvTGVuZ3RoOw0K Pj4gICAgICBGaWxlU3lzdGVtSW5mby0+UmVhZE9ubHkgICAgPSBUUlVFOw0KPj4gICAgICBGaWxl U3lzdGVtSW5mby0+QmxvY2tTaXplICAgPQ0KPj4gLSAgICAgIExWX0JMT0NLX1NJWkUgKCZQcml2 RnNEYXRhLT5Wb2x1bWUsIFVERl9ERUZBVUxUX0xWX05VTSk7DQo+PiArICAgICAgUHJpdkZzRGF0 YS0+Vm9sdW1lLkxvZ2ljYWxWb2xEZXNjLkxvZ2ljYWxCbG9ja1NpemU7DQo+PiAgICAgIEZpbGVT eXN0ZW1JbmZvLT5Wb2x1bWVTaXplICA9IFZvbHVtZVNpemU7DQo+PiAgICAgIEZpbGVTeXN0ZW1J bmZvLT5GcmVlU3BhY2UgICA9IEZyZWVTcGFjZVNpemU7DQo+PiANCj4+IGRpZmYgLS1naXQNCj5h L01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvRGlzay9VZGZEeGUvRmlsZVN5c3RlbU9wZXJhdGlvbnMu Yw0KPj4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0Rpc2svVWRmRHhlL0ZpbGVTeXN0ZW1PcGVy YXRpb25zLmMNCj4+IGluZGV4IDVkZjI2Nzc2MWYuLjYyZDgxNzk4OWYgMTAwNjQ0DQo+PiAtLS0g YS9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0Rpc2svVWRmRHhlL0ZpbGVTeXN0ZW1PcGVyYXRpb25z LmMNCj4+ICsrKyBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvRGlzay9VZGZEeGUvRmlsZVN5c3Rl bU9wZXJhdGlvbnMuYw0KPj4gQEAgLTM4LDExICszOCwxMiBAQCBGaW5kQW5jaG9yVm9sdW1lRGVz Y3JpcHRvclBvaW50ZXIgKA0KPj4gICAgT1VUICBVREZfQU5DSE9SX1ZPTFVNRV9ERVNDUklQVE9S X1BPSU5URVIgICpBbmNob3JQb2ludA0KPj4gICAgKQ0KPj4gIHsNCj4+IC0gIEVGSV9TVEFUVVMg IFN0YXR1czsNCj4+IC0gIFVJTlQzMiAgICAgIEJsb2NrU2l6ZTsNCj4+IC0gIEVGSV9MQkEgICAg IEVuZExCQTsNCj4+IC0gIEVGSV9MQkEgICAgIERlc2NyaXB0b3JMQkFzWzRdOw0KPj4gLSAgVUlO VE4gICAgICAgSW5kZXg7DQo+PiArICBFRklfU1RBVFVTICAgICAgICAgIFN0YXR1czsNCj4+ICsg IFVJTlQzMiAgICAgICAgICAgICAgQmxvY2tTaXplOw0KPj4gKyAgRUZJX0xCQSAgICAgICAgICAg ICBFbmRMQkE7DQo+PiArICBFRklfTEJBICAgICAgICAgICAgIERlc2NyaXB0b3JMQkFzWzRdOw0K Pj4gKyAgVUlOVE4gICAgICAgICAgICAgICBJbmRleDsNCj4+ICsgIFVERl9ERVNDUklQVE9SX1RB RyAgKkRlc2NyaXB0b3JUYWc7DQo+PiANCj4+ICAgIEJsb2NrU2l6ZSA9IEJsb2NrSW8tPk1lZGlh LT5CbG9ja1NpemU7DQo+PiAgICBFbmRMQkEgPSBCbG9ja0lvLT5NZWRpYS0+TGFzdEJsb2NrOyBA QCAtNjIsMTAgKzYzLDEzIEBAIA0KPj4gRmluZEFuY2hvclZvbHVtZURlc2NyaXB0b3JQb2ludGVy ICgNCj4+ICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4gICAgICAgIHJldHVybiBT dGF0dXM7DQo+PiAgICAgIH0NCj4+ICsNCj4+ICsgICAgRGVzY3JpcHRvclRhZyA9ICZBbmNob3JQ b2ludC0+RGVzY3JpcHRvclRhZzsNCj4+ICsNCj4+ICAgICAgLy8NCj4+ICAgICAgLy8gQ2hlY2sg aWYgcmVhZCBMQkEgaGFzIGEgdmFsaWQgQVZEUCBkZXNjcmlwdG9yLg0KPj4gICAgICAvLw0KPj4g LSAgICBpZiAoSVNfQVZEUCAoQW5jaG9yUG9pbnQpKSB7DQo+PiArICAgIGlmIChEZXNjcmlwdG9y VGFnLT5UYWdJZGVudGlmaWVyID09DQo+VWRmQW5jaG9yVm9sdW1lRGVzY3JpcHRvclBvaW50ZXIp IHsNCj4+ICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+PiAgICAgIH0NCj4+ICAgIH0NCj4+ IEBAIC05OSwxNDggKzEwMyw5OCBAQCBTdGFydE1haW5Wb2x1bWVEZXNjcmlwdG9yU2VxdWVuY2Ug KA0KPj4gICAgT1VUICBVREZfVk9MVU1FX0lORk8gICAgICAgICAgICAgICAgICAgICAgICpWb2x1 bWUNCj4+ICAgICkNCj4+ICB7DQo+PiAtICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAg U3RhdHVzOw0KPj4gLSAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIEJsb2NrU2l6ZTsN Cj4+IC0gIFVERl9FWFRFTlRfQUQgICAgICAgICAgICAgICAgICAqRXh0ZW50QWQ7DQo+PiAtICBV SU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRpbmdMc247DQo+PiAtICBVSU5UNjQg ICAgICAgICAgICAgICAgICAgICAgICAgRW5kaW5nTHNuOw0KPj4gLSAgVk9JRCAgICAgICAgICAg ICAgICAgICAgICAgICAgICpCdWZmZXI7DQo+PiAtICBVREZfTE9HSUNBTF9WT0xVTUVfREVTQ1JJ UFRPUiAgKkxvZ2ljYWxWb2xEZXNjOw0KPj4gLSAgVURGX1BBUlRJVElPTl9ERVNDUklQVE9SICAg ICAgICpQYXJ0aXRpb25EZXNjOw0KPj4gLSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAg IEluZGV4Ow0KPj4gLSAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIExvZ2ljYWxCbG9j a1NpemU7DQo+PiArICBFRklfU1RBVFVTICAgICAgICAgICAgU3RhdHVzOw0KPj4gKyAgVUlOVDMy ICAgICAgICAgICAgICAgIEJsb2NrU2l6ZTsNCj4+ICsgIFVERl9FWFRFTlRfQUQgICAgICAgICAq RXh0ZW50QWQ7DQo+PiArICBFRklfTEJBICAgICAgICAgICAgICAgU2VxU3RhcnRCbG9jazsNCj4+ ICsgIEVGSV9MQkEgICAgICAgICAgICAgICBTZXFFbmRCbG9jazsNCj4+ICsgIEJPT0xFQU4gICAg ICAgICAgICAgICBTdG9wU2VxdWVuY2U7DQo+PiArICBWT0lEICAgICAgICAgICAgICAgICAgKkJ1 ZmZlcjsNCj4+ICsgIFVERl9ERVNDUklQVE9SX1RBRyAgICAqRGVzY3JpcHRvclRhZzsNCj4+ICsg IFVJTlQzMiAgICAgICAgICAgICAgICBMb2dpY2FsQmxvY2tTaXplOw0KPj4gKw0KPj4gKyAgQmxv Y2tTaXplID0gQmxvY2tJby0+TWVkaWEtPkJsb2NrU2l6ZTsgIEV4dGVudEFkID0gDQo+PiArICZB bmNob3JQb2ludC0+TWFpblZvbHVtZURlc2NyaXB0b3JTZXF1ZW5jZUV4dGVudDsNCj4+IA0KPj4g ICAgLy8NCj4+IC0gIC8vIFdlJ3ZlIGFscmVhZHkgZm91bmQgYW4gQURWUCBvbiB0aGUgdm9sdW1l LiBJdCBjb250YWlucyB0aGUNCj5leHRlbnQNCj4+IC0gIC8vIChNYWluVm9sdW1lRGVzY3JpcHRv clNlcXVlbmNlRXh0ZW50KSB3aGVyZSB0aGUgTWFpbiBWb2x1bWUgDQo+PiBEZXNjcmlwdG9yDQo+ PiAtICAvLyBTZXF1ZW5jZSBzdGFydHMuIFRoZXJlZm9yZSwgd2UnbGwgbG9vayBmb3IgTG9naWNh bCBWb2x1bWUNCj5EZXNjcmlwdG9ycyBhbmQNCj4+IC0gIC8vIFBhcnRpdGlvbnMgRGVzY3JpcHRv cnMgYW5kIHNhdmUgdGhlbSBpbiBtZW1vcnksIGFjY29yZGluZ2x5Lg0KPj4gLSAgLy8NCj4+IC0g IC8vIE5vdGUgYWxzbyB0aGF0IGVhY2ggZGVzY3JpcHRvciB3aWxsIGJlIGFsaWduZWQgb24gYSBi bG9jayBzaXplDQo+KEJsb2NrU2l6ZSkNCj4+IC0gIC8vIGJvdW5kYXJ5LCBzbyB3ZSBuZWVkIHRv IHJlYWQgb25lIGJsb2NrIGF0IGEgdGltZS4NCj4+ICsgIC8vIEFsbG9jYXRlIGJ1ZmZlciBmb3Ig cmVhZGluZyBkaXNrIGJsb2Nrcw0KPj4gICAgLy8NCj4+IC0gIEJsb2NrU2l6ZSAgICA9IEJsb2Nr SW8tPk1lZGlhLT5CbG9ja1NpemU7DQo+PiAtICBFeHRlbnRBZCAgICAgPSAmQW5jaG9yUG9pbnQt Pk1haW5Wb2x1bWVEZXNjcmlwdG9yU2VxdWVuY2VFeHRlbnQ7DQo+PiAtICBTdGFydGluZ0xzbiAg PSAoVUlOVDY0KUV4dGVudEFkLT5FeHRlbnRMb2NhdGlvbjsNCj4+IC0gIEVuZGluZ0xzbiAgICA9 IFN0YXJ0aW5nTHNuICsgRGl2VTY0eDMyICgNCj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKFVJTlQ2NClFeHRlbnRBZC0+RXh0ZW50TGVuZ3RoLA0KPj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja1NpemUNCj4+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4+IC0NCj4+IC0gIFZvbHVtZS0+TG9naWNhbFZv bERlc2NzID0NCj4+IC0gICAgKFVERl9MT0dJQ0FMX1ZPTFVNRV9ERVNDUklQVE9SICoqKUFsbG9j YXRlWmVyb1Bvb2wgKEV4dGVudEFkLQ0KPj4gPkV4dGVudExlbmd0aCk7DQo+PiAtICBpZiAoVm9s dW1lLT5Mb2dpY2FsVm9sRGVzY3MgPT0gTlVMTCkgew0KPj4gLSAgICByZXR1cm4gRUZJX09VVF9P Rl9SRVNPVVJDRVM7DQo+PiAtICB9DQo+PiAtDQo+PiAtICBWb2x1bWUtPlBhcnRpdGlvbkRlc2Nz ID0NCj4+IC0gICAgKFVERl9QQVJUSVRJT05fREVTQ1JJUFRPUiAqKilBbGxvY2F0ZVplcm9Qb29s IChFeHRlbnRBZC0NCj4+ID5FeHRlbnRMZW5ndGgpOw0KPj4gLSAgaWYgKFZvbHVtZS0+UGFydGl0 aW9uRGVzY3MgPT0gTlVMTCkgew0KPj4gLSAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNF UzsNCj4+IC0gICAgZ290byBFcnJvcl9BbGxvY19QZHM7DQo+PiAtICB9DQo+PiAtDQo+PiAtICBC dWZmZXIgPSBBbGxvY2F0ZVplcm9Qb29sIChCbG9ja1NpemUpOw0KPj4gKyAgQnVmZmVyID0gQWxs b2NhdGVaZXJvUG9vbCAoKFVJTlROKUJsb2NrU2l6ZSk7DQo+PiAgICBpZiAoQnVmZmVyID09IE5V TEwpIHsNCj4+IC0gICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+PiAtICAgIGdv dG8gRXJyb3JfQWxsb2NfQnVmOw0KPj4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7 DQo+PiAgICB9DQo+PiANCj4+IC0gIFZvbHVtZS0+TG9naWNhbFZvbERlc2NzTm8gID0gMDsNCj4+ IC0gIFZvbHVtZS0+UGFydGl0aW9uRGVzY3NObyAgID0gMDsNCj4+IC0NCj4+IC0gIHdoaWxlIChT dGFydGluZ0xzbiA8PSBFbmRpbmdMc24pIHsNCj4+IC0gICAgU3RhdHVzID0gRGlza0lvLT5SZWFk RGlzayAoDQo+PiAtICAgICAgRGlza0lvLA0KPj4gKyAgLy8NCj4+ICsgIC8vIFRoZSBsb2dpY2Fs IHBhcnRpdGlvbiBjcmVhdGVkIGJ5IFBhcnRpdGlvbiBkcml2ZXIgaXMgcmVsYXRpdmUNCj50byB0 aGUgbWFpbg0KPj4gKyAgLy8gVkRTIGV4dGVudCBsb2NhdGlvbiwgc28gd2Ugc3RhcnQgdGhlIE1h aW4gVm9sdW1lIERlc2NyaXB0b3INCj5TZXF1ZW5jZSBhdA0KPj4gKyAgLy8gTEJBIDAuDQo+PiAr ICAvLw0KPj4gKyAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjaGVjayBhZ2FpbiBpZiB3ZSBoYXZlIHZh bGlkIFZvbHVtZQ0KPkRlc2NyaXB0b3JzIGhlcmUNCj4+IHNpbmNlDQo+PiArICAvLyBQYXJ0aXRp b24gZHJpdmVyIGFscmVhZHkgZGlkLg0KPj4gKyAgLy8NCj4+ICsgIFNlcVN0YXJ0QmxvY2sgPSAw Ow0KPj4gKyAgU2VxRW5kQmxvY2sgPSBTZXFTdGFydEJsb2NrICsgRGl2VTY0eDMyDQo+KChVSU5U NjQpRXh0ZW50QWQtPkV4dGVudExlbmd0aCwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQmxvY2tTaXplKTsgIFN0b3BTZXF1ZW5jZSANCj4+ICsgPSBGQUxT RTsgIGZvciAoOyBTZXFTdGFydEJsb2NrIDwgU2VxRW5kQmxvY2sgJiYgIVN0b3BTZXF1ZW5jZTsN Cj5TZXFTdGFydEJsb2NrKyspIHsNCj4+ICsgICAgLy8NCj4+ICsgICAgLy8gUmVhZCBkaXNrIGJs b2NrDQo+PiArICAgIC8vDQo+PiArICAgIFN0YXR1cyA9IEJsb2NrSW8tPlJlYWRCbG9ja3MgKA0K Pj4gKyAgICAgIEJsb2NrSW8sDQo+PiAgICAgICAgQmxvY2tJby0+TWVkaWEtPk1lZGlhSWQsDQo+ PiAtICAgICAgTXVsdFU2NHgzMiAoU3RhcnRpbmdMc24sIEJsb2NrU2l6ZSksDQo+PiArICAgICAg U2VxU3RhcnRCbG9jaywNCj4+ICAgICAgICBCbG9ja1NpemUsDQo+PiAgICAgICAgQnVmZmVyDQo+ PiAgICAgICAgKTsNCj4+ICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4gLSAgICAg IGdvdG8gRXJyb3JfUmVhZF9EaXNrX0JsazsNCj4+ICsgICAgICBnb3RvIE91dF9GcmVlOw0KPj4g ICAgICB9DQo+PiANCj4+IC0gICAgaWYgKElTX1REIChCdWZmZXIpKSB7DQo+PiArICAgIERlc2Ny aXB0b3JUYWcgPSBCdWZmZXI7DQo+PiArDQo+PiArICAgIHN3aXRjaCAoVURGX1RBR19JRCAoRGVz Y3JpcHRvclRhZykpIHsNCj4+ICsgICAgY2FzZSBVZGZQYXJ0aXRpb25EZXNjcmlwdG9yOg0KPj4g ICAgICAgIC8vDQo+PiAtICAgICAgLy8gRm91bmQgYSBUZXJtaW5hdGluZyBEZXNjcmlwdG9yLiBT dG9wIHRoZSBzZXF1ZW5jZSB0aGVuLg0KPj4gKyAgICAgIC8vIFNhdmUgUGFydGl0aW9uIERlc2Ny aXB0b3INCj4+ICAgICAgICAvLw0KPj4gKyAgICAgIENvcHlNZW0gKCZWb2x1bWUtPlBhcnRpdGlv bkRlc2MsIEJ1ZmZlciwgc2l6ZW9mIChWb2x1bWUtDQo+PiA+UGFydGl0aW9uRGVzYykpOw0KPj4g ICAgICAgIGJyZWFrOw0KPj4gLSAgICB9DQo+PiANCj4+IC0gICAgaWYgKElTX0xWRCAoQnVmZmVy KSkgew0KPj4gKyAgICBjYXNlIFVkZkxvZ2ljYWxWb2x1bWVEZXNjcmlwdG9yOg0KPj4gICAgICAg IC8vDQo+PiAtICAgICAgLy8gRm91bmQgYSBMb2dpY2FsIFZvbHVtZSBEZXNjcmlwdG9yLg0KPj4g KyAgICAgIC8vIFNhdmUgTG9naWNhbCBWb2x1bWUgRGVzY3JpcHRvcg0KPj4gICAgICAgIC8vDQo+ PiAtICAgICAgTG9naWNhbFZvbERlc2MgPQ0KPj4gLSAgICAgICAgKFVERl9MT0dJQ0FMX1ZPTFVN RV9ERVNDUklQVE9SICopDQo+PiAtICAgICAgICBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YgKFVE Rl9MT0dJQ0FMX1ZPTFVNRV9ERVNDUklQVE9SKSk7DQo+PiAtICAgICAgaWYgKExvZ2ljYWxWb2xE ZXNjID09IE5VTEwpIHsNCj4+IC0gICAgICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VT Ow0KPj4gLSAgICAgICAgZ290byBFcnJvcl9BbGxvY19MdmQ7DQo+PiAtICAgICAgfQ0KPj4gKyAg ICAgIENvcHlNZW0gKCZWb2x1bWUtPkxvZ2ljYWxWb2xEZXNjLCBCdWZmZXIsIHNpemVvZiAoVm9s dW1lLQ0KPj4gPkxvZ2ljYWxWb2xEZXNjKSk7DQo+PiArICAgICAgYnJlYWs7DQo+PiANCj4+IC0g ICAgICBDb3B5TWVtICgoVk9JRCAqKUxvZ2ljYWxWb2xEZXNjLCBCdWZmZXIsDQo+PiAtICAgICAg ICAgICAgICAgc2l6ZW9mIChVREZfTE9HSUNBTF9WT0xVTUVfREVTQ1JJUFRPUikpOw0KPj4gLSAg ICAgIFZvbHVtZS0+TG9naWNhbFZvbERlc2NzW1ZvbHVtZS0+TG9naWNhbFZvbERlc2NzTm8rK10g PQ0KPj4gTG9naWNhbFZvbERlc2M7DQo+PiAtICAgIH0gZWxzZSBpZiAoSVNfUEQgKEJ1ZmZlcikp IHsNCj4+IC0gICAgICAvLw0KPj4gLSAgICAgIC8vIEZvdW5kIGEgUGFydGl0aW9uIERlc2NyaXB0 b3IuDQo+PiAtICAgICAgLy8NCj4+IC0gICAgICBQYXJ0aXRpb25EZXNjID0NCj4+IC0gICAgICAg IChVREZfUEFSVElUSU9OX0RFU0NSSVBUT1IgKikNCj4+IC0gICAgICAgIEFsbG9jYXRlWmVyb1Bv b2wgKHNpemVvZiAoVURGX1BBUlRJVElPTl9ERVNDUklQVE9SKSk7DQo+PiAtICAgICAgaWYgKFBh cnRpdGlvbkRlc2MgPT0gTlVMTCkgew0KPj4gLSAgICAgICAgU3RhdHVzID0gRUZJX09VVF9PRl9S RVNPVVJDRVM7DQo+PiAtICAgICAgICBnb3RvIEVycm9yX0FsbG9jX1BkOw0KPj4gLSAgICAgIH0N Cj4+ICsgICAgY2FzZSBVZGZUZXJtaW5hdGluZ0Rlc2NyaXB0b3I6DQo+PiArICAgICAgU3RvcFNl cXVlbmNlID0gVFJVRTsNCj4+ICsgICAgICBicmVhazsNCj4+IA0KPj4gLSAgICAgIENvcHlNZW0g KChWT0lEICopUGFydGl0aW9uRGVzYywgQnVmZmVyLA0KPj4gLSAgICAgICAgICAgICAgIHNpemVv ZiAoVURGX1BBUlRJVElPTl9ERVNDUklQVE9SKSk7DQo+PiAtICAgICAgVm9sdW1lLT5QYXJ0aXRp b25EZXNjc1tWb2x1bWUtPlBhcnRpdGlvbkRlc2NzTm8rK10gPQ0KPlBhcnRpdGlvbkRlc2M7DQo+ PiArICAgIGRlZmF1bHQ6DQo+PiArICAgICAgOw0KPj4gICAgICB9DQo+PiAtDQo+PiAtICAgIFN0 YXJ0aW5nTHNuKys7DQo+PiAgICB9DQo+PiANCj4+ICAgIC8vDQo+PiAtICAvLyBXaGVuIGFuIFVE RiB2b2x1bWUgKHJldmlzaW9uIDIuMDAgb3IgaGlnaGVyKSBjb250YWlucyBhIEZpbGUNCj5FbnRy eSByYXRoZXINCj4+IC0gIC8vIHRoYW4gYW4gRXh0ZW5kZWQgRmlsZSBFbnRyeSAod2hpY2ggaXMg bm90IHJlY29tbWVuZGVkIGFzIHBlcg0KPnNwZWMpLCB3ZQ0KPj4gbmVlZA0KPj4gLSAgLy8gdG8g bWFrZSBzdXJlIHRoZSBzaXplIG9mIGEgRkUgd2lsbCBiZSBfYXQgbGVhc3RfIDIwNDgNCj4+IC0g IC8vIChVREZfTE9HSUNBTF9TRUNUT1JfU0laRSkgYnl0ZXMgbG9uZyB0byBrZWVwIGJhY2t3YXJk DQo+Y29tcGF0aWJpbGl0eS4NCj4+ICsgIC8vIERldGVybWluZSBGRSAoRmlsZSBFbnRyeSkgc2l6 ZQ0KPj4gICAgLy8NCj4+IC0gIExvZ2ljYWxCbG9ja1NpemUgPSBMVl9CTE9DS19TSVpFIChWb2x1 bWUsIFVERl9ERUZBVUxUX0xWX05VTSk7DQo+PiArICBMb2dpY2FsQmxvY2tTaXplID0gVm9sdW1l LT5Mb2dpY2FsVm9sRGVzYy5Mb2dpY2FsQmxvY2tTaXplOw0KPj4gICAgaWYgKExvZ2ljYWxCbG9j a1NpemUgPj0gVURGX0xPR0lDQUxfU0VDVE9SX1NJWkUpIHsNCj4+IC0gICAgVm9sdW1lLT5GaWxl RW50cnlTaXplID0gTG9naWNhbEJsb2NrU2l6ZTsNCj4+ICsgICAgVm9sdW1lLT5GaWxlRW50cnlT aXplID0gKFVJTlROKUxvZ2ljYWxCbG9ja1NpemU7DQo+PiAgICB9IGVsc2Ugew0KPj4gICAgICBW b2x1bWUtPkZpbGVFbnRyeVNpemUgPSBVREZfTE9HSUNBTF9TRUNUT1JfU0laRTsNCj4+ICAgIH0N Cj4+IA0KPj4gLSAgRnJlZVBvb2wgKEJ1ZmZlcik7DQo+PiArICBTdGF0dXMgPSBFRklfU1VDQ0VT UzsNCj4+IA0KPj4gLSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPj4gLQ0KPj4gLUVycm9yX0FsbG9j X1BkOg0KPj4gLUVycm9yX0FsbG9jX0x2ZDoNCj4+IC0gIGZvciAoSW5kZXggPSAwOyBJbmRleCA8 IFZvbHVtZS0+UGFydGl0aW9uRGVzY3NObzsgSW5kZXgrKykgew0KPj4gLSAgICBGcmVlUG9vbCAo KFZPSUQgKilWb2x1bWUtPlBhcnRpdGlvbkRlc2NzW0luZGV4XSk7DQo+PiAtICB9DQo+PiAtDQo+ PiAtICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBWb2x1bWUtPkxvZ2ljYWxWb2xEZXNjc05vOyBJ bmRleCsrKSB7DQo+PiAtICAgIEZyZWVQb29sICgoVk9JRCAqKVZvbHVtZS0+TG9naWNhbFZvbERl c2NzW0luZGV4XSk7DQo+PiAtICB9DQo+PiAtDQo+PiAtRXJyb3JfUmVhZF9EaXNrX0JsazoNCj4+ ICtPdXRfRnJlZToNCj4+ICsgIC8vDQo+PiArICAvLyBGcmVlIGJsb2NrIHJlYWQgYnVmZmVyDQo+ PiArICAvLw0KPj4gICAgRnJlZVBvb2wgKEJ1ZmZlcik7DQo+PiANCj4+IC1FcnJvcl9BbGxvY19C dWY6DQo+PiAtICBGcmVlUG9vbCAoKFZPSUQgKilWb2x1bWUtPlBhcnRpdGlvbkRlc2NzKTsNCj4+ IC0gIFZvbHVtZS0+UGFydGl0aW9uRGVzY3MgPSBOVUxMOw0KPj4gLQ0KPj4gLUVycm9yX0FsbG9j X1BkczoNCj4+IC0gIEZyZWVQb29sICgoVk9JRCAqKVZvbHVtZS0+TG9naWNhbFZvbERlc2NzKTsN Cj4+IC0gIFZvbHVtZS0+TG9naWNhbFZvbERlc2NzID0gTlVMTDsNCj4+IC0NCj4+ICAgIHJldHVy biBTdGF0dXM7DQo+PiAgfQ0KPj4gDQo+PiBAQCAtMjYyLDQ4ICsyMTYsNTMgQEAgR2V0UGRGcm9t TG9uZ0FkICgNCj4+ICAgICkNCj4+ICB7DQo+PiAgICBVREZfTE9HSUNBTF9WT0xVTUVfREVTQ1JJ UFRPUiAgKkxvZ2ljYWxWb2xEZXNjOw0KPj4gLSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgIEluZGV4Ow0KPj4gLSAgVURGX1BBUlRJVElPTl9ERVNDUklQVE9SICAgICAgICpQYXJ0aXRp b25EZXNjOw0KPj4gICAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICAgIFBhcnRpdGlvbk51 bTsNCj4+IA0KPj4gLSAgTG9naWNhbFZvbERlc2MgPSBWb2x1bWUtPkxvZ2ljYWxWb2xEZXNjc1tV REZfREVGQVVMVF9MVl9OVU1dOw0KPj4gKyAgTG9naWNhbFZvbERlc2MgPSAmVm9sdW1lLT5Mb2dp Y2FsVm9sRGVzYzsNCj4+IA0KPj4gLSAgc3dpdGNoIChMVl9VREZfUkVWSVNJT04gKExvZ2ljYWxW b2xEZXNjKSkgew0KPj4gKyAgc3dpdGNoIChVREZfTFZEX1JFVklTSU9OIChMb2dpY2FsVm9sRGVz YykpIHsNCj4+ICAgIGNhc2UgMHgwMTAyOg0KPj4gKyAgY2FzZSAweDAxNTA6DQo+PiArICBjYXNl IDB4MDIwMDoNCj4+ICsgIGNhc2UgMHgwMjAxOg0KPj4gKyAgY2FzZSAweDAyNTA6DQo+PiArICBj YXNlIDB4MDI2MDoNCj4+ICAgICAgLy8NCj4+IC0gICAgLy8gQXMgcGVyIFVERiAxLjAyIHNwZWNp ZmljYXRpb246DQo+PiArICAgIC8vIFVERiAxLjAyIHNwZWNpZmljYXRpb246DQo+PiAgICAgIC8v DQo+PiAgICAgIC8vIFRoZXJlIHNoYWxsIGJlIGV4YWN0bHkgb25lIHByZXZhaWxpbmcgTG9naWNh bCBWb2x1bWUNCj5EZXNjcmlwdG9yIHJlY29yZGVkDQo+PiAgICAgIC8vIHBlciBWb2x1bWUgU2V0 LiBUaGUgUGFydGl0aW9uIE1hcHMgZmllbGQgc2hhbGwgY29udGFpbiBvbmx5DQo+VHlwZSAxDQo+ PiAgICAgIC8vIFBhcnRpdGlvbiBNYXBzLg0KPj4gICAgICAvLw0KPj4gLSAgICBQYXJ0aXRpb25O dW0gPSAqKFVJTlQxNg0KPiopKChVSU5UTikmTG9naWNhbFZvbERlc2MtPlBhcnRpdGlvbk1hcHNb NF0pOw0KPj4gLSAgICBicmVhazsNCj4+IC0gIGNhc2UgMHgwMTUwOg0KPj4gKyAgICAvLyBVREYg MS41MCB0aHJvdWdoIDIuNjAgc3BlY3Mgc2F5Og0KPj4gICAgICAvLw0KPj4gLSAgICAvLyBFbnN1 cmUgVHlwZSAxIFBhcnRpdGlvbiBtYXAuIE90aGVyIHR5cGVzIGFyZW4ndCBzdXBwb3J0ZWQgaW4N Cj50aGlzDQo+PiAtICAgIC8vIGltcGxlbWVudGF0aW9uLg0KPj4gKyAgICAvLyBGb3IgdGhlIHB1 cnBvc2Ugb2YgaW50ZXJjaGFuZ2UgcGFydGl0aW9uIG1hcHMgc2hhbGwgYmUNCj5saW1pdGVkIHRv DQo+PiArICAgIC8vIFBhcnRpdGlvbiBNYXAgdHlwZSAxLCBleGNlcHQgdHlwZSAyIG1hcHMgYXMg ZGVzY3JpYmVkIGluIHRoZQ0KPmRvY3VtZW50Lg0KPj4gKyAgICAvLw0KPj4gKyAgICAvLyBOT1RF OiBPbmx5IG9uZSBUeXBlIDEgKFBoeXNpY2FsKSBQYXJ0aXRpb24gaXMgc3VwcG9ydGVkLiBJdA0K PmhhcyBiZWVuDQo+PiArICAgIC8vIGNoZWNrZWQgYWxyZWFkeSBpbiBQYXJ0aXRpb24gZHJpdmVy IGZvciBleGlzdGVuY2Ugb2YgYSBzaW5nbGUNCj5UeXBlIDENCj4+ICsgICAgLy8gUGFydGl0aW9u IG1hcCwgc28gd2UgZG9uJ3QgaGF2ZSB0byBkb3VibGUgY2hlY2sgaGVyZS4NCj4+ICsgICAgLy8N Cj4+ICsgICAgLy8gUGFydGl0aW9uIHJlZmVyZW5jZSBudW1iZXIgY2FuIGFsc28gYmUgcmV0cmll dmVkIGZyb20NCj4+ICsgICAgLy8gTG9uZ0FkLT5FeHRlbnRMb2NhdGlvbi5QYXJ0aXRpb25SZWZl cmVuY2VOdW1iZXIsIGhvd2V2ZXIgdGhlDQo+c3BlYw0KPj4gc2F5cw0KPj4gKyAgICAvLyBpdCBt YXkgYmUgMCwgc28gbGV0J3Mgbm90IHJlbHkgb24gaXQuDQo+PiAgICAgIC8vDQo+PiAtICAgIGlm IChMb2dpY2FsVm9sRGVzYy0+UGFydGl0aW9uTWFwc1swXSAhPSAxIHx8DQo+PiAtICAgICAgICBM b2dpY2FsVm9sRGVzYy0+UGFydGl0aW9uTWFwc1sxXSAhPSA2KSB7DQo+PiAtICAgICAgcmV0dXJu IE5VTEw7DQo+PiAtICAgIH0NCj4+ICAgICAgUGFydGl0aW9uTnVtID0gKihVSU5UMTYNCj4qKSgo VUlOVE4pJkxvZ2ljYWxWb2xEZXNjLT5QYXJ0aXRpb25NYXBzWzRdKTsNCj4+ICAgICAgYnJlYWs7 DQo+PiAtICBjYXNlIDB4MDI2MDoNCj4+ICsNCj4+ICsgIGRlZmF1bHQ6DQo+PiAgICAgIC8vDQo+ PiAtICAgIC8vIEZhbGwgdGhyb3VnaC4NCj4+ICsgICAgLy8gVW5zdXBwb3J0ZWQgVURGIHJldmlz aW9uDQo+PiAgICAgIC8vDQo+PiAtICBkZWZhdWx0Og0KPj4gLSAgICBQYXJ0aXRpb25OdW0gPSBM b25nQWQtPkV4dGVudExvY2F0aW9uLlBhcnRpdGlvblJlZmVyZW5jZU51bWJlcjsNCj4+IC0gICAg YnJlYWs7DQo+PiArICAgIHJldHVybiBOVUxMOw0KPj4gICAgfQ0KPj4gDQo+PiAtICBmb3IgKElu ZGV4ID0gMDsgSW5kZXggPCBWb2x1bWUtPlBhcnRpdGlvbkRlc2NzTm87IEluZGV4KyspIHsNCj4+ IC0gICAgUGFydGl0aW9uRGVzYyA9IFZvbHVtZS0+UGFydGl0aW9uRGVzY3NbSW5kZXhdOw0KPj4g LSAgICBpZiAoUGFydGl0aW9uRGVzYy0+UGFydGl0aW9uTnVtYmVyID09IFBhcnRpdGlvbk51bSkg ew0KPj4gLSAgICAgIHJldHVybiBQYXJ0aXRpb25EZXNjOw0KPj4gLSAgICB9DQo+PiArICAvLw0K Pj4gKyAgLy8gQ2hlY2sgaWYgcGFydGl0aW9uIG51bWJlciBtYXRjaGVzIFBhcnRpdGlvbiBEZXNj cmlwdG9yIGZvdW5kIGluDQo+TWFpbg0KPj4gVm9sdW1lDQo+PiArICAvLyBEZXNjcmlwdG9yIFNl cXVlbmNlLg0KPj4gKyAgLy8NCj4+ICsgIGlmIChWb2x1bWUtPlBhcnRpdGlvbkRlc2MuUGFydGl0 aW9uTnVtYmVyID09IFBhcnRpdGlvbk51bSkgew0KPj4gKyAgICByZXR1cm4gJlZvbHVtZS0+UGFy dGl0aW9uRGVzYzsNCj4+ICAgIH0NCj4+IA0KPj4gICAgcmV0dXJuIE5VTEw7DQo+PiBAQCAtMzI5 LDEzICsyODgsMTUgQEAgR2V0TG9uZ0FkTHNuICgNCj4+ICAgIFBhcnRpdGlvbkRlc2MgPSBHZXRQ ZEZyb21Mb25nQWQgKFZvbHVtZSwgTG9uZ0FkKTsNCj4+ICAgIEFTU0VSVCAoUGFydGl0aW9uRGVz YyAhPSBOVUxMKTsNCj4+IA0KPj4gLSAgcmV0dXJuIChVSU5UNjQpUGFydGl0aW9uRGVzYy0+UGFy dGl0aW9uU3RhcnRpbmdMb2NhdGlvbiArDQo+PiAtICAgICAgICAgICAgICAgICBMb25nQWQtPkV4 dGVudExvY2F0aW9uLkxvZ2ljYWxCbG9ja051bWJlcjsNCj4+ICsgIHJldHVybiAoVUlOVDY0KVBh cnRpdGlvbkRlc2MtPlBhcnRpdGlvblN0YXJ0aW5nTG9jYXRpb24gLQ0KPj4gKyAgICBWb2x1bWUt Pk1haW5WZHNTdGFydExvY2F0aW9uICsNCj4+ICsgICAgTG9uZ0FkLT5FeHRlbnRMb2NhdGlvbi5M b2dpY2FsQmxvY2tOdW1iZXI7DQo+PiAgfQ0KPj4gDQo+PiAgLyoqDQo+PiAgICBSZXR1cm4gbG9n aWNhbCBzZWN0b3IgbnVtYmVyIG9mIGEgZ2l2ZW4gU2hvcnQgQWxsb2NhdGlvbg0KPkRlc2NyaXB0 b3IuDQo+PiANCj4+ICsgIEBwYXJhbVtpbl0gIFZvbHVtZSAgICAgICAgICAgICAgVm9sdW1lIHBv aW50ZXIuDQo+PiAgICBAcGFyYW1baW5dICBQYXJ0aXRpb25EZXNjICAgICAgIFBhcnRpdGlvbiBE ZXNjcmlwdG9yIHBvaW50ZXIuDQo+PiAgICBAcGFyYW1baW5dICBTaG9ydEFkICAgICAgICAgICAg IFNob3J0IEFsbG9jYXRpb24gRGVzY3JpcHRvcg0KPnBvaW50ZXIuDQo+PiANCj4+IEBAIC0zNDQs MTQgKzMwNSwxMyBAQCBHZXRMb25nQWRMc24gKA0KPj4gICoqLw0KPj4gIFVJTlQ2NA0KPj4gIEdl dFNob3J0QWRMc24gKA0KPj4gKyAgSU4gVURGX1ZPTFVNRV9JTkZPICAgICAgICAgICAgICAgICAg KlZvbHVtZSwNCj4+ICAgIElOIFVERl9QQVJUSVRJT05fREVTQ1JJUFRPUiAgICAgICAgICpQYXJ0 aXRpb25EZXNjLA0KPj4gICAgSU4gVURGX1NIT1JUX0FMTE9DQVRJT05fREVTQ1JJUFRPUiAgKlNo b3J0QWQNCj4+ICAgICkNCj4+ICB7DQo+PiAtICBBU1NFUlQgKFBhcnRpdGlvbkRlc2MgIT0gTlVM TCk7DQo+PiAtDQo+PiAtICByZXR1cm4gKFVJTlQ2NClQYXJ0aXRpb25EZXNjLT5QYXJ0aXRpb25T dGFydGluZ0xvY2F0aW9uICsNCj4+IC0gICAgU2hvcnRBZC0+RXh0ZW50UG9zaXRpb247DQo+PiAr ICByZXR1cm4gKFVJTlQ2NClQYXJ0aXRpb25EZXNjLT5QYXJ0aXRpb25TdGFydGluZ0xvY2F0aW9u IC0NCj4+ICsgICAgVm9sdW1lLT5NYWluVmRzU3RhcnRMb2NhdGlvbiArIFNob3J0QWQtPkV4dGVu dFBvcw0KDQotLQ0KU2VudCBmcm9tIG15IEFuZHJvaWQgZGV2aWNlIHdpdGggSy05IE1haWwuIFBs ZWFzZSBleGN1c2UgbXkgYnJldml0eS4NCg==