From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 7484042394 for ; Fri, 17 Dec 2021 21:46:42 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B1C4368AEBA; Fri, 17 Dec 2021 23:46:40 +0200 (EET) Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2079.outbound.protection.outlook.com [40.92.89.79]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1A1D268AC7F for ; Fri, 17 Dec 2021 23:46:34 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kdeqajlgP8DQzP1gYDrrBYyVCyHtQPRA/7vDXqoWJBZAW+8TBBa3kGpBoyJ1FKMMRT+tj0Orl7EUy29Ib6xCKlNtz9Z6ZX1jCI6E17o7HcXcL+UmYEI2Aapql+zephUMhYDe4i8tKeu3jRkMBaQLNsZ1FVA5Wya74Y5N0BYckxhx6vMVc01cVooe59D3caawhw7TervS48nLqKthPn7bCuJ3KvKG+s3mUOPEi7OFkHZFPoVE7GP1OXln6MvHfM10ms6ZpKaoPmInWM9OPd1ip7r/RLkgdW0Xf/nT33Otd3h9/ZzHLC+LdUVZIWoqUzo1qNE//ERwCxhZPvY9A/47mw== 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=ZmllbfBnPzgAOeVWpp0P7v0tot8QP2s1KvQCKqIDjWg=; b=cwldG/0hyzJ5kxI4nC66k8ANkxJ9gjiOvRHUIvgp/J0GGUimIeEMJEHfpIdSoh4DmM0ByMEdIl2T5ukDt+bO/3WXgrjI2wVurt8yvzSQoCkKRnX8AVfcSIUl/5UrrDOv+RGXuThu12oc0BUxFSz4Q7akUJoo1M0hPGBH+2tJHTpuO7HAMIHqR1La5FTxR8by4pZAanwxm9jPZKczbnSrr8VeD0HD+ZiExjTgdQlp5dwx1qmyBraRcYBsHUOMx9diwQu49pD+FAJVMIWvOpX3uZEsZmZwM28/kwz0bzMuQOqlP3u+xRDWxHyxEBJ411GUPME5CAVjlNIvXlqBkh2G8g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZmllbfBnPzgAOeVWpp0P7v0tot8QP2s1KvQCKqIDjWg=; b=e6sbWsEMass5N8EVWmT7NIYc0/tSsOF4KbJbjx8uZuQNcNT8YcpqKdCn6JgfmtnHYjcdpWDsor65vVPgXOno7FxBtNlHPMHbkv956AvKeuWIP1tDo1hjTJCXI8+PBaFTuXjHPUPIa6zcMQfbckNcCRZdApxfk7KSHqPkWJIpzM0brIglNxGC10YE5kSRFjFNsi19hIaOCke1WZh8QH3o6YB56Ls7TpCCkI7IQ3k2Ov3x6Rna8sjRFrtbGGlX33tQYYtZxQeueG5nF+oRzts8/SC99h+sVYiv2EPmlC/v9finiFQr5BOu73Ugy12Q9dDH2WSLqSze0JcvCU/pUGU3uQ== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AS8PR03MB7157.eurprd03.prod.outlook.com (2603:10a6:20b:2ed::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4778.17; Fri, 17 Dec 2021 21:46:31 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::f0dc:92f5:6bc2:45ca]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::f0dc:92f5:6bc2:45ca%6]) with mapi id 15.20.4801.015; Fri, 17 Dec 2021 21:46:31 +0000 Message-ID: Date: Fri, 17 Dec 2021 22:46:29 +0100 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20211214163626.22186-1-pal@sandflow.com> From: Andreas Rheinhardt In-Reply-To: <20211214163626.22186-1-pal@sandflow.com> X-TMN: [N++aKTYYn4Yq8xLfupAdSfS+48oRRvwL] X-ClientProxiedBy: AS9PR06CA0063.eurprd06.prod.outlook.com (2603:10a6:20b:464::25) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <2e49163f-0fc7-4d8b-1978-4d280eec91cb@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c926a303-3b3e-4f2d-a8fa-08d9c1a6afba X-MS-TrafficTypeDiagnostic: AS8PR03MB7157:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 8kEm8WKkxzMa0Hiy3abQUuAjxJ5A1mdvg2s+EwNQEoMdk5C219D1HM/G6YmNYgZoybjkNERCXKWs4ENlwkGsN1HPM2Ic2dgP/xl/WQ4w3lKmzqF1NHaQx1nIvfnMn6l8mZUlV08hSGaxLsu5w5dnA7FWaeNS6s7Frbzy8TfKT8wVzMA/e/Xie08fgSOP6IQSNxRO/RClQ5L9OLPHLOcnMqFGa4hDib4EYE3O++yViAO9c3gBkDLAmFFqZclUlx0gmoy3yvxEqWwegTRqMu38yOhyBwhdQteLUwRfpnaFSrEs8JG789XFPygAdiYhOAlRi133BH9l0KK2SRTR1DwFFMQyfMsTGoPpTWp8SbEigo85yB/fMCsqgO6lPwujUomoIc8zkDhCAtmzHh7q+YliVzucz5LTfvSr7g2K9QMvn+tzLCFqpfg7DVCeHTKJnwYrKig4dLGX3CNiQXEvoG+xvxcqXmwLE2A/XrgKWzIHtnZIY1SAt0/dlXk9S27IlBlEzGmhpitAWxgQcOcMJR3BI4GCUTd2/bpxw4Y7t+JEqjWl9mosecI0tb0V9MjSONE1FTvoYYREQ5hIrHrYbWJlPPCH+Hea99JZ6BjN3+hoxDkQc3tstty1SPv/LhqXysWA X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cURqZmw0VVFKWEpqK3dubm0vUUdVVk1TdmFpZU9idTVXcldsQ25taFFydGxJ?= =?utf-8?B?SUVqMUdjclhrdkYrQVRVY2pkdEU4MEVZUm5EZzhxYTlHVzhqbFE0S3p2d2Fw?= =?utf-8?B?OGp6RG03LzlQRzJLMnNHMDM0dHg4OUpzUGtJS2x3d080Mjl3SVVPMGZ1Qksz?= =?utf-8?B?YjhIYTV3bmRMSlFLc2dyaDlhY0Zrak9IaW9XNlpicm53VG5LWGdvZEFaQWxK?= =?utf-8?B?KzYwVGEwK2RmYkJyUC9hclNENENtZzgvZVFpRHltUXFFUWQ2MlEzQWhhUjB5?= =?utf-8?B?c0w5aXBFLzNVc3ZrOFRhTGVxMlhiTlh6c1J2aGlRdXB4YnpSMXpteVhqdGlR?= =?utf-8?B?a0hJdUpBSUNKWUhlTlh2MHJKeWhRK0VudGkvdXpyY3JlOGNNNmkvOGc4Tk85?= =?utf-8?B?R0d5VEhoSTlIRXZ1eHdhVkxsdVVkeDZNUXNxZE80WVpvZWQrVFhuYjd0WWNJ?= =?utf-8?B?UUgzdEFFSEMxeU8rLzF0Sk1zbjJXaHBoZHFKbE9hdnhXZEd4cnhaOUpHK0Nm?= =?utf-8?B?Sk1XT012U2J6b0NydGsvTXhGYlU5Y25Gd01Pd1F6aVQ4RkxQUlpWZzlMK0Z5?= =?utf-8?B?eW5Ua3Jscm1oVUV1MmJhNXROQ1FOSFE2YWhLb0ZrMytReDdFMUM5VnF3d29J?= =?utf-8?B?RU5xTlNjY0Z5NTkxMEtFalhjYVhnaUFkNmdYNW9ZUW9zeUk1RGxaSEk0YUYr?= =?utf-8?B?cCtYNUlFRmVBM25naW0zN3ZvM3FtMUt5THZuZGZqaDdydGtEZWxFZ0QyOWZo?= =?utf-8?B?QU1maWpmQjVZMGN0R2ZsVmZsUTlpOGEzVEUyWjFWOHNZc0VRdDVNbE14ZTYr?= =?utf-8?B?cG1iZGl2UUdFTitzdUhTbXZiYVlPSnRRSS9Xa3NOZXI1dHI0VG4wMmtrZUda?= =?utf-8?B?MzNlMHJWVk1xdkxuZmZuSXFLbUk2VzJmcGJtNjVVakZHdlE3TXM2eVBodmlC?= =?utf-8?B?a1FJdXJhQ1dPblYxQUdac0drRjBNS0RsUE44Vjg0QUtCZ2NqNGhXSUEvQjNa?= =?utf-8?B?OFhQeXlyeU0vNm1IbnlxUlN4ejgvVXBTNXpYMjhGQ2J0TDlVYUxOS0RCRTdj?= =?utf-8?B?ZGdPMFVlYkhzc0dYdXVjSFVUYXZyYlptS1FVUndEeFVWTW1KUzhTc3ZlRCtF?= =?utf-8?B?VzcrSU1BZ1dhUEVzcFhObEZid3BLaThZbmFxNG52NC9sSUNWdk83TmdNelow?= =?utf-8?B?bWk3V0JwV01wNmFDSEVEcC9zV25teGQ0VDJuZlZ4OU8xZERGdDZvY3dyZnhY?= =?utf-8?B?UTBqOEtWQ0dQYWdYQm5qUjBIL1ljaTVQNzYxbVNvbkV1SlhCUT09?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c926a303-3b3e-4f2d-a8fa-08d9c1a6afba X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2021 21:46:31.0375 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR03MB7157 Subject: Re: [FFmpeg-devel] [PATCH v11 1/2] avformat/imf: Demuxer X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: cGFsQHNhbmRmbG93LmNvbToKPiBGcm9tOiBQaWVycmUtQW50aG9ueSBMZW1pZXV4IDxwYWxAcGFs ZW1pZXV4LmNvbT4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBQaWVycmUtQW50aG9ueSBMZW1pZXV4IDxw YWxAcGFsZW1pZXV4LmNvbT4KPiAtLS0KPiAKPiBOb3RlczoKPiAgICAgVGhlIElNRiBkZW11eGVy IGFjY2VwdHMgYXMgaW5wdXQgYW4gSU1GIENQTC4gVGhlIGFzc2V0cyByZWZlcmVuY2VkIGJ5IHRo ZSBDUEwgY2FuIGJlCj4gICAgIGNvbnRhaW5lZCBpbiBtdWx0aXBsZSBkZWxpdmVyaWVzLCBlYWNo IGRlZmluZWQgYnkgYW4gQVNTRVRNQVAgZmlsZToKPiAgICAgCj4gICAgIGZmbXBlZyAtYXNzZXRt YXBzIDxwYXRoIG9mIEFTU0VUTUFQMT4sPHBhdGggb2YgQVNTRVRNQVA+LC4uLiAtaSA8cGF0aCBv ZiBDUEw+Cj4gICAgIAo+ICAgICBJZiAtYXNzZXRtYXBzIGlzIG5vdCBzcGVjaWZpZWQsIEZGTVBF RyBsb29rcyBmb3IgYSBmaWxlIGNhbGxlZCBBU1NFVE1BUC54bWwgaW4gdGhlIHNhbWUgZGlyZWN0 b3J5IGFzIHRoZSBDUEwuCj4gICAgIAo+ICAgICBFWEFNUExFOgo+ICAgICAgICAgZmZtcGVnIC1p IGh0dHA6Ly9mZm1wZWctaW1mLXNhbXBsZXMtcHVibGljLnMzLXdlYnNpdGUtdXMtd2VzdC0xLmFt YXpvbmF3cy5jb20vY291bnRkb3duL0NQTF9mNTA5NWNhYS1mMjA0LTRlMWMtOGE4NC03YWY0OGM3 YWUxNmIueG1sIG91dC5tcDQKPiAgICAgCj4gICAgIFRoZSBJbnRlcm9wZXJhYmxlIE1hc3RlciBG b3JtYXQgKElNRikgaXMgYSBmaWxlLWJhc2VkIG1lZGlhIGZvcm1hdCBmb3IgdGhlCj4gICAgIGRl bGl2ZXJ5IGFuZCBzdG9yYWdlIG9mIHByb2Zlc3Npb25hbCBhdWRpby12aXN1YWwgbWFzdGVycy4K PiAgICAgQW4gSU1GIENvbXBvc2l0aW9uIGNvbnNpc3RzIG9mIGFuIFhNTCBwbGF5bGlzdCAodGhl IENvbXBvc2l0aW9uIFBsYXlsaXN0KQo+ICAgICBhbmQgYSBjb2xsZWN0aW9uIG9mIE1YRiBmaWxl cyAodGhlIFRyYWNrIEZpbGVzKS4gVGhlIENvbXBvc2l0aW9uIFBsYXlsaXN0IChDUEwpCj4gICAg IGFzc2VtYmxlcyB0aGUgVHJhY2sgRmlsZXMgb250byBhIHRpbWVsaW5lLCB3aGljaCBjb25zaXN0 cyBvZiBtdWx0aXBsZSB0cmFja3MuCj4gICAgIFRoZSBsb2NhdGlvbiBvZiB0aGUgVHJhY2sgRmls ZXMgcmVmZXJlbmNlZCBieSB0aGUgQ29tcG9zaXRpb24gUGxheWxpc3QgaXMgc3RvcmVkCj4gICAg IGluIG9uZSBvciBtb3JlIFhNTCBkb2N1bWVudHMgY2FsbGVkIEFzc2V0IE1hcHMuIE1vcmUgZGV0 YWlscyBhdCBodHRwczovL3d3dy5pbWZ1Zy5jb20vZXhwbGFpbmVyLgo+ICAgICBUaGUgSU1GIHN0 YW5kYXJkIHdhcyBmaXJzdCBpbnRyb2R1Y2VkIGluIDIwMTMgYW5kIGlzIG1hbmFnZWQgYnkgdGhl IFNNUFRFLgo+ICAgICAKPiAgICAgQ0hBTkdFIE5PVEVTOgo+ICAgICAKPiAgICAgLSBsaW1pdCBU cmFjayBGaWxlcyB0byBNWEYKPiAgICAgLSByZW1vdmUgc3RlYWx0aCB2YXJpYWJsZSBhc3NpZ25t ZW50Cj4gICAgIC0gcmVtb3ZlIHVudXNlZCBmdW5jdGlvbiBwYXJhbWV0ZXIKPiAKPiAgTUFJTlRB SU5FUlMgICAgICAgICAgICAgIHwgICAxICsKPiAgY29uZmlndXJlICAgICAgICAgICAgICAgIHwg ICAzICstCj4gIGRvYy9kZW11eGVycy50ZXhpICAgICAgICB8ICAgNiArCj4gIGxpYmF2Zm9ybWF0 L01ha2VmaWxlICAgICB8ICAgMSArCj4gIGxpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYyB8ICAgMSAr Cj4gIGxpYmF2Zm9ybWF0L2ltZi5oICAgICAgICB8IDIwNyArKysrKysrKysKPiAgbGliYXZmb3Jt YXQvaW1mX2NwbC5jICAgIHwgNzgzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ ICBsaWJhdmZvcm1hdC9pbWZkZWMuYyAgICAgfCA5MDUgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCj4gIDggZmlsZXMgY2hhbmdlZCwgMTkwNiBpbnNlcnRpb25zKCspLCAx IGRlbGV0aW9uKC0pCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZvcm1hdC9pbWYuaAo+ICBj cmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQvaW1mX2NwbC5jCj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBsaWJhdmZvcm1hdC9pbWZkZWMuYwo+IAo+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9p bWZkZWMuYyBiL2xpYmF2Zm9ybWF0L2ltZmRlYy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp bmRleCAwMDAwMDAwMDAwLi5lN2MwOTRlYmQ3Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYmF2 Zm9ybWF0L2ltZmRlYy5jCj4gQEAgLTAsMCArMSw5MDUgQEAKPiArLyoKPiArICogVGhpcyBmaWxl IGlzIHBhcnQgb2YgRkZtcGVnLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4gKyAqIHZl cnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKPiArICogTGVz c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICog WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRv IHRoZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0 cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKPiArICovCj4gKwo+ ICsvKgo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKGMpIFNhbmRmbG93IENvbnN1bHRpbmcgTExDCj4g KyAqCj4gKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAo+ICsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKPiArICoKPiArICog KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv cHlyaWdodCBub3RpY2UsIHRoaXMKPiArICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4KPiArICogKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCj4gKyAqICAgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUg ZG9jdW1lbnRhdGlvbgo+ICsgKiAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUgZGlzdHJpYnV0aW9uLgo+ICsgKgo+ICsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKPiArICog QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQo+ICsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQo+ICsgKiBBUkUgRElTQ0xB SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVU T1JTIEJFCj4gKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKPiArICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKPiArICogU1VCU1RJVFVU RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV U0lORVNTCj4gKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCj4gKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCj4gKyAqIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQgT0YgVEhFCj4gKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgo+ICsgKi8K PiArCj4gKy8qKgo+ICsgKiBEZW11eGVzIGFuIElNRiBDb21wb3NpdGlvbgo+ICsgKgo+ICsgKiBS ZWZlcmVuY2VzCj4gKyAqIE9WIDIwNjctMDoyMDE4IC0gU01QVEUgT3ZlcnZpZXcgRG9jdW1lbnQg LSBJbnRlcm9wZXJhYmxlIE1hc3RlciBGb3JtYXQKPiArICogU1QgMjA2Ny0yOjIwMjAgLSBTTVBU RSBTdGFuZGFyZCAtIEludGVyb3BlcmFibGUgTWFzdGVyIEZvcm1hdCDigJQgQ29yZSBDb25zdHJh aW50cwo+ICsgKiBTVCAyMDY3LTM6MjAyMCAtIFNNUFRFIFN0YW5kYXJkIC0gSW50ZXJvcGVyYWJs ZSBNYXN0ZXIgRm9ybWF0IOKAlCBDb21wb3NpdGlvbiBQbGF5bGlzdAo+ICsgKiBTVCAyMDY3LTU6 MjAyMCAtIFNNUFRFIFN0YW5kYXJkIC0gSW50ZXJvcGVyYWJsZSBNYXN0ZXIgRm9ybWF0IOKAlCBF c3NlbmNlIENvbXBvbmVudAo+ICsgKiBTVCAyMDY3LTIwOjIwMTYgLSBTTVBURSBTdGFuZGFyZCAt IEludGVyb3BlcmFibGUgTWFzdGVyIEZvcm1hdCDigJQgQXBwbGljYXRpb24gIzIKPiArICogU1Qg MjA2Ny0yMToyMDIwIC0gU01QVEUgU3RhbmRhcmQgLSBJbnRlcm9wZXJhYmxlIE1hc3RlciBGb3Jt YXQg4oCUIEFwcGxpY2F0aW9uICMyIEV4dGVuZGVkCj4gKyAqIFNUIDIwNjctMTAyOjIwMTcgLSBT TVBURSBTdGFuZGFyZCAtIEludGVyb3BlcmFibGUgTWFzdGVyIEZvcm1hdCDigJQgQ29tbW9uIElt YWdlIFBpeGVsIENvbG9yIFNjaGVtZXMKPiArICogU1QgNDI5LTk6MjAwNyAtIFNNUFRFIFN0YW5k YXJkIC0gRC1DaW5lbWEgUGFja2FnaW5nIOKAlCBBc3NldCBNYXBwaW5nIGFuZCBGaWxlIFNlZ21l bnRhdGlvbgo+ICsgKgo+ICsgKiBAYXV0aG9yIE1hcmMtQW50b2luZSBBcm5hdWQKPiArICogQGF1 dGhvciBWYWxlbnRpbiBOb2VsCj4gKyAqIEBhdXRob3IgTmljaG9sYXMgVmFuZGVyendldAo+ICsg KiBAZmlsZQo+ICsgKiBAaW5ncm91cCBsYXZ1X2ltZgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlICJp bWYuaCIKPiArI2luY2x1ZGUgImludGVybmFsLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZz dHJpbmcuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9icHJpbnQuaCIKPiArI2luY2x1ZGUgImxp YmF2dXRpbC9vcHQuaCIKPiArI2luY2x1ZGUgIm14Zi5oIgo+ICsjaW5jbHVkZSAidXJsLmgiCj4g KyNpbmNsdWRlIDxpbnR0eXBlcy5oPgo+ICsjaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgo+ICsK PiArI2RlZmluZSBNQVhfQlBSSU5UX1JFQURfU0laRSAoVUlOVF9NQVggLSAxKQo+ICsjZGVmaW5l IERFRkFVTFRfQVNTRVRNQVBfU0laRSA4ICogMTAyNAo+ICsjZGVmaW5lIEFWUkFUSU9OQUxfRk9S TUFUICIlZC8lZCIKPiArI2RlZmluZSBBVlJBVElPTkFMX0FSRyhyYXRpb25hbCkgcmF0aW9uYWwu bnVtLCByYXRpb25hbC5kZW4KPiArCj4gKy8qKgo+ICsgKiBJTUYgQXNzZXQgbG9jYXRvcgo+ICsg Ki8KPiArdHlwZWRlZiBzdHJ1Y3QgSU1GQXNzZXRMb2NhdG9yIHsKPiArICAgIEZGSU1GVVVJRCB1 dWlkOwo+ICsgICAgY2hhciAqYWJzb2x1dGVfdXJpOwo+ICt9IElNRkFzc2V0TG9jYXRvcjsKPiAr Cj4gKy8qKgo+ICsgKiBJTUYgQXNzZXQgbG9jYXRvciBtYXAKPiArICogUmVzdWx0cyBmcm9tIHRo ZSBwYXJzaW5nIG9mIG9uZSBvciBtb3JlIEFTU0VUTUFQIFhNTCBmaWxlcwo+ICsgKi8KPiArdHlw ZWRlZiBzdHJ1Y3QgSU1GQXNzZXRMb2NhdG9yTWFwIHsKPiArICAgIHVpbnQzMl90IGFzc2V0X2Nv dW50Owo+ICsgICAgSU1GQXNzZXRMb2NhdG9yICphc3NldHM7Cj4gK30gSU1GQXNzZXRMb2NhdG9y TWFwOwo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgSU1GVmlydHVhbFRyYWNrUmVzb3VyY2VQbGF5YmFj a0N0eCB7Cj4gKyAgICBJTUZBc3NldExvY2F0b3IgKmxvY2F0b3I7Cj4gKyAgICBGRklNRlRyYWNr RmlsZVJlc291cmNlICpyZXNvdXJjZTsKPiArICAgIEFWRm9ybWF0Q29udGV4dCAqY3R4Owo+ICt9 IElNRlZpcnR1YWxUcmFja1Jlc291cmNlUGxheWJhY2tDdHg7Cj4gKwo+ICt0eXBlZGVmIHN0cnVj dCBJTUZWaXJ0dWFsVHJhY2tQbGF5YmFja0N0eCB7Cj4gKyAgICAvLyBUcmFjayBpbmRleCBpbiBw bGF5bGlzdAo+ICsgICAgaW50MzJfdCBpbmRleDsKPiArICAgIC8vIFRpbWUgY291bnRlcnMKPiAr ICAgIEFWUmF0aW9uYWwgY3VycmVudF90aW1lc3RhbXA7Cj4gKyAgICBBVlJhdGlvbmFsIGR1cmF0 aW9uOwo+ICsgICAgLy8gUmVzb3VyY2VzCj4gKyAgICB1aW50MzJfdCByZXNvdXJjZV9jb3VudDsK PiArICAgIHVpbnQzMl90IHJlc291cmNlc19hbGxvY19zejsKPiArICAgIElNRlZpcnR1YWxUcmFj a1Jlc291cmNlUGxheWJhY2tDdHggKnJlc291cmNlczsKPiArICAgIC8vIERlY29kaW5nIGN1cnNv cnMKPiArICAgIHVpbnQzMl90IGN1cnJlbnRfcmVzb3VyY2VfaW5kZXg7Cj4gKyAgICBpbnQ2NF90 IGxhc3RfcHRzOwo+ICt9IElNRlZpcnR1YWxUcmFja1BsYXliYWNrQ3R4Owo+ICsKPiArdHlwZWRl ZiBzdHJ1Y3QgSU1GQ29udGV4dCB7Cj4gKyAgICBjb25zdCBBVkNsYXNzICpjbGFzczsKPiArICAg IGNvbnN0IGNoYXIgKmJhc2VfdXJsOwo+ICsgICAgY2hhciAqYXNzZXRfbWFwX3BhdGhzOwo+ICsg ICAgQVZJT0ludGVycnVwdENCICppbnRlcnJ1cHRfY2FsbGJhY2s7Cj4gKyAgICBBVkRpY3Rpb25h cnkgKmF2aW9fb3B0czsKPiArICAgIEZGSU1GQ1BMICpjcGw7Cj4gKyAgICBJTUZBc3NldExvY2F0 b3JNYXAgYXNzZXRfbG9jYXRvcl9tYXA7Cj4gKyAgICB1aW50MzJfdCB0cmFja19jb3VudDsKPiAr ICAgIElNRlZpcnR1YWxUcmFja1BsYXliYWNrQ3R4ICoqdHJhY2tzOwo+ICt9IElNRkNvbnRleHQ7 Cj4gKwo+ICtzdGF0aWMgaW50IGltZl91cmlfaXNfdXJsKGNvbnN0IGNoYXIgKnN0cmluZykKPiAr ewo+ICsgICAgcmV0dXJuIHN0cnN0cihzdHJpbmcsICI6Ly8iKSAhPSBOVUxMOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IGltZl91cmlfaXNfdW5peF9hYnNfcGF0aChjb25zdCBjaGFyICpzdHJpbmcp Cj4gK3sKPiArICAgIHJldHVybiBzdHJpbmdbMF0gPT0gJy8nOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IGltZl91cmlfaXNfZG9zX2Fic19wYXRoKGNvbnN0IGNoYXIgKnN0cmluZykKPiArewo+ICsg ICAgLyogQWJzb2x1dGUgcGF0aCBjYXNlOiBgQzpccGF0aFx0b1xzb213aGVyZWAgKi8KPiArICAg IGlmIChzdHJpbmdbMV0gPT0gJzonICYmIHN0cmluZ1syXSA9PSAnXFwnKQo+ICsgICAgICAgIHJl dHVybiAxOwo+ICsKPiArICAgIC8qIEFic29sdXRlIHBhdGggY2FzZTogYEM6L3BhdGgvdG8vc29t d2hlcmVgICovCj4gKyAgICBpZiAoc3RyaW5nWzFdID09ICc6JyAmJiBzdHJpbmdbMl0gPT0gJy8n KQo+ICsgICAgICAgIHJldHVybiAxOwo+ICsKPiArICAgIC8qIE5ldHdvcmsgcGF0aCBjYXNlOiBg XFxwYXRoXHRvXHNvbXdoZXJlYCAqLwo+ICsgICAgaWYgKHN0cmluZ1swXSA9PSAnXFwnICYmIHN0 cmluZ1sxXSA9PSAnXFwnKQo+ICsgICAgICAgIHJldHVybiAxOwo+ICsKPiArICAgIHJldHVybiAw Owo+ICt9Cj4gKwo+ICsvKioKPiArICogUGFyc2UgYSBBU1NFVE1BUCBYTUwgZmlsZSB0byBleHRy YWN0IHRoZSBVVUlELVVSSSBtYXBwaW5nIG9mIGFzc2V0cy4KPiArICogQHBhcmFtIHMgdGhlIGN1 cnJlbnQgZm9ybWF0IGNvbnRleHQsIGlmIGFueSAoY2FuIGJlIE5VTEwpLgo+ICsgKiBAcGFyYW0g ZG9jIHRoZSBYTUwgZG9jdW1lbnQgdG8gYmUgcGFyc2VkLgo+ICsgKiBAcGFyYW0gYXNzZXRfbWFw IHBvaW50ZXIgb24gdGhlIElNRkFzc2V0TG9jYXRvck1hcCB0byBmaWxsLgo+ICsgKiBAcGFyYW0g YmFzZV91cmwgdGhlIHVybCBvZiB0aGUgYXNzZXQgbWFwIFhNTCBmaWxlLCBpZiBhbnkgKGNhbiBi ZSBOVUxMKS4KPiArICogQHJldHVybiBhIG5lZ2F0aXZlIHZhbHVlIGluIGNhc2Ugb2YgZXJyb3Is IDAgb3RoZXJ3aXNlLgo+ICsgKi8KPiArc3RhdGljIGludCBwYXJzZV9pbWZfYXNzZXRfbWFwX2Zy b21feG1sX2RvbShBVkZvcm1hdENvbnRleHQgKnMsCj4gKyAgICB4bWxEb2NQdHIgZG9jLAo+ICsg ICAgSU1GQXNzZXRMb2NhdG9yTWFwICphc3NldF9tYXAsCj4gKyAgICBjb25zdCBjaGFyICpiYXNl X3VybCkKPiArewo+ICsgICAgeG1sTm9kZVB0ciBhc3NldF9tYXBfZWxlbWVudCA9IE5VTEw7Cj4g KyAgICB4bWxOb2RlUHRyIG5vZGUgPSBOVUxMOwo+ICsgICAgeG1sTm9kZVB0ciBhc3NldF9lbGVt ZW50ID0gTlVMTDsKPiArICAgIGNoYXIgKnVyaTsKPiArICAgIGludCByZXQgPSAwOwo+ICsgICAg SU1GQXNzZXRMb2NhdG9yICphc3NldCA9IE5VTEw7Cj4gKyAgICB2b2lkICp0bXA7Cj4gKwo+ICsg ICAgYXNzZXRfbWFwX2VsZW1lbnQgPSB4bWxEb2NHZXRSb290RWxlbWVudChkb2MpOwo+ICsKPiAr ICAgIGlmICghYXNzZXRfbWFwX2VsZW1lbnQpIHsKPiArICAgICAgICBhdl9sb2cocywgQVZfTE9H X0VSUk9SLCAiVW5hYmxlIHRvIHBhcnNlIGFzc2V0IG1hcCBYTUwgLSBtaXNzaW5nIHJvb3Qgbm9k ZVxuIik7Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICB9Cj4g Kwo+ICsgICAgaWYgKGFzc2V0X21hcF9lbGVtZW50LT50eXBlICE9IFhNTF9FTEVNRU5UX05PREUg fHwgYXZfc3RyY2FzZWNtcChhc3NldF9tYXBfZWxlbWVudC0+bmFtZSwgIkFzc2V0TWFwIikpIHsK PiArICAgICAgICBhdl9sb2cocywKPiArICAgICAgICAgICAgQVZfTE9HX0VSUk9SLAo+ICsgICAg ICAgICAgICAiVW5hYmxlIHRvIHBhcnNlIGFzc2V0IG1hcCBYTUwgLSB3cm9uZyByb290IG5vZGUg bmFtZVslc10gdHlwZVslZF1cbiIsCj4gKyAgICAgICAgICAgIGFzc2V0X21hcF9lbGVtZW50LT5u YW1lLAo+ICsgICAgICAgICAgICAoaW50KWFzc2V0X21hcF9lbGVtZW50LT50eXBlKTsKPiArICAg ICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgIH0KPiArCj4gKyAgICAvKiBw YXJzZSBhc3NldCBsb2NhdG9ycyAqLwo+ICsgICAgaWYgKCEobm9kZSA9IGZmX2ltZl94bWxfZ2V0 X2NoaWxkX2VsZW1lbnRfYnlfbmFtZShhc3NldF9tYXBfZWxlbWVudCwgIkFzc2V0TGlzdCIpKSkg ewo+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gcGFyc2UgYXNz ZXQgbWFwIFhNTCAtIG1pc3NpbmcgQXNzZXRMaXN0IG5vZGVcbiIpOwo+ICsgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgfQo+ICsgICAgdG1wID0gYXZfcmVhbGxvYyhh c3NldF9tYXAtPmFzc2V0cywKPiArICAgICAgICAoeG1sQ2hpbGRFbGVtZW50Q291bnQobm9kZSkg KyBhc3NldF9tYXAtPmFzc2V0X2NvdW50KQo+ICsgICAgICAgICAgICAqIHNpemVvZihJTUZBc3Nl dExvY2F0b3IpKTsKCkNhbiB0aGlzIG92ZXJmbG93PyBJZiBzbywgYXZfcmVhbGxvY19hcnJheSgp IHdvdWxkIHRha2UgY2FyZSBvZiB0aGUKb3ZlcmZsb3cgZm9yIHRoZSBtdWx0aXBsaWNhdGlvbjsg YnV0IGl0IHdvdWxkIG5vdCBkbyBhbnl0aGluZyBmb3IgdGhlCmFkZGl0aW9uLgoKPiArICAgIGlm ICghdG1wKSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkNhbm5vdCBh bGxvY2F0ZSBJTUYgYXNzZXQgbG9jYXRvcnNcbiIpOwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9S KEVOT01FTSk7Cj4gKyAgICB9Cj4gKyAgICBhc3NldF9tYXAtPmFzc2V0cyA9IHRtcDsKPiArCj4g KyAgICBhc3NldF9lbGVtZW50ID0geG1sRmlyc3RFbGVtZW50Q2hpbGQobm9kZSk7Cj4gKyAgICB3 aGlsZSAoYXNzZXRfZWxlbWVudCkgewo+ICsgICAgICAgIGlmIChhdl9zdHJjYXNlY21wKGFzc2V0 X2VsZW1lbnQtPm5hbWUsICJBc3NldCIpICE9IDApCj4gKyAgICAgICAgICAgIGNvbnRpbnVlOwo+ ICsKPiArICAgICAgICBhc3NldCA9ICYoYXNzZXRfbWFwLT5hc3NldHNbYXNzZXRfbWFwLT5hc3Nl dF9jb3VudF0pOwo+ICsKPiArICAgICAgICBpZiAoZmZfaW1mX3htbF9yZWFkX3V1aWQoZmZfaW1m X3htbF9nZXRfY2hpbGRfZWxlbWVudF9ieV9uYW1lKGFzc2V0X2VsZW1lbnQsICJJZCIpLCBhc3Nl dC0+dXVpZCkpIHsKPiArICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIkNvdWxk IG5vdCBwYXJzZSBVVUlEIGZyb20gYXNzZXQgaW4gYXNzZXQgbWFwLlxuIik7Cj4gKyAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAg ICAgYXZfbG9nKHMsIEFWX0xPR19ERUJVRywgIkZvdW5kIGFzc2V0IGlkOiAiIEZGX0lNRl9VVUlE X0ZPUk1BVCAiXG4iLCBVSURfQVJHKGFzc2V0LT51dWlkKSk7Cj4gKwo+ICsgICAgICAgIGlmICgh KG5vZGUgPSBmZl9pbWZfeG1sX2dldF9jaGlsZF9lbGVtZW50X2J5X25hbWUoYXNzZXRfZWxlbWVu dCwgIkNodW5rTGlzdCIpKSkgewo+ICsgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9S LCAiVW5hYmxlIHRvIHBhcnNlIGFzc2V0IG1hcCBYTUwgLSBtaXNzaW5nIENodW5rTGlzdCBub2Rl XG4iKTsKPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICAg ICAgfQo+ICsKPiArICAgICAgICBpZiAoIShub2RlID0gZmZfaW1mX3htbF9nZXRfY2hpbGRfZWxl bWVudF9ieV9uYW1lKG5vZGUsICJDaHVuayIpKSkgewo+ICsgICAgICAgICAgICBhdl9sb2cocywg QVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIHBhcnNlIGFzc2V0IG1hcCBYTUwgLSBtaXNzaW5nIENo dW5rIG5vZGVcbiIpOwo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsK PiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIHVyaSA9IHhtbE5vZGVHZXRDb250ZW50KGZmX2lt Zl94bWxfZ2V0X2NoaWxkX2VsZW1lbnRfYnlfbmFtZShub2RlLCAiUGF0aCIpKTsKPiArICAgICAg ICBpZiAoIWltZl91cmlfaXNfdXJsKHVyaSkgJiYgIWltZl91cmlfaXNfdW5peF9hYnNfcGF0aCh1 cmkpICYmICFpbWZfdXJpX2lzX2Rvc19hYnNfcGF0aCh1cmkpKQo+ICsgICAgICAgICAgICBhc3Nl dC0+YWJzb2x1dGVfdXJpID0gYXZfYXBwZW5kX3BhdGhfY29tcG9uZW50KGJhc2VfdXJsLCB1cmkp Owo+ICsgICAgICAgIGVsc2UKPiArICAgICAgICAgICAgYXNzZXQtPmFic29sdXRlX3VyaSA9IGF2 X3N0cmR1cCh1cmkpOwo+ICsgICAgICAgIHhtbEZyZWUodXJpKTsKPiArICAgICAgICBpZiAoIWFz c2V0LT5hYnNvbHV0ZV91cmkpIHsKPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVN KTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfREVCVUcsICJG b3VuZCBhc3NldCBhYnNvbHV0ZSBVUkk6ICVzXG4iLCBhc3NldC0+YWJzb2x1dGVfdXJpKTsKPiAr Cj4gKyAgICAgICAgYXNzZXRfbWFwLT5hc3NldF9jb3VudCsrOwo+ICsgICAgICAgIGFzc2V0X2Vs ZW1lbnQgPSB4bWxOZXh0RWxlbWVudFNpYmxpbmcoYXNzZXRfZWxlbWVudCk7Cj4gKyAgICB9Cj4g Kwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIEluaXRpYWxpemVzIGFu IElNRkFzc2V0TG9jYXRvck1hcCBzdHJ1Y3R1cmUuCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBpbWZf YXNzZXRfbG9jYXRvcl9tYXBfaW5pdChJTUZBc3NldExvY2F0b3JNYXAgKmFzc2V0X21hcCkKPiAr ewo+ICsgICAgYXNzZXRfbWFwLT5hc3NldHMgPSBOVUxMOwo+ICsgICAgYXNzZXRfbWFwLT5hc3Nl dF9jb3VudCA9IDA7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBGcmVlIGEgSU1GQXNzZXRMb2NhdG9y TWFwIHBvaW50ZXIuCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBpbWZfYXNzZXRfbG9jYXRvcl9tYXBf ZGVpbml0KElNRkFzc2V0TG9jYXRvck1hcCAqYXNzZXRfbWFwKQo+ICt7Cj4gKyAgICBmb3IgKHVp bnQzMl90IGkgPSAwOyBpIDwgYXNzZXRfbWFwLT5hc3NldF9jb3VudDsgKytpKQo+ICsgICAgICAg IGF2X2ZyZWVwKCZhc3NldF9tYXAtPmFzc2V0c1tpXS5hYnNvbHV0ZV91cmkpOwo+ICsgICAgYXZf ZnJlZXAoJmFzc2V0X21hcC0+YXNzZXRzKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBwYXJzZV9h c3NldG1hcChBVkZvcm1hdENvbnRleHQgKnMsIGNvbnN0IGNoYXIgKnVybCkKPiArewo+ICsgICAg SU1GQ29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiArICAgIEFWSU9Db250ZXh0ICppbiA9IE5V TEw7Cj4gKyAgICBzdHJ1Y3QgQVZCUHJpbnQgYnVmOwo+ICsgICAgQVZEaWN0aW9uYXJ5ICpvcHRz ID0gTlVMTDsKCm9wdHMgc2hvdWxkIGJlIGxvY2FsIHRvIHRoZSBibG9jayBiZWxvdyAoaWYgc2Fp ZCBibG9jayBpcyBpbmRlZWQgbmVlZGVkKS4KCj4gKyAgICB4bWxEb2MgKmRvYyA9IE5VTEw7Cj4g KyAgICBjb25zdCBjaGFyICpiYXNlX3VybDsKPiArICAgIGNoYXIgKnRtcF9zdHIgPSBOVUxMOwo+ ICsgICAgaW50IGNsb3NlX2luID0gMDsKPiArICAgIGludCByZXQ7Cj4gKyAgICBpbnQ2NF90IGZp bGVzaXplOwo+ICsKPiArICAgIGF2X2xvZyhzLCBBVl9MT0dfREVCVUcsICJBc3NldCBNYXAgVVJM OiAlc1xuIiwgdXJsKTsKPiArCj4gKyAgICBpZiAoIWluKSB7CgpJcyB0aGVyZSBhIHByb3BlciBp bml0aWFsaXphdGlvbiBmb3IgaW4gbWlzc2luZyBhYm92ZT8gVGhpcyBjaGVjayBpcwphbHdheXMg dHJ1ZS4KCj4gKyAgICAgICAgY2xvc2VfaW4gPSAxOwo+ICsKPiArICAgICAgICBhdl9kaWN0X2Nv cHkoJm9wdHMsIGMtPmF2aW9fb3B0cywgMCk7Cj4gKyAgICAgICAgcmV0ID0gcy0+aW9fb3Blbihz LCAmaW4sIHVybCwgQVZJT19GTEFHX1JFQUQsICZvcHRzKTsKPiArICAgICAgICBhdl9kaWN0X2Zy ZWUoJm9wdHMpOwo+ICsgICAgICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgICAgICByZXR1cm4g cmV0Owo+ICsgICAgfQo+ICsKPiArICAgIGZpbGVzaXplID0gYXZpb19zaXplKGluKTsKPiArICAg IGZpbGVzaXplID0gZmlsZXNpemUgPiAwID8gZmlsZXNpemUgOiBERUZBVUxUX0FTU0VUTUFQX1NJ WkU7Cj4gKwo+ICsgICAgYXZfYnByaW50X2luaXQoJmJ1ZiwgZmlsZXNpemUgKyAxLCBBVl9CUFJJ TlRfU0laRV9VTkxJTUlURUQpOwo+ICsKPiArICAgIHJldCA9IGF2aW9fcmVhZF90b19icHJpbnQo aW4sICZidWYsIE1BWF9CUFJJTlRfUkVBRF9TSVpFKTsKPiArICAgIGlmIChyZXQgPCAwIHx8ICFh dmlvX2Zlb2YoaW4pIHx8IGJ1Zi5sZW4gPT0gMCkgewo+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9M T0dfRVJST1IsICJVbmFibGUgdG8gcmVhZCB0byBhc3NldCBtYXAgJyVzJ1xuIiwgdXJsKTsKPiAr ICAgICAgICBpZiAocmV0ID09IDApCj4gKyAgICAgICAgICAgIHJldCA9IEFWRVJST1JfSU5WQUxJ RERBVEE7Cj4gKyAgICAgICAgZ290byBjbGVhbl91cDsKPiArICAgIH0KPiArCj4gKyAgICBMSUJY TUxfVEVTVF9WRVJTSU9OCj4gKwo+ICsgICAgdG1wX3N0ciA9IGF2X3N0cmR1cCh1cmwpOwo+ICsg ICAgaWYgKCF0bXBfc3RyKSB7Cj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+ICsg ICAgICAgIGdvdG8gY2xlYW5fdXA7Cj4gKyAgICB9Cj4gKyAgICBiYXNlX3VybCA9IGF2X2Rpcm5h bWUodG1wX3N0cik7Cj4gKwo+ICsgICAgZmlsZXNpemUgPSBidWYubGVuOwo+ICsgICAgZG9jID0g eG1sUmVhZE1lbW9yeShidWYuc3RyLCBmaWxlc2l6ZSwgdXJsLCBOVUxMLCAwKTsKPiArCj4gKyAg ICByZXQgPSBwYXJzZV9pbWZfYXNzZXRfbWFwX2Zyb21feG1sX2RvbShzLCBkb2MsICZjLT5hc3Nl dF9sb2NhdG9yX21hcCwgYmFzZV91cmwpOwo+ICsgICAgaWYgKCFyZXQpCj4gKyAgICAgICAgYXZf bG9nKHMsCj4gKyAgICAgICAgICAgIEFWX0xPR19ERUJVRywKPiArICAgICAgICAgICAgIkZvdW5k ICVkIGFzc2V0cyBmcm9tICVzXG4iLAo+ICsgICAgICAgICAgICBjLT5hc3NldF9sb2NhdG9yX21h cC5hc3NldF9jb3VudCwKPiArICAgICAgICAgICAgdXJsKTsKPiArCj4gKyAgICB4bWxGcmVlRG9j KGRvYyk7Cj4gKwo+ICtjbGVhbl91cDoKPiArICAgIGlmICh0bXBfc3RyKQo+ICsgICAgICAgIGF2 X2ZyZWVwKCZ0bXBfc3RyKTsKPiArICAgIGlmIChjbG9zZV9pbikKPiArICAgICAgICBhdmlvX2Ns b3NlKGluKTsKCklmIHlvdSBvcGVuIGFuIEFWSU9Db250ZXh0IHZpYSAtPmlvX29wZW4sIHlvdSBz aG91bGQgY2xvc2UgaXQgdmlhCmlvX2Nsb3NlOyBvciBhY3R1YWxseTogdmlhIGZmX2Zvcm1hdF9p b19jbG9zZShzLCAmaW4pLgoKCj4gKyAgICBhdl9icHJpbnRfZmluYWxpemUoJmJ1ZiwgTlVMTCk7 Cj4gKwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIElNRkFzc2V0TG9jYXRv ciAqZmluZF9hc3NldF9tYXBfbG9jYXRvcihJTUZBc3NldExvY2F0b3JNYXAgKmFzc2V0X21hcCwg RkZJTUZVVUlEIHV1aWQpCj4gK3sKPiArICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBhc3Nl dF9tYXAtPmFzc2V0X2NvdW50OyArK2kpCj4gKyAgICAgICAgaWYgKG1lbWNtcChhc3NldF9tYXAt PmFzc2V0c1tpXS51dWlkLCB1dWlkLCAxNikgPT0gMCkKPiArICAgICAgICAgICAgcmV0dXJuICYo YXNzZXRfbWFwLT5hc3NldHNbaV0pOwo+ICsgICAgcmV0dXJuIE5VTEw7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgb3Blbl90cmFja19yZXNvdXJjZV9jb250ZXh0KEFWRm9ybWF0Q29udGV4dCAqcywK PiArICAgIElNRlZpcnR1YWxUcmFja1Jlc291cmNlUGxheWJhY2tDdHggKnRyYWNrX3Jlc291cmNl KQo+ICt7Cj4gKyAgICBJTUZDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ICsgICAgaW50IHJl dCA9IDA7Cj4gKyAgICBpbnQ2NF90IGVudHJ5X3BvaW50Owo+ICsgICAgQVZEaWN0aW9uYXJ5ICpv cHRzID0gTlVMTDsKPiArCj4gKyAgICBpZiAoIXRyYWNrX3Jlc291cmNlLT5jdHgpIHsKPiArICAg ICAgICB0cmFja19yZXNvdXJjZS0+Y3R4ID0gYXZmb3JtYXRfYWxsb2NfY29udGV4dCgpOwo+ICsg ICAgICAgIGlmICghdHJhY2tfcmVzb3VyY2UtPmN0eCkKPiArICAgICAgICAgICAgcmV0dXJuIEFW RVJST1IoRU5PTUVNKTsKPiArICAgIH0KPiArCj4gKyAgICBpZiAodHJhY2tfcmVzb3VyY2UtPmN0 eC0+aWZvcm1hdCkgewoKSSBkbyBub3Qgc2VlIGEgc2NlbmFyaW8gaW4gd2hpY2ggdHJhY2tfcmVz b3VyY2UtPmN0eCBjb3VsZCBiZSAhPSBOVUxMLApidXQgdHJhY2tfcmVzb3VyY2UtPmN0eC0+aWZv cm1hdCBpcyBub3Q6IEFmdGVyIGFsbCwgeW91IGZyZWUgaXQgb24gZXJyb3IKb2YgZmZfY29weV93 aGl0ZWJsYWNrbGlzdHMoKSBhbmQgYXZmb3JtYXRfb3Blbl9pbnB1dCgpIGZyZWVzIGl0IG9uCmVy cm9yLCB0b28uIFNvIHlvdSBjb3VsZCBqdXN0IGFzIHdlbGwganVzdCBjaGVjayBmb3IgdHJhY2tf cmVzb3VyY2UtPmN0eAphdCB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgZnVuY3Rpb24gYW5kIHJldHVy biBpbiB0aGlzIGNhc2UgYW5kIGFsbG9jYXRlCnRyYWNrX3Jlc291cmNlLT5jdHggdW5jb25kaXRp b25hbGx5IGluIHRoZSBvdGhlciBjYXNlLgoKPiArICAgICAgICBhdl9sb2cocywKPiArICAgICAg ICAgICAgQVZfTE9HX0RFQlVHLAo+ICsgICAgICAgICAgICAiSW5wdXQgY29udGV4dCBhbHJlYWR5 IG9wZW5lZCBmb3IgJXMuXG4iLAo+ICsgICAgICAgICAgICB0cmFja19yZXNvdXJjZS0+bG9jYXRv ci0+YWJzb2x1dGVfdXJpKTsKPiArICAgICAgICByZXR1cm4gMDsKPiArICAgIH0KPiArCj4gKyAg ICB0cmFja19yZXNvdXJjZS0+Y3R4LT5pb19vcGVuID0gcy0+aW9fb3BlbjsKPiArICAgIHRyYWNr X3Jlc291cmNlLT5jdHgtPmlvX2Nsb3NlID0gcy0+aW9fY2xvc2U7CgpXZSByZWNlbnRseSBhZGRl ZCBhbiBpb19jbG9zZTIuCgo+ICsgICAgdHJhY2tfcmVzb3VyY2UtPmN0eC0+ZmxhZ3MgfD0gcy0+ ZmxhZ3MgJiB+QVZGTVRfRkxBR19DVVNUT01fSU87Cj4gKwo+ICsgICAgaWYgKChyZXQgPSBmZl9j b3B5X3doaXRlYmxhY2tsaXN0cyh0cmFja19yZXNvdXJjZS0+Y3R4LCBzKSkgPCAwKQo+ICsgICAg ICAgIGdvdG8gY2xlYW51cDsKPiArCj4gKyAgICBhdl9kaWN0X2NvcHkoJm9wdHMsIGMtPmF2aW9f b3B0cywgMCk7Cj4gKyAgICByZXQgPSBhdmZvcm1hdF9vcGVuX2lucHV0KCZ0cmFja19yZXNvdXJj ZS0+Y3R4LAo+ICsgICAgICAgIHRyYWNrX3Jlc291cmNlLT5sb2NhdG9yLT5hYnNvbHV0ZV91cmks Cj4gKyAgICAgICAgTlVMTCwKPiArICAgICAgICAmb3B0cyk7Cj4gKyAgICBhdl9kaWN0X2ZyZWUo Jm9wdHMpOwo+ICsgICAgaWYgKHJldCA8IDApIHsKPiArICAgICAgICBhdl9sb2cocywKPiArICAg ICAgICAgICAgQVZfTE9HX0VSUk9SLAo+ICsgICAgICAgICAgICAiQ291bGQgbm90IG9wZW4gJXMg aW5wdXQgY29udGV4dDogJXNcbiIsCj4gKyAgICAgICAgICAgIHRyYWNrX3Jlc291cmNlLT5sb2Nh dG9yLT5hYnNvbHV0ZV91cmksCj4gKyAgICAgICAgICAgIGF2X2VycjJzdHIocmV0KSk7Cj4gKyAg ICAgICAgcmV0dXJuIHJldDsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoYXZfc3RyY2FzZWNtcCh0 cmFja19yZXNvdXJjZS0+Y3R4LT5pZm9ybWF0LT5uYW1lLCAibXhmIikpIHsKCnN0cmNtcCAtLSB0 aGUgbXhmIGRlbXV4ZXIgaXMganVzdCBjYWxsZWQgbXhmLiBUaGlzIGlzIGZpeGVkIGFuZCBub3QK c3ViamVjdCB0byBjaGFuZ2UuIEJ1dCBzZWUgYmVsb3cuCgo+ICsgICAgICAgIGF2X2xvZyhzLAo+ ICsgICAgICAgICAgICBBVl9MT0dfRVJST1IsCj4gKyAgICAgICAgICAgICJUcmFjayBmaWxlIGtp bmQgaXMgbm90IE1YRiBidXQgJXMgaW5zdGVhZFxuIiwKPiArICAgICAgICAgICAgdHJhY2tfcmVz b3VyY2UtPmN0eC0+aWZvcm1hdC0+bmFtZSk7CgpUaGVyZSBpcyBhIHByb2JsZW0gaGVyZTogSW1h Z2luZSB0aGF0IHRoaXMgaXMgY2FsbGVkIGZyb20KaW1mX3JlYWRfcGFja2V0KCkgdmlhIGdldF9y ZXNvdXJjZV9jb250ZXh0X2Zvcl90aW1lc3RhbXAoKS4gVGhlbiB5b3UKZXJyb3Igb3V0IG9uIHRo YXQgaW1mX3JlYWRfcGFja2V0KCkgY2FsbDsgeWV0IHRoZSBhIGxhdGVyCmltZl9yZWFkX3BhY2tl dCgpIGNhbGwgbWF5IHNlZSB0aGF0IHRyYWNrX3Jlc291cmNlLT5jdHggaXMgYWxyZWFkeSBzZXQK YW5kIGp1c3QgcmV1c2UgaXQuClRoZSBlYXNpZXN0IGZpeCBmb3IgdGhpcyBpcyB0byBzZXQgdGhl IGN0eCdzIGZvcm1hdF93aGl0ZWxpc3QgdG8gIm14ZiIKKHNldCB0aGlzIHZpYSB0aGUgYXZfb3B0 X3NldCgpKS4gQWx0ZXJuYXRpdmVseSwgb25lIGNvdWxkIGFsc28gc2V0IHRoZQpjdHgncyBpZm9y bWF0IHRvIHRoZSBteGYgZGVtdXhlciB1bmNvbmRpdGlvbmFsbHkuIEJvdGggb2YgdGhpcyB3b3Vs ZApoYXZlIHRvIGJlIGRvbmUgYmVmb3JlIGF2Zm9ybWF0X29wZW5faW5wdXQoKS4KCj4gKyAgICAg ICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyogQ29t cGFyZSB0aGUgc291cmNlIHRpbWViYXNlIHRvIHRoZSByZXNvdXJjZSBlZGl0IHJhdGUsIGNvbnNp ZGVyaW5nIHRoZSBmaXJzdCBzdHJlYW0gb2YgdGhlIHNvdXJjZSBmaWxlICovCj4gKyAgICBpZiAo YXZfY21wX3EodHJhY2tfcmVzb3VyY2UtPmN0eC0+c3RyZWFtc1swXS0+dGltZV9iYXNlLCBhdl9p bnZfcSh0cmFja19yZXNvdXJjZS0+cmVzb3VyY2UtPmJhc2UuZWRpdF9yYXRlKSkpCj4gKyAgICAg ICAgYXZfbG9nKHMsCj4gKyAgICAgICAgICAgIEFWX0xPR19XQVJOSU5HLAo+ICsgICAgICAgICAg ICAiSW5jb2hlcmVudCBzb3VyY2Ugc3RyZWFtIHRpbWViYXNlICVkLyVkIHJlZ2FyZGluZyByZXNv dXJjZSBlZGl0IHJhdGU6ICVkLyVkIiwKPiArICAgICAgICAgICAgdHJhY2tfcmVzb3VyY2UtPmN0 eC0+c3RyZWFtc1swXS0+dGltZV9iYXNlLm51bSwKPiArICAgICAgICAgICAgdHJhY2tfcmVzb3Vy Y2UtPmN0eC0+c3RyZWFtc1swXS0+dGltZV9iYXNlLmRlbiwKPiArICAgICAgICAgICAgdHJhY2tf cmVzb3VyY2UtPnJlc291cmNlLT5iYXNlLmVkaXRfcmF0ZS5kZW4sCj4gKyAgICAgICAgICAgIHRy YWNrX3Jlc291cmNlLT5yZXNvdXJjZS0+YmFzZS5lZGl0X3JhdGUubnVtKTsKPiArCj4gKyAgICBl bnRyeV9wb2ludCA9IChpbnQ2NF90KXRyYWNrX3Jlc291cmNlLT5yZXNvdXJjZS0+YmFzZS5lbnRy eV9wb2ludAo+ICsgICAgICAgICogdHJhY2tfcmVzb3VyY2UtPnJlc291cmNlLT5iYXNlLmVkaXRf cmF0ZS5kZW4KPiArICAgICAgICAqIEFWX1RJTUVfQkFTRQo+ICsgICAgICAgIC8gdHJhY2tfcmVz b3VyY2UtPnJlc291cmNlLT5iYXNlLmVkaXRfcmF0ZS5udW07Cj4gKwo+ICsgICAgaWYgKGVudHJ5 X3BvaW50KSB7Cj4gKyAgICAgICAgYXZfbG9nKHMsCj4gKyAgICAgICAgICAgIEFWX0xPR19ERUJV RywKPiArICAgICAgICAgICAgIlNlZWsgYXQgcmVzb3VyY2UgJXMgZW50cnkgcG9pbnQ6ICUiIFBS SXUzMiAiXG4iLAo+ICsgICAgICAgICAgICB0cmFja19yZXNvdXJjZS0+bG9jYXRvci0+YWJzb2x1 dGVfdXJpLAo+ICsgICAgICAgICAgICB0cmFja19yZXNvdXJjZS0+cmVzb3VyY2UtPmJhc2UuZW50 cnlfcG9pbnQpOwo+ICsgICAgICAgIHJldCA9IGF2Zm9ybWF0X3NlZWtfZmlsZSh0cmFja19yZXNv dXJjZS0+Y3R4LCAtMSwgZW50cnlfcG9pbnQsIGVudHJ5X3BvaW50LCBlbnRyeV9wb2ludCwgMCk7 Cj4gKyAgICAgICAgaWYgKHJldCA8IDApIHsKPiArICAgICAgICAgICAgYXZfbG9nKHMsCj4gKyAg ICAgICAgICAgICAgICBBVl9MT0dfRVJST1IsCj4gKyAgICAgICAgICAgICAgICAiQ291bGQgbm90 IHNlZWsgYXQgJSIgUFJJZDY0ICJvbiAlczogJXNcbiIsCj4gKyAgICAgICAgICAgICAgICBlbnRy eV9wb2ludCwKPiArICAgICAgICAgICAgICAgIHRyYWNrX3Jlc291cmNlLT5sb2NhdG9yLT5hYnNv bHV0ZV91cmksCj4gKyAgICAgICAgICAgICAgICBhdl9lcnIyc3RyKHJldCkpOwo+ICsgICAgICAg ICAgICBnb3RvIGNsZWFudXA7CgpyZXNvdXJjZXMgb3BlbmVkIHdpdGggYXZmb3JtYXRfb3Blbl9p bnB1dCgpIHNob3VsZCBiZSBmcmVlZCB3aXRoCmF2Zm9ybWF0X2Nsb3NlX2lucHV0KCkuCgo+ICsg ICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gcmV0OwoKcmV0dXJuIDAKCj4gK2Ns ZWFudXA6Cj4gKyAgICBhdmZvcm1hdF9mcmVlX2NvbnRleHQodHJhY2tfcmVzb3VyY2UtPmN0eCk7 Cj4gKyAgICB0cmFja19yZXNvdXJjZS0+Y3R4ID0gTlVMTDsKPiArICAgIHJldHVybiByZXQ7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgb3Blbl90cmFja19maWxlX3Jlc291cmNlKEFWRm9ybWF0Q29u dGV4dCAqcywKPiArICAgIEZGSU1GVHJhY2tGaWxlUmVzb3VyY2UgKnRyYWNrX2ZpbGVfcmVzb3Vy Y2UsCj4gKyAgICBJTUZWaXJ0dWFsVHJhY2tQbGF5YmFja0N0eCAqdHJhY2spCj4gK3sKPiArICAg IElNRkNvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gKyAgICBJTUZBc3NldExvY2F0b3IgKmFz c2V0X2xvY2F0b3I7Cj4gKyAgICBJTUZWaXJ0dWFsVHJhY2tSZXNvdXJjZVBsYXliYWNrQ3R4IHZ0 X2N0eDsKPiArICAgIHZvaWQgKnRtcDsKPiArICAgIGludCByZXQ7Cj4gKwo+ICsgICAgYXNzZXRf bG9jYXRvciA9IGZpbmRfYXNzZXRfbWFwX2xvY2F0b3IoJmMtPmFzc2V0X2xvY2F0b3JfbWFwLCB0 cmFja19maWxlX3Jlc291cmNlLT50cmFja19maWxlX3V1aWQpOwo+ICsgICAgaWYgKCFhc3NldF9s b2NhdG9yKSB7Cj4gKyAgICAgICAgYXZfbG9nKHMsCj4gKyAgICAgICAgICAgIEFWX0xPR19FUlJP UiwKPiArICAgICAgICAgICAgIkNvdWxkIG5vdCBmaW5kIGFzc2V0IGxvY2F0b3IgZm9yIFVVSUQ6 ICIgRkZfSU1GX1VVSURfRk9STUFUICJcbiIsCj4gKyAgICAgICAgICAgIFVJRF9BUkcodHJhY2tf ZmlsZV9yZXNvdXJjZS0+dHJhY2tfZmlsZV91dWlkKSk7Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7Cj4gKyAgICB9Cj4gKwo+ICsgICAgYXZfbG9nKHMsCj4gKyAgICAgICAg QVZfTE9HX0RFQlVHLAo+ICsgICAgICAgICJGb3VuZCBsb2NhdG9yIGZvciAiIEZGX0lNRl9VVUlE X0ZPUk1BVCAiOiAlc1xuIiwKPiArICAgICAgICBVSURfQVJHKGFzc2V0X2xvY2F0b3ItPnV1aWQp LAo+ICsgICAgICAgIGFzc2V0X2xvY2F0b3ItPmFic29sdXRlX3VyaSk7Cj4gKyAgICB0bXAgPSBh dl9mYXN0X3JlYWxsb2ModHJhY2stPnJlc291cmNlcywKPiArICAgICAgICAmdHJhY2stPnJlc291 cmNlc19hbGxvY19zeiwKPiArICAgICAgICAodHJhY2stPnJlc291cmNlX2NvdW50ICsgdHJhY2tf ZmlsZV9yZXNvdXJjZS0+YmFzZS5yZXBlYXRfY291bnQpCj4gKyAgICAgICAgICAgICogc2l6ZW9m KElNRlZpcnR1YWxUcmFja1Jlc291cmNlUGxheWJhY2tDdHgpKTsKPiArICAgIGlmICghdG1wKQo+ ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKyAgICB0cmFjay0+cmVzb3VyY2Vz ID0gdG1wOwo+ICsKPiArICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCB0cmFja19maWxlX3Jl c291cmNlLT5iYXNlLnJlcGVhdF9jb3VudDsgKytpKSB7Cj4gKyAgICAgICAgdnRfY3R4LmxvY2F0 b3IgPSBhc3NldF9sb2NhdG9yOwo+ICsgICAgICAgIHZ0X2N0eC5yZXNvdXJjZSA9IHRyYWNrX2Zp bGVfcmVzb3VyY2U7Cj4gKyAgICAgICAgdnRfY3R4LmN0eCA9IE5VTEw7Cgp2dF9jdHggc2hvdWxk IGJlIGxvY2FsIHRvIHRoaXMgbG9vcC4KCj4gKyAgICAgICAgaWYgKChyZXQgPSBvcGVuX3RyYWNr X3Jlc291cmNlX2NvbnRleHQocywgJnZ0X2N0eCkpICE9IDApCj4gKyAgICAgICAgICAgIHJldHVy biByZXQ7Cj4gKyAgICAgICAgdHJhY2stPnJlc291cmNlc1t0cmFjay0+cmVzb3VyY2VfY291bnQr K10gPSB2dF9jdHg7Cj4gKyAgICAgICAgdHJhY2stPmR1cmF0aW9uID0gYXZfYWRkX3EodHJhY2st PmR1cmF0aW9uLAo+ICsgICAgICAgICAgICBhdl9tYWtlX3EoKGludCl0cmFja19maWxlX3Jlc291 cmNlLT5iYXNlLmR1cmF0aW9uICogdHJhY2tfZmlsZV9yZXNvdXJjZS0+YmFzZS5lZGl0X3JhdGUu ZGVuLAo+ICsgICAgICAgICAgICAgICAgdHJhY2tfZmlsZV9yZXNvdXJjZS0+YmFzZS5lZGl0X3Jh dGUubnVtKSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIHJldDsKCnJldHVybiAwCgo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBpbWZfdmlydHVhbF90cmFja19wbGF5YmFja19jb250ZXh0X2Rl aW5pdChJTUZWaXJ0dWFsVHJhY2tQbGF5YmFja0N0eCAqdHJhY2spCj4gK3sKPiArICAgIGZvciAo dWludDMyX3QgaSA9IDA7IGkgPCB0cmFjay0+cmVzb3VyY2VfY291bnQ7ICsraSkKPiArICAgICAg ICBpZiAodHJhY2stPnJlc291cmNlc1tpXS5jdHggJiYgdHJhY2stPnJlc291cmNlc1tpXS5jdHgt Pmlmb3JtYXQpCj4gKyAgICAgICAgICAgIGF2Zm9ybWF0X2Nsb3NlX2lucHV0KCZ0cmFjay0+cmVz b3VyY2VzW2ldLmN0eCk7CgphdmZvcm1hdF9jbG9zZV9pbnB1dCgpIGNhbiBoYW5kbGUgdGhlIGNh c2Ugb2YgdHJhY2stPnJlc291cmNlc1tpXS5jdHgKYmVpbmcgTlVMTDsgYW5kIGdpdmVuIHRoYXQg YW55IEFWRm9ybWF0Q29udGV4dCBoZXJlIGlzIGVpdGhlciBOVUxMIG9yCnByb3Blcmx5IG9wZW5l ZCB3aXRoIGF2Zm9ybWF0X29wZW5faW5wdXQoKSB5b3UgY2FuIGp1c3QgcmVtb3ZlIHRoZXNlIGNo ZWNrcy4KCj4gKwo+ICsgICAgYXZfZnJlZXAoJnRyYWNrLT5yZXNvdXJjZXMpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IG9wZW5fdmlydHVhbF90cmFjayhBVkZvcm1hdENvbnRleHQgKnMsCj4gKyAg ICBGRklNRlRyYWNrRmlsZVZpcnR1YWxUcmFjayAqdmlydHVhbF90cmFjaywKPiArICAgIGludDMy X3QgdHJhY2tfaW5kZXgpCj4gK3sKPiArICAgIElNRkNvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7 Cj4gKyAgICBJTUZWaXJ0dWFsVHJhY2tQbGF5YmFja0N0eCAqdHJhY2sgPSBOVUxMOwo+ICsgICAg dm9pZCAqdG1wOwo+ICsgICAgaW50IHJldCA9IDA7Cj4gKwo+ICsgICAgaWYgKCEodHJhY2sgPSBh dl9tYWxsb2N6KHNpemVvZihJTUZWaXJ0dWFsVHJhY2tQbGF5YmFja0N0eCkpKSkKPiArICAgICAg ICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ICsgICAgdHJhY2stPmluZGV4ID0gdHJhY2tfaW5k ZXg7Cj4gKyAgICB0cmFjay0+ZHVyYXRpb24gPSBhdl9tYWtlX3EoMCwgMSk7Cj4gKwo+ICsgICAg Zm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHZpcnR1YWxfdHJhY2stPnJlc291cmNlX2NvdW50OyBp KyspIHsKPiArICAgICAgICBhdl9sb2cocywKPiArICAgICAgICAgICAgQVZfTE9HX0RFQlVHLAo+ ICsgICAgICAgICAgICAiT3BlbiBzdHJlYW0gZnJvbSBmaWxlICIgRkZfSU1GX1VVSURfRk9STUFU ICIsIHN0cmVhbSAlZFxuIiwKPiArICAgICAgICAgICAgVUlEX0FSRyh2aXJ0dWFsX3RyYWNrLT5y ZXNvdXJjZXNbaV0udHJhY2tfZmlsZV91dWlkKSwKPiArICAgICAgICAgICAgaSk7Cj4gKyAgICAg ICAgaWYgKChyZXQgPSBvcGVuX3RyYWNrX2ZpbGVfcmVzb3VyY2UocywgJnZpcnR1YWxfdHJhY2st PnJlc291cmNlc1tpXSwgdHJhY2spKSAhPSAwKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhzLAo+ ICsgICAgICAgICAgICAgICAgQVZfTE9HX0VSUk9SLAo+ICsgICAgICAgICAgICAgICAgIkNvdWxk IG5vdCBvcGVuIGltYWdlIHRyYWNrIHJlc291cmNlICIgRkZfSU1GX1VVSURfRk9STUFUICJcbiIs Cj4gKyAgICAgICAgICAgICAgICBVSURfQVJHKHZpcnR1YWxfdHJhY2stPnJlc291cmNlc1tpXS50 cmFja19maWxlX3V1aWQpKTsKPiArICAgICAgICAgICAgZ290byBjbGVhbl91cDsKPiArICAgICAg ICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgdHJhY2stPmN1cnJlbnRfdGltZXN0YW1wID0gYXZfbWFr ZV9xKDAsIHRyYWNrLT5kdXJhdGlvbi5kZW4pOwo+ICsKPiArICAgIHRtcCA9IGF2X3JlYWxsb2Mo Yy0+dHJhY2tzLCAoYy0+dHJhY2tfY291bnQgKyAxKSAqIHNpemVvZihJTUZWaXJ0dWFsVHJhY2tQ bGF5YmFja0N0eCAqKSk7CgpNaXNzaW5nIG92ZXJmbG93IGNoZWNrOyBhdl9yZWFsbG9jX2FycmF5 KCkgd291bGQgZG8gdGhpcyBmb3IgeW91LgoKPiArICAgIGlmICghdG1wKSB7Cj4gKyAgICAgICAg cmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+ICsgICAgICAgIGdvdG8gY2xlYW5fdXA7Cj4gKyAgICB9 Cj4gKyAgICBjLT50cmFja3MgPSB0bXA7Cj4gKyAgICBjLT50cmFja3NbYy0+dHJhY2tfY291bnQr K10gPSB0cmFjazsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArCj4gK2NsZWFuX3VwOgo+ICsgICAg aW1mX3ZpcnR1YWxfdHJhY2tfcGxheWJhY2tfY29udGV4dF9kZWluaXQodHJhY2spOwo+ICsgICAg YXZfZnJlZSh0cmFjayk7Cj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IHNldF9jb250ZXh0X3N0cmVhbXNfZnJvbV90cmFja3MoQVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7 Cj4gKyAgICBJTUZDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ICsKPiArICAgIEFWU3RyZWFt ICphc3NldF9zdHJlYW07Cj4gKyAgICBBVlN0cmVhbSAqZmlyc3RfcmVzb3VyY2Vfc3RyZWFtOwoK Qm90aCBvZiB0aGVzZSBzaG91bGQgYmUgbG9jYWwgdG8gdGhlIGxvb3AuCgo+ICsKPiArICAgIGlu dCByZXQgPSAwOwo+ICsKPiArICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjLT50cmFja19j b3VudDsgKytpKSB7Cj4gKyAgICAgICAgLyogT3BlbiB0aGUgZmlyc3QgcmVzb3VyY2Ugb2YgdGhl IHRyYWNrIHRvIGdldCBzdHJlYW0gaW5mb3JtYXRpb24gKi8KPiArICAgICAgICBmaXJzdF9yZXNv dXJjZV9zdHJlYW0gPSBjLT50cmFja3NbaV0tPnJlc291cmNlc1swXS5jdHgtPnN0cmVhbXNbMF07 Cj4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19ERUJVRywgIk9wZW4gdGhlIGZpcnN0IHJlc291 cmNlIG9mIHRyYWNrICVkXG4iLCBjLT50cmFja3NbaV0tPmluZGV4KTsKPiArCj4gKyAgICAgICAg LyogQ29weSBzdHJlYW0gaW5mb3JtYXRpb24gKi8KPiArICAgICAgICBhc3NldF9zdHJlYW0gPSBh dmZvcm1hdF9uZXdfc3RyZWFtKHMsIE5VTEwpOwo+ICsgICAgICAgIGlmICghYXNzZXRfc3RyZWFt KSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJDb3VsZCBub3QgY3Jl YXRlIHN0cmVhbVxuIik7CgptaXNzaW5nIEFWRVJST1IoRU5PTUVNKQoKPiArICAgICAgICAgICAg YnJlYWs7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGFzc2V0X3N0cmVhbS0+aWQgPSBpOwo+ICsg ICAgICAgIHJldCA9IGF2Y29kZWNfcGFyYW1ldGVyc19jb3B5KGFzc2V0X3N0cmVhbS0+Y29kZWNw YXIsIGZpcnN0X3Jlc291cmNlX3N0cmVhbS0+Y29kZWNwYXIpOwo+ICsgICAgICAgIGlmIChyZXQg PCAwKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJDb3VsZCBub3Qg Y29weSBzdHJlYW0gcGFyYW1ldGVyc1xuIik7Cj4gKyAgICAgICAgICAgIGJyZWFrOwoKanVzdCBy ZXR1cm4gcmV0Cgo+ICsgICAgICAgIH0KPiArICAgICAgICBhdnByaXZfc2V0X3B0c19pbmZvKGFz c2V0X3N0cmVhbSwKPiArICAgICAgICAgICAgZmlyc3RfcmVzb3VyY2Vfc3RyZWFtLT5wdHNfd3Jh cF9iaXRzLAo+ICsgICAgICAgICAgICBmaXJzdF9yZXNvdXJjZV9zdHJlYW0tPnRpbWVfYmFzZS5u dW0sCj4gKyAgICAgICAgICAgIGZpcnN0X3Jlc291cmNlX3N0cmVhbS0+dGltZV9iYXNlLmRlbik7 Cj4gKyAgICAgICAgYXNzZXRfc3RyZWFtLT5kdXJhdGlvbiA9IChpbnQ2NF90KWF2X3EyZChhdl9t dWxfcShjLT50cmFja3NbaV0tPmR1cmF0aW9uLAo+ICsgICAgICAgICAgICBhdl9pbnZfcShhc3Nl dF9zdHJlYW0tPnRpbWVfYmFzZSkpKTsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gcmV0OwoK cmV0dXJuIDAKCj4gK30KPiArCj4gK3N0YXRpYyBpbnQgc2F2ZV9hdmlvX29wdGlvbnMoQVZGb3Jt YXRDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBJTUZDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ ICsgICAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG9wdHNbXSA9IHsKPiArICAgICAgICAiaGVh ZGVycyIsICJodHRwX3Byb3h5IiwgInVzZXJfYWdlbnQiLCAiY29va2llcyIsICJyZWZlcmVyIiwg InJ3X3RpbWVvdXQiLCAiaWN5IiwgTlVMTH07Cj4gKyAgICBjb25zdCBjaGFyICpjb25zdCAqb3B0 ID0gb3B0czsKPiArICAgIHVpbnQ4X3QgKmJ1ZjsKPiArICAgIGludCByZXQgPSAwOwo+ICsKPiAr ICAgIHdoaWxlICgqb3B0KSB7Cj4gKyAgICAgICAgaWYgKGF2X29wdF9nZXQocy0+cGIsICpvcHQs IEFWX09QVF9TRUFSQ0hfQ0hJTERSRU4gfCBBVl9PUFRfQUxMT1dfTlVMTCwgJmJ1ZikgPj0gMCkg ewo+ICsgICAgICAgICAgICByZXQgPSBhdl9kaWN0X3NldCgmYy0+YXZpb19vcHRzLCAqb3B0LCBi dWYsIEFWX0RJQ1RfRE9OVF9TVFJEVVBfVkFMKTsKPiArICAgICAgICAgICAgaWYgKHJldCA8IDAp Cj4gKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ICsgICAgICAgIH0KPiArICAgICAgICBv cHQrKzsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IG9wZW5fY3BsX3RyYWNrcyhBVkZvcm1hdENvbnRleHQgKnMpCj4gK3sKPiArICAgIElNRkNv bnRleHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gKyAgICBpbnQzMl90IHRyYWNrX2luZGV4ID0gMDsK PiArICAgIGludCByZXQ7Cj4gKwo+ICsgICAgaWYgKGMtPmNwbC0+bWFpbl9pbWFnZV8yZF90cmFj aykKPiArICAgICAgICBpZiAoKHJldCA9IG9wZW5fdmlydHVhbF90cmFjayhzLCBjLT5jcGwtPm1h aW5faW1hZ2VfMmRfdHJhY2ssIHRyYWNrX2luZGV4KyspKSAhPSAwKSB7Cj4gKyAgICAgICAgICAg IGF2X2xvZyhzLAo+ICsgICAgICAgICAgICAgICAgQVZfTE9HX0VSUk9SLAo+ICsgICAgICAgICAg ICAgICAgIkNvdWxkIG5vdCBvcGVuIGltYWdlIHRyYWNrICIgRkZfSU1GX1VVSURfRk9STUFUICJc biIsCj4gKyAgICAgICAgICAgICAgICBVSURfQVJHKGMtPmNwbC0+bWFpbl9pbWFnZV8yZF90cmFj ay0+YmFzZS5pZF91dWlkKSk7Cj4gKyAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICAgICAg fQo+ICsKPiArICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjLT5jcGwtPm1haW5fYXVkaW9f dHJhY2tfY291bnQ7ICsraSkKPiArICAgICAgICBpZiAoKHJldCA9IG9wZW5fdmlydHVhbF90cmFj ayhzLCAmYy0+Y3BsLT5tYWluX2F1ZGlvX3RyYWNrc1tpXSwgdHJhY2tfaW5kZXgrKykpICE9IDAp IHsKPiArICAgICAgICAgICAgYXZfbG9nKHMsCj4gKyAgICAgICAgICAgICAgICBBVl9MT0dfRVJS T1IsCj4gKyAgICAgICAgICAgICAgICAiQ291bGQgbm90IG9wZW4gYXVkaW8gdHJhY2sgIiBGRl9J TUZfVVVJRF9GT1JNQVQgIlxuIiwKPiArICAgICAgICAgICAgICAgIFVJRF9BUkcoYy0+Y3BsLT5t YWluX2F1ZGlvX3RyYWNrc1tpXS5iYXNlLmlkX3V1aWQpKTsKPiArICAgICAgICAgICAgcmV0dXJu IHJldDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIHNldF9jb250ZXh0X3N0cmVhbXNf ZnJvbV90cmFja3Mocyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaW1mX3JlYWRfaGVhZGVyKEFW Rm9ybWF0Q29udGV4dCAqcykKPiArewo+ICsgICAgSU1GQ29udGV4dCAqYyA9IHMtPnByaXZfZGF0 YTsKPiArICAgIGNoYXIgKmFzc2V0X21hcF9wYXRoOwo+ICsgICAgY2hhciAqdG1wX3N0cjsKPiAr ICAgIGludCByZXQgPSAwOwo+ICsKPiArICAgIGMtPmludGVycnVwdF9jYWxsYmFjayA9ICZzLT5p bnRlcnJ1cHRfY2FsbGJhY2s7Cj4gKyAgICB0bXBfc3RyID0gYXZfc3RyZHVwKHMtPnVybCk7Cj4g KyAgICBpZiAoIXRtcF9zdHIpIHsKPiArICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7Cgpy ZXR1cm4gQVZFUlJPUihFTk9NRU0pOwoKPiArICAgICAgICByZXR1cm4gcmV0Owo+ICsgICAgfQo+ ICsgICAgYy0+YmFzZV91cmwgPSBhdl9kaXJuYW1lKHRtcF9zdHIpOwo+ICsgICAgaWYgKChyZXQg PSBzYXZlX2F2aW9fb3B0aW9ucyhzKSkgPCAwKQo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ ICsgICAgYXZfbG9nKHMsIEFWX0xPR19ERUJVRywgInN0YXJ0IHBhcnNpbmcgSU1GIENQTDogJXNc biIsIHMtPnVybCk7Cj4gKwo+ICsgICAgaWYgKChyZXQgPSBmZl9pbWZfcGFyc2VfY3BsKHMtPnBi LCAmYy0+Y3BsKSkgPCAwKQo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ICsgICAgYXZfbG9n KHMsCj4gKyAgICAgICAgQVZfTE9HX0RFQlVHLAo+ICsgICAgICAgICJwYXJzZWQgSU1GIENQTDog IiBGRl9JTUZfVVVJRF9GT1JNQVQgIlxuIiwKPiArICAgICAgICBVSURfQVJHKGMtPmNwbC0+aWRf dXVpZCkpOwo+ICsKPiArICAgIGlmICghYy0+YXNzZXRfbWFwX3BhdGhzKSB7Cj4gKyAgICAgICAg Yy0+YXNzZXRfbWFwX3BhdGhzID0gYXZfYXBwZW5kX3BhdGhfY29tcG9uZW50KGMtPmJhc2VfdXJs LCAiQVNTRVRNQVAueG1sIik7Cj4gKyAgICAgICAgaWYgKCFjLT5hc3NldF9tYXBfcGF0aHMpIHsK PiArICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+ICsgICAgICAgICAgICByZXR1 cm4gcmV0Owo+ICsgICAgICAgIH0KPiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0RFQlVHLCAi Tm8gYXNzZXQgbWFwcyBwcm92aWRlZCwgdXNpbmcgdGhlIGRlZmF1bHQgQVNTRVRNQVAueG1sXG4i KTsKPiArICAgIH0KPiArCj4gKyAgICAvKiBQYXJzZSBlYWNoIGFzc2V0IG1hcCBYTUwgZmlsZSAq Lwo+ICsgICAgaW1mX2Fzc2V0X2xvY2F0b3JfbWFwX2luaXQoJmMtPmFzc2V0X2xvY2F0b3JfbWFw KTsKPiArICAgIGFzc2V0X21hcF9wYXRoID0gYXZfc3RydG9rKGMtPmFzc2V0X21hcF9wYXRocywg IiwiLCAmdG1wX3N0cik7Cj4gKyAgICB3aGlsZSAoYXNzZXRfbWFwX3BhdGggIT0gTlVMTCkgewo+ ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfREVCVUcsICJzdGFydCBwYXJzaW5nIElNRiBBc3Nl dCBNYXA6ICVzXG4iLCBhc3NldF9tYXBfcGF0aCk7Cj4gKwo+ICsgICAgICAgIGlmIChyZXQgPSBw YXJzZV9hc3NldG1hcChzLCBhc3NldF9tYXBfcGF0aCkpCj4gKyAgICAgICAgICAgIHJldHVybiBy ZXQ7Cj4gKwo+ICsgICAgICAgIGFzc2V0X21hcF9wYXRoID0gYXZfc3RydG9rKE5VTEwsICIsIiwg JnRtcF9zdHIpOwo+ICsgICAgfQo+ICsKPiArICAgIGF2X2xvZyhzLCBBVl9MT0dfREVCVUcsICJw YXJzZWQgSU1GIEFzc2V0IE1hcHNcbiIpOwo+ICsKPiArICAgIGlmIChyZXQgPSBvcGVuX2NwbF90 cmFja3MocykpCj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICBhdl9sb2cocywgQVZf TE9HX0RFQlVHLCAicGFyc2VkIElNRiBwYWNrYWdlXG4iKTsKPiArCj4gKyAgICByZXR1cm4gMDsK PiArfQo+ICsKPiArc3RhdGljIElNRlZpcnR1YWxUcmFja1BsYXliYWNrQ3R4ICpnZXRfbmV4dF90 cmFja193aXRoX21pbmltdW1fdGltZXN0YW1wKEFWRm9ybWF0Q29udGV4dCAqcykKPiArewo+ICsg ICAgSU1GQ29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiArICAgIElNRlZpcnR1YWxUcmFja1Bs YXliYWNrQ3R4ICp0cmFjazsKPiArCj4gKyAgICBBVlJhdGlvbmFsIG1pbmltdW1fdGltZXN0YW1w ID0gYXZfbWFrZV9xKElOVDMyX01BWCwgMSk7Cj4gKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBp IDwgYy0+dHJhY2tfY291bnQ7ICsraSkgewo+ICsgICAgICAgIGF2X2xvZygKPiArICAgICAgICAg ICAgcywKPiArICAgICAgICAgICAgQVZfTE9HX0RFQlVHLAo+ICsgICAgICAgICAgICAiQ29tcGFy ZSB0cmFjayAlZCB0aW1lc3RhbXAgIiBBVlJBVElPTkFMX0ZPUk1BVAo+ICsgICAgICAgICAgICAi IHRvIG1pbmltdW0gIiBBVlJBVElPTkFMX0ZPUk1BVAo+ICsgICAgICAgICAgICAiIChvdmVyIGR1 cmF0aW9uOiAiIEFWUkFUSU9OQUxfRk9STUFUCj4gKyAgICAgICAgICAgICIpXG4iLAo+ICsgICAg ICAgICAgICBpLAo+ICsgICAgICAgICAgICBBVlJBVElPTkFMX0FSRyhjLT50cmFja3NbaV0tPmN1 cnJlbnRfdGltZXN0YW1wKSwKPiArICAgICAgICAgICAgQVZSQVRJT05BTF9BUkcobWluaW11bV90 aW1lc3RhbXApLAo+ICsgICAgICAgICAgICBBVlJBVElPTkFMX0FSRyhjLT50cmFja3NbaV0tPmR1 cmF0aW9uKSk7Cj4gKyAgICAgICAgaWYgKGF2X2NtcF9xKGMtPnRyYWNrc1tpXS0+Y3VycmVudF90 aW1lc3RhbXAsIG1pbmltdW1fdGltZXN0YW1wKSA8IDApIHsKPiArICAgICAgICAgICAgdHJhY2sg PSBjLT50cmFja3NbaV07Cj4gKyAgICAgICAgICAgIG1pbmltdW1fdGltZXN0YW1wID0gdHJhY2st PmN1cnJlbnRfdGltZXN0YW1wOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAgICBhdl9s b2cocywKPiArICAgICAgICBBVl9MT0dfREVCVUcsCj4gKyAgICAgICAgIkZvdW5kIG5leHQgdHJh Y2sgdG8gcmVhZDogJWQgKHRpbWVzdGFtcDogJWxmIC8gJWxmKVxuIiwKPiArICAgICAgICB0cmFj ay0+aW5kZXgsCj4gKyAgICAgICAgYXZfcTJkKHRyYWNrLT5jdXJyZW50X3RpbWVzdGFtcCksCgpU aGlzIHByZXN1bWVzIHRoYXQgdHJhY2sgaXMgc2V0OyB5ZXQgaXNuJ3QgaXQgcG9zc2libGUgZm9y IGFsbCB0cmFja3MnCmN1cnJlbnRfdGltZXN0YW1wcyB0byBiZSAoQVZSYXRpb25hbCl7IElOVDMy X01BWCwgMSB9PyBNYXliZSB5b3Ugc2hvdWxkCmNoZWNrIGZvciA8PSBpbiB0aGUgYWJvdmUgY2hl Y2s/IChJZiB5b3UgYWxzbyByZXZlcnNlIHlvdXIgbG9vcAppdGVyYXRvciwgdGhlIHJlc3VsdCB3 b3VsZCBiZSB0aGUgc2FtZSBhcyBub3cgaW4gdGhlIG5vbi1wYXRob2xvZ2ljYWwKY2FzZTsgaWYg dGhlIG9yZGVyIG9mIHRyYWNrcyB3aXRoIHRoZSBzYW1lIGN1cnJlbnRfdGltZXN0YW1wIG1hdHRl cnMgYXQKYWxsKS4KCj4gKyAgICAgICAgYXZfcTJkKG1pbmltdW1fdGltZXN0YW1wKSk7Cj4gKyAg ICByZXR1cm4gdHJhY2s7Cj4gK30KPiArCj4gK3N0YXRpYyBJTUZWaXJ0dWFsVHJhY2tSZXNvdXJj ZVBsYXliYWNrQ3R4ICpnZXRfcmVzb3VyY2VfY29udGV4dF9mb3JfdGltZXN0YW1wKEFWRm9ybWF0 Q29udGV4dCAqcywKPiArICAgIElNRlZpcnR1YWxUcmFja1BsYXliYWNrQ3R4ICp0cmFjaykKPiAr ewo+ICsgICAgQVZSYXRpb25hbCBlZGl0X3VuaXRfZHVyYXRpb24gPSBhdl9pbnZfcSh0cmFjay0+ cmVzb3VyY2VzWzBdLnJlc291cmNlLT5iYXNlLmVkaXRfcmF0ZSk7Cj4gKyAgICBBVlJhdGlvbmFs IGN1bXVsYXRlZF9kdXJhdGlvbiA9IGF2X21ha2VfcSgwLCBlZGl0X3VuaXRfZHVyYXRpb24uZGVu KTsKPiArCj4gKyAgICBhdl9sb2cocywKPiArICAgICAgICBBVl9MT0dfREVCVUcsCj4gKyAgICAg ICAgIkxvb2tpbmcgZm9yIHRyYWNrICVkIHJlc291cmNlIGZvciB0aW1lc3RhbXAgPSAlbGYgLyAl bGZcbiIsCj4gKyAgICAgICAgdHJhY2stPmluZGV4LAo+ICsgICAgICAgIGF2X3EyZCh0cmFjay0+ Y3VycmVudF90aW1lc3RhbXApLAo+ICsgICAgICAgIGF2X3EyZCh0cmFjay0+ZHVyYXRpb24pKTsK PiArICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCB0cmFjay0+cmVzb3VyY2VfY291bnQ7ICsr aSkgewo+ICsgICAgICAgIGN1bXVsYXRlZF9kdXJhdGlvbiA9IGF2X2FkZF9xKGN1bXVsYXRlZF9k dXJhdGlvbiwKPiArICAgICAgICAgICAgYXZfbWFrZV9xKChpbnQpdHJhY2stPnJlc291cmNlc1tp XS5yZXNvdXJjZS0+YmFzZS5kdXJhdGlvbiAqIGVkaXRfdW5pdF9kdXJhdGlvbi5udW0sCj4gKyAg ICAgICAgICAgICAgICBlZGl0X3VuaXRfZHVyYXRpb24uZGVuKSk7Cj4gKwo+ICsgICAgICAgIGlm IChhdl9jbXBfcShhdl9hZGRfcSh0cmFjay0+Y3VycmVudF90aW1lc3RhbXAsIGVkaXRfdW5pdF9k dXJhdGlvbiksIGN1bXVsYXRlZF9kdXJhdGlvbikgPD0gMCkgewo+ICsgICAgICAgICAgICBhdl9s b2cocywKPiArICAgICAgICAgICAgICAgIEFWX0xPR19ERUJVRywKPiArICAgICAgICAgICAgICAg ICJGb3VuZCByZXNvdXJjZSAlZCBpbiB0cmFjayAlZCB0byByZWFkIGZvciB0aW1lc3RhbXAgJWxm ICIKPiArICAgICAgICAgICAgICAgICIob24gY3VtdWxhdGVkPSVsZik6IGVudHJ5PSUiIFBSSXUz Mgo+ICsgICAgICAgICAgICAgICAgIiwgZHVyYXRpb249JSIgUFJJdTMyCj4gKyAgICAgICAgICAg ICAgICAiLCBlZGl0cmF0ZT0iIEFWUkFUSU9OQUxfRk9STUFUCj4gKyAgICAgICAgICAgICAgICAi IHwgZWRpdF91bml0X2R1cmF0aW9uPSVsZlxuIiwKPiArICAgICAgICAgICAgICAgIGksCj4gKyAg ICAgICAgICAgICAgICB0cmFjay0+aW5kZXgsCj4gKyAgICAgICAgICAgICAgICBhdl9xMmQodHJh Y2stPmN1cnJlbnRfdGltZXN0YW1wKSwKPiArICAgICAgICAgICAgICAgIGF2X3EyZChjdW11bGF0 ZWRfZHVyYXRpb24pLAo+ICsgICAgICAgICAgICAgICAgdHJhY2stPnJlc291cmNlc1tpXS5yZXNv dXJjZS0+YmFzZS5lbnRyeV9wb2ludCwKPiArICAgICAgICAgICAgICAgIHRyYWNrLT5yZXNvdXJj ZXNbaV0ucmVzb3VyY2UtPmJhc2UuZHVyYXRpb24sCj4gKyAgICAgICAgICAgICAgICBBVlJBVElP TkFMX0FSRyh0cmFjay0+cmVzb3VyY2VzW2ldLnJlc291cmNlLT5iYXNlLmVkaXRfcmF0ZSksCj4g KyAgICAgICAgICAgICAgICBhdl9xMmQoZWRpdF91bml0X2R1cmF0aW9uKSk7Cj4gKwo+ICsgICAg ICAgICAgICBpZiAodHJhY2stPmN1cnJlbnRfcmVzb3VyY2VfaW5kZXggIT0gaSkgewo+ICsgICAg ICAgICAgICAgICAgYXZfbG9nKHMsCj4gKyAgICAgICAgICAgICAgICAgICAgQVZfTE9HX0RFQlVH LAo+ICsgICAgICAgICAgICAgICAgICAgICJTd2l0Y2ggcmVzb3VyY2Ugb24gdHJhY2sgJWQ6IHJl LW9wZW4gY29udGV4dFxuIiwKPiArICAgICAgICAgICAgICAgICAgICB0cmFjay0+aW5kZXgpOwo+ ICsgICAgICAgICAgICAgICAgYXZmb3JtYXRfY2xvc2VfaW5wdXQoJih0cmFjay0+cmVzb3VyY2Vz W3RyYWNrLT5jdXJyZW50X3Jlc291cmNlX2luZGV4XS5jdHgpKTsKCllvdSBzaG91bGQgcHJvYmFi bHkgc2V0IGN1cnJlbnRfcmVzb3VyY2VfaW5kZXggdG8gYW4gaW52YWxpZCB2YWx1ZSBoZXJlLgpP dGhlcndpc2UgaXQgbWlnaHQgaGFwcGVuIHRoYXQgaWYgb3Blbl90cmFja19yZXNvdXJjZV9jb250 ZXh0KCkgZmFpbHMsCmFub3RoZXIgY2FsbCB0byBnZXRfcmVzb3VyY2VfY29udGV4dF9mb3JfdGlt ZXN0YW1wKCkgKGZyb20gYSBsYXRlcgppbWZfcmVhZF9wYWNrZXQoKSkgbWlnaHQgcmV0dXJuIGEg cG9pbnRlciB0byBhbgpJTUZWaXJ0dWFsVHJhY2tSZXNvdXJjZVBsYXliYWNrQ3R4IHdpdGhvdXQg QVZGb3JtYXRDb250ZXh0LgoKPiArICAgICAgICAgICAgICAgIGlmIChvcGVuX3RyYWNrX3Jlc291 cmNlX2NvbnRleHQocywgJih0cmFjay0+cmVzb3VyY2VzW2ldKSkgIT0gMCkKPiArICAgICAgICAg ICAgICAgICAgICByZXR1cm4gTlVMTDsKPiArICAgICAgICAgICAgICAgIHRyYWNrLT5jdXJyZW50 X3Jlc291cmNlX2luZGV4ID0gaTsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICByZXR1 cm4gJih0cmFjay0+cmVzb3VyY2VzW3RyYWNrLT5jdXJyZW50X3Jlc291cmNlX2luZGV4XSk7Cj4g KyAgICAgICAgfQo+ICsgICAgfQo+ICsgICAgcmV0dXJuIE5VTEw7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgaW1mX3JlYWRfcGFja2V0KEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCkK PiArewo+ICsgICAgSU1GQ29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiArICAgIElNRlZpcnR1 YWxUcmFja1Jlc291cmNlUGxheWJhY2tDdHggKnJlc291cmNlX3RvX3JlYWQgPSBOVUxMOwo+ICsg ICAgQVZSYXRpb25hbCBlZGl0X3VuaXRfZHVyYXRpb247Cj4gKyAgICBpbnQgcmV0ID0gMDsKPiAr ICAgIElNRlZpcnR1YWxUcmFja1BsYXliYWNrQ3R4ICp0cmFjazsKPiArICAgIEZGU3RyZWFtICp0 cmFja19zdHJlYW07Cj4gKwo+ICsgICAgdHJhY2sgPSBnZXRfbmV4dF90cmFja193aXRoX21pbmlt dW1fdGltZXN0YW1wKHMpOwo+ICsKPiArICAgIGlmIChhdl9jbXBfcSh0cmFjay0+Y3VycmVudF90 aW1lc3RhbXAsIHRyYWNrLT5kdXJhdGlvbikgPT0gMCkKPiArICAgICAgICByZXR1cm4gQVZFUlJP Ul9FT0Y7Cj4gKwo+ICsgICAgcmVzb3VyY2VfdG9fcmVhZCA9IGdldF9yZXNvdXJjZV9jb250ZXh0 X2Zvcl90aW1lc3RhbXAocywgdHJhY2spOwo+ICsKPiArICAgIGlmICghcmVzb3VyY2VfdG9fcmVh ZCkgewo+ICsgICAgICAgIGVkaXRfdW5pdF9kdXJhdGlvbiA9IGF2X2ludl9xKHRyYWNrLT5yZXNv dXJjZXNbdHJhY2stPmN1cnJlbnRfcmVzb3VyY2VfaW5kZXhdLnJlc291cmNlLT5iYXNlLmVkaXRf cmF0ZSk7Cj4gKyAgICAgICAgaWYgKGF2X2NtcF9xKGF2X2FkZF9xKHRyYWNrLT5jdXJyZW50X3Rp bWVzdGFtcCwgZWRpdF91bml0X2R1cmF0aW9uKSwKPiArICAgICAgICAgICAgICAgIHRyYWNrLT5k dXJhdGlvbikKPiArICAgICAgICAgICAgPiAwKQo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJP Ul9FT0Y7Cj4gKwo+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJDb3VsZCBub3Qg ZmluZCBJTUYgdHJhY2sgcmVzb3VyY2UgdG8gcmVhZFxuIik7Cj4gKyAgICAgICAgcmV0dXJuIEFW RVJST1JfU1RSRUFNX05PVF9GT1VORDsKPiArICAgIH0KPiArCj4gKyAgICB3aGlsZSAoIWZmX2No ZWNrX2ludGVycnVwdChjLT5pbnRlcnJ1cHRfY2FsbGJhY2spICYmICFyZXQpIHsKPiArICAgICAg ICByZXQgPSBhdl9yZWFkX2ZyYW1lKHJlc291cmNlX3RvX3JlYWQtPmN0eCwgcGt0KTsKPiArICAg ICAgICBhdl9sb2cocywKPiArICAgICAgICAgICAgQVZfTE9HX0RFQlVHLAo+ICsgICAgICAgICAg ICAiR290IHBhY2tldDogcHRzPSUiIFBSSWQ2NAo+ICsgICAgICAgICAgICAiLCBkdHM9JSIgUFJJ ZDY0Cj4gKyAgICAgICAgICAgICIsIGR1cmF0aW9uPSUiIFBSSWQ2NAo+ICsgICAgICAgICAgICAi LCBzdHJlYW1faW5kZXg9JWQsIHBvcz0lIiBQUklkNjQKPiArICAgICAgICAgICAgIlxuIiwKPiAr ICAgICAgICAgICAgcGt0LT5wdHMsCj4gKyAgICAgICAgICAgIHBrdC0+ZHRzLAo+ICsgICAgICAg ICAgICBwa3QtPmR1cmF0aW9uLAo+ICsgICAgICAgICAgICBwa3QtPnN0cmVhbV9pbmRleCwKPiAr ICAgICAgICAgICAgcGt0LT5wb3MpOwo+ICsgICAgICAgIHRyYWNrX3N0cmVhbSA9IGZmc3RyZWFt KHMtPnN0cmVhbXNbdHJhY2stPmluZGV4XSk7Cj4gKyAgICAgICAgaWYgKHJldCA+PSAwKSB7Cj4g KyAgICAgICAgICAgIC8qIFVwZGF0ZSBwYWNrZXQgaW5mbyBmcm9tIHRyYWNrICovCj4gKyAgICAg ICAgICAgIGlmIChwa3QtPmR0cyA8IHRyYWNrX3N0cmVhbS0+Y3VyX2R0cyAmJiB0cmFjay0+bGFz dF9wdHMgPiAwKQo+ICsgICAgICAgICAgICAgICAgcGt0LT5kdHMgPSB0cmFja19zdHJlYW0tPmN1 cl9kdHM7Cj4gKwo+ICsgICAgICAgICAgICBwa3QtPnB0cyA9IHRyYWNrLT5sYXN0X3B0czsKPiAr ICAgICAgICAgICAgcGt0LT5kdHMgPSBwa3QtPmR0cwo+ICsgICAgICAgICAgICAgICAgLSAoaW50 NjRfdCl0cmFjay0+cmVzb3VyY2VzW3RyYWNrLT5jdXJyZW50X3Jlc291cmNlX2luZGV4XS5yZXNv dXJjZS0+YmFzZS5lbnRyeV9wb2ludDsKPiArICAgICAgICAgICAgcGt0LT5zdHJlYW1faW5kZXgg PSB0cmFjay0+aW5kZXg7Cj4gKwo+ICsgICAgICAgICAgICAvKiBVcGRhdGUgdHJhY2sgY3Vyc29y cyAqLwo+ICsgICAgICAgICAgICB0cmFjay0+Y3VycmVudF90aW1lc3RhbXAgPSBhdl9hZGRfcSh0 cmFjay0+Y3VycmVudF90aW1lc3RhbXAsCj4gKyAgICAgICAgICAgICAgICBhdl9tYWtlX3EoKGlu dClwa3QtPmR1cmF0aW9uICogcmVzb3VyY2VfdG9fcmVhZC0+Y3R4LT5zdHJlYW1zWzBdLT50aW1l X2Jhc2UubnVtLAo+ICsgICAgICAgICAgICAgICAgICAgIHJlc291cmNlX3RvX3JlYWQtPmN0eC0+ c3RyZWFtc1swXS0+dGltZV9iYXNlLmRlbikpOwo+ICsgICAgICAgICAgICB0cmFjay0+bGFzdF9w dHMgKz0gcGt0LT5kdXJhdGlvbjsKPiArCj4gKyAgICAgICAgICAgIHJldHVybiAwOwo+ICsgICAg ICAgIH0gZWxzZSBpZiAocmV0ICE9IEFWRVJST1JfRU9GKSB7Cj4gKyAgICAgICAgICAgIGF2X2xv ZyhzLAo+ICsgICAgICAgICAgICAgICAgQVZfTE9HX0VSUk9SLAo+ICsgICAgICAgICAgICAgICAg IkNvdWxkIG5vdCBnZXQgcGFja2V0IGZyb20gdHJhY2sgJWQ6ICVzXG4iLAo+ICsgICAgICAgICAg ICAgICAgdHJhY2stPmluZGV4LAo+ICsgICAgICAgICAgICAgICAgYXZfZXJyMnN0cihyZXQpKTsK PiArICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsg ICAgcmV0dXJuIEFWRVJST1JfRU9GOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGltZl9jbG9zZShB VkZvcm1hdENvbnRleHQgKnMpCj4gK3sKPiArICAgIElNRkNvbnRleHQgKmMgPSBzLT5wcml2X2Rh dGE7Cj4gKwo+ICsgICAgYXZfbG9nKHMsIEFWX0xPR19ERUJVRywgIkNsb3NlIElNRiBwYWNrYWdl XG4iKTsKPiArICAgIGF2X2RpY3RfZnJlZSgmYy0+YXZpb19vcHRzKTsKPiArICAgIGF2X2ZyZWVw KCZjLT5iYXNlX3VybCk7Cj4gKyAgICBpbWZfYXNzZXRfbG9jYXRvcl9tYXBfZGVpbml0KCZjLT5h c3NldF9sb2NhdG9yX21hcCk7Cj4gKyAgICBmZl9pbWZfY3BsX2ZyZWUoYy0+Y3BsKTsKPiArCj4g KyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgYy0+dHJhY2tfY291bnQ7ICsraSkgewo+ICsg ICAgICAgIGltZl92aXJ0dWFsX3RyYWNrX3BsYXliYWNrX2NvbnRleHRfZGVpbml0KGMtPnRyYWNr c1tpXSk7Cj4gKyAgICAgICAgYXZfZnJlZXAoJmMtPnRyYWNrc1tpXSk7Cj4gKyAgICB9Cj4gKwo+ ICsgICAgYXZfZnJlZXAoJmMtPnRyYWNrcyk7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgaW1mX3Byb2JlKGNvbnN0IEFWUHJvYmVEYXRhICpwKQo+ICt7Cj4gKyAg ICBpZiAoIXN0cnN0cihwLT5idWYsICI8Q29tcG9zaXRpb25QbGF5bGlzdCIpKQo+ICsgICAgICAg IHJldHVybiAwOwo+ICsKPiArICAgIC8qIGNoZWNrIGZvciBhIENvbnRlbnRUaXRsZSBlbGVtZW50 IHdpdGhvdXQgaW5jbHVkaW5nIENvbnRlbnRUaXRsZVRleHQsCj4gKyAgICAgKiB3aGljaCBpcyB1 c2VkIGJ5IHRoZSBELUNpbmVtYSBDUEwuCj4gKyAgICAgKi8KPiArICAgIGlmICghc3Ryc3RyKHAt PmJ1ZiwgIkNvbnRlbnRUaXRsZT4iKSkKPiArICAgICAgICByZXR1cm4gMDsKPiArCj4gKyAgICBy ZXR1cm4gQVZQUk9CRV9TQ09SRV9NQVg7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBBVk9wdGlv biBpbWZfb3B0aW9uc1tdID0gewo+ICsgICAgewo+ICsgICAgICAgIC5uYW1lICAgICAgICA9ICJh c3NldG1hcHMiLAo+ICsgICAgICAgIC5oZWxwICAgICAgICA9ICJDb21tYS1zZXBhcmF0ZWQgcGF0 aHMgdG8gQVNTRVRNQVAgZmlsZXMuIgo+ICsgICAgICAgICAgICAgICAgICAgICAgICJJZiBub3Qg c3BlY2lmaWVkLCB0aGUgYEFTU0VUTUFQLnhtbGAgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnkg YXMgdGhlIENQTCBpcyB1c2VkLiIsCj4gKyAgICAgICAgLm9mZnNldCAgICAgID0gb2Zmc2V0b2Yo SU1GQ29udGV4dCwgYXNzZXRfbWFwX3BhdGhzKSwKPiArICAgICAgICAudHlwZSAgICAgICAgPSBB Vl9PUFRfVFlQRV9TVFJJTkcsCj4gKyAgICAgICAgLmRlZmF1bHRfdmFsID0gey5zdHIgPSBOVUxM fSwKPiArICAgICAgICAuZmxhZ3MgICAgICAgPSBBVl9PUFRfRkxBR19ERUNPRElOR19QQVJBTSwK PiArICAgIH0sCj4gKyAgICB7TlVMTH0sCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgQVZDbGFz cyBpbWZfY2xhc3MgPSB7Cj4gKyAgICAuY2xhc3NfbmFtZSA9ICJpbWYiLAo+ICsgICAgLml0ZW1f bmFtZSAgPSBhdl9kZWZhdWx0X2l0ZW1fbmFtZSwKPiArICAgIC5vcHRpb24gICAgID0gaW1mX29w dGlvbnMsCj4gKyAgICAudmVyc2lvbiAgICA9IExJQkFWVVRJTF9WRVJTSU9OX0lOVCwKPiArfTsK PiArCj4gK2NvbnN0IEFWSW5wdXRGb3JtYXQgZmZfaW1mX2RlbXV4ZXIgPSB7Cj4gKyAgICAubmFt ZSAgICAgICAgICAgPSAiaW1mIiwKPiArICAgIC5sb25nX25hbWUgICAgICA9IE5VTExfSUZfQ09O RklHX1NNQUxMKCJJTUYgKEludGVyb3BlcmFibGUgTWFzdGVyIEZvcm1hdCkiKSwKPiArICAgIC5m bGFnc19pbnRlcm5hbCA9IEZGX0ZNVF9JTklUX0NMRUFOVVAsCj4gKyAgICAucHJpdl9jbGFzcyAg ICAgPSAmaW1mX2NsYXNzLAo+ICsgICAgLnByaXZfZGF0YV9zaXplID0gc2l6ZW9mKElNRkNvbnRl eHQpLAo+ICsgICAgLnJlYWRfcHJvYmUgICAgID0gaW1mX3Byb2JlLAo+ICsgICAgLnJlYWRfaGVh ZGVyICAgID0gaW1mX3JlYWRfaGVhZGVyLAo+ICsgICAgLnJlYWRfcGFja2V0ICAgID0gaW1mX3Jl YWRfcGFja2V0LAo+ICsgICAgLnJlYWRfY2xvc2UgICAgID0gaW1mX2Nsb3NlCgpBZGQgYSAnLCc7 IG90aGVyd2lzZSBvbmUgd291bGQgaGF2ZSB0byBhZGQgYSAnLCcgdG8gdGhpcyBsaW5lIGlmIG9u ZQp3ZXJlIHRvIGFkZCBzb21ldGhpbmcgYWZ0ZXIgdGhpcyBsaW5lLgoKPiArfTsKPiAKClBTOiBN ZSBub3Qgc2F5aW5nIGFueXRoaW5nIGFib3V0IGltZl9jcGwuYyBpcyBqdXN0IHRoZSByZXN1bHQg b2YgbWUgbm90CmhhdmluZyB0aW1lIHRvIGxvb2sgYXQgaXQuCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZt cGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8v ZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwK ZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJl Ii4K