From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (NAM11-DM6-obe.outbound.protection.outlook.com [40.107.223.88]) by mx.groups.io with SMTP id smtpd.web10.46013.1681700474193733897 for ; Sun, 16 Apr 2023 20:01:14 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@amd.com header.s=selector1 header.b=PFbiDAOX; spf=permerror, err=parse error for token &{10 18 %{i}._ip.%{h}._ehlo.%{d}._spf.vali.email}: invalid domain name (domain: amd.com, ip: 40.107.223.88, mailfrom: abner.chang@amd.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=chwsLwvzc3zUdmYUW1HSm+MYb1OaBOTykaEidStP7xuo+n58wSVt2Ap0knmQiGjTWphYYn4WsxlVc21TFi62SYQXFO/i3T4RgTvABQhDrCoD6mlbEMcQpPYvXB7teSRTSk/nKgNDXRmwy+9a0wmup3z0cWf62YeK5vmsd6pv5JyplWwbh8g6MHjl3fTOOh9iQE7xDlKNQzACFlLgAIUAKWmSjAJJgzx+mwwJ9xokv0D+xDofuMSO/s4/GvHrssfP/7iDPdg3K0j6hIwXLeenSC9AOXIItWdG1v1/tf6HxpywKxGmKUC1aZrQM3McAZ1lV2BWejgG83QRXBhXvcALbA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=J3lWxplUgbpVOjjQVdHRiaLDc6AMsv7ZBsGhJJ2nGDY=; b=hGLF4aFHbWMWEki9TNT0yioURDqnUjeei2pHEVlqmLjzWCxsQYWtWpa1jufV2MekCUOs216uOd6bhvU18XqNuSvtpYoI1oR45dEHVhZsQYuZfgs7iUCdN3RI9rai13Ow3LVreSc+r3RUBID1q/WAao1OD2X3VTjbrz6VMDipnWsXYBrqb9991jYw8+PswotDeP6dt4Ojlk4z1Xx1+i0DI/zrtQXeaukqjVIcic1YN67lpSGN9pgfIKq9jbE3egNgNGcXyQ+PPmq45mOUDSFTljQ3/CperBluHasXu97Xe2MSLIfdL4OQ1d4t/QC19UuPNW7I8a9N9lIa5R8DqPUXHQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=J3lWxplUgbpVOjjQVdHRiaLDc6AMsv7ZBsGhJJ2nGDY=; b=PFbiDAOX18VxrDQwDQVZksw3QPS7sZtAEMJt8j2Bfd4qyKuL1ca7b+qYWIlXly0WHpWIdZHp9GTSZ7+KQNj1VsZLI1hAK4KvZOVNdQ3p+im9G1z+RUi7yQtUJPgvthQ/ml7PhUvLNDiLbIRU0gNYCHyiio8MYdF84vDlI2wEgME= Received: from CH2PR12MB3957.namprd12.prod.outlook.com (2603:10b6:610:2c::17) by MW5PR12MB5681.namprd12.prod.outlook.com (2603:10b6:303:19e::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.30; Mon, 17 Apr 2023 03:01:08 +0000 Received: from CH2PR12MB3957.namprd12.prod.outlook.com ([fe80::8859:e888:875a:bdda]) by CH2PR12MB3957.namprd12.prod.outlook.com ([fe80::8859:e888:875a:bdda%7]) with mapi id 15.20.6298.045; Mon, 17 Apr 2023 03:01:08 +0000 From: "Chang, Abner" To: Tinh Nguyen , Nickle Wang , "devel@edk2.groups.io" CC: Isaac Oram , "Attar, AbdulLateef (Abdul Lateef)" Subject: Re: [edk2-platforms][PATCH] ManageabilityPkg: add support for the phosphor ipmi blob transfer protocol Thread-Topic: [edk2-platforms][PATCH] ManageabilityPkg: add support for the phosphor ipmi blob transfer protocol Thread-Index: AQHZbO1biTXS7tPYRkSQFekf8oIdY68twpCAgAABLpCAAQn3AIAAAL/g Date: Mon, 17 Apr 2023 03:01:08 +0000 Message-ID: References: <20230412031724.12690-1-nicklew@nvidia.com> <0c49ba9d-25e8-2727-a1bd-c93d2d2d6bce@amperemail.onmicrosoft.com> <2e9e9899-ed63-ffd9-eff4-e8ef5af01950@amperemail.onmicrosoft.com> In-Reply-To: <2e9e9899-ed63-ffd9-eff4-e8ef5af01950@amperemail.onmicrosoft.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Enabled=true; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SetDate=2023-04-17T03:01:05Z; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Method=Standard; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Name=General; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ActionId=3ee85904-56f0-409b-8cf1-809b51352fef; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ContentBits=1 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CH2PR12MB3957:EE_|MW5PR12MB5681:EE_ x-ms-office365-filtering-correlation-id: 0b5df712-7f8a-4cd2-f9a9-08db3eeffe39 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: hOD+5Lrh06+SrPjfhSCiMBxnt767GCJAztJ3+oITaD9eFKsJGKkNGPk2G1Ws9D2AJA/a+mVt9bSB3Fn+euqbjdZSlcrYux5n3sPKCDeF44419biBUqQA0FmrkgdlNoeO7Oc0sP3RtzxjSljoD/YavxNd3bn48i4w8ahwuKcSISGpSoIvesy1ec/FTxrf2dSELaRZu9kwzMR5VydiYSuFmMerEk7631XWma9+Y3jWZw8+1dQw561A228Q7w3J/s14aXz2mZIhC84NB9lReQN4cPqphVJrJOdwGEPQ1wntqhFVPuP/U5X7pKuwkrK3Cwu+TGC7SQVGoxwTXy1rhqTmHgiNG6B6kBwy505zyj6GVW5ZWJm/1dWibTFN6OqxpJi7yPo4cgTUKMfLe97fRl+EQ0YpqkbvrEyyZLZTxIrpmIIklLtRv1vrZyAO4btBeyG7W/xpiOMZEuAsQxHoPkLciXY4yAg52jK/9W34HFTUd8e5Tu69avwUeawYaH4fqSvvS+RrgaJH9HmwNedsSv7PD6xmnShhFyzRmr8ej0/G36ZFAJSeY2oWT2h3bbE+K5m7cfbxkTYB/eC/yzAPQOl0mKdwaWuceWOAY8uEwDX+OJoCoZFJ38u9E4oBxY4TUvm4r2wcBIP1NScu4aZNXcmM+o8Q/96ulUY/Sm3NF2gkz1c= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB3957.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(366004)(396003)(39860400002)(136003)(376002)(346002)(451199021)(5660300002)(30864003)(122000001)(2906002)(52536014)(8676002)(8936002)(41300700001)(296002)(316002)(4326008)(83380400001)(76116006)(66556008)(66446008)(64756008)(66946007)(66476007)(71200400001)(38100700002)(55016003)(966005)(110136005)(33656002)(7696005)(19627235002)(9686003)(6506007)(86362001)(54906003)(53546011)(186003)(478600001)(26005)(38070700005)(579004)(559001)(44824005);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?YStBMzY1dktSM1VrVHZYcERwOHZxN0ZCTktPOUIxKzVlWWw4OHQ4K1k1Y0hS?= =?utf-8?B?SG81UG1oU2JjRnY2L2kwWmNFc09YdW9BM2ZmODliemExVERwK25acVl0Q0hs?= =?utf-8?B?ZVpMemF5NmFOaCtpUnpqTTVPd3MvQ2lRekpiakU4VUU0L3RCZUxWZXhqNUpp?= =?utf-8?B?UzlsdHZCaFZmN2l4UTlNMHliamNMRG4xUEh0b2lveHZ1WldTZEpmdHlJTDNQ?= =?utf-8?B?OXUxbHpFVXVlQzBxbWpKQmovM3RjbWZUOVR4UXI3RDZZT09DQ0RWaFdEK01M?= =?utf-8?B?NEFNZzZnaEJ4a0U2VkpYRnlnbjMxaXZxTEFYb2lEVWFKZmQzYklVWnJ5YXFz?= =?utf-8?B?b0NqRnN4YkprQlpxTEJkVmM0WU9Kc05QSFFVOFNaNGtFaDd2cVJzZjAxQ2tY?= =?utf-8?B?blpVb2pFU3FGdXJsbWZYVVl5ZElLMHNhN1RqdUpUZkd0Rk02TDRZUElpWDZu?= =?utf-8?B?VEsyUWJqS2U0Ri9XYkErWVZMUG5IRm5ac1JEeUp3U1VJZjM3Q2NUdzhyNkgv?= =?utf-8?B?V1ExbVhIUjlkeEhaRDViUXN3WGs0emVKVVpDNU5pMnoydytSVGlydE1PaSs1?= =?utf-8?B?cFhhWk1ZUUtIT0crZ2dwL3hOclcwMjVLdzRiUmhRT1R4Yk13MWozMXl4RXNu?= =?utf-8?B?SjMwM3hjN2V1d1RWT2RaamhnNWlxZ1lNekMvUXYvRGpSbXg2MG5GVjRWblNo?= =?utf-8?B?V29HU3czTlMyM0RLREN3Yno0SEF2OGJDcTMyaXZWczMzaWcrdDNFTDlZQ1Qx?= =?utf-8?B?Syt2RG5kdnJpd2NPZjRueGpGYmNpWE9OVnZzOWRCQkdDUk42TXRBWEZYbCtX?= =?utf-8?B?R09PZjRsSW1YNmdxL1ZNTHlNRzRwa2NUYVQ4NmVPaS9UUXlDZm92Q0Q0aTIy?= =?utf-8?B?elE3UkJ1RHlORERjcUZBQXRoUFRjVzJHc0lvbEJmejRKTFJHSC9SRVpDR3U0?= =?utf-8?B?OGNiT3RSTmt0MVN6aFpvdklIS2gxSEJMRzBBbGpWZ0lrdXI2RUhmZ0lWWTNm?= =?utf-8?B?MzN6Y0d4UnY4VW9rSWNyS2tGRkpQRU50WjczQ3QrVEZLeCtqOXYvREVDME5l?= =?utf-8?B?c0lPdlh0dHJScEZtb1BFekFwVXRGdmxrOWxpMGdlM2RqY09hQ0hCMlhEMFhk?= =?utf-8?B?UFJJT1BhR3lMYi9uMWFKc2tTUlBwVUVpcGN3YVNPNGRLcldiYXpVZVNvOHAz?= =?utf-8?B?Nmg1MzMxOFBEUW1QQ0Vma1lnR2NDZlV4NHI2NVk5aWV0VmxlT200czRja3Vl?= =?utf-8?B?SU1XY1JYdVRFbWdkUnZWOTNUVzFZK0hTZm5Yd25XUDlWbGQvMGdua2owcldX?= =?utf-8?B?WU9KcVQ5MnM4a1RUeUVxSG90cjdEUCs0bVo4RGJtdnF3VEN3b3d2U1BxeDBH?= =?utf-8?B?bThFdFlrOFk3bmpxclh0Wks2Y3piTG9qQ3RuM09icWNYbmVYR0ViSld5TDl6?= =?utf-8?B?M3Bxam5XL0pJWVpZNzB3MGtOZDBHVlZ0ZER2LzFaeDVYUVJwTnpIa09YYUF1?= =?utf-8?B?OVRLbXVZTUlPcTg1RWRsUHFSbzEvSnhYRE1jbDg0cEFuWHp0b2pmSlovd1Fj?= =?utf-8?B?ZVFtdEFQQ1E5SW10a1hSb1JJU3E5WW9ONEE5UnFTT2k2bjFsMWYrbVNOVmxs?= =?utf-8?B?c0tVWFRISG1PWjVicEJFc1IrZVFmTC92dHRPNmo5OG1sWEs3WS9abmpJSGxO?= =?utf-8?B?cmN3a0x2Wi8vZnh2RjVPK1JmZmRRdzdROEhxOHVyS3E1SGF3aWpBMGFjZW9r?= =?utf-8?B?MTJYelhOL1pGZnVYWC8zbC9YK2RFQTFLWUZNUjRVOGxSS0hJeStmTkNzZTBF?= =?utf-8?B?WVBhWXRpVTFsREdTVzhrWklIN2tQanJwTnlFWlFUcTZtdXZCUVdyYnQwSXZS?= =?utf-8?B?VVNIc1lUV0p3aFcvQUp3YURvTFFtTjZBUVU2bVQ4QVV6TWd3YksvSlQzRGdX?= =?utf-8?B?QXNOV285QVF6ZWhreE5hVGlGNlZSK1crd3l0aUNsQ2l2dlhzTldRZ0lybkl5?= =?utf-8?B?L0dNSjZ1V09iY2hsTWRLQXVham1COVFXOVRUbTJGanZTblM1Z3VOSU8zM1p5?= =?utf-8?B?N0ZPb1NjUHFkWGNLVXFmSDVlK2Y5YnZOZVV0N0xYRDdQTlJqMThNaC80NUxU?= =?utf-8?Q?llHk=3D?= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3957.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0b5df712-7f8a-4cd2-f9a9-08db3eeffe39 X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Apr 2023 03:01:08.5835 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: SE55pFqt2HElzdoWF+1LqPHNoa5mcr3QK4NDB0+LO46neHSWhpLwTqi1EQnLcsHY0ldqVHGgUumbm5jr1rv6hg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW5PR12MB5681 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 W0FNRCBPZmZpY2lhbCBVc2UgT25seSAtIEdlbmVyYWxdDQoNCg0KDQo+IC0tLS0tT3JpZ2luYWwg TWVzc2FnZS0tLS0tDQo+IEZyb206IFRpbmggTmd1eWVuIDx0aW5obmd1eWVuQGFtcGVyZW1haWwu b25taWNyb3NvZnQuY29tPg0KPiBTZW50OiBNb25kYXksIEFwcmlsIDE3LCAyMDIzIDEwOjI1IEFN DQo+IFRvOiBDaGFuZywgQWJuZXIgPEFibmVyLkNoYW5nQGFtZC5jb20+OyBOaWNrbGUgV2FuZw0K PiA8bmlja2xld0BudmlkaWEuY29tPjsgZGV2ZWxAZWRrMi5ncm91cHMuaW8NCj4gQ2M6IElzYWFj IE9yYW0gPGlzYWFjLncub3JhbUBpbnRlbC5jb20+OyBBdHRhciwgQWJkdWxMYXRlZWYgKEFiZHVs IExhdGVlZikNCj4gPEFiZHVsTGF0ZWVmLkF0dGFyQGFtZC5jb20+DQo+IFN1YmplY3Q6IFJlOiBb ZWRrMi1wbGF0Zm9ybXNdW1BBVENIXSBNYW5hZ2VhYmlsaXR5UGtnOiBhZGQgc3VwcG9ydCBmb3Ig dGhlDQo+IHBob3NwaG9yIGlwbWkgYmxvYiB0cmFuc2ZlciBwcm90b2NvbA0KPiANCj4gQ2F1dGlv bjogVGhpcyBtZXNzYWdlIG9yaWdpbmF0ZWQgZnJvbSBhbiBFeHRlcm5hbCBTb3VyY2UuIFVzZSBw cm9wZXINCj4gY2F1dGlvbiB3aGVuIG9wZW5pbmcgYXR0YWNobWVudHMsIGNsaWNraW5nIGxpbmtz LCBvciByZXNwb25kaW5nLg0KPiANCj4gDQo+IE9uIDQvMTYvMjAyMyA1OjUwIFBNLCBDaGFuZywg QWJuZXIgd3JvdGU6DQo+ID4gW0VYVEVSTkFMIEVNQUlMIE5PVElDRTogVGhpcyBlbWFpbCBvcmln aW5hdGVkIGZyb20gYW4gZXh0ZXJuYWwgc2VuZGVyLg0KPiBQbGVhc2UgYmUgbWluZGZ1bCBvZiBz YWZlIGVtYWlsIGhhbmRsaW5nIGFuZCBwcm9wcmlldGFyeSBpbmZvcm1hdGlvbg0KPiBwcm90ZWN0 aW9uIHByYWN0aWNlcy5dDQo+ID4NCj4gPg0KPiA+IFtBTUQgT2ZmaWNpYWwgVXNlIE9ubHkgLSBH ZW5lcmFsXQ0KPiA+DQo+ID4gVGluayBhbmQgTmlja2xlLA0KPiA+IFR3byBmZWVkYmFja3MgaW4g YmVsb3csDQo+ID4NCj4gPj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPj4gRnJvbTog VGluaCBOZ3V5ZW48dGluaG5ndXllbkBhbXBlcmVtYWlsLm9ubWljcm9zb2Z0LmNvbT4NCj4gPj4g U2VudDogU3VuZGF5LCBBcHJpbCAxNiwgMjAyMyA2OjI5IFBNDQo+ID4+IFRvOiBOaWNrbGUgV2Fu ZzxuaWNrbGV3QG52aWRpYS5jb20+O2RldmVsQGVkazIuZ3JvdXBzLmlvDQo+ID4+IENjOiBDaGFu ZywgQWJuZXI8QWJuZXIuQ2hhbmdAYW1kLmNvbT47IElzYWFjIE9yYW0NCj4gPj4gPGlzYWFjLncu b3JhbUBpbnRlbC5jb20+OyBBdHRhciwgQWJkdWxMYXRlZWYgKEFiZHVsIExhdGVlZikNCj4gPj4g PEFiZHVsTGF0ZWVmLkF0dGFyQGFtZC5jb20+DQo+ID4+IFN1YmplY3Q6IFJlOiBbZWRrMi1wbGF0 Zm9ybXNdW1BBVENIXSBNYW5hZ2VhYmlsaXR5UGtnOiBhZGQgc3VwcG9ydCBmb3INCj4gdGhlDQo+ ID4+IHBob3NwaG9yIGlwbWkgYmxvYiB0cmFuc2ZlciBwcm90b2NvbA0KPiA+Pg0KPiA+PiBDYXV0 aW9uOiBUaGlzIG1lc3NhZ2Ugb3JpZ2luYXRlZCBmcm9tIGFuIEV4dGVybmFsIFNvdXJjZS4gVXNl IHByb3Blcg0KPiA+PiBjYXV0aW9uIHdoZW4gb3BlbmluZyBhdHRhY2htZW50cywgY2xpY2tpbmcg bGlua3MsIG9yIHJlc3BvbmRpbmcuDQo+ID4+DQo+ID4+DQo+ID4+IEhpIE5pY2tsZSwNCj4gPj4N Cj4gPj4gUGxlYXNlIGZpbmQgbXkgaW5saW5lIGNvbW1lbnRzIGJlbG93DQo+ID4+DQo+ID4+IE9u IDQvMTIvMjAyMyAxMDoxNyBBTSwgTmlja2xlIFdhbmcgd3JvdGU6DQo+ID4+PiBbRVhURVJOQUwg RU1BSUwgTk9USUNFOiBUaGlzIGVtYWlsIG9yaWdpbmF0ZWQgZnJvbSBhbiBleHRlcm5hbCBzZW5k ZXIuDQo+ID4+IFBsZWFzZSBiZSBtaW5kZnVsIG9mIHNhZmUgZW1haWwgaGFuZGxpbmcgYW5kIHBy b3ByaWV0YXJ5IGluZm9ybWF0aW9uDQo+ID4+IHByb3RlY3Rpb24gcHJhY3RpY2VzLl0NCj4gPj4+ IFRoaXMgY2hhbmdlIGltcGxlbWVudHMgdGhlIGJsb2IgdHJhbnNmZXIgcHJvdG9jb2wgdXNlZCBp biBPcGVuQm1jDQo+ID4+PiBkb2N1bWVudGVkIGhlcmU6aHR0cHM6Ly9naXRodWIuY29tL29wZW5i bWMvcGhvc3Bob3ItaXBtaS1ibG9icw0KPiA+Pj4NCj4gPj4+IFNpZ25lZC1vZmYtYnk6IE5pY2sg UmFtaXJlejxucmFtaXJlekBudmlkaWEuY29tPg0KPiA+Pj4gQ2M6IEFibmVyIENoYW5nPGFibmVy LmNoYW5nQGFtZC5jb20+DQo+ID4+PiBDYzogSXNhYWMgT3JhbTxpc2FhYy53Lm9yYW1AaW50ZWwu Y29tPg0KPiA+Pj4gQ2M6IEFiZHVsIExhdGVlZiBBdHRhcjxBYmR1bExhdGVlZi5BdHRhckBhbWQu Y29tPg0KPiA+Pj4gQ2M6IE5pY2tsZSBXYW5nPG5pY2tsZXdAbnZpZGlhLmNvbT4NCj4gPj4+IENj OiBUaW5oIE5ndXllbjx0aW5obmd1eWVuQGFtcGVyZW1haWwub25taWNyb3NvZnQuY29tPg0KPiA+ Pj4gLS0tDQo+ID4+PiAgICAuLi4vTWFuYWdlYWJpbGl0eVBrZy9NYW5hZ2VhYmlsaXR5UGtnLmRl YyAgICAgfCAgICA2ICsNCj4gPj4+ICAgIC4uLi9JbmNsdWRlL0RzYy9NYW5hZ2VhYmlsaXR5LmRz YyAgICAgICAgICAgICB8ICAgIDQgKy0NCj4gPj4+ICAgIC4uLi9JcG1pQmxvYlRyYW5zZmVyRHhl LmluZiAgICAgICAgICAgICAgICAgICB8ICAgMzkgKw0KPiA+Pj4gICAgLi4uL0lwbWlCbG9iVHJh bnNmZXJUZXN0VW5pdFRlc3RzSG9zdC5pbmYgICAgIHwgICA0MCArDQo+ID4+PiAgICAuLi4vSW5j bHVkZS9Qcm90b2NvbC9JcG1pQmxvYlRyYW5zZmVyLmggICAgICAgfCAgMTM2ICsrDQo+ID4+PiAg ICAuLi4vSW50ZXJuYWxJcG1pQmxvYlRyYW5zZmVyLmggICAgICAgICAgICAgICAgfCAgMzYzICsr KysrKw0KPiA+Pj4gICAgLi4uL0lwbWlCbG9iVHJhbnNmZXJEeGUvSXBtaUJsb2JUcmFuc2ZlckR4 ZS5jIHwgIDc5OSArKysrKysrKysrKysNCj4gPj4+ICAgIC4uLi9Vbml0VGVzdC9JcG1pQmxvYlRy YW5zZmVyVGVzdFVuaXRUZXN0cy5jICB8IDExMTMNCj4gPj4gKysrKysrKysrKysrKysrKysNCj4g Pj4+ICAgIC4uLi9Vbml2ZXJzYWwvSXBtaUJsb2JUcmFuc2ZlckR4ZS9SZWFkbWUubWQgICB8ICAg MjQgKw0KPiA+Pj4gICAgOSBmaWxlcyBjaGFuZ2VkLCAyNTIzIGluc2VydGlvbnMoKyksIDEgZGVs ZXRpb24oLSkNCj4gPj4+ICAgIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiA+Pg0KPiBGZWF0dXJlcy9N YW5hZ2VhYmlsaXR5UGtnL1VuaXZlcnNhbC9JcG1pQmxvYlRyYW5zZmVyRHhlL0lwbWlCbG9iVHJh bnNmDQo+ID4+IGVyRHhlLmluZg0KPiA+Pj4gICAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4+DQo+ IEZlYXR1cmVzL01hbmFnZWFiaWxpdHlQa2cvVW5pdmVyc2FsL0lwbWlCbG9iVHJhbnNmZXJEeGUv VW5pdFRlc3QvSXBtaUJsDQo+ID4+IG9iVHJhbnNmZXJUZXN0VW5pdFRlc3RzSG9zdC5pbmYNCj4g Pj4+ICAgIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiA+PiBGZWF0dXJlcy9NYW5hZ2VhYmlsaXR5UGtn L0luY2x1ZGUvUHJvdG9jb2wvSXBtaUJsb2JUcmFuc2Zlci5oDQo+ID4+PiAgICBjcmVhdGUgbW9k ZSAxMDA2NDQNCj4gPj4NCj4gRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9Vbml2ZXJzYWwvSXBt aUJsb2JUcmFuc2ZlckR4ZS9JbnRlcm5hbElwbWlCbG8NCj4gPj4gYlRyYW5zZmVyLmgNCj4gPj4+ ICAgIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiA+Pg0KPiBGZWF0dXJlcy9NYW5hZ2VhYmlsaXR5UGtn L1VuaXZlcnNhbC9JcG1pQmxvYlRyYW5zZmVyRHhlL0lwbWlCbG9iVHJhbnNmDQo+ID4+IGVyRHhl LmMNCj4gPj4+ICAgIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiA+Pg0KPiBGZWF0dXJlcy9NYW5hZ2Vh YmlsaXR5UGtnL1VuaXZlcnNhbC9JcG1pQmxvYlRyYW5zZmVyRHhlL1VuaXRUZXN0L0lwbWlCbA0K PiA+PiBvYlRyYW5zZmVyVGVzdFVuaXRUZXN0cy5jDQo+ID4+PiAgICBjcmVhdGUgbW9kZSAxMDA2 NDQNCj4gPj4gRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9Vbml2ZXJzYWwvSXBtaUJsb2JUcmFu c2ZlckR4ZS9SZWFkbWUubWQNCj4gPj4+IGRpZmYgLS1naXQgYS9GZWF0dXJlcy9NYW5hZ2VhYmls aXR5UGtnL01hbmFnZWFiaWxpdHlQa2cuZGVjDQo+ID4+IGIvRmVhdHVyZXMvTWFuYWdlYWJpbGl0 eVBrZy9NYW5hZ2VhYmlsaXR5UGtnLmRlYw0KPiA+Pj4gaW5kZXggOWE5MzBkM2U0Yi4uZTJkNmNj Y2M1MCAxMDA2NDQNCj4gPj4+IC0tLSBhL0ZlYXR1cmVzL01hbmFnZWFiaWxpdHlQa2cvTWFuYWdl YWJpbGl0eVBrZy5kZWMNCj4gPj4+ICsrKyBiL0ZlYXR1cmVzL01hbmFnZWFiaWxpdHlQa2cvTWFu YWdlYWJpbGl0eVBrZy5kZWMNCj4gPj4+IEBAIC00LDYgKzQsNyBAQA0KPiA+Pj4gICAgIyB0aG9z ZSBhcmUgcmVsYXRlZCB0byB0aGUgcGxhdGZvcm0gbWFuYWdlbWVudC4NCj4gPj4+ICAgICMNCj4g Pj4+ICAgICMgQ29weXJpZ2h0IChDKSAyMDIzIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4g QWxsIHJpZ2h0cw0KPiByZXNlcnZlZC48QlI+DQo+ID4+PiArIyBDb3B5cmlnaHQgKGMpIDIwMjMs IE5WSURJQSBDT1JQT1JBVElPTiAmIEFGRklMSUFURVMuIEFsbCByaWdodHMNCj4gPj4gcmVzZXJ2 ZWQuDQo+ID4+PiAgICAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0 ZW50DQo+ID4+PiAgICAjDQo+ID4+PiAgICAjIw0KPiA+Pj4gQEAgLTQ4LDMgKzQ5LDggQEANCj4g Pj4+ICAgICAgZ01hbmFnZWFiaWxpdHlQcm90b2NvbE1jdHBHdWlkICAgID0geyAweDc2RkVEOEYx LCAweDBCRTUsIDB4NDI2OSwNCj4gPj4geyAweEEzLCAweDFBLCAweDM4LCAweDBGLCAweDU0LCAw eEYxLCAweEExLCAweDhBIH0gfQ0KPiA+Pj4gICAgICAjIE1hbmFnZWFiaWxpdHkgUHJvdG9jb2wg UExETQ0KPiA+Pj4gICAgICBnTWFuYWdlYWJpbGl0eVByb3RvY29sUGxkbUd1aWQgICAgPSB7IDB4 Mzk1ODA5MEQsIDB4NjlERCwgMHg0ODY4LA0KPiA+PiB7IDB4OUMsIDB4NDEsIDB4QzksIDB4QUMs IDB4MzEsIDB4QjUsIDB4MjUsIDB4QzUgfSB9DQo+ID4+PiArDQo+ID4+PiArW1Byb3RvY29sc10N Cj4gPj4+ICsNCj4gPj4+ICsgICMjIEluY2x1ZGUvUHJvdG9jb2wvSXBtaUJsb2JUcmFuc2Zlci5o DQo+ID4+PiArICBnRWRraWlJcG1pQmxvYlRyYW5zZmVyUHJvdG9jb2xHdWlkID0geyAweDA1ODM3 Yzc1LCAweDFkNjUsIDB4NDY4YiwNCj4gPj4geyAweGIxLCAweGMyLCAweDgxLCAweGFmLCAweDlh LCAweDMxLCAweDViLCAweDJjIH0gfQ0KPiA+Pj4gZGlmZiAtLWdpdCBhL0ZlYXR1cmVzL01hbmFn ZWFiaWxpdHlQa2cvSW5jbHVkZS9Ec2MvTWFuYWdlYWJpbGl0eS5kc2MNCj4gPj4gYi9GZWF0dXJl cy9NYW5hZ2VhYmlsaXR5UGtnL0luY2x1ZGUvRHNjL01hbmFnZWFiaWxpdHkuZHNjDQo+ID4+PiBp bmRleCAwZDg2OGZkZjRhLi4xMTFkNmI5MWRjIDEwMDY0NA0KPiA+Pj4gLS0tIGEvRmVhdHVyZXMv TWFuYWdlYWJpbGl0eVBrZy9JbmNsdWRlL0RzYy9NYW5hZ2VhYmlsaXR5LmRzYw0KPiA+Pj4gKysr IGIvRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9JbmNsdWRlL0RzYy9NYW5hZ2VhYmlsaXR5LmRz Yw0KPiA+Pj4gQEAgLTIsMTEgKzIsMTMgQEANCj4gPj4+ICAgICMgQ29tbW9uIGxpYnJhcmllcyBm b3IgTWFuYWdlYWJpbHR5IFBhY2thZ2UNCj4gPj4+ICAgICMNCj4gPj4+ICAgICMgQ29weXJpZ2h0 IChDKSAyMDIzIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4gQWxsIHJpZ2h0cw0KPiByZXNl cnZlZC48QlI+DQo+ID4+PiArIyBDb3B5cmlnaHQgKGMpIDIwMjMsIE5WSURJQSBDT1JQT1JBVElP TiAmIEFGRklMSUFURVMuIEFsbCByaWdodHMNCj4gPj4gcmVzZXJ2ZWQuDQo+ID4+PiAgICAjIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4+PiAgICAjDQo+ ID4+PiAgICAjIw0KPiA+Pj4gICAgW0xpYnJhcnlDbGFzc2VzXQ0KPiA+Pj4NCj4gPj4NCj4gTWFu YWdlYWJpbGl0eVRyYW5zcG9ydEhlbHBlckxpYnxNYW5hZ2VhYmlsaXR5UGtnL0xpYnJhcnkvQmFz ZU1hbmFnZWFiaQ0KPiA+PiBsaXR5VHJhbnNwb3J0SGVscGVyTGliL0Jhc2VNYW5hZ2VhYmlsaXR5 VHJhbnNwb3J0SGVscGVyLmluZg0KPiA+Pj4gKw0KPiA+Pg0KPiBJcG1pTGlifE1kZU1vZHVsZVBr Zy9MaWJyYXJ5L0R4ZUlwbWlMaWJJcG1pUHJvdG9jb2wvRHhlSXBtaUxpYklwbWlQcg0KPiA+PiBv dG9jb2wuaW5mDQo+ID4+PiAgICBbTGlicmFyeUNsYXNzZXMuQVJNLCBMaWJyYXJ5Q2xhc3Nlcy5B QVJDSDY0XQ0KPiA+Pj4gICAgICAjDQo+ID4+PiBAQCAtMjIsNCArMjQsNCBAQA0KPiA+Pj4gICAg W0NvbXBvbmVudHMuWDY0XQ0KPiA+Pj4gICAgICBNYW5hZ2VhYmlsaXR5UGtnL1VuaXZlcnNhbC9J cG1pUHJvdG9jb2wvRHhlL0lwbWlQcm90b2NvbER4ZS5pbmYNCj4gPj4+ICAgICAgTWFuYWdlYWJp bGl0eVBrZy9Vbml2ZXJzYWwvSXBtaVByb3RvY29sL1NtbS9JcG1pUHJvdG9jb2xTbW0uaW5mDQo+ ID4+PiAtDQo+ID4+PiArDQo+ID4+DQo+IE1hbmFnZWFiaWxpdHlQa2cvVW5pdmVyc2FsL0lwbWlC bG9iVHJhbnNmZXJEeGUvSXBtaUJsb2JUcmFuc2ZlckR4ZS5pbmYNCj4gPj4+IGRpZmYgLS1naXQN Cj4gPj4NCj4gYS9GZWF0dXJlcy9NYW5hZ2VhYmlsaXR5UGtnL1VuaXZlcnNhbC9JcG1pQmxvYlRy YW5zZmVyRHhlL0lwbWlCbG9iVHJhbg0KPiA+PiBzZmVyRHhlLmluZg0KPiA+Pg0KPiBiL0ZlYXR1 cmVzL01hbmFnZWFiaWxpdHlQa2cvVW5pdmVyc2FsL0lwbWlCbG9iVHJhbnNmZXJEeGUvSXBtaUJs b2JUcmFuDQo+ID4+IHNmZXJEeGUuaW5mDQo+ID4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ Pj4gaW5kZXggMDAwMDAwMDAwMC4uMjhlOWQyOTNjMQ0KPiA+Pj4gLS0tIC9kZXYvbnVsbA0KPiA+ Pj4gKysrDQo+ID4+DQo+IGIvRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9Vbml2ZXJzYWwvSXBt aUJsb2JUcmFuc2ZlckR4ZS9JcG1pQmxvYlRyYW4NCj4gPj4gc2ZlckR4ZS5pbmYNCj4gPj4+IEBA IC0wLDAgKzEsMzkgQEANCj4gPj4+ICsjIyBAZmlsZQ0KPiA+Pj4gKyMgSVBNSSBCbG9iIFRyYW5z ZmVyIFByb3RvY29sIERYRSBEcml2ZXIuDQo+ID4+PiArIw0KPiA+Pj4gKyMgIENvcHlyaWdodCAo YykgMjAyMi0yMDIzLCBOVklESUEgQ09SUE9SQVRJT04gJiBBRkZJTElBVEVTLiBBbGwNCj4gcmln aHRzDQo+ID4+IHJlc2VydmVkLg0KPiA+Pj4gKyMNCj4gPj4+ICsjICBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+Pj4gKyMNCj4gPj4+ICsNCj4gPj4+ICtb RGVmaW5lc10NCj4gPj4+ICsgIElORl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICA9IDB4MDAw MTAwMDUNCj4gPj4+ICsgIEJBU0VfTkFNRSAgICAgICAgICAgICAgICAgICAgICA9IElwbWlCbG9i VHJhbnNmZXJEeGUNCj4gPj4+ICsgIEZJTEVfR1VJRCAgICAgICAgICAgICAgICAgICAgICA9IDYz NTdjODA0LTc4YmItNGIwYy1hYmRmLWM3NWRmOTQyZjMxOQ0KPiA+Pj4gKyAgTU9EVUxFX1RZUEUg ICAgICAgICAgICAgICAgICAgID0gRFhFX0RSSVZFUg0KPiA+Pj4gKyAgVkVSU0lPTl9TVFJJTkcg ICAgICAgICAgICAgICAgID0gMS4wDQo+ID4+PiArICBFTlRSWV9QT0lOVCAgICAgICAgICAgICAg ICAgICAgPSBJcG1pQmxvYlRyYW5zZmVyRHhlRHJpdmVyRW50cnlQb2ludA0KPiA+Pj4gKw0KPiA+ Pj4gK1tTb3VyY2VzLmNvbW1vbl0NCj4gPj4+ICsgIElwbWlCbG9iVHJhbnNmZXJEeGUuYw0KPiA+ Pj4gKw0KPiA+Pj4gK1tMaWJyYXJ5Q2xhc3Nlc10NCj4gPj4+ICsgIEJhc2VMaWINCj4gPj4+ICsg IEJhc2VNZW1vcnlMaWINCj4gPj4+ICsgIERlYnVnTGliDQo+ID4+PiArICBJcG1pTGliDQo+ID4+ PiArICBNZW1vcnlBbGxvY2F0aW9uTGliDQo+ID4+PiArICBQY2RMaWINCj4gPj4+ICsgIFVlZmlC b290U2VydmljZXNUYWJsZUxpYg0KPiA+Pj4gKyAgVWVmaURyaXZlckVudHJ5UG9pbnQNCj4gPj4+ ICsNCj4gPj4+ICtbUGFja2FnZXNdDQo+ID4+PiArICBNZGVQa2cvTWRlUGtnLmRlYw0KPiA+Pj4g KyAgTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kZWMNCj4gPj4+ICsgIE1hbmFnZWFiaWxpdHlQ a2cvTWFuYWdlYWJpbGl0eVBrZy5kZWMNCj4gPj4+ICsNCj4gPj4+ICtbUHJvdG9jb2xzXQ0KPiA+ Pj4gKyAgZ0Vka2lpSXBtaUJsb2JUcmFuc2ZlclByb3RvY29sR3VpZA0KPiA+Pj4gKw0KPiA+Pj4g K1tEZXBleF0NCj4gPj4+ICsgIFRSVUUNCj4gPj4+IGRpZmYgLS1naXQNCj4gPj4NCj4gYS9GZWF0 dXJlcy9NYW5hZ2VhYmlsaXR5UGtnL1VuaXZlcnNhbC9JcG1pQmxvYlRyYW5zZmVyRHhlL1VuaXRU ZXN0L0lwbWkNCj4gPj4gQmxvYlRyYW5zZmVyVGVzdFVuaXRUZXN0c0hvc3QuaW5mDQo+ID4+DQo+ IGIvRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9Vbml2ZXJzYWwvSXBtaUJsb2JUcmFuc2ZlckR4 ZS9Vbml0VGVzdC9JcG0NCj4gPj4gaUJsb2JUcmFuc2ZlclRlc3RVbml0VGVzdHNIb3N0LmluZg0K PiA+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPj4+IGluZGV4IDAwMDAwMDAwMDAuLjFmMDcx YmJhZGMNCj4gPj4+IC0tLSAvZGV2L251bGwNCj4gPj4+ICsrKw0KPiA+Pg0KPiBiL0ZlYXR1cmVz L01hbmFnZWFiaWxpdHlQa2cvVW5pdmVyc2FsL0lwbWlCbG9iVHJhbnNmZXJEeGUvVW5pdFRlc3Qv SXBtDQo+ID4+IGlCbG9iVHJhbnNmZXJUZXN0VW5pdFRlc3RzSG9zdC5pbmYNCj4gPj4+IEBAIC0w LDAgKzEsNDAgQEANCj4gPj4+ICsjIyBAZmlsZQ0KPiA+Pj4gKyMgVW5pdCB0ZXN0cyBvZiB0aGUg SXBtaSBibG9iIHRyYW5zZmVyIGRyaXZlciB0aGF0IGFyZSBydW4gZnJvbSBhIGhvc3QNCj4gPj4g ZW52aXJvbm1lbnQuDQo+ID4+PiArIw0KPiA+Pj4gKyMgQ29weXJpZ2h0IChjKSAyMDIwLTIwMjMs IE5WSURJQSBDT1JQT1JBVElPTiAmIEFGRklMSUFURVMuIEFsbA0KPiByaWdodHMNCj4gPj4gcmVz ZXJ2ZWQuDQo+ID4+PiArIw0KPiA+Pj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0y LUNsYXVzZS1QYXRlbnQNCj4gPj4+ICsjIw0KPiA+Pj4gKw0KPiA+Pj4gK1tEZWZpbmVzXQ0KPiA+ Pj4gKyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgID0gMHgwMDAxMDAwNg0KPiA+Pj4g KyAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAgICAgID0gSXBtaUJsb2JUcmFuc2ZlckR4ZVVu aXRUZXN0c0hvc3QNCj4gPj4+ICsgIEZJTEVfR1VJRCAgICAgICAgICAgICAgICAgICAgICA9IDFm NWQ0MDk1LWVhNTItNDMyYy1iMDc4LTg2MDk3ZmVmNjAwNA0KPiA+Pj4gKyAgTU9EVUxFX1RZUEUg ICAgICAgICAgICAgICAgICAgID0gSE9TVF9BUFBMSUNBVElPTg0KPiA+Pj4gKyAgVkVSU0lPTl9T VFJJTkcgICAgICAgICAgICAgICAgID0gMS4wDQo+ID4+PiArDQo+ID4+PiArIw0KPiA+Pj4gKyMg VGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpcyBmb3IgcmVmZXJlbmNlIG9ubHkNCj4gPj4+ICsj IGFuZCBub3QgcmVxdWlyZWQgYnkgdGhlIGJ1aWxkIHRvb2xzLg0KPiA+Pj4gKyMNCj4gPj4+ICsj ICBWQUxJRF9BUkNISVRFQ1RVUkVTICAgICAgICAgICA9IFg2NA0KPiA+Pj4gKyMNCj4gPj4+ICsN Cj4gPj4+ICtbU291cmNlc10NCj4gPj4+ICsgIElwbWlCbG9iVHJhbnNmZXJUZXN0VW5pdFRlc3Rz LmMNCj4gPj4+ICsNCj4gPj4+ICtbUGFja2FnZXNdDQo+ID4+PiArICBNZGVQa2cvTWRlUGtnLmRl Yw0KPiA+Pj4gKyAgTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kZWMNCj4gPj4+ICsgIE1hbmFn ZWFiaWxpdHlQa2cvTWFuYWdlYWJpbGl0eVBrZy5kZWMNCj4gPj4+ICsgIFVuaXRUZXN0RnJhbWV3 b3JrUGtnL1VuaXRUZXN0RnJhbWV3b3JrUGtnLmRlYw0KPiA+Pj4gKw0KPiA+Pj4gK1tMaWJyYXJ5 Q2xhc3Nlc10NCj4gPj4+ICsgIEJhc2VMaWINCj4gPj4+ICsgIEJhc2VNZW1vcnlMaWINCj4gPj4+ ICsgIERlYnVnTGliDQo+ID4+PiArICBVbml0VGVzdExpYg0KPiA+Pj4gKyAgSXBtaUxpYg0KPiA+ Pj4gKw0KPiA+Pj4gK1tQcm90b2NvbHNdDQo+ID4+PiArICBnRWRraWlJcG1pQmxvYlRyYW5zZmVy UHJvdG9jb2xHdWlkDQo+ID4+PiBkaWZmIC0tZ2l0DQo+ID4+IGEvRmVhdHVyZXMvTWFuYWdlYWJp bGl0eVBrZy9JbmNsdWRlL1Byb3RvY29sL0lwbWlCbG9iVHJhbnNmZXIuaA0KPiA+PiBiL0ZlYXR1 cmVzL01hbmFnZWFiaWxpdHlQa2cvSW5jbHVkZS9Qcm90b2NvbC9JcG1pQmxvYlRyYW5zZmVyLmgN Cj4gPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4+PiBpbmRleCAwMDAwMDAwMDAwLi44ZWE3 MWQ4ODE2DQo+ID4+PiAtLS0gL2Rldi9udWxsDQo+ID4+PiArKysgYi9GZWF0dXJlcy9NYW5hZ2Vh YmlsaXR5UGtnL0luY2x1ZGUvUHJvdG9jb2wvSXBtaUJsb2JUcmFuc2Zlci5oDQo+ID4+PiBAQCAt MCwwICsxLDEzNiBAQA0KPiA+Pj4gKy8qKiBAZmlsZQ0KPiA+Pj4gKw0KPiA+Pj4gKyAgSVBNSSBC bG9iIFRyYW5zZmVyIGRyaXZlcg0KPiA+Pj4gKw0KPiA+Pj4gKyAgQ29weXJpZ2h0IChjKSAyMDIy LTIwMjMsIE5WSURJQSBDT1JQT1JBVElPTiAmIEFGRklMSUFURVMuIEFsbA0KPiByaWdodHMNCj4g Pj4gcmVzZXJ2ZWQuDQo+ID4+PiArDQo+ID4+PiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog QlNELTItQ2xhdXNlLVBhdGVudA0KPiA+Pj4gKw0KPiA+Pj4gKyoqLw0KPiA+Pj4gKyNpbmNsdWRl IDxMaWJyYXJ5L0lwbWlMaWIuaD4NCj4gPj4+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNl cnZpY2VzVGFibGVMaWIuaD4NCj4gPj4+ICsjaW5jbHVkZSA8SW5kdXN0cnlTdGFuZGFyZC9JcG1p Lmg+DQo+ID4+PiArDQo+ID4+PiArI2RlZmluZSBJUE1JX05FVEZOX09FTSAgICAgICAgICAgICAg ICAgICAgIDB4MkUNCj4gPj4+ICsjZGVmaW5lIElQTUlfT0VNX0JMT0JfVFJBTlNGRVJfQ01EICAg ICAgICAgMHg4MA0KPiA+Pj4gKyNkZWZpbmUgSVBNSV9PRU1fQkxPQl9NQVhfREFUQV9QRVJfUEFD S0VUICA2NA0KPiA+PiBJdCBpcyBiZXR0ZXIgdG8gYXZvaWQgZml4aW5nIHRoZSBwYWNrZXQgc2l6 ZSBoZXJlLg0KPiA+Pg0KPiA+PiAtIEZvciBzc2lmLCBnZXQgaXQgZnJvbSAiZ2V0IGNhcGFiaWxp dGllcyIgY29tbWFuZC4gSWYgQk1DIHN1cHBvcnRzIG9ubHkNCj4gPj4gc2luZ2xlLXBhcnQgcmVh ZC93cml0ZSwgdGhpcyBzaXplIGV4Y2VlZHMgQk1DIGNhcGFiaWxpdHkNCj4gPj4NCj4gPj4gLSBG b3Iga2NzLCBJIGRvbid0IHNlZSB0aGUgbGltaXRhdGlvbg0KPiA+Pg0KPiA+PiBJIHRoaW5rIGxp bWl0aW5nIHRoZSBzaXplIGhlcmUgaXMgdW5zdWl0YWJsZSwgYXBwbGljYXRpb25zIHRoYXQgdXNl IHRoaXMNCj4gPj4gcHJvdG9jb2wgc2hvdWxkIGNoZWNrIHRoZSBzaXplIHRoZW1zZWx2ZXMNCj4g PiBJUE1JIGJsb2IgdXNlcyBJcG1pTGliIHRvIHN1Ym1pdCB0aGUgY29tbWFuZCBhbmQgSVBNSSBw cm90b2NvbCBpcyB0aGUNCj4gb25lIHRoYXQgdGFsa3MgdG8gdHJhbnNwb3J0IGludGVyZmFjZS4g VGhhdCB3b3VsZCBiZSBJUE1JIHByb3RvY29sJ3MNCj4gcmVzcG9uc2liaWxpdHkgdG8ga25vdyB0 aGUgZXhhY3QgbWF4aW11bSBzaXplIG9mIGVhY2ggdHJhbnNmZXIgcGF5bG9hZCwNCj4gYWNjb3Jk aW5nIHRvIHRoZSB0cmFuc3BvcnQgaW50ZXJmYWNlLg0KPiA+ICBGcm9tIHRoZSBNYW5hZ2VhYmls aXR5UGtnIGRlc2lnbiwgU1NJRiBtYW5hZ2VhYmlsaXR5IHRyYW5zcG9ydCBsaWJyYXJ5IGNhbg0K PiByZXR1cm5zIE1UVSBhbmQgdGhlIGNhcGFiaWxpdHkgb2Ygc2luZ2xlL211bHRpIHBhcnQgcmVh ZC93cml0ZSB0byBjYWxsZXIgKElQTUkNCj4gcHJvdG9jb2wgZm9yIGV4YW1wbGUpLiBJUE1JIHBy b3RvY29sIHNob3VsZCBkZXRlcm1pbmUgaGF2aW5nIGEgc2luZ2xlIHBhcnQNCj4gdHJhbnNmZXIg b3Igc3BsaXR0aW5nIHRoZSBwYWNrZXQgaW50byBtdWx0aSB0cmFuc2ZlcnMuDQo+ID4gSSBjYW4g aGVscCBvbiBTU0lGIG1hbmFnZWFiaWxpdHkgdHJhbnNwb3J0IGxpYnJhcnkgYXMgd2VsbCBpZiB5 b3UgaGF2ZSBTU0lGDQo+IHNhbXBsZSBjb2RlLg0KPiAgIHllcyBJ4oCZbSBwcmVwYXJpbmcgdGhl IHNzaWYgZHJpdmVyLCBJ4oCZbSBzb3JyeSBmb3IgYmVpbmcgbGF0ZS4NClRoYXQncyBncmVhdCwg VGluaC4gSSBiZWxpZXZlIHRoZXJlIGFyZSBzb21lIG1pc3NpbmcgY29uc2lkZXJhdGlvbnMgaW4g dGhlIE1hbmFnZWFiaWxpdHlQa2cgYW5kIHdlIG5lZWQgbW9yZSB1c2UgY2FzZXMgdG8gZmluZCBp dCBvdXQgYW5kIGltcHJvdmUgaXQuIEkgd2lsbCBkZWZpbml0ZWx5IGhlbHAgb24gdGhpcy4NCg0K PiA+Pj4gKw0KPiA+Pj4gKyNkZWZpbmUgQkxPQl9UUkFOU0ZFUl9TVEFUX09QRU5fUiAgICAgICAg QklUMA0KPiA+Pj4gKyNkZWZpbmUgQkxPQl9UUkFOU0ZFUl9TVEFUX09QRU5fVyAgICAgICAgQklU MQ0KPiA+Pj4gKyNkZWZpbmUgQkxPQl9UUkFOU0ZFUl9TVEFUX0NPTU1JVElORyAgICAgQklUMg0K PiA+Pj4gKyNkZWZpbmUgQkxPQl9UUkFOU0ZFUl9TVEFUX0NPTU1JVFRFRCAgICAgQklUMw0KPiA+ Pj4gKyNkZWZpbmUgQkxPQl9UUkFOU0ZFUl9TVEFUX0NPTU1JVF9FUlJPUiAgQklUNA0KPiA+Pj4g Ky8vIEJpdHMgNS03IGFyZSByZXNlcnZlZA0KPiA+Pj4gKy8vIEJpdHMgOC0xNSBhcmUgYmxvYi1z cGVjaWZpYyBkZWZpbml0aW9ucw0KPiA+Pj4gKw0KPiA+Pj4gKy8vDQo+ID4+PiArLy8gIEJsb2Ig VHJhbnNmZXIgRnVuY3Rpb24gUHJvdG90eXBlcw0KPiA+Pj4gKy8vDQo+ID4+PiArdHlwZWRlZg0K PiA+Pj4gK0VGSV9TVEFUVVMNCj4gPj4+ICsoRUZJQVBJICpJUE1JX0JMT0JfVFJBTlNGRVJfUFJP VE9DT0xfR0VUX0NPVU5UKSgNCj4gPj4+ICsgIE9VVCBVSU5UMzIgKkNvdW50DQo+ID4+PiArICAp Ow0KPiA+Pj4gKw0KPiA+Pj4gK3R5cGVkZWYNCj4gPj4+ICtFRklfU1RBVFVTDQo+ID4+PiArKEVG SUFQSSAqSVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MX0VOVU1FUkFURSkoDQo+ID4+PiArICBJ TiAgVUlOVDMyICAgICAgQmxvYkluZGV4LA0KPiA+Pj4gKyAgT1VUIENIQVI4ICpCbG9iSWQNCj4g Pj4+ICsgICk7DQo+ID4+PiArDQo+ID4+PiArdHlwZWRlZg0KPiA+Pj4gK0VGSV9TVEFUVVMNCj4g Pj4+ICsoRUZJQVBJICpJUE1JX0JMT0JfVFJBTlNGRVJfUFJPVE9DT0xfT1BFTikoDQo+ID4+PiAr ICBJTiAgQ0hBUjggKkJsb2JJZCwNCj4gPj4+ICsgIElOICBVSU5UMTYgICAgICBGbGFncywNCj4g Pj4+ICsgIE9VVCBVSU5UMTYgKlNlc3Npb25JZA0KPiA+Pj4gKyAgKTsNCj4gPj4+ICsNCj4gPj4+ ICt0eXBlZGVmDQo+ID4+PiArRUZJX1NUQVRVUw0KPiA+Pj4gKyhFRklBUEkgKklQTUlfQkxPQl9U UkFOU0ZFUl9QUk9UT0NPTF9SRUFEKSgNCj4gPj4+ICsgIElOICBVSU5UMTYgICAgICBTZXNzaW9u SWQsDQo+ID4+PiArICBJTiAgVUlOVDMyICAgICAgT2Zmc2V0LA0KPiA+Pj4gKyAgSU4gIFVJTlQz MiAgICAgIFJlcXVlc3RlZFNpemUsDQo+ID4+PiArICBPVVQgVUlOVDggKkRhdGENCj4gPj4+ICsg ICk7DQo+ID4+PiArDQo+ID4+PiArdHlwZWRlZg0KPiA+Pj4gK0VGSV9TVEFUVVMNCj4gPj4+ICso RUZJQVBJICpJUE1JX0JMT0JfVFJBTlNGRVJfUFJPVE9DT0xfV1JJVEUpKA0KPiA+Pj4gKyAgSU4g IFVJTlQxNiAgICAgIFNlc3Npb25JZCwNCj4gPj4+ICsgIElOICBVSU5UMzIgICAgICBPZmZzZXQs DQo+ID4+PiArICBJTiAgVUlOVDggKkRhdGEsDQo+ID4+PiArICBJTiAgVUlOVDMyICAgICAgV3Jp dGVMZW5ndGgNCj4gPj4+ICsgICk7DQo+ID4+PiArDQo+ID4+PiArdHlwZWRlZg0KPiA+Pj4gK0VG SV9TVEFUVVMNCj4gPj4+ICsoRUZJQVBJICpJUE1JX0JMT0JfVFJBTlNGRVJfUFJPVE9DT0xfQ09N TUlUKSgNCj4gPj4+ICsgIElOICBVSU5UMTYgICAgICBTZXNzaW9uSWQsDQo+ID4+PiArICBJTiAg VUlOVDggICAgICAgQ29tbWl0RGF0YUxlbmd0aCwNCj4gPj4+ICsgIElOICBVSU5UOCAqQ29tbWl0 RGF0YQ0KPiA+Pj4gKyAgKTsNCj4gPj4+ICsNCj4gPj4+ICt0eXBlZGVmDQo+ID4+PiArRUZJX1NU QVRVUw0KPiA+Pj4gKyhFRklBUEkgKklQTUlfQkxPQl9UUkFOU0ZFUl9QUk9UT0NPTF9DTE9TRSko DQo+ID4+PiArICBJTiAgVUlOVDE2ICAgICAgU2Vzc2lvbklkDQo+ID4+PiArICApOw0KPiA+Pj4g Kw0KPiA+Pj4gK3R5cGVkZWYNCj4gPj4+ICtFRklfU1RBVFVTDQo+ID4+PiArKEVGSUFQSSAqSVBN SV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MX0RFTEVURSkoDQo+ID4+PiArICBJTiAgQ0hBUjggKkJs b2JJZA0KPiA+Pj4gKyAgKTsNCj4gPj4+ICsNCj4gPj4+ICt0eXBlZGVmDQo+ID4+PiArRUZJX1NU QVRVUw0KPiA+Pj4gKyhFRklBUEkgKklQTUlfQkxPQl9UUkFOU0ZFUl9QUk9UT0NPTF9TVEFUKSgN Cj4gPj4+ICsgIElOICBDSEFSOCAqQmxvYklkLA0KPiA+Pj4gKyAgT1VUIFVJTlQxNiAqQmxvYlN0 YXRlLA0KPiA+Pj4gKyAgT1VUIFVJTlQzMiAqU2l6ZSwNCj4gPj4+ICsgIE9VVCBVSU5UOCAqTWV0 YWRhdGFMZW5ndGgsDQo+ID4+PiArICBPVVQgVUlOVDggKk1ldGFkYXRhDQo+ID4+PiArICApOw0K PiA+Pj4gKw0KPiA+Pj4gK3R5cGVkZWYNCj4gPj4+ICtFRklfU1RBVFVTDQo+ID4+PiArKEVGSUFQ SSAqSVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MX1NFU1NJT05fU1RBVCkoDQo+ID4+PiArICBJ TiAgVUlOVDE2ICAgICAgU2Vzc2lvbklkLA0KPiA+Pj4gKyAgT1VUIFVJTlQxNiAqQmxvYlN0YXRl LA0KPiA+Pj4gKyAgT1VUIFVJTlQzMiAqU2l6ZSwNCj4gPj4+ICsgIE9VVCBVSU5UOCAqTWV0YWRh dGFMZW5ndGgsDQo+ID4+PiArICBPVVQgVUlOVDggKk1ldGFkYXRhDQo+ID4+PiArICApOw0KPiA+ Pj4gKw0KPiA+Pj4gK3R5cGVkZWYNCj4gPj4+ICtFRklfU1RBVFVTDQo+ID4+PiArKEVGSUFQSSAq SVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MX1dSSVRFX01FVEEpKA0KPiA+Pj4gKyAgSU4gIFVJ TlQxNiAgICAgIFNlc3Npb25JZCwNCj4gPj4+ICsgIElOICBVSU5UMzIgICAgICBPZmZzZXQsDQo+ ID4+PiArICBJTiAgVUlOVDggKkRhdGEsDQo+ID4+PiArICBJTiAgVUlOVDMyICAgICAgV3JpdGVM ZW5ndGgNCj4gPj4+ICsgICk7DQo+ID4+PiArDQo+ID4+PiArLy8NCj4gPj4+ICsvLyBTdHJ1Y3R1 cmUgb2YgSVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MDQo+ID4+PiArLy8NCj4gPj4+ICtzdHJ1 Y3QgX0lQTUlfQkxPQl9UUkFOU0ZFUl9QUk9UT0NPTCB7DQo+ID4+PiArICBJUE1JX0JMT0JfVFJB TlNGRVJfUFJPVE9DT0xfR0VUX0NPVU5UICAgICAgIEJsb2JHZXRDb3VudDsNCj4gPj4+ICsgIElQ TUlfQkxPQl9UUkFOU0ZFUl9QUk9UT0NPTF9FTlVNRVJBVEUgICAgICAgQmxvYkVudW1lcmF0ZTsN Cj4gPj4+ICsgIElQTUlfQkxPQl9UUkFOU0ZFUl9QUk9UT0NPTF9PUEVOICAgICAgICAgICAgQmxv Yk9wZW47DQo+ID4+PiArICBJUE1JX0JMT0JfVFJBTlNGRVJfUFJPVE9DT0xfUkVBRCAgICAgICAg ICAgIEJsb2JSZWFkOw0KPiA+Pj4gKyAgSVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MX1dSSVRF ICAgICAgICAgICBCbG9iV3JpdGU7DQo+ID4+PiArICBJUE1JX0JMT0JfVFJBTlNGRVJfUFJPVE9D T0xfQ09NTUlUICAgICAgICAgIEJsb2JDb21taXQ7DQo+ID4+PiArICBJUE1JX0JMT0JfVFJBTlNG RVJfUFJPVE9DT0xfQ0xPU0UgICAgICAgICAgIEJsb2JDbG9zZTsNCj4gPj4+ICsgIElQTUlfQkxP Ql9UUkFOU0ZFUl9QUk9UT0NPTF9ERUxFVEUgICAgICAgICAgQmxvYkRlbGV0ZTsNCj4gPj4+ICsg IElQTUlfQkxPQl9UUkFOU0ZFUl9QUk9UT0NPTF9TVEFUICAgICAgICAgICAgQmxvYlN0YXQ7DQo+ ID4+PiArICBJUE1JX0JMT0JfVFJBTlNGRVJfUFJPVE9DT0xfU0VTU0lPTl9TVEFUICAgIEJsb2JT ZXNzaW9uU3RhdDsNCj4gPj4+ICsgIElQTUlfQkxPQl9UUkFOU0ZFUl9QUk9UT0NPTF9XUklURV9N RVRBICAgICAgQmxvYldyaXRlTWV0YTsNCj4gPj4+ICt9Ow0KPiA+Pj4gKw0KPiA+Pj4gK3R5cGVk ZWYgc3RydWN0IF9JUE1JX0JMT0JfVFJBTlNGRVJfUFJPVE9DT0wNCj4gPj4gSVBNSV9CTE9CX1RS QU5TRkVSX1BST1RPQ09MOw0KPiA+Pj4gKw0KPiA+Pj4gK2V4dGVybiBFRklfR1VJRCAgZ0Vka2lp SXBtaUJsb2JUcmFuc2ZlclByb3RvY29sR3VpZDsNCj4gPj4+IGRpZmYgLS1naXQNCj4gPj4NCj4g YS9GZWF0dXJlcy9NYW5hZ2VhYmlsaXR5UGtnL1VuaXZlcnNhbC9JcG1pQmxvYlRyYW5zZmVyRHhl L0ludGVybmFsSXBtaUINCj4gPj4gbG9iVHJhbnNmZXIuaA0KPiA+Pg0KPiBiL0ZlYXR1cmVzL01h bmFnZWFiaWxpdHlQa2cvVW5pdmVyc2FsL0lwbWlCbG9iVHJhbnNmZXJEeGUvSW50ZXJuYWxJcG1p Qg0KPiA+PiBsb2JUcmFuc2Zlci5oDQo+ID4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+Pj4g aW5kZXggMDAwMDAwMDAwMC4uMTRmMGRjMDJiYw0KPiA+Pj4gLS0tIC9kZXYvbnVsbA0KPiA+Pj4g KysrDQo+ID4+DQo+IGIvRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9Vbml2ZXJzYWwvSXBtaUJs b2JUcmFuc2ZlckR4ZS9JbnRlcm5hbElwbWlCDQo+ID4+IGxvYlRyYW5zZmVyLmgNCj4gPj4+IEBA IC0wLDAgKzEsMzYzIEBADQo+ID4+PiArLyoqIEBmaWxlDQo+ID4+PiArDQo+ID4+PiArICBIZWFk ZXJzIGZvciBJUE1JIEJsb2IgVHJhbnNmZXIgZHJpdmVyDQo+ID4+PiArDQo+ID4+PiArICBDb3B5 cmlnaHQgKGMpIDIwMjItMjAyMywgTlZJRElBIENPUlBPUkFUSU9OICYgQUZGSUxJQVRFUy4gQWxs DQo+IHJpZ2h0cw0KPiA+PiByZXNlcnZlZC4NCj4gPj4+ICsNCj4gPj4+ICsgIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4+PiArDQo+ID4+PiArKiovDQo+ ID4+PiArDQo+ID4+PiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5oPg0KPiA+Pj4gKyNpbmNs dWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCj4gPj4+ICsjaW5jbHVkZSA8TGlicmFyeS9E ZWJ1Z0xpYi5oPg0KPiA+Pj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0lwbWlMaWIuaD4NCj4gPj4+ICsj aW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9uTGliLmg+DQo+ID4+PiArI2luY2x1ZGUg PExpYnJhcnkvUGNkTGliLmg+DQo+ID4+PiArDQo+ID4+PiArI2RlZmluZSBQUk9UT0NPTF9SRVNQ T05TRV9PVkVSSEVBRCAgKDQgKiBzaXplb2YoVUlOVDgpKSAgICAgLy8gMQ0KPiA+PiBieXRlIGNv bXBsZXRpb24gY29kZSArIDMgYnl0ZXMgT0VODQo+ID4+PiArDQo+ID4+PiArLy8gU3ViY29tbWFu ZHMgZm9yIHRoaXMgcHJvdG9jb2wNCj4gPj4+ICt0eXBlZGVmIGVudW0gew0KPiA+Pj4gKyAgSXBt aUJsb2JUcmFuc2ZlclN1YmNvbW1hbmRHZXRDb3VudCA9IDAsDQo+ID4+PiArICBJcG1pQmxvYlRy YW5zZmVyU3ViY29tbWFuZEVudW1lcmF0ZSwNCj4gPj4+ICsgIElwbWlCbG9iVHJhbnNmZXJTdWJj b21tYW5kT3BlbiwNCj4gPj4+ICsgIElwbWlCbG9iVHJhbnNmZXJTdWJjb21tYW5kUmVhZCwNCj4g Pj4+ICsgIElwbWlCbG9iVHJhbnNmZXJTdWJjb21tYW5kV3JpdGUsDQo+ID4+PiArICBJcG1pQmxv YlRyYW5zZmVyU3ViY29tbWFuZENvbW1pdCwNCj4gPj4+ICsgIElwbWlCbG9iVHJhbnNmZXJTdWJj b21tYW5kQ2xvc2UsDQo+ID4+PiArICBJcG1pQmxvYlRyYW5zZmVyU3ViY29tbWFuZERlbGV0ZSwN Cj4gPj4+ICsgIElwbWlCbG9iVHJhbnNmZXJTdWJjb21tYW5kU3RhdCwNCj4gPj4+ICsgIElwbWlC bG9iVHJhbnNmZXJTdWJjb21tYW5kU2Vzc2lvblN0YXQsDQo+ID4+PiArICBJcG1pQmxvYlRyYW5z ZmVyU3ViY29tbWFuZFdyaXRlTWV0YSwNCj4gPj4+ICt9IElQTUlfQkxPQl9UUkFOU0ZFUl9TVUJD T01NQU5EUzsNCj4gPj4+ICsNCj4gPj4+ICsjcHJhZ21hIHBhY2soMSkNCj4gPj4+ICsNCj4gPj4+ ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4+PiArICBVSU5UOCAgICBPRU5bM107DQo+ID4+PiArICBV SU5UOCAgICBTdWJDb21tYW5kOw0KPiA+Pj4gK30gSVBNSV9CTE9CX1RSQU5TRkVSX0hFQURFUjsN Cj4gPj4+ICsNCj4gPj4+ICsvLw0KPiA+Pj4gKy8vIENvbW1hbmQgMCAtIEJtY0Jsb2JHZXRDb3Vu dA0KPiA+Pj4gKy8vIFRoZSBCbWNCbG9iR2V0Q291bnQgY29tbWFuZCBleHBlY3RzIHRvIHJlY2Vp dmUgYW4gZW1wdHkgYm9keS4NCj4gPj4+ICsvLyBUaGUgQk1DIHdpbGwgcmV0dXJuIHRoZSBudW1i ZXIgb2YgZW51bWVyYWJsZSBibG9icw0KPiA+Pj4gKy8vDQo+ID4+PiArdHlwZWRlZiBzdHJ1Y3Qg ew0KPiA+Pj4gKyAgVUlOVDMyICAgIEJsb2JDb3VudDsNCj4gPj4+ICt9IElQTUlfQkxPQl9UUkFO U0ZFUl9HRVRfQ09VTlRfUkVTUE9OU0U7DQo+ID4+PiArDQo+ID4+PiArLy8NCj4gPj4+ICsvLyBD b21tYW5kIDEgLSBCbWNCbG9iRW51bWVyYXRlDQo+ID4+PiArLy8gVGhlIEJtY0Jsb2JFbnVtZXJh dGUgY29tbWFuZCBleHBlY3RzIHRvIHJlY2VpdmUgYSBib2R5IG9mOg0KPiA+Pj4gKy8vDQo+ID4+ PiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+Pj4gKyAgVUlOVDMyICAgIEJsb2JJbmRleDsgLy8gMC1i YXNlZCBpbmRleCBvZiBibG9iIHRvIHJlY2VpdmUNCj4gPj4+ICt9IElQTUlfQkxPQl9UUkFOU0ZF Ul9CTE9CX0VOVU1FUkFURV9TRU5EX0RBVEE7DQo+ID4+PiArDQo+ID4+PiArdHlwZWRlZiBzdHJ1 Y3Qgew0KPiA+Pj4gKyAgQ0hBUjggICAgQmxvYklkW0lQTUlfT0VNX0JMT0JfTUFYX0RBVEFfUEVS X1BBQ0tFVF07DQo+ID4+PiArfSBJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9FTlVNRVJBVEVfUkVT UE9OU0U7DQo+ID4+PiArDQo+ID4+PiArLy8NCj4gPj4+ICsvLyBDb21tYW5kIDIgLSBCbWNCbG9i T3Blbg0KPiA+Pj4gKy8vIFRoZSBCbWNCbG9iT3BlbiBjb21tYW5kIGV4cGVjdHMgdG8gcmVjZWl2 ZSBhIGJvZHkgb2Y6DQo+ID4+PiArLy8NCj4gPj4+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4+PiAr ICBVSU5UMTYgICAgRmxhZ3M7DQo+ID4+PiArICBDSEFSOCAgICAgQmxvYklkW0lQTUlfT0VNX0JM T0JfTUFYX0RBVEFfUEVSX1BBQ0tFVF07DQo+ID4+PiArfSBJUE1JX0JMT0JfVFJBTlNGRVJfQkxP Ql9PUEVOX1NFTkRfREFUQTsNCj4gPj4+ICsNCj4gPj4+ICsjZGVmaW5lIEJMT0JfT1BFTl9GTEFH X1JFQUQgICAwDQo+ID4+PiArI2RlZmluZSBCTE9CX09QRU5fRkxBR19XUklURSAgMQ0KPiA+Pj4g Ky8vIEJpdHMgMi03IGFyZSByZXNlcnZlZA0KPiA+Pj4gKy8vIEJpdHMgOC0xNSBhcmUgYmxvYi1z cGVjaWZpYyBkZWZpbml0aW9ucw0KPiA+Pj4gKw0KPiA+Pj4gK3R5cGVkZWYgc3RydWN0IHsNCj4g Pj4+ICsgIFVJTlQxNiAgICBTZXNzaW9uSWQ7DQo+ID4+PiArfSBJUE1JX0JMT0JfVFJBTlNGRVJf QkxPQl9PUEVOX1JFU1BPTlNFOw0KPiA+Pj4gKw0KPiA+Pj4gKy8vDQo+ID4+PiArLy8gQ29tbWFu ZCAzIC0gQm1jQmxvYlJlYWQNCj4gPj4+ICsvLyBUaGUgQm1jQmxvYlJlYWQgY29tbWFuZCBleHBl Y3RzIHRvIHJlY2VpdmUgYSBib2R5IG9mOg0KPiA+Pj4gKy8vDQo+ID4+PiArdHlwZWRlZiBzdHJ1 Y3Qgew0KPiA+Pj4gKyAgVUlOVDE2ICAgIFNlc3Npb25JZDsgLy8gUmV0dXJuZWQgZnJvbSBCbG9i T3Blbg0KPiA+Pj4gKyAgVUlOVDMyICAgIE9mZnNldDsNCj4gPj4+ICsgIFVJTlQzMiAgICBSZXF1 ZXN0ZWRTaXplOw0KPiA+Pj4gK30gSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfUkVBRF9TRU5EX0RB VEE7DQo+ID4+PiArDQo+ID4+PiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+Pj4gKyAgVUlOVDggICAg RGF0YVtJUE1JX09FTV9CTE9CX01BWF9EQVRBX1BFUl9QQUNLRVRdOw0KPiA+Pj4gK30gSVBNSV9C TE9CX1RSQU5TRkVSX0JMT0JfUkVBRF9SRVNQT05TRTsNCj4gPj4+ICsNCj4gPj4+ICsvLw0KPiA+ Pj4gKy8vIENvbW1hbmQgNCAtIEJtY0Jsb2JXcml0ZQ0KPiA+Pj4gKy8vIFRoZSBCbWNCbG9iV3Jp dGUgY29tbWFuZCBleHBlY3RzIHRvIHJlY2VpdmUgYSBib2R5IG9mOg0KPiA+Pj4gKy8vDQo+ID4+ PiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+Pj4gKyAgVUlOVDE2ICAgIFNlc3Npb25JZDsgLy8gUmV0 dXJuZWQgZnJvbSBCbG9iT3Blbg0KPiA+Pj4gKyAgVUlOVDMyICAgIE9mZnNldDsNCj4gPj4+ICsg IFVJTlQ4ICAgICBEYXRhW0lQTUlfT0VNX0JMT0JfTUFYX0RBVEFfUEVSX1BBQ0tFVF07DQo+ID4+ PiArfSBJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9XUklURV9TRU5EX0RBVEE7DQo+ID4+PiArDQo+ ID4+PiArLy8NCj4gPj4+ICsvLyBDb21tYW5kIDUgLSBCbWNCbG9iQ29tbWl0DQo+ID4+PiArLy8g VGhlIEJtY0Jsb2JDb21taXQgY29tbWFuZCBleHBlY3RzIHRvIHJlY2VpdmUgYSBib2R5IG9mOg0K PiA+Pj4gKy8vDQo+ID4+PiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+Pj4gKyAgVUlOVDE2ICAgIFNl c3Npb25JZDsgLy8gUmV0dXJuZWQgZnJvbSBCbG9iT3Blbg0KPiA+Pj4gKyAgVUlOVDggICAgIENv bW1pdERhdGFMZW5ndGg7DQo+ID4+PiArICBVSU5UOCAgICAgQ29tbWl0RGF0YVtJUE1JX09FTV9C TE9CX01BWF9EQVRBX1BFUl9QQUNLRVRdOw0KPiA+Pj4gK30gSVBNSV9CTE9CX1RSQU5TRkVSX0JM T0JfQ09NTUlUX1NFTkRfREFUQTsNCj4gPj4+ICsNCj4gPj4+ICsvLw0KPiA+Pj4gKy8vIENvbW1h bmQgNiAtIEJtY0Jsb2JDbG9zZQ0KPiA+Pj4gKy8vIFRoZSBCbWNCbG9iQ2xvc2UgY29tbWFuZCBl eHBlY3RzIHRvIHJlY2VpdmUgYSBib2R5IG9mOg0KPiA+Pj4gKy8vDQo+ID4+PiArdHlwZWRlZiBz dHJ1Y3Qgew0KPiA+Pj4gKyAgVUlOVDE2ICAgIFNlc3Npb25JZDsgLy8gUmV0dXJuZWQgZnJvbSBC bG9iT3Blbg0KPiA+Pj4gK30gSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfQ0xPU0VfU0VORF9EQVRB Ow0KPiA+Pj4gKw0KPiA+Pj4gKy8vDQo+ID4+PiArLy8gQ29tbWFuZCA3IC0gQm1jQmxvYkRlbGV0 ZQ0KPiA+Pj4gKy8vIE5PVEU6IFRoaXMgY29tbWFuZCB3aWxsIGZhaWwgaWYgdGhlcmUgYXJlIG9w ZW4gc2Vzc2lvbnMgZm9yIHRoaXMgYmxvYg0KPiA+Pj4gKy8vIFRoZSBCbWNCbG9iRGVsZXRlIGNv bW1hbmQgZXhwZWN0cyB0byByZWNlaXZlIGEgYm9keSBvZjoNCj4gPj4+ICsvLw0KPiA+Pj4gK3R5 cGVkZWYgc3RydWN0IHsNCj4gPj4+ICsgIENIQVI4ICAgIEJsb2JJZFtJUE1JX09FTV9CTE9CX01B WF9EQVRBX1BFUl9QQUNLRVRdOw0KPiA+Pj4gK30gSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfREVM RVRFX1NFTkRfREFUQTsNCj4gPj4+ICsNCj4gPj4+ICsvLw0KPiA+Pj4gKy8vIENvbW1hbmQgOCAt IEJtY0Jsb2JTdGF0DQo+ID4+PiArLy8gVGhpcyBjb21tYW5kIHJldHVybnMgc3RhdGlzdGljcyBh Ym91dCBhIGJsb2IuDQo+ID4+PiArLy8gVGhpcyBjb21tYW5kIGV4cGVjdHMgdG8gcmVjZWl2ZSBh IGJvZHkgb2Y6DQo+ID4+PiArLy8NCj4gPj4+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4+PiArICBD SEFSOCAgICBCbG9iSWRbSVBNSV9PRU1fQkxPQl9NQVhfREFUQV9QRVJfUEFDS0VUXTsNCj4gPj4+ ICt9IElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX1NUQVRfU0VORF9EQVRBOw0KPiA+Pj4gKw0KPiA+ Pj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPj4+ICsgIFVJTlQxNiAgICBCbG9iU3RhdGU7DQo+ID4+ PiArICBVSU5UMzIgICAgU2l6ZTsgLy8gU2l6ZSBpbiBieXRlcyBvZiB0aGUgYmxvYg0KPiA+Pj4g KyAgVUlOVDggICAgIE1ldGFEYXRhTGVuOw0KPiA+Pj4gKyAgVUlOVDggICAgIE1ldGFEYXRhW0lQ TUlfT0VNX0JMT0JfTUFYX0RBVEFfUEVSX1BBQ0tFVF07DQo+ID4+PiArfSBJUE1JX0JMT0JfVFJB TlNGRVJfQkxPQl9TVEFUX1JFU1BPTlNFOw0KPiA+Pj4gKw0KPiA+Pj4gKy8vDQo+ID4+PiArLy8g Q29tbWFuZCA5IC0gQm1jQmxvYlNlc3Npb25TdGF0DQo+ID4+PiArLy8gUmV0dXJucyBzYW1lIGRh dGEgYXMgQm1jQmxvYlN0YXRlIGV4cGVjdCBmb3IgYSBzZXNzaW9uLCBub3QgYSBibG9iDQo+ID4+ PiArLy8gVGhpcyBjb21tYW5kIGV4cGVjdHMgdG8gcmVjZWl2ZSBhIGJvZHkgb2Y6DQo+ID4+PiAr Ly8NCj4gPj4+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4+PiArICBVSU5UMTYgICAgU2Vzc2lvbklk Ow0KPiA+Pj4gK30gSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfU0VTU0lPTl9TVEFUX1NFTkRfREFU QTsNCj4gPj4+ICsNCj4gPj4+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4+PiArICBVSU5UMTYgICAg QmxvYlN0YXRlOw0KPiA+Pj4gKyAgVUlOVDMyICAgIFNpemU7IC8vIFNpemUgaW4gYnl0ZXMgb2Yg dGhlIGJsb2INCj4gPj4+ICsgIFVJTlQ4ICAgICBNZXRhRGF0YUxlbjsNCj4gPj4+ICsgIFVJTlQ4 ICAgICBNZXRhRGF0YVtJUE1JX09FTV9CTE9CX01BWF9EQVRBX1BFUl9QQUNLRVRdOw0KPiA+Pj4g K30gSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfU0VTU0lPTl9TVEFUX1JFU1BPTlNFOw0KPiA+Pj4g Kw0KPiA+Pj4gKy8vDQo+ID4+PiArLy8gQ29tbWFuZCAxMCAtIEJtY0Jsb2JXcml0ZU1ldGENCj4g Pj4+ICsvLyBUaGUgQm1jQmxvYldyaXRlTWV0YSBjb21tYW5kIGV4cGVjdHMgdG8gcmVjZWl2ZSBh IGJvZHkgb2Y6DQo+ID4+PiArLy8NCj4gPj4+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4+PiArICBV SU5UMTYgICAgU2Vzc2lvbklkOw0KPiA+Pj4gKyAgVUlOVDMyICAgIE9mZnNldDsNCj4gPj4+ICsg IFVJTlQ4ICAgICBEYXRhW0lQTUlfT0VNX0JMT0JfTUFYX0RBVEFfUEVSX1BBQ0tFVF07DQo+ID4+ PiArfSBJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9XUklURV9NRVRBX1NFTkRfREFUQTsNCj4gPj4+ ICsNCj4gPj4+ICsjZGVmaW5lIElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX1dSSVRFX01FVEFfUkVT UE9OU0UgIE5VTEwNCj4gPj4+ICsNCj4gPj4+ICsjcHJhZ21hIHBhY2soKQ0KPiA+Pj4gKw0KPiA+ Pj4gKy8qKg0KPiA+Pj4gKyAgQ2FsY3VsYXRlIENSQy0xNi1DQ0lUVCB3aXRoIHBvbHkgb2YgMHgx MDIxDQo+ID4+PiArDQo+ID4+PiArICBAcGFyYW1baW5dICBEYXRhICAgICAgICAgICAgICBUaGUg dGFyZ2V0IGRhdGEuDQo+ID4+PiArICBAcGFyYW1baW5dICBEYXRhU2l6ZSAgICAgICAgICBUaGUg dGFyZ2V0IGRhdGEgc2l6ZS4NCj4gPj4+ICsNCj4gPj4+ICsgIEByZXR1cm4gVUlOVDE2ICAgICBU aGUgQ1JDMTYgdmFsdWUuDQo+ID4+PiArDQo+ID4+PiArKiovDQo+ID4+PiArVUlOVDE2DQo+ID4+ PiArQ2FsY3VsYXRlQ3JjMTYgKA0KPiA+Pj4gKyAgSU4gVUlOVDggICpEYXRhLA0KPiA+Pj4gKyAg SU4gVUlOVE4gIERhdGFTaXplDQo+ID4+PiArICApOw0KPiA+Pj4gKw0KPiA+Pj4gK0VGSV9TVEFU VVMNCj4gPj4+ICtJcG1pQmxvYlRyYW5zZmVyU2VuZElwbWkgKA0KPiA+Pj4gKyAgSU4gIFVJTlQ4 ICAgU3ViQ29tbWFuZCwNCj4gPj4+ICsgIElOICBVSU5UOCAgICpTZW5kRGF0YSwNCj4gPj4+ICsg IElOICBVSU5UMzIgIFNlbmREYXRhU2l6ZSwNCj4gPj4+ICsgIE9VVCBVSU5UOCAgICpSZXNwb25z ZURhdGEsDQo+ID4+PiArICBPVVQgVUlOVDMyICAqUmVzcG9uc2VEYXRhU2l6ZQ0KPiA+Pj4gKyAg KTsNCj4gPj4+ICsNCj4gPj4+ICsvKioNCj4gPj4+ICsgIEBwYXJhbVtvdXRdICAgICAgICBDb3Vu dCAgICAgICBUaGUgbnVtYmVyIG9mIGFjdGl2ZSBibG9icw0KPiA+Pj4gKw0KPiA+Pj4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgdGhlIG51 bWJlciBvZg0KPiBhY3RpdmUNCj4gPj4gYmxvYnMuDQo+ID4+PiArICBAcmV0dmFsIE90aGVyICAg ICAgICAgICAgICAgICAgQW4gZXJyb3Igb2NjdXJyZWQNCj4gPj4+ICsqKi8NCj4gPj4+ICtFRklf U1RBVFVTDQo+ID4+PiArSXBtaUJsb2JUcmFuc2ZlckdldENvdW50ICgNCj4gPj4+ICsgIE9VVCBV SU5UMzIgICpDb3VudA0KPiA+Pj4gKyAgKTsNCj4gPj4+ICsNCj4gPj4+ICsvKioNCj4gPj4+ICsg IEBwYXJhbVtpbl0gICAgICAgICBCbG9iSW5kZXggICAgICAgVGhlIDAtYmFzZWQgSW5kZXggb2Yg dGhlIGJsb2IgdG8NCj4gPj4gZW51bWVyYXRlDQo+ID4+PiArICBAcGFyYW1bb3V0XSAgICAgICAg QmxvYklkICAgICAgICAgIFRoZSBJRCBvZiB0aGUgYmxvYg0KPiA+Pj4gKw0KPiA+Pj4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICBTdWNjZXNzZnVsbHkgZW51bWVyYXRlZCB0 aGUgYmxvYi4NCj4gPj4+ICsgIEByZXR2YWwgT3RoZXIgICAgICAgICAgICAgICAgICAgICAgQW4g ZXJyb3Igb2NjdXJyZWQNCj4gPj4+ICsqKi8NCj4gPj4+ICtFRklfU1RBVFVTDQo+ID4+PiArSXBt aUJsb2JUcmFuc2ZlckVudW1lcmF0ZSAoDQo+ID4+PiArICBJTiAgVUlOVDMyICBCbG9iSW5kZXgs DQo+ID4+PiArICBPVVQgQ0hBUjggICAqQmxvYklkDQo+ID4+PiArICApOw0KPiA+Pj4gKw0KPiA+ Pj4gKy8qKg0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgICAgICAgIEJsb2JJZCAgICAgICAgICBUaGUg SUQgb2YgdGhlIGJsb2IgdG8gb3Blbg0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgICAgICAgIEZsYWdz ICAgICAgICAgICBGbGFncyB0byBjb250cm9sIGhvdyB0aGUgYmxvYiBpcyBvcGVuZWQNCj4gPj4+ ICsgIEBwYXJhbVtvdXRdICAgICAgICBTZXNzaW9uSWQgICAgICAgQSB1bmlxdWUgc2Vzc2lvbiBp ZGVudGlmaWVyDQo+ID4+PiArDQo+ID4+PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAg ICAgICAgIFN1Y2Nlc3NmdWxseSBvcGVuZWQgdGhlIGJsb2IuDQo+ID4+PiArICBAcmV0dmFsIE90 aGVyICAgICAgICAgICAgICAgICAgICAgIEFuIGVycm9yIG9jY3VycmVkDQo+ID4+PiArKiovDQo+ ID4+PiArRUZJX1NUQVRVUw0KPiA+Pj4gK0lwbWlCbG9iVHJhbnNmZXJPcGVuICgNCj4gPj4+ICsg IElOICBDSEFSOCAgICpCbG9iSWQsDQo+ID4+PiArICBJTiAgVUlOVDE2ICBGbGFncywNCj4gPj4+ ICsgIE9VVCBVSU5UMTYgICpTZXNzaW9uSWQNCj4gPj4+ICsgICk7DQo+ID4+PiArDQo+ID4+PiAr LyoqDQo+ID4+PiArICBAcGFyYW1baW5dICAgICAgICAgU2Vzc2lvbklkICAgICAgIFRoZSBzZXNz aW9uIElEIHJldHVybmVkIGZyb20gYSBjYWxsIHRvDQo+ID4+IEJsb2JPcGVuDQo+ID4+PiArICBA cGFyYW1baW5dICAgICAgICAgT2Zmc2V0ICAgICAgICAgIFRoZSBvZmZzZXQgb2YgdGhlIGJsb2Ig ZnJvbSB3aGljaCB0byBzdGFydA0KPiA+PiByZWFkaW5nDQo+ID4+PiArICBAcGFyYW1baW5dICAg ICAgICAgUmVxdWVzdGVkU2l6ZSAgIFRoZSBsZW5ndGggb2YgZGF0YSB0byByZWFkDQo+ID4+PiAr ICBAcGFyYW1bb3V0XSAgICAgICAgRGF0YSAgICAgICAgICAgIERhdGEgcmVhZCBmcm9tIHRoZSBi bG9iDQo+ID4+PiArDQo+ID4+PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAg IFN1Y2Nlc3NmdWxseSByZWFkIGZyb20gdGhlIGJsb2IuDQo+ID4+PiArICBAcmV0dmFsIE90aGVy ICAgICAgICAgICAgICAgICAgICAgIEFuIGVycm9yIG9jY3VycmVkDQo+ID4+PiArKiovDQo+ID4+ PiArRUZJX1NUQVRVUw0KPiA+Pj4gK0lwbWlCbG9iVHJhbnNmZXJSZWFkICgNCj4gPj4+ICsgIElO ICBVSU5UMTYgIFNlc3Npb25JZCwNCj4gPj4+ICsgIElOICBVSU5UMzIgIE9mZnNldCwNCj4gPj4+ ICsgIElOICBVSU5UMzIgIFJlcXVlc3RlZFNpemUsDQo+ID4+PiArICBPVVQgVUlOVDggICAqRGF0 YQ0KPiA+Pj4gKyAgKTsNCj4gPj4+ICsNCj4gPj4+ICsvKioNCj4gPj4+ICsgIEBwYXJhbVtpbl0g ICAgICAgICBTZXNzaW9uSWQgICAgICAgVGhlIHNlc3Npb24gSUQgcmV0dXJuZWQgZnJvbSBhIGNh bGwgdG8NCj4gPj4gQmxvYk9wZW4NCj4gPj4+ICsgIEBwYXJhbVtpbl0gICAgICAgICBPZmZzZXQg ICAgICAgICAgVGhlIG9mZnNldCBvZiB0aGUgYmxvYiBmcm9tIHdoaWNoIHRvIHN0YXJ0DQo+ID4+ IHdyaXRpbmcNCj4gPj4+ICsgIEBwYXJhbVtpbl0gICAgICAgICBEYXRhICAgICAgICAgICAgQSBw b2ludGVyIHRvIHRoZSBkYXRhIHRvIHdyaXRlDQo+ID4+PiArDQo+ID4+PiArICBAcmV0dmFsIEVG SV9TVUNDRVNTICAgICAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSB3cm90ZSB0byB0aGUgYmxvYi4N Cj4gPj4+ICsgIEByZXR2YWwgT3RoZXIgICAgICAgICAgICAgICAgICAgICAgQW4gZXJyb3Igb2Nj dXJyZWQNCj4gPj4+ICsqKi8NCj4gPj4+ICtFRklfU1RBVFVTDQo+ID4+PiArSXBtaUJsb2JUcmFu c2ZlcldyaXRlICgNCj4gPj4+ICsgIElOICBVSU5UMTYgIFNlc3Npb25JZCwNCj4gPj4+ICsgIElO ICBVSU5UMzIgIE9mZnNldCwNCj4gPj4+ICsgIElOICBVSU5UOCAgICpEYXRhLA0KPiA+Pj4gKyAg SU4gIFVJTlQzMiAgV3JpdGVMZW5ndGgNCj4gPj4+ICsgICk7DQo+ID4+PiArDQo+ID4+PiArLyoq DQo+ID4+PiArICBAcGFyYW1baW5dICAgICAgICAgU2Vzc2lvbklkICAgICAgICBUaGUgc2Vzc2lv biBJRCByZXR1cm5lZCBmcm9tIGEgY2FsbCB0bw0KPiA+PiBCbG9iT3Blbg0KPiA+Pj4gKyAgQHBh cmFtW2luXSAgICAgICAgIENvbW1pdERhdGFMZW5ndGggVGhlIGxlbmd0aCBvZiBkYXRhIHRvIGNv bW1pdCB0bw0KPiB0aGUNCj4gPj4gYmxvYg0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgICAgICAgIENv bW1pdERhdGEgICAgICAgQSBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIGNvbW1pdA0KPiA+Pj4gKw0K PiA+Pj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICBTdWNjZXNzZnVsIGNv bW1pdCB0byB0aGUgYmxvYi4NCj4gPj4+ICsgIEByZXR2YWwgT3RoZXIgICAgICAgICAgICAgICAg ICAgICAgQW4gZXJyb3Igb2NjdXJyZWQNCj4gPj4+ICsqKi8NCj4gPj4+ICtFRklfU1RBVFVTDQo+ ID4+PiArSXBtaUJsb2JUcmFuc2ZlckNvbW1pdCAoDQo+ID4+PiArICBJTiAgVUlOVDE2ICBTZXNz aW9uSWQsDQo+ID4+PiArICBJTiAgVUlOVDggICBDb21taXREYXRhTGVuZ3RoLA0KPiA+Pj4gKyAg SU4gIFVJTlQ4ICAgKkNvbW1pdERhdGENCj4gPj4+ICsgICk7DQo+ID4+PiArDQo+ID4+PiArLyoq DQo+ID4+PiArICBAcGFyYW1baW5dICAgICAgICAgU2Vzc2lvbklkICAgICAgIFRoZSBzZXNzaW9u IElEIHJldHVybmVkIGZyb20gYSBjYWxsIHRvDQo+ID4+IEJsb2JPcGVuDQo+ID4+PiArDQo+ID4+ PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgIFRoZSBibG9iIHdhcyBjbG9z ZWQuDQo+ID4+PiArICBAcmV0dmFsIE90aGVyICAgICAgICAgICAgICAgICAgICAgIEFuIGVycm9y IG9jY3VycmVkDQo+ID4+PiArKiovDQo+ID4+PiArRUZJX1NUQVRVUw0KPiA+Pj4gK0lwbWlCbG9i VHJhbnNmZXJDbG9zZSAoDQo+ID4+PiArICBJTiAgVUlOVDE2ICBTZXNzaW9uSWQNCj4gPj4+ICsg ICk7DQo+ID4+PiArDQo+ID4+PiArLyoqDQo+ID4+PiArICBAcGFyYW1baW5dICAgICAgICAgQmxv YklkICAgICAgICAgIFRoZSBCbG9iSWQgdG8gYmUgZGVsZXRlZA0KPiA+Pj4gKw0KPiA+Pj4gKyAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICBUaGUgYmxvYiB3YXMgZGVsZXRlZC4N Cj4gPj4+ICsgIEByZXR2YWwgT3RoZXIgICAgICAgICAgICAgICAgICAgICAgQW4gZXJyb3Igb2Nj dXJyZWQNCj4gPj4+ICsqKi8NCj4gPj4+ICtFRklfU1RBVFVTDQo+ID4+PiArSXBtaUJsb2JUcmFu c2ZlckRlbGV0ZSAoDQo+ID4+PiArICBJTiAgQ0hBUjggICpCbG9iSWQNCj4gPj4+ICsgICk7DQo+ ID4+PiArDQo+ID4+PiArLyoqDQo+ID4+PiArICBAcGFyYW1baW5dICAgICAgICAgQmxvYklkICAg ICAgICAgIFRoZSBCbG9iIElEIHRvIGdhdGhlciBzdGF0aXN0aWNzIGZvcg0KPiA+Pj4gKyAgQHBh cmFtW291dF0gICAgICAgIEJsb2JTdGF0ZSAgICAgICBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGUg YmxvYg0KPiA+Pj4gKyAgQHBhcmFtW291dF0gICAgICAgIFNpemUgICAgICAgICAgICBTaXplIGlu IGJ5dGVzIG9mIHRoZSBibG9iDQo+ID4+PiArICBAcGFyYW1bb3V0XSAgICAgICAgTWV0YWRhdGFM ZW5ndGggIExlbmd0aCBvZiB0aGUgb3B0aW9uYWwgbWV0YWRhdGENCj4gPj4+ICsgIEBwYXJhbVtv dXRdICAgICAgICBNZXRhZGF0YSAgICAgICAgT3B0aW9uYWwgYmxvYi1zcGVjaWZpYyBtZXRhZGF0 YQ0KPiA+Pj4gKw0KPiA+Pj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICBU aGUgYmxvYiBzdGF0aXN0aWNzIHdlcmUgc3VjY2Vzc2Z1bGx5DQo+ID4+IGdhdGhlcmVkLg0KPiA+ Pj4gKyAgQHJldHZhbCBPdGhlciAgICAgICAgICAgICAgICAgICAgICBBbiBlcnJvciBvY2N1cnJl ZA0KPiA+Pj4gKyoqLw0KPiA+Pj4gK0VGSV9TVEFUVVMNCj4gPj4+ICtJcG1pQmxvYlRyYW5zZmVy U3RhdCAoDQo+ID4+PiArICBJTiAgQ0hBUjggICAqQmxvYklkLA0KPiA+Pj4gKyAgT1VUIFVJTlQx NiAgKkJsb2JTdGF0ZSwNCj4gPj4+ICsgIE9VVCBVSU5UMzIgICpTaXplLA0KPiA+Pj4gKyAgT1VU IFVJTlQ4ICAgKk1ldGFkYXRhTGVuZ3RoLA0KPiA+Pj4gKyAgT1VUIFVJTlQ4ICAgKk1ldGFkYXRh DQo+ID4+PiArICApOw0KPiA+Pj4gKw0KPiA+Pj4gKy8qKg0KPiA+Pj4gKyAgQHBhcmFtW2luXSAg ICAgICAgIFNlc3Npb25JZCAgICAgICBUaGUgSUQgb2YgdGhlIHNlc3Npb24gdG8gZ2F0aGVyIHN0 YXRpc3RpY3MNCj4gZm9yDQo+ID4+PiArICBAcGFyYW1bb3V0XSAgICAgICAgQmxvYlN0YXRlICAg ICAgIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBibG9iDQo+ID4+PiArICBAcGFyYW1bb3V0XSAg ICAgICAgU2l6ZSAgICAgICAgICAgIFNpemUgaW4gYnl0ZXMgb2YgdGhlIGJsb2INCj4gPj4+ICsg IEBwYXJhbVtvdXRdICAgICAgICBNZXRhZGF0YUxlbmd0aCAgTGVuZ3RoIG9mIHRoZSBvcHRpb25h bCBtZXRhZGF0YQ0KPiA+Pj4gKyAgQHBhcmFtW291dF0gICAgICAgIE1ldGFkYXRhICAgICAgICBP cHRpb25hbCBibG9iLXNwZWNpZmljIG1ldGFkYXRhDQo+ID4+PiArDQo+ID4+PiArICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgIFRoZSBibG9iIHN0YXRpc3RpY3Mgd2VyZSBzdWNj ZXNzZnVsbHkNCj4gPj4gZ2F0aGVyZWQuDQo+ID4+PiArICBAcmV0dmFsIE90aGVyICAgICAgICAg ICAgICAgICAgICAgIEFuIGVycm9yIG9jY3VycmVkDQo+ID4+PiArKiovDQo+ID4+PiArRUZJX1NU QVRVUw0KPiA+Pj4gK0lwbWlCbG9iVHJhbnNmZXJTZXNzaW9uU3RhdCAoDQo+ID4+PiArICBJTiAg VUlOVDE2ICBTZXNzaW9uSWQsDQo+ID4+PiArICBPVVQgVUlOVDE2ICAqQmxvYlN0YXRlLA0KPiA+ Pj4gKyAgT1VUIFVJTlQzMiAgKlNpemUsDQo+ID4+PiArICBPVVQgVUlOVDggICAqTWV0YWRhdGFM ZW5ndGgsDQo+ID4+PiArICBPVVQgVUlOVDggICAqTWV0YWRhdGENCj4gPj4+ICsgICk7DQo+ID4+ PiArDQo+ID4+PiArLyoqDQo+ID4+PiArICBAcGFyYW1baW5dICAgICAgICAgU2Vzc2lvbklkICAg ICAgIFRoZSBJRCBvZiB0aGUgc2Vzc2lvbiB0byB3cml0ZSBtZXRhZGF0YQ0KPiBmb3INCj4gPj4+ ICsgIEBwYXJhbVtpbl0gICAgICAgICBPZmZzZXQgICAgICAgICAgVGhlIG9mZnNldCBvZiB0aGUg bWV0YWRhdGEgdG8gd3JpdGUgdG8NCj4gPj4+ICsgIEBwYXJhbVtpbl0gICAgICAgICBEYXRhICAg ICAgICAgICAgVGhlIGRhdGEgdG8gd3JpdGUgdG8gdGhlIG1ldGFkYXRhDQo+ID4+PiArDQo+ID4+ PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgIFRoZSBibG9iIG1ldGFkYXRh IHdhcyBzdWNjZXNzZnVsbHkNCj4gd3JpdHRlbi4NCj4gPj4+ICsgIEByZXR2YWwgT3RoZXIgICAg ICAgICAgICAgICAgICAgICAgQW4gZXJyb3Igb2NjdXJyZWQNCj4gPj4+ICsqKi8NCj4gPj4+ICtF RklfU1RBVFVTDQo+ID4+PiArSXBtaUJsb2JUcmFuc2ZlcldyaXRlTWV0YSAoDQo+ID4+PiArICBJ TiAgVUlOVDE2ICBTZXNzaW9uSWQsDQo+ID4+PiArICBJTiAgVUlOVDMyICBPZmZzZXQsDQo+ID4+ PiArICBJTiAgVUlOVDggICAqRGF0YSwNCj4gPj4+ICsgIElOICBVSU5UMzIgIFdyaXRlTGVuZ3Ro DQo+ID4+PiArICApOw0KPiA+Pj4gZGlmZiAtLWdpdA0KPiA+Pg0KPiBhL0ZlYXR1cmVzL01hbmFn ZWFiaWxpdHlQa2cvVW5pdmVyc2FsL0lwbWlCbG9iVHJhbnNmZXJEeGUvSXBtaUJsb2JUcmFuDQo+ ID4+IHNmZXJEeGUuYw0KPiA+Pg0KPiBiL0ZlYXR1cmVzL01hbmFnZWFiaWxpdHlQa2cvVW5pdmVy c2FsL0lwbWlCbG9iVHJhbnNmZXJEeGUvSXBtaUJsb2JUcmFuDQo+ID4+IHNmZXJEeGUuYw0KPiA+ Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPj4+IGluZGV4IDAwMDAwMDAwMDAuLjllNjYzMjg5 ZDUNCj4gPj4+IC0tLSAvZGV2L251bGwNCj4gPj4+ICsrKw0KPiA+Pg0KPiBiL0ZlYXR1cmVzL01h bmFnZWFiaWxpdHlQa2cvVW5pdmVyc2FsL0lwbWlCbG9iVHJhbnNmZXJEeGUvSXBtaUJsb2JUcmFu DQo+ID4+IHNmZXJEeGUuYw0KPiA+Pj4gQEAgLTAsMCArMSw3OTkgQEANCj4gPj4+ICsvKiogQGZp bGUNCj4gPj4+ICsNCj4gPj4+ICsgIElQTUkgQmxvYiBUcmFuc2ZlciBkcml2ZXINCj4gPj4+ICsN Cj4gPj4+ICsgIENvcHlyaWdodCAoYykgMjAyMi0yMDIzLCBOVklESUEgQ09SUE9SQVRJT04gJiBB RkZJTElBVEVTLiBBbGwNCj4gcmlnaHRzDQo+ID4+IHJlc2VydmVkLg0KPiA+Pj4gKw0KPiA+Pj4g KyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPj4+ICsN Cj4gPj4+ICsqKi8NCj4gPj4+ICsjaW5jbHVkZSA8UHJvdG9jb2wvSXBtaUJsb2JUcmFuc2Zlci5o Pg0KPiA+Pj4gKw0KPiA+Pj4gKyNpbmNsdWRlICJJbnRlcm5hbElwbWlCbG9iVHJhbnNmZXIuaCIN Cj4gPj4+ICsNCj4gPj4+ICsjZGVmaW5lIEJMT0JfVFJBTlNGRVJfREVCVUcgIDANCj4gPj4+ICsN Cj4gPj4+ICtTVEFUSUMgQ09OU1QgSVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MICBtSXBtaUJs b2JUcmFuc2Zlcg0KPiA9IHsNCj4gPj4+ICsNCj4gPj4NCj4gKElQTUlfQkxPQl9UUkFOU0ZFUl9Q Uk9UT0NPTF9HRVRfQ09VTlQpKklwbWlCbG9iVHJhbnNmZXJHZXRDb3UNCj4gPj4gbnQsDQo+ID4+ PiArDQo+ID4+DQo+IChJUE1JX0JMT0JfVFJBTlNGRVJfUFJPVE9DT0xfRU5VTUVSQVRFKSpJcG1p QmxvYlRyYW5zZmVyRW51bWUNCj4gPj4gcmF0ZSwNCj4gPj4+ICsgIChJUE1JX0JMT0JfVFJBTlNG RVJfUFJPVE9DT0xfT1BFTikqSXBtaUJsb2JUcmFuc2Zlck9wZW4sDQo+ID4+PiArICAoSVBNSV9C TE9CX1RSQU5TRkVSX1BST1RPQ09MX1JFQUQpKklwbWlCbG9iVHJhbnNmZXJSZWFkLA0KPiA+Pj4g KyAgKElQTUlfQkxPQl9UUkFOU0ZFUl9QUk9UT0NPTF9XUklURSkqSXBtaUJsb2JUcmFuc2Zlcldy aXRlLA0KPiA+Pj4gKw0KPiA+PiAoSVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MX0NPTU1JVCkq SXBtaUJsb2JUcmFuc2ZlckNvbW1pdCwNCj4gPj4+ICsgIChJUE1JX0JMT0JfVFJBTlNGRVJfUFJP VE9DT0xfQ0xPU0UpKklwbWlCbG9iVHJhbnNmZXJDbG9zZSwNCj4gPj4+ICsNCj4gKElQTUlfQkxP Ql9UUkFOU0ZFUl9QUk9UT0NPTF9ERUxFVEUpKklwbWlCbG9iVHJhbnNmZXJEZWxldGUsDQo+ID4+ PiArICAoSVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MX1NUQVQpKklwbWlCbG9iVHJhbnNmZXJT dGF0LA0KPiA+Pj4gKw0KPiA+Pg0KPiAoSVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MX1NFU1NJ T05fU1RBVCkqSXBtaUJsb2JUcmFuc2ZlclNlc3NpDQo+ID4+IG9uU3RhdCwNCj4gPj4+ICsNCj4g Pj4NCj4gKElQTUlfQkxPQl9UUkFOU0ZFUl9QUk9UT0NPTF9XUklURV9NRVRBKSpJcG1pQmxvYlRy YW5zZmVyV3JpdGUNCj4gPj4gTWV0YQ0KPiA+Pj4gK307DQo+ID4+PiArDQo+ID4+PiArY29uc3Qg VUlOVDggIE9wZW5CbWNPZW5bXSA9IHsgMHhDRiwgMHhDMiwgMHgwMCB9OyAgICAgICAgICAvLyBP cGVuQk1DDQo+IE9FTg0KPiA+PiBjb2RlIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0DQo+ID4+DQo+ ID4+IEkgZG9u4oCZdCBrbm93IHdoYXQg4oCcT2Vu4oCdIG1lYW5zLiBTaG91bGQgaXQgYmUg4oCc T2Vt4oCdIG9yIOKAnElBTkHigJ0gbnVtYmVyPw0KPiA+IFRoaXMgaXMgdGhlIE9FTSBudW1iZXIg ZGVmaW5lZCBieSBvcGVuYm1jIHBob3NwaG9yIGJsb2IgdHJhbnNmZXINCj4gaW50ZXJmYWNlIGZv ciBvcGVuYm1jLg0KPiA+IGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYm1jL3Bob3NwaG9yLWlwbWkt YmxvYnMjcGhvc3Bob3ItYmxvYi0NCj4gdHJhbnNmZXItaW50ZXJmYWNlDQo+IHNvIGl0IGlzIGEg c2hvcnQgZm9ybSBvZiAiT0VNIG51bWJlciIsIHRoYXQgaXMgbXkgbWlzdGFrZSBmb3Igbm90DQo+ IHJlYWRpbmcgdGhlIGRvY3VtZW50IGNhcmVmdWxseSwgdGhhbmsgeW91DQo+ID4+IEFuZCB0aGlz IG51bWJlciBjYW4gYmUgY29uZmlndXJlZCwgb3RoZXIgT0VNcyB3aWxsIGhhdmUgdGhlaXIgb3du DQo+IG51bWJlci4NCj4gPiBPcGVuYm1jIGlzIGFscmVhZHkgdGhlIE9FTSB0aGF0IHVzZXMgdGhp cyBPRU4gbnVtYmVyICg0OTg3MSkuIEkgY29uc2lkZXINCj4gdGhpcyBpcyBhIGluZHVzdHJ5IHN0 YW5kYXJkIGZvciBvcGVuYm1jIElQTUkgQkxPQiB0cmFuc2ZlciBhbmQgaXQgaXMNCj4gdW5uZWNl c3NhcnkgdG8gYmUgb3ZlcnJpZGUgYnkgb3RoZXJzLCByaWdodD8gQW55IHVzZSBjYXNlIHlvdSBj YW4gdGhpbmsgb2YgdG8NCj4gbWFrZSB0aGlzIHZhbHVlIGNvbmZpZ3VyYWJsZT8NCj4gDQo+IFRo ZSBmaXJzdCB0aGluZyB0aGF0IGNvbWVzIHRvIG15IG1pbmQgaXMgdGhhdCBpdCBpcyBhIHBhcnQg b2YgYSBtZXNzYWdlLg0KPiBJdCB3aWxsIGhhdmUgc29tZSBtZWFuaW5nIHRoYXQgaGVscHMgQk1D IHRvIGtub3cgd2hhdCBleGFjdGx5IGl0IG5lZWRzDQo+IHRvIGRvLg0KPiANCj4gSWYgT0VOIGlz IGFsd2F5cyBmaXhlZCwgd2h5IGRvIHdlIG5lZWQgaXQgYXMgYSBwYXJ0IG9mIHRoZSBtZXNzYWdl Pw0KVGhhdCBpcyBkZWZpbmVkIGluIElQTUkgc3BlYyBmb3IgT0VNL0dyb3VwIHJlcSBhbmQgcmVz cG9uc2UsIHRoZSBmaXJzdCB0aHJlZSBieXRlcyBpcyB0aGUgT0VNIG9yIG5vbi1JUE1JIGdyb3Vw IHRoYXQgc3BlY2lmaWVzIHRoZSBmdW5jdGlvbmFsaXR5LiBUaGUgZm9sbG93aW5nIGJ5dGVzIGFy ZSBkZWZpbmVkIGJ5IHRoZSBvcGVuYm1jIElQTUkgY29tbWFuZHMsIHN1Y2ggYXMgZ3BpbywgSTJD LCBibG9iIHRyYW5zZmVyIGFuZCBldGMuDQoNClRoYW5rcw0KQWJuZXINCg0KPiANCj4gSG1tIGFz IHlvdSBzdWdnZXN0ZWQsIGl0IGlzIGdvb2QgdG8gdXNlIGl0IGFzIGFuIGluZHVzdHJ5IHN0YW5k YXJkIGZvcg0KPiBPcGVuQk1DLiBMZXQncyB1c2UgZml4ZWQgbnVtYmVyICg0OTg3MSkNCj4gDQo+ IElmIHRoZXkgc3VwcG9ydCBtb3JlIE9FTiBudW1iZXJzLCB3ZSB3aWxsIHN1cHBvcnQgbGF0ZXIN Cj4gDQo+ID4gVGhhbmtzDQo+ID4gQWJuZXINCj4gPg0KPiA+PiBUaGlzIG51bWJlciBzaG91bGQg YmUgcHJvdmlkZWQgYnkgZHJpdmVycyB0aGF0IGNvbnN1bWUgdGhpcyBwcm90b2NvbA0KPiA+Pg0K PiA+Pj4gKw0KPiA+Pj4gKy8qKg0KPiA+Pj4gKyAgQ2FsY3VsYXRlIENSQy0xNi1DQ0lUVCB3aXRo IHBvbHkgb2YgMHgxMDIxDQo+ID4+PiArDQo+ID4+PiArICBAcGFyYW1baW5dICBEYXRhICAgICAg ICAgICAgICBUaGUgdGFyZ2V0IGRhdGEuDQo+ID4+PiArICBAcGFyYW1baW5dICBEYXRhU2l6ZSAg ICAgICAgICBUaGUgdGFyZ2V0IGRhdGEgc2l6ZS4NCj4gPj4+ICsNCj4gPj4+ICsgIEByZXR1cm4g VUlOVDE2ICAgICBUaGUgQ1JDMTYgdmFsdWUuDQo+ID4+PiArDQo+ID4+PiArKiovDQo+ID4+PiAr VUlOVDE2DQo+ID4+PiArQ2FsY3VsYXRlQ3JjMTYgKA0KPiA+Pj4gKyAgSU4gVUlOVDggICpEYXRh LA0KPiA+Pj4gKyAgSU4gVUlOVE4gIERhdGFTaXplDQo+ID4+PiArICApDQo+ID4+PiArew0KPiA+ Pj4gKyAgVUlOVE4gICAgSW5kZXg7DQo+ID4+PiArICBVSU5UTiAgICBCaXRJbmRleDsNCj4gPj4+ ICsgIFVJTlQxNiAgIENyYyAgICAgPSAweEZGRkY7DQo+ID4+PiArICBVSU5UMTYgICBQb2x5ICAg ID0gMHgxMDIxOw0KPiA+Pj4gKyAgQk9PTEVBTiAgWG9yRmxhZyA9IEZBTFNFOw0KPiA+Pj4gKw0K PiA+Pj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgKERhdGFTaXplICsgMik7ICsrSW5kZXgp IHsNCj4gPj4+ICsgICAgZm9yIChCaXRJbmRleCA9IDA7IEJpdEluZGV4IDwgODsgKytCaXRJbmRl eCkgew0KPiA+Pj4gKyAgICAgIFhvckZsYWcgPSAoQ3JjICYgMHg4MDAwKSA/IFRSVUUgOiBGQUxT RTsNCj4gPj4+ICsgICAgICBDcmMgICA8PD0gMTsNCj4gPj4+ICsgICAgICBpZiAoKEluZGV4IDwg RGF0YVNpemUpICYmIChEYXRhW0luZGV4XSAmICgxIDw8ICg3IC0gQml0SW5kZXgpKSkpIHsNCj4g Pj4+ICsgICAgICAgIENyYysrOw0KPiA+Pj4gKyAgICAgIH0NCj4gPj4+ICsNCj4gPj4+ICsgICAg ICBpZiAoWG9yRmxhZyA9PSBUUlVFKSB7DQo+ID4+PiArICAgICAgICBDcmMgXj0gUG9seTsNCj4g Pj4+ICsgICAgICB9DQo+ID4+PiArICAgIH0NCj4gPj4+ICsgIH0NCj4gPj4+ICsNCj4gPj4+ICsg I2lmIEJMT0JfVFJBTlNGRVJfREVCVUcNCj4gPj4+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIiVh OiBDUkMtMTYtQ0NJVFQgJXhcbiIsIF9fRlVOQ1RJT05fXywNCj4gQ3JjKSk7DQo+ID4+PiArICNl bmRpZg0KPiA+Pj4gKw0KPiA+Pj4gKyAgcmV0dXJuIENyYzsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ ID4+PiArRUZJX1NUQVRVUw0KPiA+Pj4gK0lwbWlCbG9iVHJhbnNmZXJTZW5kSXBtaSAoDQo+ID4+ PiArICBJTiAgVUlOVDggICBTdWJDb21tYW5kLA0KPiA+Pj4gKyAgSU4gIFVJTlQ4ICAgKlNlbmRE YXRhLA0KPiA+Pj4gKyAgSU4gIFVJTlQzMiAgU2VuZERhdGFTaXplLA0KPiA+Pj4gKyAgT1VUIFVJ TlQ4ICAgKlJlc3BvbnNlRGF0YSwNCj4gPj4+ICsgIE9VVCBVSU5UMzIgICpSZXNwb25zZURhdGFT aXplDQo+ID4+PiArICApDQo+ID4+PiArew0KPiA+Pj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAg ICAgICAgU3RhdHVzOw0KPiA+Pj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgQ29tcGxl dGlvbkNvZGU7DQo+ID4+PiArICBVSU5UMTYgICAgICAgICAgICAgICAgICAgICBDcmM7DQo+ID4+ PiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICBPZW5bM107DQo+ID4+PiArICBVSU5UOCAg ICAgICAgICAgICAgICAgICAgICAqSXBtaVNlbmREYXRhOw0KPiA+Pj4gKyAgVUlOVDMyICAgICAg ICAgICAgICAgICAgICAgSXBtaVNlbmREYXRhU2l6ZTsNCj4gPj4+ICsgIFVJTlQ4ICAgICAgICAg ICAgICAgICAgICAgICpJcG1pUmVzcG9uc2VEYXRhOw0KPiA+Pj4gKyAgVUlOVDggICAgICAgICAg ICAgICAgICAgICAgKk1vZGlmaWVkUmVzcG9uc2VEYXRhOw0KPiA+Pj4gKyAgVUlOVDMyICAgICAg ICAgICAgICAgICAgICAgSXBtaVJlc3BvbnNlRGF0YVNpemU7DQo+ID4+PiArICBJUE1JX0JMT0Jf VFJBTlNGRVJfSEVBREVSICBIZWFkZXI7DQo+ID4+PiArDQo+ID4+PiArICBDcmMgPSAwOw0KPiA+ Pj4gKw0KPiA+Pj4gKyAgLy8NCj4gPj4+ICsgIC8vIFByZXBlbmQgdGhlIHByb3BlciBoZWFkZXIg dG8gdGhlIFNlbmREYXRhDQo+ID4+PiArICAvLw0KPiA+Pj4gKyAgSXBtaVNlbmREYXRhU2l6ZSA9 IChzaXplb2YgKElQTUlfQkxPQl9UUkFOU0ZFUl9IRUFERVIpKTsNCj4gPj4+ICsgIGlmIChTZW5k RGF0YVNpemUpIHsNCj4gPj4+ICsgICAgSXBtaVNlbmREYXRhU2l6ZSArPSBzaXplb2YgKENyYykg KyAoc2l6ZW9mIChVSU5UOCkgKiBTZW5kRGF0YVNpemUpOw0KPiA+Pj4gKyAgfQ0KPiA+Pj4gKw0K PiA+Pj4gKyAgSXBtaVNlbmREYXRhID0gQWxsb2NhdGVaZXJvUG9vbCAoSXBtaVNlbmREYXRhU2l6 ZSk7DQo+ID4+PiArICBpZiAoSXBtaVNlbmREYXRhID09IE5VTEwpIHsNCj4gPj4+ICsgICAgcmV0 dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+Pj4gKyAgfQ0KPiA+Pj4gKw0KPiA+Pj4gKyAg SGVhZGVyLk9FTlswXSAgICAgPSBPcGVuQm1jT2VuWzBdOw0KPiA+Pj4gKyAgSGVhZGVyLk9FTlsx XSAgICAgPSBPcGVuQm1jT2VuWzFdOw0KPiA+Pj4gKyAgSGVhZGVyLk9FTlsyXSAgICAgPSBPcGVu Qm1jT2VuWzJdOw0KPiA+Pj4gKyAgSGVhZGVyLlN1YkNvbW1hbmQgPSBTdWJDb21tYW5kOw0KPiA+ Pj4gKyAgQ29weU1lbSAoSXBtaVNlbmREYXRhLCAmSGVhZGVyLCBzaXplb2YNCj4gPj4gKElQTUlf QkxPQl9UUkFOU0ZFUl9IRUFERVIpKTsNCj4gPj4+ICsgIGlmIChTZW5kRGF0YVNpemUpIHsNCj4g Pj4+ICsgICAgLy8NCj4gPj4+ICsgICAgLy8gQ2FsY3VsYXRlIHRoZSBDcmMgb2YgdGhlIHNlbmQg ZGF0YQ0KPiA+Pj4gKyAgICAvLw0KPiA+Pj4gKyAgICBDcmMgPSBDYWxjdWxhdGVDcmMxNiAoU2Vu ZERhdGEsIFNlbmREYXRhU2l6ZSk7DQo+ID4+PiArICAgIENvcHlNZW0gKElwbWlTZW5kRGF0YSAr IHNpemVvZiAoSVBNSV9CTE9CX1RSQU5TRkVSX0hFQURFUiksDQo+ID4+ICZDcmMsIHNpemVvZiAo VUlOVDE2KSk7DQo+ID4+PiArICAgIENvcHlNZW0gKElwbWlTZW5kRGF0YSArIHNpemVvZiAoSVBN SV9CTE9CX1RSQU5TRkVSX0hFQURFUikNCj4gKw0KPiA+PiBzaXplb2YgKFVJTlQxNiksIFNlbmRE YXRhLCBTZW5kRGF0YVNpemUpOw0KPiA+Pj4gKyAgfQ0KPiA+Pj4gKw0KPiA+Pj4gKyAjaWYgQkxP Ql9UUkFOU0ZFUl9ERUJVRw0KPiA+Pj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiJWE6IElucHV0 czpcbiIsIF9fRlVOQ1RJT05fXykpOw0KPiA+Pj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiJWE6 IFNlbmREYXRhU2l6ZTogJTAyeFxuRGF0YTogIiwNCj4gPj4gX19GVU5DVElPTl9fLCBTZW5kRGF0 YVNpemUpKTsNCj4gPj4+ICsgIFVJTlQ4ICBpOw0KPiA+Pj4gKyAgZm9yIChpID0gMDsgaSA8IFNl bmREYXRhU2l6ZTsgaSsrKSB7DQo+ID4+PiArICAgIERFQlVHICgoREVCVUdfSU5GTywgIiUwMngi LCAqKChVSU5UOCAqKVNlbmREYXRhICsgaSkpKTsNCj4gPj4+ICsgIH0NCj4gPj4+ICsNCj4gPj4+ ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlxuIikpOw0KPiA+Pj4gKyAgREVCVUcgKChERUJVR19J TkZPLCAiJWE6IElwbWlTZW5kRGF0YVNpemU6ICUwMnhcbkRhdGE6ICIsDQo+ID4+IF9fRlVOQ1RJ T05fXywgSXBtaVNlbmREYXRhU2l6ZSkpOw0KPiA+Pj4gKyAgZm9yIChpID0gMDsgaSA8IElwbWlT ZW5kRGF0YVNpemU7IGkrKykgew0KPiA+Pj4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICIlMDJ4 IiwgKigoVUlOVDggKilJcG1pU2VuZERhdGEgKyBpKSkpOw0KPiA+Pj4gKyAgfQ0KPiA+Pj4gKw0K PiA+Pj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiXG4iKSk7DQo+ID4+PiArICNlbmRpZg0KPiA+ Pj4gKw0KPiA+Pj4gKyAgSXBtaVJlc3BvbnNlRGF0YVNpemUgPSAoKlJlc3BvbnNlRGF0YVNpemUg Kw0KPiA+PiBQUk9UT0NPTF9SRVNQT05TRV9PVkVSSEVBRCk7DQo+ID4+PiArICAvLw0KPiA+Pj4g KyAgLy8gSWYgZXhwZWN0aW5nIGRhdGEgdG8gYmUgcmV0dXJuZWQsIHdlIGhhdmUgdG8gYWxzbyBh Y2NvdW50IGZvciB0aGUgMTYNCj4gYml0DQo+ID4+IENSQw0KPiA+Pj4gKyAgLy8NCj4gPj4+ICsg IGlmICgqUmVzcG9uc2VEYXRhU2l6ZSkgew0KPiA+Pj4gKyAgICBJcG1pUmVzcG9uc2VEYXRhU2l6 ZSArPSBzaXplb2YgKENyYyk7DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ID4+PiArICBJcG1pUmVz cG9uc2VEYXRhID0gQWxsb2NhdGVaZXJvUG9vbCAoSXBtaVJlc3BvbnNlRGF0YVNpemUpOw0KPiA+ Pj4gKyAgaWYgKElwbWlSZXNwb25zZURhdGEgPT0gTlVMTCkgew0KPiA+Pj4gKyAgICByZXR1cm4g RUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ID4+PiArICBTdGF0 dXMgPSBJcG1pU3VibWl0Q29tbWFuZCAoDQo+ID4+PiArICAgICAgICAgICAgIElQTUlfTkVURk5f T0VNLA0KPiA+Pj4gKyAgICAgICAgICAgICBJUE1JX09FTV9CTE9CX1RSQU5TRkVSX0NNRCwNCj4g Pj4+ICsgICAgICAgICAgICAgKFZPSUQgKilJcG1pU2VuZERhdGEsDQo+ID4+PiArICAgICAgICAg ICAgIElwbWlTZW5kRGF0YVNpemUsDQo+ID4+PiArICAgICAgICAgICAgIChWT0lEICopSXBtaVJl c3BvbnNlRGF0YSwNCj4gPj4+ICsgICAgICAgICAgICAgJklwbWlSZXNwb25zZURhdGFTaXplDQo+ ID4+PiArICAgICAgICAgICAgICk7DQo+ID4+PiArDQo+ID4+PiArICBGcmVlUG9vbCAoSXBtaVNl bmREYXRhKTsNCj4gPj4+ICsgIE1vZGlmaWVkUmVzcG9uc2VEYXRhID0gSXBtaVJlc3BvbnNlRGF0 YTsNCj4gPj4+ICsNCj4gPj4+ICsgI2lmIEJMT0JfVFJBTlNGRVJfREVCVUcNCj4gPj4+ICsgIERF QlVHICgoREVCVUdfSU5GTywgIiVhOiBJUE1JIFJlc3BvbnNlOlxuIiwgX19GVU5DVElPTl9fKSk7 DQo+ID4+PiArICBERUJVRyAoKERFQlVHX0lORk8sICIlYTogUmVzcG9uc2VEYXRhU2l6ZTogJTAy eFxuRGF0YTogIiwNCj4gPj4gX19GVU5DVElPTl9fLCBJcG1pUmVzcG9uc2VEYXRhU2l6ZSkpOw0K PiA+Pj4gKyAgZm9yIChpID0gMDsgaSA8IElwbWlSZXNwb25zZURhdGFTaXplOyBpKyspIHsNCj4g Pj4+ICsgICAgREVCVUcgKChERUJVR19JTkZPLCAiJTAyeCIsICooTW9kaWZpZWRSZXNwb25zZURh dGEgKyBpKSkpOw0KPiA+Pj4gKyAgfQ0KPiA+Pj4gKw0KPiA+Pj4gKyAgREVCVUcgKChERUJVR19J TkZPLCAiXG4iKSk7DQo+ID4+PiArICNlbmRpZg0KPiA+Pj4gKw0KPiA+Pj4gKyAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiA+Pj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+Pj4gKyAgfQ0K PiA+Pj4gKw0KPiA+Pj4gKyAgQ29tcGxldGlvbkNvZGUgPSAqTW9kaWZpZWRSZXNwb25zZURhdGE7 DQo+ID4+PiArICBpZiAoQ29tcGxldGlvbkNvZGUgIT0gSVBNSV9DT01QX0NPREVfTk9STUFMKSB7 DQo+ID4+PiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTogUmV0dXJuaW5nIGJlY2F1c2Ug Q29tcGxldGlvbkNvZGUgPQ0KPiA+PiAweCV4XG4iLCBfX0ZVTkNUSU9OX18sIENvbXBsZXRpb25D b2RlKSk7DQo+ID4+PiArICAgIEZyZWVQb29sIChJcG1pUmVzcG9uc2VEYXRhKTsNCj4gPj4+ICsg ICAgcmV0dXJuIEVGSV9QUk9UT0NPTF9FUlJPUjsNCj4gPj4+ICsgIH0NCj4gPj4+ICsNCj4gPj4+ ICsgIC8vIFN0cmlwIGNvbXBsZXRpb24gY29kZSwgd2UgYXJlIGRvbmUgd2l0aCBpdA0KPiA+Pj4g KyAgTW9kaWZpZWRSZXNwb25zZURhdGEgID0gTW9kaWZpZWRSZXNwb25zZURhdGEgKyBzaXplb2YN Cj4gPj4gKENvbXBsZXRpb25Db2RlKTsNCj4gPj4+ICsgIElwbWlSZXNwb25zZURhdGFTaXplIC09 IHNpemVvZiAoQ29tcGxldGlvbkNvZGUpOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgLy8gQ2hlY2sgT0VO IGNvZGUgYW5kIHZlcmlmeSBpdCBtYXRjaGVzIHRoZSBPcGVuQk1DIE9FTg0KPiA+Pj4gKyAgQ29w eU1lbSAoT2VuLCBNb2RpZmllZFJlc3BvbnNlRGF0YSwgc2l6ZW9mIChPcGVuQm1jT2VuKSk7DQo+ ID4+PiArICBpZiAoQ29tcGFyZU1lbSAoT2VuLCBPcGVuQm1jT2VuLCBzaXplb2YgKE9wZW5CbWNP ZW4pKSAhPSAwKSB7DQo+ID4+PiArICAgIEZyZWVQb29sIChJcG1pUmVzcG9uc2VEYXRhKTsNCj4g Pj4+ICsgICAgcmV0dXJuIEVGSV9QUk9UT0NPTF9FUlJPUjsNCj4gPj4+ICsgIH0NCj4gPj4+ICsN Cj4gPj4+ICsgIGlmIChJcG1pUmVzcG9uc2VEYXRhU2l6ZSA9PSBzaXplb2YgKE9wZW5CbWNPZW4p KSB7DQo+ID4+PiArICAgIC8vDQo+ID4+PiArICAgIC8vIEluIHRoaXMgY2FzZSwgdGhlcmUgd2Fz IG5vIHJlc3BvbnNlIGRhdGEgc2VudC4gVGhpcyBpcyBub3QgYW4gZXJyb3IuDQo+ID4+PiArICAg IC8vIFNvbWUgbWVzc2FnZXMgZG8gbm90IHJlcXVpcmUgYSByZXNwb25zZS4NCj4gPj4+ICsgICAg Ly8NCj4gPj4+ICsgICAgKlJlc3BvbnNlRGF0YVNpemUgPSAwOw0KPiA+Pj4gKyAgICBGcmVlUG9v bCAoSXBtaVJlc3BvbnNlRGF0YSk7DQo+ID4+PiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4+PiAr ICAgIC8vIE5vdyB3ZSBuZWVkIHRvIHZhbGlkYXRlIHRoZSBDUkMgdGhlbiBzZW5kIHRoZSBSZXNw b25zZSBib2R5DQo+IGJhY2sNCj4gPj4+ICsgIH0gZWxzZSB7DQo+ID4+PiArICAgIC8vIFN0cmlw IHRoZSBPRU4sIHdlIGFyZSBkb25lIHdpdGggaXQgbm93DQo+ID4+PiArICAgIE1vZGlmaWVkUmVz cG9uc2VEYXRhICA9IE1vZGlmaWVkUmVzcG9uc2VEYXRhICsgc2l6ZW9mIChPZW4pOw0KPiA+Pj4g KyAgICBJcG1pUmVzcG9uc2VEYXRhU2l6ZSAtPSBzaXplb2YgKE9lbik7DQo+ID4+PiArICAgIC8v IFRoZW4gdmFsaWRhdGUgdGhlIENyYw0KPiA+Pj4gKyAgICBDb3B5TWVtICgmQ3JjLCBNb2RpZmll ZFJlc3BvbnNlRGF0YSwgc2l6ZW9mIChDcmMpKTsNCj4gPj4+ICsgICAgTW9kaWZpZWRSZXNwb25z ZURhdGEgID0gTW9kaWZpZWRSZXNwb25zZURhdGEgKyBzaXplb2YgKENyYyk7DQo+ID4+PiArICAg IElwbWlSZXNwb25zZURhdGFTaXplIC09IHNpemVvZiAoQ3JjKTsNCj4gPj4+ICsNCj4gPj4+ICsg ICAgaWYgKENyYyA9PSBDYWxjdWxhdGVDcmMxNiAoTW9kaWZpZWRSZXNwb25zZURhdGEsDQo+ID4+ IElwbWlSZXNwb25zZURhdGFTaXplKSkgew0KPiA+Pj4gKyAgICAgIENvcHlNZW0gKFJlc3BvbnNl RGF0YSwgTW9kaWZpZWRSZXNwb25zZURhdGEsDQo+ID4+IElwbWlSZXNwb25zZURhdGFTaXplKTsN Cj4gPj4+ICsgICAgICBDb3B5TWVtIChSZXNwb25zZURhdGFTaXplLCAmSXBtaVJlc3BvbnNlRGF0 YVNpemUsIHNpemVvZg0KPiA+PiAoSXBtaVJlc3BvbnNlRGF0YVNpemUpKTsNCj4gPj4+ICsgICAg ICBGcmVlUG9vbCAoSXBtaVJlc3BvbnNlRGF0YSk7DQo+ID4+PiArICAgICAgcmV0dXJuIEVGSV9T VUNDRVNTOw0KPiA+Pj4gKyAgICB9IGVsc2Ugew0KPiA+Pj4gKyAgICAgIEZyZWVQb29sIChJcG1p UmVzcG9uc2VEYXRhKTsNCj4gPj4+ICsgICAgICByZXR1cm4gRUZJX0NSQ19FUlJPUjsNCj4gPj4+ ICsgICAgfQ0KPiA+Pj4gKyAgfQ0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICsvKioNCj4gPj4+ ICsgIEBwYXJhbVtvdXRdICAgICAgICBDb3VudCAgICAgICBUaGUgbnVtYmVyIG9mIGFjdGl2ZSBi bG9icw0KPiA+Pj4gKw0KPiA+Pj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRo ZSBjb21tYW5kIGJ5dGUgc3RyZWFtIHdhcw0KPiBzdWNjZXNzZnVsbHkNCj4gPj4gc3VibWl0IHRv IHRoZSBkZXZpY2UgYW5kIGEgcmVzcG9uc2Ugd2FzIHN1Y2Nlc3NmdWxseSByZWNlaXZlZC4NCj4g Pj4+ICsgIEByZXR2YWwgRUZJX1BST1RPQ09MX0VSUk9SICAgICBUaGUgSXBtaSBjb21tYW5kIGZh aWxlZA0KPiA+Pj4gKyAgQHJldHZhbCBFRklfQ1JDX0VSUk9SICAgICAgICAgIFRoZSBJcG1pIGNv bW1hbmQgcmV0dXJuZWQgYSBiYWQNCj4gPj4gY2hlY2tzdW0NCj4gPj4+ICsqKi8NCj4gPj4+ICtF RklfU1RBVFVTDQo+ID4+PiArSXBtaUJsb2JUcmFuc2ZlckdldENvdW50ICgNCj4gPj4+ICsgIE9V VCBVSU5UMzIgICpDb3VudA0KPiA+Pj4gKyAgKQ0KPiA+Pj4gK3sNCj4gPj4gUGxlYXNlIGFkZCB0 aGUgYXJndW1lbnQgdmFsaWRhdGlvbiBmb3IgZnVuY3Rpb25zIHdoaWNoIGV4cG9zZSBmb3Igb3Ro ZXINCj4gPj4gZHJpdmVycw0KPiA+Pg0KPiA+Pg0KPiA+Pj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVz Ow0KPiA+Pj4gKyAgVUlOVDggICAgICAgKlJlc3BvbnNlRGF0YTsNCj4gPj4+ICsgIFVJTlQzMiAg ICAgIFJlc3BvbnNlRGF0YVNpemU7DQo+ID4+PiArDQo+ID4+PiArICBSZXNwb25zZURhdGFTaXpl ID0gc2l6ZW9mDQo+ID4+IChJUE1JX0JMT0JfVFJBTlNGRVJfR0VUX0NPVU5UX1JFU1BPTlNFKTsN Cj4gPj4+ICsgIFJlc3BvbnNlRGF0YSAgICAgPSBBbGxvY2F0ZVplcm9Qb29sIChSZXNwb25zZURh dGFTaXplKTsNCj4gPj4+ICsgIGlmIChSZXNwb25zZURhdGEgPT0gTlVMTCkgew0KPiA+Pj4gKyAg ICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ID4+ PiArICBTdGF0dXMgPSBJcG1pQmxvYlRyYW5zZmVyU2VuZElwbWkNCj4gPj4gKElwbWlCbG9iVHJh bnNmZXJTdWJjb21tYW5kR2V0Q291bnQsIE5VTEwsIDAsIChVSU5UOA0KPiAqKVJlc3BvbnNlRGF0 YSwNCj4gPj4gJlJlc3BvbnNlRGF0YVNpemUpOw0KPiA+Pj4gKyAgaWYgKCFFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4gPj4+ICsgICAgKkNvdW50ID0gKChJUE1JX0JMT0JfVFJBTlNGRVJfR0VUX0NP VU5UX1JFU1BPTlNFDQo+ID4+ICopUmVzcG9uc2VEYXRhKS0+QmxvYkNvdW50Ow0KPiA+Pj4gKyAg fQ0KPiA+Pj4gKw0KPiA+Pj4gKyAgRnJlZVBvb2wgKFJlc3BvbnNlRGF0YSk7DQo+ID4+PiArICBy ZXR1cm4gU3RhdHVzOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICsvKioNCj4gPj4+ICsgIEBw YXJhbVtpbl0gICAgICAgICBCbG9iSW5kZXggICAgICAgVGhlIDAtYmFzZWQgSW5kZXggb2YgdGhl IGJsb2IgdG8NCj4gPj4gZW51bWVyYXRlDQo+ID4+PiArICBAcGFyYW1bb3V0XSAgICAgICAgQmxv YklkICAgICAgICAgIFRoZSBJRCBvZiB0aGUgYmxvYg0KPiA+Pj4gKw0KPiA+Pj4gKyAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICBTdWNjZXNzZnVsbHkgZW51bWVyYXRlZCB0aGUg YmxvYi4NCj4gPj4+ICsgIEByZXR2YWwgT3RoZXIgICAgICAgICAgICAgICAgICAgICAgQW4gZXJy b3Igb2NjdXJyZWQNCj4gPj4+ICsqKi8NCj4gPj4+ICtFRklfU1RBVFVTDQo+ID4+PiArSXBtaUJs b2JUcmFuc2ZlckVudW1lcmF0ZSAoDQo+ID4+PiArICBJTiAgVUlOVDMyICBCbG9iSW5kZXgsDQo+ ID4+PiArICBPVVQgQ0hBUjggICAqQmxvYklkDQo+ID4+PiArICApDQo+ID4+PiArew0KPiA+Pj4g KyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgVUlOVDggICAqU2VuZERh dGE7DQo+ID4+PiArICBVSU5UOCAgICpSZXNwb25zZURhdGE7DQo+ID4+PiArICBVSU5UMzIgIFNl bmREYXRhU2l6ZTsNCj4gPj4+ICsgIFVJTlQzMiAgUmVzcG9uc2VEYXRhU2l6ZTsNCj4gPj4+ICsN Cj4gPj4+ICsgIGlmIChCbG9iSWQgPT0gTlVMTCkgew0KPiA+Pj4gKyAgICBBU1NFUlQgKEZBTFNF KTsNCj4gPj4+ICsgICAgcmV0dXJuIEVGSV9BQk9SVEVEOw0KPiA+Pj4gKyAgfQ0KPiA+Pj4gKw0K PiA+Pj4gKyAgUmVzcG9uc2VEYXRhU2l6ZSA9IHNpemVvZg0KPiA+PiAoSVBNSV9CTE9CX1RSQU5T RkVSX0JMT0JfRU5VTUVSQVRFX1JFU1BPTlNFKTsNCj4gPj4+ICsgIFJlc3BvbnNlRGF0YSAgICAg PSBBbGxvY2F0ZVplcm9Qb29sIChSZXNwb25zZURhdGFTaXplKTsNCj4gPj4+ICsgIGlmIChSZXNw b25zZURhdGEgPT0gTlVMTCkgew0KPiA+Pj4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJD RVM7DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ID4+PiArICAvLw0KPiA+Pj4gKyAgLy8gRm9ybWF0 IHNlbmQgZGF0YQ0KPiA+Pj4gKyAgLy8NCj4gPj4+ICsgIFNlbmREYXRhU2l6ZSA9IHNpemVvZg0K PiA+PiAoSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfRU5VTUVSQVRFX1NFTkRfREFUQSk7DQo+ID4+ PiArICBTZW5kRGF0YSAgICAgPSBBbGxvY2F0ZVplcm9Qb29sIChTZW5kRGF0YVNpemUpOw0KPiA+ Pj4gKyAgaWYgKFNlbmREYXRhID09IE5VTEwpIHsNCj4gPj4+ICsgICAgcmV0dXJuIEVGSV9PVVRf T0ZfUkVTT1VSQ0VTOw0KPiA+Pj4gKyAgfQ0KPiA+Pj4gKw0KPiA+Pj4gKyAgKChJUE1JX0JMT0Jf VFJBTlNGRVJfQkxPQl9FTlVNRVJBVEVfU0VORF9EQVRBDQo+ICopU2VuZERhdGEpLQ0KPiA+Pj4g QmxvYkluZGV4ID0gQmxvYkluZGV4Ow0KPiA+Pj4gKw0KPiA+Pj4gKyAgU3RhdHVzID0gSXBtaUJs b2JUcmFuc2ZlclNlbmRJcG1pDQo+ID4+IChJcG1pQmxvYlRyYW5zZmVyU3ViY29tbWFuZEVudW1l cmF0ZSwgU2VuZERhdGEsIFNlbmREYXRhU2l6ZSwNCj4gKFVJTlQ4DQo+ID4+ICopUmVzcG9uc2VE YXRhLCAmUmVzcG9uc2VEYXRhU2l6ZSk7DQo+ID4+PiArICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiA+Pj4gKyAgICBBc2NpaVN0ckNweVMgKEJsb2JJZCwgUmVzcG9uc2VEYXRhU2l6ZSwg KENIQVI4ICopUmVzcG9uc2VEYXRhKTsNCj4gPj4+ICsgIH0NCj4gPj4+ICsNCj4gPj4+ICsgIEZy ZWVQb29sIChSZXNwb25zZURhdGEpOw0KPiA+Pj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPj4+ICt9 DQo+ID4+PiArDQo+ID4+PiArLyoqDQo+ID4+PiArICBAcGFyYW1baW5dICAgICAgICAgQmxvYklk ICAgICAgICAgIFRoZSBJRCBvZiB0aGUgYmxvYiB0byBvcGVuDQo+ID4+PiArICBAcGFyYW1baW5d ICAgICAgICAgRmxhZ3MgICAgICAgICAgIEZsYWdzIHRvIGNvbnRyb2wgaG93IHRoZSBibG9iIGlz IG9wZW5lZA0KPiA+Pj4gKyAgQHBhcmFtW291dF0gICAgICAgIFNlc3Npb25JZCAgICAgICBBIHVu aXF1ZSBzZXNzaW9uIGlkZW50aWZpZXINCj4gPj4+ICsNCj4gPj4+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IG9wZW5lZCB0aGUgYmxvYi4NCj4gPj4+ ICsgIEByZXR2YWwgT3RoZXIgICAgICAgICAgICAgICAgICAgICAgQW4gZXJyb3Igb2NjdXJyZWQN Cj4gPj4+ICsqKi8NCj4gPj4+ICtFRklfU1RBVFVTDQo+ID4+PiArSXBtaUJsb2JUcmFuc2Zlck9w ZW4gKA0KPiA+Pj4gKyAgSU4gIENIQVI4ICAgKkJsb2JJZCwNCj4gPj4+ICsgIElOICBVSU5UMTYg IEZsYWdzLA0KPiA+Pj4gKyAgT1VUIFVJTlQxNiAgKlNlc3Npb25JZA0KPiA+Pj4gKyAgKQ0KPiA+ Pj4gK3sNCj4gPj4+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPj4+ICsgIFVJTlQ4ICAgICAg ICpTZW5kRGF0YTsNCj4gPj4+ICsgIFVJTlQ4ICAgICAgICpSZXNwb25zZURhdGE7DQo+ID4+PiAr ICBVSU5UMzIgICAgICBTZW5kRGF0YVNpemU7DQo+ID4+PiArICBVSU5UMzIgICAgICBSZXNwb25z ZURhdGFTaXplOw0KPiA+Pj4gKyAgQ0hBUjggICAgICAgKkJsb2JTZWFyY2g7DQo+ID4+PiArICBV SU5UMzIgICAgICBOdW1CbG9iczsNCj4gPj4+ICsgIFVJTlQxNiAgICAgIEluZGV4Ow0KPiA+Pj4g KyAgQk9PTEVBTiAgICAgQmxvYkZvdW5kOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgLy8NCj4gPj4+ICsg IC8vIEJlZm9yZSBvcGVuaW5nIGEgYmxvYiwgbmVlZCB0byBjaGVjayBpZiBpdCBleGlzdHMNCj4g Pj4+ICsgIC8vDQo+ID4+PiArICBTdGF0dXMgPSBJcG1pQmxvYlRyYW5zZmVyR2V0Q291bnQgKCZO dW1CbG9icyk7DQo+ID4+IEkgdGhpbmsgaXQgc2hvdWxkIGJlIHJlbW92ZWQgYXMgdGhhdCB3aWxs IGR1cGxpY2F0ZSB3b3JrDQo+ID4+DQo+ID4+IFRoZSBkcml2ZXJzIHVzaW5nIElQTUkgYmxvYiBw cm90b2NvbCB3aWxsICAiZ2V0IGNvdW50IiB0aGVtc2VsdmVzLg0KPiA+Pg0KPiA+Pj4gKyAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSB8fCAoTnVtQmxvYnMgPT0gMCkpIHsNCj4gPj4+ICsgICAgaWYg KFN0YXR1cyA9PSBFRklfVU5TVVBQT1JURUQpIHsNCj4gPj4+ICsgICAgICByZXR1cm4gU3RhdHVz Ow0KPiA+Pj4gKyAgICB9DQo+ID4+PiArDQo+ID4+PiArICAgIERFQlVHICgoREVCVUdfRVJST1Is ICIlYTogQ291bGQgbm90IGZpbmQgYW55IGJsb2JzOiAlclxuIiwNCj4gPj4gX19GVU5DVElPTl9f LCBTdGF0dXMpKTsNCj4gPj4+ICsgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ID4+PiArICB9 DQo+ID4+PiArDQo+ID4+PiArICBCbG9iU2VhcmNoID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9m IChDSEFSOCkgKg0KPiA+PiBJUE1JX09FTV9CTE9CX01BWF9EQVRBX1BFUl9QQUNLRVQpOw0KPiA+ Pj4gKyAgaWYgKEJsb2JTZWFyY2ggPT0gTlVMTCkgew0KPiA+Pj4gKyAgICByZXR1cm4gRUZJX09V VF9PRl9SRVNPVVJDRVM7DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ID4+PiArICBCbG9iRm91bmQg PSBGQUxTRTsNCj4gPj4+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IE51bUJsb2JzOyBJbmRl eCsrKSB7DQo+ID4+PiArICAgIFN0YXR1cyA9IElwbWlCbG9iVHJhbnNmZXJFbnVtZXJhdGUgKElu ZGV4LCBCbG9iU2VhcmNoKTsNCj4gPj4gdGhlIHNhbWUgaGVyZQ0KPiA+Pj4gKyAgICBpZiAoKCFF RklfRVJST1IgKFN0YXR1cykpICYmIChBc2NpaVN0ckNtcCAoQmxvYlNlYXJjaCwgQmxvYklkKSA9 PSAwKSkNCj4gew0KPiA+Pj4gKyAgICAgIEJsb2JGb3VuZCA9IFRSVUU7DQo+ID4+PiArICAgICAg YnJlYWs7DQo+ID4+PiArICAgIH0gZWxzZSB7DQo+ID4+PiArICAgICAgY29udGludWU7DQo+ID4+ PiArICAgIH0NCj4gPj4+ICsgIH0NCj4gPj4+ICsNCj4gPj4+ICsgIGlmICghQmxvYkZvdW5kKSB7 DQo+ID4+PiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTogQ291bGQgbm90IGZpbmQgYSBi bG9iIHRoYXQgbWF0Y2hlcw0KPiAlc1xuIiwNCj4gPj4gX19GVU5DVElPTl9fLCBCbG9iSWQpKTsN Cj4gPj4+ICsgICAgRnJlZVBvb2wgKEJsb2JTZWFyY2gpOw0KPiA+Pj4gKyAgICByZXR1cm4gRUZJ X05PVF9GT1VORDsNCj4gPj4+ICsgIH0NCj4gPj4+ICsNCj4gPj4+ICsgIFJlc3BvbnNlRGF0YVNp emUgPSBzaXplb2YNCj4gPj4gKElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX09QRU5fUkVTUE9OU0Up Ow0KPiA+Pj4gKyAgUmVzcG9uc2VEYXRhICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKFJlc3BvbnNl RGF0YVNpemUpOw0KPiA+Pj4gKyAgaWYgKFJlc3BvbnNlRGF0YSA9PSBOVUxMKSB7DQo+ID4+PiAr ICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPj4+ICsgIH0NCj4gPj4+ICsNCj4g Pj4+ICsgIC8vDQo+ID4+PiArICAvLyBGb3JtYXQgc2VuZCBkYXRhDQo+ID4+PiArICAvLw0KPiA+ Pj4gKyAgU2VuZERhdGFTaXplID0gc2l6ZW9mDQo+ID4+ICgoKElQTUlfQkxPQl9UUkFOU0ZFUl9C TE9CX09QRU5fU0VORF9EQVRBICopU2VuZERhdGEpLT5GbGFncykNCj4gKw0KPiA+PiAoKEFzY2lp U3RyTGVuIChCbG9iSWQpKSAqIHNpemVvZiAoQ0hBUjgpKSArIHNpemVvZiAoQ0hBUjgpOw0KPiA+ Pj4gKyAgU2VuZERhdGEgICAgID0gQWxsb2NhdGVaZXJvUG9vbCAoU2VuZERhdGFTaXplKTsNCj4g Pj4+ICsgIGlmIChTZW5kRGF0YSA9PSBOVUxMKSB7DQo+ID4+PiArICAgIHJldHVybiBFRklfT1VU X09GX1JFU09VUkNFUzsNCj4gPj4+ICsgIH0NCj4gPj4+ICsNCj4gPj4+ICsgIEFzY2lpU3RyQ3B5 UyAoKChJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9PUEVOX1NFTkRfREFUQQ0KPiA+PiAqKVNlbmRE YXRhKS0+QmxvYklkLCBBc2NpaVN0clNpemUgKEJsb2JJZCkgLyBzaXplb2YgKENIQVI4KSwgQmxv YklkKTsNCj4gPj4+ICsgICgoSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfT1BFTl9TRU5EX0RBVEEg KilTZW5kRGF0YSktDQo+ID5GbGFncw0KPiA+PiA9IEZsYWdzOw0KPiA+Pj4gKyAgLy8gYXBwZW5k IG51bGwgY2hhciB0byBTZW5kRGF0YQ0KPiA+Pj4gKyAgU2VuZERhdGFbU2VuZERhdGFTaXplLTFd ID0gMDsNCj4gPj4+ICsNCj4gPj4+ICsgIFN0YXR1cyA9IElwbWlCbG9iVHJhbnNmZXJTZW5kSXBt aQ0KPiA+PiAoSXBtaUJsb2JUcmFuc2ZlclN1YmNvbW1hbmRPcGVuLCBTZW5kRGF0YSwgU2VuZERh dGFTaXplLCAoVUlOVDgNCj4gPj4gKilSZXNwb25zZURhdGEsICZSZXNwb25zZURhdGFTaXplKTsN Cj4gPj4+ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4+PiArICAgICpTZXNzaW9u SWQgPSAoKElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX09QRU5fUkVTUE9OU0UNCj4gPj4gKilSZXNw b25zZURhdGEpLT5TZXNzaW9uSWQ7DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ID4+PiArICBGcmVl UG9vbCAoUmVzcG9uc2VEYXRhKTsNCj4gPj4+ICsgIEZyZWVQb29sIChTZW5kRGF0YSk7DQo+ID4+ PiArICBGcmVlUG9vbCAoQmxvYlNlYXJjaCk7DQo+ID4+PiArICByZXR1cm4gU3RhdHVzOw0KPiA+ Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICsvKioNCj4gPj4+ICsgIEBwYXJhbVtpbl0gICAgICAgICBT ZXNzaW9uSWQgICAgICAgVGhlIHNlc3Npb24gSUQgcmV0dXJuZWQgZnJvbSBhIGNhbGwgdG8NCj4g Pj4gQmxvYk9wZW4NCj4gPj4+ICsgIEBwYXJhbVtpbl0gICAgICAgICBPZmZzZXQgICAgICAgICAg VGhlIG9mZnNldCBvZiB0aGUgYmxvYiBmcm9tIHdoaWNoIHRvIHN0YXJ0DQo+ID4+IHJlYWRpbmcN Cj4gPj4+ICsgIEBwYXJhbVtpbl0gICAgICAgICBSZXF1ZXN0ZWRTaXplICAgVGhlIGxlbmd0aCBv ZiBkYXRhIHRvIHJlYWQNCj4gPj4+ICsgIEBwYXJhbVtvdXRdICAgICAgICBEYXRhICAgICAgICAg ICAgRGF0YSByZWFkIGZyb20gdGhlIGJsb2INCj4gPj4+ICsNCj4gPj4+ICsgIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHJlYWQgZnJvbSB0aGUgYmxvYi4N Cj4gPj4+ICsgIEByZXR2YWwgT3RoZXIgICAgICAgICAgICAgICAgICAgICAgQW4gZXJyb3Igb2Nj dXJyZWQNCj4gPj4+ICsqKi8NCj4gPj4+ICtFRklfU1RBVFVTDQo+ID4+PiArSXBtaUJsb2JUcmFu c2ZlclJlYWQgKA0KPiA+Pj4gKyAgSU4gIFVJTlQxNiAgU2Vzc2lvbklkLA0KPiA+Pj4gKyAgSU4g IFVJTlQzMiAgT2Zmc2V0LA0KPiA+Pj4gKyAgSU4gIFVJTlQzMiAgUmVxdWVzdGVkU2l6ZSwNCj4g Pj4+ICsgIE9VVCBVSU5UOCAgICpEYXRhDQo+ID4+PiArICApDQo+ID4+PiArew0KPiA+Pj4gKyAg RUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+Pj4gKyAgVUlOVDggICAgICAgKlNlbmREYXRhOw0KPiA+ Pj4gKyAgVUlOVDggICAgICAgKlJlc3BvbnNlRGF0YTsNCj4gPj4+ICsgIFVJTlQzMiAgICAgIFNl bmREYXRhU2l6ZTsNCj4gPj4+ICsgIFVJTlQzMiAgICAgIFJlc3BvbnNlRGF0YVNpemU7DQo+ID4+ PiArDQo+ID4+PiArICBpZiAoRGF0YSA9PSBOVUxMKSB7DQo+ID4+PiArICAgIEFTU0VSVCAoRkFM U0UpOw0KPiA+Pj4gKyAgICByZXR1cm4gRUZJX0FCT1JURUQ7DQo+ID4+PiArICB9DQo+ID4+PiAr DQo+ID4+PiArICBSZXNwb25zZURhdGFTaXplID0gUmVxdWVzdGVkU2l6ZSAqIHNpemVvZiAoVUlO VDgpOw0KPiA+Pj4gKyAgUmVzcG9uc2VEYXRhICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKFJlc3Bv bnNlRGF0YVNpemUpOw0KPiA+Pj4gKyAgaWYgKFJlc3BvbnNlRGF0YSA9PSBOVUxMKSB7DQo+ID4+ PiArICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPj4+ICsgIH0NCj4gPj4+ICsN Cj4gPj4+ICsgIC8vDQo+ID4+PiArICAvLyBGb3JtYXQgc2VuZCBkYXRhDQo+ID4+PiArICAvLw0K PiA+Pj4gKyAgU2VuZERhdGFTaXplID0gc2l6ZW9mDQo+ID4+IChJUE1JX0JMT0JfVFJBTlNGRVJf QkxPQl9SRUFEX1NFTkRfREFUQSk7DQo+ID4+PiArICBTZW5kRGF0YSAgICAgPSBBbGxvY2F0ZVpl cm9Qb29sIChTZW5kRGF0YVNpemUpOw0KPiA+Pj4gKyAgaWYgKFNlbmREYXRhID09IE5VTEwpIHsN Cj4gPj4+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+Pj4gKyAgfQ0KPiA+ Pj4gKw0KPiA+Pj4gKyAgKChJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9SRUFEX1NFTkRfREFUQSAq KVNlbmREYXRhKS0NCj4gPj4+IFNlc3Npb25JZCAgICAgPSBTZXNzaW9uSWQ7DQo+ID4+PiArICAo KElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX1JFQURfU0VORF9EQVRBICopU2VuZERhdGEpLQ0KPiA+ Pj4gT2Zmc2V0ICAgICAgICA9IE9mZnNldDsNCj4gPj4+ICsgICgoSVBNSV9CTE9CX1RSQU5TRkVS X0JMT0JfUkVBRF9TRU5EX0RBVEEgKilTZW5kRGF0YSktDQo+ID4+PiBSZXF1ZXN0ZWRTaXplID0g UmVxdWVzdGVkU2l6ZTsNCj4gPj4+ICsNCj4gPj4+ICsgIFN0YXR1cyA9IElwbWlCbG9iVHJhbnNm ZXJTZW5kSXBtaQ0KPiAoSXBtaUJsb2JUcmFuc2ZlclN1YmNvbW1hbmRSZWFkLA0KPiA+PiBTZW5k RGF0YSwgU2VuZERhdGFTaXplLCAoVUlOVDggKilSZXNwb25zZURhdGEsICZSZXNwb25zZURhdGFT aXplKTsNCj4gPj4+ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4+PiArICAgIENv cHlNZW0gKERhdGEsICgoSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfUkVBRF9SRVNQT05TRQ0KPiA+ PiAqKVJlc3BvbnNlRGF0YSktPkRhdGEsIFJlc3BvbnNlRGF0YVNpemUgKiBzaXplb2YgKFVJTlQ4 KSk7DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ID4+PiArICBGcmVlUG9vbCAoUmVzcG9uc2VEYXRh KTsNCj4gPj4+ICsgIEZyZWVQb29sIChTZW5kRGF0YSk7DQo+ID4+PiArICByZXR1cm4gU3RhdHVz Ow0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICsvKioNCj4gPj4+ICsgIEBwYXJhbVtpbl0gICAg ICAgICBTZXNzaW9uSWQgICAgICAgVGhlIHNlc3Npb24gSUQgcmV0dXJuZWQgZnJvbSBhIGNhbGwg dG8NCj4gPj4gQmxvYk9wZW4NCj4gPj4+ICsgIEBwYXJhbVtpbl0gICAgICAgICBPZmZzZXQgICAg ICAgICAgVGhlIG9mZnNldCBvZiB0aGUgYmxvYiBmcm9tIHdoaWNoIHRvIHN0YXJ0DQo+ID4+IHdy aXRpbmcNCj4gPj4+ICsgIEBwYXJhbVtpbl0gICAgICAgICBEYXRhICAgICAgICAgICAgQSBwb2lu dGVyIHRvIHRoZSBkYXRhIHRvIHdyaXRlDQo+ID4+PiArDQo+ID4+PiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSB3cm90ZSB0byB0aGUgYmxvYi4NCj4g Pj4+ICsgIEByZXR2YWwgT3RoZXIgICAgICAgICAgICAgICAgICAgICAgQW4gZXJyb3Igb2NjdXJy ZWQNCj4gPj4+ICsqKi8NCj4gPj4+ICtFRklfU1RBVFVTDQo+ID4+PiArSXBtaUJsb2JUcmFuc2Zl cldyaXRlICgNCj4gPj4+ICsgIElOICBVSU5UMTYgIFNlc3Npb25JZCwNCj4gPj4+ICsgIElOICBV SU5UMzIgIE9mZnNldCwNCj4gPj4+ICsgIElOICBVSU5UOCAgICpEYXRhLA0KPiA+Pj4gKyAgSU4g IFVJTlQzMiAgV3JpdGVMZW5ndGgNCj4gPj4+ICsgICkNCj4gPj4+ICt7DQo+ID4+PiArICBFRklf U1RBVFVTICBTdGF0dXM7DQo+ID4+PiArICBVSU5UOCAgICAgICAqU2VuZERhdGE7DQo+ID4+PiAr ICBVSU5UMzIgICAgICBTZW5kRGF0YVNpemU7DQo+ID4+PiArICBVSU5UMzIgICAgICBSZXNwb25z ZURhdGFTaXplOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgLy8NCj4gPj4+ICsgIC8vIEZvcm1hdCBzZW5k IGRhdGENCj4gPj4+ICsgIC8vDQo+ID4+PiArICBTZW5kRGF0YVNpemUgPSBzaXplb2YgKFNlc3Np b25JZCkgKyBzaXplb2YgKE9mZnNldCkgKyBXcml0ZUxlbmd0aDsNCj4gPj4+ICsgIFNlbmREYXRh ICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKFNlbmREYXRhU2l6ZSk7DQo+ID4+PiArICBpZiAoU2Vu ZERhdGEgPT0gTlVMTCkgew0KPiA+Pj4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7 DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ID4+PiArICAoKElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9C X1dSSVRFX1NFTkRfREFUQSAqKVNlbmREYXRhKS0NCj4gPj4+IFNlc3Npb25JZCA9IFNlc3Npb25J ZDsNCj4gPj4+ICsgICgoSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfV1JJVEVfU0VORF9EQVRBICop U2VuZERhdGEpLQ0KPiA+Pj4gT2Zmc2V0ICAgID0gT2Zmc2V0Ow0KPiA+Pj4gKyAgQ29weU1lbSAo KChJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9XUklURV9TRU5EX0RBVEENCj4gPj4gKilTZW5kRGF0 YSktPkRhdGEsIERhdGEsIHNpemVvZiAoVUlOVDgpICogV3JpdGVMZW5ndGgpOw0KPiA+Pj4gKw0K PiA+Pj4gKyAgUmVzcG9uc2VEYXRhU2l6ZSA9IDA7DQo+ID4+PiArICBTdGF0dXMgICAgICAgICAg ID0gSXBtaUJsb2JUcmFuc2ZlclNlbmRJcG1pDQo+ID4+IChJcG1pQmxvYlRyYW5zZmVyU3ViY29t bWFuZFdyaXRlLCBTZW5kRGF0YSwgU2VuZERhdGFTaXplLCBOVUxMLA0KPiA+PiAmUmVzcG9uc2VE YXRhU2l6ZSk7DQo+ID4+PiArDQo+ID4+PiArICBGcmVlUG9vbCAoU2VuZERhdGEpOw0KPiA+Pj4g KyAgcmV0dXJuIFN0YXR1czsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArLyoqDQo+ID4+PiAr ICBAcGFyYW1baW5dICAgICAgICAgU2Vzc2lvbklkICAgICAgICBUaGUgc2Vzc2lvbiBJRCByZXR1 cm5lZCBmcm9tIGEgY2FsbCB0bw0KPiA+PiBCbG9iT3Blbg0KPiA+Pj4gKyAgQHBhcmFtW2luXSAg ICAgICAgIENvbW1pdERhdGFMZW5ndGggVGhlIGxlbmd0aCBvZiBkYXRhIHRvIGNvbW1pdCB0bw0K PiB0aGUNCj4gPj4gYmxvYg0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgICAgICAgIENvbW1pdERhdGEg ICAgICAgQSBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIGNvbW1pdA0KPiA+Pj4gKw0KPiA+Pj4gKyAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICBTdWNjZXNzZnVsIGNvbW1pdCB0byB0 aGUgYmxvYi4NCj4gPj4+ICsgIEByZXR2YWwgT3RoZXIgICAgICAgICAgICAgICAgICAgICAgQW4g ZXJyb3Igb2NjdXJyZWQNCj4gPj4+ICsqKi8NCj4gPj4+ICtFRklfU1RBVFVTDQo+ID4+PiArSXBt aUJsb2JUcmFuc2ZlckNvbW1pdCAoDQo+ID4+PiArICBJTiAgVUlOVDE2ICBTZXNzaW9uSWQsDQo+ ID4+PiArICBJTiAgVUlOVDggICBDb21taXREYXRhTGVuZ3RoLA0KPiA+Pj4gKyAgSU4gIFVJTlQ4 ICAgKkNvbW1pdERhdGENCj4gPj4+ICsgICkNCj4gPj4+ICt7DQo+ID4+PiArICBFRklfU1RBVFVT ICBTdGF0dXM7DQo+ID4+PiArICBVSU5UOCAgICAgICAqU2VuZERhdGE7DQo+ID4+PiArICBVSU5U MzIgICAgICBTZW5kRGF0YVNpemU7DQo+ID4+PiArICBVSU5UMzIgICAgICBSZXNwb25zZURhdGFT aXplOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgLy8NCj4gPj4+ICsgIC8vIEZvcm1hdCBzZW5kIGRhdGEN Cj4gPj4+ICsgIC8vDQo+ID4+PiArICBTZW5kRGF0YVNpemUgPSBzaXplb2YgKFNlc3Npb25JZCkg KyBzaXplb2YgKENvbW1pdERhdGFMZW5ndGgpICsNCj4gPj4gQ29tbWl0RGF0YUxlbmd0aDsNCj4g Pj4+ICsgIFNlbmREYXRhICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKFNlbmREYXRhU2l6ZSk7DQo+ ID4+PiArICBpZiAoU2VuZERhdGEgPT0gTlVMTCkgew0KPiA+Pj4gKyAgICByZXR1cm4gRUZJX09V VF9PRl9SRVNPVVJDRVM7DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ID4+PiArICAoKElQTUlfQkxP Ql9UUkFOU0ZFUl9CTE9CX0NPTU1JVF9TRU5EX0RBVEEgKilTZW5kRGF0YSktDQo+ID4+PiBTZXNz aW9uSWQgICAgICAgID0gU2Vzc2lvbklkOw0KPiA+Pj4gKyAgKChJUE1JX0JMT0JfVFJBTlNGRVJf QkxPQl9DT01NSVRfU0VORF9EQVRBICopU2VuZERhdGEpLQ0KPiA+Pj4gQ29tbWl0RGF0YUxlbmd0 aCA9IENvbW1pdERhdGFMZW5ndGg7DQo+ID4+PiArICBDb3B5TWVtICgoKElQTUlfQkxPQl9UUkFO U0ZFUl9CTE9CX0NPTU1JVF9TRU5EX0RBVEENCj4gPj4gKilTZW5kRGF0YSktPkNvbW1pdERhdGEs IENvbW1pdERhdGEsIHNpemVvZiAoVUlOVDgpICoNCj4gPj4gQ29tbWl0RGF0YUxlbmd0aCk7DQo+ ID4+PiArDQo+ID4+PiArICBSZXNwb25zZURhdGFTaXplID0gMDsNCj4gPj4+ICsNCj4gPj4+ICsg IFN0YXR1cyA9IElwbWlCbG9iVHJhbnNmZXJTZW5kSXBtaQ0KPiA+PiAoSXBtaUJsb2JUcmFuc2Zl clN1YmNvbW1hbmRDb21taXQsIFNlbmREYXRhLCBTZW5kRGF0YVNpemUsIE5VTEwsDQo+ID4+ICZS ZXNwb25zZURhdGFTaXplKTsNCj4gPj4+ICsNCj4gPj4+ICsgIEZyZWVQb29sIChTZW5kRGF0YSk7 DQo+ID4+PiArICByZXR1cm4gU3RhdHVzOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICsvKioN Cj4gPj4+ICsgIEBwYXJhbVtpbl0gICAgICAgICBTZXNzaW9uSWQgICAgICAgVGhlIHNlc3Npb24g SUQgcmV0dXJuZWQgZnJvbSBhIGNhbGwgdG8NCj4gPj4gQmxvYk9wZW4NCj4gPj4+ICsNCj4gPj4+ ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgVGhlIGJsb2Igd2FzIGNsb3Nl ZC4NCj4gPj4+ICsgIEByZXR2YWwgT3RoZXIgICAgICAgICAgICAgICAgICAgICAgQW4gZXJyb3Ig b2NjdXJyZWQNCj4gPj4+ICsqKi8NCj4gPj4+ICtFRklfU1RBVFVTDQo+ID4+PiArSXBtaUJsb2JU cmFuc2ZlckNsb3NlICgNCj4gPj4+ICsgIElOICBVSU5UMTYgIFNlc3Npb25JZA0KPiA+Pj4gKyAg KQ0KPiA+Pj4gK3sNCj4gPj4+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPj4+ICsgIFVJTlQ4 ICAgICAgICpTZW5kRGF0YTsNCj4gPj4+ICsgIFVJTlQzMiAgICAgIFNlbmREYXRhU2l6ZTsNCj4g Pj4+ICsgIFVJTlQzMiAgICAgIFJlc3BvbnNlRGF0YVNpemU7DQo+ID4+PiArDQo+ID4+PiArICAv Lw0KPiA+Pj4gKyAgLy8gRm9ybWF0IHNlbmQgZGF0YQ0KPiA+Pj4gKyAgLy8NCj4gPj4+ICsgIFNl bmREYXRhU2l6ZSA9IHNpemVvZg0KPiA+PiAoSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfQ0xPU0Vf U0VORF9EQVRBKTsNCj4gPj4+ICsgIFNlbmREYXRhICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKFNl bmREYXRhU2l6ZSk7DQo+ID4+PiArICBpZiAoU2VuZERhdGEgPT0gTlVMTCkgew0KPiA+Pj4gKyAg ICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ID4+ PiArICAoKElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX0NMT1NFX1NFTkRfREFUQSAqKVNlbmREYXRh KS0NCj4gPj4+IFNlc3Npb25JZCA9IFNlc3Npb25JZDsNCj4gPj4+ICsNCj4gPj4+ICsgIFJlc3Bv bnNlRGF0YVNpemUgPSAwOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgU3RhdHVzID0gSXBtaUJsb2JUcmFu c2ZlclNlbmRJcG1pDQo+IChJcG1pQmxvYlRyYW5zZmVyU3ViY29tbWFuZENsb3NlLA0KPiA+PiBT ZW5kRGF0YSwgU2VuZERhdGFTaXplLCBOVUxMLCAmUmVzcG9uc2VEYXRhU2l6ZSk7DQo+ID4+PiAr DQo+ID4+PiArICBGcmVlUG9vbCAoU2VuZERhdGEpOw0KPiA+Pj4gKyAgcmV0dXJuIFN0YXR1czsN Cj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArLyoqDQo+ID4+PiArICBAcGFyYW1baW5dICAgICAg ICAgQmxvYklkICAgICAgICAgIFRoZSBCbG9iSWQgdG8gYmUgZGVsZXRlZA0KPiA+Pj4gKw0KPiA+ Pj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICBUaGUgYmxvYiB3YXMgZGVs ZXRlZC4NCj4gPj4+ICsgIEByZXR2YWwgT3RoZXIgICAgICAgICAgICAgICAgICAgICAgQW4gZXJy b3Igb2NjdXJyZWQNCj4gPj4+ICsqKi8NCj4gPj4+ICtFRklfU1RBVFVTDQo+ID4+PiArSXBtaUJs b2JUcmFuc2ZlckRlbGV0ZSAoDQo+ID4+PiArICBJTiAgQ0hBUjggICpCbG9iSWQNCj4gPj4+ICsg ICkNCj4gPj4+ICt7DQo+ID4+PiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ID4+PiArICBVSU5U OCAgICAgICAqU2VuZERhdGE7DQo+ID4+PiArICBVSU5UMzIgICAgICBTZW5kRGF0YVNpemU7DQo+ ID4+PiArICBVSU5UMzIgICAgICBSZXNwb25zZURhdGFTaXplOw0KPiA+Pj4gKw0KPiA+Pj4gKyAg Ly8NCj4gPj4+ICsgIC8vIEZvcm1hdCBzZW5kIGRhdGENCj4gPj4+ICsgIC8vDQo+ID4+PiArICBT ZW5kRGF0YVNpemUgPSBzaXplb2YNCj4gPj4gKElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX0RFTEVU RV9TRU5EX0RBVEEpOw0KPiA+Pj4gKyAgU2VuZERhdGEgICAgID0gQWxsb2NhdGVaZXJvUG9vbCAo U2VuZERhdGFTaXplKTsNCj4gPj4+ICsgIGlmIChTZW5kRGF0YSA9PSBOVUxMKSB7DQo+ID4+PiAr ICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPj4+ICsgIH0NCj4gPj4+ICsNCj4g Pj4+ICsgIEFzY2lpU3RyQ3B5UyAoKChJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9ERUxFVEVfU0VO RF9EQVRBDQo+ID4+ICopU2VuZERhdGEpLT5CbG9iSWQsIEFzY2lpU3RyTGVuIChCbG9iSWQpLCBC bG9iSWQpOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgUmVzcG9uc2VEYXRhU2l6ZSA9IDA7DQo+ID4+PiAr DQo+ID4+PiArICBTdGF0dXMgPSBJcG1pQmxvYlRyYW5zZmVyU2VuZElwbWkNCj4gPj4gKElwbWlC bG9iVHJhbnNmZXJTdWJjb21tYW5kRGVsZXRlLCBTZW5kRGF0YSwgU2VuZERhdGFTaXplLCBOVUxM LA0KPiA+PiAmUmVzcG9uc2VEYXRhU2l6ZSk7DQo+ID4+PiArDQo+ID4+PiArICBGcmVlUG9vbCAo U2VuZERhdGEpOw0KPiA+Pj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ ID4+PiArLyoqDQo+ID4+PiArICBAcGFyYW1baW5dICAgICAgICAgQmxvYklkICAgICAgICAgIFRo ZSBCbG9iIElEIHRvIGdhdGhlciBzdGF0aXN0aWNzIGZvcg0KPiA+Pj4gKyAgQHBhcmFtW291dF0g ICAgICAgIEJsb2JTdGF0ZSAgICAgICBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYmxvYg0KPiA+ Pj4gKyAgQHBhcmFtW291dF0gICAgICAgIFNpemUgICAgICAgICAgICBTaXplIGluIGJ5dGVzIG9m IHRoZSBibG9iDQo+ID4+PiArICBAcGFyYW1bb3V0XSAgICAgICAgTWV0YWRhdGFMZW5ndGggIExl bmd0aCBvZiB0aGUgb3B0aW9uYWwgbWV0YWRhdGENCj4gPj4+ICsgIEBwYXJhbVtvdXRdICAgICAg ICBNZXRhZGF0YSAgICAgICAgT3B0aW9uYWwgYmxvYi1zcGVjaWZpYyBtZXRhZGF0YQ0KPiA+Pj4g Kw0KPiA+Pj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICBUaGUgYmxvYiBz dGF0aXN0aWNzIHdlcmUgc3VjY2Vzc2Z1bGx5DQo+ID4+IGdhdGhlcmVkLg0KPiA+Pj4gKyAgQHJl dHZhbCBPdGhlciAgICAgICAgICAgICAgICAgICAgICBBbiBlcnJvciBvY2N1cnJlZA0KPiA+Pj4g KyoqLw0KPiA+Pj4gK0VGSV9TVEFUVVMNCj4gPj4+ICtJcG1pQmxvYlRyYW5zZmVyU3RhdCAoDQo+ ID4+PiArICBJTiAgQ0hBUjggICAqQmxvYklkLA0KPiA+Pj4gKyAgT1VUIFVJTlQxNiAgKkJsb2JT dGF0ZSwNCj4gPj4+ICsgIE9VVCBVSU5UMzIgICpTaXplLA0KPiA+Pj4gKyAgT1VUIFVJTlQ4ICAg Kk1ldGFkYXRhTGVuZ3RoLA0KPiA+Pj4gKyAgT1VUIFVJTlQ4ICAgKk1ldGFkYXRhDQo+ID4+PiAr ICApDQo+ID4+PiArew0KPiA+Pj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+Pj4gKyAgVUlO VDggICAgICAgKlNlbmREYXRhOw0KPiA+Pj4gKyAgVUlOVDggICAgICAgKlJlc3BvbnNlRGF0YTsN Cj4gPj4+ICsgIFVJTlQzMiAgICAgIFNlbmREYXRhU2l6ZTsNCj4gPj4+ICsgIFVJTlQzMiAgICAg IFJlc3BvbnNlRGF0YVNpemU7DQo+ID4+PiArDQo+ID4+PiArICBpZiAoTWV0YWRhdGEgPT0gTlVM TCkgew0KPiA+Pj4gKyAgICBBU1NFUlQgKEZBTFNFKTsNCj4gPj4+ICsgICAgcmV0dXJuIEVGSV9B Qk9SVEVEOw0KPiA+Pj4gKyAgfQ0KPiA+Pj4gKw0KPiA+Pj4gKyAgUmVzcG9uc2VEYXRhU2l6ZSA9 IHNpemVvZg0KPiA+PiAoSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfU1RBVF9SRVNQT05TRSk7DQo+ ID4+PiArICBSZXNwb25zZURhdGEgICAgID0gQWxsb2NhdGVaZXJvUG9vbCAoUmVzcG9uc2VEYXRh U2l6ZSk7DQo+ID4+PiArICBpZiAoUmVzcG9uc2VEYXRhID09IE5VTEwpIHsNCj4gPj4+ICsgICAg cmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+Pj4gKyAgfQ0KPiA+Pj4gKw0KPiA+Pj4g KyAgLy8NCj4gPj4+ICsgIC8vIEZvcm1hdCBzZW5kIGRhdGENCj4gPj4+ICsgIC8vDQo+ID4+PiAr ICBTZW5kRGF0YVNpemUgPSBzaXplb2YNCj4gPj4gKElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX1NU QVRfU0VORF9EQVRBKTsNCj4gPj4+ICsgIFNlbmREYXRhICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wg KFNlbmREYXRhU2l6ZSk7DQo+ID4+PiArICBpZiAoU2VuZERhdGEgPT0gTlVMTCkgew0KPiA+Pj4g KyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ ID4+PiArICBBc2NpaVN0ckNweVMgKCgoSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfU1RBVF9TRU5E X0RBVEENCj4gPj4gKilTZW5kRGF0YSktPkJsb2JJZCwgSVBNSV9PRU1fQkxPQl9NQVhfREFUQV9Q RVJfUEFDS0VULA0KPiBCbG9iSWQpOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgU3RhdHVzID0gSXBtaUJs b2JUcmFuc2ZlclNlbmRJcG1pDQo+IChJcG1pQmxvYlRyYW5zZmVyU3ViY29tbWFuZFN0YXQsDQo+ ID4+IFNlbmREYXRhLCBTZW5kRGF0YVNpemUsIChVSU5UOCAqKVJlc3BvbnNlRGF0YSwgJlJlc3Bv bnNlRGF0YVNpemUpOw0KPiA+Pj4gKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPj4+ ICsgICAgKkJsb2JTdGF0ZSAgICAgID0gKChJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9TVEFUX1JF U1BPTlNFDQo+ID4+ICopUmVzcG9uc2VEYXRhKS0+QmxvYlN0YXRlOw0KPiA+Pj4gKyAgICAqU2l6 ZSAgICAgICAgICAgPSAoKElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX1NUQVRfUkVTUE9OU0UNCj4g Pj4gKilSZXNwb25zZURhdGEpLT5TaXplOw0KPiA+Pj4gKyAgICAqTWV0YWRhdGFMZW5ndGggPQ0K PiAoKElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX1NUQVRfUkVTUE9OU0UNCj4gPj4gKilSZXNwb25z ZURhdGEpLT5NZXRhRGF0YUxlbjsNCj4gPj4+ICsNCj4gPj4+ICsgICAgQ29weU1lbSAoJk1ldGFk YXRhLA0KPiA+PiAmKChJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9TVEFUX1JFU1BPTlNFICopUmVz cG9uc2VEYXRhKS0NCj4gPj4+IE1ldGFEYXRhLCBzaXplb2YgKCgoSVBNSV9CTE9CX1RSQU5TRkVS X0JMT0JfU1RBVF9SRVNQT05TRQ0KPiA+PiAqKVJlc3BvbnNlRGF0YSktPk1ldGFEYXRhKSk7DQo+ ID4+PiArICB9DQo+ID4+PiArDQo+ID4+PiArICBGcmVlUG9vbCAoUmVzcG9uc2VEYXRhKTsNCj4g Pj4+ICsgIEZyZWVQb29sIChTZW5kRGF0YSk7DQo+ID4+PiArICByZXR1cm4gU3RhdHVzOw0KPiA+ Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICsvKioNCj4gPj4+ICsgIEBwYXJhbVtpbl0gICAgICAgICBT ZXNzaW9uSWQgICAgICAgVGhlIElEIG9mIHRoZSBzZXNzaW9uIHRvIGdhdGhlciBzdGF0aXN0aWNz DQo+IGZvcg0KPiA+Pj4gKyAgQHBhcmFtW291dF0gICAgICAgIEJsb2JTdGF0ZSAgICAgICBUaGUg Y3VycmVudCBzdGF0ZSBvZiB0aGUgYmxvYg0KPiA+Pj4gKyAgQHBhcmFtW291dF0gICAgICAgIFNp emUgICAgICAgICAgICBTaXplIGluIGJ5dGVzIG9mIHRoZSBibG9iDQo+ID4+PiArICBAcGFyYW1b b3V0XSAgICAgICAgTWV0YWRhdGFMZW5ndGggIExlbmd0aCBvZiB0aGUgb3B0aW9uYWwgbWV0YWRh dGENCj4gPj4+ICsgIEBwYXJhbVtvdXRdICAgICAgICBNZXRhZGF0YSAgICAgICAgT3B0aW9uYWwg YmxvYi1zcGVjaWZpYyBtZXRhZGF0YQ0KPiA+Pj4gKw0KPiA+Pj4gKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICAgICAgICBUaGUgYmxvYiBzdGF0aXN0aWNzIHdlcmUgc3VjY2Vzc2Z1bGx5 DQo+ID4+IGdhdGhlcmVkLg0KPiA+Pj4gKyAgQHJldHZhbCBPdGhlciAgICAgICAgICAgICAgICAg ICAgICBBbiBlcnJvciBvY2N1cnJlZA0KPiA+Pj4gKyoqLw0KPiA+Pj4gK0VGSV9TVEFUVVMNCj4g Pj4+ICtJcG1pQmxvYlRyYW5zZmVyU2Vzc2lvblN0YXQgKA0KPiA+Pj4gKyAgSU4gIFVJTlQxNiAg U2Vzc2lvbklkLA0KPiA+Pj4gKyAgT1VUIFVJTlQxNiAgKkJsb2JTdGF0ZSwNCj4gPj4+ICsgIE9V VCBVSU5UMzIgICpTaXplLA0KPiA+Pj4gKyAgT1VUIFVJTlQ4ICAgKk1ldGFkYXRhTGVuZ3RoLA0K PiA+Pj4gKyAgT1VUIFVJTlQ4ICAgKk1ldGFkYXRhDQo+ID4+PiArICApDQo+ID4+PiArew0KPiA+ Pj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+Pj4gKyAgVUlOVDggICAgICAgKlNlbmREYXRh Ow0KPiA+Pj4gKyAgVUlOVDggICAgICAgKlJlc3BvbnNlRGF0YTsNCj4gPj4+ICsgIFVJTlQzMiAg ICAgIFNlbmREYXRhU2l6ZTsNCj4gPj4+ICsgIFVJTlQzMiAgICAgIFJlc3BvbnNlRGF0YVNpemU7 DQo+ID4+PiArDQo+ID4+PiArICBpZiAoKEJsb2JTdGF0ZSA9PSBOVUxMKSB8fCAoU2l6ZSA9PSBO VUxMKSB8fCAoTWV0YWRhdGFMZW5ndGggPT0gTlVMTCkNCj4gPj4gfHwgKE1ldGFkYXRhID09IE5V TEwpKSB7DQo+ID4+PiArICAgIEFTU0VSVCAoRkFMU0UpOw0KPiA+Pj4gKyAgICByZXR1cm4gRUZJ X0FCT1JURUQ7DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ID4+PiArICBSZXNwb25zZURhdGFTaXpl ID0gc2l6ZW9mDQo+ID4+IChJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9TVEFUX1JFU1BPTlNFKTsN Cj4gPj4+ICsgIFJlc3BvbnNlRGF0YSAgICAgPSBBbGxvY2F0ZVplcm9Qb29sIChSZXNwb25zZURh dGFTaXplKTsNCj4gPj4+ICsgIGlmIChSZXNwb25zZURhdGEgPT0gTlVMTCkgew0KPiA+Pj4gKyAg ICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ID4+ PiArICAvLw0KPiA+Pj4gKyAgLy8gRm9ybWF0IHNlbmQgZGF0YQ0KPiA+Pj4gKyAgLy8NCj4gPj4+ ICsgIFNlbmREYXRhU2l6ZSA9IHNpemVvZg0KPiA+PiAoSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0Jf U0VTU0lPTl9TVEFUX1NFTkRfREFUQSk7DQo+ID4+PiArICBTZW5kRGF0YSAgICAgPSBBbGxvY2F0 ZVplcm9Qb29sIChTZW5kRGF0YVNpemUpOw0KPiA+Pj4gKyAgaWYgKFNlbmREYXRhID09IE5VTEwp IHsNCj4gPj4+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+Pj4gKyAgfQ0K PiA+Pj4gKw0KPiA+Pj4gKyAgKChJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9TRVNTSU9OX1NUQVRf U0VORF9EQVRBDQo+ID4+ICopU2VuZERhdGEpLT5TZXNzaW9uSWQgPSBTZXNzaW9uSWQ7DQo+ID4+ PiArDQo+ID4+PiArICBTdGF0dXMgPSBJcG1pQmxvYlRyYW5zZmVyU2VuZElwbWkNCj4gPj4gKElw bWlCbG9iVHJhbnNmZXJTdWJjb21tYW5kU2Vzc2lvblN0YXQsIFNlbmREYXRhLCBTZW5kRGF0YVNp emUsDQo+IChVSU5UOA0KPiA+PiAqKVJlc3BvbnNlRGF0YSwgJlJlc3BvbnNlRGF0YVNpemUpOw0K PiA+Pj4gKw0KPiA+Pj4gKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPj4+ICsgICAg KkJsb2JTdGF0ZSAgICAgID0NCj4gPj4gKChJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9TRVNTSU9O X1NUQVRfUkVTUE9OU0UNCj4gPj4gKilSZXNwb25zZURhdGEpLT5CbG9iU3RhdGU7DQo+ID4+PiAr ICAgICpTaXplICAgICAgICAgICA9DQo+ICgoSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfU0VTU0lP Tl9TVEFUX1JFU1BPTlNFDQo+ID4+ICopUmVzcG9uc2VEYXRhKS0+U2l6ZTsNCj4gPj4+ICsgICAg Kk1ldGFkYXRhTGVuZ3RoID0NCj4gPj4gKChJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9TRVNTSU9O X1NUQVRfUkVTUE9OU0UNCj4gPj4gKilSZXNwb25zZURhdGEpLT5NZXRhRGF0YUxlbjsNCj4gPj4+ ICsNCj4gPj4+ICsgICAgQ29weU1lbSAoJk1ldGFkYXRhLA0KPiA+PiAmKChJUE1JX0JMT0JfVFJB TlNGRVJfQkxPQl9TRVNTSU9OX1NUQVRfUkVTUE9OU0UNCj4gPj4gKilSZXNwb25zZURhdGEpLT5N ZXRhRGF0YSwgc2l6ZW9mDQo+ID4+ICgoKElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX1NFU1NJT05f U1RBVF9SRVNQT05TRQ0KPiA+PiAqKVJlc3BvbnNlRGF0YSktPk1ldGFEYXRhKSk7DQo+ID4+PiAr ICB9DQo+ID4+PiArDQo+ID4+PiArICBGcmVlUG9vbCAoUmVzcG9uc2VEYXRhKTsNCj4gPj4+ICsg IEZyZWVQb29sIChTZW5kRGF0YSk7DQo+ID4+PiArICByZXR1cm4gU3RhdHVzOw0KPiA+Pj4gK30N Cj4gPj4+ICsNCj4gPj4+ICsvKioNCj4gPj4+ICsgIEBwYXJhbVtpbl0gICAgICAgICBTZXNzaW9u SWQgICAgICAgVGhlIElEIG9mIHRoZSBzZXNzaW9uIHRvIHdyaXRlIG1ldGFkYXRhDQo+IGZvcg0K PiA+Pj4gKyAgQHBhcmFtW2luXSAgICAgICAgIE9mZnNldCAgICAgICAgICBUaGUgb2Zmc2V0IG9m IHRoZSBtZXRhZGF0YSB0byB3cml0ZSB0bw0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgICAgICAgIERh dGEgICAgICAgICAgICBUaGUgZGF0YSB0byB3cml0ZSB0byB0aGUgbWV0YWRhdGENCj4gPj4+ICsN Cj4gPj4+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgVGhlIGJsb2IgbWV0 YWRhdGEgd2FzIHN1Y2Nlc3NmdWxseQ0KPiB3cml0dGVuLg0KPiA+Pj4gKyAgQHJldHZhbCBPdGhl ciAgICAgICAgICAgICAgICAgICAgICBBbiBlcnJvciBvY2N1cnJlZA0KPiA+Pj4gKyoqLw0KPiA+ Pj4gK0VGSV9TVEFUVVMNCj4gPj4+ICtJcG1pQmxvYlRyYW5zZmVyV3JpdGVNZXRhICgNCj4gPj4+ ICsgIElOICBVSU5UMTYgIFNlc3Npb25JZCwNCj4gPj4+ICsgIElOICBVSU5UMzIgIE9mZnNldCwN Cj4gPj4+ICsgIElOICBVSU5UOCAgICpEYXRhLA0KPiA+Pj4gKyAgSU4gIFVJTlQzMiAgV3JpdGVM ZW5ndGgNCj4gPj4+ICsgICkNCj4gPj4+ICt7DQo+ID4+PiArICBFRklfU1RBVFVTICBTdGF0dXM7 DQo+ID4+PiArICBVSU5UOCAgICAgICAqU2VuZERhdGE7DQo+ID4+PiArICBVSU5UMzIgICAgICBT ZW5kRGF0YVNpemU7DQo+ID4+PiArICBVSU5UMzIgICAgICBSZXNwb25zZURhdGFTaXplOw0KPiA+ Pj4gKw0KPiA+Pj4gKyAgLy8NCj4gPj4+ICsgIC8vIEZvcm1hdCBzZW5kIGRhdGENCj4gPj4+ICsg IC8vDQo+ID4+PiArICBTZW5kRGF0YVNpemUgPSBzaXplb2YNCj4gPj4gKElQTUlfQkxPQl9UUkFO U0ZFUl9CTE9CX1dSSVRFX1NFTkRfREFUQSk7DQo+ID4+PiArICBTZW5kRGF0YSAgICAgPSBBbGxv Y2F0ZVplcm9Qb29sIChTZW5kRGF0YVNpemUpOw0KPiA+Pj4gKyAgaWYgKFNlbmREYXRhID09IE5V TEwpIHsNCj4gPj4+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+Pj4gKyAg fQ0KPiA+Pj4gKw0KPiA+Pj4gKyAgKChJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9XUklURV9TRU5E X0RBVEEgKilTZW5kRGF0YSktDQo+ID4+PiBTZXNzaW9uSWQgPSBTZXNzaW9uSWQ7DQo+ID4+PiAr ICAoKElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX1dSSVRFX1NFTkRfREFUQSAqKVNlbmREYXRhKS0N Cj4gPj4+IE9mZnNldCAgICA9IE9mZnNldDsNCj4gPj4+ICsgIENvcHlNZW0gKCgoSVBNSV9CTE9C X1RSQU5TRkVSX0JMT0JfV1JJVEVfU0VORF9EQVRBDQo+ID4+ICopU2VuZERhdGEpLT5EYXRhLCBE YXRhLCBzaXplb2YgKFVJTlQ4KSAqIFdyaXRlTGVuZ3RoKTsNCj4gPj4+ICsNCj4gPj4+ICsgIFJl c3BvbnNlRGF0YVNpemUgPSAwOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgU3RhdHVzID0gSXBtaUJsb2JU cmFuc2ZlclNlbmRJcG1pDQo+ID4+IChJcG1pQmxvYlRyYW5zZmVyU3ViY29tbWFuZFdyaXRlTWV0 YSwgU2VuZERhdGEsIFNlbmREYXRhU2l6ZSwNCj4gTlVMTCwNCj4gPj4gJlJlc3BvbnNlRGF0YVNp emUpOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgRnJlZVBvb2wgKFNlbmREYXRhKTsNCj4gPj4+ICsgIHJl dHVybiBTdGF0dXM7DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gKy8qKg0KPiA+Pj4gKyAgVGhp cyBpcyB0aGUgZGVjbGFyYXRpb24gb2YgYW4gRUZJIGltYWdlIGVudHJ5IHBvaW50LiBUaGlzIGVu dHJ5IHBvaW50IGlzDQo+ID4+PiArICB0aGUgc2FtZSBmb3IgVUVGSSBBcHBsaWNhdGlvbnMsIFVF RkkgT1MgTG9hZGVycywgYW5kIFVFRkkgRHJpdmVycw0KPiA+PiBpbmNsdWRpbmcNCj4gPj4+ICsg IGJvdGggZGV2aWNlIGRyaXZlcnMgYW5kIGJ1cyBkcml2ZXJzLg0KPiA+Pj4gKw0KPiA+Pj4gKyAg QHBhcmFtW2luXSAgSW1hZ2VIYW5kbGUgICAgICAgVGhlIGZpcm13YXJlIGFsbG9jYXRlZCBoYW5k bGUgZm9yIHRoZQ0KPiBVRUZJDQo+ID4+IGltYWdlLg0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgU3lz dGVtVGFibGUgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRkkgU3lzdGVtIFRhYmxlLg0KPiA+Pj4g Kw0KPiA+Pj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIG9wZXJhdGlvbiBj b21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+Pj4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAg ICAgICAgQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZC4NCj4gPj4+ICsNCj4gPj4+ICsqKi8N Cj4gPj4+ICtFRklfU1RBVFVTDQo+ID4+PiArRUZJQVBJDQo+ID4+PiArSXBtaUJsb2JUcmFuc2Zl ckR4ZURyaXZlckVudHJ5UG9pbnQgKA0KPiA+Pj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgSW1h Z2VIYW5kbGUsDQo+ID4+PiArICBJTiBFRklfU1lTVEVNX1RBQkxFICAqU3lzdGVtVGFibGUNCj4g Pj4+ICsgICkNCj4gPj4+ICt7DQo+ID4+PiArICByZXR1cm4gZ0JTLT5JbnN0YWxsTXVsdGlwbGVQ cm90b2NvbEludGVyZmFjZXMgKA0KPiA+Pj4gKyAgICAgICAgICAgICAgICAmSW1hZ2VIYW5kbGUs DQo+ID4+PiArICAgICAgICAgICAgICAgICZnRWRraWlJcG1pQmxvYlRyYW5zZmVyUHJvdG9jb2xH dWlkLA0KPiA+Pj4gKyAgICAgICAgICAgICAgICAoVk9JRCAqKSZtSXBtaUJsb2JUcmFuc2ZlciwN Cj4gPj4+ICsgICAgICAgICAgICAgICAgTlVMTA0KPiA+Pj4gKyAgICAgICAgICAgICAgICApOw0K PiA+Pj4gK30NCj4gPj4+IGRpZmYgLS1naXQNCj4gPj4NCj4gYS9GZWF0dXJlcy9NYW5hZ2VhYmls aXR5UGtnL1VuaXZlcnNhbC9JcG1pQmxvYlRyYW5zZmVyRHhlL1VuaXRUZXN0L0lwbWkNCj4gPj4g QmxvYlRyYW5zZmVyVGVzdFVuaXRUZXN0cy5jDQo+ID4+DQo+IGIvRmVhdHVyZXMvTWFuYWdlYWJp bGl0eVBrZy9Vbml2ZXJzYWwvSXBtaUJsb2JUcmFuc2ZlckR4ZS9Vbml0VGVzdC9JcG0NCj4gPj4g aUJsb2JUcmFuc2ZlclRlc3RVbml0VGVzdHMuYw0KPiA+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gPj4+IGluZGV4IDAwMDAwMDAwMDAuLmYzMjY0Njc5MjINCj4gPj4+IC0tLSAvZGV2L251bGwN Cj4gPj4+ICsrKw0KPiA+Pg0KPiBiL0ZlYXR1cmVzL01hbmFnZWFiaWxpdHlQa2cvVW5pdmVyc2Fs L0lwbWlCbG9iVHJhbnNmZXJEeGUvVW5pdFRlc3QvSXBtDQo+ID4+IGlCbG9iVHJhbnNmZXJUZXN0 VW5pdFRlc3RzLmMNCj4gPj4+IEBAIC0wLDAgKzEsMTExMyBAQA0KPiA+Pj4gKy8qKiBAZmlsZQ0K PiA+Pj4gKyoNCj4gPj4+ICsqICBDb3B5cmlnaHQgKGMpIDIwMjIsIE5WSURJQSBDT1JQT1JBVElP Ti4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gPj4gMjAyMw0KPiA+Pj4gKyoNCj4gPj4+ICsqICBT UERYLUZpbGVDb3B5cmlnaHRUZXh0OiBDb3B5cmlnaHQgKGMpIDIwMjIgTlZJRElBIENPUlBPUkFU SU9OICYNCj4gPj4gQUZGSUxJQVRFUw0KPiA+Pj4gKyogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4+PiArKg0KPiA+Pj4gKyoqLw0KPiA+Pj4gKyNpbmNs dWRlIDxzdGRhcmcuaD4NCj4gPj4+ICsjaW5jbHVkZSA8c3RkZGVmLmg+DQo+ID4+PiArI2luY2x1 ZGUgPHNldGptcC5oPg0KPiA+Pj4gKyNpbmNsdWRlIDxzdGRpbnQuaD4NCj4gPj4+ICsjaW5jbHVk ZSA8Y21vY2thLmg+DQo+ID4+PiArDQo+ID4+PiArI2luY2x1ZGUgPFVlZmkuaD4NCj4gPj4+ICsj aW5jbHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQo+ID4+PiArI2luY2x1ZGUgPExpYnJh cnkvRGVidWdMaWIuaD4NCj4gPj4+ICsjaW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9u TGliLmg+DQo+ID4+PiArI2luY2x1ZGUgPExpYnJhcnkvSG9zdEJhc2VkVGVzdFN0dWJMaWIvSXBt aVN0dWJMaWIuaD4NCj4gPj4+ICsNCj4gPj4+ICsjaW5jbHVkZSA8TGlicmFyeS9Vbml0VGVzdExp Yi5oPg0KPiA+Pj4gKyNpbmNsdWRlIDxQcm90b2NvbC9JcG1pQmxvYlRyYW5zZmVyLmg+DQo+ID4+ PiArI2luY2x1ZGUgIi4uL0ludGVybmFsSXBtaUJsb2JUcmFuc2Zlci5oIg0KPiA+Pj4gKw0KPiA+ Pj4gKyNkZWZpbmUgVU5JVF9URVNUX05BTUUgICAgICJJUE1JIEJsb2IgVHJhbnNmZXIgVW5pdCBU ZXN0cyINCj4gPj4+ICsjZGVmaW5lIFVOSVRfVEVTVF9WRVJTSU9OICAiMS4wIg0KPiA+Pj4gKw0K PiA+Pj4gK1VJTlQ4ICBJbnZhbGlkQ29tcGxldGlvbltdID0gew0KPiA+Pj4gKyAgMHhDMCwgICAg ICAgICAgICAgLy8gQ29tcGxldGlvbkNvZGUNCj4gPj4+ICsgIDB4Q0YsIDB4QzIsIDB4MDAsIC8v IE9wZW5CTUMgT0VODQo+ID4+PiArfTsNCj4gPj4+ICsjZGVmaW5lIElOVkFMSURfQ09NUExFVElP Tl9TSVpFICA0ICogc2l6ZW9mKFVJTlQ4KQ0KPiA+Pj4gKw0KPiA+Pj4gK1VJTlQ4ICBOb0RhdGFS ZXNwb25zZVtdID0gew0KPiA+Pj4gKyAgMHgwMCwgICAgICAgICAgICAgLy8gQ29tcGxldGlvbkNv ZGUNCj4gPj4+ICsgIDB4Q0YsIDB4QzIsIDB4MDAsIC8vIE9wZW5CTUMgT0VODQo+ID4+PiArfTsN Cj4gPj4+ICsjZGVmaW5lIE5PX0RBVEFfUkVTUE9OU0VfU0laRSAgNCAqIHNpemVvZihVSU5UOCkN Cj4gPj4+ICsNCj4gPj4+ICtVSU5UOCAgQmFkT2VuUmVzcG9uc2VbXSA9IHsNCj4gPj4+ICsgIDB4 MDAsICAgICAgICAgICAgIC8vIENvbXBsZXRpb25Db2RlDQo+ID4+PiArICAweEZGLCAweEMyLCAw eDAwLCAvLyBXcm9uZyBPRU4NCj4gPj4+ICt9Ow0KPiA+Pj4gKyNkZWZpbmUgQkFEX09FTl9SRVNQ T05TRV9TSVpFICA0ICogc2l6ZW9mKFVJTlQ4KQ0KPiA+Pj4gKw0KPiA+Pj4gK1VJTlQ4ICBCYWRD cmNSZXNwb25zZVtdID0gew0KPiA+Pj4gKyAgMHgwMCwgICAgICAgICAgICAgICAgICAgLy8gQ29t cGxldGlvbkNvZGUNCj4gPj4+ICsgIDB4Q0YsIDB4QzIsIDB4MDAsICAgICAgIC8vIE9wZW5CTUMg T0VODQo+ID4+PiArICAweDAwLCAweDAwLCAgICAgICAgICAgICAvLyBDUkMNCj4gPj4+ICsgIDB4 MDEsIDB4MDAsIDB4MDAsIDB4MDAsIC8vIERhdGENCj4gPj4+ICt9Ow0KPiA+Pj4gKyNkZWZpbmUg QkFEX0NSQ19SRVNQT05TRV9TSVpFICAxMCAqIHNpemVvZihVSU5UOCkNCj4gPj4+ICsNCj4gPj4+ ICtVSU5UOCAgVmFsaWROb0RhdGFSZXNwb25zZVtdID0gew0KPiA+Pj4gKyAgMHgwMCwgICAgICAg ICAgICAgLy8gQ29tcGxldGlvbkNvZGUNCj4gPj4+ICsgIDB4Q0YsIDB4QzIsIDB4MDAsIC8vIE9w ZW5CTUMgT0VODQo+ID4+PiArfTsNCj4gPj4+ICsNCj4gPj4+ICsjZGVmaW5lIFZBTElEX05PREFU QV9SRVNQT05TRV9TSVpFICA0ICogc2l6ZW9mKFVJTlQ4KQ0KPiA+Pj4gKw0KPiA+Pj4gKy8qKg0K PiA+Pj4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAgICBbT3B0aW9uYWxdIEFuIG9wdGlvbmFsIHBh cmFtZXRlciB0aGF0IGVuYWJsZXM6DQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIDEp IHRlc3QtY2FzZSByZXVzZSB3aXRoIHZhcmllZCBwYXJhbWV0ZXJzIGFuZA0KPiA+Pj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAyKSB0ZXN0LWNhc2UgcmUtZW50cnkgZm9yIFRhcmdldCB0ZXN0 cyB0aGF0IG5lZWQgYQ0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICByZWJvb3QuICBU aGlzIHBhcmFtZXRlciBpcyBhIFZPSUQqIGFuZCBpdCBpcyB0aGUNCj4gPj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHRlc3QgYXV0aG9yIHRvIGVuc3Vy ZSB0aGF0IHRoZQ0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50cyBhcmUg d2VsbCB1bmRlcnN0b29kIGJ5IGFsbCB0ZXN0IGNhc2VzIHRoYXQgbWF5DQo+ID4+PiArICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN1bWUgaXQuDQo+ID4+PiArICBAcmV0dmFsICBVTklUX1RF U1RfUEFTU0VEICAgICAgICAgICAgIFRoZSBVbml0IHRlc3QgaGFzIGNvbXBsZXRlZCBhbmQNCj4g dGhlDQo+ID4+IHRlc3QNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2FzZSB3YXMgc3VjY2Vzc2Z1bC4NCj4gPj4+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9F UlJPUl9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNhc2UgYXNzZXJ0aW9uIGhhcw0KPiA+PiBmYWlsZWQu DQo+ID4+PiArKiovDQo+ID4+PiArVU5JVF9URVNUX1NUQVRVUw0KPiA+Pj4gK0VGSUFQSQ0KPiA+ Pj4gK0dvb2RDcmMgKA0KPiA+Pj4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4g Pj4+ICsgICkNCj4gPj4+ICt7DQo+ID4+PiArICBVSU5UOCAgIERhdGFbNV0gPSB7IDB4MTIsIDB4 MzQsIDB4NTYsIDB4NzgsIDB4OTAgfTsNCj4gPj4+ICsgIFVJTlROICAgRGF0YVNpemU7DQo+ID4+ PiArICBVSU5UMTYgIENyYzsNCj4gPj4+ICsNCj4gPj4+ICsgIERhdGFTaXplID0gc2l6ZW9mIChE YXRhKTsNCj4gPj4+ICsNCj4gPj4+ICsgIENyYyA9IENhbGN1bGF0ZUNyYzE2IChEYXRhLCBEYXRh U2l6ZSk7DQo+ID4+PiArDQo+ID4+PiArICBVVF9BU1NFUlRfRVFVQUwgKENyYywgMHhCOTI4KTsN Cj4gPj4+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4g Pj4+ICsvKioNCj4gPj4+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAgW09wdGlvbmFsXSBBbiBv cHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBlbmFibGVzOg0KPiA+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAxKSB0ZXN0LWNhc2UgcmV1c2Ugd2l0aCB2YXJpZWQgcGFyYW1ldGVycyBhbmQNCj4g Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgMikgdGVzdC1jYXNlIHJlLWVudHJ5IGZvciBU YXJnZXQgdGVzdHMgdGhhdCBuZWVkIGENCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg cmVib290LiAgVGhpcyBwYXJhbWV0ZXIgaXMgYSBWT0lEKiBhbmQgaXQgaXMgdGhlDQo+ID4+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSB0ZXN0IGF1dGhv ciB0byBlbnN1cmUgdGhhdCB0aGUNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29u dGVudHMgYXJlIHdlbGwgdW5kZXJzdG9vZCBieSBhbGwgdGVzdCBjYXNlcyB0aGF0IG1heQ0KPiA+ Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lIGl0Lg0KPiA+Pj4gKyAgQHJldHZh bCAgVU5JVF9URVNUX1BBU1NFRCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0IGhhcyBjb21wbGV0 ZWQgYW5kDQo+IHRoZQ0KPiA+PiB0ZXN0DQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNhc2Ugd2FzIHN1Y2Nlc3NmdWwuDQo+ID4+PiArICBAcmV0dmFsICBV TklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlIGFzc2VydGlvbiBoYXMNCj4g Pj4gZmFpbGVkLg0KPiA+Pj4gKyoqLw0KPiA+Pj4gK1VOSVRfVEVTVF9TVEFUVVMNCj4gPj4+ICtF RklBUEkNCj4gPj4+ICtCYWRDcmMgKA0KPiA+Pj4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENv bnRleHQNCj4gPj4+ICsgICkNCj4gPj4+ICt7DQo+ID4+PiArICBVSU5UOCAgIERhdGFbNV0gPSB7 IDB4MTIsIDB4MzQsIDB4NTYsIDB4NzgsIDB4OTAgfTsNCj4gPj4+ICsgIFVJTlROICAgRGF0YVNp emU7DQo+ID4+PiArICBVSU5UMTYgIENyYzsNCj4gPj4+ICsNCj4gPj4+ICsgIERhdGFTaXplID0g c2l6ZW9mIChEYXRhKTsNCj4gPj4+ICsNCj4gPj4+ICsgIENyYyA9IENhbGN1bGF0ZUNyYzE2IChE YXRhLCBEYXRhU2l6ZSk7DQo+ID4+PiArDQo+ID4+PiArICBVVF9BU1NFUlRfTk9UX0VRVUFMIChD cmMsIDB4MzQwOSk7DQo+ID4+PiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gPj4+ICt9 DQo+ID4+PiArDQo+ID4+PiArLyoqDQo+ID4+PiArICBAcGFyYW1baW5dICBDb250ZXh0ICAgIFtP cHRpb25hbF0gQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgZW5hYmxlczoNCj4gPj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgMSkgdGVzdC1jYXNlIHJldXNlIHdpdGggdmFyaWVkIHBhcmFt ZXRlcnMgYW5kDQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIDIpIHRlc3QtY2FzZSBy ZS1lbnRyeSBmb3IgVGFyZ2V0IHRlc3RzIHRoYXQgbmVlZCBhDQo+ID4+PiArICAgICAgICAgICAg ICAgICAgICAgICAgIHJlYm9vdC4gIFRoaXMgcGFyYW1ldGVyIGlzIGEgVk9JRCogYW5kIGl0IGlz IHRoZQ0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eSBvZiB0 aGUgdGVzdCBhdXRob3IgdG8gZW5zdXJlIHRoYXQgdGhlDQo+ID4+PiArICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnRlbnRzIGFyZSB3ZWxsIHVuZGVyc3Rvb2QgYnkgYWxsIHRlc3QgY2FzZXMg dGhhdCBtYXkNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSBpdC4NCj4g Pj4+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVz dCBoYXMgY29tcGxldGVkIGFuZA0KPiB0aGUNCj4gPj4gdGVzdA0KPiA+Pj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHdhcyBzdWNjZXNzZnVsLg0KPiA+Pj4g KyAgQHJldHZhbCAgVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEICBBIHRlc3QgY2FzZSBhc3Nl cnRpb24gaGFzDQo+ID4+IGZhaWxlZC4NCj4gPj4+ICsqKi8NCj4gPj4+ICtVTklUX1RFU1RfU1RB VFVTDQo+ID4+PiArRUZJQVBJDQo+ID4+PiArU2VuZElwbWlCYWRDb21wbGV0aW9uICgNCj4gPj4+ ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQo+ID4+PiArICApDQo+ID4+PiArew0K PiA+Pj4gKyAgVk9JRCAgICAgICAgKlJlc3BvbnNlRGF0YTsNCj4gPj4+ICsgIFVJTlQzMiAgICAg ICpSZXNwb25zZURhdGFTaXplOw0KPiA+Pj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+Pj4g KyAgVk9JRCAgICAgICAgKk1vY2tSZXNwb25zZVJlc3VsdHMgPSBOVUxMOw0KPiA+Pj4gKw0KPiA+ Pj4gKyAgTW9ja1Jlc3BvbnNlUmVzdWx0cyA9IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bvb2wNCj4g Pj4gKElOVkFMSURfQ09NUExFVElPTl9TSVpFKTsNCj4gPj4+ICsgIFJlc3BvbnNlRGF0YVNpemUg ICAgPSAoVUlOVDMyICopQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChVSU5UMzIpKTsNCj4gPj4+ ICsgIENvcHlNZW0gKE1vY2tSZXNwb25zZVJlc3VsdHMsICZJbnZhbGlkQ29tcGxldGlvbiwNCj4g Pj4gSU5WQUxJRF9DT01QTEVUSU9OX1NJWkUpOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgTW9ja0lwbWlT dWJtaXRDb21tYW5kICgoVUlOVDggKilNb2NrUmVzcG9uc2VSZXN1bHRzLA0KPiA+PiBJTlZBTElE X0NPTVBMRVRJT05fU0laRSwgRUZJX1NVQ0NFU1MpOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgUmVzcG9u c2VEYXRhID0gKFVJTlQ4ICopQWxsb2NhdGVaZXJvUG9vbCAoKlJlc3BvbnNlRGF0YVNpemUpOw0K PiA+Pj4gKyAgU3RhdHVzICAgICAgID0gSXBtaUJsb2JUcmFuc2ZlclNlbmRJcG1pDQo+ID4+IChJ cG1pQmxvYlRyYW5zZmVyU3ViY29tbWFuZEdldENvdW50LCBOVUxMLCAwLCBSZXNwb25zZURhdGEs DQo+ID4+IFJlc3BvbnNlRGF0YVNpemUpOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgVVRfQVNTRVJUX1NU QVRVU19FUVVBTCAoU3RhdHVzLCBFRklfUFJPVE9DT0xfRVJST1IpOw0KPiA+Pj4gKyAgRnJlZVBv b2wgKE1vY2tSZXNwb25zZVJlc3VsdHMpOw0KPiA+Pj4gKyAgRnJlZVBvb2wgKFJlc3BvbnNlRGF0 YVNpemUpOw0KPiA+Pj4gKyAgRnJlZVBvb2wgKFJlc3BvbnNlRGF0YSk7DQo+ID4+PiArICByZXR1 cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArLyoqDQo+ID4+ PiArICBAcGFyYW1baW5dICBDb250ZXh0ICAgIFtPcHRpb25hbF0gQW4gb3B0aW9uYWwgcGFyYW1l dGVyIHRoYXQgZW5hYmxlczoNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgMSkgdGVz dC1jYXNlIHJldXNlIHdpdGggdmFyaWVkIHBhcmFtZXRlcnMgYW5kDQo+ID4+PiArICAgICAgICAg ICAgICAgICAgICAgICAgIDIpIHRlc3QtY2FzZSByZS1lbnRyeSBmb3IgVGFyZ2V0IHRlc3RzIHRo YXQgbmVlZCBhDQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIHJlYm9vdC4gIFRoaXMg cGFyYW1ldGVyIGlzIGEgVk9JRCogYW5kIGl0IGlzIHRoZQ0KPiA+Pj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICByZXNwb25zaWJpbGl0eSBvZiB0aGUgdGVzdCBhdXRob3IgdG8gZW5zdXJlIHRo YXQgdGhlDQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzIGFyZSB3ZWxs IHVuZGVyc3Rvb2QgYnkgYWxsIHRlc3QgY2FzZXMgdGhhdCBtYXkNCj4gPj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3VtZSBpdC4NCj4gPj4+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9Q QVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVzdCBoYXMgY29tcGxldGVkIGFuZA0KPiB0aGUN Cj4gPj4gdGVzdA0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjYXNlIHdhcyBzdWNjZXNzZnVsLg0KPiA+Pj4gKyAgQHJldHZhbCAgVU5JVF9URVNUX0VSUk9S X1RFU1RfRkFJTEVEICBBIHRlc3QgY2FzZSBhc3NlcnRpb24gaGFzDQo+ID4+IGZhaWxlZC4NCj4g Pj4+ICsqKi8NCj4gPj4+ICtVTklUX1RFU1RfU1RBVFVTDQo+ID4+PiArRUZJQVBJDQo+ID4+PiAr U2VuZElwbWlOb0RhdGFSZXNwb25zZSAoDQo+ID4+PiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAg Q29udGV4dA0KPiA+Pj4gKyAgKQ0KPiA+Pj4gK3sNCj4gPj4+ICsgIFZPSUQgICAgICAgICpSZXNw b25zZURhdGE7DQo+ID4+PiArICBVSU5UMzIgICAgICAqUmVzcG9uc2VEYXRhU2l6ZTsNCj4gPj4+ ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPj4+ICsgIFZPSUQgICAgICAgICpNb2NrUmVzcG9u c2VSZXN1bHRzID0gTlVMTDsNCj4gPj4+ICsNCj4gPj4+ICsgIE1vY2tSZXNwb25zZVJlc3VsdHMg PSAoVUlOVDggKilBbGxvY2F0ZVplcm9Qb29sDQo+ID4+IChOT19EQVRBX1JFU1BPTlNFX1NJWkUp Ow0KPiA+Pj4gKyAgUmVzcG9uc2VEYXRhU2l6ZSAgICA9IChVSU5UMzIgKilBbGxvY2F0ZVplcm9Q b29sIChzaXplb2YgKFVJTlQzMikpOw0KPiA+Pj4gKyAgQ29weU1lbSAoTW9ja1Jlc3BvbnNlUmVz dWx0cywgJk5vRGF0YVJlc3BvbnNlLA0KPiA+PiBOT19EQVRBX1JFU1BPTlNFX1NJWkUpOw0KPiA+ Pj4gKw0KPiA+Pj4gKyAgU3RhdHVzID0gTW9ja0lwbWlTdWJtaXRDb21tYW5kICgoVUlOVDggKilN b2NrUmVzcG9uc2VSZXN1bHRzLA0KPiA+PiBOT19EQVRBX1JFU1BPTlNFX1NJWkUsIEVGSV9TVUND RVNTKTsNCj4gPj4+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPj4+ICsgICAgcmV0 dXJuIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRDsNCj4gPj4+ICsgIH0NCj4gPj4+ICsNCj4g Pj4+ICsgIFJlc3BvbnNlRGF0YSA9IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZg0K PiAoTm9EYXRhUmVzcG9uc2UpKTsNCj4gPj4+ICsgIFN0YXR1cyAgICAgICA9IElwbWlCbG9iVHJh bnNmZXJTZW5kSXBtaQ0KPiA+PiAoSXBtaUJsb2JUcmFuc2ZlclN1YmNvbW1hbmRHZXRDb3VudCwg TlVMTCwgMCwgUmVzcG9uc2VEYXRhLA0KPiA+PiBSZXNwb25zZURhdGFTaXplKTsNCj4gPj4+ICsN Cj4gPj4+ICsgIFVUX0FTU0VSVF9TVEFUVVNfRVFVQUwgKFN0YXR1cywgRUZJX1NVQ0NFU1MpOw0K PiA+Pj4gKyAgVVRfQVNTRVJUX0VRVUFMICgqUmVzcG9uc2VEYXRhU2l6ZSwgMCk7DQo+ID4+PiAr ICBGcmVlUG9vbCAoTW9ja1Jlc3BvbnNlUmVzdWx0cyk7DQo+ID4+PiArICBGcmVlUG9vbCAoUmVz cG9uc2VEYXRhU2l6ZSk7DQo+ID4+PiArICBGcmVlUG9vbCAoUmVzcG9uc2VEYXRhKTsNCj4gPj4+ ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICsv KioNCj4gPj4+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAgW09wdGlvbmFsXSBBbiBvcHRpb25h bCBwYXJhbWV0ZXIgdGhhdCBlbmFibGVzOg0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAxKSB0ZXN0LWNhc2UgcmV1c2Ugd2l0aCB2YXJpZWQgcGFyYW1ldGVycyBhbmQNCj4gPj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgMikgdGVzdC1jYXNlIHJlLWVudHJ5IGZvciBUYXJnZXQg dGVzdHMgdGhhdCBuZWVkIGENCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgcmVib290 LiAgVGhpcyBwYXJhbWV0ZXIgaXMgYSBWT0lEKiBhbmQgaXQgaXMgdGhlDQo+ID4+PiArICAgICAg ICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSB0ZXN0IGF1dGhvciB0byBl bnN1cmUgdGhhdCB0aGUNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHMg YXJlIHdlbGwgdW5kZXJzdG9vZCBieSBhbGwgdGVzdCBjYXNlcyB0aGF0IG1heQ0KPiA+Pj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lIGl0Lg0KPiA+Pj4gKyAgQHJldHZhbCAgVU5J VF9URVNUX1BBU1NFRCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0IGhhcyBjb21wbGV0ZWQgYW5k DQo+IHRoZQ0KPiA+PiB0ZXN0DQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNhc2Ugd2FzIHN1Y2Nlc3NmdWwuDQo+ID4+PiArICBAcmV0dmFsICBVTklUX1RF U1RfRVJST1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlIGFzc2VydGlvbiBoYXMNCj4gPj4gZmFp bGVkLg0KPiA+Pj4gKyoqLw0KPiA+Pj4gK1VOSVRfVEVTVF9TVEFUVVMNCj4gPj4+ICtFRklBUEkN Cj4gPj4+ICtTZW5kSXBtaUJhZE9lblJlc3BvbnNlICgNCj4gPj4+ICsgIElOIFVOSVRfVEVTVF9D T05URVhUICBDb250ZXh0DQo+ID4+PiArICApDQo+ID4+PiArew0KPiA+Pj4gKyAgVk9JRCAgICAg ICAgKlJlc3BvbnNlRGF0YTsNCj4gPj4+ICsgIFVJTlQzMiAgICAgICpSZXNwb25zZURhdGFTaXpl Ow0KPiA+Pj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+Pj4gKyAgVk9JRCAgICAgICAgKk1v Y2tSZXNwb25zZVJlc3VsdHMgPSBOVUxMOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgTW9ja1Jlc3BvbnNl UmVzdWx0cyA9IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bvb2wNCj4gPj4gKEJBRF9PRU5fUkVTUE9O U0VfU0laRSk7DQo+ID4+PiArICBSZXNwb25zZURhdGFTaXplICAgID0gKFVJTlQzMiAqKUFsbG9j YXRlWmVyb1Bvb2wgKHNpemVvZiAoVUlOVDMyKSk7DQo+ID4+PiArICBDb3B5TWVtIChNb2NrUmVz cG9uc2VSZXN1bHRzLCAmQmFkT2VuUmVzcG9uc2UsDQo+ID4+IEJBRF9PRU5fUkVTUE9OU0VfU0la RSk7DQo+ID4+PiArDQo+ID4+PiArICBTdGF0dXMgPSBNb2NrSXBtaVN1Ym1pdENvbW1hbmQgKChV SU5UOCAqKU1vY2tSZXNwb25zZVJlc3VsdHMsDQo+ID4+IEJBRF9PRU5fUkVTUE9OU0VfU0laRSwg RUZJX1NVQ0NFU1MpOw0KPiA+Pj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+Pj4g KyAgICByZXR1cm4gVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEOw0KPiA+Pj4gKyAgfQ0KPiA+ Pj4gKw0KPiA+Pj4gKyAgUmVzcG9uc2VEYXRhID0gKFVJTlQ4ICopQWxsb2NhdGVaZXJvUG9vbCAo c2l6ZW9mDQo+IChCYWRPZW5SZXNwb25zZSkpOw0KPiA+Pj4gKyAgU3RhdHVzICAgICAgID0gSXBt aUJsb2JUcmFuc2ZlclNlbmRJcG1pDQo+ID4+IChJcG1pQmxvYlRyYW5zZmVyU3ViY29tbWFuZEdl dENvdW50LCBOVUxMLCAwLCBSZXNwb25zZURhdGEsDQo+ID4+IFJlc3BvbnNlRGF0YVNpemUpOw0K PiA+Pj4gKw0KPiA+Pj4gKyAgVVRfQVNTRVJUX1NUQVRVU19FUVVBTCAoU3RhdHVzLCBFRklfUFJP VE9DT0xfRVJST1IpOw0KPiA+Pj4gKyAgRnJlZVBvb2wgKE1vY2tSZXNwb25zZVJlc3VsdHMpOw0K PiA+Pj4gKyAgRnJlZVBvb2wgKFJlc3BvbnNlRGF0YVNpemUpOw0KPiA+Pj4gKyAgRnJlZVBvb2wg KFJlc3BvbnNlRGF0YSk7DQo+ID4+PiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gPj4+ ICt9DQo+ID4+PiArDQo+ID4+PiArLyoqDQo+ID4+PiArICBAcGFyYW1baW5dICBDb250ZXh0ICAg IFtPcHRpb25hbF0gQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgZW5hYmxlczoNCj4gPj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgMSkgdGVzdC1jYXNlIHJldXNlIHdpdGggdmFyaWVkIHBh cmFtZXRlcnMgYW5kDQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIDIpIHRlc3QtY2Fz ZSByZS1lbnRyeSBmb3IgVGFyZ2V0IHRlc3RzIHRoYXQgbmVlZCBhDQo+ID4+PiArICAgICAgICAg ICAgICAgICAgICAgICAgIHJlYm9vdC4gIFRoaXMgcGFyYW1ldGVyIGlzIGEgVk9JRCogYW5kIGl0 IGlzIHRoZQ0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eSBv ZiB0aGUgdGVzdCBhdXRob3IgdG8gZW5zdXJlIHRoYXQgdGhlDQo+ID4+PiArICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnRlbnRzIGFyZSB3ZWxsIHVuZGVyc3Rvb2QgYnkgYWxsIHRlc3QgY2Fz ZXMgdGhhdCBtYXkNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSBpdC4N Cj4gPj4+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQg dGVzdCBoYXMgY29tcGxldGVkIGFuZA0KPiB0aGUNCj4gPj4gdGVzdA0KPiA+Pj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHdhcyBzdWNjZXNzZnVsLg0KPiA+ Pj4gKyAgQHJldHZhbCAgVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEICBBIHRlc3QgY2FzZSBh c3NlcnRpb24gaGFzDQo+ID4+IGZhaWxlZC4NCj4gPj4+ICsqKi8NCj4gPj4+ICtVTklUX1RFU1Rf U1RBVFVTDQo+ID4+PiArRUZJQVBJDQo+ID4+PiArU2VuZElwbWlCYWRDcmNSZXNwb25zZSAoDQo+ ID4+PiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4dA0KPiA+Pj4gKyAgKQ0KPiA+Pj4g K3sNCj4gPj4+ICsgIFZPSUQgICAgICAgICpSZXNwb25zZURhdGE7DQo+ID4+PiArICBVSU5UMzIg ICAgICAqUmVzcG9uc2VEYXRhU2l6ZTsNCj4gPj4+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4g Pj4+ICsgIFZPSUQgICAgICAgICpNb2NrUmVzcG9uc2VSZXN1bHRzID0gTlVMTDsNCj4gPj4+ICsN Cj4gPj4+ICsgIE1vY2tSZXNwb25zZVJlc3VsdHMgPSAoVUlOVDggKilBbGxvY2F0ZVplcm9Qb29s IChzaXplb2YNCj4gPj4gKEJBRF9DUkNfUkVTUE9OU0VfU0laRSkpOw0KPiA+Pj4gKyAgUmVzcG9u c2VEYXRhU2l6ZSAgICA9IChVSU5UMzIgKilBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YgKFVJTlQz MikpOw0KPiA+Pj4gKyAgQ29weU1lbSAoTW9ja1Jlc3BvbnNlUmVzdWx0cywgJkJhZENyY1Jlc3Bv bnNlLA0KPiA+PiBCQURfQ1JDX1JFU1BPTlNFX1NJWkUpOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgU3Rh dHVzID0gTW9ja0lwbWlTdWJtaXRDb21tYW5kICgoVUlOVDggKilNb2NrUmVzcG9uc2VSZXN1bHRz LA0KPiA+PiBCQURfQ1JDX1JFU1BPTlNFX1NJWkUsIEVGSV9TVUNDRVNTKTsNCj4gPj4+ICsgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPj4+ICsgICAgcmV0dXJuIFVOSVRfVEVTVF9FUlJP Ul9URVNUX0ZBSUxFRDsNCj4gPj4+ICsgIH0NCj4gPj4+ICsNCj4gPj4+ICsgIFJlc3BvbnNlRGF0 YSA9IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAoQmFkQ3JjUmVzcG9uc2UpKTsN Cj4gPj4+ICsgIFN0YXR1cyAgICAgICA9IElwbWlCbG9iVHJhbnNmZXJTZW5kSXBtaQ0KPiA+PiAo SXBtaUJsb2JUcmFuc2ZlclN1YmNvbW1hbmRHZXRDb3VudCwgTlVMTCwgMCwgUmVzcG9uc2VEYXRh LA0KPiA+PiBSZXNwb25zZURhdGFTaXplKTsNCj4gPj4+ICsNCj4gPj4+ICsgIFVUX0FTU0VSVF9T VEFUVVNfRVFVQUwgKFN0YXR1cywgRUZJX0NSQ19FUlJPUik7DQo+ID4+PiArICBGcmVlUG9vbCAo TW9ja1Jlc3BvbnNlUmVzdWx0cyk7DQo+ID4+PiArICBGcmVlUG9vbCAoUmVzcG9uc2VEYXRhU2l6 ZSk7DQo+ID4+PiArICBGcmVlUG9vbCAoUmVzcG9uc2VEYXRhKTsNCj4gPj4+ICsgIHJldHVybiBV TklUX1RFU1RfUEFTU0VEOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICtVSU5UOCAgVmFsaWRH ZXRDb3VudFJlc3BvbnNlW10gPSB7DQo+ID4+PiArICAweDAwLCAgICAgICAgICAgICAgICAgICAv LyBDb21wbGV0aW9uQ29kZQ0KPiA+Pj4gKyAgMHhDRiwgMHhDMiwgMHgwMCwgICAgICAgLy8gT3Bl bkJNQyBPRU4NCj4gPj4+ICsgIDB4QTQsIDB4NzgsICAgICAgICAgICAgIC8vIENSQw0KPiA+Pj4g KyAgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gRGF0YQ0KPiA+Pj4gK307DQo+ID4+PiArI2Rl ZmluZSBWQUxJRF9HRVRfQ09VTlRfUkVTUE9OU0VfU0laRSAgMTAgKiBzaXplb2YoVUlOVDgpDQo+ ID4+PiArDQo+ID4+PiArLyoqDQo+ID4+PiArICBAcGFyYW1baW5dICBDb250ZXh0ICAgIFtPcHRp b25hbF0gQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgZW5hYmxlczoNCj4gPj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgMSkgdGVzdC1jYXNlIHJldXNlIHdpdGggdmFyaWVkIHBhcmFtZXRl cnMgYW5kDQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIDIpIHRlc3QtY2FzZSByZS1l bnRyeSBmb3IgVGFyZ2V0IHRlc3RzIHRoYXQgbmVlZCBhDQo+ID4+PiArICAgICAgICAgICAgICAg ICAgICAgICAgIHJlYm9vdC4gIFRoaXMgcGFyYW1ldGVyIGlzIGEgVk9JRCogYW5kIGl0IGlzIHRo ZQ0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eSBvZiB0aGUg dGVzdCBhdXRob3IgdG8gZW5zdXJlIHRoYXQgdGhlDQo+ID4+PiArICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnRlbnRzIGFyZSB3ZWxsIHVuZGVyc3Rvb2QgYnkgYWxsIHRlc3QgY2FzZXMgdGhh dCBtYXkNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSBpdC4NCj4gPj4+ ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVzdCBo YXMgY29tcGxldGVkIGFuZA0KPiB0aGUNCj4gPj4gdGVzdA0KPiA+Pj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHdhcyBzdWNjZXNzZnVsLg0KPiA+Pj4gKyAg QHJldHZhbCAgVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEICBBIHRlc3QgY2FzZSBhc3NlcnRp b24gaGFzDQo+ID4+IGZhaWxlZC4NCj4gPj4+ICsqKi8NCj4gPj4+ICtVTklUX1RFU1RfU1RBVFVT DQo+ID4+PiArRUZJQVBJDQo+ID4+PiArU2VuZElwbWlWYWxpZENvdW50UmVzcG9uc2UgKA0KPiA+ Pj4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4gPj4+ICsgICkNCj4gPj4+ICt7 DQo+ID4+PiArICBVSU5UOCAgICAgICAqUmVzcG9uc2VEYXRhOw0KPiA+Pj4gKyAgVUlOVDMyICAg ICAgKlJlc3BvbnNlRGF0YVNpemU7DQo+ID4+PiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ID4+ PiArICBWT0lEICAgICAgICAqTW9ja1Jlc3BvbnNlUmVzdWx0cyA9IE5VTEw7DQo+ID4+PiArDQo+ ID4+PiArICBNb2NrUmVzcG9uc2VSZXN1bHRzID0gKFVJTlQ4ICopQWxsb2NhdGVaZXJvUG9vbCAo c2l6ZW9mDQo+ID4+IChWQUxJRF9HRVRfQ09VTlRfUkVTUE9OU0VfU0laRSkpOw0KPiA+Pj4gKyAg UmVzcG9uc2VEYXRhU2l6ZSAgICA9IChVSU5UMzIgKilBbGxvY2F0ZVplcm9Qb29sIChzaXplb2Yg KFVJTlQzMikpOw0KPiA+Pj4gKyAgQ29weU1lbSAoTW9ja1Jlc3BvbnNlUmVzdWx0cywgJlZhbGlk R2V0Q291bnRSZXNwb25zZSwNCj4gPj4gVkFMSURfR0VUX0NPVU5UX1JFU1BPTlNFX1NJWkUpOw0K PiA+Pj4gKw0KPiA+Pj4gKyAgU3RhdHVzID0gTW9ja0lwbWlTdWJtaXRDb21tYW5kICgoVUlOVDgg KilNb2NrUmVzcG9uc2VSZXN1bHRzLA0KPiA+PiBWQUxJRF9HRVRfQ09VTlRfUkVTUE9OU0VfU0la RSwgRUZJX1NVQ0NFU1MpOw0KPiA+Pj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ Pj4gKyAgICByZXR1cm4gVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEOw0KPiA+Pj4gKyAgfQ0K PiA+Pj4gKw0KPiA+Pj4gKyAgUmVzcG9uc2VEYXRhID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9m IChWYWxpZEdldENvdW50UmVzcG9uc2UpKTsNCj4gPj4+ICsgIFN0YXR1cyAgICAgICA9IElwbWlC bG9iVHJhbnNmZXJTZW5kSXBtaQ0KPiA+PiAoSXBtaUJsb2JUcmFuc2ZlclN1YmNvbW1hbmRHZXRD b3VudCwgTlVMTCwgMCwgUmVzcG9uc2VEYXRhLA0KPiA+PiBSZXNwb25zZURhdGFTaXplKTsNCj4g Pj4+ICsNCj4gPj4+ICsgIFVUX0FTU0VSVF9TVEFUVVNfRVFVQUwgKFN0YXR1cywgRUZJX1NVQ0NF U1MpOw0KPiA+Pj4gKyAgRnJlZVBvb2wgKE1vY2tSZXNwb25zZVJlc3VsdHMpOw0KPiA+Pj4gKyAg RnJlZVBvb2wgKFJlc3BvbnNlRGF0YVNpemUpOw0KPiA+Pj4gKyAgRnJlZVBvb2wgKFJlc3BvbnNl RGF0YSk7DQo+ID4+PiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gPj4+ICt9DQo+ID4+ PiArDQo+ID4+PiArLyoqDQo+ID4+PiArICBAcGFyYW1baW5dICBDb250ZXh0ICAgIFtPcHRpb25h bF0gQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgZW5hYmxlczoNCj4gPj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgMSkgdGVzdC1jYXNlIHJldXNlIHdpdGggdmFyaWVkIHBhcmFtZXRlcnMg YW5kDQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIDIpIHRlc3QtY2FzZSByZS1lbnRy eSBmb3IgVGFyZ2V0IHRlc3RzIHRoYXQgbmVlZCBhDQo+ID4+PiArICAgICAgICAgICAgICAgICAg ICAgICAgIHJlYm9vdC4gIFRoaXMgcGFyYW1ldGVyIGlzIGEgVk9JRCogYW5kIGl0IGlzIHRoZQ0K PiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eSBvZiB0aGUgdGVz dCBhdXRob3IgdG8gZW5zdXJlIHRoYXQgdGhlDQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnRlbnRzIGFyZSB3ZWxsIHVuZGVyc3Rvb2QgYnkgYWxsIHRlc3QgY2FzZXMgdGhhdCBt YXkNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSBpdC4NCj4gPj4+ICsg IEByZXR2YWwgIFVOSVRfVEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVzdCBoYXMg Y29tcGxldGVkIGFuZA0KPiB0aGUNCj4gPj4gdGVzdA0KPiA+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHdhcyBzdWNjZXNzZnVsLg0KPiA+Pj4gKyAgQHJl dHZhbCAgVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEICBBIHRlc3QgY2FzZSBhc3NlcnRpb24g aGFzDQo+ID4+IGZhaWxlZC4NCj4gPj4+ICsqKi8NCj4gPj4+ICtVTklUX1RFU1RfU1RBVFVTDQo+ ID4+PiArRUZJQVBJDQo+ID4+PiArR2V0Q291bnRWYWxpZENvdW50UmVzcG9uc2UgKA0KPiA+Pj4g KyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4gPj4+ICsgICkNCj4gPj4+ICt7DQo+ ID4+PiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ID4+PiArICBVSU5UMzIgICAgICBDb3VudDsN Cj4gPj4+ICsgIFZPSUQgICAgICAgICpNb2NrUmVzcG9uc2VSZXN1bHRzID0gTlVMTDsNCj4gPj4+ ICsNCj4gPj4+ICsgIENvdW50ID0gMDsNCj4gPj4+ICsNCj4gPj4+ICsgIE1vY2tSZXNwb25zZVJl c3VsdHMgPSAoVUlOVDggKilBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YNCj4gPj4gKFZBTElEX0dF VF9DT1VOVF9SRVNQT05TRV9TSVpFKSk7DQo+ID4+PiArICBDb3B5TWVtIChNb2NrUmVzcG9uc2VS ZXN1bHRzLCAmVmFsaWRHZXRDb3VudFJlc3BvbnNlLA0KPiA+PiBWQUxJRF9HRVRfQ09VTlRfUkVT UE9OU0VfU0laRSk7DQo+ID4+PiArDQo+ID4+PiArICBTdGF0dXMgPSBNb2NrSXBtaVN1Ym1pdENv bW1hbmQgKChVSU5UOCAqKU1vY2tSZXNwb25zZVJlc3VsdHMsDQo+ID4+IFZBTElEX0dFVF9DT1VO VF9SRVNQT05TRV9TSVpFLCBFRklfU1VDQ0VTUyk7DQo+ID4+PiArICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ID4+PiArICAgIHJldHVybiBVTklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQ7 DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ID4+PiArICBTdGF0dXMgPSBJcG1pQmxvYlRyYW5zZmVy R2V0Q291bnQgKCZDb3VudCk7DQo+ID4+PiArDQo+ID4+PiArICBVVF9BU1NFUlRfU1RBVFVTX0VR VUFMIChTdGF0dXMsIEVGSV9TVUNDRVNTKTsNCj4gPj4+ICsgIFVUX0FTU0VSVF9FUVVBTCAoQ291 bnQsIDEpOw0KPiA+Pj4gKyAgRnJlZVBvb2wgKE1vY2tSZXNwb25zZVJlc3VsdHMpOw0KPiA+Pj4g KyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNTRUQ7DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gK1VJ TlQ4ICBWYWxpZEVudW1lcmF0ZVJlc3BvbnNlW10gPSB7DQo+ID4+PiArICAweDAwLCAgICAgICAg ICAgICAgICAgICAvLyBDb21wbGV0aW9uQ29kZQ0KPiA+Pj4gKyAgMHhDRiwgMHhDMiwgMHgwMCwg ICAgICAgLy8gT3BlbkJNQyBPRU4NCj4gPj4+ICsgIDB4ODEsIDB4MTMsICAgICAgICAgICAgIC8v IENSQw0KPiA+Pj4gKyAgMHgyRiwgMHg3MywgMHg2RCwgMHg2MiwgLy8gRGF0YSA9ICIvc21iaW9z Ig0KPiA+Pj4gKyAgMHg2OSwgMHg2RiwgMHg3MywgMHgwMCwNCj4gPj4+ICt9Ow0KPiA+Pj4gKyNk ZWZpbmUgVkFMSURfRU5VTUVSQVRFX1JFU1BPTlNFX1NJWkUgIDE0ICogc2l6ZW9mKFVJTlQ4KQ0K PiA+Pj4gKw0KPiA+Pj4gKy8qKg0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAgICBbT3B0 aW9uYWxdIEFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IGVuYWJsZXM6DQo+ID4+PiArICAgICAg ICAgICAgICAgICAgICAgICAgIDEpIHRlc3QtY2FzZSByZXVzZSB3aXRoIHZhcmllZCBwYXJhbWV0 ZXJzIGFuZA0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAyKSB0ZXN0LWNhc2UgcmUt ZW50cnkgZm9yIFRhcmdldCB0ZXN0cyB0aGF0IG5lZWQgYQ0KPiA+Pj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICByZWJvb3QuICBUaGlzIHBhcmFtZXRlciBpcyBhIFZPSUQqIGFuZCBpdCBpcyB0 aGUNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHkgb2YgdGhl IHRlc3QgYXV0aG9yIHRvIGVuc3VyZSB0aGF0IHRoZQ0KPiA+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICBjb250ZW50cyBhcmUgd2VsbCB1bmRlcnN0b29kIGJ5IGFsbCB0ZXN0IGNhc2VzIHRo YXQgbWF5DQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUgaXQuDQo+ID4+ PiArICBAcmV0dmFsICBVTklUX1RFU1RfUEFTU0VEICAgICAgICAgICAgIFRoZSBVbml0IHRlc3Qg aGFzIGNvbXBsZXRlZCBhbmQNCj4gdGhlDQo+ID4+IHRlc3QNCj4gPj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSB3YXMgc3VjY2Vzc2Z1bC4NCj4gPj4+ICsg IEByZXR2YWwgIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNhc2UgYXNzZXJ0 aW9uIGhhcw0KPiA+PiBmYWlsZWQuDQo+ID4+PiArKiovDQo+ID4+PiArVU5JVF9URVNUX1NUQVRV Uw0KPiA+Pj4gK0VGSUFQSQ0KPiA+Pj4gK0VudW1lcmF0ZVZhbGlkUmVzcG9uc2UgKA0KPiA+Pj4g KyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4gPj4+ICsgICkNCj4gPj4+ICt7DQo+ ID4+PiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ID4+PiArICBDSEFSOCAgICAgICAqQmxvYklk Ow0KPiA+Pj4gKyAgVk9JRCAgICAgICAgKk1vY2tSZXNwb25zZVJlc3VsdHMgPSBOVUxMOw0KPiA+ Pj4gKw0KPiA+Pj4gKyAgTW9ja1Jlc3BvbnNlUmVzdWx0cyA9IChVSU5UOCAqKUFsbG9jYXRlWmVy b1Bvb2wgKHNpemVvZg0KPiA+PiAoVkFMSURfRU5VTUVSQVRFX1JFU1BPTlNFX1NJWkUpKTsNCj4g Pj4+ICsgIENvcHlNZW0gKE1vY2tSZXNwb25zZVJlc3VsdHMsICZWYWxpZEVudW1lcmF0ZVJlc3Bv bnNlLA0KPiA+PiBWQUxJRF9FTlVNRVJBVEVfUkVTUE9OU0VfU0laRSk7DQo+ID4+PiArDQo+ID4+ PiArICBTdGF0dXMgPSBNb2NrSXBtaVN1Ym1pdENvbW1hbmQgKChVSU5UOCAqKU1vY2tSZXNwb25z ZVJlc3VsdHMsDQo+ID4+IFZBTElEX0VOVU1FUkFURV9SRVNQT05TRV9TSVpFLCBFRklfU1VDQ0VT Uyk7DQo+ID4+PiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4+PiArICAgIHJldHVy biBVTklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQ7DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ID4+ PiArICBCbG9iSWQgPSBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YgKENIQVI4KSAqDQo+ID4+IElQ TUlfT0VNX0JMT0JfTUFYX0RBVEFfUEVSX1BBQ0tFVCk7DQo+ID4+PiArDQo+ID4+PiArICBTdGF0 dXMgPSBJcG1pQmxvYlRyYW5zZmVyRW51bWVyYXRlICgwLCBCbG9iSWQpOw0KPiA+Pj4gKw0KPiA+ Pj4gKyAgVVRfQVNTRVJUX1NUQVRVU19FUVVBTCAoU3RhdHVzLCBFRklfU1VDQ0VTUyk7DQo+ID4+ PiArICBVVF9BU1NFUlRfTUVNX0VRVUFMIChCbG9iSWQsICIvc21iaW9zIiwgNyk7DQo+ID4+PiAr ICBGcmVlUG9vbCAoTW9ja1Jlc3BvbnNlUmVzdWx0cyk7DQo+ID4+PiArICBGcmVlUG9vbCAoQmxv YklkKTsNCj4gPj4+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiA+Pj4gK30NCj4gPj4+ ICsNCj4gPj4+ICsvKioNCj4gPj4+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAgW09wdGlvbmFs XSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBlbmFibGVzOg0KPiA+Pj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAxKSB0ZXN0LWNhc2UgcmV1c2Ugd2l0aCB2YXJpZWQgcGFyYW1ldGVycyBh bmQNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgMikgdGVzdC1jYXNlIHJlLWVudHJ5 IGZvciBUYXJnZXQgdGVzdHMgdGhhdCBuZWVkIGENCj4gPj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgcmVib290LiAgVGhpcyBwYXJhbWV0ZXIgaXMgYSBWT0lEKiBhbmQgaXQgaXMgdGhlDQo+ ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSB0ZXN0 IGF1dGhvciB0byBlbnN1cmUgdGhhdCB0aGUNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgY29udGVudHMgYXJlIHdlbGwgdW5kZXJzdG9vZCBieSBhbGwgdGVzdCBjYXNlcyB0aGF0IG1h eQ0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lIGl0Lg0KPiA+Pj4gKyAg QHJldHZhbCAgVU5JVF9URVNUX1BBU1NFRCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0IGhhcyBj b21wbGV0ZWQgYW5kDQo+IHRoZQ0KPiA+PiB0ZXN0DQo+ID4+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugd2FzIHN1Y2Nlc3NmdWwuDQo+ID4+PiArICBAcmV0 dmFsICBVTklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlIGFzc2VydGlvbiBo YXMNCj4gPj4gZmFpbGVkLg0KPiA+Pj4gKyoqLw0KPiA+Pj4gK1VOSVRfVEVTVF9TVEFUVVMNCj4g Pj4+ICtFRklBUEkNCj4gPj4+ICtFbnVtZXJhdGVJbnZhbGlkQnVmZmVyICgNCj4gPj4+ICsgIElO IFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQo+ID4+PiArICApDQo+ID4+PiArew0KPiA+Pj4g KyAgQ0hBUjggICAgICAgKkJsb2JJZDsNCj4gPj4+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4g Pj4+ICsgIFZPSUQgICAgICAgICpNb2NrUmVzcG9uc2VSZXN1bHRzID0gTlVMTDsNCj4gPj4+ICsN Cj4gPj4+ICsgIE1vY2tSZXNwb25zZVJlc3VsdHMgPSAoVUlOVDggKilBbGxvY2F0ZVplcm9Qb29s IChzaXplb2YNCj4gPj4gKFZBTElEX0VOVU1FUkFURV9SRVNQT05TRV9TSVpFKSk7DQo+ID4+PiAr ICBDb3B5TWVtIChNb2NrUmVzcG9uc2VSZXN1bHRzLCAmVmFsaWRFbnVtZXJhdGVSZXNwb25zZSwN Cj4gPj4gVkFMSURfRU5VTUVSQVRFX1JFU1BPTlNFX1NJWkUpOw0KPiA+Pj4gKw0KPiA+Pj4gKyAg U3RhdHVzID0gTW9ja0lwbWlTdWJtaXRDb21tYW5kICgoVUlOVDggKilNb2NrUmVzcG9uc2VSZXN1 bHRzLA0KPiA+PiBWQUxJRF9FTlVNRVJBVEVfUkVTUE9OU0VfU0laRSwgRUZJX1NVQ0NFU1MpOw0K PiA+Pj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+Pj4gKyAgICByZXR1cm4gVU5J VF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEOw0KPiA+Pj4gKyAgfQ0KPiA+Pj4gKw0KPiA+Pj4gKyAg QmxvYklkID0gTlVMTDsNCj4gPj4+ICsNCj4gPj4+ICsgIFVUX0VYUEVDVF9BU1NFUlRfRkFJTFVS RSAoSXBtaUJsb2JUcmFuc2ZlckVudW1lcmF0ZSAoMCwgQmxvYklkKSwNCj4gPj4gTlVMTCk7DQo+ ID4+PiArDQo+ID4+PiArICBGcmVlUG9vbCAoTW9ja1Jlc3BvbnNlUmVzdWx0cyk7DQo+ID4+PiAr ICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArVUlO VDggIFZhbGlkT3BlblJlc3BvbnNlW10gPSB7DQo+ID4+PiArICAweDAwLCAgICAgICAgICAgICAv LyBDb21wbGV0aW9uQ29kZQ0KPiA+Pj4gKyAgMHhDRiwgMHhDMiwgMHgwMCwgLy8gT3BlbkJNQyBP RU4NCj4gPj4+ICsgIDB4OTMsIDB4RDEsICAgICAgIC8vIENSQw0KPiA+Pj4gKyAgMHgwMywgMHgw MCwgICAgICAgLy8gU2Vzc2lvbklkID0gMw0KPiA+Pj4gK307DQo+ID4+PiArI2RlZmluZSBWQUxJ RF9PUEVOX1JFU1BPTlNFX1NJWkUgIDggKiBzaXplb2YoVUlOVDgpDQo+ID4+PiArDQo+ID4+PiAr LyoqDQo+ID4+PiArICBAcGFyYW1baW5dICBDb250ZXh0ICAgIFtPcHRpb25hbF0gQW4gb3B0aW9u YWwgcGFyYW1ldGVyIHRoYXQgZW5hYmxlczoNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgMSkgdGVzdC1jYXNlIHJldXNlIHdpdGggdmFyaWVkIHBhcmFtZXRlcnMgYW5kDQo+ID4+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgIDIpIHRlc3QtY2FzZSByZS1lbnRyeSBmb3IgVGFyZ2V0 IHRlc3RzIHRoYXQgbmVlZCBhDQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIHJlYm9v dC4gIFRoaXMgcGFyYW1ldGVyIGlzIGEgVk9JRCogYW5kIGl0IGlzIHRoZQ0KPiA+Pj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eSBvZiB0aGUgdGVzdCBhdXRob3IgdG8g ZW5zdXJlIHRoYXQgdGhlDQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRz IGFyZSB3ZWxsIHVuZGVyc3Rvb2QgYnkgYWxsIHRlc3QgY2FzZXMgdGhhdCBtYXkNCj4gPj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSBpdC4NCj4gPj4+ICsgIEByZXR2YWwgIFVO SVRfVEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVzdCBoYXMgY29tcGxldGVkIGFu ZA0KPiB0aGUNCj4gPj4gdGVzdA0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjYXNlIHdhcyBzdWNjZXNzZnVsLg0KPiA+Pj4gKyAgQHJldHZhbCAgVU5JVF9U RVNUX0VSUk9SX1RFU1RfRkFJTEVEICBBIHRlc3QgY2FzZSBhc3NlcnRpb24gaGFzDQo+ID4+IGZh aWxlZC4NCj4gPj4+ICsqKi8NCj4gPj4+ICtVTklUX1RFU1RfU1RBVFVTDQo+ID4+PiArRUZJQVBJ DQo+ID4+PiArT3BlblZhbGlkUmVzcG9uc2UgKA0KPiA+Pj4gKyAgSU4gVU5JVF9URVNUX0NPTlRF WFQgIENvbnRleHQNCj4gPj4+ICsgICkNCj4gPj4+ICt7DQo+ID4+PiArICBFRklfU1RBVFVTICBT dGF0dXM7DQo+ID4+PiArICBDSEFSOCAgICAgICAqQmxvYklkOw0KPiA+Pj4gKyAgVUlOVDE2ICAg ICAgRmxhZ3M7DQo+ID4+PiArICBVSU5UMTYgICAgICBTZXNzaW9uSWQ7DQo+ID4+PiArICBWT0lE ICAgICAgICAqTW9ja1Jlc3BvbnNlUmVzdWx0cyAgPSBOVUxMOw0KPiA+Pj4gKyAgVk9JRCAgICAg ICAgKk1vY2tSZXNwb25zZVJlc3VsdHMyID0gTlVMTDsNCj4gPj4+ICsgIFZPSUQgICAgICAgICpN b2NrUmVzcG9uc2VSZXN1bHRzMyA9IE5VTEw7DQo+ID4+PiArDQo+ID4+PiArICBGbGFncyA9IEJM T0JfVFJBTlNGRVJfU1RBVF9PUEVOX1c7DQo+ID4+PiArDQo+ID4+PiArICAvLw0KPiA+Pj4gKyAg Ly8gQW4gb3BlbiBjYWxsIGVmZmVjdGl2ZWx5IGxlYWRzIHRvIHRocmVlIElQTUkgY29tbWFuZHMN Cj4gPj4+ICsgIC8vIDEuIEdldENvdW50IG9mIGJsb2JzDQo+ID4+PiArICAvLyAyLiBFbnVtZXJh dGUgdGhlIHJlcXVlc3RlZCBibG9iDQo+ID4+PiArICAvLyAzLiBPcGVuIHRoZSByZXF1ZXN0ZWQg YmxvYg0KPiA+Pj4gKyAgLy8NCj4gPj4+ICsgIC8vIFNvIHdlJ2xsIHB1c2ggdGhyZWUgSXBtaSBy ZXNwb25zZXMgaW4gdGhpcyBjYXNlDQo+ID4+PiArICAvLw0KPiA+Pj4gKw0KPiA+Pj4gKyAgTW9j a1Jlc3BvbnNlUmVzdWx0cyA9IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZg0KPiA+ PiAoVkFMSURfT1BFTl9SRVNQT05TRV9TSVpFKSk7DQo+ID4+PiArDQo+ID4+PiArICBDb3B5TWVt IChNb2NrUmVzcG9uc2VSZXN1bHRzLCAmVmFsaWRPcGVuUmVzcG9uc2UsDQo+ID4+IFZBTElEX09Q RU5fUkVTUE9OU0VfU0laRSk7DQo+ID4+PiArICBTdGF0dXMgPSBNb2NrSXBtaVN1Ym1pdENvbW1h bmQgKChVSU5UOCAqKU1vY2tSZXNwb25zZVJlc3VsdHMsDQo+ID4+IFZBTElEX09QRU5fUkVTUE9O U0VfU0laRSwgRUZJX1NVQ0NFU1MpOw0KPiA+Pj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiA+Pj4gKyAgICByZXR1cm4gVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEOw0KPiA+Pj4g KyAgfQ0KPiA+Pj4gKw0KPiA+Pj4gKyAgTW9ja1Jlc3BvbnNlUmVzdWx0czIgPSAoVUlOVDggKilB bGxvY2F0ZVplcm9Qb29sIChzaXplb2YNCj4gPj4gKFZBTElEX0VOVU1FUkFURV9SRVNQT05TRV9T SVpFKSk7DQo+ID4+PiArICBDb3B5TWVtIChNb2NrUmVzcG9uc2VSZXN1bHRzMiwgJlZhbGlkRW51 bWVyYXRlUmVzcG9uc2UsDQo+ID4+IFZBTElEX0VOVU1FUkFURV9SRVNQT05TRV9TSVpFKTsNCj4g Pj4+ICsgIFN0YXR1cyA9IE1vY2tJcG1pU3VibWl0Q29tbWFuZCAoKFVJTlQ4DQo+ICopTW9ja1Jl c3BvbnNlUmVzdWx0czIsDQo+ID4+IFZBTElEX0VOVU1FUkFURV9SRVNQT05TRV9TSVpFLCBFRklf U1VDQ0VTUyk7DQo+ID4+PiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4+PiArICAg IHJldHVybiBVTklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQ7DQo+ID4+PiArICB9DQo+ID4+PiAr DQo+ID4+PiArICBNb2NrUmVzcG9uc2VSZXN1bHRzMyA9IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bv b2wgKHNpemVvZg0KPiA+PiAoVkFMSURfR0VUX0NPVU5UX1JFU1BPTlNFX1NJWkUpKTsNCj4gPj4+ ICsgIENvcHlNZW0gKE1vY2tSZXNwb25zZVJlc3VsdHMzLCAmVmFsaWRHZXRDb3VudFJlc3BvbnNl LA0KPiA+PiBWQUxJRF9HRVRfQ09VTlRfUkVTUE9OU0VfU0laRSk7DQo+ID4+PiArICBTdGF0dXMg PSBNb2NrSXBtaVN1Ym1pdENvbW1hbmQgKChVSU5UOA0KPiAqKU1vY2tSZXNwb25zZVJlc3VsdHMz LA0KPiA+PiBWQUxJRF9HRVRfQ09VTlRfUkVTUE9OU0VfU0laRSwgRUZJX1NVQ0NFU1MpOw0KPiA+ Pj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+Pj4gKyAgICByZXR1cm4gVU5JVF9U RVNUX0VSUk9SX1RFU1RfRkFJTEVEOw0KPiA+Pj4gKyAgfQ0KPiA+Pj4gKw0KPiA+Pj4gKyAgQmxv YklkID0gIi9zbWJpb3MiOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgU3RhdHVzID0gSXBtaUJsb2JUcmFu c2Zlck9wZW4gKEJsb2JJZCwgRmxhZ3MsICZTZXNzaW9uSWQpOw0KPiA+Pj4gKw0KPiA+Pj4gKyAg VVRfQVNTRVJUX1NUQVRVU19FUVVBTCAoU3RhdHVzLCBFRklfU1VDQ0VTUyk7DQo+ID4+PiArICBV VF9BU1NFUlRfRVFVQUwgKFNlc3Npb25JZCwgMyk7DQo+ID4+PiArICBGcmVlUG9vbCAoTW9ja1Jl c3BvbnNlUmVzdWx0cyk7DQo+ID4+PiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gPj4+ ICt9DQo+ID4+PiArDQo+ID4+PiArVUlOVDggIFZhbGlkUmVhZFJlc3BvbnNlW10gPSB7DQo+ID4+ PiArICAweDAwLCAgICAgICAgICAgICAgICAgICAvLyBDb21wbGV0aW9uQ29kZQ0KPiA+Pj4gKyAg MHhDRiwgMHhDMiwgMHgwMCwgICAgICAgLy8gT3BlbkJNQyBPRU4NCj4gPj4+ICsgIDB4MjEsIDB4 NkYsICAgICAgICAgICAgIC8vIENSQw0KPiA+Pj4gKyAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywg Ly8gRGF0YSB0byByZWFkDQo+ID4+PiArfTsNCj4gPj4+ICsNCj4gPj4+ICsjZGVmaW5lIFZBTElE X1JFQURfUkVTUE9OU0VfU0laRSAgMTAgKiBzaXplb2YoVUlOVDgpDQo+ID4+PiArDQo+ID4+PiAr LyoqDQo+ID4+PiArICBAcGFyYW1baW5dICBDb250ZXh0ICAgIFtPcHRpb25hbF0gQW4gb3B0aW9u YWwgcGFyYW1ldGVyIHRoYXQgZW5hYmxlczoNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgMSkgdGVzdC1jYXNlIHJldXNlIHdpdGggdmFyaWVkIHBhcmFtZXRlcnMgYW5kDQo+ID4+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgIDIpIHRlc3QtY2FzZSByZS1lbnRyeSBmb3IgVGFyZ2V0 IHRlc3RzIHRoYXQgbmVlZCBhDQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIHJlYm9v dC4gIFRoaXMgcGFyYW1ldGVyIGlzIGEgVk9JRCogYW5kIGl0IGlzIHRoZQ0KPiA+Pj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eSBvZiB0aGUgdGVzdCBhdXRob3IgdG8g ZW5zdXJlIHRoYXQgdGhlDQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRz IGFyZSB3ZWxsIHVuZGVyc3Rvb2QgYnkgYWxsIHRlc3QgY2FzZXMgdGhhdCBtYXkNCj4gPj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSBpdC4NCj4gPj4+ICsgIEByZXR2YWwgIFVO SVRfVEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVzdCBoYXMgY29tcGxldGVkIGFu ZA0KPiB0aGUNCj4gPj4gdGVzdA0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjYXNlIHdhcyBzdWNjZXNzZnVsLg0KPiA+Pj4gKyAgQHJldHZhbCAgVU5JVF9U RVNUX0VSUk9SX1RFU1RfRkFJTEVEICBBIHRlc3QgY2FzZSBhc3NlcnRpb24gaGFzDQo+ID4+IGZh aWxlZC4NCj4gPj4+ICsqKi8NCj4gPj4+ICtVTklUX1RFU1RfU1RBVFVTDQo+ID4+PiArRUZJQVBJ DQo+ID4+PiArUmVhZFZhbGlkUmVzcG9uc2UgKA0KPiA+Pj4gKyAgSU4gVU5JVF9URVNUX0NPTlRF WFQgIENvbnRleHQNCj4gPj4+ICsgICkNCj4gPj4+ICt7DQo+ID4+PiArICBFRklfU1RBVFVTICBT dGF0dXM7DQo+ID4+PiArICBVSU5UOCAgICAgICAqUmVzcG9uc2VEYXRhOw0KPiA+Pj4gKyAgVUlO VDggICAgICAgRXhwZWN0ZWREYXRhUmVzcG9uc2VbNF0gPSB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4 MDMgfTsNCj4gPj4+ICsgIFZPSUQgICAgICAgICpNb2NrUmVzcG9uc2VSZXN1bHRzICAgID0gTlVM TDsNCj4gPj4+ICsNCj4gPj4+ICsgIE1vY2tSZXNwb25zZVJlc3VsdHMgPSAoVUlOVDggKilBbGxv Y2F0ZVplcm9Qb29sIChzaXplb2YNCj4gPj4gKFZBTElEX1JFQURfUkVTUE9OU0VfU0laRSkpOw0K PiA+Pj4gKyAgQ29weU1lbSAoTW9ja1Jlc3BvbnNlUmVzdWx0cywgJlZhbGlkUmVhZFJlc3BvbnNl LA0KPiA+PiBWQUxJRF9SRUFEX1JFU1BPTlNFX1NJWkUpOw0KPiA+Pj4gKyAgUmVzcG9uc2VEYXRh ID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChWYWxpZFJlYWRSZXNwb25zZSkpOw0KPiA+Pj4g Kw0KPiA+Pj4gKyAgU3RhdHVzID0gTW9ja0lwbWlTdWJtaXRDb21tYW5kICgoVUlOVDggKilNb2Nr UmVzcG9uc2VSZXN1bHRzLA0KPiA+PiBWQUxJRF9SRUFEX1JFU1BPTlNFX1NJWkUsIEVGSV9TVUND RVNTKTsNCj4gPj4+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPj4+ICsgICAgcmV0 dXJuIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRDsNCj4gPj4+ICsgIH0NCj4gPj4+ICsNCj4g Pj4+ICsgIFN0YXR1cyA9IElwbWlCbG9iVHJhbnNmZXJSZWFkICgwLCAwLCA0LCBSZXNwb25zZURh dGEpOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgVVRfQVNTRVJUX1NUQVRVU19FUVVBTCAoU3RhdHVzLCBF RklfU1VDQ0VTUyk7DQo+ID4+PiArICBVVF9BU1NFUlRfTUVNX0VRVUFMIChSZXNwb25zZURhdGEs IEV4cGVjdGVkRGF0YVJlc3BvbnNlLCA0KTsNCj4gPj4+ICsgIEZyZWVQb29sIChNb2NrUmVzcG9u c2VSZXN1bHRzKTsNCj4gPj4+ICsgIEZyZWVQb29sIChSZXNwb25zZURhdGEpOw0KPiA+Pj4gKyAg cmV0dXJuIFVOSVRfVEVTVF9QQVNTRUQ7DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gKy8qKg0K PiA+Pj4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAgICBbT3B0aW9uYWxdIEFuIG9wdGlvbmFsIHBh cmFtZXRlciB0aGF0IGVuYWJsZXM6DQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIDEp IHRlc3QtY2FzZSByZXVzZSB3aXRoIHZhcmllZCBwYXJhbWV0ZXJzIGFuZA0KPiA+Pj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAyKSB0ZXN0LWNhc2UgcmUtZW50cnkgZm9yIFRhcmdldCB0ZXN0 cyB0aGF0IG5lZWQgYQ0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICByZWJvb3QuICBU aGlzIHBhcmFtZXRlciBpcyBhIFZPSUQqIGFuZCBpdCBpcyB0aGUNCj4gPj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHRlc3QgYXV0aG9yIHRvIGVuc3Vy ZSB0aGF0IHRoZQ0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50cyBhcmUg d2VsbCB1bmRlcnN0b29kIGJ5IGFsbCB0ZXN0IGNhc2VzIHRoYXQgbWF5DQo+ID4+PiArICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN1bWUgaXQuDQo+ID4+PiArICBAcmV0dmFsICBVTklUX1RF U1RfUEFTU0VEICAgICAgICAgICAgIFRoZSBVbml0IHRlc3QgaGFzIGNvbXBsZXRlZCBhbmQNCj4g dGhlDQo+ID4+IHRlc3QNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2FzZSB3YXMgc3VjY2Vzc2Z1bC4NCj4gPj4+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9F UlJPUl9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNhc2UgYXNzZXJ0aW9uIGhhcw0KPiA+PiBmYWlsZWQu DQo+ID4+PiArKiovDQo+ID4+PiArVU5JVF9URVNUX1NUQVRVUw0KPiA+Pj4gK0VGSUFQSQ0KPiA+ Pj4gK1JlYWRJbnZhbGlkQnVmZmVyICgNCj4gPj4+ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICBD b250ZXh0DQo+ID4+PiArICApDQo+ID4+PiArew0KPiA+Pj4gKyAgVUlOVDggICAgICAgKlJlc3Bv bnNlRGF0YTsNCj4gPj4+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPj4+ICsgIFZPSUQgICAg ICAgICpNb2NrUmVzcG9uc2VSZXN1bHRzID0gTlVMTDsNCj4gPj4+ICsNCj4gPj4+ICsgIE1vY2tS ZXNwb25zZVJlc3VsdHMgPSAoVUlOVDggKilBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YNCj4gPj4g KFZBTElEX1JFQURfUkVTUE9OU0VfU0laRSkpOw0KPiA+Pj4gKyAgQ29weU1lbSAoTW9ja1Jlc3Bv bnNlUmVzdWx0cywgJlZhbGlkUmVhZFJlc3BvbnNlLA0KPiA+PiBWQUxJRF9SRUFEX1JFU1BPTlNF X1NJWkUpOw0KPiA+Pj4gKyAgUmVzcG9uc2VEYXRhID0gTlVMTDsNCj4gPj4+ICsNCj4gPj4+ICsg IFN0YXR1cyA9IE1vY2tJcG1pU3VibWl0Q29tbWFuZCAoKFVJTlQ4ICopTW9ja1Jlc3BvbnNlUmVz dWx0cywNCj4gPj4gVkFMSURfUkVBRF9SRVNQT05TRV9TSVpFLCBFRklfU1VDQ0VTUyk7DQo+ID4+ PiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4+PiArICAgIHJldHVybiBVTklUX1RF U1RfRVJST1JfVEVTVF9GQUlMRUQ7DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ID4+PiArICBVVF9F WFBFQ1RfQVNTRVJUX0ZBSUxVUkUgKElwbWlCbG9iVHJhbnNmZXJSZWFkICgwLCAwLCA0LA0KPiA+ PiBSZXNwb25zZURhdGEpLCBOVUxMKTsNCj4gPj4+ICsNCj4gPj4+ICsgIEZyZWVQb29sIChNb2Nr UmVzcG9uc2VSZXN1bHRzKTsNCj4gPj4+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiA+ Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICsvKioNCj4gPj4+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQg ICAgW09wdGlvbmFsXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBlbmFibGVzOg0KPiA+Pj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAxKSB0ZXN0LWNhc2UgcmV1c2Ugd2l0aCB2YXJpZWQg cGFyYW1ldGVycyBhbmQNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgMikgdGVzdC1j YXNlIHJlLWVudHJ5IGZvciBUYXJnZXQgdGVzdHMgdGhhdCBuZWVkIGENCj4gPj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgcmVib290LiAgVGhpcyBwYXJhbWV0ZXIgaXMgYSBWT0lEKiBhbmQg aXQgaXMgdGhlDQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5 IG9mIHRoZSB0ZXN0IGF1dGhvciB0byBlbnN1cmUgdGhhdCB0aGUNCj4gPj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgY29udGVudHMgYXJlIHdlbGwgdW5kZXJzdG9vZCBieSBhbGwgdGVzdCBj YXNlcyB0aGF0IG1heQ0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lIGl0 Lg0KPiA+Pj4gKyAgQHJldHZhbCAgVU5JVF9URVNUX1BBU1NFRCAgICAgICAgICAgICBUaGUgVW5p dCB0ZXN0IGhhcyBjb21wbGV0ZWQgYW5kDQo+IHRoZQ0KPiA+PiB0ZXN0DQo+ID4+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugd2FzIHN1Y2Nlc3NmdWwuDQo+ ID4+PiArICBAcmV0dmFsICBVTklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNl IGFzc2VydGlvbiBoYXMNCj4gPj4gZmFpbGVkLg0KPiA+Pj4gKyoqLw0KPiA+Pj4gK1VOSVRfVEVT VF9TVEFUVVMNCj4gPj4+ICtFRklBUEkNCj4gPj4+ICtXcml0ZVZhbGlkUmVzcG9uc2UgKA0KPiA+ Pj4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4gPj4+ICsgICkNCj4gPj4+ICt7 DQo+ID4+PiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ID4+PiArICBVSU5UOCAgICAgICBTZW5k RGF0YVs0XSAgICAgICAgICA9IHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMyB9Ow0KPiA+Pj4gKyAg Vk9JRCAgICAgICAgKk1vY2tSZXNwb25zZVJlc3VsdHMgPSBOVUxMOw0KPiA+Pj4gKw0KPiA+Pj4g KyAgTW9ja1Jlc3BvbnNlUmVzdWx0cyA9IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bvb2wgKHNpemVv Zg0KPiA+PiAoVkFMSURfTk9EQVRBX1JFU1BPTlNFX1NJWkUpKTsNCj4gPj4+ICsgIENvcHlNZW0g KE1vY2tSZXNwb25zZVJlc3VsdHMsICZWYWxpZE5vRGF0YVJlc3BvbnNlLA0KPiA+PiBWQUxJRF9O T0RBVEFfUkVTUE9OU0VfU0laRSk7DQo+ID4+PiArDQo+ID4+PiArICBTdGF0dXMgPSBNb2NrSXBt aVN1Ym1pdENvbW1hbmQgKChVSU5UOCAqKU1vY2tSZXNwb25zZVJlc3VsdHMsDQo+ID4+IFZBTElE X05PREFUQV9SRVNQT05TRV9TSVpFLCBFRklfU1VDQ0VTUyk7DQo+ID4+PiArICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ID4+PiArICAgIHJldHVybiBVTklUX1RFU1RfRVJST1JfVEVTVF9G QUlMRUQ7DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ID4+PiArICBTdGF0dXMgPSBJcG1pQmxvYlRy YW5zZmVyV3JpdGUgKDAsIDAsIFNlbmREYXRhLCA0KTsNCj4gPj4+ICsNCj4gPj4+ICsgIFVUX0FT U0VSVF9TVEFUVVNfRVFVQUwgKFN0YXR1cywgRUZJX1NVQ0NFU1MpOw0KPiA+Pj4gKyAgRnJlZVBv b2wgKE1vY2tSZXNwb25zZVJlc3VsdHMpOw0KPiA+Pj4gKyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNT RUQ7DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gKy8qKg0KPiA+Pj4gKyAgQHBhcmFtW2luXSAg Q29udGV4dCAgICBbT3B0aW9uYWxdIEFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IGVuYWJsZXM6 DQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIDEpIHRlc3QtY2FzZSByZXVzZSB3aXRo IHZhcmllZCBwYXJhbWV0ZXJzIGFuZA0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAy KSB0ZXN0LWNhc2UgcmUtZW50cnkgZm9yIFRhcmdldCB0ZXN0cyB0aGF0IG5lZWQgYQ0KPiA+Pj4g KyAgICAgICAgICAgICAgICAgICAgICAgICByZWJvb3QuICBUaGlzIHBhcmFtZXRlciBpcyBhIFZP SUQqIGFuZCBpdCBpcyB0aGUNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9u c2liaWxpdHkgb2YgdGhlIHRlc3QgYXV0aG9yIHRvIGVuc3VyZSB0aGF0IHRoZQ0KPiA+Pj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50cyBhcmUgd2VsbCB1bmRlcnN0b29kIGJ5IGFs bCB0ZXN0IGNhc2VzIHRoYXQgbWF5DQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN1bWUgaXQuDQo+ID4+PiArICBAcmV0dmFsICBVTklUX1RFU1RfUEFTU0VEICAgICAgICAgICAg IFRoZSBVbml0IHRlc3QgaGFzIGNvbXBsZXRlZCBhbmQNCj4gdGhlDQo+ID4+IHRlc3QNCj4gPj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSB3YXMgc3VjY2Vz c2Z1bC4NCj4gPj4+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRCAgQSB0 ZXN0IGNhc2UgYXNzZXJ0aW9uIGhhcw0KPiA+PiBmYWlsZWQuDQo+ID4+PiArKiovDQo+ID4+PiAr VU5JVF9URVNUX1NUQVRVUw0KPiA+Pj4gK0VGSUFQSQ0KPiA+Pj4gK0NvbW1pdFZhbGlkUmVzcG9u c2UgKA0KPiA+Pj4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4gPj4+ICsgICkN Cj4gPj4+ICt7DQo+ID4+PiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ID4+PiArICBVSU5UOCAg ICAgICBTZW5kRGF0YVs0XSAgICAgICAgICA9IHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMyB9Ow0K PiA+Pj4gKyAgVk9JRCAgICAgICAgKk1vY2tSZXNwb25zZVJlc3VsdHMgPSBOVUxMOw0KPiA+Pj4g Kw0KPiA+Pj4gKyAgTW9ja1Jlc3BvbnNlUmVzdWx0cyA9IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bv b2wgKHNpemVvZg0KPiA+PiAoVkFMSURfTk9EQVRBX1JFU1BPTlNFX1NJWkUpKTsNCj4gPj4+ICsg IENvcHlNZW0gKE1vY2tSZXNwb25zZVJlc3VsdHMsICZWYWxpZE5vRGF0YVJlc3BvbnNlLA0KPiA+ PiBWQUxJRF9OT0RBVEFfUkVTUE9OU0VfU0laRSk7DQo+ID4+PiArDQo+ID4+PiArICBTdGF0dXMg PSBNb2NrSXBtaVN1Ym1pdENvbW1hbmQgKChVSU5UOCAqKU1vY2tSZXNwb25zZVJlc3VsdHMsDQo+ ID4+IFZBTElEX05PREFUQV9SRVNQT05TRV9TSVpFLCBFRklfU1VDQ0VTUyk7DQo+ID4+PiArICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4+PiArICAgIHJldHVybiBVTklUX1RFU1RfRVJS T1JfVEVTVF9GQUlMRUQ7DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ID4+PiArICBTdGF0dXMgPSBJ cG1pQmxvYlRyYW5zZmVyQ29tbWl0ICgwLCA0LCBTZW5kRGF0YSk7DQo+ID4+PiArDQo+ID4+PiAr ICBVVF9BU1NFUlRfU1RBVFVTX0VRVUFMIChTdGF0dXMsIEVGSV9TVUNDRVNTKTsNCj4gPj4+ICsg IEZyZWVQb29sIChNb2NrUmVzcG9uc2VSZXN1bHRzKTsNCj4gPj4+ICsgIHJldHVybiBVTklUX1RF U1RfUEFTU0VEOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICsvKioNCj4gPj4+ICsgIEBwYXJh bVtpbl0gIENvbnRleHQgICAgW09wdGlvbmFsXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBl bmFibGVzOg0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAxKSB0ZXN0LWNhc2UgcmV1 c2Ugd2l0aCB2YXJpZWQgcGFyYW1ldGVycyBhbmQNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgMikgdGVzdC1jYXNlIHJlLWVudHJ5IGZvciBUYXJnZXQgdGVzdHMgdGhhdCBuZWVkIGEN Cj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgcmVib290LiAgVGhpcyBwYXJhbWV0ZXIg aXMgYSBWT0lEKiBhbmQgaXQgaXMgdGhlDQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAg IHJlc3BvbnNpYmlsaXR5IG9mIHRoZSB0ZXN0IGF1dGhvciB0byBlbnN1cmUgdGhhdCB0aGUNCj4g Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHMgYXJlIHdlbGwgdW5kZXJzdG9v ZCBieSBhbGwgdGVzdCBjYXNlcyB0aGF0IG1heQ0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdW1lIGl0Lg0KPiA+Pj4gKyAgQHJldHZhbCAgVU5JVF9URVNUX1BBU1NFRCAgICAg ICAgICAgICBUaGUgVW5pdCB0ZXN0IGhhcyBjb21wbGV0ZWQgYW5kDQo+IHRoZQ0KPiA+PiB0ZXN0 DQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugd2Fz IHN1Y2Nlc3NmdWwuDQo+ID4+PiArICBAcmV0dmFsICBVTklUX1RFU1RfRVJST1JfVEVTVF9GQUlM RUQgIEEgdGVzdCBjYXNlIGFzc2VydGlvbiBoYXMNCj4gPj4gZmFpbGVkLg0KPiA+Pj4gKyoqLw0K PiA+Pj4gK1VOSVRfVEVTVF9TVEFUVVMNCj4gPj4+ICtFRklBUEkNCj4gPj4+ICtDbG9zZVZhbGlk UmVzcG9uc2UgKA0KPiA+Pj4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4gPj4+ ICsgICkNCj4gPj4+ICt7DQo+ID4+PiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ID4+PiArICBW T0lEICAgICAgICAqTW9ja1Jlc3BvbnNlUmVzdWx0cyA9IE5VTEw7DQo+ID4+PiArDQo+ID4+PiAr ICBNb2NrUmVzcG9uc2VSZXN1bHRzID0gKFVJTlQ4ICopQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9m DQo+ID4+IChWQUxJRF9OT0RBVEFfUkVTUE9OU0VfU0laRSkpOw0KPiA+Pj4gKyAgQ29weU1lbSAo TW9ja1Jlc3BvbnNlUmVzdWx0cywgJlZhbGlkTm9EYXRhUmVzcG9uc2UsDQo+ID4+IFZBTElEX05P REFUQV9SRVNQT05TRV9TSVpFKTsNCj4gPj4+ICsNCj4gPj4+ICsgIFN0YXR1cyA9IE1vY2tJcG1p U3VibWl0Q29tbWFuZCAoKFVJTlQ4ICopTW9ja1Jlc3BvbnNlUmVzdWx0cywNCj4gPj4gVkFMSURf Tk9EQVRBX1JFU1BPTlNFX1NJWkUsIEVGSV9TVUNDRVNTKTsNCj4gPj4+ICsgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gPj4+ICsgICAgcmV0dXJuIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZB SUxFRDsNCj4gPj4+ICsgIH0NCj4gPj4+ICsNCj4gPj4+ICsgIFN0YXR1cyA9IElwbWlCbG9iVHJh bnNmZXJDbG9zZSAoMSk7DQo+ID4+PiArDQo+ID4+PiArICBVVF9BU1NFUlRfU1RBVFVTX0VRVUFM IChTdGF0dXMsIEVGSV9TVUNDRVNTKTsNCj4gPj4+ICsgIEZyZWVQb29sIChNb2NrUmVzcG9uc2VS ZXN1bHRzKTsNCj4gPj4+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiA+Pj4gK30NCj4g Pj4+ICsNCj4gPj4+ICsvKioNCj4gPj4+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAgW09wdGlv bmFsXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBlbmFibGVzOg0KPiA+Pj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAxKSB0ZXN0LWNhc2UgcmV1c2Ugd2l0aCB2YXJpZWQgcGFyYW1ldGVy cyBhbmQNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgMikgdGVzdC1jYXNlIHJlLWVu dHJ5IGZvciBUYXJnZXQgdGVzdHMgdGhhdCBuZWVkIGENCj4gPj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgcmVib290LiAgVGhpcyBwYXJhbWV0ZXIgaXMgYSBWT0lEKiBhbmQgaXQgaXMgdGhl DQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSB0 ZXN0IGF1dGhvciB0byBlbnN1cmUgdGhhdCB0aGUNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgY29udGVudHMgYXJlIHdlbGwgdW5kZXJzdG9vZCBieSBhbGwgdGVzdCBjYXNlcyB0aGF0 IG1heQ0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lIGl0Lg0KPiA+Pj4g KyAgQHJldHZhbCAgVU5JVF9URVNUX1BBU1NFRCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0IGhh cyBjb21wbGV0ZWQgYW5kDQo+IHRoZQ0KPiA+PiB0ZXN0DQo+ID4+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugd2FzIHN1Y2Nlc3NmdWwuDQo+ID4+PiArICBA cmV0dmFsICBVTklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlIGFzc2VydGlv biBoYXMNCj4gPj4gZmFpbGVkLg0KPiA+Pj4gKyoqLw0KPiA+Pj4gK1VOSVRfVEVTVF9TVEFUVVMN Cj4gPj4+ICtFRklBUEkNCj4gPj4+ICtEZWxldGVWYWxpZFJlc3BvbnNlICgNCj4gPj4+ICsgIElO IFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQo+ID4+PiArICApDQo+ID4+PiArew0KPiA+Pj4g KyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+Pj4gKyAgVk9JRCAgICAgICAgKk1vY2tSZXNwb25z ZVJlc3VsdHMgPSBOVUxMOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgTW9ja1Jlc3BvbnNlUmVzdWx0cyA9 IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZg0KPiA+PiAoVkFMSURfTk9EQVRBX1JF U1BPTlNFX1NJWkUpKTsNCj4gPj4+ICsgIENvcHlNZW0gKE1vY2tSZXNwb25zZVJlc3VsdHMsICZW YWxpZE5vRGF0YVJlc3BvbnNlLA0KPiA+PiBWQUxJRF9OT0RBVEFfUkVTUE9OU0VfU0laRSk7DQo+ ID4+PiArDQo+ID4+PiArICBTdGF0dXMgPSBNb2NrSXBtaVN1Ym1pdENvbW1hbmQgKChVSU5UOCAq KU1vY2tSZXNwb25zZVJlc3VsdHMsDQo+ID4+IFZBTElEX05PREFUQV9SRVNQT05TRV9TSVpFLCBF RklfU1VDQ0VTUyk7DQo+ID4+PiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4+PiAr ICAgIHJldHVybiBVTklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQ7DQo+ID4+PiArICB9DQo+ID4+ PiArDQo+ID4+PiArICBTdGF0dXMgPSBJcG1pQmxvYlRyYW5zZmVyRGVsZXRlICgiL3NtYmlvcyIp Ow0KPiA+Pj4gKw0KPiA+Pj4gKyAgVVRfQVNTRVJUX1NUQVRVU19FUVVBTCAoU3RhdHVzLCBFRklf U1VDQ0VTUyk7DQo+ID4+PiArICBGcmVlUG9vbCAoTW9ja1Jlc3BvbnNlUmVzdWx0cyk7DQo+ID4+ PiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiAr VUlOVDggIFZhbGlkQmxvYlN0YXRSZXNwb25zZVtdID0gew0KPiA+Pj4gKyAgMHgwMCwgICAgICAg ICAgICAgICAgICAgLy8gQ29tcGxldGlvbkNvZGUNCj4gPj4+ICsgIDB4Q0YsIDB4QzIsIDB4MDAs ICAgICAgIC8vIE9wZW5CTUMgT0VODQo+ID4+PiArICAweDFGLCAweDRGLCAgICAgICAgICAgICAv LyBDcmMNCj4gPj4+ICsgIDB4MDEsIDB4MDAsICAgICAgICAgICAgIC8vIEJsb2JTdGF0ZQ0KPiA+ Pj4gKyAgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgLy8gQmxvYlNpemUNCj4gPj4+ICsgIDB4MDQs ICAgICAgICAgICAgICAgICAgIC8vIE1ldGFEYXRhTGVuDQo+ID4+PiArICAweDA2LCAweDA3LCAw eDA4LCAweDA5LCAvLyBNZXRhRGF0YQ0KPiA+Pj4gK307DQo+ID4+PiArDQo+ID4+PiArI2RlZmlu ZSBWQUxJRF9CTE9CX1NUQVRfUkVTUE9OU0VfU0laRSAgMTcgKiBzaXplb2YoVUlOVDgpDQo+ID4+ PiArDQo+ID4+PiArLyoqDQo+ID4+PiArICBAcGFyYW1baW5dICBDb250ZXh0ICAgIFtPcHRpb25h bF0gQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgZW5hYmxlczoNCj4gPj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgMSkgdGVzdC1jYXNlIHJldXNlIHdpdGggdmFyaWVkIHBhcmFtZXRlcnMg YW5kDQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIDIpIHRlc3QtY2FzZSByZS1lbnRy eSBmb3IgVGFyZ2V0IHRlc3RzIHRoYXQgbmVlZCBhDQo+ID4+PiArICAgICAgICAgICAgICAgICAg ICAgICAgIHJlYm9vdC4gIFRoaXMgcGFyYW1ldGVyIGlzIGEgVk9JRCogYW5kIGl0IGlzIHRoZQ0K PiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eSBvZiB0aGUgdGVz dCBhdXRob3IgdG8gZW5zdXJlIHRoYXQgdGhlDQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnRlbnRzIGFyZSB3ZWxsIHVuZGVyc3Rvb2QgYnkgYWxsIHRlc3QgY2FzZXMgdGhhdCBt YXkNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSBpdC4NCj4gPj4+ICsg IEByZXR2YWwgIFVOSVRfVEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVzdCBoYXMg Y29tcGxldGVkIGFuZA0KPiB0aGUNCj4gPj4gdGVzdA0KPiA+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHdhcyBzdWNjZXNzZnVsLg0KPiA+Pj4gKyAgQHJl dHZhbCAgVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEICBBIHRlc3QgY2FzZSBhc3NlcnRpb24g aGFzDQo+ID4+IGZhaWxlZC4NCj4gPj4+ICsqKi8NCj4gPj4+ICtVTklUX1RFU1RfU1RBVFVTDQo+ ID4+PiArRUZJQVBJDQo+ID4+PiArQmxvYlN0YXRWYWxpZFJlc3BvbnNlICgNCj4gPj4+ICsgIElO IFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQo+ID4+PiArICApDQo+ID4+PiArew0KPiA+Pj4g KyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+Pj4gKyAgVUlOVDE2ICAgICAgKkJsb2JTdGF0ZTsN Cj4gPj4+ICsgIFVJTlQzMiAgICAgICpTaXplOw0KPiA+Pj4gKyAgVUlOVDggICAgICAgKk1ldGFk YXRhTGVuZ3RoOw0KPiA+Pj4gKyAgVUlOVDggICAgICAgKk1ldGFkYXRhOw0KPiA+Pj4gKyAgVUlO VDggICAgICAgKkV4cGVjdGVkTWV0YWRhdGE7DQo+ID4+PiArICBDSEFSOCAgICAgICAqQmxvYklk Ow0KPiA+Pj4gKyAgVk9JRCAgICAgICAgKk1vY2tSZXNwb25zZVJlc3VsdHMgPSBOVUxMOw0KPiA+ Pj4gKw0KPiA+Pj4gKyAgQmxvYlN0YXRlICAgICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVv ZiAoVUlOVDE2KSk7DQo+ID4+PiArICBTaXplICAgICAgICAgICAgID0gQWxsb2NhdGVaZXJvUG9v bCAoc2l6ZW9mIChVSU5UMzIpKTsNCj4gPj4+ICsgIEJsb2JJZCAgICAgICAgICAgPSAiQmxvYklk IjsNCj4gPj4+ICsgIE1ldGFkYXRhTGVuZ3RoICAgPSBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2Yg KFVJTlQ4KSk7DQo+ID4+PiArICBNZXRhZGF0YSAgICAgICAgID0gQWxsb2NhdGVaZXJvUG9vbCAo NCAqIHNpemVvZiAoVUlOVDgpKTsNCj4gPj4+ICsgIEV4cGVjdGVkTWV0YWRhdGEgPSBBbGxvY2F0 ZVplcm9Qb29sICg0ICogc2l6ZW9mIChVSU5UOCkpOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgTW9ja1Jl c3BvbnNlUmVzdWx0cyA9IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZg0KPiA+PiAo VkFMSURfQkxPQl9TVEFUX1JFU1BPTlNFX1NJWkUpKTsNCj4gPj4+ICsgIENvcHlNZW0gKE1vY2tS ZXNwb25zZVJlc3VsdHMsICZWYWxpZEJsb2JTdGF0UmVzcG9uc2UsDQo+ID4+IFZBTElEX0JMT0Jf U1RBVF9SRVNQT05TRV9TSVpFKTsNCj4gPj4+ICsNCj4gPj4+ICsgIFN0YXR1cyA9IE1vY2tJcG1p U3VibWl0Q29tbWFuZCAoKFVJTlQ4ICopTW9ja1Jlc3BvbnNlUmVzdWx0cywNCj4gPj4gVkFMSURf QkxPQl9TVEFUX1JFU1BPTlNFX1NJWkUsIEVGSV9TVUNDRVNTKTsNCj4gPj4+ICsgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gPj4+ICsgICAgcmV0dXJuIFVOSVRfVEVTVF9FUlJPUl9URVNU X0ZBSUxFRDsNCj4gPj4+ICsgIH0NCj4gPj4+ICsNCj4gPj4+ICsgIFN0YXR1cyA9IElwbWlCbG9i VHJhbnNmZXJTdGF0IChCbG9iSWQsIEJsb2JTdGF0ZSwgU2l6ZSwNCj4gTWV0YWRhdGFMZW5ndGgs DQo+ID4+IE1ldGFkYXRhKTsNCj4gPj4+ICsNCj4gPj4+ICsgIFVUX0FTU0VSVF9TVEFUVVNfRVFV QUwgKFN0YXR1cywgRUZJX1NVQ0NFU1MpOw0KPiA+Pj4gKyAgVVRfQVNTRVJUX0VRVUFMICgqQmxv YlN0YXRlLCAxKTsNCj4gPj4+ICsgIFVUX0FTU0VSVF9FUVVBTCAoKlNpemUsIDB4MDUwNDAzMDIp Ow0KPiA+Pj4gKyAgVVRfQVNTRVJUX0VRVUFMICgqTWV0YWRhdGFMZW5ndGgsIDQpOw0KPiA+Pj4g KyAgVVRfQVNTRVJUX01FTV9FUVVBTCAoTWV0YWRhdGEsIEV4cGVjdGVkTWV0YWRhdGEsIDQpOw0K PiA+Pj4gKyAgRnJlZVBvb2wgKE1vY2tSZXNwb25zZVJlc3VsdHMpOw0KPiA+Pj4gKyAgRnJlZVBv b2wgKEJsb2JTdGF0ZSk7DQo+ID4+PiArICBGcmVlUG9vbCAoU2l6ZSk7DQo+ID4+PiArICBGcmVl UG9vbCAoTWV0YWRhdGFMZW5ndGgpOw0KPiA+Pj4gKyAgRnJlZVBvb2wgKE1ldGFkYXRhKTsNCj4g Pj4+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ ICsvKioNCj4gPj4+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAgW09wdGlvbmFsXSBBbiBvcHRp b25hbCBwYXJhbWV0ZXIgdGhhdCBlbmFibGVzOg0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAxKSB0ZXN0LWNhc2UgcmV1c2Ugd2l0aCB2YXJpZWQgcGFyYW1ldGVycyBhbmQNCj4gPj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgMikgdGVzdC1jYXNlIHJlLWVudHJ5IGZvciBUYXJn ZXQgdGVzdHMgdGhhdCBuZWVkIGENCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgcmVi b290LiAgVGhpcyBwYXJhbWV0ZXIgaXMgYSBWT0lEKiBhbmQgaXQgaXMgdGhlDQo+ID4+PiArICAg ICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSB0ZXN0IGF1dGhvciB0 byBlbnN1cmUgdGhhdCB0aGUNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVu dHMgYXJlIHdlbGwgdW5kZXJzdG9vZCBieSBhbGwgdGVzdCBjYXNlcyB0aGF0IG1heQ0KPiA+Pj4g KyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lIGl0Lg0KPiA+Pj4gKyAgQHJldHZhbCAg VU5JVF9URVNUX1BBU1NFRCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0IGhhcyBjb21wbGV0ZWQg YW5kDQo+IHRoZQ0KPiA+PiB0ZXN0DQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNhc2Ugd2FzIHN1Y2Nlc3NmdWwuDQo+ID4+PiArICBAcmV0dmFsICBVTklU X1RFU1RfRVJST1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlIGFzc2VydGlvbiBoYXMNCj4gPj4g ZmFpbGVkLg0KPiA+Pj4gKyoqLw0KPiA+Pj4gK1VOSVRfVEVTVF9TVEFUVVMNCj4gPj4+ICtFRklB UEkNCj4gPj4+ICtCbG9iU3RhdEludmFsaWRCdWZmZXIgKA0KPiA+Pj4gKyAgSU4gVU5JVF9URVNU X0NPTlRFWFQgIENvbnRleHQNCj4gPj4+ICsgICkNCj4gPj4+ICt7DQo+ID4+PiArICBVSU5UOCAg ICAgICAqTWV0YWRhdGE7DQo+ID4+PiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ID4+PiArICBW T0lEICAgICAgICAqTW9ja1Jlc3BvbnNlUmVzdWx0cyA9IE5VTEw7DQo+ID4+PiArDQo+ID4+PiAr ICBNZXRhZGF0YSA9IE5VTEw7DQo+ID4+PiArDQo+ID4+PiArICBNb2NrUmVzcG9uc2VSZXN1bHRz ID0gKFVJTlQ4ICopQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mDQo+ID4+IChWQUxJRF9CTE9CX1NU QVRfUkVTUE9OU0VfU0laRSkpOw0KPiA+Pj4gKyAgQ29weU1lbSAoTW9ja1Jlc3BvbnNlUmVzdWx0 cywgJlZhbGlkQmxvYlN0YXRSZXNwb25zZSwNCj4gPj4gVkFMSURfQkxPQl9TVEFUX1JFU1BPTlNF X1NJWkUpOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgU3RhdHVzID0gTW9ja0lwbWlTdWJtaXRDb21tYW5k ICgoVUlOVDggKilNb2NrUmVzcG9uc2VSZXN1bHRzLA0KPiA+PiBWQUxJRF9CTE9CX1NUQVRfUkVT UE9OU0VfU0laRSwgRUZJX1NVQ0NFU1MpOw0KPiA+Pj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiA+Pj4gKyAgICByZXR1cm4gVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEOw0KPiA+ Pj4gKyAgfQ0KPiA+Pj4gKw0KPiA+Pj4gKyAgVVRfRVhQRUNUX0FTU0VSVF9GQUlMVVJFIChJcG1p QmxvYlRyYW5zZmVyU3RhdCAoTlVMTCwgMCwgMCwgMCwNCj4gPj4gTWV0YWRhdGEpLCBOVUxMKTsN Cj4gPj4+ICsNCj4gPj4+ICsgIEZyZWVQb29sIChNb2NrUmVzcG9uc2VSZXN1bHRzKTsNCj4gPj4+ ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICsv KioNCj4gPj4+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAgW09wdGlvbmFsXSBBbiBvcHRpb25h bCBwYXJhbWV0ZXIgdGhhdCBlbmFibGVzOg0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAxKSB0ZXN0LWNhc2UgcmV1c2Ugd2l0aCB2YXJpZWQgcGFyYW1ldGVycyBhbmQNCj4gPj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgMikgdGVzdC1jYXNlIHJlLWVudHJ5IGZvciBUYXJnZXQg dGVzdHMgdGhhdCBuZWVkIGENCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgcmVib290 LiAgVGhpcyBwYXJhbWV0ZXIgaXMgYSBWT0lEKiBhbmQgaXQgaXMgdGhlDQo+ID4+PiArICAgICAg ICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSB0ZXN0IGF1dGhvciB0byBl bnN1cmUgdGhhdCB0aGUNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHMg YXJlIHdlbGwgdW5kZXJzdG9vZCBieSBhbGwgdGVzdCBjYXNlcyB0aGF0IG1heQ0KPiA+Pj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lIGl0Lg0KPiA+Pj4gKyAgQHJldHZhbCAgVU5J VF9URVNUX1BBU1NFRCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0IGhhcyBjb21wbGV0ZWQgYW5k DQo+IHRoZQ0KPiA+PiB0ZXN0DQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNhc2Ugd2FzIHN1Y2Nlc3NmdWwuDQo+ID4+PiArICBAcmV0dmFsICBVTklUX1RF U1RfRVJST1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlIGFzc2VydGlvbiBoYXMNCj4gPj4gZmFp bGVkLg0KPiA+Pj4gKyoqLw0KPiA+Pj4gK1VOSVRfVEVTVF9TVEFUVVMNCj4gPj4+ICtFRklBUEkN Cj4gPj4+ICtTZXNzaW9uU3RhdFZhbGlkUmVzcG9uc2UgKA0KPiA+Pj4gKyAgSU4gVU5JVF9URVNU X0NPTlRFWFQgIENvbnRleHQNCj4gPj4+ICsgICkNCj4gPj4+ICt7DQo+ID4+PiArICBFRklfU1RB VFVTICBTdGF0dXM7DQo+ID4+PiArICBVSU5UMTYgICAgICAqQmxvYlN0YXRlOw0KPiA+Pj4gKyAg VUlOVDMyICAgICAgKlNpemU7DQo+ID4+PiArICBVSU5UOCAgICAgICAqTWV0YWRhdGFMZW5ndGg7 DQo+ID4+PiArICBVSU5UOCAgICAgICAqTWV0YWRhdGE7DQo+ID4+PiArICBVSU5UOCAgICAgICAq RXhwZWN0ZWRNZXRhZGF0YTsNCj4gPj4+ICsgIFZPSUQgICAgICAgICpNb2NrUmVzcG9uc2VSZXN1 bHRzID0gTlVMTDsNCj4gPj4+ICsNCj4gPj4+ICsgIEJsb2JTdGF0ZSAgICAgICAgPSBBbGxvY2F0 ZVplcm9Qb29sIChzaXplb2YgKFVJTlQxNikpOw0KPiA+Pj4gKyAgU2l6ZSAgICAgICAgICAgICA9 IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAoVUlOVDMyKSk7DQo+ID4+PiArICBNZXRhZGF0YUxl bmd0aCAgID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChVSU5UOCkpOw0KPiA+Pj4gKyAgTWV0 YWRhdGEgICAgICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKDQgKiBzaXplb2YgKFVJTlQ4KSk7DQo+ ID4+PiArICBFeHBlY3RlZE1ldGFkYXRhID0gQWxsb2NhdGVaZXJvUG9vbCAoNCAqIHNpemVvZiAo VUlOVDgpKTsNCj4gPj4+ICsNCj4gPj4+ICsgIE1vY2tSZXNwb25zZVJlc3VsdHMgPSAoVUlOVDgg KilBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YNCj4gPj4gKFZBTElEX0JMT0JfU1RBVF9SRVNQT05T RV9TSVpFKSk7DQo+ID4+PiArICBDb3B5TWVtIChNb2NrUmVzcG9uc2VSZXN1bHRzLCAmVmFsaWRC bG9iU3RhdFJlc3BvbnNlLA0KPiA+PiBWQUxJRF9CTE9CX1NUQVRfUkVTUE9OU0VfU0laRSk7DQo+ ID4+PiArDQo+ID4+PiArICBTdGF0dXMgPSBNb2NrSXBtaVN1Ym1pdENvbW1hbmQgKChVSU5UOCAq KU1vY2tSZXNwb25zZVJlc3VsdHMsDQo+ID4+IFZBTElEX0JMT0JfU1RBVF9SRVNQT05TRV9TSVpF LCBFRklfU1VDQ0VTUyk7DQo+ID4+PiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4+ PiArICAgIHJldHVybiBVTklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQ7DQo+ID4+PiArICB9DQo+ ID4+PiArDQo+ID4+PiArICBTdGF0dXMgPSBJcG1pQmxvYlRyYW5zZmVyU2Vzc2lvblN0YXQgKDAs IEJsb2JTdGF0ZSwgU2l6ZSwNCj4gPj4gTWV0YWRhdGFMZW5ndGgsIE1ldGFkYXRhKTsNCj4gPj4+ ICsNCj4gPj4+ICsgIFVUX0FTU0VSVF9TVEFUVVNfRVFVQUwgKFN0YXR1cywgRUZJX1NVQ0NFU1Mp Ow0KPiA+Pj4gKyAgVVRfQVNTRVJUX0VRVUFMICgqQmxvYlN0YXRlLCAxKTsNCj4gPj4+ICsgIFVU X0FTU0VSVF9FUVVBTCAoKlNpemUsIDB4MDUwNDAzMDIpOw0KPiA+Pj4gKyAgVVRfQVNTRVJUX0VR VUFMICgqTWV0YWRhdGFMZW5ndGgsIDQpOw0KPiA+Pj4gKyAgVVRfQVNTRVJUX01FTV9FUVVBTCAo TWV0YWRhdGEsIEV4cGVjdGVkTWV0YWRhdGEsIDQpOw0KPiA+Pj4gKyAgRnJlZVBvb2wgKE1vY2tS ZXNwb25zZVJlc3VsdHMpOw0KPiA+Pj4gKyAgRnJlZVBvb2wgKEJsb2JTdGF0ZSk7DQo+ID4+PiAr ICBGcmVlUG9vbCAoU2l6ZSk7DQo+ID4+PiArICBGcmVlUG9vbCAoTWV0YWRhdGFMZW5ndGgpOw0K PiA+Pj4gKyAgRnJlZVBvb2wgKE1ldGFkYXRhKTsNCj4gPj4+ICsgIHJldHVybiBVTklUX1RFU1Rf UEFTU0VEOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICsvKioNCj4gPj4+ICsgIEBwYXJhbVtp bl0gIENvbnRleHQgICAgW09wdGlvbmFsXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBlbmFi bGVzOg0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAxKSB0ZXN0LWNhc2UgcmV1c2Ug d2l0aCB2YXJpZWQgcGFyYW1ldGVycyBhbmQNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgMikgdGVzdC1jYXNlIHJlLWVudHJ5IGZvciBUYXJnZXQgdGVzdHMgdGhhdCBuZWVkIGENCj4g Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgcmVib290LiAgVGhpcyBwYXJhbWV0ZXIgaXMg YSBWT0lEKiBhbmQgaXQgaXMgdGhlDQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIHJl c3BvbnNpYmlsaXR5IG9mIHRoZSB0ZXN0IGF1dGhvciB0byBlbnN1cmUgdGhhdCB0aGUNCj4gPj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHMgYXJlIHdlbGwgdW5kZXJzdG9vZCBi eSBhbGwgdGVzdCBjYXNlcyB0aGF0IG1heQ0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdW1lIGl0Lg0KPiA+Pj4gKyAgQHJldHZhbCAgVU5JVF9URVNUX1BBU1NFRCAgICAgICAg ICAgICBUaGUgVW5pdCB0ZXN0IGhhcyBjb21wbGV0ZWQgYW5kDQo+IHRoZQ0KPiA+PiB0ZXN0DQo+ ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugd2FzIHN1 Y2Nlc3NmdWwuDQo+ID4+PiArICBAcmV0dmFsICBVTklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQg IEEgdGVzdCBjYXNlIGFzc2VydGlvbiBoYXMNCj4gPj4gZmFpbGVkLg0KPiA+Pj4gKyoqLw0KPiA+ Pj4gK1VOSVRfVEVTVF9TVEFUVVMNCj4gPj4+ICtFRklBUEkNCj4gPj4+ICtTZXNzaW9uU3RhdElu dmFsaWRCdWZmZXIgKA0KPiA+Pj4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4g Pj4+ICsgICkNCj4gPj4+ICt7DQo+ID4+PiArICBVSU5UOCAgICAgICAqTWV0YWRhdGE7DQo+ID4+ PiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ID4+PiArICBWT0lEICAgICAgICAqTW9ja1Jlc3Bv bnNlUmVzdWx0cyA9IE5VTEw7DQo+ID4+PiArDQo+ID4+PiArICBNZXRhZGF0YSA9IE5VTEw7DQo+ ID4+PiArDQo+ID4+PiArICBNb2NrUmVzcG9uc2VSZXN1bHRzID0gKFVJTlQ4ICopQWxsb2NhdGVa ZXJvUG9vbCAoc2l6ZW9mDQo+ID4+IChWQUxJRF9CTE9CX1NUQVRfUkVTUE9OU0VfU0laRSkpOw0K PiA+Pj4gKyAgQ29weU1lbSAoTW9ja1Jlc3BvbnNlUmVzdWx0cywgJlZhbGlkQmxvYlN0YXRSZXNw b25zZSwNCj4gPj4gVkFMSURfQkxPQl9TVEFUX1JFU1BPTlNFX1NJWkUpOw0KPiA+Pj4gKw0KPiA+ Pj4gKyAgU3RhdHVzID0gTW9ja0lwbWlTdWJtaXRDb21tYW5kICgoVUlOVDggKilNb2NrUmVzcG9u c2VSZXN1bHRzLA0KPiA+PiBWQUxJRF9CTE9CX1NUQVRfUkVTUE9OU0VfU0laRSwgRUZJX1NVQ0NF U1MpOw0KPiA+Pj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+Pj4gKyAgICByZXR1 cm4gVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEOw0KPiA+Pj4gKyAgfQ0KPiA+Pj4gKw0KPiA+ Pj4gKyAgVVRfRVhQRUNUX0FTU0VSVF9GQUlMVVJFIChJcG1pQmxvYlRyYW5zZmVyU2Vzc2lvblN0 YXQgKDAsIDAsIDAsIDAsDQo+ID4+IE1ldGFkYXRhKSwgTlVMTCk7DQo+ID4+PiArDQo+ID4+PiAr ICBGcmVlUG9vbCAoTW9ja1Jlc3BvbnNlUmVzdWx0cyk7DQo+ID4+PiArICByZXR1cm4gVU5JVF9U RVNUX1BBU1NFRDsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArLyoqDQo+ID4+PiArICBAcGFy YW1baW5dICBDb250ZXh0ICAgIFtPcHRpb25hbF0gQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQg ZW5hYmxlczoNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgMSkgdGVzdC1jYXNlIHJl dXNlIHdpdGggdmFyaWVkIHBhcmFtZXRlcnMgYW5kDQo+ID4+PiArICAgICAgICAgICAgICAgICAg ICAgICAgIDIpIHRlc3QtY2FzZSByZS1lbnRyeSBmb3IgVGFyZ2V0IHRlc3RzIHRoYXQgbmVlZCBh DQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIHJlYm9vdC4gIFRoaXMgcGFyYW1ldGVy IGlzIGEgVk9JRCogYW5kIGl0IGlzIHRoZQ0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICByZXNwb25zaWJpbGl0eSBvZiB0aGUgdGVzdCBhdXRob3IgdG8gZW5zdXJlIHRoYXQgdGhlDQo+ ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzIGFyZSB3ZWxsIHVuZGVyc3Rv b2QgYnkgYWxsIHRlc3QgY2FzZXMgdGhhdCBtYXkNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3VtZSBpdC4NCj4gPj4+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9QQVNTRUQgICAg ICAgICAgICAgVGhlIFVuaXQgdGVzdCBoYXMgY29tcGxldGVkIGFuZA0KPiB0aGUNCj4gPj4gdGVz dA0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHdh cyBzdWNjZXNzZnVsLg0KPiA+Pj4gKyAgQHJldHZhbCAgVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJ TEVEICBBIHRlc3QgY2FzZSBhc3NlcnRpb24gaGFzDQo+ID4+IGZhaWxlZC4NCj4gPj4+ICsqKi8N Cj4gPj4+ICtVTklUX1RFU1RfU1RBVFVTDQo+ID4+PiArRUZJQVBJDQo+ID4+PiArV3JpdGVNZXRh VmFsaWRSZXNwb25zZSAoDQo+ID4+PiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4dA0K PiA+Pj4gKyAgKQ0KPiA+Pj4gK3sNCj4gPj4+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPj4+ ICsgIFZPSUQgICAgICAgICpNb2NrUmVzcG9uc2VSZXN1bHRzID0gTlVMTDsNCj4gPj4+ICsNCj4g Pj4+ICsgIE1vY2tSZXNwb25zZVJlc3VsdHMgPSAoVUlOVDggKilBbGxvY2F0ZVplcm9Qb29sIChz aXplb2YNCj4gPj4gKFZBTElEX05PREFUQV9SRVNQT05TRV9TSVpFKSk7DQo+ID4+PiArICBDb3B5 TWVtIChNb2NrUmVzcG9uc2VSZXN1bHRzLCAmVmFsaWROb0RhdGFSZXNwb25zZSwNCj4gPj4gVkFM SURfTk9EQVRBX1JFU1BPTlNFX1NJWkUpOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgU3RhdHVzID0gTW9j a0lwbWlTdWJtaXRDb21tYW5kICgoVUlOVDggKilNb2NrUmVzcG9uc2VSZXN1bHRzLA0KPiA+PiBW QUxJRF9OT0RBVEFfUkVTUE9OU0VfU0laRSwgRUZJX1NVQ0NFU1MpOw0KPiA+Pj4gKyAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+Pj4gKyAgICByZXR1cm4gVU5JVF9URVNUX0VSUk9SX1RF U1RfRkFJTEVEOw0KPiA+Pj4gKyAgfQ0KPiA+Pj4gKw0KPiA+Pj4gKyAgU3RhdHVzID0gSXBtaUJs b2JUcmFuc2ZlcldyaXRlTWV0YSAoMCwgMCwgTlVMTCwgMCk7DQo+ID4+PiArDQo+ID4+PiArICBV VF9BU1NFUlRfU1RBVFVTX0VRVUFMIChTdGF0dXMsIEVGSV9TVUNDRVNTKTsNCj4gPj4+ICsgIEZy ZWVQb29sIChNb2NrUmVzcG9uc2VSZXN1bHRzKTsNCj4gPj4+ICsgIHJldHVybiBVTklUX1RFU1Rf UEFTU0VEOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICsvKioNCj4gPj4+ICsgIEluaXRpYWxp emUgdGhlIHVuaXQgdGVzdCBmcmFtZXdvcmssIHN1aXRlLCBhbmQgdW5pdCB0ZXN0cyBmb3IgdGhl DQo+ID4+PiArICBzYW1wbGUgdW5pdCB0ZXN0cyBhbmQgcnVuIHRoZSB1bml0IHRlc3RzLg0KPiA+ Pj4gKyAgQHJldHZhbCAgRUZJX1NVQ0NFU1MgICAgICAgICAgIEFsbCB0ZXN0IGNhc2VzIHdlcmUg ZGlzcGF0Y2hlZC4NCj4gPj4+ICsgIEByZXR2YWwgIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBUaGVy ZSBhcmUgbm90IGVub3VnaCByZXNvdXJjZXMNCj4gPj4gYXZhaWxhYmxlIHRvDQo+ID4+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZSB0aGUgdW5pdCB0ZXN0cy4N Cj4gPj4+ICsqKi8NCj4gPj4+ICtFRklfU1RBVFVTDQo+ID4+PiArRUZJQVBJDQo+ID4+PiArU2V0 dXBBbmRSdW5Vbml0VGVzdHMgKA0KPiA+Pj4gKyAgVk9JRA0KPiA+Pj4gKyAgKQ0KPiA+Pj4gK3sN Cj4gPj4+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4+PiArICBV TklUX1RFU1RfRlJBTUVXT1JLX0hBTkRMRSAgRnJhbWV3b3JrOw0KPiA+Pj4gKyAgVU5JVF9URVNU X1NVSVRFX0hBTkRMRSAgICAgIElwbWlCbG9iVHJhbnNmZXI7DQo+ID4+PiArDQo+ID4+PiArICBG cmFtZXdvcmsgPSBOVUxMOw0KPiA+Pj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiJWE6IHYlYVxu IiwgVU5JVF9URVNUX05BTUUsDQo+ID4+IFVOSVRfVEVTVF9WRVJTSU9OKSk7DQo+ID4+PiArDQo+ ID4+PiArICBTdGF0dXMgPSBJbml0VW5pdFRlc3RGcmFtZXdvcmsgKCZGcmFtZXdvcmssIFVOSVRf VEVTVF9OQU1FLA0KPiA+PiBnRWZpQ2FsbGVyQmFzZU5hbWUsIFVOSVRfVEVTVF9WRVJTSU9OKTsN Cj4gPj4+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPj4+ICsgICAgREVCVUcgKChE RUJVR19FUlJPUiwgIkZhaWxlZCB0byBzZXR1cCBUZXN0IEZyYW1ld29yay4gRXhpdGluZw0KPiB3 aXRoDQo+ID4+IHN0YXR1cyA9ICVyXG4iLCBTdGF0dXMpKTsNCj4gPj4+ICsgICAgQVNTRVJUIChG QUxTRSk7DQo+ID4+PiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ ID4+PiArICAvLw0KPiA+Pj4gKyAgLy8gUG9wdWxhdGUgdGhlIFVuaXQgVGVzdCBTdWl0ZS4NCj4g Pj4+ICsgIC8vDQo+ID4+PiArICBTdGF0dXMgPSBDcmVhdGVVbml0VGVzdFN1aXRlICgmSXBtaUJs b2JUcmFuc2ZlciwgRnJhbWV3b3JrLCAiSVBNSQ0KPiA+PiBCbG9iIFRyYW5zZmVyIFRlc3RzIiwg IlVuaXRUZXN0LklwbWlCbG9iVHJhbnNmZXJDQiIsIE5VTEwsIE5VTEwpOw0KPiA+Pj4gKyAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+Pj4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAi RmFpbGVkIGluIENyZWF0ZVVuaXRUZXN0U3VpdGUgZm9yIElQTUkgQmxvYg0KPiA+PiBUcmFuc2Zl ciBUZXN0c1xuIikpOw0KPiA+Pj4gKyAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsN Cj4gPj4+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gPj4+ICsgIH0NCj4gPj4+ICsNCj4gPj4+ICsg IC8vIENhbGN1bGF0ZUNyYzE2DQo+ID4+PiArICBTdGF0dXMgPSBBZGRUZXN0Q2FzZSAoSXBtaUJs b2JUcmFuc2ZlciwgIlRlc3QgQ1JDIENhbGN1bGF0aW9uIiwNCj4gPj4gIkdvb2RDcmMiLCBHb29k Q3JjLCBOVUxMLCBOVUxMLCBOVUxMKTsNCj4gPj4+ICsgIFN0YXR1cyA9IEFkZFRlc3RDYXNlIChJ cG1pQmxvYlRyYW5zZmVyLCAiVGVzdCBCYWQgQ1JDIENhbGN1bGF0aW9uIiwNCj4gPj4gIkJhZENy YyIsIEJhZENyYywgTlVMTCwgTlVMTCwgTlVMTCk7DQo+ID4+PiArICAvLyBJcG1pQmxvYlRyYW5z ZmVyU2VuZElwbWkNCj4gPj4+ICsgIFN0YXR1cyA9IEFkZFRlc3RDYXNlIChJcG1pQmxvYlRyYW5z ZmVyLCAiU2VuZCBJUE1JIHJldHVybnMgYmFkDQo+ID4+IGNvbXBsZXRpb24iLCAiU2VuZElwbWlC YWRDb21wbGV0aW9uIiwgU2VuZElwbWlCYWRDb21wbGV0aW9uLCBOVUxMLA0KPiA+PiBOVUxMLCBO VUxMKTsNCj4gPj4+ICsgIFN0YXR1cyA9IEFkZFRlc3RDYXNlIChJcG1pQmxvYlRyYW5zZmVyLCAi U2VuZCBJUE1JIHJldHVybnMNCj4gc3VjY2Vzc2Z1bGx5DQo+ID4+IHdpdGggbm8gZGF0YSIsICJT ZW5kSXBtaU5vRGF0YVJlc3BvbnNlIiwgU2VuZElwbWlOb0RhdGFSZXNwb25zZSwNCj4gPj4gTlVM TCwgTlVMTCwgTlVMTCk7DQo+ID4+PiArICBTdGF0dXMgPSBBZGRUZXN0Q2FzZSAoSXBtaUJsb2JU cmFuc2ZlciwgIlNlbmQgSVBNSSByZXR1cm5zDQo+IHN1Y2Nlc3NmdWxseQ0KPiA+PiB3aXRoIGJh ZCBPRU4iLCAiU2VuZElwbWlCYWRPZW5SZXNwb25zZSIsIFNlbmRJcG1pQmFkT2VuUmVzcG9uc2Us DQo+ID4+IE5VTEwsIE5VTEwsIE5VTEwpOw0KPiA+Pj4gKyAgU3RhdHVzID0gQWRkVGVzdENhc2Ug KElwbWlCbG9iVHJhbnNmZXIsICJTZW5kIElQTUkgcmV0dXJucw0KPiBzdWNjZXNzZnVsbHkNCj4g Pj4gd2l0aCBiYWQgQ1JDIiwgIlNlbmRJcG1pQmFkQ3JjUmVzcG9uc2UiLCBTZW5kSXBtaUJhZENy Y1Jlc3BvbnNlLA0KPiA+PiBOVUxMLCBOVUxMLCBOVUxMKTsNCj4gPj4+ICsgIFN0YXR1cyA9IEFk ZFRlc3RDYXNlIChJcG1pQmxvYlRyYW5zZmVyLCAiU2VuZCBJUE1JIHJldHVybnMgd2l0aA0KPiB2 YWxpZA0KPiA+PiBHZXRDb3VudCBkYXRhIiwgIlNlbmRJcG1pVmFsaWRDb3VudFJlc3BvbnNlIiwN Cj4gPj4gU2VuZElwbWlWYWxpZENvdW50UmVzcG9uc2UsIE5VTEwsIE5VTEwsIE5VTEwpOw0KPiA+ Pj4gKyAgLy8gSXBtaUJsb2JUcmFuc2ZlckdldENvdW50DQo+ID4+PiArICBTdGF0dXMgPSBBZGRU ZXN0Q2FzZSAoSXBtaUJsb2JUcmFuc2ZlciwgIkdldENvdW50IGNhbGwgd2l0aCB2YWxpZA0KPiBk YXRhIiwNCj4gPj4gIkdldENvdW50VmFsaWRDb3VudFJlc3BvbnNlIiwgR2V0Q291bnRWYWxpZENv dW50UmVzcG9uc2UsIE5VTEwsDQo+ID4+IE5VTEwsIE5VTEwpOw0KPiA+Pj4gKyAgLy8gSXBtaUJs b2JUcmFuc2ZlckVudW1lcmF0ZQ0KPiA+Pj4gKyAgU3RhdHVzID0gQWRkVGVzdENhc2UgKElwbWlC bG9iVHJhbnNmZXIsICJFbnVtZXJhdGUgY2FsbCB3aXRoIHZhbGlkDQo+IGRhdGEiLA0KPiA+PiAi RW51bWVyYXRlVmFsaWRSZXNwb25zZSIsIEVudW1lcmF0ZVZhbGlkUmVzcG9uc2UsIE5VTEwsIE5V TEwsDQo+IE5VTEwpOw0KPiA+Pj4gKyAgU3RhdHVzID0gQWRkVGVzdENhc2UgKElwbWlCbG9iVHJh bnNmZXIsICJFbnVtZXJhdGUgY2FsbCB3aXRoIGludmFsaWQNCj4gPj4gb3V0cHV0IGJ1ZmZlciIs ICJFbnVtZXJhdGVJbnZhbGlkQnVmZmVyIiwgRW51bWVyYXRlSW52YWxpZEJ1ZmZlciwgTlVMTCwN Cj4gPj4gTlVMTCwgTlVMTCk7DQo+ID4+PiArICAvLyBJcG1pQmxvYlRyYW5zZmVyT3Blbg0KPiA+ Pj4gKyAgU3RhdHVzID0gQWRkVGVzdENhc2UgKElwbWlCbG9iVHJhbnNmZXIsICJPcGVuIGNhbGwg d2l0aCB2YWxpZCBkYXRhIiwNCj4gPj4gIk9wZW5WYWxpZFJlc3BvbnNlIiwgT3BlblZhbGlkUmVz cG9uc2UsIE5VTEwsIE5VTEwsIE5VTEwpOw0KPiA+Pj4gKyAgLy8gSXBtaUJsb2JUcmFuc2ZlclJl YWQNCj4gPj4+ICsgIFN0YXR1cyA9IEFkZFRlc3RDYXNlIChJcG1pQmxvYlRyYW5zZmVyLCAiUmVh ZCBjYWxsIHdpdGggdmFsaWQgZGF0YSIsDQo+ID4+ICJSZWFkVmFsaWRSZXNwb25zZSIsIFJlYWRW YWxpZFJlc3BvbnNlLCBOVUxMLCBOVUxMLCBOVUxMKTsNCj4gPj4+ICsgIFN0YXR1cyA9IEFkZFRl c3RDYXNlIChJcG1pQmxvYlRyYW5zZmVyLCAiUmVhZCBjYWxsIHdpdGggaW52YWxpZA0KPiBidWZm ZXIiLA0KPiA+PiAiUmVhZEludmFsaWRCdWZmZXIiLCBSZWFkSW52YWxpZEJ1ZmZlciwgTlVMTCwg TlVMTCwgTlVMTCk7DQo+ID4+PiArICAvLyBJcG1pQmxvYlRyYW5zZmVyV3JpdGUNCj4gPj4+ICsg IFN0YXR1cyA9IEFkZFRlc3RDYXNlIChJcG1pQmxvYlRyYW5zZmVyLCAiV3JpdGUgY2FsbCB3aXRo IHZhbGlkIGRhdGEiLA0KPiA+PiAiV3JpdGVWYWxpZFJlc3BvbnNlIiwgV3JpdGVWYWxpZFJlc3Bv bnNlLCBOVUxMLCBOVUxMLCBOVUxMKTsNCj4gPj4+ICsgIC8vIElwbWlCbG9iVHJhbnNmZXJDb21t aXQNCj4gPj4+ICsgIFN0YXR1cyA9IEFkZFRlc3RDYXNlIChJcG1pQmxvYlRyYW5zZmVyLCAiQ29t bWl0IGNhbGwgd2l0aCB2YWxpZCBkYXRhIiwNCj4gPj4gIkNvbW1pdFZhbGlkUmVzcG9uc2UiLCBD b21taXRWYWxpZFJlc3BvbnNlLCBOVUxMLCBOVUxMLCBOVUxMKTsNCj4gPj4+ICsgIC8vIElwbWlC bG9iVHJhbnNmZXJDbG9zZQ0KPiA+Pj4gKyAgU3RhdHVzID0gQWRkVGVzdENhc2UgKElwbWlCbG9i VHJhbnNmZXIsICJDbG9zZSBjYWxsIHdpdGggdmFsaWQgZGF0YSIsDQo+ID4+ICJDbG9zZVZhbGlk UmVzcG9uc2UiLCBDbG9zZVZhbGlkUmVzcG9uc2UsIE5VTEwsIE5VTEwsIE5VTEwpOw0KPiA+Pj4g KyAgLy8gSXBtaUJsb2JUcmFuc2ZlckRlbGV0ZQ0KPiA+Pj4gKyAgU3RhdHVzID0gQWRkVGVzdENh c2UgKElwbWlCbG9iVHJhbnNmZXIsICJEZWxldGUgY2FsbCB3aXRoIHZhbGlkIGRhdGEiLA0KPiA+ PiAiRGVsZXRlVmFsaWRSZXNwb25zZSIsIERlbGV0ZVZhbGlkUmVzcG9uc2UsIE5VTEwsIE5VTEws IE5VTEwpOw0KPiA+Pj4gKyAgLy8gSXBtaUJsb2JUcmFuc2ZlclN0YXQNCj4gPj4+ICsgIFN0YXR1 cyA9IEFkZFRlc3RDYXNlIChJcG1pQmxvYlRyYW5zZmVyLCAiQmxvYiBTdGF0IGNhbGwgd2l0aCB2 YWxpZA0KPiBkYXRhIiwNCj4gPj4gIkJsb2JTdGF0VmFsaWRSZXNwb25zZSIsIEJsb2JTdGF0VmFs aWRSZXNwb25zZSwgTlVMTCwgTlVMTCwgTlVMTCk7DQo+ID4+PiArICBTdGF0dXMgPSBBZGRUZXN0 Q2FzZSAoSXBtaUJsb2JUcmFuc2ZlciwgIkJsb2IgU3RhdCBjYWxsIHdpdGggaW52YWxpZA0KPiA+ PiBidWZmZXIiLCAiQmxvYlN0YXRJbnZhbGlkQnVmZmVyIiwgQmxvYlN0YXRJbnZhbGlkQnVmZmVy LCBOVUxMLCBOVUxMLA0KPiBOVUxMKTsNCj4gPj4+ICsgIC8vIElwbWlCbG9iVHJhbnNmZXJTZXNz aW9uU3RhdA0KPiA+Pj4gKyAgU3RhdHVzID0gQWRkVGVzdENhc2UgKElwbWlCbG9iVHJhbnNmZXIs ICJTZXNzaW9uIFN0YXQgY2FsbCB3aXRoIHZhbGlkDQo+ID4+IGRhdGEiLCAiU2Vzc2lvblN0YXRW YWxpZFJlc3BvbnNlIiwgU2Vzc2lvblN0YXRWYWxpZFJlc3BvbnNlLCBOVUxMLA0KPiBOVUxMLA0K PiA+PiBOVUxMKTsNCj4gPj4+ICsgIFN0YXR1cyA9IEFkZFRlc3RDYXNlIChJcG1pQmxvYlRyYW5z ZmVyLCAiU2Vzc2lvbiBTdGF0IGNhbGwgd2l0aCBpbnZhbGlkDQo+ID4+IGJ1ZmZlciIsICJTZXNz aW9uU3RhdEludmFsaWRCdWZmZXIiLCBTZXNzaW9uU3RhdEludmFsaWRCdWZmZXIsIE5VTEwsIE5V TEwsDQo+ID4+IE5VTEwpOw0KPiA+Pj4gKyAgLy8gSXBtaUJsb2JUcmFuc2ZlcldyaXRlTWV0YQ0K PiA+Pj4gKyAgU3RhdHVzID0gQWRkVGVzdENhc2UgKElwbWlCbG9iVHJhbnNmZXIsICJXcml0ZU1l dGEgY2FsbCB3aXRoIHZhbGlkDQo+IGRhdGEiLA0KPiA+PiAiV3JpdGVNZXRhVmFsaWRSZXNwb25z ZSIsIFdyaXRlTWV0YVZhbGlkUmVzcG9uc2UsIE5VTEwsIE5VTEwsDQo+IE5VTEwpOw0KPiA+Pj4g Kw0KPiA+Pj4gKyAgLy8gRXhlY3V0ZSB0aGUgdGVzdHMuDQo+ID4+PiArICBTdGF0dXMgPSBSdW5B bGxUZXN0U3VpdGVzIChGcmFtZXdvcmspOw0KPiA+Pj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPj4+ ICt9DQo+ID4+PiArDQo+ID4+PiArLyoqDQo+ID4+PiArICBTdGFuZGFyZCBVRUZJIGVudHJ5IHBv aW50IGZvciB0YXJnZXQgYmFzZWQNCj4gPj4+ICsgIHVuaXQgdGVzdCBleGVjdXRpb24gZnJvbSBV RUZJIFNoZWxsLg0KPiA+Pj4gKyoqLw0KPiA+Pj4gK0VGSV9TVEFUVVMNCj4gPj4+ICtFRklBUEkN Cj4gPj4+ICtCYXNlTGliVW5pdFRlc3RBcHBFbnRyeSAoDQo+ID4+PiArICBJTiBFRklfSEFORExF ICAgICAgICBJbWFnZUhhbmRsZSwNCj4gPj4+ICsgIElOIEVGSV9TWVNURU1fVEFCTEUgICpTeXN0 ZW1UYWJsZQ0KPiA+Pj4gKyAgKQ0KPiA+Pj4gK3sNCj4gPj4+ICsgIHJldHVybiBTZXR1cEFuZFJ1 blVuaXRUZXN0cyAoKTsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArLyoqDQo+ID4+PiArICBT dGFuZGFyZCBQT1NJWCBDIGVudHJ5IHBvaW50IGZvciBob3N0IGJhc2VkIHVuaXQgdGVzdCBleGVj dXRpb24uDQo+ID4+PiArKiovDQo+ID4+PiAraW50DQo+ID4+PiArbWFpbiAoDQo+ID4+PiArICBp bnQgICBhcmdjLA0KPiA+Pj4gKyAgY2hhciAgKmFyZ3ZbXQ0KPiA+Pj4gKyAgKQ0KPiA+Pj4gK3sN Cj4gPj4+ICsgIHJldHVybiBTZXR1cEFuZFJ1blVuaXRUZXN0cyAoKTsNCj4gPj4+ICt9DQo+ID4+ PiBkaWZmIC0tZ2l0DQo+ID4+DQo+IGEvRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9Vbml2ZXJz YWwvSXBtaUJsb2JUcmFuc2ZlckR4ZS9SZWFkbWUubWQNCj4gPj4NCj4gYi9GZWF0dXJlcy9NYW5h Z2VhYmlsaXR5UGtnL1VuaXZlcnNhbC9JcG1pQmxvYlRyYW5zZmVyRHhlL1JlYWRtZS5tZA0KPiA+ Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPj4+IGluZGV4IDAwMDAwMDAwMDAuLjQ3ODAwZjU4 MDENCj4gPj4+IC0tLSAvZGV2L251bGwNCj4gPj4+ICsrKw0KPiA+Pg0KPiBiL0ZlYXR1cmVzL01h bmFnZWFiaWxpdHlQa2cvVW5pdmVyc2FsL0lwbWlCbG9iVHJhbnNmZXJEeGUvUmVhZG1lLm1kDQo+ ID4+PiBAQCAtMCwwICsxLDI0IEBADQo+ID4+PiArIyBJUE1JIEJsb2IgVHJhbnNmZXIgSW50ZXJm YWNlIERyaXZlcg0KPiA+Pj4gKw0KPiA+Pj4gK1RoaXMgRFhFIG1vZHVsZSBpcyBhIFVFRkkgaW1w bGVtZW50YXRpb24gb2YgdGhlIFBob3JwaG9yIEJsb2INCj4gVHJhbnNmZXINCj4gPj4gSW50ZXJm YWNlIGRlZmluZWQgaW4gT3BlbkJNQw0KPiA+Pj4gK2h0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYm1j L3Bob3NwaG9yLWlwbWktYmxvYnMNCj4gPj4+ICsNCj4gPj4+ICsjIyBOVklESUEncyBPcGVuQk1D IGltcGxlbWVudHMgdGhpcyBpbnRlcmZhY2UgYXMgYSBwcm90b2NvbCwgYWxsb3dpbmcNCj4gPj4g VUVGSSBhbmQgQk1DIHRvIHRyYW5zZmVyIGJsb2JzIG92ZXIgSVBNSS4NCj4gPj4+ICsNCj4gPj4+ ICsjIyMgVXNhZ2U6DQo+ID4+PiArQW55IERYRSBtb2R1bGUgdGhhdCB3aXNoZXMgdG8gdXNlIHRo aXMgcHJvdG9jb2wgc2hvdWxkIGRvIHRoZQ0KPiBmb2xsb3dpbmc6DQo+ID4+PiArMSkgVGhlIG1v ZHVsZSBzaG91bGQgaGF2ZSBhIGRlcGVuZGVuY3kgb24NCj4gPj4gZ0Vka2lpSXBtaUJsb2JUcmFu c2ZlclByb3RvY29sR3VpZCBpbiBpdHMgaW5mICJEZXBleCIgc2VjdGlvbg0KPiA+Pj4gKzIpIFRo ZSBtb2R1bGUgc2hvdWxkIGxpc3QgZ0Vka2lpSXBtaUJsb2JUcmFuc2ZlclByb3RvY29sR3VpZCBp biBpdHMgaW5mDQo+ID4+ICJQcm90b2NvbCIgc2VjdGlvbg0KPiA+Pj4gKzMpIFRoZSBtb2R1bGUn cyBlbnRyeSBwb2ludCBzaG91bGQgZG8gYSBMb2NhdGVQcm90b2NvbCBvbg0KPiA+PiBnRWRraWlJ cG1pQmxvYlRyYW5zZmVyUHJvdG9jb2xHdWlkDQo+ID4+PiArDQo+ID4+PiArIyMjIEEgc2FtcGxl IGZsb3cgb2YgcHJvdG9jb2wgdXNhZ2UgaXMgYXMgZm9sbG93czoNCj4gPj4+ICsxKSBBIGNhbGwg dG8gSXBtaUJsb2JUcmFuc2Zlck9wZW4gKCkNCj4gPj4+ICsyKSBJdGVyYXRpdmUgY2FsbHMgdG8g SXBtaUJsb2JUcmFuc2ZlcldyaXRlDQo+ID4+PiArMykgQSBjYWxsIHRvIElwbWlCbG9iVHJhbnNm ZXJDbG9zZSAoKQ0KPiA+Pj4gKw0KPiA+Pj4gKyMjIyBVbml0IFRlc3RzOg0KPiA+Pj4gK0lwbWlC bG9iVHJhbnNmZXJEeGUvVW5pdFRlc3QvIGNvbnRhaW5zIGhvc3QgYmFzZWQgdW5pdCB0ZXN0cyBv ZiB0aGlzDQo+ID4+IGltcGxlbWVudGF0aW9uLg0KPiA+Pj4gK0FueSBjaGFuZ2VzIHRvIElwbWlC bG9iVHJhbnNmZXJEeGUgc2hvdWxkIGluY2x1ZGUgcHJvb2Ygb2Ygc3VjY2Vzc2Z1bA0KPiA+PiB1 bml0IHRlc3RzLg0KPiA+Pj4gKw0KPiA+Pj4gKyMjIyBEZWJ1Z2dpbmcNCj4gPj4+ICtUbyBhc3Np c3QgaW4gZGVidWdnaW5nIGFueSBpc3N1ZXMsIGNoYW5nZSBCTE9CX1RSQU5TRkVSX0RFQlVHIHRv IDENCj4gPj4+IC0tDQo+ID4+PiAyLjE3LjENCj4gPj4+DQo=