Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1khuVA-0001QF-SJ for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Nov 2020 13:06:29 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1khuV8-0003uy-O2 for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Nov 2020 13:06:26 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1khuV7-0003uo-Mp for pgsql-hackers@lists.postgresql.org; Wed, 25 Nov 2020 13:06:26 +0000 Received: from [64.147.123.34] (helo=wforward4-smtp.messagingengine.com) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1khuV0-0006Zb-VW for pgsql-hackers@postgresql.org; Wed, 25 Nov 2020 13:06:24 +0000 Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailforward.west.internal (Postfix) with ESMTP id 29B34D60; Wed, 25 Nov 2020 08:06:06 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute1.internal (MEProxy); Wed, 25 Nov 2020 08:06:06 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; bh=7ZlysK nPSlKrykYJq2YL+H8bz6Ah+NmOu25mVDq2WfA=; b=WHWeCP9dnImuVKTIFd45KE v11Rl5QlThFhefVZ4yV3rsONr73LHJ4P+ryYnEqL588F41XfY0fae95lpPFhCF8E 8LWMKqx2gKkreRXvtuURj5IqgR1APKlJGCS/RLAoRzXQDJ6Ir1RgANbMndqQeyRk akzfXeLW75cEGAdFgl1ubigMC+SLklubl3GI0bglePqE5413Ugs0bm96NZWV/uq8 g0/Q3TRmxmIImYDBTpUWTEN2TC3hyn7EvdKFjIpbCykyEjZZ5eMkVFgQNN5QwcTQ +TZGOiJwQRdlLxVzAS5XDh72wSnOd0mD9//GomASa4UsIXK9qHl/PBF8Psr263iA == X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedujedrudehtddggeelucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepuffvfhfhohfkffgfgggjtgesmhdtreertdefjeenucfhrhhomheprfgvthgv rhcugfhishgvnhhtrhgruhhtuceophgvthgvrhdrvghishgvnhhtrhgruhhtsedvnhguqh hurggurhgrnhhtrdgtohhmqeenucggtffrrghtthgvrhhnpedugfeuveeileeugfegledu gffhuefhhfejheefgfeludeftdeivedugfegvefgjeenucffohhmrghinhepvdhnughquh grughrrghnthdrtghomhenucfkphepkeejrddujeejrdejhedrleegnecuvehluhhsthgv rhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepphgvthgvrhdrvghishgvnh htrhgruhhtsedvnhguqhhurggurhgrnhhtrdgtohhm X-ME-Proxy: Received: from april.pezone.net (p57b14b5e.dip0.t-ipconnect.de [87.177.75.94]) by mail.messagingengine.com (Postfix) with ESMTPA id 6868D3064AA7; Wed, 25 Nov 2020 08:06:04 -0500 (EST) Subject: Re: SEARCH and CYCLE clauses To: Pavel Stehule References: <52beaf44-ccc3-0ba1-45c7-74aa251cd6ab@2ndquadrant.com> Cc: pgsql-hackers From: Peter Eisentraut Organization: 2ndQuadrant Message-ID: Date: Wed, 25 Nov 2020 14:06:03 +0100 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------59265C7BE2B49AABAA0CA74C" Content-Language: en-US X-Host-Lookup-Failed: Reverse DNS lookup failed for 64.147.123.34 (deferred) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This is a multi-part message in MIME format. --------------59265C7BE2B49AABAA0CA74C Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit On 2020-10-10 07:25, Pavel Stehule wrote: > This patch is based on transformation CYCLE and SEARCH clauses to > specific expressions - it is in agreement with ANSI SQL > > There is not a problem with compilation > Nobody had objections in discussion > There are enough regress tests and documentation > check-world passed > doc build passed > > I'll mark this patch as ready for committer > > Possible enhancing for this feature (can be done in next steps) > > 1. support UNION DISTINCT > 2. better compatibility with Oracle and DB2 (USING clause can be optional) Here is an updated patch. New since last time: - UNION DISTINCT is now supported (since hash_record() was added) - Some code has been cleaned up. - Some code has been moved from the rewriter to the parser so that certain errors are properly detected at parse time. - Added more syntax checks and more tests. - Support for dependency tracking was added (the type and operator for the cycle mark need to be added as dependencies). I found a bug that nested UNIONs (foo UNION bar UNION baz) were not handled (would crash) in the rewriter code. For now, I have just changed that to error out. This could be fixed, it would be a localized change in the rewriter code in any case. Doesn't seem important for the first pass, though. -- Peter Eisentraut 2ndQuadrant, an EDB company https://www.2ndquadrant.com/ --------------59265C7BE2B49AABAA0CA74C Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="v4-0001-SEARCH-and-CYCLE-clauses.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v4-0001-SEARCH-and-CYCLE-clauses.patch" RnJvbSBlNjllNWNjNzdhMjI2ZDY0NmFkMGZjZDdiYzJkZDczYmU5YjFhYmRhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogV2VkLCAyNSBOb3YgMjAyMCAxNDowMzo0NSArMDEwMApTdWJqZWN0 OiBbUEFUQ0ggdjRdIFNFQVJDSCBhbmQgQ1lDTEUgY2xhdXNlcwoKRGlzY3Vzc2lvbjogaHR0 cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9mbGF0L2RiODBjZWVlLTZmOTct OWI0YS04ZWU4LTNiYTBjNThlNWJlMkAybmRxdWFkcmFudC5jb20KLS0tCiBkb2Mvc3JjL3Nn bWwvcXVlcmllcy5zZ21sICAgICAgICAgICAgICAgIHwgIDY0ICsrLQogZG9jL3NyYy9zZ21s L3JlZi9zZWxlY3Quc2dtbCAgICAgICAgICAgICB8ICA0NCArKwogc3JjL2JhY2tlbmQvY2F0 YWxvZy9kZXBlbmRlbmN5LmMgICAgICAgICB8ICAxNSArCiBzcmMvYmFja2VuZC9ub2Rlcy9j b3B5ZnVuY3MuYyAgICAgICAgICAgIHwgIDQwICsrCiBzcmMvYmFja2VuZC9ub2Rlcy9lcXVh bGZ1bmNzLmMgICAgICAgICAgIHwgIDM2ICsrCiBzcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVu Y3MuYyAgICAgICAgICAgIHwgIDQyICstCiBzcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5j ICAgICAgICAgICAgIHwgIDM2ICsrCiBzcmMvYmFja2VuZC9ub2Rlcy9yZWFkZnVuY3MuYyAg ICAgICAgICAgIHwgIDQ0ICsrCiBzcmMvYmFja2VuZC9wYXJzZXIvYW5hbHl6ZS5jICAgICAg ICAgICAgIHwgIDQ3ICstCiBzcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55ICAgICAgICAgICAg ICAgIHwgIDU4ICstCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfYWdnLmMgICAgICAgICAg IHwgICA3ICsKIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9jdGUuYyAgICAgICAgICAgfCAx OTMgKysrKysrKwogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYyAgICAgICAgICB8 ICAgNCArCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZnVuYy5jICAgICAgICAgIHwgICAz ICsKIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9yZWxhdGlvbi5jICAgICAgfCAgNTQgKy0K IHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYyAgICAgICAgfCAgMTcgKy0KIHNy Yy9iYWNrZW5kL3Jld3JpdGUvTWFrZWZpbGUgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jh Y2tlbmQvcmV3cml0ZS9yZXdyaXRlSGFuZGxlci5jICAgICB8ICAxOCArCiBzcmMvYmFja2Vu ZC9yZXdyaXRlL3Jld3JpdGVTZWFyY2hDeWNsZS5jIHwgNjY4ICsrKysrKysrKysrKysrKysr KysrKysrCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgICAgICAgIHwgIDQ3 ICsrCiBzcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oICAgICAgICAgICAgICAgIHwgICAyICsK IHNyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCAgICAgICAgICAgfCAgMzAgKy0KIHNy Yy9pbmNsdWRlL3BhcnNlci9hbmFseXplLmggICAgICAgICAgICAgfCAgIDIgKwogc3JjL2lu Y2x1ZGUvcGFyc2VyL2t3bGlzdC5oICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvaW5jbHVk ZS9wYXJzZXIvcGFyc2Vfbm9kZS5oICAgICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL3Jl d3JpdGUvcmV3cml0ZVNlYXJjaEN5Y2xlLmggfCAgMjEgKwogc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC93aXRoLm91dCAgICAgICB8IDU1OCArKysrKysrKysrKysrKysrKysrCiBzcmMv dGVzdC9yZWdyZXNzL3NxbC93aXRoLnNxbCAgICAgICAgICAgIHwgMjc5ICsrKysrKysrKysK IDI4IGZpbGVzIGNoYW5nZWQsIDIzMDEgaW5zZXJ0aW9ucygrKSwgMzMgZGVsZXRpb25zKC0p CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRlU2VhcmNo Q3ljbGUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3Jld3JpdGUvcmV3cml0 ZVNlYXJjaEN5Y2xlLmgKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcXVlcmllcy5zZ21s IGIvZG9jL3NyYy9zZ21sL3F1ZXJpZXMuc2dtbAppbmRleCBjYTUxMjA0ODc1Li40NzQxNTA2 ZWI1IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcXVlcmllcy5zZ21sCisrKyBiL2RvYy9z cmMvc2dtbC9xdWVyaWVzLnNnbWwKQEAgLTIyMTgsNiArMjIxOCwzOSBAQCA8dGl0bGU+U2Vh cmNoIE9yZGVyPC90aXRsZT4KICAgICAgaW4gYW55IGNhc2UuCiAgICAgPC9wYXJhPgogICAg PC90aXA+CisKKyAgIDxwYXJhPgorICAgIFRoZXJlIGlzIGJ1aWx0LWluIHN5bnRheCB0byBj b21wdXRlIGEgZGVwdGgtIG9yIGJyZWFkdGgtZmlyc3Qgc29ydCBjb2x1bW4uCisgICAgRm9y IGV4YW1wbGU6CisKKzxwcm9ncmFtbGlzdGluZz4KK1dJVEggUkVDVVJTSVZFIHNlYXJjaF90 cmVlKGlkLCBsaW5rLCBkYXRhKSBBUyAoCisgICAgU0VMRUNUIHQuaWQsIHQubGluaywgdC5k YXRhCisgICAgRlJPTSB0cmVlIHQKKyAgVU5JT04gQUxMCisgICAgU0VMRUNUIHQuaWQsIHQu bGluaywgdC5kYXRhCisgICAgRlJPTSB0cmVlIHQsIHNlYXJjaF90cmVlIHN0CisgICAgV0hF UkUgdC5pZCA9IHN0LmxpbmsKKykgPGVtcGhhc2lzPlNFQVJDSCBERVBUSCBGSVJTVCBCWSBp ZCBTRVQgb3JkZXJjb2w8L2VtcGhhc2lzPgorU0VMRUNUICogRlJPTSBzZWFyY2hfdHJlZSBP UkRFUiBCWSBvcmRlcmNvbDsKKworV0lUSCBSRUNVUlNJVkUgc2VhcmNoX3RyZWUoaWQsIGxp bmssIGRhdGEpIEFTICgKKyAgICBTRUxFQ1QgdC5pZCwgdC5saW5rLCB0LmRhdGEKKyAgICBG Uk9NIHRyZWUgdAorICBVTklPTiBBTEwKKyAgICBTRUxFQ1QgdC5pZCwgdC5saW5rLCB0LmRh dGEKKyAgICBGUk9NIHRyZWUgdCwgc2VhcmNoX3RyZWUgc3QKKyAgICBXSEVSRSB0LmlkID0g c3QubGluaworKSA8ZW1waGFzaXM+U0VBUkNIIEJSRUFEVEggRklSU1QgQlkgaWQgU0VUIG9y ZGVyY29sPC9lbXBoYXNpcz4KK1NFTEVDVCAqIEZST00gc2VhcmNoX3RyZWUgT1JERVIgQlkg b3JkZXJjb2w7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgIFRoaXMgc3ludGF4IGlzIGludGVy bmFsbHkgZXhwYW5kZWQgdG8gc29tZXRoaW5nIHNpbWlsYXIgdG8gdGhlIGFib3ZlCisgICAg aGFuZC13cml0dGVuIGZvcm1zLiAgVGhlIDxsaXRlcmFsPlNFQVJDSDwvbGl0ZXJhbD4gY2xh dXNlIHNwZWNpZmllcyB3aGV0aGVyCisgICAgZGVwdGgtIG9yIGJyZWFkdGggZmlyc3Qgc2Vh cmNoIGlzIHdhbnRlZCwgdGhlIGxpc3Qgb2YgY29sdW1ucyB0byB0cmFjayBmb3IKKyAgICBz b3J0aW5nLCBhbmQgYSBjb2x1bW4gbmFtZSB0aGF0IHdpbGwgY29udGFpbiB0aGUgcmVzdWx0 IGRhdGEgdGhhdCBjYW4gYmUKKyAgICB1c2VkIGZvciBzb3J0aW5nLiAgVGhhdCBjb2x1bW4g d2lsbCBpbXBsaWNpdGx5IGJlIGFkZGVkIHRvIHRoZSBvdXRwdXQgcm93cworICAgIG9mIHRo ZSBDVEUuCisgICA8L3BhcmE+CiAgIDwvc2VjdDM+CiAKICAgPHNlY3QzIGlkPSJxdWVyaWVz LXdpdGgtY3ljbGUiPgpAQCAtMjMwNSwxMCArMjMzOCwzOSBAQCA8dGl0bGU+Q3ljbGUgRGV0 ZWN0aW9uPC90aXRsZT4KICAgIDwvcGFyYT4KICAgPC90aXA+CiAKKyAgPHBhcmE+CisgICBU aGVyZSBpcyBidWlsdC1pbiBzeW50YXggdG8gc2ltcGxpZnkgY3ljbGUgZGV0ZWN0aW9uLiAg VGhlIGFib3ZlIHF1ZXJ5IGNhbgorICAgYWxzbyBiZSB3cml0dGVuIGxpa2UgdGhpczoKKzxw cm9ncmFtbGlzdGluZz4KK1dJVEggUkVDVVJTSVZFIHNlYXJjaF9ncmFwaChpZCwgbGluaywg ZGF0YSwgZGVwdGgpIEFTICgKKyAgICBTRUxFQ1QgZy5pZCwgZy5saW5rLCBnLmRhdGEsIDEK KyAgICBGUk9NIGdyYXBoIGcKKyAgVU5JT04gQUxMCisgICAgU0VMRUNUIGcuaWQsIGcubGlu aywgZy5kYXRhLCBzZy5kZXB0aCArIDEKKyAgICBGUk9NIGdyYXBoIGcsIHNlYXJjaF9ncmFw aCBzZworICAgIFdIRVJFIGcuaWQgPSBzZy5saW5rCispIDxlbXBoYXNpcz5DWUNMRSBpZCBT RVQgaXNfY3ljbGUgVE8gdHJ1ZSBERUZBVUxUIGZhbHNlIFVTSU5HIHBhdGg8L2VtcGhhc2lz PgorU0VMRUNUICogRlJPTSBzZWFyY2hfZ3JhcGg7Cis8L3Byb2dyYW1saXN0aW5nPgorICAg YW5kIGl0IHdpbGwgYmUgaW50ZXJuYWxseSByZXdyaXR0ZW4gdG8gdGhlIGFib3ZlIGZvcm0u ICBUaGUKKyAgIDxsaXRlcmFsPkNZQ0xFPC9saXRlcmFsPiBjbGF1c2Ugc3BlY2lmaWVzIGZp cnN0IHRoZSBsaXN0IG9mIGNvbHVtbnMgdG8KKyAgIHRyYWNrIGZvciBjeWNsZSBkZXRlY3Rp b24sIHRoZW4gYSBjb2x1bW4gbmFtZSB0aGF0IHdpbGwgc2hvdyB3aGV0aGVyIGEKKyAgIGN5 Y2xlIGhhcyBiZWVuIGRldGVjdGVkLCB0aGVuIHR3byB2YWx1ZXMgdG8gdXNlIGluIHRoYXQg Y29sdW1uIGZvciB0aGUgeWVzCisgICBhbmQgbm8gY2FzZXMsIGFuZCBmaW5hbGx5IHRoZSBu YW1lIG9mIGFub3RoZXIgY29sdW1uIHRoYXQgd2lsbCB0cmFjayB0aGUKKyAgIHBhdGguICBU aGUgY3ljbGUgYW5kIHBhdGggY29sdW1ucyB3aWxsIGltcGxpY2l0bHkgYmUgYWRkZWQgdG8g dGhlIG91dHB1dAorICAgcm93cyBvZiB0aGUgQ1RFLgorICA8L3BhcmE+CisKICAgPHRpcD4K ICAgIDxwYXJhPgogICAgIFRoZSBjeWNsZSBwYXRoIGNvbHVtbiBpcyBjb21wdXRlZCBpbiB0 aGUgc2FtZSB3YXkgYXMgdGhlIGRlcHRoLWZpcnN0Ci0gICAgb3JkZXJpbmcgY29sdW1uIHNo b3cgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24uCisgICAgb3JkZXJpbmcgY29sdW1uIHNob3cg aW4gdGhlIHByZXZpb3VzIHNlY3Rpb24uICBBIHF1ZXJ5IGNhbiBoYXZlIGJvdGggYQorICAg IDxsaXRlcmFsPlNFQVJDSDwvbGl0ZXJhbD4gYW5kIGEgPGxpdGVyYWw+Q1lDTEU8L2xpdGVy YWw+IGNsYXVzZSwgYnV0IGEKKyAgICBkZXB0aC1maXJzdCBzZWFyY2ggc3BlY2lmaWNhdGlv biBhbmQgYSBjeWNsZSBkZXRlY3Rpb24gc3BlY2lmaWNhdGlvbiB3b3VsZAorICAgIGNyZWF0 ZSByZWR1bmRhbnQgY29tcHV0YXRpb25zLCBzbyBpdCdzIG1vcmUgZWZmaWNpZW50IHRvIGp1 c3QgdXNlIHRoZQorICAgIDxsaXRlcmFsPkNZQ0xFPC9saXRlcmFsPiBjbGF1c2UgYW5kIG9y ZGVyIGJ5IHRoZSBwYXRoIGNvbHVtbi4gIElmCisgICAgYnJlYWR0aC1maXJzdCBvcmRlcmlu ZyBpcyB3YW50ZWQsIHRoZW4gc3BlY2lmeWluZyBib3RoCisgICAgPGxpdGVyYWw+U0VBUkNI PC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+Q1lDTEU8L2xpdGVyYWw+IGNhbiBiZSB1c2VmdWwu CiAgICA8L3BhcmE+CiAgIDwvdGlwPgogCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVm L3NlbGVjdC5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9zZWxlY3Quc2dtbAppbmRleCA0NzJi N2NhZTgxLi4wYmFjMzdmMjU1IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3NlbGVj dC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvc2VsZWN0LnNnbWwKQEAgLTczLDYgKzcz LDggQEAKIDxwaHJhc2U+YW5kIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj53aXRo X3F1ZXJ5PC9yZXBsYWNlYWJsZT4gaXM6PC9waHJhc2U+CiAKICAgICA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+d2l0aF9xdWVyeV9uYW1lPC9yZXBsYWNlYWJsZT4gWyAoIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5jb2x1bW5fbmFtZTwvcmVwbGFjZWFibGU+ IFssIC4uLl0gKSBdIEFTIFsgWyBOT1QgXSBNQVRFUklBTElaRUQgXSAoIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5zZWxlY3Q8L3JlcGxhY2VhYmxlPiB8IDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj52YWx1ZXM8L3JlcGxhY2VhYmxlPiB8IDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5pbnNlcnQ8L3JlcGxhY2VhYmxlPiB8IDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj51cGRhdGU8L3JlcGxhY2VhYmxlPiB8IDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5kZWxldGU8L3JlcGxhY2VhYmxlPiApCisgICAgICAgIFsg U0VBUkNIIHsgQlJFQURUSCB8IERFUFRIIH0gRklSU1QgQlkgPHJlcGxhY2VhYmxlPmNvbHVt bl9uYW1lPC9yZXBsYWNlYWJsZT4gWywgLi4uXSBTRVQgPHJlcGxhY2VhYmxlPnNlYXJjaF9z ZXFfY29sX25hbWU8L3JlcGxhY2VhYmxlPiBdCisgICAgICAgIFsgQ1lDTEUgPHJlcGxhY2Vh YmxlPmNvbHVtbl9uYW1lPC9yZXBsYWNlYWJsZT4gWywgLi4uXSBTRVQgPHJlcGxhY2VhYmxl PmN5Y2xlX21hcmtfY29sX25hbWU8L3JlcGxhY2VhYmxlPiBUTyA8cmVwbGFjZWFibGU+Y3lj bGVfbWFya192YWx1ZTwvcmVwbGFjZWFibGU+IERFRkFVTFQgPHJlcGxhY2VhYmxlPmN5Y2xl X21hcmtfZGVmYXVsdDwvcmVwbGFjZWFibGU+IFVTSU5HIDxyZXBsYWNlYWJsZT5jeWNsZV9w YXRoX2NvbF9uYW1lPC9yZXBsYWNlYWJsZT4gXQogCiBUQUJMRSBbIE9OTFkgXSA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFsgKiBd CiA8L3N5bm9wc2lzPgpAQCAtMjc2LDYgKzI3OCw0OCBAQCA8dGl0bGU+PGxpdGVyYWw+V0lU SDwvbGl0ZXJhbD4gQ2xhdXNlPC90aXRsZT4KICAgICBxdWVyaWVzIHRoYXQgZG8gbm90IHVz ZSByZWN1cnNpb24gb3IgZm9yd2FyZCByZWZlcmVuY2VzLgogICAgPC9wYXJhPgogCisgICA8 cGFyYT4KKyAgICBUaGUgb3B0aW9uYWwgPGxpdGVyYWw+U0VBUkNIPC9saXRlcmFsPiBjbGF1 c2UgY29tcHV0ZXMgYSA8Zmlyc3R0ZXJtPnNlYXJjaAorICAgIHNlcXVlbmNlIGNvbHVtbjwv Zmlyc3R0ZXJtPiB0aGF0IGNhbiBiZSB1c2VkIGZvciBvcmRlcmluZyB0aGUgcmVzdWx0cyBv ZiBhCisgICAgcmVjdXJzaXZlIHF1ZXJ5IGluIGVpdGhlciBicmVhZHRoLWZpcnN0IG9yIGRl cHRoLWZpcnN0IG9yZGVyLiAgVGhlCisgICAgc3VwcGxpZWQgY29sdW1uIG5hbWUgbGlzdCBz cGVjaWZpZXMgdGhlIHJvdyBrZXkgdGhhdCBpcyB0byBiZSB1c2VkIGZvcgorICAgIGtlZXBp bmcgdHJhY2sgb2YgdmlzaXRlZCByb3dzLiAgQSBjb2x1bW4gbmFtZWQKKyAgICA8cmVwbGFj ZWFibGU+c2VhcmNoX3NlcV9jb2xfbmFtZTwvcmVwbGFjZWFibGU+IHdpbGwgYmUgYWRkZWQg dG8gdGhlIHJlc3VsdAorICAgIGNvbHVtbiBsaXN0IG9mIHRoZSA8bGl0ZXJhbD5XSVRIPC9s aXRlcmFsPiBxdWVyeS4gIFRoaXMgY29sdW1uIGNhbiBiZQorICAgIG9yZGVyZWQgYnkgaW4g dGhlIG91dGVyIHF1ZXJ5IHRvIGFjaGlldmUgdGhlIHJlc3BlY3RpdmUgb3JkZXJpbmcuICBT ZWUKKyAgICA8eHJlZiBsaW5rZW5kPSJxdWVyaWVzLXdpdGgtc2VhcmNoIi8+IGZvciBleGFt cGxlcy4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgVGhlIG9wdGlvbmFsIDxsaXRl cmFsPkNZQ0xFPC9saXRlcmFsPiBjbGF1c2UgaXMgdXNlZCB0byBkZXRlY3QgY3ljbGVzIGlu CisgICAgcmVjdXJzaXZlIHF1ZXJpZXMuICBUaGUgc3VwcGxpZWQgY29sdW1uIG5hbWUgbGlz dCBzcGVjaWZpZXMgdGhlIHJvdyBrZXkKKyAgICB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIGtl ZXBpbmcgdHJhY2sgb2YgdmlzaXRlZCByb3dzLiAgQSBjb2x1bW4gbmFtZWQKKyAgICA8cmVw bGFjZWFibGU+Y3ljbGVfbWFya19jb2xfbmFtZTwvcmVwbGFjZWFibGU+IHdpbGwgYmUgYWRk ZWQgdG8gdGhlIHJlc3VsdAorICAgIGNvbHVtbiBsaXN0IG9mIHRoZSA8bGl0ZXJhbD5XSVRI PC9saXRlcmFsPiBxdWVyeS4gIFRoaXMgY29sdW1uIHdpbGwgYmUgc2V0CisgICAgdG8gPHJl cGxhY2VhYmxlPmN5Y2xlX21hcmtfdmFsdWU8L3JlcGxhY2VhYmxlPiB3aGVuIGEgY3ljbGUg aGFzIGJlZW4KKyAgICBkZXRlY3RlZCwgZWxzZSB0byA8cmVwbGFjZWFibGU+Y3ljbGVfbWFy a19kZWZhdWx0PC9yZXBsYWNlYWJsZT4uCisgICAgRnVydGhlcm1vcmUsIHByb2Nlc3Npbmcg b2YgdGhlIHJlY3Vyc2l2ZSB1bmlvbiB3aWxsIHN0b3Agd2hlbiBhIGN5Y2xlIGhhcworICAg IGJlZW4gZGV0ZWN0ZWQuICA8cmVwbGFjZWFibGU+Y3ljbGVfbWFya192YWx1ZTwvcmVwbGFj ZWFibGU+IGFuZAorICAgIDxyZXBsYWNlYWJsZT5jeWNsZV9tYXJrX2RlZmF1bHQ8L3JlcGxh Y2VhYmxlPiBtdXN0IGJlIGNvbnN0YW50cyBhbmQgdGhleQorICAgIG11c3QgYmUgY29lcmNp YmxlIHRvIGEgY29tbW9uIGRhdGEgdHlwZSwgYW5kIHRoZSBkYXRhIHR5cGUgbXVzdCBoYXZl IGFuCisgICAgaW5lcXVhbGl0eSBvcGVyYXRvci4gIChUaGUgU1FMIHN0YW5kYXJkIHJlcXVp cmVzIHRoYXQgdGhleSBiZSBjaGFyYWN0ZXIKKyAgICBzdHJpbmdzLCBidXQgUG9zdGdyZVNR TCBkb2VzIG5vdCByZXF1aXJlIHRoYXQuKSAgRnVydGhlcm1vcmUsIGEgY29sdW1uCisgICAg bmFtZWQgPHJlcGxhY2VhYmxlPmN5Y2xlX3BhdGhfY29sX25hbWU8L3JlcGxhY2VhYmxlPiB3 aWxsIGJlIGFkZGVkIHRvIHRoZQorICAgIHJlc3VsdCBjb2x1bW4gbGlzdCBvZiB0aGUgPGxp dGVyYWw+V0lUSDwvbGl0ZXJhbD4gcXVlcnkuICBUaGlzIGNvbHVtbiBpcworICAgIHVzZWQg aW50ZXJuYWxseSBmb3IgdHJhY2tpbmcgdmlzaXRlZCByb3dzLiAgU2VlIDx4cmVmCisgICAg bGlua2VuZD0icXVlcmllcy13aXRoLWN5Y2xlIi8+IGZvciBleGFtcGxlcy4KKyAgIDwvcGFy YT4KKworICAgPHBhcmE+CisgICAgQm90aCB0aGUgPGxpdGVyYWw+U0VBUkNIPC9saXRlcmFs PiBhbmQgdGhlIDxsaXRlcmFsPkNZQ0xFPC9saXRlcmFsPiBjbGF1c2UKKyAgICBhcmUgb25s eSB2YWxpZCBmb3IgcmVjdXJzaXZlIDxsaXRlcmFsPldJVEg8L2xpdGVyYWw+IHF1ZXJpZXMu ICBUaGUKKyAgICA8cmVwbGFjZWFibGU+d2l0aF9xdWVyeTwvcmVwbGFjZWFibGU+IG11c3Qg YmUgYSA8bGl0ZXJhbD5VTklPTjwvbGl0ZXJhbD4KKyAgICAob3IgPGxpdGVyYWw+VU5JT04g QUxMPC9saXRlcmFsPikgb2YgdHdvIDxsaXRlcmFsPlNFTEVDVDwvbGl0ZXJhbD4gKG9yCisg ICAgZXF1aXZhbGVudCkgY29tbWFuZHMgKG5vIG5lc3RlZCA8bGl0ZXJhbD5VTklPTjwvbGl0 ZXJhbD5zKS4gIElmIGJvdGgKKyAgICBjbGF1c2VzIGFyZSB1c2VkLCB0aGUgY29sdW1uIGFk ZGVkIGJ5IHRoZSA8bGl0ZXJhbD5TRUFSQ0g8L2xpdGVyYWw+IGNsYXVzZQorICAgIGFwcGVh cnMgYmVmb3JlIHRoZSBjb2x1bW5zIGFkZGVkIGJ5IHRoZSA8bGl0ZXJhbD5DWUNMRTwvbGl0 ZXJhbD4gY2xhdXNlLgorICAgPC9wYXJhPgorCiAgICA8cGFyYT4KICAgICBUaGUgcHJpbWFy eSBxdWVyeSBhbmQgdGhlIDxsaXRlcmFsPldJVEg8L2xpdGVyYWw+IHF1ZXJpZXMgYXJlIGFs bAogICAgIChub3Rpb25hbGx5KSBleGVjdXRlZCBhdCB0aGUgc2FtZSB0aW1lLiAgVGhpcyBp bXBsaWVzIHRoYXQgdGhlIGVmZmVjdHMgb2YKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nh dGFsb2cvZGVwZW5kZW5jeS5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9kZXBlbmRlbmN5LmMK aW5kZXggMjQ1YzJmNGZjOC4uNGFkN2Y2MzMzZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y2F0YWxvZy9kZXBlbmRlbmN5LmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9kZXBlbmRl bmN5LmMKQEAgLTIyNDgsNiArMjI0OCwyMSBAQCBmaW5kX2V4cHJfcmVmZXJlbmNlc193YWxr ZXIoTm9kZSAqbm9kZSwKIAkJCQkJCQkgICBjb250ZXh0LT5hZGRycyk7CiAJCS8qIGZhbGwg dGhyb3VnaCB0byBleGFtaW5lIHN1YnN0cnVjdHVyZSAqLwogCX0KKwllbHNlIGlmIChJc0Eo bm9kZSwgQ1RFQ3ljbGVDbGF1c2UpKQorCXsKKwkJQ1RFQ3ljbGVDbGF1c2UgKmNjID0gKENU RUN5Y2xlQ2xhdXNlICopIG5vZGU7CisKKwkJaWYgKE9pZElzVmFsaWQoY2MtPmN5Y2xlX21h cmtfdHlwZSkpCisJCQlhZGRfb2JqZWN0X2FkZHJlc3MoT0NMQVNTX1RZUEUsIGNjLT5jeWNs ZV9tYXJrX3R5cGUsIDAsCisJCQkJCQkJICAgY29udGV4dC0+YWRkcnMpOworCQlpZiAoT2lk SXNWYWxpZChjYy0+Y3ljbGVfbWFya19jb2xsYXRpb24pKQorCQkJYWRkX29iamVjdF9hZGRy ZXNzKE9DTEFTU19DT0xMQVRJT04sIGNjLT5jeWNsZV9tYXJrX2NvbGxhdGlvbiwgMCwKKwkJ CQkJCQkgICBjb250ZXh0LT5hZGRycyk7CisJCWlmIChPaWRJc1ZhbGlkKGNjLT5jeWNsZV9t YXJrX25lb3ApKQorCQkJYWRkX29iamVjdF9hZGRyZXNzKE9DTEFTU19PUEVSQVRPUiwgY2Mt PmN5Y2xlX21hcmtfbmVvcCwgMCwKKwkJCQkJCQkgICBjb250ZXh0LT5hZGRycyk7CisJCS8q IGZhbGwgdGhyb3VnaCB0byBleGFtaW5lIHN1YnN0cnVjdHVyZSAqLworCX0KIAllbHNlIGlm IChJc0Eobm9kZSwgUXVlcnkpKQogCXsKIAkJLyogUmVjdXJzZSBpbnRvIFJURSBzdWJxdWVy eSBvciBub3QteWV0LXBsYW5uZWQgc3VibGluayBzdWJxdWVyeSAqLwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5 ZnVuY3MuYwppbmRleCA0N2I5ZmZkNDAxLi4wNTU3M2UxOWE4IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5 ZnVuY3MuYwpAQCAtMjU4OCw2ICsyNTg4LDM4IEBAIF9jb3B5T25Db25mbGljdENsYXVzZShj b25zdCBPbkNvbmZsaWN0Q2xhdXNlICpmcm9tKQogCXJldHVybiBuZXdub2RlOwogfQogCitz dGF0aWMgQ1RFU2VhcmNoQ2xhdXNlICoKK19jb3B5Q1RFU2VhcmNoQ2xhdXNlKGNvbnN0IENU RVNlYXJjaENsYXVzZSAqZnJvbSkKK3sKKwlDVEVTZWFyY2hDbGF1c2UgKm5ld25vZGUgPSBt YWtlTm9kZShDVEVTZWFyY2hDbGF1c2UpOworCisJQ09QWV9OT0RFX0ZJRUxEKHNlYXJjaF9j b2xfbGlzdCk7CisJQ09QWV9TQ0FMQVJfRklFTEQoc2VhcmNoX2JyZWFkdGhfZmlyc3QpOwor CUNPUFlfU1RSSU5HX0ZJRUxEKHNlYXJjaF9zZXFfY29sdW1uKTsKKwlDT1BZX0xPQ0FUSU9O X0ZJRUxEKGxvY2F0aW9uKTsKKworCXJldHVybiBuZXdub2RlOworfQorCitzdGF0aWMgQ1RF Q3ljbGVDbGF1c2UgKgorX2NvcHlDVEVDeWNsZUNsYXVzZShjb25zdCBDVEVDeWNsZUNsYXVz ZSAqZnJvbSkKK3sKKwlDVEVDeWNsZUNsYXVzZSAqbmV3bm9kZSA9IG1ha2VOb2RlKENURUN5 Y2xlQ2xhdXNlKTsKKworCUNPUFlfTk9ERV9GSUVMRChjeWNsZV9jb2xfbGlzdCk7CisJQ09Q WV9TVFJJTkdfRklFTEQoY3ljbGVfbWFya19jb2x1bW4pOworCUNPUFlfTk9ERV9GSUVMRChj eWNsZV9tYXJrX3ZhbHVlKTsKKwlDT1BZX05PREVfRklFTEQoY3ljbGVfbWFya19kZWZhdWx0 KTsKKwlDT1BZX1NUUklOR19GSUVMRChjeWNsZV9wYXRoX2NvbHVtbik7CisJQ09QWV9MT0NB VElPTl9GSUVMRChsb2NhdGlvbik7CisJQ09QWV9TQ0FMQVJfRklFTEQoY3ljbGVfbWFya190 eXBlKTsKKwlDT1BZX1NDQUxBUl9GSUVMRChjeWNsZV9tYXJrX3R5cG1vZCk7CisJQ09QWV9T Q0FMQVJfRklFTEQoY3ljbGVfbWFya19jb2xsYXRpb24pOworCUNPUFlfU0NBTEFSX0ZJRUxE KGN5Y2xlX21hcmtfbmVvcCk7CisKKwlyZXR1cm4gbmV3bm9kZTsKK30KKwogc3RhdGljIENv bW1vblRhYmxlRXhwciAqCiBfY29weUNvbW1vblRhYmxlRXhwcihjb25zdCBDb21tb25UYWJs ZUV4cHIgKmZyb20pCiB7CkBAIC0yNTk3LDYgKzI2MjksOCBAQCBfY29weUNvbW1vblRhYmxl RXhwcihjb25zdCBDb21tb25UYWJsZUV4cHIgKmZyb20pCiAJQ09QWV9OT0RFX0ZJRUxEKGFs aWFzY29sbmFtZXMpOwogCUNPUFlfU0NBTEFSX0ZJRUxEKGN0ZW1hdGVyaWFsaXplZCk7CiAJ Q09QWV9OT0RFX0ZJRUxEKGN0ZXF1ZXJ5KTsKKwlDT1BZX05PREVfRklFTEQoc2VhcmNoX2Ns YXVzZSk7CisJQ09QWV9OT0RFX0ZJRUxEKGN5Y2xlX2NsYXVzZSk7CiAJQ09QWV9MT0NBVElP Tl9GSUVMRChsb2NhdGlvbik7CiAJQ09QWV9TQ0FMQVJfRklFTEQoY3RlcmVjdXJzaXZlKTsK IAlDT1BZX1NDQUxBUl9GSUVMRChjdGVyZWZjb3VudCk7CkBAIC01NjYyLDYgKzU2OTYsMTIg QEAgY29weU9iamVjdEltcGwoY29uc3Qgdm9pZCAqZnJvbSkKIAkJY2FzZSBUX09uQ29uZmxp Y3RDbGF1c2U6CiAJCQlyZXR2YWwgPSBfY29weU9uQ29uZmxpY3RDbGF1c2UoZnJvbSk7CiAJ CQlicmVhazsKKwkJY2FzZSBUX0NURVNlYXJjaENsYXVzZToKKwkJCXJldHZhbCA9IF9jb3B5 Q1RFU2VhcmNoQ2xhdXNlKGZyb20pOworCQkJYnJlYWs7CisJCWNhc2UgVF9DVEVDeWNsZUNs YXVzZToKKwkJCXJldHZhbCA9IF9jb3B5Q1RFQ3ljbGVDbGF1c2UoZnJvbSk7CisJCQlicmVh azsKIAkJY2FzZSBUX0NvbW1vblRhYmxlRXhwcjoKIAkJCXJldHZhbCA9IF9jb3B5Q29tbW9u VGFibGVFeHByKGZyb20pOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9u b2Rlcy9lcXVhbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9lcXVhbGZ1bmNzLmMKaW5k ZXggNmNjY2FlYTEyNC4uNTFjMmUxZmUyZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9k ZXMvZXF1YWxmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL2VxdWFsZnVuY3MuYwpA QCAtMjgyNiw2ICsyODI2LDM0IEBAIF9lcXVhbE9uQ29uZmxpY3RDbGF1c2UoY29uc3QgT25D b25mbGljdENsYXVzZSAqYSwgY29uc3QgT25Db25mbGljdENsYXVzZSAqYikKIAlyZXR1cm4g dHJ1ZTsKIH0KIAorc3RhdGljIGJvb2wKK19lcXVhbENURVNlYXJjaENsYXVzZShjb25zdCBD VEVTZWFyY2hDbGF1c2UgKmEsIGNvbnN0IENURVNlYXJjaENsYXVzZSAqYikKK3sKKwlDT01Q QVJFX05PREVfRklFTEQoc2VhcmNoX2NvbF9saXN0KTsKKwlDT01QQVJFX1NDQUxBUl9GSUVM RChzZWFyY2hfYnJlYWR0aF9maXJzdCk7CisJQ09NUEFSRV9TVFJJTkdfRklFTEQoc2VhcmNo X3NlcV9jb2x1bW4pOworCUNPTVBBUkVfTE9DQVRJT05fRklFTEQobG9jYXRpb24pOworCisJ cmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sCitfZXF1YWxDVEVDeWNsZUNsYXVzZShj b25zdCBDVEVDeWNsZUNsYXVzZSAqYSwgY29uc3QgQ1RFQ3ljbGVDbGF1c2UgKmIpCit7CisJ Q09NUEFSRV9OT0RFX0ZJRUxEKGN5Y2xlX2NvbF9saXN0KTsKKwlDT01QQVJFX1NUUklOR19G SUVMRChjeWNsZV9tYXJrX2NvbHVtbik7CisJQ09NUEFSRV9OT0RFX0ZJRUxEKGN5Y2xlX21h cmtfdmFsdWUpOworCUNPTVBBUkVfTk9ERV9GSUVMRChjeWNsZV9tYXJrX2RlZmF1bHQpOwor CUNPTVBBUkVfU1RSSU5HX0ZJRUxEKGN5Y2xlX3BhdGhfY29sdW1uKTsKKwlDT01QQVJFX0xP Q0FUSU9OX0ZJRUxEKGxvY2F0aW9uKTsKKwlDT01QQVJFX1NDQUxBUl9GSUVMRChjeWNsZV9t YXJrX3R5cGUpOworCUNPTVBBUkVfU0NBTEFSX0ZJRUxEKGN5Y2xlX21hcmtfdHlwbW9kKTsK KwlDT01QQVJFX1NDQUxBUl9GSUVMRChjeWNsZV9tYXJrX2NvbGxhdGlvbik7CisJQ09NUEFS RV9TQ0FMQVJfRklFTEQoY3ljbGVfbWFya19uZW9wKTsKKworCXJldHVybiB0cnVlOworfQor CiBzdGF0aWMgYm9vbAogX2VxdWFsQ29tbW9uVGFibGVFeHByKGNvbnN0IENvbW1vblRhYmxl RXhwciAqYSwgY29uc3QgQ29tbW9uVGFibGVFeHByICpiKQogewpAQCAtMjgzMyw2ICsyODYx LDggQEAgX2VxdWFsQ29tbW9uVGFibGVFeHByKGNvbnN0IENvbW1vblRhYmxlRXhwciAqYSwg Y29uc3QgQ29tbW9uVGFibGVFeHByICpiKQogCUNPTVBBUkVfTk9ERV9GSUVMRChhbGlhc2Nv bG5hbWVzKTsKIAlDT01QQVJFX1NDQUxBUl9GSUVMRChjdGVtYXRlcmlhbGl6ZWQpOwogCUNP TVBBUkVfTk9ERV9GSUVMRChjdGVxdWVyeSk7CisJQ09NUEFSRV9OT0RFX0ZJRUxEKHNlYXJj aF9jbGF1c2UpOworCUNPTVBBUkVfTk9ERV9GSUVMRChjeWNsZV9jbGF1c2UpOwogCUNPTVBB UkVfTE9DQVRJT05fRklFTEQobG9jYXRpb24pOwogCUNPTVBBUkVfU0NBTEFSX0ZJRUxEKGN0 ZXJlY3Vyc2l2ZSk7CiAJQ09NUEFSRV9TQ0FMQVJfRklFTEQoY3RlcmVmY291bnQpOwpAQCAt MzcxNyw2ICszNzQ3LDEyIEBAIGVxdWFsKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIp CiAJCWNhc2UgVF9PbkNvbmZsaWN0Q2xhdXNlOgogCQkJcmV0dmFsID0gX2VxdWFsT25Db25m bGljdENsYXVzZShhLCBiKTsKIAkJCWJyZWFrOworCQljYXNlIFRfQ1RFU2VhcmNoQ2xhdXNl OgorCQkJcmV0dmFsID0gX2VxdWFsQ1RFU2VhcmNoQ2xhdXNlKGEsIGIpOworCQkJYnJlYWs7 CisJCWNhc2UgVF9DVEVDeWNsZUNsYXVzZToKKwkJCXJldHZhbCA9IF9lcXVhbENURUN5Y2xl Q2xhdXNlKGEsIGIpOworCQkJYnJlYWs7CiAJCWNhc2UgVF9Db21tb25UYWJsZUV4cHI6CiAJ CQlyZXR2YWwgPSBfZXF1YWxDb21tb25UYWJsZUV4cHIoYSwgYik7CiAJCQlicmVhazsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jIGIvc3JjL2JhY2tlbmQv bm9kZXMvbm9kZUZ1bmNzLmMKaW5kZXggMWRjODczZWQyNS4uZjk0ODU4OWIyNCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQv bm9kZXMvbm9kZUZ1bmNzLmMKQEAgLTE1NzUsNiArMTU3NSwxMiBAQCBleHByTG9jYXRpb24o Y29uc3QgTm9kZSAqZXhwcikKIAkJY2FzZSBUX09uQ29uZmxpY3RDbGF1c2U6CiAJCQlsb2Mg PSAoKGNvbnN0IE9uQ29uZmxpY3RDbGF1c2UgKikgZXhwciktPmxvY2F0aW9uOwogCQkJYnJl YWs7CisJCWNhc2UgVF9DVEVTZWFyY2hDbGF1c2U6CisJCQlsb2MgPSAoKGNvbnN0IENURVNl YXJjaENsYXVzZSAqKSBleHByKS0+bG9jYXRpb247CisJCQlicmVhazsKKwkJY2FzZSBUX0NU RUN5Y2xlQ2xhdXNlOgorCQkJbG9jID0gKChjb25zdCBDVEVDeWNsZUNsYXVzZSAqKSBleHBy KS0+bG9jYXRpb247CisJCQlicmVhazsKIAkJY2FzZSBUX0NvbW1vblRhYmxlRXhwcjoKIAkJ CWxvYyA9ICgoY29uc3QgQ29tbW9uVGFibGVFeHByICopIGV4cHIpLT5sb2NhdGlvbjsKIAkJ CWJyZWFrOwpAQCAtMTkxOCw2ICsxOTI0LDcgQEAgZXhwcmVzc2lvbl90cmVlX3dhbGtlcihO b2RlICpub2RlLAogCQljYXNlIFRfTmV4dFZhbHVlRXhwcjoKIAkJY2FzZSBUX1JhbmdlVGJs UmVmOgogCQljYXNlIFRfU29ydEdyb3VwQ2xhdXNlOgorCQljYXNlIFRfQ1RFU2VhcmNoQ2xh dXNlOgogCQkJLyogcHJpbWl0aXZlIG5vZGUgdHlwZXMgd2l0aCBubyBleHByZXNzaW9uIHN1 Ym5vZGVzICovCiAJCQlicmVhazsKIAkJY2FzZSBUX1dpdGhDaGVja09wdGlvbjoKQEAgLTIx NTcsNiArMjE2NCwxNiBAQCBleHByZXNzaW9uX3RyZWVfd2Fsa2VyKE5vZGUgKm5vZGUsCiAJ CQkJCXJldHVybiB0cnVlOwogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgVF9DVEVDeWNsZUNs YXVzZToKKwkJCXsKKwkJCQlDVEVDeWNsZUNsYXVzZSAqY2MgPSAoQ1RFQ3ljbGVDbGF1c2Ug Kikgbm9kZTsKKworCQkJCWlmICh3YWxrZXIoY2MtPmN5Y2xlX21hcmtfdmFsdWUsIGNvbnRl eHQpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAod2Fsa2VyKGNjLT5jeWNsZV9tYXJr X2RlZmF1bHQsIGNvbnRleHQpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCWJyZWFr OwogCQljYXNlIFRfQ29tbW9uVGFibGVFeHByOgogCQkJewogCQkJCUNvbW1vblRhYmxlRXhw ciAqY3RlID0gKENvbW1vblRhYmxlRXhwciAqKSBub2RlOwpAQCAtMjE2NSw3ICsyMTgyLDEz IEBAIGV4cHJlc3Npb25fdHJlZV93YWxrZXIoTm9kZSAqbm9kZSwKIAkJCQkgKiBJbnZva2Ug dGhlIHdhbGtlciBvbiB0aGUgQ1RFJ3MgUXVlcnkgbm9kZSwgc28gaXQgY2FuCiAJCQkJICog cmVjdXJzZSBpbnRvIHRoZSBzdWItcXVlcnkgaWYgaXQgd2FudHMgdG8uCiAJCQkJICovCi0J CQkJcmV0dXJuIHdhbGtlcihjdGUtPmN0ZXF1ZXJ5LCBjb250ZXh0KTsKKwkJCQlpZiAod2Fs a2VyKGN0ZS0+Y3RlcXVlcnksIGNvbnRleHQpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKworCQkJ CWlmICh3YWxrZXIoY3RlLT5zZWFyY2hfY2xhdXNlLCBjb250ZXh0KSkKKwkJCQkJcmV0dXJu IHRydWU7CisJCQkJaWYgKHdhbGtlcihjdGUtPmN5Y2xlX2NsYXVzZSwgY29udGV4dCkpCisJ CQkJCXJldHVybiB0cnVlOwogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgVF9MaXN0OgpAQCAt MjYyNCw2ICsyNjQ3LDcgQEAgZXhwcmVzc2lvbl90cmVlX211dGF0b3IoTm9kZSAqbm9kZSwK IAkJY2FzZSBUX05leHRWYWx1ZUV4cHI6CiAJCWNhc2UgVF9SYW5nZVRibFJlZjoKIAkJY2Fz ZSBUX1NvcnRHcm91cENsYXVzZToKKwkJY2FzZSBUX0NURVNlYXJjaENsYXVzZToKIAkJCXJl dHVybiAoTm9kZSAqKSBjb3B5T2JqZWN0KG5vZGUpOwogCQljYXNlIFRfV2l0aENoZWNrT3B0 aW9uOgogCQkJewpAQCAtMzAyOCw2ICszMDUyLDE3IEBAIGV4cHJlc3Npb25fdHJlZV9tdXRh dG9yKE5vZGUgKm5vZGUsCiAJCQkJcmV0dXJuIChOb2RlICopIG5ld25vZGU7CiAJCQl9CiAJ CQlicmVhazsKKwkJY2FzZSBUX0NURUN5Y2xlQ2xhdXNlOgorCQkJeworCQkJCUNURUN5Y2xl Q2xhdXNlICpjYyA9IChDVEVDeWNsZUNsYXVzZSAqKSBub2RlOworCQkJCUNURUN5Y2xlQ2xh dXNlICpuZXdub2RlOworCisJCQkJRkxBVENPUFkobmV3bm9kZSwgY2MsIENURUN5Y2xlQ2xh dXNlKTsKKwkJCQlNVVRBVEUobmV3bm9kZS0+Y3ljbGVfbWFya192YWx1ZSwgY2MtPmN5Y2xl X21hcmtfdmFsdWUsIE5vZGUgKik7CisJCQkJTVVUQVRFKG5ld25vZGUtPmN5Y2xlX21hcmtf ZGVmYXVsdCwgY2MtPmN5Y2xlX21hcmtfZGVmYXVsdCwgTm9kZSAqKTsKKwkJCQlyZXR1cm4g KE5vZGUgKikgbmV3bm9kZTsKKwkJCX0KKwkJCWJyZWFrOwogCQljYXNlIFRfQ29tbW9uVGFi bGVFeHByOgogCQkJewogCQkJCUNvbW1vblRhYmxlRXhwciAqY3RlID0gKENvbW1vblRhYmxl RXhwciAqKSBub2RlOwpAQCAtMzA0MCw2ICszMDc1LDEwIEBAIGV4cHJlc3Npb25fdHJlZV9t dXRhdG9yKE5vZGUgKm5vZGUsCiAJCQkJICogcmVjdXJzZSBpbnRvIHRoZSBzdWItcXVlcnkg aWYgaXQgd2FudHMgdG8uCiAJCQkJICovCiAJCQkJTVVUQVRFKG5ld25vZGUtPmN0ZXF1ZXJ5 LCBjdGUtPmN0ZXF1ZXJ5LCBOb2RlICopOworCisJCQkJTVVUQVRFKG5ld25vZGUtPnNlYXJj aF9jbGF1c2UsIGN0ZS0+c2VhcmNoX2NsYXVzZSwgQ1RFU2VhcmNoQ2xhdXNlICopOworCQkJ CU1VVEFURShuZXdub2RlLT5jeWNsZV9jbGF1c2UsIGN0ZS0+Y3ljbGVfY2xhdXNlLCBDVEVD eWNsZUNsYXVzZSAqKTsKKwogCQkJCXJldHVybiAoTm9kZSAqKSBuZXdub2RlOwogCQkJfQog CQkJYnJlYWs7CkBAIC0zOTEyLDYgKzM5NTEsNyBAQCByYXdfZXhwcmVzc2lvbl90cmVlX3dh bGtlcihOb2RlICpub2RlLAogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgVF9Db21tb25UYWJs ZUV4cHI6CisJCQkvKiBzZWFyY2hfY2xhdXNlIGFuZCBjeWNsZV9jbGF1c2UgYXJlIG5vdCBp bnRlcmVzdGluZyBoZXJlICovCiAJCQlyZXR1cm4gd2Fsa2VyKCgoQ29tbW9uVGFibGVFeHBy ICopIG5vZGUpLT5jdGVxdWVyeSwgY29udGV4dCk7CiAJCWRlZmF1bHQ6CiAJCQllbG9nKEVS Uk9SLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZTogJWQiLApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvbm9kZXMvb3V0ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMK aW5kZXggYmQ1Njk0ZDg4ZS4uNTI4N2YwNjBiOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv bm9kZXMvb3V0ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCkBA IC0zMDQ3LDYgKzMwNDcsMzQgQEAgX291dFdpdGhDbGF1c2UoU3RyaW5nSW5mbyBzdHIsIGNv bnN0IFdpdGhDbGF1c2UgKm5vZGUpCiAJV1JJVEVfTE9DQVRJT05fRklFTEQobG9jYXRpb24p OwogfQogCitzdGF0aWMgdm9pZAorX291dENURVNlYXJjaENsYXVzZShTdHJpbmdJbmZvIHN0 ciwgY29uc3QgQ1RFU2VhcmNoQ2xhdXNlICpub2RlKQoreworCVdSSVRFX05PREVfVFlQRSgi Q1RFU0VBUkNIQ0xBVVNFIik7CisKKwlXUklURV9OT0RFX0ZJRUxEKHNlYXJjaF9jb2xfbGlz dCk7CisJV1JJVEVfQk9PTF9GSUVMRChzZWFyY2hfYnJlYWR0aF9maXJzdCk7CisJV1JJVEVf U1RSSU5HX0ZJRUxEKHNlYXJjaF9zZXFfY29sdW1uKTsKKwlXUklURV9MT0NBVElPTl9GSUVM RChsb2NhdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkCitfb3V0Q1RFQ3ljbGVDbGF1c2UoU3Ry aW5nSW5mbyBzdHIsIGNvbnN0IENURUN5Y2xlQ2xhdXNlICpub2RlKQoreworCVdSSVRFX05P REVfVFlQRSgiQ1RFQ1lDTEVDTEFVU0UiKTsKKworCVdSSVRFX05PREVfRklFTEQoY3ljbGVf Y29sX2xpc3QpOworCVdSSVRFX1NUUklOR19GSUVMRChjeWNsZV9tYXJrX2NvbHVtbik7CisJ V1JJVEVfTk9ERV9GSUVMRChjeWNsZV9tYXJrX3ZhbHVlKTsKKwlXUklURV9OT0RFX0ZJRUxE KGN5Y2xlX21hcmtfZGVmYXVsdCk7CisJV1JJVEVfU1RSSU5HX0ZJRUxEKGN5Y2xlX3BhdGhf Y29sdW1uKTsKKwlXUklURV9MT0NBVElPTl9GSUVMRChsb2NhdGlvbik7CisJV1JJVEVfT0lE X0ZJRUxEKGN5Y2xlX21hcmtfdHlwZSk7CisJV1JJVEVfSU5UX0ZJRUxEKGN5Y2xlX21hcmtf dHlwbW9kKTsKKwlXUklURV9PSURfRklFTEQoY3ljbGVfbWFya19jb2xsYXRpb24pOworCVdS SVRFX09JRF9GSUVMRChjeWNsZV9tYXJrX25lb3ApOworfQorCiBzdGF0aWMgdm9pZAogX291 dENvbW1vblRhYmxlRXhwcihTdHJpbmdJbmZvIHN0ciwgY29uc3QgQ29tbW9uVGFibGVFeHBy ICpub2RlKQogewpAQCAtMzA1Niw2ICszMDg0LDggQEAgX291dENvbW1vblRhYmxlRXhwcihT dHJpbmdJbmZvIHN0ciwgY29uc3QgQ29tbW9uVGFibGVFeHByICpub2RlKQogCVdSSVRFX05P REVfRklFTEQoYWxpYXNjb2xuYW1lcyk7CiAJV1JJVEVfRU5VTV9GSUVMRChjdGVtYXRlcmlh bGl6ZWQsIENURU1hdGVyaWFsaXplKTsKIAlXUklURV9OT0RFX0ZJRUxEKGN0ZXF1ZXJ5KTsK KwlXUklURV9OT0RFX0ZJRUxEKHNlYXJjaF9jbGF1c2UpOworCVdSSVRFX05PREVfRklFTEQo Y3ljbGVfY2xhdXNlKTsKIAlXUklURV9MT0NBVElPTl9GSUVMRChsb2NhdGlvbik7CiAJV1JJ VEVfQk9PTF9GSUVMRChjdGVyZWN1cnNpdmUpOwogCVdSSVRFX0lOVF9GSUVMRChjdGVyZWZj b3VudCk7CkBAIC00MjI5LDYgKzQyNTksMTIgQEAgb3V0Tm9kZShTdHJpbmdJbmZvIHN0ciwg Y29uc3Qgdm9pZCAqb2JqKQogCQkJY2FzZSBUX1dpdGhDbGF1c2U6CiAJCQkJX291dFdpdGhD bGF1c2Uoc3RyLCBvYmopOwogCQkJCWJyZWFrOworCQkJY2FzZSBUX0NURVNlYXJjaENsYXVz ZToKKwkJCQlfb3V0Q1RFU2VhcmNoQ2xhdXNlKHN0ciwgb2JqKTsKKwkJCQlicmVhazsKKwkJ CWNhc2UgVF9DVEVDeWNsZUNsYXVzZToKKwkJCQlfb3V0Q1RFQ3ljbGVDbGF1c2Uoc3RyLCBv YmopOworCQkJCWJyZWFrOwogCQkJY2FzZSBUX0NvbW1vblRhYmxlRXhwcjoKIAkJCQlfb3V0 Q29tbW9uVGFibGVFeHByKHN0ciwgb2JqKTsKIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1 bmNzLmMKaW5kZXggMTY5ZDU1ODFiOS4uZmUxOTMzNTNjYSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1 bmNzLmMKQEAgLTQwOSw2ICs0MDksNDQgQEAgX3JlYWRSb3dNYXJrQ2xhdXNlKHZvaWQpCiAJ UkVBRF9ET05FKCk7CiB9CiAKKy8qCisgKiBfcmVhZENURVNlYXJjaENsYXVzZQorICovCitz dGF0aWMgQ1RFU2VhcmNoQ2xhdXNlICoKK19yZWFkQ1RFU2VhcmNoQ2xhdXNlKHZvaWQpCit7 CisJUkVBRF9MT0NBTFMoQ1RFU2VhcmNoQ2xhdXNlKTsKKworCVJFQURfTk9ERV9GSUVMRChz ZWFyY2hfY29sX2xpc3QpOworCVJFQURfQk9PTF9GSUVMRChzZWFyY2hfYnJlYWR0aF9maXJz dCk7CisJUkVBRF9TVFJJTkdfRklFTEQoc2VhcmNoX3NlcV9jb2x1bW4pOworCVJFQURfTE9D QVRJT05fRklFTEQobG9jYXRpb24pOworCisJUkVBRF9ET05FKCk7Cit9CisKKy8qCisgKiBf cmVhZENURUN5Y2xlQ2xhdXNlCisgKi8KK3N0YXRpYyBDVEVDeWNsZUNsYXVzZSAqCitfcmVh ZENURUN5Y2xlQ2xhdXNlKHZvaWQpCit7CisJUkVBRF9MT0NBTFMoQ1RFQ3ljbGVDbGF1c2Up OworCisJUkVBRF9OT0RFX0ZJRUxEKGN5Y2xlX2NvbF9saXN0KTsKKwlSRUFEX1NUUklOR19G SUVMRChjeWNsZV9tYXJrX2NvbHVtbik7CisJUkVBRF9OT0RFX0ZJRUxEKGN5Y2xlX21hcmtf dmFsdWUpOworCVJFQURfTk9ERV9GSUVMRChjeWNsZV9tYXJrX2RlZmF1bHQpOworCVJFQURf U1RSSU5HX0ZJRUxEKGN5Y2xlX3BhdGhfY29sdW1uKTsKKwlSRUFEX0xPQ0FUSU9OX0ZJRUxE KGxvY2F0aW9uKTsKKwlSRUFEX09JRF9GSUVMRChjeWNsZV9tYXJrX3R5cGUpOworCVJFQURf SU5UX0ZJRUxEKGN5Y2xlX21hcmtfdHlwbW9kKTsKKwlSRUFEX09JRF9GSUVMRChjeWNsZV9t YXJrX2NvbGxhdGlvbik7CisJUkVBRF9PSURfRklFTEQoY3ljbGVfbWFya19uZW9wKTsKKwor CVJFQURfRE9ORSgpOworfQorCiAvKgogICogX3JlYWRDb21tb25UYWJsZUV4cHIKICAqLwpA QCAtNDIxLDYgKzQ1OSw4IEBAIF9yZWFkQ29tbW9uVGFibGVFeHByKHZvaWQpCiAJUkVBRF9O T0RFX0ZJRUxEKGFsaWFzY29sbmFtZXMpOwogCVJFQURfRU5VTV9GSUVMRChjdGVtYXRlcmlh bGl6ZWQsIENURU1hdGVyaWFsaXplKTsKIAlSRUFEX05PREVfRklFTEQoY3RlcXVlcnkpOwor CVJFQURfTk9ERV9GSUVMRChzZWFyY2hfY2xhdXNlKTsKKwlSRUFEX05PREVfRklFTEQoY3lj bGVfY2xhdXNlKTsKIAlSRUFEX0xPQ0FUSU9OX0ZJRUxEKGxvY2F0aW9uKTsKIAlSRUFEX0JP T0xfRklFTEQoY3RlcmVjdXJzaXZlKTsKIAlSRUFEX0lOVF9GSUVMRChjdGVyZWZjb3VudCk7 CkBAIC0yNjUyLDYgKzI2OTIsMTAgQEAgcGFyc2VOb2RlU3RyaW5nKHZvaWQpCiAJCXJldHVy bl92YWx1ZSA9IF9yZWFkV2luZG93Q2xhdXNlKCk7CiAJZWxzZSBpZiAoTUFUQ0goIlJPV01B UktDTEFVU0UiLCAxMykpCiAJCXJldHVybl92YWx1ZSA9IF9yZWFkUm93TWFya0NsYXVzZSgp OworCWVsc2UgaWYgKE1BVENIKCJDVEVTRUFSQ0hDTEFVU0UiLCAxNSkpCisJCXJldHVybl92 YWx1ZSA9IF9yZWFkQ1RFU2VhcmNoQ2xhdXNlKCk7CisJZWxzZSBpZiAoTUFUQ0goIkNURUNZ Q0xFQ0xBVVNFIiwgMTQpKQorCQlyZXR1cm5fdmFsdWUgPSBfcmVhZENURUN5Y2xlQ2xhdXNl KCk7CiAJZWxzZSBpZiAoTUFUQ0goIkNPTU1PTlRBQkxFRVhQUiIsIDE1KSkKIAkJcmV0dXJu X3ZhbHVlID0gX3JlYWRDb21tb25UYWJsZUV4cHIoKTsKIAllbHNlIGlmIChNQVRDSCgiU0VU T1BFUkFUSU9OU1RNVCIsIDE2KSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9h bmFseXplLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvYW5hbHl6ZS5jCmluZGV4IDA4NGUwMGY3 M2QuLjBkM2Q3MjBlZjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9hbmFseXpl LmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2FuYWx5emUuYwpAQCAtMTc5OSw2ICsxNzk5 LDMzIEBAIHRyYW5zZm9ybVNldE9wZXJhdGlvblN0bXQoUGFyc2VTdGF0ZSAqcHN0YXRlLCBT ZWxlY3RTdG10ICpzdG10KQogCXJldHVybiBxcnk7CiB9CiAKKy8qCisgKiBNYWtlIGEgU29y dEdyb3VwQ2xhdXNlIG5vZGUgZm9yIGEgU2V0T3BlcmF0aW9uU3RtdCdzIGdyb3VwQ2xhdXNl cworICovCitTb3J0R3JvdXBDbGF1c2UgKgorbWFrZVNvcnRHcm91cENsYXVzZUZvclNldE9w KE9pZCByZXNjb2x0eXBlKQoreworCVNvcnRHcm91cENsYXVzZSAqZ3JwY2wgPSBtYWtlTm9k ZShTb3J0R3JvdXBDbGF1c2UpOworCU9pZAkJCXNvcnRvcDsKKwlPaWQJCQllcW9wOworCWJv b2wJCWhhc2hhYmxlOworCisJLyogZGV0ZXJtaW5lIHRoZSBlcW9wIGFuZCBvcHRpb25hbCBz b3J0b3AgKi8KKwlnZXRfc29ydF9ncm91cF9vcGVyYXRvcnMocmVzY29sdHlwZSwKKwkJCQkJ CQkgZmFsc2UsIHRydWUsIGZhbHNlLAorCQkJCQkJCSAmc29ydG9wLCAmZXFvcCwgTlVMTCwK KwkJCQkJCQkgJmhhc2hhYmxlKTsKKworCS8qIHdlIGRvbid0IGhhdmUgYSB0bGlzdCB5ZXQs IHNvIGNhbid0IGFzc2lnbiBzb3J0Z3JvdXByZWZzICovCisJZ3JwY2wtPnRsZVNvcnRHcm91 cFJlZiA9IDA7CisJZ3JwY2wtPmVxb3AgPSBlcW9wOworCWdycGNsLT5zb3J0b3AgPSBzb3J0 b3A7CisJZ3JwY2wtPm51bGxzX2ZpcnN0ID0gZmFsc2U7IC8qIE9LIHdpdGggb3Igd2l0aG91 dCBzb3J0b3AgKi8KKwlncnBjbC0+aGFzaGFibGUgPSBoYXNoYWJsZTsKKworCXJldHVybiBn cnBjbDsKK30KKwogLyoKICAqIHRyYW5zZm9ybVNldE9wZXJhdGlvblRyZWUKICAqCQlSZWN1 cnNpdmVseSB0cmFuc2Zvcm0gbGVhdmVzIGFuZCBpbnRlcm5hbCBub2RlcyBvZiBhIHNldC1v cCB0cmVlCkBAIC0yMDk5LDMxICsyMTI2LDE1IEBAIHRyYW5zZm9ybVNldE9wZXJhdGlvblRy ZWUoUGFyc2VTdGF0ZSAqcHN0YXRlLCBTZWxlY3RTdG10ICpzdG10LAogCQkJICovCiAJCQlp ZiAob3AtPm9wICE9IFNFVE9QX1VOSU9OIHx8ICFvcC0+YWxsKQogCQkJewotCQkJCVNvcnRH cm91cENsYXVzZSAqZ3JwY2wgPSBtYWtlTm9kZShTb3J0R3JvdXBDbGF1c2UpOwotCQkJCU9p ZAkJCXNvcnRvcDsKLQkJCQlPaWQJCQllcW9wOwotCQkJCWJvb2wJCWhhc2hhYmxlOwogCQkJ CVBhcnNlQ2FsbGJhY2tTdGF0ZSBwY2JzdGF0ZTsKIAogCQkJCXNldHVwX3BhcnNlcl9lcnJw b3NpdGlvbl9jYWxsYmFjaygmcGNic3RhdGUsIHBzdGF0ZSwKIAkJCQkJCQkJCQkJCSAgYmVz dGxvY2F0aW9uKTsKIAotCQkJCS8qIGRldGVybWluZSB0aGUgZXFvcCBhbmQgb3B0aW9uYWwg c29ydG9wICovCi0JCQkJZ2V0X3NvcnRfZ3JvdXBfb3BlcmF0b3JzKHJlc2NvbHR5cGUsCi0J CQkJCQkJCQkJIGZhbHNlLCB0cnVlLCBmYWxzZSwKLQkJCQkJCQkJCQkgJnNvcnRvcCwgJmVx b3AsIE5VTEwsCi0JCQkJCQkJCQkJICZoYXNoYWJsZSk7CisJCQkJb3AtPmdyb3VwQ2xhdXNl cyA9IGxhcHBlbmQob3AtPmdyb3VwQ2xhdXNlcywKKwkJCQkJCQkJCQkgICBtYWtlU29ydEdy b3VwQ2xhdXNlRm9yU2V0T3AocmVzY29sdHlwZSkpOwogCiAJCQkJY2FuY2VsX3BhcnNlcl9l cnJwb3NpdGlvbl9jYWxsYmFjaygmcGNic3RhdGUpOwotCi0JCQkJLyogd2UgZG9uJ3QgaGF2 ZSBhIHRsaXN0IHlldCwgc28gY2FuJ3QgYXNzaWduIHNvcnRncm91cHJlZnMgKi8KLQkJCQln cnBjbC0+dGxlU29ydEdyb3VwUmVmID0gMDsKLQkJCQlncnBjbC0+ZXFvcCA9IGVxb3A7Ci0J CQkJZ3JwY2wtPnNvcnRvcCA9IHNvcnRvcDsKLQkJCQlncnBjbC0+bnVsbHNfZmlyc3QgPSBm YWxzZTsgLyogT0sgd2l0aCBvciB3aXRob3V0IHNvcnRvcCAqLwotCQkJCWdycGNsLT5oYXNo YWJsZSA9IGhhc2hhYmxlOwotCi0JCQkJb3AtPmdyb3VwQ2xhdXNlcyA9IGxhcHBlbmQob3At Pmdyb3VwQ2xhdXNlcywgZ3JwY2wpOwogCQkJfQogCiAJCQkvKgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcGFyc2VyL2dyYW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKaW5k ZXggZWZjOWM5OTc1NC4uNmZiYTY5NmViMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFy c2VyL2dyYW0ueQorKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CkBAIC00OTUsNiAr NDk1LDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJl bG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKICV0eXBlIDxsaXN0Pglyb3cg ZXhwbGljaXRfcm93IGltcGxpY2l0X3JvdyB0eXBlX2xpc3QgYXJyYXlfZXhwcl9saXN0CiAl dHlwZSA8bm9kZT4JY2FzZV9leHByIGNhc2VfYXJnIHdoZW5fY2xhdXNlIGNhc2VfZGVmYXVs dAogJXR5cGUgPGxpc3Q+CXdoZW5fY2xhdXNlX2xpc3QKKyV0eXBlIDxub2RlPglvcHRfc2Vh cmNoX2NsYXVzZSBvcHRfY3ljbGVfY2xhdXNlCiAldHlwZSA8aXZhbD4Jc3ViX3R5cGUgb3B0 X21hdGVyaWFsaXplZAogJXR5cGUgPHZhbHVlPglOdW1lcmljT25seQogJXR5cGUgPGxpc3Q+ CU51bWVyaWNPbmx5X2xpc3QKQEAgLTYzMSw3ICs2MzIsNyBAQCBzdGF0aWMgTm9kZSAqbWFr ZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9k ZSAqcXVlcnkpOwogCUFTU0VSVElPTiBBU1NJR05NRU5UIEFTWU1NRVRSSUMgQVQgQVRUQUNI IEFUVFJJQlVURSBBVVRIT1JJWkFUSU9OCiAKIAlCQUNLV0FSRCBCRUZPUkUgQkVHSU5fUCBC RVRXRUVOIEJJR0lOVCBCSU5BUlkgQklUCi0JQk9PTEVBTl9QIEJPVEggQlkKKwlCT09MRUFO X1AgQk9USCBCUkVBRFRIIEJZCiAKIAlDQUNIRSBDQUxMIENBTExFRCBDQVNDQURFIENBU0NB REVEIENBU0UgQ0FTVCBDQVRBTE9HX1AgQ0hBSU4gQ0hBUl9QCiAJQ0hBUkFDVEVSIENIQVJB Q1RFUklTVElDUyBDSEVDSyBDSEVDS1BPSU5UIENMQVNTIENMT1NFCkBAIC02NDMsNyArNjQ0 LDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5h bWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAlDVVJSRU5UX1RJTUUgQ1VSUkVO VF9USU1FU1RBTVAgQ1VSUkVOVF9VU0VSIENVUlNPUiBDWUNMRQogCiAJREFUQV9QIERBVEFC QVNFIERBWV9QIERFQUxMT0NBVEUgREVDIERFQ0lNQUxfUCBERUNMQVJFIERFRkFVTFQgREVG QVVMVFMKLQlERUZFUlJBQkxFIERFRkVSUkVEIERFRklORVIgREVMRVRFX1AgREVMSU1JVEVS IERFTElNSVRFUlMgREVQRU5EUyBERVNDCisJREVGRVJSQUJMRSBERUZFUlJFRCBERUZJTkVS IERFTEVURV9QIERFTElNSVRFUiBERUxJTUlURVJTIERFUEVORFMgREVQVEggREVTQwogCURF VEFDSCBESUNUSU9OQVJZIERJU0FCTEVfUCBESVNDQVJEIERJU1RJTkNUIERPIERPQ1VNRU5U X1AgRE9NQUlOX1AKIAlET1VCTEVfUCBEUk9QCiAKQEAgLTExMzM4LDggKzExMzM5LDYgQEAg c2ltcGxlX3NlbGVjdDoKICAqIFdJVEggWyBSRUNVUlNJVkUgXSA8cXVlcnkgbmFtZT4gWyAo PGNvbHVtbj4sLi4uKSBdCiAgKgkJQVMgKHF1ZXJ5KSBbIFNFQVJDSCBvciBDWUNMRSBjbGF1 c2UgXQogICoKLSAqIFdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IHRoZSBTRUFSQ0ggb3Ig Q1lDTEUgY2xhdXNlLgotICoKICAqIFJlY29nbml6aW5nIFdJVEhfTEEgaGVyZSBhbGxvd3Mg YSBDVEUgdG8gYmUgbmFtZWQgVElNRSBvciBPUkRJTkFMSVRZLgogICovCiB3aXRoX2NsYXVz ZToKQEAgLTExMzcxLDEzICsxMTM3MCwxNSBAQCBjdGVfbGlzdDoKIAkJfCBjdGVfbGlzdCAn LCcgY29tbW9uX3RhYmxlX2V4cHIJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMyk7IH0KIAkJOwog Ci1jb21tb25fdGFibGVfZXhwcjogIG5hbWUgb3B0X25hbWVfbGlzdCBBUyBvcHRfbWF0ZXJp YWxpemVkICcoJyBQcmVwYXJhYmxlU3RtdCAnKScKK2NvbW1vbl90YWJsZV9leHByOiAgbmFt ZSBvcHRfbmFtZV9saXN0IEFTIG9wdF9tYXRlcmlhbGl6ZWQgJygnIFByZXBhcmFibGVTdG10 ICcpJyBvcHRfc2VhcmNoX2NsYXVzZSBvcHRfY3ljbGVfY2xhdXNlCiAJCQl7CiAJCQkJQ29t bW9uVGFibGVFeHByICpuID0gbWFrZU5vZGUoQ29tbW9uVGFibGVFeHByKTsKIAkJCQluLT5j dGVuYW1lID0gJDE7CiAJCQkJbi0+YWxpYXNjb2xuYW1lcyA9ICQyOwogCQkJCW4tPmN0ZW1h dGVyaWFsaXplZCA9ICQ0OwogCQkJCW4tPmN0ZXF1ZXJ5ID0gJDY7CisJCQkJbi0+c2VhcmNo X2NsYXVzZSA9IGNhc3ROb2RlKENURVNlYXJjaENsYXVzZSwgJDgpOworCQkJCW4tPmN5Y2xl X2NsYXVzZSA9IGNhc3ROb2RlKENURUN5Y2xlQ2xhdXNlLCAkOSk7CiAJCQkJbi0+bG9jYXRp b24gPSBAMTsKIAkJCQkkJCA9IChOb2RlICopIG47CiAJCQl9CkBAIC0xMTM4OSw2ICsxMTM5 MCw0OSBAQCBvcHRfbWF0ZXJpYWxpemVkOgogCQl8IC8qRU1QVFkqLwkJCQkJCQkJeyAkJCA9 IENURU1hdGVyaWFsaXplRGVmYXVsdDsgfQogCQk7CiAKK29wdF9zZWFyY2hfY2xhdXNlOgor CQlTRUFSQ0ggREVQVEggRklSU1RfUCBCWSBjb2x1bW5MaXN0IFNFVCBDb2xJZAorCQkJewor CQkJCUNURVNlYXJjaENsYXVzZSAqbiA9IG1ha2VOb2RlKENURVNlYXJjaENsYXVzZSk7CisJ CQkJbi0+c2VhcmNoX2NvbF9saXN0ID0gJDU7CisJCQkJbi0+c2VhcmNoX2JyZWFkdGhfZmly c3QgPSBmYWxzZTsKKwkJCQluLT5zZWFyY2hfc2VxX2NvbHVtbiA9ICQ3OworCQkJCW4tPmxv Y2F0aW9uID0gQDE7CisJCQkJJCQgPSAoTm9kZSAqKSBuOworCQkJfQorCQl8IFNFQVJDSCBC UkVBRFRIIEZJUlNUX1AgQlkgY29sdW1uTGlzdCBTRVQgQ29sSWQKKwkJCXsKKwkJCQlDVEVT ZWFyY2hDbGF1c2UgKm4gPSBtYWtlTm9kZShDVEVTZWFyY2hDbGF1c2UpOworCQkJCW4tPnNl YXJjaF9jb2xfbGlzdCA9ICQ1OworCQkJCW4tPnNlYXJjaF9icmVhZHRoX2ZpcnN0ID0gdHJ1 ZTsKKwkJCQluLT5zZWFyY2hfc2VxX2NvbHVtbiA9ICQ3OworCQkJCW4tPmxvY2F0aW9uID0g QDE7CisJCQkJJCQgPSAoTm9kZSAqKSBuOworCQkJfQorCQl8IC8qRU1QVFkqLworCQkJewor CQkJCSQkID0gTlVMTDsKKwkJCX0KKwkJOworCitvcHRfY3ljbGVfY2xhdXNlOgorCQlDWUNM RSBjb2x1bW5MaXN0IFNFVCBDb2xJZCBUTyBBZXhwckNvbnN0IERFRkFVTFQgQWV4cHJDb25z dCBVU0lORyBDb2xJZAorCQkJeworCQkJCUNURUN5Y2xlQ2xhdXNlICpuID0gbWFrZU5vZGUo Q1RFQ3ljbGVDbGF1c2UpOworCQkJCW4tPmN5Y2xlX2NvbF9saXN0ID0gJDI7CisJCQkJbi0+ Y3ljbGVfbWFya19jb2x1bW4gPSAkNDsKKwkJCQluLT5jeWNsZV9tYXJrX3ZhbHVlID0gJDY7 CisJCQkJbi0+Y3ljbGVfbWFya19kZWZhdWx0ID0gJDg7CisJCQkJbi0+Y3ljbGVfcGF0aF9j b2x1bW4gPSAkMTA7CisJCQkJbi0+bG9jYXRpb24gPSBAMTsKKwkJCQkkJCA9IChOb2RlICop IG47CisJCQl9CisJCXwgLypFTVBUWSovCisJCQl7CisJCQkJJCQgPSBOVUxMOworCQkJfQor CQk7CisKIG9wdF93aXRoX2NsYXVzZToKIAkJd2l0aF9jbGF1c2UJCQkJCQkJCXsgJCQgPSAk MTsgfQogCQl8IC8qRU1QVFkqLwkJCQkJCQkJeyAkJCA9IE5VTEw7IH0KQEAgLTE1MTU3LDYg KzE1MjAxLDcgQEAgdW5yZXNlcnZlZF9rZXl3b3JkOgogCQkJfCBCQUNLV0FSRAogCQkJfCBC RUZPUkUKIAkJCXwgQkVHSU5fUAorCQkJfCBCUkVBRFRICiAJCQl8IEJZCiAJCQl8IENBQ0hF CiAJCQl8IENBTEwKQEAgLTE1MjAxLDYgKzE1MjQ2LDcgQEAgdW5yZXNlcnZlZF9rZXl3b3Jk OgogCQkJfCBERUxJTUlURVIKIAkJCXwgREVMSU1JVEVSUwogCQkJfCBERVBFTkRTCisJCQl8 IERFUFRICiAJCQl8IERFVEFDSAogCQkJfCBESUNUSU9OQVJZCiAJCQl8IERJU0FCTEVfUApA QCAtMTU2NjgsNiArMTU3MTQsNyBAQCBiYXJlX2xhYmVsX2tleXdvcmQ6CiAJCQl8IEJJVAog CQkJfCBCT09MRUFOX1AKIAkJCXwgQk9USAorCQkJfCBCUkVBRFRICiAJCQl8IEJZCiAJCQl8 IENBQ0hFCiAJCQl8IENBTEwKQEAgLTE1NzMyLDYgKzE1Nzc5LDcgQEAgYmFyZV9sYWJlbF9r ZXl3b3JkOgogCQkJfCBERUxJTUlURVIKIAkJCXwgREVMSU1JVEVSUwogCQkJfCBERVBFTkRT CisJCQl8IERFUFRICiAJCQl8IERFU0MKIAkJCXwgREVUQUNICiAJCQl8IERJQ1RJT05BUlkK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9hZ2cuYyBiL3NyYy9iYWNr ZW5kL3BhcnNlci9wYXJzZV9hZ2cuYwppbmRleCA3ODNmM2ZlOGYyLi5kZDNkOTdkODVmIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfYWdnLmMKKysrIGIvc3JjL2Jh Y2tlbmQvcGFyc2VyL3BhcnNlX2FnZy5jCkBAIC01NDUsNiArNTQ1LDEwIEBAIGNoZWNrX2Fn Z2xldmVsc19hbmRfY29uc3RyYWludHMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpleHBy KQogCiAJCQlicmVhazsKIAorCQljYXNlIEVYUFJfS0lORF9DWUNMRV9NQVJLOgorCQkJZXJy a2luZCA9IHRydWU7CisJCQlicmVhazsKKwogCQkJLyoKIAkJCSAqIFRoZXJlIGlzIGludGVu dGlvbmFsbHkgbm8gZGVmYXVsdDogY2FzZSBoZXJlLCBzbyB0aGF0IHRoZQogCQkJICogY29t cGlsZXIgd2lsbCB3YXJuIGlmIHdlIGFkZCBhIG5ldyBQYXJzZUV4cHJLaW5kIHdpdGhvdXQK QEAgLTkzMyw2ICs5MzcsOSBAQCB0cmFuc2Zvcm1XaW5kb3dGdW5jQ2FsbChQYXJzZVN0YXRl ICpwc3RhdGUsIFdpbmRvd0Z1bmMgKndmdW5jLAogCQljYXNlIEVYUFJfS0lORF9HRU5FUkFU RURfQ09MVU1OOgogCQkJZXJyID0gXygid2luZG93IGZ1bmN0aW9ucyBhcmUgbm90IGFsbG93 ZWQgaW4gY29sdW1uIGdlbmVyYXRpb24gZXhwcmVzc2lvbnMiKTsKIAkJCWJyZWFrOworCQlj YXNlIEVYUFJfS0lORF9DWUNMRV9NQVJLOgorCQkJZXJya2luZCA9IHRydWU7CisJCQlicmVh azsKIAogCQkJLyoKIAkJCSAqIFRoZXJlIGlzIGludGVudGlvbmFsbHkgbm8gZGVmYXVsdDog Y2FzZSBoZXJlLCBzbyB0aGF0IHRoZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2Vy L3BhcnNlX2N0ZS5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2N0ZS5jCmluZGV4IDFm Y2E3NDg1Y2EuLmQxMzFhYTQyNWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9w YXJzZV9jdGUuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfY3RlLmMKQEAgLTE4 LDkgKzE4LDEzIEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAi bm9kZXMvbm9kZUZ1bmNzLmgiCiAjaW5jbHVkZSAicGFyc2VyL2FuYWx5emUuaCIKKyNpbmNs dWRlICJwYXJzZXIvcGFyc2VfY29lcmNlLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2Nv bGxhdGUuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfY3RlLmgiCisjaW5jbHVkZSAicGFy c2VyL3BhcnNlX2V4cHIuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1 ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL3R5cGNhY2hlLmgiCiAK IAogLyogRW51bWVyYXRpb24gb2YgY29udGV4dHMgaW4gd2hpY2ggYSBzZWxmLXJlZmVyZW5j ZSBpcyBkaXNhbGxvd2VkICovCkBAIC0zMzQsNiArMzM4LDE5NSBAQCBhbmFseXplQ1RFKFBh cnNlU3RhdGUgKnBzdGF0ZSwgQ29tbW9uVGFibGVFeHByICpjdGUpCiAJCWlmIChsY3R5cCAh PSBOVUxMIHx8IGxjdHlwbW9kICE9IE5VTEwgfHwgbGNjb2xsICE9IE5VTEwpCS8qIHNob3Vs ZG4ndCBoYXBwZW4gKi8KIAkJCWVsb2coRVJST1IsICJ3cm9uZyBudW1iZXIgb2Ygb3V0cHV0 IGNvbHVtbnMgaW4gV0lUSCIpOwogCX0KKworCWlmIChjdGUtPnNlYXJjaF9jbGF1c2UgfHwg Y3RlLT5jeWNsZV9jbGF1c2UpCisJeworCQlRdWVyeQkgICAqY3RlcXVlcnk7CisJCVNldE9w ZXJhdGlvblN0bXQgKnNvczsKKworCQlpZiAoIWN0ZS0+Y3RlcmVjdXJzaXZlKQorCQkJZXJl cG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJ CQkgZXJybXNnKCJXSVRIIHF1ZXJ5IGlzIG5vdCByZWN1cnNpdmUiKSwKKwkJCQkJIHBhcnNl cl9lcnJwb3NpdGlvbihwc3RhdGUsIGN0ZS0+bG9jYXRpb24pKSk7CisKKwkJLyoKKwkJICog U1FMIHJlcXVpcmVzIGEgV0lUSCBsaXN0IGVsZW1lbnQgKENURSkgdG8gYmUgImV4cGFuZGFi bGUiIGluIG9yZGVyCisJCSAqIHRvIGFsbG93IGEgc2VhcmNoIG9yIGN5Y2xlIGNsYXVzZS4g IFRoYXQgaXMgYSBzdHJvbmdlciByZXF1aXJlbWVudAorCQkgKiB0aGFuIGp1c3QgYmVpbmcg cmVjdXJzaXZlLiAgSXQgYmFzaWNhbGx5IG1lYW5zIHRoZSBxdWVyeSBleHByZXNzaW9uCisJ CSAqIGxvb2tzIGxpa2UKKwkJICoKKwkJICogICAgIG5vbi1yZWN1cnNpdmUgcXVlcnkgVU5J T04gW0FMTF0gcmVjdXJzaXZlIHF1ZXJ5CisJCSAqCisJCSAqIGFuZCB0aGF0IHRoZSByZWN1 cnNpdmUgcXVlcnkgaXMgbm90IGl0c2VsZiBhIHNldCBvcGVyYXRpb24uCisJCSAqCisJCSAq IEFzIG9mIHRoaXMgd3JpdGluZywgbW9zdCBvZiB0aGVzZSBjcml0ZXJpYSBhcmUgYWxyZWFk eSBzYXRpc2ZpZWQgYnkKKwkJICogYWxsIHJlY3Vyc2l2ZSBDVEVzIGFsbG93ZWQgYnkgUG9z dGdyZVNRTC4gIEluIHRoZSBmdXR1cmUsIGlmCisJCSAqIGZ1cnRoZXIgdmFyaWFudHMgcmVj dXJzaXZlIENURXMgYXJlIGFjY2VwdGVkLCB0aGVyZSBtaWdodCBiZQorCQkgKiBmdXJ0aGVy IGNoZWNrcyByZXF1aXJlZCBoZXJlIHRvIGRldGVybWluZSB3aGF0IGlzICJleHBhbmRhYmxl Ii4KKwkJICovCisKKwkJY3RlcXVlcnkgPSBjYXN0Tm9kZShRdWVyeSwgY3RlLT5jdGVxdWVy eSk7CisJCUFzc2VydChjdGVxdWVyeS0+c2V0T3BlcmF0aW9ucyk7CisJCXNvcyA9IGNhc3RO b2RlKFNldE9wZXJhdGlvblN0bXQsIGN0ZXF1ZXJ5LT5zZXRPcGVyYXRpb25zKTsKKworCQkv KgorCQkgKiBUaGlzIGxlZnQgc2lkZSBjaGVjayBpcyBub3QgcmVxdWlyZWQgZm9yIGV4cGFu ZGFiaWxpdHksIGJ1dAorCQkgKiByZXdyaXRlU2VhcmNoQW5kQ3ljbGUoKSBkb2Vzbid0IGN1 cnJlbnRseSBoYXZlIHN1cHBvcnQgZm9yIGl0LCBzbworCQkgKiB3ZSBjYXRjaCBpdCBoZXJl LgorCQkgKi8KKwkJaWYgKCFJc0Eoc29zLT5sYXJnLCBSYW5nZVRibFJlZikpCisJCQllcmVw b3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRF RCksCisJCQkJCSBlcnJtc2coIndpdGggYSBTRUFSQ0ggb3IgQ1lDTEUgY2xhdXNlLCB0aGUg bGVmdCBzaWRlIG9mIHRoZSBVTklPTiBtdXN0IGJlIGEgU0VMRUNUIikpKTsKKworCQlpZiAo IUlzQShzb3MtPnJhcmcsIFJhbmdlVGJsUmVmKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJIGVycm1zZygid2l0aCBh IFNFQVJDSCBvciBDWUNMRSBjbGF1c2UsIHRoZSByaWdodCBzaWRlIG9mIHRoZSBVTklPTiBt dXN0IGJlIGEgU0VMRUNUIikpKTsKKwl9CisKKwlpZiAoY3RlLT5zZWFyY2hfY2xhdXNlKQor CXsKKwkJTGlzdENlbGwgICAqbGM7CisJCUxpc3QJICAgKnNlZW4gPSBOSUw7CisKKwkJZm9y ZWFjaChsYywgY3RlLT5zZWFyY2hfY2xhdXNlLT5zZWFyY2hfY29sX2xpc3QpCisJCXsKKwkJ CVZhbHVlCSAgICpjb2xuYW1lID0gbGZpcnN0KGxjKTsKKworCQkJaWYgKCFsaXN0X21lbWJl cihjdGUtPmN0ZWNvbG5hbWVzLCBjb2xuYW1lKSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJ CQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQkJIGVycm1zZygic2Vh cmNoIGNvbHVtbiBcIiVzXCIgbm90IGluIFdJVEggcXVlcnkgY29sdW1uIGxpc3QiLAorCQkJ CQkJCQlzdHJWYWwoY29sbmFtZSkpLAorCQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3Rh dGUsIGN0ZS0+c2VhcmNoX2NsYXVzZS0+bG9jYXRpb24pKSk7CisKKwkJCWlmIChsaXN0X21l bWJlcihzZWVuLCBjb2xuYW1lKSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNv ZGUoRVJSQ09ERV9EVVBMSUNBVEVfQ09MVU1OKSwKKwkJCQkJCSBlcnJtc2coInNlYXJjaCBj b2x1bW4gXCIlc1wiIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSIsCisJCQkJCQkJCXN0clZh bChjb2xuYW1lKSksCisJCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgY3RlLT5z ZWFyY2hfY2xhdXNlLT5sb2NhdGlvbikpKTsKKwkJCXNlZW4gPSBsYXBwZW5kKHNlZW4sIGNv bG5hbWUpOworCQl9CisKKwkJaWYgKGxpc3RfbWVtYmVyKGN0ZS0+Y3RlY29sbmFtZXMsIG1h a2VTdHJpbmcoY3RlLT5zZWFyY2hfY2xhdXNlLT5zZWFyY2hfc2VxX2NvbHVtbikpKQorCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJ CQkJCWVycm1zZygic2VhcmNoIHNlcXVlbmNlIGNvbHVtbiBuYW1lIFwiJXNcIiBhbHJlYWR5 IHVzZWQgaW4gV0lUSCBxdWVyeSBjb2x1bW4gbGlzdCIsCisJCQkJCQkgICBjdGUtPnNlYXJj aF9jbGF1c2UtPnNlYXJjaF9zZXFfY29sdW1uKSwKKwkJCQkJcGFyc2VyX2VycnBvc2l0aW9u KHBzdGF0ZSwgY3RlLT5zZWFyY2hfY2xhdXNlLT5sb2NhdGlvbikpOworCX0KKworCWlmIChj dGUtPmN5Y2xlX2NsYXVzZSkKKwl7CisJCUxpc3RDZWxsICAgKmxjOworCQlMaXN0CSAgICpz ZWVuID0gTklMOworCQlUeXBlQ2FjaGVFbnRyeSAqdHlwZW50cnk7CisJCU9pZAkJCW9wOwor CisJCWZvcmVhY2gobGMsIGN0ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9jb2xfbGlzdCkKKwkJ eworCQkJVmFsdWUJICAgKmNvbG5hbWUgPSBsZmlyc3QobGMpOworCisJCQlpZiAoIWxpc3Rf bWVtYmVyKGN0ZS0+Y3RlY29sbmFtZXMsIGNvbG5hbWUpKQorCQkJCWVyZXBvcnQoRVJST1Is CisJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCQkgZXJybXNn KCJjeWNsZSBjb2x1bW4gXCIlc1wiIG5vdCBpbiBXSVRIIHF1ZXJ5IGNvbHVtbiBsaXN0IiwK KwkJCQkJCQkJc3RyVmFsKGNvbG5hbWUpKSwKKwkJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24o cHN0YXRlLCBjdGUtPmN5Y2xlX2NsYXVzZS0+bG9jYXRpb24pKSk7CisKKwkJCWlmIChsaXN0 X21lbWJlcihzZWVuLCBjb2xuYW1lKSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVy cmNvZGUoRVJSQ09ERV9EVVBMSUNBVEVfQ09MVU1OKSwKKwkJCQkJCSBlcnJtc2coImN5Y2xl IGNvbHVtbiBcIiVzXCIgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlIiwKKwkJCQkJCQkJc3Ry VmFsKGNvbG5hbWUpKSwKKwkJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBjdGUt PmN5Y2xlX2NsYXVzZS0+bG9jYXRpb24pKSk7CisJCQlzZWVuID0gbGFwcGVuZChzZWVuLCBj b2xuYW1lKTsKKwkJfQorCisJCWlmIChsaXN0X21lbWJlcihjdGUtPmN0ZWNvbG5hbWVzLCBt YWtlU3RyaW5nKGN0ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9tYXJrX2NvbHVtbikpKQorCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJ CQkJCWVycm1zZygiY3ljbGUgbWFyayBjb2x1bW4gbmFtZSBcIiVzXCIgYWxyZWFkeSB1c2Vk IGluIFdJVEggcXVlcnkgY29sdW1uIGxpc3QiLAorCQkJCQkJICAgY3RlLT5jeWNsZV9jbGF1 c2UtPmN5Y2xlX21hcmtfY29sdW1uKSwKKwkJCQkJcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0 ZSwgY3RlLT5jeWNsZV9jbGF1c2UtPmxvY2F0aW9uKSk7CisKKwkJY3RlLT5jeWNsZV9jbGF1 c2UtPmN5Y2xlX21hcmtfdmFsdWUgPSB0cmFuc2Zvcm1FeHByKHBzdGF0ZSwgY3RlLT5jeWNs ZV9jbGF1c2UtPmN5Y2xlX21hcmtfdmFsdWUsCisJCQkJCQkJCQkJCQkJCQlFWFBSX0tJTkRf Q1lDTEVfTUFSSyk7CisJCWN0ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9tYXJrX2RlZmF1bHQg PSB0cmFuc2Zvcm1FeHByKHBzdGF0ZSwgY3RlLT5jeWNsZV9jbGF1c2UtPmN5Y2xlX21hcmtf ZGVmYXVsdCwKKwkJCQkJCQkJCQkJCQkJCSAgRVhQUl9LSU5EX0NZQ0xFX01BUkspOworCisJ CWlmIChsaXN0X21lbWJlcihjdGUtPmN0ZWNvbG5hbWVzLCBtYWtlU3RyaW5nKGN0ZS0+Y3lj bGVfY2xhdXNlLT5jeWNsZV9wYXRoX2NvbHVtbikpKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCWVycm1zZygiY3ljbGUg cGF0aCBjb2x1bW4gbmFtZSBcIiVzXCIgYWxyZWFkeSB1c2VkIGluIFdJVEggcXVlcnkgY29s dW1uIGxpc3QiLAorCQkJCQkJICAgY3RlLT5jeWNsZV9jbGF1c2UtPmN5Y2xlX3BhdGhfY29s dW1uKSwKKwkJCQkJcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgY3RlLT5jeWNsZV9jbGF1 c2UtPmxvY2F0aW9uKSk7CisKKwkJaWYgKHN0cmNtcChjdGUtPmN5Y2xlX2NsYXVzZS0+Y3lj bGVfbWFya19jb2x1bW4sCisJCQkJICAgY3RlLT5jeWNsZV9jbGF1c2UtPmN5Y2xlX3BhdGhf Y29sdW1uKSA9PSAwKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJZXJyY29kZShFUlJDT0RF X1NZTlRBWF9FUlJPUiksCisJCQkJCWVycm1zZygiY3ljbGUgbWFyayBjb2x1bW4gbmFtZSBh bmQgY3ljbGUgcGF0aCBjb2x1bW4gbmFtZSBhcmUgdGhlIHNhbWUiKSwKKwkJCQkJcGFyc2Vy X2VycnBvc2l0aW9uKHBzdGF0ZSwgY3RlLT5jeWNsZV9jbGF1c2UtPmxvY2F0aW9uKSk7CisK KwkJY3RlLT5jeWNsZV9jbGF1c2UtPmN5Y2xlX21hcmtfdHlwZSA9IHNlbGVjdF9jb21tb25f dHlwZShwc3RhdGUsCisJCQkJCQkJCQkJCQkJCQkJbGlzdF9tYWtlMihjdGUtPmN5Y2xlX2Ns YXVzZS0+Y3ljbGVfbWFya192YWx1ZSwKKwkJCQkJCQkJCQkJCQkJCQkJCSAgIGN0ZS0+Y3lj bGVfY2xhdXNlLT5jeWNsZV9tYXJrX2RlZmF1bHQpLAorCQkJCQkJCQkJCQkJCQkJCSJDWUNM RSIsIE5VTEwpOworCQljdGUtPmN5Y2xlX2NsYXVzZS0+Y3ljbGVfbWFya192YWx1ZSA9IGNv ZXJjZV90b19jb21tb25fdHlwZShwc3RhdGUsCisJCQkJCQkJCQkJCQkJCQkJCWN0ZS0+Y3lj bGVfY2xhdXNlLT5jeWNsZV9tYXJrX3ZhbHVlLAorCQkJCQkJCQkJCQkJCQkJCQljdGUtPmN5 Y2xlX2NsYXVzZS0+Y3ljbGVfbWFya190eXBlLAorCQkJCQkJCQkJCQkJCQkJCQkiQ1lDTEUv U0VUL1RPIik7CisJCWN0ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9tYXJrX2RlZmF1bHQgPSBj b2VyY2VfdG9fY29tbW9uX3R5cGUocHN0YXRlLAorCQkJCQkJCQkJCQkJCQkJCQkgIGN0ZS0+ Y3ljbGVfY2xhdXNlLT5jeWNsZV9tYXJrX2RlZmF1bHQsCisJCQkJCQkJCQkJCQkJCQkJCSAg Y3RlLT5jeWNsZV9jbGF1c2UtPmN5Y2xlX21hcmtfdHlwZSwKKwkJCQkJCQkJCQkJCQkJCQkJ ICAiQ1lDTEUvU0VUL0RFRkFVTFQiKTsKKworCQljdGUtPmN5Y2xlX2NsYXVzZS0+Y3ljbGVf bWFya190eXBtb2QgPSBzZWxlY3RfY29tbW9uX3R5cG1vZChwc3RhdGUsCisJCQkJCQkJCQkJ CQkJCQkJCWxpc3RfbWFrZTIoY3RlLT5jeWNsZV9jbGF1c2UtPmN5Y2xlX21hcmtfdmFsdWUs CisJCQkJCQkJCQkJCQkJCQkJCQkJICAgY3RlLT5jeWNsZV9jbGF1c2UtPmN5Y2xlX21hcmtf ZGVmYXVsdCksCisJCQkJCQkJCQkJCQkJCQkJCWN0ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9t YXJrX3R5cGUpOworCisJCWN0ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9tYXJrX2NvbGxhdGlv biA9IHNlbGVjdF9jb21tb25fY29sbGF0aW9uKHBzdGF0ZSwKKwkJCQkJCQkJCQkJCQkJCQkJ CSAgbGlzdF9tYWtlMihjdGUtPmN5Y2xlX2NsYXVzZS0+Y3ljbGVfbWFya192YWx1ZSwKKwkJ CQkJCQkJCQkJCQkJCQkJCQkJCSBjdGUtPmN5Y2xlX2NsYXVzZS0+Y3ljbGVfbWFya19kZWZh dWx0KSwKKwkJCQkJCQkJCQkJCQkJCQkJCSAgdHJ1ZSk7CisKKwkJdHlwZW50cnkgPSBsb29r dXBfdHlwZV9jYWNoZShjdGUtPmN5Y2xlX2NsYXVzZS0+Y3ljbGVfbWFya190eXBlLCBUWVBF Q0FDSEVfRVFfT1BSKTsKKwkJaWYgKCF0eXBlbnRyeS0+ZXFfb3ByKQorCQkJZXJlcG9ydChF UlJPUiwKKwkJCQkJZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9GVU5DVElPTiksCisJCQkJ CWVycm1zZygiY291bGQgbm90IGlkZW50aWZ5IGFuIGVxdWFsaXR5IG9wZXJhdG9yIGZvciB0 eXBlICVzIiwKKwkJCQkJCSAgIGZvcm1hdF90eXBlX2JlKGN0ZS0+Y3ljbGVfY2xhdXNlLT5j eWNsZV9tYXJrX3R5cGUpKSk7CisJCW9wID0gZ2V0X25lZ2F0b3IodHlwZW50cnktPmVxX29w cik7CisJCWlmICghb3ApCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNP REVfVU5ERUZJTkVEX0ZVTkNUSU9OKSwKKwkJCQkJZXJybXNnKCJjb3VsZCBub3QgaWRlbnRp ZnkgYW4gaW5lcXVhbGl0eSBvcGVyYXRvciBmb3IgdHlwZSAlcyIsCisJCQkJCQkgICBmb3Jt YXRfdHlwZV9iZShjdGUtPmN5Y2xlX2NsYXVzZS0+Y3ljbGVfbWFya190eXBlKSkpOworCisJ CWN0ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9tYXJrX25lb3AgPSBvcDsKKwl9CisKKwlpZiAo Y3RlLT5zZWFyY2hfY2xhdXNlICYmIGN0ZS0+Y3ljbGVfY2xhdXNlKQorCXsKKwkJaWYgKHN0 cmNtcChjdGUtPnNlYXJjaF9jbGF1c2UtPnNlYXJjaF9zZXFfY29sdW1uLAorCQkJCSAgIGN0 ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9tYXJrX2NvbHVtbikgPT0gMCkKKwkJCWVyZXBvcnQo RVJST1IsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQllcnJt c2coInNlYXJjaCBzZXF1ZW5jZSBjb2x1bW4gbmFtZSBhbmQgY3ljbGUgbWFyayBjb2x1bW4g bmFtZSBhcmUgdGhlIHNhbWUiKSwKKwkJCQkJcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwg Y3RlLT5zZWFyY2hfY2xhdXNlLT5sb2NhdGlvbikpOworCisJCWlmIChzdHJjbXAoY3RlLT5z ZWFyY2hfY2xhdXNlLT5zZWFyY2hfc2VxX2NvbHVtbiwKKwkJCQkgICBjdGUtPmN5Y2xlX2Ns YXVzZS0+Y3ljbGVfcGF0aF9jb2x1bW4pID09IDApCisJCQllcmVwb3J0KEVSUk9SLAorCQkJ CQllcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJZXJybXNnKCJzZWFyY2hf c2VxdWVuY2UgY29sdW1uIG5hbWUgYW5kIGN5Y2xlIHBhdGggY29sdW1uIG5hbWUgYXJlIHRo ZSBzYW1lIiksCisJCQkJCXBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGN0ZS0+c2VhcmNo X2NsYXVzZS0+bG9jYXRpb24pKTsKKwl9CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4 cHIuYwppbmRleCAzNjAwMmYwNTlkLi5kNTY2M2FkOTNkIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJz ZV9leHByLmMKQEAgLTU2Nyw2ICs1NjcsNyBAQCB0cmFuc2Zvcm1Db2x1bW5SZWYoUGFyc2VT dGF0ZSAqcHN0YXRlLCBDb2x1bW5SZWYgKmNyZWYpCiAJCWNhc2UgRVhQUl9LSU5EX0NBTExf QVJHVU1FTlQ6CiAJCWNhc2UgRVhQUl9LSU5EX0NPUFlfV0hFUkU6CiAJCWNhc2UgRVhQUl9L SU5EX0dFTkVSQVRFRF9DT0xVTU46CisJCWNhc2UgRVhQUl9LSU5EX0NZQ0xFX01BUks6CiAJ CQkvKiBva2F5ICovCiAJCQlicmVhazsKIApAQCAtMTg0OSw2ICsxODUwLDcgQEAgdHJhbnNm b3JtU3ViTGluayhQYXJzZVN0YXRlICpwc3RhdGUsIFN1YkxpbmsgKnN1YmxpbmspCiAJCWNh c2UgRVhQUl9LSU5EX1JFVFVSTklORzoKIAkJY2FzZSBFWFBSX0tJTkRfVkFMVUVTOgogCQlj YXNlIEVYUFJfS0lORF9WQUxVRVNfU0lOR0xFOgorCQljYXNlIEVYUFJfS0lORF9DWUNMRV9N QVJLOgogCQkJLyogb2theSAqLwogCQkJYnJlYWs7CiAJCWNhc2UgRVhQUl9LSU5EX0NIRUNL X0NPTlNUUkFJTlQ6CkBAIC0zNDg4LDYgKzM0OTAsOCBAQCBQYXJzZUV4cHJLaW5kTmFtZShQ YXJzZUV4cHJLaW5kIGV4cHJLaW5kKQogCQkJcmV0dXJuICJXSEVSRSI7CiAJCWNhc2UgRVhQ Ul9LSU5EX0dFTkVSQVRFRF9DT0xVTU46CiAJCQlyZXR1cm4gIkdFTkVSQVRFRCBBUyI7CisJ CWNhc2UgRVhQUl9LSU5EX0NZQ0xFX01BUks6CisJCQlyZXR1cm4gIkNZQ0xFIjsKIAogCQkJ LyoKIAkJCSAqIFRoZXJlIGlzIGludGVudGlvbmFsbHkgbm8gZGVmYXVsdDogY2FzZSBoZXJl LCBzbyB0aGF0IHRoZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2Z1 bmMuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9mdW5jLmMKaW5kZXggMjNhYzJhMmZl Ni4uYjEzNTQzZDIyOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2Z1 bmMuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZnVuYy5jCkBAIC0yNTI3LDYg KzI1MjcsOSBAQCBjaGVja19zcmZfY2FsbF9wbGFjZW1lbnQoUGFyc2VTdGF0ZSAqcHN0YXRl LCBOb2RlICpsYXN0X3NyZiwgaW50IGxvY2F0aW9uKQogCQljYXNlIEVYUFJfS0lORF9HRU5F UkFURURfQ09MVU1OOgogCQkJZXJyID0gXygic2V0LXJldHVybmluZyBmdW5jdGlvbnMgYXJl IG5vdCBhbGxvd2VkIGluIGNvbHVtbiBnZW5lcmF0aW9uIGV4cHJlc3Npb25zIik7CiAJCQli cmVhazsKKwkJY2FzZSBFWFBSX0tJTkRfQ1lDTEVfTUFSSzoKKwkJCWVycmtpbmQgPSB0cnVl OworCQkJYnJlYWs7CiAKIAkJCS8qCiAJCQkgKiBUaGVyZSBpcyBpbnRlbnRpb25hbGx5IG5v IGRlZmF1bHQ6IGNhc2UgaGVyZSwgc28gdGhhdCB0aGUKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3BhcnNlci9wYXJzZV9yZWxhdGlvbi5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNl X3JlbGF0aW9uLmMKaW5kZXggYTU2YmQ4NjE4MS4uYTVlZmQzOTQ5OSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3JlbGF0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQv cGFyc2VyL3BhcnNlX3JlbGF0aW9uLmMKQEAgLTIyMzUsNiArMjIzNSw4IEBAIGFkZFJhbmdl VGFibGVFbnRyeUZvckNURShQYXJzZVN0YXRlICpwc3RhdGUsCiAJaW50CQkJbnVtYWxpYXNl czsKIAlpbnQJCQl2YXJhdHRubzsKIAlMaXN0Q2VsbCAgICpsYzsKKwlpbnQJCQluX2RvbnRl eHBhbmRfY29sdW1ucyA9IDA7CisJUGFyc2VOYW1lc3BhY2VJdGVtICpwc2k7CiAKIAlBc3Nl cnQocHN0YXRlICE9IE5VTEwpOwogCkBAIC0yMjY3LDkgKzIyNjksOSBAQCBhZGRSYW5nZVRh YmxlRW50cnlGb3JDVEUoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkgcGFyc2VyX2VycnBv c2l0aW9uKHBzdGF0ZSwgcnYtPmxvY2F0aW9uKSkpOwogCX0KIAotCXJ0ZS0+Y29sdHlwZXMg PSBjdGUtPmN0ZWNvbHR5cGVzOwotCXJ0ZS0+Y29sdHlwbW9kcyA9IGN0ZS0+Y3RlY29sdHlw bW9kczsKLQlydGUtPmNvbGNvbGxhdGlvbnMgPSBjdGUtPmN0ZWNvbGNvbGxhdGlvbnM7CisJ cnRlLT5jb2x0eXBlcyA9IGxpc3RfY29weShjdGUtPmN0ZWNvbHR5cGVzKTsKKwlydGUtPmNv bHR5cG1vZHMgPSBsaXN0X2NvcHkoY3RlLT5jdGVjb2x0eXBtb2RzKTsKKwlydGUtPmNvbGNv bGxhdGlvbnMgPSBsaXN0X2NvcHkoY3RlLT5jdGVjb2xjb2xsYXRpb25zKTsKIAogCXJ0ZS0+ YWxpYXMgPSBhbGlhczsKIAlpZiAoYWxpYXMpCkBAIC0yMjk0LDYgKzIyOTYsMzQgQEAgYWRk UmFuZ2VUYWJsZUVudHJ5Rm9yQ1RFKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAogCXJ0ZS0+ZXJl ZiA9IGVyZWY7CiAKKwlpZiAoY3RlLT5zZWFyY2hfY2xhdXNlKQorCXsKKwkJcnRlLT5lcmVm LT5jb2xuYW1lcyA9IGxhcHBlbmQocnRlLT5lcmVmLT5jb2xuYW1lcywgbWFrZVN0cmluZyhj dGUtPnNlYXJjaF9jbGF1c2UtPnNlYXJjaF9zZXFfY29sdW1uKSk7CisJCWlmIChjdGUtPnNl YXJjaF9jbGF1c2UtPnNlYXJjaF9icmVhZHRoX2ZpcnN0KQorCQkJcnRlLT5jb2x0eXBlcyA9 IGxhcHBlbmRfb2lkKHJ0ZS0+Y29sdHlwZXMsIFJFQ09SRE9JRCk7CisJCWVsc2UKKwkJCXJ0 ZS0+Y29sdHlwZXMgPSBsYXBwZW5kX29pZChydGUtPmNvbHR5cGVzLCBSRUNPUkRBUlJBWU9J RCk7CisJCXJ0ZS0+Y29sdHlwbW9kcyA9IGxhcHBlbmRfaW50KHJ0ZS0+Y29sdHlwbW9kcywg LTEpOworCQlydGUtPmNvbGNvbGxhdGlvbnMgPSBsYXBwZW5kX29pZChydGUtPmNvbGNvbGxh dGlvbnMsIEludmFsaWRPaWQpOworCisJCW5fZG9udGV4cGFuZF9jb2x1bW5zICs9IDE7CisJ fQorCisJaWYgKGN0ZS0+Y3ljbGVfY2xhdXNlKQorCXsKKwkJcnRlLT5lcmVmLT5jb2xuYW1l cyA9IGxhcHBlbmQocnRlLT5lcmVmLT5jb2xuYW1lcywgbWFrZVN0cmluZyhjdGUtPmN5Y2xl X2NsYXVzZS0+Y3ljbGVfbWFya19jb2x1bW4pKTsKKwkJcnRlLT5jb2x0eXBlcyA9IGxhcHBl bmRfb2lkKHJ0ZS0+Y29sdHlwZXMsIGN0ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9tYXJrX3R5 cGUpOworCQlydGUtPmNvbHR5cG1vZHMgPSBsYXBwZW5kX2ludChydGUtPmNvbHR5cG1vZHMs IGN0ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9tYXJrX3R5cG1vZCk7CisJCXJ0ZS0+Y29sY29s bGF0aW9ucyA9IGxhcHBlbmRfb2lkKHJ0ZS0+Y29sY29sbGF0aW9ucywgY3RlLT5jeWNsZV9j bGF1c2UtPmN5Y2xlX21hcmtfY29sbGF0aW9uKTsKKworCQlydGUtPmVyZWYtPmNvbG5hbWVz ID0gbGFwcGVuZChydGUtPmVyZWYtPmNvbG5hbWVzLCBtYWtlU3RyaW5nKGN0ZS0+Y3ljbGVf Y2xhdXNlLT5jeWNsZV9wYXRoX2NvbHVtbikpOworCQlydGUtPmNvbHR5cGVzID0gbGFwcGVu ZF9vaWQocnRlLT5jb2x0eXBlcywgUkVDT1JEQVJSQVlPSUQpOworCQlydGUtPmNvbHR5cG1v ZHMgPSBsYXBwZW5kX2ludChydGUtPmNvbHR5cG1vZHMsIC0xKTsKKwkJcnRlLT5jb2xjb2xs YXRpb25zID0gbGFwcGVuZF9vaWQocnRlLT5jb2xjb2xsYXRpb25zLCBJbnZhbGlkT2lkKTsK KworCQluX2RvbnRleHBhbmRfY29sdW1ucyArPSAyOworCX0KKwogCS8qCiAJICogU2V0IGZs YWdzIGFuZCBhY2Nlc3MgcGVybWlzc2lvbnMuCiAJICoKQEAgLTIzMjEsOSArMjM1MSwxOSBA QCBhZGRSYW5nZVRhYmxlRW50cnlGb3JDVEUoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCSAqIEJ1 aWxkIGEgUGFyc2VOYW1lc3BhY2VJdGVtLCBidXQgZG9uJ3QgYWRkIGl0IHRvIHRoZSBwc3Rh dGUncyBuYW1lc3BhY2UKIAkgKiBsaXN0IC0tLSBjYWxsZXIgbXVzdCBkbyB0aGF0IGlmIGFw cHJvcHJpYXRlLgogCSAqLwotCXJldHVybiBidWlsZE5TSXRlbUZyb21MaXN0cyhydGUsIGxp c3RfbGVuZ3RoKHBzdGF0ZS0+cF9ydGFibGUpLAorCXBzaSA9IGJ1aWxkTlNJdGVtRnJvbUxp c3RzKHJ0ZSwgbGlzdF9sZW5ndGgocHN0YXRlLT5wX3J0YWJsZSksCiAJCQkJCQkJCXJ0ZS0+ Y29sdHlwZXMsIHJ0ZS0+Y29sdHlwbW9kcywKIAkJCQkJCQkJcnRlLT5jb2xjb2xsYXRpb25z KTsKKworCS8qCisJICogVGhlIGNvbHVtbnMgYWRkZWQgYnkgc2VhcmNoIGFuZCBjeWNsZSBj bGF1c2VzIGFyZSBub3QgaW5jbHVkZWQgaW4gc3RhcgorCSAqIGV4cGFuc2lvbiBpbiBxdWVy aWVzIGNvbnRhaW5lZCBpbiB0aGUgQ1RFLgorCSAqLworCWlmIChydGUtPmN0ZWxldmVsc3Vw ID4gMCkKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBuX2RvbnRleHBhbmRfY29sdW1uczsgaSsr KQorCQkJcHNpLT5wX25zY29sdW1uc1tsaXN0X2xlbmd0aChwc2ktPnBfcnRlLT5lcmVmLT5j b2xuYW1lcykgLSAxIC0gaV0ucF9kb250ZXhwYW5kID0gdHJ1ZTsKKworCXJldHVybiBwc2k7 CiB9CiAKIC8qCkBAIC0zMDA4LDcgKzMwNDgsMTEgQEAgZXhwYW5kTlNJdGVtVmFycyhQYXJz ZU5hbWVzcGFjZUl0ZW0gKm5zaXRlbSwKIAkJY29uc3QgY2hhciAqY29sbmFtZSA9IHN0clZh bChjb2xuYW1ldmFsKTsKIAkJUGFyc2VOYW1lc3BhY2VDb2x1bW4gKm5zY29sID0gbnNpdGVt LT5wX25zY29sdW1ucyArIGNvbGluZGV4OwogCi0JCWlmIChjb2xuYW1lWzBdKQorCQlpZiAo bnNjb2wtPnBfZG9udGV4cGFuZCkKKwkJeworCQkJLyogc2tpcCAqLworCQl9CisJCWVsc2Ug aWYgKGNvbG5hbWVbMF0pCiAJCXsKIAkJCVZhcgkJICAgKnZhcjsKIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jIGIvc3JjL2JhY2tlbmQvcGFyc2Vy L3BhcnNlX3RhcmdldC5jCmluZGV4IDlkZTBjZmY4MzMuLjcwMTIwYmI1MzcgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYworKysgYi9zcmMvYmFja2Vu ZC9wYXJzZXIvcGFyc2VfdGFyZ2V0LmMKQEAgLTQwOSw4ICs0MDksMjMgQEAgbWFya1Rhcmdl dExpc3RPcmlnaW4oUGFyc2VTdGF0ZSAqcHN0YXRlLCBUYXJnZXRFbnRyeSAqdGxlLAogCQkJ ewogCQkJCUNvbW1vblRhYmxlRXhwciAqY3RlID0gR2V0Q1RFRm9yUlRFKHBzdGF0ZSwgcnRl LCBuZXRsZXZlbHN1cCk7CiAJCQkJVGFyZ2V0RW50cnkgKnN0ZTsKKwkJCQlMaXN0CSAgICp0 bCA9IEdldENURVRhcmdldExpc3QoY3RlKTsKKwkJCQlpbnQJCQlleHRyYV9jb2xzID0gMDsK KworCQkJCS8qCisJCQkJICogUlRFIGZvciBDVEUgd2lsbCBhbHJlYWR5IGhhdmUgdGhlIHNl YXJjaCBhbmQgY3ljbGUgY29sdW1ucworCQkJCSAqIGFkZGVkLCBidXQgdGhlIHN1YnF1ZXJ5 IHdvbid0LCBzbyBza2lwIGxvb2tpbmcgdGhvc2UgdXAuCisJCQkJICovCisJCQkJaWYgKGN0 ZS0+c2VhcmNoX2NsYXVzZSkKKwkJCQkJZXh0cmFfY29scyArPSAxOworCQkJCWlmIChjdGUt PmN5Y2xlX2NsYXVzZSkKKwkJCQkJZXh0cmFfY29scyArPSAyOworCQkJCWlmIChleHRyYV9j b2xzICYmCisJCQkJCWF0dG51bSA+IGxpc3RfbGVuZ3RoKHRsKSAmJgorCQkJCQlhdHRudW0g PD0gbGlzdF9sZW5ndGgodGwpICsgZXh0cmFfY29scykKKwkJCQkJYnJlYWs7CiAKLQkJCQlz dGUgPSBnZXRfdGxlX2J5X3Jlc25vKEdldENURVRhcmdldExpc3QoY3RlKSwgYXR0bnVtKTsK KwkJCQlzdGUgPSBnZXRfdGxlX2J5X3Jlc25vKHRsLCBhdHRudW0pOwogCQkJCWlmIChzdGUg PT0gTlVMTCB8fCBzdGUtPnJlc2p1bmspCiAJCQkJCWVsb2coRVJST1IsICJDVEUgJXMgZG9l cyBub3QgaGF2ZSBhdHRyaWJ1dGUgJWQiLAogCQkJCQkJIHJ0ZS0+ZXJlZi0+YWxpYXNuYW1l LCBhdHRudW0pOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmV3cml0ZS9NYWtlZmlsZSBi L3NyYy9iYWNrZW5kL3Jld3JpdGUvTWFrZWZpbGUKaW5kZXggYjQzNWIzZTk4NS4uNDY4MDc1 MmU2YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmV3cml0ZS9NYWtlZmlsZQorKysgYi9z cmMvYmFja2VuZC9yZXdyaXRlL01ha2VmaWxlCkBAIC0xNyw2ICsxNyw3IEBAIE9CSlMgPSBc CiAJcmV3cml0ZUhhbmRsZXIubyBcCiAJcmV3cml0ZU1hbmlwLm8gXAogCXJld3JpdGVSZW1v dmUubyBcCisJcmV3cml0ZVNlYXJjaEN5Y2xlLm8gXAogCXJld3JpdGVTdXBwb3J0Lm8gXAog CXJvd3NlY3VyaXR5Lm8KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdy aXRlSGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRlSGFuZGxlci5jCmlu ZGV4IGMyNTAxMmYzMjUuLmNhNTMyMjE3N2IgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Jl d3JpdGUvcmV3cml0ZUhhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3Jp dGVIYW5kbGVyLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJyZXdyaXRlL3Jld3Jp dGVEZWZpbmUuaCIKICNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmgiCiAjaW5j bHVkZSAicmV3cml0ZS9yZXdyaXRlTWFuaXAuaCIKKyNpbmNsdWRlICJyZXdyaXRlL3Jld3Jp dGVTZWFyY2hDeWNsZS5oIgogI2luY2x1ZGUgInJld3JpdGUvcm93c2VjdXJpdHkuaCIKICNp bmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5o IgpAQCAtMjA3OSw2ICsyMDgwLDIzIEBAIGZpcmVSSVJydWxlcyhRdWVyeSAqcGFyc2V0cmVl LCBMaXN0ICphY3RpdmVSSVJzKQogCWludAkJCXJ0X2luZGV4OwogCUxpc3RDZWxsICAgKmxj OwogCisJLyoKKwkgKiBFeHBhbmQgU0VBUkNIIGFuZCBDWUNMRSBjbGF1c2VzIGluIENURXMu CisJICoKKwkgKiBUaGlzIGlzIGp1c3QgYSBjb252ZW5pZW50IHBsYWNlIHRvIGRvIHRoaXMs IHNpbmNlIHdlIGFyZSBhbHJlYWR5CisJICogbG9va2luZyBhdCBlYWNoIFF1ZXJ5LgorCSAq LworCWZvcmVhY2gobGMsIHBhcnNldHJlZS0+Y3RlTGlzdCkKKwl7CisJCUNvbW1vblRhYmxl RXhwciAqY3RlID0gbGZpcnN0X25vZGUoQ29tbW9uVGFibGVFeHByLCBsYyk7CisKKwkJaWYg KGN0ZS0+c2VhcmNoX2NsYXVzZSB8fCBjdGUtPmN5Y2xlX2NsYXVzZSkKKwkJeworCQkJY3Rl ID0gcmV3cml0ZVNlYXJjaEFuZEN5Y2xlKGN0ZSk7CisJCQlsZmlyc3QobGMpID0gY3RlOwor CQl9CisJfQorCiAJLyoKIAkgKiBkb24ndCB0cnkgdG8gY29udmVydCB0aGlzIGludG8gYSBm b3JlYWNoIGxvb3AsIGJlY2F1c2UgcnRhYmxlIGxpc3QgY2FuCiAJICogZ2V0IGNoYW5nZWQg ZWFjaCB0aW1lIHRocm91Z2guLi4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jld3JpdGUv cmV3cml0ZVNlYXJjaEN5Y2xlLmMgYi9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVTZWFy Y2hDeWNsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjFhN2Q2 NmZhNmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVT ZWFyY2hDeWNsZS5jCkBAIC0wLDAgKzEsNjY4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqCisgKiByZXdyaXRlU2VhcmNoQ3ljbGUuYworICoJCVN1cHBvcnQgZm9yIHJld3JpdGlu ZyBTRUFSQ0ggYW5kIENZQ0xFIGNsYXVzZXMuCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0 IChjKSAxOTk2LTIwMjAsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNp dHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNr ZW5kL3Jld3JpdGUvcmV3cml0ZVNlYXJjaEN5Y2xlLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJjYXRhbG9n L3BnX29wZXJhdG9yX2QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGVfZC5oIgorI2lu Y2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgorI2luY2x1ZGUgIm5vZGVzL3BnX2xpc3QuaCIK KyNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVzLmgiCisjaW5jbHVkZSAibm9kZXMvcHJpbW5v ZGVzLmgiCisjaW5jbHVkZSAicGFyc2VyL2FuYWx5emUuaCIKKyNpbmNsdWRlICJwYXJzZXIv cGFyc2V0cmVlLmgiCisjaW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlTWFuaXAuaCIKKyNpbmNs dWRlICJyZXdyaXRlL3Jld3JpdGVTZWFyY2hDeWNsZS5oIgorI2luY2x1ZGUgInV0aWxzL2Zt Z3JvaWRzLmgiCisKKworLyotLS0tLS0tLS0tCisgKiBSZXdyaXRlIGEgQ1RFIHdpdGggU0VB UkNIIG9yIENZQ0xFIGNsYXVzZQorICoKKyAqIENvbnNpZGVyIGEgQ1RFIGxpa2UKKyAqCisg KiBXSVRIIFJFQ1VSU0lWRSBjdGVuYW1lIChjb2wxLCBjb2wyLCBjb2wzKSBBUyAoCisgKiAg ICAgcXVlcnkxCisgKiAgIFVOSU9OIFtBTExdCisgKiAgICAgU0VMRUNUIHRyb3NsIEZST00g Y3RlbmFtZQorICogKQorICoKKyAqIFdpdGggYSBzZWFyY2ggY2xhdXNlCisgKgorICogU0VB UkNIIEJSRUFEVEggRklSU1QgQlkgY29sMSwgY29sMiBTRVQgc3FjCisgKgorICogdGhlIENU RSBpcyByZXdyaXR0ZW4gdG8KKyAqCisgKiBXSVRIIFJFQ1VSU0lWRSBjdGVuYW1lIChjb2wx LCBjb2wyLCBjb2wzLCBzcWMpIEFTICgKKyAqICAgICBTRUxFQ1QgY29sMSwgY29sMiwgY29s MywgICAgICAgICAgICAgICAtLSBvcmlnaW5hbCBXSVRIIGNvbHVtbiBsaXN0CisgKiAgICAg ICAgICAgIFJPVygwLCBjb2wxLCBjb2wyKSAgICAgICAgICAgICAgLS0gaW5pdGlhbCByb3cg b2Ygc2VhcmNoIGNvbHVtbnMKKyAqICAgICAgIEZST00gKHF1ZXJ5MSkgIipUTE9DUk4qIiAo Y29sMSwgY29sMiwgY29sMykKKyAqICAgVU5JT04gW0FMTF0KKyAqICAgICBTRUxFQ1QgY29s MSwgY29sMiwgY29sMywgICAgICAgICAgICAgICAtLSBzYW1lIGFzIGFib3ZlCisgKiAgICAg ICAgICAgIFJPVyhzcWMuZGVwdGggKyAxLCBjb2wxLCBjb2wyKSAgLS0gY291bnQgZGVwdGgK KyAqICAgICAgIEZST00gKFNFTEVDVCB0cm9zbCwgY3RlbmFtZS5zcWMgRlJPTSBjdGVuYW1l KSAiKlRST0NSTioiIChjb2wxLCBjb2wyLCBjb2wzLCBzcWMpCisgKiApCisgKgorICogKFRo aXMgaXNuJ3QgcXVpdGUgbGVnYWwgU1FMOiBzcWMuZGVwdGggaXMgbWVhbnQgdG8gcmVmZXIg dG8gdGhlIGZpcnN0CisgKiBjb2x1bW4gb2Ygc3FjLCB3aGljaCBoYXMgYSByb3cgdHlwZSwg YnV0IHRoZSBmaWVsZCBuYW1lcyBhcmUgbm90IGRlZmluZWQKKyAqIGhlcmUuICBSZXByZXNl bnRpbmcgdGhpcyBwcm9wZXJseSBpbiBTUUwgd291bGQgYmUgbW9yZSBjb21wbGljYXRlZCAo YW5kIHRoZQorICogU1FMIHN0YW5kYXJkIGFjdHVhbGx5IGRvZXMgaXQgaW4gdGhhdCBtb3Jl IGNvbXBsaWNhdGVkIHdheSksIGJ1dCB0aGUKKyAqIGludGVybmFsIHJlcHJlc2VudGF0aW9u IGFsbG93cyB1cyB0byBjb25zdHJ1Y3QgaXQgdGhpcyB3YXkuKQorICoKKyAqIFdpdGggYSBz ZWFyY2ggY2FsdXNlCisgKgorICogU0VBUkNIIERFUFRIIEZJUlNUIEJZIGNvbDEsIGNvbDIg U0VUIHNxYworICoKKyAqIHRoZSBDVEUgaXMgcmV3cml0dGVuIHRvCisgKgorICogV0lUSCBS RUNVUlNJVkUgY3RlbmFtZSAoY29sMSwgY29sMiwgY29sMywgc3FjKSBBUyAoCisgKiAgICAg U0VMRUNUIGNvbDEsIGNvbDIsIGNvbDMsICAgICAgICAgICAgICAgLS0gb3JpZ2luYWwgV0lU SCBjb2x1bW4gbGlzdAorICogICAgICAgICAgICBBUlJBWVtST1coY29sMSwgY29sMildICAg ICAgICAgIC0tIGluaXRpYWwgcm93IG9mIHNlYXJjaCBjb2x1bW5zCisgKiAgICAgICBGUk9N IChxdWVyeTEpICIqVExPQ1JOKiIgKGNvbDEsIGNvbDIsIGNvbDMpCisgKiAgIFVOSU9OIFtB TExdCisgKiAgICAgU0VMRUNUIGNvbDEsIGNvbDIsIGNvbDMsICAgICAgICAgICAgICAgLS0g c2FtZSBhcyBhYm92ZQorICogICAgICAgICAgICBzcWMgfHwgQVJSQVlbUk9XKGNvbDEsIGNv bDIpXSAgIC0tIHJlY29yZCByb3dzIHNlZW4KKyAqICAgICAgIEZST00gKFNFTEVDVCB0cm9z bCwgY3RlbmFtZS5zcWMgRlJPTSBjdGVuYW1lKSAiKlRST0NSTioiIChjb2wxLCBjb2wyLCBj b2wzLCBzcWMpCisgKiApCisgKgorICogV2l0aCBhIGN5Y2xlIGNsYXVzZQorICoKKyAqIENZ Q0xFIGNvbDEsIGNvbDIgU0VUIGNtYyBUTyAnWScgREVGQVVMVCAnTicgVVNJTkcgY3BhCisg KgorICogKGNtYyA9IGN5Y2xlIG1hcmsgY29sdW1uLCBjcGEgPSBjeWNsZSBwYXRoKSB0aGUg Q1RFIGlzIHJld3JpdHRlbiB0bworICoKKyAqIFdJVEggUkVDVVJTSVZFIGN0ZW5hbWUgKGNv bDEsIGNvbDIsIGNvbDMsIGNtYywgY3BhKSBBUyAoCisgKiAgICAgU0VMRUNUIGNvbDEsIGNv bDIsIGNvbDMsICAgICAgICAgICAgICAgLS0gb3JpZ2luYWwgV0lUSCBjb2x1bW4gbGlzdAor ICogICAgICAgICAgICAnTicsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGN5Y2xl IG1hcmsgZGVmYXVsdAorICogICAgICAgICAgICBBUlJBWVtST1coY29sMSwgY29sMildICAg ICAgICAgIC0tIGluaXRpYWwgcm93IG9mIGN5Y2xlIGNvbHVtbnMKKyAqICAgICAgIEZST00g KHF1ZXJ5MSkgIipUTE9DUk4qIiAoY29sMSwgY29sMiwgY29sMykKKyAqICAgVU5JT04gW0FM TF0KKyAqICAgICBTRUxFQ1QgY29sMSwgY29sMiwgY29sMywgICAgICAgICAgICAgICAtLSBz YW1lIGFzIGFib3ZlCisgKiAgICAgICAgICAgIENBU0UgV0hFTiBST1coY29sMSwgY29sMikg PSBBTlkgKEFSUkFZW2NwYV0pIFRIRU4gJ1knIEVMU0UgJ04nIEVORCwgIC0tIGNvbXB1dGUg Y3ljbGUgbWFyayBjb2x1bW4KKyAqICAgICAgICAgICAgY3BhIHx8IEFSUkFZW1JPVyhjb2wx LCBjb2wyKV0gICAtLSByZWNvcmQgcm93cyBzZWVuCisgKiAgICAgICBGUk9NIChTRUxFQ1Qg dHJvc2wsIGN0ZW5hbWUuY21jLCBjdGVuYW1lLmNwYSBGUk9NIGN0ZW5hbWUpICIqVFJPQ1JO KiIgKGNvbDEsIGNvbDIsIGNvbDMsIGNtYywgY3BhKQorICogICAgICAgV0hFUkUgY21jIDw+ ICdZJworICogKQorICoKKyAqIFRoZSBleHByZXNzaW9uIHRvIGNvbXB1dGUgdGhlIGN5Y2xl IG1hcmsgY29sdW1uIGluIHRoZSByaWdodC1oYW5kIHF1ZXJ5IGlzCisgKiB3cml0dGVuIGFz CisgKgorICogQ0FTRSBXSEVOIFJPVyhjb2wxLCBjb2wyKSBJTiAoU0VMRUNUIHAuKiBGUk9N IFRBQkxFKGNwYSkgcCkgVEhFTiBjbXYgRUxTRSBjbWQgRU5ECisgKgorICogaW4gdGhlIFNR TCBzdGFuZGFyZCwgYnV0IGluIFBvc3RncmVTUUwgd2UgY2FuIHVzZSB0aGUgc2NhbGFyLWFy cmF5IG9wZXJhdG9yCisgKiBleHByZXNzaW9uIHNob3duIGFib3ZlLgorICoKKyAqIEFsc28s IGluIHNvbWUgb2YgdGhlIGNhc2VzIHdoZXJlIG9wZXJhdG9ycyBhcmUgc2hvd24gYWJvdmUg d2UgYWN0dWFsbHkKKyAqIGRpcmVjdGx5IHByb2R1Y2UgdGhlIHVuZGVybHlpbmcgZnVuY3Rp b24gY2FsbC4KKyAqCisgKiBJZiBib3RoIGEgc2VhcmNoIGNsYXVzZSBhbmQgYSBjeWNsZSBj bGF1c2UgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBzZWFyY2gKKyAqIGNsYXVzZSBjb2x1bW4g aXMgYWRkZWQgYmVmb3JlIHRoZSBjeWNsZSBjbGF1c2UgY29sdW1ucy4KKyAqLworCisvKgor ICogTWFrZSBhIFJvd0V4cHIgZnJvbSB0aGUgc3BlY2lmaWVkIGNvbHVtbiBuYW1lcywgd2hp Y2ggaGF2ZSB0byBiZSBhbW9uZyB0aGUKKyAqIG91dHB1dCBjb2x1bW5zIG9mIHRoZSBDVEUu CisgKi8KK3N0YXRpYyBSb3dFeHByICoKK21ha2VfcGF0aF9yb3dleHByKGNvbnN0IENvbW1v blRhYmxlRXhwciAqY3RlLCBjb25zdCBMaXN0ICpjb2xfbGlzdCkKK3sKKwlSb3dFeHByICAg ICpyb3dleHByOworCUxpc3RDZWxsICAgKmxjOworCisJcm93ZXhwciA9IG1ha2VOb2RlKFJv d0V4cHIpOworCXJvd2V4cHItPnJvd190eXBlaWQgPSBSRUNPUkRPSUQ7CisJcm93ZXhwci0+ cm93X2Zvcm1hdCA9IENPRVJDRV9JTVBMSUNJVF9DQVNUOworCXJvd2V4cHItPmxvY2F0aW9u ID0gLTE7CisKKwlmb3JlYWNoKGxjLCBjb2xfbGlzdCkKKwl7CisJCWNoYXIJICAgKmNvbG5h bWUgPSBzdHJWYWwobGZpcnN0KGxjKSk7CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0 X2xlbmd0aChjdGUtPmN0ZWNvbG5hbWVzKTsgaSsrKQorCQl7CisJCQljaGFyCSAgICpjb2xu YW1lMiA9IHN0clZhbChsaXN0X250aChjdGUtPmN0ZWNvbG5hbWVzLCBpKSk7CisKKwkJCWlm IChzdHJjbXAoY29sbmFtZSwgY29sbmFtZTIpID09IDApCisJCQl7CisJCQkJVmFyCQkgICAq dmFyOworCisJCQkJdmFyID0gbWFrZVZhcigxLCBpICsgMSwKKwkJCQkJCQkgIGxpc3RfbnRo X29pZChjdGUtPmN0ZWNvbHR5cGVzLCBpKSwKKwkJCQkJCQkgIGxpc3RfbnRoX2ludChjdGUt PmN0ZWNvbHR5cG1vZHMsIGkpLAorCQkJCQkJCSAgbGlzdF9udGhfb2lkKGN0ZS0+Y3RlY29s Y29sbGF0aW9ucywgaSksCisJCQkJCQkJICAwKTsKKwkJCQlyb3dleHByLT5hcmdzID0gbGFw cGVuZChyb3dleHByLT5hcmdzLCB2YXIpOworCQkJCXJvd2V4cHItPmNvbG5hbWVzID0gbGFw cGVuZChyb3dleHByLT5jb2xuYW1lcywgbWFrZVN0cmluZyhjb2xuYW1lKSk7CisJCQkJYnJl YWs7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gcm93ZXhwcjsKK30KKworLyoKKyAqIFdy YXAgYSBSb3dFeHByIGluIGFuIEFycmF5RXhwciwgZm9yIHRoZSBpbml0aWFsIHNlYXJjaCBk ZXB0aCBmaXJzdCBvciBjeWNsZQorICogcm93LgorICovCitzdGF0aWMgRXhwciAqCittYWtl X3BhdGhfaW5pdGlhbF9hcnJheShSb3dFeHByICpyb3dleHByKQoreworCUFycmF5RXhwciAg KmFycjsKKworCWFyciA9IG1ha2VOb2RlKEFycmF5RXhwcik7CisJYXJyLT5hcnJheV90eXBl aWQgPSBSRUNPUkRBUlJBWU9JRDsKKwlhcnItPmVsZW1lbnRfdHlwZWlkID0gUkVDT1JET0lE OworCWFyci0+bG9jYXRpb24gPSAtMTsKKwlhcnItPmVsZW1lbnRzID0gbGlzdF9tYWtlMShy b3dleHByKTsKKworCXJldHVybiAoRXhwciAqKSBhcnI7Cit9CisKKy8qCisgKiBNYWtlIGFu IGFycmF5IGNhdGVuYXRpb24gZXhwcmVzc2lvbiBsaWtlCisgKgorICogY3BhIHx8IEFSUkFZ W1JPVyhjb2xzKV0KKyAqCisgKiB3aGVyZSB0aGUgdmFyYXR0bm8gb2YgY3BhIGlzIHByb3Zp ZGVkIGFzIHBhdGhfdmFyYXR0bm8uCisgKi8KK3N0YXRpYyBFeHByICoKK21ha2VfcGF0aF9j YXRfZXhwcihSb3dFeHByICpyb3dleHByLCBBdHRyTnVtYmVyIHBhdGhfdmFyYXR0bm8pCit7 CisJQXJyYXlFeHByICAqYXJyOworCUZ1bmNFeHByICAgKmZleHByOworCisJYXJyID0gbWFr ZU5vZGUoQXJyYXlFeHByKTsKKwlhcnItPmFycmF5X3R5cGVpZCA9IFJFQ09SREFSUkFZT0lE OworCWFyci0+ZWxlbWVudF90eXBlaWQgPSBSRUNPUkRPSUQ7CisJYXJyLT5sb2NhdGlvbiA9 IC0xOworCWFyci0+ZWxlbWVudHMgPSBsaXN0X21ha2UxKHJvd2V4cHIpOworCisJZmV4cHIg PSBtYWtlRnVuY0V4cHIoRl9BUlJBWV9DQVQsIFJFQ09SREFSUkFZT0lELAorCQkJCQkJIGxp c3RfbWFrZTIobWFrZVZhcigxLCBwYXRoX3ZhcmF0dG5vLCBSRUNPUkRBUlJBWU9JRCwgLTEs IDAsIDApLAorCQkJCQkJCQkJYXJyKSwKKwkJCQkJCSBJbnZhbGlkT2lkLCBJbnZhbGlkT2lk LCBDT0VSQ0VfRVhQTElDSVRfQ0FMTCk7CisKKwlyZXR1cm4gKEV4cHIgKikgZmV4cHI7Cit9 CisKKy8qCisgKiBUaGUgcmVhbCB3b3JrIGhhcHBlbnMgaGVyZS4KKyAqLworQ29tbW9uVGFi bGVFeHByICoKK3Jld3JpdGVTZWFyY2hBbmRDeWNsZShDb21tb25UYWJsZUV4cHIgKmN0ZSkK K3sKKwlRdWVyeQkgICAqY3RlcXVlcnk7CisJU2V0T3BlcmF0aW9uU3RtdCAqc29zOworCWlu dAkJCXJ0aTEsCisJCQkJcnRpMjsKKwlSYW5nZVRibEVudHJ5ICpydGUxLAorCQkJICAgKnJ0 ZTIsCisJCQkgICAqbmV3cnRlOworCVF1ZXJ5CSAgICpuZXdxMSwKKwkJCSAgICpuZXdxMjsK KwlRdWVyeQkgICAqbmV3c3VicXVlcnk7CisJUmFuZ2VUYmxSZWYgKnJ0cjsKKwlPaWQJCQlz ZWFyY2hfc2VxX3R5cGUgPSBJbnZhbGlkT2lkOworCUF0dHJOdW1iZXIJc3FjX2F0dG5vID0g SW52YWxpZEF0dHJOdW1iZXI7CisJQXR0ck51bWJlcgljbWNfYXR0bm8gPSBJbnZhbGlkQXR0 ck51bWJlcjsKKwlBdHRyTnVtYmVyCWNwYV9hdHRubyA9IEludmFsaWRBdHRyTnVtYmVyOwor CVRhcmdldEVudHJ5ICp0bGU7CisJUm93RXhwciAgICAqY3ljbGVfY29sX3Jvd2V4cHIgPSBO VUxMOworCVJvd0V4cHIgICAgKnNlYXJjaF9jb2xfcm93ZXhwciA9IE5VTEw7CisJTGlzdAkg ICAqZXdjbDsKKwlpbnQJCQljdGVfcnRpbmRleCA9IC0xOworCisJQXNzZXJ0KGN0ZS0+c2Vh cmNoX2NsYXVzZSB8fCBjdGUtPmN5Y2xlX2NsYXVzZSk7CisKKwljdGUgPSBjb3B5T2JqZWN0 KGN0ZSk7CisKKwljdGVxdWVyeSA9IGNhc3ROb2RlKFF1ZXJ5LCBjdGUtPmN0ZXF1ZXJ5KTsK KworCS8qCisJICogVGhlIHRvcCBsZXZlbCBvZiB0aGUgQ1RFJ3MgcXVlcnkgc2hvdWxkIGJl IGEgVU5JT04uICBGaW5kIHRoZSB0d28KKwkgKiBzdWJxdWVyaWVzLgorCSAqLworCUFzc2Vy dChjdGVxdWVyeS0+c2V0T3BlcmF0aW9ucyk7CisJc29zID0gY2FzdE5vZGUoU2V0T3BlcmF0 aW9uU3RtdCwgY3RlcXVlcnktPnNldE9wZXJhdGlvbnMpOworCUFzc2VydChzb3MtPm9wID09 IFNFVE9QX1VOSU9OKTsKKworCXJ0aTEgPSBjYXN0Tm9kZShSYW5nZVRibFJlZiwgc29zLT5s YXJnKS0+cnRpbmRleDsKKwlydGkyID0gY2FzdE5vZGUoUmFuZ2VUYmxSZWYsIHNvcy0+cmFy ZyktPnJ0aW5kZXg7CisKKwlydGUxID0gcnRfZmV0Y2gocnRpMSwgY3RlcXVlcnktPnJ0YWJs ZSk7CisJcnRlMiA9IHJ0X2ZldGNoKHJ0aTIsIGN0ZXF1ZXJ5LT5ydGFibGUpOworCisJQXNz ZXJ0KHJ0ZTEtPnJ0ZWtpbmQgPT0gUlRFX1NVQlFVRVJZKTsKKwlBc3NlcnQocnRlMi0+cnRl a2luZCA9PSBSVEVfU1VCUVVFUlkpOworCisJLyoKKwkgKiBXZSdsbCBuZWVkIHRoaXMgYSBm ZXcgdGltZXMgbGF0ZXIuCisJICovCisJaWYgKGN0ZS0+c2VhcmNoX2NsYXVzZSkKKwl7CisJ CWlmIChjdGUtPnNlYXJjaF9jbGF1c2UtPnNlYXJjaF9icmVhZHRoX2ZpcnN0KQorCQkJc2Vh cmNoX3NlcV90eXBlID0gUkVDT1JET0lEOworCQllbHNlCisJCQlzZWFyY2hfc2VxX3R5cGUg PSBSRUNPUkRBUlJBWU9JRDsKKwl9CisKKwkvKgorCSAqIEF0dHJpYnV0ZSBudW1iZXJzIG9m IHRoZSBhZGRlZCBjb2x1bW5zIGluIHRoZSBDVEUncyBjb2x1bW4gbGlzdAorCSAqLworCWlm IChjdGUtPnNlYXJjaF9jbGF1c2UpCisJCXNxY19hdHRubyA9IGxpc3RfbGVuZ3RoKGN0ZS0+ Y3RlY29sbmFtZXMpICsgMTsKKwlpZiAoY3RlLT5jeWNsZV9jbGF1c2UpCisJeworCQljbWNf YXR0bm8gPSBsaXN0X2xlbmd0aChjdGUtPmN0ZWNvbG5hbWVzKSArIDE7CisJCWNwYV9hdHRu byA9IGxpc3RfbGVuZ3RoKGN0ZS0+Y3RlY29sbmFtZXMpICsgMjsKKwkJaWYgKGN0ZS0+c2Vh cmNoX2NsYXVzZSkKKwkJeworCQkJY21jX2F0dG5vKys7CisJCQljcGFfYXR0bm8rKzsKKwkJ fQorCX0KKworCS8qCisJICogTWFrZSBuZXcgbGVmdCBzdWJxdWVyeQorCSAqLworCW5ld3Ex ID0gbWFrZU5vZGUoUXVlcnkpOworCW5ld3ExLT5jb21tYW5kVHlwZSA9IENNRF9TRUxFQ1Q7 CisJbmV3cTEtPmNhblNldFRhZyA9IHRydWU7CisKKwluZXdydGUgPSBtYWtlTm9kZShSYW5n ZVRibEVudHJ5KTsKKwluZXdydGUtPnJ0ZWtpbmQgPSBSVEVfU1VCUVVFUlk7CisJbmV3cnRl LT5hbGlhcyA9IG1ha2VBbGlhcygiKlRMT0NSTioiLCBjdGUtPmN0ZWNvbG5hbWVzKTsKKwlu ZXdydGUtPmVyZWYgPSBuZXdydGUtPmFsaWFzOworCW5ld3N1YnF1ZXJ5ID0gY29weU9iamVj dChydGUxLT5zdWJxdWVyeSk7CisJSW5jcmVtZW50VmFyU3VibGV2ZWxzVXAoKE5vZGUgKikg bmV3c3VicXVlcnksIDEsIDEpOworCW5ld3J0ZS0+c3VicXVlcnkgPSBuZXdzdWJxdWVyeTsK KwluZXdydGUtPmluRnJvbUNsID0gdHJ1ZTsKKwluZXdxMS0+cnRhYmxlID0gbGlzdF9tYWtl MShuZXdydGUpOworCisJcnRyID0gbWFrZU5vZGUoUmFuZ2VUYmxSZWYpOworCXJ0ci0+cnRp bmRleCA9IDE7CisJbmV3cTEtPmpvaW50cmVlID0gbWFrZUZyb21FeHByKGxpc3RfbWFrZTEo cnRyKSwgTlVMTCk7CisKKwkvKgorCSAqIE1ha2UgdGFyZ2V0IGxpc3QKKwkgKi8KKwlmb3Ig KGludCBpID0gMDsgaSA8IGxpc3RfbGVuZ3RoKGN0ZS0+Y3RlY29sbmFtZXMpOyBpKyspCisJ eworCQlWYXIJCSAgICp2YXI7CisKKwkJdmFyID0gbWFrZVZhcigxLCBpICsgMSwKKwkJCQkJ ICBsaXN0X250aF9vaWQoY3RlLT5jdGVjb2x0eXBlcywgaSksCisJCQkJCSAgbGlzdF9udGhf aW50KGN0ZS0+Y3RlY29sdHlwbW9kcywgaSksCisJCQkJCSAgbGlzdF9udGhfb2lkKGN0ZS0+ Y3RlY29sY29sbGF0aW9ucywgaSksCisJCQkJCSAgMCk7CisJCXRsZSA9IG1ha2VUYXJnZXRF bnRyeSgoRXhwciAqKSB2YXIsIGkgKyAxLCBzdHJWYWwobGlzdF9udGgoY3RlLT5jdGVjb2xu YW1lcywgaSkpLCBmYWxzZSk7CisJCXRsZS0+cmVzb3JpZ3RibCA9IGNhc3ROb2RlKFRhcmdl dEVudHJ5LCBsaXN0X250aChydGUxLT5zdWJxdWVyeS0+dGFyZ2V0TGlzdCwgaSkpLT5yZXNv cmlndGJsOworCQl0bGUtPnJlc29yaWdjb2wgPSBjYXN0Tm9kZShUYXJnZXRFbnRyeSwgbGlz dF9udGgocnRlMS0+c3VicXVlcnktPnRhcmdldExpc3QsIGkpKS0+cmVzb3JpZ2NvbDsKKwkJ bmV3cTEtPnRhcmdldExpc3QgPSBsYXBwZW5kKG5ld3ExLT50YXJnZXRMaXN0LCB0bGUpOwor CX0KKworCWlmIChjdGUtPnNlYXJjaF9jbGF1c2UpCisJeworCQlFeHByCSAgICp0ZXhwcjsK KworCQlzZWFyY2hfY29sX3Jvd2V4cHIgPSBtYWtlX3BhdGhfcm93ZXhwcihjdGUsIGN0ZS0+ c2VhcmNoX2NsYXVzZS0+c2VhcmNoX2NvbF9saXN0KTsKKwkJaWYgKGN0ZS0+c2VhcmNoX2Ns YXVzZS0+c2VhcmNoX2JyZWFkdGhfZmlyc3QpCisJCXsKKwkJCXNlYXJjaF9jb2xfcm93ZXhw ci0+YXJncyA9IGxjb25zKG1ha2VDb25zdChJTlQ4T0lELCAtMSwgSW52YWxpZE9pZCwgc2l6 ZW9mKGludDY0KSwKKwkJCQkJCQkJCQkJCQkgICBJbnQ2NEdldERhdHVtKDApLCBmYWxzZSwg RkxPQVQ4UEFTU0JZVkFMKSwKKwkJCQkJCQkJCQkJIHNlYXJjaF9jb2xfcm93ZXhwci0+YXJn cyk7CisJCQlzZWFyY2hfY29sX3Jvd2V4cHItPmNvbG5hbWVzID0gbGNvbnMobWFrZVN0cmlu ZygiKkRFUFRIKiIpLCBzZWFyY2hfY29sX3Jvd2V4cHItPmNvbG5hbWVzKTsKKwkJCXRleHBy ID0gKEV4cHIgKikgc2VhcmNoX2NvbF9yb3dleHByOworCQl9CisJCWVsc2UKKwkJCXRleHBy ID0gbWFrZV9wYXRoX2luaXRpYWxfYXJyYXkoc2VhcmNoX2NvbF9yb3dleHByKTsKKwkJdGxl ID0gbWFrZVRhcmdldEVudHJ5KHRleHByLAorCQkJCQkJCSAgbGlzdF9sZW5ndGgobmV3cTEt PnRhcmdldExpc3QpICsgMSwKKwkJCQkJCQkgIGN0ZS0+c2VhcmNoX2NsYXVzZS0+c2VhcmNo X3NlcV9jb2x1bW4sCisJCQkJCQkJICBmYWxzZSk7CisJCW5ld3ExLT50YXJnZXRMaXN0ID0g bGFwcGVuZChuZXdxMS0+dGFyZ2V0TGlzdCwgdGxlKTsKKwl9CisJaWYgKGN0ZS0+Y3ljbGVf Y2xhdXNlKQorCXsKKwkJdGxlID0gbWFrZVRhcmdldEVudHJ5KChFeHByICopIGN0ZS0+Y3lj bGVfY2xhdXNlLT5jeWNsZV9tYXJrX2RlZmF1bHQsCisJCQkJCQkJICBsaXN0X2xlbmd0aChu ZXdxMS0+dGFyZ2V0TGlzdCkgKyAxLAorCQkJCQkJCSAgY3RlLT5jeWNsZV9jbGF1c2UtPmN5 Y2xlX21hcmtfY29sdW1uLAorCQkJCQkJCSAgZmFsc2UpOworCQluZXdxMS0+dGFyZ2V0TGlz dCA9IGxhcHBlbmQobmV3cTEtPnRhcmdldExpc3QsIHRsZSk7CisJCWN5Y2xlX2NvbF9yb3dl eHByID0gbWFrZV9wYXRoX3Jvd2V4cHIoY3RlLCBjdGUtPmN5Y2xlX2NsYXVzZS0+Y3ljbGVf Y29sX2xpc3QpOworCQl0bGUgPSBtYWtlVGFyZ2V0RW50cnkobWFrZV9wYXRoX2luaXRpYWxf YXJyYXkoY3ljbGVfY29sX3Jvd2V4cHIpLAorCQkJCQkJCSAgbGlzdF9sZW5ndGgobmV3cTEt PnRhcmdldExpc3QpICsgMSwKKwkJCQkJCQkgIGN0ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9w YXRoX2NvbHVtbiwKKwkJCQkJCQkgIGZhbHNlKTsKKwkJbmV3cTEtPnRhcmdldExpc3QgPSBs YXBwZW5kKG5ld3ExLT50YXJnZXRMaXN0LCB0bGUpOworCX0KKworCXJ0ZTEtPnN1YnF1ZXJ5 ID0gbmV3cTE7CisKKwlpZiAoY3RlLT5zZWFyY2hfY2xhdXNlKQorCXsKKwkJcnRlMS0+ZXJl Zi0+Y29sbmFtZXMgPSBsYXBwZW5kKHJ0ZTEtPmVyZWYtPmNvbG5hbWVzLCBtYWtlU3RyaW5n KGN0ZS0+c2VhcmNoX2NsYXVzZS0+c2VhcmNoX3NlcV9jb2x1bW4pKTsKKwl9CisJaWYgKGN0 ZS0+Y3ljbGVfY2xhdXNlKQorCXsKKwkJcnRlMS0+ZXJlZi0+Y29sbmFtZXMgPSBsYXBwZW5k KHJ0ZTEtPmVyZWYtPmNvbG5hbWVzLCBtYWtlU3RyaW5nKGN0ZS0+Y3ljbGVfY2xhdXNlLT5j eWNsZV9tYXJrX2NvbHVtbikpOworCQlydGUxLT5lcmVmLT5jb2xuYW1lcyA9IGxhcHBlbmQo cnRlMS0+ZXJlZi0+Y29sbmFtZXMsIG1ha2VTdHJpbmcoY3RlLT5jeWNsZV9jbGF1c2UtPmN5 Y2xlX3BhdGhfY29sdW1uKSk7CisJfQorCisJLyoKKwkgKiBNYWtlIG5ldyByaWdodCBzdWJx dWVyeQorCSAqLworCW5ld3EyID0gbWFrZU5vZGUoUXVlcnkpOworCW5ld3EyLT5jb21tYW5k VHlwZSA9IENNRF9TRUxFQ1Q7CisJbmV3cTItPmNhblNldFRhZyA9IHRydWU7CisKKwluZXdy dGUgPSBtYWtlTm9kZShSYW5nZVRibEVudHJ5KTsKKwluZXdydGUtPnJ0ZWtpbmQgPSBSVEVf U1VCUVVFUlk7CisJZXdjbCA9IGNvcHlPYmplY3QoY3RlLT5jdGVjb2xuYW1lcyk7CisJaWYg KGN0ZS0+c2VhcmNoX2NsYXVzZSkKKwl7CisJCWV3Y2wgPSBsYXBwZW5kKGV3Y2wsIG1ha2VT dHJpbmcoY3RlLT5zZWFyY2hfY2xhdXNlLT5zZWFyY2hfc2VxX2NvbHVtbikpOworCX0KKwlp ZiAoY3RlLT5jeWNsZV9jbGF1c2UpCisJeworCQlld2NsID0gbGFwcGVuZChld2NsLCBtYWtl U3RyaW5nKGN0ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9tYXJrX2NvbHVtbikpOworCQlld2Ns ID0gbGFwcGVuZChld2NsLCBtYWtlU3RyaW5nKGN0ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9w YXRoX2NvbHVtbikpOworCX0KKwluZXdydGUtPmFsaWFzID0gbWFrZUFsaWFzKCIqVFJPQ1JO KiIsIGV3Y2wpOworCW5ld3J0ZS0+ZXJlZiA9IG5ld3J0ZS0+YWxpYXM7CisKKwkvKgorCSAq IEZpbmQgdGhlIHJlZmVyZW5jZSB0byBvdXIgQ1RFIGluIHRoZSByYW5nZSB0YWJsZQorCSAq LworCWZvciAoaW50IHJ0aSA9IDE7IHJ0aSA8PSBsaXN0X2xlbmd0aChydGUyLT5zdWJxdWVy eS0+cnRhYmxlKTsgcnRpKyspCisJeworCQlSYW5nZVRibEVudHJ5ICplID0gcnRfZmV0Y2go cnRpLCBydGUyLT5zdWJxdWVyeS0+cnRhYmxlKTsKKworCQlpZiAoZS0+cnRla2luZCA9PSBS VEVfQ1RFICYmIHN0cmNtcChjdGUtPmN0ZW5hbWUsIGUtPmN0ZW5hbWUpID09IDApCisJCXsK KwkJCWN0ZV9ydGluZGV4ID0gcnRpOworCQkJYnJlYWs7CisJCX0KKwl9CisJQXNzZXJ0KGN0 ZV9ydGluZGV4ID4gMCk7CisKKwluZXdzdWJxdWVyeSA9IGNvcHlPYmplY3QocnRlMi0+c3Vi cXVlcnkpOworCUluY3JlbWVudFZhclN1YmxldmVsc1VwKChOb2RlICopIG5ld3N1YnF1ZXJ5 LCAxLCAxKTsKKworCS8qCisJICogQWRkIGV4dHJhIGNvbHVtbnMgdG8gdGFyZ2V0IGxpc3Qg b2Ygc3VicXVlcnkgb2YgcmlnaHQgc3VicXVlcnkKKwkgKi8KKwlpZiAoY3RlLT5zZWFyY2hf Y2xhdXNlKQorCXsKKwkJVmFyCQkgICAqdmFyOworCisJCS8qIGN0ZW5hbWUuc3FjICovCisJ CXZhciA9IG1ha2VWYXIoY3RlX3J0aW5kZXgsIHNxY19hdHRubywKKwkJCQkJICBzZWFyY2hf c2VxX3R5cGUsIC0xLCBJbnZhbGlkT2lkLCAwKTsKKwkJdGxlID0gbWFrZVRhcmdldEVudHJ5 KChFeHByICopIHZhciwKKwkJCQkJCQkgIGxpc3RfbGVuZ3RoKG5ld3N1YnF1ZXJ5LT50YXJn ZXRMaXN0KSArIDEsCisJCQkJCQkJICBjdGUtPnNlYXJjaF9jbGF1c2UtPnNlYXJjaF9zZXFf Y29sdW1uLAorCQkJCQkJCSAgZmFsc2UpOworCQluZXdzdWJxdWVyeS0+dGFyZ2V0TGlzdCA9 IGxhcHBlbmQobmV3c3VicXVlcnktPnRhcmdldExpc3QsIHRsZSk7CisJfQorCWlmIChjdGUt PmN5Y2xlX2NsYXVzZSkKKwl7CisJCVZhcgkJICAgKnZhcjsKKworCQkvKiBjdGVuYW1lLmNt YyAqLworCQl2YXIgPSBtYWtlVmFyKGN0ZV9ydGluZGV4LCBjbWNfYXR0bm8sCisJCQkJCSAg Y3RlLT5jeWNsZV9jbGF1c2UtPmN5Y2xlX21hcmtfdHlwZSwKKwkJCQkJICBjdGUtPmN5Y2xl X2NsYXVzZS0+Y3ljbGVfbWFya190eXBtb2QsCisJCQkJCSAgY3RlLT5jeWNsZV9jbGF1c2Ut PmN5Y2xlX21hcmtfY29sbGF0aW9uLCAwKTsKKwkJdGxlID0gbWFrZVRhcmdldEVudHJ5KChF eHByICopIHZhciwKKwkJCQkJCQkgIGxpc3RfbGVuZ3RoKG5ld3N1YnF1ZXJ5LT50YXJnZXRM aXN0KSArIDEsCisJCQkJCQkJICBjdGUtPmN5Y2xlX2NsYXVzZS0+Y3ljbGVfbWFya19jb2x1 bW4sCisJCQkJCQkJICBmYWxzZSk7CisJCW5ld3N1YnF1ZXJ5LT50YXJnZXRMaXN0ID0gbGFw cGVuZChuZXdzdWJxdWVyeS0+dGFyZ2V0TGlzdCwgdGxlKTsKKworCQkvKiBjdGVuYW1lLmNw YSAqLworCQl2YXIgPSBtYWtlVmFyKGN0ZV9ydGluZGV4LCBjcGFfYXR0bm8sCisJCQkJCSAg UkVDT1JEQVJSQVlPSUQsIC0xLCBJbnZhbGlkT2lkLCAwKTsKKwkJdGxlID0gbWFrZVRhcmdl dEVudHJ5KChFeHByICopIHZhciwKKwkJCQkJCQkgIGxpc3RfbGVuZ3RoKG5ld3N1YnF1ZXJ5 LT50YXJnZXRMaXN0KSArIDEsCisJCQkJCQkJICBjdGUtPmN5Y2xlX2NsYXVzZS0+Y3ljbGVf cGF0aF9jb2x1bW4sCisJCQkJCQkJICBmYWxzZSk7CisJCW5ld3N1YnF1ZXJ5LT50YXJnZXRM aXN0ID0gbGFwcGVuZChuZXdzdWJxdWVyeS0+dGFyZ2V0TGlzdCwgdGxlKTsKKwl9CisKKwlu ZXdydGUtPnN1YnF1ZXJ5ID0gbmV3c3VicXVlcnk7CisJbmV3cnRlLT5pbkZyb21DbCA9IHRy dWU7CisJbmV3cTItPnJ0YWJsZSA9IGxpc3RfbWFrZTEobmV3cnRlKTsKKworCXJ0ciA9IG1h a2VOb2RlKFJhbmdlVGJsUmVmKTsKKwlydHItPnJ0aW5kZXggPSAxOworCisJaWYgKGN0ZS0+ Y3ljbGVfY2xhdXNlKQorCXsKKwkJRXhwcgkgICAqZXhwcjsKKworCQkvKgorCQkgKiBBZGQg Y21jIDw+IGNtdiBjb25kaXRpb24KKwkJICovCisJCWV4cHIgPSBtYWtlX29wY2xhdXNlKGN0 ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9tYXJrX25lb3AsIEJPT0xPSUQsIGZhbHNlLAorCQkJ CQkJCSAoRXhwciAqKSBtYWtlVmFyKDEsIGNtY19hdHRubywKKwkJCQkJCQkJCQkJICBjdGUt PmN5Y2xlX2NsYXVzZS0+Y3ljbGVfbWFya190eXBlLAorCQkJCQkJCQkJCQkgIGN0ZS0+Y3lj bGVfY2xhdXNlLT5jeWNsZV9tYXJrX3R5cG1vZCwKKwkJCQkJCQkJCQkJICBjdGUtPmN5Y2xl X2NsYXVzZS0+Y3ljbGVfbWFya19jb2xsYXRpb24sIDApLAorCQkJCQkJCSAoRXhwciAqKSBj dGUtPmN5Y2xlX2NsYXVzZS0+Y3ljbGVfbWFya192YWx1ZSwKKwkJCQkJCQkgSW52YWxpZE9p ZCwKKwkJCQkJCQkgY3RlLT5jeWNsZV9jbGF1c2UtPmN5Y2xlX21hcmtfY29sbGF0aW9uKTsK KworCQluZXdxMi0+am9pbnRyZWUgPSBtYWtlRnJvbUV4cHIobGlzdF9tYWtlMShydHIpLCAo Tm9kZSAqKSBleHByKTsKKwl9CisJZWxzZQorCQluZXdxMi0+am9pbnRyZWUgPSBtYWtlRnJv bUV4cHIobGlzdF9tYWtlMShydHIpLCBOVUxMKTsKKworCS8qCisJICogTWFrZSB0YXJnZXQg bGlzdAorCSAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgbGlzdF9sZW5ndGgoY3RlLT5jdGVj b2xuYW1lcyk7IGkrKykKKwl7CisJCVZhcgkJICAgKnZhcjsKKworCQl2YXIgPSBtYWtlVmFy KDEsIGkgKyAxLAorCQkJCQkgIGxpc3RfbnRoX29pZChjdGUtPmN0ZWNvbHR5cGVzLCBpKSwK KwkJCQkJICBsaXN0X250aF9pbnQoY3RlLT5jdGVjb2x0eXBtb2RzLCBpKSwKKwkJCQkJICBs aXN0X250aF9vaWQoY3RlLT5jdGVjb2xjb2xsYXRpb25zLCBpKSwKKwkJCQkJICAwKTsKKwkJ dGxlID0gbWFrZVRhcmdldEVudHJ5KChFeHByICopIHZhciwgaSArIDEsIHN0clZhbChsaXN0 X250aChjdGUtPmN0ZWNvbG5hbWVzLCBpKSksIGZhbHNlKTsKKwkJdGxlLT5yZXNvcmlndGJs ID0gY2FzdE5vZGUoVGFyZ2V0RW50cnksIGxpc3RfbnRoKHJ0ZTItPnN1YnF1ZXJ5LT50YXJn ZXRMaXN0LCBpKSktPnJlc29yaWd0Ymw7CisJCXRsZS0+cmVzb3JpZ2NvbCA9IGNhc3ROb2Rl KFRhcmdldEVudHJ5LCBsaXN0X250aChydGUyLT5zdWJxdWVyeS0+dGFyZ2V0TGlzdCwgaSkp LT5yZXNvcmlnY29sOworCQluZXdxMi0+dGFyZ2V0TGlzdCA9IGxhcHBlbmQobmV3cTItPnRh cmdldExpc3QsIHRsZSk7CisJfQorCisJaWYgKGN0ZS0+c2VhcmNoX2NsYXVzZSkKKwl7CisJ CUV4cHIJICAgKnRleHByOworCisJCWlmIChjdGUtPnNlYXJjaF9jbGF1c2UtPnNlYXJjaF9i cmVhZHRoX2ZpcnN0KQorCQl7CisJCQlGaWVsZFNlbGVjdCAqZnM7CisJCQlGdW5jRXhwciAg ICpmZXhwcjsKKworCQkJLyoKKwkJCSAqIFJPVyhzcWMuZGVwdGggKyAxLCBjb2xzKQorCQkJ ICovCisKKwkJCXNlYXJjaF9jb2xfcm93ZXhwciA9IGNvcHlPYmplY3Qoc2VhcmNoX2NvbF9y b3dleHByKTsKKworCQkJZnMgPSBtYWtlTm9kZShGaWVsZFNlbGVjdCk7CisJCQlmcy0+YXJn ID0gKEV4cHIgKikgbWFrZVZhcigxLCBzcWNfYXR0bm8sIFJFQ09SRE9JRCwgLTEsIDAsIDAp OworCQkJZnMtPmZpZWxkbnVtID0gMTsKKwkJCWZzLT5yZXN1bHR0eXBlID0gSU5UOE9JRDsK KwkJCWZzLT5yZXN1bHR0eXBtb2QgPSAtMTsKKworCQkJZmV4cHIgPSBtYWtlRnVuY0V4cHIo Rl9JTlQ4SU5DLCBJTlQ4T0lELCBsaXN0X21ha2UxKGZzKSwgSW52YWxpZE9pZCwgSW52YWxp ZE9pZCwgQ09FUkNFX0VYUExJQ0lUX0NBTEwpOworCisJCQlsZmlyc3QobGlzdF9oZWFkKHNl YXJjaF9jb2xfcm93ZXhwci0+YXJncykpID0gZmV4cHI7CisKKwkJCXRleHByID0gKEV4cHIg Kikgc2VhcmNoX2NvbF9yb3dleHByOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAq IHNxYyB8fCBBUlJBWVtST1coY29scyldCisJCQkgKi8KKwkJCXRleHByID0gbWFrZV9wYXRo X2NhdF9leHByKHNlYXJjaF9jb2xfcm93ZXhwciwgc3FjX2F0dG5vKTsKKwkJfQorCQl0bGUg PSBtYWtlVGFyZ2V0RW50cnkodGV4cHIsCisJCQkJCQkJICBsaXN0X2xlbmd0aChuZXdxMi0+ dGFyZ2V0TGlzdCkgKyAxLAorCQkJCQkJCSAgY3RlLT5zZWFyY2hfY2xhdXNlLT5zZWFyY2hf c2VxX2NvbHVtbiwKKwkJCQkJCQkgIGZhbHNlKTsKKwkJbmV3cTItPnRhcmdldExpc3QgPSBs YXBwZW5kKG5ld3EyLT50YXJnZXRMaXN0LCB0bGUpOworCX0KKworCWlmIChjdGUtPmN5Y2xl X2NsYXVzZSkKKwl7CisJCVNjYWxhckFycmF5T3BFeHByICpzYW9lOworCQlDYXNlRXhwciAg ICpjYXNlZXhwcjsKKwkJQ2FzZVdoZW4gICAqY2FzZXdoZW47CisKKwkJLyoKKwkJICogQ0FT RSBXSEVOIFJPVyhjb2xzKSA9IEFOWSAoQVJSQVlbY3BhXSkgVEhFTiBjbXYgRUxTRSBjbWQg RU5ECisJCSAqLworCisJCXNhb2UgPSBtYWtlTm9kZShTY2FsYXJBcnJheU9wRXhwcik7CisJ CXNhb2UtPmxvY2F0aW9uID0gLTE7CisJCXNhb2UtPm9wbm8gPSBSRUNPUkRfRVFfT1A7CisJ CXNhb2UtPnVzZU9yID0gdHJ1ZTsKKwkJc2FvZS0+YXJncyA9IGxpc3RfbWFrZTIoY3ljbGVf Y29sX3Jvd2V4cHIsCisJCQkJCQkJCW1ha2VWYXIoMSwgY3BhX2F0dG5vLCBSRUNPUkRBUlJB WU9JRCwgLTEsIDAsIDApKTsKKworCQljYXNlZXhwciA9IG1ha2VOb2RlKENhc2VFeHByKTsK KwkJY2FzZWV4cHItPmxvY2F0aW9uID0gLTE7CisJCWNhc2VleHByLT5jYXNldHlwZSA9IGN0 ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9tYXJrX3R5cGU7CisJCWNhc2VleHByLT5jYXNlY29s bGlkID0gY3RlLT5jeWNsZV9jbGF1c2UtPmN5Y2xlX21hcmtfY29sbGF0aW9uOworCQljYXNl d2hlbiA9IG1ha2VOb2RlKENhc2VXaGVuKTsKKwkJY2FzZXdoZW4tPmxvY2F0aW9uID0gLTE7 CisJCWNhc2V3aGVuLT5leHByID0gKEV4cHIgKikgc2FvZTsKKwkJY2FzZXdoZW4tPnJlc3Vs dCA9IChFeHByICopIGN0ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9tYXJrX3ZhbHVlOworCQlj YXNlZXhwci0+YXJncyA9IGxpc3RfbWFrZTEoY2FzZXdoZW4pOworCQljYXNlZXhwci0+ZGVm cmVzdWx0ID0gKEV4cHIgKikgY3RlLT5jeWNsZV9jbGF1c2UtPmN5Y2xlX21hcmtfZGVmYXVs dDsKKworCQl0bGUgPSBtYWtlVGFyZ2V0RW50cnkoKEV4cHIgKikgY2FzZWV4cHIsCisJCQkJ CQkJICBsaXN0X2xlbmd0aChuZXdxMi0+dGFyZ2V0TGlzdCkgKyAxLAorCQkJCQkJCSAgY3Rl LT5jeWNsZV9jbGF1c2UtPmN5Y2xlX21hcmtfY29sdW1uLAorCQkJCQkJCSAgZmFsc2UpOwor CQluZXdxMi0+dGFyZ2V0TGlzdCA9IGxhcHBlbmQobmV3cTItPnRhcmdldExpc3QsIHRsZSk7 CisKKwkJLyoKKwkJICogY3BhIHx8IEFSUkFZW1JPVyhjb2xzKV0KKwkJICovCisJCXRsZSA9 IG1ha2VUYXJnZXRFbnRyeShtYWtlX3BhdGhfY2F0X2V4cHIoY3ljbGVfY29sX3Jvd2V4cHIs IGNwYV9hdHRubyksCisJCQkJCQkJICBsaXN0X2xlbmd0aChuZXdxMi0+dGFyZ2V0TGlzdCkg KyAxLAorCQkJCQkJCSAgY3RlLT5jeWNsZV9jbGF1c2UtPmN5Y2xlX3BhdGhfY29sdW1uLAor CQkJCQkJCSAgZmFsc2UpOworCQluZXdxMi0+dGFyZ2V0TGlzdCA9IGxhcHBlbmQobmV3cTIt PnRhcmdldExpc3QsIHRsZSk7CisJfQorCisJcnRlMi0+c3VicXVlcnkgPSBuZXdxMjsKKwor CWlmIChjdGUtPnNlYXJjaF9jbGF1c2UpCisJeworCQlydGUyLT5lcmVmLT5jb2xuYW1lcyA9 IGxhcHBlbmQocnRlMi0+ZXJlZi0+Y29sbmFtZXMsIG1ha2VTdHJpbmcoY3RlLT5zZWFyY2hf Y2xhdXNlLT5zZWFyY2hfc2VxX2NvbHVtbikpOworCX0KKwlpZiAoY3RlLT5jeWNsZV9jbGF1 c2UpCisJeworCQlydGUyLT5lcmVmLT5jb2xuYW1lcyA9IGxhcHBlbmQocnRlMi0+ZXJlZi0+ Y29sbmFtZXMsIG1ha2VTdHJpbmcoY3RlLT5jeWNsZV9jbGF1c2UtPmN5Y2xlX21hcmtfY29s dW1uKSk7CisJCXJ0ZTItPmVyZWYtPmNvbG5hbWVzID0gbGFwcGVuZChydGUyLT5lcmVmLT5j b2xuYW1lcywgbWFrZVN0cmluZyhjdGUtPmN5Y2xlX2NsYXVzZS0+Y3ljbGVfcGF0aF9jb2x1 bW4pKTsKKwl9CisKKwkvKgorCSAqIEFkZCB0aGUgYWRkaXRpb25hbCBjb2x1bW5zIHRvIHRo ZSBTZXRPcGVyYXRpb25TdG10CisJICovCisJaWYgKGN0ZS0+c2VhcmNoX2NsYXVzZSkKKwl7 CisJCXNvcy0+Y29sVHlwZXMgPSBsYXBwZW5kX29pZChzb3MtPmNvbFR5cGVzLCBzZWFyY2hf c2VxX3R5cGUpOworCQlzb3MtPmNvbFR5cG1vZHMgPSBsYXBwZW5kX2ludChzb3MtPmNvbFR5 cG1vZHMsIC0xKTsKKwkJc29zLT5jb2xDb2xsYXRpb25zID0gbGFwcGVuZF9vaWQoc29zLT5j b2xDb2xsYXRpb25zLCBJbnZhbGlkT2lkKTsKKwkJaWYgKCFzb3MtPmFsbCkKKwkJCXNvcy0+ Z3JvdXBDbGF1c2VzID0gbGFwcGVuZChzb3MtPmdyb3VwQ2xhdXNlcywKKwkJCQkJCQkJCQlt YWtlU29ydEdyb3VwQ2xhdXNlRm9yU2V0T3Aoc2VhcmNoX3NlcV90eXBlKSk7CisJfQorCWlm IChjdGUtPmN5Y2xlX2NsYXVzZSkKKwl7CisJCXNvcy0+Y29sVHlwZXMgPSBsYXBwZW5kX29p ZChzb3MtPmNvbFR5cGVzLCBjdGUtPmN5Y2xlX2NsYXVzZS0+Y3ljbGVfbWFya190eXBlKTsK KwkJc29zLT5jb2xUeXBtb2RzID0gbGFwcGVuZF9pbnQoc29zLT5jb2xUeXBtb2RzLCBjdGUt PmN5Y2xlX2NsYXVzZS0+Y3ljbGVfbWFya190eXBtb2QpOworCQlzb3MtPmNvbENvbGxhdGlv bnMgPSBsYXBwZW5kX29pZChzb3MtPmNvbENvbGxhdGlvbnMsIGN0ZS0+Y3ljbGVfY2xhdXNl LT5jeWNsZV9tYXJrX2NvbGxhdGlvbik7CisJCWlmICghc29zLT5hbGwpCisJCQlzb3MtPmdy b3VwQ2xhdXNlcyA9IGxhcHBlbmQoc29zLT5ncm91cENsYXVzZXMsCisJCQkJCQkJCQkJbWFr ZVNvcnRHcm91cENsYXVzZUZvclNldE9wKGN0ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9tYXJr X3R5cGUpKTsKKworCQlzb3MtPmNvbFR5cGVzID0gbGFwcGVuZF9vaWQoc29zLT5jb2xUeXBl cywgUkVDT1JEQVJSQVlPSUQpOworCQlzb3MtPmNvbFR5cG1vZHMgPSBsYXBwZW5kX2ludChz b3MtPmNvbFR5cG1vZHMsIC0xKTsKKwkJc29zLT5jb2xDb2xsYXRpb25zID0gbGFwcGVuZF9v aWQoc29zLT5jb2xDb2xsYXRpb25zLCBJbnZhbGlkT2lkKTsKKwkJaWYgKCFzb3MtPmFsbCkK KwkJCXNvcy0+Z3JvdXBDbGF1c2VzID0gbGFwcGVuZChzb3MtPmdyb3VwQ2xhdXNlcywKKwkJ CQkJCQkJCQltYWtlU29ydEdyb3VwQ2xhdXNlRm9yU2V0T3AoUkVDT1JEQVJSQVlPSUQpKTsK Kwl9CisKKwkvKgorCSAqIEFkZCB0aGUgYWRkaXRpb25hbCBjb2x1bW5zIHRvIHRoZSBDVEUg cXVlcnkncyB0YXJnZXQgbGlzdAorCSAqLworCWlmIChjdGUtPnNlYXJjaF9jbGF1c2UpCisJ eworCQljdGVxdWVyeS0+dGFyZ2V0TGlzdCA9IGxhcHBlbmQoY3RlcXVlcnktPnRhcmdldExp c3QsCisJCQkJCQkJCQkgICBtYWtlVGFyZ2V0RW50cnkoKEV4cHIgKikgbWFrZVZhcigxLCBz cWNfYXR0bm8sCisJCQkJCQkJCQkJCQkJCQkJCQlzZWFyY2hfc2VxX3R5cGUsIC0xLCBJbnZh bGlkT2lkLCAwKSwKKwkJCQkJCQkJCQkJCQkgICBsaXN0X2xlbmd0aChjdGVxdWVyeS0+dGFy Z2V0TGlzdCkgKyAxLAorCQkJCQkJCQkJCQkJCSAgIGN0ZS0+c2VhcmNoX2NsYXVzZS0+c2Vh cmNoX3NlcV9jb2x1bW4sCisJCQkJCQkJCQkJCQkJICAgZmFsc2UpKTsKKwl9CisJaWYgKGN0 ZS0+Y3ljbGVfY2xhdXNlKQorCXsKKwkJY3RlcXVlcnktPnRhcmdldExpc3QgPSBsYXBwZW5k KGN0ZXF1ZXJ5LT50YXJnZXRMaXN0LAorCQkJCQkJCQkJICAgbWFrZVRhcmdldEVudHJ5KChF eHByICopIG1ha2VWYXIoMSwgY21jX2F0dG5vLAorCQkJCQkJCQkJCQkJCQkJCQkJY3RlLT5j eWNsZV9jbGF1c2UtPmN5Y2xlX21hcmtfdHlwZSwKKwkJCQkJCQkJCQkJCQkJCQkJCWN0ZS0+ Y3ljbGVfY2xhdXNlLT5jeWNsZV9tYXJrX3R5cG1vZCwKKwkJCQkJCQkJCQkJCQkJCQkJCWN0 ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9tYXJrX2NvbGxhdGlvbiwgMCksCisJCQkJCQkJCQkJ CQkJICAgbGlzdF9sZW5ndGgoY3RlcXVlcnktPnRhcmdldExpc3QpICsgMSwKKwkJCQkJCQkJ CQkJCQkgICBjdGUtPmN5Y2xlX2NsYXVzZS0+Y3ljbGVfbWFya19jb2x1bW4sCisJCQkJCQkJ CQkJCQkJICAgZmFsc2UpKTsKKwkJY3RlcXVlcnktPnRhcmdldExpc3QgPSBsYXBwZW5kKGN0 ZXF1ZXJ5LT50YXJnZXRMaXN0LAorCQkJCQkJCQkJICAgbWFrZVRhcmdldEVudHJ5KChFeHBy ICopIG1ha2VWYXIoMSwgY3BhX2F0dG5vLAorCQkJCQkJCQkJCQkJCQkJCQkJUkVDT1JEQVJS QVlPSUQsIC0xLCBJbnZhbGlkT2lkLCAwKSwKKwkJCQkJCQkJCQkJCQkgICBsaXN0X2xlbmd0 aChjdGVxdWVyeS0+dGFyZ2V0TGlzdCkgKyAxLAorCQkJCQkJCQkJCQkJCSAgIGN0ZS0+Y3lj bGVfY2xhdXNlLT5jeWNsZV9wYXRoX2NvbHVtbiwKKwkJCQkJCQkJCQkJCQkgICBmYWxzZSkp OworCX0KKworCS8qCisJICogQWRkIHRoZSBhZGRpdGlvbmFsIGNvbHVtbnMgdG8gdGhlIENU RSdzIG91dHB1dCBjb2x1bW5zCisJICovCisJY3RlLT5jdGVjb2xuYW1lcyA9IGV3Y2w7CisJ aWYgKGN0ZS0+c2VhcmNoX2NsYXVzZSkKKwl7CisJCWN0ZS0+Y3RlY29sdHlwZXMgPSBsYXBw ZW5kX29pZChjdGUtPmN0ZWNvbHR5cGVzLCBzZWFyY2hfc2VxX3R5cGUpOworCQljdGUtPmN0 ZWNvbHR5cG1vZHMgPSBsYXBwZW5kX2ludChjdGUtPmN0ZWNvbHR5cG1vZHMsIC0xKTsKKwkJ Y3RlLT5jdGVjb2xjb2xsYXRpb25zID0gbGFwcGVuZF9vaWQoY3RlLT5jdGVjb2xjb2xsYXRp b25zLCBJbnZhbGlkT2lkKTsKKwl9CisJaWYgKGN0ZS0+Y3ljbGVfY2xhdXNlKQorCXsKKwkJ Y3RlLT5jdGVjb2x0eXBlcyA9IGxhcHBlbmRfb2lkKGN0ZS0+Y3RlY29sdHlwZXMsIGN0ZS0+ Y3ljbGVfY2xhdXNlLT5jeWNsZV9tYXJrX3R5cGUpOworCQljdGUtPmN0ZWNvbHR5cG1vZHMg PSBsYXBwZW5kX2ludChjdGUtPmN0ZWNvbHR5cG1vZHMsIGN0ZS0+Y3ljbGVfY2xhdXNlLT5j eWNsZV9tYXJrX3R5cG1vZCk7CisJCWN0ZS0+Y3RlY29sY29sbGF0aW9ucyA9IGxhcHBlbmRf b2lkKGN0ZS0+Y3RlY29sY29sbGF0aW9ucywgY3RlLT5jeWNsZV9jbGF1c2UtPmN5Y2xlX21h cmtfY29sbGF0aW9uKTsKKworCQljdGUtPmN0ZWNvbHR5cGVzID0gbGFwcGVuZF9vaWQoY3Rl LT5jdGVjb2x0eXBlcywgUkVDT1JEQVJSQVlPSUQpOworCQljdGUtPmN0ZWNvbHR5cG1vZHMg PSBsYXBwZW5kX2ludChjdGUtPmN0ZWNvbHR5cG1vZHMsIC0xKTsKKwkJY3RlLT5jdGVjb2xj b2xsYXRpb25zID0gbGFwcGVuZF9vaWQoY3RlLT5jdGVjb2xjb2xsYXRpb25zLCBJbnZhbGlk T2lkKTsKKwl9CisKKwlyZXR1cm4gY3RlOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGls cy5jCmluZGV4IGMyYzZkZjJhNGYuLjUzNDU4ZjAzNDAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv cnVsZXV0aWxzLmMKQEAgLTUxNjgsNiArNTE2OCw1MyBAQCBnZXRfd2l0aF9jbGF1c2UoUXVl cnkgKnF1ZXJ5LCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpCiAJCWlmIChQUkVUVFlfSU5E RU5UKGNvbnRleHQpKQogCQkJYXBwZW5kQ29udGV4dEtleXdvcmQoY29udGV4dCwgIiIsIDAs IDAsIDApOwogCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcpJyk7CisKKwkJaWYgKGN0 ZS0+c2VhcmNoX2NsYXVzZSkKKwkJeworCQkJYm9vbAkJZmlyc3QgPSB0cnVlOworCQkJTGlz dENlbGwgICAqbGM7CisKKwkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIFNFQVJDSCAlcyBG SVJTVCBCWSAiLAorCQkJCQkJCSBjdGUtPnNlYXJjaF9jbGF1c2UtPnNlYXJjaF9icmVhZHRo X2ZpcnN0ID8gIkJSRUFEVEgiIDogIkRFUFRIIik7CisKKwkJCWZvcmVhY2gobGMsIGN0ZS0+ c2VhcmNoX2NsYXVzZS0+c2VhcmNoX2NvbF9saXN0KQorCQkJeworCQkJCWlmIChmaXJzdCkK KwkJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCQllbHNlCisJCQkJCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoYnVmLCAiLCAiKTsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwKKwkJ CQkJCQkJCSAgIHF1b3RlX2lkZW50aWZpZXIoc3RyVmFsKGxmaXJzdChsYykpKSk7CisJCQl9 CisKKwkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIFNFVCAlcyIsIHF1b3RlX2lkZW50aWZp ZXIoY3RlLT5zZWFyY2hfY2xhdXNlLT5zZWFyY2hfc2VxX2NvbHVtbikpOworCQl9CisKKwkJ aWYgKGN0ZS0+Y3ljbGVfY2xhdXNlKQorCQl7CisJCQlib29sCQlmaXJzdCA9IHRydWU7CisJ CQlMaXN0Q2VsbCAgICpsYzsKKworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIg Q1lDTEUgIik7CisKKwkJCWZvcmVhY2gobGMsIGN0ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9j b2xfbGlzdCkKKwkJCXsKKwkJCQlpZiAoZmlyc3QpCisJCQkJCWZpcnN0ID0gZmFsc2U7CisJ CQkJZWxzZQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiwgIik7CisJCQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsCisJCQkJCQkJCQkgICBxdW90ZV9pZGVudGlm aWVyKHN0clZhbChsZmlyc3QobGMpKSkpOworCQkJfQorCisJCQlhcHBlbmRTdHJpbmdJbmZv KGJ1ZiwgIiBTRVQgJXMiLCBxdW90ZV9pZGVudGlmaWVyKGN0ZS0+Y3ljbGVfY2xhdXNlLT5j eWNsZV9tYXJrX2NvbHVtbikpOworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIg VE8gIik7CisJCQlnZXRfcnVsZV9leHByKGN0ZS0+Y3ljbGVfY2xhdXNlLT5jeWNsZV9tYXJr X3ZhbHVlLCBjb250ZXh0LCBmYWxzZSk7CisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1 ZiwgIiBERUZBVUxUICIpOworCQkJZ2V0X3J1bGVfZXhwcihjdGUtPmN5Y2xlX2NsYXVzZS0+ Y3ljbGVfbWFya19kZWZhdWx0LCBjb250ZXh0LCBmYWxzZSk7CisJCQlhcHBlbmRTdHJpbmdJ bmZvKGJ1ZiwgIiBVU0lORyAlcyIsIHF1b3RlX2lkZW50aWZpZXIoY3RlLT5jeWNsZV9jbGF1 c2UtPmN5Y2xlX3BhdGhfY29sdW1uKSk7CisJCX0KKwogCQlzZXAgPSAiLCAiOwogCX0KIApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25v ZGVzL25vZGVzLmgKaW5kZXggMzY4NGY4N2E4OC4uOWQyMWE1YzZhMyAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rl cy5oCkBAIC00NzAsNiArNDcwLDggQEAgdHlwZWRlZiBlbnVtIE5vZGVUYWcKIAlUX1dpdGhD bGF1c2UsCiAJVF9JbmZlckNsYXVzZSwKIAlUX09uQ29uZmxpY3RDbGF1c2UsCisJVF9DVEVT ZWFyY2hDbGF1c2UsCisJVF9DVEVDeWNsZUNsYXVzZSwKIAlUX0NvbW1vblRhYmxlRXhwciwK IAlUX1JvbGVTcGVjLAogCVRfVHJpZ2dlclRyYW5zaXRpb24sCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5v ZGVzLmgKaW5kZXggZDFmOWVmMjljYS4uMjhjYjRkZDYzZiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNl bm9kZXMuaApAQCAtMTQzOSw5ICsxNDM5LDggQEAgdHlwZWRlZiBzdHJ1Y3QgT25Db25mbGlj dENsYXVzZQogLyoKICAqIENvbW1vblRhYmxlRXhwciAtCiAgKgkgICByZXByZXNlbnRhdGlv biBvZiBXSVRIIGxpc3QgZWxlbWVudAotICoKLSAqIFdlIGRvbid0IGN1cnJlbnRseSBzdXBw b3J0IHRoZSBTRUFSQ0ggb3IgQ1lDTEUgY2xhdXNlLgogICovCisKIHR5cGVkZWYgZW51bSBD VEVNYXRlcmlhbGl6ZQogewogCUNURU1hdGVyaWFsaXplRGVmYXVsdCwJCS8qIG5vIG9wdGlv biBzcGVjaWZpZWQgKi8KQEAgLTE0NDksNiArMTQ0OCwzMSBAQCB0eXBlZGVmIGVudW0gQ1RF TWF0ZXJpYWxpemUKIAlDVEVNYXRlcmlhbGl6ZU5ldmVyCQkJLyogTk9UIE1BVEVSSUFMSVpF RCAqLwogfSBDVEVNYXRlcmlhbGl6ZTsKIAordHlwZWRlZiBzdHJ1Y3QgQ1RFU2VhcmNoQ2xh dXNlCit7CisJTm9kZVRhZwkJdHlwZTsKKwlMaXN0CSAgICpzZWFyY2hfY29sX2xpc3Q7CisJ Ym9vbAkJc2VhcmNoX2JyZWFkdGhfZmlyc3Q7CisJY2hhcgkgICAqc2VhcmNoX3NlcV9jb2x1 bW47CisJaW50CQkJbG9jYXRpb247Cit9IENURVNlYXJjaENsYXVzZTsKKwordHlwZWRlZiBz dHJ1Y3QgQ1RFQ3ljbGVDbGF1c2UKK3sKKwlOb2RlVGFnCQl0eXBlOworCUxpc3QJICAgKmN5 Y2xlX2NvbF9saXN0OworCWNoYXIJICAgKmN5Y2xlX21hcmtfY29sdW1uOworCU5vZGUJICAg KmN5Y2xlX21hcmtfdmFsdWU7CisJTm9kZQkgICAqY3ljbGVfbWFya19kZWZhdWx0OworCWNo YXIJICAgKmN5Y2xlX3BhdGhfY29sdW1uOworCWludAkJCWxvY2F0aW9uOworCS8qIFRoZXNl IGZpZWxkcyBhcmUgc2V0IGR1cmluZyBwYXJzZSBhbmFseXNpczogKi8KKwlPaWQJCQljeWNs ZV9tYXJrX3R5cGU7CS8qIGNvbW1vbiB0eXBlIG9mIF92YWx1ZSBhbmQgX2RlZmF1bHQgKi8K KwlpbnQJCQljeWNsZV9tYXJrX3R5cG1vZDsKKwlPaWQJCQljeWNsZV9tYXJrX2NvbGxhdGlv bjsKKwlPaWQJCQljeWNsZV9tYXJrX25lb3A7CS8qIDw+IG9wZXJhdG9yIGZvciB0eXBlICov Cit9IENURUN5Y2xlQ2xhdXNlOworCiB0eXBlZGVmIHN0cnVjdCBDb21tb25UYWJsZUV4cHIK IHsKIAlOb2RlVGFnCQl0eXBlOwpAQCAtMTQ1Nyw2ICsxNDgxLDggQEAgdHlwZWRlZiBzdHJ1 Y3QgQ29tbW9uVGFibGVFeHByCiAJQ1RFTWF0ZXJpYWxpemUgY3RlbWF0ZXJpYWxpemVkOyAv KiBpcyB0aGlzIGFuIG9wdGltaXphdGlvbiBmZW5jZT8gKi8KIAkvKiBTZWxlY3RTdG10L0lu c2VydFN0bXQvZXRjIGJlZm9yZSBwYXJzZSBhbmFseXNpcywgUXVlcnkgYWZ0ZXJ3YXJkczog Ki8KIAlOb2RlCSAgICpjdGVxdWVyeTsJCS8qIHRoZSBDVEUncyBzdWJxdWVyeSAqLworCUNU RVNlYXJjaENsYXVzZSAqc2VhcmNoX2NsYXVzZTsKKwlDVEVDeWNsZUNsYXVzZSAqY3ljbGVf Y2xhdXNlOwogCWludAkJCWxvY2F0aW9uOwkJLyogdG9rZW4gbG9jYXRpb24sIG9yIC0xIGlm IHVua25vd24gKi8KIAkvKiBUaGVzZSBmaWVsZHMgYXJlIHNldCBkdXJpbmcgcGFyc2UgYW5h bHlzaXM6ICovCiAJYm9vbAkJY3RlcmVjdXJzaXZlOwkvKiBpcyB0aGlzIENURSBhY3R1YWxs eSByZWN1cnNpdmU/ICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wYXJzZXIvYW5hbHl6 ZS5oIGIvc3JjL2luY2x1ZGUvcGFyc2VyL2FuYWx5emUuaAppbmRleCBkNmE0NjdhNTcyLi40 ZjBkY2JjNzdjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wYXJzZXIvYW5hbHl6ZS5oCisr KyBiL3NyYy9pbmNsdWRlL3BhcnNlci9hbmFseXplLmgKQEAgLTQ2LDQgKzQ2LDYgQEAgZXh0 ZXJuIHZvaWQgYXBwbHlMb2NraW5nQ2xhdXNlKFF1ZXJ5ICpxcnksIEluZGV4IHJ0aW5kZXgs CiBleHRlcm4gTGlzdCAqQnVpbGRPbkNvbmZsaWN0RXhjbHVkZWRUYXJnZXRsaXN0KFJlbGF0 aW9uIHRhcmdldHJlbCwKIAkJCQkJCQkJCQkJICAgSW5kZXggZXhjbFJlbEluZGV4KTsKIAor ZXh0ZXJuIFNvcnRHcm91cENsYXVzZSAqbWFrZVNvcnRHcm91cENsYXVzZUZvclNldE9wKE9p ZCByZXNjb2x0eXBlKTsKKwogI2VuZGlmCQkJCQkJCS8qIEFOQUxZWkVfSCAqLwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oIGIvc3JjL2luY2x1ZGUvcGFyc2Vy L2t3bGlzdC5oCmluZGV4IDcxZGNkZjI4ODkuLjljZWFiMzFhMmEgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaAorKysgYi9zcmMvaW5jbHVkZS9wYXJzZXIva3ds aXN0LmgKQEAgLTYwLDYgKzYwLDcgQEAgUEdfS0VZV09SRCgiYmluYXJ5IiwgQklOQVJZLCBU WVBFX0ZVTkNfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiYml0Iiwg QklULCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiYm9vbGVh biIsIEJPT0xFQU5fUCwgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdP UkQoImJvdGgiLCBCT1RILCBSRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZ V09SRCgiYnJlYWR0aCIsIEJSRUFEVEgsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJF TCkKIFBHX0tFWVdPUkQoImJ5IiwgQlksIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJF TCkKIFBHX0tFWVdPUkQoImNhY2hlIiwgQ0FDSEUsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFS RV9MQUJFTCkKIFBHX0tFWVdPUkQoImNhbGwiLCBDQUxMLCBVTlJFU0VSVkVEX0tFWVdPUkQs IEJBUkVfTEFCRUwpCkBAIC0xMjgsNiArMTI5LDcgQEAgUEdfS0VZV09SRCgiZGVsZXRlIiwg REVMRVRFX1AsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQo ImRlbGltaXRlciIsIERFTElNSVRFUiwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVM KQogUEdfS0VZV09SRCgiZGVsaW1pdGVycyIsIERFTElNSVRFUlMsIFVOUkVTRVJWRURfS0VZ V09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImRlcGVuZHMiLCBERVBFTkRTLCBVTlJF U0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlXT1JEKCJkZXB0aCIsIERFUFRI LCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJkZXNjIiwg REVTQywgUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImRldGFj aCIsIERFVEFDSCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09S RCgiZGljdGlvbmFyeSIsIERJQ1RJT05BUlksIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9M QUJFTCkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BhcnNlci9wYXJzZV9ub2RlLmggYi9z cmMvaW5jbHVkZS9wYXJzZXIvcGFyc2Vfbm9kZS5oCmluZGV4IGQyNTgxOWFhMjguLjk1ZThl Yzg1ZjIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3BhcnNlci9wYXJzZV9ub2RlLmgKKysr IGIvc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNlX25vZGUuaApAQCAtNzgsNiArNzgsNyBAQCB0 eXBlZGVmIGVudW0gUGFyc2VFeHByS2luZAogCUVYUFJfS0lORF9DQUxMX0FSR1VNRU5ULAkv KiBwcm9jZWR1cmUgYXJndW1lbnQgaW4gQ0FMTCAqLwogCUVYUFJfS0lORF9DT1BZX1dIRVJF LAkJLyogV0hFUkUgY29uZGl0aW9uIGluIENPUFkgRlJPTSAqLwogCUVYUFJfS0lORF9HRU5F UkFURURfQ09MVU1OLCAvKiBnZW5lcmF0aW9uIGV4cHJlc3Npb24gZm9yIGEgY29sdW1uICov CisJRVhQUl9LSU5EX0NZQ0xFX01BUkssCQkvKiBjeWNsZSBtYXJrIHZhbHVlICovCiB9IFBh cnNlRXhwcktpbmQ7CiAKIApAQCAtMjk0LDYgKzI5NSw3IEBAIHN0cnVjdCBQYXJzZU5hbWVz cGFjZUNvbHVtbgogCU9pZAkJCXBfdmFyY29sbGlkOwkvKiBPSUQgb2YgY29sbGF0aW9uLCBv ciBJbnZhbGlkT2lkICovCiAJSW5kZXgJCXBfdmFybm9zeW47CQkvKiByYW5nZXRhYmxlIGlu ZGV4IG9mIHN5bnRhY3RpYyByZWZlcmVudCAqLwogCUF0dHJOdW1iZXIJcF92YXJhdHRub3N5 bjsJLyogYXR0cmlidXRlIG51bWJlciBvZiBzeW50YWN0aWMgcmVmZXJlbnQgKi8KKwlib29s CQlwX2RvbnRleHBhbmQ7CS8qIG5vdCBpbmNsdWRlZCBpbiBzdGFyIGV4cGFuc2lvbiAqLwog fTsKIAogLyogU3VwcG9ydCBmb3IgcGFyc2VyX2VycnBvc2l0aW9uX2NhbGxiYWNrIGZ1bmN0 aW9uICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXdyaXRlL3Jld3JpdGVTZWFyY2hD eWNsZS5oIGIvc3JjL2luY2x1ZGUvcmV3cml0ZS9yZXdyaXRlU2VhcmNoQ3ljbGUuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4yNTdmYjdjZGFiCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2luY2x1ZGUvcmV3cml0ZS9yZXdyaXRlU2VhcmNoQ3ljbGUuaApA QCAtMCwwICsxLDIxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiByZXdyaXRl U2VhcmNoQ3ljbGUuaAorICoJCVN1cHBvcnQgZm9yIHJld3JpdGluZyBTRUFSQ0ggYW5kIENZ Q0xFIGNsYXVzZXMuCisgKgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0y MDIwLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMg Q29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlm b3JuaWEKKyAqCisgKiBzcmMvaW5jbHVkZS9yZXdyaXRlL3Jld3JpdGVTZWFyY2hDeWNsZS5o CisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUkVXUklURVNFQVJD SENZQ0xFX0gKKyNkZWZpbmUgUkVXUklURVNFQVJDSENZQ0xFX0gKKworI2luY2x1ZGUgIm5v ZGVzL3BhcnNlbm9kZXMuaCIKKworZXh0ZXJuIENvbW1vblRhYmxlRXhwciAqcmV3cml0ZVNl YXJjaEFuZEN5Y2xlKENvbW1vblRhYmxlRXhwciAqY3RlKTsKKworI2VuZGlmCQkJCQkJCS8q IFJFV1JJVEVTRUFSQ0hDWUNMRV9IICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3dpdGgub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC93aXRoLm91 dAppbmRleCA5NDI5ZTlmZDI4Li5kYzliYTMwYjRjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3dpdGgub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvd2l0aC5vdXQKQEAgLTU3Nyw2ICs1NzcsMTkwIEBAIFNFTEVDVCB0MS5pZCwgdDIucGF0 aCwgdDIgRlJPTSB0IEFTIHQxIEpPSU4gdCBBUyB0MiBPTgogIDE2IHwgezMsNywxMSwxNn0g fCAoMTYsInszLDcsMTEsMTZ9IikKICgxNiByb3dzKQogCistLSBTRUFSQ0ggY2xhdXNlCitj cmVhdGUgdGVtcCB0YWJsZSBncmFwaDAoIGYgaW50LCB0IGludCwgbGFiZWwgdGV4dCApOwor aW5zZXJ0IGludG8gZ3JhcGgwIHZhbHVlcworCSgxLCAyLCAnYXJjIDEgLT4gMicpLAorCSgx LCAzLCAnYXJjIDEgLT4gMycpLAorCSgyLCAzLCAnYXJjIDIgLT4gMycpLAorCSgxLCA0LCAn YXJjIDEgLT4gNCcpLAorCSg0LCA1LCAnYXJjIDQgLT4gNScpOword2l0aCByZWN1cnNpdmUg c2VhcmNoX2dyYXBoKGYsIHQsIGxhYmVsKSBhcyAoCisJc2VsZWN0ICogZnJvbSBncmFwaDAg ZworCXVuaW9uIGFsbAorCXNlbGVjdCBnLioKKwlmcm9tIGdyYXBoMCBnLCBzZWFyY2hfZ3Jh cGggc2cKKwl3aGVyZSBnLmYgPSBzZy50CispIHNlYXJjaCBkZXB0aCBmaXJzdCBieSBmLCB0 IHNldCBzZXEKK3NlbGVjdCAqIGZyb20gc2VhcmNoX2dyYXBoIG9yZGVyIGJ5IHNlcTsKKyBm IHwgdCB8ICAgbGFiZWwgICAgfCAgICAgICAgc2VxICAgICAgICAKKy0tLSstLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIHwgMiB8IGFyYyAxIC0+IDIgfCB7Iigx LDIpIn0KKyAyIHwgMyB8IGFyYyAyIC0+IDMgfCB7IigxLDIpIiwiKDIsMykifQorIDEgfCAz IHwgYXJjIDEgLT4gMyB8IHsiKDEsMykifQorIDEgfCA0IHwgYXJjIDEgLT4gNCB8IHsiKDEs NCkifQorIDQgfCA1IHwgYXJjIDQgLT4gNSB8IHsiKDEsNCkiLCIoNCw1KSJ9CisgMiB8IDMg fCBhcmMgMiAtPiAzIHwgeyIoMiwzKSJ9CisgNCB8IDUgfCBhcmMgNCAtPiA1IHwgeyIoNCw1 KSJ9CisoNyByb3dzKQorCit3aXRoIHJlY3Vyc2l2ZSBzZWFyY2hfZ3JhcGgoZiwgdCwgbGFi ZWwpIGFzICgKKwlzZWxlY3QgKiBmcm9tIGdyYXBoMCBnCisJdW5pb24gZGlzdGluY3QKKwlz ZWxlY3QgZy4qCisJZnJvbSBncmFwaDAgZywgc2VhcmNoX2dyYXBoIHNnCisJd2hlcmUgZy5m ID0gc2cudAorKSBzZWFyY2ggZGVwdGggZmlyc3QgYnkgZiwgdCBzZXQgc2VxCitzZWxlY3Qg KiBmcm9tIHNlYXJjaF9ncmFwaCBvcmRlciBieSBzZXE7CisgZiB8IHQgfCAgIGxhYmVsICAg IHwgICAgICAgIHNlcSAgICAgICAgCistLS0rLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tCisgMSB8IDIgfCBhcmMgMSAtPiAyIHwgeyIoMSwyKSJ9CisgMiB8IDMgfCBh cmMgMiAtPiAzIHwgeyIoMSwyKSIsIigyLDMpIn0KKyAxIHwgMyB8IGFyYyAxIC0+IDMgfCB7 IigxLDMpIn0KKyAxIHwgNCB8IGFyYyAxIC0+IDQgfCB7IigxLDQpIn0KKyA0IHwgNSB8IGFy YyA0IC0+IDUgfCB7IigxLDQpIiwiKDQsNSkifQorIDIgfCAzIHwgYXJjIDIgLT4gMyB8IHsi KDIsMykifQorIDQgfCA1IHwgYXJjIDQgLT4gNSB8IHsiKDQsNSkifQorKDcgcm93cykKKwor d2l0aCByZWN1cnNpdmUgc2VhcmNoX2dyYXBoKGYsIHQsIGxhYmVsKSBhcyAoCisJc2VsZWN0 ICogZnJvbSBncmFwaDAgZworCXVuaW9uIGFsbAorCXNlbGVjdCBnLioKKwlmcm9tIGdyYXBo MCBnLCBzZWFyY2hfZ3JhcGggc2cKKwl3aGVyZSBnLmYgPSBzZy50CispIHNlYXJjaCBicmVh ZHRoIGZpcnN0IGJ5IGYsIHQgc2V0IHNlcQorc2VsZWN0ICogZnJvbSBzZWFyY2hfZ3JhcGgg b3JkZXIgYnkgc2VxOworIGYgfCB0IHwgICBsYWJlbCAgICB8ICAgc2VxICAgCistLS0rLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0KKyAxIHwgMiB8IGFyYyAxIC0+IDIgfCAoMCwxLDIp CisgMSB8IDMgfCBhcmMgMSAtPiAzIHwgKDAsMSwzKQorIDEgfCA0IHwgYXJjIDEgLT4gNCB8 ICgwLDEsNCkKKyAyIHwgMyB8IGFyYyAyIC0+IDMgfCAoMCwyLDMpCisgNCB8IDUgfCBhcmMg NCAtPiA1IHwgKDAsNCw1KQorIDIgfCAzIHwgYXJjIDIgLT4gMyB8ICgxLDIsMykKKyA0IHwg NSB8IGFyYyA0IC0+IDUgfCAoMSw0LDUpCisoNyByb3dzKQorCit3aXRoIHJlY3Vyc2l2ZSBz ZWFyY2hfZ3JhcGgoZiwgdCwgbGFiZWwpIGFzICgKKwlzZWxlY3QgKiBmcm9tIGdyYXBoMCBn CisJdW5pb24gZGlzdGluY3QKKwlzZWxlY3QgZy4qCisJZnJvbSBncmFwaDAgZywgc2VhcmNo X2dyYXBoIHNnCisJd2hlcmUgZy5mID0gc2cudAorKSBzZWFyY2ggYnJlYWR0aCBmaXJzdCBi eSBmLCB0IHNldCBzZXEKK3NlbGVjdCAqIGZyb20gc2VhcmNoX2dyYXBoIG9yZGVyIGJ5IHNl cTsKKyBmIHwgdCB8ICAgbGFiZWwgICAgfCAgIHNlcSAgIAorLS0tKy0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tCisgMSB8IDIgfCBhcmMgMSAtPiAyIHwgKDAsMSwyKQorIDEgfCAzIHwg YXJjIDEgLT4gMyB8ICgwLDEsMykKKyAxIHwgNCB8IGFyYyAxIC0+IDQgfCAoMCwxLDQpCisg MiB8IDMgfCBhcmMgMiAtPiAzIHwgKDAsMiwzKQorIDQgfCA1IHwgYXJjIDQgLT4gNSB8ICgw LDQsNSkKKyAyIHwgMyB8IGFyYyAyIC0+IDMgfCAoMSwyLDMpCisgNCB8IDUgfCBhcmMgNCAt PiA1IHwgKDEsNCw1KQorKDcgcm93cykKKworLS0gdmFyaW91cyBzeW50YXggZXJyb3JzCit3 aXRoIHJlY3Vyc2l2ZSBzZWFyY2hfZ3JhcGgoZiwgdCwgbGFiZWwpIGFzICgKKwlzZWxlY3Qg KiBmcm9tIGdyYXBoMCBnCisJdW5pb24gYWxsCisJc2VsZWN0IGcuKgorCWZyb20gZ3JhcGgw IGcsIHNlYXJjaF9ncmFwaCBzZworCXdoZXJlIGcuZiA9IHNnLnQKKykgc2VhcmNoIGRlcHRo IGZpcnN0IGJ5IGZvbywgdGFyIHNldCBzZXEKK3NlbGVjdCAqIGZyb20gc2VhcmNoX2dyYXBo OworRVJST1I6ICBzZWFyY2ggY29sdW1uICJmb28iIG5vdCBpbiBXSVRIIHF1ZXJ5IGNvbHVt biBsaXN0CitMSU5FIDc6ICkgc2VhcmNoIGRlcHRoIGZpcnN0IGJ5IGZvbywgdGFyIHNldCBz ZXEKKyAgICAgICAgICBeCit3aXRoIHJlY3Vyc2l2ZSBzZWFyY2hfZ3JhcGgoZiwgdCwgbGFi ZWwpIGFzICgKKwlzZWxlY3QgKiBmcm9tIGdyYXBoMCBnCisJdW5pb24gYWxsCisJc2VsZWN0 IGcuKgorCWZyb20gZ3JhcGgwIGcsIHNlYXJjaF9ncmFwaCBzZworCXdoZXJlIGcuZiA9IHNn LnQKKykgc2VhcmNoIGRlcHRoIGZpcnN0IGJ5IGYsIHQgc2V0IGxhYmVsCitzZWxlY3QgKiBm cm9tIHNlYXJjaF9ncmFwaDsKK0VSUk9SOiAgc2VhcmNoIHNlcXVlbmNlIGNvbHVtbiBuYW1l ICJsYWJlbCIgYWxyZWFkeSB1c2VkIGluIFdJVEggcXVlcnkgY29sdW1uIGxpc3QKK0xJTkUg NzogKSBzZWFyY2ggZGVwdGggZmlyc3QgYnkgZiwgdCBzZXQgbGFiZWwKKyAgICAgICAgICBe Cit3aXRoIHJlY3Vyc2l2ZSBzZWFyY2hfZ3JhcGgoZiwgdCwgbGFiZWwpIGFzICgKKwlzZWxl Y3QgKiBmcm9tIGdyYXBoMCBnCisJdW5pb24gYWxsCisJc2VsZWN0IGcuKgorCWZyb20gZ3Jh cGgwIGcsIHNlYXJjaF9ncmFwaCBzZworCXdoZXJlIGcuZiA9IHNnLnQKKykgc2VhcmNoIGRl cHRoIGZpcnN0IGJ5IGYsIHQsIGYgc2V0IHNlcQorc2VsZWN0ICogZnJvbSBzZWFyY2hfZ3Jh cGg7CitFUlJPUjogIHNlYXJjaCBjb2x1bW4gImYiIHNwZWNpZmllZCBtb3JlIHRoYW4gb25j ZQorTElORSA3OiApIHNlYXJjaCBkZXB0aCBmaXJzdCBieSBmLCB0LCBmIHNldCBzZXEKKyAg ICAgICAgICBeCit3aXRoIHJlY3Vyc2l2ZSBzZWFyY2hfZ3JhcGgoZiwgdCwgbGFiZWwpIGFz ICgKKwlzZWxlY3QgKiBmcm9tIGdyYXBoMCBnCisJdW5pb24gYWxsCisJc2VsZWN0ICogZnJv bSBncmFwaDAgZworCXVuaW9uIGFsbAorCXNlbGVjdCBnLioKKwlmcm9tIGdyYXBoMCBnLCBz ZWFyY2hfZ3JhcGggc2cKKwl3aGVyZSBnLmYgPSBzZy50CispIHNlYXJjaCBkZXB0aCBmaXJz dCBieSBmLCB0IHNldCBzZXEKK3NlbGVjdCAqIGZyb20gc2VhcmNoX2dyYXBoIG9yZGVyIGJ5 IHNlcTsKK0VSUk9SOiAgd2l0aCBhIFNFQVJDSCBvciBDWUNMRSBjbGF1c2UsIHRoZSBsZWZ0 IHNpZGUgb2YgdGhlIFVOSU9OIG11c3QgYmUgYSBTRUxFQ1QKK3dpdGggcmVjdXJzaXZlIHNl YXJjaF9ncmFwaChmLCB0LCBsYWJlbCkgYXMgKAorCXNlbGVjdCAqIGZyb20gZ3JhcGgwIGcK Kwl1bmlvbiBhbGwKKwkoc2VsZWN0ICogZnJvbSBncmFwaDAgZworCXVuaW9uIGFsbAorCXNl bGVjdCBnLioKKwlmcm9tIGdyYXBoMCBnLCBzZWFyY2hfZ3JhcGggc2cKKwl3aGVyZSBnLmYg PSBzZy50KQorKSBzZWFyY2ggZGVwdGggZmlyc3QgYnkgZiwgdCBzZXQgc2VxCitzZWxlY3Qg KiBmcm9tIHNlYXJjaF9ncmFwaCBvcmRlciBieSBzZXE7CitFUlJPUjogIHdpdGggYSBTRUFS Q0ggb3IgQ1lDTEUgY2xhdXNlLCB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgVU5JT04gbXVzdCBi ZSBhIFNFTEVDVAorLS0gdGVzdCBydWxldXRpbHMgYW5kIHZpZXcgZXhwYW5zaW9uCitjcmVh dGUgdGVtcCB2aWV3IHZfc2VhcmNoIGFzCit3aXRoIHJlY3Vyc2l2ZSBzZWFyY2hfZ3JhcGgo ZiwgdCwgbGFiZWwpIGFzICgKKwlzZWxlY3QgKiBmcm9tIGdyYXBoMCBnCisJdW5pb24gYWxs CisJc2VsZWN0IGcuKgorCWZyb20gZ3JhcGgwIGcsIHNlYXJjaF9ncmFwaCBzZworCXdoZXJl IGcuZiA9IHNnLnQKKykgc2VhcmNoIGRlcHRoIGZpcnN0IGJ5IGYsIHQgc2V0IHNlcQorc2Vs ZWN0IGYsIHQsIGxhYmVsIGZyb20gc2VhcmNoX2dyYXBoOworc2VsZWN0IHBnX2dldF92aWV3 ZGVmKCd2X3NlYXJjaCcpOworICAgICAgICAgICAgICAgICBwZ19nZXRfdmlld2RlZiAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAgV0lUSCBSRUNVUlNJVkUgc2VhcmNoX2dyYXBoKGYsIHQsIGxhYmVsKSBB UyAoKworICAgICAgICAgIFNFTEVDVCBnLmYsICAgICAgICAgICAgICAgICAgICAgICAgICAr CisgICAgICAgICAgICAgZy50LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAg ICAgICAgICAgICBnLmxhYmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAg ICAgICAgRlJPTSBncmFwaDAgZyAgICAgICAgICAgICAgICAgICAgICArCisgICAgICAgICBV TklPTiBBTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgICAgICBTRUxF Q1QgZy5mLCAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAgIGcudCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICAgICAgICAgZy5sYWJlbCAg ICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgICAgICAgIEZST00gZ3JhcGgwIGcs ICAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAgIHNlYXJjaF9ncmFwaCBzZyAg ICAgICAgICAgICAgICAgICArCisgICAgICAgICAgIFdIRVJFIChnLmYgPSBzZy50KSAgICAg ICAgICAgICAgICAgICsKKyAgICAgICAgICkgU0VBUkNIIERFUFRIIEZJUlNUIEJZIGYsIHQg U0VUIHNlcSAgKworICBTRUxFQ1Qgc2VhcmNoX2dyYXBoLmYsICAgICAgICAgICAgICAgICAg ICAgICArCisgICAgIHNlYXJjaF9ncmFwaC50LCAgICAgICAgICAgICAgICAgICAgICAgICAg ICsKKyAgICAgc2VhcmNoX2dyYXBoLmxhYmVsICAgICAgICAgICAgICAgICAgICAgICAgKwor ICAgIEZST00gc2VhcmNoX2dyYXBoOworKDEgcm93KQorCitzZWxlY3QgKiBmcm9tIHZfc2Vh cmNoOworIGYgfCB0IHwgICBsYWJlbCAgICAKKy0tLSstLS0rLS0tLS0tLS0tLS0tCisgMSB8 IDIgfCBhcmMgMSAtPiAyCisgMSB8IDMgfCBhcmMgMSAtPiAzCisgMiB8IDMgfCBhcmMgMiAt PiAzCisgMSB8IDQgfCBhcmMgMSAtPiA0CisgNCB8IDUgfCBhcmMgNCAtPiA1CisgMiB8IDMg fCBhcmMgMiAtPiAzCisgNCB8IDUgfCBhcmMgNCAtPiA1CisoNyByb3dzKQorCiAtLQogLS0g dGVzdCBjeWNsZSBkZXRlY3Rpb24KIC0tCkBAIC03MDEsNiArODg1LDM4MCBAQCBzZWxlY3Qg KiBmcm9tIHNlYXJjaF9ncmFwaCBvcmRlciBieSBwYXRoOwogIDUgfCAxIHwgYXJjIDUgLT4g MSB8IHQgICAgICAgIHwgeyIoNSwxKSIsIigxLDQpIiwiKDQsNSkiLCIoNSwxKSJ9CiAoMjUg cm93cykKIAorLS0gQ1lDTEUgY2xhdXNlCit3aXRoIHJlY3Vyc2l2ZSBzZWFyY2hfZ3JhcGgo ZiwgdCwgbGFiZWwpIGFzICgKKwlzZWxlY3QgKiBmcm9tIGdyYXBoIGcKKwl1bmlvbiBhbGwK KwlzZWxlY3QgZy4qCisJZnJvbSBncmFwaCBnLCBzZWFyY2hfZ3JhcGggc2cKKwl3aGVyZSBn LmYgPSBzZy50CispIGN5Y2xlIGYsIHQgc2V0IGlzX2N5Y2xlIHRvIHRydWUgZGVmYXVsdCBm YWxzZSB1c2luZyBwYXRoCitzZWxlY3QgKiBmcm9tIHNlYXJjaF9ncmFwaDsKKyBmIHwgdCB8 ICAgbGFiZWwgICAgfCBpc19jeWNsZSB8ICAgICAgICAgICAgICAgICAgIHBhdGggICAgICAg ICAgICAgICAgICAgIAorLS0tKy0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSB8IDIgfCBhcmMgMSAt PiAyIHwgZiAgICAgICAgfCB7IigxLDIpIn0KKyAxIHwgMyB8IGFyYyAxIC0+IDMgfCBmICAg ICAgICB8IHsiKDEsMykifQorIDIgfCAzIHwgYXJjIDIgLT4gMyB8IGYgICAgICAgIHwgeyIo MiwzKSJ9CisgMSB8IDQgfCBhcmMgMSAtPiA0IHwgZiAgICAgICAgfCB7IigxLDQpIn0KKyA0 IHwgNSB8IGFyYyA0IC0+IDUgfCBmICAgICAgICB8IHsiKDQsNSkifQorIDUgfCAxIHwgYXJj IDUgLT4gMSB8IGYgICAgICAgIHwgeyIoNSwxKSJ9CisgMSB8IDIgfCBhcmMgMSAtPiAyIHwg ZiAgICAgICAgfCB7Iig1LDEpIiwiKDEsMikifQorIDEgfCAzIHwgYXJjIDEgLT4gMyB8IGYg ICAgICAgIHwgeyIoNSwxKSIsIigxLDMpIn0KKyAxIHwgNCB8IGFyYyAxIC0+IDQgfCBmICAg ICAgICB8IHsiKDUsMSkiLCIoMSw0KSJ9CisgMiB8IDMgfCBhcmMgMiAtPiAzIHwgZiAgICAg ICAgfCB7IigxLDIpIiwiKDIsMykifQorIDQgfCA1IHwgYXJjIDQgLT4gNSB8IGYgICAgICAg IHwgeyIoMSw0KSIsIig0LDUpIn0KKyA1IHwgMSB8IGFyYyA1IC0+IDEgfCBmICAgICAgICB8 IHsiKDQsNSkiLCIoNSwxKSJ9CisgMSB8IDIgfCBhcmMgMSAtPiAyIHwgZiAgICAgICAgfCB7 Iig0LDUpIiwiKDUsMSkiLCIoMSwyKSJ9CisgMSB8IDMgfCBhcmMgMSAtPiAzIHwgZiAgICAg ICAgfCB7Iig0LDUpIiwiKDUsMSkiLCIoMSwzKSJ9CisgMSB8IDQgfCBhcmMgMSAtPiA0IHwg ZiAgICAgICAgfCB7Iig0LDUpIiwiKDUsMSkiLCIoMSw0KSJ9CisgMiB8IDMgfCBhcmMgMiAt PiAzIHwgZiAgICAgICAgfCB7Iig1LDEpIiwiKDEsMikiLCIoMiwzKSJ9CisgNCB8IDUgfCBh cmMgNCAtPiA1IHwgZiAgICAgICAgfCB7Iig1LDEpIiwiKDEsNCkiLCIoNCw1KSJ9CisgNSB8 IDEgfCBhcmMgNSAtPiAxIHwgZiAgICAgICAgfCB7IigxLDQpIiwiKDQsNSkiLCIoNSwxKSJ9 CisgMSB8IDIgfCBhcmMgMSAtPiAyIHwgZiAgICAgICAgfCB7IigxLDQpIiwiKDQsNSkiLCIo NSwxKSIsIigxLDIpIn0KKyAxIHwgMyB8IGFyYyAxIC0+IDMgfCBmICAgICAgICB8IHsiKDEs NCkiLCIoNCw1KSIsIig1LDEpIiwiKDEsMykifQorIDEgfCA0IHwgYXJjIDEgLT4gNCB8IHQg ICAgICAgIHwgeyIoMSw0KSIsIig0LDUpIiwiKDUsMSkiLCIoMSw0KSJ9CisgMiB8IDMgfCBh cmMgMiAtPiAzIHwgZiAgICAgICAgfCB7Iig0LDUpIiwiKDUsMSkiLCIoMSwyKSIsIigyLDMp In0KKyA0IHwgNSB8IGFyYyA0IC0+IDUgfCB0ICAgICAgICB8IHsiKDQsNSkiLCIoNSwxKSIs IigxLDQpIiwiKDQsNSkifQorIDUgfCAxIHwgYXJjIDUgLT4gMSB8IHQgICAgICAgIHwgeyIo NSwxKSIsIigxLDQpIiwiKDQsNSkiLCIoNSwxKSJ9CisgMiB8IDMgfCBhcmMgMiAtPiAzIHwg ZiAgICAgICAgfCB7IigxLDQpIiwiKDQsNSkiLCIoNSwxKSIsIigxLDIpIiwiKDIsMykifQor KDI1IHJvd3MpCisKK3dpdGggcmVjdXJzaXZlIHNlYXJjaF9ncmFwaChmLCB0LCBsYWJlbCkg YXMgKAorCXNlbGVjdCAqIGZyb20gZ3JhcGggZworCXVuaW9uIGRpc3RpbmN0CisJc2VsZWN0 IGcuKgorCWZyb20gZ3JhcGggZywgc2VhcmNoX2dyYXBoIHNnCisJd2hlcmUgZy5mID0gc2cu dAorKSBjeWNsZSBmLCB0IHNldCBpc19jeWNsZSB0byAnWScgZGVmYXVsdCAnTicgdXNpbmcg cGF0aAorc2VsZWN0ICogZnJvbSBzZWFyY2hfZ3JhcGg7CisgZiB8IHQgfCAgIGxhYmVsICAg IHwgaXNfY3ljbGUgfCAgICAgICAgICAgICAgICAgICBwYXRoICAgICAgICAgICAgICAgICAg ICAKKy0tLSstLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgfCAyIHwgYXJjIDEgLT4gMiB8IE4gICAg ICAgIHwgeyIoMSwyKSJ9CisgMSB8IDMgfCBhcmMgMSAtPiAzIHwgTiAgICAgICAgfCB7Iigx LDMpIn0KKyAyIHwgMyB8IGFyYyAyIC0+IDMgfCBOICAgICAgICB8IHsiKDIsMykifQorIDEg fCA0IHwgYXJjIDEgLT4gNCB8IE4gICAgICAgIHwgeyIoMSw0KSJ9CisgNCB8IDUgfCBhcmMg NCAtPiA1IHwgTiAgICAgICAgfCB7Iig0LDUpIn0KKyA1IHwgMSB8IGFyYyA1IC0+IDEgfCBO ICAgICAgICB8IHsiKDUsMSkifQorIDEgfCAyIHwgYXJjIDEgLT4gMiB8IE4gICAgICAgIHwg eyIoNSwxKSIsIigxLDIpIn0KKyAxIHwgMyB8IGFyYyAxIC0+IDMgfCBOICAgICAgICB8IHsi KDUsMSkiLCIoMSwzKSJ9CisgMSB8IDQgfCBhcmMgMSAtPiA0IHwgTiAgICAgICAgfCB7Iig1 LDEpIiwiKDEsNCkifQorIDIgfCAzIHwgYXJjIDIgLT4gMyB8IE4gICAgICAgIHwgeyIoMSwy KSIsIigyLDMpIn0KKyA0IHwgNSB8IGFyYyA0IC0+IDUgfCBOICAgICAgICB8IHsiKDEsNCki LCIoNCw1KSJ9CisgNSB8IDEgfCBhcmMgNSAtPiAxIHwgTiAgICAgICAgfCB7Iig0LDUpIiwi KDUsMSkifQorIDEgfCAyIHwgYXJjIDEgLT4gMiB8IE4gICAgICAgIHwgeyIoNCw1KSIsIig1 LDEpIiwiKDEsMikifQorIDEgfCAzIHwgYXJjIDEgLT4gMyB8IE4gICAgICAgIHwgeyIoNCw1 KSIsIig1LDEpIiwiKDEsMykifQorIDEgfCA0IHwgYXJjIDEgLT4gNCB8IE4gICAgICAgIHwg eyIoNCw1KSIsIig1LDEpIiwiKDEsNCkifQorIDIgfCAzIHwgYXJjIDIgLT4gMyB8IE4gICAg ICAgIHwgeyIoNSwxKSIsIigxLDIpIiwiKDIsMykifQorIDQgfCA1IHwgYXJjIDQgLT4gNSB8 IE4gICAgICAgIHwgeyIoNSwxKSIsIigxLDQpIiwiKDQsNSkifQorIDUgfCAxIHwgYXJjIDUg LT4gMSB8IE4gICAgICAgIHwgeyIoMSw0KSIsIig0LDUpIiwiKDUsMSkifQorIDEgfCAyIHwg YXJjIDEgLT4gMiB8IE4gICAgICAgIHwgeyIoMSw0KSIsIig0LDUpIiwiKDUsMSkiLCIoMSwy KSJ9CisgMSB8IDMgfCBhcmMgMSAtPiAzIHwgTiAgICAgICAgfCB7IigxLDQpIiwiKDQsNSki LCIoNSwxKSIsIigxLDMpIn0KKyAxIHwgNCB8IGFyYyAxIC0+IDQgfCBZICAgICAgICB8IHsi KDEsNCkiLCIoNCw1KSIsIig1LDEpIiwiKDEsNCkifQorIDIgfCAzIHwgYXJjIDIgLT4gMyB8 IE4gICAgICAgIHwgeyIoNCw1KSIsIig1LDEpIiwiKDEsMikiLCIoMiwzKSJ9CisgNCB8IDUg fCBhcmMgNCAtPiA1IHwgWSAgICAgICAgfCB7Iig0LDUpIiwiKDUsMSkiLCIoMSw0KSIsIig0 LDUpIn0KKyA1IHwgMSB8IGFyYyA1IC0+IDEgfCBZICAgICAgICB8IHsiKDUsMSkiLCIoMSw0 KSIsIig0LDUpIiwiKDUsMSkifQorIDIgfCAzIHwgYXJjIDIgLT4gMyB8IE4gICAgICAgIHwg eyIoMSw0KSIsIig0LDUpIiwiKDUsMSkiLCIoMSwyKSIsIigyLDMpIn0KKygyNSByb3dzKQor CistLSBtdWx0aXBsZSBDVEVzCit3aXRoIHJlY3Vyc2l2ZQorZ3JhcGgoZiwgdCwgbGFiZWwp IGFzICgKKyAgdmFsdWVzICgxLCAyLCAnYXJjIDEgLT4gMicpLAorICAgICAgICAgKDEsIDMs ICdhcmMgMSAtPiAzJyksCisgICAgICAgICAoMiwgMywgJ2FyYyAyIC0+IDMnKSwKKyAgICAg ICAgICgxLCA0LCAnYXJjIDEgLT4gNCcpLAorICAgICAgICAgKDQsIDUsICdhcmMgNCAtPiA1 JyksCisgICAgICAgICAoNSwgMSwgJ2FyYyA1IC0+IDEnKQorKSwKK3NlYXJjaF9ncmFwaChm LCB0LCBsYWJlbCkgYXMgKAorICAgICAgICBzZWxlY3QgKiBmcm9tIGdyYXBoIGcKKyAgICAg ICAgdW5pb24gYWxsCisgICAgICAgIHNlbGVjdCBnLioKKyAgICAgICAgZnJvbSBncmFwaCBn LCBzZWFyY2hfZ3JhcGggc2cKKyAgICAgICAgd2hlcmUgZy5mID0gc2cudAorKSBjeWNsZSBm LCB0IHNldCBpc19jeWNsZSB0byB0cnVlIGRlZmF1bHQgZmFsc2UgdXNpbmcgcGF0aAorc2Vs ZWN0IGYsIHQsIGxhYmVsIGZyb20gc2VhcmNoX2dyYXBoOworIGYgfCB0IHwgICBsYWJlbCAg ICAKKy0tLSstLS0rLS0tLS0tLS0tLS0tCisgMSB8IDIgfCBhcmMgMSAtPiAyCisgMSB8IDMg fCBhcmMgMSAtPiAzCisgMiB8IDMgfCBhcmMgMiAtPiAzCisgMSB8IDQgfCBhcmMgMSAtPiA0 CisgNCB8IDUgfCBhcmMgNCAtPiA1CisgNSB8IDEgfCBhcmMgNSAtPiAxCisgMiB8IDMgfCBh cmMgMiAtPiAzCisgNCB8IDUgfCBhcmMgNCAtPiA1CisgNSB8IDEgfCBhcmMgNSAtPiAxCisg MSB8IDQgfCBhcmMgMSAtPiA0CisgMSB8IDMgfCBhcmMgMSAtPiAzCisgMSB8IDIgfCBhcmMg MSAtPiAyCisgNSB8IDEgfCBhcmMgNSAtPiAxCisgMSB8IDQgfCBhcmMgMSAtPiA0CisgMSB8 IDMgfCBhcmMgMSAtPiAzCisgMSB8IDIgfCBhcmMgMSAtPiAyCisgNCB8IDUgfCBhcmMgNCAt PiA1CisgMiB8IDMgfCBhcmMgMiAtPiAzCisgMSB8IDQgfCBhcmMgMSAtPiA0CisgMSB8IDMg fCBhcmMgMSAtPiAzCisgMSB8IDIgfCBhcmMgMSAtPiAyCisgNCB8IDUgfCBhcmMgNCAtPiA1 CisgMiB8IDMgfCBhcmMgMiAtPiAzCisgNSB8IDEgfCBhcmMgNSAtPiAxCisgMiB8IDMgfCBh cmMgMiAtPiAzCisoMjUgcm93cykKKworLS0gc3RhciBleHBhbnNpb24KK3dpdGggcmVjdXJz aXZlIGEgYXMgKAorCXNlbGVjdCAxIGFzIGIKKwl1bmlvbiBhbGwKKwlzZWxlY3QgKiBmcm9t IGEKKykgY3ljbGUgYiBzZXQgYyB0byB0cnVlIGRlZmF1bHQgZmFsc2UgdXNpbmcgcAorc2Vs ZWN0ICogZnJvbSBhOworIGIgfCBjIHwgICAgIHAgICAgIAorLS0tKy0tLSstLS0tLS0tLS0t LQorIDEgfCBmIHwgeygxKX0KKyAxIHwgdCB8IHsoMSksKDEpfQorKDIgcm93cykKKworLS0g c2VhcmNoK2N5Y2xlCit3aXRoIHJlY3Vyc2l2ZSBzZWFyY2hfZ3JhcGgoZiwgdCwgbGFiZWwp IGFzICgKKwlzZWxlY3QgKiBmcm9tIGdyYXBoIGcKKwl1bmlvbiBhbGwKKwlzZWxlY3QgZy4q CisJZnJvbSBncmFwaCBnLCBzZWFyY2hfZ3JhcGggc2cKKwl3aGVyZSBnLmYgPSBzZy50Cisp IHNlYXJjaCBkZXB0aCBmaXJzdCBieSBmLCB0IHNldCBzZXEKKyAgY3ljbGUgZiwgdCBzZXQg aXNfY3ljbGUgdG8gdHJ1ZSBkZWZhdWx0IGZhbHNlIHVzaW5nIHBhdGgKK3NlbGVjdCAqIGZy b20gc2VhcmNoX2dyYXBoOworIGYgfCB0IHwgICBsYWJlbCAgICB8ICAgICAgICAgICAgICAg ICAgICBzZXEgICAgICAgICAgICAgICAgICAgIHwgaXNfY3ljbGUgfCAgICAgICAgICAgICAg ICAgICBwYXRoICAgICAgICAgICAgICAgICAgICAKKy0tLSstLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSB8IDIgfCBh cmMgMSAtPiAyIHwgeyIoMSwyKSJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCBmICAgICAgICB8IHsiKDEsMikifQorIDEgfCAzIHwgYXJjIDEgLT4gMyB8IHsiKDEsMyki fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZiAgICAgICAgfCB7IigxLDMp In0KKyAyIHwgMyB8IGFyYyAyIC0+IDMgfCB7IigyLDMpIn0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8IGYgICAgICAgIHwgeyIoMiwzKSJ9CisgMSB8IDQgfCBhcmMgMSAt PiA0IHwgeyIoMSw0KSJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmICAg ICAgICB8IHsiKDEsNCkifQorIDQgfCA1IHwgYXJjIDQgLT4gNSB8IHsiKDQsNSkifSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZiAgICAgICAgfCB7Iig0LDUpIn0KKyA1 IHwgMSB8IGFyYyA1IC0+IDEgfCB7Iig1LDEpIn0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8IGYgICAgICAgIHwgeyIoNSwxKSJ9CisgMSB8IDIgfCBhcmMgMSAtPiAyIHwg eyIoNSwxKSIsIigxLDIpIn0gICAgICAgICAgICAgICAgICAgICAgICAgfCBmICAgICAgICB8 IHsiKDUsMSkiLCIoMSwyKSJ9CisgMSB8IDMgfCBhcmMgMSAtPiAzIHwgeyIoNSwxKSIsIigx LDMpIn0gICAgICAgICAgICAgICAgICAgICAgICAgfCBmICAgICAgICB8IHsiKDUsMSkiLCIo MSwzKSJ9CisgMSB8IDQgfCBhcmMgMSAtPiA0IHwgeyIoNSwxKSIsIigxLDQpIn0gICAgICAg ICAgICAgICAgICAgICAgICAgfCBmICAgICAgICB8IHsiKDUsMSkiLCIoMSw0KSJ9CisgMiB8 IDMgfCBhcmMgMiAtPiAzIHwgeyIoMSwyKSIsIigyLDMpIn0gICAgICAgICAgICAgICAgICAg ICAgICAgfCBmICAgICAgICB8IHsiKDEsMikiLCIoMiwzKSJ9CisgNCB8IDUgfCBhcmMgNCAt PiA1IHwgeyIoMSw0KSIsIig0LDUpIn0gICAgICAgICAgICAgICAgICAgICAgICAgfCBmICAg ICAgICB8IHsiKDEsNCkiLCIoNCw1KSJ9CisgNSB8IDEgfCBhcmMgNSAtPiAxIHwgeyIoNCw1 KSIsIig1LDEpIn0gICAgICAgICAgICAgICAgICAgICAgICAgfCBmICAgICAgICB8IHsiKDQs NSkiLCIoNSwxKSJ9CisgMSB8IDIgfCBhcmMgMSAtPiAyIHwgeyIoNCw1KSIsIig1LDEpIiwi KDEsMikifSAgICAgICAgICAgICAgICAgfCBmICAgICAgICB8IHsiKDQsNSkiLCIoNSwxKSIs IigxLDIpIn0KKyAxIHwgMyB8IGFyYyAxIC0+IDMgfCB7Iig0LDUpIiwiKDUsMSkiLCIoMSwz KSJ9ICAgICAgICAgICAgICAgICB8IGYgICAgICAgIHwgeyIoNCw1KSIsIig1LDEpIiwiKDEs MykifQorIDEgfCA0IHwgYXJjIDEgLT4gNCB8IHsiKDQsNSkiLCIoNSwxKSIsIigxLDQpIn0g ICAgICAgICAgICAgICAgIHwgZiAgICAgICAgfCB7Iig0LDUpIiwiKDUsMSkiLCIoMSw0KSJ9 CisgMiB8IDMgfCBhcmMgMiAtPiAzIHwgeyIoNSwxKSIsIigxLDIpIiwiKDIsMykifSAgICAg ICAgICAgICAgICAgfCBmICAgICAgICB8IHsiKDUsMSkiLCIoMSwyKSIsIigyLDMpIn0KKyA0 IHwgNSB8IGFyYyA0IC0+IDUgfCB7Iig1LDEpIiwiKDEsNCkiLCIoNCw1KSJ9ICAgICAgICAg ICAgICAgICB8IGYgICAgICAgIHwgeyIoNSwxKSIsIigxLDQpIiwiKDQsNSkifQorIDUgfCAx IHwgYXJjIDUgLT4gMSB8IHsiKDEsNCkiLCIoNCw1KSIsIig1LDEpIn0gICAgICAgICAgICAg ICAgIHwgZiAgICAgICAgfCB7IigxLDQpIiwiKDQsNSkiLCIoNSwxKSJ9CisgMSB8IDIgfCBh cmMgMSAtPiAyIHwgeyIoMSw0KSIsIig0LDUpIiwiKDUsMSkiLCIoMSwyKSJ9ICAgICAgICAg fCBmICAgICAgICB8IHsiKDEsNCkiLCIoNCw1KSIsIig1LDEpIiwiKDEsMikifQorIDEgfCAz IHwgYXJjIDEgLT4gMyB8IHsiKDEsNCkiLCIoNCw1KSIsIig1LDEpIiwiKDEsMykifSAgICAg ICAgIHwgZiAgICAgICAgfCB7IigxLDQpIiwiKDQsNSkiLCIoNSwxKSIsIigxLDMpIn0KKyAx IHwgNCB8IGFyYyAxIC0+IDQgfCB7IigxLDQpIiwiKDQsNSkiLCIoNSwxKSIsIigxLDQpIn0g ICAgICAgICB8IHQgICAgICAgIHwgeyIoMSw0KSIsIig0LDUpIiwiKDUsMSkiLCIoMSw0KSJ9 CisgMiB8IDMgfCBhcmMgMiAtPiAzIHwgeyIoNCw1KSIsIig1LDEpIiwiKDEsMikiLCIoMiwz KSJ9ICAgICAgICAgfCBmICAgICAgICB8IHsiKDQsNSkiLCIoNSwxKSIsIigxLDIpIiwiKDIs MykifQorIDQgfCA1IHwgYXJjIDQgLT4gNSB8IHsiKDQsNSkiLCIoNSwxKSIsIigxLDQpIiwi KDQsNSkifSAgICAgICAgIHwgdCAgICAgICAgfCB7Iig0LDUpIiwiKDUsMSkiLCIoMSw0KSIs Iig0LDUpIn0KKyA1IHwgMSB8IGFyYyA1IC0+IDEgfCB7Iig1LDEpIiwiKDEsNCkiLCIoNCw1 KSIsIig1LDEpIn0gICAgICAgICB8IHQgICAgICAgIHwgeyIoNSwxKSIsIigxLDQpIiwiKDQs NSkiLCIoNSwxKSJ9CisgMiB8IDMgfCBhcmMgMiAtPiAzIHwgeyIoMSw0KSIsIig0LDUpIiwi KDUsMSkiLCIoMSwyKSIsIigyLDMpIn0gfCBmICAgICAgICB8IHsiKDEsNCkiLCIoNCw1KSIs Iig1LDEpIiwiKDEsMikiLCIoMiwzKSJ9CisoMjUgcm93cykKKword2l0aCByZWN1cnNpdmUg c2VhcmNoX2dyYXBoKGYsIHQsIGxhYmVsKSBhcyAoCisJc2VsZWN0ICogZnJvbSBncmFwaCBn CisJdW5pb24gYWxsCisJc2VsZWN0IGcuKgorCWZyb20gZ3JhcGggZywgc2VhcmNoX2dyYXBo IHNnCisJd2hlcmUgZy5mID0gc2cudAorKSBzZWFyY2ggYnJlYWR0aCBmaXJzdCBieSBmLCB0 IHNldCBzZXEKKyAgY3ljbGUgZiwgdCBzZXQgaXNfY3ljbGUgdG8gdHJ1ZSBkZWZhdWx0IGZh bHNlIHVzaW5nIHBhdGgKK3NlbGVjdCAqIGZyb20gc2VhcmNoX2dyYXBoOworIGYgfCB0IHwg ICBsYWJlbCAgICB8ICAgc2VxICAgfCBpc19jeWNsZSB8ICAgICAgICAgICAgICAgICAgIHBh dGggICAgICAgICAgICAgICAgICAgIAorLS0tKy0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIDEgfCAyIHwgYXJjIDEgLT4gMiB8ICgwLDEsMikgfCBmICAgICAgICB8IHsiKDEsMiki fQorIDEgfCAzIHwgYXJjIDEgLT4gMyB8ICgwLDEsMykgfCBmICAgICAgICB8IHsiKDEsMyki fQorIDIgfCAzIHwgYXJjIDIgLT4gMyB8ICgwLDIsMykgfCBmICAgICAgICB8IHsiKDIsMyki fQorIDEgfCA0IHwgYXJjIDEgLT4gNCB8ICgwLDEsNCkgfCBmICAgICAgICB8IHsiKDEsNCki fQorIDQgfCA1IHwgYXJjIDQgLT4gNSB8ICgwLDQsNSkgfCBmICAgICAgICB8IHsiKDQsNSki fQorIDUgfCAxIHwgYXJjIDUgLT4gMSB8ICgwLDUsMSkgfCBmICAgICAgICB8IHsiKDUsMSki fQorIDEgfCAyIHwgYXJjIDEgLT4gMiB8ICgxLDEsMikgfCBmICAgICAgICB8IHsiKDUsMSki LCIoMSwyKSJ9CisgMSB8IDMgfCBhcmMgMSAtPiAzIHwgKDEsMSwzKSB8IGYgICAgICAgIHwg eyIoNSwxKSIsIigxLDMpIn0KKyAxIHwgNCB8IGFyYyAxIC0+IDQgfCAoMSwxLDQpIHwgZiAg ICAgICAgfCB7Iig1LDEpIiwiKDEsNCkifQorIDIgfCAzIHwgYXJjIDIgLT4gMyB8ICgxLDIs MykgfCBmICAgICAgICB8IHsiKDEsMikiLCIoMiwzKSJ9CisgNCB8IDUgfCBhcmMgNCAtPiA1 IHwgKDEsNCw1KSB8IGYgICAgICAgIHwgeyIoMSw0KSIsIig0LDUpIn0KKyA1IHwgMSB8IGFy YyA1IC0+IDEgfCAoMSw1LDEpIHwgZiAgICAgICAgfCB7Iig0LDUpIiwiKDUsMSkifQorIDEg fCAyIHwgYXJjIDEgLT4gMiB8ICgyLDEsMikgfCBmICAgICAgICB8IHsiKDQsNSkiLCIoNSwx KSIsIigxLDIpIn0KKyAxIHwgMyB8IGFyYyAxIC0+IDMgfCAoMiwxLDMpIHwgZiAgICAgICAg fCB7Iig0LDUpIiwiKDUsMSkiLCIoMSwzKSJ9CisgMSB8IDQgfCBhcmMgMSAtPiA0IHwgKDIs MSw0KSB8IGYgICAgICAgIHwgeyIoNCw1KSIsIig1LDEpIiwiKDEsNCkifQorIDIgfCAzIHwg YXJjIDIgLT4gMyB8ICgyLDIsMykgfCBmICAgICAgICB8IHsiKDUsMSkiLCIoMSwyKSIsIigy LDMpIn0KKyA0IHwgNSB8IGFyYyA0IC0+IDUgfCAoMiw0LDUpIHwgZiAgICAgICAgfCB7Iig1 LDEpIiwiKDEsNCkiLCIoNCw1KSJ9CisgNSB8IDEgfCBhcmMgNSAtPiAxIHwgKDIsNSwxKSB8 IGYgICAgICAgIHwgeyIoMSw0KSIsIig0LDUpIiwiKDUsMSkifQorIDEgfCAyIHwgYXJjIDEg LT4gMiB8ICgzLDEsMikgfCBmICAgICAgICB8IHsiKDEsNCkiLCIoNCw1KSIsIig1LDEpIiwi KDEsMikifQorIDEgfCAzIHwgYXJjIDEgLT4gMyB8ICgzLDEsMykgfCBmICAgICAgICB8IHsi KDEsNCkiLCIoNCw1KSIsIig1LDEpIiwiKDEsMykifQorIDEgfCA0IHwgYXJjIDEgLT4gNCB8 ICgzLDEsNCkgfCB0ICAgICAgICB8IHsiKDEsNCkiLCIoNCw1KSIsIig1LDEpIiwiKDEsNCki fQorIDIgfCAzIHwgYXJjIDIgLT4gMyB8ICgzLDIsMykgfCBmICAgICAgICB8IHsiKDQsNSki LCIoNSwxKSIsIigxLDIpIiwiKDIsMykifQorIDQgfCA1IHwgYXJjIDQgLT4gNSB8ICgzLDQs NSkgfCB0ICAgICAgICB8IHsiKDQsNSkiLCIoNSwxKSIsIigxLDQpIiwiKDQsNSkifQorIDUg fCAxIHwgYXJjIDUgLT4gMSB8ICgzLDUsMSkgfCB0ICAgICAgICB8IHsiKDUsMSkiLCIoMSw0 KSIsIig0LDUpIiwiKDUsMSkifQorIDIgfCAzIHwgYXJjIDIgLT4gMyB8ICg0LDIsMykgfCBm ICAgICAgICB8IHsiKDEsNCkiLCIoNCw1KSIsIig1LDEpIiwiKDEsMikiLCIoMiwzKSJ9Ciso MjUgcm93cykKKworLS0gdmFyaW91cyBzeW50YXggZXJyb3JzCit3aXRoIHJlY3Vyc2l2ZSBz ZWFyY2hfZ3JhcGgoZiwgdCwgbGFiZWwpIGFzICgKKwlzZWxlY3QgKiBmcm9tIGdyYXBoIGcK Kwl1bmlvbiBhbGwKKwlzZWxlY3QgZy4qCisJZnJvbSBncmFwaCBnLCBzZWFyY2hfZ3JhcGgg c2cKKwl3aGVyZSBnLmYgPSBzZy50CispIGN5Y2xlIGZvbywgdGFyIHNldCBpc19jeWNsZSB0 byB0cnVlIGRlZmF1bHQgZmFsc2UgdXNpbmcgcGF0aAorc2VsZWN0ICogZnJvbSBzZWFyY2hf Z3JhcGg7CitFUlJPUjogIGN5Y2xlIGNvbHVtbiAiZm9vIiBub3QgaW4gV0lUSCBxdWVyeSBj b2x1bW4gbGlzdAorTElORSA3OiApIGN5Y2xlIGZvbywgdGFyIHNldCBpc19jeWNsZSB0byB0 cnVlIGRlZmF1bHQgZmFsc2UgdXNpbmcgcGEuLi4KKyAgICAgICAgICBeCit3aXRoIHJlY3Vy c2l2ZSBzZWFyY2hfZ3JhcGgoZiwgdCwgbGFiZWwpIGFzICgKKwlzZWxlY3QgKiBmcm9tIGdy YXBoIGcKKwl1bmlvbiBhbGwKKwlzZWxlY3QgZy4qCisJZnJvbSBncmFwaCBnLCBzZWFyY2hf Z3JhcGggc2cKKwl3aGVyZSBnLmYgPSBzZy50CispIGN5Y2xlIGYsIHQgc2V0IGlzX2N5Y2xl IHRvIHRydWUgZGVmYXVsdCA1NSB1c2luZyBwYXRoCitzZWxlY3QgKiBmcm9tIHNlYXJjaF9n cmFwaDsKK0VSUk9SOiAgQ1lDTEUgdHlwZXMgYm9vbGVhbiBhbmQgaW50ZWdlciBjYW5ub3Qg YmUgbWF0Y2hlZAorTElORSA3OiApIGN5Y2xlIGYsIHQgc2V0IGlzX2N5Y2xlIHRvIHRydWUg ZGVmYXVsdCA1NSB1c2luZyBwYXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF4KK3dpdGggcmVjdXJzaXZlIHNlYXJjaF9ncmFwaChmLCB0 LCBsYWJlbCkgYXMgKAorCXNlbGVjdCAqIGZyb20gZ3JhcGggZworCXVuaW9uIGFsbAorCXNl bGVjdCBnLioKKwlmcm9tIGdyYXBoIGcsIHNlYXJjaF9ncmFwaCBzZworCXdoZXJlIGcuZiA9 IHNnLnQKKykgY3ljbGUgZiwgdCBzZXQgaXNfY3ljbGUgdG8geG1sICd0cnVlJyBkZWZhdWx0 IHhtbCAnZmFsc2UnIHVzaW5nIHBhdGgKK3NlbGVjdCAqIGZyb20gc2VhcmNoX2dyYXBoOwor RVJST1I6ICBjb3VsZCBub3QgaWRlbnRpZnkgYW4gZXF1YWxpdHkgb3BlcmF0b3IgZm9yIHR5 cGUgeG1sCit3aXRoIHJlY3Vyc2l2ZSBzZWFyY2hfZ3JhcGgoZiwgdCwgbGFiZWwpIGFzICgK KwlzZWxlY3QgKiBmcm9tIGdyYXBoIGcKKwl1bmlvbiBhbGwKKwlzZWxlY3QgZy4qCisJZnJv bSBncmFwaCBnLCBzZWFyY2hfZ3JhcGggc2cKKwl3aGVyZSBnLmYgPSBzZy50CispIGN5Y2xl IGYsIHQgc2V0IGxhYmVsIHRvIHRydWUgZGVmYXVsdCBmYWxzZSB1c2luZyBwYXRoCitzZWxl Y3QgKiBmcm9tIHNlYXJjaF9ncmFwaDsKK0VSUk9SOiAgY3ljbGUgbWFyayBjb2x1bW4gbmFt ZSAibGFiZWwiIGFscmVhZHkgdXNlZCBpbiBXSVRIIHF1ZXJ5IGNvbHVtbiBsaXN0CitMSU5F IDc6ICkgY3ljbGUgZiwgdCBzZXQgbGFiZWwgdG8gdHJ1ZSBkZWZhdWx0IGZhbHNlIHVzaW5n IHBhdGgKKyAgICAgICAgICBeCit3aXRoIHJlY3Vyc2l2ZSBzZWFyY2hfZ3JhcGgoZiwgdCwg bGFiZWwpIGFzICgKKwlzZWxlY3QgKiBmcm9tIGdyYXBoIGcKKwl1bmlvbiBhbGwKKwlzZWxl Y3QgZy4qCisJZnJvbSBncmFwaCBnLCBzZWFyY2hfZ3JhcGggc2cKKwl3aGVyZSBnLmYgPSBz Zy50CispIGN5Y2xlIGYsIHQgc2V0IGlzX2N5Y2xlIHRvIHRydWUgZGVmYXVsdCBmYWxzZSB1 c2luZyBsYWJlbAorc2VsZWN0ICogZnJvbSBzZWFyY2hfZ3JhcGg7CitFUlJPUjogIGN5Y2xl IHBhdGggY29sdW1uIG5hbWUgImxhYmVsIiBhbHJlYWR5IHVzZWQgaW4gV0lUSCBxdWVyeSBj b2x1bW4gbGlzdAorTElORSA3OiApIGN5Y2xlIGYsIHQgc2V0IGlzX2N5Y2xlIHRvIHRydWUg ZGVmYXVsdCBmYWxzZSB1c2luZyBsYWJlbAorICAgICAgICAgIF4KK3dpdGggcmVjdXJzaXZl IHNlYXJjaF9ncmFwaChmLCB0LCBsYWJlbCkgYXMgKAorCXNlbGVjdCAqIGZyb20gZ3JhcGgg ZworCXVuaW9uIGFsbAorCXNlbGVjdCBnLioKKwlmcm9tIGdyYXBoIGcsIHNlYXJjaF9ncmFw aCBzZworCXdoZXJlIGcuZiA9IHNnLnQKKykgY3ljbGUgZiwgdCBzZXQgZm9vIHRvIHRydWUg ZGVmYXVsdCBmYWxzZSB1c2luZyBmb28KK3NlbGVjdCAqIGZyb20gc2VhcmNoX2dyYXBoOwor RVJST1I6ICBjeWNsZSBtYXJrIGNvbHVtbiBuYW1lIGFuZCBjeWNsZSBwYXRoIGNvbHVtbiBu YW1lIGFyZSB0aGUgc2FtZQorTElORSA3OiApIGN5Y2xlIGYsIHQgc2V0IGZvbyB0byB0cnVl IGRlZmF1bHQgZmFsc2UgdXNpbmcgZm9vCisgICAgICAgICAgXgord2l0aCByZWN1cnNpdmUg c2VhcmNoX2dyYXBoKGYsIHQsIGxhYmVsKSBhcyAoCisJc2VsZWN0ICogZnJvbSBncmFwaCBn CisJdW5pb24gYWxsCisJc2VsZWN0IGcuKgorCWZyb20gZ3JhcGggZywgc2VhcmNoX2dyYXBo IHNnCisJd2hlcmUgZy5mID0gc2cudAorKSBjeWNsZSBmLCB0LCBmIHNldCBpc19jeWNsZSB0 byB0cnVlIGRlZmF1bHQgZmFsc2UgdXNpbmcgcGF0aAorc2VsZWN0ICogZnJvbSBzZWFyY2hf Z3JhcGg7CitFUlJPUjogIGN5Y2xlIGNvbHVtbiAiZiIgc3BlY2lmaWVkIG1vcmUgdGhhbiBv bmNlCitMSU5FIDc6ICkgY3ljbGUgZiwgdCwgZiBzZXQgaXNfY3ljbGUgdG8gdHJ1ZSBkZWZh dWx0IGZhbHNlIHVzaW5nIHBhdC4uLgorICAgICAgICAgIF4KK3dpdGggcmVjdXJzaXZlIHNl YXJjaF9ncmFwaChmLCB0LCBsYWJlbCkgYXMgKAorCXNlbGVjdCAqIGZyb20gZ3JhcGggZwor CXVuaW9uIGFsbAorCXNlbGVjdCBnLioKKwlmcm9tIGdyYXBoIGcsIHNlYXJjaF9ncmFwaCBz ZworCXdoZXJlIGcuZiA9IHNnLnQKKykgc2VhcmNoIGRlcHRoIGZpcnN0IGJ5IGYsIHQgc2V0 IGZvbworICBjeWNsZSBmLCB0IHNldCBmb28gdG8gdHJ1ZSBkZWZhdWx0IGZhbHNlIHVzaW5n IHBhdGgKK3NlbGVjdCAqIGZyb20gc2VhcmNoX2dyYXBoOworRVJST1I6ICBzZWFyY2ggc2Vx dWVuY2UgY29sdW1uIG5hbWUgYW5kIGN5Y2xlIG1hcmsgY29sdW1uIG5hbWUgYXJlIHRoZSBz YW1lCitMSU5FIDc6ICkgc2VhcmNoIGRlcHRoIGZpcnN0IGJ5IGYsIHQgc2V0IGZvbworICAg ICAgICAgIF4KK3dpdGggcmVjdXJzaXZlIHNlYXJjaF9ncmFwaChmLCB0LCBsYWJlbCkgYXMg KAorCXNlbGVjdCAqIGZyb20gZ3JhcGggZworCXVuaW9uIGFsbAorCXNlbGVjdCBnLioKKwlm cm9tIGdyYXBoIGcsIHNlYXJjaF9ncmFwaCBzZworCXdoZXJlIGcuZiA9IHNnLnQKKykgc2Vh cmNoIGRlcHRoIGZpcnN0IGJ5IGYsIHQgc2V0IGZvbworICBjeWNsZSBmLCB0IHNldCBpc19j eWNsZSB0byB0cnVlIGRlZmF1bHQgZmFsc2UgdXNpbmcgZm9vCitzZWxlY3QgKiBmcm9tIHNl YXJjaF9ncmFwaDsKK0VSUk9SOiAgc2VhcmNoX3NlcXVlbmNlIGNvbHVtbiBuYW1lIGFuZCBj eWNsZSBwYXRoIGNvbHVtbiBuYW1lIGFyZSB0aGUgc2FtZQorTElORSA3OiApIHNlYXJjaCBk ZXB0aCBmaXJzdCBieSBmLCB0IHNldCBmb28KKyAgICAgICAgICBeCistLSB0ZXN0IHJ1bGV1 dGlscyBhbmQgdmlldyBleHBhbnNpb24KK2NyZWF0ZSB0ZW1wIHZpZXcgdl9jeWNsZSBhcwor d2l0aCByZWN1cnNpdmUgc2VhcmNoX2dyYXBoKGYsIHQsIGxhYmVsKSBhcyAoCisJc2VsZWN0 ICogZnJvbSBncmFwaCBnCisJdW5pb24gYWxsCisJc2VsZWN0IGcuKgorCWZyb20gZ3JhcGgg Zywgc2VhcmNoX2dyYXBoIHNnCisJd2hlcmUgZy5mID0gc2cudAorKSBjeWNsZSBmLCB0IHNl dCBpc19jeWNsZSB0byB0cnVlIGRlZmF1bHQgZmFsc2UgdXNpbmcgcGF0aAorc2VsZWN0IGYs IHQsIGxhYmVsIGZyb20gc2VhcmNoX2dyYXBoOworc2VsZWN0IHBnX2dldF92aWV3ZGVmKCd2 X2N5Y2xlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdmlld2RlZiAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgV0lUSCBSRUNV UlNJVkUgc2VhcmNoX2dyYXBoKGYsIHQsIGxhYmVsKSBBUyAoICAgICAgICAgICAgICAgICAg ICArCisgICAgICAgICAgU0VMRUNUIGcuZiwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAgIGcudCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgICAgICAgICBnLmxh YmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisg ICAgICAgICAgICBGUk9NIGdyYXBoIGcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKworICAgICAgICAgVU5JT04gQUxMICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgICAgICBTRUxFQ1QgZy5mLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICAg ICAgICAgZy50LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKworICAgICAgICAgICAgIGcubGFiZWwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgICAgICAgIEZST00gZ3JhcGggZywgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICAgICAgICAg c2VhcmNoX2dyYXBoIHNnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KworICAgICAgICAgICBXSEVSRSAoZy5mID0gc2cudCkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICsKKyAgICAgICAgICkgQ1lDTEUgZiwgdCBTRVQgaXNfY3ljbGUg VE8gdHJ1ZSBERUZBVUxUIGZhbHNlIFVTSU5HIHBhdGgrCisgIFNFTEVDVCBzZWFyY2hfZ3Jh cGguZiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAg ICBzZWFyY2hfZ3JhcGgudCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICsKKyAgICAgc2VhcmNoX2dyYXBoLmxhYmVsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgRlJPTSBzZWFyY2hfZ3JhcGg7Ciso MSByb3cpCisKK3NlbGVjdCAqIGZyb20gdl9jeWNsZTsKKyBmIHwgdCB8ICAgbGFiZWwgICAg CistLS0rLS0tKy0tLS0tLS0tLS0tLQorIDEgfCAyIHwgYXJjIDEgLT4gMgorIDEgfCAzIHwg YXJjIDEgLT4gMworIDIgfCAzIHwgYXJjIDIgLT4gMworIDEgfCA0IHwgYXJjIDEgLT4gNAor IDQgfCA1IHwgYXJjIDQgLT4gNQorIDUgfCAxIHwgYXJjIDUgLT4gMQorIDEgfCAyIHwgYXJj IDEgLT4gMgorIDEgfCAzIHwgYXJjIDEgLT4gMworIDEgfCA0IHwgYXJjIDEgLT4gNAorIDIg fCAzIHwgYXJjIDIgLT4gMworIDQgfCA1IHwgYXJjIDQgLT4gNQorIDUgfCAxIHwgYXJjIDUg LT4gMQorIDEgfCAyIHwgYXJjIDEgLT4gMgorIDEgfCAzIHwgYXJjIDEgLT4gMworIDEgfCA0 IHwgYXJjIDEgLT4gNAorIDIgfCAzIHwgYXJjIDIgLT4gMworIDQgfCA1IHwgYXJjIDQgLT4g NQorIDUgfCAxIHwgYXJjIDUgLT4gMQorIDEgfCAyIHwgYXJjIDEgLT4gMgorIDEgfCAzIHwg YXJjIDEgLT4gMworIDEgfCA0IHwgYXJjIDEgLT4gNAorIDIgfCAzIHwgYXJjIDIgLT4gMwor IDQgfCA1IHwgYXJjIDQgLT4gNQorIDUgfCAxIHwgYXJjIDUgLT4gMQorIDIgfCAzIHwgYXJj IDIgLT4gMworKDI1IHJvd3MpCisKIC0tCiAtLSB0ZXN0IG11bHRpcGxlIFdJVEggcXVlcmll cwogLS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3dpdGguc3FsIGIvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvd2l0aC5zcWwKaW5kZXggYWQ5NzZkZTUzMS4uNjA5MTQ5OGZl ZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvd2l0aC5zcWwKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvd2l0aC5zcWwKQEAgLTMwMyw2ICszMDMsMTE4IEBAIENSRUFU RSBURU1QT1JBUlkgVEFCTEUgdHJlZSgKIFNFTEVDVCB0MS5pZCwgdDIucGF0aCwgdDIgRlJP TSB0IEFTIHQxIEpPSU4gdCBBUyB0MiBPTgogKHQxLmlkPXQyLmlkKTsKIAorLS0gU0VBUkNI IGNsYXVzZQorCitjcmVhdGUgdGVtcCB0YWJsZSBncmFwaDAoIGYgaW50LCB0IGludCwgbGFi ZWwgdGV4dCApOworCitpbnNlcnQgaW50byBncmFwaDAgdmFsdWVzCisJKDEsIDIsICdhcmMg MSAtPiAyJyksCisJKDEsIDMsICdhcmMgMSAtPiAzJyksCisJKDIsIDMsICdhcmMgMiAtPiAz JyksCisJKDEsIDQsICdhcmMgMSAtPiA0JyksCisJKDQsIDUsICdhcmMgNCAtPiA1Jyk7CisK K3dpdGggcmVjdXJzaXZlIHNlYXJjaF9ncmFwaChmLCB0LCBsYWJlbCkgYXMgKAorCXNlbGVj dCAqIGZyb20gZ3JhcGgwIGcKKwl1bmlvbiBhbGwKKwlzZWxlY3QgZy4qCisJZnJvbSBncmFw aDAgZywgc2VhcmNoX2dyYXBoIHNnCisJd2hlcmUgZy5mID0gc2cudAorKSBzZWFyY2ggZGVw dGggZmlyc3QgYnkgZiwgdCBzZXQgc2VxCitzZWxlY3QgKiBmcm9tIHNlYXJjaF9ncmFwaCBv cmRlciBieSBzZXE7CisKK3dpdGggcmVjdXJzaXZlIHNlYXJjaF9ncmFwaChmLCB0LCBsYWJl bCkgYXMgKAorCXNlbGVjdCAqIGZyb20gZ3JhcGgwIGcKKwl1bmlvbiBkaXN0aW5jdAorCXNl bGVjdCBnLioKKwlmcm9tIGdyYXBoMCBnLCBzZWFyY2hfZ3JhcGggc2cKKwl3aGVyZSBnLmYg PSBzZy50CispIHNlYXJjaCBkZXB0aCBmaXJzdCBieSBmLCB0IHNldCBzZXEKK3NlbGVjdCAq IGZyb20gc2VhcmNoX2dyYXBoIG9yZGVyIGJ5IHNlcTsKKword2l0aCByZWN1cnNpdmUgc2Vh cmNoX2dyYXBoKGYsIHQsIGxhYmVsKSBhcyAoCisJc2VsZWN0ICogZnJvbSBncmFwaDAgZwor CXVuaW9uIGFsbAorCXNlbGVjdCBnLioKKwlmcm9tIGdyYXBoMCBnLCBzZWFyY2hfZ3JhcGgg c2cKKwl3aGVyZSBnLmYgPSBzZy50CispIHNlYXJjaCBicmVhZHRoIGZpcnN0IGJ5IGYsIHQg c2V0IHNlcQorc2VsZWN0ICogZnJvbSBzZWFyY2hfZ3JhcGggb3JkZXIgYnkgc2VxOworCit3 aXRoIHJlY3Vyc2l2ZSBzZWFyY2hfZ3JhcGgoZiwgdCwgbGFiZWwpIGFzICgKKwlzZWxlY3Qg KiBmcm9tIGdyYXBoMCBnCisJdW5pb24gZGlzdGluY3QKKwlzZWxlY3QgZy4qCisJZnJvbSBn cmFwaDAgZywgc2VhcmNoX2dyYXBoIHNnCisJd2hlcmUgZy5mID0gc2cudAorKSBzZWFyY2gg YnJlYWR0aCBmaXJzdCBieSBmLCB0IHNldCBzZXEKK3NlbGVjdCAqIGZyb20gc2VhcmNoX2dy YXBoIG9yZGVyIGJ5IHNlcTsKKworLS0gdmFyaW91cyBzeW50YXggZXJyb3JzCit3aXRoIHJl Y3Vyc2l2ZSBzZWFyY2hfZ3JhcGgoZiwgdCwgbGFiZWwpIGFzICgKKwlzZWxlY3QgKiBmcm9t IGdyYXBoMCBnCisJdW5pb24gYWxsCisJc2VsZWN0IGcuKgorCWZyb20gZ3JhcGgwIGcsIHNl YXJjaF9ncmFwaCBzZworCXdoZXJlIGcuZiA9IHNnLnQKKykgc2VhcmNoIGRlcHRoIGZpcnN0 IGJ5IGZvbywgdGFyIHNldCBzZXEKK3NlbGVjdCAqIGZyb20gc2VhcmNoX2dyYXBoOworCit3 aXRoIHJlY3Vyc2l2ZSBzZWFyY2hfZ3JhcGgoZiwgdCwgbGFiZWwpIGFzICgKKwlzZWxlY3Qg KiBmcm9tIGdyYXBoMCBnCisJdW5pb24gYWxsCisJc2VsZWN0IGcuKgorCWZyb20gZ3JhcGgw IGcsIHNlYXJjaF9ncmFwaCBzZworCXdoZXJlIGcuZiA9IHNnLnQKKykgc2VhcmNoIGRlcHRo IGZpcnN0IGJ5IGYsIHQgc2V0IGxhYmVsCitzZWxlY3QgKiBmcm9tIHNlYXJjaF9ncmFwaDsK Kword2l0aCByZWN1cnNpdmUgc2VhcmNoX2dyYXBoKGYsIHQsIGxhYmVsKSBhcyAoCisJc2Vs ZWN0ICogZnJvbSBncmFwaDAgZworCXVuaW9uIGFsbAorCXNlbGVjdCBnLioKKwlmcm9tIGdy YXBoMCBnLCBzZWFyY2hfZ3JhcGggc2cKKwl3aGVyZSBnLmYgPSBzZy50CispIHNlYXJjaCBk ZXB0aCBmaXJzdCBieSBmLCB0LCBmIHNldCBzZXEKK3NlbGVjdCAqIGZyb20gc2VhcmNoX2dy YXBoOworCit3aXRoIHJlY3Vyc2l2ZSBzZWFyY2hfZ3JhcGgoZiwgdCwgbGFiZWwpIGFzICgK KwlzZWxlY3QgKiBmcm9tIGdyYXBoMCBnCisJdW5pb24gYWxsCisJc2VsZWN0ICogZnJvbSBn cmFwaDAgZworCXVuaW9uIGFsbAorCXNlbGVjdCBnLioKKwlmcm9tIGdyYXBoMCBnLCBzZWFy Y2hfZ3JhcGggc2cKKwl3aGVyZSBnLmYgPSBzZy50CispIHNlYXJjaCBkZXB0aCBmaXJzdCBi eSBmLCB0IHNldCBzZXEKK3NlbGVjdCAqIGZyb20gc2VhcmNoX2dyYXBoIG9yZGVyIGJ5IHNl cTsKKword2l0aCByZWN1cnNpdmUgc2VhcmNoX2dyYXBoKGYsIHQsIGxhYmVsKSBhcyAoCisJ c2VsZWN0ICogZnJvbSBncmFwaDAgZworCXVuaW9uIGFsbAorCShzZWxlY3QgKiBmcm9tIGdy YXBoMCBnCisJdW5pb24gYWxsCisJc2VsZWN0IGcuKgorCWZyb20gZ3JhcGgwIGcsIHNlYXJj aF9ncmFwaCBzZworCXdoZXJlIGcuZiA9IHNnLnQpCispIHNlYXJjaCBkZXB0aCBmaXJzdCBi eSBmLCB0IHNldCBzZXEKK3NlbGVjdCAqIGZyb20gc2VhcmNoX2dyYXBoIG9yZGVyIGJ5IHNl cTsKKworLS0gdGVzdCBydWxldXRpbHMgYW5kIHZpZXcgZXhwYW5zaW9uCitjcmVhdGUgdGVt cCB2aWV3IHZfc2VhcmNoIGFzCit3aXRoIHJlY3Vyc2l2ZSBzZWFyY2hfZ3JhcGgoZiwgdCwg bGFiZWwpIGFzICgKKwlzZWxlY3QgKiBmcm9tIGdyYXBoMCBnCisJdW5pb24gYWxsCisJc2Vs ZWN0IGcuKgorCWZyb20gZ3JhcGgwIGcsIHNlYXJjaF9ncmFwaCBzZworCXdoZXJlIGcuZiA9 IHNnLnQKKykgc2VhcmNoIGRlcHRoIGZpcnN0IGJ5IGYsIHQgc2V0IHNlcQorc2VsZWN0IGYs IHQsIGxhYmVsIGZyb20gc2VhcmNoX2dyYXBoOworCitzZWxlY3QgcGdfZ2V0X3ZpZXdkZWYo J3Zfc2VhcmNoJyk7CisKK3NlbGVjdCAqIGZyb20gdl9zZWFyY2g7CisKIC0tCiAtLSB0ZXN0 IGN5Y2xlIGRldGVjdGlvbgogLS0KQEAgLTM0NSw2ICs0NTcsMTczIEBAIENSRUFURSBURU1Q T1JBUlkgVEFCTEUgdHJlZSgKICkKIHNlbGVjdCAqIGZyb20gc2VhcmNoX2dyYXBoIG9yZGVy IGJ5IHBhdGg7CiAKKy0tIENZQ0xFIGNsYXVzZQorCit3aXRoIHJlY3Vyc2l2ZSBzZWFyY2hf Z3JhcGgoZiwgdCwgbGFiZWwpIGFzICgKKwlzZWxlY3QgKiBmcm9tIGdyYXBoIGcKKwl1bmlv biBhbGwKKwlzZWxlY3QgZy4qCisJZnJvbSBncmFwaCBnLCBzZWFyY2hfZ3JhcGggc2cKKwl3 aGVyZSBnLmYgPSBzZy50CispIGN5Y2xlIGYsIHQgc2V0IGlzX2N5Y2xlIHRvIHRydWUgZGVm YXVsdCBmYWxzZSB1c2luZyBwYXRoCitzZWxlY3QgKiBmcm9tIHNlYXJjaF9ncmFwaDsKKwor d2l0aCByZWN1cnNpdmUgc2VhcmNoX2dyYXBoKGYsIHQsIGxhYmVsKSBhcyAoCisJc2VsZWN0 ICogZnJvbSBncmFwaCBnCisJdW5pb24gZGlzdGluY3QKKwlzZWxlY3QgZy4qCisJZnJvbSBn cmFwaCBnLCBzZWFyY2hfZ3JhcGggc2cKKwl3aGVyZSBnLmYgPSBzZy50CispIGN5Y2xlIGYs IHQgc2V0IGlzX2N5Y2xlIHRvICdZJyBkZWZhdWx0ICdOJyB1c2luZyBwYXRoCitzZWxlY3Qg KiBmcm9tIHNlYXJjaF9ncmFwaDsKKworLS0gbXVsdGlwbGUgQ1RFcword2l0aCByZWN1cnNp dmUKK2dyYXBoKGYsIHQsIGxhYmVsKSBhcyAoCisgIHZhbHVlcyAoMSwgMiwgJ2FyYyAxIC0+ IDInKSwKKyAgICAgICAgICgxLCAzLCAnYXJjIDEgLT4gMycpLAorICAgICAgICAgKDIsIDMs ICdhcmMgMiAtPiAzJyksCisgICAgICAgICAoMSwgNCwgJ2FyYyAxIC0+IDQnKSwKKyAgICAg ICAgICg0LCA1LCAnYXJjIDQgLT4gNScpLAorICAgICAgICAgKDUsIDEsICdhcmMgNSAtPiAx JykKKyksCitzZWFyY2hfZ3JhcGgoZiwgdCwgbGFiZWwpIGFzICgKKyAgICAgICAgc2VsZWN0 ICogZnJvbSBncmFwaCBnCisgICAgICAgIHVuaW9uIGFsbAorICAgICAgICBzZWxlY3QgZy4q CisgICAgICAgIGZyb20gZ3JhcGggZywgc2VhcmNoX2dyYXBoIHNnCisgICAgICAgIHdoZXJl IGcuZiA9IHNnLnQKKykgY3ljbGUgZiwgdCBzZXQgaXNfY3ljbGUgdG8gdHJ1ZSBkZWZhdWx0 IGZhbHNlIHVzaW5nIHBhdGgKK3NlbGVjdCBmLCB0LCBsYWJlbCBmcm9tIHNlYXJjaF9ncmFw aDsKKworLS0gc3RhciBleHBhbnNpb24KK3dpdGggcmVjdXJzaXZlIGEgYXMgKAorCXNlbGVj dCAxIGFzIGIKKwl1bmlvbiBhbGwKKwlzZWxlY3QgKiBmcm9tIGEKKykgY3ljbGUgYiBzZXQg YyB0byB0cnVlIGRlZmF1bHQgZmFsc2UgdXNpbmcgcAorc2VsZWN0ICogZnJvbSBhOworCist LSBzZWFyY2grY3ljbGUKK3dpdGggcmVjdXJzaXZlIHNlYXJjaF9ncmFwaChmLCB0LCBsYWJl bCkgYXMgKAorCXNlbGVjdCAqIGZyb20gZ3JhcGggZworCXVuaW9uIGFsbAorCXNlbGVjdCBn LioKKwlmcm9tIGdyYXBoIGcsIHNlYXJjaF9ncmFwaCBzZworCXdoZXJlIGcuZiA9IHNnLnQK Kykgc2VhcmNoIGRlcHRoIGZpcnN0IGJ5IGYsIHQgc2V0IHNlcQorICBjeWNsZSBmLCB0IHNl dCBpc19jeWNsZSB0byB0cnVlIGRlZmF1bHQgZmFsc2UgdXNpbmcgcGF0aAorc2VsZWN0ICog ZnJvbSBzZWFyY2hfZ3JhcGg7CisKK3dpdGggcmVjdXJzaXZlIHNlYXJjaF9ncmFwaChmLCB0 LCBsYWJlbCkgYXMgKAorCXNlbGVjdCAqIGZyb20gZ3JhcGggZworCXVuaW9uIGFsbAorCXNl bGVjdCBnLioKKwlmcm9tIGdyYXBoIGcsIHNlYXJjaF9ncmFwaCBzZworCXdoZXJlIGcuZiA9 IHNnLnQKKykgc2VhcmNoIGJyZWFkdGggZmlyc3QgYnkgZiwgdCBzZXQgc2VxCisgIGN5Y2xl IGYsIHQgc2V0IGlzX2N5Y2xlIHRvIHRydWUgZGVmYXVsdCBmYWxzZSB1c2luZyBwYXRoCitz ZWxlY3QgKiBmcm9tIHNlYXJjaF9ncmFwaDsKKworLS0gdmFyaW91cyBzeW50YXggZXJyb3Jz Cit3aXRoIHJlY3Vyc2l2ZSBzZWFyY2hfZ3JhcGgoZiwgdCwgbGFiZWwpIGFzICgKKwlzZWxl Y3QgKiBmcm9tIGdyYXBoIGcKKwl1bmlvbiBhbGwKKwlzZWxlY3QgZy4qCisJZnJvbSBncmFw aCBnLCBzZWFyY2hfZ3JhcGggc2cKKwl3aGVyZSBnLmYgPSBzZy50CispIGN5Y2xlIGZvbywg dGFyIHNldCBpc19jeWNsZSB0byB0cnVlIGRlZmF1bHQgZmFsc2UgdXNpbmcgcGF0aAorc2Vs ZWN0ICogZnJvbSBzZWFyY2hfZ3JhcGg7CisKK3dpdGggcmVjdXJzaXZlIHNlYXJjaF9ncmFw aChmLCB0LCBsYWJlbCkgYXMgKAorCXNlbGVjdCAqIGZyb20gZ3JhcGggZworCXVuaW9uIGFs bAorCXNlbGVjdCBnLioKKwlmcm9tIGdyYXBoIGcsIHNlYXJjaF9ncmFwaCBzZworCXdoZXJl IGcuZiA9IHNnLnQKKykgY3ljbGUgZiwgdCBzZXQgaXNfY3ljbGUgdG8gdHJ1ZSBkZWZhdWx0 IDU1IHVzaW5nIHBhdGgKK3NlbGVjdCAqIGZyb20gc2VhcmNoX2dyYXBoOworCit3aXRoIHJl Y3Vyc2l2ZSBzZWFyY2hfZ3JhcGgoZiwgdCwgbGFiZWwpIGFzICgKKwlzZWxlY3QgKiBmcm9t IGdyYXBoIGcKKwl1bmlvbiBhbGwKKwlzZWxlY3QgZy4qCisJZnJvbSBncmFwaCBnLCBzZWFy Y2hfZ3JhcGggc2cKKwl3aGVyZSBnLmYgPSBzZy50CispIGN5Y2xlIGYsIHQgc2V0IGlzX2N5 Y2xlIHRvIHhtbCAndHJ1ZScgZGVmYXVsdCB4bWwgJ2ZhbHNlJyB1c2luZyBwYXRoCitzZWxl Y3QgKiBmcm9tIHNlYXJjaF9ncmFwaDsKKword2l0aCByZWN1cnNpdmUgc2VhcmNoX2dyYXBo KGYsIHQsIGxhYmVsKSBhcyAoCisJc2VsZWN0ICogZnJvbSBncmFwaCBnCisJdW5pb24gYWxs CisJc2VsZWN0IGcuKgorCWZyb20gZ3JhcGggZywgc2VhcmNoX2dyYXBoIHNnCisJd2hlcmUg Zy5mID0gc2cudAorKSBjeWNsZSBmLCB0IHNldCBsYWJlbCB0byB0cnVlIGRlZmF1bHQgZmFs c2UgdXNpbmcgcGF0aAorc2VsZWN0ICogZnJvbSBzZWFyY2hfZ3JhcGg7CisKK3dpdGggcmVj dXJzaXZlIHNlYXJjaF9ncmFwaChmLCB0LCBsYWJlbCkgYXMgKAorCXNlbGVjdCAqIGZyb20g Z3JhcGggZworCXVuaW9uIGFsbAorCXNlbGVjdCBnLioKKwlmcm9tIGdyYXBoIGcsIHNlYXJj aF9ncmFwaCBzZworCXdoZXJlIGcuZiA9IHNnLnQKKykgY3ljbGUgZiwgdCBzZXQgaXNfY3lj bGUgdG8gdHJ1ZSBkZWZhdWx0IGZhbHNlIHVzaW5nIGxhYmVsCitzZWxlY3QgKiBmcm9tIHNl YXJjaF9ncmFwaDsKKword2l0aCByZWN1cnNpdmUgc2VhcmNoX2dyYXBoKGYsIHQsIGxhYmVs KSBhcyAoCisJc2VsZWN0ICogZnJvbSBncmFwaCBnCisJdW5pb24gYWxsCisJc2VsZWN0IGcu KgorCWZyb20gZ3JhcGggZywgc2VhcmNoX2dyYXBoIHNnCisJd2hlcmUgZy5mID0gc2cudAor KSBjeWNsZSBmLCB0IHNldCBmb28gdG8gdHJ1ZSBkZWZhdWx0IGZhbHNlIHVzaW5nIGZvbwor c2VsZWN0ICogZnJvbSBzZWFyY2hfZ3JhcGg7CisKK3dpdGggcmVjdXJzaXZlIHNlYXJjaF9n cmFwaChmLCB0LCBsYWJlbCkgYXMgKAorCXNlbGVjdCAqIGZyb20gZ3JhcGggZworCXVuaW9u IGFsbAorCXNlbGVjdCBnLioKKwlmcm9tIGdyYXBoIGcsIHNlYXJjaF9ncmFwaCBzZworCXdo ZXJlIGcuZiA9IHNnLnQKKykgY3ljbGUgZiwgdCwgZiBzZXQgaXNfY3ljbGUgdG8gdHJ1ZSBk ZWZhdWx0IGZhbHNlIHVzaW5nIHBhdGgKK3NlbGVjdCAqIGZyb20gc2VhcmNoX2dyYXBoOwor Cit3aXRoIHJlY3Vyc2l2ZSBzZWFyY2hfZ3JhcGgoZiwgdCwgbGFiZWwpIGFzICgKKwlzZWxl Y3QgKiBmcm9tIGdyYXBoIGcKKwl1bmlvbiBhbGwKKwlzZWxlY3QgZy4qCisJZnJvbSBncmFw aCBnLCBzZWFyY2hfZ3JhcGggc2cKKwl3aGVyZSBnLmYgPSBzZy50CispIHNlYXJjaCBkZXB0 aCBmaXJzdCBieSBmLCB0IHNldCBmb28KKyAgY3ljbGUgZiwgdCBzZXQgZm9vIHRvIHRydWUg ZGVmYXVsdCBmYWxzZSB1c2luZyBwYXRoCitzZWxlY3QgKiBmcm9tIHNlYXJjaF9ncmFwaDsK Kword2l0aCByZWN1cnNpdmUgc2VhcmNoX2dyYXBoKGYsIHQsIGxhYmVsKSBhcyAoCisJc2Vs ZWN0ICogZnJvbSBncmFwaCBnCisJdW5pb24gYWxsCisJc2VsZWN0IGcuKgorCWZyb20gZ3Jh cGggZywgc2VhcmNoX2dyYXBoIHNnCisJd2hlcmUgZy5mID0gc2cudAorKSBzZWFyY2ggZGVw dGggZmlyc3QgYnkgZiwgdCBzZXQgZm9vCisgIGN5Y2xlIGYsIHQgc2V0IGlzX2N5Y2xlIHRv IHRydWUgZGVmYXVsdCBmYWxzZSB1c2luZyBmb28KK3NlbGVjdCAqIGZyb20gc2VhcmNoX2dy YXBoOworCistLSB0ZXN0IHJ1bGV1dGlscyBhbmQgdmlldyBleHBhbnNpb24KK2NyZWF0ZSB0 ZW1wIHZpZXcgdl9jeWNsZSBhcword2l0aCByZWN1cnNpdmUgc2VhcmNoX2dyYXBoKGYsIHQs IGxhYmVsKSBhcyAoCisJc2VsZWN0ICogZnJvbSBncmFwaCBnCisJdW5pb24gYWxsCisJc2Vs ZWN0IGcuKgorCWZyb20gZ3JhcGggZywgc2VhcmNoX2dyYXBoIHNnCisJd2hlcmUgZy5mID0g c2cudAorKSBjeWNsZSBmLCB0IHNldCBpc19jeWNsZSB0byB0cnVlIGRlZmF1bHQgZmFsc2Ug dXNpbmcgcGF0aAorc2VsZWN0IGYsIHQsIGxhYmVsIGZyb20gc2VhcmNoX2dyYXBoOworCitz ZWxlY3QgcGdfZ2V0X3ZpZXdkZWYoJ3ZfY3ljbGUnKTsKKworc2VsZWN0ICogZnJvbSB2X2N5 Y2xlOworCiAtLQogLS0gdGVzdCBtdWx0aXBsZSBXSVRIIHF1ZXJpZXMKIC0tCgpiYXNlLWNv bW1pdDogYTdlNjVkYzg4YjZmMDg4ZmMyZmNmNWE2NjBkODY2ZGU2NDRiMTMwMAotLSAKMi4y OS4yCgo= --------------59265C7BE2B49AABAA0CA74C--