From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0b-002e3701.pphosted.com (mx0b-002e3701.pphosted.com [148.163.143.35]) by mx.groups.io with SMTP id smtpd.web09.4703.1603951958290232310 for ; Wed, 28 Oct 2020 23:12:38 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@hpe.com header.s=pps0720 header.b=DXr0sLR3; spf=pass (domain: hpe.com, ip: 148.163.143.35, mailfrom: prvs=05714af0d0=abner.chang@hpe.com) Received: from pps.filterd (m0148664.ppops.net [127.0.0.1]) by mx0b-002e3701.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 09T6CasV013698; Thu, 29 Oct 2020 06:12:37 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hpe.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=pps0720; bh=HNB9q1XMGicGROov7z0GmbnLwtHeYmBxT67LUuN264g=; b=DXr0sLR3sWquQ7vH14NN5FGYSRWnvoD7MP/OcQbhx+DqyTbw1mNEgNhO9fYwl16yY/Xh /xW15u7rImulv5r0Mt0Bj0OZHXTKiq/1zMT4aBUCo4psbAT+XOMcAFPWP3+ZP5nxa62p WsjXemqsGeLYwQulOSfjN3lXf1vt3tkUf59NSzd2w/XDXiIM+CVLpXxAjrSbjJkSL5n2 4i+7WqnWKAKYXmMsrXcs39RGtSgRBI+5wjmuDGZ+RGOiEcAg1feVd9Uz/Wvi81Ntu8eF n2+kk+pXWV0LWRA1ayLlL7dVq0f79F/ydhYfk6Ulcdiv+3+193LObm1idN0twb/kfQ3n AA== Received: from g4t3427.houston.hpe.com (g4t3427.houston.hpe.com [15.241.140.73]) by mx0b-002e3701.pphosted.com with ESMTP id 34ep7ercje-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 29 Oct 2020 06:12:36 +0000 Received: from G2W6311.americas.hpqcorp.net (g2w6311.austin.hp.com [16.197.64.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by g4t3427.houston.hpe.com (Postfix) with ESMTPS id 6C1117E; Thu, 29 Oct 2020 06:12:22 +0000 (UTC) Received: from G4W9336.americas.hpqcorp.net (16.208.33.86) by G2W6311.americas.hpqcorp.net (16.197.64.53) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 29 Oct 2020 06:11:52 +0000 Received: from G2W6311.americas.hpqcorp.net (16.197.64.53) by G4W9336.americas.hpqcorp.net (16.208.33.86) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 29 Oct 2020 06:11:51 +0000 Received: from NAM04-DM6-obe.outbound.protection.outlook.com (15.241.52.11) by G2W6311.americas.hpqcorp.net (16.197.64.53) with Microsoft SMTP Server (TLS) id 15.0.1497.2 via Frontend Transport; Thu, 29 Oct 2020 06:11:51 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=elWm6cFb3OCw4kwE9UGPKB++vpNsYO1w9PmNf3uzM2tJCojSiJFEIj30KOb/1v7hRUY8wht02W+oJ1eeBXqy2sQ9Jfm2BwWlmlkgESWjAziS0NNlNJh5DUt3IQqxxLII61x8CFQqo+XoLX4gq9x6gdCh77edHoweGpZcg7dwwYJnk/yN1SQap3bMNZYVGh5um1H4PgHODA2JhECTzG6cIOhXupYnPKBdFo8XEWElnIeNZzrQUzBGQHAFtnlinxeJnMKMtTyoSu1Pjw0Opms1vq3OkFup3z/hKfI2m1wb6h5CIyZPYZb81Y2tvGj9b823UJGsVE+JWz2d75wi0dtkvA== 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=SG7F4m1hmV2YAGRWmVbPjRMf5Xq+YlCLrY3PHqfAPqI=; b=AJDHC5kNm3GKptM/ymHNo+X6/iNZGpdTcNxITJQDQytOO/cfOhB0UYHjgzehNgyCs+a5OLsv0krUE3Plw2ZHC7elTNTyrpxNb4nznB3IxtUcU0d5CpNv+LKul8WHOAJFTwu/GsqTYvvHmQglvjQln++gbxcelmouI50FN2RGaYMpGgifysbvY1NevoyKMIj031iMP/WRRahvSB9e5IWnliEBNqqpSdRQS3TVlPEzSOAejolzjatlBR7eRr/H0olYk3sPIoxN/z7M6YyNjS4oPNDl7nvQmX+qq/qY9NF7YZV+04xamBtUVNmFW6qDQ8Phqtupt6Ky9AQSc3qyri6ETw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=hpe.com; dmarc=pass action=none header.from=hpe.com; dkim=pass header.d=hpe.com; arc=none Received: from CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM (2a01:111:e400:7508::16) by CS1PR8401MB0710.NAMPRD84.PROD.OUTLOOK.COM (2a01:111:e400:750d::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3477.20; Thu, 29 Oct 2020 06:11:49 +0000 Received: from CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM ([fe80::f4a5:2722:be1c:7222]) by CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM ([fe80::f4a5:2722:be1c:7222%6]) with mapi id 15.20.3477.029; Thu, 29 Oct 2020 06:11:49 +0000 From: "Abner Chang" To: "Rabeda, Maciej" , "devel@edk2.groups.io" CC: Jiaxin Wu , Siyuan Fu , "Wang, Nickle (HPS SW)" Subject: Re: [edk2-devel] [DxeHttpIoLib PATCH V2 1/3] NetworkPkg/Library: Implementation of Http IO Helper Library Thread-Topic: [edk2-devel] [DxeHttpIoLib PATCH V2 1/3] NetworkPkg/Library: Implementation of Http IO Helper Library Thread-Index: AQHWqVkEIIf+aozq3EiZb39ZTth0kqmpI2IggAQ57ICAAL9XAA== Date: Thu, 29 Oct 2020 06:11:49 +0000 Message-ID: References: <20201020023848.3015-1-abner.chang@hpe.com> <20201020023848.3015-2-abner.chang@hpe.com> <036e09c1-d1c8-8d8b-44fb-7f252ccf1bad@linux.intel.com> <909b9d7b-9018-fe0a-a9f7-f6477403f84d@linux.intel.com> In-Reply-To: <909b9d7b-9018-fe0a-a9f7-f6477403f84d@linux.intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: linux.intel.com; dkim=none (message not signed) header.d=none;linux.intel.com; dmarc=none action=none header.from=hpe.com; x-originating-ip: [16.242.247.131] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: cbc85695-d1af-4e07-3511-08d87bd18598 x-ms-traffictypediagnostic: CS1PR8401MB0710: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:7219; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: NkSPjSd2ZwFInsNyckNTY4SVlRZxt2cKBVCFI37ex03X1+89pxu1FmRj2meVso/HFwtfdAGiyjxY3yzDPU7zA9KtwUjBHAISmqbJRjXtVjtkZvcfrfvy2xgC3CdFAMG4NhELJsCtmYJh/7J8RG9g8+mrTETLavQhJ+SCkD0WmxgJ8pdoUSJ09D8XgCEJW7TycCzRV5GZMJtai3vBIa2TGNfQe3aqRpyDFewNNHO83lTYd7rQRSwD9YixuYGCsXXL3QrTQwHS7u8RkFGpsh6WN9rEfK7lZIw8ZyRRX8nri9XkLp1+iwNplgIxL8GExJPFH+WcSRQnqzYXO8WWqtqE0Nr4hG+F7ie0a7UwCfEY7oKpocD1oj4zK2JO4mc0IeU98T3VRgNFipc+Y6eA+Xiz6w== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(6029001)(39860400002)(136003)(346002)(376002)(366004)(396003)(26005)(8936002)(9686003)(71200400001)(86362001)(8676002)(110136005)(66446008)(33656002)(76116006)(66946007)(66556008)(316002)(30864003)(66476007)(54906003)(4326008)(6506007)(5660300002)(83380400001)(53546011)(7696005)(186003)(478600001)(64756008)(19627235002)(55016002)(966005)(2906002)(52536014)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: 2oPaf4tOr++KDa87iqAb2XLzjeBTzDLa07IbNWpFSPBojBJdXs2ZCNKAlNgDuM9HRuaUZYyPUyVDgKapP3802jnOYJfPtxNGHv584tH8bDTfh/J5qAYOXd8okRpCNByHXO5qSw6haQgEu2usC6epJ+JI8etAjbv+8C8LHTBZ70oC9xFoMo/qSC62l0RXM2A9URNJZpkggguRbA3wvIiZdrzxzH4s7Olb29lTeBpKGiI/2fTwrqe4cqsrZ+h1t92LT2+D4ndkdk6m10UL/RGGP7yqbrlmatc+QLN8lX+XQXKaeKdbge2c47FD3uLJ9PSPfl8zO1fbQfYnt8kmVY5W3a+bgYZfWYM/BLgetdewWrEpfKS3WRb92Iu2DlImFHKGZZw7i302Ks3glZbh14RIoyKwQqXica5jmaw6bVwJ/fnqgdW4dx7Lbi0oXhPrs1OQJXApagrqO9ClcIh7oDwQ128Rle9zmfZC76g32VHEIXItJ2+FZvjWBpaiDPIaFqvLN354fkq8koka30oRAj936crE/fL0wVFp+dejXQr4jmYEXRvf5i4z1ja7pHvaWjbWIObvQ7QILJmeRC/o4NcsHaAcaCGvOc5xsi3kOhEDODwhOY9ZUWks2N38QSqAmrfqSys0+XVpKZTeB/dhykR7Rw== X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: cbc85695-d1af-4e07-3511-08d87bd18598 X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Oct 2020 06:11:49.1141 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 105b2061-b669-4b31-92ac-24d304d195dc X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: ufWAnF9yKp1xyXrRe75aGVZWxZeigNlP0Yc8tTZGZmiK0/P1FNtBKVCqdCFcACB68t8+FOCWISAN+0GKMXYqmg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CS1PR8401MB0710 X-OriginatorOrg: hpe.com X-Proofpoint-UnRewURL: 0 URL was un-rewritten MIME-Version: 1.0 X-HPE-SCL: -1 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.312,18.0.737 definitions=2020-10-29_01:2020-10-29,2020-10-29 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxlogscore=999 lowpriorityscore=0 malwarescore=0 clxscore=1015 priorityscore=1501 impostorscore=0 phishscore=0 adultscore=0 bulkscore=0 spamscore=0 mlxscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2010290045 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogUmFiZWRhLCBNYWNpZWog W21haWx0bzptYWNpZWoucmFiZWRhQGxpbnV4LmludGVsLmNvbV0NCj4gU2VudDogVGh1cnNkYXks IE9jdG9iZXIgMjksIDIwMjAgMjoyOCBBTQ0KPiBUbzogZGV2ZWxAZWRrMi5ncm91cHMuaW87IENo YW5nLCBBYm5lciAoSFBTIFNXL0ZXIFRlY2hub2xvZ2lzdCkNCj4gPGFibmVyLmNoYW5nQGhwZS5j b20+DQo+IENjOiBKaWF4aW4gV3UgPGppYXhpbi53dUBpbnRlbC5jb20+OyBTaXl1YW4gRnUgPHNp eXVhbi5mdUBpbnRlbC5jb20+Ow0KPiBXYW5nLCBOaWNrbGUgKEhQUyBTVykgPG5pY2tsZS53YW5n QGhwZS5jb20+DQo+IFN1YmplY3Q6IFJlOiBbZWRrMi1kZXZlbF0gW0R4ZUh0dHBJb0xpYiBQQVRD SCBWMiAxLzNdIE5ldHdvcmtQa2cvTGlicmFyeToNCj4gSW1wbGVtZW50YXRpb24gb2YgSHR0cCBJ TyBIZWxwZXIgTGlicmFyeQ0KPiANCj4gVGhhbmtzIGZvciBwYXRjaGluZyBzcGVsbGluZyBwcm9i bGVtcyBpbiBNZGVQa2cgaGVhZGVyLg0KPiBJIHdpbGwgc2VuZCBtb3JlIGNvbW1lbnRzIG9uIHYz LiBBZGRlZCBvbmUgaGVyZSByZWdhcmRpbmcgY2h1bmsgdHJhbnNmZXINCj4gc2VjdXJpdHkuDQo+ IA0KPiBUaGFua3MsDQo+IE1hY2llag0KPiANCj4gT24gMjYtT2N0LTIwIDA3OjUzLCBBYm5lciBD aGFuZyB3cm90ZToNCj4gPiBUaGFua3MgZm9yIHJldmlld2luZyB0aGlzIE1hY2llai4NCj4gPg0K PiA+IE1vc3Qgb2YgY29tbWVudHMgYXJlIGFkZHJlc3NlZC4gSSBhbHNvIHN1Ym1pdHRlZCBhIEJa IGZvciB0aGUgd3JvbmcNCj4gc3BlbGxpbmcgb2YgQ0hVTktfVFJOQVNGRVJfKiwgdGhlIHBhdGNo IGlzIGFscmVhZHkgc2VudC4NCj4gPiBWMyBvZiB0aGlzIHBhdGNoIHNldCBpcyBhbHNvIHNlbnQg dG8gdGhlIG1haWxpbmcgbGlzdC4NCj4gPg0KPiA+IE90aGVyIGZlZWRiYWNrcyAgYXJlIGluIGJl bG93LA0KPiA+DQo+ID4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4+IEZyb206IFJh YmVkYSwgTWFjaWVqIFttYWlsdG86bWFjaWVqLnJhYmVkYUBsaW51eC5pbnRlbC5jb21dDQo+ID4+ IFNlbnQ6IFNhdHVyZGF5LCBPY3RvYmVyIDI0LCAyMDIwIDEyOjI1IEFNDQo+ID4+IFRvOiBkZXZl bEBlZGsyLmdyb3Vwcy5pbzsgQ2hhbmcsIEFibmVyIChIUFMgU1cvRlcgVGVjaG5vbG9naXN0KQ0K PiA+PiA8YWJuZXIuY2hhbmdAaHBlLmNvbT4NCj4gPj4gQ2M6IEppYXhpbiBXdSA8amlheGluLnd1 QGludGVsLmNvbT47IFNpeXVhbiBGdSA8c2l5dWFuLmZ1QGludGVsLmNvbT47DQo+ID4+IFdhbmcs IE5pY2tsZSAoSFBTIFNXKSA8bmlja2xlLndhbmdAaHBlLmNvbT4NCj4gPj4gU3ViamVjdDogUmU6 IFtlZGsyLWRldmVsXSBbRHhlSHR0cElvTGliIFBBVENIIFYyIDEvM10NCj4gTmV0d29ya1BrZy9M aWJyYXJ5Og0KPiA+PiBJbXBsZW1lbnRhdGlvbiBvZiBIdHRwIElPIEhlbHBlciBMaWJyYXJ5DQo+ ID4+DQo+ID4+IEhpIEFibmVyLA0KPiA+Pg0KPiA+PiBJIHVuZGVyc3RhbmQgdGhlIGNvbmNlcHQg b2YgbW92aW5nIEhUVFAgSS9PIGxheWVyIG91dHNpZGUgSHR0cEJvb3REeGUNCj4gYW5kDQo+ID4+ IGludG8gYSBzZXBhcmF0ZSBsaWJyYXJ5IGFuZCBJIGFwcHJvdmUgaXQuDQo+ID4+IEhvd2V2ZXIs IHRoZXJlIGFyZSBzb21lIHRoaW5ncyB0aGF0IGhhdmUgdG8gYWRkcmVzc2VkL2ZpeGVkL2V4cGxh aW5lZA0KPiA+PiBoZXJlLg0KPiA+PiBTZWUgY29tbWVudHMgd2l0aGluIHRoZSBwYXRjaC4NCj4g Pj4NCj4gPj4gT24gMjAtT2N0LTIwIDA0OjM4LCBBYm5lciBDaGFuZyB3cm90ZToNCj4gPj4+IEFk ZCBIVFRQIElPIGhlbHBlciBsaWJyYXJ5IHdoaWNoIGNvdWxkIGJlIHN1ZWQgYnkgSFRUUCBhcHBs aWNhdGlvbnMNCj4gPj4+IHN1Y2ggYXMgSFRUUCBCb290LCBSZWRmaXNoIEhUVFAgUkVTVCBFWCBk cml2ZXIgaW5zdGFuY2UgYW5kIGV0Yy4NCj4gPj4+DQo+ID4+PiBTaWduZWQtb2ZmLWJ5OiBBYm5l ciBDaGFuZyA8YWJuZXIuY2hhbmdAaHBlLmNvbT4NCj4gPj4+DQo+ID4+PiBDYzogTWFjaWVqIFJh YmVkYSA8bWFjaWVqLnJhYmVkYUBsaW51eC5pbnRlbC5jb20+DQo+ID4+PiBDYzogSmlheGluIFd1 IDxqaWF4aW4ud3VAaW50ZWwuY29tPg0KPiA+Pj4gQ2M6IFNpeXVhbiBGdSA8c2l5dWFuLmZ1QGlu dGVsLmNvbT4NCj4gPj4+IENjOiBOaWNrbGUgV2FuZyA8bmlja2xlLndhbmdAaHBlLmNvbT4NCj4g Pj4+IC0tLQ0KPiA+Pj4gICAgTmV0d29ya1BrZy9JbmNsdWRlL0xpYnJhcnkvSHR0cElvTGliLmgg ICAgICAgIHwgMzI4ICsrKysrKysNCj4gPj4+ICAgIC4uLi9MaWJyYXJ5L0R4ZUh0dHBJb0xpYi9E eGVIdHRwSW9MaWIuYyAgICAgICB8IDgwOQ0KPiArKysrKysrKysrKysrKysrKysNCj4gPj4+ICAg IC4uLi9MaWJyYXJ5L0R4ZUh0dHBJb0xpYi9EeGVIdHRwSW9MaWIuaW5mICAgICB8ICA0MyArDQo+ ID4+PiAgICAuLi4vTGlicmFyeS9EeGVIdHRwSW9MaWIvRHhlSHR0cElvTGliLnVuaSAgICAgfCAg MTMgKw0KPiA+Pj4gICAgNCBmaWxlcyBjaGFuZ2VkLCAxMTkzIGluc2VydGlvbnMoKykNCj4gPj4+ ICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBOZXR3b3JrUGtnL0luY2x1ZGUvTGlicmFyeS9IdHRwSW9M aWIuaA0KPiA+Pj4gICAgY3JlYXRlIG1vZGUgMTAwNjQ0IE5ldHdvcmtQa2cvTGlicmFyeS9EeGVI dHRwSW9MaWIvRHhlSHR0cElvTGliLmMNCj4gPj4+ICAgIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiBO ZXR3b3JrUGtnL0xpYnJhcnkvRHhlSHR0cElvTGliL0R4ZUh0dHBJb0xpYi5pbmYNCj4gPj4+ICAg IGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiBOZXR3b3JrUGtnL0xpYnJhcnkvRHhlSHR0cElvTGliL0R4 ZUh0dHBJb0xpYi51bmkNCj4gPj4+DQo+ID4+PiBkaWZmIC0tZ2l0IGEvTmV0d29ya1BrZy9JbmNs dWRlL0xpYnJhcnkvSHR0cElvTGliLmgNCj4gPj4+IGIvTmV0d29ya1BrZy9JbmNsdWRlL0xpYnJh cnkvSHR0cElvTGliLmgNCj4gPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4+PiBpbmRleCAw MDAwMDAwMDAwLi44ZjM4MDRjYTQyDQo+ID4+PiAtLS0gL2Rldi9udWxsDQo+ID4+PiArKysgYi9O ZXR3b3JrUGtnL0luY2x1ZGUvTGlicmFyeS9IdHRwSW9MaWIuaA0KPiA+Pj4gQEAgLTAsMCArMSwz MjggQEANCj4gPj4+ICsvKiogQGZpbGUNCj4gPj4+ICsgIEh0dHBJb0xpYi5oLg0KPiA+Pj4gKw0K PiA+Pj4gKyhDKSBDb3B5cmlnaHQgMjAyMCBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29t cGFueSwgTC5QLjxCUj4NCj4gPj4+ICtTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xh dXNlLVBhdGVudA0KPiA+Pj4gKw0KPiA+Pj4gKyoqLw0KPiA+Pj4gKw0KPiA+Pj4gKyNpZm5kZWYg SFRUUF9JT19MSUJfSF8NCj4gPj4+ICsjZGVmaW5lIEhUVFBfSU9fTElCX0hfDQo+ID4+PiArDQo+ ID4+PiArI2luY2x1ZGUgPEluZHVzdHJ5U3RhbmRhcmQvSHR0cDExLmg+DQo+ID4+PiArDQo+ID4+ PiArI2luY2x1ZGUgPExpYnJhcnkvRHBjTGliLmg+DQo+ID4+PiArI2luY2x1ZGUgPExpYnJhcnkv SHR0cExpYi5oPg0KPiA+Pj4gKyNpbmNsdWRlIDxMaWJyYXJ5L05ldExpYi5oPg0KPiA+Pj4gKw0K PiA+Pj4gKyNkZWZpbmUgSFRUUF9JT19NQVhfU0VORF9QQVlMT0FEICAgICAgICAgICAgICAgICAg ICAxMDI0DQo+ID4+PiArI2RlZmluZSBIVFRQX0lPX0NIVU5LX1NJWkVfU1RSSU5HX0xFTiAgICAg ICAgICAgICAgIDUwDQo+ID4+PiArI2RlZmluZSBIVFRQX0lPX0NIVU5LRURfVFJBTlNGRVJfQ09E SU5HX0RBVEFfTEVOR1RIIDI1Ng0KPiA+Pj4gKw0KPiA+Pj4gKy8vLw0KPiA+Pj4gKy8vLyBIVFRQ X0lPX0NBTExCQUNLX0VWRU5UDQo+ID4+PiArLy8vDQo+ID4+PiArdHlwZWRlZiBlbnVtIHsNCj4g Pj4+ICsgIEh0dHBJb1JlcXVlc3QsDQo+ID4+PiArICBIdHRwSW9SZXNwb25zZQ0KPiA+Pj4gK30g SFRUUF9JT19DQUxMQkFDS19FVkVOVDsNCj4gPj4+ICsNCj4gPj4+ICsvKioNCj4gPj4+ICsgIEh0 dHBJbyBDYWxsYmFjayBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIGludm9rZWQgd2hlbiBzcGVjaWZp ZWQNCj4gPj4gSFRUUF9JT19DQUxMQkFDS19FVkVOVCBoYXBwZW5lZC4NCj4gPj4+ICsNCj4gPj4+ ICsgIEBwYXJhbVtpbl0gICAgRXZlbnRUeXBlICAgICAgSW5kaWNhdGUgdGhlIEV2ZW50IHR5cGUg dGhhdCBvY2N1cnMgaW4gdGhlDQo+ID4+IGN1cnJlbnQgY2FsbGJhY2suDQo+ID4+PiArICBAcGFy YW1baW5dICAgIE1lc3NhZ2UgICAgICAgIEhUVFAgbWVzc2FnZSB3aGljaCB3aWxsIGJlIHNlbmQg dG8sIG9yIGp1c3QNCj4gPj4gcmVjZWl2ZWQgZnJvbSBIVFRQIHNlcnZlci4NCj4gPj4+ICsgIEBw YXJhbVtpbl0gICAgQ29udGV4dCAgICAgICAgVGhlIENhbGxiYWNrIENvbnRleHQgcG9pbnRlci4N Cj4gPj4+ICsNCj4gPj4+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgVGVsbHMgdGhl IEh0dHBJbyB0byBjb250aW51ZSB0aGUgSFRUUA0KPiBwcm9jZXNzLg0KPiA+Pj4gKyAgQHJldHZh bCBPdGhlcnMgICAgICAgICAgICAgICBUZWxscyB0aGUgSHR0cElvIHRvIGFib3J0IHRoZSBjdXJy ZW50IEhUVFANCj4gcHJvY2Vzcy4NCj4gPj4+ICsqKi8NCj4gPj4+ICt0eXBlZGVmDQo+ID4+PiAr RUZJX1NUQVRVUw0KPiA+Pj4gKyhFRklBUEkgKiBIVFRQX0lPX0NBTExCQUNLKSAoDQo+ID4+PiAr ICBJTiAgSFRUUF9JT19DQUxMQkFDS19FVkVOVCAgICBFdmVudFR5cGUsDQo+ID4+PiArICBJTiAg RUZJX0hUVFBfTUVTU0FHRSAgICAgICAgICAqTWVzc2FnZSwNCj4gPj4+ICsgIElOICBWT0lEICAg ICAgICAgICAgICAgICAgICAgICpDb250ZXh0DQo+ID4+PiArICApOw0KPiA+Pj4gKw0KPiA+Pj4g Ky8vLw0KPiA+Pj4gKy8vLyBBIHdyYXBwZXIgc3RydWN0dXJlIHRvIGhvbGQgdGhlIHJlY2VpdmVk IEhUVFAgcmVzcG9uc2UgZGF0YS4NCj4gPj4+ICsvLy8NCj4gPj4+ICt0eXBlZGVmIHN0cnVjdCB7 DQo+ID4+PiArICBFRklfSFRUUF9SRVNQT05TRV9EQVRBICAgICAgUmVzcG9uc2U7DQo+ID4+PiAr ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgSGVhZGVyQ291bnQ7DQo+ID4+PiArICBFRklf SFRUUF9IRUFERVIgICAgICAgICAgICAgKkhlYWRlcnM7DQo+ID4+PiArICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgQm9keUxlbmd0aDsNCj4gPj4+ICsgIENIQVI4ICAgICAgICAgICAgICAg ICAgICAgICAqQm9keTsNCj4gPj4+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICBTdGF0 dXM7DQo+ID4+PiArfSBIVFRQX0lPX1JFU1BPTlNFX0RBVEE7DQo+ID4+PiArDQo+ID4+PiArLy8v DQo+ID4+PiArLy8vIEhUVFBfSU8gY29uZmlndXJhdGlvbiBkYXRhIGZvciBJUHY0IC8vLyB0eXBl ZGVmIHN0cnVjdCB7DQo+ID4+PiArICBFRklfSFRUUF9WRVJTSU9OICAgICAgICAgIEh0dHBWZXJz aW9uOw0KPiA+Pj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0VGltZU91dDsg IC8vLzwgSW4gbWlsbGlzZWNvbmRzLg0KPiA+Pj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAg ICBSZXNwb25zZVRpbWVPdXQ7IC8vLzwgSW4gbWlsbGlzZWNvbmRzLg0KPiA+Pj4gKyAgQk9PTEVB TiAgICAgICAgICAgICAgICAgICBVc2VEZWZhdWx0QWRkcmVzczsNCj4gPj4+ICsgIEVGSV9JUHY0 X0FERFJFU1MgICAgICAgICAgTG9jYWxJcDsNCj4gPj4+ICsgIEVGSV9JUHY0X0FERFJFU1MgICAg ICAgICAgU3VibmV0TWFzazsNCj4gPj4+ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgTG9j YWxQb3J0Ow0KPiA+Pj4gK30gSFRUUDRfSU9fQ09ORklHX0RBVEE7DQo+ID4+PiArDQo+ID4+PiAr Ly8vDQo+ID4+PiArLy8vIEhUVFBfSU8gY29uZmlndXJhdGlvbiBkYXRhIGZvciBJUHY2IC8vLyB0 eXBlZGVmIHN0cnVjdCB7DQo+ID4+PiArICBFRklfSFRUUF9WRVJTSU9OICAgICAgICAgIEh0dHBW ZXJzaW9uOw0KPiA+Pj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0VGltZU91 dDsgIC8vLzwgSW4gbWlsbGlzZWNvbmRzLg0KPiA+Pj4gKyAgQk9PTEVBTiAgICAgICAgICAgICAg ICAgICBVc2VEZWZhdWx0QWRkcmVzczsNCj4gPj4+ICsgIEVGSV9JUHY2X0FERFJFU1MgICAgICAg ICAgTG9jYWxJcDsNCj4gPj4+ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgTG9jYWxQb3J0 Ow0KPiA+Pj4gK30gSFRUUDZfSU9fQ09ORklHX0RBVEE7DQo+ID4+PiArDQo+ID4+PiArLy8vDQo+ ID4+PiArLy8vIEhUVFBfSU8gY29uZmlndXJhdGlvbg0KPiA+Pj4gKy8vLw0KPiA+Pj4gK3R5cGVk ZWYgdW5pb24gew0KPiA+Pj4gKyAgSFRUUDRfSU9fQ09ORklHX0RBVEEgICAgICAgQ29uZmlnNDsN Cj4gPj4+ICsgIEhUVFA2X0lPX0NPTkZJR19EQVRBICAgICAgIENvbmZpZzY7DQo+ID4+PiArfSBI VFRQX0lPX0NPTkZJR19EQVRBOw0KPiA+Pj4gKw0KPiA+Pj4gKy8vLw0KPiA+Pj4gKy8vLyBIVFRQ X0lPIHdyYXBwZXIgb2YgdGhlIEVGSSBIVFRQIHNlcnZpY2UuDQo+ID4+PiArLy8vDQo+ID4+PiAr dHlwZWRlZiBzdHJ1Y3Qgew0KPiA+Pj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICBJcFZl cnNpb247DQo+ID4+PiArICBFRklfSEFORExFICAgICAgICAgICAgICAgIEltYWdlOw0KPiA+Pj4g KyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICBDb250cm9sbGVyOw0KPiA+Pj4gKyAgRUZJX0hB TkRMRSAgICAgICAgICAgICAgICBIYW5kbGU7DQo+ID4+PiArDQo+ID4+PiArICBFRklfSFRUUF9Q Uk9UT0NPTCAgICAgICAgICpIdHRwOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgSFRUUF9JT19DQUxMQkFD SyAgICAgICAgICBDYWxsYmFjazsNCj4gPj4+ICsgIFZPSUQgICAgICAgICAgICAgICAgICAgICAg KkNvbnRleHQ7DQo+ID4+PiArDQo+ID4+PiArICBFRklfSFRUUF9UT0tFTiAgICAgICAgICAgIFJl cVRva2VuOw0KPiA+Pj4gKyAgRUZJX0hUVFBfTUVTU0FHRSAgICAgICAgICBSZXFNZXNzYWdlOw0K PiA+Pj4gKyAgRUZJX0hUVFBfVE9LRU4gICAgICAgICAgICBSc3BUb2tlbjsNCj4gPj4+ICsgIEVG SV9IVFRQX01FU1NBR0UgICAgICAgICAgUnNwTWVzc2FnZTsNCj4gPj4+ICsNCj4gPj4+ICsgIEJP T0xFQU4gICAgICAgICAgICAgICAgICAgSXNUeERvbmU7DQo+ID4+PiArICBCT09MRUFOICAgICAg ICAgICAgICAgICAgIElzUnhEb25lOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgRUZJX0VWRU5UICAgICAg ICAgICAgICAgICBUaW1lb3V0RXZlbnQ7DQo+ID4+PiArICBVSU5UMzIgICAgICAgICAgICAgICAg ICAgIFRpbWVvdXQ7DQo+ID4+PiArfSBIVFRQX0lPOw0KPiA+Pj4gKw0KPiA+Pj4gKy8vLw0KPiA+ Pj4gKy8vLyBQcm9jZXNzIGNvZGUgb2YgSFRUUCBjaHVuayB0cmFuc2Zlci4NCj4gPj4+ICsvLy8N Cj4gPj4+ICt0eXBlZGVmIGVudW0gIHsNCj4gPj4+ICsgIEh0dHBJb1NlbmRDaHVua05vbmUgPSAw LA0KPiA+Pj4gKyAgSHR0cElvU2VuZENodW5rSGVhZGVyWmVyb0NvbnRlbnQsDQo+ID4+PiArICBI dHRwSW9TZW5kQ2h1bmtDb250ZW50LA0KPiA+Pj4gKyAgSHR0cElvU2VuZENodW5rRW5kQ2h1bmss DQo+ID4+PiArICBIdHRwSW9TZW5kQ2h1bmtGaW5pc2gNCj4gPj4+ICt9IEhUVFBfSU9fU0VORF9D SFVOS19QUk9DRVNTOw0KPiA+Pj4gKw0KPiA+Pj4gKy8vLw0KPiA+Pj4gKy8vLyBQcm9jZXNzIGNv ZGUgb2YgSFRUUCBub24gY2h1bmsgdHJhbnNmZXIuDQo+ID4+PiArLy8vDQo+ID4+PiArdHlwZWRl ZiBlbnVtICB7DQo+ID4+PiArICBIdHRwSW9TZW5kTm9uQ2h1bmtOb25lID0gMCwNCj4gPj4+ICsg IEh0dHBJb1NlbmROb25DaHVua0hlYWRlclplcm9Db250ZW50LA0KPiA+Pj4gKyAgSHR0cElvU2Vu ZE5vbkNodW5rQ29udGVudCwNCj4gPj4+ICsgIEh0dHBJb1NlbmROb25DaHVua0ZpbmlzaA0KPiA+ Pj4gK30gSFRUUF9JT19TRU5EX05PTl9DSFVOS19QUk9DRVNTOw0KPiA+Pj4gKw0KPiA+Pj4gKy8v Lw0KPiA+Pj4gKy8vLyBDaHVuayBsaW5rcyBmb3IgSFRUUCBjaHVua2VkIHRyYW5zZmVyIGNvZGlu Zy4NCj4gPj4+ICsvLy8NCj4gPj4+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4+PiArICBMSVNUX0VO VFJZICBOZXh0Q2h1bms7DQo+ID4+PiArICBVSU5UTiAgICAgICBMZW5ndGg7DQo+ID4+PiArICBD SEFSOCAgICAgICAqRGF0YTsNCj4gPj4+ICt9IEhUVFBfSU9fQ0hVTktTOw0KPiA+Pj4gKw0KPiA+ Pj4gKy8qKg0KPiA+Pj4gKyAgTm90aWZ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aGVuIGFuIGV2 ZW50IGlzIHRyaWdnZXJlZC4NCj4gPj4+ICsNCj4gPj4+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQg ICAgICAgICBUaGUgb3BhcXVlIHBhcmFtZXRlciB0byB0aGUgZnVuY3Rpb24uDQo+ID4+PiArDQo+ ID4+PiArKiovDQo+ID4+PiArVk9JRA0KPiA+Pj4gK0VGSUFQSQ0KPiA+Pj4gK0h0dHBJb05vdGlm eURwYyAoDQo+ID4+PiArICBJTiBWT0lEICAgICAgICAgICAgICAgICpDb250ZXh0DQo+ID4+PiAr ICApOw0KPiA+Pj4gKw0KPiA+Pj4gKy8qKg0KPiA+Pj4gKyAgUmVxdWVzdCBIdHRwSW9Ob3RpZnlE cGMgYXMgYSBEUEMgYXQgVFBMX0NBTExCQUNLLg0KPiA+Pj4gKw0KPiA+Pj4gKyAgQHBhcmFtW2lu XSAgRXZlbnQgICAgICAgICAgICAgICAgIFRoZSBldmVudCBzaWduYWxlZC4NCj4gPj4+ICsgIEBw YXJhbVtpbl0gIENvbnRleHQgICAgICAgICAgICAgICBUaGUgb3BhcXVlIHBhcmFtZXRlciB0byB0 aGUgZnVuY3Rpb24uDQo+ID4+PiArDQo+ID4+PiArKiovDQo+ID4+PiArVk9JRA0KPiA+Pj4gK0VG SUFQSQ0KPiA+Pj4gK0h0dHBJb05vdGlmeSAoDQo+ID4+PiArICBJTiBFRklfRVZFTlQgICAgICAg ICAgICAgIEV2ZW50LA0KPiA+Pj4gKyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICAqQ29udGV4 dA0KPiA+Pj4gKyAgKTsNCj4gPj4+ICsNCj4gPj4+ICsvKioNCj4gPj4+ICsgIERlc3Ryb3kgdGhl IEhUVFBfSU8gYW5kIHJlbGVhc2UgdGhlIHJlc291cmNlcy4NCj4gPj4+ICsNCj4gPj4+ICsgIEBw YXJhbVtpbl0gIEh0dHBJbyAgICAgICAgICBUaGUgSFRUUF9JTyB3aGljaCB3cmFwcyB0aGUgSFRU UCBzZXJ2aWNlIHRvDQo+IGJlDQo+ID4+IGRlc3Ryb3llZC4NCj4gPj4+ICsNCj4gPj4+ICsqKi8N Cj4gPj4+ICtWT0lEDQo+ID4+PiArSHR0cElvRGVzdHJveUlvICgNCj4gPj4+ICsgIElOIEhUVFBf SU8gICAgICAgICAgICAgICAgKkh0dHBJbw0KPiA+Pj4gKyAgKTsNCj4gPj4+ICsNCj4gPj4+ICsv KioNCj4gPj4+ICsgIENyZWF0ZSBhIEhUVFBfSU8gdG8gYWNjZXNzIHRoZSBIVFRQIHNlcnZpY2Uu IEl0IHdpbGwgY3JlYXRlIGFuZA0KPiA+Pj4gK2NvbmZpZ3VyZQ0KPiA+Pj4gKyAgYSBIVFRQIGNo aWxkIGhhbmRsZS4NCj4gPj4+ICsNCj4gPj4+ICsgIEBwYXJhbVtpbl0gIEltYWdlICAgICAgICAg IFRoZSBoYW5kbGUgb2YgdGhlIGRyaXZlciBpbWFnZS4NCj4gPj4+ICsgIEBwYXJhbVtpbl0gIENv bnRyb2xsZXIgICAgIFRoZSBoYW5kbGUgb2YgdGhlIGNvbnRyb2xsZXIuDQo+ID4+PiArICBAcGFy YW1baW5dICBJcFZlcnNpb24gICAgICBJUF9WRVJTSU9OXzQgb3IgSVBfVkVSU0lPTl82Lg0KPiA+ Pj4gKyAgQHBhcmFtW2luXSAgQ29uZmlnRGF0YSAgICAgVGhlIEhUVFBfSU8gY29uZmlndXJhdGlv biBkYXRhLg0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgQ2FsbGJhY2sgICAgICAgQ2FsbGJhY2sgZnVu Y3Rpb24gd2hpY2ggd2lsbCBiZSBpbnZva2VkIHdoZW4NCj4gPj4gc3BlY2lmaWVkDQo+ID4+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVFRQX0lPX0NBTExCQUNLX0VWRU5UIGhhcHBl bmVkLg0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAgICAgICAgVGhlIENvbnRleHQgZGF0 YSB3aGljaCB3aWxsIGJlIHBhc3NlZCB0byB0aGUNCj4gPj4gQ2FsbGJhY2sgZnVuY3Rpb24uDQo+ ID4+PiArICBAcGFyYW1bb3V0XSBIdHRwSW8gICAgICAgICBUaGUgSFRUUF9JTy4NCj4gPj4+ICsN Cj4gPj4+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgSFRUUF9JTyBpcyBj cmVhdGVkIGFuZCBjb25maWd1cmVkLg0KPiA+Pj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJB TUVURVIgIE9uZSBvciBtb3JlIHBhcmFtZXRlcnMgYXJlDQo+IGludmFsaWQuDQo+ID4+PiArICBA cmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgT25lIG9yIG1vcmUgb2YgdGhlIGNvbnRyb2wg b3B0aW9ucw0KPiBhcmUNCj4gPj4gbm90DQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3VwcG9ydGVkIGluIHRoZSBpbXBsZW1lbnRhdGlvbi4NCj4gPj4+ICsgIEByZXR2 YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICBGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5Lg0KPiA+ Pj4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICAgIEZhaWxlZCB0byBjcmVhdGUgdGhl IEhUVFBfSU8gb3IgY29uZmlndXJlIGl0Lg0KPiA+Pj4gKw0KPiA+Pj4gKyoqLw0KPiA+Pj4gK0VG SV9TVEFUVVMNCj4gPj4+ICtIdHRwSW9DcmVhdGVJbyAoDQo+ID4+PiArICBJTiBFRklfSEFORExF ICAgICAgICAgICAgIEltYWdlLA0KPiA+Pj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICBD b250cm9sbGVyLA0KPiA+Pj4gKyAgSU4gVUlOVDggICAgICAgICAgICAgICAgICBJcFZlcnNpb24s DQo+ID4+PiArICBJTiBIVFRQX0lPX0NPTkZJR19EQVRBICAgICpDb25maWdEYXRhLA0KPiA+Pj4g KyAgSU4gSFRUUF9JT19DQUxMQkFDSyAgICAgICBDYWxsYmFjaywNCj4gPj4+ICsgIElOIFZPSUQg ICAgICAgICAgICAgICAgICAgKkNvbnRleHQsDQo+ID4+PiArICBPVVQgSFRUUF9JTyAgICAgICAg ICAgICAgICpIdHRwSW8NCj4gPj4+ICsgICk7DQo+ID4+PiArDQo+ID4+PiArLyoqDQo+ID4+PiAr ICBTeW5jaHJvbm91c2x5IHNlbmQgYSBIVFRQIFJFUVVFU1QgbWVzc2FnZSB0byB0aGUgc2VydmVy Lg0KPiA+Pj4gKw0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgIEh0dHBJbyAgICAgICAgICAgVGhlIEh0 dHBJbyB3cmFwcGluZyB0aGUgSFRUUCBzZXJ2aWNlLg0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgIFJl cXVlc3QgICAgICAgICAgQSBwb2ludGVyIHRvIHN0b3JhZ2Ugc3VjaCBkYXRhIGFzIFVSTCBhbmQN Cj4gPj4gSFRUUCBtZXRob2QuDQo+ID4+PiArICBAcGFyYW1baW5dICAgSGVhZGVyQ291bnQgICAg ICBOdW1iZXIgb2YgSFRUUCBoZWFkZXIgc3RydWN0dXJlcyBpbg0KPiA+PiBIZWFkZXJzIGxpc3Qu DQo+ID4+PiArICBAcGFyYW1baW5dICAgSGVhZGVycyAgICAgICAgICBBcnJheSBjb250YWluaW5n IGxpc3Qgb2YgSFRUUCBoZWFkZXJzLg0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgIEJvZHlMZW5ndGgg ICAgICAgTGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBIVFRQIGJvZHkuDQo+ID4+PiArICBAcGFyYW1b aW5dICAgQm9keSAgICAgICAgICAgICBCb2R5IGFzc29jaWF0ZWQgd2l0aCB0aGUgSFRUUCByZXF1 ZXN0Lg0KPiA+Pj4gKw0KPiA+Pj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRo ZSBIVFRQIHJlcXVlc3QgaXMgdHJhbnNtaXR0ZWQuDQo+ID4+PiArICBAcmV0dmFsIEVGSV9JTlZB TElEX1BBUkFNRVRFUiAgT25lIG9yIG1vcmUgcGFyYW1ldGVycyBhcmUNCj4gaW52YWxpZC4NCj4g Pj4+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICBGYWlsZWQgdG8gYWxsb2NhdGUg bWVtb3J5Lg0KPiA+Pj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgIEFuIHVuZXhw ZWN0ZWQgbmV0d29yayBvciBzeXN0ZW0NCj4gZXJyb3INCj4gPj4gb2NjdXJyZWQuDQo+ID4+PiAr ICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgICAgT3RoZXIgZXJyb3JzIGFzIGluZGljYXRl ZC4NCj4gPj4+ICsNCj4gPj4+ICsqKi8NCj4gPj4+ICtFRklfU1RBVFVTDQo+ID4+PiArSHR0cElv U2VuZFJlcXVlc3QgKA0KPiA+Pj4gKyAgSU4gIEhUVFBfSU8gICAgICAgICAgICAgICAgKkh0dHBJ bywNCj4gPj4+ICsgIElOICBFRklfSFRUUF9SRVFVRVNUX0RBVEEgICpSZXF1ZXN0LCAgICAgIE9Q VElPTkFMDQo+ID4+PiArICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICBIZWFkZXJDb3VudCwN Cj4gPj4+ICsgIElOICBFRklfSFRUUF9IRUFERVIgICAgICAgICpIZWFkZXJzLCAgICAgIE9QVElP TkFMDQo+ID4+PiArICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICBCb2R5TGVuZ3RoLA0KPiA+ Pj4gKyAgSU4gIFZPSUQgICAgICAgICAgICAgICAgICAgKkJvZHkgICAgICAgICAgT1BUSU9OQUwN Cj4gPj4+ICsgICk7DQo+ID4+PiArDQo+ID4+PiArLyoqDQo+ID4+PiArICBTeW5jaHJvbm91c2x5 IHJlY2VpdmUgYSBIVFRQIFJFU1BPTlNFIG1lc3NhZ2UgZnJvbSB0aGUgc2VydmVyLg0KPiA+Pj4g Kw0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgIEh0dHBJbyAgICAgICAgICAgVGhlIEh0dHBJbyB3cmFw cGluZyB0aGUgSFRUUCBzZXJ2aWNlLg0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgIFJlY3ZNc2dIZWFk ZXIgICAgVFJVRSB0byByZWNlaXZlIGEgbmV3IEhUVFAgcmVzcG9uc2UNCj4gPj4gKGZyb20gbWVz c2FnZSBoZWFkZXIpLg0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFM U0UgdG8gY29udGludWUgcmVjZWl2ZSB0aGUgcHJldmlvdXMgcmVzcG9uc2UNCj4gbWVzc2FnZS4N Cj4gPj4+ICsgIEBwYXJhbVtvdXRdICBSZXNwb25zZURhdGEgICAgIFBvaW50IHRvIGEgd3JhcHBl ciBvZiB0aGUgcmVjZWl2ZWQNCj4gPj4gcmVzcG9uc2UgZGF0YS4NCj4gPj4+ICsNCj4gPj4+ICsg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgSFRUUCByZXNwb25zZSBpcyByZWNl aXZlZC4NCj4gPj4+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBPbmUgb3IgbW9y ZSBwYXJhbWV0ZXJzIGFyZQ0KPiBpbnZhbGlkLg0KPiA+Pj4gKyAgQHJldHZhbCBFRklfT1VUX09G X1JFU09VUkNFUyAgIEZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkuDQo+ID4+PiArICBAcmV0dmFs IEVGSV9ERVZJQ0VfRVJST1IgICAgICAgQW4gdW5leHBlY3RlZCBuZXR3b3JrIG9yIHN5c3RlbQ0K PiBlcnJvcg0KPiA+PiBvY2N1cnJlZC4NCj4gPj4+ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAg ICAgICAgICBPdGhlciBlcnJvcnMgYXMgaW5kaWNhdGVkLg0KPiA+Pj4gKw0KPiA+Pj4gKyoqLw0K PiA+Pj4gK0VGSV9TVEFUVVMNCj4gPj4+ICtIdHRwSW9SZWN2UmVzcG9uc2UgKA0KPiA+Pj4gKyAg SU4gICAgICBIVFRQX0lPICAgICAgICAgICAgICAgICAgKkh0dHBJbywNCj4gPj4+ICsgIElOICAg ICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgIFJlY3ZNc2dIZWFkZXIsDQo+ID4+PiArICBPVVQg ICAgIEhUVFBfSU9fUkVTUE9OU0VfREFUQSAgICAqUmVzcG9uc2VEYXRhDQo+ID4+PiArICApOw0K PiA+Pj4gKw0KPiA+Pj4gKy8qKg0KPiA+Pj4gKyAgR2V0IHRoZSB2YWx1ZSBvZiB0aGUgY29udGVu dCBsZW5ndGggaWYgdGhlcmUgaXMgYSAiQ29udGVudC1MZW5ndGgiDQo+IGhlYWRlci4NCj4gPj4+ ICsNCj4gPj4+ICsgIEBwYXJhbVtpbl0gICAgSGVhZGVyQ291bnQgICAgICAgIE51bWJlciBvZiBI VFRQIGhlYWRlciBzdHJ1Y3R1cmVzIGluDQo+ID4+IEhlYWRlcnMuDQo+ID4+PiArICBAcGFyYW1b aW5dICAgIEhlYWRlcnMgICAgICAgICAgICBBcnJheSBjb250YWluaW5nIGxpc3Qgb2YgSFRUUCBo ZWFkZXJzLg0KPiA+Pj4gKyAgQHBhcmFtW291dF0gICBDb250ZW50TGVuZ3RoICAgICAgUG9pbnRl ciB0byBzYXZlIHRoZSB2YWx1ZSBvZiB0aGUNCj4gY29udGVudA0KPiA+PiBsZW5ndGguDQo+ID4+ PiArDQo+ID4+PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICBTdWNjZXNzZnVs bHkgZ2V0IHRoZSBjb250ZW50IGxlbmd0aC4NCj4gPj4+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VO RCAgICAgICAgICAgIE5vICJDb250ZW50LUxlbmd0aCIgaGVhZGVyIGluIHRoZQ0KPiA+PiBIZWFk ZXJzLg0KPiA+Pj4gKw0KPiA+Pj4gKyoqLw0KPiA+Pj4gK0VGSV9TVEFUVVMNCj4gPj4+ICtIdHRw SW9HZXRDb250ZW50TGVuZ3RoICgNCj4gPj4+ICsgIElOICAgICBVSU5UTiAgICAgICAgICAgICAg ICBIZWFkZXJDb3VudCwNCj4gPj4+ICsgIElOICAgICBFRklfSFRUUF9IRUFERVIgICAgICAqSGVh ZGVycywNCj4gPj4+ICsgIE9VVCAgICBVSU5UTiAgICAgICAgICAgICAgICAqQ29udGVudExlbmd0 aA0KPiA+Pj4gKyAgKTsNCj4gPj4+ICsNCj4gPj4+ICsvKioNCj4gPj4+ICsgIFN5bmNocm9ub3Vz bHkgcmVjZWl2ZSBhIEhUVFAgUkVTUE9OU0UgbWVzc2FnZSBmcm9tIHRoZSBzZXJ2ZXIuDQo+ID4+ PiArDQo+ID4+PiArICBAcGFyYW1baW5dICAgSHR0cElvICAgICAgICAgICBUaGUgSHR0cElvIHdy YXBwaW5nIHRoZSBIVFRQIHNlcnZpY2UuDQo+ID4+PiArICBAcGFyYW1baW5dICAgSGVhZGVyQ291 bnQgICAgICBOdW1iZXIgb2YgaGVhZGVycyBpbiBIZWFkZXJzLg0KPiA+Pj4gKyAgQHBhcmFtW2lu XSAgIEhlYWRlcnMgICAgICAgICAgQXJyYXkgY29udGFpbmluZyBsaXN0IG9mIEhUVFAgaGVhZGVy cy4NCj4gPj4+ICsgIEBwYXJhbVtvdXRdICBDaHVua0xpc3RIZWFkICAgIEEgcG9pbnRlciB0byBy ZWNlaXZjZSBsaXN0IGhlYWQgb2YNCj4gY2h1bmtlZA0KPiA+PiBkYXRhLg0KPiA+Pj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbGVyIGhhcyB0byByZWxlYXNlIG1lbW9yeSBv ZiBDaHVua0xpc3RIZWFkDQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh bmQgYWxsIGxpc3QgZW50cmllcy4NCj4gPj4+ICsgIEBwYXJhbVtvdXRdICBDb250ZW50TGVuZ3Ro ICAgIFRvdGFsIGNvbnRlbnQgbGVuZ3RoDQo+ID4+PiArDQo+ID4+PiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgICAgICAgVGhlIEhUVFAgY2h1bmtlZCB0cmFuc2ZlciBpcyByZWNlaXZlZC4N Cj4gPj4+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICBObyBjaHVua2VkIHRyYW5z ZmVyIGNvZGluZyBoZWFkZXINCj4gZm91bmQuDQo+ID4+PiArICBAcmV0dmFsIEVGSV9PVVRfT0Zf UkVTT1VSQ0VTICAgRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeS4NCj4gPj4+ICsgIEByZXR2YWwg RUZJX0lOVkFMSURfUEFSQU1FVEVSICBJbXByb3BlciBwYXJhbWV0ZXJzLg0KPiA+Pj4gKyAgQHJl dHZhbCBPdGhlcnMgICAgICAgICAgICAgICAgIE90aGVyIGVycm9ycyBhcyBpbmRpY2F0ZWQuDQo+ ID4+PiArDQo+ID4+PiArKiovDQo+ID4+PiArRUZJX1NUQVRVUw0KPiA+Pj4gK0h0dHBJb0dldENo dW5rZWRUcmFuc2ZlckNvbnRlbnQgKA0KPiA+Pj4gKyAgSU4gICAgIEhUVFBfSU8gICAgICAgICAg ICAgICpIdHRwSW8sDQo+ID4+PiArICBJTiAgICAgVUlOVE4gICAgICAgICAgICAgICAgSGVhZGVy Q291bnQsDQo+ID4+PiArICBJTiAgICAgRUZJX0hUVFBfSEVBREVSICAgICAgKkhlYWRlcnMsDQo+ ID4+PiArICBPVVQgICAgTElTVF9FTlRSWSAgICAgICAgICAgKipDaHVua0xpc3RIZWFkLA0KPiA+ Pj4gKyAgT1VUICAgIFVJTlROICAgICAgICAgICAgICAgICpDb250ZW50TGVuZ3RoDQo+ID4+PiAr ICApOw0KPiA+Pj4gKw0KPiA+Pj4gKy8qKg0KPiA+Pj4gKyAgU2VuZCBIVFRQIHJlcXVlc3QgaW4g Y2h1bmtzLg0KPiA+Pj4gKw0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgIEh0dHBJbyAgICAgICAgICAg ICBUaGUgSHR0cElvIHdyYXBwaW5nIHRoZSBIVFRQIHNlcnZpY2UuDQo+ID4+PiArICBAcGFyYW1b aW5dICAgU2VuZENodW5rUHJvY2VzcyAgIFBvaW50ZXIgdG8gY3VycmVudCBjaHVuayBwcm9jZXNz DQo+ID4+IHN0YXR1cy4NCj4gPj4+ICsgIEBwYXJhbVtvdXRdICBSZXF1ZXN0TWVzc2FnZSAgICAg UmVxdWVzdCB0byBzZW5kLg0KPiA+Pj4gKw0KPiA+Pj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgICBTdWNjZXNzZnVsbHkgdG8gc2VuZCBjaHVuayBkYXRhIGFjY29yZGluZw0KPiB0 bw0KPiA+PiBTZW5kQ2h1bmtQcm9jZXNzLg0KPiA+Pj4gKyAgQHJldHZhbCBPdGhlciAgICAgICAg ICAgICAgICAgICBPdGhlciBlcnJvcnMuDQo+ID4+PiArDQo+ID4+PiArKiovDQo+ID4+PiArRUZJ X1NUQVRVUw0KPiA+Pj4gK0h0dHBJb1NlbmRDaHVua2VkVHJhbnNmZXIgKA0KPiA+Pj4gKyAgSU4g IEhUVFBfSU8gICAgICAgICAgICAgICAgICAgICpIdHRwSW8sDQo+ID4+PiArICBJTiAgSFRUUF9J T19TRU5EX0NIVU5LX1BST0NFU1MgKlNlbmRDaHVua1Byb2Nlc3MsDQo+ID4+PiArICBJTiAgRUZJ X0hUVFBfTUVTU0FHRSAgICAgICAgICAgKlJlcXVlc3RNZXNzYWdlDQo+ID4+PiArKTsNCj4gPj4+ ICsjZW5kaWYNCj4gPj4+IGRpZmYgLS1naXQgYS9OZXR3b3JrUGtnL0xpYnJhcnkvRHhlSHR0cElv TGliL0R4ZUh0dHBJb0xpYi5jDQo+ID4+PiBiL05ldHdvcmtQa2cvTGlicmFyeS9EeGVIdHRwSW9M aWIvRHhlSHR0cElvTGliLmMNCj4gPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4+PiBpbmRl eCAwMDAwMDAwMDAwLi5mYmNlODZlYTVjDQo+ID4+PiAtLS0gL2Rldi9udWxsDQo+ID4+PiArKysg Yi9OZXR3b3JrUGtnL0xpYnJhcnkvRHhlSHR0cElvTGliL0R4ZUh0dHBJb0xpYi5jDQo+ID4+PiBA QCAtMCwwICsxLDgwOSBAQA0KPiA+Pj4gKy8qKiBAZmlsZQ0KPiA+Pj4gKyAgSHR0cCBJTyBIZWxw ZXIgTGlicmFyeS4NCj4gPj4+ICsNCj4gPj4+ICsgIChDKSBDb3B5cmlnaHQgMjAyMCBIZXdsZXR0 LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLjxCUj4NCj4gPj4+ICsgIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50ICoqLw0KPiA+Pj4gKw0KPiA+Pj4g KyNpbmNsdWRlIDxVZWZpLmg+DQo+ID4+PiArDQo+ID4+PiArI2luY2x1ZGUgPFByb3RvY29sL0h0 dHAuaD4NCj4gPj4+ICsNCj4gPj4+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTGliLmg+DQo+ID4+ PiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KPiA+Pj4gKyNpbmNsdWRlIDxM aWJyYXJ5L0RlYnVnTGliLmg+DQo+ID4+PiArI2luY2x1ZGUgPExpYnJhcnkvSHR0cElvTGliLmg+ DQo+ID4+PiArI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPiAjaW5jbHVk ZQ0KPiA+Pj4gKzxMaWJyYXJ5L1ByaW50TGliLmg+ICNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290 U2VydmljZXNUYWJsZUxpYi5oPg0KPiA+Pj4gKw0KPiA+Pj4gKy8qKg0KPiA+Pj4gKyAgTm90aWZ5 IHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aGVuIGFuIGV2ZW50IGlzIHRyaWdnZXJlZC4NCj4gPj4+ ICsNCj4gPj4+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAgICAgICBUaGUgb3BhcXVlIHBhcmFt ZXRlciB0byB0aGUgZnVuY3Rpb24uDQo+ID4+PiArDQo+ID4+PiArKiovDQo+ID4+PiArVk9JRA0K PiA+Pj4gK0VGSUFQSQ0KPiA+Pj4gK0h0dHBJb05vdGlmeURwYyAoDQo+ID4+PiArICBJTiBWT0lE ICAgICAgICAgICAgICAgICpDb250ZXh0DQo+ID4+PiArICApDQo+ID4+PiArew0KPiA+Pj4gKyAg KigoQk9PTEVBTiAqKSBDb250ZXh0KSA9IFRSVUU7DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4g Ky8qKg0KPiA+Pj4gKyAgUmVxdWVzdCBIdHRwSW9Ob3RpZnlEcGMgYXMgYSBEUEMgYXQgVFBMX0NB TExCQUNLLg0KPiA+Pj4gKw0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgRXZlbnQgICAgICAgICAgICAg ICAgIFRoZSBldmVudCBzaWduYWxlZC4NCj4gPj4+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAg ICAgICAgICAgICBUaGUgb3BhcXVlIHBhcmFtZXRlciB0byB0aGUgZnVuY3Rpb24uDQo+ID4+PiAr DQo+ID4+PiArKiovDQo+ID4+PiArVk9JRA0KPiA+Pj4gK0VGSUFQSQ0KPiA+Pj4gK0h0dHBJb05v dGlmeSAoDQo+ID4+PiArICBJTiBFRklfRVZFTlQgICAgICAgICAgICAgIEV2ZW50LA0KPiA+Pj4g KyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICAqQ29udGV4dA0KPiA+Pj4gKyAgKQ0KPiA+Pj4g K3sNCj4gPj4+ICsgIC8vDQo+ID4+PiArICAvLyBSZXF1ZXN0IEh0dHBJb05vdGlmeURwYyBhcyBh IERQQyBhdCBUUExfQ0FMTEJBQ0sNCj4gPj4+ICsgIC8vDQo+ID4+PiArICBRdWV1ZURwYyAoVFBM X0NBTExCQUNLLCBIdHRwSW9Ob3RpZnlEcGMsIENvbnRleHQpOyB9DQo+ID4+PiArDQo+ID4+PiAr LyoqDQo+ID4+PiArICBEZXN0cm95IHRoZSBIVFRQX0lPIGFuZCByZWxlYXNlIHRoZSByZXNvdXJj ZXMuDQo+ID4+PiArDQo+ID4+PiArICBAcGFyYW1baW5dICBIdHRwSW8gICAgICAgICAgVGhlIEhU VFBfSU8gd2hpY2ggd3JhcHMgdGhlIEhUVFAgc2VydmljZSB0bw0KPiBiZQ0KPiA+PiBkZXN0cm95 ZWQuDQo+ID4+PiArDQo+ID4+PiArKiovDQo+ID4+PiArVk9JRA0KPiA+Pj4gK0h0dHBJb0Rlc3Ry b3lJbyAoDQo+ID4+PiArICBJTiBIVFRQX0lPICAgICAgICAgICAgICAgICpIdHRwSW8NCj4gPj4+ ICsgICkNCj4gPj4+ICt7DQo+ID4+PiArICBFRklfSFRUUF9QUk9UT0NPTCAgICAgICAgICpIdHRw Ow0KPiA+Pj4gKyAgRUZJX0VWRU5UICAgICAgICAgICAgICAgICBFdmVudDsNCj4gPj4+ICsNCj4g Pj4+ICsgIGlmIChIdHRwSW8gPT0gTlVMTCkgew0KPiA+Pj4gKyAgICByZXR1cm47DQo+ID4+PiAr ICB9DQo+ID4+PiArDQo+ID4+PiArICBFdmVudCA9IEh0dHBJby0+UmVxVG9rZW4uRXZlbnQ7DQo+ ID4+PiArICBpZiAoRXZlbnQgIT0gTlVMTCkgew0KPiA+Pj4gKyAgICBnQlMtPkNsb3NlRXZlbnQg KEV2ZW50KTsNCj4gPj4+ICsgIH0NCj4gPj4+ICsNCj4gPj4+ICsgIEV2ZW50ID0gSHR0cElvLT5S c3BUb2tlbi5FdmVudDsNCj4gPj4+ICsgIGlmIChFdmVudCAhPSBOVUxMKSB7DQo+ID4+PiArICAg IGdCUy0+Q2xvc2VFdmVudCAoRXZlbnQpOw0KPiA+Pj4gKyAgfQ0KPiA+Pj4gKw0KPiA+Pj4gKyAg RXZlbnQgPSBIdHRwSW8tPlRpbWVvdXRFdmVudDsNCj4gPj4+ICsgIGlmIChFdmVudCAhPSBOVUxM KSB7DQo+ID4+PiArICAgIGdCUy0+Q2xvc2VFdmVudCAoRXZlbnQpOw0KPiA+Pj4gKyAgfQ0KPiA+ Pj4gKw0KPiA+Pj4gKyAgSHR0cCA9IEh0dHBJby0+SHR0cDsNCj4gPj4+ICsgIGlmIChIdHRwICE9 IE5VTEwpIHsNCj4gPj4+ICsgICAgSHR0cC0+Q29uZmlndXJlIChIdHRwLCBOVUxMKTsNCj4gPj4+ ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gPj4+ICsgICAgICAgICAgIEh0dHBJby0+SGFu ZGxlLA0KPiA+Pj4gKyAgICAgICAgICAgJmdFZmlIdHRwUHJvdG9jb2xHdWlkLA0KPiA+Pj4gKyAg ICAgICAgICAgSHR0cElvLT5JbWFnZSwNCj4gPj4+ICsgICAgICAgICAgIEh0dHBJby0+Q29udHJv bGxlcg0KPiA+Pj4gKyAgICAgICAgICAgKTsNCj4gPj4+ICsgIH0NCj4gPj4+ICsNCj4gPj4+ICsg IE5ldExpYkRlc3Ryb3lTZXJ2aWNlQ2hpbGQgKA0KPiA+Pj4gKyAgICBIdHRwSW8tPkNvbnRyb2xs ZXIsDQo+ID4+PiArICAgIEh0dHBJby0+SW1hZ2UsDQo+ID4+PiArICAgICZnRWZpSHR0cFNlcnZp Y2VCaW5kaW5nUHJvdG9jb2xHdWlkLA0KPiA+Pj4gKyAgICBIdHRwSW8tPkhhbmRsZQ0KPiA+Pj4g KyAgICApOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICsvKioNCj4gPj4+ICsgIENyZWF0ZSBh IEhUVFBfSU8gdG8gYWNjZXNzIHRoZSBIVFRQIHNlcnZpY2UuIEl0IHdpbGwgY3JlYXRlIGFuZA0K PiA+Pj4gK2NvbmZpZ3VyZQ0KPiA+Pj4gKyAgYSBIVFRQIGNoaWxkIGhhbmRsZS4NCj4gPj4+ICsN Cj4gPj4+ICsgIEBwYXJhbVtpbl0gIEltYWdlICAgICAgICAgIFRoZSBoYW5kbGUgb2YgdGhlIGRy aXZlciBpbWFnZS4NCj4gPj4+ICsgIEBwYXJhbVtpbl0gIENvbnRyb2xsZXIgICAgIFRoZSBoYW5k bGUgb2YgdGhlIGNvbnRyb2xsZXIuDQo+ID4+PiArICBAcGFyYW1baW5dICBJcFZlcnNpb24gICAg ICBJUF9WRVJTSU9OXzQgb3IgSVBfVkVSU0lPTl82Lg0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgQ29u ZmlnRGF0YSAgICAgVGhlIEhUVFBfSU8gY29uZmlndXJhdGlvbiBkYXRhICwNCj4gPj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwgbWVhbnMgbm90IHRvIGNvbmZpZ3VyZSB0aGUg SFRUUCBjaGlsZC4NCj4gPj4+ICsgIEBwYXJhbVtpbl0gIENhbGxiYWNrICAgICAgIENhbGxiYWNr IGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgaW52b2tlZCB3aGVuDQo+ID4+IHNwZWNpZmllZA0KPiA+ Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFRUUF9JT19DQUxMQkFDS19FVkVOVCBo YXBwZW5lZC4NCj4gPj4+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAgICAgIFRoZSBDb250ZXh0 IGRhdGEgd2hpY2ggd2lsbCBiZSBwYXNzZWQgdG8gdGhlDQo+ID4+IENhbGxiYWNrIGZ1bmN0aW9u Lg0KPiA+Pj4gKyAgQHBhcmFtW291dF0gSHR0cElvICAgICAgICAgVGhlIEhUVFBfSU8uDQo+ID4+ PiArDQo+ID4+PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIEhUVFBfSU8g aXMgY3JlYXRlZCBhbmQgY29uZmlndXJlZC4NCj4gPj4+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURf UEFSQU1FVEVSICBPbmUgb3IgbW9yZSBwYXJhbWV0ZXJzIGFyZQ0KPiBpbnZhbGlkLg0KPiA+Pj4g KyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgIE9uZSBvciBtb3JlIG9mIHRoZSBjb250 cm9sIG9wdGlvbnMNCj4gYXJlDQo+ID4+IG5vdA0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN1cHBvcnRlZCBpbiB0aGUgaW1wbGVtZW50YXRpb24uDQo+ID4+PiArICBA cmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeS4N Cj4gPj4+ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAgICBGYWlsZWQgdG8gY3JlYXRl IHRoZSBIVFRQX0lPIG9yIGNvbmZpZ3VyZSBpdC4NCj4gPj4+ICsNCj4gPj4+ICsqKi8NCj4gPj4+ ICtFRklfU1RBVFVTDQo+ID4+PiArSHR0cElvQ3JlYXRlSW8gKA0KPiA+Pj4gKyAgSU4gRUZJX0hB TkRMRSAgICAgICAgICAgICBJbWFnZSwNCj4gPj4+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgICAg ICAgQ29udHJvbGxlciwNCj4gPj4+ICsgIElOIFVJTlQ4ICAgICAgICAgICAgICAgICAgSXBWZXJz aW9uLA0KPiA+Pj4gKyAgSU4gSFRUUF9JT19DT05GSUdfREFUQSAgICAqQ29uZmlnRGF0YSwgT1BU SU9OQUwNCj4gPj4+ICsgIElOIEhUVFBfSU9fQ0FMTEJBQ0sgICAgICAgQ2FsbGJhY2ssDQo+ID4+ PiArICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICpDb250ZXh0LA0KPiA+Pj4gKyAgT1VUIEhU VFBfSU8gICAgICAgICAgICAgICAqSHR0cElvDQo+ID4+PiArICApDQo+ID4+PiArew0KPiA+Pj4g KyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4+PiArICBFRklfSFRUUF9D T05GSUdfREFUQSAgICAgIEh0dHBDb25maWdEYXRhOw0KPiA+Pj4gKyAgRUZJX0hUVFB2NF9BQ0NF U1NfUE9JTlQgICBIdHRwNEFjY2Vzc1BvaW50Ow0KPiA+Pj4gKyAgRUZJX0hUVFB2Nl9BQ0NFU1Nf UE9JTlQgICBIdHRwNkFjY2Vzc1BvaW50Ow0KPiA+Pj4gKyAgRUZJX0hUVFBfUFJPVE9DT0wgICAg ICAgICAqSHR0cDsNCj4gPj4+ICsgIEVGSV9FVkVOVCAgICAgICAgICAgICAgICAgRXZlbnQ7DQo+ ID4+PiArDQo+ID4+PiArICBpZiAoKEltYWdlID09IE5VTEwpIHx8IChDb250cm9sbGVyID09IE5V TEwpIHx8IChIdHRwSW8gPT0gTlVMTCkpIHsNCj4gPj4+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElE X1BBUkFNRVRFUjsNCj4gPj4+ICsgIH0NCj4gPj4+ICsNCj4gPj4+ICsgIGlmIChJcFZlcnNpb24g IT0gSVBfVkVSU0lPTl80ICYmIElwVmVyc2lvbiAhPSBJUF9WRVJTSU9OXzYpIHsNCj4gPj4+ICsg ICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gPj4+ICsgIH0NCj4gPj4+ICsNCj4gPj4+ICsg IFplcm9NZW0gKEh0dHBJbywgc2l6ZW9mIChIVFRQX0lPKSk7ICBaZXJvTWVtICgmSHR0cENvbmZp Z0RhdGEsDQo+ID4+PiArIHNpemVvZiAoRUZJX0hUVFBfQ09ORklHX0RBVEEpKTsNCj4gPj4+ICsN Cj4gPj4+ICsgIC8vDQo+ID4+PiArICAvLyBDcmVhdGUgdGhlIEhUVFAgY2hpbGQgaW5zdGFuY2Ug YW5kIGdldCB0aGUgSFRUUCBwcm90b2NvbC4NCj4gPj4+ICsgIC8vDQo+ID4+PiArICBTdGF0dXMg PSBOZXRMaWJDcmVhdGVTZXJ2aWNlQ2hpbGQgKA0KPiA+Pj4gKyAgICAgICAgICAgICBDb250cm9s bGVyLA0KPiA+Pj4gKyAgICAgICAgICAgICBJbWFnZSwNCj4gPj4+ICsgICAgICAgICAgICAgJmdF ZmlIdHRwU2VydmljZUJpbmRpbmdQcm90b2NvbEd1aWQsDQo+ID4+PiArICAgICAgICAgICAgICZI dHRwSW8tPkhhbmRsZQ0KPiA+Pj4gKyAgICAgICAgICAgICApOw0KPiA+Pj4gKyAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiA+Pj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+Pj4gKyAgfQ0K PiA+Pj4gKw0KPiA+Pj4gKyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiA+Pj4gKyAg ICAgICAgICAgICAgICAgIEh0dHBJby0+SGFuZGxlLA0KPiA+Pj4gKyAgICAgICAgICAgICAgICAg ICZnRWZpSHR0cFByb3RvY29sR3VpZCwNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAq KikgJkh0dHAsDQo+ID4+PiArICAgICAgICAgICAgICAgICAgSW1hZ2UsDQo+ID4+PiArICAgICAg ICAgICAgICAgICAgQ29udHJvbGxlciwNCj4gPj4+ICsgICAgICAgICAgICAgICAgICBFRklfT1BF Tl9QUk9UT0NPTF9CWV9EUklWRVINCj4gPj4+ICsgICAgICAgICAgICAgICAgICApOw0KPiA+Pj4g KyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSB8fCAoSHR0cCA9PSBOVUxMKSkgew0KPiA+Pj4gKyAg ICBnb3RvIE9OX0VSUk9SOw0KPiA+Pj4gKyAgfQ0KPiA+Pj4gKw0KPiA+Pj4gKyAgLy8NCj4gPj4+ ICsgIC8vIEluaXQgdGhlIGNvbmZpZ3VyYXRpb24gZGF0YSBhbmQgY29uZmlndXJlIHRoZSBIVFRQ IGNoaWxkLg0KPiA+Pj4gKyAgLy8NCj4gPj4+ICsgIEh0dHBJby0+SW1hZ2UgICAgICAgPSBJbWFn ZTsNCj4gPj4+ICsgIEh0dHBJby0+Q29udHJvbGxlciAgPSBDb250cm9sbGVyOw0KPiA+Pj4gKyAg SHR0cElvLT5JcFZlcnNpb24gICA9IElwVmVyc2lvbjsNCj4gPj4+ICsgIEh0dHBJby0+SHR0cCAg ICAgICAgPSBIdHRwOw0KPiA+Pj4gKyAgSHR0cElvLT5DYWxsYmFjayAgICA9IENhbGxiYWNrOw0K PiA+Pj4gKyAgSHR0cElvLT5Db250ZXh0ICAgICA9IENvbnRleHQ7DQo+ID4+PiArDQo+ID4+PiAr ICBpZiAoQ29uZmlnRGF0YSAhPSBOVUxMKSB7DQo+ID4+PiArICAgIGlmIChIdHRwSW8tPklwVmVy c2lvbiA9PSBJUF9WRVJTSU9OXzQpIHsNCj4gPj4+ICsgICAgICBIdHRwQ29uZmlnRGF0YS5Mb2Nh bEFkZHJlc3NJc0lQdjYgID0gRkFMU0U7DQo+ID4+PiArICAgICAgSHR0cENvbmZpZ0RhdGEuSHR0 cFZlcnNpb24gICAgICAgICA9IENvbmZpZ0RhdGEtPkNvbmZpZzQuSHR0cFZlcnNpb247DQo+ID4+ PiArICAgICAgSHR0cENvbmZpZ0RhdGEuVGltZU91dE1pbGxpc2VjICAgICA9IENvbmZpZ0RhdGEt DQo+ID4+PiBDb25maWc0LlJlcXVlc3RUaW1lT3V0Ow0KPiA+Pj4gKw0KPiA+Pj4gKyAgICAgIEh0 dHA0QWNjZXNzUG9pbnQuVXNlRGVmYXVsdEFkZHJlc3MgPSBDb25maWdEYXRhLQ0KPiA+Pj4gQ29u ZmlnNC5Vc2VEZWZhdWx0QWRkcmVzczsNCj4gPj4+ICsgICAgICBIdHRwNEFjY2Vzc1BvaW50Lkxv Y2FsUG9ydCAgICAgICAgID0gQ29uZmlnRGF0YS0+Q29uZmlnNC5Mb2NhbFBvcnQ7DQo+ID4+PiAr ICAgICAgSVA0X0NPUFlfQUREUkVTUyAoJkh0dHA0QWNjZXNzUG9pbnQuTG9jYWxBZGRyZXNzLA0K PiAmQ29uZmlnRGF0YS0NCj4gPj4+IENvbmZpZzQuTG9jYWxJcCk7DQo+ID4+PiArICAgICAgSVA0 X0NPUFlfQUREUkVTUyAoJkh0dHA0QWNjZXNzUG9pbnQuTG9jYWxTdWJuZXQsICZDb25maWdEYXRh LQ0KPiA+Pj4gQ29uZmlnNC5TdWJuZXRNYXNrKTsNCj4gPj4+ICsgICAgICBIdHRwQ29uZmlnRGF0 YS5BY2Nlc3NQb2ludC5JUHY0Tm9kZSA9ICZIdHRwNEFjY2Vzc1BvaW50Ow0KPiA+Pj4gKyAgICB9 IGVsc2Ugew0KPiA+Pj4gKyAgICAgIEh0dHBDb25maWdEYXRhLkxvY2FsQWRkcmVzc0lzSVB2NiA9 IFRSVUU7DQo+ID4+PiArICAgICAgSHR0cENvbmZpZ0RhdGEuSHR0cFZlcnNpb24gICAgICAgICA9 IENvbmZpZ0RhdGEtPkNvbmZpZzYuSHR0cFZlcnNpb247DQo+ID4+PiArICAgICAgSHR0cENvbmZp Z0RhdGEuVGltZU91dE1pbGxpc2VjICAgICA9IENvbmZpZ0RhdGEtDQo+ID4+PiBDb25maWc2LlJl cXVlc3RUaW1lT3V0Ow0KPiA+Pj4gKw0KPiA+Pj4gKyAgICAgIEh0dHA2QWNjZXNzUG9pbnQuTG9j YWxQb3J0ICAgICAgICAgPSBDb25maWdEYXRhLT5Db25maWc2LkxvY2FsUG9ydDsNCj4gPj4+ICsg ICAgICBJUDZfQ09QWV9BRERSRVNTICgmSHR0cDZBY2Nlc3NQb2ludC5Mb2NhbEFkZHJlc3MsDQo+ ICZDb25maWdEYXRhLQ0KPiA+Pj4gQ29uZmlnNi5Mb2NhbElwKTsNCj4gPj4+ICsgICAgICBIdHRw Q29uZmlnRGF0YS5BY2Nlc3NQb2ludC5JUHY2Tm9kZSA9ICZIdHRwNkFjY2Vzc1BvaW50Ow0KPiA+ Pj4gKyAgICB9DQo+ID4+PiArDQo+ID4+PiArICAgIFN0YXR1cyA9IEh0dHAtPkNvbmZpZ3VyZSAo SHR0cCwgJkh0dHBDb25maWdEYXRhKTsNCj4gPj4+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiA+Pj4gKyAgICAgIGdvdG8gT05fRVJST1I7DQo+ID4+PiArICAgIH0NCj4gPj4+ICsg IH0NCj4gPj4+ICsNCj4gPj4+ICsgIC8vDQo+ID4+PiArICAvLyBDcmVhdGUgZXZlbnRzIGZvciB2 YXJpdW9zIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zLg0KPiA+Pj4gKyAgLy8NCj4gPj4+ICsgIFN0 YXR1cyA9IGdCUy0+Q3JlYXRlRXZlbnQgKA0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgIEVWVF9O T1RJRllfU0lHTkFMLA0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgIFRQTF9OT1RJRlksDQo+ID4+ PiArICAgICAgICAgICAgICAgICAgSHR0cElvTm90aWZ5LA0KPiA+Pj4gKyAgICAgICAgICAgICAg ICAgICZIdHRwSW8tPklzVHhEb25lLA0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICZFdmVudA0K PiA+Pj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ID4+PiArICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ID4+PiArICAgIGdvdG8gT05fRVJST1I7DQo+ID4+PiArICB9DQo+ID4+PiArICBI dHRwSW8tPlJlcVRva2VuLkV2ZW50ID0gRXZlbnQ7DQo+ID4+PiArICBIdHRwSW8tPlJlcVRva2Vu Lk1lc3NhZ2UgPSAmSHR0cElvLT5SZXFNZXNzYWdlOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgU3RhdHVz ID0gZ0JTLT5DcmVhdGVFdmVudCAoDQo+ID4+PiArICAgICAgICAgICAgICAgICAgRVZUX05PVElG WV9TSUdOQUwsDQo+ID4+PiArICAgICAgICAgICAgICAgICAgVFBMX05PVElGWSwNCj4gPj4+ICsg ICAgICAgICAgICAgICAgICBIdHRwSW9Ob3RpZnksDQo+ID4+PiArICAgICAgICAgICAgICAgICAg Jkh0dHBJby0+SXNSeERvbmUsDQo+ID4+PiArICAgICAgICAgICAgICAgICAgJkV2ZW50DQo+ID4+ PiArICAgICAgICAgICAgICAgICAgKTsNCj4gPj4+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gPj4+ICsgICAgZ290byBPTl9FUlJPUjsNCj4gPj4+ICsgIH0NCj4gPj4+ICsgIEh0dHBJ by0+UnNwVG9rZW4uRXZlbnQgPSBFdmVudDsNCj4gPj4+ICsgIEh0dHBJby0+UnNwVG9rZW4uTWVz c2FnZSA9ICZIdHRwSW8tPlJzcE1lc3NhZ2U7DQo+ID4+PiArDQo+ID4+PiArICAvLw0KPiA+Pj4g KyAgLy8gQ3JlYXRlIFRpbWVvdXRFdmVudCBmb3IgcmVzcG9uc2UgIC8vICBTdGF0dXMgPSBnQlMt PkNyZWF0ZUV2ZW50DQo+ID4+PiArICgNCj4gPj4+ICsgICAgICAgICAgICAgICAgICBFVlRfVElN RVIsDQo+ID4+PiArICAgICAgICAgICAgICAgICAgVFBMX0NBTExCQUNLLA0KPiA+Pj4gKyAgICAg ICAgICAgICAgICAgIE5VTEwsDQo+ID4+PiArICAgICAgICAgICAgICAgICAgTlVMTCwNCj4gPj4+ ICsgICAgICAgICAgICAgICAgICAmRXZlbnQNCj4gPj4+ICsgICAgICAgICAgICAgICAgICApOw0K PiA+Pj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+Pj4gKyAgICBnb3RvIE9OX0VS Uk9SOw0KPiA+Pj4gKyAgfQ0KPiA+Pj4gKyAgSHR0cElvLT5UaW1lb3V0RXZlbnQgPSBFdmVudDsN Cj4gPj4+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPj4+ICsNCj4gPj4+ICtPTl9FUlJPUjoN Cj4gPj4+ICsgIEh0dHBJb0Rlc3Ryb3lJbyAoSHR0cElvKTsNCj4gPj4+ICsNCj4gPj4+ICsgIHJl dHVybiBTdGF0dXM7DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gKy8qKg0KPiA+Pj4gKyAgU3lu Y2hyb25vdXNseSBzZW5kIGEgSFRUUCBSRVFVRVNUIG1lc3NhZ2UgdG8gdGhlIHNlcnZlci4NCj4g Pj4+ICsNCj4gPj4+ICsgIEBwYXJhbVtpbl0gICBIdHRwSW8gICAgICAgICAgIFRoZSBIdHRwSW8g d3JhcHBpbmcgdGhlIEhUVFAgc2VydmljZS4NCj4gPj4+ICsgIEBwYXJhbVtpbl0gICBSZXF1ZXN0 ICAgICAgICAgIEEgcG9pbnRlciB0byBzdG9yYWdlIHN1Y2ggZGF0YSBhcyBVUkwgYW5kDQo+ID4+ IEhUVFAgbWV0aG9kLg0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgIEhlYWRlckNvdW50ICAgICAgTnVt YmVyIG9mIEhUVFAgaGVhZGVyIHN0cnVjdHVyZXMgaW4NCj4gPj4gSGVhZGVycyBsaXN0Lg0KPiA+ Pj4gKyAgQHBhcmFtW2luXSAgIEhlYWRlcnMgICAgICAgICAgQXJyYXkgY29udGFpbmluZyBsaXN0 IG9mIEhUVFAgaGVhZGVycy4NCj4gPj4+ICsgIEBwYXJhbVtpbl0gICBCb2R5TGVuZ3RoICAgICAg IExlbmd0aCBpbiBieXRlcyBvZiB0aGUgSFRUUCBib2R5Lg0KPiA+Pj4gKyAgQHBhcmFtW2luXSAg IEJvZHkgICAgICAgICAgICAgQm9keSBhc3NvY2lhdGVkIHdpdGggdGhlIEhUVFAgcmVxdWVzdC4N Cj4gPj4+ICsNCj4gPj4+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgSFRU UCByZXF1ZXN0IGlzIHRyYXNtaXR0ZWQuDQo+ID4+PiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BB UkFNRVRFUiAgT25lIG9yIG1vcmUgcGFyYW1ldGVycyBhcmUNCj4gaW52YWxpZC4NCj4gPj4+ICsg IEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICBGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5 Lg0KPiA+Pj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgIEFuIHVuZXhwZWN0ZWQg bmV0d29yayBvciBzeXN0ZW0NCj4gZXJyb3INCj4gPj4gb2NjdXJyZWQuDQo+ID4+PiArICBAcmV0 dmFsIE90aGVycyAgICAgICAgICAgICAgICAgT3RoZXIgZXJyb3JzIGFzIGluZGljYXRlZC4NCj4g Pj4+ICsNCj4gPj4+ICsqKi8NCj4gPj4+ICtFRklfU1RBVFVTDQo+ID4+PiArSHR0cElvU2VuZFJl cXVlc3QgKA0KPiA+Pj4gKyAgSU4gIEhUVFBfSU8gICAgICAgICAgICAgICAgKkh0dHBJbywNCj4g Pj4+ICsgIElOICBFRklfSFRUUF9SRVFVRVNUX0RBVEEgICpSZXF1ZXN0LA0KPiA+Pj4gKyAgSU4g IFVJTlROICAgICAgICAgICAgICAgICAgSGVhZGVyQ291bnQsDQo+ID4+PiArICBJTiAgRUZJX0hU VFBfSEVBREVSICAgICAgICAqSGVhZGVycywNCj4gPj4+ICsgIElOICBVSU5UTiAgICAgICAgICAg ICAgICAgIEJvZHlMZW5ndGgsDQo+ID4+PiArICBJTiAgVk9JRCAgICAgICAgICAgICAgICAgICAq Qm9keQ0KPiA+Pj4gKyAgKQ0KPiA+Pj4gK3sNCj4gPj4+ICsgIEVGSV9TVEFUVVMgICAgICAgICAg ICAgICAgIFN0YXR1czsNCj4gPj4+ICsgIEVGSV9IVFRQX1BST1RPQ09MICAgICAgICAgICpIdHRw Ow0KPiA+Pj4gKw0KPiA+Pj4gKyAgaWYgKEh0dHBJbyA9PSBOVUxMIHx8IEh0dHBJby0+SHR0cCA9 PSBOVUxMKSB7DQo+ID4+PiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4+ PiArICB9DQo+ID4+PiArDQo+ID4+PiArICBIdHRwSW8tPlJlcVRva2VuLlN0YXR1cyAgPSBFRklf Tk9UX1JFQURZOw0KPiA+Pj4gKyBIdHRwSW8tPlJlcVRva2VuLk1lc3NhZ2UtPkRhdGEuUmVxdWVz dCA9IFJlcXVlc3Q7DQo+ID4+PiArIEh0dHBJby0+UmVxVG9rZW4uTWVzc2FnZS0+SGVhZGVyQ291 bnQgID0gSGVhZGVyQ291bnQ7DQo+ID4+PiArICBIdHRwSW8tPlJlcVRva2VuLk1lc3NhZ2UtPkhl YWRlcnMgICAgICA9IEhlYWRlcnM7DQo+ID4+PiArICBIdHRwSW8tPlJlcVRva2VuLk1lc3NhZ2Ut PkJvZHlMZW5ndGggICA9IEJvZHlMZW5ndGg7DQo+ID4+PiArICBIdHRwSW8tPlJlcVRva2VuLk1l c3NhZ2UtPkJvZHkgICAgICAgICA9IEJvZHk7DQo+ID4+PiArDQo+ID4+PiArICBpZiAoSHR0cElv LT5DYWxsYmFjayAhPSBOVUxMKSB7DQo+ID4+PiArICAgIFN0YXR1cyA9IEh0dHBJby0+Q2FsbGJh Y2sgKA0KPiA+Pj4gKyAgICAgICAgICAgICAgIEh0dHBJb1JlcXVlc3QsDQo+ID4+PiArICAgICAg ICAgICAgICAgSHR0cElvLT5SZXFUb2tlbi5NZXNzYWdlLA0KPiA+Pj4gKyAgICAgICAgICAgICAg IEh0dHBJby0+Q29udGV4dA0KPiA+Pj4gKyAgICAgICAgICAgICAgICk7DQo+ID4+PiArICAgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPj4+ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiA+ Pj4gKyAgICB9DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ID4+PiArICAvLw0KPiA+Pj4gKyAgLy8g UXVldWUgdGhlIHJlcXVlc3QgdG9rZW4gdG8gSFRUUCBpbnN0YW5jZXMuDQo+ID4+PiArICAvLw0K PiA+Pj4gKyAgSHR0cCA9IEh0dHBJby0+SHR0cDsNCj4gPj4+ICsgIEh0dHBJby0+SXNUeERvbmUg PSBGQUxTRTsNCj4gPj4+ICsgIFN0YXR1cyA9IEh0dHAtPlJlcXVlc3QgKA0KPiA+Pj4gKyAgICAg ICAgICAgICAgICAgICBIdHRwLA0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAmSHR0cElvLT5S ZXFUb2tlbg0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICApOw0KPiA+Pj4gKyAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiA+Pj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+Pj4gKyAgfQ0K PiA+Pj4gKw0KPiA+Pj4gKyAgLy8NCj4gPj4+ICsgIC8vIFBvbGwgdGhlIG5ldHdvcmsgdW50aWwg dHJhbnNtaXQgZmluaXNoLg0KPiA+Pj4gKyAgLy8NCj4gPj4+ICsgIHdoaWxlICghSHR0cElvLT5J c1R4RG9uZSkgew0KPiA+Pj4gKyAgICBIdHRwLT5Qb2xsIChIdHRwKTsNCj4gPj4+ICsgIH0NCj4g Pj4+ICsNCj4gPj4+ICsgIHJldHVybiBIdHRwSW8tPlJlcVRva2VuLlN0YXR1czsNCj4gPj4+ICt9 DQo+ID4+PiArDQo+ID4+PiArLyoqDQo+ID4+PiArICBTeW5jaHJvbm91c2x5IHJlY2VpdmUgYSBI VFRQIFJFU1BPTlNFIG1lc3NhZ2UgZnJvbSB0aGUgc2VydmVyLg0KPiA+Pj4gKw0KPiA+Pj4gKyAg QHBhcmFtW2luXSAgIEh0dHBJbyAgICAgICAgICAgVGhlIEh0dHBJbyB3cmFwcGluZyB0aGUgSFRU UCBzZXJ2aWNlLg0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgIFJlY3ZNc2dIZWFkZXIgICAgVFJVRSB0 byByZWNlaXZlIGEgbmV3IEhUVFAgcmVzcG9uc2UNCj4gPj4gKGZyb20gbWVzc2FnZSBoZWFkZXIp Lg0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UgdG8gY29udGlu dWUgcmVjZWl2ZSB0aGUgcHJldmlvdXMgcmVzcG9uc2UNCj4gbWVzc2FnZS4NCj4gPj4+ICsgIEBw YXJhbVtvdXRdICBSZXNwb25zZURhdGEgICAgIFBvaW50IHRvIGEgd3JhcHBlciBvZiB0aGUgcmVj ZWl2ZWQNCj4gPj4gcmVzcG9uc2UgZGF0YS4NCj4gPj4+ICsNCj4gPj4+ICsgIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgICBUaGUgSFRUUCByZXNwb25zZSBpcyByZWNlaXZlZC4NCj4gPj4+ ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBPbmUgb3IgbW9yZSBwYXJhbWV0ZXJz IGFyZQ0KPiBpbnZhbGlkLg0KPiA+Pj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAg IEZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkuDQo+ID4+PiArICBAcmV0dmFsIEVGSV9ERVZJQ0Vf RVJST1IgICAgICAgQW4gdW5leHBlY3RlZCBuZXR3b3JrIG9yIHN5c3RlbQ0KPiBlcnJvcg0KPiA+ PiBvY2N1cnJlZC4NCj4gPj4+ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAgICBPdGhl ciBlcnJvcnMgYXMgaW5kaWNhdGVkLg0KPiA+Pj4gKw0KPiA+Pj4gKyoqLw0KPiA+Pj4gK0VGSV9T VEFUVVMNCj4gPj4+ICtIdHRwSW9SZWN2UmVzcG9uc2UgKA0KPiA+Pj4gKyAgSU4gICAgICBIVFRQ X0lPICAgICAgICAgICAgICAgICAgKkh0dHBJbywNCj4gPj4+ICsgIElOICAgICAgQk9PTEVBTiAg ICAgICAgICAgICAgICAgIFJlY3ZNc2dIZWFkZXIsDQo+ID4+PiArICBPVVQgICAgIEhUVFBfSU9f UkVTUE9OU0VfREFUQSAgICAqUmVzcG9uc2VEYXRhDQo+ID4+PiArICApDQo+ID4+PiArew0KPiA+ Pj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+Pj4gKyAgRUZJX0hU VFBfUFJPVE9DT0wgICAgICAgICAgKkh0dHA7DQo+ID4+PiArDQo+ID4+PiArICBpZiAoSHR0cElv ID09IE5VTEwgfHwgSHR0cElvLT5IdHRwID09IE5VTEwgfHwgUmVzcG9uc2VEYXRhID09IE5VTEwp DQo+IHsNCj4gPj4+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPj4+ICsg IH0NCj4gPj4+ICsNCj4gPj4+ICsgIC8vDQo+ID4+PiArICAvLyBDcmVhdGUgbmV3IFRpbWVvdXRF dmVudCBmb3IgcmVzcG9uc2UgIC8vICBpZg0KPiA+Pj4gKyAoSHR0cElvLT5UaW1lb3V0RXZlbnQg IT0gTlVMTCkgew0KPiA+Pj4gKyAgICBnQlMtPkNsb3NlRXZlbnQgKEh0dHBJby0+VGltZW91dEV2 ZW50KTsNCj4gPj4+ICsgICAgSHR0cElvLT5UaW1lb3V0RXZlbnQgPSBOVUxMOw0KPiA+Pj4gKyAg fQ0KPiA+Pj4gKw0KPiA+Pj4gKyAgU3RhdHVzID0gZ0JTLT5DcmVhdGVFdmVudCAoDQo+ID4+PiAr ICAgICAgICAgICAgICAgICAgRVZUX1RJTUVSLA0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgIFRQ TF9DQUxMQkFDSywNCj4gPj4+ICsgICAgICAgICAgICAgICAgICBOVUxMLA0KPiA+Pj4gKyAgICAg ICAgICAgICAgICAgIE5VTEwsDQo+ID4+PiArICAgICAgICAgICAgICAgICAgJkh0dHBJby0+VGlt ZW91dEV2ZW50DQo+ID4+PiArICAgICAgICAgICAgICAgICAgKTsNCj4gPj4+ICsgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gPj4+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gPj4+ICsgIH0N Cj4gPj4gSXMgaXQgbmVjZXNzYXJ5IHRvIHJlY3JlYXRlIHRoZSBldmVudD8gV291bGRuJ3QgdGhp cyBiZSBlbm91Z2ggdG8gcmVzZXQgaXQ/DQo+ID4gTm8sIHdlIGRvbuKAmXQgaGF2ZSB0byByZWNy ZWF0ZSB0aGlzIGV2ZW50Lg0KPiA+PiBnQlMtPlNldFRpbWVyIChIdHRwSW8tPlRpbWVvdXRFdmVu dCwgVGltZXJDYW5jZWwsIDApOw0KPiA+IEkgbWFkZSBzb21lIGNoYW5nZXMgaW4gdGhpcyBmdW5j dGlvbi4NCj4gPj4+ICsNCj4gPj4+ICsgIC8vDQo+ID4+PiArICAvLyBTdGFydCB0aGUgdGltZXIs IGFuZCB3YWl0IFRpbWVvdXQgc2Vjb25kcyB0byByZWNlaXZlIHRoZSBoZWFkZXINCj4gPj4gcGFj a2V0Lg0KPiA+Pj4gKyAgLy8NCj4gPj4+ICsgIFN0YXR1cyA9IGdCUy0+U2V0VGltZXIgKEh0dHBJ by0+VGltZW91dEV2ZW50LCBUaW1lclJlbGF0aXZlLA0KPiA+Pj4gKyBIdHRwSW8tPlRpbWVvdXQg KiBUSUNLU19QRVJfTVMpOyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+Pj4gKyAgICBy ZXR1cm4gU3RhdHVzOw0KPiA+Pj4gKyAgfQ0KPiA+Pj4gKw0KPiA+Pj4gKyAgLy8NCj4gPj4+ICsg IC8vIFF1ZXVlIHRoZSByZXNwb25zZSB0b2tlbiB0byBIVFRQIGluc3RhbmNlcy4NCj4gPj4+ICsg IC8vDQo+ID4+PiArICBIdHRwSW8tPlJzcFRva2VuLlN0YXR1cyAgPSBFRklfTk9UX1JFQURZOyAg aWYgKFJlY3ZNc2dIZWFkZXIpIHsNCj4gPj4+ICsgICAgSHR0cElvLT5Sc3BUb2tlbi5NZXNzYWdl LT5EYXRhLlJlc3BvbnNlID0NCj4gPj4+ICsgJlJlc3BvbnNlRGF0YS0+UmVzcG9uc2U7ICB9IGVs c2Ugew0KPiA+Pj4gKyAgICBIdHRwSW8tPlJzcFRva2VuLk1lc3NhZ2UtPkRhdGEuUmVzcG9uc2Ug PSBOVUxMOyAgfQ0KPiA+Pj4gKyAgSHR0cElvLT5Sc3BUb2tlbi5NZXNzYWdlLT5IZWFkZXJDb3Vu dCAgID0gMDsNCj4gPj4+ICsgIEh0dHBJby0+UnNwVG9rZW4uTWVzc2FnZS0+SGVhZGVycyAgICAg ICA9IE5VTEw7DQo+ID4+PiArICBIdHRwSW8tPlJzcFRva2VuLk1lc3NhZ2UtPkJvZHlMZW5ndGgg ICAgPSBSZXNwb25zZURhdGEtDQo+ID4+PiBCb2R5TGVuZ3RoOw0KPiA+Pj4gKyAgSHR0cElvLT5S c3BUb2tlbi5NZXNzYWdlLT5Cb2R5ICAgICAgICAgID0gUmVzcG9uc2VEYXRhLT5Cb2R5Ow0KPiA+ Pj4gKw0KPiA+Pj4gKyAgSHR0cCA9IEh0dHBJby0+SHR0cDsNCj4gPj4+ICsgIEh0dHBJby0+SXNS eERvbmUgPSBGQUxTRTsNCj4gPj4+ICsgIFN0YXR1cyA9IEh0dHAtPlJlc3BvbnNlICgNCj4gPj4+ ICsgICAgICAgICAgICAgICAgICAgSHR0cCwNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgJkh0 dHBJby0+UnNwVG9rZW4NCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgKTsNCj4gPj4+ICsNCj4g Pj4+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPj4+ICsgICAgZ0JTLT5TZXRUaW1l ciAoSHR0cElvLT5UaW1lb3V0RXZlbnQsIFRpbWVyQ2FuY2VsLCAwKTsNCj4gPj4+ICsgICAgcmV0 dXJuIFN0YXR1czsNCj4gPj4+ICsgIH0NCj4gPj4+ICsNCj4gPj4+ICsgIC8vDQo+ID4+PiArICAv LyBQb2xsIHRoZSBuZXR3b3JrIHVudGlsIHJlY2VpdmUgZmluaXNoLg0KPiA+Pj4gKyAgLy8NCj4g Pj4+ICsgIHdoaWxlICghSHR0cElvLT5Jc1J4RG9uZSAmJiAoKEh0dHBJby0+VGltZW91dEV2ZW50 ID09IE5VTEwpIHx8DQo+ID4+IEVGSV9FUlJPUiAoZ0JTLT5DaGVja0V2ZW50IChIdHRwSW8tPlRp bWVvdXRFdmVudCkpKSkgew0KPiA+Pj4gKyAgICBIdHRwLT5Qb2xsIChIdHRwKTsNCj4gPj4+ICsg IH0NCj4gPj4+ICsNCj4gPj4+ICsgIGdCUy0+U2V0VGltZXIgKEh0dHBJby0+VGltZW91dEV2ZW50 LCBUaW1lckNhbmNlbCwgMCk7DQo+ID4+PiArDQo+ID4+PiArICBpZiAoIUh0dHBJby0+SXNSeERv bmUpIHsNCj4gPj4+ICsgICAgLy8NCj4gPj4+ICsgICAgLy8gVGltZW91dCBvY2N1cnMsIGNhbmNl bCB0aGUgcmVzcG9uc2UgdG9rZW4uDQo+ID4+PiArICAgIC8vDQo+ID4+PiArICAgIEh0dHAtPkNh bmNlbCAoSHR0cCwgJkh0dHBJby0+UnNwVG9rZW4pOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgICBTdGF0 dXMgPSBFRklfVElNRU9VVDsNCj4gPj4+ICsNCj4gPj4+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4g Pj4+ICsgIH0gZWxzZSB7DQo+ID4+PiArICAgIEh0dHBJby0+SXNSeERvbmUgPSBGQUxTRTsNCj4g Pj4+ICsgIH0NCj4gPj4+ICsNCj4gPj4+ICsgIGlmICgoSHR0cElvLT5DYWxsYmFjayAhPSBOVUxM KSAmJg0KPiA+Pj4gKyAgICAgIChIdHRwSW8tPlJzcFRva2VuLlN0YXR1cyA9PSBFRklfU1VDQ0VT UyB8fCBIdHRwSW8tDQo+ID4+PiBSc3BUb2tlbi5TdGF0dXMgPT0gRUZJX0hUVFBfRVJST1IpKSB7 DQo+ID4+PiArICAgIFN0YXR1cyA9IEh0dHBJby0+Q2FsbGJhY2sgKA0KPiA+Pj4gKyAgICAgICAg ICAgICAgIEh0dHBJb1Jlc3BvbnNlLA0KPiA+Pj4gKyAgICAgICAgICAgICAgIEh0dHBJby0+UnNw VG9rZW4uTWVzc2FnZSwNCj4gPj4+ICsgICAgICAgICAgICAgICBIdHRwSW8tPkNvbnRleHQNCj4g Pj4+ICsgICAgICAgICAgICAgICApOw0KPiA+Pj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ID4+PiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gPj4+ICsgICAgfQ0KPiA+Pj4gKyAg fQ0KPiA+Pj4gKw0KPiA+Pj4gKyAgLy8NCj4gPj4+ICsgIC8vIFN0b3JlIHRoZSByZWNlaXZlZCBk YXRhIGludG8gdGhlIHdyYXBwZXIuDQo+ID4+PiArICAvLw0KPiA+Pj4gKyAgUmVzcG9uc2VEYXRh LT5TdGF0dXMgPSBIdHRwSW8tPlJzcFRva2VuLlN0YXR1czsNCj4gPj4+ICsgUmVzcG9uc2VEYXRh LT5IZWFkZXJDb3VudCA9IEh0dHBJby0+UnNwVG9rZW4uTWVzc2FnZS0NCj4gPj4+IEhlYWRlckNv dW50Ow0KPiA+Pj4gKyAgUmVzcG9uc2VEYXRhLT5IZWFkZXJzICAgICA9IEh0dHBJby0+UnNwVG9r ZW4uTWVzc2FnZS0+SGVhZGVyczsNCj4gPj4+ICsgIFJlc3BvbnNlRGF0YS0+Qm9keUxlbmd0aCAg PSBIdHRwSW8tPlJzcFRva2VuLk1lc3NhZ2UtDQo+ID4+PiBCb2R5TGVuZ3RoOw0KPiA+Pj4gKw0K PiA+Pj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArLyoqDQo+ ID4+PiArICBHZXQgdGhlIHZhbHVlIG9mIHRoZSBjb250ZW50IGxlbmd0aCBpZiB0aGVyZSBpcyBh ICJDb250ZW50LUxlbmd0aCINCj4gaGVhZGVyLg0KPiA+Pj4gKw0KPiA+Pj4gKyAgQHBhcmFtW2lu XSAgICBIZWFkZXJDb3VudCAgICAgICAgTnVtYmVyIG9mIEhUVFAgaGVhZGVyIHN0cnVjdHVyZXMg aW4NCj4gPj4gSGVhZGVycy4NCj4gPj4+ICsgIEBwYXJhbVtpbl0gICAgSGVhZGVycyAgICAgICAg ICAgIEFycmF5IGNvbnRhaW5pbmcgbGlzdCBvZiBIVFRQIGhlYWRlcnMuDQo+ID4+PiArICBAcGFy YW1bb3V0XSAgIENvbnRlbnRMZW5ndGggICAgICBQb2ludGVyIHRvIHNhdmUgdGhlIHZhbHVlIG9m IHRoZQ0KPiBjb250ZW50DQo+ID4+IGxlbmd0aC4NCj4gPj4+ICsNCj4gPj4+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBnZXQgdGhlIGNvbnRlbnQgbGVu Z3RoLg0KPiA+Pj4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgICAgTm8gIkNvbnRl bnQtTGVuZ3RoIiBoZWFkZXIgaW4gdGhlDQo+ID4+IEhlYWRlcnMuDQo+ID4+PiArDQo+ID4+PiAr KiovDQo+ID4+PiArRUZJX1NUQVRVUw0KPiA+Pj4gK0h0dHBJb0dldENvbnRlbnRMZW5ndGggKA0K PiA+Pj4gKyAgSU4gICAgIFVJTlROICAgICAgICAgICAgICAgIEhlYWRlckNvdW50LA0KPiA+Pj4g KyAgSU4gICAgIEVGSV9IVFRQX0hFQURFUiAgICAgICpIZWFkZXJzLA0KPiA+Pj4gKyAgT1VUICAg IFVJTlROICAgICAgICAgICAgICAgICpDb250ZW50TGVuZ3RoDQo+ID4+PiArICApDQo+ID4+PiAr ew0KPiA+Pj4gKyAgRUZJX0hUVFBfSEVBREVSICAgICAgICpIZWFkZXI7DQo+ID4+PiArDQo+ID4+ PiArICBIZWFkZXIgPSBIdHRwRmluZEhlYWRlciAoSGVhZGVyQ291bnQsIEhlYWRlcnMsDQo+ID4+ PiArIEhUVFBfSEVBREVSX0NPTlRFTlRfTEVOR1RIKTsgIGlmIChIZWFkZXIgPT0gTlVMTCkgew0K PiA+Pj4gKyAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4gPj4+ICsgIH0NCj4gPj4+ICsNCj4g Pj4+ICsgIHJldHVybiBBc2NpaVN0ckRlY2ltYWxUb1VpbnRuUyAoSGVhZGVyLT5GaWVsZFZhbHVl LCAoQ0hBUjggKiopDQo+ID4+PiArTlVMTCwgQ29udGVudExlbmd0aCk7IH0NCj4gPj4+ICsvKioN Cj4gPj4+ICsgIFNlbmQgSFRUUCByZXF1ZXN0IGluIGNodW5rcy4NCj4gPj4+ICsNCj4gPj4+ICsg IEBwYXJhbVtpbl0gICBIdHRwSW8gICAgICAgICAgICAgVGhlIEh0dHBJbyB3cmFwcGluZyB0aGUg SFRUUCBzZXJ2aWNlLg0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgIFNlbmRDaHVua1Byb2Nlc3MgICBQ b2ludGVyIHRvIGN1cnJlbnQgY2h1bmsgcHJvY2Vzcw0KPiA+PiBzdGF0dXMuDQo+ID4+PiArICBA cGFyYW1baW5dICAgUmVxdWVzdE1lc3NhZ2UgICAgIFJlcXVlc3QgdG8gc2VuZC4NCj4gPj4+ICsN Cj4gPj4+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHRv IHNlbmQgY2h1bmsgZGF0YSBhY2NvcmRpbmcNCj4gdG8NCj4gPj4gU2VuZENodW5rUHJvY2Vzcy4N Cj4gPj4+ICsgIEByZXR2YWwgT3RoZXIgICAgICAgICAgICAgICAgICAgT3RoZXIgZXJyb3JzLg0K PiA+Pj4gKw0KPiA+Pj4gKyoqLw0KPiA+Pj4gK0VGSV9TVEFUVVMNCj4gPj4+ICtIdHRwSW9TZW5k Q2h1bmtlZFRyYW5zZmVyICgNCj4gPj4+ICsgIElOICBIVFRQX0lPICAgICAgICAgICAgICAgICAg ICAqSHR0cElvLA0KPiA+Pj4gKyAgSU4gIEhUVFBfSU9fU0VORF9DSFVOS19QUk9DRVNTICpTZW5k Q2h1bmtQcm9jZXNzLA0KPiA+Pj4gKyAgSU4gIEVGSV9IVFRQX01FU1NBR0UgICAgICAgICAgICpS ZXF1ZXN0TWVzc2FnZQ0KPiA+Pj4gKykNCj4gPj4+ICt7DQo+ID4+PiArICBFRklfU1RBVFVTIFN0 YXR1czsNCj4gPj4+ICsgIEVGSV9IVFRQX0hFQURFUiAqTmV3SGVhZGVyczsNCj4gPj4+ICsgIEVG SV9IVFRQX0hFQURFUiAqQ29udGVudExlbmd0aEhlYWRlcjsNCj4gPj4+ICsgIFVJTlROIEFkZE5l d0hlYWRlcjsNCj4gPj4+ICsgIFVJTlROIEhlYWRlckNvdW50Ow0KPiA+Pj4gKyAgQ0hBUjggKk1l c3NhZ2VCb2R5Ow0KPiA+Pj4gKyAgVUlOVE4gTWVzc2FnZUJvZHlMZW5ndGg7DQo+ID4+PiArICBD SEFSOCBDaHVua0xlbmd0aFN0ciBbSFRUUF9JT19DSFVOS19TSVpFX1NUUklOR19MRU5dOw0KPiA+ Pj4gKyAgRUZJX0hUVFBfUkVRVUVTVF9EQVRBICpTZW50UmVxdWVzdERhdGE7DQo+ID4+IFRoaXMg aXMgYSBuZXcgZnVuY3Rpb24gYW5kIEkgYWxyZWFkeSBzZWUgYSBkaWZmZXJlbmNlIGluIHRoZSBj b2Rpbmcgc3RhbmRhcmQuDQo+ID4+IFBsZWFzZSBhbGlnbiB2YXJpYWJsZSBuYW1lcyBsaWtlIGlu IHByZXZpb3VzIGZ1bmN0aW9ucy4NCj4gPiBEb25lDQo+ID4NCj4gPj4+ICsNCj4gPj4+ICsgIEFk ZE5ld0hlYWRlciA9IDA7DQo+ID4+PiArICBOZXdIZWFkZXJzID0gTlVMTDsNCj4gPj4+ICsgIE1l c3NhZ2VCb2R5ID0gTlVMTDsNCj4gPj4+ICsgIENvbnRlbnRMZW5ndGhIZWFkZXIgPSBOVUxMOw0K PiA+Pj4gKyAgTWVzc2FnZUJvZHlMZW5ndGggPSAwOw0KPiA+PiBBbGlnbm1lbnQgb2YgYXNzaWdu bWVudHMuDQo+ID4gRG9uZQ0KPiA+DQo+ID4+PiArDQo+ID4+PiArICBzd2l0Y2ggKCpTZW5kQ2h1 bmtQcm9jZXNzKSB7DQo+ID4+PiArICBjYXNlIEh0dHBJb1NlbmRDaHVua0hlYWRlclplcm9Db250 ZW50Og0KPiA+PiBDYXNlIHNwYWNpbmc6IDIgc3BhY2VzLiBBcHBsaWVzIHRocm91Z2hvdXQgbmV3 IGNvZGUuDQo+ID4+PiArICAgICAgQ29udGVudExlbmd0aEhlYWRlciA9DQo+ID4+PiArIEh0dHBG aW5kSGVhZGVyKFJlcXVlc3RNZXNzYWdlLT5IZWFkZXJDb3VudCwgUmVxdWVzdE1lc3NhZ2UtDQo+ ID4+PiBIZWFkZXJzLA0KPiA+Pj4gKyBIVFRQX0hFQURFUl9DT05URU5UX0xFTkdUSCk7DQo+ID4+ IFNwYWNpbmcgYWZ0ZXIgZnVuY3Rpb24gY2FsbCBuYW1lLiBUaGlzIGFwcGxpZXMgZnJvbSB0aGlz IHBvaW50IHVudGlsIHRoZSBlbmQNCj4gb2YNCj4gPj4gcGF0Y2guDQo+ID4gRG9uZQ0KPiA+Pj4g KyAgICAgIGlmIChDb250ZW50TGVuZ3RoSGVhZGVyID09IE5VTEwpIHsNCj4gPj4+ICsgICAgICAg IEFkZE5ld0hlYWRlciA9IDE7DQo+ID4+PiArICAgICAgfQ0KPiA+Pj4gKw0KPiA+Pj4gKyAgICAg IE5ld0hlYWRlcnMgPSBBbGxvY2F0ZVplcm9Qb29sKChSZXF1ZXN0TWVzc2FnZS0+SGVhZGVyQ291 bnQNCj4gKw0KPiA+Pj4gKyBBZGROZXdIZWFkZXIpICogc2l6ZW9mKEVGSV9IVFRQX0hFQURFUikp Ow0KPiA+PiBMYWNrIG9mIE5VTEwgcG9pbnRlciB0ZXN0IGZvciBOZXdIZWFkZXJzIChvdXQgb2Yg bWVtb3J5IGNhc2UpLg0KPiA+Pj4gKyAgICAgIENvcHlNZW0gKChWT0lEKilOZXdIZWFkZXJzLCAo Vk9JRCAqKVJlcXVlc3RNZXNzYWdlLQ0KPiA+SGVhZGVycywNCj4gPj4gUmVxdWVzdE1lc3NhZ2Ut PkhlYWRlckNvdW50ICogc2l6ZW9mIChFRklfSFRUUF9IRUFERVIpKTsNCj4gPj4+ICsgICAgICBp ZiAoQWRkTmV3SGVhZGVyID09IDApIHsNCj4gPj4+ICsgICAgICAgIC8vDQo+ID4+PiArICAgICAg ICAvLyBPdmVycmlkZSBjb250ZW50LWxlbmd0aCB0byBUcmFuc2Zlci1FbmNvZGluZy4NCj4gPj4+ ICsgICAgICAgIC8vDQo+ID4+PiArICAgICAgICBDb250ZW50TGVuZ3RoSGVhZGVyID0gSHR0cEZp bmRIZWFkZXIgKFJlcXVlc3RNZXNzYWdlLQ0KPiA+Pj4gSGVhZGVyQ291bnQsIE5ld0hlYWRlcnMs IEhUVFBfSEVBREVSX0NPTlRFTlRfTEVOR1RIKTsNCj4gPj4+ICsgICAgICAgIENvbnRlbnRMZW5n dGhIZWFkZXItPkZpZWxkTmFtZSA9IE5VTEw7DQo+ID4+PiArICAgICAgICBDb250ZW50TGVuZ3Ro SGVhZGVyLT5GaWVsZFZhbHVlID0gTlVMTDsNCj4gPj4+ICsgICAgICB9IGVsc2Ugew0KPiA+Pj4g KyAgICAgICAgQ29udGVudExlbmd0aEhlYWRlciA9IE5ld0hlYWRlcnMgKyBSZXF1ZXN0TWVzc2Fn ZS0NCj4gPj4+IEhlYWRlckNvdW50Ow0KPiA+Pj4gKyAgICAgIH0NCj4gPj4+ICsgICAgICBIdHRw U2V0RmllbGROYW1lQW5kVmFsdWUoQ29udGVudExlbmd0aEhlYWRlciwNCj4gPj4gSFRUUF9IRUFE RVJfVFJBTlNGRVJfRU5DT0RJTkcsDQo+ID4+IEhUVFBfSEVBREVSX1RSQU5TRkVSX0VOQ09ESU5H X0NIVU5LRUQpOw0KPiA+Pj4gKyAgICAgIEhlYWRlckNvdW50ID0gUmVxdWVzdE1lc3NhZ2UtPkhl YWRlckNvdW50ICsgQWRkTmV3SGVhZGVyOw0KPiA+PiBNb3ZlIEhlYWRlckNvdW50IGFzc2lnbm1l bnQgYmVmb3JlIE5ld0hlYWRlcnMgYWxsb2NhdGlvbi4gVXNlDQo+ID4+IEhlYWRlckNvdW50IGFz IGFyZ3VtZW50IGZvciBOZXdIZWFkZXJzIGFsbG9jYXRpb24uDQo+ID4+PiArICAgICAgTWVzc2Fn ZUJvZHlMZW5ndGggPSAwOw0KPiA+Pj4gKyAgICAgIE1lc3NhZ2VCb2R5ID0gTlVMTDsNCj4gPj4+ ICsgICAgICBTZW50UmVxdWVzdERhdGEgPSBSZXF1ZXN0TWVzc2FnZS0+RGF0YS5SZXF1ZXN0Ow0K PiA+Pj4gKyAgICAgIGJyZWFrOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgY2FzZSBIdHRwSW9TZW5kQ2h1 bmtDb250ZW50Og0KPiA+Pj4gKyAgICAgIEhlYWRlckNvdW50ID0gMDsNCj4gPj4+ICsgICAgICBO ZXdIZWFkZXJzID0gTlVMTDsNCj4gPj4+ICsgICAgICBTZW50UmVxdWVzdERhdGEgPSBOVUxMOw0K PiA+Pj4gKyAgICAgIGlmIChSZXF1ZXN0TWVzc2FnZS0+Qm9keUxlbmd0aCA+DQo+IEhUVFBfSU9f TUFYX1NFTkRfUEFZTE9BRCkgew0KPiA+Pj4gKyAgICAgICAgTWVzc2FnZUJvZHlMZW5ndGggPSBI VFRQX0lPX01BWF9TRU5EX1BBWUxPQUQ7DQo+ID4+PiArICAgICAgfSBlbHNlIHsNCj4gPj4+ICsg ICAgICAgIE1lc3NhZ2VCb2R5TGVuZ3RoID0gUmVxdWVzdE1lc3NhZ2UtPkJvZHlMZW5ndGg7DQo+ ID4+PiArICAgICAgfQ0KPiA+Pj4gKyAgICAgIEFzY2lpU1ByaW50IChDaHVua0xlbmd0aFN0ciwg SFRUUF9JT19DSFVOS19TSVpFX1NUUklOR19MRU4sDQo+ID4+PiArICIleCVjJWMiLCBNZXNzYWdl Qm9keUxlbmd0aCwgQ0hVTktFRF9UUk5BU0ZFUl9DT0RJTkdfQ1IsDQo+ID4+PiArIENIVU5LRURf VFJOQVNGRVJfQ09ESU5HX0xGKTsNCj4gPj4gTGluZSB0b28gbG9uZywgYnJlYWsgZG93biBpbiBh Y2NvcmRhbmNlIHRvIGNvZGluZyBzdGFuZGFyZC4NCj4gPiBEb25lDQo+ID4NCj4gPj4+ICsgICAg ICBNZXNzYWdlQm9keSA9IEFsbG9jYXRlUG9vbCAoQXNjaWlTdHJMZW4gKENodW5rTGVuZ3RoU3Ry KSArDQo+ID4+IE1lc3NhZ2VCb2R5TGVuZ3RoICsgMik7DQo+ID4+PiArICAgICAgaWYgKE1lc3Nh Z2VCb2R5ID09IE5VTEwpIHsNCj4gPj4+ICsgICAgICAgIERFQlVHKChERUJVR19FUlJPUiwgIk5v dCBlbm91Z2ggbWVtb3J5IGZvciBjaHVuaw0KPiA+PiB0cmFuc2ZlclxuIikpOw0KPiA+Pj4gKyAg ICAgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+Pj4gKyAgICAgIH0NCj4gPj4+ ICsgICAgICBDb3B5TWVtIChNZXNzYWdlQm9keSwgQ2h1bmtMZW5ndGhTdHIsIEFzY2lpU3RyTGVu DQo+ID4+IChDaHVua0xlbmd0aFN0cikpOw0KPiA+Pj4gKyAgICAgIENvcHlNZW0gKE1lc3NhZ2VC b2R5ICsgQXNjaWlTdHJMZW4gKENodW5rTGVuZ3RoU3RyKSwNCj4gPj4gUmVxdWVzdE1lc3NhZ2Ut PkJvZHksIE1lc3NhZ2VCb2R5TGVuZ3RoKTsNCj4gPj4+ICsgICAgICAqKE1lc3NhZ2VCb2R5ICsg QXNjaWlTdHJMZW4gKENodW5rTGVuZ3RoU3RyKSArDQo+IE1lc3NhZ2VCb2R5TGVuZ3RoKQ0KPiA+ PiA9IENIVU5LRURfVFJOQVNGRVJfQ09ESU5HX0NSOw0KPiA+Pj4gKyAgICAgICooTWVzc2FnZUJv ZHkgKyBBc2NpaVN0ckxlbiAoQ2h1bmtMZW5ndGhTdHIpICsNCj4gTWVzc2FnZUJvZHlMZW5ndGgN Cj4gPj4gKyAxKSA9IENIVU5LRURfVFJOQVNGRVJfQ09ESU5HX0xGOw0KPiA+Pj4gKyAgICAgIFJl cXVlc3RNZXNzYWdlLT5Cb2R5TGVuZ3RoIC09IE1lc3NhZ2VCb2R5TGVuZ3RoOw0KPiA+Pj4gKyAg ICAgIFJlcXVlc3RNZXNzYWdlLT5Cb2R5ID0gKFZPSUQgKikoKENIQVI4ICopUmVxdWVzdE1lc3Nh Z2UtDQo+ID4+PiBCb2R5ICsgTWVzc2FnZUJvZHlMZW5ndGgpOw0KPiA+Pj4gKyAgICAgIE1lc3Nh Z2VCb2R5TGVuZ3RoICs9IChBc2NpaVN0ckxlbiAoQ2h1bmtMZW5ndGhTdHIpICsgMik7DQo+ID4+ IFRoaXMgYmxvY2sgY291bGQgdXNlIHNvbWUgc3BhY2luZyBhbmQgY29tbWVudHMgdG8gaW1wcm92 ZSByZWFkYWJpbGl0eS4NCj4gPiBEb25lDQo+ID4NCj4gPj4+ICsgICAgICBpZiAoUmVxdWVzdE1l c3NhZ2UtPkJvZHlMZW5ndGggPT0gMCkgew0KPiA+Pj4gKyAgICAgICAgKlNlbmRDaHVua1Byb2Nl c3MgPSBIdHRwSW9TZW5kQ2h1bmtFbmRDaHVuazsNCj4gPj4+ICsgICAgICB9DQo+ID4+PiArICAg ICAgYnJlYWs7DQo+ID4+PiArDQo+ID4+PiArICBjYXNlIEh0dHBJb1NlbmRDaHVua0VuZENodW5r Og0KPiA+Pj4gKyAgICAgIEhlYWRlckNvdW50ID0gMDsNCj4gPj4+ICsgICAgICBOZXdIZWFkZXJz ID0gTlVMTDsNCj4gPj4+ICsgICAgICBTZW50UmVxdWVzdERhdGEgPSBOVUxMOw0KPiA+Pj4gKyAg ICAgIEFzY2lpU1ByaW50IChDaHVua0xlbmd0aFN0ciwgSFRUUF9JT19DSFVOS19TSVpFX1NUUklO R19MRU4sDQo+ID4+ICIwJWMlYyVjJWMiLA0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICBD SFVOS0VEX1RSTkFTRkVSX0NPRElOR19DUiwNCj4gPj4gQ0hVTktFRF9UUk5BU0ZFUl9DT0RJTkdf TEYsDQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgIENIVU5LRURfVFJOQVNGRVJfQ09ESU5H X0NSLA0KPiA+PiBDSFVOS0VEX1RSTkFTRkVSX0NPRElOR19MRg0KPiA+Pj4gKyAgICAgICAgICAg ICAgICAgICAgICApOw0KPiA+PiBQbGVhc2UgYnJlYWsgZnVuY3Rpb24gY2FsbHMgaW4gYWNjb3Jk YW5jZSB3aXRoIGNvZGluZyBzdGFuZGFyZC4NCj4gPiBEb25lDQo+ID4+PiArICAgICAgTWVzc2Fn ZUJvZHkgPSBBbGxvY2F0ZVBvb2wgKEFzY2lpU3RyTGVuKENodW5rTGVuZ3RoU3RyKSk7DQo+ID4+ PiArICAgICAgaWYgKE1lc3NhZ2VCb2R5ID09IE5VTEwpIHsNCj4gPj4+ICsgICAgICAgIERFQlVH KChERUJVR19FUlJPUiwgIk5vdCBlbm91Z2ggbWVtb3J5IGZvciB0aGUgZW5kIGNodW5rDQo+ID4+ IHRyYW5zZmVyXG4iKSk7DQo+ID4+PiArICAgICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJD RVM7DQo+ID4+PiArICAgICAgfQ0KPiA+Pj4gKyAgICAgIENvcHlNZW0gKE1lc3NhZ2VCb2R5LCBD aHVua0xlbmd0aFN0ciwgQXNjaWlTdHJMZW4NCj4gPj4gKENodW5rTGVuZ3RoU3RyKSk7DQo+ID4+ PiArICAgICAgTWVzc2FnZUJvZHlMZW5ndGggPSBBc2NpaVN0ckxlbihDaHVua0xlbmd0aFN0cik7 DQo+ID4+PiArICAgICAgKlNlbmRDaHVua1Byb2Nlc3MgPSBIdHRwSW9TZW5kQ2h1bmtGaW5pc2g7 DQo+ID4+PiArICAgICAgYnJlYWs7DQo+ID4+PiArDQo+ID4+PiArICBkZWZhdWx0Og0KPiA+Pj4g KyAgICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4+PiArICB9DQo+ID4+PiAr DQo+ID4+PiArICBTdGF0dXMgPSBIdHRwSW9TZW5kUmVxdWVzdCgNCj4gPj4+ICsgICAgICAgICAg ICAgICBIdHRwSW8sDQo+ID4+PiArICAgICAgICAgICAgICAgU2VudFJlcXVlc3REYXRhLA0KPiA+ Pj4gKyAgICAgICAgICAgICAgIEhlYWRlckNvdW50LA0KPiA+Pj4gKyAgICAgICAgICAgICAgIE5l d0hlYWRlcnMsDQo+ID4+PiArICAgICAgICAgICAgICAgTWVzc2FnZUJvZHlMZW5ndGgsDQo+ID4+ PiArICAgICAgICAgICAgICAgTWVzc2FnZUJvZHkNCj4gPj4+ICsgICAgICAgICAgICAgICApOw0K PiA+Pj4gKyAgaWYgKENvbnRlbnRMZW5ndGhIZWFkZXIgIT0gTlVMTCkgew0KPiA+Pj4gKyAgICBp ZiAoQ29udGVudExlbmd0aEhlYWRlci0+RmllbGROYW1lICE9IE5VTEwpIHsNCj4gPj4+ICsgICAg ICBGcmVlUG9vbChDb250ZW50TGVuZ3RoSGVhZGVyLT5GaWVsZE5hbWUpOw0KPiA+Pj4gKyAgICB9 DQo+ID4+PiArICAgIGlmIChDb250ZW50TGVuZ3RoSGVhZGVyLT5GaWVsZFZhbHVlICE9IE5VTEwp IHsNCj4gPj4+ICsgICAgICBGcmVlUG9vbChDb250ZW50TGVuZ3RoSGVhZGVyLT5GaWVsZFZhbHVl KTsNCj4gPj4+ICsgICAgfQ0KPiA+Pj4gKyAgICBDb250ZW50TGVuZ3RoSGVhZGVyID0gTlVMTDsN Cj4gPj4gTlVMTCBhc3NpZ25tZW50cyBhcmUgbm90IG5lY2Vzc2FyeSBoZXJlIGFzIHdlIGFyZSBl eGl0aW5nIHRoZSBmdW5jdGlvbg0KPiBhbmQNCj4gPj4gdGhvc2UgdmFyaWFibGVzIHdpbGwgbm90 IGJlIHVzZWQuDQo+ID4gUmlnaHQsIGZpeGVkLg0KPiA+Pj4gKyAgfQ0KPiA+Pj4gKyAgaWYgKE5l d0hlYWRlcnMgIT0gTlVMTCkgew0KPiA+Pj4gKyAgICBGcmVlUG9vbChOZXdIZWFkZXJzKTsNCj4g Pj4+ICsgICAgTmV3SGVhZGVycyA9IE5VTEw7DQo+ID4+PiArICB9DQo+ID4+PiArICBpZiAoTWVz c2FnZUJvZHkgIT0gTlVMTCkgew0KPiA+Pj4gKyAgICBGcmVlUG9vbChNZXNzYWdlQm9keSk7DQo+ ID4+PiArICAgIE1lc3NhZ2VCb2R5ID0gTlVMTDsNCj4gPj4+ICsgIH0NCj4gPj4+ICsgIHJldHVy biBTdGF0dXM7DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gKy8qKg0KPiA+Pj4gKyAgU3luY2hy b25vdXNseSByZWNlaXZlIGEgSFRUUCBSRVNQT05TRSBtZXNzYWdlIGZyb20gdGhlIHNlcnZlci4N Cj4gPj4+ICsNCj4gPj4+ICsgIEBwYXJhbVtpbl0gICBIdHRwSW8gICAgICAgICAgIFRoZSBIdHRw SW8gd3JhcHBpbmcgdGhlIEhUVFAgc2VydmljZS4NCj4gPj4+ICsgIEBwYXJhbVtpbl0gICBIZWFk ZXJDb3VudCAgICAgIE51bWJlciBvZiBoZWFkZXJzIGluIEhlYWRlcnMuDQo+ID4+PiArICBAcGFy YW1baW5dICAgSGVhZGVycyAgICAgICAgICBBcnJheSBjb250YWluaW5nIGxpc3Qgb2YgSFRUUCBo ZWFkZXJzLg0KPiA+Pj4gKyAgQHBhcmFtW291dF0gIENodW5rTGlzdEhlYWQgICAgQSBwb2ludGVy IHRvIHJlY2VpdmNlIGxpc3QgaGVhZCBvZg0KPiBjaHVua2VkDQo+ID4+IGRhdGEuDQo+ID4+IFNw ZWxsaW5nOiByZWNlaXZlLg0KPiA+IEZpeGVkLg0KPiA+DQo+ID4+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBDYWxsZXIgaGFzIHRvIHJlbGVhc2UgbWVtb3J5IG9mIENodW5rTGlz dEhlYWQNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhbGwgbGlz dCBlbnRyaWVzLg0KPiA+Pj4gKyAgQHBhcmFtW291dF0gIENvbnRlbnRMZW5ndGggICAgVG90YWwg Y29udGVudCBsZW5ndGgNCj4gPj4+ICsNCj4gPj4+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgICBUaGUgSFRUUCBjaHVua2VkIHRyYW5zZmVyIGlzIHJlY2VpdmVkLg0KPiA+Pj4gKyAg QHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgIE5vIGNodW5rZWQgdHJhbnNmZXIgY29kaW5n IGhlYWRlcg0KPiBmb3VuZC4NCj4gPj4+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMg ICBGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5Lg0KPiA+Pj4gKyAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgIEltcHJvcGVyIHBhcmFtZXRlcnMuDQo+ID4+PiArICBAcmV0dmFsIE90aGVy cyAgICAgICAgICAgICAgICAgT3RoZXIgZXJyb3JzIGFzIGluZGljYXRlZC4NCj4gPj4+ICsNCj4g Pj4+ICsqKi8NCj4gPj4+ICtFRklfU1RBVFVTDQo+ID4+PiArSHR0cElvR2V0Q2h1bmtlZFRyYW5z ZmVyQ29udGVudCAoDQo+ID4+PiArICBJTiAgICAgSFRUUF9JTyAgICAgICAgICAgICAgKkh0dHBJ bywNCj4gPj4+ICsgIElOICAgICBVSU5UTiAgICAgICAgICAgICAgICBIZWFkZXJDb3VudCwNCj4g Pj4+ICsgIElOICAgICBFRklfSFRUUF9IRUFERVIgICAgICAqSGVhZGVycywNCj4gPj4+ICsgIE9V VCAgICBMSVNUX0VOVFJZICAgICAgICAgICAqKkNodW5rTGlzdEhlYWQsDQo+ID4+PiArICBPVVQg ICAgVUlOVE4gICAgICAgICAgICAgICAgKkNvbnRlbnRMZW5ndGgNCj4gPj4+ICsgICkNCj4gPj4+ ICt7DQo+ID4+PiArICBFRklfSFRUUF9IRUFERVIgICAgICAgKkhlYWRlcjsNCj4gPj4+ICsgIENI QVI4ICAgICAgICAgICAgICAgICBDaHVua1NpemVBc2NpaVsyNTZdOw0KPiA+Pj4gKyAgRUZJX1NU QVRVUyAgICAgICAgICAgIFN0YXR1czsNCj4gPj4+ICsgIFVJTlROICAgICAgICAgICAgICAgICBJ bmRleDsNCj4gPj4+ICsgIEhUVFBfSU9fUkVTUE9OU0VfREFUQSBSZXNwb25zZURhdGE7DQo+ID4+ PiArICBVSU5UTiAgICAgICAgICAgICAgICAgVG90YWxMZW5ndGg7DQo+ID4+PiArICBMSVNUX0VO VFJZICAgICAgICAgICAgKkh0dHBDaHVua3M7DQo+ID4+PiArICBIVFRQX0lPX0NIVU5LUyAgICAg ICAqVGhpc0NodW5rOw0KPiA+PiBWYXJpYWJsZSBhbGlnbm1lbnQuDQo+ID4+PiArICBMSVNUX0VO VFJZICAgICAgICAgICAgKlRoaXNMaXN0RW50cnk7DQo+ID4+PiArDQo+ID4+PiArICBpZiAoQ2h1 bmtMaXN0SGVhZCA9PSBOVUxMIHx8IENvbnRlbnRMZW5ndGggPT0gTlVMTCkgew0KPiA+Pj4gKyAg ICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+Pj4gKyAgfQ0KPiA+Pj4gKw0KPiA+ Pj4gKyAgKkNvbnRlbnRMZW5ndGggPSAwOw0KPiA+Pj4gKyAgSGVhZGVyID0gSHR0cEZpbmRIZWFk ZXIgKEhlYWRlckNvdW50LCBIZWFkZXJzLA0KPiA+Pj4gKyBIVFRQX0hFQURFUl9UUkFOU0ZFUl9F TkNPRElORyk7ICBpZiAoSGVhZGVyID09IE5VTEwpIHsNCj4gPj4+ICsgICAgcmV0dXJuIEVGSV9O T1RfRk9VTkQ7DQo+ID4+PiArICB9DQo+ID4+PiArICBpZiAoQXNjaWlTdHJDbXAgKEhlYWRlci0+ RmllbGRWYWx1ZSwNCj4gPj4+ICsgSFRUUF9IRUFERVJfVFJBTlNGRVJfRU5DT0RJTkdfQ0hVTktF RCkgPT0gMCkgew0KPiA+PiBQbGVhc2UgZG8gYSBuZWdhdGlvbiBjb21wYXJpc29uIGluc3RlYWQg YW5kIHJldHVybi4gSXQgcmVkdWNlcyBvbmUgbGV2ZWwNCj4gb2YNCj4gPj4gaW5kZW50YXRpb24u DQo+ID4gRG9uZQ0KPiA+Pj4gKyAgICAvLw0KPiA+Pj4gKyAgICAvLyBMb29wIHRvIGdldCBhbGwg Y2h1bmtzLg0KPiA+Pj4gKyAgICAvLw0KPiA+PiBQbGVhc2UgYXZvaWQgZW1wdHkgc2luZ2xlLWxp bmUgY29tbWVudHMgd2hlbiBzdGFydGluZyBhbmQgZW5kaW5nDQo+ID4+IGNvbW1lbnQgYmxvY2su DQo+ID4+PiArICAgIFRvdGFsTGVuZ3RoID0gMDsNCj4gPj4+ICsgICAgSHR0cENodW5rcyA9IChM SVNUX0VOVFJZICopQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChMSVNUX0VOVFJZKSk7DQo+ID4+ PiArICAgIGlmIChIdHRwQ2h1bmtzID09IE5VTEwpIHsNCj4gPj4+ICsgICAgICBTdGF0dXMgPSBF RklfT1VUX09GX1JFU09VUkNFUzsNCj4gPj4+ICsgICAgICBnb3RvIERlbGV0ZXJDaHVua3M7DQo+ ID4+PiArICAgIH0NCj4gPj4+ICsgICAgSW5pdGlhbGl6ZUxpc3RIZWFkIChIdHRwQ2h1bmtzKTsN Cj4gPj4gQWRkIGEgYml0IG9mIHNwYWNpbmcgYWJvdmUgdG8gaW1wcm92ZSByZWFkYWJpbGl0eS4N Cj4gPiBGaXhlZA0KPiA+Pj4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICIgICAgIENodW5rZWQg dHJhbnNmZXJcbiIpKTsNCj4gPj4+ICsgICAgd2hpbGUgKFRSVUUpIHsNCj4gPj4+ICsgICAgICBa ZXJvTWVtKChWT0lEICopJlJlc3BvbnNlRGF0YSwNCj4gPj4gc2l6ZW9mKEhUVFBfSU9fUkVTUE9O U0VfREFUQSkpOw0KPiA+Pj4gKyAgICAgIFJlc3BvbnNlRGF0YS5Cb2R5TGVuZ3RoID0NCj4gPj4g SFRUUF9JT19DSFVOS0VEX1RSQU5TRkVSX0NPRElOR19EQVRBX0xFTkdUSDsNCj4gPj4+ICsgICAg ICBSZXNwb25zZURhdGEuQm9keSA9IENodW5rU2l6ZUFzY2lpOw0KPiA+Pj4gKyAgICAgIFN0YXR1 cyA9IEh0dHBJb1JlY3ZSZXNwb25zZSAoDQo+ID4+PiArICAgICAgICAgICAgICAgICBIdHRwSW8s DQo+ID4+PiArICAgICAgICAgICAgICAgICBGQUxTRSwNCj4gPj4+ICsgICAgICAgICAgICAgICAg ICZSZXNwb25zZURhdGENCj4gPj4+ICsgICAgICAgICAgICAgICAgICk7DQo+ID4+PiArICAgICAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+Pj4gKyAgICAgICAgcmV0dXJuIFN0YXR1czsN Cj4gPj4+ICsgICAgICB9DQo+ID4+IFJldHVybmluZyBoZXJlIGNyZWF0ZXMgbWVtb3J5IGxlYWsg cmlzayAtIGNodW5rcyBwcmV2aW91c2x5IHJlY2VpdmVkIHdpbGwNCj4gbm90DQo+ID4+IGJlIGZy ZWVkLg0KPiA+IEZpeGVkDQo+ID4+PiArICAgICAgLy8NCj4gPj4+ICsgICAgICAvLyBEZWNvZGlu ZyBDaHVua2VkIFRyYW5zZmVyIENvZGluZy4NCj4gPj4+ICsgICAgICAvLyBPbmx5IGRlY29kZSBj aHVuay1zaXplIGFuZCBsYXN0IGNodW5rLg0KPiA+Pj4gKyAgICAgIC8vDQo+ID4+PiArICAgICAg REVCVUcgKChERUJVR19JTkZPLCAiICAgICBDaHVuayBIVFRQIFJlc3BvbnNlIFN0YXR1c0NvZGUg LQ0KPiAlZFxuIiwNCj4gPj4gUmVzcG9uc2VEYXRhLlJlc3BvbnNlLlN0YXR1c0NvZGUpKTsNCj4g Pj4+ICsgICAgICAvLw0KPiA+Pj4gKyAgICAgIC8vIEJyZWFrIGlmIHRoaXMgaXMgbGFzdCBjaHVu ay4NCj4gPj4+ICsgICAgICAvLw0KPiA+Pj4gKyAgICAgIGlmIChDaHVua1NpemVBc2NpaSBbMF0g PT0NCj4gQ0hVTktFRF9UUk5BU0ZFUl9DT0RJTkdfTEFTVF9DSFVOSykNCj4gPj4gew0KPiA+Pj4g KyAgICAgICAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+ID4+PiArICAgICAgICBERUJVRyAoKERF QlVHX0lORk8sICIgICAgIExhc3QgY2h1bmtcbiIpKTsNCj4gPj4+ICsgICAgICAgIFRoaXNDaHVu ayA9IChIVFRQX0lPX0NIVU5LUyAqKUFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZg0KPiA+PiAoSFRU UF9JT19DSFVOS1MpKTsNCj4gPj4+ICsgICAgICAgIGlmIChUaGlzQ2h1bmsgPT0gTlVMTCkgew0K PiA+Pj4gKyAgICAgICAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPj4+ICsg ICAgICAgICAgZ290byBEZWxldGVyQ2h1bmtzOw0KPiA+Pj4gKyAgICAgICAgfQ0KPiA+Pj4gKyAg ICAgICAgSW5pdGlhbGl6ZUxpc3RIZWFkICgmVGhpc0NodW5rLT5OZXh0Q2h1bmspOw0KPiA+Pj4g KyAgICAgICAgVGhpc0NodW5rLT5MZW5ndGggPSBSZXNwb25zZURhdGEuQm9keUxlbmd0aCAtIDEg LSAyOyAvLyBNaW51cw0KPiA+PiBzaXplb2YgJzAnIGFuZCBDUkxGLg0KPiA+Pj4gKyAgICAgICAg VGhpc0NodW5rLT5EYXRhID0gKENIQVI4ICopQWxsb2NhdGVQb29sIChUaGlzQ2h1bmstPkxlbmd0 aCk7DQo+ID4+PiArICAgICAgICBpZiAoVGhpc0NodW5rLT5EYXRhID09IE5VTEwpIHsNCj4gPj4+ ICsgICAgICAgICAgRnJlZVBvb2wgKChVSU5UOCAqKVRoaXNDaHVuayk7DQo+ID4+PiArICAgICAg ICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+Pj4gKyAgICAgICAgICBnb3Rv IERlbGV0ZXJDaHVua3M7DQo+ID4+PiArICAgICAgICB9DQo+ID4+PiArICAgICAgICBDb3B5TWVt ICgoVUlOVDggKilUaGlzQ2h1bmstPkRhdGEsIChVSU5UOA0KPiAqKVJlc3BvbnNlRGF0YS5Cb2R5 DQo+ID4+ICsgMSwgVGhpc0NodW5rLT5MZW5ndGgpOw0KPiA+Pj4gKyAgICAgICAgVG90YWxMZW5n dGggKz0gVGhpc0NodW5rLT5MZW5ndGg7DQo+ID4+PiArICAgICAgICBJbnNlcnRUYWlsTGlzdCAo SHR0cENodW5rcywgJlRoaXNDaHVuay0+TmV4dENodW5rKTsNCj4gPj4+ICsgICAgICAgIGJyZWFr Ow0KPiA+Pj4gKyAgICAgIH0NCj4gPj4+ICsNCj4gPj4+ICsgICAgICAvLw0KPiA+Pj4gKyAgICAg IC8vIEdldCB0aGUgY2h1bmsgbGVuZ3RoDQo+ID4+PiArICAgICAgLy8NCj4gPj4+ICsgICAgICBJ bmRleCA9IDA7DQo+ID4+PiArICAgICAgd2hpbGUgKChDaHVua1NpemVBc2NpaSBbSW5kZXhdICE9 DQo+ID4+IENIVU5LRURfVFJOQVNGRVJfQ09ESU5HX0VYVEVOU0lPTl9TQVBFUkFUT1IpICYmDQo+ ID4+PiArICAgICAgICAgICAgIChDaHVua1NpemVBc2NpaSBbSW5kZXhdICE9DQo+ID4+PiArIChD SEFSOClDSFVOS0VEX1RSTkFTRkVSX0NPRElOR19DUikgJiYNCj4gPj4gU3BlbGxpbmcgZXJyb3Jz IGluIG1hY3JvcyBhYm92ZS4NCj4gPiBPb3BzLiBCWiBpcyBzdWJtaXR0ZWQgZm9yIHRoaXMgdHlw byBpbiBodHRwMTEuaC4NCj4gPiBJTlZBTElEIFVSSSBSRU1PVkVEDQo+IDNBX19idWd6aWxsYS50 aWFub2NvcmUub3JnX3Nob3ctNUZidWcuY2dpLTNGaWQtDQo+IDNEMzAxOSZkPUR3SURhUSZjPUM1 Yjh6UlFPMW1pR21CZVZaMkxGV2cmcj1fU042RlpCTjRWZ2k0VWxrcw0KPiBrejZxVTNOWVJPMDNu SHA5UDdaNXE1OUEzRSZtPWY2enNfbXJ6d0NDWXdRU2wzcDROYnVpYjdMbjRnVmNPDQo+IEtTNzRv LVhjNTI0JnM9ZzFXSExDbDhVem04WUtMWWtuTTJZN1QwZDRnVDdmdl81OHFoYzRRZWpqMCZlPQ0K PiA+IFBhdGNoIGlzIHNldCB0byB0aGUgbWFpbGluZyBsaXN0IGZvciByZXZpZXcuDQo+ID4NCj4g Pg0KPiA+Pj4gKyAgICAgICAgICAgICAoSW5kZXggIT0NCj4gPj4gSFRUUF9JT19DSFVOS0VEX1RS QU5TRkVSX0NPRElOR19EQVRBX0xFTkdUSCkpIHsNCj4gPj4+ICsgICAgICAgIEluZGV4ICsrOw0K PiA+Pj4gKyAgICAgIH07DQo+ID4+PiArICAgICAgaWYgKEluZGV4ID09DQo+IEhUVFBfSU9fQ0hV TktFRF9UUkFOU0ZFUl9DT0RJTkdfREFUQV9MRU5HVEgpDQo+ID4+IHsNCj4gPj4+ICsgICAgICAg IHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiA+Pj4gKyAgICAgIH0NCj4gPj4gQWdhaW4gLSBtZW1v cnkgbGVhay4NCj4gPiBGaXhlZA0KPiA+DQo+ID4+PiArICAgICAgQ2h1bmtTaXplQXNjaWlbSW5k ZXhdID0gMDsNCj4gPj4+ICsgICAgICBBc2NpaVN0ckhleFRvVWludG5TIChDaHVua1NpemVBc2Np aSwgTlVMTCwgQ29udGVudExlbmd0aCk7DQo+ID4+PiArICAgICAgREVCVUcgKChERUJVR19JTkZP LCAiICAgICBMZW5ndGggb2YgdGhpcyBjaHVuayAlZFxuIiwNCj4gPj4gKkNvbnRlbnRMZW5ndGgp KTsNCj4gPj4+ICsgICAgICAvLw0KPiA+Pj4gKyAgICAgIC8vIFJlY2VpdmUgdGhlIGRhdGE7DQo+ ID4+PiArICAgICAgLy8NCj4gPj4+ICsgICAgICBUaGlzQ2h1bmsgPSAoSFRUUF9JT19DSFVOS1Mg KilBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YNCj4gPj4gKEhUVFBfSU9fQ0hVTktTKSk7DQo+ID4+ PiArICAgICAgaWYgKFRoaXNDaHVuayA9PSBOVUxMKSB7DQo+ID4+PiArICAgICAgICBTdGF0dXMg PSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPj4+ICsgICAgICAgIGdvdG8gRGVsZXRlckNodW5r czsNCj4gPj4+ICsgICAgICB9DQo+ID4+PiArICAgICAgUmVzcG9uc2VEYXRhLkJvZHlMZW5ndGgg PSAqQ29udGVudExlbmd0aDsNCj4gPj4+ICsgICAgICBSZXNwb25zZURhdGEuQm9keSA9IChDSEFS OCAqKUFsbG9jYXRlUG9vbCAoKkNvbnRlbnRMZW5ndGgpOw0KPiA+Pj4gKyAgICAgIGlmIChSZXNw b25zZURhdGEuQm9keSA9PSBOVUxMKSB7DQo+ID4+PiArICAgICAgICBGcmVlUG9vbCAoVGhpc0No dW5rKTsNCj4gPj4+ICsgICAgICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ Pj4gKyAgICAgICAgZ290byBEZWxldGVyQ2h1bmtzOw0KPiA+Pj4gKyAgICAgIH0NCj4gPj4+ICsg ICAgICBJbml0aWFsaXplTGlzdEhlYWQgKCZUaGlzQ2h1bmstPk5leHRDaHVuayk7DQo+ID4+PiAr ICAgICAgVGhpc0NodW5rLT5MZW5ndGggPSAqQ29udGVudExlbmd0aDsNCj4gPj4+ICsgICAgICBU aGlzQ2h1bmstPkRhdGEgPSBSZXNwb25zZURhdGEuQm9keTsNCj4gPj4+ICsgICAgICBJbnNlcnRU YWlsTGlzdCAoSHR0cENodW5rcywgJlRoaXNDaHVuay0+TmV4dENodW5rKTsNCj4gPj4+ICsgICAg ICBTdGF0dXMgPSBIdHRwSW9SZWN2UmVzcG9uc2UgKA0KPiA+Pj4gKyAgICAgICAgICAgICAgICAg SHR0cElvLA0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgRkFMU0UsDQo+ID4+PiArICAgICAgICAg ICAgICAgICAmUmVzcG9uc2VEYXRhDQo+ID4+PiArICAgICAgICAgICAgICAgICApOw0KPiA+Pj4g KyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPj4+ICsgICAgICAgIGdvdG8gRGVs ZXRlckNodW5rczsNCj4gPj4+ICsgICAgICB9DQo+ID4+PiArICAgICAgLy8NCj4gPj4+ICsgICAg ICAvLyBSZWFkIENSTEYNCj4gPj4+ICsgICAgICAvLw0KPiA+Pj4gKyAgICAgIFplcm9NZW0oKFZP SUQgKikmUmVzcG9uc2VEYXRhLA0KPiA+PiBzaXplb2YoSFRUUF9JT19SRVNQT05TRV9EQVRBKSk7 DQo+ID4+PiArICAgICAgUmVzcG9uc2VEYXRhLkJvZHlMZW5ndGggPSAyOw0KPiA+Pj4gKyAgICAg IFJlc3BvbnNlRGF0YS5Cb2R5ID0gQ2h1bmtTaXplQXNjaWk7DQo+ID4+PiArICAgICAgU3RhdHVz ID0gSHR0cElvUmVjdlJlc3BvbnNlICgNCj4gPj4+ICsgICAgICAgICAgICAgICAgIEh0dHBJbywN Cj4gPj4+ICsgICAgICAgICAgICAgICAgIEZBTFNFLA0KPiA+Pj4gKyAgICAgICAgICAgICAgICAg JlJlc3BvbnNlRGF0YQ0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgKTsNCj4gPj4+ICsgICAgICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4+PiArICAgICAgICBnb3RvIERlbGV0ZXJDaHVu a3M7DQo+ID4+PiArICAgICAgfQ0KPiA+Pj4gKw0KPiA+Pj4gKyAgICAgIFRvdGFsTGVuZ3RoICs9 ICpDb250ZW50TGVuZ3RoOw0KPiA+PiBUaGUgZm9sbG93aW5nIGNvZGUgcmVxdWlyZXMgc29tZSBr aW5kIG9mIHByb3RlY3Rpb24gYWdhaW5zdCByZWNlaXZpbmcgYW4NCj4gPj4gaW5maW5pdGUgbnVt YmVyIG9mIGNodW5rcy4NCj4gPj4gQ3VycmVudGx5IEkgY291bGQganVzdCBub3Qgc2VuZCBhIGxh c3QgY2h1bmsgYW5kIHdhaXQgZm9yIHRoZSBwbGF0Zm9ybSB0bw0KPiBjcmFzaA0KPiA+PiBvci9h bmQgcnVuIG91dCBvZiBtZW1vcnkgOikNCj4gPj4NCj4gPiBHb29kIHBvaW50ISBIb3dldmVyLCBJ IGNhbid0IHRoaW5rIG9mIGFueSBnb29kIHdheSB0byBwcmV2ZW50IGZyb20gdGhpcw0KPiBoYXBw ZW5zLiBUaGlzIGRlcGVuZHMgb24gdGhlIHJlbGlhYmlsaXR5IG9mIGNvbnRlbnQgcHJvdmlkZXIg YW5kIGhvdyB0aGUNCj4gd2ViIHNlcnZpY2UgaGFuZGxlcyBjaHVuayB0cmFuc2ZlciwgcmlnaHQ/ DQo+ID4gIEZyb20gc3lzdGVtIGZpcm13YXJlIHZpZXdwb2ludCwgd2Ugd291bGQgY29ubmVjdCB0 byBhIHRydXN0ZWQgY29udGVudA0KPiBzb3VyY2UgZm9yIGVpdGhlciBIVFRQIGJvb3QgaW1hZ2Ug YW5kIFJlZGZpc2ggc2VydmljZSByZXNvdXJjZS4NCj4gPiBEbyB5b3UgdGhpbmsgdGhpcyBjb25j ZXJuIGlzIHZhbGlkIGZvciB0aGUgcmVhbCBwcmFjdGljZT8NCj4gPg0KPiA+IE9yIGdpdmUgaXQg YSBsaW1pdGVkIHNpemUgb2YgcGF5bG9hZD8gTGlrZSB0aGUgc2l6ZSBsYXJnZXIgdGhhbiAxRyBj b3VsZCBiZQ0KPiBjb25zaWRlcmVkIGFzIGFuIGlsbCBjb250ZW50Pw0KPiBXaGF0IHdvdWxkIGJl IHRoZSBsYXJnZXN0IHBheWxvYWQgdGhhdCB5b3Ugd291bGQgbGlrZSB0byB1c2UNCj4gY2h1bmst dHJhbnNmZXIgZm9yPw0KRm9yIHRoZSBIVFRQIHJlc3BvbnNlLCB3aGV0aGVyIHRvIHVzZSBjaHVu ayB0cmFuc2ZlciBpcyBhdCB0aGUgIGRpc2NyZXRpb24gb2YgUmVkZmlzaCBzZXJ2aWNlLiBXZSBj dXJyZW50bHkgY2FuIG9ubHkgdGVsbCBpZiB0aGUgcmVzcG9uc2UgcGF5bG9hZCBpcyBpbiBjaHVu ayB0cmFuc2ZlciBvciBub3QgdXNpbmcgVHJhbnNmZXItRW5jb2RpbmcgSFRUUCByZXNwb25zZSBo ZWFkZXIgYnV0IG5vdCBhYmxlIHRvIHByZWRpY3QgdGhlIHNpemUgb2YgcGF5bG9hZCB1bmxlc3Mg d2UgZ2V0IHRoZSBmaXJzdCBjaHVuay4NCkluIHRoZSByZWFsIHByYWN0aWNlLCBJIHNlZSBhIGxh cmdlIHBheWxvYWQgbGlrZSBBdHRyaWJ1dGVSZWdpc3RyeSBpcyB0cmFuc2ZlcnJlZCBiYWNrIGlu IGNodW5rLCBob3dldmVyLCBJIGFsc28gc2VlIHNvbWUgc21hbGwgc2l6ZSBwYXlsb2FkIGlzIHRy YW5zZmVycmVkIGJhY2sgaW4gY2h1bmsgdHJhbnNmZXIgYXMgd2VsbC4NCj4gSSBzZWUgdGhhdCB0 aGUgY2h1bmtlZCB0cmFuc2ZlciBpcyBub3QgYmVpbmcgY3VycmVudGx5IHVzZWQgaW4gSFRUUA0K PiBCb290LCBzbyB3ZSBzaG91bGQgc3RpY2sgdG8gY3VycmVudCB1c2UgY2FzZSAtwqAgUmVkZmlz aC4NClllcywgY3VycmVudGx5IG9ubHkgUmVkZmlzaFBrZyB1c2UgSFRUUCBjaHVuayB0cmFuc2Zl ciBBUElzIGRlZmluZWQgaW4gRHhlSHR0cElvTGliLiAgQnV0IHdoYXQgZG8geW91IG1lYW4gdG8g c3RpY2sgdGhlIHVzZSBjYXNlIHRvIFJlZGZpc2ggb25seT8gVGhvc2UgY2h1bmsgdHJhbnNmZXIg cmVsYXRlZCBBUElzIGNvdWxkIGJlIGNvbW1vbmx5IHVzZWQgYnkgYW55IGVkazIgSFRUUCBjbGll bnRzIG5lZWQgY2h1bmsgdHJhbnNmZXIgYWx0aG91Z2ggd2Ugb25seSBoYXZlIHR3byB1c2UgY2Fz ZXMgKGFuZCBvbmx5IFJlZGZpc2ggdXNlcyBpdCBzbyBmYXIpLg0KDQo+ID4NCj4gPg0KPiA+Pj4g KyAgICB9Ow0KPiA+Pj4gKyAgICAqQ29udGVudExlbmd0aCA9IFRvdGFsTGVuZ3RoOw0KPiA+Pj4g KyAgICAqQ2h1bmtMaXN0SGVhZCA9IEh0dHBDaHVua3M7DQo+ID4+PiArICAgIERFQlVHICgoREVC VUdfSU5GTywgIiAgICAgVG90YWwgb2YgbGVuZ2ggb2YgY2h1bmtzIDolZFxuIiwNCj4gPj4gVG90 YWxMZW5ndGgpKTsNCj4gPj4+ICsgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+Pj4gKyAgfSBl bHNlIHsNCj4gPj4+ICsgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ID4+PiArICB9DQo+ID4+ PiArRGVsZXRlckNodW5rczo7DQo+ID4+IE5hbWUgdGhpcyBsYWJlbCBFeGl0RGVsZXRlQ2h1bmtz IGFuZCByZW1vdmUgdGhlIGNvbW1hLg0KPiA+Pj4gKyAgd2hpbGUgKCFJc0xpc3RFbXB0eSAoSHR0 cENodW5rcykpIHsNCj4gPj4+ICsgICAgVGhpc0xpc3RFbnRyeSA9IEdldEZpcnN0Tm9kZSAoSHR0 cENodW5rcyk7DQo+ID4+PiArICAgIFJlbW92ZUVudHJ5TGlzdCAoVGhpc0xpc3RFbnRyeSk7DQo+ ID4+PiArICB9Ow0KPiA+Pj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPj4+ICt9DQo+ID4+PiBkaWZm IC0tZ2l0IGEvTmV0d29ya1BrZy9MaWJyYXJ5L0R4ZUh0dHBJb0xpYi9EeGVIdHRwSW9MaWIuaW5m DQo+ID4+PiBiL05ldHdvcmtQa2cvTGlicmFyeS9EeGVIdHRwSW9MaWIvRHhlSHR0cElvTGliLmlu Zg0KPiA+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPj4+IGluZGV4IDAwMDAwMDAwMDAuLmEw MmI0MDk1NDcNCj4gPj4+IC0tLSAvZGV2L251bGwNCj4gPj4+ICsrKyBiL05ldHdvcmtQa2cvTGli cmFyeS9EeGVIdHRwSW9MaWIvRHhlSHR0cElvTGliLmluZg0KPiA+Pj4gQEAgLTAsMCArMSw0MyBA QA0KPiA+Pj4gKyMjIEBmaWxlDQo+ID4+PiArIyAgVGhpcyBsaWJyYXJ5IGluc3RhbmNlIHByb3Zp ZGVzIEhUVFAgSU8gaGVscGVyIGZ1bmN0aW9ucy4NCj4gPj4+ICsjDQo+ID4+PiArIyAgKEMpIENv cHlyaWdodCAyMDIwIEhld2xldHQgUGFja2FyZCBFbnRlcnByaXNlIERldmVsb3BtZW50IExQPEJS Pg0KPiAjDQo+ID4+PiArU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRl bnQgIyAjIw0KPiA+Pj4gKw0KPiA+Pj4gK1tEZWZpbmVzXQ0KPiA+Pj4gKyAgSU5GX1ZFUlNJT04g ICAgICAgICAgICAgICAgICAgID0gMHgwMDAxMDAxYg0KPiA+Pj4gKyAgQkFTRV9OQU1FICAgICAg ICAgICAgICAgICAgICAgID0gRHhlSHR0cElvTGliDQo+ID4+PiArICBNT0RVTEVfVU5JX0ZJTEUg ICAgICAgICAgICAgICAgPSBEeGVIdHRwSW9MaWIudW5pDQo+ID4+PiArICBGSUxFX0dVSUQgICAg ICAgICAgICAgICAgICAgICAgPSA1MEIxOThGOC03OTg2LTRGNTEtQTg1Ny1DRkU0NjQzRDU5RjMN Cj4gPj4+ICsgIE1PRFVMRV9UWVBFICAgICAgICAgICAgICAgICAgICA9IERYRV9EUklWRVINCj4g Pj4+ICsgIFZFUlNJT05fU1RSSU5HICAgICAgICAgICAgICAgICA9IDEuMA0KPiA+Pj4gKyAgTElC UkFSWV9DTEFTUyAgICAgICAgICAgICAgICAgID0gSHR0cElvTGlifCBEWEVfQ09SRSBEWEVfRFJJ VkVSDQo+ID4+IERYRV9SVU5USU1FX0RSSVZFUiBEWEVfU01NX0RSSVZFUiBVRUZJX0FQUExJQ0FU SU9ODQo+ID4+IFVFRklfRFJJVkVSDQo+ID4+PiArDQo+ID4+PiArIw0KPiA+Pj4gKyMgVGhlIGZv bGxvd2luZyBpbmZvcm1hdGlvbiBpcyBmb3IgcmVmZXJlbmNlIG9ubHkgYW5kIG5vdCByZXF1aXJl ZCBieQ0KPiB0aGUNCj4gPj4gYnVpbGQgdG9vbHMuDQo+ID4+PiArIw0KPiA+Pj4gKyMgIFZBTElE X0FSQ0hJVEVDVFVSRVMgICAgICAgICAgID0gSUEzMiBYNjQgRUJDIEFSTSBBQVJNNjQgUklTQ1Y2 NA0KPiA+Pj4gKyMNCj4gPj4+ICsNCj4gPj4+ICtbU291cmNlc10NCj4gPj4+ICsgIER4ZUh0dHBJ b0xpYi5jDQo+ID4+PiArDQo+ID4+PiArW1BhY2thZ2VzXQ0KPiA+Pj4gKyAgTWRlUGtnL01kZVBr Zy5kZWMNCj4gPj4+ICsgIE5ldHdvcmtQa2cvTmV0d29ya1BrZy5kZWMNCj4gPj4+ICsNCj4gPj4+ ICsNCj4gPj4+ICtbTGlicmFyeUNsYXNzZXNdDQo+ID4+PiArICBCYXNlTGliDQo+ID4+PiArICBC YXNlTWVtb3J5TGliDQo+ID4+PiArICBEZWJ1Z0xpYg0KPiA+Pj4gKyAgRHBjTGliDQo+ID4+PiAr ICBNZW1vcnlBbGxvY2F0aW9uTGliDQo+ID4+PiArICBQcmludExpYg0KPiA+Pj4gKyAgVWVmaUJv b3RTZXJ2aWNlc1RhYmxlTGliDQo+ID4+PiArDQo+ID4+PiArW1Byb3RvY29sc10NCj4gPj4+ICsg IGdFZmlIdHRwUHJvdG9jb2xHdWlkICAgICAgICAgICAgICMjIFNPTUVUSU1FU19DT05TVU1FUw0K PiA+Pj4gKw0KPiA+Pj4gZGlmZiAtLWdpdCBhL05ldHdvcmtQa2cvTGlicmFyeS9EeGVIdHRwSW9M aWIvRHhlSHR0cElvTGliLnVuaQ0KPiA+Pj4gYi9OZXR3b3JrUGtnL0xpYnJhcnkvRHhlSHR0cElv TGliL0R4ZUh0dHBJb0xpYi51bmkNCj4gPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4+PiBp bmRleCAwMDAwMDAwMDAwLi5kNDE5YjFhNDlkDQo+ID4+PiAtLS0gL2Rldi9udWxsDQo+ID4+PiAr KysgYi9OZXR3b3JrUGtnL0xpYnJhcnkvRHhlSHR0cElvTGliL0R4ZUh0dHBJb0xpYi51bmkNCj4g Pj4+IEBAIC0wLDAgKzEsMTMgQEANCj4gPj4+ICsvLyAvKiogQGZpbGUNCj4gPj4+ICsvLyBUaGUg bGlicmFyeSBpbnN0YW5jZSBwcm92aWRlcyBIVFRQIElPIGhlbHBlciBmdW5jdGlvbnMuDQo+ID4+ PiArLy8NCj4gPj4+ICsvLyAoQykgQ29weXJpZ2h0IDIwMjAgSGV3bGV0dCBQYWNrYXJkIEVudGVy cHJpc2UgRGV2ZWxvcG1lbnQgTFA8QlI+DQo+ID4+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQgLy8gLy8gKiovDQo+ID4+PiArDQo+ID4+PiArDQo+ID4+ PiArI3N0cmluZyBTVFJfTU9EVUxFX0FCU1RSQUNUICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1V UyAiSFRUUCBJTw0KPiBIZWxwZXINCj4gPj4gTGlicmFyeSINCj4gPj4+ICsNCj4gPj4+ICsjc3Ry aW5nIFNUUl9NT0RVTEVfREVTQ1JJUFRJT04gICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICJUaGUg bGlicmFyeQ0KPiA+PiBpbnN0YW5jZSBwcm92aWRlcyBIVFRQIElPIGhlbHBlciBmdW5jdGlvbnMu Ig0KPiA+Pj4gKw0KPiA+DQo+ID4NCj4gPiANCj4gPg0KPiA+DQoNCg==