Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vaDWj-005JdZ-0e for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Dec 2025 13:43:14 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vaDWi-00GsRo-0S for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Dec 2025 13:43:12 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vaDWh-00GsRg-0t for pgsql-hackers@lists.postgresql.org; Mon, 29 Dec 2025 13:43:12 +0000 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vaDWc-003BRo-14 for pgsql-hackers@postgresql.org; Mon, 29 Dec 2025 13:43:10 +0000 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-2a0d67f1877so115266135ad.2 for ; Mon, 29 Dec 2025 05:43:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767015785; x=1767620585; darn=postgresql.org; h=in-reply-to:references:to:from:subject:cc:message-id:date :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=jqWHcBPRjloyr5UYthqlGmCy/sR/T7BVT6av/FRLTZo=; b=lZTBe5OTVR2nGysSLg3qOzifjaOq+PRX+v7UUAIjEVxuRin7A0mCqXyV3qxGa9Ij04 IiJvyh/eZEKm79/gkB9rCD6HWZOdVE29dvWGMmydiGq2YYqn8xDZafT+6NNiZBZDmMwW J3keGKt22irGR1ejfkSISQ0/KCs66xkg4oxPBeRP6jqm/yn0XeqOK3rwNJXJ5FJT0EDP 9by2/Z0Qsji88oq/pFhvfmI9Tij31eS92si9kzvpnbNU3UYrEVeNirS0a7KHlR7frv5Y VBFq5Y2GO3+DXoUJb5tpShSYZlf061apOSOBAHa8ixdpHIkK3kXGnQq5xtBXmaH/uDhV QtTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767015785; x=1767620585; h=in-reply-to:references:to:from:subject:cc:message-id:date :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=jqWHcBPRjloyr5UYthqlGmCy/sR/T7BVT6av/FRLTZo=; b=J+ngiXy4XzLHnX7OM1Kv7CN1yYwF5q1u7RyFnKe6j3olsOXh4fU2/5NMI+w6b7Dt6K DEyjB8eRC6iAW5aszbbCAeHGnOhSkzqNSv19S4cBgmkEeW2tDK6fydcTausuUiu6awvs vzPol59yqktPZZPF7RhJr6XPqXmzkbO8TJ5Hv1YWEmjBEds2wX8SLMb4DeNhr/pEzcd6 qa2TG1QebJk99J+/TGKh4adzFG+n4Os8JLn1lQbmMaC6Ai9cgWzZD5C8DdN8UxmIk6qO a0FRbzlVI6MP4F8IHmQqb7LC3837Vm7qvsNDO6QoX7sJepMdZFjnHD+I6IJQ97wnHNkJ 9QnQ== X-Forwarded-Encrypted: i=1; AJvYcCVg+qSyGv4yIdFKH6Tj02l4tZ39hcHxOM3Ivn6qe/VKyf7Ft1nM1tHETOIv+SbD+L05EkhCmrVKE83/d4h/@postgresql.org X-Gm-Message-State: AOJu0Yxllx5133Mmbbk4FGSVkyQShB9iMvgjxRwfZUZu/LALh7M+8DqR uoxHhoZczK0tQnRbglbg9A85R1VaCdF3bz9F+KH2bttU1+jhF3eJK2MS X-Gm-Gg: AY/fxX7pkEEp87j4e0p/ozP2FEfZ+7p4apofYtozQKZJZcXsQx6GO69fuNZfZ8G6fnN IUjFrgqt7ig8Xq9Oz6rk4RttbROdDvWaA5eRYHGq6/5taC/qBevKYQAWhNjbW5HkLvMcZtlWywr E7uH21OCzZcyGBueYSmoSckTbPYi+LiANZIiimdcdrmRr24oIR2uFRt7bv2avSJWzRp7vNSoh1S g16X/1kBPJOY1R4EGEH2EOvSuJSQPxu+zxsWHQq4ufwAiLLENl43p7edPHogwMe3++vnr40krt8 7Emu6RqDs9POBJb3nP9ImAFVc3tTeP6BOAQGp4wrujCMFqI6PJScOIMVa+WgVSXrTjIqd7km8uZ XPrOvvX9OKnVmPLO3EFPY6DNVAhfnd82ZQczB3CVFyqSHkBa4Q63LH0F829LT3PaIYM9FLOm4fB 4aDbwGYNMzCsx02qDRiqCBU+UBJCxhPrJahQ== X-Google-Smtp-Source: AGHT+IEZdTKygEk54LrdV7zJ/m+nCYPHHo4ku9Vm54x9CbvxW0xkyTqQT//HFML5jr0+GyarA+yl8w== X-Received: by 2002:a05:7022:418e:b0:119:e569:f277 with SMTP id a92af1059eb24-121722de77cmr37298194c88.32.1767015784819; Mon, 29 Dec 2025 05:43:04 -0800 (PST) Received: from localhost ([2804:14d:328a:a59c:bcfe:a5e5:7e4a:3e8d]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-121724cfa2csm96301445c88.3.2025.12.29.05.43.02 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 29 Dec 2025 05:43:04 -0800 (PST) Content-Type: multipart/mixed; boundary=20013488fca0a9d01d2374bf15e8547dfcfe973c22a39b2f039b12736b87 Mime-Version: 1.0 Date: Mon, 29 Dec 2025 10:43:00 -0300 Message-Id: Cc: "Alena Rybakina" , "Pgsql Hackers" Subject: Re: Asynchronous MergeAppend From: "Matheus Alcantara" To: "Alexander Pyhalov" , "Matheus Alcantara" X-Mailer: aerc 0.21.0 References: <59be194c5a409fb9fc9f2031581b8a44@postgrespro.ru> <764dd8b8-6374-4f5a-aac7-d8e3f6ebe5fd@postgrespro.ru> <159b591411bb2c81332018927acbd509@postgrespro.ru> <2fb1d9923b6995492e7b163e6cb95402@postgrespro.ru> In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --20013488fca0a9d01d2374bf15e8547dfcfe973c22a39b2f039b12736b87 Content-Type: multipart/alternative; boundary=490982529fe6ac860be137271f75c42367fa2c58d0c6e7f8bd4f644f5124 --490982529fe6ac860be137271f75c42367fa2c58d0c6e7f8bd4f644f5124 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8 On Tue Dec 23, 2025 at 5:50 AM -03, Alexander Pyhalov wrote: > I've looked through updated patch. Tested it (also with our fdw).=20 > Overall looks good. > Thanks for testing. > In execAppend.c there's still reference to as_valid_subplans. Also we=20 > could perhaps use palloc0_array() in some more places, for example, for= =20 > for state->asyncrequests and state->asyncresults. > Fixed on the new attached version. -- Matheus Alcantara EDB: https://www.enterprisedb.com --490982529fe6ac860be137271f75c42367fa2c58d0c6e7f8bd4f644f5124-- --20013488fca0a9d01d2374bf15e8547dfcfe973c22a39b2f039b12736b87 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v11-0001-mark_async_capable-subpath-should-match-subplan.patch Content-Type: text/plain; charset=utf-8; name=v11-0001-mark_async_capable-subpath-should-match-subplan.patch RnJvbSA5YzIxOWEzZmUzODZlNmUyNTAzNjk4MDQyOTA4NjRhZjJjMDQzYmVkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBTYXQsIDE1IE5vdiAyMDI1IDEwOjE2OjI1ICswMzAwClN1YmplY3Q6IFtQ QVRDSCB2MTEgMS8zXSBtYXJrX2FzeW5jX2NhcGFibGUoKTogc3VicGF0aCBzaG91bGQgbWF0Y2gg c3VicGxhbgoKbWFya19hc3luY19jYXBhYmxlKCkgYmVsaWV2ZXMgdGhhdCBwYXRoIGNvcnJlc3Bv bmRzIHRvIHBsYW4uIFRoaXMgaXMKbm90IHRydWUgd2hlbiBjcmVhdGVfW21lcmdlX11hcHBlbmRf cGxhbigpIGluc2VydHMgc29ydCBub2RlLiBJbgp0aGlzIGNhc2UgbWFya19hc3luY19jYXBhYmxl KCkgY2FuIHRyZWF0IFNvcnQgcGxhbiBub2RlIGFzIHNvbWUKb3RoZXIgYW5kIGNyYXNoLiBGaXgg dGhpcyBieSBoYW5kbGluZyB0aGUgU29ydCBub2RlIHNlcGFyYXRlbHkuCgpUaGlzIGlzIG5lZWRl ZCB0byBtYWtlIE1lcmdlQXBwZW5kIG5vZGUgYXN5bmMtY2FwYWJsZSB0aGF0IHdpbGwKYmUgaW1w bGVtZW50ZWQgaW4gYSBuZXh0IGNvbW1pdC4KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9jcmVhdGVwbGFuLmMgfCAxOCArKysrKysrKysrLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAx MCBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L2NyZWF0ZXBsYW4uYwppbmRleCBmMWEwMWNmYzU0NC4uMDVmYWM2OTM5ODkgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYworKysgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKQEAgLTExMzksMTAgKzExMzksMTIgQEAgbWFy a19hc3luY19jYXBhYmxlX3BsYW4oUGxhbiAqcGxhbiwgUGF0aCAqcGF0aCkKIAkJCQlTdWJxdWVy eVNjYW4gKnNjYW5fcGxhbiA9IChTdWJxdWVyeVNjYW4gKikgcGxhbjsKIAogCQkJCS8qCi0JCQkJ ICogSWYgdGhlIGdlbmVyYXRlZCBwbGFuIG5vZGUgaW5jbHVkZXMgYSBnYXRpbmcgUmVzdWx0IG5v ZGUsCi0JCQkJICogd2UgY2FuJ3QgZXhlY3V0ZSBpdCBhc3luY2hyb25vdXNseS4KKwkJCQkgKiBD aGVjayB0aGF0IHBsYW4gaXMgcmVhbGx5IGEgU3VicXVlcnlTY2FuIGJlZm9yZSB1c2luZyBpdC4K KwkJCQkgKiBJdCBjYW4gYmUgbm90IHRydWUsIGlmIHRoZSBnZW5lcmF0ZWQgcGxhbiBub2RlIGlu Y2x1ZGVzIGEKKwkJCQkgKiBnYXRpbmcgUmVzdWx0IG5vZGUgb3IgYSBTb3J0IG5vZGUuIEluIHN1 Y2ggY2FzZSB3ZSBjYW4ndAorCQkJCSAqIGV4ZWN1dGUgaXQgYXN5bmNocm9ub3VzbHkuCiAJCQkJ ICovCi0JCQkJaWYgKElzQShwbGFuLCBSZXN1bHQpKQorCQkJCWlmICghSXNBKHBsYW4sIFN1YnF1 ZXJ5U2NhbikpCiAJCQkJCXJldHVybiBmYWxzZTsKIAogCQkJCS8qCkBAIC0xMTYwLDEwICsxMTYy LDEwIEBAIG1hcmtfYXN5bmNfY2FwYWJsZV9wbGFuKFBsYW4gKnBsYW4sIFBhdGggKnBhdGgpCiAJ CQkJRmR3Um91dGluZSAqZmR3cm91dGluZSA9IHBhdGgtPnBhcmVudC0+ZmR3cm91dGluZTsKIAog CQkJCS8qCi0JCQkJICogSWYgdGhlIGdlbmVyYXRlZCBwbGFuIG5vZGUgaW5jbHVkZXMgYSBnYXRp bmcgUmVzdWx0IG5vZGUsCi0JCQkJICogd2UgY2FuJ3QgZXhlY3V0ZSBpdCBhc3luY2hyb25vdXNs eS4KKwkJCQkgKiBJZiB0aGUgZ2VuZXJhdGVkIHBsYW4gbm9kZSBpbmNsdWRlcyBhIGdhdGluZyBS ZXN1bHQgbm9kZSBvcgorCQkJCSAqIGEgU29ydCBub2RlLCB3ZSBjYW4ndCBleGVjdXRlIGl0IGFz eW5jaHJvbm91c2x5LgogCQkJCSAqLwotCQkJCWlmIChJc0EocGxhbiwgUmVzdWx0KSkKKwkJCQlp ZiAoSXNBKHBsYW4sIFJlc3VsdCkgfHwgSXNBKHBsYW4sIFNvcnQpKQogCQkJCQlyZXR1cm4gZmFs c2U7CiAKIAkJCQlBc3NlcnQoZmR3cm91dGluZSAhPSBOVUxMKTsKQEAgLTExNzYsOSArMTE3OCw5 IEBAIG1hcmtfYXN5bmNfY2FwYWJsZV9wbGFuKFBsYW4gKnBsYW4sIFBhdGggKnBhdGgpCiAKIAkJ CS8qCiAJCQkgKiBJZiB0aGUgZ2VuZXJhdGVkIHBsYW4gbm9kZSBpbmNsdWRlcyBhIFJlc3VsdCBu b2RlIGZvciB0aGUKLQkJCSAqIHByb2plY3Rpb24sIHdlIGNhbid0IGV4ZWN1dGUgaXQgYXN5bmNo cm9ub3VzbHkuCisJCQkgKiBwcm9qZWN0aW9uIG9yIGEgU29ydCBub2RlLCB3ZSBjYW4ndCBleGVj dXRlIGl0IGFzeW5jaHJvbm91c2x5LgogCQkJICovCi0JCQlpZiAoSXNBKHBsYW4sIFJlc3VsdCkp CisJCQlpZiAoSXNBKHBsYW4sIFJlc3VsdCkgfHwgSXNBKHBsYW4sIFNvcnQpKQogCQkJCXJldHVy biBmYWxzZTsKIAogCQkJLyoKLS0gCjIuNTEuMgoK --20013488fca0a9d01d2374bf15e8547dfcfe973c22a39b2f039b12736b87 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v11-0002-MergeAppend-should-support-Async-Foreign-Scan-su.patch Content-Type: text/plain; charset=utf-8; name=v11-0002-MergeAppend-should-support-Async-Foreign-Scan-su.patch RnJvbSBmYWZlNWY2MTliYTNjZWU3NGRlNGMzOTUxYzFlNjJjNWM3YTdhZjkyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBTYXQsIDE1IE5vdiAyMDI1IDEwOjIzOjQ3ICswMzAwClN1YmplY3Q6IFtQ QVRDSCB2MTEgMi8zXSBNZXJnZUFwcGVuZCBzaG91bGQgc3VwcG9ydCBBc3luYyBGb3JlaWduIFNj YW4KIHN1YnBsYW5zCgotLS0KIC4uLi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3 Lm91dCAgICB8IDI4OCArKysrKysrKysrKwogY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNf ZmR3LmMgICAgICAgICAgIHwgIDEwICstCiBjb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdy ZXNfZmR3LnNxbCAgICAgfCAgODcgKysrKwogZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sICAgICAg ICAgICAgICAgICAgICAgIHwgIDE0ICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBc3luYy5j ICAgICAgICAgICAgICB8ICAgNCArCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMg ICAgICAgICAgICAgfCAgMjQgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVu ZC5jICAgICAgICB8IDQ3MSArKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL2Nvc3RzaXplLmMgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGxhbi9jcmVhdGVwbGFuLmMgICAgICAgfCAgIDkgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9n dWNfcGFyYW1ldGVycy5kYXQgICAgIHwgICA4ICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9z dGdyZXNxbC5jb25mLnNhbXBsZSB8ICAgMSArCiBzcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlTWVy Z2VBcHBlbmQuaCAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgg ICAgICAgICAgICAgICAgIHwgIDU5ICsrKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCAg ICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmll d3Mub3V0ICAgICAgICB8ICAgMyArLQogMTUgZmlsZXMgY2hhbmdlZCwgOTUxIGluc2VydGlvbnMo KyksIDMwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4 cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9w b3N0Z3Jlc19mZHcub3V0CmluZGV4IDQ4ZTMxODViMjI3Li5lMjI0MGQzNGQyMSAxMDA2NDQKLS0t IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAorKysgYi9j b250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CkBAIC0xMTU1Niw2 ICsxMTU1Niw0NiBAQCBTRUxFQ1QgKiBGUk9NIHJlc3VsdF90YmwgT1JERVIgQlkgYTsKICgyIHJv d3MpCiAKIERFTEVURSBGUk9NIHJlc3VsdF90Ymw7CistLSBUZXN0IE1lcmdlIEFwcGVuZAorRVhQ TEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBhc3luY19wdCBXSEVSRSBi ICUgMTAwID0gMCBPUkRFUiBCWSBiLCBhOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBN ZXJnZSBBcHBlbmQKKyAgIFNvcnQgS2V5OiBhc3luY19wdC5iLCBhc3luY19wdC5hCisgICAtPiAg QXN5bmMgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5hc3luY19wMSBhc3luY19wdF8xCisgICAgICAg ICBPdXRwdXQ6IGFzeW5jX3B0XzEuYSwgYXN5bmNfcHRfMS5iLCBhc3luY19wdF8xLmMKKyAgICAg ICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBhLCBiLCBjIEZST00gcHVibGljLmJhc2VfdGJsMSBXSEVS RSAoKChiICUgMTAwKSA9IDApKSBPUkRFUiBCWSBiIEFTQyBOVUxMUyBMQVNULCBhIEFTQyBOVUxM UyBMQVNUCisgICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5hc3luY19wMiBhc3lu Y19wdF8yCisgICAgICAgICBPdXRwdXQ6IGFzeW5jX3B0XzIuYSwgYXN5bmNfcHRfMi5iLCBhc3lu Y19wdF8yLmMKKyAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBhLCBiLCBjIEZST00gcHVibGlj LmJhc2VfdGJsMiBXSEVSRSAoKChiICUgMTAwKSA9IDApKSBPUkRFUiBCWSBiIEFTQyBOVUxMUyBM QVNULCBhIEFTQyBOVUxMUyBMQVNUCisoOCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGFzeW5jX3B0 IFdIRVJFIGIgJSAxMDAgPSAwIE9SREVSIEJZIGIsIGE7CisgIGEgICB8ICBiICB8ICBjICAgCist LS0tLS0rLS0tLS0rLS0tLS0tCisgMTAwMCB8ICAgMCB8IDAwMDAKKyAyMDAwIHwgICAwIHwgMDAw MAorIDExMDAgfCAxMDAgfCAwMTAwCisgMjEwMCB8IDEwMCB8IDAxMDAKKyAxMjAwIHwgMjAwIHwg MDIwMAorIDIyMDAgfCAyMDAgfCAwMjAwCisgMTMwMCB8IDMwMCB8IDAzMDAKKyAyMzAwIHwgMzAw IHwgMDMwMAorIDE0MDAgfCA0MDAgfCAwNDAwCisgMjQwMCB8IDQwMCB8IDA0MDAKKyAxNTAwIHwg NTAwIHwgMDUwMAorIDI1MDAgfCA1MDAgfCAwNTAwCisgMTYwMCB8IDYwMCB8IDA2MDAKKyAyNjAw IHwgNjAwIHwgMDYwMAorIDE3MDAgfCA3MDAgfCAwNzAwCisgMjcwMCB8IDcwMCB8IDA3MDAKKyAx ODAwIHwgODAwIHwgMDgwMAorIDI4MDAgfCA4MDAgfCAwODAwCisgMTkwMCB8IDkwMCB8IDA5MDAK KyAyOTAwIHwgOTAwIHwgMDkwMAorKDIwIHJvd3MpCisKIC0tIFRlc3QgZXJyb3IgaGFuZGxpbmcs IGlmIGFjY2Vzc2luZyBvbmUgb2YgdGhlIGZvcmVpZ24gcGFydGl0aW9ucyBlcnJvcnMgb3V0CiBD UkVBVEUgRk9SRUlHTiBUQUJMRSBhc3luY19wX2Jyb2tlbiBQQVJUSVRJT04gT0YgYXN5bmNfcHQg Rk9SIFZBTFVFUyBGUk9NICgxMDAwMCkgVE8gKDEwMDAxKQogICBTRVJWRVIgbG9vcGJhY2sgT1BU SU9OUyAodGFibGVfbmFtZSAnbm9uX2V4aXN0ZW50X3RhYmxlJyk7CkBAIC0xMTYwNCw2ICsxMTY0 NCw3NiBAQCBDT1BZIGFzeW5jX3B0IFRPIHN0ZG91dDsgLS1lcnJvcgogRVJST1I6ICBjYW5ub3Qg Y29weSBmcm9tIGZvcmVpZ24gdGFibGUgImFzeW5jX3AxIgogREVUQUlMOiAgUGFydGl0aW9uICJh c3luY19wMSIgaXMgYSBmb3JlaWduIHRhYmxlIGluIHBhcnRpdGlvbmVkIHRhYmxlICJhc3luY19w dCIKIEhJTlQ6ICBUcnkgdGhlIENPUFkgKFNFTEVDVCAuLi4pIFRPIHZhcmlhbnQuCistLSBUZXN0 IE1lcmdlIEFwcGVuZAorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJP TSBhc3luY19wdCBXSEVSRSBiID09PSA1MDUgT1JERVIgQlkgYiwgYTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgQXBwZW5kCisgICBTb3J0IEtleTogYXN5bmNf cHQuYiwgYXN5bmNfcHQuYQorICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5 bmNfcDEgYXN5bmNfcHRfMQorICAgICAgICAgT3V0cHV0OiBhc3luY19wdF8xLmEsIGFzeW5jX3B0 XzEuYiwgYXN5bmNfcHRfMS5jCisgICAgICAgICBGaWx0ZXI6IChhc3luY19wdF8xLmIgPT09IDUw NSkKKyAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBhLCBiLCBjIEZST00gcHVibGljLmJhc2Vf dGJsMSBPUkRFUiBCWSBiIEFTQyBOVUxMUyBMQVNULCBhIEFTQyBOVUxMUyBMQVNUCisgICAtPiAg QXN5bmMgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5hc3luY19wMiBhc3luY19wdF8yCisgICAgICAg ICBPdXRwdXQ6IGFzeW5jX3B0XzIuYSwgYXN5bmNfcHRfMi5iLCBhc3luY19wdF8yLmMKKyAgICAg ICAgIEZpbHRlcjogKGFzeW5jX3B0XzIuYiA9PT0gNTA1KQorICAgICAgICAgUmVtb3RlIFNRTDog U0VMRUNUIGEsIGIsIGMgRlJPTSBwdWJsaWMuYmFzZV90YmwyIE9SREVSIEJZIGIgQVNDIE5VTExT IExBU1QsIGEgQVNDIE5VTExTIExBU1QKKyAgIC0+ICBBc3luYyBGb3JlaWduIFNjYW4gb24gcHVi bGljLmFzeW5jX3AzIGFzeW5jX3B0XzMKKyAgICAgICAgIE91dHB1dDogYXN5bmNfcHRfMy5hLCBh c3luY19wdF8zLmIsIGFzeW5jX3B0XzMuYworICAgICAgICAgRmlsdGVyOiAoYXN5bmNfcHRfMy5i ID09PSA1MDUpCisgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiwgYyBGUk9NIHB1Ymxp Yy5iYXNlX3RibDMgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVCwgYSBBU0MgTlVMTFMgTEFTVAor KDE0IHJvd3MpCisKK1NFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1IE9SREVS IEJZIGIsIGE7CisgIGEgICB8ICBiICB8ICBjICAgCistLS0tLS0rLS0tLS0rLS0tLS0tCisgMTUw NSB8IDUwNSB8IDA1MDUKKyAyNTA1IHwgNTA1IHwgMDUwNQorIDM1MDUgfCA1MDUgfCAwNTA1Ciso MyByb3dzKQorCistLSBUZXN0IGFzeW5jIE1lcmdlIEFwcGVuZCByZXNjYW4KK0VYUExBSU4gKFZF UkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVAorCUFSUkFZKFNFTEVDVCBmLmkgRlJPTSAoU0VMRUNU IGIgKyBnLmkgRlJPTSBhc3luY19wdCBXSEVSRSBhID4gZy5pIE9SREVSIEJZIGIpIGYoaSkgT1JE RVIgQlkgZi5pIExJTUlUIDEwKQorRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMykgZyhpKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBGdW5jdGlvbiBTY2FuIG9uIHBnX2Nh dGFsb2cuZ2VuZXJhdGVfc2VyaWVzIGcKKyAgIE91dHB1dDogQVJSQVkoU3ViUGxhbiBhcnJheV8x KQorICAgRnVuY3Rpb24gQ2FsbDogZ2VuZXJhdGVfc2VyaWVzKDEsIDMpCisgICBTdWJQbGFuIGFy cmF5XzEKKyAgICAgLT4gIExpbWl0CisgICAgICAgICAgIE91dHB1dDogZi5pCisgICAgICAgICAg IC0+ICBTb3J0CisgICAgICAgICAgICAgICAgIE91dHB1dDogZi5pCisgICAgICAgICAgICAgICAg IFNvcnQgS2V5OiBmLmkKKyAgICAgICAgICAgICAgICAgLT4gIFN1YnF1ZXJ5IFNjYW4gb24gZgor ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IGYuaQorICAgICAgICAgICAgICAgICAgICAg ICAtPiAgTWVyZ2UgQXBwZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5 OiBhc3luY19wdC5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBBc3luYyBGb3Jl aWduIFNjYW4gb24gcHVibGljLmFzeW5jX3AxIGFzeW5jX3B0XzEKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiAoYXN5bmNfcHRfMS5iICsgZy5pKSwgYXN5bmNfcHRf MS5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVD VCBiIEZST00gcHVibGljLmJhc2VfdGJsMSBXSEVSRSAoKGEgPiAkMTo6aW50ZWdlcikpIE9SREVS IEJZIGIgQVNDIE5VTExTIExBU1QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEFz eW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDIgYXN5bmNfcHRfMgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IChhc3luY19wdF8yLmIgKyBnLmkpLCBh c3luY19wdF8yLmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3RlIFNR TDogU0VMRUNUIGIgRlJPTSBwdWJsaWMuYmFzZV90YmwyIFdIRVJFICgoYSA+ICQxOjppbnRlZ2Vy KSkgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5hc3luY19wMyBhc3luY19wdF8zCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogKGFzeW5jX3B0XzMuYiAr IGcuaSksIGFzeW5jX3B0XzMuYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS ZW1vdGUgU1FMOiBTRUxFQ1QgYiBGUk9NIHB1YmxpYy5iYXNlX3RibDMgV0hFUkUgKChhID4gJDE6 OmludGVnZXIpKSBPUkRFUiBCWSBiIEFTQyBOVUxMUyBMQVNUCisoMjIgcm93cykKKworU0VMRUNU CisJQVJSQVkoU0VMRUNUIGYuaSBGUk9NIChTRUxFQ1QgYiArIGcuaSBGUk9NIGFzeW5jX3B0IFdI RVJFIGEgPiBnLmkgT1JERVIgQlkgYikgZihpKSBPUkRFUiBCWSBmLmkgTElNSVQgMTApCitGUk9N IGdlbmVyYXRlX3NlcmllcygxLCAzKSBnKGkpOworICAgICAgICAgICBhcnJheSAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB7MSwxLDEsNiw2LDYsMTEsMTEsMTEsMTZ9 CisgezIsMiwyLDcsNyw3LDEyLDEyLDEyLDE3fQorIHszLDMsMyw4LDgsOCwxMywxMywxMywxOH0K KygzIHJvd3MpCisKIERST1AgRk9SRUlHTiBUQUJMRSBhc3luY19wMzsKIERST1AgVEFCTEUgYmFz ZV90YmwzOwogLS0gQ2hlY2sgY2FzZSB3aGVyZSB0aGUgcGFydGl0aW9uZWQgdGFibGUgaGFzIGxv Y2FsL3JlbW90ZSBwYXJ0aXRpb25zCkBAIC0xMTYzOSw2ICsxMTc0OSwzNyBAQCBTRUxFQ1QgKiBG Uk9NIHJlc3VsdF90YmwgT1JERVIgQlkgYTsKICgzIHJvd3MpCiAKIERFTEVURSBGUk9NIHJlc3Vs dF90Ymw7CistLSBUZXN0IE1lcmdlIEFwcGVuZAorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZG KQorU0VMRUNUICogRlJPTSBhc3luY19wdCBXSEVSRSBiID09PSA1MDUgT1JERVIgQlkgYiwgYTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgQXBwZW5kCisgICBT b3J0IEtleTogYXN5bmNfcHQuYiwgYXN5bmNfcHQuYQorICAgLT4gIEFzeW5jIEZvcmVpZ24gU2Nh biBvbiBwdWJsaWMuYXN5bmNfcDEgYXN5bmNfcHRfMQorICAgICAgICAgT3V0cHV0OiBhc3luY19w dF8xLmEsIGFzeW5jX3B0XzEuYiwgYXN5bmNfcHRfMS5jCisgICAgICAgICBGaWx0ZXI6IChhc3lu Y19wdF8xLmIgPT09IDUwNSkKKyAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBhLCBiLCBjIEZS T00gcHVibGljLmJhc2VfdGJsMSBPUkRFUiBCWSBiIEFTQyBOVUxMUyBMQVNULCBhIEFTQyBOVUxM UyBMQVNUCisgICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5hc3luY19wMiBhc3lu Y19wdF8yCisgICAgICAgICBPdXRwdXQ6IGFzeW5jX3B0XzIuYSwgYXN5bmNfcHRfMi5iLCBhc3lu Y19wdF8yLmMKKyAgICAgICAgIEZpbHRlcjogKGFzeW5jX3B0XzIuYiA9PT0gNTA1KQorICAgICAg ICAgUmVtb3RlIFNRTDogU0VMRUNUIGEsIGIsIGMgRlJPTSBwdWJsaWMuYmFzZV90YmwyIE9SREVS IEJZIGIgQVNDIE5VTExTIExBU1QsIGEgQVNDIE5VTExTIExBU1QKKyAgIC0+ICBTb3J0CisgICAg ICAgICBPdXRwdXQ6IGFzeW5jX3B0XzMuYSwgYXN5bmNfcHRfMy5iLCBhc3luY19wdF8zLmMKKyAg ICAgICAgIFNvcnQgS2V5OiBhc3luY19wdF8zLmIsIGFzeW5jX3B0XzMuYQorICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB1YmxpYy5hc3luY19wMyBhc3luY19wdF8zCisgICAgICAgICAgICAgICBP dXRwdXQ6IGFzeW5jX3B0XzMuYSwgYXN5bmNfcHRfMy5iLCBhc3luY19wdF8zLmMKKyAgICAgICAg ICAgICAgIEZpbHRlcjogKGFzeW5jX3B0XzMuYiA9PT0gNTA1KQorKDE2IHJvd3MpCisKK1NFTEVD VCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1IE9SREVSIEJZIGIsIGE7CisgIGEgICB8 ICBiICB8ICBjICAgCistLS0tLS0rLS0tLS0rLS0tLS0tCisgMTUwNSB8IDUwNSB8IDA1MDUKKyAy NTA1IHwgNTA1IHwgMDUwNQorIDM1MDUgfCA1MDUgfCAwNTA1CisoMyByb3dzKQorCiAtLSBwYXJ0 aXRpb253aXNlIGpvaW5zCiBTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbiBUTyB0cnVlOwog Q1JFQVRFIFRBQkxFIGpvaW5fdGJsIChhMSBpbnQsIGIxIGludCwgYzEgdGV4dCwgYTIgaW50LCBi MiBpbnQsIGMyIHRleHQpOwpAQCAtMTI0MjEsNiArMTI1NjIsMTUzIEBAIFNFTEVDVCBhIEZST00g YmFzZV90YmwgV0hFUkUgKGEsIHJhbmRvbSgpID4gMCkgSU4gKFNFTEVDVCBhLCByYW5kb20oKSA+ IDAgRlJPTSBmCiBEUk9QIEZPUkVJR04gVEFCTEUgZm9yZWlnbl90YmwgQ0FTQ0FERTsKIE5PVElD RTogIGRyb3AgY2FzY2FkZXMgdG8gZm9yZWlnbiB0YWJsZSBmb3JlaWduX3RibDIKIERST1AgVEFC TEUgYmFzZV90Ymw7CistLSBUZXN0IGFzeW5jIE1lcmdlIEFwcGVuZAorQ1JFQVRFIFRBQkxFIGRp c3RyMSAoaSBpbnQsIGogaW50LCBrIHRleHQpIFBBUlRJVElPTiBCWSBIQVNIIChpKTsKK0NSRUFU RSBUQUJMRSBiYXNlMSAoaSBpbnQsIGogaW50LCBrIHRleHQpOworQ1JFQVRFIFRBQkxFIGJhc2Uy IChpIGludCwgaiBpbnQsIGsgdGV4dCk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBkaXN0cjFfcDEg UEFSVElUSU9OIE9GIGRpc3RyMSBGT1IgVkFMVUVTIFdJVEggKE1PRFVMVVMgMiwgUkVNQUlOREVS IDApCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAnYmFzZTEnKTsKK0NSRUFU RSBGT1JFSUdOIFRBQkxFIGRpc3RyMV9wMiBQQVJUSVRJT04gT0YgZGlzdHIxIEZPUiBWQUxVRVMg V0lUSCAoTU9EVUxVUyAyLCBSRU1BSU5ERVIgMSkKK1NFUlZFUiBsb29wYmFjayBPUFRJT05TICh0 YWJsZV9uYW1lICdiYXNlMicpOworQ1JFQVRFIFRBQkxFIGRpc3RyMiAoaSBpbnQsIGogaW50LCBr IHRleHQpIFBBUlRJVElPTiBCWSBIQVNIIChpKTsKK0NSRUFURSBUQUJMRSBiYXNlMyAoaSBpbnQs IGogaW50LCBrIHRleHQpOworQ1JFQVRFIFRBQkxFIGJhc2U0IChpIGludCwgaiBpbnQsIGsgdGV4 dCk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBkaXN0cjJfcDEgUEFSVElUSU9OIE9GIGRpc3RyMiBG T1IgVkFMVUVTIFdJVEggKE1PRFVMVVMgMiwgUkVNQUlOREVSIDApCitTRVJWRVIgbG9vcGJhY2sg T1BUSU9OUyAodGFibGVfbmFtZSAnYmFzZTMnKTsKK0NSRUFURSBGT1JFSUdOIFRBQkxFIGRpc3Ry Ml9wMiBQQVJUSVRJT04gT0YgZGlzdHIyIEZPUiBWQUxVRVMgV0lUSCAoTU9EVUxVUyAyLCBSRU1B SU5ERVIgMSkKK1NFUlZFUiBsb29wYmFjayBPUFRJT05TICh0YWJsZV9uYW1lICdiYXNlNCcpOwor SU5TRVJUIElOVE8gZGlzdHIxCitTRUxFQ1QgaSwgaSoxMCwgJ2RhdGFfJyB8fCBpIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsIDEwMDApIGk7CitJTlNFUlQgSU5UTyBkaXN0cjIKK1NFTEVDVCBpLCBp KjEwLCAnZGF0YV8nIHx8IGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKSBpOworQU5BTFla RSBkaXN0cjFfcDE7CitBTkFMWVpFIGRpc3RyMV9wMjsKK0FOQUxZWkUgZGlzdHIyX3AxOworQU5B TFlaRSBkaXN0cjJfcDI7CitTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbiBUTyBPTjsKKy0t IFRlc3Qgam9pbnMgd2l0aCBhc3luYyBNZXJnZSBBcHBlbmQKK0VYUExBSU4gKFZFUkJPU0UsIENP U1RTIE9GRikKK1NFTEVDVCAqIEZST00gZGlzdHIxLCBkaXN0cjIgV0hFUkUgZGlzdHIxLmk9ZGlz dHIyLmkgQU5EIGRpc3RyMi5qID4gOTAgYW5kIGRpc3RyMi5rIGxpa2UgJ2RhdGElJworT1JERVIg QlkgZGlzdHIyLmkgTElNSVQgMTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTGltaXQK KyAgIE91dHB1dDogZGlzdHIxLmksIGRpc3RyMS5qLCBkaXN0cjEuaywgZGlzdHIyLmksIGRpc3Ry Mi5qLCBkaXN0cjIuaworICAgLT4gIE1lcmdlIEFwcGVuZAorICAgICAgICAgU29ydCBLZXk6IGRp c3RyMS5pCisgICAgICAgICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuCisgICAgICAgICAgICAgICBP dXRwdXQ6IGRpc3RyMV8xLmksIGRpc3RyMV8xLmosIGRpc3RyMV8xLmssIGRpc3RyMl8xLmksIGRp c3RyMl8xLmosIGRpc3RyMl8xLmsKKyAgICAgICAgICAgICAgIFJlbGF0aW9uczogKHB1YmxpYy5k aXN0cjFfcDEgZGlzdHIxXzEpIElOTkVSIEpPSU4gKHB1YmxpYy5kaXN0cjJfcDEgZGlzdHIyXzEp CisgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgcjMuaSwgcjMuaiwgcjMuaywgcjUu aSwgcjUuaiwgcjUuayBGUk9NIChwdWJsaWMuYmFzZTEgcjMgSU5ORVIgSk9JTiBwdWJsaWMuYmFz ZTMgcjUgT04gKCgocjMuaSA9IHI1LmkpKSBBTkQgKChyNS5qID4gOTApKSBBTkQgKChyNS5rIH5+ ICdkYXRhJScpKSkpIE9SREVSIEJZIHIzLmkgQVNDIE5VTExTIExBU1QKKyAgICAgICAgIC0+ICBB c3luYyBGb3JlaWduIFNjYW4KKyAgICAgICAgICAgICAgIE91dHB1dDogZGlzdHIxXzIuaSwgZGlz dHIxXzIuaiwgZGlzdHIxXzIuaywgZGlzdHIyXzIuaSwgZGlzdHIyXzIuaiwgZGlzdHIyXzIuawor ICAgICAgICAgICAgICAgUmVsYXRpb25zOiAocHVibGljLmRpc3RyMV9wMiBkaXN0cjFfMikgSU5O RVIgSk9JTiAocHVibGljLmRpc3RyMl9wMiBkaXN0cjJfMikKKyAgICAgICAgICAgICAgIFJlbW90 ZSBTUUw6IFNFTEVDVCByNC5pLCByNC5qLCByNC5rLCByNi5pLCByNi5qLCByNi5rIEZST00gKHB1 YmxpYy5iYXNlMiByNCBJTk5FUiBKT0lOIHB1YmxpYy5iYXNlNCByNiBPTiAoKChyNC5pID0gcjYu aSkpIEFORCAoKHI2LmogPiA5MCkpIEFORCAoKHI2Lmsgfn4gJ2RhdGElJykpKSkgT1JERVIgQlkg cjQuaSBBU0MgTlVMTFMgTEFTVAorKDEyIHJvd3MpCisKK1NFTEVDVCAqIEZST00gZGlzdHIxLCBk aXN0cjIgV0hFUkUgZGlzdHIxLmk9ZGlzdHIyLmkgQU5EIGRpc3RyMi5qID4gOTAgYW5kIGRpc3Ry Mi5rIGxpa2UgJ2RhdGElJworT1JERVIgQlkgZGlzdHIyLmkgTElNSVQgMTA7CisgaSAgfCAgaiAg fCAgICBrICAgIHwgaSAgfCAgaiAgfCAgICBrICAgIAorLS0tLSstLS0tLSstLS0tLS0tLS0rLS0t LSstLS0tLSstLS0tLS0tLS0KKyAxMCB8IDEwMCB8IGRhdGFfMTAgfCAxMCB8IDEwMCB8IGRhdGFf MTAKKyAxMSB8IDExMCB8IGRhdGFfMTEgfCAxMSB8IDExMCB8IGRhdGFfMTEKKyAxMiB8IDEyMCB8 IGRhdGFfMTIgfCAxMiB8IDEyMCB8IGRhdGFfMTIKKyAxMyB8IDEzMCB8IGRhdGFfMTMgfCAxMyB8 IDEzMCB8IGRhdGFfMTMKKyAxNCB8IDE0MCB8IGRhdGFfMTQgfCAxNCB8IDE0MCB8IGRhdGFfMTQK KyAxNSB8IDE1MCB8IGRhdGFfMTUgfCAxNSB8IDE1MCB8IGRhdGFfMTUKKyAxNiB8IDE2MCB8IGRh dGFfMTYgfCAxNiB8IDE2MCB8IGRhdGFfMTYKKyAxNyB8IDE3MCB8IGRhdGFfMTcgfCAxNyB8IDE3 MCB8IGRhdGFfMTcKKyAxOCB8IDE4MCB8IGRhdGFfMTggfCAxOCB8IDE4MCB8IGRhdGFfMTgKKyAx OSB8IDE5MCB8IGRhdGFfMTkgfCAxOSB8IDE5MCB8IGRhdGFfMTkKKygxMCByb3dzKQorCitFWFBM QUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIGRpc3RyMSBMRUZUIEpPSU4g ZGlzdHIyIE9OIGRpc3RyMS5pPWRpc3RyMi5pIEFORCBkaXN0cjIuayBsaWtlICdkYXRhJScgV0hF UkUgIGRpc3RyMS5pID4gOTAKK09SREVSIEJZIGRpc3RyMS5pIExJTUlUIDIwOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgTGltaXQKKyAgIE91dHB1dDogZGlzdHIxLmksIGRpc3RyMS5q LCBkaXN0cjEuaywgZGlzdHIyLmksIGRpc3RyMi5qLCBkaXN0cjIuaworICAgLT4gIE1lcmdlIEFw cGVuZAorICAgICAgICAgU29ydCBLZXk6IGRpc3RyMS5pCisgICAgICAgICAtPiAgQXN5bmMgRm9y ZWlnbiBTY2FuCisgICAgICAgICAgICAgICBPdXRwdXQ6IGRpc3RyMV8xLmksIGRpc3RyMV8xLmos IGRpc3RyMV8xLmssIGRpc3RyMl8xLmksIGRpc3RyMl8xLmosIGRpc3RyMl8xLmsKKyAgICAgICAg ICAgICAgIFJlbGF0aW9uczogKHB1YmxpYy5kaXN0cjFfcDEgZGlzdHIxXzEpIExFRlQgSk9JTiAo cHVibGljLmRpc3RyMl9wMSBkaXN0cjJfMSkKKyAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNF TEVDVCByNC5pLCByNC5qLCByNC5rLCByNi5pLCByNi5qLCByNi5rIEZST00gKHB1YmxpYy5iYXNl MSByNCBMRUZUIEpPSU4gcHVibGljLmJhc2UzIHI2IE9OICgoKHI0LmkgPSByNi5pKSkgQU5EICgo cjYuayB+fiAnZGF0YSUnKSkpKSBXSEVSRSAoKHI0LmkgPiA5MCkpIE9SREVSIEJZIHI0LmkgQVND IE5VTExTIExBU1QKKyAgICAgICAgIC0+ICBBc3luYyBGb3JlaWduIFNjYW4KKyAgICAgICAgICAg ICAgIE91dHB1dDogZGlzdHIxXzIuaSwgZGlzdHIxXzIuaiwgZGlzdHIxXzIuaywgZGlzdHIyXzIu aSwgZGlzdHIyXzIuaiwgZGlzdHIyXzIuaworICAgICAgICAgICAgICAgUmVsYXRpb25zOiAocHVi bGljLmRpc3RyMV9wMiBkaXN0cjFfMikgTEVGVCBKT0lOIChwdWJsaWMuZGlzdHIyX3AyIGRpc3Ry Ml8yKQorICAgICAgICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIHI1LmksIHI1LmosIHI1Lmss IHI3LmksIHI3LmosIHI3LmsgRlJPTSAocHVibGljLmJhc2UyIHI1IExFRlQgSk9JTiBwdWJsaWMu YmFzZTQgcjcgT04gKCgocjUuaSA9IHI3LmkpKSBBTkQgKChyNy5rIH5+ICdkYXRhJScpKSkpIFdI RVJFICgocjUuaSA+IDkwKSkgT1JERVIgQlkgcjUuaSBBU0MgTlVMTFMgTEFTVAorKDEyIHJvd3Mp CisKK1NFTEVDVCAqIEZST00gZGlzdHIxIExFRlQgSk9JTiBkaXN0cjIgT04gIGRpc3RyMS5pPWRp c3RyMi5pIEFORCBkaXN0cjIuayBsaWtlICdkYXRhJScgV0hFUkUgZGlzdHIxLmkgPiA5MAorT1JE RVIgQlkgZGlzdHIxLmkgTElNSVQgMjA7CisgIGkgIHwgIGogICB8ICAgIGsgICAgIHwgIGkgIHwg IGogICB8ICAgIGsgICAgIAorLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tKy0t LS0tLS0tLS0KKyAgOTEgfCAgOTEwIHwgZGF0YV85MSAgfCAgOTEgfCAgOTEwIHwgZGF0YV85MQor ICA5MiB8ICA5MjAgfCBkYXRhXzkyICB8ICA5MiB8ICA5MjAgfCBkYXRhXzkyCisgIDkzIHwgIDkz MCB8IGRhdGFfOTMgIHwgIDkzIHwgIDkzMCB8IGRhdGFfOTMKKyAgOTQgfCAgOTQwIHwgZGF0YV85 NCAgfCAgOTQgfCAgOTQwIHwgZGF0YV85NAorICA5NSB8ICA5NTAgfCBkYXRhXzk1ICB8ICA5NSB8 ICA5NTAgfCBkYXRhXzk1CisgIDk2IHwgIDk2MCB8IGRhdGFfOTYgIHwgIDk2IHwgIDk2MCB8IGRh dGFfOTYKKyAgOTcgfCAgOTcwIHwgZGF0YV85NyAgfCAgOTcgfCAgOTcwIHwgZGF0YV85NworICA5 OCB8ICA5ODAgfCBkYXRhXzk4ICB8ICA5OCB8ICA5ODAgfCBkYXRhXzk4CisgIDk5IHwgIDk5MCB8 IGRhdGFfOTkgIHwgIDk5IHwgIDk5MCB8IGRhdGFfOTkKKyAxMDAgfCAxMDAwIHwgZGF0YV8xMDAg fCAxMDAgfCAxMDAwIHwgZGF0YV8xMDAKKyAxMDEgfCAxMDEwIHwgZGF0YV8xMDEgfCAgICAgfCAg ICAgIHwgCisgMTAyIHwgMTAyMCB8IGRhdGFfMTAyIHwgICAgIHwgICAgICB8IAorIDEwMyB8IDEw MzAgfCBkYXRhXzEwMyB8ICAgICB8ICAgICAgfCAKKyAxMDQgfCAxMDQwIHwgZGF0YV8xMDQgfCAg ICAgfCAgICAgIHwgCisgMTA1IHwgMTA1MCB8IGRhdGFfMTA1IHwgICAgIHwgICAgICB8IAorIDEw NiB8IDEwNjAgfCBkYXRhXzEwNiB8ICAgICB8ICAgICAgfCAKKyAxMDcgfCAxMDcwIHwgZGF0YV8x MDcgfCAgICAgfCAgICAgIHwgCisgMTA4IHwgMTA4MCB8IGRhdGFfMTA4IHwgICAgIHwgICAgICB8 IAorIDEwOSB8IDEwOTAgfCBkYXRhXzEwOSB8ICAgICB8ICAgICAgfCAKKyAxMTAgfCAxMTAwIHwg ZGF0YV8xMTAgfCAgICAgfCAgICAgIHwgCisoMjAgcm93cykKKworLS0gVGVzdCBwcnVuaW5nIHdp dGggYXN5bmMgTWVyZ2UgQXBwZW5kCitERUxFVEUgRlJPTSBkaXN0cjI7CitJTlNFUlQgSU5UTyBk aXN0cjIKK1NFTEVDVCBpJTEwLCBpKjEwLCAnZGF0YV8nIHx8IGkgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwgMTAwMCkgaTsKK0RFQUxMT0NBVEUgQUxMOworU0VUIHBsYW5fY2FjaGVfbW9kZSBUTyBm b3JjZV9nZW5lcmljX3BsYW47CitQUkVQQVJFIGFzeW5jX3B0X3F1ZXJ5IChpbnQsIGludCkgQVMK KyAgU0VMRUNUICogRlJPTSBkaXN0cjIgV0hFUkUgaSA9IEFOWShBUlJBWVskMSwgJDJdKQorICBP UkRFUiBCWSBpLGoKKyAgTElNSVQgMTA7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCisJ RVhFQ1VURSBhc3luY19wdF9xdWVyeSgxLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgTGltaXQKKyAgIE91dHB1dDogZGlzdHIyLmksIGRpc3RyMi5qLCBkaXN0cjIuaworICAg LT4gIE1lcmdlIEFwcGVuZAorICAgICAgICAgU29ydCBLZXk6IGRpc3RyMi5pLCBkaXN0cjIuagor ICAgICAgICAgU3VicGxhbnMgUmVtb3ZlZDogMQorICAgICAgICAgLT4gIEFzeW5jIEZvcmVpZ24g U2NhbiBvbiBwdWJsaWMuZGlzdHIyX3AxIGRpc3RyMl8xCisgICAgICAgICAgICAgICBPdXRwdXQ6 IGRpc3RyMl8xLmksIGRpc3RyMl8xLmosIGRpc3RyMl8xLmsKKyAgICAgICAgICAgICAgIFJlbW90 ZSBTUUw6IFNFTEVDVCBpLCBqLCBrIEZST00gcHVibGljLmJhc2UzIFdIRVJFICgoaSA9IEFOWSAo QVJSQVlbJDE6OmludGVnZXIsICQyOjppbnRlZ2VyXSkpKSBPUkRFUiBCWSBpIEFTQyBOVUxMUyBM QVNULCBqIEFTQyBOVUxMUyBMQVNUCisoOCByb3dzKQorCitFWEVDVVRFIGFzeW5jX3B0X3F1ZXJ5 KDEsIDEpOworIGkgfCAgaiAgfCAgICBrICAgIAorLS0tKy0tLS0tKy0tLS0tLS0tLQorIDEgfCAg MTAgfCBkYXRhXzEKKyAxIHwgMTEwIHwgZGF0YV8xMQorIDEgfCAyMTAgfCBkYXRhXzIxCisgMSB8 IDMxMCB8IGRhdGFfMzEKKyAxIHwgNDEwIHwgZGF0YV80MQorIDEgfCA1MTAgfCBkYXRhXzUxCisg MSB8IDYxMCB8IGRhdGFfNjEKKyAxIHwgNzEwIHwgZGF0YV83MQorIDEgfCA4MTAgfCBkYXRhXzgx CisgMSB8IDkxMCB8IGRhdGFfOTEKKygxMCByb3dzKQorCitSRVNFVCBwbGFuX2NhY2hlX21vZGU7 CitSRVNFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9qb2luOworRFJPUCBUQUJMRSBkaXN0cjEsIGRp c3RyMiwgYmFzZTEsIGJhc2UyLCBiYXNlMywgYmFzZTQ7CiBBTFRFUiBTRVJWRVIgbG9vcGJhY2sg T1BUSU9OUyAoRFJPUCBhc3luY19jYXBhYmxlKTsKIEFMVEVSIFNFUlZFUiBsb29wYmFjazIgT1BU SU9OUyAoRFJPUCBhc3luY19jYXBhYmxlKTsKIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcv cG9zdGdyZXNfZmR3LmMKaW5kZXggNWUxNzhjMjFiMzkuLmJkNTUxYTFkYjcyIDEwMDY0NAotLS0g YS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYworKysgYi9jb250cmliL3Bvc3Rn cmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwpAQCAtNzIxMywxMiArNzIxMywxNiBAQCBwb3N0Z3Jlc0Zv cmVpZ25Bc3luY0NvbmZpZ3VyZVdhaXQoQXN5bmNSZXF1ZXN0ICphcmVxKQogCUZvcmVpZ25TY2Fu U3RhdGUgKm5vZGUgPSAoRm9yZWlnblNjYW5TdGF0ZSAqKSBhcmVxLT5yZXF1ZXN0ZWU7CiAJUGdG ZHdTY2FuU3RhdGUgKmZzc3RhdGUgPSAoUGdGZHdTY2FuU3RhdGUgKikgbm9kZS0+ZmR3X3N0YXRl OwogCUFzeW5jUmVxdWVzdCAqcGVuZGluZ0FyZXEgPSBmc3N0YXRlLT5jb25uX3N0YXRlLT5wZW5k aW5nQXJlcTsKLQlBcHBlbmRTdGF0ZSAqcmVxdWVzdG9yID0gKEFwcGVuZFN0YXRlICopIGFyZXEt PnJlcXVlc3RvcjsKLQlXYWl0RXZlbnRTZXQgKnNldCA9IHJlcXVlc3Rvci0+YXNfZXZlbnRzZXQ7 CisJUGxhblN0YXRlICAqcmVxdWVzdG9yID0gYXJlcS0+cmVxdWVzdG9yOworCVdhaXRFdmVudFNl dCAqc2V0OworCUJpdG1hcHNldCAgKm5lZWRyZXF1ZXN0OwogCiAJLyogVGhpcyBzaG91bGQgbm90 IGJlIGNhbGxlZCB1bmxlc3MgY2FsbGJhY2tfcGVuZGluZyAqLwogCUFzc2VydChhcmVxLT5jYWxs YmFja19wZW5kaW5nKTsKIAorCXNldCA9IEdldEFwcGVuZEV2ZW50U2V0KHJlcXVlc3Rvcik7CisJ bmVlZHJlcXVlc3QgPSBHZXROZWVkUmVxdWVzdChyZXF1ZXN0b3IpOworCiAJLyoKIAkgKiBJZiBw cm9jZXNzX3BlbmRpbmdfcmVxdWVzdCgpIGhhcyBiZWVuIGludm9rZWQgb24gdGhlIGdpdmVuIHJl cXVlc3QKIAkgKiBiZWZvcmUgd2UgZ2V0IGhlcmUsIHdlIG1pZ2h0IGhhdmUgc29tZSB0dXBsZXMg YWxyZWFkeTsgaW4gd2hpY2ggY2FzZQpAQCAtNzI1Niw3ICs3MjYwLDcgQEAgcG9zdGdyZXNGb3Jl aWduQXN5bmNDb25maWd1cmVXYWl0KEFzeW5jUmVxdWVzdCAqYXJlcSkKIAkJICogYmVsb3csIGJl Y2F1c2Ugd2UgbWlnaHQgb3RoZXJ3aXNlIGVuZCB1cCB3aXRoIG5vIGNvbmZpZ3VyZWQgZXZlbnRz CiAJCSAqIG90aGVyIHRoYW4gdGhlIHBvc3RtYXN0ZXIgZGVhdGggZXZlbnQuCiAJCSAqLwotCQlp ZiAoIWJtc19pc19lbXB0eShyZXF1ZXN0b3ItPmFzX25lZWRyZXF1ZXN0KSkKKwkJaWYgKCFibXNf aXNfZW1wdHkobmVlZHJlcXVlc3QpKQogCQkJcmV0dXJuOwogCQlpZiAoR2V0TnVtUmVnaXN0ZXJl ZFdhaXRFdmVudHMoc2V0KSA+IDEpCiAJCQlyZXR1cm47CmRpZmYgLS1naXQgYS9jb250cmliL3Bv c3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbCBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Nx bC9wb3N0Z3Jlc19mZHcuc3FsCmluZGV4IDlhOGY5ZTI4MTM1Li5hYTM4OGNiMDI3ZiAxMDA2NDQK LS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwKKysrIGIvY29u dHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwKQEAgLTM5MjEsNiArMzkyMSwx MSBAQCBJTlNFUlQgSU5UTyByZXN1bHRfdGJsIFNFTEVDVCBhLCBiLCAnQUFBJyB8fCBjIEZST00g YXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1OwogU0VMRUNUICogRlJPTSByZXN1bHRfdGJsIE9SREVS IEJZIGE7CiBERUxFVEUgRlJPTSByZXN1bHRfdGJsOwogCistLSBUZXN0IE1lcmdlIEFwcGVuZAor RVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBhc3luY19wdCBXSEVS RSBiICUgMTAwID0gMCBPUkRFUiBCWSBiLCBhOworU0VMRUNUICogRlJPTSBhc3luY19wdCBXSEVS RSBiICUgMTAwID0gMCBPUkRFUiBCWSBiLCBhOworCiAtLSBUZXN0IGVycm9yIGhhbmRsaW5nLCBp ZiBhY2Nlc3Npbmcgb25lIG9mIHRoZSBmb3JlaWduIHBhcnRpdGlvbnMgZXJyb3JzIG91dAogQ1JF QVRFIEZPUkVJR04gVEFCTEUgYXN5bmNfcF9icm9rZW4gUEFSVElUSU9OIE9GIGFzeW5jX3B0IEZP UiBWQUxVRVMgRlJPTSAoMTAwMDApIFRPICgxMDAwMSkKICAgU0VSVkVSIGxvb3BiYWNrIE9QVElP TlMgKHRhYmxlX25hbWUgJ25vbl9leGlzdGVudF90YWJsZScpOwpAQCAtMzk0NCw2ICszOTQ5LDIw IEBAIERFTEVURSBGUk9NIHJlc3VsdF90Ymw7CiAtLSBUZXN0IENPUFkgVE8gd2hlbiBmb3JlaWdu IHRhYmxlIGlzIHBhcnRpdGlvbgogQ09QWSBhc3luY19wdCBUTyBzdGRvdXQ7IC0tZXJyb3IKIAor LS0gVGVzdCBNZXJnZSBBcHBlbmQKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVD VCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1IE9SREVSIEJZIGIsIGE7CitTRUxFQ1Qg KiBGUk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNSBPUkRFUiBCWSBiLCBhOworCistLSBUZXN0 IGFzeW5jIE1lcmdlIEFwcGVuZCByZXNjYW4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikK K1NFTEVDVAorCUFSUkFZKFNFTEVDVCBmLmkgRlJPTSAoU0VMRUNUIGIgKyBnLmkgRlJPTSBhc3lu Y19wdCBXSEVSRSBhID4gZy5pIE9SREVSIEJZIGIpIGYoaSkgT1JERVIgQlkgZi5pIExJTUlUIDEw KQorRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMykgZyhpKTsKK1NFTEVDVAorCUFSUkFZKFNFTEVD VCBmLmkgRlJPTSAoU0VMRUNUIGIgKyBnLmkgRlJPTSBhc3luY19wdCBXSEVSRSBhID4gZy5pIE9S REVSIEJZIGIpIGYoaSkgT1JERVIgQlkgZi5pIExJTUlUIDEwKQorRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwgMykgZyhpKTsKKwogRFJPUCBGT1JFSUdOIFRBQkxFIGFzeW5jX3AzOwogRFJPUCBUQUJM RSBiYXNlX3RibDM7CiAKQEAgLTM5NTksNiArMzk3OCwxMSBAQCBJTlNFUlQgSU5UTyByZXN1bHRf dGJsIFNFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1OwogU0VMRUNUICogRlJP TSByZXN1bHRfdGJsIE9SREVSIEJZIGE7CiBERUxFVEUgRlJPTSByZXN1bHRfdGJsOwogCistLSBU ZXN0IE1lcmdlIEFwcGVuZAorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICog RlJPTSBhc3luY19wdCBXSEVSRSBiID09PSA1MDUgT1JERVIgQlkgYiwgYTsKK1NFTEVDVCAqIEZS T00gYXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1IE9SREVSIEJZIGIsIGE7CisKIC0tIHBhcnRpdGlv bndpc2Ugam9pbnMKIFNFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9qb2luIFRPIHRydWU7CiAKQEAg LTQxOTcsNiArNDIyMSw2OSBAQCBTRUxFQ1QgYSBGUk9NIGJhc2VfdGJsIFdIRVJFIChhLCByYW5k b20oKSA+IDApIElOIChTRUxFQ1QgYSwgcmFuZG9tKCkgPiAwIEZST00gZgogRFJPUCBGT1JFSUdO IFRBQkxFIGZvcmVpZ25fdGJsIENBU0NBREU7CiBEUk9QIFRBQkxFIGJhc2VfdGJsOwogCistLSBU ZXN0IGFzeW5jIE1lcmdlIEFwcGVuZAorQ1JFQVRFIFRBQkxFIGRpc3RyMSAoaSBpbnQsIGogaW50 LCBrIHRleHQpIFBBUlRJVElPTiBCWSBIQVNIIChpKTsKK0NSRUFURSBUQUJMRSBiYXNlMSAoaSBp bnQsIGogaW50LCBrIHRleHQpOworQ1JFQVRFIFRBQkxFIGJhc2UyIChpIGludCwgaiBpbnQsIGsg dGV4dCk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBkaXN0cjFfcDEgUEFSVElUSU9OIE9GIGRpc3Ry MSBGT1IgVkFMVUVTIFdJVEggKE1PRFVMVVMgMiwgUkVNQUlOREVSIDApCitTRVJWRVIgbG9vcGJh Y2sgT1BUSU9OUyAodGFibGVfbmFtZSAnYmFzZTEnKTsKK0NSRUFURSBGT1JFSUdOIFRBQkxFIGRp c3RyMV9wMiBQQVJUSVRJT04gT0YgZGlzdHIxIEZPUiBWQUxVRVMgV0lUSCAoTU9EVUxVUyAyLCBS RU1BSU5ERVIgMSkKK1NFUlZFUiBsb29wYmFjayBPUFRJT05TICh0YWJsZV9uYW1lICdiYXNlMicp OworCitDUkVBVEUgVEFCTEUgZGlzdHIyIChpIGludCwgaiBpbnQsIGsgdGV4dCkgUEFSVElUSU9O IEJZIEhBU0ggKGkpOworQ1JFQVRFIFRBQkxFIGJhc2UzIChpIGludCwgaiBpbnQsIGsgdGV4dCk7 CitDUkVBVEUgVEFCTEUgYmFzZTQgKGkgaW50LCBqIGludCwgayB0ZXh0KTsKK0NSRUFURSBGT1JF SUdOIFRBQkxFIGRpc3RyMl9wMSBQQVJUSVRJT04gT0YgZGlzdHIyIEZPUiBWQUxVRVMgV0lUSCAo TU9EVUxVUyAyLCBSRU1BSU5ERVIgMCkKK1NFUlZFUiBsb29wYmFjayBPUFRJT05TICh0YWJsZV9u YW1lICdiYXNlMycpOworQ1JFQVRFIEZPUkVJR04gVEFCTEUgZGlzdHIyX3AyIFBBUlRJVElPTiBP RiBkaXN0cjIgRk9SIFZBTFVFUyBXSVRIIChNT0RVTFVTIDIsIFJFTUFJTkRFUiAxKQorU0VSVkVS IGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25hbWUgJ2Jhc2U0Jyk7CisKK0lOU0VSVCBJTlRPIGRp c3RyMQorU0VMRUNUIGksIGkqMTAsICdkYXRhXycgfHwgaSBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LCAxMDAwKSBpOworCitJTlNFUlQgSU5UTyBkaXN0cjIKK1NFTEVDVCBpLCBpKjEwLCAnZGF0YV8n IHx8IGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKSBpOworCitBTkFMWVpFIGRpc3RyMV9w MTsKK0FOQUxZWkUgZGlzdHIxX3AyOworQU5BTFlaRSBkaXN0cjJfcDE7CitBTkFMWVpFIGRpc3Ry Ml9wMjsKKworU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4gVE8gT047CisKKy0tIFRlc3Qg am9pbnMgd2l0aCBhc3luYyBNZXJnZSBBcHBlbmQKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9G RikKK1NFTEVDVCAqIEZST00gZGlzdHIxLCBkaXN0cjIgV0hFUkUgZGlzdHIxLmk9ZGlzdHIyLmkg QU5EIGRpc3RyMi5qID4gOTAgYW5kIGRpc3RyMi5rIGxpa2UgJ2RhdGElJworT1JERVIgQlkgZGlz dHIyLmkgTElNSVQgMTA7CitTRUxFQ1QgKiBGUk9NIGRpc3RyMSwgZGlzdHIyIFdIRVJFIGRpc3Ry MS5pPWRpc3RyMi5pIEFORCBkaXN0cjIuaiA+IDkwIGFuZCBkaXN0cjIuayBsaWtlICdkYXRhJScK K09SREVSIEJZIGRpc3RyMi5pIExJTUlUIDEwOworCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBP RkYpCitTRUxFQ1QgKiBGUk9NIGRpc3RyMSBMRUZUIEpPSU4gZGlzdHIyIE9OIGRpc3RyMS5pPWRp c3RyMi5pIEFORCBkaXN0cjIuayBsaWtlICdkYXRhJScgV0hFUkUgIGRpc3RyMS5pID4gOTAKK09S REVSIEJZIGRpc3RyMS5pIExJTUlUIDIwOworU0VMRUNUICogRlJPTSBkaXN0cjEgTEVGVCBKT0lO IGRpc3RyMiBPTiAgZGlzdHIxLmk9ZGlzdHIyLmkgQU5EIGRpc3RyMi5rIGxpa2UgJ2RhdGElJyBX SEVSRSBkaXN0cjEuaSA+IDkwCitPUkRFUiBCWSBkaXN0cjEuaSBMSU1JVCAyMDsKKworLS0gVGVz dCBwcnVuaW5nIHdpdGggYXN5bmMgTWVyZ2UgQXBwZW5kCitERUxFVEUgRlJPTSBkaXN0cjI7CitJ TlNFUlQgSU5UTyBkaXN0cjIKK1NFTEVDVCBpJTEwLCBpKjEwLCAnZGF0YV8nIHx8IGkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCkgaTsKKworREVBTExPQ0FURSBBTEw7CitTRVQgcGxhbl9j YWNoZV9tb2RlIFRPIGZvcmNlX2dlbmVyaWNfcGxhbjsKK1BSRVBBUkUgYXN5bmNfcHRfcXVlcnkg KGludCwgaW50KSBBUworICBTRUxFQ1QgKiBGUk9NIGRpc3RyMiBXSEVSRSBpID0gQU5ZKEFSUkFZ WyQxLCAkMl0pCisgIE9SREVSIEJZIGksagorICBMSU1JVCAxMDsKK0VYUExBSU4gKFZFUkJPU0Us IENPU1RTIE9GRikKKwlFWEVDVVRFIGFzeW5jX3B0X3F1ZXJ5KDEsIDEpOworRVhFQ1VURSBhc3lu Y19wdF9xdWVyeSgxLCAxKTsKK1JFU0VUIHBsYW5fY2FjaGVfbW9kZTsKKworUkVTRVQgZW5hYmxl X3BhcnRpdGlvbndpc2Vfam9pbjsKKworRFJPUCBUQUJMRSBkaXN0cjEsIGRpc3RyMiwgYmFzZTEs IGJhc2UyLCBiYXNlMywgYmFzZTQ7CisKIEFMVEVSIFNFUlZFUiBsb29wYmFjayBPUFRJT05TIChE Uk9QIGFzeW5jX2NhcGFibGUpOwogQUxURVIgU0VSVkVSIGxvb3BiYWNrMiBPUFRJT05TIChEUk9Q IGFzeW5jX2NhcGFibGUpOwogCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwg Yi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKaW5kZXggY2RmZThlMzc2ZjAuLmY3ZjdlMzNjZWU2 IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21s L2NvbmZpZy5zZ21sCkBAIC01NDczLDYgKzU0NzMsMjAgQEAgQU5ZIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5udW1fc3luYzwvcmVwbGFjZWFibGU+ICggPHJlcGxhY2VhYmxlIGNsYXNz PSIKICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJs aXN0ZW50cnkgaWQ9Imd1Yy1lbmFibGUtYXN5bmMtbWVyZ2UtYXBwZW5kIiB4cmVmbGFiZWw9ImVu YWJsZV9hc3luY19tZXJnZV9hcHBlbmQiPgorICAgICAgPHRlcm0+PHZhcm5hbWU+ZW5hYmxlX2Fz eW5jX21lcmdlX2FwcGVuZDwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQorICAgICAg PGluZGV4dGVybT4KKyAgICAgICA8cHJpbWFyeT48dmFybmFtZT5lbmFibGVfYXN5bmNfbWVyZ2Vf YXBwZW5kPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAg IDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxw YXJhPgorICAgICAgICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBxdWVyeSBwbGFubmVyJ3MgdXNl IG9mIGFzeW5jLWF3YXJlCisgICAgICAgIG1lcmdlIGFwcGVuZCBwbGFuIHR5cGVzLiBUaGUgZGVm YXVsdCBpcyA8bGl0ZXJhbD5vbjwvbGl0ZXJhbD4uCisgICAgICAgPC9wYXJhPgorICAgICAgPC9s aXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeSBpZD0i Z3VjLWVuYWJsZS1iaXRtYXBzY2FuIiB4cmVmbGFiZWw9ImVuYWJsZV9iaXRtYXBzY2FuIj4KICAg ICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9iaXRtYXBzY2FuPC92YXJuYW1lPiAoPHR5cGU+Ym9v bGVhbjwvdHlwZT4pCiAgICAgICA8aW5kZXh0ZXJtPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY0FzeW5jLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQXN5bmMuYwpp bmRleCA1ZDNjYWJlNzNlMy4uNmRjMTllYmMzNzQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNBc3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBc3luYy5j CkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY0FzeW5jLmgiCiAjaW5j bHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKICNpbmNsdWRlICJleGVjdXRvci9ub2RlQXBwZW5k LmgiCisjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmgiCiAjaW5jbHVkZSAiZXhl Y3V0b3Ivbm9kZUZvcmVpZ25zY2FuLmgiCiAKIC8qCkBAIC0xMjEsNiArMTIyLDkgQEAgRXhlY0Fz eW5jUmVzcG9uc2UoQXN5bmNSZXF1ZXN0ICphcmVxKQogCQljYXNlIFRfQXBwZW5kU3RhdGU6CiAJ CQlFeGVjQXN5bmNBcHBlbmRSZXNwb25zZShhcmVxKTsKIAkJCWJyZWFrOworCQljYXNlIFRfTWVy Z2VBcHBlbmRTdGF0ZToKKwkJCUV4ZWNBc3luY01lcmdlQXBwZW5kUmVzcG9uc2UoYXJlcSk7CisJ CQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCS8qIElmIHRoZSBub2RlIGRvZXNuJ3Qgc3VwcG9ydCBh c3luYywgY2FsbGVyIG1lc3NlZCB1cC4gKi8KIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQg bm9kZSB0eXBlOiAlZCIsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBw ZW5kLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMKaW5kZXggNzdjNGRkOWU0 YjEuLmRmYmM3YjUxMGM0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBw ZW5kLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jCkBAIC0xMTg3LDEw ICsxMTg3LDcgQEAgRXhlY0FzeW5jQXBwZW5kUmVzcG9uc2UoQXN5bmNSZXF1ZXN0ICphcmVxKQog c3RhdGljIHZvaWQKIGNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKEFwcGVuZFN0YXRlICpub2Rl KQogewotCUJpdG1hcHNldCAgKnZhbGlkX2FzeW5jcGxhbnM7Ci0KIAlBc3NlcnQobm9kZS0+YXNf dmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCk7Ci0JQXNzZXJ0KG5vZGUtPmFzX3ZhbGlkX2FzeW5j cGxhbnMgPT0gTlVMTCk7CiAKIAkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJlIGFyZSBubyB2YWxp ZCBzdWJwbGFucy4gKi8KIAlpZiAoYm1zX2lzX2VtcHR5KG5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5z KSkKQEAgLTEyMDAsMjEgKzExOTcsMTAgQEAgY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMoQXBw ZW5kU3RhdGUgKm5vZGUpCiAJCXJldHVybjsKIAl9CiAKLQkvKiBOb3RoaW5nIHRvIGRvIGlmIHRo ZXJlIGFyZSBubyB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KLQlpZiAoIWJtc19vdmVybGFwKG5v ZGUtPmFzX3ZhbGlkX3N1YnBsYW5zLCBub2RlLT5hc19hc3luY3BsYW5zKSkKLQl7CisJLyogTm8g dmFsaWQgYXN5bmMgc3VicGxhbnMgaWRlbnRpZmllZC4gKi8KKwlpZiAoIWNsYXNzaWZ5X21hdGNo aW5nX3N1YnBsYW5zX2NvbW1vbigKKwkJCQkJCQkJCQkgICAmbm9kZS0+YXNfdmFsaWRfc3VicGxh bnMsCisJCQkJCQkJCQkJICAgbm9kZS0+YXNfYXN5bmNwbGFucywKKwkJCQkJCQkJCQkgICAmbm9k ZS0+YXNfdmFsaWRfYXN5bmNwbGFucykpCiAJCW5vZGUtPmFzX25hc3luY3JlbWFpbiA9IDA7Ci0J CXJldHVybjsKLQl9Ci0KLQkvKiBHZXQgdmFsaWQgYXN5bmMgc3VicGxhbnMuICovCi0JdmFsaWRf YXN5bmNwbGFucyA9IGJtc19pbnRlcnNlY3Qobm9kZS0+YXNfYXN5bmNwbGFucywKLQkJCQkJCQkJ CSBub2RlLT5hc192YWxpZF9zdWJwbGFucyk7Ci0KLQkvKiBBZGp1c3QgdGhlIHZhbGlkIHN1YnBs YW5zIHRvIGNvbnRhaW4gc3luYyBzdWJwbGFucyBvbmx5LiAqLwotCW5vZGUtPmFzX3ZhbGlkX3N1 YnBsYW5zID0gYm1zX2RlbF9tZW1iZXJzKG5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zLAotCQkJCQkJ CQkJCQkgIHZhbGlkX2FzeW5jcGxhbnMpOwotCi0JLyogU2F2ZSB2YWxpZCBhc3luYyBzdWJwbGFu cy4gKi8KLQlub2RlLT5hc192YWxpZF9hc3luY3BsYW5zID0gdmFsaWRfYXN5bmNwbGFuczsKIH0K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMKaW5kZXggMzAwYmNkNWNmMzMuLmYx YzI2N2ViOWViIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBl bmQuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYwpAQCAtMzks MTAgKzM5LDE1IEBACiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAogI2luY2x1ZGUgImV4ZWN1dG9y L2V4ZWN1dG9yLmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY0FzeW5jLmgiCiAjaW5jbHVkZSAi ZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVNZXJnZUFw cGVuZC5oIgogI2luY2x1ZGUgImxpYi9iaW5hcnloZWFwLmgiCiAjaW5jbHVkZSAibWlzY2FkbWlu LmgiCisjaW5jbHVkZSAic3RvcmFnZS9sYXRjaC5oIgorI2luY2x1ZGUgInV0aWxzL3dhaXRfZXZl bnQuaCIKKworI2RlZmluZSBFVkVOVF9CVUZGRVJfU0laRSAgICAgICAgICAgICAgICAgICAgIDE2 CiAKIC8qCiAgKiBXZSBoYXZlIG9uZSBzbG90IGZvciBlYWNoIGl0ZW0gaW4gdGhlIGhlYXAgYXJy YXkuICBXZSB1c2UgU2xvdE51bWJlcgpAQCAtNTQsNiArNTksMTIgQEAgdHlwZWRlZiBpbnQzMiBT bG90TnVtYmVyOwogc3RhdGljIFR1cGxlVGFibGVTbG90ICpFeGVjTWVyZ2VBcHBlbmQoUGxhblN0 YXRlICpwc3RhdGUpOwogc3RhdGljIGludAloZWFwX2NvbXBhcmVfc2xvdHMoRGF0dW0gYSwgRGF0 dW0gYiwgdm9pZCAqYXJnKTsKIAorc3RhdGljIHZvaWQgY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxh bnMoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSk7CitzdGF0aWMgdm9pZCBFeGVjTWVyZ2VBcHBlbmRB c3luY0JlZ2luKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpOworc3RhdGljIHZvaWQgRXhlY01lcmdl QXBwZW5kQXN5bmNHZXROZXh0KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUsIGludCBtcGxhbik7Citz dGF0aWMgYm9vbCBFeGVjTWVyZ2VBcHBlbmRBc3luY1JlcXVlc3QoTWVyZ2VBcHBlbmRTdGF0ZSAq bm9kZSwgaW50IG1wbGFuKTsKK3N0YXRpYyB2b2lkIEV4ZWNNZXJnZUFwcGVuZEFzeW5jRXZlbnRX YWl0KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpOworCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQlFeGVjSW5p dE1lcmdlQXBwZW5kCkBAIC03MSw2ICs4Miw4IEBAIEV4ZWNJbml0TWVyZ2VBcHBlbmQoTWVyZ2VB cHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCWludAkJCW5wbGFuczsK IAlpbnQJCQlpLAogCQkJCWo7CisJQml0bWFwc2V0ICAqYXN5bmNwbGFuczsKKwlpbnQJCQluYXN5 bmNwbGFuczsKIAogCS8qIGNoZWNrIGZvciB1bnN1cHBvcnRlZCBmbGFncyAqLwogCUFzc2VydCgh KGVmbGFncyAmIChFWEVDX0ZMQUdfQkFDS1dBUkQgfCBFWEVDX0ZMQUdfTUFSSykpKTsKQEAgLTEw Niw3ICsxMTksMTAgQEAgRXhlY0luaXRNZXJnZUFwcGVuZChNZXJnZUFwcGVuZCAqbm9kZSwgRVN0 YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCSAqIGxhdGVyIGNhbGxzIHRvIEV4ZWNGaW5kTWF0 Y2hpbmdTdWJQbGFucy4KIAkJICovCiAJCWlmICghcHJ1bmVzdGF0ZS0+ZG9fZXhlY19wcnVuZSAm JiBucGxhbnMgPiAwKQorCQl7CiAJCQltZXJnZXN0YXRlLT5tc192YWxpZF9zdWJwbGFucyA9IGJt c19hZGRfcmFuZ2UoTlVMTCwgMCwgbnBsYW5zIC0gMSk7CisJCQltZXJnZXN0YXRlLT5tc192YWxp ZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKKwkJfQogCX0KIAllbHNlCiAJewpAQCAtMTE5 LDYgKzEzNSw3IEBAIEV4ZWNJbml0TWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0 ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQlBc3NlcnQobnBsYW5zID4gMCk7CiAJCW1lcmdlc3Rh dGUtPm1zX3ZhbGlkX3N1YnBsYW5zID0gdmFsaWRzdWJwbGFucyA9CiAJCQlibXNfYWRkX3Jhbmdl KE5VTEwsIDAsIG5wbGFucyAtIDEpOworCQltZXJnZXN0YXRlLT5tc192YWxpZF9zdWJwbGFuc19p ZGVudGlmaWVkID0gdHJ1ZTsKIAkJbWVyZ2VzdGF0ZS0+bXNfcHJ1bmVfc3RhdGUgPSBOVUxMOwog CX0KIApAQCAtMTM1LDExICsxNTIsMjUgQEAgRXhlY0luaXRNZXJnZUFwcGVuZChNZXJnZUFwcGVu ZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJICogdGhlIHJlc3VsdHMgaW50 byB0aGUgbWVyZ2VwbGFuc3RhdGVzIGFycmF5LgogCSAqLwogCWogPSAwOworCWFzeW5jcGxhbnMg PSBOVUxMOworCW5hc3luY3BsYW5zID0gMDsKKwogCWkgPSAtMTsKIAl3aGlsZSAoKGkgPSBibXNf bmV4dF9tZW1iZXIodmFsaWRzdWJwbGFucywgaSkpID49IDApCiAJewogCQlQbGFuCSAgICppbml0 Tm9kZSA9IChQbGFuICopIGxpc3RfbnRoKG5vZGUtPm1lcmdlcGxhbnMsIGkpOwogCisJCS8qCisJ CSAqIFJlY29yZCBhc3luYyBzdWJwbGFucy4gIFdoZW4gZXhlY3V0aW5nIEV2YWxQbGFuUXVhbCwg d2UgdHJlYXQgdGhlbQorCQkgKiBhcyBzeW5jIG9uZXM7IGRvbid0IGRvIHRoaXMgd2hlbiBpbml0 aWFsaXppbmcgYW4gRXZhbFBsYW5RdWFsIHBsYW4KKwkJICogdHJlZS4KKwkJICovCisJCWlmIChp bml0Tm9kZS0+YXN5bmNfY2FwYWJsZSAmJiBlc3RhdGUtPmVzX2VwcV9hY3RpdmUgPT0gTlVMTCkK KwkJeworCQkJYXN5bmNwbGFucyA9IGJtc19hZGRfbWVtYmVyKGFzeW5jcGxhbnMsIGopOworCQkJ bmFzeW5jcGxhbnMrKzsKKwkJfQorCiAJCW1lcmdlcGxhbnN0YXRlc1tqKytdID0gRXhlY0luaXRO b2RlKGluaXROb2RlLCBlc3RhdGUsIGVmbGFncyk7CiAJfQogCkBAIC0xNzAsNiArMjAxLDQ1IEBA IEV4ZWNJbml0TWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBp bnQgZWZsYWdzKQogCSAqLwogCW1lcmdlc3RhdGUtPnBzLnBzX1Byb2pJbmZvID0gTlVMTDsKIAor CS8qIEluaXRpYWxpemUgYXN5bmMgc3RhdGUgKi8KKwltZXJnZXN0YXRlLT5tc19hc3luY3BsYW5z ID0gYXN5bmNwbGFuczsKKwltZXJnZXN0YXRlLT5tc19uYXN5bmNwbGFucyA9IG5hc3luY3BsYW5z OworCW1lcmdlc3RhdGUtPm1zX2FzeW5jcmVxdWVzdHMgPSBOVUxMOworCW1lcmdlc3RhdGUtPm1z X2FzeW5jcmVzdWx0cyA9IE5VTEw7CisJbWVyZ2VzdGF0ZS0+bXNfaGFzX2FzeW5jcmVzdWx0cyA9 IE5VTEw7CisJbWVyZ2VzdGF0ZS0+bXNfYXN5bmNyZW1haW4gPSBOVUxMOworCW1lcmdlc3RhdGUt Pm1zX25lZWRyZXF1ZXN0ID0gTlVMTDsKKwltZXJnZXN0YXRlLT5tc19ldmVudHNldCA9IE5VTEw7 CisJbWVyZ2VzdGF0ZS0+bXNfdmFsaWRfYXN5bmNwbGFucyA9IE5VTEw7CisKKwlpZiAobmFzeW5j cGxhbnMgPiAwKQorCXsKKwkJbWVyZ2VzdGF0ZS0+bXNfYXN5bmNyZXF1ZXN0cyA9IChBc3luY1Jl cXVlc3QgKiopCisJCQlwYWxsb2MwKG5wbGFucyAqIHNpemVvZihBc3luY1JlcXVlc3QgKikpOwor CisJCWkgPSAtMTsKKwkJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKGFzeW5jcGxhbnMsIGkp KSA+PSAwKQorCQl7CisJCQlBc3luY1JlcXVlc3QgKmFyZXE7CisKKwkJCWFyZXEgPSBwYWxsb2Mo c2l6ZW9mKEFzeW5jUmVxdWVzdCkpOworCQkJYXJlcS0+cmVxdWVzdG9yID0gKFBsYW5TdGF0ZSAq KSBtZXJnZXN0YXRlOworCQkJYXJlcS0+cmVxdWVzdGVlID0gbWVyZ2VwbGFuc3RhdGVzW2ldOwor CQkJYXJlcS0+cmVxdWVzdF9pbmRleCA9IGk7CisJCQlhcmVxLT5jYWxsYmFja19wZW5kaW5nID0g ZmFsc2U7CisJCQlhcmVxLT5yZXF1ZXN0X2NvbXBsZXRlID0gZmFsc2U7CisJCQlhcmVxLT5yZXN1 bHQgPSBOVUxMOworCisJCQltZXJnZXN0YXRlLT5tc19hc3luY3JlcXVlc3RzW2ldID0gYXJlcTsK KwkJfQorCisJCW1lcmdlc3RhdGUtPm1zX2FzeW5jcmVzdWx0cyA9IChUdXBsZVRhYmxlU2xvdCAq KikKKwkJCXBhbGxvYzAobnBsYW5zICogc2l6ZW9mKFR1cGxlVGFibGVTbG90ICopKTsKKworCQlp ZiAobWVyZ2VzdGF0ZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKKwkJCWNsYXNzaWZ5 X21hdGNoaW5nX3N1YnBsYW5zKG1lcmdlc3RhdGUpOworCX0KKwogCS8qCiAJICogaW5pdGlhbGl6 ZSBzb3J0LWtleSBpbmZvcm1hdGlvbgogCSAqLwpAQCAtMjI2LDE0ICsyOTYsMTggQEAgRXhlY01l cmdlQXBwZW5kKFBsYW5TdGF0ZSAqcHN0YXRlKQogCQlpZiAobm9kZS0+bXNfbnBsYW5zID09IDAp CiAJCQlyZXR1cm4gRXhlY0NsZWFyVHVwbGUobm9kZS0+cHMucHNfUmVzdWx0VHVwbGVTbG90KTsK IAotCQkvKgotCQkgKiBJZiB3ZSd2ZSB5ZXQgdG8gZGV0ZXJtaW5lIHRoZSB2YWxpZCBzdWJwbGFu cyB0aGVuIGRvIHNvIG5vdy4gIElmCi0JCSAqIHJ1bi10aW1lIHBydW5pbmcgaXMgZGlzYWJsZWQg dGhlbiB0aGUgdmFsaWQgc3VicGxhbnMgd2lsbCBhbHdheXMgYmUKLQkJICogc2V0IHRvIGFsbCBz dWJwbGFucy4KLQkJICovCi0JCWlmIChub2RlLT5tc192YWxpZF9zdWJwbGFucyA9PSBOVUxMKQor CQkvKiBJZiB3ZSd2ZSB5ZXQgdG8gZGV0ZXJtaW5lIHRoZSB2YWxpZCBzdWJwbGFucyB0aGVuIGRv IHNvIG5vdy4gKi8KKwkJaWYgKCFub2RlLT5tc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKQor CQl7CiAJCQlub2RlLT5tc192YWxpZF9zdWJwbGFucyA9CiAJCQkJRXhlY0ZpbmRNYXRjaGluZ1N1 YlBsYW5zKG5vZGUtPm1zX3BydW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7CisJCQlub2RlLT5tc192 YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKKwkJCWNsYXNzaWZ5X21hdGNoaW5nX3N1 YnBsYW5zKG5vZGUpOworCQl9CisKKwkJLyogSWYgdGhlcmUgYXJlIGFueSBhc3luYyBzdWJwbGFu cywgYmVnaW4gZXhlY3V0aW5nIHRoZW0uICovCisJCWlmIChub2RlLT5tc19uYXN5bmNwbGFucyA+ IDApCisJCQlFeGVjTWVyZ2VBcHBlbmRBc3luY0JlZ2luKG5vZGUpOwogCiAJCS8qCiAJCSAqIEZp cnN0IHRpbWUgdGhyb3VnaDogcHVsbCB0aGUgZmlyc3QgdHVwbGUgZnJvbSBlYWNoIHZhbGlkIHN1 YnBsYW4sCkBAIC0yNDYsNiArMzIwLDE2IEBAIEV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBz dGF0ZSkKIAkJCWlmICghVHVwSXNOdWxsKG5vZGUtPm1zX3Nsb3RzW2ldKSkKIAkJCQliaW5hcnlo ZWFwX2FkZF91bm9yZGVyZWQobm9kZS0+bXNfaGVhcCwgSW50MzJHZXREYXR1bShpKSk7CiAJCX0K KworCQkvKiBMb29rIGF0IHZhbGlkIGFzeW5jIHN1YnBsYW5zICovCisJCWkgPSAtMTsKKwkJd2hp bGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMsIGkpKSA+ PSAwKQorCQl7CisJCQlFeGVjTWVyZ2VBcHBlbmRBc3luY0dldE5leHQobm9kZSwgaSk7CisJCQlp ZiAoIVR1cElzTnVsbChub2RlLT5tc19zbG90c1tpXSkpCisJCQkJYmluYXJ5aGVhcF9hZGRfdW5v cmRlcmVkKG5vZGUtPm1zX2hlYXAsIEludDMyR2V0RGF0dW0oaSkpOworCQl9CisKIAkJYmluYXJ5 aGVhcF9idWlsZChub2RlLT5tc19oZWFwKTsKIAkJbm9kZS0+bXNfaW5pdGlhbGl6ZWQgPSB0cnVl OwogCX0KQEAgLTI2MCw3ICszNDQsMTMgQEAgRXhlY01lcmdlQXBwZW5kKFBsYW5TdGF0ZSAqcHN0 YXRlKQogCQkgKiB0byBub3QgcHVsbCB0dXBsZXMgdW50aWwgbmVjZXNzYXJ5LikKIAkJICovCiAJ CWkgPSBEYXR1bUdldEludDMyKGJpbmFyeWhlYXBfZmlyc3Qobm9kZS0+bXNfaGVhcCkpOwotCQlu b2RlLT5tc19zbG90c1tpXSA9IEV4ZWNQcm9jTm9kZShub2RlLT5tZXJnZXBsYW5zW2ldKTsKKwkJ aWYgKGJtc19pc19tZW1iZXIoaSwgbm9kZS0+bXNfYXN5bmNwbGFucykpCisJCQlFeGVjTWVyZ2VB cHBlbmRBc3luY0dldE5leHQobm9kZSwgaSk7CisJCWVsc2UKKwkJeworCQkJQXNzZXJ0KGJtc19p c19tZW1iZXIoaSwgbm9kZS0+bXNfdmFsaWRfc3VicGxhbnMpKTsKKwkJCW5vZGUtPm1zX3Nsb3Rz W2ldID0gRXhlY1Byb2NOb2RlKG5vZGUtPm1lcmdlcGxhbnNbaV0pOworCQl9CiAJCWlmICghVHVw SXNOdWxsKG5vZGUtPm1zX3Nsb3RzW2ldKSkKIAkJCWJpbmFyeWhlYXBfcmVwbGFjZV9maXJzdChu b2RlLT5tc19oZWFwLCBJbnQzMkdldERhdHVtKGkpKTsKIAkJZWxzZQpAQCAtMjc2LDYgKzM2Niw4 IEBAIEV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkKIAl7CiAJCWkgPSBEYXR1bUdl dEludDMyKGJpbmFyeWhlYXBfZmlyc3Qobm9kZS0+bXNfaGVhcCkpOwogCQlyZXN1bHQgPSBub2Rl LT5tc19zbG90c1tpXTsKKwkJLyogRm9yIGFzeW5jIHBsYW4gcmVjb3JkIHRoYXQgd2UgY2FuIGdl dCB0aGUgbmV4dCB0dXBsZSAqLworCQlub2RlLT5tc19oYXNfYXN5bmNyZXN1bHRzID0gYm1zX2Rl bF9tZW1iZXIobm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cywgaSk7CiAJfQogCiAJcmV0dXJuIHJl c3VsdDsKQEAgLTM1NSw2ICs0NDcsNyBAQCB2b2lkCiBFeGVjUmVTY2FuTWVyZ2VBcHBlbmQoTWVy Z2VBcHBlbmRTdGF0ZSAqbm9kZSkKIHsKIAlpbnQJCQlpOworCWludAkJCW5hc3luY3BsYW5zID0g bm9kZS0+bXNfbmFzeW5jcGxhbnM7CiAKIAkvKgogCSAqIElmIGFueSBQQVJBTV9FWEVDIFBhcmFt cyB1c2VkIGluIHBydW5pbmcgZXhwcmVzc2lvbnMgaGF2ZSBjaGFuZ2VkLCB0aGVuCkBAIC0zNjUs OCArNDU4LDExIEBAIEV4ZWNSZVNjYW5NZXJnZUFwcGVuZChNZXJnZUFwcGVuZFN0YXRlICpub2Rl KQogCQlibXNfb3ZlcmxhcChub2RlLT5wcy5jaGdQYXJhbSwKIAkJCQkJbm9kZS0+bXNfcHJ1bmVf c3RhdGUtPmV4ZWNwYXJhbWlkcykpCiAJeworCQlub2RlLT5tc192YWxpZF9zdWJwbGFuc19pZGVu dGlmaWVkID0gZmFsc2U7CiAJCWJtc19mcmVlKG5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zKTsKIAkJ bm9kZS0+bXNfdmFsaWRfc3VicGxhbnMgPSBOVUxMOworCQlibXNfZnJlZShub2RlLT5tc192YWxp ZF9hc3luY3BsYW5zKTsKKwkJbm9kZS0+bXNfdmFsaWRfYXN5bmNwbGFucyA9IE5VTEw7CiAJfQog CiAJZm9yIChpID0gMDsgaSA8IG5vZGUtPm1zX25wbGFuczsgaSsrKQpAQCAtMzg3LDYgKzQ4Mywz NjcgQEAgRXhlY1JlU2Nhbk1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpCiAJCWlm IChzdWJub2RlLT5jaGdQYXJhbSA9PSBOVUxMKQogCQkJRXhlY1JlU2NhbihzdWJub2RlKTsKIAl9 CisKKwkvKiBSZXNldCBhc3luYyBzdGF0ZSAqLworCWlmIChuYXN5bmNwbGFucyA+IDApCisJewor CQlpID0gLTE7CisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5tc19hc3luY3Bs YW5zLCBpKSkgPj0gMCkKKwkJeworCQkJQXN5bmNSZXF1ZXN0ICphcmVxID0gbm9kZS0+bXNfYXN5 bmNyZXF1ZXN0c1tpXTsKKworCQkJYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyA9IGZhbHNlOworCQkJ YXJlcS0+cmVxdWVzdF9jb21wbGV0ZSA9IGZhbHNlOworCQkJYXJlcS0+cmVzdWx0ID0gTlVMTDsK KwkJfQorCisJCWJtc19mcmVlKG5vZGUtPm1zX2FzeW5jcmVtYWluKTsKKwkJbm9kZS0+bXNfYXN5 bmNyZW1haW4gPSBOVUxMOworCQlibXNfZnJlZShub2RlLT5tc19uZWVkcmVxdWVzdCk7CisJCW5v ZGUtPm1zX25lZWRyZXF1ZXN0ID0gTlVMTDsKKwkJYm1zX2ZyZWUobm9kZS0+bXNfaGFzX2FzeW5j cmVzdWx0cyk7CisJCW5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMgPSBOVUxMOworCX0KIAliaW5h cnloZWFwX3Jlc2V0KG5vZGUtPm1zX2hlYXApOwogCW5vZGUtPm1zX2luaXRpYWxpemVkID0gZmFs c2U7CiB9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICBjbGFzc2lmeV9tYXRjaGluZ19z dWJwbGFucworICoKKyAqICAgICAgICAgICAgICBDbGFzc2lmeSB0aGUgbm9kZSdzIG1zX3ZhbGlk X3N1YnBsYW5zIGludG8gc3luYyBvbmVzIGFuZAorICogICAgICAgICAgICAgIGFzeW5jIG9uZXMs IGFkanVzdCBpdCB0byBjb250YWluIHN5bmMgb25lcyBvbmx5LCBhbmQgc2F2ZQorICogICAgICAg ICAgICAgIGFzeW5jIG9uZXMgaW4gdGhlIG5vZGUncyBtc192YWxpZF9hc3luY3BsYW5zLgorICog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICovCitzdGF0aWMgdm9pZAorY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMoTWVy Z2VBcHBlbmRTdGF0ZSAqbm9kZSkKK3sKKwlBc3NlcnQobm9kZS0+bXNfdmFsaWRfc3VicGxhbnNf aWRlbnRpZmllZCk7CisKKwkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJlIGFyZSBubyB2YWxpZCBz dWJwbGFucy4gKi8KKwlpZiAoYm1zX2lzX2VtcHR5KG5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zKSkK Kwl7CisJCW5vZGUtPm1zX2FzeW5jcmVtYWluID0gTlVMTDsKKwkJcmV0dXJuOworCX0KKworCS8q IE5vIHZhbGlkIGFzeW5jIHN1YnBsYW5zIGlkZW50aWZpZWQuICovCisJaWYgKCFjbGFzc2lmeV9t YXRjaGluZ19zdWJwbGFuc19jb21tb24oCisJCQkJCQkJCQkJICAgJm5vZGUtPm1zX3ZhbGlkX3N1 YnBsYW5zLAorCQkJCQkJCQkJCSAgIG5vZGUtPm1zX2FzeW5jcGxhbnMsCisJCQkJCQkJCQkJICAg Jm5vZGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMpKQorCQlub2RlLT5tc19hc3luY3JlbWFpbiA9IE5V TEw7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICBFeGVjTWVyZ2VBcHBlbmRBc3lu Y0JlZ2luCisgKgorICogICAgICAgICAgICAgIEJlZ2luIGV4ZWN1dGluZyBkZXNpZ25lZCBhc3lu Yy1jYXBhYmxlIHN1YnBsYW5zLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgdm9pZAorRXhlY01l cmdlQXBwZW5kQXN5bmNCZWdpbihNZXJnZUFwcGVuZFN0YXRlICpub2RlKQoreworCWludAkJCWk7 CisKKwkvKiBCYWNrd2FyZCBzY2FuIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYXN5bmMtYXdhcmUgTWVy Z2VBcHBlbmRzLiAqLworCUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKG5vZGUtPnBzLnN0 YXRlLT5lc19kaXJlY3Rpb24pKTsKKworCS8qIFdlIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hl biB0aGVyZSBhcmUgbm8gc3VicGxhbnMgKi8KKwlBc3NlcnQobm9kZS0+bXNfbnBsYW5zID4gMCk7 CisKKwkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIGFzeW5j IHN1YnBsYW5zLiAqLworCUFzc2VydChub2RlLT5tc19uYXN5bmNwbGFucyA+IDApOworCisJLyog RXhlY01lcmdlQXBwZW5kKCkgaWRlbnRpZmllcyB2YWxpZCBzdWJwbGFucyAqLworCUFzc2VydChu b2RlLT5tc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKTsKKworCS8qIEluaXRpYWxpemUgc3Rh dGUgdmFyaWFibGVzLiAqLworCW5vZGUtPm1zX2FzeW5jcmVtYWluID0gYm1zX2NvcHkobm9kZS0+ bXNfdmFsaWRfYXN5bmNwbGFucyk7CisKKwkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJlIGFyZSBu byB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KKwlpZiAoYm1zX2lzX2VtcHR5KG5vZGUtPm1zX2Fz eW5jcmVtYWluKSkKKwkJcmV0dXJuOworCisJLyogTWFrZSBhIHJlcXVlc3QgZm9yIGVhY2ggb2Yg dGhlIHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLworCWkgPSAtMTsKKwl3aGlsZSAoKGkgPSBibXNf bmV4dF9tZW1iZXIobm9kZS0+bXNfdmFsaWRfYXN5bmNwbGFucywgaSkpID49IDApCisJeworCQlB c3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5tc19hc3luY3JlcXVlc3RzW2ldOworCisJCUFzc2Vy dChhcmVxLT5yZXF1ZXN0X2luZGV4ID09IGkpOworCQlBc3NlcnQoIWFyZXEtPmNhbGxiYWNrX3Bl bmRpbmcpOworCisJCS8qIERvIHRoZSBhY3R1YWwgd29yay4gKi8KKwkJRXhlY0FzeW5jUmVxdWVz dChhcmVxKTsKKwl9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICBFeGVjTWVyZ2VB cHBlbmRBc3luY0dldE5leHQKKyAqCisgKiAgICAgICAgICAgICAgR2V0IHRoZSBuZXh0IHR1cGxl IGZyb20gc3BlY2lmaWVkIGFzeW5jaHJvbm91cyBzdWJwbGFuLgorICogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitz dGF0aWMgdm9pZAorRXhlY01lcmdlQXBwZW5kQXN5bmNHZXROZXh0KE1lcmdlQXBwZW5kU3RhdGUg Km5vZGUsIGludCBtcGxhbikKK3sKKwlub2RlLT5tc19zbG90c1ttcGxhbl0gPSBOVUxMOworCisJ LyogUmVxdWVzdCBhIHR1cGxlIGFzeW5jaHJvbm91c2x5LiAqLworCWlmIChFeGVjTWVyZ2VBcHBl bmRBc3luY1JlcXVlc3Qobm9kZSwgbXBsYW4pKQorCQlyZXR1cm47CisKKwkvKgorCSAqIG5vZGUt Pm1zX2FzeW5jcmVtYWluIGNhbiBiZSBOVUxMIGlmIHdlIGhhdmUgZmV0Y2hlZCB0dXBsZXMsIGJ1 dCBoYXZlbid0CisJICogcmV0dXJuZWQgdGhlbSB5ZXQuIEluIHRoaXMgY2FzZSBFeGVjTWVyZ2VB cHBlbmRBc3luY1JlcXVlc3QoKSBhYm92ZQorCSAqIGp1c3QgcmV0dXJucyB0dXBsZXMgd2l0aG91 dCBwZXJmb3JtaW5nIGEgcmVxdWVzdC4KKwkgKi8KKwl3aGlsZSAoYm1zX2lzX21lbWJlcihtcGxh biwgbm9kZS0+bXNfYXN5bmNyZW1haW4pKQorCXsKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsK KworCQkvKiBXYWl0IG9yIHBvbGwgZm9yIGFzeW5jIGV2ZW50cy4gKi8KKwkJRXhlY01lcmdlQXBw ZW5kQXN5bmNFdmVudFdhaXQobm9kZSk7CisKKwkJLyogUmVxdWVzdCBhIHR1cGxlIGFzeW5jaHJv bm91c2x5LiAqLworCQlpZiAoRXhlY01lcmdlQXBwZW5kQXN5bmNSZXF1ZXN0KG5vZGUsIG1wbGFu KSkKKwkJCXJldHVybjsKKworCQkvKgorCQkgKiBXYWl0aW5nIHVudGlsIHRoZXJlJ3Mgbm8gYXN5 bmMgcmVxdWVzdHMgcGVuZGluZyBvciB3ZSBnb3Qgc29tZQorCQkgKiB0dXBsZXMgZnJvbSBvdXIg cmVxdWVzdAorCQkgKi8KKwl9CisKKwkvKiBObyB0dXBsZXMgKi8KKwlyZXR1cm47Cit9CisKKy8q IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqICAgICAgICAgICAgICBFeGVjTWVyZ2VBcHBlbmRBc3luY1JlcXVlc3QKKyAq CisgKiAgICAgICAgICAgICAgUmVxdWVzdCBhIHR1cGxlIGFzeW5jaHJvbm91c2x5LgorICogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCitzdGF0aWMgYm9vbAorRXhlY01lcmdlQXBwZW5kQXN5bmNSZXF1ZXN0KE1lcmdl QXBwZW5kU3RhdGUgKm5vZGUsIGludCBtcGxhbikKK3sKKwlCaXRtYXBzZXQgICpuZWVkcmVxdWVz dDsKKwlpbnQJCQlpOworCisJLyoKKwkgKiBJZiB3ZSd2ZSBhbHJlYWR5IGZldGNoZWQgbmVjZXNz YXJ5IGRhdGEsIGp1c3QgcmV0dXJuIGl0CisJICovCisJaWYgKGJtc19pc19tZW1iZXIobXBsYW4s IG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMpKQorCXsKKwkJbm9kZS0+bXNfc2xvdHNbbXBsYW5d ID0gbm9kZS0+bXNfYXN5bmNyZXN1bHRzW21wbGFuXTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJ LyoKKwkgKiBHZXQgYSBsaXN0IG9mIG1lbWJlcnMgd2hpY2ggY2FuIHByb2Nlc3MgcmVxdWVzdCBh bmQgZG9uJ3QgaGF2ZSBkYXRhCisJICogcmVhZHkuCisJICovCisJbmVlZHJlcXVlc3QgPSBOVUxM OworCWkgPSAtMTsKKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+bXNfbmVlZHJl cXVlc3QsIGkpKSA+PSAwKQorCXsKKwkJaWYgKCFibXNfaXNfbWVtYmVyKGksIG5vZGUtPm1zX2hh c19hc3luY3Jlc3VsdHMpKQorCQkJbmVlZHJlcXVlc3QgPSBibXNfYWRkX21lbWJlcihuZWVkcmVx dWVzdCwgaSk7CisJfQorCisJLyoKKwkgKiBJZiB0aGVyZSdzIG5vIG1lbWJlcnMsIHdoaWNoIHN0 aWxsIG5lZWQgcmVxdWVzdCwgbm8gbmVlZCB0byBzZW5kIGl0LgorCSAqLworCWlmIChibXNfaXNf ZW1wdHkobmVlZHJlcXVlc3QpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBDbGVhciBtc19uZWVk cmVxdWVzdCBmbGFnLCBhcyB3ZSBhcmUgZ29pbmcgdG8gc2VuZCByZXF1ZXN0cyBub3cgKi8KKwlu b2RlLT5tc19uZWVkcmVxdWVzdCA9IGJtc19kZWxfbWVtYmVycyhub2RlLT5tc19uZWVkcmVxdWVz dCwgbmVlZHJlcXVlc3QpOworCisJLyogTWFrZSBhIG5ldyByZXF1ZXN0IGZvciBlYWNoIG9mIHRo ZSBhc3luYyBzdWJwbGFucyB0aGF0IG5lZWQgaXQuICovCisJaSA9IC0xOworCXdoaWxlICgoaSA9 IGJtc19uZXh0X21lbWJlcihuZWVkcmVxdWVzdCwgaSkpID49IDApCisJeworCQlBc3luY1JlcXVl c3QgKmFyZXEgPSBub2RlLT5tc19hc3luY3JlcXVlc3RzW2ldOworCisJCS8qCisJCSAqIFdlJ3Zl IGp1c3QgY2hlY2tlZCB0aGF0IHN1YnBsYW4gZG9lc24ndCBhbHJlYWR5IGhhdmUgc29tZSBmZXRj aGVkCisJCSAqIGRhdGEKKwkJICovCisJCUFzc2VydCghYm1zX2lzX21lbWJlcihpLCBub2RlLT5t c19oYXNfYXN5bmNyZXN1bHRzKSk7CisKKwkJLyogRG8gdGhlIGFjdHVhbCB3b3JrLiAqLworCQlF eGVjQXN5bmNSZXF1ZXN0KGFyZXEpOworCX0KKwlibXNfZnJlZShuZWVkcmVxdWVzdCk7CisKKwkv KiBSZXR1cm4gbmVlZGVkIGFzeW5jaHJvbm91c2x5LWdlbmVyYXRlZCByZXN1bHRzIGlmIGFueS4g Ki8KKwlpZiAoYm1zX2lzX21lbWJlcihtcGxhbiwgbm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cykp CisJeworCQlub2RlLT5tc19zbG90c1ttcGxhbl0gPSBub2RlLT5tc19hc3luY3Jlc3VsdHNbbXBs YW5dOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqICAgICAgICAgICAgICBFeGVjQXN5bmNNZXJnZUFwcGVuZFJlc3BvbnNlCisgKgorICog ICAgICAgICAgICAgIFJlY2VpdmUgYSByZXNwb25zZSBmcm9tIGFuIGFzeW5jaHJvbm91cyByZXF1 ZXN0IHdlIG1hZGUuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQKK0V4ZWNBc3luY01lcmdlQXBwZW5k UmVzcG9uc2UoQXN5bmNSZXF1ZXN0ICphcmVxKQoreworCU1lcmdlQXBwZW5kU3RhdGUgKm5vZGUg PSAoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBhcmVxLT5yZXF1ZXN0b3I7CisJVHVwbGVUYWJsZVNsb3Qg KnNsb3QgPSBhcmVxLT5yZXN1bHQ7CisKKwkvKiBUaGUgcmVzdWx0IHNob3VsZCBiZSBhIFR1cGxl VGFibGVTbG90IG9yIE5VTEwuICovCisJQXNzZXJ0KHNsb3QgPT0gTlVMTCB8fCBJc0Eoc2xvdCwg VHVwbGVUYWJsZVNsb3QpKTsKKwkvKiBXZSBzaG91bGQgaGFuZGxlIHByZXZpb3VzIGFzeW5jIHJl c3VsdCBwcmlvciB0byBnZXR0aW5nIG5ldyBvbmUgKi8KKwlBc3NlcnQoIWJtc19pc19tZW1iZXIo YXJlcS0+cmVxdWVzdF9pbmRleCwgbm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cykpOworCisJbm9k ZS0+bXNfYXN5bmNyZXN1bHRzW2FyZXEtPnJlcXVlc3RfaW5kZXhdID0gTlVMTDsKKwkvKiBOb3Ro aW5nIHRvIGRvIGlmIHRoZSByZXF1ZXN0IGlzIHBlbmRpbmcuICovCisJaWYgKCFhcmVxLT5yZXF1 ZXN0X2NvbXBsZXRlKQorCXsKKwkJLyogVGhlIHJlcXVlc3Qgd291bGQgaGF2ZSBiZWVuIHBlbmRp bmcgZm9yIGEgY2FsbGJhY2suICovCisJCUFzc2VydChhcmVxLT5jYWxsYmFja19wZW5kaW5nKTsK KwkJcmV0dXJuOworCX0KKworCS8qIElmIHRoZSByZXN1bHQgaXMgTlVMTCBvciBhbiBlbXB0eSBz bG90LCB0aGVyZSdzIG5vdGhpbmcgbW9yZSB0byBkby4gKi8KKwlpZiAoVHVwSXNOdWxsKHNsb3Qp KQorCXsKKwkJLyogVGhlIGVuZGluZyBzdWJwbGFuIHdvdWxkbid0IGhhdmUgYmVlbiBwZW5kaW5n IGZvciBhIGNhbGxiYWNrLiAqLworCQlBc3NlcnQoIWFyZXEtPmNhbGxiYWNrX3BlbmRpbmcpOwor CQlub2RlLT5tc19hc3luY3JlbWFpbiA9IGJtc19kZWxfbWVtYmVyKG5vZGUtPm1zX2FzeW5jcmVt YWluLAorCQkJCQkJCQkJCQkgIGFyZXEtPnJlcXVlc3RfaW5kZXgpOworCQlyZXR1cm47CisJfQor CisJLyogTWFyayB0aGF0IHRoZSBhc3luYyByZXF1ZXN0IGhhcyBhIHJlc3VsdCAqLworCW5vZGUt Pm1zX2hhc19hc3luY3Jlc3VsdHMgPSBibXNfYWRkX21lbWJlcihub2RlLT5tc19oYXNfYXN5bmNy ZXN1bHRzLAorCQkJCQkJCQkJCQkgICBhcmVxLT5yZXF1ZXN0X2luZGV4KTsKKwkvKiBTYXZlIHJl c3VsdCBzbyB3ZSBjYW4gcmV0dXJuIGl0LiAqLworCW5vZGUtPm1zX2FzeW5jcmVzdWx0c1thcmVx LT5yZXF1ZXN0X2luZGV4XSA9IHNsb3Q7CisKKwkvKgorCSAqIE1hcmsgdGhlIHN1YnBsYW4gdGhh dCByZXR1cm5lZCBhIHJlc3VsdCBhcyByZWFkeSBmb3IgYSBuZXcgcmVxdWVzdC4gIFdlCisJICog ZG9uJ3QgbGF1bmNoIGFub3RoZXIgb25lIGhlcmUgaW1tZWRpYXRlbHkgYmVjYXVzZSBpdCBtaWdo dCBjb21wbGV0ZS4KKwkgKi8KKwlub2RlLT5tc19uZWVkcmVxdWVzdCA9IGJtc19hZGRfbWVtYmVy KG5vZGUtPm1zX25lZWRyZXF1ZXN0LAorCQkJCQkJCQkJCSAgYXJlcS0+cmVxdWVzdF9pbmRleCk7 Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqCQlFeGVjTWVyZ2VBcHBlbmRBc3luY0V2ZW50V2FpdAorICoK KyAqCQlXYWl0IG9yIHBvbGwgZm9yIGZpbGUgZGVzY3JpcHRvciBldmVudHMgYW5kIGZpcmUgY2Fs bGJhY2tzLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgdm9pZAorRXhlY01lcmdlQXBwZW5kQXN5 bmNFdmVudFdhaXQoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkKK3sKKwlpbnQJCQluZXZlbnRzID0g bm9kZS0+bXNfbmFzeW5jcGxhbnMgKyAyOyAvKiBvbmUgZm9yIFBNIGRlYXRoIGFuZAorCQkJCQkJ CQkJCQkJCSAqIG9uZSBmb3IgbGF0Y2ggKi8KKwlXYWl0RXZlbnQJb2NjdXJyZWRfZXZlbnRbRVZF TlRfQlVGRkVSX1NJWkVdOworCWludAkJCW5vY2N1cnJlZDsKKwlpbnQJCQlpOworCisJLyogV2Ug c2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyB2YWxpZCBhc3luYyBzdWJw bGFucy4gKi8KKwlBc3NlcnQoYm1zX251bV9tZW1iZXJzKG5vZGUtPm1zX2FzeW5jcmVtYWluKSA+ IDApOworCisJbm9kZS0+bXNfZXZlbnRzZXQgPSBDcmVhdGVXYWl0RXZlbnRTZXQoQ3VycmVudFJl c291cmNlT3duZXIsIG5ldmVudHMpOworCUFkZFdhaXRFdmVudFRvU2V0KG5vZGUtPm1zX2V2ZW50 c2V0LCBXTF9FWElUX09OX1BNX0RFQVRILCBQR0lOVkFMSURfU09DS0VULAorCQkJCQkgIE5VTEws IE5VTEwpOworCisJLyogR2l2ZSBlYWNoIHdhaXRpbmcgc3VicGxhbiBhIGNoYW5jZSB0byBhZGQg YW4gZXZlbnQuICovCisJaSA9IC0xOworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2Rl LT5tc19hc3luY3BsYW5zLCBpKSkgPj0gMCkKKwl7CisJCUFzeW5jUmVxdWVzdCAqYXJlcSA9IG5v ZGUtPm1zX2FzeW5jcmVxdWVzdHNbaV07CisKKwkJaWYgKGFyZXEtPmNhbGxiYWNrX3BlbmRpbmcp CisJCQlFeGVjQXN5bmNDb25maWd1cmVXYWl0KGFyZXEpOworCX0KKworCS8qCisJICogTm8gbmVl ZCBmb3IgZnVydGhlciBwcm9jZXNzaW5nIGlmIG5vbmUgb2YgdGhlIHN1YnBsYW5zIGNvbmZpZ3Vy ZWQgYW55CisJICogZXZlbnRzLgorCSAqLworCWlmIChHZXROdW1SZWdpc3RlcmVkV2FpdEV2ZW50 cyhub2RlLT5tc19ldmVudHNldCkgPT0gMSkKKwl7CisJCUZyZWVXYWl0RXZlbnRTZXQobm9kZS0+ bXNfZXZlbnRzZXQpOworCQlub2RlLT5tc19ldmVudHNldCA9IE5VTEw7CisJCXJldHVybjsKKwl9 CisKKwkvKgorCSAqIEFkZCB0aGUgcHJvY2VzcyBsYXRjaCB0byB0aGUgc2V0LCBzbyB0aGF0IHdl IHdha2UgdXAgdG8gcHJvY2VzcyB0aGUKKwkgKiBzdGFuZGFyZCBpbnRlcnJ1cHRzIHdpdGggQ0hF Q0tfRk9SX0lOVEVSUlVQVFMoKS4KKwkgKgorCSAqIE5PVEU6IEZvciBoaXN0b3JpY2FsIHJlYXNv bnMsIGl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBpcyBhZGRlZCB0byB0aGUKKwkgKiBXYWl0RXZl bnRTZXQgYWZ0ZXIgdGhlIEV4ZWNBc3luY0NvbmZpZ3VyZVdhaXQoKSBjYWxscy4gIE5hbWVseSwK KwkgKiBwb3N0Z3Jlc19mZHcgY2FsbHMgIkdldE51bVJlZ2lzdGVyZWRXYWl0RXZlbnRzKHNldCkg PT0gMSIgdG8gY2hlY2sgaWYKKwkgKiBhbnkgb3RoZXIgZXZlbnRzIGFyZSBpbiB0aGUgc2V0LiAg VGhhdCdzIGEgcG9vciBkZXNpZ24sIGl0J3MKKwkgKiBxdWVzdGlvbmFibGUgZm9yIHBvc3RncmVz X2ZkdyB0byBiZSBkb2luZyB0aGF0IGluIHRoZSBmaXJzdCBwbGFjZSwgYnV0CisJICogd2UgY2Fu bm90IGNoYW5nZSBpdCBub3cuICBUaGUgcGF0dGVybiBoYXMgcG9zc2libHkgYmVlbiBjb3BpZWQg dG8gb3RoZXIKKwkgKiBleHRlbnNpb25zIHRvby4KKwkgKi8KKwlBZGRXYWl0RXZlbnRUb1NldChu b2RlLT5tc19ldmVudHNldCwgV0xfTEFUQ0hfU0VULCBQR0lOVkFMSURfU09DS0VULAorCQkJCQkg IE15TGF0Y2gsIE5VTEwpOworCisJLyogUmV0dXJuIGF0IG1vc3QgRVZFTlRfQlVGRkVSX1NJWkUg ZXZlbnRzIGluIG9uZSBjYWxsLiAqLworCWlmIChuZXZlbnRzID4gRVZFTlRfQlVGRkVSX1NJWkUp CisJCW5ldmVudHMgPSBFVkVOVF9CVUZGRVJfU0laRTsKKworCS8qCisJICogV2FpdCB1bnRpbCBh dCBsZWFzdCBvbmUgZXZlbnQgb2NjdXJzLgorCSAqLworCW5vY2N1cnJlZCA9IFdhaXRFdmVudFNl dFdhaXQobm9kZS0+bXNfZXZlbnRzZXQsIC0xIC8qIG5vIHRpbWVvdXQgKi8gLCBvY2N1cnJlZF9l dmVudCwKKwkJCQkJCQkJIG5ldmVudHMsIFdBSVRfRVZFTlRfQVBQRU5EX1JFQURZKTsKKwlGcmVl V2FpdEV2ZW50U2V0KG5vZGUtPm1zX2V2ZW50c2V0KTsKKwlub2RlLT5tc19ldmVudHNldCA9IE5V TEw7CisJaWYgKG5vY2N1cnJlZCA9PSAwKQorCQlyZXR1cm47CisKKwkvKiBEZWxpdmVyIG5vdGlm aWNhdGlvbnMuICovCisJZm9yIChpID0gMDsgaSA8IG5vY2N1cnJlZDsgaSsrKQorCXsKKwkJV2Fp dEV2ZW50ICAqdyA9ICZvY2N1cnJlZF9ldmVudFtpXTsKKworCQkvKgorCQkgKiBFYWNoIHdhaXRp bmcgc3VicGxhbiBzaG91bGQgaGF2ZSByZWdpc3RlcmVkIGl0cyB3YWl0IGV2ZW50IHdpdGgKKwkJ ICogdXNlcl9kYXRhIHBvaW50aW5nIGJhY2sgdG8gaXRzIEFzeW5jUmVxdWVzdC4KKwkJICovCisJ CWlmICgody0+ZXZlbnRzICYgV0xfU09DS0VUX1JFQURBQkxFKSAhPSAwKQorCQl7CisJCQlBc3lu Y1JlcXVlc3QgKmFyZXEgPSAoQXN5bmNSZXF1ZXN0ICopIHctPnVzZXJfZGF0YTsKKworCQkJaWYg KGFyZXEtPmNhbGxiYWNrX3BlbmRpbmcpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBNYXJrIGl0IGFz IG5vIGxvbmdlciBuZWVkaW5nIGEgY2FsbGJhY2suICBXZSBtdXN0IGRvIHRoaXMKKwkJCQkgKiBi ZWZvcmUgZGlzcGF0Y2hpbmcgdGhlIGNhbGxiYWNrIGluIGNhc2UgdGhlIGNhbGxiYWNrIHJlc2V0 cworCQkJCSAqIHRoZSBmbGFnLgorCQkJCSAqLworCQkJCWFyZXEtPmNhbGxiYWNrX3BlbmRpbmcg PSBmYWxzZTsKKworCQkJCS8qIERvIHRoZSBhY3R1YWwgd29yay4gKi8KKwkJCQlFeGVjQXN5bmNO b3RpZnkoYXJlcSk7CisJCQl9CisJCX0KKworCQkvKiBIYW5kbGUgc3RhbmRhcmQgaW50ZXJydXB0 cyAqLworCQlpZiAoKHctPmV2ZW50cyAmIFdMX0xBVENIX1NFVCkgIT0gMCkKKwkJeworCQkJUmVz ZXRMYXRjaChNeUxhdGNoKTsKKwkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisJCX0KKwl9Cit9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYwppbmRleCBhMzljYzc5M2I0ZC4uMDE3 ZTU5NzczNjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXpl LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYwpAQCAtMTYzLDYg KzE2Myw3IEBAIGJvb2wJCWVuYWJsZV9wYXJhbGxlbF9oYXNoID0gdHJ1ZTsKIGJvb2wJCWVuYWJs ZV9wYXJ0aXRpb25fcHJ1bmluZyA9IHRydWU7CiBib29sCQllbmFibGVfcHJlc29ydGVkX2FnZ3Jl Z2F0ZSA9IHRydWU7CiBib29sCQllbmFibGVfYXN5bmNfYXBwZW5kID0gdHJ1ZTsKK2Jvb2wJCWVu YWJsZV9hc3luY19tZXJnZV9hcHBlbmQgPSB0cnVlOwogCiB0eXBlZGVmIHN0cnVjdAogewpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCmluZGV4IDA1ZmFjNjkzOTg5Li5mYzBl NWM2MmVhOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxh bi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtMTQ2 Niw2ICsxNDY2LDcgQEAgY3JlYXRlX21lcmdlX2FwcGVuZF9wbGFuKFBsYW5uZXJJbmZvICpyb290 LCBNZXJnZUFwcGVuZFBhdGggKmJlc3RfcGF0aCwKIAlMaXN0CSAgICpzdWJwbGFucyA9IE5JTDsK IAlMaXN0Q2VsbCAgICpzdWJwYXRoczsKIAlSZWxPcHRJbmZvICpyZWwgPSBiZXN0X3BhdGgtPnBh dGgucGFyZW50OworCWJvb2wJCWNvbnNpZGVyX2FzeW5jID0gZmFsc2U7CiAKIAkvKgogCSAqIFdl IGRvbid0IGhhdmUgdGhlIGFjdHVhbCBjcmVhdGlvbiBvZiB0aGUgTWVyZ2VBcHBlbmQgbm9kZSBz cGxpdCBvdXQKQEAgLTE0ODAsNiArMTQ4MSwxMCBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BsYW4o UGxhbm5lckluZm8gKnJvb3QsIE1lcmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRoLAogCXBsYW4tPnJp Z2h0dHJlZSA9IE5VTEw7CiAJbm9kZS0+YXBwcmVsaWRzID0gcmVsLT5yZWxpZHM7CiAKKwljb25z aWRlcl9hc3luYyA9IChlbmFibGVfYXN5bmNfbWVyZ2VfYXBwZW5kICYmCisJCQkJCSAgIWJlc3Rf cGF0aC0+cGF0aC5wYXJhbGxlbF9zYWZlICYmCisJCQkJCSAgbGlzdF9sZW5ndGgoYmVzdF9wYXRo LT5zdWJwYXRocykgPiAxKTsKKwogCS8qCiAJICogQ29tcHV0ZSBzb3J0IGNvbHVtbiBpbmZvLCBh bmQgYWRqdXN0IE1lcmdlQXBwZW5kJ3MgdGxpc3QgYXMgbmVlZGVkLgogCSAqIEJlY2F1c2Ugd2Ug cGFzcyBhZGp1c3RfdGxpc3RfaW5fcGxhY2UgPSB0cnVlLCB3ZSBtYXkgaWdub3JlIHRoZQpAQCAt MTU4MCw2ICsxNTg1LDEwIEBAIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAq cm9vdCwgTWVyZ2VBcHBlbmRQYXRoICpiZXN0X3BhdGgsCiAJCQlzdWJwbGFuID0gc29ydF9wbGFu OwogCQl9CiAKKwkJLyogSWYgbmVlZGVkLCBjaGVjayB0byBzZWUgaWYgc3VicGxhbiBjYW4gYmUg ZXhlY3V0ZWQgYXN5bmNocm9ub3VzbHkgKi8KKwkJaWYgKGNvbnNpZGVyX2FzeW5jKQorCQkJbWFy a19hc3luY19jYXBhYmxlX3BsYW4oc3VicGxhbiwgc3VicGF0aCk7CisKIAkJc3VicGxhbnMgPSBs YXBwZW5kKHN1YnBsYW5zLCBzdWJwbGFuKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9n dWNfcGFyYW1ldGVycy5kYXQKaW5kZXggYWMwYzdjMzZjNTYuLmI2MGIyM2ZhNGI5IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAorKysgYi9zcmMv YmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAtODIxLDYgKzgyMSwxNCBA QAogICBib290X3ZhbCA9PiAndHJ1ZScsCiB9LAogCit7IG5hbWUgPT4gJ2VuYWJsZV9hc3luY19t ZXJnZV9hcHBlbmQnLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBn cm91cCA9PiAnUVVFUllfVFVOSU5HX01FVEhPRCcsCisgIHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMg dGhlIHBsYW5uZXJcJ3MgdXNlIG9mIGFzeW5jIG1lcmdlIGFwcGVuZCBwbGFucy4nLAorICBmbGFn cyA9PiAnR1VDX0VYUExBSU4nLAorICB2YXJpYWJsZSA9PiAnZW5hYmxlX2FzeW5jX21lcmdlX2Fw cGVuZCcsCisgIGJvb3RfdmFsID0+ICd0cnVlJywKK30sCisKKwogeyBuYW1lID0+ICdlbmFibGVf Yml0bWFwc2NhbicsIHR5cGUgPT4gJ2Jvb2wnLCBjb250ZXh0ID0+ICdQR0NfVVNFUlNFVCcsIGdy b3VwID0+ICdRVUVSWV9UVU5JTkdfTUVUSE9EJywKICAgc2hvcnRfZGVzYyA9PiAnRW5hYmxlcyB0 aGUgcGxhbm5lclwncyB1c2Ugb2YgYml0bWFwLXNjYW4gcGxhbnMuJywKICAgZmxhZ3MgPT4gJ0dV Q19FWFBMQUlOJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNx bC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNh bXBsZQppbmRleCBkYzllMjI1NWY4YS4uZDk0OWQyYWFkMDQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQorKysgYi9zcmMvYmFja2VuZC91 dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKQEAgLTQwNSw2ICs0MDUsNyBAQAogIyAt IFBsYW5uZXIgTWV0aG9kIENvbmZpZ3VyYXRpb24gLQogCiAjZW5hYmxlX2FzeW5jX2FwcGVuZCA9 IG9uCisjZW5hYmxlX2FzeW5jX21lcmdlX2FwcGVuZCA9IG9uCiAjZW5hYmxlX2JpdG1hcHNjYW4g PSBvbgogI2VuYWJsZV9nYXRoZXJtZXJnZSA9IG9uCiAjZW5hYmxlX2hhc2hhZ2cgPSBvbgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmggYi9zcmMvaW5j bHVkZS9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuaAppbmRleCA0ZWIwNWRjMzBkNi4uZTNmZGIy NmVjZTYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5o CisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5oCkBAIC0xOSw1ICsx OSw2IEBACiBleHRlcm4gTWVyZ2VBcHBlbmRTdGF0ZSAqRXhlY0luaXRNZXJnZUFwcGVuZChNZXJn ZUFwcGVuZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpOwogZXh0ZXJuIHZvaWQg RXhlY0VuZE1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpOwogZXh0ZXJuIHZvaWQg RXhlY1JlU2Nhbk1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpOworZXh0ZXJuIHZv aWQgRXhlY0FzeW5jTWVyZ2VBcHBlbmRSZXNwb25zZShBc3luY1JlcXVlc3QgKmFyZXEpOwogCiAj ZW5kaWYJCQkJCQkJLyogTk9ERU1FUkdFQVBQRU5EX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5k ZXggMzk2ODQyOWY5OTEuLjU4ODdjYmY0ZjE2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rl cy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMTU0 NSwxMCArMTU0NSw2OSBAQCB0eXBlZGVmIHN0cnVjdCBNZXJnZUFwcGVuZFN0YXRlCiAJVHVwbGVU YWJsZVNsb3QgKiptc19zbG90czsJLyogYXJyYXkgb2YgbGVuZ3RoIG1zX25wbGFucyAqLwogCXN0 cnVjdCBiaW5hcnloZWFwICptc19oZWFwOyAvKiBiaW5hcnkgaGVhcCBvZiBzbG90IGluZGljZXMg Ki8KIAlib29sCQltc19pbml0aWFsaXplZDsgLyogYXJlIHN1YnBsYW5zIHN0YXJ0ZWQ/ICovCisJ Qml0bWFwc2V0ICAqbXNfYXN5bmNwbGFuczsJLyogYXN5bmNocm9ub3VzIHBsYW5zIGluZGV4ZXMg Ki8KKwlpbnQJCQltc19uYXN5bmNwbGFuczsgLyogIyBvZiBhc3luY2hyb25vdXMgcGxhbnMgKi8K KwlBc3luY1JlcXVlc3QgKiptc19hc3luY3JlcXVlc3RzOwkvKiBhcnJheSBvZiBBc3luY1JlcXVl c3RzICovCisJVHVwbGVUYWJsZVNsb3QgKiptc19hc3luY3Jlc3VsdHM7CS8qIHVucmV0dXJuZWQg cmVzdWx0cyBvZiBhc3luYyBwbGFucyAqLworCUJpdG1hcHNldCAgKm1zX2hhc19hc3luY3Jlc3Vs dHM7CS8qIHBsYW5zIHdoaWNoIGhhdmUgYXN5bmMgcmVzdWx0cyAqLworCUJpdG1hcHNldCAgKm1z X2FzeW5jcmVtYWluOyAvKiByZW1haW5pbmcgYXN5bmNocm9ub3VzIHBsYW5zICovCisJQml0bWFw c2V0ICAqbXNfbmVlZHJlcXVlc3Q7IC8qIGFzeW5jaHJvbm91cyBwbGFucyBuZWVkaW5nIGEgbmV3 IHJlcXVlc3QgKi8KKwlzdHJ1Y3QgV2FpdEV2ZW50U2V0ICptc19ldmVudHNldDsJLyogV2FpdEV2 ZW50U2V0IHVzZWQgdG8gY29uZmlndXJlIGZpbGUKKwkJCQkJCQkJCQkgKiBkZXNjcmlwdG9yIHdh aXQgZXZlbnRzICovCiAJc3RydWN0IFBhcnRpdGlvblBydW5lU3RhdGUgKm1zX3BydW5lX3N0YXRl OworCWJvb2wJCW1zX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQ7CS8qIGlzIG1zX3ZhbGlkX3N1 YnBsYW5zIHZhbGlkPyAqLwogCUJpdG1hcHNldCAgKm1zX3ZhbGlkX3N1YnBsYW5zOworCUJpdG1h cHNldCAgKm1zX3ZhbGlkX2FzeW5jcGxhbnM7CS8qIHZhbGlkIGFzeW5jaHJvbm91cyBwbGFucyBp bmRleGVzICovCiB9IE1lcmdlQXBwZW5kU3RhdGU7CiAKKy8qIEdldHRlcnMgZm9yIEFwcGVuZFN0 YXRlIGFuZCBNZXJnZUFwcGVuZFN0YXRlICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBXYWl0RXZl bnRTZXQgKgorR2V0QXBwZW5kRXZlbnRTZXQoUGxhblN0YXRlICpwcykKK3sKKwlBc3NlcnQoSXNB KHBzLCBBcHBlbmRTdGF0ZSkgfHwgSXNBKHBzLCBNZXJnZUFwcGVuZFN0YXRlKSk7CisKKwlpZiAo SXNBKHBzLCBBcHBlbmRTdGF0ZSkpCisJCXJldHVybiAoKEFwcGVuZFN0YXRlICopIHBzKS0+YXNf ZXZlbnRzZXQ7CisJZWxzZQorCQlyZXR1cm4gKChNZXJnZUFwcGVuZFN0YXRlICopIHBzKS0+bXNf ZXZlbnRzZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgQml0bWFwc2V0ICoKK0dldE5lZWRSZXF1ZXN0 KFBsYW5TdGF0ZSAqcHMpCit7CisJQXNzZXJ0KElzQShwcywgQXBwZW5kU3RhdGUpIHx8IElzQShw cywgTWVyZ2VBcHBlbmRTdGF0ZSkpOworCisJaWYgKElzQShwcywgQXBwZW5kU3RhdGUpKQorCQly ZXR1cm4gKChBcHBlbmRTdGF0ZSAqKSBwcyktPmFzX25lZWRyZXF1ZXN0OworCWVsc2UKKwkJcmV0 dXJuICgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBwcyktPm1zX25lZWRyZXF1ZXN0OworfQorCisvKiBD b21tb24gcGFydCBvZiBjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucygpIGZvciBBcHBlbmQgYW5k IE1lcmdlQXBwZW5kICovCitzdGF0aWMgaW5saW5lIGJvb2wKK2NsYXNzaWZ5X21hdGNoaW5nX3N1 YnBsYW5zX2NvbW1vbihCaXRtYXBzZXQgKip2YWxpZF9zdWJwbGFucywKKwkJCQkJCQkJICBCaXRt YXBzZXQgKmFzeW5jcGxhbnMsCisJCQkJCQkJCSAgQml0bWFwc2V0ICoqdmFsaWRfYXN5bmNwbGFu cykKK3sKKwlBc3NlcnQoKnZhbGlkX2FzeW5jcGxhbnMgPT0gTlVMTCk7CisKKwkvKiBDaGVja2Vk IGJ5IGNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKCkgKi8KKwlBc3NlcnQoIWJtc19pc19lbXB0 eSgqdmFsaWRfc3VicGxhbnMpKTsKKworCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlcmUgYXJlIG5v IHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLworCWlmICghYm1zX292ZXJsYXAoKnZhbGlkX3N1YnBs YW5zLCBhc3luY3BsYW5zKSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogR2V0IHZhbGlkIGFzeW5j IHN1YnBsYW5zLiAqLworCSp2YWxpZF9hc3luY3BsYW5zID0gYm1zX2ludGVyc2VjdChhc3luY3Bs YW5zLAorCQkJCQkJCQkJICAqdmFsaWRfc3VicGxhbnMpOworCisJLyogQWRqdXN0IHRoZSB2YWxp ZCBzdWJwbGFucyB0byBjb250YWluIHN5bmMgc3VicGxhbnMgb25seS4gKi8KKwkqdmFsaWRfc3Vi cGxhbnMgPSBibXNfZGVsX21lbWJlcnMoKnZhbGlkX3N1YnBsYW5zLAorCQkJCQkJCQkJICAqdmFs aWRfYXN5bmNwbGFucyk7CisJcmV0dXJuIHRydWU7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0K ICAqCSBSZWN1cnNpdmVVbmlvblN0YXRlIGluZm9ybWF0aW9uCiAgKgpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgK aW5kZXggYjUyM2JjZGE4ZjMuLmZlZTQ5MWI3N2FkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9v cHRpbWl6ZXIvY29zdC5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKQEAgLTcw LDYgKzcwLDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX3BhcmFsbGVsX2hhc2g7 CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfcGFydGl0aW9uX3BydW5pbmc7CiBleHRl cm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfcHJlc29ydGVkX2FnZ3JlZ2F0ZTsKIGV4dGVybiBQ R0RMTElNUE9SVCBib29sIGVuYWJsZV9hc3luY19hcHBlbmQ7CitleHRlcm4gUEdETExJTVBPUlQg Ym9vbCBlbmFibGVfYXN5bmNfbWVyZ2VfYXBwZW5kOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBj b25zdHJhaW50X2V4Y2x1c2lvbjsKIAogZXh0ZXJuIGRvdWJsZSBpbmRleF9wYWdlc19mZXRjaGVk KGRvdWJsZSB0dXBsZXNfZmV0Y2hlZCwgQmxvY2tOdW1iZXIgcGFnZXMsCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvc3lzdmlld3Mub3V0CmluZGV4IDA0MTFkYjgzMmYxLi4xOTRiMWY5NTI4OSAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKQEAgLTE0OSw2ICsxNDksNyBAQCBz ZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5h YmxlJSc7CiAgICAgICAgICAgICAgIG5hbWUgICAgICAgICAgICAgIHwgc2V0dGluZyAKIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLQogIGVuYWJsZV9hc3luY19hcHBl bmQgICAgICAgICAgICB8IG9uCisgZW5hYmxlX2FzeW5jX21lcmdlX2FwcGVuZCAgICAgIHwgb24K ICBlbmFibGVfYml0bWFwc2NhbiAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9kaXN0aW5jdF9y ZW9yZGVyaW5nICAgICB8IG9uCiAgZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0ZSAgICAgICAgIHwgb24K QEAgLTE3Myw3ICsxNzQsNyBAQCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdz IHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgZW5hYmxlX3NlcXNjYW4gICAgICAgICAgICAg ICAgIHwgb24KICBlbmFibGVfc29ydCAgICAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV90 aWRzY2FuICAgICAgICAgICAgICAgICB8IG9uCi0oMjUgcm93cykKKygyNiByb3dzKQogCiAtLSBU aGVyZSBhcmUgYWx3YXlzIHdhaXQgZXZlbnQgZGVzY3JpcHRpb25zIGZvciB2YXJpb3VzIHR5cGVz LiAgSW5qZWN0aW9uUG9pbnQKIC0tIG1heSBiZSBwcmVzZW50IG9yIGFic2VudCwgZGVwZW5kaW5n IG9uIGhpc3Rvcnkgc2luY2UgbGFzdCBwb3N0bWFzdGVyIHN0YXJ0LgotLSAKMi41MS4yCgo= --20013488fca0a9d01d2374bf15e8547dfcfe973c22a39b2f039b12736b87 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v11-0003-Create-execAppend.c-to-avoid-duplicated-code-on-.patch Content-Type: text/plain; charset=utf-8; name=v11-0003-Create-execAppend.c-to-avoid-duplicated-code-on-.patch RnJvbSAyYjI5ZDJjNjQ2YzZkY2U0ZDdiMmU0NzBjZTYyOTEzNGVhYWZhOWFhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRoZXVzIEFsY2FudGFyYSA8bXRocy5kZXZAcG0ubWU+CkRh dGU6IFR1ZSwgMTYgRGVjIDIwMjUgMTY6MzI6MTQgLTAzMDAKU3ViamVjdDogW1BBVENIIHYxMSAz LzNdIENyZWF0ZSBleGVjQXBwZW5kLmMgdG8gYXZvaWQgZHVwbGljYXRlZCBjb2RlIG9uCiBbTWVy Z2VdQXBwZW5kCgotLS0KIGNvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYyB8 ICAgNCArLQogY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMgICAgIHwgICA4ICst CiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgICAgICAgICAgfCAgMjYgKy0KIHNyYy9i YWNrZW5kL2V4ZWN1dG9yL01ha2VmaWxlICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9l eGVjdXRvci9leGVjQW1pLmMgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNBcHBlbmQuYyAgICAgICB8IDQwOCArKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjQ3VycmVudC5jICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNQcm9jbm9kZS5jICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvbWVz b24uYnVpbGQgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQu YyAgICAgICB8IDQ5NyArKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVNZXJnZUFwcGVuZC5jICB8IDQxNiArKystLS0tLS0tLS0tLS0tLS0tLQogc3JjL2Jh Y2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMgICAgICAgICAgIHwgICA4ICstCiBzcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgfCAgMzQgKy0KIHNyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL3NldHJlZnMuYyAgICB8ICA0NCArLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3N1YnNlbGVjdC5jICB8ICAgNCArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5j ICAgICAgIHwgICA4ICstCiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjQXBwZW5kLmggICAgICAg fCAgMzMgKysKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICAgICB8ICA4MCAr Ky0tCiBzcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCAgICAgICAgICAgfCAgNDUgKy0tCiAx OSBmaWxlcyBjaGFuZ2VkLCA3MTggaW5zZXJ0aW9ucygrKSwgOTEzIGRlbGV0aW9ucygtKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBcHBlbmQuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNBcHBlbmQuaAoKZGlmZiAtLWdp dCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYyBiL2NvbnRyaWIvcGdf b3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwppbmRleCBmY2RjMTcwMTJkYS4uN2YxOGMyYWIw NmMgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwor KysgYi9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMKQEAgLTIyOCwxMiAr MjI4LDEyIEBAIG92ZXJleHBsYWluX3Blcl9ub2RlX2hvb2soUGxhblN0YXRlICpwbGFuc3RhdGUs IExpc3QgKmFuY2VzdG9ycywKIAkJCQlicmVhazsKIAkJCWNhc2UgVF9BcHBlbmQ6CiAJCQkJb3Zl cmV4cGxhaW5fYml0bWFwc2V0KCJBcHBlbmQgUlRJcyIsCi0JCQkJCQkJCQkgICgoQXBwZW5kICop IHBsYW4pLT5hcHByZWxpZHMsCisJCQkJCQkJCQkgICgoQXBwZW5kICopIHBsYW4pLT5hcC5hcHBy ZWxpZHMsCiAJCQkJCQkJCQkgIGVzKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgVF9NZXJnZUFwcGVu ZDoKIAkJCQlvdmVyZXhwbGFpbl9iaXRtYXBzZXQoIkFwcGVuZCBSVElzIiwKLQkJCQkJCQkJCSAg KChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXBwcmVsaWRzLAorCQkJCQkJCQkJICAoKE1lcmdlQXBw ZW5kICopIHBsYW4pLT5hcC5hcHByZWxpZHMsCiAJCQkJCQkJCQkgIGVzKTsKIAkJCQlicmVhazsK IAkJCWNhc2UgVF9SZXN1bHQ6CmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0 Z3Jlc19mZHcuYyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCmluZGV4IGJk NTUxYTFkYjcyLi5iMDFhZDQwYWQxNyAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcv cG9zdGdyZXNfZmR3LmMKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMK QEAgLTI0MTIsOCArMjQxMiw4IEBAIGZpbmRfbW9kaWZ5dGFibGVfc3VicGxhbihQbGFubmVySW5m byAqcm9vdCwKIAl7CiAJCUFwcGVuZAkgICAqYXBwZW5kcGxhbiA9IChBcHBlbmQgKikgc3VicGxh bjsKIAotCQlpZiAoc3VicGxhbl9pbmRleCA8IGxpc3RfbGVuZ3RoKGFwcGVuZHBsYW4tPmFwcGVu ZHBsYW5zKSkKLQkJCXN1YnBsYW4gPSAoUGxhbiAqKSBsaXN0X250aChhcHBlbmRwbGFuLT5hcHBl bmRwbGFucywgc3VicGxhbl9pbmRleCk7CisJCWlmIChzdWJwbGFuX2luZGV4IDwgbGlzdF9sZW5n dGgoYXBwZW5kcGxhbi0+YXAuc3VicGxhbnMpKQorCQkJc3VicGxhbiA9IChQbGFuICopIGxpc3Rf bnRoKGFwcGVuZHBsYW4tPmFwLnN1YnBsYW5zLCBzdWJwbGFuX2luZGV4KTsKIAl9CiAJZWxzZSBp ZiAoSXNBKHN1YnBsYW4sIFJlc3VsdCkgJiYKIAkJCSBvdXRlclBsYW4oc3VicGxhbikgIT0gTlVM TCAmJgpAQCAtMjQyMSw4ICsyNDIxLDggQEAgZmluZF9tb2RpZnl0YWJsZV9zdWJwbGFuKFBsYW5u ZXJJbmZvICpyb290LAogCXsKIAkJQXBwZW5kCSAgICphcHBlbmRwbGFuID0gKEFwcGVuZCAqKSBv dXRlclBsYW4oc3VicGxhbik7CiAKLQkJaWYgKHN1YnBsYW5faW5kZXggPCBsaXN0X2xlbmd0aChh cHBlbmRwbGFuLT5hcHBlbmRwbGFucykpCi0JCQlzdWJwbGFuID0gKFBsYW4gKikgbGlzdF9udGgo YXBwZW5kcGxhbi0+YXBwZW5kcGxhbnMsIHN1YnBsYW5faW5kZXgpOworCQlpZiAoc3VicGxhbl9p bmRleCA8IGxpc3RfbGVuZ3RoKGFwcGVuZHBsYW4tPmFwLnN1YnBsYW5zKSkKKwkJCXN1YnBsYW4g PSAoUGxhbiAqKSBsaXN0X250aChhcHBlbmRwbGFuLT5hcC5zdWJwbGFucywgc3VicGxhbl9pbmRl eCk7CiAJfQogCiAJLyogTm93LCBoYXZlIHdlIGdvdCBhIEZvcmVpZ25TY2FuIG9uIHRoZSBkZXNp cmVkIHJlbD8gKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwppbmRleCA1YTYzOTA2MzFlYi4uM2VhYTFm NzQ1OWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKQEAgLTEyMjQsMTEgKzEyMjQsMTEgQEAgRXhw bGFpblByZVNjYW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBCaXRtYXBzZXQgKipyZWxzX3Vz ZWQpCiAJCQlicmVhazsKIAkJY2FzZSBUX0FwcGVuZDoKIAkJCSpyZWxzX3VzZWQgPSBibXNfYWRk X21lbWJlcnMoKnJlbHNfdXNlZCwKLQkJCQkJCQkJCQkgKChBcHBlbmQgKikgcGxhbiktPmFwcHJl bGlkcyk7CisJCQkJCQkJCQkJICgoQXBwZW5kICopIHBsYW4pLT5hcC5hcHByZWxpZHMpOwogCQkJ YnJlYWs7CiAJCWNhc2UgVF9NZXJnZUFwcGVuZDoKIAkJCSpyZWxzX3VzZWQgPSBibXNfYWRkX21l bWJlcnMoKnJlbHNfdXNlZCwKLQkJCQkJCQkJCQkgKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXBw cmVsaWRzKTsKKwkJCQkJCQkJCQkgKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXAuYXBwcmVsaWRz KTsKIAkJCWJyZWFrOwogCQljYXNlIFRfUmVzdWx0OgogCQkJKnJlbHNfdXNlZCA9IGJtc19hZGRf bWVtYmVycygqcmVsc191c2VkLApAQCAtMTI3Miw3ICsxMjcyLDcgQEAgcGxhbl9pc19kaXNhYmxl ZChQbGFuICpwbGFuKQogCQkgKiBpbmNsdWRlcyBhbnkgcnVuLXRpbWUgcHJ1bmVkIGNoaWxkcmVu LiAgSWdub3JpbmcgdGhvc2UgY291bGQgZ2l2ZQogCQkgKiB1cyB0aGUgaW5jb3JyZWN0IG51bWJl ciBvZiBkaXNhYmxlZCBub2Rlcy4KIAkJICovCi0JCWZvcmVhY2gobGMsIGFwbGFuLT5hcHBlbmRw bGFucykKKwkJZm9yZWFjaChsYywgYXBsYW4tPmFwLnN1YnBsYW5zKQogCQl7CiAJCQlQbGFuCSAg ICpzdWJwbGFuID0gbGZpcnN0KGxjKTsKIApAQCAtMTI4OSw3ICsxMjg5LDcgQEAgcGxhbl9pc19k aXNhYmxlZChQbGFuICpwbGFuKQogCQkgKiBpbmNsdWRlcyBhbnkgcnVuLXRpbWUgcHJ1bmVkIGNo aWxkcmVuLiAgSWdub3JpbmcgdGhvc2UgY291bGQgZ2l2ZQogCQkgKiB1cyB0aGUgaW5jb3JyZWN0 IG51bWJlciBvZiBkaXNhYmxlZCBub2Rlcy4KIAkJICovCi0JCWZvcmVhY2gobGMsIG1hcGxhbi0+ bWVyZ2VwbGFucykKKwkJZm9yZWFjaChsYywgbWFwbGFuLT5hcC5zdWJwbGFucykKIAkJewogCQkJ UGxhbgkgICAqc3VicGxhbiA9IGxmaXJzdChsYyk7CiAKQEAgLTIzMzYsMTMgKzIzMzYsMTMgQEAg RXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAlzd2l0 Y2ggKG5vZGVUYWcocGxhbikpCiAJewogCQljYXNlIFRfQXBwZW5kOgotCQkJRXhwbGFpbk1pc3Np bmdNZW1iZXJzKCgoQXBwZW5kU3RhdGUgKikgcGxhbnN0YXRlKS0+YXNfbnBsYW5zLAotCQkJCQkJ CQkgIGxpc3RfbGVuZ3RoKCgoQXBwZW5kICopIHBsYW4pLT5hcHBlbmRwbGFucyksCisJCQlFeHBs YWluTWlzc2luZ01lbWJlcnMoKChBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5hcy5ucGxhbnMs CisJCQkJCQkJCSAgbGlzdF9sZW5ndGgoKChBcHBlbmQgKikgcGxhbiktPmFwLnN1YnBsYW5zKSwK IAkJCQkJCQkJICBlcyk7CiAJCQlicmVhazsKIAkJY2FzZSBUX01lcmdlQXBwZW5kOgotCQkJRXhw bGFpbk1pc3NpbmdNZW1iZXJzKCgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5tc19u cGxhbnMsCi0JCQkJCQkJCSAgbGlzdF9sZW5ndGgoKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+bWVy Z2VwbGFucyksCisJCQlFeHBsYWluTWlzc2luZ01lbWJlcnMoKChNZXJnZUFwcGVuZFN0YXRlICop IHBsYW5zdGF0ZSktPm1zLm5wbGFucywKKwkJCQkJCQkJICBsaXN0X2xlbmd0aCgoKE1lcmdlQXBw ZW5kICopIHBsYW4pLT5hcC5zdWJwbGFucyksCiAJCQkJCQkJCSAgZXMpOwogCQkJYnJlYWs7CiAJ CWRlZmF1bHQ6CkBAIC0yMzg2LDEzICsyMzg2LDEzIEBAIEV4cGxhaW5Ob2RlKFBsYW5TdGF0ZSAq cGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJc3dpdGNoIChub2RlVGFnKHBsYW4pKQogCXsK IAkJY2FzZSBUX0FwcGVuZDoKLQkJCUV4cGxhaW5NZW1iZXJOb2RlcygoKEFwcGVuZFN0YXRlICop IHBsYW5zdGF0ZSktPmFwcGVuZHBsYW5zLAotCQkJCQkJCSAgICgoQXBwZW5kU3RhdGUgKikgcGxh bnN0YXRlKS0+YXNfbnBsYW5zLAorCQkJRXhwbGFpbk1lbWJlck5vZGVzKCgoQXBwZW5kU3RhdGUg KikgcGxhbnN0YXRlKS0+YXMucGxhbnMsCisJCQkJCQkJICAgKChBcHBlbmRTdGF0ZSAqKSBwbGFu c3RhdGUpLT5hcy5ucGxhbnMsCiAJCQkJCQkJICAgYW5jZXN0b3JzLCBlcyk7CiAJCQlicmVhazsK IAkJY2FzZSBUX01lcmdlQXBwZW5kOgotCQkJRXhwbGFpbk1lbWJlck5vZGVzKCgoTWVyZ2VBcHBl bmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5tZXJnZXBsYW5zLAotCQkJCQkJCSAgICgoTWVyZ2VBcHBl bmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5tc19ucGxhbnMsCisJCQlFeHBsYWluTWVtYmVyTm9kZXMo KChNZXJnZUFwcGVuZFN0YXRlICopIHBsYW5zdGF0ZSktPm1zLnBsYW5zLAorCQkJCQkJCSAgICgo TWVyZ2VBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5tcy5ucGxhbnMsCiAJCQkJCQkJICAgYW5j ZXN0b3JzLCBlcyk7CiAJCQlicmVhazsKIAkJY2FzZSBUX0JpdG1hcEFuZDoKQEAgLTI2MDYsNyAr MjYwNiw3IEBAIHN0YXRpYyB2b2lkCiBzaG93X21lcmdlX2FwcGVuZF9rZXlzKE1lcmdlQXBwZW5k U3RhdGUgKm1zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJCQkgICBFeHBsYWluU3RhdGUgKmVz KQogewotCU1lcmdlQXBwZW5kICpwbGFuID0gKE1lcmdlQXBwZW5kICopIG1zdGF0ZS0+cHMucGxh bjsKKwlNZXJnZUFwcGVuZCAqcGxhbiA9IChNZXJnZUFwcGVuZCAqKSBtc3RhdGUtPm1zLnBzLnBs YW47CiAKIAlzaG93X3NvcnRfZ3JvdXBfa2V5cygoUGxhblN0YXRlICopIG1zdGF0ZSwgIlNvcnQg S2V5IiwKIAkJCQkJCSBwbGFuLT5udW1Db2xzLCAwLCBwbGFuLT5zb3J0Q29sSWR4LApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9NYWtlZmlsZQppbmRleCAxMTExOGQwY2UwMi4uNjZiNjJmY2E5MjEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL01h a2VmaWxlCkBAIC0xNSw2ICsxNSw3IEBAIGluY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtl ZmlsZS5nbG9iYWwKIE9CSlMgPSBcCiAJZXhlY0FtaS5vIFwKIAlleGVjQXN5bmMubyBcCisJZXhl Y0FwcGVuZC5vIFwKIAlleGVjQ3VycmVudC5vIFwKIAlleGVjRXhwci5vIFwKIAlleGVjRXhwcklu dGVycC5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYwppbmRleCAxZDBlOGFkNTdiNC4uNWM4OTcwNDhi YTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYworKysgYi9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMKQEAgLTUzNyw3ICs1MzcsNyBAQCBFeGVjU3VwcG9y dHNCYWNrd2FyZFNjYW4oUGxhbiAqbm9kZSkKIAkJCQlpZiAoKChBcHBlbmQgKikgbm9kZSktPm5h c3luY3BsYW5zID4gMCkKIAkJCQkJcmV0dXJuIGZhbHNlOwogCi0JCQkJZm9yZWFjaChsLCAoKEFw cGVuZCAqKSBub2RlKS0+YXBwZW5kcGxhbnMpCisJCQkJZm9yZWFjaChsLCAoKEFwcGVuZCAqKSBu b2RlKS0+YXAuc3VicGxhbnMpCiAJCQkJewogCQkJCQlpZiAoIUV4ZWNTdXBwb3J0c0JhY2t3YXJk U2NhbigoUGxhbiAqKSBsZmlyc3QobCkpKQogCQkJCQkJcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FwcGVuZC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY0FwcGVuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4x ZTc2MjQ4ZjJkNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNB cHBlbmQuYwpAQCAtMCwwICsxLDQwOCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXhl Y0FwcGVuZC5jCisgKgkgIFRoaXMgY29kZSBwcm92aWRlcyBzdXBwb3J0IGZ1bmN0aW9ucyBmb3Ig ZXhlY3V0aW5nIE1lcmdlQXBwZW5kIGFuZCBBcHBlbmQKKyAqCSAgbm9kZXMuCisgKgorICogUG9y dGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhl IFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJ ICBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjQXBwZW5kLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0 b3IuaCIKKyNpbmNsdWRlICJleGVjdXRvci9leGVjQXBwZW5kLmgiCisjaW5jbHVkZSAiZXhlY3V0 b3IvZXhlY0FzeW5jLmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oIgorI2lu Y2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKKyNpbmNsdWRlICJzdG9yYWdlL3dhaXRldmVudHNldC5o IgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorCisjZGVmaW5lIEVWRU5UX0JVRkZFUl9TSVpFCQkJ MTYKKworLyogIEJlZ2luIGFsbCBvZiB0aGUgc3Vic2NhbnMgb2YgYW4gQXBwZW5kZXIgbm9kZS4g Ki8KK3ZvaWQKK0V4ZWNJbml0QXBwZW5kZXIoQXBwZW5kZXJTdGF0ZSAqIHN0YXRlLAorCQkJCSBB cHBlbmRlciAqIG5vZGUsCisJCQkJIEVTdGF0ZSAqZXN0YXRlLAorCQkJCSBpbnQgZWZsYWdzLAor CQkJCSBpbnQgZmlyc3RfcGFydGlhbF9wbGFuLAorCQkJCSBpbnQgKmZpcnN0X3ZhbGlkX3BhcnRp YWxfcGxhbikKK3sKKwlQbGFuU3RhdGUgKiphcHBlbmRwbGFuc3RhdGVzOworCWNvbnN0IFR1cGxl VGFibGVTbG90T3BzICphcHBlbmRvcHM7CisJQml0bWFwc2V0ICAqdmFsaWRzdWJwbGFuczsKKwlC aXRtYXBzZXQgICphc3luY3BsYW5zOworCWludAkJCW5wbGFuczsKKwlpbnQJCQluYXN5bmNwbGFu czsKKwlpbnQJCQlmaXJzdHZhbGlkOworCWludAkJCWksCisJCQkJajsKKworCS8qIElmIHJ1bi10 aW1lIHBhcnRpdGlvbiBwcnVuaW5nIGlzIGVuYWJsZWQsIHRoZW4gc2V0IHRoYXQgdXAgbm93ICov CisJaWYgKG5vZGUtPnBhcnRfcHJ1bmVfaW5kZXggPj0gMCkKKwl7CisJCVBhcnRpdGlvblBydW5l U3RhdGUgKnBydW5lc3RhdGU7CisKKwkJLyoKKwkJICogU2V0IHVwIHBydW5pbmcgZGF0YSBzdHJ1 Y3R1cmUuICBUaGlzIGFsc28gaW5pdGlhbGl6ZXMgdGhlIHNldCBvZgorCQkgKiBzdWJwbGFucyB0 byBpbml0aWFsaXplICh2YWxpZHN1YnBsYW5zKSBieSB0YWtpbmcgaW50byBhY2NvdW50IHRoZQor CQkgKiByZXN1bHQgb2YgcGVyZm9ybWluZyBpbml0aWFsIHBydW5pbmcgaWYgYW55LgorCQkgKi8K KwkJcHJ1bmVzdGF0ZSA9IEV4ZWNJbml0UGFydGl0aW9uRXhlY1BydW5pbmcoJnN0YXRlLT5wcywK KwkJCQkJCQkJCQkJCSAgbGlzdF9sZW5ndGgobm9kZS0+c3VicGxhbnMpLAorCQkJCQkJCQkJCQkJ ICBub2RlLT5wYXJ0X3BydW5lX2luZGV4LAorCQkJCQkJCQkJCQkJICBub2RlLT5hcHByZWxpZHMs CisJCQkJCQkJCQkJCQkgICZ2YWxpZHN1YnBsYW5zKTsKKwkJc3RhdGUtPnBydW5lX3N0YXRlID0g cHJ1bmVzdGF0ZTsKKwkJbnBsYW5zID0gYm1zX251bV9tZW1iZXJzKHZhbGlkc3VicGxhbnMpOwor CisJCS8qCisJCSAqIFdoZW4gbm8gcnVuLXRpbWUgcHJ1bmluZyBpcyByZXF1aXJlZCBhbmQgdGhl cmUncyBhdCBsZWFzdCBvbmUKKwkJICogc3VicGxhbiwgd2UgY2FuIGZpbGwgdmFsaWRfc3VicGxh bnMgaW1tZWRpYXRlbHksIHByZXZlbnRpbmcKKwkJICogbGF0ZXIgY2FsbHMgdG8gRXhlY0ZpbmRN YXRjaGluZ1N1YlBsYW5zLgorCQkgKi8KKwkJaWYgKCFwcnVuZXN0YXRlLT5kb19leGVjX3BydW5l ICYmIG5wbGFucyA+IDApCisJCXsKKwkJCXN0YXRlLT52YWxpZF9zdWJwbGFucyA9IGJtc19hZGRf cmFuZ2UoTlVMTCwgMCwgbnBsYW5zIC0gMSk7CisJCQlzdGF0ZS0+dmFsaWRfc3VicGxhbnNfaWRl bnRpZmllZCA9IHRydWU7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJbnBsYW5zID0gbGlzdF9sZW5n dGgobm9kZS0+c3VicGxhbnMpOworCisJCS8qCisJCSAqIFdoZW4gcnVuLXRpbWUgcGFydGl0aW9u IHBydW5pbmcgaXMgbm90IGVuYWJsZWQgd2UgY2FuIGp1c3QgbWFyayBhbGwKKwkJICogc3VicGxh bnMgYXMgdmFsaWQ7IHRoZXkgbXVzdCBhbHNvIGFsbCBiZSBpbml0aWFsaXplZC4KKwkJICovCisJ CUFzc2VydChucGxhbnMgPiAwKTsKKwkJc3RhdGUtPnZhbGlkX3N1YnBsYW5zID0gdmFsaWRzdWJw bGFucyA9CisJCQlibXNfYWRkX3JhbmdlKE5VTEwsIDAsIG5wbGFucyAtIDEpOworCQlzdGF0ZS0+ dmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7CisJCXN0YXRlLT5wcnVuZV9zdGF0ZSA9 IE5VTEw7CisJfQorCisJYXBwZW5kcGxhbnN0YXRlcyA9IHBhbGxvYzBfYXJyYXkoUGxhblN0YXRl ICosIG5wbGFucyk7CisKKwkvKgorCSAqIGNhbGwgRXhlY0luaXROb2RlIG9uIGVhY2ggb2YgdGhl IHZhbGlkIHBsYW5zIHRvIGJlIGV4ZWN1dGVkIGFuZCBzYXZlCisJICogdGhlIHJlc3VsdHMgaW50 byB0aGUgYXBwZW5kcGxhbnN0YXRlcyBhcnJheS4KKwkgKgorCSAqIFdoaWxlIGF0IGl0LCBmaW5k IG91dCB0aGUgZmlyc3QgdmFsaWQgcGFydGlhbCBwbGFuLgorCSAqLworCWogPSAwOworCWFzeW5j cGxhbnMgPSBOVUxMOworCW5hc3luY3BsYW5zID0gMDsKKwlmaXJzdHZhbGlkID0gbnBsYW5zOwor CWkgPSAtMTsKKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIodmFsaWRzdWJwbGFucywgaSkp ID49IDApCisJeworCQlQbGFuCSAgICppbml0Tm9kZSA9IChQbGFuICopIGxpc3RfbnRoKG5vZGUt PnN1YnBsYW5zLCBpKTsKKworCQkvKgorCQkgKiBSZWNvcmQgYXN5bmMgc3VicGxhbnMuICBXaGVu IGV4ZWN1dGluZyBFdmFsUGxhblF1YWwsIHdlIHRyZWF0IHRoZW0KKwkJICogYXMgc3luYyBvbmVz OyBkb24ndCBkbyB0aGlzIHdoZW4gaW5pdGlhbGl6aW5nIGFuIEV2YWxQbGFuUXVhbCBwbGFuCisJ CSAqIHRyZWUuCisJCSAqLworCQlpZiAoaW5pdE5vZGUtPmFzeW5jX2NhcGFibGUgJiYgZXN0YXRl LT5lc19lcHFfYWN0aXZlID09IE5VTEwpCisJCXsKKwkJCWFzeW5jcGxhbnMgPSBibXNfYWRkX21l bWJlcihhc3luY3BsYW5zLCBqKTsKKwkJCW5hc3luY3BsYW5zKys7CisJCX0KKworCQkvKgorCQkg KiBSZWNvcmQgdGhlIGxvd2VzdCBhcHBlbmRwbGFucyBpbmRleCB3aGljaCBpcyBhIHZhbGlkIHBh cnRpYWwgcGxhbi4KKwkJICovCisJCWlmIChmaXJzdF92YWxpZF9wYXJ0aWFsX3BsYW4gJiYgaSA+ PSBmaXJzdF9wYXJ0aWFsX3BsYW4gJiYgaiA8IGZpcnN0dmFsaWQpCisJCQlmaXJzdHZhbGlkID0g ajsKKworCQlhcHBlbmRwbGFuc3RhdGVzW2orK10gPSBFeGVjSW5pdE5vZGUoaW5pdE5vZGUsIGVz dGF0ZSwgZWZsYWdzKTsKKwl9CisKKwlpZiAoZmlyc3RfdmFsaWRfcGFydGlhbF9wbGFuKQorCQkq Zmlyc3RfdmFsaWRfcGFydGlhbF9wbGFuID0gZmlyc3R2YWxpZDsKKworCXN0YXRlLT5wbGFucyA9 IGFwcGVuZHBsYW5zdGF0ZXM7CisJc3RhdGUtPm5wbGFucyA9IG5wbGFuczsKKworCS8qCisJICog SW5pdGlhbGl6ZSBBcHBlbmQncyByZXN1bHQgdHVwbGUgdHlwZSBhbmQgc2xvdC4gIElmIHRoZSBj aGlsZCBwbGFucyBhbGwKKwkgKiBwcm9kdWNlIHRoZSBzYW1lIGZpeGVkIHNsb3QgdHlwZSwgd2Ug Y2FuIHVzZSB0aGF0IHNsb3QgdHlwZTsgb3RoZXJ3aXNlCisJICogbWFrZSBhIHZpcnR1YWwgc2xv dC4gIChOb3RlIHRoYXQgdGhlIHJlc3VsdCBzbG90IGl0c2VsZiBpcyB1c2VkIG9ubHkgdG8KKwkg KiByZXR1cm4gYSBudWxsIHR1cGxlIGF0IGVuZCBvZiBleGVjdXRpb247IHJlYWwgdHVwbGVzIGFy ZSByZXR1cm5lZCB0bworCSAqIHRoZSBjYWxsZXIgaW4gdGhlIGNoaWxkcmVuJ3Mgb3duIHJlc3Vs dCBzbG90cy4gIFdoYXQgd2UgYXJlIGRvaW5nIGhlcmUKKwkgKiBpcyBhbGxvd2luZyB0aGUgcGFy ZW50IHBsYW4gbm9kZSB0byBvcHRpbWl6ZSBpZiB0aGUgQXBwZW5kIHdpbGwgcmV0dXJuCisJICog b25seSBvbmUga2luZCBvZiBzbG90LikKKwkgKi8KKwlhcHBlbmRvcHMgPSBFeGVjR2V0Q29tbW9u U2xvdE9wcyhhcHBlbmRwbGFuc3RhdGVzLCBqKTsKKwlpZiAoYXBwZW5kb3BzICE9IE5VTEwpCisJ eworCQlFeGVjSW5pdFJlc3VsdFR1cGxlU2xvdFRMKCZzdGF0ZS0+cHMsIGFwcGVuZG9wcyk7CisJ fQorCWVsc2UKKwl7CisJCUV4ZWNJbml0UmVzdWx0VHVwbGVTbG90VEwoJnN0YXRlLT5wcywgJlRU U09wc1ZpcnR1YWwpOworCQkvKiBzaG93IHRoYXQgdGhlIG91dHB1dCBzbG90IHR5cGUgaXMgbm90 IGZpeGVkICovCisJCXN0YXRlLT5wcy5yZXN1bHRvcHNzZXQgPSB0cnVlOworCQlzdGF0ZS0+cHMu cmVzdWx0b3BzZml4ZWQgPSBmYWxzZTsKKwl9CisKKwkvKiBJbml0aWFsaXplIGFzeW5jIHN0YXRl ICovCisJc3RhdGUtPmFzeW5jcGxhbnMgPSBhc3luY3BsYW5zOworCXN0YXRlLT5uYXN5bmNwbGFu cyA9IG5hc3luY3BsYW5zOworCXN0YXRlLT5hc3luY3JlcXVlc3RzID0gTlVMTDsKKwlzdGF0ZS0+ YXN5bmNyZXN1bHRzID0gTlVMTDsKKwlzdGF0ZS0+bmVlZHJlcXVlc3QgPSBOVUxMOworCXN0YXRl LT5ldmVudHNldCA9IE5VTEw7CisJc3RhdGUtPnZhbGlkX2FzeW5jcGxhbnMgPSBOVUxMOworCisJ aWYgKG5hc3luY3BsYW5zID4gMCkKKwl7CisJCXN0YXRlLT5hc3luY3JlcXVlc3RzID0gcGFsbG9j MF9hcnJheShBc3luY1JlcXVlc3QgKiwgbnBsYW5zKTsKKworCQlpID0gLTE7CisJCXdoaWxlICgo aSA9IGJtc19uZXh0X21lbWJlcihhc3luY3BsYW5zLCBpKSkgPj0gMCkKKwkJeworCQkJQXN5bmNS ZXF1ZXN0ICphcmVxOworCisJCQlhcmVxID0gcGFsbG9jX29iamVjdChBc3luY1JlcXVlc3QpOwor CQkJYXJlcS0+cmVxdWVzdG9yID0gKFBsYW5TdGF0ZSAqKSBzdGF0ZTsKKwkJCWFyZXEtPnJlcXVl c3RlZSA9IGFwcGVuZHBsYW5zdGF0ZXNbaV07CisJCQlhcmVxLT5yZXF1ZXN0X2luZGV4ID0gaTsK KwkJCWFyZXEtPmNhbGxiYWNrX3BlbmRpbmcgPSBmYWxzZTsKKwkJCWFyZXEtPnJlcXVlc3RfY29t cGxldGUgPSBmYWxzZTsKKwkJCWFyZXEtPnJlc3VsdCA9IE5VTEw7CisKKwkJCXN0YXRlLT5hc3lu Y3JlcXVlc3RzW2ldID0gYXJlcTsKKwkJfQorCisJCS8qCisJCSAqIEFwcGVuZFN0YXRlIGFuZCBN ZXJnZUFwcGVuZFN0YXRlIGhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50IGFsbG9jYXRpb24KKwkJICog c2l6ZXMgZm9yIGFzeW5jcmVzdWx0cyBpbiB0aGUgb3JpZ2luYWwgY29kZSwgYnV0IHdlIHVuaWZ5 IHRvIHRoZQorCQkgKiBsYXJnZXIgcmVxdWlyZW1lbnQgb3Igc3BlY2lmaWMgbnBsYW5zIGlmIHJl cXVpcmVkLgorCQkgKi8KKwkJc3RhdGUtPmFzeW5jcmVzdWx0cyA9IHBhbGxvYzBfYXJyYXkoVHVw bGVUYWJsZVNsb3QgKiwgbnBsYW5zKTsKKwl9CisKKwkvKgorCSAqIE1pc2NlbGxhbmVvdXMgaW5p dGlhbGl6YXRpb24KKwkgKi8KKwlzdGF0ZS0+cHMucHNfUHJvakluZm8gPSBOVUxMOworfQorCit2 b2lkCitFeGVjUmVTY2FuQXBwZW5kZXIoQXBwZW5kZXJTdGF0ZSAqIG5vZGUpCit7CisJaW50CQkJ aTsKKwlpbnQJCQluYXN5bmNwbGFucyA9IG5vZGUtPm5hc3luY3BsYW5zOworCisJLyoKKwkgKiBJ ZiBhbnkgUEFSQU1fRVhFQyBQYXJhbXMgdXNlZCBpbiBwcnVuaW5nIGV4cHJlc3Npb25zIGhhdmUg Y2hhbmdlZCwgdGhlbgorCSAqIHdlJ2QgYmV0dGVyIHVuc2V0IHRoZSB2YWxpZCBzdWJwbGFucyBz byB0aGF0IHRoZXkgYXJlIHJlc2VsZWN0ZWQgZm9yCisJICogdGhlIG5ldyBwYXJhbWV0ZXIgdmFs dWVzLgorCSAqLworCWlmIChub2RlLT5wcnVuZV9zdGF0ZSAmJgorCQlibXNfb3ZlcmxhcChub2Rl LT5wcy5jaGdQYXJhbSwKKwkJCQkJbm9kZS0+cHJ1bmVfc3RhdGUtPmV4ZWNwYXJhbWlkcykpCisJ eworCQlub2RlLT52YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gZmFsc2U7CisJCWJtc19mcmVl KG5vZGUtPnZhbGlkX3N1YnBsYW5zKTsKKwkJbm9kZS0+dmFsaWRfc3VicGxhbnMgPSBOVUxMOwor CQlibXNfZnJlZShub2RlLT52YWxpZF9hc3luY3BsYW5zKTsKKwkJbm9kZS0+dmFsaWRfYXN5bmNw bGFucyA9IE5VTEw7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG5vZGUtPm5wbGFuczsgaSsrKQor CXsKKwkJUGxhblN0YXRlICAqc3Vibm9kZSA9IG5vZGUtPnBsYW5zW2ldOworCisJCS8qCisJCSAq IEV4ZWNSZVNjYW4gZG9lc24ndCBrbm93IGFib3V0IG15IHN1YnBsYW5zLCBzbyBJIGhhdmUgdG8g ZG8KKwkJICogY2hhbmdlZC1wYXJhbWV0ZXIgc2lnbmFsaW5nIG15c2VsZi4KKwkJICovCisJCWlm IChub2RlLT5wcy5jaGdQYXJhbSAhPSBOVUxMKQorCQkJVXBkYXRlQ2hhbmdlZFBhcmFtU2V0KHN1 Ym5vZGUsIG5vZGUtPnBzLmNoZ1BhcmFtKTsKKworCQkvKgorCQkgKiBJZiBjaGdQYXJhbSBvZiBz dWJub2RlIGlzIG5vdCBudWxsIHRoZW4gcGxhbiB3aWxsIGJlIHJlLXNjYW5uZWQgYnkKKwkJICog Zmlyc3QgRXhlY1Byb2NOb2RlLgorCQkgKi8KKwkJaWYgKHN1Ym5vZGUtPmNoZ1BhcmFtID09IE5V TEwpCisJCQlFeGVjUmVTY2FuKHN1Ym5vZGUpOworCX0KKworCS8qIFJlc2V0IGFzeW5jIHN0YXRl ICovCisJaWYgKG5hc3luY3BsYW5zID4gMCkKKwl7CisJCWkgPSAtMTsKKwkJd2hpbGUgKChpID0g Ym1zX25leHRfbWVtYmVyKG5vZGUtPmFzeW5jcGxhbnMsIGkpKSA+PSAwKQorCQl7CisJCQlBc3lu Y1JlcXVlc3QgKmFyZXEgPSBub2RlLT5hc3luY3JlcXVlc3RzW2ldOworCisJCQlhcmVxLT5jYWxs YmFja19wZW5kaW5nID0gZmFsc2U7CisJCQlhcmVxLT5yZXF1ZXN0X2NvbXBsZXRlID0gZmFsc2U7 CisJCQlhcmVxLT5yZXN1bHQgPSBOVUxMOworCQl9CisKKwkJYm1zX2ZyZWUobm9kZS0+bmVlZHJl cXVlc3QpOworCQlub2RlLT5uZWVkcmVxdWVzdCA9IE5VTEw7CisJfQorfQorCisvKiAgV2FpdCBv ciBwb2xsIGZvciBmaWxlIGRlc2NyaXB0b3IgZXZlbnRzIGFuZCBmaXJlIGNhbGxiYWNrcy4gKi8K K3ZvaWQKK0V4ZWNBcHBlbmRlckFzeW5jRXZlbnRXYWl0KEFwcGVuZGVyU3RhdGUgKiBub2RlLCBp bnQgdGltZW91dCwgdWludDMyIHdhaXRfZXZlbnRfaW5mbykKK3sKKwlpbnQJCQluZXZlbnRzID0g bm9kZS0+bmFzeW5jcGxhbnMgKyAyOwkvKiBvbmUgZm9yIFBNIGRlYXRoIGFuZAorCQkJCQkJCQkJ CQkJCSAqIG9uZSBmb3IgbGF0Y2ggKi8KKwlpbnQJCQlub2NjdXJyZWQ7CisJaW50CQkJaTsKKwlX YWl0RXZlbnQJb2NjdXJyZWRfZXZlbnRbRVZFTlRfQlVGRkVSX1NJWkVdOworCisJQXNzZXJ0KG5v ZGUtPmV2ZW50c2V0ID09IE5VTEwpOworCisJbm9kZS0+ZXZlbnRzZXQgPSBDcmVhdGVXYWl0RXZl bnRTZXQoQ3VycmVudFJlc291cmNlT3duZXIsIG5ldmVudHMpOworCUFkZFdhaXRFdmVudFRvU2V0 KG5vZGUtPmV2ZW50c2V0LCBXTF9FWElUX09OX1BNX0RFQVRILCBQR0lOVkFMSURfU09DS0VULAor CQkJCQkgIE5VTEwsIE5VTEwpOworCisJLyogR2l2ZSBlYWNoIHdhaXRpbmcgc3VicGxhbiBhIGNo YW5jZSB0byBhZGQgYW4gZXZlbnQuICovCisJaSA9IC0xOworCXdoaWxlICgoaSA9IGJtc19uZXh0 X21lbWJlcihub2RlLT5hc3luY3BsYW5zLCBpKSkgPj0gMCkKKwl7CisJCUFzeW5jUmVxdWVzdCAq YXJlcSA9IG5vZGUtPmFzeW5jcmVxdWVzdHNbaV07CisKKwkJaWYgKGFyZXEtPmNhbGxiYWNrX3Bl bmRpbmcpCisJCQlFeGVjQXN5bmNDb25maWd1cmVXYWl0KGFyZXEpOworCX0KKworCS8qCisJICog Tm8gbmVlZCBmb3IgZnVydGhlciBwcm9jZXNzaW5nIGlmIG5vbmUgb2YgdGhlIHN1YnBsYW5zIGNv bmZpZ3VyZWQgYW55CisJICogZXZlbnRzLgorCSAqLworCWlmIChHZXROdW1SZWdpc3RlcmVkV2Fp dEV2ZW50cyhub2RlLT5ldmVudHNldCkgPT0gMSkKKwl7CisJCUZyZWVXYWl0RXZlbnRTZXQobm9k ZS0+ZXZlbnRzZXQpOworCQlub2RlLT5ldmVudHNldCA9IE5VTEw7CisJCXJldHVybjsKKwl9CisK KwkvKgorCSAqIEFkZCB0aGUgcHJvY2VzcyBsYXRjaCB0byB0aGUgc2V0LCBzbyB0aGF0IHdlIHdh a2UgdXAgdG8gcHJvY2VzcyB0aGUKKwkgKiBzdGFuZGFyZCBpbnRlcnJ1cHRzIHdpdGggQ0hFQ0tf Rk9SX0lOVEVSUlVQVFMoKS4KKwkgKgorCSAqIE5PVEU6IEZvciBoaXN0b3JpY2FsIHJlYXNvbnMs IGl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBpcyBhZGRlZCB0byB0aGUKKwkgKiBXYWl0RXZlbnRT ZXQgYWZ0ZXIgdGhlIEV4ZWNBc3luY0NvbmZpZ3VyZVdhaXQoKSBjYWxscy4gIE5hbWVseSwKKwkg KiBwb3N0Z3Jlc19mZHcgY2FsbHMgIkdldE51bVJlZ2lzdGVyZWRXYWl0RXZlbnRzKHNldCkgPT0g MSIgdG8gY2hlY2sgaWYKKwkgKiBhbnkgb3RoZXIgZXZlbnRzIGFyZSBpbiB0aGUgc2V0LiAgVGhh dCdzIGEgcG9vciBkZXNpZ24sIGl0J3MKKwkgKiBxdWVzdGlvbmFibGUgZm9yIHBvc3RncmVzX2Zk dyB0byBiZSBkb2luZyB0aGF0IGluIHRoZSBmaXJzdCBwbGFjZSwgYnV0CisJICogd2UgY2Fubm90 IGNoYW5nZSBpdCBub3cuICBUaGUgcGF0dGVybiBoYXMgcG9zc2libHkgYmVlbiBjb3BpZWQgdG8g b3RoZXIKKwkgKiBleHRlbnNpb25zIHRvby4KKwkgKi8KKwlBZGRXYWl0RXZlbnRUb1NldChub2Rl LT5ldmVudHNldCwgV0xfTEFUQ0hfU0VULCBQR0lOVkFMSURfU09DS0VULAorCQkJCQkgIE15TGF0 Y2gsIE5VTEwpOworCisJLyogUmV0dXJuIGF0IG1vc3QgRVZFTlRfQlVGRkVSX1NJWkUgZXZlbnRz IGluIG9uZSBjYWxsLiAqLworCWlmIChuZXZlbnRzID4gRVZFTlRfQlVGRkVSX1NJWkUpCisJCW5l dmVudHMgPSBFVkVOVF9CVUZGRVJfU0laRTsKKworCS8qIFdhaXQgdW50aWwgYXQgbGVhc3Qgb25l IGV2ZW50IG9jY3Vycy4gKi8KKwlub2NjdXJyZWQgPSBXYWl0RXZlbnRTZXRXYWl0KG5vZGUtPmV2 ZW50c2V0LCB0aW1lb3V0LCBvY2N1cnJlZF9ldmVudCwKKwkJCQkJCQkJIG5ldmVudHMsIHdhaXRf ZXZlbnRfaW5mbyk7CisKKworCUZyZWVXYWl0RXZlbnRTZXQobm9kZS0+ZXZlbnRzZXQpOworCW5v ZGUtPmV2ZW50c2V0ID0gTlVMTDsKKwlpZiAobm9jY3VycmVkID09IDApCisJCXJldHVybjsKKwor CisJLyogRGVsaXZlciBub3RpZmljYXRpb25zLiAqLworCWZvciAoaSA9IDA7IGkgPCBub2NjdXJy ZWQ7IGkrKykKKwl7CisJCVdhaXRFdmVudCAgKncgPSAmb2NjdXJyZWRfZXZlbnRbaV07CisKKwkJ LyoKKwkJICogRWFjaCB3YWl0aW5nIHN1YnBsYW4gc2hvdWxkIGhhdmUgcmVnaXN0ZXJlZCBpdHMg d2FpdCBldmVudCB3aXRoCisJCSAqIHVzZXJfZGF0YSBwb2ludGluZyBiYWNrIHRvIGl0cyBBc3lu Y1JlcXVlc3QuCisJCSAqLworCQlpZiAoKHctPmV2ZW50cyAmIFdMX1NPQ0tFVF9SRUFEQUJMRSkg IT0gMCkKKwkJeworCQkJQXN5bmNSZXF1ZXN0ICphcmVxID0gKEFzeW5jUmVxdWVzdCAqKSB3LT51 c2VyX2RhdGE7CisKKwkJCWlmIChhcmVxLT5jYWxsYmFja19wZW5kaW5nKQorCQkJeworCQkJCS8q CisJCQkJICogTWFyayBpdCBhcyBubyBsb25nZXIgbmVlZGluZyBhIGNhbGxiYWNrLiAgV2UgbXVz dCBkbyB0aGlzCisJCQkJICogYmVmb3JlIGRpc3BhdGNoaW5nIHRoZSBjYWxsYmFjayBpbiBjYXNl IHRoZSBjYWxsYmFjayByZXNldHMKKwkJCQkgKiB0aGUgZmxhZy4KKwkJCQkgKi8KKwkJCQlhcmVx LT5jYWxsYmFja19wZW5kaW5nID0gZmFsc2U7CisKKwkJCQkvKiBEbyB0aGUgYWN0dWFsIHdvcmsu ICovCisJCQkJRXhlY0FzeW5jTm90aWZ5KGFyZXEpOworCQkJfQorCQl9CisKKwkJLyogSGFuZGxl IHN0YW5kYXJkIGludGVycnVwdHMgKi8KKwkJaWYgKCh3LT5ldmVudHMgJiBXTF9MQVRDSF9TRVQp ICE9IDApCisJCXsKKwkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCQlDSEVDS19GT1JfSU5URVJS VVBUUygpOworCQl9CisJfQorfQorCisvKiAgQmVnaW4gZXhlY3V0aW5nIGFzeW5jLWNhcGFibGUg c3VicGxhbnMuICovCit2b2lkCitFeGVjQXBwZW5kZXJBc3luY0JlZ2luKEFwcGVuZGVyU3RhdGUg KiBub2RlKQoreworCWludAkJCWk7CisKKwkvKiBCYWNrd2FyZCBzY2FuIGlzIG5vdCBzdXBwb3J0 ZWQgYnkgYXN5bmMtYXdhcmUgQXBwZW5kcy4gKi8KKwlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9y d2FyZChub2RlLT5wcy5zdGF0ZS0+ZXNfZGlyZWN0aW9uKSk7CisKKwkvKiBXZSBzaG91bGQgbmV2 ZXIgYmUgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIHN1YnBsYW5zICovCisJQXNzZXJ0KG5vZGUt Pm5wbGFucyA+IDApOworCisJLyogV2Ugc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVuIHRoZXJl IGFyZSBubyBhc3luYyBzdWJwbGFucy4gKi8KKwlBc3NlcnQobm9kZS0+bmFzeW5jcGxhbnMgPiAw KTsKKworCS8qIE1ha2UgYSByZXF1ZXN0IGZvciBlYWNoIG9mIHRoZSB2YWxpZCBhc3luYyBzdWJw bGFucy4gKi8KKwlpID0gLTE7CisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPnZh bGlkX2FzeW5jcGxhbnMsIGkpKSA+PSAwKQorCXsKKwkJQXN5bmNSZXF1ZXN0ICphcmVxID0gbm9k ZS0+YXN5bmNyZXF1ZXN0c1tpXTsKKworCQlBc3NlcnQoYXJlcS0+cmVxdWVzdF9pbmRleCA9PSBp KTsKKwkJQXNzZXJ0KCFhcmVxLT5jYWxsYmFja19wZW5kaW5nKTsKKworCQkvKiBEbyB0aGUgYWN0 dWFsIHdvcmsuICovCisJCUV4ZWNBc3luY1JlcXVlc3QoYXJlcSk7CisJfQorfQorCisvKiAgU2h1 dHMgZG93biB0aGUgc3VicGxhbnMgb2YgYW4gQXBwZW5kZXIgbm9kZS4gKi8KK3ZvaWQKK0V4ZWNF bmRBcHBlbmRlcihBcHBlbmRlclN0YXRlICogbm9kZSkKK3sKKwlQbGFuU3RhdGUgKipzdWJwbGFu czsKKwlpbnQJCQlucGxhbnM7CisJaW50CQkJaTsKKworCS8qCisJICogZ2V0IGluZm9ybWF0aW9u IGZyb20gdGhlIG5vZGUKKwkgKi8KKwlzdWJwbGFucyA9IG5vZGUtPnBsYW5zOworCW5wbGFucyA9 IG5vZGUtPm5wbGFuczsKKworCS8qCisJICogc2h1dCBkb3duIGVhY2ggb2YgdGhlIHN1YnNjYW5z CisJICovCisJZm9yIChpID0gMDsgaSA8IG5wbGFuczsgaSsrKQorCQlFeGVjRW5kTm9kZShzdWJw bGFuc1tpXSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQ3VycmVu dC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0N1cnJlbnQuYwppbmRleCAzYmZkYzAyMzBm Zi4uZThjZjJlYWQ4YTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNDdXJy ZW50LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0N1cnJlbnQuYwpAQCAtMzc1LDkg KzM3NSw5IEBAIHNlYXJjaF9wbGFuX3RyZWUoUGxhblN0YXRlICpub2RlLCBPaWQgdGFibGVfb2lk LAogCQkJCUFwcGVuZFN0YXRlICphc3RhdGUgPSAoQXBwZW5kU3RhdGUgKikgbm9kZTsKIAkJCQlp bnQJCQlpOwogCi0JCQkJZm9yIChpID0gMDsgaSA8IGFzdGF0ZS0+YXNfbnBsYW5zOyBpKyspCisJ CQkJZm9yIChpID0gMDsgaSA8IGFzdGF0ZS0+YXMubnBsYW5zOyBpKyspCiAJCQkJewotCQkJCQlT Y2FuU3RhdGUgICplbGVtID0gc2VhcmNoX3BsYW5fdHJlZShhc3RhdGUtPmFwcGVuZHBsYW5zW2ld LAorCQkJCQlTY2FuU3RhdGUgICplbGVtID0gc2VhcmNoX3BsYW5fdHJlZShhc3RhdGUtPmFzLnBs YW5zW2ldLAogCQkJCQkJCQkJCQkJCQl0YWJsZV9vaWQsCiAJCQkJCQkJCQkJCQkJCXBlbmRpbmdf cmVzY2FuKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Byb2Nub2Rl LmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUHJvY25vZGUuYwppbmRleCBmNWY5Y2ZiZWVh ZC4uM2ViMWRlMWNkMzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9j bm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jCkBAIC05MTAs OCArOTEwLDggQEAgRXhlY1NldFR1cGxlQm91bmQoaW50NjQgdHVwbGVzX25lZWRlZCwgUGxhblN0 YXRlICpjaGlsZF9ub2RlKQogCQlBcHBlbmRTdGF0ZSAqYVN0YXRlID0gKEFwcGVuZFN0YXRlICop IGNoaWxkX25vZGU7CiAJCWludAkJCWk7CiAKLQkJZm9yIChpID0gMDsgaSA8IGFTdGF0ZS0+YXNf bnBsYW5zOyBpKyspCi0JCQlFeGVjU2V0VHVwbGVCb3VuZCh0dXBsZXNfbmVlZGVkLCBhU3RhdGUt PmFwcGVuZHBsYW5zW2ldKTsKKwkJZm9yIChpID0gMDsgaSA8IGFTdGF0ZS0+YXMubnBsYW5zOyBp KyspCisJCQlFeGVjU2V0VHVwbGVCb3VuZCh0dXBsZXNfbmVlZGVkLCBhU3RhdGUtPmFzLnBsYW5z W2ldKTsKIAl9CiAJZWxzZSBpZiAoSXNBKGNoaWxkX25vZGUsIE1lcmdlQXBwZW5kU3RhdGUpKQog CXsKQEAgLTkyMyw4ICs5MjMsOCBAQCBFeGVjU2V0VHVwbGVCb3VuZChpbnQ2NCB0dXBsZXNfbmVl ZGVkLCBQbGFuU3RhdGUgKmNoaWxkX25vZGUpCiAJCU1lcmdlQXBwZW5kU3RhdGUgKm1hU3RhdGUg PSAoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBjaGlsZF9ub2RlOwogCQlpbnQJCQlpOwogCi0JCWZvciAo aSA9IDA7IGkgPCBtYVN0YXRlLT5tc19ucGxhbnM7IGkrKykKLQkJCUV4ZWNTZXRUdXBsZUJvdW5k KHR1cGxlc19uZWVkZWQsIG1hU3RhdGUtPm1lcmdlcGxhbnNbaV0pOworCQlmb3IgKGkgPSAwOyBp IDwgbWFTdGF0ZS0+bXMubnBsYW5zOyBpKyspCisJCQlFeGVjU2V0VHVwbGVCb3VuZCh0dXBsZXNf bmVlZGVkLCBtYVN0YXRlLT5tcy5wbGFuc1tpXSk7CiAJfQogCWVsc2UgaWYgKElzQShjaGlsZF9u b2RlLCBSZXN1bHRTdGF0ZSkpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bWVzb24uYnVpbGQgYi9zcmMvYmFja2VuZC9leGVjdXRvci9tZXNvbi5idWlsZAppbmRleCAyY2Vh NDFmODc3MS4uYjVjYjcxMGE1OWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL21l c29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL21lc29uLmJ1aWxkCkBAIC0zLDYg KzMsNyBAQAogYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAnZXhlY0FtaS5jJywKICAgJ2V4 ZWNBc3luYy5jJywKKyAgJ2V4ZWNBcHBlbmQuYycsCiAgICdleGVjQ3VycmVudC5jJywKICAgJ2V4 ZWNFeHByLmMnLAogICAnZXhlY0V4cHJJbnRlcnAuYycsCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlQXBwZW5kLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5k LmMKaW5kZXggZGZiYzdiNTEwYzQuLjVjMzllZTI3NWQyIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlQXBwZW5kLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFw cGVuZC5jCkBAIC01NywxMyArNTcsMTMgQEAKIAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNp bmNsdWRlICJleGVjdXRvci9leGVjQXBwZW5kLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY0Fz eW5jLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oIgogI2luY2x1ZGUgImV4 ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUFwcGVuZC5oIgogI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgotI2luY2x1ZGUgInN0b3Jh Z2UvbGF0Y2guaCIKIAogLyogU2hhcmVkIHN0YXRlIGZvciBwYXJhbGxlbC1hd2FyZSBBcHBlbmQu ICovCiBzdHJ1Y3QgUGFyYWxsZWxBcHBlbmRTdGF0ZQpAQCAtMTA5LDE1ICsxMDksNiBAQCBBcHBl bmRTdGF0ZSAqCiBFeGVjSW5pdEFwcGVuZChBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBp bnQgZWZsYWdzKQogewogCUFwcGVuZFN0YXRlICphcHBlbmRzdGF0ZSA9IG1ha2VOb2RlKEFwcGVu ZFN0YXRlKTsKLQlQbGFuU3RhdGUgKiphcHBlbmRwbGFuc3RhdGVzOwotCWNvbnN0IFR1cGxlVGFi bGVTbG90T3BzICphcHBlbmRvcHM7Ci0JQml0bWFwc2V0ICAqdmFsaWRzdWJwbGFuczsKLQlCaXRt YXBzZXQgICphc3luY3BsYW5zOwotCWludAkJCW5wbGFuczsKLQlpbnQJCQluYXN5bmNwbGFuczsK LQlpbnQJCQlmaXJzdHZhbGlkOwotCWludAkJCWksCi0JCQkJajsKIAogCS8qIGNoZWNrIGZvciB1 bnN1cHBvcnRlZCBmbGFncyAqLwogCUFzc2VydCghKGVmbGFncyAmIEVYRUNfRkxBR19NQVJLKSk7 CkBAIC0xMjUsMTY3ICsxMTYsMjcgQEAgRXhlY0luaXRBcHBlbmQoQXBwZW5kICpub2RlLCBFU3Rh dGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkvKgogCSAqIGNyZWF0ZSBuZXcgQXBwZW5kU3RhdGUg Zm9yIG91ciBhcHBlbmQgbm9kZQogCSAqLwotCWFwcGVuZHN0YXRlLT5wcy5wbGFuID0gKFBsYW4g Kikgbm9kZTsKLQlhcHBlbmRzdGF0ZS0+cHMuc3RhdGUgPSBlc3RhdGU7Ci0JYXBwZW5kc3RhdGUt PnBzLkV4ZWNQcm9jTm9kZSA9IEV4ZWNBcHBlbmQ7CisJYXBwZW5kc3RhdGUtPmFzLnBzLnBsYW4g PSAoUGxhbiAqKSBub2RlOworCWFwcGVuZHN0YXRlLT5hcy5wcy5zdGF0ZSA9IGVzdGF0ZTsKKwlh cHBlbmRzdGF0ZS0+YXMucHMuRXhlY1Byb2NOb2RlID0gRXhlY0FwcGVuZDsKIAogCS8qIExldCBj aG9vc2VfbmV4dF9zdWJwbGFuXyogZnVuY3Rpb24gaGFuZGxlIHNldHRpbmcgdGhlIGZpcnN0IHN1 YnBsYW4gKi8KIAlhcHBlbmRzdGF0ZS0+YXNfd2hpY2hwbGFuID0gSU5WQUxJRF9TVUJQTEFOX0lO REVYOwogCWFwcGVuZHN0YXRlLT5hc19zeW5jZG9uZSA9IGZhbHNlOwogCWFwcGVuZHN0YXRlLT5h c19iZWd1biA9IGZhbHNlOwogCi0JLyogSWYgcnVuLXRpbWUgcGFydGl0aW9uIHBydW5pbmcgaXMg ZW5hYmxlZCwgdGhlbiBzZXQgdGhhdCB1cCBub3cgKi8KLQlpZiAobm9kZS0+cGFydF9wcnVuZV9p bmRleCA+PSAwKQotCXsKLQkJUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZTsKLQotCQkv KgotCQkgKiBTZXQgdXAgcHJ1bmluZyBkYXRhIHN0cnVjdHVyZS4gIFRoaXMgYWxzbyBpbml0aWFs aXplcyB0aGUgc2V0IG9mCi0JCSAqIHN1YnBsYW5zIHRvIGluaXRpYWxpemUgKHZhbGlkc3VicGxh bnMpIGJ5IHRha2luZyBpbnRvIGFjY291bnQgdGhlCi0JCSAqIHJlc3VsdCBvZiBwZXJmb3JtaW5n IGluaXRpYWwgcHJ1bmluZyBpZiBhbnkuCi0JCSAqLwotCQlwcnVuZXN0YXRlID0gRXhlY0luaXRQ YXJ0aXRpb25FeGVjUHJ1bmluZygmYXBwZW5kc3RhdGUtPnBzLAotCQkJCQkJCQkJCQkJICBsaXN0 X2xlbmd0aChub2RlLT5hcHBlbmRwbGFucyksCi0JCQkJCQkJCQkJCQkgIG5vZGUtPnBhcnRfcHJ1 bmVfaW5kZXgsCi0JCQkJCQkJCQkJCQkgIG5vZGUtPmFwcHJlbGlkcywKLQkJCQkJCQkJCQkJCSAg JnZhbGlkc3VicGxhbnMpOwotCQlhcHBlbmRzdGF0ZS0+YXNfcHJ1bmVfc3RhdGUgPSBwcnVuZXN0 YXRlOwotCQlucGxhbnMgPSBibXNfbnVtX21lbWJlcnModmFsaWRzdWJwbGFucyk7Ci0KLQkJLyoK LQkJICogV2hlbiBubyBydW4tdGltZSBwcnVuaW5nIGlzIHJlcXVpcmVkIGFuZCB0aGVyZSdzIGF0 IGxlYXN0IG9uZQotCQkgKiBzdWJwbGFuLCB3ZSBjYW4gZmlsbCBhc192YWxpZF9zdWJwbGFucyBp bW1lZGlhdGVseSwgcHJldmVudGluZwotCQkgKiBsYXRlciBjYWxscyB0byBFeGVjRmluZE1hdGNo aW5nU3ViUGxhbnMuCi0JCSAqLwotCQlpZiAoIXBydW5lc3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYg bnBsYW5zID4gMCkKLQkJewotCQkJYXBwZW5kc3RhdGUtPmFzX3ZhbGlkX3N1YnBsYW5zID0gYm1z X2FkZF9yYW5nZShOVUxMLCAwLCBucGxhbnMgLSAxKTsKLQkJCWFwcGVuZHN0YXRlLT5hc192YWxp ZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKLQkJfQotCX0KLQllbHNlCi0JewotCQlucGxh bnMgPSBsaXN0X2xlbmd0aChub2RlLT5hcHBlbmRwbGFucyk7Ci0KLQkJLyoKLQkJICogV2hlbiBy dW4tdGltZSBwYXJ0aXRpb24gcHJ1bmluZyBpcyBub3QgZW5hYmxlZCB3ZSBjYW4ganVzdCBtYXJr IGFsbAotCQkgKiBzdWJwbGFucyBhcyB2YWxpZDsgdGhleSBtdXN0IGFsc28gYWxsIGJlIGluaXRp YWxpemVkLgotCQkgKi8KLQkJQXNzZXJ0KG5wbGFucyA+IDApOwotCQlhcHBlbmRzdGF0ZS0+YXNf dmFsaWRfc3VicGxhbnMgPSB2YWxpZHN1YnBsYW5zID0KLQkJCWJtc19hZGRfcmFuZ2UoTlVMTCwg MCwgbnBsYW5zIC0gMSk7Ci0JCWFwcGVuZHN0YXRlLT5hc192YWxpZF9zdWJwbGFuc19pZGVudGlm aWVkID0gdHJ1ZTsKLQkJYXBwZW5kc3RhdGUtPmFzX3BydW5lX3N0YXRlID0gTlVMTDsKLQl9Ci0K LQlhcHBlbmRwbGFuc3RhdGVzID0gKFBsYW5TdGF0ZSAqKikgcGFsbG9jKG5wbGFucyAqCi0JCQkJ CQkJCQkJCSBzaXplb2YoUGxhblN0YXRlICopKTsKLQotCS8qCi0JICogY2FsbCBFeGVjSW5pdE5v ZGUgb24gZWFjaCBvZiB0aGUgdmFsaWQgcGxhbnMgdG8gYmUgZXhlY3V0ZWQgYW5kIHNhdmUKLQkg KiB0aGUgcmVzdWx0cyBpbnRvIHRoZSBhcHBlbmRwbGFuc3RhdGVzIGFycmF5LgotCSAqCi0JICog V2hpbGUgYXQgaXQsIGZpbmQgb3V0IHRoZSBmaXJzdCB2YWxpZCBwYXJ0aWFsIHBsYW4uCi0JICov Ci0JaiA9IDA7Ci0JYXN5bmNwbGFucyA9IE5VTEw7Ci0JbmFzeW5jcGxhbnMgPSAwOwotCWZpcnN0 dmFsaWQgPSBucGxhbnM7Ci0JaSA9IC0xOwotCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcih2 YWxpZHN1YnBsYW5zLCBpKSkgPj0gMCkKLQl7Ci0JCVBsYW4JICAgKmluaXROb2RlID0gKFBsYW4g KikgbGlzdF9udGgobm9kZS0+YXBwZW5kcGxhbnMsIGkpOwotCi0JCS8qCi0JCSAqIFJlY29yZCBh c3luYyBzdWJwbGFucy4gIFdoZW4gZXhlY3V0aW5nIEV2YWxQbGFuUXVhbCwgd2UgdHJlYXQgdGhl bQotCQkgKiBhcyBzeW5jIG9uZXM7IGRvbid0IGRvIHRoaXMgd2hlbiBpbml0aWFsaXppbmcgYW4g RXZhbFBsYW5RdWFsIHBsYW4KLQkJICogdHJlZS4KLQkJICovCi0JCWlmIChpbml0Tm9kZS0+YXN5 bmNfY2FwYWJsZSAmJiBlc3RhdGUtPmVzX2VwcV9hY3RpdmUgPT0gTlVMTCkKLQkJewotCQkJYXN5 bmNwbGFucyA9IGJtc19hZGRfbWVtYmVyKGFzeW5jcGxhbnMsIGopOwotCQkJbmFzeW5jcGxhbnMr KzsKLQkJfQotCi0JCS8qCi0JCSAqIFJlY29yZCB0aGUgbG93ZXN0IGFwcGVuZHBsYW5zIGluZGV4 IHdoaWNoIGlzIGEgdmFsaWQgcGFydGlhbCBwbGFuLgotCQkgKi8KLQkJaWYgKGkgPj0gbm9kZS0+ Zmlyc3RfcGFydGlhbF9wbGFuICYmIGogPCBmaXJzdHZhbGlkKQotCQkJZmlyc3R2YWxpZCA9IGo7 Ci0KLQkJYXBwZW5kcGxhbnN0YXRlc1tqKytdID0gRXhlY0luaXROb2RlKGluaXROb2RlLCBlc3Rh dGUsIGVmbGFncyk7Ci0JfQotCi0JYXBwZW5kc3RhdGUtPmFzX2ZpcnN0X3BhcnRpYWxfcGxhbiA9 IGZpcnN0dmFsaWQ7Ci0JYXBwZW5kc3RhdGUtPmFwcGVuZHBsYW5zID0gYXBwZW5kcGxhbnN0YXRl czsKLQlhcHBlbmRzdGF0ZS0+YXNfbnBsYW5zID0gbnBsYW5zOworCS8qIEluaXRpYWxpemUgY29t bW9uIGZpZWxkcyAqLworCUV4ZWNJbml0QXBwZW5kZXIoJmFwcGVuZHN0YXRlLT5hcywKKwkJCQkJ ICZub2RlLT5hcCwKKwkJCQkJIGVzdGF0ZSwKKwkJCQkJIGVmbGFncywKKwkJCQkJIG5vZGUtPmZp cnN0X3BhcnRpYWxfcGxhbiwKKwkJCQkJICZhcHBlbmRzdGF0ZS0+YXNfZmlyc3RfcGFydGlhbF9w bGFuKTsKIAotCS8qCi0JICogSW5pdGlhbGl6ZSBBcHBlbmQncyByZXN1bHQgdHVwbGUgdHlwZSBh bmQgc2xvdC4gIElmIHRoZSBjaGlsZCBwbGFucyBhbGwKLQkgKiBwcm9kdWNlIHRoZSBzYW1lIGZp eGVkIHNsb3QgdHlwZSwgd2UgY2FuIHVzZSB0aGF0IHNsb3QgdHlwZTsgb3RoZXJ3aXNlCi0JICog bWFrZSBhIHZpcnR1YWwgc2xvdC4gIChOb3RlIHRoYXQgdGhlIHJlc3VsdCBzbG90IGl0c2VsZiBp cyB1c2VkIG9ubHkgdG8KLQkgKiByZXR1cm4gYSBudWxsIHR1cGxlIGF0IGVuZCBvZiBleGVjdXRp b247IHJlYWwgdHVwbGVzIGFyZSByZXR1cm5lZCB0bwotCSAqIHRoZSBjYWxsZXIgaW4gdGhlIGNo aWxkcmVuJ3Mgb3duIHJlc3VsdCBzbG90cy4gIFdoYXQgd2UgYXJlIGRvaW5nIGhlcmUKLQkgKiBp cyBhbGxvd2luZyB0aGUgcGFyZW50IHBsYW4gbm9kZSB0byBvcHRpbWl6ZSBpZiB0aGUgQXBwZW5k IHdpbGwgcmV0dXJuCi0JICogb25seSBvbmUga2luZCBvZiBzbG90LikKLQkgKi8KLQlhcHBlbmRv cHMgPSBFeGVjR2V0Q29tbW9uU2xvdE9wcyhhcHBlbmRwbGFuc3RhdGVzLCBqKTsKLQlpZiAoYXBw ZW5kb3BzICE9IE5VTEwpCi0JewotCQlFeGVjSW5pdFJlc3VsdFR1cGxlU2xvdFRMKCZhcHBlbmRz dGF0ZS0+cHMsIGFwcGVuZG9wcyk7Ci0JfQotCWVsc2UKLQl7Ci0JCUV4ZWNJbml0UmVzdWx0VHVw bGVTbG90VEwoJmFwcGVuZHN0YXRlLT5wcywgJlRUU09wc1ZpcnR1YWwpOwotCQkvKiBzaG93IHRo YXQgdGhlIG91dHB1dCBzbG90IHR5cGUgaXMgbm90IGZpeGVkICovCi0JCWFwcGVuZHN0YXRlLT5w cy5yZXN1bHRvcHNzZXQgPSB0cnVlOwotCQlhcHBlbmRzdGF0ZS0+cHMucmVzdWx0b3BzZml4ZWQg PSBmYWxzZTsKLQl9CisJaWYgKGFwcGVuZHN0YXRlLT5hcy5uYXN5bmNwbGFucyA+IDAgJiYgYXBw ZW5kc3RhdGUtPmFzLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCisJCWNsYXNzaWZ5X21hdGNo aW5nX3N1YnBsYW5zKGFwcGVuZHN0YXRlKTsKIAotCS8qIEluaXRpYWxpemUgYXN5bmMgc3RhdGUg Ki8KLQlhcHBlbmRzdGF0ZS0+YXNfYXN5bmNwbGFucyA9IGFzeW5jcGxhbnM7Ci0JYXBwZW5kc3Rh dGUtPmFzX25hc3luY3BsYW5zID0gbmFzeW5jcGxhbnM7Ci0JYXBwZW5kc3RhdGUtPmFzX2FzeW5j cmVxdWVzdHMgPSBOVUxMOwotCWFwcGVuZHN0YXRlLT5hc19hc3luY3Jlc3VsdHMgPSBOVUxMOwot CWFwcGVuZHN0YXRlLT5hc19uYXN5bmNyZXN1bHRzID0gMDsKIAlhcHBlbmRzdGF0ZS0+YXNfbmFz eW5jcmVtYWluID0gMDsKLQlhcHBlbmRzdGF0ZS0+YXNfbmVlZHJlcXVlc3QgPSBOVUxMOwotCWFw cGVuZHN0YXRlLT5hc19ldmVudHNldCA9IE5VTEw7Ci0JYXBwZW5kc3RhdGUtPmFzX3ZhbGlkX2Fz eW5jcGxhbnMgPSBOVUxMOwotCi0JaWYgKG5hc3luY3BsYW5zID4gMCkKLQl7Ci0JCWFwcGVuZHN0 YXRlLT5hc19hc3luY3JlcXVlc3RzID0gKEFzeW5jUmVxdWVzdCAqKikKLQkJCXBhbGxvYzAobnBs YW5zICogc2l6ZW9mKEFzeW5jUmVxdWVzdCAqKSk7Ci0KLQkJaSA9IC0xOwotCQl3aGlsZSAoKGkg PSBibXNfbmV4dF9tZW1iZXIoYXN5bmNwbGFucywgaSkpID49IDApCi0JCXsKLQkJCUFzeW5jUmVx dWVzdCAqYXJlcTsKLQotCQkJYXJlcSA9IHBhbGxvY19vYmplY3QoQXN5bmNSZXF1ZXN0KTsKLQkJ CWFyZXEtPnJlcXVlc3RvciA9IChQbGFuU3RhdGUgKikgYXBwZW5kc3RhdGU7Ci0JCQlhcmVxLT5y ZXF1ZXN0ZWUgPSBhcHBlbmRwbGFuc3RhdGVzW2ldOwotCQkJYXJlcS0+cmVxdWVzdF9pbmRleCA9 IGk7Ci0JCQlhcmVxLT5jYWxsYmFja19wZW5kaW5nID0gZmFsc2U7Ci0JCQlhcmVxLT5yZXF1ZXN0 X2NvbXBsZXRlID0gZmFsc2U7Ci0JCQlhcmVxLT5yZXN1bHQgPSBOVUxMOwotCi0JCQlhcHBlbmRz dGF0ZS0+YXNfYXN5bmNyZXF1ZXN0c1tpXSA9IGFyZXE7Ci0JCX0KLQotCQlhcHBlbmRzdGF0ZS0+ YXNfYXN5bmNyZXN1bHRzID0gKFR1cGxlVGFibGVTbG90ICoqKQotCQkJcGFsbG9jMChuYXN5bmNw bGFucyAqIHNpemVvZihUdXBsZVRhYmxlU2xvdCAqKSk7Ci0KLQkJaWYgKGFwcGVuZHN0YXRlLT5h c192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKQotCQkJY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxh bnMoYXBwZW5kc3RhdGUpOwotCX0KLQotCS8qCi0JICogTWlzY2VsbGFuZW91cyBpbml0aWFsaXph dGlvbgotCSAqLwotCi0JYXBwZW5kc3RhdGUtPnBzLnBzX1Byb2pJbmZvID0gTlVMTDsKIAogCS8q IEZvciBwYXJhbGxlbCBxdWVyeSwgdGhpcyB3aWxsIGJlIG92ZXJyaWRkZW4gbGF0ZXIuICovCiAJ YXBwZW5kc3RhdGUtPmNob29zZV9uZXh0X3N1YnBsYW4gPSBjaG9vc2VfbmV4dF9zdWJwbGFuX2xv Y2FsbHk7CkBAIC0zMTUsMTEgKzE2NiwxMSBAQCBFeGVjQXBwZW5kKFBsYW5TdGF0ZSAqcHN0YXRl KQogCQlBc3NlcnQoIW5vZGUtPmFzX3N5bmNkb25lKTsKIAogCQkvKiBOb3RoaW5nIHRvIGRvIGlm IHRoZXJlIGFyZSBubyBzdWJwbGFucyAqLwotCQlpZiAobm9kZS0+YXNfbnBsYW5zID09IDApCi0J CQlyZXR1cm4gRXhlY0NsZWFyVHVwbGUobm9kZS0+cHMucHNfUmVzdWx0VHVwbGVTbG90KTsKKwkJ aWYgKG5vZGUtPmFzLm5wbGFucyA9PSAwKQorCQkJcmV0dXJuIEV4ZWNDbGVhclR1cGxlKG5vZGUt PmFzLnBzLnBzX1Jlc3VsdFR1cGxlU2xvdCk7CiAKIAkJLyogSWYgdGhlcmUgYXJlIGFueSBhc3lu YyBzdWJwbGFucywgYmVnaW4gZXhlY3V0aW5nIHRoZW0uICovCi0JCWlmIChub2RlLT5hc19uYXN5 bmNwbGFucyA+IDApCisJCWlmIChub2RlLT5hcy5uYXN5bmNwbGFucyA+IDApCiAJCQlFeGVjQXBw ZW5kQXN5bmNCZWdpbihub2RlKTsKIAogCQkvKgpAQCAtMzI3LDExICsxNzgsMTEgQEAgRXhlY0Fw cGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkKIAkJICogcHJvY2VlZGluZy4KIAkJICovCiAJCWlmICgh bm9kZS0+Y2hvb3NlX25leHRfc3VicGxhbihub2RlKSAmJiBub2RlLT5hc19uYXN5bmNyZW1haW4g PT0gMCkKLQkJCXJldHVybiBFeGVjQ2xlYXJUdXBsZShub2RlLT5wcy5wc19SZXN1bHRUdXBsZVNs b3QpOworCQkJcmV0dXJuIEV4ZWNDbGVhclR1cGxlKG5vZGUtPmFzLnBzLnBzX1Jlc3VsdFR1cGxl U2xvdCk7CiAKIAkJQXNzZXJ0KG5vZGUtPmFzX3N5bmNkb25lIHx8CiAJCQkgICAobm9kZS0+YXNf d2hpY2hwbGFuID49IDAgJiYKLQkJCQlub2RlLT5hc193aGljaHBsYW4gPCBub2RlLT5hc19ucGxh bnMpKTsKKwkJCQlub2RlLT5hc193aGljaHBsYW4gPCBub2RlLT5hcy5ucGxhbnMpKTsKIAogCQkv KiBBbmQgd2UncmUgaW5pdGlhbGl6ZWQuICovCiAJCW5vZGUtPmFzX2JlZ3VuID0gdHJ1ZTsKQEAg LTM0NiwxOSArMTk3LDE5IEBAIEV4ZWNBcHBlbmQoUGxhblN0YXRlICpwc3RhdGUpCiAJCS8qCiAJ CSAqIHRyeSB0byBnZXQgYSB0dXBsZSBmcm9tIGFuIGFzeW5jIHN1YnBsYW4gaWYgYW55CiAJCSAq LwotCQlpZiAobm9kZS0+YXNfc3luY2RvbmUgfHwgIWJtc19pc19lbXB0eShub2RlLT5hc19uZWVk cmVxdWVzdCkpCisJCWlmIChub2RlLT5hc19zeW5jZG9uZSB8fCAhYm1zX2lzX2VtcHR5KG5vZGUt PmFzLm5lZWRyZXF1ZXN0KSkKIAkJewogCQkJaWYgKEV4ZWNBcHBlbmRBc3luY0dldE5leHQobm9k ZSwgJnJlc3VsdCkpCiAJCQkJcmV0dXJuIHJlc3VsdDsKIAkJCUFzc2VydCghbm9kZS0+YXNfc3lu Y2RvbmUpOwotCQkJQXNzZXJ0KGJtc19pc19lbXB0eShub2RlLT5hc19uZWVkcmVxdWVzdCkpOwor CQkJQXNzZXJ0KGJtc19pc19lbXB0eShub2RlLT5hcy5uZWVkcmVxdWVzdCkpOwogCQl9CiAKIAkJ LyoKIAkJICogZmlndXJlIG91dCB3aGljaCBzeW5jIHN1YnBsYW4gd2UgYXJlIGN1cnJlbnRseSBw cm9jZXNzaW5nCiAJCSAqLwotCQlBc3NlcnQobm9kZS0+YXNfd2hpY2hwbGFuID49IDAgJiYgbm9k ZS0+YXNfd2hpY2hwbGFuIDwgbm9kZS0+YXNfbnBsYW5zKTsKLQkJc3Vibm9kZSA9IG5vZGUtPmFw cGVuZHBsYW5zW25vZGUtPmFzX3doaWNocGxhbl07CisJCUFzc2VydChub2RlLT5hc193aGljaHBs YW4gPj0gMCAmJiBub2RlLT5hc193aGljaHBsYW4gPCBub2RlLT5hcy5ucGxhbnMpOworCQlzdWJu b2RlID0gbm9kZS0+YXMucGxhbnNbbm9kZS0+YXNfd2hpY2hwbGFuXTsKIAogCQkvKgogCQkgKiBn ZXQgYSB0dXBsZSBmcm9tIHRoZSBzdWJwbGFuCkBAIC0zODUsNyArMjM2LDcgQEAgRXhlY0FwcGVu ZChQbGFuU3RhdGUgKnBzdGF0ZSkKIAogCQkvKiBjaG9vc2UgbmV3IHN5bmMgc3VicGxhbjsgaWYg bm8gc3luYy9hc3luYyBzdWJwbGFucywgd2UncmUgZG9uZSAqLwogCQlpZiAoIW5vZGUtPmNob29z ZV9uZXh0X3N1YnBsYW4obm9kZSkgJiYgbm9kZS0+YXNfbmFzeW5jcmVtYWluID09IDApCi0JCQly ZXR1cm4gRXhlY0NsZWFyVHVwbGUobm9kZS0+cHMucHNfUmVzdWx0VHVwbGVTbG90KTsKKwkJCXJl dHVybiBFeGVjQ2xlYXJUdXBsZShub2RlLT5hcy5wcy5wc19SZXN1bHRUdXBsZVNsb3QpOwogCX0K IH0KIApAQCAtNDAwLDgxICsyNTEsMjIgQEAgRXhlY0FwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkK IHZvaWQKIEV4ZWNFbmRBcHBlbmQoQXBwZW5kU3RhdGUgKm5vZGUpCiB7Ci0JUGxhblN0YXRlICoq YXBwZW5kcGxhbnM7Ci0JaW50CQkJbnBsYW5zOwotCWludAkJCWk7Ci0KLQkvKgotCSAqIGdldCBp bmZvcm1hdGlvbiBmcm9tIHRoZSBub2RlCi0JICovCi0JYXBwZW5kcGxhbnMgPSBub2RlLT5hcHBl bmRwbGFuczsKLQlucGxhbnMgPSBub2RlLT5hc19ucGxhbnM7Ci0KLQkvKgotCSAqIHNodXQgZG93 biBlYWNoIG9mIHRoZSBzdWJzY2FucwotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBucGxhbnM7IGkr KykKLQkJRXhlY0VuZE5vZGUoYXBwZW5kcGxhbnNbaV0pOworCUV4ZWNFbmRBcHBlbmRlcigmbm9k ZS0+YXMpOwogfQogCiB2b2lkCiBFeGVjUmVTY2FuQXBwZW5kKEFwcGVuZFN0YXRlICpub2RlKQog ewotCWludAkJCW5hc3luY3BsYW5zID0gbm9kZS0+YXNfbmFzeW5jcGxhbnM7Ci0JaW50CQkJaTsK LQotCS8qCi0JICogSWYgYW55IFBBUkFNX0VYRUMgUGFyYW1zIHVzZWQgaW4gcHJ1bmluZyBleHBy ZXNzaW9ucyBoYXZlIGNoYW5nZWQsIHRoZW4KLQkgKiB3ZSdkIGJldHRlciB1bnNldCB0aGUgdmFs aWQgc3VicGxhbnMgc28gdGhhdCB0aGV5IGFyZSByZXNlbGVjdGVkIGZvcgotCSAqIHRoZSBuZXcg cGFyYW1ldGVyIHZhbHVlcy4KLQkgKi8KLQlpZiAobm9kZS0+YXNfcHJ1bmVfc3RhdGUgJiYKLQkJ Ym1zX292ZXJsYXAobm9kZS0+cHMuY2hnUGFyYW0sCi0JCQkJCW5vZGUtPmFzX3BydW5lX3N0YXRl LT5leGVjcGFyYW1pZHMpKQotCXsKLQkJbm9kZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmll ZCA9IGZhbHNlOwotCQlibXNfZnJlZShub2RlLT5hc192YWxpZF9zdWJwbGFucyk7Ci0JCW5vZGUt PmFzX3ZhbGlkX3N1YnBsYW5zID0gTlVMTDsKLQkJYm1zX2ZyZWUobm9kZS0+YXNfdmFsaWRfYXN5 bmNwbGFucyk7Ci0JCW5vZGUtPmFzX3ZhbGlkX2FzeW5jcGxhbnMgPSBOVUxMOwotCX0KLQotCWZv ciAoaSA9IDA7IGkgPCBub2RlLT5hc19ucGxhbnM7IGkrKykKLQl7Ci0JCVBsYW5TdGF0ZSAgKnN1 Ym5vZGUgPSBub2RlLT5hcHBlbmRwbGFuc1tpXTsKIAotCQkvKgotCQkgKiBFeGVjUmVTY2FuIGRv ZXNuJ3Qga25vdyBhYm91dCBteSBzdWJwbGFucywgc28gSSBoYXZlIHRvIGRvCi0JCSAqIGNoYW5n ZWQtcGFyYW1ldGVyIHNpZ25hbGluZyBteXNlbGYuCi0JCSAqLwotCQlpZiAobm9kZS0+cHMuY2hn UGFyYW0gIT0gTlVMTCkKLQkJCVVwZGF0ZUNoYW5nZWRQYXJhbVNldChzdWJub2RlLCBub2RlLT5w cy5jaGdQYXJhbSk7CisJaW50CQkJbmFzeW5jcGxhbnMgPSBub2RlLT5hcy5uYXN5bmNwbGFuczsK IAotCQkvKgotCQkgKiBJZiBjaGdQYXJhbSBvZiBzdWJub2RlIGlzIG5vdCBudWxsIHRoZW4gcGxh biB3aWxsIGJlIHJlLXNjYW5uZWQgYnkKLQkJICogZmlyc3QgRXhlY1Byb2NOb2RlIG9yIGJ5IGZp cnN0IEV4ZWNBc3luY1JlcXVlc3QuCi0JCSAqLwotCQlpZiAoc3Vibm9kZS0+Y2hnUGFyYW0gPT0g TlVMTCkKLQkJCUV4ZWNSZVNjYW4oc3Vibm9kZSk7Ci0JfQorCUV4ZWNSZVNjYW5BcHBlbmRlcigm bm9kZS0+YXMpOwogCi0JLyogUmVzZXQgYXN5bmMgc3RhdGUgKi8KKwkvKiBSZXNldCBzcGVjaWZp YyBhcHBlbmQgYXN5bmMgc3RhdGUgKi8KIAlpZiAobmFzeW5jcGxhbnMgPiAwKQogCXsKLQkJaSA9 IC0xOwotCQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+YXNfYXN5bmNwbGFucywg aSkpID49IDApCi0JCXsKLQkJCUFzeW5jUmVxdWVzdCAqYXJlcSA9IG5vZGUtPmFzX2FzeW5jcmVx dWVzdHNbaV07Ci0KLQkJCWFyZXEtPmNhbGxiYWNrX3BlbmRpbmcgPSBmYWxzZTsKLQkJCWFyZXEt PnJlcXVlc3RfY29tcGxldGUgPSBmYWxzZTsKLQkJCWFyZXEtPnJlc3VsdCA9IE5VTEw7Ci0JCX0K LQogCQlub2RlLT5hc19uYXN5bmNyZXN1bHRzID0gMDsKIAkJbm9kZS0+YXNfbmFzeW5jcmVtYWlu ID0gMDsKLQkJYm1zX2ZyZWUobm9kZS0+YXNfbmVlZHJlcXVlc3QpOwotCQlub2RlLT5hc19uZWVk cmVxdWVzdCA9IE5VTEw7CiAJfQogCiAJLyogTGV0IGNob29zZV9uZXh0X3N1YnBsYW5fKiBmdW5j dGlvbiBoYW5kbGUgc2V0dGluZyB0aGUgZmlyc3Qgc3VicGxhbiAqLwpAQCAtNTAxLDcgKzI5Myw3 IEBAIEV4ZWNBcHBlbmRFc3RpbWF0ZShBcHBlbmRTdGF0ZSAqbm9kZSwKIHsKIAlub2RlLT5wc3Rh dGVfbGVuID0KIAkJYWRkX3NpemUob2Zmc2V0b2YoUGFyYWxsZWxBcHBlbmRTdGF0ZSwgcGFfZmlu aXNoZWQpLAotCQkJCSBzaXplb2YoYm9vbCkgKiBub2RlLT5hc19ucGxhbnMpOworCQkJCSBzaXpl b2YoYm9vbCkgKiBub2RlLT5hcy5ucGxhbnMpOwogCiAJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygm cGN4dC0+ZXN0aW1hdG9yLCBub2RlLT5wc3RhdGVfbGVuKTsKIAlzaG1fdG9jX2VzdGltYXRlX2tl eXMoJnBjeHQtPmVzdGltYXRvciwgMSk7CkBAIC01MjMsNyArMzE1LDcgQEAgRXhlY0FwcGVuZElu aXRpYWxpemVEU00oQXBwZW5kU3RhdGUgKm5vZGUsCiAJcHN0YXRlID0gc2htX3RvY19hbGxvY2F0 ZShwY3h0LT50b2MsIG5vZGUtPnBzdGF0ZV9sZW4pOwogCW1lbXNldChwc3RhdGUsIDAsIG5vZGUt PnBzdGF0ZV9sZW4pOwogCUxXTG9ja0luaXRpYWxpemUoJnBzdGF0ZS0+cGFfbG9jaywgTFdUUkFO Q0hFX1BBUkFMTEVMX0FQUEVORCk7Ci0Jc2htX3RvY19pbnNlcnQocGN4dC0+dG9jLCBub2RlLT5w cy5wbGFuLT5wbGFuX25vZGVfaWQsIHBzdGF0ZSk7CisJc2htX3RvY19pbnNlcnQocGN4dC0+dG9j LCBub2RlLT5hcy5wcy5wbGFuLT5wbGFuX25vZGVfaWQsIHBzdGF0ZSk7CiAKIAlub2RlLT5hc19w c3RhdGUgPSBwc3RhdGU7CiAJbm9kZS0+Y2hvb3NlX25leHRfc3VicGxhbiA9IGNob29zZV9uZXh0 X3N1YnBsYW5fZm9yX2xlYWRlcjsKQEAgLTU0MSw3ICszMzMsNyBAQCBFeGVjQXBwZW5kUmVJbml0 aWFsaXplRFNNKEFwcGVuZFN0YXRlICpub2RlLCBQYXJhbGxlbENvbnRleHQgKnBjeHQpCiAJUGFy YWxsZWxBcHBlbmRTdGF0ZSAqcHN0YXRlID0gbm9kZS0+YXNfcHN0YXRlOwogCiAJcHN0YXRlLT5w YV9uZXh0X3BsYW4gPSAwOwotCW1lbXNldChwc3RhdGUtPnBhX2ZpbmlzaGVkLCAwLCBzaXplb2Yo Ym9vbCkgKiBub2RlLT5hc19ucGxhbnMpOworCW1lbXNldChwc3RhdGUtPnBhX2ZpbmlzaGVkLCAw LCBzaXplb2YoYm9vbCkgKiBub2RlLT5hcy5ucGxhbnMpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01 NTQsNyArMzQ2LDcgQEAgRXhlY0FwcGVuZFJlSW5pdGlhbGl6ZURTTShBcHBlbmRTdGF0ZSAqbm9k ZSwgUGFyYWxsZWxDb250ZXh0ICpwY3h0KQogdm9pZAogRXhlY0FwcGVuZEluaXRpYWxpemVXb3Jr ZXIoQXBwZW5kU3RhdGUgKm5vZGUsIFBhcmFsbGVsV29ya2VyQ29udGV4dCAqcHdjeHQpCiB7Ci0J bm9kZS0+YXNfcHN0YXRlID0gc2htX3RvY19sb29rdXAocHdjeHQtPnRvYywgbm9kZS0+cHMucGxh bi0+cGxhbl9ub2RlX2lkLCBmYWxzZSk7CisJbm9kZS0+YXNfcHN0YXRlID0gc2htX3RvY19sb29r dXAocHdjeHQtPnRvYywgbm9kZS0+YXMucHMucGxhbi0+cGxhbl9ub2RlX2lkLCBmYWxzZSk7CiAJ bm9kZS0+Y2hvb3NlX25leHRfc3VicGxhbiA9IGNob29zZV9uZXh0X3N1YnBsYW5fZm9yX3dvcmtl cjsKIH0KIApAQCAtNTcyLDcgKzM2NCw3IEBAIGNob29zZV9uZXh0X3N1YnBsYW5fbG9jYWxseShB cHBlbmRTdGF0ZSAqbm9kZSkKIAlpbnQJCQluZXh0cGxhbjsKIAogCS8qIFdlIHNob3VsZCBuZXZl ciBiZSBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gc3VicGxhbnMgKi8KLQlBc3NlcnQobm9kZS0+ YXNfbnBsYW5zID4gMCk7CisJQXNzZXJ0KG5vZGUtPmFzLm5wbGFucyA+IDApOwogCiAJLyogTm90 aGluZyB0byBkbyBpZiBzeW5jZG9uZSAqLwogCWlmIChub2RlLT5hc19zeW5jZG9uZSkKQEAgLTU4 NywzMyArMzc5LDMzIEBAIGNob29zZV9uZXh0X3N1YnBsYW5fbG9jYWxseShBcHBlbmRTdGF0ZSAq bm9kZSkKIAkgKi8KIAlpZiAod2hpY2hwbGFuID09IElOVkFMSURfU1VCUExBTl9JTkRFWCkKIAl7 Ci0JCWlmIChub2RlLT5hc19uYXN5bmNwbGFucyA+IDApCisJCWlmIChub2RlLT5hcy5uYXN5bmNw bGFucyA+IDApCiAJCXsKIAkJCS8qIFdlJ2QgaGF2ZSBmaWxsZWQgYXNfdmFsaWRfc3VicGxhbnMg YWxyZWFkeSAqLwotCQkJQXNzZXJ0KG5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQp OworCQkJQXNzZXJ0KG5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpOwogCQl9Ci0J CWVsc2UgaWYgKCFub2RlLT5hc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKQorCQllbHNlIGlm ICghbm9kZS0+YXMudmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKIAkJewotCQkJbm9kZS0+YXNf dmFsaWRfc3VicGxhbnMgPQotCQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5hc19w cnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOwotCQkJbm9kZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRl bnRpZmllZCA9IHRydWU7CisJCQlub2RlLT5hcy52YWxpZF9zdWJwbGFucyA9CisJCQkJRXhlY0Zp bmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzLnBydW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7CisJ CQlub2RlLT5hcy52YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKIAkJfQogCiAJCXdo aWNocGxhbiA9IC0xOwogCX0KIAogCS8qIEVuc3VyZSB3aGljaHBsYW4gaXMgd2l0aGluIHRoZSBl eHBlY3RlZCByYW5nZSAqLwotCUFzc2VydCh3aGljaHBsYW4gPj0gLTEgJiYgd2hpY2hwbGFuIDw9 IG5vZGUtPmFzX25wbGFucyk7CisJQXNzZXJ0KHdoaWNocGxhbiA+PSAtMSAmJiB3aGljaHBsYW4g PD0gbm9kZS0+YXMubnBsYW5zKTsKIAotCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKG5vZGUt PnBzLnN0YXRlLT5lc19kaXJlY3Rpb24pKQotCQluZXh0cGxhbiA9IGJtc19uZXh0X21lbWJlcihu b2RlLT5hc192YWxpZF9zdWJwbGFucywgd2hpY2hwbGFuKTsKKwlpZiAoU2NhbkRpcmVjdGlvbklz Rm9yd2FyZChub2RlLT5hcy5wcy5zdGF0ZS0+ZXNfZGlyZWN0aW9uKSkKKwkJbmV4dHBsYW4gPSBi bXNfbmV4dF9tZW1iZXIobm9kZS0+YXMudmFsaWRfc3VicGxhbnMsIHdoaWNocGxhbik7CiAJZWxz ZQotCQluZXh0cGxhbiA9IGJtc19wcmV2X21lbWJlcihub2RlLT5hc192YWxpZF9zdWJwbGFucywg d2hpY2hwbGFuKTsKKwkJbmV4dHBsYW4gPSBibXNfcHJldl9tZW1iZXIobm9kZS0+YXMudmFsaWRf c3VicGxhbnMsIHdoaWNocGxhbik7CiAKIAlpZiAobmV4dHBsYW4gPCAwKQogCXsKIAkJLyogU2V0 IGFzX3N5bmNkb25lIGlmIGluIGFzeW5jIG1vZGUgKi8KLQkJaWYgKG5vZGUtPmFzX25hc3luY3Bs YW5zID4gMCkKKwkJaWYgKG5vZGUtPmFzLm5hc3luY3BsYW5zID4gMCkKIAkJCW5vZGUtPmFzX3N5 bmNkb25lID0gdHJ1ZTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTYzNywxMCArNDI5LDEwIEBA IGNob29zZV9uZXh0X3N1YnBsYW5fZm9yX2xlYWRlcihBcHBlbmRTdGF0ZSAqbm9kZSkKIAlQYXJh bGxlbEFwcGVuZFN0YXRlICpwc3RhdGUgPSBub2RlLT5hc19wc3RhdGU7CiAKIAkvKiBCYWNrd2Fy ZCBzY2FuIGlzIG5vdCBzdXBwb3J0ZWQgYnkgcGFyYWxsZWwtYXdhcmUgcGxhbnMgKi8KLQlBc3Nl cnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChub2RlLT5wcy5zdGF0ZS0+ZXNfZGlyZWN0aW9uKSk7 CisJQXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQobm9kZS0+YXMucHMuc3RhdGUtPmVzX2Rp cmVjdGlvbikpOwogCiAJLyogV2Ugc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFy ZSBubyBzdWJwbGFucyAqLwotCUFzc2VydChub2RlLT5hc19ucGxhbnMgPiAwKTsKKwlBc3NlcnQo bm9kZS0+YXMubnBsYW5zID4gMCk7CiAKIAlMV0xvY2tBY3F1aXJlKCZwc3RhdGUtPnBhX2xvY2ss IExXX0VYQ0xVU0lWRSk7CiAKQEAgLTY1MiwxOCArNDQ0LDE4IEBAIGNob29zZV9uZXh0X3N1YnBs YW5fZm9yX2xlYWRlcihBcHBlbmRTdGF0ZSAqbm9kZSkKIAllbHNlCiAJewogCQkvKiBTdGFydCB3 aXRoIGxhc3Qgc3VicGxhbi4gKi8KLQkJbm9kZS0+YXNfd2hpY2hwbGFuID0gbm9kZS0+YXNfbnBs YW5zIC0gMTsKKwkJbm9kZS0+YXNfd2hpY2hwbGFuID0gbm9kZS0+YXMubnBsYW5zIC0gMTsKIAog CQkvKgogCQkgKiBJZiB3ZSd2ZSB5ZXQgdG8gZGV0ZXJtaW5lIHRoZSB2YWxpZCBzdWJwbGFucyB0 aGVuIGRvIHNvIG5vdy4gIElmCiAJCSAqIHJ1bi10aW1lIHBydW5pbmcgaXMgZGlzYWJsZWQgdGhl biB0aGUgdmFsaWQgc3VicGxhbnMgd2lsbCBhbHdheXMgYmUKIAkJICogc2V0IHRvIGFsbCBzdWJw bGFucy4KIAkJICovCi0JCWlmICghbm9kZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkK KwkJaWYgKCFub2RlLT5hcy52YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKQogCQl7Ci0JCQlub2Rl LT5hc192YWxpZF9zdWJwbGFucyA9Ci0JCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUt PmFzX3BydW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7Ci0JCQlub2RlLT5hc192YWxpZF9zdWJwbGFu c19pZGVudGlmaWVkID0gdHJ1ZTsKKwkJCW5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zID0KKwkJCQlF eGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+YXMucHJ1bmVfc3RhdGUsIGZhbHNlLCBOVUxM KTsKKwkJCW5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0cnVlOwogCiAJCQkv KgogCQkJICogTWFyayBlYWNoIGludmFsaWQgcGxhbiBhcyBmaW5pc2hlZCB0byBhbGxvdyB0aGUg bG9vcCBiZWxvdyB0bwpAQCAtNzE5LDEwICs1MTEsMTAgQEAgY2hvb3NlX25leHRfc3VicGxhbl9m b3Jfd29ya2VyKEFwcGVuZFN0YXRlICpub2RlKQogCVBhcmFsbGVsQXBwZW5kU3RhdGUgKnBzdGF0 ZSA9IG5vZGUtPmFzX3BzdGF0ZTsKIAogCS8qIEJhY2t3YXJkIHNjYW4gaXMgbm90IHN1cHBvcnRl ZCBieSBwYXJhbGxlbC1hd2FyZSBwbGFucyAqLwotCUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3 YXJkKG5vZGUtPnBzLnN0YXRlLT5lc19kaXJlY3Rpb24pKTsKKwlBc3NlcnQoU2NhbkRpcmVjdGlv bklzRm9yd2FyZChub2RlLT5hcy5wcy5zdGF0ZS0+ZXNfZGlyZWN0aW9uKSk7CiAKIAkvKiBXZSBz aG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIHN1YnBsYW5zICovCi0JQXNz ZXJ0KG5vZGUtPmFzX25wbGFucyA+IDApOworCUFzc2VydChub2RlLT5hcy5ucGxhbnMgPiAwKTsK IAogCUxXTG9ja0FjcXVpcmUoJnBzdGF0ZS0+cGFfbG9jaywgTFdfRVhDTFVTSVZFKTsKIApAQCAt NzM1LDExICs1MjcsMTEgQEAgY2hvb3NlX25leHRfc3VicGxhbl9mb3Jfd29ya2VyKEFwcGVuZFN0 YXRlICpub2RlKQogCSAqIHJ1bi10aW1lIHBydW5pbmcgaXMgZGlzYWJsZWQgdGhlbiB0aGUgdmFs aWQgc3VicGxhbnMgd2lsbCBhbHdheXMgYmUgc2V0CiAJICogdG8gYWxsIHN1YnBsYW5zLgogCSAq LwotCWVsc2UgaWYgKCFub2RlLT5hc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKQorCWVsc2Ug aWYgKCFub2RlLT5hcy52YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKQogCXsKLQkJbm9kZS0+YXNf dmFsaWRfc3VicGxhbnMgPQotCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzX3By dW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7Ci0JCW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zX2lkZW50 aWZpZWQgPSB0cnVlOworCQlub2RlLT5hcy52YWxpZF9zdWJwbGFucyA9CisJCQlFeGVjRmluZE1h dGNoaW5nU3ViUGxhbnMobm9kZS0+YXMucHJ1bmVfc3RhdGUsIGZhbHNlLCBOVUxMKTsKKwkJbm9k ZS0+YXMudmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7CiAKIAkJbWFya19pbnZhbGlk X3N1YnBsYW5zX2FzX2ZpbmlzaGVkKG5vZGUpOwogCX0KQEAgLTc1OSw3ICs1NTEsNyBAQCBjaG9v c2VfbmV4dF9zdWJwbGFuX2Zvcl93b3JrZXIoQXBwZW5kU3RhdGUgKm5vZGUpCiAJewogCQlpbnQJ CQluZXh0cGxhbjsKIAotCQluZXh0cGxhbiA9IGJtc19uZXh0X21lbWJlcihub2RlLT5hc192YWxp ZF9zdWJwbGFucywKKwkJbmV4dHBsYW4gPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+YXMudmFsaWRf c3VicGxhbnMsCiAJCQkJCQkJCSAgIHBzdGF0ZS0+cGFfbmV4dF9wbGFuKTsKIAkJaWYgKG5leHRw bGFuID49IDApCiAJCXsKQEAgLTc3Miw3ICs1NjQsNyBAQCBjaG9vc2VfbmV4dF9zdWJwbGFuX2Zv cl93b3JrZXIoQXBwZW5kU3RhdGUgKm5vZGUpCiAJCQkgKiBUcnkgbG9vcGluZyBiYWNrIHRvIHRo ZSBmaXJzdCB2YWxpZCBwYXJ0aWFsIHBsYW4sIGlmIHRoZXJlIGlzCiAJCQkgKiBvbmUuICBJZiB0 aGVyZSBpc24ndCwgYXJyYW5nZSB0byBiYWlsIG91dCBiZWxvdy4KIAkJCSAqLwotCQkJbmV4dHBs YW4gPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMsCisJCQluZXh0cGxh biA9IGJtc19uZXh0X21lbWJlcihub2RlLT5hcy52YWxpZF9zdWJwbGFucywKIAkJCQkJCQkJCSAg IG5vZGUtPmFzX2ZpcnN0X3BhcnRpYWxfcGxhbiAtIDEpOwogCQkJcHN0YXRlLT5wYV9uZXh0X3Bs YW4gPQogCQkJCW5leHRwbGFuIDwgMCA/IG5vZGUtPmFzX3doaWNocGxhbiA6IG5leHRwbGFuOwpA QCAtNzk3LDcgKzU4OSw3IEBAIGNob29zZV9uZXh0X3N1YnBsYW5fZm9yX3dvcmtlcihBcHBlbmRT dGF0ZSAqbm9kZSkKIAogCS8qIFBpY2sgdGhlIHBsYW4gd2UgZm91bmQsIGFuZCBhZHZhbmNlIHBh X25leHRfcGxhbiBvbmUgbW9yZSB0aW1lLiAqLwogCW5vZGUtPmFzX3doaWNocGxhbiA9IHBzdGF0 ZS0+cGFfbmV4dF9wbGFuOwotCXBzdGF0ZS0+cGFfbmV4dF9wbGFuID0gYm1zX25leHRfbWVtYmVy KG5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zLAorCXBzdGF0ZS0+cGFfbmV4dF9wbGFuID0gYm1zX25l eHRfbWVtYmVyKG5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zLAogCQkJCQkJCQkJCSAgIHBzdGF0ZS0+ cGFfbmV4dF9wbGFuKTsKIAogCS8qCkBAIC04MDYsNyArNTk4LDcgQEAgY2hvb3NlX25leHRfc3Vi cGxhbl9mb3Jfd29ya2VyKEFwcGVuZFN0YXRlICpub2RlKQogCSAqLwogCWlmIChwc3RhdGUtPnBh X25leHRfcGxhbiA8IDApCiAJewotCQlpbnQJCQluZXh0cGxhbiA9IGJtc19uZXh0X21lbWJlcihu b2RlLT5hc192YWxpZF9zdWJwbGFucywKKwkJaW50CQkJbmV4dHBsYW4gPSBibXNfbmV4dF9tZW1i ZXIobm9kZS0+YXMudmFsaWRfc3VicGxhbnMsCiAJCQkJCQkJCQkJCSAgIG5vZGUtPmFzX2ZpcnN0 X3BhcnRpYWxfcGxhbiAtIDEpOwogCiAJCWlmIChuZXh0cGxhbiA+PSAwKQpAQCAtODQ4LDE2ICs2 NDAsMTYgQEAgbWFya19pbnZhbGlkX3N1YnBsYW5zX2FzX2ZpbmlzaGVkKEFwcGVuZFN0YXRlICpu b2RlKQogCUFzc2VydChub2RlLT5hc19wc3RhdGUpOwogCiAJLyogU2hvdWxkbid0IGhhdmUgYmVl biBjYWxsZWQgd2hlbiBydW4tdGltZSBwcnVuaW5nIGlzIG5vdCBlbmFibGVkICovCi0JQXNzZXJ0 KG5vZGUtPmFzX3BydW5lX3N0YXRlKTsKKwlBc3NlcnQobm9kZS0+YXMucHJ1bmVfc3RhdGUpOwog CiAJLyogTm90aGluZyB0byBkbyBpZiBhbGwgcGxhbnMgYXJlIHZhbGlkICovCi0JaWYgKGJtc19u dW1fbWVtYmVycyhub2RlLT5hc192YWxpZF9zdWJwbGFucykgPT0gbm9kZS0+YXNfbnBsYW5zKQor CWlmIChibXNfbnVtX21lbWJlcnMobm9kZS0+YXMudmFsaWRfc3VicGxhbnMpID09IG5vZGUtPmFz Lm5wbGFucykKIAkJcmV0dXJuOwogCiAJLyogTWFyayBhbGwgbm9uLXZhbGlkIHBsYW5zIGFzIGZp bmlzaGVkICovCi0JZm9yIChpID0gMDsgaSA8IG5vZGUtPmFzX25wbGFuczsgaSsrKQorCWZvciAo aSA9IDA7IGkgPCBub2RlLT5hcy5ucGxhbnM7IGkrKykKIAl7Ci0JCWlmICghYm1zX2lzX21lbWJl cihpLCBub2RlLT5hc192YWxpZF9zdWJwbGFucykpCisJCWlmICghYm1zX2lzX21lbWJlcihpLCBu b2RlLT5hcy52YWxpZF9zdWJwbGFucykpCiAJCQlub2RlLT5hc19wc3RhdGUtPnBhX2ZpbmlzaGVk W2ldID0gdHJ1ZTsKIAl9CiB9CkBAIC04NzYsNDcgKzY2OCwyNSBAQCBtYXJrX2ludmFsaWRfc3Vi cGxhbnNfYXNfZmluaXNoZWQoQXBwZW5kU3RhdGUgKm5vZGUpCiBzdGF0aWMgdm9pZAogRXhlY0Fw cGVuZEFzeW5jQmVnaW4oQXBwZW5kU3RhdGUgKm5vZGUpCiB7Ci0JaW50CQkJaTsKLQotCS8qIEJh Y2t3YXJkIHNjYW4gaXMgbm90IHN1cHBvcnRlZCBieSBhc3luYy1hd2FyZSBBcHBlbmRzLiAqLwot CUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKG5vZGUtPnBzLnN0YXRlLT5lc19kaXJlY3Rp b24pKTsKLQotCS8qIFdlIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8g c3VicGxhbnMgKi8KLQlBc3NlcnQobm9kZS0+YXNfbnBsYW5zID4gMCk7Ci0KLQkvKiBXZSBzaG91 bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIGFzeW5jIHN1YnBsYW5zLiAqLwot CUFzc2VydChub2RlLT5hc19uYXN5bmNwbGFucyA+IDApOwotCiAJLyogSWYgd2UndmUgeWV0IHRv IGRldGVybWluZSB0aGUgdmFsaWQgc3VicGxhbnMgdGhlbiBkbyBzbyBub3cuICovCi0JaWYgKCFu b2RlLT5hc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKQorCWlmICghbm9kZS0+YXMudmFsaWRf c3VicGxhbnNfaWRlbnRpZmllZCkKIAl7Ci0JCW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zID0KLQkJ CUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5hc19wcnVuZV9zdGF0ZSwgZmFsc2UsIE5V TEwpOwotCQlub2RlLT5hc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKKwkJbm9k ZS0+YXMudmFsaWRfc3VicGxhbnMgPQorCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUt PmFzLnBydW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7CisJCW5vZGUtPmFzLnZhbGlkX3N1YnBsYW5z X2lkZW50aWZpZWQgPSB0cnVlOwogCiAJCWNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKG5vZGUp OwogCX0KIAogCS8qIEluaXRpYWxpemUgc3RhdGUgdmFyaWFibGVzLiAqLwotCW5vZGUtPmFzX3N5 bmNkb25lID0gYm1zX2lzX2VtcHR5KG5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zKTsKLQlub2RlLT5h c19uYXN5bmNyZW1haW4gPSBibXNfbnVtX21lbWJlcnMobm9kZS0+YXNfdmFsaWRfYXN5bmNwbGFu cyk7CisJbm9kZS0+YXNfc3luY2RvbmUgPSBibXNfaXNfZW1wdHkobm9kZS0+YXMudmFsaWRfc3Vi cGxhbnMpOworCW5vZGUtPmFzX25hc3luY3JlbWFpbiA9IGJtc19udW1fbWVtYmVycyhub2RlLT5h cy52YWxpZF9hc3luY3BsYW5zKTsKIAogCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlcmUgYXJlIG5v IHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLwogCWlmIChub2RlLT5hc19uYXN5bmNyZW1haW4gPT0g MCkKIAkJcmV0dXJuOwogCi0JLyogTWFrZSBhIHJlcXVlc3QgZm9yIGVhY2ggb2YgdGhlIHZhbGlk IGFzeW5jIHN1YnBsYW5zLiAqLwotCWkgPSAtMTsKLQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1i ZXIobm9kZS0+YXNfdmFsaWRfYXN5bmNwbGFucywgaSkpID49IDApCi0JewotCQlBc3luY1JlcXVl c3QgKmFyZXEgPSBub2RlLT5hc19hc3luY3JlcXVlc3RzW2ldOwotCi0JCUFzc2VydChhcmVxLT5y ZXF1ZXN0X2luZGV4ID09IGkpOwotCQlBc3NlcnQoIWFyZXEtPmNhbGxiYWNrX3BlbmRpbmcpOwot Ci0JCS8qIERvIHRoZSBhY3R1YWwgd29yay4gKi8KLQkJRXhlY0FzeW5jUmVxdWVzdChhcmVxKTsK LQl9CisJRXhlY0FwcGVuZGVyQXN5bmNCZWdpbigmbm9kZS0+YXMpOwogfQogCiAvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CkBAIC05NjEsNyArNzMxLDcgQEAgRXhlY0FwcGVuZEFzeW5jR2V0TmV4dChBcHBlbmRTdGF0ZSAq bm9kZSwgVHVwbGVUYWJsZVNsb3QgKipyZXN1bHQpCiAJaWYgKG5vZGUtPmFzX3N5bmNkb25lKQog CXsKIAkJQXNzZXJ0KG5vZGUtPmFzX25hc3luY3JlbWFpbiA9PSAwKTsKLQkJKnJlc3VsdCA9IEV4 ZWNDbGVhclR1cGxlKG5vZGUtPnBzLnBzX1Jlc3VsdFR1cGxlU2xvdCk7CisJCSpyZXN1bHQgPSBF eGVjQ2xlYXJUdXBsZShub2RlLT5hcy5wcy5wc19SZXN1bHRUdXBsZVNsb3QpOwogCQlyZXR1cm4g dHJ1ZTsKIAl9CiAKQEAgLTk4MSw3ICs3NTEsNyBAQCBFeGVjQXBwZW5kQXN5bmNSZXF1ZXN0KEFw cGVuZFN0YXRlICpub2RlLCBUdXBsZVRhYmxlU2xvdCAqKnJlc3VsdCkKIAlpbnQJCQlpOwogCiAJ LyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBhcmUgbm8gYXN5bmMgc3VicGxhbnMgbmVlZGluZyBh IG5ldyByZXF1ZXN0LiAqLwotCWlmIChibXNfaXNfZW1wdHkobm9kZS0+YXNfbmVlZHJlcXVlc3Qp KQorCWlmIChibXNfaXNfZW1wdHkobm9kZS0+YXMubmVlZHJlcXVlc3QpKQogCXsKIAkJQXNzZXJ0 KG5vZGUtPmFzX25hc3luY3Jlc3VsdHMgPT0gMCk7CiAJCXJldHVybiBmYWxzZTsKQEAgLTk5NCwx NyArNzY0LDE3IEBAIEV4ZWNBcHBlbmRBc3luY1JlcXVlc3QoQXBwZW5kU3RhdGUgKm5vZGUsIFR1 cGxlVGFibGVTbG90ICoqcmVzdWx0KQogCWlmIChub2RlLT5hc19uYXN5bmNyZXN1bHRzID4gMCkK IAl7CiAJCS0tbm9kZS0+YXNfbmFzeW5jcmVzdWx0czsKLQkJKnJlc3VsdCA9IG5vZGUtPmFzX2Fz eW5jcmVzdWx0c1tub2RlLT5hc19uYXN5bmNyZXN1bHRzXTsKKwkJKnJlc3VsdCA9IG5vZGUtPmFz LmFzeW5jcmVzdWx0c1tub2RlLT5hc19uYXN5bmNyZXN1bHRzXTsKIAkJcmV0dXJuIHRydWU7CiAJ fQogCiAJLyogTWFrZSBhIG5ldyByZXF1ZXN0IGZvciBlYWNoIG9mIHRoZSBhc3luYyBzdWJwbGFu cyB0aGF0IG5lZWQgaXQuICovCi0JbmVlZHJlcXVlc3QgPSBub2RlLT5hc19uZWVkcmVxdWVzdDsK LQlub2RlLT5hc19uZWVkcmVxdWVzdCA9IE5VTEw7CisJbmVlZHJlcXVlc3QgPSBub2RlLT5hcy5u ZWVkcmVxdWVzdDsKKwlub2RlLT5hcy5uZWVkcmVxdWVzdCA9IE5VTEw7CiAJaSA9IC0xOwogCXdo aWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihuZWVkcmVxdWVzdCwgaSkpID49IDApCiAJewotCQlB c3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5hc19hc3luY3JlcXVlc3RzW2ldOworCQlBc3luY1Jl cXVlc3QgKmFyZXEgPSBub2RlLT5hcy5hc3luY3JlcXVlc3RzW2ldOwogCiAJCS8qIERvIHRoZSBh Y3R1YWwgd29yay4gKi8KIAkJRXhlY0FzeW5jUmVxdWVzdChhcmVxKTsKQEAgLTEwMTUsNyArNzg1 LDcgQEAgRXhlY0FwcGVuZEFzeW5jUmVxdWVzdChBcHBlbmRTdGF0ZSAqbm9kZSwgVHVwbGVUYWJs ZVNsb3QgKipyZXN1bHQpCiAJaWYgKG5vZGUtPmFzX25hc3luY3Jlc3VsdHMgPiAwKQogCXsKIAkJ LS1ub2RlLT5hc19uYXN5bmNyZXN1bHRzOwotCQkqcmVzdWx0ID0gbm9kZS0+YXNfYXN5bmNyZXN1 bHRzW25vZGUtPmFzX25hc3luY3Jlc3VsdHNdOworCQkqcmVzdWx0ID0gbm9kZS0+YXMuYXN5bmNy ZXN1bHRzW25vZGUtPmFzX25hc3luY3Jlc3VsdHNdOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKQEAg LTEwMzEsMTA1ICs4MDEsMTIgQEAgRXhlY0FwcGVuZEFzeW5jUmVxdWVzdChBcHBlbmRTdGF0ZSAq bm9kZSwgVHVwbGVUYWJsZVNsb3QgKipyZXN1bHQpCiBzdGF0aWMgdm9pZAogRXhlY0FwcGVuZEFz eW5jRXZlbnRXYWl0KEFwcGVuZFN0YXRlICpub2RlKQogewotCWludAkJCW5ldmVudHMgPSBub2Rl LT5hc19uYXN5bmNwbGFucyArIDI7CiAJbG9uZwkJdGltZW91dCA9IG5vZGUtPmFzX3N5bmNkb25l ID8gLTEgOiAwOwotCVdhaXRFdmVudAlvY2N1cnJlZF9ldmVudFtFVkVOVF9CVUZGRVJfU0laRV07 Ci0JaW50CQkJbm9jY3VycmVkOwotCWludAkJCWk7CiAKIAkvKiBXZSBzaG91bGQgbmV2ZXIgYmUg Y2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLwogCUFzc2Vy dChub2RlLT5hc19uYXN5bmNyZW1haW4gPiAwKTsKIAotCUFzc2VydChub2RlLT5hc19ldmVudHNl dCA9PSBOVUxMKTsKLQlub2RlLT5hc19ldmVudHNldCA9IENyZWF0ZVdhaXRFdmVudFNldChDdXJy ZW50UmVzb3VyY2VPd25lciwgbmV2ZW50cyk7Ci0JQWRkV2FpdEV2ZW50VG9TZXQobm9kZS0+YXNf ZXZlbnRzZXQsIFdMX0VYSVRfT05fUE1fREVBVEgsIFBHSU5WQUxJRF9TT0NLRVQsCi0JCQkJCSAg TlVMTCwgTlVMTCk7Ci0KLQkvKiBHaXZlIGVhY2ggd2FpdGluZyBzdWJwbGFuIGEgY2hhbmNlIHRv IGFkZCBhbiBldmVudC4gKi8KLQlpID0gLTE7Ci0Jd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVy KG5vZGUtPmFzX2FzeW5jcGxhbnMsIGkpKSA+PSAwKQotCXsKLQkJQXN5bmNSZXF1ZXN0ICphcmVx ID0gbm9kZS0+YXNfYXN5bmNyZXF1ZXN0c1tpXTsKLQotCQlpZiAoYXJlcS0+Y2FsbGJhY2tfcGVu ZGluZykKLQkJCUV4ZWNBc3luY0NvbmZpZ3VyZVdhaXQoYXJlcSk7Ci0JfQotCi0JLyoKLQkgKiBO byBuZWVkIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcgaWYgbm9uZSBvZiB0aGUgc3VicGxhbnMgY29u ZmlndXJlZCBhbnkKLQkgKiBldmVudHMuCi0JICovCi0JaWYgKEdldE51bVJlZ2lzdGVyZWRXYWl0 RXZlbnRzKG5vZGUtPmFzX2V2ZW50c2V0KSA9PSAxKQotCXsKLQkJRnJlZVdhaXRFdmVudFNldChu b2RlLT5hc19ldmVudHNldCk7Ci0JCW5vZGUtPmFzX2V2ZW50c2V0ID0gTlVMTDsKLQkJcmV0dXJu OwotCX0KLQotCS8qCi0JICogQWRkIHRoZSBwcm9jZXNzIGxhdGNoIHRvIHRoZSBzZXQsIHNvIHRo YXQgd2Ugd2FrZSB1cCB0byBwcm9jZXNzIHRoZQotCSAqIHN0YW5kYXJkIGludGVycnVwdHMgd2l0 aCBDSEVDS19GT1JfSU5URVJSVVBUUygpLgotCSAqCi0JICogTk9URTogRm9yIGhpc3RvcmljYWwg cmVhc29ucywgaXQncyBpbXBvcnRhbnQgdGhhdCB0aGlzIGlzIGFkZGVkIHRvIHRoZQotCSAqIFdh aXRFdmVudFNldCBhZnRlciB0aGUgRXhlY0FzeW5jQ29uZmlndXJlV2FpdCgpIGNhbGxzLiAgTmFt ZWx5LAotCSAqIHBvc3RncmVzX2ZkdyBjYWxscyAiR2V0TnVtUmVnaXN0ZXJlZFdhaXRFdmVudHMo c2V0KSA9PSAxIiB0byBjaGVjayBpZgotCSAqIGFueSBvdGhlciBldmVudHMgYXJlIGluIHRoZSBz ZXQuICBUaGF0J3MgYSBwb29yIGRlc2lnbiwgaXQncwotCSAqIHF1ZXN0aW9uYWJsZSBmb3IgcG9z dGdyZXNfZmR3IHRvIGJlIGRvaW5nIHRoYXQgaW4gdGhlIGZpcnN0IHBsYWNlLCBidXQKLQkgKiB3 ZSBjYW5ub3QgY2hhbmdlIGl0IG5vdy4gIFRoZSBwYXR0ZXJuIGhhcyBwb3NzaWJseSBiZWVuIGNv cGllZCB0byBvdGhlcgotCSAqIGV4dGVuc2lvbnMgdG9vLgotCSAqLwotCUFkZFdhaXRFdmVudFRv U2V0KG5vZGUtPmFzX2V2ZW50c2V0LCBXTF9MQVRDSF9TRVQsIFBHSU5WQUxJRF9TT0NLRVQsCi0J CQkJCSAgTXlMYXRjaCwgTlVMTCk7Ci0KLQkvKiBSZXR1cm4gYXQgbW9zdCBFVkVOVF9CVUZGRVJf U0laRSBldmVudHMgaW4gb25lIGNhbGwuICovCi0JaWYgKG5ldmVudHMgPiBFVkVOVF9CVUZGRVJf U0laRSkKLQkJbmV2ZW50cyA9IEVWRU5UX0JVRkZFUl9TSVpFOwotCi0JLyoKLQkgKiBJZiB0aGUg dGltZW91dCBpcyAtMSwgd2FpdCB1bnRpbCBhdCBsZWFzdCBvbmUgZXZlbnQgb2NjdXJzLiAgSWYg dGhlCi0JICogdGltZW91dCBpcyAwLCBwb2xsIGZvciBldmVudHMsIGJ1dCBkbyBub3Qgd2FpdCBh dCBhbGwuCi0JICovCi0Jbm9jY3VycmVkID0gV2FpdEV2ZW50U2V0V2FpdChub2RlLT5hc19ldmVu dHNldCwgdGltZW91dCwgb2NjdXJyZWRfZXZlbnQsCi0JCQkJCQkJCSBuZXZlbnRzLCBXQUlUX0VW RU5UX0FQUEVORF9SRUFEWSk7Ci0JRnJlZVdhaXRFdmVudFNldChub2RlLT5hc19ldmVudHNldCk7 Ci0Jbm9kZS0+YXNfZXZlbnRzZXQgPSBOVUxMOwotCWlmIChub2NjdXJyZWQgPT0gMCkKLQkJcmV0 dXJuOwotCi0JLyogRGVsaXZlciBub3RpZmljYXRpb25zLiAqLwotCWZvciAoaSA9IDA7IGkgPCBu b2NjdXJyZWQ7IGkrKykKLQl7Ci0JCVdhaXRFdmVudCAgKncgPSAmb2NjdXJyZWRfZXZlbnRbaV07 Ci0KLQkJLyoKLQkJICogRWFjaCB3YWl0aW5nIHN1YnBsYW4gc2hvdWxkIGhhdmUgcmVnaXN0ZXJl ZCBpdHMgd2FpdCBldmVudCB3aXRoCi0JCSAqIHVzZXJfZGF0YSBwb2ludGluZyBiYWNrIHRvIGl0 cyBBc3luY1JlcXVlc3QuCi0JCSAqLwotCQlpZiAoKHctPmV2ZW50cyAmIFdMX1NPQ0tFVF9SRUFE QUJMRSkgIT0gMCkKLQkJewotCQkJQXN5bmNSZXF1ZXN0ICphcmVxID0gKEFzeW5jUmVxdWVzdCAq KSB3LT51c2VyX2RhdGE7Ci0KLQkJCWlmIChhcmVxLT5jYWxsYmFja19wZW5kaW5nKQotCQkJewot CQkJCS8qCi0JCQkJICogTWFyayBpdCBhcyBubyBsb25nZXIgbmVlZGluZyBhIGNhbGxiYWNrLiAg V2UgbXVzdCBkbyB0aGlzCi0JCQkJICogYmVmb3JlIGRpc3BhdGNoaW5nIHRoZSBjYWxsYmFjayBp biBjYXNlIHRoZSBjYWxsYmFjayByZXNldHMKLQkJCQkgKiB0aGUgZmxhZy4KLQkJCQkgKi8KLQkJ CQlhcmVxLT5jYWxsYmFja19wZW5kaW5nID0gZmFsc2U7Ci0KLQkJCQkvKiBEbyB0aGUgYWN0dWFs IHdvcmsuICovCi0JCQkJRXhlY0FzeW5jTm90aWZ5KGFyZXEpOwotCQkJfQotCQl9Ci0KLQkJLyog SGFuZGxlIHN0YW5kYXJkIGludGVycnVwdHMgKi8KLQkJaWYgKCh3LT5ldmVudHMgJiBXTF9MQVRD SF9TRVQpICE9IDApCi0JCXsKLQkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7Ci0JCQlDSEVDS19GT1Jf SU5URVJSVVBUUygpOwotCQl9Ci0JfQorCUV4ZWNBcHBlbmRlckFzeW5jRXZlbnRXYWl0KCZub2Rl LT5hcywgdGltZW91dCwgV0FJVF9FVkVOVF9BUFBFTkRfUkVBRFkpOwogfQogCiAvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CkBAIC0xMTY1LDE0ICs4NDIsMTQgQEAgRXhlY0FzeW5jQXBwZW5kUmVzcG9uc2UoQXN5bmNSZXF1 ZXN0ICphcmVxKQogCX0KIAogCS8qIFNhdmUgcmVzdWx0IHNvIHdlIGNhbiByZXR1cm4gaXQuICov Ci0JQXNzZXJ0KG5vZGUtPmFzX25hc3luY3Jlc3VsdHMgPCBub2RlLT5hc19uYXN5bmNwbGFucyk7 Ci0Jbm9kZS0+YXNfYXN5bmNyZXN1bHRzW25vZGUtPmFzX25hc3luY3Jlc3VsdHMrK10gPSBzbG90 OworCUFzc2VydChub2RlLT5hc19uYXN5bmNyZXN1bHRzIDwgbm9kZS0+YXMubmFzeW5jcGxhbnMp OworCW5vZGUtPmFzLmFzeW5jcmVzdWx0c1tub2RlLT5hc19uYXN5bmNyZXN1bHRzKytdID0gc2xv dDsKIAogCS8qCiAJICogTWFyayB0aGUgc3VicGxhbiB0aGF0IHJldHVybmVkIGEgcmVzdWx0IGFz IHJlYWR5IGZvciBhIG5ldyByZXF1ZXN0LiAgV2UKIAkgKiBkb24ndCBsYXVuY2ggYW5vdGhlciBv bmUgaGVyZSBpbW1lZGlhdGVseSBiZWNhdXNlIGl0IG1pZ2h0IGNvbXBsZXRlLgogCSAqLwotCW5v ZGUtPmFzX25lZWRyZXF1ZXN0ID0gYm1zX2FkZF9tZW1iZXIobm9kZS0+YXNfbmVlZHJlcXVlc3Qs CisJbm9kZS0+YXMubmVlZHJlcXVlc3QgPSBibXNfYWRkX21lbWJlcihub2RlLT5hcy5uZWVkcmVx dWVzdCwKIAkJCQkJCQkJCQkgIGFyZXEtPnJlcXVlc3RfaW5kZXgpOwogfQogCkBAIC0xMTg3LDEw ICs4NjQsMTAgQEAgRXhlY0FzeW5jQXBwZW5kUmVzcG9uc2UoQXN5bmNSZXF1ZXN0ICphcmVxKQog c3RhdGljIHZvaWQKIGNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKEFwcGVuZFN0YXRlICpub2Rl KQogewotCUFzc2VydChub2RlLT5hc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKTsKKwlBc3Nl cnQobm9kZS0+YXMudmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCk7CiAKIAkvKiBOb3RoaW5nIHRv IGRvIGlmIHRoZXJlIGFyZSBubyB2YWxpZCBzdWJwbGFucy4gKi8KLQlpZiAoYm1zX2lzX2VtcHR5 KG5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zKSkKKwlpZiAoYm1zX2lzX2VtcHR5KG5vZGUtPmFzLnZh bGlkX3N1YnBsYW5zKSkKIAl7CiAJCW5vZGUtPmFzX3N5bmNkb25lID0gdHJ1ZTsKIAkJbm9kZS0+ YXNfbmFzeW5jcmVtYWluID0gMDsKQEAgLTExOTksOCArODc2LDggQEAgY2xhc3NpZnlfbWF0Y2hp bmdfc3VicGxhbnMoQXBwZW5kU3RhdGUgKm5vZGUpCiAKIAkvKiBObyB2YWxpZCBhc3luYyBzdWJw bGFucyBpZGVudGlmaWVkLiAqLwogCWlmICghY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnNfY29t bW9uKAotCQkJCQkJCQkJCSAgICZub2RlLT5hc192YWxpZF9zdWJwbGFucywKLQkJCQkJCQkJCQkg ICBub2RlLT5hc19hc3luY3BsYW5zLAotCQkJCQkJCQkJCSAgICZub2RlLT5hc192YWxpZF9hc3lu Y3BsYW5zKSkKKwkJCQkJCQkJCQkgICAmbm9kZS0+YXMudmFsaWRfc3VicGxhbnMsCisJCQkJCQkJ CQkJICAgbm9kZS0+YXMuYXN5bmNwbGFucywKKwkJCQkJCQkJCQkgICAmbm9kZS0+YXMudmFsaWRf YXN5bmNwbGFucykpCiAJCW5vZGUtPmFzX25hc3luY3JlbWFpbiA9IDA7CiB9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCmluZGV4IGYxYzI2N2ViOWViLi5lMWEyMDdhZWI4NSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMKKysrIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMKQEAgLTM4LDYgKzM4LDcgQEAK IAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRlICJleGVjdXRvci9leGVjQXBwZW5k LmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKICNpbmNsdWRlICJleGVjdXRvci9l eGVjQXN5bmMuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjUGFydGl0aW9uLmgiCkBAIC03Niwx NCArNzcsNyBAQCBNZXJnZUFwcGVuZFN0YXRlICoKIEV4ZWNJbml0TWVyZ2VBcHBlbmQoTWVyZ2VB cHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogewogCU1lcmdlQXBwZW5k U3RhdGUgKm1lcmdlc3RhdGUgPSBtYWtlTm9kZShNZXJnZUFwcGVuZFN0YXRlKTsKLQlQbGFuU3Rh dGUgKiptZXJnZXBsYW5zdGF0ZXM7Ci0JY29uc3QgVHVwbGVUYWJsZVNsb3RPcHMgKm1lcmdlb3Bz OwotCUJpdG1hcHNldCAgKnZhbGlkc3VicGxhbnM7Ci0JaW50CQkJbnBsYW5zOwotCWludAkJCWks Ci0JCQkJajsKLQlCaXRtYXBzZXQgICphc3luY3BsYW5zOwotCWludAkJCW5hc3luY3BsYW5zOwor CWludAkJCWk7CiAKIAkvKiBjaGVjayBmb3IgdW5zdXBwb3J0ZWQgZmxhZ3MgKi8KIAlBc3NlcnQo IShlZmxhZ3MgJiAoRVhFQ19GTEFHX0JBQ0tXQVJEIHwgRVhFQ19GTEFHX01BUkspKSk7CkBAIC05 MSwxNTQgKzg1LDI3IEBAIEV4ZWNJbml0TWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVT dGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCS8qCiAJICogY3JlYXRlIG5ldyBNZXJnZUFwcGVu ZFN0YXRlIGZvciBvdXIgbm9kZQogCSAqLwotCW1lcmdlc3RhdGUtPnBzLnBsYW4gPSAoUGxhbiAq KSBub2RlOwotCW1lcmdlc3RhdGUtPnBzLnN0YXRlID0gZXN0YXRlOwotCW1lcmdlc3RhdGUtPnBz LkV4ZWNQcm9jTm9kZSA9IEV4ZWNNZXJnZUFwcGVuZDsKLQotCS8qIElmIHJ1bi10aW1lIHBhcnRp dGlvbiBwcnVuaW5nIGlzIGVuYWJsZWQsIHRoZW4gc2V0IHRoYXQgdXAgbm93ICovCi0JaWYgKG5v ZGUtPnBhcnRfcHJ1bmVfaW5kZXggPj0gMCkKLQl7Ci0JCVBhcnRpdGlvblBydW5lU3RhdGUgKnBy dW5lc3RhdGU7Ci0KLQkJLyoKLQkJICogU2V0IHVwIHBydW5pbmcgZGF0YSBzdHJ1Y3R1cmUuICBU aGlzIGFsc28gaW5pdGlhbGl6ZXMgdGhlIHNldCBvZgotCQkgKiBzdWJwbGFucyB0byBpbml0aWFs aXplICh2YWxpZHN1YnBsYW5zKSBieSB0YWtpbmcgaW50byBhY2NvdW50IHRoZQotCQkgKiByZXN1 bHQgb2YgcGVyZm9ybWluZyBpbml0aWFsIHBydW5pbmcgaWYgYW55LgotCQkgKi8KLQkJcHJ1bmVz dGF0ZSA9IEV4ZWNJbml0UGFydGl0aW9uRXhlY1BydW5pbmcoJm1lcmdlc3RhdGUtPnBzLAotCQkJ CQkJCQkJCQkJICBsaXN0X2xlbmd0aChub2RlLT5tZXJnZXBsYW5zKSwKLQkJCQkJCQkJCQkJCSAg bm9kZS0+cGFydF9wcnVuZV9pbmRleCwKLQkJCQkJCQkJCQkJCSAgbm9kZS0+YXBwcmVsaWRzLAot CQkJCQkJCQkJCQkJICAmdmFsaWRzdWJwbGFucyk7Ci0JCW1lcmdlc3RhdGUtPm1zX3BydW5lX3N0 YXRlID0gcHJ1bmVzdGF0ZTsKLQkJbnBsYW5zID0gYm1zX251bV9tZW1iZXJzKHZhbGlkc3VicGxh bnMpOwotCi0JCS8qCi0JCSAqIFdoZW4gbm8gcnVuLXRpbWUgcHJ1bmluZyBpcyByZXF1aXJlZCBh bmQgdGhlcmUncyBhdCBsZWFzdCBvbmUKLQkJICogc3VicGxhbiwgd2UgY2FuIGZpbGwgbXNfdmFs aWRfc3VicGxhbnMgaW1tZWRpYXRlbHksIHByZXZlbnRpbmcKLQkJICogbGF0ZXIgY2FsbHMgdG8g RXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zLgotCQkgKi8KLQkJaWYgKCFwcnVuZXN0YXRlLT5kb19l eGVjX3BydW5lICYmIG5wbGFucyA+IDApCi0JCXsKLQkJCW1lcmdlc3RhdGUtPm1zX3ZhbGlkX3N1 YnBsYW5zID0gYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBucGxhbnMgLSAxKTsKLQkJCW1lcmdlc3Rh dGUtPm1zX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0cnVlOwotCQl9Ci0JfQotCWVsc2UK LQl7Ci0JCW5wbGFucyA9IGxpc3RfbGVuZ3RoKG5vZGUtPm1lcmdlcGxhbnMpOwotCi0JCS8qCi0J CSAqIFdoZW4gcnVuLXRpbWUgcGFydGl0aW9uIHBydW5pbmcgaXMgbm90IGVuYWJsZWQgd2UgY2Fu IGp1c3QgbWFyayBhbGwKLQkJICogc3VicGxhbnMgYXMgdmFsaWQ7IHRoZXkgbXVzdCBhbHNvIGFs bCBiZSBpbml0aWFsaXplZC4KLQkJICovCi0JCUFzc2VydChucGxhbnMgPiAwKTsKLQkJbWVyZ2Vz dGF0ZS0+bXNfdmFsaWRfc3VicGxhbnMgPSB2YWxpZHN1YnBsYW5zID0KLQkJCWJtc19hZGRfcmFu Z2UoTlVMTCwgMCwgbnBsYW5zIC0gMSk7Ci0JCW1lcmdlc3RhdGUtPm1zX3ZhbGlkX3N1YnBsYW5z X2lkZW50aWZpZWQgPSB0cnVlOwotCQltZXJnZXN0YXRlLT5tc19wcnVuZV9zdGF0ZSA9IE5VTEw7 Ci0JfQotCi0JbWVyZ2VwbGFuc3RhdGVzID0gcGFsbG9jX2FycmF5KFBsYW5TdGF0ZSAqLCBucGxh bnMpOwotCW1lcmdlc3RhdGUtPm1lcmdlcGxhbnMgPSBtZXJnZXBsYW5zdGF0ZXM7Ci0JbWVyZ2Vz dGF0ZS0+bXNfbnBsYW5zID0gbnBsYW5zOwotCi0JbWVyZ2VzdGF0ZS0+bXNfc2xvdHMgPSBwYWxs b2MwX2FycmF5KFR1cGxlVGFibGVTbG90ICosIG5wbGFucyk7Ci0JbWVyZ2VzdGF0ZS0+bXNfaGVh cCA9IGJpbmFyeWhlYXBfYWxsb2NhdGUobnBsYW5zLCBoZWFwX2NvbXBhcmVfc2xvdHMsCisJbWVy Z2VzdGF0ZS0+bXMucHMucGxhbiA9IChQbGFuICopIG5vZGU7CisJbWVyZ2VzdGF0ZS0+bXMucHMu c3RhdGUgPSBlc3RhdGU7CisJbWVyZ2VzdGF0ZS0+bXMucHMuRXhlY1Byb2NOb2RlID0gRXhlY01l cmdlQXBwZW5kOworCisJLyogSW5pdGlhbGl6ZSBjb21tb24gZmllbGRzICovCisJRXhlY0luaXRB cHBlbmRlcigmbWVyZ2VzdGF0ZS0+bXMsCisJCQkJCSAmbm9kZS0+YXAsCisJCQkJCSBlc3RhdGUs CisJCQkJCSBlZmxhZ3MsCisJCQkJCSAtMSwKKwkJCQkJIE5VTEwpOworCisJaWYgKG1lcmdlc3Rh dGUtPm1zLm5hc3luY3BsYW5zID4gMCAmJiBtZXJnZXN0YXRlLT5tcy52YWxpZF9zdWJwbGFuc19p ZGVudGlmaWVkKQorCQljbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhtZXJnZXN0YXRlKTsKKwor CW1lcmdlc3RhdGUtPm1zX3Nsb3RzID0gcGFsbG9jMF9hcnJheShUdXBsZVRhYmxlU2xvdCAqLCBt ZXJnZXN0YXRlLT5tcy5ucGxhbnMpOworCW1lcmdlc3RhdGUtPm1zX2hlYXAgPSBiaW5hcnloZWFw X2FsbG9jYXRlKG1lcmdlc3RhdGUtPm1zLm5wbGFucywgaGVhcF9jb21wYXJlX3Nsb3RzLAogCQkJ CQkJCQkJCQkgIG1lcmdlc3RhdGUpOwogCi0JLyoKLQkgKiBjYWxsIEV4ZWNJbml0Tm9kZSBvbiBl YWNoIG9mIHRoZSB2YWxpZCBwbGFucyB0byBiZSBleGVjdXRlZCBhbmQgc2F2ZQotCSAqIHRoZSBy ZXN1bHRzIGludG8gdGhlIG1lcmdlcGxhbnN0YXRlcyBhcnJheS4KLQkgKi8KLQlqID0gMDsKLQlh c3luY3BsYW5zID0gTlVMTDsKLQluYXN5bmNwbGFucyA9IDA7Ci0KLQlpID0gLTE7Ci0Jd2hpbGUg KChpID0gYm1zX25leHRfbWVtYmVyKHZhbGlkc3VicGxhbnMsIGkpKSA+PSAwKQotCXsKLQkJUGxh bgkgICAqaW5pdE5vZGUgPSAoUGxhbiAqKSBsaXN0X250aChub2RlLT5tZXJnZXBsYW5zLCBpKTsK LQotCQkvKgotCQkgKiBSZWNvcmQgYXN5bmMgc3VicGxhbnMuICBXaGVuIGV4ZWN1dGluZyBFdmFs UGxhblF1YWwsIHdlIHRyZWF0IHRoZW0KLQkJICogYXMgc3luYyBvbmVzOyBkb24ndCBkbyB0aGlz IHdoZW4gaW5pdGlhbGl6aW5nIGFuIEV2YWxQbGFuUXVhbCBwbGFuCi0JCSAqIHRyZWUuCi0JCSAq LwotCQlpZiAoaW5pdE5vZGUtPmFzeW5jX2NhcGFibGUgJiYgZXN0YXRlLT5lc19lcHFfYWN0aXZl ID09IE5VTEwpCi0JCXsKLQkJCWFzeW5jcGxhbnMgPSBibXNfYWRkX21lbWJlcihhc3luY3BsYW5z LCBqKTsKLQkJCW5hc3luY3BsYW5zKys7Ci0JCX0KLQotCQltZXJnZXBsYW5zdGF0ZXNbaisrXSA9 IEV4ZWNJbml0Tm9kZShpbml0Tm9kZSwgZXN0YXRlLCBlZmxhZ3MpOwotCX0KLQotCS8qCi0JICog SW5pdGlhbGl6ZSBNZXJnZUFwcGVuZCdzIHJlc3VsdCB0dXBsZSB0eXBlIGFuZCBzbG90LiAgSWYg dGhlIGNoaWxkCi0JICogcGxhbnMgYWxsIHByb2R1Y2UgdGhlIHNhbWUgZml4ZWQgc2xvdCB0eXBl LCB3ZSBjYW4gdXNlIHRoYXQgc2xvdCB0eXBlOwotCSAqIG90aGVyd2lzZSBtYWtlIGEgdmlydHVh bCBzbG90LiAgKE5vdGUgdGhhdCB0aGUgcmVzdWx0IHNsb3QgaXRzZWxmIGlzCi0JICogdXNlZCBv bmx5IHRvIHJldHVybiBhIG51bGwgdHVwbGUgYXQgZW5kIG9mIGV4ZWN1dGlvbjsgcmVhbCB0dXBs ZXMgYXJlCi0JICogcmV0dXJuZWQgdG8gdGhlIGNhbGxlciBpbiB0aGUgY2hpbGRyZW4ncyBvd24g cmVzdWx0IHNsb3RzLiAgV2hhdCB3ZSBhcmUKLQkgKiBkb2luZyBoZXJlIGlzIGFsbG93aW5nIHRo ZSBwYXJlbnQgcGxhbiBub2RlIHRvIG9wdGltaXplIGlmIHRoZQotCSAqIE1lcmdlQXBwZW5kIHdp bGwgcmV0dXJuIG9ubHkgb25lIGtpbmQgb2Ygc2xvdC4pCi0JICovCi0JbWVyZ2VvcHMgPSBFeGVj R2V0Q29tbW9uU2xvdE9wcyhtZXJnZXBsYW5zdGF0ZXMsIGopOwotCWlmIChtZXJnZW9wcyAhPSBO VUxMKQotCXsKLQkJRXhlY0luaXRSZXN1bHRUdXBsZVNsb3RUTCgmbWVyZ2VzdGF0ZS0+cHMsIG1l cmdlb3BzKTsKLQl9Ci0JZWxzZQotCXsKLQkJRXhlY0luaXRSZXN1bHRUdXBsZVNsb3RUTCgmbWVy Z2VzdGF0ZS0+cHMsICZUVFNPcHNWaXJ0dWFsKTsKLQkJLyogc2hvdyB0aGF0IHRoZSBvdXRwdXQg c2xvdCB0eXBlIGlzIG5vdCBmaXhlZCAqLwotCQltZXJnZXN0YXRlLT5wcy5yZXN1bHRvcHNzZXQg PSB0cnVlOwotCQltZXJnZXN0YXRlLT5wcy5yZXN1bHRvcHNmaXhlZCA9IGZhbHNlOwotCX0KLQot CS8qCi0JICogTWlzY2VsbGFuZW91cyBpbml0aWFsaXphdGlvbgotCSAqLwotCW1lcmdlc3RhdGUt PnBzLnBzX1Byb2pJbmZvID0gTlVMTDsKLQotCS8qIEluaXRpYWxpemUgYXN5bmMgc3RhdGUgKi8K LQltZXJnZXN0YXRlLT5tc19hc3luY3BsYW5zID0gYXN5bmNwbGFuczsKLQltZXJnZXN0YXRlLT5t c19uYXN5bmNwbGFucyA9IG5hc3luY3BsYW5zOwotCW1lcmdlc3RhdGUtPm1zX2FzeW5jcmVxdWVz dHMgPSBOVUxMOwotCW1lcmdlc3RhdGUtPm1zX2FzeW5jcmVzdWx0cyA9IE5VTEw7CiAJbWVyZ2Vz dGF0ZS0+bXNfaGFzX2FzeW5jcmVzdWx0cyA9IE5VTEw7CiAJbWVyZ2VzdGF0ZS0+bXNfYXN5bmNy ZW1haW4gPSBOVUxMOwotCW1lcmdlc3RhdGUtPm1zX25lZWRyZXF1ZXN0ID0gTlVMTDsKLQltZXJn ZXN0YXRlLT5tc19ldmVudHNldCA9IE5VTEw7Ci0JbWVyZ2VzdGF0ZS0+bXNfdmFsaWRfYXN5bmNw bGFucyA9IE5VTEw7Ci0KLQlpZiAobmFzeW5jcGxhbnMgPiAwKQotCXsKLQkJbWVyZ2VzdGF0ZS0+ bXNfYXN5bmNyZXF1ZXN0cyA9IChBc3luY1JlcXVlc3QgKiopCi0JCQlwYWxsb2MwKG5wbGFucyAq IHNpemVvZihBc3luY1JlcXVlc3QgKikpOwotCi0JCWkgPSAtMTsKLQkJd2hpbGUgKChpID0gYm1z X25leHRfbWVtYmVyKGFzeW5jcGxhbnMsIGkpKSA+PSAwKQotCQl7Ci0JCQlBc3luY1JlcXVlc3Qg KmFyZXE7Ci0KLQkJCWFyZXEgPSBwYWxsb2Moc2l6ZW9mKEFzeW5jUmVxdWVzdCkpOwotCQkJYXJl cS0+cmVxdWVzdG9yID0gKFBsYW5TdGF0ZSAqKSBtZXJnZXN0YXRlOwotCQkJYXJlcS0+cmVxdWVz dGVlID0gbWVyZ2VwbGFuc3RhdGVzW2ldOwotCQkJYXJlcS0+cmVxdWVzdF9pbmRleCA9IGk7Ci0J CQlhcmVxLT5jYWxsYmFja19wZW5kaW5nID0gZmFsc2U7Ci0JCQlhcmVxLT5yZXF1ZXN0X2NvbXBs ZXRlID0gZmFsc2U7Ci0JCQlhcmVxLT5yZXN1bHQgPSBOVUxMOwotCi0JCQltZXJnZXN0YXRlLT5t c19hc3luY3JlcXVlc3RzW2ldID0gYXJlcTsKLQkJfQotCi0JCW1lcmdlc3RhdGUtPm1zX2FzeW5j cmVzdWx0cyA9IChUdXBsZVRhYmxlU2xvdCAqKikKLQkJCXBhbGxvYzAobnBsYW5zICogc2l6ZW9m KFR1cGxlVGFibGVTbG90ICopKTsKLQotCQlpZiAobWVyZ2VzdGF0ZS0+bXNfdmFsaWRfc3VicGxh bnNfaWRlbnRpZmllZCkKLQkJCWNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKG1lcmdlc3RhdGUp OwotCX0KIAogCS8qCiAJICogaW5pdGlhbGl6ZSBzb3J0LWtleSBpbmZvcm1hdGlvbgpAQCAtMjkz LDIwICsxNjAsMjAgQEAgRXhlY01lcmdlQXBwZW5kKFBsYW5TdGF0ZSAqcHN0YXRlKQogCWlmICgh bm9kZS0+bXNfaW5pdGlhbGl6ZWQpCiAJewogCQkvKiBOb3RoaW5nIHRvIGRvIGlmIGFsbCBzdWJw bGFucyB3ZXJlIHBydW5lZCAqLwotCQlpZiAobm9kZS0+bXNfbnBsYW5zID09IDApCi0JCQlyZXR1 cm4gRXhlY0NsZWFyVHVwbGUobm9kZS0+cHMucHNfUmVzdWx0VHVwbGVTbG90KTsKKwkJaWYgKG5v ZGUtPm1zLm5wbGFucyA9PSAwKQorCQkJcmV0dXJuIEV4ZWNDbGVhclR1cGxlKG5vZGUtPm1zLnBz LnBzX1Jlc3VsdFR1cGxlU2xvdCk7CiAKIAkJLyogSWYgd2UndmUgeWV0IHRvIGRldGVybWluZSB0 aGUgdmFsaWQgc3VicGxhbnMgdGhlbiBkbyBzbyBub3cuICovCi0JCWlmICghbm9kZS0+bXNfdmFs aWRfc3VicGxhbnNfaWRlbnRpZmllZCkKKwkJaWYgKCFub2RlLT5tcy52YWxpZF9zdWJwbGFuc19p ZGVudGlmaWVkKQogCQl7Ci0JCQlub2RlLT5tc192YWxpZF9zdWJwbGFucyA9Ci0JCQkJRXhlY0Zp bmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPm1zX3BydW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7Ci0J CQlub2RlLT5tc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKKwkJCW5vZGUtPm1z LnZhbGlkX3N1YnBsYW5zID0KKwkJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+bXMu cHJ1bmVfc3RhdGUsIGZhbHNlLCBOVUxMKTsKKwkJCW5vZGUtPm1zLnZhbGlkX3N1YnBsYW5zX2lk ZW50aWZpZWQgPSB0cnVlOwogCQkJY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMobm9kZSk7CiAJ CX0KIAogCQkvKiBJZiB0aGVyZSBhcmUgYW55IGFzeW5jIHN1YnBsYW5zLCBiZWdpbiBleGVjdXRp bmcgdGhlbS4gKi8KLQkJaWYgKG5vZGUtPm1zX25hc3luY3BsYW5zID4gMCkKKwkJaWYgKG5vZGUt Pm1zLm5hc3luY3BsYW5zID4gMCkKIAkJCUV4ZWNNZXJnZUFwcGVuZEFzeW5jQmVnaW4obm9kZSk7 CiAKIAkJLyoKQEAgLTMxNCwxNiArMTgxLDE2IEBAIEV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUg KnBzdGF0ZSkKIAkJICogYW5kIHNldCB1cCB0aGUgaGVhcC4KIAkJICovCiAJCWkgPSAtMTsKLQkJ d2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zLCBpKSkg Pj0gMCkKKwkJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPm1zLnZhbGlkX3N1YnBs YW5zLCBpKSkgPj0gMCkKIAkJewotCQkJbm9kZS0+bXNfc2xvdHNbaV0gPSBFeGVjUHJvY05vZGUo bm9kZS0+bWVyZ2VwbGFuc1tpXSk7CisJCQlub2RlLT5tc19zbG90c1tpXSA9IEV4ZWNQcm9jTm9k ZShub2RlLT5tcy5wbGFuc1tpXSk7CiAJCQlpZiAoIVR1cElzTnVsbChub2RlLT5tc19zbG90c1tp XSkpCiAJCQkJYmluYXJ5aGVhcF9hZGRfdW5vcmRlcmVkKG5vZGUtPm1zX2hlYXAsIEludDMyR2V0 RGF0dW0oaSkpOwogCQl9CiAKIAkJLyogTG9vayBhdCB2YWxpZCBhc3luYyBzdWJwbGFucyAqLwog CQlpID0gLTE7Ci0JCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5tc192YWxpZF9h c3luY3BsYW5zLCBpKSkgPj0gMCkKKwkJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUt Pm1zLnZhbGlkX2FzeW5jcGxhbnMsIGkpKSA+PSAwKQogCQl7CiAJCQlFeGVjTWVyZ2VBcHBlbmRB c3luY0dldE5leHQobm9kZSwgaSk7CiAJCQlpZiAoIVR1cElzTnVsbChub2RlLT5tc19zbG90c1tp XSkpCkBAIC0zNDQsMTIgKzIxMSwxMiBAQCBFeGVjTWVyZ2VBcHBlbmQoUGxhblN0YXRlICpwc3Rh dGUpCiAJCSAqIHRvIG5vdCBwdWxsIHR1cGxlcyB1bnRpbCBuZWNlc3NhcnkuKQogCQkgKi8KIAkJ aSA9IERhdHVtR2V0SW50MzIoYmluYXJ5aGVhcF9maXJzdChub2RlLT5tc19oZWFwKSk7Ci0JCWlm IChibXNfaXNfbWVtYmVyKGksIG5vZGUtPm1zX2FzeW5jcGxhbnMpKQorCQlpZiAoYm1zX2lzX21l bWJlcihpLCBub2RlLT5tcy5hc3luY3BsYW5zKSkKIAkJCUV4ZWNNZXJnZUFwcGVuZEFzeW5jR2V0 TmV4dChub2RlLCBpKTsKIAkJZWxzZQogCQl7Ci0JCQlBc3NlcnQoYm1zX2lzX21lbWJlcihpLCBu b2RlLT5tc192YWxpZF9zdWJwbGFucykpOwotCQkJbm9kZS0+bXNfc2xvdHNbaV0gPSBFeGVjUHJv Y05vZGUobm9kZS0+bWVyZ2VwbGFuc1tpXSk7CisJCQlBc3NlcnQoYm1zX2lzX21lbWJlcihpLCBu b2RlLT5tcy52YWxpZF9zdWJwbGFucykpOworCQkJbm9kZS0+bXNfc2xvdHNbaV0gPSBFeGVjUHJv Y05vZGUobm9kZS0+bXMucGxhbnNbaV0pOwogCQl9CiAJCWlmICghVHVwSXNOdWxsKG5vZGUtPm1z X3Nsb3RzW2ldKSkKIAkJCWJpbmFyeWhlYXBfcmVwbGFjZV9maXJzdChub2RlLT5tc19oZWFwLCBJ bnQzMkdldERhdHVtKGkpKTsKQEAgLTM2MCw3ICsyMjcsNyBAQCBFeGVjTWVyZ2VBcHBlbmQoUGxh blN0YXRlICpwc3RhdGUpCiAJaWYgKGJpbmFyeWhlYXBfZW1wdHkobm9kZS0+bXNfaGVhcCkpCiAJ ewogCQkvKiBBbGwgdGhlIHN1YnBsYW5zIGFyZSBleGhhdXN0ZWQsIGFuZCBzbyBpcyB0aGUgaGVh cCAqLwotCQlyZXN1bHQgPSBFeGVjQ2xlYXJUdXBsZShub2RlLT5wcy5wc19SZXN1bHRUdXBsZVNs b3QpOworCQlyZXN1bHQgPSBFeGVjQ2xlYXJUdXBsZShub2RlLT5tcy5wcy5wc19SZXN1bHRUdXBs ZVNsb3QpOwogCX0KIAllbHNlCiAJewpAQCAtNDI2LDgxICsyOTMsMjEgQEAgaGVhcF9jb21wYXJl X3Nsb3RzKERhdHVtIGEsIERhdHVtIGIsIHZvaWQgKmFyZykKIHZvaWQKIEV4ZWNFbmRNZXJnZUFw cGVuZChNZXJnZUFwcGVuZFN0YXRlICpub2RlKQogewotCVBsYW5TdGF0ZSAqKm1lcmdlcGxhbnM7 Ci0JaW50CQkJbnBsYW5zOwotCWludAkJCWk7Ci0KLQkvKgotCSAqIGdldCBpbmZvcm1hdGlvbiBm cm9tIHRoZSBub2RlCi0JICovCi0JbWVyZ2VwbGFucyA9IG5vZGUtPm1lcmdlcGxhbnM7Ci0JbnBs YW5zID0gbm9kZS0+bXNfbnBsYW5zOwotCi0JLyoKLQkgKiBzaHV0IGRvd24gZWFjaCBvZiB0aGUg c3Vic2NhbnMKLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnBsYW5zOyBpKyspCi0JCUV4ZWNFbmRO b2RlKG1lcmdlcGxhbnNbaV0pOworCUV4ZWNFbmRBcHBlbmRlcigmbm9kZS0+bXMpOwogfQogCiB2 b2lkCiBFeGVjUmVTY2FuTWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkKIHsKLQlp bnQJCQlpOwotCWludAkJCW5hc3luY3BsYW5zID0gbm9kZS0+bXNfbmFzeW5jcGxhbnM7CisJaW50 CQkJbmFzeW5jcGxhbnMgPSBub2RlLT5tcy5uYXN5bmNwbGFuczsKIAotCS8qCi0JICogSWYgYW55 IFBBUkFNX0VYRUMgUGFyYW1zIHVzZWQgaW4gcHJ1bmluZyBleHByZXNzaW9ucyBoYXZlIGNoYW5n ZWQsIHRoZW4KLQkgKiB3ZSdkIGJldHRlciB1bnNldCB0aGUgdmFsaWQgc3VicGxhbnMgc28gdGhh dCB0aGV5IGFyZSByZXNlbGVjdGVkIGZvcgotCSAqIHRoZSBuZXcgcGFyYW1ldGVyIHZhbHVlcy4K LQkgKi8KLQlpZiAobm9kZS0+bXNfcHJ1bmVfc3RhdGUgJiYKLQkJYm1zX292ZXJsYXAobm9kZS0+ cHMuY2hnUGFyYW0sCi0JCQkJCW5vZGUtPm1zX3BydW5lX3N0YXRlLT5leGVjcGFyYW1pZHMpKQot CXsKLQkJbm9kZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IGZhbHNlOwotCQlibXNf ZnJlZShub2RlLT5tc192YWxpZF9zdWJwbGFucyk7Ci0JCW5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5z ID0gTlVMTDsKLQkJYm1zX2ZyZWUobm9kZS0+bXNfdmFsaWRfYXN5bmNwbGFucyk7Ci0JCW5vZGUt Pm1zX3ZhbGlkX2FzeW5jcGxhbnMgPSBOVUxMOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBub2Rl LT5tc19ucGxhbnM7IGkrKykKLQl7Ci0JCVBsYW5TdGF0ZSAgKnN1Ym5vZGUgPSBub2RlLT5tZXJn ZXBsYW5zW2ldOwotCi0JCS8qCi0JCSAqIEV4ZWNSZVNjYW4gZG9lc24ndCBrbm93IGFib3V0IG15 IHN1YnBsYW5zLCBzbyBJIGhhdmUgdG8gZG8KLQkJICogY2hhbmdlZC1wYXJhbWV0ZXIgc2lnbmFs aW5nIG15c2VsZi4KLQkJICovCi0JCWlmIChub2RlLT5wcy5jaGdQYXJhbSAhPSBOVUxMKQotCQkJ VXBkYXRlQ2hhbmdlZFBhcmFtU2V0KHN1Ym5vZGUsIG5vZGUtPnBzLmNoZ1BhcmFtKTsKLQotCQkv KgotCQkgKiBJZiBjaGdQYXJhbSBvZiBzdWJub2RlIGlzIG5vdCBudWxsIHRoZW4gcGxhbiB3aWxs IGJlIHJlLXNjYW5uZWQgYnkKLQkJICogZmlyc3QgRXhlY1Byb2NOb2RlLgotCQkgKi8KLQkJaWYg KHN1Ym5vZGUtPmNoZ1BhcmFtID09IE5VTEwpCi0JCQlFeGVjUmVTY2FuKHN1Ym5vZGUpOwotCX0K KwlFeGVjUmVTY2FuQXBwZW5kZXIoJm5vZGUtPm1zKTsKIAotCS8qIFJlc2V0IGFzeW5jIHN0YXRl ICovCisJLyogUmVzZXQgc3BlY2lmaWMgbWVyZ2UgYXBwZW5kIGFzeW5jIHN0YXRlICovCiAJaWYg KG5hc3luY3BsYW5zID4gMCkKIAl7Ci0JCWkgPSAtMTsKLQkJd2hpbGUgKChpID0gYm1zX25leHRf bWVtYmVyKG5vZGUtPm1zX2FzeW5jcGxhbnMsIGkpKSA+PSAwKQotCQl7Ci0JCQlBc3luY1JlcXVl c3QgKmFyZXEgPSBub2RlLT5tc19hc3luY3JlcXVlc3RzW2ldOwotCi0JCQlhcmVxLT5jYWxsYmFj a19wZW5kaW5nID0gZmFsc2U7Ci0JCQlhcmVxLT5yZXF1ZXN0X2NvbXBsZXRlID0gZmFsc2U7Ci0J CQlhcmVxLT5yZXN1bHQgPSBOVUxMOwotCQl9Ci0KIAkJYm1zX2ZyZWUobm9kZS0+bXNfYXN5bmNy ZW1haW4pOwogCQlub2RlLT5tc19hc3luY3JlbWFpbiA9IE5VTEw7Ci0JCWJtc19mcmVlKG5vZGUt Pm1zX25lZWRyZXF1ZXN0KTsKLQkJbm9kZS0+bXNfbmVlZHJlcXVlc3QgPSBOVUxMOwogCQlibXNf ZnJlZShub2RlLT5tc19oYXNfYXN5bmNyZXN1bHRzKTsKIAkJbm9kZS0+bXNfaGFzX2FzeW5jcmVz dWx0cyA9IE5VTEw7CiAJfQpAQCAtNTE5LDEwICszMjYsMTAgQEAgRXhlY1JlU2Nhbk1lcmdlQXBw ZW5kKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpCiBzdGF0aWMgdm9pZAogY2xhc3NpZnlfbWF0Y2hp bmdfc3VicGxhbnMoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkKIHsKLQlBc3NlcnQobm9kZS0+bXNf dmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCk7CisJQXNzZXJ0KG5vZGUtPm1zLnZhbGlkX3N1YnBs YW5zX2lkZW50aWZpZWQpOwogCiAJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBhcmUgbm8gdmFs aWQgc3VicGxhbnMuICovCi0JaWYgKGJtc19pc19lbXB0eShub2RlLT5tc192YWxpZF9zdWJwbGFu cykpCisJaWYgKGJtc19pc19lbXB0eShub2RlLT5tcy52YWxpZF9zdWJwbGFucykpCiAJewogCQlu b2RlLT5tc19hc3luY3JlbWFpbiA9IE5VTEw7CiAJCXJldHVybjsKQEAgLTUzMCw5ICszMzcsOSBA QCBjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhNZXJnZUFwcGVuZFN0YXRlICpub2RlKQogCiAJ LyogTm8gdmFsaWQgYXN5bmMgc3VicGxhbnMgaWRlbnRpZmllZC4gKi8KIAlpZiAoIWNsYXNzaWZ5 X21hdGNoaW5nX3N1YnBsYW5zX2NvbW1vbigKLQkJCQkJCQkJCQkgICAmbm9kZS0+bXNfdmFsaWRf c3VicGxhbnMsCi0JCQkJCQkJCQkJICAgbm9kZS0+bXNfYXN5bmNwbGFucywKLQkJCQkJCQkJCQkg ICAmbm9kZS0+bXNfdmFsaWRfYXN5bmNwbGFucykpCisJCQkJCQkJCQkJICAgJm5vZGUtPm1zLnZh bGlkX3N1YnBsYW5zLAorCQkJCQkJCQkJCSAgIG5vZGUtPm1zLmFzeW5jcGxhbnMsCisJCQkJCQkJ CQkJICAgJm5vZGUtPm1zLnZhbGlkX2FzeW5jcGxhbnMpKQogCQlub2RlLT5tc19hc3luY3JlbWFp biA9IE5VTEw7CiB9CiAKQEAgLTU0NSwzOSArMzUyLDE3IEBAIGNsYXNzaWZ5X21hdGNoaW5nX3N1 YnBsYW5zKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpCiBzdGF0aWMgdm9pZAogRXhlY01lcmdlQXBw ZW5kQXN5bmNCZWdpbihNZXJnZUFwcGVuZFN0YXRlICpub2RlKQogewotCWludAkJCWk7Ci0KLQkv KiBCYWNrd2FyZCBzY2FuIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYXN5bmMtYXdhcmUgTWVyZ2VBcHBl bmRzLiAqLwotCUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKG5vZGUtPnBzLnN0YXRlLT5l c19kaXJlY3Rpb24pKTsKLQotCS8qIFdlIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hlbiB0aGVy ZSBhcmUgbm8gc3VicGxhbnMgKi8KLQlBc3NlcnQobm9kZS0+bXNfbnBsYW5zID4gMCk7Ci0KLQkv KiBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIGFzeW5jIHN1YnBs YW5zLiAqLwotCUFzc2VydChub2RlLT5tc19uYXN5bmNwbGFucyA+IDApOwotCiAJLyogRXhlY01l cmdlQXBwZW5kKCkgaWRlbnRpZmllcyB2YWxpZCBzdWJwbGFucyAqLwotCUFzc2VydChub2RlLT5t c192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKTsKKwlBc3NlcnQobm9kZS0+bXMudmFsaWRfc3Vi cGxhbnNfaWRlbnRpZmllZCk7CiAKIAkvKiBJbml0aWFsaXplIHN0YXRlIHZhcmlhYmxlcy4gKi8K LQlub2RlLT5tc19hc3luY3JlbWFpbiA9IGJtc19jb3B5KG5vZGUtPm1zX3ZhbGlkX2FzeW5jcGxh bnMpOworCW5vZGUtPm1zX2FzeW5jcmVtYWluID0gYm1zX2NvcHkobm9kZS0+bXMudmFsaWRfYXN5 bmNwbGFucyk7CiAKIAkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJlIGFyZSBubyB2YWxpZCBhc3lu YyBzdWJwbGFucy4gKi8KIAlpZiAoYm1zX2lzX2VtcHR5KG5vZGUtPm1zX2FzeW5jcmVtYWluKSkK IAkJcmV0dXJuOwogCi0JLyogTWFrZSBhIHJlcXVlc3QgZm9yIGVhY2ggb2YgdGhlIHZhbGlkIGFz eW5jIHN1YnBsYW5zLiAqLwotCWkgPSAtMTsKLQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIo bm9kZS0+bXNfdmFsaWRfYXN5bmNwbGFucywgaSkpID49IDApCi0JewotCQlBc3luY1JlcXVlc3Qg KmFyZXEgPSBub2RlLT5tc19hc3luY3JlcXVlc3RzW2ldOwotCi0JCUFzc2VydChhcmVxLT5yZXF1 ZXN0X2luZGV4ID09IGkpOwotCQlBc3NlcnQoIWFyZXEtPmNhbGxiYWNrX3BlbmRpbmcpOwotCi0J CS8qIERvIHRoZSBhY3R1YWwgd29yay4gKi8KLQkJRXhlY0FzeW5jUmVxdWVzdChhcmVxKTsKLQl9 CisJRXhlY0FwcGVuZGVyQXN5bmNCZWdpbigmbm9kZS0+bXMpOwogfQogCiAvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBA IC02MzgsNyArNDIzLDcgQEAgRXhlY01lcmdlQXBwZW5kQXN5bmNSZXF1ZXN0KE1lcmdlQXBwZW5k U3RhdGUgKm5vZGUsIGludCBtcGxhbikKIAkgKi8KIAlpZiAoYm1zX2lzX21lbWJlcihtcGxhbiwg bm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cykpCiAJewotCQlub2RlLT5tc19zbG90c1ttcGxhbl0g PSBub2RlLT5tc19hc3luY3Jlc3VsdHNbbXBsYW5dOworCQlub2RlLT5tc19zbG90c1ttcGxhbl0g PSBub2RlLT5tcy5hc3luY3Jlc3VsdHNbbXBsYW5dOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKQEAg LTY0OCw3ICs0MzMsNyBAQCBFeGVjTWVyZ2VBcHBlbmRBc3luY1JlcXVlc3QoTWVyZ2VBcHBlbmRT dGF0ZSAqbm9kZSwgaW50IG1wbGFuKQogCSAqLwogCW5lZWRyZXF1ZXN0ID0gTlVMTDsKIAlpID0g LTE7Ci0Jd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPm1zX25lZWRyZXF1ZXN0LCBp KSkgPj0gMCkKKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+bXMubmVlZHJlcXVl c3QsIGkpKSA+PSAwKQogCXsKIAkJaWYgKCFibXNfaXNfbWVtYmVyKGksIG5vZGUtPm1zX2hhc19h c3luY3Jlc3VsdHMpKQogCQkJbmVlZHJlcXVlc3QgPSBibXNfYWRkX21lbWJlcihuZWVkcmVxdWVz dCwgaSk7CkBAIC02NjEsMTMgKzQ0NiwxMyBAQCBFeGVjTWVyZ2VBcHBlbmRBc3luY1JlcXVlc3Qo TWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSwgaW50IG1wbGFuKQogCQlyZXR1cm4gZmFsc2U7CiAKIAkv KiBDbGVhciBtc19uZWVkcmVxdWVzdCBmbGFnLCBhcyB3ZSBhcmUgZ29pbmcgdG8gc2VuZCByZXF1 ZXN0cyBub3cgKi8KLQlub2RlLT5tc19uZWVkcmVxdWVzdCA9IGJtc19kZWxfbWVtYmVycyhub2Rl LT5tc19uZWVkcmVxdWVzdCwgbmVlZHJlcXVlc3QpOworCW5vZGUtPm1zLm5lZWRyZXF1ZXN0ID0g Ym1zX2RlbF9tZW1iZXJzKG5vZGUtPm1zLm5lZWRyZXF1ZXN0LCBuZWVkcmVxdWVzdCk7CiAKIAkv KiBNYWtlIGEgbmV3IHJlcXVlc3QgZm9yIGVhY2ggb2YgdGhlIGFzeW5jIHN1YnBsYW5zIHRoYXQg bmVlZCBpdC4gKi8KIAlpID0gLTE7CiAJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5lZWRy ZXF1ZXN0LCBpKSkgPj0gMCkKIAl7Ci0JCUFzeW5jUmVxdWVzdCAqYXJlcSA9IG5vZGUtPm1zX2Fz eW5jcmVxdWVzdHNbaV07CisJCUFzeW5jUmVxdWVzdCAqYXJlcSA9IG5vZGUtPm1zLmFzeW5jcmVx dWVzdHNbaV07CiAKIAkJLyoKIAkJICogV2UndmUganVzdCBjaGVja2VkIHRoYXQgc3VicGxhbiBk b2Vzbid0IGFscmVhZHkgaGF2ZSBzb21lIGZldGNoZWQKQEAgLTY4Myw3ICs0NjgsNyBAQCBFeGVj TWVyZ2VBcHBlbmRBc3luY1JlcXVlc3QoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSwgaW50IG1wbGFu KQogCS8qIFJldHVybiBuZWVkZWQgYXN5bmNocm9ub3VzbHktZ2VuZXJhdGVkIHJlc3VsdHMgaWYg YW55LiAqLwogCWlmIChibXNfaXNfbWVtYmVyKG1wbGFuLCBub2RlLT5tc19oYXNfYXN5bmNyZXN1 bHRzKSkKIAl7Ci0JCW5vZGUtPm1zX3Nsb3RzW21wbGFuXSA9IG5vZGUtPm1zX2FzeW5jcmVzdWx0 c1ttcGxhbl07CisJCW5vZGUtPm1zX3Nsb3RzW21wbGFuXSA9IG5vZGUtPm1zLmFzeW5jcmVzdWx0 c1ttcGxhbl07CiAJCXJldHVybiB0cnVlOwogCX0KIApAQCAtNzA3LDcgKzQ5Miw3IEBAIEV4ZWNB c3luY01lcmdlQXBwZW5kUmVzcG9uc2UoQXN5bmNSZXF1ZXN0ICphcmVxKQogCS8qIFdlIHNob3Vs ZCBoYW5kbGUgcHJldmlvdXMgYXN5bmMgcmVzdWx0IHByaW9yIHRvIGdldHRpbmcgbmV3IG9uZSAq LwogCUFzc2VydCghYm1zX2lzX21lbWJlcihhcmVxLT5yZXF1ZXN0X2luZGV4LCBub2RlLT5tc19o YXNfYXN5bmNyZXN1bHRzKSk7CiAKLQlub2RlLT5tc19hc3luY3Jlc3VsdHNbYXJlcS0+cmVxdWVz dF9pbmRleF0gPSBOVUxMOworCW5vZGUtPm1zLmFzeW5jcmVzdWx0c1thcmVxLT5yZXF1ZXN0X2lu ZGV4XSA9IE5VTEw7CiAJLyogTm90aGluZyB0byBkbyBpZiB0aGUgcmVxdWVzdCBpcyBwZW5kaW5n LiAqLwogCWlmICghYXJlcS0+cmVxdWVzdF9jb21wbGV0ZSkKIAl7CkBAIC03MzAsMTMgKzUxNSwx MyBAQCBFeGVjQXN5bmNNZXJnZUFwcGVuZFJlc3BvbnNlKEFzeW5jUmVxdWVzdCAqYXJlcSkKIAlu b2RlLT5tc19oYXNfYXN5bmNyZXN1bHRzID0gYm1zX2FkZF9tZW1iZXIobm9kZS0+bXNfaGFzX2Fz eW5jcmVzdWx0cywKIAkJCQkJCQkJCQkJICAgYXJlcS0+cmVxdWVzdF9pbmRleCk7CiAJLyogU2F2 ZSByZXN1bHQgc28gd2UgY2FuIHJldHVybiBpdC4gKi8KLQlub2RlLT5tc19hc3luY3Jlc3VsdHNb YXJlcS0+cmVxdWVzdF9pbmRleF0gPSBzbG90OworCW5vZGUtPm1zLmFzeW5jcmVzdWx0c1thcmVx LT5yZXF1ZXN0X2luZGV4XSA9IHNsb3Q7CiAKIAkvKgogCSAqIE1hcmsgdGhlIHN1YnBsYW4gdGhh dCByZXR1cm5lZCBhIHJlc3VsdCBhcyByZWFkeSBmb3IgYSBuZXcgcmVxdWVzdC4gIFdlCiAJICog ZG9uJ3QgbGF1bmNoIGFub3RoZXIgb25lIGhlcmUgaW1tZWRpYXRlbHkgYmVjYXVzZSBpdCBtaWdo dCBjb21wbGV0ZS4KIAkgKi8KLQlub2RlLT5tc19uZWVkcmVxdWVzdCA9IGJtc19hZGRfbWVtYmVy KG5vZGUtPm1zX25lZWRyZXF1ZXN0LAorCW5vZGUtPm1zLm5lZWRyZXF1ZXN0ID0gYm1zX2FkZF9t ZW1iZXIobm9kZS0+bXMubmVlZHJlcXVlc3QsCiAJCQkJCQkJCQkJICBhcmVxLT5yZXF1ZXN0X2lu ZGV4KTsKIH0KIApAQCAtNzQ5LDEwMSArNTM0LDggQEAgRXhlY0FzeW5jTWVyZ2VBcHBlbmRSZXNw b25zZShBc3luY1JlcXVlc3QgKmFyZXEpCiBzdGF0aWMgdm9pZAogRXhlY01lcmdlQXBwZW5kQXN5 bmNFdmVudFdhaXQoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkKIHsKLQlpbnQJCQluZXZlbnRzID0g bm9kZS0+bXNfbmFzeW5jcGxhbnMgKyAyOyAvKiBvbmUgZm9yIFBNIGRlYXRoIGFuZAotCQkJCQkJ CQkJCQkJCSAqIG9uZSBmb3IgbGF0Y2ggKi8KLQlXYWl0RXZlbnQJb2NjdXJyZWRfZXZlbnRbRVZF TlRfQlVGRkVSX1NJWkVdOwotCWludAkJCW5vY2N1cnJlZDsKLQlpbnQJCQlpOwotCiAJLyogV2Ug c2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyB2YWxpZCBhc3luYyBzdWJw bGFucy4gKi8KIAlBc3NlcnQoYm1zX251bV9tZW1iZXJzKG5vZGUtPm1zX2FzeW5jcmVtYWluKSA+ IDApOwogCi0Jbm9kZS0+bXNfZXZlbnRzZXQgPSBDcmVhdGVXYWl0RXZlbnRTZXQoQ3VycmVudFJl c291cmNlT3duZXIsIG5ldmVudHMpOwotCUFkZFdhaXRFdmVudFRvU2V0KG5vZGUtPm1zX2V2ZW50 c2V0LCBXTF9FWElUX09OX1BNX0RFQVRILCBQR0lOVkFMSURfU09DS0VULAotCQkJCQkgIE5VTEws IE5VTEwpOwotCi0JLyogR2l2ZSBlYWNoIHdhaXRpbmcgc3VicGxhbiBhIGNoYW5jZSB0byBhZGQg YW4gZXZlbnQuICovCi0JaSA9IC0xOwotCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2Rl LT5tc19hc3luY3BsYW5zLCBpKSkgPj0gMCkKLQl7Ci0JCUFzeW5jUmVxdWVzdCAqYXJlcSA9IG5v ZGUtPm1zX2FzeW5jcmVxdWVzdHNbaV07Ci0KLQkJaWYgKGFyZXEtPmNhbGxiYWNrX3BlbmRpbmcp Ci0JCQlFeGVjQXN5bmNDb25maWd1cmVXYWl0KGFyZXEpOwotCX0KLQotCS8qCi0JICogTm8gbmVl ZCBmb3IgZnVydGhlciBwcm9jZXNzaW5nIGlmIG5vbmUgb2YgdGhlIHN1YnBsYW5zIGNvbmZpZ3Vy ZWQgYW55Ci0JICogZXZlbnRzLgotCSAqLwotCWlmIChHZXROdW1SZWdpc3RlcmVkV2FpdEV2ZW50 cyhub2RlLT5tc19ldmVudHNldCkgPT0gMSkKLQl7Ci0JCUZyZWVXYWl0RXZlbnRTZXQobm9kZS0+ bXNfZXZlbnRzZXQpOwotCQlub2RlLT5tc19ldmVudHNldCA9IE5VTEw7Ci0JCXJldHVybjsKLQl9 Ci0KLQkvKgotCSAqIEFkZCB0aGUgcHJvY2VzcyBsYXRjaCB0byB0aGUgc2V0LCBzbyB0aGF0IHdl IHdha2UgdXAgdG8gcHJvY2VzcyB0aGUKLQkgKiBzdGFuZGFyZCBpbnRlcnJ1cHRzIHdpdGggQ0hF Q0tfRk9SX0lOVEVSUlVQVFMoKS4KLQkgKgotCSAqIE5PVEU6IEZvciBoaXN0b3JpY2FsIHJlYXNv bnMsIGl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBpcyBhZGRlZCB0byB0aGUKLQkgKiBXYWl0RXZl bnRTZXQgYWZ0ZXIgdGhlIEV4ZWNBc3luY0NvbmZpZ3VyZVdhaXQoKSBjYWxscy4gIE5hbWVseSwK LQkgKiBwb3N0Z3Jlc19mZHcgY2FsbHMgIkdldE51bVJlZ2lzdGVyZWRXYWl0RXZlbnRzKHNldCkg PT0gMSIgdG8gY2hlY2sgaWYKLQkgKiBhbnkgb3RoZXIgZXZlbnRzIGFyZSBpbiB0aGUgc2V0LiAg VGhhdCdzIGEgcG9vciBkZXNpZ24sIGl0J3MKLQkgKiBxdWVzdGlvbmFibGUgZm9yIHBvc3RncmVz X2ZkdyB0byBiZSBkb2luZyB0aGF0IGluIHRoZSBmaXJzdCBwbGFjZSwgYnV0Ci0JICogd2UgY2Fu bm90IGNoYW5nZSBpdCBub3cuICBUaGUgcGF0dGVybiBoYXMgcG9zc2libHkgYmVlbiBjb3BpZWQg dG8gb3RoZXIKLQkgKiBleHRlbnNpb25zIHRvby4KLQkgKi8KLQlBZGRXYWl0RXZlbnRUb1NldChu b2RlLT5tc19ldmVudHNldCwgV0xfTEFUQ0hfU0VULCBQR0lOVkFMSURfU09DS0VULAotCQkJCQkg IE15TGF0Y2gsIE5VTEwpOwotCi0JLyogUmV0dXJuIGF0IG1vc3QgRVZFTlRfQlVGRkVSX1NJWkUg ZXZlbnRzIGluIG9uZSBjYWxsLiAqLwotCWlmIChuZXZlbnRzID4gRVZFTlRfQlVGRkVSX1NJWkUp Ci0JCW5ldmVudHMgPSBFVkVOVF9CVUZGRVJfU0laRTsKLQotCS8qCi0JICogV2FpdCB1bnRpbCBh dCBsZWFzdCBvbmUgZXZlbnQgb2NjdXJzLgotCSAqLwotCW5vY2N1cnJlZCA9IFdhaXRFdmVudFNl dFdhaXQobm9kZS0+bXNfZXZlbnRzZXQsIC0xIC8qIG5vIHRpbWVvdXQgKi8gLCBvY2N1cnJlZF9l dmVudCwKLQkJCQkJCQkJIG5ldmVudHMsIFdBSVRfRVZFTlRfQVBQRU5EX1JFQURZKTsKLQlGcmVl V2FpdEV2ZW50U2V0KG5vZGUtPm1zX2V2ZW50c2V0KTsKLQlub2RlLT5tc19ldmVudHNldCA9IE5V TEw7Ci0JaWYgKG5vY2N1cnJlZCA9PSAwKQotCQlyZXR1cm47Ci0KLQkvKiBEZWxpdmVyIG5vdGlm aWNhdGlvbnMuICovCi0JZm9yIChpID0gMDsgaSA8IG5vY2N1cnJlZDsgaSsrKQotCXsKLQkJV2Fp dEV2ZW50ICAqdyA9ICZvY2N1cnJlZF9ldmVudFtpXTsKLQotCQkvKgotCQkgKiBFYWNoIHdhaXRp bmcgc3VicGxhbiBzaG91bGQgaGF2ZSByZWdpc3RlcmVkIGl0cyB3YWl0IGV2ZW50IHdpdGgKLQkJ ICogdXNlcl9kYXRhIHBvaW50aW5nIGJhY2sgdG8gaXRzIEFzeW5jUmVxdWVzdC4KLQkJICovCi0J CWlmICgody0+ZXZlbnRzICYgV0xfU09DS0VUX1JFQURBQkxFKSAhPSAwKQotCQl7Ci0JCQlBc3lu Y1JlcXVlc3QgKmFyZXEgPSAoQXN5bmNSZXF1ZXN0ICopIHctPnVzZXJfZGF0YTsKLQotCQkJaWYg KGFyZXEtPmNhbGxiYWNrX3BlbmRpbmcpCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBNYXJrIGl0IGFz IG5vIGxvbmdlciBuZWVkaW5nIGEgY2FsbGJhY2suICBXZSBtdXN0IGRvIHRoaXMKLQkJCQkgKiBi ZWZvcmUgZGlzcGF0Y2hpbmcgdGhlIGNhbGxiYWNrIGluIGNhc2UgdGhlIGNhbGxiYWNrIHJlc2V0 cwotCQkJCSAqIHRoZSBmbGFnLgotCQkJCSAqLwotCQkJCWFyZXEtPmNhbGxiYWNrX3BlbmRpbmcg PSBmYWxzZTsKLQotCQkJCS8qIERvIHRoZSBhY3R1YWwgd29yay4gKi8KLQkJCQlFeGVjQXN5bmNO b3RpZnkoYXJlcSk7Ci0JCQl9Ci0JCX0KLQotCQkvKiBIYW5kbGUgc3RhbmRhcmQgaW50ZXJydXB0 cyAqLwotCQlpZiAoKHctPmV2ZW50cyAmIFdMX0xBVENIX1NFVCkgIT0gMCkKLQkJewotCQkJUmVz ZXRMYXRjaChNeUxhdGNoKTsKLQkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7Ci0JCX0KLQl9CisJ RXhlY0FwcGVuZGVyQXN5bmNFdmVudFdhaXQoJm5vZGUtPm1zLCAtMSAvKiBubyB0aW1lb3V0ICov ICwgV0FJVF9FVkVOVF9BUFBFTkRfUkVBRFkpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv bm9kZXMvbm9kZUZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYwppbmRleCAw MjRhMmIyZmQ4NC4uMmY0ZTJhZTZkMzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL25v ZGVGdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCkBAIC00NzUxLDE0 ICs0NzUxLDE0IEBAIHBsYW5zdGF0ZV90cmVlX3dhbGtlcl9pbXBsKFBsYW5TdGF0ZSAqcGxhbnN0 YXRlLAogCXN3aXRjaCAobm9kZVRhZyhwbGFuKSkKIAl7CiAJCWNhc2UgVF9BcHBlbmQ6Ci0JCQlp ZiAocGxhbnN0YXRlX3dhbGtfbWVtYmVycygoKEFwcGVuZFN0YXRlICopIHBsYW5zdGF0ZSktPmFw cGVuZHBsYW5zLAotCQkJCQkJCQkJICAgKChBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5hc19u cGxhbnMsCisJCQlpZiAocGxhbnN0YXRlX3dhbGtfbWVtYmVycygoKEFwcGVuZFN0YXRlICopIHBs YW5zdGF0ZSktPmFzLnBsYW5zLAorCQkJCQkJCQkJICAgKChBcHBlbmRTdGF0ZSAqKSBwbGFuc3Rh dGUpLT5hcy5ucGxhbnMsCiAJCQkJCQkJCQkgICB3YWxrZXIsIGNvbnRleHQpKQogCQkJCXJldHVy biB0cnVlOwogCQkJYnJlYWs7CiAJCWNhc2UgVF9NZXJnZUFwcGVuZDoKLQkJCWlmIChwbGFuc3Rh dGVfd2Fsa19tZW1iZXJzKCgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5tZXJnZXBs YW5zLAotCQkJCQkJCQkJICAgKChNZXJnZUFwcGVuZFN0YXRlICopIHBsYW5zdGF0ZSktPm1zX25w bGFucywKKwkJCWlmIChwbGFuc3RhdGVfd2Fsa19tZW1iZXJzKCgoTWVyZ2VBcHBlbmRTdGF0ZSAq KSBwbGFuc3RhdGUpLT5tcy5wbGFucywKKwkJCQkJCQkJCSAgICgoTWVyZ2VBcHBlbmRTdGF0ZSAq KSBwbGFuc3RhdGUpLT5tcy5ucGxhbnMsCiAJCQkJCQkJCQkgICB3YWxrZXIsIGNvbnRleHQpKQog CQkJCXJldHVybiB0cnVlOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVh dGVwbGFuLmMKaW5kZXggZmMwZTVjNjJlYTkuLmE3YjdlM2Q0NWUwIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCkBAIC0xMjYyLDExICsxMjYyLDExIEBAIGNyZWF0ZV9h cHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgQXBwZW5kUGF0aCAqYmVzdF9wYXRoLCBpbnQg ZmxhZ3MpCiAJICogY2hpbGQgcGxhbnMsIHRvIG1ha2UgY3Jvc3MtY2hlY2tpbmcgdGhlIHNvcnQg aW5mbyBlYXNpZXIuCiAJICovCiAJcGxhbiA9IG1ha2VOb2RlKEFwcGVuZCk7Ci0JcGxhbi0+cGxh bi50YXJnZXRsaXN0ID0gdGxpc3Q7Ci0JcGxhbi0+cGxhbi5xdWFsID0gTklMOwotCXBsYW4tPnBs YW4ubGVmdHRyZWUgPSBOVUxMOwotCXBsYW4tPnBsYW4ucmlnaHR0cmVlID0gTlVMTDsKLQlwbGFu LT5hcHByZWxpZHMgPSByZWwtPnJlbGlkczsKKwlwbGFuLT5hcC5wbGFuLnRhcmdldGxpc3QgPSB0 bGlzdDsKKwlwbGFuLT5hcC5wbGFuLnF1YWwgPSBOSUw7CisJcGxhbi0+YXAucGxhbi5sZWZ0dHJl ZSA9IE5VTEw7CisJcGxhbi0+YXAucGxhbi5yaWdodHRyZWUgPSBOVUxMOworCXBsYW4tPmFwLmFw cHJlbGlkcyA9IHJlbC0+cmVsaWRzOwogCiAJaWYgKHBhdGhrZXlzICE9IE5JTCkKIAl7CkBAIC0x Mjg1LDcgKzEyODUsNyBAQCBjcmVhdGVfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIEFw cGVuZFBhdGggKmJlc3RfcGF0aCwgaW50IGZsYWdzKQogCQkJCQkJCQkJCSAgJm5vZGVTb3J0T3Bl cmF0b3JzLAogCQkJCQkJCQkJCSAgJm5vZGVDb2xsYXRpb25zLAogCQkJCQkJCQkJCSAgJm5vZGVO dWxsc0ZpcnN0KTsKLQkJdGxpc3Rfd2FzX2NoYW5nZWQgPSAob3JpZ190bGlzdF9sZW5ndGggIT0g bGlzdF9sZW5ndGgocGxhbi0+cGxhbi50YXJnZXRsaXN0KSk7CisJCXRsaXN0X3dhc19jaGFuZ2Vk ID0gKG9yaWdfdGxpc3RfbGVuZ3RoICE9IGxpc3RfbGVuZ3RoKHBsYW4tPmFwLnBsYW4udGFyZ2V0 bGlzdCkpOwogCX0KIAogCS8qIElmIGFwcHJvcHJpYXRlLCBjb25zaWRlciBhc3luYyBhcHBlbmQg Ki8KQEAgLTEzOTUsNyArMTM5NSw3IEBAIGNyZWF0ZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAq cm9vdCwgQXBwZW5kUGF0aCAqYmVzdF9wYXRoLCBpbnQgZmxhZ3MpCiAJfQogCiAJLyogU2V0IGJl bG93IGlmIHdlIGZpbmQgcXVhbHMgdGhhdCB3ZSBjYW4gdXNlIHRvIHJ1bi10aW1lIHBydW5lICov Ci0JcGxhbi0+cGFydF9wcnVuZV9pbmRleCA9IC0xOworCXBsYW4tPmFwLnBhcnRfcHJ1bmVfaW5k ZXggPSAtMTsKIAogCS8qCiAJICogSWYgYW55IHF1YWxzIGV4aXN0LCB0aGV5IG1heSBiZSB1c2Vm dWwgdG8gcGVyZm9ybSBmdXJ0aGVyIHBhcnRpdGlvbgpAQCAtMTQyMCwxNiArMTQyMCwxNiBAQCBj cmVhdGVfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIEFwcGVuZFBhdGggKmJlc3RfcGF0 aCwgaW50IGZsYWdzKQogCQl9CiAKIAkJaWYgKHBydW5lcXVhbCAhPSBOSUwpCi0JCQlwbGFuLT5w YXJ0X3BydW5lX2luZGV4ID0gbWFrZV9wYXJ0aXRpb25fcHJ1bmVpbmZvKHJvb3QsIHJlbCwKKwkJ CXBsYW4tPmFwLnBhcnRfcHJ1bmVfaW5kZXggPSBtYWtlX3BhcnRpdGlvbl9wcnVuZWluZm8ocm9v dCwgcmVsLAogCQkJCQkJCQkJCQkJCQkJICBiZXN0X3BhdGgtPnN1YnBhdGhzLAogCQkJCQkJCQkJ CQkJCQkJICBwcnVuZXF1YWwpOwogCX0KIAotCXBsYW4tPmFwcGVuZHBsYW5zID0gc3VicGxhbnM7 CisJcGxhbi0+YXAuc3VicGxhbnMgPSBzdWJwbGFuczsKIAlwbGFuLT5uYXN5bmNwbGFucyA9IG5h c3luY3BsYW5zOwogCXBsYW4tPmZpcnN0X3BhcnRpYWxfcGxhbiA9IGJlc3RfcGF0aC0+Zmlyc3Rf cGFydGlhbF9wYXRoOwogCi0JY29weV9nZW5lcmljX3BhdGhfaW5mbygmcGxhbi0+cGxhbiwgKFBh dGggKikgYmVzdF9wYXRoKTsKKwljb3B5X2dlbmVyaWNfcGF0aF9pbmZvKCZwbGFuLT5hcC5wbGFu LCAoUGF0aCAqKSBiZXN0X3BhdGgpOwogCiAJLyoKIAkgKiBJZiBwcmVwYXJlX3NvcnRfZnJvbV9w YXRoa2V5cyBhZGRlZCBzb3J0IGNvbHVtbnMsIGJ1dCB3ZSB3ZXJlIHRvbGQgdG8KQEAgLTE0Mzgs OSArMTQzOCw5IEBAIGNyZWF0ZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgQXBwZW5k UGF0aCAqYmVzdF9wYXRoLCBpbnQgZmxhZ3MpCiAJICovCiAJaWYgKHRsaXN0X3dhc19jaGFuZ2Vk ICYmIChmbGFncyAmIChDUF9FWEFDVF9UTElTVCB8IENQX1NNQUxMX1RMSVNUKSkpCiAJewotCQl0 bGlzdCA9IGxpc3RfY29weV9oZWFkKHBsYW4tPnBsYW4udGFyZ2V0bGlzdCwgb3JpZ190bGlzdF9s ZW5ndGgpOworCQl0bGlzdCA9IGxpc3RfY29weV9oZWFkKHBsYW4tPmFwLnBsYW4udGFyZ2V0bGlz dCwgb3JpZ190bGlzdF9sZW5ndGgpOwogCQlyZXR1cm4gaW5qZWN0X3Byb2plY3Rpb25fcGxhbigo UGxhbiAqKSBwbGFuLCB0bGlzdCwKLQkJCQkJCQkJCSAgcGxhbi0+cGxhbi5wYXJhbGxlbF9zYWZl KTsKKwkJCQkJCQkJCSAgcGxhbi0+YXAucGxhbi5wYXJhbGxlbF9zYWZlKTsKIAl9CiAJZWxzZQog CQlyZXR1cm4gKFBsYW4gKikgcGxhbjsKQEAgLTE0NTgsNyArMTQ1OCw3IEBAIGNyZWF0ZV9tZXJn ZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgTWVyZ2VBcHBlbmRQYXRoICpiZXN0X3Bh dGgsCiAJCQkJCQkgaW50IGZsYWdzKQogewogCU1lcmdlQXBwZW5kICpub2RlID0gbWFrZU5vZGUo TWVyZ2VBcHBlbmQpOwotCVBsYW4JICAgKnBsYW4gPSAmbm9kZS0+cGxhbjsKKwlQbGFuCSAgICpw bGFuID0gJm5vZGUtPmFwLnBsYW47CiAJTGlzdAkgICAqdGxpc3QgPSBidWlsZF9wYXRoX3RsaXN0 KHJvb3QsICZiZXN0X3BhdGgtPnBhdGgpOwogCWludAkJCW9yaWdfdGxpc3RfbGVuZ3RoID0gbGlz dF9sZW5ndGgodGxpc3QpOwogCWJvb2wJCXRsaXN0X3dhc19jaGFuZ2VkOwpAQCAtMTQ3OSw3ICsx NDc5LDcgQEAgY3JlYXRlX21lcmdlX2FwcGVuZF9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBNZXJn ZUFwcGVuZFBhdGggKmJlc3RfcGF0aCwKIAlwbGFuLT5xdWFsID0gTklMOwogCXBsYW4tPmxlZnR0 cmVlID0gTlVMTDsKIAlwbGFuLT5yaWdodHRyZWUgPSBOVUxMOwotCW5vZGUtPmFwcHJlbGlkcyA9 IHJlbC0+cmVsaWRzOworCW5vZGUtPmFwLmFwcHJlbGlkcyA9IHJlbC0+cmVsaWRzOwogCiAJY29u c2lkZXJfYXN5bmMgPSAoZW5hYmxlX2FzeW5jX21lcmdlX2FwcGVuZCAmJgogCQkJCQkgICFiZXN0 X3BhdGgtPnBhdGgucGFyYWxsZWxfc2FmZSAmJgpAQCAtMTU5Myw3ICsxNTkzLDcgQEAgY3JlYXRl X21lcmdlX2FwcGVuZF9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZUFwcGVuZFBhdGggKmJl c3RfcGF0aCwKIAl9CiAKIAkvKiBTZXQgYmVsb3cgaWYgd2UgZmluZCBxdWFscyB0aGF0IHdlIGNh biB1c2UgdG8gcnVuLXRpbWUgcHJ1bmUgKi8KLQlub2RlLT5wYXJ0X3BydW5lX2luZGV4ID0gLTE7 CisJbm9kZS0+YXAucGFydF9wcnVuZV9pbmRleCA9IC0xOwogCiAJLyoKIAkgKiBJZiBhbnkgcXVh bHMgZXhpc3QsIHRoZXkgbWF5IGJlIHVzZWZ1bCB0byBwZXJmb3JtIGZ1cnRoZXIgcGFydGl0aW9u CkBAIC0xNjEwLDEyICsxNjEwLDEyIEBAIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGxhbihQbGFubmVy SW5mbyAqcm9vdCwgTWVyZ2VBcHBlbmRQYXRoICpiZXN0X3BhdGgsCiAJCUFzc2VydChiZXN0X3Bh dGgtPnBhdGgucGFyYW1faW5mbyA9PSBOVUxMKTsKIAogCQlpZiAocHJ1bmVxdWFsICE9IE5JTCkK LQkJCW5vZGUtPnBhcnRfcHJ1bmVfaW5kZXggPSBtYWtlX3BhcnRpdGlvbl9wcnVuZWluZm8ocm9v dCwgcmVsLAorCQkJbm9kZS0+YXAucGFydF9wcnVuZV9pbmRleCA9IG1ha2VfcGFydGl0aW9uX3By dW5laW5mbyhyb290LCByZWwsCiAJCQkJCQkJCQkJCQkJCQkgIGJlc3RfcGF0aC0+c3VicGF0aHMs CiAJCQkJCQkJCQkJCQkJCQkgIHBydW5lcXVhbCk7CiAJfQogCi0Jbm9kZS0+bWVyZ2VwbGFucyA9 IHN1YnBsYW5zOworCW5vZGUtPmFwLnN1YnBsYW5zID0gc3VicGxhbnM7CiAKIAkvKgogCSAqIElm IHByZXBhcmVfc29ydF9mcm9tX3BhdGhrZXlzIGFkZGVkIHNvcnQgY29sdW1ucywgYnV0IHdlIHdl cmUgdG9sZCB0bwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVm cy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCmluZGV4IGNkN2VhMWU2 YjU4Li5hNTk1ZjM0Yzg3YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v c2V0cmVmcy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYwpAQCAt MTg1MCwxMCArMTg1MCwxMCBAQCBzZXRfYXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJv b3QsCiAJICogY2hlY2sgcXVhbHMuICBJZiBpdCdzIGdvdCBleGFjdGx5IG9uZSBjaGlsZCBwbGFu LCB0aGVuIGl0J3Mgbm90IGRvaW5nCiAJICogYW55dGhpbmcgdXNlZnVsIGF0IGFsbCwgYW5kIHdl IGNhbiBzdHJpcCBpdCBvdXQuCiAJICovCi0JQXNzZXJ0KGFwbGFuLT5wbGFuLnF1YWwgPT0gTklM KTsKKwlBc3NlcnQoYXBsYW4tPmFwLnBsYW4ucXVhbCA9PSBOSUwpOwogCiAJLyogRmlyc3QsIHdl IGdvdHRhIHJlY3Vyc2Ugb24gdGhlIGNoaWxkcmVuICovCi0JZm9yZWFjaChsLCBhcGxhbi0+YXBw ZW5kcGxhbnMpCisJZm9yZWFjaChsLCBhcGxhbi0+YXAuc3VicGxhbnMpCiAJewogCQlsZmlyc3Qo bCkgPSBzZXRfcGxhbl9yZWZzKHJvb3QsIChQbGFuICopIGxmaXJzdChsKSwgcnRvZmZzZXQpOwog CX0KQEAgLTE4NjYsMTEgKzE4NjYsMTEgQEAgc2V0X2FwcGVuZF9yZWZlcmVuY2VzKFBsYW5uZXJJ bmZvICpyb290LAogCSAqIHBsYW4gbWF5IGV4ZWN1dGUgdGhlIG5vbi1wYXJhbGxlbCBhd2FyZSBj aGlsZCBtdWx0aXBsZSB0aW1lcy4gIChJZiB5b3UKIAkgKiBjaGFuZ2UgdGhlc2UgcnVsZXMsIHVw ZGF0ZSBjcmVhdGVfYXBwZW5kX3BhdGggdG8gbWF0Y2guKQogCSAqLwotCWlmIChsaXN0X2xlbmd0 aChhcGxhbi0+YXBwZW5kcGxhbnMpID09IDEpCisJaWYgKGxpc3RfbGVuZ3RoKGFwbGFuLT5hcC5z dWJwbGFucykgPT0gMSkKIAl7Ci0JCVBsYW4JICAgKnAgPSAoUGxhbiAqKSBsaW5pdGlhbChhcGxh bi0+YXBwZW5kcGxhbnMpOworCQlQbGFuCSAgICpwID0gKFBsYW4gKikgbGluaXRpYWwoYXBsYW4t PmFwLnN1YnBsYW5zKTsKIAotCQlpZiAocC0+cGFyYWxsZWxfYXdhcmUgPT0gYXBsYW4tPnBsYW4u cGFyYWxsZWxfYXdhcmUpCisJCWlmIChwLT5wYXJhbGxlbF9hd2FyZSA9PSBhcGxhbi0+YXAucGxh bi5wYXJhbGxlbF9hd2FyZSkKIAkJCXJldHVybiBjbGVhbl91cF9yZW1vdmVkX3BsYW5fbGV2ZWwo KFBsYW4gKikgYXBsYW4sIHApOwogCX0KIApAQCAtMTg4MSwxOSArMTg4MSwxOSBAQCBzZXRfYXBw ZW5kX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsCiAJICovCiAJc2V0X2R1bW15X3RsaXN0 X3JlZmVyZW5jZXMoKFBsYW4gKikgYXBsYW4sIHJ0b2Zmc2V0KTsKIAotCWFwbGFuLT5hcHByZWxp ZHMgPSBvZmZzZXRfcmVsaWRfc2V0KGFwbGFuLT5hcHByZWxpZHMsIHJ0b2Zmc2V0KTsKKwlhcGxh bi0+YXAuYXBwcmVsaWRzID0gb2Zmc2V0X3JlbGlkX3NldChhcGxhbi0+YXAuYXBwcmVsaWRzLCBy dG9mZnNldCk7CiAKIAkvKgogCSAqIEFkZCBQYXJ0aXRpb25QcnVuZUluZm8sIGlmIGFueSwgdG8g UGxhbm5lckdsb2JhbCBhbmQgdXBkYXRlIHRoZSBpbmRleC4KIAkgKiBBbHNvIHVwZGF0ZSB0aGUg UlQgaW5kZXhlcyBwcmVzZW50IGluIGl0IHRvIGFkZCB0aGUgb2Zmc2V0LgogCSAqLwotCWlmIChh cGxhbi0+cGFydF9wcnVuZV9pbmRleCA+PSAwKQotCQlhcGxhbi0+cGFydF9wcnVuZV9pbmRleCA9 Ci0JCQlyZWdpc3Rlcl9wYXJ0cHJ1bmVpbmZvKHJvb3QsIGFwbGFuLT5wYXJ0X3BydW5lX2luZGV4 LCBydG9mZnNldCk7CisJaWYgKGFwbGFuLT5hcC5wYXJ0X3BydW5lX2luZGV4ID49IDApCisJCWFw bGFuLT5hcC5wYXJ0X3BydW5lX2luZGV4ID0KKwkJCXJlZ2lzdGVyX3BhcnRwcnVuZWluZm8ocm9v dCwgYXBsYW4tPmFwLnBhcnRfcHJ1bmVfaW5kZXgsIHJ0b2Zmc2V0KTsKIAogCS8qIFdlIGRvbid0 IG5lZWQgdG8gcmVjdXJzZSB0byBsZWZ0dHJlZSBvciByaWdodHRyZWUgLi4uICovCi0JQXNzZXJ0 KGFwbGFuLT5wbGFuLmxlZnR0cmVlID09IE5VTEwpOwotCUFzc2VydChhcGxhbi0+cGxhbi5yaWdo dHRyZWUgPT0gTlVMTCk7CisJQXNzZXJ0KGFwbGFuLT5hcC5wbGFuLmxlZnR0cmVlID09IE5VTEwp OworCUFzc2VydChhcGxhbi0+YXAucGxhbi5yaWdodHRyZWUgPT0gTlVMTCk7CiAKIAlyZXR1cm4g KFBsYW4gKikgYXBsYW47CiB9CkBAIC0xOTE3LDEwICsxOTE3LDEwIEBAIHNldF9tZXJnZWFwcGVu ZF9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290LAogCSAqIG9yIGNoZWNrIHF1YWxzLiAgSWYg aXQncyBnb3QgZXhhY3RseSBvbmUgY2hpbGQgcGxhbiwgdGhlbiBpdCdzIG5vdAogCSAqIGRvaW5n IGFueXRoaW5nIHVzZWZ1bCBhdCBhbGwsIGFuZCB3ZSBjYW4gc3RyaXAgaXQgb3V0LgogCSAqLwot CUFzc2VydChtcGxhbi0+cGxhbi5xdWFsID09IE5JTCk7CisJQXNzZXJ0KG1wbGFuLT5hcC5wbGFu LnF1YWwgPT0gTklMKTsKIAogCS8qIEZpcnN0LCB3ZSBnb3R0YSByZWN1cnNlIG9uIHRoZSBjaGls ZHJlbiAqLwotCWZvcmVhY2gobCwgbXBsYW4tPm1lcmdlcGxhbnMpCisJZm9yZWFjaChsLCBtcGxh bi0+YXAuc3VicGxhbnMpCiAJewogCQlsZmlyc3QobCkgPSBzZXRfcGxhbl9yZWZzKHJvb3QsIChQ bGFuICopIGxmaXJzdChsKSwgcnRvZmZzZXQpOwogCX0KQEAgLTE5MzQsMTEgKzE5MzQsMTEgQEAg c2V0X21lcmdlYXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsCiAJICogbXVsdGlw bGUgdGltZXMuICAoSWYgeW91IGNoYW5nZSB0aGVzZSBydWxlcywgdXBkYXRlCiAJICogY3JlYXRl X21lcmdlX2FwcGVuZF9wYXRoIHRvIG1hdGNoLikKIAkgKi8KLQlpZiAobGlzdF9sZW5ndGgobXBs YW4tPm1lcmdlcGxhbnMpID09IDEpCisJaWYgKGxpc3RfbGVuZ3RoKG1wbGFuLT5hcC5zdWJwbGFu cykgPT0gMSkKIAl7Ci0JCVBsYW4JICAgKnAgPSAoUGxhbiAqKSBsaW5pdGlhbChtcGxhbi0+bWVy Z2VwbGFucyk7CisJCVBsYW4JICAgKnAgPSAoUGxhbiAqKSBsaW5pdGlhbChtcGxhbi0+YXAuc3Vi cGxhbnMpOwogCi0JCWlmIChwLT5wYXJhbGxlbF9hd2FyZSA9PSBtcGxhbi0+cGxhbi5wYXJhbGxl bF9hd2FyZSkKKwkJaWYgKHAtPnBhcmFsbGVsX2F3YXJlID09IG1wbGFuLT5hcC5wbGFuLnBhcmFs bGVsX2F3YXJlKQogCQkJcmV0dXJuIGNsZWFuX3VwX3JlbW92ZWRfcGxhbl9sZXZlbCgoUGxhbiAq KSBtcGxhbiwgcCk7CiAJfQogCkBAIC0xOTQ5LDE5ICsxOTQ5LDE5IEBAIHNldF9tZXJnZWFwcGVu ZF9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290LAogCSAqLwogCXNldF9kdW1teV90bGlzdF9y ZWZlcmVuY2VzKChQbGFuICopIG1wbGFuLCBydG9mZnNldCk7CiAKLQltcGxhbi0+YXBwcmVsaWRz ID0gb2Zmc2V0X3JlbGlkX3NldChtcGxhbi0+YXBwcmVsaWRzLCBydG9mZnNldCk7CisJbXBsYW4t PmFwLmFwcHJlbGlkcyA9IG9mZnNldF9yZWxpZF9zZXQobXBsYW4tPmFwLmFwcHJlbGlkcywgcnRv ZmZzZXQpOwogCiAJLyoKIAkgKiBBZGQgUGFydGl0aW9uUHJ1bmVJbmZvLCBpZiBhbnksIHRvIFBs YW5uZXJHbG9iYWwgYW5kIHVwZGF0ZSB0aGUgaW5kZXguCiAJICogQWxzbyB1cGRhdGUgdGhlIFJU IGluZGV4ZXMgcHJlc2VudCBpbiBpdCB0byBhZGQgdGhlIG9mZnNldC4KIAkgKi8KLQlpZiAobXBs YW4tPnBhcnRfcHJ1bmVfaW5kZXggPj0gMCkKLQkJbXBsYW4tPnBhcnRfcHJ1bmVfaW5kZXggPQot CQkJcmVnaXN0ZXJfcGFydHBydW5laW5mbyhyb290LCBtcGxhbi0+cGFydF9wcnVuZV9pbmRleCwg cnRvZmZzZXQpOworCWlmIChtcGxhbi0+YXAucGFydF9wcnVuZV9pbmRleCA+PSAwKQorCQltcGxh bi0+YXAucGFydF9wcnVuZV9pbmRleCA9CisJCQlyZWdpc3Rlcl9wYXJ0cHJ1bmVpbmZvKHJvb3Qs IG1wbGFuLT5hcC5wYXJ0X3BydW5lX2luZGV4LCBydG9mZnNldCk7CiAKIAkvKiBXZSBkb24ndCBu ZWVkIHRvIHJlY3Vyc2UgdG8gbGVmdHRyZWUgb3IgcmlnaHR0cmVlIC4uLiAqLwotCUFzc2VydCht cGxhbi0+cGxhbi5sZWZ0dHJlZSA9PSBOVUxMKTsKLQlBc3NlcnQobXBsYW4tPnBsYW4ucmlnaHR0 cmVlID09IE5VTEwpOworCUFzc2VydChtcGxhbi0+YXAucGxhbi5sZWZ0dHJlZSA9PSBOVUxMKTsK KwlBc3NlcnQobXBsYW4tPmFwLnBsYW4ucmlnaHR0cmVlID09IE5VTEwpOwogCiAJcmV0dXJuIChQ bGFuICopIG1wbGFuOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v c3Vic2VsZWN0LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zdWJzZWxlY3QuYwppbmRl eCBmZjYzZDIwZjhkNS4uZWI2MTZjOTc3YmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGlt aXplci9wbGFuL3N1YnNlbGVjdC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3N1 YnNlbGVjdC5jCkBAIC0yNzU5LDcgKzI3NTksNyBAQCBmaW5hbGl6ZV9wbGFuKFBsYW5uZXJJbmZv ICpyb290LCBQbGFuICpwbGFuLAogCiAJCWNhc2UgVF9BcHBlbmQ6CiAJCQl7Ci0JCQkJZm9yZWFj aChsLCAoKEFwcGVuZCAqKSBwbGFuKS0+YXBwZW5kcGxhbnMpCisJCQkJZm9yZWFjaChsLCAoKEFw cGVuZCAqKSBwbGFuKS0+YXAuc3VicGxhbnMpCiAJCQkJewogCQkJCQljb250ZXh0LnBhcmFtaWRz ID0KIAkJCQkJCWJtc19hZGRfbWVtYmVycyhjb250ZXh0LnBhcmFtaWRzLApAQCAtMjc3NCw3ICsy Nzc0LDcgQEAgZmluYWxpemVfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgUGxhbiAqcGxhbiwKIAog CQljYXNlIFRfTWVyZ2VBcHBlbmQ6CiAJCQl7Ci0JCQkJZm9yZWFjaChsLCAoKE1lcmdlQXBwZW5k ICopIHBsYW4pLT5tZXJnZXBsYW5zKQorCQkJCWZvcmVhY2gobCwgKChNZXJnZUFwcGVuZCAqKSBw bGFuKS0+YXAuc3VicGxhbnMpCiAJCQkJewogCQkJCQljb250ZXh0LnBhcmFtaWRzID0KIAkJCQkJ CWJtc19hZGRfbWVtYmVycyhjb250ZXh0LnBhcmFtaWRzLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGls cy5jCmluZGV4IDlmODVlYjg2ZGExLi5jZTU3ZjgwZTVlMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxl dXRpbHMuYwpAQCAtNTE2Myw5ICs1MTYzLDkgQEAgc2V0X2RlcGFyc2VfcGxhbihkZXBhcnNlX25h bWVzcGFjZSAqZHBucywgUGxhbiAqcGxhbikKIAkgKiBuYXR1cmFsIGNob2ljZS4KIAkgKi8KIAlp ZiAoSXNBKHBsYW4sIEFwcGVuZCkpCi0JCWRwbnMtPm91dGVyX3BsYW4gPSBsaW5pdGlhbCgoKEFw cGVuZCAqKSBwbGFuKS0+YXBwZW5kcGxhbnMpOworCQlkcG5zLT5vdXRlcl9wbGFuID0gbGluaXRp YWwoKChBcHBlbmQgKikgcGxhbiktPmFwLnN1YnBsYW5zKTsKIAllbHNlIGlmIChJc0EocGxhbiwg TWVyZ2VBcHBlbmQpKQotCQlkcG5zLT5vdXRlcl9wbGFuID0gbGluaXRpYWwoKChNZXJnZUFwcGVu ZCAqKSBwbGFuKS0+bWVyZ2VwbGFucyk7CisJCWRwbnMtPm91dGVyX3BsYW4gPSBsaW5pdGlhbCgo KE1lcmdlQXBwZW5kICopIHBsYW4pLT5hcC5zdWJwbGFucyk7CiAJZWxzZQogCQlkcG5zLT5vdXRl cl9wbGFuID0gb3V0ZXJQbGFuKHBsYW4pOwogCkBAIC03OTU1LDEwICs3OTU1LDEwIEBAIHJlc29s dmVfc3BlY2lhbF92YXJubyhOb2RlICpub2RlLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsCiAK IAkJaWYgKElzQShkcG5zLT5wbGFuLCBBcHBlbmQpKQogCQkJY29udGV4dC0+YXBwZW5kcGFyZW50 cyA9IGJtc191bmlvbihjb250ZXh0LT5hcHBlbmRwYXJlbnRzLAotCQkJCQkJCQkJCQkgICAoKEFw cGVuZCAqKSBkcG5zLT5wbGFuKS0+YXBwcmVsaWRzKTsKKwkJCQkJCQkJCQkJICAgKChBcHBlbmQg KikgZHBucy0+cGxhbiktPmFwLmFwcHJlbGlkcyk7CiAJCWVsc2UgaWYgKElzQShkcG5zLT5wbGFu LCBNZXJnZUFwcGVuZCkpCiAJCQljb250ZXh0LT5hcHBlbmRwYXJlbnRzID0gYm1zX3VuaW9uKGNv bnRleHQtPmFwcGVuZHBhcmVudHMsCi0JCQkJCQkJCQkJCSAgICgoTWVyZ2VBcHBlbmQgKikgZHBu cy0+cGxhbiktPmFwcHJlbGlkcyk7CisJCQkJCQkJCQkJCSAgICgoTWVyZ2VBcHBlbmQgKikgZHBu cy0+cGxhbiktPmFwLmFwcHJlbGlkcyk7CiAKIAkJcHVzaF9jaGlsZF9wbGFuKGRwbnMsIGRwbnMt Pm91dGVyX3BsYW4sICZzYXZlX2RwbnMpOwogCQlyZXNvbHZlX3NwZWNpYWxfdmFybm8oKE5vZGUg KikgdGxlLT5leHByLCBjb250ZXh0LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Iv ZXhlY0FwcGVuZC5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0FwcGVuZC5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jMTAzMGRjNTI4MgotLS0gL2Rldi9udWxs CisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNBcHBlbmQuaApAQCAtMCwwICsxLDMzIEBA CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGV4ZWNBcHBlbmQuaAorICoJCVN1cHBvcnQgZnVuY3Rp b25zIGZvciBNZXJnZUFwcGVuZCBhbmQgQXBwZW5kIG5vZGVzLgorICoKKyAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5Ni0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91 cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJz aXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJCXNyYy9pbmNsdWRl L2V4ZWN1dG9yL2V4ZWNBcHBlbmQuaAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2lmbmRl ZiBFWEVDQVBQRU5EX0gKKyNkZWZpbmUgRVhFQ0FQUEVORF9ICisKKyNpbmNsdWRlICJub2Rlcy9l eGVjbm9kZXMuaCIKKwordm9pZAkJRXhlY0luaXRBcHBlbmRlcihBcHBlbmRlclN0YXRlICogc3Rh dGUsCisJCQkJCQkJIEFwcGVuZGVyICogbm9kZSwKKwkJCQkJCQkgRVN0YXRlICplc3RhdGUsCisJ CQkJCQkJIGludCBlZmxhZ3MsCisJCQkJCQkJIGludCBmaXJzdF9wYXJ0aWFsX3BsYW4sCisJCQkJ CQkJIGludCAqZmlyc3RfdmFsaWRfcGFydGlhbF9wbGFuKTsKKwordm9pZAkJRXhlY0VuZEFwcGVu ZGVyKEFwcGVuZGVyU3RhdGUgKiBub2RlKTsKKwordm9pZAkJRXhlY1JlU2NhbkFwcGVuZGVyKEFw cGVuZGVyU3RhdGUgKiBub2RlKTsKKwordm9pZAkJRXhlY0FwcGVuZGVyQXN5bmNCZWdpbihBcHBl bmRlclN0YXRlICogbm9kZSk7CisKK3ZvaWQJCUV4ZWNBcHBlbmRlckFzeW5jRXZlbnRXYWl0KEFw cGVuZGVyU3RhdGUgKiBub2RlLCBpbnQgdGltZW91dCwgdWludDMyIHdhaXRfZXZlbnRfaW5mbyk7 CisKKyNlbmRpZgkJCQkJCQkvKiBFWEVDQVBQRU5EX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5k ZXggNTg4N2NiZjRmMTYuLjY5MTIzYTMxYmJkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rl cy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMTQ3 Miw2ICsxNDcyLDI3IEBAIHR5cGVkZWYgc3RydWN0IE1vZGlmeVRhYmxlU3RhdGUKIAlMaXN0CSAg ICptdF9tZXJnZUpvaW5Db25kaXRpb25zOwogfSBNb2RpZnlUYWJsZVN0YXRlOwogCit0eXBlZGVm IHN0cnVjdCBBcHBlbmRlclN0YXRlCit7CisJUGxhblN0YXRlCXBzOwkJCQkvKiBpdHMgZmlyc3Qg ZmllbGQgaXMgTm9kZVRhZyAqLworCVBsYW5TdGF0ZSAqKnBsYW5zOwkJCS8qIGFycmF5IG9mIFBs YW5TdGF0ZXMgZm9yIG15IGlucHV0cyAqLworCWludAkJCW5wbGFuczsKKworCS8qIEFzeW5jaHJv bm91cyBleGVjdXRpb24gc3RhdGUgKi8KKwlCaXRtYXBzZXQgICphc3luY3BsYW5zOwkJLyogYXN5 bmNocm9ub3VzIHBsYW5zIGluZGV4ZXMgKi8KKwlpbnQJCQluYXN5bmNwbGFuczsJLyogIyBvZiBh c3luY2hyb25vdXMgcGxhbnMgKi8KKwlBc3luY1JlcXVlc3QgKiphc3luY3JlcXVlc3RzOwkvKiBh cnJheSBvZiBBc3luY1JlcXVlc3RzICovCisJVHVwbGVUYWJsZVNsb3QgKiphc3luY3Jlc3VsdHM7 CS8qIHVucmV0dXJuZWQgcmVzdWx0cyBvZiBhc3luYyBwbGFucyAqLworCUJpdG1hcHNldCAgKm5l ZWRyZXF1ZXN0OwkvKiBhc3luY2hyb25vdXMgcGxhbnMgbmVlZGluZyBhIG5ldyByZXF1ZXN0ICov CisJc3RydWN0IFdhaXRFdmVudFNldCAqZXZlbnRzZXQ7CS8qIFdhaXRFdmVudFNldCBmb3IgZmls ZSBkZXNjcmlwdG9yIHdhaXRzICovCisKKwkvKiBQYXJ0aXRpb24gcHJ1bmluZyBzdGF0ZSAqLwor CXN0cnVjdCBQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZV9zdGF0ZTsKKwlib29sCQl2YWxpZF9z dWJwbGFuc19pZGVudGlmaWVkOworCUJpdG1hcHNldCAgKnZhbGlkX3N1YnBsYW5zOworCUJpdG1h cHNldCAgKnZhbGlkX2FzeW5jcGxhbnM7CS8qIHZhbGlkIGFzeW5jaHJvbm91cyBwbGFucyBpbmRl eGVzICovCit9CQkJQXBwZW5kZXJTdGF0ZTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJIEFw cGVuZFN0YXRlIGluZm9ybWF0aW9uCiAgKgpAQCAtMTQ5MywzMSArMTUxNCwyMCBAQCBzdHJ1Y3Qg UGFydGl0aW9uUHJ1bmVTdGF0ZTsKIAogc3RydWN0IEFwcGVuZFN0YXRlCiB7Ci0JUGxhblN0YXRl CXBzOwkJCQkvKiBpdHMgZmlyc3QgZmllbGQgaXMgTm9kZVRhZyAqLwotCVBsYW5TdGF0ZSAqKmFw cGVuZHBsYW5zOwkvKiBhcnJheSBvZiBQbGFuU3RhdGVzIGZvciBteSBpbnB1dHMgKi8KLQlpbnQJ CQlhc19ucGxhbnM7CisJQXBwZW5kZXJTdGF0ZSBhczsKKwogCWludAkJCWFzX3doaWNocGxhbjsK IAlib29sCQlhc19iZWd1bjsJCS8qIGZhbHNlIG1lYW5zIG5lZWQgdG8gaW5pdGlhbGl6ZSAqLwot CUJpdG1hcHNldCAgKmFzX2FzeW5jcGxhbnM7CS8qIGFzeW5jaHJvbm91cyBwbGFucyBpbmRleGVz ICovCi0JaW50CQkJYXNfbmFzeW5jcGxhbnM7IC8qICMgb2YgYXN5bmNocm9ub3VzIHBsYW5zICov Ci0JQXN5bmNSZXF1ZXN0ICoqYXNfYXN5bmNyZXF1ZXN0czsJLyogYXJyYXkgb2YgQXN5bmNSZXF1 ZXN0cyAqLwotCVR1cGxlVGFibGVTbG90ICoqYXNfYXN5bmNyZXN1bHRzOwkvKiB1bnJldHVybmVk IHJlc3VsdHMgb2YgYXN5bmMgcGxhbnMgKi8KLQlpbnQJCQlhc19uYXN5bmNyZXN1bHRzOwkvKiAj IG9mIHZhbGlkIGVudHJpZXMgaW4gYXNfYXN5bmNyZXN1bHRzICovCi0JYm9vbAkJYXNfc3luY2Rv bmU7CS8qIHRydWUgaWYgYWxsIHN5bmNocm9ub3VzIHBsYW5zIGRvbmUgaW4KLQkJCQkJCQkJICog YXN5bmNocm9ub3VzIG1vZGUsIGVsc2UgZmFsc2UgKi8KKwlpbnQJCQlhc19uYXN5bmNyZXN1bHRz OwkvKiAjIG9mIHZhbGlkIGVudHJpZXMgaW4gYXN5bmNyZXN1bHRzICovCisJYm9vbAkJYXNfc3lu Y2RvbmU7CS8qIGFsbCBzeW5jIHBsYW5zIGRvbmUgaW4gYXN5bmMgbW9kZT8gKi8KIAlpbnQJCQlh c19uYXN5bmNyZW1haW47CS8qICMgb2YgcmVtYWluaW5nIGFzeW5jaHJvbm91cyBwbGFucyAqLwot CUJpdG1hcHNldCAgKmFzX25lZWRyZXF1ZXN0OyAvKiBhc3luY2hyb25vdXMgcGxhbnMgbmVlZGlu ZyBhIG5ldyByZXF1ZXN0ICovCi0Jc3RydWN0IFdhaXRFdmVudFNldCAqYXNfZXZlbnRzZXQ7CS8q IFdhaXRFdmVudFNldCB1c2VkIHRvIGNvbmZpZ3VyZSBmaWxlCi0JCQkJCQkJCQkJICogZGVzY3Jp cHRvciB3YWl0IGV2ZW50cyAqLwotCWludAkJCWFzX2ZpcnN0X3BhcnRpYWxfcGxhbjsJLyogSW5k ZXggb2YgJ2FwcGVuZHBsYW5zJyBjb250YWluaW5nCi0JCQkJCQkJCQkJICogdGhlIGZpcnN0IHBh cnRpYWwgcGxhbiAqLwotCVBhcmFsbGVsQXBwZW5kU3RhdGUgKmFzX3BzdGF0ZTsgLyogcGFyYWxs ZWwgY29vcmRpbmF0aW9uIGluZm8gKi8KLQlTaXplCQlwc3RhdGVfbGVuOwkJLyogc2l6ZSBvZiBw YXJhbGxlbCBjb29yZGluYXRpb24gaW5mbyAqLwotCXN0cnVjdCBQYXJ0aXRpb25QcnVuZVN0YXRl ICphc19wcnVuZV9zdGF0ZTsKLQlib29sCQlhc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkOwkv KiBpcyBhc192YWxpZF9zdWJwbGFucyB2YWxpZD8gKi8KLQlCaXRtYXBzZXQgICphc192YWxpZF9z dWJwbGFuczsKLQlCaXRtYXBzZXQgICphc192YWxpZF9hc3luY3BsYW5zOwkvKiB2YWxpZCBhc3lu Y2hyb25vdXMgcGxhbnMgaW5kZXhlcyAqLwotCWJvb2wJCSgqY2hvb3NlX25leHRfc3VicGxhbikg KEFwcGVuZFN0YXRlICopOworCWludAkJCWFzX2ZpcnN0X3BhcnRpYWxfcGxhbjsKKworCS8qIFBh cmFsbGVsIGFwcGVuZCBzcGVjaWZpYyAqLworCVBhcmFsbGVsQXBwZW5kU3RhdGUgKmFzX3BzdGF0 ZTsKKwlTaXplCQlwc3RhdGVfbGVuOworCisJYm9vbAkJKCpjaG9vc2VfbmV4dF9zdWJwbGFuKSAo c3RydWN0IEFwcGVuZFN0YXRlICopOwogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTUz NywyNyArMTU0NywxNyBAQCBzdHJ1Y3QgQXBwZW5kU3RhdGUKICAqLwogdHlwZWRlZiBzdHJ1Y3Qg TWVyZ2VBcHBlbmRTdGF0ZQogewotCVBsYW5TdGF0ZQlwczsJCQkJLyogaXRzIGZpcnN0IGZpZWxk IGlzIE5vZGVUYWcgKi8KLQlQbGFuU3RhdGUgKiptZXJnZXBsYW5zOwkJLyogYXJyYXkgb2YgUGxh blN0YXRlcyBmb3IgbXkgaW5wdXRzICovCi0JaW50CQkJbXNfbnBsYW5zOworCUFwcGVuZGVyU3Rh dGUgbXM7CisKIAlpbnQJCQltc19ua2V5czsKIAlTb3J0U3VwcG9ydCBtc19zb3J0a2V5czsJLyog YXJyYXkgb2YgbGVuZ3RoIG1zX25rZXlzICovCiAJVHVwbGVUYWJsZVNsb3QgKiptc19zbG90czsJ LyogYXJyYXkgb2YgbGVuZ3RoIG1zX25wbGFucyAqLwogCXN0cnVjdCBiaW5hcnloZWFwICptc19o ZWFwOyAvKiBiaW5hcnkgaGVhcCBvZiBzbG90IGluZGljZXMgKi8KIAlib29sCQltc19pbml0aWFs aXplZDsgLyogYXJlIHN1YnBsYW5zIHN0YXJ0ZWQ/ICovCi0JQml0bWFwc2V0ICAqbXNfYXN5bmNw bGFuczsJLyogYXN5bmNocm9ub3VzIHBsYW5zIGluZGV4ZXMgKi8KLQlpbnQJCQltc19uYXN5bmNw bGFuczsgLyogIyBvZiBhc3luY2hyb25vdXMgcGxhbnMgKi8KLQlBc3luY1JlcXVlc3QgKiptc19h c3luY3JlcXVlc3RzOwkvKiBhcnJheSBvZiBBc3luY1JlcXVlc3RzICovCi0JVHVwbGVUYWJsZVNs b3QgKiptc19hc3luY3Jlc3VsdHM7CS8qIHVucmV0dXJuZWQgcmVzdWx0cyBvZiBhc3luYyBwbGFu cyAqLworCisJLyogTWVyZ2Utc3BlY2lmaWMgYXN5bmMgdHJhY2tpbmcgKi8KIAlCaXRtYXBzZXQg ICptc19oYXNfYXN5bmNyZXN1bHRzOwkvKiBwbGFucyB3aGljaCBoYXZlIGFzeW5jIHJlc3VsdHMg Ki8KIAlCaXRtYXBzZXQgICptc19hc3luY3JlbWFpbjsgLyogcmVtYWluaW5nIGFzeW5jaHJvbm91 cyBwbGFucyAqLwotCUJpdG1hcHNldCAgKm1zX25lZWRyZXF1ZXN0OyAvKiBhc3luY2hyb25vdXMg cGxhbnMgbmVlZGluZyBhIG5ldyByZXF1ZXN0ICovCi0Jc3RydWN0IFdhaXRFdmVudFNldCAqbXNf ZXZlbnRzZXQ7CS8qIFdhaXRFdmVudFNldCB1c2VkIHRvIGNvbmZpZ3VyZSBmaWxlCi0JCQkJCQkJ CQkJICogZGVzY3JpcHRvciB3YWl0IGV2ZW50cyAqLwotCXN0cnVjdCBQYXJ0aXRpb25QcnVuZVN0 YXRlICptc19wcnVuZV9zdGF0ZTsKLQlib29sCQltc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVk OwkvKiBpcyBtc192YWxpZF9zdWJwbGFucyB2YWxpZD8gKi8KLQlCaXRtYXBzZXQgICptc192YWxp ZF9zdWJwbGFuczsKLQlCaXRtYXBzZXQgICptc192YWxpZF9hc3luY3BsYW5zOwkvKiB2YWxpZCBh c3luY2hyb25vdXMgcGxhbnMgaW5kZXhlcyAqLwogfSBNZXJnZUFwcGVuZFN0YXRlOwogCiAvKiBH ZXR0ZXJzIGZvciBBcHBlbmRTdGF0ZSBhbmQgTWVyZ2VBcHBlbmRTdGF0ZSAqLwpAQCAtMTU2Nyw5 ICsxNTY3LDkgQEAgR2V0QXBwZW5kRXZlbnRTZXQoUGxhblN0YXRlICpwcykKIAlBc3NlcnQoSXNB KHBzLCBBcHBlbmRTdGF0ZSkgfHwgSXNBKHBzLCBNZXJnZUFwcGVuZFN0YXRlKSk7CiAKIAlpZiAo SXNBKHBzLCBBcHBlbmRTdGF0ZSkpCi0JCXJldHVybiAoKEFwcGVuZFN0YXRlICopIHBzKS0+YXNf ZXZlbnRzZXQ7CisJCXJldHVybiAoKEFwcGVuZFN0YXRlICopIHBzKS0+YXMuZXZlbnRzZXQ7CiAJ ZWxzZQotCQlyZXR1cm4gKChNZXJnZUFwcGVuZFN0YXRlICopIHBzKS0+bXNfZXZlbnRzZXQ7CisJ CXJldHVybiAoKE1lcmdlQXBwZW5kU3RhdGUgKikgcHMpLT5tcy5ldmVudHNldDsKIH0KIAogc3Rh dGljIGlubGluZSBCaXRtYXBzZXQgKgpAQCAtMTU3OCw5ICsxNTc4LDkgQEAgR2V0TmVlZFJlcXVl c3QoUGxhblN0YXRlICpwcykKIAlBc3NlcnQoSXNBKHBzLCBBcHBlbmRTdGF0ZSkgfHwgSXNBKHBz LCBNZXJnZUFwcGVuZFN0YXRlKSk7CiAKIAlpZiAoSXNBKHBzLCBBcHBlbmRTdGF0ZSkpCi0JCXJl dHVybiAoKEFwcGVuZFN0YXRlICopIHBzKS0+YXNfbmVlZHJlcXVlc3Q7CisJCXJldHVybiAoKEFw cGVuZFN0YXRlICopIHBzKS0+YXMubmVlZHJlcXVlc3Q7CiAJZWxzZQotCQlyZXR1cm4gKChNZXJn ZUFwcGVuZFN0YXRlICopIHBzKS0+bXNfbmVlZHJlcXVlc3Q7CisJCXJldHVybiAoKE1lcmdlQXBw ZW5kU3RhdGUgKikgcHMpLT5tcy5uZWVkcmVxdWVzdDsKIH0KIAogLyogQ29tbW9uIHBhcnQgb2Yg Y2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMoKSBmb3IgQXBwZW5kIGFuZCBNZXJnZUFwcGVuZCAq LwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggYi9zcmMvaW5jbHVk ZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRleCBjNDM5M2E5NDMyMS4uMzBjMjBlODBiNDAgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25v ZGVzL3BsYW5ub2Rlcy5oCkBAIC0zODAsNiArMzgwLDIwIEBAIHR5cGVkZWYgc3RydWN0IE1vZGlm eVRhYmxlCiAKIHN0cnVjdCBQYXJ0aXRpb25QcnVuZUluZm87CQkvKiBmb3J3YXJkIHJlZmVyZW5j ZSB0byBzdHJ1Y3QgYmVsb3cgKi8KIAordHlwZWRlZiBzdHJ1Y3QgQXBwZW5kZXIKK3sKKwlQbGFu CQlwbGFuOwkJCS8qIGl0cyBmaXJzdCBmaWVsZCBpcyBOb2RlVGFnICovCisJQml0bWFwc2V0ICAq YXBwcmVsaWRzOwkJLyogUlRJcyBvZiBhcHBlbmRyZWwocykgZm9ybWVkIGJ5IHRoaXMgbm9kZSAq LworCUxpc3QJICAgKnN1YnBsYW5zOwkJLyogTGlzdCBvZiBQbGFucyAoZm9ybWVybHkKKwkJCQkJ CQkJICogYXBwZW5kcGxhbnMvbWVyZ2VwbGFucykgKi8KKworCS8qCisJICogSW5kZXggaW50byBQ bGFubmVkU3RtdC5wYXJ0UHJ1bmVJbmZvcyBhbmQgcGFyYWxsZWwgbGlzdHMgaW4gRVN0YXRlLiBT ZXQKKwkgKiB0byAtMSBpZiBubyBydW4tdGltZSBwcnVuaW5nIGlzIHVzZWQuCisJICovCisJaW50 CQkJcGFydF9wcnVuZV9pbmRleDsKK30JCQlBcHBlbmRlcjsKKwogLyogLS0tLS0tLS0tLS0tLS0t LQogICoJIEFwcGVuZCBub2RlIC0KICAqCQlHZW5lcmF0ZSB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0 aGUgcmVzdWx0cyBvZiBzdWItcGxhbnMuCkBAIC0zODcsMjUgKzQwMSwxNiBAQCBzdHJ1Y3QgUGFy dGl0aW9uUHJ1bmVJbmZvOwkJLyogZm9yd2FyZCByZWZlcmVuY2UgdG8gc3RydWN0IGJlbG93ICov CiAgKi8KIHR5cGVkZWYgc3RydWN0IEFwcGVuZAogewotCVBsYW4JCXBsYW47Ci0JLyogUlRJcyBv ZiBhcHBlbmRyZWwocykgZm9ybWVkIGJ5IHRoaXMgbm9kZSAqLwotCUJpdG1hcHNldCAgKmFwcHJl bGlkczsKLQlMaXN0CSAgICphcHBlbmRwbGFuczsKKwlBcHBlbmRlcglhcDsKKwogCS8qICMgb2Yg YXN5bmNocm9ub3VzIHBsYW5zICovCiAJaW50CQkJbmFzeW5jcGxhbnM7CiAKIAkvKgotCSAqIEFs bCAnYXBwZW5kcGxhbnMnIHByZWNlZGluZyB0aGlzIGluZGV4IGFyZSBub24tcGFydGlhbCBwbGFu cy4gQWxsCi0JICogJ2FwcGVuZHBsYW5zJyBmcm9tIHRoaXMgaW5kZXggb253YXJkcyBhcmUgcGFy dGlhbCBwbGFucy4KKwkgKiBBbGwgJ3N1YnBsYW5zJyBwcmVjZWRpbmcgdGhpcyBpbmRleCBhcmUg bm9uLXBhcnRpYWwgcGxhbnMuIEFsbAorCSAqICdzdWJwbGFucycgZnJvbSB0aGlzIGluZGV4IG9u d2FyZHMgYXJlIHBhcnRpYWwgcGxhbnMuCiAJICovCiAJaW50CQkJZmlyc3RfcGFydGlhbF9wbGFu OwotCi0JLyoKLQkgKiBJbmRleCBpbnRvIFBsYW5uZWRTdG10LnBhcnRQcnVuZUluZm9zIGFuZCBw YXJhbGxlbCBsaXN0cyBpbiBFU3RhdGU6Ci0JICogZXNfcGFydF9wcnVuZV9zdGF0ZXMgYW5kIGVz X3BhcnRfcHJ1bmVfcmVzdWx0cy4gU2V0IHRvIC0xIGlmIG5vCi0JICogcnVuLXRpbWUgcHJ1bmlu ZyBpcyB1c2VkLgotCSAqLwotCWludAkJCXBhcnRfcHJ1bmVfaW5kZXg7CiB9IEFwcGVuZDsKIAog LyogLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDE1LDEyICs0MjAsNyBAQCB0eXBlZGVmIHN0cnVjdCBB cHBlbmQKICAqLwogdHlwZWRlZiBzdHJ1Y3QgTWVyZ2VBcHBlbmQKIHsKLQlQbGFuCQlwbGFuOwot Ci0JLyogUlRJcyBvZiBhcHBlbmRyZWwocykgZm9ybWVkIGJ5IHRoaXMgbm9kZSAqLwotCUJpdG1h cHNldCAgKmFwcHJlbGlkczsKLQotCUxpc3QJICAgKm1lcmdlcGxhbnM7CisJQXBwZW5kZXIJYXA7 CiAKIAkvKiB0aGVzZSBmaWVsZHMgYXJlIGp1c3QgbGlrZSB0aGUgc29ydC1rZXkgaW5mbyBpbiBz dHJ1Y3QgU29ydDogKi8KIApAQCAtNDM4LDEzICs0MzgsNiBAQCB0eXBlZGVmIHN0cnVjdCBNZXJn ZUFwcGVuZAogCiAJLyogTlVMTFMgRklSU1QvTEFTVCBkaXJlY3Rpb25zICovCiAJYm9vbAkgICAq bnVsbHNGaXJzdCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7Ci0KLQkvKgotCSAq IEluZGV4IGludG8gUGxhbm5lZFN0bXQucGFydFBydW5lSW5mb3MgYW5kIHBhcmFsbGVsIGxpc3Rz IGluIEVTdGF0ZToKLQkgKiBlc19wYXJ0X3BydW5lX3N0YXRlcyBhbmQgZXNfcGFydF9wcnVuZV9y ZXN1bHRzLiBTZXQgdG8gLTEgaWYgbm8KLQkgKiBydW4tdGltZSBwcnVuaW5nIGlzIHVzZWQuCi0J ICovCi0JaW50CQkJcGFydF9wcnVuZV9pbmRleDsKIH0gTWVyZ2VBcHBlbmQ7CiAKIC8qIC0tLS0t LS0tLS0tLS0tLS0KLS0gCjIuNTEuMgoK --20013488fca0a9d01d2374bf15e8547dfcfe973c22a39b2f039b12736b87--