From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id 1C7337803E1 for ; Thu, 9 Nov 2023 14:48:44 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=BEgr/2IFVgrslAl+Mqo31/Z8cC2tmvISXHtiwdNWu+A=; c=relaxed/simple; d=groups.io; h=Message-ID:Date:MIME-Version:User-Agent:Subject:To:CC:References:From:In-Reply-To:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Language:Content-Type:Content-Transfer-Encoding; s=20140610; t=1699541323; v=1; b=WRup5bLgnes+hM3ymjv4ryv0H1RBgYLrfdlHEGvr440U2rZsu+C4YCp5EZ28rTslUqJEeqxt ak7t5gzfdoCxWzjGKy++5uTaztqKOoREORMHUg0aldGBJLyL3ziRfIjs69r6fuPyWu7WOK6xBnF pBLajwpyiPaaKyO9wJy3v2RM= X-Received: by 127.0.0.2 with SMTP id 9TS4YY7687511xK1mTsaZA5D; Thu, 09 Nov 2023 06:48:43 -0800 X-Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) by mx.groups.io with SMTP id smtpd.web10.123046.1699541322845280177 for ; Thu, 09 Nov 2023 06:48:43 -0800 X-Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3A9DDjLl024613; Thu, 9 Nov 2023 14:48:27 GMT X-Received: from nasanppmta02.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3u8ehnjtpk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 09 Nov 2023 14:48:26 +0000 X-Received: from nasanex01c.na.qualcomm.com (nasanex01c.na.qualcomm.com [10.45.79.139]) by NASANPPMTA02.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 3A9EmPJC007582 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 9 Nov 2023 14:48:25 GMT X-Received: from [10.111.128.58] (10.80.80.8) by nasanex01c.na.qualcomm.com (10.45.79.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.39; Thu, 9 Nov 2023 06:48:23 -0800 Message-ID: Date: Thu, 9 Nov 2023 14:48:20 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: =?UTF-8?B?UmU6IFtlZGsyLWRldmVsXSDlm57lpI06IFtlZGsyLXN0YWJsZTIwMjMxMV0gW1BBVENIIHYzXSBSZWRmaXNoUGtnOiBSZWRmaXNoRGlzY292ZXJEeGU6IEZpeCBpc3N1ZSBpZiBJUHY0IGluc3RhbGxlZCBhZnRlciBSZXN0RXg=?= To: , , , "'Kinney, Michael D'" , 'Andrew Fish' CC: 'Igor Kulchytskyy' , "'Chang, Abner'" References: <20231107120605.2035-1-igork@ami.com> <011b01da1313$a157c080$e4074180$@byosoft.com.cn> From: "Leif Lindholm" In-Reply-To: <011b01da1313$a157c080$e4074180$@byosoft.com.cn> X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nasanex01c.na.qualcomm.com (10.45.79.139) X-QCInternal: smtphost X-Proofpoint-ORIG-GUID: 2mR96ZSFg6wPOe4t2GUNHM7YSTAu0hKe X-Proofpoint-GUID: 2mR96ZSFg6wPOe4t2GUNHM7YSTAu0hKe X-MIME-Autoconverted: from 8bit to base64 by mx0a-0031df01.pphosted.com id 3A9DDjLl024613 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,quic_llindhol@quicinc.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: GdVNsz3wb0vLHpXhCMBr6sqax7686176AA= Content-Language: en-GB Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: base64 X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b=WRup5bLg; dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=quicinc.com (policy=none); spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io KFlvdSBoYXZlIG15IG9sZCBub3ctZHlzZnVuY3Rpb25hbCBAbnV2aWFpbmMuY29tIGVtYWlsIGFk ZHJlc3Mgb24gY2MsIA0KcGxlYXNlIGRlbGV0ZSB0aGF0IG9uZSBpZiB5b3UgY2FuLikNCg0KSSB0 aGluayBpdCdzIGZpbmUgdG8gbWVyZ2UgdGhpcyBidWdmaXgsIGJ1dCBJIGhhdmUgYSBjb3VwbGUg b2YgcmV2aWV3IA0KY29tbWVudHMgSSB3aWxsIG1ha2Ugb24gdGhlIHYzIGNvZGUgaXRzZWxmLCBy ZXBseWluZyB0byB0aGF0IHN1Ym1pc3Npb24uDQooSSBhbSBob3dldmVyIG5vdCB0aGUgbWFpbnRh aW5lciBvZiBSZWRGaXNoUGtnLCBzbyBOaWNrbGUgaXMgZnJlZSB0byANCmlnbm9yZSBtZSBhbmQg cHVzaCB0aGlzIHZlcnNpb24uKQ0KDQovDQogICAgIExlaWYNCg0KDQpPbiAyMDIzLTExLTA5IDEz OjQ5LCBnYW9saW1pbmcgdmlhIGdyb3Vwcy5pbyB3cm90ZToNCj4gTmlja2xlOg0KPiANCj4gIMKg VGhpcyBpcyBhIGJ1ZyBmaXguIEl0cyBpbXBhY3QgaXMgb25seSBpbiBSZWRmaXNoRGlzY292ZXJE eGUuIEkgdGhpbmsgDQo+IGl0IGNhbiBiZSBtZXJnZWQgZm9yIHRoaXMgc3RhYmxlIHRhZy4NCj4g DQo+IFRoYW5rcw0KPiANCj4gTGltaW5nDQo+IA0KPiAq5Y+R5Lu25Lq6OipkZXZlbEBlZGsyLmdy b3Vwcy5pbyA8ZGV2ZWxAZWRrMi5ncm91cHMuaW8+ICrku6PooaggKk5pY2tsZSBXYW5nIA0KPiB2 aWEgZ3JvdXBzLmlvDQo+ICrlj5HpgIHml7bpl7Q6KjIwMjPlubQxMeaciDjml6UxMDo0NA0KPiAq 5pS25Lu25Lq6OipMaW1pbmcgR2FvIDxnYW9saW1pbmdAYnlvc29mdC5jb20uY24+OyBLaW5uZXks IE1pY2hhZWwgRCANCj4gPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPjsgZGV2ZWxAZWRrMi5n cm91cHMuaW8NCj4gKuaKhOmAgToqSWdvciBLdWxjaHl0c2t5eSA8aWdvcmtAYW1pLmNvbT47IENo YW5nLCBBYm5lciA8YWJuZXIuY2hhbmdAYW1kLmNvbT4NCj4gKuS4u+mimDoqUmU6IFtlZGsyLWRl dmVsXSBbUEFUQ0ggdjNdIFJlZGZpc2hQa2c6IFJlZGZpc2hEaXNjb3ZlckR4ZTogRml4IA0KPiBp c3N1ZSBpZiBJUHY0IGluc3RhbGxlZCBhZnRlciBSZXN0RXgNCj4gDQo+IEhpIEBMaW1pbmcgR2Fv IDxtYWlsdG86Z2FvbGltaW5nQGJ5b3NvZnQuY29tLmNuPiwgQEtpbm5leSwgTWljaGFlbCBEIA0K PiA8bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPg0KPiANCj4+IElmIHRoZSBwYXRj aCBpcyBzZW50IGJlZm9yZSBTb2Z0IEZlYXR1cmUgRnJlZXplLCBhbmQgcGxhbnMgdG8gY2F0Y2gg dGhpcyBzdGFibGUgdGFnLCB0aGUgcGF0Y2ggY29udHJpYnV0b3IgbmVlZCByZXBseSB0byBoaXMg cGF0Y2ggYW5kIG5vdGlmeSBlZGsyIGNvbW11bml0eQ0KPiANCj4gV2Ugd291bGQgbGlrZSB0byBp bmNsdWRlIHRoaXMgZml4IHRvIGVkazItc3RhYmxlMjAyMzExIHJlbGVhc2UuIENvdWxkIA0KPiB5 b3UgcGxlYXNlIGhlbHAgdXMgdG8gbWVyZ2UgdGhpcyBwYXRjaD8gVGhpcyBwYXRjaCByZXZpZXcg d2FzIHN0YXJ0ZWQgb24gDQo+IE5vdmVtYmVyIDE6IGh0dHBzOi8vZWRrMi5ncm91cHMuaW8vZy9k ZXZlbC9tZXNzYWdlLzExMDQ0MCANCj4gPGh0dHBzOi8vZWRrMi5ncm91cHMuaW8vZy9kZXZlbC9t ZXNzYWdlLzExMDQ0MD4uIEFuYmVyIGFuZCBJIGdhdmUgDQo+IHJldmlld2VkLWJ5IHRvIHRoaXMg cGF0Y2ggdG9kYXkuIFdlIGhhdmUgYSBwdWxsIHJlcXVlc3QgcmVhZHkgZm9yIA0KPiBtZXJnaW5n IGhlcmU6IGh0dHBzOi8vZ2l0aHViLmNvbS90aWFub2NvcmUvZWRrMi9wdWxsLzQ5OTQgDQo+IDxo dHRwczovL2dpdGh1Yi5jb20vdGlhbm9jb3JlL2VkazIvcHVsbC80OTk0Pg0KPiANCj4gVGhhbmtz LA0KPiANCj4gTmlja2xlDQo+IA0KPj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gDQo+ PiBGcm9tOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbyA8bWFpbHRvOmRldmVsQGVkazIuZ3JvdXBzLmlv PiA8ZGV2ZWxAZWRrMi5ncm91cHMuaW8gDQo+IDxtYWlsdG86ZGV2ZWxAZWRrMi5ncm91cHMuaW8+ PiBPbiBCZWhhbGYgT2YgQ2hhbmcsIEFibmVyDQo+IA0KPj4gdmlhIGdyb3Vwcy5pbw0KPiANCj4+ IFNlbnQ6IFdlZG5lc2RheSwgTm92ZW1iZXIgOCwgMjAyMyA4OjE0IEFNDQo+IA0KPj4gVG86IEln b3IgS3VsY2h5dHNreXkgPGlnb3JrQGFtaS5jb20gPG1haWx0bzppZ29ya0BhbWkuY29tPj47IGRl dmVsQGVkazIuZ3JvdXBzLmlvIA0KPiA8bWFpbHRvOmRldmVsQGVkazIuZ3JvdXBzLmlvPg0KPiAN Cj4+IENjOiBOaWNrbGUgV2FuZyA8bmlja2xld0BudmlkaWEuY29tIDxtYWlsdG86bmlja2xld0Bu dmlkaWEuY29tPj4NCj4gDQo+PiBTdWJqZWN0OiBSZTogW2VkazItZGV2ZWxdIFtQQVRDSCB2M10g UmVkZmlzaFBrZzogUmVkZmlzaERpc2NvdmVyRHhlOiBGaXggaXNzdWUgaWYNCj4gDQo+PiBJUHY0 IGluc3RhbGxlZCBhZnRlciBSZXN0RXgNCj4gDQo+PiANCj4gDQo+PiBFeHRlcm5hbCBlbWFpbDog VXNlIGNhdXRpb24gb3BlbmluZyBsaW5rcyBvciBhdHRhY2htZW50cw0KPiANCj4+IA0KPiANCj4+ IA0KPiANCj4+IFtBTUQgT2ZmaWNpYWwgVXNlIE9ubHkgLSBHZW5lcmFsXQ0KPiANCj4+IA0KPiAN Cj4+IFJldmlld2VkLWJ5OiBBYm5lciBDaGFuZyA8YWJuZXIuY2hhbmdAYW1kLmNvbSA8bWFpbHRv OmFibmVyLmNoYW5nQGFtZC5jb20+Pg0KPiANCj4+IA0KPiANCj4+ID4gLS0tLS1PcmlnaW5hbCBN ZXNzYWdlLS0tLS0NCj4gDQo+PiA+IEZyb206IElnb3IgS3VsY2h5dHNreXkgPGlnb3JrQGFtaS5j b20gPG1haWx0bzppZ29ya0BhbWkuY29tPj4NCj4gDQo+PiA+IFNlbnQ6IFR1ZXNkYXksIE5vdmVt YmVyIDcsIDIwMjMgODowNiBQTQ0KPiANCj4+ID4gVG86IGRldmVsQGVkazIuZ3JvdXBzLmlvIDxt YWlsdG86ZGV2ZWxAZWRrMi5ncm91cHMuaW8+DQo+IA0KPj4gPiBDYzogQ2hhbmcsIEFibmVyIDxB Ym5lci5DaGFuZ0BhbWQuY29tIDxtYWlsdG86QWJuZXIuQ2hhbmdAYW1kLmNvbT4+OyBOaWNrbGUg V2FuZw0KPiANCj4+ID4gPG5pY2tsZXdAbnZpZGlhLmNvbSA8bWFpbHRvOm5pY2tsZXdAbnZpZGlh LmNvbT4+DQo+IA0KPj4gPiBTdWJqZWN0OiBbUEFUQ0ggdjNdIFJlZGZpc2hQa2c6IFJlZGZpc2hE aXNjb3ZlckR4ZTogRml4IGlzc3VlIGlmIElQdjQNCj4gDQo+PiA+IGluc3RhbGxlZCBhZnRlciBS ZXN0RXgNCj4gDQo+PiA+DQo+IA0KPj4gPiBDYXV0aW9uOiBUaGlzIG1lc3NhZ2Ugb3JpZ2luYXRl ZCBmcm9tIGFuIEV4dGVybmFsIFNvdXJjZS4gVXNlIHByb3Blcg0KPiANCj4+ID4gY2F1dGlvbiB3 aGVuIG9wZW5pbmcgYXR0YWNobWVudHMsIGNsaWNraW5nIGxpbmtzLCBvciByZXNwb25kaW5nLg0K PiANCj4+ID4NCj4gDQo+PiA+DQo+IA0KPj4gPiBTdXBwb3J0ZWQgZnVuY3Rpb24gb2YgdGhlIGRy aXZlciBjaGFuZ2VkIHRvIHdhaXQgZm9yIGFsbCBuZXd0d29yaw0KPiANCj4+ID4gaW50ZXJmYWNl IHRvIGJlIGluc3RhbGxlZC4NCj4gDQo+PiA+IEZpbGVyIG91dCB0aGUgbmV0d29yayBpbnRlcmZh Y2VzIHdoaWNoIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IFJlZGZpc2gNCj4gDQo+PiA+IEhvc3QgSW50 ZXJmYWNlLg0KPiANCj4+ID4NCj4gDQo+PiA+IENjOiBBYm5lciBDaGFuZyA8YWJuZXIuY2hhbmdA YW1kLmNvbSA8bWFpbHRvOmFibmVyLmNoYW5nQGFtZC5jb20+Pg0KPiANCj4+ID4gQ2M6IE5pY2ts ZSBXYW5nIDxuaWNrbGV3QG52aWRpYS5jb20gPG1haWx0bzpuaWNrbGV3QG52aWRpYS5jb20+Pg0K PiANCj4+ID4gU2lnbmVkLW9mZi1ieTogSWdvciBLdWxjaHl0c2t5eSA8aWdvcmtAYW1pLmNvbSA8 bWFpbHRvOmlnb3JrQGFtaS5jb20+Pg0KPiANCj4+ID4gLS0tDQo+IA0KPj4gPsKgIFJlZGZpc2hQ a2cvUmVkZmlzaERpc2NvdmVyRHhlL1JlZGZpc2hEaXNjb3ZlckR4ZS5jIHwgMTY1DQo+IA0KPj4g PiArKysrKysrKysrKysrKy0tLS0tLQ0KPiANCj4+ID7CoCAxIGZpbGUgY2hhbmdlZCwgMTE3IGlu c2VydGlvbnMoKyksIDQ4IGRlbGV0aW9ucygtKQ0KPiANCj4+ID4NCj4gDQo+PiA+IGRpZmYgLS1n aXQgYS9SZWRmaXNoUGtnL1JlZGZpc2hEaXNjb3ZlckR4ZS9SZWRmaXNoRGlzY292ZXJEeGUuYw0K PiANCj4+ID4gYi9SZWRmaXNoUGtnL1JlZGZpc2hEaXNjb3ZlckR4ZS9SZWRmaXNoRGlzY292ZXJE eGUuYw0KPiANCj4+ID4gaW5kZXggMjNkYTNiOTY4Zi4uODVlNDc4NDNlNCAxMDA2NDQNCj4gDQo+ PiA+IC0tLSBhL1JlZGZpc2hQa2cvUmVkZmlzaERpc2NvdmVyRHhlL1JlZGZpc2hEaXNjb3ZlckR4 ZS5jDQo+IA0KPj4gPiArKysgYi9SZWRmaXNoUGtnL1JlZGZpc2hEaXNjb3ZlckR4ZS9SZWRmaXNo RGlzY292ZXJEeGUuYw0KPiANCj4+ID4gQEAgLTMyMiw5ICszMjIsMTYgQEAgR2V0VGFyZ2V0TmV0 d29ya0ludGVyZmFjZUludGVybmFsICjCoCB7DQo+IA0KPj4gPsKgwqDCoCBFRklfUkVERklTSF9E SVNDT1ZFUl9ORVRXT1JLX0lOVEVSRkFDRV9JTlRFUk5BTA0KPiANCj4+ID4gKlRoaXNOZXR3b3Jr SW50ZXJmYWNlOw0KPiANCj4+ID4NCj4gDQo+PiA+ICvCoCBpZiAoSXNMaXN0RW1wdHkgKCZtRWZp UmVkZmlzaERpc2NvdmVyTmV0d29ya0ludGVyZmFjZSkpIHsNCj4gDQo+PiA+ICvCoMKgwqAgcmV0 dXJuIE5VTEw7DQo+IA0KPj4gPiArwqAgfQ0KPiANCj4+ID4gKw0KPiANCj4+ID7CoMKgwqAgVGhp c05ldHdvcmtJbnRlcmZhY2UgPQ0KPiANCj4+ID4gKEVGSV9SRURGSVNIX0RJU0NPVkVSX05FVFdP UktfSU5URVJGQUNFX0lOVEVSTkFMICopR2V0Rmlyc3ROb2RlDQo+IA0KPj4gPiAoJm1FZmlSZWRm aXNoRGlzY292ZXJOZXR3b3JrSW50ZXJmYWNlKTsNCj4gDQo+PiA+wqDCoMKgIHdoaWxlIChUUlVF KSB7DQo+IA0KPj4gPiAtwqDCoMKgIGlmIChDb21wYXJlTWVtICgoVk9JRCAqKSZUaGlzTmV0d29y a0ludGVyZmFjZS0+TWFjQWRkcmVzcywNCj4gDQo+PiA+ICZUYXJnZXROZXR3b3JrSW50ZXJmYWNl LT5NYWNBZGRyZXNzLCBUaGlzTmV0d29ya0ludGVyZmFjZS0NCj4gDQo+PiA+ID5Id0FkZHJlc3NT aXplKSA9PSAwKSB7DQo+IA0KPj4gPiArwqDCoMKgIGlmICgoQ29tcGFyZU1lbSAoKFZPSUQgKikm VGhpc05ldHdvcmtJbnRlcmZhY2UtPk1hY0FkZHJlc3MsDQo+IA0KPj4gPiAmVGFyZ2V0TmV0d29y a0ludGVyZmFjZS0+TWFjQWRkcmVzcywgVGhpc05ldHdvcmtJbnRlcmZhY2UtDQo+IA0KPj4gPiA+ SHdBZGRyZXNzU2l6ZSkgPT0gMCkgJiYNCj4gDQo+PiA+ICvCoMKgwqDCoMKgwqDCoCAoKFRhcmdl dE5ldHdvcmtJbnRlcmZhY2UtPklzSXB2NiAmJiAoVGhpc05ldHdvcmtJbnRlcmZhY2UtDQo+IA0K Pj4gPiA+TmV0d29ya1Byb3RvY29sVHlwZSA9PSBQcm90b2NvbFR5cGVUY3A2KSkgfHwNCj4gDQo+ PiA+ICvCoMKgwqDCoMKgwqDCoMKgICghVGFyZ2V0TmV0d29ya0ludGVyZmFjZS0+SXNJcHY2ICYm IChUaGlzTmV0d29ya0ludGVyZmFjZS0NCj4gDQo+PiA+ID5OZXR3b3JrUHJvdG9jb2xUeXBlID09 IFByb3RvY29sVHlwZVRjcDQpKSkpDQo+IA0KPj4gPiArwqDCoMKgIHsNCj4gDQo+PiA+wqDCoMKg wqDCoMKgwqAgcmV0dXJuIFRoaXNOZXR3b3JrSW50ZXJmYWNlOw0KPiANCj4+ID7CoMKgwqDCoMKg IH0NCj4gDQo+PiA+DQo+IA0KPj4gPiBAQCAtMzU0LDYgKzM2MSwxMCBAQCBHZXRUYXJnZXROZXR3 b3JrSW50ZXJmYWNlSW50ZXJuYWxCeUNvbnRyb2xsZXIgKA0KPiANCj4+ID4gew0KPiANCj4+ID7C oMKgwqAgRUZJX1JFREZJU0hfRElTQ09WRVJfTkVUV09SS19JTlRFUkZBQ0VfSU5URVJOQUwNCj4g DQo+PiA+ICpUaGlzTmV0d29ya0ludGVyZmFjZTsNCj4gDQo+PiA+DQo+IA0KPj4gPiArwqAgaWYg KElzTGlzdEVtcHR5ICgmbUVmaVJlZGZpc2hEaXNjb3Zlck5ldHdvcmtJbnRlcmZhY2UpKSB7DQo+ IA0KPj4gPiArwqDCoMKgIHJldHVybiBOVUxMOw0KPiANCj4+ID4gK8KgIH0NCj4gDQo+PiA+ICsN Cj4gDQo+PiA+wqDCoMKgIFRoaXNOZXR3b3JrSW50ZXJmYWNlID0NCj4gDQo+PiA+IChFRklfUkVE RklTSF9ESVNDT1ZFUl9ORVRXT1JLX0lOVEVSRkFDRV9JTlRFUk5BTCAqKUdldEZpcnN0Tm9kZQ0K PiANCj4+ID4gKCZtRWZpUmVkZmlzaERpc2NvdmVyTmV0d29ya0ludGVyZmFjZSk7DQo+IA0KPj4g PsKgwqDCoCB3aGlsZSAoVFJVRSkgew0KPiANCj4+ID7CoMKgwqDCoMKgIGlmIChUaGlzTmV0d29y a0ludGVyZmFjZS0+T3BlbkRyaXZlckNvbnRyb2xsZXJIYW5kbGUgPT0NCj4gDQo+PiA+IENvbnRy b2xsZXJIYW5kbGUpIHsNCj4gDQo+PiA+IEBAIC00NzYsNiArNDg3LDQyIEBAIENoZWNrSXNJcFZl cnNpb242ICgNCj4gDQo+PiA+wqDCoMKgIHJldHVybiBGQUxTRTsNCj4gDQo+PiA+wqAgfQ0KPiAN Cj4+ID4NCj4gDQo+PiA+ICsvKioNCj4gDQo+PiA+ICvCoCBUaGlzIGZ1bmN0aW9uIHJldHVybnMg dGhlwqAgSVAgdHlwZSBzdXBwb3J0ZWQgYnkgdGhlIEhvc3QgSW50ZXJmYWNlLg0KPiANCj4+ID4g Kw0KPiANCj4+ID4gK8KgIEByZXR2YWwgMDBoIGlzIFVua25vd24NCj4gDQo+PiA+ICvCoMKgwqDC oMKgwqDCoMKgwqAgMDFoIGlzIElwdjQNCj4gDQo+PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqAgMDJo IGlzIElwdjYNCj4gDQo+PiA+ICsNCj4gDQo+PiA+ICsqKi8NCj4gDQo+PiA+ICtVSU5UOA0KPiAN Cj4+ID4gK0dldEhpSXBQcm90b2NvbFR5cGUgKA0KPiANCj4+ID4gK8KgIFZPSUQNCj4gDQo+PiA+ ICvCoCApDQo+IA0KPj4gPiArew0KPiANCj4+ID4gK8KgIEVGSV9TVEFUVVPCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFN0YXR1czsNCj4gDQo+PiA+ICvCoCBSRURGSVNI X09WRVJfSVBfUFJPVE9DT0xfREFUQcKgICpEYXRhOw0KPiANCj4+ID4gK8KgIFJFREZJU0hfSU5U RVJGQUNFX0RBVEHCoMKgwqDCoMKgwqDCoMKgICpEZXZpY2VEZXNjcmlwdG9yOw0KPiANCj4+ID4g Kw0KPiANCj4+ID4gK8KgIERhdGHCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBOVUxMOw0KPiAN Cj4+ID4gK8KgIERldmljZURlc2NyaXB0b3IgPSBOVUxMOw0KPiANCj4+ID4gK8KgIGlmIChtU21i aW9zID09IE5VTEwpIHsNCj4gDQo+PiA+ICvCoMKgwqAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVQcm90 b2NvbCAoJmdFZmlTbWJpb3NQcm90b2NvbEd1aWQsIE5VTEwsDQo+IA0KPj4gPiArIChWT0lEDQo+ IA0KPj4gPiAqKikmbVNtYmlvcyk7DQo+IA0KPj4gPiArwqDCoMKgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4gDQo+PiA+ICvCoMKgwqDCoMKgIHJldHVybg0KPiANCj4+ID4gUkVERklTSF9I T1NUX0lOVEVSRkFDRV9IT1NUX0lQX0FERFJFU1NfRk9STUFUX1VOS05PV047DQo+IA0KPj4gPiAr wqDCoMKgIH0NCj4gDQo+PiA+ICvCoCB9DQo+IA0KPj4gPiArDQo+IA0KPj4gPiArwqAgU3RhdHVz ID0gUmVkZmlzaEdldEhvc3RJbnRlcmZhY2VQcm90b2NvbERhdGEgKG1TbWJpb3MsDQo+IA0KPj4g PiAmRGV2aWNlRGVzY3JpcHRvciwgJkRhdGEpOyAvLyBTZWFyY2ggZm9yIFNNQklPUyB0eXBlIDQy aA0KPiANCj4+ID4gK8KgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpICYmIChEYXRhICE9IE5VTEwp ICYmDQo+IA0KPj4gPiArwqDCoMKgwqDCoCAoRGF0YS0+SG9zdElwQXNzaWdubWVudFR5cGUgPT0g UmVkZmlzaEhvc3RJcEFzc2lnbm1lbnRTdGF0aWMpKQ0KPiANCj4+ID4gKyB7DQo+IA0KPj4gPiAr wqDCoMKgIHJldHVybiBEYXRhLT5Ib3N0SXBBZGRyZXNzRm9ybWF0O8KgIH0NCj4gDQo+PiA+ICsN Cj4gDQo+PiA+ICvCoCByZXR1cm4NCj4gDQo+PiA+IFJFREZJU0hfSE9TVF9JTlRFUkZBQ0VfSE9T VF9JUF9BRERSRVNTX0ZPUk1BVF9VTktOT1dOOw0KPiANCj4+ID4gK30NCj4gDQo+PiA+ICsNCj4g DQo+PiA+wqAgLyoqDQo+IA0KPj4gPsKgwqDCoCBUaGlzIGZ1bmN0aW9uIGRpc2NvdmVyIFJlZGZp c2ggc2VydmljZSB0aHJvdWdoIFNNQklPUyBob3N0IGludGVyZmFjZS4NCj4gDQo+PiA+DQo+IA0K Pj4gPiBAQCAtNTEyLDYgKzU1OSwxOCBAQCBEaXNjb3ZlclJlZGZpc2hIb3N0SW50ZXJmYWNlICgN Cj4gDQo+PiA+DQo+IA0KPj4gPsKgwqDCoCBTdGF0dXMgPSBSZWRmaXNoR2V0SG9zdEludGVyZmFj ZVByb3RvY29sRGF0YSAobVNtYmlvcywNCj4gDQo+PiA+ICZEZXZpY2VEZXNjcmlwdG9yLCAmRGF0 YSk7IC8vIFNlYXJjaCBmb3IgU01CSU9TIHR5cGUgNDJoDQo+IA0KPj4gPsKgwqDCoCBpZiAoIUVG SV9FUlJPUiAoU3RhdHVzKSAmJiAoRGF0YSAhPSBOVUxMKSAmJiAoRGV2aWNlRGVzY3JpcHRvciAh PQ0KPiANCj4+ID4gTlVMTCkpIHsNCj4gDQo+PiA+ICvCoMKgwqAgaWYgKChJbnN0YW5jZS0+TmV0 d29ya0ludGVyZmFjZS0+TmV0d29ya1Byb3RvY29sVHlwZSA9PQ0KPiANCj4+ID4gUHJvdG9jb2xU eXBlVGNwNCkgJiYNCj4gDQo+PiA+ICvCoMKgwqDCoMKgwqDCoCAoRGF0YS0+SG9zdElwQWRkcmVz c0Zvcm1hdCAhPQ0KPiANCj4+ID4gUkVERklTSF9IT1NUX0lOVEVSRkFDRV9IT1NUX0lQX0FERFJF U1NfRk9STUFUX0lQNCkpIC8vIElQdjQgY2FzZQ0KPiANCj4+ID4gK8KgwqDCoCB7DQo+IA0KPj4g PiArwqDCoMKgwqDCoCBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6IE5ldHdvcmsgSW50ZXJmYWNl IGlzIElQdjQsIGJ1dCBIb3N0DQo+IA0KPj4gPiBJbnRlcmZhY2UgcmVxdWlyZXMgSXB2NlxuIiwg X19mdW5jX18pKTsNCj4gDQo+PiA+ICvCoMKgwqDCoMKgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7 DQo+IA0KPj4gPiArwqDCoMKgIH0gZWxzZSBpZiAoKEluc3RhbmNlLT5OZXR3b3JrSW50ZXJmYWNl LT5OZXR3b3JrUHJvdG9jb2xUeXBlID09DQo+IA0KPj4gPiBQcm90b2NvbFR5cGVUY3A2KSAmJg0K PiANCj4+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKERhdGEtPkhvc3RJcEFkZHJl c3NGb3JtYXQgIT0NCj4gDQo+PiA+IFJFREZJU0hfSE9TVF9JTlRFUkZBQ0VfSE9TVF9JUF9BRERS RVNTX0ZPUk1BVF9JUDYpKSAvLyBJUHY2IGNhc2UNCj4gDQo+PiA+ICvCoMKgwqAgew0KPiANCj4+ ID4gK8KgwqDCoMKgwqAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOiBOZXR3b3JrIEludGVyZmFj ZSBpcyBJUHY2LCBidXQgSG9zdA0KPiANCj4+ID4gSW50ZXJmYWNlIHJlcXVpcmVzIElQdjRcbiIs IF9fZnVuY19fKSk7DQo+IA0KPj4gPiArwqDCoMKgwqDCoCByZXR1cm4gRUZJX1VOU1VQUE9SVEVE Ow0KPiANCj4+ID4gK8KgwqDCoCB9DQo+IA0KPj4gPiArDQo+IA0KPj4gPsKgwqDCoMKgwqAgLy8N Cj4gDQo+PiA+wqDCoMKgwqDCoCAvLyBDaGVjayBpZiB3ZSBjYW4gcmVhY2ggb3V0IFJlZGZpc2gg c2VydmljZSB1c2luZyB0aGlzIG5ldHdvcmsgaW50ZXJmYWNlLg0KPiANCj4+ID7CoMKgwqDCoMKg IC8vIENoZWNrIHdpdGggTUFDIGFkZHJlc3MgdXNpbmcgRGV2aWNlIERlc2NyaXB0b3IgRGF0YSBE ZXZpY2UNCj4gDQo+PiA+IFR5cGUgMDQgYW5kIFR5cGUgMDUuDQo+IA0KPj4gPiBAQCAtMTEwMiw2 ICsxMTYxLDcgQEAgUmVkZmlzaFNlcnZpY2VHZXROZXR3b3JrSW50ZXJmYWNlICgNCj4gDQo+PiA+ wqDCoMKgIE9VVCBFRklfUkVERklTSF9ESVNDT1ZFUl9ORVRXT1JLX0lOVEVSRkFDRQ0KPiANCj4+ ID4gKipOZXR3b3JrSW50Zkluc3RhbmNlcw0KPiANCj4+ID7CoMKgwqAgKQ0KPiANCj4+ID7CoCB7 DQo+IA0KPj4gPiArwqAgRUZJX1NUQVRVU8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgU3RhdHVzOw0KPiAN Cj4+ID7CoMKgwqAgRUZJX1JFREZJU0hfRElTQ09WRVJfTkVUV09SS19JTlRFUkZBQ0VfSU5URVJO QUwNCj4gDQo+PiA+ICpUaGlzTmV0d29ya0ludGVyZmFjZUludG47DQo+IA0KPj4gPsKgwqDCoCBF RklfUkVERklTSF9ESVNDT1ZFUl9ORVRXT1JLX0lOVEVSRkFDRQ0KPiANCj4+ID4gKlRoaXNOZXR3 b3JrSW50ZXJmYWNlOw0KPiANCj4+ID7CoMKgwqAgRUZJX1JFREZJU0hfRElTQ09WRVJfUkVTVF9F WF9JTlNUQU5DRV9JTlRFUk5BTMKgwqAgKlJlc3RFeEluc3RhbmNlOw0KPiANCj4+ID4gQEAgLTEx NDEsMTMgKzEyMDEsMjMgQEAgUmVkZmlzaFNlcnZpY2VHZXROZXR3b3JrSW50ZXJmYWNlICgNCj4g DQo+PiA+DQo+IA0KPj4gPsKgwqDCoCBUaGlzTmV0d29ya0ludGVyZmFjZUludG4gPQ0KPiANCj4+ ID4gKEVGSV9SRURGSVNIX0RJU0NPVkVSX05FVFdPUktfSU5URVJGQUNFX0lOVEVSTkFMICopR2V0 Rmlyc3ROb2RlDQo+IA0KPj4gPiAoJm1FZmlSZWRmaXNoRGlzY292ZXJOZXR3b3JrSW50ZXJmYWNl KTsNCj4gDQo+PiA+wqDCoMKgIHdoaWxlIChUUlVFKSB7DQo+IA0KPj4gPiArwqDCoMKgIC8vIElm IEdldCBTdWJuZXQgSW5mbyBmYWlsZWQgdGhlbiBza2lwIHRoaXMgaW50ZXJmYWNlDQo+IA0KPj4g PiArwqDCoMKgIFN0YXR1cyA9IE5ldHdvcmtJbnRlcmZhY2VHZXRTdWJuZXRJbmZvIChUaGlzTmV0 d29ya0ludGVyZmFjZUludG4sDQo+IA0KPj4gPiBJbWFnZUhhbmRsZSk7IC8vIEdldCBzdWJuZXQg aW5mbw0KPiANCj4+ID4gK8KgwqDCoCBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+IA0KPj4g PiArwqDCoMKgwqDCoCBpZiAoSXNOb2RlQXRFbmQgKCZtRWZpUmVkZmlzaERpc2NvdmVyTmV0d29y a0ludGVyZmFjZSwNCj4gDQo+PiA+ICZUaGlzTmV0d29ya0ludGVyZmFjZUludG4tPkVudHJ5KSkg ew0KPiANCj4+ID4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOw0KPiANCj4+ID4gK8KgwqDCoMKgwqAg fQ0KPiANCj4+ID4gKw0KPiANCj4+ID4gK8KgwqDCoMKgwqAgVGhpc05ldHdvcmtJbnRlcmZhY2VJ bnRuID0NCj4gDQo+PiA+IChFRklfUkVERklTSF9ESVNDT1ZFUl9ORVRXT1JLX0lOVEVSRkFDRV9J TlRFUk5BTCAqKUdldE5leHROb2RlDQo+IA0KPj4gPiAoJm1FZmlSZWRmaXNoRGlzY292ZXJOZXR3 b3JrSW50ZXJmYWNlLA0KPiANCj4+ID4gJlRoaXNOZXR3b3JrSW50ZXJmYWNlSW50bi0+RW50cnkp Ow0KPiANCj4+ID4gK8KgwqDCoMKgwqAgY29udGludWU7DQo+IA0KPj4gPiArwqDCoMKgIH0NCj4g DQo+PiA+ICsNCj4gDQo+PiA+wqDCoMKgwqDCoCBUaGlzTmV0d29ya0ludGVyZmFjZS0+SXNJcHY2 ID0gRkFMU0U7DQo+IA0KPj4gPsKgwqDCoMKgwqAgaWYgKENoZWNrSXNJcFZlcnNpb242IChUaGlz TmV0d29ya0ludGVyZmFjZUludG4pKSB7DQo+IA0KPj4gPsKgwqDCoMKgwqDCoMKgIFRoaXNOZXR3 b3JrSW50ZXJmYWNlLT5Jc0lwdjYgPSBUUlVFOw0KPiANCj4+ID7CoMKgwqDCoMKgIH0NCj4gDQo+ PiA+DQo+IA0KPj4gPsKgwqDCoMKgwqAgQ29weU1lbSAoKFZPSUQgKikmVGhpc05ldHdvcmtJbnRl cmZhY2UtPk1hY0FkZHJlc3MsDQo+IA0KPj4gPiAmVGhpc05ldHdvcmtJbnRlcmZhY2VJbnRuLT5N YWNBZGRyZXNzLCBUaGlzTmV0d29ya0ludGVyZmFjZUludG4tDQo+IA0KPj4gPiA+SHdBZGRyZXNz U2l6ZSk7DQo+IA0KPj4gPiAtwqDCoMKgIE5ldHdvcmtJbnRlcmZhY2VHZXRTdWJuZXRJbmZvIChU aGlzTmV0d29ya0ludGVyZmFjZUludG4sIEltYWdlSGFuZGxlKTsNCj4gDQo+PiA+IC8vIEdldCBz dWJuZXQgaW5mby4NCj4gDQo+PiA+wqDCoMKgwqDCoCBpZiAoIVRoaXNOZXR3b3JrSW50ZXJmYWNl LT5Jc0lwdjYpIHsNCj4gDQo+PiA+wqDCoMKgwqDCoMKgwqAgSVA0X0NPUFlfQUREUkVTUyAoJlRo aXNOZXR3b3JrSW50ZXJmYWNlLT5TdWJuZXRJZC52NCwNCj4gDQo+PiA+ICZUaGlzTmV0d29ya0lu dGVyZmFjZUludG4tPlN1Ym5ldEFkZHIudjQpOyAvLyBJUHY0IHN1Ym5ldCBpbmZvcm1hdGlvbi4N Cj4gDQo+PiA+wqDCoMKgwqDCoCB9IGVsc2Ugew0KPiANCj4+ID4gQEAgLTEyMzAsNyArMTMwMCwx MiBAQCBSZWRmaXNoU2VydmljZUFjcXVpcmVTZXJ2aWNlICgNCj4gDQo+PiA+DQo+IA0KPj4gPsKg wqDCoCBpZiAoVGFyZ2V0TmV0d29ya0ludGVyZmFjZSAhPSBOVUxMKSB7DQo+IA0KPj4gPsKgwqDC oMKgwqAgVGFyZ2V0TmV0d29ya0ludGVyZmFjZUludGVybmFsID0NCj4gDQo+PiA+IEdldFRhcmdl dE5ldHdvcmtJbnRlcmZhY2VJbnRlcm5hbCAoVGFyZ2V0TmV0d29ya0ludGVyZmFjZSk7DQo+IA0K Pj4gPiAtwqDCoMKgIE51bU5ldHdvcmtJbnRlcmZhY2VzwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSAx Ow0KPiANCj4+ID4gK8KgwqDCoCBpZiAoVGFyZ2V0TmV0d29ya0ludGVyZmFjZUludGVybmFsID09 IE5VTEwpIHsNCj4gDQo+PiA+ICvCoMKgwqDCoMKgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTpO byBuZXR3b3JrIGludGVyZmFjZSBvbiBwbGF0Zm9ybS5cbiIsDQo+IA0KPj4gPiBfX2Z1bmNfXykp Ow0KPiANCj4+ID4gK8KgwqDCoMKgwqAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gDQo+PiA+ ICvCoMKgwqAgfQ0KPiANCj4+ID4gKw0KPiANCj4+ID4gK8KgwqDCoCBOdW1OZXR3b3JrSW50ZXJm YWNlcyA9IDE7DQo+IA0KPj4gPsKgwqDCoCB9IGVsc2Ugew0KPiANCj4+ID7CoMKgwqDCoMKgIFRh cmdldE5ldHdvcmtJbnRlcmZhY2VJbnRlcm5hbCA9DQo+IA0KPj4gPiAoRUZJX1JFREZJU0hfRElT Q09WRVJfTkVUV09SS19JTlRFUkZBQ0VfSU5URVJOQUwgKilHZXRGaXJzdE5vZGUNCj4gDQo+PiA+ ICgmbUVmaVJlZGZpc2hEaXNjb3Zlck5ldHdvcmtJbnRlcmZhY2UpOw0KPiANCj4+ID7CoMKgwqDC oMKgIE51bU5ldHdvcmtJbnRlcmZhY2VzwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBOdW1iZXJPZk5l dHdvcmtJbnRlcmZhY2UgKCk7DQo+IA0KPj4gPiBAQCAtMTI2MCw3ICsxMzM1LDEzIEBAIFJlZGZp c2hTZXJ2aWNlQWNxdWlyZVNlcnZpY2UgKA0KPiANCj4+ID7CoMKgwqDCoMKgwqDCoCAvLyBHZXQg c3VibmV0IGluZm9ybWF0aW9uIGluIGNhc2Ugc3VibmV0IGluZm9ybWF0aW9uIGlzIG5vdCBzZXQg YmVjYXVzZQ0KPiANCj4+ID7CoMKgwqDCoMKgwqDCoCAvLyBSZWRmaXNoU2VydmljZUdldE5ldHdv cmtJbnRlcmZhY2VzIGhhc24ndCBiZWVuIGNhbGxlZCB5ZXQuDQo+IA0KPj4gPsKgwqDCoMKgwqDC oMKgIC8vDQo+IA0KPj4gPiAtwqDCoMKgwqDCoCBOZXR3b3JrSW50ZXJmYWNlR2V0U3VibmV0SW5m byAoVGFyZ2V0TmV0d29ya0ludGVyZmFjZUludGVybmFsLA0KPiANCj4+ID4gSW1hZ2VIYW5kbGUp Ow0KPiANCj4+ID4gK8KgwqDCoMKgwqAgU3RhdHVzMSA9IE5ldHdvcmtJbnRlcmZhY2VHZXRTdWJu ZXRJbmZvDQo+IA0KPj4gPiAoVGFyZ2V0TmV0d29ya0ludGVyZmFjZUludGVybmFsLCBJbWFnZUhh bmRsZSk7DQo+IA0KPj4gPiArwqDCoMKgwqDCoCBpZiAoRUZJX0VSUk9SIChTdGF0dXMxKSkgew0K PiANCj4+ID4gK8KgwqDCoMKgwqDCoMKgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTogR2V0IHN1 Ym5ldCBpbmZvcm1hdGlvbiBmYWlsLlxuIiwNCj4gDQo+PiA+IF9fZnVuY19fKSk7DQo+IA0KPj4g PiArwqDCoMKgwqDCoMKgwqAgRnJlZVBvb2wgKEluc3RhbmNlKTsNCj4gDQo+PiA+ICvCoMKgwqDC oMKgwqDCoCBjb250aW51ZTsNCj4gDQo+PiA+ICvCoMKgwqDCoMKgIH0NCj4gDQo+PiA+ICsNCj4g DQo+PiA+wqDCoMKgwqDCoMKgwqAgTmV3SW5zdGFuY2UgPSBUUlVFOw0KPiANCj4+ID7CoMKgwqDC oMKgIH0NCj4gDQo+PiA+DQo+IA0KPj4gPiBAQCAtMTU0NywyNSArMTYyOCwyNiBAQCBUZXN0Rm9y UmVxdWlyZWRQcm90b2NvbHMgKA0KPiANCj4+ID7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgQ29udHJvbGxlckhhbmRsZSwNCj4gDQo+PiA+wqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEVGSV9PUEVOX1BST1RPQ09MX1RFU1RfUFJPVE9D T0wNCj4gDQo+PiA+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICk7 DQo+IA0KPj4gPiArwqDCoMKgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gDQo+PiA+ICvC oMKgwqDCoMKgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+IA0KPj4gPiArwqDCoMKgIH0NCj4g DQo+PiA+ICsNCj4gDQo+PiA+ICvCoMKgwqAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0K PiANCj4+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIENvbnRyb2xs ZXJIYW5kbGUsDQo+IA0KPj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZ1JlcXVpcmVkUHJvdG9jb2xbSW5kZXhdLkRpc2NvdmVyZWRQcm90b2NvbEd1aWQsDQo+IA0K Pj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKFZPSUQgKiopJklk LA0KPiANCj4+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFRoaXMt PkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+IA0KPj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgQ29udHJvbGxlckhhbmRsZSwNCj4gDQo+PiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBFRklfT1BFTl9QUk9UT0NPTF9HRVRfUFJPVE9DT0wN Cj4gDQo+PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCApOw0KPiAN Cj4+ID7CoMKgwqDCoMKgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+IA0KPj4gPiAtwqDC oMKgwqDCoCBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQo+IA0KPj4gPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIENvbnRyb2xsZXJIYW5kbGUsDQo+IA0K Pj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdSZXF1aXJl ZFByb3RvY29sW0luZGV4XS5EaXNjb3ZlcmVkUHJvdG9jb2xHdWlkLA0KPiANCj4+ID4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoVk9JRCAqKikmSWQsDQo+IA0K Pj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFRoaXMtPkRy aXZlckJpbmRpbmdIYW5kbGUsDQo+IA0KPj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIENvbnRyb2xsZXJIYW5kbGUsDQo+IA0KPj4gPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEVGSV9PUEVOX1BST1RPQ09MX0dFVF9QUk9U T0NPTA0KPiANCj4+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCApOw0KPiANCj4+ID4gLcKgwqDCoMKgwqAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAN Cj4+ID4gLcKgwqDCoMKgwqDCoMKgIGlmIChJbmRleCA9PSBMaXN0Q291bnQgLSAxKSB7DQo+IA0K Pj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgIERFQlVHICgoREVCVUdfSU5GTywgIiVhOiBhbGwgcmVx dWlyZWQgcHJvdG9jb2xzIGFyZSBmb3VuZCBvbiB0aGlzDQo+IA0KPj4gPiBjb250cm9sbGVyIGhh bmRsZTogJXAuXG4iLCBfX2Z1bmNfXywgQ29udHJvbGxlckhhbmRsZSkpOw0KPiANCj4+ID4gLcKg wqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+IA0KPj4gPiAtwqDCoMKgwqDC oMKgwqAgfQ0KPiANCj4+ID4gLcKgwqDCoMKgwqAgfQ0KPiANCj4+ID4gK8KgwqDCoMKgwqAgLy8g QWxyZWFkeSBpbnN0YWxsZWQNCj4gDQo+PiA+ICvCoMKgwqDCoMKgIHJldHVybiBFRklfVU5TVVBQ T1JURUQ7DQo+IA0KPj4gPsKgwqDCoMKgwqAgfQ0KPiANCj4+ID7CoMKgwqAgfQ0KPiANCj4+ID4N Cj4gDQo+PiA+IC3CoCByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiANCj4+ID4gK8KgIERFQlVH ICgoREVCVUdfTUFOQUdFQUJJTElUWSwgIiVhOiBhbGwgcmVxdWlyZWQgcHJvdG9jb2xzIGFyZSBm b3VuZA0KPiANCj4+ID4gKyBvbg0KPiANCj4+ID4gdGhpcyBjb250cm9sbGVyIGhhbmRsZTogJXAu XG4iLCBfX2Z1bmNfXywgQ29udHJvbGxlckhhbmRsZSkpOw0KPiANCj4+ID4gK8KgIHJldHVybiBF RklfU1VDQ0VTUzsNCj4gDQo+PiA+wqAgfQ0KPiANCj4+ID4NCj4gDQo+PiA+wqAgLyoqDQo+IA0K Pj4gPiBAQCAtMTYwMCwxMCArMTY4MiwyNCBAQCBCdWlsZHVwTmV0d29ya0ludGVyZmFjZSAoDQo+ IA0KPj4gPsKgwqDCoCBFRklfUkVERklTSF9ESVNDT1ZFUl9SRVNUX0VYX0lOU1RBTkNFX0lOVEVS TkFMwqDCoCAqUmVzdEV4SW5zdGFuY2U7DQo+IA0KPj4gPsKgwqDCoCBFRklfVFBMwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBPbGRUcGw7DQo+IA0KPj4gPsKgwqDCoCBCT09MRUFOwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBOZXdOZXR3b3JrSW50ZXJmYWNlSW5zdGFsbGVkOw0KPiANCj4+ID4g K8KgIFVJTlQ4wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSXBUeXBlOw0KPiANCj4+ID4g K8KgIFVJTlROwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgTGlzdENvdW50Ow0KPiANCj4+ ID4NCj4gDQo+PiA+ICvCoCBMaXN0Q291bnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCA9IChzaXplb2YgKGdSZXF1aXJlZFByb3RvY29sKSAvIHNpemVvZg0KPiANCj4+ID4g KFJFREZJU0hfRElTQ09WRVJfUkVRVUlSRURfUFJPVE9DT0wpKTsNCj4gDQo+PiA+wqDCoMKgIE5l d05ldHdvcmtJbnRlcmZhY2VJbnN0YWxsZWQgPSBGQUxTRTsNCj4gDQo+PiA+wqDCoMKgIEluZGV4 wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IDA7DQo+IA0K Pj4gPiAtwqAgZG8gew0KPiANCj4+ID4gKw0KPiANCj4+ID4gK8KgIC8vIEdldCBJUCBUeXBlIHRv IGZpbHRlciBvdXQgdW5uZWNlc3NhcnkgbmV0d29yayBwcm90b2NvbCBpZg0KPiANCj4+ID4gKyBw b3NzaWJsZcKgIElwVHlwZSA9IEdldEhpSXBQcm90b2NvbFR5cGUgKCk7DQo+IA0KPj4gPiArDQo+ IA0KPj4gPiArwqAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTGlzdENvdW50OyBJbmRleCsrKSB7 DQo+IA0KPj4gPiArwqDCoMKgIC8vIENoZWNrIElQIFR5cGUgYW5kIHNraXAgYW4gdW5uZWNlc3Nh cnkgbmV0d29yayBwcm90b2NvbCBpZiBkb2VzDQo+IA0KPj4gPiArIG5vdA0KPiANCj4+ID4gbWF0 Y2gNCj4gDQo+PiA+ICvCoMKgwqAgaWYgKCgoZ1JlcXVpcmVkUHJvdG9jb2xbSW5kZXhdLlByb3Rv Y29sVHlwZSA9PSBQcm90b2NvbFR5cGVUY3A0KQ0KPiANCj4+ID4gKyAmJg0KPiANCj4+ID4gKElw VHlwZSA9PSBSRURGSVNIX0hPU1RfSU5URVJGQUNFX0hPU1RfSVBfQUREUkVTU19GT1JNQVRfSVA2 KSkgfHwNCj4gDQo+PiA+ICvCoMKgwqDCoMKgwqDCoCAoKGdSZXF1aXJlZFByb3RvY29sW0luZGV4 XS5Qcm90b2NvbFR5cGUgPT0gUHJvdG9jb2xUeXBlVGNwNikNCj4gDQo+PiA+ICsgJiYNCj4gDQo+ PiA+IChJcFR5cGUgPT0gUkVERklTSF9IT1NUX0lOVEVSRkFDRV9IT1NUX0lQX0FERFJFU1NfRk9S TUFUX0lQNCkpKQ0KPiANCj4+ID4gK8KgwqDCoCB7DQo+IA0KPj4gPiArwqDCoMKgwqDCoCBjb250 aW51ZTsNCj4gDQo+PiA+ICvCoMKgwqAgfQ0KPiANCj4+ID4gKw0KPiANCj4+ID7CoMKgwqDCoMKg IFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgNCj4gDQo+PiA+wqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8vIEFscmVhZHkgaW4gbGlzdD8NCj4gDQo+PiA+wqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIENvbnRyb2xsZXJIYW5kbGUs IEBAIC0xNjE0LDExICsxNzEwLDYgQEANCj4gDQo+PiA+IEJ1aWxkdXBOZXR3b3JrSW50ZXJmYWNl ICgNCj4gDQo+PiA+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEVG SV9PUEVOX1BST1RPQ09MX0dFVF9QUk9UT0NPTA0KPiANCj4+ID7CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKTsNCj4gDQo+PiA+wqDCoMKgwqDCoCBpZiAoIUVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiANCj4+ID4gLcKgwqDCoMKgwqAgSW5kZXgrKzsNCj4gDQo+PiA+ IC3CoMKgwqDCoMKgIGlmIChJbmRleCA9PSAoc2l6ZW9mIChnUmVxdWlyZWRQcm90b2NvbCkgLyBz aXplb2YNCj4gDQo+PiA+IChSRURGSVNIX0RJU0NPVkVSX1JFUVVJUkVEX1BST1RPQ09MKSkpIHsN Cj4gDQo+PiA+IC3CoMKgwqDCoMKgwqDCoCBicmVhazsNCj4gDQo+PiA+IC3CoMKgwqDCoMKgIH0N Cj4gDQo+PiA+IC0NCj4gDQo+PiA+wqDCoMKgwqDCoMKgwqAgY29udGludWU7DQo+IA0KPj4gPsKg wqDCoMKgwqAgfQ0KPiANCj4+ID4NCj4gDQo+PiA+IEBAIC0xNjMxLDExICsxNzIyLDYgQEAgQnVp bGR1cE5ldHdvcmtJbnRlcmZhY2UgKA0KPiANCj4+ID7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgRUZJX09QRU5fUFJPVE9DT0xfR0VUX1BST1RPQ09MDQo+IA0KPj4g PsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCApOw0KPiANCj4+ID7C oMKgwqDCoMKgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gDQo+PiA+IC3CoMKgwqDCoMKg IEluZGV4Kys7DQo+IA0KPj4gPiAtwqDCoMKgwqDCoCBpZiAoSW5kZXggPT0gKHNpemVvZiAoZ1Jl cXVpcmVkUHJvdG9jb2wpIC8gc2l6ZW9mDQo+IA0KPj4gPiAoUkVERklTSF9ESVNDT1ZFUl9SRVFV SVJFRF9QUk9UT0NPTCkpKSB7DQo+IA0KPj4gPiAtwqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+IA0K Pj4gPiAtwqDCoMKgwqDCoCB9DQo+IA0KPj4gPiAtDQo+IA0KPj4gPsKgwqDCoMKgwqDCoMKgIGNv bnRpbnVlOw0KPiANCj4+ID7CoMKgwqDCoMKgIH0NCj4gDQo+PiA+DQo+IA0KPj4gPiBAQCAtMTY5 NCwxMSArMTc4MCw2IEBAIEJ1aWxkdXBOZXR3b3JrSW50ZXJmYWNlICgNCj4gDQo+PiA+wqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFByb3RvY29sRGlzY292ZXJJZFB0 cg0KPiANCj4+ID7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKTsN Cj4gDQo+PiA+wqDCoMKgwqDCoCBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+IA0KPj4gPiAt wqDCoMKgwqDCoCBJbmRleCsrOw0KPiANCj4+ID4gLcKgwqDCoMKgwqAgaWYgKEluZGV4ID09IChz aXplb2YgKGdSZXF1aXJlZFByb3RvY29sKSAvIHNpemVvZg0KPiANCj4+ID4gKFJFREZJU0hfRElT Q09WRVJfUkVRVUlSRURfUFJPVE9DT0wpKSkgew0KPiANCj4+ID4gLcKgwqDCoMKgwqDCoMKgIGJy ZWFrOw0KPiANCj4+ID4gLcKgwqDCoMKgwqAgfQ0KPiANCj4+ID4gLQ0KPiANCj4+ID7CoMKgwqDC oMKgwqDCoCBjb250aW51ZTsNCj4gDQo+PiA+wqDCoMKgwqDCoCB9DQo+IA0KPj4gPg0KPiANCj4+ ID4gQEAgLTE3NTUsMjUgKzE4MzYsMTMgQEAgQnVpbGR1cE5ldHdvcmtJbnRlcmZhY2UgKA0KPiAN Cj4+ID7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0NCj4gDQo+PiA+wqDCoMKgwqDCoMKgwqDCoMKg IH0gZWxzZSB7DQo+IA0KPj4gPsKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgREVCVUcgKChERUJVR19N QU5BR0VBQklMSVRZLCAiJWE6IE5vdCBSRVNUIEVYLCBjb250aW51ZQ0KPiANCj4+ID4gd2l0aCBu ZXh0XG4iLCBfX2Z1bmNfXykpOw0KPiANCj4+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoCBJbmRleCsr Ow0KPiANCj4+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoSW5kZXggPT0gKHNpemVvZiAoZ1Jl cXVpcmVkUHJvdG9jb2wpIC8gc2l6ZW9mDQo+IA0KPj4gPiAoUkVERklTSF9ESVNDT1ZFUl9SRVFV SVJFRF9QUk9UT0NPTCkpKSB7DQo+IA0KPj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVh azsNCj4gDQo+PiA+IC3CoMKgwqDCoMKgwqDCoMKgwqAgfQ0KPiANCj4+ID4gLQ0KPiANCj4+ID7C oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOw0KPiANCj4+ID7CoMKgwqDCoMKgwqDCoMKg wqAgfQ0KPiANCj4+ID7CoMKgwqDCoMKgwqDCoCB9DQo+IA0KPj4gPg0KPiANCj4+ID7CoMKgwqDC oMKgwqDCoCByZXR1cm4gU3RhdHVzOw0KPiANCj4+ID4gLcKgwqDCoCB9IGVsc2Ugew0KPiANCj4+ ID4gLcKgwqDCoMKgwqAgSW5kZXgrKzsNCj4gDQo+PiA+IC3CoMKgwqDCoMKgIGlmIChJbmRleCA9 PSAoc2l6ZW9mIChnUmVxdWlyZWRQcm90b2NvbCkgLyBzaXplb2YNCj4gDQo+PiA+IChSRURGSVNI X0RJU0NPVkVSX1JFUVVJUkVEX1BST1RPQ09MKSkpIHsNCj4gDQo+PiA+IC3CoMKgwqDCoMKgwqDC oCBicmVhazsNCj4gDQo+PiA+IC3CoMKgwqDCoMKgIH0NCj4gDQo+PiA+IC0NCj4gDQo+PiA+IC3C oMKgwqDCoMKgIGNvbnRpbnVlOw0KPiANCj4+ID7CoMKgwqDCoMKgIH0NCj4gDQo+PiA+IC3CoCB9 IHdoaWxlIChJbmRleCA8IChzaXplb2YgKGdSZXF1aXJlZFByb3RvY29sKSAvIHNpemVvZg0KPiAN Cj4+ID4gKFJFREZJU0hfRElTQ09WRVJfUkVRVUlSRURfUFJPVE9DT0wpKSk7DQo+IA0KPj4gPiAr wqAgfQ0KPiANCj4+ID4NCj4gDQo+PiA+wqDCoMKgIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0K PiANCj4+ID7CoCB9DQo+IA0KPj4gPiAtLQ0KPiANCj4+ID4gMi4zNy4xLndpbmRvd3MuMQ0KPiAN Cj4+ID4gLVRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhpcyBtZXNzYWdlIG1heSBiZSBj b25maWRlbnRpYWwgYW5kDQo+IA0KPj4gPiBwcm9wcmlldGFyeSB0byBBbWVyaWNhbiBNZWdhdHJl bmRzIChBTUkpLiBUaGlzIGNvbW11bmljYXRpb24gaXMNCj4gDQo+PiA+IGludGVuZGVkIHRvIGJl IHJlYWQgb25seSBieSB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdG8gd2hvbSBpdCBpcw0KPiAN Cj4+ID4gYWRkcmVzc2VkIG9yIGJ5IHRoZWlyIGRlc2lnbmVlLiBJZiB0aGUgcmVhZGVyIG9mIHRo aXMgbWVzc2FnZSBpcyBub3QNCj4gDQo+PiA+IHRoZSBpbnRlbmRlZCByZWNpcGllbnQsIHlvdSBh cmUgb24gbm90aWNlIHRoYXQgYW55IGRpc3RyaWJ1dGlvbiBvZg0KPiANCj4+ID4gdGhpcyBtZXNz YWdlLCBpbiBhbnkgZm9ybSwgaXMgc3RyaWN0bHkgcHJvaGliaXRlZC4gUGxlYXNlIHByb21wdGx5 DQo+IA0KPj4gPiBub3RpZnkgdGhlIHNlbmRlciBieSByZXBseSBlLW1haWwgb3IgYnkgdGVsZXBo b25lIGF0IDc3MC0yNDYtODYwMCwgYW5kIHRoZW4NCj4gDQo+PiBkZWxldGUgb3IgZGVzdHJveSBh bGwgY29waWVzIG9mIHRoZSB0cmFuc21pc3Npb24uDQo+IA0KPj4gDQo+IA0KPj4gDQo+IA0KPj4g DQo+IA0KPj4gDQo+IA0KPiANCg0KDQoKLT0tPS09LT0tPS09LT0tPS09LT0tPS0KR3JvdXBzLmlv IExpbmtzOiBZb3UgcmVjZWl2ZSBhbGwgbWVzc2FnZXMgc2VudCB0byB0aGlzIGdyb3VwLgpWaWV3 L1JlcGx5IE9ubGluZSAoIzExMDk4OCk6IGh0dHBzOi8vZWRrMi5ncm91cHMuaW8vZy9kZXZlbC9t ZXNzYWdlLzExMDk4OApNdXRlIFRoaXMgVG9waWM6IGh0dHBzOi8vZ3JvdXBzLmlvL210LzEwMjQ4 NTcxMi83Njg2MTc2Ckdyb3VwIE93bmVyOiBkZXZlbCtvd25lckBlZGsyLmdyb3Vwcy5pbwpVbnN1 YnNjcmliZTogaHR0cHM6Ly9lZGsyLmdyb3Vwcy5pby9nL2RldmVsL2xlYXZlLzEyMzY3MTExLzc2 ODYxNzYvMTkxMzQ1NjIxMi94eXp6eSBbcmViZWNjYUBvcGVuZncuaW9dCi09LT0tPS09LT0tPS09 LT0tPS09LT0tCgoNCg==