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 1w2nhX-000cJL-1z for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Mar 2026 10:00:32 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w2nhW-009Hvy-0M for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Mar 2026 10:00:30 +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 1w2nhV-009Hvp-19 for pgsql-hackers@lists.postgresql.org; Wed, 18 Mar 2026 10:00:29 +0000 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w2nhP-00000000Kuh-2V3Y for pgsql-hackers@postgresql.org; Wed, 18 Mar 2026 10:00:28 +0000 Received: by mail-wr1-x42c.google.com with SMTP id ffacd0b85a97d-43b3f91a7abso2157132f8f.1 for ; Wed, 18 Mar 2026 03:00:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773828024; cv=none; d=google.com; s=arc-20240605; b=B9yq54gqIiGc9dpLZVhrl+ZyztBBqRJfSXiZ2DakYXO2rekBTo7AavXlwZIhySWJRW mrS98dDOk1Xkth9KCcAQwEhNbvnh2MsuyxLrQ8rRtp1P+QMa/VHDAgpOaqyo22DDjXA/ lFu/QdURgQB2EoFvYHLl6IYmckDmxUwASoqd409qfa+E5VbRODxSqBcTYuU3FzCwlelB AkDxybgBR2USx/W52Irb29rkglZ+AlH3K9/s6Cx1INFncv+gtKDiF+7KSGrCbqffekRt /3hhhJIard8KE2Lsxqwj0x7LgKusqBc/D+spQ2sKjhFis0WzpQ2F13Ie/SjNIofZCph2 NE2A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=buantDj67U0OJ5tLceZ7zsFzDvREPzXLsNchuUB8Olc=; fh=95+D3hyIotb2lQTuwEcQIaaFu9Ori9u9ZILgrrSQ1H0=; b=UVUm4IwfazEDZcZirGcwYses6Dq9k2nqdVFgXB24slGJ4B8Zo3LrKGS1DxyLRPIHYP bvGmb4I7C2H6yprKTw9ofEI4HHisIql0r+XueW5GJAnuZ1KMHISNS2if15+U36aT+yTW NimTNimz7UFcudEX6BVI4G/HiPumYkWIyF+bUEkQgbTmM+wIRMZCxhFunB3rC5a0I4W2 BFBU8SRvX9gNeFweNpWww5cA/VjHzUzVDBGwOECT3f3UN2Qen6a8Of/pabekZMhgZrBj Y9dyLgzlXpj6OUH3ucXh00K5GvVPG0/f07e1XEB7RA5iw/Vv0o3HrTxS4WsKE9ZRxN+2 6AfA==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773828024; x=1774432824; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=buantDj67U0OJ5tLceZ7zsFzDvREPzXLsNchuUB8Olc=; b=TeLnx9ATc7bwLgC1WFYGf9wcjga+1uyDCG0ewI2P4pUEJo59KdtUU8S2akfP+QfaVf Fw4I3axTczjZf5AY4Lk+NvcsqnN/lo2SsKD0OY5Tz7igakLM+b1Iq7bLbUyk8tYGyr76 ZWwXGrpLFQzVQiKuccrb8gb7D/15SDh3Xkh4/ZNQj94OQsFK/sIPgENcUkBVk7IFPie1 C3wo7pc3ulcnFu0MiXrYqFyDu9LdGKvFR5zDeLJoNQj0yxm0vUG2rvCNwKZy8WcFyRBK r+eMigPNpIFmFb6VlEFn9Mv5qDFVfqzyPCkQD/PwSQ50E3AG1pi8iMRo/F55VnaBOtR3 nqig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773828024; x=1774432824; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=buantDj67U0OJ5tLceZ7zsFzDvREPzXLsNchuUB8Olc=; b=MTfP1w3M7ZmXXBsrknvrhco1CvC614qNu+2BmfIMgVh0eOOuTNrNicC/7uWcjOTTLW 7TlJXX81WCkc2jPhozM95E3M4xNw3ONDnX9NGhw4v6ICjJlEJPJGVU/I3ERI72TJ6FeG rx5A7NUmmFDFwKiBfuygXOTT0DTLQ3YillB2h+lNgQ/kmlbRR3AGPPJn2uVvkgIWsQv7 d4Xp19V9wC83NIC8knjy1NGXsGKw8mMnAi1SH12WN10rYNclZGN6j3TcCvCsgzVxVWMi o9rtw500jbmapiK4K2puq2fIUcUX6qCFKzsKERGUUi0zT0HK+dSVJ6iOA8ELTs/n6N7d cyeA== X-Forwarded-Encrypted: i=1; AJvYcCV8fvNNfJ82IH+RVxvg3rpHEdaA1n+7l3HEWRmoyMXzy8t+v+ZEnWRTpkmrdlOqcyiWWTW/fEqZW2q5jnwL@postgresql.org X-Gm-Message-State: AOJu0YzFZj0Gz81+mFN/Rn+fR6RWBLbFZ4kRpU0o4R9LOUJ+BK4jQ8ZB iHooHArEHu84Om6d1rdpIxJZVfWsX820y8fGHV8VbajtnQ0M+KQNIxWWhvvh3RixUvSt3HWY86a 7almuneXgK5WMk2Vuv/ziNcftnik0T8EM2G5m X-Gm-Gg: ATEYQzyVGWJMV0pyIf5KEm5nVki3nRmV3itUNqGROoxlFkN8IO7DkQ5EP0bhFjQiIBK Qf8KYdKi2iEb4L+698SDK0S8G8H+odTwjvIkgUiB3XmTNjCLWd5hjTHg49qEsI9vSbghq40EB7M rbsCfIQRjie8t1YXKUGEcqZLwsBYLGX94nkB0Y/V6m/njdZpdpUtEUsqmcVvRe9ZcNMmFyhLq7w 2btFu7Md/Bj+hvRqOLd6ONrDi16leWWY8Pc8QsnkHitnupFn85V4aNv5X5P5RBylTCYmkxjMhY/ TSP15kFiNHnNmAQxfCvjWAF/0ytl2mYBPvM1cHJsbzuvyX4DryA= X-Received: by 2002:a05:6000:1ac6:b0:43b:4362:8ef5 with SMTP id ffacd0b85a97d-43b527cb2fdmr4514299f8f.51.1773828023206; Wed, 18 Mar 2026 03:00:23 -0700 (PDT) MIME-Version: 1.0 From: Ashutosh Bapat Date: Wed, 18 Mar 2026 15:30:11 +0530 X-Gm-Features: AaiRm537PZ25sZj-AfA1dChEdTulSuQkrn0dbpemyewWmrAH-lNWwQoSSO5fMzM Message-ID: Subject: SQL/PGQ: All properties reference To: Peter Eisentraut , pgsql-hackers Content-Type: multipart/mixed; boundary="000000000000377570064d49853e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000377570064d49853e Content-Type: text/plain; charset="UTF-8" Hi Peter and Pgsql-Hackers, I am starting a new thread to discuss all properties reference feature which was not committed with the main patch. [1] A .* is called all properties reference and it is allowed only in COLUMNs clause. Interpreting subclause 9.2 and 9.3 together, it expands to a list of graph property references .p1, ... .pn where p1, ..., pn are the properties of the labels which satisfy the label expression in the element pattern identified by . The graph property references are added to the COLUMNs clause in place of the all property reference, just like how .* expands in SELECT's targetlist. In the current implementation, we delay resolving graph property references (.) till the time query is generated (generate_query_for_graph_path()). If we delay the all properties reference till that time, we can not determine the data types and names of the columns in the COLUMNs list. So we need to do that when the COLUMNs clause is resolved. This means that the properties associated with the labels needs to be resolved earlier. Since the properties are not associated with labels directly but through the elements, we need to find at least one element for every label in the label expression. In brief, all the namespace resolution need to happen before we transform COLUMNs clause. The patch rearranges the code that way. I like the resultant code since a. it handles errors more gracefully and can provide error location as well b. It avoids repeated property and element label lookups c. the code seems closer to how we create namespaces for table references. Flip side I think it fetches the properties which may or may not be needed by the query, similar to how we compute the tuple descriptor of a table referenced in the query even though we don't need all the columns. But overall I think it's better code as well. There are some things that still need work as below o. Order of properties in all properties reference ---------------------------------------------------------------- The standard (subclause 9.3) mentions this as implementation dependent. Since properties are associated with labels which are a logical entity, I don't think we need to define property numbers like attribute numbers. Natural order is ordering by the property names (even across the labels). Do we have any other option? o. Difference from Oracle ---------------------------------- Consider following query from the patch (please refer the graph_table.sql for details) SELECT * FROM GRAPH_TABLE (g1 MATCH (src IS vl1 | vl2 WHERE src.vprop1 = 10 OR src.vprop1 = 1020) COLUMNS (src.*)); The element pattern has only two labels vl1 and vl2 in it. If I understand subclause 9.2 and 9.3 correctly, only the properties of the labels that appear in the label expression should be part of all properties reference. The expected output in the patch is based on this interpretation - which has columns vname | vprop1 | vprop2 | lprop1 . However, Oracle includes elname as well which is not associated with vl1 or vl2. I think, Oracle's output is wrong. But maybe I am misinterpreting those clauses. Peter, what do you think? o. pg_node_attrs for new fields ----------------------------------------- Need to think about pg_node_attrs for the new members of GraphLabelRef added in patch. Possibly the current annotation is right, but need to check again. o. Need to document what a .* will result into Planning to work on it after the main patch is somewhat stable. [1] postgr.es/m/bcf58f6e-d0bd-49f8-b074-e3ee69ef6567@eisentraut.org -- Best Wishes, Ashutosh Bapat --000000000000377570064d49853e Content-Type: text/x-patch; charset="US-ASCII"; name="v20260318-0001-Support-all-properties-reference-in-COLUMN.patch" Content-Disposition: attachment; filename="v20260318-0001-Support-all-properties-reference-in-COLUMN.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmvvdadv0 RnJvbSBkOGFkMGU5NmUwZDE1ZjE2ZTU1YTlhM2Y5NjRlMzc2YTU3ZjczNTg3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBc2h1dG9zaCBCYXBhdCA8YXNodXRvc2guYmFwYXQub3NzQGdt YWlsLmNvbT4KRGF0ZTogV2VkLCAxMSBNYXIgMjAyNiAwODo1Mzo0MSArMDUzMApTdWJqZWN0OiBb UEFUQ0ggdjIwMjYwMzE4XSBTdXBwb3J0IGFsbCBwcm9wZXJ0aWVzIHJlZmVyZW5jZSBpbiBDT0xV TU5zIGxpc3Qgb2YKIGEgR3JhcGhUYWJsZVJlZgoKSW4gb3JkZXIgdG8gZXhwYW5kIGFsbCBwcm9w ZXJ0aWVzIHJlZmVyZW5jZSwgd2UgbmVlZCB0byBmaW5kIGFsbCB0aGUgcHJvcGVydGllcwphc3Nv Y2lhdGVkIHdpdGggdGhlIHNldCBvZiBsYWJlbHMgd2hpY2ggcmVzdWx0cyBmcm9tIGV2YWx1YXRp bmcgbGFiZWwKZXhwcmVzc2lvbi4gVGhlIHByb3BlcnRpZXMgYXJlIG5vdCBkaXJlY3RseSBhc3Nv Y2lhdGVkIHdpdGggYSBsYWJlbCwgYnV0IHRocm91Z2gKYW4gZWxlbWVudC4gSGVuY2Ugd2UgbmVl ZCB0byBmaW5kIGF0IG9uZSBlbGVtZW50IGFzc29jaWF0ZWQgd2l0aCBlYWNoIGxhYmVsIGluCnRo ZSBzZXQuIEZ1cnRoZXIgdGhlIHNldCBvZiBsYWJlbHMgdGhhdCBhbiBlbXB0eSBsYWJlbCBleHBy ZXNzaW9uIHJlc3VsdHMgaW50bwppcyBhbGwgdGhlIGxhYmVscyB3aGljaCBoYXZlIGF0IGxlYXN0 IG9uZSBlbGVtZW50IG9mIGdpdmVuIGVsZW1lbnQga2luZCBpbiB0aGUKcHJvcGVydHkgZ3JhcGgu IFRoYXQncyBhbm90aGVyIHJlYXNvbiB3aHkgd2Ugd2FudCB0byBmaW5kIGF0IGxlYXN0IG9uZSBl bGVtZW50CmFzc29jaWF0ZWQgd2l0aCBlYWNoIG9mIHRoZSBsYWJlbHMuIElmIHdlIGFyZSBsb29r aW5nIHVwIGVsZW1lbnQgbGFiZWwgY2F0YWxvZywKd2h5IG5vdCB0byBmZXRjaCBhbGwgdGhlIGVs ZW1lbnRzIGR1cmluZyB0cmFuc2Zvcm1hdGlvbiBpdHNlbGYgcmF0aGVyIHRoYW4Kd2FpdGluZyBh bGwgdGhlIHdheSB0byB0aWxsIHRoZSByZXdyaXRpbmcgcGhhc2UuIFNvIEkgY2hhbmdlZCB0aGUg Y29kZSB0byBkbwp0aGF0LiBBbmQgSSB0aGluayB0aGUgcmVzdWx0YW50IGNvZGUgaXMgbXVjaCBz aW1wbGVyLCBtb3ZlcyB0aGUgZXJyb3IgaGFuZGxpbmcKdG8gYXBwcm9wcmlhdGUgcGxhY2VzIGFu ZCBzaW1wbGlmaWVzIGEgbG90IG9mIHRoZSByZXdyaXRlR3JhcGhUYWJsZS5jIGNvZGUuIEZsaXAK c2lkZSBpcyB0cmFuc2Zvcm0qIGZ1bmN0aW9ucyBhcmUgaGVhdmllciwgaG93ZXZlciBpbiB0aGUg ZW5kIGl0J3MgY29kZQpzaW1wbGlmaWNhdGlvbi4gU2luY2Ugd2UgYXJlIGV4cGFuZGluZyB0aGUg ZW1wdHkgbGFiZWwgZXhwcmVzaXNvbiBkdXJpbmcKdHJhbnNmb3JtYXRpb24gcGhhc2UgaXRzZWxm LCB3ZSByZXBsYWNlIGVtcHR5IGxhYmVsIGV4cHJlc3Npb24gd2l0aCBhCmRpc2p1bmN0aW9uLiBC dXQgd2UgbmVlZCB0byBrbm93IHdoZXRoZXIgdGhlIG9yaWdpbmFsIGxhYmVsIGV4cHJlc3Npb24g d2FzIGVtcHR5Cm9yIG5vdCBpbiB0aGUgcnVsZXV0aWxzIGFuZCB3aGVuIGNvbnNvbGlkYXRpbmcg cGF0aCBlbGVtZW50cwooZ2VuZXJhdGVfcXVlcmllc19mb3JfcGF0aF9wYXR0ZXJuKCkpLiBUaGUg bGF0ZXIgdXNhZ2Ugd2lsbCB2YW5pc2ggb25jZSB3ZQpzdXBwb3J0IGxhYmVsIGRpc2p1bmN0aW9u LiBTbyBJIGludHJvZHVjZWQgYSBmbGFnIHRvIHJldGFpbiB0aGF0IHN0YXR1cy4KCldoaWxlIGF0 IGl0IGFsc28gZml4IGEgdGVzdCB0byB1c2UgY29ycmVjdCBwcm9wZXJ0eSBuYW1lIHNvIHRoYXQg aXQKdGhyb3dzIGV4cGVjdGVkIGVycm9yLiBCZWZvcmUgdGhpcyBjaGFuZ2UsIHRoZSBwcm9wZXJ0 aWVzIG9mIGEgZ2l2ZW4KZWxlbWVudCB3ZXJlIHJlc29sdmVkIGFmdGVyIHRoZSBlbGVtZW50IHBh dHRlcm5zIHdpdGggdGhlIHNhbWUgdmFyaWFibGUKbmFtZSB3ZXJlIHNxdWFzaGVkLiBXaXRoIHRo aXMgY2hhbmdlIHRoZSBvcmRlciBpcyByZXZlcnNlZC4KCkF1dGhvcjogQXNodXRvc2ggQmFwYXQg PGFzaHV0b3NoLmJhcGF0Lm9zc0BnbWFpbC5jb20+ClJlcG9ydGVkIGJ5OiBIZW5zb24gQ2hvaSwg SnVud2FuZyBaaGFvCi0tLQogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2NsYXVzZS5jICAgICAg ICAgfCAgNjEgKystCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZ3JhcGh0YWJsZS5jICAgICB8 IDQ1MyArKysrKysrKysrKysrKysrKysrLS0tCiBzcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVH cmFwaFRhYmxlLmMgICB8IDM1MiArKysrKy0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3J1bGV1dGlscy5jICAgICAgICAgfCAgIDIgKy0KIHNyYy9pbmNsdWRlL25vZGVzL3BhcnNl bm9kZXMuaCAgICAgICAgICAgIHwgICA3ICsKIHNyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5o ICAgICAgICAgICAgIHwgICAzICsKIHNyYy9pbmNsdWRlL3BhcnNlci9wYXJzZV9ncmFwaHRhYmxl LmggICAgIHwgICAyICstCiBzcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2Vfbm9kZS5oICAgICAgICAg ICB8ICAgNiArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dyYXBoX3RhYmxlLm91dCB8ICA0 OCArKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dyYXBoX3RhYmxlLnNxbCAgICAgIHwgIDE1ICst CiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICB8ICAgMSArCiAxMSBm aWxlcyBjaGFuZ2VkLCA2MDYgaW5zZXJ0aW9ucygrKSwgMzQ0IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9jbGF1c2UuYyBiL3NyYy9iYWNrZW5kL3Bh cnNlci9wYXJzZV9jbGF1c2UuYwppbmRleCA5NjdlZWE0NGYxYy4uY2ZkZWRlOTRkYjcgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9jbGF1c2UuYworKysgYi9zcmMvYmFja2Vu ZC9wYXJzZXIvcGFyc2VfY2xhdXNlLmMKQEAgLTk3OCwyOSArOTc4LDYwIEBAIHRyYW5zZm9ybVJh bmdlR3JhcGhUYWJsZShQYXJzZVN0YXRlICpwc3RhdGUsIFJhbmdlR3JhcGhUYWJsZSAqcmd0KQog CQlOb2RlCSAgICpjb2xleHByOwogCQlUYXJnZXRFbnRyeSAqdGU7CiAJCWNoYXIJICAgKmNvbG5h bWU7CisJCWJvb2wJCWlzX2FsbF9wcm9wc19yZWY7CiAKLQkJY29sZXhwciA9IHRyYW5zZm9ybUV4 cHIocHN0YXRlLCBydC0+dmFsLCBFWFBSX0tJTkRfU0VMRUNUX1RBUkdFVCk7CisJCS8qCisJCSAq IFRyeSByZXNvbHZpbmcgdGhlIGV4cHJlc3Npb24gYXMgPHZhcmlhYmxlPi4qIGZpcnN0LiBUaG9z ZSBjYW4gb25seQorCQkgKiBhcHBlYXIgZGlyZWN0bHkgaW4gQ09MVU1OcyBsaXN0LiBJdCBnZXRz IGV4cGFuZGVkIHRvIGEgbGlzdCBvZgorCQkgKiBHcmFwaFByb3BlcnR5UmVmLCB3aGljaCBhcmUg YWRkZWQgdG8gdGhlIHRhcmdldGxpc3QuCisJCSAqCisJCSAqIElmIHRoZXJlIGFyZSBubyBwcm9w ZXJ0aWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFyaWFibGUsIGFuIGVtcHR5CisJCSAqIGxpc3Qg aXMgcmV0dXJuZWQuIEluIHN1Y2ggYSBjYXNlLCB3ZSBkb24ndCBhZGQgYW55dGhpbmcgdG8gdGhl CisJCSAqIHRhcmdldGxpc3QuCisJCSAqLworCQljb2xleHByID0gdHJhbnNmb3JtR3JhcGhUYWJs ZUFsbFByb3BSZWYocHN0YXRlLCBydC0+dmFsLCAmaXNfYWxsX3Byb3BzX3JlZik7CisJCWlmIChp c19hbGxfcHJvcHNfcmVmKQorCQl7CisJCQlpZiAoY29sZXhwcikKKwkJCXsKKwkJCQlMaXN0CSAg ICpwcm9wZXJ0eV9saXN0ID0gY2FzdE5vZGUoTGlzdCwgY29sZXhwcik7CiAKLQkJaWYgKHJ0LT5u YW1lKQotCQkJY29sbmFtZSA9IHJ0LT5uYW1lOworCQkJCUFzc2VydCghcnQtPm5hbWUpOworCisJ CQkJLyogUHJvY2VzcyBlYWNoIEdyYXBoUHJvcGVydHlSZWYgaW4gdGhlIGxpc3QgKi8KKwkJCQlm b3JlYWNoX25vZGUoR3JhcGhQcm9wZXJ0eVJlZiwgZ3ByLCBwcm9wZXJ0eV9saXN0KQorCQkJCXsK KwkJCQkJY2hhcgkgICAqcHJvcF9jb2xuYW1lID0gZ2V0X3Byb3BncmFwaF9wcm9wZXJ0eV9uYW1l KGdwci0+cHJvcGlkKTsKKworCQkJCQljb2xuYW1lcyA9IGxhcHBlbmQoY29sbmFtZXMsIG1ha2VT dHJpbmcocHJvcF9jb2xuYW1lKSk7CisJCQkJCXRlID0gbWFrZVRhcmdldEVudHJ5KChFeHByICop IGdwciwgKytyZXNubywgcHJvcF9jb2xuYW1lLCBmYWxzZSk7CisJCQkJCWNvbHVtbnMgPSBsYXBw ZW5kKGNvbHVtbnMsIHRlKTsKKwkJCQl9CisJCQl9CisJCX0KIAkJZWxzZQogCQl7Ci0JCQlpZiAo SXNBKGNvbGV4cHIsIEdyYXBoUHJvcGVydHlSZWYpKQotCQkJCWNvbG5hbWUgPSBnZXRfcHJvcGdy YXBoX3Byb3BlcnR5X25hbWUoY2FzdE5vZGUoR3JhcGhQcm9wZXJ0eVJlZiwgY29sZXhwciktPnBy b3BpZCk7CisJCQljb2xleHByID0gdHJhbnNmb3JtRXhwcihwc3RhdGUsIHJ0LT52YWwsIEVYUFJf S0lORF9TRUxFQ1RfVEFSR0VUKTsKKwkJCWlmIChydC0+bmFtZSkKKwkJCQljb2xuYW1lID0gcnQt Pm5hbWU7CiAJCQllbHNlCiAJCQl7Ci0JCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJCWVycmNvZGUo RVJSQ09ERV9TWU5UQVhfRVJST1IpLAotCQkJCQkJZXJybXNnKCJjb21wbGV4IGdyYXBoIHRhYmxl IGNvbHVtbiBtdXN0IHNwZWNpZnkgYW4gZXhwbGljaXQgY29sdW1uIG5hbWUiKSwKLQkJCQkJCXBh cnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIHJ0LT5sb2NhdGlvbikpOwotCQkJCWNvbG5hbWUgPSBO VUxMOworCQkJCWlmIChJc0EoY29sZXhwciwgR3JhcGhQcm9wZXJ0eVJlZikpCisJCQkJCWNvbG5h bWUgPSBnZXRfcHJvcGdyYXBoX3Byb3BlcnR5X25hbWUoY2FzdE5vZGUoR3JhcGhQcm9wZXJ0eVJl ZiwgY29sZXhwciktPnByb3BpZCk7CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJCQllcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJCQllcnJtc2co ImNvbXBsZXggZ3JhcGggdGFibGUgY29sdW1uIG11c3Qgc3BlY2lmeSBhbiBleHBsaWNpdCBjb2x1 bW4gbmFtZSIpLAorCQkJCQkJCXBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIHJ0LT5sb2NhdGlv bikpOworCQkJCQljb2xuYW1lID0gTlVMTDsKKwkJCQl9CiAJCQl9Ci0JCX0KIAotCQljb2xuYW1l cyA9IGxhcHBlbmQoY29sbmFtZXMsIG1ha2VTdHJpbmcoY29sbmFtZSkpOwotCi0JCXRlID0gbWFr ZVRhcmdldEVudHJ5KChFeHByICopIGNvbGV4cHIsICsrcmVzbm8sIGNvbG5hbWUsIGZhbHNlKTsK LQkJY29sdW1ucyA9IGxhcHBlbmQoY29sdW1ucywgdGUpOworCQkJY29sbmFtZXMgPSBsYXBwZW5k KGNvbG5hbWVzLCBtYWtlU3RyaW5nKGNvbG5hbWUpKTsKKwkJCXRlID0gbWFrZVRhcmdldEVudHJ5 KChFeHByICopIGNvbGV4cHIsICsrcmVzbm8sIGNvbG5hbWUsIGZhbHNlKTsKKwkJCWNvbHVtbnMg PSBsYXBwZW5kKGNvbHVtbnMsIHRlKTsKKwkJfQogCX0KIAogCXRhYmxlX2Nsb3NlKHJlbCwgTm9M b2NrKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9ncmFwaHRhYmxlLmMg Yi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZ3JhcGh0YWJsZS5jCmluZGV4IGJmODA1YjRiZWI2 Li40OWE4ZDhkYWU0MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2dyYXBo dGFibGUuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZ3JhcGh0YWJsZS5jCkBAIC0x OCw3ICsxOCwxMCBAQAogI2luY2x1ZGUgImFjY2Vzcy9nZW5hbS5oIgogI2luY2x1ZGUgImFjY2Vz cy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX3Byb3BncmFwaF9lbGVtZW50LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wcm9w Z3JhcGhfZWxlbWVudF9sYWJlbC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfcHJvcGdyYXBoX2xh YmVsLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wcm9wZ3JhcGhfbGFiZWxfcHJvcGVydHkuaCIK ICNpbmNsdWRlICJjYXRhbG9nL3BnX3Byb3BncmFwaF9wcm9wZXJ0eS5oIgogI2luY2x1ZGUgIm1p c2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgpAQCAtMzIsNiArMzUsMTY5 IEBACiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKIAogCitzdGF0aWMgTGlzdCAqZ2V0X2xh YmVsZXhwcl9wcm9wZXJ0aWVzKE5vZGUgKmxhYmVsZXhwcik7CisKKy8qCisgKiBGaW5kIGFsbCBw cm9wZXJ0aWVzIGFzc29jaWF0ZWQgd2l0aCBhIGxhYmVsLgorICoKKyAqIFdlIGRvIG5vdCBzdG9y ZSB0aGUgZGlyZWN0IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGxhYmVscyBhbmQgcHJvcGVydGllcyBp biB0aGUKKyAqIGNhdGFsb2csIGJ1dCBpbnN0ZWFkIHdlIGxpbmsgdGhlbSB0aHJvdWdoIGVsZW1l bnQgbGFiZWxzLiBBIGxhYmVsIGlzCisgKiBhc3NvY2lhdGVkIHdpdGggYW4gZWxlbWVudCB0aHJv dWdoIGFuIGVsZW1lbnRfbGFiZWwgYW5kIHRoZSBlbGVtZW50X2xhYmVsIGlzIGFzc29jaWF0ZWQg d2l0aAorICogcHJvcGVydGllcy4gVGhlcmVmb3JlLCB0byBmaW5kIHByb3BlcnRpZXMgb2YgYSBs YWJlbCwgd2UgZmlyc3QgZmluZCBhbiBlbGVtZW50X2xhYmVsCisgKiBhc3NvY2lhdGVkIHdpdGgg dGhlIGxhYmVsIGFuZCB0aGVuIGZpbmQgcHJvcGVydGllcyBhc3NvY2lhdGVkIHdpdGggdGhhdAor ICogZWxlbWVudF9sYWJlbC4gU2luY2UgYWxsIGVsZW1lbnRzIHdpdGggdGhlIHNhbWUgbGFiZWwg aGF2ZSB0aGUgc2FtZSBzZXQgb2YKKyAqIHByb3BlcnRpZXMsIGl0IGRvZXMgbm90IG1hdHRlciB3 aGljaCBlbGVtZW50X2xhYmVsIHdlIGNob29zZSBhcyBsb25nIGFzIHRoZXJlCisgKiBpcyBhdCBs ZWFzdCBvbmUuCisgKgorICogYGVsZW1fbGFiZWxfb2lkYCBpcyB0aGUgT0lEIG9mIHRoZSBlbGVt ZW50X2xhYmVsIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGFiZWwKKyAqIHdob3NlIHByb3BlcnRpZXMg d2Ugd2FudCB0byBmaW5kLgorICoKKyAqIFJldHVybnMgTGlzdCBvZiBwcm9wZXJ0eSBPSURzLgor ICovCitzdGF0aWMgTGlzdCAqCitnZXRfcHJvcGdyYXBoX2xhYmVsX3Byb3BlcnRpZXMoT2lkIGVs ZW1fbGFiZWxfb2lkKQoreworCUxpc3QJICAgKnByb3BpZHMgPSBOSUw7CisJUmVsYXRpb24JbGFi ZWxfcHJvcF9yZWw7CisJU3lzU2NhbkRlc2MgcHJvcF9zY2FuOworCVNjYW5LZXlEYXRhIHByb3Bf a2V5WzFdOworCUhlYXBUdXBsZQlwcm9wX3R1cDsKKworCS8qIEZpbmQgcHJvcGVydGllcyBmb3Ig dGhpcyBlbGVtZW50X2xhYmVsICovCisJbGFiZWxfcHJvcF9yZWwgPSB0YWJsZV9vcGVuKFByb3Bn cmFwaExhYmVsUHJvcGVydHlSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCVNjYW5LZXlJ bml0KCZwcm9wX2tleVswXSwKKwkJCQlBbnVtX3BnX3Byb3BncmFwaF9sYWJlbF9wcm9wZXJ0eV9w bHBlbGxhYmVsaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLAorCQkJCUZfT0lERVEsIE9i amVjdElkR2V0RGF0dW0oZWxlbV9sYWJlbF9vaWQpKTsKKwlwcm9wX3NjYW4gPSBzeXN0YWJsZV9i ZWdpbnNjYW4obGFiZWxfcHJvcF9yZWwsIFByb3BncmFwaExhYmVsUHJvcGVydHlMYWJlbFByb3BJ bmRleElkLAorCQkJCQkJCQkgICB0cnVlLCBOVUxMLCAxLCBwcm9wX2tleSk7CisKKwl3aGlsZSAo SGVhcFR1cGxlSXNWYWxpZChwcm9wX3R1cCA9IHN5c3RhYmxlX2dldG5leHQocHJvcF9zY2FuKSkp CisJeworCQlGb3JtX3BnX3Byb3BncmFwaF9sYWJlbF9wcm9wZXJ0eSBsYWJlbF9wcm9wID0gKEZv cm1fcGdfcHJvcGdyYXBoX2xhYmVsX3Byb3BlcnR5KSBHRVRTVFJVQ1QocHJvcF90dXApOworCisJ CXByb3BpZHMgPSBsYXBwZW5kX29pZChwcm9waWRzLCBsYWJlbF9wcm9wLT5wbHBwcm9waWQpOwor CX0KKworCXN5c3RhYmxlX2VuZHNjYW4ocHJvcF9zY2FuKTsKKwl0YWJsZV9jbG9zZShsYWJlbF9w cm9wX3JlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBwcm9waWRzOworfQorCisvKgor ICogRmluZCB0aGUgc2V0IG9mIHByb3BlcnRpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBs YWJlbCBleHByZXNzaW9uLgorICoKKyAqIEluZGVwZW5kZW50IG9mIHRoZSBhY3R1YWwgZXhwcmVz c2lvbiwgdGhlIHNldCBvZiBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlCisgKiBwcm9qZWN0ZWQgYnkg YW4gZWxlbWVudCB2YXJpYWJsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGV4cHJlc3Npb24g aXMgdGhlCisgKiB1bmlvbiBvZiB0aGUgcHJvcGVydGllcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBs YWJlbCB0aGF0IGFwcGVhcnMgaW4gdGhlIGV4cHJlc3Npb24uCisgKi8KK0xpc3QgKgorZ2V0X2xh YmVsZXhwcl9wcm9wZXJ0aWVzKE5vZGUgKmxhYmVsZXhwcikKK3sKKwlMaXN0CSAgICpwcm9waWRz ID0gTklMOworCisJQXNzZXJ0KGxhYmVsZXhwciAhPSBOVUxMKTsKKworCWNoZWNrX3N0YWNrX2Rl cHRoKCk7CisKKwlzd2l0Y2ggKG5vZGVUYWcobGFiZWxleHByKSkKKwl7CisJCWNhc2UgVF9HcmFw aExhYmVsUmVmOgorCQkJeworCQkJCUdyYXBoTGFiZWxSZWYgKmxyZWYgPSBjYXN0Tm9kZShHcmFw aExhYmVsUmVmLCBsYWJlbGV4cHIpOworCisJCQkJaWYgKCFscmVmLT5lbGVtX2xhYmVscykKKwkJ CQl7CisJCQkJCS8qCisJCQkJCSAqIE5vIGVsZW1lbnQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMg bGFiZWwsIHJldHVybiBlbXB0eQorCQkJCQkgKiBwcm9wZXJ0eSBsaXN0LgorCQkJCQkgKi8KKwkJ CQkJcHJvcGlkcyA9IE5JTDsKKwkJCQl9CisJCQkJZWxzZQorCQkJCQlwcm9waWRzID0gZ2V0X3By b3BncmFwaF9sYWJlbF9wcm9wZXJ0aWVzKGxpbml0aWFsX29pZChscmVmLT5lbGVtX2xhYmVscykp OworCisJCQkJYnJlYWs7CisJCQl9CisKKwkJY2FzZSBUX0Jvb2xFeHByOgorCQkJeworCQkJCUJv b2xFeHByICAgKmJlID0gY2FzdE5vZGUoQm9vbEV4cHIsIGxhYmVsZXhwcik7CisKKwkJCQlmb3Jl YWNoX3B0cihOb2RlLCBhcmcsIGJlLT5hcmdzKQorCQkJCXsKKwkJCQkJTGlzdAkgICAqYXJnX3By b3BpZHMgPSBnZXRfbGFiZWxleHByX3Byb3BlcnRpZXMoYXJnKTsKKworCQkJCQlwcm9waWRzID0g bGlzdF9jb25jYXRfdW5pcXVlX29pZChwcm9waWRzLCBhcmdfcHJvcGlkcyk7CisJCQkJfQorCQkJ CWJyZWFrOworCQkJfQorCisJCWRlZmF1bHQ6CisJCQkvKiBzaG91bGQgbm90IHJlYWNoIGhlcmUg Zm9yIGEgdHJhbnNmb3JtZWQgbGFiZWwgZXhwcmVzc2lvbiAqLworCQkJZWxvZyhFUlJPUiwgInVu c3VwcG9ydGVkIGxhYmVsIGV4cHJlc3Npb24gbm9kZTogJWQiLCAoaW50KSBub2RlVGFnKGxhYmVs ZXhwcikpOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHByb3BpZHM7Cit9CisKKy8qCisgKiBG aW5kIGFsbCBlbGVtZW50cyB0aGF0IGZpdCB0aGUgZ2l2ZW4ga2luZCBhc3NvY2lhdGVkIHdpdGgg dGhlIGdpdmVuIGxhYmVsLgorICoKKyAqIFJldHVybiB0aGUgZWxlbWVudCBPSURzIHRocm91Z2gg dGhlIG91dHB1dCBwYXJhbWV0ZXIgYGVsZW1lbnRzYC4gT2Z0ZW4gd2UKKyAqIHdpbGwgbmVlZCB0 aGUgZWxlbWVudF9sYWJlbCBPSURzIGNvcnJlc3BvbmRpbmcgdG8gdGhlc2UgZWxlbWVudHMgYXMg d2VsbCwgc28KKyAqIHdlIHJldHVybiB0aGVtIHRocm91Z2ggdGhlIG91dHB1dCBwYXJhbWV0ZXIg YGVsZW1fbGFiZWxzYC4KKyAqLworc3RhdGljIHZvaWQKK2dldF9wcm9wZ3JhcGhfbGFiZWxfZWxl bWVudHMoT2lkIGxhYmVsaWQsIEdyYXBoRWxlbWVudFBhdHRlcm5LaW5kIGdlcGtpbmQsCisJCQkJ CQkJIExpc3QgKiplbGVtZW50cywgTGlzdCAqKmVsZW1fbGFiZWxzKQoreworCUxpc3QJICAgKmVs ZW1lbnRfb2lkcyA9IE5JTDsKKwlMaXN0CSAgICplbGVtX2xhYmVsc19vaWRzID0gTklMOworCVJl bGF0aW9uCXJlbDsKKwlTeXNTY2FuRGVzYyBzY2FuOworCVNjYW5LZXlEYXRhIGtleVsxXTsKKwlI ZWFwVHVwbGUJdHVwOworCisJcmVsID0gdGFibGVfb3BlbihQcm9wZ3JhcGhFbGVtZW50TGFiZWxS ZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCVNjYW5LZXlJbml0KCZrZXlbMF0sCisJCQkJ QW51bV9wZ19wcm9wZ3JhcGhfZWxlbWVudF9sYWJlbF9wZ2VsbGFiZWxpZCwKKwkJCQlCVEVxdWFs U3RyYXRlZ3lOdW1iZXIsCisJCQkJRl9PSURFUSwgT2JqZWN0SWRHZXREYXR1bShsYWJlbGlkKSk7 CisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihyZWwsIFByb3BncmFwaEVsZW1lbnRMYWJlbExh YmVsSW5kZXhJZCwKKwkJCQkJCQkgIHRydWUsIE5VTEwsIDEsIGtleSk7CisJd2hpbGUgKEhlYXBU dXBsZUlzVmFsaWQodHVwID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKSkpCisJeworCQlGb3JtX3Bn X3Byb3BncmFwaF9lbGVtZW50X2xhYmVsIGVsZW1lbnRfbGFiZWwgPSAoRm9ybV9wZ19wcm9wZ3Jh cGhfZWxlbWVudF9sYWJlbCkgR0VUU1RSVUNUKHR1cCk7CisJCU9pZAkJCWVsZW1lbnRfb2lkID0g ZWxlbWVudF9sYWJlbC0+cGdlbGVsaWQ7CisJCU9pZAkJCWVsZW1fbGFiZWxfb2lkID0gZWxlbWVu dF9sYWJlbC0+b2lkOworCQlIZWFwVHVwbGUJZWxlbWVudF90dXAgPSBTZWFyY2hTeXNDYWNoZTEo UFJPUEdSQVBIRUxPSUQsIE9iamVjdElkR2V0RGF0dW0oZWxlbWVudF9vaWQpKTsKKwkJRm9ybV9w Z19wcm9wZ3JhcGhfZWxlbWVudCBlbGVtZW50X2Zvcm07CisKKwkJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKGVsZW1lbnRfdHVwKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciBwcm9wZXJ0eSBncmFwaCBlbGVtZW50ICV1IiwgZWxlbWVudF9vaWQpOworCisJCWVsZW1lbnRf Zm9ybSA9IChGb3JtX3BnX3Byb3BncmFwaF9lbGVtZW50KSBHRVRTVFJVQ1QoZWxlbWVudF90dXAp OworCisJCWlmICgoZWxlbWVudF9mb3JtLT5wZ2VraW5kID09IFBHRUtJTkRfVkVSVEVYICYmIGdl cGtpbmQgPT0gVkVSVEVYX1BBVFRFUk4pIHx8CisJCQkoZWxlbWVudF9mb3JtLT5wZ2VraW5kID09 IFBHRUtJTkRfRURHRSAmJiBJU19FREdFX1BBVFRFUk4oZ2Vwa2luZCkpKQorCQl7CisJCQllbGVt ZW50X29pZHMgPSBsYXBwZW5kX29pZChlbGVtZW50X29pZHMsIGVsZW1lbnRfb2lkKTsKKwkJCWVs ZW1fbGFiZWxzX29pZHMgPSBsYXBwZW5kX29pZChlbGVtX2xhYmVsc19vaWRzLCBlbGVtX2xhYmVs X29pZCk7CisJCX0KKworCQlSZWxlYXNlU3lzQ2FjaGUoZWxlbWVudF90dXApOworCX0KKworCXN5 c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xvc2UocmVsLCBBY2Nlc3NTaGFyZUxvY2sp OworCisJKmVsZW1lbnRzID0gZWxlbWVudF9vaWRzOworCSplbGVtX2xhYmVscyA9IGVsZW1fbGFi ZWxzX29pZHM7Cit9CisKIC8qCiAgKiBSZXR1cm4gaHVtYW4tcmVhZGFibGUgbmFtZSBvZiB0aGUg dHlwZSBvZiBncmFwaCBlbGVtZW50IHBhdHRlcm4gaW4KICAqIEdSQVBIX1RBQkxFIGNsYXVzZSwg dXN1YWxseSBmb3IgZXJyb3IgbWVzc2FnZSBwdXJwb3NlLgpAQCAtNjEsMTkgKzIyNywxMDMgQEAg Z2V0X2dlcF9raW5kX25hbWUoR3JhcGhFbGVtZW50UGF0dGVybktpbmQgZ2Vwa2luZCkKIAlyZXR1 cm4gInVua25vd24iOwogfQogCisvKgorICogVHJhbnNmb3JtIGEgPHZhcmlhYmxlPi4qIGV4cHJl c3Npb24uCisgKgorICogSWYgdGhlIGNvbHVtbiByZWZlcmVuY2UgaXMgb2YgdGhlIGZvcm0gPHZh cmlhYmxlPi4qLCByZXR1cm4gYSBsaXN0IG9mCisgKiBHcmFwaFByb3BlcnR5UmVmIG5vZGVzIHJl cHJlc2VudGluZyB0aGUgcHJvcGVydGllcyBvZiB0aGUgdmFyaWFibGUuIFdoZW4gdGhlcmUKKyAq IGFyZSBubyBwcm9wZXJ0aWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFyaWFibGUsIHJldHVybiBh biBlbXB0eSBsaXN0LiBJZiB0aGUKKyAqIGNvbHVtbiByZWZlcmVuY2UgaXMgbm90IG9mIHRoZSBm b3JtIDx2YXJpYWJsZT4uKiwgcmV0dXJuIE5VTEwuCisgKgorICogU2luY2UgYW4gZW1wdHkgbGlz dCBhbmQgTlVMTCBhcmUgYm90aCByZXByZXNlbnRlZCBhcyBhIEMgTlVMTCBwb2ludGVyLCB3ZSB1 c2UgdGhlCisgKiBvdXRwdXQgcGFyYW1ldGVyIGBpc19hbGxfcHJvcHNfcmVmYCB0byBpbmRpY2F0 ZSB3aGV0aGVyIHRoZSBOVUxMIHBvaW50ZXIKKyAqIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24g bWVhbnMgYW4gZW1wdHkgbGlzdCBvZiBwcm9wZXJ0aWVzIG9yIHRoYXQgdGhlIGdpdmVuCisgKiBj b2x1bW4gcmVmZXJlbmNlIGlzIG5vdCBvZiB0aGUgZm9ybSA8dmFyaWFibGU+LiouCisgKi8KK05v ZGUgKgordHJhbnNmb3JtR3JhcGhUYWJsZUFsbFByb3BSZWYoUGFyc2VTdGF0ZSAqcHN0YXRlLCBO b2RlICpub2RlLCBib29sICppc19hbGxfcHJvcHNfcmVmKQoreworCUdyYXBoVGFibGVQYXJzZVN0 YXRlICpncHN0YXRlID0gcHN0YXRlLT5wX2dyYXBoX3RhYmxlX3BzdGF0ZTsKKwlDb2x1bW5SZWYg ICpjcmVmOworCisJKmlzX2FsbF9wcm9wc19yZWYgPSBmYWxzZTsKKworCWlmICghZ3BzdGF0ZSkK KwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIUlzQShub2RlLCBDb2x1bW5SZWYpKQorCQlyZXR1cm4g TlVMTDsKKworCWNyZWYgPSBjYXN0Tm9kZShDb2x1bW5SZWYsIG5vZGUpOworCWlmIChsaXN0X2xl bmd0aChjcmVmLT5maWVsZHMpID09IDIpCisJeworCQlOb2RlCSAgICpmaWVsZDEgPSBsaW5pdGlh bChjcmVmLT5maWVsZHMpOworCQlOb2RlCSAgICpmaWVsZDIgPSBsc2Vjb25kKGNyZWYtPmZpZWxk cyk7CisJCWNoYXIJICAgKmVsdmFybmFtZSA9IHN0clZhbChmaWVsZDEpOworCisJCS8qIEZpbmQg dGhlIHZhcmlhYmxlIGluIHRoZSBncmFwaCBwYXR0ZXJuIHZhcmlhYmxlcyAqLworCQlmb3JlYWNo X3B0cihHcmFwaFRhYmxlRWxlbWVudFZhcmlhYmxlLCB2YXIsIGdwc3RhdGUtPnZhcmlhYmxlcykK KwkJeworCQkJaWYgKHN0cmNtcCh2YXItPm5hbWUsIGVsdmFybmFtZSkgPT0gMCkKKwkJCXsKKwkJ CQlHcmFwaFByb3BlcnR5UmVmICpncHI7CisJCQkJSGVhcFR1cGxlCXBncHR1cDsKKwkJCQlGb3Jt X3BnX3Byb3BncmFwaF9wcm9wZXJ0eSBwZ3Bmb3JtOworCisJCQkJaWYgKElzQShmaWVsZDIsIEFf U3RhcikpCisJCQkJeworCQkJCQlMaXN0CSAgICpwcm9wcmVmX2xpc3QgPSBOSUw7CisKKwkJCQkJ KmlzX2FsbF9wcm9wc19yZWYgPSB0cnVlOworCisJCQkJCWZvcmVhY2hfb2lkKHByb3BpZCwgdmFy LT5wcm9wZXJ0aWVzKQorCQkJCQl7CisJCQkJCQlncHIgPSBtYWtlTm9kZShHcmFwaFByb3BlcnR5 UmVmKTsKKwkJCQkJCXBncHR1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9QR1JBUEhQUk9QT0lELCBP YmplY3RJZEdldERhdHVtKHByb3BpZCkpOworCisJCQkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo cGdwdHVwKSkKKwkJCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHJv cGVydHkgJXUiLCBwcm9waWQpOworCQkJCQkJcGdwZm9ybSA9IChGb3JtX3BnX3Byb3BncmFwaF9w cm9wZXJ0eSkgR0VUU1RSVUNUKHBncHR1cCk7CisKKwkJCQkJCWdwci0+bG9jYXRpb24gPSBjcmVm LT5sb2NhdGlvbjsKKwkJCQkJCWdwci0+ZWx2YXJuYW1lID0gZWx2YXJuYW1lOworCQkJCQkJZ3By LT5wcm9waWQgPSBwcm9waWQ7CisJCQkJCQlncHItPnR5cGVJZCA9IHBncGZvcm0tPnBncHR5cGlk OworCQkJCQkJZ3ByLT50eXBtb2QgPSBwZ3Bmb3JtLT5wZ3B0eXBtb2Q7CisJCQkJCQlncHItPmNv bGxhdGlvbiA9IHBncGZvcm0tPnBncGNvbGxhdGlvbjsKKworCQkJCQkJUmVsZWFzZVN5c0NhY2hl KHBncHR1cCk7CisJCQkJCQlwcm9wcmVmX2xpc3QgPSBsYXBwZW5kKHByb3ByZWZfbGlzdCwgZ3By KTsKKwkJCQkJfQorCisJCQkJCXJldHVybiAoTm9kZSAqKSBwcm9wcmVmX2xpc3Q7CisJCQkJfQor CQkJfQorCQl9CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKIC8qCiAgKiBUcmFuc2Zvcm0gYSBw cm9wZXJ0eSByZWZlcmVuY2UuCiAgKgogICogQSBwcm9wZXJ0eSByZWZlcmVuY2UgaXMgcGFyc2Vk IGFzIGEgQ29sdW1uUmVmIG9mIHRoZSBmb3JtOgotICogPHZhcmlhYmxlPi48cHJvcGVydHk+LiBJ ZiA8dmFyaWFibGU+IGlzIG9uZSBvZiB0aGUgdmFyaWFibGVzIGJvdW5kIHRvIGFuCisgKiA8dmFy aWFibGU+Ljxwcm9wZXJ0eT4uCisgKgorICogSWYgPHZhcmlhYmxlPiBpcyBvbmUgb2YgdGhlIHZh cmlhYmxlcyBib3VuZCB0byBhbgogICogZWxlbWVudCBwYXR0ZXJuIGluIHRoZSBncmFwaCBwYXR0 ZXJuIGFuZCA8cHJvcGVydHk+IGNhbiBiZSByZXNvbHZlZCBhcyBhCi0gKiBwcm9wZXJ0eSBvZiB0 aGUgcHJvcGVydHkgZ3JhcGgsIHRoZW4gd2UgcmV0dXJuIGEgR3JhcGhQcm9wZXJ0eVJlZiBub2Rl Ci0gKiByZXByZXNlbnRpbmcgdGhlIHByb3BlcnR5IHJlZmVyZW5jZS4gSWYgdGhlIDx2YXJpYWJs ZT4gZXhpc3RzIGluIHRoZSBncmFwaAotICogcGF0dGVybiBidXQgPHByb3BlcnR5PiBkb2VzIG5v dCBleGlzdCBpbiB0aGUgcHJvcGVydHkgZ3JhcGgsIHdlIHJhaXNlIGFuCi0gKiBlcnJvci4gSG93 ZXZlciwgaWYgPHZhcmlhYmxlPiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZ3JhcGggcGF0dGVybiwg d2UgcmV0dXJuCi0gKiBOVUxMIHRvIGxldCB0aGUgY2FsbGVyIGhhbmRsZSBpdCBhcyBzb21lIG90 aGVyIGtpbmQgb2YgQ29sdW1uUmVmLiBUaGUKLSAqIHZhcmlhYmxlcyBib3VuZCB0byB0aGUgZWxl bWVudCBwYXR0ZXJucyBpbiB0aGUgZ3JhcGggcGF0dGVybiBhcmUgZXhwZWN0ZWQgdG8KLSAqIGJl IGNvbGxlY3RlZCBpbiB0aGUgR3JhcGhUYWJsZVBhcnNlU3RhdGUuCisgKiBwcm9wZXJ0eSBvZiB0 aGUgcHJvcGVydHkgZ3JhcGggYW5kIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZWxlbWVudCB2YXJp YWJsZSwKKyAqIHRoZW4gd2UgcmV0dXJuIGEgR3JhcGhQcm9wZXJ0eVJlZiBub2RlIHJlcHJlc2Vu dGluZyB0aGUgcHJvcGVydHkgcmVmZXJlbmNlLgorICoKKyAqIElmCisgKiB0aGUgPHZhcmlhYmxl PiBleGlzdHMgaW4gdGhlIGdyYXBoIHBhdHRlcm4gYnV0IDxwcm9wZXJ0eT4gZG9lcyBub3QgZXhp c3QgaW4KKyAqIHRoZSBwcm9wZXJ0eSBncmFwaCwgd2UgcmFpc2UgYW4gZXJyb3IuCisgKgorICog SG93ZXZlciwgaWYgPHZhcmlhYmxlPiBkb2VzIG5vdCBleGlzdAorICogaW4gdGhlIGdyYXBoIHBh dHRlcm4sIHdlIHJldHVybiBOVUxMIHRvIGxldCB0aGUgY2FsbGVyIGhhbmRsZSBpdCBhcyBzb21l IG90aGVyCisgKiBraW5kIG9mIENvbHVtblJlZi4gVGhlIHZhcmlhYmxlcyBib3VuZCB0byB0aGUg ZWxlbWVudCBwYXR0ZXJucyBpbiB0aGUgZ3JhcGgKKyAqIHBhdHRlcm4gYXJlIGV4cGVjdGVkIHRv IGJlIGNvbGxlY3RlZCBpbiB0aGUgR3JhcGhUYWJsZVBhcnNlU3RhdGUuCiAgKi8KIE5vZGUgKgog dHJhbnNmb3JtR3JhcGhUYWJsZVByb3BlcnR5UmVmKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ29sdW1u UmVmICpjcmVmKQpAQCAtOTIsNDUgKzM0Miw1NCBAQCB0cmFuc2Zvcm1HcmFwaFRhYmxlUHJvcGVy dHlSZWYoUGFyc2VTdGF0ZSAqcHN0YXRlLCBDb2x1bW5SZWYgKmNyZWYpCiAKIAkJaWYgKElzQShm aWVsZDEsIEFfU3RhcikgfHwgSXNBKGZpZWxkMiwgQV9TdGFyKSkKIAkJewotCQkJaWYgKHBzdGF0 ZS0+cF9leHByX2tpbmQgPT0gRVhQUl9LSU5EX1NFTEVDVF9UQVJHRVQpCi0JCQkJZXJlcG9ydChF UlJPUiwKLQkJCQkJCWVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAotCQkJ CQkJZXJybXNnKCJcIipcIiBpcyBub3Qgc3VwcG9ydGVkIGhlcmUiKSwKLQkJCQkJCXBhcnNlcl9l cnJwb3NpdGlvbihwc3RhdGUsIGNyZWYtPmxvY2F0aW9uKSk7Ci0JCQllbHNlCi0JCQkJZXJlcG9y dChFUlJPUiwKLQkJCQkJCWVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAotCQkJCQkJZXJy bXNnKCJcIipcIiBub3QgYWxsb3dlZCBoZXJlIiksCi0JCQkJCQlwYXJzZXJfZXJycG9zaXRpb24o cHN0YXRlLCBjcmVmLT5sb2NhdGlvbikpOworCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJZXJyY29k ZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCWVycm1zZygiXCIqXCIgbm90IGFsbG93ZWQg aGVyZSIpLAorCQkJCQlwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBjcmVmLT5sb2NhdGlvbikp OwogCQl9CiAKIAkJZWx2YXJuYW1lID0gc3RyVmFsKGZpZWxkMSk7CiAJCXByb3BuYW1lID0gc3Ry VmFsKGZpZWxkMik7CiAKLQkJaWYgKGxpc3RfbWVtYmVyKGdwc3RhdGUtPnZhcmlhYmxlcywgZmll bGQxKSkKKwkJLyogRmluZCB0aGUgdmFyaWFibGUgaW4gdGhlIGdyYXBoIHBhdHRlcm4gdmFyaWFi bGVzICovCisJCWZvcmVhY2hfcHRyKEdyYXBoVGFibGVFbGVtZW50VmFyaWFibGUsIHZhciwgZ3Bz dGF0ZS0+dmFyaWFibGVzKQogCQl7Ci0JCQlHcmFwaFByb3BlcnR5UmVmICpncHIgPSBtYWtlTm9k ZShHcmFwaFByb3BlcnR5UmVmKTsKLQkJCUhlYXBUdXBsZQlwZ3B0dXA7Ci0JCQlGb3JtX3BnX3By b3BncmFwaF9wcm9wZXJ0eSBwZ3Bmb3JtOwotCi0JCQlwZ3B0dXAgPSBTZWFyY2hTeXNDYWNoZTIo UFJPUEdSQVBIUFJPUE5BTUUsIE9iamVjdElkR2V0RGF0dW0oZ3BzdGF0ZS0+Z3JhcGhpZCksIENT dHJpbmdHZXREYXR1bShwcm9wbmFtZSkpOwotCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHBncHR1 cCkpCi0JCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJCWVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJS T1IpLAotCQkJCQkJZXJybXNnKCJwcm9wZXJ0eSBcIiVzXCIgZG9lcyBub3QgZXhpc3QiLCBwcm9w bmFtZSkpOwotCQkJcGdwZm9ybSA9IChGb3JtX3BnX3Byb3BncmFwaF9wcm9wZXJ0eSkgR0VUU1RS VUNUKHBncHR1cCk7Ci0KLQkJCWdwci0+bG9jYXRpb24gPSBjcmVmLT5sb2NhdGlvbjsKLQkJCWdw ci0+ZWx2YXJuYW1lID0gZWx2YXJuYW1lOwotCQkJZ3ByLT5wcm9waWQgPSBwZ3Bmb3JtLT5vaWQ7 Ci0JCQlncHItPnR5cGVJZCA9IHBncGZvcm0tPnBncHR5cGlkOwotCQkJZ3ByLT50eXBtb2QgPSBw Z3Bmb3JtLT5wZ3B0eXBtb2Q7Ci0JCQlncHItPmNvbGxhdGlvbiA9IHBncGZvcm0tPnBncGNvbGxh dGlvbjsKLQotCQkJUmVsZWFzZVN5c0NhY2hlKHBncHR1cCk7Ci0KLQkJCXJldHVybiAoTm9kZSAq KSBncHI7CisJCQlpZiAoc3RyY21wKHZhci0+bmFtZSwgZWx2YXJuYW1lKSA9PSAwKQorCQkJewor CQkJCUdyYXBoUHJvcGVydHlSZWYgKmdwciA9IG1ha2VOb2RlKEdyYXBoUHJvcGVydHlSZWYpOwor CQkJCUhlYXBUdXBsZQlwZ3B0dXA7CisJCQkJRm9ybV9wZ19wcm9wZ3JhcGhfcHJvcGVydHkgcGdw Zm9ybTsKKworCQkJCXBncHR1cCA9IFNlYXJjaFN5c0NhY2hlMihQUk9QR1JBUEhQUk9QTkFNRSwg T2JqZWN0SWRHZXREYXR1bShncHN0YXRlLT5ncmFwaGlkKSwgQ1N0cmluZ0dldERhdHVtKHByb3Bu YW1lKSk7CisJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHBncHR1cCkpCisJCQkJCWVyZXBvcnQo RVJST1IsCisJCQkJCQkJZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCQkJZXJy bXNnKCJwcm9wZXJ0eSBcIiVzXCIgZG9lcyBub3QgZXhpc3QiLCBwcm9wbmFtZSkpOworCQkJCXBn cGZvcm0gPSAoRm9ybV9wZ19wcm9wZ3JhcGhfcHJvcGVydHkpIEdFVFNUUlVDVChwZ3B0dXApOwor CQkJCS8qIENoZWNrIGlmIHRoaXMgcHJvcGVydHkgaXMgYXZhaWxhYmxlIGZvciB0aGlzIHZhcmlh YmxlICovCisJCQkJaWYgKCFsaXN0X21lbWJlcl9vaWQodmFyLT5wcm9wZXJ0aWVzLCBwZ3Bmb3Jt LT5vaWQpKQorCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCWVycmNvZGUoRVJSQ09ERV9VTkRF RklORURfQ09MVU1OKSwKKwkJCQkJCQllcnJtc2coInByb3BlcnR5IFwiJXNcIiBpcyBub3QgYXZh aWxhYmxlIGZvciBlbGVtZW50IHZhcmlhYmxlIFwiJXNcIiIsCisJCQkJCQkJCSAgIHByb3BuYW1l LCBlbHZhcm5hbWUpKTsKKworCQkJCWdwci0+bG9jYXRpb24gPSBjcmVmLT5sb2NhdGlvbjsKKwkJ CQlncHItPmVsdmFybmFtZSA9IGVsdmFybmFtZTsKKwkJCQlncHItPnByb3BpZCA9IHBncGZvcm0t Pm9pZDsKKwkJCQlncHItPnR5cGVJZCA9IHBncGZvcm0tPnBncHR5cGlkOworCQkJCWdwci0+dHlw bW9kID0gcGdwZm9ybS0+cGdwdHlwbW9kOworCQkJCWdwci0+Y29sbGF0aW9uID0gcGdwZm9ybS0+ cGdwY29sbGF0aW9uOworCisJCQkJUmVsZWFzZVN5c0NhY2hlKHBncHR1cCk7CisKKwkJCQlyZXR1 cm4gKE5vZGUgKikgZ3ByOworCQkJfQogCQl9CisKKwkJLyoKKwkJICogTm8gZWxlbWVudCB3aXRo IHRoZSBnaXZlbiBuYW1lIGZvdW5kLiBDYW4ndCByZXNvbHZlIHRoZSBnaXZlbgorCQkgKiBDb2x1 bW5SZWYgYXMgYSBncmFwaCBwcm9wZXJ0eSByZWZlcmVuY2UuCisJCSAqLwogCX0KIAogCXJldHVy biBOVUxMOwpAQCAtMTQ2LDE2ICs0MDUsNjUgQEAgdHJhbnNmb3JtR3JhcGhUYWJsZVByb3BlcnR5 UmVmKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ29sdW1uUmVmICpjcmVmKQogICogR3JhcGhMYWJlbFJl ZiBub2RlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBuYW1lcyBvZiB0aGUgbGFiZWxzIGFwcGVhcmlu ZyBpbiB0aGUKICAqIGV4cHJlc3Npb24uIElmIGFueSBsYWJlbCBuYW1lIGNhbm5vdCBiZSByZXNv bHZlZCB0byBhIGxhYmVsIGluIHRoZSBwcm9wZXJ0eQogICogZ3JhcGgsIGFuIGVycm9yIGlzIHJh aXNlZC4KKyAqCisgKiBBbiBlbXB0eSBsYWJlbCBleHByZXNzaW9uIGlzIHRyZWF0ZWQgYXMgYSBz cGVjaWFsIGNhc2UuICBBY2NvcmRpbmcgdG8gc2VjdGlvbgorICogOS4yICJDb250ZXh0dWFsIGlu ZmVyZW5jZSBvZiBhIHNldCBvZiBsYWJlbHMiIHN1YmNsYXVzZSAyLmEuaWkgb2YgU1FML1BHUQor ICogc3RhbmRhcmQsIGVsZW1lbnQgcGF0dGVybiB3aGljaCBkb2VzIG5vdCBoYXZlIGEgbGFiZWwg ZXhwcmVzc2lvbiBpcworICogY29uc2lkZXJlZCB0byBoYXZlIGxhYmVsIGV4cHJlc3Npb24gZXF1 aXZhbGVudCB0byAnJXwhJScgd2hpY2ggaXMgc2V0IG9mIGFsbAorICogbGFiZWxzIHdoaWNoIGhh dmUgYXQgbGVhc3Qgb25lIGVsZW1lbnQgb2YgdGhlIGdpdmVuIGVsZW1lbnQga2luZCBhc3NvY2lh dGVkIHdpdGggaXQuCiAgKi8KIHN0YXRpYyBOb2RlICoKLXRyYW5zZm9ybUxhYmVsRXhwcihHcmFw aFRhYmxlUGFyc2VTdGF0ZSAqZ3BzdGF0ZSwgTm9kZSAqbGFiZWxleHByKQordHJhbnNmb3JtTGFi ZWxFeHByKEdyYXBoVGFibGVQYXJzZVN0YXRlICpncHN0YXRlLCBOb2RlICpsYWJlbGV4cHIsIEdy YXBoRWxlbWVudFBhdHRlcm5LaW5kIGdlcGtpbmQpCiB7CiAJTm9kZQkgICAqcmVzdWx0OwogCisJ Y2hlY2tfc3RhY2tfZGVwdGgoKTsKKwogCWlmIChsYWJlbGV4cHIgPT0gTlVMTCkKLQkJcmV0dXJu IE5VTEw7CisJeworCQkvKiBFbXB0eSBsYWJlbCBleHByZXNzaW9uLCB0cmFuc2Zvcm0gaW50byBh IGRpc2p1bmN0aW9uIG9mIGxhYmVscyAqLworCQlSZWxhdGlvbglyZWw7CisJCVN5c1NjYW5EZXNj IHNjYW47CisJCVNjYW5LZXlEYXRhIGtleVsxXTsKKwkJSGVhcFR1cGxlCXR1cDsKKwkJTGlzdAkg ICAqYXJncyA9IE5JTDsKKworCQlyZWwgPSB0YWJsZV9vcGVuKFByb3BncmFwaExhYmVsUmVsYXRp b25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJU2NhbktleUluaXQoJmtleVswXSwKKwkJCQkJQW51 bV9wZ19wcm9wZ3JhcGhfbGFiZWxfcGdscGdpZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVy LAorCQkJCQlGX09JREVRLCBPYmplY3RJZEdldERhdHVtKGdwc3RhdGUtPmdyYXBoaWQpKTsKKwkJ c2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihyZWwsIFByb3BncmFwaExhYmVsR3JhcGhOYW1lSW5k ZXhJZCwKKwkJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCBrZXkpOworCQl3aGlsZSAoSGVhcFR1cGxl SXNWYWxpZCh0dXAgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkKKwkJeworCQkJRm9ybV9wZ19w cm9wZ3JhcGhfbGFiZWwgbGFiZWwgPSAoRm9ybV9wZ19wcm9wZ3JhcGhfbGFiZWwpIEdFVFNUUlVD VCh0dXApOworCQkJTGlzdAkgICAqZWxlbWVudHM7CisJCQlMaXN0CSAgICplbGVtX2xhYmVsczsK KwkJCUdyYXBoTGFiZWxSZWYgKmxyZWY7CisKKwkJCWdldF9wcm9wZ3JhcGhfbGFiZWxfZWxlbWVu dHMobGFiZWwtPm9pZCwgZ2Vwa2luZCwgJmVsZW1lbnRzLCAmZWxlbV9sYWJlbHMpOworCisJCQkv KgorCQkJICogT25seSBpbmNsdWRlIHRoZSBsYWJlbHMgd2hpY2ggaGF2ZSBlbGVtZW50cyBhc3Nv Y2lhdGVkIHdpdGggaXQuCisJCQkgKiBQcm9wZXJ0aWVzIG9mIHRoZSBvdGhlciBsYWJlbHMgZG8g bm90IG1hdHRlci4KKwkJCSAqLworCQkJaWYgKCFlbGVtZW50cykKKwkJCQljb250aW51ZTsKKwor CQkJbHJlZiA9IG1ha2VOb2RlKEdyYXBoTGFiZWxSZWYpOworCQkJbHJlZi0+bGFiZWxpZCA9IGxh YmVsLT5vaWQ7CisJCQlscmVmLT5lbGVtZW50cyA9IGVsZW1lbnRzOworCQkJbHJlZi0+ZWxlbV9s YWJlbHMgPSBlbGVtX2xhYmVsczsKKwkJCWxyZWYtPmxvY2F0aW9uID0gLTE7CisJCQlhcmdzID0g bGFwcGVuZChhcmdzLCBscmVmKTsKKwkJfQorCQlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCQl0 YWJsZV9jbG9zZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CiAKLQljaGVja19zdGFja19kZXB0aCgp OworCQlyZXN1bHQgPSAoTm9kZSAqKSBtYWtlQm9vbEV4cHIoT1JfRVhQUiwgYXJncywgLTEpOwor CQlyZXR1cm4gcmVzdWx0OworCX0KIAogCXN3aXRjaCAobm9kZVRhZyhsYWJlbGV4cHIpKQogCXsK QEAgLTE3OSw2ICs0ODcsMTUgQEAgdHJhbnNmb3JtTGFiZWxFeHByKEdyYXBoVGFibGVQYXJzZVN0 YXRlICpncHN0YXRlLCBOb2RlICpsYWJlbGV4cHIpCiAJCQkJbHJlZi0+bGFiZWxpZCA9IGxhYmVs aWQ7CiAJCQkJbHJlZi0+bG9jYXRpb24gPSBjcmVmLT5sb2NhdGlvbjsKIAorCQkJCWdldF9wcm9w Z3JhcGhfbGFiZWxfZWxlbWVudHMobGFiZWxpZCwgZ2Vwa2luZCwgJmxyZWYtPmVsZW1lbnRzLCAm bHJlZi0+ZWxlbV9sYWJlbHMpOworCQkJCWlmICghbHJlZi0+ZWxlbWVudHMpCisJCQkJCWVyZXBv cnQoRVJST1IsCisJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwKKwkJ CQkJCQkgZXJybXNnKCJubyBwcm9wZXJ0eSBncmFwaCBlbGVtZW50IG9mIHR5cGUgXCIlc1wiIGhh cyBsYWJlbCBcIiVzXCIgYXNzb2NpYXRlZCB3aXRoIGl0IGluIHByb3BlcnR5IGdyYXBoIFwiJXNc IiIsCisJCQkJCQkJCQlnZXBraW5kID09IFZFUlRFWF9QQVRURVJOID8gInZlcnRleCIgOiAiZWRn ZSIsCisJCQkJCQkJCQlnZXRfcHJvcGdyYXBoX2xhYmVsX25hbWUobGFiZWxpZCksCisJCQkJCQkJ CQlnZXRfcmVsX25hbWUoZ3BzdGF0ZS0+Z3JhcGhpZCkpKSk7CisKIAkJCQlyZXN1bHQgPSAoTm9k ZSAqKSBscmVmOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMTg2LDE0ICs1MDMsMTEgQEAgdHJhbnNm b3JtTGFiZWxFeHByKEdyYXBoVGFibGVQYXJzZVN0YXRlICpncHN0YXRlLCBOb2RlICpsYWJlbGV4 cHIpCiAJCWNhc2UgVF9Cb29sRXhwcjoKIAkJCXsKIAkJCQlCb29sRXhwciAgICpiZSA9IChCb29s RXhwciAqKSBsYWJlbGV4cHI7Ci0JCQkJTGlzdENlbGwgICAqbGM7CiAJCQkJTGlzdAkgICAqYXJn cyA9IE5JTDsKIAotCQkJCWZvcmVhY2gobGMsIGJlLT5hcmdzKQorCQkJCWZvcmVhY2hfcHRyKE5v ZGUsIGFyZywgYmUtPmFyZ3MpCiAJCQkJewotCQkJCQlOb2RlCSAgICphcmcgPSAoTm9kZSAqKSBs Zmlyc3QobGMpOwotCi0JCQkJCWFyZyA9IHRyYW5zZm9ybUxhYmVsRXhwcihncHN0YXRlLCBhcmcp OworCQkJCQlhcmcgPSB0cmFuc2Zvcm1MYWJlbEV4cHIoZ3BzdGF0ZSwgYXJnLCBnZXBraW5kKTsK IAkJCQkJYXJncyA9IGxhcHBlbmQoYXJncywgYXJnKTsKIAkJCQl9CiAKQEAgLTIxNSwxMCArNTI5 LDExIEBAIHRyYW5zZm9ybUxhYmVsRXhwcihHcmFwaFRhYmxlUGFyc2VTdGF0ZSAqZ3BzdGF0ZSwg Tm9kZSAqbGFiZWxleHByKQogICogVHJhbnNmb3JtIGEgR3JhcGhFbGVtZW50UGF0dGVybi4KICAq CiAgKiBUcmFuc2Zvcm0gdGhlIGxhYmVsIGV4cHJlc3Npb24gYW5kIHRoZSB3aGVyZSBjbGF1c2Ug aW4gdGhlIGVsZW1lbnQgcGF0dGVybgotICogZ2l2ZW4gYnkgR3JhcGhFbGVtZW50UGF0dGVybi4g VGhlIHZhcmlhYmxlIG5hbWUgaW4gdGhlIEdyYXBoRWxlbWVudFBhdHRlcm4gaXMKLSAqIGFkZGVk IHRvIHRoZSBsaXN0IG9mIHZhcmlhYmxlcyBpbiB0aGUgR3JhcGhUYWJsZVBhcnNlU3RhdGUgd2hp Y2ggaXMgdXNlZCB0bwotICogcmVzb2x2ZSBwcm9wZXJ0eSByZWZlcmVuY2VzIGluIHRoaXMgZWxl bWVudCBwYXR0ZXJuIG9yIGVsc2V3aGVyZSBpbiB0aGUKLSAqIEdSQVBIX1RBQkxFLgorICogZ2l2 ZW4gYnkgR3JhcGhFbGVtZW50UGF0dGVybi4KKyAqCisgKiBXaGlsZSBkb2luZyBzbyBidWlsZCB0 aGUgbmFtZXNwYWNlIGZvciB0aGUgZ3JhcGggdGFibGUsIG9mIHdoaWNoIHRoaXMgZWxlbWVudAor ICogaXMgYSBwYXJ0LiBUaGUgbmFtZXNwYWNlIGlzIHNhdmVkIGluIEdyYXBoVGFibGVQYXJzZVN0 YXRlIGFzIGEgbGlzdCBvZgorICogdmFyaWFibGVzIGFuZCB0aGVpciByZXNwZWN0aXZlIHByb3Bl cnRpZXMuCiAgKi8KIHN0YXRpYyBOb2RlICoKIHRyYW5zZm9ybUdyYXBoRWxlbWVudFBhdHRlcm4o UGFyc2VTdGF0ZSAqcHN0YXRlLCBHcmFwaEVsZW1lbnRQYXR0ZXJuICpnZXApCkBAIC0yMzUsMTAg KzU1MCw0MCBAQCB0cmFuc2Zvcm1HcmFwaEVsZW1lbnRQYXR0ZXJuKFBhcnNlU3RhdGUgKnBzdGF0 ZSwgR3JhcGhFbGVtZW50UGF0dGVybiAqZ2VwKQogCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVS RV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkgZXJybXNnKCJlbGVtZW50IHBhdHRlcm4gcXVhbnRpZmll ciBpcyBub3Qgc3VwcG9ydGVkIikpKTsKIAorCS8qIFByZXNlcnZlIGVtcHR5IGxhYmVsIGV4cHJl c3Npb24gc3RhdHVzLiAqLworCWdlcC0+aGFzX2VtcHR5X2xhYmVsZXhwciA9ICFnZXAtPmxhYmVs ZXhwcjsKKwlnZXAtPmxhYmVsZXhwciA9IHRyYW5zZm9ybUxhYmVsRXhwcihncHN0YXRlLCBnZXAt PmxhYmVsZXhwciwgZ2VwLT5raW5kKTsKKworCS8qCisJICogQWRkIHRoZSBuYW1lZCBlbGVtZW50 IHBhdHRlcm4gdG8gdGhlIG5hbWVzcGFjZSwgc3F1YXNoaW5nIHRvZ2V0aGVyCisJICogcHJvcGVy dGllcyBvZiBlbGVtZW50IHBhdHRlcm5zIHdpdGggdGhlIHNhbWUgdmFyaWFibGUgbmFtZS4gV2Ug bmVlZCB0bworCSAqIGRvIHRoaXMgYWZ0ZXIgdGhlIGxhYmVsIGV4cHJlc3Npb24gaXMgdHJhbnNm b3JtZWQsIHNpbmNlIHdlIHJlcXVpcmUKKwkgKiBsYWJlbCBleHByZXNzaW9uIHRvIGZpbmQgdGhl IHByb3BlcnRpZXMgYXNzb2NpYXRlZCB3aXRoIHZhcmlhYmxlcy4gV2UKKwkgKiBzaG91bGQgZG8g aXQgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgV0hFUkUgY2xhdXNlIHdoaWNoIG1pZ2h0IGhhdmUK KwkgKiBwcm9wZXJ0eSByZWZlcmVuY2VzIHdoaWNoIGFyZSByZXNvbHZlZCB1c2luZyB0aGUgdmFy aWFibGVzLgorCSAqLwogCWlmIChnZXAtPnZhcmlhYmxlKQotCQlncHN0YXRlLT52YXJpYWJsZXMg PSBsYXBwZW5kKGdwc3RhdGUtPnZhcmlhYmxlcywgbWFrZVN0cmluZyhwc3RyZHVwKGdlcC0+dmFy aWFibGUpKSk7CisJeworCQlib29sCQlhZGRfbmV3X3ZhcmlhYmxlID0gdHJ1ZTsKIAotCWdlcC0+ bGFiZWxleHByID0gdHJhbnNmb3JtTGFiZWxFeHByKGdwc3RhdGUsIGdlcC0+bGFiZWxleHByKTsK KwkJZm9yZWFjaF9wdHIoR3JhcGhUYWJsZUVsZW1lbnRWYXJpYWJsZSwgdmFyLCBncHN0YXRlLT52 YXJpYWJsZXMpCisJCXsKKwkJCWlmIChzdHJjbXAodmFyLT5uYW1lLCBnZXAtPnZhcmlhYmxlKSA9 PSAwKQorCQkJeworCQkJCXZhci0+cHJvcGVydGllcyA9IGxpc3RfY29uY2F0X3VuaXF1ZV9vaWQo dmFyLT5wcm9wZXJ0aWVzLCBnZXRfbGFiZWxleHByX3Byb3BlcnRpZXMoZ2VwLT5sYWJlbGV4cHIp KTsKKwkJCQlhZGRfbmV3X3ZhcmlhYmxlID0gZmFsc2U7CisJCQl9CisJCX0KKworCQlpZiAoYWRk X25ld192YXJpYWJsZSkKKwkJeworCQkJR3JhcGhUYWJsZUVsZW1lbnRWYXJpYWJsZSAqbmV3X3Zh ciA9IHBhbGxvYzBfb2JqZWN0KEdyYXBoVGFibGVFbGVtZW50VmFyaWFibGUpOworCisJCQluZXdf dmFyLT5uYW1lID0gZ2VwLT52YXJpYWJsZTsKKwkJCW5ld192YXItPnByb3BlcnRpZXMgPSBnZXRf bGFiZWxleHByX3Byb3BlcnRpZXMoZ2VwLT5sYWJlbGV4cHIpOworCQkJZ3BzdGF0ZS0+dmFyaWFi bGVzID0gbGFwcGVuZChncHN0YXRlLT52YXJpYWJsZXMsIG5ld192YXIpOworCQl9CisJfQogCiAJ Z2VwLT53aGVyZUNsYXVzZSA9IHRyYW5zZm9ybUV4cHIocHN0YXRlLCBnZXAtPndoZXJlQ2xhdXNl LCBFWFBSX0tJTkRfV0hFUkUpOwogCWFzc2lnbl9leHByX2NvbGxhdGlvbnMocHN0YXRlLCBnZXAt PndoZXJlQ2xhdXNlKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZUdy YXBoVGFibGUuYyBiL3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZUdyYXBoVGFibGUuYwppbmRl eCAwNmYyZjM0NDJkOC4uYWNlYmQ3NjIzZmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Jld3Jp dGUvcmV3cml0ZUdyYXBoVGFibGUuYworKysgYi9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVH cmFwaFRhYmxlLmMKQEAgLTU5LDEyICs1OSwxMiBAQCBzdHJ1Y3QgcGF0aF9mYWN0b3IKIAlHcmFw aEVsZW1lbnRQYXR0ZXJuS2luZCBraW5kOwogCWNvbnN0IGNoYXIgKnZhcmlhYmxlOwogCU5vZGUJ ICAgKmxhYmVsZXhwcjsKKwlib29sCQloYXNfZW1wdHlfbGFiZWxleHByOwkvKiBDb3BpZWQgZnJv bSB0aGUgc291cmNlCisJCQkJCQkJCQkJICogR3JhcGhFbGVtZW50UGF0dGVybiAqLwogCU5vZGUJ ICAgKndoZXJlQ2xhdXNlOwogCWludAkJCWZhY3RvcnBvczsJCS8qIFBvc2l0aW9uIG9mIHRoaXMg cGF0aCBmYWN0b3IgaW4gdGhlIGxpc3Qgb2YKIAkJCQkJCQkJICogcGF0aCBmYWN0b3JzIHJlcHJl c2VudGluZyBhIGdpdmVuIHBhdGgKIAkJCQkJCQkJICogcGF0dGVybi4gKi8KLQlMaXN0CSAgICps YWJlbG9pZHM7CQkvKiBPSURzIG9mIGFsbCB0aGUgbGFiZWxzIHJlZmVyZW5jZWQgaW4KLQkJCQkJ CQkJICogbGFiZWxleHByLiAqLwogCS8qIExpbmtzIHRvIGFkamFjZW50IHZlcnRleCBwYXRoIGZh Y3RvcnMgaWYgdGhpcyBpcyBhbiBlZGdlIHBhdGggZmFjdG9yLiAqLwogCXN0cnVjdCBwYXRoX2Zh Y3RvciAqc3JjX3BmOwogCXN0cnVjdCBwYXRoX2ZhY3RvciAqZGVzdF9wZjsKQEAgLTgyLDYgKzgy LDggQEAgc3RydWN0IHBhdGhfZWxlbWVudAogCXN0cnVjdCBwYXRoX2ZhY3RvciAqcGF0aF9mYWN0 b3I7CiAJT2lkCQkJZWxlbW9pZDsKIAlPaWQJCQlyZWxvaWQ7CisJTGlzdAkgICAqZWxlbV9sYWJl bF9vaWRzOwkvKiBPSURzIGxpbmtpbmcgbGFiZWxzIGZyb20gdGhlIGVsZW1lbnQKKwkJCQkJCQkJ CSAqIHBhdHRlcm4gdG8gdGhpcyBlbGVtZW50LiAqLwogCS8qIFNvdXJjZSBhbmQgZGVzdGluYXRp b24gdmVydGV4IGVsZW1lbnRzIGZvciBhbiBlZGdlIGVsZW1lbnQuICovCiAJT2lkCQkJc3JjdmVy dGV4aWQ7CiAJT2lkCQkJZGVzdHZlcnRleGlkOwpAQCAtOTgsOCArMTAwLDggQEAgc3RhdGljIE5v ZGUgKmdlbmVyYXRlX3NldG9wX2Zyb21fcGF0aHF1ZXJpZXMoTGlzdCAqcGF0aHF1ZXJpZXMsIExp c3QgKipydGFibGUsIEwKIHN0YXRpYyBMaXN0ICpnZW5lcmF0ZV9xdWVyaWVzX2Zvcl9wYXRoX3Bh dHRlcm5fcmVjdXJzZShSYW5nZVRibEVudHJ5ICpydGUsIExpc3QgKnBhdGhxdWVyaWVzLCBMaXN0 ICpjdXJfcGF0aCwgTGlzdCAqcGF0aF9wYXR0ZXJuX2xpc3RzLCBpbnQgZWxlbXBvcyk7CiBzdGF0 aWMgUXVlcnkgKmdlbmVyYXRlX3F1ZXJ5X2Zvcl9lbXB0eV9wYXRoX3BhdHRlcm4oUmFuZ2VUYmxF bnRyeSAqcnRlKTsKIHN0YXRpYyBRdWVyeSAqZ2VuZXJhdGVfdW5pb25fZnJvbV9wYXRocXVlcmll cyhMaXN0ICoqcGF0aHF1ZXJpZXMpOworc3RhdGljIExpc3QgKmdldF9wYXRoX2VsZW1lbnRzX2Zy b21fbGFiZWxleHByKHN0cnVjdCBwYXRoX2ZhY3RvciAqcGYsIE5vZGUgKmxhYmVsZXhwcik7CiBz dGF0aWMgTGlzdCAqZ2V0X3BhdGhfZWxlbWVudHNfZm9yX3BhdGhfZmFjdG9yKE9pZCBwcm9wZ3Jh cGhpZCwgc3RydWN0IHBhdGhfZmFjdG9yICpwZik7Ci1zdGF0aWMgYm9vbCBpc19wcm9wZXJ0eV9h c3NvY2lhdGVkX3dpdGhfbGFiZWwoT2lkIGxhYmVsb2lkLCBPaWQgcHJvcG9pZCk7CiBzdGF0aWMg Tm9kZSAqZ2V0X2VsZW1lbnRfcHJvcGVydHlfZXhwcihPaWQgZWxlbW9pZCwgT2lkIHByb3BvaWQs IGludCBydGluZGV4KTsKIAogLyoKQEAgLTIyMSw5ICsyMjMsMTIgQEAgZ2VuZXJhdGVfcXVlcmll c19mb3JfcGF0aF9wYXR0ZXJuKFJhbmdlVGJsRW50cnkgKnJ0ZSwgTGlzdCAqcGF0aF9wYXR0ZXJu KQogCQkJCSAqIGV4cHJlc3Npb24gaXRzZWxmLiBIZW5jZSBpZiBvbmx5IG9uZSBvZiB0aGUgdHdv IGVsZW1lbnQKIAkJCQkgKiBwYXR0ZXJucyBoYXMgYSBsYWJlbCBleHByZXNzaW9uIHVzZSB0aGF0 IGV4cHJlc3Npb24uCiAJCQkJICovCi0JCQkJaWYgKCFvdGhlci0+bGFiZWxleHByKQorCQkJCWlm IChvdGhlci0+aGFzX2VtcHR5X2xhYmVsZXhwcikKKwkJCQl7CiAJCQkJCW90aGVyLT5sYWJlbGV4 cHIgPSBnZXAtPmxhYmVsZXhwcjsKLQkJCQllbHNlIGlmIChnZXAtPmxhYmVsZXhwciAmJiAhZXF1 YWwob3RoZXItPmxhYmVsZXhwciwgZ2VwLT5sYWJlbGV4cHIpKQorCQkJCQlvdGhlci0+aGFzX2Vt cHR5X2xhYmVsZXhwciA9IGdlcC0+aGFzX2VtcHR5X2xhYmVsZXhwcjsKKwkJCQl9CisJCQkJZWxz ZSBpZiAoIWdlcC0+aGFzX2VtcHR5X2xhYmVsZXhwciAmJiAhZXF1YWwob3RoZXItPmxhYmVsZXhw ciwgZ2VwLT5sYWJlbGV4cHIpKQogCQkJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkJCShlcnJjb2Rl KEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkJCQkgZXJybXNnKCJlbGVtZW50 IHBhdHRlcm5zIHdpdGggc2FtZSB2YXJpYWJsZSBuYW1lIFwiJXNcIiBidXQgZGlmZmVyZW50IGxh YmVsIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIiwKQEAgLTI1Miw2ICsyNTcsNyBAQCBn ZW5lcmF0ZV9xdWVyaWVzX2Zvcl9wYXRoX3BhdHRlcm4oUmFuZ2VUYmxFbnRyeSAqcnRlLCBMaXN0 ICpwYXRoX3BhdHRlcm4pCiAJCQkJcGYtPmZhY3RvcnBvcyA9IGZhY3RvcnBvcysrOwogCQkJCXBm LT5raW5kID0gZ2VwLT5raW5kOwogCQkJCXBmLT5sYWJlbGV4cHIgPSBnZXAtPmxhYmVsZXhwcjsK KwkJCQlwZi0+aGFzX2VtcHR5X2xhYmVsZXhwciA9IGdlcC0+aGFzX2VtcHR5X2xhYmVsZXhwcjsK IAkJCQlwZi0+dmFyaWFibGUgPSBnZXAtPnZhcmlhYmxlOwogCQkJCXBmLT53aGVyZUNsYXVzZSA9 IGdlcC0+d2hlcmVDbGF1c2U7CiAKQEAgLTczOCwxMSArNzQ0LDEzIEBAIGdlbmVyYXRlX3NldG9w X2Zyb21fcGF0aHF1ZXJpZXMoTGlzdCAqcGF0aHF1ZXJpZXMsIExpc3QgKipydGFibGUsIExpc3Qg Kip0YXJnZXRsCiAgKiBDb25zdHJ1Y3QgYSBwYXRoX2VsZW1lbnQgb2JqZWN0IGZvciB0aGUgZ3Jh cGggZWxlbWVudCBnaXZlbiBieSBgZWxlbW9pZGAKICAqIHN0YXRpc2ZpZWQgYnkgdGhlIHBhdGgg ZmFjdG9yIGBwZmAuCiAgKgotICogSWYgdGhlIHR5cGUgb2YgZ3JhcGggZWxlbWVudCBkb2VzIG5v dCBmaXQgdGhlIGVsZW1lbnQgcGF0dGVybiBraW5kLCB0aGUKLSAqIGZ1bmN0aW9uIHJldHVybnMg TlVMTC4KKyAqIGVsZW1fbGFiZWxfb2lkIGlzIHRoZSBPSUQgbGlua2luZyB0aGUgZ2l2ZW4gZWxl bWVudCB3aXRoIG9uZSBvZiB0aGUgbGFiZWxzIGluCisgKiB0aGUgbGFiZWwgZXhwcmVzc2lvbiBv ZiB0aGUgZ2l2ZW4gcGF0aCBmYWN0b3IuIE9JRHMgbGlua2luZyB0aGUgc2FtZSBlbGVtZW50Cisg KiB3aXRoIG90aGVyIGxhYmVscyBpbiB0aGUgbGFiZWwgZXhwcmVzc2lvbiBhcmUgYWRkZWQgYXMg d2UgZXhhbWluZSBhbGwgdGhlCisgKiBsYWJlbHMgaW4gdGhlIGxhYmVsIGV4cHJlc3Npb24gaW4g dGhlIGdpdmVuIHBhdGggZmFjdG9yLgogICovCiBzdGF0aWMgc3RydWN0IHBhdGhfZWxlbWVudCAq Ci1jcmVhdGVfcGVfZm9yX2VsZW1lbnQoc3RydWN0IHBhdGhfZmFjdG9yICpwZiwgT2lkIGVsZW1v aWQpCitjcmVhdGVfcGVfZm9yX2VsZW1lbnQoc3RydWN0IHBhdGhfZmFjdG9yICpwZiwgT2lkIGVs ZW1vaWQsIE9pZCBlbGVtX2xhYmVsX29pZCkKIHsKIAlIZWFwVHVwbGUJZWxldHVwID0gU2VhcmNo U3lzQ2FjaGUxKFBST1BHUkFQSEVMT0lELCBPYmplY3RJZEdldERhdHVtKGVsZW1vaWQpKTsKIAlG b3JtX3BnX3Byb3BncmFwaF9lbGVtZW50IHBnZWZvcm07CkBAIC03NTIsMTYgKzc2MCwxNyBAQCBj cmVhdGVfcGVfZm9yX2VsZW1lbnQoc3RydWN0IHBhdGhfZmFjdG9yICpwZiwgT2lkIGVsZW1vaWQp CiAJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwcm9wZXJ0eSBncmFwaCBl bGVtZW50ICV1IiwgZWxlbW9pZCk7CiAJcGdlZm9ybSA9ICgoRm9ybV9wZ19wcm9wZ3JhcGhfZWxl bWVudCkgR0VUU1RSVUNUKGVsZXR1cCkpOwogCi0JaWYgKChwZ2Vmb3JtLT5wZ2VraW5kID09IFBH RUtJTkRfVkVSVEVYICYmIHBmLT5raW5kICE9IFZFUlRFWF9QQVRURVJOKSB8fAotCQkocGdlZm9y bS0+cGdla2luZCA9PSBQR0VLSU5EX0VER0UgJiYgIUlTX0VER0VfUEFUVEVSTihwZi0+a2luZCkp KQotCXsKLQkJUmVsZWFzZVN5c0NhY2hlKGVsZXR1cCk7Ci0JCXJldHVybiBOVUxMOwotCX0KKwkv KgorCSAqIFdlIG1ha2Ugc3VyZSB0aGF0IHRoZSB0eXBlIG9mIGdyYXBoIGVsZW1lbnQgZml0cyB0 aGUgZWxlbWVudCBwYXR0ZXJuCisJICoga2luZCB3aGVuIGNvbGxlY3RpbmcgZWxlbWVudHMgaW4g Z2V0X3Byb3BncmFwaF9sYWJlbF9lbGVtZW50cygpIGl0c2VsZi4KKwkgKi8KKwlBc3NlcnQoKHBn ZWZvcm0tPnBnZWtpbmQgPT0gUEdFS0lORF9WRVJURVggJiYgcGYtPmtpbmQgPT0gVkVSVEVYX1BB VFRFUk4pIHx8CisJCSAgIChwZ2Vmb3JtLT5wZ2VraW5kID09IFBHRUtJTkRfRURHRSAmJiBJU19F REdFX1BBVFRFUk4ocGYtPmtpbmQpKSk7CiAKIAlwZSA9IHBhbGxvYzBfb2JqZWN0KHN0cnVjdCBw YXRoX2VsZW1lbnQpOwogCXBlLT5wYXRoX2ZhY3RvciA9IHBmOwogCXBlLT5lbGVtb2lkID0gZWxl bW9pZDsKKwlwZS0+ZWxlbV9sYWJlbF9vaWRzID0gbGlzdF9tYWtlMV9vaWQoZWxlbV9sYWJlbF9v aWQpOwogCXBlLT5yZWxvaWQgPSBwZ2Vmb3JtLT5wZ2VyZWxpZDsKIAogCS8qCkBAIC04MDEsMTg4 ICs4MTAsODkgQEAgY3JlYXRlX3BlX2Zvcl9lbGVtZW50KHN0cnVjdCBwYXRoX2ZhY3RvciAqcGYs IE9pZCBlbGVtb2lkKQogfQogCiAvKgotICogUmV0dXJucyB0aGUgbGlzdCBvZiBPSURzIG9mIGdy YXBoIGxhYmVscyB3aGljaCB0aGUgZ2l2ZW4gbGFiZWwgZXhwcmVzc2lvbgotICogcmVzb2x2ZXMg dG8gaW4gdGhlIGdpdmVuIHByb3BlcnR5IGdyYXBoLgorICogUmV0dXJuIGEgbGlzdCBvZiBhbGwg dGhlIGdyYXBoIGVsZW1lbnRzIHRoYXQgc2F0aXNmeSB0aGUgZ3JhcGggZWxlbWVudCBwYXR0ZXJu CisgKiByZXByZXNlbnRlZCBieSB0aGUgZ2l2ZW4gcGF0aF9mYWN0b3IgYHBmYC4KKyAqCisgKiBU aGUgZWxlbWVudHMgdGhhdCBzYXRpc2Z5IHRoZSBnaXZlbiBlbGVtZW50IHBhdHRlcm4gYXJlIGNv bGxlY3RlZCBieSB3YWxraW5nCisgKiB0aGUgbGFiZWwgZXhwcmVzc2lvbi4gV2UgY3JlYXRlIG9u ZSBwYXRoX2VsZW1lbnQgb2JqZWN0IHJlcHJlc2VudGluZyBldmVyeQorICogZWxlbWVudCB3aG9z ZSBncmFwaCBlbGVtZW50IGtpbmQgcXVhbGlmaWVzIHRoZSBlbGVtZW50IHBhdHRlcm4ga2luZC4g QSBsaXN0IG9mCisgKiBhbGwgc3VjaCBwYXRoX2VsZW1lbnQgb2JqZWN0cyBpcyByZXR1cm5lZC4K KyAqCisgKiBnZXRfcGF0aF9lbGVtZW50c19mb3JfcGF0aF9mYWN0b3IoKSBpcyB0aGUgZW50cnkg cG9pbnQgZm9yIHJlY3Vyc2l2ZWx5CisgKiB3YWxraW5nIHRoZSBsYWJlbCBleHByZXNzaW9uLiBU aGUgYWN0dWFsIHJlY3Vyc2lvbiBpcyBpbXBsZW1lbnRlZCBpbgorICogZ2V0X3BhdGhfZWxlbWVu dHNfZnJvbV9sYWJlbGV4cHIoKS4KICAqLwogc3RhdGljIExpc3QgKgotZ2V0X2xhYmVsc19mb3Jf ZXhwcihPaWQgcHJvcGdyYXBoaWQsIE5vZGUgKmxhYmVsZXhwcikKK2dldF9wYXRoX2VsZW1lbnRz X2Zvcl9wYXRoX2ZhY3RvcihPaWQgcHJvcGdyYXBoaWQsIHN0cnVjdCBwYXRoX2ZhY3RvciAqcGYp CiB7Ci0JTGlzdAkgICAqbGFiZWxfb2lkczsKKwlyZXR1cm4gZ2V0X3BhdGhfZWxlbWVudHNfZnJv bV9sYWJlbGV4cHIocGYsIHBmLT5sYWJlbGV4cHIpOworfQogCi0JaWYgKCFsYWJlbGV4cHIpCi0J ewotCQlSZWxhdGlvbglyZWw7Ci0JCVN5c1NjYW5EZXNjIHNjYW47Ci0JCVNjYW5LZXlEYXRhIGtl eVsxXTsKLQkJSGVhcFR1cGxlCXR1cDsKK3N0YXRpYyBMaXN0ICoKK2dldF9wYXRoX2VsZW1lbnRz X2Zyb21fbGFiZWxleHByKHN0cnVjdCBwYXRoX2ZhY3RvciAqcGYsIE5vZGUgKmxhYmVsZXhwcikK K3sKKwlMaXN0CSAgICpwYXRoX2VsZW1lbnRzOwogCi0JCS8qCi0JCSAqIEFjY29yZGluZyB0byBz ZWN0aW9uIDkuMiAiQ29udGV4dHVhbCBpbmZlcmVuY2Ugb2YgYSBzZXQgb2YgbGFiZWxzIgotCQkg KiBzdWJjbGF1c2UgMi5hLmlpIG9mIFNRTC9QR1Egc3RhbmRhcmQsIGVsZW1lbnQgcGF0dGVybiB3 aGljaCBkb2VzCi0JCSAqIG5vdCBoYXZlIGEgbGFiZWwgZXhwcmVzc2lvbiBpcyBjb25zaWRlcmVk IHRvIGhhdmUgbGFiZWwgZXhwcmVzc2lvbgotCQkgKiBlcXVpdmFsZW50IHRvICclfCElJyB3aGlj aCBpcyBzZXQgb2YgYWxsIGxhYmVscy4KLQkJICovCi0JCWxhYmVsX29pZHMgPSBOSUw7Ci0JCXJl bCA9IHRhYmxlX29wZW4oUHJvcGdyYXBoTGFiZWxSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2sp OwotCQlTY2FuS2V5SW5pdCgma2V5WzBdLAotCQkJCQlBbnVtX3BnX3Byb3BncmFwaF9sYWJlbF9w Z2xwZ2lkLAotCQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsCi0JCQkJCUZfT0lERVEsIE9iamVj dElkR2V0RGF0dW0ocHJvcGdyYXBoaWQpKTsKLQkJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihy ZWwsIFByb3BncmFwaExhYmVsR3JhcGhOYW1lSW5kZXhJZCwKLQkJCQkJCQkJICB0cnVlLCBOVUxM LCAxLCBrZXkpOwotCQl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXAgPSBzeXN0YWJsZV9nZXRu ZXh0KHNjYW4pKSkKLQkJewotCQkJRm9ybV9wZ19wcm9wZ3JhcGhfbGFiZWwgbGFiZWwgPSAoRm9y bV9wZ19wcm9wZ3JhcGhfbGFiZWwpIEdFVFNUUlVDVCh0dXApOworCS8qIEVtcHR5IGxhYmVsIGV4 cHJlc3Npb25zIHNob3VsZCBoYXZlIGJlZW4gdHJhbmZvcm1lZCBhbHJlYWR5LiAqLworCUFzc2Vy dChsYWJlbGV4cHIpOwogCi0JCQlsYWJlbF9vaWRzID0gbGFwcGVuZF9vaWQobGFiZWxfb2lkcywg bGFiZWwtPm9pZCk7Ci0JCX0KLQkJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKLQkJdGFibGVfY2xv c2UocmVsLCBBY2Nlc3NTaGFyZUxvY2spOwotCX0KLQllbHNlIGlmIChJc0EobGFiZWxleHByLCBH cmFwaExhYmVsUmVmKSkKKwlpZiAoSXNBKGxhYmVsZXhwciwgR3JhcGhMYWJlbFJlZikpCiAJewog CQlHcmFwaExhYmVsUmVmICpnbHIgPSBjYXN0Tm9kZShHcmFwaExhYmVsUmVmLCBsYWJlbGV4cHIp OworCQlMaXN0Q2VsbCAgICpsY19lbGVtOworCQlMaXN0Q2VsbCAgICpsY19lbDsKIAotCQlsYWJl bF9vaWRzID0gbGlzdF9tYWtlMV9vaWQoZ2xyLT5sYWJlbGlkKTsKKwkJcGF0aF9lbGVtZW50cyA9 IE5JTDsKKwkJZm9yYm90aChsY19lbGVtLCBnbHItPmVsZW1lbnRzLCBsY19lbCwgZ2xyLT5lbGVt X2xhYmVscykKKwkJCXBhdGhfZWxlbWVudHMgPSBsYXBwZW5kKHBhdGhfZWxlbWVudHMsCisJCQkJ CQkJCQljcmVhdGVfcGVfZm9yX2VsZW1lbnQocGYsIGxmaXJzdF9vaWQobGNfZWxlbSksIGxmaXJz dF9vaWQobGNfZWwpKSk7CiAJfQogCWVsc2UgaWYgKElzQShsYWJlbGV4cHIsIEJvb2xFeHByKSkK IAl7Ci0JCUJvb2xFeHByICAgKmJlID0gY2FzdE5vZGUoQm9vbEV4cHIsIGxhYmVsZXhwcik7CisJ CUJvb2xFeHByICAgKmJlID0gY2FzdE5vZGUoQm9vbEV4cHIsIHBmLT5sYWJlbGV4cHIpOwogCQlM aXN0CSAgICpsYWJlbF9leHBycyA9IGJlLT5hcmdzOwogCi0JCWxhYmVsX29pZHMgPSBOSUw7Ci0J CWZvcmVhY2hfbm9kZShHcmFwaExhYmVsUmVmLCBnbHIsIGxhYmVsX2V4cHJzKQotCQkJbGFiZWxf b2lkcyA9IGxhcHBlbmRfb2lkKGxhYmVsX29pZHMsIGdsci0+bGFiZWxpZCk7Ci0JfQotCWVsc2UK LQl7CiAJCS8qCi0JCSAqIHNob3VsZCBub3QgcmVhY2ggaGVyZSBzaW5jZSBncmFtLnkgd2lsbCBu b3QgZ2VuZXJhdGUgYSBsYWJlbAotCQkgKiBleHByZXNzaW9uIHdpdGggb3RoZXIgbm9kZSB0eXBl cy4KKwkJICogV2Ugb25seSBzdXBwb3J0IGxhYmVsIGRpc2p1bmN0aW9uLiBTbyB3ZSBqdXN0IGNv bGxlY3QgdGhlIGRpc3RpbmN0CisJCSAqIGVsZW1lbnRzIG1lcmdpbmcgZWxlbWVudCBsYWJlbCBP SURzIG9mIHRoZSBlbGVtZW50cyB3aXRoIHNhbWUgT0lELgogCQkgKi8KLQkJZWxvZyhFUlJPUiwg InVuc3VwcG9ydGVkIGxhYmVsIGV4cHJlc3Npb24gbm9kZTogJWQiLCAoaW50KSBub2RlVGFnKGxh YmVsZXhwcikpOwotCX0KLQotCXJldHVybiBsYWJlbF9vaWRzOwotfQorCQlBc3NlcnQoYmUtPmJv b2xvcCA9PSBPUl9FWFBSKTsKIAotLyoKLSAqIFJldHVybiBhIGxpc3Qgb2YgYWxsIHRoZSBncmFw aCBlbGVtZW50cyB0aGF0IHNhdGlzZnkgdGhlIGdyYXBoIGVsZW1lbnQgcGF0dGVybgotICogcmVw cmVzZW50ZWQgYnkgdGhlIGdpdmVuIHBhdGhfZmFjdG9yIGBwZmAuCi0gKgotICogRmlyc3Qgd2Ug ZmluZCBhbGwgdGhlIGdyYXBoIGxhYmVscyB0aGF0IHNhdGlzZnkgdGhlIGxhYmVsIGV4cHJlc3Np b24gaW4gcGF0aAotICogZmFjdG9yLiBFYWNoIGxhYmVsIGlzIGFzc29jaWF0ZWQgd2l0aCBvbmUg b3IgbW9yZSBncmFwaCBlbGVtZW50cy4gIEEgdW5pb24gb2YKLSAqIGFsbCBzdWNoIGVsZW1lbnRz IHNhdGlzZmllcyB0aGUgZWxlbWVudCBwYXR0ZXJuLiBXZSBjcmVhdGUgb25lIHBhdGhfZWxlbWVu dAotICogb2JqZWN0IHJlcHJlc2VudGluZyBldmVyeSBlbGVtZW50IHdob3NlIGdyYXBoIGVsZW1l bnQga2luZCBxdWFsaWZpZXMgdGhlCi0gKiBlbGVtZW50IHBhdHRlcm4ga2luZC4gQSBsaXN0IG9m IGFsbCBzdWNoIHBhdGhfZWxlbWVudCBvYmplY3RzIGlzIHJldHVybmVkLgotICoKLSAqIE5vdGUg dGhhdCB3ZSBuZWVkIHRvIHJlcG9ydCBhbiBlcnJvciBmb3IgYW4gZXhwbGljaXRseSBzcGVjaWZp ZWQgbGFiZWwgd2hpY2gKLSAqIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55IGdyYXBoIGVsZW1l bnQgb2YgdGhlIHJlcXVpcmVkIGtpbmQuIFNvIHdlIGhhdmUgdG8KLSAqIHRyZWF0IGVhY2ggbGFi ZWwgc2VwYXJhdGVseS4gV2l0aG91dCB0aGF0IHJlcXVpcmVtZW50IHdlIGNvdWxkIGhhdmUgY29s bGVjdGVkCi0gKiBhbGwgdGhlIHVuaXF1ZSBlbGVtZW50cyBmaXJzdCBhbmQgdGhlbiBjcmVhdGVk IHBhdGhfZWxlbWVudCBvYmplY3RzIGZvciB0aGVtCi0gKiB0byBzaW1wbGlmeSB0aGUgY29kZS4K LSAqLwotc3RhdGljIExpc3QgKgotZ2V0X3BhdGhfZWxlbWVudHNfZm9yX3BhdGhfZmFjdG9yKE9p ZCBwcm9wZ3JhcGhpZCwgc3RydWN0IHBhdGhfZmFjdG9yICpwZikKLXsKLQlMaXN0CSAgICpsYWJl bF9vaWRzID0gZ2V0X2xhYmVsc19mb3JfZXhwcihwcm9wZ3JhcGhpZCwgcGYtPmxhYmVsZXhwcik7 Ci0JTGlzdAkgICAqZWxlbV9vaWRzX3NlZW4gPSBOSUw7Ci0JTGlzdAkgICAqcGZfZWxlbV9vaWRz ID0gTklMOwotCUxpc3QJICAgKnBhdGhfZWxlbWVudHMgPSBOSUw7Ci0JTGlzdAkgICAqdW5yZXNv bHZlZF9sYWJlbHMgPSBOSUw7Ci0JUmVsYXRpb24JcmVsOwotCVN5c1NjYW5EZXNjIHNjYW47Ci0J U2NhbktleURhdGEga2V5WzFdOwotCUhlYXBUdXBsZQl0dXA7Ci0KLQkvKgotCSAqIEEgcHJvcGVy dHkgZ3JhcGggZWxlbWVudCBjYW4gYmUgZWl0aGVyIGEgdmVydGV4IG9yIGFuIGVkZ2UuIE90aGVy IHR5cGVzCi0JICogb2YgcGF0aCBmYWN0b3JzIGxpa2UgbmVzdGVkIHBhdGggcGF0dGVybiBuZWVk IHRvIGJlIGhhbmRsZWQgc2VwYXJhdGVseQotCSAqIHdoZW4gc3VwcG9ydGVkLgotCSAqLwotCUFz c2VydChwZi0+a2luZCA9PSBWRVJURVhfUEFUVEVSTiB8fCBJU19FREdFX1BBVFRFUk4ocGYtPmtp bmQpKTsKLQotCXJlbCA9IHRhYmxlX29wZW4oUHJvcGdyYXBoRWxlbWVudExhYmVsUmVsYXRpb25J ZCwgQWNjZXNzU2hhcmVMb2NrKTsKLQlmb3JlYWNoX29pZChsYWJlbG9pZCwgbGFiZWxfb2lkcykK LQl7Ci0JCWJvb2wJCWZvdW5kID0gZmFsc2U7Ci0KLQkJU2NhbktleUluaXQoJmtleVswXSwKLQkJ CQkJQW51bV9wZ19wcm9wZ3JhcGhfZWxlbWVudF9sYWJlbF9wZ2VsbGFiZWxpZCwKLQkJCQkJQlRF cXVhbFN0cmF0ZWd5TnVtYmVyLAotCQkJCQlGX09JREVRLCBPYmplY3RJZEdldERhdHVtKGxhYmVs b2lkKSk7Ci0JCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocmVsLCBQcm9wZ3JhcGhFbGVtZW50 TGFiZWxMYWJlbEluZGV4SWQsIHRydWUsCi0JCQkJCQkJCSAgTlVMTCwgMSwga2V5KTsKLQkJd2hp bGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKSkpCisJCXBh dGhfZWxlbWVudHMgPSBOSUw7CisJCWZvcmVhY2hfcHRyKE5vZGUsIGxhYmVsX2V4cHIsIGxhYmVs X2V4cHJzKQogCQl7Ci0JCQlGb3JtX3BnX3Byb3BncmFwaF9lbGVtZW50X2xhYmVsIGxhYmVsX2Vs ZW0gPSAoRm9ybV9wZ19wcm9wZ3JhcGhfZWxlbWVudF9sYWJlbCkgR0VUU1RSVUNUKHR1cCk7Ci0J CQlPaWQJCQllbGVtX29pZCA9IGxhYmVsX2VsZW0tPnBnZWxlbGlkOworCQkJTGlzdAkgICAqbm9k ZV9wYXRoX2VsZW1lbnRzID0gZ2V0X3BhdGhfZWxlbWVudHNfZnJvbV9sYWJlbGV4cHIocGYsIGxh YmVsX2V4cHIpOwogCi0JCQlpZiAoIWxpc3RfbWVtYmVyX29pZChlbGVtX29pZHNfc2VlbiwgZWxl bV9vaWQpKQorCQkJaWYgKHBhdGhfZWxlbWVudHMgPT0gTklMKQorCQkJCXBhdGhfZWxlbWVudHMg PSBub2RlX3BhdGhfZWxlbWVudHM7CisJCQllbHNlCiAJCQl7Ci0JCQkJLyoKLQkJCQkgKiBDcmVh dGUgcGF0aF9lbGVtZW50IG9iamVjdCBpZiB0aGUgbmV3IGVsZW1lbnQgcXVhbGlmaWVzIHRoZQot CQkJCSAqIGVsZW1lbnQgcGF0dGVybiBraW5kLgotCQkJCSAqLwotCQkJCXN0cnVjdCBwYXRoX2Vs ZW1lbnQgKnBlID0gY3JlYXRlX3BlX2Zvcl9lbGVtZW50KHBmLCBlbGVtX29pZCk7Ci0KLQkJCQlp ZiAocGUpCisJCQkJZm9yZWFjaF9wdHIoc3RydWN0IHBhdGhfZWxlbWVudCwgbnBlLCBub2RlX3Bh dGhfZWxlbWVudHMpCiAJCQkJewotCQkJCQlwYXRoX2VsZW1lbnRzID0gbGFwcGVuZChwYXRoX2Vs ZW1lbnRzLCBwZSk7Ci0KLQkJCQkJLyogUmVtZW1iZXIgcXVhbGlmaWVkIGVsZW1lbnRzLiAqLwot CQkJCQlwZl9lbGVtX29pZHMgPSBsYXBwZW5kX29pZChwZl9lbGVtX29pZHMsIGVsZW1fb2lkKTsK LQkJCQkJZm91bmQgPSB0cnVlOworCQkJCQlzdHJ1Y3QgcGF0aF9lbGVtZW50ICpmb3VuZCA9IE5V TEw7CisKKwkJCQkJZm9yZWFjaF9wdHIoc3RydWN0IHBhdGhfZWxlbWVudCwgcGUsIHBhdGhfZWxl bWVudHMpCisJCQkJCXsKKwkJCQkJCWlmIChucGUtPmVsZW1vaWQgPT0gcGUtPmVsZW1vaWQpCisJ CQkJCQl7CisJCQkJCQkJcGUtPmVsZW1fbGFiZWxfb2lkcyA9IGxpc3RfY29uY2F0KHBlLT5lbGVt X2xhYmVsX29pZHMsCisJCQkJCQkJCQkJCQkJCQkgIG5wZS0+ZWxlbV9sYWJlbF9vaWRzKTsKKwkJ CQkJCQlmb3VuZCA9IHBlOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJ aWYgKCFmb3VuZCkKKwkJCQkJCXBhdGhfZWxlbWVudHMgPSBsYXBwZW5kKHBhdGhfZWxlbWVudHMs IG5wZSk7CiAJCQkJfQotCi0JCQkJLyoKLQkJCQkgKiBSZW1lbWViZXIgcXVhbGlmaWVkIGFuZCB1 bnF1YWxpZmllZCBlbGVtZW50cyBwcm9jZXNzZWQgc28KLQkJCQkgKiBmYXIgdG8gYXZvaWQgcHJv Y2Vzc2luZyBhbHJlYWR5IHByb2Nlc3NlZCBlbGVtZW50cyBhZ2Fpbi4KLQkJCQkgKi8KLQkJCQll bGVtX29pZHNfc2VlbiA9IGxhcHBlbmRfb2lkKGVsZW1fb2lkc19zZWVuLCBsYWJlbF9lbGVtLT5w Z2VsZWxpZCk7CiAJCQl9Ci0JCQllbHNlIGlmIChsaXN0X21lbWJlcl9vaWQocGZfZWxlbV9vaWRz LCBlbGVtX29pZCkpCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBUaGUgZ3JhcGggZWxlbWVudCBpcyBr bm93biB0byBxdWFsaWZ5IHRoZSBnaXZlbiBlbGVtZW50Ci0JCQkJICogcGF0dGVybi4gRmxhZyB0 aGF0IHRoZSBjdXJyZW50IGxhYmVsIGhhcyBhdCBsZWFzdCBvbmUKLQkJCQkgKiBxdWFsaWZpZWQg ZWxlbWVudCBhc3NvY2lhdGVkIHdpdGggaXQuCi0JCQkJICovCi0JCQkJZm91bmQgPSB0cnVlOwot CQkJfQotCQl9Ci0KLQkJaWYgKCFmb3VuZCkKLQkJewotCQkJLyoKLQkJCSAqIFdlIGRpZCBub3Qg ZmluZCBhbnkgcXVhbGlmaWVkIGVsZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMKLQkJCSAqIGxh YmVsLiBUaGUgbGFiZWwgb3IgaXRzIHByb3BlcnRpZXMgY2FuIG5vdCBiZSBhc3NvY2lhdGVkIHdp dGgKLQkJCSAqIHRoZSBnaXZlbiBlbGVtZW50IHBhdHRlcm4uIFRocm93IGFuIGVycm9yIGlmIHRo ZSBsYWJlbCB3YXMKLQkJCSAqIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGluIHRoZSBlbGVtZW50IHBh dHRlcm4uIE90aGVyd2lzZSByZW1lbWJlcgotCQkJICogaXQgZm9yIGxhdGVyIHVzZS4KLQkJCSAq LwotCQkJaWYgKCFwZi0+bGFiZWxleHByKQotCQkJCXVucmVzb2x2ZWRfbGFiZWxzID0gbGFwcGVu ZF9vaWQodW5yZXNvbHZlZF9sYWJlbHMsIGxhYmVsb2lkKTsKLQkJCWVsc2UKLQkJCQllcmVwb3J0 KEVSUk9SLAotCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwKLQkJCQkJ CSBlcnJtc2coIm5vIHByb3BlcnR5IGdyYXBoIGVsZW1lbnQgb2YgdHlwZSBcIiVzXCIgaGFzIGxh YmVsIFwiJXNcIiBhc3NvY2lhdGVkIHdpdGggaXQgaW4gcHJvcGVydHkgZ3JhcGggXCIlc1wiIiwK LQkJCQkJCQkJcGYtPmtpbmQgPT0gVkVSVEVYX1BBVFRFUk4gPyAidmVydGV4IiA6ICJlZGdlIiwK LQkJCQkJCQkJZ2V0X3Byb3BncmFwaF9sYWJlbF9uYW1lKGxhYmVsb2lkKSwKLQkJCQkJCQkJZ2V0 X3JlbF9uYW1lKHByb3BncmFwaGlkKSkpKTsKIAkJfQotCi0JCXN5c3RhYmxlX2VuZHNjYW4oc2Nh bik7CiAJfQotCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKLQotCS8qCi0JICog UmVtb3ZlIHRoZSBsYWJlbHMgd2hpY2ggd2VyZSBub3QgZXhwbGljaXRseSBtZW50aW9uZWQgaW4g dGhlIGxhYmVsCi0JICogZXhwcmVzc2lvbiBidXQgZG8gbm90IGhhdmUgYW55IHF1YWxpZmllZCBl bGVtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhlbS4KLQkgKiBQcm9wZXJ0aWVzIGFzc29jaWF0ZWQg d2l0aCBzdWNoIGxhYmVscyBtYXkgbm90IGJlIHJlZmVyZW5jZWQuIFNlZQotCSAqIHJlcGxhY2Vf cHJvcGVydHlfcmVmc19tdXRhdG9yKCkgZm9yIG1vcmUgZGV0YWlscy4KLQkgKi8KLQlwZi0+bGFi ZWxvaWRzID0gbGlzdF9kaWZmZXJlbmNlX29pZChsYWJlbF9vaWRzLCB1bnJlc29sdmVkX2xhYmVs cyk7CisJZWxzZQorCXsKKwkJcGF0aF9lbGVtZW50cyA9IE5JTDsJLyogS2VlcCBjb21waWxlciBx dWlldCAqLworCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgbGFiZWwgZXhwcmVzc2lvbiBub2Rl OiAlZCIsIChpbnQpIG5vZGVUYWcocGYtPmxhYmVsZXhwcikpOworCX0KIAogCXJldHVybiBwYXRo X2VsZW1lbnRzOwogfQpAQCAtMTAyMiw3ICs5MzIsNiBAQCByZXBsYWNlX3Byb3BlcnR5X3JlZnNf bXV0YXRvcihOb2RlICpub2RlLCBzdHJ1Y3QgcmVwbGFjZV9wcm9wZXJ0eV9yZWZzX2NvbnRleHQg KgogCQlOb2RlCSAgICpuID0gTlVMTDsKIAkJc3RydWN0IHBhdGhfZWxlbWVudCAqZm91bmRfbWFw cGluZyA9IE5VTEw7CiAJCXN0cnVjdCBwYXRoX2ZhY3RvciAqbWFwcGluZ19mYWN0b3IgPSBOVUxM OwotCQlMaXN0CSAgICp1bnJlbGF0ZWRfbGFiZWxzID0gTklMOwogCiAJCWZvcmVhY2hfcHRyKHN0 cnVjdCBwYXRoX2VsZW1lbnQsIG0sIGNvbnRleHQtPm1hcHBpbmdzKQogCQl7CkBAIC0xMDQzLDE2 ICs5NTIsMTEgQEAgcmVwbGFjZV9wcm9wZXJ0eV9yZWZzX211dGF0b3IoTm9kZSAqbm9kZSwgc3Ry dWN0IHJlcGxhY2VfcHJvcGVydHlfcmVmc19jb250ZXh0ICoKIAkJbWFwcGluZ19mYWN0b3IgPSBm b3VuZF9tYXBwaW5nLT5wYXRoX2ZhY3RvcjsKIAogCQkvKgotCQkgKiBGaW5kIHByb3BlcnR5IGRl ZmluaXRpb24gZm9yIGdpdmVuIGVsZW1lbnQgdGhyb3VnaCBhbnkgb2YgdGhlCisJCSAqIEZpbmQg cHJvcGVydHkgZGVmaW5pdGlvbiBmb3IgdGhlIGdpdmVuIGVsZW1lbnQgdGhyb3VnaCBhbnkgb2Yg dGhlCiAJCSAqIGFzc29jaWF0ZWQgbGFiZWxzIHF1YWxpZnlpbmcgdGhlIGdpdmVuIGVsZW1lbnQg cGF0dGVybi4KIAkJICovCi0JCWZvcmVhY2hfb2lkKGxhYmVsb2lkLCBtYXBwaW5nX2ZhY3Rvci0+ bGFiZWxvaWRzKQorCQlmb3JlYWNoX29pZChlbGVtX2xhYmVsaWQsIGZvdW5kX21hcHBpbmctPmVs ZW1fbGFiZWxfb2lkcykKIAkJewotCQkJT2lkCQkJZWxlbV9sYWJlbGlkID0gR2V0U3lzQ2FjaGVP aWQyKFBST1BHUkFQSEVMRU1FTlRMQUJFTEVMRU1FTlRMQUJFTCwKLQkJCQkJCQkJCQkJCQkgICBB bnVtX3BnX3Byb3BncmFwaF9lbGVtZW50X2xhYmVsX29pZCwKLQkJCQkJCQkJCQkJCQkgICBPYmpl Y3RJZEdldERhdHVtKGZvdW5kX21hcHBpbmctPmVsZW1vaWQpLAotCQkJCQkJCQkJCQkJCSAgIE9i amVjdElkR2V0RGF0dW0obGFiZWxvaWQpKTsKLQogCQkJaWYgKE9pZElzVmFsaWQoZWxlbV9sYWJl bGlkKSkKIAkJCXsKIAkJCQlIZWFwVHVwbGUJdHVwID0gU2VhcmNoU3lzQ2FjaGUyKFBST1BHUkFQ SExBQkVMUFJPUCwgT2JqZWN0SWRHZXREYXR1bShlbGVtX2xhYmVsaWQpLApAQCAtMTA3NCw1NSAr OTc4LDI2IEBAIHJlcGxhY2VfcHJvcGVydHlfcmVmc19tdXRhdG9yKE5vZGUgKm5vZGUsIHN0cnVj dCByZXBsYWNlX3Byb3BlcnR5X3JlZnNfY29udGV4dCAqCiAKIAkJCQlSZWxlYXNlU3lzQ2FjaGUo dHVwKTsKIAkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkvKgotCQkJCSAqIExhYmVsIGlzIG5vdCBh c3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnQgYnV0IGl0IG1heSBiZQotCQkJCSAqIGFzc29jaWF0 ZWQgd2l0aCB0aGUgcHJvcGVydHkgdGhyb3VnaCBzb21lIG90aGVyIGVsZW1lbnQuCi0JCQkJICog U2F2ZSBpdCBmb3IgbGF0ZXIgdXNlLgotCQkJCSAqLwotCQkJCXVucmVsYXRlZF9sYWJlbHMgPSBs YXBwZW5kX29pZCh1bnJlbGF0ZWRfbGFiZWxzLCBsYWJlbG9pZCk7Ci0JCQl9CiAJCX0KIAogCQkv KiBTZWUgaWYgd2UgY2FuIHJlc29sdmUgdGhlIHByb3BlcnR5IGluIHNvbWUgb3RoZXIgd2F5LiAq LwogCQlpZiAoIW4pCiAJCXsKLQkJCWJvb2wJCXByb3BfYXNzb2NpYXRlZCA9IGZhbHNlOwotCi0J CQlmb3JlYWNoX29pZChsb2lkLCB1bnJlbGF0ZWRfbGFiZWxzKQotCQkJewotCQkJCWlmIChpc19w cm9wZXJ0eV9hc3NvY2lhdGVkX3dpdGhfbGFiZWwobG9pZCwgZ3ByLT5wcm9waWQpKQotCQkJCXsK LQkJCQkJcHJvcF9hc3NvY2lhdGVkID0gdHJ1ZTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQot Ci0JCQlpZiAocHJvcF9hc3NvY2lhdGVkKQotCQkJewotCQkJCS8qCi0JCQkJICogVGhlIHByb3Bl cnR5IGlzIGFzc29jaWF0ZWQgd2l0aCBhdCBsZWFzdCBvbmUgb2YgdGhlIGxhYmVscwotCQkJCSAq IHRoYXQgc2F0aXNmeSBnaXZlbiBlbGVtZW50IHBhdHRlcm4uIElmIGl0J3MgYXNzb2NpYXRlZCB3 aXRoCi0JCQkJICogdGhlIGdpdmVuIGVsZW1lbnQgKHRocm91Z2ggc29tZSBvdGhlciBsYWJlbCks IHVzZQotCQkJCSAqIGNvcnJlc3BvbmRpZyB2YWx1ZSBleHByZXNzaW9uLiBPdGhlcndpc2UgTlVM TC4gUmVmLiBTUUwvUEdRCi0JCQkJICogc3RhbmRhcmQgc2VjdGlvbiA2LjUgUHJvcGVydHkgUmVm ZXJlbmNlLCBHZW5lcmFsIFJ1bGUgMi5iLgotCQkJCSAqLwotCQkJCW4gPSBnZXRfZWxlbWVudF9w cm9wZXJ0eV9leHByKGZvdW5kX21hcHBpbmctPmVsZW1vaWQsIGdwci0+cHJvcGlkLAotCQkJCQkJ CQkJCQkgIG1hcHBpbmdfZmFjdG9yLT5mYWN0b3Jwb3MgKyAxKTsKLQotCQkJCWlmICghbikKLQkJ CQkJbiA9IChOb2RlICopIG1ha2VOdWxsQ29uc3QoZ3ByLT50eXBlSWQsIGdwci0+dHlwbW9kLCBn cHItPmNvbGxhdGlvbik7Ci0JCQl9CisJCQkvKgorCQkJICogVGhlIHByb3BlcnR5IGlzIGFzc29j aWF0ZWQgd2l0aCBhdCBsZWFzdCBvbmUgb2YgdGhlIGxhYmVscyB0aGF0CisJCQkgKiBzYXRpc2Z5 IGdpdmVuIGVsZW1lbnQgcGF0dGVybi4gSWYgaXQncyBhc3NvY2lhdGVkIHdpdGggdGhlCisJCQkg KiBnaXZlbiBlbGVtZW50ICh0aHJvdWdoIHNvbWUgb3RoZXIgbGFiZWwpLCB1c2UgY29ycmVzcG9u ZGlnCisJCQkgKiB2YWx1ZSBleHByZXNzaW9uLiBPdGhlcndpc2UgTlVMTC4gUmVmLiBTUUwvUEdR IHN0YW5kYXJkIHNlY3Rpb24KKwkJCSAqIDYuNSBQcm9wZXJ0eSBSZWZlcmVuY2UsIEdlbmVyYWwg UnVsZSAyLmIuCisJCQkgKi8KKwkJCW4gPSBnZXRfZWxlbWVudF9wcm9wZXJ0eV9leHByKGZvdW5k X21hcHBpbmctPmVsZW1vaWQsIGdwci0+cHJvcGlkLAorCQkJCQkJCQkJCSAgbWFwcGluZ19mYWN0 b3ItPmZhY3RvcnBvcyArIDEpOwogCisJCQlpZiAoIW4pCisJCQkJbiA9IChOb2RlICopIG1ha2VO dWxsQ29uc3QoZ3ByLT50eXBlSWQsIGdwci0+dHlwbW9kLCBncHItPmNvbGxhdGlvbik7CiAJCX0K IAotCQlpZiAoIW4pCi0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQllcnJjb2RlKEVSUkNPREVfVU5E RUZJTkVEX09CSkVDVCksCi0JCQkJCWVycm1zZygicHJvcGVydHkgXCIlc1wiIGZvciBlbGVtZW50 IHZhcmlhYmxlIFwiJXNcIiBub3QgZm91bmQiLAotCQkJCQkJICAgZ2V0X3Byb3BncmFwaF9wcm9w ZXJ0eV9uYW1lKGdwci0+cHJvcGlkKSwgbWFwcGluZ19mYWN0b3ItPnZhcmlhYmxlKSk7Ci0KKwkJ QXNzZXJ0KG4pOwogCQlyZXR1cm4gbjsKIAl9CiAKQEAgLTEyMzcsNDMgKzExMTIsNiBAQCBidWls ZF9lZGdlX3ZlcnRleF9saW5rX3F1YWxzKEhlYXBUdXBsZSBlZGdldHVwLCBpbnQgZWRnZXJ0aSwg aW50IHJlZnJ0aSwgT2lkIHJlZgogCXJldHVybiBxdWFsczsKIH0KIAotLyoKLSAqIENoZWNrIGlm IHRoZSBnaXZlbiBwcm9wZXJ0eSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGxhYmVsLgot ICoKLSAqIEEgbGFiZWwgcHJvamVjdHMgdGhlIHNhbWUgc2V0IG9mIHByb3BlcnRpZXMgdGhyb3Vn aCBldmVyeSBlbGVtZW50IGl0IGlzCi0gKiBhc3NvY2lhdGVkIHdpdGguIEZpbmQgYW55IG9mIHRo ZSBlbGVtZW50cyBhbmQgcmV0dXJuIHRydWUgaWYgdGhhdCBlbGVtZW50IGlzCi0gKiBhc3NvY2lh dGVkIHdpdGggdGhlIGdpdmVuIHByb3BlcnR5LiBGYWxzZSBvdGhlcndpc2UuCi0gKi8KLXN0YXRp YyBib29sCi1pc19wcm9wZXJ0eV9hc3NvY2lhdGVkX3dpdGhfbGFiZWwoT2lkIGxhYmVsb2lkLCBP aWQgcHJvcG9pZCkKLXsKLQlSZWxhdGlvbglyZWw7Ci0JU3lzU2NhbkRlc2Mgc2NhbjsKLQlTY2Fu S2V5RGF0YSBrZXlbMV07Ci0JSGVhcFR1cGxlCXR1cDsKLQlib29sCQlhc3NvY2lhdGVkID0gZmFs c2U7Ci0KLQlyZWwgPSB0YWJsZV9vcGVuKFByb3BncmFwaEVsZW1lbnRMYWJlbFJlbGF0aW9uSWQs IFJvd1NoYXJlTG9jayk7Ci0JU2NhbktleUluaXQoJmtleVswXSwKLQkJCQlBbnVtX3BnX3Byb3Bn cmFwaF9lbGVtZW50X2xhYmVsX3BnZWxsYWJlbGlkLAotCQkJCUJURXF1YWxTdHJhdGVneU51bWJl ciwKLQkJCQlGX09JREVRLCBPYmplY3RJZEdldERhdHVtKGxhYmVsb2lkKSk7Ci0Jc2NhbiA9IHN5 c3RhYmxlX2JlZ2luc2NhbihyZWwsIFByb3BncmFwaEVsZW1lbnRMYWJlbExhYmVsSW5kZXhJZCwK LQkJCQkJCQkgIHRydWUsIE5VTEwsIDEsIGtleSk7Ci0KLQlpZiAoSGVhcFR1cGxlSXNWYWxpZCh0 dXAgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkKLQl7Ci0JCUZvcm1fcGdfcHJvcGdyYXBoX2Vs ZW1lbnRfbGFiZWwgZWxlX2xhYmVsID0gKEZvcm1fcGdfcHJvcGdyYXBoX2VsZW1lbnRfbGFiZWwp IEdFVFNUUlVDVCh0dXApOwotCi0JCWFzc29jaWF0ZWQgPSBTZWFyY2hTeXNDYWNoZUV4aXN0czIo UFJPUEdSQVBITEFCRUxQUk9QLAotCQkJCQkJCQkJCSAgIE9iamVjdElkR2V0RGF0dW0oZWxlX2xh YmVsLT5vaWQpLCBPYmplY3RJZEdldERhdHVtKHByb3BvaWQpKTsKLQl9Ci0Jc3lzdGFibGVfZW5k c2NhbihzY2FuKTsKLQl0YWJsZV9jbG9zZShyZWwsIFJvd1NoYXJlTG9jayk7Ci0KLQlyZXR1cm4g YXNzb2NpYXRlZDsKLX0KLQogLyoKICAqIElmIGdpdmVuIGVsZW1lbnQgaGFzIHRoZSBnaXZlbiBw cm9wZXJ0eSBhc3NvY2lhdGVkIHdpdGggaXQsIHRocm91Z2ggYW55IG9mCiAgKiB0aGUgYXNzb2Np YXRlZCBsYWJlbHMsIHJldHVybiB2YWx1ZSBleHByZXNzaW9uIG9mIHRoZSBwcm9wZXJ0eS4gT3Ro ZXJ3aXNlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKaW5kZXggN2JjMTI1ODllNDAuLmM0OTYy ZTE2NzdhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCkBAIC04MDUzLDcgKzgwNTMsNyBA QCBnZXRfcGF0aF9wYXR0ZXJuX2V4cHJfZGVmKExpc3QgKnBhdGhfcGF0dGVybl9leHByLCBkZXBh cnNlX2NvbnRleHQgKmNvbnRleHQpCiAJCQlzZXAgPSAiICI7CiAJCX0KIAotCQlpZiAoZ2VwLT5s YWJlbGV4cHIpCisJCWlmICghZ2VwLT5oYXNfZW1wdHlfbGFiZWxleHByKQogCQl7CiAJCQlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwgc2VwKTsKIAkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco YnVmLCAiSVMgIik7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKaW5kZXggZmZhZGQ2NjcxNjcuLjcxMTE4 ZjNlMzQ2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKKysrIGIv c3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCkBAIC0xMDQ1LDcgKzEwNDUsMTQgQEAgdHlw ZWRlZiBzdHJ1Y3QgR3JhcGhFbGVtZW50UGF0dGVybgogCU5vZGVUYWcJCXR5cGU7CiAJR3JhcGhF bGVtZW50UGF0dGVybktpbmQga2luZDsKIAljb25zdCBjaGFyICp2YXJpYWJsZTsKKworCS8qCisJ ICogQW4gZW1wdHkgbGFiZWwgZXhwcmVzc2lvbiBnZXRzIHJlcGxhY2VkIGJ5IGRpc2p1bmN0aW9u IG9mIGFsbCBsYWJlbHMKKwkgKiBkdXJpbmcgdHJhbnNmb3JtYXRpb24uIEJ1dCB3ZSBuZWVkIHRv IHJlbWVtYmVyIGlmIGl0IHdhcyBvcmlnaW5hbGx5CisJICogZW1wdHkgZm9yIHZhcmlvdXMgcHVy cG9zZXMuCisJICovCiAJTm9kZQkgICAqbGFiZWxleHByOworCWJvb2wJCWhhc19lbXB0eV9sYWJl bGV4cHI7CiAJTGlzdAkgICAqc3ViZXhwcjsKIAlOb2RlCSAgICp3aGVyZUNsYXVzZTsKIAlMaXN0 CSAgICpxdWFudGlmaWVyOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVz LmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaAppbmRleCBiNjdlNTZlNmM1YS4uMzZh MTAwNDAwOWYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oCkBAIC0yMTg2LDYgKzIxODYsOSBAQCB0eXBl ZGVmIHN0cnVjdCBHcmFwaExhYmVsUmVmCiB7CiAJTm9kZVRhZwkJdHlwZTsKIAlPaWQJCQlsYWJl bGlkOworCUxpc3QJICAgKnByb3BlcnRpZXMgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSwgcXVl cnlfanVtYmxlX2lnbm9yZSk7CisJTGlzdAkgICAqZWxlbWVudHMgcGdfbm9kZV9hdHRyKGVxdWFs X2lnbm9yZSwgcXVlcnlfanVtYmxlX2lnbm9yZSk7CisJTGlzdAkgICAqZWxlbV9sYWJlbHMgcGdf bm9kZV9hdHRyKGVxdWFsX2lnbm9yZSwgcXVlcnlfanVtYmxlX2lnbm9yZSk7CiAJUGFyc2VMb2MJ bG9jYXRpb247CiB9IEdyYXBoTGFiZWxSZWY7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bh cnNlci9wYXJzZV9ncmFwaHRhYmxlLmggYi9zcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2VfZ3JhcGh0 YWJsZS5oCmluZGV4IGU1MmUyMTUxMmFhLi5jMzJhYmZmZWNlMSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvcGFyc2VyL3BhcnNlX2dyYXBodGFibGUuaAorKysgYi9zcmMvaW5jbHVkZS9wYXJzZXIv cGFyc2VfZ3JhcGh0YWJsZS5oCkBAIC0xOCw3ICsxOCw3IEBACiAjaW5jbHVkZSAicGFyc2VyL3Bh cnNlX25vZGUuaCIKIAogZXh0ZXJuIE5vZGUgKnRyYW5zZm9ybUdyYXBoVGFibGVQcm9wZXJ0eVJl ZihQYXJzZVN0YXRlICpwc3RhdGUsIENvbHVtblJlZiAqY3JlZik7Ci0KK2V4dGVybiBOb2RlICp0 cmFuc2Zvcm1HcmFwaFRhYmxlQWxsUHJvcFJlZihQYXJzZVN0YXRlICpwc3RhdGUsIE5vZGUgKm5v ZGUsIGJvb2wgKmlzX2FsbF9wcm9wc19yZWYpOwogZXh0ZXJuIE5vZGUgKnRyYW5zZm9ybUdyYXBo UGF0dGVybihQYXJzZVN0YXRlICpwc3RhdGUsIEdyYXBoUGF0dGVybiAqZ3JhcGhfcGF0dGVybik7 CiAKICNlbmRpZgkJCQkJCQkvKiBQQVJTRV9HUkFQSFRBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3BhcnNlci9wYXJzZV9ub2RlLmggYi9zcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2Vf bm9kZS5oCmluZGV4IGZjMmNiZWIyMDgzLi5iZDI3MGE3NDJkNyAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvcGFyc2VyL3BhcnNlX25vZGUuaAorKysgYi9zcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2Vf bm9kZS5oCkBAIC0xMDUsNiArMTA1LDEyIEBAIHR5cGVkZWYgTm9kZSAqKCpDb2VyY2VQYXJhbUhv b2spIChQYXJzZVN0YXRlICpwc3RhdGUsIFBhcmFtICpwYXJhbSwKICAqIHBhdHRlcm5zIGFyZSB0 cmFuc2Zvcm1lZC4gVGhpcyBuYW1lc3BhY2UgaXMgdXNlZCB0byByZXNvbHZlIGxhYmVsIGFuZCBw cm9wZXJ0eQogICogcmVmZXJlbmNlcyBpbiB0aGUgR1JBUEhfVEFCTEUuCiAgKi8KK3R5cGVkZWYg c3RydWN0IEdyYXBoVGFibGVFbGVtZW50VmFyaWFibGUKK3sKKwljb25zdCBjaGFyICpuYW1lOwor CUxpc3QJICAgKnByb3BlcnRpZXM7Cit9IEdyYXBoVGFibGVFbGVtZW50VmFyaWFibGU7CisKIHR5 cGVkZWYgc3RydWN0IEdyYXBoVGFibGVQYXJzZVN0YXRlCiB7CiAJT2lkCQkJZ3JhcGhpZDsJCS8q IE9JRCBvZiB0aGUgZ3JhcGggYmVpbmcgcmVmZXJlbmNlZCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9ncmFwaF90YWJsZS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2dyYXBoX3RhYmxlLm91dAppbmRleCAyN2M4MWVjNmU0Mi4uZWYyYzBkMzgwM2MgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ3JhcGhfdGFibGUub3V0CisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ3JhcGhfdGFibGUub3V0CkBAIC0yMjQsNyArMjI0 LDcgQEAgU0VMRUNUICogRlJPTSBHUkFQSF9UQUJMRSAobXlzaG9wIE1BVENIIChjIElTIGN1c3Rv bWVycyktW0lTIGN1c3RvbWVyX29yZGVycyB8IGMKIAogLS0gcHJvcGVydHkgbm90IGFzc29jaWF0 ZWQgd2l0aCBsYWJlbHMgcXVlcmllZCByZXN1bHRzIGluIGVycm9yCiBTRUxFQ1QgKiBGUk9NIEdS QVBIX1RBQkxFIChteXNob3AgTUFUQ0ggKGMgSVMgY3VzdG9tZXJzKS1bSVMgY3VzdG9tZXJfb3Jk ZXJzIHwgY3VzdG9tZXJfd2lzaGxpc3RzIF0tPihsIElTIG9yZGVycyB8IHdpc2hsaXN0cyktWyBJ UyBsaXN0X2l0ZW1zXS0+KHAgSVMgcHJvZHVjdHMpIENPTFVNTlMgKGMubmFtZSBBUyBjdXN0b21l cl9uYW1lLCBwLm5hbWUgQVMgcHJvZHVjdF9uYW1lLCBsLmxpc3RfdHlwZSkpIE9SREVSIEJZIDEs IDIsIDM7Ci1FUlJPUjogIHByb3BlcnR5ICJsaXN0X3R5cGUiIGZvciBlbGVtZW50IHZhcmlhYmxl ICJsIiBub3QgZm91bmQKK0VSUk9SOiAgcHJvcGVydHkgImxpc3RfdHlwZSIgaXMgbm90IGF2YWls YWJsZSBmb3IgZWxlbWVudCB2YXJpYWJsZSAibCIKIC0tIHZlcnRleCB0byB2ZXJ0ZXggY29ubmVj dGlvbiBhYmJyZXZpYXRpb24KIFNFTEVDVCAqIEZST00gR1JBUEhfVEFCTEUgKG15c2hvcCBNQVRD SCAoYyBJUyBjdXN0b21lcnMpLT4obyBJUyBvcmRlcnMpIENPTFVNTlMgKGMubmFtZSwgby5vcmRl cmVkX3doZW4pKSBPUkRFUiBCWSAxOwogICAgbmFtZSAgICB8IG9yZGVyZWRfd2hlbiAKQEAgLTIz Myw2ICsyMzMsMTMgQEAgU0VMRUNUICogRlJPTSBHUkFQSF9UQUJMRSAobXlzaG9wIE1BVENIIChj IElTIGN1c3RvbWVycyktPihvIElTIG9yZGVycykgQ09MVU1OUwogIGN1c3RvbWVyMiB8IDAxLTAy LTIwMjQKICgyIHJvd3MpCiAKKy0tIGFsbCBwcm9wZXJ0aWVzIHJlZmVyZW5jZQorU0VMRUNUICog RlJPTSBHUkFQSF9UQUJMRSAobXlzaG9wIE1BVENIIChjIElTIGN1c3RvbWVycyBXSEVSRSBjLmFk ZHJlc3MgPSAnVVMnKS1bSVMgY3VzdG9tZXJfb3JkZXJzXS0+KG8gSVMgb3JkZXJzKSBDT0xVTU5T IChjLiopKTsKKyAgIG5hbWUgICAgfCBjdXN0b21lcl9pZCB8IGFkZHJlc3MgCistLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLQorIGN1c3RvbWVyMSB8ICAgICAgICAgICAxIHwgVVMK KygxIHJvdykKKwogLS0gbGF0ZXJhbCB0ZXN0CiBDUkVBVEUgVEFCTEUgeDEgKGEgaW50LCBiIHRl eHQpOwogSU5TRVJUIElOVE8geDEgVkFMVUVTICgxLCAnb25lJyksICgyLCAndHdvJyk7CkBAIC0z OTgsMjQgKzQwNSwxOSBAQCBTRUxFQ1QgKiBGUk9NIEdSQVBIX1RBQkxFIChnMSBNQVRDSCAodjEg SVMgdmwyKS0odjIpIENPTFVNTlMgKHYxLnZuYW1lIEFTIHYxbmFtZQogLS0gRXJyb3JzCiAtLSB2 bDEgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBwcm9wZXJ0eSB2cHJvcDIKIFNFTEVDVCBzcmMsIHNy Y192cHJvcDIsIGNvbm4sIGRlc3QgRlJPTSBHUkFQSF9UQUJMRSAoZzEgTUFUQ0ggKGEgSVMgdmwx KS1bYiBJUyBlbDFdLT4oYyBJUyB2bDIgfCB2bDMpIENPTFVNTlMgKGEudm5hbWUgQVMgc3JjLCBh LnZwcm9wMiBBUyBzcmNfdnByb3AyLCBiLmVuYW1lIEFTIGNvbm4sIGMudm5hbWUgQVMgZGVzdCkp OwotRVJST1I6ICBwcm9wZXJ0eSAidnByb3AyIiBmb3IgZWxlbWVudCB2YXJpYWJsZSAiYSIgbm90 IGZvdW5kCitFUlJPUjogIHByb3BlcnR5ICJ2cHJvcDIiIGlzIG5vdCBhdmFpbGFibGUgZm9yIGVs ZW1lbnQgdmFyaWFibGUgImEiCiAtLSBwcm9wZXJ0eSBlbmFtZSBpcyBhc3NvY2lhdGVkIHdpdGgg ZWRnZSBsYWJlbHMgYnV0IG5vdCB3aXRoIGEgdmVydGV4IGxhYmVsCiBTRUxFQ1QgKiBGUk9NIEdS QVBIX1RBQkxFIChnMSBNQVRDSCAoc3JjKS1bY29ubl0tPihkZXN0KSBDT0xVTU5TIChzcmMudm5h bWUgQVMgc3ZuYW1lLCBzcmMuZW5hbWUgQVMgc2VuYW1lKSk7Ci1FUlJPUjogIHByb3BlcnR5ICJl bmFtZSIgZm9yIGVsZW1lbnQgdmFyaWFibGUgInNyYyIgbm90IGZvdW5kCitFUlJPUjogIHByb3Bl cnR5ICJlbmFtZSIgaXMgbm90IGF2YWlsYWJsZSBmb3IgZWxlbWVudCB2YXJpYWJsZSAic3JjIgog LS0gdm5hbWUgaXMgYXNzb2NpYXRlZCB2ZXJ0ZXggbGFiZWxzIGJ1dCBub3Qgd2l0aCBhbiBlZGdl IGxhYmVsCiBTRUxFQ1QgKiBGUk9NIEdSQVBIX1RBQkxFIChnMSBNQVRDSCAoc3JjKS1bY29ubl0t PihkZXN0KSBDT0xVTU5TIChjb25uLnZuYW1lIEFTIGN2bmFtZSwgY29ubi5lbmFtZSBBUyBjZW5h bWUpKTsKLUVSUk9SOiAgcHJvcGVydHkgInZuYW1lIiBmb3IgZWxlbWVudCB2YXJpYWJsZSAiY29u biIgbm90IGZvdW5kCitFUlJPUjogIHByb3BlcnR5ICJ2bmFtZSIgaXMgbm90IGF2YWlsYWJsZSBm b3IgZWxlbWVudCB2YXJpYWJsZSAiY29ubiIKIC0tIGVsMSBpcyBhc3NvY2lhdGVkIHdpdGggb25s eSBlZGdlcywgYW5kIGNhbm5vdCBxdWFsaWZ5IGEgdmVydGV4CiBTRUxFQ1QgKiBGUk9NIEdSQVBI X1RBQkxFIChnMSBNQVRDSCAoc3JjIElTIGVsMSktW2Nvbm5dLT4oZGVzdCkgQ09MVU1OUyAoY29u bi5lbmFtZSBBUyBjZW5hbWUpKTsKIEVSUk9SOiAgbm8gcHJvcGVydHkgZ3JhcGggZWxlbWVudCBv ZiB0eXBlICJ2ZXJ0ZXgiIGhhcyBsYWJlbCAiZWwxIiBhc3NvY2lhdGVkIHdpdGggaXQgaW4gcHJv cGVydHkgZ3JhcGggImcxIgogU0VMRUNUICogRlJPTSBHUkFQSF9UQUJMRSAoZzEgTUFUQ0ggKHNy YyBJUyBlbDEgfCB2bDEpLVtjb25uXS0+KGRlc3QpIENPTFVNTlMgKGNvbm4uZW5hbWUgQVMgY2Vu YW1lKSk7CiBFUlJPUjogIG5vIHByb3BlcnR5IGdyYXBoIGVsZW1lbnQgb2YgdHlwZSAidmVydGV4 IiBoYXMgbGFiZWwgImVsMSIgYXNzb2NpYXRlZCB3aXRoIGl0IGluIHByb3BlcnR5IGdyYXBoICJn MSIKLS0tIHN0YXIgaW4gQ09MVU1OcyBpcyBzcGVjaWZpZWQgYnV0IG5vdCBzdXBwb3J0ZWQKLVNF TEVDVCAqIEZST00gR1JBUEhfVEFCTEUgKG15c2hvcCBNQVRDSCAoYyBJUyBjdXN0b21lcnMgV0hF UkUgYy5hZGRyZXNzID0gJ1VTJyktW0lTIGN1c3RvbWVyX29yZGVyc10tPihvIElTIG9yZGVycykg Q09MVU1OUyAoYy4qKSk7Ci1FUlJPUjogICIqIiBpcyBub3Qgc3VwcG9ydGVkIGhlcmUKLUxJTkUg MTogLi4uID0gJ1VTJyktW0lTIGN1c3RvbWVyX29yZGVyc10tPihvIElTIG9yZGVycykgQ09MVU1O UyAoYy4qKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF4KLS0tIHN0YXIgYW55d2hlcmUgZWxzZSBpcyBub3QgYWxsb3dl ZCBhcyBhIHByb3BlcnR5IHJlZmVyZW5jZQorLS0gYWxsIHByb3BlcnRpZXMgcmVmZXJlbmNlIGlz IG5vdCBhbGxvd2VkIG91dHNpZGUgQ09MVU1OcwogU0VMRUNUICogRlJPTSBHUkFQSF9UQUJMRSAo bXlzaG9wIE1BVENIIChjIElTIGN1c3RvbWVycyBXSEVSRSBjLiogSVMgTk9UIE5VTEwpLVtJUyBj dXN0b21lcl9vcmRlcnNdLT4obyBJUyBvcmRlcnMpIENPTFVNTlMgKGMubmFtZSkpOwogRVJST1I6 ICAiKiIgbm90IGFsbG93ZWQgaGVyZQogTElORSAxOiAuLi5NIEdSQVBIX1RBQkxFIChteXNob3Ag TUFUQ0ggKGMgSVMgY3VzdG9tZXJzIFdIRVJFIGMuKiBJUyBOT1QuLi4KQEAgLTQ0Myw2ICs0NDUs MjIgQEAgU0VMRUNUICogRlJPTSBHUkFQSF9UQUJMRSAoZzEgTUFUQ0ggKHNyYyBJUyB2bDEgfCB2 bDIgfCB2bDMpLVtjb25uXS0+KGRlc3QpIENPTFUKICB2MjIgICAgfCBlMjMxICAgfCB2MzIKICg1 IHJvd3MpCiAKKy0tIGFsbCBwcm9wZXJ0aWVzIHJlZmVyZW5jZSB3aXRoIGxhYmVsIGRpc2p1bmN0 aW9uCitTRUxFQ1QgKiBGUk9NIEdSQVBIX1RBQkxFIChnMSBNQVRDSCAoc3JjIElTIHZsMSB8IHZs MiBXSEVSRSBzcmMudnByb3AxID0gMTAgT1Igc3JjLnZwcm9wMSA9IDEwMjApIENPTFVNTlMgKHNy Yy4qKSk7Cisgdm5hbWUgfCB2cHJvcDEgfCB2cHJvcDIgfCAgbHByb3AxICAKKy0tLS0tLS0rLS0t LS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLQorIHYxMSAgIHwgICAgIDEwIHwgICAgICAgIHwgCisg djIyICAgfCAgIDEwMjAgfCAgIDEyMDAgfCB2bDJfcHJvcAorKDIgcm93cykKKworU0VMRUNUICog RlJPTSBHUkFQSF9UQUJMRSAoZzEgTUFUQ0ggKHNyYyBXSEVSRSBzcmMudnByb3AxID0gMTAgT1Ig c3JjLnZwcm9wMSA9IDEwMjAgT1Igc3JjLnZwcm9wMSA9IDIwMzApIENPTFVNTlMgKHNyYy4qKSk7 CisgZWxuYW1lIHwgdm5hbWUgfCB2cHJvcDEgfCB2cHJvcDIgfCAgbHByb3AxICAKKy0tLS0tLS0t Ky0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLQorIHYxMSAgICB8IHYxMSAgIHwg ICAgIDEwIHwgICAgICAgIHwgCisgdjIyICAgIHwgdjIyICAgfCAgIDEwMjAgfCAgIDEyMDAgfCB2 bDJfcHJvcAorIHYzMyAgICB8IHYzMyAgIHwgICAyMDMwIHwgICAgICAgIHwgdmwzX3Byb3AKKygz IHJvd3MpCisKIC0tIGdyYXBoJ2ljYWwgcXVlcnk6IGZpbmQgYSB2ZXJ0ZXggd2hpY2ggaXMgbm90 IGNvbm5lY3RlZCB0byBhbnkgb3RoZXIgdmVydGV4IGFzIGEgc291cmNlIG9yIGEgZGVzdGluYXRp b24uCiBXSVRIIGFsbF9jb25uZWN0ZWRfdmVydGljZXMgQVMgKFNFTEVDVCBzdm4sIGR2biBGUk9N IEdSQVBIX1RBQkxFIChnMSBNQVRDSCAoc3JjKS1bY29ubl0tPihkZXN0KSBDT0xVTU5TIChzcmMu dm5hbWUgQVMgc3ZuLCBkZXN0LnZuYW1lIEFTIGR2bikpKSwKICAgICBhbGxfdmVydGljZXMgQVMg KFNFTEVDVCB2biBGUk9NIEdSQVBIX1RBQkxFIChnMSBNQVRDSCAodmVydGV4KSBDT0xVTU5TICh2 ZXJ0ZXgudm5hbWUgQVMgdm4pKSkKQEAgLTU0OCw3ICs1NjYsNyBAQCBTRUxFQ1QgKiBGUk9NIEdS QVBIX1RBQkxFIChnMSBNQVRDSCAoYSBXSEVSRSBhLnZwcm9wMSBiZXR3ZWVuIDIwIGFuZCAyMDAw KS0+KGIgVwogKDQgcm93cykKIAogLS0gbGFiZWxzIGFuZCBlbGVtZW50cyBraW5kcyBvZiBlbGVt ZW50IHBhdHRlcm5zIHdpdGggdGhlIHNhbWUgdmFyaWFibGUgbmFtZQotU0VMRUNUICogRlJPTSBH UkFQSF9UQUJMRSAoZzEgTUFUQ0ggKGEgSVMgbDEpLVthIElTIGwxXS0+KGIgSVMgbDEpIENPTFVN TlMgKGEuZW5hbWUgQVMgYWVuYW1lLCBiLmVuYW1lIEFTIGJlbmFtZSkpIE9SREVSIEJZIDEsIDI7 IC0tIGVycm9yCitTRUxFQ1QgKiBGUk9NIEdSQVBIX1RBQkxFIChnMSBNQVRDSCAoYSBJUyBsMSkt W2EgSVMgbDFdLT4oYiBJUyBsMSkgQ09MVU1OUyAoYS5lbG5hbWUgQVMgYWVuYW1lLCBiLmVsbmFt ZSBBUyBiZW5hbWUpKSBPUkRFUiBCWSAxLCAyOyAtLSBlcnJvcgogRVJST1I6ICBlbGVtZW50IHBh dHRlcm5zIHdpdGggc2FtZSB2YXJpYWJsZSBuYW1lICJhIiBidXQgZGlmZmVyZW50IGVsZW1lbnQg cGF0dGVybiB0eXBlcwogU0VMRUNUICogRlJPTSBHUkFQSF9UQUJMRSAoZzEgTUFUQ0ggKGEgSVMg dmwxKS0+KGIpLT4oYSBJUyB2bDIpIFdIRVJFIGEudm5hbWUgPD4gYi52bmFtZSBDT0xVTU5TIChh LnZuYW1lIEFTIHNlbGYsIGIudm5hbWUgQVMgdGhyb3VnaCwgYS52cHJvcDEgQVMgc2VsZl9wMSwg Yi52cHJvcDEgQVMgdGhyb3VnaF9wMSkpIE9SREVSIEJZIHNlbGYsIHRocm91Z2g7ICAtLSBlcnJv cgogRVJST1I6ICBlbGVtZW50IHBhdHRlcm5zIHdpdGggc2FtZSB2YXJpYWJsZSBuYW1lICJhIiBi dXQgZGlmZmVyZW50IGxhYmVsIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkCkBAIC03Nzcs NyArNzk1LDcgQEAgRVhFQ1VURSBsb29wc3RtdDsKIAogQUxURVIgUFJPUEVSVFkgR1JBUEggZzEg QUxURVIgRURHRSBUQUJMRSBlM18zIEFMVEVSIExBQkVMIGwyIERST1AgUFJPUEVSVElFUyAoZWxu YW1lKTsKIEVYRUNVVEUgbG9vcHN0bXQ7IC0tIGVycm9yCi1FUlJPUjogIHByb3BlcnR5ICJlbG5h bWUiIGZvciBlbGVtZW50IHZhcmlhYmxlICJlIiBub3QgZm91bmQKK0VSUk9SOiAgcHJvcGVydHkg ImVsbmFtZSIgaXMgbm90IGF2YWlsYWJsZSBmb3IgZWxlbWVudCB2YXJpYWJsZSAiZSIKIEFMVEVS IFBST1BFUlRZIEdSQVBIIGcxIEFMVEVSIEVER0UgVEFCTEUgZTNfMyBBTFRFUiBMQUJFTCBsMiBB REQgUFJPUEVSVElFUyAoKGVuYW1lIHx8ICdfbmV3Jyk6OnZhcmNoYXIoMTApIEFTIGVsbmFtZSk7 CiBFWEVDVVRFIGxvb3BzdG10OwogICAgbG9vcCAgIApAQCAtODgzLDYgKzkwMSwxMiBAQCBTRUxF Q1QgcGdfZ2V0X3ZpZXdkZWYoJ2N1c3RvbWVyc191cyc6OnJlZ2NsYXNzKTsKICAgIE9SREVSIEJZ IGN1c3RvbWVyX25hbWUsIHByb2R1Y3RfbmFtZTsKICgxIHJvdykKIAorLS0gcHJvcGVydHkgZ3Jh cGggd2l0aCBubyBwcm9wZXJ0aWVzIGFuZCBlbXB0eSBhbGwgcHJvcGVydGllcyByZWZlcmVuY2UK K0NSRUFURSBQUk9QRVJUWSBHUkFQSCBnbm9wcm9wIFZFUlRFWCBUQUJMRVMgKHYxIE5PIFBST1BF UlRJRVMpOworU0VMRUNUICogRlJPTSBHUkFQSF9UQUJMRSAoZ25vcHJvcCBNQVRDSCAoYSBJUyB2 MSkgQ09MVU1OUyAoYS4qKSk7CistLQorKDMgcm93cykKKwogLS0gdGVzdCB2aWV3L2dyYXBoIG5l c3RpbmcKIENSRUFURSBWSUVXIGN1c3RvbWVyc192aWV3IEFTIFNFTEVDVCBjdXN0b21lcl9pZCwg J3JlZGFjdGVkJyB8fCBjdXN0b21lcl9pZCBBUyBuYW1lX3JlZGFjdGVkLCBhZGRyZXNzIEZST00g Y3VzdG9tZXJzOwogU0VMRUNUICogRlJPTSBjdXN0b21lcnM7CmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL3NxbC9ncmFwaF90YWJsZS5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9ncmFw aF90YWJsZS5zcWwKaW5kZXggNmQyYjA4Yjk5N2IuLmI4YWE5NWI3MjlhIDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL3NxbC9ncmFwaF90YWJsZS5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvZ3JhcGhfdGFibGUuc3FsCkBAIC0xNDksNiArMTQ5LDggQEAgU0VMRUNUICogRlJPTSBH UkFQSF9UQUJMRSAobXlzaG9wIE1BVENIIChjIElTIGN1c3RvbWVycyktW0lTIGN1c3RvbWVyX29y ZGVycyB8IGMKIFNFTEVDVCAqIEZST00gR1JBUEhfVEFCTEUgKG15c2hvcCBNQVRDSCAoYyBJUyBj dXN0b21lcnMpLVtJUyBjdXN0b21lcl9vcmRlcnMgfCBjdXN0b21lcl93aXNobGlzdHMgXS0+KGwg SVMgb3JkZXJzIHwgd2lzaGxpc3RzKS1bIElTIGxpc3RfaXRlbXNdLT4ocCBJUyBwcm9kdWN0cykg Q09MVU1OUyAoYy5uYW1lIEFTIGN1c3RvbWVyX25hbWUsIHAubmFtZSBBUyBwcm9kdWN0X25hbWUs IGwubGlzdF90eXBlKSkgT1JERVIgQlkgMSwgMiwgMzsKIC0tIHZlcnRleCB0byB2ZXJ0ZXggY29u bmVjdGlvbiBhYmJyZXZpYXRpb24KIFNFTEVDVCAqIEZST00gR1JBUEhfVEFCTEUgKG15c2hvcCBN QVRDSCAoYyBJUyBjdXN0b21lcnMpLT4obyBJUyBvcmRlcnMpIENPTFVNTlMgKGMubmFtZSwgby5v cmRlcmVkX3doZW4pKSBPUkRFUiBCWSAxOworLS0gYWxsIHByb3BlcnRpZXMgcmVmZXJlbmNlCitT RUxFQ1QgKiBGUk9NIEdSQVBIX1RBQkxFIChteXNob3AgTUFUQ0ggKGMgSVMgY3VzdG9tZXJzIFdI RVJFIGMuYWRkcmVzcyA9ICdVUycpLVtJUyBjdXN0b21lcl9vcmRlcnNdLT4obyBJUyBvcmRlcnMp IENPTFVNTlMgKGMuKikpOwogCiAtLSBsYXRlcmFsIHRlc3QKIENSRUFURSBUQUJMRSB4MSAoYSBp bnQsIGIgdGV4dCk7CkBAIC0yODUsOSArMjg3LDcgQEAgU0VMRUNUICogRlJPTSBHUkFQSF9UQUJM RSAoZzEgTUFUQ0ggKHNyYyktW2Nvbm5dLT4oZGVzdCkgQ09MVU1OUyAoY29ubi52bmFtZSBBUwog LS0gZWwxIGlzIGFzc29jaWF0ZWQgd2l0aCBvbmx5IGVkZ2VzLCBhbmQgY2Fubm90IHF1YWxpZnkg YSB2ZXJ0ZXgKIFNFTEVDVCAqIEZST00gR1JBUEhfVEFCTEUgKGcxIE1BVENIIChzcmMgSVMgZWwx KS1bY29ubl0tPihkZXN0KSBDT0xVTU5TIChjb25uLmVuYW1lIEFTIGNlbmFtZSkpOwogU0VMRUNU ICogRlJPTSBHUkFQSF9UQUJMRSAoZzEgTUFUQ0ggKHNyYyBJUyBlbDEgfCB2bDEpLVtjb25uXS0+ KGRlc3QpIENPTFVNTlMgKGNvbm4uZW5hbWUgQVMgY2VuYW1lKSk7Ci0tLSBzdGFyIGluIENPTFVN TnMgaXMgc3BlY2lmaWVkIGJ1dCBub3Qgc3VwcG9ydGVkCi1TRUxFQ1QgKiBGUk9NIEdSQVBIX1RB QkxFIChteXNob3AgTUFUQ0ggKGMgSVMgY3VzdG9tZXJzIFdIRVJFIGMuYWRkcmVzcyA9ICdVUycp LVtJUyBjdXN0b21lcl9vcmRlcnNdLT4obyBJUyBvcmRlcnMpIENPTFVNTlMgKGMuKikpOwotLS0g c3RhciBhbnl3aGVyZSBlbHNlIGlzIG5vdCBhbGxvd2VkIGFzIGEgcHJvcGVydHkgcmVmZXJlbmNl CistLSBhbGwgcHJvcGVydGllcyByZWZlcmVuY2UgaXMgbm90IGFsbG93ZWQgb3V0c2lkZSBDT0xV TU5zCiBTRUxFQ1QgKiBGUk9NIEdSQVBIX1RBQkxFIChteXNob3AgTUFUQ0ggKGMgSVMgY3VzdG9t ZXJzIFdIRVJFIGMuKiBJUyBOT1QgTlVMTCktW0lTIGN1c3RvbWVyX29yZGVyc10tPihvIElTIG9y ZGVycykgQ09MVU1OUyAoYy5uYW1lKSk7CiAKIC0tIHNlbGVjdCBhbGwgdGhlIHByb3BlcnRpZXMg YWNyb3NzIGFsbCB0aGUgbGFiZWxzIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIHR5cGUKQEAgLTI5 NSw2ICsyOTUsOSBAQCBTRUxFQ1QgKiBGUk9NIEdSQVBIX1RBQkxFIChteXNob3AgTUFUQ0ggKGMg SVMgY3VzdG9tZXJzIFdIRVJFIGMuKiBJUyBOT1QgTlVMTCktWwogU0VMRUNUICogRlJPTSBHUkFQ SF9UQUJMRSAoZzEgTUFUQ0ggKHNyYyktW2Nvbm5dLT4oZGVzdCkgQ09MVU1OUyAoc3JjLnZuYW1l IEFTIHN2bmFtZSwgY29ubi5lbmFtZSBBUyBjZW5hbWUsIGRlc3Qudm5hbWUgQVMgZHZuYW1lLCBz cmMudnByb3AxIEFTIHN2cDEsIHNyYy52cHJvcDIgQVMgc3ZwMiwgc3JjLmxwcm9wMSBBUyBzbHAx LCBkZXN0LnZwcm9wMSBBUyBkdnAxLCBkZXN0LnZwcm9wMiBBUyBkdnAyLCBkZXN0Lmxwcm9wMSBB UyBkbHAxLCBjb25uLmVwcm9wMSBBUyBjZXAxLCBjb25uLmxwcm9wMiBBUyBjbHAyKSk7CiAtLSB0 aHJlZSBsYWJlbCBkaXNqdW5jdGlvbgogU0VMRUNUICogRlJPTSBHUkFQSF9UQUJMRSAoZzEgTUFU Q0ggKHNyYyBJUyB2bDEgfCB2bDIgfCB2bDMpLVtjb25uXS0+KGRlc3QpIENPTFVNTlMgKHNyYy52 bmFtZSBBUyBzdm5hbWUsIGNvbm4uZW5hbWUgQVMgY2VuYW1lLCBkZXN0LnZuYW1lIEFTIGR2bmFt ZSkpOworLS0gYWxsIHByb3BlcnRpZXMgcmVmZXJlbmNlIHdpdGggbGFiZWwgZGlzanVuY3Rpb24K K1NFTEVDVCAqIEZST00gR1JBUEhfVEFCTEUgKGcxIE1BVENIIChzcmMgSVMgdmwxIHwgdmwyIFdI RVJFIHNyYy52cHJvcDEgPSAxMCBPUiBzcmMudnByb3AxID0gMTAyMCkgQ09MVU1OUyAoc3JjLiop KTsKK1NFTEVDVCAqIEZST00gR1JBUEhfVEFCTEUgKGcxIE1BVENIIChzcmMgV0hFUkUgc3JjLnZw cm9wMSA9IDEwIE9SIHNyYy52cHJvcDEgPSAxMDIwIE9SIHNyYy52cHJvcDEgPSAyMDMwKSBDT0xV TU5TIChzcmMuKikpOwogLS0gZ3JhcGgnaWNhbCBxdWVyeTogZmluZCBhIHZlcnRleCB3aGljaCBp cyBub3QgY29ubmVjdGVkIHRvIGFueSBvdGhlciB2ZXJ0ZXggYXMgYSBzb3VyY2Ugb3IgYSBkZXN0 aW5hdGlvbi4KIFdJVEggYWxsX2Nvbm5lY3RlZF92ZXJ0aWNlcyBBUyAoU0VMRUNUIHN2biwgZHZu IEZST00gR1JBUEhfVEFCTEUgKGcxIE1BVENIIChzcmMpLVtjb25uXS0+KGRlc3QpIENPTFVNTlMg KHNyYy52bmFtZSBBUyBzdm4sIGRlc3Qudm5hbWUgQVMgZHZuKSkpLAogICAgIGFsbF92ZXJ0aWNl cyBBUyAoU0VMRUNUIHZuIEZST00gR1JBUEhfVEFCTEUgKGcxIE1BVENIICh2ZXJ0ZXgpIENPTFVN TlMgKHZlcnRleC52bmFtZSBBUyB2bikpKQpAQCAtMzQ3LDcgKzM1MCw3IEBAIFNFTEVDVCAqIEZS T00gR1JBUEhfVEFCTEUgKGcxIE1BVENIIChhIFdIRVJFIGEudnByb3AxIDwgMjAwMCktPihiIFdI RVJFIGIudnByb3AxCiBTRUxFQ1QgKiBGUk9NIEdSQVBIX1RBQkxFIChnMSBNQVRDSCAoYSktPihi IFdIRVJFIGIudnByb3AxID4gMjApLT4oYSBXSEVSRSBhLnZwcm9wMSBiZXR3ZWVuIDIwIGFuZCAy MDAwKSBDT0xVTU5TIChhLnZuYW1lIEFTIHNlbGYsIGIudm5hbWUgQVMgdGhyb3VnaCwgYS52cHJv cDEgQVMgc2VsZl9wMSwgYi52cHJvcDEgQVMgdGhyb3VnaF9wMSkpIE9SREVSIEJZIHNlbGYsIHRo cm91Z2g7CiBTRUxFQ1QgKiBGUk9NIEdSQVBIX1RBQkxFIChnMSBNQVRDSCAoYSBXSEVSRSBhLnZw cm9wMSBiZXR3ZWVuIDIwIGFuZCAyMDAwKS0+KGIgV0hFUkUgYi52cHJvcDEgPiAyMCktPihhIFdI RVJFIGEudnByb3AxIGJldHdlZW4gMjAgYW5kIDIwMDApIENPTFVNTlMgKGEudm5hbWUgQVMgc2Vs ZiwgYi52bmFtZSBBUyB0aHJvdWdoLCBhLnZwcm9wMSBBUyBzZWxmX3AxLCBiLnZwcm9wMSBBUyB0 aHJvdWdoX3AxKSkgT1JERVIgQlkgc2VsZiwgdGhyb3VnaDsKIC0tIGxhYmVscyBhbmQgZWxlbWVu dHMga2luZHMgb2YgZWxlbWVudCBwYXR0ZXJucyB3aXRoIHRoZSBzYW1lIHZhcmlhYmxlIG5hbWUK LVNFTEVDVCAqIEZST00gR1JBUEhfVEFCTEUgKGcxIE1BVENIIChhIElTIGwxKS1bYSBJUyBsMV0t PihiIElTIGwxKSBDT0xVTU5TIChhLmVuYW1lIEFTIGFlbmFtZSwgYi5lbmFtZSBBUyBiZW5hbWUp KSBPUkRFUiBCWSAxLCAyOyAtLSBlcnJvcgorU0VMRUNUICogRlJPTSBHUkFQSF9UQUJMRSAoZzEg TUFUQ0ggKGEgSVMgbDEpLVthIElTIGwxXS0+KGIgSVMgbDEpIENPTFVNTlMgKGEuZWxuYW1lIEFT IGFlbmFtZSwgYi5lbG5hbWUgQVMgYmVuYW1lKSkgT1JERVIgQlkgMSwgMjsgLS0gZXJyb3IKIFNF TEVDVCAqIEZST00gR1JBUEhfVEFCTEUgKGcxIE1BVENIIChhIElTIHZsMSktPihiKS0+KGEgSVMg dmwyKSBXSEVSRSBhLnZuYW1lIDw+IGIudm5hbWUgQ09MVU1OUyAoYS52bmFtZSBBUyBzZWxmLCBi LnZuYW1lIEFTIHRocm91Z2gsIGEudnByb3AxIEFTIHNlbGZfcDEsIGIudnByb3AxIEFTIHRocm91 Z2hfcDEpKSBPUkRFUiBCWSBzZWxmLCB0aHJvdWdoOyAgLS0gZXJyb3IKIFNFTEVDVCAqIEZST00g R1JBUEhfVEFCTEUgKGcxIE1BVENIIChhIElTIHZsMSktPihiKS0+KGEpIENPTFVNTlMgKGEudm5h bWUgQVMgc2VsZiwgYi52bmFtZSBBUyB0aHJvdWdoLCBhLnZwcm9wMSBBUyBzZWxmX3AxLCBiLnZw cm9wMSBBUyB0aHJvdWdoX3AxKSkgT1JERVIgQlkgc2VsZiwgdGhyb3VnaDsKIFNFTEVDVCAqIEZS T00gR1JBUEhfVEFCTEUgKGcxIE1BVENIIChhKS0+KGIpLT4oYSBJUyB2bDEpIENPTFVNTlMgKGEu dm5hbWUgQVMgc2VsZiwgYi52bmFtZSBBUyB0aHJvdWdoLCBhLnZwcm9wMSBBUyBzZWxmX3AxLCBi LnZwcm9wMSBBUyB0aHJvdWdoX3AxKSkgT1JERVIgQlkgc2VsZiwgdGhyb3VnaDsKQEAgLTUxMCw2 ICs1MTMsMTAgQEAgU0VMRUNUICogRlJPTSBHUkFQSF9UQUJMRSAoZzQgTUFUQ0ggKHMgV0hFUkUg cy5pZCA9IDMpLVtlXS0oZCkgQ09MVU1OUyAocy52YWwsIGUKIENSRUFURSBWSUVXIGN1c3RvbWVy c191cyBBUyBTRUxFQ1QgKiBGUk9NIEdSQVBIX1RBQkxFIChteXNob3AgTUFUQ0ggKGMgSVMgY3Vz dG9tZXJzIFdIRVJFIGMuYWRkcmVzcyA9ICdVUycpLVtJUyBjdXN0b21lcl9vcmRlcnMgfCBjdXN0 b21lcl93aXNobGlzdHMgXS0+KGwgSVMgb3JkZXJzIHwgd2lzaGxpc3RzKS1bIElTIGxpc3RfaXRl bXNdLT4ocCBJUyBwcm9kdWN0cykgQ09MVU1OUyAoYy5uYW1lIEFTIGN1c3RvbWVyX25hbWUsIHAu bmFtZSBBUyBwcm9kdWN0X25hbWUpKSBPUkRFUiBCWSBjdXN0b21lcl9uYW1lLCBwcm9kdWN0X25h bWU7CiBTRUxFQ1QgcGdfZ2V0X3ZpZXdkZWYoJ2N1c3RvbWVyc191cyc6OnJlZ2NsYXNzKTsKIAor LS0gcHJvcGVydHkgZ3JhcGggd2l0aCBubyBwcm9wZXJ0aWVzIGFuZCBlbXB0eSBhbGwgcHJvcGVy dGllcyByZWZlcmVuY2UKK0NSRUFURSBQUk9QRVJUWSBHUkFQSCBnbm9wcm9wIFZFUlRFWCBUQUJM RVMgKHYxIE5PIFBST1BFUlRJRVMpOworU0VMRUNUICogRlJPTSBHUkFQSF9UQUJMRSAoZ25vcHJv cCBNQVRDSCAoYSBJUyB2MSkgQ09MVU1OUyAoYS4qKSk7CisKIC0tIHRlc3Qgdmlldy9ncmFwaCBu ZXN0aW5nCiAKIENSRUFURSBWSUVXIGN1c3RvbWVyc192aWV3IEFTIFNFTEVDVCBjdXN0b21lcl9p ZCwgJ3JlZGFjdGVkJyB8fCBjdXN0b21lcl9pZCBBUyBuYW1lX3JlZGFjdGVkLCBhZGRyZXNzIEZS T00gY3VzdG9tZXJzOwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA1MmY4NjAzYTdiZS4u YmU2OTgzNDcxOWEgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xMTM5LDYgKzExMzks NyBAQCBHcmFwaEVsZW1lbnRQYXR0ZXJuS2luZAogR3JhcGhMYWJlbFJlZgogR3JhcGhQYXR0ZXJu CiBHcmFwaFByb3BlcnR5UmVmCitHcmFwaFRhYmxlRWxlbWVudFZhcmlhYmxlCiBHcmFwaFRhYmxl UGFyc2VTdGF0ZQogR3JvdXAKIEdyb3VwQnlPcmRlcmluZwoKYmFzZS1jb21taXQ6IDkwNWU0NDE1 MmExZDQ5YjkwY2I4ZDgwMGRjYWFiYTc5ODEyODhhZTIKLS0gCjIuMzQuMQoK --000000000000377570064d49853e--