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 3547C4393C for ; Sun, 3 Jul 2022 13:16:52 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 640F868B9CB; Sun, 3 Jul 2022 16:16:49 +0300 (EEST) Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-oln040092075077.outbound.protection.outlook.com [40.92.75.77]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D70B468B8AC for ; Sun, 3 Jul 2022 16:16:42 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gL3OakeeWSJLv0E0gDtLNrrXQ/tAmWJWNEhZm4U9ggxiBTve+XFyk09o4XllS+Qs26xVqXU3pFr2aep66QjA8wvVkuqajZifqKCRPvvVWtaeVEI5Mr1nhDjC8eTEjAlD5IOHLwXmLD5R9z/Fy5MMwwcx8RLdcl0zWjJB37Bg1bUzzAgDiomUNbGvRSuGiJmgSxfdkjHZndb66C+/d6dHcuzQdpih24qKFroOwMuYYooBR6RNqTTmC2UG3uVKmZxeNGWZCzZMpnUx5JYkqLn+YR0t2RYJEDRcKTqytKVMZ2dQmkUJZ2Z81LHkDfa1rY2EDotjJyKFrr7JaAIdge8AVQ== 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=pql617MWYPePdT9jVEBXAnPuF4bzVXie459NWCciEvQ=; b=QKLm1JcHv4q/47Z7YZZNLmPDOvdpLT5pvo2UnkTAl5qVNLgH0HJOLvuJc2FcSb0OjnIbzXEJu/fhw7yKkUtsUuejqqbH+99/aljApJxVSAy4V2Ojq27tE0FX76/ta1gBSl4txhh2wN4V+shEEDAwYIt7UnwsfLKK6kPY8YUs6dFSvOks2lXpzChK1kuqJnctjndJhbM/YlwOE1Pb4oZMWZx+9hm7Zy7Vl5IsR43ijQNGEHXK+mlu07Uv3/UYHWDZF5iIN/zlbFIRTmD1SZ2DTWWICWrD2IKVc6lgPuJyObsZ946chFZn3u2bObYTcQH2co93F8m778vDKV8WLRTHDg== 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=pql617MWYPePdT9jVEBXAnPuF4bzVXie459NWCciEvQ=; b=jleFS4Ro+cP7X3KBBMwZzx5PmC0nfpDszXMYVv4Zm+C0LXj/8YM1HSzK37t22ek06tEUm9VfdNosYXZmeHwku79RWkwpp8eF+iaQtu+H9PO9rE8LxqQxC5ebYmV6BTanMJe2ezLtUPoQVB4FTEGfwM+2A3dukAbnmsMrJ6VBuB/vN3mofJ04vSiRO+wui26RYvgUgmh5+SRaBvFNJduWZdoLWJcVw1NUS+UYlcDDMNgk+tbqeAmjN8o2SJFfW5/KeyaYMyPvI7CAOvrFN3wwyHuPmXHsnM88Sm42/inWlzRs63WZVSQOxKj226DdP16iEq6Fdqg+wfrfqf9P9bdBQw== Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) by DB7PR01MB4886.eurprd01.prod.exchangelabs.com (2603:10a6:10:57::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.14; Sun, 3 Jul 2022 13:16:40 +0000 Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::60b9:9f29:40cc:f01c]) by DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::60b9:9f29:40cc:f01c%10]) with mapi id 15.20.5395.018; Sun, 3 Jul 2022 13:16:40 +0000 Message-ID: Date: Sun, 3 Jul 2022 15:16:39 +0200 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20220703102636.32523-1-anton@khirnov.net> <20220703102636.32523-2-anton@khirnov.net> From: Andreas Rheinhardt In-Reply-To: <20220703102636.32523-2-anton@khirnov.net> X-TMN: [YVYKyjvXgIz+abRYNG2kDnzHf4uAEzvN] X-ClientProxiedBy: FR0P281CA0067.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:49::21) To DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 38227706-74c6-4791-236a-08da5cf64455 X-MS-TrafficTypeDiagnostic: DB7PR01MB4886:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 9NEd9KQf9u3eciTsXdMYe/TVaYmvUCOG/tmvAp/kCopzu64XlOlxT7CQ/lI6CDiX8g/a0PUn6pATL2riRHvIf2Us4eFmGnCtsyBFzADXgC7v6k4Sm9ldQ1fQ8dZ7lpoWf9knKrswzazs+hxct8pYtS4N2PEpnKZiqvJjb0r+/3u9tPKofy9yxZ6rBno0DnDg1AicL5dlSIZxK85ATCwO8W6eXeGLWQR1Buny95uUjlJVFHzQXx0wELFhFXvE3LUmrvyQNXB6v54AdGtyTZxX1y/+FmkUZ+Z2FlveZj15EBKJh7jG+JLVg+x0wXlPaTOTMA4N7xF4Z5nFX97VsDjPGbsdQ8Q6+R0/eNq/t8rlbubLUBlInLPgU3Hs3lJ3iNrM113JdqHI+X+TY1X8BWsFOvMlQitT0D1xEp2OOzpxghytMrKGLNre64shkr6c1b1/uJ34jd0ucpz+6rZnRFUX3Z2KRndipgcjHz3I50wpUmBCk3LDPNCY/Gm2GnD+yXUDHi94Fv50uDSxrBezr2JcinbWe4vt494bFubvWrbbNTCl/DHMvRc9S9O3ECG3Gq3LAg+VvWJvuEpQ/J4UoYS8f4QiV/mcad/FKYcz/Mz85XQ9UuUVa9VEQT4jhbRKAp1oHSOigiXUVmgeEZoKx7oE6Q== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RDhBSWpNZE15TkpWZXRwcVBidXVwdHJOYWZLQ3U3dmtaS2ZKTzJsL1ZoVk9G?= =?utf-8?B?dWRWOEd3dTV0eWZkZFEyeGd1OTM0T1loYko2OFFOQ0pzNHpuOURWVlU5VnhS?= =?utf-8?B?Q3ZPczNJWEVzdWpMYlEwd0ZLcmdzMVhNVWpLazZEaWVGWVI3QWsxSEw5cGt0?= =?utf-8?B?VEQ5bWJPUE1aYndheVVKNzRFQy9WZWwvQk5qcXJ0QlBlVkFOYUdOYjdnZWNH?= =?utf-8?B?UkNtK0hZeHZBZEpjNkNHUHFURmhYNjdiNmxJS0Y2UXdsbXc4WmM2aERucGFM?= =?utf-8?B?YXVxNE5sWGtTUURPQmppZTJrM0h6Zmo0Yit5eVIzeGpnajY0L3crRWJEUE51?= =?utf-8?B?UWxaMGYveXR4YWhScS9XTHdHT0V0U1FuNEhTYUQ5L2RNOHB3eVB6Wmc4bHMy?= =?utf-8?B?QVN2Tkw2OEJhRHYzcFJFMVFHMFpHc25LclB2bGNud3h5MVBWb1Nmb1pudG8x?= =?utf-8?B?T0ZLbkJaSzloME54SXRJV0FZVnBtdDl3MzVWZGdhS291Q1JxNHlUOFBZa05E?= =?utf-8?B?VWNnR3Z4QjYwdnladnl3elduTmNGdmhQOWwzRnU3QUV5eWE5TFJQcUNneWVt?= =?utf-8?B?Q1A4VU9nNXlxbnlUOGZock5BMzcwai9YeEIyT0hCczVaUmdpbGVycmphRVhH?= =?utf-8?B?WGRPeHNudGNjcU0rZ1Z3anNjQVFwQllMNEpnV21CNFo4eWVIbUlrbVFOakdL?= =?utf-8?B?Q00yY1YzTW9RNEtkYW5UK3VpTFB5WStFcEE1NVhwUzJrT3oveTF0RHFJR0lS?= =?utf-8?B?SnFuRVFZMzFjRm03ZkhuRVYxcTdsTDc2QnFCR1ZjNG5yNzlCQTEvaFcwYkV6?= =?utf-8?B?YkRoVTkrSGh5WjlSZ3ZZM1dYS1g5RW9raGhZRXNGM20wV2RRSHczTktqZEg1?= =?utf-8?B?WkRCS1dIQnJ1OU1oYzhsVXVuVVhhNlNwZzBBQVdzRENxZFl1RnNTWnI2citi?= =?utf-8?B?VWdlbVpiRUJSek5WcWhUTS9KTndScmtCQ1hUK1hLR0tkNTYxODN4VHlkZVJt?= =?utf-8?B?di9jNkJsbWJhZWdNTEQxb0JVc0YzUnJTMTB3YTlyekVlRHdOQXRMR1k4MmNv?= =?utf-8?B?MFJqc0s0TUZsZEltbUtaaUhybUhpdkNLRzJOZ05XTXg3aENadzNPbi9OQld5?= =?utf-8?B?cUIwZWxwMk1ERnJZczdCeGNzdFhlWXkySnlCUENCVWRqTEs3bWNtNmZBTDQ4?= =?utf-8?B?cWhXOFd5MEhTN3EzcjMrYlZ6a0hNT25CbnVZZVMxQmhhZWtxR3hML0l6cVRU?= =?utf-8?B?b2NtUmdCaUV4TVAzME9wN1NkTjJWNEFwL1hjbW9yejl6M3JzZW83OWRPeHhi?= =?utf-8?B?TUhWcHAxWUkydFNoK1ZBTkg1Z1hnWnU3cmpzaGt5c3NlK0pIZUJJMnJMenNS?= =?utf-8?B?SndPR3pnOVVHa3ZNdE1kZHZnTnYrcXBZK3lTdlhHUVFBa0x0eXoydGNLRjd6?= =?utf-8?B?eDZVcldFZXd3YkcyUEZiakQraXEwRGpvVXRDYTIvMUFseDNRNkFsOVlWbnpt?= =?utf-8?B?M1Y3cnBzWXhhNWRsemJySDMzaVJyVzljZld5RWtjck8weDJRcTNZc0w5WGJU?= =?utf-8?B?Y3VHVnVObEl0YUxBOUNhVmN3cTJ4QTdxY0Y1aTVieDhweHVhaW90ZnhnS1Bl?= =?utf-8?B?TUdHelZZRFA1S3B0ajB1UUpNOWlybUgybHlyREhoR1lDWllabk9PQWhBMzZR?= =?utf-8?B?eFBhT091aG84UllQSXowMlA1NTJ0WnJvUFd5ZXNaaTVBdTZpUE5JcS91bjgx?= =?utf-8?Q?BDhE272vpj4Tq+IpCI=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 38227706-74c6-4791-236a-08da5cf64455 X-MS-Exchange-CrossTenant-AuthSource: DB6PR0101MB2214.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jul 2022 13:16:40.8500 (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: DB7PR01MB4886 Subject: Re: [FFmpeg-devel] [PATCH 2/3] lavc: add standalone cached bitstream reader 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: QW50b24gS2hpcm5vdjoKPiBGcm9tOiBBbGV4YW5kcmEgSMOhamtvdsOhIDxhbGV4YW5kcmEua2hp cm5vdmFAZ21haWwuY29tPgo+IAo+IFRoZSBjYWNoZWQgYml0c3RyZWFtIHJlYWRlciB3YXMgb3Jp Z2luYWxseSB3cml0dGVuIGJ5IEFsZXhhbmRyYSBIw6Fqa292w6EKPiBmb3IgTGliYXYsIHdpdGgg c2lnbmlmaWNhbnQgaW5wdXQgZnJvbSBLb3N0eWEgU2hpc2hrb3YgYW5kIEx1Y2EgQmFyYmF0by4K PiBJdCB3YXMgdGhlbiBjb21taXR0ZWQgdG8gRkZtcGVnIGluIGNhMDc5YjA5NTQ5LCBieSBtZXJn aW5nIGl0IHdpdGggdGhlCj4gaW1wbGVtZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgYml0c3RyZWFt IHJlYWRlci4KPiAKPiBUaGlzIG1lcmdlIG1ha2VzIHRoZSBjb2RlIG9mIGdldF9iaXRzLmggc2ln bmlmaWNhbnRseSBoYXJkZXIgdG8gcmVhZCwKPiBzaW5jZSBpdCBub3cgY29udGFpbnMgdHdvIGRp ZmZlcmVudCBiaXRzdHJlYW0gcmVhZGVycyBpbnRlcmxlYXZlZCB3aXRoCj4gICNpZmRlZnMuIEFk ZGl0aW9uYWxseSwgdGhlIGNvZGUgd2FzIGNvbW1pdHRlZCB3aXRob3V0IHByb3BlciBhdXRob3Jz aGlwCj4gYXR0cmlidXRpb24uCj4gCj4gVGhpcyBjb21taXQgcmUtYWRkcyB0aGUgY2FjaGVkIGJp dHN0cmVhbSByZWFkZXIgYXMgYSBzdGFuZGFsb25lIGhlYWRlciwKPiBhcyBpdCB3YXMgb3JpZ2lu YWxseSBkZXZlbG9wZWQuIEl0IHdpbGwgYmUgbWFkZSB1c2VmdWwgaW4gZm9sbG93aW5nCj4gY29t bWl0cy4KPiAKPiBJbnRlZ3JhdGlvbiBieSBBbnRvbiBLaGlybm92Lgo+IAo+IFNpZ25lZC1vZmYt Ynk6IEFudG9uIEtoaXJub3YgPGFudG9uQGtoaXJub3YubmV0Pgo+IC0tLQo+IEFkZHJlc3NlZCBh bGwgcmV2aWV3IGNvbW1lbnRzIGJ5IEFuZHJlYXMuCj4gCj4gUmVzZW5kaW5nIG9ubHkgdGhlIGJp c3RyZWFtIHJlYWRlciBmb3Igbm93LCBzaW5jZSBhbnkgc2lnbmlmaWNhbnQKPiBjaGFuZ2VzIHRv IGl0IG1lYW4gdGhhdCB0aGUgdGVtcGxhdGl6YXRpb24gcGF0Y2ggbmVlZHMgdG8gYmUgYmFzaWNh bGx5Cj4gcmVkb25lIGZyb20gc2NyYXRjaC4gV2lsbCBzZW5kIHRoZSByZXN0IGFmdGVyIHRoaXMg aXMgYXBwcm92ZWQuCj4gLS0tCj4gIGxpYmF2Y29kZWMvYml0c3RyZWFtLmggfCA1NDAgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgMSBmaWxlIGNoYW5nZWQsIDU0 MCBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL2JpdHN0cmVh bS5oCj4gCj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvYml0c3RyZWFtLmggYi9saWJhdmNvZGVj L2JpdHN0cmVhbS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwLi41 M2JjZGY0NjQzCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYmF2Y29kZWMvYml0c3RyZWFtLmgK PiBAQCAtMCwwICsxLDU0MCBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTYgQWxleGFu ZHJhIEjDoWprb3bDoQo+ICsgKgo+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4g KyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IKPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl ciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vu c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAqIEZG bXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQo+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2Ug YWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPiAr ICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z dG9uLCBNQSAwMjExMC0xMzAxIFVTQQo+ICsgKi8KPiArCj4gKy8qKgo+ICsgKiBAZmlsZQo+ICsg KiBiaXRzdHJlYW0gcmVhZGVyIEFQSSBoZWFkZXIuCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBBVkNP REVDX0JJVFNUUkVBTV9ICj4gKyNkZWZpbmUgQVZDT0RFQ19CSVRTVFJFQU1fSAo+ICsKPiArI2lu Y2x1ZGUgPHN0ZGludC5oPgo+ICsKPiArI2luY2x1ZGUgImNvbmZpZy5oIgo+ICsKPiArI2luY2x1 ZGUgImxpYmF2dXRpbC9hdmFzc2VydC5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2NvbW1vbi5o Igo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2ludHJlYWR3cml0ZS5oIgo+ICsjaW5jbHVkZSAibGli YXZ1dGlsL2xvZy5oIgo+ICsKPiArI2luY2x1ZGUgIm1hdGhvcHMuaCIKCldoYXQgZXhhY3RseSBp cyBtYXRob3BzLmggZm9yPyBnZXRfYml0cy5oIHVzZXMgaXQgZm9yIE5FR19VU1IzMiBhbmQKTkVH X1NTUjMyLCBidXQgeW91IGFyZSBub3QgdXNpbmcgaXQgaGVyZS4KCihCdHc6IEkgYW0gbm90IHN1 cmUgdGhhdCB0aGUgeDg2IGFzc2VtYmx5IGZvciB0aGVzZSBmdW5jdGlvbnMgaXMgc3RpbGwKbmVj ZXNzYXJ5OyBpZiBJIHJlbW92ZSBpdCwgY29kZSBzaXplIGRlY3JlYXNlcywgcHJvYmFibHkgYmVj YXVzZSB0aGUKY29tcGlsZXIgY2FuIG5vdyBzZWUgYW5kIG9wdGltaXplIGV2ZXJ5dGhpbmcuKQoK PiArI2luY2x1ZGUgInZsYy5oIgo+ICsKPiArI2lmbmRlZiBVTkNIRUNLRURfQklUU1RSRUFNX1JF QURFUgo+ICsjZGVmaW5lIFVOQ0hFQ0tFRF9CSVRTVFJFQU1fUkVBREVSICFDT05GSUdfU0FGRV9C SVRTVFJFQU1fUkVBREVSCj4gKyNlbmRpZgo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgQml0c3RyZWFt Q29udGV4dCB7Cj4gKyAgICB1aW50NjRfdCBiaXRzOyAgICAgIC8vIHN0b3JlcyBiaXRzIHJlYWQg ZnJvbSB0aGUgYnVmZmVyCj4gKyAgICBjb25zdCB1aW50OF90ICpidWZmZXIsICpidWZmZXJfZW5k Owo+ICsgICAgY29uc3QgdWludDhfdCAqcHRyOyAvLyBwb2ludGVyIHRvIHRoZSBwb3NpdGlvbiBp bnNpZGUgYSBidWZmZXIKPiArICAgIHVuc2lnbmVkIGJpdHNfbGVmdDsgLy8gbnVtYmVyIG9mIGJp dHMgbGVmdCBpbiBiaXRzIGZpZWxkCj4gKyAgICB1bnNpZ25lZCBzaXplX2luX2JpdHM7Cj4gK30g Qml0c3RyZWFtQ29udGV4dDsKPiArCj4gKy8qKgo+ICsgKiBAcmV0dXJuCj4gKyAqIC0gMCBvbiBz dWNjZXNzZnVsIHJlZmlsbAo+ICsgKiAtIGEgbmVnYXRpdmUgbnVtYmVyIHdoZW4gYml0c3RyZWFt IGVuZCBpcyBoaXQKPiArICoKPiArICogQWx3YXlzIHN1Y2NlZWRzIHdoZW4gVU5DSEVDS0VEX0JJ VFNUUkVBTV9SRUFERVIgaXMgZW5hYmxlZC4KPiArICovCj4gK3N0YXRpYyBpbmxpbmUgaW50IGJp dHNfcHJpdl9yZWZpbGxfNjQoQml0c3RyZWFtQ29udGV4dCAqYmMpCj4gK3sKPiArI2lmICFVTkNI RUNLRURfQklUU1RSRUFNX1JFQURFUgo+ICsgICAgaWYgKGJjLT5wdHIgPj0gYmMtPmJ1ZmZlcl9l bmQpCj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ICsjZW5kaWYKPiArCj4gKyNpZmRlZiBCSVRTVFJF QU1fUkVBREVSX0xFCj4gKyAgICBiYy0+Yml0cyAgICAgICA9IEFWX1JMNjQoYmMtPnB0cik7Cj4g KyNlbHNlCj4gKyAgICBiYy0+Yml0cyAgICAgICA9IEFWX1JCNjQoYmMtPnB0cik7Cj4gKyNlbmRp Zgo+ICsgICAgYmMtPnB0ciAgICAgICArPSA4Owo+ICsgICAgYmMtPmJpdHNfbGVmdCAgPSA2NDsK PiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIEByZXR1cm4KPiArICog LSAwIG9uIHN1Y2Nlc3NmdWwgcmVmaWxsCj4gKyAqIC0gYSBuZWdhdGl2ZSBudW1iZXIgd2hlbiBi aXRzdHJlYW0gZW5kIGlzIGhpdAo+ICsgKgo+ICsgKiBBbHdheXMgc3VjY2VlZHMgd2hlbiBVTkNI RUNLRURfQklUU1RSRUFNX1JFQURFUiBpcyBlbmFibGVkLgo+ICsgKi8KPiArc3RhdGljIGlubGlu ZSBpbnQgYml0c19wcml2X3JlZmlsbF8zMihCaXRzdHJlYW1Db250ZXh0ICpiYykKPiArewo+ICsj aWYgIVVOQ0hFQ0tFRF9CSVRTVFJFQU1fUkVBREVSCj4gKyAgICBpZiAoYmMtPnB0ciA+PSBiYy0+ YnVmZmVyX2VuZCkKPiArICAgICAgICByZXR1cm4gLTE7Cj4gKyNlbmRpZgo+ICsKPiArI2lmZGVm IEJJVFNUUkVBTV9SRUFERVJfTEUKPiArICAgIGJjLT5iaXRzICAgICAgID0gKHVpbnQ2NF90KUFW X1JMMzIoYmMtPnB0cikgPDwgYmMtPmJpdHNfbGVmdCB8IGJjLT5iaXRzOwo+ICsjZWxzZQo+ICsg ICAgYmMtPmJpdHMgICAgICAgPSBiYy0+Yml0cyB8ICh1aW50NjRfdClBVl9SQjMyKGJjLT5wdHIp IDw8ICgzMiAtIGJjLT5iaXRzX2xlZnQpOwo+ICsjZW5kaWYKCk5pdDogVXNlIHw9Cgo+ICsgICAg YmMtPnB0ciAgICAgICArPSA0Owo+ICsgICAgYmMtPmJpdHNfbGVmdCArPSAzMjsKPiArCj4gKyAg ICByZXR1cm4gMDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIEluaXRpYWxpemUgQml0c3RyZWFtQ29u dGV4dC4KPiArICogQHBhcmFtIGJ1ZmZlciBiaXRzdHJlYW0gYnVmZmVyLCBtdXN0IGJlIEFWX0lO UFVUX0JVRkZFUl9QQURESU5HX1NJWkUgYnl0ZXMKPiArICogICAgICAgIGxhcmdlciB0aGFuIHRo ZSBhY3R1YWwgcmVhZCBiaXRzIGJlY2F1c2Ugc29tZSBvcHRpbWl6ZWQgYml0c3RyZWFtCj4gKyAq ICAgICAgICByZWFkZXJzIHJlYWQgMzIgb3IgNjQgYml0cyBhdCBvbmNlIGFuZCBjb3VsZCByZWFk IG92ZXIgdGhlIGVuZAo+ICsgKiBAcGFyYW0gYml0X3NpemUgdGhlIHNpemUgb2YgdGhlIGJ1ZmZl ciBpbiBiaXRzCj4gKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBBVkVSUk9SX0lOVkFMSUREQVRB IGlmIHRoZSBidWZmZXJfc2l6ZSB3b3VsZCBvdmVyZmxvdy4KPiArICovCj4gK3N0YXRpYyBpbmxp bmUgaW50IGJpdHNfaW5pdChCaXRzdHJlYW1Db250ZXh0ICpiYywgY29uc3QgdWludDhfdCAqYnVm ZmVyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJpdF9zaXpl KQo+ICt7Cj4gKyAgICB1bnNpZ25lZCBpbnQgYnVmZmVyX3NpemU7Cj4gKwo+ICsgICAgaWYgKGJp dF9zaXplID4gSU5UX01BWCAtIDcgfHwgIWJ1ZmZlcikgewo+ICsgICAgICAgIGJjLT5idWZmZXIg ICAgPSBOVUxMOwo+ICsgICAgICAgIGJjLT5wdHIgICAgICAgPSBOVUxMOwo+ICsgICAgICAgIGJj LT5iaXRzX2xlZnQgPSAwOwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ ICsgICAgfQo+ICsKPiArICAgIGJ1ZmZlcl9zaXplID0gKGJpdF9zaXplICsgNykgPj4gMzsKPiAr Cj4gKyAgICBiYy0+YnVmZmVyICAgICAgID0gYnVmZmVyOwo+ICsgICAgYmMtPmJ1ZmZlcl9lbmQg ICA9IGJ1ZmZlciArIGJ1ZmZlcl9zaXplOwo+ICsgICAgYmMtPnB0ciAgICAgICAgICA9IGJjLT5i dWZmZXI7Cj4gKyAgICBiYy0+c2l6ZV9pbl9iaXRzID0gYml0X3NpemU7Cj4gKyAgICBiYy0+Yml0 c19sZWZ0ICAgID0gMDsKPiArICAgIGJjLT5iaXRzICAgICAgICAgPSAwOwo+ICsKPiArICAgIGJp dHNfcHJpdl9yZWZpbGxfNjQoYmMpOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICsv KioKPiArICogSW5pdGlhbGl6ZSBCaXRzdHJlYW1Db250ZXh0Lgo+ICsgKiBAcGFyYW0gYnVmZmVy IGJpdHN0cmVhbSBidWZmZXIsIG11c3QgYmUgQVZfSU5QVVRfQlVGRkVSX1BBRERJTkdfU0laRSBi eXRlcwo+ICsgKiAgICAgICAgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCByZWFkIGJpdHMgYmVjYXVz ZSBzb21lIG9wdGltaXplZCBiaXRzdHJlYW0KPiArICogICAgICAgIHJlYWRlcnMgcmVhZCAzMiBv ciA2NCBiaXRzIGF0IG9uY2UgYW5kIGNvdWxkIHJlYWQgb3ZlciB0aGUgZW5kCj4gKyAqIEBwYXJh bSBieXRlX3NpemUgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpbiBieXRlcwo+ICsgKiBAcmV0dXJu IDAgb24gc3VjY2VzcywgQVZFUlJPUl9JTlZBTElEREFUQSBpZiB0aGUgYnVmZmVyX3NpemUgd291 bGQgb3ZlcmZsb3cKPiArICovCj4gK3N0YXRpYyBpbmxpbmUgaW50IGJpdHNfaW5pdDgoQml0c3Ry ZWFtQ29udGV4dCAqYmMsIGNvbnN0IHVpbnQ4X3QgKmJ1ZmZlciwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYnl0ZV9zaXplKQo+ICt7Cj4gKyAgICBpZiAoYnl0 ZV9zaXplID4gSU5UX01BWCAvIDgpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7Cj4gKyAgICByZXR1cm4gYml0c19pbml0KGJjLCBidWZmZXIsIGJ5dGVfc2l6ZSAqIDgpOwo+ ICt9Cj4gKwo+ICsvKioKPiArICogUmV0dXJuIG51bWJlciBvZiBiaXRzIGFscmVhZHkgcmVhZC4K PiArICovCj4gK3N0YXRpYyBpbmxpbmUgaW50IGJpdHNfdGVsbChjb25zdCBCaXRzdHJlYW1Db250 ZXh0ICpiYykKPiArewo+ICsgICAgcmV0dXJuIChiYy0+cHRyIC0gYmMtPmJ1ZmZlcikgKiA4IC0g YmMtPmJpdHNfbGVmdDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFJldHVybiBidWZmZXIgc2l6ZSBp biBiaXRzLgo+ICsgKi8KPiArc3RhdGljIGlubGluZSBpbnQgYml0c19zaXplKGNvbnN0IEJpdHN0 cmVhbUNvbnRleHQgKmJjKQo+ICt7Cj4gKyAgICByZXR1cm4gYmMtPnNpemVfaW5fYml0czsKPiAr fQo+ICsKPiArLyoqCj4gKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHRoZSBiaXRzIGxlZnQgaW4g YSBidWZmZXIuCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIGludCBiaXRzX2xlZnQoY29uc3QgQml0 c3RyZWFtQ29udGV4dCAqYmMpCj4gK3sKPiArICAgIHJldHVybiAoYmMtPmJ1ZmZlciAtIGJjLT5w dHIpICogOCArIGJjLT5zaXplX2luX2JpdHMgKyBiYy0+Yml0c19sZWZ0Owo+ICt9Cj4gKwo+ICtz dGF0aWMgaW5saW5lIHVpbnQ2NF90IGJpdHNfcHJpdl92YWxfZ2V0KEJpdHN0cmVhbUNvbnRleHQg KmJjLCB1bnNpZ25lZCBpbnQgbikKPiArewo+ICsgICAgdWludDY0X3QgcmV0Owo+ICsKPiArICAg IGF2X2Fzc2VydDIobiA+IDAgJiYgbiA8IDY0KTsKPiArCj4gKyNpZmRlZiBCSVRTVFJFQU1fUkVB REVSX0xFCj4gKyAgICByZXQgPSBiYy0+Yml0cyAmICgoVUlOVDY0X0MoMSkgPDwgbikgLSAxKTsK PiArICAgIGJjLT5iaXRzID4+PSBuOwo+ICsjZWxzZQo+ICsgICAgcmV0ID0gYmMtPmJpdHMgPj4g KDY0IC0gbik7Cj4gKyAgICBiYy0+Yml0cyA8PD0gbjsKPiArI2VuZGlmCj4gKyAgICBiYy0+Yml0 c19sZWZ0IC09IG47Cj4gKwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoqCj4gKyAq IFJldHVybiBvbmUgYml0IGZyb20gdGhlIGJ1ZmZlci4KPiArICovCj4gK3N0YXRpYyBpbmxpbmUg dW5zaWduZWQgaW50IGJpdHNfcmVhZF9iaXQoQml0c3RyZWFtQ29udGV4dCAqYmMpCj4gK3sKPiAr ICAgIGlmICghYmMtPmJpdHNfbGVmdCkKPiArICAgICAgICBiaXRzX3ByaXZfcmVmaWxsXzY0KGJj KTsKPiArCj4gKyAgICByZXR1cm4gYml0c19wcml2X3ZhbF9nZXQoYmMsIDEpOwoKVGhpcyBtaWdo dCByZWFkIGFuIGluZXhpc3RlbnQgYml0IGhlcmUsIHRoZXJlYnkgbGVhZGluZyB0byBhIHdyYXBh cm91bmQKb2YgYml0c19sZWZ0LgoKPiArfQo+ICsKPiArLyoqCj4gKyAqIFJldHVybiBuIGJpdHMg ZnJvbSB0aGUgYnVmZmVyLCBuIGhhcyB0byBiZSBpbiB0aGUgMS0zMiByYW5nZS4KPiArICogTWF5 IGJlIGZhc3RlciB0aGFuIGJpdHNfcmVhZCgpIHdoZW4gbiBpcyBub3QgYSBjb21waWxlLXRpbWUg Y29uc3RhbnQgYW5kIGlzCj4gKyAqIGtub3duIHRvIGJlIG5vbi16ZXJvOwo+ICsgKi8KPiArc3Rh dGljIGlubGluZSB1aW50MzJfdCBiaXRzX3JlYWRfbnooQml0c3RyZWFtQ29udGV4dCAqYmMsIHVu c2lnbmVkIGludCBuKQo+ICt7Cj4gKyAgICBhdl9hc3NlcnQyKG4gPiAwICYmIG4gPD0gMzIpOwo+ ICsKPiArICAgIGlmIChuID4gYmMtPmJpdHNfbGVmdCkgewo+ICsgICAgICAgIGlmIChiaXRzX3By aXZfcmVmaWxsXzMyKGJjKSA8IDApCj4gKyAgICAgICAgICAgIGJjLT5iaXRzX2xlZnQgPSBuOwo+ ICsgICAgfQo+ICsKPiArICAgIHJldHVybiBiaXRzX3ByaXZfdmFsX2dldChiYywgbik7Cj4gK30K PiArCj4gKy8qKgo+ICsgKiBSZXR1cm4gbiBiaXRzIGZyb20gdGhlIGJ1ZmZlciwgbiBoYXMgdG8g YmUgaW4gdGhlIDAtMzIgIHJhbmdlLgo+ICsgKi8KPiArc3RhdGljIGlubGluZSB1aW50MzJfdCBi aXRzX3JlYWQoQml0c3RyZWFtQ29udGV4dCAqYmMsIHVuc2lnbmVkIGludCBuKQo+ICt7Cj4gKyAg ICBhdl9hc3NlcnQyKG4gPD0gMzIpOwo+ICsKPiArICAgIGlmICghbikKPiArICAgICAgICByZXR1 cm4gMDsKPiArCj4gKyAgICByZXR1cm4gYml0c19yZWFkX256KGJjLCBuKTsKPiArfQo+ICsKPiAr LyoqCj4gKyAqIFJldHVybiBuIGJpdHMgZnJvbSB0aGUgYnVmZmVyLCBuIGhhcyB0byBiZSBpbiB0 aGUgMC02MyByYW5nZS4KPiArICovCj4gK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgYml0c19yZWFk XzYzKEJpdHN0cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25lZCBpbnQgbikKPiArewo+ICsgICAgdWlu dDY0X3QgcmV0ID0gMDsKPiArICAgIHVuc2lnbmVkIGxlZnQgPSAwOwo+ICsKPiArICAgIGF2X2Fz c2VydDIobiA8PSA2Myk7Cj4gKwo+ICsgICAgaWYgKCFuKQo+ICsgICAgICAgIHJldHVybiAwOwo+ ICsKPiArICAgIGlmIChuID4gYmMtPmJpdHNfbGVmdCkgewo+ICsgICAgICAgIGxlZnQgPSBiYy0+ Yml0c19sZWZ0Owo+ICsgICAgICAgIG4gICAtPSBsZWZ0Owo+ICsKPiArICAgICAgICBpZiAobGVm dCkKPiArICAgICAgICAgICAgcmV0ID0gYml0c19wcml2X3ZhbF9nZXQoYmMsIGxlZnQpOwo+ICsK PiArICAgICAgICBpZiAoYml0c19wcml2X3JlZmlsbF82NChiYykgPCAwKQo+ICsgICAgICAgICAg ICBiYy0+Yml0c19sZWZ0ID0gbjsKPiArCj4gKyAgICB9Cj4gKwo+ICsjaWZkZWYgQklUU1RSRUFN X1JFQURFUl9MRQo+ICsgICAgcmV0ID0gYml0c19wcml2X3ZhbF9nZXQoYmMsIG4pIDw8IGxlZnQg fCByZXQ7Cj4gKyNlbHNlCj4gKyAgICByZXQgPSBiaXRzX3ByaXZfdmFsX2dldChiYywgbikgfCBy ZXQgPDwgbjsKPiArI2VuZGlmCj4gKwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoq Cj4gKyAqIFJldHVybiBuIGJpdHMgZnJvbSB0aGUgYnVmZmVyLCBuIGhhcyB0byBiZSBpbiB0aGUg MC02NCByYW5nZS4KPiArICovCj4gK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgYml0c19yZWFkXzY0 KEJpdHN0cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25lZCBpbnQgbikKPiArewo+ICsgICAgYXZfYXNz ZXJ0MihuIDw9IDY0KTsKPiArCj4gKyAgICBpZiAobiA9PSA2NCkgewo+ICsgICAgICAgIHVpbnQ2 NF90IHJldCA9IGJpdHNfcmVhZChiYywgMzIpOwo+ICsjaWZkZWYgQklUU1RSRUFNX1JFQURFUl9M RQo+ICsgICAgICAgIHJldHVybiByZXQgfCAoKHVpbnQ2NF90KWJpdHNfcmVhZChiYywgMzIpIDw8 IDMyKTsKPiArI2Vsc2UKPiArICAgICAgICByZXR1cm4gKHJldCA8PCAzMikgfCBiaXRzX3JlYWQo YmMsIDMyKTsKPiArI2VuZGlmCgpUaGUgYXBwcm9hY2ggdGFrZW4gaGVyZSB3aWxsIHJlc3VsdCBp biB0d28gcmVmaWxscyBpbiBjYXNlIHRoZXJlIGFyZQppbml0aWFsbHkgbGVzcyB0aGFuIDMyIGJp dHMgaW4gdGhlIGNhY2hlLgoKPiArICAgIH0KPiArICAgIHJldHVybiBiaXRzX3JlYWRfNjMoYmMs IG4pOwo+ICt9Cj4gKwo+ICsvKioKPiArICogUmV0dXJuIG4gYml0cyBmcm9tIHRoZSBidWZmZXIg YXMgYSBzaWduZWQgaW50ZWdlci4KPiArICogbiBoYXMgdG8gYmUgaW4gdGhlIDAtMzIgcmFuZ2Uu Cj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIGludDMyX3QgYml0c19yZWFkX3NpZ25lZChCaXRzdHJl YW1Db250ZXh0ICpiYywgdW5zaWduZWQgaW50IG4pCj4gK3sKPiArICAgIHJldHVybiBzaWduX2V4 dGVuZChiaXRzX3JlYWQoYmMsIG4pLCBuKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB1bnNp Z25lZCBpbnQgYml0c19wcml2X3ZhbF9zaG93KEJpdHN0cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25l ZCBpbnQgbikKPiArewo+ICsjaWZkZWYgQklUU1RSRUFNX1JFQURFUl9MRQo+ICsgICAgcmV0dXJu IGJjLT5iaXRzICYgKChVSU5UNjRfQygxKSA8PCBuKSAtIDEpOwo+ICsjZWxzZQo+ICsgICAgcmV0 dXJuIGJjLT5iaXRzID4+ICg2NCAtIG4pOwo+ICsjZW5kaWYKPiArfQoKVGhlIExFIHZlcnNpb24g b2YgdGhpcyB3b3JrcyBmb3IgbiBpbiB0aGUgcmFuZ2Ugb2YgMC4uNjMsIHRoZSBCRSB2ZXJzaW9u CndvcmtzIGZvciBuIGluIHRoZSByYW5nZSAxLi42NC4gVGhlIGxhdHRlciBpcyB2ZXJ5IGJhZC4g VGhlIGZvcm1lciBjb3VsZApiZSBmaXhlZCBieSBjcmVhdGluZyB0aGUgbWFzayB2aWEgVUlOVDY0 X01BWCA+PiAoNjQgLSBuKSwgc28gdGhhdCB0aGlzCmZ1bmN0aW9uIGNhbiBiZSB1c2VkIHdpdGgg dGhlIHJhbmdlIDEuLjY0LgooVGhpcyBpcyBvZiBjb3Vyc2UgYSBnb29kIHJlYXNvbiB0byB0cmVh dCB0aGUgY2FzZSBuID09IDAgc3BlY2lhbGx5IGJ5CnVzaW5nIGRlc2lnbmF0ZWQgZnVuY3Rpb25z IGZvciB0aGVtLikKCj4gKwo+ICsvKioKPiArICogUmV0dXJuIG4gYml0cyBmcm9tIHRoZSBidWZm ZXIgYnV0IGRvIG5vdCBjaGFuZ2UgdGhlIGJ1ZmZlciBzdGF0ZS4KPiArICogbiBoYXMgdG8gYmUg aW4gdGhlIDAtMzIgcmFuZ2UuCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBi aXRzX3BlZWsoQml0c3RyZWFtQ29udGV4dCAqYmMsIHVuc2lnbmVkIGludCBuKQo+ICt7Cj4gKyAg ICBhdl9hc3NlcnQyKG4gPD0gMzIpOwo+ICsKPiArICAgIGlmIChuID4gYmMtPmJpdHNfbGVmdCkK PiArICAgICAgICBiaXRzX3ByaXZfcmVmaWxsXzMyKGJjKTsKPiArCj4gKyAgICByZXR1cm4gYml0 c19wcml2X3ZhbF9zaG93KGJjLCBuKTsKCkFuZCBoZXJlIHlvdSBhcmUgcG90ZW50aWFsbHkgY2Fs bGluZyBiaXRzX3ByaXZfdmFsX3Nob3coKSB3aXRoIG4gPT0gMCwKd2hpY2ggZG9lc24ndCB3b3Jr IGZvciBCRS4KCj4gK30KPiArCj4gKy8qKgo+ICsgKiBSZXR1cm4gbiBiaXRzIGZyb20gdGhlIGJ1 ZmZlciBhcyBhIHNpZ25lZCBpbnRlZ2VyLAo+ICsgKiBkbyBub3QgY2hhbmdlIHRoZSBidWZmZXIg c3RhdGUuCj4gKyAqIG4gaGFzIHRvIGJlIGluIHRoZSAwLTMyIHJhbmdlLgo+ICsgKi8KPiArc3Rh dGljIGlubGluZSBpbnQgYml0c19wZWVrX3NpZ25lZChCaXRzdHJlYW1Db250ZXh0ICpiYywgdW5z aWduZWQgaW50IG4pCj4gK3sKPiArICAgIHJldHVybiBzaWduX2V4dGVuZChiaXRzX3BlZWsoYmMs IG4pLCBuKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIGJpdHNfcHJpdl9za2lwX3Jl bWFpbmluZyhCaXRzdHJlYW1Db250ZXh0ICpiYywgdW5zaWduZWQgaW50IG4pCj4gK3sKPiArI2lm ZGVmIEJJVFNUUkVBTV9SRUFERVJfTEUKPiArICAgIGJjLT5iaXRzID4+PSBuOwo+ICsjZWxzZQo+ ICsgICAgYmMtPmJpdHMgPDw9IG47Cj4gKyNlbmRpZgo+ICsgICAgYmMtPmJpdHNfbGVmdCAtPSBu Owo+ICt9Cj4gKwo+ICsvKioKPiArICogU2tpcCBuIGJpdHMgaW4gdGhlIGJ1ZmZlci4KPiArICov Cj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBiaXRzX3NraXAoQml0c3RyZWFtQ29udGV4dCAqYmMsIHVu c2lnbmVkIGludCBuKQo+ICt7Cj4gKyAgICBpZiAobiA8IGJjLT5iaXRzX2xlZnQpCj4gKyAgICAg ICAgYml0c19wcml2X3NraXBfcmVtYWluaW5nKGJjLCBuKTsKPiArICAgIGVsc2Ugewo+ICsgICAg ICAgIG4gLT0gYmMtPmJpdHNfbGVmdDsKPiArICAgICAgICBiYy0+Yml0cyAgICAgID0gMDsKPiAr ICAgICAgICBiYy0+Yml0c19sZWZ0ID0gMDsKPiArCj4gKyAgICAgICAgaWYgKG4gPj0gNjQpIHsK PiArICAgICAgICAgICAgdW5zaWduZWQgaW50IHNraXAgPSBuIC8gODsKPiArCj4gKyAgICAgICAg ICAgIG4gLT0gc2tpcCAqIDg7Cj4gKyAgICAgICAgICAgIGJjLT5wdHIgKz0gc2tpcDsKPiArICAg ICAgICB9Cj4gKyAgICAgICAgYml0c19wcml2X3JlZmlsbF82NChiYyk7Cj4gKyAgICAgICAgaWYg KG4pCj4gKyAgICAgICAgICAgIGJpdHNfcHJpdl9za2lwX3JlbWFpbmluZyhiYywgbik7Cj4gKyAg ICB9Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBTZWVrIHRvIHRoZSBnaXZlbiBiaXQgcG9zaXRpb24u Cj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgYml0c19zZWVrKEJpdHN0cmVhbUNvbnRleHQg KmJjLCB1bnNpZ25lZCBwb3MpCj4gK3sKPiArICAgIGJjLT5wdHIgICAgICAgPSBiYy0+YnVmZmVy Owo+ICsgICAgYmMtPmJpdHMgICAgICA9IDA7Cj4gKyAgICBiYy0+Yml0c19sZWZ0ID0gMDsKPiAr Cj4gKyAgICBiaXRzX3NraXAoYmMsIHBvcyk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBTa2lwIGJp dHMgdG8gYSBieXRlIGJvdW5kYXJ5Lgo+ICsgKi8KPiArc3RhdGljIGlubGluZSBjb25zdCB1aW50 OF90ICpiaXRzX2FsaWduKEJpdHN0cmVhbUNvbnRleHQgKmJjKQo+ICt7Cj4gKyAgICB1bnNpZ25l ZCBpbnQgbiA9IC1iaXRzX3RlbGwoYmMpICYgNzsKPiArICAgIGlmIChuKQo+ICsgICAgICAgIGJp dHNfc2tpcChiYywgbik7CgpJcyB0aGVyZSBhIHJlYXNvbiB0aGF0IEkgZG9uJ3Qgc2VlIHRoYXQg bWFrZXMgeW91IG5vdCBzaW1wbHkgdXNlCmJjLT5iaXRzX2xlZnQgJj0gfjB4ZmY/Cgo+ICsgICAg cmV0dXJuIGJjLT5idWZmZXIgKyAoYml0c190ZWxsKGJjKSA+PiAzKTsKPiArfQo+ICsKPiArLyoq Cj4gKyAqIFJlYWQgTVBFRy0xIGRjLXN0eWxlIFZMQyAoc2lnbiBiaXQgKyBtYW50aXNzYSB3aXRo IG5vIE1TQikuCj4gKyAqIElmIE1TQiBub3Qgc2V0IGl0IGlzIG5lZ2F0aXZlLgo+ICsgKiBAcGFy YW0gbiBsZW5ndGggaW4gYml0cwo+ICsgKi8KPiArc3RhdGljIGlubGluZSBpbnQgYml0c19yZWFk X3hiaXRzKEJpdHN0cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25lZCBpbnQgbikKPiArewo+ICsgICAg aW50MzJfdCBjYWNoZSA9IGJpdHNfcGVlayhiYywgMzIpOwo+ICsgICAgaW50IHNpZ24gPSB+Y2Fj aGUgPj4gMzE7Cj4gKyAgICBiaXRzX3ByaXZfc2tpcF9yZW1haW5pbmcoYmMsIG4pOwoKRllJOiBZ b3UgYXJlIHBvdGVudGlhbGx5IHNraXBwaW5nIG1vcmUgYml0cyBoZXJlIHRoYW4geW91IGhhdmUu Cgo+ICsKPiArICAgIHJldHVybiAoKCgodWludDMyX3QpKHNpZ24gXiBjYWNoZSkpID4+ICgzMiAt IG4pKSBeIHNpZ24pIC0gc2lnbjsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFJldHVybiBkZWNvZGVk IHRydW5jYXRlZCB1bmFyeSBjb2RlIGZvciB0aGUgdmFsdWVzIDAsIDEsIDIuCj4gKyAqLwo+ICtz dGF0aWMgaW5saW5lIGludCBiaXRzX2RlY29kZTAxMihCaXRzdHJlYW1Db250ZXh0ICpiYykKPiAr ewo+ICsgICAgaWYgKCFiaXRzX3JlYWRfYml0KGJjKSkKPiArICAgICAgICByZXR1cm4gMDsKPiAr ICAgIGVsc2UKPiArICAgICAgICByZXR1cm4gYml0c19yZWFkX2JpdChiYykgKyAxOwo+ICt9Cj4g Kwo+ICsvKioKPiArICogUmV0dXJuIGRlY29kZWQgdHJ1bmNhdGVkIHVuYXJ5IGNvZGUgZm9yIHRo ZSB2YWx1ZXMgMiwgMSwgMC4KPiArICovCj4gK3N0YXRpYyBpbmxpbmUgaW50IGJpdHNfZGVjb2Rl MjEwKEJpdHN0cmVhbUNvbnRleHQgKmJjKQo+ICt7Cj4gKyAgICBpZiAoYml0c19yZWFkX2JpdChi YykpCj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKyAgICBlbHNlCj4gKyAgICAgICAgcmV0dXJuIDIg LSBiaXRzX3JlYWRfYml0KGJjKTsKPiArfQo+ICsKPiArLyogUmVhZCBzaWduIGJpdCBhbmQgZmxp cCB0aGUgc2lnbiBvZiB0aGUgcHJvdmlkZWQgdmFsdWUgYWNjb3JkaW5nbHkuICovCj4gK3N0YXRp YyBpbmxpbmUgaW50IGJpdHNfYXBwbHlfc2lnbihCaXRzdHJlYW1Db250ZXh0ICpiYywgaW50IHZh bCkKPiArewo+ICsgICAgaW50IHNpZ24gPSBiaXRzX3JlYWRfc2lnbmVkKGJjLCAxKTsKCklzIHRo ZXJlIGEgcmVhc29uIHlvdSBhcmUgbm90IHVzaW5nIGJpdHNfcmVhZF9iaXQgaGVyZT8KCj4gKyAg ICByZXR1cm4gKHZhbCBeIHNpZ24pIC0gc2lnbjsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBp bnQgYml0c19za2lwXzFzdG9wXzhkYXRhKEJpdHN0cmVhbUNvbnRleHQgKnMpCj4gK3sKPiArICAg IGlmIChiaXRzX2xlZnQocykgPD0gMCkKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElE REFUQTsKPiArCj4gKyAgICB3aGlsZSAoYml0c19yZWFkKHMsIDEpKSB7CgpTYW1lIGhlcmUKCj4g KyAgICAgICAgYml0c19za2lwKHMsIDgpOwo+ICsgICAgICAgIGlmIChiaXRzX2xlZnQocykgPD0g MCkKPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICB9Cj4g Kwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qIFVuZ2V0IHVwIHRvIDMyIGJpdHMuICov Cj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBiaXRzX3VuZ2V0KEJpdHN0cmVhbUNvbnRleHQgKmJjLCB1 aW50NjRfdCB2YWx1ZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg YW1vdW50KQo+ICt7Cj4gKyAgICB1bnNpZ25lZCBjYWNoZV9zaXplID0gc2l6ZW9mKGJjLT5iaXRz KSAqIDg7Cj4gKwo+ICsgICAgYXZfYXNzZXJ0MihhbW91bnQgPD0gMzIpOwo+ICsKPiArICAgIGlm IChiYy0+Yml0c19sZWZ0ICsgYW1vdW50ID4gY2FjaGVfc2l6ZSkgewo+ICsgICAgICAgIGJjLT5i aXRzX2xlZnQgIC09IDQgKiA4Owo+ICsgICAgICAgIGJjLT5wdHIgICAgICAgIC09IDQ7Cj4gKyAg ICB9Cj4gKwo+ICsjaWZkZWYgQklUU1RSRUFNX1JFQURFUl9MRQo+ICsgICAgYmMtPmJpdHMgICAg ICAgPSAoYmMtPmJpdHMgPDwgYW1vdW50KSB8IHZhbHVlOwo+ICsjZWxzZQo+ICsgICAgYmMtPmJp dHMgICAgICAgPSAoYmMtPmJpdHMgPj4gYW1vdW50KSB8ICh2YWx1ZSA8PCAoY2FjaGVfc2l6ZSAt IGFtb3VudCkpOwo+ICsjZW5kaWYKClRoaXMgd2hvbGUgQVBJIHJlbGllcyBvbiB0aGUgZmFjdCB0 aGF0IG9ubHkgdGhlIGJpdHMgdGhhdCBhcmUgbGVmdCBtYXkKYmUgc2V0OiBKdXN0IGxvb2sgYXQg Yml0c19wcml2X3JlZmlsbF8zMiB3aGljaCBzaW1wbHkgc2hpZnRzIHRoZSBuZXdseQpyZWFkIGJp dHMgaW50byB0aGVpciBjb3JyZWN0IHBsYWNlIGFuZCB0aGVuIG9yJ3MgdGhlbSB3aXRoIHRoZSBj YWNoZQood2l0aG91dCB6ZXJvaW5nIHRoZSBjYWNoZSBiaXRzIHRoYXQgd2VyZSBpbml0aWFsbHkg aW52YWxpZCkuCgpXaGF0IHlvdSBhcmUgZG9pbmcgYWJvdmUgYnJlYWtzIHRoaXM7IGluIGNhc2Ug eW91IGhhZCB0byB1bndpbmQgdGhlCmJpdHJlYWRlciwgZXZlcnkgYml0IGNhbiBwb3RlbnRpYWxs eSBiZSBzZXQuCgpJbiB5b3VyIHRlc3QgdG9vbCwgeW91IGFyZSB1c2luZyBhIHNlcXVlbmNlIG9m IHZhbCA9IGJpdHNfcmVhZCgmYmMsCmNvdW50KTsgYml0c191bmdldCgmYmMsIHZhbCwgY291bnQp LiBJbiBjYXNlIHRoZSBvcmlnaW5hbCByZWFkIGNvdWxkIGJlCnBlcmZvcm1lZCBmcm9tIHRoZSBj YWNoZSwgdGhlIHVuZ2V0IGRvZXMgbm90IG5lZWQgdG8gdW53aW5kIGFuZApldmVyeXRoaW5nIGlz IGZpbmUuIE90aGVyd2lzZSwgdGhlIGFtb3VudCBvZiBiaXRzIGxlZnQgaW4gdGhlIGNhY2hlCmFm dGVyIHRoZSByZWFkIHdpbGwgYmUgbGVzcyB0aGFuIDMyLCBzbyB0aGF0IHVuZ2V0IGRvZXMgbm90 IG5lZWQgdG8KdW53aW5kIGVpdGhlciwgc28gdGhlIGlzc3VlIGFib3ZlIGlzIHVudGVzdGVkLgoK SSB0aGluayB5b3UgY2FuIGNvdmVyIGl0IGJ5IHBlcmZvcm1pbmcgdHdvIHJlYWRzIGZpcnN0IGFu ZCB0aGVuIHR3byB1bmdldHMuCgpJbiBhbnkgY2FzZSwgeW91IHNob3VsZCBhZGQgYXZfYXNzZXJ0 MigpIHRvIGVuc3VyZSB0aGF0IGFsbCBpbnZhbGlkIGJpdHMKYXJlIHVuc2V0LiBBbHNvLCB0aGUg ZWFybGllciBzcGxpdCBpbnRvIHVud2luZCBhbmQgdW5nZXQgd2FzIElNTyBjbGVhbmVyLgoKPiAr ICAgIGJjLT5iaXRzX2xlZnQgKz0gYW1vdW50Owo+ICt9Cj4gKwo+ICsvKioKPiArICogUmV0dXJu IHRoZSBMVVQgZWxlbWVudCBmb3IgdGhlIGdpdmVuIGJpdHN0cmVhbSBjb25maWd1cmF0aW9uLgo+ ICsgKi8KPiArc3RhdGljIGlubGluZSBpbnQgYml0c19wcml2X3NldF9pZHgoQml0c3RyZWFtQ29u dGV4dCAqYmMsIGludCBjb2RlLCBpbnQgKm4sIGludCAqbmJfYml0cywKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVkxDRWxlbSAqdGFibGUpCj4gK3sKPiArICAg IHVuc2lnbmVkIGlkeDsKPiArCj4gKyAgICAqbmJfYml0cyA9IC0qbjsKPiArICAgIGlkeCA9IGJp dHNfcGVlayhiYywgKm5iX2JpdHMpICsgY29kZTsKPiArICAgICpuID0gdGFibGVbaWR4XS5sZW47 Cj4gKwo+ICsgICAgcmV0dXJuIHRhYmxlW2lkeF0uc3ltOwo+ICt9Cj4gKwo+ICsvKioKPiArICog UGFyc2UgYSB2bGMgY29kZS4KPiArICogQHBhcmFtIGJpdHMgaXMgdGhlIG51bWJlciBvZiBiaXRz IHdoaWNoIHdpbGwgYmUgcmVhZCBhdCBvbmNlLCBtdXN0IGJlCj4gKyAqICAgICAgICAgICAgIGlk ZW50aWNhbCB0byBuYl9iaXRzIGluIGluaXRfdmxjKCkKPiArICogQHBhcmFtIG1heF9kZXB0aCBp cyB0aGUgbnVtYmVyIG9mIHRpbWVzIGJpdHMgYml0cyBtdXN0IGJlIHJlYWQgdG8gY29tcGxldGVs eQo+ICsgKiAgICAgICAgICAgICAgICAgIHJlYWQgdGhlIGxvbmdlc3QgdmxjIGNvZGUKPiArICog ICAgICAgICAgICAgICAgICA9IChtYXhfdmxjX2xlbmd0aCArIGJpdHMgLSAxKSAvIGJpdHMKPiAr ICogSWYgdGhlIHZsYyBjb2RlIGlzIGludmFsaWQgYW5kIG1heF9kZXB0aD0xLCB0aGVuIG5vIGJp dHMgd2lsbCBiZSByZW1vdmVkLgo+ICsgKiBJZiB0aGUgdmxjIGNvZGUgaXMgaW52YWxpZCBhbmQg bWF4X2RlcHRoPjEsIHRoZW4gdGhlIG51bWJlciBvZiBiaXRzIHJlbW92ZWQKPiArICogaXMgdW5k ZWZpbmVkLgo+ICsgKi8KPiArc3RhdGljIGlubGluZSBpbnQgYml0c19yZWFkX3ZsYyhCaXRzdHJl YW1Db250ZXh0ICpiYywgY29uc3QgVkxDRWxlbSAqdGFibGUsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IGJpdHMsIGludCBtYXhfZGVwdGgpCj4gK3sKPiArICAgIGludCBu Yl9iaXRzOwo+ICsgICAgdW5zaWduZWQgaWR4ID0gYml0c19wZWVrKGJjLCBiaXRzKTsKPiArICAg IGludCBjb2RlICAgICA9IHRhYmxlW2lkeF0uc3ltOwo+ICsgICAgaW50IG4gICAgICAgID0gdGFi bGVbaWR4XS5sZW47Cj4gKwo+ICsgICAgaWYgKG1heF9kZXB0aCA+IDEgJiYgbiA8IDApIHsKPiAr ICAgICAgICBiaXRzX3ByaXZfc2tpcF9yZW1haW5pbmcoYmMsIGJpdHMpOwo+ICsgICAgICAgIGNv ZGUgPSBiaXRzX3ByaXZfc2V0X2lkeChiYywgY29kZSwgJm4sICZuYl9iaXRzLCB0YWJsZSk7Cj4g KyAgICAgICAgaWYgKG1heF9kZXB0aCA+IDIgJiYgbiA8IDApIHsKPiArICAgICAgICAgICAgYml0 c19wcml2X3NraXBfcmVtYWluaW5nKGJjLCBuYl9iaXRzKTsKPiArICAgICAgICAgICAgY29kZSA9 IGJpdHNfcHJpdl9zZXRfaWR4KGJjLCBjb2RlLCAmbiwgJm5iX2JpdHMsIHRhYmxlKTsKPiArICAg ICAgICB9Cj4gKyAgICB9Cj4gKyAgICBiaXRzX3ByaXZfc2tpcF9yZW1haW5pbmcoYmMsIG4pOwo+ ICsKPiArICAgIHJldHVybiBjb2RlOwo+ICt9Cj4gKwo+ICsjZGVmaW5lIEJJVFNfUkxfVkxDKGxl dmVsLCBydW4sIGJjLCB0YWJsZSwgYml0cywgbWF4X2RlcHRoKSBcCj4gKyAgICBkbyB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgICAg ICBpbnQgbiwgbmJfYml0czsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ ICsgICAgICAgIHVuc2lnbmVkIGludCBpbmRleCA9IGJpdHNfcGVlayhiYywgYml0cyk7ICAgICAg ICAgICBcCj4gKyAgICAgICAgbGV2ZWwgPSB0YWJsZVtpbmRleF0ubGV2ZWw7ICAgICAgICAgICAg ICAgICAgICAgICAgIFwKPiArICAgICAgICBuICAgICA9IHRhYmxlW2luZGV4XS5sZW47ICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAgICAgICAgaWYgKG1heF9kZXB0aCA+ IDEgJiYgbiA8IDApIHsgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgICAgICAgICAgYml0 c19za2lwKGJjLCBiaXRzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4g KyAgICAgICAgICAgIG5iX2JpdHMgPSAtbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAo+ICsgICAgICAgICAgICBpbmRleCA9IGJpdHNfcGVlayhiYywgbmJfYml0 cykgKyBsZXZlbDsgICAgICAgICBcCj4gKyAgICAgICAgICAgIGxldmVsID0gdGFibGVbaW5kZXhd LmxldmVsOyAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgICAgICAgICAgbiAgICAgPSB0YWJs ZVtpbmRleF0ubGVuOyAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgICAgICAgICBpZiAo bWF4X2RlcHRoID4gMiAmJiBuIDwgMCkgeyAgICAgICAgICAgICAgICAgICBcCj4gKyAgICAgICAg ICAgICAgICBiaXRzX3NraXAoYmMsIG5iX2JpdHMpOyAgICAgICAgICAgICAgICAgICAgIFwKPiAr ICAgICAgICAgICAgICAgIG5iX2JpdHMgPSAtbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCj4gKyAgICAgICAgICAgICAgICBpbmRleCA9IGJpdHNfcGVlayhiYywgbmJf Yml0cykgKyBsZXZlbDsgICAgIFwKPiArICAgICAgICAgICAgICAgIGxldmVsID0gdGFibGVbaW5k ZXhdLmxldmVsOyAgICAgICAgICAgICAgICAgXAo+ICsgICAgICAgICAgICAgICAgbiAgICAgPSB0 YWJsZVtpbmRleF0ubGVuOyAgICAgICAgICAgICAgICAgICBcCj4gKyAgICAgICAgICAgIH0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgICAgICB9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsg ICAgICAgIHJ1biA9IHRhYmxlW2luZGV4XS5ydW47ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCj4gKyAgICAgICAgYml0c19za2lwKGJjLCBuKTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKPiArICAgIH0gd2hpbGUgKDApCj4gKwo+ICsjZW5kaWYgLyogQVZDT0RFQ19C SVRTVFJFQU1fSCAqLwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0 dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJz Y3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZm bXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==