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 ECCD647670 for ; Sun, 19 Nov 2023 04:08:22 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D4B4F68CCB9; Sun, 19 Nov 2023 06:08:18 +0200 (EET) Received: from mail-yb1-f170.google.com (mail-yb1-f170.google.com [209.85.219.170]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2DD7368C63B for ; Sun, 19 Nov 2023 06:08:12 +0200 (EET) Received: by mail-yb1-f170.google.com with SMTP id 3f1490d57ef6-db057de2b77so3072634276.3 for ; Sat, 18 Nov 2023 20:08:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hanbang-wang.20230601.gappssmtp.com; s=20230601; t=1700366890; x=1700971690; darn=ffmpeg.org; h=cc:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=oRBuL83NfnkUGE3d+TX3qBE5cbRc21VYS9QqHIcntWA=; b=2jrXeAWDO22RpwTNn5ox3Bokoaoajck4BimORLqatZJKLrCJ7iY4Tp8YCYaN7LbYkO pNnhSeMsQanlIZCCY2GMNwX3EdZoa9lFeQm7YI4Db2B5MLZKrAJceeAZFlTsz+8O+pKs GK4sjakImqBC+FjjXUhpD89pF+EbrNKskCUGm3T4hREj7fgDv6fVlbIskfih3gxYqv7i Bics64+Zqu5G9Vs1mYbEA+e1s+rbQXJ5Md1eIKvjGz52iUceXYv059q1F2gP1bqFwi3o 4WMzeJxhRfiQPlbtA2UbLs3wwK+srqst0syxcZATl2+t6U01Fn2X6ZROzcYCfVT7GAQB EXkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700366890; x=1700971690; h=cc:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=oRBuL83NfnkUGE3d+TX3qBE5cbRc21VYS9QqHIcntWA=; b=DVz8aaQ1FsvBEXlSI84rSXf25UuquLhvDTwI9/Wot/3z+nTqe8zNZmhID2l+aX2i79 bdmZf+MnqYkmzDyUd+NwHrrvVFjACesevto6AkUC7p5TbEKlk0fiPqfcQzvyITLgh4KY gl+D/KgzCdYB9lQ4LrxR3kKT0EjYTPbC2V30zlwu6w6RI/VO5WOCaX7twi4NsWJ8tdlq bBLew9ZrXN8J6DyygcqXQiu4dwxHk/1D32CodvoZzEWTkzk/QMSZ3IcdKoSJMPP4nDdS 3GKdEtWKdpVchkkhRnAjEAqrjmtumX5rH1h7wVmAqcAXYFUxqBreMPSImNyh5zGGN5jx jCNw== X-Gm-Message-State: AOJu0YwDKKZdduG6nJQSBV1FuvIihYrLW/fCt+ZIIfuy8HIuzF+axKNC Tyk99MVW3aXgXQn1yEz2HdyklL3o0lIgITS82t0h6SmjLcai7hJU X-Google-Smtp-Source: AGHT+IGwylSjN1BQc0yBbXrtNRoU41nMWxSZvIZslf8wYCZjFAh7fvI4Xvbf+rzZIlYbtdSQB0L28FDoFUNozXBzHGA= X-Received: by 2002:a5b:a06:0:b0:d9a:ce53:4942 with SMTP id k6-20020a5b0a06000000b00d9ace534942mr4077998ybq.0.1700366889651; Sat, 18 Nov 2023 20:08:09 -0800 (PST) MIME-Version: 1.0 References: <20231112100252.27398-1-admin@superfashi.com> In-Reply-To: <20231112100252.27398-1-admin@superfashi.com> From: SuperFashi Date: Sun, 19 Nov 2023 13:07:57 +0900 Message-ID: Cc: ffmpeg-devel@ffmpeg.org X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH] avformat: add MMTP parser and MMT/TLV 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: SGksIGlzIHRoZXJlIGFueXRoaW5nIEkgY291bGQgZG8gdG8gcHVzaCB0aGlzIGZvcndhcmQ/CgpP biBTdW4sIE5vdiAxMiwgMjAyMyBhdCAxOTowMiBTdXBlckZhc2hpIDxhZG1pbkBzdXBlcmZhc2hp LmNvbT4gd3JvdGU6Cgo+IFRoaXMgcGF0Y2ggYWRkcyBhbiBNUEVHIE1lZGlhIFRyYW5zcG9ydCBQ cm90b2NvbCAoTU1UUCkgcGFyc2VyLCBhcyBkZWZpbmVkCj4gaW4gSVNPL0lFQyAyMzAwOC0xLCBh bmQgYW4gTU1UIHByb3RvY29sIG92ZXIgVExWIHBhY2tldHMgKE1NVC9UTFYpIGRlbXV4ZXIsCj4g YXMgZGVmaW5lZCBpbiBBUklCIFNURC1CMzIuIEN1cnJlbnRseSwgaXQgc3VwcG9ydHMgSEVWQywg QUFDIExBVE0sIGFuZAo+IEFSSUItVFRNTCBkZW11eGluZy4KPgo+IFNpbmNlIE1NVFAgaXMgZGVz aWduZWQgdG8gdHJhbnNtaXQgb3ZlciBJUCwgdGhlcmUgaXMgbm8gc2l6ZSBpbmZvcm1hdGlvbgo+ IHdpdGhpbiBlYWNoIE1NVFAgcGFja2V0LCBhbmQgdGhlcmUgaXMgbm8gb24tZGlzayBmb3JtYXQg ZGVmaW5lZCBhbG9uZ3NpZGUKPiB0aGUgcHJvdG9jb2wuIE9uZSBpbmR1c3RyaWFsIHNvbHV0aW9u IGlzIGEgc2ltcGxlIGNvbnRhaW5lciBmb3JtYXQgdXNpbmcKPiB0eXBl4oCTbGVuZ3Ro4oCTdmFs dWUgcGFja2V0cywgd2hpY2ggaXMgZGVmaW5lZCBpbiBBUklCIFNURC1CMzIuCj4KPiBBbm90aGVy IGtub3duIGNvbnRhaW5lciBmb3JtYXQgZm9yIE1NVFAgaXMgdXNpbmcgcGFja2V0IGNhcHR1cmUg KHBjYXApCj4gZmlsZXMgd2hpY2ggcmVjb3JkcyBuZXR3b3JrIHBhY2tldHMuIFRoaXMgcGF0Y2gg ZG9lcyBub3QgaW5jbHVkZSB0aGUKPiBkZW11eGVyIGZvciB0aGlzIGNvbnRhaW5lciBmb3JtYXQu Cj4KPiBTaWduZWQtb2ZmLWJ5OiBTdXBlckZhc2hpIDxhZG1pbkBzdXBlcmZhc2hpLmNvbT4KPiAt LS0KPiAgQ2hhbmdlbG9nICAgICAgICAgICAgICAgIHwgICAgMSArCj4gIGRvYy9kZW11eGVycy50 ZXhpICAgICAgICB8ICAgIDQgKwo+ICBsaWJhdmZvcm1hdC9NYWtlZmlsZSAgICAgfCAgICAxICsK PiAgbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jIHwgICAgMSArCj4gIGxpYmF2Zm9ybWF0L21tdHAu YyAgICAgICB8IDE2ODggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAg bGliYXZmb3JtYXQvbW10cC5oICAgICAgIHwgICA2NCArKwo+ICBsaWJhdmZvcm1hdC9tbXR0bHYu YyAgICAgfCAgMzM1ICsrKysrKysrCj4gIGxpYmF2Zm9ybWF0L3ZlcnNpb24uaCAgICB8ICAgIDIg Ky0KPiAgOCBmaWxlcyBjaGFuZ2VkLCAyMDk1IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkK PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Zm9ybWF0L21tdHAuYwo+ICBjcmVhdGUgbW9kZSAx MDA2NDQgbGliYXZmb3JtYXQvbW10cC5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZvcm1h dC9tbXR0bHYuYwo+Cj4gZGlmZiAtLWdpdCBhL0NoYW5nZWxvZyBiL0NoYW5nZWxvZwo+IGluZGV4 IGNhMzg1NDYyNjIuLjA1MTE4ZmUxZTQgMTAwNjQ0Cj4gLS0tIGEvQ2hhbmdlbG9nCj4gKysrIGIv Q2hhbmdlbG9nCj4gQEAgLTMsNiArMyw3IEBAIHJlbGVhc2VzIGFyZSBzb3J0ZWQgZnJvbSB5b3Vu Z2VzdCB0byBvbGRlc3QuCj4KPiAgdmVyc2lvbiA8bmV4dD46Cj4gIC0gTEVBRCBNQ01QIGRlY29k ZXIKPiArLSBNTVRQIHBhcnNlciBhbmQgTU1UL1RMViBkZW11eGVyCj4KPiAgdmVyc2lvbiA2LjE6 Cj4gIC0gbGliYXJpYmNhcHRpb24gZGVjb2Rlcgo+IGRpZmYgLS1naXQgYS9kb2MvZGVtdXhlcnMu dGV4aSBiL2RvYy9kZW11eGVycy50ZXhpCj4gaW5kZXggY2ExNTYzYWJiMC4uNjk2MzRjMDlkYSAx MDA2NDQKPiAtLS0gYS9kb2MvZGVtdXhlcnMudGV4aQo+ICsrKyBiL2RvYy9kZW11eGVycy50ZXhp Cj4gQEAgLTY4OSw2ICs2ODksMTAgQEAgU2V0IHRoZSBzYW1wbGUgcmF0ZSBmb3IgbGlib3Blbm1w dCB0byBvdXRwdXQuCj4gIFJhbmdlIGlzIGZyb20gMTAwMCB0byBJTlRfTUFYLiBUaGUgdmFsdWUg ZGVmYXVsdCBpcyA0ODAwMC4KPiAgQGVuZCB0YWJsZQo+Cj4gK0BzZWN0aW9uIG1tdHRsdgo+ICsK PiArRGVtdXhlciBmb3IgTU1UIHByb3RvY29sIG92ZXIgVExWIHBhY2tldHMgKE1NVC9UTFYpLCBh cyBkZWZpbmVkIGluIEFSSUIKPiBTVEQtQjMyLgo+ICsKPiAgQHNlY3Rpb24gbW92L21wNC8zZ3AK Pgo+ICBEZW11eGVyIGZvciBRdWlja3RpbWUgRmlsZSBGb3JtYXQgJiBJU08vSUVDIEJhc2UgTWVk aWEgRmlsZSBGb3JtYXQKPiAoSVNPL0lFQyAxNDQ5Ni0xMiBvciBNUEVHLTQgUGFydCAxMiwgSVNP L0lFQyAxNTQ0NC0xMiBvciBKUEVHIDIwMDAgUGFydCAxMikuCj4gZGlmZiAtLWdpdCBhL2xpYmF2 Zm9ybWF0L01ha2VmaWxlIGIvbGliYXZmb3JtYXQvTWFrZWZpbGUKPiBpbmRleCAzMjkwNTVjY2Zk Li5hNDMyMGU0MTkzIDEwMDY0NAo+IC0tLSBhL2xpYmF2Zm9ybWF0L01ha2VmaWxlCj4gKysrIGIv bGliYXZmb3JtYXQvTWFrZWZpbGUKPiBAQCAtMzU5LDYgKzM1OSw3IEBAIE9CSlMtJChDT05GSUdf TUxWX0RFTVVYRVIpICAgICAgICAgICAgICAgKz0gbWx2ZGVjLm8KPiByaWZmZGVjLm8KPiAgT0JK Uy0kKENPTkZJR19NTV9ERU1VWEVSKSAgICAgICAgICAgICAgICArPSBtbS5vCj4gIE9CSlMtJChD T05GSUdfTU1GX0RFTVVYRVIpICAgICAgICAgICAgICAgKz0gbW1mLm8KPiAgT0JKUy0kKENPTkZJ R19NTUZfTVVYRVIpICAgICAgICAgICAgICAgICArPSBtbWYubyByYXdlbmMubwo+ICtPQkpTLSQo Q09ORklHX01NVFRMVl9ERU1VWEVSKSAgICAgICAgICAgICs9IG1tdHAubyBtbXR0bHYubwo+ICBP QkpTLSQoQ09ORklHX01PRFNfREVNVVhFUikgICAgICAgICAgICAgICs9IG1vZHMubwo+ICBPQkpT LSQoQ09ORklHX01PRkxFWF9ERU1VWEVSKSAgICAgICAgICAgICs9IG1vZmxleC5vCj4gIE9CSlMt JChDT05GSUdfTU9WX0RFTVVYRVIpICAgICAgICAgICAgICAgKz0gbW92Lm8gbW92X2NoYW4ubyBt b3ZfZXNkcy5vIFwKPiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jIGIvbGli YXZmb3JtYXQvYWxsZm9ybWF0cy5jCj4gaW5kZXggZDRiNTA1YTVhMy4uYWZlOGJiYjFlYyAxMDA2 NDQKPiAtLS0gYS9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMKPiArKysgYi9saWJhdmZvcm1hdC9h bGxmb3JtYXRzLmMKPiBAQCAtMjc1LDYgKzI3NSw3IEBAIGV4dGVybiBjb25zdCBBVklucHV0Rm9y bWF0ICBmZl9tbHZfZGVtdXhlcjsKPiAgZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX21t X2RlbXV4ZXI7Cj4gIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9tbWZfZGVtdXhlcjsK PiAgZXh0ZXJuIGNvbnN0IEZGT3V0cHV0Rm9ybWF0IGZmX21tZl9tdXhlcjsKPiArZXh0ZXJuIGNv bnN0IEFWSW5wdXRGb3JtYXQgIGZmX21tdHRsdl9kZW11eGVyOwo+ICBleHRlcm4gY29uc3QgQVZJ bnB1dEZvcm1hdCAgZmZfbW9kc19kZW11eGVyOwo+ICBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1h dCAgZmZfbW9mbGV4X2RlbXV4ZXI7Cj4gIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9t b3ZfZGVtdXhlcjsKPiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvbW10cC5jIGIvbGliYXZmb3Jt YXQvbW10cC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwLi41ZGM0 NWVmMzA5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYmF2Zm9ybWF0L21tdHAuYwo+IEBAIC0w LDAgKzEsMTY4OCBAQAo+ICsvKgo+ICsgKiBNUEVHIE1lZGlhIFRyYW5zcG9ydCBQcm90b2NvbCAo TU1UUCkgcGFyc2VyLCBhcyBkZWZpbmVkIGluIElTTy9JRUMKPiAyMzAwOC0xLgo+ICsgKiBDb3B5 cmlnaHQgKGMpIDIwMjMgU3VwZXJGYXNoaQo+ICsgKgo+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBv ZiBGRm1wZWcuCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiArICogdmVyc2lvbiAyLjEg b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4g KyAqCj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQo+ICsgKiBMZXNzZXIgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4g KyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg U29mdHdhcmUKPiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0 aCBGbG9vciwgQm9zdG9uLCBNQQo+IDAyMTEwLTEzMDEgVVNBCj4gKyAqLwo+ICsKPiArI2luY2x1 ZGUgPHN0ZGJvb2wuaD4KPiArCj4gKyNpbmNsdWRlICJsaWJhdmNvZGVjL2J5dGVzdHJlYW0uaCIK PiArI2luY2x1ZGUgImxpYmF2dXRpbC9hdmFzc2VydC5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGls L2ludHJlYWR3cml0ZS5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL21lbS5oIgo+ICsjaW5jbHVk ZSAiZGVtdXguaCIKPiArI2luY2x1ZGUgImludGVybmFsLmgiCj4gKyNpbmNsdWRlICJtbXRwLmgi Cj4gKyNpbmNsdWRlICJuZXR3b3JrLmgiCj4gKwo+ICtzdHJ1Y3QgTU1UR2VuZXJhbExvY2F0aW9u SW5mbyB7Cj4gKyAgICB1aW50OF90IGxvY2F0aW9uX3R5cGU7Cj4gKyAgICB1bmlvbiB7Cj4gKyAg ICAgICAgc3RydWN0IHsKPiArICAgICAgICAgICAgdWludDE2X3QgcGFja2V0X2lkOwo+ICsgICAg ICAgIH0gdHlwZTA7Cj4gKyAgICAgICAgc3RydWN0IHsKPiArICAgICAgICAgICAgc3RydWN0IGlu X2FkZHIgaXB2NF9zcmNfYWRkcjsKPiArICAgICAgICAgICAgc3RydWN0IGluX2FkZHIgaXB2NF9k c3RfYWRkcjsKPiArICAgICAgICAgICAgdWludDE2X3QgICAgICAgZHN0X3BvcnQ7Cj4gKyAgICAg ICAgICAgIHVpbnQxNl90ICAgICAgIHBhY2tldF9pZDsKPiArICAgICAgICB9IHR5cGUxOwo+ICsg ICAgICAgIHN0cnVjdCB7Cj4gKyAgICAgICAgICAgIHN0cnVjdCBpbjZfYWRkciBpcHY2X3NyY19h ZGRyOwo+ICsgICAgICAgICAgICBzdHJ1Y3QgaW42X2FkZHIgaXB2Nl9kc3RfYWRkcjsKPiArICAg ICAgICAgICAgdWludDE2X3QgICAgICAgIGRzdF9wb3J0Owo+ICsgICAgICAgICAgICB1aW50MTZf dCAgICAgICAgcGFja2V0X2lkOwo+ICsgICAgICAgIH0gdHlwZTI7Cj4gKyAgICAgICAgc3RydWN0 IHsKPiArICAgICAgICAgICAgdWludDE2X3QgbmV0d29ya19pZDsKPiArICAgICAgICAgICAgdWlu dDE2X3QgTVBFR18yX3RyYW5zcG9ydF9zdHJlYW1faWQ7Cj4gKyAgICAgICAgICAgIHVpbnQxNl90 IE1QRUdfMl9QSUQ6IDEzOwo+ICsgICAgICAgIH0gdHlwZTM7Cj4gKyAgICAgICAgc3RydWN0IHsK PiArICAgICAgICAgICAgc3RydWN0IGluNl9hZGRyIGlwdjZfc3JjX2FkZHI7Cj4gKyAgICAgICAg ICAgIHN0cnVjdCBpbjZfYWRkciBpcHY2X2RzdF9hZGRyOwo+ICsgICAgICAgICAgICB1aW50MTZf dCAgICAgICAgZHN0X3BvcnQ7Cj4gKyAgICAgICAgICAgIHVpbnQxNl90ICAgICAgICBNUEVHXzJf UElEOiAxMzsKPiArICAgICAgICB9IHR5cGU0Owo+ICsgICAgICAgIHN0cnVjdCB7Cj4gKyAgICAg ICAgICAgIGNoYXIgVVJMWzB4MTAwICsgMV07Cj4gKyAgICAgICAgfSB0eXBlNTsKPiArICAgIH07 Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHBhcnNlX21tdF9nZW5lcmFsX2xvY2F0aW9uX2luZm8o Cj4gKyAgICBzdHJ1Y3QgTU1UR2VuZXJhbExvY2F0aW9uSW5mbyAqaW5mbywgR2V0Qnl0ZUNvbnRl eHQgKmdiYykKPiArewo+ICsgICAgdWludDhfdCB1cmxfc2l6ZTsKPiArCj4gKyAgICBpZiAoYnl0 ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IDEpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7Cj4gKyAgICBzd2l0Y2ggKGluZm8tPmxvY2F0aW9uX3R5cGUgPSBieXRl c3RyZWFtMl9nZXRfYnl0ZXUoZ2JjKSkgewo+ICsgICAgY2FzZSAweDAwOgo+ICsgICAgICAgIGlm IChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgMikKPiArICAgICAgICAgICAgcmV0 dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICAgICAgaW5mby0+dHlwZTAucGFja2V0X2lk ID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYyk7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBj YXNlIDB4MDE6Cj4gKyAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykg PCAoMzIgKyAzMiArIDE2ICsgMTYpIC8gOCkKPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1Jf SU5WQUxJRERBVEE7Cj4gKyAgICAgICAgYnl0ZXN0cmVhbTJfZ2V0X2J1ZmZlcnUoZ2JjLCAodWlu dDhfdCAqKQo+ICZpbmZvLT50eXBlMS5pcHY0X3NyY19hZGRyLCA0KTsKPiArICAgICAgICBieXRl c3RyZWFtMl9nZXRfYnVmZmVydShnYmMsICh1aW50OF90ICopCj4gJmluZm8tPnR5cGUxLmlwdjRf ZHN0X2FkZHIsIDQpOwo+ICsgICAgICAgIGluZm8tPnR5cGUxLmRzdF9wb3J0ICA9IGJ5dGVzdHJl YW0yX2dldF9iZTE2dShnYmMpOwo+ICsgICAgICAgIGluZm8tPnR5cGUxLnBhY2tldF9pZCA9IGJ5 dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpOwo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgY2FzZSAw eDAyOgo+ICsgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgKDEy OCArIDEyOCArIDE2ICsgMTYpIC8gOCkKPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5W QUxJRERBVEE7Cj4gKyAgICAgICAgYnl0ZXN0cmVhbTJfZ2V0X2J1ZmZlcnUoCj4gKyAgICAgICAg ICAgIGdiYywgKHVpbnQ4X3QgKikgJmluZm8tPnR5cGUyLmlwdjZfc3JjX2FkZHIsIDE2KTsKPiAr ICAgICAgICBieXRlc3RyZWFtMl9nZXRfYnVmZmVydSgKPiArICAgICAgICAgICAgZ2JjLCAodWlu dDhfdCAqKSAmaW5mby0+dHlwZTIuaXB2Nl9kc3RfYWRkciwgMTYpOwo+ICsgICAgICAgIGluZm8t PnR5cGUyLmRzdF9wb3J0ICA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpOwo+ICsgICAgICAg IGluZm8tPnR5cGUyLnBhY2tldF9pZCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpOwo+ICsg ICAgICAgIGJyZWFrOwo+ICsgICAgY2FzZSAweDAzOgo+ICsgICAgICAgIGlmIChieXRlc3RyZWFt Ml9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgKDE2ICsgMTYgKyAzICsgMTMpIC8gOCkKPiArICAgICAg ICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICAgICAgaW5mby0+dHlwZTMu bmV0d29ya19pZCAgICAgICAgICAgICAgICAgPQo+IGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMp Owo+ICsgICAgICAgIGluZm8tPnR5cGUzLk1QRUdfMl90cmFuc3BvcnRfc3RyZWFtX2lkID0KPiBi eXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2JjKTsKPiArICAgICAgICBpbmZvLT50eXBlMy5NUEVHXzJf UElEID0KPiArICAgICAgICAgICAgYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYykgJiAwYjExMTEx MTExMTExMTE7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBjYXNlIDB4MDQ6Cj4gKyAgICAgICAg aWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCAoMTI4ICsgMTI4ICsgMTYgKyAz ICsgMTMpIC8KPiA4KQo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsK PiArICAgICAgICBieXRlc3RyZWFtMl9nZXRfYnVmZmVydSgKPiArICAgICAgICAgICAgZ2JjLCAo dWludDhfdCAqKSAmaW5mby0+dHlwZTQuaXB2Nl9zcmNfYWRkciwgMTYpOwo+ICsgICAgICAgIGJ5 dGVzdHJlYW0yX2dldF9idWZmZXJ1KAo+ICsgICAgICAgICAgICBnYmMsICh1aW50OF90ICopICZp bmZvLT50eXBlNC5pcHY2X2RzdF9hZGRyLCAxNik7Cj4gKyAgICAgICAgaW5mby0+dHlwZTQuZHN0 X3BvcnQgICA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpOwo+ICsgICAgICAgIGluZm8tPnR5 cGU0Lk1QRUdfMl9QSUQgPSBieXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2JjKSAmCj4gMGIxMTExMTEx MTExMTExOwo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgY2FzZSAweDA1Ogo+ICsgICAgICAgIHVy bF9zaXplID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGUoZ2JjKTsKPiArICAgICAgICBieXRlc3RyZWFt Ml9nZXRfYnVmZmVyKGdiYywgKHVpbnQ4X3QgKikgaW5mby0+dHlwZTUuVVJMLAo+IHVybF9zaXpl KTsKPiArICAgICAgICBpbmZvLT50eXBlNS5VUkxbdXJsX3NpemVdID0gJ1wwJzsKPiArICAgICAg ICBicmVhazsKPiArICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7Cj4gKyAgICB9Cj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RydWN0IFN0cmVh bXMgewo+ICsgICAgQVZTdHJlYW0gKnN0cmVhbTsKPiArCj4gKyAgICBpbnQgbnVtX3RpbWVzdGFt cF9kZXNjcmlwdG9yczsKPiArICAgIHN0cnVjdCBNUFVUaW1lc3RhbXBEZXNjcmlwdG9yIHsKPiAr ICAgICAgICB1aW50MzJfdCBzZXFfbnVtOwo+ICsgICAgICAgIGludDY0X3QgIHByZXNlbnRhdGlv bl90aW1lOwo+ICsgICAgfSAqdGltZXN0YW1wX2Rlc2NyaXB0b3I7Cj4gKwo+ICsgICAgaW50IG51 bV9leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3JzOwo+ICsgICAgc3RydWN0IE1QVUV4dGVuZGVkVGlt ZXN0YW1wRGVzY3JpcHRvciB7Cj4gKyAgICAgICAgdWludDMyX3Qgc2VxX251bTsKPiArICAgICAg ICB1aW50MTZfdCBkZWNvZGluZ190aW1lX29mZnNldDsKPiArICAgICAgICB1aW50OF90ICBudW1f b2ZfYXU7Cj4gKyAgICAgICAgc3RydWN0IHsKPiArICAgICAgICAgICAgdWludDE2X3QgZHRzX3B0 c19vZmZzZXQ7Cj4gKyAgICAgICAgICAgIHVpbnQxNl90IHB0c19vZmZzZXQ7Cj4gKyAgICAgICAg fSBhdVsweDEwMF07Cj4gKyAgICB9ICpleHRfdGltZXN0YW1wX2Rlc2NyaXB0b3I7Cj4gKwo+ICsg ICAgdWludDMyX3QgICAgbGFzdF9zZXF1ZW5jZV9udW1iZXI7Cj4gKyAgICB1aW50MTZfdCAgICBh dV9jb3VudDsKPiArICAgIEFWQnVmZmVyUmVmICpwZW5kaW5nX2J1ZmZlcjsKPiArICAgIGludDY0 X3QgICAgIG9mZnNldDsKPiArICAgIGludCAgICAgICAgIGZsYWdzOwo+ICsKPiArICAgIHN0cnVj dCBTdHJlYW1zICpuZXh0Owo+ICt9Owo+ICsKPiArc3RydWN0IE1NVFBDb250ZXh0IHsKPiArICAg IHN0cnVjdCBGcmFnbWVudEFzc2VtYmxlciAqYXNzZW1ibGVyOwo+ICsgICAgc3RydWN0IFN0cmVh bXMgICAgICAgICAgICpzdHJlYW1zOwo+ICsgICAgQVZQcm9ncmFtICAgICAgICAgICAgICAgICpw cm9ncmFtOwo+ICsgICAgLy8gc3RydWN0IE1NVEdlbmVyYWxMb2NhdGlvbkluZm8gbXB0X2xvY2F0 aW9uOyBUT0RPCj4gKwo+ICsgICAgLy8gYmVsb3cgYXJlIHRlbXBvcmFyeSBmaWVsZHMgYXZhaWxh YmxlIGZvciB0aGUgc2NvcGUgb2YgYSBzaW5nbGUKPiBwYWNrZXQKPiArICAgIEFWRm9ybWF0Q29u dGV4dCAqczsKPiArICAgIEFWUGFja2V0ICAgICAgICAqcGt0Owo+ICsgICAgdWludDE2X3QgICAg ICAgIGN1cnJlbnRfcGlkOwo+ICsgICAgYm9vbCAgICAgICAgICAgIGlzX3JhcDsKPiArfTsKPiAr Cj4gK3N0YXRpYyBzdHJ1Y3QgU3RyZWFtcyAqZmluZF9jdXJyZW50X3N0cmVhbShzdHJ1Y3QgTU1U UENvbnRleHQgKmN0eCkKPiArewo+ICsgICAgc3RydWN0IFN0cmVhbXMgKnN0cmVhbXM7Cj4gKyAg ICBmb3IgKHN0cmVhbXMgPSBjdHgtPnN0cmVhbXM7IHN0cmVhbXMgIT0gTlVMTDsgc3RyZWFtcyA9 IHN0cmVhbXMtPm5leHQpCj4gKyAgICAgICAgaWYgKHN0cmVhbXMtPnN0cmVhbS0+aWQgPT0gY3R4 LT5jdXJyZW50X3BpZCkKPiArICAgICAgICAgICAgcmV0dXJuIHN0cmVhbXM7Cj4gKyAgICByZXR1 cm4gTlVMTDsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBTdHJlYW1zICoKPiArZmluZF9vcl9h bGxvY2F0ZV9zdHJlYW0oc3RydWN0IE1NVFBDb250ZXh0ICpjdHgsIHVpbnQxNl90IHBpZCkKPiAr ewo+ICsgICAgQVZTdHJlYW0gICAgICAgKnN0cmVhbTsKPiArICAgIHN0cnVjdCBTdHJlYW1zICpz dHJlYW1zOwo+ICsgICAgZm9yIChzdHJlYW1zID0gY3R4LT5zdHJlYW1zOyBzdHJlYW1zICE9IE5V TEw7IHN0cmVhbXMgPSBzdHJlYW1zLT5uZXh0KQo+ICsgICAgICAgIGlmIChzdHJlYW1zLT5zdHJl YW0tPmlkID09IHBpZCkgewo+ICsgICAgICAgICAgICBmZnN0cmVhbShzdHJlYW1zLT5zdHJlYW0p LT5uZWVkX2NvbnRleHRfdXBkYXRlID0gMTsKPiArICAgICAgICAgICAgcmV0dXJuIHN0cmVhbXM7 Cj4gKyAgICAgICAgfQo+ICsKPiArICAgIHN0cmVhbSA9IGF2Zm9ybWF0X25ld19zdHJlYW0oY3R4 LT5zLCBOVUxMKTsKPiArICAgIGlmIChzdHJlYW0gPT0gTlVMTCkgcmV0dXJuIE5VTEw7Cj4gKyAg ICBzdHJlYW0tPmlkID0gcGlkOwo+ICsgICAgYXZfcHJvZ3JhbV9hZGRfc3RyZWFtX2luZGV4KGN0 eC0+cywgY3R4LT5wcm9ncmFtLT5pZCwgc3RyZWFtLT5pbmRleCk7Cj4gKwo+ICsgICAgc3RyZWFt cyA9IGF2X21hbGxvY3ooc2l6ZW9mKHN0cnVjdCBTdHJlYW1zKSk7Cj4gKyAgICBpZiAoc3RyZWFt cyA9PSBOVUxMKSByZXR1cm4gTlVMTDsKPiArICAgIHN0cmVhbXMtPnN0cmVhbSA9IHN0cmVhbTsK PiArICAgIHN0cmVhbXMtPm5leHQgICA9IGN0eC0+c3RyZWFtczsKPiArICAgIHN0cmVhbXMtPm9m ZnNldCA9IC0xOwo+ICsgICAgY3R4LT5zdHJlYW1zICAgID0gc3RyZWFtczsKPiArICAgIHJldHVy biBzdHJlYW1zOwo+ICt9Cj4gKwo+ICtlbnVtIHsKPiArICAgIE1NVF9QQUNLQUdFX1RBQkxFX0lE ICA9IDB4MjAsCj4gKyAgICBQQUNLQUdFX0xJU1RfVEFCTEVfSUQgPSAweDgwLAo+ICsgICAgTUhf RUlUX1RBQkxFX0lEICAgICAgID0gMHg4QiwKPiArfTsKPiArCj4gK2VudW0gewo+ICsgICAgTVBV X1RJTUVTVEFNUF9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAgPSAweDAwMDEsCj4gKyAgICBB Q0NFU1NfQ09OVFJPTF9ERVNDUklQVE9SICAgICAgICAgICAgICAgICA9IDB4ODAwNCwKPiArICAg IFZJREVPX0NPTVBPTkVOVF9ERVNDUklQVE9SICAgICAgICAgICAgICAgID0gMHg4MDEwLAo+ICsg ICAgTUhfU1RSRUFNX0lERU5USUZJRVJfREVTQ1JJUFRPUiAgICAgICAgICAgPSAweDgwMTEsCj4g KyAgICBNSF9DT05URU5UX0RFU0NSSVBUT1IgICAgICAgICAgICAgICAgICAgICA9IDB4ODAxMiwK PiArICAgIE1IX0FVRElPX0NPTVBPTkVOVF9ERVNDUklQVE9SICAgICAgICAgICAgID0gMHg4MDE0 LAo+ICsgICAgTUhfREFUQV9DT01QT05FTlRfREVTQ1JJUFRPUiAgICAgICAgICAgICAgPSAweDgw MjAsCj4gKyAgICBNUFVfRVhURU5ERURfVElNRVNUQU1QX0RFU0NSSVBUT1IgICAgICAgICA9IDB4 ODAyNiwKPiArICAgIENPTlRFTlRfQ09QWV9DT05UUk9MX0RFU0NSSVBUT1IgICAgICAgICAgID0g MHg4MDM4LAo+ICsgICAgQ09OVEVOVF9VU0FHRV9DT05UUk9MX0RFU0NSSVBUT1IgICAgICAgICAg PSAweDgwMzksCj4gKyAgICBNVUxUSU1FRElBX1NFUlZJQ0VfSU5GT1JNQVRJT05fREVTQ1JJUFRP UiA9IDB4ODAzRiwKPiArICAgIE1IX1NIT1JUX0VWRU5UX0RFU0NSSVBUT1IgICAgICAgICAgICAg ICAgID0gMHhGMDAxLAo+ICsgICAgTUhfRVhURU5ERURfRVZFTlRfREVTQ1JJUFRPUiAgICAgICAg ICAgICAgPSAweEYwMDIsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50Cj4gK3BhcnNlX3ZpZGVvX2Nv bXBvbmVudF9kZXNjcmlwdG9yKEFWU3RyZWFtICpzdHJlYW0sIEdldEJ5dGVDb250ZXh0ICpnYmMp Cj4gK3sKPiArICAgIHVpbnQ4X3QgZGVzY3JpcHRvcl9sZW5ndGg7Cj4gKyAgICB1aW50OF90IGxh bmd1YWdlX2NvZGVbNF07Cj4gKwo+ICsgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0 KGdiYykgPCAoMTYgKyA4KSAvIDgpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7Cj4gKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYykgIT0gVklERU9fQ09NUE9O RU5UX0RFU0NSSVBUT1IpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4g KyAgICBkZXNjcmlwdG9yX2xlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpOwo+ICsK PiArICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgZGVzY3JpcHRvcl9s ZW5ndGgpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICB7Cj4g KyAgICAgICAgR2V0Qnl0ZUNvbnRleHQgbmdiYzsKPiArICAgICAgICBieXRlc3RyZWFtMl9pbml0 KCZuZ2JjLCBnYmMtPmJ1ZmZlciwgZGVzY3JpcHRvcl9sZW5ndGgpOwo+ICsgICAgICAgIC8qCj4g KyAgICAgICAgICogc2tpcDoKPiArICAgICAgICAgKiAtIHZpZGVvX3Jlc29sdXRpb24KPiArICAg ICAgICAgKiAtIHZpZGVvX2FzcGVjdF9yYXRpbwo+ICsgICAgICAgICAqIC0gdmlkZW9fc2Nhbl9m bGFnCj4gKyAgICAgICAgICogLSByZXNlcnZlZAo+ICsgICAgICAgICAqIC0gdmlkZW9fZnJhbWVf cmF0ZQo+ICsgICAgICAgICAqIC0gY29tcG9uZW50X3RhZwo+ICsgICAgICAgICAqIC0gdmlkZW9f dHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNzCj4gKyAgICAgICAgICogLSByZXNlcnZlZAo+ICsgICAg ICAgICAqLwo+ICsgICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoJm5nYmMsICg0ICsgNCArIDEgKyAy ICsgNSArIDE2ICsgNCArIDQpIC8gOCk7Cj4gKwo+ICsgICAgICAgIGlmIChieXRlc3RyZWFtMl9n ZXRfYnl0ZXNfbGVmdCgmbmdiYykgPCAzKQo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9J TlZBTElEREFUQTsKPiArICAgICAgICBieXRlc3RyZWFtMl9nZXRfYnVmZmVydSgmbmdiYywgbGFu Z3VhZ2VfY29kZSwgMyk7Cj4gKyAgICAgICAgbGFuZ3VhZ2VfY29kZVszXSA9ICdcMCc7Cj4gKyAg ICB9Cj4gKyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIGRlc2NyaXB0b3JfbGVuZ3RoKTsKPiAr Cj4gKyAgICBpZiAoc3RyZWFtID09IE5VTEwpIHJldHVybiAwOwo+ICsgICAgcmV0dXJuIGF2X2Rp Y3Rfc2V0KCZzdHJlYW0tPm1ldGFkYXRhLCAibGFuZ3VhZ2UiLCBsYW5ndWFnZV9jb2RlLCAwKTsK PiArfQo+ICsKPiArc3RhdGljIGludAo+ICtwYXJzZV9taF9hdWRpb19jb21wb25lbnRfZGVzY3Jp cHRvcihBVlN0cmVhbSAqc3RyZWFtLCBHZXRCeXRlQ29udGV4dCAqZ2JjKQo+ICt7Cj4gKyAgICB1 aW50OF90IGRlc2NyaXB0b3JfbGVuZ3RoOwo+ICsgICAgdWludDhfdCBzdHJlYW1fY29udGVudDsK PiArICAgIHVpbnQ4X3Qgc3RyZWFtX3R5cGU7Cj4gKyAgICB1aW50OF90IGxhbmd1YWdlX2NvZGVb NF07Cj4gKwo+ICsgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCAoMTYg KyA4KSAvIDgpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICBp ZiAoYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYykgIT0gTUhfQVVESU9fQ09NUE9ORU5UX0RFU0NS SVBUT1IpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICBkZXNj cmlwdG9yX2xlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpOwo+ICsKPiArICAgIGlm IChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgZGVzY3JpcHRvcl9sZW5ndGgpCj4g KyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICB7Cj4gKyAgICAgICAg dWludDhfdCBieXRlOwo+ICsgICAgICAgIGJvb2wgRVNfbXVsdGlfbGluZ3VhbF9mbGFnOwo+ICsK PiArICAgICAgICBHZXRCeXRlQ29udGV4dCBuZ2JjOwo+ICsgICAgICAgIGJ5dGVzdHJlYW0yX2lu aXQoJm5nYmMsIGdiYy0+YnVmZmVyLCBkZXNjcmlwdG9yX2xlbmd0aCk7Cj4gKwo+ICsgICAgICAg IGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPAo+ICsgICAgICAgICAgICAo NCArIDQgKyA4ICsgMTYgKyA4ICsgOCArIDEgKyAxICsgMiArIDMgKyAxICsgMjQpIC8gOCkKPiAr ICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKwo+ICsgICAgICAgIGJ5 dGUgICAgICAgICAgID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KCZuZ2JjKTsKPiArICAgICAgICBz dHJlYW1fY29udGVudCA9IGJ5dGUgJiAwYjExMTE7Cj4gKwo+ICsgICAgICAgIC8qCj4gKyAgICAg ICAgICogc2tpcDoKPiArICAgICAgICAgKiAtIGNvbXBvbmVudF90eXBlCj4gKyAgICAgICAgICog LSBjb21wb25lbnRfdGFnCj4gKyAgICAgICAgICovCj4gKyAgICAgICAgYnl0ZXN0cmVhbTJfc2tp cHUoJm5nYmMsIDMpOwo+ICsgICAgICAgIHN0cmVhbV90eXBlID0gYnl0ZXN0cmVhbTJfZ2V0X2J5 dGV1KCZuZ2JjKTsKPiArCj4gKyAgICAgICAgLy8gc2tpcDogc2ltdWxjYXN0X2dyb3VwX3RhZwo+ ICsgICAgICAgIGJ5dGVzdHJlYW0yX3NraXB1KCZuZ2JjLCAxKTsKPiArCj4gKyAgICAgICAgYnl0 ZSAgICAgICAgICAgICAgICAgID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KCZuZ2JjKTsKPiArICAg ICAgICBFU19tdWx0aV9saW5ndWFsX2ZsYWcgPSBieXRlID4+IDc7Cj4gKwo+ICsgICAgICAgIGJ5 dGVzdHJlYW0yX2dldF9idWZmZXJ1KCZuZ2JjLCBsYW5ndWFnZV9jb2RlLCAzKTsKPiArICAgICAg ICBsYW5ndWFnZV9jb2RlWzNdID0gJ1wwJzsKPiArCj4gKyAgICAgICAgaWYgKEVTX211bHRpX2xp bmd1YWxfZmxhZykgewo+ICsgICAgICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xl ZnQoJm5nYmMpIDwgMykKPiArICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSURE QVRBOwo+ICsgICAgICAgICAgICBieXRlc3RyZWFtMl9za2lwdSgmbmdiYywgMyk7Cj4gKyAgICAg ICAgfQo+ICsgICAgfQo+ICsgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCBkZXNjcmlwdG9yX2xl bmd0aCk7Cj4gKwo+ICsgICAgaWYgKHN0cmVhbSA9PSBOVUxMKSByZXR1cm4gMDsKPiArCj4gKyAg ICBzd2l0Y2ggKHN0cmVhbV9jb250ZW50KSB7Cj4gKyAgICBjYXNlIDB4MzoKPiArICAgICAgICBz d2l0Y2ggKHN0cmVhbV90eXBlKSB7Cj4gKyAgICAgICAgY2FzZSAweDExOgo+ICsgICAgICAgICAg ICBzdHJlYW0tPmNvZGVjcGFyLT5jb2RlY19pZCA9IEFWX0NPREVDX0lEX0FBQ19MQVRNOwo+ICsg ICAgICAgICAgICBicmVhazsKPiArICAgICAgICBjYXNlIDB4MWM6Cj4gKyAgICAgICAgICAgIHN0 cmVhbS0+Y29kZWNwYXItPmNvZGVjX2lkID0gQVZfQ09ERUNfSURfQUFDOwo+ICsgICAgICAgICAg ICBicmVhazsKPiArICAgICAgICB9Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBjYXNlIDB4NDoK PiArICAgICAgICBzdHJlYW0tPmNvZGVjcGFyLT5jb2RlY19pZCA9IEFWX0NPREVDX0lEX01QNEFM UzsKPiArICAgICAgICBicmVhazsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gYXZfZGljdF9z ZXQoJnN0cmVhbS0+bWV0YWRhdGEsICJsYW5ndWFnZSIsIGxhbmd1YWdlX2NvZGUsIDApOwo+ICt9 Cj4gKwo+ICsjZGVmaW5lIE1BWF9OVU1fVElNRVNUQU1QX0RFU0NSSVBUT1IgMzIKPiArI2RlZmlu ZSBESUZGKGEsIGIpICgoYSkgPiAoYikgPyAoKGEpIC0gKGIpKSA6ICgoYikgLSAoYSkpKQo+ICsK PiArc3RhdGljIGludAo+ICtwYXJzZV9tcHVfdGltZXN0YW1wX2Rlc2NyaXB0b3Ioc3RydWN0IFN0 cmVhbXMgKnN0cmVhbXMsIEdldEJ5dGVDb250ZXh0Cj4gKmdiYykKPiArewo+ICsgICAgdWludDhf dCBkZXNjcmlwdG9yX2xlbmd0aDsKPiArCj4gKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVz X2xlZnQoZ2JjKSA8ICgxNiArIDgpIC8gOCkKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZB TElEREFUQTsKPiArCj4gKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYykgIT0gTVBV X1RJTUVTVEFNUF9ERVNDUklQVE9SKQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSURE QVRBOwo+ICsgICAgZGVzY3JpcHRvcl9sZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoZ2Jj KTsKPiArCj4gKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IGRlc2Ny aXB0b3JfbGVuZ3RoKQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsg ICAgewo+ICsgICAgICAgIEdldEJ5dGVDb250ZXh0IG5nYmM7Cj4gKyAgICAgICAgYnl0ZXN0cmVh bTJfaW5pdCgmbmdiYywgZ2JjLT5idWZmZXIsIGRlc2NyaXB0b3JfbGVuZ3RoKTsKPiArCj4gKyAg ICAgICAgd2hpbGUgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2JjKSA+IDApIHsKPiAr ICAgICAgICAgICAgdWludDY0X3QgbXB1X3NlcV9udW07Cj4gKyAgICAgICAgICAgIGludDY0X3Qg IG1wdV9wcmVzZW50YXRpb25fdGltZTsKPiArICAgICAgICAgICAgc2l6ZV90ICAgaTsKPiArCj4g KyAgICAgICAgICAgIHN0cnVjdCBNUFVUaW1lc3RhbXBEZXNjcmlwdG9yICpkZXNjOwo+ICsKPiAr ICAgICAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2JjKSA8ICgzMiAr IDY0KSAvIDgpCj4gKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsK PiArICAgICAgICAgICAgbXB1X3NlcV9udW0gPSBieXRlc3RyZWFtMl9nZXRfYmUzMnUoJm5nYmMp Owo+ICsgICAgICAgICAgICBtcHVfcHJlc2VudGF0aW9uX3RpbWUgPQo+ICsgICAgICAgICAgICAg ICAgZmZfcGFyc2VfbnRwX3RpbWUoYnl0ZXN0cmVhbTJfZ2V0X2JlNjR1KCZuZ2JjKSkgLQo+IE5U UF9PRkZTRVRfVVM7Cj4gKwo+ICsgICAgICAgICAgICBpZiAobXB1X3NlcV9udW0gPj0gc3RyZWFt cy0+bGFzdF9zZXF1ZW5jZV9udW1iZXIpIHsKPiArICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7 IGkgPCBzdHJlYW1zLT5udW1fdGltZXN0YW1wX2Rlc2NyaXB0b3JzOyArK2kpCj4gKyAgICAgICAg ICAgICAgICAgICAgaWYgKHN0cmVhbXMtPnRpbWVzdGFtcF9kZXNjcmlwdG9yW2ldLnNlcV9udW0g PT0KPiArICAgICAgICAgICAgICAgICAgICAgICAgbXB1X3NlcV9udW0pIHsKPiArICAgICAgICAg ICAgICAgICAgICAgICAgZGVzYyA9IHN0cmVhbXMtPnRpbWVzdGFtcF9kZXNjcmlwdG9yICsgaTsK PiArICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlbmQyOwo+ICsgICAgICAgICAgICAgICAg ICAgIH0KPiArCj4gKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RyZWFtcy0+bnVt X3RpbWVzdGFtcF9kZXNjcmlwdG9yczsgKytpKQo+ICsgICAgICAgICAgICAgICAgICAgIGlmIChz dHJlYW1zLT50aW1lc3RhbXBfZGVzY3JpcHRvcltpXS5zZXFfbnVtIDwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgc3RyZWFtcy0+bGFzdF9zZXF1ZW5jZV9udW1iZXIpIHsKPiArICAgICAgICAg ICAgICAgICAgICAgICAgZGVzYyA9IHN0cmVhbXMtPnRpbWVzdGFtcF9kZXNjcmlwdG9yICsgaTsK PiArICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlbmQxOwo+ICsgICAgICAgICAgICAgICAg ICAgIH0KPiArCj4gKyAgICAgICAgICAgICAgICBpZiAoc3RyZWFtcy0+bnVtX3RpbWVzdGFtcF9k ZXNjcmlwdG9ycyArIDEgPgo+ICsgICAgICAgICAgICAgICAgICAgIE1BWF9OVU1fVElNRVNUQU1Q X0RFU0NSSVBUT1IpIHsKPiArICAgICAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGFsbCBkZXNj cmlwdG9ycyBsYXJnZXIgdGhhbiB0aGUgY3VycmVudAo+IHNlcXVlbmNlIG51bWJlcgo+ICsgICAg ICAgICAgICAgICAgICAgIC8vIHdlIGNhbid0IGFkZCBtb3JlLCBzbyB3ZSBzaG91bGQgZXZpY3Qg dGhlIG9uZSB3aXRoCj4gdGhlIGxhcmdlc3QgZGlzdGFuY2UKPiArICAgICAgICAgICAgICAgICAg ICB1aW50NjRfdCBtYXhfZGlzdCA9IDA7Cj4gKyAgICAgICAgICAgICAgICAgICAgZm9yIChpID0g MDsgaSA8IHN0cmVhbXMtPm51bV90aW1lc3RhbXBfZGVzY3JpcHRvcnM7Cj4gKytpKQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoRElGRigKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJlYW1zLT50aW1lc3RhbXBfZGVzY3JpcHRvcltpXS5zZXFfbnVtLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wdV9zZXFfbnVtKSA+IG1heF9kaXN0KSB7Cj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjICAgICA9IHN0cmVhbXMtPnRpbWVzdGFt cF9kZXNjcmlwdG9yICsgaTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9kaXN0 ID0gRElGRigKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1zLT50aW1l c3RhbXBfZGVzY3JpcHRvcltpXS5zZXFfbnVtLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1wdV9zZXFfbnVtKTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgfQo+ICsgICAg ICAgICAgICAgICAgICAgIGF2X2Fzc2VydDEoZGVzYyAhPSBOVUxMKTsgLy8gc2hvdWxkIG5ldmVy IGZhaWwKPiArICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDE7Cj4gKyAgICAgICAgICAgICAg ICB9Cj4gKwo+ICsgICAgICAgICAgICAgICAgZGVzYyA9IGF2X2R5bmFycmF5Ml9hZGQoCj4gKyAg ICAgICAgICAgICAgICAgICAgKHZvaWQgKiopICZzdHJlYW1zLT50aW1lc3RhbXBfZGVzY3JpcHRv ciwKPiArICAgICAgICAgICAgICAgICAgICAmc3RyZWFtcy0+bnVtX3RpbWVzdGFtcF9kZXNjcmlw dG9ycywKPiArICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IE1QVVRpbWVzdGFtcERl c2NyaXB0b3IpLCBOVUxMKTsKPiArICAgICAgICAgICAgICAgIGlmIChkZXNjID09IE5VTEwpIHJl dHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKwo+ICsgICAgICAgICAgICAgICAgZW5kMToKPiArICAg ICAgICAgICAgICAgIGRlc2MtPnNlcV9udW0gICAgICAgICAgID0gbXB1X3NlcV9udW07Cj4gKyAg ICAgICAgICAgICAgICBlbmQyOgo+ICsgICAgICAgICAgICAgICAgZGVzYy0+cHJlc2VudGF0aW9u X3RpbWUgPSBtcHVfcHJlc2VudGF0aW9uX3RpbWU7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAg ICB9Cj4gKyAgICB9Cj4gKyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIGRlc2NyaXB0b3JfbGVu Z3RoKTsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBwYXJzZV9t cHVfZXh0ZW5kZWRfdGltZXN0YW1wX2Rlc2NyaXB0b3IoCj4gKyAgICBzdHJ1Y3QgU3RyZWFtcyAq c3RyZWFtcywgR2V0Qnl0ZUNvbnRleHQgKmdiYykKPiArewo+ICsgICAgdWludDhfdCBkZXNjcmlw dG9yX2xlbmd0aDsKPiArCj4gKyAgICBBVlN0cmVhbSAqc3RyZWFtID0gc3RyZWFtcy0+c3RyZWFt Owo+ICsKPiArICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgKDE2ICsg OCkgLyA4KQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgaWYg KGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpICE9IE1QVV9FWFRFTkRFRF9USU1FU1RBTVBfREVT Q1JJUFRPUikKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgIGRl c2NyaXB0b3JfbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYyk7Cj4gKwo+ICsgICAg aWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCBkZXNjcmlwdG9yX2xlbmd0aCkK PiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgIHsKPiArICAgICAg ICB1aW50OF90ICBieXRlOwo+ICsgICAgICAgIHVpbnQ4X3QgIHB0c19vZmZzZXRfdHlwZTsKPiAr ICAgICAgICBib29sIHRpbWVzY2FsZV9mbGFnOwo+ICsgICAgICAgIHVpbnQxNl90IGRlZmF1bHRf cHRzX29mZnNldCA9IDA7Cj4gKwo+ICsgICAgICAgIEdldEJ5dGVDb250ZXh0IG5nYmM7Cj4gKyAg ICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgmbmdiYywgZ2JjLT5idWZmZXIsIGRlc2NyaXB0b3JfbGVu Z3RoKTsKPiArCj4gKyAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2Jj KSA8ICg1ICsgMiArIDEpIC8gOCkKPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7Cj4gKyAgICAgICAgYnl0ZSAgICAgICAgICAgID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGUo Jm5nYmMpOwo+ICsgICAgICAgIHB0c19vZmZzZXRfdHlwZSA9IChieXRlID4+IDEpICYgMGIxMTsK PiArICAgICAgICB0aW1lc2NhbGVfZmxhZyAgPSBieXRlICYgMTsKPiArCj4gKyAgICAgICAgaWYg KHRpbWVzY2FsZV9mbGFnKSB7Cj4gKyAgICAgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0 ZXNfbGVmdCgmbmdiYykgPCA0KQo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5W QUxJRERBVEE7Cj4gKyAgICAgICAgICAgIHN0cmVhbS0+dGltZV9iYXNlLm51bSA9IDE7Cj4gKyAg ICAgICAgICAgIHN0cmVhbS0+dGltZV9iYXNlLmRlbiA9IGJ5dGVzdHJlYW0yX2dldF9iZTMydSgm bmdiYyk7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBpZiAocHRzX29mZnNldF90eXBlID09 IDEpIHsKPiArICAgICAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2Jj KSA8IDIpCj4gKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiAr ICAgICAgICAgICAgZGVmYXVsdF9wdHNfb2Zmc2V0ID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KCZu Z2JjKTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIHdoaWxlIChieXRlc3RyZWFtMl9nZXRf Ynl0ZXNfbGVmdCgmbmdiYykgPiAwKSB7Cj4gKyAgICAgICAgICAgIHNpemVfdCAgIGk7Cj4gKyAg ICAgICAgICAgIHVpbnQ4X3QgIG51bV9vZl9hdTsKPiArICAgICAgICAgICAgdWludDE2X3QgZGVj b2RpbmdfdGltZV9vZmZzZXQ7Cj4gKyAgICAgICAgICAgIHVpbnQ2NF90IG1wdV9zZXFfbnVtOwo+ ICsKPiArICAgICAgICAgICAgc3RydWN0IE1QVUV4dGVuZGVkVGltZXN0YW1wRGVzY3JpcHRvciAq ZGVzYyA9IE5VTEw7Cj4gKwo+ICsgICAgICAgICAgICBpZiAocHRzX29mZnNldF90eXBlID09IDAp Cj4gKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7ICAvLyB3ZSBk b24ndCBrbm93IGhvdyB0bwo+IGhhbmRsZSB0aGlzCj4gKwo+ICsgICAgICAgICAgICBpZiAoYnl0 ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoJm5nYmMpIDwgKDMyICsgMiArIDYgKyAxNiArIDgpCj4g LyA4KQo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAg ICAgICAgICAgIG1wdV9zZXFfbnVtID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMzJ1KCZuZ2JjKTsKPiAr ICAgICAgICAgICAgLy8gc2tpcDogbGVhcF9pbmRpY2F0b3IKPiArICAgICAgICAgICAgYnl0ZXN0 cmVhbTJfc2tpcCgmbmdiYywgKDIgKyA2KSAvIDgpOwo+ICsgICAgICAgICAgICBkZWNvZGluZ190 aW1lX29mZnNldCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dSgmbmdiYyk7Cj4gKyAgICAgICAgICAg IG51bV9vZl9hdSAgICAgICAgICAgID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KCZuZ2JjKTsKPiAr Cj4gKyAgICAgICAgICAgIGlmIChtcHVfc2VxX251bSA+PSBzdHJlYW1zLT5sYXN0X3NlcXVlbmNl X251bWJlcikgewo+ICsgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0cmVhbXMtPm51 bV9leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3JzOwo+ICsraSkKPiArICAgICAgICAgICAgICAgICAg ICBpZiAoc3RyZWFtcy0+ZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yW2ldLnNlcV9udW0gPT0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgbXB1X3NlcV9udW0pIHsKPiArICAgICAgICAgICAgICAg ICAgICAgICAgZGVzYyA9IHN0cmVhbXMtPmV4dF90aW1lc3RhbXBfZGVzY3JpcHRvciArIGk7Cj4g KyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kMjsKPiArICAgICAgICAgICAgICAgICAg ICB9Cj4gKwo+ICsgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0cmVhbXMtPm51bV9l eHRfdGltZXN0YW1wX2Rlc2NyaXB0b3JzOwo+ICsraSkKPiArICAgICAgICAgICAgICAgICAgICBp ZiAoc3RyZWFtcy0+ZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yW2ldLnNlcV9udW0gPAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICBzdHJlYW1zLT5sYXN0X3NlcXVlbmNlX251bWJlcikgewo+ICsg ICAgICAgICAgICAgICAgICAgICAgICBkZXNjID0gc3RyZWFtcy0+ZXh0X3RpbWVzdGFtcF9kZXNj cmlwdG9yICsgaTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlbmQxOwo+ICsgICAg ICAgICAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgICAgICBpZiAoc3RyZWFtcy0+bnVt X2V4dF90aW1lc3RhbXBfZGVzY3JpcHRvcnMgKyAxID4KPiArICAgICAgICAgICAgICAgICAgICBN QVhfTlVNX1RJTUVTVEFNUF9ERVNDUklQVE9SKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgdWlu dDY0X3QgbWF4X2RpZmYgPSAwOwo+ICsgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkg PAo+IHN0cmVhbXMtPm51bV9leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3JzOyArK2kpCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChESUZGKAo+ICsKPiBzdHJlYW1zLT5leHRfdGltZXN0YW1w X2Rlc2NyaXB0b3JbaV0uc2VxX251bSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtcHVfc2VxX251bSkgPiBtYXhfZGlmZikgewo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGVzYyAgICAgPSBzdHJlYW1zLT5leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3IKPiArIGk7Cj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfZGlmZiA9IERJRkYoCj4gKwo+IHN0cmVh bXMtPmV4dF90aW1lc3RhbXBfZGVzY3JpcHRvcltpXS5zZXFfbnVtLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1wdV9zZXFfbnVtKTsKPiArICAgICAgICAgICAgICAgICAgICAg ICAgfQo+ICsgICAgICAgICAgICAgICAgICAgIGF2X2Fzc2VydDEoZGVzYyAhPSBOVUxMKTsKPiAr ICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDE7Cj4gKyAgICAgICAgICAgICAgICB9Cj4gKwo+ ICsgICAgICAgICAgICAgICAgZGVzYyA9IGF2X2R5bmFycmF5Ml9hZGQoCj4gKyAgICAgICAgICAg ICAgICAgICAgKHZvaWQgKiopICZzdHJlYW1zLT5leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3IsCj4g KyAgICAgICAgICAgICAgICAgICAgJnN0cmVhbXMtPm51bV9leHRfdGltZXN0YW1wX2Rlc2NyaXB0 b3JzLAo+ICsgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgTVBVRXh0ZW5kZWRUaW1l c3RhbXBEZXNjcmlwdG9yKSwgTlVMTCk7Cj4gKyAgICAgICAgICAgICAgICBpZiAoZGVzYyA9PSBO VUxMKQo+ICsgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKwo+ ICsgICAgICAgICAgICAgICAgZW5kMToKPiArICAgICAgICAgICAgICAgIGRlc2MtPnNlcV9udW0g ICAgICAgICAgICAgID0gbXB1X3NlcV9udW07Cj4gKyAgICAgICAgICAgICAgICBlbmQyOgo+ICsg ICAgICAgICAgICAgICAgZGVzYy0+ZGVjb2RpbmdfdGltZV9vZmZzZXQgPSBkZWNvZGluZ190aW1l X29mZnNldDsKPiArICAgICAgICAgICAgICAgIGRlc2MtPm51bV9vZl9hdSAgICAgICAgICAgID0g bnVtX29mX2F1Owo+ICsgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICBmb3IgKGkgPSAw OyBpIDwgbnVtX29mX2F1OyArK2kpIHsKPiArICAgICAgICAgICAgICAgIGlmIChieXRlc3RyZWFt Ml9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPCAyKQo+ICsgICAgICAgICAgICAgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgICAgICAgICAgICAgaWYgKGRlc2MgIT0gTlVM TCkKPiArICAgICAgICAgICAgICAgICAgICBkZXNjLT5hdVtpXS5kdHNfcHRzX29mZnNldCA9Cj4g Ynl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KCZuZ2JjKTsKPiArICAgICAgICAgICAgICAgIGVsc2UKPiAr ICAgICAgICAgICAgICAgICAgICBieXRlc3RyZWFtMl9za2lwdSgmbmdiYywgMik7Cj4gKwo+ICsg ICAgICAgICAgICAgICAgaWYgKHB0c19vZmZzZXRfdHlwZSA9PSAyKSB7Cj4gKyAgICAgICAgICAg ICAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2JjKSA8IDIpCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAg ICAgICAgICAgICAgICAgIGlmIChkZXNjICE9IE5VTEwpCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgIGRlc2MtPmF1W2ldLnB0c19vZmZzZXQgPQo+IGJ5dGVzdHJlYW0yX2dldF9iZTE2dSgmbmdi Yyk7Cj4gKyAgICAgICAgICAgICAgICAgICAgZWxzZQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICBieXRlc3RyZWFtMl9za2lwdSgmbmdiYywgMik7Cj4gKyAgICAgICAgICAgICAgICB9IGVsc2Ug aWYgKGRlc2MgIT0gTlVMTCkgewo+ICsgICAgICAgICAgICAgICAgICAgIGRlc2MtPmF1W2ldLnB0 c19vZmZzZXQgPSBkZWZhdWx0X3B0c19vZmZzZXQ7Cj4gKyAgICAgICAgICAgICAgICB9Cj4gKyAg ICAgICAgICAgIH0KPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKyAgICBieXRlc3RyZWFtMl9za2lw dShnYmMsIGRlc2NyaXB0b3JfbGVuZ3RoKTsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsK PiArc3RhdGljIGludAo+ICtwYXJzZV9hZGRpdGlvbmFsX2FyaWJfc3VidGl0bGVfaW5mbyhBVlN0 cmVhbSAqc3RyZWFtLCBHZXRCeXRlQ29udGV4dCAqZ2JjKQo+ICt7Cj4gKyAgICBib29sICAgIHN0 YXJ0X21wdV9zZXF1ZW5jZV9udW1iZXJfZmxhZzsKPiArICAgIGNoYXIgICAgbGFuZ3VhZ2VfY29k ZVs0XTsKPiArICAgIHVpbnQ4X3Qgc3VidGl0bGVfZm9ybWF0Owo+ICsKPiArICAgIGlmIChieXRl c3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwKPiArICAgICAgICAoOCArIDQgKyAxICsgMyAr IDI0ICsgMiArIDQgKyAyICsgNCArIDQgKyA0ICsgNCkgLyA4KQo+ICsgICAgICAgIHJldHVybiBB VkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgLy8gc2tpcDogc3VidGl0bGVfdGFnCj4gKyAgICBi eXRlc3RyZWFtMl9za2lwdShnYmMsIDEpOwo+ICsgICAgc3RhcnRfbXB1X3NlcXVlbmNlX251bWJl cl9mbGFnID0gKGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpID4+IDMpICYKPiAxOwo+ICsgICAg Ynl0ZXN0cmVhbTJfZ2V0X2J1ZmZlcnUoZ2JjLCBsYW5ndWFnZV9jb2RlLCAzKTsKPiArICAgIGxh bmd1YWdlX2NvZGVbM10gPSAnXDAnOwo+ICsgICAgc3VidGl0bGVfZm9ybWF0ID0gKGJ5dGVzdHJl YW0yX2dldF9ieXRldShnYmMpID4+IDIpICYgMGIxMTExOwo+ICsgICAgLyoKPiArICAgICAqIHNr aXA6Cj4gKyAgICAgKiAtIFRNRAo+ICsgICAgICogLSBETUYKPiArICAgICAqIC0gcmVzb2x1dGlv bgo+ICsgICAgICogLSBjb21wcmVzc2lvbl90eXBlCj4gKyAgICAgKi8KPiArICAgIGJ5dGVzdHJl YW0yX3NraXB1KGdiYywgKDQgKyA0ICsgNCArIDQpIC8gOCk7Cj4gKwo+ICsgICAgaWYgKHN0YXJ0 X21wdV9zZXF1ZW5jZV9udW1iZXJfZmxhZykKPiArICAgICAgICBieXRlc3RyZWFtMl9za2lwKGdi YywgMzIpOwo+ICsKPiArICAgIHN3aXRjaCAoc3VidGl0bGVfZm9ybWF0KSB7Cj4gKyAgICBjYXNl IDBiMDAwMDoKPiArICAgICAgICBzdHJlYW0tPmNvZGVjcGFyLT5jb2RlY19pZCA9IEFWX0NPREVD X0lEX1RUTUw7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIGF2 X2RpY3Rfc2V0KCZzdHJlYW0tPm1ldGFkYXRhLCAibGFuZ3VhZ2UiLCBsYW5ndWFnZV9jb2RlLCAw KTsKPiArfQo+ICsKPiArc3RhdGljIGludAo+ICtwYXJzZV9taF9kYXRhX2NvbXBvbmVudF9kZXNj cmlwdG9yKEFWU3RyZWFtICpzdHJlYW0sIEdldEJ5dGVDb250ZXh0ICpnYmMpCj4gK3sKPiArICAg IHVpbnQ4X3QgZGVzY3JpcHRvcl9sZW5ndGg7Cj4gKwo+ICsgICAgaWYgKGJ5dGVzdHJlYW0yX2dl dF9ieXRlc19sZWZ0KGdiYykgPCAoMTYgKyA4KSAvIDgpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7Cj4gKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYykgIT0g TUhfREFUQV9DT01QT05FTlRfREVTQ1JJUFRPUikKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9J TlZBTElEREFUQTsKPiArICAgIGRlc2NyaXB0b3JfbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2J5 dGV1KGdiYyk7Cj4gKwo+ICsgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykg PCBkZXNjcmlwdG9yX2xlbmd0aCkKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFU QTsKPiArICAgIHsKPiArICAgICAgICBHZXRCeXRlQ29udGV4dCBuZ2JjOwo+ICsgICAgICAgIGJ5 dGVzdHJlYW0yX2luaXQoJm5nYmMsIGdiYy0+YnVmZmVyLCBkZXNjcmlwdG9yX2xlbmd0aCk7Cj4g KyAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCBkZXNjcmlwdG9yX2xlbmd0aCk7Cj4gKwo+ ICsgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPCAxNiAvIDgp Cj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgICAgIHN3 aXRjaCAoYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KCZuZ2JjKSkgewo+ICsgICAgICAgIGNhc2UgMHgw MDIwOiAvLyBhZGRpdGlvbmFsIEFSSUIgc3VidGl0bGUgaW5mbyAoVGFibGUgNy03NCwgQVJJQgo+ IFNURC1CNjAsIFZlcnNpb24gMS4xNC1FMSkKPiArICAgICAgICAgICAgcmV0dXJuIHBhcnNlX2Fk ZGl0aW9uYWxfYXJpYl9zdWJ0aXRsZV9pbmZvKHN0cmVhbSwgJm5nYmMpOwo+ICsgICAgICAgIH0K PiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludAo+ICtw YXJzZV9zdHJlYW1faWRlbnRpZmllcl9kZXNjcmlwdG9yKEFWU3RyZWFtICpzdHJlYW0sIEdldEJ5 dGVDb250ZXh0ICpnYmMpCj4gK3sKPiArICAgIHVpbnQ4X3QgZGVzY3JpcHRvcl9sZW5ndGg7Cj4g Kwo+ICsgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCAoMTYgKyA4KSAv IDgpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICBpZiAoYnl0 ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYykgIT0gTUhfU1RSRUFNX0lERU5USUZJRVJfREVTQ1JJUFRP UikKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgIGRlc2NyaXB0 b3JfbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYyk7Cj4gKwo+ICsgICAgaWYgKGJ5 dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCBkZXNjcmlwdG9yX2xlbmd0aCkKPiArICAg ICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgIHsKPiArICAgICAgICAvLyBu byBuZWVkIGZvciBub3cKPiArICAgIH0KPiArICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgZGVz Y3JpcHRvcl9sZW5ndGgpOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IHBhcnNlX21wdF9kZXNjcmlwdG9yKHN0cnVjdCBTdHJlYW1zICpzdHJlYW1zLCBHZXRCeXRl Q29udGV4dAo+ICpnYmMpCj4gK3sKPiArICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVm dChnYmMpIDwgMykKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAg IHN3aXRjaCAoYnl0ZXN0cmVhbTJfcGVla19iZTE2dShnYmMpKSB7Cj4gKyAgICBjYXNlIE1QVV9U SU1FU1RBTVBfREVTQ1JJUFRPUjoKPiArICAgICAgICByZXR1cm4gcGFyc2VfbXB1X3RpbWVzdGFt cF9kZXNjcmlwdG9yKHN0cmVhbXMsIGdiYyk7Cj4gKyAgICBjYXNlIFZJREVPX0NPTVBPTkVOVF9E RVNDUklQVE9SOgo+ICsgICAgICAgIHJldHVybiBwYXJzZV92aWRlb19jb21wb25lbnRfZGVzY3Jp cHRvcihzdHJlYW1zLT5zdHJlYW0sIGdiYyk7Cj4gKyAgICBjYXNlIE1IX1NUUkVBTV9JREVOVElG SUVSX0RFU0NSSVBUT1I6Cj4gKyAgICAgICAgcmV0dXJuIHBhcnNlX3N0cmVhbV9pZGVudGlmaWVy X2Rlc2NyaXB0b3Ioc3RyZWFtcy0+c3RyZWFtLCBnYmMpOwo+ICsgICAgY2FzZSBNSF9BVURJT19D T01QT05FTlRfREVTQ1JJUFRPUjoKPiArICAgICAgICByZXR1cm4gcGFyc2VfbWhfYXVkaW9fY29t cG9uZW50X2Rlc2NyaXB0b3Ioc3RyZWFtcy0+c3RyZWFtLCBnYmMpOwo+ICsgICAgY2FzZSBNSF9E QVRBX0NPTVBPTkVOVF9ERVNDUklQVE9SOgo+ICsgICAgICAgIHJldHVybiBwYXJzZV9taF9kYXRh X2NvbXBvbmVudF9kZXNjcmlwdG9yKHN0cmVhbXMtPnN0cmVhbSwgZ2JjKTsKPiArICAgIGNhc2Ug TVBVX0VYVEVOREVEX1RJTUVTVEFNUF9ERVNDUklQVE9SOgo+ICsgICAgICAgIHJldHVybiBwYXJz ZV9tcHVfZXh0ZW5kZWRfdGltZXN0YW1wX2Rlc2NyaXB0b3Ioc3RyZWFtcywgZ2JjKTsKPiArICAg IGNhc2UgQUNDRVNTX0NPTlRST0xfREVTQ1JJUFRPUjoKPiArICAgICAgICBieXRlc3RyZWFtMl9z a2lwdShnYmMsIDIpOwo+ICsgICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoZ2JjLCBieXRlc3RyZWFt Ml9nZXRfYnl0ZXUoZ2JjKSk7Cj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKyAgICB9Cj4gKyAgICBh dl9sb2coc3RyZWFtcy0+c3RyZWFtLCBBVl9MT0dfSU5GTywgIlVua25vd24gZGVzY3JpcHRvcjog MHglMDR4XG4iLAo+ICsgICAgICAgICAgIGJ5dGVzdHJlYW0yX3BlZWtfYmUxNnUoZ2JjKSk7Cj4g KyAgICByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg cGFyc2VfbWhfc2hvcnRfZXZlbnRfZGVzY3JpcHRvcigKPiArICAgIE1NVFBDb250ZXh0ICpjdHgs IEdldEJ5dGVDb250ZXh0ICpnYmMpCj4gK3sKPiArICAgIHVpbnQxNl90IGRlc2NyaXB0b3JfbGVu Z3RoOwo+ICsKPiArICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgKDE2 ICsgMTYpIC8gOCkKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAg IGlmIChieXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2JjKSAhPSBNSF9TSE9SVF9FVkVOVF9ERVNDUklQ VE9SKQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgZGVzY3Jp cHRvcl9sZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2JjKTsKPiArCj4gKyAgICBpZiAo Ynl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IGRlc2NyaXB0b3JfbGVuZ3RoKQo+ICsg ICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgewo+ICsgICAgICAgIHVp bnQ4X3QgIGxhbmd1YWdlX2NvZGVbNF07Cj4gKyAgICAgICAgdWludDhfdCAgZXZlbnRfbmFtZV9s ZW5ndGg7Cj4gKyAgICAgICAgdWludDE2X3QgdGV4dF9sZW5ndGg7Cj4gKyAgICAgICAgY2hhciAg ICAgKmV2ZW50X25hbWUsICp0ZXh0Owo+ICsKPiArICAgICAgICBHZXRCeXRlQ29udGV4dCBuZ2Jj Owo+ICsgICAgICAgIGJ5dGVzdHJlYW0yX2luaXQoJm5nYmMsIGdiYy0+YnVmZmVyLCBkZXNjcmlw dG9yX2xlbmd0aCk7Cj4gKwo+ICsgICAgICAgIGJ5dGVzdHJlYW0yX2dldF9idWZmZXIoJm5nYmMs IGxhbmd1YWdlX2NvZGUsIDMpOwo+ICsgICAgICAgIGxhbmd1YWdlX2NvZGVbM10gPSAnXDAnOwo+ ICsKPiArICAgICAgICBldmVudF9uYW1lX2xlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9ieXRlKCZu Z2JjKTsKPiArICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoJm5nYmMpIDwg ZXZlbnRfbmFtZV9sZW5ndGgpCj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSURE QVRBOwo+ICsgICAgICAgIGV2ZW50X25hbWUgPSBhdl9zdHJuZHVwKG5nYmMuYnVmZmVyLCBldmVu dF9uYW1lX2xlbmd0aCk7Cj4gKyAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcHUoJm5nYmMsIGV2ZW50 X25hbWVfbGVuZ3RoKTsKPiArCj4gKyAgICAgICAgYXZfZGljdF9zZXQoJmN0eC0+cHJvZ3JhbS0+ bWV0YWRhdGEsICJsYW5ndWFnZSIsIGxhbmd1YWdlX2NvZGUsCj4gMCk7Cj4gKyAgICAgICAgYXZf ZGljdF9zZXQoJmN0eC0+cHJvZ3JhbS0+bWV0YWRhdGEsICJ0aXRsZSIsIGV2ZW50X25hbWUsCj4g KyAgICAgICAgICAgICAgICAgICAgQVZfRElDVF9ET05UX1NUUkRVUF9WQUwpOwo+ICsKPiArICAg ICAgICB0ZXh0X2xlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dSgmbmdiYyk7Cj4gKyAgICAg ICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2JjKSA8IHRleHRfbGVuZ3RoKQo+ ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgICAgICB0ZXh0 ID0gYXZfc3RybmR1cChuZ2JjLmJ1ZmZlciwgdGV4dF9sZW5ndGgpOwo+ICsgICAgICAgIGJ5dGVz dHJlYW0yX3NraXB1KCZuZ2JjLCB0ZXh0X2xlbmd0aCk7Cj4gKwo+ICsgICAgICAgIGF2X2RpY3Rf c2V0KCZjdHgtPnByb2dyYW0tPm1ldGFkYXRhLCAiZGVzY3JpcHRpb24iLCB0ZXh0LAo+ICsgICAg ICAgICAgICAgICAgICAgIEFWX0RJQ1RfRE9OVF9TVFJEVVBfVkFMKTsKPiArICAgIH0KPiArICAg IGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgZGVzY3JpcHRvcl9sZW5ndGgpOwo+ICsKPiArICAgIHJl dHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHBhcnNlX21oX2VpdF9kZXNjcmlwdG9yKE1N VFBDb250ZXh0ICpjdHgsIEdldEJ5dGVDb250ZXh0ICpnYmMpCj4gK3sKPiArICAgIGlmIChieXRl c3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgMykKPiArICAgICAgICByZXR1cm4gQVZFUlJP Ul9JTlZBTElEREFUQTsKPiArICAgIHN3aXRjaCAoYnl0ZXN0cmVhbTJfcGVla19iZTE2dShnYmMp KSB7Cj4gKyAgICBjYXNlIFZJREVPX0NPTVBPTkVOVF9ERVNDUklQVE9SOgo+ICsgICAgICAgIHJl dHVybiBwYXJzZV92aWRlb19jb21wb25lbnRfZGVzY3JpcHRvcihOVUxMLCBnYmMpOwo+ICsgICAg Y2FzZSBNSF9BVURJT19DT01QT05FTlRfREVTQ1JJUFRPUjoKPiArICAgICAgICByZXR1cm4gcGFy c2VfbWhfYXVkaW9fY29tcG9uZW50X2Rlc2NyaXB0b3IoTlVMTCwgZ2JjKTsKPiArICAgIGNhc2Ug TUhfU0hPUlRfRVZFTlRfREVTQ1JJUFRPUjoKPiArICAgICAgICByZXR1cm4gcGFyc2VfbWhfc2hv cnRfZXZlbnRfZGVzY3JpcHRvcihjdHgsIGdiYyk7Cj4gKyAgICBjYXNlIE1IX0NPTlRFTlRfREVT Q1JJUFRPUjoKPiArICAgIGNhc2UgQ09OVEVOVF9DT1BZX0NPTlRST0xfREVTQ1JJUFRPUjoKPiAr ICAgIGNhc2UgQ09OVEVOVF9VU0FHRV9DT05UUk9MX0RFU0NSSVBUT1I6Cj4gKyAgICBjYXNlIE1V TFRJTUVESUFfU0VSVklDRV9JTkZPUk1BVElPTl9ERVNDUklQVE9SOgo+ICsgICAgICAgIGJ5dGVz dHJlYW0yX3NraXB1KGdiYywgMik7Cj4gKyAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcChnYmMsIGJ5 dGVzdHJlYW0yX2dldF9ieXRldShnYmMpKTsKPiArICAgICAgICByZXR1cm4gMDsKPiArICAgIGNh c2UgTUhfRVhURU5ERURfRVZFTlRfREVTQ1JJUFRPUjoKPiArICAgICAgICBieXRlc3RyZWFtMl9z a2lwdShnYmMsIDIpOwo+ICsgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChn YmMpIDwgMikKPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAg ICAgICAgYnl0ZXN0cmVhbTJfc2tpcChnYmMsIGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpKTsK PiArICAgICAgICByZXR1cm4gMDsKPiArICAgIH0KPiArICAgIGF2X2xvZyhjdHgtPnMsIEFWX0xP R19JTkZPLCAiVW5rbm93biBkZXNjcmlwdG9yOiAweCUwNHhcbiIsCj4gKyAgICAgICAgICAgYnl0 ZXN0cmVhbTJfcGVla19iZTE2dShnYmMpKTsKPiArICAgIHJldHVybiBBVkVSUk9SX1BBVENIV0VM Q09NRTsKPiArfQo+ICsKPiArc3RhdGljIGludCBwYXJzZV9tbXRfcGFja2FnZV90YWJsZShNTVRQ Q29udGV4dCAqY3R4LCBHZXRCeXRlQ29udGV4dCAqZ2JjKQo+ICt7Cj4gKyAgICB1aW50MTZfdCBs ZW5ndGg7Cj4gKwo+ICsgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCAo OCArIDggKyAxNikgLyA4KQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ ICsgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpICE9IE1NVF9QQUNLQUdFX1RBQkxF X0lEKQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgLy8gc2tp cDogdmVyc2lvbgo+ICsgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCAxKTsKPiArICAgIGxlbmd0 aCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpOwo+ICsKPiArICAgIGlmIChieXRlc3RyZWFt Ml9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgbGVuZ3RoKQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9S X0lOVkFMSUREQVRBOwo+ICsgICAgewo+ICsgICAgICAgIHNpemVfdCAgIGksIGo7Cj4gKyAgICAg ICAgdWludDhfdCAgcGFja2FnZV9pZF9sZW5ndGg7Cj4gKyAgICAgICAgdWludDE2X3QgZGVzY3Jp cHRvcnNfbGVuZ3RoOwo+ICsgICAgICAgIHVpbnQ4X3QgIG51bWJlcl9vZl9hc3NldHM7Cj4gKwo+ ICsgICAgICAgIEdldEJ5dGVDb250ZXh0IG5nYmM7Cj4gKyAgICAgICAgYnl0ZXN0cmVhbTJfaW5p dCgmbmdiYywgZ2JjLT5idWZmZXIsIGxlbmd0aCk7Cj4gKwo+ICsgICAgICAgIGlmIChieXRlc3Ry ZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPCAoNiArIDIgKyA4KSAvIDgpCj4gKyAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsKPiArICAgICAgICAvLyBza2lwOiBN UFRfbW9kZQo+ICsgICAgICAgIGJ5dGVzdHJlYW0yX3NraXB1KCZuZ2JjLCAxKTsKPiArICAgICAg ICBwYWNrYWdlX2lkX2xlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldSgmbmdiYyk7Cj4gKwo+ ICsgICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoJm5nYmMsIHBhY2thZ2VfaWRfbGVuZ3RoKTsKPiAr Cj4gKyAgICAgICAgZGVzY3JpcHRvcnNfbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTYoJm5n YmMpOwo+ICsgICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoJm5nYmMsIGRlc2NyaXB0b3JzX2xlbmd0 aCk7Cj4gKwo+ICsgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykg PCAxKQo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgICAg ICBudW1iZXJfb2ZfYXNzZXRzID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KCZuZ2JjKTsKPiArCj4g KyAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bWJlcl9vZl9hc3NldHM7ICsraSkgewo+ICsgICAg ICAgICAgICBpbnQgZXJyOwo+ICsKPiArICAgICAgICAgICAgdWludDhfdCAgYXNzZXRfaWRfbGVu Z3RoOwo+ICsgICAgICAgICAgICB1aW50OF90ICBsb2NhdGlvbl9jb3VudDsKPiArICAgICAgICAg ICAgdWludDE2X3QgYXNzZXRfZGVzY3JpcHRvcnNfbGVuZ3RoOwo+ICsgICAgICAgICAgICB1aW50 MzJfdCBhc3NldF90eXBlOwo+ICsKPiArICAgICAgICAgICAgc3RydWN0IFN0cmVhbXMgKnN0cmVh bSA9IE5VTEw7Cj4gKwo+ICsgICAgICAgICAgICBzdHJ1Y3QgTU1UR2VuZXJhbExvY2F0aW9uSW5m byBpbmZvOwo+ICsKPiArICAgICAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0 KCZuZ2JjKSA8ICg4ICsgMzIgKyA4KSAvIDgpCj4gKyAgICAgICAgICAgICAgICByZXR1cm4gQVZF UlJPUl9JTlZBTElEREFUQTsKPiArICAgICAgICAgICAgLyoKPiArICAgICAgICAgICAgICogc2tp cDoKPiArICAgICAgICAgICAgICogLSBpZGVudGlmaWVyX3R5cGUKPiArICAgICAgICAgICAgICog LSBhc3NldF9pZF9zY2hlbWUKPiArICAgICAgICAgICAgICovCj4gKyAgICAgICAgICAgIGJ5dGVz dHJlYW0yX3NraXB1KCZuZ2JjLCAoOCArIDMyKSAvIDgpOwo+ICsgICAgICAgICAgICBhc3NldF9p ZF9sZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoJm5nYmMpOwo+ICsKPiArICAgICAgICAg ICAgYnl0ZXN0cmVhbTJfc2tpcCgmbmdiYywgYXNzZXRfaWRfbGVuZ3RoKTsKPiArCj4gKyAgICAg ICAgICAgIGFzc2V0X3R5cGUgPSBieXRlc3RyZWFtMl9nZXRfbGUzMigmbmdiYyk7Cj4gKwo+ICsg ICAgICAgICAgICAvLyBza2lwOiBhc3NldF9jbG9ja19yZWxhdGlvbl9mbGFnCj4gKyAgICAgICAg ICAgIGJ5dGVzdHJlYW0yX3NraXAoJm5nYmMsIDEpOwo+ICsKPiArICAgICAgICAgICAgaWYgKGJ5 dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2JjKSA8IDEpCj4gKyAgICAgICAgICAgICAgICBy ZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgICAgICAgICAgbG9jYXRpb25fY291bnQg PSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoJm5nYmMpOwo+ICsKPiArICAgICAgICAgICAgZm9yIChq ID0gMDsgaiA8IGxvY2F0aW9uX2NvdW50OyArK2opCj4gKyAgICAgICAgICAgICAgICBpZiAoKGVy ciA9IHBhcnNlX21tdF9nZW5lcmFsX2xvY2F0aW9uX2luZm8oJmluZm8sICZuZ2JjKSkKPiA8IDAp Cj4gKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKPiArCj4gKyAgICAgICAgICAgIHN3 aXRjaCAoYXNzZXRfdHlwZSkgewo+ICsgICAgICAgICAgICBjYXNlIE1LVEFHKCdoJywgJ2UnLCAn dicsICcxJyk6Cj4gKyAgICAgICAgICAgICAgICBpZiAoaW5mby5sb2NhdGlvbl90eXBlICE9IDB4 MDApIHJldHVybgo+IEFWRVJST1JfUEFUQ0hXRUxDT01FOwo+ICsgICAgICAgICAgICAgICAgc3Ry ZWFtID0gZmluZF9vcl9hbGxvY2F0ZV9zdHJlYW0oY3R4LAo+IGluZm8udHlwZTAucGFja2V0X2lk KTsKPiArICAgICAgICAgICAgICAgIGlmIChzdHJlYW0gPT0gTlVMTCkgcmV0dXJuIEFWRVJST1Io RU5PTUVNKTsKPiArICAgICAgICAgICAgICAgIHN0cmVhbS0+c3RyZWFtLT5jb2RlY3Bhci0+Y29k ZWNfdHlwZSA9IEFWTUVESUFfVFlQRV9WSURFTzsKPiArICAgICAgICAgICAgICAgIHN0cmVhbS0+ c3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfaWQgICA9IEFWX0NPREVDX0lEX0hFVkM7Cj4gKyAgICAg ICAgICAgICAgICBzdHJlYW0tPnN0cmVhbS0+Y29kZWNwYXItPmNvZGVjX3RhZyAgPSBhc3NldF90 eXBlOwo+ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAgIGNhc2UgTUtUQUco J20nLCAncCcsICc0JywgJ2EnKToKPiArICAgICAgICAgICAgICAgIGlmIChpbmZvLmxvY2F0aW9u X3R5cGUgIT0gMHgwMCkgcmV0dXJuCj4gQVZFUlJPUl9QQVRDSFdFTENPTUU7Cj4gKyAgICAgICAg ICAgICAgICBzdHJlYW0gPSBmaW5kX29yX2FsbG9jYXRlX3N0cmVhbShjdHgsCj4gaW5mby50eXBl MC5wYWNrZXRfaWQpOwo+ICsgICAgICAgICAgICAgICAgaWYgKHN0cmVhbSA9PSBOVUxMKSByZXR1 cm4gQVZFUlJPUihFTk9NRU0pOwo+ICsgICAgICAgICAgICAgICAgc3RyZWFtLT5zdHJlYW0tPmNv ZGVjcGFyLT5jb2RlY190eXBlID0gQVZNRURJQV9UWVBFX0FVRElPOwo+ICsgICAgICAgICAgICAg ICAgc3RyZWFtLT5zdHJlYW0tPmNvZGVjcGFyLT5jb2RlY190YWcgID0gYXNzZXRfdHlwZTsKPiAr ICAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgICBjYXNlIE1LVEFHKCdzJywgJ3Qn LCAncCcsICdwJyk6Cj4gKyAgICAgICAgICAgICAgICBpZiAoaW5mby5sb2NhdGlvbl90eXBlID09 IDB4MDApIHsKPiArICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBmaW5kX29yX2FsbG9jYXRl X3N0cmVhbShjdHgsCj4gaW5mby50eXBlMC5wYWNrZXRfaWQpOwo+ICsgICAgICAgICAgICAgICAg ICAgIGlmIChzdHJlYW0gPT0gTlVMTCkgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiArICAgICAg ICAgICAgICAgICAgICBzdHJlYW0tPnN0cmVhbS0+Y29kZWNwYXItPmNvZGVjX3R5cGUgPQo+IEFW TUVESUFfVFlQRV9TVUJUSVRMRTsKPiArICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPnN0cmVh bS0+Y29kZWNwYXItPmNvZGVjX3RhZyAgPSBhc3NldF90eXBlOwo+ICsgICAgICAgICAgICAgICAg fQo+ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAgIGNhc2UgTUtUQUcoJ2En LCAnYScsICdwJywgJ3AnKToKPiArICAgICAgICAgICAgY2FzZSBNS1RBRygnYScsICdzJywgJ2cn LCAnZCcpOgo+ICsgICAgICAgICAgICBjYXNlIE1LVEFHKCdhJywgJ2EnLCAnZycsICdkJyk6Cj4g KyAgICAgICAgICAgICAgICBicmVhazsgLy8gVE9ETwo+ICsgICAgICAgICAgICB9Cj4gKwo+ICsg ICAgICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoJm5nYmMpIDwgMikKPiAr ICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgICAgICAg ICBhc3NldF9kZXNjcmlwdG9yc19sZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYmUxNnUoJm5nYmMp Owo+ICsgICAgICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoJm5nYmMpIDwK PiBhc3NldF9kZXNjcmlwdG9yc19sZW5ndGgpCj4gKyAgICAgICAgICAgICAgICByZXR1cm4gQVZF UlJPUl9JTlZBTElEREFUQTsKPiArICAgICAgICAgICAgaWYgKHN0cmVhbSAhPSBOVUxMKSB7Cj4g KyAgICAgICAgICAgICAgICBHZXRCeXRlQ29udGV4dCBubmdiYzsKPiArICAgICAgICAgICAgICAg IGJ5dGVzdHJlYW0yX2luaXQoJm5uZ2JjLCBuZ2JjLmJ1ZmZlciwKPiBhc3NldF9kZXNjcmlwdG9y c19sZW5ndGgpOwo+ICsKPiArICAgICAgICAgICAgICAgIHdoaWxlIChieXRlc3RyZWFtMl9nZXRf Ynl0ZXNfbGVmdCgmbm5nYmMpID4gMCkKPiArICAgICAgICAgICAgICAgICAgICBpZiAoKGVyciA9 IHBhcnNlX21wdF9kZXNjcmlwdG9yKHN0cmVhbSwgJm5uZ2JjKSkgPCAwKQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gZXJyOwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAg IGJ5dGVzdHJlYW0yX3NraXB1KCZuZ2JjLCBhc3NldF9kZXNjcmlwdG9yc19sZW5ndGgpOwo+ICsg ICAgICAgIH0KPiArICAgIH0KPiArICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgbGVuZ3RoKTsK PiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBwYXJzZV9wYWNrYWdl X2xpc3RfdGFibGUoTU1UUENvbnRleHQgKmN0eCwgR2V0Qnl0ZUNvbnRleHQgKmdiYykKPiArewo+ ICsgICAgc2l6ZV90ICAgaTsKPiArICAgIHVpbnQzMl90IGxlbmd0aDsKPiArCj4gKyAgICBpZiAo Ynl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8ICg4ICsgOCArIDE2KSAvIDgpCj4gKyAg ICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICBpZiAoYnl0ZXN0cmVhbTJf Z2V0X2J5dGV1KGdiYykgIT0gUEFDS0FHRV9MSVNUX1RBQkxFX0lEKQo+ICsgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgLy8gc2tpcDogdmVyc2lvbgo+ICsgICAgYnl0 ZXN0cmVhbTJfc2tpcHUoZ2JjLCAxKTsKPiArICAgIGxlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9i ZTE2dShnYmMpOwo+ICsKPiArICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMp IDwgbGVuZ3RoKQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAg ewo+ICsgICAgICAgIGludCAgICAgZXJyOwo+ICsgICAgICAgIHVpbnQ4X3QgbnVtX29mX3BhY2th Z2U7Cj4gKyAgICAgICAgdWludDhfdCBudW1fb2ZfaXBfZGVsaXZlcnk7Cj4gKwo+ICsgICAgICAg IEdldEJ5dGVDb250ZXh0IG5nYmM7Cj4gKyAgICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgmbmdiYywg Z2JjLT5idWZmZXIsIGxlbmd0aCk7Cj4gKwo+ICsgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRf Ynl0ZXNfbGVmdChnYmMpIDwgMSkKPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7Cj4gKyAgICAgICAgbnVtX29mX3BhY2thZ2UgPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUo Jm5nYmMpOwo+ICsKPiArICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX29mX3BhY2thZ2U7ICsr aSkgewo+ICsgICAgICAgICAgICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdl X2lkX2xlbmd0aDsKPiArICAgICAgICAgICAgc3RydWN0IE1NVEdlbmVyYWxMb2NhdGlvbkluZm8g aW5mbzsKPiArCj4gKyAgICAgICAgICAgIHBhY2thZ2VfaWRfbGVuZ3RoID0gYnl0ZXN0cmVhbTJf Z2V0X2J5dGUoJm5nYmMpOwo+ICsgICAgICAgICAgICBieXRlc3RyZWFtMl9za2lwKCZuZ2JjLCBw YWNrYWdlX2lkX2xlbmd0aCk7Cj4gKwo+ICsgICAgICAgICAgICBpZiAoKGVyciA9IHBhcnNlX21t dF9nZW5lcmFsX2xvY2F0aW9uX2luZm8oJmluZm8sICZuZ2JjKSkgPCAwKQo+ICsgICAgICAgICAg ICAgICAgcmV0dXJuIGVycjsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGlmIChieXRlc3Ry ZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPCAxKQo+ICsgICAgICAgICAgICByZXR1cm4gQVZF UlJPUl9JTlZBTElEREFUQTsKPiArICAgICAgICBudW1fb2ZfaXBfZGVsaXZlcnkgPSBieXRlc3Ry ZWFtMl9nZXRfYnl0ZXUoJm5nYmMpOwo+ICsKPiArICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVt X29mX2lwX2RlbGl2ZXJ5OyArK2kpCj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX1BBVENI V0VMQ09NRTsKPiArICAgIH0KPiArICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgbGVuZ3RoKTsK PiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBwYXJzZV9taF9laXRf dGFibGUoTU1UUENvbnRleHQgKmN0eCwgR2V0Qnl0ZUNvbnRleHQgKmdiYykKPiArewo+ICsgICAg dWludDE2X3Qgc2VjdGlvbl9sZW5ndGg7Cj4gKwo+ICsgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9i eXRlc19sZWZ0KGdiYykgPCAoOCArIDEgKyAxICsgMiArIDEyKSAvIDgpCj4gKyAgICAgICAgcmV0 dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1 KGdiYykgIT0gTUhfRUlUX1RBQkxFX0lEKQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFM SUREQVRBOwo+ICsgICAgc2VjdGlvbl9sZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2Jj KSAmIDBiMDAwMDExMTExMTExMTExMTsKPiArCj4gKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5 dGVzX2xlZnQoZ2JjKSA8IHNlY3Rpb25fbGVuZ3RoIHx8Cj4gc2VjdGlvbl9sZW5ndGggPCA0KQo+ ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgewo+ICsgICAgICAg IEdldEJ5dGVDb250ZXh0IG5nYmM7Cj4gKyAgICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgmbmdiYywg Z2JjLT5idWZmZXIsIHNlY3Rpb25fbGVuZ3RoIC0gNCk7Cj4gKwo+ICsgICAgICAgIGJ5dGVzdHJl YW0yX3NraXAoJm5nYmMsICgxNiArIDIgKyA1ICsgMSArIDggKyA4ICsgMTYgKyAxNiArIDggKwo+ IDgpIC8gOCk7Cj4gKwo+ICsgICAgICAgIHdoaWxlIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVm dCgmbmdiYykgPiAwKSB7Cj4gKyAgICAgICAgICAgIHVpbnQxNl90IGRlc2NyaXB0b3JzX2xvb3Bf bGVuZ3RoOwo+ICsKPiArICAgICAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcCgmbmdiYywgKDE2ICsg NDAgKyAyNCkgLyA4KTsKPiArICAgICAgICAgICAgZGVzY3JpcHRvcnNfbG9vcF9sZW5ndGggPQo+ ICsgICAgICAgICAgICAgICAgYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KCZuZ2JjKSAmIDBiMDAwMDEx MTExMTExMTExMTsKPiArCj4gKyAgICAgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNf bGVmdCgmbmdiYykgPAo+IGRlc2NyaXB0b3JzX2xvb3BfbGVuZ3RoKQo+ICsgICAgICAgICAgICAg ICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICAgICAgICAgIHsKPiArICAgICAg ICAgICAgICAgIGludCAgICAgICAgICAgIGVycjsKPiArICAgICAgICAgICAgICAgIEdldEJ5dGVD b250ZXh0IG5uZ2JjOwo+ICsgICAgICAgICAgICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgmbm5nYmMs IG5nYmMuYnVmZmVyLAo+IGRlc2NyaXB0b3JzX2xvb3BfbGVuZ3RoKTsKPiArCj4gKyAgICAgICAg ICAgICAgICB3aGlsZSAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoJm5uZ2JjKSA+IDApCj4g KyAgICAgICAgICAgICAgICAgICAgaWYgKChlcnIgPSBwYXJzZV9taF9laXRfZGVzY3JpcHRvcihj dHgsICZubmdiYykpIDwgMCkKPiArICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsK PiArICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICBieXRlc3RyZWFtMl9za2lwdSgmbmdiYywg ZGVzY3JpcHRvcnNfbG9vcF9sZW5ndGgpOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiArICAgIGJ5 dGVzdHJlYW0yX3NraXB1KGdiYywgc2VjdGlvbl9sZW5ndGgpOwo+ICsKPiArICAgIHJldHVybiAw Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHBhcnNlX3RhYmxlKE1NVFBDb250ZXh0ICpjdHgsIEdl dEJ5dGVDb250ZXh0ICpnYmMpCj4gK3sKPiArICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNf bGVmdChnYmMpIDwgMikKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiAr ICAgIHN3aXRjaCAoYnl0ZXN0cmVhbTJfcGVla19ieXRldShnYmMpKSB7Cj4gKyAgICBjYXNlIE1N VF9QQUNLQUdFX1RBQkxFX0lEOgo+ICsgICAgICAgIHJldHVybiBwYXJzZV9tbXRfcGFja2FnZV90 YWJsZShjdHgsIGdiYyk7Cj4gKyAgICBjYXNlIFBBQ0tBR0VfTElTVF9UQUJMRV9JRDoKPiArICAg ICAgICByZXR1cm4gcGFyc2VfcGFja2FnZV9saXN0X3RhYmxlKGN0eCwgZ2JjKTsKPiArICAgIGNh c2UgTUhfRUlUX1RBQkxFX0lEOgo+ICsgICAgICAgIHJldHVybiBwYXJzZV9taF9laXRfdGFibGUo Y3R4LCBnYmMpOwo+ICsgICAgfQo+ICsgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCBieXRlc3Ry ZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpKTsgLy8gVE9ETwo+ICsgICAgcmV0dXJuIDA7Cj4gK30K PiArCj4gK2VudW0gewo+ICsgICAgUEFfTUVTU0FHRV9JRCAgICAgID0gMHgwMDAwLAo+ICsgICAg TTJfU0VDVElPTl9NRVNTQUdFID0gMHg4MDAwLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBwYXJz ZV9wYV9tZXNzYWdlKE1NVFBDb250ZXh0ICpjdHgsIEdldEJ5dGVDb250ZXh0ICpnYmMpCj4gK3sK PiArICAgIHVpbnQzMl90IGxlbmd0aDsKPiArCj4gKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5 dGVzX2xlZnQoZ2JjKSA8ICgxNiArIDggKyAzMikgLyA4KQo+ICsgICAgICAgIHJldHVybiBBVkVS Uk9SX0lOVkFMSUREQVRBOwo+ICsgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpICE9 IFBBX01FU1NBR0VfSUQpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4g KyAgICAvLyBza2lwOiB2ZXJzaW9uCj4gKyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIDEpOwo+ ICsgICAgbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMzJ1KGdiYyk7Cj4gKwo+ICsgICAgaWYg KGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCBsZW5ndGgpCj4gKyAgICAgICAgcmV0 dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICB7Cj4gKyAgICAgICAgc2l6ZV90ICBpOwo+ ICsgICAgICAgIHVpbnQ4X3QgbnVtX29mX3RhYmxlczsKPiArCj4gKyAgICAgICAgR2V0Qnl0ZUNv bnRleHQgbmdiYzsKPiArICAgICAgICBieXRlc3RyZWFtMl9pbml0KCZuZ2JjLCBnYmMtPmJ1ZmZl ciwgbGVuZ3RoKTsKPiArCj4gKyAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0 KGdiYykgPCAxKQo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiAr ICAgICAgICBudW1fb2ZfdGFibGVzID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KCZuZ2JjKTsKPiAr Cj4gKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9vZl90YWJsZXM7ICsraSkgewo+ICsgICAg ICAgICAgICBieXRlc3RyZWFtMl9za2lwKCZuZ2JjLCAoOCArIDggKyAxNikgLyA4KTsKPiArICAg ICAgICB9Cj4gKwo+ICsgICAgICAgIHdoaWxlIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgm bmdiYykgPiAwKSB7Cj4gKyAgICAgICAgICAgIGludCBlcnIgPSBwYXJzZV90YWJsZShjdHgsICZu Z2JjKTsKPiArICAgICAgICAgICAgaWYgKGVyciA8IDApIHJldHVybiBlcnI7Cj4gKyAgICAgICAg fQo+ICsgICAgfQo+ICsgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCBsZW5ndGgpOwo+ICsKPiAr ICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHBhcnNlX20yX3NlY3Rpb25fbWVz c2FnZShNTVRQQ29udGV4dCAqY3R4LCBHZXRCeXRlQ29udGV4dCAqZ2JjKQo+ICt7Cj4gKyAgICBp bnQgICAgICBlcnI7Cj4gKyAgICB1aW50MTZfdCBsZW5ndGg7Cj4gKwo+ICsgICAgaWYgKGJ5dGVz dHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCAoMTYgKyA4ICsgMTYpIC8gOCkKPiArICAgICAg ICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgIGlmIChieXRlc3RyZWFtMl9nZXRf YmUxNnUoZ2JjKSAhPSBNMl9TRUNUSU9OX01FU1NBR0UpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7Cj4gKyAgICAvLyBza2lwOiB2ZXJzaW9uCj4gKyAgICBieXRlc3RyZWFt Ml9za2lwdShnYmMsIDEpOwo+ICsgICAgbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdi Yyk7Cj4gKwo+ICsgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCBsZW5n dGgpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICB7Cj4gKyAg ICAgICAgR2V0Qnl0ZUNvbnRleHQgbmdiYzsKPiArICAgICAgICBieXRlc3RyZWFtMl9pbml0KCZu Z2JjLCBnYmMtPmJ1ZmZlciwgbGVuZ3RoKTsKPiArICAgICAgICBlcnIgPSBwYXJzZV90YWJsZShj dHgsICZuZ2JjKTsKPiArICAgIH0KPiArICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgbGVuZ3Ro KTsKPiArCj4gKyAgICByZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHBhcnNlX3Np Z25hbGxpbmdfbWVzc2FnZShNTVRQQ29udGV4dCAqY3R4LCBHZXRCeXRlQ29udGV4dCAqZ2JjKQo+ ICt7Cj4gKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IDQpCj4gKyAg ICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICBzd2l0Y2ggKGJ5dGVzdHJl YW0yX3BlZWtfYmUxNnUoZ2JjKSkgewo+ICsgICAgY2FzZSBQQV9NRVNTQUdFX0lEOgo+ICsgICAg ICAgIHJldHVybiBwYXJzZV9wYV9tZXNzYWdlKGN0eCwgZ2JjKTsKPiArICAgIGNhc2UgTTJfU0VD VElPTl9NRVNTQUdFOgo+ICsgICAgICAgIHJldHVybiBwYXJzZV9tMl9zZWN0aW9uX21lc3NhZ2Uo Y3R4LCBnYmMpOwo+ICsgICAgfQo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK2VudW0gRnJh Z21lbnRhdGlvbkluZGljYXRvciB7Cj4gKyAgICBOT1RfRlJBR01FTlRFRCAgPSAwYjAwLAo+ICsg ICAgRklSU1RfRlJBR01FTlQgID0gMGIwMSwKPiArICAgIE1JRERMRV9GUkFHTUVOVCA9IDBiMTAs Cj4gKyAgICBMQVNUX0ZSQUdNRU5UICAgPSAwYjExLAo+ICt9Owo+ICsKPiArc3RydWN0IEZyYWdt ZW50QXNzZW1ibGVyIHsKPiArICAgIHVpbnQxNl90ICAgICAgICAgICAgICAgICBwaWQ7Cj4gKyAg ICBzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJsZXIgKm5leHQ7Cj4gKwo+ICsgICAgdWludDhfdCAqZGF0 YTsKPiArICAgIHNpemVfdCAgc2l6ZSwgY2FwOwo+ICsKPiArICAgIHVpbnQzMl90IGxhc3Rfc2Vx Owo+ICsKPiArICAgIGVudW0gewo+ICsgICAgICAgIElOSVQgPSAwLAo+ICsgICAgICAgIE5PVF9T VEFSVEVELAo+ICsgICAgICAgIElOX0ZSQUdNRU5ULAo+ICsgICAgICAgIFNLSVAsCj4gKyAgICB9 IHN0YXRlOwo+ICt9Owo+ICsKPiArc3RhdGljIGludAo+ICthcHBlbmRfZGF0YShzdHJ1Y3QgRnJh Z21lbnRBc3NlbWJsZXIgKmN0eCwgY29uc3QgdWludDhfdCAqZGF0YSwgdWludDMyX3QKPiBzaXpl KQo+ICt7Cj4gKyAgICBpZiAoY3R4LT5zaXplICsgc2l6ZSA+IFVJTlQzMl9NQVgpIHJldHVybiBB VkVSUk9SKEVPVkVSRkxPVyk7Cj4gKyAgICBpZiAoY3R4LT5jYXAgPCBjdHgtPnNpemUgKyBzaXpl KSB7Cj4gKyAgICAgICAgdm9pZCAgICpuZXdfZGF0YTsKPiArICAgICAgICBzaXplX3QgbmV3X2Nh cCA9IGN0eC0+Y2FwID09IDAgPyAxMDI0IDogY3R4LT5jYXAgKiAyOwo+ICsgICAgICAgIHdoaWxl IChuZXdfY2FwIDwgY3R4LT5zaXplICsgc2l6ZSkgbmV3X2NhcCAqPSAyOwo+ICsKPiArICAgICAg ICBuZXdfZGF0YSA9IGF2X3JlYWxsb2MoY3R4LT5kYXRhLCBuZXdfY2FwKTsKPiArICAgICAgICBp ZiAobmV3X2RhdGEgPT0gTlVMTCkgcmV0dXJuIEFWRVJST1IoZXJybm8pOwo+ICsgICAgICAgIGN0 eC0+ZGF0YSA9IG5ld19kYXRhOwo+ICsgICAgICAgIGN0eC0+Y2FwICA9IG5ld19jYXA7Cj4gKyAg ICB9Cj4gKyAgICBtZW1jcHkoY3R4LT5kYXRhICsgY3R4LT5zaXplLCBkYXRhLCBzaXplKTsKPiAr ICAgIGN0eC0+c2l6ZSArPSBzaXplOwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQKPiArY2hlY2tfc3RhdGUoTU1UUENvbnRleHQgKmN0eCwgc3RydWN0IEZyYWdtZW50QXNz ZW1ibGVyICphc3MsIHVpbnQzMl90Cj4gc2VxX251bSkKPiArewo+ICsgICAgaWYgKGFzcy0+c3Rh dGUgPT0gSU5JVCkgewo+ICsgICAgICAgIGFzcy0+c3RhdGUgPSBTS0lQOwo+ICsgICAgfSBlbHNl IGlmIChzZXFfbnVtICE9IGFzcy0+bGFzdF9zZXEgKyAxKSB7Cj4gKyAgICAgICAgaWYgKGFzcy0+ c2l6ZSAhPSAwKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgtPnMsIEFWX0xPR19XQVJOSU5H LAo+ICsgICAgICAgICAgICAgICAgICAgIlBhY2tldCBzZXF1ZW5jZSBudW1iZXIganVtcDogJXUg KyAxICE9ICV1LCBkcm9wICV6dQo+IGJ5dGVzXG4iLAo+ICsgICAgICAgICAgICAgICAgICAgYXNz LT5sYXN0X3NlcSwgc2VxX251bSwgYXNzLT5zaXplKTsKPiArICAgICAgICAgICAgYXNzLT5zaXpl ID0gMDsKPiArICAgICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAgICBhdl9sb2coY3R4LT5zLCBB Vl9MT0dfV0FSTklORywKPiArICAgICAgICAgICAgICAgICAgICJQYWNrZXQgc2VxdWVuY2UgbnVt YmVyIGp1bXA6ICV1ICsgMSAhPSAldVxuIiwKPiArICAgICAgICAgICAgICAgICAgIGFzcy0+bGFz dF9zZXEsIHNlcV9udW0pOwo+ICsgICAgICAgIH0KPiArICAgICAgICBhc3MtPnN0YXRlID0gU0tJ UDsKPiArICAgIH0KPiArICAgIGFzcy0+bGFzdF9zZXEgPSBzZXFfbnVtOwo+ICsgICAgcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYXNzZW1ibGVfZnJhZ21lbnQoCj4gKyAgICBzdHJ1 Y3QgRnJhZ21lbnRBc3NlbWJsZXIgKmN0eCwgdWludDMyX3Qgc2VxX251bSwKPiArICAgIGVudW0g RnJhZ21lbnRhdGlvbkluZGljYXRvciBpbmRpY2F0b3IsCj4gKyAgICBjb25zdCB1aW50OF90ICpk YXRhLCB1aW50MzJfdCBzaXplLAo+ICsgICAgaW50ICgqcGFyc2VyKShNTVRQQ29udGV4dCAqLCBH ZXRCeXRlQ29udGV4dCAqKSwKPiArICAgIE1NVFBDb250ZXh0ICpvcGFxdWUpCj4gK3sKPiArICAg IEdldEJ5dGVDb250ZXh0IGdiYzsKPiArICAgIGludCAgICAgICAgICAgIGVycjsKPiArCj4gKyAg ICBzd2l0Y2ggKGluZGljYXRvcikgewo+ICsgICAgY2FzZSBOT1RfRlJBR01FTlRFRDoKPiArICAg ICAgICBpZiAoY3R4LT5zdGF0ZSA9PSBJTl9GUkFHTUVOVCkgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7Cj4gKyAgICAgICAgY3R4LT5zdGF0ZSA9IE5PVF9TVEFSVEVEOwo+ICsgICAgICAgIGJ5 dGVzdHJlYW0yX2luaXQoJmdiYywgZGF0YSwgc2l6ZSk7Cj4gKyAgICAgICAgcmV0dXJuIHBhcnNl cihvcGFxdWUsICZnYmMpOwo+ICsgICAgY2FzZSBGSVJTVF9GUkFHTUVOVDoKPiArICAgICAgICBp ZiAoY3R4LT5zdGF0ZSA9PSBJTl9GUkFHTUVOVCkgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7 Cj4gKyAgICAgICAgY3R4LT5zdGF0ZSA9IElOX0ZSQUdNRU5UOwo+ICsgICAgICAgIHJldHVybiBh cHBlbmRfZGF0YShjdHgsIGRhdGEsIHNpemUpOwo+ICsgICAgY2FzZSBNSURETEVfRlJBR01FTlQ6 Cj4gKyAgICAgICAgaWYgKGN0eC0+c3RhdGUgPT0gU0tJUCkgewo+ICsgICAgICAgICAgICBhdl9s b2cob3BhcXVlLT5zLCBBVl9MT0dfVkVSQk9TRSwgIkRyb3AgcGFja2V0ICV1XG4iLAo+IHNlcV9u dW0pOwo+ICsgICAgICAgICAgICByZXR1cm4gMDsKPiArICAgICAgICB9Cj4gKyAgICAgICAgaWYg KGN0eC0+c3RhdGUgIT0gSU5fRlJBR01FTlQpIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ ICsgICAgICAgIHJldHVybiBhcHBlbmRfZGF0YShjdHgsIGRhdGEsIHNpemUpOwo+ICsgICAgY2Fz ZSBMQVNUX0ZSQUdNRU5UOgo+ICsgICAgICAgIGlmIChjdHgtPnN0YXRlID09IFNLSVApIHsKPiAr ICAgICAgICAgICAgYXZfbG9nKG9wYXF1ZS0+cywgQVZfTE9HX1ZFUkJPU0UsICJEcm9wIHBhY2tl dCAldVxuIiwKPiBzZXFfbnVtKTsKPiArICAgICAgICAgICAgcmV0dXJuIDA7Cj4gKyAgICAgICAg fQo+ICsgICAgICAgIGlmIChjdHgtPnN0YXRlICE9IElOX0ZSQUdNRU5UKSByZXR1cm4gQVZFUlJP Ul9JTlZBTElEREFUQTsKPiArICAgICAgICBpZiAoKGVyciA9IGFwcGVuZF9kYXRhKGN0eCwgZGF0 YSwgc2l6ZSkpIDwgMCkgcmV0dXJuIGVycjsKPiArCj4gKyAgICAgICAgYnl0ZXN0cmVhbTJfaW5p dCgmZ2JjLCBjdHgtPmRhdGEsIGN0eC0+c2l6ZSk7Cj4gKyAgICAgICAgZXJyID0gcGFyc2VyKG9w YXF1ZSwgJmdiYyk7Cj4gKwo+ICsgICAgICAgIGN0eC0+c2l6ZSAgPSAwOwo+ICsgICAgICAgIGN0 eC0+c3RhdGUgPSBOT1RfU1RBUlRFRDsKPiArICAgICAgICByZXR1cm4gZXJyOwo+ICsgICAgZGVm YXVsdDoKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgIH0KPiAr fQo+ICsKPiArc3RhdGljIHN0cnVjdCBGcmFnbWVudEFzc2VtYmxlciAqCj4gK2ZpbmRfb3JfYWxs b2NhdGVfYXNzZW1ibGVyKE1NVFBDb250ZXh0ICpjdHgsIHVpbnQxNl90IHBpZCkKPiArewo+ICsg ICAgc3RydWN0IEZyYWdtZW50QXNzZW1ibGVyICphc3M7Cj4gKyAgICBmb3IgKGFzcyA9IGN0eC0+ YXNzZW1ibGVyOyBhc3MgIT0gTlVMTDsgYXNzID0gYXNzLT5uZXh0KQo+ICsgICAgICAgIGlmIChh c3MtPnBpZCA9PSBwaWQpCj4gKyAgICAgICAgICAgIHJldHVybiBhc3M7Cj4gKwo+ICsgICAgYXNz ID0gYXZfbWFsbG9jeihzaXplb2Yoc3RydWN0IEZyYWdtZW50QXNzZW1ibGVyKSk7Cj4gKyAgICBp ZiAoYXNzID09IE5VTEwpIHJldHVybiBOVUxMOwo+ICsgICAgYXNzLT5waWQgICAgICAgICAgICAg ID0gcGlkOwo+ICsgICAgYXNzLT5uZXh0ICAgICAgICAgICAgID0gY3R4LT5hc3NlbWJsZXI7Cj4g KyAgICByZXR1cm4gY3R4LT5hc3NlbWJsZXIgPSBhc3M7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg cGFyc2Vfc2lnbmFsbGluZ19tZXNzYWdlcygKPiArICAgIE1NVFBDb250ZXh0ICpjdHgsIHVpbnQz Ml90IHNlcV9udW0sIEdldEJ5dGVDb250ZXh0ICpnYmMpCj4gK3sKPiArICAgIGludCAgICAgICAg ICAgICAgICAgICAgICAgICBlcnI7Cj4gKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAg Ynl0ZTsKPiArICAgIGVudW0gRnJhZ21lbnRhdGlvbkluZGljYXRvciBmcmFnbWVudGF0aW9uX2lu ZGljYXRvcjsKPiArICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGhfZXh0ZW5z aW9uX2ZsYWc7Cj4gKyAgICBib29sICAgICAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRpb25f ZmxhZzsKPiArCj4gKyAgICBzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJsZXIgKmFzc2VtYmxlciA9IGZp bmRfb3JfYWxsb2NhdGVfYXNzZW1ibGVyKAo+ICsgICAgICAgIGN0eCwgY3R4LT5jdXJyZW50X3Bp ZCk7Cj4gKyAgICBpZiAoYXNzZW1ibGVyID09IE5VTEwpIHJldHVybiBBVkVSUk9SKGVycm5vKTsK PiArCj4gKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8ICgyICsgNCAr IDEgKyAxICsgOCkgLyA4KQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ ICsgICAgYnl0ZSAgICAgICAgICAgICAgICAgICAgPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoZ2Jj KTsKPiArICAgIGZyYWdtZW50YXRpb25faW5kaWNhdG9yID0gYnl0ZSA+PiA2Owo+ICsgICAgbGVu Z3RoX2V4dGVuc2lvbl9mbGFnICAgPSAoYnl0ZSA+PiAxKSAmIDE7Cj4gKyAgICBhZ2dyZWdhdGlv bl9mbGFnICAgICAgICA9IGJ5dGUgJiAxOwo+ICsKPiArICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdi YywgMSk7Cj4gKwo+ICsgICAgaWYgKChlcnIgPSBjaGVja19zdGF0ZShjdHgsIGFzc2VtYmxlciwg c2VxX251bSkpIDwgMCkKPiArICAgICAgICByZXR1cm4gZXJyOwo+ICsKPiArICAgIGlmICghYWdn cmVnYXRpb25fZmxhZykKPiArICAgICAgICByZXR1cm4gYXNzZW1ibGVfZnJhZ21lbnQoCj4gKyAg ICAgICAgICAgIGFzc2VtYmxlciwgc2VxX251bSwgZnJhZ21lbnRhdGlvbl9pbmRpY2F0b3IsCj4g KyAgICAgICAgICAgIGdiYy0+YnVmZmVyLCBieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMp LAo+ICsgICAgICAgICAgICBwYXJzZV9zaWduYWxsaW5nX21lc3NhZ2UsIGN0eCk7Cj4gKwo+ICsg ICAgaWYgKGZyYWdtZW50YXRpb25faW5kaWNhdG9yICE9IE5PVF9GUkFHTUVOVEVEKQo+ICsgICAg ICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOyAvLyBjYW5ub3QgYmUgYm90aCBmcmFnbWVu dGVkIGFuZAo+IGFnZ3JlZ2F0ZWQKPiArCj4gKyAgICB3aGlsZSAoYnl0ZXN0cmVhbTJfZ2V0X2J5 dGVzX2xlZnQoZ2JjKSA+IDApIHsKPiArICAgICAgICB1aW50MzJfdCBsZW5ndGg7Cj4gKwo+ICsg ICAgICAgIGlmIChsZW5ndGhfZXh0ZW5zaW9uX2ZsYWcpCj4gKyAgICAgICAgICAgIGxlbmd0aCA9 IGJ5dGVzdHJlYW0yX2dldF9iZTMyKGdiYyk7Cj4gKyAgICAgICAgZWxzZQo+ICsgICAgICAgICAg ICBsZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYmUxNihnYmMpOwo+ICsKPiArICAgICAgICBpZiAo Ynl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IGxlbmd0aCkKPiArICAgICAgICAgICAg cmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICAgICAgaWYgKChlcnIgPSBhc3NlbWJs ZV9mcmFnbWVudCgKPiArICAgICAgICAgICAgYXNzZW1ibGVyLCBzZXFfbnVtLCBOT1RfRlJBR01F TlRFRCwKPiArICAgICAgICAgICAgZ2JjLT5idWZmZXIsIGxlbmd0aCwgcGFyc2Vfc2lnbmFsbGlu Z19tZXNzYWdlLCBjdHgpKSA8IDApCj4gKyAgICAgICAgICAgIHJldHVybiBlcnI7Cj4gKyAgICAg ICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCBsZW5ndGgpOwo+ICsgICAgfQo+ICsKPiArICAgIHJl dHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGZpbGxfcHRzX2R0cyhNTVRQQ29udGV4dCAq Y3R4LCBzdHJ1Y3QgU3RyZWFtcyAqcykKPiArewo+ICsgICAgc3RydWN0IE1QVVRpbWVzdGFtcERl c2NyaXB0b3IgICAgICAgICAqZGVzYyAgICAgPSBOVUxMOwo+ICsgICAgc3RydWN0IE1QVUV4dGVu ZGVkVGltZXN0YW1wRGVzY3JpcHRvciAqZXh0X2Rlc2MgPSBOVUxMOwo+ICsKPiArICAgIGludDY0 X3QgcHRpbWU7Cj4gKyAgICBzaXplX3QgIGksIGo7Cj4gKwo+ICsgICAgZm9yIChpID0gMDsgaSA8 IHMtPm51bV90aW1lc3RhbXBfZGVzY3JpcHRvcnM7ICsraSkgewo+ICsgICAgICAgIGlmIChzLT50 aW1lc3RhbXBfZGVzY3JpcHRvcltpXS5zZXFfbnVtID09Cj4gKyAgICAgICAgICAgIHMtPmxhc3Rf c2VxdWVuY2VfbnVtYmVyKSB7Cj4gKyAgICAgICAgICAgIGRlc2MgPSBzLT50aW1lc3RhbXBfZGVz Y3JpcHRvciArIGk7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIH0KPiArICAgIH0K PiArCj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgcy0+bnVtX2V4dF90aW1lc3RhbXBfZGVzY3JpcHRv cnM7ICsraSkgewo+ICsgICAgICAgIGlmIChzLT5leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3JbaV0u c2VxX251bSA9PQo+ICsgICAgICAgICAgICBzLT5sYXN0X3NlcXVlbmNlX251bWJlcikgewo+ICsg ICAgICAgICAgICBleHRfZGVzYyA9IHMtPmV4dF90aW1lc3RhbXBfZGVzY3JpcHRvciArIGk7Cj4g KyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAgICBpZiAo ZGVzYyA9PSBOVUxMIHx8IGV4dF9kZXNjID09IE5VTEwpIHJldHVybiBGRkVSUk9SX1JFRE87Cj4g KyAgICBwdGltZSA9IGF2X3Jlc2NhbGUoZGVzYy0+cHJlc2VudGF0aW9uX3RpbWUsIHMtPnN0cmVh bS0+dGltZV9iYXNlLmRlbiwKPiArICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwbGwgKiBz LT5zdHJlYW0tPnRpbWVfYmFzZS5udW0pOwo+ICsKPiArICAgIGlmIChzLT5hdV9jb3VudCA+PSBl eHRfZGVzYy0+bnVtX29mX2F1KQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRB Owo+ICsKPiArICAgIGN0eC0+cGt0LT5kdHMgPSBwdGltZSAtIGV4dF9kZXNjLT5kZWNvZGluZ190 aW1lX29mZnNldDsKPiArCj4gKyAgICBmb3IgKGogPSAwOyBqIDwgcy0+YXVfY291bnQ7ICsraikK PiArICAgICAgICBjdHgtPnBrdC0+ZHRzICs9IGV4dF9kZXNjLT5hdVtqXS5wdHNfb2Zmc2V0Owo+ ICsKPiArICAgIGN0eC0+cGt0LT5wdHMgPSBjdHgtPnBrdC0+ZHRzICsKPiBleHRfZGVzYy0+YXVb cy0+YXVfY291bnRdLmR0c19wdHNfb2Zmc2V0Owo+ICsKPiArICAgICsrcy0+YXVfY291bnQ7Cj4g KyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBlbWl0X2Nsb3NlZF9jYXB0aW9u X21mdShNTVRQQ29udGV4dCAqY3R4LCBzdHJ1Y3QgU3RyZWFtcyAqc3QsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgR2V0Qnl0ZUNvbnRleHQgKmdiYykKPiArewo+ICsgICAg dWludDhfdCAgZGF0YV90eXBlLCBzdWJzYW1wbGVfbnVtYmVyLCBsYXN0X3N1YnNhbXBsZV9udW1i ZXIsIGJ5dGU7Cj4gKyAgICB1aW50MzJfdCBkYXRhX3NpemU7Cj4gKyAgICBzaXplX3QgICBpOwo+ ICsgICAgaW50ICAgICAgZXJyOwo+ICsgICAgYm9vbCAgICAgbGVuZ3RoX2V4dF9mbGFnLCBzdWJz YW1wbGVfaW5mb19saXN0X2ZsYWc7Cj4gKwo+ICsgICAgYXZfYXNzZXJ0MChjdHgtPnBrdCAhPSBO VUxMKTsKPiArCj4gKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8ICg4 ICsgOCArIDggKyA4ICsgNCArIDEgKyAxICsgMikKPiAvIDgpCj4gKyAgICAgICAgcmV0dXJuIEFW RVJST1JfSU5WQUxJRERBVEE7Cj4gKwo+ICsgICAgLyoKPiArICAgICAqIHNraXA6Cj4gKyAgICAg KiAtIHN1YnRpdGxlX3RhZwo+ICsgICAgICogLSBzdWJ0aXRsZV9zZXF1ZW5jZV9udW1iZXIKPiAr ICAgICAqLwo+ICsgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCAoOCArIDgpIC8gOCk7Cj4gKwo+ ICsgICAgc3Vic2FtcGxlX251bWJlciAgICAgID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYyk7 Cj4gKyAgICBsYXN0X3N1YnNhbXBsZV9udW1iZXIgPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoZ2Jj KTsKPiArCj4gKyAgICBieXRlICAgICAgICAgICAgICAgICAgICAgPSBieXRlc3RyZWFtMl9nZXRf Ynl0ZXUoZ2JjKTsKPiArICAgIGRhdGFfdHlwZSAgICAgICAgICAgICAgICA9IGJ5dGUgPj4gNDsK PiArICAgIGxlbmd0aF9leHRfZmxhZyAgICAgICAgICA9IChieXRlID4+IDMpICYgMTsKPiArICAg IHN1YnNhbXBsZV9pbmZvX2xpc3RfZmxhZyA9IChieXRlID4+IDIpICYgMTsKPiArCj4gKyAgICBp ZiAoZGF0YV90eXBlICE9IDBiMDAwMCkgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOwo+ICsK PiArICAgIGlmIChsZW5ndGhfZXh0X2ZsYWcpCj4gKyAgICAgICAgZGF0YV9zaXplID0gYnl0ZXN0 cmVhbTJfZ2V0X2JlMzIoZ2JjKTsKPiArICAgIGVsc2UKPiArICAgICAgICBkYXRhX3NpemUgPSBi eXRlc3RyZWFtMl9nZXRfYmUxNihnYmMpOwo+ICsKPiArICAgIGlmIChzdWJzYW1wbGVfbnVtYmVy ID09IDAgJiYgbGFzdF9zdWJzYW1wbGVfbnVtYmVyID4gMCAmJgo+ICsgICAgICAgIHN1YnNhbXBs ZV9pbmZvX2xpc3RfZmxhZykgewo+ICsgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsYXN0X3N1YnNh bXBsZV9udW1iZXI7ICsraSkgewo+ICsgICAgICAgICAgICAvLyBza2lwOiBzdWJzYW1wbGVfaV9k YXRhX3R5cGUKPiArICAgICAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcChnYmMsICg0ICsgNCkgLyA4 KTsKPiArICAgICAgICAgICAgLy8gc2tpcDogc3Vic2FtcGxlX2lfZGF0YV9zaXplCj4gKyAgICAg ICAgICAgIGlmIChsZW5ndGhfZXh0X2ZsYWcpIHsKPiArICAgICAgICAgICAgICAgIGJ5dGVzdHJl YW0yX3NraXAoZ2JjLCAzMiAvIDgpOwo+ICsgICAgICAgICAgICB9IGVsc2Ugewo+ICsgICAgICAg ICAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcChnYmMsIDE2IC8gOCk7Cj4gKyAgICAgICAgICAgIH0K PiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRl c19sZWZ0KGdiYykgPCBkYXRhX3NpemUpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7Cj4gKyAgICBpZiAoKGVyciA9IGF2X25ld19wYWNrZXQoY3R4LT5wa3QsIGRhdGFfc2l6 ZSkpIDwgMCkgcmV0dXJuIGVycjsKPiArICAgIGJ5dGVzdHJlYW0yX2dldF9idWZmZXJ1KGdiYywg Y3R4LT5wa3QtPmRhdGEsIGRhdGFfc2l6ZSk7Cj4gKwo+ICsgICAgY3R4LT5wa3QtPnN0cmVhbV9p bmRleCA9IHN0LT5zdHJlYW0tPmluZGV4Owo+ICsgICAgY3R4LT5wa3QtPmZsYWdzICAgICAgICA9 IHN0LT5mbGFnczsKPiArICAgIGN0eC0+cGt0LT5wb3MgICAgICAgICAgPSBzdC0+b2Zmc2V0Owo+ ICsgICAgY3R4LT5wa3QgICAgICAgICAgICAgICA9IE5VTEw7Cj4gKwo+ICsgICAgc3QtPmZsYWdz ICA9IDA7Cj4gKyAgICBzdC0+b2Zmc2V0ID0gLTE7Cj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsK PiArc3RhdGljIGludCBlbWl0X3BhY2tldChNTVRQQ29udGV4dCAqY3R4LCBzdHJ1Y3QgU3RyZWFt cyAqc3QsIEFWQnVmZmVyUmVmCj4gKmJ1ZikKPiArewo+ICsgICAgaW50IGVycjsKPiArICAgIGF2 X2Fzc2VydDAoY3R4LT5wa3QgIT0gTlVMTCk7Cj4gKyAgICBhdl9wYWNrZXRfdW5yZWYoY3R4LT5w a3QpOwo+ICsgICAgaWYgKChlcnIgPSBmaWxsX3B0c19kdHMoY3R4LCBzdCkpIDwgMCkgewo+ICsg ICAgICAgIGF2X2J1ZmZlcl91bnJlZigmYnVmKTsKPiArICAgICAgICByZXR1cm4gZXJyOwo+ICsg ICAgfQo+ICsgICAgY3R4LT5wa3QtPmJ1ZiAgICAgICAgICA9IGJ1ZjsKPiArICAgIGN0eC0+cGt0 LT5kYXRhICAgICAgICAgPSBidWYtPmRhdGE7Cj4gKyAgICBjdHgtPnBrdC0+c2l6ZSAgICAgICAg ID0gYnVmLT5zaXplIC0gQVZfSU5QVVRfQlVGRkVSX1BBRERJTkdfU0laRTsKPiArICAgIGN0eC0+ cGt0LT5zdHJlYW1faW5kZXggPSBzdC0+c3RyZWFtLT5pbmRleDsKPiArICAgIGN0eC0+cGt0LT5m bGFncyAgICAgICAgPSBzdC0+ZmxhZ3M7Cj4gKyAgICBjdHgtPnBrdC0+cG9zICAgICAgICAgID0g c3QtPm9mZnNldDsKPiArICAgIGN0eC0+cGt0ICAgICAgICAgICAgICAgPSBOVUxMOwo+ICsKPiAr ICAgIHN0LT5mbGFncyAgPSAwOwo+ICsgICAgc3QtPm9mZnNldCA9IC0xOwo+ICsgICAgcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgY29uc3VtZV9tZnUoTU1UUENvbnRleHQgKmN0eCwg R2V0Qnl0ZUNvbnRleHQgKmdiYykKPiArewo+ICsgICAgaW50ICAgICAgICAgICAgZXJyOwo+ICsg ICAgQVZCdWZmZXJSZWYgICAgKmJ1Zl9yZWY7Cj4gKyAgICB1bnNpZ25lZCBpbnQgICBzaXplOwo+ ICsgICAgdWludDhfdCAgICAgICAgYnl0ZTsKPiArICAgIHNpemVfdCAgICAgICAgIG9sZF9zaXpl Owo+ICsgICAgc3RydWN0IFN0cmVhbXMgKnN0ID0gZmluZF9jdXJyZW50X3N0cmVhbShjdHgpOwo+ ICsgICAgYXZfYXNzZXJ0MChzdCAhPSBOVUxMKTsKPiArCj4gKyAgICBzd2l0Y2ggKHN0LT5zdHJl YW0tPmNvZGVjcGFyLT5jb2RlY19pZCkgewo+ICsgICAgY2FzZSBBVl9DT0RFQ19JRF9IRVZDOgo+ ICsgICAgICAgIHNpemUgPSBieXRlc3RyZWFtMl9nZXRfYmUzMihnYmMpOwo+ICsgICAgICAgIGlm IChzaXplICE9IGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykpIHJldHVybgo+IEFWRVJS T1JfSU5WQUxJRERBVEE7Cj4gKyAgICAgICAgaWYgKHNpemUgPCAxKSAvLyB3ZSBleHBlY3QgdG8g ZXh0cmFjdCBOQUwgdW5pdCBoZWFkZXIgdHlwZSBiZWxvdwo+ICsgICAgICAgICAgICByZXR1cm4g QVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgICAgICBieXRlID0gYnl0ZXN0cmVhbTJfcGVla19i eXRldShnYmMpOwo+ICsgICAgICAgIGlmICgoYnl0ZSA+PiA3KSAhPSAwKSByZXR1cm4gQVZFUlJP Ul9JTlZBTElEREFUQTsgLy8KPiBmb3JiaWRkZW5femVyb19iaXQKPiArCj4gKyAgICAgICAgb2xk X3NpemUgPSBzdC0+cGVuZGluZ19idWZmZXIgPT0gTlVMTCA/IDAgOgo+ICsgICAgICAgICAgICAg ICAgICAgKHN0LT5wZW5kaW5nX2J1ZmZlci0+c2l6ZSAtCj4gQVZfSU5QVVRfQlVGRkVSX1BBRERJ TkdfU0laRSk7Cj4gKyAgICAgICAgaWYgKChlcnIgPSBhdl9idWZmZXJfcmVhbGxvYygKPiArICAg ICAgICAgICAgJnN0LT5wZW5kaW5nX2J1ZmZlciwKPiArICAgICAgICAgICAgb2xkX3NpemUgKyBz aXplICsgNCArIEFWX0lOUFVUX0JVRkZFUl9QQURESU5HX1NJWkUpKSA8IDApCj4gKyAgICAgICAg ICAgIHJldHVybiBlcnI7Cj4gKyAgICAgICAgLy8gZml4IHN0YXJ0IGNvZGUgKDAwIDAwIDAwIDAx KQo+ICsgICAgICAgIEFWX1dCMzIoc3QtPnBlbmRpbmdfYnVmZmVyLT5kYXRhICsgb2xkX3NpemUs IDEpOwo+ICsgICAgICAgIGJ5dGVzdHJlYW0yX2dldF9idWZmZXJ1KAo+ICsgICAgICAgICAgICBn YmMsIHN0LT5wZW5kaW5nX2J1ZmZlci0+ZGF0YSArIG9sZF9zaXplICsgNCwgc2l6ZSk7Cj4gKyAg ICAgICAgaWYgKCgoYnl0ZSA+PiAxKSAmIDBiMTExMTExKSA8IDB4MjApIHsgLy8gYSBWQ0wgTkFM IHVuaXQKPiArICAgICAgICAgICAgLy8gQmVjYXVzZSB3ZSBjYW4ndCBlbWl0IGEgcGFja2V0IHdp dGhvdXQgYSB2YWxpZCBQVFMsIHdlCj4gbmVlZCB0bwo+ICsgICAgICAgICAgICAvLyBhZ2dyZWdh dGUgdGhlIG5vbi1WQ0wgTkFMIHVuaXRzIHdpdGggVkNMIG9uZXMuIEFsdGhvdWdoIHdlCj4gZGlk bid0Cj4gKyAgICAgICAgICAgIC8vIHRlY2huaWNhbGx5IGlkZW50aWZ5IGFuIGFjY2VzcyB1bml0 IGhlcmUsIHRoaXMgd29ya3MgZm9yCj4gYWxsIHNhbXBsZXMKPiArICAgICAgICAgICAgLy8gd2Ug aGF2ZS4KPiArICAgICAgICAgICAgYnVmX3JlZiA9IHN0LT5wZW5kaW5nX2J1ZmZlcjsKPiArICAg ICAgICAgICAgc3QtPnBlbmRpbmdfYnVmZmVyID0gTlVMTDsKPiArCj4gKyAgICAgICAgICAgIG1l bXNldChidWZfcmVmLT5kYXRhICsgb2xkX3NpemUgKyBzaXplICsgNCwgMCwKPiArICAgICAgICAg ICAgICAgICAgIEFWX0lOUFVUX0JVRkZFUl9QQURESU5HX1NJWkUpOwo+ICsgICAgICAgICAgICBy ZXR1cm4gZW1pdF9wYWNrZXQoY3R4LCBzdCwgYnVmX3JlZik7Cj4gKyAgICAgICAgfQo+ICsgICAg ICAgIHJldHVybiAwOwo+ICsgICAgY2FzZSBBVl9DT0RFQ19JRF9BQUNfTEFUTToKPiArICAgICAg ICBzaXplID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKTsKPiArICAgICAgICBpZiAo c2l6ZSA+PiAxMykgcmV0dXJuIEFWRVJST1IoRU9WRVJGTE9XKTsKPiArICAgICAgICBpZiAoKGJ1 Zl9yZWYgPSBhdl9idWZmZXJfYWxsb2MoCj4gKyAgICAgICAgICAgIHNpemUgKyAzICsgQVZfSU5Q VVRfQlVGRkVSX1BBRERJTkdfU0laRSkpID09IE5VTEwpCj4gKyAgICAgICAgICAgIHJldHVybiBB VkVSUk9SKEVOT01FTSk7Cj4gKyAgICAgICAgYnVmX3JlZi0+ZGF0YVswXSA9IDB4NTY7Cj4gKyAg ICAgICAgYnVmX3JlZi0+ZGF0YVsxXSA9IDB4ZTAgfCAoc2l6ZSA+PiA4KTsKPiArICAgICAgICBi dWZfcmVmLT5kYXRhWzJdID0gc2l6ZSAmIDB4ZmY7Cj4gKyAgICAgICAgYnl0ZXN0cmVhbTJfZ2V0 X2J1ZmZlcnUoZ2JjLCBidWZfcmVmLT5kYXRhICsgMywgc2l6ZSk7Cj4gKyAgICAgICAgbWVtc2V0 KGJ1Zl9yZWYtPmRhdGEgKyAzICsgc2l6ZSwgMCwgQVZfSU5QVVRfQlVGRkVSX1BBRERJTkdfU0la RSk7Cj4gKyAgICAgICAgcmV0dXJuIGVtaXRfcGFja2V0KGN0eCwgc3QsIGJ1Zl9yZWYpOwo+ICsg ICAgY2FzZSBBVl9DT0RFQ19JRF9UVE1MOgo+ICsgICAgICAgIHJldHVybiBlbWl0X2Nsb3NlZF9j YXB0aW9uX21mdShjdHgsIHN0LCBnYmMpOwo+ICsgICAgZGVmYXVsdDoKPiArICAgICAgICByZXR1 cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7Cj4gKyAgICB9Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg cGFyc2VfbWZ1X3RpbWVkX2RhdGEoCj4gKyAgICBNTVRQQ29udGV4dCAqY3R4LCBzdHJ1Y3QgRnJh Z21lbnRBc3NlbWJsZXIgKmFzc2VtYmxlciwKPiArICAgIHVpbnQzMl90IHNlcV9udW0sIGVudW0g RnJhZ21lbnRhdGlvbkluZGljYXRvciBpbmRpY2F0b3IsCj4gKyAgICBHZXRCeXRlQ29udGV4dCAq Z2JjKQo+ICt7Cj4gKyAgICBieXRlc3RyZWFtMl9za2lwKGdiYywgKDMyICsgMzIgKyAzMiArIDgg KyA4KSAvIDgpOwo+ICsgICAgcmV0dXJuIGFzc2VtYmxlX2ZyYWdtZW50KAo+ICsgICAgICAgIGFz c2VtYmxlciwgc2VxX251bSwgaW5kaWNhdG9yLAo+ICsgICAgICAgIGdiYy0+YnVmZmVyLCBieXRl c3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpLAo+ICsgICAgICAgIGNvbnN1bWVfbWZ1LCBjdHgp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHBhcnNlX21mdV9ub25fdGltZWRfZGF0YSgKPiArICAg IE1NVFBDb250ZXh0ICpjdHgsIHN0cnVjdCBGcmFnbWVudEFzc2VtYmxlciAqYXNzZW1ibGVyLAo+ ICsgICAgdWludDMyX3Qgc2VxX251bSwgZW51bSBGcmFnbWVudGF0aW9uSW5kaWNhdG9yIGluZGlj YXRvciwKPiArICAgIEdldEJ5dGVDb250ZXh0ICpnYmMpCj4gK3sKPiArICAgIGJ5dGVzdHJlYW0y X3NraXAoZ2JjLCAzMiAvIDgpOwo+ICsgICAgcmV0dXJuIGFzc2VtYmxlX2ZyYWdtZW50KAo+ICsg ICAgICAgIGFzc2VtYmxlciwgc2VxX251bSwgaW5kaWNhdG9yLAo+ICsgICAgICAgIGdiYy0+YnVm ZmVyLCBieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpLAo+ICsgICAgICAgIGNvbnN1bWVf bWZ1LCBjdHgpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHBhcnNlX21wdShNTVRQQ29udGV4dCAq Y3R4LCB1aW50MzJfdCBzZXFfbnVtLCBHZXRCeXRlQ29udGV4dAo+ICpnYmMpCj4gK3sKPiArICAg IGludCAgICAgICAgICAgICAgICAgICAgICAgICBlcnI7Cj4gKyAgICB1aW50OF90ICAgICAgICAg ICAgICAgICAgICAgYnl0ZSwgZnJhZ21lbnRfdHlwZTsKPiArICAgIGJvb2wgICAgICAgICAgICAg ICAgICAgICAgICB0aW1lZF9mbGFnOwo+ICsgICAgZW51bSBGcmFnbWVudGF0aW9uSW5kaWNhdG9y IGZyYWdtZW50YXRpb25faW5kaWNhdG9yOwo+ICsgICAgYm9vbCAgICAgICAgICAgICAgICAgICAg ICAgIGFnZ3JlZ2F0aW9uX2ZsYWc7Cj4gKyAgICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAg bGVuZ3RoOwo+ICsgICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgIG1wdV9zZXF1ZW5jZV9u dW1iZXI7Cj4gKyAgICBzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJsZXIgICAgKmFzc2VtYmxlcjsKPiAr ICAgIHN0cnVjdCBTdHJlYW1zICAgICAgICAgICAgICAqc3RyZWFtczsKPiArCj4gKyAgICBzdHJl YW1zID0gZmluZF9jdXJyZW50X3N0cmVhbShjdHgpOwo+ICsgICAgaWYgKHN0cmVhbXMgPT0gTlVM TCB8fCBzdHJlYW1zLT5zdHJlYW0tPmRpc2NhcmQgPj0gQVZESVNDQVJEX0FMTCkKPiArICAgICAg ICByZXR1cm4gMDsKPiArCj4gKyAgICBhc3NlbWJsZXIgPSBmaW5kX29yX2FsbG9jYXRlX2Fzc2Vt YmxlcihjdHgsIGN0eC0+Y3VycmVudF9waWQpOwo+ICsgICAgaWYgKGFzc2VtYmxlciA9PSBOVUxM KSByZXR1cm4gQVZFUlJPUihlcnJubyk7Cj4gKwo+ICsgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9i eXRlc19sZWZ0KGdiYykgPCAoMTYgKyA0ICsgMSArIDIgKyAxICsgOCArIDMyKSAvCj4gOCkKPiAr ICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArCj4gKyAgICBsZW5ndGggPSBi eXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2JjKTsKPiArICAgIGlmIChsZW5ndGggIT0gYnl0ZXN0cmVh bTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSkKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElE REFUQTsKPiArCj4gKyAgICBieXRlICAgICAgICAgICAgICAgICAgICA9IGJ5dGVzdHJlYW0yX2dl dF9ieXRldShnYmMpOwo+ICsgICAgZnJhZ21lbnRfdHlwZSAgICAgICAgICAgPSBieXRlID4+IDQ7 Cj4gKyAgICB0aW1lZF9mbGFnICAgICAgICAgICAgICA9IChieXRlID4+IDMpICYgMTsKPiArICAg IGZyYWdtZW50YXRpb25faW5kaWNhdG9yID0gKGJ5dGUgPj4gMSkgJiAwYjExOwo+ICsgICAgYWdn cmVnYXRpb25fZmxhZyAgICAgICAgPSBieXRlICYgMTsKPiArCj4gKyAgICAvLyBza2lwOiBmcmFn bWVudF9jb3VudGVyCj4gKyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIDEpOwo+ICsKPiArICAg IG1wdV9zZXF1ZW5jZV9udW1iZXIgPSBieXRlc3RyZWFtMl9nZXRfYmUzMnUoZ2JjKTsKPiArCj4g KyAgICBpZiAoYWdncmVnYXRpb25fZmxhZyAmJiBmcmFnbWVudGF0aW9uX2luZGljYXRvciAhPSBO T1RfRlJBR01FTlRFRCkKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsgLy8g Y2Fubm90IGJlIGJvdGggZnJhZ21lbnRlZCBhbmQKPiBhZ2dyZWdhdGVkCj4gKwo+ICsgICAgaWYg KGZyYWdtZW50X3R5cGUgIT0gMikKPiArICAgICAgICByZXR1cm4gMDsgLy8gbm90IE1GVQo+ICsK PiArICAgIGlmIChhc3NlbWJsZXItPnN0YXRlID09IElOSVQgJiYgIWN0eC0+aXNfcmFwKQo+ICsg ICAgICAgIHJldHVybiAwOyAvLyB3YWl0IGZvciB0aGUgZmlyc3QgUkFQCj4gKwo+ICsgICAgaWYg KGFzc2VtYmxlci0+c3RhdGUgPT0gSU5JVCkgewo+ICsgICAgICAgIHN0cmVhbXMtPmxhc3Rfc2Vx dWVuY2VfbnVtYmVyID0gbXB1X3NlcXVlbmNlX251bWJlcjsKPiArICAgIH0gZWxzZSBpZiAobXB1 X3NlcXVlbmNlX251bWJlciA9PSBzdHJlYW1zLT5sYXN0X3NlcXVlbmNlX251bWJlciArIDEpIHsK PiArICAgICAgICBzdHJlYW1zLT5sYXN0X3NlcXVlbmNlX251bWJlciA9IG1wdV9zZXF1ZW5jZV9u dW1iZXI7Cj4gKyAgICAgICAgc3RyZWFtcy0+YXVfY291bnQgICAgICAgICAgICAgPSAwOwo+ICsg ICAgfSBlbHNlIGlmIChtcHVfc2VxdWVuY2VfbnVtYmVyICE9IHN0cmVhbXMtPmxhc3Rfc2VxdWVu Y2VfbnVtYmVyKSB7Cj4gKyAgICAgICAgYXZfbG9nKHN0cmVhbXMtPnN0cmVhbSwgQVZfTE9HX0VS Uk9SLAo+ICsgICAgICAgICAgICAgICAiTVBVIHNlcXVlbmNlIG51bWJlciBqdW1wOiAldSArIDEg IT0gJXVcbiIsCj4gKyAgICAgICAgICAgICAgIHN0cmVhbXMtPmxhc3Rfc2VxdWVuY2VfbnVtYmVy LCBtcHVfc2VxdWVuY2VfbnVtYmVyKTsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElE REFUQTsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoKGVyciA9IGNoZWNrX3N0YXRlKGN0eCwgYXNz ZW1ibGVyLCBzZXFfbnVtKSkgPCAwKQo+ICsgICAgICAgIHJldHVybiBlcnI7Cj4gKwo+ICsgICAg aWYgKGZyYWdtZW50YXRpb25faW5kaWNhdG9yID09IE5PVF9GUkFHTUVOVEVEIHx8Cj4gKyAgICAg ICAgZnJhZ21lbnRhdGlvbl9pbmRpY2F0b3IgPT0gRklSU1RfRlJBR01FTlQpCj4gKyAgICAgICAg c3RyZWFtcy0+b2Zmc2V0ID0gY3R4LT5wa3QtPnBvczsKPiArCj4gKyAgICBpZiAoY3R4LT5pc19y YXApCj4gKyAgICAgICAgc3RyZWFtcy0+ZmxhZ3MgfD0gQVZfUEtUX0ZMQUdfS0VZOwo+ICsKPiAr ICAgIGlmICh0aW1lZF9mbGFnKSB7Cj4gKyAgICAgICAgaWYgKGFnZ3JlZ2F0aW9uX2ZsYWcpIHsK PiArICAgICAgICAgICAgd2hpbGUgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPiAw KSB7Cj4gKyAgICAgICAgICAgICAgICBsZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYmUxNihnYmMp Owo+ICsgICAgICAgICAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykg PCBsZW5ndGgpCj4gKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7Cj4gKyAgICAgICAgICAgICAgICB7Cj4gKyAgICAgICAgICAgICAgICAgICAgR2V0Qnl0ZUNv bnRleHQgbmdiYzsKPiArICAgICAgICAgICAgICAgICAgICBieXRlc3RyZWFtMl9pbml0KCZuZ2Jj LCBnYmMtPmJ1ZmZlciwgbGVuZ3RoKTsKPiArCj4gKyAgICAgICAgICAgICAgICAgICAgZXJyID0g cGFyc2VfbWZ1X3RpbWVkX2RhdGEoCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eCwgYXNz ZW1ibGVyLCBzZXFfbnVtLCBOT1RfRlJBR01FTlRFRCwgJm5nYmMpOwo+ICsgICAgICAgICAgICAg ICAgICAgIGlmIChlcnIgPCAwKSByZXR1cm4gZXJyOwo+ICsgICAgICAgICAgICAgICAgfQo+ICsg ICAgICAgICAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCBsZW5ndGgpOwo+ICsgICAgICAg ICAgICB9Cj4gKyAgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgcmV0dXJuIHBhcnNlX21m dV90aW1lZF9kYXRhKAo+ICsgICAgICAgICAgICAgICAgY3R4LCBhc3NlbWJsZXIsIHNlcV9udW0s IGZyYWdtZW50YXRpb25faW5kaWNhdG9yLCBnYmMpOwo+ICsgICAgICAgIH0KPiArICAgIH0gZWxz ZSB7Cj4gKyAgICAgICAgaWYgKGFnZ3JlZ2F0aW9uX2ZsYWcpIHsKPiArICAgICAgICAgICAgd2hp bGUgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPiAwKSB7Cj4gKyAgICAgICAgICAg ICAgICBsZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYmUxNihnYmMpOwo+ICsgICAgICAgICAgICAg ICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCBsZW5ndGgpCj4gKyAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICAgICAgICAg ICAgICB7Cj4gKyAgICAgICAgICAgICAgICAgICAgR2V0Qnl0ZUNvbnRleHQgbmdiYzsKPiArICAg ICAgICAgICAgICAgICAgICBieXRlc3RyZWFtMl9pbml0KCZuZ2JjLCBnYmMtPmJ1ZmZlciwgbGVu Z3RoKTsKPiArCj4gKyAgICAgICAgICAgICAgICAgICAgZXJyID0gcGFyc2VfbWZ1X25vbl90aW1l ZF9kYXRhKAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBjdHgsIGFzc2VtYmxlciwgc2VxX251 bSwgTk9UX0ZSQUdNRU5URUQsICZuZ2JjKTsKPiArICAgICAgICAgICAgICAgICAgICBpZiAoZXJy IDwgMCkgcmV0dXJuIGVycjsKPiArICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgICAg IGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgbGVuZ3RoKTsKPiArICAgICAgICAgICAgfQo+ICsgICAg ICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAgIHJldHVybiBwYXJzZV9tZnVfbm9uX3RpbWVkX2Rh dGEoCj4gKyAgICAgICAgICAgICAgICBjdHgsIGFzc2VtYmxlciwgc2VxX251bSwgZnJhZ21lbnRh dGlvbl9pbmRpY2F0b3IsIGdiYyk7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIHJl dHVybiAwOwo+ICt9Cj4gKwo+ICtNTVRQQ29udGV4dCAqZmZfbW10cF9wYXJzZV9vcGVuKEFWUHJv Z3JhbSAqcHJvZ3JhbSkKPiArewo+ICsgICAgTU1UUENvbnRleHQgKmN0eCA9IGF2X21hbGxvY3oo c2l6ZW9mKE1NVFBDb250ZXh0KSk7Cj4gKyAgICBpZiAoY3R4ID09IE5VTEwpIHJldHVybiBOVUxM Owo+ICsgICAgY3R4LT5wcm9ncmFtID0gcHJvZ3JhbTsKPiArICAgIHJldHVybiBjdHg7Cj4gK30K PiArCj4gK2ludCBmZl9tbXRwX3BhcnNlX3BhY2tldChNTVRQQ29udGV4dCAqY3R4LCBBVkZvcm1h dENvbnRleHQgKnMsIEFWUGFja2V0Cj4gKnBrdCwKPiArICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgdWludDE2X3Qgc2l6ZSkKPiArewo+ICsgICAgYm9vbCAgICAg cGFja2V0X2NvdW50ZXJfZmxhZzsKPiArICAgIGJvb2wgICAgIGV4dGVuc2lvbl9oZWFkZXJfZmxh ZzsKPiArICAgIHVpbnQ4X3QgIHBheWxvYWRfdHlwZTsKPiArICAgIHVpbnQzMl90IHBhY2tldF9z ZXF1ZW5jZV9udW1iZXI7Cj4gKyAgICB1aW50OF90ICBieXRlOwo+ICsgICAgaW50ICAgICAgZXJy ID0gMDsKPiArCj4gKyAgICBHZXRCeXRlQ29udGV4dCBnYmM7Cj4gKwo+ICsgICAgY3R4LT5zICAg PSBzOwo+ICsgICAgY3R4LT5wa3QgPSBwa3Q7Cj4gKwo+ICsgICAgYnl0ZXN0cmVhbTJfaW5pdCgm Z2JjLCBidWYsIHNpemUpOwo+ICsgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZn YmMpIDwKPiArICAgICAgICAoMiArIDEgKyAyICsgMSArIDEgKyAxICsgMiArIDYgKyAxNiArIDMy ICsgMzIpIC8gOCkKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArCj4g KyAgICBieXRlICAgICAgICAgICAgICAgICAgPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoJmdiYyk7 Cj4gKyAgICBwYWNrZXRfY291bnRlcl9mbGFnICAgPSAoYnl0ZSA+PiA1KSAmIDE7Cj4gKyAgICBl eHRlbnNpb25faGVhZGVyX2ZsYWcgPSAoYnl0ZSA+PiAxKSAmIDE7Cj4gKyAgICBjdHgtPmlzX3Jh cCA9IGJ5dGUgJiAxOwo+ICsKPiArICAgIGJ5dGUgICAgICAgICA9IGJ5dGVzdHJlYW0yX2dldF9i eXRldSgmZ2JjKTsKPiArICAgIHBheWxvYWRfdHlwZSA9IGJ5dGUgJiAwYjExMTExMTsKPiArCj4g KyAgICBjdHgtPmN1cnJlbnRfcGlkID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KCZnYmMpOwo+ICsK PiArICAgIC8vIHNraXA6IGRpc3RyaWJ1dGVfdGltZXN0YW1wCj4gKyAgICBieXRlc3RyZWFtMl9z a2lwdSgmZ2JjLCA0KTsKPiArCj4gKyAgICBwYWNrZXRfc2VxdWVuY2VfbnVtYmVyID0gYnl0ZXN0 cmVhbTJfZ2V0X2JlMzJ1KCZnYmMpOwo+ICsKPiArICAgIGlmIChwYWNrZXRfY291bnRlcl9mbGFn KQo+ICsgICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoJmdiYywgNCk7Cj4gKwo+ICsgICAgaWYgKGV4 dGVuc2lvbl9oZWFkZXJfZmxhZykgewo+ICsgICAgICAgIHVpbnQxNl90IGV4dGVuc2lvbl9oZWFk ZXJfbGVuZ3RoOwo+ICsgICAgICAgIC8vIHNraXA6IGV4dGVuc2lvbl90eXBlCj4gKyAgICAgICAg Ynl0ZXN0cmVhbTJfc2tpcCgmZ2JjLCAyKTsKPiArICAgICAgICBleHRlbnNpb25faGVhZGVyX2xl bmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2KCZnYmMpOwo+ICsgICAgICAgIGJ5dGVzdHJlYW0y X3NraXAoJmdiYywgZXh0ZW5zaW9uX2hlYWRlcl9sZW5ndGgpOwo+ICsgICAgfQo+ICsKPiArICAg IHN3aXRjaCAocGF5bG9hZF90eXBlKSB7Cj4gKyAgICBjYXNlIDB4MDA6IC8vIE1QVQo+ICsgICAg ICAgIGlmIChwa3QgIT0gTlVMTCkKPiArICAgICAgICAgICAgZXJyID0gcGFyc2VfbXB1KGN0eCwg cGFja2V0X3NlcXVlbmNlX251bWJlciwgJmdiYyk7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBj YXNlIDB4MDI6IC8vIHNpZ25hbGxpbmcgbWVzc2FnZXMKPiArICAgICAgICBlcnIgPSBwYXJzZV9z aWduYWxsaW5nX21lc3NhZ2VzKGN0eCwgcGFja2V0X3NlcXVlbmNlX251bWJlciwKPiAmZ2JjKTsK PiArICAgICAgICBicmVhazsKPiArICAgIH0KPiArICAgIGlmIChlcnIgPCAwKSByZXR1cm4gZXJy Owo+ICsgICAgcmV0dXJuIGN0eC0+cGt0ID09IE5VTEwgPyAwIDogRkZFUlJPUl9SRURPOwo+ICt9 Cj4gKwo+ICt2b2lkIGZmX21tdHBfcmVzZXRfc3RhdGUoTU1UUENvbnRleHQgKmN0eCkKPiArewo+ ICsgICAgc3RydWN0IFN0cmVhbXMgICAgICAgICAgICpzdHJlYW1zOwo+ICsgICAgc3RydWN0IEZy YWdtZW50QXNzZW1ibGVyICphc3NlbWJsZXI7Cj4gKwo+ICsgICAgZm9yIChhc3NlbWJsZXIgPSBj dHgtPmFzc2VtYmxlcjsKPiArICAgICAgICAgYXNzZW1ibGVyICE9IE5VTEw7IGFzc2VtYmxlciA9 IGFzc2VtYmxlci0+bmV4dCkgewo+ICsgICAgICAgIGFzc2VtYmxlci0+c3RhdGUgPSBJTklUOwo+ ICsgICAgICAgIGFzc2VtYmxlci0+c2l6ZSAgPSAwOwo+ICsgICAgfQo+ICsgICAgZm9yIChzdHJl YW1zID0gY3R4LT5zdHJlYW1zOyBzdHJlYW1zICE9IE5VTEw7IHN0cmVhbXMgPQo+IHN0cmVhbXMt Pm5leHQpIHsKPiArICAgICAgICBzdHJlYW1zLT5sYXN0X3NlcXVlbmNlX251bWJlciA9IDA7Cj4g KyAgICAgICAgc3RyZWFtcy0+YXVfY291bnQgICAgICAgICAgICAgPSAwOwo+ICsgICAgICAgIHN0 cmVhbXMtPmZsYWdzICAgICAgICAgICAgICAgID0gMDsKPiArICAgICAgICBzdHJlYW1zLT5vZmZz ZXQgICAgICAgICAgICAgICA9IC0xOwo+ICsgICAgICAgIGF2X2J1ZmZlcl91bnJlZigmc3RyZWFt cy0+cGVuZGluZ19idWZmZXIpOwo+ICsgICAgfQo+ICt9Cj4gKwo+ICt2b2lkIGZmX21tdHBfcGFy c2VfY2xvc2UoTU1UUENvbnRleHQgKmN0eCkKPiArewo+ICsgICAgc3RydWN0IEZyYWdtZW50QXNz ZW1ibGVyICphc3M7Cj4gKyAgICBzdHJ1Y3QgU3RyZWFtcyAgICAgICAgICAgKnN0cmVhbXM7Cj4g Kwo+ICsgICAgZm9yIChhc3MgPSBjdHgtPmFzc2VtYmxlcjsgYXNzICE9IE5VTEw7KSB7Cj4gKyAg ICAgICAgc3RydWN0IEZyYWdtZW50QXNzZW1ibGVyICpuZXh0ID0gYXNzLT5uZXh0Owo+ICsgICAg ICAgIGF2X2ZyZWUoYXNzLT5kYXRhKTsKPiArICAgICAgICBhdl9mcmVlKGFzcyk7Cj4gKyAgICAg ICAgYXNzID0gbmV4dDsKPiArICAgIH0KPiArCj4gKyAgICBmb3IgKHN0cmVhbXMgPSBjdHgtPnN0 cmVhbXM7IHN0cmVhbXMgIT0gTlVMTDspIHsKPiArICAgICAgICBzdHJ1Y3QgU3RyZWFtcyAqbmV4 dCA9IHN0cmVhbXMtPm5leHQ7Cj4gKyAgICAgICAgYXZfZnJlZShzdHJlYW1zLT50aW1lc3RhbXBf ZGVzY3JpcHRvcik7Cj4gKyAgICAgICAgYXZfZnJlZShzdHJlYW1zLT5leHRfdGltZXN0YW1wX2Rl c2NyaXB0b3IpOwo+ICsgICAgICAgIGF2X2J1ZmZlcl91bnJlZigmc3RyZWFtcy0+cGVuZGluZ19i dWZmZXIpOwo+ICsgICAgICAgIGF2X2ZyZWUoc3RyZWFtcyk7Cj4gKyAgICAgICAgc3RyZWFtcyA9 IG5leHQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgYXZfZnJlZShjdHgpOwo+ICt9Cj4gZGlmZiAtLWdp dCBhL2xpYmF2Zm9ybWF0L21tdHAuaCBiL2xpYmF2Zm9ybWF0L21tdHAuaAo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMC4uMzAwYTZhMWFlYQo+IC0tLSAvZGV2L251bGwK PiArKysgYi9saWJhdmZvcm1hdC9tbXRwLmgKPiBAQCAtMCwwICsxLDY0IEBACj4gKy8qCj4gKyAq IE1QRUcgTWVkaWEgVHJhbnNwb3J0IFByb3RvY29sIChNTVRQKSBwYXJzZXIsIGFzIGRlZmluZWQg aW4gSVNPL0lFQwo+IDIzMDA4LTEuCj4gKyAqIENvcHlyaWdodCAoYykgMjAyMyBTdXBlckZhc2hp Cj4gKyAqCj4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiArICoKPiArICogRkZt cGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ICsg KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi bGljCj4gKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlcgo+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiArICoKPiArICogRkZtcGVnIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4g KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUgR05VCj4gKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCj4gKyAqCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZG bXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBGb3VuZGF0aW9u LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCj4gMDIx MTAtMTMwMSBVU0EKPiArICovCj4gKyNpZm5kZWYgQVZGT1JNQVRfTU1UUF9ICj4gKyNkZWZpbmUg QVZGT1JNQVRfTU1UUF9ICj4gKwo+ICsjaW5jbHVkZSAiYXZmb3JtYXQuaCIKPiArCj4gK3R5cGVk ZWYgc3RydWN0IE1NVFBDb250ZXh0IE1NVFBDb250ZXh0Owo+ICsKPiArLyoqCj4gKyAqIE9wZW4g YW4gTU1UIHByb3RvY29sIHBhcnNlciBjb250ZXh0Lgo+ICsgKiBAcGFyYW0gcHJvZ3JhbSBUaGUg QVZQcm9ncmFtIHRoaXMgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGguCj4gKyAqIEByZXR1cm4g QSBuZXcgTU1UUENvbnRleHQsIG9yIE5VTEwgb24gYWxsb2NhdGlvbiBlcnJvci4KPiArICovCj4g K01NVFBDb250ZXh0ICpmZl9tbXRwX3BhcnNlX29wZW4oQVZQcm9ncmFtICpwcm9ncmFtKTsKPiAr Cj4gKy8qKgo+ICsgKiBQYXJzZSBhbiBNTVQgcHJvdG9jb2wgcGFja2V0Lgo+ICsgKgo+ICsgKiBA cGFyYW0gY3R4IFRoZSBNTVQgcHJvdG9jb2wgcGFyc2VyIGNvbnRleHQuCj4gKyAqIEBwYXJhbSBz IFRoZSBBVkZvcm1hdENvbnRleHQuCj4gKyAqIEBwYXJhbSBwa3QgVGhlIEFWUGFja2V0IHRvIGZp bGwuCj4gKyAqIEBwYXJhbSBidWYgVGhlIHBhY2tldCBkYXRhLgo+ICsgKiBAcGFyYW0gc2l6ZSBU aGUgc2l6ZSBvZiB0aGUgcGFja2V0IGRhdGEuCj4gKyAqIEByZXR1cm4gPj0gMCBpZiBhIG5ldyBB VlBhY2tldCBpcyBlbWl0dGVkLAo+ICsgKiAgICAgICAgIEZGRVJST1JfUkVETyBpZiB0aGUgbmV4 dCBwYWNrZXQgaXMgbmVlZGVkLAo+ICsgKiAgICAgICAgIG9yIGFub3RoZXIgbmVnYXRpdmUgdmFs dWUgb24gZXJyb3IuCj4gKyAqLwo+ICtpbnQgZmZfbW10cF9wYXJzZV9wYWNrZXQoTU1UUENvbnRl eHQgKmN0eCwgQVZGb3JtYXRDb250ZXh0ICpzLCBBVlBhY2tldAo+ICpwa3QsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpidWYsIHVpbnQxNl90IHNpemUpOwo+ICsK PiArLyoqCj4gKyAqIFJlc2V0IHRoZSBzdGF0ZSBvZiB0aGUgTU1UUCBwYXJzZXIuIFVzZWZ1bCB3 aGVuIHNlZWtpbmcuCj4gKyAqCj4gKyAqIEBwYXJhbSBjdHggVGhlIE1NVCBwcm90b2NvbCBwYXJz ZXIgY29udGV4dC4KPiArICovCj4gK3ZvaWQgZmZfbW10cF9yZXNldF9zdGF0ZShNTVRQQ29udGV4 dCAqY3R4KTsKPiArCj4gKy8qKgo+ICsgKiBDbG9zZSBhbiBNTVQgcHJvdG9jb2wgcGFyc2VyIGNv bnRleHQsIGZyZWVzIGFsbCBhc3NvY2lhdGVkIHJlc291cmNlcy4KPiArICoKPiArICogQHBhcmFt IGN0eCBUaGUgTU1UIHByb3RvY29sIHBhcnNlciBjb250ZXh0Lgo+ICsgKi8KPiArdm9pZCBmZl9t bXRwX3BhcnNlX2Nsb3NlKE1NVFBDb250ZXh0ICpjdHgpOwo+ICsKPiArI2VuZGlmIC8qIEFWRk9S TUFUX01NVFBfSCAqLwo+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9tbXR0bHYuYyBiL2xpYmF2 Zm9ybWF0L21tdHRsdi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAw Li42MjI4NDBlNGExCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYmF2Zm9ybWF0L21tdHRsdi5j Cj4gQEAgLTAsMCArMSwzMzUgQEAKPiArLyoKPiArICogTU1UIHByb3RvY29sIG92ZXIgVExWIHBh Y2tldHMgKE1NVC9UTFYpIGRlbXV4ZXIsIGFzIGRlZmluZWQgaW4gQVJJQgo+IFNURC1CMzIuCj4g KyAqIENvcHlyaWdodCAoYykgMjAyMyBTdXBlckZhc2hpCj4gKyAqCj4gKyAqIFRoaXMgZmlsZSBp cyBwYXJ0IG9mIEZGbXBlZy4KPiArICoKPiArICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgo+ICsgKiB2ZXJz aW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KPiArICoKPiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCj4gKyAqIExlc3Nl ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKPiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0 aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCj4gMDIxMTAtMTMwMSBVU0EKPiArICovCj4gKwo+ ICsjaW5jbHVkZSAibGliYXZ1dGlsL2F2YXNzZXJ0LmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwv aW50ZXJuYWwuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9pbnRyZWFkd3JpdGUuaCIKPiArI2lu Y2x1ZGUgImF2Zm9ybWF0LmgiCj4gKyNpbmNsdWRlICJhdmlvX2ludGVybmFsLmgiCj4gKyNpbmNs dWRlICJkZW11eC5oIgo+ICsjaW5jbHVkZSAiaW50ZXJuYWwuaCIKPiArI2luY2x1ZGUgIm1tdHAu aCIKPiArCj4gKyNkZWZpbmUgSEVBREVSX0JZVEUgMGIwMTExMTExMQo+ICsKPiArZW51bSB7Cj4g KyAgICBVTkRFRklORURfUEFDS0VUICAgICAgICAgICAgPSAweDAwLAo+ICsgICAgSVBWNF9QQUNL RVQgICAgICAgICAgICAgICAgID0gMHgwMSwKPiArICAgIElQVjZfUEFDS0VUICAgICAgICAgICAg ICAgICA9IDB4MDIsCj4gKyAgICBIRUFERVJfQ09NUFJFU1NFRF9JUF9QQUNLRVQgPSAweDAzLAo+ ICsgICAgVFJBTlNNSVNTSU9OX0NPTlRST0xfUEFDS0VUID0gMHhGRSwKPiArICAgIE5VTExfUEFD S0VUICAgICAgICAgICAgICAgICA9IDB4RkYsCj4gK307Cj4gKwo+ICtlbnVtIHsKPiArICAgIENP TlRFWFRfSURFTlRJRklDQVRJT05fUEFSVElBTF9JUFY0X0FORF9QQVJUSUFMX1VEUF9IRUFERVIg PSAweDIwLAo+ICsgICAgQ09OVEVYVF9JREVOVElGSUNBVElPTl9JUFY0X0hFQURFUiAgICAgICAg ICAgICAgICAgICAgICAgICA9IDB4MjEsCj4gKyAgICBDT05URVhUX0lERU5USUZJQ0FUSU9OX1BB UlRJQUxfSVBWNl9BTkRfUEFSVElBTF9VRFBfSEVBREVSID0gMHg2MCwKPiArICAgIENPTlRFWFRf SURFTlRJRklDQVRJT05fTk9fQ09NUFJFU1NFRF9IRUFERVIgICAgICAgICAgICAgICAgPSAweDYx LAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBtbXR0bHZfcHJvYmUoY29uc3QgQVZQcm9iZURhdGEg KnApCj4gK3sKPiArICAgIHNpemVfdCAgIGksIGo7Cj4gKyAgICB1aW50OF90ICBwYWNrZXRfdHlw ZTsKPiArICAgIHVpbnQxNl90IGRhdGFfbGVuZ3RoOwo+ICsKPiArICAgIGludCBwcm9jZXNzZWQg ID0gMDsKPiArICAgIGludCByZWNvZ25pemVkID0gMDsKPiArCj4gKyAgICBmb3IgKGkgPSAwOyBp ICsgNCA8IHAtPmJ1Zl9zaXplICYmIHByb2Nlc3NlZCA8IDEwMDsgKytwcm9jZXNzZWQpIHsKPiAr ICAgICAgICBpZiAocC0+YnVmW2ldICE9IEhFQURFUl9CWVRFKSByZXR1cm4gMDsKPiArCj4gKyAg ICAgICAgcGFja2V0X3R5cGUgPSBwLT5idWZbaSArIDFdOwo+ICsgICAgICAgIGRhdGFfbGVuZ3Ro ID0gQVZfUkIxNihwLT5idWYgKyBpICsgMik7Cj4gKyAgICAgICAgaSArPSA0Owo+ICsKPiArICAg ICAgICBpZiAocGFja2V0X3R5cGUgPT0gSEVBREVSX0NPTVBSRVNTRURfSVBfUEFDS0VUKSB7Cj4g KyAgICAgICAgICAgIGlmIChkYXRhX2xlbmd0aCA8IDMgfHwgaSArIDIgPj0gcC0+YnVmX3NpemUp IGdvdG8gc2tpcDsKPiArICAgICAgICAgICAgc3dpdGNoIChwLT5idWZbaSArIDJdKSB7Cj4gKyAg ICAgICAgICAgIGNhc2UKPiBDT05URVhUX0lERU5USUZJQ0FUSU9OX1BBUlRJQUxfSVBWNF9BTkRf UEFSVElBTF9VRFBfSEVBREVSOgo+ICsgICAgICAgICAgICBjYXNlIENPTlRFWFRfSURFTlRJRklD QVRJT05fSVBWNF9IRUFERVI6Cj4gKyAgICAgICAgICAgIGNhc2UKPiBDT05URVhUX0lERU5USUZJ Q0FUSU9OX1BBUlRJQUxfSVBWNl9BTkRfUEFSVElBTF9VRFBfSEVBREVSOgo+ICsgICAgICAgICAg ICBjYXNlIENPTlRFWFRfSURFTlRJRklDQVRJT05fTk9fQ09NUFJFU1NFRF9IRUFERVI6Cj4gKyAg ICAgICAgICAgICAgICArK3JlY29nbml6ZWQ7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICB9 IGVsc2UgaWYgKHBhY2tldF90eXBlID09IE5VTExfUEFDS0VUKSB7Cj4gKyAgICAgICAgICAgIC8v IG51bGwgcGFja2V0cyBzaG91bGQgY29udGFpbiBhbGwgMHhGRnMKPiArICAgICAgICAgICAgZm9y IChqID0gaTsgaiA8IGkgKyBkYXRhX2xlbmd0aCAmJiBqIDwgcC0+YnVmX3NpemU7ICsraikgewo+ ICsgICAgICAgICAgICAgICAgaWYgKHAtPmJ1ZltqXSAhPSAweEZGKSBnb3RvIHNraXA7Cj4gKyAg ICAgICAgICAgIH0KPiArICAgICAgICAgICAgKytyZWNvZ25pemVkOwo+ICsgICAgICAgIH0KPiAr Cj4gKyAgICAgICAgc2tpcDoKPiArICAgICAgICBpICs9IGRhdGFfbGVuZ3RoOwo+ICsgICAgfQo+ ICsKPiArICAgIHJldHVybiByZWNvZ25pemVkICogQVZQUk9CRV9TQ09SRV9NQVggLyBGRk1BWChw cm9jZXNzZWQsIDEwKTsKPiArfQo+ICsKPiArc3RydWN0IE1NVFRMVkNvbnRleHQgewo+ICsgICAg c3RydWN0IFByb2dyYW0gewo+ICsgICAgICAgIHVpbnQzMl90ICAgICAgIGNpZDsKPiArICAgICAg ICBNTVRQQ29udGV4dCAgICAqbW10cDsKPiArICAgICAgICBzdHJ1Y3QgUHJvZ3JhbSAqbmV4dDsK PiArICAgIH0gKnByb2dyYW1zOwo+ICsKPiArICAgIGludDY0X3QgbGFzdF9wb3M7Cj4gKyAgICBz aXplX3QgIHJlc3luY19zaXplOwo+ICsKPiArICAgIHNpemVfdCAgY2FwOwo+ICsgICAgdWludDhf dCAqYnVmOwo+ICt9Owo+ICsKPiArc3RhdGljIGludCBtbXR0bHZfcmVhZF9jb21wcmVzc2VkX2lw X3BhY2tldCgKPiArICAgIHN0cnVjdCBNTVRUTFZDb250ZXh0ICpjdHgsIEFWRm9ybWF0Q29udGV4 dCAqcywgQVZQYWNrZXQgKnBrdCwKPiArICAgIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgdWludDE2X3Qg c2l6ZSkKPiArewo+ICsgICAgLy8gcGFydGlhbCB1ZHAgaGVhZGVyIGFyZSB1ZHAgaGVhZGVyIHdp dGhvdXQgZGF0YSBsZW5ndGggKDE2IGJpdHMpCj4gYW5kIGNoZWNrc3VtICgxNiBiaXRzKQo+ICsj ZGVmaW5lIFBBUlRJQUxfVURQX0hFQURFUl9MRU5HVEggKDggLSA0KQo+ICsgICAgLy8gcGFydGlh bCBpcHY2IGhlYWRlciBhcmUgaXB2NiBoZWFkZXIgd2l0aG91dCBwYXlsb2FkIGxlbmd0aCAoMTYK PiBiaXRzKQo+ICsjZGVmaW5lIFBBUlRJQUxfSVBWNl9IRUFERVJfTEVOR1RIICg0MCAtIDIpCj4g Kwo+ICsgICAgdWludDMyX3QgICAgICAgY29udGV4dF9pZDsKPiArICAgIHN0cnVjdCBQcm9ncmFt ICpwcm9ncmFtOwo+ICsKPiArICAgIGlmIChzaXplIDwgMykKPiArICAgICAgICByZXR1cm4gQVZF UlJPUl9JTlZBTElEREFUQTsKPiArICAgIGNvbnRleHRfaWQgPSBBVl9SQjE2KGJ1ZikgPj4gNDsK PiArICAgIGJ1ZiArPSAzOwo+ICsgICAgc2l6ZSAtPSAzOwo+ICsKPiArICAgIGZvciAocHJvZ3Jh bSA9IGN0eC0+cHJvZ3JhbXM7IHByb2dyYW0gIT0gTlVMTDsgcHJvZ3JhbSA9Cj4gcHJvZ3JhbS0+ bmV4dCkKPiArICAgICAgICBpZiAocHJvZ3JhbS0+Y2lkID09IGNvbnRleHRfaWQpCj4gKyAgICAg ICAgICAgIGJyZWFrOwo+ICsKPiArICAgIGlmIChwcm9ncmFtID09IE5VTEwpIHsKPiArICAgICAg ICBBVlByb2dyYW0gKnAgPSBhdl9uZXdfcHJvZ3JhbShzLCBjb250ZXh0X2lkKTsKPiArICAgICAg ICBpZiAocCA9PSBOVUxMKSByZXR1cm4gQVZFUlJPUihlcnJubyk7Cj4gKwo+ICsgICAgICAgIHBy b2dyYW0gPSBhdl9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBQcm9ncmFtKSk7Cj4gKyAgICAgICAgaWYg KHByb2dyYW0gPT0gTlVMTCkgcmV0dXJuIEFWRVJST1IoZXJybm8pOwo+ICsKPiArICAgICAgICBw cm9ncmFtLT5tbXRwID0gZmZfbW10cF9wYXJzZV9vcGVuKHApOwo+ICsgICAgICAgIHByb2dyYW0t Pm5leHQgPSBjdHgtPnByb2dyYW1zOwo+ICsgICAgICAgIGN0eC0+cHJvZ3JhbXMgPSBwcm9ncmFt Owo+ICsgICAgICAgIHByb2dyYW0tPmNpZCAgPSBjb250ZXh0X2lkOwo+ICsgICAgfQo+ICsKPiAr ICAgIHN3aXRjaCAoYnVmWy0xXSkgewo+ICsgICAgY2FzZSBDT05URVhUX0lERU5USUZJQ0FUSU9O X1BBUlRJQUxfSVBWNF9BTkRfUEFSVElBTF9VRFBfSEVBREVSOgo+ICsgICAgY2FzZSBDT05URVhU X0lERU5USUZJQ0FUSU9OX0lQVjRfSEVBREVSOgo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX1BB VENIV0VMQ09NRTsKPiArICAgIGNhc2UgQ09OVEVYVF9JREVOVElGSUNBVElPTl9QQVJUSUFMX0lQ VjZfQU5EX1BBUlRJQUxfVURQX0hFQURFUjoKPiArICAgICAgICBpZiAoc2l6ZSA8IFBBUlRJQUxf SVBWNl9IRUFERVJfTEVOR1RIICsgUEFSVElBTF9VRFBfSEVBREVSX0xFTkdUSCkKPiArICAgICAg ICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICAgICAgc2l6ZSAtPSBQQVJU SUFMX0lQVjZfSEVBREVSX0xFTkdUSCArIFBBUlRJQUxfVURQX0hFQURFUl9MRU5HVEg7Cj4gKyAg ICAgICAgYnVmICs9IFBBUlRJQUxfSVBWNl9IRUFERVJfTEVOR1RIICsgUEFSVElBTF9VRFBfSEVB REVSX0xFTkdUSDsKPiArICAgIGNhc2UgQ09OVEVYVF9JREVOVElGSUNBVElPTl9OT19DT01QUkVT U0VEX0hFQURFUjoKPiArICAgICAgICBicmVhazsKPiArICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAg cmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIGZm X21tdHBfcGFyc2VfcGFja2V0KHByb2dyYW0tPm1tdHAsIHMsIHBrdCwgYnVmLCBzaXplKTsKPiAr fQo+ICsKPiArc3RhdGljIGludCBtbXR0bHZfcmVhZF9wYWNrZXQoQVZGb3JtYXRDb250ZXh0ICpz LCBBVlBhY2tldCAqcGt0KQo+ICt7Cj4gKyAgICB1aW50OF90ICAgICAgICAgICAgICBoZWFkZXJb NF07Cj4gKyAgICB1aW50MTZfdCAgICAgICAgICAgICBzaXplOwo+ICsgICAgaW50ICAgICAgICAg ICAgICAgICAgZXJyOwo+ICsgICAgc3RydWN0IE1NVFRMVkNvbnRleHQgKmN0eCA9IHMtPnByaXZf ZGF0YTsKPiArICAgIGludDY0X3QgICAgICAgICAgICAgIHBvcyAgPSBhdmlvX3RlbGwocy0+cGIp Owo+ICsKPiArICAgIGlmIChwb3MgPCAwKSByZXR1cm4gKGludCkgcG9zOwo+ICsgICAgaWYgKHBv cyAhPSBjdHgtPmxhc3RfcG9zKSB7Cj4gKyAgICAgICAgY3R4LT5sYXN0X3BvcyA9IHBvczsKPiAr Cj4gKyAgICAgICAgd2hpbGUgKHBvcyAtIGN0eC0+bGFzdF9wb3MgPCBjdHgtPnJlc3luY19zaXpl KSB7Cj4gKyAgICAgICAgICAgIGlmICgoZXJyID0gZmZpb19lbnN1cmVfc2Vla2JhY2socy0+cGIs IDQpKSA8IDApCj4gKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwo+ICsKPiArICAgICAgICAg ICAgaWYgKChlcnIgPSBhdmlvX3JlYWQocy0+cGIsIGhlYWRlciwgNCkpIDwgMCkKPiArICAgICAg ICAgICAgICAgIHJldHVybiBhdmlvX2Zlb2Yocy0+cGIpID8gQVZFUlJPUl9FT0YgOiBlcnI7Cj4g Kwo+ICsgICAgICAgICAgICBpZiAoaGVhZGVyWzBdICE9IEhFQURFUl9CWVRFKSB7Cj4gKyAgICAg ICAgICAgICAgICBpZiAoKHBvcyA9IGF2aW9fc2VlayhzLT5wYiwgLTMsIFNFRUtfQ1VSKSkgPCAw KQo+ICsgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaW50KSBwb3M7Cj4gKyAgICAgICAgICAg ICAgICBjb250aW51ZTsKPiArICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgc2l6ZSA9 IEFWX1JCMTYoaGVhZGVyICsgMik7Cj4gKwo+ICsgICAgICAgICAgICBpZiAoKHBvcyA9IGF2aW9f c2VlayhzLT5wYiwgLTQsIFNFRUtfQ1VSKSkgPCAwKQo+ICsgICAgICAgICAgICAgICAgcmV0dXJu IChpbnQpIHBvczsKPiArCj4gKyAgICAgICAgICAgIGlmICgoZXJyID0gZmZpb19lbnN1cmVfc2Vl a2JhY2socy0+cGIsIDQgKyBzaXplICsgMSkpIDwgMCkKPiArICAgICAgICAgICAgICAgIHJldHVy biBlcnI7Cj4gKwo+ICsgICAgICAgICAgICBpZiAoKHBvcyA9IGF2aW9fc2tpcChzLT5wYiwgNCAr IHNpemUpKSA8IDApCj4gKyAgICAgICAgICAgICAgICByZXR1cm4gKGludCkgcG9zOwo+ICsKPiAr ICAgICAgICAgICAgaWYgKChlcnIgPSBhdmlvX3JlYWQocy0+cGIsIGhlYWRlciwgMSkpIDwgMCkK PiArICAgICAgICAgICAgICAgIHJldHVybiBhdmlvX2Zlb2Yocy0+cGIpID8gQVZFUlJPUl9FT0Yg OiBlcnI7Cj4gKwo+ICsgICAgICAgICAgICBpZiAoaGVhZGVyWzBdID09IEhFQURFUl9CWVRFKSB7 Cj4gKyAgICAgICAgICAgICAgICAvLyBmb3VuZCBIRUFERVIsIFtzaXplXSwgSEVBREVSLCBzaG91 bGQgYmUgZ29vZAo+ICsgICAgICAgICAgICAgICAgaWYgKChwb3MgPSBhdmlvX3NlZWsocy0+cGIs IC1zaXplIC0gMSAtIDQsIFNFRUtfQ1VSKSkgPCAwKQo+ICsgICAgICAgICAgICAgICAgICAgIHJl dHVybiAoaW50KSBwb3M7Cj4gKyAgICAgICAgICAgICAgICBnb3RvIHN1Y2Nlc3M7Cj4gKyAgICAg ICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgIGlmICgocG9zID0gYXZpb19zZWVrKHMtPnBiLCAt c2l6ZSAtIDEgLSAzLCBTRUVLX0NVUikpIDwgMCkKPiArICAgICAgICAgICAgICAgIHJldHVybiAo aW50KSBwb3M7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSURE QVRBOwo+ICsKPiArICAgICAgICBzdWNjZXNzOgo+ICsgICAgICAgIGN0eC0+bGFzdF9wb3MgPSBw b3M7Cj4gKwo+ICsgICAgICAgIGZvciAoc3RydWN0IFByb2dyYW0gKnByb2dyYW0gPSBjdHgtPnBy b2dyYW1zOwo+ICsgICAgICAgICAgICAgcHJvZ3JhbSAhPSBOVUxMOyBwcm9ncmFtID0gcHJvZ3Jh bS0+bmV4dCkKPiArICAgICAgICAgICAgZmZfbW10cF9yZXNldF9zdGF0ZShwcm9ncmFtLT5tbXRw KTsKPiArICAgIH0KPiArCj4gKyAgICBpZiAocGt0ICE9IE5VTEwpIHBrdC0+cG9zID0gY3R4LT5s YXN0X3BvczsKPiArICAgIGlmICgoZXJyID0gZmZpb19yZWFkX3NpemUocy0+cGIsIGhlYWRlciwg NCkpIDwgMCkKPiArICAgICAgICByZXR1cm4gYXZpb19mZW9mKHMtPnBiKSA/IEFWRVJST1JfRU9G IDogZXJyOwo+ICsgICAgY3R4LT5sYXN0X3BvcyArPSA0Owo+ICsKPiArICAgIGlmIChoZWFkZXJb MF0gIT0gSEVBREVSX0JZVEUpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7 Cj4gKwo+ICsgICAgc2l6ZSA9IEFWX1JCMTYoaGVhZGVyICsgMik7Cj4gKyAgICBpZiAoaGVhZGVy WzFdICE9IEhFQURFUl9DT01QUkVTU0VEX0lQX1BBQ0tFVCkgewo+ICsgICAgICAgIGlmICgoY3R4 LT5sYXN0X3BvcyA9IGF2aW9fc2tpcChzLT5wYiwgc2l6ZSkpIDwgMCkKPiArICAgICAgICAgICAg cmV0dXJuIChpbnQpIGN0eC0+bGFzdF9wb3M7Cj4gKyAgICAgICAgcmV0dXJuIHBrdCA9PSBOVUxM ID8gMCA6IEZGRVJST1JfUkVETzsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoY3R4LT5jYXAgPCBz aXplKSB7Cj4gKyAgICAgICAgYXZfZnJlZShjdHgtPmJ1Zik7Cj4gKyAgICAgICAgaWYgKChjdHgt PmJ1ZiA9IGF2X21hbGxvYyhjdHgtPmNhcCA9IHNpemUpKSA9PSBOVUxMKQo+ICsgICAgICAgICAg ICByZXR1cm4gQVZFUlJPUihlcnJubyk7Cj4gKyAgICB9Cj4gKyAgICBpZiAoKGVyciA9IGZmaW9f cmVhZF9zaXplKHMtPnBiLCBjdHgtPmJ1Ziwgc2l6ZSkpIDwgMCkKPiArICAgICAgICByZXR1cm4g YXZpb19mZW9mKHMtPnBiKSA/IEFWRVJST1JfRU9GIDogZXJyOwo+ICsgICAgY3R4LT5sYXN0X3Bv cyArPSBzaXplOwo+ICsgICAgcmV0dXJuIG1tdHRsdl9yZWFkX2NvbXByZXNzZWRfaXBfcGFja2V0 KGN0eCwgcywgcGt0LCBjdHgtPmJ1Ziwgc2l6ZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbW10 dGx2X3JlYWRfaGVhZGVyKEFWRm9ybWF0Q29udGV4dCAqcykKPiArewo+ICsgICAgaW50NjRfdCAg ICAgICAgICAgICAgcG9zOwo+ICsgICAgaW50NjRfdCAgICAgICAgICAgICAgYWxsb3cgPSBzLT5w cm9iZXNpemU7Cj4gKyAgICBzdHJ1Y3QgTU1UVExWQ29udGV4dCAqY3R4ICA9IHMtPnByaXZfZGF0 YTsKPiArCj4gKyAgICBjdHgtPmxhc3RfcG9zID0gYXZpb190ZWxsKHMtPnBiKTsKPiArICAgIGlm IChjdHgtPmxhc3RfcG9zIDwgMCkKPiArICAgICAgICByZXR1cm4gKGludCkgY3R4LT5sYXN0X3Bv czsKPiArICAgIGN0eC0+bGFzdF9wb3MgLT0gMTsgLy8gZm9yY2UgcmVzeW5jCj4gKwo+ICsgICAg Y3R4LT5yZXN5bmNfc2l6ZSA9IDQwOTY7Cj4gKyAgICBzLT5jdHhfZmxhZ3MgfD0gQVZGTVRDVFhf Tk9IRUFERVI7Cj4gKwo+ICsgICAgaWYgKCFzLT5wYi0+c2Vla2FibGUpCj4gKyAgICAgICAgcmV0 dXJuIDA7Cj4gKwo+ICsgICAgaWYgKChwb3MgPSBhdmlvX3RlbGwocy0+cGIpKSA8IDApCj4gKyAg ICAgICAgcmV0dXJuIChpbnQpIHBvczsKPiArCj4gKyAgICB3aGlsZSAocy0+bmJfc3RyZWFtcyA8 PSAwICYmIGFsbG93ID4gMCkgewo+ICsgICAgICAgIGNvbnN0IGludDY0X3QgY3VyID0gY3R4LT5s YXN0X3BvczsKPiArICAgICAgICBjb25zdCBpbnQgICAgIGVyciA9IG1tdHRsdl9yZWFkX3BhY2tl dChzLCBOVUxMKTsKPiArICAgICAgICBpZiAoZXJyIDwgMCkgcmV0dXJuIGVycjsKPiArICAgICAg ICBhbGxvdyAtPSBjdHgtPmxhc3RfcG9zIC0gY3VyOwo+ICsgICAgfQo+ICsKPiArICAgIGN0eC0+ bGFzdF9wb3MgPSBhdmlvX3RlbGwocy0+cGIpOwo+ICsgICAgaWYgKGN0eC0+bGFzdF9wb3MgPCAw KQo+ICsgICAgICAgIHJldHVybiAoaW50KSBjdHgtPmxhc3RfcG9zOwo+ICsKPiArICAgIGlmICgo cG9zID0gYXZpb19zZWVrKHMtPnBiLCBwb3MsIFNFRUtfU0VUKSkgPCAwKQo+ICsgICAgICAgIHJl dHVybiAoaW50KSBwb3M7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgbW10dGx2X3JlYWRfY2xvc2UoQVZGb3JtYXRDb250ZXh0ICpjdHgpCj4gK3sKPiArICAgIHN0 cnVjdCBQcm9ncmFtICAgICAgICpwcm9ncmFtOwo+ICsgICAgc3RydWN0IE1NVFRMVkNvbnRleHQg KnByaXYgPSBjdHgtPnByaXZfZGF0YTsKPiArICAgIGZvciAocHJvZ3JhbSA9IHByaXYtPnByb2dy YW1zOyBwcm9ncmFtICE9IE5VTEw7KSB7Cj4gKyAgICAgICAgc3RydWN0IFByb2dyYW0gKm5leHQg PSBwcm9ncmFtLT5uZXh0Owo+ICsgICAgICAgIGZmX21tdHBfcGFyc2VfY2xvc2UocHJvZ3JhbS0+ bW10cCk7Cj4gKyAgICAgICAgYXZfZnJlZShwcm9ncmFtKTsKPiArICAgICAgICBwcm9ncmFtID0g bmV4dDsKPiArICAgIH0KPiArICAgIHByaXYtPnByb2dyYW1zID0gTlVMTDsKPiArICAgIHByaXYt PmNhcCA9IDA7Cj4gKyAgICBhdl9mcmVlcCgmcHJpdi0+YnVmKTsKPiArICAgIHJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50NjRfdCBtbXR0bHZfcmVhZF90aW1lc3RhbXAoCj4gKyAgICBz dHJ1Y3QgQVZGb3JtYXRDb250ZXh0ICpzLCBpbnQgc3RyZWFtX2luZGV4LAo+ICsgICAgaW50NjRf dCAqcG9zLCBpbnQ2NF90IHBvc19saW1pdCkKPiArewo+ICsgICAgc3RydWN0IE1NVFRMVkNvbnRl eHQgKmN0eCA9IHMtPnByaXZfZGF0YTsKPiArCj4gKyAgICBpZiAoKCpwb3MgPSBhdmlvX3NlZWso cy0+cGIsICpwb3MsIFNFRUtfU0VUKSkgPCAwKQo+ICsgICAgICAgIHJldHVybiAoaW50KSAqcG9z Owo+ICsKPiArICAgIHdoaWxlIChwb3NfbGltaXQgPiAwKSB7Cj4gKyAgICAgICAgQVZQYWNrZXQg ICAgICBwYWNrZXQgPSB7MH07Cj4gKyAgICAgICAgY29uc3QgaW50ICAgICBlcnIgICAgPSBtbXR0 bHZfcmVhZF9wYWNrZXQocywgJnBhY2tldCk7Cj4gKyAgICAgICAgY29uc3QgaW50NjRfdCB0cyAg ICAgPSBwYWNrZXQuZHRzOwo+ICsgICAgICAgIGNvbnN0IGludDY0X3Qgb2ZmICAgID0gcGFja2V0 LnBvczsKPiArICAgICAgICBjb25zdCBpbnQgICAgIHNpZCAgICA9IHBhY2tldC5zdHJlYW1faW5k ZXg7Cj4gKyAgICAgICAgYXZfcGFja2V0X3VucmVmKCZwYWNrZXQpOwo+ICsgICAgICAgIGlmIChl cnIgPj0gMCAmJiAoc3RyZWFtX2luZGV4IDwgMCB8fCBzaWQgPT0gc3RyZWFtX2luZGV4KSkgewo+ ICsgICAgICAgICAgICAqcG9zID0gb2ZmOwo+ICsgICAgICAgICAgICByZXR1cm4gdHM7Cj4gKyAg ICAgICAgfQo+ICsgICAgICAgIHBvc19saW1pdCAtPSBjdHgtPmxhc3RfcG9zIC0gKnBvczsKPiAr ICAgICAgICAqcG9zID0gY3R4LT5sYXN0X3BvczsKPiArICAgICAgICBpZiAoZXJyIDwgMCAmJiBl cnIgIT0gRkZFUlJPUl9SRURPKQo+ICsgICAgICAgICAgICByZXR1cm4gQVZfTk9QVFNfVkFMVUU7 Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIEFWX05PUFRTX1ZBTFVFOwo+ICt9Cj4gKwo+ICtj b25zdCBBVklucHV0Rm9ybWF0IGZmX21tdHRsdl9kZW11eGVyID0gewo+ICsgICAgLm5hbWUgICAg ICAgICAgID0gIm1tdHRsdiIsCj4gKyAgICAubG9uZ19uYW1lICAgICAgPSBOVUxMX0lGX0NPTkZJ R19TTUFMTCgKPiArICAgICAgICAiTU1UIHByb3RvY29sIG92ZXIgVExWIHBhY2tldHMgKEFSSUIg U1RELUIzMikiKSwKPiArICAgIC5wcml2X2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgTU1UVExW Q29udGV4dCksCj4gKyAgICAuZmxhZ3NfaW50ZXJuYWwgPSBGRl9GTVRfSU5JVF9DTEVBTlVQLAo+ ICsgICAgLnJlYWRfcHJvYmUgICAgID0gbW10dGx2X3Byb2JlLAo+ICsgICAgLnJlYWRfaGVhZGVy ICAgID0gbW10dGx2X3JlYWRfaGVhZGVyLAo+ICsgICAgLnJlYWRfcGFja2V0ICAgID0gbW10dGx2 X3JlYWRfcGFja2V0LAo+ICsgICAgLnJlYWRfY2xvc2UgICAgID0gbW10dGx2X3JlYWRfY2xvc2Us Cj4gKyAgICAucmVhZF90aW1lc3RhbXAgPSBtbXR0bHZfcmVhZF90aW1lc3RhbXAsCj4gKyAgICAu ZmxhZ3MgICAgICAgICAgPSBBVkZNVF9TSE9XX0lEUywKPiArfTsKPiBkaWZmIC0tZ2l0IGEvbGli YXZmb3JtYXQvdmVyc2lvbi5oIGIvbGliYXZmb3JtYXQvdmVyc2lvbi5oCj4gaW5kZXggMmEyOGEz YmY0MC4uNmE4MGYzYWM0ZSAxMDA2NDQKPiAtLS0gYS9saWJhdmZvcm1hdC92ZXJzaW9uLmgKPiAr KysgYi9saWJhdmZvcm1hdC92ZXJzaW9uLmgKPiBAQCAtMzEsNyArMzEsNyBAQAo+Cj4gICNpbmNs dWRlICJ2ZXJzaW9uX21ham9yLmgiCj4KPiAtI2RlZmluZSBMSUJBVkZPUk1BVF9WRVJTSU9OX01J Tk9SICAxNwo+ICsjZGVmaW5lIExJQkFWRk9STUFUX1ZFUlNJT05fTUlOT1IgIDE4Cj4gICNkZWZp bmUgTElCQVZGT1JNQVRfVkVSU0lPTl9NSUNSTyAxMDAKPgo+ICAjZGVmaW5lIExJQkFWRk9STUFU X1ZFUlNJT05fSU5UIEFWX1ZFUlNJT05fSU5UKExJQkFWRk9STUFUX1ZFUlNJT05fTUFKT1IsCj4g XAo+IC0tCj4gMi4yNS4xCj4KPgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcu b3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8g dW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1 ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==