From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 803A74CAAF for ; Fri, 28 Nov 2025 04:41:18 +0000 (UTC) Authentication-Results: ffbox; dkim=fail (body hash mismatch (got b'tu31Bj0Z2sYaAmYUP/eVEUeFGnuxnxzVj3LvltZWMXw=', expected b'PTPE5vTW6aev0qVll66R7XhIGdVZrCWgBAqXVfhRWJc=')) header.d=ffmpeg.org header.i=@ffmpeg.org header.a=rsa-sha256 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1764304798; h=content-type : mime-version : to : date : message-id : reply-to : subject : list-id : list-archive : list-archive : list-help : list-owner : list-post : list-subscribe : list-unsubscribe : from : cc : content-transfer-encoding : from; bh=tu31Bj0Z2sYaAmYUP/eVEUeFGnuxnxzVj3LvltZWMXw=; b=0B7RIRbqaM88tgffM1k0aTRrJWfJKVhgncV1KvhdZWY1dY19XnI99mmPvppINipFZ1Uq5 6kmBM2XU9UjD2s9+bk1w40k6aCwh0Q2z0appvdx/eJIjmAtL67SgmuY9NlUhjSl3YqrBcD9 Xc3CC//Kn1Aq5qPsQwqVF5xgc6Nxj4nC0gp4FThnqW4a3WcIF5roBTCA4ebVGLT1hlGTKhs S+Tdm0vyjR5F9KPE2xfb5g/C1yXu6SMXFQ332AoZfoPWTnphsdYk3CpI4s93dhrzchQ9iHP xnEiwWqDLmuc36Ce9q3nfVEAUpBXl6ieclh7Zgta/4x9+PiY6NXhQMYsQ6AQ== Received: from [172.19.0.3] (unknown [172.19.0.3]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id C0E6169029B; Fri, 28 Nov 2025 06:39:58 +0200 (EET) ARC-Seal: i=1; cv=none; a=rsa-sha256; d=ffmpeg.org; s=arc; t=1764304633; b=LQkKFJw561b3nqlqFEthDpJCNJpVkQewy6b5jGalJ3tNddV91B1X5Yj/Ept0Db+o1TToy 7bnP+bLun/3PW1jb/QmTm15JfAzEN6DdHDj1E3J0E2rI7oTvQkVJLZ/JVuvu1fx6lrSu3sy fiT+Y5K5YOjVFyeRpklQIACnB8XM9/PAKYYtOVtrFPQM0fNN9kc1PYd45s1sxPu8SQOujbw 6GeoNwM0RO1SaSNzYZe0k1ZtJhnHCqJ85DDCJvlDTovs3/OYsa5xIwNftUHQh5WryuUNQlI JJRepdkYSamJfRk5mZEDNQoNGj99dNzXJGJfD1+JoDzOO3E5GRviv87KM2Kw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=ffmpeg.org; s=arc; t=1764304633; h=from : sender : reply-to : subject : date : message-id : to : cc : mime-version : content-type : content-transfer-encoding : content-id : content-description : resent-date : resent-from : resent-sender : resent-to : resent-cc : resent-message-id : in-reply-to : references : list-id : list-help : list-unsubscribe : list-subscribe : list-post : list-owner : list-archive; bh=tu31Bj0Z2sYaAmYUP/eVEUeFGnuxnxzVj3LvltZWMXw=; b=gYVnqpKNOfmKR5rfPbjP9hWHMuDjOw3as9EWdT0Sq1QgU3U1i+YrDo4Saci9d3Q8OUUUe kzj4/vVXtaWIUB3Ukd8w0MXSP7EPzL2yQEJzJZtUZ6tE7aoQ+1t2H0PVFdP8uRO9DmZ0poL 2OsCmhEes+jpKdeQ0Hq3MCpMlM249tINuzc1HxOB7pUhIAp8yp6+ljI4USy7OrBrQIXaVto 6BeFs1G1Ni8AecWGPw+wBjlLig84ibr8hzvHlckyhVFlL3/s5vLjVRA2z/bbQcBeqwZeNr6 n3Mq40xl0Suxi3GWFJqCEQd2nFDMj+oJC2rgUIBS8eVrSBJWCID3hNDcTzkw== ARC-Authentication-Results: i=1; ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none; dmarc=pass header.from=ffmpeg.org policy.dmarc=quarantine Authentication-Results: ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none (Message is not ARC signed); dmarc=pass (Used From Domain Record) header.from=ffmpeg.org policy.dmarc=quarantine DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1764304609; h=content-type : mime-version : content-transfer-encoding : from : to : reply-to : subject : date : from; bh=PTPE5vTW6aev0qVll66R7XhIGdVZrCWgBAqXVfhRWJc=; b=McgX1tjAc1wX6tsC/JgbYbwt01qGxjJhd5XsQ8i/GGLHR9IcRK8KeF5WMo7vZ55uma295 89cIvr0U+fH15J33BnXL5Lv+pRKrmtHnjZ/MdYVWtS/ewlBxPQe+nkxsZx5sa3R0vip1a1v CLpSUxyvHKd1vtYpjAEs+X3qOHjX2/J8AbG1vGL/6qh0y7jECwrwGOgbPKvo8SBhjgH/TFr 3ogGWaaokcGlQ92MUPOsjWzXSRPTSjeO01Xm9KJ8lNj7JA9oJMfqM8/8IHeof9PcHiLz4rz CEdtb0yEmLTeK12GbJBddhHE5gu3LnAVuVA+d91QV/P7nqrOAx1+dEf8M/zg== Received: from 55ca25703178 (code.ffmpeg.org [188.245.149.3]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id EBBEC6802E3 for ; Fri, 28 Nov 2025 06:36:48 +0200 (EET) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Date: Fri, 28 Nov 2025 04:36:46 -0000 Message-ID: <176430460966.39.7370159644008432158@2cb04c0e5124> Message-ID-Hash: ATAUYGFTMXPSSM3YWF6CR7JLDEAG2JJI X-Message-ID-Hash: ATAUYGFTMXPSSM3YWF6CR7JLDEAG2JJI X-MailFrom: code@ffmpeg.org X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-ffmpeg-devel.ffmpeg.org-0; header-match-ffmpeg-devel.ffmpeg.org-1; header-match-ffmpeg-devel.ffmpeg.org-2; header-match-ffmpeg-devel.ffmpeg.org-3; emergency; member-moderation X-Mailman-Version: 3.3.10 Precedence: list Reply-To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [PATCH] avformat: add MMTP parser and MMT/TLV demuxer (PR #21037) List-Id: FFmpeg development discussions and patches Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: SuperFashi via ffmpeg-devel Cc: SuperFashi Content-Transfer-Encoding: base64 Archived-At: List-Archive: List-Post: UFIgIzIxMDM3IG9wZW5lZCBieSBTdXBlckZhc2hpClVSTDogaHR0cHM6Ly9jb2RlLmZmbXBlZy5v cmcvRkZtcGVnL0ZGbXBlZy9wdWxscy8yMTAzNwpQYXRjaCBVUkw6IGh0dHBzOi8vY29kZS5mZm1w ZWcub3JnL0ZGbXBlZy9GRm1wZWcvcHVsbHMvMjEwMzcucGF0Y2gKClRoaXMgcGF0Y2ggYWRkcyBh biBNUEVHIE1lZGlhIFRyYW5zcG9ydCBQcm90b2NvbCAoTU1UUCkgcGFyc2VyLCBhcyBkZWZpbmVk IGluIElTTy9JRUMgMjMwMDgtMSwgYW5kIGFuIE1NVCBwcm90b2NvbCBvdmVyIFRMViBwYWNrZXRz IChNTVQvVExWKSBkZW11eGVyLCBhcyBkZWZpbmVkIGluIEFSSUIgU1RELUIzMi4gQ3VycmVudGx5 LCBpdCBzdXBwb3J0cyBIRVZDLCBBQUMgTEFUTSwgYW5kIEFSSUItVFRNTCBkZW11eGluZy4NCg0K U2luY2UgTU1UUCBpcyBkZXNpZ25lZCB0byB0cmFuc21pdCBvdmVyIElQLCB0aGVyZSBpcyBubyBz aXplIGluZm9ybWF0aW9uIHdpdGhpbiBlYWNoIE1NVFAgcGFja2V0LCBhbmQgdGhlcmUgaXMgbm8g b24tZGlzayBmb3JtYXQgZGVmaW5lZCBhbG9uZ3NpZGUgdGhlIHByb3RvY29sLiBPbmUgaW5kdXN0 cmlhbCBzb2x1dGlvbiBpcyBhIHNpbXBsZSBjb250YWluZXIgZm9ybWF0IHVzaW5nIHR5cGUtbGVu Z3RoLXZhbHVlIHBhY2tldHMsIHdoaWNoIGlzIGRlZmluZWQgaW4gQVJJQiBTVEQtQjMyLg0KDQpB bm90aGVyIGtub3duIGNvbnRhaW5lciBmb3JtYXQgZm9yIE1NVFAgaXMgdXNpbmcgcGFja2V0IGNh cHR1cmUgKHBjYXApIGZpbGVzIHdoaWNoIHJlY29yZHMgbmV0d29yayBwYWNrZXRzLiBUaGlzIHBh dGNoIGRvZXMgbm90IGluY2x1ZGUgdGhlIGRlbXV4ZXIgZm9yIHRoaXMgY29udGFpbmVyIGZvcm1h dC4KCgpGcm9tIDdjMzhkMDQyN2Q3ZTZmMzJmZDIzYWU1YmFlZGFmZThhMzlkMjY3NjkgTW9uIFNl cCAxNyAwMDowMDowMCAyMDAxCkZyb206IFN1cGVyRmFzaGkgPGFkbWluQHN1cGVyZmFzaGkuY29t PgpEYXRlOiBTdW4sIDEyIEphbiAyMDI1IDA1OjExOjQ0ICswOTAwClN1YmplY3Q6IFtQQVRDSF0g YXZmb3JtYXQ6IGFkZCBNTVRQIHBhcnNlciBhbmQgTU1UL1RMViBkZW11eGVyCk1JTUUtVmVyc2lv bjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRy YW5zZmVyLUVuY29kaW5nOiA4Yml0CgpUaGlzIHBhdGNoIGFkZHMgYW4gTVBFRyBNZWRpYSBUcmFu c3BvcnQgUHJvdG9jb2wgKE1NVFApIHBhcnNlciwgYXMgZGVmaW5lZCBpbiBJU08vSUVDIDIzMDA4 LTEsIGFuZCBhbiBNTVQgcHJvdG9jb2wgb3ZlciBUTFYgcGFja2V0cyAoTU1UL1RMVikgZGVtdXhl ciwgYXMgZGVmaW5lZCBpbiBBUklCIFNURC1CMzIuIEN1cnJlbnRseSwgaXQgc3VwcG9ydHMgSEVW QywgQUFDIExBVE0sIGFuZCBBUklCLVRUTUwgZGVtdXhpbmcuCgpTaW5jZSBNTVRQIGlzIGRlc2ln bmVkIHRvIHRyYW5zbWl0IG92ZXIgSVAsIHRoZXJlIGlzIG5vIHNpemUgaW5mb3JtYXRpb24gd2l0 aGluIGVhY2ggTU1UUCBwYWNrZXQsIGFuZCB0aGVyZSBpcyBubyBvbi1kaXNrIGZvcm1hdCBkZWZp bmVkIGFsb25nc2lkZSB0aGUgcHJvdG9jb2wuIE9uZSBpbmR1c3RyaWFsIHNvbHV0aW9uIGlzIGEg c2ltcGxlIGNvbnRhaW5lciBmb3JtYXQgdXNpbmcgdHlwZeKAk2xlbmd0aOKAk3ZhbHVlIHBhY2tl dHMsIHdoaWNoIGlzIGRlZmluZWQgaW4gQVJJQiBTVEQtQjMyLgoKQW5vdGhlciBrbm93biBjb250 YWluZXIgZm9ybWF0IGZvciBNTVRQIGlzIHVzaW5nIHBhY2tldCBjYXB0dXJlIChwY2FwKSBmaWxl cyB3aGljaCByZWNvcmRzIG5ldHdvcmsgcGFja2V0cy4gVGhpcyBwYXRjaCBkb2VzIG5vdCBpbmNs dWRlIHRoZSBkZW11eGVyIGZvciB0aGlzIGNvbnRhaW5lciBmb3JtYXQuCgpTaWduZWQtb2ZmLWJ5 OiBTdXBlckZhc2hpIDxhZG1pbkBzdXBlcmZhc2hpLmNvbT4KLS0tCiBDaGFuZ2Vsb2cgICAgICAg ICAgICAgICAgfCAgICAxICsKIGRvYy9kZW11eGVycy50ZXhpICAgICAgICB8ICAgIDQgKwogbGli YXZmb3JtYXQvTWFrZWZpbGUgICAgIHwgICAgMSArCiBsaWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMg fCAgICAxICsKIGxpYmF2Zm9ybWF0L21tdHAuYyAgICAgICB8IDE3MDUgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKIGxpYmF2Zm9ybWF0L21tdHAuaCAgICAgICB8ICAgNjQg KysKIGxpYmF2Zm9ybWF0L21tdHRsdi5jICAgICB8ICAzODQgKysrKysrKysrCiA3IGZpbGVzIGNo YW5nZWQsIDIxNjAgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Zm9ybWF0 L21tdHAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Zm9ybWF0L21tdHAuaAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGxpYmF2Zm9ybWF0L21tdHRsdi5jCgpkaWZmIC0tZ2l0IGEvQ2hhbmdlbG9nIGIv Q2hhbmdlbG9nCmluZGV4IGNkYTU5ZWJjOTAuLmU2MmMzZGRlYzkgMTAwNjQ0Ci0tLSBhL0NoYW5n ZWxvZworKysgYi9DaGFuZ2Vsb2cKQEAgLTE0LDYgKzE0LDcgQEAgdmVyc2lvbiA8bmV4dD46CiAt IFByb1JlcyBWdWxrYW4gaHdhY2NlbAogLSBEUFggVnVsa2FuIGh3YWNjZWwKIC0gUm9ja2NoaXAg SC4yNjQvSEVWQyBoYXJkd2FyZSBlbmNvZGVyCistIE1NVFAgcGFyc2VyIGFuZCBNTVQvVExWIGRl bXV4ZXIKIAogCiB2ZXJzaW9uIDguMDoKZGlmZiAtLWdpdCBhL2RvYy9kZW11eGVycy50ZXhpIGIv ZG9jL2RlbXV4ZXJzLnRleGkKaW5kZXggM2RlOTk5Mjk3Ni4uOWZmODIxOWY5NyAxMDA2NDQKLS0t IGEvZG9jL2RlbXV4ZXJzLnRleGkKKysrIGIvZG9jL2RlbXV4ZXJzLnRleGkKQEAgLTgzNCw2ICs4 MzQsMTAgQEAgU2V0IHRoZSBzYW1wbGUgcmF0ZSBmb3IgbGlib3Blbm1wdCB0byBvdXRwdXQuCiBS YW5nZSBpcyBmcm9tIDEwMDAgdG8gSU5UX01BWC4gVGhlIHZhbHVlIGRlZmF1bHQgaXMgNDgwMDAu CiBAZW5kIHRhYmxlCiAKK0BzZWN0aW9uIG1tdHRsdgorCitEZW11eGVyIGZvciBNTVQgcHJvdG9j b2wgb3ZlciBUTFYgcGFja2V0cyAoTU1UL1RMViksIGFzIGRlZmluZWQgaW4gQVJJQiBTVEQtQjMy LgorCiBAYW5jaG9ye21jY2RlY30KIEBzZWN0aW9uIG1jYwogCmRpZmYgLS1naXQgYS9saWJhdmZv cm1hdC9NYWtlZmlsZSBiL2xpYmF2Zm9ybWF0L01ha2VmaWxlCmluZGV4IDg2MTc3YWYyZjQuLmVj ZTZmMTJkOTcgMTAwNjQ0Ci0tLSBhL2xpYmF2Zm9ybWF0L01ha2VmaWxlCisrKyBiL2xpYmF2Zm9y bWF0L01ha2VmaWxlCkBAIC0zNzYsNiArMzc2LDcgQEAgT0JKUy0kKENPTkZJR19NTFZfREVNVVhF UikgICAgICAgICAgICAgICArPSBtbHZkZWMubyByaWZmZGVjLm8KIE9CSlMtJChDT05GSUdfTU1f REVNVVhFUikgICAgICAgICAgICAgICAgKz0gbW0ubwogT0JKUy0kKENPTkZJR19NTUZfREVNVVhF UikgICAgICAgICAgICAgICArPSBtbWYubwogT0JKUy0kKENPTkZJR19NTUZfTVVYRVIpICAgICAg ICAgICAgICAgICArPSBtbWYubyByYXdlbmMubworT0JKUy0kKENPTkZJR19NTVRUTFZfREVNVVhF UikgICAgICAgICAgICArPSBtbXRwLm8gbW10dGx2Lm8KIE9CSlMtJChDT05GSUdfTU9EU19ERU1V WEVSKSAgICAgICAgICAgICAgKz0gbW9kcy5vCiBPQkpTLSQoQ09ORklHX01PRkxFWF9ERU1VWEVS KSAgICAgICAgICAgICs9IG1vZmxleC5vCiBPQkpTLSQoQ09ORklHX01PVl9ERU1VWEVSKSAgICAg ICAgICAgICAgICs9IG1vdi5vIG1vdl9jaGFuLm8gbW92X2VzZHMubyBcCmRpZmYgLS1naXQgYS9s aWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMgYi9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMKaW5kZXgg M2EwMjVkYTNkYi4uMDhhOTZlYjE0MyAxMDA2NDQKLS0tIGEvbGliYXZmb3JtYXQvYWxsZm9ybWF0 cy5jCisrKyBiL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYwpAQCAtMjg1LDYgKzI4NSw3IEBAIGV4 dGVybiBjb25zdCBGRklucHV0Rm9ybWF0ICBmZl9tbHZfZGVtdXhlcjsKIGV4dGVybiBjb25zdCBG RklucHV0Rm9ybWF0ICBmZl9tbV9kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEZGSW5wdXRGb3JtYXQg IGZmX21tZl9kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEZGT3V0cHV0Rm9ybWF0IGZmX21tZl9tdXhl cjsKK2V4dGVybiBjb25zdCBGRklucHV0Rm9ybWF0ICBmZl9tbXR0bHZfZGVtdXhlcjsKIGV4dGVy biBjb25zdCBGRklucHV0Rm9ybWF0ICBmZl9tb2RzX2RlbXV4ZXI7CiBleHRlcm4gY29uc3QgRkZJ bnB1dEZvcm1hdCAgZmZfbW9mbGV4X2RlbXV4ZXI7CiBleHRlcm4gY29uc3QgRkZJbnB1dEZvcm1h dCAgZmZfbW92X2RlbXV4ZXI7CmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9tbXRwLmMgYi9saWJh dmZvcm1hdC9tbXRwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZjUw MTY2NTk0OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Zm9ybWF0L21tdHAuYwpAQCAtMCwwICsx LDE3MDUgQEAKKy8qCisgKiBNUEVHIE1lZGlhIFRyYW5zcG9ydCBQcm90b2NvbCAoTU1UUCkgcGFy c2VyLCBhcyBkZWZpbmVkIGluIElTTy9JRUMgMjMwMDgtMS4KKyAqIENvcHlyaWdodCAoYykgMjAy NSBTdXBlckZhc2hpCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAq IEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0 ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNp bmNsdWRlIDxzdGRib29sLmg+CisKKyNpbmNsdWRlICJsaWJhdmNvZGVjL2J5dGVzdHJlYW0uaCIK KyNpbmNsdWRlICJsaWJhdmNvZGVjL2F2Y29kZWMuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZh c3NlcnQuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvbWVtLmgiCisjaW5jbHVkZSAiZGVtdXguaCIK KyNpbmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgIm1tdHAuaCIKKyNpbmNsdWRlICJuZXR3 b3JrLmgiCisKK3N0cnVjdCBNTVRHZW5lcmFsTG9jYXRpb25JbmZvIHsKKyAgICB1aW50OF90IGxv Y2F0aW9uX3R5cGU7CisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAg dWludDE2X3QgcGFja2V0X2lkOworICAgICAgICB9IHR5cGUwOworICAgICAgICBzdHJ1Y3Qgewor ICAgICAgICAgICAgc3RydWN0IGluX2FkZHIgaXB2NF9zcmNfYWRkcjsKKyAgICAgICAgICAgIHN0 cnVjdCBpbl9hZGRyIGlwdjRfZHN0X2FkZHI7CisgICAgICAgICAgICB1aW50MTZfdCAgICAgICBk c3RfcG9ydDsKKyAgICAgICAgICAgIHVpbnQxNl90ICAgICAgIHBhY2tldF9pZDsKKyAgICAgICAg fSB0eXBlMTsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHN0cnVjdCBpbjZfYWRkciBp cHY2X3NyY19hZGRyOworICAgICAgICAgICAgc3RydWN0IGluNl9hZGRyIGlwdjZfZHN0X2FkZHI7 CisgICAgICAgICAgICB1aW50MTZfdCAgICAgICAgZHN0X3BvcnQ7CisgICAgICAgICAgICB1aW50 MTZfdCAgICAgICAgcGFja2V0X2lkOworICAgICAgICB9IHR5cGUyOworICAgICAgICBzdHJ1Y3Qg eworICAgICAgICAgICAgdWludDE2X3QgbmV0d29ya19pZDsKKyAgICAgICAgICAgIHVpbnQxNl90 IE1QRUdfMl90cmFuc3BvcnRfc3RyZWFtX2lkOworICAgICAgICAgICAgdWludDE2X3QgTVBFR18y X1BJRDogMTM7CisgICAgICAgIH0gdHlwZTM7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAg ICBzdHJ1Y3QgaW42X2FkZHIgaXB2Nl9zcmNfYWRkcjsKKyAgICAgICAgICAgIHN0cnVjdCBpbjZf YWRkciBpcHY2X2RzdF9hZGRyOworICAgICAgICAgICAgdWludDE2X3QgICAgICAgIGRzdF9wb3J0 OworICAgICAgICAgICAgdWludDE2X3QgICAgICAgIE1QRUdfMl9QSUQ6IDEzOworICAgICAgICB9 IHR5cGU0OworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgY2hhciBVUkxbMHgxMDAgKyAx XTsKKyAgICAgICAgfSB0eXBlNTsKKyAgICB9OworfTsKKworc3RhdGljIGludCBwYXJzZV9tbXRf Z2VuZXJhbF9sb2NhdGlvbl9pbmZvKAorICAgIHN0cnVjdCBNTVRHZW5lcmFsTG9jYXRpb25JbmZv ICppbmZvLCBHZXRCeXRlQ29udGV4dCAqZ2JjKQoreworICAgIHVpbnQ4X3QgdXJsX3NpemU7CisK KyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IDEpCisgICAgICAgIHJl dHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIHN3aXRjaCAoaW5mby0+bG9jYXRpb25fdHlw ZSA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpKSB7CisgICAgY2FzZSAweDAwOgorICAgICAg ICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IDIpCisgICAgICAgICAgICBy ZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgaW5mby0+dHlwZTAucGFja2V0X2lk ID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug MHgwMToKKyAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCAoMzIg KyAzMiArIDE2ICsgMTYpIC8gOCkKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSURE QVRBOworICAgICAgICBieXRlc3RyZWFtMl9nZXRfYnVmZmVydShnYmMsICh1aW50OF90ICopICZp bmZvLT50eXBlMS5pcHY0X3NyY19hZGRyLCA0KTsKKyAgICAgICAgYnl0ZXN0cmVhbTJfZ2V0X2J1 ZmZlcnUoZ2JjLCAodWludDhfdCAqKSAmaW5mby0+dHlwZTEuaXB2NF9kc3RfYWRkciwgNCk7Cisg ICAgICAgIGluZm8tPnR5cGUxLmRzdF9wb3J0ICA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMp OworICAgICAgICBpbmZvLT50eXBlMS5wYWNrZXRfaWQgPSBieXRlc3RyZWFtMl9nZXRfYmUxNnUo Z2JjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAweDAyOgorICAgICAgICBpZiAoYnl0ZXN0 cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8ICgxMjggKyAxMjggKyAxNiArIDE2KSAvIDgpCisg ICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgYnl0ZXN0cmVh bTJfZ2V0X2J1ZmZlcnUoCisgICAgICAgICAgICBnYmMsICh1aW50OF90ICopICZpbmZvLT50eXBl Mi5pcHY2X3NyY19hZGRyLCAxNik7CisgICAgICAgIGJ5dGVzdHJlYW0yX2dldF9idWZmZXJ1KAor ICAgICAgICAgICAgZ2JjLCAodWludDhfdCAqKSAmaW5mby0+dHlwZTIuaXB2Nl9kc3RfYWRkciwg MTYpOworICAgICAgICBpbmZvLT50eXBlMi5kc3RfcG9ydCAgPSBieXRlc3RyZWFtMl9nZXRfYmUx NnUoZ2JjKTsKKyAgICAgICAgaW5mby0+dHlwZTIucGFja2V0X2lkID0gYnl0ZXN0cmVhbTJfZ2V0 X2JlMTZ1KGdiYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMHgwMzoKKyAgICAgICAgaWYg KGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCAoMTYgKyAxNiArIDMgKyAxMykgLyA4 KQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgIGluZm8t PnR5cGUzLm5ldHdvcmtfaWQgICAgICAgICAgICAgICAgID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1 KGdiYyk7CisgICAgICAgIGluZm8tPnR5cGUzLk1QRUdfMl90cmFuc3BvcnRfc3RyZWFtX2lkID0g Ynl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYyk7CisgICAgICAgIGluZm8tPnR5cGUzLk1QRUdfMl9Q SUQgPQorICAgICAgICAgICAgYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYykgJiAwYjExMTExMTEx MTExMTE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMHgwNDoKKyAgICAgICAgaWYgKGJ5dGVz dHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCAoMTI4ICsgMTI4ICsgMTYgKyAzICsgMTMpIC8g OCkKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICBieXRl c3RyZWFtMl9nZXRfYnVmZmVydSgKKyAgICAgICAgICAgIGdiYywgKHVpbnQ4X3QgKikgJmluZm8t PnR5cGU0LmlwdjZfc3JjX2FkZHIsIDE2KTsKKyAgICAgICAgYnl0ZXN0cmVhbTJfZ2V0X2J1ZmZl cnUoCisgICAgICAgICAgICBnYmMsICh1aW50OF90ICopICZpbmZvLT50eXBlNC5pcHY2X2RzdF9h ZGRyLCAxNik7CisgICAgICAgIGluZm8tPnR5cGU0LmRzdF9wb3J0ICAgPSBieXRlc3RyZWFtMl9n ZXRfYmUxNnUoZ2JjKTsKKyAgICAgICAgaW5mby0+dHlwZTQuTVBFR18yX1BJRCA9IGJ5dGVzdHJl YW0yX2dldF9iZTE2dShnYmMpICYgMGIxMTExMTExMTExMTExOworICAgICAgICBicmVhazsKKyAg ICBjYXNlIDB4MDU6CisgICAgICAgIHVybF9zaXplID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGUoZ2Jj KTsKKyAgICAgICAgYnl0ZXN0cmVhbTJfZ2V0X2J1ZmZlcihnYmMsICh1aW50OF90ICopIGluZm8t PnR5cGU1LlVSTCwgdXJsX3NpemUpOworICAgICAgICBpbmZvLT50eXBlNS5VUkxbdXJsX3NpemVd ID0gJ1wwJzsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEFW RVJST1JfSU5WQUxJRERBVEE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdHJ1Y3QgU3Ry ZWFtcyB7CisgICAgQVZTdHJlYW0gKnN0cmVhbTsKKworICAgIEFWQ29kZWNQYXJzZXJDb250ZXh0 ICpwYXJzZXI7CisKKyAgICBpbnQgbnVtX3RpbWVzdGFtcF9kZXNjcmlwdG9yczsKKyAgICBzdHJ1 Y3QgTVBVVGltZXN0YW1wRGVzY3JpcHRvciB7CisgICAgICAgIHVpbnQzMl90IHNlcV9udW07Cisg ICAgICAgIGludDY0X3QgIHByZXNlbnRhdGlvbl90aW1lOworICAgIH0gICAqdGltZXN0YW1wX2Rl c2NyaXB0b3I7CisKKyAgICBpbnQgbnVtX2V4dF90aW1lc3RhbXBfZGVzY3JpcHRvcnM7CisgICAg c3RydWN0IE1QVUV4dGVuZGVkVGltZXN0YW1wRGVzY3JpcHRvciB7CisgICAgICAgIHVpbnQzMl90 IHNlcV9udW07CisgICAgICAgIHVpbnQxNl90IGRlY29kaW5nX3RpbWVfb2Zmc2V0OworICAgICAg ICB1aW50OF90ICBudW1fb2ZfYXU7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICB1aW50 MTZfdCBkdHNfcHRzX29mZnNldDsKKyAgICAgICAgICAgIHVpbnQxNl90IHB0c19vZmZzZXQ7Cisg ICAgICAgIH0gICAgICAgIGF1WzB4MTAwXTsKKyAgICB9ICAgKmV4dF90aW1lc3RhbXBfZGVzY3Jp cHRvcjsKKworICAgIHVpbnQzMl90IGxhc3Rfc2VxdWVuY2VfbnVtYmVyOworICAgIHVpbnQxNl90 IGF1X2NvdW50OworICAgIGludDY0X3QgIG9mZnNldDsKKyAgICBpbnQgICAgICBmbGFnczsKKwor ICAgIHN0cnVjdCBTdHJlYW1zICpuZXh0OworfTsKKworc3RydWN0IE1NVFBDb250ZXh0IHsKKyAg ICBzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJsZXIgKmFzc2VtYmxlcjsKKyAgICBzdHJ1Y3QgU3RyZWFt cyAgICAgICAgICAgKnN0cmVhbXM7CisgICAgQVZQcm9ncmFtICAgICAgICAgICAgICAgICpwcm9n cmFtOworICAgIC8vIHN0cnVjdCBNTVRHZW5lcmFsTG9jYXRpb25JbmZvIG1wdF9sb2NhdGlvbjsg VE9ETworCisgICAgLy8gYmVsb3cgYXJlIHRlbXBvcmFyeSBmaWVsZHMgYXZhaWxhYmxlIGZvciB0 aGUgc2NvcGUgb2YgYSBzaW5nbGUgcGFja2V0CisgICAgQVZGb3JtYXRDb250ZXh0ICpzOworICAg IEFWUGFja2V0ICAgICAgICAqcGt0OworICAgIHVpbnQxNl90ICAgICAgICBjdXJyZW50X3BpZDsK KyAgICB1aW50OF90ICAgICAgICAgaXNfcmFwOworfTsKKworc3RhdGljIHN0cnVjdCBTdHJlYW1z ICpmaW5kX2N1cnJlbnRfc3RyZWFtKHN0cnVjdCBNTVRQQ29udGV4dCAqY3R4KQoreworICAgIHN0 cnVjdCBTdHJlYW1zICpzdHJlYW1zOworICAgIGZvciAoc3RyZWFtcyA9IGN0eC0+c3RyZWFtczsg c3RyZWFtcyAhPSBOVUxMOyBzdHJlYW1zID0gc3RyZWFtcy0+bmV4dCkKKyAgICAgICAgaWYgKHN0 cmVhbXMtPnN0cmVhbS0+aWQgPT0gY3R4LT5jdXJyZW50X3BpZCkKKyAgICAgICAgICAgIHJldHVy biBzdHJlYW1zOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IFN0cmVhbXMg KgorZmluZF9vcl9hbGxvY2F0ZV9zdHJlYW0oc3RydWN0IE1NVFBDb250ZXh0ICpjdHgsIHVpbnQx Nl90IHBpZCkKK3sKKyAgICBBVlN0cmVhbSAgICAgICAqc3RyZWFtOworICAgIHN0cnVjdCBTdHJl YW1zICpzdHJlYW1zOworICAgIGZvciAoc3RyZWFtcyA9IGN0eC0+c3RyZWFtczsgc3RyZWFtcyAh PSBOVUxMOyBzdHJlYW1zID0gc3RyZWFtcy0+bmV4dCkKKyAgICAgICAgaWYgKHN0cmVhbXMtPnN0 cmVhbS0+aWQgPT0gcGlkKQorICAgICAgICAgICAgcmV0dXJuIHN0cmVhbXM7CisKKyAgICBzdHJl YW0gPSBhdmZvcm1hdF9uZXdfc3RyZWFtKGN0eC0+cywgTlVMTCk7CisgICAgaWYgKHN0cmVhbSA9 PSBOVUxMKSByZXR1cm4gTlVMTDsKKyAgICBzdHJlYW0tPmlkID0gcGlkOworICAgIGF2X3Byb2dy YW1fYWRkX3N0cmVhbV9pbmRleChjdHgtPnMsIGN0eC0+cHJvZ3JhbS0+aWQsIHN0cmVhbS0+aW5k ZXgpOworCisgICAgc3RyZWFtcyA9IGF2X21hbGxvY3ooc2l6ZW9mKHN0cnVjdCBTdHJlYW1zKSk7 CisgICAgaWYgKHN0cmVhbXMgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CisgICAgc3RyZWFtcy0+c3Ry ZWFtID0gc3RyZWFtOworICAgIHN0cmVhbXMtPm5leHQgICA9IGN0eC0+c3RyZWFtczsKKyAgICBz dHJlYW1zLT5vZmZzZXQgPSAtMTsKKyAgICBjdHgtPnN0cmVhbXMgICAgPSBzdHJlYW1zOworICAg IHJldHVybiBzdHJlYW1zOworfQorCitlbnVtIHsKKyAgICBNTVRfUEFDS0FHRV9UQUJMRV9JRCAg PSAweDIwLAorICAgIFBBQ0tBR0VfTElTVF9UQUJMRV9JRCA9IDB4ODAsCisgICAgTUhfRUlUX1RB QkxFX0lEICAgICAgID0gMHg4QiwKK307CisKK2VudW0geworICAgIE1QVV9USU1FU1RBTVBfREVT Q1JJUFRPUiAgICAgICAgICA9IDB4MDAwMSwKKyAgICBWSURFT19DT01QT05FTlRfREVTQ1JJUFRP UiAgICAgICAgPSAweDgwMTAsCisgICAgTUhfU1RSRUFNX0lERU5USUZJRVJfREVTQ1JJUFRPUiAg ID0gMHg4MDExLAorICAgIE1IX0FVRElPX0NPTVBPTkVOVF9ERVNDUklQVE9SICAgICA9IDB4ODAx NCwKKyAgICBNSF9EQVRBX0NPTVBPTkVOVF9ERVNDUklQVE9SICAgICAgPSAweDgwMjAsCisgICAg TVBVX0VYVEVOREVEX1RJTUVTVEFNUF9ERVNDUklQVE9SID0gMHg4MDI2LAorICAgIE1IX1NIT1JU X0VWRU5UX0RFU0NSSVBUT1IgICAgICAgICA9IDB4RjAwMSwKK307CisKK3N0YXRpYyBpbnQKK3Bh cnNlX3ZpZGVvX2NvbXBvbmVudF9kZXNjcmlwdG9yKEFWU3RyZWFtICpzdHJlYW0sIEdldEJ5dGVD b250ZXh0ICpnYmMpCit7CisgICAgdWludDhfdCBkZXNjcmlwdG9yX2xlbmd0aDsKKyAgICB1aW50 OF90IGxhbmd1YWdlX2NvZGVbNF07CisKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xl ZnQoZ2JjKSA8ICgxNiArIDgpIC8gOCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7CisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpICE9IFZJREVPX0NPTVBPTkVO VF9ERVNDUklQVE9SKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICBk ZXNjcmlwdG9yX2xlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpOworCisgICAgaWYg KGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCBkZXNjcmlwdG9yX2xlbmd0aCkKKyAg ICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgeworICAgICAgICBHZXRCeXRl Q29udGV4dCBuZ2JjOworICAgICAgICBieXRlc3RyZWFtMl9pbml0KCZuZ2JjLCBnYmMtPmJ1ZmZl ciwgZGVzY3JpcHRvcl9sZW5ndGgpOworICAgICAgICAvKgorICAgICAgICAgKiBza2lwOgorICAg ICAgICAgKiAtIHZpZGVvX3Jlc29sdXRpb24KKyAgICAgICAgICogLSB2aWRlb19hc3BlY3RfcmF0 aW8KKyAgICAgICAgICogLSB2aWRlb19zY2FuX2ZsYWcKKyAgICAgICAgICogLSByZXNlcnZlZAor ICAgICAgICAgKiAtIHZpZGVvX2ZyYW1lX3JhdGUKKyAgICAgICAgICogLSBjb21wb25lbnRfdGFn CisgICAgICAgICAqIC0gdmlkZW9fdHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNzCisgICAgICAgICAq IC0gcmVzZXJ2ZWQKKyAgICAgICAgICovCisgICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoJm5nYmMs ICg0ICsgNCArIDEgKyAyICsgNSArIDE2ICsgNCArIDQpIC8gOCk7CisKKyAgICAgICAgaWYgKGJ5 dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2JjKSA8IDMpCisgICAgICAgICAgICByZXR1cm4g QVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgYnl0ZXN0cmVhbTJfZ2V0X2J1ZmZlcnUoJm5n YmMsIGxhbmd1YWdlX2NvZGUsIDMpOworICAgICAgICBsYW5ndWFnZV9jb2RlWzNdID0gJ1wwJzsK KyAgICB9CisgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCBkZXNjcmlwdG9yX2xlbmd0aCk7CisK KyAgICBpZiAoc3RyZWFtID09IE5VTEwpIHJldHVybiAwOworICAgIHJldHVybiBhdl9kaWN0X3Nl dCgmc3RyZWFtLT5tZXRhZGF0YSwgImxhbmd1YWdlIiwgbGFuZ3VhZ2VfY29kZSwgMCk7Cit9CisK K3N0YXRpYyBpbnQKK3BhcnNlX21oX2F1ZGlvX2NvbXBvbmVudF9kZXNjcmlwdG9yKEFWU3RyZWFt ICpzdHJlYW0sIEdldEJ5dGVDb250ZXh0ICpnYmMpCit7CisgICAgdWludDhfdCBkZXNjcmlwdG9y X2xlbmd0aDsKKyAgICB1aW50OF90IHN0cmVhbV9jb250ZW50OworICAgIHVpbnQ4X3Qgc3RyZWFt X3R5cGU7CisgICAgdWludDhfdCBsYW5ndWFnZV9jb2RlWzRdOworCisgICAgaWYgKGJ5dGVzdHJl YW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCAoMTYgKyA4KSAvIDgpCisgICAgICAgIHJldHVybiBB VkVSUk9SX0lOVkFMSUREQVRBOworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2JjKSAh PSBNSF9BVURJT19DT01QT05FTlRfREVTQ1JJUFRPUikKKyAgICAgICAgcmV0dXJuIEFWRVJST1Jf SU5WQUxJRERBVEE7CisgICAgZGVzY3JpcHRvcl9sZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYnl0 ZXUoZ2JjKTsKKworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgZGVz Y3JpcHRvcl9sZW5ndGgpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAg IHsKKyAgICAgICAgdWludDhfdCBieXRlOworICAgICAgICBib29sIEVTX211bHRpX2xpbmd1YWxf ZmxhZzsKKworICAgICAgICBHZXRCeXRlQ29udGV4dCBuZ2JjOworICAgICAgICBieXRlc3RyZWFt Ml9pbml0KCZuZ2JjLCBnYmMtPmJ1ZmZlciwgZGVzY3JpcHRvcl9sZW5ndGgpOworCisgICAgICAg IGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPAorICAgICAgICAgICAgKDQg KyA0ICsgOCArIDE2ICsgOCArIDggKyAxICsgMSArIDIgKyAzICsgMSArIDI0KSAvIDgpCisgICAg ICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKworICAgICAgICBieXRlICAgICAg ICAgICA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldSgmbmdiYyk7CisgICAgICAgIHN0cmVhbV9jb250 ZW50ID0gYnl0ZSAmIDBiMTExMTsKKworICAgICAgICAvKgorICAgICAgICAgKiBza2lwOgorICAg ICAgICAgKiAtIGNvbXBvbmVudF90eXBlCisgICAgICAgICAqIC0gY29tcG9uZW50X3RhZworICAg ICAgICAgKi8KKyAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcHUoJm5nYmMsIDMpOworICAgICAgICBz dHJlYW1fdHlwZSA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldSgmbmdiYyk7CisKKyAgICAgICAgLy8g c2tpcDogc2ltdWxjYXN0X2dyb3VwX3RhZworICAgICAgICBieXRlc3RyZWFtMl9za2lwdSgmbmdi YywgMSk7CisKKyAgICAgICAgYnl0ZSAgICAgICAgICAgICAgICAgID0gYnl0ZXN0cmVhbTJfZ2V0 X2J5dGV1KCZuZ2JjKTsKKyAgICAgICAgRVNfbXVsdGlfbGluZ3VhbF9mbGFnID0gYnl0ZSA+PiA3 OworCisgICAgICAgIGJ5dGVzdHJlYW0yX2dldF9idWZmZXJ1KCZuZ2JjLCBsYW5ndWFnZV9jb2Rl LCAzKTsKKyAgICAgICAgbGFuZ3VhZ2VfY29kZVszXSA9ICdcMCc7CisKKyAgICAgICAgaWYgKEVT X211bHRpX2xpbmd1YWxfZmxhZykgeworICAgICAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9i eXRlc19sZWZ0KCZuZ2JjKSA8IDMpCisgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5W QUxJRERBVEE7CisgICAgICAgICAgICBieXRlc3RyZWFtMl9za2lwdSgmbmdiYywgMyk7CisgICAg ICAgIH0KKyAgICB9CisgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCBkZXNjcmlwdG9yX2xlbmd0 aCk7CisKKyAgICBpZiAoc3RyZWFtID09IE5VTEwpIHJldHVybiAwOworCisgICAgc3dpdGNoIChz dHJlYW1fY29udGVudCkgeworICAgIGNhc2UgMHgzOgorICAgICAgICBzd2l0Y2ggKHN0cmVhbV90 eXBlKSB7CisgICAgICAgIGNhc2UgMHgxMToKKyAgICAgICAgICAgIHN0cmVhbS0+Y29kZWNwYXIt PmNvZGVjX2lkID0gQVZfQ09ERUNfSURfQUFDX0xBVE07CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgY2FzZSAweDFjOgorICAgICAgICAgICAgc3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfaWQg PSBBVl9DT0RFQ19JRF9BQUM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg ICBicmVhazsKKyAgICBjYXNlIDB4NDoKKyAgICAgICAgc3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNf aWQgPSBBVl9DT0RFQ19JRF9NUDRBTFM7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJl dHVybiBhdl9kaWN0X3NldCgmc3RyZWFtLT5tZXRhZGF0YSwgImxhbmd1YWdlIiwgbGFuZ3VhZ2Vf Y29kZSwgMCk7Cit9CisKKyNkZWZpbmUgTUFYX05VTV9USU1FU1RBTVBfREVTQ1JJUFRPUiAzMgor I2RlZmluZSBESUZGKGEsIGIpICgoYSkgPiAoYikgPyAoKGEpIC0gKGIpKSA6ICgoYikgLSAoYSkp KQorCitzdGF0aWMgaW50CitwYXJzZV9tcHVfdGltZXN0YW1wX2Rlc2NyaXB0b3Ioc3RydWN0IFN0 cmVhbXMgKnN0cmVhbXMsIEdldEJ5dGVDb250ZXh0ICpnYmMpCit7CisgICAgdWludDhfdCBkZXNj cmlwdG9yX2xlbmd0aDsKKworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMp IDwgKDE2ICsgOCkgLyA4KQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKwor ICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2JjKSAhPSBNUFVfVElNRVNUQU1QX0RFU0NS SVBUT1IpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIGRlc2NyaXB0 b3JfbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYyk7CisKKyAgICBpZiAoYnl0ZXN0 cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IGRlc2NyaXB0b3JfbGVuZ3RoKQorICAgICAgICBy ZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB7CisgICAgICAgIEdldEJ5dGVDb250ZXh0 IG5nYmM7CisgICAgICAgIGJ5dGVzdHJlYW0yX2luaXQoJm5nYmMsIGdiYy0+YnVmZmVyLCBkZXNj cmlwdG9yX2xlbmd0aCk7CisKKyAgICAgICAgd2hpbGUgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19s ZWZ0KCZuZ2JjKSA+IDApIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IG1wdV9zZXFfbnVtOworICAg ICAgICAgICAgaW50NjRfdCAgbXB1X3ByZXNlbnRhdGlvbl90aW1lOworICAgICAgICAgICAgc2l6 ZV90ICAgaTsKKworICAgICAgICAgICAgc3RydWN0IE1QVVRpbWVzdGFtcERlc2NyaXB0b3IgKmRl c2M7CisKKyAgICAgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykg PCAoMzIgKyA2NCkgLyA4KQorICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSURE QVRBOworICAgICAgICAgICAgbXB1X3NlcV9udW0gPSBieXRlc3RyZWFtMl9nZXRfYmUzMnUoJm5n YmMpOworICAgICAgICAgICAgbXB1X3ByZXNlbnRhdGlvbl90aW1lID0KKyAgICAgICAgICAgICAg ICBmZl9wYXJzZV9udHBfdGltZShieXRlc3RyZWFtMl9nZXRfYmU2NHUoJm5nYmMpKSAtIE5UUF9P RkZTRVRfVVM7CisKKyAgICAgICAgICAgIGlmIChtcHVfc2VxX251bSA+PSBzdHJlYW1zLT5sYXN0 X3NlcXVlbmNlX251bWJlcikgeworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdHJl YW1zLT5udW1fdGltZXN0YW1wX2Rlc2NyaXB0b3JzOyArK2kpCisgICAgICAgICAgICAgICAgICAg IGlmIChzdHJlYW1zLT50aW1lc3RhbXBfZGVzY3JpcHRvcltpXS5zZXFfbnVtID09CisgICAgICAg ICAgICAgICAgICAgICAgICBtcHVfc2VxX251bSkgeworICAgICAgICAgICAgICAgICAgICAgICAg ZGVzYyA9IHN0cmVhbXMtPnRpbWVzdGFtcF9kZXNjcmlwdG9yICsgaTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGdvdG8gZW5kMjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg ICAgICAgZm9yIChpID0gMDsgaSA8IHN0cmVhbXMtPm51bV90aW1lc3RhbXBfZGVzY3JpcHRvcnM7 ICsraSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbXMtPnRpbWVzdGFtcF9kZXNjcmlw dG9yW2ldLnNlcV9udW0gPAorICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtcy0+bGFzdF9z ZXF1ZW5jZV9udW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MgPSBzdHJlYW1z LT50aW1lc3RhbXBfZGVzY3JpcHRvciArIGk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv IGVuZDE7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChzdHJl YW1zLT5udW1fdGltZXN0YW1wX2Rlc2NyaXB0b3JzICsgMSA+CisgICAgICAgICAgICAgICAgICAg IE1BWF9OVU1fVElNRVNUQU1QX0RFU0NSSVBUT1IpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g d2UgaGF2ZSBhbGwgZGVzY3JpcHRvcnMgbGFyZ2VyIHRoYW4gdGhlIGN1cnJlbnQgc2VxdWVuY2Ug bnVtYmVyCisgICAgICAgICAgICAgICAgICAgIC8vIHdlIGNhbid0IGFkZCBtb3JlLCBzbyB3ZSBz aG91bGQgZXZpY3QgdGhlIG9uZSB3aXRoIHRoZSBsYXJnZXN0IGRpc3RhbmNlCisgICAgICAgICAg ICAgICAgICAgIHVpbnQ2NF90IG1heF9kaXN0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZm9y IChpID0gMDsgaSA8IHN0cmVhbXMtPm51bV90aW1lc3RhbXBfZGVzY3JpcHRvcnM7ICsraSkKKyAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChESUZGKAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJlYW1zLT50aW1lc3RhbXBfZGVzY3JpcHRvcltpXS5zZXFfbnVtLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtcHVfc2VxX251bSkgPiBtYXhfZGlzdCkgeworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MgICAgID0gc3RyZWFtcy0+dGltZXN0YW1wX2Rl c2NyaXB0b3IgKyBpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9kaXN0ID0gRElG RigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtcy0+dGltZXN0YW1wX2Rl c2NyaXB0b3JbaV0uc2VxX251bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXB1 X3NlcV9udW0pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICBhdl9hc3NlcnQxKGRlc2MgIT0gTlVMTCk7IC8vIHNob3VsZCBuZXZlciBmYWlsCisgICAgICAg ICAgICAgICAgICAgIGdvdG8gZW5kMTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg ICAgICBkZXNjID0gYXZfZHluYXJyYXkyX2FkZCgKKyAgICAgICAgICAgICAgICAgICAgKHZvaWQg KiopICZzdHJlYW1zLT50aW1lc3RhbXBfZGVzY3JpcHRvciwKKyAgICAgICAgICAgICAgICAgICAg JnN0cmVhbXMtPm51bV90aW1lc3RhbXBfZGVzY3JpcHRvcnMsCisgICAgICAgICAgICAgICAgICAg IHNpemVvZihzdHJ1Y3QgTVBVVGltZXN0YW1wRGVzY3JpcHRvciksIE5VTEwpOworICAgICAgICAg ICAgICAgIGlmIChkZXNjID09IE5VTEwpIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAgICAg ICAgICAgICAgICBlbmQxOgorICAgICAgICAgICAgICAgIGRlc2MtPnNlcV9udW0gICAgICAgICAg ID0gbXB1X3NlcV9udW07CisgICAgICAgICAgICAgICAgZW5kMjoKKyAgICAgICAgICAgICAgICBk ZXNjLT5wcmVzZW50YXRpb25fdGltZSA9IG1wdV9wcmVzZW50YXRpb25fdGltZTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIGRlc2Ny aXB0b3JfbGVuZ3RoKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX21w dV9leHRlbmRlZF90aW1lc3RhbXBfZGVzY3JpcHRvcigKKyAgICBzdHJ1Y3QgU3RyZWFtcyAqc3Ry ZWFtcywgR2V0Qnl0ZUNvbnRleHQgKmdiYykKK3sKKyAgICB1aW50OF90IGRlc2NyaXB0b3JfbGVu Z3RoOworCisgICAgQVZTdHJlYW0gKnN0cmVhbSA9IHN0cmVhbXMtPnN0cmVhbTsKKworICAgIGlm IChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgKDE2ICsgOCkgLyA4KQorICAgICAg ICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2Jl MTZ1KGdiYykgIT0gTVBVX0VYVEVOREVEX1RJTUVTVEFNUF9ERVNDUklQVE9SKQorICAgICAgICBy ZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICBkZXNjcmlwdG9yX2xlbmd0aCA9IGJ5dGVz dHJlYW0yX2dldF9ieXRldShnYmMpOworCisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19s ZWZ0KGdiYykgPCBkZXNjcmlwdG9yX2xlbmd0aCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5W QUxJRERBVEE7CisgICAgeworICAgICAgICB1aW50OF90ICBieXRlOworICAgICAgICB1aW50OF90 ICBwdHNfb2Zmc2V0X3R5cGU7CisgICAgICAgIGJvb2wgdGltZXNjYWxlX2ZsYWc7CisgICAgICAg IHVpbnQxNl90IGRlZmF1bHRfcHRzX29mZnNldCA9IDA7CisKKyAgICAgICAgR2V0Qnl0ZUNvbnRl eHQgbmdiYzsKKyAgICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgmbmdiYywgZ2JjLT5idWZmZXIsIGRl c2NyaXB0b3JfbGVuZ3RoKTsKKworICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xl ZnQoJm5nYmMpIDwgKDUgKyAyICsgMSkgLyA4KQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1Jf SU5WQUxJRERBVEE7CisgICAgICAgIGJ5dGUgICAgICAgICAgICA9IGJ5dGVzdHJlYW0yX2dldF9i eXRlKCZuZ2JjKTsKKyAgICAgICAgcHRzX29mZnNldF90eXBlID0gKGJ5dGUgPj4gMSkgJiAwYjEx OworICAgICAgICB0aW1lc2NhbGVfZmxhZyAgPSBieXRlICYgMTsKKworICAgICAgICBpZiAodGlt ZXNjYWxlX2ZsYWcpIHsKKyAgICAgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVm dCgmbmdiYykgPCA0KQorICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRB OworICAgICAgICAgICAgc3RyZWFtLT50aW1lX2Jhc2UubnVtID0gMTsKKyAgICAgICAgICAgIHN0 cmVhbS0+dGltZV9iYXNlLmRlbiA9IGJ5dGVzdHJlYW0yX2dldF9iZTMydSgmbmdiYyk7CisgICAg ICAgIH0KKworICAgICAgICBpZiAocHRzX29mZnNldF90eXBlID09IDEpIHsKKyAgICAgICAgICAg IGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPCAyKQorICAgICAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICAgICAgZGVmYXVsdF9wdHNf b2Zmc2V0ID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KCZuZ2JjKTsKKyAgICAgICAgfQorCisgICAg ICAgIHdoaWxlIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPiAwKSB7CisgICAg ICAgICAgICBzaXplX3QgICBpOworICAgICAgICAgICAgdWludDhfdCAgbnVtX29mX2F1OworICAg ICAgICAgICAgdWludDE2X3QgZGVjb2RpbmdfdGltZV9vZmZzZXQ7CisgICAgICAgICAgICB1aW50 NjRfdCBtcHVfc2VxX251bTsKKworICAgICAgICAgICAgc3RydWN0IE1QVUV4dGVuZGVkVGltZXN0 YW1wRGVzY3JpcHRvciAqZGVzYyA9IE5VTEw7CisKKyAgICAgICAgICAgIGlmIChwdHNfb2Zmc2V0 X3R5cGUgPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7 ICAvLyB3ZSBkb24ndCBrbm93IGhvdyB0byBoYW5kbGUgdGhpcworCisgICAgICAgICAgICBpZiAo Ynl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoJm5nYmMpIDwgKDMyICsgMiArIDYgKyAxNiArIDgp IC8gOCkKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAg ICAgICAgIG1wdV9zZXFfbnVtID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMzJ1KCZuZ2JjKTsKKyAgICAg ICAgICAgIC8vIHNraXA6IGxlYXBfaW5kaWNhdG9yCisgICAgICAgICAgICBieXRlc3RyZWFtMl9z a2lwKCZuZ2JjLCAoMiArIDYpIC8gOCk7CisgICAgICAgICAgICBkZWNvZGluZ190aW1lX29mZnNl dCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dSgmbmdiYyk7CisgICAgICAgICAgICBudW1fb2ZfYXUg ICAgICAgICAgICA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldSgmbmdiYyk7CisKKyAgICAgICAgICAg IGlmIChtcHVfc2VxX251bSA+PSBzdHJlYW1zLT5sYXN0X3NlcXVlbmNlX251bWJlcikgeworICAg ICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdHJlYW1zLT5udW1fZXh0X3RpbWVzdGFtcF9k ZXNjcmlwdG9yczsgKytpKQorICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtcy0+ZXh0X3Rp bWVzdGFtcF9kZXNjcmlwdG9yW2ldLnNlcV9udW0gPT0KKyAgICAgICAgICAgICAgICAgICAgICAg IG1wdV9zZXFfbnVtKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXNjID0gc3RyZWFtcy0+ ZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yICsgaTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdv dG8gZW5kMjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZm9yIChp ID0gMDsgaSA8IHN0cmVhbXMtPm51bV9leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3JzOyArK2kpCisg ICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW1zLT5leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3Jb aV0uc2VxX251bSA8CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1zLT5sYXN0X3NlcXVl bmNlX251bWJlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVzYyA9IHN0cmVhbXMtPmV4 dF90aW1lc3RhbXBfZGVzY3JpcHRvciArIGk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv IGVuZDE7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChzdHJl YW1zLT5udW1fZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9ycyArIDEgPgorICAgICAgICAgICAgICAg ICAgICBNQVhfTlVNX1RJTUVTVEFNUF9ERVNDUklQVE9SKSB7CisgICAgICAgICAgICAgICAgICAg IHVpbnQ2NF90IG1heF9kaWZmID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsg aSA8IHN0cmVhbXMtPm51bV9leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3JzOyArK2kpCisgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoRElGRigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RyZWFtcy0+ZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yW2ldLnNlcV9udW0sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1wdV9zZXFfbnVtKSA+IG1heF9kaWZmKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZGVzYyAgICAgPSBzdHJlYW1zLT5leHRfdGltZXN0YW1w X2Rlc2NyaXB0b3IgKyBpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9kaWZmID0g RElGRigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtcy0+ZXh0X3RpbWVz dGFtcF9kZXNjcmlwdG9yW2ldLnNlcV9udW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG1wdV9zZXFfbnVtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgYXZfYXNzZXJ0MShkZXNjICE9IE5VTEwpOworICAgICAgICAgICAgICAgICAgICBn b3RvIGVuZDE7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZGVzYyA9IGF2 X2R5bmFycmF5Ml9hZGQoCisgICAgICAgICAgICAgICAgICAgICh2b2lkICoqKSAmc3RyZWFtcy0+ ZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yLAorICAgICAgICAgICAgICAgICAgICAmc3RyZWFtcy0+ bnVtX2V4dF90aW1lc3RhbXBfZGVzY3JpcHRvcnMsCisgICAgICAgICAgICAgICAgICAgIHNpemVv ZihzdHJ1Y3QgTVBVRXh0ZW5kZWRUaW1lc3RhbXBEZXNjcmlwdG9yKSwgTlVMTCk7CisgICAgICAg ICAgICAgICAgaWYgKGRlc2MgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFW RVJST1IoRU5PTUVNKTsKKworICAgICAgICAgICAgICAgIGVuZDE6CisgICAgICAgICAgICAgICAg ZGVzYy0+c2VxX251bSAgICAgICAgICAgICAgPSBtcHVfc2VxX251bTsKKyAgICAgICAgICAgICAg ICBlbmQyOgorICAgICAgICAgICAgICAgIGRlc2MtPmRlY29kaW5nX3RpbWVfb2Zmc2V0ID0gZGVj b2RpbmdfdGltZV9vZmZzZXQ7CisgICAgICAgICAgICAgICAgZGVzYy0+bnVtX29mX2F1ICAgICAg ICAgICAgPSBudW1fb2ZfYXU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaSA9 IDA7IGkgPCBudW1fb2ZfYXU7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChieXRlc3RyZWFt Ml9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPCAyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g QVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgICAgICAgICBpZiAoZGVzYyAhPSBOVUxMKQor ICAgICAgICAgICAgICAgICAgICBkZXNjLT5hdVtpXS5kdHNfcHRzX29mZnNldCA9IGJ5dGVzdHJl YW0yX2dldF9iZTE2dSgmbmdiYyk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg ICAgICAgICBieXRlc3RyZWFtMl9za2lwdSgmbmdiYywgMik7CisKKyAgICAgICAgICAgICAgICBp ZiAocHRzX29mZnNldF90eXBlID09IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGVz dHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2JjKSA8IDIpCisgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRl c2MgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MtPmF1W2ldLnB0c19vZmZz ZXQgPSBieXRlc3RyZWFtMl9nZXRfYmUxNnUoJm5nYmMpOworICAgICAgICAgICAgICAgICAgICBl bHNlCisgICAgICAgICAgICAgICAgICAgICAgICBieXRlc3RyZWFtMl9za2lwdSgmbmdiYywgMik7 CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZXNjICE9IE5VTEwpIHsKKyAgICAgICAgICAg ICAgICAgICAgZGVzYy0+YXVbaV0ucHRzX29mZnNldCA9IGRlZmF1bHRfcHRzX29mZnNldDsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgYnl0 ZXN0cmVhbTJfc2tpcHUoZ2JjLCBkZXNjcmlwdG9yX2xlbmd0aCk7CisKKyAgICByZXR1cm4gMDsK K30KKworc3RhdGljIGludAorcGFyc2VfYWRkaXRpb25hbF9hcmliX3N1YnRpdGxlX2luZm8oQVZT dHJlYW0gKnN0cmVhbSwgR2V0Qnl0ZUNvbnRleHQgKmdiYykKK3sKKyAgICBib29sICAgIHN0YXJ0 X21wdV9zZXF1ZW5jZV9udW1iZXJfZmxhZzsKKyAgICBjaGFyICAgIGxhbmd1YWdlX2NvZGVbNF07 CisgICAgdWludDhfdCBzdWJ0aXRsZV9mb3JtYXQ7CisKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0 X2J5dGVzX2xlZnQoZ2JjKSA8CisgICAgICAgICg4ICsgNCArIDEgKyAzICsgMjQgKyAyICsgNCAr IDIgKyA0ICsgNCArIDQgKyA0KSAvIDgpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSURE QVRBOworICAgIC8vIHNraXA6IHN1YnRpdGxlX3RhZworICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdi YywgMSk7CisgICAgc3RhcnRfbXB1X3NlcXVlbmNlX251bWJlcl9mbGFnID0gKGJ5dGVzdHJlYW0y X2dldF9ieXRldShnYmMpID4+IDMpICYgMTsKKyAgICBieXRlc3RyZWFtMl9nZXRfYnVmZmVydShn YmMsIGxhbmd1YWdlX2NvZGUsIDMpOworICAgIGxhbmd1YWdlX2NvZGVbM10gPSAnXDAnOworICAg IHN1YnRpdGxlX2Zvcm1hdCA9IChieXRlc3RyZWFtMl9nZXRfYnl0ZXUoZ2JjKSA+PiAyKSAmIDBi MTExMTsKKyAgICAvKgorICAgICAqIHNraXA6CisgICAgICogLSBUTUQKKyAgICAgKiAtIERNRgor ICAgICAqIC0gcmVzb2x1dGlvbgorICAgICAqIC0gY29tcHJlc3Npb25fdHlwZQorICAgICAqLwor ICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgKDQgKyA0ICsgNCArIDQpIC8gOCk7CisKKyAgICBp ZiAoc3RhcnRfbXB1X3NlcXVlbmNlX251bWJlcl9mbGFnKQorICAgICAgICBieXRlc3RyZWFtMl9z a2lwKGdiYywgMzIpOworCisgICAgc3dpdGNoIChzdWJ0aXRsZV9mb3JtYXQpIHsKKyAgICBjYXNl IDBiMDAwMDoKKyAgICAgICAgc3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfaWQgPSBBVl9DT0RFQ19J RF9UVE1MOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gYXZfZGljdF9zZXQo JnN0cmVhbS0+bWV0YWRhdGEsICJsYW5ndWFnZSIsIGxhbmd1YWdlX2NvZGUsIDApOworfQorCitz dGF0aWMgaW50CitwYXJzZV9taF9kYXRhX2NvbXBvbmVudF9kZXNjcmlwdG9yKEFWU3RyZWFtICpz dHJlYW0sIEdldEJ5dGVDb250ZXh0ICpnYmMpCit7CisgICAgdWludDhfdCBkZXNjcmlwdG9yX2xl bmd0aDsKKworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgKDE2ICsg OCkgLyA4KQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICBpZiAoYnl0 ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYykgIT0gTUhfREFUQV9DT01QT05FTlRfREVTQ1JJUFRPUikK KyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgZGVzY3JpcHRvcl9sZW5n dGggPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoZ2JjKTsKKworICAgIGlmIChieXRlc3RyZWFtMl9n ZXRfYnl0ZXNfbGVmdChnYmMpIDwgZGVzY3JpcHRvcl9sZW5ndGgpCisgICAgICAgIHJldHVybiBB VkVSUk9SX0lOVkFMSUREQVRBOworICAgIHsKKyAgICAgICAgR2V0Qnl0ZUNvbnRleHQgbmdiYzsK KyAgICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgmbmdiYywgZ2JjLT5idWZmZXIsIGRlc2NyaXB0b3Jf bGVuZ3RoKTsKKyAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCBkZXNjcmlwdG9yX2xlbmd0 aCk7CisKKyAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2JjKSA8IDE2 IC8gOCkKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICBz d2l0Y2ggKGJ5dGVzdHJlYW0yX2dldF9iZTE2dSgmbmdiYykpIHsKKyAgICAgICAgY2FzZSAweDAw MjA6IC8vIGFkZGl0aW9uYWwgQVJJQiBzdWJ0aXRsZSBpbmZvIChUYWJsZSA3LTc0LCBBUklCIFNU RC1CNjAsIFZlcnNpb24gMS4xNC1FMSkKKyAgICAgICAgICAgIHJldHVybiBwYXJzZV9hZGRpdGlv bmFsX2FyaWJfc3VidGl0bGVfaW5mbyhzdHJlYW0sICZuZ2JjKTsKKyAgICAgICAgfQorICAgIH0K KworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitwYXJzZV9zdHJlYW1faWRlbnRpZmll cl9kZXNjcmlwdG9yKEFWU3RyZWFtICpzdHJlYW0sIEdldEJ5dGVDb250ZXh0ICpnYmMpCit7Cisg ICAgdWludDhfdCBkZXNjcmlwdG9yX2xlbmd0aDsKKworICAgIGlmIChieXRlc3RyZWFtMl9nZXRf Ynl0ZXNfbGVmdChnYmMpIDwgKDE2ICsgOCkgLyA4KQorICAgICAgICByZXR1cm4gQVZFUlJPUl9J TlZBTElEREFUQTsKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYykgIT0gTUhfU1RS RUFNX0lERU5USUZJRVJfREVTQ1JJUFRPUikKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7CisgICAgZGVzY3JpcHRvcl9sZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoZ2Jj KTsKKworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgZGVzY3JpcHRv cl9sZW5ndGgpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIHsKKyAg ICAgICAgLy8gbm8gbmVlZCBmb3Igbm93CisgICAgfQorICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdi YywgZGVzY3JpcHRvcl9sZW5ndGgpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg c2tpcF91bmtub3duX2Rlc2NyaXB0b3Iodm9pZCAqbG9nLCBHZXRCeXRlQ29udGV4dCAqZ2JjKQor eworICAgIC8vIGFzc3VtZXMgYXQgbGVhc3QgMyBieXRlcyBsZWZ0IHRvIHJlYWQgaW4gZ2JjCisg ICAgY29uc3QgdWludDE2X3QgZGVzY3JpcHRvcl90YWcgPSBieXRlc3RyZWFtMl9nZXRfYmUxNnUo Z2JjKTsKKyAgICB1bnNpZ25lZCBpbnQgICBkZXNjcmlwdG9yX2xlbmd0aDsKKworICAgIGF2X2xv Zyhsb2csIEFWX0xPR19WRVJCT1NFLCAiVW5rbm93biBkZXNjcmlwdG9yOiAweCUwNHhcbiIsIGRl c2NyaXB0b3JfdGFnKTsKKworICAgIGlmIChkZXNjcmlwdG9yX3RhZyA8PSAweDNGRkYpIHsgICAg ICAgIC8vIDgtYml0IGxlbmd0aCBkZXNjcmlwdG9yCisgICAgICAgIGRlc2NyaXB0b3JfbGVuZ3Ro ID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYyk7CisgICAgfSBlbHNlIGlmIChkZXNjcmlwdG9y X3RhZyA8PSAweDZGRkYpIHsgLy8gMTYtYml0IGxlbmd0aCBkZXNjcmlwdG9yCisgICAgICAgIGlm IChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgMikKKyAgICAgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICBkZXNjcmlwdG9yX2xlbmd0aCA9IGJ5dGVz dHJlYW0yX2dldF9iZTE2dShnYmMpOworICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvcl90YWcgPD0g MHg3RkZGKSB7IC8vIDMyLWJpdCBsZW5ndGggZGVzY3JpcHRvcgorICAgICAgICBpZiAoYnl0ZXN0 cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IDQpCisgICAgICAgICAgICByZXR1cm4gQVZFUlJP Ul9JTlZBTElEREFUQTsKKyAgICAgICAgZGVzY3JpcHRvcl9sZW5ndGggPSBieXRlc3RyZWFtMl9n ZXRfYmUzMnUoZ2JjKTsKKyAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3JfdGFnIDw9IDB4RUZGRikg eyAvLyA4LWJpdCBsZW5ndGggZGVzY3JpcHRvcgorICAgICAgICBkZXNjcmlwdG9yX2xlbmd0aCA9 IGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpOworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8vIDE2LWJpdCBsZW5ndGggZGVzY3JpcHRvcgorICAgICAgICBpZiAo Ynl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IDIpCisgICAgICAgICAgICByZXR1cm4g QVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgZGVzY3JpcHRvcl9sZW5ndGggPSBieXRlc3Ry ZWFtMl9nZXRfYmUxNnUoZ2JjKTsKKyAgICB9CisKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5 dGVzX2xlZnQoZ2JjKSA8IGRlc2NyaXB0b3JfbGVuZ3RoKQorICAgICAgICByZXR1cm4gQVZFUlJP Ul9JTlZBTElEREFUQTsKKyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIGRlc2NyaXB0b3JfbGVu Z3RoKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV9tcHRfZGVzY3JpcHRv cihzdHJ1Y3QgU3RyZWFtcyAqc3RyZWFtcywgR2V0Qnl0ZUNvbnRleHQgKmdiYykKK3sKKyAgICBp ZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IDMpCisgICAgICAgIHJldHVybiBB VkVSUk9SX0lOVkFMSUREQVRBOworICAgIHN3aXRjaCAoYnl0ZXN0cmVhbTJfcGVla19iZTE2dShn YmMpKSB7CisgICAgY2FzZSBNUFVfVElNRVNUQU1QX0RFU0NSSVBUT1I6CisgICAgICAgIHJldHVy biBwYXJzZV9tcHVfdGltZXN0YW1wX2Rlc2NyaXB0b3Ioc3RyZWFtcywgZ2JjKTsKKyAgICBjYXNl IFZJREVPX0NPTVBPTkVOVF9ERVNDUklQVE9SOgorICAgICAgICByZXR1cm4gcGFyc2VfdmlkZW9f Y29tcG9uZW50X2Rlc2NyaXB0b3Ioc3RyZWFtcy0+c3RyZWFtLCBnYmMpOworICAgIGNhc2UgTUhf U1RSRUFNX0lERU5USUZJRVJfREVTQ1JJUFRPUjoKKyAgICAgICAgcmV0dXJuIHBhcnNlX3N0cmVh bV9pZGVudGlmaWVyX2Rlc2NyaXB0b3Ioc3RyZWFtcy0+c3RyZWFtLCBnYmMpOworICAgIGNhc2Ug TUhfQVVESU9fQ09NUE9ORU5UX0RFU0NSSVBUT1I6CisgICAgICAgIHJldHVybiBwYXJzZV9taF9h dWRpb19jb21wb25lbnRfZGVzY3JpcHRvcihzdHJlYW1zLT5zdHJlYW0sIGdiYyk7CisgICAgY2Fz ZSBNSF9EQVRBX0NPTVBPTkVOVF9ERVNDUklQVE9SOgorICAgICAgICByZXR1cm4gcGFyc2VfbWhf ZGF0YV9jb21wb25lbnRfZGVzY3JpcHRvcihzdHJlYW1zLT5zdHJlYW0sIGdiYyk7CisgICAgY2Fz ZSBNUFVfRVhURU5ERURfVElNRVNUQU1QX0RFU0NSSVBUT1I6CisgICAgICAgIHJldHVybiBwYXJz ZV9tcHVfZXh0ZW5kZWRfdGltZXN0YW1wX2Rlc2NyaXB0b3Ioc3RyZWFtcywgZ2JjKTsKKyAgICBk ZWZhdWx0OgorICAgICAgICByZXR1cm4gc2tpcF91bmtub3duX2Rlc2NyaXB0b3Ioc3RyZWFtcy0+ c3RyZWFtLCBnYmMpOworICAgIH0KK30KKworc3RhdGljIGludCBwYXJzZV9taF9zaG9ydF9ldmVu dF9kZXNjcmlwdG9yKAorICAgIE1NVFBDb250ZXh0ICpjdHgsIEdldEJ5dGVDb250ZXh0ICpnYmMp Cit7CisgICAgdWludDE2X3QgZGVzY3JpcHRvcl9sZW5ndGg7CisKKyAgICBpZiAoYnl0ZXN0cmVh bTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8ICgxNiArIDE2KSAvIDgpCisgICAgICAgIHJldHVybiBB VkVSUk9SX0lOVkFMSUREQVRBOworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2JjKSAh PSBNSF9TSE9SVF9FVkVOVF9ERVNDUklQVE9SKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZB TElEREFUQTsKKyAgICBkZXNjcmlwdG9yX2xlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dShn YmMpOworCisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCBkZXNjcmlw dG9yX2xlbmd0aCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgewor ICAgICAgICB1aW50OF90ICBsYW5ndWFnZV9jb2RlWzRdOworICAgICAgICB1aW50OF90ICBldmVu dF9uYW1lX2xlbmd0aDsKKyAgICAgICAgdWludDE2X3QgdGV4dF9sZW5ndGg7CisgICAgICAgIGNo YXIgICAgICpldmVudF9uYW1lLCAqdGV4dDsKKworICAgICAgICBHZXRCeXRlQ29udGV4dCBuZ2Jj OworICAgICAgICBieXRlc3RyZWFtMl9pbml0KCZuZ2JjLCBnYmMtPmJ1ZmZlciwgZGVzY3JpcHRv cl9sZW5ndGgpOworCisgICAgICAgIGJ5dGVzdHJlYW0yX2dldF9idWZmZXIoJm5nYmMsIGxhbmd1 YWdlX2NvZGUsIDMpOworICAgICAgICBsYW5ndWFnZV9jb2RlWzNdID0gJ1wwJzsKKworICAgICAg ICBldmVudF9uYW1lX2xlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9ieXRlKCZuZ2JjKTsKKyAgICAg ICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2JjKSA8IGV2ZW50X25hbWVfbGVu Z3RoKQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgIGV2 ZW50X25hbWUgPSBhdl9zdHJuZHVwKG5nYmMuYnVmZmVyLCBldmVudF9uYW1lX2xlbmd0aCk7Cisg ICAgICAgIGJ5dGVzdHJlYW0yX3NraXB1KCZuZ2JjLCBldmVudF9uYW1lX2xlbmd0aCk7CisKKyAg ICAgICAgYXZfZGljdF9zZXQoJmN0eC0+cHJvZ3JhbS0+bWV0YWRhdGEsICJsYW5ndWFnZSIsIGxh bmd1YWdlX2NvZGUsIDApOworICAgICAgICBhdl9kaWN0X3NldCgmY3R4LT5wcm9ncmFtLT5tZXRh ZGF0YSwgInRpdGxlIiwgZXZlbnRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgQVZfRElDVF9E T05UX1NUUkRVUF9WQUwpOworCisgICAgICAgIHRleHRfbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0 X2JlMTZ1KCZuZ2JjKTsKKyAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZu Z2JjKSA8IHRleHRfbGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7CisgICAgICAgIHRleHQgPSBhdl9zdHJuZHVwKG5nYmMuYnVmZmVyLCB0ZXh0X2xlbmd0aCk7 CisgICAgICAgIGJ5dGVzdHJlYW0yX3NraXB1KCZuZ2JjLCB0ZXh0X2xlbmd0aCk7CisKKyAgICAg ICAgYXZfZGljdF9zZXQoJmN0eC0+cHJvZ3JhbS0+bWV0YWRhdGEsICJkZXNjcmlwdGlvbiIsIHRl eHQsCisgICAgICAgICAgICAgICAgICAgIEFWX0RJQ1RfRE9OVF9TVFJEVVBfVkFMKTsKKyAgICB9 CisgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCBkZXNjcmlwdG9yX2xlbmd0aCk7CisKKyAgICBy ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV9taF9laXRfZGVzY3JpcHRvcihNTVRQQ29u dGV4dCAqY3R4LCBHZXRCeXRlQ29udGV4dCAqZ2JjKQoreworICAgIGlmIChieXRlc3RyZWFtMl9n ZXRfYnl0ZXNfbGVmdChnYmMpIDwgMykKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7CisgICAgc3dpdGNoIChieXRlc3RyZWFtMl9wZWVrX2JlMTZ1KGdiYykpIHsKKyAgICBjYXNl IFZJREVPX0NPTVBPTkVOVF9ERVNDUklQVE9SOgorICAgICAgICByZXR1cm4gcGFyc2VfdmlkZW9f Y29tcG9uZW50X2Rlc2NyaXB0b3IoTlVMTCwgZ2JjKTsKKyAgICBjYXNlIE1IX0FVRElPX0NPTVBP TkVOVF9ERVNDUklQVE9SOgorICAgICAgICByZXR1cm4gcGFyc2VfbWhfYXVkaW9fY29tcG9uZW50 X2Rlc2NyaXB0b3IoTlVMTCwgZ2JjKTsKKyAgICBjYXNlIE1IX1NIT1JUX0VWRU5UX0RFU0NSSVBU T1I6CisgICAgICAgIHJldHVybiBwYXJzZV9taF9zaG9ydF9ldmVudF9kZXNjcmlwdG9yKGN0eCwg Z2JjKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gc2tpcF91bmtub3duX2Rlc2NyaXB0 b3IoY3R4LT5zLCBnYmMpOworICAgIH0KK30KKworc3RhdGljIGludCBwYXJzZV9tbXRfcGFja2Fn ZV90YWJsZShNTVRQQ29udGV4dCAqY3R4LCBHZXRCeXRlQ29udGV4dCAqZ2JjKQoreworICAgIHVp bnQxNl90IGxlbmd0aDsKKworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMp IDwgKDggKyA4ICsgMTYpIC8gOCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7 CisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpICE9IE1NVF9QQUNLQUdFX1RBQkxF X0lEKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAvLyBza2lwOiB2 ZXJzaW9uCisgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCAxKTsKKyAgICBsZW5ndGggPSBieXRl c3RyZWFtMl9nZXRfYmUxNnUoZ2JjKTsKKworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNf bGVmdChnYmMpIDwgbGVuZ3RoKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsK KyAgICB7CisgICAgICAgIHNpemVfdCAgIGksIGo7CisgICAgICAgIHVpbnQ4X3QgIHBhY2thZ2Vf aWRfbGVuZ3RoOworICAgICAgICB1aW50MTZfdCBkZXNjcmlwdG9yc19sZW5ndGg7CisgICAgICAg IHVpbnQ4X3QgIG51bWJlcl9vZl9hc3NldHM7CisKKyAgICAgICAgR2V0Qnl0ZUNvbnRleHQgbmdi YzsKKyAgICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgmbmdiYywgZ2JjLT5idWZmZXIsIGxlbmd0aCk7 CisKKyAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2JjKSA8ICg2ICsg MiArIDgpIC8gOCkKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworCisg ICAgICAgIC8vIHNraXA6IE1QVF9tb2RlCisgICAgICAgIGJ5dGVzdHJlYW0yX3NraXB1KCZuZ2Jj LCAxKTsKKyAgICAgICAgcGFja2FnZV9pZF9sZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUo Jm5nYmMpOworCisgICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoJm5nYmMsIHBhY2thZ2VfaWRfbGVu Z3RoKTsKKworICAgICAgICBkZXNjcmlwdG9yc19sZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYmUx NigmbmdiYyk7CisgICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoJm5nYmMsIGRlc2NyaXB0b3JzX2xl bmd0aCk7CisKKyAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2JjKSA8 IDEpCisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgbnVt YmVyX29mX2Fzc2V0cyA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldSgmbmdiYyk7CisKKyAgICAgICAg Zm9yIChpID0gMDsgaSA8IG51bWJlcl9vZl9hc3NldHM7ICsraSkgeworICAgICAgICAgICAgaW50 IGVycjsKKworICAgICAgICAgICAgdWludDhfdCAgYXNzZXRfaWRfbGVuZ3RoOworICAgICAgICAg ICAgdWludDhfdCAgbG9jYXRpb25fY291bnQ7CisgICAgICAgICAgICB1aW50MTZfdCBhc3NldF9k ZXNjcmlwdG9yc19sZW5ndGg7CisgICAgICAgICAgICB1aW50MzJfdCBhc3NldF90eXBlOworCisg ICAgICAgICAgICBzdHJ1Y3QgU3RyZWFtcyAqc3RyZWFtID0gTlVMTDsKKworICAgICAgICAgICAg c3RydWN0IE1NVEdlbmVyYWxMb2NhdGlvbkluZm8gaW5mbzsKKworICAgICAgICAgICAgaWYgKGJ5 dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2JjKSA8ICg4ICsgMzIgKyA4KSAvIDgpCisgICAg ICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgICAgICAvKgor ICAgICAgICAgICAgICogc2tpcDoKKyAgICAgICAgICAgICAqIC0gaWRlbnRpZmllcl90eXBlCisg ICAgICAgICAgICAgKiAtIGFzc2V0X2lkX3NjaGVtZQorICAgICAgICAgICAgICovCisgICAgICAg ICAgICBieXRlc3RyZWFtMl9za2lwdSgmbmdiYywgKDggKyAzMikgLyA4KTsKKyAgICAgICAgICAg IGFzc2V0X2lkX2xlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldSgmbmdiYyk7CisKKyAgICAg ICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoJm5nYmMsIGFzc2V0X2lkX2xlbmd0aCk7CisKKyAgICAg ICAgICAgIGFzc2V0X3R5cGUgPSBieXRlc3RyZWFtMl9nZXRfbGUzMigmbmdiYyk7CisKKyAgICAg ICAgICAgIC8vIHNraXA6IGFzc2V0X2Nsb2NrX3JlbGF0aW9uX2ZsYWcKKyAgICAgICAgICAgIGJ5 dGVzdHJlYW0yX3NraXAoJm5nYmMsIDEpOworCisgICAgICAgICAgICBpZiAoYnl0ZXN0cmVhbTJf Z2V0X2J5dGVzX2xlZnQoJm5nYmMpIDwgMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJP Ul9JTlZBTElEREFUQTsKKyAgICAgICAgICAgIGxvY2F0aW9uX2NvdW50ID0gYnl0ZXN0cmVhbTJf Z2V0X2J5dGV1KCZuZ2JjKTsKKworICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxvY2F0aW9u X2NvdW50OyArK2opCisgICAgICAgICAgICAgICAgaWYgKChlcnIgPSBwYXJzZV9tbXRfZ2VuZXJh bF9sb2NhdGlvbl9pbmZvKCZpbmZvLCAmbmdiYykpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAg cmV0dXJuIGVycjsKKworICAgICAgICAgICAgc3dpdGNoIChhc3NldF90eXBlKSB7CisgICAgICAg ICAgICBjYXNlIE1LVEFHKCdoJywgJ2UnLCAndicsICcxJyk6CisgICAgICAgICAgICAgICAgaWYg KGluZm8ubG9jYXRpb25fdHlwZSAhPSAweDAwKSByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7 CisgICAgICAgICAgICAgICAgc3RyZWFtID0gZmluZF9vcl9hbGxvY2F0ZV9zdHJlYW0oY3R4LCBp bmZvLnR5cGUwLnBhY2tldF9pZCk7CisgICAgICAgICAgICAgICAgaWYgKHN0cmVhbSA9PSBOVUxM KSByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgICAgICAgICAgICAgIHN0cmVhbS0+c3RyZWFt LT5jb2RlY3Bhci0+Y29kZWNfdHlwZSA9IEFWTUVESUFfVFlQRV9WSURFTzsKKyAgICAgICAgICAg ICAgICBzdHJlYW0tPnN0cmVhbS0+Y29kZWNwYXItPmNvZGVjX2lkICAgPSBBVl9DT0RFQ19JRF9I RVZDOworICAgICAgICAgICAgICAgIHN0cmVhbS0+c3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfdGFn ICA9IGFzc2V0X3R5cGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl IE1LVEFHKCdtJywgJ3AnLCAnNCcsICdhJyk6CisgICAgICAgICAgICAgICAgaWYgKGluZm8ubG9j YXRpb25fdHlwZSAhPSAweDAwKSByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7CisgICAgICAg ICAgICAgICAgc3RyZWFtID0gZmluZF9vcl9hbGxvY2F0ZV9zdHJlYW0oY3R4LCBpbmZvLnR5cGUw LnBhY2tldF9pZCk7CisgICAgICAgICAgICAgICAgaWYgKHN0cmVhbSA9PSBOVUxMKSByZXR1cm4g QVZFUlJPUihFTk9NRU0pOworICAgICAgICAgICAgICAgIHN0cmVhbS0+c3RyZWFtLT5jb2RlY3Bh ci0+Y29kZWNfdHlwZSA9IEFWTUVESUFfVFlQRV9BVURJTzsKKyAgICAgICAgICAgICAgICBzdHJl YW0tPnN0cmVhbS0+Y29kZWNwYXItPmNvZGVjX3RhZyAgPSBhc3NldF90eXBlOworICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBNS1RBRygncycsICd0JywgJ3AnLCAncCcp OgorICAgICAgICAgICAgICAgIGlmIChpbmZvLmxvY2F0aW9uX3R5cGUgPT0gMHgwMCkgeworICAg ICAgICAgICAgICAgICAgICBzdHJlYW0gPSBmaW5kX29yX2FsbG9jYXRlX3N0cmVhbShjdHgsIGlu Zm8udHlwZTAucGFja2V0X2lkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbSA9PSBO VUxMKSByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgICAgICAgICAgICAgICAgICBzdHJlYW0t PnN0cmVhbS0+Y29kZWNwYXItPmNvZGVjX3R5cGUgPSBBVk1FRElBX1RZUEVfU1VCVElUTEU7Cisg ICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+c3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfdGFnICA9 IGFzc2V0X3R5cGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgY2FzZSBNS1RBRygnYScsICdhJywgJ3AnLCAncCcpOgorICAgICAgICAgICAg Y2FzZSBNS1RBRygnYScsICdzJywgJ2cnLCAnZCcpOgorICAgICAgICAgICAgY2FzZSBNS1RBRygn YScsICdhJywgJ2cnLCAnZCcpOgorICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBUT0RPCisgICAg ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgm bmdiYykgPCAyKQorICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwor ICAgICAgICAgICAgYXNzZXRfZGVzY3JpcHRvcnNfbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2Jl MTZ1KCZuZ2JjKTsKKyAgICAgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgm bmdiYykgPCBhc3NldF9kZXNjcmlwdG9yc19sZW5ndGgpCisgICAgICAgICAgICAgICAgcmV0dXJu IEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgICAgICBpZiAoc3RyZWFtICE9IE5VTEwpIHsK KyAgICAgICAgICAgICAgICBHZXRCeXRlQ29udGV4dCBubmdiYzsKKyAgICAgICAgICAgICAgICBi eXRlc3RyZWFtMl9pbml0KCZubmdiYywgbmdiYy5idWZmZXIsIGFzc2V0X2Rlc2NyaXB0b3JzX2xl bmd0aCk7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xl ZnQoJm5uZ2JjKSA+IDApCisgICAgICAgICAgICAgICAgICAgIGlmICgoZXJyID0gcGFyc2VfbXB0 X2Rlc2NyaXB0b3Ioc3RyZWFtLCAmbm5nYmMpKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gZXJyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnl0ZXN0cmVhbTJfc2tp cHUoJm5nYmMsIGFzc2V0X2Rlc2NyaXB0b3JzX2xlbmd0aCk7CisgICAgICAgIH0KKyAgICB9Cisg ICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCBsZW5ndGgpOworCisgICAgcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgcGFyc2VfcGFja2FnZV9saXN0X3RhYmxlKE1NVFBDb250ZXh0ICpjdHgsIEdl dEJ5dGVDb250ZXh0ICpnYmMpCit7CisgICAgc2l6ZV90ICAgaTsKKyAgICB1aW50MzJfdCBsZW5n dGg7CisKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8ICg4ICsgOCAr IDE2KSAvIDgpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIGlmIChi eXRlc3RyZWFtMl9nZXRfYnl0ZXUoZ2JjKSAhPSBQQUNLQUdFX0xJU1RfVEFCTEVfSUQpCisgICAg ICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIC8vIHNraXA6IHZlcnNpb24KKyAg ICBieXRlc3RyZWFtMl9za2lwdShnYmMsIDEpOworICAgIGxlbmd0aCA9IGJ5dGVzdHJlYW0yX2dl dF9iZTE2dShnYmMpOworCisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykg PCBsZW5ndGgpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIHsKKyAg ICAgICAgaW50ICAgICBlcnI7CisgICAgICAgIHVpbnQ4X3QgbnVtX29mX3BhY2thZ2U7CisgICAg ICAgIHVpbnQ4X3QgbnVtX29mX2lwX2RlbGl2ZXJ5OworCisgICAgICAgIEdldEJ5dGVDb250ZXh0 IG5nYmM7CisgICAgICAgIGJ5dGVzdHJlYW0yX2luaXQoJm5nYmMsIGdiYy0+YnVmZmVyLCBsZW5n dGgpOworCisgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgMSkK KyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICBudW1fb2Zf cGFja2FnZSA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldSgmbmdiYyk7CisKKyAgICAgICAgZm9yIChp ID0gMDsgaSA8IG51bV9vZl9wYWNrYWdlOyArK2kpIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgICAg ICAgICAgICAgICAgICAgICAgIHBhY2thZ2VfaWRfbGVuZ3RoOworICAgICAgICAgICAgc3RydWN0 IE1NVEdlbmVyYWxMb2NhdGlvbkluZm8gaW5mbzsKKworICAgICAgICAgICAgcGFja2FnZV9pZF9s ZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYnl0ZSgmbmdiYyk7CisgICAgICAgICAgICBieXRlc3Ry ZWFtMl9za2lwKCZuZ2JjLCBwYWNrYWdlX2lkX2xlbmd0aCk7CisKKyAgICAgICAgICAgIGlmICgo ZXJyID0gcGFyc2VfbW10X2dlbmVyYWxfbG9jYXRpb25faW5mbygmaW5mbywgJm5nYmMpKSA8IDAp CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChi eXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPCAxKQorICAgICAgICAgICAgcmV0dXJu IEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgIG51bV9vZl9pcF9kZWxpdmVyeSA9IGJ5dGVz dHJlYW0yX2dldF9ieXRldSgmbmdiYyk7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9v Zl9pcF9kZWxpdmVyeTsgKytpKQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxD T01FOworICAgIH0KKyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIGxlbmd0aCk7CisKKyAgICBy ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV9taF9laXRfdGFibGUoTU1UUENvbnRleHQg KmN0eCwgR2V0Qnl0ZUNvbnRleHQgKmdiYykKK3sKKyAgICB1aW50MTZfdCBzZWN0aW9uX2xlbmd0 aDsKKworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgKDggKyAxICsg MSArIDIgKyAxMikgLyA4KQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAg ICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYykgIT0gTUhfRUlUX1RBQkxFX0lEKQorICAg ICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICBzZWN0aW9uX2xlbmd0aCA9IGJ5 dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpICYgMGIwMDAwMTExMTExMTExMTExOworCisgICAgaWYg KGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCBzZWN0aW9uX2xlbmd0aCB8fCBzZWN0 aW9uX2xlbmd0aCA8IDQpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAg IHsKKyAgICAgICAgR2V0Qnl0ZUNvbnRleHQgbmdiYzsKKyAgICAgICAgYnl0ZXN0cmVhbTJfaW5p dCgmbmdiYywgZ2JjLT5idWZmZXIsIHNlY3Rpb25fbGVuZ3RoIC0gNCk7CisKKyAgICAgICAgYnl0 ZXN0cmVhbTJfc2tpcCgmbmdiYywgKDE2ICsgMiArIDUgKyAxICsgOCArIDggKyAxNiArIDE2ICsg OCArIDgpIC8gOCk7CisKKyAgICAgICAgd2hpbGUgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0 KCZuZ2JjKSA+IDApIHsKKyAgICAgICAgICAgIHVpbnQxNl90IGRlc2NyaXB0b3JzX2xvb3BfbGVu Z3RoOworCisgICAgICAgICAgICBieXRlc3RyZWFtMl9za2lwKCZuZ2JjLCAoMTYgKyA0MCArIDI0 KSAvIDgpOworICAgICAgICAgICAgZGVzY3JpcHRvcnNfbG9vcF9sZW5ndGggPQorICAgICAgICAg ICAgICAgIGJ5dGVzdHJlYW0yX2dldF9iZTE2dSgmbmdiYykgJiAwYjAwMDAxMTExMTExMTExMTE7 CisKKyAgICAgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPCBk ZXNjcmlwdG9yc19sb29wX2xlbmd0aCkKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9J TlZBTElEREFUQTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgICAgICAgICAg ICBlcnI7CisgICAgICAgICAgICAgICAgR2V0Qnl0ZUNvbnRleHQgbm5nYmM7CisgICAgICAgICAg ICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgmbm5nYmMsIG5nYmMuYnVmZmVyLCBkZXNjcmlwdG9yc19s b29wX2xlbmd0aCk7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoYnl0ZXN0cmVhbTJfZ2V0X2J5 dGVzX2xlZnQoJm5uZ2JjKSA+IDApCisgICAgICAgICAgICAgICAgICAgIGlmICgoZXJyID0gcGFy c2VfbWhfZWl0X2Rlc2NyaXB0b3IoY3R4LCAmbm5nYmMpKSA8IDApCisgICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnl0ZXN0cmVh bTJfc2tpcHUoJm5nYmMsIGRlc2NyaXB0b3JzX2xvb3BfbGVuZ3RoKTsKKyAgICAgICAgfQorICAg IH0KKyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIHNlY3Rpb25fbGVuZ3RoKTsKKworICAgIHJl dHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX3RhYmxlKE1NVFBDb250ZXh0ICpjdHgsIEdl dEJ5dGVDb250ZXh0ICpnYmMpCit7CisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0 KGdiYykgPCAyKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICBzd2l0 Y2ggKGJ5dGVzdHJlYW0yX3BlZWtfYnl0ZXUoZ2JjKSkgeworICAgIGNhc2UgTU1UX1BBQ0tBR0Vf VEFCTEVfSUQ6CisgICAgICAgIHJldHVybiBwYXJzZV9tbXRfcGFja2FnZV90YWJsZShjdHgsIGdi Yyk7CisgICAgY2FzZSBQQUNLQUdFX0xJU1RfVEFCTEVfSUQ6CisgICAgICAgIHJldHVybiBwYXJz ZV9wYWNrYWdlX2xpc3RfdGFibGUoY3R4LCBnYmMpOworICAgIGNhc2UgTUhfRUlUX1RBQkxFX0lE OgorICAgICAgICByZXR1cm4gcGFyc2VfbWhfZWl0X3RhYmxlKGN0eCwgZ2JjKTsKKyAgICB9Cisg ICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCBieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMp KTsgLy8gVE9ETworICAgIHJldHVybiAwOworfQorCitlbnVtIHsKKyAgICBQQV9NRVNTQUdFX0lE ICAgICAgPSAweDAwMDAsCisgICAgTTJfU0VDVElPTl9NRVNTQUdFID0gMHg4MDAwLAorfTsKKwor c3RhdGljIGludCBwYXJzZV9wYV9tZXNzYWdlKE1NVFBDb250ZXh0ICpjdHgsIEdldEJ5dGVDb250 ZXh0ICpnYmMpCit7CisgICAgdWludDMyX3QgbGVuZ3RoOworCisgICAgaWYgKGJ5dGVzdHJlYW0y X2dldF9ieXRlc19sZWZ0KGdiYykgPCAoMTYgKyA4ICsgMzIpIC8gOCkKKyAgICAgICAgcmV0dXJu IEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMp ICE9IFBBX01FU1NBR0VfSUQpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwor ICAgIC8vIHNraXA6IHZlcnNpb24KKyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIDEpOworICAg IGxlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9iZTMydShnYmMpOworCisgICAgaWYgKGJ5dGVzdHJl YW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCBsZW5ndGgpCisgICAgICAgIHJldHVybiBBVkVSUk9S X0lOVkFMSUREQVRBOworICAgIHsKKyAgICAgICAgc2l6ZV90ICBpOworICAgICAgICB1aW50OF90 IG51bV9vZl90YWJsZXM7CisKKyAgICAgICAgR2V0Qnl0ZUNvbnRleHQgbmdiYzsKKyAgICAgICAg Ynl0ZXN0cmVhbTJfaW5pdCgmbmdiYywgZ2JjLT5idWZmZXIsIGxlbmd0aCk7CisKKyAgICAgICAg aWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCAxKQorICAgICAgICAgICAgcmV0 dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgIG51bV9vZl90YWJsZXMgPSBieXRlc3Ry ZWFtMl9nZXRfYnl0ZXUoJm5nYmMpOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fb2Zf dGFibGVzOyArK2kpIHsKKyAgICAgICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoJm5nYmMsICg4ICsg OCArIDE2KSAvIDgpOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKGJ5dGVzdHJlYW0yX2dl dF9ieXRlc19sZWZ0KCZuZ2JjKSA+IDApIHsKKyAgICAgICAgICAgIGludCBlcnIgPSBwYXJzZV90 YWJsZShjdHgsICZuZ2JjKTsKKyAgICAgICAgICAgIGlmIChlcnIgPCAwKSByZXR1cm4gZXJyOwor ICAgICAgICB9CisgICAgfQorICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgbGVuZ3RoKTsKKwor ICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX20yX3NlY3Rpb25fbWVzc2FnZShN TVRQQ29udGV4dCAqY3R4LCBHZXRCeXRlQ29udGV4dCAqZ2JjKQoreworICAgIGludCAgICAgIGVy cjsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVz X2xlZnQoZ2JjKSA8ICgxNiArIDggKyAxNikgLyA4KQorICAgICAgICByZXR1cm4gQVZFUlJPUl9J TlZBTElEREFUQTsKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYykgIT0gTTJfU0VD VElPTl9NRVNTQUdFKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAv LyBza2lwOiB2ZXJzaW9uCisgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCAxKTsKKyAgICBsZW5n dGggPSBieXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2JjKTsKKworICAgIGlmIChieXRlc3RyZWFtMl9n ZXRfYnl0ZXNfbGVmdChnYmMpIDwgbGVuZ3RoKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZB TElEREFUQTsKKyAgICB7CisgICAgICAgIEdldEJ5dGVDb250ZXh0IG5nYmM7CisgICAgICAgIGJ5 dGVzdHJlYW0yX2luaXQoJm5nYmMsIGdiYy0+YnVmZmVyLCBsZW5ndGgpOworICAgICAgICBlcnIg PSBwYXJzZV90YWJsZShjdHgsICZuZ2JjKTsKKyAgICB9CisgICAgYnl0ZXN0cmVhbTJfc2tpcHUo Z2JjLCBsZW5ndGgpOworCisgICAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwYXJzZV9z aWduYWxsaW5nX21lc3NhZ2UoTU1UUENvbnRleHQgKmN0eCwgR2V0Qnl0ZUNvbnRleHQgKmdiYykK K3sKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IDQpCisgICAgICAg IHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIHN3aXRjaCAoYnl0ZXN0cmVhbTJfcGVl a19iZTE2dShnYmMpKSB7CisgICAgY2FzZSBQQV9NRVNTQUdFX0lEOgorICAgICAgICByZXR1cm4g cGFyc2VfcGFfbWVzc2FnZShjdHgsIGdiYyk7CisgICAgY2FzZSBNMl9TRUNUSU9OX01FU1NBR0U6 CisgICAgICAgIHJldHVybiBwYXJzZV9tMl9zZWN0aW9uX21lc3NhZ2UoY3R4LCBnYmMpOworICAg IH0KKyAgICByZXR1cm4gMDsKK30KKworZW51bSBGcmFnbWVudGF0aW9uSW5kaWNhdG9yIHsKKyAg ICBOT1RfRlJBR01FTlRFRCAgPSAwYjAwLAorICAgIEZJUlNUX0ZSQUdNRU5UICA9IDBiMDEsCisg ICAgTUlERExFX0ZSQUdNRU5UID0gMGIxMCwKKyAgICBMQVNUX0ZSQUdNRU5UICAgPSAwYjExLAor fTsKKworc3RydWN0IEZyYWdtZW50QXNzZW1ibGVyIHsKKyAgICB1aW50MTZfdCAgICAgICAgICAg ICAgICAgcGlkOworICAgIHN0cnVjdCBGcmFnbWVudEFzc2VtYmxlciAqbmV4dDsKKworICAgIHVp bnQ4X3QgKmRhdGE7CisgICAgc2l6ZV90ICBzaXplLCBjYXA7CisKKyAgICB1aW50MzJfdCBsYXN0 X3NlcTsKKworICAgIGVudW0geworICAgICAgICBJTklUID0gMCwKKyAgICAgICAgTk9UX1NUQVJU RUQsCisgICAgICAgIElOX0ZSQUdNRU5ULAorICAgICAgICBTS0lQLAorICAgIH0gICAgICAgIHN0 YXRlOworfTsKKworc3RhdGljIGludAorYXBwZW5kX2RhdGEoc3RydWN0IEZyYWdtZW50QXNzZW1i bGVyICpjdHgsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IHNpemUpCit7CisgICAgaWYg KGN0eC0+c2l6ZSArIHNpemUgPiBVSU5UMzJfTUFYKSByZXR1cm4gQVZFUlJPUihFT1ZFUkZMT1cp OworICAgIGlmIChjdHgtPmNhcCA8IGN0eC0+c2l6ZSArIHNpemUpIHsKKyAgICAgICAgdm9pZCAg ICpuZXdfZGF0YTsKKyAgICAgICAgc2l6ZV90IG5ld19jYXAgPSBjdHgtPmNhcCA9PSAwID8gMTAy NCA6IGN0eC0+Y2FwICogMjsKKyAgICAgICAgd2hpbGUgKG5ld19jYXAgPCBjdHgtPnNpemUgKyBz aXplKSBuZXdfY2FwICo9IDI7CisKKyAgICAgICAgbmV3X2RhdGEgPSBhdl9yZWFsbG9jKGN0eC0+ ZGF0YSwgbmV3X2NhcCk7CisgICAgICAgIGlmIChuZXdfZGF0YSA9PSBOVUxMKSByZXR1cm4gQVZF UlJPUihlcnJubyk7CisgICAgICAgIGN0eC0+ZGF0YSA9IG5ld19kYXRhOworICAgICAgICBjdHgt PmNhcCAgPSBuZXdfY2FwOworICAgIH0KKyAgICBtZW1jcHkoY3R4LT5kYXRhICsgY3R4LT5zaXpl LCBkYXRhLCBzaXplKTsKKyAgICBjdHgtPnNpemUgKz0gc2l6ZTsKKyAgICByZXR1cm4gMDsKK30K Kworc3RhdGljIHZvaWQKK2NoZWNrX3N0YXRlKE1NVFBDb250ZXh0ICpjdHgsIHN0cnVjdCBGcmFn bWVudEFzc2VtYmxlciAqYXNzLCB1aW50MzJfdCBzZXFfbnVtKQoreworICAgIGlmIChhc3MtPnN0 YXRlID09IElOSVQpIHsKKyAgICAgICAgYXNzLT5zdGF0ZSA9IFNLSVA7CisgICAgfSBlbHNlIGlm IChzZXFfbnVtICE9IGFzcy0+bGFzdF9zZXEgKyAxKSB7CisgICAgICAgIGlmIChhc3MtPnNpemUg IT0gMCkgeworICAgICAgICAgICAgYXZfbG9nKGN0eC0+cywgQVZfTE9HX1dBUk5JTkcsCisgICAg ICAgICAgICAgICAgICAgIlBhY2tldCBzZXF1ZW5jZSBudW1iZXIganVtcDogJXUgKyAxICE9ICV1 LCBkcm9wICV6dSBieXRlc1xuIiwKKyAgICAgICAgICAgICAgICAgICBhc3MtPmxhc3Rfc2VxLCBz ZXFfbnVtLCBhc3MtPnNpemUpOworICAgICAgICAgICAgYXNzLT5zaXplID0gMDsKKyAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgIGF2X2xvZyhjdHgtPnMsIEFWX0xPR19XQVJOSU5HLAorICAg ICAgICAgICAgICAgICAgICJQYWNrZXQgc2VxdWVuY2UgbnVtYmVyIGp1bXA6ICV1ICsgMSAhPSAl dVxuIiwKKyAgICAgICAgICAgICAgICAgICBhc3MtPmxhc3Rfc2VxLCBzZXFfbnVtKTsKKyAgICAg ICAgfQorICAgICAgICBhc3MtPnN0YXRlID0gU0tJUDsKKyAgICB9CisgICAgYXNzLT5sYXN0X3Nl cSA9IHNlcV9udW07Cit9CisKK3N0YXRpYyBpbnQgYXNzZW1ibGVfZnJhZ21lbnQoCisgICAgc3Ry dWN0IEZyYWdtZW50QXNzZW1ibGVyICpjdHgsIHVpbnQzMl90IHNlcV9udW0sCisgICAgZW51bSBG cmFnbWVudGF0aW9uSW5kaWNhdG9yIGluZGljYXRvciwKKyAgICBjb25zdCB1aW50OF90ICpkYXRh LCB1aW50MzJfdCBzaXplLAorICAgIGludCAoKnBhcnNlcikoTU1UUENvbnRleHQgKiwgR2V0Qnl0 ZUNvbnRleHQgKiksCisgICAgTU1UUENvbnRleHQgKm9wYXF1ZSkKK3sKKyAgICBHZXRCeXRlQ29u dGV4dCBnYmM7CisgICAgaW50ICAgICAgICAgICAgZXJyOworCisgICAgc3dpdGNoIChpbmRpY2F0 b3IpIHsKKyAgICBjYXNlIE5PVF9GUkFHTUVOVEVEOgorICAgICAgICBpZiAoY3R4LT5zdGF0ZSA9 PSBJTl9GUkFHTUVOVCkgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgIGN0eC0+ c3RhdGUgPSBOT1RfU1RBUlRFRDsKKyAgICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgmZ2JjLCBkYXRh LCBzaXplKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlcihvcGFxdWUsICZnYmMpOworICAgIGNhc2Ug RklSU1RfRlJBR01FTlQ6CisgICAgICAgIGlmIChjdHgtPnN0YXRlID09IElOX0ZSQUdNRU5UKSBy ZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgY3R4LT5zdGF0ZSA9IElOX0ZSQUdN RU5UOworICAgICAgICByZXR1cm4gYXBwZW5kX2RhdGEoY3R4LCBkYXRhLCBzaXplKTsKKyAgICBj YXNlIE1JRERMRV9GUkFHTUVOVDoKKyAgICAgICAgaWYgKGN0eC0+c3RhdGUgPT0gU0tJUCkgewor ICAgICAgICAgICAgYXZfbG9nKG9wYXF1ZS0+cywgQVZfTE9HX1ZFUkJPU0UsICJEcm9wIHBhY2tl dCAldVxuIiwgc2VxX251bSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAg ICAgICBpZiAoY3R4LT5zdGF0ZSAhPSBJTl9GUkFHTUVOVCkgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7CisgICAgICAgIHJldHVybiBhcHBlbmRfZGF0YShjdHgsIGRhdGEsIHNpemUpOworICAg IGNhc2UgTEFTVF9GUkFHTUVOVDoKKyAgICAgICAgaWYgKGN0eC0+c3RhdGUgPT0gU0tJUCkgewor ICAgICAgICAgICAgYXZfbG9nKG9wYXF1ZS0+cywgQVZfTE9HX1ZFUkJPU0UsICJEcm9wIHBhY2tl dCAldVxuIiwgc2VxX251bSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAg ICAgICBpZiAoY3R4LT5zdGF0ZSAhPSBJTl9GUkFHTUVOVCkgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7CisgICAgICAgIGlmICgoZXJyID0gYXBwZW5kX2RhdGEoY3R4LCBkYXRhLCBzaXplKSkg PCAwKSByZXR1cm4gZXJyOworCisgICAgICAgIGJ5dGVzdHJlYW0yX2luaXQoJmdiYywgY3R4LT5k YXRhLCBjdHgtPnNpemUpOworICAgICAgICBlcnIgPSBwYXJzZXIob3BhcXVlLCAmZ2JjKTsKKwor ICAgICAgICBjdHgtPnNpemUgID0gMDsKKyAgICAgICAgY3R4LT5zdGF0ZSA9IE5PVF9TVEFSVEVE OworICAgICAgICByZXR1cm4gZXJyOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBBVkVS Uk9SX0lOVkFMSUREQVRBOworICAgIH0KK30KKworc3RhdGljIHN0cnVjdCBGcmFnbWVudEFzc2Vt YmxlciAqCitmaW5kX29yX2FsbG9jYXRlX2Fzc2VtYmxlcihNTVRQQ29udGV4dCAqY3R4LCB1aW50 MTZfdCBwaWQpCit7CisgICAgc3RydWN0IEZyYWdtZW50QXNzZW1ibGVyICphc3M7CisgICAgZm9y IChhc3MgPSBjdHgtPmFzc2VtYmxlcjsgYXNzICE9IE5VTEw7IGFzcyA9IGFzcy0+bmV4dCkKKyAg ICAgICAgaWYgKGFzcy0+cGlkID09IHBpZCkKKyAgICAgICAgICAgIHJldHVybiBhc3M7CisKKyAg ICBhc3MgPSBhdl9tYWxsb2N6KHNpemVvZihzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJsZXIpKTsKKyAg ICBpZiAoYXNzID09IE5VTEwpIHJldHVybiBOVUxMOworICAgIGFzcy0+cGlkICAgICAgICAgICAg ICA9IHBpZDsKKyAgICBhc3MtPm5leHQgICAgICAgICAgICAgPSBjdHgtPmFzc2VtYmxlcjsKKyAg ICByZXR1cm4gY3R4LT5hc3NlbWJsZXIgPSBhc3M7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2Vfc2ln bmFsbGluZ19tZXNzYWdlcygKKyAgICBNTVRQQ29udGV4dCAqY3R4LCB1aW50MzJfdCBzZXFfbnVt LCBHZXRCeXRlQ29udGV4dCAqZ2JjKQoreworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAg ICBlcnI7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgIGJ5dGU7CisgICAgZW51bSBG cmFnbWVudGF0aW9uSW5kaWNhdG9yIGZyYWdtZW50YXRpb25faW5kaWNhdG9yOworICAgIGJvb2wg ICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGhfZXh0ZW5zaW9uX2ZsYWc7CisgICAgYm9vbCAg ICAgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uX2ZsYWc7CisKKyAgICBzdHJ1Y3QgRnJh Z21lbnRBc3NlbWJsZXIgKmFzc2VtYmxlciA9IGZpbmRfb3JfYWxsb2NhdGVfYXNzZW1ibGVyKAor ICAgICAgICBjdHgsIGN0eC0+Y3VycmVudF9waWQpOworICAgIGlmIChhc3NlbWJsZXIgPT0gTlVM TCkgcmV0dXJuIEFWRVJST1IoZXJybm8pOworCisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRl c19sZWZ0KGdiYykgPCAoMiArIDQgKyAxICsgMSArIDgpIC8gOCkKKyAgICAgICAgcmV0dXJuIEFW RVJST1JfSU5WQUxJRERBVEE7CisgICAgYnl0ZSAgICAgICAgICAgICAgICAgICAgPSBieXRlc3Ry ZWFtMl9nZXRfYnl0ZXUoZ2JjKTsKKyAgICBmcmFnbWVudGF0aW9uX2luZGljYXRvciA9IGJ5dGUg Pj4gNjsKKyAgICBsZW5ndGhfZXh0ZW5zaW9uX2ZsYWcgICA9IChieXRlID4+IDEpICYgMTsKKyAg ICBhZ2dyZWdhdGlvbl9mbGFnICAgICAgICA9IGJ5dGUgJiAxOworCisgICAgYnl0ZXN0cmVhbTJf c2tpcHUoZ2JjLCAxKTsKKworICAgIGNoZWNrX3N0YXRlKGN0eCwgYXNzZW1ibGVyLCBzZXFfbnVt KTsKKworICAgIGlmICghYWdncmVnYXRpb25fZmxhZykKKyAgICAgICAgcmV0dXJuIGFzc2VtYmxl X2ZyYWdtZW50KAorICAgICAgICAgICAgYXNzZW1ibGVyLCBzZXFfbnVtLCBmcmFnbWVudGF0aW9u X2luZGljYXRvciwKKyAgICAgICAgICAgIGdiYy0+YnVmZmVyLCBieXRlc3RyZWFtMl9nZXRfYnl0 ZXNfbGVmdChnYmMpLAorICAgICAgICAgICAgcGFyc2Vfc2lnbmFsbGluZ19tZXNzYWdlLCBjdHgp OworCisgICAgaWYgKGZyYWdtZW50YXRpb25faW5kaWNhdG9yICE9IE5PVF9GUkFHTUVOVEVEKQor ICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsgLy8gY2Fubm90IGJlIGJvdGggZnJh Z21lbnRlZCBhbmQgYWdncmVnYXRlZAorCisgICAgd2hpbGUgKGJ5dGVzdHJlYW0yX2dldF9ieXRl c19sZWZ0KGdiYykgPiAwKSB7CisgICAgICAgIHVpbnQzMl90IGxlbmd0aDsKKworICAgICAgICBp ZiAobGVuZ3RoX2V4dGVuc2lvbl9mbGFnKQorICAgICAgICAgICAgbGVuZ3RoID0gYnl0ZXN0cmVh bTJfZ2V0X2JlMzIoZ2JjKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbGVuZ3RoID0gYnl0 ZXN0cmVhbTJfZ2V0X2JlMTYoZ2JjKTsKKworICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5 dGVzX2xlZnQoZ2JjKSA8IGxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFM SUREQVRBOworICAgICAgICBpZiAoKGVyciA9IGFzc2VtYmxlX2ZyYWdtZW50KAorICAgICAgICAg ICAgYXNzZW1ibGVyLCBzZXFfbnVtLCBOT1RfRlJBR01FTlRFRCwKKyAgICAgICAgICAgIGdiYy0+ YnVmZmVyLCBsZW5ndGgsIHBhcnNlX3NpZ25hbGxpbmdfbWVzc2FnZSwgY3R4KSkgPCAwKQorICAg ICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCBsZW5n dGgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZpbGxfcHRzX2R0 cyhzdHJ1Y3QgU3RyZWFtcyAqcykKK3sKKyAgICBzdHJ1Y3QgTVBVVGltZXN0YW1wRGVzY3JpcHRv ciAgICAgICAgICpkZXNjICAgICA9IE5VTEw7CisgICAgc3RydWN0IE1QVUV4dGVuZGVkVGltZXN0 YW1wRGVzY3JpcHRvciAqZXh0X2Rlc2MgPSBOVUxMOworCisgICAgaW50NjRfdCBwdGltZTsKKyAg ICBzaXplX3QgIGksIGo7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgcy0+bnVtX3RpbWVzdGFtcF9k ZXNjcmlwdG9yczsgKytpKSB7CisgICAgICAgIGlmIChzLT50aW1lc3RhbXBfZGVzY3JpcHRvcltp XS5zZXFfbnVtID09CisgICAgICAgICAgICBzLT5sYXN0X3NlcXVlbmNlX251bWJlcikgeworICAg ICAgICAgICAgZGVzYyA9IHMtPnRpbWVzdGFtcF9kZXNjcmlwdG9yICsgaTsKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IHMtPm51bV9l eHRfdGltZXN0YW1wX2Rlc2NyaXB0b3JzOyArK2kpIHsKKyAgICAgICAgaWYgKHMtPmV4dF90aW1l c3RhbXBfZGVzY3JpcHRvcltpXS5zZXFfbnVtID09CisgICAgICAgICAgICBzLT5sYXN0X3NlcXVl bmNlX251bWJlcikgeworICAgICAgICAgICAgZXh0X2Rlc2MgPSBzLT5leHRfdGltZXN0YW1wX2Rl c2NyaXB0b3IgKyBpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAg ICBpZiAoZGVzYyA9PSBOVUxMIHx8IGV4dF9kZXNjID09IE5VTEwpIHJldHVybiBGRkVSUk9SX1JF RE87CisgICAgcHRpbWUgPSBhdl9yZXNjYWxlKGRlc2MtPnByZXNlbnRhdGlvbl90aW1lLCBzLT5z dHJlYW0tPnRpbWVfYmFzZS5kZW4sCisgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDBsbCAq IHMtPnN0cmVhbS0+dGltZV9iYXNlLm51bSk7CisKKyAgICBpZiAocy0+YXVfY291bnQgPj0gZXh0 X2Rlc2MtPm51bV9vZl9hdSkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisK KyAgICBzLT5wYXJzZXItPmR0cyA9IHB0aW1lIC0gZXh0X2Rlc2MtPmRlY29kaW5nX3RpbWVfb2Zm c2V0OworCisgICAgZm9yIChqID0gMDsgaiA8IHMtPmF1X2NvdW50OyArK2opCisgICAgICAgIHMt PnBhcnNlci0+ZHRzICs9IGV4dF9kZXNjLT5hdVtqXS5wdHNfb2Zmc2V0OworCisgICAgcy0+cGFy c2VyLT5wdHMgPSBzLT5wYXJzZXItPmR0cyArIGV4dF9kZXNjLT5hdVtzLT5hdV9jb3VudF0uZHRz X3B0c19vZmZzZXQ7CisKKyAgICArK3MtPmF1X2NvdW50OworICAgIHJldHVybiAwOworfQorCitz dGF0aWMgaW50IGVtaXRfY2xvc2VkX2NhcHRpb25fbWZ1KE1NVFBDb250ZXh0ICpjdHgsIHN0cnVj dCBTdHJlYW1zICpzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0Qnl0 ZUNvbnRleHQgKmdiYykKK3sKKyAgICB1aW50OF90ICBkYXRhX3R5cGUsIHN1YnNhbXBsZV9udW1i ZXIsIGxhc3Rfc3Vic2FtcGxlX251bWJlciwgYnl0ZTsKKyAgICB1aW50MzJfdCBkYXRhX3NpemU7 CisgICAgc2l6ZV90ICAgaTsKKyAgICBpbnQgICAgICBlcnI7CisgICAgYm9vbCAgICAgbGVuZ3Ro X2V4dF9mbGFnLCBzdWJzYW1wbGVfaW5mb19saXN0X2ZsYWc7CisKKyAgICBhdl9hc3NlcnQwKGN0 eC0+cGt0ICE9IE5VTEwpOworCisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdi YykgPCAoOCArIDggKyA4ICsgOCArIDQgKyAxICsgMSArIDIpIC8gOCkKKyAgICAgICAgcmV0dXJu IEFWRVJST1JfSU5WQUxJRERBVEE7CisKKyAgICAvKgorICAgICAqIHNraXA6CisgICAgICogLSBz dWJ0aXRsZV90YWcKKyAgICAgKiAtIHN1YnRpdGxlX3NlcXVlbmNlX251bWJlcgorICAgICAqLwor ICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgKDggKyA4KSAvIDgpOworCisgICAgc3Vic2FtcGxl X251bWJlciAgICAgID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYyk7CisgICAgbGFzdF9zdWJz YW1wbGVfbnVtYmVyID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYyk7CisKKyAgICBieXRlICAg ICAgICAgICAgICAgICAgICAgPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoZ2JjKTsKKyAgICBkYXRh X3R5cGUgICAgICAgICAgICAgICAgPSBieXRlID4+IDQ7CisgICAgbGVuZ3RoX2V4dF9mbGFnICAg ICAgICAgID0gKGJ5dGUgPj4gMykgJiAxOworICAgIHN1YnNhbXBsZV9pbmZvX2xpc3RfZmxhZyA9 IChieXRlID4+IDIpICYgMTsKKworICAgIGlmIChkYXRhX3R5cGUgIT0gMGIwMDAwKSByZXR1cm4g QVZFUlJPUl9QQVRDSFdFTENPTUU7CisKKyAgICBpZiAobGVuZ3RoX2V4dF9mbGFnKQorICAgICAg ICBkYXRhX3NpemUgPSBieXRlc3RyZWFtMl9nZXRfYmUzMihnYmMpOworICAgIGVsc2UKKyAgICAg ICAgZGF0YV9zaXplID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTYoZ2JjKTsKKworICAgIGlmIChzdWJz YW1wbGVfbnVtYmVyID09IDAgJiYgbGFzdF9zdWJzYW1wbGVfbnVtYmVyID4gMCAmJgorICAgICAg ICBzdWJzYW1wbGVfaW5mb19saXN0X2ZsYWcpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGxh c3Rfc3Vic2FtcGxlX251bWJlcjsgKytpKSB7CisgICAgICAgICAgICAvLyBza2lwOiBzdWJzYW1w bGVfaV9kYXRhX3R5cGUKKyAgICAgICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoZ2JjLCAoNCArIDQp IC8gOCk7CisgICAgICAgICAgICAvLyBza2lwOiBzdWJzYW1wbGVfaV9kYXRhX3NpemUKKyAgICAg ICAgICAgIGlmIChsZW5ndGhfZXh0X2ZsYWcpIHsKKyAgICAgICAgICAgICAgICBieXRlc3RyZWFt Ml9za2lwKGdiYywgMzIgLyA4KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgYnl0ZXN0cmVhbTJfc2tpcChnYmMsIDE2IC8gOCk7CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICB9CisKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IGRh dGFfc2l6ZSkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgaWYgKChl cnIgPSBhdl9uZXdfcGFja2V0KGN0eC0+cGt0LCBkYXRhX3NpemUpKSA8IDApIHJldHVybiBlcnI7 CisgICAgYnl0ZXN0cmVhbTJfZ2V0X2J1ZmZlcnUoZ2JjLCBjdHgtPnBrdC0+ZGF0YSwgZGF0YV9z aXplKTsKKworICAgIGN0eC0+cGt0LT5zdHJlYW1faW5kZXggPSBzdC0+c3RyZWFtLT5pbmRleDsK KyAgICBjdHgtPnBrdC0+ZmxhZ3MgICAgICAgID0gc3QtPmZsYWdzOworICAgIGN0eC0+cGt0LT5w b3MgICAgICAgICAgPSBzdC0+b2Zmc2V0OworICAgIGN0eC0+cGt0ICAgICAgICAgICAgICAgPSBO VUxMOworCisgICAgc3QtPmZsYWdzICA9IDA7CisgICAgc3QtPm9mZnNldCA9IC0xOworICAgIHJl dHVybiAwOworfQorCitzdGF0aWMgaW50CitlbWl0X3BhY2tldChNTVRQQ29udGV4dCAqY3R4LCBz dHJ1Y3QgU3RyZWFtcyAqc3QsIHVpbnQ4X3QgKmRhdGEsIGludCBzaXplKQoreworICAgIGludCAg ICAgICAgICAgZXJyOworICAgIGludCAgICAgICAgICAgY29uc3VtZWQ7CisgICAgY29uc3QgdWlu dDhfdCAqb3V0X2RhdGEgPSBOVUxMOworICAgIGludCAgICAgICAgICAgb3V0X3NpemUgID0gMDsK KworICAgIGlmIChzdC0+cGFyc2VyID09IE5VTEwpIHsKKyAgICAgICAgc3QtPnBhcnNlciA9IGF2 X3BhcnNlcl9pbml0KHN0LT5zdHJlYW0tPmNvZGVjcGFyLT5jb2RlY19pZCk7CisgICAgICAgIGlm IChzdC0+cGFyc2VyID09IE5VTEwpIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgIHN0 LT5wYXJzZXItPmxhc3RfcG9zID0gMDsKKyAgICB9CisKKyAgICB3aGlsZSAoc2l6ZSA+IDApIHsK KyAgICAgICAgaWYgKHN0LT5wYXJzZXItPmZldGNoX3RpbWVzdGFtcCkgeworICAgICAgICAgICAg aWYgKChlcnIgPSBmaWxsX3B0c19kdHMoc3QpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJu IGVycjsKKyAgICAgICAgICAgIHN0LT5wYXJzZXItPmZldGNoX3RpbWVzdGFtcCA9IGZhbHNlOwor ICAgICAgICAgICAgc3QtPnBhcnNlci0+cG9zICAgICAgICAgICAgID0gc3QtPm9mZnNldDsKKyAg ICAgICAgICAgIC8vIHVzZSBsYXN0X3BvcyB0byBzdG9yZSBmbGFncworICAgICAgICAgICAgc3Qt PnBhcnNlci0+bGFzdF9wb3MgICAgICAgID0gc3QtPmZsYWdzOworICAgICAgICB9CisgICAgICAg IHN0LT5vZmZzZXQgPSAtMTsKKyAgICAgICAgc3QtPmZsYWdzICA9IDA7CisKKyAgICAgICAgY29u c3VtZWQgPSBzdC0+cGFyc2VyLT5wYXJzZXItPnBhcnNlcl9wYXJzZSgKKyAgICAgICAgICAgIHN0 LT5wYXJzZXIsIGZmc3RyZWFtKHN0LT5zdHJlYW0pLT5hdmN0eCwKKyAgICAgICAgICAgICZvdXRf ZGF0YSwgJm91dF9zaXplLAorICAgICAgICAgICAgZGF0YSwgc2l6ZQorICAgICAgICApOworICAg ICAgICBzaXplIC09IGNvbnN1bWVkOworCisgICAgICAgIGlmIChvdXRfZGF0YSA9PSBOVUxMKSB7 CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBzdC0+cGFyc2VyLT5m ZXRjaF90aW1lc3RhbXAgPSB0cnVlOworCisgICAgICAgIGF2X2Fzc2VydDAoY3R4LT5wa3QtPmRh dGEgPT0gTlVMTCk7CisgICAgICAgIGN0eC0+cGt0LT5kYXRhID0gKHVpbnQ4X3QgKikgb3V0X2Rh dGE7CisgICAgICAgIGN0eC0+cGt0LT5zaXplID0gb3V0X3NpemU7CisKKyAgICAgICAgaWYgKChl cnIgPSBhdl9wYWNrZXRfbWFrZV9yZWZjb3VudGVkKGN0eC0+cGt0KSkgPCAwKQorICAgICAgICAg ICAgcmV0dXJuIGVycjsKKworICAgICAgICBjdHgtPnBrdC0+cG9zICAgICAgICAgID0gc3QtPnBh cnNlci0+cG9zOworICAgICAgICBjdHgtPnBrdC0+cHRzICAgICAgICAgID0gc3QtPnBhcnNlci0+ cHRzOworICAgICAgICBjdHgtPnBrdC0+ZHRzICAgICAgICAgID0gc3QtPnBhcnNlci0+ZHRzOwor ICAgICAgICBjdHgtPnBrdC0+c3RyZWFtX2luZGV4ID0gc3QtPnN0cmVhbS0+aW5kZXg7CisgICAg ICAgIGN0eC0+cGt0LT5mbGFncyAgICAgICAgPSBzdC0+cGFyc2VyLT5sYXN0X3BvczsKKyAgICAg ICAgaWYgKHN0LT5wYXJzZXItPmtleV9mcmFtZSA9PSAxKQorICAgICAgICAgICAgY3R4LT5wa3Qt PmZsYWdzIHw9IEFWX1BLVF9GTEFHX0tFWTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgY29uc3VtZV9tZnUoTU1UUENvbnRleHQgKmN0eCwgR2V0Qnl0ZUNvbnRleHQgKmdi YykKK3sKKyAgICBpbnQgICAgICAgICAgICBlcnI7CisgICAgdWludDhfdCAgICAgICAgKmJ1ZjsK KyAgICB1bnNpZ25lZCBpbnQgICBzaXplOworICAgIHN0cnVjdCBTdHJlYW1zICpzdCA9IGZpbmRf Y3VycmVudF9zdHJlYW0oY3R4KTsKKyAgICBhdl9hc3NlcnQwKHN0ICE9IE5VTEwpOworCisgICAg c3dpdGNoIChzdC0+c3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfaWQpIHsKKyAgICBjYXNlIEFWX0NP REVDX0lEX0hFVkM6CisgICAgICAgIHNpemUgPSBieXRlc3RyZWFtMl9nZXRfYmUzMihnYmMpOwor ICAgICAgICBpZiAoc2l6ZSAhPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpKSByZXR1 cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgaWYgKChidWYgPSBhdl9tYWxsb2Moc2l6 ZSArIDMpKSA9PSBOVUxMKSByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgICAgICBidWZbMF0g PSAweDAwOworICAgICAgICBidWZbMV0gPSAweDAwOworICAgICAgICBidWZbMl0gPSAweDAxOwor ICAgICAgICBieXRlc3RyZWFtMl9nZXRfYnVmZmVydShnYmMsIGJ1ZiArIDMsIHNpemUpOworICAg ICAgICBlcnIgPSBlbWl0X3BhY2tldChjdHgsIHN0LCBidWYsIHNpemUgKyAzKTsKKyAgICAgICAg YXZfZnJlZShidWYpOworICAgICAgICByZXR1cm4gZXJyOworICAgIGNhc2UgQVZfQ09ERUNfSURf QUFDX0xBVE06CisgICAgICAgIHNpemUgPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMp OworICAgICAgICBpZiAoc2l6ZSA+PiAxMykgcmV0dXJuIEFWRVJST1IoRU9WRVJGTE9XKTsKKyAg ICAgICAgaWYgKChidWYgPSBhdl9tYWxsb2Moc2l6ZSArIDMpKSA9PSBOVUxMKSByZXR1cm4gQVZF UlJPUihFTk9NRU0pOworICAgICAgICBidWZbMF0gPSAweDU2OworICAgICAgICBidWZbMV0gPSAw eGUwIHwgKHNpemUgPj4gOCk7CisgICAgICAgIGJ1ZlsyXSA9IHNpemUgJiAweGZmOworICAgICAg ICBieXRlc3RyZWFtMl9nZXRfYnVmZmVydShnYmMsIGJ1ZiArIDMsIHNpemUpOworICAgICAgICBl cnIgPSBlbWl0X3BhY2tldChjdHgsIHN0LCBidWYsIHNpemUgKyAzKTsKKyAgICAgICAgYXZfZnJl ZShidWYpOworICAgICAgICByZXR1cm4gZXJyOworICAgIGNhc2UgQVZfQ09ERUNfSURfVFRNTDoK KyAgICAgICAgcmV0dXJuIGVtaXRfY2xvc2VkX2NhcHRpb25fbWZ1KGN0eCwgc3QsIGdiYyk7Cisg ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOworICAgIH0K K30KKworc3RhdGljIGludCBwYXJzZV9tZnVfdGltZWRfZGF0YSgKKyAgICBNTVRQQ29udGV4dCAq Y3R4LCBzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJsZXIgKmFzc2VtYmxlciwKKyAgICB1aW50MzJfdCBz ZXFfbnVtLCBlbnVtIEZyYWdtZW50YXRpb25JbmRpY2F0b3IgaW5kaWNhdG9yLAorICAgIEdldEJ5 dGVDb250ZXh0ICpnYmMpCit7CisgICAgYnl0ZXN0cmVhbTJfc2tpcChnYmMsICgzMiArIDMyICsg MzIgKyA4ICsgOCkgLyA4KTsKKyAgICByZXR1cm4gYXNzZW1ibGVfZnJhZ21lbnQoCisgICAgICAg IGFzc2VtYmxlciwgc2VxX251bSwgaW5kaWNhdG9yLAorICAgICAgICBnYmMtPmJ1ZmZlciwgYnl0 ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSwKKyAgICAgICAgY29uc3VtZV9tZnUsIGN0eCk7 Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfbWZ1X25vbl90aW1lZF9kYXRhKAorICAgIE1NVFBDb250 ZXh0ICpjdHgsIHN0cnVjdCBGcmFnbWVudEFzc2VtYmxlciAqYXNzZW1ibGVyLAorICAgIHVpbnQz Ml90IHNlcV9udW0sIGVudW0gRnJhZ21lbnRhdGlvbkluZGljYXRvciBpbmRpY2F0b3IsCisgICAg R2V0Qnl0ZUNvbnRleHQgKmdiYykKK3sKKyAgICBieXRlc3RyZWFtMl9za2lwKGdiYywgMzIgLyA4 KTsKKyAgICByZXR1cm4gYXNzZW1ibGVfZnJhZ21lbnQoCisgICAgICAgIGFzc2VtYmxlciwgc2Vx X251bSwgaW5kaWNhdG9yLAorICAgICAgICBnYmMtPmJ1ZmZlciwgYnl0ZXN0cmVhbTJfZ2V0X2J5 dGVzX2xlZnQoZ2JjKSwKKyAgICAgICAgY29uc3VtZV9tZnUsIGN0eCk7Cit9CisKK3N0YXRpYyBp bnQgcGFyc2VfbXB1KE1NVFBDb250ZXh0ICpjdHgsIHVpbnQzMl90IHNlcV9udW0sIEdldEJ5dGVD b250ZXh0ICpnYmMpCit7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGVycjsKKyAg ICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgYnl0ZSwgZnJhZ21lbnRfdHlwZTsKKyAgICBi b29sICAgICAgICAgICAgICAgICAgICAgICAgdGltZWRfZmxhZzsKKyAgICBlbnVtIEZyYWdtZW50 YXRpb25JbmRpY2F0b3IgZnJhZ21lbnRhdGlvbl9pbmRpY2F0b3I7CisgICAgYm9vbCAgICAgICAg ICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uX2ZsYWc7CisgICAgdWludDE2X3QgICAgICAgICAg ICAgICAgICAgIGxlbmd0aDsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgbXB1X3Nl cXVlbmNlX251bWJlcjsKKyAgICBzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJsZXIgICAgKmFzc2VtYmxl cjsKKyAgICBzdHJ1Y3QgU3RyZWFtcyAgICAgICAgICAgICAgKnN0cmVhbXM7CisKKyAgICBzdHJl YW1zID0gZmluZF9jdXJyZW50X3N0cmVhbShjdHgpOworICAgIGlmIChzdHJlYW1zID09IE5VTEwg fHwgc3RyZWFtcy0+c3RyZWFtLT5kaXNjYXJkID49IEFWRElTQ0FSRF9BTEwpCisgICAgICAgIHJl dHVybiAwOworCisgICAgYXNzZW1ibGVyID0gZmluZF9vcl9hbGxvY2F0ZV9hc3NlbWJsZXIoY3R4 LCBjdHgtPmN1cnJlbnRfcGlkKTsKKyAgICBpZiAoYXNzZW1ibGVyID09IE5VTEwpIHJldHVybiBB VkVSUk9SKGVycm5vKTsKKworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMp IDwgKDE2ICsgNCArIDEgKyAyICsgMSArIDggKyAzMikgLyA4KQorICAgICAgICByZXR1cm4gQVZF UlJPUl9JTlZBTElEREFUQTsKKworICAgIGxlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dShn YmMpOworICAgIGlmIChsZW5ndGggIT0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSkK KyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisKKyAgICBieXRlICAgICAgICAg ICAgICAgICAgICA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpOworICAgIGZyYWdtZW50X3R5 cGUgICAgICAgICAgID0gYnl0ZSA+PiA0OworICAgIHRpbWVkX2ZsYWcgICAgICAgICAgICAgID0g KGJ5dGUgPj4gMykgJiAxOworICAgIGZyYWdtZW50YXRpb25faW5kaWNhdG9yID0gKGJ5dGUgPj4g MSkgJiAwYjExOworICAgIGFnZ3JlZ2F0aW9uX2ZsYWcgICAgICAgID0gYnl0ZSAmIDE7CisKKyAg ICAvLyBza2lwOiBmcmFnbWVudF9jb3VudGVyCisgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCAx KTsKKworICAgIG1wdV9zZXF1ZW5jZV9udW1iZXIgPSBieXRlc3RyZWFtMl9nZXRfYmUzMnUoZ2Jj KTsKKworICAgIGlmIChhZ2dyZWdhdGlvbl9mbGFnICYmIGZyYWdtZW50YXRpb25faW5kaWNhdG9y ICE9IE5PVF9GUkFHTUVOVEVEKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsg Ly8gY2Fubm90IGJlIGJvdGggZnJhZ21lbnRlZCBhbmQgYWdncmVnYXRlZAorCisgICAgaWYgKGZy YWdtZW50X3R5cGUgIT0gMikKKyAgICAgICAgcmV0dXJuIDA7IC8vIG5vdCBNRlUKKworICAgIGlm IChhc3NlbWJsZXItPnN0YXRlID09IElOSVQgJiYgIWN0eC0+aXNfcmFwKQorICAgICAgICByZXR1 cm4gMDsgLy8gd2FpdCBmb3IgdGhlIGZpcnN0IFJBUAorCisgICAgaWYgKGFzc2VtYmxlci0+c3Rh dGUgPT0gSU5JVCkgeworICAgICAgICBzdHJlYW1zLT5sYXN0X3NlcXVlbmNlX251bWJlciA9IG1w dV9zZXF1ZW5jZV9udW1iZXI7CisgICAgfSBlbHNlIGlmIChtcHVfc2VxdWVuY2VfbnVtYmVyID09 IHN0cmVhbXMtPmxhc3Rfc2VxdWVuY2VfbnVtYmVyICsgMSkgeworICAgICAgICBzdHJlYW1zLT5s YXN0X3NlcXVlbmNlX251bWJlciA9IG1wdV9zZXF1ZW5jZV9udW1iZXI7CisgICAgICAgIHN0cmVh bXMtPmF1X2NvdW50ICAgICAgICAgICAgID0gMDsKKyAgICB9IGVsc2UgaWYgKG1wdV9zZXF1ZW5j ZV9udW1iZXIgIT0gc3RyZWFtcy0+bGFzdF9zZXF1ZW5jZV9udW1iZXIpIHsKKyAgICAgICAgYXZf bG9nKHN0cmVhbXMtPnN0cmVhbSwgQVZfTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAiTVBV IHNlcXVlbmNlIG51bWJlciBqdW1wOiAldSArIDEgIT0gJXVcbiIsCisgICAgICAgICAgICAgICBz dHJlYW1zLT5sYXN0X3NlcXVlbmNlX251bWJlciwgbXB1X3NlcXVlbmNlX251bWJlcik7CisgICAg ICAgIHN0cmVhbXMtPmxhc3Rfc2VxdWVuY2VfbnVtYmVyID0gbXB1X3NlcXVlbmNlX251bWJlcjsK KyAgICAgICAgc3RyZWFtcy0+YXVfY291bnQgICAgICAgICAgICAgPSAwOworICAgIH0KKworICAg IGNoZWNrX3N0YXRlKGN0eCwgYXNzZW1ibGVyLCBzZXFfbnVtKTsKKworICAgIGlmIChzdHJlYW1z LT5vZmZzZXQgPT0gLTEpCisgICAgICAgIHN0cmVhbXMtPm9mZnNldCA9IGN0eC0+cGt0LT5wb3M7 CisKKyAgICBpZiAoY3R4LT5pc19yYXApCisgICAgICAgIHN0cmVhbXMtPmZsYWdzIHw9IEFWX1BL VF9GTEFHX0tFWTsKKworICAgIGlmICh0aW1lZF9mbGFnKSB7CisgICAgICAgIGlmIChhZ2dyZWdh dGlvbl9mbGFnKSB7CisgICAgICAgICAgICB3aGlsZSAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xl ZnQoZ2JjKSA+IDApIHsKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBieXRlc3RyZWFtMl9nZXRf YmUxNihnYmMpOworICAgICAgICAgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVm dChnYmMpIDwgbGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZB TElEREFUQTsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdldEJ5dGVD b250ZXh0IG5nYmM7CisgICAgICAgICAgICAgICAgICAgIGJ5dGVzdHJlYW0yX2luaXQoJm5nYmMs IGdiYy0+YnVmZmVyLCBsZW5ndGgpOworCisgICAgICAgICAgICAgICAgICAgIGVyciA9IHBhcnNl X21mdV90aW1lZF9kYXRhKAorICAgICAgICAgICAgICAgICAgICAgICAgY3R4LCBhc3NlbWJsZXIs IHNlcV9udW0sIE5PVF9GUkFHTUVOVEVELCAmbmdiYyk7CisgICAgICAgICAgICAgICAgICAgIGlm IChlcnIgPCAwKSByZXR1cm4gZXJyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICBieXRlc3RyZWFtMl9za2lwdShnYmMsIGxlbmd0aCk7CisgICAgICAgICAgICB9CisgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gcGFyc2VfbWZ1X3RpbWVkX2RhdGEoCisgICAg ICAgICAgICAgICAgY3R4LCBhc3NlbWJsZXIsIHNlcV9udW0sIGZyYWdtZW50YXRpb25faW5kaWNh dG9yLCBnYmMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGFnZ3JlZ2F0 aW9uX2ZsYWcpIHsKKyAgICAgICAgICAgIHdoaWxlIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVm dChnYmMpID4gMCkgeworICAgICAgICAgICAgICAgIGxlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9i ZTE2KGdiYyk7CisgICAgICAgICAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0 KGdiYykgPCBsZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFM SUREQVRBOworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR2V0Qnl0ZUNv bnRleHQgbmdiYzsKKyAgICAgICAgICAgICAgICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgmbmdiYywg Z2JjLT5idWZmZXIsIGxlbmd0aCk7CisKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gcGFyc2Vf bWZ1X25vbl90aW1lZF9kYXRhKAorICAgICAgICAgICAgICAgICAgICAgICAgY3R4LCBhc3NlbWJs ZXIsIHNlcV9udW0sIE5PVF9GUkFHTUVOVEVELCAmbmdiYyk7CisgICAgICAgICAgICAgICAgICAg IGlmIChlcnIgPCAwKSByZXR1cm4gZXJyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIGxlbmd0aCk7CisgICAgICAgICAgICB9CisgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gcGFyc2VfbWZ1X25vbl90aW1lZF9kYXRh KAorICAgICAgICAgICAgICAgIGN0eCwgYXNzZW1ibGVyLCBzZXFfbnVtLCBmcmFnbWVudGF0aW9u X2luZGljYXRvciwgZ2JjKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQor CitNTVRQQ29udGV4dCAqZmZfbW10cF9wYXJzZV9vcGVuKEFWUHJvZ3JhbSAqcHJvZ3JhbSkKK3sK KyAgICBNTVRQQ29udGV4dCAqY3R4ID0gYXZfbWFsbG9jeihzaXplb2YoTU1UUENvbnRleHQpKTsK KyAgICBpZiAoY3R4ID09IE5VTEwpIHJldHVybiBOVUxMOworICAgIGN0eC0+cHJvZ3JhbSA9IHBy b2dyYW07CisgICAgcmV0dXJuIGN0eDsKK30KKworaW50IGZmX21tdHBfcGFyc2VfcGFja2V0KE1N VFBDb250ZXh0ICpjdHgsIEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpidWYsIHVpbnQxNl90IHNpemUpCit7 CisgICAgYm9vbCAgICAgcGFja2V0X2NvdW50ZXJfZmxhZzsKKyAgICBib29sICAgICBleHRlbnNp b25faGVhZGVyX2ZsYWc7CisgICAgdWludDhfdCAgcGF5bG9hZF90eXBlOworICAgIHVpbnQzMl90 IHBhY2tldF9zZXF1ZW5jZV9udW1iZXI7CisgICAgdWludDhfdCAgYnl0ZTsKKyAgICBpbnQgICAg ICBlcnIgPSAwOworCisgICAgR2V0Qnl0ZUNvbnRleHQgZ2JjOworCisgICAgY3R4LT5zICAgPSBz OworICAgIGN0eC0+cGt0ID0gcGt0OworCisgICAgYnl0ZXN0cmVhbTJfaW5pdCgmZ2JjLCBidWYs IHNpemUpOworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmZ2JjKSA8CisgICAg ICAgICgyICsgMSArIDIgKyAxICsgMSArIDEgKyAyICsgNiArIDE2ICsgMzIgKyAzMikgLyA4KQor ICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKworICAgIGJ5dGUgICAgICAgICAg ICAgICAgICA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldSgmZ2JjKTsKKyAgICBwYWNrZXRfY291bnRl cl9mbGFnICAgPSAoYnl0ZSA+PiA1KSAmIDE7CisgICAgZXh0ZW5zaW9uX2hlYWRlcl9mbGFnID0g KGJ5dGUgPj4gMSkgJiAxOworICAgIGN0eC0+aXNfcmFwID0gYnl0ZSAmIDE7CisKKyAgICBieXRl ICAgICAgICAgPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoJmdiYyk7CisgICAgcGF5bG9hZF90eXBl ID0gYnl0ZSAmIDBiMTExMTExOworCisgICAgY3R4LT5jdXJyZW50X3BpZCA9IGJ5dGVzdHJlYW0y X2dldF9iZTE2dSgmZ2JjKTsKKworICAgIC8vIHNraXA6IGRpc3RyaWJ1dGVfdGltZXN0YW1wCisg ICAgYnl0ZXN0cmVhbTJfc2tpcHUoJmdiYywgNCk7CisKKyAgICBwYWNrZXRfc2VxdWVuY2VfbnVt YmVyID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMzJ1KCZnYmMpOworCisgICAgaWYgKHBhY2tldF9jb3Vu dGVyX2ZsYWcpCisgICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoJmdiYywgNCk7CisKKyAgICBpZiAo ZXh0ZW5zaW9uX2hlYWRlcl9mbGFnKSB7CisgICAgICAgIHVpbnQxNl90IGV4dGVuc2lvbl9oZWFk ZXJfbGVuZ3RoOworICAgICAgICAvLyBza2lwOiBleHRlbnNpb25fdHlwZQorICAgICAgICBieXRl c3RyZWFtMl9za2lwKCZnYmMsIDIpOworICAgICAgICBleHRlbnNpb25faGVhZGVyX2xlbmd0aCA9 IGJ5dGVzdHJlYW0yX2dldF9iZTE2KCZnYmMpOworICAgICAgICBieXRlc3RyZWFtMl9za2lwKCZn YmMsIGV4dGVuc2lvbl9oZWFkZXJfbGVuZ3RoKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHBheWxv YWRfdHlwZSkgeworICAgIGNhc2UgMHgwMDogLy8gTVBVCisgICAgICAgIGlmIChwa3QgIT0gTlVM TCkKKyAgICAgICAgICAgIGVyciA9IHBhcnNlX21wdShjdHgsIHBhY2tldF9zZXF1ZW5jZV9udW1i ZXIsICZnYmMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDB4MDI6IC8vIHNpZ25hbGxpbmcg bWVzc2FnZXMKKyAgICAgICAgZXJyID0gcGFyc2Vfc2lnbmFsbGluZ19tZXNzYWdlcyhjdHgsIHBh Y2tldF9zZXF1ZW5jZV9udW1iZXIsICZnYmMpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg aWYgKGVyciA8IDApIHJldHVybiBlcnI7CisgICAgcmV0dXJuIChwa3QgPT0gTlVMTCB8fCBwa3Qt PmRhdGEgIT0gTlVMTCkgPyAwIDogRkZFUlJPUl9SRURPOworfQorCit2b2lkIGZmX21tdHBfcmVz ZXRfc3RhdGUoTU1UUENvbnRleHQgKmN0eCkKK3sKKyAgICBzdHJ1Y3QgU3RyZWFtcyAgICAgICAg ICAgKnN0cmVhbXM7CisgICAgc3RydWN0IEZyYWdtZW50QXNzZW1ibGVyICphc3NlbWJsZXI7CisK KyAgICBmb3IgKGFzc2VtYmxlciA9IGN0eC0+YXNzZW1ibGVyOworICAgICAgICAgYXNzZW1ibGVy ICE9IE5VTEw7IGFzc2VtYmxlciA9IGFzc2VtYmxlci0+bmV4dCkgeworICAgICAgICBhc3NlbWJs ZXItPnN0YXRlID0gSU5JVDsKKyAgICAgICAgYXNzZW1ibGVyLT5zaXplICA9IDA7CisgICAgfQor ICAgIGZvciAoc3RyZWFtcyA9IGN0eC0+c3RyZWFtczsgc3RyZWFtcyAhPSBOVUxMOyBzdHJlYW1z ID0gc3RyZWFtcy0+bmV4dCkgeworICAgICAgICBpZiAoc3RyZWFtcy0+cGFyc2VyICE9IE5VTEwp IHsKKyAgICAgICAgICAgIGF2X3BhcnNlcl9jbG9zZShzdHJlYW1zLT5wYXJzZXIpOworICAgICAg ICAgICAgc3RyZWFtcy0+cGFyc2VyID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBzdHJlYW1z LT5sYXN0X3NlcXVlbmNlX251bWJlciA9IDA7CisgICAgICAgIHN0cmVhbXMtPmF1X2NvdW50ICAg ICAgICAgICAgID0gMDsKKyAgICAgICAgc3RyZWFtcy0+ZmxhZ3MgICAgICAgICAgICAgICAgPSAw OworICAgICAgICBzdHJlYW1zLT5vZmZzZXQgICAgICAgICAgICAgICA9IC0xOworICAgIH0KK30K Kwordm9pZCBmZl9tbXRwX3BhcnNlX2Nsb3NlKE1NVFBDb250ZXh0ICpjdHgpCit7CisgICAgc3Ry dWN0IEZyYWdtZW50QXNzZW1ibGVyICphc3M7CisgICAgc3RydWN0IFN0cmVhbXMgICAgICAgICAg ICpzdHJlYW1zOworCisgICAgZm9yIChhc3MgPSBjdHgtPmFzc2VtYmxlcjsgYXNzICE9IE5VTEw7 KSB7CisgICAgICAgIHN0cnVjdCBGcmFnbWVudEFzc2VtYmxlciAqbmV4dCA9IGFzcy0+bmV4dDsK KyAgICAgICAgYXZfZnJlZShhc3MtPmRhdGEpOworICAgICAgICBhdl9mcmVlKGFzcyk7CisgICAg ICAgIGFzcyA9IG5leHQ7CisgICAgfQorCisgICAgZm9yIChzdHJlYW1zID0gY3R4LT5zdHJlYW1z OyBzdHJlYW1zICE9IE5VTEw7KSB7CisgICAgICAgIHN0cnVjdCBTdHJlYW1zICpuZXh0ID0gc3Ry ZWFtcy0+bmV4dDsKKyAgICAgICAgaWYgKHN0cmVhbXMtPnBhcnNlciAhPSBOVUxMKSBhdl9wYXJz ZXJfY2xvc2Uoc3RyZWFtcy0+cGFyc2VyKTsKKyAgICAgICAgYXZfZnJlZShzdHJlYW1zLT50aW1l c3RhbXBfZGVzY3JpcHRvcik7CisgICAgICAgIGF2X2ZyZWUoc3RyZWFtcy0+ZXh0X3RpbWVzdGFt cF9kZXNjcmlwdG9yKTsKKyAgICAgICAgYXZfZnJlZShzdHJlYW1zKTsKKyAgICAgICAgc3RyZWFt cyA9IG5leHQ7CisgICAgfQorCisgICAgYXZfZnJlZShjdHgpOworfQpkaWZmIC0tZ2l0IGEvbGli YXZmb3JtYXQvbW10cC5oIGIvbGliYXZmb3JtYXQvbW10cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLjMwMGE2YTFhZWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmZv cm1hdC9tbXRwLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIE1QRUcgTWVkaWEgVHJhbnNwb3J0 IFByb3RvY29sIChNTVRQKSBwYXJzZXIsIGFzIGRlZmluZWQgaW4gSVNPL0lFQyAyMzAwOC0xLgor ICogQ29weXJpZ2h0IChjKSAyMDIzIFN1cGVyRmFzaGkKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFy dCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUg TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBG Rm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGgg RkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9u LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEw LTEzMDEgVVNBCisgKi8KKyNpZm5kZWYgQVZGT1JNQVRfTU1UUF9ICisjZGVmaW5lIEFWRk9STUFU X01NVFBfSAorCisjaW5jbHVkZSAiYXZmb3JtYXQuaCIKKwordHlwZWRlZiBzdHJ1Y3QgTU1UUENv bnRleHQgTU1UUENvbnRleHQ7CisKKy8qKgorICogT3BlbiBhbiBNTVQgcHJvdG9jb2wgcGFyc2Vy IGNvbnRleHQuCisgKiBAcGFyYW0gcHJvZ3JhbSBUaGUgQVZQcm9ncmFtIHRoaXMgY29udGV4dCBp cyBhc3NvY2lhdGVkIHdpdGguCisgKiBAcmV0dXJuIEEgbmV3IE1NVFBDb250ZXh0LCBvciBOVUxM IG9uIGFsbG9jYXRpb24gZXJyb3IuCisgKi8KK01NVFBDb250ZXh0ICpmZl9tbXRwX3BhcnNlX29w ZW4oQVZQcm9ncmFtICpwcm9ncmFtKTsKKworLyoqCisgKiBQYXJzZSBhbiBNTVQgcHJvdG9jb2wg cGFja2V0LgorICoKKyAqIEBwYXJhbSBjdHggVGhlIE1NVCBwcm90b2NvbCBwYXJzZXIgY29udGV4 dC4KKyAqIEBwYXJhbSBzIFRoZSBBVkZvcm1hdENvbnRleHQuCisgKiBAcGFyYW0gcGt0IFRoZSBB VlBhY2tldCB0byBmaWxsLgorICogQHBhcmFtIGJ1ZiBUaGUgcGFja2V0IGRhdGEuCisgKiBAcGFy YW0gc2l6ZSBUaGUgc2l6ZSBvZiB0aGUgcGFja2V0IGRhdGEuCisgKiBAcmV0dXJuID49IDAgaWYg YSBuZXcgQVZQYWNrZXQgaXMgZW1pdHRlZCwKKyAqICAgICAgICAgRkZFUlJPUl9SRURPIGlmIHRo ZSBuZXh0IHBhY2tldCBpcyBuZWVkZWQsCisgKiAgICAgICAgIG9yIGFub3RoZXIgbmVnYXRpdmUg dmFsdWUgb24gZXJyb3IuCisgKi8KK2ludCBmZl9tbXRwX3BhcnNlX3BhY2tldChNTVRQQ29udGV4 dCAqY3R4LCBBVkZvcm1hdENvbnRleHQgKnMsIEFWUGFja2V0ICpwa3QsCisgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYnVmLCB1aW50MTZfdCBzaXplKTsKKworLyoqCisg KiBSZXNldCB0aGUgc3RhdGUgb2YgdGhlIE1NVFAgcGFyc2VyLiBVc2VmdWwgd2hlbiBzZWVraW5n LgorICoKKyAqIEBwYXJhbSBjdHggVGhlIE1NVCBwcm90b2NvbCBwYXJzZXIgY29udGV4dC4KKyAq Lwordm9pZCBmZl9tbXRwX3Jlc2V0X3N0YXRlKE1NVFBDb250ZXh0ICpjdHgpOworCisvKioKKyAq IENsb3NlIGFuIE1NVCBwcm90b2NvbCBwYXJzZXIgY29udGV4dCwgZnJlZXMgYWxsIGFzc29jaWF0 ZWQgcmVzb3VyY2VzLgorICoKKyAqIEBwYXJhbSBjdHggVGhlIE1NVCBwcm90b2NvbCBwYXJzZXIg Y29udGV4dC4KKyAqLwordm9pZCBmZl9tbXRwX3BhcnNlX2Nsb3NlKE1NVFBDb250ZXh0ICpjdHgp OworCisjZW5kaWYgLyogQVZGT1JNQVRfTU1UUF9IICovCmRpZmYgLS1naXQgYS9saWJhdmZvcm1h dC9tbXR0bHYuYyBiL2xpYmF2Zm9ybWF0L21tdHRsdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAuLmI1ODEzZTQ0NzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmZvcm1h dC9tbXR0bHYuYwpAQCAtMCwwICsxLDM4NCBAQAorLyoKKyAqIE1NVCBwcm90b2NvbCBvdmVyIFRM ViBwYWNrZXRzIChNTVQvVExWKSBkZW11eGVyLCBhcyBkZWZpbmVkIGluIEFSSUIgU1RELUIzMi4K KyAqIENvcHlyaWdodCAoYykgMjAyMyBTdXBlckZhc2hpCisgKgorICogVGhpcyBmaWxlIGlzIHBh cnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhl IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog RkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRo IEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlv biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjEx MC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWdfY29tcG9uZW50cy5oIgorCisjaW5j bHVkZSAibGliYXZ1dGlsL21lbS5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9pbnRyZWFkd3JpdGUu aCIKKyNpbmNsdWRlICJhdmZvcm1hdC5oIgorI2luY2x1ZGUgImF2aW9faW50ZXJuYWwuaCIKKyNp bmNsdWRlICJkZW11eC5oIgorI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAibW10cC5o IgorCisjZGVmaW5lIEhFQURFUl9CWVRFIDBiMDExMTExMTEKKworZW51bSB7CisgICAgVU5ERUZJ TkVEX1BBQ0tFVCAgICAgICAgICAgID0gMHgwMCwKKyAgICBJUFY0X1BBQ0tFVCAgICAgICAgICAg ICAgICAgPSAweDAxLAorICAgIElQVjZfUEFDS0VUICAgICAgICAgICAgICAgICA9IDB4MDIsCisg ICAgSEVBREVSX0NPTVBSRVNTRURfSVBfUEFDS0VUID0gMHgwMywKKyAgICBUUkFOU01JU1NJT05f Q09OVFJPTF9QQUNLRVQgPSAweEZFLAorICAgIE5VTExfUEFDS0VUICAgICAgICAgICAgICAgICA9 IDB4RkYsCit9OworCitlbnVtIHsKKyAgICBDT05URVhUX0lERU5USUZJQ0FUSU9OX1BBUlRJQUxf SVBWNF9BTkRfUEFSVElBTF9VRFBfSEVBREVSID0gMHgyMCwKKyAgICBDT05URVhUX0lERU5USUZJ Q0FUSU9OX0lQVjRfSEVBREVSICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyMSwKKyAgICBD T05URVhUX0lERU5USUZJQ0FUSU9OX1BBUlRJQUxfSVBWNl9BTkRfUEFSVElBTF9VRFBfSEVBREVS ID0gMHg2MCwKKyAgICBDT05URVhUX0lERU5USUZJQ0FUSU9OX05PX0NPTVBSRVNTRURfSEVBREVS ICAgICAgICAgICAgICAgID0gMHg2MSwKK307CisKK3N0YXRpYyBpbnQgbW10dGx2X3Byb2JlKGNv bnN0IEFWUHJvYmVEYXRhICpwKQoreworICAgIHNpemVfdCAgIGksIGo7CisgICAgdWludDhfdCAg cGFja2V0X3R5cGU7CisgICAgdWludDE2X3QgZGF0YV9sZW5ndGg7CisKKyAgICBpbnQgcHJvY2Vz c2VkICA9IDA7CisgICAgaW50IHJlY29nbml6ZWQgPSAwOworCisgICAgZm9yIChpID0gMDsgaSAr IDQgPCBwLT5idWZfc2l6ZSAmJiBwcm9jZXNzZWQgPCAxMDA7KSB7CisgICAgICAgIGlmIChwLT5i dWZbaV0gIT0gSEVBREVSX0JZVEUpIHsKKyAgICAgICAgICAgICsraTsKKyAgICAgICAgICAgIGNv bnRpbnVlOworICAgICAgICB9CisgICAgICAgICsrcHJvY2Vzc2VkOworCisgICAgICAgIHBhY2tl dF90eXBlID0gcC0+YnVmW2kgKyAxXTsKKyAgICAgICAgZGF0YV9sZW5ndGggPSBBVl9SQjE2KHAt PmJ1ZiArIGkgKyAyKTsKKyAgICAgICAgaSArPSA0OworCisgICAgICAgIGlmIChwYWNrZXRfdHlw ZSA9PSBIRUFERVJfQ09NUFJFU1NFRF9JUF9QQUNLRVQpIHsKKyAgICAgICAgICAgIGlmIChkYXRh X2xlbmd0aCA8IDMgfHwgaSArIDIgPj0gcC0+YnVmX3NpemUpIGdvdG8gc2tpcDsKKyAgICAgICAg ICAgIHN3aXRjaCAocC0+YnVmW2kgKyAyXSkgeworICAgICAgICAgICAgY2FzZSBDT05URVhUX0lE RU5USUZJQ0FUSU9OX1BBUlRJQUxfSVBWNF9BTkRfUEFSVElBTF9VRFBfSEVBREVSOgorICAgICAg ICAgICAgY2FzZSBDT05URVhUX0lERU5USUZJQ0FUSU9OX0lQVjRfSEVBREVSOgorICAgICAgICAg ICAgY2FzZSBDT05URVhUX0lERU5USUZJQ0FUSU9OX1BBUlRJQUxfSVBWNl9BTkRfUEFSVElBTF9V RFBfSEVBREVSOgorICAgICAgICAgICAgY2FzZSBDT05URVhUX0lERU5USUZJQ0FUSU9OX05PX0NP TVBSRVNTRURfSEVBREVSOgorICAgICAgICAgICAgICAgICsrcmVjb2duaXplZDsKKyAgICAgICAg ICAgICAgICBpICs9IGRhdGFfbGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug aWYgKHBhY2tldF90eXBlID09IE5VTExfUEFDS0VUKSB7CisgICAgICAgICAgICAvLyBudWxsIHBh Y2tldHMgc2hvdWxkIGNvbnRhaW4gYWxsIDB4RkZzCisgICAgICAgICAgICBmb3IgKGogPSBpOyBq IDwgaSArIGRhdGFfbGVuZ3RoICYmIGogPCBwLT5idWZfc2l6ZTsgKytqKSB7CisgICAgICAgICAg ICAgICAgaWYgKHAtPmJ1ZltqXSAhPSAweEZGKSBnb3RvIHNraXA7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICArK3JlY29nbml6ZWQ7CisgICAgICAgICAgICBpICs9IGRhdGFfbGVuZ3RoOwor ICAgICAgICB9CisKKyAgICAgICAgc2tpcDo7CisgICAgfQorCisgICAgcmV0dXJuIHJlY29nbml6 ZWQgKiBBVlBST0JFX1NDT1JFX01BWCAvIEZGTUFYKHByb2Nlc3NlZCwgMTApOworfQorCitzdHJ1 Y3QgTU1UVExWQ29udGV4dCB7CisgICAgc3RydWN0IFByb2dyYW0geworICAgICAgICB1aW50MzJf dCAgICAgICBjaWQ7CisgICAgICAgIE1NVFBDb250ZXh0ICAgICptbXRwOworICAgICAgICBzdHJ1 Y3QgUHJvZ3JhbSAqbmV4dDsKKyAgICB9ICpwcm9ncmFtczsKKworICAgIGludDY0X3QgbGFzdF9w b3M7CisgICAgc2l6ZV90ICByZXN5bmNfc2l6ZTsKKworICAgIHNpemVfdCAgY2FwOworICAgIHVp bnQ4X3QgKmJ1ZjsKK307CisKK3N0YXRpYyBpbnQgbW10dGx2X3JlYWRfaXB2Nl9wYWNrZXQoCisg ICAgc3RydWN0IE1NVFRMVkNvbnRleHQgKmN0eCwgQVZGb3JtYXRDb250ZXh0ICpzLCBBVlBhY2tl dCAqcGt0LAorICAgIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgdWludDE2X3Qgc2l6ZSkKK3sKKyAgICB1 aW50OF90ICBuZXh0X2hlYWRlcjsKKyAgICB1aW50MTZfdCBwYXlsb2FkX2xlbmd0aDsKKyAgICB1 aW50MTZfdCBkc3RfcG9ydDsKKworICAgIC8vIDEuIHBhcnNlIGlwdjYgaGVhZGVyCisgICAgaWYg KHNpemUgPCA0MCkgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgbmV4dF9oZWFkZXIg PSBidWZbNl07CisgICAgc2l6ZSAtPSA0MDsKKyAgICBidWYgKz0gNDA7CisKKyAgICBpZiAobmV4 dF9oZWFkZXIgIT0gMTcpIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKKyAgICAvLyAyLiBw YXJzZSB1ZHAgaGVhZGVyCisgICAgaWYgKHNpemUgPCA4KSByZXR1cm4gQVZFUlJPUl9JTlZBTElE REFUQTsKKyAgICBkc3RfcG9ydCAgICAgICA9IEFWX1JCMTYoYnVmICsgMik7CisgICAgcGF5bG9h ZF9sZW5ndGggPSBBVl9SQjE2KGJ1ZiArIDQpOworICAgIC8vIFRPRE86IGNoZWNrc3VtCisgICAg c2l6ZSAtPSA4OworICAgIGJ1ZiArPSA4OworCisgICAgaWYgKHNpemUgIT0gcGF5bG9hZF9sZW5n dGggLSA4KSByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICBpZiAoZHN0X3BvcnQgPT0g MTIzKSB7CisgICAgICAgIC8vIE5UUAorICAgICAgICByZXR1cm4gcGt0ID09IE5VTEwgPyAwIDog RkZFUlJPUl9SRURPOworICAgIH0KKyAgICByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7Cit9 CisKK3N0YXRpYyBpbnQgbW10dGx2X3JlYWRfY29tcHJlc3NlZF9pcF9wYWNrZXQoCisgICAgc3Ry dWN0IE1NVFRMVkNvbnRleHQgKmN0eCwgQVZGb3JtYXRDb250ZXh0ICpzLCBBVlBhY2tldCAqcGt0 LAorICAgIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgdWludDE2X3Qgc2l6ZSkKK3sKKyAgICAvLyBwYXJ0 aWFsIHVkcCBoZWFkZXIgYXJlIHVkcCBoZWFkZXIgd2l0aG91dCBkYXRhIGxlbmd0aCAoMTYgYml0 cykgYW5kIGNoZWNrc3VtICgxNiBiaXRzKQorI2RlZmluZSBQQVJUSUFMX1VEUF9IRUFERVJfTEVO R1RIICg4IC0gNCkKKyAgICAvLyBwYXJ0aWFsIGlwdjYgaGVhZGVyIGFyZSBpcHY2IGhlYWRlciB3 aXRob3V0IHBheWxvYWQgbGVuZ3RoICgxNiBiaXRzKQorI2RlZmluZSBQQVJUSUFMX0lQVjZfSEVB REVSX0xFTkdUSCAoNDAgLSAyKQorCisgICAgdWludDMyX3QgICAgICAgY29udGV4dF9pZDsKKyAg ICBzdHJ1Y3QgUHJvZ3JhbSAqcHJvZ3JhbTsKKworICAgIGlmIChzaXplIDwgMykKKyAgICAgICAg cmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgY29udGV4dF9pZCA9IEFWX1JCMTYoYnVm KSA+PiA0OworICAgIGJ1ZiArPSAzOworICAgIHNpemUgLT0gMzsKKworICAgIGZvciAocHJvZ3Jh bSA9IGN0eC0+cHJvZ3JhbXM7IHByb2dyYW0gIT0gTlVMTDsgcHJvZ3JhbSA9IHByb2dyYW0tPm5l eHQpCisgICAgICAgIGlmIChwcm9ncmFtLT5jaWQgPT0gY29udGV4dF9pZCkKKyAgICAgICAgICAg IGJyZWFrOworCisgICAgaWYgKHByb2dyYW0gPT0gTlVMTCkgeworICAgICAgICBBVlByb2dyYW0g KnAgPSBhdl9uZXdfcHJvZ3JhbShzLCBjb250ZXh0X2lkKTsKKyAgICAgICAgaWYgKHAgPT0gTlVM TCkgcmV0dXJuIEFWRVJST1IoZXJybm8pOworCisgICAgICAgIHByb2dyYW0gPSBhdl9tYWxsb2Mo c2l6ZW9mKHN0cnVjdCBQcm9ncmFtKSk7CisgICAgICAgIGlmIChwcm9ncmFtID09IE5VTEwpIHJl dHVybiBBVkVSUk9SKGVycm5vKTsKKworICAgICAgICBwcm9ncmFtLT5tbXRwID0gZmZfbW10cF9w YXJzZV9vcGVuKHApOworICAgICAgICBwcm9ncmFtLT5uZXh0ID0gY3R4LT5wcm9ncmFtczsKKyAg ICAgICAgY3R4LT5wcm9ncmFtcyA9IHByb2dyYW07CisgICAgICAgIHByb2dyYW0tPmNpZCAgPSBj b250ZXh0X2lkOworICAgIH0KKworICAgIHN3aXRjaCAoYnVmWy0xXSkgeworICAgIGNhc2UgQ09O VEVYVF9JREVOVElGSUNBVElPTl9QQVJUSUFMX0lQVjRfQU5EX1BBUlRJQUxfVURQX0hFQURFUjoK KyAgICBjYXNlIENPTlRFWFRfSURFTlRJRklDQVRJT05fSVBWNF9IRUFERVI6CisgICAgICAgIHJl dHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKKyAgICBjYXNlIENPTlRFWFRfSURFTlRJRklDQVRJ T05fUEFSVElBTF9JUFY2X0FORF9QQVJUSUFMX1VEUF9IRUFERVI6CisgICAgICAgIGlmIChzaXpl IDwgUEFSVElBTF9JUFY2X0hFQURFUl9MRU5HVEggKyBQQVJUSUFMX1VEUF9IRUFERVJfTEVOR1RI KQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgIHNpemUg LT0gUEFSVElBTF9JUFY2X0hFQURFUl9MRU5HVEggKyBQQVJUSUFMX1VEUF9IRUFERVJfTEVOR1RI OworICAgICAgICBidWYgKz0gUEFSVElBTF9JUFY2X0hFQURFUl9MRU5HVEggKyBQQVJUSUFMX1VE UF9IRUFERVJfTEVOR1RIOworICAgIGNhc2UgQ09OVEVYVF9JREVOVElGSUNBVElPTl9OT19DT01Q UkVTU0VEX0hFQURFUjoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0 dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgfQorCisgICAgcmV0dXJuIGZmX21tdHBfcGFy c2VfcGFja2V0KHByb2dyYW0tPm1tdHAsIHMsIHBrdCwgYnVmLCBzaXplKTsKK30KKworc3RhdGlj IGludCBtbXR0bHZfcmVhZF9wYWNrZXQoQVZGb3JtYXRDb250ZXh0ICpzLCBBVlBhY2tldCAqcGt0 KQoreworICAgIHVpbnQ4X3QgICAgICAgICAgICAgIGhlYWRlcls0XTsKKyAgICB1aW50MTZfdCAg ICAgICAgICAgICBzaXplOworICAgIGludCAgICAgICAgICAgICAgICAgIGVycjsKKyAgICBzdHJ1 Y3QgTU1UVExWQ29udGV4dCAqY3R4ID0gcy0+cHJpdl9kYXRhOworICAgIGludDY0X3QgICAgICAg ICAgICAgIHBvcyAgPSBhdmlvX3RlbGwocy0+cGIpOworCisgICAgaWYgKHBvcyA8IDApIHJldHVy biAoaW50KSBwb3M7CisgICAgaWYgKHBvcyAhPSBjdHgtPmxhc3RfcG9zKSB7CisgICAgICAgIGN0 eC0+bGFzdF9wb3MgPSBwb3M7CisKKyAgICAgICAgd2hpbGUgKHBvcyAtIGN0eC0+bGFzdF9wb3Mg PCBjdHgtPnJlc3luY19zaXplKSB7CisgICAgICAgICAgICBpZiAoKGVyciA9IGZmaW9fZW5zdXJl X3NlZWtiYWNrKHMtPnBiLCA0KSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisK KyAgICAgICAgICAgIGlmICgoZXJyID0gYXZpb19yZWFkKHMtPnBiLCBoZWFkZXIsIDQpKSA8IDAp CisgICAgICAgICAgICAgICAgcmV0dXJuIGF2aW9fZmVvZihzLT5wYikgPyBBVkVSUk9SX0VPRiA6 IGVycjsKKworICAgICAgICAgICAgaWYgKGhlYWRlclswXSAhPSBIRUFERVJfQllURSkgeworICAg ICAgICAgICAgICAgIGlmICgocG9zID0gYXZpb19zZWVrKHMtPnBiLCAtMywgU0VFS19DVVIpKSA8 IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaW50KSBwb3M7CisgICAgICAgICAgICAg ICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNpemUgPSBBVl9SQjE2 KGhlYWRlciArIDIpOworCisgICAgICAgICAgICBpZiAoKHBvcyA9IGF2aW9fc2VlayhzLT5wYiwg LTQsIFNFRUtfQ1VSKSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAoaW50KSBwb3M7CisK KyAgICAgICAgICAgIGlmICgoZXJyID0gZmZpb19lbnN1cmVfc2Vla2JhY2socy0+cGIsIDQgKyBz aXplICsgMSkpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworCisgICAgICAgICAg ICBpZiAoKHBvcyA9IGF2aW9fc2tpcChzLT5wYiwgNCArIHNpemUpKSA8IDApCisgICAgICAgICAg ICAgICAgcmV0dXJuIChpbnQpIHBvczsKKworICAgICAgICAgICAgaWYgKChlcnIgPSBhdmlvX3Jl YWQocy0+cGIsIGhlYWRlciwgMSkpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gYXZpb19m ZW9mKHMtPnBiKSA/IEFWRVJST1JfRU9GIDogZXJyOworCisgICAgICAgICAgICBpZiAoaGVhZGVy WzBdID09IEhFQURFUl9CWVRFKSB7CisgICAgICAgICAgICAgICAgLy8gZm91bmQgSEVBREVSLCBb c2l6ZV0sIEhFQURFUiwgc2hvdWxkIGJlIGdvb2QKKyAgICAgICAgICAgICAgICBpZiAoKHBvcyA9 IGF2aW9fc2VlaygKKyAgICAgICAgICAgICAgICAgICAgcy0+cGIsIC0oaW50NjRfdCkgKHNpemUp IC0gMSAtIDQsIFNFRUtfQ1VSKSkgPCAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGlu dCkgcG9zOworICAgICAgICAgICAgICAgIGdvdG8gc3VjY2VzczsKKyAgICAgICAgICAgIH0KKwor ICAgICAgICAgICAgaWYgKChwb3MgPSBhdmlvX3NlZWsoCisgICAgICAgICAgICAgICAgcy0+cGIs IC0oaW50NjRfdCkgKHNpemUpIC0gMSAtIDMsIFNFRUtfQ1VSKSkgPCAwKQorICAgICAgICAgICAg ICAgIHJldHVybiAoaW50KSBwb3M7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEFWRVJST1Jf SU5WQUxJRERBVEE7CisKKyAgICAgICAgc3VjY2VzczoKKyAgICAgICAgY3R4LT5sYXN0X3BvcyA9 IHBvczsKKworICAgICAgICBmb3IgKHN0cnVjdCBQcm9ncmFtICpwcm9ncmFtID0gY3R4LT5wcm9n cmFtczsKKyAgICAgICAgICAgICBwcm9ncmFtICE9IE5VTEw7IHByb2dyYW0gPSBwcm9ncmFtLT5u ZXh0KQorICAgICAgICAgICAgZmZfbW10cF9yZXNldF9zdGF0ZShwcm9ncmFtLT5tbXRwKTsKKyAg ICB9CisKKyAgICBpZiAocGt0ICE9IE5VTEwpIHBrdC0+cG9zID0gY3R4LT5sYXN0X3BvczsKKyAg ICBpZiAoKGVyciA9IGZmaW9fcmVhZF9zaXplKHMtPnBiLCBoZWFkZXIsIDQpKSA8IDApCisgICAg ICAgIHJldHVybiBhdmlvX2Zlb2Yocy0+cGIpID8gQVZFUlJPUl9FT0YgOiBlcnI7CisgICAgY3R4 LT5sYXN0X3BvcyArPSA0OworCisgICAgaWYgKGhlYWRlclswXSAhPSBIRUFERVJfQllURSkKKyAg ICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisKKyAgICBzaXplID0gQVZfUkIxNiho ZWFkZXIgKyAyKTsKKyAgICBpZiAoaGVhZGVyWzFdID09IE5VTExfUEFDS0VUKSB7CisgICAgICAg IGlmICgoY3R4LT5sYXN0X3BvcyA9IGF2aW9fc2tpcChzLT5wYiwgc2l6ZSkpIDwgMCkKKyAgICAg ICAgICAgIHJldHVybiAoaW50KSBjdHgtPmxhc3RfcG9zOworICAgICAgICByZXR1cm4gcGt0ID09 IE5VTEwgPyAwIDogRkZFUlJPUl9SRURPOworICAgIH0KKworICAgIGlmIChjdHgtPmNhcCA8IHNp emUpIHsKKyAgICAgICAgYXZfZnJlZShjdHgtPmJ1Zik7CisgICAgICAgIGlmICgoY3R4LT5idWYg PSBhdl9tYWxsb2MoY3R4LT5jYXAgPSBzaXplKSkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVy biBBVkVSUk9SKGVycm5vKTsKKyAgICB9CisgICAgaWYgKChlcnIgPSBmZmlvX3JlYWRfc2l6ZShz LT5wYiwgY3R4LT5idWYsIHNpemUpKSA8IDApCisgICAgICAgIHJldHVybiBhdmlvX2Zlb2Yocy0+ cGIpID8gQVZFUlJPUl9FT0YgOiBlcnI7CisgICAgY3R4LT5sYXN0X3BvcyArPSBzaXplOworCisg ICAgc3dpdGNoIChoZWFkZXJbMV0pIHsKKyAgICBjYXNlIElQVjZfUEFDS0VUOgorICAgICAgICBy ZXR1cm4gbW10dGx2X3JlYWRfaXB2Nl9wYWNrZXQoY3R4LCBzLCBwa3QsIGN0eC0+YnVmLCBzaXpl KTsKKyAgICBjYXNlIEhFQURFUl9DT01QUkVTU0VEX0lQX1BBQ0tFVDoKKyAgICAgICAgcmV0dXJu IG1tdHRsdl9yZWFkX2NvbXByZXNzZWRfaXBfcGFja2V0KGN0eCwgcywgcGt0LCBjdHgtPmJ1Ziwg c2l6ZSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01F OworICAgIH0KK30KKworc3RhdGljIGludCBtbXR0bHZfcmVhZF9oZWFkZXIoQVZGb3JtYXRDb250 ZXh0ICpzKQoreworICAgIGludDY0X3QgICAgICAgICAgICAgIHBvczsKKyAgICBpbnQ2NF90ICAg ICAgICAgICAgICBhbGxvdyA9IHMtPnByb2Jlc2l6ZTsKKyAgICBzdHJ1Y3QgTU1UVExWQ29udGV4 dCAqY3R4ICA9IHMtPnByaXZfZGF0YTsKKworICAgIGN0eC0+bGFzdF9wb3MgPSBhdmlvX3RlbGwo cy0+cGIpOworICAgIGlmIChjdHgtPmxhc3RfcG9zIDwgMCkKKyAgICAgICAgcmV0dXJuIChpbnQp IGN0eC0+bGFzdF9wb3M7CisgICAgY3R4LT5sYXN0X3BvcyAtPSAxOyAvLyBmb3JjZSByZXN5bmMK KworICAgIGN0eC0+cmVzeW5jX3NpemUgPSA0MDk2OworICAgIHMtPmN0eF9mbGFncyB8PSBBVkZN VENUWF9OT0hFQURFUjsKKworICAgIGlmICghcy0+cGItPnNlZWthYmxlKQorICAgICAgICByZXR1 cm4gMDsKKworICAgIGlmICgocG9zID0gYXZpb190ZWxsKHMtPnBiKSkgPCAwKQorICAgICAgICBy ZXR1cm4gKGludCkgcG9zOworCisgICAgd2hpbGUgKHMtPm5iX3N0cmVhbXMgPD0gMCAmJiBhbGxv dyA+IDApIHsKKyAgICAgICAgY29uc3QgaW50NjRfdCBjdXIgPSBjdHgtPmxhc3RfcG9zOworICAg ICAgICBjb25zdCBpbnQgICAgIGVyciA9IG1tdHRsdl9yZWFkX3BhY2tldChzLCBOVUxMKTsKKyAg ICAgICAgaWYgKGVyciA8IDApIHJldHVybiBlcnI7CisgICAgICAgIGFsbG93IC09IGN0eC0+bGFz dF9wb3MgLSBjdXI7CisgICAgfQorCisgICAgY3R4LT5sYXN0X3BvcyA9IGF2aW9fdGVsbChzLT5w Yik7CisgICAgaWYgKGN0eC0+bGFzdF9wb3MgPCAwKQorICAgICAgICByZXR1cm4gKGludCkgY3R4 LT5sYXN0X3BvczsKKworICAgIGlmICgocG9zID0gYXZpb19zZWVrKHMtPnBiLCBwb3MsIFNFRUtf U0VUKSkgPCAwKQorICAgICAgICByZXR1cm4gKGludCkgcG9zOworCisgICAgcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgbW10dGx2X3JlYWRfY2xvc2UoQVZGb3JtYXRDb250ZXh0ICpjdHgpCit7 CisgICAgc3RydWN0IFByb2dyYW0gICAgICAgKnByb2dyYW07CisgICAgc3RydWN0IE1NVFRMVkNv bnRleHQgKnByaXYgPSBjdHgtPnByaXZfZGF0YTsKKyAgICBmb3IgKHByb2dyYW0gPSBwcml2LT5w cm9ncmFtczsgcHJvZ3JhbSAhPSBOVUxMOykgeworICAgICAgICBzdHJ1Y3QgUHJvZ3JhbSAqbmV4 dCA9IHByb2dyYW0tPm5leHQ7CisgICAgICAgIGZmX21tdHBfcGFyc2VfY2xvc2UocHJvZ3JhbS0+ bW10cCk7CisgICAgICAgIGF2X2ZyZWUocHJvZ3JhbSk7CisgICAgICAgIHByb2dyYW0gPSBuZXh0 OworICAgIH0KKyAgICBwcml2LT5wcm9ncmFtcyA9IE5VTEw7CisgICAgcHJpdi0+Y2FwICAgICAg PSAwOworICAgIGF2X2ZyZWVwKCZwcml2LT5idWYpOworICAgIHJldHVybiAwOworfQorCitzdGF0 aWMgaW50NjRfdCBtbXR0bHZfcmVhZF90aW1lc3RhbXAoCisgICAgc3RydWN0IEFWRm9ybWF0Q29u dGV4dCAqcywgaW50IHN0cmVhbV9pbmRleCwKKyAgICBpbnQ2NF90ICpwb3MsIGludDY0X3QgcG9z X2xpbWl0KQoreworICAgIHN0cnVjdCBNTVRUTFZDb250ZXh0ICpjdHggPSBzLT5wcml2X2RhdGE7 CisKKyAgICBpZiAoKCpwb3MgPSBhdmlvX3NlZWsocy0+cGIsICpwb3MsIFNFRUtfU0VUKSkgPCAw KQorICAgICAgICByZXR1cm4gKGludCkgKnBvczsKKworICAgIHdoaWxlIChwb3NfbGltaXQgPiAw KSB7CisgICAgICAgIEFWUGFja2V0ICAgICAgcGFja2V0ID0gezB9OworICAgICAgICBjb25zdCBp bnQgICAgIGVyciAgICA9IG1tdHRsdl9yZWFkX3BhY2tldChzLCAmcGFja2V0KTsKKyAgICAgICAg Y29uc3QgaW50NjRfdCB0cyAgICAgPSBwYWNrZXQuZHRzOworICAgICAgICBjb25zdCBpbnQ2NF90 IG9mZiAgICA9IHBhY2tldC5wb3M7CisgICAgICAgIGNvbnN0IGludCAgICAgc2lkICAgID0gcGFj a2V0LnN0cmVhbV9pbmRleDsKKyAgICAgICAgYXZfcGFja2V0X3VucmVmKCZwYWNrZXQpOworICAg ICAgICBpZiAoZXJyID49IDAgJiYgKHN0cmVhbV9pbmRleCA8IDAgfHwgc2lkID09IHN0cmVhbV9p bmRleCkpIHsKKyAgICAgICAgICAgICpwb3MgPSBvZmY7CisgICAgICAgICAgICByZXR1cm4gdHM7 CisgICAgICAgIH0KKyAgICAgICAgcG9zX2xpbWl0IC09IGN0eC0+bGFzdF9wb3MgLSAqcG9zOwor ICAgICAgICAqcG9zID0gY3R4LT5sYXN0X3BvczsKKyAgICAgICAgaWYgKGVyciA8IDAgJiYgZXJy ICE9IEZGRVJST1JfUkVETykKKyAgICAgICAgICAgIHJldHVybiBBVl9OT1BUU19WQUxVRTsKKyAg ICB9CisKKyAgICByZXR1cm4gQVZfTk9QVFNfVkFMVUU7Cit9CisKKyNpZiBDT05GSUdfTU1UVExW X0RFTVVYRVIKK2NvbnN0IEZGSW5wdXRGb3JtYXQgZmZfbW10dGx2X2RlbXV4ZXIgPSB7CisgICAg LnAubmFtZSAgICAgICAgID0gIm1tdHRsdiIsCisgICAgLnAubG9uZ19uYW1lICAgID0gTlVMTF9J Rl9DT05GSUdfU01BTEwoCisgICAgICAgICJNTVQgcHJvdG9jb2wgb3ZlciBUTFYgcGFja2V0cyAo QVJJQiBTVEQtQjMyKSIpLAorICAgIC5wLmZsYWdzICAgICAgICA9IEFWRk1UX1NIT1dfSURTLAor ICAgIC5wcml2X2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgTU1UVExWQ29udGV4dCksCisgICAg LmZsYWdzX2ludGVybmFsID0gRkZfSU5GTVRfRkxBR19JTklUX0NMRUFOVVAsCisgICAgLnJlYWRf cHJvYmUgICAgID0gbW10dGx2X3Byb2JlLAorICAgIC5yZWFkX2hlYWRlciAgICA9IG1tdHRsdl9y ZWFkX2hlYWRlciwKKyAgICAucmVhZF9wYWNrZXQgICAgPSBtbXR0bHZfcmVhZF9wYWNrZXQsCisg ICAgLnJlYWRfY2xvc2UgICAgID0gbW10dGx2X3JlYWRfY2xvc2UsCisgICAgLnJlYWRfdGltZXN0 YW1wID0gbW10dGx2X3JlYWRfdGltZXN0YW1wLAorfTsKKyNlbmRpZgpcIE5vIG5ld2xpbmUgYXQg ZW5kIG9mIGZpbGUKLS0gCjIuNDkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdCAtLSBmZm1wZWctZGV2ZWxA ZmZtcGVnLm9yZwpUbyB1bnN1YnNjcmliZSBzZW5kIGFuIGVtYWlsIHRvIGZmbXBlZy1kZXZlbC1s ZWF2ZUBmZm1wZWcub3JnCg==