From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from EUR03-DB5-obe.outbound.protection.outlook.com (EUR03-DB5-obe.outbound.protection.outlook.com [40.107.4.41]) by mx.groups.io with SMTP id smtpd.web11.16698.1607618623942529494 for ; Thu, 10 Dec 2020 08:43:44 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@armh.onmicrosoft.com header.s=selector2-armh-onmicrosoft-com header.b=cbLWUsnD; spf=pass (domain: arm.com, ip: 40.107.4.41, mailfrom: samer.el-haj-mahmoud@arm.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mwIYgyfJ1tG5Rw/B4TTPPHzi410lQt72xxep4hooGzw=; b=cbLWUsnDh/EPq1C4vXyGJnuTMW1ChWpc4wl+eqN4UFBIkbcecFrMZSEfLM3OWze/0ld0FTDrExhTBm/Of26ipl+4dGDJDQ42kDDn1UJMume2LOgqOMFxzJr8lexhdl+fusngSSiTTju1+ge/uf84TlEkiAWSKGAagXT6DsLa77Q= Received: from AM5PR0301CA0004.eurprd03.prod.outlook.com (2603:10a6:206:14::17) by AM0PR08MB4513.eurprd08.prod.outlook.com (2603:10a6:208:147::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3632.21; Thu, 10 Dec 2020 16:43:41 +0000 Received: from VE1EUR03FT004.eop-EUR03.prod.protection.outlook.com (2603:10a6:206:14:cafe::cf) by AM5PR0301CA0004.outlook.office365.com (2603:10a6:206:14::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3654.12 via Frontend Transport; Thu, 10 Dec 2020 16:43:41 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; edk2.groups.io; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;edk2.groups.io; dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by VE1EUR03FT004.mail.protection.outlook.com (10.152.18.106) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3654.12 via Frontend Transport; Thu, 10 Dec 2020 16:43:40 +0000 Received: ("Tessian outbound 6af064f543d4:v71"); Thu, 10 Dec 2020 16:43:40 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 398fd9c58c8aab3d X-CR-MTA-TID: 64aa7808 Received: from 060f584c0db4.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id A8280734-FA62-454E-9C3E-2EF776D4EC0A.1; Thu, 10 Dec 2020 16:43:23 +0000 Received: from EUR02-VE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 060f584c0db4.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Thu, 10 Dec 2020 16:43:23 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TdZg3hnYQiQc3nDlb+gZmKcvxmXISiYYkcNq1BhcIJViwdNb3U33/x2H3u2d5PLsDInOQ47R0y/bhvjQ/tteBrVJSgB9rvibRDVzPsBwbLN628ZucIdsxgflZeb5k9eBgf829V2lmNTQUperEKtJp9Hri79vLIgHQrA5DqdOt1PHXVf5E5SOWNSLuoo+z+5c0uvBX352pQvkJyIChm2qBzB5d/9jCGqFWJARGkcTiYLyomQnMkl2bWXWBnzS9Z/DOsysXjB6+6c51HdP/xITg6GiU1cLxbu5LDDoKHoCXseagMC/0uTX0y7v0+8vzRj1isFRpphRVSFZ79OPmV3TCw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mwIYgyfJ1tG5Rw/B4TTPPHzi410lQt72xxep4hooGzw=; b=T+zgD4pZBnGtHO+LnROKGjdI+VAEl56uSGsgEgfphcfBIRwm66XdClMu4IaR0RTjEQfFNQn3ImyIQyIQFSEu5EmoM3ukEWG6YBkmRdQi/kHp4lt6g81SsN2BFs7/nrz+hrqtcfvVvl6GlCqPAdFuNM+//AkRe7LZQ4ekaHndagAsnF467ghKn9MPF0838snZk5+71FXeHwCRYJWzCaCKO6v8Oma+ci/LDFqD8RsoGPgXCOoXMEeUUXOo0U3gDP/OGpQK//a+YfafsU36RyPDfN0zY/RiDazWP8+OoJuwLjht+N27ZaGl93E40KWiwWo8mvM2hF/EFnaCMfUnYtQ/lw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mwIYgyfJ1tG5Rw/B4TTPPHzi410lQt72xxep4hooGzw=; b=cbLWUsnDh/EPq1C4vXyGJnuTMW1ChWpc4wl+eqN4UFBIkbcecFrMZSEfLM3OWze/0ld0FTDrExhTBm/Of26ipl+4dGDJDQ42kDDn1UJMume2LOgqOMFxzJr8lexhdl+fusngSSiTTju1+ge/uf84TlEkiAWSKGAagXT6DsLa77Q= Received: from DB7PR08MB3260.eurprd08.prod.outlook.com (2603:10a6:5:21::23) by DB8PR08MB5321.eurprd08.prod.outlook.com (2603:10a6:10:11c::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3654.12; Thu, 10 Dec 2020 16:43:21 +0000 Received: from DB7PR08MB3260.eurprd08.prod.outlook.com ([fe80::a1f1:ccfd:b17f:a490]) by DB7PR08MB3260.eurprd08.prod.outlook.com ([fe80::a1f1:ccfd:b17f:a490%5]) with mapi id 15.20.3654.012; Thu, 10 Dec 2020 16:43:21 +0000 From: "Samer El-Haj-Mahmoud" To: "Chang, Abner (HPS SW/FW Technologist)" , "devel@edk2.groups.io" CC: Liming Gao , Leif Lindholm , "Wang, Nickle (HPS SW)" , "O'Hanley, Peter (EXL)" , Samer El-Haj-Mahmoud Subject: Re: [edk2-devel] [PATCH v5 1/6] RedfishPkg/Ucs2Utf8lib: UCS2 to UFT8 manipulation library Thread-Topic: [edk2-devel] [PATCH v5 1/6] RedfishPkg/Ucs2Utf8lib: UCS2 to UFT8 manipulation library Thread-Index: AQHWzQ58Fb40FbSVP021F+9KDWsWMqnwXACQgAAK74CAACWhwA== Date: Thu, 10 Dec 2020 16:43:21 +0000 Message-ID: References: <20201208021048.9104-1-abner.chang@hpe.com> <20201208021048.9104-2-abner.chang@hpe.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: Authentication-Results-Original: hpe.com; dkim=none (message not signed) header.d=none;hpe.com; dmarc=none action=none header.from=arm.com; x-originating-ip: [99.132.126.10] x-ms-publictraffictype: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: b5ffcca4-6332-4872-5d4a-08d89d2abfd8 x-ms-traffictypediagnostic: DB8PR08MB5321:|AM0PR08MB4513: x-ms-exchange-transport-forked: True X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true nodisclaimer: true x-ms-oob-tlc-oobclassifiers: OLM:341;OLM:341; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: dM7WLYx6G7R6KPpnESgMFmNMscznMQQFgMZTV2tRFakx/3MvlRW5+IDojweFpsSK+Sw93Rym87QWuj2BLkOS1Mq7XjenR2a0tqTKLtM3MBYkW7lsA19Xb4oc2LrTrA0+eLScQfC/ZQPFyax2ShmaYQIxaBqzz/LsJRpIjiPFxBB95Jo51YkMxmoFBMY/Vo2S24YZqaYKO5+Nl9j+HgoTpZlF+cBVNDXneK5xVxlRsfaWyp9iXoljPmWLwwqy5COzTHsTroEeMxmVRNKCYDoFQSENsx9RFKc89r8DDfyX8tRZ9pq8+cKF2GjRvql6IufQ X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB7PR08MB3260.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(376002)(346002)(396003)(366004)(39860400002)(8936002)(76116006)(30864003)(54906003)(296002)(66476007)(5660300002)(86362001)(66556008)(66446008)(478600001)(26005)(110136005)(83380400001)(66946007)(186003)(52536014)(316002)(19627235002)(4326008)(64756008)(71200400001)(55016002)(6506007)(9686003)(8676002)(7696005)(53546011)(33656002)(2906002)(579004)(559001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: =?utf-8?B?OERqSm8yUkN1dTdmR1lNRUtiN0xZcDFxMlZiK3dSMGIwWDFYaWdsTkpuenlo?= =?utf-8?B?d1lJOW02R3BuQ2hTWGpHUWJJM1FBNXlMb3hraXVYK2MzNkZUTFZ2YkNtUmho?= =?utf-8?B?SnllSVUwSEVoWWxQc0dhR25jdGZCK0FlcVNKUkE1WTAvTGpMWmNsaSsrbVQ0?= =?utf-8?B?M3orMERtL1BRMUtpN3Jpb1JIZUtUS0M5MVFwUU5ma1I0S25DTWhRTldDck9F?= =?utf-8?B?Z2hvZFoyYnRtR2lycFliVC91cERrZ2RWak8vYThzNVhoTWxyNitaeW9oZTE1?= =?utf-8?B?UWZ1N2lMa2tRZW1QSE95UHFnM2FKTEpJVjhhajhkWG83YVF3dkhBTmltbVlE?= =?utf-8?B?bFRKMktHNVAycENsWEFqR3JKZ2lGRTRGZTZIV2U5Z0FPbXU4V1lDNVdIeXhp?= =?utf-8?B?ZVk2SmQwTG1xdzFVajNXR1RhUjcxZGxUQ3IyYnRybW1TdzV5UUpNVXdVN2dS?= =?utf-8?B?UHJnVmtwcVZhaEovUDZ4cU82OGh6dUkwYlU2dlVhV1I2Mm1LNlR1Vjd6RHA0?= =?utf-8?B?UGJNUVlkbGptbEw5cmZsVXpOMEk0QTVYdDNBNXlpV25pbVQ2SFJSeFdyaUl5?= =?utf-8?B?ckRwd3ZOL3UxU25SNndQcmpyb1pCalE0bGd3Y1RkK2JQSW5VSHJnUTNIbjR5?= =?utf-8?B?Zi9MaVBDWjJQTDR0djJITmZEQmdCNVlJVy9kMTRaOW50OGdTVFBTdGdQeTg5?= =?utf-8?B?R2pMSEVOYjBSZmhhZHJrQWQ0enhhMjRzN2tTVjFkenlXN1pYandndlBqdUVV?= =?utf-8?B?WmtGdXJZcmJOSVlwUk45Z2VnNXUxODdhT2xYa0VlOCtUVkZPZU9hVlBIdmJV?= =?utf-8?B?T0Rqa1V4azR0R1Q4YXFQOXVVTEljTTU3YkxhUE93TWRHc1U2ZHJKZkU0OUNN?= =?utf-8?B?S05XaUlHRDZzYTE1YWZ2TEYvL3R4Ri9iNUxSTWlHY1BkcTBTSHVpUzRlRzJk?= =?utf-8?B?a2dUM3dmcGE2YVlLQks5cWdiUUtNdE1qRlNVb3p4M3poR01peUN5TW1xYlo1?= =?utf-8?B?RkgxUktDTENtb1F5VGlGc1dTZXdBdW1TNGl2Tmh1RHkvZnF1T3BYT2l1WVR5?= =?utf-8?B?WlVzOTFWWm1Yc1FMNUNHTWwzdlU5ODR1dy9YN0JRNzBkNzNNNjdCcHR0b1Rt?= =?utf-8?B?dEVPWTM2dElVSUVURmw5VGhHWnk5Wm5ZaEhoK1NNNVR6b2UxUFNqR1lKbUNU?= =?utf-8?B?YngrYlJXVko0d1hlZllObEZ5akptS3M2WEYyYU5rTExPMm1ncDF0Qmo1KzBS?= =?utf-8?B?MFoyVGE0YXFpRU95L29TUVJ1YzRmZm0vVk9JTC9aaE9zOVI1eXNqdzJuM0kw?= =?utf-8?Q?mqqhxuKe1b1Sw=3D?= MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR08MB5321 Original-Authentication-Results: hpe.com; dkim=none (message not signed) header.d=none;hpe.com; dmarc=none action=none header.from=arm.com; Return-Path: Samer.El-Haj-Mahmoud@arm.com X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT004.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: 5a6ce790-f435-4894-2592-08d89d2ab4a7 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: wQoZ1eNQtIgU3c8fFA/Gl1vy+8A6nnJcDwyM8YGp89vEESLvxtlijyTG2hDYqmq/l9Sn09fvbK02UQABLvaunZMBFyNL8ts2P0Usry+knITQbHziOrJM0BQckJRV1S/d8ncCS2vaVF2kHb71uMeJrGv5uzj1mdUKHOITM4VZ+eJSgWXAeh+yOwRmOGUu4Xa6+C4WD3CQG6YN8dwnj8+BVs4KT88jIc6l5x+uhHQbNYgyQneVddRQ2fFUE2bjYqGq7wDJrgPFmjocyAeyCrb41MrlR5ghjilkAl4e0Ef09SHFGlhtsSM50M4742APczaj5EW2rwikKByW8zv4oyZBBudBmHIoWCAozFVGChCmwLYTiC7BgSRS+4Y/1r/6ATyYTsQhEn+IWu46CiKR+qsVtA== X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(346002)(39860400002)(376002)(396003)(136003)(46966005)(316002)(52536014)(81166007)(110136005)(82310400003)(9686003)(336012)(7696005)(54906003)(5660300002)(26005)(83380400001)(356005)(82740400003)(70586007)(47076004)(8676002)(30864003)(53546011)(55016002)(19627235002)(186003)(478600001)(4326008)(86362001)(2906002)(6506007)(8936002)(70206006)(33656002);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Dec 2020 16:43:40.4051 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b5ffcca4-6332-4872-5d4a-08d89d2abfd8 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: VE1EUR03FT004.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB4513 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 TmFoLCBubyBmaWdodCBuZWNlc3Nhcnkg8J+YiiBBcG9sb2dpZXMgZm9yIG1pc3NpbmcgdGhlIGVh cmxpZXIgY29udmVyc2F0aW9uLiBJIGd1ZXNzIG1vdmluZyBpdCB0byBNZGVNb2R1bGVQa2cgaW4g dGhlIGZ1dHVyZSAod2hlbiB0aGVyZSBhcmUgbW9yZSB1c2UgY2FzZXMpIGlzIGZpbmUuIEkganVz dCByZW1lbWJlciB0aGUgdG9waWMgb2YgaGFuZGxpbmcgVVRGOCBpbiBFREsyIGNvbWluZyB1cCBp biB2YXJpb3VzIGZvcnVtcyBhbmQgd2FzIHBsZWFzYW50bHkgc3VycHJpc2VkIHRvIHNlZSB0aGUg cGF0Y2guIFRoYW5rcyBmb3Igc3VibWl0dGluZyBpdC4NCg0KLS1TYW1lcg0KDQoNCg0KPiAtLS0t LU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBDaGFuZywgQWJuZXIgKEhQUyBTVy9GVyBU ZWNobm9sb2dpc3QpIDxhYm5lci5jaGFuZ0BocGUuY29tPg0KPiBTZW50OiBUaHVyc2RheSwgRGVj ZW1iZXIgMTAsIDIwMjAgOToyNyBBTQ0KPiBUbzogU2FtZXIgRWwtSGFqLU1haG1vdWQgPFNhbWVy LkVsLUhhai1NYWhtb3VkQGFybS5jb20+Ow0KPiBkZXZlbEBlZGsyLmdyb3Vwcy5pbw0KPiBDYzog TGltaW5nIEdhbyA8Z2FvbGltaW5nQGJ5b3NvZnQuY29tLmNuPjsgTGVpZiBMaW5kaG9sbQ0KPiA8 bGVpZkBudXZpYWluYy5jb20+OyBXYW5nLCBOaWNrbGUgKEhQUyBTVykgPG5pY2tsZS53YW5nQGhw ZS5jb20+Ow0KPiBPJ0hhbmxleSwgUGV0ZXIgKEVYTCkgPHBldGVyLm9oYW5sZXlAaHBlLmNvbT4N Cj4gU3ViamVjdDogUkU6IFtlZGsyLWRldmVsXSBbUEFUQ0ggdjUgMS82XSBSZWRmaXNoUGtnL1Vj czJVdGY4bGliOiBVQ1MyIHRvDQo+IFVGVDggbWFuaXB1bGF0aW9uIGxpYnJhcnkNCj4NCj4gSGFo IGhhaCBTYW1lciwgdGhpcyBmaWxlIHdhcyBvcmlnaW5hbGx5IHdlbnQgd2l0aCBKc29uTGliLiBM ZWlmIHN1Z2dlc3RlZCB0bw0KPiBtb3ZlIFVDUzItVVRGOCAgZnVuY3Rpb25zIHRvIGEgc2VwYXJh dGVkIGxpYiB1bmRlciBNZGVNb2R1bGVQa2cgd2hpY2gNCj4gd2FzIGEgZ29vZCBpZGVhIGFzIHlv dSBtZW50aW9uZWQuIEhvd2V2ZXIgdGhlIHBhY2thZ2Ugc3Rld2FyZCB3b3VsZCBsaWtlDQo+IHRv IGtlZXAgdGhpcyBsaWJyYXJ5IGluIFJlZGZpc2hQa2cgYW5kIG1vdmUgaXQgdG8gdW5kZXIgTWRl TW9kdWxlUGtnIHVudGlsDQo+IG1vcmUgdXNlIGNhc2VzIHJlcXVlc3QgdGhpcyBsaWIsIHRoaXMg bWFrZXMgc2Vuc2UgYXMgd2VsbC4NCj4gSSB0aGluayB3ZSBuZWVkIGEgZmlnaHQgOikNCj4gQWJu ZXINCj4NCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+IEZyb206IFNhbWVyIEVs LUhhai1NYWhtb3VkIFttYWlsdG86U2FtZXIuRWwtSGFqLU1haG1vdWRAYXJtLmNvbV0NCj4gPiBT ZW50OiBUaHVyc2RheSwgRGVjZW1iZXIgMTAsIDIwMjAgOTo0OSBQTQ0KPiA+IFRvOiBkZXZlbEBl ZGsyLmdyb3Vwcy5pbzsgQ2hhbmcsIEFibmVyIChIUFMgU1cvRlcgVGVjaG5vbG9naXN0KQ0KPiA+ IDxhYm5lci5jaGFuZ0BocGUuY29tPg0KPiA+IENjOiBMaW1pbmcgR2FvIDxnYW9saW1pbmdAYnlv c29mdC5jb20uY24+OyBMZWlmIExpbmRob2xtDQo+ID4gPGxlaWZAbnV2aWFpbmMuY29tPjsgV2Fu ZywgTmlja2xlIChIUFMgU1cpIDxuaWNrbGUud2FuZ0BocGUuY29tPjsNCj4gPiBPJ0hhbmxleSwg UGV0ZXIgKEVYTCkgPHBldGVyLm9oYW5sZXlAaHBlLmNvbT47IFNhbWVyIEVsLUhhai1NYWhtb3Vk DQo+ID4gPFNhbWVyLkVsLUhhai1NYWhtb3VkQGFybS5jb20+DQo+ID4gU3ViamVjdDogUkU6IFtl ZGsyLWRldmVsXSBbUEFUQ0ggdjUgMS82XSBSZWRmaXNoUGtnL1VjczJVdGY4bGliOiBVQ1MyDQo+ ID4gdG8NCj4gPiBVRlQ4IG1hbmlwdWxhdGlvbiBsaWJyYXJ5DQo+ID4NCj4gPiBEb2VzIHRoaXMg cmVhbGx5IG5lZWQgdG8gYmUgaW4gUmVkZmlzaFBrZz8gQm90aCBVQ1MtUyBhbmQgVVRGOCBhcmUN Cj4gPiBzdGFuZGFyZCBhbmQgY29tbW9uIGZvcm1hdHMsIHNvIEl0IHNlZW1zIGxpa2UgYSB1c2Vm dWwgc3RyaW5nDQo+ID4gbWFuaXB1bGF0aW9uIGxpYnJhcnkgdGhhdCBtYXkgaGF2ZSBvdGhlciB1 c2UgY2FzZXM/IE1heWJlIG1vdmUgaXQgdG8NCj4gTWRlTW9kdWxlUGtnPw0KPiA+DQo+ID4gPiAt LS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gRnJvbTogZGV2ZWxAZWRrMi5ncm91cHMu aW8gPGRldmVsQGVkazIuZ3JvdXBzLmlvPiBPbiBCZWhhbGYgT2YNCj4gQWJuZXINCj4gPiA+IENo YW5nIHZpYSBncm91cHMuaW8NCj4gPiA+IFNlbnQ6IE1vbmRheSwgRGVjZW1iZXIgNywgMjAyMCA5 OjExIFBNDQo+ID4gPiBUbzogZGV2ZWxAZWRrMi5ncm91cHMuaW8NCj4gPiA+IENjOiBMaW1pbmcg R2FvIDxnYW9saW1pbmdAYnlvc29mdC5jb20uY24+OyBMZWlmIExpbmRob2xtDQo+ID4gPiA8bGVp ZkBudXZpYWluYy5jb20+OyBOaWNrbGUgV2FuZyA8bmlja2xlLndhbmdAaHBlLmNvbT47IFBldGVy DQo+ID4gTydIYW5sZXkNCj4gPiA+IDxwZXRlci5vaGFubGV5QGhwZS5jb20+DQo+ID4gPiBTdWJq ZWN0OiBbZWRrMi1kZXZlbF0gW1BBVENIIHY1IDEvNl0gUmVkZmlzaFBrZy9VY3MyVXRmOGxpYjog VUNTMiB0bw0KPiA+ID4gVUZUOCBtYW5pcHVsYXRpb24gbGlicmFyeQ0KPiA+ID4NCj4gPiA+IFRo aXMgbGlicmFyeSBwcm92aWRlcyBVQ1MyIHRvIFVGVDggb3IgdmlzZSB2ZXJzYSBmdW5jdGlvbnMg dG8NCj4gPiA+IG1hbmlwdWxhdGUNCj4gPiA+IFVDUzIvVVRGOCBzdHJpbmdzLiBUaGlzIGxpYnJh cnkgaXMgY3VycmVudGx5IHVzZWQgYnkgZWRrMiBwb3J0IG9mDQo+ID4gPiBvcGVuIHNvdXJjZSBq YW5zc29uIGxpYnJhcnkuDQo+ID4gPg0KPiA+ID4gU2lnbmVkLW9mZi1ieTogQWJuZXIgQ2hhbmcg PGFibmVyLmNoYW5nQGhwZS5jb20+DQo+ID4gPg0KPiA+ID4gQ2M6IExpbWluZyBHYW8gPGdhb2xp bWluZ0BieW9zb2Z0LmNvbS5jbj4NCj4gPiA+IENjOiBMZWlmIExpbmRob2xtIDxsZWlmQG51dmlh aW5jLmNvbT4NCj4gPiA+IENjOiBOaWNrbGUgV2FuZyA8bmlja2xlLndhbmdAaHBlLmNvbT4NCj4g PiA+IENjOiBQZXRlciBPJ0hhbmxleSA8cGV0ZXIub2hhbmxleUBocGUuY29tPg0KPiA+ID4gLS0t DQo+ID4gPiAgUmVkZmlzaFBrZy9JbmNsdWRlL0xpYnJhcnkvQmFzZVVjczJVdGY4TGliLmggIHwg IDY5ICsrKw0KPiA+ID4gLi4uL0xpYnJhcnkvQmFzZVVjczJVdGY4TGliL0Jhc2VVY3MyVXRmOExp Yi5jIHwgNDE3DQo+ID4gKysrKysrKysrKysrKysrKysrDQo+ID4gPiAgLi4uL0Jhc2VVY3MyVXRm OExpYi9CYXNlVWNzMlV0ZjhMaWIuaW5mICAgICAgIHwgIDMxICsrDQo+ID4gPiAgUmVkZmlzaFBr Zy9SZWRmaXNoTGlicy5kc2MuaW5jICAgICAgICAgICAgICAgIHwgICAxICsNCj4gPiA+ICBSZWRm aXNoUGtnL1JlZGZpc2hQa2cuZGVjICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKw0KPiA+ID4g IFJlZGZpc2hQa2cvUmVkZmlzaFBrZy5kc2MgICAgICAgICAgICAgICAgICAgICB8ICAgMSArDQo+ ID4gPiAgNiBmaWxlcyBjaGFuZ2VkLCA1MjMgaW5zZXJ0aW9ucygrKQ0KPiA+ID4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBSZWRmaXNoUGtnL0luY2x1ZGUvTGlicmFyeS9CYXNlVWNzMlV0ZjhMaWIuaA0K PiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiA+ID4gUmVkZmlzaFBrZy9MaWJyYXJ5L0Jhc2VV Y3MyVXRmOExpYi9CYXNlVWNzMlV0ZjhMaWIuYw0KPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NA0K PiA+ID4gUmVkZmlzaFBrZy9MaWJyYXJ5L0Jhc2VVY3MyVXRmOExpYi9CYXNlVWNzMlV0ZjhMaWIu aW5mDQo+ID4gPg0KPiA+ID4gZGlmZiAtLWdpdCBhL1JlZGZpc2hQa2cvSW5jbHVkZS9MaWJyYXJ5 L0Jhc2VVY3MyVXRmOExpYi5oDQo+ID4gPiBiL1JlZGZpc2hQa2cvSW5jbHVkZS9MaWJyYXJ5L0Jh c2VVY3MyVXRmOExpYi5oDQo+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ID4gaW5kZXgg MDAwMDAwMDAwMC4uNTFhZTkyNDkyOQ0KPiA+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gKysrIGIv UmVkZmlzaFBrZy9JbmNsdWRlL0xpYnJhcnkvQmFzZVVjczJVdGY4TGliLmgNCj4gPiA+IEBAIC0w LDAgKzEsNjkgQEANCj4gPiA+ICsvKiogQGZpbGUNCj4gPiA+ICsgIFVDUzIgdG8gVVRGOCBtYW5p cHVsYXRpb24gbGlicmFyeSBoZWFkZXIgZmlsZS4NCj4gPiA+ICsNCj4gPiA+ICsgIENvcHlyaWdo dCAoYykgMjAxOSwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0K PiA+ID4gKyAgKEMpIENvcHlyaWdodCAyMDIwIEhld2xldHQgUGFja2FyZCBFbnRlcnByaXNlIERl dmVsb3BtZW50IExQPEJSPg0KPiA+ID4gKw0KPiA+ID4gKyAgICBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ID4gKw0KPiA+ID4gKyoqLw0KPiA+ID4gKw0K PiA+ID4gKyNpZm5kZWYgQkFTRV9VQ1MyVVRGOF9MSUJfSF8NCj4gPiA+ICsjZGVmaW5lIEJBU0Vf VUNTMlVURjhfTElCX0hfDQo+ID4gPiArDQo+ID4gPiArI2luY2x1ZGUgPEJhc2UuaD4NCj4gPiA+ ICsjaW5jbHVkZSA8VWVmaS5oPg0KPiA+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VMaWIuaD4N Cj4gPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQo+ID4gPiArI2luY2x1 ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4gPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9QcmludExp Yi5oPg0KPiA+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4NCj4g PiA+ICsNCj4gPiA+ICsvLy8NCj4gPiA+ICsvLy8gIEwiXHUwMDAwIg0KPiA+ID4gKy8vLw0KPiA+ ID4gKyNkZWZpbmUgVU5JQ09ERV9GT1JNQVRfTEVOICAgICAgICAgNg0KPiA+ID4gKyNkZWZpbmUg VU5JQ09ERV9GT1JNQVRfQ0hBUl9MRU4gICAgMg0KPiA+ID4gKyNkZWZpbmUgVU5JQ09ERV9GT1JN QVRfQ0hBUl9TSVpFICAgMw0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgVVRGOF9CVUZGRVJfRk9S X1VDUzJfTUFYX1NJWkUgICAzDQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICBDb252ZXJ0 IGEgVUNTMiBzdHJpbmcgdG8gYSBVVEY4IGVuY29kZWQgc3RyaW5nLg0KPiA+ID4gKw0KPiA+ID4g KyAgQHBhcmFtW2luXSAgICBVY3MyU3RyICAgICAgICAgICAgICAgIFRoZSBwcm92aWRlZCBVQ1My IHN0cmluZy4NCj4gPiA+ICsgIEBwYXJhbVtvdXRdICAgVXRmOFN0ckFkZHIgICAgICAgICAgICBU aGUgY29udmVydGVkIFVURjggc3RyaW5nIGFkZHJlc3MuDQo+ID4gQ2FsbGVyDQo+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgcmVzcG9uc2libGUgZm9yIEZy ZWUgdGhpcyBzdHJpbmcuDQo+ID4gPiArDQo+ID4gPiArICBAcmV0dmFsICAgICAgIEVGSV9JTlZB TElEX1BBUkFNRVRFUiAgT25lIG9yIG1vcmUgcGFyYW1ldGVycyBhcmUNCj4gPiA+IGludmFsaWQu DQo+ID4gPiArICBAcmV0dmFsICAgICAgIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgU3lzdGVtIHJ1 bnMgb3V0IG9mIHJlc291cmNlcy4NCj4gPiA+ICsgIEByZXR2YWwgICAgICAgRUZJX1NVQ0NFU1Mg ICAgICAgICAgICBUaGUgVVRGOCBlbmNvZGVkIHN0cmluZyBoYXMgYmVlbg0KPiA+ID4gY29udmVy dGVkLg0KPiA+ID4gKw0KPiA+ID4gKyoqLw0KPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ICtVQ1My U3RyVG9VVEY4ICgNCj4gPiA+ICsgIElOICBDSEFSMTYgICAgICpVY3MyU3RyLA0KPiA+ID4gKyAg T1VUIENIQVI4ICAgICAgKipVdGY4U3RyQWRkcg0KPiA+ID4gKyAgKTsNCj4gPiA+ICsNCj4gPiA+ ICsvKioNCj4gPiA+ICsgIENvbnZlcnQgYSBVVEY4IGVuY29kZWQgc3RyaW5nIHRvIGEgVUNTMiBz dHJpbmcuDQo+ID4gPiArDQo+ID4gPiArICBAcGFyYW1baW5dICAgIFV0ZjhTdHIgICAgICAgICAg ICAgICAgVGhlIHByb3ZpZGVkIFVURjggZW5jb2RlZCBzdHJpbmcuDQo+ID4gPiArICBAcGFyYW1b b3V0XSAgIFVjczJTdHJBZGRyICAgICAgICAgICAgVGhlIGNvbnZlcnRlZCBVQ1MyIHN0cmluZyBh ZGRyZXNzLg0KPiA+ID4gQ2FsbGVyDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaXMgcmVzcG9uc2libGUgZm9yIEZyZWUgdGhpcyBzdHJpbmcuDQo+ID4gPiAr DQo+ID4gPiArICBAcmV0dmFsICAgICAgIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVGhlIFVURjgg ZW5jb2RlZCBzdHJpbmcgaXMgbm90DQo+ID4gdmFsaWQNCj4gPiA+IHRvDQo+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydCB0byBVQ1MyIHN0cmluZy4N Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbmUgb3IgbW9y ZSBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLg0KPiA+ID4gKyAgQHJldHZhbCAgICAgICBFRklfT1VU X09GX1JFU09VUkNFUyAgIFN5c3RlbSBydW5zIG91dCBvZiByZXNvdXJjZXMuDQo+ID4gPiArICBA cmV0dmFsICAgICAgIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIFVDUzIgc3RyaW5nIGhhcyBi ZWVuIGNvbnZlcnRlZC4NCj4gPiA+ICsNCj4gPiA+ICsqKi8NCj4gPiA+ICtFRklfU1RBVFVTDQo+ ID4gPiArVVRGOFN0clRvVUNTMiAoDQo+ID4gPiArICBJTiAgQ0hBUjggICAgICAqVXRmOFN0ciwN Cj4gPiA+ICsgIE9VVCBDSEFSMTYgICAgICoqVWNzMlN0ckFkZHINCj4gPiA+ICsgICk7DQo+ID4g PiArDQo+ID4gPiArI2VuZGlmDQo+ID4gPiBkaWZmIC0tZ2l0IGEvUmVkZmlzaFBrZy9MaWJyYXJ5 L0Jhc2VVY3MyVXRmOExpYi9CYXNlVWNzMlV0ZjhMaWIuYw0KPiA+ID4gYi9SZWRmaXNoUGtnL0xp YnJhcnkvQmFzZVVjczJVdGY4TGliL0Jhc2VVY3MyVXRmOExpYi5jDQo+ID4gPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiA+ID4gaW5kZXggMDAwMDAwMDAwMC4uNmNmZjEwOWE1Yw0KPiA+ID4gLS0t IC9kZXYvbnVsbA0KPiA+ID4gKysrIGIvUmVkZmlzaFBrZy9MaWJyYXJ5L0Jhc2VVY3MyVXRmOExp Yi9CYXNlVWNzMlV0ZjhMaWIuYw0KPiA+ID4gQEAgLTAsMCArMSw0MTcgQEANCj4gPiA+ICsvKiog QGZpbGUNCj4gPiA+ICsgIFVDUzIgdG8gVVRGOCBtYW5pcHVsYXRpb24gbGlicmFyeS4NCj4gPiA+ ICsNCj4gPiA+ICsgIENvcHlyaWdodCAoYykgMjAxOCAtIDIwMTksIEludGVsIENvcnBvcmF0aW9u LiBBbGwgcmlnaHRzDQo+ID4gPiArIHJlc2VydmVkLjxCUj4NCj4gPiA+ICsgIChDKSBDb3B5cmln aHQgMjAyMCBIZXdsZXR0IFBhY2thcmQgRW50ZXJwcmlzZSBEZXZlbG9wbWVudCBMUDxCUj4NCj4g PiA+ICsNCj4gPiA+ICsgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1Q YXRlbnQNCj4gPiA+ICsNCj4gPiA+ICsqKi8NCj4gPiA+ICsNCj4gPiA+ICsjaW5jbHVkZSA8TGli cmFyeS9CYXNlVWNzMlV0ZjhMaWIuaD4NCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgIFNp bmNlIGVhY2ggVUNTMiBjaGFyYWN0ZXIgY2FuIGJlIHJlcHJlc2VudGVkIGJ5IDEtMyBVVEY4IGVu Y29kZWQNCj4gPiA+ICtjaGFyYWN0ZXJzLA0KPiA+ID4gKyAgdGhpcyBmdW5jdGlvbiBpcyB1c2Vk IHRvIHJldHJpZXZlIHRoZSBVVEY4IGVuY29kaW5nIHNpemUgZm9yIGENCj4gPiA+ICtVQ1MyDQo+ ID4gPiBjaGFyYWN0ZXIuDQo+ID4gPiArDQo+ID4gPiArICBAcGFyYW1baW5dICAgVXRmOEJ1ZmZl ciAgICAgICBUaGUgYnVmZmVyIGZvciBVVEY4IGVuY29kZWQgZGF0YS4NCj4gPiA+ICsNCj4gPiA+ ICsgIEByZXR2YWwgICAgICBSZXR1cm4gdGhlIHNpemUgb2YgVVRGOCBlbmNvZGluZyBzdHJpbmcg b3IgMCBpZiBpdCBpcyBub3QgZm9yDQo+ID4gPiArICAgICAgICAgICAgICAgVUNTMiBmb3JtYXQu DQo+ID4gPiArDQo+ID4gPiArKiovDQo+ID4gPiArVUlOVDgNCj4gPiA+ICtHZXRVVEY4U2l6ZUZv clVDUzIgKA0KPiA+ID4gKyAgSU4gICAgQ0hBUjggICAgICAqVXRmOEJ1ZmZlcg0KPiA+ID4gKyAg KQ0KPiA+ID4gK3sNCj4gPiA+ICsgIENIQVI4ICAgIFRlbXBDaGFyOw0KPiA+ID4gKyAgVUlOVDgg ICAgVXRmOFNpemU7DQo+ID4gPiArDQo+ID4gPiArICBBU1NFUlQgKFV0ZjhCdWZmZXIgIT0gTlVM TCk7DQo+ID4gPiArDQo+ID4gPiArICBUZW1wQ2hhciA9ICpVdGY4QnVmZmVyOw0KPiA+ID4gKyAg aWYgKChUZW1wQ2hhciAmIDB4RjApID09IDB4RjApIHsNCj4gPiA+ICsNCj4gPiA+ICsgICAgLy8N Cj4gPiA+ICsgICAgLy8gVGhpcyBmb3JtYXQgaXMgbm90IGZvciBVQ1MyLg0KPiA+ID4gKyAgICAv Lw0KPiA+ID4gKyAgICByZXR1cm4gMDsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIFV0 ZjhTaXplID0gMTsNCj4gPiA+ICsgIGlmICgoVGVtcENoYXIgJiAweDgwKSA9PSAweDgwKSB7DQo+ ID4gPiArICAgIGlmICgoVGVtcENoYXIgJiAweEMwKSA9PSAweEMwKSB7DQo+ID4gPiArDQo+ID4g PiArICAgICAgVXRmOFNpemUgKys7DQo+ID4gPiArICAgICAgaWYgKChUZW1wQ2hhciAmIDB4RTAp ID09IDB4RTApIHsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgIFV0ZjhTaXplICsrOw0KPiA+ID4g KyAgICAgIH0NCj4gPiA+ICsgICAgfQ0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgcmV0 dXJuIFV0ZjhTaXplOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgIFNp bmNlIGVhY2ggVUNTMiBjaGFyYWN0ZXIgY2FuIGJlIHJlcHJlc2VudGVkIGJ5IHRoZSBmb3JtYXQ6 DQo+ID4gPiArXHVYWFhYLCB0aGlzIGZ1bmN0aW9uDQo+ID4gPiArICBpcyB1c2VkIHRvIHJldHJp ZXZlIHRoZSBVQ1MyIGNoYXJhY3RlciBmcm9tIGEgVW5pY29kZSBmb3JtYXQuDQo+ID4gPiArICBD YWxsIE1VU1QgbWFrZSBzdXJlIHRoZXJlIGFyZSBhdCBsZWFzdCA2IEJ5dGVzIGluIHRoZSBpbnB1 dCBVVEY4DQo+IGJ1ZmZlci4NCj4gPiA+ICsNCj4gPiA+ICsgIEBwYXJhbVtpbl0gICAgVXRmOEJ1 ZmZlciAgICAgICAgICAgICBUaGUgYnVmZmVyIGZvciBVVEY4IGVuY29kZWQgZGF0YS4NCj4gPiA+ ICsgIEBwYXJhbVtvdXRdICAgVWNzMkNoYXIgICAgICAgICAgICAgICBUaGUgY29udmVydGVkIFVD UzIgY2hhcmFjdGVyLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHZhbCAgICAgICBFRklfSU5WQUxJ RF9QQVJBTUVURVIgIE5vbi1Bc2NpaSBjaGFyYWN0ZXJzIGZvdW5kIGluDQo+IHRoZQ0KPiA+ID4g aGV4YWRlY2ltYWwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkaWdpdHMgc3RyaW5nLCBhbmQgY2FuJ3QgYmUgY29udmVydGVkIHRvIGEgVUNTMg0KPiA+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3Rlci4NCj4gPiA+ ICsgIEByZXR2YWwgICAgICAgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgVUNTMiBjaGFyYWN0 ZXIgaGFzIGJlZW4gcmV0cmlldmVkLg0KPiA+ID4gKw0KPiA+ID4gKyoqLw0KPiA+ID4gK0VGSV9T VEFUVVMNCj4gPiA+ICtHZXRVQ1MyQ2hhckJ5Rm9ybWF0ICgNCj4gPiA+ICsgIElOICAgIENIQVI4 ICAgICAgKlV0ZjhCdWZmZXIsDQo+ID4gPiArICBPVVQgICBDSEFSMTYgICAgICpVY3MyQ2hhcg0K PiA+ID4gKyAgKQ0KPiA+ID4gK3sNCj4gPiA+ICsgIFVJTlQ4ICAgICBOdW0xOw0KPiA+ID4gKyAg VUlOVDggICAgIE51bTI7DQo+ID4gPiArICBVSU5UOCAgICAgSW5kZXg7DQo+ID4gPiArICBDSEFS OCAgICAgVWNzMkNoYXJGb3JtYXRbVU5JQ09ERV9GT1JNQVRfQ0hBUl9TSVpFXTsgIC8vLyB0d28N Cj4gPiA+IEhleGFkZWNpbWFsIGRpZ2l0cyBBc2NpaSBzdHJpbmcsIGxpa2UgIjNGIg0KPiA+ID4g Kw0KPiA+ID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgNDsgSW5kZXggKyspIHsNCj4gPiA+ ICsgICAgaWYgKCgqKFV0ZjhCdWZmZXIgKyAyICsgSW5kZXgpICYgMHg4MCkgIT0gMHgwMCkgew0K PiA+ID4gKyAgICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gPiArICAgIH0N Cj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIFplcm9NZW0gKFVjczJDaGFyRm9ybWF0LCBV TklDT0RFX0ZPUk1BVF9DSEFSX1NJWkUpOw0KPiA+ID4gKw0KPiA+ID4gKyAgLy8NCj4gPiA+ICsg IC8vIEdldCB0aGUgRmlyc3QgTnVtYmVyLCBPZmZzZXQgaXMgMiAgLy8gIENvcHlNZW0NCj4gPiA+ ICsgKFVjczJDaGFyRm9ybWF0LCBVdGY4QnVmZmVyICsgMiwNCj4gPiA+IFVOSUNPREVfRk9STUFU X0NIQVJfTEVOKTsNCj4gPiA+ICsgIE51bTEgPSAoVUlOVDgpIEFzY2lpU3RySGV4VG9VaW50biAo VWNzMkNoYXJGb3JtYXQpOw0KPiA+ID4gKw0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIC8vIEdldCB0 aGUgU2Vjb25kIE51bWJlciwgT2Zmc2V0IGlzIDQgIC8vICBDb3B5TWVtDQo+ID4gPiArIChVY3My Q2hhckZvcm1hdCwgVXRmOEJ1ZmZlciArIDQsIFVOSUNPREVfRk9STUFUX0NIQVJfTEVOKTsNCj4g PiA+ICsgIE51bTIgPSAoVUlOVDgpIEFzY2lpU3RySGV4VG9VaW50biAoVWNzMkNoYXJGb3JtYXQp Ow0KPiA+ID4gKw0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIC8vIFVjczJDaGFyIGlzIExpdHRsZS1F bmRpYW4NCj4gPiA+ICsgIC8vDQo+ID4gPiArICAqKChDSEFSOCAqKSBVY3MyQ2hhcikgICAgICAg ID0gTnVtMjsNCj4gPiA+ICsgICooKChDSEFSOCAqKSBVY3MyQ2hhcikgKyAxKSA9IE51bTE7DQo+ ID4gPiArDQo+ID4gPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gPiArfQ0KPiA+ID4gKw0K PiA+ID4gKy8qKg0KPiA+ID4gKyAgQ29udmVydCBhIFVDUzIgY2hhcmFjdGVyIHRvIFVURjggZW5j b2Rpbmcgc3RyaW5nLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHBhcmFtW2luXSAgICBVY3MyQ2hhciAg ICAgICAgICAgICAgIFRoZSBwcm92aWRlZCBVQ1MyIGNoYXJhY3Rlci4NCj4gPiA+ICsgIEBwYXJh bVtvdXRdICAgVXRmOEJ1ZmZlciAgICAgICAgICAgICBUaGUgY29udmVydGVkIFVURjggZW5jb2Rl ZCBkYXRhLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHZhbCAgICAgIFJldHVybiB0aGUgc2l6ZSBv ZiBVVEY4IGVuY29kaW5nIGRhdGEgZm9yIHRoaXMgVUNTMg0KPiBjaGFyYWN0ZXIuDQo+ID4gPiAr DQo+ID4gPiArKiovDQo+ID4gPiArVUlOVDgNCj4gPiA+ICtVQ1MyQ2hhclRvVVRGOCAoDQo+ID4g PiArICBJTiAgQ0hBUjE2ICAgICBVY3MyQ2hhciwNCj4gPiA+ICsgIE9VVCBDSEFSOCAgICAgICpV dGY4QnVmZmVyDQo+ID4gPiArICApDQo+ID4gPiArew0KPiA+ID4gKyAgVUlOVDE2ICAgIFVjczJO dW1iZXI7DQo+ID4gPiArDQo+ID4gPiArICBBU1NFUlQgKFV0ZjhCdWZmZXIgIT0gTlVMTCk7DQo+ ID4gPiArDQo+ID4gPiArICBVY3MyTnVtYmVyID0gKFVJTlQxNikgVWNzMkNoYXI7DQo+ID4gPiAr ICBpZiAoVWNzMk51bWJlciA8PSAweDAwN0YpIHsNCj4gPiA+ICsNCj4gPiA+ICsgICAgLy8NCj4g PiA+ICsgICAgLy8gVVRGOCBmb3JtYXQ6IDB4eHh4eHh4DQo+ID4gPiArICAgIC8vDQo+ID4gPiAr ICAgICpVdGY4QnVmZmVyID0gVWNzMkNoYXIgJiAweDdGOw0KPiA+ID4gKyAgICByZXR1cm4gMTsN Cj4gPiA+ICsNCj4gPiA+ICsgIH0gZWxzZSBpZiAoVWNzMk51bWJlciA+PSAweDAwODAgJiYgVWNz Mk51bWJlciA8PSAweDA3RkYpIHsNCj4gPiA+ICsNCj4gPiA+ICsgICAgLy8NCj4gPiA+ICsgICAg Ly8gVVRGOCBmb3JtYXQ6IDExMHh4eHh4IDEweHh4eHh4DQo+ID4gPiArICAgIC8vDQo+ID4gPiAr ICAgICooVXRmOEJ1ZmZlciArIDEpID0gKFVjczJDaGFyICYgMHgzRikgfCAweDgwOw0KPiA+ID4g KyAgICAqVXRmOEJ1ZmZlciAgICAgICA9ICgoVWNzMkNoYXIgPj4gNikgJiAweDFGKSB8IDB4QzA7 DQo+ID4gPiArICAgIHJldHVybiAyOw0KPiA+ID4gKw0KPiA+ID4gKyAgfSBlbHNlIHsgIC8vLyBV Y3MyTnVtYmVyID49IDB4MDgwMCAmJiBVY3MyTnVtYmVyIDw9IDB4RkZGRg0KPiA+ID4gKw0KPiA+ ID4gKyAgICAvLw0KPiA+ID4gKyAgICAvLyBVVEY4IGZvcm1hdDogMTExMHh4eHggMTB4eHh4eHgg MTB4eHh4eHgNCj4gPiA+ICsgICAgLy8NCj4gPiA+ICsgICAgKihVdGY4QnVmZmVyICsgMikgPSAo VWNzMkNoYXIgJiAweDNGKSB8IDB4ODA7DQo+ID4gPiArICAgICooVXRmOEJ1ZmZlciArIDEpID0g KChVY3MyQ2hhciA+PiA2KSAmIDB4M0YpIHwgMHg4MDsNCj4gPiA+ICsgICAgKlV0ZjhCdWZmZXIg ICAgICAgPSAoKFVjczJDaGFyID4+IDEyKSAmIDB4MEYpIHwgMHhFMDsNCj4gPiA+ICsgICAgcmV0 dXJuIDM7DQo+ID4gPiArICB9DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4g KyAgQ29udmVydCBhIFVURjggZW5jb2RlZCBkYXRhIHRvIGEgVUNTMiBjaGFyYWN0ZXIuDQo+ID4g PiArDQo+ID4gPiArICBAcGFyYW1baW5dICAgIFV0ZjhCdWZmZXIgICAgICAgICAgICAgVGhlIHBy b3ZpZGVkIFVURjggZW5jb2RlZCBkYXRhLg0KPiA+ID4gKyAgQHBhcmFtW291dF0gICBVY3MyQ2hh ciAgICAgICAgICAgICAgIFRoZSBjb252ZXJ0ZWQgVUNTMiBjaGFyYWN0ZXIuDQo+ID4gPiArDQo+ ID4gPiArICBAcmV0dmFsICAgICAgIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVGhlIFVURjggZW5j b2RlZCBzdHJpbmcgaXMgbm90DQo+ID4gdmFsaWQNCj4gPiA+IG9yDQo+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGZvciBVQ1MyIGNoYXJhY3Rlci4NCj4g PiA+ICsgIEByZXR2YWwgICAgICAgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgY29udmVydGVk IFVDUzIgY2hhcmFjdGVyLg0KPiA+ID4gKw0KPiA+ID4gKyoqLw0KPiA+ID4gK0VGSV9TVEFUVVMN Cj4gPiA+ICtVVEY4VG9VQ1MyQ2hhciAoDQo+ID4gPiArICBJTiAgIENIQVI4ICAgICAgKlV0ZjhC dWZmZXIsDQo+ID4gPiArICBPVVQgIENIQVIxNiAgICAgKlVjczJDaGFyDQo+ID4gPiArICApDQo+ ID4gPiArew0KPiA+ID4gKyAgVUlOVDggICAgVXRmOFNpemU7DQo+ID4gPiArICBDSEFSOCAgICAq VWNzMkJ1ZmZlcjsNCj4gPiA+ICsgIENIQVI4ICAgIFRlbXBDaGFyMTsNCj4gPiA+ICsgIENIQVI4 ICAgIFRlbXBDaGFyMjsNCj4gPiA+ICsgIENIQVI4ICAgIFRlbXBDaGFyMzsNCj4gPiA+ICsNCj4g PiA+ICsgIEFTU0VSVCAoVXRmOEJ1ZmZlciAhPSBOVUxMICYmIFVjczJDaGFyICE9IE5VTEwpOyAg WmVyb01lbQ0KPiA+ID4gKyAoVWNzMkNoYXIsIHNpemVvZiAoQ0hBUjE2KSk7ICBVY3MyQnVmZmVy ID0gKENIQVI4ICopIFVjczJDaGFyOw0KPiA+ID4gKw0KPiA+ID4gKyAgVXRmOFNpemUgPSBHZXRV VEY4U2l6ZUZvclVDUzIgKFV0ZjhCdWZmZXIpOyAgc3dpdGNoIChVdGY4U2l6ZSkgew0KPiA+ID4g Kw0KPiA+ID4gKyAgICBjYXNlIDE6DQo+ID4gPiArDQo+ID4gPiArICAgICAgLy8NCj4gPiA+ICsg ICAgICAvLyBVVEY4IGZvcm1hdDogMHh4eHh4eHgNCj4gPiA+ICsgICAgICAvLw0KPiA+ID4gKyAg ICAgIFRlbXBDaGFyMSA9ICpVdGY4QnVmZmVyOw0KPiA+ID4gKyAgICAgIGlmICgoVGVtcENoYXIx ICYgMHg4MCkgIT0gMHgwMCkgew0KPiA+ID4gKyAgICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BB UkFNRVRFUjsNCj4gPiA+ICsgICAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgICAgKlVjczJCdWZm ZXIgICAgICAgPSBUZW1wQ2hhcjE7DQo+ID4gPiArICAgICAgKihVY3MyQnVmZmVyICsgMSkgPSAw Ow0KPiA+ID4gKyAgICAgIGJyZWFrOw0KPiA+ID4gKw0KPiA+ID4gKyAgICBjYXNlIDI6DQo+ID4g PiArDQo+ID4gPiArICAgICAgLy8NCj4gPiA+ICsgICAgICAvLyBVVEY4IGZvcm1hdDogMTEweHh4 eHggMTB4eHh4eHgNCj4gPiA+ICsgICAgICAvLw0KPiA+ID4gKyAgICAgIFRlbXBDaGFyMSA9ICpV dGY4QnVmZmVyOw0KPiA+ID4gKyAgICAgIGlmICgoVGVtcENoYXIxICYgMHhFMCkgIT0gMHhDMCkg ew0KPiA+ID4gKyAgICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiA+ICsg ICAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgICAgVGVtcENoYXIyID0gKihVdGY4QnVmZmVyICsg MSk7DQo+ID4gPiArICAgICAgaWYgKChUZW1wQ2hhcjIgJiAweEMwKSAhPSAweDgwKSB7DQo+ID4g PiArICAgICAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ID4gKyAgICAgIH0N Cj4gPiA+ICsNCj4gPiA+ICsgICAgICAqVWNzMkJ1ZmZlciAgICAgICA9IChUZW1wQ2hhcjEgPDwg NikgKyAoVGVtcENoYXIyICYgMHgzRik7DQo+ID4gPiArICAgICAgKihVY3MyQnVmZmVyICsgMSkg PSAoVGVtcENoYXIxID4+IDIpICYgMHgwNzsNCj4gPiA+ICsgICAgICBicmVhazsNCj4gPiA+ICsN Cj4gPiA+ICsgICAgY2FzZSAzOg0KPiA+ID4gKw0KPiA+ID4gKyAgICAgIC8vDQo+ID4gPiArICAg ICAgLy8gVVRGOCBmb3JtYXQ6IDExMTB4eHh4IDEweHh4eHh4IDEweHh4eHh4DQo+ID4gPiArICAg ICAgLy8NCj4gPiA+ICsgICAgICBUZW1wQ2hhcjEgPSAqVXRmOEJ1ZmZlcjsNCj4gPiA+ICsgICAg ICBpZiAoKFRlbXBDaGFyMSAmIDB4RjApICE9IDB4RTApIHsNCj4gPiA+ICsgICAgICAgIHJldHVy biBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gPiArICAgICAgfQ0KPiA+ID4gKw0KPiA+ID4g KyAgICAgIFRlbXBDaGFyMiA9ICooVXRmOEJ1ZmZlciArIDEpOw0KPiA+ID4gKyAgICAgIGlmICgo VGVtcENoYXIyICYgMHhDMCkgIT0gMHg4MCkgew0KPiA+ID4gKyAgICAgICAgcmV0dXJuIEVGSV9J TlZBTElEX1BBUkFNRVRFUjsNCj4gPiA+ICsgICAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgICAg VGVtcENoYXIzID0gKihVdGY4QnVmZmVyICsgMik7DQo+ID4gPiArICAgICAgaWYgKChUZW1wQ2hh cjMgJiAweEMwKSAhPSAweDgwKSB7DQo+ID4gPiArICAgICAgICByZXR1cm4gRUZJX0lOVkFMSURf UEFSQU1FVEVSOw0KPiA+ID4gKyAgICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgICAqVWNzMkJ1 ZmZlciAgICAgICA9IChUZW1wQ2hhcjIgPDwgNikgKyAoVGVtcENoYXIzICYgMHgzRik7DQo+ID4g PiArICAgICAgKihVY3MyQnVmZmVyICsgMSkgPSAoVGVtcENoYXIxIDw8IDQpICsgKChUZW1wQ2hh cjIgPj4gMikgJg0KPiA+ID4gKyAweDBGKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICBicmVhazsN Cj4gPiA+ICsNCj4gPiA+ICsgICAgZGVmYXVsdDoNCj4gPiA+ICsNCj4gPiA+ICsgICAgICByZXR1 cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgcmV0dXJuIEVG SV9TVUNDRVNTOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgIENvbnZl cnQgYSBVQ1MyIHN0cmluZyB0byBhIFVURjggZW5jb2RlZCBzdHJpbmcuDQo+ID4gPiArDQo+ID4g PiArICBAcGFyYW1baW5dICAgIFVjczJTdHIgICAgICAgICAgICAgICAgVGhlIHByb3ZpZGVkIFVD UzIgc3RyaW5nLg0KPiA+ID4gKyAgQHBhcmFtW291dF0gICBVdGY4U3RyQWRkciAgICAgICAgICAg IFRoZSBjb252ZXJ0ZWQgVVRGOCBzdHJpbmcgYWRkcmVzcy4NCj4gPiBDYWxsZXINCj4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyByZXNwb25zaWJsZSBmb3Ig RnJlZSB0aGlzIHN0cmluZy4NCj4gPiA+ICsNCj4gPiA+ICsgIEByZXR2YWwgICAgICAgRUZJX0lO VkFMSURfUEFSQU1FVEVSICBPbmUgb3IgbW9yZSBwYXJhbWV0ZXJzIGFyZQ0KPiA+ID4gaW52YWxp ZC4NCj4gPiA+ICsgIEByZXR2YWwgICAgICAgRUZJX09VVF9PRl9SRVNPVVJDRVMgICBTeXN0ZW0g cnVucyBvdXQgb2YgcmVzb3VyY2VzLg0KPiA+ID4gKyAgQHJldHZhbCAgICAgICBFRklfU1VDQ0VT UyAgICAgICAgICAgIFRoZSBVVEY4IGVuY29kZWQgc3RyaW5nIGhhcyBiZWVuDQo+ID4gPiBjb252 ZXJ0ZWQuDQo+ID4gPiArDQo+ID4gPiArKiovDQo+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gK1VD UzJTdHJUb1VURjggKA0KPiA+ID4gKyAgSU4gIENIQVIxNiAgICAgKlVjczJTdHIsDQo+ID4gPiAr ICBPVVQgQ0hBUjggICAgICAqKlV0ZjhTdHJBZGRyDQo+ID4gPiArICApDQo+ID4gPiArew0KPiA+ ID4gKyAgVUlOVE4gICAgVWNzMlN0ckluZGV4Ow0KPiA+ID4gKyAgVUlOVE4gICAgVWNzMlN0ckxl bmd0aDsNCj4gPiA+ICsgIENIQVI4ICAgICpVdGY4U3RyOw0KPiA+ID4gKyAgVUlOVE4gICAgVXRm OFN0ckxlbmd0aDsNCj4gPiA+ICsgIFVJTlROICAgIFV0ZjhTdHJJbmRleDsNCj4gPiA+ICsgIENI QVI4ICAgIFV0ZjhCdWZmZXJbVVRGOF9CVUZGRVJfRk9SX1VDUzJfTUFYX1NJWkVdOw0KPiA+ID4g KyAgVUlOVDggICAgVXRmOEJ1ZmZlclNpemU7DQo+ID4gPiArDQo+ID4gPiArICBpZiAoVWNzMlN0 ciA9PSBOVUxMIHx8IFV0ZjhTdHJBZGRyID09IE5VTEwpIHsNCj4gPiA+ICsgICAgcmV0dXJuIEVG SV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIFVjczJT dHJMZW5ndGggPSBTdHJMZW4gKFVjczJTdHIpOyAgVXRmOFN0ckxlbmd0aCA9IDA7DQo+ID4gPiAr DQo+ID4gPiArICBmb3IgKFVjczJTdHJJbmRleCA9IDA7IFVjczJTdHJJbmRleCA8IFVjczJTdHJM ZW5ndGg7IFVjczJTdHJJbmRleA0KPiA+ID4gKyArKykgew0KPiA+ID4gKw0KPiA+ID4gKyAgICBa ZXJvTWVtIChVdGY4QnVmZmVyLCBzaXplb2YgKFV0ZjhCdWZmZXIpKTsNCj4gPiA+ICsgICAgVXRm OEJ1ZmZlclNpemUgPSBVQ1MyQ2hhclRvVVRGOCAoVWNzMlN0cltVY3MyU3RySW5kZXhdLA0KPiBV dGY4QnVmZmVyKTsNCj4gPiA+ICsgICAgVXRmOFN0ckxlbmd0aCArPSBVdGY4QnVmZmVyU2l6ZTsg IH0NCj4gPiA+ICsNCj4gPiA+ICsgIFV0ZjhTdHIgPSBBbGxvY2F0ZVplcm9Qb29sIChVdGY4U3Ry TGVuZ3RoICsgMSk7ICBpZiAoVXRmOFN0ciA9PQ0KPiA+ID4gKyBOVUxMKSB7DQo+ID4gPiArICAg IHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ ICsgIFV0ZjhTdHJJbmRleCA9IDA7DQo+ID4gPiArICBmb3IgKFVjczJTdHJJbmRleCA9IDA7IFVj czJTdHJJbmRleCA8IFVjczJTdHJMZW5ndGg7IFVjczJTdHJJbmRleA0KPiA+ID4gKyArKykgew0K PiA+ID4gKw0KPiA+ID4gKyAgICBaZXJvTWVtIChVdGY4QnVmZmVyLCBzaXplb2YgKFV0ZjhCdWZm ZXIpKTsNCj4gPiA+ICsgICAgVXRmOEJ1ZmZlclNpemUgPSBVQ1MyQ2hhclRvVVRGOCAoVWNzMlN0 cltVY3MyU3RySW5kZXhdLA0KPiA+ID4gKyBVdGY4QnVmZmVyKTsNCj4gPiA+ICsNCj4gPiA+ICsg ICAgQ29weU1lbSAoVXRmOFN0ciArIFV0ZjhTdHJJbmRleCwgVXRmOEJ1ZmZlciwgVXRmOEJ1ZmZl clNpemUpOw0KPiA+ID4gKyAgICBVdGY4U3RySW5kZXggKz0gVXRmOEJ1ZmZlclNpemU7ICB9DQo+ ID4gPiArDQo+ID4gPiArICBVdGY4U3RyW1V0ZjhTdHJJbmRleF0gPSAnXDAnOw0KPiA+ID4gKyAg KlV0ZjhTdHJBZGRyID0gVXRmOFN0cjsNCj4gPiA+ICsNCj4gPiA+ICsgIHJldHVybiBFRklfU1VD Q0VTUzsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICBDb252ZXJ0IGEg VVRGOCBlbmNvZGVkIHN0cmluZyB0byBhIFVDUzIgc3RyaW5nLg0KPiA+ID4gKw0KPiA+ID4gKyAg QHBhcmFtW2luXSAgICBVdGY4U3RyICAgICAgICAgICAgICAgIFRoZSBwcm92aWRlZCBVVEY4IGVu Y29kZWQgc3RyaW5nLg0KPiA+ID4gKyAgQHBhcmFtW291dF0gICBVY3MyU3RyQWRkciAgICAgICAg ICAgIFRoZSBjb252ZXJ0ZWQgVUNTMiBzdHJpbmcgYWRkcmVzcy4NCj4gPiA+IENhbGxlcg0KPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHJlc3BvbnNpYmxl IGZvciBGcmVlIHRoaXMgc3RyaW5nLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHZhbCAgICAgICBF RklfSU5WQUxJRF9QQVJBTUVURVIgIFRoZSBVVEY4IGVuY29kZWQgc3RyaW5nIGlzIG5vdA0KPiA+ IHZhbGlkDQo+ID4gPiB0bw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnZlcnQgdG8gVUNTMiBzdHJpbmcuDQo+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT25lIG9yIG1vcmUgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4N Cj4gPiA+ICsgIEByZXR2YWwgICAgICAgRUZJX09VVF9PRl9SRVNPVVJDRVMgICBTeXN0ZW0gcnVu cyBvdXQgb2YgcmVzb3VyY2VzLg0KPiA+ID4gKyAgQHJldHZhbCAgICAgICBFRklfU1VDQ0VTUyAg ICAgICAgICAgIFRoZSBVQ1MyIHN0cmluZyBoYXMgYmVlbiBjb252ZXJ0ZWQuDQo+ID4gPiArDQo+ ID4gPiArKiovDQo+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gK1VURjhTdHJUb1VDUzIgKA0KPiA+ ID4gKyAgSU4gIENIQVI4ICAgICAgKlV0ZjhTdHIsDQo+ID4gPiArICBPVVQgQ0hBUjE2ICAgICAq KlVjczJTdHJBZGRyDQo+ID4gPiArICApDQo+ID4gPiArew0KPiA+ID4gKyAgRUZJX1NUQVRVUyAg ICBTdGF0dXM7DQo+ID4gPiArICBVSU5UTiAgICAgICAgIFV0ZjhTdHJJbmRleDsNCj4gPiA+ICsg IFVJTlROICAgICAgICAgVXRmOFN0ckxlbmd0aDsNCj4gPiA+ICsgIFVJTlROICAgICAgICAgVWNz MlN0ckluZGV4Ow0KPiA+ID4gKyAgVUlOVDggICAgICAgICBVdGY4QnVmZmVyU2l6ZTsNCj4gPiA+ ICsgIENIQVIxNiAgICAgICAgKlVjczJTdHJUZW1wOw0KPiA+ID4gKw0KPiA+ID4gKyAgaWYgKFV0 ZjhTdHIgPT0gTlVMTCB8fCBVY3MyU3RyQWRkciA9PSBOVUxMKSB7DQo+ID4gPiArICAgIHJldHVy biBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICAv Lw0KPiA+ID4gKyAgLy8gSXQgaXMgbm90IGFuIEFzY2lpIHN0cmluZywgY2FsY3VsYXRlIHN0cmlu ZyBsZW5ndGguDQo+ID4gPiArICAvLw0KPiA+ID4gKyAgVXRmOFN0ckxlbmd0aCA9IDA7DQo+ID4g PiArICB3aGlsZSAoKihVdGY4U3RyICsgVXRmOFN0ckxlbmd0aCkgIT0gJ1wwJykgew0KPiA+ID4g KyAgICBVdGY4U3RyTGVuZ3RoICsrOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgLy8N Cj4gPiA+ICsgIC8vIFVDUzIgc3RyaW5nIHNoYWxsIG5vdCBiZSBsb25nZXIgdGhhbiB0aGUgVVRG OCBzdHJpbmcuDQo+ID4gPiArICAvLw0KPiA+ID4gKyAgVWNzMlN0clRlbXAgPSBBbGxvY2F0ZVpl cm9Qb29sICgoVXRmOFN0ckxlbmd0aCArIDEpICogc2l6ZW9mDQo+ID4gPiArIChDSEFSMTYpKTsg IGlmIChVY3MyU3RyVGVtcCA9PSBOVUxMKSB7DQo+ID4gPiArICAgIHJldHVybiBFRklfT1VUX09G X1JFU09VUkNFUzsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIFV0ZjhTdHJJbmRleCA9 IDA7DQo+ID4gPiArICBVY3MyU3RySW5kZXggPSAwOw0KPiA+ID4gKyAgd2hpbGUgKFV0ZjhTdHJb VXRmOFN0ckluZGV4XSAhPSAnXDAnKSB7DQo+ID4gPiArDQo+ID4gPiArICAgIGlmIChDb21wYXJl TWVtIChVdGY4U3RyICsgVXRmOFN0ckluZGV4LCAiXFx1IiwgMikgPT0gMCAmJg0KPiA+ID4gKyAg ICAgIFV0ZjhTdHJMZW5ndGggLSBVdGY4U3RySW5kZXggPj0gVU5JQ09ERV9GT1JNQVRfTEVOKSB7 DQo+ID4gPiArDQo+ID4gPiArICAgICAgU3RhdHVzID0gR2V0VUNTMkNoYXJCeUZvcm1hdCAoVXRm OFN0ciArIFV0ZjhTdHJJbmRleCwNCj4gPiA+ICsgVWNzMlN0clRlbXAgKw0KPiA+ID4gVWNzMlN0 ckluZGV4KTsNCj4gPiA+ICsgICAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ID4g Kw0KPiA+ID4gKyAgICAgICAgVXRmOFN0ckluZGV4ICs9IFVOSUNPREVfRk9STUFUX0xFTjsNCj4g PiA+ICsgICAgICAgIFVjczJTdHJJbmRleCArKzsNCj4gPiA+ICsgICAgICB9IGVsc2Ugew0KPiA+ ID4gKw0KPiA+ID4gKyAgICAgICAgU3RyQ3B5UyAoVWNzMlN0clRlbXAgKyBVY3MyU3RySW5kZXgs IDMsIEwiXFx1Iik7DQo+ID4gPiArDQo+ID4gPiArICAgICAgICBVY3MyU3RySW5kZXggKz0gMjsN Cj4gPiA+ICsgICAgICAgIFV0ZjhTdHJJbmRleCArPSAyOw0KPiA+ID4gKyAgICAgIH0NCj4gPiA+ ICsgICAgfSBlbHNlIHsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICBVdGY4QnVmZmVyU2l6ZSA9IEdl dFVURjhTaXplRm9yVUNTMiAoVXRmOFN0ciArIFV0ZjhTdHJJbmRleCk7DQo+ID4gPiArICAgICAg aWYgKFV0ZjhCdWZmZXJTaXplID09IDAgfHwgVXRmOFN0ckxlbmd0aCAtIFV0ZjhTdHJJbmRleCA8 DQo+ID4gPiArIFV0ZjhCdWZmZXJTaXplKSB7DQo+ID4gPiArDQo+ID4gPiArICAgICAgICBGcmVl UG9vbCAoVWNzMlN0clRlbXApOw0KPiA+ID4gKyAgICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BB UkFNRVRFUjsNCj4gPiA+ICsgICAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgICAgU3RhdHVzID0g VVRGOFRvVUNTMkNoYXIgKFV0ZjhTdHIgKyBVdGY4U3RySW5kZXgsIFVjczJTdHJUZW1wDQo+ID4g PiArICsNCj4gPiA+IFVjczJTdHJJbmRleCk7DQo+ID4gPiArICAgICAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgRnJlZVBvb2wgKFVjczJTdHJUZW1w KTsNCj4gPiA+ICsgICAgICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gPiAr ICAgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgIFVjczJTdHJJbmRleCArKzsNCj4gPiA+ICsg ICAgICBVdGY4U3RySW5kZXggKz0gVXRmOEJ1ZmZlclNpemU7DQo+ID4gPiArICAgIH0NCj4gPiA+ ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICpVY3MyU3RyQWRkciA9IEFsbG9jYXRlWmVyb1Bvb2wg KChVY3MyU3RySW5kZXggKyAxKSAqIHNpemVvZg0KPiA+ID4gKyAoQ0hBUjE2KSk7ICBpZiAoKlVj czJTdHJBZGRyID09IE5VTEwpIHsNCj4gPiA+ICsNCj4gPiA+ICsgICAgRnJlZVBvb2wgKFVjczJT dHJUZW1wKTsNCj4gPiA+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ID4g KyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgU3RyQ3B5UyAoKlVjczJTdHJBZGRyLCBVY3MyU3RySW5k ZXggKyAxLCBVY3MyU3RyVGVtcCk7DQo+ID4gPiArICooKlVjczJTdHJBZGRyICsgVWNzMlN0cklu ZGV4KSA9IEwnXDAnOyAgRnJlZVBvb2wgKFVjczJTdHJUZW1wKTsNCj4gPiA+ICsNCj4gPiA+ICsg IHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiBkaWZmIC0tZ2l0 IGEvUmVkZmlzaFBrZy9MaWJyYXJ5L0Jhc2VVY3MyVXRmOExpYi9CYXNlVWNzMlV0ZjhMaWIuaW5m DQo+ID4gPiBiL1JlZGZpc2hQa2cvTGlicmFyeS9CYXNlVWNzMlV0ZjhMaWIvQmFzZVVjczJVdGY4 TGliLmluZg0KPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiA+IGluZGV4IDAwMDAwMDAw MDAuLmNjZDAyZWUzMjANCj4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ICsrKyBiL1JlZGZpc2hQ a2cvTGlicmFyeS9CYXNlVWNzMlV0ZjhMaWIvQmFzZVVjczJVdGY4TGliLmluZg0KPiA+ID4gQEAg LTAsMCArMSwzMSBAQA0KPiA+ID4gKyMjIEBmaWxlDQo+ID4gPiArIyBVQ1MyIHRvIFVURjggbWFu aXB1bGF0aW9uIGxpYnJhcnkuDQo+ID4gPiArIw0KPiA+ID4gKyMgQ29weXJpZ2h0IChjKSAyMDE5 LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+ICMNCj4gPiA+ICso QykgQ29weXJpZ2h0IDIwMjAgSGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2UgRGV2ZWxvcG1lbnQg TFA8QlI+ICMNCj4gPiA+ICsjICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1 c2UtUGF0ZW50DQo+ID4gPiArIw0KPiA+ID4gKyMjDQo+ID4gPiArDQo+ID4gPiArW0RlZmluZXNd DQo+ID4gPiArICBJTkZfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgPSAweDAwMDEwMDFiDQo+ ID4gPiArICBCQVNFX05BTUUgICAgICAgICAgICAgICAgICAgICAgPSBCYXNlVWNzMlV0ZjhMaWIN Cj4gPiA+ICsgIEZJTEVfR1VJRCAgICAgICAgICAgICAgICAgICAgICA9IDUzNjY0NkMzLTQ2RDAt NEIxMi1BQkM0LUNERTFBMzNCNTI1Ng0KPiA+ID4gKyAgTU9EVUxFX1RZUEUgICAgICAgICAgICAg ICAgICAgID0gQkFTRQ0KPiA+ID4gKyAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAgICAgID0g MS4wDQo+ID4gPiArICBMSUJSQVJZX0NMQVNTICAgICAgICAgICAgICAgICAgPSBVY3MyVXRmOExp Yg0KPiA+ID4gKw0KPiA+ID4gKyMNCj4gPiA+ICsjICBWQUxJRF9BUkNISVRFQ1RVUkVTICAgICAg ICAgICA9IElBMzIgWDY0IEFSTSBBQVJDSDY0IFJJU0NWNjQNCj4gPiA+ICsjDQo+ID4gPiArDQo+ ID4gPiArW1NvdXJjZXMuY29tbW9uXQ0KPiA+ID4gKyAgQmFzZVVjczJVdGY4TGliLmMNCj4gPiA+ ICsNCj4gPiA+ICtbUGFja2FnZXNdDQo+ID4gPiArICBNZGVQa2cvTWRlUGtnLmRlYw0KPiA+ID4g KyAgTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kZWMNCj4gPiA+ICsgIFJlZGZpc2hQa2cvUmVk ZmlzaFBrZy5kZWMNCj4gPiA+ICsNCj4gPiA+ICsNCj4gPiA+IGRpZmYgLS1naXQgYS9SZWRmaXNo UGtnL1JlZGZpc2hMaWJzLmRzYy5pbmMNCj4gPiA+IGIvUmVkZmlzaFBrZy9SZWRmaXNoTGlicy5k c2MuaW5jIGluZGV4IGU3ODBiNWMyNzAuLmQ0YzA4ZTE4YWMgMTAwNjQ0DQo+ID4gPiAtLS0gYS9S ZWRmaXNoUGtnL1JlZGZpc2hMaWJzLmRzYy5pbmMNCj4gPiA+ICsrKyBiL1JlZGZpc2hQa2cvUmVk ZmlzaExpYnMuZHNjLmluYw0KPiA+ID4gQEAgLTExLDUgKzExLDYgQEANCj4gPiA+ICAjDQo+ID4g PiAgIyMNCj4gPiA+ICAhaWYgJChSRURGSVNIX0VOQUJMRSkgPT0gVFJVRQ0KPiA+ID4gKw0KPiA+ ID4gKyBVY3MyVXRmOExpYnxSZWRmaXNoUGtnL0xpYnJhcnkvQmFzZVVjczJVdGY4TGliL0Jhc2VV Y3MyVXRmOExpYi5pbmYNCj4gPiA+ICAhZW5kaWYNCj4gPiA+DQo+ID4gPiBkaWZmIC0tZ2l0IGEv UmVkZmlzaFBrZy9SZWRmaXNoUGtnLmRlYyBiL1JlZGZpc2hQa2cvUmVkZmlzaFBrZy5kZWMNCj4g PiA+IGluZGV4IGIzOGU5YjQ3ODkuLmFlY2MxZjRhM2EgMTAwNjQ0DQo+ID4gPiAtLS0gYS9SZWRm aXNoUGtnL1JlZGZpc2hQa2cuZGVjDQo+ID4gPiArKysgYi9SZWRmaXNoUGtnL1JlZGZpc2hQa2cu ZGVjDQo+ID4gPiBAQCAtMjAsNiArMjAsMTAgQEANCj4gPiA+ICAgICMjICBAbGlicmFyeWNsYXNz IFBsYXRmb3JtIFJlZGZpc2ggSG9zdCBJbnRlcmZhY2UgTGlicmFyeQ0KPiA+ID4gICAgIyAgIFBs YXRmb3JtIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIFJlZGZpc2ggSG9zdCBJbnRlcmZhY2UuDQo+ ID4gPg0KPiA+ID4gUmVkZmlzaFBsYXRmb3JtSG9zdEludGVyZmFjZUxpYnxJbmNsdWRlL0xpYnJh cnkvUmVkZmlzaEhvc3RJbnRlcmZhY2UNCj4gPiA+IFJlZGZpc2hQbGF0Zm9ybUhvc3RJbnRlcmZh Y2VMaWJ8TGkNCj4gPiA+IFJlZGZpc2hQbGF0Zm9ybUhvc3RJbnRlcmZhY2VMaWJ8Yi5oDQo+ID4g PiArICAjIyAgQGxpYnJhcnljbGFzcyAgVGhpcyBsaWJyYXJ5IHByb3ZpZGVzIFVDUzIgdG8gVVRG OCBtYW5pcHVsYXRpb24NCj4gPiA+ICsgICMgICBmdW5jdGlvbnMuDQo+ID4gPiArICAjDQo+ID4g PiArICBVY3MyVXRmOExpYnxJbmNsdWRlL0xpYnJhcnkvQmFzZVVjczJVdGY4TGliLmgNCj4gPiA+ DQo+ID4gPiAgW1Byb3RvY29sc10NCj4gPiA+ICAgICMjIEluY2x1ZGUvUHJvdG9jb2wvUmVkZmlz aERpc2NvdmVyLmgNCj4gPiA+IGRpZmYgLS1naXQgYS9SZWRmaXNoUGtnL1JlZGZpc2hQa2cuZHNj IGIvUmVkZmlzaFBrZy9SZWRmaXNoUGtnLmRzYw0KPiA+ID4gaW5kZXgNCj4gPiA+IDk0ZTcxMjdi YzYuLmQxOThhOTRiNzMgMTAwNjQ0DQo+ID4gPiAtLS0gYS9SZWRmaXNoUGtnL1JlZGZpc2hQa2cu ZHNjDQo+ID4gPiArKysgYi9SZWRmaXNoUGtnL1JlZGZpc2hQa2cuZHNjDQo+ID4gPiBAQCAtNDMs NSArNDMsNiBAQA0KPiA+ID4NCj4gPiA+ICBbQ29tcG9uZW50c10NCj4gPiA+DQo+ID4gPiBSZWRm aXNoUGtnL0xpYnJhcnkvUGxhdGZvcm1Ib3N0SW50ZXJmYWNlTGliTnVsbC9QbGF0Zm9ybUhvc3RJ bnRlcmZhYw0KPiA+ID4gZUwNCj4gPiA+IGliTg0KPiA+ID4gdWxsLmluZg0KPiA+ID4gKyAgUmVk ZmlzaFBrZy9MaWJyYXJ5L0Jhc2VVY3MyVXRmOExpYi9CYXNlVWNzMlV0ZjhMaWIuaW5mDQo+ID4g Pg0KPiA+ID4gICAgIWluY2x1ZGUgUmVkZmlzaFBrZy9SZWRmaXNoLmRzYy5pbmMNCj4gPiA+IC0t DQo+ID4gPiAyLjE3LjENCj4gPiA+DQo+ID4gPg0KPiA+ID4NCj4gPiA+IA0KPiA+ID4NCj4gPg0K PiA+IElNUE9SVEFOVCBOT1RJQ0U6IFRoZSBjb250ZW50cyBvZiB0aGlzIGVtYWlsIGFuZCBhbnkg YXR0YWNobWVudHMgYXJlDQo+ID4gY29uZmlkZW50aWFsIGFuZCBtYXkgYWxzbyBiZSBwcml2aWxl Z2VkLiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQNCj4gPiByZWNpcGllbnQsIHBsZWFzZSBu b3RpZnkgdGhlIHNlbmRlciBpbW1lZGlhdGVseSBhbmQgZG8gbm90IGRpc2Nsb3NlDQo+ID4gdGhl IGNvbnRlbnRzIHRvIGFueSBvdGhlciBwZXJzb24sIHVzZSBpdCBmb3IgYW55IHB1cnBvc2UsIG9y IHN0b3JlIG9yDQo+ID4gY29weSB0aGUgaW5mb3JtYXRpb24gaW4gYW55IG1lZGl1bS4gVGhhbmsg eW91Lg0KSU1QT1JUQU5UIE5PVElDRTogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZW1haWwgYW5kIGFu eSBhdHRhY2htZW50cyBhcmUgY29uZmlkZW50aWFsIGFuZCBtYXkgYWxzbyBiZSBwcml2aWxlZ2Vk LiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50LCBwbGVhc2Ugbm90aWZ5IHRo ZSBzZW5kZXIgaW1tZWRpYXRlbHkgYW5kIGRvIG5vdCBkaXNjbG9zZSB0aGUgY29udGVudHMgdG8g YW55IG90aGVyIHBlcnNvbiwgdXNlIGl0IGZvciBhbnkgcHVycG9zZSwgb3Igc3RvcmUgb3IgY29w eSB0aGUgaW5mb3JtYXRpb24gaW4gYW55IG1lZGl1bS4gVGhhbmsgeW91Lg0K