Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vuwv4-00ED81-2G for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Feb 2026 18:14:03 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vuwv3-002luv-23 for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Feb 2026 18:14:01 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vuwv2-002lug-0e for pgsql-hackers@lists.postgresql.org; Tue, 24 Feb 2026 18:14:01 +0000 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vuwuw-00000000zpA-2pjQ for pgsql-hackers@lists.postgresql.org; Tue, 24 Feb 2026 18:13:59 +0000 Received: by mail-wr1-x42f.google.com with SMTP id ffacd0b85a97d-4327790c4e9so4433820f8f.2 for ; Tue, 24 Feb 2026 10:13:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1771956834; cv=none; d=google.com; s=arc-20240605; b=DOTU/mmphnx4n8fVk9GwDKkpvT9Rlzx7SX7p64OK+QMWCYVl2hZaKqEVo28yyWfIJG 2jHx+CwbPypSzBbN/60aftxiQ61b8PpK26tba0VP1RPNDoKSrqsl0ptsTTWsTbtt97lW cQfWHBbMxUAQypJh3b5xci2DyIfMsH3WlVEFQu8LCY0N1Wk4oBOmvRyzB9AhB720wkxp Ar8uWeF12QY3HsbT/wnuynpwwmE4TPXnImakFZvdbm0uz9NMzZl2iTBX5zVnQ1h0nk1M nvPwaSOHis29Nut+g1pMkImCCLTWpyQItei30QJHJMrxWKhdeIJCC8UYOafy8wy0I3Kt 1qGQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=rYIJOXWo0/BMqJ3ltVZORm9JSt5WmYuwlkYmME0NhvQ=; fh=rGzu+opaNZ34B6yCqUB8ABZkDW6pFMxgOY+zzkC7gOw=; b=Jwh/UIxECCGDhkB5RHjiihJ3D8DzRF8fH4UYRzM2binQjZe4wLQY/KSmIIy706axAD woU/rQEpaWgG/1mB7wCg7sph4AQ0OrHLDZDfa+Ufv993VCGtkErWpy/EA+g5fdqM1oK5 maFuthYxRMLzDb73mb6I1AaPQGc7XXplymDsI4B45hxItz0bUSDSo1Ay1xg7jfmzL4G/ I/VtMoUsZ0M8puGodWPuq+GwEjDsHzv7KqOnUdDJ414rvqvB5s3DrFuTpnJULLOS0MSo U9ixdNGsfuvl3FFgzHCf3XLPSBbU/RM4lwzt0K4iJv7C4myATZ/nK5dUrZmgxA9ujJqp +LKQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bowt-ie.20230601.gappssmtp.com; s=20230601; t=1771956834; x=1772561634; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=rYIJOXWo0/BMqJ3ltVZORm9JSt5WmYuwlkYmME0NhvQ=; b=PkixlQqAzyOSrypS6MSa5Cvtqf0CPgT0PUeCVj7Idr95YRivE3S09DWXT31YgNpQx9 xYA4hXdLC0JIRHTPKdolruTVAcWaCqm0sBba8QeGiC2z+ziYm9FDXj9QK/CNvjiz+ZLd Qg8j+zjPl6LV4Px8Prlekw1CYpmuUZ5+O1PGJrVAK9coPCPHxSl6/IcMdxDINlMuYHeq +7CBNWT+tysVcPY6kbOYEBt+RpiyB5VdaKbYzhlyZHx0YNX5lvbCNoc9le4dqCw7sMDB FEAP7fGAKGDghv2RJHzoLaqwyNlNA5RLzP8sPUDL7EOChM0q/jTO1BgrDdgc/KUz0AvF XnEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771956834; x=1772561634; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=rYIJOXWo0/BMqJ3ltVZORm9JSt5WmYuwlkYmME0NhvQ=; b=p4LQrpwSIhG7LJoTSPNw/sEGX/djLB2Zr4HAIlbZBBlhJOxbpfVr9bIzFZ5eLWFwLO Exz0A0ED0aPnigEJu9bRteYKdr+njyW3o16o6XLdVsIK+Cp8GE3hvm6sWs9vksE94mEf 4/m0yzupIaUqlFowRvRn3xMWoP0lYxWr9Qk0/9FP9q6FDa7zNRB/vhohWDzUlqoI9YXQ uKnV4TAfglnz5LAzIrq0cKe3hCbWriS9oBrfkPC3mIQr7NAeKf4w9OaMwSoAgHrdWRir t5UDA9Xigl/fzK/19DPVKGMqiAHarHu1jKvZU9GHfMBJY9/Gguz4EA306DIpE8b1YD7y htvA== X-Forwarded-Encrypted: i=1; AJvYcCXLIUZduFb64FG9XxcA4CzQzZ1Adz5T6Zm3GcYV/OzyTQBcMiShmfLqEBhbNaRtVhvU3vIu2gNNegCiLHpQ@lists.postgresql.org X-Gm-Message-State: AOJu0Yx4C33m1O/xo8wg944JxWdcsB7X/mtbYf/s8NdNtvCxEZcAvH56 Z9Se3TT5NuBQJ3vzS7JjHNPHdY0DxcKaM+8FrSHozffoze5EScvdP5pjj/poUD+GjFnlFwzRPY/ 27lVsE64ZA10JJpcc0qGhzI4QQkDtZZCZP3uUriMz2Q== X-Gm-Gg: ATEYQzys6q9cDvo9lZpdrTRWA1v1sgk4GPTiiCYJKTKHQeWE7FRGM1YIJwEwvTH9wsT gsXnNTBOnX7xEl6+Ia2FEba9F8BBkR1EWqJdsyQwkY55p6tBX18OXjH4JEu8QJWRTiArpP2EBrM ZgLcOtlbp13f+lkd76ag7U4HPJKzv6RUegUpnQQd8uJqrEIKRmFY19ccQTdp/CZ80UVnn+tTZs6 kPunKmKrKXfZDZUptqPsMvtoueP11bK6JmkRDhlNKW/y3UJbNuKlPe5A4r2csMmtrUIdPCILAO1 Oe7mwR8= X-Received: by 2002:a05:6000:2509:b0:436:3155:43e4 with SMTP id ffacd0b85a97d-4396f1a624amr24085474f8f.51.1771956833710; Tue, 24 Feb 2026 10:13:53 -0800 (PST) MIME-Version: 1.0 References: <64a2re223ajj4popowsyu4xekbuvvyfwkrihn5yzyrkwsmsuvp@2lls3tpww5dl> <52512325-b1f2-4fff-819e-f68122b2e427@vondra.me> <64mfcfv7iihc4pmqlxarii4esnmqry52ckz5m7lmwylnfnuxuz@oxh4ioxkjtep> In-Reply-To: <64mfcfv7iihc4pmqlxarii4esnmqry52ckz5m7lmwylnfnuxuz@oxh4ioxkjtep> From: Peter Geoghegan Date: Tue, 24 Feb 2026 13:13:25 -0500 X-Gm-Features: AaiRm53DFGirh3ZT4ZEOcrp5hdeg6612TSQjUtof0084JvAE7oVcUoZ2wxeKx3U Message-ID: Subject: Re: index prefetching To: Andres Freund Cc: Tomas Vondra , Alexandre Felipe , Thomas Munro , Nazir Bilal Yavuz , Robert Haas , Melanie Plageman , PostgreSQL Hackers , Georgios , Konstantin Knizhnik , Dilip Kumar Content-Type: multipart/mixed; boundary="000000000000a2454a064b95d983" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a2454a064b95d983 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Feb 17, 2026 at 2:27=E2=80=AFPM Andres Freund = wrote: > On 2026-02-17 12:16:23 -0500, Peter Geoghegan wrote: > > > Note that there is pretty much *no* readhead, because the yields happ= en more > > > frequently than a io_combine_limit sized IO can be formed. > > > > ISTM that we need the yields to better cooperate with whatever's > > happening on the read stream side. > > Plausible. It could be that we could get away with controlling the rampu= p to > be slower in potentially problematic cases, without needing the yielding,= but > not sure. Attached is v11, which makes the read stream yielding mechanism better cooperate with index prefetching, so as to avoid interefering with io_combine_limit. This should deal with the odd performance that you complained about. See v11-0006-Introduce-read_stream_-pause-resume-yield.patch (and the later prefetching patch v11-0007-Add-heapam-index-scan-I-O-prefetching.patch) for details. The whole idea of measuring "batch distance" is gone in this version, though we do still only consider whether now is a good time to yield at "batch boundaries". We always refuse yield on the first few batches of the scan, so the idea of caring about batch boundaries is still there, albeit in a much more limited form. I think that the read stream aspects of this need expert review from somebody like Melanie, Andres, or Thomas. The new approach to yielding should definitely be considered a work in progress. Though testing seems to show that it's a step or two in the right direction. The other focus for v11 has been fixing regressions, particularly with index-only scans that run on fully cached data. We've added a more efficient approach to how we manage the memory for batches used for index-only scans -- they require extra space to store cached visibility info taken from the visibility map, which is now more compact. It is allocated as part of the main batch allocation, avoiding needless palloc churn. This v11 also includes a new "Don't allocate _bt_search stack" patch, which avoids allocating memory for an nbtree descent stack during index scans. I found that this helped a bit with certain index scans that call _bt_search frequently/descend the index many times. Anything that avoids the use of palloc in a critical path is a good idea, especially when doing so is as straightforward as it is with the _bt_search stack (we simply don't need any stack in the hot _bt_first code path). -- Peter Geoghegan --000000000000a2454a064b95d983 Content-Type: application/x-patch; name="v11-0011-Add-fake-LSN-support-to-hash-index-AM.patch" Content-Disposition: attachment; filename="v11-0011-Add-fake-LSN-support-to-hash-index-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm0x5ogc2 RnJvbSA2MGE4MjlhN2NlNDVkYmU0ZGE5ZTBmOGUyZmNkYWQ4NjI4NjZlODlhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMTggSmFuIDIwMjYgMTE6MzI6NTIgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMSAxMS8xMl0g QWRkIGZha2UgTFNOIHN1cHBvcnQgdG8gaGFzaCBpbmRleCBBTS4KClRoaXMgaXMgcHJlcGFyYXRp b24gZm9yIGFuIHVwY29taW5nIHBhdGNoIHRoYXQgd2lsbCBhZGQgdGhlIGFtZ2V0YmF0Y2gKaW50 ZXJmYWNlIGFuZCBzd2l0Y2ggaGFzaCBvdmVyIHRvIGl0IChmcm9tIGFtZ2V0dHVwbGUpLiAgV2Ug bmVlZCBmYWtlCkxTTnMgdG8gbWFrZSBpdCBzYWZlIHRvIGFwcGx5IGJlaGF2aW9yIHRoYXQgaXMg ZXF1aXZhbGVudCB0byBuYnRyZWUncwpwcmV2aW91cyBkcm9wUGluIGJlaGF2aW9yIHRoYXQgd29y a3Mgd2l0aCB1bmxvZ2dlZCBoYXNoIGluZGV4IHNjYW5zLgoKVGhlIGNvbW1pdCB0aGF0IHdpbGwg YWRkIGhhc2hnZXRiYXRjaCBtYWtlcyB0aGUgcmVxdWlyZWQgY2hhbmdlcyB0bwpfaGFzaF9raWxs X2l0ZW1zIHRoYXQgYWN0dWFsbHkgcmVsaWVzIG9uIGhhc2ggZ2VuZXJhdGluZyBmYWtlIExTTnMu CgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KRGlzY3Vzc2lvbjogaHR0cHM6 Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6a2VodWh4eXVBOHF1YzdyUk4zRXROWHBpS3NqUGZPOG1oYisw RHIySzBEdGdAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNo LmMgICAgICAgfCAgMjEgKysrLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hpbnNlcnQu YyB8ICAyMCArKystLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaG92ZmwuYyAgIHwgMTEx ICsrKysrKysrKysrKysrKystLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFz aHBhZ2UuYyAgIHwgIDIyICsrKy0tLQogNCBmaWxlcyBjaGFuZ2VkLCAxMDUgaW5zZXJ0aW9ucygr KSwgNjkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gv aGFzaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCmluZGV4IDViNWM1YzZmYS4u OTI4MjRhYTVkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCkBAIC00NzYsNiArNDc2LDcgQEAgaGFz aGJ1bGtkZWxldGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLCBJbmRleEJ1bGtEZWxldGVSZXN1bHQg KnN0YXRzLAogCUJ1ZmZlcgkJbWV0YWJ1ZiA9IEludmFsaWRCdWZmZXI7CiAJSGFzaE1ldGFQYWdl IG1ldGFwOwogCUhhc2hNZXRhUGFnZSBjYWNoZWRtZXRhcDsKKwlYTG9nUmVjUHRyCXJlY3B0cjsK IAogCXR1cGxlc19yZW1vdmVkID0gMDsKIAludW1faW5kZXhfdHVwbGVzID0gMDsKQEAgLTYxNSw3 ICs2MTYsNiBAQCBsb29wX3RvcDoKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKIAkJ eGxfaGFzaF91cGRhdGVfbWV0YV9wYWdlIHhscmVjOwotCQlYTG9nUmVjUHRyCXJlY3B0cjsKIAog CQl4bHJlYy5udHVwbGVzID0gbWV0YXAtPmhhc2htX250dXBsZXM7CiAKQEAgLTYyNSw4ICs2MjUs MTEgQEAgbG9vcF90b3A6CiAJCVhMb2dSZWdpc3RlckJ1ZmZlcigwLCBtZXRhYnVmLCBSRUdCVUZf U1RBTkRBUkQpOwogCiAJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fSEFTSF9JRCwgWExPR19IQVNI X1VQREFURV9NRVRBX1BBR0UpOwotCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UobWV0YWJ1Ziks IHJlY3B0cik7CiAJfQorCWVsc2UKKwkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsKKwor CVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwgcmVjcHRyKTsKIAogCUVORF9DUklU X1NFQ1RJT04oKTsKIApAQCAtNjk5LDYgKzcwMiw3IEBAIGhhc2hidWNrZXRjbGVhbnVwKFJlbGF0 aW9uIHJlbCwgQnVja2V0IGN1cl9idWNrZXQsIEJ1ZmZlciBidWNrZXRfYnVmLAogCUJ1ZmZlcgkJ YnVmOwogCUJ1Y2tldAkJbmV3X2J1Y2tldCBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFkgPSBJbnZh bGlkQnVja2V0OwogCWJvb2wJCWJ1Y2tldF9kaXJ0eSA9IGZhbHNlOworCVhMb2dSZWNQdHIJcmVj cHRyOwogCiAJYmxrbm8gPSBidWNrZXRfYmxrbm87CiAJYnVmID0gYnVja2V0X2J1ZjsKQEAgLTgy MSw3ICs4MjUsNiBAQCBoYXNoYnVja2V0Y2xlYW51cChSZWxhdGlvbiByZWwsIEJ1Y2tldCBjdXJf YnVja2V0LCBCdWZmZXIgYnVja2V0X2J1ZiwKIAkJCWlmIChSZWxhdGlvbk5lZWRzV0FMKHJlbCkp CiAJCQl7CiAJCQkJeGxfaGFzaF9kZWxldGUgeGxyZWM7Ci0JCQkJWExvZ1JlY1B0cglyZWNwdHI7 CiAKIAkJCQl4bHJlYy5jbGVhcl9kZWFkX21hcmtpbmcgPSBjbGVhcl9kZWFkX21hcmtpbmc7CiAJ CQkJeGxyZWMuaXNfcHJpbWFyeV9idWNrZXRfcGFnZSA9IChidWYgPT0gYnVja2V0X2J1Zik7CkBA IC04NDYsOCArODQ5LDExIEBAIGhhc2hidWNrZXRjbGVhbnVwKFJlbGF0aW9uIHJlbCwgQnVja2V0 IGN1cl9idWNrZXQsIEJ1ZmZlciBidWNrZXRfYnVmLAogCQkJCQkJCQkJbmRlbGV0YWJsZSAqIHNp emVvZihPZmZzZXROdW1iZXIpKTsKIAogCQkJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fSEFTSF9J RCwgWExPR19IQVNIX0RFTEVURSk7Ci0JCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1Ziks IHJlY3B0cik7CiAJCQl9CisJCQllbHNlCisJCQkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVs KTsKKworCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1ZiksIHJlY3B0cik7CiAKIAkJCUVO RF9DUklUX1NFQ1RJT04oKTsKIAkJfQpAQCAtOTA2LDE0ICs5MTIsMTUgQEAgaGFzaGJ1Y2tldGNs ZWFudXAoUmVsYXRpb24gcmVsLCBCdWNrZXQgY3VyX2J1Y2tldCwgQnVmZmVyIGJ1Y2tldF9idWYs CiAJCS8qIFhMT0cgc3R1ZmYgKi8KIAkJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKIAkJewot CQkJWExvZ1JlY1B0cglyZWNwdHI7Ci0KIAkJCVhMb2dCZWdpbkluc2VydCgpOwogCQkJWExvZ1Jl Z2lzdGVyQnVmZmVyKDAsIGJ1Y2tldF9idWYsIFJFR0JVRl9TVEFOREFSRCk7CiAKIAkJCXJlY3B0 ciA9IFhMb2dJbnNlcnQoUk1fSEFTSF9JRCwgWExPR19IQVNIX1NQTElUX0NMRUFOVVApOwotCQkJ UGFnZVNldExTTihwYWdlLCByZWNwdHIpOwogCQl9CisJCWVsc2UKKwkJCXJlY3B0ciA9IFhMb2dH ZXRGYWtlTFNOKHJlbCk7CisKKwkJUGFnZVNldExTTihwYWdlLCByZWNwdHIpOwogCiAJCUVORF9D UklUX1NFQ1RJT04oKTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9o YXNoaW5zZXJ0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoaW5zZXJ0LmMKaW5kZXgg MGNlZmJhY2M5Li4zMzk1YmJjMTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo L2hhc2hpbnNlcnQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoaW5zZXJ0LmMK QEAgLTUwLDYgKzUwLDcgQEAgX2hhc2hfZG9pbnNlcnQoUmVsYXRpb24gcmVsLCBJbmRleFR1cGxl IGl0dXAsIFJlbGF0aW9uIGhlYXBSZWwsIGJvb2wgc29ydGVkKQogCXVpbnQzMgkJaGFzaGtleTsK IAlCdWNrZXQJCWJ1Y2tldDsKIAlPZmZzZXROdW1iZXIgaXR1cF9vZmY7CisJWExvZ1JlY1B0cgly ZWNwdHI7CiAKIAkvKgogCSAqIEdldCB0aGUgaGFzaCBrZXkgZm9yIHRoZSBpdGVtIChpdCdzIHN0 b3JlZCBpbiB0aGUgaW5kZXggdHVwbGUgaXRzZWxmKS4KQEAgLTIxNiw3ICsyMTcsNiBAQCByZXN0 YXJ0X2luc2VydDoKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKIAkJeGxfaGFzaF9p bnNlcnQgeGxyZWM7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJCXhscmVjLm9mZm51bSA9IGl0 dXBfb2ZmOwogCkBAIC0yMjksMTAgKzIyOSwxMiBAQCByZXN0YXJ0X2luc2VydDoKIAkJWExvZ1Jl Z2lzdGVyQnVmRGF0YSgwLCBpdHVwLCBJbmRleFR1cGxlU2l6ZShpdHVwKSk7CiAKIAkJcmVjcHRy ID0gWExvZ0luc2VydChSTV9IQVNIX0lELCBYTE9HX0hBU0hfSU5TRVJUKTsKLQotCQlQYWdlU2V0 TFNOKEJ1ZmZlckdldFBhZ2UoYnVmKSwgcmVjcHRyKTsKLQkJUGFnZVNldExTTihCdWZmZXJHZXRQ YWdlKG1ldGFidWYpLCByZWNwdHIpOwogCX0KKwllbHNlCisJCXJlY3B0ciA9IFhMb2dHZXRGYWtl TFNOKHJlbCk7CisKKwlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVmKSwgcmVjcHRyKTsKKwlQ YWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UobWV0YWJ1ZiksIHJlY3B0cik7CiAKIAlFTkRfQ1JJVF9T RUNUSU9OKCk7CiAKQEAgLTM3Miw2ICszNzQsNyBAQCBfaGFzaF92YWN1dW1fb25lX3BhZ2UoUmVs YXRpb24gcmVsLCBSZWxhdGlvbiBocmVsLCBCdWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIGJ1ZikKIAlQ YWdlCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwogCUhhc2hQYWdlT3BhcXVlIHBhZ2VvcGFx dWU7CiAJSGFzaE1ldGFQYWdlIG1ldGFwOworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJLyogU2Nh biBlYWNoIHR1cGxlIGluIHBhZ2UgdG8gc2VlIGlmIGl0IGlzIG1hcmtlZCBhcyBMUF9ERUFEICov CiAJbWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsKQEAgLTQyNCw3ICs0Mjcs NiBAQCBfaGFzaF92YWN1dW1fb25lX3BhZ2UoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBocmVsLCBC dWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIGJ1ZikKIAkJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkK IAkJewogCQkJeGxfaGFzaF92YWN1dW1fb25lX3BhZ2UgeGxyZWM7Ci0JCQlYTG9nUmVjUHRyCXJl Y3B0cjsKIAogCQkJeGxyZWMuaXNDYXRhbG9nUmVsID0gUmVsYXRpb25Jc0FjY2Vzc2libGVJbkxv Z2ljYWxEZWNvZGluZyhocmVsKTsKIAkJCXhscmVjLnNuYXBzaG90Q29uZmxpY3RIb3Jpem9uID0g c25hcHNob3RDb25mbGljdEhvcml6b247CkBAIC00NDUsMTAgKzQ0NywxMiBAQCBfaGFzaF92YWN1 dW1fb25lX3BhZ2UoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBocmVsLCBCdWZmZXIgbWV0YWJ1Ziwg QnVmZmVyIGJ1ZikKIAkJCVhMb2dSZWdpc3RlckJ1ZmZlcigxLCBtZXRhYnVmLCBSRUdCVUZfU1RB TkRBUkQpOwogCiAJCQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX0hBU0hfSUQsIFhMT0dfSEFTSF9W QUNVVU1fT05FX1BBR0UpOwotCi0JCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVmKSwgcmVj cHRyKTsKLQkJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwgcmVjcHRyKTsKIAkJ fQorCQllbHNlCisJCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJCVBhZ2VTZXRM U04oQnVmZmVyR2V0UGFnZShidWYpLCByZWNwdHIpOworCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBh Z2UobWV0YWJ1ZiksIHJlY3B0cik7CiAKIAkJRU5EX0NSSVRfU0VDVElPTigpOwogCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNob3ZmbC5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaG92ZmwuYwppbmRleCA4Y2ZiNmNlNzUuLmFiZDFmOTFmYSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaG92ZmwuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNob3ZmbC5jCkBAIC0xMzIsNiArMTMyLDcgQEAgX2hhc2hfYWRkb3ZmbHBh Z2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIGJ1ZiwgYm9vbCByZXRhaW5f cGluKQogCXVpbnQzMgkJaSwKIAkJCQlqOwogCWJvb2wJCXBhZ2VfZm91bmQgPSBmYWxzZTsKKwlY TG9nUmVjUHRyCXJlY3B0cjsKIAogCS8qCiAJICogV3JpdGUtbG9jayB0aGUgdGFpbCBwYWdlLiAg SGVyZSwgd2UgbmVlZCB0byBtYWludGFpbiBsb2NraW5nIG9yZGVyIHN1Y2gKQEAgLTM4MSw3ICsz ODIsNiBAQCBmb3VuZDoKIAkvKiBYTE9HIHN0dWZmICovCiAJaWYgKFJlbGF0aW9uTmVlZHNXQUwo cmVsKSkKIAl7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCQl4bF9oYXNoX2FkZF9vdmZsX3BhZ2Ug eGxyZWM7CiAKIAkJeGxyZWMuYm1wYWdlX2ZvdW5kID0gcGFnZV9mb3VuZDsKQEAgLTQwOCwxOCAr NDA4LDIwIEBAIGZvdW5kOgogCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDQsICZtZXRhcC0+aGFzaG1f Zmlyc3RmcmVlLCBzaXplb2YodWludDMyKSk7CiAKIAkJcmVjcHRyID0gWExvZ0luc2VydChSTV9I QVNIX0lELCBYTE9HX0hBU0hfQUREX09WRkxfUEFHRSk7Ci0KLQkJUGFnZVNldExTTihCdWZmZXJH ZXRQYWdlKG92ZmxidWYpLCByZWNwdHIpOwotCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVm KSwgcmVjcHRyKTsKLQotCQlpZiAoQnVmZmVySXNWYWxpZChtYXBidWYpKQotCQkJUGFnZVNldExT TihCdWZmZXJHZXRQYWdlKG1hcGJ1ZiksIHJlY3B0cik7Ci0KLQkJaWYgKEJ1ZmZlcklzVmFsaWQo bmV3bWFwYnVmKSkKLQkJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShuZXdtYXBidWYpLCByZWNw dHIpOwotCi0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwgcmVjcHRyKTsKIAl9 CisJZWxzZQorCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJUGFnZVNldExTTihC dWZmZXJHZXRQYWdlKG92ZmxidWYpLCByZWNwdHIpOworCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFn ZShidWYpLCByZWNwdHIpOworCisJaWYgKEJ1ZmZlcklzVmFsaWQobWFwYnVmKSkKKwkJUGFnZVNl dExTTihCdWZmZXJHZXRQYWdlKG1hcGJ1ZiksIHJlY3B0cik7CisKKwlpZiAoQnVmZmVySXNWYWxp ZChuZXdtYXBidWYpKQorCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UobmV3bWFwYnVmKSwgcmVj cHRyKTsKKworCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwgcmVjcHRyKTsKIAog CUVORF9DUklUX1NFQ1RJT04oKTsKIApAQCAtNTEwLDcgKzUxMiwxMSBAQCBfaGFzaF9mcmVlb3Zm bHBhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVja2V0YnVmLCBCdWZmZXIgb3ZmbGJ1ZiwKIAlC dWNrZXQJCWJ1Y2tldCBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFk7CiAJQnVmZmVyCQlwcmV2YnVm ID0gSW52YWxpZEJ1ZmZlcjsKIAlCdWZmZXIJCW5leHRidWYgPSBJbnZhbGlkQnVmZmVyOwotCWJv b2wJCXVwZGF0ZV9tZXRhcCA9IGZhbHNlOworCWJvb2wJCXVwZGF0ZV9tZXRhcCA9IGZhbHNlLAor CQkJCW1vZF93YnVmLAorCQkJCWlzX3ByaW1fYnVja2V0X3NhbWVfd3J0LAorCQkJCWlzX3ByZXZf YnVja2V0X3NhbWVfd3J0OworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJLyogR2V0IGluZm9ybWF0 aW9uIGZyb20gdGhlIGRvb21lZCBwYWdlICovCiAJX2hhc2hfY2hlY2twYWdlKHJlbCwgb3ZmbGJ1 ZiwgTEhfT1ZFUkZMT1dfUEFHRSk7CkBAIC02NDEsMTkgKzY0NywyMSBAQCBfaGFzaF9mcmVlb3Zm bHBhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVja2V0YnVmLCBCdWZmZXIgb3ZmbGJ1ZiwKIAkJ TWFya0J1ZmZlckRpcnR5KG1ldGFidWYpOwogCX0KIAorCS8qIERldGVybWluZSB3aGljaCBwYWdl cyBXQUwgcmVjb3JkIG1vZGlmaWVzICovCisJbW9kX3didWYgPSBmYWxzZTsKKwlpc19wcmltX2J1 Y2tldF9zYW1lX3dydCA9ICh3YnVmID09IGJ1Y2tldGJ1Zik7CisJaXNfcHJldl9idWNrZXRfc2Ft ZV93cnQgPSAod2J1ZiA9PSBwcmV2YnVmKTsKKwogCS8qIFhMT0cgc3R1ZmYgKi8KIAlpZiAoUmVs YXRpb25OZWVkc1dBTChyZWwpKQogCXsKIAkJeGxfaGFzaF9zcXVlZXplX3BhZ2UgeGxyZWM7Ci0J CVhMb2dSZWNQdHIJcmVjcHRyOwotCQlpbnQJCQlpOwotCQlib29sCQltb2Rfd2J1ZiA9IGZhbHNl OwogCiAJCXhscmVjLnByZXZibGtubyA9IHByZXZibGtubzsKIAkJeGxyZWMubmV4dGJsa25vID0g bmV4dGJsa25vOwogCQl4bHJlYy5udHVwcyA9IG5pdHVwczsKLQkJeGxyZWMuaXNfcHJpbV9idWNr ZXRfc2FtZV93cnQgPSAod2J1ZiA9PSBidWNrZXRidWYpOwotCQl4bHJlYy5pc19wcmV2X2J1Y2tl dF9zYW1lX3dydCA9ICh3YnVmID09IHByZXZidWYpOworCQl4bHJlYy5pc19wcmltX2J1Y2tldF9z YW1lX3dydCA9IGlzX3ByaW1fYnVja2V0X3NhbWVfd3J0OworCQl4bHJlYy5pc19wcmV2X2J1Y2tl dF9zYW1lX3dydCA9IGlzX3ByZXZfYnVja2V0X3NhbWVfd3J0OwogCiAJCVhMb2dCZWdpbkluc2Vy dCgpOwogCQlYTG9nUmVnaXN0ZXJEYXRhKCZ4bHJlYywgU2l6ZU9mSGFzaFNxdWVlemVQYWdlKTsK QEAgLTY2MiwxNCArNjcwLDE0IEBAIF9oYXNoX2ZyZWVvdmZscGFnZShSZWxhdGlvbiByZWwsIEJ1 ZmZlciBidWNrZXRidWYsIEJ1ZmZlciBvdmZsYnVmLAogCQkgKiBidWNrZXQgYnVmZmVyIHdhcyBu b3QgY2hhbmdlZCwgYnV0IHN0aWxsIG5lZWRzIHRvIGJlIHJlZ2lzdGVyZWQgdG8KIAkJICogZW5z dXJlIHRoYXQgd2UgY2FuIGFjcXVpcmUgYSBjbGVhbnVwIGxvY2sgb24gaXQgZHVyaW5nIHJlcGxh eS4KIAkJICovCi0JCWlmICgheGxyZWMuaXNfcHJpbV9idWNrZXRfc2FtZV93cnQpCisJCWlmICgh aXNfcHJpbV9idWNrZXRfc2FtZV93cnQpCiAJCXsKIAkJCXVpbnQ4CQlmbGFncyA9IFJFR0JVRl9T VEFOREFSRCB8IFJFR0JVRl9OT19JTUFHRSB8IFJFR0JVRl9OT19DSEFOR0U7CiAKIAkJCVhMb2dS ZWdpc3RlckJ1ZmZlcigwLCBidWNrZXRidWYsIGZsYWdzKTsKIAkJfQogCi0JCWlmICh4bHJlYy5u dHVwcyA+IDApCisJCWlmIChuaXR1cHMgPiAwKQogCQl7CiAJCQlYTG9nUmVnaXN0ZXJCdWZmZXIo MSwgd2J1ZiwgUkVHQlVGX1NUQU5EQVJEKTsKIApAQCAtNjc4LDEwICs2ODYsMTAgQEAgX2hhc2hf ZnJlZW92ZmxwYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1Y2tldGJ1ZiwgQnVmZmVyIG92Zmxi dWYsCiAKIAkJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMSwgaXR1cF9vZmZzZXRzLAogCQkJCQkJCQlu aXR1cHMgKiBzaXplb2YoT2Zmc2V0TnVtYmVyKSk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbml0dXBz OyBpKyspCisJCQlmb3IgKGludCBpID0gMDsgaSA8IG5pdHVwczsgaSsrKQogCQkJCVhMb2dSZWdp c3RlckJ1ZkRhdGEoMSwgaXR1cHNbaV0sIHR1cHNfc2l6ZVtpXSk7CiAJCX0KLQkJZWxzZSBpZiAo eGxyZWMuaXNfcHJpbV9idWNrZXRfc2FtZV93cnQgfHwgeGxyZWMuaXNfcHJldl9idWNrZXRfc2Ft ZV93cnQpCisJCWVsc2UgaWYgKGlzX3ByaW1fYnVja2V0X3NhbWVfd3J0IHx8IGlzX3ByZXZfYnVj a2V0X3NhbWVfd3J0KQogCQl7CiAJCQl1aW50OAkJd2J1Zl9mbGFnczsKIApAQCAtNjkxLDEwICs2 OTksMTAgQEAgX2hhc2hfZnJlZW92ZmxwYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1Y2tldGJ1 ZiwgQnVmZmVyIG92ZmxidWYsCiAJCQkgKiBpZiBpdCBpcyB0aGUgc2FtZSBhcyBwcmltYXJ5IGJ1 Y2tldCBidWZmZXIgb3IgdXBkYXRlIHRoZQogCQkJICogbmV4dGJsa25vIGlmIGl0IGlzIHNhbWUg YXMgdGhlIHByZXZpb3VzIGJ1Y2tldCBidWZmZXIuCiAJCQkgKi8KLQkJCUFzc2VydCh4bHJlYy5u dHVwcyA9PSAwKTsKKwkJCUFzc2VydChuaXR1cHMgPT0gMCk7CiAKIAkJCXdidWZfZmxhZ3MgPSBS RUdCVUZfU1RBTkRBUkQ7Ci0JCQlpZiAoIXhscmVjLmlzX3ByZXZfYnVja2V0X3NhbWVfd3J0KQor CQkJaWYgKCFpc19wcmV2X2J1Y2tldF9zYW1lX3dydCkKIAkJCXsKIAkJCQl3YnVmX2ZsYWdzIHw9 IFJFR0JVRl9OT19DSEFOR0U7CiAJCQl9CkBAIC03MTQsNyArNzIyLDcgQEAgX2hhc2hfZnJlZW92 ZmxwYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1Y2tldGJ1ZiwgQnVmZmVyIG92ZmxidWYsCiAJ CSAqIHByZXZwYWdlLiAgRHVyaW5nIHJlcGxheSwgd2UgY2FuIGRpcmVjdGx5IHVwZGF0ZSB0aGUg bmV4dGJsb2NrIGluCiAJCSAqIHdyaXRlcGFnZS4KIAkJICovCi0JCWlmIChCdWZmZXJJc1ZhbGlk KHByZXZidWYpICYmICF4bHJlYy5pc19wcmV2X2J1Y2tldF9zYW1lX3dydCkKKwkJaWYgKEJ1ZmZl cklzVmFsaWQocHJldmJ1ZikgJiYgIWlzX3ByZXZfYnVja2V0X3NhbWVfd3J0KQogCQkJWExvZ1Jl Z2lzdGVyQnVmZmVyKDMsIHByZXZidWYsIFJFR0JVRl9TVEFOREFSRCk7CiAKIAkJaWYgKEJ1ZmZl cklzVmFsaWQobmV4dGJ1ZikpCkBAIC03MzAsMjMgKzczOCwzMyBAQCBfaGFzaF9mcmVlb3ZmbHBh Z2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVja2V0YnVmLCBCdWZmZXIgb3ZmbGJ1ZiwKIAkJfQog CiAJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fSEFTSF9JRCwgWExPR19IQVNIX1NRVUVFWkVfUEFH RSk7Ci0KLQkJLyogU2V0IExTTiBpZmYgd2J1ZiBpcyBtb2RpZmllZC4gKi8KLQkJaWYgKG1vZF93 YnVmKQotCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKHdidWYpLCByZWNwdHIpOwotCi0JCVBh Z2VTZXRMU04oQnVmZmVyR2V0UGFnZShvdmZsYnVmKSwgcmVjcHRyKTsKLQotCQlpZiAoQnVmZmVy SXNWYWxpZChwcmV2YnVmKSAmJiAheGxyZWMuaXNfcHJldl9idWNrZXRfc2FtZV93cnQpCi0JCQlQ YWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UocHJldmJ1ZiksIHJlY3B0cik7Ci0JCWlmIChCdWZmZXJJ c1ZhbGlkKG5leHRidWYpKQotCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG5leHRidWYpLCBy ZWNwdHIpOwotCi0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtYXBidWYpLCByZWNwdHIpOwot Ci0JCWlmICh1cGRhdGVfbWV0YXApCi0JCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UobWV0YWJ1 ZiksIHJlY3B0cik7CiAJfQorCWVsc2UJCQkJCQkvKiAhUmVsYXRpb25OZWVkc1dBTChyZWwpICov CisJeworCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJCS8qIERldGVybWluZSBp ZiB3YnVmIGlzIG1vZGlmaWVkICovCisJCWlmIChuaXR1cHMgPiAwKQorCQkJbW9kX3didWYgPSB0 cnVlOworCQllbHNlIGlmIChpc19wcmV2X2J1Y2tldF9zYW1lX3dydCkKKwkJCW1vZF93YnVmID0g dHJ1ZTsKKwl9CisKKwkvKiBTZXQgTFNOIGlmZiB3YnVmIGlzIG1vZGlmaWVkLiAqLworCWlmICht b2Rfd2J1ZikKKwkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKHdidWYpLCByZWNwdHIpOworCisJ UGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG92ZmxidWYpLCByZWNwdHIpOworCisJaWYgKEJ1ZmZl cklzVmFsaWQocHJldmJ1ZikgJiYgIWlzX3ByZXZfYnVja2V0X3NhbWVfd3J0KQorCQlQYWdlU2V0 TFNOKEJ1ZmZlckdldFBhZ2UocHJldmJ1ZiksIHJlY3B0cik7CisJaWYgKEJ1ZmZlcklzVmFsaWQo bmV4dGJ1ZikpCisJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShuZXh0YnVmKSwgcmVjcHRyKTsK KworCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtYXBidWYpLCByZWNwdHIpOworCisJaWYgKHVw ZGF0ZV9tZXRhcCkKKwkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG1ldGFidWYpLCByZWNwdHIp OwogCiAJRU5EX0NSSVRfU0VDVElPTigpOwogCkBAIC05NTksNiArOTc3LDggQEAgcmVhZHBhZ2U6 CiAKIAkJCQlpZiAobml0dXBzID4gMCkKIAkJCQl7CisJCQkJCVhMb2dSZWNQdHIJcmVjcHRyOwor CiAJCQkJCUFzc2VydChuaXR1cHMgPT0gbmRlbGV0YWJsZSk7CiAKIAkJCQkJLyoKQEAgLTk4Niw3 ICsxMDA2LDYgQEAgcmVhZHBhZ2U6CiAJCQkJCS8qIFhMT0cgc3R1ZmYgKi8KIAkJCQkJaWYgKFJl bGF0aW9uTmVlZHNXQUwocmVsKSkKIAkJCQkJewotCQkJCQkJWExvZ1JlY1B0cglyZWNwdHI7CiAJ CQkJCQl4bF9oYXNoX21vdmVfcGFnZV9jb250ZW50cyB4bHJlYzsKIAogCQkJCQkJeGxyZWMubnR1 cHMgPSBuaXR1cHM7CkBAIC0xMDE4LDEwICsxMDM3LDEyIEBAIHJlYWRwYWdlOgogCQkJCQkJCQkJ CQluZGVsZXRhYmxlICogc2l6ZW9mKE9mZnNldE51bWJlcikpOwogCiAJCQkJCQlyZWNwdHIgPSBY TG9nSW5zZXJ0KFJNX0hBU0hfSUQsIFhMT0dfSEFTSF9NT1ZFX1BBR0VfQ09OVEVOVFMpOwotCi0J CQkJCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2Uod2J1ZiksIHJlY3B0cik7Ci0JCQkJCQlQYWdl U2V0TFNOKEJ1ZmZlckdldFBhZ2UocmJ1ZiksIHJlY3B0cik7CiAJCQkJCX0KKwkJCQkJZWxzZQor CQkJCQkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsKKworCQkJCQlQYWdlU2V0TFNOKEJ1 ZmZlckdldFBhZ2Uod2J1ZiksIHJlY3B0cik7CisJCQkJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFn ZShyYnVmKSwgcmVjcHRyKTsKIAogCQkJCQlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNocGFnZS5jCmluZGV4IDhlMjIwYTNhZS4uMjYzYmM3M2YxIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oYXNoL2hhc2hwYWdlLmMKQEAgLTYzMCw2ICs2MzAsNyBAQCBfaGFzaF9leHBhbmR0YWJs ZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBtZXRhYnVmKQogCXVpbnQzMgkJbG93bWFzazsKIAlib29s CQltZXRhcF91cGRhdGVfbWFza3MgPSBmYWxzZTsKIAlib29sCQltZXRhcF91cGRhdGVfc3BsaXRw b2ludCA9IGZhbHNlOworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiByZXN0YXJ0X2V4cGFuZDoKIApA QCAtOTAwLDcgKzkwMSw2IEBAIHJlc3RhcnRfZXhwYW5kOgogCWlmIChSZWxhdGlvbk5lZWRzV0FM KHJlbCkpCiAJewogCQl4bF9oYXNoX3NwbGl0X2FsbG9jYXRlX3BhZ2UgeGxyZWM7Ci0JCVhMb2dS ZWNQdHIJcmVjcHRyOwogCiAJCXhscmVjLm5ld19idWNrZXQgPSBtYXhidWNrZXQ7CiAJCXhscmVj Lm9sZF9idWNrZXRfZmxhZyA9IG9vcGFxdWUtPmhhc2hvX2ZsYWc7CkBAIC05MzMsMTEgKzkzMywx MyBAQCByZXN0YXJ0X2V4cGFuZDoKIAkJWExvZ1JlZ2lzdGVyRGF0YSgmeGxyZWMsIFNpemVPZkhh c2hTcGxpdEFsbG9jUGFnZSk7CiAKIAkJcmVjcHRyID0gWExvZ0luc2VydChSTV9IQVNIX0lELCBY TE9HX0hBU0hfU1BMSVRfQUxMT0NBVEVfUEFHRSk7Ci0KLQkJUGFnZVNldExTTihCdWZmZXJHZXRQ YWdlKGJ1Zl9vYmxrbm8pLCByZWNwdHIpOwotCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVm X25ibGtubyksIHJlY3B0cik7Ci0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwg cmVjcHRyKTsKIAl9CisJZWxzZQorCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJ UGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1Zl9vYmxrbm8pLCByZWNwdHIpOworCVBhZ2VTZXRM U04oQnVmZmVyR2V0UGFnZShidWZfbmJsa25vKSwgcmVjcHRyKTsKKwlQYWdlU2V0TFNOKEJ1ZmZl ckdldFBhZ2UobWV0YWJ1ZiksIHJlY3B0cik7CiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKQEAg LTEwOTIsNiArMTA5NCw3IEBAIF9oYXNoX3NwbGl0YnVja2V0KFJlbGF0aW9uIHJlbCwKIAlTaXpl CQlhbGxfdHVwc19zaXplID0gMDsKIAlpbnQJCQlpOwogCXVpbnQxNgkJbml0dXBzID0gMDsKKwlY TG9nUmVjUHRyCXJlY3B0cjsKIAogCWJ1Y2tldF9vYnVmID0gb2J1ZjsKIAlvcGFnZSA9IEJ1ZmZl ckdldFBhZ2Uob2J1Zik7CkBAIC0xMjk2LDcgKzEyOTksNiBAQCBfaGFzaF9zcGxpdGJ1Y2tldChS ZWxhdGlvbiByZWwsCiAKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKLQkJWExvZ1Jl Y1B0cglyZWNwdHI7CiAJCXhsX2hhc2hfc3BsaXRfY29tcGxldGUgeGxyZWM7CiAKIAkJeGxyZWMu b2xkX2J1Y2tldF9mbGFnID0gb29wYXF1ZS0+aGFzaG9fZmxhZzsKQEAgLTEzMTAsMTAgKzEzMTIs MTIgQEAgX2hhc2hfc3BsaXRidWNrZXQoUmVsYXRpb24gcmVsLAogCQlYTG9nUmVnaXN0ZXJCdWZm ZXIoMSwgYnVja2V0X25idWYsIFJFR0JVRl9TVEFOREFSRCk7CiAKIAkJcmVjcHRyID0gWExvZ0lu c2VydChSTV9IQVNIX0lELCBYTE9HX0hBU0hfU1BMSVRfQ09NUExFVEUpOwotCi0JCVBhZ2VTZXRM U04oQnVmZmVyR2V0UGFnZShidWNrZXRfb2J1ZiksIHJlY3B0cik7Ci0JCVBhZ2VTZXRMU04oQnVm ZmVyR2V0UGFnZShidWNrZXRfbmJ1ZiksIHJlY3B0cik7CiAJfQorCWVsc2UKKwkJcmVjcHRyID0g WExvZ0dldEZha2VMU04ocmVsKTsKKworCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShidWNrZXRf b2J1ZiksIHJlY3B0cik7CisJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1Y2tldF9uYnVmKSwg cmVjcHRyKTsKIAogCUVORF9DUklUX1NFQ1RJT04oKTsKIAotLSAKMi41MS4wCgo= --000000000000a2454a064b95d983 Content-Type: application/x-patch; name="v11-0009-Make-buffer-hit-helper.patch" Content-Disposition: attachment; filename="v11-0009-Make-buffer-hit-helper.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm0x5ogh4 RnJvbSAzMmYyMmViZjBlYTg1NTc4OTQwNjY5ZmMzYmNmOGE3Mjc2Y2FiZDFmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBGcmksIDIzIEphbiAyMDI2IDEzOjU0OjAyIC0wNTAwClN1YmplY3Q6IFtQ QVRDSCB2MTEgMDkvMTJdIE1ha2UgYnVmZmVyIGhpdCBoZWxwZXIKCkFscmVhZHkgdHdvIHBsYWNl cyBjb3VudCBidWZmZXIgaGl0cywgcmVxdWlyaW5nIHF1aXRlIGEgZmV3IGxpbmVzIG9mCmNvZGUg c2luY2Ugd2UgZG8gYWNjb3VudGluZyBpbiBzbyBtYW55IHBsYWNlcy4gRnV0dXJlIGNvbW1pdHMg d2lsbCBhZGQKbW9yZSBsb2NhdGlvbnMsIHNvIHJlZmFjdG9yIGludG8gYSBoZWxwZXIuCgpOb3Rl OiBJIChwZ2VvZ2hlYW4pIGhhdmUgY2hhbmdlZCB0aGlzIGZyb20gTWVsYW5pZSdzIG9yaWdpbmFs IGJ5CmlubGluaW5nIHRoZSBoZWxwZXIgZnVuY3Rpb246CgpodHRwczovL3Bvc3Rnci5lcy9tL0NB SDItV3prMDJ2UGpzSlB4N0VHTm1ndnNLS2d5SG49WHRHakpjUEUrZVFUUDN4UXQ3d0BtYWlsLmdt YWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIHwgMTExICsr KysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA1NiBpbnNlcnRpb25z KCspLCA1NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCmluZGV4 IGE3YTU2OWM5OS4uMzdiYjdjODI0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpA QCAtNjM5LDYgKzYzOSwxMCBAQCBzdGF0aWMgaW5saW5lIEJ1ZmZlckRlc2MgKkJ1ZmZlckFsbG9j KFNNZ3JSZWxhdGlvbiBzbWdyLAogCQkJCQkJCQkJICBib29sICpmb3VuZFB0ciwgSU9Db250ZXh0 IGlvX2NvbnRleHQpOwogc3RhdGljIGJvb2wgQXN5bmNSZWFkQnVmZmVycyhSZWFkQnVmZmVyc09w ZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpOwogc3RhdGljIHZvaWQg Q2hlY2tSZWFkQnVmZmVyc09wZXJhdGlvbihSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9u LCBib29sIGlzX2NvbXBsZXRlKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBQcm9jZXNzQnVmZmVySGl0 KEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJCQkJUmVsYXRpb24gcmVsLCBj aGFyIHBlcnNpc3RlbmNlLAorCQkJCQkJCQkJU01nclJlbGF0aW9uIHNtZ3IsIEZvcmtOdW1iZXIg Zm9ya251bSwKKwkJCQkJCQkJCUJsb2NrTnVtYmVyIGJsb2NrbnVtKTsKIHN0YXRpYyBCdWZmZXIg R2V0VmljdGltQnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCBJT0NvbnRleHQg aW9fY29udGV4dCk7CiBzdGF0aWMgdm9pZCBGbHVzaFVubG9ja2VkQnVmZmVyKEJ1ZmZlckRlc2Mg KmJ1ZiwgU01nclJlbGF0aW9uIHJlbG4sCiAJCQkJCQkJCUlPT2JqZWN0IGlvX29iamVjdCwgSU9D b250ZXh0IGlvX2NvbnRleHQpOwpAQCAtMTIxNyw4ICsxMjIxLDYgQEAgUGluQnVmZmVyRm9yQmxv Y2soUmVsYXRpb24gcmVsLAogCQkJCSAgYm9vbCAqZm91bmRQdHIpCiB7CiAJQnVmZmVyRGVzYyAq YnVmSGRyOwotCUlPQ29udGV4dAlpb19jb250ZXh0OwotCUlPT2JqZWN0CWlvX29iamVjdDsKIAog CUFzc2VydChibG9ja051bSAhPSBQX05FVyk7CiAKQEAgLTEyMjcsMTcgKzEyMjksNiBAQCBQaW5C dWZmZXJGb3JCbG9jayhSZWxhdGlvbiByZWwsCiAJCQlwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNU RU5DRV9QRVJNQU5FTlQgfHwKIAkJCXBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1VOTE9H R0VEKSk7CiAKLQlpZiAocGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKLQl7Ci0J CWlvX2NvbnRleHQgPSBJT0NPTlRFWFRfTk9STUFMOwotCQlpb19vYmplY3QgPSBJT09CSkVDVF9U RU1QX1JFTEFUSU9OOwotCX0KLQllbHNlCi0JewotCQlpb19jb250ZXh0ID0gSU9Db250ZXh0Rm9y U3RyYXRlZ3koc3RyYXRlZ3kpOwotCQlpb19vYmplY3QgPSBJT09CSkVDVF9SRUxBVElPTjsKLQl9 Ci0KIAlUUkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9SRUFEX1NUQVJUKGZvcmtOdW0sIGJsb2NrTnVt LAogCQkJCQkJCQkJICAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKIAkJCQkJ CQkJCSAgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKQEAgLTEyNDUsMTggKzEy MzYsMTEgQEAgUGluQnVmZmVyRm9yQmxvY2soUmVsYXRpb24gcmVsLAogCQkJCQkJCQkJICAgc21n ci0+c21ncl9ybG9jYXRvci5iYWNrZW5kKTsKIAogCWlmIChwZXJzaXN0ZW5jZSA9PSBSRUxQRVJT SVNURU5DRV9URU1QKQotCXsKIAkJYnVmSGRyID0gTG9jYWxCdWZmZXJBbGxvYyhzbWdyLCBmb3Jr TnVtLCBibG9ja051bSwgZm91bmRQdHIpOwotCQlpZiAoKmZvdW5kUHRyKQotCQkJcGdCdWZmZXJV c2FnZS5sb2NhbF9ibGtzX2hpdCsrOwotCX0KIAllbHNlCi0JewogCQlidWZIZHIgPSBCdWZmZXJB bGxvYyhzbWdyLCBwZXJzaXN0ZW5jZSwgZm9ya051bSwgYmxvY2tOdW0sCi0JCQkJCQkJIHN0cmF0 ZWd5LCBmb3VuZFB0ciwgaW9fY29udGV4dCk7Ci0JCWlmICgqZm91bmRQdHIpCi0JCQlwZ0J1ZmZl clVzYWdlLnNoYXJlZF9ibGtzX2hpdCsrOwotCX0KKwkJCQkJCQkgc3RyYXRlZ3ksIGZvdW5kUHRy LCBJT0NvbnRleHRGb3JTdHJhdGVneShzdHJhdGVneSkpOworCiAJaWYgKHJlbCkKIAl7CiAJCS8q CkBAIC0xMjY1LDIyICsxMjQ5LDEwIEBAIFBpbkJ1ZmZlckZvckJsb2NrKFJlbGF0aW9uIHJlbCwK IAkJICogemVyb2VkIGluc3RlYWQpLCB0aGUgcGVyLXJlbGF0aW9uIHN0YXRzIGFsd2F5cyBjb3Vu dCB0aGVtLgogCQkgKi8KIAkJcGdzdGF0X2NvdW50X2J1ZmZlcl9yZWFkKHJlbCk7Ci0JCWlmICgq Zm91bmRQdHIpCi0JCQlwZ3N0YXRfY291bnRfYnVmZmVyX2hpdChyZWwpOwogCX0KLQlpZiAoKmZv dW5kUHRyKQotCXsKLQkJcGdzdGF0X2NvdW50X2lvX29wKGlvX29iamVjdCwgaW9fY29udGV4dCwg SU9PUF9ISVQsIDEsIDApOwotCQlpZiAoVmFjdXVtQ29zdEFjdGl2ZSkKLQkJCVZhY3V1bUNvc3RC YWxhbmNlICs9IFZhY3V1bUNvc3RQYWdlSGl0OwogCi0JCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVS X1JFQURfRE9ORShmb3JrTnVtLCBibG9ja051bSwKLQkJCQkJCQkJCQkgIHNtZ3ItPnNtZ3Jfcmxv Y2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxv Y2F0b3IuZGJPaWQsCi0JCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVs TnVtYmVyLAotCQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5iYWNrZW5kLAotCQkJCQkJ CQkJCSAgdHJ1ZSk7Ci0JfQorCWlmICgqZm91bmRQdHIpCisJCVByb2Nlc3NCdWZmZXJIaXQoc3Ry YXRlZ3ksIHJlbCwgcGVyc2lzdGVuY2UsIHNtZ3IsIGZvcmtOdW0sIGJsb2NrTnVtKTsKIAogCXJl dHVybiBCdWZmZXJEZXNjcmlwdG9yR2V0QnVmZmVyKGJ1Zkhkcik7CiB9CkBAIC0xNjg2LDYgKzE2 NTgsNTEgQEAgUmVhZEJ1ZmZlcnNDYW5TdGFydElPKEJ1ZmZlciBidWZmZXIsIGJvb2wgbm93YWl0 KQogCXJldHVybiBSZWFkQnVmZmVyc0NhblN0YXJ0SU9PbmNlKGJ1ZmZlciwgbm93YWl0KTsKIH0K IAorLyoKKyAqIFdlIHRyYWNrIHZhcmlvdXMgc3RhdHMgcmVsYXRlZCB0byBidWZmZXIgaGl0cy4g QmVjYXVzZSB0aGlzIGlzIGRvbmUgaW4gYQorICogZmV3IHNlcGFyYXRlIHBsYWNlcywgdGhpcyBo ZWxwZXIgZXhpc3RzIGZvciBjb252ZW5pZW5jZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitQ cm9jZXNzQnVmZmVySGl0KEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCSBSZWxh dGlvbiByZWwsIGNoYXIgcGVyc2lzdGVuY2UsIFNNZ3JSZWxhdGlvbiBzbWdyLAorCQkJCSBGb3Jr TnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtKQoreworCUlPQ29udGV4dAlpb19j b250ZXh0OworCUlPT2JqZWN0CWlvX29iamVjdDsKKworCWlmIChwZXJzaXN0ZW5jZSA9PSBSRUxQ RVJTSVNURU5DRV9URU1QKQorCXsKKwkJaW9fY29udGV4dCA9IElPQ09OVEVYVF9OT1JNQUw7CisJ CWlvX29iamVjdCA9IElPT0JKRUNUX1RFTVBfUkVMQVRJT047CisJfQorCWVsc2UKKwl7CisJCWlv X2NvbnRleHQgPSBJT0NvbnRleHRGb3JTdHJhdGVneShzdHJhdGVneSk7CisJCWlvX29iamVjdCA9 IElPT0JKRUNUX1JFTEFUSU9OOworCX0KKworCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX1JFQURf RE9ORShmb3JrbnVtLAorCQkJCQkJCQkJICBibG9ja251bSwKKwkJCQkJCQkJCSAgc21nci0+c21n cl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKKwkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRv ci5sb2NhdG9yLmRiT2lkLAorCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iu cmVsTnVtYmVyLAorCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmJhY2tlbmQsCisJCQkJ CQkJCQkgIHRydWUpOworCisJaWYgKHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVAp CisJCXBnQnVmZmVyVXNhZ2UubG9jYWxfYmxrc19oaXQgKz0gMTsKKwllbHNlCisJCXBnQnVmZmVy VXNhZ2Uuc2hhcmVkX2Jsa3NfaGl0ICs9IDE7CisKKwlpZiAocmVsKQorCQlwZ3N0YXRfY291bnRf YnVmZmVyX2hpdChyZWwpOworCisJcGdzdGF0X2NvdW50X2lvX29wKGlvX29iamVjdCwgaW9fY29u dGV4dCwgSU9PUF9ISVQsIDEsIDApOworCisJaWYgKFZhY3V1bUNvc3RBY3RpdmUpCisJCVZhY3V1 bUNvc3RCYWxhbmNlICs9IFZhY3V1bUNvc3RQYWdlSGl0OworfQorCiAvKgogICogSGVscGVyIGZv ciBXYWl0UmVhZEJ1ZmZlcnMoKSB0aGF0IHByb2Nlc3NlcyB0aGUgcmVzdWx0cyBvZiBhIHJlYWR2 CiAgKiBvcGVyYXRpb24sIHJhaXNpbmcgYW4gZXJyb3IgaWYgbmVjZXNzYXJ5LgpAQCAtMTk4MSwy NSArMTk5OCw5IEBAIEFzeW5jUmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJh dGlvbiwgaW50ICpuYmxvY2tzX3Byb2dyZXNzKQogCQkgKiBtdXN0IGhhdmUgc3RhcnRlZCBvdXQg YXMgYSBtaXNzIGluIFBpbkJ1ZmZlckZvckJsb2NrKCkuIFRoZSBvdGhlcgogCQkgKiBiYWNrZW5k IHdpbGwgdHJhY2sgdGhpcyBhcyBhICdyZWFkJy4KIAkJICovCi0JCVRSQUNFX1BPU1RHUkVTUUxf QlVGRkVSX1JFQURfRE9ORShmb3JrbnVtLCBibG9ja251bSArIG9wZXJhdGlvbi0+bmJsb2Nrc19k b25lLAotCQkJCQkJCQkJCSAgb3BlcmF0aW9uLT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iu c3BjT2lkLAotCQkJCQkJCQkJCSAgb3BlcmF0aW9uLT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0 b3IuZGJPaWQsCi0JCQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9j YXRvci5yZWxOdW1iZXIsCi0JCQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0 b3IuYmFja2VuZCwKLQkJCQkJCQkJCQkgIHRydWUpOwotCi0JCWlmIChwZXJzaXN0ZW5jZSA9PSBS RUxQRVJTSVNURU5DRV9URU1QKQotCQkJcGdCdWZmZXJVc2FnZS5sb2NhbF9ibGtzX2hpdCArPSAx OwotCQllbHNlCi0JCQlwZ0J1ZmZlclVzYWdlLnNoYXJlZF9ibGtzX2hpdCArPSAxOwotCi0JCWlm IChvcGVyYXRpb24tPnJlbCkKLQkJCXBnc3RhdF9jb3VudF9idWZmZXJfaGl0KG9wZXJhdGlvbi0+ cmVsKTsKLQotCQlwZ3N0YXRfY291bnRfaW9fb3AoaW9fb2JqZWN0LCBpb19jb250ZXh0LCBJT09Q X0hJVCwgMSwgMCk7Ci0KLQkJaWYgKFZhY3V1bUNvc3RBY3RpdmUpCi0JCQlWYWN1dW1Db3N0QmFs YW5jZSArPSBWYWN1dW1Db3N0UGFnZUhpdDsKKwkJUHJvY2Vzc0J1ZmZlckhpdChvcGVyYXRpb24t PnN0cmF0ZWd5LCBvcGVyYXRpb24tPnJlbCwgcGVyc2lzdGVuY2UsCisJCQkJCQkgb3BlcmF0aW9u LT5zbWdyLCBmb3JrbnVtLAorCQkJCQkJIGJsb2NrbnVtICsgb3BlcmF0aW9uLT5uYmxvY2tzX2Rv bmUpOwogCX0KIAllbHNlCiAJewotLSAKMi41MS4wCgo= --000000000000a2454a064b95d983 Content-Type: application/x-patch; name="v11-0010-Don-t-wait-for-already-in-progress-IO.patch" Content-Disposition: attachment; filename="v11-0010-Don-t-wait-for-already-in-progress-IO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm0x5ogf3 RnJvbSA4Nzc5N2ViMGQzMzM0NDE1ZTEzYTljN2U0MDM3MzY5ZjdmOGU5NTExIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBGcmksIDIzIEphbiAyMDI2IDE0OjAwOjMxIC0wNTAwClN1YmplY3Q6IFtQ QVRDSCB2MTEgMTAvMTJdIERvbid0IHdhaXQgZm9yIGFscmVhZHkgaW4tcHJvZ3Jlc3MgSU8KTUlN RS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNv bnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKCldoZW4gYSBiYWNrZW5kIGF0dGVtcHRzIHRv IHN0YXJ0IGEgcmVhZCBvbiBhIGJ1ZmZlciBhbmQgZmluZHMgdGhhdCBJL08KaXMgYWxyZWFkeSBp biBwcm9ncmVzcywgaXQgcHJldmlvdXNseSB3YWl0ZWQgZm9yIHRoYXQgSS9PIHRvIGNvbXBsZXRl CmJlZm9yZSBpbml0aWF0aW5nIHJlYWRzIGZvciBhbnkgb3RoZXIgYnVmZmVycy4gQWx0aG91Z2gg dGhlIGJhY2tlbmQgbXVzdApzdGlsbCB3YWl0IGZvciB0aGUgSS9PIHRvIGZpbmlzaCB3aGVuIGxh dGVyIGFjcXVpcmluZyB0aGUgYnVmZmVyLCBpdApzaG91bGQgbm90IG5lZWQgdG8gd2FpdCBhdCBy ZWFkIHN0YXJ0IHRpbWUuIE90aGVyIGJ1ZmZlcnMgbWF5IGJlCmF2YWlsYWJsZSBmb3IgSS9PLCBh bmQgaW4gc29tZSB3b3JrbG9hZHMgdGhpcyB3YWl0aW5nIHNpZ25pZmljYW50bHkKcmVkdWNlcyBj b25jdXJyZW5jeS4KCkZvciBleGFtcGxlLCBpbmRleCBzY2FucyBtYXkgcmVwZWF0ZWRseSByZXF1 ZXN0IHRoZSBzYW1lIGhlYXAgYmxvY2suIElmCnRoZSBiYWNrZW5kIHdhaXRzIGVhY2ggdGltZSBp dCBlbmNvdW50ZXJzIGFuIGluLXByb2dyZXNzIHJlYWQsIHRoZQphY2Nlc3MgcGF0dGVybiBlZmZl Y3RpdmVseSBkZWdlbmVyYXRlcyBpbnRvIHN5bmNocm9ub3VzIEkvTy4gQnkKaW50cm9kdWNpbmcg dGhlIGNvbmNlcHQgb2YgZm9yZWlnbiBJL08gb3BlcmF0aW9ucywgYSBiYWNrZW5kIGNhbiByZWNv cmQKdGhlIGJ1ZmZlcuKAmXMgd2FpdCByZWZlcmVuY2UgYW5kIGRlZmVyIHdhaXRpbmcgdW50aWwg V2FpdFJlYWRCdWZmZXJzKCkKd2hlbiBpdCBhY3R1YWxseSBhY3F1aXJlcyB0aGUgYnVmZmVyLgoK SW4gcmFyZSBjYXNlcywgYSBiYWNrZW5kIG1heSBzdGlsbCBuZWVkIHRvIHdhaXQgd2hlbiBzdGFy dGluZyBhIHJlYWQgaWYKaXQgZW5jb3VudGVycyBhIGJ1ZmZlciBhZnRlciBhbm90aGVyIGJhY2tl bmQgaGFzIHNldCBCTV9JT19JTl9QUk9HUkVTUwpidXQgYmVmb3JlIHRoZSBidWZmZXIgZGVzY3Jp cHRvcuKAmXMgd2FpdCByZWZlcmVuY2UgaGFzIGJlZW4gc2V0LiBTdWNoCndpbmRvd3Mgc2hvdWxk IGJlIGJyaWVmIGFuZCB1bmNvbW1vbi4KLS0tCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5o ICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyB8IDQ5 MSArKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCAgICB8ICAgMSArCiAzIGZpbGVzIGNoYW5nZWQsIDMyNSBpbnNlcnRpb25zKCspLCAx NjggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3Iu aCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKaW5kZXggYTQwYWRmNmIyLi4xMzU4ZmM3 ZmEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKKysrIGIvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApAQCAtMTQ3LDYgKzE0Nyw3IEBAIHN0cnVjdCBSZWFkQnVm ZmVyc09wZXJhdGlvbgogCWludAkJCWZsYWdzOwogCWludDE2CQluYmxvY2tzOwogCWludDE2CQlu YmxvY2tzX2RvbmU7CisJYm9vbAkJZm9yZWlnbl9pbzsKIAlQZ0Fpb1dhaXRSZWYgaW9fd3JlZjsK IAlQZ0Fpb1JldHVybiBpb19yZXR1cm47CiB9OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3Iu YwppbmRleCAzN2JiN2M4MjQuLjU1N2IwNWUxOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVm bWdyLmMKQEAgLTE3MCw2ICsxNzAsMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgU01nclNvcnRBcnJheQog CVNNZ3JSZWxhdGlvbiBzcmVsOwogfSBTTWdyU29ydEFycmF5OwogCisKKy8qCisgKiBJbiBBc3lu Y1JlYWRCdWZmZXJzKCksIHdoZW4gcHJlcGFyaW5nIGEgYnVmZmVyIGZvciByZWFkaW5nIGFuZCBz ZXR0aW5nCisgKiBCTV9JT19JTl9QUk9HUkVTUywgdGhlIGJ1ZmZlciBtYXkgYWxyZWFkeSBoYXZl IEkvTyBpbiBwcm9ncmVzcyBvciBtYXkKKyAqIGFscmVhZHkgY29udGFpbiB0aGUgZGVzaXJlZCBi bG9jay4gQXN5bmNSZWFkQnVmZmVycygpIG11c3QgZGlzdGluZ3Vpc2gKKyAqIGJldHdlZW4gdGhl c2UgY2FzZXMgKGFuZCB0aGUgY2FzZSB3aGVyZSBpdCBzaG91bGQgaW5pdGlhdGUgSS9PKSBzbyBp dCBjYW4KKyAqIG1hcmsgYW4gaW4tcHJvZ3Jlc3MgYnVmZmVyIGFzIGZvcmVpZ24gSS9PIHJhdGhl ciB0aGFuIHdhaXRpbmcgb24gaXQuCisgKi8KK3R5cGVkZWYgZW51bSBQcmVwYXJlUmVhZEJ1ZmZl cl9TdGF0dXMKK3sKKwlSRUFEX0JVRkZFUl9BTFJFQURZX0RPTkUsCisJUkVBRF9CVUZGRVJfSU5f UFJPR1JFU1MsCisJUkVBRF9CVUZGRVJfUkVBRFlfRk9SX0lPLAorfSBQcmVwYXJlUmVhZEJ1ZmZl cl9TdGF0dXM7CisKIC8qIEdVQyB2YXJpYWJsZXMgKi8KIGJvb2wJCXplcm9fZGFtYWdlZF9wYWdl cyA9IGZhbHNlOwogaW50CQkJYmd3cml0ZXJfbHJ1X21heHBhZ2VzID0gMTAwOwpAQCAtMTYxOSw0 NSArMTYzNCw2IEBAIENoZWNrUmVhZEJ1ZmZlcnNPcGVyYXRpb24oUmVhZEJ1ZmZlcnNPcGVyYXRp b24gKm9wZXJhdGlvbiwgYm9vbCBpc19jb21wbGV0ZSkKICNlbmRpZgogfQogCi0vKiBoZWxwZXIg Zm9yIFJlYWRCdWZmZXJzQ2FuU3RhcnRJTygpLCB0byBhdm9pZCByZXBldGl0aW9uICovCi1zdGF0 aWMgaW5saW5lIGJvb2wKLVJlYWRCdWZmZXJzQ2FuU3RhcnRJT09uY2UoQnVmZmVyIGJ1ZmZlciwg Ym9vbCBub3dhaXQpCi17Ci0JaWYgKEJ1ZmZlcklzTG9jYWwoYnVmZmVyKSkKLQkJcmV0dXJuIFN0 YXJ0TG9jYWxCdWZmZXJJTyhHZXRMb2NhbEJ1ZmZlckRlc2NyaXB0b3IoLWJ1ZmZlciAtIDEpLAot CQkJCQkJCQkgIHRydWUsIG5vd2FpdCk7Ci0JZWxzZQotCQlyZXR1cm4gU3RhcnRCdWZmZXJJTyhH ZXRCdWZmZXJEZXNjcmlwdG9yKGJ1ZmZlciAtIDEpLCB0cnVlLCBub3dhaXQpOwotfQotCi0vKgot ICogSGVscGVyIGZvciBBc3luY1JlYWRCdWZmZXJzIHRoYXQgdHJpZXMgdG8gZ2V0IHRoZSBidWZm ZXIgcmVhZHkgZm9yIElPLgotICovCi1zdGF0aWMgaW5saW5lIGJvb2wKLVJlYWRCdWZmZXJzQ2Fu U3RhcnRJTyhCdWZmZXIgYnVmZmVyLCBib29sIG5vd2FpdCkKLXsKLQkvKgotCSAqIElmIHRoaXMg YmFja2VuZCBjdXJyZW50bHkgaGFzIHN0YWdlZCBJTywgd2UgbmVlZCB0byBzdWJtaXQgdGhlIHBl bmRpbmcKLQkgKiBJTyBiZWZvcmUgd2FpdGluZyBmb3IgdGhlIHJpZ2h0IHRvIGlzc3VlIElPLCB0 byBhdm9pZCB0aGUgcG90ZW50aWFsIGZvcgotCSAqIGRlYWRsb2NrcyAoYW5kLCBtb3JlIGNvbW1v bmx5LCB1bm5lY2Vzc2FyeSBkZWxheXMgZm9yIG90aGVyIGJhY2tlbmRzKS4KLQkgKi8KLQlpZiAo IW5vd2FpdCAmJiBwZ2Fpb19oYXZlX3N0YWdlZCgpKQotCXsKLQkJaWYgKFJlYWRCdWZmZXJzQ2Fu U3RhcnRJT09uY2UoYnVmZmVyLCB0cnVlKSkKLQkJCXJldHVybiB0cnVlOwotCi0JCS8qCi0JCSAq IFVuZm9ydHVuYXRlbHkgU3RhcnRCdWZmZXJJTygpIHJldHVybmluZyBmYWxzZSBkb2Vzbid0IGFs bG93IHRvCi0JCSAqIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIGJ1ZmZlciBhbHJlYWR5IGJlaW5n IHZhbGlkIGFuZCBJTyBhbHJlYWR5Ci0JCSAqIGJlaW5nIGluIHByb2dyZXNzLiBTaW5jZSBJTyBh bHJlYWR5IGJlaW5nIGluIHByb2dyZXNzIGlzIHF1aXRlCi0JCSAqIHJhcmUsIHRoaXMgYXBwcm9h Y2ggc2VlbXMgZmluZS4KLQkJICovCi0JCXBnYWlvX3N1Ym1pdF9zdGFnZWQoKTsKLQl9Ci0KLQly ZXR1cm4gUmVhZEJ1ZmZlcnNDYW5TdGFydElPT25jZShidWZmZXIsIG5vd2FpdCk7Ci19Ci0KIC8q CiAgKiBXZSB0cmFjayB2YXJpb3VzIHN0YXRzIHJlbGF0ZWQgdG8gYnVmZmVyIGhpdHMuIEJlY2F1 c2UgdGhpcyBpcyBkb25lIGluIGEKICAqIGZldyBzZXBhcmF0ZSBwbGFjZXMsIHRoaXMgaGVscGVy IGV4aXN0cyBmb3IgY29udmVuaWVuY2UuCkBAIC0xODA3LDcgKzE3ODMsNyBAQCBXYWl0UmVhZEJ1 ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbikKIAkJCSAqCiAJCQkgKiB3ZSBm aXJzdCBjaGVjayBpZiB3ZSBhbHJlYWR5IGtub3cgdGhlIElPIGlzIGNvbXBsZXRlLgogCQkJICov Ci0JCQlpZiAoYWlvX3JldC0+cmVzdWx0LnN0YXR1cyA9PSBQR0FJT19SU19VTktOT1dOICYmCisJ CQlpZiAoKG9wZXJhdGlvbi0+Zm9yZWlnbl9pbyB8fCBhaW9fcmV0LT5yZXN1bHQuc3RhdHVzID09 IFBHQUlPX1JTX1VOS05PV04pICYmCiAJCQkJIXBnYWlvX3dyZWZfY2hlY2tfZG9uZSgmb3BlcmF0 aW9uLT5pb193cmVmKSkKIAkJCXsKIAkJCQlpbnN0cl90aW1lCWlvX3N0YXJ0ID0gcGdzdGF0X3By ZXBhcmVfaW9fdGltZSh0cmFja19pb190aW1pbmcpOwpAQCAtMTgyNiwxMSArMTgwMiwzMyBAQCBX YWl0UmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbikKIAkJCQlBc3Nl cnQocGdhaW9fd3JlZl9jaGVja19kb25lKCZvcGVyYXRpb24tPmlvX3dyZWYpKTsKIAkJCX0KIAot CQkJLyoKLQkJCSAqIFdlIG5vdyBhcmUgc3VyZSB0aGUgSU8gY29tcGxldGVkLiBDaGVjayB0aGUg cmVzdWx0cy4gVGhpcwotCQkJICogaW5jbHVkZXMgcmVwb3J0aW5nIG9uIGVycm9ycyBpZiB0aGVy ZSB3ZXJlIGFueS4KLQkJCSAqLwotCQkJUHJvY2Vzc1JlYWRCdWZmZXJzUmVzdWx0KG9wZXJhdGlv bik7CisJCQlpZiAodW5saWtlbHkob3BlcmF0aW9uLT5mb3JlaWduX2lvKSkKKwkJCXsKKwkJCQlC dWZmZXIJCWJ1ZmZlciA9IG9wZXJhdGlvbi0+YnVmZmVyc1tvcGVyYXRpb24tPm5ibG9ja3NfZG9u ZV07CisJCQkJQnVmZmVyRGVzYyAqZGVzYyA9IEJ1ZmZlcklzTG9jYWwoYnVmZmVyKSA/CisJCQkJ CUdldExvY2FsQnVmZmVyRGVzY3JpcHRvcigtYnVmZmVyIC0gMSkgOgorCQkJCQlHZXRCdWZmZXJE ZXNjcmlwdG9yKGJ1ZmZlciAtIDEpOworCQkJCXVpbnQzMgkJYnVmX3N0YXRlID0gcGdfYXRvbWlj X3JlYWRfdTY0KCZkZXNjLT5zdGF0ZSk7CisKKwkJCQlpZiAoYnVmX3N0YXRlICYgQk1fVkFMSUQp CisJCQkJeworCQkJCQlvcGVyYXRpb24tPm5ibG9ja3NfZG9uZSArPSAxOworCQkJCQlBc3NlcnQo b3BlcmF0aW9uLT5uYmxvY2tzX2RvbmUgPD0gb3BlcmF0aW9uLT5uYmxvY2tzKTsKKworCQkJCQlQ cm9jZXNzQnVmZmVySGl0KG9wZXJhdGlvbi0+c3RyYXRlZ3ksCisJCQkJCQkJCQkgb3BlcmF0aW9u LT5yZWwsIG9wZXJhdGlvbi0+cGVyc2lzdGVuY2UsCisJCQkJCQkJCQkgb3BlcmF0aW9uLT5zbWdy LCBvcGVyYXRpb24tPmZvcmtudW0sCisJCQkJCQkJCQkgb3BlcmF0aW9uLT5ibG9ja251bSArIG9w ZXJhdGlvbi0+bmJsb2Nrc19kb25lKTsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJ LyoKKwkJCQkgKiBXZSBub3cgYXJlIHN1cmUgdGhlIElPIGNvbXBsZXRlZC4gQ2hlY2sgdGhlIHJl c3VsdHMuIFRoaXMKKwkJCQkgKiBpbmNsdWRlcyByZXBvcnRpbmcgb24gZXJyb3JzIGlmIHRoZXJl IHdlcmUgYW55LgorCQkJCSAqLworCQkJCVByb2Nlc3NSZWFkQnVmZmVyc1Jlc3VsdChvcGVyYXRp b24pOworCQkJfQogCQl9CiAKIAkJLyoKQEAgLTE4NjEsNiArMTg1OSwxNTkgQEAgV2FpdFJlYWRC dWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiAJLyogTkI6IFJFQURfRE9O RSB0cmFjZXBvaW50IHdhcyBhbHJlYWR5IGV4ZWN1dGVkIGluIGNvbXBsZXRpb24gY2FsbGJhY2sg Ki8KIH0KIAorLyoKKyAqIExvY2FsIHZlcnNpb24gb2YgUHJlcGFyZU5ld1JlYWRCdWZmZXJJTygp LiBIZXJlIGluc3RlYWQgb2YgbG9jYWxidWYuYyB0bworICogYXZvaWQgYW4gZXh0ZXJuYWwgZnVu Y3Rpb24gY2FsbC4KKyAqLworc3RhdGljIFByZXBhcmVSZWFkQnVmZmVyX1N0YXR1cworUHJlcGFy ZU5ld0xvY2FsUmVhZEJ1ZmZlcklPKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sCisJ CQkJCQkJQnVmZmVyIGJ1ZmZlcikKK3sKKwlCdWZmZXJEZXNjICpkZXNjID0gR2V0TG9jYWxCdWZm ZXJEZXNjcmlwdG9yKC1idWZmZXIgLSAxKTsKKwl1aW50NjQJCWJ1Zl9zdGF0ZSA9IHBnX2F0b21p Y19yZWFkX3U2NCgmZGVzYy0+c3RhdGUpOworCisJLyogQWxyZWFkeSB2YWxpZCwgbm8gd29yayB0 byBkbyAqLworCWlmIChidWZfc3RhdGUgJiBCTV9WQUxJRCkKKwl7CisJCXBnYWlvX3dyZWZfY2xl YXIoJm9wZXJhdGlvbi0+aW9fd3JlZik7CisJCXJldHVybiBSRUFEX0JVRkZFUl9BTFJFQURZX0RP TkU7CisJfQorCisJcGdhaW9fc3VibWl0X3N0YWdlZCgpOworCisJaWYgKHBnYWlvX3dyZWZfdmFs aWQoJmRlc2MtPmlvX3dyZWYpKQorCXsKKwkJb3BlcmF0aW9uLT5pb193cmVmID0gZGVzYy0+aW9f d3JlZjsKKwkJb3BlcmF0aW9uLT5mb3JlaWduX2lvID0gdHJ1ZTsKKwkJcmV0dXJuIFJFQURfQlVG RkVSX0lOX1BST0dSRVNTOworCX0KKworCXJldHVybiBSRUFEX0JVRkZFUl9SRUFEWV9GT1JfSU87 Cit9CisKKy8qCisgKiBUcnkgdG8gc3RhcnQgSU8gb24gdGhlIGZpcnN0IGJ1ZmZlciBpbiBhIG5l dyBydW4gb2YgYmxvY2tzLiBJZiBBSU8gaXMgaW4KKyAqIHByb2dyZXNzLCBiZSBpdCBpbiB0aGlz IGJhY2tlbmQgb3IgYW5vdGhlciBiYWNrZW5kLCB3ZSBqdXN0IGFzc29jaWF0ZSB0aGUKKyAqIHdh aXQgcmVmZXJlbmNlIHdpdGggdGhlIG9wZXJhdGlvbiBhbmQgd2FpdCBpbiBXYWl0UmVhZEJ1ZmZl cnMoKS4gVGhpcyB0dXJucworICogb3V0IHRvIGJlIGltcG9ydGFudCBmb3IgcGVyZm9ybWFuY2Ug aW4gdHdvIHdvcmtsb2FkczoKKyAqCisgKiAxKSBBIHJlYWQgc3RyZWFtIHRoYXQgaGFzIHRvIHJl YWQgdGhlIHNhbWUgYmxvY2sgbXVsdGlwbGUgdGltZXMgd2l0aGluIHRoZQorICogICAgcmVhZGFo ZWFkIGRpc3RhbmNlLiBUaGlzIGNhbiBoYXBwZW4gZS5nLiBmb3IgdGhlIHRhYmxlIGFjY2Vzc2Vz IG9mIGFuCisgKiAgICBpbmRleCBzY2FuLgorICoKKyAqIDIpIENvbmN1cnJlbnQgc2NhbnMgYnkg bXVsdGlwbGUgYmFja2VuZHMgb24gdGhlIHNhbWUgcmVsYXRpb24uCisgKgorICogSWYgd2Ugd2Vy ZSB0byBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHRoZSBpbi1wcm9ncmVzcyBJTywgd2UnZCBub3Qg YmUgYWJsZQorICogdG8ga2VlcCBlbm91Z2ggSS9PIGluIGZsaWdodC4KKyAqCisgKiBJZiB3ZSBk byBmaW5kIHRoZXJlIGlzIG9uZ29pbmcgSS9PIGZvciB0aGUgYnVmZmVyLCB3ZSBzZXQgdXAgYSAx LWJsb2NrCisgKiBSZWFkQnVmZmVyc09wZXJhdGlvbiB0aGF0IFdhaXRSZWFkQnVmZmVycyB0aGVu IGNhbiB3YWl0IG9uLgorICoKKyAqIEl0J3MgcG9zc2libGUgdGhhdCBhbm90aGVyIGJhY2tlbmQg aGFzIHN0YXJ0ZWQgSU8gb24gdGhlIGJ1ZmZlciBidXQgbm90IHlldAorICogc2V0IGl0cyB3YWl0 IHJlZmVyZW5jZS4gSW4gdGhpcyBjYXNlLCB3ZSBoYXZlIG5vIGNob2ljZSBidXQgdG8gd2FpdCBm b3IKKyAqIGVpdGhlciB0aGUgd2FpdCByZWZlcmVuY2UgdG8gYmUgdmFsaWQgb3IgdGhlIElPIHRv IGJlIGRvbmUuCisgKi8KK3N0YXRpYyBQcmVwYXJlUmVhZEJ1ZmZlcl9TdGF0dXMKK1ByZXBhcmVO ZXdSZWFkQnVmZmVySU8oUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwKKwkJCQkJICAg QnVmZmVyIGJ1ZmZlcikKK3sKKwl1aW50NjQJCWJ1Zl9zdGF0ZTsKKwlCdWZmZXJEZXNjICpkZXNj OworCisJaWYgKEJ1ZmZlcklzTG9jYWwoYnVmZmVyKSkKKwkJcmV0dXJuIFByZXBhcmVOZXdMb2Nh bFJlYWRCdWZmZXJJTyhvcGVyYXRpb24sIGJ1ZmZlcik7CisKKwlSZXNvdXJjZU93bmVyRW5sYXJn ZShDdXJyZW50UmVzb3VyY2VPd25lcik7CisJZGVzYyA9IEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVm ZmVyIC0gMSk7CisKKwlmb3IgKDs7KQorCXsKKwkJYnVmX3N0YXRlID0gTG9ja0J1ZkhkcihkZXNj KTsKKworCQkvKiBBbHJlYWR5IHZhbGlkLCBubyB3b3JrIHRvIGRvICovCisJCWlmIChidWZfc3Rh dGUgJiBCTV9WQUxJRCkKKwkJeworCQkJVW5sb2NrQnVmSGRyKGRlc2MpOworCQkJcGdhaW9fd3Jl Zl9jbGVhcigmb3BlcmF0aW9uLT5pb193cmVmKTsKKwkJCXJldHVybiBSRUFEX0JVRkZFUl9BTFJF QURZX0RPTkU7CisJCX0KKworCQlpZiAoYnVmX3N0YXRlICYgQk1fSU9fSU5fUFJPR1JFU1MpCisJ CXsKKwkJCS8qIEpvaW4gZXhpc3RpbmcgcmVhZCAqLworCQkJaWYgKHBnYWlvX3dyZWZfdmFsaWQo JmRlc2MtPmlvX3dyZWYpKQorCQkJeworCQkJCW9wZXJhdGlvbi0+aW9fd3JlZiA9IGRlc2MtPmlv X3dyZWY7CisJCQkJb3BlcmF0aW9uLT5mb3JlaWduX2lvID0gdHJ1ZTsKKwkJCQlVbmxvY2tCdWZI ZHIoZGVzYyk7CisJCQkJcmV0dXJuIFJFQURfQlVGRkVSX0lOX1BST0dSRVNTOworCQkJfQorCisJ CQkvKgorCQkJICogSWYgdGhlIHdhaXQgcmVmIGlzIG5vdCB2YWxpZCBidXQgdGhlIElPIGlzIGlu IHByb2dyZXNzLCBzb21lb25lCisJCQkgKiBlbHNlIHN0YXJ0ZWQgSU8gYnV0IGhhc24ndCBzZXQg dGhlIHdhaXQgcmVmIHlldC4gV2UgaGF2ZSBubworCQkJICogY2hvaWNlIGJ1dCB0byB3YWl0IHVu dGlsIHRoZSB3YWl0IHJlZiBpcyBzZXQgb3IgdGhlIElPCisJCQkgKiBjb21wbGV0ZXMuCisJCQkg Ki8KKwkJCVVubG9ja0J1ZkhkcihkZXNjKTsKKwkJCXBnYWlvX3N1Ym1pdF9zdGFnZWQoKTsKKwkJ CVdhaXRJTyhkZXNjKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogTm8gSU8gaW4g cHJvZ3Jlc3MgYW5kIG5vdCBhbHJlYWR5IHZhbGlkOyBXZSB3aWxsIHN0YXJ0IElPLiBJdCdzCisJ CSAqIHBvc3NpYmxlIHRoYXQgdGhlIElPIHdhcyBpbiBwcm9ncmVzcyBhbmQgbmV2ZXIgYmVjYW1l IHZhbGlkIGJlY2F1c2UKKwkJICogdGhlIElPIGVycm9yZWQgb3V0LiBXZSdsbCBkbyB0aGUgSU8g b3Vyc2VsdmVzLgorCQkgKi8KKwkJVW5sb2NrQnVmSGRyRXh0KGRlc2MsIGJ1Zl9zdGF0ZSwgQk1f SU9fSU5fUFJPR1JFU1MsIDAsIDApOworCQlSZXNvdXJjZU93bmVyUmVtZW1iZXJCdWZmZXJJTyhD dXJyZW50UmVzb3VyY2VPd25lciwKKwkJCQkJCQkJCSAgQnVmZmVyRGVzY3JpcHRvckdldEJ1ZmZl cihkZXNjKSk7CisKKwkJcmV0dXJuIFJFQURfQlVGRkVSX1JFQURZX0ZPUl9JTzsKKwl9Cit9CisK KworLyoKKyAqIFdoZW4gYnVpbGRpbmcgYSBuZXcgSU8gZnJvbSBtdWx0aXBsZSBidWZmZXJzLCB3 ZSB3b24ndCBpbmNsdWRlIGJ1ZmZlcnMKKyAqIHRoYXQgYXJlIGFscmVhZHkgdmFsaWQgb3IgYWxy ZWFkeSBpbiBwcm9ncmVzcy4gVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZQorICogdXNlZCBm b3IgYWRkaXRpb25hbCBhZGphY2VudCBidWZmZXJzIGZvbGxvd2luZyB0aGUgaGVhZCBidWZmZXIg aW4gYSBuZXcgSU8uCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBidWZmZXIgd2FzIHN1Y2Nl c3NmdWxseSBwcmVwYXJlZCBmb3IgSU8gYW5kIGZhbHNlIGlmIGl0CisgKiBpcyByZWplY3RlZCBh bmQgdGhlIHJlYWQgSU8gc2hvdWxkIG5vdCBpbmNsdWRlIHRoaXMgYnVmZmVyLgorKi8KK3N0YXRp YyBib29sCitQcmVwYXJlQWRkaXRpb25hbFJlYWRCdWZmZXIoQnVmZmVyIGJ1ZmZlcikKK3sKKwl1 aW50NjQJCWJ1Zl9zdGF0ZTsKKwlCdWZmZXJEZXNjICpkZXNjOworCisJaWYgKEJ1ZmZlcklzTG9j YWwoYnVmZmVyKSkKKwl7CisJCWRlc2MgPSBHZXRMb2NhbEJ1ZmZlckRlc2NyaXB0b3IoLWJ1ZmZl ciAtIDEpOworCQlidWZfc3RhdGUgPSBwZ19hdG9taWNfcmVhZF91NjQoJmRlc2MtPnN0YXRlKTsK KwkJLyogTG9jYWwgYnVmZmVycyBkb24ndCB1c2UgQk1fSU9fSU5fUFJPR1JFU1MgKi8KKwkJaWYg KGJ1Zl9zdGF0ZSAmIEJNX1ZBTElEIHx8IHBnYWlvX3dyZWZfdmFsaWQoJmRlc2MtPmlvX3dyZWYp KQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwllbHNlCisJeworCQlSZXNvdXJjZU93bmVyRW5sYXJn ZShDdXJyZW50UmVzb3VyY2VPd25lcik7CisJCWRlc2MgPSBHZXRCdWZmZXJEZXNjcmlwdG9yKGJ1 ZmZlciAtIDEpOworCQlidWZfc3RhdGUgPSBMb2NrQnVmSGRyKGRlc2MpOworCQlpZiAoYnVmX3N0 YXRlICYgKEJNX1ZBTElEIHwgQk1fSU9fSU5fUFJPR1JFU1MpKQorCQl7CisJCQlVbmxvY2tCdWZI ZHIoZGVzYyk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJVW5sb2NrQnVmSGRyRXh0KGRlc2Ms IGJ1Zl9zdGF0ZSwgQk1fSU9fSU5fUFJPR1JFU1MsIDAsIDApOworCQlSZXNvdXJjZU93bmVyUmVt ZW1iZXJCdWZmZXJJTyhDdXJyZW50UmVzb3VyY2VPd25lciwgYnVmZmVyKTsKKwl9CisKKwlyZXR1 cm4gdHJ1ZTsKK30KKwogLyoKICAqIEluaXRpYXRlIElPIGZvciB0aGUgUmVhZEJ1ZmZlcnNPcGVy YXRpb24KICAqCkBAIC0xODk0LDcgKzIwNDUsNzUgQEAgQXN5bmNSZWFkQnVmZmVycyhSZWFkQnVm ZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpCiAJdm9pZAkg ICAqaW9fcGFnZXNbTUFYX0lPX0NPTUJJTkVfTElNSVRdOwogCUlPQ29udGV4dAlpb19jb250ZXh0 OwogCUlPT2JqZWN0CWlvX29iamVjdDsKLQlib29sCQlkaWRfc3RhcnRfaW87CisJaW5zdHJfdGlt ZQlpb19zdGFydDsKKwlQcmVwYXJlUmVhZEJ1ZmZlcl9TdGF0dXMgc3RhdHVzOworCisJLyoKKwkg KiBXZSBtdXN0IGdldCBhbiBJTyBoYW5kbGUgYmVmb3JlIFN0YXJ0TmV3QnVmZmVyUmVhZElPKCks IGFzCisJICogcGdhaW9faW9fYWNxdWlyZSgpIG1pZ2h0IGJsb2NrLCB3aGljaCB3ZSBkb24ndCB3 YW50IGFmdGVyIHNldHRpbmcKKwkgKiBJT19JTl9QUk9HUkVTUy4gSWYgd2UgZG9uJ3QgbmVlZCB0 byBkbyB0aGUgSU8sIHdlJ2xsIHJlbGVhc2UgdGhlCisJICogaGFuZGxlLgorCSAqCisJICogSWYg d2UgbmVlZCB0byB3YWl0IGZvciBJTyBiZWZvcmUgd2UgY2FuIGdldCBhIGhhbmRsZSwgc3VibWl0 CisJICogYWxyZWFkeS1zdGFnZWQgSU8gZmlyc3QsIHNvIHRoYXQgb3RoZXIgYmFja2VuZHMgZG9u J3QgbmVlZCB0byB3YWl0LgorCSAqIFRoZXJlIHdvdWxkbid0IGJlIGEgZGVhZGxvY2sgcmlzaywg YXMgcGdhaW9faW9fYWNxdWlyZSgpIGp1c3QgbmVlZHMgdG8KKwkgKiB3YWl0IGZvciBhbHJlYWR5 IHN1Ym1pdHRlZCBJTywgd2hpY2ggZG9lc24ndCByZXF1aXJlIGFkZGl0aW9uYWwgbG9ja3MsCisJ ICogYnV0IGl0IGNvdWxkIHN0aWxsIGNhdXNlIHVuZGVzaXJhYmxlIHdhaXRzLgorCSAqCisJICog QSBzZWNvbmRhcnkgYmVuZWZpdCBpcyB0aGF0IHRoaXMgd291bGQgYWxsb3cgdXMgdG8gbWVhc3Vy ZSB0aGUgdGltZSBpbgorCSAqIHBnYWlvX2lvX2FjcXVpcmUoKSB3aXRob3V0IGNhdXNpbmcgdW5k dWUgdGltZXIgb3ZlcmhlYWQgaW4gdGhlIGNvbW1vbiwKKwkgKiBub24tYmxvY2tpbmcsIGNhc2Uu ICBIb3dldmVyLCBjdXJyZW50bHkgdGhlIHBnc3RhdHMgaW5mcmFzdHJ1Y3R1cmUKKwkgKiBkb2Vz bid0IHJlYWxseSBhbGxvdyB0aGF0LCBhcyBpdCBhKSBhc3NlcnRzIHRoYXQgYW4gb3BlcmF0aW9u IGNhbid0CisJICogaGF2ZSB0aW1lIHdpdGhvdXQgb3BlcmF0aW9ucyBiKSBkb2Vzbid0IGhhdmUg YW4gQVBJIHRvIHJlcG9ydAorCSAqICJhY2N1bXVsYXRlZCIgdGltZS4KKwkgKi8KKwlpb2ggPSBw Z2Fpb19pb19hY3F1aXJlX25iKEN1cnJlbnRSZXNvdXJjZU93bmVyLCAmb3BlcmF0aW9uLT5pb19y ZXR1cm4pOworCWlmICh1bmxpa2VseSghaW9oKSkKKwl7CisJCXBnYWlvX3N1Ym1pdF9zdGFnZWQo KTsKKwkJaW9oID0gcGdhaW9faW9fYWNxdWlyZShDdXJyZW50UmVzb3VyY2VPd25lciwgJm9wZXJh dGlvbi0+aW9fcmV0dXJuKTsKKwl9CisKKwlvcGVyYXRpb24tPmZvcmVpZ25faW8gPSBmYWxzZTsK KworCS8qIENoZWNrIGlmIHdlIGNhbiBzdGFydCBJTyBvbiB0aGUgZmlyc3QgdG8tYmUtcmVhZCBi dWZmZXIgKi8KKwlpZiAoKHN0YXR1cyA9IFByZXBhcmVOZXdSZWFkQnVmZmVySU8ob3BlcmF0aW9u LCBidWZmZXJzW25ibG9ja3NfZG9uZV0pKSA8CisJCVJFQURfQlVGRkVSX1JFQURZX0ZPUl9JTykK Kwl7CisJCXBnYWlvX2lvX3JlbGVhc2UoaW9oKTsKKwkJKm5ibG9ja3NfcHJvZ3Jlc3MgPSAxOwor CQlpZiAoc3RhdHVzID09IFJFQURfQlVGRkVSX0FMUkVBRFlfRE9ORSkKKwkJeworCQkJLyoKKwkJ CSAqIFNvbWVvbmUgZWxzZSBoYXMgYWxyZWFkeSBjb21wbGV0ZWQgdGhpcyBibG9jaywgd2UncmUg ZG9uZS4KKwkJCSAqCisJCQkgKiBXaGVuIElPIGlzIG5lY2Vzc2FyeSwgLT5uYmxvY2tzX2RvbmUg aXMgdXBkYXRlZCBpbgorCQkJICogUHJvY2Vzc1JlYWRCdWZmZXJzUmVzdWx0KCksIGJ1dCB0aGF0 IGlzIG5vdCBjYWxsZWQgaWYgbm8gSU8gaXMKKwkJCSAqIG5lY2Vzc2FyeS4gVGh1cyB1cGRhdGUg aGVyZS4KKwkJCSAqLworCQkJb3BlcmF0aW9uLT5uYmxvY2tzX2RvbmUgKz0gMTsKKwkJCUFzc2Vy dChvcGVyYXRpb24tPm5ibG9ja3NfZG9uZSA8PSBvcGVyYXRpb24tPm5ibG9ja3MpOworCisJCQkv KgorCQkJICogUmVwb3J0IGFuZCB0cmFjayB0aGlzIGFzIGEgJ2hpdCcgZm9yIHRoaXMgYmFja2Vu ZCwgZXZlbiB0aG91Z2gKKwkJCSAqIGl0IG11c3QgaGF2ZSBzdGFydGVkIG91dCBhcyBhIG1pc3Mg aW4gUGluQnVmZmVyRm9yQmxvY2soKS4gVGhlCisJCQkgKiBvdGhlciBiYWNrZW5kIHdpbGwgdHJh Y2sgdGhpcyBhcyBhICdyZWFkJy4KKwkJCSAqLworCQkJUHJvY2Vzc0J1ZmZlckhpdChvcGVyYXRp b24tPnN0cmF0ZWd5LAorCQkJCQkJCSBvcGVyYXRpb24tPnJlbCwgb3BlcmF0aW9uLT5wZXJzaXN0 ZW5jZSwKKwkJCQkJCQkgb3BlcmF0aW9uLT5zbWdyLCBvcGVyYXRpb24tPmZvcmtudW0sCisJCQkJ CQkJIG9wZXJhdGlvbi0+YmxvY2tudW0gKyBvcGVyYXRpb24tPm5ibG9ja3NfZG9uZSk7CisJCQly ZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKiBUaGUgSU8gaXMgYWxyZWFkeSBpbi1wcm9ncmVzcyAq LworCQlBc3NlcnQoc3RhdHVzID09IFJFQURfQlVGRkVSX0lOX1BST0dSRVNTKTsKKwkJQ2hlY2tS ZWFkQnVmZmVyc09wZXJhdGlvbihvcGVyYXRpb24sIGZhbHNlKTsKKwkJcmV0dXJuIHRydWU7CisJ fQorCisJLyogV2UgY2FuIHJlYWQgaW4gYXQgbGVhc3QgdGhlIGhlYWQgYnVmZmVyIC4gKi8KKwlB c3NlcnQoc3RhdHVzID09IFJFQURfQlVGRkVSX1JFQURZX0ZPUl9JTyk7CiAKIAkvKgogCSAqIFdo ZW4gdGhpcyBJTyBpcyBleGVjdXRlZCBzeW5jaHJvbm91c2x5LCBlaXRoZXIgYmVjYXVzZSB0aGUg Y2FsbGVyIHdpbGwKQEAgLTE5NDUsMTM4ICsyMTY0LDc0IEBAIEFzeW5jUmVhZEJ1ZmZlcnMoUmVh ZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwgaW50ICpuYmxvY2tzX3Byb2dyZXNzKQogCSAq LwogCXBnc3RhdF9wcmVwYXJlX3JlcG9ydF9jaGVja3N1bV9mYWlsdXJlKG9wZXJhdGlvbi0+c21n ci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkKTsKIAotCS8qCi0JICogR2V0IElPIGhhbmRs ZSBiZWZvcmUgUmVhZEJ1ZmZlcnNDYW5TdGFydElPKCksIGFzIHBnYWlvX2lvX2FjcXVpcmUoKQot CSAqIG1pZ2h0IGJsb2NrLCB3aGljaCB3ZSBkb24ndCB3YW50IGFmdGVyIHNldHRpbmcgSU9fSU5f UFJPR1JFU1MuCi0JICoKLQkgKiBJZiB3ZSBuZWVkIHRvIHdhaXQgZm9yIElPIGJlZm9yZSB3ZSBj YW4gZ2V0IGEgaGFuZGxlLCBzdWJtaXQKLQkgKiBhbHJlYWR5LXN0YWdlZCBJTyBmaXJzdCwgc28g dGhhdCBvdGhlciBiYWNrZW5kcyBkb24ndCBuZWVkIHRvIHdhaXQuCi0JICogVGhlcmUgd291bGRu J3QgYmUgYSBkZWFkbG9jayByaXNrLCBhcyBwZ2Fpb19pb19hY3F1aXJlKCkganVzdCBuZWVkcyB0 bwotCSAqIHdhaXQgZm9yIGFscmVhZHkgc3VibWl0dGVkIElPLCB3aGljaCBkb2Vzbid0IHJlcXVp cmUgYWRkaXRpb25hbCBsb2NrcywKLQkgKiBidXQgaXQgY291bGQgc3RpbGwgY2F1c2UgdW5kZXNp cmFibGUgd2FpdHMuCi0JICoKLQkgKiBBIHNlY29uZGFyeSBiZW5lZml0IGlzIHRoYXQgdGhpcyB3 b3VsZCBhbGxvdyB1cyB0byBtZWFzdXJlIHRoZSB0aW1lIGluCi0JICogcGdhaW9faW9fYWNxdWly ZSgpIHdpdGhvdXQgY2F1c2luZyB1bmR1ZSB0aW1lciBvdmVyaGVhZCBpbiB0aGUgY29tbW9uLAot CSAqIG5vbi1ibG9ja2luZywgY2FzZS4gIEhvd2V2ZXIsIGN1cnJlbnRseSB0aGUgcGdzdGF0cyBp bmZyYXN0cnVjdHVyZQotCSAqIGRvZXNuJ3QgcmVhbGx5IGFsbG93IHRoYXQsIGFzIGl0IGEpIGFz c2VydHMgdGhhdCBhbiBvcGVyYXRpb24gY2FuJ3QKLQkgKiBoYXZlIHRpbWUgd2l0aG91dCBvcGVy YXRpb25zIGIpIGRvZXNuJ3QgaGF2ZSBhbiBBUEkgdG8gcmVwb3J0Ci0JICogImFjY3VtdWxhdGVk IiB0aW1lLgotCSAqLwotCWlvaCA9IHBnYWlvX2lvX2FjcXVpcmVfbmIoQ3VycmVudFJlc291cmNl T3duZXIsICZvcGVyYXRpb24tPmlvX3JldHVybik7Ci0JaWYgKHVubGlrZWx5KCFpb2gpKQotCXsK LQkJcGdhaW9fc3VibWl0X3N0YWdlZCgpOwotCi0JCWlvaCA9IHBnYWlvX2lvX2FjcXVpcmUoQ3Vy cmVudFJlc291cmNlT3duZXIsICZvcGVyYXRpb24tPmlvX3JldHVybik7Ci0JfQorCUFzc2VydChp b19idWZmZXJzWzBdID09IGJ1ZmZlcnNbbmJsb2Nrc19kb25lXSk7CisJaW9fcGFnZXNbMF0gPSBC dWZmZXJHZXRCbG9jayhidWZmZXJzW25ibG9ja3NfZG9uZV0pOworCWlvX2J1ZmZlcnNfbGVuID0g MTsKIAogCS8qCi0JICogQ2hlY2sgaWYgd2UgY2FuIHN0YXJ0IElPIG9uIHRoZSBmaXJzdCB0by1i ZS1yZWFkIGJ1ZmZlci4KLQkgKgotCSAqIElmIGFuIEkvTyBpcyBhbHJlYWR5IGluIHByb2dyZXNz IGluIGFub3RoZXIgYmFja2VuZCwgd2Ugd2FudCB0byB3YWl0Ci0JICogZm9yIHRoZSBvdXRjb21l OiBlaXRoZXIgZG9uZSwgb3Igc29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHdlIHdpbGwKLQkgKiBy ZXRyeS4KKwkgKiBIb3cgbWFueSBuZWlnaGJvcmluZy1vbi1kaXNrIGJsb2NrcyBjYW4gd2Ugc2Nh dHRlci1yZWFkIGludG8gb3RoZXIKKwkgKiBidWZmZXJzIGF0IHRoZSBzYW1lIHRpbWU/ICBJbiB0 aGlzIGNhc2Ugd2UgZG9uJ3Qgd2FpdCBpZiB3ZSBzZWUgYW4gSS9PCisJICogYWxyZWFkeSBpbiBw cm9ncmVzcy4gIFdlIGFscmVhZHkgc2V0IEJNX0lPX0lOX1BST0dSRVNTIGZvciB0aGUgaGVhZAor CSAqIGJsb2NrLCBzbyB3ZSBzaG91bGQgZ2V0IG9uIHdpdGggdGhhdCBJL08gYXMgc29vbiBhcyBw b3NzaWJsZS4KIAkgKi8KLQlpZiAoIVJlYWRCdWZmZXJzQ2FuU3RhcnRJTyhidWZmZXJzW25ibG9j a3NfZG9uZV0sIGZhbHNlKSkKKwlmb3IgKGludCBpID0gbmJsb2Nrc19kb25lICsgMTsgaSA8IG9w ZXJhdGlvbi0+bmJsb2NrczsgaSsrKQogCXsKLQkJLyoKLQkJICogU29tZW9uZSBlbHNlIGhhcyBh bHJlYWR5IGNvbXBsZXRlZCB0aGlzIGJsb2NrLCB3ZSdyZSBkb25lLgotCQkgKgotCQkgKiBXaGVu IElPIGlzIG5lY2Vzc2FyeSwgLT5uYmxvY2tzX2RvbmUgaXMgdXBkYXRlZCBpbgotCQkgKiBQcm9j ZXNzUmVhZEJ1ZmZlcnNSZXN1bHQoKSwgYnV0IHRoYXQgaXMgbm90IGNhbGxlZCBpZiBubyBJTyBp cwotCQkgKiBuZWNlc3NhcnkuIFRodXMgdXBkYXRlIGhlcmUuCi0JCSAqLwotCQlvcGVyYXRpb24t Pm5ibG9ja3NfZG9uZSArPSAxOwotCQkqbmJsb2Nrc19wcm9ncmVzcyA9IDE7CisJCWlmICghUHJl cGFyZUFkZGl0aW9uYWxSZWFkQnVmZmVyKGJ1ZmZlcnNbaV0pKQorCQkJYnJlYWs7CisJCS8qIE11 c3QgYmUgY29uc2VjdXRpdmUgYmxvY2sgbnVtYmVycy4gKi8KKwkJQXNzZXJ0KEJ1ZmZlckdldEJs b2NrTnVtYmVyKGJ1ZmZlcnNbaSAtIDFdKSA9PQorCQkJICAgQnVmZmVyR2V0QmxvY2tOdW1iZXIo YnVmZmVyc1tpXSkgLSAxKTsKKwkJQXNzZXJ0KGlvX2J1ZmZlcnNbaW9fYnVmZmVyc19sZW5dID09 IGJ1ZmZlcnNbaV0pOwogCi0JCXBnYWlvX2lvX3JlbGVhc2UoaW9oKTsKLQkJcGdhaW9fd3JlZl9j bGVhcigmb3BlcmF0aW9uLT5pb193cmVmKTsKLQkJZGlkX3N0YXJ0X2lvID0gZmFsc2U7Ci0KLQkJ LyoKLQkJICogUmVwb3J0IGFuZCB0cmFjayB0aGlzIGFzIGEgJ2hpdCcgZm9yIHRoaXMgYmFja2Vu ZCwgZXZlbiB0aG91Z2ggaXQKLQkJICogbXVzdCBoYXZlIHN0YXJ0ZWQgb3V0IGFzIGEgbWlzcyBp biBQaW5CdWZmZXJGb3JCbG9jaygpLiBUaGUgb3RoZXIKLQkJICogYmFja2VuZCB3aWxsIHRyYWNr IHRoaXMgYXMgYSAncmVhZCcuCi0JCSAqLwotCQlQcm9jZXNzQnVmZmVySGl0KG9wZXJhdGlvbi0+ c3RyYXRlZ3ksIG9wZXJhdGlvbi0+cmVsLCBwZXJzaXN0ZW5jZSwKLQkJCQkJCSBvcGVyYXRpb24t PnNtZ3IsIGZvcmtudW0sCi0JCQkJCQkgYmxvY2tudW0gKyBvcGVyYXRpb24tPm5ibG9ja3NfZG9u ZSk7CisJCWlvX3BhZ2VzW2lvX2J1ZmZlcnNfbGVuKytdID0gQnVmZmVyR2V0QmxvY2soYnVmZmVy c1tpXSk7CiAJfQorCisJLyogZ2V0IGEgcmVmZXJlbmNlIHRvIHdhaXQgZm9yIGluIFdhaXRSZWFk QnVmZmVycygpICovCisJcGdhaW9faW9fZ2V0X3dyZWYoaW9oLCAmb3BlcmF0aW9uLT5pb193cmVm KTsKKworCS8qIHByb3ZpZGUgdGhlIGxpc3Qgb2YgYnVmZmVycyB0byB0aGUgY29tcGxldGlvbiBj YWxsYmFja3MgKi8KKwlwZ2Fpb19pb19zZXRfaGFuZGxlX2RhdGFfMzIoaW9oLCAodWludDMyICop IGlvX2J1ZmZlcnMsIGlvX2J1ZmZlcnNfbGVuKTsKKworCXBnYWlvX2lvX3JlZ2lzdGVyX2NhbGxi YWNrcyhpb2gsCisJCQkJCQkJCXBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVAgPwor CQkJCQkJCQlQR0FJT19IQ0JfTE9DQUxfQlVGRkVSX1JFQURWIDoKKwkJCQkJCQkJUEdBSU9fSENC X1NIQVJFRF9CVUZGRVJfUkVBRFYsCisJCQkJCQkJCWZsYWdzKTsKKworCXBnYWlvX2lvX3NldF9m bGFnKGlvaCwgaW9oX2ZsYWdzKTsKKworCS8qIC0tLQorCSogRXZlbiB0aG91Z2ggd2UncmUgdHJ5 aW5nIHRvIGlzc3VlIElPIGFzeW5jaHJvbm91c2x5LCB0cmFjayB0aGUgdGltZQorCSogaW4gc21n cnN0YXJ0cmVhZHYoKToKKwkqIC0gaWYgaW9fbWV0aG9kID09IElPTUVUSE9EX1NZTkMsIHdlIHdp bGwgYWx3YXlzIHBlcmZvcm0gdGhlIElPCisJKiAgIGltbWVkaWF0ZWx5CisJKiAtIHRoZSBpbyBt ZXRob2QgbWlnaHQgbm90IHN1cHBvcnQgdGhlIElPIChlLmcuIHdvcmtlciBJTyBmb3IgYSB0ZW1w CisJKiAgIHRhYmxlKQorCSogLS0tCisJKi8KKwlpb19zdGFydCA9IHBnc3RhdF9wcmVwYXJlX2lv X3RpbWUodHJhY2tfaW9fdGltaW5nKTsKKwlzbWdyc3RhcnRyZWFkdihpb2gsIG9wZXJhdGlvbi0+ c21nciwgZm9ya251bSwKKwkJCQkgICBibG9ja251bSArIG5ibG9ja3NfZG9uZSwKKwkJCQkgICBp b19wYWdlcywgaW9fYnVmZmVyc19sZW4pOworCXBnc3RhdF9jb3VudF9pb19vcF90aW1lKGlvX29i amVjdCwgaW9fY29udGV4dCwgSU9PUF9SRUFELAorCQkJCQkJCWlvX3N0YXJ0LCAxLCBpb19idWZm ZXJzX2xlbiAqIEJMQ0tTWik7CisKKwlpZiAocGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0Vf VEVNUCkKKwkJcGdCdWZmZXJVc2FnZS5sb2NhbF9ibGtzX3JlYWQgKz0gaW9fYnVmZmVyc19sZW47 CiAJZWxzZQotCXsKLQkJaW5zdHJfdGltZQlpb19zdGFydDsKKwkJcGdCdWZmZXJVc2FnZS5zaGFy ZWRfYmxrc19yZWFkICs9IGlvX2J1ZmZlcnNfbGVuOwogCi0JCS8qIFdlIGZvdW5kIGEgYnVmZmVy IHRoYXQgd2UgbmVlZCB0byByZWFkIGluLiAqLwotCQlBc3NlcnQoaW9fYnVmZmVyc1swXSA9PSBi dWZmZXJzW25ibG9ja3NfZG9uZV0pOwotCQlpb19wYWdlc1swXSA9IEJ1ZmZlckdldEJsb2NrKGJ1 ZmZlcnNbbmJsb2Nrc19kb25lXSk7Ci0JCWlvX2J1ZmZlcnNfbGVuID0gMTsKKwkvKgorCSAqIFRy YWNrIHZhY3V1bSBjb3N0IHdoZW4gaXNzdWluZyBJTywgbm90IGFmdGVyIHdhaXRpbmcgZm9yIGl0 LiBPdGhlcndpc2UKKwkgKiB3ZSBjb3VsZCBlbmQgdXAgaXNzdWluZyBhIGxvdCBvZiBJTyBpbiBh IHNob3J0IHRpbWVzcGFuLCBkZXNwaXRlIGEgbG93CisJICogY29zdCBsaW1pdC4KKwkgKi8KKwlp ZiAoVmFjdXVtQ29zdEFjdGl2ZSkKKwkJVmFjdXVtQ29zdEJhbGFuY2UgKz0gVmFjdXVtQ29zdFBh Z2VNaXNzICogaW9fYnVmZmVyc19sZW47CiAKLQkJLyoKLQkJICogSG93IG1hbnkgbmVpZ2hib3Jp bmctb24tZGlzayBibG9ja3MgY2FuIHdlIHNjYXR0ZXItcmVhZCBpbnRvIG90aGVyCi0JCSAqIGJ1 ZmZlcnMgYXQgdGhlIHNhbWUgdGltZT8gIEluIHRoaXMgY2FzZSB3ZSBkb24ndCB3YWl0IGlmIHdl IHNlZSBhbgotCQkgKiBJL08gYWxyZWFkeSBpbiBwcm9ncmVzcy4gIFdlIGFscmVhZHkgc2V0IEJN X0lPX0lOX1BST0dSRVNTIGZvciB0aGUKLQkJICogaGVhZCBibG9jaywgc28gd2Ugc2hvdWxkIGdl dCBvbiB3aXRoIHRoYXQgSS9PIGFzIHNvb24gYXMgcG9zc2libGUuCi0JCSAqLwotCQlmb3IgKGlu dCBpID0gbmJsb2Nrc19kb25lICsgMTsgaSA8IG9wZXJhdGlvbi0+bmJsb2NrczsgaSsrKQotCQl7 Ci0JCQlpZiAoIVJlYWRCdWZmZXJzQ2FuU3RhcnRJTyhidWZmZXJzW2ldLCB0cnVlKSkKLQkJCQli cmVhazsKLQkJCS8qIE11c3QgYmUgY29uc2VjdXRpdmUgYmxvY2sgbnVtYmVycy4gKi8KLQkJCUFz c2VydChCdWZmZXJHZXRCbG9ja051bWJlcihidWZmZXJzW2kgLSAxXSkgPT0KLQkJCQkgICBCdWZm ZXJHZXRCbG9ja051bWJlcihidWZmZXJzW2ldKSAtIDEpOwotCQkJQXNzZXJ0KGlvX2J1ZmZlcnNb aW9fYnVmZmVyc19sZW5dID09IGJ1ZmZlcnNbaV0pOworCSpuYmxvY2tzX3Byb2dyZXNzID0gaW9f YnVmZmVyc19sZW47CiAKLQkJCWlvX3BhZ2VzW2lvX2J1ZmZlcnNfbGVuKytdID0gQnVmZmVyR2V0 QmxvY2soYnVmZmVyc1tpXSk7Ci0JCX0KLQotCQkvKiBnZXQgYSByZWZlcmVuY2UgdG8gd2FpdCBm b3IgaW4gV2FpdFJlYWRCdWZmZXJzKCkgKi8KLQkJcGdhaW9faW9fZ2V0X3dyZWYoaW9oLCAmb3Bl cmF0aW9uLT5pb193cmVmKTsKLQotCQkvKiBwcm92aWRlIHRoZSBsaXN0IG9mIGJ1ZmZlcnMgdG8g dGhlIGNvbXBsZXRpb24gY2FsbGJhY2tzICovCi0JCXBnYWlvX2lvX3NldF9oYW5kbGVfZGF0YV8z Mihpb2gsICh1aW50MzIgKikgaW9fYnVmZmVycywgaW9fYnVmZmVyc19sZW4pOwotCi0JCXBnYWlv X2lvX3JlZ2lzdGVyX2NhbGxiYWNrcyhpb2gsCi0JCQkJCQkJCQlwZXJzaXN0ZW5jZSA9PSBSRUxQ RVJTSVNURU5DRV9URU1QID8KLQkJCQkJCQkJCVBHQUlPX0hDQl9MT0NBTF9CVUZGRVJfUkVBRFYg OgotCQkJCQkJCQkJUEdBSU9fSENCX1NIQVJFRF9CVUZGRVJfUkVBRFYsCi0JCQkJCQkJCQlmbGFn cyk7Ci0KLQkJcGdhaW9faW9fc2V0X2ZsYWcoaW9oLCBpb2hfZmxhZ3MpOwotCi0JCS8qIC0tLQot CQkgKiBFdmVuIHRob3VnaCB3ZSdyZSB0cnlpbmcgdG8gaXNzdWUgSU8gYXN5bmNocm9ub3VzbHks IHRyYWNrIHRoZSB0aW1lCi0JCSAqIGluIHNtZ3JzdGFydHJlYWR2KCk6Ci0JCSAqIC0gaWYgaW9f bWV0aG9kID09IElPTUVUSE9EX1NZTkMsIHdlIHdpbGwgYWx3YXlzIHBlcmZvcm0gdGhlIElPCi0J CSAqICAgaW1tZWRpYXRlbHkKLQkJICogLSB0aGUgaW8gbWV0aG9kIG1pZ2h0IG5vdCBzdXBwb3J0 IHRoZSBJTyAoZS5nLiB3b3JrZXIgSU8gZm9yIGEgdGVtcAotCQkgKiAgIHRhYmxlKQotCQkgKiAt LS0KLQkJICovCi0JCWlvX3N0YXJ0ID0gcGdzdGF0X3ByZXBhcmVfaW9fdGltZSh0cmFja19pb190 aW1pbmcpOwotCQlzbWdyc3RhcnRyZWFkdihpb2gsIG9wZXJhdGlvbi0+c21nciwgZm9ya251bSwK LQkJCQkJICAgYmxvY2tudW0gKyBuYmxvY2tzX2RvbmUsCi0JCQkJCSAgIGlvX3BhZ2VzLCBpb19i dWZmZXJzX2xlbik7Ci0JCXBnc3RhdF9jb3VudF9pb19vcF90aW1lKGlvX29iamVjdCwgaW9fY29u dGV4dCwgSU9PUF9SRUFELAotCQkJCQkJCQlpb19zdGFydCwgMSwgaW9fYnVmZmVyc19sZW4gKiBC TENLU1opOwotCi0JCWlmIChwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQotCQkJ cGdCdWZmZXJVc2FnZS5sb2NhbF9ibGtzX3JlYWQgKz0gaW9fYnVmZmVyc19sZW47Ci0JCWVsc2UK LQkJCXBnQnVmZmVyVXNhZ2Uuc2hhcmVkX2Jsa3NfcmVhZCArPSBpb19idWZmZXJzX2xlbjsKLQot CQkvKgotCQkgKiBUcmFjayB2YWN1dW0gY29zdCB3aGVuIGlzc3VpbmcgSU8sIG5vdCBhZnRlciB3 YWl0aW5nIGZvciBpdC4KLQkJICogT3RoZXJ3aXNlIHdlIGNvdWxkIGVuZCB1cCBpc3N1aW5nIGEg bG90IG9mIElPIGluIGEgc2hvcnQgdGltZXNwYW4sCi0JCSAqIGRlc3BpdGUgYSBsb3cgY29zdCBs aW1pdC4KLQkJICovCi0JCWlmIChWYWN1dW1Db3N0QWN0aXZlKQotCQkJVmFjdXVtQ29zdEJhbGFu Y2UgKz0gVmFjdXVtQ29zdFBhZ2VNaXNzICogaW9fYnVmZmVyc19sZW47Ci0KLQkJKm5ibG9ja3Nf cHJvZ3Jlc3MgPSBpb19idWZmZXJzX2xlbjsKLQkJZGlkX3N0YXJ0X2lvID0gdHJ1ZTsKLQl9Ci0K LQlyZXR1cm4gZGlkX3N0YXJ0X2lvOworCXJldHVybiB0cnVlOwogfQogCiAvKgpkaWZmIC0tZ2l0 IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdAppbmRleCBiYTUyY2Y1MDIuLjFhMGY5ZWE2MCAxMDA2NDQKLS0tIGEvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QKQEAgLTIzNDYsNiArMjM0Niw3IEBAIFByZWRpY2F0ZUxvY2tEYXRhCiBQcmVk aWNhdGVMb2NrVGFyZ2V0VHlwZQogUHJlZmV0Y2hCdWZmZXJSZXN1bHQKIFByZXBQYXJhbGxlbFJl c3RvcmVQdHJUeXBlCitQcmVwYXJlUmVhZEJ1ZmZlcl9TdGF0dXMKIFByZXBhcmVTdG10CiBQcmVw YXJlZFN0YXRlbWVudAogUHJlc29ydGVkS2V5RGF0YQotLSAKMi41MS4wCgo= --000000000000a2454a064b95d983 Content-Type: application/x-patch; name="v11-0001-Extract-fake-LSN-infrastructure-from-GiST-index-.patch" Content-Disposition: attachment; filename="v11-0001-Extract-fake-LSN-infrastructure-from-GiST-index-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm0x5og20 RnJvbSBiZjA5NzU4MmU3MzBjMGYwZTdjMDQ4MTM5ZDVmMzBjMjk3MWFmOTRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMTggSmFuIDIwMjYgMTE6MTg6MTEgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMSAwMS8xMl0g RXh0cmFjdCBmYWtlIExTTiBpbmZyYXN0cnVjdHVyZSBmcm9tIEdpU1QgaW5kZXggQU0uCgpFeHRy YWN0IHV0aWxpdHkgZnVuY3Rpb25zIHVzZWQgYnkgR2lTVCB0byBnZW5lcmF0ZSBmYWtlIExTTnMg c28gdGhhdApvdGhlciBpbmRleCBBTXMgY2FuIHJldXNlIHRoaXMgaW5mcmFzdHJ1Y3R1cmUgdG8g Z2VuZXJhdGUgZmFrZSBMU05zLgoKUHJlcGFyYXRpb24gZm9yIGFuIHVwY29taW5nIGNvbW1pdCB0 aGF0IHdpbGwgY2hhbmdlIHRoZSBydWxlcyBhcm91bmQKaG9sZGluZyBvbiB0byBidWZmZXIgcGlu cyBvbiBsZWFmIHBhZ2VzIGluIHVubG9nZ2VkIG5idHJlZSBpbmRleGVzCihhY3R1YWxseSwgaW4g YWxsIGNhc2VzIGJhcnJpbmcgc2NhbnMgdGhhdCB1c2UgYSBub24tTVZDQyBzbmFwc2hvdCkuClRo aXMgaXMgdGhlIHBhdGNoIHRoYXQgd2lsbCBhZGQgdGhlIG5ldyBhbWdldGJhdGNoIGludGVyZmFj ZS4gIEFub3RoZXIKcHJlcGFyYXRvcnkgY29tbWl0IHdpbGwgYWRkIGZha2UgTFNOIHN1cHBvcnQg dG8gbmJ0cmVlIGFoZWFkIG9mIHRoZQphbWdldGJhdGNoIGNvbW1pdC4KCkJ1bXAgWExPR19QQUdF X01BR0lDIGR1ZSB0byBYTE9HX0dJU1RfQVNTSUdOX0xTTiBiZWNvbWluZwpYTE9HX0FTU0lHTl9M U04uCgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KRGlzY3Vzc2lvbjogaHR0 cHM6Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6a2VodWh4eXVBOHF1YzdyUk4zRXROWHBpS3NqUGZPOG1o YiswRHIySzBEdGdAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdF9w cml2YXRlLmggICAgICAgfCAgNCAtLQogc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3R4bG9nLmggICAg ICAgICAgIHwgIDIgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy94bG9nLmggICAgICAgICAgICAgICB8 ICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy94bG9naW5zZXJ0LmggICAgICAgICB8ICAyICsKIHNy Yy9pbmNsdWRlL2NhdGFsb2cvcGdfY29udHJvbC5oICAgICAgICB8ICAyICstCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvZ2lzdC9naXN0LmMgICAgICAgICAgfCAgNiArLS0KIHNyYy9iYWNrZW5kL2FjY2Vz cy9naXN0L2dpc3R1dGlsLmMgICAgICB8IDUwIC0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9naXN0L2dpc3R2YWN1dW0uYyAgICB8ICA4ICstLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2dpc3QvZ2lzdHhsb2cuYyAgICAgIHwgMjEgLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vz cy9ybWdyZGVzYy9naXN0ZGVzYy5jICB8ICA2IC0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3Jk ZXNjL3hsb2dkZXNjLmMgIHwgIDcgKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9n LmMgICAgICAgfCAyOSArKysrKysrKysrKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxv Z2luc2VydC5jIHwgNjYgKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmbWdyLmMgICAgIHwgMTQgKysrLS0tCiAxNCBmaWxlcyBjaGFuZ2VkLCAx MjEgaW5zZXJ0aW9ucygrKSwgOTcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvYWNjZXNzL2dpc3RfcHJpdmF0ZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3RfcHJpdmF0 ZS5oCmluZGV4IDU1MmY2MDVjMC4uNDQ1MTRmMWNiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9h Y2Nlc3MvZ2lzdF9wcml2YXRlLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3RfcHJpdmF0 ZS5oCkBAIC00NTcsOCArNDU3LDYgQEAgZXh0ZXJuIFhMb2dSZWNQdHIgZ2lzdFhMb2dTcGxpdChi b29sIHBhZ2VfaXNfbGVhZiwKIAkJCQkJCQkJQmxvY2tOdW1iZXIgb3JpZ3JsaW5rLCBHaXN0TlNO IG9yaWduc24sCiAJCQkJCQkJCUJ1ZmZlciBsZWZ0Y2hpbGRidWYsIGJvb2wgbWFya2ZvbGxvd3Jp Z2h0KTsKIAotZXh0ZXJuIFhMb2dSZWNQdHIgZ2lzdFhMb2dBc3NpZ25MU04odm9pZCk7Ci0KIC8q IGdpc3RnZXQuYyAqLwogZXh0ZXJuIGJvb2wgZ2lzdGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIpOwogZXh0ZXJuIGludDY0IGdpc3RnZXRiaXRtYXAoSW5kZXhT Y2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSk7CkBAIC01MzEsOCArNTI5LDYgQEAgZXh0ZXJu IHZvaWQgZ2lzdE1ha2VVbmlvbktleShHSVNUU1RBVEUgKmdpc3RzdGF0ZSwgaW50IGF0dG5vLAog CQkJCQkJCSBHSVNURU5UUlkgKmVudHJ5MiwgYm9vbCBpc251bGwyLAogCQkJCQkJCSBEYXR1bSAq ZHN0LCBib29sICpkc3Rpc251bGwpOwogCi1leHRlcm4gWExvZ1JlY1B0ciBnaXN0R2V0RmFrZUxT TihSZWxhdGlvbiByZWwpOwotCiAvKiBnaXN0dmFjdXVtLmMgKi8KIGV4dGVybiBJbmRleEJ1bGtE ZWxldGVSZXN1bHQgKmdpc3RidWxrZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKIAkJCQkJ CQkJCQkJIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMsCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9hY2Nlc3MvZ2lzdHhsb2cuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9naXN0eGxvZy5oCmlu ZGV4IGQzZDFjNjU0OS4uMWMyY2Y2ZTgxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv Z2lzdHhsb2cuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdHhsb2cuaApAQCAtMjYsNyAr MjYsNyBAQAogIC8qICNkZWZpbmUgWExPR19HSVNUX0lOU0VSVF9DT01QTEVURQkgMHg0MCAqLwkv KiBub3QgdXNlZCBhbnltb3JlICovCiAgLyogI2RlZmluZSBYTE9HX0dJU1RfQ1JFQVRFX0lOREVY CQkgMHg1MCAqLwkvKiBub3QgdXNlZCBhbnltb3JlICovCiAjZGVmaW5lIFhMT0dfR0lTVF9QQUdF X0RFTEVURQkJMHg2MAotI2RlZmluZSBYTE9HX0dJU1RfQVNTSUdOX0xTTgkJMHg3MAkvKiBub3As IGFzc2lnbiBuZXcgTFNOICovCisgLyogI2RlZmluZSBYTE9HX0dJU1RfQVNTSUdOX0xTTgkJIDB4 NzAgKi8JLyogbm90IHVzZWQgYW55bW9yZSAqLwogCiAvKgogICogQmFja3VwIEJsayAwOiB1cGRh dGVkIHBhZ2UuCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5oIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL3hsb2cuaAppbmRleCBmZGZiNTcyNDYuLjU1M2Q2ZmM5YyAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxv Zy5oCkBAIC0yNTgsNiArMjU4LDcgQEAgZXh0ZXJuIGJvb2wgQ3JlYXRlUmVzdGFydFBvaW50KGlu dCBmbGFncyk7CiBleHRlcm4gV0FMQXZhaWxhYmlsaXR5IEdldFdBTEF2YWlsYWJpbGl0eShYTG9n UmVjUHRyIHRhcmdldExTTik7CiBleHRlcm4gdm9pZCBYTG9nUHV0TmV4dE9pZChPaWQgbmV4dE9p ZCk7CiBleHRlcm4gWExvZ1JlY1B0ciBYTG9nUmVzdG9yZVBvaW50KGNvbnN0IGNoYXIgKnJwTmFt ZSk7CitleHRlcm4gWExvZ1JlY1B0ciBYTG9nQXNzaWduTFNOKHZvaWQpOwogZXh0ZXJuIHZvaWQg VXBkYXRlRnVsbFBhZ2VXcml0ZXModm9pZCk7CiBleHRlcm4gdm9pZCBHZXRGdWxsUGFnZVdyaXRl SW5mbyhYTG9nUmVjUHRyICpSZWRvUmVjUHRyX3AsIGJvb2wgKmRvUGFnZVdyaXRlc19wKTsKIGV4 dGVybiBYTG9nUmVjUHRyIEdldFJlZG9SZWNQdHIodm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9hY2Nlc3MveGxvZ2luc2VydC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dpbnNlcnQu aAppbmRleCAxNmViYzc2ZTcuLjkxZGZiZDU2MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNj ZXNzL3hsb2dpbnNlcnQuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ2luc2VydC5oCkBA IC02NCw2ICs2NCw4IEBAIGV4dGVybiB2b2lkIGxvZ19uZXdwYWdlX3JhbmdlKFJlbGF0aW9uIHJl bCwgRm9ya051bWJlciBmb3JrbnVtLAogCQkJCQkJCSAgQmxvY2tOdW1iZXIgc3RhcnRibGssIEJs b2NrTnVtYmVyIGVuZGJsaywgYm9vbCBwYWdlX3N0ZCk7CiBleHRlcm4gWExvZ1JlY1B0ciBYTG9n U2F2ZUJ1ZmZlckZvckhpbnQoQnVmZmVyIGJ1ZmZlciwgYm9vbCBidWZmZXJfc3RkKTsKIAorZXh0 ZXJuIFhMb2dSZWNQdHIgWExvZ0dldEZha2VMU04oUmVsYXRpb24gcmVsKTsKKwogZXh0ZXJuIHZv aWQgSW5pdFhMb2dJbnNlcnQodm9pZCk7CiAKICNlbmRpZgkJCQkJCQkvKiBYTE9HSU5TRVJUX0gg Ki8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfY29udHJvbC5oIGIvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19jb250cm9sLmgKaW5kZXggNzUwM2RiMWFmLi43N2E2NjFlODEgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfY29udHJvbC5oCisrKyBiL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfY29udHJvbC5oCkBAIC03OCw3ICs3OCw3IEBAIHR5cGVkZWYgc3RydWN0 IENoZWNrUG9pbnQKICNkZWZpbmUgWExPR19FTkRfT0ZfUkVDT1ZFUlkJCQkweDkwCiAjZGVmaW5l IFhMT0dfRlBJX0ZPUl9ISU5UCQkJCTB4QTAKICNkZWZpbmUgWExPR19GUEkJCQkJCQkweEIwCi0v KiAweEMwIGlzIHVzZWQgaW4gUG9zdGdyZXMgOS41LTExICovCisjZGVmaW5lIFhMT0dfQVNTSUdO X0xTTgkJCQkJMHhDMAogI2RlZmluZSBYTE9HX09WRVJXUklURV9DT05UUkVDT1JECQkweEQwCiAj ZGVmaW5lIFhMT0dfQ0hFQ0tQT0lOVF9SRURPCQkJMHhFMAogI2RlZmluZSBYTE9HX0xPR0lDQUxf REVDT0RJTkdfU1RBVFVTX0NIQU5HRQkweEYwCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvZ2lzdC9naXN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKaW5kZXggZGZm ZmNlM2UzLi44NTY1ZTIyNWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dp c3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKQEAgLTUxNyw3ICs1MTcs NyBAQCBnaXN0cGxhY2V0b3BhZ2UoUmVsYXRpb24gcmVsLCBTaXplIGZyZWVzcGFjZSwgR0lTVFNU QVRFICpnaXN0c3RhdGUsCiAJCQkJCQkJCQkgICBkaXN0LCBvbGRybGluaywgb2xkbnNuLCBsZWZ0 Y2hpbGRidWYsCiAJCQkJCQkJCQkgICBtYXJrZm9sbG93cmlnaHQpOwogCQkJZWxzZQotCQkJCXJl Y3B0ciA9IGdpc3RHZXRGYWtlTFNOKHJlbCk7CisJCQkJcmVjcHRyID0gWExvZ0dldEZha2VMU04o cmVsKTsKIAkJfQogCiAJCWZvciAocHRyID0gZGlzdDsgcHRyOyBwdHIgPSBwdHItPm5leHQpCkBA IC01OTQsNyArNTk0LDcgQEAgZ2lzdHBsYWNldG9wYWdlKFJlbGF0aW9uIHJlbCwgU2l6ZSBmcmVl c3BhY2UsIEdJU1RTVEFURSAqZ2lzdHN0YXRlLAogCQkJCQkJCQkJCWxlZnRjaGlsZGJ1Zik7CiAJ CQl9CiAJCQllbHNlCi0JCQkJcmVjcHRyID0gZ2lzdEdldEZha2VMU04ocmVsKTsKKwkJCQlyZWNw dHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOwogCQl9CiAJCVBhZ2VTZXRMU04ocGFnZSwgcmVjcHRy KTsKIApAQCAtMTczMyw3ICsxNzMzLDcgQEAgZ2lzdHBydW5lcGFnZShSZWxhdGlvbiByZWwsIFBh Z2UgcGFnZSwgQnVmZmVyIGJ1ZmZlciwgUmVsYXRpb24gaGVhcFJlbCkKIAkJCVBhZ2VTZXRMU04o cGFnZSwgcmVjcHRyKTsKIAkJfQogCQllbHNlCi0JCQlQYWdlU2V0TFNOKHBhZ2UsIGdpc3RHZXRG YWtlTFNOKHJlbCkpOworCQkJUGFnZVNldExTTihwYWdlLCBYTG9nR2V0RmFrZUxTTihyZWwpKTsK IAogCQlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2dpc3QvZ2lzdHV0aWwuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R1dGlsLmMK aW5kZXggMjc5NzJmYWQyLi4wZjU4ZjYxODcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9naXN0L2dpc3R1dGlsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHV0aWwu YwpAQCAtMTAwNyw1NiArMTAwNyw2IEBAIGdpc3Rwcm9wZXJ0eShPaWQgaW5kZXhfb2lkLCBpbnQg YXR0bm8sCiAJcmV0dXJuIHRydWU7CiB9CiAKLS8qCi0gKiBTb21lIGluZGV4ZXMgYXJlIG5vdCBX QUwtbG9nZ2VkLCBidXQgd2UgbmVlZCBMU05zIHRvIGRldGVjdCBjb25jdXJyZW50IHBhZ2UKLSAq IHNwbGl0cyBhbnl3YXkuIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYSBmYWtlIHNlcXVlbmNlIG9m IExTTnMgZm9yIHRoYXQKLSAqIHB1cnBvc2UuCi0gKi8KLVhMb2dSZWNQdHIKLWdpc3RHZXRGYWtl TFNOKFJlbGF0aW9uIHJlbCkKLXsKLQlpZiAocmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlID09 IFJFTFBFUlNJU1RFTkNFX1RFTVApCi0JewotCQkvKgotCQkgKiBUZW1wb3JhcnkgcmVsYXRpb25z IGFyZSBvbmx5IGFjY2Vzc2libGUgaW4gb3VyIHNlc3Npb24sIHNvIGEgc2ltcGxlCi0JCSAqIGJh Y2tlbmQtbG9jYWwgY291bnRlciB3aWxsIGRvLgotCQkgKi8KLQkJc3RhdGljIFhMb2dSZWNQdHIg Y291bnRlciA9IEZpcnN0Tm9ybWFsVW5sb2dnZWRMU047Ci0KLQkJcmV0dXJuIGNvdW50ZXIrKzsK LQl9Ci0JZWxzZSBpZiAoUmVsYXRpb25Jc1Blcm1hbmVudChyZWwpKQotCXsKLQkJLyoKLQkJICog V0FMLWxvZ2dpbmcgb24gdGhpcyByZWxhdGlvbiB3aWxsIHN0YXJ0IGFmdGVyIGNvbW1pdCwgc28g aXRzIExTTnMKLQkJICogbXVzdCBiZSBkaXN0aW5jdCBudW1iZXJzIHNtYWxsZXIgdGhhbiB0aGUg TFNOIGF0IHRoZSBuZXh0IGNvbW1pdC4KLQkJICogRW1pdCBhIGR1bW15IFdBTCByZWNvcmQgaWYg aW5zZXJ0LUxTTiBoYXNuJ3QgYWR2YW5jZWQgYWZ0ZXIgdGhlCi0JCSAqIGxhc3QgY2FsbC4KLQkJ ICovCi0JCXN0YXRpYyBYTG9nUmVjUHRyIGxhc3Rsc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKLQkJ WExvZ1JlY1B0cgljdXJybHNuID0gR2V0WExvZ0luc2VydFJlY1B0cigpOwotCi0JCS8qIFNob3Vs ZG4ndCBiZSBjYWxsZWQgZm9yIFdBTC1sb2dnaW5nIHJlbGF0aW9ucyAqLwotCQlBc3NlcnQoIVJl bGF0aW9uTmVlZHNXQUwocmVsKSk7Ci0KLQkJLyogTm8gbmVlZCBmb3IgYW4gYWN0dWFsIHJlY29y ZCBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBkaXN0aW5jdCBMU04gKi8KLQkJaWYgKFhMb2dSZWNQdHJJ c1ZhbGlkKGxhc3Rsc24pICYmIGxhc3Rsc24gPT0gY3VycmxzbikKLQkJCWN1cnJsc24gPSBnaXN0 WExvZ0Fzc2lnbkxTTigpOwotCi0JCWxhc3Rsc24gPSBjdXJybHNuOwotCQlyZXR1cm4gY3Vycmxz bjsKLQl9Ci0JZWxzZQotCXsKLQkJLyoKLQkJICogVW5sb2dnZWQgcmVsYXRpb25zIGFyZSBhY2Nl c3NpYmxlIGZyb20gb3RoZXIgYmFja2VuZHMsIGFuZCBzdXJ2aXZlCi0JCSAqIChjbGVhbikgcmVz dGFydHMuIEdldEZha2VMU05Gb3JVbmxvZ2dlZFJlbCgpIGhhbmRsZXMgdGhhdCBmb3IgdXMuCi0J CSAqLwotCQlBc3NlcnQocmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RF TkNFX1VOTE9HR0VEKTsKLQkJcmV0dXJuIEdldEZha2VMU05Gb3JVbmxvZ2dlZFJlbCgpOwotCX0K LX0KLQogLyoKICAqIFRoaXMgaXMgYSBzdHJhdG51bSB0cmFuc2xhdGlvbiBzdXBwb3J0IGZ1bmN0 aW9uIGZvciBHaVNUIG9wY2xhc3NlcyB0aGF0IHVzZQogICogdGhlIFJUKlN0cmF0ZWd5TnVtYmVy IGNvbnN0YW50cy4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R2YWN1 dW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R2YWN1dW0uYwppbmRleCA5ZTcxNDk4 MGQuLjY4NmEwNDE4MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHZh Y3V1bS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R2YWN1dW0uYwpAQCAtMTYs NyArMTYsNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2dlbmFtLmgiCiAjaW5jbHVkZSAiYWNjZXNz L2dpc3RfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCisjaW5jbHVkZSAi YWNjZXNzL3hsb2dpbnNlcnQuaCIKICNpbmNsdWRlICJjb21tYW5kcy92YWN1dW0uaCIKICNpbmNs dWRlICJsaWIvaW50ZWdlcnNldC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgpAQCAtMTgyLDcg KzE4Miw3IEBAIGdpc3R2YWN1dW1zY2FuKEluZGV4VmFjdXVtSW5mbyAqaW5mbywgSW5kZXhCdWxr RGVsZXRlUmVzdWx0ICpzdGF0cywKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCQl2c3Rh dGUuc3RhcnROU04gPSBHZXRJbnNlcnRSZWNQdHIoKTsKIAllbHNlCi0JCXZzdGF0ZS5zdGFydE5T TiA9IGdpc3RHZXRGYWtlTFNOKHJlbCk7CisJCXZzdGF0ZS5zdGFydE5TTiA9IFhMb2dHZXRGYWtl TFNOKHJlbCk7CiAKIAkvKgogCSAqIFRoZSBvdXRlciBsb29wIGl0ZXJhdGVzIG92ZXIgYWxsIGlu ZGV4IHBhZ2VzLCBpbiBwaHlzaWNhbCBvcmRlciAod2UKQEAgLTQxMyw3ICs0MTMsNyBAQCByZXN0 YXJ0OgogCQkJCVBhZ2VTZXRMU04ocGFnZSwgcmVjcHRyKTsKIAkJCX0KIAkJCWVsc2UKLQkJCQlQ YWdlU2V0TFNOKHBhZ2UsIGdpc3RHZXRGYWtlTFNOKHJlbCkpOworCQkJCVBhZ2VTZXRMU04ocGFn ZSwgWExvZ0dldEZha2VMU04ocmVsKSk7CiAKIAkJCUVORF9DUklUX1NFQ1RJT04oKTsKIApAQCAt NzA3LDcgKzcwNyw3IEBAIGdpc3RkZWxldGVwYWdlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywgSW5k ZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cywKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChpbmZvLT5p bmRleCkpCiAJCXJlY3B0ciA9IGdpc3RYTG9nUGFnZURlbGV0ZShsZWFmQnVmZmVyLCB0eGlkLCBw YXJlbnRCdWZmZXIsIGRvd25saW5rKTsKIAllbHNlCi0JCXJlY3B0ciA9IGdpc3RHZXRGYWtlTFNO KGluZm8tPmluZGV4KTsKKwkJcmVjcHRyID0gWExvZ0dldEZha2VMU04oaW5mby0+aW5kZXgpOwog CVBhZ2VTZXRMU04ocGFyZW50UGFnZSwgcmVjcHRyKTsKIAlQYWdlU2V0TFNOKGxlYWZQYWdlLCBy ZWNwdHIpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0eGxvZy5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHhsb2cuYwppbmRleCBjNzgzODM4NDkuLmFl NTM4ZGM4MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHhsb2cuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0eGxvZy5jCkBAIC00MjEsOSArNDIxLDYg QEAgZ2lzdF9yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQljYXNlIFhMT0dfR0lTVF9Q QUdFX0RFTEVURToKIAkJCWdpc3RSZWRvUGFnZURlbGV0ZShyZWNvcmQpOwogCQkJYnJlYWs7Ci0J CWNhc2UgWExPR19HSVNUX0FTU0lHTl9MU046Ci0JCQkvKiBub3AuIFNlZSBnaXN0R2V0RmFrZUxT TigpLiAqLwotCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQllbG9nKFBBTklDLCAiZ2lzdF9yZWRv OiB1bmtub3duIG9wIGNvZGUgJXUiLCBpbmZvKTsKIAl9CkBAIC01NjcsMjQgKzU2NCw2IEBAIGdp c3RYTG9nUGFnZURlbGV0ZShCdWZmZXIgYnVmZmVyLCBGdWxsVHJhbnNhY3Rpb25JZCB4aWQsCiAJ cmV0dXJuIHJlY3B0cjsKIH0KIAotLyoKLSAqIFdyaXRlIGFuIGVtcHR5IFhMT0cgcmVjb3JkIHRv IGFzc2lnbiBhIGRpc3RpbmN0IExTTi4KLSAqLwotWExvZ1JlY1B0cgotZ2lzdFhMb2dBc3NpZ25M U04odm9pZCkKLXsKLQlpbnQJCQlkdW1teSA9IDA7Ci0KLQkvKgotCSAqIFJlY29yZHMgb3RoZXIg dGhhbiBYTE9HX1NXSVRDSCBtdXN0IGhhdmUgY29udGVudC4gV2UgdXNlIGFuIGludGVnZXIgMAot CSAqIHRvIGZvbGxvdyB0aGUgcmVzdHJpY3Rpb24uCi0JICovCi0JWExvZ0JlZ2luSW5zZXJ0KCk7 Ci0JWExvZ1NldFJlY29yZEZsYWdzKFhMT0dfTUFSS19VTklNUE9SVEFOVCk7Ci0JWExvZ1JlZ2lz dGVyRGF0YSgmZHVtbXksIHNpemVvZihkdW1teSkpOwotCXJldHVybiBYTG9nSW5zZXJ0KFJNX0dJ U1RfSUQsIFhMT0dfR0lTVF9BU1NJR05fTFNOKTsKLX0KLQogLyoKICAqIFdyaXRlIFhMT0cgcmVj b3JkIGFib3V0IHJldXNlIG9mIGEgZGVsZXRlZCBwYWdlLgogICovCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvZ2lzdGRlc2MuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9y bWdyZGVzYy9naXN0ZGVzYy5jCmluZGV4IDc5YTgzOWNjMi4uNjc3ODllMDI1IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvZ2lzdGRlc2MuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3Mvcm1ncmRlc2MvZ2lzdGRlc2MuYwpAQCAtODAsOSArODAsNiBAQCBnaXN0X2Rlc2Mo U3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQljYXNlIFhMT0dfR0lT VF9QQUdFX0RFTEVURToKIAkJCW91dF9naXN0eGxvZ1BhZ2VEZWxldGUoYnVmLCAoZ2lzdHhsb2dQ YWdlRGVsZXRlICopIHJlYyk7CiAJCQlicmVhazsKLQkJY2FzZSBYTE9HX0dJU1RfQVNTSUdOX0xT TjoKLQkJCS8qIE5vIGRldGFpbHMgdG8gd3JpdGUgb3V0ICovCi0JCQlicmVhazsKIAl9CiB9CiAK QEAgLTEwOCw5ICsxMDUsNiBAQCBnaXN0X2lkZW50aWZ5KHVpbnQ4IGluZm8pCiAJCWNhc2UgWExP R19HSVNUX1BBR0VfREVMRVRFOgogCQkJaWQgPSAiUEFHRV9ERUxFVEUiOwogCQkJYnJlYWs7Ci0J CWNhc2UgWExPR19HSVNUX0FTU0lHTl9MU046Ci0JCQlpZCA9ICJBU1NJR05fTFNOIjsKLQkJCWJy ZWFrOwogCX0KIAogCXJldHVybiBpZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9y bWdyZGVzYy94bG9nZGVzYy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hsb2dkZXNj LmMKaW5kZXggZmYwNzhmMjIyLi45MDQ0Yjk1MjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9ybWdyZGVzYy94bG9nZGVzYy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVz Yy94bG9nZGVzYy5jCkBAIC0xNzUsNiArMTc1LDEwIEBAIHhsb2dfZGVzYyhTdHJpbmdJbmZvIGJ1 ZiwgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCW1lbWNweSgmZW5hYmxlZCwgcmVjLCBzaXpl b2YoYm9vbCkpOwogCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgZW5hYmxlZCA/ICJ0cnVl IiA6ICJmYWxzZSIpOwogCX0KKwllbHNlIGlmIChpbmZvID09IFhMT0dfQVNTSUdOX0xTTikKKwl7 CisJCS8qIG5vIGZ1cnRoZXIgaW5mb3JtYXRpb24gdG8gcHJpbnQgKi8KKwl9CiB9CiAKIGNvbnN0 IGNoYXIgKgpAQCAtMjI5LDYgKzIzMyw5IEBAIHhsb2dfaWRlbnRpZnkodWludDggaW5mbykKIAkJ Y2FzZSBYTE9HX0xPR0lDQUxfREVDT0RJTkdfU1RBVFVTX0NIQU5HRToKIAkJCWlkID0gIkxPR0lD QUxfREVDT0RJTkdfU1RBVFVTX0NIQU5HRSI7CiAJCQlicmVhazsKKwkJY2FzZSBYTE9HX0FTU0lH Tl9MU046CisJCQlpZCA9ICJBU1NJR05fTFNOIjsKKwkJCWJyZWFrOwogCX0KIAogCXJldHVybiBp ZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwppbmRleCAxM2NjZTliNDkuLmNkNDlhMTdlYyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwpAQCAtODI0MCw2ICs4MjQwLDMxIEBAIFhMb2dS ZXN0b3JlUG9pbnQoY29uc3QgY2hhciAqcnBOYW1lKQogCXJldHVybiBSZWNQdHI7CiB9CiAKKy8q CisgKiBXcml0ZSBhbiBlbXB0eSBYTE9HIHJlY29yZCB0byBhc3NpZ24gYSBkaXN0aW5jdCBMU04u CisgKgorICogVGhpcyBpcyB1c2VkIGJ5IGluZGV4IEFNcyAobmJ0cmVlLCBoYXNoLCBHaVNUKSB3 aGVuIGJ1aWxkaW5nIGluZGV4ZXMgb24KKyAqIHBlcm1hbmVudCByZWxhdGlvbnMgd2l0aCB3YWxf bGV2ZWw9bWluaW1hbC4gIEluIHRoYXQgc2NlbmFyaW8sIFdBTC1sb2dnaW5nCisgKiB3aWxsIHN0 YXJ0IGFmdGVyIGNvbW1pdCwgYnV0IHRoZSBpbmRleCBBTSBuZWVkcyBkaXN0aW5jdCBMU05zIHRv IGRldGVjdAorICogY29uY3VycmVudCBwYWdlIG1vZGlmaWNhdGlvbnMuICBXaGVuIHRoZSBjdXJy ZW50IFdBTCBpbnNlcnQgcG9zaXRpb24gaGFzbid0CisgKiBhZHZhbmNlZCBzaW5jZSB0aGUgbGFz dCBjYWxsLCB3ZSBlbWl0IHRoaXMgZHVtbXkgcmVjb3JkIHRvIGVuc3VyZSB3ZSBnZXQgYQorICog bmV3LCBkaXN0aW5jdCBMU04uCisgKi8KK1hMb2dSZWNQdHIKK1hMb2dBc3NpZ25MU04odm9pZCkK K3sKKwlpbnQJCQlkdW1teSA9IDA7CisKKwkvKgorCSAqIFJlY29yZHMgb3RoZXIgdGhhbiBYTE9H X1NXSVRDSCBtdXN0IGhhdmUgY29udGVudC4gIFdlIHVzZSBhbiBpbnRlZ2VyIDAKKwkgKiB0byBz YXRpc2Z5IHRoaXMgcmVzdHJpY3Rpb24uCisJICovCisJWExvZ0JlZ2luSW5zZXJ0KCk7CisJWExv Z1NldFJlY29yZEZsYWdzKFhMT0dfTUFSS19VTklNUE9SVEFOVCk7CisJWExvZ1JlZ2lzdGVyRGF0 YSgmZHVtbXksIHNpemVvZihkdW1teSkpOworCXJldHVybiBYTG9nSW5zZXJ0KFJNX1hMT0dfSUQs IFhMT0dfQVNTSUdOX0xTTik7Cit9CisKIC8qCiAgKiBDaGVjayBpZiBhbnkgb2YgdGhlIEdVQyBw YXJhbWV0ZXJzIHRoYXQgYXJlIGNyaXRpY2FsIGZvciBob3Qgc3RhbmRieQogICogaGF2ZSBjaGFu Z2VkLCBhbmQgdXBkYXRlIHRoZSB2YWx1ZSBpbiBwZ19jb250cm9sIGZpbGUgaWYgbmVjZXNzYXJ5 LgpAQCAtODYwNyw2ICs4NjMyLDEwIEBAIHhsb2dfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29y ZCkKIAl7CiAJCS8qIG5vdGhpbmcgdG8gZG8gaGVyZSwgaGFuZGxlZCBpbiB4bG9ncmVjb3Zlcnku YyAqLwogCX0KKwllbHNlIGlmIChpbmZvID09IFhMT0dfQVNTSUdOX0xTTikKKwl7CisJCS8qIG5v dGhpbmcgdG8gZG8gaGVyZSwgc2VlIFhMb2dHZXRGYWtlTFNOKCkgKi8KKwl9CiAJZWxzZSBpZiAo aW5mbyA9PSBYTE9HX0ZQSSB8fCBpbmZvID09IFhMT0dfRlBJX0ZPUl9ISU5UKQogCXsKIAkJLyoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dpbnNlcnQuYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dpbnNlcnQuYwppbmRleCBhOWExNjc4YWMuLjRl ZWExMjAxMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2luc2Vy dC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dpbnNlcnQuYwpAQCAtNDEs NiArNDEsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInV0aWxzL21l bXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcGdzdGF0X2ludGVybmFsLmgiCisjaW5jbHVkZSAi dXRpbHMvcmVsLmgiCiAKIC8qCiAgKiBHdWVzcyB0aGUgbWF4aW11bSBidWZmZXIgc2l6ZSByZXF1 aXJlZCB0byBzdG9yZSBhIGNvbXByZXNzZWQgdmVyc2lvbiBvZgpAQCAtNTQ3LDYgKzU0OCw3MSBA QCBYTG9nU2ltcGxlSW5zZXJ0SW50NjQoUm1ncklkIHJtaWQsIHVpbnQ4IGluZm8sIGludDY0IHZh bHVlKQogCXJldHVybiBYTG9nSW5zZXJ0KHJtaWQsIGluZm8pOwogfQogCisvKgorICogWExvZ0dl dEZha2VMU04gLSBnZXQgYSBmYWtlIExTTiBmb3IgYW4gaW5kZXggcGFnZSB0aGF0IGlzbid0IFdB TC1sb2dnZWQuCisgKgorICogU29tZSBpbmRleCBBTXMgKG5idHJlZSwgaGFzaCwgR2lTVCkgdXNl IExTTnMgdG8gZGV0ZWN0IGNvbmN1cnJlbnQgcGFnZQorICogbW9kaWZpY2F0aW9ucywgYnV0IG5v dCBhbGwgaW5kZXggcGFnZXMgYXJlIFdBTC1sb2dnZWQuICBUaGlzIGZ1bmN0aW9uCisgKiBwcm92 aWRlcyBhIHNlcXVlbmNlIG9mIGZha2UgTFNOcyBmb3IgdGhhdCBwdXJwb3NlLgorICoKKyAqIFRo ZSBiZWhhdmlvciBkZXBlbmRzIG9uIHRoZSByZWxhdGlvbidzIHBlcnNpc3RlbmNlOgorICoKKyAq IC0gRm9yIHRlbXBvcmFyeSByZWxhdGlvbnMsIHdlIHVzZSBhIHNpbXBsZSBiYWNrZW5kLWxvY2Fs IGNvdW50ZXIgc2luY2UKKyAqICAgdGVtcG9yYXJ5IHJlbGF0aW9ucyBhcmUgb25seSBhY2Nlc3Np YmxlIHdpdGhpbiBvdXIgc2Vzc2lvbi4KKyAqCisgKiAtIEZvciBwZXJtYW5lbnQgcmVsYXRpb25z IHdoZW4gV0FMLWxvZ2dpbmcgaXMgZGlzYWJsZWQgKGUuZy4sIGR1cmluZyBpbmRleAorICogICBj cmVhdGlvbiB3aXRoIHdhbF9sZXZlbD1taW5pbWFsKSwgd2UgdXNlIHRoZSBjdXJyZW50IFdBTCBp bnNlcnQgcG9zaXRpb24uCisgKiAgIElmIHRoZSBpbnNlcnQgcG9zaXRpb24gaGFzbid0IGFkdmFu Y2VkIHNpbmNlIHRoZSBsYXN0IGNhbGwsIHdlIGVtaXQgYQorICogICBkdW1teSBXQUwgcmVjb3Jk IHZpYSBYTG9nQXNzaWduTFNOKCkgdG8gZW5zdXJlIHdlIGdldCBhIGRpc3RpbmN0IExTTi4KKyAq CisgKiAtIEZvciB1bmxvZ2dlZCByZWxhdGlvbnMsIHdlIHVzZSB0aGUgZ2xvYmFsIGZha2UgTFNO IGNvdW50ZXIgbWFpbnRhaW5lZAorICogICBieSBHZXRGYWtlTFNORm9yVW5sb2dnZWRSZWwoKS4K KyAqLworWExvZ1JlY1B0cgorWExvZ0dldEZha2VMU04oUmVsYXRpb24gcmVsKQoreworCWlmIChy ZWwtPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwl7CisJ CS8qCisJCSAqIFRlbXBvcmFyeSByZWxhdGlvbnMgYXJlIG9ubHkgYWNjZXNzaWJsZSBpbiBvdXIg c2Vzc2lvbiwgc28gYSBzaW1wbGUKKwkJICogYmFja2VuZC1sb2NhbCBjb3VudGVyIHdpbGwgZG8u CisJCSAqLworCQlzdGF0aWMgWExvZ1JlY1B0ciBjb3VudGVyID0gRmlyc3ROb3JtYWxVbmxvZ2dl ZExTTjsKKworCQlyZXR1cm4gY291bnRlcisrOworCX0KKwllbHNlIGlmIChSZWxhdGlvbklzUGVy bWFuZW50KHJlbCkpCisJeworCQkvKgorCQkgKiBXQUwtbG9nZ2luZyBvbiB0aGlzIHJlbGF0aW9u IHdpbGwgc3RhcnQgYWZ0ZXIgY29tbWl0LCBzbyBpdHMgTFNOcworCQkgKiBtdXN0IGJlIGRpc3Rp bmN0IG51bWJlcnMgc21hbGxlciB0aGFuIHRoZSBMU04gYXQgdGhlIG5leHQgY29tbWl0LgorCQkg KiBFbWl0IGEgZHVtbXkgV0FMIHJlY29yZCBpZiBpbnNlcnQtTFNOIGhhc24ndCBhZHZhbmNlZCBh ZnRlciB0aGUKKwkJICogbGFzdCBjYWxsLgorCQkgKi8KKwkJc3RhdGljIFhMb2dSZWNQdHIgbGFz dGxzbiA9IEludmFsaWRYTG9nUmVjUHRyOworCQlYTG9nUmVjUHRyCWN1cnJsc24gPSBHZXRYTG9n SW5zZXJ0UmVjUHRyKCk7CisKKwkJLyogU2hvdWxkbid0IGJlIGNhbGxlZCBmb3IgV0FMLWxvZ2dp bmcgcmVsYXRpb25zICovCisJCUFzc2VydCghUmVsYXRpb25OZWVkc1dBTChyZWwpKTsKKworCQkv KiBObyBuZWVkIGZvciBhbiBhY3R1YWwgcmVjb3JkIGlmIHdlIGFscmVhZHkgaGF2ZSBhIGRpc3Rp bmN0IExTTiAqLworCQlpZiAoWExvZ1JlY1B0cklzVmFsaWQobGFzdGxzbikgJiYgbGFzdGxzbiA9 PSBjdXJybHNuKQorCQkJY3VycmxzbiA9IFhMb2dBc3NpZ25MU04oKTsKKworCQlsYXN0bHNuID0g Y3VycmxzbjsKKwkJcmV0dXJuIGN1cnJsc247CisJfQorCWVsc2UKKwl7CisJCS8qCisJCSAqIFVu bG9nZ2VkIHJlbGF0aW9ucyBhcmUgYWNjZXNzaWJsZSBmcm9tIG90aGVyIGJhY2tlbmRzLCBhbmQg c3Vydml2ZQorCQkgKiAoY2xlYW4pIHJlc3RhcnRzLiAgR2V0RmFrZUxTTkZvclVubG9nZ2VkUmVs KCkgaGFuZGxlcyB0aGF0IGZvciB1cy4KKwkJICovCisJCUFzc2VydChyZWwtPnJkX3JlbC0+cmVs cGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVU5MT0dHRUQpOworCQlyZXR1cm4gR2V0RmFr ZUxTTkZvclVubG9nZ2VkUmVsKCk7CisJfQorfQorCiAvKgogICogQXNzZW1ibGUgYSBXQUwgcmVj b3JkIGZyb20gdGhlIHJlZ2lzdGVyZWQgZGF0YSBhbmQgYnVmZmVycyBpbnRvIGFuCiAgKiBYTG9n UmVjRGF0YSBjaGFpbiwgcmVhZHkgZm9yIGluc2VydGlvbiB3aXRoIFhMb2dJbnNlcnRSZWNvcmQo KS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIGIvc3Jj L2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKaW5kZXggZDFiYWJhZmYwLi5hN2E1Njlj OTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCisrKyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCkBAIC00NDcwLDEzICs0NDcwLDEz IEBAIEZsdXNoQnVmZmVyKEJ1ZmZlckRlc2MgKmJ1ZiwgU01nclJlbGF0aW9uIHJlbG4sIElPT2Jq ZWN0IGlvX29iamVjdCwKIAkgKiBsb3N0IGFmdGVyIGEgY3Jhc2ggYW55d2F5LiAgTW9zdCB1bmxv Z2dlZCByZWxhdGlvbiBwYWdlcyBkbyBub3QgYmVhcgogCSAqIExTTnMgc2luY2Ugd2UgbmV2ZXIg ZW1pdCBXQUwgcmVjb3JkcyBmb3IgdGhlbSwgYW5kIHRoZXJlZm9yZSBmbHVzaGluZwogCSAqIHVw IHRocm91Z2ggdGhlIGJ1ZmZlciBMU04gd291bGQgYmUgdXNlbGVzcywgYnV0IGhhcm1sZXNzLiAg SG93ZXZlciwKLQkgKiBHaVNUIGluZGV4ZXMgdXNlIExTTnMgaW50ZXJuYWxseSB0byB0cmFjayBw YWdlLXNwbGl0cywgYW5kIHRoZXJlZm9yZQotCSAqIHVubG9nZ2VkIEdpU1QgcGFnZXMgYmVhciAi ZmFrZSIgTFNOcyBnZW5lcmF0ZWQgYnkKLQkgKiBHZXRGYWtlTFNORm9yVW5sb2dnZWRSZWwuICBJ dCBpcyB1bmxpa2VseSBidXQgcG9zc2libGUgdGhhdCB0aGUgZmFrZQotCSAqIExTTiBjb3VudGVy IGNvdWxkIGFkdmFuY2UgcGFzdCB0aGUgV0FMIGluc2VydGlvbiBwb2ludDsgYW5kIGlmIGl0IGRp ZAotCSAqIGhhcHBlbiwgYXR0ZW1wdGluZyB0byBmbHVzaCBXQUwgdGhyb3VnaCB0aGF0IGxvY2F0 aW9uIHdvdWxkIGZhaWwsIHdpdGgKLQkgKiBkaXNhc3Ryb3VzIHN5c3RlbS13aWRlIGNvbnNlcXVl bmNlcy4gIFRvIG1ha2Ugc3VyZSB0aGF0IGNhbid0IGhhcHBlbiwKLQkgKiBza2lwIHRoZSBmbHVz aCBpZiB0aGUgYnVmZmVyIGlzbid0IHBlcm1hbmVudC4KKwkgKiBzb21lIGluZGV4IEFNcyAobmJ0 cmVlLCBoYXNoLCBHaVNUKSB1c2UgTFNOcyBpbnRlcm5hbGx5IHRvIGRldGVjdAorCSAqIGNvbmN1 cnJlbnQgcGFnZSBtb2RpZmljYXRpb25zLCBhbmQgdGhlcmVmb3JlIHVubG9nZ2VkIGluZGV4IHBh Z2VzIGJlYXIKKwkgKiAiZmFrZSIgTFNOcyBnZW5lcmF0ZWQgYnkgWExvZ0dldEZha2VMU04uICBJ dCBpcyB1bmxpa2VseSBidXQgcG9zc2libGUKKwkgKiB0aGF0IHRoZSBmYWtlIExTTiBjb3VudGVy IGNvdWxkIGFkdmFuY2UgcGFzdCB0aGUgV0FMIGluc2VydGlvbiBwb2ludDsKKwkgKiBhbmQgaWYg aXQgZGlkIGhhcHBlbiwgYXR0ZW1wdGluZyB0byBmbHVzaCBXQUwgdGhyb3VnaCB0aGF0IGxvY2F0 aW9uCisJICogd291bGQgZmFpbCwgd2l0aCBkaXNhc3Ryb3VzIHN5c3RlbS13aWRlIGNvbnNlcXVl bmNlcy4gIFRvIG1ha2Ugc3VyZQorCSAqIHRoYXQgY2FuJ3QgaGFwcGVuLCBza2lwIHRoZSBmbHVz aCBpZiB0aGUgYnVmZmVyIGlzbid0IHBlcm1hbmVudC4KIAkgKi8KIAlpZiAoYnVmX3N0YXRlICYg Qk1fUEVSTUFORU5UKQogCQlYTG9nRmx1c2gocmVjcHRyKTsKLS0gCjIuNTEuMAoK --000000000000a2454a064b95d983 Content-Type: application/x-patch; name="v11-0012-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Disposition: attachment; filename="v11-0012-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm0x5og81 RnJvbSBhOTlhM2YwNTc2YzJjMDU1YzI2OWU1ZDI0YTVkODA3NWRiMGI2NmU3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMjUgTm92IDIwMjUgMTg6MDM6MTUgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMSAxMi8xMl0g TWFrZSBoYXNoIGluZGV4IEFNIHVzZSBhbWdldGJhdGNoIGludGVyZmFjZS4KClJlcGxhY2UgaGFz aGdldHR1cGxlIHdpdGggaGFzaGdldGJhdGNoLCBhIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyB0 aGUKbmV3IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLiAgUGxhaW4gaW5kZXggc2NhbnMgb2YgaGFzaCBp bmRleGVzIG5vdyByZXR1cm4KbWF0Y2hpbmcgaXRlbXMgaW4gYmF0Y2hlcyBjb25zaXN0aW5nIG9m IGFsbCBvZiB0aGUgbWF0Y2hlcyBmcm9tIGEgZ2l2ZW4KYnVja2V0IG9yIG92ZXJmbG93IHBhZ2Uu ICBUaGlzIGdpdmVzIHRoZSBjb3JlIGV4ZWN1dG9yIHRoZSBhYmlsaXR5IHRvCnBlcmZvcm0gb3B0 aW1pemF0aW9ucyBsaWtlIGluZGV4IHByZWZldGNoaW5nIGR1cmluZyBoYXNoIGluZGV4IHNjYW5z LgoKTm90ZSB0aGF0IGhhc2ggaW5kZXggc2NhbnMgd2lsbCBub3cgZHJvcCBpbmRleCBwYWdlIGJ1 ZmZlciBwaW5zIGVhZ2VybHkKKGFjdHVhbGx5LCB0aGUgdGFibGUgQU0gd2lsbCBkbyBzbyBvbiBi ZWhhbGYgb2YgdGhlIGhhc2ggaW5kZXggQU0pLgpUaGlzIGlzIGEgaGFyZCByZXF1aXJlbWVudCBm b3IgYW55IGluZGV4IEFNIHRoYXQgYWRvcHRzIHRoZSBuZXcKYW1nZXRiYXRjaCBpbnRlcmZhY2Uu ICBHdWFyYW50ZWVpbmcgdGhhdCBvcGVuIGJhdGNoZXMgd29uJ3QgaG9sZCBidWZmZXIKcGlucyBv biBpbmRleCBwYWdlcyBncmVhdGx5IHNpbXBsaWZpZXMgcmVzb3VyY2UgbWFuYWdlbWVudCBkdXJp bmcgaW5kZXgKcHJlZmV0Y2hpbmcsIHdoZXJlIHRoZSByZWFkIHN0cmVhbSBpcyBleHBlY3RlZCB0 byBob2xkIG1hbnkgcGlucyBvbiBoZWFwCnBhZ2VzICh0aGF0J3Mgd2h5IGFtZ2V0YmF0Y2ggbWFr ZXMgdGhpcyBhIGhhcmQgcmVxdWlyZW1lbnQpLgoKQWxzbyBhZGQgVmFsZ3JpbmQgYnVmZmVyIGxv Y2sgaW5zdHJ1bWVudGF0aW9uIHRvIGhhc2gsIGJyaW5naW5nIGl0IGluCmxpbmUgd2l0aCBuYnRy ZWUgZm9sbG93aW5nIGNvbW1pdCA0YTcwZjgyOS4gIFRoaXMgaXMgYW5vdGhlciByZXF1aXJlbWVu dAp3aGVuIHVzaW5nIHRoZSBhbWdldGJhdGNoIGludGVyZmFjZS4KCkF1dGhvcjogUGV0ZXIgR2Vv Z2hlZ2FuIDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1CeTogVG9tYXMgVm9uZHJhIDx0b21hc0B2b25k cmEubWU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1Xem1ZcWhhY0JIMTYx cGVBV2I1ZUY9SmE3Q0ZBUSswalNFTXE9cW5mTFZUT09nQG1haWwuZ21haWwuY29tCi0tLQogc3Jj L2luY2x1ZGUvYWNjZXNzL2hhc2guaCAgICAgICAgICAgIHwgIDcyICstLS0tLQogc3JjL2JhY2tl bmQvYWNjZXNzL2hhc2gvUkVBRE1FICAgICAgIHwgIDMxICstLQogc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaC5jICAgICAgIHwgMTc2ICsrKysrKysrLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNoX3hsb2cuYyAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hh c2hwYWdlLmMgICB8ICAyNiArLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2gu YyB8IDMzMCArKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9o YXNoL2hhc2h1dGlsLmMgICB8IDExNyArLS0tLS0tLS0tCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCAgICAgfCAgIDIgLQogOCBmaWxlcyBjaGFuZ2VkLCAyNzcgaW5zZXJ0aW9ucygr KSwgNDgxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNo LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oCmluZGV4IGE4NzAyZjBlNS4uMzE3MzdlZjQz IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oCisrKyBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9oYXNoLmgKQEAgLTEwMCw1OCArMTAwLDYgQEAgdHlwZWRlZiBIYXNoUGFnZU9wYXF1 ZURhdGEgKkhhc2hQYWdlT3BhcXVlOwogICovCiAjZGVmaW5lIEhBU0hPX1BBR0VfSUQJCTB4RkY4 MAogCi10eXBlZGVmIHN0cnVjdCBIYXNoU2NhblBvc0l0ZW0JLyogd2hhdCB3ZSByZW1lbWJlciBh Ym91dCBlYWNoIG1hdGNoICovCi17Ci0JSXRlbVBvaW50ZXJEYXRhIGhlYXBUaWQ7CS8qIFRJRCBv ZiByZWZlcmVuY2VkIGhlYXAgaXRlbSAqLwotCU9mZnNldE51bWJlciBpbmRleE9mZnNldDsJLyog aW5kZXggaXRlbSdzIGxvY2F0aW9uIHdpdGhpbiBwYWdlICovCi19IEhhc2hTY2FuUG9zSXRlbTsK LQotdHlwZWRlZiBzdHJ1Y3QgSGFzaFNjYW5Qb3NEYXRhCi17Ci0JQnVmZmVyCQlidWY7CQkJLyog aWYgdmFsaWQsIHRoZSBidWZmZXIgaXMgcGlubmVkICovCi0JQmxvY2tOdW1iZXIgY3VyclBhZ2U7 CQkvKiBjdXJyZW50IGhhc2ggaW5kZXggcGFnZSAqLwotCUJsb2NrTnVtYmVyIG5leHRQYWdlOwkJ LyogbmV4dCBvdmVyZmxvdyBwYWdlICovCi0JQmxvY2tOdW1iZXIgcHJldlBhZ2U7CQkvKiBwcmV2 IG92ZXJmbG93IG9yIGJ1Y2tldCBwYWdlICovCi0KLQkvKgotCSAqIFRoZSBpdGVtcyBhcnJheSBp cyBhbHdheXMgb3JkZXJlZCBpbiBpbmRleCBvcmRlciAoaWUsIGluY3JlYXNpbmcKLQkgKiBpbmRl eG9mZnNldCkuICBXaGVuIHNjYW5uaW5nIGJhY2t3YXJkcyBpdCBpcyBjb252ZW5pZW50IHRvIGZp bGwgdGhlCi0JICogYXJyYXkgYmFjay10by1mcm9udCwgc28gd2Ugc3RhcnQgYXQgdGhlIGxhc3Qg c2xvdCBhbmQgZmlsbCBkb3dud2FyZHMuCi0JICogSGVuY2Ugd2UgbmVlZCBib3RoIGEgZmlyc3Qt dmFsaWQtZW50cnkgYW5kIGEgbGFzdC12YWxpZC1lbnRyeSBjb3VudGVyLgotCSAqIGl0ZW1JbmRl eCBpcyBhIGN1cnNvciBzaG93aW5nIHdoaWNoIGVudHJ5IHdhcyBsYXN0IHJldHVybmVkIHRvIGNh bGxlci4KLQkgKi8KLQlpbnQJCQlmaXJzdEl0ZW07CQkvKiBmaXJzdCB2YWxpZCBpbmRleCBpbiBp dGVtc1tdICovCi0JaW50CQkJbGFzdEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4IGluIGl0ZW1z W10gKi8KLQlpbnQJCQlpdGVtSW5kZXg7CQkvKiBjdXJyZW50IGluZGV4IGluIGl0ZW1zW10gKi8K LQotCUhhc2hTY2FuUG9zSXRlbSBpdGVtc1tNYXhJbmRleFR1cGxlc1BlclBhZ2VdOwkvKiBNVVNU IEJFIExBU1QgKi8KLX0gSGFzaFNjYW5Qb3NEYXRhOwotCi0jZGVmaW5lIEhhc2hTY2FuUG9zSXNQ aW5uZWQoc2NhbnBvcykgXAotKCBcCi0JQXNzZXJ0TWFjcm8oQmxvY2tOdW1iZXJJc1ZhbGlkKChz Y2FucG9zKS5jdXJyUGFnZSkgfHwgXAotCQkJCSFCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYp KSwgXAotCUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikgXAotKQotCi0jZGVmaW5lIEhhc2hT Y2FuUG9zSXNWYWxpZChzY2FucG9zKSBcCi0oIFwKLQlBc3NlcnRNYWNybyhCbG9ja051bWJlcklz VmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSB8fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNjYW5w b3MpLmJ1ZikpLCBcCi0JQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgXAot KQotCi0jZGVmaW5lIEhhc2hTY2FuUG9zSW52YWxpZGF0ZShzY2FucG9zKSBcCi0JZG8geyBcCi0J CShzY2FucG9zKS5idWYgPSBJbnZhbGlkQnVmZmVyOyBcCi0JCShzY2FucG9zKS5jdXJyUGFnZSA9 IEludmFsaWRCbG9ja051bWJlcjsgXAotCQkoc2NhbnBvcykubmV4dFBhZ2UgPSBJbnZhbGlkQmxv Y2tOdW1iZXI7IFwKLQkJKHNjYW5wb3MpLnByZXZQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOyBc Ci0JCShzY2FucG9zKS5maXJzdEl0ZW0gPSAwOyBcCi0JCShzY2FucG9zKS5sYXN0SXRlbSA9IDA7 IFwKLQkJKHNjYW5wb3MpLml0ZW1JbmRleCA9IDA7IFwKLQl9IHdoaWxlICgwKQotCiAvKgogICoJ SGFzaFNjYW5PcGFxdWVEYXRhIGlzIHByaXZhdGUgc3RhdGUgZm9yIGEgaGFzaCBpbmRleCBzY2Fu LgogICovCkBAIC0xNzgsMTUgKzEyNiw2IEBAIHR5cGVkZWYgc3RydWN0IEhhc2hTY2FuT3BhcXVl RGF0YQogCSAqIHJlZmVycmVkIG9ubHkgd2hlbiBoYXNoc29fYnVjX3BvcHVsYXRlZCBpcyB0cnVl LgogCSAqLwogCWJvb2wJCWhhc2hzb19idWNfc3BsaXQ7Ci0JLyogaW5mbyBhYm91dCBraWxsZWQg aXRlbXMgaWYgYW55IChraWxsZWRJdGVtcyBpcyBOVUxMIGlmIG5ldmVyIHVzZWQpICovCi0JaW50 CQkgICAqa2lsbGVkSXRlbXM7CS8qIGN1cnJQb3MuaXRlbXMgaW5kZXhlcyBvZiBraWxsZWQgaXRl bXMgKi8KLQlpbnQJCQludW1LaWxsZWQ7CQkvKiBudW1iZXIgb2YgY3VycmVudGx5IHN0b3JlZCBp dGVtcyAqLwotCi0JLyoKLQkgKiBJZGVudGlmeSBhbGwgdGhlIG1hdGNoaW5nIGl0ZW1zIG9uIGEg cGFnZSBhbmQgc2F2ZSB0aGVtIGluCi0JICogSGFzaFNjYW5Qb3NEYXRhCi0JICovCi0JSGFzaFNj YW5Qb3NEYXRhIGN1cnJQb3M7CS8qIGN1cnJlbnQgcG9zaXRpb24gZGF0YSAqLwogfSBIYXNoU2Nh bk9wYXF1ZURhdGE7CiAKIHR5cGVkZWYgSGFzaFNjYW5PcGFxdWVEYXRhICpIYXNoU2Nhbk9wYXF1 ZTsKQEAgLTM2OCwxMSArMzA3LDE0IEBAIGV4dGVybiBib29sIGhhc2hpbnNlcnQoUmVsYXRpb24g cmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiAJCQkJCSAgIEluZGV4VW5pcXVlQ2hl Y2sgY2hlY2tVbmlxdWUsCiAJCQkJCSAgIGJvb2wgaW5kZXhVbmNoYW5nZWQsCiAJCQkJCSAgIHN0 cnVjdCBJbmRleEluZm8gKmluZGV4SW5mbyk7Ci1leHRlcm4gYm9vbCBoYXNoZ2V0dHVwbGUoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4gSW5kZXhTY2FuQmF0 Y2ggaGFzaGdldGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJICAgSW5kZXhTY2Fu QmF0Y2ggcHJpb3JiYXRjaCwKKwkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXIpOwogZXh0ZXJu IGludDY0IGhhc2hnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSk7 CiBleHRlcm4gSW5kZXhTY2FuRGVzYyBoYXNoYmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5r ZXlzLCBpbnQgbm9yZGVyYnlzKTsKIGV4dGVybiB2b2lkIGhhc2hyZXNjYW4oSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCiAJCQkJCSAgIFNjYW5LZXkg b3JkZXJieXMsIGludCBub3JkZXJieXMpOworZXh0ZXJuIHZvaWQgaGFzaGtpbGxpdGVtc2JhdGNo KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogZXh0ZXJuIHZvaWQg aGFzaGVuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVS ZXN1bHQgKmhhc2hidWxrZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKIAkJCQkJCQkJCQkJ IEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMsCkBAIC00NDUsOCArMzg3LDkgQEAgZXh0ZXJu IHZvaWQgX2hhc2hfZmluaXNoX3NwbGl0KFJlbGF0aW9uIHJlbCwgQnVmZmVyIG1ldGFidWYsIEJ1 ZmZlciBvYnVmLAogCQkJCQkJCSAgIHVpbnQzMiBsb3dtYXNrKTsKIAogLyogaGFzaHNlYXJjaC5j ICovCi1leHRlcm4gYm9vbCBfaGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIpOwotZXh0ZXJuIGJvb2wgX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggX2hhc2hfbmV4dChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCQkgSW5kZXhTY2FuQmF0 Y2ggcHJpb3JiYXRjaCk7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggX2hhc2hfZmlyc3QoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CiAKIC8qIGhhc2hzb3J0LmMgKi8KIHR5 cGVkZWYgc3RydWN0IEhTcG9vbCBIU3Bvb2w7CS8qIG9wYXF1ZSBzdHJ1Y3QgaW4gaGFzaHNvcnQu YyAqLwpAQCAtNDc2LDcgKzQxOSw2IEBAIGV4dGVybiBCbG9ja051bWJlciBfaGFzaF9nZXRfb2xk YmxvY2tfZnJvbV9uZXdidWNrZXQoUmVsYXRpb24gcmVsLCBCdWNrZXQgbmV3X2J1CiBleHRlcm4g QmxvY2tOdW1iZXIgX2hhc2hfZ2V0X25ld2Jsb2NrX2Zyb21fb2xkYnVja2V0KFJlbGF0aW9uIHJl bCwgQnVja2V0IG9sZF9idWNrZXQpOwogZXh0ZXJuIEJ1Y2tldCBfaGFzaF9nZXRfbmV3YnVja2V0 X2Zyb21fb2xkYnVja2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0IG9sZF9idWNrZXQsCiAJCQkJCQkJ CQkJCQkgdWludDMyIGxvd21hc2ssIHVpbnQzMiBtYXhidWNrZXQpOwotZXh0ZXJuIHZvaWQgX2hh c2hfa2lsbF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pOwogCiAvKiBoYXNoLmMgKi8KIGV4dGVy biB2b2lkIGhhc2hidWNrZXRjbGVhbnVwKFJlbGF0aW9uIHJlbCwgQnVja2V0IGN1cl9idWNrZXQs CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9SRUFETUUgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGFzaC9SRUFETUUKaW5kZXggZmM5MDMxMTE3Li45NzJiYjY2NmIgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL1JFQURNRQorKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9SRUFETUUKQEAgLTI1NSwyOCArMjU1LDI5IEBAIFRoZSByZWFkZXIgYWxnb3JpdGht IGlzOgogCQlyZXRha2UgdGhlIGJ1ZmZlciBjb250ZW50IGxvY2sgb24gbmV3IGJ1Y2tldAogCQlh cnJhbmdlIHRvIHNjYW4gdGhlIG9sZCBidWNrZXQgbm9ybWFsbHkgYW5kIHRoZSBuZXcgYnVja2V0 IGZvcgogICAgICAgICAgdHVwbGVzIHdoaWNoIGFyZSBub3QgbW92ZWQtYnktc3BsaXQKLS0tIHRo ZW4sIHBlciByZWFkIHJlcXVlc3Q6CistLSB0aGVuLCBwZXIgYmF0Y2ggKHBhZ2UpIHJlcXVlc3Q6 CiAJcmVhY3F1aXJlIGNvbnRlbnQgbG9jayBvbiBjdXJyZW50IHBhZ2UKIAlzdGVwIHRvIG5leHQg cGFnZSBpZiBuZWNlc3NhcnkgKG5vIGNoYWluaW5nIG9mIGNvbnRlbnQgbG9ja3MsIGJ1dCBrZWVw CiAJdGhlIHBpbiBvbiB0aGUgcHJpbWFyeSBidWNrZXQgdGhyb3VnaG91dCB0aGUgc2NhbikKLQlz YXZlIGFsbCB0aGUgbWF0Y2hpbmcgdHVwbGVzIGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8g YW4gaXRlbXMgYXJyYXkKLQlyZWxlYXNlIHBpbiBhbmQgY29udGVudCBsb2NrIChidXQgaWYgaXQg aXMgcHJpbWFyeSBidWNrZXQgcGFnZSByZXRhaW4KLQlpdHMgcGluIHRpbGwgdGhlIGVuZCBvZiB0 aGUgc2NhbikKLQlnZXQgdHVwbGUgZnJvbSBhbiBpdGVtIGFycmF5CisJc2F2ZSBhbGwgdGhlIG1h dGNoaW5nIHR1cGxlcyBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIGEgYmF0Y2gKKwlyZWxl YXNlIGNvbnRlbnQgbG9jayBvbiBjdXJyZW50IHBhZ2UgcmV0dXJuIGJhdGNoIHRvIHRhYmxlIEFN ICh0YWJsZSBBTQorCXdpbGwgZHJvcCBiYXRjaCdzIGJ1ZmZlciBwaW4sIHRob3VnaCBwcmltYXJ5 IGJ1Y2tldCBwYWdlIHBpbiBpcyBrZXB0CisJdW50aWwgdGhlIGVuZCBvZiB0aGUgc2NhbikKIC0t IGF0IHNjYW4gc2h1dGRvd246Ci0JcmVsZWFzZSBhbGwgcGlucyBzdGlsbCBoZWxkCisJcmVsZWFz ZSBzY2FuLW93bmVkIHBpbnMgKGUuZy4sIHByaW1hcnkgYnVja2V0IHBhZ2UgcGluKSBhcyBuZWVk ZWQKIAogSG9sZGluZyB0aGUgYnVmZmVyIHBpbiBvbiB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZSBm b3IgdGhlIHdob2xlIHNjYW4gcHJldmVudHMKLXRoZSByZWFkZXIncyBjdXJyZW50LXR1cGxlIHBv aW50ZXIgZnJvbSBiZWluZyBpbnZhbGlkYXRlZCBieSBzcGxpdHMgb3IKLWNvbXBhY3Rpb25zLiAg KE9mIGNvdXJzZSwgb3RoZXIgYnVja2V0cyBjYW4gc3RpbGwgYmUgc3BsaXQgb3IgY29tcGFjdGVk LikKK3RoZSBidWNrZXQgZnJvbSBiZWluZyByZW9yZ2FuaXplZCBieSBzcGxpdHMgb3IgY29tcGFj dGlvbnMgd2hpbGUgdGhlIHNjYW4gaXMKK2luIHByb2dyZXNzLiAgKE9mIGNvdXJzZSwgb3RoZXIg YnVja2V0cyBjYW4gc3RpbGwgYmUgc3BsaXQgb3IgY29tcGFjdGVkLikKIAotVG8gbWluaW1pemUg bG9jay91bmxvY2sgdHJhZmZpYywgaGFzaCBpbmRleCBzY2FuIGFsd2F5cyBzZWFyY2hlcyB0aGUg ZW50aXJlCi1oYXNoIHBhZ2UgdG8gaWRlbnRpZnkgYWxsIHRoZSBtYXRjaGluZyBpdGVtcyBhdCBv bmNlLCBjb3B5aW5nIHRoZWlyIGhlYXAgdHVwbGUKLUlEcyBpbnRvIGJhY2tlbmQtbG9jYWwgc3Rv cmFnZS4gVGhlIGhlYXAgdHVwbGUgSURzIGFyZSB0aGVuIHByb2Nlc3NlZCB3aGlsZSBub3QKLWhv bGRpbmcgYW55IHBhZ2UgbG9jayB3aXRoaW4gdGhlIGluZGV4IHRoZXJlYnksIGFsbG93aW5nIGNv bmN1cnJlbnQgaW5zZXJ0aW9uCi10byBoYXBwZW4gb24gdGhlIHNhbWUgaW5kZXggcGFnZSB3aXRo b3V0IGFueSByZXF1aXJlbWVudCBvZiByZS1maW5kaW5nIHRoZQotY3VycmVudCBzY2FuIHBvc2l0 aW9uIGZvciB0aGUgcmVhZGVyLiBXZSBkbyBjb250aW51ZSB0byBob2xkIGEgcGluIG9uIHRoZQot YnVja2V0IHBhZ2UsIHRvIHByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IGRlbGV0aW9ucyBhbmQg YnVja2V0IHNwbGl0LgorVG8gbWluaW1pemUgbG9jay91bmxvY2sgdHJhZmZpYywgaGFzaCBpbmRl eCBzY2FucyBhbHdheXMgc2VhcmNoIHRoZSBlbnRpcmUKK2hhc2ggcGFnZSB0byBpZGVudGlmeSBh bGwgdGhlIG1hdGNoaW5nIGl0ZW1zIGF0IG9uY2UsIHJldHVybmluZyB0aGVtIGluCitiYXRjaGVz IHRvIHRoZSB0YWJsZSBBTS4gIFRoZSB0YWJsZSBBTSBwcm9jZXNzZXMgYmF0Y2hlcyB3aGlsZSBu byBwYWdlIGxvY2sKK2lzIGhlbGQgd2l0aGluIHRoZSBpbmRleCwgYWxsb3dpbmcgY29uY3VycmVu dCBpbnNlcnRpb24gdG8gaGFwcGVuIG9uIHRoZQorc2FtZSBpbmRleCBwYWdlIHdpdGhvdXQgYW55 IHJlcXVpcmVtZW50IG9mIHJlLWZpbmRpbmcgdGhlIGN1cnJlbnQgc2NhbgorcG9zaXRpb24gZm9y IHRoZSByZWFkZXIuICBUaGUgdGFibGUgQU0gY29udHJvbHMgd2hlbiBiYXRjaCBidWZmZXIgcGlu cyBhcmUKK2Ryb3BwZWQuICBXZSBkbyBjb250aW51ZSB0byBob2xkIGEgcGluIG9uIHRoZSBwcmlt YXJ5IGJ1Y2tldCBwYWdlLCB0bworcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgYnVja2V0IHNw bGl0cy4KIAogVG8gYWxsb3cgZm9yIHNjYW5zIGR1cmluZyBhIGJ1Y2tldCBzcGxpdCwgaWYgYXQg dGhlIHN0YXJ0IG9mIHRoZSBzY2FuLCB0aGUKIGJ1Y2tldCBpcyBtYXJrZWQgYXMgYnVja2V0LWJl aW5nLXBvcHVsYXRlZCwgaXQgc2NhbiBhbGwgdGhlIHR1cGxlcyBpbiB0aGF0CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNoLmMKaW5kZXggOTI4MjRhYTVkLi42ZjRmNzFlNWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNo LmMKQEAgLTEwMSw5ICsxMDEsOSBAQCBoYXNoaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQku YW1hZGp1c3RtZW1iZXJzID0gaGFzaGFkanVzdG1lbWJlcnMsCiAJCS5hbWJlZ2luc2NhbiA9IGhh c2hiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGhhc2hyZXNjYW4sCi0JCS5hbWdldHR1cGxlID0g aGFzaGdldHR1cGxlLAotCQkuYW1nZXRiYXRjaCA9IE5VTEwsCi0JCS5hbWtpbGxpdGVtc2JhdGNo ID0gTlVMTCwKKwkJLmFtZ2V0dHVwbGUgPSBOVUxMLAorCQkuYW1nZXRiYXRjaCA9IGhhc2hnZXRi YXRjaCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBoYXNoa2lsbGl0ZW1zYmF0Y2gsCiAJCS5hbWdl dGJpdG1hcCA9IGhhc2hnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBoYXNoZW5kc2NhbiwKIAkJ LmFtcG9zcmVzZXQgPSBOVUxMLApAQCAtMjg2LDUzICsyODYsMjggQEAgaGFzaGluc2VydChSZWxh dGlvbiByZWwsIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIAogCiAvKgotICoJaGFzaGdl dHR1cGxlKCkgLS0gR2V0IHRoZSBuZXh0IHR1cGxlIGluIHRoZSBzY2FuLgorICoJaGFzaGdldGJh dGNoKCkgLS0gR2V0IHRoZSBmaXJzdCBvciBuZXh0IGJhdGNoIG9mIHR1cGxlcyBpbiB0aGUgc2Nh bgogICovCi1ib29sCi1oYXNoZ2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcikKK0luZGV4U2NhbkJhdGNoCitoYXNoZ2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2Fu LCBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlIYXNo U2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCWJvb2wJCXJl czsKIAogCS8qIEhhc2ggaW5kZXhlcyBhcmUgYWx3YXlzIGxvc3N5IHNpbmNlIHdlIHN0b3JlIG9u bHkgdGhlIGhhc2ggY29kZSAqLwogCXNjYW4tPnhzX3JlY2hlY2sgPSB0cnVlOwogCi0JLyoKLQkg KiBJZiB3ZSd2ZSBhbHJlYWR5IGluaXRpYWxpemVkIHRoaXMgc2Nhbiwgd2UgY2FuIGp1c3QgYWR2 YW5jZSBpdCBpbiB0aGUKLQkgKiBhcHByb3ByaWF0ZSBkaXJlY3Rpb24uICBJZiB3ZSBoYXZlbid0 IGRvbmUgc28geWV0LCB3ZSBjYWxsIGEgcm91dGluZSB0bwotCSAqIGdldCB0aGUgZmlyc3QgaXRl bSBpbiB0aGUgc2Nhbi4KLQkgKi8KLQlpZiAoIUhhc2hTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBv cykpCi0JCXJlcyA9IF9oYXNoX2ZpcnN0KHNjYW4sIGRpcik7Ci0JZWxzZQorCWlmIChwcmlvcmJh dGNoID09IE5VTEwpCiAJewotCQkvKgotCQkgKiBDaGVjayB0byBzZWUgaWYgd2Ugc2hvdWxkIGtp bGwgdGhlIHByZXZpb3VzbHktZmV0Y2hlZCB0dXBsZS4KLQkJICovCi0JCWlmIChzY2FuLT5raWxs X3ByaW9yX3R1cGxlKQotCQl7Ci0JCQkvKgotCQkJICogWWVzLCBzbyByZW1lbWJlciBpdCBmb3Ig bGF0ZXIuIChXZSdsbCBkZWFsIHdpdGggYWxsIHN1Y2ggdHVwbGVzCi0JCQkgKiBhdCBvbmNlIHJp Z2h0IGFmdGVyIGxlYXZpbmcgdGhlIGluZGV4IHBhZ2Ugb3IgYXQgZW5kIG9mIHNjYW4uKQotCQkJ ICogSW4gY2FzZSBpZiBjYWxsZXIgcmV2ZXJzZXMgdGhlIGluZGV4c2NhbiBkaXJlY3Rpb24gaXQg aXMgcXVpdGUKLQkJCSAqIHBvc3NpYmxlIHRoYXQgdGhlIHNhbWUgaXRlbSBtaWdodCBnZXQgZW50 ZXJlZCBtdWx0aXBsZSB0aW1lcy4KLQkJCSAqIEJ1dCwgd2UgZG9uJ3QgZGV0ZWN0IHRoYXQ7IGlu c3RlYWQsIHdlIGp1c3QgZm9yZ2V0IGFueSBleGNlc3MKLQkJCSAqIGVudHJpZXMuCi0JCQkgKi8K LQkJCWlmIChzby0+a2lsbGVkSXRlbXMgPT0gTlVMTCkKLQkJCQlzby0+a2lsbGVkSXRlbXMgPSBw YWxsb2NfYXJyYXkoaW50LCBNYXhJbmRleFR1cGxlc1BlclBhZ2UpOworCQlSZWxhdGlvbglyZWwg PSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCi0JCQlpZiAoc28tPm51bUtpbGxlZCA8IE1heEluZGV4 VHVwbGVzUGVyUGFnZSkKLQkJCQlzby0+a2lsbGVkSXRlbXNbc28tPm51bUtpbGxlZCsrXSA9IHNv LT5jdXJyUG9zLml0ZW1JbmRleDsKLQkJfQorCQlfaGFzaF9kcm9wc2NhbmJ1ZihyZWwsIHNvKTsK IAotCQkvKgotCQkgKiBOb3cgY29udGludWUgdGhlIHNjYW4uCi0JCSAqLwotCQlyZXMgPSBfaGFz aF9uZXh0KHNjYW4sIGRpcik7CisJCS8qIEluaXRpYWxpemUgdGhlIHNjYW4sIGFuZCByZXR1cm4g Zmlyc3QgYmF0Y2ggb2YgbWF0Y2hpbmcgaXRlbXMgKi8KKwkJcmV0dXJuIF9oYXNoX2ZpcnN0KHNj YW4sIGRpcik7CiAJfQogCi0JcmV0dXJuIHJlczsKKwkvKiBSZXR1cm4gYmF0Y2ggcG9zaXRpb25l ZCBhZnRlciBjYWxsZXIncyBiYXRjaCAoaW4gZGlyZWN0aW9uICdkaXInKSAqLworCXJldHVybiBf aGFzaF9uZXh0KHNjYW4sIGRpciwgcHJpb3JiYXRjaCk7CiB9CiAKIApAQCAtMzQyLDI2ICszMTcs MjIgQEAgaGFzaGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp CiBpbnQ2NAogaGFzaGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJt KQogewotCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7 Ci0JYm9vbAkJcmVzOworCUluZGV4U2NhbkJhdGNoIGJhdGNoOwogCWludDY0CQludGlkcyA9IDA7 Ci0JSGFzaFNjYW5Qb3NJdGVtICpjdXJySXRlbTsKIAotCXJlcyA9IF9oYXNoX2ZpcnN0KHNjYW4s IEZvcndhcmRTY2FuRGlyZWN0aW9uKTsKKwliYXRjaCA9IF9oYXNoX2ZpcnN0KHNjYW4sIEZvcndh cmRTY2FuRGlyZWN0aW9uKTsKIAotCXdoaWxlIChyZXMpCisJd2hpbGUgKGJhdGNoICE9IE5VTEwp CiAJewotCQljdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5k ZXhdOworCQlmb3IgKGludCBpdGVtSW5kZXggPSBiYXRjaC0+Zmlyc3RJdGVtOworCQkJIGl0ZW1J bmRleCA8PSBiYXRjaC0+bGFzdEl0ZW07CisJCQkgaXRlbUluZGV4KyspCisJCXsKKwkJCXRibV9h ZGRfdHVwbGVzKHRibSwgJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLmhlYXBUaWQsIDEsIHRydWUp OworCQkJbnRpZHMrKzsKKwkJfQogCi0JCS8qCi0JCSAqIF9oYXNoX2ZpcnN0IGFuZCBfaGFzaF9u ZXh0IGhhbmRsZSBlbGltaW5hdGUgZGVhZCBpbmRleCBlbnRyaWVzCi0JCSAqIHdoZW5ldmVyIHNj YW4tPmlnbm9yZV9raWxsZWRfdHVwbGVzIGlzIHRydWUuICBUaGVyZWZvcmUsIHRoZXJlJ3MKLQkJ ICogbm90aGluZyB0byBkbyBoZXJlIGV4Y2VwdCBhZGQgdGhlIHJlc3VsdHMgdG8gdGhlIFRJREJp dG1hcC4KLQkJICovCi0JCXRibV9hZGRfdHVwbGVzKHRibSwgJihjdXJySXRlbS0+aGVhcFRpZCks IDEsIHRydWUpOwotCQludGlkcysrOwotCi0JCXJlcyA9IF9oYXNoX25leHQoc2NhbiwgRm9yd2Fy ZFNjYW5EaXJlY3Rpb24pOworCQliYXRjaCA9IF9oYXNoX25leHQoc2NhbiwgRm9yd2FyZFNjYW5E aXJlY3Rpb24sIGJhdGNoKTsKIAl9CiAKIAlyZXR1cm4gbnRpZHM7CkBAIC0zODMsMTcgKzM1NCwx NCBAQCBoYXNoYmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlz KQogCXNjYW4gPSBSZWxhdGlvbkdldEluZGV4U2NhbihyZWwsIG5rZXlzLCBub3JkZXJieXMpOwog CiAJc28gPSAoSGFzaFNjYW5PcGFxdWUpIHBhbGxvY19vYmplY3QoSGFzaFNjYW5PcGFxdWVEYXRh KTsKLQlIYXNoU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwogCXNvLT5oYXNoc29fYnVj a2V0X2J1ZiA9IEludmFsaWRCdWZmZXI7CiAJc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmID0g SW52YWxpZEJ1ZmZlcjsKIAogCXNvLT5oYXNoc29fYnVjX3BvcHVsYXRlZCA9IGZhbHNlOwogCXNv LT5oYXNoc29fYnVjX3NwbGl0ID0gZmFsc2U7CiAKLQlzby0+a2lsbGVkSXRlbXMgPSBOVUxMOwot CXNvLT5udW1LaWxsZWQgPSAwOwotCiAJc2Nhbi0+b3BhcXVlID0gc287CisJc2Nhbi0+bWF4aXRl bXNiYXRjaCA9IE1heEluZGV4VHVwbGVzUGVyUGFnZTsKIAogCXJldHVybiBzY2FuOwogfQpAQCAt NDA4LDE4ICszNzYsOCBAQCBoYXNocmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBz Y2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3Bh cXVlKSBzY2FuLT5vcGFxdWU7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsK IAotCWlmIChIYXNoU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCXsKLQkJLyogQmVmb3Jl IGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwotCQlp ZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOwotCX0KLQog CV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOwogCi0JLyogc2V0IHBvc2l0aW9uIGludmFsaWQg KHRoaXMgd2lsbCBjYXVzZSBfaGFzaF9maXJzdCBjYWxsKSAqLwotCUhhc2hTY2FuUG9zSW52YWxp ZGF0ZShzby0+Y3VyclBvcyk7Ci0KIAkvKiBVcGRhdGUgc2NhbiBrZXksIGlmIGEgbmV3IG9uZSBp cyBnaXZlbiAqLwogCWlmIChzY2Fua2V5ICYmIHNjYW4tPm51bWJlck9mS2V5cyA+IDApCiAJCW1l bWNweShzY2FuLT5rZXlEYXRhLCBzY2Fua2V5LCBzY2FuLT5udW1iZXJPZktleXMgKiBzaXplb2Yo U2NhbktleURhdGEpKTsKQEAgLTQyOCw2ICszODYsODEgQEAgaGFzaHJlc2NhbihJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAlzby0+aGFzaHNvX2J1 Y19zcGxpdCA9IGZhbHNlOwogfQogCisvKgorICoJaGFzaGtpbGxpdGVtc2JhdGNoKCkgLS0gTWFy ayBraWxsZWQgaXRlbXMnIGluZGV4IHR1cGxlcyBMUF9ERUFECisgKi8KK3ZvaWQKK2hhc2hraWxs aXRlbXNiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQorewor CVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CisJQnVmZmVyCQlidWY7CisJUGFn ZQkJcGFnZTsKKwlIYXNoUGFnZU9wYXF1ZSBvcGFxdWU7CisJT2Zmc2V0TnVtYmVyIG9mZm51bSwK KwkJCQltYXhvZmY7CisJYm9vbAkJa2lsbGVkc29tZXRoaW5nID0gZmFsc2U7CisJWExvZ1JlY1B0 cglsYXRlc3Rsc247CisKKwlBc3NlcnQoYmF0Y2gtPm51bUtpbGxlZCA+IDApOworCUFzc2VydChC bG9ja051bWJlcklzVmFsaWQoYmF0Y2gtPmN1cnJQYWdlKSk7CisKKwlidWYgPSBfaGFzaF9nZXRi dWYocmVsLCBiYXRjaC0+Y3VyclBhZ2UsIEhBU0hfUkVBRCwKKwkJCQkJICAgTEhfQlVDS0VUX1BB R0UgfCBMSF9PVkVSRkxPV19QQUdFKTsKKworCWxhdGVzdGxzbiA9IEJ1ZmZlckdldExTTkF0b21p YyhidWYpOworCUFzc2VydChiYXRjaC0+bHNuIDw9IGxhdGVzdGxzbik7CisJaWYgKGJhdGNoLT5s c24gIT0gbGF0ZXN0bHNuKQorCXsKKwkJLyogTW9kaWZpZWQsIGdpdmUgdXAgb24gaGludGluZyAq LworCQlfaGFzaF9yZWxidWYocmVsLCBidWYpOworCQlyZXR1cm47CisJfQorCisJcGFnZSA9IEJ1 ZmZlckdldFBhZ2UoYnVmKTsKKwlvcGFxdWUgPSBIYXNoUGFnZUdldE9wYXF1ZShwYWdlKTsKKwlt YXhvZmYgPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOworCisJLyogSXRlcmF0ZSB0aHJv dWdoIGJhdGNoLT5raWxsZWRJdGVtc1tdIGluIGluZGV4IHBhZ2Ugb3JkZXIgKi8KKwlmb3IgKGlu dCBpID0gMDsgaSA8IGJhdGNoLT5udW1LaWxsZWQ7IGkrKykKKwl7CisJCWludAkJCWl0ZW1JbmRl eCA9IGJhdGNoLT5raWxsZWRJdGVtc1tpXTsKKwkJQmF0Y2hNYXRjaGluZ0l0ZW0gKmN1cnJJdGVt ID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdOworCisJCW9mZm51bSA9IGN1cnJJdGVtLT5pbmRl eE9mZnNldDsKKworCQlBc3NlcnQoaXRlbUluZGV4ID49IGJhdGNoLT5maXJzdEl0ZW0gJiYKKwkJ CSAgIGl0ZW1JbmRleCA8PSBiYXRjaC0+bGFzdEl0ZW0pOworCisJCXdoaWxlIChvZmZudW0gPD0g bWF4b2ZmKQorCQl7CisJCQlJdGVtSWQJCWlpZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgb2ZmbnVt KTsKKwkJCUluZGV4VHVwbGUJaXR1cGxlID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2Us IGlpZCk7CisKKwkJCWlmIChJdGVtUG9pbnRlckVxdWFscygmaXR1cGxlLT50X3RpZCwgJmN1cnJJ dGVtLT5oZWFwVGlkKSkKKwkJCXsKKwkJCQkvKiBmb3VuZCB0aGUgaXRlbSAqLworCQkJCUl0ZW1J ZE1hcmtEZWFkKGlpZCk7CisJCQkJa2lsbGVkc29tZXRoaW5nID0gdHJ1ZTsKKwkJCQlicmVhazsJ CQkvKiBvdXQgb2YgaW5uZXIgc2VhcmNoIGxvb3AgKi8KKwkJCX0KKwkJCW9mZm51bSA9IE9mZnNl dE51bWJlck5leHQob2ZmbnVtKTsKKwkJfQorCX0KKworCS8qCisJICogU2luY2UgdGhpcyBjYW4g YmUgcmVkb25lIGxhdGVyIGlmIG5lZWRlZCwgbWFyayBhcyBkaXJ0eSBoaW50LiBXaGVuZXZlcgor CSAqIHdlIG1hcmsgYW55dGhpbmcgTFBfREVBRCwgd2UgYWxzbyBzZXQgdGhlIHBhZ2UncworCSAq IExIX1BBR0VfSEFTX0RFQURfVFVQTEVTIGZsYWcsIHdoaWNoIGlzIGxpa2V3aXNlIGp1c3QgYSBo aW50LgorCSAqLworCWlmIChraWxsZWRzb21ldGhpbmcpCisJeworCQlvcGFxdWUtPmhhc2hvX2Zs YWcgfD0gTEhfUEFHRV9IQVNfREVBRF9UVVBMRVM7CisJCU1hcmtCdWZmZXJEaXJ0eUhpbnQoYnVm LCB0cnVlKTsKKwl9CisKKwlfaGFzaF9yZWxidWYocmVsLCBidWYpOworfQorCiAvKgogICoJaGFz aGVuZHNjYW4oKSAtLSBjbG9zZSBkb3duIGEgc2NhbgogICovCkBAIC00MzcsMTcgKzQ3MCw4IEBA IGhhc2hlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChI YXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4 UmVsYXRpb247CiAKLQlpZiAoSGFzaFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQl7Ci0J CS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRl bXMgKi8KLQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2Fu KTsKLQl9Ci0KIAlfaGFzaF9kcm9wc2NhbmJ1ZihyZWwsIHNvKTsKIAotCWlmIChzby0+a2lsbGVk SXRlbXMgIT0gTlVMTCkKLQkJcGZyZWUoc28tPmtpbGxlZEl0ZW1zKTsKIAlwZnJlZShzbyk7CiAJ c2Nhbi0+b3BhcXVlID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9o YXNoL2hhc2hfeGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaF94bG9nLmMKaW5k ZXggMjA2MDYyMGM3Li5lMjZlZThiYjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9o YXNoL2hhc2hfeGxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hfeGxvZy5j CkBAIC0xMTQxLDE0ICsxMTQxLDE0IEBAIGhhc2hfbWFzayhjaGFyICpwYWdlZGF0YSwgQmxvY2tO dW1iZXIgYmxrbm8pCiAJCS8qCiAJCSAqIEluIGhhc2ggYnVja2V0IGFuZCBvdmVyZmxvdyBwYWdl cywgaXQgaXMgcG9zc2libGUgdG8gbW9kaWZ5IHRoZQogCQkgKiBMUF9GTEFHUyB3aXRob3V0IGVt aXR0aW5nIGFueSBXQUwgcmVjb3JkLiBIZW5jZSwgbWFzayB0aGUgbGluZQotCQkgKiBwb2ludGVy IGZsYWdzLiBTZWUgaGFzaGdldHR1cGxlKCksIF9oYXNoX2tpbGxfaXRlbXMoKSBmb3IgZGV0YWls cy4KKwkJICogcG9pbnRlciBmbGFncy4gU2VlIGhhc2hraWxsaXRlbXNiYXRjaCgpIGZvciBkZXRh aWxzLgogCQkgKi8KIAkJbWFza19scF9mbGFncyhwYWdlKTsKIAl9CiAKIAkvKgogCSAqIEl0IGlz IHBvc3NpYmxlIHRoYXQgdGhlIGhpbnQgYml0IExIX1BBR0VfSEFTX0RFQURfVFVQTEVTIG1heSBy ZW1haW4KLQkgKiB1bmxvZ2dlZC4gU28sIG1hc2sgaXQuIFNlZSBfaGFzaF9raWxsX2l0ZW1zKCkg Zm9yIGRldGFpbHMuCisJICogdW5sb2dnZWQuIFNvLCBtYXNrIGl0LiBTZWUgaGFzaGtpbGxpdGVt c2JhdGNoKCkgZm9yIGRldGFpbHMuCiAJICovCiAJb3BhcXVlLT5oYXNob19mbGFnICY9IH5MSF9Q QUdFX0hBU19ERUFEX1RVUExFUzsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9o YXNoL2hhc2hwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCmluZGV4 IDI2M2JjNzNmMS4uMmJjOGJlYTIyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNocGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMKQEAg LTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJwb3J0L3BnX2JpdHV0aWxzLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIKKyNpbmNsdWRl ICJ1dGlscy9tZW1kZWJ1Zy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCiBzdGF0aWMgYm9v bCBfaGFzaF9hbGxvY19idWNrZXRzKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgZmlyc3RibG9j aywKQEAgLTc5LDYgKzgwLDkgQEAgX2hhc2hfZ2V0YnVmKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1i ZXIgYmxrbm8sIGludCBhY2Nlc3MsIGludCBmbGFncykKIAlpZiAoYWNjZXNzICE9IEhBU0hfTk9M T0NLKQogCQlMb2NrQnVmZmVyKGJ1ZiwgYWNjZXNzKTsKIAorCWlmICghUmVsYXRpb25Vc2VzTG9j YWxCdWZmZXJzKHJlbCkpCisJCVZBTEdSSU5EX01BS0VfTUVNX0RFRklORUQoQnVmZmVyR2V0UGFn ZShidWYpLCBCTENLU1opOworCiAJLyogcmVmIGNvdW50IGFuZCBsb2NrIHR5cGUgYXJlIGNvcnJl Y3QgKi8KIAogCV9oYXNoX2NoZWNrcGFnZShyZWwsIGJ1ZiwgZmxhZ3MpOwpAQCAtMTA4LDYgKzEx Miw5IEBAIF9oYXNoX2dldGJ1Zl93aXRoX2NvbmRsb2NrX2NsZWFudXAoUmVsYXRpb24gcmVsLCBC bG9ja051bWJlciBibGtubywgaW50IGZsYWdzKQogCQlyZXR1cm4gSW52YWxpZEJ1ZmZlcjsKIAl9 CiAKKwlpZiAoIVJlbGF0aW9uVXNlc0xvY2FsQnVmZmVycyhyZWwpKQorCQlWQUxHUklORF9NQUtF X01FTV9ERUZJTkVEKEJ1ZmZlckdldFBhZ2UoYnVmKSwgQkxDS1NaKTsKKwogCS8qIHJlZiBjb3Vu dCBhbmQgbG9jayB0eXBlIGFyZSBjb3JyZWN0ICovCiAKIAlfaGFzaF9jaGVja3BhZ2UocmVsLCBi dWYsIGZsYWdzKTsKQEAgLTI4MCwzMSArMjg3LDI0IEBAIF9oYXNoX2Ryb3BidWYoUmVsYXRpb24g cmVsLCBCdWZmZXIgYnVmKQogfQogCiAvKgotICoJX2hhc2hfZHJvcHNjYW5idWYoKSAtLSByZWxl YXNlIGJ1ZmZlcnMgdXNlZCBpbiBzY2FuLgorICoJX2hhc2hfZHJvcHNjYW5idWYoKSAtLSByZWxl YXNlIGJ1ZmZlcnMgb3duZWQgYnkgc2Nhbi4KICAqCi0gKiBUaGlzIHJvdXRpbmUgdW5waW5zIHRo ZSBidWZmZXJzIHVzZWQgZHVyaW5nIHNjYW4gb24gd2hpY2ggd2UKLSAqIGhvbGQgbm8gbG9jay4K KyAqIFRoaXMgcm91dGluZSB1bnBpbnMgdGhlIGJ1ZmZlcnMgZm9yIHRoZSBwcmltYXJ5IGJ1Y2tl dCBwYWdlIGFuZCBmb3IgdGhlCisgKiBidWNrZXQgcGFnZSBvZiBhIGJ1Y2tldCBiZWluZyBzcGxp dCBhcyBuZWVkZWQuCiAgKi8KIHZvaWQKIF9oYXNoX2Ryb3BzY2FuYnVmKFJlbGF0aW9uIHJlbCwg SGFzaFNjYW5PcGFxdWUgc28pCiB7CiAJLyogcmVsZWFzZSBwaW4gd2UgaG9sZCBvbiBwcmltYXJ5 IGJ1Y2tldCBwYWdlICovCi0JaWYgKEJ1ZmZlcklzVmFsaWQoc28tPmhhc2hzb19idWNrZXRfYnVm KSAmJgotCQlzby0+aGFzaHNvX2J1Y2tldF9idWYgIT0gc28tPmN1cnJQb3MuYnVmKQorCWlmIChC dWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29fYnVja2V0X2J1ZikpCiAJCV9oYXNoX2Ryb3BidWYocmVs LCBzby0+aGFzaHNvX2J1Y2tldF9idWYpOwogCXNvLT5oYXNoc29fYnVja2V0X2J1ZiA9IEludmFs aWRCdWZmZXI7CiAKLQkvKiByZWxlYXNlIHBpbiB3ZSBob2xkIG9uIHByaW1hcnkgYnVja2V0IHBh Z2UgIG9mIGJ1Y2tldCBiZWluZyBzcGxpdCAqLwotCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNo c29fc3BsaXRfYnVja2V0X2J1ZikgJiYKLQkJc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmICE9 IHNvLT5jdXJyUG9zLmJ1ZikKKwkvKiByZWxlYXNlIHBpbiBoZWxkIG9uIHByaW1hcnkgYnVja2V0 IHBhZ2Ugb2YgYnVja2V0IGJlaW5nIHNwbGl0ICovCisJaWYgKEJ1ZmZlcklzVmFsaWQoc28tPmhh c2hzb19zcGxpdF9idWNrZXRfYnVmKSkKIAkJX2hhc2hfZHJvcGJ1ZihyZWwsIHNvLT5oYXNoc29f c3BsaXRfYnVja2V0X2J1Zik7CiAJc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmID0gSW52YWxp ZEJ1ZmZlcjsKIAotCS8qIHJlbGVhc2UgYW55IHBpbiB3ZSBzdGlsbCBob2xkICovCi0JaWYgKEJ1 ZmZlcklzVmFsaWQoc28tPmN1cnJQb3MuYnVmKSkKLQkJX2hhc2hfZHJvcGJ1ZihyZWwsIHNvLT5j dXJyUG9zLmJ1Zik7Ci0Jc28tPmN1cnJQb3MuYnVmID0gSW52YWxpZEJ1ZmZlcjsKLQogCS8qIHJl c2V0IHNwbGl0IHNjYW4gKi8KIAlzby0+aGFzaHNvX2J1Y19wb3B1bGF0ZWQgPSBmYWxzZTsKIAlz by0+aGFzaHNvX2J1Y19zcGxpdCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaHNlYXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJj aC5jCmluZGV4IDg5ZDFjNWJjNi4uYWEyOTU1YzdiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFz aHNlYXJjaC5jCkBAIC0yMiwxMDUgKzIyLDgzIEBACiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNh dGUuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAotc3RhdGljIGJvb2wgX2hhc2hfcmVhZHBh Z2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgKmJ1ZlAsCi0JCQkJCQkgICBTY2FuRGlyZWN0 aW9uIGRpcik7CitzdGF0aWMgYm9vbCBfaGFzaF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4s IEJ1ZmZlciBidWYsIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2gg YmF0Y2gpOwogc3RhdGljIGludAlfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNjYW5E ZXNjIHNjYW4sIFBhZ2UgcGFnZSwKLQkJCQkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sIFNj YW5EaXJlY3Rpb24gZGlyKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBfaGFzaF9zYXZlaXRlbShIYXNo U2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKKwkJCQkJCQkJCSAgIE9mZnNldE51bWJlciBv ZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggYmF0 Y2gpOworc3RhdGljIGlubGluZSB2b2lkIF9oYXNoX3NhdmVpdGVtKEluZGV4U2NhbkJhdGNoIGJh dGNoLCBpbnQgaXRlbUluZGV4LAogCQkJCQkJCQkgIE9mZnNldE51bWJlciBvZmZudW0sIEluZGV4 VHVwbGUgaXR1cCk7CiBzdGF0aWMgdm9pZCBfaGFzaF9yZWFkbmV4dChJbmRleFNjYW5EZXNjIHNj YW4sIEJ1ZmZlciAqYnVmcCwKIAkJCQkJCSAgIFBhZ2UgKnBhZ2VwLCBIYXNoUGFnZU9wYXF1ZSAq b3BhcXVlcCk7CiAKIC8qCi0gKglfaGFzaF9uZXh0KCkgLS0gR2V0IHRoZSBuZXh0IGl0ZW0gaW4g YSBzY2FuLgorICoJX2hhc2hfbmV4dCgpIC0tIEdldCB0aGUgbmV4dCBiYXRjaCBvZiBpdGVtcyBp biBhIHNjYW4uCiAgKgotICoJCU9uIGVudHJ5LCBzby0+Y3VyclBvcyBkZXNjcmliZXMgdGhlIGN1 cnJlbnQgcGFnZSwgd2hpY2ggbWF5Ci0gKgkJYmUgcGlubmVkIGJ1dCBub3QgbG9ja2VkLCBhbmQg c28tPmN1cnJQb3MuaXRlbUluZGV4IGlkZW50aWZpZXMKLSAqCQl3aGljaCBpdGVtIHdhcyBwcmV2 aW91c2x5IHJldHVybmVkLgorICoJCU9uIGVudHJ5LCBwcmlvcmJhdGNoIGRlc2NyaWJlcyB0aGUg Y3VycmVudCBwYWdlIGJhdGNoIHdpdGggaXRlbXMKKyAqCQlhbHJlYWR5IHJldHVybmVkLgogICoK LSAqCQlPbiBzdWNjZXNzZnVsIGV4aXQsIHNjYW4tPnhzX2hlYXB0aWQgaXMgc2V0IHRvIHRoZSBU SUQgb2YgdGhlIG5leHQKLSAqCQloZWFwIHR1cGxlLiAgc28tPmN1cnJQb3MgaXMgdXBkYXRlZCBh cyBuZWVkZWQuCisgKgkJT24gc3VjY2Vzc2Z1bCBleGl0LCByZXR1cm5zIGEgYmF0Y2ggY29udGFp bmluZyBtYXRjaGluZyBpdGVtcyBmcm9tCisgKgkJbmV4dCBwYWdlLiAgT3RoZXJ3aXNlIHJldHVy bnMgTlVMTCwgaW5kaWNhdGluZyB0aGF0IHRoZXJlIGFyZSBubworICoJCWZ1cnRoZXIgbWF0Y2hl cy4gIE5vIGxvY2tzIGFyZSBldmVyIGhlbGQgd2hlbiB3ZSByZXR1cm4uCiAgKgotICoJCU9uIGZh aWx1cmUgZXhpdCAobm8gbW9yZSB0dXBsZXMpLCB3ZSByZXR1cm4gZmFsc2Ugd2l0aCBwaW4KLSAq CQloZWxkIG9uIGJ1Y2tldCBwYWdlIGJ1dCBubyBwaW5zIG9yIGxvY2tzIGhlbGQgb24gb3ZlcmZs b3cKLSAqCQlwYWdlLgorICoJCVJldGFpbnMgcGlucyBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgcnVs ZXMgYXMgX2hhc2hfZmlyc3QuCiAgKi8KLWJvb2wKLV9oYXNoX25leHQoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK0luZGV4U2NhbkJhdGNoCitfaGFzaF9uZXh0KEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0 Y2gpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAlIYXNoU2Nhbk9w YXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCUhhc2hTY2FuUG9zSXRl bSAqY3Vyckl0ZW07CiAJQmxvY2tOdW1iZXIgYmxrbm87CiAJQnVmZmVyCQlidWY7Ci0JYm9vbAkJ ZW5kX29mX3NjYW4gPSBmYWxzZTsKKwlJbmRleFNjYW5CYXRjaCBiYXRjaDsKIAogCS8qCi0JICog QWR2YW5jZSB0byB0aGUgbmV4dCB0dXBsZSBvbiB0aGUgY3VycmVudCBwYWdlOyBvciBpZiBkb25l LCB0cnkgdG8gcmVhZAotCSAqIGRhdGEgZnJvbSB0aGUgbmV4dCBvciBwcmV2aW91cyBwYWdlIGJh c2VkIG9uIHRoZSBzY2FuIGRpcmVjdGlvbi4gQmVmb3JlCi0JICogbW92aW5nIHRvIHRoZSBuZXh0 IG9yIHByZXZpb3VzIHBhZ2UgbWFrZSBzdXJlIHRoYXQgd2UgZGVhbCB3aXRoIGFsbCB0aGUKLQkg KiBraWxsZWQgaXRlbXMuCisJICogRGV0ZXJtaW5lIHdoaWNoIHBhZ2UgdG8gcmVhZCBuZXh0IGJh c2VkIG9uIHNjYW4gZGlyZWN0aW9uIGFuZCBkZXRhaWxzCisJICogdGFrZW4gZnJvbSB0aGUgcHJp b3IgYmF0Y2gKIAkgKi8KIAlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQogCXsKLQkJ aWYgKCsrc28tPmN1cnJQb3MuaXRlbUluZGV4ID4gc28tPmN1cnJQb3MubGFzdEl0ZW0pCi0JCXsK LQkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOwot Ci0JCQlibGtubyA9IHNvLT5jdXJyUG9zLm5leHRQYWdlOwotCQkJaWYgKEJsb2NrTnVtYmVySXNW YWxpZChibGtubykpCi0JCQl7Ci0JCQkJYnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhB U0hfUkVBRCwgTEhfT1ZFUkZMT1dfUEFHRSk7Ci0JCQkJaWYgKCFfaGFzaF9yZWFkcGFnZShzY2Fu LCAmYnVmLCBkaXIpKQotCQkJCQllbmRfb2Zfc2NhbiA9IHRydWU7Ci0JCQl9Ci0JCQllbHNlCi0J CQkJZW5kX29mX3NjYW4gPSB0cnVlOwotCQl9CisJCWJsa25vID0gcHJpb3JiYXRjaC0+bmV4dFBh Z2U7CisJCWlmICghQmxvY2tOdW1iZXJJc1ZhbGlkKGJsa25vKSB8fCAhcHJpb3JiYXRjaC0+bW9y ZVJpZ2h0KQorCQkJcmV0dXJuIE5VTEw7CiAJfQogCWVsc2UKIAl7Ci0JCWlmICgtLXNvLT5jdXJy UG9zLml0ZW1JbmRleCA8IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSkKLQkJewotCQkJaWYgKHNvLT5u dW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7Ci0KLQkJCWJsa25vID0g c28tPmN1cnJQb3MucHJldlBhZ2U7Ci0JCQlpZiAoQmxvY2tOdW1iZXJJc1ZhbGlkKGJsa25vKSkK LQkJCXsKLQkJCQlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBibGtubywgSEFTSF9SRUFELAotCQkJ CQkJCQkgICBMSF9CVUNLRVRfUEFHRSB8IExIX09WRVJGTE9XX1BBR0UpOwotCi0JCQkJLyoKLQkJ CQkgKiBXZSBhbHdheXMgbWFpbnRhaW4gdGhlIHBpbiBvbiBidWNrZXQgcGFnZSBmb3Igd2hvbGUg c2NhbgotCQkJCSAqIG9wZXJhdGlvbiwgc28gcmVsZWFzaW5nIHRoZSBhZGRpdGlvbmFsIHBpbiB3 ZSBoYXZlIGFjcXVpcmVkCi0JCQkJICogaGVyZS4KLQkJCQkgKi8KLQkJCQlpZiAoYnVmID09IHNv LT5oYXNoc29fYnVja2V0X2J1ZiB8fAotCQkJCQlidWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNr ZXRfYnVmKQotCQkJCQlfaGFzaF9kcm9wYnVmKHJlbCwgYnVmKTsKLQotCQkJCWlmICghX2hhc2hf cmVhZHBhZ2Uoc2NhbiwgJmJ1ZiwgZGlyKSkKLQkJCQkJZW5kX29mX3NjYW4gPSB0cnVlOwotCQkJ fQotCQkJZWxzZQotCQkJCWVuZF9vZl9zY2FuID0gdHJ1ZTsKLQkJfQorCQlibGtubyA9IHByaW9y YmF0Y2gtPnByZXZQYWdlOworCQlpZiAoIUJsb2NrTnVtYmVySXNWYWxpZChibGtubykgfHwgIXBy aW9yYmF0Y2gtPm1vcmVMZWZ0KQorCQkJcmV0dXJuIE5VTEw7CiAJfQogCi0JaWYgKGVuZF9vZl9z Y2FuKQorCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBuZXh0IGJhdGNoICovCisJYmF0Y2ggPSBpbmRl eGFtX3V0aWxfYmF0Y2hfYWxsb2Moc2Nhbik7CisKKwkvKiBHZXQgdGhlIGJ1ZmZlciBmb3IgbmV4 dCBiYXRjaCAqLworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJCWJ1ZiA9IF9o YXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQsIExIX09WRVJGTE9XX1BBR0UpOworCWVs c2UKIAl7Ci0JCV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOwotCQlIYXNoU2NhblBvc0ludmFs aWRhdGUoc28tPmN1cnJQb3MpOwotCQlyZXR1cm4gZmFsc2U7CisJCWJ1ZiA9IF9oYXNoX2dldGJ1 ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQsCisJCQkJCQkgICBMSF9CVUNLRVRfUEFHRSB8IExIX09W RVJGTE9XX1BBR0UpOworCisJCS8qCisJCSAqIFdlIGFsd2F5cyBtYWludGFpbiB0aGUgcGluIG9u IGJ1Y2tldCBwYWdlIGZvciB3aG9sZSBzY2FuIG9wZXJhdGlvbiwKKwkJICogc28gcmVsZWFzaW5n IHRoZSBhZGRpdGlvbmFsIHBpbiB3ZSBoYXZlIGFjcXVpcmVkIGhlcmUuCisJCSAqLworCQlpZiAo YnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8fAorCQkJYnVmID09IHNvLT5oYXNoc29fc3Bs aXRfYnVja2V0X2J1ZikKKwkJCV9oYXNoX2Ryb3BidWYocmVsLCBidWYpOwogCX0KIAotCS8qIE9L LCBpdGVtSW5kZXggc2F5cyB3aGF0IHRvIHJldHVybiAqLwotCWN1cnJJdGVtID0gJnNvLT5jdXJy UG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF07Ci0Jc2Nhbi0+eHNfaGVhcHRpZCA9IGN1 cnJJdGVtLT5oZWFwVGlkOworCS8qIFJlYWQgdGhlIG5leHQgcGFnZSBhbmQgbG9hZCBpdGVtcyBp bnRvIGFsbG9jYXRlZCBiYXRjaCAqLworCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgYnVmLCBk aXIsIGJhdGNoKSkKKwl7CisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGJhdGNo KTsKKwkJcmV0dXJuIE5VTEw7CisJfQogCi0JcmV0dXJuIHRydWU7CisJLyogUmV0dXJuIHRoZSBi YXRjaCBjb250YWluaW5nIG1hdGNoZWQgaXRlbXMgZnJvbSBuZXh0IHBhZ2UgKi8KKwlyZXR1cm4g YmF0Y2g7CiB9CiAKIC8qCkBAIC0yNzAsMjIgKzI0OCwyMCBAQCBfaGFzaF9yZWFkcHJldihJbmRl eFNjYW5EZXNjIHNjYW4sCiB9CiAKIC8qCi0gKglfaGFzaF9maXJzdCgpIC0tIEZpbmQgdGhlIGZp cnN0IGl0ZW0gaW4gYSBzY2FuLgorICoJX2hhc2hfZmlyc3QoKSAtLSBGaW5kIHRoZSBmaXJzdCBi YXRjaCBvZiBpdGVtcyBpbiBhIHNjYW4uCiAgKgotICoJCVdlIGZpbmQgdGhlIGZpcnN0IGl0ZW0g KG9yLCBpZiBiYWNrd2FyZCBzY2FuLCB0aGUgbGFzdCBpdGVtKSBpbiB0aGUKLSAqCQlpbmRleCB0 aGF0IHNhdGlzZmllcyB0aGUgcXVhbGlmaWNhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIHNjYW4K LSAqCQlkZXNjcmlwdG9yLgorICoJCVdlIGZpbmQgdGhlIGZpcnN0IGJhdGNoIG9mIGl0ZW1zIChv ciwgaWYgYmFja3dhcmQgc2NhbiwgdGhlIGxhc3QKKyAqCQliYXRjaCkgaW4gdGhlIGluZGV4IHRo YXQgc2F0aXNmaWVzIHRoZSBxdWFsaWZpY2F0aW9uIGFzc29jaWF0ZWQgd2l0aAorICoJCXRoZSBz Y2FuIGRlc2NyaXB0b3IuCiAgKgotICoJCU9uIHN1Y2Nlc3NmdWwgZXhpdCwgaWYgdGhlIHBhZ2Ug Y29udGFpbmluZyBjdXJyZW50IGluZGV4IHR1cGxlIGlzIGFuCi0gKgkJb3ZlcmZsb3cgcGFnZSwg Ym90aCBwaW4gYW5kIGxvY2sgYXJlIHJlbGVhc2VkIHdoZXJlYXMgaWYgaXQgaXMgYSBidWNrZXQK LSAqCQlwYWdlIHRoZW4gaXQgaXMgcGlubmVkIGJ1dCBub3QgbG9ja2VkIGFuZCBkYXRhIGFib3V0 IHRoZSBtYXRjaGluZwotICoJCXR1cGxlKHMpIG9uIHRoZSBwYWdlIGhhcyBiZWVuIGxvYWRlZCBp bnRvIHNvLT5jdXJyUG9zLAotICoJCXNjYW4tPnhzX2hlYXB0aWQgaXMgc2V0IHRvIHRoZSBoZWFw IFRJRCBvZiB0aGUgY3VycmVudCB0dXBsZS4KKyAqCQlPbiBzdWNjZXNzZnVsIGV4aXQsIHJldHVy bnMgYSBiYXRjaCBjb250YWluaW5nIG1hdGNoaW5nIGl0ZW1zLgorICoJCU90aGVyd2lzZSByZXR1 cm5zIE5VTEwsIGluZGljYXRpbmcgdGhhdCB0aGVyZSBhcmUgbm8gZnVydGhlciBtYXRjaGVzLgor ICoJCU5vIGxvY2tzIGFyZSBldmVyIGhlbGQgd2hlbiB3ZSByZXR1cm4uCiAgKgotICoJCU9uIGZh aWx1cmUgZXhpdCAobm8gbW9yZSB0dXBsZXMpLCB3ZSByZXR1cm4gZmFsc2UsIHdpdGggcGluIGhl bGQgb24KLSAqCQlidWNrZXQgcGFnZSBidXQgbm8gcGlucyBvciBsb2NrcyBoZWxkIG9uIG92ZXJm bG93IHBhZ2UuCisgKgkJV2UgYWx3YXlzIHJldGFpbiBvdXIgb3duIHBpbiBvbiB0aGUgYnVja2V0 IHBhZ2UuICBXaGVuIHdlIHJldHVybiBhCisgKgkJYmF0Y2ggd2l0aCBhIGJ1Y2tldCBwYWdlLCBp dCB3aWxsIHJldGFpbiBpdHMgb3duIHJlZmVyZW5jZSBwaW4uCiAgKi8KLWJvb2wKK0luZGV4U2Nh bkJhdGNoCiBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CkBAIC0yOTYsNyArMjcy LDcgQEAgX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikK IAlCdWZmZXIJCWJ1ZjsKIAlQYWdlCQlwYWdlOwogCUhhc2hQYWdlT3BhcXVlIG9wYXF1ZTsKLQlI YXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtOworCUluZGV4U2NhbkJhdGNoIGJhdGNoOwogCiAJcGdz dGF0X2NvdW50X2luZGV4X3NjYW4ocmVsKTsKIAlpZiAoc2Nhbi0+aW5zdHJ1bWVudCkKQEAgLTMy Niw3ICszMDIsNyBAQCBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyKQogCSAqIGl0ZW1zIGluIHRoZSBpbmRleC4KIAkgKi8KIAlpZiAoY3VyLT5za19mbGFn cyAmIFNLX0lTTlVMTCkKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gTlVMTDsKIAogCS8qCiAJ ICogT2theSB0byBjb21wdXRlIHRoZSBoYXNoIGtleS4gIFdlIHdhbnQgdG8gZG8gdGhpcyBiZWZv cmUgYWNxdWlyaW5nIGFueQpAQCAtNDE5LDE5MSArMzk1LDE2MCBAQCBfaGFzaF9maXJzdChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQkJX2hhc2hfcmVhZG5leHQoc2Nh biwgJmJ1ZiwgJnBhZ2UsICZvcGFxdWUpOwogCX0KIAotCS8qIHJlbWVtYmVyIHdoaWNoIGJ1ZmZl ciB3ZSBoYXZlIHBpbm5lZCwgaWYgYW55ICovCi0JQXNzZXJ0KEJ1ZmZlcklzSW52YWxpZChzby0+ Y3VyclBvcy5idWYpKTsKLQlzby0+Y3VyclBvcy5idWYgPSBidWY7CisJLyogQWxsb2NhdGUgc3Bh Y2UgZm9yIGZpcnN0IGJhdGNoICovCisJYmF0Y2ggPSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2Mo c2Nhbik7CiAKLQkvKiBOb3cgZmluZCBhbGwgdGhlIHR1cGxlcyBzYXRpc2Z5aW5nIHRoZSBxdWFs aWZpY2F0aW9uIGZyb20gYSBwYWdlICovCi0JaWYgKCFfaGFzaF9yZWFkcGFnZShzY2FuLCAmYnVm LCBkaXIpKQotCQlyZXR1cm4gZmFsc2U7CisJLyogUmVhZCB0aGUgZmlyc3QgcGFnZSBhbmQgbG9h ZCBpdGVtcyBpbnRvIGFsbG9jYXRlZCBiYXRjaCAqLworCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2Nh biwgYnVmLCBkaXIsIGJhdGNoKSkKKwl7CisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNj YW4sIGJhdGNoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQogCi0JLyogT0ssIGl0ZW1JbmRleCBzYXlz IHdoYXQgdG8gcmV0dXJuICovCi0JY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1 cnJQb3MuaXRlbUluZGV4XTsKLQlzY2FuLT54c19oZWFwdGlkID0gY3Vyckl0ZW0tPmhlYXBUaWQ7 Ci0KLQkvKiBpZiB3ZSdyZSBoZXJlLCBfaGFzaF9yZWFkcGFnZSBmb3VuZCBhIHZhbGlkIHR1cGxl cyAqLwotCXJldHVybiB0cnVlOworCS8qIFJldHVybiB0aGUgYmF0Y2ggY29udGFpbmluZyBtYXRj aGVkIGl0ZW1zICovCisJcmV0dXJuIGJhdGNoOwogfQogCiAvKgotICoJX2hhc2hfcmVhZHBhZ2Uo KSAtLSBMb2FkIGRhdGEgZnJvbSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBzby0+Y3VyclBvcwor ICoJX2hhc2hfcmVhZHBhZ2UoKSAtLSBMb2FkIGRhdGEgZnJvbSBjdXJyZW50IGluZGV4IHBhZ2Ug aW50byBiYXRjaAogICoKICAqCVdlIHNjYW4gYWxsIHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBp bmRleCBwYWdlIGFuZCBzYXZlIHRoZW0gaW50bwotICoJc28tPmN1cnJQb3MgaWYgaXQgc2F0aXNm aWVzIHRoZSBxdWFsaWZpY2F0aW9uLiBJZiBubyBtYXRjaGluZyBpdGVtcworICoJdGhlIGJhdGNo IGlmIHRoZXkgc2F0aXNmeSB0aGUgcXVhbGlmaWNhdGlvbi4gSWYgbm8gbWF0Y2hpbmcgaXRlbXMK ICAqCWFyZSBmb3VuZCBpbiB0aGUgY3VycmVudCBwYWdlLCB3ZSBtb3ZlIHRvIHRoZSBuZXh0IG9y IHByZXZpb3VzIHBhZ2UKICAqCWluIGEgYnVja2V0IGNoYWluIGFzIGluZGljYXRlZCBieSB0aGUg ZGlyZWN0aW9uLgogICoKICAqCVJldHVybiB0cnVlIGlmIGFueSBtYXRjaGluZyBpdGVtcyBhcmUg Zm91bmQgZWxzZSByZXR1cm4gZmFsc2UuCiAgKi8KIHN0YXRpYyBib29sCi1faGFzaF9yZWFkcGFn ZShJbmRleFNjYW5EZXNjIHNjYW4sIEJ1ZmZlciAqYnVmUCwgU2NhbkRpcmVjdGlvbiBkaXIpCitf aGFzaF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJ1ZmZlciBidWYsIFNjYW5EaXJlY3Rp b24gZGlyLAorCQkJICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiB7CiAJUmVsYXRpb24JcmVsID0g c2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1 ZSkgc2Nhbi0+b3BhcXVlOwotCUJ1ZmZlcgkJYnVmOwogCVBhZ2UJCXBhZ2U7CiAJSGFzaFBhZ2VP cGFxdWUgb3BhcXVlOwogCU9mZnNldE51bWJlciBvZmZudW07CiAJdWludDE2CQlpdGVtSW5kZXg7 CiAKLQlidWYgPSAqYnVmUDsKIAlBc3NlcnQoQnVmZmVySXNWYWxpZChidWYpKTsKIAlfaGFzaF9j aGVja3BhZ2UocmVsLCBidWYsIExIX0JVQ0tFVF9QQUdFIHwgTEhfT1ZFUkZMT1dfUEFHRSk7CiAJ cGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKIAlvcGFxdWUgPSBIYXNoUGFnZUdldE9wYXF1ZShw YWdlKTsKIAotCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKLQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9 IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7CisJYmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwliYXRjaC0+ Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOworCWJhdGNoLT5kaXIgPSBkaXI7 CiAKIAlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQogCXsKLQkJQmxvY2tOdW1iZXIg cHJldl9ibGtubyA9IEludmFsaWRCbG9ja051bWJlcjsKLQogCQlmb3IgKDs7KQogCQl7CiAJCQkv KiBuZXcgcGFnZSwgbG9jYXRlIHN0YXJ0aW5nIHBvc2l0aW9uIGJ5IGJpbmFyeSBzZWFyY2ggKi8K IAkJCW9mZm51bSA9IF9oYXNoX2JpbnNlYXJjaChwYWdlLCBzby0+aGFzaHNvX3NrX2hhc2gpOwog Ci0JCQlpdGVtSW5kZXggPSBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhzY2FuLCBwYWdlLCBv ZmZudW0sIGRpcik7CisJCQlpdGVtSW5kZXggPSBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhz Y2FuLCBwYWdlLCBvZmZudW0sIGRpciwKKwkJCQkJCQkJCQkJCSAgIGJhdGNoKTsKIAogCQkJaWYg KGl0ZW1JbmRleCAhPSAwKQogCQkJCWJyZWFrOwogCiAJCQkvKgotCQkJICogQ291bGQgbm90IGZp bmQgYW55IG1hdGNoaW5nIHR1cGxlcyBpbiB0aGUgY3VycmVudCBwYWdlLCBtb3ZlIHRvCi0JCQkg KiB0aGUgbmV4dCBwYWdlLiBCZWZvcmUgbGVhdmluZyB0aGUgY3VycmVudCBwYWdlLCBkZWFsIHdp dGggYW55Ci0JCQkgKiBraWxsZWQgaXRlbXMuCisJCQkgKiBDb3VsZCBub3QgZmluZCBhbnkgbWF0 Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50IHBhZ2UsIHRyeSB0bworCQkJICogbW92ZSB0byB0 aGUgbmV4dCBwYWdlCiAJCQkgKi8KLQkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCQlfaGFz aF9raWxsX2l0ZW1zKHNjYW4pOwotCi0JCQkvKgotCQkJICogSWYgdGhpcyBpcyBhIHByaW1hcnkg YnVja2V0IHBhZ2UsIGhhc2hvX3ByZXZibGtubyBpcyBub3QgYSByZWFsCi0JCQkgKiBibG9jayBu dW1iZXIuCi0JCQkgKi8KLQkJCWlmIChzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19idWNr ZXRfYnVmIHx8Ci0JCQkJc28tPmN1cnJQb3MuYnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0 X2J1ZikKLQkJCQlwcmV2X2Jsa25vID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCQkJZWxzZQotCQkJ CXByZXZfYmxrbm8gPSBvcGFxdWUtPmhhc2hvX3ByZXZibGtubzsKLQogCQkJX2hhc2hfcmVhZG5l eHQoc2NhbiwgJmJ1ZiwgJnBhZ2UsICZvcGFxdWUpOwotCQkJaWYgKEJ1ZmZlcklzVmFsaWQoYnVm KSkKKwkJCWlmICghQnVmZmVySXNWYWxpZChidWYpKQogCQkJewotCQkJCXNvLT5jdXJyUG9zLmJ1 ZiA9IGJ1ZjsKLQkJCQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVy KGJ1Zik7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBSZW1lbWJlciBuZXh0 IGFuZCBwcmV2aW91cyBibG9jayBudW1iZXJzIGZvciBzY3JvbGxhYmxlCi0JCQkJICogY3Vyc29y cyB0byBrbm93IHRoZSBzdGFydCBwb3NpdGlvbiBhbmQgcmV0dXJuIGZhbHNlCi0JCQkJICogaW5k aWNhdGluZyB0aGF0IG5vIG1vcmUgbWF0Y2hpbmcgdHVwbGVzIHdlcmUgZm91bmQuIEFsc28sCi0J CQkJICogZG9uJ3QgcmVzZXQgY3VyclBhZ2Ugb3IgbHNuLCBiZWNhdXNlIHdlIGV4cGVjdAotCQkJ CSAqIF9oYXNoX2tpbGxfaXRlbXMgdG8gYmUgY2FsbGVkIGZvciB0aGUgb2xkIHBhZ2UgYWZ0ZXIg dGhpcwotCQkJCSAqIGZ1bmN0aW9uIHJldHVybnMuCi0JCQkJICovCi0JCQkJc28tPmN1cnJQb3Mu cHJldlBhZ2UgPSBwcmV2X2Jsa25vOwotCQkJCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gSW52YWxp ZEJsb2NrTnVtYmVyOwotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKKwkJCQliYXRjaC0+YnVm ID0gSW52YWxpZEJ1ZmZlcjsKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9CisKKwkJCWJhdGNoLT5i dWYgPSBidWY7CisJCQliYXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYp OwogCQl9CiAKLQkJc28tPmN1cnJQb3MuZmlyc3RJdGVtID0gMDsKLQkJc28tPmN1cnJQb3MubGFz dEl0ZW0gPSBpdGVtSW5kZXggLSAxOwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSAwOworCQli YXRjaC0+Zmlyc3RJdGVtID0gMDsKKwkJYmF0Y2gtPmxhc3RJdGVtID0gaXRlbUluZGV4IC0gMTsK IAl9CiAJZWxzZQogCXsKLQkJQmxvY2tOdW1iZXIgbmV4dF9ibGtubyA9IEludmFsaWRCbG9ja051 bWJlcjsKLQogCQlmb3IgKDs7KQogCQl7CiAJCQkvKiBuZXcgcGFnZSwgbG9jYXRlIHN0YXJ0aW5n IHBvc2l0aW9uIGJ5IGJpbmFyeSBzZWFyY2ggKi8KIAkJCW9mZm51bSA9IF9oYXNoX2JpbnNlYXJj aF9sYXN0KHBhZ2UsIHNvLT5oYXNoc29fc2tfaGFzaCk7CiAKLQkJCWl0ZW1JbmRleCA9IF9oYXNo X2xvYWRfcXVhbGlmaWVkX2l0ZW1zKHNjYW4sIHBhZ2UsIG9mZm51bSwgZGlyKTsKKwkJCWl0ZW1J bmRleCA9IF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKHNjYW4sIHBhZ2UsIG9mZm51bSwgZGly LAorCQkJCQkJCQkJCQkJICAgYmF0Y2gpOwogCiAJCQlpZiAoaXRlbUluZGV4ICE9IE1heEluZGV4 VHVwbGVzUGVyUGFnZSkKIAkJCQlicmVhazsKIAogCQkJLyoKLQkJCSAqIENvdWxkIG5vdCBmaW5k IGFueSBtYXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgcGFnZSwgbW92ZSB0bwotCQkJICog dGhlIHByZXZpb3VzIHBhZ2UuIEJlZm9yZSBsZWF2aW5nIHRoZSBjdXJyZW50IHBhZ2UsIGRlYWwg d2l0aAotCQkJICogYW55IGtpbGxlZCBpdGVtcy4KKwkJCSAqIENvdWxkIG5vdCBmaW5kIGFueSBt YXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgcGFnZSwgdHJ5IHRvCisJCQkgKiBtb3ZlIHRv IHRoZSBwcmV2aW91cyBwYWdlCiAJCQkgKi8KLQkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJ CQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOwotCi0JCQlpZiAoc28tPmN1cnJQb3MuYnVmID09IHNv LT5oYXNoc29fYnVja2V0X2J1ZiB8fAotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNv X3NwbGl0X2J1Y2tldF9idWYpCi0JCQkJbmV4dF9ibGtubyA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJs a25vOwotCiAJCQlfaGFzaF9yZWFkcHJldihzY2FuLCAmYnVmLCAmcGFnZSwgJm9wYXF1ZSk7Ci0J CQlpZiAoQnVmZmVySXNWYWxpZChidWYpKQorCQkJaWYgKCFCdWZmZXJJc1ZhbGlkKGJ1ZikpCiAJ CQl7Ci0JCQkJc28tPmN1cnJQb3MuYnVmID0gYnVmOwotCQkJCXNvLT5jdXJyUG9zLmN1cnJQYWdl ID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkv KgotCQkJCSAqIFJlbWVtYmVyIG5leHQgYW5kIHByZXZpb3VzIGJsb2NrIG51bWJlcnMgZm9yIHNj cm9sbGFibGUKLQkJCQkgKiBjdXJzb3JzIHRvIGtub3cgdGhlIHN0YXJ0IHBvc2l0aW9uIGFuZCBy ZXR1cm4gZmFsc2UKLQkJCQkgKiBpbmRpY2F0aW5nIHRoYXQgbm8gbW9yZSBtYXRjaGluZyB0dXBs ZXMgd2VyZSBmb3VuZC4gQWxzbywKLQkJCQkgKiBkb24ndCByZXNldCBjdXJyUGFnZSBvciBsc24s IGJlY2F1c2Ugd2UgZXhwZWN0Ci0JCQkJICogX2hhc2hfa2lsbF9pdGVtcyB0byBiZSBjYWxsZWQg Zm9yIHRoZSBvbGQgcGFnZSBhZnRlciB0aGlzCi0JCQkJICogZnVuY3Rpb24gcmV0dXJucy4KLQkJ CQkgKi8KLQkJCQlzby0+Y3VyclBvcy5wcmV2UGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsKLQkJ CQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IG5leHRfYmxrbm87Ci0JCQkJc28tPmN1cnJQb3MuYnVm ID0gYnVmOworCQkJCWJhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOwogCQkJCXJldHVybiBmYWxz ZTsKIAkJCX0KKworCQkJYmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwkJCWJhdGNoLT5jdXJyUGFnZSA9IEJ1 ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7CiAJCX0KIAotCQlzby0+Y3VyclBvcy5maXJzdEl0ZW0g PSBpdGVtSW5kZXg7Ci0JCXNvLT5jdXJyUG9zLmxhc3RJdGVtID0gTWF4SW5kZXhUdXBsZXNQZXJQ YWdlIC0gMTsKLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gTWF4SW5kZXhUdXBsZXNQZXJQYWdl IC0gMTsKKwkJYmF0Y2gtPmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKKwkJYmF0Y2gtPmxhc3RJdGVt ID0gTWF4SW5kZXhUdXBsZXNQZXJQYWdlIC0gMTsKIAl9CiAKLQlpZiAoc28tPmN1cnJQb3MuYnVm ID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8fAotCQlzby0+Y3VyclBvcy5idWYgPT0gc28tPmhh c2hzb19zcGxpdF9idWNrZXRfYnVmKQorCS8qCisJICogU2F2ZWQgYXQgbGVhc3Qgb25lIG1hdGNo IGluIGJhdGNoLml0ZW1zW10uICBQcmVwYXJlIGZvciBoYXNoZ2V0YmF0Y2ggdG8KKwkgKiByZXR1 cm4gaXQgYnkgaW5pdGlhbGl6aW5nIHJlbWFpbmluZyB1bmluaXRpYWxpemVkIGZpZWxkcy4KKwkg Ki8KKwlpZiAoYmF0Y2gtPmJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwKKwkJYmF0Y2gt PmJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCiAJewotCQlzby0+Y3VyclBvcy5w cmV2UGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsKLQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBv cGFxdWUtPmhhc2hvX25leHRibGtubzsKLQkJTG9ja0J1ZmZlcihzby0+Y3VyclBvcy5idWYsIEJV RkZFUl9MT0NLX1VOTE9DSyk7CisJCS8qCisJCSAqIEJhdGNoJ3MgYnVmZmVyIGlzIGVpdGhlciB0 aGUgcHJpbWFyeSBidWNrZXQsIG9yIGEgYnVja2V0IGJlaW5nCisJCSAqIHBvcHVsYXRlZCBkdWUg dG8gYSBzcGxpdC4KKwkJICoKKwkJICogSW5jcmVtZW50IGxvY2FsIHJlZmVyZW5jZSBjb3VudCBz byB0aGF0IGJhdGNoIGdldHMgYW4gaW5kZXBlbmRlbnQKKwkJICogYnVmZmVyIHJlZmVyZW5jZSB0 aGF0IGNhbiBiZSByZWxlYXNlZCAoYnkgdGhlIGNvcmUgY29kZS90YWJsZSBBTSkKKwkJICogYmVm b3JlIHRoZSBoYXNoc29fYnVja2V0X2J1Zi9oYXNoc29fc3BsaXRfYnVja2V0X2J1ZiByZWZlcmVu Y2VzIGFyZQorCQkgKiByZWxlYXNlZC4KKwkJICovCisJCUluY3JCdWZmZXJSZWZDb3VudChiYXRj aC0+YnVmKTsKKworCQkvKiBDYW4gb25seSB1c2Ugb3BhcXVlLT5oYXNob19uZXh0Ymxrbm8gKi8K KwkJYmF0Y2gtPnByZXZQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQliYXRjaC0+bmV4dFBh Z2UgPSBvcGFxdWUtPmhhc2hvX25leHRibGtubzsKIAl9CiAJZWxzZQogCXsKLQkJc28tPmN1cnJQ b3MucHJldlBhZ2UgPSBvcGFxdWUtPmhhc2hvX3ByZXZibGtubzsKLQkJc28tPmN1cnJQb3MubmV4 dFBhZ2UgPSBvcGFxdWUtPmhhc2hvX25leHRibGtubzsKLQkJX2hhc2hfcmVsYnVmKHJlbCwgc28t PmN1cnJQb3MuYnVmKTsKLQkJc28tPmN1cnJQb3MuYnVmID0gSW52YWxpZEJ1ZmZlcjsKKwkJLyog Q2FuIHVzZSBvcGFxdWUtPmhhc2hvX3ByZXZibGtubyBhbmQgb3BhcXVlLT5oYXNob19uZXh0Ymxr bm8gKi8KKwkJYmF0Y2gtPnByZXZQYWdlID0gb3BhcXVlLT5oYXNob19wcmV2Ymxrbm87CisJCWJh dGNoLT5uZXh0UGFnZSA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwogCX0KIAotCUFzc2VydChz by0+Y3VyclBvcy5maXJzdEl0ZW0gPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOworCWJhdGNoLT5t b3JlTGVmdCA9IEJsb2NrTnVtYmVySXNWYWxpZChiYXRjaC0+cHJldlBhZ2UpOworCWJhdGNoLT5t b3JlUmlnaHQgPSBCbG9ja051bWJlcklzVmFsaWQoYmF0Y2gtPm5leHRQYWdlKTsKKworCS8qIFVu bG9jayAoYW5kIGxpa2VseSB1bnBpbikgYnVmZmVyLCBwZXIgYW1nZXRiYXRjaCBjb250cmFjdCAq LworCWluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2soc2NhbiwgYmF0Y2gpOworCisJQXNzZXJ0KGJh dGNoLT5maXJzdEl0ZW0gPD0gYmF0Y2gtPmxhc3RJdGVtKTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIAog LyoKICAqIExvYWQgYWxsIHRoZSBxdWFsaWZpZWQgaXRlbXMgZnJvbSBhIGN1cnJlbnQgaW5kZXgg cGFnZQotICogaW50byBzby0+Y3VyclBvcy4gSGVscGVyIGZ1bmN0aW9uIGZvciBfaGFzaF9yZWFk cGFnZS4KKyAqIGludG8gYmF0Y2guIEhlbHBlciBmdW5jdGlvbiBmb3IgX2hhc2hfcmVhZHBhZ2Uu CiAgKi8KIHN0YXRpYyBpbnQKIF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKEluZGV4U2NhbkRl c2Mgc2NhbiwgUGFnZSBwYWdlLAotCQkJCQkJICAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRp cmVjdGlvbiBkaXIpCisJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9u IGRpciwKKwkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKQogewogCUhhc2hTY2FuT3BhcXVl IHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAJSW5kZXhUdXBsZQlpdHVwOwpA QCAtNjQwLDcgKzU4NSw3IEBAIF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKEluZGV4U2NhbkRl c2Mgc2NhbiwgUGFnZSBwYWdlLAogCQkJCV9oYXNoX2NoZWNrcXVhbChzY2FuLCBpdHVwKSkKIAkJ CXsKIAkJCQkvKiB0dXBsZSBpcyBxdWFsaWZpZWQsIHNvIHJlbWVtYmVyIGl0ICovCi0JCQkJX2hh c2hfc2F2ZWl0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKKwkJCQlfaGFzaF9zYXZl aXRlbShiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOwogCQkJCWl0ZW1JbmRleCsrOwog CQkJfQogCQkJZWxzZQpAQCAtNjg3LDcgKzYzMiw3IEBAIF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0 ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbiwgUGFnZSBwYWdlLAogCQkJewogCQkJCWl0ZW1JbmRleC0t OwogCQkJCS8qIHR1cGxlIGlzIHF1YWxpZmllZCwgc28gcmVtZW1iZXIgaXQgKi8KLQkJCQlfaGFz aF9zYXZlaXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOworCQkJCV9oYXNoX3NhdmVp dGVtKGJhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CiAJCQl9CiAJCQllbHNlCiAJCQl7 CkBAIC03MDYsMTMgKzY1MSwxNCBAQCBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNj YW5EZXNjIHNjYW4sIFBhZ2UgcGFnZSwKIAl9CiB9CiAKLS8qIFNhdmUgYW4gaW5kZXggaXRlbSBp bnRvIHNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF0gKi8KKy8qIFNhdmUgYW4gaW5kZXggaXRl bSBpbnRvIGJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLV9o YXNoX3NhdmVpdGVtKEhhc2hTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAorX2hhc2hfc2F2 ZWl0ZW0oSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIGludCBpdGVtSW5kZXgsCiAJCQkgICBPZmZzZXRO dW1iZXIgb2ZmbnVtLCBJbmRleFR1cGxlIGl0dXApCiB7Ci0JSGFzaFNjYW5Qb3NJdGVtICpjdXJy SXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOworCUJhdGNoTWF0Y2hpbmdJdGVt ICpjdXJySXRlbSA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsKIAogCWN1cnJJdGVtLT5oZWFw VGlkID0gaXR1cC0+dF90aWQ7CiAJY3Vyckl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOworCWN1 cnJJdGVtLT50dXBsZU9mZnNldCA9IDA7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNodXRpbC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYwpp bmRleCBjZjdmMGI5MDEuLjMzMWQ1ZjRkYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaHV0aWwuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRpbC5j CkBAIC0xNiw3ICsxNiw2IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvaGFzaC5oIgogI2luY2x1ZGUg ImFjY2Vzcy9yZWxvcHRpb25zLmgiCi0jaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNs dWRlICJwb3J0L3BnX2JpdHV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAj aW5jbHVkZSAidXRpbHMvcmVsLmgiCkBAIC0zMyw3ICszMiw3IEBAIF9oYXNoX2NoZWNrcXVhbChJ bmRleFNjYW5EZXNjIHNjYW4sIEluZGV4VHVwbGUgaXR1cCkKIAkvKgogCSAqIEN1cnJlbnRseSwg d2UgY2FuJ3QgY2hlY2sgYW55IG9mIHRoZSBzY2FuIGNvbmRpdGlvbnMgc2luY2Ugd2UgZG8gbm90 CiAJICogaGF2ZSB0aGUgb3JpZ2luYWwgaW5kZXggZW50cnkgdmFsdWUgdG8gc3VwcGx5IHRvIHRo ZSBza19mdW5jLiBBbHdheXMKLQkgKiByZXR1cm4gdHJ1ZTsgd2UgZXhwZWN0IHRoYXQgaGFzaGdl dHR1cGxlIGFscmVhZHkgc2V0IHRoZSByZWNoZWNrIGZsYWcKKwkgKiByZXR1cm4gdHJ1ZTsgd2Ug ZXhwZWN0IHRoYXQgaGFzaGdldGJhdGNoIGFscmVhZHkgc2V0IHRoZSByZWNoZWNrIGZsYWcKIAkg KiB0byBtYWtlIHRoZSBtYWluIGluZGV4c2NhbiBjb2RlIGRvIGl0LgogCSAqLwogI2lmZGVmIE5P VF9VU0VECkBAIC01MDUsMTE3ICs1MDQsMyBAQCBfaGFzaF9nZXRfbmV3YnVja2V0X2Zyb21fb2xk YnVja2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0IG9sZF9idWNrZXQsCiAKIAlyZXR1cm4gbmV3X2J1 Y2tldDsKIH0KLQotLyoKLSAqIF9oYXNoX2tpbGxfaXRlbXMgLSBzZXQgTFBfREVBRCBzdGF0ZSBm b3IgaXRlbXMgYW4gaW5kZXhzY2FuIGNhbGxlciBoYXMKLSAqIHRvbGQgdXMgd2VyZSBraWxsZWQu Ci0gKgotICogc2Nhbi0+b3BhcXVlLCByZWZlcmVuY2VkIGxvY2FsbHkgdGhyb3VnaCBzbywgY29u dGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlCi0gKiBjdXJyZW50IHBhZ2UgYW5kIGtpbGxlZCB0 dXBsZXMgdGhlcmVvbiAoZ2VuZXJhbGx5LCB0aGlzIHNob3VsZCBvbmx5IGJlCi0gKiBjYWxsZWQg aWYgc28tPm51bUtpbGxlZCA+IDApLgotICoKLSAqIFRoZSBjYWxsZXIgZG9lcyBub3QgaGF2ZSBh IGxvY2sgb24gdGhlIHBhZ2UgYW5kIG1heSBvciBtYXkgbm90IGhhdmUgdGhlCi0gKiBwYWdlIHBp bm5lZCBpbiBhIGJ1ZmZlci4gIE5vdGUgdGhhdCByZWFkLWxvY2sgaXMgc3VmZmljaWVudCBmb3Ig c2V0dGluZwotICogTFBfREVBRCBzdGF0dXMgKHdoaWNoIGlzIG9ubHkgYSBoaW50KS4KLSAqCi0g KiBUaGUgY2FsbGVyIG11c3QgaGF2ZSBwaW4gb24gYnVja2V0IGJ1ZmZlciwgYnV0IG1heSBvciBt YXkgbm90IGhhdmUgcGluCi0gKiBvbiBvdmVyZmxvdyBidWZmZXIsIGFzIGluZGljYXRlZCBieSBI YXNoU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKS4KLSAqCi0gKiBXZSBtYXRjaCBpdGVtcyBi eSBoZWFwIFRJRCBiZWZvcmUgYXNzdW1pbmcgdGhleSBhcmUgdGhlIHJpZ2h0IG9uZXMgdG8KLSAq IGRlbGV0ZS4KLSAqCi0gKiBUaGVyZSBhcmUgbmV2ZXIgYW55IHNjYW5zIGFjdGl2ZSBpbiBhIGJ1 Y2tldCBhdCB0aGUgdGltZSBWQUNVVU0gYmVnaW5zLAotICogYmVjYXVzZSBWQUNVVU0gdGFrZXMg YSBjbGVhbnVwIGxvY2sgb24gdGhlIHByaW1hcnkgYnVja2V0IHBhZ2UgYW5kIHNjYW5zCi0gKiBo b2xkIGEgcGluLiAgQSBzY2FuIGNhbiBiZWdpbiBhZnRlciBWQUNVVU0gbGVhdmVzIHRoZSBwcmlt YXJ5IGJ1Y2tldCBwYWdlCi0gKiBidXQgYmVmb3JlIGl0IGZpbmlzaGVzIHRoZSBlbnRpcmUgYnVj a2V0LCBidXQgaXQgY2FuIG5ldmVyIHBhc3MgVkFDVVVNLAotICogYmVjYXVzZSBWQUNVVU0gYWx3 YXlzIGxvY2tzIHRoZSBuZXh0IHBhZ2UgYmVmb3JlIHJlbGVhc2luZyB0aGUgbG9jayBvbgotICog dGhlIHByZXZpb3VzIG9uZS4gIFRoZXJlZm9yZSwgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91 dCBhY2NpZGVudGFsbHkKLSAqIGtpbGxpbmcgYSBUSUQgdGhhdCBoYXMgYmVlbiByZXVzZWQgZm9y IGFuIHVucmVsYXRlZCB0dXBsZS4KLSAqLwotdm9pZAotX2hhc2hfa2lsbF9pdGVtcyhJbmRleFNj YW5EZXNjIHNjYW4pCi17Ci0JSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNj YW4tPm9wYXF1ZTsKLQlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCUJsb2Nr TnVtYmVyIGJsa25vOwotCUJ1ZmZlcgkJYnVmOwotCVBhZ2UJCXBhZ2U7Ci0JSGFzaFBhZ2VPcGFx dWUgb3BhcXVlOwotCU9mZnNldE51bWJlciBvZmZudW0sCi0JCQkJbWF4b2ZmOwotCWludAkJCW51 bUtpbGxlZCA9IHNvLT5udW1LaWxsZWQ7Ci0JaW50CQkJaTsKLQlib29sCQlraWxsZWRzb21ldGhp bmcgPSBmYWxzZTsKLQlib29sCQloYXZlUGluID0gZmFsc2U7Ci0KLQlBc3NlcnQoc28tPm51bUtp bGxlZCA+IDApOwotCUFzc2VydChzby0+a2lsbGVkSXRlbXMgIT0gTlVMTCk7Ci0JQXNzZXJ0KEhh c2hTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCi0JLyoKLQkgKiBBbHdheXMgcmVzZXQg dGhlIHNjYW4gc3RhdGUsIHNvIHdlIGRvbid0IGxvb2sgZm9yIHNhbWUgaXRlbXMgb24gb3RoZXIK LQkgKiBwYWdlcy4KLQkgKi8KLQlzby0+bnVtS2lsbGVkID0gMDsKLQotCWJsa25vID0gc28tPmN1 cnJQb3MuY3VyclBhZ2U7Ci0JaWYgKEhhc2hTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKQot CXsKLQkJLyoKLQkJICogV2UgYWxyZWFkeSBoYXZlIHBpbiBvbiB0aGlzIGJ1ZmZlciwgc28sIGFs bCB3ZSBuZWVkIHRvIGRvIGlzCi0JCSAqIGFjcXVpcmUgbG9jayBvbiBpdC4KLQkJICovCi0JCWhh dmVQaW4gPSB0cnVlOwotCQlidWYgPSBzby0+Y3VyclBvcy5idWY7Ci0JCUxvY2tCdWZmZXIoYnVm LCBCVUZGRVJfTE9DS19TSEFSRSk7Ci0JfQotCWVsc2UKLQkJYnVmID0gX2hhc2hfZ2V0YnVmKHJl bCwgYmxrbm8sIEhBU0hfUkVBRCwgTEhfT1ZFUkZMT1dfUEFHRSk7Ci0KLQlwYWdlID0gQnVmZmVy R2V0UGFnZShidWYpOwotCW9wYXF1ZSA9IEhhc2hQYWdlR2V0T3BhcXVlKHBhZ2UpOwotCW1heG9m ZiA9IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVt S2lsbGVkOyBpKyspCi0JewotCQlpbnQJCQlpdGVtSW5kZXggPSBzby0+a2lsbGVkSXRlbXNbaV07 Ci0JCUhhc2hTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUlu ZGV4XTsKLQotCQlvZmZudW0gPSBjdXJySXRlbS0+aW5kZXhPZmZzZXQ7Ci0KLQkJQXNzZXJ0KGl0 ZW1JbmRleCA+PSBzby0+Y3VyclBvcy5maXJzdEl0ZW0gJiYKLQkJCSAgIGl0ZW1JbmRleCA8PSBz by0+Y3VyclBvcy5sYXN0SXRlbSk7Ci0KLQkJd2hpbGUgKG9mZm51bSA8PSBtYXhvZmYpCi0JCXsK LQkJCUl0ZW1JZAkJaWlkID0gUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZudW0pOwotCQkJSW5kZXhU dXBsZQlpdHVwbGUgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgaWlkKTsKLQotCQkJ aWYgKEl0ZW1Qb2ludGVyRXF1YWxzKCZpdHVwbGUtPnRfdGlkLCAmY3Vyckl0ZW0tPmhlYXBUaWQp KQotCQkJewotCQkJCS8qIGZvdW5kIHRoZSBpdGVtICovCi0JCQkJSXRlbUlkTWFya0RlYWQoaWlk KTsKLQkJCQlraWxsZWRzb21ldGhpbmcgPSB0cnVlOwotCQkJCWJyZWFrOwkJCS8qIG91dCBvZiBp bm5lciBzZWFyY2ggbG9vcCAqLwotCQkJfQotCQkJb2ZmbnVtID0gT2Zmc2V0TnVtYmVyTmV4dChv ZmZudW0pOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBTaW5jZSB0aGlzIGNhbiBiZSByZWRvbmUgbGF0 ZXIgaWYgbmVlZGVkLCBtYXJrIGFzIGRpcnR5IGhpbnQuIFdoZW5ldmVyCi0JICogd2UgbWFyayBh bnl0aGluZyBMUF9ERUFELCB3ZSBhbHNvIHNldCB0aGUgcGFnZSdzCi0JICogTEhfUEFHRV9IQVNf REVBRF9UVVBMRVMgZmxhZywgd2hpY2ggaXMgbGlrZXdpc2UganVzdCBhIGhpbnQuCi0JICovCi0J aWYgKGtpbGxlZHNvbWV0aGluZykKLQl7Ci0JCW9wYXF1ZS0+aGFzaG9fZmxhZyB8PSBMSF9QQUdF X0hBU19ERUFEX1RVUExFUzsKLQkJTWFya0J1ZmZlckRpcnR5SGludChidWYsIHRydWUpOwotCX0K LQotCWlmIChzby0+aGFzaHNvX2J1Y2tldF9idWYgPT0gc28tPmN1cnJQb3MuYnVmIHx8Ci0JCWhh dmVQaW4pCi0JCUxvY2tCdWZmZXIoc28tPmN1cnJQb3MuYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0sp OwotCWVsc2UKLQkJX2hhc2hfcmVsYnVmKHJlbCwgYnVmKTsKLX0KZGlmZiAtLWdpdCBhL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKaW5kZXggMWEwZjllYTYwLi4yNDY4MDcyYWMgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CkBAIC0xMjA0LDggKzEyMDQsNiBAQCBIYXNoUGFnZVN0YXQKIEhhc2hQYXRoCiBIYXNoU2Nh bk9wYXF1ZQogSGFzaFNjYW5PcGFxdWVEYXRhCi1IYXNoU2NhblBvc0RhdGEKLUhhc2hTY2FuUG9z SXRlbQogSGFzaFNrZXdCdWNrZXQKIEhhc2hTdGF0ZQogSGFzaFZhbHVlRnVuYwotLSAKMi41MS4w Cgo= --000000000000a2454a064b95d983 Content-Type: application/x-patch; name="v11-0008-Use-ExecSetTupleBound-hint-during-index-scans.patch" Content-Disposition: attachment; filename="v11-0008-Use-ExecSetTupleBound-hint-during-index-scans.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm0x5ogj5 RnJvbSBiOTdlNTcxNzRmNDVjZmNkZTMzNTY4NDUyOWI2OGQ2NDNmNzUwNmRiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFRo dSwgMjIgSmFuIDIwMjYgMTM6MDc6MTMgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMSAwOC8xMl0g VXNlIEV4ZWNTZXRUdXBsZUJvdW5kIGhpbnQgZHVyaW5nIGluZGV4IHNjYW5zLgoKVGhpcyBnaXZl cyBpbmRleCBzY2FucyBhIHdheSB0byBhdm9pZCB1c2luZyBhIHJlYWQgc3RyZWFtIGR1cmluZyBj ZXJ0YWluCmtpbmRzIG9mIHF1ZXJpZXMgdGhhdCBhcmUgdmVyeSB1bmxpa2VseSB0byBiZW5lZml0 IGZyb20gcHJlZmV0Y2hpbmc6CnF1ZXJpZXMgd2hvc2UgcGxhbiBpbnZvbHZlcyBhIExJTUlUIG5v ZGUgdGhhdCBpcyBjb25zdW1lcyB0dXBsZXMgZnJvbSBhbgppbmRleCBzY2FuIChvciBpbmRleC1v bmx5IHNjYW4pIG5vZGUuCgpUZXN0aW5nIGhhcyBzaG93biB0aGlzIHRvIGJlIHBhcnRpY3VsYXJs eSBpbXBvcnRhbnQgd2l0aCBuZXN0ZWQgbG9vcApqb2lucyB3aXRoIGEgTElNSVQgb24gYW4gaW5u ZXIgaW5kZXggc2Nhbi4gIFRoaXMgaXMgdHlwaWNhbCBvZiBuZXN0ZWQKbG9vcCBhbnRpLWpvaW5z LCBhbmQgbmVzdGVkIGxvb3Agc2VtaS1qb2lucy4KClhYWCBUaGlzIGlzIHN0aWxsIHZlcnkgbXVj aCBhIFdJUC4KCkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1C eTogVG9tYXMgVm9uZHJhIDx0b21hc0B2b25kcmEubWU+Ci0tLQogc3JjL2luY2x1ZGUvYWNjZXNz L3JlbHNjYW4uaCAgICAgICAgICAgICB8ICAyICsrCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9k ZXMuaCAgICAgICAgICAgIHwgIDQgKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1f aGFuZGxlci5jIHwgIDUgKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyAgICAg ICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMgICAgICB8IDQ0 ICsrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4 b25seXNjYW4uYyB8IDEwICsrKysrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nh bi5jICAgICB8IDEzICsrKysrKysKIDcgZmlsZXMgY2hhbmdlZCwgNzkgaW5zZXJ0aW9ucygrKQoK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvcmVsc2Nhbi5oCmluZGV4IDgzYzFjOThmZS4uOWE2M2EwYzViIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxz Y2FuLmgKQEAgLTM4Niw2ICszODYsOCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0 YQogCS8qIHBhcmFsbGVsIGluZGV4IHNjYW4gaW5mb3JtYXRpb24sIGluIHNoYXJlZCBtZW1vcnkg Ki8KIAlzdHJ1Y3QgUGFyYWxsZWxJbmRleFNjYW5EZXNjRGF0YSAqcGFyYWxsZWxfc2NhbjsKIAor CWludDY0CQl0dXBsZXNfbmVlZGVkOworCiAJLyoKIAkgKiBGbGFnIHRvIHJlcXVlc3QgZWFybHkg YWJvcnQgZHVyaW5nIGdldF9hY3R1YWxfdmFyaWFibGVfcmFuZ2Ugc2NhbnMuCiAJICogU3VjaCBz Y2FucyBtdXN0IGVuZCBvbiB0aGUgcmlnaHRtb3N0IChvciBsZWZ0bW9zdCkgaW5kZXggcGFnZSwg bm8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1 ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggN2MxYjQyN2ZiLi4xMmRkNTMzYzMgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVz L2V4ZWNub2Rlcy5oCkBAIC0xNjk3LDYgKzE2OTcsNyBAQCB0eXBlZGVmIHN0cnVjdAogICoJCVNj YW5EZXNjCQkgICBpbmRleCBzY2FuIGRlc2NyaXB0b3IKICAqCQlJbnN0cnVtZW50CQkgICBsb2Nh bCBpbmRleCBzY2FuIGluc3RydW1lbnRhdGlvbgogICoJCVNoYXJlZEluZm8JCSAgIHBhcmFsbGVs IHdvcmtlciBpbnN0cnVtZW50YXRpb24gKG5vIGxlYWRlciBlbnRyeSkKKyAqCQlUdXBsZXNOZWVk ZWQJICAgdHVwbGUgYm91bmQsIHNlZSBFeGVjU2V0VHVwbGVCb3VuZAogICoKICAqCQlSZW9yZGVy UXVldWUJICAgdHVwbGVzIHRoYXQgbmVlZCByZW9yZGVyaW5nIGR1ZSB0byByZS1jaGVjawogICoJ CVJlYWNoZWRFbmQJCSAgIGhhdmUgd2UgZmV0Y2hlZCBhbGwgdHVwbGVzIGZyb20gaW5kZXggYWxy ZWFkeT8KQEAgLTE3MjUsNiArMTcyNiw3IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhblN0YXRl CiAJc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhICppc3NfU2NhbkRlc2M7CiAJSW5kZXhTY2FuSW5z dHJ1bWVudGF0aW9uICppc3NfSW5zdHJ1bWVudDsKIAlTaGFyZWRJbmRleFNjYW5JbnN0cnVtZW50 YXRpb24gKmlzc19TaGFyZWRJbmZvOworCWludDY0CQlpc3NfVHVwbGVzTmVlZGVkOwogCiAJLyog VGhlc2UgYXJlIG5lZWRlZCBmb3IgcmUtY2hlY2tpbmcgT1JERVIgQlkgZXhwciBvcmRlcmluZyAq LwogCXBhaXJpbmdoZWFwICppc3NfUmVvcmRlclF1ZXVlOwpAQCAtMTc1Myw2ICsxNzU1LDcgQEAg dHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuU3RhdGUKICAqCQlTY2FuRGVzYwkJICAgaW5kZXggc2Nh biBkZXNjcmlwdG9yCiAgKgkJSW5zdHJ1bWVudAkJICAgbG9jYWwgaW5kZXggc2NhbiBpbnN0cnVt ZW50YXRpb24KICAqCQlTaGFyZWRJbmZvCQkgICBwYXJhbGxlbCB3b3JrZXIgaW5zdHJ1bWVudGF0 aW9uIChubyBsZWFkZXIgZW50cnkpCisgKgkJVHVwbGVzTmVlZGVkCSAgIHR1cGxlIGJvdW5kLCBz ZWUgRXhlY1NldFR1cGxlQm91bmQKICAqCQlUYWJsZVNsb3QJCSAgIHNsb3QgZm9yIGhvbGRpbmcg dHVwbGVzIGZldGNoZWQgZnJvbSB0aGUgdGFibGUKICAqCQlQc2NhbkxlbgkJICAgc2l6ZSBvZiBw YXJhbGxlbCBpbmRleC1vbmx5IHNjYW4gZGVzY3JpcHRvcgogICoJCU5hbWVDU3RyaW5nQXR0TnVt cyBhdHRudW1zIG9mIG5hbWUgdHlwZWQgY29sdW1ucyB0byBwYWQgdG8gTkFNRURBVEFMRU4KQEAg LTE3NzUsNiArMTc3OCw3IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4T25seVNjYW5TdGF0ZQogCXN0 cnVjdCBJbmRleFNjYW5EZXNjRGF0YSAqaW9zc19TY2FuRGVzYzsKIAlJbmRleFNjYW5JbnN0cnVt ZW50YXRpb24gKmlvc3NfSW5zdHJ1bWVudDsKIAlTaGFyZWRJbmRleFNjYW5JbnN0cnVtZW50YXRp b24gKmlvc3NfU2hhcmVkSW5mbzsKKwlpbnQ2NAkJaW9zc19UdXBsZXNOZWVkZWQ7CiAJVHVwbGVU YWJsZVNsb3QgKmlvc3NfVGFibGVTbG90OwogCVNpemUJCWlvc3NfUHNjYW5MZW47CiAJQXR0ck51 bWJlciAqaW9zc19OYW1lQ1N0cmluZ0F0dE51bXM7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVh cGFtX2hhbmRsZXIuYwppbmRleCBhNDkxNjAwZmEuLjEzOGQ2YmUwOCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC01MzQsOSArNTM0LDE0IEBAIGhlYXBhbV9i YXRjaF9nZXRuZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24s CiAJCSAqIGhhdmVuJ3QgZG9uZSBhbnkgaGVhcCBmZXRjaGVzIHlldC4gIFdlIGRvbid0IHdhbnQg dG8gd2FzdGUgYW55CiAJCSAqIGN5Y2xlcyBvbiBhbGxvY2F0aW5nIGEgcmVhZCBzdHJlYW0gdW50 aWwgd2UgaGF2ZSBhIGRlbW9uc3RyYXRlZAogCQkgKiBuZWVkIGZvciBwZXJmb3JtIGhlYXAgZmV0 Y2hlcy4KKwkJICoKKwkJICogQWxzbyBhdm9pZGluZyBwcmVmZXRjaGluZyB3aGVuIHRoZSBjb3Jl IGV4ZWN1dG9yIHBhc3NlcyB0aGUgc2NhbiBhCisJCSAqIHR1cGxlc19uZWVkZWQgaGludCB0aGF0 IGluZGljYXRlcyB0aGF0IHRoZSBzY2FuIGlzIGxpa2VseSB0byBlbmQKKwkJICogYmVmb3JlIGxv bmcuCiAJCSAqLwogCQlpZiAoIWhzY2FuLT54c19yZWFkX3N0cmVhbSAmJiBwcmlvckJhdGNoICYm IHNjYW4tPk1WQ0NTY2FuICYmCiAJCQloc2Nhbi0+eHNfYmxrICE9IEludmFsaWRCbG9ja051bWJl ciAmJgkvKiBmb3IgaW5kZXgtb25seSBzY2FucyAqLworCQkJKHNjYW4tPnR1cGxlc19uZWVkZWQg PT0gLTEgfHwgc2Nhbi0+dHVwbGVzX25lZWRlZCA+IDIwKSAmJgogCQkJaW9fbWV0aG9kICE9IElP TUVUSE9EX1NZTkMgJiYgZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCkKIAkJewogCQkJQXNzZXJ0 KCFiYXRjaHJpbmdidWYtPnByZWZldGNoUG9zLnZhbGlkKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFt LmMKaW5kZXggZTg2NDRjNjA4Li5iNDdmNmYwMTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9pbmRleC9nZW5hbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5j CkBAIC0xMjUsNiArMTI1LDcgQEAgUmVsYXRpb25HZXRJbmRleFNjYW4oUmVsYXRpb24gaW5kZXhS ZWxhdGlvbiwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCXNjYW4tPnhzX2l0dXBkZXNjID0g TlVMTDsKIAlzY2FuLT54c19oaXR1cCA9IE5VTEw7CiAJc2Nhbi0+eHNfaGl0dXBkZXNjID0gTlVM TDsKKwlzY2FuLT50dXBsZXNfbmVlZGVkID0gLTE7CS8qIG5vIGxpbWl0ICovCiAJc2Nhbi0+eHNf cmVhZF9leHRyZW1hbF9vbmx5ID0gZmFsc2U7CiAKIAlyZXR1cm4gc2NhbjsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY1Byb2Nub2RlLmMKaW5kZXggN2U0MGI4NTI1Li44YWU4ZmJlYmUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jCkBAIC03Miw2ICs3Miw3IEBACiAgKi8KICNpbmNsdWRlICJw b3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJleGVj dXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVBZ2cuaCIKICNpbmNsdWRl ICJleGVjdXRvci9ub2RlQXBwZW5kLmgiCkBAIC05NzcsNiArOTc4LDQ5IEBAIEV4ZWNTZXRUdXBs ZUJvdW5kKGludDY0IHR1cGxlc19uZWVkZWQsIFBsYW5TdGF0ZSAqY2hpbGRfbm9kZSkKIAogCQlF eGVjU2V0VHVwbGVCb3VuZCh0dXBsZXNfbmVlZGVkLCBvdXRlclBsYW5TdGF0ZShjaGlsZF9ub2Rl KSk7CiAJfQorCWVsc2UgaWYgKElzQShjaGlsZF9ub2RlLCBJbmRleFNjYW5TdGF0ZSkpCisJewor CQkvKgorCQkgKiBJZiBpdCBpcyBhbiBJbmRleFNjYW4sIHNhdmUgdGhlIHR1cGxlc19uZWVkZWQg aW4gdGhlIHN0YXRlIHNvIGl0CisJCSAqIGNhbiBiZSBwcm9wYWdhdGVkIHRvIHRoZSBJbmRleFNj YW5EZXNjIHdoZW4gdGhlIHNjYW4gaXMgc3RhcnRlZC4KKwkJICoKKwkJICogTm90ZTogQXMgd2l0 aCBTb3J0LCB0aGUgaW5kZXggc2NhbiBub2RlIGlzIHJlc3BvbnNpYmxlIGZvciByZWFjdGluZwor CQkgKiBwcm9wZXJseSB0byBjaGFuZ2VzIHRvIHRoaXMgcGFyYW1ldGVyLgorCQkgKi8KKwkJSW5k ZXhTY2FuU3RhdGUgKmlzc3RhdGUgPSAoSW5kZXhTY2FuU3RhdGUgKikgY2hpbGRfbm9kZTsKKwor CQlpc3N0YXRlLT5pc3NfVHVwbGVzTmVlZGVkID0gdHVwbGVzX25lZWRlZDsKKworCQkvKiBJZiBz Y2FuIGFscmVhZHkgc3RhcnRlZCwgdXBkYXRlIHRoZSBJbmRleFNjYW5EZXNjIHRvbyAqLworCQlp ZiAoaXNzdGF0ZS0+aXNzX1NjYW5EZXNjKQorCQkJaXNzdGF0ZS0+aXNzX1NjYW5EZXNjLT50dXBs ZXNfbmVlZGVkID0gdHVwbGVzX25lZWRlZDsKKwl9CisJZWxzZSBpZiAoSXNBKGNoaWxkX25vZGUs IEluZGV4T25seVNjYW5TdGF0ZSkpCisJeworCQkvKiBTYW1lIGNvbW1lbnRzIGFzIGZvciBJbmRl eFNjYW4gKi8KKwkJSW5kZXhPbmx5U2NhblN0YXRlICppb3NzdGF0ZSA9IChJbmRleE9ubHlTY2Fu U3RhdGUgKikgY2hpbGRfbm9kZTsKKworCQlpb3NzdGF0ZS0+aW9zc19UdXBsZXNOZWVkZWQgPSB0 dXBsZXNfbmVlZGVkOworCisJCS8qIElmIHNjYW4gYWxyZWFkeSBzdGFydGVkLCB1cGRhdGUgdGhl IEluZGV4U2NhbkRlc2MgdG9vICovCisJCWlmIChpb3NzdGF0ZS0+aW9zc19TY2FuRGVzYykKKwkJ CWlvc3N0YXRlLT5pb3NzX1NjYW5EZXNjLT50dXBsZXNfbmVlZGVkID0gdHVwbGVzX25lZWRlZDsK Kwl9CisJZWxzZSBpZiAoSXNBKGNoaWxkX25vZGUsIE5lc3RMb29wU3RhdGUpKQorCXsKKwkJLyoK KwkJICogRm9yIE5lc3RMb29wIGpvaW5zIHdoZXJlIGVhY2ggb3V0ZXIgdHVwbGUgcHJvZHVjZXMg YXQgbW9zdCBvbmUKKwkJICogb3V0cHV0IHR1cGxlLCB3ZSBjYW4gcHJvcGFnYXRlIHRoZSBib3Vu ZCB0byB0aGUgb3V0ZXIgY2hpbGQKKwkJICovCisJCU5lc3RMb29wU3RhdGUgKm5sc3RhdGUgPSAo TmVzdExvb3BTdGF0ZSAqKSBjaGlsZF9ub2RlOworCQlKb2luVHlwZQlqb2ludHlwZSA9IG5sc3Rh dGUtPmpzLmpvaW50eXBlOworCisJCWlmIChqb2ludHlwZSA9PSBKT0lOX1NFTUkgfHwgam9pbnR5 cGUgPT0gSk9JTl9BTlRJIHx8CisJCQlubHN0YXRlLT5qcy5zaW5nbGVfbWF0Y2gpCisJCXsKKwkJ CUV4ZWNTZXRUdXBsZUJvdW5kKHR1cGxlc19uZWVkZWQsIG91dGVyUGxhblN0YXRlKGNoaWxkX25v ZGUpKTsKKwkJfQorCX0KIAogCS8qCiAJICogSW4gcHJpbmNpcGxlIHdlIGNvdWxkIGRlc2NlbmQg dGhyb3VnaCBhbnkgcGxhbiBub2RlIHR5cGUgdGhhdCBpcwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVJbmRleG9ubHlzY2FuLmMKaW5kZXggODRiZmY2MGNlLi5mM2ZjNjNhYmUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKKysrIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwpAQCAtOTYsNiArOTYsOSBAQCBJbmRleE9u bHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkJbm9kZS0+aW9zc19TY2FuRGVzYyA9 IHNjYW5kZXNjOwogCQlBc3NlcnQobm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwKTsK IAorCQkvKiBQYXNzIGRvd24gYW55IHR1cGxlIGJvdW5kICovCisJCXNjYW5kZXNjLT50dXBsZXNf bmVlZGVkID0gbm9kZS0+aW9zc19UdXBsZXNOZWVkZWQ7CisKIAkJLyoKIAkJICogSWYgbm8gcnVu LXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZAog CQkgKiBwYXNzIHRoZSBzY2Fua2V5cyB0byB0aGUgaW5kZXggQU0uCkBAIC01MjgsNiArNTMxLDcg QEAgRXhlY0luaXRJbmRleE9ubHlTY2FuKEluZGV4T25seVNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0 YXRlLCBpbnQgZWZsYWdzKQogCWluZGV4c3RhdGUtPmlvc3NfUnVudGltZUtleXNSZWFkeSA9IGZh bHNlOwogCWluZGV4c3RhdGUtPmlvc3NfUnVudGltZUtleXMgPSBOVUxMOwogCWluZGV4c3RhdGUt Pmlvc3NfTnVtUnVudGltZUtleXMgPSAwOworCWluZGV4c3RhdGUtPmlvc3NfVHVwbGVzTmVlZGVk ID0gLTE7CiAKIAkvKgogCSAqIGJ1aWxkIHRoZSBpbmRleCBzY2FuIGtleXMgZnJvbSB0aGUgaW5k ZXggcXVhbGlmaWNhdGlvbgpAQCAtNzA0LDYgKzcwOCw5IEBAIEV4ZWNJbmRleE9ubHlTY2FuSW5p dGlhbGl6ZURTTShJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUsCiAJCQkJCQkJCSBwaXNjYW4pOwog CUFzc2VydChub2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50X2l0dXApOwogCisJLyogUGFzcyBk b3duIGFueSB0dXBsZSBib3VuZCAqLworCW5vZGUtPmlvc3NfU2NhbkRlc2MtPnR1cGxlc19uZWVk ZWQgPSBub2RlLT5pb3NzX1R1cGxlc05lZWRlZDsKKwogCS8qCiAJICogSWYgbm8gcnVuLXRpbWUg a2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZCBwYXNzCiAJ ICogdGhlIHNjYW5rZXlzIHRvIHRoZSBpbmRleCBBTS4KQEAgLTc2OSw2ICs3NzYsOSBAQCBFeGVj SW5kZXhPbmx5U2NhbkluaXRpYWxpemVXb3JrZXIoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlLAog CQkJCQkJCQkgcGlzY2FuKTsKIAlBc3NlcnQobm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9p dHVwKTsKIAorCS8qIFBhc3MgZG93biBhbnkgdHVwbGUgYm91bmQgKi8KKwlub2RlLT5pb3NzX1Nj YW5EZXNjLT50dXBsZXNfbmVlZGVkID0gbm9kZS0+aW9zc19UdXBsZXNOZWVkZWQ7CisKIAkvKgog CSAqIElmIG5vIHJ1bi10aW1lIGtleXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBn byBhaGVhZCBhbmQgcGFzcwogCSAqIHRoZSBzY2Fua2V5cyB0byB0aGUgaW5kZXggQU0uCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKaW5kZXggNjc4MjI5NDdhLi4zZTE3NGNiNjUgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYworKysgYi9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKQEAgLTExNSw2ICsxMTUsOSBAQCBJbmRl eE5leHQoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAKIAkJbm9kZS0+aXNzX1NjYW5EZXNjID0gc2Nh bmRlc2M7CiAKKwkJLyogUGFzcyBkb3duIGFueSB0dXBsZSBib3VuZCAqLworCQlzY2FuZGVzYy0+ dHVwbGVzX25lZWRlZCA9IG5vZGUtPmlzc19UdXBsZXNOZWVkZWQ7CisKIAkJLyoKIAkJICogSWYg bm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFk IGFuZAogCQkgKiBwYXNzIHRoZSBzY2Fua2V5cyB0byB0aGUgaW5kZXggQU0uCkBAIC0yMTEsNiAr MjE0LDkgQEAgSW5kZXhOZXh0V2l0aFJlb3JkZXIoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAKIAkJ bm9kZS0+aXNzX1NjYW5EZXNjID0gc2NhbmRlc2M7CiAKKwkJLyogUGFzcyBkb3duIGFueSB0dXBs ZSBib3VuZCAqLworCQlzY2FuZGVzYy0+dHVwbGVzX25lZWRlZCA9IG5vZGUtPmlzc19UdXBsZXNO ZWVkZWQ7CisKIAkJLyoKIAkJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3Ig dGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZAogCQkgKiBwYXNzIHRoZSBzY2Fua2V5cyB0byB0 aGUgaW5kZXggQU0uCkBAIC05ODYsNiArOTkyLDcgQEAgRXhlY0luaXRJbmRleFNjYW4oSW5kZXhT Y2FuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAlpbmRleHN0YXRlLT5pc3Nf UnVudGltZUtleXNSZWFkeSA9IGZhbHNlOwogCWluZGV4c3RhdGUtPmlzc19SdW50aW1lS2V5cyA9 IE5VTEw7CiAJaW5kZXhzdGF0ZS0+aXNzX051bVJ1bnRpbWVLZXlzID0gMDsKKwlpbmRleHN0YXRl LT5pc3NfVHVwbGVzTmVlZGVkID0gLTE7CiAKIAkvKgogCSAqIGJ1aWxkIHRoZSBpbmRleCBzY2Fu IGtleXMgZnJvbSB0aGUgaW5kZXggcXVhbGlmaWNhdGlvbgpAQCAtMTczMCw2ICsxNzM3LDkgQEAg RXhlY0luZGV4U2NhbkluaXRpYWxpemVEU00oSW5kZXhTY2FuU3RhdGUgKm5vZGUsCiAJCQkJCQkJ CSBub2RlLT5pc3NfTnVtT3JkZXJCeUtleXMsCiAJCQkJCQkJCSBwaXNjYW4pOwogCisJLyogUGFz cyBkb3duIGFueSB0dXBsZSBib3VuZCAqLworCW5vZGUtPmlzc19TY2FuRGVzYy0+dHVwbGVzX25l ZWRlZCA9IG5vZGUtPmlzc19UdXBsZXNOZWVkZWQ7CisKIAkvKgogCSAqIElmIG5vIHJ1bi10aW1l IGtleXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVhZCBhbmQgcGFzcwog CSAqIHRoZSBzY2Fua2V5cyB0byB0aGUgaW5kZXggQU0uCkBAIC0xNzk0LDYgKzE4MDQsOSBAQCBF eGVjSW5kZXhTY2FuSW5pdGlhbGl6ZVdvcmtlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSwKIAkJCQkJ CQkJIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cywKIAkJCQkJCQkJIHBpc2Nhbik7CiAKKwkvKiBQ YXNzIGRvd24gYW55IHR1cGxlIGJvdW5kICovCisJbm9kZS0+aXNzX1NjYW5EZXNjLT50dXBsZXNf bmVlZGVkID0gbm9kZS0+aXNzX1R1cGxlc05lZWRlZDsKKwogCS8qCiAJICogSWYgbm8gcnVuLXRp bWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZCBwYXNz CiAJICogdGhlIHNjYW5rZXlzIHRvIHRoZSBpbmRleCBBTS4KLS0gCjIuNTEuMAoK --000000000000a2454a064b95d983 Content-Type: application/x-patch; name="v11-0006-Introduce-read_stream_-pause-resume-yield.patch" Content-Disposition: attachment; filename="v11-0006-Introduce-read_stream_-pause-resume-yield.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm0x5ogo7 RnJvbSAzZmJmYjg3YjZmM2NhM2M0MjQ2YzFkMzE0NWI0NTJiMjVmMzk4NDIxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgMTMgSmFuIDIwMjYgMjA6NDQ6MTQgKzAxMDAKU3ViamVjdDogW1BBVENIIHYx MSAwNi8xMl0gSW50cm9kdWNlIHJlYWRfc3RyZWFtX3twYXVzZSxyZXN1bWUseWllbGR9KCkuCgpO b3RlOiBJIChwZ2VvZ2hlZ2FuKSBoYXZlIGV4dGVuZGVkIHJlYWRfc3RyZWFtX3lpZWxkIHRvIHN1 cHBvcnQgeWllbGRpbmcKdGhhdCBhdm9pZHMgYWZmZWN0aW5nIHRoZSBpb19jb21iaW5lX2xpbWl0 IG1lY2hhbmlzbS4KCkF1dGhvcjogVGhvbWFzIE11bnJvIDx0aG9tYXMubXVucm9AZ21haWwuY29t PgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBJTJCaFVLR0pMVDJKdldMRWlCWE1i a1NTYzVzb19ZNyUzRE4lMkJTMmNlN25wakx3OFFMM2Q1dyU0MG1haWwuZ21haWwuY29tCi0tLQog c3JjL2luY2x1ZGUvc3RvcmFnZS9yZWFkX3N0cmVhbS5oICAgICAgICAgICAgfCAgIDMgKwogc3Jj L2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYyAgICAgICAgfCAxMDcgKysrKysrKysr Ky0KIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vTWFrZWZpbGUgICAgICAgICAgIHwgICAzICst CiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL21lc29uLmJ1aWxkICAgICAgICB8ICAgMSArCiBz cmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDAxX2Fpby5wbCAgICAgICB8ICAzMCArKysKIHNy Yy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8tLTEuMC5zcWwgIHwgIDEzICsrCiBzcmMv dGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfcmVhZF9zdHJlYW0uYyB8IDE4MSArKysrKysrKysr KysrKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICB8 ICAgMSArCiA4IGZpbGVzIGNoYW5nZWQsIDMzNiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygt KQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9yZWFk X3N0cmVhbS5jCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9yZWFkX3N0cmVhbS5o IGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9yZWFkX3N0cmVhbS5oCmluZGV4IGYyYTBjYzc5Yy4uZTNi NmJiMmYzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3JlYWRfc3RyZWFtLmgKKysr IGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9yZWFkX3N0cmVhbS5oCkBAIC05OSw2ICs5OSw5IEBAIGV4 dGVybiBSZWFkU3RyZWFtICpyZWFkX3N0cmVhbV9iZWdpbl9zbWdyX3JlbGF0aW9uKGludCBmbGFn cywKIAkJCQkJCQkJCQkJCSAgIFJlYWRTdHJlYW1CbG9ja051bWJlckNCIGNhbGxiYWNrLAogCQkJ CQkJCQkJCQkJICAgdm9pZCAqY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLAogCQkJCQkJCQkJCQkJICAg c2l6ZV90IHBlcl9idWZmZXJfZGF0YV9zaXplKTsKK2V4dGVybiBCbG9ja051bWJlciByZWFkX3N0 cmVhbV9wYXVzZShSZWFkU3RyZWFtICpzdHJlYW0pOworZXh0ZXJuIHZvaWQgcmVhZF9zdHJlYW1f cmVzdW1lKFJlYWRTdHJlYW0gKnN0cmVhbSk7CitleHRlcm4gQmxvY2tOdW1iZXIgcmVhZF9zdHJl YW1feWllbGQoUmVhZFN0cmVhbSAqc3RyZWFtKTsKIGV4dGVybiB2b2lkIHJlYWRfc3RyZWFtX3Jl c2V0KFJlYWRTdHJlYW0gKnN0cmVhbSk7CiBleHRlcm4gdm9pZCByZWFkX3N0cmVhbV9lbmQoUmVh ZFN0cmVhbSAqc3RyZWFtKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8v cmVhZF9zdHJlYW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKaW5k ZXggODg3MTdjMmZmLi5hNzk2OGJiZDAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YWlvL3JlYWRfc3RyZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJl YW0uYwpAQCAtMTAwLDExICsxMDAsMTMgQEAgc3RydWN0IFJlYWRTdHJlYW0KIAlpbnQxNgkJcGlu bmVkX2J1ZmZlcnM7CiAJaW50MTYJCWRpc3RhbmNlOwogCWludDE2CQlpbml0aWFsaXplZF9idWZm ZXJzOworCWludDE2CQlyZXN1bWVfZGlzdGFuY2U7CiAJaW50CQkJcmVhZF9idWZmZXJzX2ZsYWdz OwogCWJvb2wJCXN5bmNfbW9kZTsJCS8qIHVzaW5nIGlvX21ldGhvZD1zeW5jICovCiAJYm9vbAkJ YmF0Y2hfbW9kZTsJCS8qIFJFQURfU1RSRUFNX1VTRV9CQVRDSElORyAqLwogCWJvb2wJCWFkdmlj ZV9lbmFibGVkOwogCWJvb2wJCXRlbXBvcmFyeTsKKwlib29sCQl5aWVsZGVkOwogCiAJLyoKIAkg KiBPbmUtYmxvY2sgYnVmZmVyIHRvIHN1cHBvcnQgJ3VuZ2V0dGluZycgYSBibG9jayBudW1iZXIs IHRvIHJlc29sdmUgZmxvdwpAQCAtNDYzLDcgKzQ2NSw0MyBAQCByZWFkX3N0cmVhbV9sb29rX2Fo ZWFkKFJlYWRTdHJlYW0gKnN0cmVhbSkKIAkJYmxvY2tudW0gPSByZWFkX3N0cmVhbV9nZXRfYmxv Y2soc3RyZWFtLCBwZXJfYnVmZmVyX2RhdGEpOwogCQlpZiAoYmxvY2tudW0gPT0gSW52YWxpZEJs b2NrTnVtYmVyKQogCQl7Ci0JCQkvKiBFbmQgb2Ygc3RyZWFtLiAqLworCQkJLyogRW5kIG9mIHN0 cmVhbT8gKi8KKwkJCWlmIChzdHJlYW0tPnlpZWxkZWQpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBD YWxsYmFjayByZXR1cm5lZCByZWFkX3N0cmVhbV95aWVsZCAtLSBzbyBpdCdzIG5vdCB0aGUgdHJ1 ZQorCQkJCSAqIGVuZCBvZiB0aGUgc3RyZWFtCisJCQkJICovCisJCQkJaWYgKHN0cmVhbS0+ZGlz dGFuY2UgPiAwKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogRGVmZXJyZWQgeWllbGQuCisJCQkJ CSAqCisJCQkJCSAqIENhbGxiYWNrIHlpZWxkZWQgd2hpbGUgYSBwYXJ0aWFsIHBlbmRpbmcgcmVh ZCBpcyBiZWluZworCQkJCQkgKiBmb3JtZWQgYW5kIHRoZXJlIGFyZSBwaW5uZWQgYnVmZmVycyB0 byByZXR1cm4uICBDbGVhcgorCQkJCQkgKiB5aWVsZGVkIGZsYWcgYW5kIGJyZWFrIHdpdGhvdXQg c2V0dGluZyBkaXN0YW5jZSB0byAwLgorCQkJCQkgKiBUaGF0IHdheSB0aGUgcGVuZGluZyByZWFk IHN0YXlzIGFzLWlzIGFuZCBjYW4gZ3JvdyBvbgorCQkJCQkgKiB0aGUgbmV4dCBsb29rLWFoZWFk IHBhc3MuCisJCQkJCSAqLworCQkJCQlzdHJlYW0tPnlpZWxkZWQgPSBmYWxzZTsKKwkJCQl9CisJ CQkJZWxzZQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogQWNjZXB0ZWQgeWllbGQuCisJCQkJCSAq CisJCQkJCSAqIElmIHRoZXJlJ3MgYSBwZW5kaW5nIHJlYWQsIHN0YXJ0IGl0IG5vdyB0byBlbnN1 cmUgdGhlcmUKKwkJCQkJICogYXJlIHBpbm5lZCBidWZmZXJzIGZvciB0aGUgY29uc3VtZXIgYmVm b3JlIHdlIHlpZWxkLgorCQkJCQkgKi8KKwkJCQkJaWYgKHN0cmVhbS0+cGVuZGluZ19yZWFkX25i bG9ja3MgPiAwICYmCisJCQkJCQlzdHJlYW0tPmlvc19pbl9wcm9ncmVzcyA8IHN0cmVhbS0+bWF4 X2lvcykKKwkJCQkJCXJlYWRfc3RyZWFtX3N0YXJ0X3BlbmRpbmdfcmVhZChzdHJlYW0pOworCQkJ CX0KKworCQkJCWJyZWFrOworCQkJfQorCisJCQkvKiBFbmQgdGhlIHN0cmVhbSAqLwogCQkJc3Ry ZWFtLT5kaXN0YW5jZSA9IDA7CiAJCQlicmVhazsKIAkJfQpAQCAtNzAxLDYgKzczOSw3IEBAIHJl YWRfc3RyZWFtX2JlZ2luX2ltcGwoaW50IGZsYWdzLAogCXN0cmVhbS0+c2VxX2Jsb2NrbnVtID0g SW52YWxpZEJsb2NrTnVtYmVyOwogCXN0cmVhbS0+c2VxX3VudGlsX3Byb2Nlc3NlZCA9IEludmFs aWRCbG9ja051bWJlcjsKIAlzdHJlYW0tPnRlbXBvcmFyeSA9IFNtZ3JJc1RlbXAoc21ncik7CisJ c3RyZWFtLT55aWVsZGVkID0gZmFsc2U7CiAKIAkvKgogCSAqIFNraXAgdGhlIGluaXRpYWwgcmFt cC11cCBwaGFzZSBpZiB0aGUgY2FsbGVyIHNheXMgd2UncmUgZ29pbmcgdG8gYmUKQEAgLTg3OSw3 ICs5MTgsMTUgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0cmVhbSAqc3RyZWFtLCB2 b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCiAJCS8qIEVuZCBvZiBzdHJlYW0gcmVhY2hlZD8gICov CiAJCWlmIChzdHJlYW0tPmRpc3RhbmNlID09IDApCi0JCQlyZXR1cm4gSW52YWxpZEJ1ZmZlcjsK KwkJeworCQkJaWYgKCFzdHJlYW0tPnlpZWxkZWQpCisJCQkJcmV0dXJuIEludmFsaWRCdWZmZXI7 CisKKwkJCS8qIFRoZSBjYWxsYmFjayB5aWVsZGVkLiAgUmVzdW1lLiAqLworCQkJc3RyZWFtLT55 aWVsZGVkID0gZmFsc2U7CisJCQlyZWFkX3N0cmVhbV9yZXN1bWUoc3RyZWFtKTsKKwkJCUFzc2Vy dChzdHJlYW0tPmRpc3RhbmNlICE9IDApOworCQl9CiAKIAkJLyoKIAkJICogVGhlIHVzdWFsIG9y ZGVyIG9mIG9wZXJhdGlvbnMgaXMgdGhhdCB3ZSBsb29rIGFoZWFkIGF0IHRoZSBib3R0b20KQEAg LTEwMzQsNiArMTA4MSw2MiBAQCByZWFkX3N0cmVhbV9uZXh0X2Jsb2NrKFJlYWRTdHJlYW0gKnN0 cmVhbSwgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgKnN0cmF0ZWd5KQogCXJldHVybiByZWFkX3N0cmVh bV9nZXRfYmxvY2soc3RyZWFtLCBOVUxMKTsKIH0KIAorLyoKKyAqIFRlbXBvcmFyaWx5IHN0b3Ag Y29uc3VtaW5nIGJsb2NrIG51bWJlcnMgZnJvbSB0aGUgYmxvY2sgbnVtYmVyIGNhbGxiYWNrLiAg SWYKKyAqIGNhbGxlZCBpbnNpZGUgdGhlIGJsb2NrIG51bWJlciBjYWxsYmFjaywgaXRzIHJldHVy biB2YWx1ZSBzaG91bGQgYmUKKyAqIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjay4KKyAqLworQmxv Y2tOdW1iZXIKK3JlYWRfc3RyZWFtX3BhdXNlKFJlYWRTdHJlYW0gKnN0cmVhbSkKK3sKKwlzdHJl YW0tPnJlc3VtZV9kaXN0YW5jZSA9IHN0cmVhbS0+ZGlzdGFuY2U7CisJc3RyZWFtLT5kaXN0YW5j ZSA9IDA7CisJcmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsKK30KKworLyoKKyAqIFJlc3VtZSBs b29raW5nIGFoZWFkIGFmdGVyIHRoZSBibG9jayBudW1iZXIgY2FsbGJhY2sgcmVwb3J0ZWQgZW5k LW9mLXN0cmVhbS4KKyAqIFRoaXMgaXMgdXNlZnVsIGZvciBzdHJlYW1zIG9mIHNlbGYtcmVmZXJl bnRpYWwgYmxvY2tzLCBhZnRlciBhIGJ1ZmZlciBuZWVkZWQKKyAqIHRvIGJlIGNvbnN1bWVkIGFu ZCBleGFtaW5lZCB0byBmaW5kIG1vcmUgYmxvY2sgbnVtYmVycy4KKyAqLwordm9pZAorcmVhZF9z dHJlYW1fcmVzdW1lKFJlYWRTdHJlYW0gKnN0cmVhbSkKK3sKKwlzdHJlYW0tPmRpc3RhbmNlID0g c3RyZWFtLT5yZXN1bWVfZGlzdGFuY2U7Cit9CisKKy8qCisgKiBDYWxsZWQgZnJvbSBpbnNpZGUg YSBibG9jayBudW1iZXIgY2FsbGJhY2ssIHRvIHJldHVybiBjb250cm9sIHRvIHRoZSBjYWxsZXIK KyAqIG9mIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKCkgd2l0aG91dCBsb29raW5nIGZ1cnRoZXIg YWhlYWQuICBJdHMgcmV0dXJuCisgKiB2YWx1ZSBzaG91bGQgYmUgcmV0dXJuZWQgYnkgdGhlIGNh bGxiYWNrLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHBhdXNpbmcgYW5kCisgKiByZXN1bWluZyBh dXRvbWF0aWNhbGx5IGF0IHRoZSBuZXh0IGNhbGwgdG8gcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIo KS4KKyAqCisgKiBJZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGZvcm1pbmcgYSBjb21iaW5lZCBy ZWFkIHRoYXQgaGFzbid0IHJlYWNoZWQKKyAqIGlvX2NvbWJpbmVfbGltaXQgeWV0LCBhbmQgdGhl cmUgYXJlIGFscmVhZHkgcGlubmVkIGJ1ZmZlcnMgYXZhaWxhYmxlIGZvciB0aGUKKyAqIGNvbnN1 bWVyIHRvIHByb2Nlc3MsIHdlIGRlZmVyIHRoZSB5aWVsZC4gIFRoZSBjYWxsYmFjayB3aWxsIGJl IGludm9rZWQgYWdhaW4KKyAqIG9uIHRoZSBuZXh0IGxvb2stYWhlYWQgcGFzcywgZ2l2aW5nIHRo ZSBwZW5kaW5nIHJlYWQgYSBjaGFuY2UgdG8gZ3JvdyB0bworICogZnVsbCBpb19jb21iaW5lX2xp bWl0IHNpemUuICBXZSBzdGlsbCByZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyIHRvIGJyZWFrIG91 dAorICogb2YgdGhlIGN1cnJlbnQgbG9vay1haGVhZCBsb29wIGl0ZXJhdGlvbiwgYnV0IHdlIGRv bid0IHBhdXNlIHRoZSBzdHJlYW0KKyAqIChkaXN0YW5jZSBzdGF5cyA+IDApLCBzbyByZWFkX3N0 cmVhbV9sb29rX2FoZWFkKCkgY2FuIHRlbGwgdGhhdCB0aGlzIHdhcyBhCisgKiBkZWZlcnJlZCB5 aWVsZCByYXRoZXIgdGhhbiBhbiBhY2NlcHRlZCB5aWVsZC4KKyAqLworQmxvY2tOdW1iZXIKK3Jl YWRfc3RyZWFtX3lpZWxkKFJlYWRTdHJlYW0gKnN0cmVhbSkKK3sKKwlpZiAoc3RyZWFtLT5wZW5k aW5nX3JlYWRfbmJsb2NrcyA+IDAgJiYKKwkJc3RyZWFtLT5wZW5kaW5nX3JlYWRfbmJsb2NrcyA8 IHN0cmVhbS0+aW9fY29tYmluZV9saW1pdCAmJgorCQlzdHJlYW0tPnBpbm5lZF9idWZmZXJzID4g MCkKKwl7CisJCS8qIERlZmVycmVkIHlpZWxkOiBkb24ndCBwYXVzZSwgbGV0IHRoZSBwZW5kaW5n IHJlYWQgZ3Jvdy4gKi8KKwkJc3RyZWFtLT55aWVsZGVkID0gdHJ1ZTsKKwkJcmV0dXJuIEludmFs aWRCbG9ja051bWJlcjsKKwl9CisKKwlyZWFkX3N0cmVhbV9wYXVzZShzdHJlYW0pOworCXN0cmVh bS0+eWllbGRlZCA9IHRydWU7CisJcmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsKK30KKwogLyoK ICAqIFJlc2V0IGEgcmVhZCBzdHJlYW0gYnkgcmVsZWFzaW5nIGFueSBxdWV1ZWQgdXAgYnVmZmVy cywgYWxsb3dpbmcgdGhlIHN0cmVhbQogICogdG8gYmUgdXNlZCBhZ2FpbiBmb3IgZGlmZmVyZW50 IGJsb2Nrcy4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gY2xlYXIgYW4KZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9haW8vTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlv L01ha2VmaWxlCmluZGV4IGY1M2NjNjQ2Ny4uNDY1ZWIwOWVlIDEwMDY0NAotLS0gYS9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfYWlvL01ha2VmaWxlCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9h aW8vTWFrZWZpbGUKQEAgLTUsNyArNSw4IEBAIFBHRklMRURFU0MgPSAidGVzdF9haW8gLSB0ZXN0 IGNvZGUgZm9yIEFJTyIKIE1PRFVMRV9iaWcgPSB0ZXN0X2FpbwogT0JKUyA9IFwKIAkkKFdJTjMy UkVTKSBcCi0JdGVzdF9haW8ubworCXRlc3RfYWlvLm8gXAorCXRlc3RfcmVhZF9zdHJlYW0ubwog CiBFWFRFTlNJT04gPSB0ZXN0X2FpbwogREFUQSA9IHRlc3RfYWlvLS0xLjAuc3FsCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2Fpby9tZXNvbi5idWlsZAppbmRleCBmZWZhMjViYzUuLmQxM2ZkYTIxOSAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby9tZXNvbi5idWlsZAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfYWlvL21lc29uLmJ1aWxkCkBAIC0yLDYgKzIsNyBAQAogCiB0ZXN0 X2Fpb19zb3VyY2VzID0gZmlsZXMoCiAgICd0ZXN0X2Fpby5jJywKKyAgJ3Rlc3RfcmVhZF9zdHJl YW0uYycsCiApCiAKIGlmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwMV9haW8ucGwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfYWlvL3QvMDAxX2Fpby5wbAppbmRleCA1YzYzNGVjM2MuLjVhZjU1OGJmNCAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwMV9haW8ucGwKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2Fpby90LzAwMV9haW8ucGwKQEAgLTE0ODksNiArMTQ4OSwzNSBAQCBTRUxF Q1QgcmVhZF9yZWxfYmxvY2tfbGwoJ3RibF9jc19mYWlsJywgMywgbmJsb2Nrcz0+MSwgemVyb19v bl9lcnJvcj0+dHJ1ZSk7KSwKIAkkcHNxbC0+cXVpdCgpOwogfQogCisjIFJlYWQgc3RyZWFtIHRl c3RzCitzdWIgdGVzdF9yZWFkX3N0cmVhbQoreworCW15ICRpb19tZXRob2QgPSBzaGlmdDsKKwlt eSAkbm9kZSA9IHNoaWZ0OworCW15ICgkcmV0LCAkb3V0cHV0KTsKKworCW15ICRwc3FsID0gJG5v ZGUtPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMnLCBvbl9lcnJvcl9zdG9wID0+IDApOworCisJ JHBzcWwtPnF1ZXJ5X3NhZmUoCisJCXFxKAorQ1JFQVRFIFRFTVBPUkFSWSBUQUJMRSB0bXBfcmVh ZF9zdHJlYW0oZGF0YSBpbnQgbm90IG51bGwpOworSU5TRVJUIElOVE8gdG1wX3JlYWRfc3RyZWFt IFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDApOworU0VMRUNUIHRlc3RfcmVhZF9zdHJl YW1fcmVzdW1lKCd0bXBfcmVhZF9zdHJlYW0nLCAwKTsKK0RST1AgVEFCTEUgdG1wX3JlYWRfc3Ry ZWFtOworKSk7CisKKwkkcHNxbC0+cXVlcnlfc2FmZSgKKwkJcXEoCitDUkVBVEUgVEVNUE9SQVJZ IFRBQkxFIHRtcF9yZWFkX3N0cmVhbShkYXRhIGludCBub3QgbnVsbCk7CitJTlNFUlQgSU5UTyB0 bXBfcmVhZF9zdHJlYW0gU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMCk7CitTRUxFQ1Qg dGVzdF9yZWFkX3N0cmVhbV95aWVsZCgndG1wX3JlYWRfc3RyZWFtJywgMCk7CitEUk9QIFRBQkxF IHRtcF9yZWFkX3N0cmVhbTsKKykpOworCisJJHBzcWwtPnF1aXQoKTsKK30KKworCiAKICMgUnVu IGFsbCB0ZXN0cyB0aGF0IGFyZSBzdXBwb3J0ZWQgZm9yIGFsbCBpb19tZXRob2RzCiBzdWIgdGVz dF9nZW5lcmljCkBAIC0xNTI1LDYgKzE1NTQsNyBAQCBDSEVDS1BPSU5UOwogCXRlc3RfY2hlY2tz dW0oJGlvX21ldGhvZCwgJG5vZGUpOwogCXRlc3RfaWdub3JlX2NoZWNrc3VtKCRpb19tZXRob2Qs ICRub2RlKTsKIAl0ZXN0X2NoZWNrc3VtX2NyZWF0ZWRiKCRpb19tZXRob2QsICRub2RlKTsKKwl0 ZXN0X3JlYWRfc3RyZWFtKCRpb19tZXRob2QsICRub2RlKTsKIAogICBTS0lQOgogCXsKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8tLTEuMC5zcWwgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLS0xLjAuc3FsCmluZGV4IGU0OTU0ODFjNC4u ZTM3ODEwYjcyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlv LS0xLjAuc3FsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8tLTEuMC5z cWwKQEAgLTEwNiwzICsxMDYsMTYgQEAgQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsK IENSRUFURSBGVU5DVElPTiBpbmpfaW9fcmVvcGVuX2RldGFjaCgpCiBSRVRVUk5TIHBnX2NhdGFs b2cudm9pZCBTVFJJQ1QKIEFTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKKworCisv KgorICogUmVhZCBzdHJlYW0gcmVsYXRlZCBmdW5jdGlvbnMKKyAqLworQ1JFQVRFIEZVTkNUSU9O IHRlc3RfcmVhZF9zdHJlYW1fcmVzdW1lKHJlbCByZWdjbGFzcywgYmxvY2tubyBpbnQ0KQorUkVU VVJOUyBwZ19jYXRhbG9nLnZvaWQgU1RSSUNUCitBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFH RSBDOworCitDUkVBVEUgRlVOQ1RJT04gdGVzdF9yZWFkX3N0cmVhbV95aWVsZChyZWwgcmVnY2xh c3MsIGJsb2Nrbm8gaW50NCkKK1JFVFVSTlMgcGdfY2F0YWxvZy52b2lkIFNUUklDVAorQVMgJ01P RFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9haW8vdGVzdF9yZWFkX3N0cmVhbS5jIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90 ZXN0X3JlYWRfc3RyZWFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5k MWQ0MzZhOTAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rl c3RfcmVhZF9zdHJlYW0uYwpAQCAtMCwwICsxLDE4MSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg KgorICogdGVzdF9yZWFkX3N0cmVhbS5jCisgKgkJSGVscGVycyB0byB3cml0ZSB0ZXN0cyBmb3Ig cmVhZF9zdHJlYW0uYworICoKKyAqIENvcHlyaWdodCAoYykgMjAyMC0yMDI1LCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNy Yy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9yZWFkX3N0cmVhbS5jCisgKgorICotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nl c3MvcmVsYXRpb24uaCIKKyNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWZt Z3IuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3JlYWRfc3RyZWFtLmgiCisKK3R5cGVkZWYgc3RydWN0 Cit7CisJQmxvY2tOdW1iZXIgYmxrbm87CisJaW50CQkJY291bnQ7Cit9IHRlc3RfcmVhZF9zdHJl YW1fcmVzdW1lX3N0YXRlOworCitzdGF0aWMgQmxvY2tOdW1iZXIKK3Rlc3RfcmVhZF9zdHJlYW1f cmVzdW1lX2NiKFJlYWRTdHJlYW0gKnN0cmVhbSwKKwkJCQkJCSAgIHZvaWQgKmNhbGxiYWNrX3By aXZhdGVfZGF0YSwKKwkJCQkJCSAgIHZvaWQgKnBlcl9idWZmZXJfZGF0YSkKK3sKKwl0ZXN0X3Jl YWRfc3RyZWFtX3Jlc3VtZV9zdGF0ZSAqc3RhdGUgPSBjYWxsYmFja19wcml2YXRlX2RhdGE7CisK KwkvKiBQZXJpb2RpYyBlbmQtb2Ytc3RyZWFtLiAqLworCWlmICgrK3N0YXRlLT5jb3VudCAlIDMg PT0gMCkKKwkJcmV0dXJuIHJlYWRfc3RyZWFtX3BhdXNlKHN0cmVhbSk7CisKKwlyZXR1cm4gc3Rh dGUtPmJsa25vOworfQorCisvKgorICogVGVzdCByZWFkX3N0cmVhbV9yZXN1bWUoKSwgYWxsb3dp bmcgYSBzdHJlYW0gdG8gZW5kIHRlbXBvcmFyaWx5IGFuZCB0aGVuCisgKiBjb250aW51ZSB3aGVy ZSBpdCBsZWZ0IG9mZi4KKyAqLworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X3JlYWRfc3RyZWFt X3Jlc3VtZSk7CitEYXR1bQordGVzdF9yZWFkX3N0cmVhbV9yZXN1bWUoUEdfRlVOQ1RJT05fQVJH UykKK3sKKwlPaWQJCQlyZWxpZCA9IFBHX0dFVEFSR19PSUQoMCk7CisJQmxvY2tOdW1iZXIgYmxr bm8gPSBQR19HRVRBUkdfVUlOVDMyKDEpOworCVJlbGF0aW9uCXJlbDsKKwlCdWZmZXIJCWJ1ZjsK KwlSZWFkU3RyZWFtICpzdHJlYW07CisJdGVzdF9yZWFkX3N0cmVhbV9yZXN1bWVfc3RhdGUgc3Rh dGUgPSB7LmJsa25vID0gYmxrbm99OworCisJcmVsID0gcmVsYXRpb25fb3BlbihyZWxpZCwgQWNj ZXNzU2hhcmVMb2NrKTsKKwlzdHJlYW0gPSByZWFkX3N0cmVhbV9iZWdpbl9yZWxhdGlvbihSRUFE X1NUUkVBTV9ERUZBVUxULAorCQkJCQkJCQkJCU5VTEwsCisJCQkJCQkJCQkJcmVsLAorCQkJCQkJ CQkJCU1BSU5fRk9SS05VTSwKKwkJCQkJCQkJCQl0ZXN0X3JlYWRfc3RyZWFtX3Jlc3VtZV9jYiwK KwkJCQkJCQkJCQkmc3RhdGUsCisJCQkJCQkJCQkJMCk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8 IDM7ICsraSkKKwl7CisJCS8qIFNhbWUgYmxvY2sgdHdpY2UuICovCisJCWJ1ZiA9IHJlYWRfc3Ry ZWFtX25leHRfYnVmZmVyKHN0cmVhbSwgTlVMTCk7CisJCUFzc2VydChCdWZmZXJHZXRCbG9ja051 bWJlcihidWYpID09IGJsa25vKTsKKwkJUmVsZWFzZUJ1ZmZlcihidWYpOworCQlidWYgPSByZWFk X3N0cmVhbV9uZXh0X2J1ZmZlcihzdHJlYW0sIE5VTEwpOworCQlBc3NlcnQoQnVmZmVyR2V0Qmxv Y2tOdW1iZXIoYnVmKSA9PSBibGtubyk7CisJCVJlbGVhc2VCdWZmZXIoYnVmKTsKKworCQkvKiBF bmQtb2Ytc3RyZWFtLiAqLworCQlidWYgPSByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcihzdHJlYW0s IE5VTEwpOworCQlBc3NlcnQoYnVmID09IEludmFsaWRCdWZmZXIpOworCQlidWYgPSByZWFkX3N0 cmVhbV9uZXh0X2J1ZmZlcihzdHJlYW0sIE5VTEwpOworCQlBc3NlcnQoYnVmID09IEludmFsaWRC dWZmZXIpOworCisJCS8qIFJlc3VtZS4gKi8KKwkJcmVhZF9zdHJlYW1fcmVzdW1lKHN0cmVhbSk7 CisJfQorCisJcmVhZF9zdHJlYW1fZW5kKHN0cmVhbSk7CisJcmVsYXRpb25fY2xvc2UocmVsLCBO b0xvY2spOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlC bG9ja051bWJlciBibGtubzsKKwlpbnQJCQljb3VudDsKKwlpbnQJCQl5aWVsZHM7CisJaW50CQkJ YmxvY2tzOworfQkJCXRlc3RfcmVhZF9zdHJlYW1feWllbGRfc3RhdGU7CisKK3N0YXRpYyBCbG9j a051bWJlcgordGVzdF9yZWFkX3N0cmVhbV95aWVsZF9jYihSZWFkU3RyZWFtICpzdHJlYW0sCisJ CQkJCQkgIHZvaWQgKmNhbGxiYWNrX3ByaXZhdGVfZGF0YSwKKwkJCQkJCSAgdm9pZCAqcGVyX2J1 ZmZlcl9kYXRhKQoreworCXRlc3RfcmVhZF9zdHJlYW1feWllbGRfc3RhdGUgKnN0YXRlID0gY2Fs bGJhY2tfcHJpdmF0ZV9kYXRhOworCisJLyogWWllbGQgZXZlcnkgdGhpcmQgY2FsbC4gKi8KKwlp ZiAoKytzdGF0ZS0+Y291bnQgJSAzID09IDIpCisJeworCQlzdGF0ZS0+eWllbGRzKys7CisJCXJl dHVybiByZWFkX3N0cmVhbV95aWVsZChzdHJlYW0pOworCX0KKworCXN0YXRlLT5ibG9ja3MrKzsK KwlyZXR1cm4gc3RhdGUtPmJsa25vOworfQorCisvKgorICogVGVzdCByZWFkX3N0cmVhbV95aWVs ZCgpLCBhbGxvd2luZyBjb250cm9sIHRvIGJlIHlpZWxkZWQgdGVtcG9yYXJpbHkgZnJvbQorICog dGhlIGxvb2thaGVhZCBsb29wIGFuZCByZXR1cm5lZCB0byB0aGUgY2FsbGVyIG9mIHJlYWRfc3Ry ZWFtX25leHRfYnVmZmVyKCkuCisgKi8KK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9yZWFkX3N0 cmVhbV95aWVsZCk7CitEYXR1bQordGVzdF9yZWFkX3N0cmVhbV95aWVsZChQR19GVU5DVElPTl9B UkdTKQoreworCU9pZAkJCXJlbGlkID0gUEdfR0VUQVJHX09JRCgwKTsKKwlCbG9ja051bWJlciBi bGtubyA9IFBHX0dFVEFSR19VSU5UMzIoMSk7CisJUmVsYXRpb24JcmVsOworCUJ1ZmZlcgkJYnVm OworCVJlYWRTdHJlYW0gKnN0cmVhbTsKKwl0ZXN0X3JlYWRfc3RyZWFtX3lpZWxkX3N0YXRlIHN0 YXRlID0gey5ibGtubyA9IGJsa25vfTsKKworCXJlbCA9IHJlbGF0aW9uX29wZW4ocmVsaWQsIEFj Y2Vzc1NoYXJlTG9jayk7CisJc3RyZWFtID0gcmVhZF9zdHJlYW1fYmVnaW5fcmVsYXRpb24oUkVB RF9TVFJFQU1fREVGQVVMVCwKKwkJCQkJCQkJCQlOVUxMLAorCQkJCQkJCQkJCXJlbCwKKwkJCQkJ CQkJCQlNQUlOX0ZPUktOVU0sCisJCQkJCQkJCQkJdGVzdF9yZWFkX3N0cmVhbV95aWVsZF9jYiwK KwkJCQkJCQkJCQkmc3RhdGUsCisJCQkJCQkJCQkJMCk7CisKKwlidWYgPSByZWFkX3N0cmVhbV9u ZXh0X2J1ZmZlcihzdHJlYW0sIE5VTEwpOworCUFzc2VydChCdWZmZXJHZXRCbG9ja051bWJlcihi dWYpID09IGJsa25vKTsKKwlSZWxlYXNlQnVmZmVyKGJ1Zik7CisJQXNzZXJ0KHN0YXRlLmJsb2Nr cyA9PSAxKTsKKwlBc3NlcnQoc3RhdGUueWllbGRzID09IDEpOworCisJYnVmID0gcmVhZF9zdHJl YW1fbmV4dF9idWZmZXIoc3RyZWFtLCBOVUxMKTsKKwlBc3NlcnQoQnVmZmVyR2V0QmxvY2tOdW1i ZXIoYnVmKSA9PSBibGtubyk7CisJUmVsZWFzZUJ1ZmZlcihidWYpOworCUFzc2VydChzdGF0ZS5i bG9ja3MgPT0gMyk7CisJQXNzZXJ0KHN0YXRlLnlpZWxkcyA9PSAxKTsKKworCWJ1ZiA9IHJlYWRf c3RyZWFtX25leHRfYnVmZmVyKHN0cmVhbSwgTlVMTCk7CisJQXNzZXJ0KEJ1ZmZlckdldEJsb2Nr TnVtYmVyKGJ1ZikgPT0gYmxrbm8pOworCVJlbGVhc2VCdWZmZXIoYnVmKTsKKwlBc3NlcnQoc3Rh dGUuYmxvY2tzID09IDMpOworCUFzc2VydChzdGF0ZS55aWVsZHMgPT0gMik7CisKKwlidWYgPSBy ZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcihzdHJlYW0sIE5VTEwpOworCUFzc2VydChCdWZmZXJHZXRC bG9ja051bWJlcihidWYpID09IGJsa25vKTsKKwlSZWxlYXNlQnVmZmVyKGJ1Zik7CisJQXNzZXJ0 KHN0YXRlLmJsb2NrcyA9PSA1KTsKKwlBc3NlcnQoc3RhdGUueWllbGRzID09IDIpOworCisJYnVm ID0gcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoc3RyZWFtLCBOVUxMKTsKKwlBc3NlcnQoQnVmZmVy R2V0QmxvY2tOdW1iZXIoYnVmKSA9PSBibGtubyk7CisJUmVsZWFzZUJ1ZmZlcihidWYpOworCUFz c2VydChzdGF0ZS5ibG9ja3MgPT0gNSk7CisJQXNzZXJ0KHN0YXRlLnlpZWxkcyA9PSAzKTsKKwor CWJ1ZiA9IHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKHN0cmVhbSwgTlVMTCk7CisJQXNzZXJ0KEJ1 ZmZlckdldEJsb2NrTnVtYmVyKGJ1ZikgPT0gYmxrbm8pOworCVJlbGVhc2VCdWZmZXIoYnVmKTsK KwlBc3NlcnQoc3RhdGUuYmxvY2tzID09IDcpOworCUFzc2VydChzdGF0ZS55aWVsZHMgPT0gMyk7 CisKKwlyZWFkX3N0cmVhbV9lbmQoc3RyZWFtKTsKKwlyZWxhdGlvbl9jbG9zZShyZWwsIE5vTG9j ayk7CisKKwlQR19SRVRVUk5fVk9JRCgpOworfQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRl eCBlMTgzMTc1MmIuLmJhNTJjZjUwMiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTQy MDcsNiArNDIwNyw3IEBAIHRlU2VjdGlvbgogdGVtcF90YWJsZXNwYWNlc19leHRyYQogdGVzdDEy OAogdGVzdF9yZV9mbGFncwordGVzdF9yZWFkX3N0cmVhbV9yZXN1bWVfc3RhdGUKIHRlc3RfcmVn ZXhfY3R4CiB0ZXN0X3NobV9tcV9oZWFkZXIKIHRlc3Rfc3BlYwotLSAKMi41MS4wCgo= --000000000000a2454a064b95d983 Content-Type: application/x-patch; name="v11-0007-Add-heapam-index-scan-I-O-prefetching.patch" Content-Disposition: attachment; filename="v11-0007-Add-heapam-index-scan-I-O-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm0x5ogl6 RnJvbSBkMWM3NzQzNTQwZGYwMTViYTZkMWYxODliNWI4NzA4NjQzN2Q4YTA0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFNh dCwgMTUgTm92IDIwMjUgMTQ6MDM6NTggLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMSAwNy8xMl0g QWRkIGhlYXBhbSBpbmRleCBzY2FuIEkvTyBwcmVmZXRjaGluZy4KClRoaXMgY29tbWl0IGltcGxl bWVudHMgSS9PIHByZWZldGNoaW5nIGZvciBpbmRleCBzY2FucyAoYW5kIGluZGV4LW9ubHkKc2Nh bnMgdGhhdCByZXF1aXJlIGhlYXAgZmV0Y2hlcykuIFRoaXMgd2FzIG1hZGUgcG9zc2libGUgYnkg dGhlIHJlY2VudAphZGRpdGlvbiBvZiBiYXRjaGluZyBpbnRlcmZhY2VzIHRvIGJvdGggdGhlIHRh YmxlIEFNIGFuZCBpbmRleCBBTSBBUElzLgoKVGhlIGFtZ2V0YmF0Y2ggaW5kZXggQU0gaW50ZXJm YWNlIHByb3ZpZGVzIGJhdGNoZXMgb2YgbWF0Y2hpbmcgVElEcwoocmF0aGVyIHRoYW4gb25lIHR1 cGxlIGF0IGEgdGltZSksIGVhY2ggb2Ygd2hpY2ggbXVzdCBiZSB0YWtlbiBmcm9tCmluZGV4IHR1 cGxlcyB0aGF0IGFwcGVhciB0b2dldGhlciBvbiBhIHNpbmdsZSBpbmRleCBwYWdlLiAgVGhpcyBh bGxvd3MKbXVsdGlwbGUgYmF0Y2hlcyB0byBiZSBoZWxkIG9wZW4gc2ltdWx0YW5lb3VzbHkuICBH aXZpbmcgdGhlIHRhYmxlIEFNIGFuCmV4cGxpY2l0IHVuZGVyc3RhbmRpbmcgb2YgaW5kZXggQU0g Y29uY2VwdHMvaW5kZXggcGFnZSBib3VuZGFyaWVzIGFsbG93cwppdCB0byBjb25zaWRlciBhbGwg b2YgdGhlIHJlbGV2YW50IGNvc3RzIGFuZCBiZW5lZml0cy4KClByZWZldGNoaW5nIGlzIGltcGxl bWVudGVkIHVzaW5nIGEgcHJlZmV0Y2hpbmcgcG9zaXRpb24gdW5kZXIgdGhlCmNvbnRyb2wgb2Yg dGhlIHRhYmxlIEFNIGFuZCBjb3JlIGNvZGUuICBUaGlzIGlzIGNsb3NlbHkgcmVsYXRlZCB0byB0 aGUKc2NhbiBwb3NpdGlvbiBhZGRlZCBieSBjb21taXQgRklYTUUsIHdoaWNoIGludHJvZHVjZWQg dGhlIGFtZ2V0YmF0Y2gKaW50ZXJmYWNlLiAgQSByZWFkIHN0cmVhbSBjYWxsYmFjayBhZHZhbmNl cyB0aGUgcmVhZCBzdHJlYW0gYXMgbmVlZGVkIHRvCnByb3ZpZGUgc3VmZmljaWVudGx5IG1hbnkg aGVhcCBibG9jayBudW1iZXJzIHRvIG1haW50YWluIHRoZSByZWFkCnN0cmVhbSdzIHRhcmdldCBw cmVmZXRjaCBkaXN0YW5jZS4KClRlc3RpbmcgaGFzIHNob3duIHRoYXQgaW5kZXggcHJlZmV0Y2hp bmcgY2FuIG1ha2UgaW5kZXggc2NhbnMgbXVjaApmYXN0ZXIuICBMYXJnZSByYW5nZSBzY2FucyB0 aGF0IHJldHVybiBtYW55IHR1cGxlcyBjYW4gYmUgYXMgbXVjaCBhcyAzNXgKZmFzdGVyLgoKQW4g aW1wb3J0YW50IGdvYWwgb2YgdGhlIGFtZ2V0YmF0Y2ggZGVzaWduIGlzIHRvIGVuYWJsZSB0aGUg dGFibGUgQU0ncwpyZWFkIHN0cmVhbSBjYWxsYmFjayB0byBhZHZhbmNlIGl0cyBwcmVmZXRjaCBw b3NpdGlvbiB1c2luZyBUSURzIHRoYXQKYXBwZWFyIG9uIGEgbGVhZiBwYWdlIHRoYXQncyBhaGVh ZCBvZiB0aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uJ3MgbGVhZgpwYWdlLiAgVGhpcyBpcyBjcnVj aWFsIHdpdGggc2NhbnMgb2YgaW5kZXhlcyB3aGVyZSBlYWNoIGxlYWYgcGFnZQpoYXBwZW5zIHRv IGhhdmUgcmVsYXRpdmVseSBmZXcgZGlzdGluY3QgaGVhcCBibG9ja3MgYW1vbmcgaXRzIG1hdGNo aW5nClRJRHMgKGFzIHdlbGwgYXMgd2l0aCBzY2FucyB3aXRoIGxlYWYgcGFnZXMgdGhhdCBoYXZl IHJlbGF0aXZlbHkgZmV3CnRvdGFsIG1hdGNoaW5nIGl0ZW1zKS4gIEluZGV4IHNjYW5zIGNhbiBo YXZlIGFzIG1hbnkgYXMgNjQgb3BlbiBiYXRjaGVzLAp3aGljaCB0ZXN0aW5nIGhhcyBzaG93biB0 byBiZSBhYm91dCB0aGUgbWF4aW11bSBudW1iZXIgdGhhdCBjYW4gZXZlciBiZQp1c2VmdWwuICBC YXRjaGVzIGFyZSBtYWludGFpbmVkIGluIHNjYW4gb3JkZXIgdXNpbmcgYSBzaW1wbGUgcmluZyBi dWZmZXIKZGF0YSBzdHJ1Y3R1cmUuCgpJbiByYXJlIGNhc2VzIHdoZXJlIHRoZSBzY2FuIGV4Y2Vl ZHMgdGhpcyBxdWFzaS1hcmJpdHJhcnkgbGltaXQgb2YgNjQsCnRoZSByZWFkIHN0cmVhbSBpcyB0 ZW1wb3JhcmlseSBwYXVzZWQuICBQcmVmZXRjaGluZyAodmlhIHRoZSByZWFkCnN0cmVhbSkgaXMg cmVzdW1lZCBvbmx5IGFmdGVyIHRoZSBzY2FuIHBvc2l0aW9uIGFkdmFuY2VzIGJleW9uZCBpdHMK Y3VycmVudCBvcGVuIGJhdGNoIGFuZCB0aGVuIGZyZWVzIGFuZCByZW1vdmVzIHRoZSBiYXRjaCBm cm9tIHRoZSBzY2FuJ3MKYmF0Y2ggcmluZyBidWZmZXIuICBUZXN0aW5nIGhhcyBzaG93biB0aGF0 IGl0IGlzbid0IHZlcnkgY29tbW9uIGZvcgpzY2FucyB0byBob2xkIG9wZW4gbW9yZSB0aGFuIGFi b3V0IDEwIGJhdGNoZXMgdG8gZ2V0IHRoZSBkZXNpcmVkIEkvTwpwcmVmZXRjaCBkaXN0YW5jZS4K CkF1dGhvcjogVG9tYXMgVm9uZHJhIDx0b21hc0B2b25kcmEubWU+CkF1dGhvcjogUGV0ZXIgR2Vv Z2hlZ2FuIDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1CeTogQW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFu YXJhemVsLmRlPgpSZXZpZXdlZC1CeTogVGhvbWFzIE11bnJvIDx0aG9tYXMubXVucm9AZ21haWwu Y29tPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2NmODVmNDZmLWIwMmYtMDViMi01 MjQ4LTUwMDBiODk0ZWJhYkBlbnRlcnByaXNlZGIuY29tCi0tLQogc3JjL2luY2x1ZGUvYWNjZXNz L2hlYXBhbS5oICAgICAgICAgICAgICAgICAgIHwgIDE2ICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9y ZWxzY2FuLmggICAgICAgICAgICAgICAgICB8ICAzOSArLQogc3JjL2luY2x1ZGUvb3B0aW1pemVy L2Nvc3QuaCAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbV9oYW5kbGVyLmMgICAgICB8IDQwNCArKysrKysrKysrKysrKysrLQogc3JjL2JhY2tl bmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyAgICAgICAgICAgIHwgICA0ICstCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jICAgICAgICAgfCAgNTIgKystCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRSAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9z dG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jICAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgICAgIHwgICA3ICsKIHNyYy9iYWNrZW5kL3V0aWxz L21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSB8ICAgMSArCiBkb2Mvc3JjL3NnbWwvY29uZmln LnNnbWwgICAgICAgICAgICAgICAgICAgICAgfCAgMjEgKwogZG9jL3NyYy9zZ21sL2luZGV4YW0u c2dtbCAgICAgICAgICAgICAgICAgICAgIHwgNDExICsrKysrKysrKysrKysrKy0tLQogZG9jL3Ny Yy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbCAgICAgICAgICAgIHwgIDEzICstCiBkb2Mvc3Jj L3NnbWwvdGFibGVhbS5zZ21sICAgICAgICAgICAgICAgICAgICAgfCAgIDggKwogc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQgICAgICAgIHwgICAzICstCiAxNiBmaWxlcyBj aGFuZ2VkLCA5MDkgaW5zZXJ0aW9ucygrKSwgNzYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5o CmluZGV4IGIwM2U3MDBmMC4uMmM5MjAyZGNmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nl c3MvaGVhcGFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBAIC0xMjMsNiAr MTIzLDIyIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0Y2hIZWFwRGF0YQogCUJ1ZmZlcgkJdm1i dWY7CQkJLyogdmlzaWJpbGl0eSBtYXAgYnVmZmVyICovCiAJaW50CQkJeHNfdm1faXRlbXM7CS8q ICMgaXRlbXMgdG8gcmVzb2x2ZSB2aXNpYmlsaXR5IGluZm8gZm9yICovCiAKKwkvKiBGb3IgYmF0 Y2ggaW5kZXggc2NhbnMgdGhhdCB1c2UgcmVhZCBzdHJlYW0gZm9yIHByZWZldGNoaW5nICovCisJ UmVhZFN0cmVhbSAqeHNfcmVhZF9zdHJlYW07CisKKwkvKgorCSAqIFRoZSByZWFkIHN0cmVhbSBp cyBhbGxvY2F0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2NhbiBhbmQgcmVzZXQgb24KKwkg KiByZXNjYW4gb3Igd2hlbiB0aGUgc2NhbiBkaXJlY3Rpb24gY2hhbmdlcy4gVGhlIHNjYW4gZGly ZWN0aW9uIGlzIHNhdmVkCisJICogZWFjaCB0aW1lIGEgbmV3IHR1cGxlIGlzIHJlcXVlc3RlZC4g SWYgdGhlIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMgZnJvbQorCSAqIG9uZSB0dXBsZSB0byB0aGUg bmV4dCwgdGhlIHJlYWQgc3RyZWFtIHJlbGVhc2VzIGFsbCBwcmV2aW91c2x5IHBpbm5lZAorCSAq IGJ1ZmZlcnMgYW5kIHJlc2V0cyB0aGUgcHJlZmV0Y2ggYmxvY2suCisJICovCisJU2NhbkRpcmVj dGlvbiB4c19yZWFkX3N0cmVhbV9kaXI7CS8qIGluZGV4IHNjYW4gZGlyZWN0aW9uICovCisJQmxv Y2tOdW1iZXIgeHNfcHJlZmV0Y2hfYmxvY2s7CS8qIGxhc3QgYmxvY2sgcmV0dXJuZWQgdG8geHNf cmVhZF9zdHJlYW0gKi8KKwlib29sCQl4c195aWVsZF9jaGVjazsgLyogY2hlY2tlZCBpZiBwcmVm ZXRjaGluZyBzaG91bGQgeWllbGQ/ICovCisJYm9vbAkJeHNfcGF1c2VkOwkJLyogcGF1c2VkIHVu dGlsIG5leHQgYmF0Y2ggaXMgcmVhZD8gKi8KKwlib29sCQl4c19yYW1wdXBfZG9uZTsgLyogZG9u ZSB3aXRoIGluaXRpYWwgcmFtcC11cCBwaGFzZT8gKi8KKwogCS8qIE5COiBpZiB4c19jYnVmIG9y IHZtYnVmIGFyZSBub3QgSW52YWxpZEJ1ZmZlciwgd2UgaG9sZCBhIHBpbiAqLwogfSBJbmRleEZl dGNoSGVhcERhdGE7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgg Yi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCmluZGV4IGY1MDUwZWQ3Zi4uODNjMWM5OGZl IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCisrKyBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9yZWxzY2FuLmgKQEAgLTI0Nyw4ICsyNDcsMTQgQEAgdHlwZWRlZiBzdHJ1Y3Qg SW5kZXhTY2FuQmF0Y2hEYXRhICpJbmRleFNjYW5CYXRjaDsKICAqIE1heGltdW0gbnVtYmVyIG9m IGJhdGNoZXMgKGxlYWYgcGFnZXMpIHdlIGNhbiBrZWVwIGluIG1lbW9yeS4gIFdlIG5lZWQgYQog ICogbWluaW11bSBvZiB0d28sIHNpbmNlIHdlJ2xsIG9ubHkgY29uc2lkZXIgcmVsZWFzaW5nIG9u ZSBiYXRjaCB3aGVuIGFub3RoZXIKICAqIGlzIHJlYWQuCisgKgorICogVGhlIGNob2ljZSBvZiA2 NCBiYXRjaGVzIGlzIGFyYml0cmFyeS4gIEl0J3MgYWJvdXQgMU1CIG9mIGRhdGEgd2l0aCA4S0IK KyAqIHBhZ2VzICg1MTJrQiBmb3IgcGFnZXMsIGFuZCB0aGVuIGEgYml0IG9mIG92ZXJoZWFkKS4g V2Ugc2hvdWxkIG5vdCByZWFsbHkKKyAqIG5lZWQgdGhpcyBtYW55IGJhdGNoZXMgaW4gbW9zdCBj YXNlcywgdGhvdWdoLiBUaGUgcmVhZCBzdHJlYW0gbG9va3MgYWhlYWQKKyAqIGp1c3QgZW5vdWdo IHRvIHF1ZXVlIGVub3VnaCBJT3MsIGFkanVzdGluZyB0aGUgZGlzdGFuY2UgKFRJRHMsIGJ1dAor ICogdWx0aW1hdGVseSB0aGUgbnVtYmVyIG9mIGZ1dHVyZSBiYXRjaGVzKSB0byBtZWV0IHRoYXQu CiAgKi8KLSNkZWZpbmUgSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUwkJMgorI2RlZmluZSBJTkRFWF9T Q0FOX01BWF9CQVRDSEVTCQk2NAogI2RlZmluZSBJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVMJMgog CiAvKgpAQCAtMjYwLDEyICsyNjYsMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hE YXRhICpJbmRleFNjYW5CYXRjaDsKICAqIG1hdGNoZXMgaW4uICBIb3dldmVyLCB0YWJsZSBBTXMg YXJlIGZyZWUgdG8gZmV0Y2ggdGFibGUgdHVwbGVzIGluIHdoYXRldmVyCiAgKiBvcmRlciBpcyBt b3N0IGNvbnZlbmllbnQvZWZmaWNpZW50IC0tIHByb3ZpZGVkIHRoYXQgc3VjaCByZW9yZGVyaW5n IGNhbm5vdAogICogYWZmZWN0IHRoZSBvcmRlciB0aGF0IHRhYmxlX2luZGV4X2dldG5leHRfc2xv dCBsYXRlciByZXR1cm5zIHR1cGxlcyBpbi4KKyAqCisgKiBUaGlzIGRhdGEgc3RydWN0dXJlIGFs c28gcHJvdmlkZXMgdGFibGUgQU1zIHdpdGggYSB3YXkgdG8gcmVhZCBhaGVhZCBvZiB0aGUKKyAq IGN1cnJlbnQgcmVhZCBwb3NpdGlvbiBieSBfbXVsdGlwbGVfIGJhdGNoZXMvaW5kZXggcGFnZXMu ICBUaGUgZnVydGhlciBvdXQKKyAqIHRoZSB0YWJsZSBBTSByZWFkcyBhaGVhZCBsaWtlIHRoaXMs IHRoZSBmdXJ0aGVyIGl0IGNhbiBzZWUgaW50byB0aGUgZnV0dXJlLgorICogVGhhdCB3YXkgdGhl IHRhYmxlIEFNIGlzIGFibGUgdG8gcmVvcmRlciB3b3JrIGFzIGFnZ3Jlc3NpdmVseSBhcyBkZXNp cmVkLgorICogRm9yIGV4YW1wbGUsIGluZGV4IHNjYW5zIHNvbWV0aW1lcyBuZWVkIHRvIHJlYWRh aGVhZCBieSBhcyBtYW55IGFzIGEgZmV3CisgKiBkb3plbiBhbWdldGJhdGNoIGJhdGNoZXMgaW4g b3JkZXIgdG8gbWFpbnRhaW4gYW4gb3B0aW1hbCBJL08gcHJlZmV0Y2gKKyAqIGRpc3RhbmNlIChk aXN0YW5jZSBmb3IgcmVhZGluZyB0YWJsZSBibG9ja3MvZmV0Y2hpbmcgdGFibGUgdHVwbGVzKS4K ICAqLwogdHlwZWRlZiBzdHJ1Y3QgQmF0Y2hSaW5nQnVmZmVyCiB7CiAJLyogY3VycmVudCBwb3Np dGlvbnMgaW4gYmF0Y2hlc1tdIGZvciBzY2FuICovCiAJQmF0Y2hSaW5nSXRlbVBvcyBzY2FuUG9z OwkvKiBzY2FuJ3MgcmVhZCBwb3NpdGlvbiAqLwogCUJhdGNoUmluZ0l0ZW1Qb3MgbWFya1BvczsJ LyogbWFyay9yZXN0b3JlIHBvc2l0aW9uICovCisJQmF0Y2hSaW5nSXRlbVBvcyBwcmVmZXRjaFBv czsJLyogcHJlZmV0Y2hpbmcgcG9zaXRpb24gKi8KIAogCUluZGV4U2NhbkJhdGNoIG1hcmtCYXRj aDsKIApAQCAtNDU1LDYgKzQ3MCwyOCBAQCBpbmRleF9zY2FuX2JhdGNoX2FwcGVuZChJbmRleFNj YW5EZXNjRGF0YSAqc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiAJcmluZ2J1Zi0+bmV4dEJh dGNoKys7CiB9CiAKKy8qCisgKiBDb21wYXJlIHR3byBiYXRjaCByaW5nIHBvc2l0aW9ucyBpbiB0 aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24uCisgKgorICogUmV0dXJucyBuZWdhdGl2ZSBpZiBwb3Mx IGlzIGJlaGluZCBwb3MyLCAwIGlmIGVxdWFsLCBwb3NpdGl2ZSBpZiBwb3MxIGlzCisgKiBhaGVh ZCBvZiBwb3MyLgorICovCitzdGF0aWMgaW5saW5lIGludAoraW5kZXhfc2Nhbl9wb3NfY21wKEJh dGNoUmluZ0l0ZW1Qb3MgKnBvczEsIEJhdGNoUmluZ0l0ZW1Qb3MgKnBvczIsCisJCQkJICAgU2Nh bkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJaW50OAkJYmF0Y2hkaWZmID0gKGludDgpIChwb3Mx LT5iYXRjaCAtIHBvczItPmJhdGNoKTsKKworCWlmIChiYXRjaGRpZmYgIT0gMCkKKwkJcmV0dXJu IGJhdGNoZGlmZjsKKworCS8qIFNhbWUgYmF0Y2gsIGNvbXBhcmUgaXRlbXMgKi8KKwlpZiAoU2Nh bkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCQlyZXR1cm4gcG9zMS0+aXRlbSAtIHBv czItPml0ZW07CisJZWxzZQorCQlyZXR1cm4gcG9zMi0+aXRlbSAtIHBvczEtPml0ZW07Cit9CisK IC8qCiAgKiBBZHZhbmNlIHBvc2l0aW9uIHRvIGl0cyBuZXh0IGl0ZW0gaW4gdGhlIGJhdGNoLgog ICoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggYi9zcmMvaW5jbHVk ZS9vcHRpbWl6ZXIvY29zdC5oCmluZGV4IGYyZmQ1ZDMxNS4uNDE5MzAwYTZiIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXpl ci9jb3N0LmgKQEAgLTUyLDYgKzUyLDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfcGFy YWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxl X3NlcXNjYW47CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfaW5kZXhzY2FuOwogZXh0 ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2luZGV4b25seXNjYW47CitleHRlcm4gUEdETExJ TVBPUlQgYm9vbCBlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoOwogZXh0ZXJuIFBHRExMSU1QT1JU IGJvb2wgZW5hYmxlX2JpdG1hcHNjYW47CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVf dGlkc2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9zb3J0OwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggZGE4ZDE0OTM5Li5hNDkxNjAwZmEg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtMzcsNyArMzcs OSBAQAogI2luY2x1ZGUgImNvbW1hbmRzL3Byb2dyZXNzLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Iv ZXhlY3V0b3IuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIv Y29zdC5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYWlvLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1ZnBhZ2UuaCIK ICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKQEAgLTYwLDYgKzYyLDkgQEAgc3RhdGljIEJsb2Nr TnVtYmVyIGhlYXBhbV9zY2FuX2dldF9ibG9ja3NfZG9uZShIZWFwU2NhbkRlc2MgaHNjYW4pOwog c3RhdGljIGJvb2wgQml0bWFwSGVhcFNjYW5OZXh0QmxvY2soVGFibGVTY2FuRGVzYyBzY2FuLAog CQkJCQkJCQkJYm9vbCAqcmVjaGVjaywKIAkJCQkJCQkJCXVpbnQ2NCAqbG9zc3lfcGFnZXMsIHVp bnQ2NCAqZXhhY3RfcGFnZXMpOworc3RhdGljIEJsb2NrTnVtYmVyIGhlYXBhbV9nZXRuZXh0X3N0 cmVhbShSZWFkU3RyZWFtICpzdHJlYW0sCisJCQkJCQkJCQkJIHZvaWQgKmNhbGxiYWNrX3ByaXZh dGVfZGF0YSwKKwkJCQkJCQkJCQkgdm9pZCAqcGVyX2J1ZmZlcl9kYXRhKTsKIAogCiAvKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KQEAgLTExMSw2ICsxMTYsMjEgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0 KEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCiAJICogc28gdGhhdCByZXNjYW5zIGRvbid0IGRv IGFuIGV4Y2Vzc2l2ZSBudW1iZXIgb2YgVk0gbG9va3Vwcy4KIAkgKi8KIAloc2Nhbi0+eHNfdm1f aXRlbXMgPSAxOworCisJLyoKKwkgKiBSZXNldCByZWFkIHN0cmVhbSBkaXJlY3Rpb24gdW5jb25k aXRpb25hbGx5IChoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQKKwkgKiBjaGVja3MgdGhpcyB0byBk ZXRlY3QgdGhlIGZpcnN0IGNhbGwgYWZ0ZXIgcmVzY2FuKQorCSAqLworCWhzY2FuLT54c19yZWFk X3N0cmVhbV9kaXIgPSBOb01vdmVtZW50U2NhbkRpcmVjdGlvbjsKKworCS8qIFJlc2V0IHJlYWQg c3RyZWFtIGl0c2VsZiwgYW5kIG90aGVyIGFzc29jaWF0ZWQgc3RhdGUgKi8KKwlpZiAoaHNjYW4t PnhzX3JlYWRfc3RyZWFtKQorCXsKKwkJaHNjYW4tPnhzX3ByZWZldGNoX2Jsb2NrID0gSW52YWxp ZEJsb2NrTnVtYmVyOworCQloc2Nhbi0+eHNfeWllbGRfY2hlY2sgPSBmYWxzZTsKKwkJaHNjYW4t PnhzX3BhdXNlZCA9IGZhbHNlOworCQlyZWFkX3N0cmVhbV9yZXNldChoc2Nhbi0+eHNfcmVhZF9z dHJlYW0pOworCX0KIH0KIAogc3RhdGljIHZvaWQKQEAgLTEyMCw2ICsxNDAsOSBAQCBoZWFwYW1f aW5kZXhfZmV0Y2hfZW5kKEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCiAKIAloZWFwYW1faW5k ZXhfZmV0Y2hfcmVzZXQoc2Nhbik7CiAKKwlpZiAoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKQorCQly ZWFkX3N0cmVhbV9lbmQoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKTsKKwogCWlmIChoc2Nhbi0+dm1i dWYgIT0gSW52YWxpZEJ1ZmZlcikKIAkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+dm1idWYpOwogCkBA IC0xNTAsNyArMTczLDE0IEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShzdHJ1Y3QgSW5kZXhG ZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAkJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX2NidWYp KQogCQkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfY2J1Zik7CiAKLQkJaHNjYW4tPnhzX2NidWYg PSBSZWFkQnVmZmVyKGhzY2FuLT54c19iYXNlLnJlbCwgaHNjYW4tPnhzX2Jsayk7CisJCS8qCisJ CSAqIFdoZW4gdXNpbmcgYSByZWFkIHN0cmVhbSwgdGhlIHN0cmVhbSB3aWxsIGFscmVhZHkga25v dyB3aGljaCBibG9jaworCQkgKiBudW1iZXIgY29tZXMgbmV4dCAodGhvdWdoIGFuIGFzc2VydGlv biB3aWxsIHZlcmlmeSBhIG1hdGNoIGJlbG93KQorCQkgKi8KKwkJaWYgKGhzY2FuLT54c19yZWFk X3N0cmVhbSkKKwkJCWhzY2FuLT54c19jYnVmID0gcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoaHNj YW4tPnhzX3JlYWRfc3RyZWFtLCBOVUxMKTsKKwkJZWxzZQorCQkJaHNjYW4tPnhzX2NidWYgPSBS ZWFkQnVmZmVyKGhzY2FuLT54c19iYXNlLnJlbCwgaHNjYW4tPnhzX2Jsayk7CiAKIAkJLyoKIAkJ ICogUHJ1bmUgcGFnZSB3aGVuIGl0IGlzIHBpbm5lZCBmb3IgdGhlIGZpcnN0IHRpbWUKQEAgLTIw OSw2ICsyMzksMzAgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNo VGFibGVEYXRhICpzY2FuLAogICogKGltcG9ydGFudCBmb3IgaW5uZXIgaW5kZXggc2NhbnMgb2Yg YW50aS1qb2lucyBhbmQgc2VtaS1qb2lucyksIGFuZCB0aGUKICAqIG5lZWQgdG8gbm90IGhvbGQg b250byBpbmRleCBsZWFmIHBhZ2VzIGZvciB0b28gbG9uZy4KICAqCisgKiBEcm9wcGluZyBsZWFm IHBhZ2UgcGlucyBlYXJseQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisg KiBJbiBubyBldmVudCB3aWxsIHRoZSBzY2FuIGJlIGFsbG93ZWQgdG8gaG9sZCBvbnRvIG1vcmUg dGhhbiBvbmUgYmF0Y2gncworICogbGVhZiBwYWdlIHBpbiBhdCBhIHRpbWUuICBUaGUgcHJpbWFy eSByZWFzb24gZm9yIHRoaXMgcmVzdHJpY3Rpb24gaXMgdG8KKyAqIGF2b2lkIHVuaW50ZW5kZWQg aW50ZXJhY3Rpb25zIHdpdGggdGhlIHJlYWQgc3RyZWFtLCB3aGljaCBoYXMgaXRzIG93bgorICog c3RyYXRlZ3kgZm9yIGtlZXBpbmcgdGhlIG51bWJlciBvZiBwaW5zIGhlbGQgYnkgdGhlIGJhY2tl bmQgdW5kZXIgY29udHJvbC4KKyAqCisgKiBPbmNlIHdlJ3ZlIHJlc29sdmVkIHZpc2liaWxpdHkg Zm9yIGFsbCBpdGVtcyBpbiBhIGJhdGNoLCB3ZSBjYW4gc2FmZWx5IGRyb3AKKyAqIGl0cyBsZWFm IHBhZ2UgcGluLiAgVGhpcyBpcyBzYWZlIHdpdGggcmVzcGVjdCB0byBjb25jdXJyZW50IFZBQ1VV TSBiZWNhdXNlCisgKiBpbmRleCB2YWN1dW1pbmcgd2lsbCBibG9jayBvbiBhY3F1aXJpbmcgYSBj b25mbGljdGluZyBjbGVhbnVwIGxvY2sgb24gdGhlCisgKiBiYXRjaCdzIGluZGV4IHBhZ2UgZHVl IHRvIG91ciBob2xkaW5nIGEgcGluIG9uIHRoYXQgc2FtZSBwYWdlLiAgQ29weWluZyB0aGUKKyAq IHJlbGV2YW50IHZpc2liaWxpdHkgbWFwIGRhdGEgaW50byBvdXIgbG9jYWwgY2FjaGUgc3VmZmlj ZXMgdG8gcHJldmVudCB1bnNhZmUKKyAqIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZzogaWYgYW55 IG9mIHRoZXNlIFRJRHMgcG9pbnQgdG8gZGVhZCBoZWFwIHR1cGxlcywKKyAqIFZBQ1VVTSBjYW5u b3QgcG9zc2libHkgcmV0dXJuIGZyb20gYW1idWxrZGVsZXRlIGFuZCBtYXJrIHRoZSBwb2ludGVk LXRvCisgKiBoZWFwIHBhZ2VzIGFzIGFsbC12aXNpYmxlLiAgVkFDVVVNIF9jYW5fIGRvIHNvIG9u Y2Ugd2UgcmVsZWFzZSB0aGUgYmF0Y2gncworICogcGluLCBidXQgdGhhdCdzIG9rYXk7IHdlJ2xs IGJlIHdvcmtpbmcgb2ZmIG9mIGNhY2hlZCB2aXNpYmlsaXR5IGluZm8gdGhhdAorICogaW5kaWNh dGVzIHRoYXQgdGhlIGRlYWQgVElEcyBhcmUgTk9UIGFsbC12aXNpYmxlLgorICoKKyAqIE5vdGU6 IFdlIGNhbm5vdCBkcm9wIHRoZSBwaW4gZWFybHkgd2hlbiB0aGUgc2NhbiB1c2VzIGEgbm9uLU1W Q0Mgc25hcHNob3Q7CisgKiB3ZSBtdXN0IGRlbGF5IGl0IHVudGlsIGFsbCBoZWFwIGZldGNoZXMg Zm9yIHRoZSBsb2FkZWQgYmF0Y2ggaGF2ZSB0YWtlbgorICogcGxhY2UuICBUaGlzIGlzIHdoeSB3 ZSBkb24ndCBzdXBwb3J0IHByZWZldGNoaW5nIGR1cmluZyBzdWNoIHNjYW5zLiAgU2VlCisgKiBk b2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sLgorICoKICAqIE5vdGUgb24gTWVtb3J5IE9yZGVyaW5n IEVmZmVjdHMKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCkBAIC0zNjQs MTEgKzQxOCwxMyBAQCBzdGF0aWMgcGdfYXR0cmlidXRlX2hvdCBJbmRleFNjYW5CYXRjaAogaGVh cGFtX2JhdGNoX2dldG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVj dGlvbiwKIAkJCQkJIEluZGV4U2NhbkJhdGNoIHByaW9yQmF0Y2gsIEJhdGNoUmluZ0l0ZW1Qb3Mg KnBvcykKIHsKKwlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0 YSAqKSBzY2FuLT54c19oZWFwZmV0Y2g7CiAJSW5kZXhTY2FuQmF0Y2ggYmF0Y2ggPSBOVUxMOwog CUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmIFBHX1VTRURfRk9SX0FTU0VSVFNfT05MWSA9 ICZzY2FuLT5iYXRjaHJpbmdidWY7CiAKIAkvKiBYWFg6IHdlIHNob3VsZCBhc3NlcnQgdGhhdCBh IHNuYXBzaG90IGlzIHB1c2hlZCBvciByZWdpc3RlcmVkICovCiAJQXNzZXJ0KFRyYW5zYWN0aW9u SWRJc1ZhbGlkKFJlY2VudFhtaW4pKTsKKwlBc3NlcnQoZGlyZWN0aW9uID09IGhzY2FuLT54c19y ZWFkX3N0cmVhbV9kaXIpOwogCiAJaWYgKCFwcmlvckJhdGNoKQogCXsKQEAgLTQwNiw2ICs0NjIs NyBAQCBoZWFwYW1fYmF0Y2hfZ2V0bmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyZWN0aW9uLAogCSAqIGJ1ZmZlciAoYmF0Y2hlcyBtdXN0IHN0YXkgaW4gc2NhbiBvcmRl cikuICBJZiBpdCBpc24ndCB0aGVuIHdlIHNob3VsZAogCSAqIGhhdmUgYWxyZWFkeSByZXR1cm5l ZCBzb21lIGV4aXN0aW5nIGxvYWRlZCBiYXRjaCBlYXJsaWVyLgogCSAqLworCUFzc2VydCghaHNj YW4tPnhzX3BhdXNlZCk7CiAJQXNzZXJ0KCFpbmRleF9zY2FuX2JhdGNoX2Z1bGwoc2NhbikpOwog CUFzc2VydCghcHJpb3JCYXRjaCB8fAogCQkgICAoaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChzY2Fu KSA+IDAgJiYgcHJpb3JCYXRjaC0+ZGlyID09IGRpcmVjdGlvbiAmJgpAQCAtNDQzLDYgKzUwMCwx MiBAQCBoZWFwYW1fYmF0Y2hfZ2V0bmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyZWN0aW9uLAogCQkJYmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7CiAJCX0KIAorCQkv KgorCQkgKiBSZXNldCB4c195aWVsZF9jaGVjaywgdG8gYWxsb3cgaGVhcGFtX2dldG5leHRfc3Ry ZWFtIHRvIGNvbnNpZGVyCisJCSAqIHlpZWxkaW5nIHdoZW4gaXRlbXMgZnJvbSB0aGlzIGJhdGNo IGFyZSBldmVudHVhbGx5IGV4aGF1c3RlZAorCQkgKi8KKwkJaHNjYW4tPnhzX3lpZWxkX2NoZWNr ID0gZmFsc2U7CisKIAkJLyoKIAkJICogeHNfcmVhZF9leHRyZW1hbF9vbmx5IHNjYW5zIGFyZSB1 c2VkIGJ5IGdldF9hY3R1YWxfdmFyaWFibGVfcmFuZ2UKIAkJICogdG8gZmluZCBtaW4vbWF4IHZh bHVlcy4gIFRoZXkgb25seSBuZWVkIHRoZSBleHRyZW1hbCAoZmlyc3Qgb3IKQEAgLTQ1MCw5ICs1 MTMsMzkgQEAgaGVhcGFtX2JhdGNoX2dldG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbiwKIAkJICovCiAJCWlmICh1bmxpa2VseShzY2FuLT54c19yZWFkX2V4 dHJlbWFsX29ubHkpICYmIHByaW9yQmF0Y2gpCiAJCXsKKwkJCUFzc2VydCghaHNjYW4tPnhzX3Jl YWRfc3RyZWFtKTsKIAkJCUFzc2VydChzY2FuLT54c193YW50X2l0dXApOwogCQkJcmV0dXJuIE5V TEw7CiAJCX0KKworCQkvKgorCQkgKiBEZWxheSBpbml0aWFsaXppbmcgc3RyZWFtIHVudGlsIHJl YWRpbmcgZnJvbSBzY2FuJ3Mgc2Vjb25kIGJhdGNoLgorCQkgKiBUaGlzIGhldXJpc3RpYyBhdm9p ZHMgd2FzdGluZyBjeWNsZXMgb24gc3RhcnRpbmcgYSByZWFkIHN0cmVhbSBmb3IKKwkJICogdmVy eSBzZWxlY3RpdmUgaW5kZXggc2NhbnMuICBXZSBjYW4gbGlrZWx5IGltcHJvdmUgdXBvbiB0aGlz LCBidXQKKwkJICogaXQgd29ya3Mgd2VsbCBlbm91Z2ggZm9yIG5vdy4KKwkJICoKKwkJICogQWxz byBhdm9pZCBwcmVmZXRjaGluZyBkdXJpbmcgc2NhbnMgd2hlcmUgd2UncmUgdW5hYmxlIHRvIGRy b3AgZWFjaAorCQkgKiBiYXRjaCdzIGJ1ZmZlciBwaW4gcmlnaHQgYXdheSAobm9uLU1WQ0Mgc25h cHNob3Qgc2NhbnMpLiAgV2UgYXJlCisJCSAqIG5vdCBwcmVwYXJlZCB0byBzZW5zaWJseSBsaW1p dCB0aGUgdG90YWwgbnVtYmVyIG9mIGJ1ZmZlciBwaW5zIGhlbGQKKwkJICogKHJlYWQgc3RyZWFt IGhhbmRsZXMgYWxsIHBpbiByZXNvdXJjZSBtYW5hZ2VtZW50IGZvciB1cywgYW5kIGtub3dzCisJ CSAqIG5vdGhpbmcgYWJvdXQgcGlucyBoZWxkIG9uIGluZGV4IHBhZ2VzL3dpdGhpbiBiYXRjaGVz KS4KKwkJICoKKwkJICogQWxzbyBkZWxheSBjcmVhdGluZyBhIHJlYWQgc3RyZWFtIGR1cmluZyBp bmRleC1vbmx5IHNjYW5zIHRoYXQKKwkJICogaGF2ZW4ndCBkb25lIGFueSBoZWFwIGZldGNoZXMg eWV0LiAgV2UgZG9uJ3Qgd2FudCB0byB3YXN0ZSBhbnkKKwkJICogY3ljbGVzIG9uIGFsbG9jYXRp bmcgYSByZWFkIHN0cmVhbSB1bnRpbCB3ZSBoYXZlIGEgZGVtb25zdHJhdGVkCisJCSAqIG5lZWQg Zm9yIHBlcmZvcm0gaGVhcCBmZXRjaGVzLgorCQkgKi8KKwkJaWYgKCFoc2Nhbi0+eHNfcmVhZF9z dHJlYW0gJiYgcHJpb3JCYXRjaCAmJiBzY2FuLT5NVkNDU2NhbiAmJgorCQkJaHNjYW4tPnhzX2Js ayAhPSBJbnZhbGlkQmxvY2tOdW1iZXIgJiYJLyogZm9yIGluZGV4LW9ubHkgc2NhbnMgKi8KKwkJ CWlvX21ldGhvZCAhPSBJT01FVEhPRF9TWU5DICYmIGVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2gp CisJCXsKKwkJCUFzc2VydCghYmF0Y2hyaW5nYnVmLT5wcmVmZXRjaFBvcy52YWxpZCk7CisKKwkJ CWhzY2FuLT54c19yZWFkX3N0cmVhbSA9CisJCQkJcmVhZF9zdHJlYW1fYmVnaW5fcmVsYXRpb24o UkVBRF9TVFJFQU1fREVGQVVMVCwgTlVMTCwKKwkJCQkJCQkJCQkgICBzY2FuLT5oZWFwUmVsYXRp b24sIE1BSU5fRk9SS05VTSwKKwkJCQkJCQkJCQkgICBoZWFwYW1fZ2V0bmV4dF9zdHJlYW0sIHNj YW4sIDApOworCQl9CiAJfQogCWVsc2UKIAl7CkBAIC00NzcsNiArNTcwLDQzIEBAIGhlYXBhbV9i YXRjaF9nZXRuZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24s CiAJcmV0dXJuIGJhdGNoOwogfQogCisvKgorICogSGFuZGxlIGEgY2hhbmdlIGluIGluZGV4IHNj YW4gZGlyZWN0aW9uIChhdCB0aGUgdHVwbGUgZ3JhbnVsYXJpdHkpLgorICoKKyAqIFJlc2V0cyB0 aGUgcmVhZCBzdHJlYW0sIHNpbmNlIHdlIGNhbid0IHJlbHkgb24gc2NhblBvcyBjb250aW51aW5n IHRvIGFncmVlCisgKiB3aXRoIHRoZSBibG9ja3MgdGhhdCByZWFkIHN0cmVhbSBhbHJlYWR5IGNv bnN1bWVkIHVzaW5nIHByZWZldGNoUG9zLgorICovCitzdGF0aWMgcGdfbm9pbmxpbmUgdm9pZAor aGVhcGFtX2RpcmNoYW5nZV9yZWFkc3RyZWFtX3Jlc2V0KEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNj YW4sCisJCQkJCQkJCSAgQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYsCisJCQkJCQkJCSAg U2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJLyogUmVzZXQgcmVhZCBzdHJlYW0gc3RhdGUg Ki8KKwliYXRjaHJpbmdidWYtPnByZWZldGNoUG9zLnZhbGlkID0gZmFsc2U7CisJaHNjYW4tPnhz X3lpZWxkX2NoZWNrID0gZmFsc2U7CisJaHNjYW4tPnhzX3BhdXNlZCA9IGZhbHNlOworCWhzY2Fu LT54c19yZWFkX3N0cmVhbV9kaXIgPSBOb01vdmVtZW50U2NhbkRpcmVjdGlvbjsJLyogc2VlIG5v dGUgYmVsb3cgKi8KKworCS8qIFJlc2V0IHJlYWQgc3RyZWFtIGl0c2VsZiAqLworCWlmIChoc2Nh bi0+eHNfcmVhZF9zdHJlYW0pCisJCXJlYWRfc3RyZWFtX3Jlc2V0KGhzY2FuLT54c19yZWFkX3N0 cmVhbSk7CisKKwkvKgorCSAqIEZpbmFsbHksIHJlbWVtYmVyIG5ldyBzY2FuIGRpcmVjdGlvbi4K KwkgKgorCSAqIE5vdGU6IHdlIG5lZWRlZCB0byBzZXQgeHNfcmVhZF9zdHJlYW1fZGlyIHRvIE5v TW92ZW1lbnRTY2FuRGlyZWN0aW9uCisJICogbW9tZW50YXJpbHkgdG8gYXZvaWQgc3B1cmlvdXNs eSBwcmVmZXRjaGluZyBtb3JlIGJsb2NrcyBmcm9tIHdpdGhpbiB0aGUKKwkgKiByZWFkIHN0cmVh bSBjYWxsYmFjay4gIE9uY2Ugd2UgcmV0dXJuLCB0aGUgcmVhZCBzdHJlYW0gY2FuIGJlIHVzZWQg dG8KKwkgKiBmZXRjaCBibG9ja3MgaW4gdGhlIG9wcG9zaXRlIHNjYW4gZGlyZWN0aW9uLgorCSAq CisJICogTm90ZTogaWZmIHRoZSBzY2FuIF9jb250aW51ZXNfIGluIHRoaXMgbmV3IGRpcmVjdGlv biwgYW5kIGFjdHVhbGx5CisJICogc3RlcHMgb2ZmIHNjYW5CYXRjaCB0byBhbiBlYXJsaWVyIGlu ZGV4IHBhZ2UsIGhlYXBhbV9iYXRjaF9nZXRuZXh0IHdpbGwKKwkgKiBkZWFsIHdpdGggaXQuICBC dXQgdGhhdCBtaWdodCBuZXZlciBoYXBwZW47IHRoZSBzY2FuIG1pZ2h0IHlldCBjaGFuZ2UKKwkg KiBkaXJlY3Rpb24gYWdhaW4gKG9yIGp1c3QgZW5kIGJlZm9yZSByZXR1cm5pbmcgbW9yZSBpdGVt cykuCisJICovCisJaHNjYW4tPnhzX3JlYWRfc3RyZWFtX2RpciA9IGRpcmVjdGlvbjsKK30KKwog LyogLS0tLS0tLS0tLS0tLS0tLQogICoJCWhlYXBhbV9iYXRjaF9nZXRuZXh0X3RpZCAtIGdldCBu ZXh0IFRJRCBmcm9tIGJhdGNoIHJpbmcgYnVmZmVyCiAgKgpAQCAtNDkzLDkgKzYyMywxNiBAQCBo ZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVh cERhdGEgKmhzY2FuLAogCUluZGV4U2NhbkJhdGNoIHNjYW5CYXRjaCA9IE5VTEw7CiAKIAkvKiBz Y2FuIHNob3VsZCBvbmx5IGJlIHBhdXNlZCB3aGVuIHRoZXJlJ3Mgbm8gZnJlZSBiYXRjaCBzbG90 cyAqLworCUFzc2VydCghaHNjYW4tPnhzX3BhdXNlZCB8fCBpbmRleF9zY2FuX2JhdGNoX2Z1bGwo c2NhbikpOwogCUFzc2VydCghc2NhblBvcy0+dmFsaWQgfHwgYmF0Y2hyaW5nYnVmLT5oZWFkQmF0 Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOwogCUFzc2VydChzY2FuUG9zLT52YWxpZCB8fCBpbmRleF9z Y2FuX2JhdGNoX2NvdW50KHNjYW4pID09IDApOwogCisJLyogSGFuZGxlIHJlc2V0dGluZyB0aGUg cmVhZCBzdHJlYW0gd2hlbiBzY2FuIGRpcmVjdGlvbiBjaGFuZ2VzICovCisJaWYgKGhzY2FuLT54 c19yZWFkX3N0cmVhbV9kaXIgPT0gTm9Nb3ZlbWVudFNjYW5EaXJlY3Rpb24pCisJCWhzY2FuLT54 c19yZWFkX3N0cmVhbV9kaXIgPSBkaXJlY3Rpb247CS8qIGZpcnN0IGNhbGwgKi8KKwllbHNlIGlm ICh1bmxpa2VseShoc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyICE9IGRpcmVjdGlvbikpCisJCWhl YXBhbV9kaXJjaGFuZ2VfcmVhZHN0cmVhbV9yZXNldChoc2NhbiwgYmF0Y2hyaW5nYnVmLCBkaXJl Y3Rpb24pOworCiAJLyoKIAkgKiBDaGVjayBpZiB0aGVyZSdzIGFuIGV4aXN0aW5nIGxvYWRlZCBz Y2FuQmF0Y2ggZm9yIHVzIHRvIHJldHVybiB0aGUgbmV4dAogCSAqIG1hdGNoaW5nIGl0ZW0ncyBU SUQvaW5kZXggdHVwbGUgZnJvbQpAQCAtNTA0LDcgKzY0MSw3IEBAIGhlYXBhbV9iYXRjaF9nZXRu ZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCiAJ ewogCQkvKgogCQkgKiBzY2FuUG9zIGlzIHZhbGlkLCBzbyBzY2FuQmF0Y2ggbXVzdCBhbHJlYWR5 IGJlIGxvYWRlZCBpbiBiYXRjaCByaW5nCi0JCSAqIGJ1ZmZlci4gIFdlIHJlbHkgb24gdGhhdCBo ZXJlLgorCQkgKiBidWZmZXIuICBXZSByZWx5IG9uIHRoYXQgaGVyZSAoY2FuJ3QgZG8gdGhpcyB3 aXRoIHByZWZldGNoQmF0Y2gpLgogCQkgKi8KIAkJQXNzZXJ0KGJhdGNocmluZ2J1Zi0+aGVhZEJh dGNoID09IHNjYW5Qb3MtPmJhdGNoKTsKIApAQCAtNTQ3LDIwICs2ODQsMjgzIEBAIGhlYXBhbV9i YXRjaF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFwRGF0YSAq aHNjYW4sCiAJewogCQlJbmRleFNjYW5CYXRjaCBoZWFkQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNo KHNjYW4sCiAJCQkJCQkJCQkJCQkJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpOworCQlCYXRjaFJp bmdJdGVtUG9zICpwcmVmZXRjaFBvcyA9ICZiYXRjaHJpbmdidWYtPnByZWZldGNoUG9zOwogCiAJ CS8qIEFsc28gZnJlZSBvYnNvbGVzY2VudCBoZWFkIGJhdGNoICh1bmxlc3MgaXQgaXMgc2Nhbidz IG1hcmtCYXRjaCkgKi8KIAkJdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2goc2NhbiwgaGVhZEJhdGNo KTsKIAorCQkvKgorCQkgKiBJZiB3ZSdyZSBhYm91dCB0byByZWxlYXNlIHRoZSBiYXRjaCB0aGF0 IHByZWZldGNoUG9zIGN1cnJlbnRseQorCQkgKiBwb2ludHMgdG8sIGp1c3QgaW52YWxpZGF0ZSBw cmVmZXRjaFBvcy4gIFdlJ2xsIHJlaW5pdGlhbGl6ZSBpdAorCQkgKiB1c2luZyBzY2FuUG9zIGlm IGFuZCB3aGVuIGhlYXBhbV9nZXRuZXh0X3N0cmVhbSBpcyBuZXh0IGNhbGxlZC4gKFdlCisJCSAq IG11c3QgYXZvaWQgY29uZnVzaW5nIGEgcHJlZmV0Y2hQb3MtPmJhdGNoIHRoYXQncyBhY3R1YWxs eSBiZWZvcmUKKwkJICogaGVhZEJhdGNoIHdpdGggb25lIHRoYXQncyBhZnRlciBuZXh0QmF0Y2gg ZHVlIHRvIHVpbnQ4IG92ZXJmbG93OworCQkgKiBzaW1wbGVzdCB3YXkgaXMgdG8gaW52YWxpZGF0 ZSBwcmVmZXRjaFBvcyBsaWtlIHRoaXMuKQorCQkgKi8KKwkJaWYgKHByZWZldGNoUG9zLT52YWxp ZCAmJgorCQkJcHJlZmV0Y2hQb3MtPmJhdGNoID09IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKQor CQkJcHJlZmV0Y2hQb3MtPnZhbGlkID0gZmFsc2U7CisKIAkJLyogUmVtb3ZlIHRoZSBiYXRjaCBm cm9tIHRoZSByaW5nIGJ1ZmZlciAqLwogCQliYXRjaHJpbmdidWYtPmhlYWRCYXRjaCsrOworCisJ CWlmIChoc2Nhbi0+eHNfcGF1c2VkKQorCQl7CisJCQkvKgorCQkJICogVGhlIHNjYW4ncyByZWFk IHN0cmVhbSB3YXMgcGF1c2VkIGJ5IGhlYXBhbV9nZXRuZXh0X3N0cmVhbSBkdWUKKwkJCSAqIHRv IGV4aGF1c3RpbmcgYWxsIGF2YWlsYWJsZSBmcmVlIGJhdGNoIHNsb3RzLiAgV2UganVzdCBmcmVl ZCB1cAorCQkJICogb25lIHN1Y2ggc2xvdCBub3csIHRob3VnaC4gIFJlc3VtZSB0aGUgcmVhZCBz dHJlYW0gdG8gcmUtZW5hYmxlCisJCQkgKiBwcmVmZXRjaGluZy4KKwkJCSAqLworCQkJQXNzZXJ0 KCFpbmRleF9zY2FuX2JhdGNoX2Z1bGwoc2NhbikpOworCQkJcmVhZF9zdHJlYW1fcmVzdW1lKGhz Y2FuLT54c19yZWFkX3N0cmVhbSk7CisJCQloc2Nhbi0+eHNfcGF1c2VkID0gZmFsc2U7CisJCX0K IAl9CiAKIAkvKiBJbiBwcmFjdGljZSBzY2FuQmF0Y2ggd2lsbCBhbHdheXMgYmUgdGhlIHJpbmcg YnVmZmVyJ3MgaGVhZEJhdGNoICovCiAJQXNzZXJ0KGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID09 IHNjYW5Qb3MtPmJhdGNoKTsKKwlBc3NlcnQoIWhzY2FuLT54c19wYXVzZWQpOwogCiAJcmV0dXJu IGhlYXBhbV9iYXRjaF9yZXR1cm5fdGlkKHNjYW4sIHNjYW5CYXRjaCwgc2NhblBvcyk7CiB9CiAK Ky8qCisgKiBoZWFwYW1fZ2V0bmV4dF9zdHJlYW0KKyAqCQlyZXR1cm4gdGhlIG5leHQgYmxvY2sg dG8gcGFzcyB0byB0aGUgcmVhZCBzdHJlYW0KKyAqCisgKiBUaGUgaW5pdGlhbCBiYXRjaCBpcyBh bHdheXMgbG9hZGVkIGJ5IGhlYXBhbV9iYXRjaF9nZXRuZXh0X3RpZC4gIFdlIGRvbid0CisgKiBn ZXQgY2FsbGVkIHVudGlsIHRoZSBmaXJzdCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcigpIGNhbGws IHdoZW4gYSBoZWFwCisgKiBibG9jayBpcyByZXF1ZXN0ZWQgZnJvbSB0aGUgc2NhbidzIHN0cmVh bSBmb3IgdGhlIGZpcnN0IHRpbWUuCisgKgorICogVGhlIHBvc2l0aW9uIG9mIHRoZSByZWFkX3N0 cmVhbSBpcyBzdG9yZWQgaW4gcHJlZmV0Y2hQb3MuICBJdCBpcyB0eXBpY2FsIGZvcgorICogcHJl ZmV0Y2hQb3MgdG8gY29uc2lzdGVudGx5IHN0YXkgYWhlYWQgb2YgdGhlIHNjYW5Qb3MgcG9zaXRp b24gdGhhdCdzIHVzZWQgdG8KKyAqIHRyYWNrIHRoZSBuZXh0IFRJRCB0byBiZSByZXR1cm5lZCB0 byB0aGUgc2NhbiBieSBoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQKKyAqIGFmdGVyIHRoZSBmaXJz dCB0aW1lIHdlIGdldCBjYWxsZWQuICBIb3dldmVyLCB0aGF0IGlzbid0IGEgcHJlY29uZGl0aW9u LgorICogVGhlcmUgaXMgYSBzdHJpY3QgcG9zdGNvbmRpdGlvbiwgdGhvdWdoOiB3aGVuIHdlIHJl dHVybiB3ZSdsbCBhbHdheXMgbGVhdmUKKyAqIHNjYW5Qb3MgPD0gcHJlZmV0Y2hQb3MgKGV4Y2Vw dCBpbiBjYXNlcyB3aGVyZSB3ZSByZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyKS4KKyAqLworc3Rh dGljIEJsb2NrTnVtYmVyCitoZWFwYW1fZ2V0bmV4dF9zdHJlYW0oUmVhZFN0cmVhbSAqc3RyZWFt LCB2b2lkICpjYWxsYmFja19wcml2YXRlX2RhdGEsCisJCQkJCSAgdm9pZCAqcGVyX2J1ZmZlcl9k YXRhKQoreworCUluZGV4U2NhbkRlc2Mgc2NhbiA9IChJbmRleFNjYW5EZXNjKSBjYWxsYmFja19w cml2YXRlX2RhdGE7CisJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVh cERhdGEgKikgc2Nhbi0+eHNfaGVhcGZldGNoOworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5n YnVmID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKwlCYXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zID0g JmJhdGNocmluZ2J1Zi0+c2NhblBvczsKKwlCYXRjaFJpbmdJdGVtUG9zICpwcmVmZXRjaFBvcyA9 ICZiYXRjaHJpbmdidWYtPnByZWZldGNoUG9zOworCVNjYW5EaXJlY3Rpb24geHNfcmVhZF9zdHJl YW1fZGlyID0gaHNjYW4tPnhzX3JlYWRfc3RyZWFtX2RpcjsKKwlJbmRleFNjYW5CYXRjaCBwcmVm ZXRjaEJhdGNoOworCWJvb2wJCWZyb21TY2FuUG9zID0gZmFsc2U7CisKKwlBc3NlcnQoIWhzY2Fu LT54c19wYXVzZWQpOworCisJaWYgKHhzX3JlYWRfc3RyZWFtX2RpciA9PSBOb01vdmVtZW50U2Nh bkRpcmVjdGlvbikKKwl7CisJCS8qCisJCSAqIENhbGxlZCBmcm9tIHJlYWRfc3RyZWFtX3Jlc2V0 IG9yIHJlYWRfc3RyZWFtX2VuZC4gIERvbid0IHJldHVybgorCQkgKiBhZGRpdGlvbmFsIGhlYXAg YmxvY2tzIChhdCBsZWFzdCB1bnRpbCB0aGUgc2NhbiBkaXJlY3Rpb24gaXMgc2V0IHRvCisJCSAq IEZvcndhcmRTY2FuRGlyZWN0aW9uL0JhY2t3YXJkU2NhbkRpcmVjdGlvbiBvbmNlIGFnYWluKS4K KwkJICoKKwkJICogWFhYIFdlIG9ubHkgbmVlZCB0aGlzIGhhbmRsaW5nIHRvIHdvcmsgYXJvdW5k IGEgYnVnIGluIHRoZQorCQkgKiByZWFkX3N0cmVhbV9wYXVzZSBtZWNoYW5pc20uCisJCSAqLwor CQlyZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyOworCX0KKworCS8qCisJICogc2NhblBvcyBtdXN0 IGFsd2F5cyBiZSB2YWxpZCB3aGVuIHByZWZldGNoaW5nIHRha2VzIHBsYWNlLiAgVGhlcmUgaGFz CisJICogdG8gYmUgYXQgbGVhc3Qgb25lIGJhdGNoLCBsb2FkZWQgYXMgb3VyIHNjYW5CYXRjaC4K KwkgKi8KKwlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChzY2FuKSA+IDApOworCUFzc2Vy dChzY2FuUG9zLT52YWxpZCk7CisKKwkvKgorCSAqIHByZWZldGNoUG9zIG1pZ2h0IG5vdCB5ZXQg YmUgdmFsaWQuICBJdCBtaWdodCBoYXZlIGFsc28gZmFsbGVuIGJlaGluZAorCSAqIHNjYW5Qb3Mu ICBEZWFsIHdpdGggYm90aC4KKwkgKgorCSAqIElmIHByZWZldGNoUG9zIGhhcyBub3QgYmVlbiBp bml0aWFsaXplZCB5ZXQsIHRoYXQgdHlwaWNhbGx5IGluZGljYXRlcworCSAqIHRoYXQgdGhpcyBp cyB0aGUgZmlyc3QgY2FsbCBoZXJlIGZvciB0aGUgZW50aXJlIHNjYW4uICBXZSBpbml0aWFsaXpl CisJICogcHJlZmV0Y2hQb3MgdXNpbmcgdGhlIGN1cnJlbnQgc2NhblBvcywgc2luY2UgdGhlIGN1 cnJlbnQgc2NhbkJhdGNoCisJICogaXRlbSdzIFRJRCBzaG91bGQgaGF2ZSBpdHMgYmxvY2sgbnVt YmVyIHJldHVybmVkIGJ5IHRoZSByZWFkIHN0cmVhbQorCSAqIGZpcnN0LiAgSXQncyBsaWtlbHkg dGhhdCBwcmVmZXRjaFBvcyB3aWxsIGdldCBhaGVhZCBvZiBzY2FuUG9zIGJlZm9yZQorCSAqIGxv bmcsIGJ1dCB0aGF0IGhhc24ndCBoYXBwZW5lZCB5ZXQuCisJICoKKwkgKiBJdCdzIGFsc28gcG9z c2libGUgZm9yIHByZWZldGNoUG9zIHRvICJmYWxsIGJlaGluZCIgc2NhblBvcywgYXQgbGVhc3QK KwkgKiBpbiBhIHRyaXZpYWwgc2Vuc2U6IGlmIG1hbnkgYWRqYWNlbnQgaXRlbXMgYXJlIHJldHVy bmVkIHRoYXQgY29udGFpbgorCSAqIFRJRHMgdGhhdCBwb2ludCB0byB0aGUgc2FtZSBoZWFwIGJs b2NrLCBzY2FuUG9zIGNhbiBhY3R1YWxseSBvdmVydGFrZQorCSAqIHByZWZldGNoUG9zIChwcmVm ZXRjaFBvcyBjYW4ndCBhZHZhbmNlIHVudGlsIHRoZSBzY2FuIGFjdHVhbGx5IGNhbGxzCisJICog cmVhZF9zdHJlYW1fbmV4dF9idWZmZXIpLiAgUmVpbml0aWFsaXppbmcgZnJvbSBzY2FuUG9zIGlz IGVub3VnaCB0bworCSAqIGVuc3VyZSB0aGF0IHByZWZldGNoUG9zIHN0aWxsIGZldGNoZXMgdGhl IG5leHQgaGVhcCBibG9jayB0aGF0IHNjYW5Qb3MKKwkgKiB3aWxsIHJlcXVpcmUgKHByZWZldGNo UG9zIGNhbiBuZXZlciBmYWxsIGJlaGluZCAiYnkgbW9yZSB0aGFuIG9uZSBncm91cAorCSAqIG9m IGl0ZW1zIHRoYXQgYWxsIHBvaW50IHRvIHRoZSBzYW1lIGhlYXAgYmxvY2siLCBzbyB0aGlzIGlz IHNhZmUpLgorCSAqCisJICogTm90ZTogd2hlbiBoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQgZnJl ZXMgYSBiYXRjaCB0aGF0IHByZWZldGNoUG9zCisJICogcG9pbnRzIHRvLCBpdCdsbCBpbnZhbGlk YXRlIHByZWZldGNoUG9zIGZvciB1cy4gIFRoaXMgcmVtb3ZlcyBhbnkKKwkgKiBkYW5nZXIgb2Yg cHJlZmV0Y2hQb3MuYmF0Y2ggZmFsbGluZyBzbyBmYXIgYmVoaW5kIHNjYW5Qb3MuYmF0Y2ggdGhh dCBpdAorCSAqIHdyYXBzIGFyb3VuZCAoYW5kIGFwcGVhcnMgdG8gYmUgYWhlYWQgb2Ygc2NhblBv cyBpbnN0ZWFkIG9mIGJlaGluZCBpdCkuCisJICovCisJaWYgKCFwcmVmZXRjaFBvcy0+dmFsaWQg fHwKKwkJaW5kZXhfc2Nhbl9wb3NfY21wKHByZWZldGNoUG9zLCBzY2FuUG9zLCB4c19yZWFkX3N0 cmVhbV9kaXIpIDwgMCkKKwl7CisJCWhzY2FuLT54c19wcmVmZXRjaF9ibG9jayA9IEludmFsaWRC bG9ja051bWJlcjsKKwkJaHNjYW4tPnhzX3lpZWxkX2NoZWNrID0gdHJ1ZTsKKwkJKnByZWZldGNo UG9zID0gKnNjYW5Qb3M7CisJCWZyb21TY2FuUG9zID0gdHJ1ZTsKKwl9CisKKwkvKgorCSAqIENv bnNpZGVyIGlmIHdlIG5lZWQgdG8geWllbGQsIGlmIHdlIGhhdmVuJ3QgZG9uZSBzbyBhbHJlYWR5 IGZvciB0aGUKKwkgKiBjdXJyZW50IHByZWZldGNoQmF0Y2guICBXZSB5aWVsZCBhdCB0aGUgbmF0 dXJhbCBib3VuZGFyeSBiZXR3ZWVuCisJICogZXhoYXVzdGluZyBvbmUgYmF0Y2gncyBpdGVtcyBh bmQgbG9hZGluZyB0aGUgbmV4dCwgZ2l2aW5nIHRoZSBzY2FuIGEKKwkgKiBjaGFuY2UgdG8gcmV0 dXJuIHNjYW5Qb3MgaXRlbXMgYW5kIHBvdGVudGlhbGx5IGVuZCBlbnRpcmVseSAoZS5nLiwgd2l0 aAorCSAqIExJTUlUKSBiZWZvcmUgd2UgZWFnZXJseSBjb21taXQgdG8gbG9hZGluZyBhbm90aGVy IGJhdGNoLgorCSAqCisJICogV2hlbiB3ZSB5aWVsZCwgdGhlIHNjYW4gd2lsbCByZXR1cm4gYXQg bGVhc3Qgb25lIG1vcmUgc2NhblBvcyBpdGVtLAorCSAqIG9mdGVuIHNldmVyYWwgbW9yZSAocGFy dGljdWxhcmx5IGR1cmluZyBzY2FucyBvZiBpbmRleGVzIHdpdGggaGlnaAorCSAqIHBoeXNpY2Fs L2xvZ2ljYWwgY29ycmVsYXRpb24sIHdoZXJlIGJhdGNoZXMgY29udGFpbiBncm91cHMgb2YgYWRq YWNlbnQKKwkgKiBpdGVtcyB3aG9zZSBUSURzIGFsbCBwb2ludCB0byB0aGUgc2FtZSBoZWFwIHBh Z2UpLgorCSAqCisJICogUHJlZmV0Y2hpbmcgY2FuIGNvbnRpbnVlIG9uY2UgdGhlIHNjYW4gcmVx dWVzdHMgdGhlIGJ1ZmZlciBmb3IgdGhlIG5leHQKKwkgKiBlbnF1ZXVlZCBoZWFwIGJsb2NrIGJ5 IGNhbGxpbmcgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIuICBXZSB3ZWlnaCB0aGUKKwkgKiBuZWVk IHRvIGtlZXAgdGhlIHNjYW4gcmVzcG9uc2l2ZSAodG8gYXZvaWQgc2Vuc2VsZXNzbHkgZG9pbmcg YSBsYXJnZQorCSAqIGFtb3VudCBvZiB3b3JrIHdoZW4gd2Ugc2hvdWxkIGp1c3QgcmV0dXJuIGEg c2NhblBvcyB0dXBsZSBpbW1lZGlhdGVseSkKKwkgKiBhZ2FpbnN0IHRoZSBuZWVkIGZvciB0aGUg cmVhZCBzdHJlYW0gdG8gbWFpbnRhaW4gaXRzIHByZWZldGNoIGRpc3RhbmNlCisJICogKGlmIHdl IHBhdXNlIHRvbyBtdWNoIGl0J2xsIGh1cnQgdGhlIHN0cmVhbSdzIGFiaWxpdHkgdG8gbWFpbnRh aW4gYQorCSAqIHN1ZmZpY2llbnQgcHJlZmV0Y2ggZGlzdGFuY2Ugd2hlbiBJL08gYm91bmQpLgor CSAqCisJICogS2VlcGluZyB0aGUgc2NhbiByZXNwb25zaXZlIGlzIGltcG9ydGFudCBkdXJpbmcg aW5kZXgtb25seSBzY2FucyB0aGF0CisJICogcmVxdWlyZSBvbmx5IGEgZmV3IGhlYXAgZmV0Y2hl cy4gIEl0IGFsc28gbWF0dGVycyB3aGVuIGFsbG93aW5nIHRoZQorCSAqIHNjYW4gdG8gcmV0dXJu IGp1c3QgYSBmZXcgbW9yZSBpdGVtcyBoYXMgdGhlIHBvdGVudGlhbCB0byBhbGxvdyB0aGUKKwkg KiBzY2FuIHRvIGVuZCBlbnRpcmVseSAoZS5nLiwgd2l0aCBhbiBPUkRFUiBCWSAuLi4gTElNSVQg Tiwgb3Igd2l0aGluIGEKKwkgKiBzY2FuIHRoYXQgZmVlZHMgaW50byBhIG1lcmdlIGpvaW4pLgor CSAqLworCWVsc2UgaWYgKCFoc2Nhbi0+eHNfeWllbGRfY2hlY2spCisJeworCQloc2Nhbi0+eHNf eWllbGRfY2hlY2sgPSB0cnVlOworCQlpZiAoIWhzY2FuLT54c19yYW1wdXBfZG9uZSkKKwkJewor CQkJLyoKKwkJCSAqIE5ldmVyIHlpZWxkIGR1cmluZyB0aGUgaW5pdGlhbCByYW1wLXVwIHBoYXNl IG9mIHRoZSBzY2FuLgorCQkJICogWWllbGRpbmcgdG9vIGVhcmx5IHByZXZlbnRzIHRoZSByZWFk IHN0cmVhbSBmcm9tIGJ1aWxkaW5nIHVwIGFuCisJCQkgKiBhZGVxdWF0ZSBwcmVmZXRjaCBkaXN0 YW5jZS4KKwkJCSAqLworCQkJaWYgKGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID49IDQpCisJCQkJ aHNjYW4tPnhzX3JhbXB1cF9kb25lID0gdHJ1ZTsKKwkJfQorCisJCWlmIChoc2Nhbi0+eHNfcmFt cHVwX2RvbmUpCisJCQlyZXR1cm4gcmVhZF9zdHJlYW1feWllbGQoc3RyZWFtKTsKKwl9CisKKwlw cmVmZXRjaEJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBwcmVmZXRjaFBvcy0+YmF0Y2gp OworCWZvciAoOzspCisJeworCQlCYXRjaE1hdGNoaW5nSXRlbSAqaXRlbTsKKwkJQmxvY2tOdW1i ZXIgcHJlZmV0Y2hfYmxvY2s7CisKKwkJaWYgKGZyb21TY2FuUG9zKQorCQl7CisJCQkvKgorCQkJ ICogRG9uJ3QgaW5jcmVtZW50IGl0ZW0gd2hlbiBwcmVmZXRjaFBvcyB3YXMganVzdCBpbml0aWFs aXplZAorCQkJICogdXNpbmcgc2NhblBvcy4gIFdlJ2xsIHJldHVybiB0aGUgc2NhblBvcyBpdGVt J3MgaGVhcCBibG9jaworCQkJICogZGlyZWN0bHkgb24gdGhlIGZpcnN0IGNhbGwgaGVyZS4gIElu IG90aGVyIHdvcmRzLCB3ZSdsbCByZXR1cm4KKwkJCSAqIHRoZSBoZWFwIGJsb2NrIGZvciB0aGUg VElEIHBhc3NlZCB0byBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUKKwkJCSAqIGF0IHRoZSBwb2lu dCB3aGVyZSBpdCBjYWxsZWQgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIgZm9yIHRoZQorCQkJICog Zmlyc3QgdGltZSBkdXJpbmcgdGhlIHNjYW4uCisJCQkgKi8KKwkJCUFzc2VydChoc2Nhbi0+eHNf eWllbGRfY2hlY2spOworCQkJZnJvbVNjYW5Qb3MgPSBmYWxzZTsKKwkJfQorCQllbHNlIGlmICgh aW5kZXhfc2Nhbl9wb3NfYWR2YW5jZSh4c19yZWFkX3N0cmVhbV9kaXIsCisJCQkJCQkJCQkJIHBy ZWZldGNoQmF0Y2gsIHByZWZldGNoUG9zKSkKKwkJeworCQkJLyoKKwkJCSAqIFJhbiBvdXQgb2Yg aXRlbXMgZnJvbSBwcmVmZXRjaEJhdGNoLiAgVHJ5IHRvIGFkdmFuY2UgdG8gdGhlCisJCQkgKiBz Y2FuJ3MgbmV4dCBiYXRjaC4KKwkJCSAqLworCQkJaWYgKHVubGlrZWx5KGluZGV4X3NjYW5fYmF0 Y2hfZnVsbChzY2FuKSkpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBDYW4ndCBhZHZhbmNlIHByZWZl dGNoQmF0Y2ggYmVjYXVzZSBhbGwgYXZhaWxhYmxlCisJCQkJICogYmF0Y2hyaW5nYnVmIGJhdGNo IHNsb3RzIGFyZSBjdXJyZW50bHkgaW4gdXNlLgorCQkJCSAqCisJCQkJICogRGVhbCB3aXRoIHRo aXMgYnkgbW9tZW50YXJpbHkgcGF1c2luZyB0aGUgcmVhZCBzdHJlYW0uCisJCQkJICogaGVhcGFt X2JhdGNoX2dldG5leHRfdGlkIHdpbGwgcmVzdW1lIHRoZSByZWFkIHN0cmVhbSBsYXRlciwKKwkJ CQkgKiB0aG91Z2ggb25seSBhZnRlciBzY2FuUG9zIGhhcyBjb25zdW1lZCBhbGwgcmVtYWluaW5n IGl0ZW1zCisJCQkJICogZnJvbSBzY2FuQmF0Y2ggKGF0IHdoaWNoIHBvaW50IHNjYW5CYXRjaCB3 aWxsIGJlIGZyZWVkLAorCQkJCSAqIG1ha2luZyBpdHMgc2xvdCBhdmFpbGFibGUgZm9yIHJldXNl IGJ5IGEgbGF0ZXIgYmF0Y2gpLgorCQkJCSAqCisJCQkJICogSW4gcHJhY3RpY2Ugd2UgaGFyZGx5 IGV2ZXIgbmVlZCB0byBkbyB0aGlzIChpdCBoYXBwZW5zIGZhcgorCQkJCSAqIGxlc3Mgb2Z0ZW4g dGhhbiB5aWVsZGluZykuICBJdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBhdm9pZAorCQkJCSAqIHRo ZSBuZWVkIHRvIHBhdXNlIHRoZSByZWFkIHN0cmVhbSBieSBkeW5hbWljYWxseSBhbGxvY2F0aW5n CisJCQkJICogc2xvdHMsIGJ1dCB0aGF0IHdvdWxkIGFkZCBjb21wbGV4aXR5IGZvciBubyByZWFs IGJlbmVmaXQuCisJCQkJICovCisJCQkJaHNjYW4tPnhzX3BhdXNlZCA9IHRydWU7CisJCQkJaHNj YW4tPnhzX3lpZWxkX2NoZWNrID0gdHJ1ZTsJLyogc2tpcCBjaGVjayBvbiBuZXh0IGNhbGwKKwkJ CQkJCQkJCQkJCSAqIGhlcmUgKi8KKwkJCQlyZXR1cm4gcmVhZF9zdHJlYW1fcGF1c2Uoc3RyZWFt KTsKKwkJCX0KKworCQkJcHJlZmV0Y2hCYXRjaCA9IGhlYXBhbV9iYXRjaF9nZXRuZXh0KHNjYW4s IHhzX3JlYWRfc3RyZWFtX2RpciwKKwkJCQkJCQkJCQkJCSBwcmVmZXRjaEJhdGNoLCBwcmVmZXRj aFBvcyk7CisJCQlpZiAoIXByZWZldGNoQmF0Y2gpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBGYWls ZWQgdG8gbG9hZCBuZXh0IGJhdGNoLCBzbyBhbGwgdGhlIGJhdGNoZXMgdGhhdCB0aGUgc2Nhbgor CQkJCSAqIHdpbGwgZXZlciByZXF1aXJlIChiYXJyaW5nIGEgY2hhbmdlIGluIHNjYW4gZGlyZWN0 aW9uKSBhcmUKKwkJCQkgKiBub3cgbG9hZGVkCisJCQkJICovCisJCQkJcmV0dXJuIEludmFsaWRC bG9ja051bWJlcjsKKwkJCX0KKworCQkJLyogUG9zaXRpb24gcHJlZmV0Y2hQb3MgdG8gdGhlIHN0 YXJ0IG9mIG5ldyBwcmVmZXRjaEJhdGNoICovCisJCQlpbmRleF9zY2FuX3Bvc19uZXh0YmF0Y2go eHNfcmVhZF9zdHJlYW1fZGlyLAorCQkJCQkJCQkJIHByZWZldGNoQmF0Y2gsIHByZWZldGNoUG9z KTsKKwkJfQorCisJCS8qCisJCSAqIHByZWZldGNoUG9zIG5vdyBwb2ludHMgdG8gdGhlIG5leHQg aXRlbSB3aG9zZSBUSUQncyBoZWFwIGJsb2NrCisJCSAqIG51bWJlciBtaWdodCBuZWVkIHRvIGJl IHByZWZldGNoZWQKKwkJICovCisJCUFzc2VydChpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHByZWZl dGNoUG9zLT5iYXRjaCkgPT0gcHJlZmV0Y2hCYXRjaCk7CisJCUFzc2VydChwcmVmZXRjaFBvcy0+ aXRlbSA+PSBwcmVmZXRjaEJhdGNoLT5maXJzdEl0ZW0gJiYKKwkJCSAgIHByZWZldGNoUG9zLT5p dGVtIDw9IHByZWZldGNoQmF0Y2gtPmxhc3RJdGVtKTsKKworCQkvKiBzY2FuUG9zIGlzIGFsd2F5 cyA8PSBwcmVmZXRjaFBvcyB3aGVuIHdlIHJldHVybiAqLworCQlBc3NlcnQoaW5kZXhfc2Nhbl9w b3NfY21wKHNjYW5Qb3MsIHByZWZldGNoUG9zLCB4c19yZWFkX3N0cmVhbV9kaXIpIDw9IDApOwor CisJCWl0ZW0gPSAmcHJlZmV0Y2hCYXRjaC0+aXRlbXNbcHJlZmV0Y2hQb3MtPml0ZW1dOworCQlw cmVmZXRjaF9ibG9jayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIoJml0ZW0tPmhlYXBUaWQp OworCisJCWlmIChzY2FuLT54c193YW50X2l0dXApCisJCXsKKwkJCS8qIG1ha2Ugc3VyZSB3ZSBo YXZlIHZpc2liaWxpdHkgaW5mbyBmb3IgdGhlIGl0ZW0gKi8KKwkJCWhlYXBhbV9iYXRjaF9yZXNv bHZlX3Zpc2liaWxpdHkoc2NhbiwgcHJlZmV0Y2hCYXRjaCwgcHJlZmV0Y2hQb3MpOworCisJCQkv KiBkb24ndCBwcmVmZXRjaCBpZiBpdGVtIGlzIGtub3duIHRvIGJlIGFsbC12aXNpYmxlICovCisJ CQlpZiAocHJlZmV0Y2hCYXRjaC0+dmlzSW5mb1twcmVmZXRjaFBvcy0+aXRlbV0gJiBCQVRDSF9W SVNfQUxMX1ZJU0lCTEUpCisJCQkJY29udGludWU7CisJCX0KKworCQlpZiAocHJlZmV0Y2hfYmxv Y2sgPT0gaHNjYW4tPnhzX3ByZWZldGNoX2Jsb2NrKQorCQl7CisJCQkvKgorCQkJICogcHJlZmV0 Y2hfYmxvY2sgbWF0Y2hlcyB0aGUgbGFzdCBwcmVmZXRjaFBvcyBpdGVtJ3MgVElEJ3MgaGVhcAor CQkJICogYmxvY2sgbnVtYmVyOyB3ZSBtdXN0IG5vdCByZXR1cm4gdGhlIHNhbWUgcHJlZmV0Y2hf YmxvY2sgdHdpY2UKKwkJCSAqICh0d2ljZSBpbiBzdWNjZXNzaW9uKQorCQkJICovCisJCQljb250 aW51ZTsKKwkJfQorCisJCS8qIFdlIGhhdmUgYSBuZXcgaGVhcCBibG9jayBudW1iZXIgdG8gcmV0 dXJuIHRvIHJlYWQgc3RyZWFtICovCisJCWhzY2FuLT54c19wcmVmZXRjaF9ibG9jayA9IHByZWZl dGNoX2Jsb2NrOworCQlyZXR1cm4gcHJlZmV0Y2hfYmxvY2s7CisJfQorCisJcmV0dXJuIEludmFs aWRCbG9ja051bWJlcjsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJCWluZGV4X2ZldGNo X2hlYXAgLSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhlYXAgdHVwbGUKICAqCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L2luZGV4YW0uYwppbmRleCBhNDhmMDNmZjQuLjZjN2I1ODRhMiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aW5kZXgvaW5kZXhhbS5jCkBAIC0zNzksNyArMzc5LDcgQEAgaW5kZXhfcmVzY2FuKEluZGV4U2Nh bkRlc2Mgc2NhbiwKIAlBc3NlcnQobmtleXMgPT0gc2Nhbi0+bnVtYmVyT2ZLZXlzKTsKIAlBc3Nl cnQobm9yZGVyYnlzID09IHNjYW4tPm51bWJlck9mT3JkZXJCeXMpOwogCi0JLyogUmVsZWFzZSBy ZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGZyb20gdGFibGUgYWNjZXNzZXMgKi8KKwkvKiBy ZXNldCByZWFkIHN0cmVhbSBhbmQgcmVsZWFzZSBidWZmZXIgcGlucyBmcm9tIHRhYmxlIGFjY2Vz c2VzICovCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKIAkJdGFibGVfaW5kZXhfZmV0Y2hfcmVz ZXQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKIApAQCAtNDY3LDcgKzQ2Nyw3IEBAIGluZGV4X3Jlc3Ry cG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlTQ0FOX0NIRUNLUzsKIAlDSEVDS19TQ0FOX1BST0NF RFVSRShhbWdldGJhdGNoKTsKIAotCS8qIHJlbGVhc2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBw aW5zKSBmcm9tIHRhYmxlIGFjY2Vzc2VzICovCisJLyogcmVzZXQgcmVhZCBzdHJlYW0gYW5kIHJl bGVhc2UgYnVmZmVyIHBpbnMgZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLwogCWlmIChzY2FuLT54c19o ZWFwZmV0Y2gpCiAJCXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaCk7 CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCmluZGV4IDliYzRkZDUyZi4uYTkz NmVhM2UyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKQEAgLTEwLDcgKzEw LDEwIEBACiAgKiBhcHByb2FjaCBlbmFibGVzIGVmZmljaWVudCBwcmVmZXRjaGluZyBvZiB0YWJs ZSBBTSBibG9ja3MgZHVyaW5nIG9yZGVyZWQKICAqIGluZGV4IHNjYW5zLgogICoKLSAqIFRoZSBy aW5nIGJ1ZmZlciBsb2FkcyBiYXRjaGVzIGluIGluZGV4IGtleSBzcGFjZSBvcmRlci4KKyAqIFRo ZSByaW5nIGJ1ZmZlciBsb2FkcyBiYXRjaGVzIGluIGluZGV4IGtleSBzcGFjZSBvcmRlci4gIFRo aXMgYWxsb3dzIHRoZQorICogdGFibGUgQU0gdG8gbWFpbnRhaW4gYW4gYWRlcXVhdGUgcHJlZmV0 Y2ggZGlzdGFuY2U6IGl0cyByZWFkIHN0cmVhbQorICogY2FsbGJhY2sgaXMgdGhlcmVieSBhYmxl IHRvIHJlcXVlc3QgdGFibGUgYmxvY2tzIHJlZmVyZW5jZWQgYnkgaW5kZXggcGFnZXMKKyAqIHRo YXQgYXJlIHdlbGwgYWhlYWQgb2YgdGhlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbidzIGluZGV4IHBh Z2UuCiAgKgogICogVGhlcmUncyB0aHJlZSB0eXBlcyBvZiBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1 bGU6CiAgKgpAQCAtMjgsNiArMzEsMjggQEAKICAqICAgIEFNcyB0aGF0IGltcGxlbWVudCB0aGUg YW1nZXRiYXRjaCBpbnRlcmZhY2UuICBUaGVzZSBtYW5hZ2UgYmF0Y2gKICAqICAgIGFsbG9jYXRp b24sIGluZGV4IHBhZ2UgYnVmZmVyIGxvY2sgcmVsZWFzZSwgYW5kIGJhdGNoIG1lbW9yeSByZWN5 Y2xpbmcuCiAgKgorICogVGhlc2UgdGhyZWUgbGF5ZXJzIGNvb3JkaW5hdGUgd2l0aG91dCBleHBs aWNpdCBjb3VwbGluZzogdGhlIGNvcmUgbGlmZWN5Y2xlCisgKiBmdW5jdGlvbnMgYXNzdW1lIHRo YXQgdGFibGUgQU1zIHVzZSBzY2FuUG9zL3NjYW5CYXRjaCBhbmQgcHJlZmV0Y2hQb3MvCisgKiBw cmVmZXRjaEJhdGNoIGluIGEgc3RhbmRhcmRpemVkIHdheSAoc2VlIGhlYXBhbV9oYW5kbGVyLmMg Zm9yIHRoZSByZWZlcmVuY2UKKyAqIGltcGxlbWVudGF0aW9uKSwgd2hpbGUgdGFibGUgQU1zIGFz c3VtZSB0aGF0IGluZGV4IEFNcyBmcmVlIGFuZCB1bmxvY2sKKyAqIGJhdGNoZXMgYWNjb3JkaW5n IHRvIHRoZSBjb252ZW50aW9ucyBlc3RhYmxpc2hlZCBoZXJlLiAgU2VlIGluZGV4YW0uc2dtbAor ICogZm9yIHRoZSBmdWxsIHNwZWNpZmljYXRpb24gb2YgdGhlIGFtZ2V0YmF0Y2gvYW1raWxsaXRl bXNiYXRjaCBjb250cmFjdC4KKyAqCisgKiBUaGUgdGFibGUgQU0gZnVsbHkgY29udHJvbHMgdGhl IHJlYWQgc3RyZWFtIGFzIGl0cyBvd24gcHJpdmF0ZSBzdGF0ZS4KKyAqIFdoZW4gdGhlIHNjYW4g ZGlyZWN0aW9uIGNoYW5nZXMsIHRoZSB0YWJsZSBBTSBtdXN0IGltbWVkaWF0ZWx5IHJlc2V0IGl0 cworICogcmVhZCBzdHJlYW0gYW5kIGludmFsaWRhdGUgcHJlZmV0Y2hQb3MgLS0gYmxvY2tzIGFs cmVhZHkgcmVxdWVzdGVkIHZpYQorICogcHJlZmV0Y2hQb3Mgd2lsbCBubyBsb25nZXIgbWF0Y2gg d2hhdCBzY2FuUG9zIG5lZWRzIHRvIHJldHVybi4KKyAqCisgKiBDcm9zc2luZyBhIGJhdGNoIGJv dW5kYXJ5IGluIGEgbmV3IHNjYW4gZGlyZWN0aW9uIGlzIGEgc2VwYXJhdGUgcHJvY2VzcywKKyAq IGhhbmRsZWQgaGVyZTogdGFibGUgQU1zIGFyZSByZXF1aXJlZCB0byBjYWxsIHRhYmxlYW1fdXRp bF9iYXRjaF9kaXJjaGFuZ2UKKyAqIHRvIGxlYXZlIHRoZSBzY2FuJ3MgYmF0Y2ggcmluZyBidWZm ZXIgaW4gYSBjb25zaXN0ZW50IHN0YXRlLiAgVGhlIGN1cnJlbnQKKyAqIGltcGxlbWVudGF0aW9u IGhhbmRsZXMgdGhpcyBieSBzaW1wbHkgZGlzY2FyZGluZyBtb3N0IGJhdGNoZXMuICBUaGUga2V5 CisgKiBpbnZhcmlhbnQgaXMgdGhhdCBhbGwgbG9hZGVkIGJhdGNoZXMgbXVzdCBiZSBpbiBhIGNv bnNpc3RlbnQgc2NhbiBkaXJlY3Rpb24KKyAqIG9yZGVyLiAgKER1cmluZyBjcm9zcy1iYXRjaCBk aXJlY3Rpb24gY2hhbmdlcywgdGhlIGN1cnJlbnQgc2NhbkJhdGNoIHdpbGwKKyAqIGhhdmUgaXRz IEluZGV4U2NhbkJhdGNoRGF0YS5kaXIgZmxpcHBlZCwgYnV0IHdlIGhhdmUgbm8gcHJvdmlzaW9u IGZvcgorICoga2VlcGluZyBhbGwgb3RoZXIgbG9hZGVkIGJhdGNoZXMuICBJdCdzIG5vdCBjbGVh ciB0aGF0IGl0J2QgYmUgdXNlZnVsIHRvCisgKiBob2xkIG9udG8gdGhlbTsgdGhlIHNjYW4gZGly ZWN0aW9uIGlzIHVubGlrZWx5IHRvIGNoYW5nZSBiYWNrLikKKyAqCiAgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK ICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0 eSBvZiBDYWxpZm9ybmlhCiAgKgpAQCAtNjEsNiArODYsNyBAQCBpbmRleF9iYXRjaHNjYW5faW5p dChJbmRleFNjYW5EZXNjIHNjYW4pCiAKIAlzY2FuLT5iYXRjaHJpbmdidWYuc2NhblBvcy52YWxp ZCA9IGZhbHNlOwogCXNjYW4tPmJhdGNocmluZ2J1Zi5tYXJrUG9zLnZhbGlkID0gZmFsc2U7CisJ c2Nhbi0+YmF0Y2hyaW5nYnVmLnByZWZldGNoUG9zLnZhbGlkID0gZmFsc2U7CiAKIAlzY2FuLT5i YXRjaHJpbmdidWYubWFya0JhdGNoID0gTlVMTDsKIAlzY2FuLT5iYXRjaHJpbmdidWYuaGVhZEJh dGNoID0gMDsJLyogaW5pdGlhbCBoZWFkIGJhdGNoICovCkBAIC04NSw2ICsxMTEsNyBAQCBpbmRl eF9iYXRjaHNjYW5fcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuKQogCiAJYmF0Y2hyaW5nYnVmLT5z Y2FuUG9zLnZhbGlkID0gZmFsc2U7CiAJYmF0Y2hyaW5nYnVmLT5tYXJrUG9zLnZhbGlkID0gZmFs c2U7CisJYmF0Y2hyaW5nYnVmLT5wcmVmZXRjaFBvcy52YWxpZCA9IGZhbHNlOwogCiAJLyoKIAkg KiBFbnN1cmUgdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2ggd29uJ3Qgc2tpcCB0aGUgb2xkIG1hcmtC YXRjaCBpbiB0aGUgbG9vcApAQCAtMjIxLDcgKzI0OCwxMyBAQCBpbmRleF9iYXRjaHNjYW5fbWFy a19wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogICogdGhlIGN1cnJlbnQgc2NhbkJhdGNoIHdoZW4g bmVlZGVkLgogICoKICAqIFdlIGp1c3QgZGlzY2FyZCBhbGwgYmF0Y2hlcyAob3RoZXIgdGhhbiBt YXJrQmF0Y2gvcmVzdG9yZWQgc2NhbkJhdGNoKSwKLSAqIGV4Y2VwdCB3aGVuIG1hcmtCYXRjaCBp cyBhbHJlYWR5IHRoZSBzY2FuJ3MgY3VycmVudCBzY2FuQmF0Y2guCisgKiBleGNlcHQgd2hlbiBt YXJrQmF0Y2ggaXMgYWxyZWFkeSB0aGUgc2NhbidzIGN1cnJlbnQgc2NhbkJhdGNoLiAgV2UgYWx3 YXlzCisgKiBpbnZhbGlkYXRlIHByZWZldGNoUG9zLiAgVGhlIHJlYWQgc3RyZWFtIGFuZCByZWxh dGVkIHByZWZldGNoaW5nIHN0YXRlIGFyZQorICogcmVzZXQgYnkgdGFibGVfaW5kZXhfZmV0Y2hf cmVzZXQoKSwgY2FsbGVkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uLiAgVGhpcworICogYXBwcm9hY2gg a2VlcHMgdGhpbmdzIHNpbXBsZSBmb3IgdGFibGUgQU1zOiBtb3N0IGNvZGUgdGhhdCBkZWFscyB3 aXRoCisgKiBiYXRjaGVzIGlzIHRoZXJlYnkgYWJsZSB0byBhc3N1bWUgdGhhdCB0aGUgY29tbW9u IGNhc2Ugd2hlcmUgc2NhbiBkaXJlY3Rpb24KKyAqIG5ldmVyIGNoYW5nZXMgaXMgdGhlIG9ubHkg Y2FzZSAodGFibGVhbV91dGlsX2JhdGNoX2RpcmNoYW5nZSB0YWtlcyBhCisgKiBzaW1pbGFyIGFw cHJvYWNoIHRvIGhhbmRsaW5nIGEgY3Jvc3MtYmF0Y2ggY2hhbmdlIGluIHNjYW4gZGlyZWN0aW9u KS4KICAqLwogdm9pZAogaW5kZXhfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9zKEluZGV4U2NhbkRlc2Mg c2NhbikKQEAgLTIzNiw2ICsyNjksMTQgQEAgaW5kZXhfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9zKElu ZGV4U2NhbkRlc2Mgc2NhbikKIAlBc3NlcnQoIWJhdGNocmluZ2J1Zi0+ZG9uZSk7CiAJQXNzZXJ0 KG1hcmtQb3MtPnZhbGlkKTsKIAorCS8qCisJICogUmVzdG9yaW5nIGEgbWFyayBhbHdheXMgcmVx dWlyZXMgc3RvcHBpbmcgcHJlZmV0Y2hpbmcuICBUaGlzIGlzIHNpbWlsYXIKKwkgKiB0byB0aGUg aGFuZGxpbmcgdGFibGUgQU1zIGltcGxlbWVudCB0byBkZWFsIHdpdGggYSB0dXBsZS1sZXZlbCBj aGFuZ2UKKwkgKiBpbiB0aGUgc2NhbidzIGRpcmVjdGlvbi4gIFRoZSByZWFkIHN0cmVhbSBtdXN0 IGhhdmUgYWxyZWFkeSBiZWVuIHJlc2V0CisJICogYnkgdGhlIGNhbGxlciAodmlhIHRhYmxlX2lu ZGV4X2ZldGNoX3Jlc2V0KS4KKwkgKi8KKwliYXRjaHJpbmdidWYtPnByZWZldGNoUG9zLnZhbGlk ID0gZmFsc2U7CisKIAlpZiAoc2NhbkJhdGNoID09IG1hcmtCYXRjaCkKIAl7CiAJCS8qIG1hcmtC YXRjaCBpcyBhbHJlYWR5IHNjYW5CYXRjaDsgbmVlZG4ndCBjaGFuZ2UgYmF0Y2hyaW5nYnVmICov CkBAIC0zMDUsNiArMzQ2LDEzIEBAIGluZGV4X2JhdGNoc2Nhbl9yZXN0b3JlX3BvcyhJbmRleFNj YW5EZXNjIHNjYW4pCiAgKiBwb2ludCBvbiBiYXRjaHJpbmdidWYgd2lsbCBsb29rIGFzIGlmIG91 ciBuZXcgc2NhbiBkaXJlY3Rpb24gaGFkIGJlZW4gdXNlZAogICogZnJvbSB0aGUgc3RhcnQuICBU aGlzIGFwcHJvYWNoIGlzbid0IHBhcnRpY3VsYXJseSBlZmZpY2llbnQsIGJ1dCBpdCB3b3Jrcwog ICogd2VsbCBlbm91Z2ggZm9yIHdoYXQgb3VnaHQgdG8gYmUgYSByZWxhdGl2ZWx5IHJhcmUgb2Nj dXJyZW5jZS4KKyAqCisgKiBDYWxsZXIgbXVzdCBoYXZlIHJlc2V0IHRoZSBzY2FuJ3MgcmVhZCBz dHJlYW0gYmVmb3JlIGNhbGxpbmcgaGVyZS4gIFRoYXQKKyAqIG5lZWRzIHRvIGhhcHBlbiBhcyBz b29uIGFzIHRoZSBzY2FuIHJlcXVlc3RzIGEgdHVwbGUgaW4gd2hhdGV2ZXIgc2NhbgorICogZGly ZWN0aW9uIGlzIG9wcG9zaXRlLXRvLWN1cnJlbnQuICBXZSBvbmx5IGRlYWwgd2l0aCB0aGUgY2Fz ZSB3aGVyZSB0aGUKKyAqIHNjYW4gYmFja3MgdXAgYnkgZW5vdWdoIGl0ZW1zIHRvIGNyb3NzIGEg YmF0Y2ggYm91bmRhcnkgKHdoZW4gdGhlIHNjYW4KKyAqIHJlc3VtZXMgc2Nhbm5pbmcgaW4gaXRz IG9yaWdpbmFsIGRpcmVjdGlvbi9lbmRzIGJlZm9yZSBjcm9zc2luZyBhIGJvdW5kYXJ5LAorICog dGhlcmUgaXNuJ3QgYW55IG5lZWQgdG8gY2FsbCBoZXJlKS4KICAqLwogdm9pZAogdGFibGVhbV91 dGlsX2JhdGNoX2RpcmNoYW5nZShJbmRleFNjYW5EZXNjIHNjYW4pCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRSBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv UkVBRE1FCmluZGV4IGU3NTU3N2E3ZS4uMzkzOTM5MWFlIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JF QURNRQpAQCAtMTg2LDcgKzE4Niw3IEBAIGludGVyZmFjZS4gIChTZWUgYWxzbywgZG9jL3NyYy9z Z21sL2luZGV4YW0uc2dtbCkuCiBCbG9ja2luZyBWQUNVVU0gbGlrZSB0aGlzIGNhbiBiZSBkaXNy dXB0aXZlLCBzbyB0YWJsZSBBTXMgYXZvaWQgaXQgd2hlbmV2ZXIKIHBvc3NpYmxlLiAgVGhlIGhl YXAgdGFibGUgQU0gdXN1YWxseSBkcm9wcyBsZWFmIHBhZ2UgcGlucyByaWdodCBhd2F5LCB0aG91 Z2gKIG5vdCBkdXJpbmcgc2NhbnMgdGhhdCB1c2UgYSBub24tTVZDQyBzbmFwc2hvdC4gIEluZGV4 LW9ubHkgc2NhbnMgbWF5IGFsc28KLXJldGFpbiBwaW5zIGluIHNvbWUgY2FzZXMuCityZXRhaW4g cGlucyBpbiBzb21lIGNhc2VzLCB0aG91Z2ggcHJlZmV0Y2hpbmcgcmVxdWlyZXMgZHJvcHBpbmcg dGhlbS4KIAogT3Bwb3J0dW5pc3RpYyBpbmRleCB0dXBsZSBkZWxldGlvbiBwZXJmb3JtcyB0aGUg c2FtZSBwYWdlLWxldmVsCiBtb2RpZmljYXRpb25zIGFzIFZBQ1VVTSwgd2hpbGUgb25seSBob2xk aW5nIGFuIGV4Y2x1c2l2ZSBsb2NrLiAgVGhpcyBpcwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nv c3RzaXplLmMKaW5kZXggODljYTRlMDhiLi43OGQ4N2NkOGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BhdGgvY29zdHNpemUuYwpAQCAtMTQ1LDYgKzE0NSw3IEBAIGludAkJCW1heF9wYXJhbGxlbF93 b3JrZXJzX3Blcl9nYXRoZXIgPSAyOwogYm9vbAkJZW5hYmxlX3NlcXNjYW4gPSB0cnVlOwogYm9v bAkJZW5hYmxlX2luZGV4c2NhbiA9IHRydWU7CiBib29sCQllbmFibGVfaW5kZXhvbmx5c2NhbiA9 IHRydWU7Citib29sCQllbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoID0gdHJ1ZTsKIGJvb2wJCWVu YWJsZV9iaXRtYXBzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV90aWRzY2FuID0gdHJ1ZTsKIGJv b2wJCWVuYWJsZV9zb3J0ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YWlvL3JlYWRfc3RyZWFtLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5j CmluZGV4IGE3OTY4YmJkMC4uOTZhOGFhZjg2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9y YWdlL2Fpby9yZWFkX3N0cmVhbS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRf c3RyZWFtLmMKQEAgLTk3NSw2ICs5NzUsOCBAQCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcihSZWFk U3RyZWFtICpzdHJlYW0sIHZvaWQgKipwZXJfYnVmZmVyX2RhdGEpCiAKIAkJLyogTG9vay1haGVh ZCBkaXN0YW5jZSByYW1wcyB1cCByYXBpZGx5IGFmdGVyIHdlIGRvIEkvTy4gKi8KIAkJZGlzdGFu Y2UgPSBzdHJlYW0tPmRpc3RhbmNlICogMjsKKwkJaWYgKGRpc3RhbmNlICYmIGRpc3RhbmNlIDwg UEdfSU5UMTZfTUFYKQorCQkJZGlzdGFuY2UrKzsKIAkJZGlzdGFuY2UgPSBNaW4oZGlzdGFuY2Us IHN0cmVhbS0+bWF4X3Bpbm5lZF9idWZmZXJzKTsKIAkJc3RyZWFtLT5kaXN0YW5jZSA9IGRpc3Rh bmNlOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJz LmRhdCBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CmluZGV4IDk1 MDc3Nzg0MS4uMWMxOTQ1NzQ5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1 Y19wYXJhbWV0ZXJzLmRhdAorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0 ZXJzLmRhdApAQCAtODkxLDYgKzg5MSwxMyBAQAogICBib290X3ZhbCA9PiAndHJ1ZScsCiB9LAog Cit7IG5hbWUgPT4gJ2VuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2gnLCB0eXBlID0+ICdib29sJywg Y29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnUVVFUllfVFVOSU5HX01FVEhPRCcs CisgIHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMgcHJlZmV0Y2hpbmcgZm9yIGluZGV4IHNjYW5zIGFu ZCBpbmRleC1vbmx5LXNjYW5zLicsCisgIGZsYWdzID0+ICdHVUNfRVhQTEFJTicsCisgIHZhcmlh YmxlID0+ICdlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoJywKKyAgYm9vdF92YWwgPT4gJ3RydWUn LAorfSwKKwogeyBuYW1lID0+ICdlbmFibGVfbWF0ZXJpYWwnLCB0eXBlID0+ICdib29sJywgY29u dGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnUVVFUllfVFVOSU5HX01FVEhPRCcsCiAg IHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMgdGhlIHBsYW5uZXJcJ3MgdXNlIG9mIG1hdGVyaWFsaXph dGlvbi4nLAogICBmbGFncyA9PiAnR1VDX0VYUExBSU4nLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIGIvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCmluZGV4IGY5MzhjYzY1YS4uMDVkMGU0Y2MwIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC00 MTcsNiArNDE3LDcgQEAKICNlbmFibGVfaW5jcmVtZW50YWxfc29ydCA9IG9uCiAjZW5hYmxlX2lu ZGV4c2NhbiA9IG9uCiAjZW5hYmxlX2luZGV4b25seXNjYW4gPSBvbgorI2VuYWJsZV9pbmRleHNj YW5fcHJlZmV0Y2ggPSBvbgogI2VuYWJsZV9tYXRlcmlhbCA9IG9uCiAjZW5hYmxlX21lbW9pemUg PSBvbgogI2VuYWJsZV9tZXJnZWpvaW4gPSBvbgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2Nv bmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IGY2NzBlMmQ0Yy4uOWIw MzM5ZmE3IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3Ny Yy9zZ21sL2NvbmZpZy5zZ21sCkBAIC01Njk3LDYgKzU2OTcsMjcgQEAgQU5ZIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5udW1fc3luYzwvcmVwbGFjZWFibGU+ICggPHJlcGxhY2VhYmxl IGNsYXNzPSIKICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAg IDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1lbmFibGUtaW5kZXhzY2FuLXByZWZldGNoIiB4cmVmbGFi ZWw9ImVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2giPgorICAgICAgPHRlcm0+PHZhcm5hbWU+ZW5h YmxlX2luZGV4c2Nhbl9wcmVmZXRjaDwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQor ICAgICAgPGluZGV4dGVybT4KKyAgICAgICA8cHJpbWFyeT48dmFybmFtZT5lbmFibGVfaW5kZXhz Y2FuX3ByZWZldGNoPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4K KyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAg ICAgIDxwYXJhPgorICAgICAgICBFbmFibGVzIG9yIGRpc2FibGVzIHByZWZldGNoaW5nIGZvciBp bmRleC1zY2FuIGFuZCBpbmRleC1vbmx5LXNjYW4KKyAgICAgICAgcGxhbiB0eXBlcy4gIFByZWZl dGNoaW5nIGNhbiBpbXByb3ZlIHBlcmZvcm1hbmNlIGJ5IHJlYWRpbmcgdGFibGUgQU0KKyAgICAg ICAgcGFnZXMgYWhlYWQgb2Ygd2hlbiB0aGV5IGFyZSBuZWVkZWQgZHVyaW5nIGluZGV4IHNjYW5z LiAgVGhlIGRlZmF1bHQKKyAgICAgICAgaXMgPGxpdGVyYWw+b248L2xpdGVyYWw+LgorICAgICAg IDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgSW5kZXggcHJlZmV0Y2hpbmcgaXMgYWx3 YXlzIGRpc2FibGVkIHdoZW4KKyAgICAgICAgPHhyZWYgbGlua2VuZD0iZ3VjLWlvLW1ldGhvZCIv PiBpcyBzZXQgdG8gPGxpdGVyYWw+c3luYzwvbGl0ZXJhbD4sCisgICAgICAgIHJlZ2FyZGxlc3Mg b2YgdGhpcyBzZXR0aW5nLgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAg IDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1lbmFibGUtbWF0 ZXJpYWwiIHhyZWZsYWJlbD0iZW5hYmxlX21hdGVyaWFsIj4KICAgICAgIDx0ZXJtPjx2YXJuYW1l PmVuYWJsZV9tYXRlcmlhbDwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQogICAgICAg PGluZGV4dGVybT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgYi9kb2Mv c3JjL3NnbWwvaW5kZXhhbS5zZ21sCmluZGV4IGY0OGRhMzE4NS4uYjgyZjJhOWU2IDEwMDY0NAot LS0gYS9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9pbmRleGFt LnNnbWwKQEAgLTE2NywxMCArMTY3LDExIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4QW1Sb3V0aW5l CiAgICAgYW1iZWdpbnNjYW5fZnVuY3Rpb24gYW1iZWdpbnNjYW47CiAgICAgYW1yZXNjYW5fZnVu Y3Rpb24gYW1yZXNjYW47CiAgICAgYW1nZXR0dXBsZV9mdW5jdGlvbiBhbWdldHR1cGxlOyAgICAg LyogY2FuIGJlIE5VTEwgKi8KKyAgICBhbWdldGJhdGNoX2Z1bmN0aW9uIGFtZ2V0YmF0Y2g7IC8q IGNhbiBiZSBOVUxMICovCisgICAgYW1raWxsaXRlbXNiYXRjaF9mdW5jdGlvbiBhbWtpbGxpdGVt c2JhdGNoOwkvKiBjYW4gYmUgTlVMTCAqLwogICAgIGFtZ2V0Yml0bWFwX2Z1bmN0aW9uIGFtZ2V0 Yml0bWFwOyAgIC8qIGNhbiBiZSBOVUxMICovCiAgICAgYW1lbmRzY2FuX2Z1bmN0aW9uIGFtZW5k c2NhbjsKLSAgICBhbW1hcmtwb3NfZnVuY3Rpb24gYW1tYXJrcG9zOyAgICAgICAvKiBjYW4gYmUg TlVMTCAqLwotICAgIGFtcmVzdHJwb3NfZnVuY3Rpb24gYW1yZXN0cnBvczsgICAgIC8qIGNhbiBi ZSBOVUxMICovCisgICAgYW1wb3NyZXNldF9mdW5jdGlvbiBhbXBvc3Jlc2V0OyAvKiBjYW4gYmUg TlVMTCAqLwogCiAgICAgLyogaW50ZXJmYWNlIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHBhcmFsbGVs IGluZGV4IHNjYW5zICovCiAgICAgYW1lc3RpbWF0ZXBhcmFsbGVsc2Nhbl9mdW5jdGlvbiBhbWVz dGltYXRlcGFyYWxsZWxzY2FuOyAgICAvKiBjYW4gYmUgTlVMTCAqLwpAQCAtNjc4LDYgKzY3OSwx MCBAQCBhbWJlZ2luc2NhbiAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKICAgIDxmdW5jdGlvbj5h bWJlZ2luc2NhbjwvZnVuY3Rpb24+IGRvZXMgbGl0dGxlIGJleW9uZCBtYWtpbmcgdGhhdCBjYWxs IGFuZCBwZXJoYXBzCiAgICBhY3F1aXJpbmcgbG9ja3M7CiAgICB0aGUgaW50ZXJlc3RpbmcgcGFy dHMgb2YgaW5kZXgtc2NhbiBzdGFydHVwIGFyZSBpbiA8ZnVuY3Rpb24+YW1yZXNjYW48L2Z1bmN0 aW9uPi4KKyAgIEluZGV4IGFjY2VzcyBtZXRob2RzIHRoYXQgdXNlIHRoZSA8ZnVuY3Rpb24+YW1n ZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZQorICAgbXVzdCBhbHNvIHNldCA8bGl0ZXJhbD5z Y2FuLSZndDttYXhpdGVtc2JhdGNoPC9saXRlcmFsPiB0byB0aGUgbWF4aW11bSBudW1iZXIKKyAg IG9mIGl0ZW1zIHRoYXQgY2FuIGFwcGVhciBpbiBhIHNpbmdsZSBiYXRjaCAodHlwaWNhbGx5IGRl cml2ZWQgZnJvbSB0aGUKKyAgIGluZGV4IHBhZ2Ugc2l6ZSwgZS5nLiwgPGxpdGVyYWw+TWF4SW5k ZXhUdXBsZXNQZXJQYWdlPC9saXRlcmFsPikuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KQEAgLTc0 OSw2ICs3NTQsMTgyIEBAIGFtZ2V0dHVwbGUgKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIDxzdHJ1 Y3RmaWVsZD5hbWdldHR1cGxlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaW4gaXRzIDxzdHJ1Y3RuYW1l PkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPgogICAgc3RydWN0IG11c3QgYmUgc2V0IHRvIE5V TEwuCiAgIDwvcGFyYT4KKyAgPG5vdGU+CisgICA8cGFyYT4KKyAgICBBcyBvZiA8cHJvZHVjdG5h bWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IHZlcnNpb24gMTksIHBvc2l0aW9uIG1hcmtpbmcK KyAgICBhbmQgcmVzdG9yYXRpb24gb2Ygc2NhbnMgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCBmb3Ig dGhlCisgICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBpbnRlcmZhY2U7IG9ubHkg dGhlCisgICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2Ugc3VwcG9y dHMgdGhpcyBmZWF0dXJlLgorICAgPC9wYXJhPgorICA8L25vdGU+CisKKyAgPHBhcmE+Cis8cHJv Z3JhbWxpc3Rpbmc+CitJbmRleFNjYW5CYXRjaAorYW1nZXRiYXRjaCAoSW5kZXhTY2FuRGVzYyBz Y2FuLAorICAgICAgICAgICAgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwKKyAgICAgICAgICAg IFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICBSZXR1cm4g dGhlIG5leHQgYmF0Y2ggb2YgaW5kZXggdHVwbGVzIGluIHRoZSBnaXZlbiBzY2FuLCBtb3Zpbmcg aW4gdGhlCisgICBnaXZlbiBkaXJlY3Rpb24gKGZvcndhcmQgb3IgYmFja3dhcmQgaW4gdGhlIGlu ZGV4KS4gIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YKKyAgIDx0eXBlPkluZGV4U2NhbkJhdGNoPC90 eXBlPiB3aXRoIGluZGV4IHR1cGxlcyBsb2FkZWQsIG9yCisgICA8bGl0ZXJhbD5OVUxMPC9saXRl cmFsPiBpZiB0aGVyZSBhcmUgbm8gbW9yZSBpbmRleCB0dXBsZXMgaW4gdGhlIGdpdmVuCisgICBz Y2FuIGRpcmVjdGlvbi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxmdW5jdGlvbj5h bWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlIGlzIGFuIGFsdGVybmF0aXZlIHRvCisgICA8 ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IHRoYXQgcmV0dXJucyBtYXRjaGluZyBpbmRl eCBlbnRyaWVzIGluIGJhdGNoZXMKKyAgIHJhdGhlciB0aGFuIG9uZSBhdCBhIHRpbWUuIFRoaXMg ZW5hYmxlcyB0aGUgdGFibGUgYWNjZXNzIG1ldGhvZCB0bworICAgb3B0aW1pemUgdGFibGUgYmxv Y2sgYWNjZXNzIHBhdHRlcm5zIGFuZCBwZXJmb3JtIEkvTyBwcmVmZXRjaGluZy4KKyAgIEJ5IHJl dHVybmluZyBhbGwgbWF0Y2hpbmcgaW5kZXggZW50cmllcyBmcm9tIGEgc2luZ2xlIGluZGV4IHBh Z2UgdG9nZXRoZXIsCisgICB0aGUgdGFibGUgQU0gY2FuIHJlYWRhaGVhZCB0aHJvdWdoIHRoZSBp bmRleCBhbmQgaWRlbnRpZnkgd2hpY2ggdGFibGUKKyAgIGJsb2NrcyB3aWxsIGJlIG5lZWRlZCwg YWxsb3dpbmcgcHJlZmV0Y2hpbmcgb2YgdGFibGUgQU0gcGFnZXMgZHVyaW5nCisgICBvcmRlcmVk IGluZGV4IHNjYW5zLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgdGFibGUgQU0gcGFz c2VzIHRoZSBiYXRjaCBtb3N0IHJlY2VudGx5IHJldHVybmVkIGJ5CisgICA8ZnVuY3Rpb24+YW1n ZXRiYXRjaDwvZnVuY3Rpb24+IGZvciB0aGUgZ2l2ZW4gc2NhbiBhcworICAgPGxpdGVyYWw+cHJp b3JiYXRjaDwvbGl0ZXJhbD4gKG9yIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+IG9uIHRoZSBmaXJz dCBjYWxsCisgICBmb3IgdGhlIHNjYW4pLiAgVGhlIGluZGV4IEFNIHVzZXMgaW5mb3JtYXRpb24g ZnJvbSA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPgorICAgdG8gZGV0ZXJtaW5lIHdoaWNo IGluZGV4IHBhZ2UgdG8gcmVhZCBuZXh0LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBBIGJh dGNoIHJldHVybmVkIGJ5IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaXMgYXNzb2Np YXRlZCB3aXRoIGEKKyAgIHBpbm5lZCBpbmRleCBwYWdlIGNvbnRhaW5pbmcgYXQgbGVhc3Qgb25l IG1hdGNoaW5nIGl0ZW0vdHVwbGUuICBUaGUgYnVmZmVyCisgICBwaW4gY2FuIGJlIGhlbGQgb250 byBieSB0aGUgdGFibGUgQU0gYXMgYW4gaW50ZXJsb2NrIGFnYWluc3QgY29uY3VycmVudCBUSUQK KyAgIHJlY3ljbGluZyBieSA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+LiAgU2VlIDx4cmVmIGxp bmtlbmQ9ImluZGV4LWxvY2tpbmciLz4KKyAgIGZvciBkZXRhaWxzIG9uIGJ1ZmZlciBwaW4gbWFu YWdlbWVudCBkdXJpbmcgaW5kZXggc2NhbnMuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEEg PHR5cGU+SW5kZXhTY2FuQmF0Y2g8L3R5cGU+IHRoYXQgaXMgcmV0dXJuZWQgYnkKKyAgIDxmdW5j dGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaXMgbm8gbG9uZ2VyIG1hbmFnZWQgYnkgdGhlIGFj Y2VzcyBtZXRob2QuCisgICBJdCBpcyB1cCB0byB0aGUgdGFibGUgQU0gY2FsbGVyIHRvIGRlY2lk ZSB3aGVuIGl0IHNob3VsZCBiZSBmcmVlZCAodmlhCisgICA8ZnVuY3Rpb24+dGFibGVhbV91dGls X2ZyZWVfYmF0Y2g8L2Z1bmN0aW9uPikuICBOb3RlIGFsc28gdGhhdAorICAgPGZ1bmN0aW9uPmFt Z2V0YmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbnMgbXVzdCBuZXZlciBtb2RpZnkgdGhlCisgICA8 c3RydWN0ZmllbGQ+cHJpb3JiYXRjaDwvc3RydWN0ZmllbGQ+IHBhcmFtZXRlci4gIFRoZSBjb3Jl CisgICA8ZmlsZW5hbWU+c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS88L2ZpbGVuYW1lPiBhbmQK KyAgIDxmaWxlbmFtZT5zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC88L2ZpbGVuYW1lPiBpbXBsZW1l bnRhdGlvbnMgcHJvdmlkZQorICAgcmVmZXJlbmNlIGV4YW1wbGVzIG9mIHRoZSA8ZnVuY3Rpb24+ YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgor ICAgVGhlIHNhbWUgY2F2ZWF0cyBkZXNjcmliZWQgZm9yIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9m dW5jdGlvbj4gYXBwbHkgaGVyZQorICAgdG9vOiBhbiBlbnRyeSBpbiB0aGUgcmV0dXJuZWQgYmF0 Y2ggbWVhbnMgb25seSB0aGF0IHRoZSBpbmRleCBjb250YWlucworICAgYW4gZW50cnkgdGhhdCBt YXRjaGVzIHRoZSBzY2FuIGtleXMsIG5vdCB0aGF0IHRoZSB0dXBsZSBuZWNlc3NhcmlseSBzdGls bAorICAgZXhpc3RzIGluIHRoZSBoZWFwIG9yIHdpbGwgcGFzcyB0aGUgY2FsbGVyJ3Mgc25hcHNo b3QgdGVzdC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgSW5kZXggYWNjZXNzIG1ldGhvZHMg dXNpbmcgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBtdXN0IHNldAorICAgPGxpdGVy YWw+c2Nhbi0mZ3Q7eHNfcmVjaGVjazwvbGl0ZXJhbD4gdG8gaW5kaWNhdGUgd2hldGhlciByZWNo ZWNraW5nIG9mCisgICBzY2FuIGtleXMgaXMgcmVxdWlyZWQsIGluIHRoZSBzYW1lIHdheSBhcyA8 ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+CisgICBkb2VzLiBIb3dldmVyLCA8bGl0ZXJh bD5zY2FuLSZndDt4c19yZWNoZWNrPC9saXRlcmFsPiBtdXN0IGJlIHNldCBjb25zaXN0ZW50bHkK KyAgIGZvciBhbiBlbnRpcmUgc2NhbiByYXRoZXIgdGhhbiB2YXJ5aW5nIG9uIGEgcGVyLXR1cGxl IGJhc2lzLiBUaGlzIGlzIGEga2V5CisgICBkaWZmZXJlbmNlIGZyb20gPGZ1bmN0aW9uPmFtZ2V0 dHVwbGU8L2Z1bmN0aW9uPiwgd2hpY2ggY2FuIHNldAorICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNf cmVjaGVjazwvbGl0ZXJhbD4gaW5kZXBlbmRlbnRseSBmb3IgZWFjaCB0dXBsZSBpdCByZXR1cm5z LgorICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdCByZXF1aXJlIGdyYW51bGFyIGNvbnRyb2wg b3ZlcgorICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfcmVjaGVjazwvbGl0ZXJhbD4gbXVzdCB1c2Ug dGhlIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4KKyAgIGludGVyZmFjZSBpbnN0ZWFk IG9mIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4uCisgIDwvcGFyYT4KKworICA8cGFy YT4KKyAgIFNpbWlsYXJseSwgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50 ZXJmYWNlIGRvZXMgbm90IHN1cHBvcnQKKyAgIGluZGV4LW9ubHkgc2NhbnMgdGhhdCByZXR1cm4g ZGF0YSBpbiB0aGUgZm9ybSBvZiBhCisgICA8c3RydWN0bmFtZT5IZWFwVHVwbGU8L3N0cnVjdG5h bWU+IHBvaW50ZXIuICBJbmRleC1vbmx5IHNjYW5zIHdvcmsgYnkKKyAgIGNvcHlpbmcgPHN0cnVj dG5hbWU+SW5kZXhUdXBsZTwvc3RydWN0bmFtZT4gcmVjb3JkcyBmcm9tIGluZGV4IHBhZ2VzIGlu dG8gYQorICAgbG9jYWwgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGJhdGNoLiAgPGxpdGVy YWw+eHNfaXR1cGRlc2M8L2xpdGVyYWw+CisgICB3b3JrcyBpbiB0aGUgc2FtZSBhcyBhbHJlYWR5 IGRlc2NyaWJlZCBmb3IgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPi4KKyAgIFRoZSBh Y2Nlc3MgbWV0aG9kIG11c3Qgbm90IHNldCB0aGUgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfaXR1cDwv bGl0ZXJhbD4gb3IKKyAgIDxsaXRlcmFsPnNjYW4tJmd0O3hzX2hpdHVwPC9saXRlcmFsPiBmaWVs ZHMgaXRzZWxmLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgaW5kZXggYWNjZXNzIG1l dGhvZCBtdXN0IHByb3ZpZGUgZWl0aGVyIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4K KyAgIG9yIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4sIGJ1dCBub3QgYm90aC4KKyAg PC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlv bj4gZnVuY3Rpb24gbmVlZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRoZQorICAgYWNjZXNzIG1ldGhv ZCBzdXBwb3J0cyA8cXVvdGU+cGxhaW48L3F1b3RlPiBpbmRleCBzY2Fucy4gIElmIGl0IGRvZXNu J3QsCisgICB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmaWVsZCBpbiBpdHMK KyAgIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3QgbXVzdCBi ZSBzZXQgdG8gTlVMTC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorPHByb2dyYW1saXN0aW5nPgor dm9pZAorYW1raWxsaXRlbXNiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAorICAgICAgICAgICAg ICAgICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworPC9wcm9ncmFtbGlzdGluZz4KKyAgIENhbGxl ZCBieSB0aGUgdGFibGUgQU0gd2hlbiBpdCBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZyBhIGJhdGNo IHRoYXQKKyAgIGNvbnRhaW5zIGtpbGxlZCBpdGVtcywgdG8gc2V0IDxsaXRlcmFsPkxQX0RFQUQ8 L2xpdGVyYWw+IGJpdHMgaW4gdGhlCisgICBiYXRjaCdzIGluZGV4IHBhZ2UuICBUaGUgYmF0Y2gn cyBpbmRleCBwYWdlIHdpbGwgbmV2ZXIgYmUgbG9ja2VkIG9yIHBpbm5lZAorICAgd2hlbiB0aGlz IGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgV2hpbGUgaW1w bGVtZW50aW5nIDxmdW5jdGlvbj5hbWtpbGxpdGVtc2JhdGNoPC9mdW5jdGlvbj4gaXMgb3B0aW9u YWwsCisgICBkb2luZyBzbyBpcyByZWNvbW1lbmRlZCBmb3IgcGVyZm9ybWFuY2UsIGFzIGl0IGFs bG93cyBmdXR1cmUgc2NhbnMgdG8gc2tpcAorICAga25vd24tZGVhZCBpbmRleCBlbnRyaWVzLiAg Qm90aCBjb3JlIGluZGV4IGFjY2VzcyBtZXRob2RzIHRoYXQgY3VycmVudGx5CisgICBzdXBwb3J0 IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gKEItdHJlZSBhbmQgaGFzaCkgaW1wbGVt ZW50CisgICA8bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFsPiBtYXJraW5nLCB0aG91Z2ggdGhpcmQt cGFydHkgaW5kZXggYWNjZXNzIG1ldGhvZHMKKyAgIGFyZSBmcmVlIHRvIGNob29zZSB3aGV0aGVy IHRvIGltcGxlbWVudCB0aGlzIGZlYXR1cmUuCisgICBUaGUgdGFibGUgQU0gbWF5IGNhbGwKKyAg IDxmdW5jdGlvbj50YWJsZWFtX3V0aWxfa2lsbF9zY2FucG9zaXRlbTwvZnVuY3Rpb24+IHRvIG1h cmsgZGVhZCBpdGVtcyBhcworICAgdGhlIHNjYW4gcHJvZ3Jlc3Nlcy4gIElmIHRoZSBiYXRjaCBj b250YWlucyBhbnkgc3VjaCBkZWFkIGl0ZW1zLCB0aGUgYmF0Y2gncworICAgPHN0cnVjdGZpZWxk PmtpbGxlZEl0ZW1zPC9zdHJ1Y3RmaWVsZD4gYXJyYXkgd2lsbCBoYXZlIGJlZW4gc29ydGVkIGFu ZAorICAgZGVkdXBsaWNhdGVkIGJlZm9yZSA8ZnVuY3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVu Y3Rpb24+IGlzIGNhbGxlZCwgd2l0aAorICAgaXRlbSBvZmZzZXRzIGFwcGVhcmluZyBpbiBhc2Nl bmRpbmcgb3JkZXIgKHRoYXQgaXMsIGluIGluZGV4IHBhZ2Ugb3JkZXIsCisgICB3aGljaCBpcyBh bHNvIGJhdGNoIG9yZGVyKSBhbmQgbm8gb2Zmc2V0IGFwcGVhcmluZyBtb3JlIHRoYW4gb25jZS4g IEluZGV4CisgICBhY2Nlc3MgbWV0aG9kcyBjYW4gcmVseSBvbiB0aGlzIG9yZGVyaW5nIHdoZW4g cHJvY2Vzc2luZyBraWxsZWQgaXRlbXM6IHRoZQorICAgPHN0cnVjdGZpZWxkPmtpbGxlZEl0ZW1z PC9zdHJ1Y3RmaWVsZD4gYXJyYXkgY2FuIGJlIHdhbGtlZCBpbiBsb2Nrc3RlcCB3aXRoCisgICB0 aGUgaW5kZXggcGFnZSdzIGl0ZW0gcG9pbnRlcnMsIHNpbmNlIGJvdGggYXJlIGluIGFzY2VuZGlu ZyBvZmZzZXQgb3JkZXIuCisgICBUaGlzIGFsc28gbWVhbnMgdGhlIHRhYmxlIEFNIG5lZWQgbm90 IGNhbGwKKyAgIDxmdW5jdGlvbj50YWJsZWFtX3V0aWxfa2lsbF9zY2FucG9zaXRlbTwvZnVuY3Rp b24+IGluIGFueSBwYXJ0aWN1bGFyIG9yZGVyLgorICAgKEluZGV4IGFjY2VzcyBtZXRob2RzIHVz aW5nIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gcmVseSBvbiB0aGUKKyAgIDxzdHJ1 Y3RmaWVsZD5raWxsX3ByaW9yX3R1cGxlPC9zdHJ1Y3RmaWVsZD4gbWVjaGFuaXNtIGluc3RlYWQg dG8gbWFyayBkZWFkCisgICB0dXBsZXM7IHRoZSA8ZmlsZW5hbWU+c3JjL2JhY2tlbmQvYWNjZXNz L2dpc3QvPC9maWxlbmFtZT4gaW1wbGVtZW50YXRpb24KKyAgIHByb3ZpZGVzIGEgcmVmZXJlbmNl IGV4YW1wbGUuKQorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBXaGVuIGltcGxlbWVudGluZyA8 ZnVuY3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+LCB0aGUgaW5kZXggQU0KKyAgIHNo b3VsZCB2ZXJpZnkgdGhhdCB0aGUgaW5kZXggcGFnZSBoYXMgbm90IGJlZW4gbW9kaWZpZWQgc2lu Y2UgdGhlIGJhdGNoIHdhcworICAgb3JpZ2luYWxseSByZWFkLiAgVGhlIGJhdGNoJ3MgPHN0cnVj dGZpZWxkPmxzbjwvc3RydWN0ZmllbGQ+IGZpZWxkIHJlY29yZHMKKyAgIHRoZSBwYWdlIExTTiBh dCB0aGUgdGltZSB0aGUgaW5kZXggcGFnZSBsb2NrIHdhcyByZWxlYXNlZCAoc2V0CisgICBhdXRv bWF0aWNhbGx5IGJ5IHRoZSBjb3JlIGNvZGUpLiAgVGhlIGluZGV4IEFNIHNob3VsZCByZS1yZWFk IHRoZSBwYWdlLAorICAgY29tcGFyZSB0aGUgY3VycmVudCBwYWdlIExTTiBhZ2FpbnN0IDxzdHJ1 Y3RmaWVsZD5iYXRjaC0mZ3Q7bHNuPC9zdHJ1Y3RmaWVsZD4sCisgICBhbmQgZ2l2ZSB1cCBvbiBz ZXR0aW5nIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IGJpdHMgaWYgdGhlIExTTiBoYXMKKyAg IGFkdmFuY2VkLiAgQW4gYWR2YW5jZWQgTFNOIGluZGljYXRlcyB0aGF0IHRoZSBwYWdlIHdhcyBt b2RpZmllZCAmbWRhc2g7CisgICBwb3NzaWJseSBieSA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+ IHJlY3ljbGluZyBoZWFwIFRJRHMgJm1kYXNoOyBzbyBpdAorICAgd291bGQgYmUgdW5zYWZlIHRv IGFzc3VtZSB0aGF0IGluZGV4IGVudHJpZXMgc3RpbGwgcG9pbnQgdG8gdGhlIHNhbWUgaGVhcAor ICAgdHVwbGVzLiAgU2luY2UgPGxpdGVyYWw+TFBfREVBRDwvbGl0ZXJhbD4gbWFya2luZyBpcyBv bmx5IGFuIG9wdGltaXphdGlvbgorICAgaGludCwgaXQgaXMgYWx3YXlzIHNhZmUgdG8gc2tpcCBp dC4gIFNlZSB0aGUgQi10cmVlIGFuZCBoYXNoIGluZGV4CisgICBpbXBsZW1lbnRhdGlvbnMgZm9y IHJlZmVyZW5jZSBleGFtcGxlcyBvZiB0aGlzIHRlY2huaXF1ZS4KKyAgPC9wYXJhPgorCisgIDxw YXJhPgorICAgVGhlIGluZGV4IEFNIG1heSBjaG9vc2UgdG8gcmV0YWluIGl0cyBvd24gYnVmZmVy IHBpbnMgd2hlbiB0aGlzIHNlcnZlcyBhbgorICAgaW50ZXJuYWwgcHVycG9zZSAoZm9yIGV4YW1w bGUsIG1haW50YWluaW5nIGEgZGVzY2VudCBzdGFjayBvZiBwaW5uZWQgaW5kZXgKKyAgIHBhZ2Vz IGZvciByZXVzZSBhY3Jvc3MgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBjYWxscyku ICBIb3dldmVyLAorICAgYW55IHNjaGVtZSB0aGF0IHJldGFpbnMgYnVmZmVyIHBpbnMgbWFuYWdl ZCBieSB0aGUgaW5kZXggQU0gbXVzdCBiZSBzdXJlIHRvCisgICBmcmVlIHRoZSBwaW5zIGF0IGFu IG9wcG9ydHVuZSBwb2ludCAoZm9yIGV4YW1wbGUgd2hlbiA8ZnVuY3Rpb24+YW1yZXNjYW48L2Z1 bmN0aW9uPgorICAgYW5kL29yIDxmdW5jdGlvbj5hbWVuZHNjYW48L2Z1bmN0aW9uPiBhcmUgY2Fs bGVkKS4gIEl0IG11c3QgYWxzbyBrZWVwIHRoZQorICAgbnVtYmVyIG9mIHJldGFpbmVkIHBpbnMg Zml4ZWQgYW5kIHNtYWxsLCB0byBhdm9pZCBleGhhdXN0aW5nIHRoZSBiYWNrZW5kJ3MKKyAgIGJ1 ZmZlciBwaW4gbGltaXQuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVuY3Rpb24+ YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+IGZ1bmN0aW9uIGlzIG9wdGlvbmFsLiAgSW5kZXgK KyAgIGFjY2VzcyBtZXRob2RzIHRoYXQgd2FudCB0byBtYXJrIGRlYWQgaW5kZXggdHVwbGVzIHdp dGgKKyAgIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IGJpdHMgc2hvdWxkIHByb3ZpZGUgaXQ7 IHRob3NlIHRoYXQgZG9uJ3QgY2FuCisgICBsZWF2ZSBpdCBzZXQgdG8gPGxpdGVyYWw+TlVMTDwv bGl0ZXJhbD4gZXZlbiB3aGVuIHRoZXkgcHJvdmlkZQorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8 L2Z1bmN0aW9uPi4KKyAgPC9wYXJhPgogCiAgIDxwYXJhPgogPHByb2dyYW1saXN0aW5nPgpAQCAt NzY4LDggKzk0OSw4IEBAIGFtZ2V0Yml0bWFwIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICBpdHNl bGYsIGFuZCB0aGVyZWZvcmUgY2FsbGVycyByZWNoZWNrIGJvdGggdGhlIHNjYW4gY29uZGl0aW9u cyBhbmQgdGhlCiAgICBwYXJ0aWFsIGluZGV4IHByZWRpY2F0ZSAoaWYgYW55KSBmb3IgcmVjaGVj a2FibGUgdHVwbGVzLiAgVGhhdCBtaWdodCBub3QKICAgIGFsd2F5cyBiZSB0cnVlLCBob3dldmVy LgotICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gYW5kCi0gICA8ZnVuY3Rpb24+ YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGNhbm5vdCBiZSB1c2VkIGluIHRoZSBzYW1lIGluZGV4IHNj YW47IHRoZXJlCisgICBPbmx5IG9uZSBvZiA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9u PiwgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiwKKyAgIG9yIDxmdW5jdGlvbj5hbWdl dGJhdGNoPC9mdW5jdGlvbj4gY2FuIGJlIHVzZWQgaW4gYW55IGdpdmVuIGluZGV4IHNjYW47IHRo ZXJlCiAgICBhcmUgb3RoZXIgcmVzdHJpY3Rpb25zIHRvbyB3aGVuIHVzaW5nIDxmdW5jdGlvbj5h bWdldGJpdG1hcDwvZnVuY3Rpb24+LCBhcyBleHBsYWluZWQKICAgIGluIDx4cmVmIGxpbmtlbmQ9 ImluZGV4LXNjYW5uaW5nIi8+LgogICA8L3BhcmE+CkBAIC03OTUsMzIgKzk3Niw0MSBAQCBhbWVu ZHNjYW4gKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAgIDxwYXJhPgogPHByb2dyYW1saXN0aW5nPgog dm9pZAotYW1tYXJrcG9zIChJbmRleFNjYW5EZXNjIHNjYW4pOworYW1wb3NyZXNldCAoSW5kZXhT Y2FuRGVzYyBzY2FuLAorICAgICAgICAgICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogPC9wcm9n cmFtbGlzdGluZz4KLSAgIE1hcmsgY3VycmVudCBzY2FuIHBvc2l0aW9uLiAgVGhlIGFjY2VzcyBt ZXRob2QgbmVlZCBvbmx5IHN1cHBvcnQgb25lCi0gICByZW1lbWJlcmVkIHNjYW4gcG9zaXRpb24g cGVyIHNjYW4uCisgICBOb3RpZnkgdGhlIGluZGV4IEFNIHRoYXQgdGhlIHRhYmxlIEFNIGlzIGFi b3V0IHRvIGNoYW5nZSB0aGUgc2NhbidzCisgICBsb2dpY2FsIHBvc2l0aW9uIGluIGEgd2F5IHRo YXQgcmVxdWlyZXMgdGhlIGluZGV4IEFNIHRvIHJlc2V0IGFueSBzdGF0ZQorICAgdGhhdCBpbmRl cGVuZGVudGx5IHRyYWNrcyB0aGUgc2NhbidzIHByb2dyZXNzLiAgRm9yIGV4YW1wbGUsIG5idHJl ZSBtdXN0CisgICByZXNldCB0aGUgYXJyYXkga2V5cyB1c2VkIGJ5IDxsaXRlcmFsPlNjYWxhckFy cmF5T3BFeHByPC9saXRlcmFsPiBxdWFsCisgICBldmFsdWF0aW9uIHdoZW4gdGhlIHNjYW4gcG9z aXRpb24gY2hhbmdlcy4gIFRoaXMgY2FsbGJhY2sgaXMgaW52b2tlZCB3aGVuCisgICB0aGUgdGFi bGUgQU0gaXMgYWJvdXQgdG8gcHJvY2VzcyBhIGJhdGNoIGluIGEgZGlmZmVyZW50IGRpcmVjdGlv biB0aGFuCisgICB3YXMgdXNlZCB3aGVuIHRoZSBiYXRjaCB3YXMgb3JpZ2luYWxseSByZXR1cm5l ZCBieQorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiwgYW5kIGFsc28gd2hlbiBh IG1hcmtlZCBzY2FuIHBvc2l0aW9uIGlzCisgICBhYm91dCB0byBiZSByZXN0b3JlZC4KICAgPC9w YXJhPgogCiAgIDxwYXJhPgotICAgVGhlIDxmdW5jdGlvbj5hbW1hcmtwb3M8L2Z1bmN0aW9uPiBm dW5jdGlvbiBuZWVkIG9ubHkgYmUgcHJvdmlkZWQgaWYgdGhlIGFjY2VzcwotICAgbWV0aG9kIHN1 cHBvcnRzIG9yZGVyZWQgc2NhbnMuICBJZiBpdCBkb2Vzbid0LAotICAgdGhlIDxzdHJ1Y3RmaWVs ZD5hbW1hcmtwb3M8L3N0cnVjdGZpZWxkPiBmaWVsZCBpbiBpdHMgPHN0cnVjdG5hbWU+SW5kZXhB bVJvdXRpbmU8L3N0cnVjdG5hbWU+Ci0gICBzdHJ1Y3QgbWF5IGJlIHNldCB0byBOVUxMLgorICAg V2hlbiA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+IGlzIGNhbGxlZCBkdWUgdG8gYSBj cm9zcy1iYXRjaAorICAgZGlyZWN0aW9uIGNoYW5nZSwgdGhlIGNvcmUgc3lzdGVtIHdpbGwgaGF2 ZSBhbHJlYWR5IGZsaXBwZWQgdGhlIGJhdGNoJ3MKKyAgIDxzdHJ1Y3RmaWVsZD5kaXI8L3N0cnVj dGZpZWxkPiBmaWVsZCB0byByZWZsZWN0IHRoZSBuZXcgc2NhbiBkaXJlY3Rpb24KKyAgIGJlZm9y ZSBtYWtpbmcgdGhlIGNhbGwuICBUaGUgaW5kZXggQU0gc2hvdWxkIHVzZSB0aGlzIHVwZGF0ZWQg ZGlyZWN0aW9uCisgICB3aGVuIHJlc2V0dGluZyBhbnkgc3RhdGUgdGhhdCBkZXBlbmRzIG9uIGtu b3dpbmcgd2hpY2ggd2F5IHRoZSBzY2FuIGlzCisgICBwcm9jZWVkaW5nLiAgV2hlbiBjYWxsZWQg dG8gcmVzdG9yZSBhIG1hcmtlZCBwb3NpdGlvbiwgdGhlIGJhdGNoJ3MKKyAgIDxzdHJ1Y3RmaWVs ZD5kaXI8L3N0cnVjdGZpZWxkPiBpcyBub3QgbW9kaWZpZWQ7IGl0IHJldGFpbnMgdGhlIGRpcmVj dGlvbgorICAgZnJvbSB3aGVuIHRoZSBiYXRjaCB3YXMgb3JpZ2luYWxseSByZXR1cm5lZC4gIElu IGJvdGggY2FzZXMsIHRoZSBiYXRjaAorICAgcGFzc2VkIHRvIDxmdW5jdGlvbj5hbXBvc3Jlc2V0 PC9mdW5jdGlvbj4gaXMgdGhlIGJhdGNoIHRoYXQgd2lsbCBiZSB1c2VkCisgICB0byBjb250aW51 ZSB0aGUgc2Nhbi4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgotPHByb2dyYW1saXN0aW5nPgotdm9p ZAotYW1yZXN0cnBvcyAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0g ICBSZXN0b3JlIHRoZSBzY2FuIHRvIHRoZSBtb3N0IHJlY2VudGx5IG1hcmtlZCBwb3NpdGlvbi4K LSAgPC9wYXJhPgotCi0gIDxwYXJhPgotICAgVGhlIDxmdW5jdGlvbj5hbXJlc3RycG9zPC9mdW5j dGlvbj4gZnVuY3Rpb24gbmVlZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRoZSBhY2Nlc3MKLSAgIG1l dGhvZCBzdXBwb3J0cyBvcmRlcmVkIHNjYW5zLiAgSWYgaXQgZG9lc24ndCwKLSAgIHRoZSA8c3Ry dWN0ZmllbGQ+YW1yZXN0cnBvczwvc3RydWN0ZmllbGQ+IGZpZWxkIGluIGl0cyA8c3RydWN0bmFt ZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFtZT4KLSAgIHN0cnVjdCBtYXkgYmUgc2V0IHRvIE5V TEwuCisgICBJbmRleCBhY2Nlc3MgbWV0aG9kcyB0aGF0IGhhdmUgcHJpdmF0ZSBzdGF0ZSB3aGlj aCBtdXN0IGJlIHJlc2V0IHdoZW4gdGhlCisgICBzY2FuIHBvc2l0aW9uIGNoYW5nZXMgbXVzdCBw cm92aWRlIGFuIDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5jdGlvbj4KKyAgIGltcGxlbWVudGF0 aW9uLiAgSW5kZXggQU1zIHdpdGggbm8gc3VjaCBzdGF0ZSBtYXkgc2V0CisgICA8c3RydWN0Zmll bGQ+YW1wb3NyZXNldDwvc3RydWN0ZmllbGQ+IHRvIE5VTEwuCisgICBUaGUgPGZ1bmN0aW9uPmFt cG9zcmVzZXQ8L2Z1bmN0aW9uPiBmdW5jdGlvbiBjYW4gb25seSBiZSBwcm92aWRlZCB3aGVuIHRo ZQorICAgYWNjZXNzIG1ldGhvZCBzdXBwb3J0cyBvcmRlcmVkIHNjYW5zIHRocm91Z2ggdGhlIDxm dW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4KKyAgIGludGVyZmFjZS4KICAgPC9wYXJhPgog CiAgIDxwYXJhPgpAQCAtOTc1LDYgKzExNjUsOCBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBh cmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgICAgICAgQWNj ZXNzIG1ldGhvZHMgdGhhdCBhbHdheXMgcmV0dXJuIGVudHJpZXMgaW4gdGhlIG5hdHVyYWwgb3Jk ZXJpbmcKICAgICAgICBvZiB0aGVpciBkYXRhIChzdWNoIGFzIGJ0cmVlKSBzaG91bGQgc2V0CiAg ICAgICAgPHN0cnVjdGZpZWxkPmFtY2Fub3JkZXI8L3N0cnVjdGZpZWxkPiB0byB0cnVlLgorICAg ICAgIEJvdGggPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBhbmQgPGZ1bmN0aW9uPmFt Z2V0YmF0Y2g8L2Z1bmN0aW9uPgorICAgICAgIHNjYW5zIHN1cHBvcnQgdGhpcyBjYXBhYmlsaXR5 LgogICAgICAgIEN1cnJlbnRseSwgc3VjaCBhY2Nlc3MgbWV0aG9kcyBtdXN0IHVzZSBidHJlZS1j b21wYXRpYmxlIHN0cmF0ZWd5CiAgICAgICAgbnVtYmVycyBmb3IgdGhlaXIgZXF1YWxpdHkgYW5k IG9yZGVyaW5nIG9wZXJhdG9ycy4KICAgICAgIDwvcGFyYT4KQEAgLTk4Nyw0MSArMTE3OSw1MCBA QCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwg T2lkIG9wY2ludHlwZSk7CiAgICAgICAgYW4gb3JkZXIgc2F0aXNmeWluZyA8bGl0ZXJhbD5PUkRF UiBCWTwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxlPmluZGV4X2tleTwvcmVwbGFjZWFibGU+CiAgICAg ICAgPHJlcGxhY2VhYmxlPm9wZXJhdG9yPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPmNvbnN0 YW50PC9yZXBsYWNlYWJsZT4uICBTY2FuIG1vZGlmaWVycwogICAgICAgIG9mIHRoYXQgZm9ybSBj YW4gYmUgcGFzc2VkIHRvIDxmdW5jdGlvbj5hbXJlc2NhbjwvZnVuY3Rpb24+IGFzIGRlc2NyaWJl ZAotICAgICAgIHByZXZpb3VzbHkuCisgICAgICAgcHJldmlvdXNseS4gIE5vdGUgdGhhdCA8ZnVu Y3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHNjYW5zIGRvIG5vdAorICAgICAgIHN1cHBvcnQg b3JkZXJpbmcgb3BlcmF0b3JzLgogICAgICAgPC9wYXJhPgogICAgICA8L2xpc3RpdGVtPgogICAg IDwvaXRlbWl6ZWRsaXN0PgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBUaGUgPGZ1bmN0aW9u PmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBmdW5jdGlvbiBoYXMgYSA8bGl0ZXJhbD5kaXJlY3Rpb248 L2xpdGVyYWw+IGFyZ3VtZW50LAorICAgVGhlIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlv bj4gYW5kIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4KKyAgIGZ1bmN0aW9ucyBoYXZl IGEgPGxpdGVyYWw+ZGlyZWN0aW9uPC9saXRlcmFsPiBhcmd1bWVudCwKICAgIHdoaWNoIGNhbiBi ZSBlaXRoZXIgPGxpdGVyYWw+Rm9yd2FyZFNjYW5EaXJlY3Rpb248L2xpdGVyYWw+ICh0aGUgbm9y bWFsIGNhc2UpCiAgICBvciAgPGxpdGVyYWw+QmFja3dhcmRTY2FuRGlyZWN0aW9uPC9saXRlcmFs Pi4gIElmIHRoZSBmaXJzdCBjYWxsIGFmdGVyCiAgICA8ZnVuY3Rpb24+YW1yZXNjYW48L2Z1bmN0 aW9uPiBzcGVjaWZpZXMgPGxpdGVyYWw+QmFja3dhcmRTY2FuRGlyZWN0aW9uPC9saXRlcmFsPiwg dGhlbiB0aGUKICAgIHNldCBvZiBtYXRjaGluZyBpbmRleCBlbnRyaWVzIGlzIHRvIGJlIHNjYW5u ZWQgYmFjay10by1mcm9udCByYXRoZXIgdGhhbiBpbgotICAgdGhlIG5vcm1hbCBmcm9udC10by1i YWNrIGRpcmVjdGlvbiwgc28gPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBtdXN0IHJl dHVybgotICAgdGhlIGxhc3QgbWF0Y2hpbmcgdHVwbGUgaW4gdGhlIGluZGV4LCByYXRoZXIgdGhh biB0aGUgZmlyc3Qgb25lIGFzIGl0Ci0gICBub3JtYWxseSB3b3VsZC4gIChUaGlzIHdpbGwgb25s eSBvY2N1ciBmb3IgYWNjZXNzCi0gICBtZXRob2RzIHRoYXQgc2V0IDxzdHJ1Y3RmaWVsZD5hbWNh bm9yZGVyPC9zdHJ1Y3RmaWVsZD4gdG8gdHJ1ZS4pICBBZnRlciB0aGUKLSAgIGZpcnN0IGNhbGws IDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gbXVzdCBiZSBwcmVwYXJlZCB0byBhZHZh bmNlIHRoZSBzY2FuIGluCisgICB0aGUgbm9ybWFsIGZyb250LXRvLWJhY2sgZGlyZWN0aW9uLiAg SW4gdGhpcyBjYXNlLAorICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBtdXN0IHJl dHVybiB0aGUgbGFzdCBtYXRjaGluZyB0dXBsZSBpbiB0aGUKKyAgIGluZGV4LCByYXRoZXIgdGhh biB0aGUgZmlyc3Qgb25lIGFzIGl0IG5vcm1hbGx5IHdvdWxkLiAgU2ltaWxhcmx5LAorICAgPGZ1 bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBtdXN0IHJldHVybiB0aGUgbGFzdCBtYXRjaGlu ZyBiYXRjaCBvZiBpdGVtcworICAgd2hlbiBlaXRoZXIgdGhlIGZpcnN0IGNhbGwgYWZ0ZXIgPGZ1 bmN0aW9uPmFtcmVzY2FuPC9mdW5jdGlvbj4gc3BlY2lmaWVzCisgICA8bGl0ZXJhbD5CYWNrd2Fy ZFNjYW5EaXJlY3Rpb248L2xpdGVyYWw+LCBvciBhIHN1YnNlcXVlbnQgY2FsbCBoYXMKKyAgIDxs aXRlcmFsPk5VTEw8L2xpdGVyYWw+IGFzIGl0cyA8c3RydWN0ZmllbGQ+cHJpb3JiYXRjaDwvc3Ry dWN0ZmllbGQ+IGFyZ3VtZW50CisgICAoaW5kaWNhdGluZyBhIGJhY2t3YXJkIHNjYW4gcmVzdGFy dCkuICAoVGhpcyBiYWNrd2FyZC1zY2FuIGJlaGF2aW9yIHdpbGwKKyAgIG9ubHkgb2NjdXIgZm9y IGFjY2VzcyBtZXRob2RzIHRoYXQgc2V0IDxzdHJ1Y3RmaWVsZD5hbWNhbm9yZGVyPC9zdHJ1Y3Rm aWVsZD4KKyAgIHRvIHRydWUuKSAgQWZ0ZXIgdGhlIGZpcnN0IGNhbGwsIGJvdGggPGZ1bmN0aW9u PmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBhbmQKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4gbXVzdCBiZSBwcmVwYXJlZCB0byBhZHZhbmNlIHRoZSBzY2FuIGluCiAgICBlaXRoZXIg ZGlyZWN0aW9uIGZyb20gdGhlIG1vc3QgcmVjZW50bHkgcmV0dXJuZWQgZW50cnkuICAoQnV0IGlm CiAgICA8c3RydWN0ZmllbGQ+YW1jYW5iYWNrd2FyZDwvc3RydWN0ZmllbGQ+IGlzIGZhbHNlLCBh bGwgc3Vic2VxdWVudAogICAgY2FsbHMgd2lsbCBoYXZlIHRoZSBzYW1lIGRpcmVjdGlvbiBhcyB0 aGUgZmlyc3Qgb25lLikKICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgQWNjZXNzIG1ldGhvZHMg dGhhdCBzdXBwb3J0IG9yZGVyZWQgc2NhbnMgbXVzdCBzdXBwb3J0IDxxdW90ZT5tYXJraW5nPC9x dW90ZT4gYQotICAgcG9zaXRpb24gaW4gYSBzY2FuIGFuZCBsYXRlciByZXR1cm5pbmcgdG8gdGhl IG1hcmtlZCBwb3NpdGlvbi4gIFRoZSBzYW1lCi0gICBwb3NpdGlvbiBtaWdodCBiZSByZXN0b3Jl ZCBtdWx0aXBsZSB0aW1lcy4gIEhvd2V2ZXIsIG9ubHkgb25lIHBvc2l0aW9uIG5lZWQKLSAgIGJl IHJlbWVtYmVyZWQgcGVyIHNjYW47IGEgbmV3IDxmdW5jdGlvbj5hbW1hcmtwb3M8L2Z1bmN0aW9u PiBjYWxsIG92ZXJyaWRlcyB0aGUKLSAgIHByZXZpb3VzbHkgbWFya2VkIHBvc2l0aW9uLiAgQW4g YWNjZXNzIG1ldGhvZCB0aGF0IGRvZXMgbm90IHN1cHBvcnQgb3JkZXJlZAotICAgc2NhbnMgbmVl ZCBub3QgcHJvdmlkZSA8ZnVuY3Rpb24+YW1tYXJrcG9zPC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlv bj5hbXJlc3RycG9zPC9mdW5jdGlvbj4KLSAgIGZ1bmN0aW9ucyBpbiA8c3RydWN0bmFtZT5JbmRl eEFtUm91dGluZTwvc3RydWN0bmFtZT47IHNldCB0aG9zZSBwb2ludGVycyB0byBOVUxMCi0gICBp bnN0ZWFkLgorICAgQWNjZXNzIG1ldGhvZHMgdXNpbmcgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNo PC9mdW5jdGlvbj4gaW50ZXJmYWNlCisgICBzdXBwb3J0IDxxdW90ZT5tYXJraW5nPC9xdW90ZT4g YSBwb3NpdGlvbiBpbiBhIHNjYW4gYW5kIGxhdGVyIHJldHVybmluZyB0bworICAgdGhlIG1hcmtl ZCBwb3NpdGlvbi4gIFdoZW4gYSBiYXRjaCBpcyBwcm9jZXNzZWQgaW4gYSBkaWZmZXJlbnQgZGly ZWN0aW9uCisgICB0aGFuIGl0IHdhcyBvcmlnaW5hbGx5IGZldGNoZWQsIG9yIHdoZW4gYSBtYXJr ZWQgcG9zaXRpb24gaXMgcmVzdG9yZWQsIHRoZQorICAgaW5kZXggQU0gaXMgbm90aWZpZWQgdmlh IHRoZSA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+IGNhbGxiYWNrIChpZgorICAgcHJv dmlkZWQpIHNvIGl0IGNhbiByZXNldCBhbnkgcHJpdmF0ZSBzdGF0ZSB0aGF0IGluZGVwZW5kZW50 bHkgdHJhY2tzIHRoZQorICAgc2NhbidzIHByb2dyZXNzIChzdWNoIGFzIGFycmF5IGtleSBzdGF0 ZSkuICBTZWUgdGhlIGRlc2NyaXB0aW9uIG9mCisgICA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVu Y3Rpb24+IGluIDx4cmVmIGxpbmtlbmQ9ImluZGV4LWZ1bmN0aW9ucyIvPiBmb3IKKyAgIGRldGFp bHMuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIEJvdGggdGhlIHNjYW4gcG9zaXRpb24gYW5k IHRoZSBtYXJrIHBvc2l0aW9uIChpZiBhbnkpIG11c3QgYmUgbWFpbnRhaW5lZAorICAgVGhlIHNj YW4gcG9zaXRpb24gKGlmIGFueSkgbXVzdCBiZSBtYWludGFpbmVkIGJ5IHRoZSB0YWJsZSBBTSBh bmQgaW5kZXggQU0KICAgIGNvbnNpc3RlbnRseSBpbiB0aGUgZmFjZSBvZiBjb25jdXJyZW50IGlu c2VydGlvbnMgb3IgZGVsZXRpb25zIGluIHRoZQogICAgaW5kZXguICBJdCBpcyBPSyBpZiBhIGZy ZXNobHktaW5zZXJ0ZWQgZW50cnkgaXMgbm90IHJldHVybmVkIGJ5IGEgc2NhbiB0aGF0CiAgICB3 b3VsZCBoYXZlIGZvdW5kIHRoZSBlbnRyeSBpZiBpdCBoYWQgZXhpc3RlZCB3aGVuIHRoZSBzY2Fu IHN0YXJ0ZWQsIG9yIGZvcgpAQCAtMTA0NCwxMiArMTI0NSwxNCBAQCBhbXRyYW5zbGF0ZWNtcHR5 cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAg IDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIEluc3RlYWQgb2YgdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0 dHVwbGU8L2Z1bmN0aW9uPiwgYW4gaW5kZXggc2NhbiBjYW4gYmUgZG9uZSB3aXRoCi0gICA8ZnVu Y3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiB0byBmZXRjaCBhbGwgdHVwbGVzIGluIG9uZSBj YWxsLiAgVGhpcyBjYW4gYmUKLSAgIG5vdGljZWFibHkgbW9yZSBlZmZpY2llbnQgdGhhbiA8ZnVu Y3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGJlY2F1c2UgaXQgYWxsb3dzCi0gICBhdm9pZGlu ZyBsb2NrL3VubG9jayBjeWNsZXMgd2l0aGluIHRoZSBhY2Nlc3MgbWV0aG9kLiAgSW4gcHJpbmNp cGxlCi0gICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBzaG91bGQgaGF2ZSB0aGUg c2FtZSBlZmZlY3RzIGFzIHJlcGVhdGVkCi0gICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rp b24+IGNhbGxzLCBidXQgd2UgaW1wb3NlIHNldmVyYWwgcmVzdHJpY3Rpb25zIHRvCisgICBJbnN0 ZWFkIG9mIHVzaW5nIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gb3IKKyAgIDxmdW5j dGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4sIGFuIGluZGV4IHNjYW4gY2FuIGJlIGRvbmUgd2l0 aAorICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gdG8gZmV0Y2ggYWxsIHR1cGxl cyBpbiBvbmUgY2FsbC4gIFRoaXMgY2FuCisgICBiZSBub3RpY2VhYmx5IG1vcmUgZWZmaWNpZW50 IHRoYW4gd2l0aCBhbiA8cXVvdGU+b3JkZXJlZDwvcXVvdGU+IHNjYW4KKyAgIGJlY2F1c2UgaXQg YWxsb3dzIGVmZmljaWVudCBzZXF1ZW50aWFsIGFjY2VzcyB0byB0YWJsZSBBTSBwYWdlcyBjb250 YWluaW5nCisgICBtYXRjaGVzLiAgSW4gcHJpbmNpcGxlIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwv ZnVuY3Rpb24+IHNob3VsZCBoYXZlIHRoZQorICAgc2FtZSBlZmZlY3RzIGFzIHJlcGVhdGVkIDxm dW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gb3IKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNo PC9mdW5jdGlvbj4gY2FsbHMsIGJ1dCB3ZSBpbXBvc2Ugc2V2ZXJhbCByZXN0cmljdGlvbnMgdG8K ICAgIHNpbXBsaWZ5IG1hdHRlcnMuICBGaXJzdCBvZiBhbGwsIDxmdW5jdGlvbj5hbWdldGJpdG1h cDwvZnVuY3Rpb24+IHJldHVybnMgYWxsCiAgICB0dXBsZXMgYXQgb25jZSBhbmQgbWFya2luZyBv ciByZXN0b3Jpbmcgc2NhbiBwb3NpdGlvbnMgaXNuJ3QKICAgIHN1cHBvcnRlZC4gU2Vjb25kbHks IHRoZSB0dXBsZXMgYXJlIHJldHVybmVkIGluIGEgYml0bWFwIHdoaWNoIGRvZXNuJ3QKQEAgLTEw NjYsMTAgKzEyNjksNjQgQEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBl LCBPaWQgb3BmYW1pbHksIE9pZCBvcGNpbnR5cGUpOwogCiAgIDxwYXJhPgogICAgTm90ZSB0aGF0 IGl0IGlzIHBlcm1pdHRlZCBmb3IgYW4gYWNjZXNzIG1ldGhvZCB0byBpbXBsZW1lbnQgb25seQot ICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gYW5kIG5vdCA8ZnVuY3Rpb24+YW1n ZXR0dXBsZTwvZnVuY3Rpb24+LCBvciB2aWNlIHZlcnNhLAotICAgaWYgaXRzIGludGVybmFsIGlt cGxlbWVudGF0aW9uIGlzIHVuc3VpdGVkIHRvIG9uZSBBUEkgb3IgdGhlIG90aGVyLgorICAgPGZ1 bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gYW5kIG5vdCA8ZnVuY3Rpb24+YW1nZXR0dXBs ZTwvZnVuY3Rpb24+LzxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4sCisgICBvciB2aWNl IHZlcnNhLCBpZiBpdHMgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gaXMgdW5zdWl0ZWQgdG8gb25l IEFQSSBvciB0aGUgb3RoZXIuCiAgIDwvcGFyYT4KIAorICA8c2VjdDIgaWQ9ImluZGV4LXNjYW5u aW5nLWJhdGNoZXMiPgorICAgPHRpdGxlPlRhYmxlIEFNIENvbnNpZGVyYXRpb25zIGZvciBCYXRj aCBTY2FubmluZzwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAgIFRoaXMgc2VjdGlvbiBpcyBwcmlt YXJpbHkgcmVsZXZhbnQgdG8KKyAgICA8bGluayBsaW5rZW5kPSJ0YWJsZWFtIj50YWJsZSBhY2Nl c3MgbWV0aG9kPC9saW5rPiBhdXRob3JzLgorICAgIFdoZW4gYW4gaW5kZXggc2NhbiB1c2VzIHRo ZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSwKKyAgICB0aGUgdGFi bGUgQU0gaXMgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIHBvc2l0aW9uIHN0YXRlIHdpdGhpbiB0 aGUKKyAgICA8c3RydWN0bmFtZT5JbmRleFNjYW5EZXNjPC9zdHJ1Y3RuYW1lPidzCisgICAgPHN0 cnVjdGZpZWxkPmJhdGNocmluZ2J1Zjwvc3RydWN0ZmllbGQ+IGFuZCBmb3IgY29udHJvbGxpbmcg d2hlbgorICAgIGJ1ZmZlciBwaW5zIG9uIGluZGV4IHBhZ2VzIGFyZSByZWxlYXNlZC4KKyAgIDwv cGFyYT4KKworICAgPHBhcmE+CisgICAgVGhlIDxzdHJ1Y3RmaWVsZD5zY2FuUG9zPC9zdHJ1Y3Rm aWVsZD4gZmllbGQgd2l0aGluCisgICAgPHN0cnVjdGZpZWxkPmJhdGNocmluZ2J1Zjwvc3RydWN0 ZmllbGQ+IHRyYWNrcyB3aGljaCBiYXRjaCBhbmQgaXRlbSB3aXRoaW4KKyAgICB0aGF0IGJhdGNo IHdpbGwgYmUgcmV0dXJuZWQgbmV4dCB0byB0aGUgZXhlY3V0b3IuICBUaGUgdGFibGUgQU0gbXVz dCBhZHZhbmNlCisgICAgPHN0cnVjdGZpZWxkPnNjYW5Qb3M8L3N0cnVjdGZpZWxkPiBhcyB0dXBs ZXMgYXJlIHJldHVybmVkIGJ5CisgICAgPGZ1bmN0aW9uPnRhYmxlX2luZGV4X2dldG5leHRfc2xv dDwvZnVuY3Rpb24+LiAgVGhlIGNvcmUgY29kZSBtYXkgYWxzbworICAgIG1vZGlmeSB0aGlzIGZp ZWxkIGR1cmluZyBvcGVyYXRpb25zIHN1Y2ggYXMgbWFyay9yZXN0b3JlLgorICAgPC9wYXJhPgor CisgICA8cGFyYT4KKyAgICBUaGUgPHN0cnVjdGZpZWxkPnByZWZldGNoUG9zPC9zdHJ1Y3RmaWVs ZD4gZmllbGQgdHJhY2tzIHRoZSBwb3NpdGlvbiB1c2VkCisgICAgZm9yIEkvTyBwcmVmZXRjaGlu Zy4gIEl0IGlzIGdlbmVyYWxseSBhZHZhbmNlZCBieSBpbml0aWFsaXppbmcgaXQgZnJvbQorICAg IDxzdHJ1Y3RmaWVsZD5zY2FuUG9zPC9zdHJ1Y3RmaWVsZD4gd2l0aGluIGEgcmVhZCBzdHJlYW0g Y2FsbGJhY2ssIGFsbG93aW5nCisgICAgdGhlIHRhYmxlIEFNIHRvIHByZWZldGNoIHRhYmxlIGJs b2NrcyBwb2ludGVkIHRvIGJ5IGl0ZW1zIHRoYXQgYXJlIHdlbGwKKyAgICBhaGVhZCBvZiB0aGUg Y3VycmVudCBzY2FuIHBvc2l0aW9uLiAgSW5pdGlhbGx5CisgICAgPHN0cnVjdGZpZWxkPnByZWZl dGNoUG9zPC9zdHJ1Y3RmaWVsZD4gc3RhcnRzIGF0CisgICAgPHN0cnVjdGZpZWxkPnNjYW5Qb3M8 L3N0cnVjdGZpZWxkPiwgYnV0IGFzIHRoZSByZWFkIHN0cmVhbSByYW1wcyB1cCBpdCBjYW4KKyAg ICBnZXQgZmFyIGFoZWFkICZtZGFzaDsgc3Bhbm5pbmcgbXVsdGlwbGUgaW5kZXggcGFnZXMgaWYg bmVjZXNzYXJ5IHRvCisgICAgbWFpbnRhaW4gYW4gb3B0aW1hbCBJL08gcHJlZmV0Y2ggZGlzdGFu Y2UgZm9yIHRhYmxlIGJsb2NrIHJlYWRzLiAgQSBtYWpvcgorICAgIGdvYWwgb2YgdGhlIDxmdW5j dGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlIGlzIHRvIGFsbG93IHRoZQorICAg IHRhYmxlIEFNIHRvIHByZWZldGNoIHdpdGhvdXQgYmVpbmcgbGltaXRlZCB0byBpdGVtcyBmcm9t IHRoZSBjdXJyZW50CisgICAgPHN0cnVjdGZpZWxkPnNjYW5Qb3M8L3N0cnVjdGZpZWxkPiBiYXRj aCdzIGluZGV4IGxlYWYgcGFnZS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgQm90aCA8 c3RydWN0ZmllbGQ+c2NhblBvczwvc3RydWN0ZmllbGQ+IGFuZAorICAgIDxzdHJ1Y3RmaWVsZD5w cmVmZXRjaFBvczwvc3RydWN0ZmllbGQ+IGFyZSBjb250cm9sbGVkIGJ5IHRoZSB0YWJsZSBBTSBh bmQKKyAgICBjb3JlIGNvZGU7IGluZGV4IGFjY2VzcyBtZXRob2RzIHNob3VsZCBub3QgYWNjZXNz IG9yIG1hbmlwdWxhdGUgdGhlc2UKKyAgICBmaWVsZHMuICBTZWUgdGhlIDxmaWxlbmFtZT5zcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC88L2ZpbGVuYW1lPgorICAgIGltcGxlbWVudGF0aW9uIGZvciBh IHJlZmVyZW5jZSBleGFtcGxlLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBCdWZmZXIg cGlucyBvbiBpbmRleCBwYWdlcyByZXR1cm5lZCBieSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVu Y3Rpb24+IGFyZQorICAgIG1hbmFnZWQgYnkgdGhlIHRhYmxlIEFNLiAgU2VlIHRoZSA8ZnVuY3Rp b24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGFuZAorICAgIDxmdW5jdGlvbj5hbWtpbGxpdGVtc2Jh dGNoPC9mdW5jdGlvbj4gZGVzY3JpcHRpb25zIGluIDx4cmVmIGxpbmtlbmQ9ImluZGV4LWZ1bmN0 aW9ucyIvPgorICAgIGZvciBkZXRhaWxzLgorICAgPC9wYXJhPgorCisgIDwvc2VjdDI+CisKICA8 L3NlY3QxPgogCiAgPHNlY3QxIGlkPSJpbmRleC1sb2NraW5nIj4KQEAgLTExMjMsMTEgKzEzODAs MTUgQEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1p bHksIE9pZCBvcGNpbnR5cGUpOwogICAgICA8L2xpc3RpdGVtPgogICAgICA8bGlzdGl0ZW0+CiAg ICAgICA8cGFyYT4KLSAgICAgICBBbiBpbmRleCBzY2FuIG11c3QgbWFpbnRhaW4gYSBwaW4KLSAg ICAgICBvbiB0aGUgaW5kZXggcGFnZSBob2xkaW5nIHRoZSBpdGVtIGxhc3QgcmV0dXJuZWQgYnkK LSAgICAgICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LCBhbmQgPGZ1bmN0aW9uPmFt YnVsa2RlbGV0ZTwvZnVuY3Rpb24+IGNhbm5vdCBkZWxldGUKLSAgICAgICBlbnRyaWVzIGZyb20g cGFnZXMgdGhhdCBhcmUgcGlubmVkIGJ5IG90aGVyIGJhY2tlbmRzLiAgVGhlIG5lZWQKLSAgICAg ICBmb3IgdGhpcyBydWxlIGlzIGV4cGxhaW5lZCBiZWxvdy4KKyAgICAgICBBIHBpbiBtdXN0IGJl IGhlbGQgb24gYW55IGluZGV4IHBhZ2Ugd2hvc2UgaXRlbXMgbWlnaHQgc3RpbGwgbmVlZCB0bwor ICAgICAgIGJlIGZvbGxvd2VkLCBhbmQgPGZ1bmN0aW9uPmFtYnVsa2RlbGV0ZTwvZnVuY3Rpb24+ IG11c3QgYWNxdWlyZSBhCisgICAgICAgY2xlYW51cCBsb2NrIG9uIGVhY2ggaW5kZXggcGFnZSwg d2hpY2ggd2lsbCBibG9jayBpZiBhbnkgb3RoZXIKKyAgICAgICBiYWNrZW5kIGhvbGRzIGEgcGlu IG9uIHRoYXQgcGFnZS4KKyAgICAgICBGb3IgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9u PiBzY2FucywgdGhlIGluZGV4IGFjY2VzcyBtZXRob2QKKyAgICAgICBtYW5hZ2VzIHRoaXMgcGlu IGRpcmVjdGx5LgorICAgICAgIEZvciA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHNj YW5zLCB0aGUgdGFibGUgYWNjZXNzIG1ldGhvZAorICAgICAgIGNvbnRyb2xzIHdoZW4gcGlucyBh cmUgZHJvcHBlZC4KKyAgICAgICBUaGUgbmVlZCBmb3IgdGhpcyBydWxlIGlzIGV4cGxhaW5lZCBi ZWxvdy4KICAgICAgIDwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgICA8L2l0ZW1pemVkbGlz dD4KQEAgLTExNTYsMjEgKzE0MTcsNDkgQEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlw ZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHksIE9pZCBvcGNpbnR5cGUpOwogICA8L3BhcmE+CiAKICAg PHBhcmE+Ci0gICBUaGlzIHNvbHV0aW9uIHJlcXVpcmVzIHRoYXQgaW5kZXggc2NhbnMgYmUgPHF1 b3RlPnN5bmNocm9ub3VzPC9xdW90ZT46IHdlIGhhdmUKLSAgIHRvIGZldGNoIGVhY2ggaGVhcCB0 dXBsZSBpbW1lZGlhdGVseSBhZnRlciBzY2FubmluZyB0aGUgY29ycmVzcG9uZGluZyBpbmRleAot ICAgZW50cnkuICBUaGlzIGlzIGV4cGVuc2l2ZSBmb3IgYSBudW1iZXIgb2YgcmVhc29ucy4gIEFu Ci0gICA8cXVvdGU+YXN5bmNocm9ub3VzPC9xdW90ZT4gc2NhbiBpbiB3aGljaCB3ZSBjb2xsZWN0 IG1hbnkgVElEcyBmcm9tIHRoZSBpbmRleCwKLSAgIGFuZCBvbmx5IHZpc2l0IHRoZSBoZWFwIHR1 cGxlcyBzb21ldGltZSBsYXRlciwgcmVxdWlyZXMgbXVjaCBsZXNzIGluZGV4Ci0gICBsb2NraW5n IG92ZXJoZWFkIGFuZCBjYW4gYWxsb3cgYSBtb3JlIGVmZmljaWVudCBoZWFwIGFjY2VzcyBwYXR0 ZXJuLgorICAgVGhpcyBzb2x1dGlvbiByZXF1aXJlcyB0aGF0IDxmdW5jdGlvbj5hbWdldHR1cGxl PC9mdW5jdGlvbj4gaW5kZXggc2NhbnMgYmUKKyAgIDxxdW90ZT5zeW5jaHJvbm91czwvcXVvdGU+ OiB0aGUgdGFibGUgQU0gbXVzdCBmZXRjaCBlYWNoIGhlYXAgdHVwbGUKKyAgIGltbWVkaWF0ZWx5 IGFmdGVyIHNjYW5uaW5nIHRoZSBjb3JyZXNwb25kaW5nIGluZGV4IGVudHJ5LiAgVGhpcyBpcwor ICAgZXhwZW5zaXZlIGZvciBhIG51bWJlciBvZiByZWFzb25zLiAgVGhlCisgICA8ZnVuY3Rpb24+ YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSwgYnkgY29udHJhc3QsIHdhcyBkZXNpZ25l ZCB0bworICAgYWxsb3cgc2NhbnMgdG8gYmUgPHF1b3RlPmFzeW5jaHJvbm91czwvcXVvdGU+OiBi eSBjb2xsZWN0aW5nIGJhdGNoZXMgb2YKKyAgIFRJRHMgZnJvbSBtdWx0aXBsZSBpbmRleCBwYWdl cywgdGhlIHRhYmxlIEFNIGNhbiBwcmVmZXRjaCB0aGUgY29ycmVzcG9uZGluZworICAgdGFibGUg YmxvY2tzIHdlbGwgYWhlYWQgb2YgdGhlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbiAodXNpbmcgYXN5 bmNocm9ub3VzCisgICBJL08gd2hlbiBhdmFpbGFibGUpLCByZXF1aXJpbmcgbXVjaCBsZXNzIGlu ZGV4IGxvY2tpbmcgb3ZlcmhlYWQgYW5kIGFsbG93aW5nCisgICBhIG1vcmUgZWZmaWNpZW50IGhl YXAgYWNjZXNzIHBhdHRlcm4uICBOb3QgYWxsIHNjYW5zIGVuZCB1cCBiZWluZworICAgYXN5bmNo cm9ub3VzIGluIHByYWN0aWNlLCBidXQgdGhlIGludGVyZmFjZSBpcyBkZXNpZ25lZCB0byBhbGxv dyBpdC4KICAgIFBlciB0aGUgYWJvdmUgYW5hbHlzaXMsIHdlIG11c3QgdXNlIHRoZSBzeW5jaHJv bm91cyBhcHByb2FjaCBmb3IKICAgIG5vbi1NVkNDLWNvbXBsaWFudCBzbmFwc2hvdHMsIGJ1dCBh biBhc3luY2hyb25vdXMgc2NhbiBpcyB3b3JrYWJsZQogICAgZm9yIGEgcXVlcnkgdXNpbmcgYW4g TVZDQyBzbmFwc2hvdC4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgSW4gYW4gPGZ1bmN0aW9u PmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gaW5kZXggc2NhbiwgdGhlIGFjY2VzcyBtZXRob2QgZG9l cyBub3QKLSAgIGtlZXAgYW4gaW5kZXggcGluIG9uIGFueSBvZiB0aGUgcmV0dXJuZWQgdHVwbGVz LiAgVGhlcmVmb3JlCi0gICBpdCBpcyBvbmx5IHNhZmUgdG8gdXNlIHN1Y2ggc2NhbnMgd2l0aCBN VkNDLWNvbXBsaWFudCBzbmFwc2hvdHMuCisgICBCZWNhdXNlIHRoZSB0YWJsZSBBTSByZWFkcyBt dWx0aXBsZSBpbmRleCBsZWFmIHBhZ2VzIGFoZWFkIHZpYQorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0 Y2g8L2Z1bmN0aW9uPiB0byBmYWNpbGl0YXRlIHRoaXMgcHJlZmV0Y2hpbmcsIGl0IGNhbm5vdAor ICAgcHJhY3RpY2FsbHkgaG9sZCBwaW5zIG9uIGFsbCB0aG9zZSBwYWdlcyBzaW11bHRhbmVvdXNs eS4gIFRoZXJlZm9yZSwKKyAgIEkvTyBwcmVmZXRjaGluZyB3aXRoCisgICA8ZnVuY3Rpb24+YW1n ZXRiYXRjaDwvZnVuY3Rpb24+IGlzIG9ubHkgcG9zc2libGUgd2hlbiBhbiBNVkNDLWNvbXBsaWFu dAorICAgc25hcHNob3QgaXMgaW4gdXNlLiAgSW4gcHJhY3RpY2UsIHRoZSBoZWFwIHRhYmxlIEFN IChhbmQgYW55IHRhYmxlIEFNCisgICB3aXRoIHNpbWlsYXIgY29uY3VycmVuY3kgcnVsZXMpIHVz dWFsbHkgZHJvcHMgcGlucyBlYWdlcmx5IGZvciBNVkNDCisgICBzbmFwc2hvdCBzY2FucywgYnV0 IHJldGFpbnMgcGlucyBmb3Igbm9uLU1WQ0Mgc25hcHNob3Qgc2NhbnMuICBJbmRleC1vbmx5Cisg ICBzY2FucyBtYXkgcmV0YWluIHBpbnMgaW4gc29tZSBjYXNlcywgd2hpbGUgcGxhaW4gaW5kZXgg c2NhbnMgdGhhdCB1c2UgYW4KKyAgIE1WQ0Mgc25hcHNob3QgYWx3YXlzIGRyb3AgdGhlaXIgcGlu cyBlYWdlcmx5LiAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdAorICAgaW1wbGVtZW50IDxmdW5j dGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gZG8gbm90IGNvbnRyb2wgd2hlbiBwaW5zIGFyZQor ICAgZHJvcHBlZDsgdGhhdCBkZWNpc2lvbiBpcyBkZWxlZ2F0ZWQgdG8gdGhlIHRhYmxlIEFNLgor ICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBTaW1pbGFybHksIGFuIDxmdW5jdGlvbj5hbWdldGJp dG1hcDwvZnVuY3Rpb24+IGluZGV4IHNjYW4gaXMgaW5oZXJlbnRseQorICAgYXN5bmNocm9ub3Vz OiBhbGwgbWF0Y2hpbmcgVElEcyBhcmUgY29sbGVjdGVkIGludG8gYSBiaXRtYXAgYmVmb3JlIGFu eSBoZWFwCisgICBhY2Nlc3MgYmVnaW5zLiAgU3VjaCBzY2FucyB0aGVyZWZvcmUgcmVxdWlyZSBh biBNVkNDLWNvbXBsaWFudCBzbmFwc2hvdCwKKyAgIGFuZCB0aGVyZSBpcyBubyBuZWVkIGZvciB0 aGUgYWNjZXNzIG1ldGhvZCB0byBob2xkIGluZGV4IHBhZ2UgcGlucy4KKyAgPC9wYXJhPgorCisg IDxwYXJhPgorICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdCB1c2UgPGZ1bmN0aW9uPmFtZ2V0 dHVwbGU8L2Z1bmN0aW9uPiBtdXN0IG1hbmFnZQorICAgcGluIGxpZmV0aW1lIHRoZW1zZWx2ZXMs IHNpbmNlIHRoZXJlIGlzIG5vIHRhYmxlIEFNIGludGVybWVkaWFyeSAodW5saWtlCisgICB3aXRo IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4pLiAgVGhlIGluZGV4IEFNIG11c3QgaG9s ZCBhIHBpbiBvbiB0aGUKKyAgIGN1cnJlbnQgaW5kZXggcGFnZSB1bnRpbCB0aGUgc2NhbiBtb3Zl cyB0byBhIGRpZmZlcmVudCBwYWdlIG9yIGVuZHMuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KZGlm ZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwgYi9kb2Mvc3JjL3Nn bWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21sCmluZGV4IDc3YzVhNzYzZC4uNTViNzIyMmU5IDEwMDY0 NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21sCisrKyBiL2RvYy9zcmMv c2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwKQEAgLTExNTIsMTIgKzExNTIsMTMgQEAgV0lUSCAo IE1PRFVMVVMgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51bWVyaWNfbGl0ZXJhbDwv cmVwbGFjZWFibGU+LCBSRU0KICAgICAgPC9wYXJhPgogCiAgICAgIDxwYXJhPgotICAgICAgVGhl IGFjY2VzcyBtZXRob2QgbXVzdCBzdXBwb3J0IDxsaXRlcmFsPmFtZ2V0dHVwbGU8L2xpdGVyYWw+ IChzZWUgPHhyZWYKLSAgICAgIGxpbmtlbmQ9ImluZGV4YW0iLz4pOyBhdCBwcmVzZW50IHRoaXMg bWVhbnMgPGFjcm9ueW0+R0lOPC9hY3JvbnltPgotICAgICAgY2Fubm90IGJlIHVzZWQuICBBbHRo b3VnaCBpdCdzIGFsbG93ZWQsIHRoZXJlIGlzIGxpdHRsZSBwb2ludCBpbiB1c2luZwotICAgICAg Qi10cmVlIG9yIGhhc2ggaW5kZXhlcyB3aXRoIGFuIGV4Y2x1c2lvbiBjb25zdHJhaW50LCBiZWNh dXNlIHRoaXMKLSAgICAgIGRvZXMgbm90aGluZyB0aGF0IGFuIG9yZGluYXJ5IHVuaXF1ZSBjb25z dHJhaW50IGRvZXNuJ3QgZG8gYmV0dGVyLgotICAgICAgU28gaW4gcHJhY3RpY2UgdGhlIGFjY2Vz cyBtZXRob2Qgd2lsbCBhbHdheXMgYmUgPGFjcm9ueW0+R2lTVDwvYWNyb255bT4gb3IKKyAgICAg IFRoZSBhY2Nlc3MgbWV0aG9kIG11c3Qgc3VwcG9ydCBlaXRoZXIgPGxpdGVyYWw+YW1nZXR0dXBs ZTwvbGl0ZXJhbD4KKyAgICAgIG9yIDxsaXRlcmFsPmFtZ2V0YmF0Y2g8L2xpdGVyYWw+IChzZWUg PHhyZWYgbGlua2VuZD0iaW5kZXhhbSIvPik7IGF0CisgICAgICBwcmVzZW50IHRoaXMgbWVhbnMg PGFjcm9ueW0+R0lOPC9hY3JvbnltPiBjYW5ub3QgYmUgdXNlZC4gIEFsdGhvdWdoCisgICAgICBp dCdzIGFsbG93ZWQsIHRoZXJlIGlzIGxpdHRsZSBwb2ludCBpbiB1c2luZyBCLXRyZWUgb3IgaGFz aCBpbmRleGVzCisgICAgICB3aXRoIGFuIGV4Y2x1c2lvbiBjb25zdHJhaW50LCBiZWNhdXNlIHRo aXMgZG9lcyBub3RoaW5nIHRoYXQgYW4KKyAgICAgIG9yZGluYXJ5IHVuaXF1ZSBjb25zdHJhaW50 IGRvZXNuJ3QgZG8gYmV0dGVyLiAgU28gaW4gcHJhY3RpY2UgdGhlCisgICAgICBhY2Nlc3MgbWV0 aG9kIHdpbGwgYWx3YXlzIGJlIDxhY3JvbnltPkdpU1Q8L2Fjcm9ueW0+IG9yCiAgICAgICA8YWNy b255bT5TUC1HaVNUPC9hY3JvbnltPi4KICAgICAgPC9wYXJhPgogCmRpZmYgLS1naXQgYS9kb2Mv c3JjL3NnbWwvdGFibGVhbS5zZ21sIGIvZG9jL3NyYy9zZ21sL3RhYmxlYW0uc2dtbAppbmRleCA5 Y2NmNWI3MzkuLjhlNzBhNjE5NiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3RhYmxlYW0uc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvdGFibGVhbS5zZ21sCkBAIC0xMjksNiArMTI5LDE0IEBAIG15 X3RhYmxlYW1faGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogICBvcHRpb25hbCksIHRoZSBibG9j ayBudW1iZXIgbmVlZHMgdG8gcHJvdmlkZSBsb2NhbGl0eS4KICA8L3BhcmE+CiAKKyA8cGFyYT4K KyAgVGFibGUgYWNjZXNzIG1ldGhvZHMgY2FuIHN1cHBvcnQgb3JkZXJlZCBpbmRleCBzY2FucyB1 c2luZyB0aGUKKyAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UuIFNl ZSBhbHNvCisgIDx4cmVmIGxpbmtlbmQ9ImluZGV4LXNjYW5uaW5nLWJhdGNoZXMiLz4gZm9yIGRl dGFpbHMgb24gaW50ZXJmYWNpbmcgd2l0aAorICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rp b24+IGluZGV4IGFjY2VzcyBtZXRob2RzLCBhbmQgbWFuYWdpbmcgdGhlCisgIHNjYW4ncyBwb3Np dGlvbi4KKyA8L3BhcmE+CisKICA8cGFyYT4KICAgRm9yIGNyYXNoIHNhZmV0eSwgYW4gQU0gY2Fu IHVzZSBwb3N0Z3JlcycgPGxpbmsKICAgbGlua2VuZD0id2FsIj48YWNyb255bT5XQUw8L2Fjcm9u eW0+PC9saW5rPiwgb3IgYSBjdXN0b20gaW1wbGVtZW50YXRpb24uCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvc3lzdmlld3Mub3V0CmluZGV4IDNkZDYzZmQ4OC4uYjU2Mjg3MzZiIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dAorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dApAQCAtMTU5LDYgKzE1OSw3IEBAIHNlbGVjdCBu YW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsK ICBlbmFibGVfaW5jcmVtZW50YWxfc29ydCAgICAgICAgfCBvbgogIGVuYWJsZV9pbmRleG9ubHlz Y2FuICAgICAgICAgICB8IG9uCiAgZW5hYmxlX2luZGV4c2NhbiAgICAgICAgICAgICAgIHwgb24K KyBlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoICAgICAgfCBvbgogIGVuYWJsZV9tYXRlcmlhbCAg ICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX21lbW9pemUgICAgICAgICAgICAgICAgIHwgb24K ICBlbmFibGVfbWVyZ2Vqb2luICAgICAgICAgICAgICAgfCBvbgpAQCAtMTczLDcgKzE3NCw3IEBA IHNlbGVjdCBuYW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdl bmFibGUlJzsKICBlbmFibGVfc2Vxc2NhbiAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9z b3J0ICAgICAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX3RpZHNjYW4gICAgICAgICAgICAg ICAgIHwgb24KLSgyNSByb3dzKQorKDI2IHJvd3MpCiAKIC0tIFRoZXJlIGFyZSBhbHdheXMgd2Fp dCBldmVudCBkZXNjcmlwdGlvbnMgZm9yIHZhcmlvdXMgdHlwZXMuICBJbmplY3Rpb25Qb2ludAog LS0gbWF5IGJlIHByZXNlbnQgb3IgYWJzZW50LCBkZXBlbmRpbmcgb24gaGlzdG9yeSBzaW5jZSBs YXN0IHBvc3RtYXN0ZXIgc3RhcnQuCi0tIAoyLjUxLjAKCg== --000000000000a2454a064b95d983 Content-Type: application/x-patch; name="v11-0004-Don-t-allocate-_bt_search-stack.patch" Content-Disposition: attachment; filename="v11-0004-Don-t-allocate-_bt_search-stack.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm0x5ogs9 RnJvbSAzNGFkNjJlZjhmNDM1NTBjY2MyYzBiMmUyYzQxZjMwMjA1ZDM3NzE2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFRo dSwgMTIgRmViIDIwMjYgMTQ6MDY6NDcgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMSAwNC8xMl0g RG9uJ3QgYWxsb2NhdGUgX2J0X3NlYXJjaCBzdGFjawoKLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3Mv bmJ0cmVlLmggICAgICAgICAgIHwgIDMgKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25i dGluc2VydC5jIHwgMTkgKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0cGFnZS5jICAgfCAgMiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2gu YyB8IDM2ICsrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9uYnR1dGlscy5jICB8IDE3IC0tLS0tLS0tLS0tLS0KIGNvbnRyaWIvYW1jaGVjay92ZXJp ZnlfbmJ0cmVlLmMgICAgICAgfCAgNCArLS0KIDYgZmlsZXMgY2hhbmdlZCwgNDAgaW5zZXJ0aW9u cygrKSwgNDEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL25i dHJlZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCmluZGV4IDRkZjQ4MDUwZi4uNTNj ZGY4YTZhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKKysrIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCkBAIC0xMTc3LDcgKzExNzcsNyBAQCBleHRlcm4gaW50 CV9idF9iaW5zcmNoX2FycmF5X3NrZXkoRm1nckluZm8gKm9yZGVycHJvYywKICAqIHByb3RvdHlw ZXMgZm9yIGZ1bmN0aW9ucyBpbiBuYnRzZWFyY2guYwogICovCiBleHRlcm4gQlRTdGFjayBfYnRf c2VhcmNoKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwK LQkJCQkJCSAgQnVmZmVyICpidWZQLCBpbnQgYWNjZXNzKTsKKwkJCQkJCSAgQnVmZmVyICpidWZQ LCBpbnQgYWNjZXNzLCBib29sIHJldHVybnN0YWNrKTsKIGV4dGVybiBPZmZzZXROdW1iZXIgX2J0 X2JpbnNyY2hfaW5zZXJ0KFJlbGF0aW9uIHJlbCwgQlRJbnNlcnRTdGF0ZSBpbnNlcnRzdGF0ZSk7 CiBleHRlcm4gaW50MzIgX2J0X2NvbXBhcmUoUmVsYXRpb24gcmVsLCBCVFNjYW5JbnNlcnQga2V5 LCBQYWdlIHBhZ2UsIE9mZnNldE51bWJlciBvZmZudW0pOwogZXh0ZXJuIEluZGV4U2NhbkJhdGNo IF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKQEAgLTEx ODksNyArMTE4OSw2IEBAIGV4dGVybiBCdWZmZXIgX2J0X2dldF9lbmRwb2ludChSZWxhdGlvbiBy ZWwsIHVpbnQzMiBsZXZlbCwgYm9vbCByaWdodG1vc3QpOwogICogcHJvdG90eXBlcyBmb3IgZnVu Y3Rpb25zIGluIG5idHV0aWxzLmMKICAqLwogZXh0ZXJuIEJUU2Nhbkluc2VydCBfYnRfbWtzY2Fu a2V5KFJlbGF0aW9uIHJlbCwgSW5kZXhUdXBsZSBpdHVwKTsKLWV4dGVybiB2b2lkIF9idF9mcmVl c3RhY2soQlRTdGFjayBzdGFjayk7CiBleHRlcm4gQlRDeWNsZUlkIF9idF92YWN1dW1fY3ljbGVp ZChSZWxhdGlvbiByZWwpOwogZXh0ZXJuIEJUQ3ljbGVJZCBfYnRfc3RhcnRfdmFjdXVtKFJlbGF0 aW9uIHJlbCk7CiBleHRlcm4gdm9pZCBfYnRfZW5kX3ZhY3V1bShSZWxhdGlvbiByZWwpOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMKaW5kZXggY2M3OTg5NGQyLi5hOWZjMDdkYjQg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQuYwpAQCAtNjEsNiArNjEsNyBAQCBz dGF0aWMgQnVmZmVyIF9idF9zcGxpdChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJU U2Nhbkluc2VydCBpdHVwX2tleSwKIAkJCQkJCUluZGV4VHVwbGUgbnBvc3RpbmcsIHVpbnQxNiBw b3N0aW5nb2ZmKTsKIHN0YXRpYyB2b2lkIF9idF9pbnNlcnRfcGFyZW50KFJlbGF0aW9uIHJlbCwg UmVsYXRpb24gaGVhcHJlbCwgQnVmZmVyIGJ1ZiwKIAkJCQkJCQkgIEJ1ZmZlciByYnVmLCBCVFN0 YWNrIHN0YWNrLCBib29sIGlzcm9vdCwgYm9vbCBpc29ubHkpOworc3RhdGljIHZvaWQgX2J0X2Zy ZWVzdGFjayhCVFN0YWNrIHN0YWNrKTsKIHN0YXRpYyBCdWZmZXIgX2J0X25ld2xldmVsKFJlbGF0 aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQnVmZmVyIGxidWYsIEJ1ZmZlciByYnVmKTsKIHN0 YXRpYyBpbmxpbmUgYm9vbCBfYnRfcGdhZGR0dXAoUGFnZSBwYWdlLCBTaXplIGl0ZW1zaXplLCBj b25zdCBJbmRleFR1cGxlRGF0YSAqaXR1cCwKIAkJCQkJCQkJT2Zmc2V0TnVtYmVyIGl0dXBfb2Zm LCBib29sIG5ld2ZpcnN0ZGF0YWl0ZW0pOwpAQCAtMzgwLDcgKzM4MSw3IEBAIF9idF9zZWFyY2hf aW5zZXJ0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRJbnNlcnRTdGF0ZSBpbnNl cnRzdGF0ZSkKIAogCS8qIENhbm5vdCB1c2Ugb3B0aW1pemF0aW9uIC0tIGRlc2NlbmQgdHJlZSwg cmV0dXJuIHByb3BlciBkZXNjZW50IHN0YWNrICovCiAJcmV0dXJuIF9idF9zZWFyY2gocmVsLCBo ZWFwcmVsLCBpbnNlcnRzdGF0ZS0+aXR1cF9rZXksICZpbnNlcnRzdGF0ZS0+YnVmLAotCQkJCQkg IEJUX1dSSVRFKTsKKwkJCQkJICBCVF9XUklURSwgdHJ1ZSk7CiB9CiAKIC8qCkBAIC0yNDQyLDYg KzI0NDMsMjIgQEAgX2J0X2dldHN0YWNrYnVmKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJl bCwgQlRTdGFjayBzdGFjaywgQmxvY2tOdW1iZXIgY2hpbGQKIAl9CiB9CiAKKy8qCisgKiBfYnRf ZnJlZXN0YWNrKCkgLS0gZnJlZSBhIHJldHJhY2VtZW50IHN0YWNrIG1hZGUgYnkgX2J0X3NlYXJj aF9pbnNlcnQuCisgKi8KK3N0YXRpYyB2b2lkCitfYnRfZnJlZXN0YWNrKEJUU3RhY2sgc3RhY2sp Cit7CisJQlRTdGFjawkJb3N0YWNrOworCisJd2hpbGUgKHN0YWNrICE9IE5VTEwpCisJeworCQlv c3RhY2sgPSBzdGFjazsKKwkJc3RhY2sgPSBzdGFjay0+YnRzX3BhcmVudDsKKwkJcGZyZWUob3N0 YWNrKTsKKwl9Cit9CisKIC8qCiAgKglfYnRfbmV3bGV2ZWwoKSAtLSBDcmVhdGUgYSBuZXcgbGV2 ZWwgYWJvdmUgcm9vdCBwYWdlLgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0cGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMKaW5k ZXggMjg2Zjk1ZDNlLi42MTBlOTdhOTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0cGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5j CkBAIC0xOTc3LDcgKzE5NzcsNyBAQCBfYnRfcGFnZWRlbChSZWxhdGlvbiByZWwsIEJ1ZmZlciBs ZWFmYnVmLCBCVFZhY1N0YXRlICp2c3RhdGUpCiAJCQkJLyogU2V0IHVwIGEgQlRMZXNzU3RyYXRl Z3lOdW1iZXItbGlrZSBpbnNlcnRpb24gc2NhbiBrZXkgKi8KIAkJCQlpdHVwX2tleS0+bmV4dGtl eSA9IGZhbHNlOwogCQkJCWl0dXBfa2V5LT5iYWNrd2FyZCA9IHRydWU7Ci0JCQkJc3RhY2sgPSBf YnRfc2VhcmNoKHJlbCwgTlVMTCwgaXR1cF9rZXksICZzbGVhZmJ1ZiwgQlRfUkVBRCk7CisJCQkJ c3RhY2sgPSBfYnRfc2VhcmNoKHJlbCwgTlVMTCwgaXR1cF9rZXksICZzbGVhZmJ1ZiwgQlRfUkVB RCwgdHJ1ZSk7CiAJCQkJLyogd29uJ3QgbmVlZCBhIHNlY29uZCBsb2NrIG9yIHBpbiBvbiBsZWFm YnVmICovCiAJCQkJX2J0X3JlbGJ1ZihyZWwsIHNsZWFmYnVmKTsKIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0c2VhcmNoLmMKaW5kZXggNmZiZGJjYTRmLi40NDE3MjRjMDEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwpAQCAtNTAsMTAgKzUwLDEzIEBAIHN0YXRpYyBJbmRl eFNjYW5CYXRjaCBfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpciwKICAqIFRoZSBwYXNzZWQgc2NhbmtleSBpcyBhbiBpbnNlcnRpb24tdHlwZSBzY2Fua2V5 IChzZWUgbmJ0cmVlL1JFQURNRSksCiAgKiBidXQgaXQgY2FuIG9taXQgdGhlIHJpZ2h0bW9zdCBj b2x1bW4ocykgb2YgdGhlIGluZGV4LgogICoKLSAqIFJldHVybiB2YWx1ZSBpcyBhIHN0YWNrIG9m IHBhcmVudC1wYWdlIHBvaW50ZXJzIChpLmUuIHRoZXJlIGlzIG5vIGVudHJ5IGZvcgotICogdGhl IGxlYWYgbGV2ZWwvcGFnZSkuICAqYnVmUCBpcyBzZXQgdG8gdGhlIGFkZHJlc3Mgb2YgdGhlIGxl YWYtcGFnZSBidWZmZXIsCi0gKiB3aGljaCBpcyBsb2NrZWQgYW5kIHBpbm5lZC4gIE5vIGxvY2tz IGFyZSBoZWxkIG9uIHRoZSBwYXJlbnQgcGFnZXMsCi0gKiBob3dldmVyIQorICogSWYgcmV0dXJu c3RhY2sgaXMgdHJ1ZSwgcmV0dXJuIHZhbHVlIGlzIGEgc3RhY2sgb2YgcGFyZW50LXBhZ2UgcG9p bnRlcnMKKyAqIChpLmUuIHRoZXJlIGlzIG5vIGVudHJ5IGZvciB0aGUgbGVhZiBsZXZlbC9wYWdl KS4gIElmIHJldHVybnN0YWNrIGlzIGZhbHNlLAorICogd2UganVzdCByZXR1cm4gTlVMTC4gIFRo aXMgc2NoZW1lIGFsbG93cyBjYWxsZXJzIHRoYXQgZG9uJ3QgbmVlZCBhIGRlc2NlbnQKKyAqIHN0 YWNrIHRvIGF2b2lkIHBhbGxvYyBjaHVybi4KKyAqCisgKiBXaGVuIHdlIHJldHVybiAqYnVmUCBp cyBzZXQgdG8gdGhlIGFkZHJlc3Mgb2YgdGhlIGxlYWYtcGFnZSBidWZmZXIsIHdoaWNoCisgKiBp cyBsb2NrZWQgYW5kIHBpbm5lZC4gIE5vIGxvY2tzIGFyZSBoZWxkIG9uIHRoZSBwYXJlbnQgcGFn ZXMsIGhvd2V2ZXIhCiAgKgogICogVGhlIHJldHVybmVkIGJ1ZmZlciBpcyBsb2NrZWQgYWNjb3Jk aW5nIHRvIGFjY2VzcyBwYXJhbWV0ZXIuICBBZGRpdGlvbmFsbHksCiAgKiBhY2Nlc3MgPSBCVF9X UklURSB3aWxsIGFsbG93IGFuIGVtcHR5IHJvb3QgcGFnZSB0byBiZSBjcmVhdGVkIGFuZCByZXR1 cm5lZC4KQEAgLTY2LDcgKzY5LDcgQEAgc3RhdGljIEluZGV4U2NhbkJhdGNoIF9idF9lbmRwb2lu dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAogICovCiBCVFN0YWNrCiBf YnRfc2VhcmNoKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5zZXJ0IGtl eSwgQnVmZmVyICpidWZQLAotCQkgICBpbnQgYWNjZXNzKQorCQkgICBpbnQgYWNjZXNzLCBib29s IHJldHVybnN0YWNrKQogewogCUJUU3RhY2sJCXN0YWNrX2luID0gTlVMTDsKIAlpbnQJCQlwYWdl X2FjY2VzcyA9IEJUX1JFQUQ7CkBAIC0xMzAsMTAgKzEzMywxMyBAQCBfYnRfc2VhcmNoKFJlbGF0 aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwgQnVmZmVyICpidWZQ LAogCQkgKiBwYWdlIG9uZSBsZXZlbCBkb3duLCBpdCB1c3VhbGx5IGVuZHMgdXAgaW5zZXJ0aW5n IGEgbmV3IHBpdm90CiAJCSAqIHR1cGxlL2Rvd25saW5rIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBs b2NhdGlvbiByZWNvcmRlZCBoZXJlLgogCQkgKi8KLQkJbmV3X3N0YWNrID0gKEJUU3RhY2spIHBh bGxvY19vYmplY3QoQlRTdGFja0RhdGEpOwotCQluZXdfc3RhY2stPmJ0c19ibGtubyA9IEJ1ZmZl ckdldEJsb2NrTnVtYmVyKCpidWZQKTsKLQkJbmV3X3N0YWNrLT5idHNfb2Zmc2V0ID0gb2ZmbnVt OwotCQluZXdfc3RhY2stPmJ0c19wYXJlbnQgPSBzdGFja19pbjsKKwkJaWYgKHJldHVybnN0YWNr KQorCQl7CisJCQluZXdfc3RhY2sgPSAoQlRTdGFjaykgcGFsbG9jX29iamVjdChCVFN0YWNrRGF0 YSk7CisJCQluZXdfc3RhY2stPmJ0c19ibGtubyA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKCpidWZQ KTsKKwkJCW5ld19zdGFjay0+YnRzX29mZnNldCA9IG9mZm51bTsKKwkJCW5ld19zdGFjay0+YnRz X3BhcmVudCA9IHN0YWNrX2luOworCQl9CiAKIAkJLyoKIAkJICogUGFnZSBsZXZlbCAxIGlzIGxv d2VzdCBub24tbGVhZiBwYWdlIGxldmVsIHByaW9yIHRvIGxlYXZlcy4gIFNvLCBpZgpAQCAtMTQ3 LDcgKzE1Myw4IEBAIF9idF9zZWFyY2goUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBC VFNjYW5JbnNlcnQga2V5LCBCdWZmZXIgKmJ1ZlAsCiAJCSpidWZQID0gX2J0X3JlbGFuZGdldGJ1 ZihyZWwsICpidWZQLCBjaGlsZCwgcGFnZV9hY2Nlc3MpOwogCiAJCS8qIG9rYXksIGFsbCBzZXQg dG8gbW92ZSBkb3duIGEgbGV2ZWwgKi8KLQkJc3RhY2tfaW4gPSBuZXdfc3RhY2s7CisJCWlmIChy ZXR1cm5zdGFjaykKKwkJCXN0YWNrX2luID0gbmV3X3N0YWNrOwogCX0KIAogCS8qCkBAIC04NDYs NyArODUzLDYgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAlCVFNjYW5PcGFx dWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JQlRTdGFjawkJc3RhY2s7CiAJ T2Zmc2V0TnVtYmVyIG9mZm51bTsKIAlCVFNjYW5JbnNlcnREYXRhIGluc2tleTsKIAlTY2FuS2V5 CQlzdGFydEtleXNbSU5ERVhfTUFYX0tFWVNdOwpAQCAtMTQ3NSwxMCArMTQ4MSw3IEBAIF9idF9m aXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqIHBvc2l0aW9u IG91cnNlbHZlcyBvbiB0aGUgdGFyZ2V0IGxlYWYgcGFnZS4KIAkgKi8KIAlBc3NlcnQoU2NhbkRp cmVjdGlvbklzQmFja3dhcmQoZGlyKSA9PSBpbnNrZXkuYmFja3dhcmQpOwotCXN0YWNrID0gX2J0 X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZmaXJzdGJhdGNoLT5idWYsIEJUX1JFQUQpOwot Ci0JLyogZG9uJ3QgbmVlZCB0byBrZWVwIHRoZSBzdGFjayBhcm91bmQuLi4gKi8KLQlfYnRfZnJl ZXN0YWNrKHN0YWNrKTsKKwlfYnRfc2VhcmNoKHJlbCwgTlVMTCwgJmluc2tleSwgJmZpcnN0YmF0 Y2gtPmJ1ZiwgQlRfUkVBRCwgZmFsc2UpOwogCiAJaWYgKHVubGlrZWx5KCFCdWZmZXJJc1ZhbGlk KGZpcnN0YmF0Y2gtPmJ1ZikpKQogCXsKQEAgLTE0OTYsOCArMTQ5OSw3IEBAIF9idF9maXJzdChJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQlpZiAoSXNvbGF0aW9uSXNT ZXJpYWxpemFibGUoKSkKIAkJewogCQkJUHJlZGljYXRlTG9ja1JlbGF0aW9uKHJlbCwgc2Nhbi0+ eHNfc25hcHNob3QpOwotCQkJc3RhY2sgPSBfYnRfc2VhcmNoKHJlbCwgTlVMTCwgJmluc2tleSwg JmZpcnN0YmF0Y2gtPmJ1ZiwgQlRfUkVBRCk7Ci0JCQlfYnRfZnJlZXN0YWNrKHN0YWNrKTsKKwkJ CV9idF9zZWFyY2gocmVsLCBOVUxMLCAmaW5za2V5LCAmZmlyc3RiYXRjaC0+YnVmLCBCVF9SRUFE LCBmYWxzZSk7CiAJCX0KIAogCQlpZiAoIUJ1ZmZlcklzVmFsaWQoZmlyc3RiYXRjaC0+YnVmKSkK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYwppbmRleCBhMWU2ZGQzYTguLjc2YjM4MzAx YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYwpAQCAtMTQwLDIzICsxNDAsNiBA QCBfYnRfbWtzY2Fua2V5KFJlbGF0aW9uIHJlbCwgSW5kZXhUdXBsZSBpdHVwKQogCXJldHVybiBr ZXk7CiB9CiAKLS8qCi0gKiBmcmVlIGEgcmV0cmFjZW1lbnQgc3RhY2sgbWFkZSBieSBfYnRfc2Vh cmNoLgotICovCi12b2lkCi1fYnRfZnJlZXN0YWNrKEJUU3RhY2sgc3RhY2spCi17Ci0JQlRTdGFj awkJb3N0YWNrOwotCi0Jd2hpbGUgKHN0YWNrICE9IE5VTEwpCi0JewotCQlvc3RhY2sgPSBzdGFj azsKLQkJc3RhY2sgPSBzdGFjay0+YnRzX3BhcmVudDsKLQkJcGZyZWUob3N0YWNrKTsKLQl9Ci19 Ci0KLQogLyoKICAqIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgbWFuYWdlIGEgc2hhcmVkLW1lbW9y eSBhcmVhIGluIHdoaWNoIHdlIHRyYWNrCiAgKiBhc3NpZ25tZW50IG9mICJ2YWN1dW0gY3ljbGUg SURzIiB0byBjdXJyZW50bHktYWN0aXZlIGJ0cmVlIHZhY3V1bWluZwpkaWZmIC0tZ2l0IGEvY29u dHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYyBiL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0 cmVlLmMKaW5kZXggMGI3NGZlM2E5Li4wNjU1MzYwOWIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYW1j aGVjay92ZXJpZnlfbmJ0cmVlLmMKKysrIGIvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUu YwpAQCAtMzAwOSw3ICszMDA5LDYgQEAgc3RhdGljIGJvb2wKIGJ0X3Jvb3RkZXNjZW5kKEJ0cmVl Q2hlY2tTdGF0ZSAqc3RhdGUsIEluZGV4VHVwbGUgaXR1cCkKIHsKIAlCVFNjYW5JbnNlcnQga2V5 OwotCUJUU3RhY2sJCXN0YWNrOwogCUJ1ZmZlcgkJbGJ1ZjsKIAlib29sCQlleGlzdHM7CiAKQEAg LTMwMjYsNyArMzAyNSw3IEBAIGJ0X3Jvb3RkZXNjZW5kKEJ0cmVlQ2hlY2tTdGF0ZSAqc3RhdGUs IEluZGV4VHVwbGUgaXR1cCkKIAkgKi8KIAlBc3NlcnQoc3RhdGUtPnJlYWRvbmx5ICYmIHN0YXRl LT5yb290ZGVzY2VuZCk7CiAJZXhpc3RzID0gZmFsc2U7Ci0Jc3RhY2sgPSBfYnRfc2VhcmNoKHN0 YXRlLT5yZWwsIE5VTEwsIGtleSwgJmxidWYsIEJUX1JFQUQpOworCV9idF9zZWFyY2goc3RhdGUt PnJlbCwgTlVMTCwga2V5LCAmbGJ1ZiwgQlRfUkVBRCwgZmFsc2UpOwogCiAJaWYgKEJ1ZmZlcklz VmFsaWQobGJ1ZikpCiAJewpAQCAtMzA1Myw3ICszMDUyLDYgQEAgYnRfcm9vdGRlc2NlbmQoQnRy ZWVDaGVja1N0YXRlICpzdGF0ZSwgSW5kZXhUdXBsZSBpdHVwKQogCQlfYnRfcmVsYnVmKHN0YXRl LT5yZWwsIGxidWYpOwogCX0KIAotCV9idF9mcmVlc3RhY2soc3RhY2spOwogCXBmcmVlKGtleSk7 CiAKIAlyZXR1cm4gZXhpc3RzOwotLSAKMi41MS4wCgo= --000000000000a2454a064b95d983 Content-Type: application/x-patch; name="v11-0005-Limit-get_actual_variable_range-to-scan-one-inde.patch" Content-Disposition: attachment; filename="v11-0005-Limit-get_actual_variable_range-to-scan-one-inde.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm0x5ogq8 RnJvbSA4ODQyODZkNTk3MGRkNTAxYmRmYWUwNTEwNThhN2YwYzI5MTEyNWQ4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IE1v biwgMiBGZWIgMjAyNiAyMzozNDozNiAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjExIDA1LzEyXSBM aW1pdCBnZXRfYWN0dWFsX3ZhcmlhYmxlX3JhbmdlIHRvIHNjYW4gb25lIGluZGV4CiBsZWFmIHBh Z2UuCgpSZXBsYWNlIFZJU0lURURfUEFHRVNfTElNSVQgd2l0aCBhIG1lY2hhbmlzbSB0aGF0IGxp bWl0cwpnZXRfYWN0dWFsX3ZhcmlhYmxlX3JhbmdlIHRvIHNjYW5uaW5nIG9ubHkgdGhlIGV4dHJl bWFsIGluZGV4IGxlYWYgcGFnZSwKcmF0aGVyIHRoYW4gY291bnRpbmcgaGVhcCBwYWdlIHZpc2l0 cy4KCmdldF9hY3R1YWxfdmFyaWFibGVfcmFuZ2Ugc2NhbnMgYW4gaW5kZXggdG8gZmluZCBhY3R1 YWwgbWluL21heCB2YWx1ZXMKZm9yIHBsYW5uZXIgc2VsZWN0aXZpdHkgZXN0aW1hdGlvbi4gIFNp bmNlIHRoaXMgaGFwcGVucyBkdXJpbmcgcGxhbm5pbmcsCndlIGNhbid0IGFmZm9yZCB0byBzcGVu ZCB0b28gbXVjaCB0aW1lIG9uIGl0LiAgQ29tbWl0IDljNmFkNWVhYTkgYWRkZWQKVklTSVRFRF9Q QUdFU19MSU1JVCAoYSBsaW1pdCBvZiAxMDAgaGVhcCBwYWdlIHZpc2l0cykgdG8gYm91bmQgdGhl CmFtb3VudCBvZiB3b3JrIHBlcmZvcm1lZCwgZ2l2aW5nIHVwIGFuZCBmYWxsaW5nIGJhY2sgdG8g dGhlIHBnX3N0YXRpc3RpYwpleHRyZW1hbCB2YWx1ZSB3aGVuIHRoZSBsaW1pdCBpcyBleGNlZWRl ZC4gIEJ1dCB0aGF0IGlzbid0IGVmZmVjdGl2ZSBpbgpjYXNlcyB3aXRoIG1vcmUgZXh0cmVtZSBj b25jZW50cmF0aW9ucyBvZiBkZWFkIGluZGV4IHR1cGxlcy4KClJlY2VudCBiZW5jaG1hcmsgcmVz dWx0cyBmcm9tIE1hcmsgQ2FsbGFnaGFuIHNob3cgdGhhdApWSVNJVEVEX1BBR0VTX0xJTUlUIGlz bid0IGVmZmVjdGl2ZSBvbmNlIHRoZSBkZWFkIGluZGV4IHR1cGxlIHByb2JsZW0KZ2V0cyBvdXQg b2YgaGFuZCAod2hpY2ggaXMgZXhwZWN0ZWQgd2l0aCBxdWV1ZS1saWtlIHRhYmxlcyB0aGF0CmNv bnRpbnVhbGx5IGRlbGV0ZSBvbGRlciByZWNvcmRzIGFuZCBpbnNlcnQgbmV3ZXIgb25lcykuICBU aGUgcm9vdCBjYXVzZQppcyB0aGF0IFZJU0lURURfUEFHRVNfTElNSVQgY291bnRzIGhlYXAgcGFn ZSB2aXNpdHMsIGJ1dCB3aGVuIG1hbnkgaW5kZXgKdHVwbGVzIGFyZSBtYXJrZWQgTFBfREVBRCwg X2J0X3JlYWRwYWdlIHRyYXZlcnNlcyBhcmJpdHJhcmlseSBtYW55IGluZGV4CnBhZ2VzIHdpdGhv dXQgcmV0dXJuaW5nIGFueSB0dXBsZXMgLS0gdGhlIGhlYXAgcGFnZSBjb3VudGVyIGluCnNlbGZ1 bmNzLmMgbmV2ZXIgZ2V0cyBhIGNoYW5jZSB0byBpbmNyZW1lbnQsIHNvIFZJU0lURURfUEFHRVNf TElNSVQKbmV2ZXIgdHJpZ2dlcnMuICBGdXJ0aGVybW9yZSwgdGhlIGRlc2lnbiBvZiBzZXR0aW5n IExQX0RFQUQgYml0cyB0byBoZWxwCmZ1dHVyZSBjYWxscyBpcyB1bHRpbWF0ZWx5IGNvdW50ZXJw cm9kdWN0aXZlOiBlYWNoIExQX0RFQUQgdHVwbGUgaXMgb25lCmZld2VyIHRoYXQgY291bnRzIGFn YWluc3QgVklTSVRFRF9QQUdFU19MSU1JVCwgc28gdGhlIG1vcmUgTFBfREVBRCBiaXRzCndlIHNl dCwgdGhlIGxlc3MgZWZmZWN0aXZlIHRoZSBsaW1pdCBiZWNvbWVzIGF0IGJhaWxpbmcgb3V0IGVh cmx5LgoKRml4IHRoaXMgYnkgYWRkaW5nIGEgbmV3IHhzX3JlYWRfZXh0cmVtYWxfb25seSBmbGFn IHRvIEluZGV4U2NhbkRlc2MuCldoZW4gc2V0LCB0aGUgc2NhbiBzdG9wcyBhZnRlciB0aGUgZmly c3QgbGVhZiBwYWdlOiBfYnRfcmVhZGZpcnN0cGFnZQphbmQgX2J0X3JlYWRuZXh0cGFnZSBpbiBu YnRyZWUgdHJlYXQgaXQgbGlrZSBlbmQtb2Ytc2NhbiwgYW5kCmhlYXBhbV9iYXRjaF9nZXRuZXh0 IHJldHVybnMgTlVMTCBhZnRlciB0aGUgZmlyc3QgYmF0Y2guICBzZWxmdW5jcy5jCnNldHMgdGhp cyBmbGFnIGJlZm9yZSBzdGFydGluZyB0aGUgc2Nhbi4KClRoaXMgcHJvdmlkZXMgYSBoYXJkIGd1 YXJhbnRlZSBvbiB0aGUgbWF4aW11bSB3b3JrIHBlciBjYWxsLiAgVW5saWtlClZJU0lURURfUEFH RVNfTElNSVQsIHRoaXMgbGltaXQgY2Fubm90IGJlIGVyb2RlZCBieSBMUF9ERUFEIGJpdHMuCgpU aGlzIGFwcHJvYWNoIGlzIGFsc28gY29tcGF0aWJsZSB3aXRoIGluZGV4IHByZWZldGNoaW5nIGNv bW1pdCdzIG5ldwp0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoKSBpbnRlcmZhY2UsIHdoaWNoIGhp ZGVzIGhlYXAgYWNjZXNzIGRldGFpbHMKZnJvbSBjYWxsZXJzIGxpa2Ugc2VsZnVuY3MuYywgbWFr aW5nIFZJU0lURURfUEFHRVNfTElNSVQgaW1wcmFjdGljYWwgdG8KaW1wbGVtZW50IHdpdGhvdXQg cHVzaGluZyBhZC1ob2MgbG9naWMgaW50byB0aGUgdGFibGUgQU0gbGF5ZXIuCgpOb3RlOiBUaGlz IGlzIHN0aWxsIGEgV0lQLiAgVGhlcmUgYXJlIHBlcmhhcHMgc3RpbGwgc29tZSBjYXNlcyB0aGF0 CndlJ3JlIG5vdCBleGFjdGx5IGhhbmRsaW5nIHBlcmZlY3RseSwgd2hlcmUgKGZvciBleGFtcGxl KSB0aGUgZmlyc3QKYmF0Y2ggdGhhdCB0aGUgc2NhbiByZXR1cm5zIGhhcHBlbnMgdG8gbm90IGNv bnRhaW4gYW55IG1hdGNoZXMgZHVlIHRvCl9idF9maXJzdCBsYW5kaW5nIHJpZ2h0IG9uIHRoZSBl ZGdlIG9mIHZhbHVlcyBiZXR3ZWVuIHR3byBhZGpvaW5pbmcKcGFnZXMgKG5vdGUgdGhhdCB3ZSB1 c2UgYW4gSVMgTk9UIE5VTEwgc2NhbiBrZXkgZnJvbSBzZWxmdW5jcy5jKS4gIEJ1dAp0aGlzIHNl ZW1zIHRvIGJlIHJvdWdobHkgdGhlIHJpZ2h0IGlkZWEuCi0tLQogc3JjL2luY2x1ZGUvYWNjZXNz L3JlbHNjYW4uaCAgICAgICAgICAgICB8ICA3ICsrKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbS5jICAgICAgICAgfCAgMyAtLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbV9oYW5kbGVyLmMgfCAxMSArKysrKysrKysrKwogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4 L2dlbmFtLmMgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2Vh cmNoLmMgICAgfCAxMCArKysrKysrLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3Mu YyAgICAgICAgIHwgMTYgKysrKysrKystLS0tLS0tLQogNiBmaWxlcyBjaGFuZ2VkLCAzNCBpbnNl cnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nl c3MvcmVsc2Nhbi5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAppbmRleCBjM2IwNDY0 ZjMuLmY1MDUwZWQ3ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAor KysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCkBAIC0zNzAsNiArMzcwLDEzIEBAIHR5 cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAKIAkvKiBwYXJhbGxlbCBpbmRleCBzY2Fu IGluZm9ybWF0aW9uLCBpbiBzaGFyZWQgbWVtb3J5ICovCiAJc3RydWN0IFBhcmFsbGVsSW5kZXhT Y2FuRGVzY0RhdGEgKnBhcmFsbGVsX3NjYW47CisKKwkvKgorCSAqIEZsYWcgdG8gcmVxdWVzdCBl YXJseSBhYm9ydCBkdXJpbmcgZ2V0X2FjdHVhbF92YXJpYWJsZV9yYW5nZSBzY2Fucy4KKwkgKiBT dWNoIHNjYW5zIG11c3QgZW5kIG9uIHRoZSByaWdodG1vc3QgKG9yIGxlZnRtb3N0KSBpbmRleCBw YWdlLCBubworCSAqIG1hdHRlciB3aGV0aGVyIHRoZXJlIGFyZSBtb3JlIG1hdGNoZXMgaW4gcHJl dmlvdXMgKG9yIGxhdGVyKSBwYWdlcy4KKwkgKi8KKwlib29sCQl4c19yZWFkX2V4dHJlbWFsX29u bHk7CiB9IEluZGV4U2NhbkRlc2NEYXRhOwogCiAvKiBHZW5lcmljIHN0cnVjdHVyZSBmb3IgcGFy YWxsZWwgc2NhbnMgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBh bS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKaW5kZXggOThkNTNjYWVlLi4w YmIyM2E3MmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCkBAIC0xODgzLDkgKzE4ODMsNiBA QCBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyKEl0ZW1Qb2ludGVyIHRpZCwgUmVsYXRpb24gcmVsYXRp b24sIEJ1ZmZlciBidWZmZXIsCiAJCSAqIElmIHdlIGNhbid0IHNlZSBpdCwgbWF5YmUgbm8gb25l IGVsc2UgY2FuIGVpdGhlci4gIEF0IGNhbGxlcgogCQkgKiByZXF1ZXN0LCBjaGVjayB3aGV0aGVy IGFsbCBjaGFpbiBtZW1iZXJzIGFyZSBkZWFkIHRvIGFsbAogCQkgKiB0cmFuc2FjdGlvbnMuCi0J CSAqCi0JCSAqIE5vdGU6IGlmIHlvdSBjaGFuZ2UgdGhlIGNyaXRlcmlvbiBoZXJlIGZvciB3aGF0 IGlzICJkZWFkIiwgZml4IHRoZQotCQkgKiBwbGFubmVyJ3MgZ2V0X2FjdHVhbF92YXJpYWJsZV9y YW5nZSgpIGZ1bmN0aW9uIHRvIG1hdGNoLgogCQkgKi8KIAkJaWYgKGFsbF9kZWFkICYmICphbGxf ZGVhZCkKIAkJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hh bmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXgg ZDE2NGI5OTIwLi5kYThkMTQ5MzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hh bmRsZXIuYwpAQCAtNDQyLDYgKzQ0MiwxNyBAQCBoZWFwYW1fYmF0Y2hfZ2V0bmV4dChJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCQkJUmVsZWFzZUJ1ZmZlcihi YXRjaC0+YnVmKTsKIAkJCWJhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOwogCQl9CisKKwkJLyoK KwkJICogeHNfcmVhZF9leHRyZW1hbF9vbmx5IHNjYW5zIGFyZSB1c2VkIGJ5IGdldF9hY3R1YWxf dmFyaWFibGVfcmFuZ2UKKwkJICogdG8gZmluZCBtaW4vbWF4IHZhbHVlcy4gIFRoZXkgb25seSBu ZWVkIHRoZSBleHRyZW1hbCAoZmlyc3Qgb3IKKwkJICogbGFzdCkgaW5kZXggcGFnZSwgc28gb25j ZSB3ZSBoYXZlIG9uZSBiYXRjaCwgd2UgZ2l2ZSB1cCBjb21wbGV0ZWx5LgorCQkgKi8KKwkJaWYg KHVubGlrZWx5KHNjYW4tPnhzX3JlYWRfZXh0cmVtYWxfb25seSkgJiYgcHJpb3JCYXRjaCkKKwkJ eworCQkJQXNzZXJ0KHNjYW4tPnhzX3dhbnRfaXR1cCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQog CX0KIAllbHNlCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFt LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwppbmRleCAxOGRjY2QzYzkuLmU4 NjQ0YzYwOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKQEAgLTEyNSw2ICsxMjUsNyBAQCBS ZWxhdGlvbkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGlu dCBub3JkZXJieXMpCiAJc2Nhbi0+eHNfaXR1cGRlc2MgPSBOVUxMOwogCXNjYW4tPnhzX2hpdHVw ID0gTlVMTDsKIAlzY2FuLT54c19oaXR1cGRlc2MgPSBOVUxMOworCXNjYW4tPnhzX3JlYWRfZXh0 cmVtYWxfb25seSA9IGZhbHNlOwogCiAJcmV0dXJuIHNjYW47CiB9CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9uYnRzZWFyY2guYwppbmRleCA0NDE3MjRjMDEuLjQ2ZGIzNjNmNiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCkBAIC0xNjY3LDE0ICsxNjY3LDE4IEBAIF9idF9yZWFk Zmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggZmlyc3RiYXRjaCwK IAogCUFzc2VydChmaXJzdGJhdGNoLT5kaXIgPT0gZGlyKTsKIAotCWlmIChibGtubyA9PSBQX05P TkUgfHwKKwlpZiAoYmxrbm8gPT0gUF9OT05FIHx8IHNjYW4tPnhzX3JlYWRfZXh0cmVtYWxfb25s eSB8fAogCQkoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8KIAkJICFmaXJzdGJhdGNoLT5t b3JlUmlnaHQgOiAhZmlyc3RiYXRjaC0+bW9yZUxlZnQpKQogCXsKIAkJLyoKIAkJICogZmlyc3Ri YXRjaCBfYnRfcmVhZHBhZ2UgY2FsbCBlbmRlZCBzY2FuIGluIHRoaXMgZGlyZWN0aW9uICh0aG91 Z2gKLQkJICogaWYgc28tPm5lZWRQcmltU2NhbiB3YXMgc2V0IHRoZSBzY2FuIHdpbGwgY29udGlu dWUgaW4gX2J0X2ZpcnN0KQorCQkgKiBpZiBzby0+bmVlZFByaW1TY2FuIHdhcyBzZXQgdGhlIHNj YW4gd2lsbCBjb250aW51ZSBpbiBfYnRfZmlyc3QpLgorCQkgKgorCQkgKiBBbHNvIGN1dCBvdXIg bG9zc2VzIGR1cmluZyB4c19yZWFkX2V4dHJlbWFsX29ubHkgc2NhbnMsIHdoaWNoIGFyZQorCQkg KiBsaW1pdGVkIHRvIHNjYW5uaW5nIG9ubHkgdGhlIGV4dHJlbWFsIGxlYWYgcGFnZSBpbiB0aGUg aW5kZXguCiAJCSAqLworCQlBc3NlcnQoIXNjYW4tPnhzX3JlYWRfZXh0cmVtYWxfb25seSB8fCAh c28tPm5lZWRQcmltU2Nhbik7CiAJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGZp cnN0YmF0Y2gpOwogCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKIAkJcmV0dXJuIE5VTEw7CkBA IC0xNzkyLDcgKzE3OTYsNyBAQCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2Nhbiwg QmxvY2tOdW1iZXIgYmxrbm8sCiAJCW5ld2JhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOwogCiAJ CS8qIENvbnRpbnVlIHRoZSBzY2FuIGluIHRoaXMgZGlyZWN0aW9uPyAqLwotCQlpZiAoYmxrbm8g PT0gUF9OT05FIHx8CisJCWlmIChibGtubyA9PSBQX05PTkUgfHwgc2Nhbi0+eHNfcmVhZF9leHRy ZW1hbF9vbmx5IHx8CiAJCQkoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8KIAkJCSAhbmV3 YmF0Y2gtPm1vcmVSaWdodCA6ICFuZXdiYXRjaC0+bW9yZUxlZnQpKQogCQl7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9zZWxmdW5jcy5jCmluZGV4IDYxNmFjZmM5NS4uNmJhNDRmYTQ2IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv c2VsZnVuY3MuYwpAQCAtNzE2NywxNCArNzE2NywxMCBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxlX2Vu ZHBvaW50KFJlbGF0aW9uIGhlYXBSZWwsCiAJICoKIAkgKiBEZXNwaXRlIGFsbCB0aGlzIGNhcmUs IHRoZXJlIGFyZSBzaXR1YXRpb25zIHdoZXJlIHdlIG1pZ2h0IGZpbmQgbWFueQogCSAqIG5vbi12 aXNpYmxlIHR1cGxlcyBuZWFyIHRoZSBlbmQgb2YgdGhlIGluZGV4LiAgV2UgZG9uJ3Qgd2FudCB0 byBleHBlbmQKLQkgKiBhIGh1Z2UgYW1vdW50IG9mIHRpbWUgaGVyZSwgc28gd2UgZ2l2ZSB1cCBv bmNlIHdlJ3ZlIHJlYWQgdG9vIG1hbnkgaGVhcAotCSAqIHBhZ2VzLiAgV2hlbiB3ZSBmYWlsIGZv ciB0aGF0IHJlYXNvbiwgdGhlIGNhbGxlciB3aWxsIGVuZCB1cCB1c2luZwotCSAqIHdoYXRldmVy IGV4dHJlbWFsIHZhbHVlIGlzIHJlY29yZGVkIGluIHBnX3N0YXRpc3RpYy4KLQkgKgotCSAqIFhY WCBUaGlzIGNhbid0IHdvcmsgd2l0aCB0aGUgbmV3IHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBp bnRlcmZhY2UsCi0JICogd2hpY2ggc2ltcGx5IHdvbid0IHJldHVybiBhIHR1cGxlIHRoYXQgaXNu J3QgdmlzaWJsZSB0byBvdXIgc25hcHNob3QuCi0JICogdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90 IHdpbGwgbmVlZCBzb21lIGtpbmQgb2YgY2FsbGJhY2sgdGhhdCBwcm92aWRlcwotCSAqIGEgd2F5 IGZvciB0aGUgc2NhbiB0byBnaXZlIHVwIHdoZW4gdGhlIGNvc3RzIHN0YXJ0IHRvIGdldCBvdXQg b2YgaGFuZC4KKwkgKiBhIGh1Z2UgYW1vdW50IG9mIHRpbWUgaGVyZSwgc28gd2UgZ2l2ZSB1cCB0 aGUgZXh0cmVtYWwgaW5kZXggbGVhZiBwYWdlCisJICogaGFzIG5vIG1hdGNoaW5nIGl0ZW1zIChn ZW5lcmFsbHkgb25seSBzZWVuIHdoZW4gdGhlIHBhZ2UgaGFzIG1hbnkgaW5kZXgKKwkgKiB0dXBs ZXMgd2l0aCBzZXQgTFBfREVBRCBiaXRzKS4gIFdoZW4gd2UgZ2l2ZSB1cCB0aGUgY2FsbGVyIHdp bGwgZW5kIHVwCisJICogdXNpbmcgd2hhdGV2ZXIgZXh0cmVtYWwgdmFsdWUgaXMgcmVjb3JkZWQg aW4gcGdfc3RhdGlzdGljLgogCSAqLwogCUluaXROb25WYWN1dW1hYmxlU25hcHNob3QoU25hcHNo b3ROb25WYWN1dW1hYmxlLAogCQkJCQkJCSAgR2xvYmFsVmlzVGVzdEZvcihoZWFwUmVsKSk7CkBA IC03MTgzLDYgKzcxNzksMTAgQEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlv biBoZWFwUmVsLAogCQkJCQkJCQkgJlNuYXBzaG90Tm9uVmFjdXVtYWJsZSwgTlVMTCwKIAkJCQkJ CQkJIDEsIDApOwogCUFzc2VydChpbmRleF9zY2FuLT54c193YW50X2l0dXApOworCisJLyogU2V0 IHVwIG91ciBpbmRleC1vbmx5IHNjYW4gdG8gcmVhZCBhdCBtb3N0IG9uZSBpbmRleCBsZWFmIHBh Z2UgKi8KKwlpbmRleF9zY2FuLT54c19yZWFkX2V4dHJlbWFsX29ubHkgPSB0cnVlOworCiAJaW5k ZXhfcmVzY2FuKGluZGV4X3NjYW4sIHNjYW5rZXlzLCAxLCBOVUxMLCAwKTsKIAogCS8qIEZldGNo IGZpcnN0L25leHQgdHVwbGUgaW4gc3BlY2lmaWVkIGRpcmVjdGlvbiAqLwotLSAKMi41MS4wCgo= --000000000000a2454a064b95d983 Content-Type: application/x-patch; name="v11-0003-Add-interfaces-that-enable-index-prefetching.patch" Content-Disposition: attachment; filename="v11-0003-Add-interfaces-that-enable-index-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm0x5ogv10 RnJvbSBjMjhjYjFmNTE3ZjQ1OGZjODk3NjA4MWJiNTJjYTczMTBkM2ZmZjBhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgOSBTZXAgMjAyNSAxOTo1MDowMyAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjExIDAzLzEyXSBB ZGQgaW50ZXJmYWNlcyB0aGF0IGVuYWJsZSBpbmRleCBwcmVmZXRjaGluZy4KCkFkZCBhIG5ldyBh bWdldGJhdGNoIGluZGV4IEFNIGludGVyZmFjZSB0aGF0IGFsbG93cyBpbmRleCBhY2Nlc3MgbWV0 aG9kcwp0byBpbXBsZW1lbnQgcGxhaW4vb3JkZXJlZCBpbmRleCBzY2FucyB0aGF0IHJldHVybiBp bmRleCBlbnRyaWVzIGluCmJhdGNoZXMgY29tcHJpc2luZyBhbGwgbWF0Y2hpbmcgaXRlbXMgZnJv bSBhbiBpbmRleCBwYWdlLCByYXRoZXIgdGhhbgpvbmUgbWF0Y2ggYXQgYSB0aW1lLgoKVGhpcyBj b21taXQgYWxzbyBhZGRzIGEgbmV3IHRhYmxlIEFNIGludGVyZmFjZSBjYWxsYmFjaywgY2FsbGVk IGJ5IHRoZQpjb3JlIGV4ZWN1dG9yIHRocm91Z2ggdGhlIG5ldyB0YWJsZV9pbmRleF9nZXRuZXh0 X3Nsb3Qgc2hpbSBmdW5jdGlvbi4KVGhpcyBhbGxvd3MgdGhlIHRhYmxlIEFNIHRvIGRpcmVjdGx5 IG1hbmFnZSB0aGUgcHJvZ3Jlc3Mgb2YgaW5kZXggc2NhbnMKcmF0aGVyIHRoYW4gaGF2aW5nIGlu ZGl2aWR1YWwgVElEcyBwYXNzZWQgaW4gYnkgdGhlIGNhbGxlciBvbmUgYnkgb25lLgpUaGUgYW1n ZXRiYXRjaCBpbnRlcmZhY2UgaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIG5ldyBhcHByb2Fj aCB0bwppbmRleCBzY2FucyBhZGRlZCB0byB0aGUgdGFibGUgQU0uICBUaGUgdGFibGUgQU0gY2Fu IGFwcGx5IGtub3dsZWRnZSBvZgp3aGljaCBUSURzIHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhlIHNj YW4gaW4gdGhlIG5lYXIgZnV0dXJlIHRvIHBlcmZvcm0KSS9PIHByZWZldGNoaW5nLiAgUHJlZmV0 Y2hpbmcgd2lsbCBiZSBhZGRlZCBieSBhbiB1cGNvbWluZyBjb21taXQuCgpJbmRleCBhY2Nlc3Mg bWV0aG9kcyB0aGF0IHN1cHBvcnQgcGxhaW4gaW5kZXggc2NhbnMgbXVzdCBub3cgaW1wbGVtZW50 CmVpdGhlciB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2UgT1IgdGhlIGFtZ2V0dHVwbGUgaW50ZXJm YWNlLiAgVGhlCmFtZ2V0dHVwbGUgaW50ZXJmYWNlIHdpbGwgc3RpbGwgYmUgdXNlZCBieSBpbmRl eCBBTXMgdGhhdCByZXF1aXJlIGRpcmVjdApjb250cm9sIG92ZXIgdGhlIHByb2dyZXNzIG9mIGlu ZGV4IHNjYW5zIChlLmcuLCBHaVNUIHdpdGggS05OIG9yZGVyZWQKc2NhbnMpLiAgQWxtb3N0IGFs bCBleGlzdGluZyBjYWxsZXJzIHRoYXQgcGVyZm9ybSBpbmRleCBzY2FucyBub3cgdXNlCnRoZSBu ZXcgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGludGVyZmFjZSwgcmVnYXJkbGVzcyBvZiB3aGV0 aGVyIHRoZQp1bmRlcmx5aW5nIGluZGV4IEFNIHVzZXMgYW1nZXRiYXRjaCBvciBhbWdldHR1cGxl LgoKVGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIHJldHVybnMgYmF0Y2hlcyB0aGF0IGhvbGQgYSBi dWZmZXIgcGluIG9uIGFuCmluZGV4IHBhZ2UgdGhhdCBjYW4gYmUgdXNlZCBieSB0aGUgdGFibGUg QU0gYXMgYW4gaW50ZXJsb2NrIGFnYWluc3QKY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5IFZB Q1VVTS4gIE5vdyBoZWFwYW0gb25seSBuZWVkcyB0byBob2xkIG9uIHRvCnN1Y2ggYSBwaW4gZm9y IGFuIGluc3RhbnQgLS0gZXhjZXB0IGR1cmluZyBzY2FucyB0aGF0IHVzZSBhIG5vbi1NVkNDCnNu YXBzaG90LiAgTm9uLU1WQ0Mgc2NhbnMgY29udGludWUgdG8gbmVlZCB0byBob2xkIHRoZSBwaW4g dW50aWwgYWxsIG9mCnRoZSBiYXRjaCdzIFRJRHMgaGF2ZSBiZWVuIGZldGNoZWQgZnJvbSB0aGUg aGVhcC4KClRoaXMgZXh0ZW5kcyB0aGUgZHJvcFBpbiBtZWNoYW5pc20gYWRkZWQgdG8gbmJ0cmVl IGJ5IGNvbW1pdCAyZWQ1Yjg3ZiwKYW5kIGdlbmVyYWxpemVzIGl0IHRvIHdvcmsgd2l0aCBhbGwg aW5kZXggQU1zIHRoYXQgc3VwcG9ydCB0aGUgbmV3CmFtZ2V0YmF0Y2ggaW50ZXJmYWNlLiAgV2Ug Y2FuIGFsd2F5cyBzYWZlbHkgZHJvcCBpbmRleCBwYWdlIHBpbnMKZWFnZXJseSwgcHJvdmlkZWQg dGhlIHNjYW4gdXNlcyBhbiBNVkNDIHNuYXBzaG90ICh1bmxpa2UgdGhlIG5idHJlZQpkcm9wUGlu IG9wdGltaXphdGlvbiwgd2hpY2ggaGFkIGEgY291cGxlIG9mIGFkZGl0aW9uYWwgcmVzdHJpY3Rp b25zKS4KCkFuIHVwY29taW5nIGNvbW1pdCB0aGF0IHdpbGwgYWRkIGluZGV4IHByZWZldGNoaW5n IHdpbGwgdXNlIGEgcmVhZApzdHJlYW0gdG8gcmVhZCBoZWFwIHBhZ2VzIGR1cmluZyBpbmRleCBz Y2Fucy4gIFJlYWQgc3RyZWFtIGlzIGNhcmVmdWwgdG8KbGltaXQgaG93IG1hbnkgdGhpbmdzIGl0 IHBpbnMsIGxlc3Qgd2UgcnVuIGludG8gcHJvYmxlbXMgZHVlIHRvIGhhdmluZwp0b28gbWFueSBi dWZmZXJzIHBpbm5lZC4gIFNpbXBseSBuZXZlciBob2xkaW5nIG9uIHRvIGluZGV4IHBhZ2UgYnVm ZmVyCnBpbnMgZ3JlYXRseSBzaW1wbGlmaWVzIHJlc291cmNlIG1hbmFnZW1lbnQgZm9yIGluZGV4 IHByZWZldGNoaW5nOwp0aGVyZSdzIG5vIHJpc2sgb2YgdW5pbnRlbmRlZCBpbnRlcmFjdGlvbnMg YmV0d2VlbiB0aGUgcmVhZCBzdHJlYW0gYW5kCmluZGV4IEFNLiAgVGhlIG9ubHkgZG93bnNpZGUg aXMgdGhhdCB3ZSBjYW5ub3Qgc3VwcG9ydCBwcmVmZXRjaGluZwpkdXJpbmcgc2NhbnMgdGhhdCB1 c2UgYSBub24tTVZDQyBzbmFwc2hvdCwgd2hpY2ggc2VlbXMgcXVpdGUgYWNjZXB0YWJsZS4KCklu IHByYWN0aWNlLCBoZWFwYW0gZG9lc24ndCBkcm9wIGVhY2ggYmF0Y2gncyBpbmRleCBwYWdlIGJ1 ZmZlciBwaW4gYXQKdGhlIGVhcmxpZXN0IG9wcG9ydHVuaXR5IGR1cmluZyBpbmRleC1vbmx5IHNj YW5zLiAgVGhpcyB3YXMgZGVlbWVkCm5lY2Vzc2FyeSB0byBhdm9pZCByZWdyZXNzaW5nIGluZGV4 LW9ubHkgc2NhbnMgd2l0aCBhIExJTUlULCBpbgpwYXJ0aWN1bGFyIHdpdGggbmVzdGxvb3AgYW50 aS1qb2lucyBhbmQgbmVzdGxvb3Agc2VtaS1qb2luczsgZWFnZXJseQpsb2FkaW5nIGFsbCB0aGUg dmlzaWJpbGl0eSBpbmZvcm1hdGlvbiB1cCBmcm9udCByZWdyZXNzZWQgc3VjaCBxdWVyaWVzLgpU aGUgbmV3IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIGdpdmVzIHRhYmxlIEFNcyB0aGUgYXV0aG9yaXR5 IHRvIGRlY2lkZQp3aGVuIGFuZCB3aGVyZSB0byBkcm9wIGluZGV4IHBhZ2UgcGlucywgc28gdGhp cyBjYW4gYmUgY29uc2lkZXJlZCBhCmhlYXBhbSBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgKGluZGV4 IEFNcyBkb24ndCBuZWVkIHRvIGtub3cgYWJvdXQgaXQpLgpUaGlzIHNjaGVtZSBzdGlsbCBhbGxv d3MgaW5kZXggcHJlZmV0Y2hpbmcgdG8gY29uc2lzdGVudGx5IGhvbGQgbm8gbW9yZQp0aGFuIG9u ZSBiYXRjaCBpbmRleCBwYWdlIHBpbiBhdCBhIHRpbWUsIGV2ZW4gd2hlbiBhbiBpbmRleC1vbmx5 IHNjYW4KKHRoYXQgbXVzdCBwZXJmb3JtIHNvbWUgaGVhcCBmZXRjaGVzKSBob2xkcyBvcGVuIHNl dmVyYWwgaW5kZXggYmF0Y2hlcwphdCBvbmNlIGluIG9yZGVyIHRvIG1haW50YWluIGFuIGFkZXF1 YXRlIHByZWZldGNoIGRpc3RhbmNlLgoKQXV0aG9yOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRy YS5tZT4KQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+ClJldmlld2VkLUJ5OiBB bmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+ClJldmlld2VkLUJ5OiBUaG9tYXMgTXVu cm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVz L20vY2Y4NWY0NmYtYjAyZi0wNWIyLTUyNDgtNTAwMGI4OTRlYmFiQGVudGVycHJpc2VkYi5jb20K RGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9lZmFjMzIzOC02ZjM0LTQxZWEtYTM5My0y NmNjMDQ0MWI1MDYlNDB2b25kcmEubWUKLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCAg ICAgICAgICAgICAgICAgICAgfCAgMjIgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oICAg ICAgICAgICAgICAgICAgICB8ICAyOSArLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAg ICAgICAgICAgICAgICAgIHwgICA4ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmggICAg ICAgICAgICAgICAgICAgfCAxNzMgKy0tLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgg ICAgICAgICAgICAgICAgICB8IDMwNCArKysrKysrLQogc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxl YW0uaCAgICAgICAgICAgICAgICAgIHwgIDQxICsKIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3Ry dW1lbnRfbm9kZS5oICAgICAgICB8ICAgNiArCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMu aCAgICAgICAgICAgICAgICAgfCAgIDggKy0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o ICAgICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5j ICAgICAgICAgICAgICAgIHwgICA1ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5j ICAgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5j ICAgICAgICAgICAgICB8ICAgNSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jICAg ICAgICAgICAgICAgIHwgICA1ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgICAg ICAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5k bGVyLmMgICAgICB8IDU5MSArKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgMyArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4 L2FtYXBpLmMgICAgICAgICAgICAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9n ZW5hbS5jICAgICAgICAgICAgICB8ICAxMyArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2lu ZGV4YW0uYyAgICAgICAgICAgIHwgMTU2ICsrLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9p bmRleGJhdGNoLmMgICAgICAgICB8IDcwMSArKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5k L2FjY2Vzcy9pbmRleC9tZXNvbi5idWlsZCAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL1JFQURNRSAgICAgICAgICAgICAgfCAgNjYgKy0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0cGFnZS5jICAgICAgICAgICB8ICAgMyArCiBzcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHJlYWRwYWdlLmMgICAgICAgfCAxOTAgKysrLS0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0cmVlLmMgICAgICAgICAgICB8IDQyMyArKysrKystLS0tLQogc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyAgICAgICAgIHwgNTIxICsrKysrLS0tLS0t LS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYyAgICAgICAgICB8IDIzMiAt LS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jICAgICAgICAgICB8ICAg NiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jICAgICAgICAgIHwgICA1 ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgICAgICAgICAgICAgICAgfCAgMjkg Ky0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jICAgICAgICAgICAgICB8ICAgMiAr LQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jICAgICAgICAgICAgICAgIHwgICAyICst CiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYyAgICAgICAgICAgfCAgIDYgKy0K IHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jICAgICAgICB8ICAgOCArLQog c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5jICAgIHwgICA5ICstCiBz cmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jICAgICAgfCAxMjAgKy0tCiBz cmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMgICAgICAgICAgfCAgMjcgKy0KIHNy Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZWpvaW4uYyAgICAgICAgICB8ICAgNCArLQogc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYyAgICAgICAgIHwgICA2ICstCiBzcmMv YmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgICAgICAgICAgfCAgIDggKy0KIHNyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYyAgICB8ICAgMyArLQogc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYyAgICAgICAgICAgICAgIHwgICA4ICstCiBzcmMvYmFj a2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYyAgICAgICAgICAgICAgfCAgNjEgKy0KIGNvbnRyaWIv YW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMgICAgICAgICAgICAgICB8ICAgMiArLQogY29udHJpYi9i bG9vbS9ibHV0aWxzLmMgICAgICAgICAgICAgICAgICAgICAgIHwgICA1ICstCiAuLi4vbW9kdWxl cy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jICAgfCAgIDUgKy0KIHNyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAxMCArLQogNDcgZmlsZXMgY2hh bmdlZCwgMjQxMyBpbnNlcnRpb25zKCspLCAxNDQwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5o CmluZGV4IGVjZmJkMDE3ZC4uY2M3NTZkYzM4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nl c3MvYW1hcGkuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaApAQCAtMTk4LDYgKzE5 OCwxNSBAQCB0eXBlZGVmIHZvaWQgKCphbXJlc2Nhbl9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mg c2NhbiwKIHR5cGVkZWYgYm9vbCAoKmFtZ2V0dHVwbGVfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNj IHNjYW4sCiAJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOwogCisvKiBuZXh0IGJh dGNoIG9mIHZhbGlkIHR1cGxlcyAqLwordHlwZWRlZiBJbmRleFNjYW5CYXRjaCAoKmFtZ2V0YmF0 Y2hfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCSAgIEluZGV4U2Nh bkJhdGNoIHByaW9yYmF0Y2gsCisJCQkJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9u KTsKKworLyogbWFyayBraWxsZWQgaXRlbXMgaW4gaW5kZXggcGFnZSAqLwordHlwZWRlZiB2b2lk ICgqYW1raWxsaXRlbXNiYXRjaF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJ CQkJCQkgICBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CisKIC8qIGZldGNoIGFsbCB2YWxpZCB0dXBs ZXMgKi8KIHR5cGVkZWYgaW50NjQgKCphbWdldGJpdG1hcF9mdW5jdGlvbikgKEluZGV4U2NhbkRl c2Mgc2NhbiwKIAkJCQkJCQkJCSAgIFRJREJpdG1hcCAqdGJtKTsKQEAgLTIwNSwxMSArMjE0LDkg QEAgdHlwZWRlZiBpbnQ2NCAoKmFtZ2V0Yml0bWFwX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBz Y2FuLAogLyogZW5kIGluZGV4IHNjYW4gKi8KIHR5cGVkZWYgdm9pZCAoKmFtZW5kc2Nhbl9mdW5j dGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAKLS8qIG1hcmsgY3VycmVudCBzY2FuIHBvc2l0 aW9uICovCi10eXBlZGVmIHZvaWQgKCphbW1hcmtwb3NfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNj IHNjYW4pOwotCi0vKiByZXN0b3JlIG1hcmtlZCBzY2FuIHBvc2l0aW9uICovCi10eXBlZGVmIHZv aWQgKCphbXJlc3RycG9zX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKKy8qIGludmFs aWRhdGUgaW5kZXggQU0gc3RhdGUgdGhhdCBpbmRlcGVuZGVudGx5IHRyYWNrcyBzY2FuJ3MgcG9z aXRpb24gKi8KK3R5cGVkZWYgdm9pZCAoKmFtcG9zcmVzZXRfZnVuY3Rpb24pIChJbmRleFNjYW5E ZXNjIHNjYW4sCisJCQkJCQkJCQkgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogCiAvKgogICogQ2Fs bGJhY2sgZnVuY3Rpb24gc2lnbmF0dXJlcyAtIGZvciBwYXJhbGxlbCBpbmRleCBzY2Fucy4KQEAg LTMwOSwxMCArMzE2LDExIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4QW1Sb3V0aW5lCiAJYW1iZWdp bnNjYW5fZnVuY3Rpb24gYW1iZWdpbnNjYW47CiAJYW1yZXNjYW5fZnVuY3Rpb24gYW1yZXNjYW47 CiAJYW1nZXR0dXBsZV9mdW5jdGlvbiBhbWdldHR1cGxlOyAvKiBjYW4gYmUgTlVMTCAqLworCWFt Z2V0YmF0Y2hfZnVuY3Rpb24gYW1nZXRiYXRjaDsgLyogY2FuIGJlIE5VTEwgKi8KKwlhbWtpbGxp dGVtc2JhdGNoX2Z1bmN0aW9uIGFta2lsbGl0ZW1zYmF0Y2g7IC8qIGNhbiBiZSBOVUxMICovCiAJ YW1nZXRiaXRtYXBfZnVuY3Rpb24gYW1nZXRiaXRtYXA7CS8qIGNhbiBiZSBOVUxMICovCiAJYW1l bmRzY2FuX2Z1bmN0aW9uIGFtZW5kc2NhbjsKLQlhbW1hcmtwb3NfZnVuY3Rpb24gYW1tYXJrcG9z OwkvKiBjYW4gYmUgTlVMTCAqLwotCWFtcmVzdHJwb3NfZnVuY3Rpb24gYW1yZXN0cnBvczsgLyog Y2FuIGJlIE5VTEwgKi8KKwlhbXBvc3Jlc2V0X2Z1bmN0aW9uIGFtcG9zcmVzZXQ7IC8qIGNhbiBi ZSBOVUxMICovCiAKIAkvKiBpbnRlcmZhY2UgZnVuY3Rpb25zIHRvIHN1cHBvcnQgcGFyYWxsZWwg aW5kZXggc2NhbnMgKi8KIAlhbWVzdGltYXRlcGFyYWxsZWxzY2FuX2Z1bmN0aW9uIGFtZXN0aW1h dGVwYXJhbGxlbHNjYW47IC8qIGNhbiBiZSBOVUxMICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvZ2VuYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCmluZGV4IDRjMDQy OWNjNi4uNjMyNzY2ZTBhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaAor KysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaApAQCAtOTQsNiArOTQsNyBAQCB0eXBlZGVm IGJvb2wgKCpJbmRleEJ1bGtEZWxldGVDYWxsYmFjaykgKEl0ZW1Qb2ludGVyIGl0ZW1wdHIsIHZv aWQgKnN0YXRlKTsKIAogLyogc3RydWN0IGRlZmluaXRpb25zIGFwcGVhciBpbiByZWxzY2FuLmgg Ki8KIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhICpJbmRleFNjYW5EZXNjOwordHlw ZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hEYXRhICpJbmRleFNjYW5CYXRjaDsKIHR5cGVkZWYg c3RydWN0IFN5c1NjYW5EZXNjRGF0YSAqU3lzU2NhbkRlc2M7CiAKIHR5cGVkZWYgc3RydWN0IFBh cmFsbGVsSW5kZXhTY2FuRGVzY0RhdGEgKlBhcmFsbGVsSW5kZXhTY2FuRGVzYzsKQEAgLTE1NCw2 ICsxNTUsNyBAQCBleHRlcm4gdm9pZCBpbmRleF9pbnNlcnRfY2xlYW51cChSZWxhdGlvbiBpbmRl eFJlbGF0aW9uLAogCiBleHRlcm4gSW5kZXhTY2FuRGVzYyBpbmRleF9iZWdpbnNjYW4oUmVsYXRp b24gaGVhcFJlbGF0aW9uLAogCQkJCQkJCQkJIFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCisJCQkJ CQkJCQkgYm9vbCB4c193YW50X2l0dXAsCiAJCQkJCQkJCQkgU25hcHNob3Qgc25hcHNob3QsCiAJ CQkJCQkJCQkgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50LAogCQkJCQkJCQkJ IGludCBua2V5cywgaW50IG5vcmRlcmJ5cyk7CkBAIC0xODAsMTQgKzE4MiwxMiBAQCBleHRlcm4g dm9pZCBpbmRleF9wYXJhbGxlbHNjYW5faW5pdGlhbGl6ZShSZWxhdGlvbiBoZWFwUmVsYXRpb24s CiBleHRlcm4gdm9pZCBpbmRleF9wYXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pOwog ZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhl YXByZWwsCiAJCQkJCQkJCQkJCSAgUmVsYXRpb24gaW5kZXhyZWwsCisJCQkJCQkJCQkJCSAgYm9v bCB4c193YW50X2l0dXAsCiAJCQkJCQkJCQkJCSAgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICpp bnN0cnVtZW50LAogCQkJCQkJCQkJCQkgIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywKIAkJCQkJ CQkJCQkJICBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4pOwogZXh0ZXJuIEl0ZW1Qb2ludGVy IGluZGV4X2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSBTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbik7Ci1leHRlcm4gYm9vbCBpbmRleF9mZXRjaF9oZWFwKEluZGV4U2Nh bkRlc2Mgc2NhbiwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwotZXh0ZXJuIGJvb2wgaW5kZXhfZ2V0 bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCi0J CQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwogZXh0ZXJuIGludDY0IGluZGV4X2dldGJp dG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqYml0bWFwKTsKIAogZXh0ZXJuIElu ZGV4QnVsa0RlbGV0ZVJlc3VsdCAqaW5kZXhfYnVsa19kZWxldGUoSW5kZXhWYWN1dW1JbmZvICpp bmZvLApAQCAtMjUxLDQgKzI1MSwyNyBAQCBleHRlcm4gdm9pZCBzeXN0YWJsZV9pbnBsYWNlX3Vw ZGF0ZV9iZWdpbihSZWxhdGlvbiByZWxhdGlvbiwKIGV4dGVybiB2b2lkIHN5c3RhYmxlX2lucGxh Y2VfdXBkYXRlX2ZpbmlzaCh2b2lkICpzdGF0ZSwgSGVhcFR1cGxlIHR1cGxlKTsKIGV4dGVybiB2 b2lkIHN5c3RhYmxlX2lucGxhY2VfdXBkYXRlX2NhbmNlbCh2b2lkICpzdGF0ZSk7CiAKKy8qCisg KiBhbWdldGJhdGNoIHV0aWxpdGllcyBjYWxsZWQgYnkgaW5kZXhhbS5jIChpbiBpbmRleGJhdGNo LmMpCisgKi8KK2V4dGVybiB2b2lkIGluZGV4X2JhdGNoc2Nhbl9pbml0KEluZGV4U2NhbkRlc2Mg c2Nhbik7CitleHRlcm4gdm9pZCBpbmRleF9iYXRjaHNjYW5fcmVzZXQoSW5kZXhTY2FuRGVzYyBz Y2FuKTsKK2V4dGVybiB2b2lkIGluZGV4X2JhdGNoc2Nhbl9lbmQoSW5kZXhTY2FuRGVzYyBzY2Fu KTsKK2V4dGVybiB2b2lkIGluZGV4X2JhdGNoc2Nhbl9tYXJrX3BvcyhJbmRleFNjYW5EZXNjIHNj YW4pOworZXh0ZXJuIHZvaWQgaW5kZXhfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9zKEluZGV4U2NhbkRl c2Mgc2Nhbik7CisKKy8qCisgKiBhbWdldGJhdGNoIHV0aWxpdGllcyBjYWxsZWQgYnkgdGFibGUg QU1zIChpbiBpbmRleGJhdGNoLmMpCisgKi8KK2V4dGVybiB2b2lkIHRhYmxlYW1fdXRpbF9iYXRj aF9kaXJjaGFuZ2UoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIHRhYmxlYW1fdXRp bF9raWxsX3NjYW5wb3NpdGVtKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCB0YWJs ZWFtX3V0aWxfZnJlZV9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJh dGNoKTsKKworLyoKKyAqIGFtZ2V0YmF0Y2ggdXRpbGl0aWVzIGNhbGxlZCBieSBpbmRleCBBTXMg KGluIGluZGV4YmF0Y2guYykKKyAqLworZXh0ZXJuIHZvaWQgaW5kZXhhbV91dGlsX2JhdGNoX3Vu bG9jayhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKK2V4dGVybiBJ bmRleFNjYW5CYXRjaCBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2MoSW5kZXhTY2FuRGVzYyBzY2Fu KTsKK2V4dGVybiB2b2lkIGluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKEluZGV4U2NhbkRlc2Mg c2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworCiAjZW5kaWYJCQkJCQkJLyogR0VOQU1fSCAq LwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oIGIvc3JjL2luY2x1ZGUv YWNjZXNzL2hlYXBhbS5oCmluZGV4IDNjMDk2MWFiMy4uYjAzZTcwMGYwIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBh bS5oCkBAIC0xMTcsNyArMTE3LDEzIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0Y2hIZWFwRGF0 YQogCUluZGV4RmV0Y2hUYWJsZURhdGEgeHNfYmFzZTsJLyogQU0gaW5kZXBlbmRlbnQgcGFydCBv ZiB0aGUgZGVzY3JpcHRvciAqLwogCiAJQnVmZmVyCQl4c19jYnVmOwkJLyogY3VycmVudCBoZWFw IGJ1ZmZlciBpbiBzY2FuLCBpZiBhbnkgKi8KLQkvKiBOQjogaWYgeHNfY2J1ZiBpcyBub3QgSW52 YWxpZEJ1ZmZlciwgd2UgaG9sZCBhIHBpbiBvbiB0aGF0IGJ1ZmZlciAqLworCUJsb2NrTnVtYmVy IHhzX2JsazsJCQkvKiB4c19jYnVmJ3MgYmxvY2sgbnVtYmVyLCBpZiBhbnkgKi8KKworCS8qIEZv ciBpbmRleC1vbmx5IHNjYW5zIHRoYXQgbXVzdCBhY2Nlc3MgdGhlIHZpc2liaWxpdHkgbWFwICov CisJQnVmZmVyCQl2bWJ1ZjsJCQkvKiB2aXNpYmlsaXR5IG1hcCBidWZmZXIgKi8KKwlpbnQJCQl4 c192bV9pdGVtczsJLyogIyBpdGVtcyB0byByZXNvbHZlIHZpc2liaWxpdHkgaW5mbyBmb3IgKi8K KworCS8qIE5COiBpZiB4c19jYnVmIG9yIHZtYnVmIGFyZSBub3QgSW52YWxpZEJ1ZmZlciwgd2Ug aG9sZCBhIHBpbiAqLwogfSBJbmRleEZldGNoSGVhcERhdGE7CiAKIC8qIFJlc3VsdCBjb2RlcyBm b3IgSGVhcFR1cGxlU2F0aXNmaWVzVmFjdXVtICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9h Y2Nlc3MvbmJ0cmVlLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKaW5kZXggNzcyMjQ4 NTk2Li40ZGY0ODA1MGYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAor KysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKQEAgLTkyNCwxMTIgKzkyNCw2IEBAIHR5 cGVkZWYgc3RydWN0IEJUVmFjdXVtUG9zdGluZ0RhdGEKIAogdHlwZWRlZiBCVFZhY3V1bVBvc3Rp bmdEYXRhICpCVFZhY3V1bVBvc3Rpbmc7CiAKLS8qCi0gKiBCVFNjYW5PcGFxdWVEYXRhIGlzIHRo ZSBidHJlZS1wcml2YXRlIHN0YXRlIG5lZWRlZCBmb3IgYW4gaW5kZXhzY2FuLgotICogVGhpcyBj b25zaXN0cyBvZiBwcmVwcm9jZXNzZWQgc2NhbiBrZXlzIChzZWUgX2J0X3ByZXByb2Nlc3Nfa2V5 cygpIGZvcgotICogZGV0YWlscyBvZiB0aGUgcHJlcHJvY2Vzc2luZyksIGluZm9ybWF0aW9uIGFi b3V0IHRoZSBjdXJyZW50IGxvY2F0aW9uCi0gKiBvZiB0aGUgc2NhbiwgYW5kIGluZm9ybWF0aW9u IGFib3V0IHRoZSBtYXJrZWQgbG9jYXRpb24sIGlmIGFueS4gIChXZSB1c2UKLSAqIEJUU2NhblBv c0RhdGEgdG8gcmVwcmVzZW50IHRoZSBkYXRhIG5lZWRlZCBmb3IgZWFjaCBvZiBjdXJyZW50IGFu ZCBtYXJrZWQKLSAqIGxvY2F0aW9ucy4pCUluIGFkZGl0aW9uIHdlIGNhbiByZW1lbWJlciBzb21l IGtub3duLWtpbGxlZCBpbmRleCBlbnRyaWVzCi0gKiB0aGF0IG11c3QgYmUgbWFya2VkIGJlZm9y ZSB3ZSBjYW4gbW92ZSBvZmYgdGhlIGN1cnJlbnQgcGFnZS4KLSAqCi0gKiBJbmRleCBzY2FucyB3 b3JrIGEgcGFnZSBhdCBhIHRpbWU6IHdlIHBpbiBhbmQgcmVhZC1sb2NrIHRoZSBwYWdlLCBpZGVu dGlmeQotICogYWxsIHRoZSBtYXRjaGluZyBpdGVtcyBvbiB0aGUgcGFnZSBhbmQgc2F2ZSB0aGVt IGluIEJUU2NhblBvc0RhdGEsIHRoZW4KLSAqIHJlbGVhc2UgdGhlIHJlYWQtbG9jayB3aGlsZSBy ZXR1cm5pbmcgdGhlIGl0ZW1zIHRvIHRoZSBjYWxsZXIgZm9yCi0gKiBwcm9jZXNzaW5nLiAgVGhp cyBhcHByb2FjaCBtaW5pbWl6ZXMgbG9jay91bmxvY2sgdHJhZmZpYy4gIFdlIG11c3QgYWx3YXlz Ci0gKiBkcm9wIHRoZSBsb2NrIHRvIG1ha2UgaXQgb2theSBmb3IgY2FsbGVyIHRvIHByb2Nlc3Mg dGhlIHJldHVybmVkIGl0ZW1zLgotICogV2hldGhlciBvciBub3Qgd2UgY2FuIGFsc28gcmVsZWFz ZSB0aGUgcGluIGR1cmluZyB0aGlzIHdpbmRvdyB3aWxsIHZhcnkuCi0gKiBXZSBkcm9wIHRoZSBw aW4gKHdoZW4gc28tPmRyb3BQaW4pIHRvIGF2b2lkIGJsb2NraW5nIHByb2dyZXNzIGJ5IFZBQ1VV TQotICogKHNlZSBuYnRyZWUvUkVBRE1FIHNlY3Rpb24gYWJvdXQgbWFraW5nIGNvbmN1cnJlbnQg VElEIHJlY3ljbGluZyBzYWZlKS4KLSAqIFdlJ2xsIGFsd2F5cyByZWxlYXNlIGJvdGggdGhlIGxv Y2sgYW5kIHRoZSBwaW4gb24gdGhlIGN1cnJlbnQgcGFnZSBiZWZvcmUKLSAqIG1vdmluZyBvbiB0 byBpdHMgc2libGluZyBwYWdlLgotICoKLSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5 IHNjYW4sIHdlIHNhdmUgdGhlIGVudGlyZSBJbmRleFR1cGxlIGZvciBlYWNoCi0gKiBtYXRjaGVk IGl0ZW0sIG90aGVyd2lzZSBvbmx5IGl0cyBoZWFwIFRJRCBhbmQgb2Zmc2V0LiAgVGhlIEluZGV4 VHVwbGVzIGdvCi0gKiBpbnRvIGEgc2VwYXJhdGUgd29ya3NwYWNlIGFycmF5OyBlYWNoIEJUU2Nh blBvc0l0ZW0gc3RvcmVzIGl0cyB0dXBsZSdzCi0gKiBvZmZzZXQgd2l0aGluIHRoYXQgYXJyYXku ICBQb3N0aW5nIGxpc3QgdHVwbGVzIHN0b3JlIGEgImJhc2UiIHR1cGxlIG9uY2UsCi0gKiBhbGxv d2luZyB0aGUgc2FtZSBrZXkgdG8gYmUgcmV0dXJuZWQgZm9yIGVhY2ggVElEIGluIHRoZSBwb3N0 aW5nIGxpc3QKLSAqIHR1cGxlLgotICovCi0KLXR5cGVkZWYgc3RydWN0IEJUU2NhblBvc0l0ZW0J Lyogd2hhdCB3ZSByZW1lbWJlciBhYm91dCBlYWNoIG1hdGNoICovCi17Ci0JSXRlbVBvaW50ZXJE YXRhIGhlYXBUaWQ7CS8qIFRJRCBvZiByZWZlcmVuY2VkIGhlYXAgaXRlbSAqLwotCU9mZnNldE51 bWJlciBpbmRleE9mZnNldDsJLyogaW5kZXggaXRlbSdzIGxvY2F0aW9uIHdpdGhpbiBwYWdlICov Ci0JTG9jYXRpb25JbmRleCB0dXBsZU9mZnNldDsJLyogSW5kZXhUdXBsZSdzIG9mZnNldCBpbiB3 b3Jrc3BhY2UsIGlmIGFueSAqLwotfSBCVFNjYW5Qb3NJdGVtOwotCi10eXBlZGVmIHN0cnVjdCBC VFNjYW5Qb3NEYXRhCi17Ci0JQnVmZmVyCQlidWY7CQkJLyogY3VyclBhZ2UgYnVmIChpbnZhbGlk IG1lYW5zIHVucGlubmVkKSAqLwotCi0JLyogcGFnZSBkZXRhaWxzIGFzIG9mIHRoZSBzYXZlZCBw b3NpdGlvbidzIGNhbGwgdG8gX2J0X3JlYWRwYWdlICovCi0JQmxvY2tOdW1iZXIgY3VyclBhZ2U7 CQkvKiBwYWdlIHJlZmVyZW5jZWQgYnkgaXRlbXMgYXJyYXkgKi8KLQlCbG9ja051bWJlciBwcmV2 UGFnZTsJCS8qIGN1cnJQYWdlJ3MgbGVmdCBsaW5rICovCi0JQmxvY2tOdW1iZXIgbmV4dFBhZ2U7 CQkvKiBjdXJyUGFnZSdzIHJpZ2h0IGxpbmsgKi8KLQlYTG9nUmVjUHRyCWxzbjsJCQkvKiBjdXJy UGFnZSdzIExTTiAod2hlbiBzby0+ZHJvcFBpbikgKi8KLQotCS8qIHNjYW4gZGlyZWN0aW9uIGZv ciB0aGUgc2F2ZWQgcG9zaXRpb24ncyBjYWxsIHRvIF9idF9yZWFkcGFnZSAqLwotCVNjYW5EaXJl Y3Rpb24gZGlyOwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgtb25seSBzY2Fu LCBuZXh0VHVwbGVPZmZzZXQgaXMgdGhlIGZpcnN0IGZyZWUKLQkgKiBsb2NhdGlvbiBpbiB0aGUg YXNzb2NpYXRlZCB0dXBsZSBzdG9yYWdlIHdvcmtzcGFjZS4KLQkgKi8KLQlpbnQJCQluZXh0VHVw bGVPZmZzZXQ7Ci0KLQkvKgotCSAqIG1vcmVMZWZ0IGFuZCBtb3JlUmlnaHQgdHJhY2sgd2hldGhl ciB3ZSB0aGluayB0aGVyZSBtYXkgYmUgbWF0Y2hpbmcKLQkgKiBpbmRleCBlbnRyaWVzIHRvIHRo ZSBsZWZ0IGFuZCByaWdodCBvZiB0aGUgY3VycmVudCBwYWdlLCByZXNwZWN0aXZlbHkuCi0JICov Ci0JYm9vbAkJbW9yZUxlZnQ7Ci0JYm9vbAkJbW9yZVJpZ2h0OwotCi0JLyoKLQkgKiBUaGUgaXRl bXMgYXJyYXkgaXMgYWx3YXlzIG9yZGVyZWQgaW4gaW5kZXggb3JkZXIgKGllLCBpbmNyZWFzaW5n Ci0JICogaW5kZXhvZmZzZXQpLiAgV2hlbiBzY2FubmluZyBiYWNrd2FyZHMgaXQgaXMgY29udmVu aWVudCB0byBmaWxsIHRoZQotCSAqIGFycmF5IGJhY2stdG8tZnJvbnQsIHNvIHdlIHN0YXJ0IGF0 IHRoZSBsYXN0IHNsb3QgYW5kIGZpbGwgZG93bndhcmRzLgotCSAqIEhlbmNlIHdlIG5lZWQgYm90 aCBhIGZpcnN0LXZhbGlkLWVudHJ5IGFuZCBhIGxhc3QtdmFsaWQtZW50cnkgY291bnRlci4KLQkg KiBpdGVtSW5kZXggaXMgYSBjdXJzb3Igc2hvd2luZyB3aGljaCBlbnRyeSB3YXMgbGFzdCByZXR1 cm5lZCB0byBjYWxsZXIuCi0JICovCi0JaW50CQkJZmlyc3RJdGVtOwkJLyogZmlyc3QgdmFsaWQg aW5kZXggaW4gaXRlbXNbXSAqLwotCWludAkJCWxhc3RJdGVtOwkJLyogbGFzdCB2YWxpZCBpbmRl eCBpbiBpdGVtc1tdICovCi0JaW50CQkJaXRlbUluZGV4OwkJLyogY3VycmVudCBpbmRleCBpbiBp dGVtc1tdICovCi0KLQlCVFNjYW5Qb3NJdGVtIGl0ZW1zW01heFRJRHNQZXJCVHJlZVBhZ2VdOwkv KiBNVVNUIEJFIExBU1QgKi8KLX0gQlRTY2FuUG9zRGF0YTsKLQotdHlwZWRlZiBCVFNjYW5Qb3NE YXRhICpCVFNjYW5Qb3M7Ci0KLSNkZWZpbmUgQlRTY2FuUG9zSXNQaW5uZWQoc2NhbnBvcykgXAot KCBcCi0JQXNzZXJ0TWFjcm8oQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkg fHwgXAotCQkJCSFCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpKSwgXAotCUJ1ZmZlcklzVmFs aWQoKHNjYW5wb3MpLmJ1ZikgXAotKQotI2RlZmluZSBCVFNjYW5Qb3NVbnBpbihzY2FucG9zKSBc Ci0JZG8geyBcCi0JCVJlbGVhc2VCdWZmZXIoKHNjYW5wb3MpLmJ1Zik7IFwKLQkJKHNjYW5wb3Mp LmJ1ZiA9IEludmFsaWRCdWZmZXI7IFwKLQl9IHdoaWxlICgwKQotI2RlZmluZSBCVFNjYW5Qb3NV bnBpbklmUGlubmVkKHNjYW5wb3MpIFwKLQlkbyB7IFwKLQkJaWYgKEJUU2NhblBvc0lzUGlubmVk KHNjYW5wb3MpKSBcCi0JCQlCVFNjYW5Qb3NVbnBpbihzY2FucG9zKTsgXAotCX0gd2hpbGUgKDAp Ci0KLSNkZWZpbmUgQlRTY2FuUG9zSXNWYWxpZChzY2FucG9zKSBcCi0oIFwKLQlBc3NlcnRNYWNy byhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSB8fCBcCi0JCQkJIUJ1ZmZl cklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBcCi0JQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9z KS5jdXJyUGFnZSkgXAotKQotI2RlZmluZSBCVFNjYW5Qb3NJbnZhbGlkYXRlKHNjYW5wb3MpIFwK LQlkbyB7IFwKLQkJKHNjYW5wb3MpLmJ1ZiA9IEludmFsaWRCdWZmZXI7IFwKLQkJKHNjYW5wb3Mp LmN1cnJQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOyBcCi0JfSB3aGlsZSAoMCkKLQogLyogV2Ug bmVlZCBvbmUgb2YgdGhlc2UgZm9yIGVhY2ggZXF1YWxpdHktdHlwZSBTS19TRUFSQ0hBUlJBWSBz Y2FuIGtleSAqLwogdHlwZWRlZiBzdHJ1Y3QgQlRBcnJheUtleUluZm8KIHsKQEAgLTEwNTAsNiAr OTQ0LDI4IEBAIHR5cGVkZWYgc3RydWN0IEJUQXJyYXlLZXlJbmZvCiAJU2NhbktleQkJaGlnaF9j b21wYXJlOwkvKiBhcnJheSdzIDwgb3IgPD0gdXBwZXIgYm91bmQgKi8KIH0gQlRBcnJheUtleUlu Zm87CiAKKy8qCisgKiBCVFNjYW5PcGFxdWVEYXRhIGlzIHRoZSBidHJlZS1wcml2YXRlIHN0YXRl IG5lZWRlZCBmb3IgYW4gaW5kZXhzY2FuLgorICogVGhpcyBjb25zaXN0cyBvZiBwcmVwcm9jZXNz ZWQgc2NhbiBrZXlzIChzZWUgX2J0X3ByZXByb2Nlc3Nfa2V5cygpIGZvcgorICogZGV0YWlscyBv ZiB0aGUgcHJlcHJvY2Vzc2luZyksIGFuZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBh cnJheQorICoga2V5cy4gIFRoZXJlIGFyZSBhc3N1bXB0aW9ucyBhYm91dCBob3cgdGhlIGN1cnJl bnQgYXJyYXkga2V5cyB0cmFjayB0aGUKKyAqIHByb2dyZXNzIG9mIHRoZSBpbmRleCBzY2FuIHRo cm91Z2ggdGhlIGluZGV4J3Mga2V5IHNwYWNlIChzZWUgX2J0X3JlYWRwYWdlCisgKiBhbmQgX2J0 X2FkdmFuY2VfYXJyYXlfa2V5cyksIGJ1dCB3ZSBkb24ndCBhY3R1YWxseSB0cmFjayBhbnl0aGlu ZyBhYm91dCB0aGUKKyAqIGN1cnJlbnQgc2NhbiBwb3NpdGlvbiBpbiB0aGlzIG9wYXF1ZSBzdHJ1 Y3QuCisgKgorICogSW5kZXggc2NhbnMgd29yayBhIHBhZ2UgYXQgYSB0aW1lLCBhcyByZXF1aXJl ZCBieSB0aGUgYW1nZXRiYXRjaCBjb250cmFjdDoKKyAqIHdlIHBpbiBhbmQgcmVhZC1sb2NrIHRo ZSBwYWdlLCBpZGVudGlmeSBhbGwgdGhlIG1hdGNoaW5nIGl0ZW1zIG9uIHRoZSBwYWdlCisgKiBh bmQgcmV0dXJuIHRoZW0gaW4gYSBuZXdseSBhbGxvY2F0ZWQgYmF0Y2guICBXZSB0aGVuIHJlbGVh c2UgdGhlIHJlYWQtbG9jaworICogdXNpbmcgYW1nZXRiYXRjaCB1dGlsaXR5IHJvdXRpbmVzLiAg VGhpcyBhcHByb2FjaCBtaW5pbWl6ZXMgbG9jay91bmxvY2sKKyAqIHRyYWZmaWMuIF9idF9uZXh0 IGlzIHBhc3NlZCBwcmlvcmJhdGNoLCB3aGljaCBjb250YWlucyBkZXRhaWxzIG9mIHdoaWNoCisg KiBwYWdlIGlzIG5leHQgaW4gbGluZSB0byBiZSByZWFkIChwcmlvcmJhdGNoIGlzIHByb3ZpZGVk IGFzIGFuIGFyZ3VtZW50IHRvCisgKiBidGdldGJhdGNoIGJ5IGNvcmUgY29kZSkuCisgKgorICog SWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2Nhbiwgd2Ugc2F2ZSB0aGUgZW50aXJlIElu ZGV4VHVwbGUgZm9yIGVhY2gKKyAqIG1hdGNoZWQgaXRlbSwgb3RoZXJ3aXNlIG9ubHkgaXRzIGhl YXAgVElEIGFuZCBvZmZzZXQuICBUaGlzIGlzIGFsc28gcGVyIHRoZQorICogYW1nZXRiYXRjaCBj b250cmFjdC4gIFBvc3RpbmcgbGlzdCB0dXBsZXMgc3RvcmUgYSAiYmFzZSIgdHVwbGUgb25jZSwK KyAqIGFsbG93aW5nIHRoZSBzYW1lIGtleSB0byBiZSByZXR1cm5lZCBmb3IgZWFjaCBUSUQgaW4g dGhlIHBvc3RpbmcgbGlzdC4KKyAqLwogdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuT3BhcXVlRGF0YQog ewogCS8qIHRoZXNlIGZpZWxkcyBhcmUgc2V0IGJ5IF9idF9wcmVwcm9jZXNzX2tleXMoKTogKi8K QEAgLTEwNjYsMzIgKzk4Miw2IEBAIHR5cGVkZWYgc3RydWN0IEJUU2Nhbk9wYXF1ZURhdGEKIAlC VEFycmF5S2V5SW5mbyAqYXJyYXlLZXlzOwkvKiBpbmZvIGFib3V0IGVhY2ggZXF1YWxpdHktdHlw ZSBhcnJheSBrZXkgKi8KIAlGbWdySW5mbyAgICpvcmRlclByb2NzOwkJLyogT1JERVIgcHJvY3Mg Zm9yIHJlcXVpcmVkIGVxdWFsaXR5IGtleXMgKi8KIAlNZW1vcnlDb250ZXh0IGFycmF5Q29udGV4 dDsgLyogc2Nhbi1saWZlc3BhbiBjb250ZXh0IGZvciBhcnJheSBkYXRhICovCi0KLQkvKiBpbmZv IGFib3V0IGtpbGxlZCBpdGVtcyBpZiBhbnkgKGtpbGxlZEl0ZW1zIGlzIE5VTEwgaWYgbmV2ZXIg dXNlZCkgKi8KLQlpbnQJCSAgICpraWxsZWRJdGVtczsJLyogY3VyclBvcy5pdGVtcyBpbmRleGVz IG9mIGtpbGxlZCBpdGVtcyAqLwotCWludAkJCW51bUtpbGxlZDsJCS8qIG51bWJlciBvZiBjdXJy ZW50bHkgc3RvcmVkIGl0ZW1zICovCi0JYm9vbAkJZHJvcFBpbjsJCS8qIGRyb3AgbGVhZiBwaW4g YmVmb3JlIGJ0Z2V0dHVwbGUgcmV0dXJucz8gKi8KLQotCS8qCi0JICogSWYgd2UgYXJlIGRvaW5n IGFuIGluZGV4LW9ubHkgc2NhbiwgdGhlc2UgYXJlIHRoZSB0dXBsZSBzdG9yYWdlCi0JICogd29y a3NwYWNlcyBmb3IgdGhlIGN1cnJQb3MgYW5kIG1hcmtQb3MgcmVzcGVjdGl2ZWx5LiAgRWFjaCBp cyBvZiBzaXplCi0JICogQkxDS1NaLCBzbyBpdCBjYW4gaG9sZCBhcyBtdWNoIGFzIGEgZnVsbCBw YWdlJ3Mgd29ydGggb2YgdHVwbGVzLgotCSAqLwotCWNoYXIJICAgKmN1cnJUdXBsZXM7CQkvKiB0 dXBsZSBzdG9yYWdlIGZvciBjdXJyUG9zICovCi0JY2hhcgkgICAqbWFya1R1cGxlczsJCS8qIHR1 cGxlIHN0b3JhZ2UgZm9yIG1hcmtQb3MgKi8KLQotCS8qCi0JICogSWYgdGhlIG1hcmtlZCBwb3Np dGlvbiBpcyBvbiB0aGUgc2FtZSBwYWdlIGFzIGN1cnJlbnQgcG9zaXRpb24sIHdlCi0JICogZG9u J3QgdXNlIG1hcmtQb3MsIGJ1dCBqdXN0IGtlZXAgdGhlIG1hcmtlZCBpdGVtSW5kZXggaW4gbWFy a0l0ZW1JbmRleAotCSAqIChhbGwgdGhlIHJlc3Qgb2YgY3VyclBvcyBpcyB2YWxpZCBmb3IgdGhl IG1hcmsgcG9zaXRpb24pLiBIZW5jZSwgdG8KLQkgKiBkZXRlcm1pbmUgaWYgdGhlcmUgaXMgYSBt YXJrLCBmaXJzdCBsb29rIGF0IG1hcmtJdGVtSW5kZXgsIHRoZW4gYXQKLQkgKiBtYXJrUG9zLgot CSAqLwotCWludAkJCW1hcmtJdGVtSW5kZXg7CS8qIGl0ZW1JbmRleCwgb3IgLTEgaWYgbm90IHZh bGlkICovCi0KLQkvKiBrZWVwIHRoZXNlIGxhc3QgaW4gc3RydWN0IGZvciBlZmZpY2llbmN5ICov Ci0JQlRTY2FuUG9zRGF0YSBjdXJyUG9zOwkJLyogY3VycmVudCBwb3NpdGlvbiBkYXRhICovCi0J QlRTY2FuUG9zRGF0YSBtYXJrUG9zOwkJLyogbWFya2VkIHBvc2l0aW9uLCBpZiBhbnkgKi8KIH0g QlRTY2FuT3BhcXVlRGF0YTsKIAogdHlwZWRlZiBCVFNjYW5PcGFxdWVEYXRhICpCVFNjYW5PcGFx dWU7CkBAIC0xMTYwLDE0ICsxMDUwLDE2IEBAIGV4dGVybiBib29sIGJ0aW5zZXJ0KFJlbGF0aW9u IHJlbCwgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLAogZXh0ZXJuIEluZGV4U2NhbkRlc2Mg YnRiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpOwogZXh0 ZXJuIFNpemUgYnRlc3RpbWF0ZXBhcmFsbGVsc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywg aW50IG5vcmRlcmJ5cyk7CiBleHRlcm4gdm9pZCBidGluaXRwYXJhbGxlbHNjYW4odm9pZCAqdGFy Z2V0KTsKLWV4dGVybiBib29sIGJ0Z2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcik7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggYnRnZXRiYXRjaChJbmRleFNjYW5E ZXNjIHNjYW4sCisJCQkJCQkJCSBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLAorCQkJCQkJCQkg U2NhbkRpcmVjdGlvbiBkaXIpOwogZXh0ZXJuIGludDY0IGJ0Z2V0Yml0bWFwKEluZGV4U2NhbkRl c2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pOwogZXh0ZXJuIHZvaWQgYnRyZXNjYW4oSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCiAJCQkJCSBTY2FuS2V5 IG9yZGVyYnlzLCBpbnQgbm9yZGVyYnlzKTsKK2V4dGVybiB2b2lkIGJ0a2lsbGl0ZW1zYmF0Y2go SW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiBleHRlcm4gdm9pZCBi dHBhcmFsbGVscmVzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gdm9pZCBidGVuZHNj YW4oSW5kZXhTY2FuRGVzYyBzY2FuKTsKLWV4dGVybiB2b2lkIGJ0bWFya3BvcyhJbmRleFNjYW5E ZXNjIHNjYW4pOwotZXh0ZXJuIHZvaWQgYnRyZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pOwor ZXh0ZXJuIHZvaWQgYnRwb3NyZXNldChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNo IGJhdGNoKTsKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmJ0YnVsa2RlbGV0ZShJbmRl eFZhY3V1bUluZm8gKmluZm8sCiAJCQkJCQkJCQkJICAgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpz dGF0cywKIAkJCQkJCQkJCQkgICBJbmRleEJ1bGtEZWxldGVDYWxsYmFjayBjYWxsYmFjaywKQEAg LTEyNzEsOCArMTE2Myw5IEBAIGV4dGVybiB2b2lkIF9idF9wcmVwcm9jZXNzX2tleXMoSW5kZXhT Y2FuRGVzYyBzY2FuKTsKIC8qCiAgKiBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4gbmJ0cmVh ZHBhZ2UuYwogICovCi1leHRlcm4gYm9vbCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpciwKLQkJCQkJCSBPZmZzZXROdW1iZXIgb2ZmbnVtLCBib29sIGZp cnN0cGFnZSk7CitleHRlcm4gYm9vbCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBJ bmRleFNjYW5CYXRjaCBuZXdiYXRjaCwKKwkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0 TnVtYmVyIG9mZm51bSwKKwkJCQkJCSBib29sIGZpcnN0cGFnZSk7CiBleHRlcm4gdm9pZCBfYnRf c3RhcnRfYXJyYXlfa2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsK IGV4dGVybiBpbnQJX2J0X2JpbnNyY2hfYXJyYXlfc2tleShGbWdySW5mbyAqb3JkZXJwcm9jLAog CQkJCQkJCQkgICBib29sIGN1cl9lbGVtX3RyaWcsIFNjYW5EaXJlY3Rpb24gZGlyLApAQCAtMTI4 Nyw4ICsxMTgwLDkgQEAgZXh0ZXJuIEJUU3RhY2sgX2J0X3NlYXJjaChSZWxhdGlvbiByZWwsIFJl bGF0aW9uIGhlYXByZWwsIEJUU2Nhbkluc2VydCBrZXksCiAJCQkJCQkgIEJ1ZmZlciAqYnVmUCwg aW50IGFjY2Vzcyk7CiBleHRlcm4gT2Zmc2V0TnVtYmVyIF9idF9iaW5zcmNoX2luc2VydChSZWxh dGlvbiByZWwsIEJUSW5zZXJ0U3RhdGUgaW5zZXJ0c3RhdGUpOwogZXh0ZXJuIGludDMyIF9idF9j b21wYXJlKFJlbGF0aW9uIHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwgUGFnZSBwYWdlLCBPZmZzZXRO dW1iZXIgb2ZmbnVtKTsKLWV4dGVybiBib29sIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKTsKLWV4dGVybiBib29sIF9idF9uZXh0KEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIF9idF9maXJz dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBJbmRleFNj YW5CYXRjaCBfYnRfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAor CQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gpOwogZXh0ZXJuIEJ1ZmZlciBfYnRf Z2V0X2VuZHBvaW50KFJlbGF0aW9uIHJlbCwgdWludDMyIGxldmVsLCBib29sIHJpZ2h0bW9zdCk7 CiAKIC8qCkBAIC0xMjk2LDcgKzExOTAsNiBAQCBleHRlcm4gQnVmZmVyIF9idF9nZXRfZW5kcG9p bnQoUmVsYXRpb24gcmVsLCB1aW50MzIgbGV2ZWwsIGJvb2wgcmlnaHRtb3N0KTsKICAqLwogZXh0 ZXJuIEJUU2Nhbkluc2VydCBfYnRfbWtzY2Fua2V5KFJlbGF0aW9uIHJlbCwgSW5kZXhUdXBsZSBp dHVwKTsKIGV4dGVybiB2b2lkIF9idF9mcmVlc3RhY2soQlRTdGFjayBzdGFjayk7Ci1leHRlcm4g dm9pZCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gQlRDeWNsZUlk IF9idF92YWN1dW1fY3ljbGVpZChSZWxhdGlvbiByZWwpOwogZXh0ZXJuIEJUQ3ljbGVJZCBfYnRf c3RhcnRfdmFjdXVtKFJlbGF0aW9uIHJlbCk7CiBleHRlcm4gdm9pZCBfYnRfZW5kX3ZhY3V1bShS ZWxhdGlvbiByZWwpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKaW5kZXggY2UzNDBjMDc2Li5jM2IwNDY0ZjMg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL3JlbHNjYW4uaApAQCAtMTYsOCArMTYsMTAgQEAKIAogI2luY2x1ZGUgImFjY2Vz cy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJhY2Nlc3MvaXR1cC5oIgorI2luY2x1ZGUgImFj Y2Vzcy9zZGlyLmgiCiAjaW5jbHVkZSAibm9kZXMvdGlkYml0bWFwLmgiCiAjaW5jbHVkZSAicG9y dC9hdG9taWNzLmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWYuaCIKICNpbmNsdWRlICJzdG9yYWdl L3JlbGZpbGVsb2NhdG9yLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zcGluLmgiCiAjaW5jbHVkZSAi dXRpbHMvcmVsY2FjaGUuaCIKQEAgLTEyNCw2ICsxMjYsMTc0IEBAIHR5cGVkZWYgc3RydWN0IElu ZGV4RmV0Y2hUYWJsZURhdGEKIAlSZWxhdGlvbglyZWw7CiB9IEluZGV4RmV0Y2hUYWJsZURhdGE7 CiAKKy8qCisgKiBMb2NhdGlvbiBvZiBhIEJhdGNoTWF0Y2hpbmdJdGVtIHRoYXQgYXBwZWFycyBp biBhIEluZGV4U2NhbkJhdGNoIHJldHVybmVkCisgKiBieSAoYW5kIHN1YnNlcXVlbnRseSBwYXNz ZWQgdG8pIGFuIGFtZ2V0YmF0Y2ggcm91dGluZQorICovCit0eXBlZGVmIHN0cnVjdCBCYXRjaFJp bmdJdGVtUG9zCit7CisJLyogUG9zaXRpb24gcmVmZXJlbmNlcyBhIHZhbGlkIEJhdGNoUmluZ0J1 ZmZlci5iYXRjaGVzW10gZW50cnk/ICovCisJYm9vbAkJdmFsaWQ7CisKKwkvKiBCYXRjaFJpbmdC dWZmZXIuYmF0Y2hlc1tdLXdpc2UgaW5kZXggdG8gcmVsZXZhbnQgSW5kZXhTY2FuQmF0Y2ggKi8K Kwl1aW50OAkJYmF0Y2g7CisKKwkvKiBJbmRleFNjYW5CYXRjaC5pdGVtc1tdLXdpc2UgaW5kZXgg dG8gcmVsZXZhbnQgQmF0Y2hNYXRjaGluZ0l0ZW0gKi8KKwlpbnQJCQlpdGVtOworCit9IEJhdGNo UmluZ0l0ZW1Qb3M7CisKKy8qCisgKiBNYXRjaGluZyBpdGVtIHJldHVybmVkIGJ5IGFtZ2V0YmF0 Y2ggKGluIHJldHVybmVkIEluZGV4U2NhbkJhdGNoKSBkdXJpbmcgYW4KKyAqIGluZGV4IHNjYW4u ICBVc2VkIGJ5IHRhYmxlIEFNIHRvIGxvY2F0ZSByZWxldmFudCBtYXRjaGluZyB0YWJsZSB0dXBs ZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgQmF0Y2hNYXRjaGluZ0l0ZW0KK3sKKwlJdGVtUG9pbnRl ckRhdGEgaGVhcFRpZDsJLyogVElEIG9mIHJlZmVyZW5jZWQgaGVhcCBpdGVtICovCisJT2Zmc2V0 TnVtYmVyIGluZGV4T2Zmc2V0OwkvKiBpbmRleCBpdGVtJ3MgbG9jYXRpb24gd2l0aGluIHBhZ2Ug Ki8KKwlMb2NhdGlvbkluZGV4IHR1cGxlT2Zmc2V0OwkvKiBJbmRleFR1cGxlJ3Mgb2Zmc2V0IGlu IHdvcmtzcGFjZSwgaWYgYW55ICovCit9IEJhdGNoTWF0Y2hpbmdJdGVtOworCisvKgorICogUGVy LWl0ZW0gdmlzaWJpbGl0eSBmbGFncyBmb3IgaW5kZXgtb25seSBzY2Fucy4gIFN0b3JlZCBpbiBh IHNlcGFyYXRlCisgKiBhcnJheSAoSW5kZXhTY2FuQmF0Y2hEYXRhLnZpc0luZm8pIHJhdGhlciB0 aGFuIGluIEJhdGNoTWF0Y2hpbmdJdGVtIHRvIGtlZXAKKyAqIHRoZSBob3QgaXRlbXMgYXJyYXkg Y29tcGFjdC4KKyAqLworI2RlZmluZSBCQVRDSF9WSVNfQ0hFQ0tFRAkJMHgwMQkvKiBoZWFwVGlk IGJsb2NrJ3MgVk0gY2hlY2tlZD8gKi8KKyNkZWZpbmUgQkFUQ0hfVklTX0FMTF9WSVNJQkxFCTB4 MDIJLyogYmxvY2sgaXMga25vd24gYWxsLXZpc2libGU/ICovCisKKy8qCisgKiBEYXRhIGFib3V0 IG9uZSBiYXRjaCBvZiBpdGVtcyByZXR1cm5lZCBieSAoYW5kIHBhc3NlZCB0bykgYW1nZXRiYXRj aCBkdXJpbmcKKyAqIGluZGV4IHNjYW5zCisgKi8KK3R5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJh dGNoRGF0YQoreworCS8qCisJICogSW5mb3JtYXRpb24gb3V0cHV0IGJ5IGFtZ2V0YmF0Y2ggaW5k ZXggQU1zIHVwb24gcmV0dXJuaW5nIGEgYmF0Y2ggd2l0aAorCSAqIG9uZSBvciBtb3JlIG1hdGNo aW5nIGl0ZW1zLCBkZXNjcmliaW5nIGRldGFpbHMgb2YgdGhlIGluZGV4IHBhZ2Ugd2hlcmUKKwkg KiBtYXRjaGVzIHdlcmUgbG9jYXRlZC4KKwkgKgorCSAqIFVzZWQgaW4gdGhlIG5leHQgYW1nZXRi YXRjaCBjYWxsIHRvIGRldGVybWluZSB3aGljaCBpbmRleCBwYWdlIHRvIHJlYWQKKwkgKiBuZXh0 IChvciB0byBkZXRlcm1pbmUgaWYgdGhlcmUncyBubyBmdXJ0aGVyIG1hdGNoZXMgaW4gY3VycmVu dCBzY2FuCisJICogZGlyZWN0aW9uKS4KKwkgKi8KKwlCbG9ja051bWJlciBjdXJyUGFnZTsJCS8q IEluZGV4IHBhZ2Ugd2l0aCBtYXRjaGluZyBpdGVtcyAqLworCUJsb2NrTnVtYmVyIHByZXZQYWdl OwkJLyogY3VyclBhZ2UncyBsZWZ0IGxpbmsgKi8KKwlCbG9ja051bWJlciBuZXh0UGFnZTsJCS8q IGN1cnJQYWdlJ3MgcmlnaHQgbGluayAqLworCisJQnVmZmVyCQlidWY7CQkJLyogY3VyclBhZ2Ug YnVmIChpbnZhbGlkIG1lYW5zIHVucGlubmVkKSAqLworCVhMb2dSZWNQdHIJbHNuOwkJCS8qIGN1 cnJQYWdlJ3MgTFNOICovCisKKwkvKiBzY2FuIGRpcmVjdGlvbiB3aGVuIHRoZSBpbmRleCBwYWdl IHdhcyByZWFkICovCisJU2NhbkRpcmVjdGlvbiBkaXI7CisKKwkvKgorCSAqIGtub3duRW5kTGVm dCBhbmQga25vd25FbmRSaWdodCBhcmUgdXNlZCBieSB0YWJsZSBBTXMgdG8gdHJhY2sgd2hldGhl cgorCSAqIHRoZXJlIG1heSBiZSBtYXRjaGluZyBpbmRleCBlbnRyaWVzIHRvIHRoZSBsZWZ0IGFu ZCByaWdodCBvZiBjdXJyUGFnZSwKKwkgKiByZXNwZWN0aXZlbHkuICBUaGlzIGhlbHBzIHRoZW0g dG8gYXZvaWQgcmVwZWF0ZWRseSBjYWxsaW5nIGFtZ2V0YmF0Y2guCisJICovCisJYm9vbAkJa25v d25FbmRMZWZ0OworCWJvb2wJCWtub3duRW5kUmlnaHQ7CisKKwkvKgorCSAqIG1vcmVMZWZ0IGFu ZCBtb3JlUmlnaHQgYXJlIHVzZWQgYnkgaW5kZXggQU1zIHRvIHRyYWNrIHdoZXRoZXIgdGhlcmUg bWF5CisJICogYmUgbWF0Y2hpbmcgaW5kZXggZW50cmllcyB0byB0aGUgbGVmdCBhbmQgcmlnaHQg Y3VyclBhZ2UsIHJlc3BlY3RpdmVseS4KKwkgKgorCSAqIE5vdGU6IHRoZSBleGFjdCBpbnRlcnBy ZXRhdGlvbiBvZiB0aGVzZSBmaWVsZHMgdmFyaWVzIGFjcm9zcyBpbmRleCBBTXMuCisJICogVGFi bGUgQU1zIG11c3Qgbm90IHJlbHkgb24gdGhlbSBkaXJlY3RseTsgdGhleSBtdXN0IGFsd2F5cyBj YWxsIGluZGV4CisJICogQU0ncyBhbWdldGJhdGNoIHJvdXRpbmUgdG8gZGV0ZXJtaW5lIGlmIHRo ZXJlJ3Mgbm8gbW9yZSBiYXRjaGVzIGluIHRoZQorCSAqIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24u CisJICovCisJYm9vbAkJbW9yZUxlZnQ7CisJYm9vbAkJbW9yZVJpZ2h0OworCisJLyoKKwkgKiBN YXRjaGluZyBpdGVtcyBzdGF0ZSBmb3IgdGhpcyBiYXRjaC4gIE91dHB1dCBieSBpbmRleCBBTSBm b3IgdGFibGUgQU0uCisJICoKKwkgKiBUaGUgaXRlbXMgYXJyYXkgaXMgYWx3YXlzIG9yZGVyZWQg aW4gaW5kZXggb3JkZXIgKGllLCBpbmNyZWFzaW5nCisJICogaW5kZXhvZmZzZXQpLiAgV2hlbiBz Y2FubmluZyBiYWNrd2FyZHMgaXQgaXMgY29udmVuaWVudCBmb3IgaW5kZXggQU1zCisJICogdG8g ZmlsbCB0aGUgYXJyYXkgYmFjay10by1mcm9udCwgc28gd2Ugc3RhcnQgYXQgdGhlIGxhc3Qgc2xv dCBhbmQgZmlsbAorCSAqIGRvd253YXJkcy4gIEhlbmNlIHRoZXkgbmVlZCBhIGZpcnN0LXZhbGlk LWVudHJ5IGFuZCBhIGxhc3QtdmFsaWQtZW50cnkKKwkgKiBjb3VudGVyLgorCSAqLworCWludAkJ CWZpcnN0SXRlbTsJCS8qIGZpcnN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KKwlpbnQJCQls YXN0SXRlbTsJCS8qIGxhc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAqLworCisJLyogaW5mbyBh Ym91dCBraWxsZWQgaXRlbXMgaWYgYW55IChraWxsZWRJdGVtcyBpcyBOVUxMIGlmIG5ldmVyIHVz ZWQpICovCisJaW50CQkJbnVtS2lsbGVkOwkJLyogbnVtYmVyIG9mIGN1cnJlbnRseSBzdG9yZWQg aXRlbXMgKi8KKwlpbnQJCSAgICpraWxsZWRJdGVtczsJLyogaW5kZXhlcyBvZiBraWxsZWQgaXRl bXMgKi8KKworCS8qCisJICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2NhbiwgdGhp cyBhcnJheSBzdG9yZXMgdGhlIHBlci1pdGVtCisJICogdmlzaWJpbGl0eSBmbGFncyBCQVRDSF9W SVNfQ0hFQ0tFRCBhbmQgQkFUQ0hfVklTX0FMTF9WSVNJQkxFCisJICovCisJdWludDgJICAgKnZp c0luZm87CQkvKiBwZXItaXRlbSB2aXNpYmlsaXR5IGZsYWdzLCBvciBOVUxMICovCisKKwkvKgor CSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHRoaXMgaXMgdGhlIHR1cGxl IHN0b3JhZ2Ugd29ya3NwYWNlCisJICogZm9yIHRoZSBtYXRjaGluZyB0dXBsZXMgKHR1cGxlcyBy ZWZlcmVuY2VkIGJ5IGl0ZW1zW10pLiAgSXQgaXMgb2Ygc2l6ZQorCSAqIEJMQ0tTWiwgc28gaXQg Y2FuIGhvbGQgYXMgbXVjaCBhcyBhIGZ1bGwgcGFnZSdzIHdvcnRoIG9mIHR1cGxlcy4KKwkgKgor CSAqIGN1cnJUdXBsZXMgcG9pbnRzIGludG8gdGhlIHRyYWlsaW5nIHBvcnRpb24gb2YgdGhpcyBh bGxvY2F0aW9uLCBqdXN0CisJICogcGFzdCBpdGVtc1tdLiAgSXQgaXMgTlVMTCBmb3IgcGxhaW4g aW5kZXggc2NhbnMuCisJICovCisJY2hhcgkgICAqY3VyclR1cGxlczsJCS8qIHR1cGxlIHN0b3Jh Z2UgZm9yIGl0ZW1zW10gKi8KKwlCYXRjaE1hdGNoaW5nSXRlbSBpdGVtc1tGTEVYSUJMRV9BUlJB WV9NRU1CRVJdOyAvKiBtYXRjaGluZyBpdGVtcyAqLworfSBJbmRleFNjYW5CYXRjaERhdGE7CisK K3R5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YSAqSW5kZXhTY2FuQmF0Y2g7CisKKy8q CisgKiBNYXhpbXVtIG51bWJlciBvZiBiYXRjaGVzIChsZWFmIHBhZ2VzKSB3ZSBjYW4ga2VlcCBp biBtZW1vcnkuICBXZSBuZWVkIGEKKyAqIG1pbmltdW0gb2YgdHdvLCBzaW5jZSB3ZSdsbCBvbmx5 IGNvbnNpZGVyIHJlbGVhc2luZyBvbmUgYmF0Y2ggd2hlbiBhbm90aGVyCisgKiBpcyByZWFkLgor ICovCisjZGVmaW5lIElOREVYX1NDQU5fTUFYX0JBVENIRVMJCTIKKyNkZWZpbmUgSU5ERVhfU0NB Tl9DQUNIRV9CQVRDSEVTCTIKKworLyoKKyAqIFN0YXRlIHVzZWQgYnkgdGFibGUgQU1zIHRvIG1h bmFnZSBhbiBpbmRleCBzY2FuIHRoYXQgdXNlcyB0aGUgYW1nZXRiYXRjaAorICogaW50ZXJmYWNl LiAgU2NhbnMgdXNlIGEgcmluZyBidWZmZXIgb2YgYmF0Y2hlcyByZXR1cm5lZCBieSBhbWdldGJh dGNoLgorICoKKyAqIEJhdGNoZXMgYXJlIGtlcHQgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSB3ZXJl IHJldHVybmVkIGluIGJ5IGFtZ2V0YmF0Y2gsCisgKiBzaW5jZSB0aGF0IGlzIHRoZSBzYW1lIG9y ZGVyIHRoYXQgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IHdpbGwgcmV0dXJuCisgKiBtYXRjaGVz IGluLiAgSG93ZXZlciwgdGFibGUgQU1zIGFyZSBmcmVlIHRvIGZldGNoIHRhYmxlIHR1cGxlcyBp biB3aGF0ZXZlcgorICogb3JkZXIgaXMgbW9zdCBjb252ZW5pZW50L2VmZmljaWVudCAtLSBwcm92 aWRlZCB0aGF0IHN1Y2ggcmVvcmRlcmluZyBjYW5ub3QKKyAqIGFmZmVjdCB0aGUgb3JkZXIgdGhh dCB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QgbGF0ZXIgcmV0dXJucyB0dXBsZXMgaW4uCisgKi8K K3R5cGVkZWYgc3RydWN0IEJhdGNoUmluZ0J1ZmZlcgoreworCS8qIGN1cnJlbnQgcG9zaXRpb25z IGluIGJhdGNoZXNbXSBmb3Igc2NhbiAqLworCUJhdGNoUmluZ0l0ZW1Qb3Mgc2NhblBvczsJLyog c2NhbidzIHJlYWQgcG9zaXRpb24gKi8KKwlCYXRjaFJpbmdJdGVtUG9zIG1hcmtQb3M7CS8qIG1h cmsvcmVzdG9yZSBwb3NpdGlvbiAqLworCisJSW5kZXhTY2FuQmF0Y2ggbWFya0JhdGNoOworCisJ LyoKKwkgKiBoZWFkQmF0Y2ggaXMgYW4gaW5kZXggdG8gdGhlIGVhcmxpZXN0IHN0aWxsLXZhbGlk IGJhdGNoIGluICdiYXRjaGVzJy4KKwkgKiBJbiBwcmFjdGljZSB0aGlzIG11c3QgYmUgdGhlIHNj YW4ncyBjdXJyZW50IHNjYW5Qb3MgYmF0Y2ggKHNjYW5CYXRjaCkuCisJICovCisJdWludDgJCWhl YWRCYXRjaDsKKworCS8qCisJICogbmV4dEJhdGNoIGlzIGFuIGluZGV4IHRvIHRoZSBuZXh0IGVt cHR5IGJhdGNoIHNsb3QgaW4gJ2JhdGNoZXMnLiAgVGhpcworCSAqIGlzIG9ubHkgYWN0dWFsbHkg dXNhYmxlIHdoZW4gdGhlIHNjYW4gaXMgIWluZGV4X3NjYW5fYmF0Y2hfZnVsbCgpLgorCSAqLwor CXVpbnQ4CQluZXh0QmF0Y2g7CisKKwkvKgorCSAqIFNob3VsZCBpbmRleGFtX3V0aWxfYmF0Y2hf cmVsZWFzZSBzYXZlIGNhbGxlcidzIGJhdGNoIGluIGNhY2hlW10/CisJICovCisJYm9vbAkJZG9u ZTsKKworCS8qIEFycmF5IG9mIHBvaW50ZXJzIHRvIGNhY2hlZCByZWN5Y2xhYmxlIGJhdGNoZXMg Ki8KKwlJbmRleFNjYW5CYXRjaCBjYWNoZVtJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVNdOworCisJ LyogQXJyYXkgb2YgcG9pbnRlcnMgdG8gcmluZyBidWZmZXIgYmF0Y2hlcyAqLworCUluZGV4U2Nh bkJhdGNoIGJhdGNoZXNbSU5ERVhfU0NBTl9NQVhfQkFUQ0hFU107CisKK30gQmF0Y2hSaW5nQnVm ZmVyOworCiBzdHJ1Y3QgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uOwogCiAvKgpAQCAtMTQxLDYg KzMxMSwxNSBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCWludAkJCW51bWJl ck9mT3JkZXJCeXM7CS8qIG51bWJlciBvZiBvcmRlcmluZyBvcGVyYXRvcnMgKi8KIAlzdHJ1Y3Qg U2NhbktleURhdGEgKmtleURhdGE7CS8qIGFycmF5IG9mIGluZGV4IHF1YWxpZmllciBkZXNjcmlw dG9ycyAqLwogCXN0cnVjdCBTY2FuS2V5RGF0YSAqb3JkZXJCeURhdGE7CS8qIGFycmF5IG9mIG9y ZGVyaW5nIG9wIGRlc2NyaXB0b3JzICovCisKKwkvKiBpbmRleCBhY2Nlc3MgbWV0aG9kJ3MgcHJp dmF0ZSBzdGF0ZSAqLworCXZvaWQJICAgKm9wYXF1ZTsJCQkvKiBhY2Nlc3MtbWV0aG9kLXNwZWNp ZmljIGluZm8gKi8KKworCS8qIHRhYmxlIGFjY2VzcyBtZXRob2QncyBwcml2YXRlIGFtZ2V0YmF0 Y2ggc3RhdGUgKi8KKwlCYXRjaFJpbmdCdWZmZXIgYmF0Y2hyaW5nYnVmOwkvKiBhbWdldGJhdGNo IHJlbGF0ZWQgc3RhdGUgKi8KKworCWJvb2wJCXVzZWJhdGNocmluZzsJLyogc2NhbiB1c2VzIGFt Z2V0YmF0Y2gvYmF0Y2hyaW5nYnVmPyAqLworCiAJYm9vbAkJeHNfd2FudF9pdHVwOwkvKiBjYWxs ZXIgcmVxdWVzdHMgaW5kZXggdHVwbGVzICovCiAJYm9vbAkJeHNfdGVtcF9zbmFwOwkvKiB1bnJl Z2lzdGVyIHNuYXBzaG90IGF0IHNjYW4gZW5kPyAqLwogCkBAIC0xNDksOSArMzI4LDggQEAgdHlw ZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAlib29sCQlpZ25vcmVfa2lsbGVkX3R1cGxl czsJLyogZG8gbm90IHJldHVybiBraWxsZWQgZW50cmllcyAqLwogCWJvb2wJCXhhY3RTdGFydGVk SW5SZWNvdmVyeTsJLyogcHJldmVudHMga2lsbGluZy9zZWVpbmcga2lsbGVkCiAJCQkJCQkJCQkJ ICogdHVwbGVzICovCi0KLQkvKiBpbmRleCBhY2Nlc3MgbWV0aG9kJ3MgcHJpdmF0ZSBzdGF0ZSAq LwotCXZvaWQJICAgKm9wYXF1ZTsJCQkvKiBhY2Nlc3MtbWV0aG9kLXNwZWNpZmljIGluZm8gKi8K KwkvKiB4c19zbmFwc2hvdCB1c2VzIGFuIE1WQ0Mgc25hcHNob3Q/ICovCisJYm9vbAkJTVZDQ1Nj YW47CiAKIAkvKgogCSAqIEluc3RydW1lbnRhdGlvbiBjb3VudGVycyBtYWludGFpbmVkIGJ5IGFs bCBpbmRleCBBTXMgZHVyaW5nIGJvdGgKQEAgLTE2MCwxMCArMzM4LDEwIEBAIHR5cGVkZWYgc3Ry dWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJc3RydWN0IEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAq aW5zdHJ1bWVudDsKIAogCS8qCi0JICogSW4gYW4gaW5kZXgtb25seSBzY2FuLCBhIHN1Y2Nlc3Nm dWwgYW1nZXR0dXBsZSBjYWxsIG11c3QgZmlsbCBlaXRoZXIKLQkgKiB4c19pdHVwIChhbmQgeHNf aXR1cGRlc2MpIG9yIHhzX2hpdHVwIChhbmQgeHNfaGl0dXBkZXNjKSB0byBwcm92aWRlIHRoZQot CSAqIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHNjYW4uICBJdCBjYW4gZmlsbCBib3RoLCBpbiB3aGlj aCBjYXNlIHRoZSBoZWFwCi0JICogZm9ybWF0IHdpbGwgYmUgdXNlZC4KKwkgKiBJbiBhbiBpbmRl eC1vbmx5IHNjYW4sIGEgc3VjY2Vzc2Z1bCB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QgY2FsbCBt dXN0CisJICogZmlsbCBlaXRoZXIgeHNfaXR1cCAoYW5kIHhzX2l0dXBkZXNjKSBvciB4c19oaXR1 cCAoYW5kIHhzX2hpdHVwZGVzYykgdG8KKwkgKiBwcm92aWRlIHRoZSBkYXRhIHJldHVybmVkIGJ5 IHRoZSBzY2FuLiAgSXQgY2FuIGZpbGwgYm90aCwgaW4gd2hpY2ggY2FzZQorCSAqIHRoZSBoZWFw IGZvcm1hdCB3aWxsIGJlIHVzZWQuCiAJICovCiAJSW5kZXhUdXBsZQl4c19pdHVwOwkJLyogaW5k ZXggdHVwbGUgcmV0dXJuZWQgYnkgQU0gKi8KIAlzdHJ1Y3QgVHVwbGVEZXNjRGF0YSAqeHNfaXR1 cGRlc2M7CS8qIHJvd3R5cGUgZGVzY3JpcHRvciBvZiB4c19pdHVwICovCkBAIC0xNzYsNiArMzU0 LDggQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAlJbmRleEZldGNoVGFibGVE YXRhICp4c19oZWFwZmV0Y2g7CiAKIAlib29sCQl4c19yZWNoZWNrOwkJLyogVCBtZWFucyBzY2Fu IGtleXMgbXVzdCBiZSByZWNoZWNrZWQgKi8KKwlib29sCQl4c192aXNpYmxlOwkJLyogVCBtZWFu cyB0aGUgaGVhcCBwYWdlIGlzIGFsbC12aXNpYmxlICovCisJdWludDE2CQltYXhpdGVtc2JhdGNo OwkvKiBzZXQgYnkgYW1iZWdpbnNjYW4gd2hlbiBhbWdldGJhdGNoIHVzZWQgKi8KIAogCS8qCiAJ ICogV2hlbiBmZXRjaGluZyB3aXRoIGFuIG9yZGVyaW5nIG9wZXJhdG9yLCB0aGUgdmFsdWVzIG9m IHRoZSBPUkRFUiBCWQpAQCAtMjE1LDQgKzM5NSwxMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgU3lzU2Nh bkRlc2NEYXRhCiAJc3RydWN0IFR1cGxlVGFibGVTbG90ICpzbG90OwogfSBTeXNTY2FuRGVzY0Rh dGE7CiAKKy8qCisgKiBDb3VudCBob3cgbWFueSBiYXRjaGVzIGFyZSBjdXJyZW50bHkgbG9hZGVk IGluIHRoZSByaW5nIGJ1ZmZlci4KKyAqLworc3RhdGljIGlubGluZSB1aW50OAoraW5kZXhfc2Nh bl9iYXRjaF9jb3VudChJbmRleFNjYW5EZXNjRGF0YSAqc2NhbikKK3sKKwlyZXR1cm4gKHVpbnQ4 KSAoc2Nhbi0+YmF0Y2hyaW5nYnVmLm5leHRCYXRjaCAtCisJCQkJCXNjYW4tPmJhdGNocmluZ2J1 Zi5oZWFkQmF0Y2gpOworfQorCisvKgorICogRGlkIHdlIGFscmVhZHkgbG9hZCBiYXRjaCB3aXRo IHRoZSByZXF1ZXN0ZWQgaW5kZXg/CisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAoraW5kZXhfc2Nh bl9iYXRjaF9sb2FkZWQoSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4sIHVpbnQ4IGlkeCkKK3sKKwly ZXR1cm4gKGludDgpIChpZHggLSBzY2FuLT5iYXRjaHJpbmdidWYuaGVhZEJhdGNoKSA+PSAwICYm CisJCShpbnQ4KSAoaWR4IC0gc2Nhbi0+YmF0Y2hyaW5nYnVmLm5leHRCYXRjaCkgPCAwOworfQor CisvKgorICogSGF2ZSB3ZSBsb2FkZWQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJhdGNoZXM/Cisg Ki8KK3N0YXRpYyBpbmxpbmUgYm9vbAoraW5kZXhfc2Nhbl9iYXRjaF9mdWxsKEluZGV4U2NhbkRl c2NEYXRhICpzY2FuKQoreworCXJldHVybiBpbmRleF9zY2FuX2JhdGNoX2NvdW50KHNjYW4pID09 IElOREVYX1NDQU5fTUFYX0JBVENIRVM7Cit9CisKKy8qCisgKiBSZXR1cm4gYmF0Y2ggZm9yIHRo ZSBwcm92aWRlZCBpbmRleC4KKyAqLworc3RhdGljIGlubGluZSBJbmRleFNjYW5CYXRjaAoraW5k ZXhfc2Nhbl9iYXRjaChJbmRleFNjYW5EZXNjRGF0YSAqc2NhbiwgdWludDggaWR4KQoreworCUFz c2VydChpbmRleF9zY2FuX2JhdGNoX2xvYWRlZChzY2FuLCBpZHgpKTsKKworCXJldHVybiBzY2Fu LT5iYXRjaHJpbmdidWYuYmF0Y2hlc1tpZHggJiAoSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyAtIDEp XTsKK30KKworLyoKKyAqIEFwcGVuZCBnaXZlbiBiYXRjaCB0byBzY2FuJ3MgYmF0Y2ggcmluZyBi dWZmZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAoraW5kZXhfc2Nhbl9iYXRjaF9hcHBlbmQo SW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCUJhdGNo UmluZ0J1ZmZlciAqcmluZ2J1ZiA9ICZzY2FuLT5iYXRjaHJpbmdidWY7CisJdWludDgJCW5leHRC YXRjaCA9IHJpbmdidWYtPm5leHRCYXRjaDsKKworCXJpbmdidWYtPmJhdGNoZXNbbmV4dEJhdGNo ICYgKElOREVYX1NDQU5fTUFYX0JBVENIRVMgLSAxKV0gPSBiYXRjaDsKKwlyaW5nYnVmLT5uZXh0 QmF0Y2grKzsKK30KKworLyoKKyAqIEFkdmFuY2UgcG9zaXRpb24gdG8gaXRzIG5leHQgaXRlbSBp biB0aGUgYmF0Y2guCisgKgorICogQWR2YW5jZSB0byB0aGUgbmV4dCBpdGVtIHdpdGhpbiB0aGUg cHJvdmlkZWQgYmF0Y2ggKG9yIHRvIHRoZSBwcmV2aW91cyBpdGVtLAorICogd2hlbiBzY2Fubmlu ZyBiYWNrd2FyZHMpLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcG9zaXRpb24gY291bGQg YmUgYWR2YW5jZWQuICBSZXR1cm5zIGZhbHNlIHdoZW4gdGhlcmUKKyAqIGFyZSBubyBtb3JlIGl0 ZW1zIGluIHRoZSBiYXRjaCBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLgorICovCitzdGF0aWMgaW5s aW5lIGJvb2wKK2luZGV4X3NjYW5fcG9zX2FkdmFuY2UoU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24s CisJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoLCBCYXRjaFJpbmdJdGVtUG9zICpwb3MpCit7 CisJQXNzZXJ0KHBvcy0+dmFsaWQpOworCisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGly ZWN0aW9uKSkKKwl7CisJCWlmICgrK3Bvcy0+aXRlbSA+IGJhdGNoLT5sYXN0SXRlbSkKKwkJCXJl dHVybiBmYWxzZTsKKwl9CisJZWxzZQkJCQkJCS8qIFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkICov CisJeworCQlpZiAoLS1wb3MtPml0ZW0gPCBiYXRjaC0+Zmlyc3RJdGVtKQorCQkJcmV0dXJuIGZh bHNlOworCX0KKworCS8qIEFkdmFuY2VkIHdpdGhpbiBiYXRjaCAqLworCXJldHVybiB0cnVlOwor fQorCisvKgorICogQWR2YW5jZSBiYXRjaCBwb3NpdGlvbiB0byB0aGUgc3RhcnQgb2YgaXRzIG5l dyBiYXRjaC4KKyAqCisgKiBTZXRzIHRoZSBnaXZlbiBwb3NpdGlvbiB0byB0aGUgZmlzdCBpdGVt IGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbiAob3IgdG8KKyAqIHRoZSBsYXN0IGl0ZW0sIHdo ZW4gc2Nhbm5pbmcgYmFja3dhcmRzKS4gICBBbHNvIGFkdmFuY2VzL2luY3JlbWVudHMgYmF0Y2gK KyAqIG9mZnNldCBmcm9tIHBvc2l0aW9uIHN1Y2ggdGhhdCBpdCBwb2ludHMgdG8gbmV3QmF0Y2hG b3JQb3MuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAoraW5kZXhfc2Nhbl9wb3NfbmV4dGJhdGNo KFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJIEluZGV4U2NhbkJhdGNoIG5ld0JhdGNo LCBCYXRjaFJpbmdJdGVtUG9zICpwb3MpCit7CisJQXNzZXJ0KG5ld0JhdGNoLT5kaXIgPT0gZGly ZWN0aW9uKTsKKworCS8qIEluY3JlbWVudCBiYXRjaCAob2Z0ZW4gd3JhcHMgdWludDggYmF0Y2gg ZmllbGQpICovCisJaWYgKHBvcy0+dmFsaWQpCisJCXBvcy0+YmF0Y2grKzsKKwllbHNlCisJCXBv cy0+YmF0Y2ggPSAwOworCisJcG9zLT52YWxpZCA9IHRydWU7CisKKwlpZiAoU2NhbkRpcmVjdGlv bklzRm9yd2FyZChkaXJlY3Rpb24pKQorCQlwb3MtPml0ZW0gPSBuZXdCYXRjaC0+Zmlyc3RJdGVt OworCWVsc2UKKwkJcG9zLT5pdGVtID0gbmV3QmF0Y2gtPmxhc3RJdGVtOworfQorCiAjZW5kaWYJ CQkJCQkJLyogUkVMU0NBTl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFi bGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAppbmRleCAxMTk1OTNiN2IuLjg2 MTFiMDNlNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAorKysgYi9z cmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCkBAIC00MzMsMTEgKzQzMywyOSBAQCB0eXBlZGVm IHN0cnVjdCBUYWJsZUFtUm91dGluZQogCSAqLwogCXZvaWQJCSgqaW5kZXhfZmV0Y2hfZW5kKSAo c3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKmRhdGEpOwogCisJLyoKKwkgKiBGZXRjaCB0aGUg bmV4dCB0dXBsZSBmcm9tIGFuIGluZGV4IHNjYW4gaW50byBzbG90LCBzY2FubmluZyBpbiB0aGUK KwkgKiBzcGVjaWZpZWQgZGlyZWN0aW9uLCBhbmQgcmV0dXJuIHRydWUgaWYgYSB0dXBsZSB3YXMg Zm91bmQsIGZhbHNlCisJICogb3RoZXJ3aXNlLgorCSAqCisJICogVGhpcyBjYWxsYmFjayBhbGxv d3MgdGhlIHRhYmxlIEFNIHRvIGRpcmVjdGx5IG1hbmFnZSB0aGUgc2NhbiBwcm9jZXNzLAorCSAq IGluY2x1ZGluZyBpbnRlcmZhY2luZyB3aXRoIHRoZSBpbmRleCBBTS4gVGhlIGNhbGxlciBzaW1w bHkgc3BlY2lmaWVzCisJICogdGhlIGRpcmVjdGlvbiBvZiB0aGUgc2NhbjsgdGhlIHRhYmxlIEFN IHRha2VzIGNhcmUgb2YgcmV0cmlldmluZyBUSURzCisJICogZnJvbSB0aGUgaW5kZXgsIHBlcmZv cm1pbmcgdmlzaWJpbGl0eSBjaGVja3MsIGFuZCByZXR1cm5pbmcgdHVwbGVzIGluCisJICogdGhl IHNsb3QuCisJICovCisJYm9vbAkJKCppbmRleF9nZXRuZXh0X3Nsb3QpIChJbmRleFNjYW5EZXNj IHNjYW4sCisJCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJCSAg IFR1cGxlVGFibGVTbG90ICpzbG90KTsKKwogCS8qCiAJICogRmV0Y2ggdHVwbGUgYXQgYHRpZGAg aW50byBgc2xvdGAsIGFmdGVyIGRvaW5nIGEgdmlzaWJpbGl0eSB0ZXN0CiAJICogYWNjb3JkaW5n IHRvIGBzbmFwc2hvdGAuIElmIGEgdHVwbGUgd2FzIGZvdW5kIGFuZCBwYXNzZWQgdGhlIHZpc2li aWxpdHkKIAkgKiB0ZXN0LCByZXR1cm4gdHJ1ZSwgZmFsc2Ugb3RoZXJ3aXNlLgogCSAqCisJICog VGhpcyBpcyBhIGxvd2VyLWxldmVsIGNhbGxiYWNrIHRoYXQgdGFrZXMgYSBUSUQgZnJvbSB0aGUg Y2FsbGVyLgorCSAqIENhbGxlcnMgc2hvdWxkIGZhdm9yIHRoZSBpbmRleF9nZXRuZXh0X3Nsb3Qg Y2FsbGJhY2sgd2hlbmV2ZXIgcG9zc2libGUuCisJICoKIAkgKiBOb3RlIHRoYXQgQU1zIHRoYXQg ZG8gbm90IG5lY2Vzc2FyaWx5IHVwZGF0ZSBpbmRleGVzIHdoZW4gaW5kZXhlZAogCSAqIGNvbHVt bnMgZG8gbm90IGNoYW5nZSwgbmVlZCB0byByZXR1cm4gdGhlIGN1cnJlbnQvY29ycmVjdCB2ZXJz aW9uIG9mCiAJICogdGhlIHR1cGxlIHRoYXQgaXMgdmlzaWJsZSB0byB0aGUgc25hcHNob3QsIGV2 ZW4gaWYgdGhlIHRpZCBwb2ludHMgdG8gYW4KQEAgLTEyMDgsNiArMTIyNiwyNiBAQCB0YWJsZV9p bmRleF9mZXRjaF9lbmQoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCiAJc2Nhbi0+ cmVsLT5yZF90YWJsZWFtLT5pbmRleF9mZXRjaF9lbmQoc2Nhbik7CiB9CiAKKy8qCisgKiBGZXRj aCB0aGUgbmV4dCB0dXBsZSBmcm9tIGFuIGluZGV4IHNjYW4gaW50byBgc2xvdGAsIHNjYW5uaW5n IGluIHRoZQorICogc3BlY2lmaWVkIGRpcmVjdGlvbi4gUmV0dXJucyB0cnVlIGlmIGEgdHVwbGUg d2FzIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UuCisgKgorICogVGhlIGluZGV4IHNjYW4gc2hvdWxk IGhhdmUgYmVlbiBzdGFydGVkIHZpYSB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbigpLgorICogQ2Fs bGVycyBtdXN0IGNoZWNrIHNjYW4tPnhzX3JlY2hlY2sgYW5kIHJlY2hlY2sgc2NhbiBrZXlzIGlm IHJlcXVpcmVkLgorICoKKyAqIEluZGV4LW9ubHkgc2NhbiBjYWxsZXJzICh0aGF0IHBhc3MgeHNf d2FudF9pdHVwPXRydWUgdG8gaW5kZXhfYmVnaW5zY2FuKQorICogY2FuIGNvbnN1bWUgaW5kZXgg dHVwbGUgcmVzdWx0cyBieSBleGFtaW5pbmcgSW5kZXhTY2FuRGVzY0RhdGEgZmllbGRzIHN1Y2gK KyAqIGFzIHhzX2l0dXAgYW5kIHhzX2hpdHVwLiAgVGhlIHRhYmxlIEFNIHdvbid0IHVzdWFsbHkg ZmV0Y2ggYSBoZWFwIHR1cGxlCisgKiBpbnRvIHRoZSBwcm92aWRlZCBzbG90IGluIHRoZSBjYXNl IG9mIHhzX3dhbnRfaXR1cD10cnVlIGNhbGxlcnMuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAor dGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2MgaXNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyZWN0aW9uLAorCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90KQoreworCXJldHVybiBp c2Nhbi0+aGVhcFJlbGF0aW9uLT5yZF90YWJsZWFtLT5pbmRleF9nZXRuZXh0X3Nsb3QoaXNjYW4s CisJCQkJCQkJCQkJCQkJCQkgICBkaXJlY3Rpb24sIHNsb3QpOworfQorCiAvKgogICogRmV0Y2hl cywgYXMgcGFydCBvZiBhbiBpbmRleCBzY2FuLCB0dXBsZSBhdCBgdGlkYCBpbnRvIGBzbG90YCwg YWZ0ZXIgZG9pbmcKICAqIGEgdmlzaWJpbGl0eSB0ZXN0IGFjY29yZGluZyB0byBgc25hcHNob3Rg LiBJZiBhIHR1cGxlIHdhcyBmb3VuZCBhbmQgcGFzc2VkCkBAIC0xMjMxLDYgKzEyNjksOSBAQCB0 YWJsZV9pbmRleF9mZXRjaF9lbmQoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCiAg KiBlbnRyeSAobGlrZSBoZWFwJ3MgSE9UKS4gV2hlcmVhcyB0YWJsZV90dXBsZV9mZXRjaF9yb3df dmVyc2lvbigpIG9ubHkKICAqIGV2YWx1YXRlcyB0aGUgdHVwbGUgZXhhY3RseSBhdCBgdGlkYC4g T3V0c2lkZSBvZiBpbmRleCBlbnRyeSAtPnRhYmxlIHR1cGxlCiAgKiBsb29rdXBzLCB0YWJsZV90 dXBsZV9mZXRjaF9yb3dfdmVyc2lvbigpIGlzIHdoYXQncyB1c3VhbGx5IG5lZWRlZC4KKyAqCisg KiBUaGlzIGlzIGEgbG93ZXItbGV2ZWwgaW50ZXJmYWNlIHRoYXQgdGFrZXMgYSBUSUQgZnJvbSB0 aGUgY2FsbGVyLiAgQ2FsbGVycworICogc2hvdWxkIGZhdm9yIHRoZSB0YWJsZV9pbmRleF9nZXRu ZXh0X3Nsb3QgaW50ZXJmYWNlIHdoZW5ldmVyIHBvc3NpYmxlLgogICovCiBzdGF0aWMgaW5saW5l IGJvb2wKIHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRh ICpzY2FuLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudF9ub2Rl LmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUuaAppbmRleCA4ODQ3ZDdm OTQuLmI1YjhmNTA5YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVu dF9ub2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudF9ub2RlLmgKQEAg LTQ4LDYgKzQ4LDEyIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbgog ewogCS8qIEluZGV4IHNlYXJjaCBjb3VudCAoaW5jcmVtZW50ZWQgd2l0aCBwZ3N0YXRfY291bnRf aW5kZXhfc2NhbiBjYWxsKSAqLwogCXVpbnQ2NAkJbnNlYXJjaGVzOworCisJLyoKKwkgKiBoZWFw IGJsb2NrcyBmZXRjaGVkIGNvdW50cyAoaW5jcmVtZW50ZWQgYnkgaW5kZXhfZ2V0bmV4dF9zbG90 IGNhbGxzCisJICogd2l0aGluIHRhYmxlIEFNcywgdGhvdWdoIG9ubHkgZHVyaW5nIGluZGV4LW9u bHkgc2NhbnMpCisJICovCisJdWludDY0CQluaGVhcGZldGNoZXM7CiB9IEluZGV4U2Nhbkluc3Ry dW1lbnRhdGlvbjsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rl cy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggNjNjMDY3ZDVhLi43YzFi NDI3ZmIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3Ny Yy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBAIC0xNzIzLDcgKzE3MjMsNyBAQCB0eXBlZGVm IHN0cnVjdCBJbmRleFNjYW5TdGF0ZQogCUV4cHJDb250ZXh0ICppc3NfUnVudGltZUNvbnRleHQ7 CiAJUmVsYXRpb24JaXNzX1JlbGF0aW9uRGVzYzsKIAlzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEg Kmlzc19TY2FuRGVzYzsKLQlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gaXNzX0luc3RydW1lbnQ7 CisJSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppc3NfSW5zdHJ1bWVudDsKIAlTaGFyZWRJbmRl eFNjYW5JbnN0cnVtZW50YXRpb24gKmlzc19TaGFyZWRJbmZvOwogCiAJLyogVGhlc2UgYXJlIG5l ZWRlZCBmb3IgcmUtY2hlY2tpbmcgT1JERVIgQlkgZXhwciBvcmRlcmluZyAqLwpAQCAtMTc1NCw3 ICsxNzU0LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuU3RhdGUKICAqCQlJbnN0cnVtZW50 CQkgICBsb2NhbCBpbmRleCBzY2FuIGluc3RydW1lbnRhdGlvbgogICoJCVNoYXJlZEluZm8JCSAg IHBhcmFsbGVsIHdvcmtlciBpbnN0cnVtZW50YXRpb24gKG5vIGxlYWRlciBlbnRyeSkKICAqCQlU YWJsZVNsb3QJCSAgIHNsb3QgZm9yIGhvbGRpbmcgdHVwbGVzIGZldGNoZWQgZnJvbSB0aGUgdGFi bGUKLSAqCQlWTUJ1ZmZlcgkJICAgYnVmZmVyIGluIHVzZSBmb3IgdmlzaWJpbGl0eSBtYXAgdGVz dGluZywgaWYgYW55CiAgKgkJUHNjYW5MZW4JCSAgIHNpemUgb2YgcGFyYWxsZWwgaW5kZXgtb25s eSBzY2FuIGRlc2NyaXB0b3IKICAqCQlOYW1lQ1N0cmluZ0F0dE51bXMgYXR0bnVtcyBvZiBuYW1l IHR5cGVkIGNvbHVtbnMgdG8gcGFkIHRvIE5BTUVEQVRBTEVOCiAgKgkJTmFtZUNTdHJpbmdDb3Vu dCAgIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgTmFtZUNTdHJpbmdBdHROdW1zIGFycmF5CkBA IC0xNzc0LDEwICsxNzczLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPbmx5U2NhblN0YXRlCiAJ RXhwckNvbnRleHQgKmlvc3NfUnVudGltZUNvbnRleHQ7CiAJUmVsYXRpb24JaW9zc19SZWxhdGlv bkRlc2M7CiAJc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhICppb3NzX1NjYW5EZXNjOwotCUluZGV4 U2Nhbkluc3RydW1lbnRhdGlvbiBpb3NzX0luc3RydW1lbnQ7CisJSW5kZXhTY2FuSW5zdHJ1bWVu dGF0aW9uICppb3NzX0luc3RydW1lbnQ7CiAJU2hhcmVkSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9u ICppb3NzX1NoYXJlZEluZm87CiAJVHVwbGVUYWJsZVNsb3QgKmlvc3NfVGFibGVTbG90OwotCUJ1 ZmZlcgkJaW9zc19WTUJ1ZmZlcjsKIAlTaXplCQlpb3NzX1BzY2FuTGVuOwogCUF0dHJOdW1iZXIg Kmlvc3NfTmFtZUNTdHJpbmdBdHROdW1zOwogCWludAkJCWlvc3NfTmFtZUNTdHJpbmdDb3VudDsK QEAgLTE4MTUsNyArMTgxMyw3IEBAIHR5cGVkZWYgc3RydWN0IEJpdG1hcEluZGV4U2NhblN0YXRl CiAJRXhwckNvbnRleHQgKmJpc3NfUnVudGltZUNvbnRleHQ7CiAJUmVsYXRpb24JYmlzc19SZWxh dGlvbkRlc2M7CiAJc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhICpiaXNzX1NjYW5EZXNjOwotCUlu ZGV4U2Nhbkluc3RydW1lbnRhdGlvbiBiaXNzX0luc3RydW1lbnQ7CisJSW5kZXhTY2FuSW5zdHJ1 bWVudGF0aW9uICpiaXNzX0luc3RydW1lbnQ7CiAJU2hhcmVkSW5kZXhTY2FuSW5zdHJ1bWVudGF0 aW9uICpiaXNzX1NoYXJlZEluZm87CiB9IEJpdG1hcEluZGV4U2NhblN0YXRlOwogCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3Bh dGhub2Rlcy5oCmluZGV4IGMxNzVlZTk1Yi4uZGM5NDQxOWIwIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMu aApAQCAtMTQyMywxMiArMTQyMywxMiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleE9wdEluZm8KIAli b29sCQlhbW9wdGlvbmFsa2V5OwogCWJvb2wJCWFtc2VhcmNoYXJyYXk7CiAJYm9vbAkJYW1zZWFy Y2hudWxsczsKLQkvKiBkb2VzIEFNIGhhdmUgYW1nZXR0dXBsZSBpbnRlcmZhY2U/ICovCi0JYm9v bAkJYW1oYXNnZXR0dXBsZTsKKwkvKiBkb2VzIEFNIGhhdmUgYW1nZXRiYXRjaCAob3IgZ2V0dHVw bGUpIGludGVyZmFjZT8gKi8KKwlib29sCQlhbWhhc2dldGJhdGNoOwogCS8qIGRvZXMgQU0gaGF2 ZSBhbWdldGJpdG1hcCBpbnRlcmZhY2U/ICovCiAJYm9vbAkJYW1oYXNnZXRiaXRtYXA7CiAJYm9v bAkJYW1jYW5wYXJhbGxlbDsKLQkvKiBkb2VzIEFNIGhhdmUgYW1tYXJrcG9zIGludGVyZmFjZT8g Ki8KKwkvKiBpcyBBTSBwcmVwYXJlZCBmb3IgdXMgdG8gcmVzdG9yZSBhIG1hcms/ICovCiAJYm9v bAkJYW1jYW5tYXJrcG9zOwogCS8qIEFNJ3MgY29zdCBlc3RpbWF0b3IgKi8KIAkvKiBSYXRoZXIg dGhhbiBpbmNsdWRlIGFtYXBpLmggaGVyZSwgd2UgZGVjbGFyZSBhbWNvc3Rlc3RpbWF0ZSBsaWtl IHRoaXMgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYwppbmRleCA2ODg3ZTQyMTQuLjNiN2JlYjA2MyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9icmluL2JyaW4uYwpAQCAtMjk0LDEwICsyOTQsMTEgQEAgYnJpbmhhbmRsZXIo UEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gYnJpbmJlZ2luc2NhbiwKIAkJLmFt cmVzY2FuID0gYnJpbnJlc2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBOVUxMLAorCQkuYW1nZXRiYXRj aCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2JhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0g YnJpbmdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGJyaW5lbmRzY2FuLAotCQkuYW1tYXJrcG9z ID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3NyZXNldCA9IE5VTEwsCiAJ CS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9 IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5j CmluZGV4IDZiMTQ4ZTY5YS4uOGY3MDMzZDYyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvZ2luL2dpbmdldC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMKQEAg LTE5NTMsOSArMTk1Myw5IEBAIGdpbmdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJp dG1hcCAqdGJtKQogCSAqIGludG8gdGhlIG1haW4gaW5kZXgsIGFuZCBzbyB3ZSBtaWdodCB2aXNp dCBpdCBhIHNlY29uZCB0aW1lIGR1cmluZyB0aGUKIAkgKiBtYWluIHNjYW4uICBUaGlzIGlzIG9r YXkgYmVjYXVzZSB3ZSdsbCBqdXN0IHJlLXNldCB0aGUgc2FtZSBiaXQgaW4gdGhlCiAJICogYml0 bWFwLiAgKFRoZSBwb3NzaWJpbGl0eSBvZiBkdXBsaWNhdGUgdmlzaXRzIGlzIGEgbWFqb3IgcmVh c29uIHdoeSBHSU4KLQkgKiBjYW4ndCBzdXBwb3J0IHRoZSBhbWdldHR1cGxlIEFQSSwgaG93ZXZl ci4pIE5vdGUgdGhhdCBpdCB3b3VsZCBub3QgZG8KLQkgKiB0byBzY2FuIHRoZSBtYWluIGluZGV4 IGJlZm9yZSB0aGUgcGVuZGluZyBsaXN0LCBzaW5jZSBjb25jdXJyZW50Ci0JICogY2xlYW51cCBj b3VsZCB0aGVuIG1ha2UgdXMgbWlzcyBlbnRyaWVzIGVudGlyZWx5LgorCSAqIGNhbid0IHN1cHBv cnQgZWl0aGVyIHRoZSBhbWdldHR1cGxlIG9yIGFtZ2V0YmF0Y2ggQVBJLikgTm90ZSB0aGF0IGl0 CisJICogd291bGQgbm90IGRvIHRvIHNjYW4gdGhlIG1haW4gaW5kZXggYmVmb3JlIHRoZSBwZW5k aW5nIGxpc3QsIHNpbmNlCisJICogY29uY3VycmVudCBjbGVhbnVwIGNvdWxkIHRoZW4gbWFrZSB1 cyBtaXNzIGVudHJpZXMgZW50aXJlbHkuCiAJICovCiAJc2NhblBlbmRpbmdJbnNlcnQoc2Nhbiwg dGJtLCAmbnRpZHMpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0 aWwuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jCmluZGV4IGZmOTI3Mjc5Yy4u NDFlMDYyNjZkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYwpAQCAtODIsMTAgKzgyLDExIEBA IGdpbmhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gZ2luYmVnaW5z Y2FuLAogCQkuYW1yZXNjYW4gPSBnaW5yZXNjYW4sCiAJCS5hbWdldHR1cGxlID0gTlVMTCwKKwkJ LmFtZ2V0YmF0Y2ggPSBOVUxMLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IE5VTEwsCiAJCS5hbWdl dGJpdG1hcCA9IGdpbmdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGdpbmVuZHNjYW4sCi0JCS5h bW1hcmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0g TlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxs ZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3Qv Z2lzdC5jCmluZGV4IDg1NjVlMjI1Yi4uNWMzOGVhOTkyIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvZ2lzdC9naXN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5j CkBAIC0xMDMsMTAgKzEwMywxMSBAQCBnaXN0aGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQku YW1iZWdpbnNjYW4gPSBnaXN0YmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBnaXN0cmVzY2FuLAog CQkuYW1nZXR0dXBsZSA9IGdpc3RnZXR0dXBsZSwKKwkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAorCQku YW1raWxsaXRlbXNiYXRjaCA9IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IGdpc3RnZXRiaXRtYXAs CiAJCS5hbWVuZHNjYW4gPSBnaXN0ZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5h bXJlc3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBh cmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1w YXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKaW5kZXggZTg4ZGRiMzJh Li41YjVjNWM2ZmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKQEAgLTEwMiwxMCArMTAyLDExIEBA IGhhc2hoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9IGhhc2hiZWdp bnNjYW4sCiAJCS5hbXJlc2NhbiA9IGhhc2hyZXNjYW4sCiAJCS5hbWdldHR1cGxlID0gaGFzaGdl dHR1cGxlLAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2JhdGNoID0gTlVM TCwKIAkJLmFtZ2V0Yml0bWFwID0gaGFzaGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGhhc2hl bmRzY2FuLAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQku YW1wb3NyZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJ LmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IGI4M2UyMDEzZC4u ZDE2NGI5OTIwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFu ZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAg LTE5LDYgKzE5LDcgQEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRlICJh Y2Nlc3MvYW1hcGkuaCIKICNpbmNsdWRlICJhY2Nlc3MvZ2VuYW0uaCIKICNpbmNsdWRlICJhY2Nl c3MvaGVhcGFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2hlYXB0b2FzdC5oIgpAQCAtODQsNyArODUs OCBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfYmVnaW4oUmVsYXRpb24gcmVsKQogCUluZGV4RmV0Y2hI ZWFwRGF0YSAqaHNjYW4gPSBwYWxsb2MwX29iamVjdChJbmRleEZldGNoSGVhcERhdGEpOwogCiAJ aHNjYW4tPnhzX2Jhc2UucmVsID0gcmVsOwotCWhzY2FuLT54c19jYnVmID0gSW52YWxpZEJ1ZmZl cjsKKwloc2Nhbi0+eHNfYmxrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCWhzY2FuLT54c192bV9p dGVtcyA9IDE7CiAKIAlyZXR1cm4gJmhzY2FuLT54c19iYXNlOwogfQpAQCAtOTQsMTEgKzk2LDIx IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQog ewogCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNj YW47CiAKKwkvKiBkcm9wIHBpbiBpZiB0aGVyZSdzIGEgcGlubmVkIGhlYXAgcGFnZSAqLwogCWlm IChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSkKIAl7CiAJCVJlbGVhc2VCdWZmZXIoaHNj YW4tPnhzX2NidWYpOworCisJCS8qIHJlc2V0IHN0YXRlIGFzc29jaWF0ZWQgd2l0aCB4c19jYnVm LCB0b28gKi8KIAkJaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlkQnVmZmVyOworCQloc2Nhbi0+eHNf YmxrID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCX0KKworCS8qCisJICogRGVsaWJlcmF0ZWx5IGRv bid0IGRyb3AgYW55IHZtYnVmIHBpbiBoZXJlLiAgQnV0IGRvIHJlc2V0IHhzX3ZtX2l0ZW1zLAor CSAqIHNvIHRoYXQgcmVzY2FucyBkb24ndCBkbyBhbiBleGNlc3NpdmUgbnVtYmVyIG9mIFZNIGxv b2t1cHMuCisJICovCisJaHNjYW4tPnhzX3ZtX2l0ZW1zID0gMTsKIH0KIAogc3RhdGljIHZvaWQK QEAgLTEwOCw2ICsxMjAsOSBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kKEluZGV4RmV0Y2hUYWJs ZURhdGEgKnNjYW4pCiAKIAloZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbik7CiAKKwlpZiAo aHNjYW4tPnZtYnVmICE9IEludmFsaWRCdWZmZXIpCisJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnZt YnVmKTsKKwogCXBmcmVlKGhzY2FuKTsKIH0KIApAQCAtMTI0LDIzICsxMzksMjkgQEAgaGVhcGFt X2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAogCiAJ QXNzZXJ0KFRUU19JU19CVUZGRVJUVVBMRShzbG90KSk7CiAKLQkvKiBXZSBjYW4gc2tpcCB0aGUg YnVmZmVyLXN3aXRjaGluZyBsb2dpYyBpZiB3ZSdyZSBpbiBtaWQtSE9UIGNoYWluLiAqLwotCWlm ICghKmNhbGxfYWdhaW4pCisJLyogV2UgY2FuIHNraXAgdGhlIGJ1ZmZlci1zd2l0Y2hpbmcgbG9n aWMgaWYgd2UncmUgb24gdGhlIHNhbWUgcGFnZS4gKi8KKwlpZiAoaHNjYW4tPnhzX2JsayAhPSBJ dGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCkpCiAJewotCQkvKiBTd2l0Y2ggdG8gY29ycmVj dCBidWZmZXIgaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5ICovCi0JCUJ1ZmZlcgkJcHJldl9i dWYgPSBoc2Nhbi0+eHNfY2J1ZjsKKwkJQXNzZXJ0KCEqY2FsbF9hZ2Fpbik7CiAKLQkJaHNjYW4t PnhzX2NidWYgPSBSZWxlYXNlQW5kUmVhZEJ1ZmZlcihoc2Nhbi0+eHNfY2J1ZiwKLQkJCQkJCQkJ CQkJICBoc2Nhbi0+eHNfYmFzZS5yZWwsCi0JCQkJCQkJCQkJCSAgSXRlbVBvaW50ZXJHZXRCbG9j a051bWJlcih0aWQpKTsKKwkJLyogUmVtZW1iZXIgdGhpcyBidWZmZXIncyBibG9jayBudW1iZXIg Zm9yIG5leHQgdGltZSAqLworCQloc2Nhbi0+eHNfYmxrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051 bWJlcih0aWQpOworCisJCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSkKKwkJCVJl bGVhc2VCdWZmZXIoaHNjYW4tPnhzX2NidWYpOworCisJCWhzY2FuLT54c19jYnVmID0gUmVhZEJ1 ZmZlcihoc2Nhbi0+eHNfYmFzZS5yZWwsIGhzY2FuLT54c19ibGspOwogCiAJCS8qCi0JCSAqIFBy dW5lIHBhZ2UsIGJ1dCBvbmx5IGlmIHdlIHdlcmVuJ3QgYWxyZWFkeSBvbiB0aGlzIHBhZ2UKKwkJ ICogUHJ1bmUgcGFnZSB3aGVuIGl0IGlzIHBpbm5lZCBmb3IgdGhlIGZpcnN0IHRpbWUKIAkJICov Ci0JCWlmIChwcmV2X2J1ZiAhPSBoc2Nhbi0+eHNfY2J1ZikKLQkJCWhlYXBfcGFnZV9wcnVuZV9v cHQoaHNjYW4tPnhzX2Jhc2UucmVsLCBoc2Nhbi0+eHNfY2J1Zik7CisJCWhlYXBfcGFnZV9wcnVu ZV9vcHQoaHNjYW4tPnhzX2Jhc2UucmVsLCBoc2Nhbi0+eHNfY2J1Zik7CiAJfQogCisJQXNzZXJ0 KEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX2NidWYpKTsKKwlBc3NlcnQoQnVmZmVyR2V0QmxvY2tO dW1iZXIoaHNjYW4tPnhzX2NidWYpID09IGhzY2FuLT54c19ibGspOworCUFzc2VydChoc2Nhbi0+ eHNfYmxrID09IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSk7CisKIAkvKiBPYnRhaW4g c2hhcmUtbG9jayBvbiB0aGUgYnVmZmVyIHNvIHdlIGNhbiBleGFtaW5lIHZpc2liaWxpdHkgKi8K IAlMb2NrQnVmZmVyKGhzY2FuLT54c19jYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7CiAJZ290X2hl YXBfdHVwbGUgPSBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyKHRpZCwKQEAgLTE3Myw2ICsxOTQsNTQ3 IEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAq c2NhbiwKIAlyZXR1cm4gZ290X2hlYXBfdHVwbGU7CiB9CiAKKy8qCisgKiBoZWFwYW1fYmF0Y2hf cmVzb2x2ZV92aXNpYmlsaXR5CisgKgkJT2J0YWluIHZpc2liaWxpdHkgaW5mb3JtYXRpb24gZm9y IGEgVElEIGZyb20gY2FsbGVyJ3MgYmF0Y2guCisgKgorICogQ2FsbGVkIGR1cmluZyBpbmRleC1v bmx5IHNjYW5zLiAgV2UgYWx3YXlzIGNoZWNrIHRoZSB2aXNpYmlsaXR5IG9mIGNhbGxlcidzCisg KiBpdGVtIChhbiBvZmZzZXQgaW50byBjYWxsZXIncyBiYXRjaC0+aXRlbXNbXSBhcnJheSkuICBX ZSBtaWdodCBhbHNvIHNldAorICogdmlzaWJpbGl0eSBpbmZvIGZvciBvdGhlciBpdGVtcyBmcm9t IGNhbGxlcidzIGJhdGNoIG1vcmUgcHJvYWN0aXZlbHkgd2hlbgorICogdGhhdCBtYWtlcyBzZW5z ZS4KKyAqCisgKiBXZSBrZWVwIHR3byBjb21wZXRpbmcgY29uc2lkZXJhdGlvbnMgaW4gYmFsYW5j ZSB3aGVuIGRldGVybWluaW5nIHdoZXRoZXIgdG8KKyAqIGNoZWNrIGFkZGl0aW9uYWwgaXRlbXM6 IHRoZSBuZWVkIHRvIGtlZXAgdGhlIGNvc3Qgb2YgdmlzaWJpbGl0eSBtYXAgYWNjZXNzCisgKiB1 bmRlciBjb250cm9sIHdoZW4gbW9zdCBpdGVtcyB3aWxsIG5ldmVyIGJlIHJldHVybmVkIGJ5IHRo ZSBzY2FuIGFueXdheQorICogKGltcG9ydGFudCBmb3IgaW5uZXIgaW5kZXggc2NhbnMgb2YgYW50 aS1qb2lucyBhbmQgc2VtaS1qb2lucyksIGFuZCB0aGUKKyAqIG5lZWQgdG8gbm90IGhvbGQgb250 byBpbmRleCBsZWFmIHBhZ2VzIGZvciB0b28gbG9uZy4KKyAqCisgKiBOb3RlIG9uIE1lbW9yeSBP cmRlcmluZyBFZmZlY3RzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgor ICogdmlzaWJpbGl0eW1hcF9nZXRfc3RhdHVzIGRvZXMgbm90IGxvY2sgdGhlIHZpc2liaWxpdHkg bWFwIGJ1ZmZlciwgYW5kCisgKiB0aGVyZWZvcmUgdGhlIHJlc3VsdCB3ZSByZWFkIGhlcmUgY291 bGQgYmUgc2xpZ2h0bHkgc3RhbGUuICBIb3dldmVyLCBpdAorICogY2FuJ3QgYmUgc3RhbGUgZW5v dWdoIHRvIG1hdHRlci4KKyAqCisgKiBXZSBuZWVkIHRvIGRldGVjdCBjbGVhcmluZyBhIFZNIGJp dCBkdWUgdG8gYW4gaW5zZXJ0IHJpZ2h0IGF3YXksIGJlY2F1c2UKKyAqIHRoZSB0dXBsZSBpcyBw cmVzZW50IGluIHRoZSBpbmRleCBwYWdlIGJ1dCBub3QgdmlzaWJsZS4gIFRoZSByZWFkaW5nIG9m IHRoZQorICogVElEIGJ5IHRoaXMgc2NhbiAodXNpbmcgYSBzaGFyZWQgbG9jayBvbiB0aGUgaW5k ZXggYnVmZmVyKSBpcyBzZXJpYWxpemVkCisgKiB3aXRoIHRoZSBpbnNlcnQgb2YgdGhlIFRJRCBp bnRvIHRoZSBpbmRleCAodXNpbmcgYW4gZXhjbHVzaXZlIGxvY2sgb24gdGhlCisgKiBpbmRleCBi dWZmZXIpLiAgQmVjYXVzZSB0aGUgVk0gYml0IGlzIGNsZWFyZWQgYmVmb3JlIHVwZGF0aW5nIHRo ZSBpbmRleCwKKyAqIGFuZCBsb2NraW5nL3VubG9ja2luZyBvZiB0aGUgaW5kZXggcGFnZSBhY3Rz IGFzIGEgZnVsbCBtZW1vcnkgYmFycmllciwgd2UKKyAqIGFyZSBzdXJlIHRvIHNlZSB0aGUgY2xl YXJlZCBiaXQgaWYgd2Ugc2VlIGEgcmVjZW50bHktaW5zZXJ0ZWQgVElELgorICoKKyAqIERlbGV0 ZXMgZG8gbm90IHVwZGF0ZSB0aGUgaW5kZXggcGFnZSAob25seSBWQUNVVU0gd2lsbCBjbGVhciBv dXQgdGhlIFRJRCksCisgKiBzbyB0aGUgY2xlYXJpbmcgb2YgdGhlIFZNIGJpdCBieSBhIGRlbGV0 ZSBpcyBub3Qgc2VyaWFsaXplZCB3aXRoIHRoaXMgdGVzdAorICogYmVsb3csIGFuZCB3ZSBtYXkg c2VlIGEgdmFsdWUgdGhhdCBpcyBzaWduaWZpY2FudGx5IHN0YWxlLiAgSG93ZXZlciwgd2UKKyAq IGRvbid0IGNhcmUgYWJvdXQgdGhlIGRlbGV0ZSByaWdodCBhd2F5LCBiZWNhdXNlIHRoZSB0dXBs ZSBpcyBzdGlsbCB2aXNpYmxlCisgKiB1bnRpbCB0aGUgZGVsZXRpbmcgdHJhbnNhY3Rpb24gY29t bWl0cyBvciB0aGUgc3RhdGVtZW50IGVuZHMgKGlmIGl0J3Mgb3VyCisgKiB0cmFuc2FjdGlvbiku ICBJbiBlaXRoZXIgY2FzZSwgdGhlIGxvY2sgb24gdGhlIFZNIGJ1ZmZlciB3aWxsIGhhdmUgYmVl bgorICogcmVsZWFzZWQgKGFjdGluZyBhcyBhIHdyaXRlIGJhcnJpZXIpIGFmdGVyIGNsZWFyaW5n IHRoZSBiaXQuICBBbmQgZm9yIHVzIHRvCisgKiBoYXZlIGEgc25hcHNob3QgdGhhdCBpbmNsdWRl cyB0aGUgZGVsZXRpbmcgdHJhbnNhY3Rpb24gKG1ha2luZyB0aGUgdHVwbGUKKyAqIGludmlzaWJs ZSksIHdlIG11c3QgaGF2ZSBhY3F1aXJlZCBQcm9jQXJyYXlMb2NrIGFmdGVyIHRoYXQgdGltZSwg YWN0aW5nIGFzCisgKiBhIHJlYWQgYmFycmllci4KKyAqCisgKiBJdCdzIHdvcnRoIGdvaW5nIHRo cm91Z2ggdGhpcyBjb21wbGV4aXR5IHRvIGF2b2lkIG5lZWRpbmcgdG8gbG9jayB0aGUgVk0KKyAq IGJ1ZmZlciwgd2hpY2ggY291bGQgY2F1c2Ugc2lnbmlmaWNhbnQgY29udGVudGlvbi4KKyAqLwor c3RhdGljIHZvaWQKK2hlYXBhbV9iYXRjaF9yZXNvbHZlX3Zpc2liaWxpdHkoSW5kZXhTY2FuRGVz YyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwKKwkJCQkJCQkJQmF0Y2hSaW5nSXRlbVBvcyAq cG9zKQoreworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRh ICopIHNjYW4tPnhzX2hlYXBmZXRjaDsKKwlpbnQJCQlwb3NJdGVtID0gcG9zLT5pdGVtOworCWlu dAkJCW5vU2V0SXRlbSwKKwkJCQlzdGVwOworCWJvb2wJCWFsbGJhdGNoaXRlbXZpc2libGU7CisK KwkvKiBEbyBub3RoaW5nIGlmIHdlIGFscmVhZHkgcmVzb2x2ZWQgdmlzaWJpbGl0eSBmb3IgdGhl IGl0ZW0uICovCisJaWYgKGJhdGNoLT52aXNJbmZvW3Bvc0l0ZW1dICYgQkFUQ0hfVklTX0NIRUNL RUQpCisJCXJldHVybjsKKworCS8qIFdlIGJldHRlciBzdGlsbCBoYXZlIGEgcGluIG9uIGJhdGNo J3MgaW5kZXggcGFnZSAqLworCUFzc2VydChCdWZmZXJJc1ZhbGlkKGJhdGNoLT5idWYpKTsKKwor CS8qIERldGVybWluZSB0aGUgcmFuZ2Ugb2YgaXRlbXMgdG8gc2V0IHZpc2liaWxpdHkgZm9yICov CisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoYmF0Y2gtPmRpcikpCisJeworCQlub1NldEl0 ZW0gPSBNaW4oYmF0Y2gtPmxhc3RJdGVtICsgMSwgcG9zSXRlbSArIGhzY2FuLT54c192bV9pdGVt cyk7CisJCWFsbGJhdGNoaXRlbXZpc2libGUgPSBub1NldEl0ZW0gPiBiYXRjaC0+bGFzdEl0ZW0g JiYKKwkJCShwb3NJdGVtID09IGJhdGNoLT5maXJzdEl0ZW0gfHwKKwkJCSAoYmF0Y2gtPnZpc0lu Zm9bYmF0Y2gtPmZpcnN0SXRlbV0gJiBCQVRDSF9WSVNfQ0hFQ0tFRCkpOworCQlzdGVwID0gMTsK Kwl9CisJZWxzZQorCXsKKwkJbm9TZXRJdGVtID0gTWF4KGJhdGNoLT5maXJzdEl0ZW0gLSAxLCBw b3NJdGVtIC0gaHNjYW4tPnhzX3ZtX2l0ZW1zKTsKKwkJYWxsYmF0Y2hpdGVtdmlzaWJsZSA9IG5v U2V0SXRlbSA8IGJhdGNoLT5maXJzdEl0ZW0gJiYKKwkJCShwb3NJdGVtID09IGJhdGNoLT5sYXN0 SXRlbSB8fAorCQkJIChiYXRjaC0+dmlzSW5mb1tiYXRjaC0+bGFzdEl0ZW1dICYgQkFUQ0hfVklT X0NIRUNLRUQpKTsKKwkJc3RlcCA9IC0xOworCX0KKworCS8qCisJICogU2V0IHZpc2liaWxpdHkg aW5mbyBmb3IgYSByYW5nZSBvZiBpdGVtcywgaW4gc2NhbiBvcmRlci4KKwkgKgorCSAqIG5vU2V0 SXRlbSBpcyB0aGUgZmlyc3QgaXRlbSAoaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uKSB0aGF0 IHdvbid0IGJlCisJICogc2V0IGR1cmluZyB0aGlzIGNhbGwuICBub1NldEl0ZW0gb2Z0ZW4gcG9p bnRzIHRvIGp1c3QgcGFzdCB0aGUgZW5kIG9mCisJICogKG9yIGp1c3QgYmVmb3JlIHRoZSBzdGFy dCBvZikgdGhlIGJhdGNoJ3MgJ2l0ZW1zJyBhcnJheS4KKwkgKgorCSAqIFdlIGl0ZXJhdGUgdGhp cyB3YXkgdG8gYXZvaWQgdGhlIG5lZWQgZm9yIDIgZGlyZWN0aW9uLXNwZWNpZmljIGxvb3BzLAor CSAqIHNpbmNlIHRoaXMgaXMgYSBob3QgY29kZSBwYXRoIHRoYXQncyBzZW5zaXRpdmUgdG8gY29k ZSBzaXplIGluY3JlYXNlcy4KKwkgKi8KKwlmb3IgKGludCBzZXRJdGVtID0gcG9zSXRlbTsgc2V0 SXRlbSAhPSBub1NldEl0ZW07IHNldEl0ZW0gKz0gc3RlcCkKKwl7CisJCUl0ZW1Qb2ludGVyIHRp ZCA9ICZiYXRjaC0+aXRlbXNbc2V0SXRlbV0uaGVhcFRpZDsKKwkJdWludDgJCWZsYWdzID0gQkFU Q0hfVklTX0NIRUNLRUQ7CisKKwkJaWYgKFZNX0FMTF9WSVNJQkxFKHNjYW4tPmhlYXBSZWxhdGlv biwKKwkJCQkJCSAgIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKKwkJCQkJCSAgICZo c2Nhbi0+dm1idWYpKQorCQkJZmxhZ3MgfD0gQkFUQ0hfVklTX0FMTF9WSVNJQkxFOworCisJCWJh dGNoLT52aXNJbmZvW3NldEl0ZW1dID0gZmxhZ3M7CisJfQorCisJLyoKKwkgKiBJdCdzIHNhZmUg dG8gZHJvcCB0aGUgYmF0Y2gncyBidWZmZXIgcGluIGFzIHNvb24gYXMgd2UndmUgcmVzb2x2ZWQg dGhlCisJICogdmlzaWJpbGl0eSBzdGF0dXMgb2YgYWxsIG9mIGl0cyBpdGVtcworCSAqLworCWlm IChhbGxiYXRjaGl0ZW12aXNpYmxlICYmIHNjYW4tPk1WQ0NTY2FuKQorCXsKKwkJQXNzZXJ0KGJh dGNoLT52aXNJbmZvW2JhdGNoLT5maXJzdEl0ZW1dICYgQkFUQ0hfVklTX0NIRUNLRUQpOworCQlB c3NlcnQoYmF0Y2gtPnZpc0luZm9bYmF0Y2gtPmxhc3RJdGVtXSAmIEJBVENIX1ZJU19DSEVDS0VE KTsKKworCQlSZWxlYXNlQnVmZmVyKGJhdGNoLT5idWYpOworCQliYXRjaC0+YnVmID0gSW52YWxp ZEJ1ZmZlcjsKKwl9CisKKwkvKgorCSAqIE5leHQgdGltZSBjaGVjayB2aXNpYmlsaXR5IGZvciB0 d2ljZSBhcyBtYW55IGl0ZW1zLiBCdXQgZG9uJ3Qgb3ZlcmZsb3cKKwkgKiB0aGUgbnVtYmVyIG9m IGl0ZW1zIGluIHRoaXMgYmF0Y2ggKGFuZCB0aHVzIGRvbid0IG92ZXJmbG93IElOVF9NQVgpLgor CSAqLworCWlmIChoc2Nhbi0+eHNfdm1faXRlbXMgPCAoYmF0Y2gtPmxhc3RJdGVtIC0gYmF0Y2gt PmZpcnN0SXRlbSkpCisJCWhzY2FuLT54c192bV9pdGVtcyAqPSAyOworfQorCitzdGF0aWMgaW5s aW5lIEl0ZW1Qb2ludGVyCitoZWFwYW1fYmF0Y2hfcmV0dXJuX3RpZChJbmRleFNjYW5EZXNjIHNj YW4sIEluZGV4U2NhbkJhdGNoIHNjYW5CYXRjaCwKKwkJCQkJCUJhdGNoUmluZ0l0ZW1Qb3MgKnNj YW5Qb3MpCit7CisJcGdzdGF0X2NvdW50X2luZGV4X3R1cGxlcyhzY2FuLT5pbmRleFJlbGF0aW9u LCAxKTsKKworCS8qIFNldCB4c19oZWFwdGlkLCB3aGljaCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9z bG90IHdpbGwgbmVlZCAqLworCXNjYW4tPnhzX2hlYXB0aWQgPSBzY2FuQmF0Y2gtPml0ZW1zW3Nj YW5Qb3MtPml0ZW1dLmhlYXBUaWQ7CisKKwlpZiAoIXNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJcmV0 dXJuICZzY2FuLT54c19oZWFwdGlkOworCisJLyoKKwkgKiBJbmRleC1vbmx5IHNjYW4gLS0gc2V0 IHZpc2liaWxpdHkgaW5mbyBmb3IgdGhlIGN1cnJlbnQgc2NhblBvcyBpdGVtCisJICogKHBsdXMg cG9zc2libHkgc29tZSBhZGRpdGlvbmFsIGl0ZW1zIGluIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0 aW9uKQorCSAqLworCWhlYXBhbV9iYXRjaF9yZXNvbHZlX3Zpc2liaWxpdHkoc2Nhbiwgc2NhbkJh dGNoLCBzY2FuUG9zKTsKKwlzY2FuLT54c19pdHVwID0gKEluZGV4VHVwbGUpIChzY2FuQmF0Y2gt PmN1cnJUdXBsZXMgKworCQkJCQkJCQkgIHNjYW5CYXRjaC0+aXRlbXNbc2NhblBvcy0+aXRlbV0u dHVwbGVPZmZzZXQpOworCisJLyogQWxzbyBzZXQgeHNfdmlzaWJsZSwgd2hpY2ggaGVhcGFtX2lu ZGV4X2dldG5leHRfc2xvdCBuZWVkcyB0b28gKi8KKwlzY2FuLT54c192aXNpYmxlID0KKwkJKHNj YW5CYXRjaC0+dmlzSW5mb1tzY2FuUG9zLT5pdGVtXSAmIEJBVENIX1ZJU19BTExfVklTSUJMRSk7 CisKKwlyZXR1cm4gJnNjYW4tPnhzX2hlYXB0aWQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0K KyAqCQloZWFwYW1fYmF0Y2hfZ2V0bmV4dCAtIGdldCB0aGUgbmV4dCBiYXRjaCBvZiBUSURzIGZy b20gYSBzY2FuCisgKgorICogQ2FsbGVkIHdoZW4gd2UgbmVlZCB0byBsb2FkIHRoZSBuZXh0IGJh dGNoIG9mIGluZGV4IGVudHJpZXMgdG8gcHJvY2VzcyBpbgorICogdGhlIGdpdmVuIGRpcmVjdGlv bi4gIENhbGxlciBwYXNzZXMgdXMgYSBiYXRjaCBhbmQgYSBiYXRjaCBwb3NpdGlvbiwgd2hpY2gK KyAqIGhhcyBqdXN0IGJlZW4gdXNlZCB0byByZWFkIGFsbCBpdGVtcyBmcm9tIHRoZSBiYXRjaCBp biB0aGUgZGlyZWN0aW9uIHBhc3NlZAorICogYnkgY2FsbGVyLgorICoKKyAqIFJldHVybnMgdGhl IG5leHQgYmF0Y2ggdG8gYmUgcHJvY2Vzc2VkIGJ5IHRoZSBpbmRleCBzY2FuLCBvciBOVUxMIHdo ZW4KKyAqIHRoZXJlIGFyZSBubyBtb3JlIG1hdGNoZXMgaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0 aW9uLiAgRG9lcyBub3QgYWR2YW5jZQorICogY2FsbGVyJ3MgYmF0Y2ggcG9zaXRpb247IHRoYXQg aXMgbGVmdCB1cCB0byBjYWxsZXIuCisgKgorICogVGhpcyBpcyBhbHNvIHdoZXJlIGJhdGNoZXMg YXJlIGFwcGVuZGVkIHRvIHRoZSBzY2FuJ3MgcmluZyBidWZmZXIuICBXZQorICogZG9uJ3QgZnJl ZSBhbnkgYmF0Y2hlcyBoZXJlLCB0aG91Z2g7IHRoYXQgaXMgYWxzbyBsZWZ0IHVwIHRvIGNhbGxl ci4KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9ob3QgSW5k ZXhTY2FuQmF0Y2gKK2hlYXBhbV9iYXRjaF9nZXRuZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCSBJbmRleFNjYW5CYXRjaCBwcmlvckJhdGNoLCBC YXRjaFJpbmdJdGVtUG9zICpwb3MpCit7CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2ggPSBOVUxMOwor CUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmIFBHX1VTRURfRk9SX0FTU0VSVFNfT05MWSA9 ICZzY2FuLT5iYXRjaHJpbmdidWY7CisKKwkvKiBYWFg6IHdlIHNob3VsZCBhc3NlcnQgdGhhdCBh IHNuYXBzaG90IGlzIHB1c2hlZCBvciByZWdpc3RlcmVkICovCisJQXNzZXJ0KFRyYW5zYWN0aW9u SWRJc1ZhbGlkKFJlY2VudFhtaW4pKTsKKworCWlmICghcHJpb3JCYXRjaCkKKwl7CisJCS8qIEZp cnN0IGNhbGwgZm9yIHRoZSBzY2FuICovCisJCUFzc2VydChwb3MgPT0gJmJhdGNocmluZ2J1Zi0+ c2NhblBvcyk7CisJfQorCWVsc2UgaWYgKHVubGlrZWx5KHByaW9yQmF0Y2gtPmRpciAhPSBkaXJl Y3Rpb24pKQorCXsKKwkJLyoKKwkJICogV2UgZGV0ZWN0ZWQgYSBjaGFuZ2UgaW4gc2NhbiBkaXJl Y3Rpb24gYWNyb3NzIGJhdGNoZXMuICBQcmVwYXJlCisJCSAqIHNjYW4ncyBiYXRjaHJpbmdidWYg c3RhdGUgZm9yIHVzIHRvIGdldCB0aGUgbmV4dCBiYXRjaCBmb3IgdGhlCisJCSAqIG9wcG9zaXRl IHNjYW4gZGlyZWN0aW9uIHRvIHRoZSBvbmUgdXNlZCB3aGVuIHByaW9yQmF0Y2ggd2FzCisJCSAq IHJldHVybmVkIGJ5IGFtZ2V0YmF0Y2guCisJCSAqLworCQl0YWJsZWFtX3V0aWxfYmF0Y2hfZGly Y2hhbmdlKHNjYW4pOworCisJCS8qIHByaW9yQmF0Y2ggaXMgbm93IGJhdGNocmluZ2J1ZidzIG9u bHkgYmF0Y2ggKi8KKwkJQXNzZXJ0KHBvcy0+YmF0Y2ggPT0gYmF0Y2hyaW5nYnVmLT5oZWFkQmF0 Y2gpOworCQlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChzY2FuKSA9PSAxKTsKKwl9CisJ ZWxzZSBpZiAoaW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQoc2NhbiwgcG9zLT5iYXRjaCArIDEpKQor CXsKKwkJLyogTmV4dCBiYXRjaCBhbHJlYWR5IGxvYWRlZCBmb3IgdXMgKi8KKwkJYmF0Y2ggPSBp bmRleF9zY2FuX2JhdGNoKHNjYW4sIHBvcy0+YmF0Y2ggKyAxKTsKKworCQlBc3NlcnQocHJpb3JC YXRjaC0+ZGlyID09IGRpcmVjdGlvbik7CisJCUFzc2VydChiYXRjaC0+ZGlyID09IGRpcmVjdGlv bik7CisJCXJldHVybiBiYXRjaDsKKwl9CisKKwkvKgorCSAqIEFzc2VydCBwcmVjb25kaXRpb25z IGZvciBjYWxsaW5nIGFtZ2V0YmF0Y2guCisJICoKKwkgKiBwcmlvckJhdGNoIGhhZCBiZXR0ZXIg YmUgZm9yIHRoZSBsYXN0IHZhbGlkIGJhdGNoIGN1cnJlbnRseSBpbiB0aGUgcmluZworCSAqIGJ1 ZmZlciAoYmF0Y2hlcyBtdXN0IHN0YXkgaW4gc2NhbiBvcmRlcikuICBJZiBpdCBpc24ndCB0aGVu IHdlIHNob3VsZAorCSAqIGhhdmUgYWxyZWFkeSByZXR1cm5lZCBzb21lIGV4aXN0aW5nIGxvYWRl ZCBiYXRjaCBlYXJsaWVyLgorCSAqLworCUFzc2VydCghaW5kZXhfc2Nhbl9iYXRjaF9mdWxsKHNj YW4pKTsKKwlBc3NlcnQoIXByaW9yQmF0Y2ggfHwKKwkJICAgKGluZGV4X3NjYW5fYmF0Y2hfY291 bnQoc2NhbikgPiAwICYmIHByaW9yQmF0Y2gtPmRpciA9PSBkaXJlY3Rpb24gJiYKKwkJCWluZGV4 X3NjYW5fYmF0Y2goc2NhbiwgYmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2ggLSAxKSA9PSBwcmlvckJh dGNoKSk7CisKKwkvKgorCSAqIEJlZm9yZSB3ZSBjYWxsIGFtZ2V0YmF0Y2ggYWdhaW4sIGNoZWNr IGlmIHByaW9yQmF0Y2ggaXMgYWxyZWFkeSBrbm93bgorCSAqIHRvIGJlIHRoZSBsYXN0IGJhdGNo IHdpdGggbWF0Y2hpbmcgaXRlbXMgaW4gdGhpcyBzY2FuIGRpcmVjdGlvbgorCSAqLworCWlmIChw cmlvckJhdGNoICYmCisJCSgoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pICYmIHBy aW9yQmF0Y2gtPmtub3duRW5kUmlnaHQpIHx8CisJCSAoU2NhbkRpcmVjdGlvbklzQmFja3dhcmQo ZGlyZWN0aW9uKSAmJiBwcmlvckJhdGNoLT5rbm93bkVuZExlZnQpKSkKKwkJcmV0dXJuIE5VTEw7 CisKKwliYXRjaCA9IHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoKHNj YW4sIHByaW9yQmF0Y2gsCisJCQkJCQkJCQkJCQkJICBkaXJlY3Rpb24pOworCWlmIChiYXRjaCkK Kwl7CisJCS8qIFdlIGdvdCB0aGUgYmF0Y2ggZnJvbSB0aGUgQU0gKi8KKwkJQXNzZXJ0KGJhdGNo LT5kaXIgPT0gZGlyZWN0aW9uKTsKKworCQkvKiBBcHBlbmQgYmF0Y2ggdG8gdGhlIGVuZCBvZiBy aW5nIGJ1ZmZlci93cml0ZSBpdCB0byBidWZmZXIgaW5kZXggKi8KKwkJaW5kZXhfc2Nhbl9iYXRj aF9hcHBlbmQoc2NhbiwgYmF0Y2gpOworCisJCS8qCisJCSAqIERyb3AgYmF0Y2gncyBsZWFmIHBh Z2UgcGluIGZvciBwbGFpbiBpbmRleCBzY2Fucy4gIEluZGV4LW9ubHkgc2NhbnMKKwkJICogZGVs YXkgZHJvcHBpbmcgdGhlIHBpbiB1bnRpbCBoZWFwYW1fYmF0Y2hfcmVzb2x2ZV92aXNpYmlsaXR5 IGhhcworCQkgKiBjYWNoZWQgYWxsIHZpc2liaWxpdHkgaW5mby4gIFNlZSBoZWFwYW1fYmF0Y2hf cmVzb2x2ZV92aXNpYmlsaXR5CisJCSAqIGhlYWRlciBjb21tZW50cyBmb3IgYSBmdWxsIGV4cGxh bmF0aW9uIG9mIGVhcmx5IHBpbiBkcm9wcGluZy4KKwkJICovCisJCUFzc2VydChzY2FuLT5NVkND U2NhbiA9PSBJc01WQ0NTbmFwc2hvdChzY2FuLT54c19zbmFwc2hvdCkpOworCQlpZiAoc2Nhbi0+ TVZDQ1NjYW4gJiYgIXNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJeworCQkJUmVsZWFzZUJ1ZmZlcihi YXRjaC0+YnVmKTsKKwkJCWJhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOworCQl9CisJfQorCWVs c2UKKwl7CisJCS8qIGFtZ2V0YmF0Y2ggcmV0dXJuZWQgTlVMTCAqLworCQlpZiAocHJpb3JCYXRj aCkKKwkJeworCQkJLyoKKwkJCSAqIFRoZXJlIGFyZSBubyBmdXJ0aGVyIG1hdGNoZXMgdG8gYmUg Zm91bmQgaW4gdGhlIGN1cnJlbnQgc2NhbgorCQkJICogZGlyZWN0aW9uLCBmb2xsb3dpbmcgcHJp b3JCYXRjaC4gIFJlbWVtYmVyIHRoYXQgcHJpb3JCYXRjaCBpcworCQkJICogdGhlIGxhc3QgYmF0 Y2ggd2l0aCBtYXRjaGluZyBpdGVtcy4KKwkJCSAqLworCQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0Zv cndhcmQoZGlyZWN0aW9uKSkKKwkJCQlwcmlvckJhdGNoLT5rbm93bkVuZFJpZ2h0ID0gdHJ1ZTsK KwkJCWVsc2UKKwkJCQlwcmlvckJhdGNoLT5rbm93bkVuZExlZnQgPSB0cnVlOworCQl9CisJfQor CisJLyogeHNfaGl0dXAgaXMgbm90IHN1cHBvcnRlZCBieSBhbWdldGJhdGNoIHNjYW5zICovCisJ QXNzZXJ0KCFzY2FuLT54c19oaXR1cCk7CisKKwlyZXR1cm4gYmF0Y2g7Cit9CisKKy8qIC0tLS0t LS0tLS0tLS0tLS0KKyAqCQloZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQgLSBnZXQgbmV4dCBUSUQg ZnJvbSBiYXRjaCByaW5nIGJ1ZmZlcgorICoKKyAqIEdldCB0aGUgbmV4dCBUSUQgZnJvbSB0aGUg c2NhbidzIGJhdGNoIHJpbmcgYnVmZmVyLCB3aGVuIG1vdmluZyBpbiB0aGUKKyAqIGdpdmVuIHNj YW4gZGlyZWN0aW9uLgorICogLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgcGdfYXR0cmli dXRlX2hvdCBJdGVtUG9pbnRlcgoraGVhcGFtX2JhdGNoX2dldG5leHRfdGlkKEluZGV4U2NhbkRl c2Mgc2NhbiwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKKwkJCQkJCSBTY2FuRGlyZWN0aW9u IGRpcmVjdGlvbikKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiA9ICZzY2FuLT5i YXRjaHJpbmdidWY7CisJQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcyA9ICZiYXRjaHJpbmdidWYt PnNjYW5Qb3M7CisJSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoID0gTlVMTDsKKworCS8qIHNjYW4g c2hvdWxkIG9ubHkgYmUgcGF1c2VkIHdoZW4gdGhlcmUncyBubyBmcmVlIGJhdGNoIHNsb3RzICov CisJQXNzZXJ0KCFzY2FuUG9zLT52YWxpZCB8fCBiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9PSBz Y2FuUG9zLT5iYXRjaCk7CisJQXNzZXJ0KHNjYW5Qb3MtPnZhbGlkIHx8IGluZGV4X3NjYW5fYmF0 Y2hfY291bnQoc2NhbikgPT0gMCk7CisKKwkvKgorCSAqIENoZWNrIGlmIHRoZXJlJ3MgYW4gZXhp c3RpbmcgbG9hZGVkIHNjYW5CYXRjaCBmb3IgdXMgdG8gcmV0dXJuIHRoZSBuZXh0CisJICogbWF0 Y2hpbmcgaXRlbSdzIFRJRC9pbmRleCB0dXBsZSBmcm9tCisJICovCisJaWYgKHNjYW5Qb3MtPnZh bGlkKQorCXsKKwkJLyoKKwkJICogc2NhblBvcyBpcyB2YWxpZCwgc28gc2NhbkJhdGNoIG11c3Qg YWxyZWFkeSBiZSBsb2FkZWQgaW4gYmF0Y2ggcmluZworCQkgKiBidWZmZXIuICBXZSByZWx5IG9u IHRoYXQgaGVyZS4KKwkJICovCisJCUFzc2VydChiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9PSBz Y2FuUG9zLT5iYXRjaCk7CisKKwkJc2NhbkJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBz Y2FuUG9zLT5iYXRjaCk7CisKKwkJaWYgKGluZGV4X3NjYW5fcG9zX2FkdmFuY2UoZGlyZWN0aW9u LCBzY2FuQmF0Y2gsIHNjYW5Qb3MpKQorCQkJcmV0dXJuIGhlYXBhbV9iYXRjaF9yZXR1cm5fdGlk KHNjYW4sIHNjYW5CYXRjaCwgc2NhblBvcyk7CisJfQorCisJLyoKKwkgKiBFaXRoZXIgcmFuIG91 dCBvZiBpdGVtcyBmcm9tIG91ciBleGlzdGluZyBzY2FuQmF0Y2gsIG9yIGl0IGhhc24ndCBiZWVu CisJICogbG9hZGVkIHlldCAoYmVjYXVzZSB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsIGhlcmUgZm9y IHRoZSBlbnRpcmUgc2NhbikuCisJICogVHJ5IHRvIGFkdmFuY2Ugc2NhbkJhdGNoIHRvIHRoZSBu ZXh0IGJhdGNoIChvciBnZXQgdGhlIGZpcnN0IGJhdGNoKS4KKwkgKi8KKwlzY2FuQmF0Y2ggPSBo ZWFwYW1fYmF0Y2hfZ2V0bmV4dChzY2FuLCBkaXJlY3Rpb24sIHNjYW5CYXRjaCwgc2NhblBvcyk7 CisKKwlpZiAoIXNjYW5CYXRjaCkKKwl7CisJCS8qCisJCSAqIFdlJ3JlIGRvbmU7IG5vIG1vcmUg YmF0Y2hlcyBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbi4KKwkJICoKKwkJICogTm90ZTog c2NhblBvcyBpcyBnZW5lcmFsbHkgc3RpbGwgdmFsaWQgYXQgdGhpcyBwb2ludC4gIFRoZSBzY2Fu CisJCSAqIG1pZ2h0IHN0aWxsIGJhY2sgdXAgaW4gdGhlIG90aGVyIGRpcmVjdGlvbi4KKwkJICov CisJCXJldHVybiBOVUxMOworCX0KKworCS8qCisJICogQWR2YW5jZWQgc2NhbkJhdGNoLiAgTm93 IHBvc2l0aW9uIHNjYW5Qb3MgdG8gdGhlIHN0YXJ0IG9mIG5ldworCSAqIHNjYW5CYXRjaC4KKwkg Ki8KKwlpbmRleF9zY2FuX3Bvc19uZXh0YmF0Y2goZGlyZWN0aW9uLCBzY2FuQmF0Y2gsIHNjYW5Q b3MpOworCUFzc2VydChpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHNjYW5Qb3MtPmJhdGNoKSA9PSBz Y2FuQmF0Y2gpOworCisJLyoKKwkgKiBSZW1vdmUgdGhlIGhlYWQgYmF0Y2ggZnJvbSB0aGUgYmF0 Y2ggcmluZyBidWZmZXIgKGV4Y2VwdCB3aGVuIHRoaXMgbmV3CisJICogc2NhbkJhdGNoIGlzIG91 ciBvbmx5IG9uZSkKKwkgKi8KKwlpZiAoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggIT0gc2NhblBv cy0+YmF0Y2gpCisJeworCQlJbmRleFNjYW5CYXRjaCBoZWFkQmF0Y2ggPSBpbmRleF9zY2FuX2Jh dGNoKHNjYW4sCisJCQkJCQkJCQkJCQkJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpOworCisJCS8q IEFsc28gZnJlZSBvYnNvbGVzY2VudCBoZWFkIGJhdGNoICh1bmxlc3MgaXQgaXMgc2NhbidzIG1h cmtCYXRjaCkgKi8KKwkJdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2goc2NhbiwgaGVhZEJhdGNoKTsK KworCQkvKiBSZW1vdmUgdGhlIGJhdGNoIGZyb20gdGhlIHJpbmcgYnVmZmVyICovCisJCWJhdGNo cmluZ2J1Zi0+aGVhZEJhdGNoKys7CisJfQorCisJLyogSW4gcHJhY3RpY2Ugc2NhbkJhdGNoIHdp bGwgYWx3YXlzIGJlIHRoZSByaW5nIGJ1ZmZlcidzIGhlYWRCYXRjaCAqLworCUFzc2VydChiYXRj aHJpbmdidWYtPmhlYWRCYXRjaCA9PSBzY2FuUG9zLT5iYXRjaCk7CisKKwlyZXR1cm4gaGVhcGFt X2JhdGNoX3JldHVybl90aWQoc2Nhbiwgc2NhbkJhdGNoLCBzY2FuUG9zKTsKK30KKworLyogLS0t LS0tLS0tLS0tLS0tLQorICoJCWluZGV4X2ZldGNoX2hlYXAgLSBnZXQgdGhlIHNjYW4ncyBuZXh0 IGhlYXAgdHVwbGUKKyAqCisgKiBUaGUgcmVzdWx0IGlzIGEgdmlzaWJsZSBoZWFwIHR1cGxlIGFz c29jaWF0ZWQgd2l0aCB0aGUgaW5kZXggVElEIG1vc3QKKyAqIHJlY2VudGx5IGZldGNoZWQgYnkg b3VyIGNhbGxlciBpbiBzY2FuLT54c19oZWFwdGlkLCBvciBOVUxMIGlmIG5vIG1vcmUKKyAqIG1h dGNoaW5nIHR1cGxlcyBleGlzdC4gIChUaGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBtYXRjaGlu ZyB0dXBsZSBiZWNhdXNlCisgKiBvZiBIT1QgY2hhaW5zLCBhbHRob3VnaCB3aGVuIHVzaW5nIGFu IE1WQ0Mgc25hcHNob3QgaXQgc2hvdWxkIGJlIGltcG9zc2libGUKKyAqIGZvciBtb3JlIHRoYW4g b25lIHN1Y2ggdHVwbGUgdG8gZXhpc3QuKQorICoKKyAqIE9uIHN1Y2Nlc3MsIHRoZSBidWZmZXIg Y29udGFpbmluZyB0aGUgaGVhcCB0dXAgaXMgcGlubmVkLiAgVGhlIHBpbiBtdXN0IGJlCisgKiBk cm9wcGVkIGVsc2V3aGVyZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIHBnX2F0 dHJpYnV0ZV9ob3QgYm9vbAoraW5kZXhfZmV0Y2hfaGVhcChJbmRleFNjYW5EZXNjIHNjYW4sIFR1 cGxlVGFibGVTbG90ICpzbG90KQoreworCWJvb2wJCWFsbF9kZWFkID0gZmFsc2U7CisJYm9vbAkJ Zm91bmQ7CisKKwlmb3VuZCA9IGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShzY2FuLT54c19oZWFw ZmV0Y2gsICZzY2FuLT54c19oZWFwdGlkLAorCQkJCQkJCQkJIHNjYW4tPnhzX3NuYXBzaG90LCBz bG90LAorCQkJCQkJCQkJICZzY2FuLT54c19oZWFwX2NvbnRpbnVlLCAmYWxsX2RlYWQpOworCisJ aWYgKGZvdW5kKQorCQlwZ3N0YXRfY291bnRfaGVhcF9mZXRjaChzY2FuLT5pbmRleFJlbGF0aW9u KTsKKworCS8qCisJICogSWYgd2Ugc2Nhbm5lZCBhIHdob2xlIEhPVCBjaGFpbiBhbmQgZm91bmQg b25seSBkZWFkIHR1cGxlcywgcmVtZW1iZXIgaXQKKwkgKiBmb3IgbGF0ZXIuICBXZSBkbyBub3Qg ZG8gdGhpcyB3aGVuIGluIHJlY292ZXJ5IGJlY2F1c2UgaXQgbWF5IHZpb2xhdGUKKwkgKiBNVkND IHRvIGRvIHNvLiAgU2VlIGNvbW1lbnRzIGluIFJlbGF0aW9uR2V0SW5kZXhTY2FuKCkuCisJICov CisJaWYgKCFzY2FuLT54YWN0U3RhcnRlZEluUmVjb3ZlcnkpCisJeworCQlpZiAoc2Nhbi0+dXNl YmF0Y2hyaW5nKQorCQl7CisJCQlpZiAoYWxsX2RlYWQpCisJCQkJdGFibGVhbV91dGlsX2tpbGxf c2NhbnBvc2l0ZW0oc2Nhbik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogVGVsbCBh bWdldHR1cGxlLWJhc2VkIGluZGV4IEFNIHRvIGtpbGwgaXRzIGVudHJ5IGZvciB0aGF0IFRJRAor CQkJICogKHRoaXMgd2lsbCB0YWtlIGVmZmVjdCBpbiB0aGUgbmV4dCBjYWxsLCBpbiBpbmRleF9n ZXRuZXh0X3RpZCkKKwkJCSAqLworCQkJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGFsbF9kZWFk OworCQl9CisJfQorCisJcmV0dXJuIGZvdW5kOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisg KgkJaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdCAtIGdldCB0aGUgbmV4dCB0dXBsZSBmcm9tIGEg c2NhbgorICoKKyAqIFRoZSByZXN1bHQgaXMgdHJ1ZSBpZiBhIHR1cGxlIHNhdGlzZnlpbmcgdGhl IHNjYW4ga2V5cyBhbmQgdGhlIHNuYXBzaG90IHdhcworICogZm91bmQsIGZhbHNlIG90aGVyd2lz ZS4gIFRoZSB0dXBsZSBpcyBzdG9yZWQgaW4gdGhlIHNwZWNpZmllZCBzbG90LgorICoKKyAqIE9u IHN1Y2Nlc3MsIHJlc291cmNlcyAobGlrZSBidWZmZXIgcGlucykgYXJlIGxpa2VseSB0byBiZSBo ZWxkLCBhbmQgd2lsbCBiZQorICogZHJvcHBlZCBieSBhIGZ1dHVyZSBjYWxsIGhlcmUgKG9yIGJ5 IGEgbGF0ZXIgY2FsbCB0byBpbmRleF9lbmRzY2FuKS4KKyAqCisgKiBOb3RlOiBjYWxsZXIgbXVz dCBjaGVjayBzY2FuLT54c19yZWNoZWNrLCBhbmQgcGVyZm9ybSByZWNoZWNraW5nIG9mIHRoZQor ICogc2NhbiBrZXlzIGlmIHJlcXVpcmVkLiAgV2UgZG8gbm90IGRvIHRoYXQgaGVyZSBiZWNhdXNl IHdlIGRvbid0IGhhdmUKKyAqIGVub3VnaCBpbmZvcm1hdGlvbiB0byBkbyBpdCBlZmZpY2llbnRs eSBpbiB0aGUgZ2VuZXJhbCBjYXNlLgorICogLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMg cGdfYXR0cmlidXRlX2hvdCBib29sCitoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkgIFR1cGxlVGFibGVT bG90ICpzbG90KQoreworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhl YXBEYXRhICopIHNjYW4tPnhzX2hlYXBmZXRjaDsKKwlJdGVtUG9pbnRlciB0aWQgPSBOVUxMOwor CisJZm9yICg7OykKKwl7CisJCWlmICghc2Nhbi0+eHNfaGVhcF9jb250aW51ZSkKKwkJeworCQkJ LyoKKwkJCSAqIFNjYW5zIHRoYXQgdXNlIGFuIGFtZ2V0YmF0Y2ggaW5kZXggQU0gYXJlIG1hbmFn ZWQgYnkgaGVhcGFtJ3MKKwkJCSAqIGluZGV4IHNjYW4gbWFuYWdlci4gIFRoaXMgZ2l2ZXMgaGVh cGFtIHRoZSBhYmlsaXR5IHRvIHJlYWQgaGVhcAorCQkJICogdHVwbGVzIGluIGEgZmxleGlibGUg b3JkZXIgdGhhdCBpcyBhdHR1bmVkIHRvIGJvdGggY29zdHMgYW5kCisJCQkgKiBiZW5lZml0cyBv biB0aGUgaGVhcGFtIGFuZCB0YWJsZSBBTSBzaWRlLgorCQkJICoKKwkJCSAqIFNjYW5zIHRoYXQg dXNlIGFuIGFtZ2V0dHVwbGUgaW5kZXggQU0gc2ltcGx5IGNhbGwgdGhyb3VnaCB0bworCQkJICog aW5kZXhfZ2V0bmV4dF90aWQgdG8gZ2V0IHRoZSBuZXh0IFRJRCByZXR1cm5lZCBieSBpbmRleCBB TS4gVGhlCisJCQkgKiBwcm9ncmVzcyBvZiB0aGUgc2NhbiB3aWxsIGJlIHVuZGVyIHRoZSBjb250 cm9sIG9mIGluZGV4IEFNICh3ZQorCQkJICoganVzdCBwYXNzIGl0IHRocm91Z2ggYSBkaXJlY3Rp b24gdG8gZ2V0IHRoZSBuZXh0IHR1cGxlIGluKSwgc28KKwkJCSAqIHdlIGNhbm5vdCByZW9yZGVy IGFueSB3b3JrLgorCQkJICovCisJCQlpZiAoc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCQkJCXRpZCA9 IGhlYXBhbV9iYXRjaF9nZXRuZXh0X3RpZChzY2FuLCBoc2NhbiwgZGlyZWN0aW9uKTsKKwkJCWVs c2UKKwkJCXsKKwkJCQl0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChzY2FuLCBkaXJlY3Rpb24pOwor CisJCQkJaWYgKHRpZCAhPSBOVUxMICYmIHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJCQkJc2Nhbi0+ eHNfdmlzaWJsZSA9IFZNX0FMTF9WSVNJQkxFKHNjYW4tPmhlYXBSZWxhdGlvbiwKKwkJCQkJCQkJ CQkJCQkgIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKKwkJCQkJCQkJCQkJCQkgICZo c2Nhbi0+dm1idWYpOworCQkJfQorCisJCQkvKiBJZiB3ZSdyZSBvdXQgb2YgaW5kZXggZW50cmll cywgd2UncmUgZG9uZSAqLworCQkJaWYgKHRpZCA9PSBOVUxMKQorCQkJCWJyZWFrOworCQl9CisK KwkJLyoKKwkJICogRmV0Y2ggdGhlIG5leHQgKG9yIG9ubHkpIHZpc2libGUgaGVhcCB0dXBsZSBm b3IgdGhpcyBpbmRleCBlbnRyeS4KKwkJICogSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgbG9v cCBhcm91bmQgYW5kIGdyYWIgdGhlIG5leHQgVElEIGZyb20KKwkJICogdGhlIGluZGV4LgorCQkg Ki8KKwkJQXNzZXJ0KEl0ZW1Qb2ludGVySXNWYWxpZCgmc2Nhbi0+eHNfaGVhcHRpZCkpOworCQlp ZiAoIXNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJeworCQkJLyogUGxhaW4gaW5kZXggc2NhbiAqLwor CQkJaWYgKGluZGV4X2ZldGNoX2hlYXAoc2Nhbiwgc2xvdCkpCisJCQkJcmV0dXJuIHRydWU7CisJ CX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogSW5kZXgtb25seSBzY2FuLgorCQkJICoKKwkJ CSAqIFdlIGNhbiBza2lwIHRoZSBoZWFwIGZldGNoIGlmIHRoZSBUSUQgcmVmZXJlbmNlcyBhIGhl YXAgcGFnZSBvbgorCQkJICogd2hpY2ggYWxsIHR1cGxlcyBhcmUga25vd24gdmlzaWJsZSB0byBl dmVyeWJvZHkuICBJbiBhbnkgY2FzZSwKKwkJCSAqIHdlJ2xsIHVzZSB0aGUgaW5kZXggdHVwbGUg bm90IHRoZSBoZWFwIHR1cGxlIGFzIHRoZSBkYXRhCisJCQkgKiBzb3VyY2UuCisJCQkgKi8KKwkJ CWlmICghc2Nhbi0+eHNfdmlzaWJsZSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFJhdHMsIHdlIGhh dmUgdG8gdmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlzaWJpbGl0eS4KKwkJCQkgKi8KKwkJCQlp ZiAoc2Nhbi0+aW5zdHJ1bWVudCkKKwkJCQkJc2Nhbi0+aW5zdHJ1bWVudC0+bmhlYXBmZXRjaGVz Kys7CisKKwkJCQlpZiAoIWluZGV4X2ZldGNoX2hlYXAoc2Nhbiwgc2xvdCkpCisJCQkJCWNvbnRp bnVlOwkvKiBubyB2aXNpYmxlIHR1cGxlLCB0cnkgbmV4dCBpbmRleCBlbnRyeSAqLworCisJCQkJ RXhlY0NsZWFyVHVwbGUoc2xvdCk7CisKKwkJCQkvKgorCQkJCSAqIE9ubHkgTVZDQyBzbmFwc2hv dHMgYXJlIHN1cHBvcnRlZCB3aXRoIHN0YW5kYXJkIGluZGV4LW9ubHkKKwkJCQkgKiBzY2Fucywg c28gdGhlcmUgc2hvdWxkIGJlIG5vIG5lZWQgdG8ga2VlcCBmb2xsb3dpbmcgdGhlIEhPVAorCQkJ CSAqIGNoYWluIG9uY2UgYSB2aXNpYmxlIGVudHJ5IGhhcyBiZWVuIGZvdW5kLiAgT3RoZXIgY2Fs bGVycworCQkJCSAqIChjdXJyZW50bHkgb25seSBzZWxmdW5jcy5jKSB1c2UgU25hcHNob3ROb25W YWN1dW1hYmxlLCBhbmQKKwkJCQkgKiB3YW50IHVzIHRvIGFzc3VtZSB0aGF0IGp1c3QgaGF2aW5n IG9uZSB2aXNpYmxlIHR1cGxlIGluIHRoZQorCQkJCSAqIGhvdCBjaGFpbiBpcyBhbHdheXMgZ29v ZCBlbm91Z2guCisJCQkJICovCisJCQkJQXNzZXJ0KCEoc2Nhbi0+eHNfaGVhcF9jb250aW51ZSAm JgorCQkJCQkJIElzTVZDQ1NuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSkpOworCisJCQkJLyoK KwkJCQkgKiBOb3RlOiBhdCB0aGlzIHBvaW50IHdlIGFyZSBob2xkaW5nIGEgcGluIG9uIHRoZSBo ZWFwIHBhZ2UsCisJCQkJICogYXMgcmVjb3JkZWQgaW4gSW5kZXhGZXRjaEhlYXBEYXRhLnhzX2Ni dWYuICBXZSBjb3VsZAorCQkJCSAqIHJlbGVhc2UgdGhhdCBwaW4gbm93LCBidXQgaXQncyBub3Qg Y2xlYXIgd2hldGhlciBpdCdzIGEgd2luCisJCQkJICogdG8gZG8gc28uICBUaGUgbmV4dCBpbmRl eCBlbnRyeSBtaWdodCByZXF1aXJlIGEgdmlzaXQgdG8KKwkJCQkgKiB0aGUgc2FtZSBoZWFwIHBh Z2UuCisJCQkJICovCisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyoKKwkJCQkgKiBXZSBkaWRu J3QgYWNjZXNzIHRoZSBoZWFwLCBzbyB3ZSdsbCBuZWVkIHRvIHRha2UgYQorCQkJCSAqIHByZWRp Y2F0ZSBsb2NrIGV4cGxpY2l0bHksIGFzIGlmIHdlIGhhZC4gIEZvciBub3cgd2UgZG8KKwkJCQkg KiB0aGF0IGF0IHBhZ2UgbGV2ZWwuCisJCQkJICovCisJCQkJUHJlZGljYXRlTG9ja1BhZ2UoaHNj YW4tPnhzX2Jhc2UucmVsLAorCQkJCQkJCQkgIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlk KSwKKwkJCQkJCQkJICBzY2FuLT54c19zbmFwc2hvdCk7CisJCQl9CisKKwkJCS8qCisJCQkgKiBS ZXR1cm4gbWF0Y2hpbmcgaW5kZXggdHVwbGUgbm93IHNldCBpbiBzY2FuLT54c19pdHVwIChvciBy ZXR1cm4KKwkJCSAqIG1hdGNoaW5nIGhlYXAgdHVwbGUgbm93IHNldCBpbiBzY2FuLT54c19oaXR1 cCkuCisJCQkgKgorCQkJICogTm90ZTogd2Ugd29uJ3QgdXN1YWxseSBoYXZlIGZldGNoZWQgYSBo ZWFwIHR1cGxlIGludG8gY2FsbGVyJ3MKKwkJCSAqIHRhYmxlIHNsb3QuICBUaGlzIGlzIHBlciB0 aGUgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGNvbnRyYWN0CisJCQkgKiBmb3Igc2Nhbi0+eHNf d2FudF9pdHVwIGNhbGxlcnMuCisJCQkgKi8KKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCisJ cmV0dXJuIGZhbHNlOworfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIENhbGxiYWNrcyBmb3Ig bm9uLW1vZGlmeWluZyBvcGVyYXRpb25zIG9uIGluZGl2aWR1YWwgdHVwbGVzIGZvciBoZWFwIEFN CkBAIC03NTMsNyArMTMxNSw4IEBAIGhlYXBhbV9yZWxhdGlvbl9jb3B5X2Zvcl9jbHVzdGVyKFJl bGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5ld0hlYXAsCiAKIAkJdGFibGVTY2FuID0gTlVMTDsK IAkJaGVhcFNjYW4gPSBOVUxMOwotCQlpbmRleFNjYW4gPSBpbmRleF9iZWdpbnNjYW4oT2xkSGVh cCwgT2xkSW5kZXgsIFNuYXBzaG90QW55LCBOVUxMLCAwLCAwKTsKKwkJaW5kZXhTY2FuID0gaW5k ZXhfYmVnaW5zY2FuKE9sZEhlYXAsIE9sZEluZGV4LCBmYWxzZSwgU25hcHNob3RBbnksCisJCQkJ CQkJCQlOVUxMLCAwLCAwKTsKIAkJaW5kZXhfcmVzY2FuKGluZGV4U2NhbiwgTlVMTCwgMCwgTlVM TCwgMCk7CiAJfQogCWVsc2UKQEAgLTc5MCw3ICsxMzUzLDggQEAgaGVhcGFtX3JlbGF0aW9uX2Nv cHlfZm9yX2NsdXN0ZXIoUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gTmV3SGVhcCwKIAogCQlp ZiAoaW5kZXhTY2FuICE9IE5VTEwpCiAJCXsKLQkJCWlmICghaW5kZXhfZ2V0bmV4dF9zbG90KGlu ZGV4U2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNsb3QpKQorCQkJaWYgKCFoZWFwYW1faW5k ZXhfZ2V0bmV4dF9zbG90KGluZGV4U2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sCisJCQkJCQkJ CQkJICAgc2xvdCkpCiAJCQkJYnJlYWs7CiAKIAkJCS8qIFNpbmNlIHdlIHVzZWQgbm8gc2NhbiBr ZXlzLCBzaG91bGQgbmV2ZXIgbmVlZCB0byByZWNoZWNrICovCkBAIC0yNjQ3LDYgKzMyMTEsNyBA QCBzdGF0aWMgY29uc3QgVGFibGVBbVJvdXRpbmUgaGVhcGFtX21ldGhvZHMgPSB7CiAJLmluZGV4 X2ZldGNoX2JlZ2luID0gaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luLAogCS5pbmRleF9mZXRjaF9y ZXNldCA9IGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldCwKIAkuaW5kZXhfZmV0Y2hfZW5kID0gaGVh cGFtX2luZGV4X2ZldGNoX2VuZCwKKwkuaW5kZXhfZ2V0bmV4dF9zbG90ID0gaGVhcGFtX2luZGV4 X2dldG5leHRfc2xvdCwKIAkuaW5kZXhfZmV0Y2hfdHVwbGUgPSBoZWFwYW1faW5kZXhfZmV0Y2hf dHVwbGUsCiAKIAkudHVwbGVfaW5zZXJ0ID0gaGVhcGFtX3R1cGxlX2luc2VydCwKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9pbmRleC9NYWtlZmlsZQppbmRleCA2ZjJlMzA2MWEuLmU2ZDY4MWI0MCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9pbmRleC9NYWtlZmlsZQpAQCAtMTYsNiArMTYsNyBAQCBPQkpTID0gXAogCWFtYXBpLm8gXAog CWFtdmFsaWRhdGUubyBcCiAJZ2VuYW0ubyBcCi0JaW5kZXhhbS5vCisJaW5kZXhhbS5vIFwKKwlp bmRleGJhdGNoLm8KIAogaW5jbHVkZSAkKHRvcF9zcmNkaXIpL3NyYy9iYWNrZW5kL2NvbW1vbi5t awpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2FtYXBpLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaW5kZXgvYW1hcGkuYwppbmRleCBlZmEwMDcwMzAuLmE2OTY1NWRhOSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2FtYXBpLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2luZGV4L2FtYXBpLmMKQEAgLTU1LDYgKzU1LDEwIEBAIEdldEluZGV4QW1Sb3V0 aW5lKE9pZCBhbWhhbmRsZXIpCiAJQXNzZXJ0KHJvdXRpbmUtPmFtcmVzY2FuICE9IE5VTEwpOwog CUFzc2VydChyb3V0aW5lLT5hbWVuZHNjYW4gIT0gTlVMTCk7CiAKKwkvKiBBc3NlcnQgdGhhdCBB TSBkb2Vzbid0IGhhdmUgYW4gaW52YWxpZCBjb21iaW5hdGlvbiBvZiBjYWxsYmFja3MgKi8KKwlB c3NlcnQocm91dGluZS0+YW1raWxsaXRlbXNiYXRjaCA9PSBOVUxMIHx8IHJvdXRpbmUtPmFtZ2V0 YmF0Y2ggIT0gTlVMTCk7CisJQXNzZXJ0KHJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTCB8fCBy b3V0aW5lLT5hbXBvc3Jlc2V0ID09IE5VTEwpOworCiAJcmV0dXJuIHJvdXRpbmU7CiB9CiAKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L2dlbmFtLmMKaW5kZXggNWU4OWI4NmE2Li4xOGRjY2QzYzkgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9pbmRleC9nZW5hbS5jCkBAIC04OSw2ICs4OSw4IEBAIFJlbGF0aW9uR2V0SW5kZXhTY2Fu KFJlbGF0aW9uIGluZGV4UmVsYXRpb24sIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzY2Fu LT54c19zbmFwc2hvdCA9IEludmFsaWRTbmFwc2hvdDsJLyogY2FsbGVyIG11c3QgaW5pdGlhbGl6 ZSB0aGlzICovCiAJc2Nhbi0+bnVtYmVyT2ZLZXlzID0gbmtleXM7CiAJc2Nhbi0+bnVtYmVyT2ZP cmRlckJ5cyA9IG5vcmRlcmJ5czsKKwlzY2FuLT51c2ViYXRjaHJpbmcgPSBmYWxzZTsgLyogc2V0 IGxhdGVyIGZvciBhbWdldGJhdGNoIGNhbGxlcnMgKi8KKwlzY2FuLT54c193YW50X2l0dXAgPSBm YWxzZTsgLyogY2FsbGVyIG11c3QgaW5pdGlhbGl6ZSB0aGlzICovCiAKIAkvKgogCSAqIFdlIGFs bG9jYXRlIGtleSB3b3Jrc3BhY2UgaGVyZSwgYnV0IGl0IHdvbid0IGdldCBmaWxsZWQgdW50aWwg YW1yZXNjYW4uCkBAIC0xMDIsOCArMTA0LDYgQEAgUmVsYXRpb25HZXRJbmRleFNjYW4oUmVsYXRp b24gaW5kZXhSZWxhdGlvbiwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCWVsc2UKIAkJc2Nh bi0+b3JkZXJCeURhdGEgPSBOVUxMOwogCi0Jc2Nhbi0+eHNfd2FudF9pdHVwID0gZmFsc2U7IC8q IG1heSBiZSBzZXQgbGF0ZXIgKi8KLQogCS8qCiAJICogRHVyaW5nIHJlY292ZXJ5IHdlIGlnbm9y ZSBraWxsZWQgdHVwbGVzIGFuZCBkb24ndCBib3RoZXIgdG8ga2lsbCB0aGVtCiAJICogZWl0aGVy LiBXZSBkbyB0aGlzIGJlY2F1c2UgdGhlIHhtaW4gb24gdGhlIHByaW1hcnkgbm9kZSBjb3VsZCBl YXNpbHkgYmUKQEAgLTQ1NCw3ICs0NTQsNyBAQCBzeXN0YWJsZV9iZWdpbnNjYW4oUmVsYXRpb24g aGVhcFJlbGF0aW9uLAogCQkJCWVsb2coRVJST1IsICJjb2x1bW4gaXMgbm90IGluIGluZGV4Iik7 CiAJCX0KIAotCQlzeXNzY2FuLT5pc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsYXRpb24s IGlyZWwsCisJCXN5c3NjYW4tPmlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlvbiwg aXJlbCwgZmFsc2UsCiAJCQkJCQkJCQkJIHNuYXBzaG90LCBOVUxMLCBua2V5cywgMCk7CiAJCWlu ZGV4X3Jlc2NhbihzeXNzY2FuLT5pc2NhbiwgaWR4a2V5LCBua2V5cywgTlVMTCwgMCk7CiAJCXN5 c3NjYW4tPnNjYW4gPSBOVUxMOwpAQCAtNTE3LDcgKzUxNyw4IEBAIHN5c3RhYmxlX2dldG5leHQo U3lzU2NhbkRlc2Mgc3lzc2NhbikKIAogCWlmIChzeXNzY2FuLT5pcmVsKQogCXsKLQkJaWYgKGlu ZGV4X2dldG5leHRfc2xvdChzeXNzY2FuLT5pc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHN5 c3NjYW4tPnNsb3QpKQorCQlpZiAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlz Y2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwKKwkJCQkJCQkJCSBzeXNzY2FuLT5zbG90KSkKIAkJ ewogCQkJYm9vbAkJc2hvdWxkRnJlZTsKIApAQCAtNzE1LDcgKzcxNiw3IEBAIHN5c3RhYmxlX2Jl Z2luc2Nhbl9vcmRlcmVkKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAlpZiAoVHJhbnNhY3Rpb25J ZElzVmFsaWQoQ2hlY2tYaWRBbGl2ZSkpCiAJCWJzeXNzY2FuID0gdHJ1ZTsKIAotCXN5c3NjYW4t PmlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlvbiwgaW5kZXhSZWxhdGlvbiwKKwlz eXNzY2FuLT5pc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsYXRpb24sIGluZGV4UmVsYXRp b24sIGZhbHNlLAogCQkJCQkJCQkJIHNuYXBzaG90LCBOVUxMLCBua2V5cywgMCk7CiAJaW5kZXhf cmVzY2FuKHN5c3NjYW4tPmlzY2FuLCBpZHhrZXksIG5rZXlzLCBOVUxMLCAwKTsKIAlzeXNzY2Fu LT5zY2FuID0gTlVMTDsKQEAgLTczNCw3ICs3MzUsNyBAQCBzeXN0YWJsZV9nZXRuZXh0X29yZGVy ZWQoU3lzU2NhbkRlc2Mgc3lzc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiAJSGVhcFR1 cGxlCWh0dXAgPSBOVUxMOwogCiAJQXNzZXJ0KHN5c3NjYW4tPmlyZWwpOwotCWlmIChpbmRleF9n ZXRuZXh0X3Nsb3Qoc3lzc2Nhbi0+aXNjYW4sIGRpcmVjdGlvbiwgc3lzc2Nhbi0+c2xvdCkpCisJ aWYgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzeXNzY2FuLT5pc2NhbiwgZGlyZWN0aW9uLCBz eXNzY2FuLT5zbG90KSkKIAkJaHR1cCA9IEV4ZWNGZXRjaFNsb3RIZWFwVHVwbGUoc3lzc2Nhbi0+ c2xvdCwgZmFsc2UsIE5VTEwpOwogCiAJLyogU2VlIG5vdGVzIGluIHN5c3RhYmxlX2dldG5leHQg Ki8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCmluZGV4IDQzZjY0YTBlNy4uYTQ4ZjAzZmY0 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKQEAgLTI0LDkgKzI0LDcgQEAKICAqCQlp bmRleF9wYXJhbGxlbHNjYW5faW5pdGlhbGl6ZSAtIGluaXRpYWxpemUgcGFyYWxsZWwgc2Nhbgog ICoJCWluZGV4X3BhcmFsbGVscmVzY2FuICAtIChyZSlzdGFydCBhIHBhcmFsbGVsIHNjYW4gb2Yg YW4gaW5kZXgKICAqCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwgLSBqb2luIHBhcmFsbGVsIGlu ZGV4IHNjYW4KLSAqCQlpbmRleF9nZXRuZXh0X3RpZAktIGdldCB0aGUgbmV4dCBUSUQgZnJvbSBh IHNjYW4KLSAqCQlpbmRleF9mZXRjaF9oZWFwCQktIGdldCB0aGUgc2NhbidzIG5leHQgaGVhcCB0 dXBsZQotICoJCWluZGV4X2dldG5leHRfc2xvdAktIGdldCB0aGUgbmV4dCB0dXBsZSBmcm9tIGEg c2NhbgorICoJCWluZGV4X2dldG5leHRfdGlkCS0gYW1nZXR0dXBsZSB0YWJsZSBBTSBoZWxwZXIg cm91dGluZQogICoJCWluZGV4X2dldGJpdG1hcCAtIGdldCBhbGwgdHVwbGVzIGZyb20gYSBzY2Fu CiAgKgkJaW5kZXhfYnVsa19kZWxldGUJLSBidWxrIGRlbGV0aW9uIG9mIGluZGV4IHR1cGxlcwog ICoJCWluZGV4X3ZhY3V1bV9jbGVhbnVwCS0gcG9zdC1kZWxldGlvbiBjbGVhbnVwIG9mIGFuIGlu ZGV4CkBAIC0yNTUsNiArMjUzLDcgQEAgaW5kZXhfaW5zZXJ0X2NsZWFudXAoUmVsYXRpb24gaW5k ZXhSZWxhdGlvbiwKIEluZGV4U2NhbkRlc2MKIGluZGV4X2JlZ2luc2NhbihSZWxhdGlvbiBoZWFw UmVsYXRpb24sCiAJCQkJUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKKwkJCQlib29sIHhzX3dhbnRf aXR1cCwKIAkJCQlTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQlJbmRleFNjYW5JbnN0cnVtZW50YXRp b24gKmluc3RydW1lbnQsCiAJCQkJaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQpAQCAtMjgxLDcg KzI4MCwxMyBAQCBpbmRleF9iZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCSAqLwog CXNjYW4tPmhlYXBSZWxhdGlvbiA9IGhlYXBSZWxhdGlvbjsKIAlzY2FuLT54c19zbmFwc2hvdCA9 IHNuYXBzaG90OworCXNjYW4tPk1WQ0NTY2FuID0gSXNNVkNDU25hcHNob3Qoc25hcHNob3QpOwog CXNjYW4tPmluc3RydW1lbnQgPSBpbnN0cnVtZW50OworCXNjYW4tPnhzX3dhbnRfaXR1cCA9IHhz X3dhbnRfaXR1cDsKKwlzY2FuLT51c2ViYXRjaHJpbmcgPSBmYWxzZTsKKworCWlmIChpbmRleFJl bGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAhPSBOVUxMKQorCQlpbmRleF9iYXRjaHNjYW5f aW5pdChzY2FuKTsKIAogCS8qIHByZXBhcmUgdG8gZmV0Y2ggaW5kZXggbWF0Y2hlcyBmcm9tIHRh YmxlICovCiAJc2Nhbi0+eHNfaGVhcGZldGNoID0gdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oaGVh cFJlbGF0aW9uKTsKQEAgLTMxMiw2ICszMTcsNyBAQCBpbmRleF9iZWdpbnNjYW5fYml0bWFwKFJl bGF0aW9uIGluZGV4UmVsYXRpb24sCiAJICogdXAgYnkgUmVsYXRpb25HZXRJbmRleFNjYW4uCiAJ ICovCiAJc2Nhbi0+eHNfc25hcHNob3QgPSBzbmFwc2hvdDsKKwlzY2FuLT5NVkNDU2NhbiA9IElz TVZDQ1NuYXBzaG90KHNuYXBzaG90KTsKIAlzY2FuLT5pbnN0cnVtZW50ID0gaW5zdHJ1bWVudDsK IAogCXJldHVybiBzY2FuOwpAQCAtMzgwLDYgKzM4NiwxMiBAQCBpbmRleF9yZXNjYW4oSW5kZXhT Y2FuRGVzYyBzY2FuLAogCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBmYWxzZTsgLyogZm9yIHNh ZmV0eSAqLwogCXNjYW4tPnhzX2hlYXBfY29udGludWUgPSBmYWxzZTsKIAorCWlmIChzY2FuLT51 c2ViYXRjaHJpbmcpCisJeworCQlBc3NlcnQoIXNjYW4tPmJhdGNocmluZ2J1Zi5kb25lKTsKKwkJ aW5kZXhfYmF0Y2hzY2FuX3Jlc2V0KHNjYW4pOworCX0KKwogCXNjYW4tPmluZGV4UmVsYXRpb24t PnJkX2luZGFtLT5hbXJlc2NhbihzY2FuLCBrZXlzLCBua2V5cywKIAkJCQkJCQkJCQkJb3JkZXJi eXMsIG5vcmRlcmJ5cyk7CiB9CkBAIC0zOTQsNiArNDA2LDEwIEBAIGluZGV4X2VuZHNjYW4oSW5k ZXhTY2FuRGVzYyBzY2FuKQogCVNDQU5fQ0hFQ0tTOwogCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFt ZW5kc2Nhbik7CiAKKwkvKiBDbGVhbnVwIGJhdGNoaW5nLCBzbyB0aGF0IHRoZSBBTSBjYW4gcmVs ZWFzZSBwaW5zIGFuZCBzbyBvbi4gKi8KKwlpZiAoc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCQlpbmRl eF9iYXRjaHNjYW5fZW5kKHNjYW4pOworCiAJLyogUmVsZWFzZSByZXNvdXJjZXMgKGxpa2UgYnVm ZmVyIHBpbnMpIGZyb20gdGFibGUgYWNjZXNzZXMgKi8KIAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNo KQogCXsKQEAgLTQyMiwyNCArNDM4LDI1IEBAIHZvaWQKIGluZGV4X21hcmtwb3MoSW5kZXhTY2Fu RGVzYyBzY2FuKQogewogCVNDQU5fQ0hFQ0tTOwotCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtbWFy a3Bvcyk7CisJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1nZXRiYXRjaCk7CiAKLQlzY2FuLT5pbmRl eFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1tYXJrcG9zKHNjYW4pOworCS8qIE9ubHkgYW1nZXRiYXRj aCBpbmRleCBBTXMgc3VwcG9ydCBtYXJrIGFuZCByZXN0b3JlICovCisJaW5kZXhfYmF0Y2hzY2Fu X21hcmtfcG9zKHNjYW4pOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJaW5kZXhfcmVz dHJwb3MJLSByZXN0b3JlIGEgc2NhbiBwb3NpdGlvbgogICoKLSAqIE5PVEU6IHRoaXMgb25seSBy ZXN0b3JlcyB0aGUgaW50ZXJuYWwgc2NhbiBzdGF0ZSBvZiB0aGUgaW5kZXggQU0uICBTZWUKLSAq IGNvbW1lbnRzIGZvciBFeGVjUmVzdHJQb3MoKS4KKyAqIE5PVEU6IHRoaXMgb25seSByZXN0b3Jl cyB0aGUgYmF0Y2ggcG9zaXRpb25hbCBzdGF0ZSBzaGFyZWQgYnkgdGhlIHRhYmxlIGFuZAorICog aW5kZXggQU1zLiAgU2VlIGNvbW1lbnRzIGZvciBFeGVjUmVzdHJQb3MoKS4KICAqCiAgKiBOT1RF OiBGb3IgaGVhcCwgaW4gdGhlIHByZXNlbmNlIG9mIEhPVCBjaGFpbnMsIG1hcmsvcmVzdG9yZSBv bmx5IHdvcmtzCiAgKiBjb3JyZWN0bHkgaWYgdGhlIHNjYW4ncyBzbmFwc2hvdCBpcyBNVkNDLXNh ZmU7IHRoYXQgZW5zdXJlcyB0aGF0IHRoZXJlJ3MgYXQKICAqIG1vc3Qgb25lIHJldHVybmFibGUg dHVwbGUgaW4gZWFjaCBIT1QgY2hhaW4sIGFuZCBzbyByZXN0b3JpbmcgdGhlIHByaW9yCi0gKiBz dGF0ZSBhdCB0aGUgZ3JhbnVsYXJpdHkgb2YgdGhlIGluZGV4IEFNIGlzIHN1ZmZpY2llbnQuICBT aW5jZSB0aGUgb25seQotICogY3VycmVudCB1c2VyIG9mIG1hcmsvcmVzdG9yZSBmdW5jdGlvbmFs aXR5IGlzIG5vZGVNZXJnZWpvaW4uYywgdGhpcwotICogZWZmZWN0aXZlbHkgbWVhbnMgdGhhdCBt ZXJnZS1qb2luIHBsYW5zIG9ubHkgd29yayBmb3IgTVZDQyBzbmFwc2hvdHMuICBUaGlzCi0gKiBj b3VsZCBiZSBmaXhlZCBpZiBuZWNlc3NhcnksIGJ1dCBmb3Igbm93IGl0IHNlZW1zIHVuaW1wb3J0 YW50LgorICogc3RhdGUgYXQgdGhlIHNjYW4gaXRlbSBncmFudWxhcml0eSBpcyBzdWZmaWNpZW50 LiAgU2luY2UgdGhlIG9ubHkgY3VycmVudAorICogdXNlciBvZiBtYXJrL3Jlc3RvcmUgZnVuY3Rp b25hbGl0eSBpcyBub2RlTWVyZ2Vqb2luLmMsIHRoaXMgZWZmZWN0aXZlbHkKKyAqIG1lYW5zIHRo YXQgbWVyZ2Utam9pbiBwbGFucyBvbmx5IHdvcmsgZm9yIE1WQ0Mgc25hcHNob3RzLiAgVGhpcyBj b3VsZCBiZQorICogZml4ZWQgaWYgbmVjZXNzYXJ5LCBidXQgZm9yIG5vdyBpdCBzZWVtcyB1bmlt cG9ydGFudC4KICAqIC0tLS0tLS0tLS0tLS0tLS0KICAqLwogdm9pZApAQCAtNDQ4LDE2ICs0NjUs MTYgQEAgaW5kZXhfcmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogCUFzc2VydChJc01WQ0NT bmFwc2hvdChzY2FuLT54c19zbmFwc2hvdCkpOwogCiAJU0NBTl9DSEVDS1M7Ci0JQ0hFQ0tfU0NB Tl9QUk9DRURVUkUoYW1yZXN0cnBvcyk7CisJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1nZXRiYXRj aCk7CiAKIAkvKiByZWxlYXNlIHJlc291cmNlcyAobGlrZSBidWZmZXIgcGlucykgZnJvbSB0YWJs ZSBhY2Nlc3NlcyAqLwogCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCiAJCXRhYmxlX2luZGV4X2Zl dGNoX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CiAKLQlzY2FuLT5raWxsX3ByaW9yX3R1cGxl ID0gZmFsc2U7IC8qIGZvciBzYWZldHkgKi8KLQlzY2FuLT54c19oZWFwX2NvbnRpbnVlID0gZmFs c2U7CisJLyogYWxzbyBub3RpZnkgdGFibGUgQU0gYW5kIGluZGV4IEFNICovCisJaW5kZXhfYmF0 Y2hzY2FuX3Jlc3RvcmVfcG9zKHNjYW4pOwogCi0Jc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5k YW0tPmFtcmVzdHJwb3Moc2Nhbik7CisJc2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZhbHNlOyAv KiBmb3Igc2FmZXR5ICovCiB9CiAKIC8qCkBAIC01NzksNiArNTk2LDEyIEBAIGluZGV4X3BhcmFs bGVscmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQog CQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2FuLT54c19oZWFwZmV0Y2gpOwogCisJaWYgKHNj YW4tPnVzZWJhdGNocmluZykKKwl7CisJCUFzc2VydCghc2Nhbi0+YmF0Y2hyaW5nYnVmLmRvbmUp OworCQlpbmRleF9iYXRjaHNjYW5fcmVzZXQoc2Nhbik7CisJfQorCiAJLyogYW1wYXJhbGxlbHJl c2NhbiBpcyBvcHRpb25hbDsgYXNzdW1lIG5vLW9wIGlmIG5vdCBwcm92aWRlZCBieSBBTSAqLwog CWlmIChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1wYXJhbGxlbHJlc2NhbiAhPSBO VUxMKQogCQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1wYXJhbGxlbHJlc2Nhbihz Y2FuKTsKQEAgLTU5MSw2ICs2MTQsNyBAQCBpbmRleF9wYXJhbGxlbHJlc2NhbihJbmRleFNjYW5E ZXNjIHNjYW4pCiAgKi8KIEluZGV4U2NhbkRlc2MKIGluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChS ZWxhdGlvbiBoZWFwcmVsLCBSZWxhdGlvbiBpbmRleHJlbCwKKwkJCQkJCSBib29sIHhzX3dhbnRf aXR1cCwKIAkJCQkJCSBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQsCiAJCQkJ CQkgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzLAogCQkJCQkJIFBhcmFsbGVsSW5kZXhTY2FuRGVz YyBwc2NhbikKQEAgLTYxMiw3ICs2MzYsMTIgQEAgaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJl bGF0aW9uIGhlYXByZWwsIFJlbGF0aW9uIGluZGV4cmVsLAogCSAqLwogCXNjYW4tPmhlYXBSZWxh dGlvbiA9IGhlYXByZWw7CiAJc2Nhbi0+eHNfc25hcHNob3QgPSBzbmFwc2hvdDsKKwlzY2FuLT5N VkNDU2NhbiA9IElzTVZDQ1NuYXBzaG90KHNuYXBzaG90KTsKIAlzY2FuLT5pbnN0cnVtZW50ID0g aW5zdHJ1bWVudDsKKwlzY2FuLT54c193YW50X2l0dXAgPSB4c193YW50X2l0dXA7CisKKwlpZiAo aW5kZXhyZWwtPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpCisJCWluZGV4X2JhdGNoc2Nh bl9pbml0KHNjYW4pOwogCiAJLyogcHJlcGFyZSB0byBmZXRjaCBpbmRleCBtYXRjaGVzIGZyb20g dGFibGUgKi8KIAlzY2FuLT54c19oZWFwZmV0Y2ggPSB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbiho ZWFwcmVsKTsKQEAgLTYyMSwxMCArNjUwLDE0IEBAIGluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChS ZWxhdGlvbiBoZWFwcmVsLCBSZWxhdGlvbiBpbmRleHJlbCwKIH0KIAogLyogLS0tLS0tLS0tLS0t LS0tLQotICogaW5kZXhfZ2V0bmV4dF90aWQgLSBnZXQgdGhlIG5leHQgVElEIGZyb20gYSBzY2Fu CisgKiBpbmRleF9nZXRuZXh0X3RpZCAtIGFtZ2V0dHVwbGUgaW50ZXJmYWNlCiAgKgogICogVGhl IHJlc3VsdCBpcyB0aGUgbmV4dCBUSUQgc2F0aXNmeWluZyB0aGUgc2NhbiBrZXlzLAogICogb3Ig TlVMTCBpZiBubyBtb3JlIG1hdGNoaW5nIHR1cGxlcyBleGlzdC4KKyAqCisgKiBUaGlzIHNob3Vs ZCBvbmx5IGJlIGNhbGxlZCBieSB0YWJsZSBBTSdzIGluZGV4X2dldG5leHRfc2xvdCBpbXBsZW1l bnRhdGlvbiwKKyAqIGFuZCBvbmx5IGdpdmVuIGFuIGluZGV4IEFNIHRoYXQgc3VwcG9ydHMgdGhl IHNpbmdsZS10dXBsZSBhbWdldHR1cGxlCisgKiBpbnRlcmZhY2UuCiAgKiAtLS0tLS0tLS0tLS0t LS0tCiAgKi8KIEl0ZW1Qb2ludGVyCkBAIC02NjcsOTcgKzcwMCw2IEBAIGluZGV4X2dldG5leHRf dGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiAJcmV0dXJu ICZzY2FuLT54c19oZWFwdGlkOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tCi0gKgkJaW5kZXhf ZmV0Y2hfaGVhcCAtIGdldCB0aGUgc2NhbidzIG5leHQgaGVhcCB0dXBsZQotICoKLSAqIFRoZSBy ZXN1bHQgaXMgYSB2aXNpYmxlIGhlYXAgdHVwbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbmRleCBU SUQgbW9zdAotICogcmVjZW50bHkgZmV0Y2hlZCBieSBpbmRleF9nZXRuZXh0X3RpZCwgb3IgTlVM TCBpZiBubyBtb3JlIG1hdGNoaW5nIHR1cGxlcwotICogZXhpc3QuICAoVGhlcmUgY2FuIGJlIG1v cmUgdGhhbiBvbmUgbWF0Y2hpbmcgdHVwbGUgYmVjYXVzZSBvZiBIT1QgY2hhaW5zLAotICogYWx0 aG91Z2ggd2hlbiB1c2luZyBhbiBNVkNDIHNuYXBzaG90IGl0IHNob3VsZCBiZSBpbXBvc3NpYmxl IGZvciBtb3JlIHRoYW4KLSAqIG9uZSBzdWNoIHR1cGxlIHRvIGV4aXN0LikKLSAqCi0gKiBPbiBz dWNjZXNzLCB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGhlYXAgdHVwIGlzIHBpbm5lZCAodGhl IHBpbiB3aWxsIGJlCi0gKiBkcm9wcGVkIGluIGEgZnV0dXJlIGluZGV4X2dldG5leHRfdGlkLCBp bmRleF9mZXRjaF9oZWFwIG9yIGluZGV4X2VuZHNjYW4KLSAqIGNhbGwpLgotICoKLSAqIE5vdGU6 IGNhbGxlciBtdXN0IGNoZWNrIHNjYW4tPnhzX3JlY2hlY2ssIGFuZCBwZXJmb3JtIHJlY2hlY2tp bmcgb2YgdGhlCi0gKiBzY2FuIGtleXMgaWYgcmVxdWlyZWQuICBXZSBkbyBub3QgZG8gdGhhdCBo ZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZQotICogZW5vdWdoIGluZm9ybWF0aW9uIHRvIGRvIGl0 IGVmZmljaWVudGx5IGluIHRoZSBnZW5lcmFsIGNhc2UuCi0gKiAtLS0tLS0tLS0tLS0tLS0tCi0g Ki8KLWJvb2wKLWluZGV4X2ZldGNoX2hlYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUdXBsZVRhYmxl U2xvdCAqc2xvdCkKLXsKLQlib29sCQlhbGxfZGVhZCA9IGZhbHNlOwotCWJvb2wJCWZvdW5kOwot Ci0JZm91bmQgPSB0YWJsZV9pbmRleF9mZXRjaF90dXBsZShzY2FuLT54c19oZWFwZmV0Y2gsICZz Y2FuLT54c19oZWFwdGlkLAotCQkJCQkJCQkJc2Nhbi0+eHNfc25hcHNob3QsIHNsb3QsCi0JCQkJ CQkJCQkmc2Nhbi0+eHNfaGVhcF9jb250aW51ZSwgJmFsbF9kZWFkKTsKLQotCWlmIChmb3VuZCkK LQkJcGdzdGF0X2NvdW50X2hlYXBfZmV0Y2goc2Nhbi0+aW5kZXhSZWxhdGlvbik7Ci0KLQkvKgot CSAqIElmIHdlIHNjYW5uZWQgYSB3aG9sZSBIT1QgY2hhaW4gYW5kIGZvdW5kIG9ubHkgZGVhZCB0 dXBsZXMsIHRlbGwgaW5kZXgKLQkgKiBBTSB0byBraWxsIGl0cyBlbnRyeSBmb3IgdGhhdCBUSUQg KHRoaXMgd2lsbCB0YWtlIGVmZmVjdCBpbiB0aGUgbmV4dAotCSAqIGFtZ2V0dHVwbGUgY2FsbCwg aW4gaW5kZXhfZ2V0bmV4dF90aWQpLiAgV2UgZG8gbm90IGRvIHRoaXMgd2hlbiBpbgotCSAqIHJl Y292ZXJ5IGJlY2F1c2UgaXQgbWF5IHZpb2xhdGUgTVZDQyB0byBkbyBzby4gIFNlZSBjb21tZW50 cyBpbgotCSAqIFJlbGF0aW9uR2V0SW5kZXhTY2FuKCkuCi0JICovCi0JaWYgKCFzY2FuLT54YWN0 U3RhcnRlZEluUmVjb3ZlcnkpCi0JCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBhbGxfZGVhZDsK LQotCXJldHVybiBmb3VuZDsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLQotICoJCWluZGV4X2dl dG5leHRfc2xvdCAtIGdldCB0aGUgbmV4dCB0dXBsZSBmcm9tIGEgc2NhbgotICoKLSAqIFRoZSBy ZXN1bHQgaXMgdHJ1ZSBpZiBhIHR1cGxlIHNhdGlzZnlpbmcgdGhlIHNjYW4ga2V5cyBhbmQgdGhl IHNuYXBzaG90IHdhcwotICogZm91bmQsIGZhbHNlIG90aGVyd2lzZS4gIFRoZSB0dXBsZSBpcyBz dG9yZWQgaW4gdGhlIHNwZWNpZmllZCBzbG90LgotICoKLSAqIE9uIHN1Y2Nlc3MsIHJlc291cmNl cyAobGlrZSBidWZmZXIgcGlucykgYXJlIGxpa2VseSB0byBiZSBoZWxkLCBhbmQgd2lsbCBiZQot ICogZHJvcHBlZCBieSBhIGZ1dHVyZSBpbmRleF9nZXRuZXh0X3RpZCwgaW5kZXhfZmV0Y2hfaGVh cCBvciBpbmRleF9lbmRzY2FuCi0gKiBjYWxsKS4KLSAqCi0gKiBOb3RlOiBjYWxsZXIgbXVzdCBj aGVjayBzY2FuLT54c19yZWNoZWNrLCBhbmQgcGVyZm9ybSByZWNoZWNraW5nIG9mIHRoZQotICog c2NhbiBrZXlzIGlmIHJlcXVpcmVkLiAgV2UgZG8gbm90IGRvIHRoYXQgaGVyZSBiZWNhdXNlIHdl IGRvbid0IGhhdmUKLSAqIGVub3VnaCBpbmZvcm1hdGlvbiB0byBkbyBpdCBlZmZpY2llbnRseSBp biB0aGUgZ2VuZXJhbCBjYXNlLgotICogLS0tLS0tLS0tLS0tLS0tLQotICovCi1ib29sCi1pbmRl eF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlv biwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCi17Ci0JZm9yICg7OykKLQl7Ci0JCWlmICghc2Nhbi0+ eHNfaGVhcF9jb250aW51ZSkKLQkJewotCQkJSXRlbVBvaW50ZXIgdGlkOwotCi0JCQkvKiBUaW1l IHRvIGZldGNoIHRoZSBuZXh0IFRJRCBmcm9tIHRoZSBpbmRleCAqLwotCQkJdGlkID0gaW5kZXhf Z2V0bmV4dF90aWQoc2NhbiwgZGlyZWN0aW9uKTsKLQotCQkJLyogSWYgd2UncmUgb3V0IG9mIGlu ZGV4IGVudHJpZXMsIHdlJ3JlIGRvbmUgKi8KLQkJCWlmICh0aWQgPT0gTlVMTCkKLQkJCQlicmVh azsKLQotCQkJQXNzZXJ0KEl0ZW1Qb2ludGVyRXF1YWxzKHRpZCwgJnNjYW4tPnhzX2hlYXB0aWQp KTsKLQkJfQotCi0JCS8qCi0JCSAqIEZldGNoIHRoZSBuZXh0IChvciBvbmx5KSB2aXNpYmxlIGhl YXAgdHVwbGUgZm9yIHRoaXMgaW5kZXggZW50cnkuCi0JCSAqIElmIHdlIGRvbid0IGZpbmQgYW55 dGhpbmcsIGxvb3AgYXJvdW5kIGFuZCBncmFiIHRoZSBuZXh0IFRJRCBmcm9tCi0JCSAqIHRoZSBp bmRleC4KLQkJICovCi0JCUFzc2VydChJdGVtUG9pbnRlcklzVmFsaWQoJnNjYW4tPnhzX2hlYXB0 aWQpKTsKLQkJaWYgKGluZGV4X2ZldGNoX2hlYXAoc2Nhbiwgc2xvdCkpCi0JCQlyZXR1cm4gdHJ1 ZTsKLQl9Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCQlp bmRleF9nZXRiaXRtYXAgLSBnZXQgYWxsIHR1cGxlcyBhdCBvbmNlIGZyb20gYW4gaW5kZXggc2Nh bgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMC4uOWJjNGRkNTJmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwpAQCAtMCwwICsxLDcwMSBAQAorLyotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKgorICogaW5kZXhiYXRjaC5jCisgKgkgIEJhdGNoLWJhc2VkIGluZGV4 IHNjYW4gaW5mcmFzdHJ1Y3R1cmUgZm9yIHRoZSBhbWdldGJhdGNoIGludGVyZmFjZS4KKyAqCisg KiBUaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgY29yZSBpbmZyYXN0cnVjdHVyZSBmb3IgYmF0Y2gt YmFzZWQgaW5kZXggc2NhbnMsCisgKiB3aGljaCBhbGxvdyBpbmRleCBBTXMgdG8gcmV0dXJuIG11 bHRpcGxlIG1hdGNoaW5nIFRJRHMgcGVyIHBhZ2UgaW4gYSBzaW5nbGUKKyAqIGNhbGwuICBUaGUg YmF0Y2ggcmluZyBidWZmZXIgaXMgbWFuYWdlZCBieSB0aGUgdGFibGUgQU0sIHdpdGggaGVscCBm cm9tIHVzLAorICogYW5kIHdpdGggaGVscCBmcm9tIHRoZSByaW5nIGJ1ZmZlciBpbmxpbmUgZnVu Y3Rpb25zIGluIHJlbHNjYW4uaC4gIFRoaXMKKyAqIGFwcHJvYWNoIGVuYWJsZXMgZWZmaWNpZW50 IHByZWZldGNoaW5nIG9mIHRhYmxlIEFNIGJsb2NrcyBkdXJpbmcgb3JkZXJlZAorICogaW5kZXgg c2NhbnMuCisgKgorICogVGhlIHJpbmcgYnVmZmVyIGxvYWRzIGJhdGNoZXMgaW4gaW5kZXgga2V5 IHNwYWNlIG9yZGVyLgorICoKKyAqIFRoZXJlJ3MgdGhyZWUgdHlwZXMgb2YgZnVuY3Rpb25zIGlu IHRoaXMgbW9kdWxlOgorICoKKyAqIDEuIENvcmUgYmF0Y2ggc2NhbiBsaWZlY3ljbGUgKGluZGV4 X2JhdGNoc2Nhbl8qKTogRnVuY3Rpb25zIHRoYXQgbWFuYWdlCisgKiAgICBiYXRjaCBzY2FuIHN0 YXRlIGluY2x1ZGluZyBpbml0aWFsaXphdGlvbiwgcmVzZXQsIGNsZWFudXAsIGFuZCB0aGUKKyAq ICAgIG1hcmsvcmVzdG9yZSBvcGVyYXRpb25zIG5lZWRlZCBmb3IgbWVyZ2Ugam9pbnMuICBDYWxs ZWQgYnkgaW5kZXhhbS5jCisgKiAgICByb3V0aW5lcyB0aGF0IG1hbmFnZSBpbmRleCBzY2FucyBv biBiZWhhbGYgb2YgdGhlIGNvcmUgZXhlY3V0b3IuCisgKgorICogMi4gVGFibGUgQU0gdXRpbGl0 aWVzICh0YWJsZWFtX3V0aWxfKik6IEhlbHBlciBmdW5jdGlvbnMgY2FsbGVkIGJ5IHRhYmxlCisg KiAgICBBTXMgZHVyaW5nIGFtZ2V0YmF0Y2ggaW5kZXggc2NhbnMuICBUaGVzZSBoYW5kbGUgY3Jv c3MtYmF0Y2ggZGlyZWN0aW9uCisgKiAgICBjaGFuZ2VzLCByZWNvcmRpbmcgZGVhZCBpdGVtcyBm b3IgYSBsYXRlciBjYWxsIHRvIGFta2lsbGl0ZW1zYmF0Y2gsIGFuZAorICogICAgZnJlZWluZyBi YXRjaGVzIHdoZW4gdGhlIHRhYmxlIEFNIGlzIGRvbmUgd2l0aCB0aGVtLgorICoKKyAqIDMuIElu ZGV4IEFNIHV0aWxpdGllcyAoaW5kZXhhbV91dGlsXyopOiBIZWxwZXIgZnVuY3Rpb25zIGNhbGxl ZCBieSBpbmRleAorICogICAgQU1zIHRoYXQgaW1wbGVtZW50IHRoZSBhbWdldGJhdGNoIGludGVy ZmFjZS4gIFRoZXNlIG1hbmFnZSBiYXRjaAorICogICAgYWxsb2NhdGlvbiwgaW5kZXggcGFnZSBi dWZmZXIgbG9jayByZWxlYXNlLCBhbmQgYmF0Y2ggbWVtb3J5IHJlY3ljbGluZy4KKyAqCisgKiBQ b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxv cG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0 aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICoKKyAqIElERU5USUZJQ0FUSU9OCisg KgkgIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKKyAqCisgKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vz cy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCisjaW5jbHVkZSAiY29tbW9u L2ludC5oIgorI2luY2x1ZGUgImxpYi9xdW5pcXVlLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtZGVi dWcuaCIKKworc3RhdGljIGludAliYXRjaF9jb21wYXJlX2ludChjb25zdCB2b2lkICp2YSwgY29u c3Qgdm9pZCAqdmIpOworCisvKgorICogU2V0cyB1cCB0aGUgYmF0Y2ggcmluZyBidWZmZXIgc3Ry dWN0dXJlIGZvciB1c2UgYnkgYW4gaW5kZXggc2Nhbi4KKyAqCisgKiBPbmx5IGNhbGwgaGVyZSB3 aGVuIGFsbCBvZiB0aGUgaW5kZXggcmVsYXRlZCBmaWVsZHMgaW4gJ3NjYW4nIHdlcmUgYWxyZWFk eQorICogaW5pdGlhbGl6ZWQuCisgKi8KK3ZvaWQKK2luZGV4X2JhdGNoc2Nhbl9pbml0KEluZGV4 U2NhbkRlc2Mgc2NhbikKK3sKKwlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0t PmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CisKKwlzY2FuLT5iYXRjaHJpbmdidWYuc2NhblBvcy52YWxp ZCA9IGZhbHNlOworCXNjYW4tPmJhdGNocmluZ2J1Zi5tYXJrUG9zLnZhbGlkID0gZmFsc2U7CisK KwlzY2FuLT5iYXRjaHJpbmdidWYubWFya0JhdGNoID0gTlVMTDsKKwlzY2FuLT5iYXRjaHJpbmdi dWYuaGVhZEJhdGNoID0gMDsJLyogaW5pdGlhbCBoZWFkIGJhdGNoICovCisJc2Nhbi0+YmF0Y2hy aW5nYnVmLm5leHRCYXRjaCA9IDA7CS8qIGluaXRpYWwgYmF0Y2ggc3RhcnRzIGVtcHR5ICovCisJ c2Nhbi0+YmF0Y2hyaW5nYnVmLmRvbmUgPSBmYWxzZTsKKwltZW1zZXQoJnNjYW4tPmJhdGNocmlu Z2J1Zi5jYWNoZSwgMCwgc2l6ZW9mKHNjYW4tPmJhdGNocmluZ2J1Zi5jYWNoZSkpOworCisJc2Nh bi0+dXNlYmF0Y2hyaW5nID0gdHJ1ZTsKK30KKworLyoKKyAqIFJlc2V0IHN0YXRlIHVzZWQgZm9y IGEgYmF0Y2ggaW5kZXggc2NhbgorICovCit2b2lkCitpbmRleF9iYXRjaHNjYW5fcmVzZXQoSW5k ZXhTY2FuRGVzYyBzY2FuKQoreworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0gJnNj YW4tPmJhdGNocmluZ2J1ZjsKKwlJbmRleFNjYW5CYXRjaCBtYXJrQmF0Y2ggPSBiYXRjaHJpbmdi dWYtPm1hcmtCYXRjaDsKKwlib29sCQltYXJrQmF0Y2hGcmVlZCA9IGZhbHNlOworCisJQXNzZXJ0 KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisKKwliYXRjaHJpbmdidWYtPnNjYW5Qb3MudmFsaWQgPSBm YWxzZTsKKwliYXRjaHJpbmdidWYtPm1hcmtQb3MudmFsaWQgPSBmYWxzZTsKKworCS8qCisJICog RW5zdXJlIHRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoIHdvbid0IHNraXAgdGhlIG9sZCBtYXJrQmF0 Y2ggaW4gdGhlIGxvb3AKKwkgKiBiZWxvdworCSAqLworCWJhdGNocmluZ2J1Zi0+bWFya0JhdGNo ID0gTlVMTDsKKworCWZvciAodWludDggaSA9IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoOyBpICE9 IGJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoOyBpKyspCisJeworCQlJbmRleFNjYW5CYXRjaCBiYXRj aCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgaSk7CisKKwkJaWYgKGJhdGNoID09IG1hcmtCYXRj aCkKKwkJCW1hcmtCYXRjaEZyZWVkID0gdHJ1ZTsKKworCQl0YWJsZWFtX3V0aWxfZnJlZV9iYXRj aChzY2FuLCBiYXRjaCk7CisJfQorCisJaWYgKCFtYXJrQmF0Y2hGcmVlZCAmJiB1bmxpa2VseSht YXJrQmF0Y2gpKQorCQl0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChzY2FuLCBtYXJrQmF0Y2gpOwor CisJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPSAwOworCWJhdGNocmluZ2J1Zi0+bmV4dEJhdGNo ID0gMDsKK30KKworLyoKKyAqIEZyZWUgcmVzb3VyY2VzIGF0IGVuZCBvZiBiYXRjaCBpbmRleCBz Y2FuCisgKgorICogQ2FsbGVkIHdoZW4gYW4gaW5kZXggc2NhbiBpcyBiZWluZyBlbmRlZCwgcmln aHQgYmVmb3JlIHRoZSBvd25pbmcgc2NhbgorICogZGVzY3JpcHRvciBnb2VzIGF3YXkuICBDbGVh bnMgdXAgYWxsIGJhdGNoIHJlbGF0ZWQgcmVzb3VyY2VzLgorICovCit2b2lkCitpbmRleF9iYXRj aHNjYW5fZW5kKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwkvKiBGcmVlIGFsbCByZW1haW5pbmcg bG9hZGVkIGJhdGNoZXMgKGV2ZW4gbWFya0JhdGNoKSAqLworCXNjYW4tPmJhdGNocmluZ2J1Zi5k b25lID0gdHJ1ZTsKKwlpbmRleF9iYXRjaHNjYW5fcmVzZXQoc2Nhbik7CisKKwlmb3IgKGludCBp ID0gMDsgaSA8IElOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFUzsgaSsrKQorCXsKKwkJSW5kZXhTY2Fu QmF0Y2ggY2FjaGVkID0gc2Nhbi0+YmF0Y2hyaW5nYnVmLmNhY2hlW2ldOworCisJCWlmIChjYWNo ZWQgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjYWNoZWQtPmtpbGxlZEl0ZW1zKQor CQkJcGZyZWUoY2FjaGVkLT5raWxsZWRJdGVtcyk7CisJCXBmcmVlKGNhY2hlZCk7CisJfQorfQor CisvKgorICogU2V0IGEgbWFyayBmcm9tIHNjYW5Qb3MgcG9zaXRpb24KKyAqCisgKiBTYXZlcyB0 aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uIGFuZCBhc3NvY2lhdGVkIGJhdGNoIHNvIHRoYXQgdGhl IHNjYW4gY2FuCisgKiBiZSByZXN0b3JlZCB0byB0aGlzIHBvaW50IGxhdGVyLCB2aWEgYSBjYWxs IHRvIGluZGV4X2JhdGNoc2Nhbl9yZXN0b3JlX3Bvcy4KKyAqIFRoZSBtYXJrZWQgYmF0Y2ggaXMg cmV0YWluZWQgYW5kIG5vdCBmcmVlZCB1bnRpbCBhIG5ldyBtYXJrIGlzIHNldCBvciB0aGUKKyAq IHNjYW4gZW5kcyAob3IgdW50aWwgdGhlIG1hcmsgaXMgcmVzdG9yZWQpLgorICovCit2b2lkCitp bmRleF9iYXRjaHNjYW5fbWFya19wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUJhdGNoUmlu Z0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKwlCYXRjaFJpbmdJ dGVtUG9zICpzY2FuUG9zID0gJnNjYW4tPmJhdGNocmluZ2J1Zi5zY2FuUG9zOworCUJhdGNoUmlu Z0l0ZW1Qb3MgKm1hcmtQb3MgPSAmYmF0Y2hyaW5nYnVmLT5tYXJrUG9zOworCUluZGV4U2NhbkJh dGNoIHNjYW5CYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2Nhbiwgc2NhblBvcy0+YmF0Y2gpOwor CUluZGV4U2NhbkJhdGNoIG1hcmtCYXRjaCA9IGJhdGNocmluZ2J1Zi0+bWFya0JhdGNoOworCWJv b2wJCWZyZWVNYXJrQmF0Y2g7CisKKwlBc3NlcnQoc2Nhbi0+TVZDQ1NjYW4pOworCisJLyoKKwkg KiBGcmVlIHRoZSBwcmV2aW91cyBtYXJrIGJhdGNoIChpZiBhbnkpIC0tIGJ1dCBvbmx5IGlmIGl0 IGlzbid0IG91cgorCSAqIHNjYW5CYXRjaCAoZGVmZW5zaXZlbHkgbWFrZSBzdXJlIHRoYXQgbWFy a0JhdGNoIGlzbid0IHNvbWUgbGF0ZXIKKwkgKiBzdGlsbC1uZWVkZWQgYmF0Y2gsIHRvbykKKwkg Ki8KKwlpZiAoIW1hcmtCYXRjaCB8fCBtYXJrQmF0Y2ggPT0gc2NhbkJhdGNoKQorCXsKKwkJLyog RGVmaW5pdGVseSBubyBtYXJrQmF0Y2ggdGhhdCB3ZSBzaG91bGQgZnJlZSBub3cgKi8KKwkJZnJl ZU1hcmtCYXRjaCA9IGZhbHNlOworCX0KKwllbHNlIGlmIChsaWtlbHkoIWluZGV4X3NjYW5fYmF0 Y2hfbG9hZGVkKHNjYW4sIG1hcmtQb3MtPmJhdGNoKSkpCisJeworCQkvKiBEZWZpbml0ZWx5IGhh dmUgYSBuby1sb25nZXItbG9hZGVkIG1hcmtCYXRjaCB0byBmcmVlICovCisJCWZyZWVNYXJrQmF0 Y2ggPSB0cnVlOworCX0KKwllbHNlCisJeworCQkvKgorCQkgKiBJdCBsb29rcyBsaWtlIG1hcmtC YXRjaCBpcyBsb2FkZWQvc3RpbGwgbmVlZGVkIHdpdGhpbiBiYXRjaHJpbmdidWYuCisJCSAqCisJ CSAqIGluZGV4X3NjYW5fYmF0Y2hfbG9hZGVkIGluZGljYXRlcyB0aGF0IG1hcmtwb3MtPmJhdGNo IGlzIGxvYWRlZAorCQkgKiBhbHJlYWR5LCBidXQgd2UgY2Fubm90IGZ1bGx5IHRydXN0IGl0IGhl cmUuICBJdCdzIGp1c3QgYWJvdXQKKwkJICogcG9zc2libGUgdGhhdCBtYXJrcG9zLT5iYXRjaCBm YWxscyB3aXRoaW4gYSBzaW5jZS1yZWN5Y2xlZCByYW5nZSBvZgorCQkgKiBiYXRjaCBvZmZzZXQg bnVtYmVycyAoZm9sbG93aW5nIHVpbnQ4IG92ZXJmbG93KS4KKwkJICoKKwkJICogTWFrZSBzdXJl IHRoYXQgbWFya0JhdGNoIHJlYWxseSBpcyBsb2FkZWQgYnkgZGlyZWN0bHkgY29tcGFyaW5nIGl0 CisJCSAqIGFnYWluc3QgYWxsIGxvYWRlZCBiYXRjaGVzLiAgV2UgbXVzdCBub3QgZmFpbCB0byBy ZWxlYXNlIG1hcmtCYXRjaAorCQkgKiB3aGVuIG5vYm9keSBlbHNlIHdpbGwgbGF0ZXIgb24uCisJ CSAqCisJCSAqIE5vdGU6IGluIHByYWN0aWNlIHdlJ3JlIHZlcnkgdW5saWtlbHkgdG8gZW5kIHVw IGhlcmUuICBJdCBpcyB2ZXJ5CisJCSAqIGF0eXBpY2FsIGZvciBhbiBpbmRleCBzY2FuIG9uIHRo ZSBpbm5lciBzaWRlIG9mIGEgbWVyZ2Ugam9pbiB0bworCQkgKiBob2xkIG9uIHRvIGEgbWFyayB0 aGF0IHRyYWlscyB0aGUgY3VycmVudCBzY2FuQmF0Y2ggdGhpcyBtdWNoLgorCQkgKi8KKwkJZnJl ZU1hcmtCYXRjaCA9IHRydWU7CS8qIGkuZS4gaW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQgbGllZCB0 byB1cyAqLworCisJCWZvciAodWludDggaSA9IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoOyBpICE9 IGJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoOyBpKyspCisJCXsKKwkJCWlmIChpbmRleF9zY2FuX2Jh dGNoKHNjYW4sIGkpID09IG1hcmtCYXRjaCkKKwkJCXsKKwkJCQkvKiBpbmRleF9zY2FuX2JhdGNo X2xvYWRlZCB3YXMgcmlnaHQvbm8gb3ZlcmZsb3cgaGFwcGVuZWQgKi8KKwkJCQlmcmVlTWFya0Jh dGNoID0gZmFsc2U7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZnJlZU1hcmtC YXRjaCkKKwl7CisJCS8qIEZyZWUgbWFya0JhdGNoLCBzaW5jZSBpdCBpc24ndCBsb2FkZWQvbmVl ZGVkIGZvciBiYXRjaHJpbmdidWYgKi8KKwkJYmF0Y2hyaW5nYnVmLT5tYXJrQmF0Y2ggPSBOVUxM OyAvKiBlbHNlIGNhbGwgd29uJ3QgZnJlZSBtYXJrQmF0Y2ggKi8KKwkJdGFibGVhbV91dGlsX2Zy ZWVfYmF0Y2goc2NhbiwgbWFya0JhdGNoKTsKKwl9CisKKwkvKiBjb3B5IHRoZSBzY2FuJ3MgcG9z aXRpb24gKi8KKwliYXRjaHJpbmdidWYtPm1hcmtQb3MgPSAqc2NhblBvczsKKwliYXRjaHJpbmdi dWYtPm1hcmtCYXRjaCA9IHNjYW5CYXRjaDsKK30KKworLyoKKyAqIFJlc3RvcmUgbWFyayB0byBz Y2FuUG9zIHBvc2l0aW9uCisgKgorICogUmVzdG9yZXMgdGhlIHNjYW4gdG8gYSBwb3NpdGlvbiBz YXZlZCBieSBpbmRleF9iYXRjaHNjYW5fbWFya19wb3MgZWFybGllci4KKyAqIFRoZSBzY2FuJ3Mg bWFya1BvcyBiZWNvbWVzIGl0cyBzY2FuUG9zLiAgVGhlIG1hcmtlZCBiYXRjaCBpcyByZXN0b3Jl ZCBhcworICogdGhlIGN1cnJlbnQgc2NhbkJhdGNoIHdoZW4gbmVlZGVkLgorICoKKyAqIFdlIGp1 c3QgZGlzY2FyZCBhbGwgYmF0Y2hlcyAob3RoZXIgdGhhbiBtYXJrQmF0Y2gvcmVzdG9yZWQgc2Nh bkJhdGNoKSwKKyAqIGV4Y2VwdCB3aGVuIG1hcmtCYXRjaCBpcyBhbHJlYWR5IHRoZSBzY2FuJ3Mg Y3VycmVudCBzY2FuQmF0Y2guCisgKi8KK3ZvaWQKK2luZGV4X2JhdGNoc2Nhbl9yZXN0b3JlX3Bv cyhJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYg PSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOworCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MgPSAmc2Nh bi0+YmF0Y2hyaW5nYnVmLnNjYW5Qb3M7CisJQmF0Y2hSaW5nSXRlbVBvcyAqbWFya1BvcyA9ICZi YXRjaHJpbmdidWYtPm1hcmtQb3M7CisJSW5kZXhTY2FuQmF0Y2ggbWFya0JhdGNoID0gYmF0Y2hy aW5nYnVmLT5tYXJrQmF0Y2g7CisJSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoID0gaW5kZXhfc2Nh bl9iYXRjaChzY2FuLCBzY2FuUG9zLT5iYXRjaCk7CisKKwlBc3NlcnQoc2Nhbi0+TVZDQ1NjYW4p OworCUFzc2VydCghYmF0Y2hyaW5nYnVmLT5kb25lKTsKKwlBc3NlcnQobWFya1Bvcy0+dmFsaWQp OworCisJaWYgKHNjYW5CYXRjaCA9PSBtYXJrQmF0Y2gpCisJeworCQkvKiBtYXJrQmF0Y2ggaXMg YWxyZWFkeSBzY2FuQmF0Y2g7IG5lZWRuJ3QgY2hhbmdlIGJhdGNocmluZ2J1ZiAqLworCQlBc3Nl cnQoc2NhblBvcy0+YmF0Y2ggPT0gbWFya1Bvcy0+YmF0Y2gpOworCisJCXNjYW5Qb3MtPml0ZW0g PSBtYXJrUG9zLT5pdGVtOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBtYXJrQmF0Y2ggaXMg YmVoaW5kIHNjYW5CYXRjaCwgYW5kIHNvIG11c3Qgbm90IGJlIHNhdmVkIGluIHJpbmcgYnVmZmVy CisJICogYW55bW9yZS4gIFdlIGhhdmUgdG8gZGVhbCB3aXRoIHJlc3RvcmluZyB0aGUgbWFyayB0 aGUgaGFyZCB3YXk6IGJ5CisJICogaW52YWxpZGF0aW5nIGFsbCBvdGhlciBsb2FkZWQgYmF0Y2hl cy4gIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgY2FzZQorCSAqIHdoZXJlIHRoZSBzY2FuIGRpcmVj dGlvbiBjaGFuZ2VzIGFuZCB0aGUgc2NhbiBhY3R1YWxseSBjcm9zc2VzCisJICogYmF0Y2gvaW5k ZXggcGFnZSBib3VuZGFyaWVzIChzZWUgdGFibGVhbV91dGlsX2JhdGNoX2RpcmNoYW5nZSkuCisJ ICoKKwkgKiBGaXJzdCwgZnJlZSBhbGwgYmF0Y2hlcyB0aGF0IGFyZSBzdGlsbCBpbiB0aGUgcmlu ZyBidWZmZXIuCisJICovCisJZm9yICh1aW50OCBpID0gYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2g7 IGkgIT0gYmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2g7IGkrKykKKwl7CisJCUluZGV4U2NhbkJhdGNo IGJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBpKTsKKworCQlBc3NlcnQoYmF0Y2ggIT0g bWFya0JhdGNoKTsKKworCQl0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChzY2FuLCBiYXRjaCk7CisJ fQorCisJLyoKKwkgKiBOZXh0ICJhcHBlbmQiIHN0YW5kYWxvbmUgbWFya0JhdGNoLCBtYWtpbmcg dGhlIHJpbmcgYnVmZmVyIGFwcGVhciBhcyBpZgorCSAqIGl0IHdhcyB0aGUgZmlyc3QgYmF0Y2gg ZXZlciByZXR1cm5lZCBieSBhbWdldGJhdGNoIGZvciB0aGUgc2NhbgorCSAqLworCW1hcmtQb3Mt PmJhdGNoID0gMDsKKwliYXRjaHJpbmdidWYtPnNjYW5Qb3MgPSAqbWFya1BvczsKKwliYXRjaHJp bmdidWYtPm5leHRCYXRjaCA9IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID0gbWFya1Bvcy0+YmF0 Y2g7CisJaW5kZXhfc2Nhbl9iYXRjaF9hcHBlbmQoc2NhbiwgbWFya0JhdGNoKTsKKwlBc3NlcnQo aW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBiYXRjaHJpbmdidWYtPnNjYW5Qb3MuYmF0Y2gpID09IG1h cmtCYXRjaCk7CisKKwkvKgorCSAqIEZpbmFsbHksIGNhbGwgYW1wb3NyZXNldCB0byBsZXQgaW5k ZXggQU0ga25vdyB0byBpbnZhbGlkYXRlIGFueSBwcml2YXRlCisJICogc3RhdGUgdGhhdCBpbmRl cGVuZGVudGx5IHRyYWNrcyB0aGUgc2NhbidzIHByb2dyZXNzCisJICovCisJaWYgKHNjYW4tPmlu ZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBvc3Jlc2V0KQorCQlzY2FuLT5pbmRleFJlbGF0aW9u LT5yZF9pbmRhbS0+YW1wb3NyZXNldChzY2FuLCBtYXJrQmF0Y2gpOworCisJLyoKKwkgKiBOb3Rl OiBtYXJrQmF0Y2gua2lsbGVkSXRlbXNbXSBtaWdodCBhbHJlYWR5IGNvbnRhaW4gZGVhZCBpdGVt cywgYW5kCisJICogbWlnaHQgeWV0IGhhdmUgbW9yZSBkZWFkIGl0ZW1zIHNhdmVkLiAgdGFibGVh bV91dGlsX2ZyZWVfYmF0Y2ggaXMKKwkgKiBwcmVwYXJlZCBmb3IgdGhhdC4KKwkgKi8KK30KKwor LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICoJCQl1dGlsaXR5IGZ1bmN0aW9ucyBjYWxsZWQgYnkgdGFibGUgQU1zCisg KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKi8KKworLyoKKyAqIEhhbmRsZSBjcm9zcy1iYXRjaCBjaGFuZ2UgaW4gc2Nh biBkaXJlY3Rpb24KKyAqCisgKiBDYWxsZWQgYnkgdGFibGUgQU0gd2hlbiBpdHMgc2NhbiBjaGFu Z2VzIGRpcmVjdGlvbiBpbiBhIHdheSB0aGF0CisgKiBuZWNlc3NpdGF0ZXMgYmFja2luZyB0aGUg c2NhbiB1cCB0byBhbiBpbmRleCBwYWdlIG9yaWdpbmFsbHkgYXNzb2NpYXRlZAorICogd2l0aCBh IG5vdy1mcmVlZCBiYXRjaC4KKyAqCisgKiBXaGVuIHdlIHJldHVybiwgYmF0Y2hyaW5nYnVmIHdp bGwgb25seSBjb250YWluIG9uZSBiYXRjaCAodGhlIGN1cnJlbnQKKyAqIGhlYWRCYXRjaC9zY2Fu QmF0Y2gpLiAgQ2FsbGVyIGNhbiB0aGVuIHNhZmVseSBwYXNzIHRoaXMgYmF0Y2ggdG8gYW1nZXRi YXRjaAorICogdG8gZGV0ZXJtaW5lIHdoaWNoIGJhdGNoIGNvbWVzIG5leHQgaW4gdGhlIG5ldyBz Y2FuIGRpcmVjdGlvbi4gIEZyb20gdGhhdAorICogcG9pbnQgb24gYmF0Y2hyaW5nYnVmIHdpbGwg bG9vayBhcyBpZiBvdXIgbmV3IHNjYW4gZGlyZWN0aW9uIGhhZCBiZWVuIHVzZWQKKyAqIGZyb20g dGhlIHN0YXJ0LiAgVGhpcyBhcHByb2FjaCBpc24ndCBwYXJ0aWN1bGFybHkgZWZmaWNpZW50LCBi dXQgaXQgd29ya3MKKyAqIHdlbGwgZW5vdWdoIGZvciB3aGF0IG91Z2h0IHRvIGJlIGEgcmVsYXRp dmVseSByYXJlIG9jY3VycmVuY2UuCisgKi8KK3ZvaWQKK3RhYmxlYW1fdXRpbF9iYXRjaF9kaXJj aGFuZ2UoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5n YnVmID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKwlJbmRleFNjYW5CYXRjaCBoZWFkOworCisJLyoK KwkgKiBSZWxlYXNlIGJhdGNoZXMgc3RhcnRpbmcgZnJvbSB0aGUgY3VycmVudCAidGFpbCIgYmF0 Y2gsIHdvcmtpbmcKKwkgKiBiYWNrd2FyZHMgdW50aWwgdGhlIGN1cnJlbnQgaGVhZCBiYXRjaCAo d2hpY2ggbXVzdCBhbHNvIGJlIHRoZSBjdXJyZW50CisJICogc2NhbkJhdGNoKSBpcyB0aGUgb25s eSBiYXRjaCBoYXNuJ3QgYmVlbiBmcmVlZAorCSAqLworCXdoaWxlIChpbmRleF9zY2FuX2JhdGNo X2NvdW50KHNjYW4pID4gMSkKKwl7CisJCUluZGV4U2NhbkJhdGNoIHRhaWwgPSBpbmRleF9zY2Fu X2JhdGNoKHNjYW4sCisJCQkJCQkJCQkJCSAgIGJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoIC0gMSk7 CisKKwkJdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2goc2NhbiwgdGFpbCk7CisJCWJhdGNocmluZ2J1 Zi0+bmV4dEJhdGNoLS07CisJfQorCisJLyogc2NhbkJhdGNoIGlzIG5vdyB0aGUgb25seSBiYXRj aCBzdGlsbCBsb2FkZWQgKi8KKwlBc3NlcnQoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPT0gYmF0 Y2hyaW5nYnVmLT5zY2FuUG9zLmJhdGNoKTsKKworCS8qCisJICogRGVhbCB3aXRoIGluZGV4IEFN IHN0YXRlIHRoYXQgaW5kZXBlbmRlbnRseSB0cmFja3MgdGhlIHByb2dyZXNzIG9mIHRoZQorCSAq IHNjYW4uICBEbyB0aGlzIGJ5IGZsaXBwaW5nIHRoZSBiYXRjaC1sZXZlbCBzY2FuIGRpcmVjdGlv biwgYW5kIHRoZW4KKwkgKiBjYWxsaW5nIHRoZSBpbmRleCBBTSdzIGFtcG9zcmVzZXQuCisJICov CisJaGVhZCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gp OworCWhlYWQtPmRpciA9IC1oZWFkLT5kaXI7CisJaWYgKHNjYW4tPmluZGV4UmVsYXRpb24tPnJk X2luZGFtLT5hbXBvc3Jlc2V0KQorCQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1w b3NyZXNldChzY2FuLCBoZWFkKTsKK30KKworLyoKKyAqIFJlY29yZCB0aGF0IHNjYW5Qb3MgaXRl bSBpcyBkZWFkCisgKgorICogUmVjb3JkcyBhbiBvZmZzZXQgdG8gdGhlIGN1cnJlbnQgc2NhbkJh dGNoL3NjYW5Qb3MgaXRlbSwgc2F2aW5nIGl0IGluCisgKiBzY2FuQmF0Y2gncyBraWxsZWRJdGVt cyBhcnJheS4gIFRoZSBpdGVtcycgaW5kZXggdHVwbGVzIHdpbGwgbGF0ZXIgYmUKKyAqIG1hcmtl ZCBMUF9ERUFEIHdoZW4gY3VycmVudCBzY2FuQmF0Y2ggaXMgZnJlZWQuCisgKi8KK3ZvaWQKK3Rh YmxlYW1fdXRpbF9raWxsX3NjYW5wb3NpdGVtKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlCYXRj aFJpbmdJdGVtUG9zICpzY2FuUG9zID0gJnNjYW4tPmJhdGNocmluZ2J1Zi5zY2FuUG9zOworCUlu ZGV4U2NhbkJhdGNoIHNjYW5CYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2Nhbiwgc2NhblBvcy0+ YmF0Y2gpOworCisJaWYgKHNjYW5CYXRjaC0+a2lsbGVkSXRlbXMgPT0gTlVMTCkKKwkJc2NhbkJh dGNoLT5raWxsZWRJdGVtcyA9IHBhbGxvY19hcnJheShpbnQsIHNjYW4tPm1heGl0ZW1zYmF0Y2gp OworCWlmIChzY2FuQmF0Y2gtPm51bUtpbGxlZCA8IHNjYW4tPm1heGl0ZW1zYmF0Y2gpCisJCXNj YW5CYXRjaC0+a2lsbGVkSXRlbXNbc2NhbkJhdGNoLT5udW1LaWxsZWQrK10gPSBzY2FuUG9zLT5p dGVtOworfQorCisvKgorICogUmVsZWFzZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgYmF0 Y2gKKyAqCisgKiBDYWxsZWQgYnkgdGFibGUgQU0ncyBvcmRlcmVkIGluZGV4IHNjYW4gaW1wbGVt ZW50YXRpb24gd2hlbiBpdCBpcyBmaW5pc2hlZAorICogd2l0aCBhIGJhdGNoIGFuZCB3aXNoZXMg dG8gcmVsZWFzZSBpdHMgcmVzb3VyY2VzLgorICoKKyAqIFdlIHJlbGVhc2UgdGhlIGJhdGNoJ3Mg YnVmZmVyIHBpbiBpZiB0YWJsZSBBTSBoYXNuJ3QgcmVsZWFzZWQgaXQgYWxyZWFkeS4KKyAqIEZv ciBwbGFpbiBpbmRleCBzY2FucyB3aXRoIGFuIE1WQ0Mgc25hcHNob3QsIHRoZSB0YWJsZSBBTSBj YWxsZXIgcmVsZWFzZXMKKyAqIHRoZSBwaW4gaW1tZWRpYXRlbHksIHNvIHdlIG5ldmVyIHJlbGVh c2UgdGhlIHBpbiBoZXJlLiAgSW5kZXgtb25seSBzY2FucworICogbXVzdCBkZWxheSBkcm9wcGlu ZyB0aGUgcGluIHVudGlsIHZpc2liaWxpdHkgaXMgcmVzb2x2ZWQgZm9yIGFsbCBpdGVtcyBpbgor ICogdGhlIGJhdGNoLCBzbyB3ZSBtYXkgbmVlZCB0byByZWxlYXNlIHRoZSBwaW4gaGVyZS4gIEZv ciBub24tTVZDQyBzbmFwc2hvdAorICogc2NhbnMsIHRoZSBwaW4gaXMgYWx3YXlzIGhlbGQgdW50 aWwgdGhpcyBmdW5jdGlvbiByZWxlYXNlcyBpdC4KKyAqCisgKiBXaGVuIHRoZSBiYXRjaCBoYXMg ZGVhZCBpdGVtcyAobnVtS2lsbGVkID4gMCkgYW5kIHRoZSBpbmRleCBBTSBwcm92aWRlcyBhbgor ICogYW1raWxsaXRlbXNiYXRjaCBjYWxsYmFjaywgd2UgY2FsbCBpdCB0byBzZXQgTFBfREVBRCBi aXRzIGluIHRoZSBpbmRleAorICogcGFnZS4gIFdlIGFsd2F5cyByZWN5Y2xlIHRoZSBiYXRjaCBt ZW1vcnkgdmlhIGluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlLgorICoKKyAqIE5vdGU6IENhbGxp bmcgaGVyZSB3aGVuICdiYXRjaCcgaXMgYWxzbyBiYXRjaHJpbmdidWYubWFya0JhdGNoIGlzIGEg bm8tb3AuCisgKiBDYWxsZXJzIHRoYXQgZG9uJ3Qgd2FudCB0aGlzIHNob3VsZCBzZXQgYmF0Y2hy aW5nYnVmLm1hcmtCYXRjaCB0byBOVUxMCisgKiBiZWZvcmUgY2FsbGluZyB1cy4gIE5vdGUgdGhh dCBtYXJrQmF0Y2ggaGFzIHRvIGJlIGV4cGxpY2l0bHkgZnJlZWQuCisgKi8KK3ZvaWQKK3RhYmxl YW1fdXRpbF9mcmVlX2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0 Y2gpCit7CisJQXNzZXJ0KEJ1ZmZlcklzVmFsaWQoYmF0Y2gtPmJ1ZikgfHwgc2Nhbi0+TVZDQ1Nj YW4pOworCisJLyogZG9uJ3QgZnJlZSBjYWxsZXIncyBiYXRjaCBpZiBpdCBpcyBzY2FuJ3MgY3Vy cmVudCBtYXJrQmF0Y2ggKi8KKwlpZiAoYmF0Y2ggPT0gc2Nhbi0+YmF0Y2hyaW5nYnVmLm1hcmtC YXRjaCkKKwkJcmV0dXJuOworCisJaWYgKEJ1ZmZlcklzVmFsaWQoYmF0Y2gtPmJ1ZikpCisJewor CQkvKiB0YWJsZSBBTSBkaWRuJ3QgdW5waW4gcGFnZSBlYXJsaWVyIC0tIGRvIGl0IG5vdyAqLwor CQlBc3NlcnQoIXNjYW4tPk1WQ0NTY2FuIHx8IHNjYW4tPnhzX3dhbnRfaXR1cCk7CisKKwkJUmVs ZWFzZUJ1ZmZlcihiYXRjaC0+YnVmKTsKKwkJYmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJ fQorI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwllbHNlIGlmIChzY2FuLT54c193YW50X2l0 dXApCisJeworCQkvKgorCQkgKiBJbmRleC1vbmx5IHNjYW4gdGhhdCBkcm9wcGVkIHRoaXMgYmF0 Y2gncyBwaW4gZWFnZXJseS4KKwkJICoKKwkJICogVGFibGUgQU0gbXVzdCBoYXZlIGNoZWNrZWQg dmlzaWJpbGl0eSBmb3IgZXZlcnkgaXRlbSBpbiB0aGUgYmF0Y2guCisJCSAqLworCQlmb3IgKGlu dCBpID0gYmF0Y2gtPmZpcnN0SXRlbTsgaSA8PSBiYXRjaC0+bGFzdEl0ZW07IGkrKykKKwkJCUFz c2VydChiYXRjaC0+dmlzSW5mb1tpXSAmIEJBVENIX1ZJU19DSEVDS0VEKTsKKwl9CisjZW5kaWYK KworCS8qCisJICogTGV0IHRoZSBpbmRleCBBTSBzZXQgTFBfREVBRCBiaXRzIGluIHRoZSBpbmRl eCBwYWdlLCBpZiBhcHBsaWNhYmxlLgorCSAqCisJICogYmF0Y2gua2lsbGVkSXRlbXNbXSBpcyBu b3cgaW4gd2hhdGV2ZXIgb3JkZXIgdGhlIHNjYW4gcmV0dXJuZWQgaXRlbXMKKwkgKiBpbi4gIFdl IG1pZ2h0IGhhdmUgZXZlbiBzYXZlZCB0aGUgc2FtZSBpdGVtL1RJRCB0d2ljZS4KKwkgKgorCSAq IFNvcnQgYW5kIHVuaXF1ZS1pZnkga2lsbGVkSXRlbXNbXS4gIFRoYXQgd2F5IHRoZSBpbmRleCBB TSBjYW4gc2FmZWx5CisJICogYXNzdW1lIHRoYXQgaXRlbXMgd2lsbCBhbHdheXMgYmUgaW4gdGhl aXIgb3JpZ2luYWwgaW5kZXggcGFnZSBvcmRlci4KKwkgKi8KKwlpZiAoYmF0Y2gtPm51bUtpbGxl ZCA+IDAgJiYKKwkJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFta2lsbGl0ZW1zYmF0 Y2ggIT0gTlVMTCkKKwl7CisJCWlmIChiYXRjaC0+bnVtS2lsbGVkID4gMSkKKwkJeworCQkJcXNv cnQoYmF0Y2gtPmtpbGxlZEl0ZW1zLCBiYXRjaC0+bnVtS2lsbGVkLCBzaXplb2YoaW50KSwKKwkJ CQkgIGJhdGNoX2NvbXBhcmVfaW50KTsKKwkJCWJhdGNoLT5udW1LaWxsZWQgPSBxdW5pcXVlKGJh dGNoLT5raWxsZWRJdGVtcywgYmF0Y2gtPm51bUtpbGxlZCwKKwkJCQkJCQkJCSAgIHNpemVvZihp bnQpLCBiYXRjaF9jb21wYXJlX2ludCk7CisJCX0KKworCQlzY2FuLT5pbmRleFJlbGF0aW9uLT5y ZF9pbmRhbS0+YW1raWxsaXRlbXNiYXRjaChzY2FuLCBiYXRjaCk7CisJfQorCisJLyoKKwkgKiBV c2UgY2FjaGUsIGp1c3QgbGlrZSBpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZSBkb2VzIGl0Lgor CSAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgSU5ERVhfU0NBTl9DQUNIRV9CQVRDSEVTOyBpKysp CisJeworCQlpZiAoc2Nhbi0+YmF0Y2hyaW5nYnVmLmNhY2hlW2ldID09IE5VTEwpCisJCXsKKwkJ CS8qIGZvdW5kIGVtcHR5IHNsb3QsIHdlJ3JlIGRvbmUgKi8KKwkJCXNjYW4tPmJhdGNocmluZ2J1 Zi5jYWNoZVtpXSA9IGJhdGNoOworCQkJcmV0dXJuOworCQl9CisJfQorCisJaWYgKGJhdGNoLT5r aWxsZWRJdGVtcykKKwkJcGZyZWUoYmF0Y2gtPmtpbGxlZEl0ZW1zKTsKKwlwZnJlZShiYXRjaCk7 Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqCQkJdXRpbGl0eSBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFtZ2V0 YmF0Y2ggaW5kZXggQU1zCisgKgorICogVGhlc2UgZnVuY3Rpb25zIG1hbmFnZSBiYXRjaCBhbGxv Y2F0aW9uLCB1bmxvY2svcGluIG1hbmFnZW1lbnQsIGFuZCBiYXRjaAorICogcmVzb3VyY2UgcmVj eWNsaW5nLiAgSW5kZXggQU1zIGltcGxlbWVudGluZyBhbWdldGJhdGNoIHNob3VsZCB1c2UgdGhl c2UKKyAqIHJhdGhlciB0aGFuIG1hbmFnaW5nIGJ1ZmZlcnMgZGlyZWN0bHkuCisgKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KKworLyoKKyAqIFVubG9jayBiYXRjaCdzIHNoYXJlZCBidWZmZXIgbG9jaworICoKKyAq IFVubG9ja3MgY2FsbGVyJ3MgYmF0Y2gtPmJ1ZiBpbiBwcmVwYXJhdGlvbiBmb3IgYW1nZXRiYXRj aCByZXR1cm5pbmcgaXRlbXMKKyAqIHNhdmVkIGluIHRoYXQgYmF0Y2guICBQZXJmb3JtcyBleHRy YSBzdGVwcyByZXF1aXJlZCBieSBhbWdldGJhdGNoIGNhbGxlcnMKKyAqIGluIHBhc3NpbmcuCisg KgorICogT25seSBjYWxsIGhlcmUgd2hlbiBhIGJhdGNoIGhhcyBvbmUgb3IgbW9yZSBtYXRjaGlu ZyBpdGVtcyB0byByZXR1cm4gdXNpbmcKKyAqIGFtZ2V0YmF0Y2ggKG9yIGZvciBhbWdldGJpdG1h cCB0byBsb2FkIGludG8gaXRzIGJpdG1hcCBvZiBtYXRjaGluZyBUSURzKS4KKyAqIFdoZW4gYW4g aW5kZXggcGFnZSBoYXMgbm8gbWF0Y2hlcywgaXQncyBhbHdheXMgc2FmZSBmb3IgaW5kZXggQU1z IHRvIGRyb3AKKyAqIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4gZm9yIHRoZW1zZWx2ZXMuCisg KgorICogTm90ZTogSXQgaXMgY29udmVuaWVudCBmb3IgaW5kZXggQU1zIHRoYXQgaW1wbGVtZW50 IGJvdGggYW1nZXRiYXRjaCBhbmQKKyAqIGFtZ2V0Yml0bWFwIHRvIGNvbnNpc3RlbnRseSB1c2Ug dGhlIHNhbWUgYmF0Y2ggbWFuYWdlbWVudCBhcHByb2FjaCwgc2luY2UKKyAqIHRoYXQgYXZvaWRz IGludHJvZHVjaW5nIHNwZWNpYWwgY2FzZXMgdG8gbG93ZXItbGV2ZWwgY29kZS4gIFdlIGRyb3Ag Ym90aAorICogdGhlIGxvY2sgYW5kIHRoZSBwaW4gb24gYmF0Y2gncyBwYWdlIG9uIGJlaGFsZiBv ZiBhbWdldGJpdG1hcCBjYWxsZXJzLgorICogU3VjaCBhbWdldGJpdG1hcCBjYWxsZXJzIG11c3Qg YmUgY2FyZWZ1bCB0byBmcmVlIGFsbCBiYXRjaGVzIHdpdGggbWF0Y2hpbmcKKyAqIGl0ZW1zIG9u Y2UgdGhleSdyZSBkb25lIHNhdmluZyB0aGUgbWF0Y2hpbmcgVElEcy4gIFdlIG5ldmVyIGRyb3Ag dGhlIHBpbgorICogZm9yIGFuIGFtZ2V0YmF0Y2ggY2FsbGVyLCB0aG91Z2ggLS0gdGhhdCdzIHVw IHRvIHRoZSB0YWJsZSBBTS4KKyAqLwordm9pZAoraW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayhJ bmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCS8qIGJhdGNoIG11 c3QgaGF2ZSBvbmUgb3IgbW9yZSBtYXRjaGluZyBpdGVtcyByZXR1cm5lZCBieSBpbmRleCBBTSAq LworCUFzc2VydChiYXRjaC0+Zmlyc3RJdGVtID49IDAgJiYgYmF0Y2gtPmZpcnN0SXRlbSA8PSBi YXRjaC0+bGFzdEl0ZW0pOworCisJaWYgKHNjYW4tPnVzZWJhdGNocmluZykKKwl7CisJCS8qIGFt Z2V0YmF0Y2ggKG5vdCBhbWdldGJpdG1hcCkgY2FsbGVyICovCisJCUFzc2VydChzY2FuLT5oZWFw UmVsYXRpb24gIT0gTlVMTCk7CisKKwkJLyoKKwkJICogSGF2ZSB0byBzZXQgYmF0Y2gtPmxzbiBz byB0aGF0IGFta2lsbGl0ZW1zYmF0Y2ggaGFzIGEgd2F5IHRvIGRldGVjdAorCQkgKiB3aGVuIGNv bmN1cnJlbnQgaGVhcCBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTSBtaWdodCBoYXZlIHRha2VuCisJ CSAqIHBsYWNlLiAgSXQnbGwgb25seSBiZSBzYWZlIHRvIHNldCBhbnkgaW5kZXggdHVwbGUgTFBf REVBRCBiaXRzIHdoZW4KKwkJICogdGhlIHBhZ2UgTFNOIGhhc24ndCBhZHZhbmNlZC4KKwkJICov CisJCWJhdGNoLT5sc24gPSBCdWZmZXJHZXRMU05BdG9taWMoYmF0Y2gtPmJ1Zik7CisKKwkJLyog RHJvcCB0aGUgbG9jayAqLworCQlMb2NrQnVmZmVyKGJhdGNoLT5idWYsIEJVRkZFUl9MT0NLX1VO TE9DSyk7CisKKyNpZmRlZiBVU0VfVkFMR1JJTkQKKwkJaWYgKCFSZWxhdGlvblVzZXNMb2NhbEJ1 ZmZlcnMoc2Nhbi0+aW5kZXhSZWxhdGlvbikpCisJCQlWQUxHUklORF9NQUtFX01FTV9OT0FDQ0VT UyhCdWZmZXJHZXRQYWdlKGJhdGNoLT5idWYpLCBCTENLU1opOworI2VuZGlmCisKKwkJLyogdGFi bGUgQU0gZGV0ZXJtaW5lcyB3aGVuIGl0J2xsIGJlIHNhZmUgdG8gZHJvcCBwaW5zIG9uIGJhdGNo ZXMgKi8KKwl9CisJZWxzZQorCXsKKwkJLyogYW1nZXRiaXRtYXAgKG5vdCBhbWdldGJhdGNoKSBj YWxsZXIgKi8KKwkJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiA9PSBOVUxMKTsKKworCQkvKiBk cm9wIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4gKi8KKwkJTG9ja0J1ZmZlcihiYXRjaC0+YnVm LCBCVUZGRVJfTE9DS19VTkxPQ0spOworCisjaWZkZWYgVVNFX1ZBTEdSSU5ECisJCWlmICghUmVs YXRpb25Vc2VzTG9jYWxCdWZmZXJzKHNjYW4tPmluZGV4UmVsYXRpb24pKQorCQkJVkFMR1JJTkRf TUFLRV9NRU1fTk9BQ0NFU1MoQnVmZmVyR2V0UGFnZShiYXRjaC0+YnVmKSwgQkxDS1NaKTsKKyNl bmRpZgorCQlSZWxlYXNlQnVmZmVyKGJhdGNoLT5idWYpOworCQliYXRjaC0+YnVmID0gSW52YWxp ZEJ1ZmZlcjsKKwl9Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyBiYXRjaAorICoKKyAqIFVz ZWQgYnkgaW5kZXggQU1zIHRoYXQgc3VwcG9ydCBhbWdldGJhdGNoIGludGVyZmFjZSAoYm90aCBk dXJpbmcgYW1nZXRiYXRjaAorICogYW5kIGFtZ2V0Yml0bWFwIHNjYW5zKS4KKyAqCisgKiBSZXR1 cm5zIEluZGV4U2NhbkJhdGNoIHdpdGggc3BhY2UgdG8gZml0IHNjYW4tPm1heGl0ZW1zYmF0Y2gt bWFueQorICogQmF0Y2hNYXRjaGluZ0l0ZW0gZW50cmllcy4gIFRoaXMgd2lsbCBlaXRoZXIgYmUg YSBuZXdseSBhbGxvY2F0ZWQgYmF0Y2gsIG9yCisgKiBhIGJhdGNoIHJlY3ljbGVkIGZyb20gdGhl IGNhY2hlIG1hbmFnZWQgYnkgaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UuICBTZWUKKyAqIGNv bW1lbnRzIGFib3ZlIGluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlLgorICoKKyAqIEhvdXNla2Vl cGluZyBmaWVsZHMgKGJ1Ziwga25vd25FbmRMZWZ0L1JpZ2h0LCBmaXJzdEl0ZW0sIGxhc3RJdGVt LAorICogbnVtS2lsbGVkLCBraWxsZWRJdGVtcywgdmlzSW5mbywgY3VyclR1cGxlcykgYXJlIGlu aXRpYWxpemVkIGhlcmUuICBUaGUKKyAqIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZmlsbGlu ZyBpbiB0aGUgcGFnZS1sZXZlbCBuYXZpZ2F0aW9uIGZpZWxkcworICogKGN1cnJQYWdlLCBwcmV2 UGFnZSwgbmV4dFBhZ2UsIGRpciwgbW9yZUxlZnQsIG1vcmVSaWdodCkgYW5kIHRoZSBtYXRjaGlu ZworICogaXRlbXNbXSBhcnJheS4gIE9uY2UgcG9wdWxhdGVkLCB0aGUgY2FsbGVyIGVpdGhlciBw YXNzZXMgdGhlIGJhdGNoIHRvCisgKiBpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrICh3aGVuIGl0 IGhhcyBtYXRjaGVzIHRvIHJldHVybiBmcm9tIGFtZ2V0YmF0Y2gpLAorICogb3IgdG8gaW5kZXhh bV91dGlsX2JhdGNoX3JlbGVhc2UgKHdoZW4gdGhlIHBhZ2UgaGFkIG5vIG1hdGNoZXMpLiAgTm90 ZQorICogdGhhdCBsc24gaXMgc2V0IGJ5IGluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2ssIG5vdCBi eSB0aGUgY2FsbGVyLgorICovCitJbmRleFNjYW5CYXRjaAoraW5kZXhhbV91dGlsX2JhdGNoX2Fs bG9jKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IE5VTEw7 CisKKwkvKiBGaXJzdCBsb29rIGZvciBhbiBleGlzdGluZyBiYXRjaCBmcm9tIHJpbmcgYnVmZmVy ICovCisJaWYgKHNjYW4tPnVzZWJhdGNocmluZykKKwl7CisJCWZvciAoaW50IGkgPSAwOyBpIDwg SU5ERVhfU0NBTl9DQUNIRV9CQVRDSEVTOyBpKyspCisJCXsKKwkJCWlmIChzY2FuLT5iYXRjaHJp bmdidWYuY2FjaGVbaV0gIT0gTlVMTCkKKwkJCXsKKwkJCQkvKiBSZXR1cm4gY2FjaGVkIHVucmVm ZXJlbmNlZCBiYXRjaCAqLworCQkJCWJhdGNoID0gc2Nhbi0+YmF0Y2hyaW5nYnVmLmNhY2hlW2ld OworCQkJCXNjYW4tPmJhdGNocmluZ2J1Zi5jYWNoZVtpXSA9IE5VTEw7CisKKwkJCQkvKiBDbGVh ciBzdGFsZSB2aXNpYmlsaXR5IGluZm8gZnJvbSBwcmlvciB1c2UgKi8KKwkJCQlpZiAoYmF0Y2gt PnZpc0luZm8pCisJCQkJCW1lbXNldChiYXRjaC0+dmlzSW5mbywgMCwgc2Nhbi0+bWF4aXRlbXNi YXRjaCk7CisKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWlmICghYmF0Y2gpCisJewor CQlTaXplCQlhbGxvY3N6OworCisJCWFsbG9jc3ogPSBvZmZzZXRvZihJbmRleFNjYW5CYXRjaERh dGEsIGl0ZW1zKSArCisJCQlzaXplb2YoQmF0Y2hNYXRjaGluZ0l0ZW0pICogc2Nhbi0+bWF4aXRl bXNiYXRjaDsKKworCQkvKgorCQkgKiBJZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgtb25seSBzY2Fu LCB3ZSBuZWVkIHBlci1pdGVtIHZpc2liaWxpdHkKKwkJICogZmxhZ3MgYW5kIGEgdHVwbGUgc3Rv cmFnZSB3b3Jrc3BhY2UgYXBwZW5kZWQgdG8gdGhlIG1haW4KKwkJICogYWxsb2NhdGlvbi4gIFdl IGFkZCBzcGFjZSBmb3IgdmlzSW5mbyAob25lIGJ5dGUgcGVyIGl0ZW0pIGFuZAorCQkgKiBCTENL U1ogZm9yIHR1cGxlIHN0b3JhZ2UuCisJCSAqLworCQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQor CQl7CisJCQlTaXplCQlpdGVtc0VuZCA9IE1BWEFMSUdOKGFsbG9jc3opOworCQkJU2l6ZQkJdmlz SW5mb1N6ID0gTUFYQUxJR04oc2Nhbi0+bWF4aXRlbXNiYXRjaCAqIHNpemVvZih1aW50OCkpOwor CisJCQlhbGxvY3N6ID0gaXRlbXNFbmQgKyB2aXNJbmZvU3ogKyBCTENLU1o7CisJCQliYXRjaCA9 IHBhbGxvYyhhbGxvY3N6KTsKKwkJCWJhdGNoLT52aXNJbmZvID0gKHVpbnQ4ICopICgoY2hhciAq KSBiYXRjaCArIGl0ZW1zRW5kKTsKKwkJCW1lbXNldChiYXRjaC0+dmlzSW5mbywgMCwgc2Nhbi0+ bWF4aXRlbXNiYXRjaCk7CisJCQliYXRjaC0+Y3VyclR1cGxlcyA9IChjaGFyICopIGJhdGNoICsg aXRlbXNFbmQgKyB2aXNJbmZvU3o7CisJCX0KKwkJZWxzZQorCQl7CisJCQliYXRjaCA9IHBhbGxv YyhhbGxvY3N6KTsKKwkJCWJhdGNoLT52aXNJbmZvID0gTlVMTDsKKwkJCWJhdGNoLT5jdXJyVHVw bGVzID0gTlVMTDsKKwkJfQorCisJCS8qCisJCSAqIEJhdGNoZXMgYWxsb2NhdGUga2lsbGVkSXRl bXMgbGF6aWx5ICh0aG91Z2ggbm90ZSB0aGF0IGNhY2hlZAorCQkgKiBiYXRjaGVzIGtlZXAgdGhl aXIga2lsbGVkSXRlbXMgYWxsb2NhdGlvbiB3aGVuIHJlY3ljbGVkKQorCQkgKi8KKwkJYmF0Y2gt PmtpbGxlZEl0ZW1zID0gTlVMTDsKKwl9CisKKwkvKiB4c193YW50X2l0dXAgc2NhbnMgbXVzdCBn ZXQgYSBjdXJyVHVwbGVzIHNwYWNlICovCisJQXNzZXJ0KCEoc2Nhbi0+eHNfd2FudF9pdHVwICYm IChiYXRjaC0+Y3VyclR1cGxlcyA9PSBOVUxMKSkpOworCisJLyogc2hhcmVkIGluaXRpYWxpemF0 aW9uICovCisJYmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJYmF0Y2gtPmtub3duRW5kTGVm dCA9IGZhbHNlOworCWJhdGNoLT5rbm93bkVuZFJpZ2h0ID0gZmFsc2U7CisJYmF0Y2gtPmZpcnN0 SXRlbSA9IC0xOworCWJhdGNoLT5sYXN0SXRlbSA9IC0xOworCWJhdGNoLT5udW1LaWxsZWQgPSAw OworCisJcmV0dXJuIGJhdGNoOworfQorCisvKgorICogUmVsZWFzZSBhbGxvY2F0ZWQgYmF0Y2gK KyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBpbmRleCBBTXMgdG8gcmVsZWFzZSBh IGJhdGNoIGFsbG9jYXRlZCBieQorICogaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jLiAgQmF0Y2hl cyBhcmUgY2FjaGVkIGhlcmUgZm9yIHJldXNlICh3aGVuIHNjYW4KKyAqIGhhc24ndCBhbHJlYWR5 IGZpbmlzaGVkKSB0byByZWR1Y2UgcGFsbG9jL3BmcmVlIG92ZXJoZWFkLgorICoKKyAqIEl0J3Mg c2FmZSB0byByZWxlYXNlIGEgYmF0Y2ggaW1tZWRpYXRlbHkgd2hlbiBpdCB3YXMgdXNlZCB0byBy ZWFkIGEgcGFnZQorICogdGhhdCByZXR1cm5lZCBubyBtYXRjaGVzIHRvIHRoZSBzY2FuLiAgQmF0 Y2hlcyBhY3R1YWxseSByZXR1cm5lZCBieSBpbmRleAorICogQU0ncyBhbWdldGJhdGNoIHJvdXRp bmUgKGkuZS4gYmF0Y2hlcyBmb3IgcGFnZXMgd2l0aCBvbmUgb3IgbW9yZSBtYXRjaGVzKQorICog bXVzdCBiZSByZWxlYXNlZCBieSB0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaCwgd2hpY2ggY2FsbHMg aGVyZSBhZnRlciB0aGUKKyAqIGluZGV4IEFNJ3MgYW1raWxsaXRlbXNiYXRjaCByb3V0aW5lIChp ZiBhbnkpLiAgSW5kZXggQU1zIHRoYXQgdXNlIGJhdGNoZXMKKyAqIHNob3VsZCBjYWxsIGhlcmUg dG8gcmVsZWFzZSBhIGJhdGNoIGZyb20gdGhlaXIgYW1nZXRiYXRjaCBvciBhbWdldGJpdG1hcAor ICogcm91dGluZXMuCisgKi8KK3ZvaWQKK2luZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJQXNzZXJ0KGJhdGNoLT5i dWYgPT0gSW52YWxpZEJ1ZmZlcik7CisKKwlpZiAoc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCXsKKwkJ LyogYW1nZXRiYXRjaCBzY2FuIGNhbGxlciAqLworCQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9u ICE9IE5VTEwpOworCisJCWlmIChzY2FuLT5iYXRjaHJpbmdidWYuZG9uZSkKKwkJeworCQkJLyog RG9uJ3QgYm90aGVyIHVzaW5nIGNhY2hlIHdoZW4gc2NhbiBpcyBlbmRpbmcgKi8KKwkJfQorCQll bHNlCisJCXsKKwkJCS8qCisJCQkgKiBVc2UgY2FjaGUuICBUaGlzIGlzIGdlbmVyYWxseSBvbmx5 IGJlbmVmaWNpYWwgd2hlbiB0aGVyZSBhcmUKKwkJCSAqIG1hbnkgc21hbGwgcmVzY2FucyBvZiBh biBpbmRleC4KKwkJCSAqLworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBJTkRFWF9TQ0FOX0NBQ0hF X0JBVENIRVM7IGkrKykKKwkJCXsKKwkJCQlpZiAoc2Nhbi0+YmF0Y2hyaW5nYnVmLmNhY2hlW2ld ID09IE5VTEwpCisJCQkJeworCQkJCQkvKiBmb3VuZCBlbXB0eSBzbG90LCB3ZSdyZSBkb25lICov CisJCQkJCXNjYW4tPmJhdGNocmluZ2J1Zi5jYWNoZVtpXSA9IGJhdGNoOworCQkJCQlyZXR1cm47 CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyoKKwkJICogRmFpbGVkIHRvIGZpbmQgYSBmcmVlIHNs b3QgZm9yIHRoaXMgYmF0Y2guICBXZSdsbCBqdXN0IGZyZWUgaXQKKwkJICogb3Vyc2VsdmVzLiAg VGhpcyBpc24ndCByZWFsbHkgZXhwZWN0ZWQ7IGl0J3MganVzdCBkZWZlbnNpdmUuCisJCSAqLwor CQlpZiAoYmF0Y2gtPmtpbGxlZEl0ZW1zKQorCQkJcGZyZWUoYmF0Y2gtPmtpbGxlZEl0ZW1zKTsK Kwl9CisJZWxzZQorCXsKKwkJLyogYW1nZXRiaXRtYXAgc2NhbiBjYWxsZXIgKi8KKwkJQXNzZXJ0 KHNjYW4tPmhlYXBSZWxhdGlvbiA9PSBOVUxMKTsKKwkJQXNzZXJ0KGJhdGNoLT5raWxsZWRJdGVt cyA9PSBOVUxMKTsKKwkJQXNzZXJ0KGJhdGNoLT5jdXJyVHVwbGVzID09IE5VTEwpOworCX0KKwor CS8qIG5vIGZyZWUgc2xvdCB0byBzYXZlIHRoaXMgYmF0Y2ggKGV4cGVjdGVkIHdpdGggYW1nZXRi aXRtYXAgY2FsbGVycykgKi8KKwlwZnJlZShiYXRjaCk7Cit9CisKKy8qCisgKiBxc29ydCBjb21w YXJpc29uIGZ1bmN0aW9uIGZvciBpbnQgYXJyYXlzCisgKi8KK3N0YXRpYyBpbnQKK2JhdGNoX2Nv bXBhcmVfaW50KGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2YikKK3sKKwlpbnQJCQlhID0g KigoY29uc3QgaW50ICopIHZhKTsKKwlpbnQJCQliID0gKigoY29uc3QgaW50ICopIHZiKTsKKwor CXJldHVybiBwZ19jbXBfczMyKGEsIGIpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2luZGV4L21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1 aWxkCmluZGV4IGRhNjRjYjU5NS4uODNkZmEzZjJiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21l c29uLmJ1aWxkCkBAIC01LDQgKzUsNSBAQCBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICdh bXZhbGlkYXRlLmMnLAogICAnZ2VuYW0uYycsCiAgICdpbmRleGFtLmMnLAorICAnaW5kZXhiYXRj aC5jJywKICkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FIGIv c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUKaW5kZXggY2I5MjFjYTJlLi5lNzU1Nzdh N2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FCkBAIC0xNzksMTggKzE3OSwyMSBAQCBob2xk IG9uIHRvIHRoZSBwaW4gKHVzZWQgd2hlbiByZWFkaW5nIGZyb20gdGhlIGxlYWYgcGFnZSkgdW50 aWwgX2FmdGVyXwogdGhleSdyZSBkb25lIHZpc2l0aW5nIHRoZSBoZWFwIChmb3IgVElEcyBmcm9t IHBpbm5lZCBsZWFmIHBhZ2UpIHByZXZlbnRzCiBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcuICBW QUNVVU0gY2Fubm90IGdldCBhIGNvbmZsaWN0aW5nIGNsZWFudXAgbG9jawogdW50aWwgdGhlIGlu ZGV4IHNjYW4gaXMgdG90YWxseSBmaW5pc2hlZCBwcm9jZXNzaW5nIGl0cyBsZWFmIHBhZ2UuCitO b3RlIHRoYXQgdGhlIHRhYmxlIEFNIGRldGVybWluZXMgd2hlbiBhbmQgd2hlcmUgaW5kZXggcGFn ZSBwaW5zIGFyZQorZHJvcHBlZC4gIFRoaXMgaXMgcmVxdWlyZWQgYnkgYW55IGluZGV4IEFNIHRo YXQgaW1wbGVtZW50cyB0aGUgYW1nZXRiYXRjaAoraW50ZXJmYWNlLiAgKFNlZSBhbHNvLCBkb2Mv c3JjL3NnbWwvaW5kZXhhbS5zZ21sKS4KIAotVGhpcyBhcHByb2FjaCBpcyBmYWlybHkgY29hcnNl LCBzbyB3ZSBhdm9pZCBpdCB3aGVuZXZlciBwb3NzaWJsZS4gIEluCi1wcmFjdGljZSBtb3N0IGlu ZGV4IHNjYW5zIHdvbid0IGhvbGQgb250byB0aGVpciBwaW4sIGFuZCBzbyB3b24ndCBibG9jawot VkFDVVVNLiAgVGhlc2UgaW5kZXggc2NhbnMgbXVzdCBkZWFsIHdpdGggVElEIHJlY3ljbGluZyBk aXJlY3RseSwgd2hpY2ggaXMKLW1vcmUgY29tcGxpY2F0ZWQgYW5kIG5vdCBhbHdheXMgcG9zc2li bGUuICBTZWUgbGF0ZXIgc2VjdGlvbiBvbiBtYWtpbmcKLWNvbmN1cnJlbnQgVElEIHJlY3ljbGlu ZyBzYWZlLgorQmxvY2tpbmcgVkFDVVVNIGxpa2UgdGhpcyBjYW4gYmUgZGlzcnVwdGl2ZSwgc28g dGFibGUgQU1zIGF2b2lkIGl0IHdoZW5ldmVyCitwb3NzaWJsZS4gIFRoZSBoZWFwIHRhYmxlIEFN IHVzdWFsbHkgZHJvcHMgbGVhZiBwYWdlIHBpbnMgcmlnaHQgYXdheSwgdGhvdWdoCitub3QgZHVy aW5nIHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1WQ0Mgc25hcHNob3QuICBJbmRleC1vbmx5IHNjYW5z IG1heSBhbHNvCityZXRhaW4gcGlucyBpbiBzb21lIGNhc2VzLgogCi1PcHBvcnR1bmlzdGljIGlu ZGV4IHR1cGxlIGRlbGV0aW9uIHBlcmZvcm1zIGFsbW9zdCB0aGUgc2FtZSBwYWdlLWxldmVsCi1t b2RpZmljYXRpb25zIHdoaWxlIG9ubHkgaG9sZGluZyBhbiBleGNsdXNpdmUgbG9jay4gIFRoaXMg aXMgc2FmZSBiZWNhdXNlCi10aGVyZSBpcyBubyBxdWVzdGlvbiBvZiBUSUQgcmVjeWNsaW5nIHRh a2luZyBwbGFjZSBsYXRlciBvbiAtLSBvbmx5IFZBQ1VVTQotY2FuIG1ha2UgVElEcyByZWN5Y2xh YmxlLiAgU2VlIGFsc28gc2ltcGxlIGRlbGV0aW9uIGFuZCBib3R0b20tdXAKLWRlbGV0aW9uLCBi ZWxvdy4KK09wcG9ydHVuaXN0aWMgaW5kZXggdHVwbGUgZGVsZXRpb24gcGVyZm9ybXMgdGhlIHNh bWUgcGFnZS1sZXZlbAorbW9kaWZpY2F0aW9ucyBhcyBWQUNVVU0sIHdoaWxlIG9ubHkgaG9sZGlu ZyBhbiBleGNsdXNpdmUgbG9jay4gIFRoaXMgaXMKK3NhZmUgYmVjYXVzZSB0aGVyZSBpcyBubyBx dWVzdGlvbiBvZiBUSUQgcmVjeWNsaW5nIHRha2luZyBwbGFjZSAtLSBvbmx5CitWQUNVVU0gY2Fu IG1ha2UgVElEcyByZWN5Y2xhYmxlLiAgSW4gb3RoZXIgd29yZHMsIFZBQ1VVTSdzIGNsZWFudXAg bG9jaworc2VydmVzIHRvIHByb3RlY3Qgbm9uLU1WQ0Mgc25hcHNob3Qgc2NhbnMgZnJvbSBjb25j dXJyZW50IFRJRCByZWN5Y2xpbmcKK2hhemFyZHM7IGl0IGRvZXNuJ3QgcHJvdGVjdCB0aGUgQi1U cmVlIHN0cnVjdHVyZSBpdHNlbGYuCiAKIEJlY2F1c2UgYSBwaW4gaXMgbm90IGFsd2F5cyBoZWxk LCBhbmQgYSBwYWdlIGNhbiBiZSBzcGxpdCBldmVuIHdoaWxlCiBzb21lb25lIGRvZXMgaG9sZCBh IHBpbiBvbiBpdCwgaXQgaXMgcG9zc2libGUgdGhhdCBhbiBpbmRleHNjYW4gd2lsbApAQCAtNDQ0 LDQ0ICs0NDcsMjUgQEAgTWFraW5nIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBzYWZlCiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogQXMgZXhwbGFpbmVkIGluIHRoZSBl YXJsaWVyIHNlY3Rpb24gYWJvdXQgZGVsZXRpbmcgaW5kZXggdHVwbGVzIGR1cmluZwotVkFDVVVN LCB3ZSBpbXBsZW1lbnQgYSBsb2NraW5nIHByb3RvY29sIHRoYXQgYWxsb3dzIGluZGl2aWR1YWwg aW5kZXggc2NhbnMKLXRvIGF2b2lkIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZy4gIEluZGV4IHNj YW5zIG9wdC1vdXQgKGFuZCBzbyBkcm9wIHRoZWlyCi1sZWFmIHBhZ2UgcGluIHdoZW4gdmlzaXRp bmcgdGhlIGhlYXApIHdoZW5ldmVyIGl0J3Mgc2FmZSB0byBkbyBzbywgdGhvdWdoLgotRHJvcHBp bmcgdGhlIHBpbiBlYXJseSBpcyB1c2VmdWwgYmVjYXVzZSBpdCBhdm9pZHMgYmxvY2tpbmcgcHJv Z3Jlc3MgYnkKLVZBQ1VVTS4gIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCB3aXRoIGlu ZGV4IHNjYW5zIHVzZWQgYnkgY3Vyc29ycywKLXNpbmNlIGlkbGUgY3Vyc29ycyBzb21ldGltZXMg c3RvcCBmb3IgcmVsYXRpdmVseSBsb25nIHBlcmlvZHMgb2YgdGltZS4gIEluCi1leHRyZW1lIGNh c2VzLCBhIGNsaWVudCBhcHBsaWNhdGlvbiBtYXkgaG9sZCBvbiB0byBhbiBpZGxlIGN1cnNvcnMg Zm9yCi1ob3VycyBvciBldmVuIGRheXMuICBCbG9ja2luZyBWQUNVVU0gZm9yIHRoYXQgbG9uZyBj b3VsZCBiZSBkaXNhc3Ryb3VzLgorVkFDVVVNLCB3ZSBpbXBsZW1lbnQgYSBsb2NraW5nIHByb3Rv Y29sIHRoYXQgaGVscHMgdGFibGUgQU1zIGRlYWwgd2l0aCBUSUQKK3JlY3ljbGluZyBoYXphcmRz IGR1cmluZyBzY2FucyB0aGF0IHVzZSBhIG5vbi1NVkNDIHNuYXBzaG90LgogCiBJbmRleCBzY2Fu cyB0aGF0IGRvbid0IGhvbGQgb24gdG8gYSBidWZmZXIgcGluIGFyZSBwcm90ZWN0ZWQgYnkgaG9s ZGluZyBhbgogTVZDQyBzbmFwc2hvdCBpbnN0ZWFkLiAgVGhpcyBtb3JlIGxpbWl0ZWQgaW50ZXJs b2NrIHByZXZlbnRzIHdyb25nIGFuc3dlcnMKIHRvIHF1ZXJpZXMsIGJ1dCBpdCBkb2VzIG5vdCBw cmV2ZW50IGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBpdHNlbGYgKG9ubHkKIGhvbGRpbmcgb250 byB0aGUgbGVhZiBwYWdlIHBpbiB3aGlsZSBhY2Nlc3NpbmcgdGhlIGhlYXAgZW5zdXJlcyB0aGF0 KS4KK0ZvciB0aGUgbW9zdCBwYXJ0LCBpdCBpcyB1cCB0byB0aGUgdGFibGUgQU0gdG8gZGVhbCB3 aXRoIGNvbmN1cnJlbnQgVElECityZWN5Y2xpbmcgaGF6YXJkcy4gIEJ1dCB3ZSBzdGlsbCBuZWVk IHRvIGRpcmVjdGx5IGNvbnNpZGVyIHN1Y2ggaGF6YXJkcyB3aGVuCittYXJraW5nIGEga25vd24t ZGVhZCBpbmRleCB0dXBsZSBMUF9ERUFELgogCi1JbmRleC1vbmx5IHNjYW5zIGNhbiBuZXZlciBk cm9wIHRoZWlyIGJ1ZmZlciBwaW4sIHNpbmNlIHRoZXkgYXJlIHVuYWJsZSB0bwotdG9sZXJhdGUg aGF2aW5nIGEgcmVmZXJlbmNlZCBUSUQgYmVjb21lIHJlY3ljbGFibGUuICBJbmRleC1vbmx5IHNj YW5zCi10eXBpY2FsbHkganVzdCB2aXNpdCB0aGUgdmlzaWJpbGl0eSBtYXAgKG5vdCB0aGUgaGVh cCBwcm9wZXIpLCBhbmQgc28gd2lsbAotbm90IHJlbGlhYmx5IG5vdGljZSB0aGF0IGFueSBzdGFs ZSBUSUQgcmVmZXJlbmNlIChmb3IgYSBUSUQgdGhhdCBwb2ludGVkCi10byBhIGRlYWQtdG8tYWxs IGhlYXAgaXRlbSBhdCBmaXJzdCkgd2FzIGNvbmN1cnJlbnRseSBtYXJrZWQgTFBfVU5VU0VEIGlu Ci10aGUgaGVhcCBieSBWQUNVVU0uICBUaGlzIGNvdWxkIGVhc2lseSBhbGxvdyBWQUNVVU0gdG8g c2V0IHRoZSB3aG9sZSBoZWFwCi1wYWdlIHRvIGFsbC12aXNpYmxlIGluIHRoZSB2aXNpYmlsaXR5 IG1hcCBpbW1lZGlhdGVseSBhZnRlcndhcmRzLiAgQW4gTVZDQwotc25hcHNob3QgaXMgb25seSBz dWZmaWNpZW50IHRvIGF2b2lkIHByb2JsZW1zIGR1cmluZyBwbGFpbiBpbmRleCBzY2FucwotYmVj YXVzZSB0aGV5IG11c3QgYWNjZXNzIGdyYW51bGFyIHZpc2liaWxpdHkgaW5mb3JtYXRpb24gZnJv bSB0aGUgaGVhcAotcHJvcGVyLiAgQSBwbGFpbiBpbmRleCBzY2FuIHdpbGwgZXZlbiByZWNvZ25p emUgTFBfVU5VU0VEIGl0ZW1zIGluIHRoZQotaGVhcCAoaXRlbXMgdGhhdCBjb3VsZCBiZSByZWN5 Y2xlZCBidXQgaGF2ZW4ndCBiZWVuIGp1c3QgeWV0KSBhcyAibm90Ci12aXNpYmxlIiAtLSBldmVu IHdoZW4gdGhlIGhlYXAgcGFnZSBpcyBnZW5lcmFsbHkgY29uc2lkZXJlZCBhbGwtdmlzaWJsZS4K LQotTFBfREVBRCBzZXR0aW5nIG9mIGluZGV4IHR1cGxlcyBieSB0aGUga2lsbF9wcmlvcl90dXBs ZSBvcHRpbWl6YXRpb24KLShkZXNjcmliZWQgaW4gZnVsbCBpbiBzaW1wbGUgZGVsZXRpb24sIGJl bG93KSBpcyBhbHNvIG1vcmUgY29tcGxpY2F0ZWQgZm9yCi1pbmRleCBzY2FucyB0aGF0IGRyb3Ag dGhlaXIgbGVhZiBwYWdlIHBpbnMuICBXZSBtdXN0IGJlIGNhcmVmdWwgdG8gYXZvaWQKLUxQX0RF QUQtbWFya2luZyBhbnkgbmV3IGluZGV4IHR1cGxlIHRoYXQgbG9va3MgbGlrZSBhIGtub3duLWRl YWQgaW5kZXgKLXR1cGxlIGJlY2F1c2UgaXQgaGFwcGVucyB0byBzaGFyZSB0aGUgc2FtZSBUSUQs IGZvbGxvd2luZyBjb25jdXJyZW50IFRJRAotcmVjeWNsaW5nLiAgSXQncyBqdXN0IGFib3V0IHBv c3NpYmxlIHRoYXQgc29tZSBvdGhlciBzZXNzaW9uIGluc2VydGVkIGEKLW5ldywgdW5yZWxhdGVk IGluZGV4IHR1cGxlLCBvbiB0aGUgc2FtZSBsZWFmIHBhZ2UsIHdoaWNoIGhhcyB0aGUgc2FtZQot b3JpZ2luYWwgVElELiAgSXQgd291bGQgYmUgdG90YWxseSB3cm9uZyB0byBMUF9ERUFELXNldCB0 aGlzIG5ldywKK1dlIG11c3QgYXZvaWQgTFBfREVBRC1tYXJraW5nIGFueSBuZXcgaW5kZXggdHVw bGUgdGhhdCBsb29rcyBsaWtlIGEKK2tub3duLWRlYWQgaW5kZXggdHVwbGUgYmVjYXVzZSBpdCBo YXBwZW5zIHRvIHNoYXJlIHRoZSBzYW1lIFRJRCwgZm9sbG93aW5nCitjb25jdXJyZW50IFRJRCBy ZWN5Y2xpbmcuICBJdCdzIGp1c3QgYWJvdXQgcG9zc2libGUgdGhhdCBzb21lIG90aGVyIHNlc3Np b24KK2luc2VydGVkIGEgbmV3LCB1bnJlbGF0ZWQgaW5kZXggdHVwbGUsIG9uIHRoZSBzYW1lIGxl YWYgcGFnZSwgd2hpY2ggaGFzIHRoZQorc2FtZSBvcmlnaW5hbCBUSUQuICBJdCB3b3VsZCBiZSB0 b3RhbGx5IHdyb25nIHRvIExQX0RFQUQtc2V0IHRoaXMgbmV3LAogdW5yZWxhdGVkIGluZGV4IHR1 cGxlLgogCi1XZSBoYW5kbGUgdGhpcyBraWxsX3ByaW9yX3R1cGxlIHJhY2UgY29uZGl0aW9uIGJ5 IGhhdmluZyBhZmZlY3RlZCBpbmRleAorV2UgaGFuZGxlIHRoaXMgTFBfREVBRCBzZXR0aW5nIHJh Y2UgY29uZGl0aW9uIGJ5IGhhdmluZyBhbGwgaW5kZXgKIHNjYW5zIGNvbnNlcnZhdGl2ZWx5IGFz c3VtZSB0aGF0IGFueSBjaGFuZ2UgdG8gdGhlIGxlYWYgcGFnZSBhdCBhbGwKIGltcGxpZXMgdGhh dCBpdCB3YXMgcmVhY2hlZCBieSBidGJ1bGtkZWxldGUgaW4gdGhlIGludGVyaW0gcGVyaW9kIHdo ZW4gbm8KIGJ1ZmZlciBwaW4gd2FzIGhlbGQuICBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IG5vdCBz ZXR0aW5nIGFueSBMUF9ERUFEIGJpdHMKQEAgLTczNCw3ICs3MTgsNyBAQCBvZiByZWFkZXJzIGNv dWxkIHN0aWxsIG1vdmUgcmlnaHQgdG8gcmVjb3ZlciBpZiB3ZSBkaWRuJ3QgY291cGxlCiBzYW1l LWxldmVsIGxvY2tzKSwgYnV0IHdlIHByZWZlciB0byBiZSBjb25zZXJ2YXRpdmUgaGVyZS4KIAog RHVyaW5nIHJlY292ZXJ5IGFsbCBpbmRleCBzY2FucyBzdGFydCB3aXRoIGlnbm9yZV9raWxsZWRf dHVwbGVzID0gZmFsc2UKLWFuZCB3ZSBuZXZlciBzZXQga2lsbF9wcmlvcl90dXBsZS4gV2UgZG8g dGhpcyBiZWNhdXNlIHRoZSBvbGRlc3QgeG1pbgorYW5kIHdlIG5ldmVyIExQX0RFQUQtbWFyayB0 dXBsZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSB0aGUgb2xkZXN0IHhtaW4KIG9uIHRoZSBzdGFuZGJ5 IHNlcnZlciBjYW4gYmUgb2xkZXIgdGhhbiB0aGUgb2xkZXN0IHhtaW4gb24gdGhlIHByaW1hcnkK IHNlcnZlciwgd2hpY2ggbWVhbnMgdHVwbGVzIGNhbiBiZSBtYXJrZWQgTFBfREVBRCBldmVuIHdo ZW4gdGhleSBhcmUKIHN0aWxsIHZpc2libGUgb24gdGhlIHN0YW5kYnkuIFdlIGRvbid0IFdBTCBs b2cgdHVwbGUgTFBfREVBRCBiaXRzLCBidXQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0cGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMK aW5kZXggNzBiNTI0ZGZlLi4yODZmOTVkM2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0cGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFn ZS5jCkBAIC0xMDM3LDYgKzEwMzcsOSBAQCBfYnRfcmVsYnVmKFJlbGF0aW9uIHJlbCwgQnVmZmVy IGJ1ZikKICAqIExvY2sgaXMgYWNxdWlyZWQgd2l0aG91dCBhY3F1aXJpbmcgYW5vdGhlciBwaW4u ICBUaGlzIGlzIGxpa2UgYSByYXcKICAqIExvY2tCdWZmZXIoKSBjYWxsLCBidXQgcGVyZm9ybXMg ZXh0cmEgc3RlcHMgbmVlZGVkIGJ5IFZhbGdyaW5kLgogICoKKyAqIE5vdGU6IGluZGV4YW1fdXRp bF9iYXRjaF91bmxvY2sgaGFzIHNpbWlsYXIgVmFsZ3JpbmQgYnVmZmVyIGxvY2sKKyAqIGluc3Ry dW1lbnRhdGlvbiwgd2hpY2ggd2UgcmVseSBvbiBoZXJlLgorICoKICAqIE5vdGU6IENhbGxlciBt YXkgbmVlZCB0byBjYWxsIF9idF9jaGVja3BhZ2UoKSB3aXRoIGJ1ZiB3aGVuIHBpbiBvbiBidWYK ICAqIHdhc24ndCBvcmlnaW5hbGx5IGFjcXVpcmVkIGluIF9idF9nZXRidWYoKSBvciBfYnRfcmVs YW5kZ2V0YnVmKCkuCiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0cmVhZHBhZ2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYwpp bmRleCAyYmExY2E2NjAuLjc2ZDcxYWE3NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRyZWFkcGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 cmVhZHBhZ2UuYwpAQCAtMzIsNiArMzIsNyBAQCB0eXBlZGVmIHN0cnVjdCBCVFJlYWRQYWdlU3Rh dGUKIHsKIAkvKiBJbnB1dCBwYXJhbWV0ZXJzLCBzZXQgYnkgX2J0X3JlYWRwYWdlIGZvciBfYnRf Y2hlY2trZXlzICovCiAJU2NhbkRpcmVjdGlvbiBkaXI7CQkJLyogY3VycmVudCBzY2FuIGRpcmVj dGlvbiAqLworCUJsb2NrTnVtYmVyIGN1cnJwYWdlOwkJLyogY3VycmVudCBwYWdlIGJlaW5nIHJl YWQgKi8KIAlPZmZzZXROdW1iZXIgbWlub2ZmOwkJLyogTG93ZXN0IG5vbi1waXZvdCB0dXBsZSdz IG9mZnNldCAqLwogCU9mZnNldE51bWJlciBtYXhvZmY7CQkvKiBIaWdoZXN0IG5vbi1waXZvdCB0 dXBsZSdzIG9mZnNldCAqLwogCUluZGV4VHVwbGUJZmluYWx0dXA7CQkvKiBOZWVkZWQgYnkgc2Nh bnMgd2l0aCBhcnJheSBrZXlzICovCkBAIC02MywxNCArNjQsMTMgQEAgc3RhdGljIGJvb2wgX2J0 X3NjYW5iZWhpbmRfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIsCiAJCQkJCQkJCQkgSW5kZXhUdXBsZSBmaW5hbHR1cCk7CiBzdGF0aWMgYm9vbCBfYnRfb3Bw b2Rpcl9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKIAkJ CQkJCQkJICBJbmRleFR1cGxlIGZpbmFsdHVwKTsKLXN0YXRpYyB2b2lkIF9idF9zYXZlaXRlbShC VFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkJCQkgT2Zmc2V0TnVtYmVyIG9mZm51 bSwgSW5kZXhUdXBsZSBpdHVwKTsKLXN0YXRpYyBpbnQJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKEJU U2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKK3N0YXRpYyB2b2lkIF9idF9zYXZlaXRlbShJ bmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51 bSwKKwkJCQkJCSBJbmRleFR1cGxlIGl0dXAsIGludCAqdHVwbGVPZmZzZXQpOworc3RhdGljIGlu dAlfYnRfc2V0dXBwb3N0aW5naXRlbXMoSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVt SW5kZXgsCiAJCQkJCQkJCSAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgY29uc3QgSXRlbVBvaW50ZXJE YXRhICpoZWFwVGlkLAotCQkJCQkJCQkgIEluZGV4VHVwbGUgaXR1cCk7Ci1zdGF0aWMgaW5saW5l IHZvaWQgX2J0X3NhdmVwb3N0aW5naXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgs Ci0JCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJCQkJCQkJICAgSXRlbVBvaW50 ZXIgaGVhcFRpZCwgaW50IHR1cGxlT2Zmc2V0KTsKKwkJCQkJCQkJICBJbmRleFR1cGxlIGl0dXAs IGludCAqdHVwbGVPZmZzZXQpOworc3RhdGljIGlubGluZSB2b2lkIF9idF9zYXZlcG9zdGluZ2l0 ZW0oSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBv ZmZudW0sCisJCQkJCQkJCQkgICBJdGVtUG9pbnRlciBoZWFwVGlkLCBpbnQgYmFzZU9mZnNldCk7 CiBzdGF0aWMgYm9vbCBfYnRfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRSZWFkUGFn ZVN0YXRlICpwc3RhdGUsIGJvb2wgYXJyYXlLZXlzLAogCQkJCQkJICBJbmRleFR1cGxlIHR1cGxl LCBpbnQgdHVwbmF0dHMpOwogc3RhdGljIGJvb2wgX2J0X2NoZWNrX2NvbXBhcmUoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKQEAgLTExMSwxNSArMTExLDE1IEBAIHN0YXRp YyBib29sIF9idF92ZXJpZnlfa2V5c193aXRoX2FycmF5a2V5cyhJbmRleFNjYW5EZXNjIHNjYW4p OwogCiAKIC8qCi0gKglfYnRfcmVhZHBhZ2UoKSAtLSBMb2FkIGRhdGEgZnJvbSBjdXJyZW50IGlu ZGV4IHBhZ2UgaW50byBzby0+Y3VyclBvcworICoJX2J0X3JlYWRwYWdlKCkgLS0gTG9hZCBkYXRh IGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gbmV3YmF0Y2guCiAgKgotICogQ2FsbGVyIG11 c3QgaGF2ZSBwaW5uZWQgYW5kIHJlYWQtbG9ja2VkIHNvLT5jdXJyUG9zLmJ1ZjsgdGhlIGJ1ZmZl cidzIHN0YXRlCi0gKiBpcyBub3QgY2hhbmdlZCBoZXJlLiAgQWxzbywgY3VyclBvcy5tb3JlTGVm dCBhbmQgbW9yZVJpZ2h0IG11c3QgYmUgdmFsaWQ7Ci0gKiB0aGV5IGFyZSB1cGRhdGVkIGFzIGFw cHJvcHJpYXRlLiAgQWxsIG90aGVyIGZpZWxkcyBvZiBzby0+Y3VyclBvcyBhcmUKKyAqIENhbGxl ciBtdXN0IGhhdmUgcGlubmVkIGFuZCByZWFkLWxvY2tlZCBuZXdiYXRjaC5idWY7IHRoZSBidWZm ZXIncyBzdGF0ZSBpcworICogbm90IGNoYW5nZWQgaGVyZS4gIEFsc28sIG5ld2JhdGNoJ3MgbW9y ZUxlZnQgYW5kIG1vcmVSaWdodCBtdXN0IGJlIHZhbGlkOworICogdGhleSBhcmUgdXBkYXRlZCBh cyBhcHByb3ByaWF0ZS4gIEFsbCBvdGhlciBmaWVsZHMgb2YgbmV3YmF0Y2ggYXJlCiAgKiBpbml0 aWFsaXplZCBmcm9tIHNjcmF0Y2ggaGVyZS4KICAqCiAgKiBXZSBzY2FuIHRoZSBjdXJyZW50IHBh Z2Ugc3RhcnRpbmcgYXQgb2ZmbnVtIGFuZCBtb3ZpbmcgaW4gdGhlIGluZGljYXRlZAotICogZGly ZWN0aW9uLiAgQWxsIGl0ZW1zIG1hdGNoaW5nIHRoZSBzY2FuIGtleXMgYXJlIGxvYWRlZCBpbnRv IGN1cnJQb3MuaXRlbXMuCisgKiBkaXJlY3Rpb24uICBBbGwgaXRlbXMgbWF0Y2hpbmcgdGhlIHNj YW4ga2V5cyBhcmUgc2F2ZWQgaW4gbmV3YmF0Y2guaXRlbXMuCiAgKiBtb3JlTGVmdCBvciBtb3Jl UmlnaHQgKGFzIGFwcHJvcHJpYXRlKSBpcyBjbGVhcmVkIGlmIF9idF9jaGVja2tleXMgcmVwb3J0 cwogICogdGhhdCB0aGVyZSBjYW4gYmUgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1 cnJlbnQgc2NhbiBkaXJlY3Rpb24KICAqIChjb3VsZCBqdXN0IGJlIGZvciB0aGUgY3VycmVudCBw cmltaXRpdmUgaW5kZXggc2NhbiB3aGVuIHNjYW4gaGFzIGFycmF5cykuCkBAIC0xMzEsOCArMTMx LDggQEAgc3RhdGljIGJvb2wgX2J0X3ZlcmlmeV9rZXlzX3dpdGhfYXJyYXlrZXlzKEluZGV4U2Nh bkRlc2Mgc2Nhbik7CiAgKiBSZXR1cm5zIHRydWUgaWYgYW55IG1hdGNoaW5nIGl0ZW1zIGZvdW5k IG9uIHRoZSBwYWdlLCBmYWxzZSBpZiBub25lLgogICovCiBib29sCi1fYnRfcmVhZHBhZ2UoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwK LQkJCSBib29sIGZpcnN0cGFnZSkKK19idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIElu ZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCSBPZmZzZXROdW1i ZXIgb2ZmbnVtLCBib29sIGZpcnN0cGFnZSkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRl eFJlbGF0aW9uOwogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1 ZTsKQEAgLTE0NCwyMyArMTQ0LDIwIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCWJvb2wJCWFycmF5S2V5 cywKIAkJCQlpZ25vcmVfa2lsbGVkX3R1cGxlcyA9IHNjYW4tPmlnbm9yZV9raWxsZWRfdHVwbGVz OwogCWludAkJCWl0ZW1JbmRleCwKKwkJCQl0dXBsZU9mZnNldCA9IDAsCiAJCQkJaW5kbmF0dHM7 CiAKIAkvKiBzYXZlIHRoZSBwYWdlL2J1ZmZlciBibG9jayBudW1iZXIsIGFsb25nIHdpdGggaXRz IHNpYmxpbmcgbGlua3MgKi8KLQlwYWdlID0gQnVmZmVyR2V0UGFnZShzby0+Y3VyclBvcy5idWYp OworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKG5ld2JhdGNoLT5idWYpOwogCW9wYXF1ZSA9IEJUUGFn ZUdldE9wYXF1ZShwYWdlKTsKLQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2Nr TnVtYmVyKHNvLT5jdXJyUG9zLmJ1Zik7Ci0Jc28tPmN1cnJQb3MucHJldlBhZ2UgPSBvcGFxdWUt PmJ0cG9fcHJldjsKLQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IG9wYXF1ZS0+YnRwb19uZXh0Owot CS8qIGRlbGF5IHNldHRpbmcgc28tPmN1cnJQb3MubHNuIHVudGlsIF9idF9kcm9wX2xvY2tfYW5k X21heWJlX3BpbiAqLwotCXBzdGF0ZS5kaXIgPSBzby0+Y3VyclBvcy5kaXIgPSBkaXI7Ci0Jc28t PmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0ID0gMDsKKwlwc3RhdGUuY3VycnBhZ2UgPSBuZXdiYXRj aC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihuZXdiYXRjaC0+YnVmKTsKKwluZXdi YXRjaC0+cHJldlBhZ2UgPSBvcGFxdWUtPmJ0cG9fcHJldjsKKwluZXdiYXRjaC0+bmV4dFBhZ2Ug PSBvcGFxdWUtPmJ0cG9fbmV4dDsKKwlwc3RhdGUuZGlyID0gbmV3YmF0Y2gtPmRpciA9IGRpcjsK IAogCS8qIGVpdGhlciBtb3JlUmlnaHQgb3IgbW9yZUxlZnQgc2hvdWxkIGJlIHNldCBub3cgKG1h eSBiZSB1bnNldCBsYXRlcikgKi8KLQlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIp ID8gc28tPmN1cnJQb3MubW9yZVJpZ2h0IDoKLQkJICAgc28tPmN1cnJQb3MubW9yZUxlZnQpOwor CUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPyBuZXdiYXRjaC0+bW9yZVJpZ2h0 IDogbmV3YmF0Y2gtPm1vcmVMZWZ0KTsKIAlBc3NlcnQoIVBfSUdOT1JFKG9wYXF1ZSkpOwotCUFz c2VydChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOwogCUFzc2VydCghc28tPm5lZWRQ cmltU2Nhbik7CiAKIAkvKiBpbml0aWFsaXplIGxvY2FsIHZhcmlhYmxlcyAqLwpAQCAtMTg4LDE0 ICsxODUsMTIgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJewogCQkvKiBhbGxvdyBuZXh0L3ByZXYgcGFn ZSB0byBiZSByZWFkIGJ5IG90aGVyIHdvcmtlciB3aXRob3V0IGRlbGF5ICovCiAJCWlmIChTY2Fu RGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCi0JCQlfYnRfcGFyYWxsZWxfcmVsZWFzZShzY2FuLCBz by0+Y3VyclBvcy5uZXh0UGFnZSwKLQkJCQkJCQkJIHNvLT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJ CV9idF9wYXJhbGxlbF9yZWxlYXNlKHNjYW4sIG5ld2JhdGNoLT5uZXh0UGFnZSwgbmV3YmF0Y2gt PmN1cnJQYWdlKTsKIAkJZWxzZQotCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2Nhbiwgc28tPmN1 cnJQb3MucHJldlBhZ2UsCi0JCQkJCQkJCSBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQlfYnRf cGFyYWxsZWxfcmVsZWFzZShzY2FuLCBuZXdiYXRjaC0+cHJldlBhZ2UsIG5ld2JhdGNoLT5jdXJy UGFnZSk7CiAJfQogCi0JUHJlZGljYXRlTG9ja1BhZ2UocmVsLCBzby0+Y3VyclBvcy5jdXJyUGFn ZSwgc2Nhbi0+eHNfc25hcHNob3QpOworCVByZWRpY2F0ZUxvY2tQYWdlKHJlbCwgcHN0YXRlLmN1 cnJwYWdlLCBzY2FuLT54c19zbmFwc2hvdCk7CiAKIAlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2Fy ZChkaXIpKQogCXsKQEAgLTIxMiwxMSArMjA3LDEwIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkJCQkh X2J0X3NjYW5iZWhpbmRfY2hlY2trZXlzKHNjYW4sIGRpciwgcHN0YXRlLmZpbmFsdHVwKSkKIAkJ CQl7CiAJCQkJCS8qIFNjaGVkdWxlIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gYWZ0ZXIg YWxsICovCi0JCQkJCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IGZhbHNlOworCQkJCQluZXdiYXRj aC0+bW9yZVJpZ2h0ID0gZmFsc2U7CiAJCQkJCXNvLT5uZWVkUHJpbVNjYW4gPSB0cnVlOwogCQkJ CQlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbikKLQkJCQkJCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9z Y2hlZHVsZShzY2FuLAotCQkJCQkJCQkJCQkJCSAgIHNvLT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJ CQkJCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVsZShzY2FuLCBuZXdiYXRjaC0+Y3VyclBh Z2UpOwogCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJfQogCQkJfQpAQCAtMjgwLDI2ICsyNzQsMjYg QEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9m ZnNldE51bWJlciBvZmZudW0sCiAJCQkJaWYgKCFCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXApKQog CQkJCXsKIAkJCQkJLyogUmVtZW1iZXIgaXQgKi8KLQkJCQkJX2J0X3NhdmVpdGVtKHNvLCBpdGVt SW5kZXgsIG9mZm51bSwgaXR1cCk7CisJCQkJCV9idF9zYXZlaXRlbShuZXdiYXRjaCwgaXRlbUlu ZGV4LCBvZmZudW0sIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAJCQkJCWl0ZW1JbmRleCsrOwogCQkJ CX0KIAkJCQllbHNlCiAJCQkJewotCQkJCQlpbnQJCQl0dXBsZU9mZnNldDsKKwkJCQkJaW50CQkJ YmFzZU9mZnNldDsKIAogCQkJCQkvKiBTZXQgdXAgcG9zdGluZyBsaXN0IHN0YXRlIChhbmQgcmVt ZW1iZXIgZmlyc3QgVElEKSAqLwotCQkJCQl0dXBsZU9mZnNldCA9Ci0JCQkJCQlfYnRfc2V0dXBw b3N0aW5naXRlbXMoc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQliYXNlT2Zmc2V0ID0KKwkJ CQkJCV9idF9zZXR1cHBvc3RpbmdpdGVtcyhuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJ CQkJCQkJCQkJCSAgQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIDApLAotCQkJCQkJCQkJCQkg IGl0dXApOworCQkJCQkJCQkJCQkgIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAJCQkJCWl0ZW1JbmRl eCsrOwogCiAJCQkJCS8qIFJlbWVtYmVyIGFsbCBsYXRlciBUSURzIChtdXN0IGJlIGF0IGxlYXN0 IG9uZSkgKi8KIAkJCQkJZm9yIChpbnQgaSA9IDE7IGkgPCBCVHJlZVR1cGxlR2V0TlBvc3Rpbmco aXR1cCk7IGkrKykKIAkJCQkJewotCQkJCQkJX2J0X3NhdmVwb3N0aW5naXRlbShzbywgaXRlbUlu ZGV4LCBvZmZudW0sCisJCQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVtKG5ld2JhdGNoLCBpdGVtSW5k ZXgsIG9mZm51bSwKIAkJCQkJCQkJCQkJQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIGkpLAot CQkJCQkJCQkJCQl0dXBsZU9mZnNldCk7CisJCQkJCQkJCQkJCWJhc2VPZmZzZXQpOwogCQkJCQkJ aXRlbUluZGV4Kys7CiAJCQkJCX0KIAkJCQl9CkBAIC0zMzksMTIgKzMzMywxMSBAQCBfYnRfcmVh ZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVy IG9mZm51bSwKIAkJfQogCiAJCWlmICghcHN0YXRlLmNvbnRpbnVlc2NhbikKLQkJCXNvLT5jdXJy UG9zLm1vcmVSaWdodCA9IGZhbHNlOworCQkJbmV3YmF0Y2gtPm1vcmVSaWdodCA9IGZhbHNlOwog CiAJCUFzc2VydChpdGVtSW5kZXggPD0gTWF4VElEc1BlckJUcmVlUGFnZSk7Ci0JCXNvLT5jdXJy UG9zLmZpcnN0SXRlbSA9IDA7Ci0JCXNvLT5jdXJyUG9zLmxhc3RJdGVtID0gaXRlbUluZGV4IC0g MTsKLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gMDsKKwkJbmV3YmF0Y2gtPmZpcnN0SXRlbSA9 IDA7CisJCW5ld2JhdGNoLT5sYXN0SXRlbSA9IGl0ZW1JbmRleCAtIDE7CiAJfQogCWVsc2UKIAl7 CkBAIC0zNjEsMTEgKzM1NCwxMCBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQkJIV9idF9zY2FuYmVo aW5kX2NoZWNra2V5cyhzY2FuLCBkaXIsIHBzdGF0ZS5maW5hbHR1cCkpCiAJCQkJewogCQkJCQkv KiBTY2hlZHVsZSBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuIGFmdGVyIGFsbCAqLwotCQkJ CQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IGZhbHNlOworCQkJCQluZXdiYXRjaC0+bW9yZUxlZnQg PSBmYWxzZTsKIAkJCQkJc28tPm5lZWRQcmltU2NhbiA9IHRydWU7CiAJCQkJCWlmIChzY2FuLT5w YXJhbGxlbF9zY2FuKQotCQkJCQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4s Ci0JCQkJCQkJCQkJCQkJICAgc28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJCQkJX2J0X3BhcmFs bGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sIG5ld2JhdGNoLT5jdXJyUGFnZSk7CiAJCQkJCXJl dHVybiBmYWxzZTsKIAkJCQl9CiAJCQl9CkBAIC00NjYsMjcgKzQ1OCwyNyBAQCBfYnRfcmVhZHBh Z2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9m Zm51bSwKIAkJCQl7CiAJCQkJCS8qIFJlbWVtYmVyIGl0ICovCiAJCQkJCWl0ZW1JbmRleC0tOwot CQkJCQlfYnRfc2F2ZWl0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKKwkJCQkJX2J0 X3NhdmVpdGVtKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCwgJnR1cGxlT2Zmc2V0 KTsKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsKIAkJCQkJdWludDE2CQluaXRlbXMgPSBCVHJlZVR1 cGxlR2V0TlBvc3RpbmcoaXR1cCk7Ci0JCQkJCWludAkJCXR1cGxlT2Zmc2V0OworCQkJCQlpbnQJ CQliYXNlT2Zmc2V0OwogCiAJCQkJCS8qIFNldCB1cCBwb3N0aW5nIGxpc3Qgc3RhdGUgKGFuZCBy ZW1lbWJlciBsYXN0IFRJRCkgKi8KIAkJCQkJaXRlbUluZGV4LS07Ci0JCQkJCXR1cGxlT2Zmc2V0 ID0KLQkJCQkJCV9idF9zZXR1cHBvc3RpbmdpdGVtcyhzbywgaXRlbUluZGV4LCBvZmZudW0sCisJ CQkJCWJhc2VPZmZzZXQgPQorCQkJCQkJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKG5ld2JhdGNoLCBp dGVtSW5kZXgsIG9mZm51bSwKIAkJCQkJCQkJCQkJICBCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1 cCwgbml0ZW1zIC0gMSksCi0JCQkJCQkJCQkJCSAgaXR1cCk7CisJCQkJCQkJCQkJCSAgaXR1cCwg JnR1cGxlT2Zmc2V0KTsKIAogCQkJCQkvKiBSZW1lbWJlciBhbGwgcHJpb3IgVElEcyAobXVzdCBi ZSBhdCBsZWFzdCBvbmUpICovCiAJCQkJCWZvciAoaW50IGkgPSBuaXRlbXMgLSAyOyBpID49IDA7 IGktLSkKIAkJCQkJewogCQkJCQkJaXRlbUluZGV4LS07Ci0JCQkJCQlfYnRfc2F2ZXBvc3Rpbmdp dGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJCQkJCV9idF9zYXZlcG9zdGluZ2l0ZW0obmV3 YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJCQlCVHJlZVR1cGxlR2V0UG9zdGlu Z04oaXR1cCwgaSksCi0JCQkJCQkJCQkJCXR1cGxlT2Zmc2V0KTsKKwkJCQkJCQkJCQkJYmFzZU9m ZnNldCk7CiAJCQkJCX0KIAkJCQl9CiAJCQl9CkBAIC01MDIsMTIgKzQ5NCwxMSBAQCBfYnRfcmVh ZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVy IG9mZm51bSwKIAkJICogYmUgZm91bmQgdGhlcmUKIAkJICovCiAJCWlmICghcHN0YXRlLmNvbnRp bnVlc2NhbikKLQkJCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gZmFsc2U7CisJCQluZXdiYXRjaC0+ bW9yZUxlZnQgPSBmYWxzZTsKIAogCQlBc3NlcnQoaXRlbUluZGV4ID49IDApOwotCQlzby0+Y3Vy clBvcy5maXJzdEl0ZW0gPSBpdGVtSW5kZXg7Ci0JCXNvLT5jdXJyUG9zLmxhc3RJdGVtID0gTWF4 VElEc1BlckJUcmVlUGFnZSAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IE1heFRJRHNQ ZXJCVHJlZVBhZ2UgLSAxOworCQluZXdiYXRjaC0+Zmlyc3RJdGVtID0gaXRlbUluZGV4OworCQlu ZXdiYXRjaC0+bGFzdEl0ZW0gPSBNYXhUSURzUGVyQlRyZWVQYWdlIC0gMTsKIAl9CiAKIAkvKgpA QCAtNTI0LDcgKzUxNSw3IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCSAqLwogCUFzc2VydCghcHN0YXRl LmZvcmNlbm9ucmVxdWlyZWQpOwogCi0JcmV0dXJuIChzby0+Y3VyclBvcy5maXJzdEl0ZW0gPD0g c28tPmN1cnJQb3MubGFzdEl0ZW0pOworCXJldHVybiAobmV3YmF0Y2gtPmZpcnN0SXRlbSA8PSBu ZXdiYXRjaC0+bGFzdEl0ZW0pOwogfQogCiAvKgpAQCAtMTAyNyw5MCArMTAxOCw5MSBAQCBfYnRf b3Bwb2Rpcl9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwK IAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gc28tPmN1cnJQ b3MuaXRlbXNbaXRlbUluZGV4XSAqLworLyogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gbmV3YmF0 Y2guaXRlbXNbaXRlbUluZGV4XSAqLwogc3RhdGljIHZvaWQKLV9idF9zYXZlaXRlbShCVFNjYW5P cGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkgT2Zmc2V0TnVtYmVyIG9mZm51bSwgSW5kZXhU dXBsZSBpdHVwKQorX2J0X3NhdmVpdGVtKEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBpbnQgaXRl bUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJIEluZGV4VHVwbGUgaXR1cCwgaW50ICp0 dXBsZU9mZnNldCkKIHsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5p dGVtc1tpdGVtSW5kZXhdOwotCiAJQXNzZXJ0KCFCVHJlZVR1cGxlSXNQaXZvdChpdHVwKSAmJiAh QlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSk7CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9IGl0dXAt PnRfdGlkOwotCWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKLQlpZiAoc28tPmN1cnJU dXBsZXMpCisJbmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0uaGVhcFRpZCA9IGl0dXAtPnRfdGlk OworCW5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLmluZGV4T2Zmc2V0ID0gb2ZmbnVtOworCisJ aWYgKG5ld2JhdGNoLT5jdXJyVHVwbGVzKQogCXsKIAkJU2l6ZQkJaXR1cHN6ID0gSW5kZXhUdXBs ZVNpemUoaXR1cCk7CiAKLQkJY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0ID0gc28tPmN1cnJQb3MubmV4 dFR1cGxlT2Zmc2V0OwotCQltZW1jcHkoc28tPmN1cnJUdXBsZXMgKyBzby0+Y3VyclBvcy5uZXh0 VHVwbGVPZmZzZXQsIGl0dXAsIGl0dXBzeik7Ci0JCXNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNl dCArPSBNQVhBTElHTihpdHVwc3opOworCQluZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS50dXBs ZU9mZnNldCA9ICp0dXBsZU9mZnNldDsKKwkJbWVtY3B5KG5ld2JhdGNoLT5jdXJyVHVwbGVzICsg KnR1cGxlT2Zmc2V0LCBpdHVwLCBpdHVwc3opOworCQkqdHVwbGVPZmZzZXQgKz0gTUFYQUxJR04o aXR1cHN6KTsKIAl9CiB9CiAKIC8qCiAgKiBTZXR1cCBzdGF0ZSB0byBzYXZlIFRJRHMvaXRlbXMg ZnJvbSBhIHNpbmdsZSBwb3N0aW5nIGxpc3QgdHVwbGUuCiAgKgotICogU2F2ZXMgYW4gaW5kZXgg aXRlbSBpbnRvIHNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF0gZm9yIFRJRCB0aGF0IGlzCi0g KiByZXR1cm5lZCB0byBzY2FuIGZpcnN0LiAgU2Vjb25kIG9yIHN1YnNlcXVlbnQgVElEcyBmb3Ig cG9zdGluZyBsaXN0IHNob3VsZAotICogYmUgc2F2ZWQgYnkgY2FsbGluZyBfYnRfc2F2ZXBvc3Rp bmdpdGVtKCkuCisgKiBTYXZlcyBhbiBpbmRleCBpdGVtIGludG8gbmV3YmF0Y2guaXRlbXNbaXRl bUluZGV4XSBmb3IgVElEIHRoYXQgaXMgcmV0dXJuZWQKKyAqIHRvIHNjYW4gZmlyc3QuICBTZWNv bmQgb3Igc3Vic2VxdWVudCBUSURzIGZvciBwb3N0aW5nIGxpc3Qgc2hvdWxkIGJlIHNhdmVkCisg KiBieSBjYWxsaW5nIF9idF9zYXZlcG9zdGluZ2l0ZW0oKS4KICAqCi0gKiBSZXR1cm5zIGFuIG9m ZnNldCBpbnRvIHR1cGxlIHN0b3JhZ2Ugc3BhY2UgdGhhdCBtYWluIHR1cGxlIGlzIHN0b3JlZCBh dCBpZgotICogbmVlZGVkLgorICogUmV0dXJucyBiYXNlT2Zmc2V0LCBhbiBvZmZzZXQgaW50byB0 dXBsZSBzdG9yYWdlIHNwYWNlIHRoYXQgbWFpbiB0dXBsZSBpcworICogc3RvcmVkIGF0IGlmIG5l ZWRlZC4KICAqLwogc3RhdGljIGludAotX2J0X3NldHVwcG9zdGluZ2l0ZW1zKEJUU2Nhbk9wYXF1 ZSBzbywgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCQkJICBjb25zdCBJ dGVtUG9pbnRlckRhdGEgKmhlYXBUaWQsIEluZGV4VHVwbGUgaXR1cCkKK19idF9zZXR1cHBvc3Rp bmdpdGVtcyhJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwKKwkJCQkJICBP ZmZzZXROdW1iZXIgb2ZmbnVtLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKmhlYXBUaWQsCisJCQkJ CSAgSW5kZXhUdXBsZSBpdHVwLCBpbnQgKnR1cGxlT2Zmc2V0KQogewotCUJUU2NhblBvc0l0ZW0g KmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07CisJQmF0Y2hNYXRjaGlu Z0l0ZW0gKml0ZW0gPSAmbmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CiAKIAlBc3NlcnQoQlRy ZWVUdXBsZUlzUG9zdGluZyhpdHVwKSk7CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9ICpoZWFwVGlk OwotCWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKLQlpZiAoc28tPmN1cnJUdXBsZXMp CisJaXRlbS0+aGVhcFRpZCA9ICpoZWFwVGlkOworCWl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVt OworCisJaWYgKG5ld2JhdGNoLT5jdXJyVHVwbGVzKQogCXsKIAkJLyogU2F2ZSBiYXNlIEluZGV4 VHVwbGUgKHRydW5jYXRlIHBvc3RpbmcgbGlzdCkgKi8KIAkJSW5kZXhUdXBsZQliYXNlOwogCQlT aXplCQlpdHVwc3ogPSBCVHJlZVR1cGxlR2V0UG9zdGluZ09mZnNldChpdHVwKTsKIAogCQlpdHVw c3ogPSBNQVhBTElHTihpdHVwc3opOwotCQljdXJySXRlbS0+dHVwbGVPZmZzZXQgPSBzby0+Y3Vy clBvcy5uZXh0VHVwbGVPZmZzZXQ7Ci0JCWJhc2UgPSAoSW5kZXhUdXBsZSkgKHNvLT5jdXJyVHVw bGVzICsgc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0KTsKKwkJaXRlbS0+dHVwbGVPZmZzZXQg PSAqdHVwbGVPZmZzZXQ7CisJCWJhc2UgPSAoSW5kZXhUdXBsZSkgKG5ld2JhdGNoLT5jdXJyVHVw bGVzICsgKnR1cGxlT2Zmc2V0KTsKIAkJbWVtY3B5KGJhc2UsIGl0dXAsIGl0dXBzeik7CiAJCS8q IERlZmVuc2l2ZWx5IHJlZHVjZSB3b3JrIGFyZWEgaW5kZXggdHVwbGUgaGVhZGVyIHNpemUgKi8K IAkJYmFzZS0+dF9pbmZvICY9IH5JTkRFWF9TSVpFX01BU0s7CiAJCWJhc2UtPnRfaW5mbyB8PSBp dHVwc3o7Ci0JCXNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCArPSBpdHVwc3o7CisJCSp0dXBs ZU9mZnNldCArPSBpdHVwc3o7CiAKLQkJcmV0dXJuIGN1cnJJdGVtLT50dXBsZU9mZnNldDsKKwkJ cmV0dXJuIGl0ZW0tPnR1cGxlT2Zmc2V0OwogCX0KIAogCXJldHVybiAwOwogfQogCiAvKgotICog U2F2ZSBhbiBpbmRleCBpdGVtIGludG8gc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XSBmb3Ig Y3VycmVudCBwb3N0aW5nCisgKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBuZXdiYXRjaC5pdGVt c1tpdGVtSW5kZXhdIGZvciBjdXJyZW50IHBvc3RpbmcKICAqIHR1cGxlLgogICoKICAqIEFzc3Vt ZXMgdGhhdCBfYnRfc2V0dXBwb3N0aW5naXRlbXMoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBm b3IgY3VycmVudAotICogcG9zdGluZyBsaXN0IHR1cGxlLiAgQ2FsbGVyIHBhc3NlcyBpdHMgcmV0 dXJuIHZhbHVlIGFzIHR1cGxlT2Zmc2V0LgorICogcG9zdGluZyBsaXN0IHR1cGxlLiAgQ2FsbGVy IHBhc3NlcyBpdHMgcmV0dXJuIHZhbHVlIGFzIGJhc2VPZmZzZXQuCiAgKi8KIHN0YXRpYyBpbmxp bmUgdm9pZAotX2J0X3NhdmVwb3N0aW5naXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5k ZXgsIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkJCUl0ZW1Qb2ludGVyIGhlYXBUaWQsIGludCB0 dXBsZU9mZnNldCkKK19idF9zYXZlcG9zdGluZ2l0ZW0oSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gs IGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0sCisJCQkJCUl0ZW1Qb2ludGVyIGhl YXBUaWQsIGludCBiYXNlT2Zmc2V0KQogewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNv LT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07CisJQmF0Y2hNYXRjaGluZ0l0ZW0gKml0ZW0gPSAm bmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9ICpoZWFw VGlkOwotCWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKKwlpdGVtLT5oZWFwVGlkID0g KmhlYXBUaWQ7CisJaXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07CiAKIAkvKgogCSAqIEhhdmUg aW5kZXgtb25seSBzY2FucyByZXR1cm4gdGhlIHNhbWUgYmFzZSBJbmRleFR1cGxlIGZvciBldmVy eSBUSUQKIAkgKiB0aGF0IG9yaWdpbmF0ZXMgZnJvbSB0aGUgc2FtZSBwb3N0aW5nIGxpc3QKIAkg Ki8KLQlpZiAoc28tPmN1cnJUdXBsZXMpCi0JCWN1cnJJdGVtLT50dXBsZU9mZnNldCA9IHR1cGxl T2Zmc2V0OworCWlmIChuZXdiYXRjaC0+Y3VyclR1cGxlcykKKwkJaXRlbS0+dHVwbGVPZmZzZXQg PSBiYXNlT2Zmc2V0OwogfQogCiAjZGVmaW5lIExPT0tfQUhFQURfUkVRVUlSRURfUkVDSEVDS1Mg CTMKQEAgLTI4MjIsMTMgKzI4MTQsMTMgQEAgbmV3X3ByaW1fc2NhbjoKIAkgKiBOb3RlOiBXZSBt YWtlIGEgc29mdCBhc3N1bXB0aW9uIHRoYXQgdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24gd2ls bAogCSAqIGFsc28gYmUgdXNlZCB3aXRoaW4gX2J0X25leHQsIHdoZW4gaXQgaXMgYXNrZWQgdG8g c3RlcCBvZmYgdGhpcyBwYWdlLgogCSAqIEl0IGlzIHVwIHRvIF9idF9uZXh0IHRvIGNhbmNlbCB0 aGlzIHNjaGVkdWxlZCBwcmltaXRpdmUgaW5kZXggc2NhbgotCSAqIHdoZW5ldmVyIGl0IHN0ZXBz IHRvIGEgcGFnZSBpbiB0aGUgZGlyZWN0aW9uIG9wcG9zaXRlIGN1cnJQb3MuZGlyLgorCSAqIHdo ZW5ldmVyIGl0IHN0ZXBzIHRvIGEgcGFnZSBpbiB0aGUgZGlyZWN0aW9uIG9wcG9zaXRlIHBzdGF0 ZS0+ZGlyLgogCSAqLwogCXBzdGF0ZS0+Y29udGludWVzY2FuID0gZmFsc2U7CS8qIFRlbGwgX2J0 X3JlYWRwYWdlIHdlJ3JlIGRvbmUuLi4gKi8KIAlzby0+bmVlZFByaW1TY2FuID0gdHJ1ZTsJLyog Li4uYnV0IGNhbGwgX2J0X2ZpcnN0IGFnYWluICovCiAKIAlpZiAoc2Nhbi0+cGFyYWxsZWxfc2Nh bikKLQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sIHNvLT5jdXJyUG9zLmN1 cnJQYWdlKTsKKwkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sIHBzdGF0ZS0+ Y3VycnBhZ2UpOwogCiAJLyogQ2FsbGVyJ3MgdHVwbGUgZG9lc24ndCBtYXRjaCB0aGUgbmV3IHF1 YWwgKi8KIAlyZXR1cm4gZmFsc2U7CkBAIC0yOTEzLDE0ICsyOTA1LDYgQEAgX2J0X2FkdmFuY2Vf YXJyYXlfa2V5c19pbmNyZW1lbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp ciwKIAkgKiBSZXN0b3JlIHRoZSBhcnJheSBrZXlzIHRvIHRoZSBzdGF0ZSB0aGV5IHdlcmUgaW4g aW1tZWRpYXRlbHkgYmVmb3JlIHdlCiAJICogd2VyZSBjYWxsZWQuICBUaGlzIGVuc3VyZXMgdGhh dCB0aGUgYXJyYXlzIG9ubHkgZXZlciByYXRjaGV0IGluIHRoZQogCSAqIGN1cnJlbnQgc2NhbiBk aXJlY3Rpb24uCi0JICoKLQkgKiBXaXRob3V0IHRoaXMsIHNjYW5zIGNvdWxkIG92ZXJsb29rIG1h dGNoaW5nIHR1cGxlcyB3aGVuIHRoZSBzY2FuCi0JICogZGlyZWN0aW9uIGdldHMgcmV2ZXJzZWQg anVzdCBiZWZvcmUgYnRnZXR0dXBsZSBydW5zIG91dCBvZiBpdGVtcyB0bwotCSAqIHJldHVybiwg YnV0IGp1c3QgYWZ0ZXIgX2J0X3JlYWRwYWdlIHByZXBhcmVzIGFsbCB0aGUgaXRlbXMgZnJvbSB0 aGUKLQkgKiBzY2FuJ3MgZmluYWwgcGFnZSBpbiBzby0+Y3VyclBvcy4gIFdoZW4gd2UncmUgb24g dGhlIGZpbmFsIHBhZ2UgaXQgaXMKLQkgKiB0eXBpY2FsIGZvciBzby0+Y3VyclBvcyB0byBnZXQg aW52YWxpZGF0ZWQgb25jZSBidGdldHR1cGxlIGZpbmFsbHkKLQkgKiByZXR1cm5zIGZhbHNlLCB3 aGljaCdsbCBlZmZlY3RpdmVseSBpbnZhbGlkYXRlIHRoZSBzY2FuJ3MgYXJyYXkga2V5cy4KLQkg KiBUaGF0IGhhc24ndCBoYXBwZW5lZCB5ZXQsIHRob3VnaCAtLSBhbmQgaW4gZ2VuZXJhbCBpdCBt YXkgbmV2ZXIgaGFwcGVuLgogCSAqLwogCV9idF9zdGFydF9hcnJheV9rZXlzKHNjYW4sIC1kaXIp OwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwppbmRleCA4ZDYzNmQ5ODYuLmU3M2VhZDNk YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCkBAIC0xNTksMTEgKzE1OSwxMiBAQCBi dGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYWRqdXN0bWVtYmVycyA9IGJ0YWRqdXN0 bWVtYmVycywKIAkJLmFtYmVnaW5zY2FuID0gYnRiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGJ0 cmVzY2FuLAotCQkuYW1nZXR0dXBsZSA9IGJ0Z2V0dHVwbGUsCisJCS5hbWdldHR1cGxlID0gTlVM TCwKKwkJLmFtZ2V0YmF0Y2ggPSBidGdldGJhdGNoLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IGJ0 a2lsbGl0ZW1zYmF0Y2gsCiAJCS5hbWdldGJpdG1hcCA9IGJ0Z2V0Yml0bWFwLAogCQkuYW1lbmRz Y2FuID0gYnRlbmRzY2FuLAotCQkuYW1tYXJrcG9zID0gYnRtYXJrcG9zLAotCQkuYW1yZXN0cnBv cyA9IGJ0cmVzdHJwb3MsCisJCS5hbXBvc3Jlc2V0ID0gYnRwb3NyZXNldCwKIAkJLmFtZXN0aW1h dGVwYXJhbGxlbHNjYW4gPSBidGVzdGltYXRlcGFyYWxsZWxzY2FuLAogCQkuYW1pbml0cGFyYWxs ZWxzY2FuID0gYnRpbml0cGFyYWxsZWxzY2FuLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IGJ0cGFy YWxsZWxyZXNjYW4sCkBAIC0yMjIsMTMgKzIyMywxMyBAQCBidGluc2VydChSZWxhdGlvbiByZWws IERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIH0KIAogLyoKLSAqCWJ0Z2V0dHVwbGUoKSAt LSBHZXQgdGhlIG5leHQgdHVwbGUgaW4gdGhlIHNjYW4uCisgKglidGdldGJhdGNoKCkgLS0gR2V0 IHRoZSBmaXJzdCBvciBuZXh0IGJhdGNoIG9mIHR1cGxlcyBpbiB0aGUgc2NhbgogICovCi1ib29s Ci1idGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitJbmRl eFNjYW5CYXRjaAorYnRnZXRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNo IHByaW9yYmF0Y2gsIFNjYW5EaXJlY3Rpb24gZGlyKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChC VFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlib29sCQlyZXM7CisJSW5kZXhTY2FuQmF0Y2gg YmF0Y2ggPSBwcmlvcmJhdGNoOwogCiAJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxM KTsKIApAQCAtMjQxLDQ1ICsyNDIsMjAgQEAgYnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKQogCQkvKgogCQkgKiBJZiB3ZSd2ZSBhbHJlYWR5IGluaXRpYWxp emVkIHRoaXMgc2Nhbiwgd2UgY2FuIGp1c3QgYWR2YW5jZSBpdCBpbgogCQkgKiB0aGUgYXBwcm9w cmlhdGUgZGlyZWN0aW9uLiAgSWYgd2UgaGF2ZW4ndCBkb25lIHNvIHlldCwgd2UgY2FsbAotCQkg KiBfYnRfZmlyc3QoKSB0byBnZXQgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHNjYW4uCisJCSAqIF9i dF9maXJzdCgpIHRvIGdldCB0aGUgZmlyc3QgYmF0Y2ggaW4gdGhlIHNjYW4uCiAJCSAqLwotCQlp ZiAoIUJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCQkJcmVzID0gX2J0X2ZpcnN0KHNj YW4sIGRpcik7CisJCWlmIChiYXRjaCA9PSBOVUxMKQorCQkJYmF0Y2ggPSBfYnRfZmlyc3Qoc2Nh biwgZGlyKTsKIAkJZWxzZQotCQl7Ci0JCQkvKgotCQkJICogQ2hlY2sgdG8gc2VlIGlmIHdlIHNo b3VsZCBraWxsIHRoZSBwcmV2aW91c2x5LWZldGNoZWQgdHVwbGUuCi0JCQkgKi8KLQkJCWlmIChz Y2FuLT5raWxsX3ByaW9yX3R1cGxlKQotCQkJewotCQkJCS8qCi0JCQkJICogWWVzLCByZW1lbWJl ciBpdCBmb3IgbGF0ZXIuIChXZSdsbCBkZWFsIHdpdGggYWxsIHN1Y2gKLQkJCQkgKiB0dXBsZXMg YXQgb25jZSByaWdodCBiZWZvcmUgbGVhdmluZyB0aGUgaW5kZXggcGFnZS4pICBUaGUKLQkJCQkg KiB0ZXN0IGZvciBudW1LaWxsZWQgb3ZlcnJ1biBpcyBub3QganVzdCBwYXJhbm9pYTogaWYgdGhl Ci0JCQkJICogY2FsbGVyIHJldmVyc2VzIGRpcmVjdGlvbiBpbiB0aGUgaW5kZXhzY2FuIHRoZW4g dGhlIHNhbWUKLQkJCQkgKiBpdGVtIG1pZ2h0IGdldCBlbnRlcmVkIG11bHRpcGxlIHRpbWVzLiBJ dCdzIG5vdCB3b3J0aAotCQkJCSAqIHRyeWluZyB0byBvcHRpbWl6ZSB0aGF0LCBzbyB3ZSBkb24n dCBkZXRlY3QgaXQsIGJ1dCBpbnN0ZWFkCi0JCQkJICoganVzdCBmb3JnZXQgYW55IGV4Y2VzcyBl bnRyaWVzLgotCQkJCSAqLwotCQkJCWlmIChzby0+a2lsbGVkSXRlbXMgPT0gTlVMTCkKLQkJCQkJ c28tPmtpbGxlZEl0ZW1zID0gcGFsbG9jX2FycmF5KGludCwgTWF4VElEc1BlckJUcmVlUGFnZSk7 Ci0JCQkJaWYgKHNvLT5udW1LaWxsZWQgPCBNYXhUSURzUGVyQlRyZWVQYWdlKQotCQkJCQlzby0+ a2lsbGVkSXRlbXNbc28tPm51bUtpbGxlZCsrXSA9IHNvLT5jdXJyUG9zLml0ZW1JbmRleDsKLQkJ CX0KKwkJCWJhdGNoID0gX2J0X25leHQoc2NhbiwgZGlyLCBiYXRjaCk7CiAKLQkJCS8qCi0JCQkg KiBOb3cgY29udGludWUgdGhlIHNjYW4uCi0JCQkgKi8KLQkJCXJlcyA9IF9idF9uZXh0KHNjYW4s IGRpcik7Ci0JCX0KLQotCQkvKiBJZiB3ZSBoYXZlIGEgdHVwbGUsIHJldHVybiBpdCAuLi4gKi8K LQkJaWYgKHJlcykKKwkJLyogSWYgd2UgaGF2ZSBhIGJhdGNoLCByZXR1cm4gaXQgLi4uICovCisJ CWlmIChiYXRjaCkKIAkJCWJyZWFrOwogCQkvKiAuLi4gb3RoZXJ3aXNlIHNlZSBpZiB3ZSBuZWVk IGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gKi8KIAl9IHdoaWxlIChzby0+bnVtQXJyYXlL ZXlzICYmIF9idF9zdGFydF9wcmltX3NjYW4oc2NhbikpOwogCi0JcmV0dXJuIHJlczsKKwlyZXR1 cm4gYmF0Y2g7CiB9CiAKIC8qCkBAIC0yODksNiArMjY1LDcgQEAgaW50NjQKIGJ0Z2V0Yml0bWFw KEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiB7CiAJQlRTY2FuT3BhcXVlIHNv ID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUluZGV4U2NhbkJhdGNoIGJhdGNoOwog CWludDY0CQludGlkcyA9IDA7CiAJSXRlbVBvaW50ZXIgaGVhcFRpZDsKIApAQCAtMjk3LDI5ICsy NzQsMjkgQEAgYnRnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSkK IAkvKiBFYWNoIGxvb3AgaXRlcmF0aW9uIHBlcmZvcm1zIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4 IHNjYW4gKi8KIAlkbwogCXsKLQkJLyogRmV0Y2ggdGhlIGZpcnN0IHBhZ2UgJiB0dXBsZSAqLwot CQlpZiAoX2J0X2ZpcnN0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKSkKKwkJLyogRmV0Y2gg dGhlIGZpcnN0IGJhdGNoICovCisJCWlmICgoYmF0Y2ggPSBfYnRfZmlyc3Qoc2NhbiwgRm9yd2Fy ZFNjYW5EaXJlY3Rpb24pKSkKIAkJewotCQkJLyogU2F2ZSB0dXBsZSBJRCwgYW5kIGNvbnRpbnVl IHNjYW5uaW5nICovCi0JCQloZWFwVGlkID0gJnNjYW4tPnhzX2hlYXB0aWQ7CisJCQlpbnQJCQlp dGVtSW5kZXggPSAwOworCisJCQkvKiBTYXZlIGZpcnN0IHR1cGxlJ3MgVElEICovCisJCQloZWFw VGlkID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLmhlYXBUaWQ7CiAJCQl0Ym1fYWRkX3R1cGxl cyh0Ym0sIGhlYXBUaWQsIDEsIGZhbHNlKTsKIAkJCW50aWRzKys7CiAKIAkJCWZvciAoOzspCiAJ CQl7Ci0JCQkJLyoKLQkJCQkgKiBBZHZhbmNlIHRvIG5leHQgdHVwbGUgd2l0aGluIHBhZ2UuICBU aGlzIGlzIHRoZSBzYW1lIGFzIHRoZQotCQkJCSAqIGVhc3kgY2FzZSBpbiBfYnRfbmV4dCgpLgot CQkJCSAqLwotCQkJCWlmICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxh c3RJdGVtKQorCQkJCS8qIEFkdmFuY2UgdG8gbmV4dCBUSUQgd2l0aGluIHBhZ2Utc2l6ZWQgYmF0 Y2ggKi8KKwkJCQlpZiAoKytpdGVtSW5kZXggPiBiYXRjaC0+bGFzdEl0ZW0pCiAJCQkJewogCQkJ CQkvKiBsZXQgX2J0X25leHQgZG8gdGhlIGhlYXZ5IGxpZnRpbmcgKi8KLQkJCQkJaWYgKCFfYnRf bmV4dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbikpCisJCQkJCWl0ZW1JbmRleCA9IDA7CisJ CQkJCWJhdGNoID0gX2J0X25leHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIGJhdGNoKTsK KwkJCQkJaWYgKCFiYXRjaCkKIAkJCQkJCWJyZWFrOwogCQkJCX0KIAotCQkJCS8qIFNhdmUgdHVw bGUgSUQsIGFuZCBjb250aW51ZSBzY2FubmluZyAqLwotCQkJCWhlYXBUaWQgPSAmc28tPmN1cnJQ b3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XS5oZWFwVGlkOworCQkJCWhlYXBUaWQgPSAm YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0uaGVhcFRpZDsKIAkJCQl0Ym1fYWRkX3R1cGxlcyh0Ym0s IGhlYXBUaWQsIDEsIGZhbHNlKTsKIAkJCQludGlkcysrOwogCQkJfQpAQCAtMzQ3LDggKzMyNCw2 IEBAIGJ0YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQog CiAJLyogYWxsb2NhdGUgcHJpdmF0ZSB3b3Jrc3BhY2UgKi8KIAlzbyA9IHBhbGxvY19vYmplY3Qo QlRTY2FuT3BhcXVlRGF0YSk7Ci0JQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0J QlRTY2FuUG9zSW52YWxpZGF0ZShzby0+bWFya1Bvcyk7CiAJaWYgKHNjYW4tPm51bWJlck9mS2V5 cyA+IDApCiAJCXNvLT5rZXlEYXRhID0gKFNjYW5LZXkpIHBhbGxvYyhzY2FuLT5udW1iZXJPZktl eXMgKiBzaXplb2YoU2NhbktleURhdGEpKTsKIAllbHNlCkBAIC0zNjIsMTkgKzMzNyw5IEBAIGJ0 YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCXNvLT5v cmRlclByb2NzID0gTlVMTDsKIAlzby0+YXJyYXlDb250ZXh0ID0gTlVMTDsKIAotCXNvLT5raWxs ZWRJdGVtcyA9IE5VTEw7CQkvKiB1bnRpbCBuZWVkZWQgKi8KLQlzby0+bnVtS2lsbGVkID0gMDsK LQotCS8qCi0JICogV2UgZG9uJ3Qga25vdyB5ZXQgd2hldGhlciB0aGUgc2NhbiB3aWxsIGJlIGlu ZGV4LW9ubHksIHNvIHdlIGRvIG5vdAotCSAqIGFsbG9jYXRlIHRoZSB0dXBsZSB3b3Jrc3BhY2Ug YXJyYXlzIHVudGlsIGJ0cmVzY2FuLiAgSG93ZXZlciwgd2Ugc2V0IHVwCi0JICogc2Nhbi0+eHNf aXR1cGRlc2Mgd2hldGhlciB3ZSdsbCBuZWVkIGl0IG9yIG5vdCwgc2luY2UgdGhhdCdzIHNvIGNo ZWFwLgotCSAqLwotCXNvLT5jdXJyVHVwbGVzID0gc28tPm1hcmtUdXBsZXMgPSBOVUxMOwotCi0J c2Nhbi0+eHNfaXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7Ci0KIAlzY2FuLT5vcGFx dWUgPSBzbzsKKwlzY2FuLT54c19pdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKKwlz Y2FuLT5tYXhpdGVtc2JhdGNoID0gTWF4VElEc1BlckJUcmVlUGFnZTsKIAogCXJldHVybiBzY2Fu OwogfQpAQCAtMzg4LDY0ICszNTMsMTU1IEBAIGJ0cmVzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChC VFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAotCS8qIHdlIGFyZW4ndCBob2xkaW5nIGFueSBy ZWFkIGxvY2tzLCBidXQgZ290dGEgZHJvcCB0aGUgcGlucyAqLwotCWlmIChCVFNjYW5Qb3NJc1Zh bGlkKHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwg ZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQot CQkJX2J0X2tpbGxpdGVtcyhzY2FuKTsKLQkJQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3Vy clBvcyk7Ci0JCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCX0KLQotCS8qCi0J ICogV2UgcHJlZmVyIHRvIGVhZ2VybHkgZHJvcCBsZWFmIHBhZ2UgcGlucyBiZWZvcmUgYnRnZXR0 dXBsZSByZXR1cm5zLgotCSAqIFRoaXMgYXZvaWRzIG1ha2luZyBWQUNVVU0gd2FpdCB0byBhY3F1 aXJlIGEgY2xlYW51cCBsb2NrIG9uIHRoZSBwYWdlLgotCSAqCi0JICogV2UgY2Fubm90IHNhZmVs eSBkcm9wIGxlYWYgcGFnZSBwaW5zIGR1cmluZyBpbmRleC1vbmx5IHNjYW5zIGR1ZSB0byBhCi0J ICogcmFjZSBjb25kaXRpb24gaW52b2x2aW5nIFZBQ1VVTSBzZXR0aW5nIHBhZ2VzIGFsbC12aXNp YmxlIGluIHRoZSBWTS4KLQkgKiBJdCdzIGFsc28gdW5zYWZlIGZvciBwbGFpbiBpbmRleCBzY2Fu cyB0aGF0IHVzZSBhIG5vbi1NVkNDIHNuYXBzaG90LgotCSAqCi0JICogQWxzbyBvcHQgb3V0IG9m IGRyb3BwaW5nIGxlYWYgcGFnZSBwaW5zIGVhZ2VybHkgZHVyaW5nIGJpdG1hcCBzY2Fucy4KLQkg KiBQaW5zIGNhbm5vdCBiZSBoZWxkIGZvciBtb3JlIHRoYW4gYW4gaW5zdGFudCBkdXJpbmcgYml0 bWFwIHNjYW5zIGVpdGhlcgotCSAqIHdheSwgc28gd2UgbWlnaHQgYXMgd2VsbCBhdm9pZCB3YXN0 aW5nIGN5Y2xlcyBvbiBhY3F1aXJpbmcgcGFnZSBMU05zLgotCSAqCi0JICogU2VlIG5idHJlZS9S RUFETUUgc2VjdGlvbiBvbiBtYWtpbmcgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIHNhZmUuCi0J ICoKLQkgKiBOb3RlOiBzby0+ZHJvcFBpbiBzaG91bGQgbmV2ZXIgY2hhbmdlIGFjcm9zcyByZXNj YW5zLgotCSAqLwotCXNvLT5kcm9wUGluID0gKCFzY2FuLT54c193YW50X2l0dXAgJiYKLQkJCQkg ICBJc01WQ0NTbmFwc2hvdChzY2FuLT54c19zbmFwc2hvdCkgJiYKLQkJCQkgICBzY2FuLT5oZWFw UmVsYXRpb24gIT0gTlVMTCk7Ci0KLQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwotCXNvLT5uZWVk UHJpbVNjYW4gPSBmYWxzZTsKLQlzby0+c2NhbkJlaGluZCA9IGZhbHNlOwotCXNvLT5vcHBvc2l0 ZURpckNoZWNrID0gZmFsc2U7Ci0JQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+bWFya1Bvcyk7 Ci0JQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+bWFya1Bvcyk7Ci0KLQkvKgotCSAqIEFsbG9jYXRl IHR1cGxlIHdvcmtzcGFjZSBhcnJheXMsIGlmIG5lZWRlZCBmb3IgYW4gaW5kZXgtb25seSBzY2Fu IGFuZAotCSAqIG5vdCBhbHJlYWR5IGRvbmUgaW4gYSBwcmV2aW91cyByZXNjYW4gY2FsbC4gIFRv IHNhdmUgb24gcGFsbG9jCi0JICogb3ZlcmhlYWQsIGJvdGggd29ya3NwYWNlcyBhcmUgYWxsb2Nh dGVkIGFzIG9uZSBwYWxsb2MgYmxvY2s7IG9ubHkgdGhpcwotCSAqIGZ1bmN0aW9uIGFuZCBidGVu ZHNjYW4ga25vdyB0aGF0LgotCSAqLwotCWlmIChzY2FuLT54c193YW50X2l0dXAgJiYgc28tPmN1 cnJUdXBsZXMgPT0gTlVMTCkKLQl7Ci0JCXNvLT5jdXJyVHVwbGVzID0gKGNoYXIgKikgcGFsbG9j KEJMQ0tTWiAqIDIpOwotCQlzby0+bWFya1R1cGxlcyA9IHNvLT5jdXJyVHVwbGVzICsgQkxDS1Na OwotCX0KLQogCS8qCiAJICogUmVzZXQgdGhlIHNjYW4ga2V5cwogCSAqLwogCWlmIChzY2Fua2V5 ICYmIHNjYW4tPm51bWJlck9mS2V5cyA+IDApCiAJCW1lbWNweShzY2FuLT5rZXlEYXRhLCBzY2Fu a2V5LCBzY2FuLT5udW1iZXJPZktleXMgKiBzaXplb2YoU2NhbktleURhdGEpKTsKKwlzby0+bmVl ZFByaW1TY2FuID0gZmFsc2U7CisJc28tPnNjYW5CZWhpbmQgPSBmYWxzZTsKKwlzby0+b3Bwb3Np dGVEaXJDaGVjayA9IGZhbHNlOwogCXNvLT5udW1iZXJPZktleXMgPSAwOwkJLyogdW50aWwgX2J0 X3ByZXByb2Nlc3Nfa2V5cyBzZXRzIGl0ICovCiAJc28tPm51bUFycmF5S2V5cyA9IDA7CQkvKiBk aXR0byAqLwogfQogCisvKgorICoJYnRraWxsaXRlbXNiYXRjaCgpIC0tIE1hcmsga2lsbGVkIGl0 ZW1zJyBpbmRleCB0dXBsZXMgTFBfREVBRAorICovCit2b2lkCitidGtpbGxpdGVtc2JhdGNoKElu ZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJUmVsYXRpb24JcmVs ID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKKwlQYWdlCQlwYWdlOworCUJUUGFnZU9wYXF1ZSBvcGFx dWU7CisJT2Zmc2V0TnVtYmVyIG1pbm9mZjsKKwlPZmZzZXROdW1iZXIgbWF4b2ZmOworCWJvb2wJ CWtpbGxlZHNvbWV0aGluZyA9IGZhbHNlOworCUJ1ZmZlcgkJYnVmOworCVhMb2dSZWNQdHIJbGF0 ZXN0bHNuOworCisJLyogVGFibGUgQU0gc2hvdWxkIGhhdmUgYWxyZWFkeSByZWxlYXNlZCBiYXRj aCBwYWdlJ3MgcGluIGJ5IG5vdyAqLworCUFzc2VydChiYXRjaC0+bnVtS2lsbGVkID4gMCk7CisJ QXNzZXJ0KEJsb2NrTnVtYmVySXNWYWxpZChiYXRjaC0+Y3VyclBhZ2UpKTsKKworCWJ1ZiA9IF9i dF9nZXRidWYocmVsLCBiYXRjaC0+Y3VyclBhZ2UsIEJUX1JFQUQpOworCisJbGF0ZXN0bHNuID0g QnVmZmVyR2V0TFNOQXRvbWljKGJ1Zik7CisJQXNzZXJ0KGJhdGNoLT5sc24gPD0gbGF0ZXN0bHNu KTsKKwlpZiAoYmF0Y2gtPmxzbiAhPSBsYXRlc3Rsc24pCisJeworCQkvKiBNb2RpZmllZCwgZ2l2 ZSB1cCBvbiBoaW50aW5nICovCisJCV9idF9yZWxidWYocmVsLCBidWYpOworCQlyZXR1cm47CisJ fQorCisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKKwlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFx dWUocGFnZSk7CisJbWlub2ZmID0gUF9GSVJTVERBVEFLRVkob3BhcXVlKTsKKwltYXhvZmYgPSBQ YWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOworCisJLyogSXRlcmF0ZSB0aHJvdWdoIGJhdGNo LT5raWxsZWRJdGVtc1tdIGluIGxlYWYgcGFnZSBvcmRlciAqLworCWZvciAoaW50IGkgPSAwOyBp IDwgYmF0Y2gtPm51bUtpbGxlZDsgaSsrKQorCXsKKwkJaW50CQkJaXRlbUluZGV4ID0gYmF0Y2gt PmtpbGxlZEl0ZW1zW2ldOworCQlCYXRjaE1hdGNoaW5nSXRlbSAqa2l0ZW0gPSAmYmF0Y2gtPml0 ZW1zW2l0ZW1JbmRleF07CisJCU9mZnNldE51bWJlciBvZmZudW0gPSBraXRlbS0+aW5kZXhPZmZz ZXQ7CisKKwkJQXNzZXJ0KGl0ZW1JbmRleCA+PSBiYXRjaC0+Zmlyc3RJdGVtICYmIGl0ZW1JbmRl eCA8PSBiYXRjaC0+bGFzdEl0ZW0pOworCQlBc3NlcnQoaSA9PSAwIHx8CisJCQkgICBvZmZudW0g Pj0gYmF0Y2gtPml0ZW1zW2JhdGNoLT5raWxsZWRJdGVtc1tpIC0gMV1dLmluZGV4T2Zmc2V0KTsK KworCQlpZiAob2ZmbnVtIDwgbWlub2ZmKQorCQkJY29udGludWU7CQkJLyogcHVyZSBwYXJhbm9p YSAqLworCQl3aGlsZSAob2ZmbnVtIDw9IG1heG9mZikKKwkJeworCQkJSXRlbUlkCQlpaWQgPSBQ YWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7CisJCQlJbmRleFR1cGxlCWl0dXBsZSA9IChJbmRl eFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpaWQpOworCQkJYm9vbAkJa2lsbHR1cGxlID0gZmFs c2U7CisKKwkJCWlmIChCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXBsZSkpCisJCQl7CisJCQkJaW50 CQkJcGkgPSBpICsgMTsKKwkJCQlpbnQJCQlucG9zdGluZyA9IEJUcmVlVHVwbGVHZXROUG9zdGlu ZyhpdHVwbGUpOworCQkJCWludAkJCWo7CisKKwkJCQlmb3IgKGogPSAwOyBqIDwgbnBvc3Rpbmc7 IGorKykKKwkJCQl7CisJCQkJCUl0ZW1Qb2ludGVyIGl0ZW0gPSBCVHJlZVR1cGxlR2V0UG9zdGlu Z04oaXR1cGxlLCBqKTsKKworCQkJCQlpZiAoIUl0ZW1Qb2ludGVyRXF1YWxzKGl0ZW0sICZraXRl bS0+aGVhcFRpZCkpCisJCQkJCQlicmVhazsJLyogb3V0IG9mIHBvc3RpbmcgbGlzdCBsb29wICov CisKKwkJCQkJQXNzZXJ0KGtpdGVtLT5pbmRleE9mZnNldCA9PSBvZmZudW0pOworCisJCQkJCS8q CisJCQkJCSAqIFJlYWQtYWhlYWQgdG8gbGF0ZXIga2l0ZW1zIGhlcmUuCisJCQkJCSAqCisJCQkJ CSAqIFdlIHJlbHkgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBub3QgYWR2YW5jaW5nIGtpdGVtIGhl cmUKKwkJCQkJICogd2lsbCBwcmV2ZW50IHVzIGZyb20gY29uc2lkZXJpbmcgdGhlIHBvc3Rpbmcg bGlzdCB0dXBsZQorCQkJCQkgKiBmdWxseSBkZWFkIGJ5IG5vdCBtYXRjaGluZyBpdHMgbmV4dCBo ZWFwIFRJRCBpbiBuZXh0CisJCQkJCSAqIGxvb3AgaXRlcmF0aW9uLgorCQkJCQkgKgorCQkJCQkg KiBJZiwgb24gdGhlIG90aGVyIGhhbmQsIHRoaXMgaXMgdGhlIGZpbmFsIGhlYXAgVElEIGluCisJ CQkJCSAqIHRoZSBwb3N0aW5nIGxpc3QgdHVwbGUsIHRoZW4gdHVwbGUgZ2V0cyBraWxsZWQKKwkJ CQkJICogcmVnYXJkbGVzcyAoaS5lLiB3ZSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIGxhc3QK KwkJCQkJICoga2l0ZW0gaXMgYWxzbyB0aGUgbGFzdCBoZWFwIFRJRCBpbiB0aGUgbGFzdCBpbmRl eCB0dXBsZQorCQkJCQkgKiBjb3JyZWN0bHkgLS0gcG9zdGluZyB0dXBsZSBzdGlsbCBnZXRzIGtp bGxlZCkuCisJCQkJCSAqLworCQkJCQlpZiAocGkgPCBiYXRjaC0+bnVtS2lsbGVkKQorCQkJCQkJ a2l0ZW0gPSAmYmF0Y2gtPml0ZW1zW2JhdGNoLT5raWxsZWRJdGVtc1twaSsrXV07CisJCQkJfQor CisJCQkJLyoKKwkJCQkgKiBEb24ndCBib3RoZXIgYWR2YW5jaW5nIHRoZSBvdXRlcm1vc3QgbG9v cCdzIGludCBpdGVyYXRvciB0bworCQkJCSAqIGF2b2lkIHByb2Nlc3Npbmcga2lsbGVkIGl0ZW1z IHRoYXQgcmVsYXRlIHRvIHRoZSBzYW1lCisJCQkJICogb2ZmbnVtL3Bvc3RpbmcgbGlzdCB0dXBs ZS4gIFRoaXMgbWljcm8tb3B0aW1pemF0aW9uIGhhcmRseQorCQkJCSAqIHNlZW1zIHdvcnRoIGl0 LiAgKEZ1cnRoZXIgaXRlcmF0aW9ucyBvZiB0aGUgb3V0ZXJtb3N0IGxvb3AKKwkJCQkgKiB3aWxs IGZhaWwgdG8gbWF0Y2ggb24gdGhpcyBzYW1lIHBvc3RpbmcgbGlzdCdzIGZpcnN0IGhlYXAKKwkJ CQkgKiBUSUQgaW5zdGVhZCwgc28gd2UnbGwgYWR2YW5jZSB0byB0aGUgbmV4dCBvZmZudW0vaW5k ZXgKKwkJCQkgKiB0dXBsZSBwcmV0dHkgcXVpY2tseS4pCisJCQkJICovCisJCQkJaWYgKGogPT0g bnBvc3RpbmcpCisJCQkJCWtpbGx0dXBsZSA9IHRydWU7CisJCQl9CisJCQllbHNlIGlmIChJdGVt UG9pbnRlckVxdWFscygmaXR1cGxlLT50X3RpZCwgJmtpdGVtLT5oZWFwVGlkKSkKKwkJCQlraWxs dHVwbGUgPSB0cnVlOworCisJCQkvKgorCQkJICogTWFyayBpbmRleCBpdGVtIGFzIGRlYWQsIGlm IGl0IGlzbid0IGFscmVhZHkuICBTaW5jZSB0aGlzCisJCQkgKiBoYXBwZW5zIHdoaWxlIGhvbGRp bmcgYSBidWZmZXIgbG9jayBwb3NzaWJseSBpbiBzaGFyZWQgbW9kZSwKKwkJCSAqIGl0J3MgcG9z c2libGUgdGhhdCBtdWx0aXBsZSBwcm9jZXNzZXMgYXR0ZW1wdCB0byBkbyB0aGlzCisJCQkgKiBz aW11bHRhbmVvdXNseSwgbGVhZGluZyB0byBtdWx0aXBsZSBmdWxsLXBhZ2UgaW1hZ2VzIGJlaW5n IHNlbnQKKwkJCSAqIHRvIFdBTCAoaWYgd2FsX2xvZ19oaW50cyBvciBkYXRhIGNoZWNrc3VtcyBh cmUgZW5hYmxlZCksIHdoaWNoCisJCQkgKiBpcyB1bmRlc2lyYWJsZS4KKwkJCSAqLworCQkJaWYg KGtpbGx0dXBsZSAmJiAhSXRlbUlkSXNEZWFkKGlpZCkpCisJCQl7CisJCQkJLyogZm91bmQgdGhl IGl0ZW0vYWxsIHBvc3RpbmcgbGlzdCBpdGVtcyAqLworCQkJCUl0ZW1JZE1hcmtEZWFkKGlpZCk7 CisJCQkJa2lsbGVkc29tZXRoaW5nID0gdHJ1ZTsKKwkJCQlicmVhazsJCQkvKiBvdXQgb2YgaW5u ZXIgc2VhcmNoIGxvb3AgKi8KKwkJCX0KKwkJCW9mZm51bSA9IE9mZnNldE51bWJlck5leHQob2Zm bnVtKTsKKwkJfQorCX0KKworCS8qCisJICogU2luY2UgdGhpcyBjYW4gYmUgcmVkb25lIGxhdGVy IGlmIG5lZWRlZCwgbWFyayBhcyBkaXJ0eSBoaW50LgorCSAqCisJICogV2hlbmV2ZXIgd2UgbWFy ayBhbnl0aGluZyBMUF9ERUFELCB3ZSBhbHNvIHNldCB0aGUgcGFnZSdzCisJICogQlRQX0hBU19H QVJCQUdFIGZsYWcsIHdoaWNoIGlzIGxpa2V3aXNlIGp1c3QgYSBoaW50LiAgKE5vdGUgdGhhdCB3 ZQorCSAqIG9ubHkgcmVseSBvbiB0aGUgcGFnZS1sZXZlbCBmbGFnIGluICFoZWFwa2V5c3BhY2Ug aW5kZXhlcy4pCisJICovCisJaWYgKGtpbGxlZHNvbWV0aGluZykKKwl7CisJCW9wYXF1ZS0+YnRw b19mbGFncyB8PSBCVFBfSEFTX0dBUkJBR0U7CisJCU1hcmtCdWZmZXJEaXJ0eUhpbnQoYnVmLCB0 cnVlKTsKKwl9CisKKwlfYnRfcmVsYnVmKHJlbCwgYnVmKTsKK30KKwogLyoKICAqCWJ0ZW5kc2Nh bigpIC0tIGNsb3NlIGRvd24gYSBzY2FuCiAgKi8KQEAgLTQ1NCwxMTYgKzUxMCw2MiBAQCBidGVu ZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5P cGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAotCS8qIHdlIGFyZW4ndCBob2xkaW5nIGFueSByZWFkIGxv Y2tzLCBidXQgZ290dGEgZHJvcCB0aGUgcGlucyAqLwotCWlmIChCVFNjYW5Qb3NJc1ZhbGlkKHNv LT5jdXJyUG9zKSkKLQl7Ci0JCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3 aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJX2J0 X2tpbGxpdGVtcyhzY2FuKTsKLQkJQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3VyclBvcyk7 Ci0JfQotCi0Jc28tPm1hcmtJdGVtSW5kZXggPSAtMTsKLQlCVFNjYW5Qb3NVbnBpbklmUGlubmVk KHNvLT5tYXJrUG9zKTsKLQotCS8qIE5vIG5lZWQgdG8gaW52YWxpZGF0ZSBwb3NpdGlvbnMsIHRo ZSBSQU0gaXMgYWJvdXQgdG8gYmUgZnJlZWQuICovCi0KIAkvKiBSZWxlYXNlIHN0b3JhZ2UgKi8K IAlpZiAoc28tPmtleURhdGEgIT0gTlVMTCkKIAkJcGZyZWUoc28tPmtleURhdGEpOwogCS8qIHNv LT5hcnJheUtleXMgYW5kIHNvLT5vcmRlclByb2NzIGFyZSBpbiBhcnJheUNvbnRleHQgKi8KIAlp ZiAoc28tPmFycmF5Q29udGV4dCAhPSBOVUxMKQogCQlNZW1vcnlDb250ZXh0RGVsZXRlKHNvLT5h cnJheUNvbnRleHQpOwotCWlmIChzby0+a2lsbGVkSXRlbXMgIT0gTlVMTCkKLQkJcGZyZWUoc28t PmtpbGxlZEl0ZW1zKTsKLQlpZiAoc28tPmN1cnJUdXBsZXMgIT0gTlVMTCkKLQkJcGZyZWUoc28t PmN1cnJUdXBsZXMpOwotCS8qIHNvLT5tYXJrVHVwbGVzIHNob3VsZCBub3QgYmUgcGZyZWUnZCwg c2VlIGJ0cmVzY2FuICovCiAJcGZyZWUoc28pOwogfQogCiAvKgotICoJYnRtYXJrcG9zKCkgLS0g c2F2ZSBjdXJyZW50IHNjYW4gcG9zaXRpb24KKyAqCWJ0cG9zcmVzZXQoKSAtLSByZXNldCBhcnJh eSBrZXkgc3RhdGUgZm9yIHNjYW4gcG9zaXRpb24gY2hhbmdlCisgKgorICogQ2FsbGVkIGJ5IHRo ZSBjb3JlIHN5c3RlbSB3aGVuIHRoZSBzY2FuJ3MgbG9naWNhbCBwb3NpdGlvbiBpcyBhYm91dCB0 bworICogY2hhbmdlIGluIGEgd2F5IHRoYXQgaW52YWxpZGF0ZXMgb3VyIGFycmF5IGtleSBzdGF0 ZS4gIFRoaXMgaGFwcGVucyB3aGVuCisgKiByZXN0b3JpbmcgYSBtYXJrZWQgcG9zaXRpb24sIG9y IHdoZW4gdGhlIHNjYW4gY3Jvc3NlcyBhIGJhdGNoIGJvdW5kYXJ5CisgKiB3aGlsZSBtb3Zpbmcg aW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiB0byB0aGUgb25lIG9yaWdpbmFsbHkgdXNlZC4KKyAq CisgKiBGb3IgZGlyZWN0aW9uIGNoYW5nZXMsIHRoZSBjb3JlIHN5c3RlbSB3aWxsIGhhdmUgYWxy ZWFkeSBmbGlwcGVkIHRoZQorICogYmF0Y2gncyBkaXIgZmllbGQgYmVmb3JlIGNhbGxpbmcgaGVy ZTsgd2UgdXNlIHRoaXMgdXBkYXRlZCBkaXJlY3Rpb24gd2hlbgorICogcmVzZXR0aW5nIG91ciBh cnJheSBrZXlzLiAgRm9yIG1hcmsgcmVzdG9yYXRpb24sIHRoZSBiYXRjaCdzIGRpciB3aWxsCisg KiByZXRhaW4gaXRzIG9yaWdpbmFsIHZhbHVlIChmcm9tIHdoZW4gYnRnZXRiYXRjaCByZXR1cm5l ZCBpdCkuCiAgKi8KIHZvaWQKLWJ0bWFya3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCitidHBvc3Jl c2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiB7CiAJQlRTY2Fu T3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCi0JLyogVGhlcmUgbWF5 IGJlIGFuIG9sZCBtYXJrIHdpdGggYSBwaW4gKGJ1dCBubyBsb2NrKS4gKi8KLQlCVFNjYW5Qb3NV bnBpbklmUGlubmVkKHNvLT5tYXJrUG9zKTsKKwlpZiAoIXNvLT5udW1BcnJheUtleXMpCisJCXJl dHVybjsKIAogCS8qCi0JICogSnVzdCByZWNvcmQgdGhlIGN1cnJlbnQgaXRlbUluZGV4LiAgSWYg d2UgbGF0ZXIgc3RlcCB0byBuZXh0IHBhZ2UKLQkgKiBiZWZvcmUgcmVsZWFzaW5nIHRoZSBtYXJr ZWQgcG9zaXRpb24sIF9idF9zdGVwcGFnZSBtYWtlcyBhIGZ1bGwgY29weSBvZgotCSAqIHRoZSBj dXJyUG9zIHN0cnVjdCBpbiBtYXJrUG9zLiAgSWYgKGFzIG9mdGVuIGhhcHBlbnMpIHRoZSBtYXJr IGlzIG1vdmVkCi0JICogYmVmb3JlIHdlIGxlYXZlIHRoZSBwYWdlLCB3ZSBkb24ndCBoYXZlIHRv IGRvIHRoYXQgd29yay4KKwkgKiBSZXNldCBhcnJheSBrZXlzIHRvIGluaXRpYWwgc3RhdGUgZm9y IHRoZSBiYXRjaCdzIHNjYW4gZGlyZWN0aW9uLiAgQWxzbworCSAqIGNsZWFyIG5lZWRQcmltU2Nh biBhbmQgcmVsYXRlZCBmbGFncy4gIFRoZXNlIHdlcmUgc2V0IGJhc2VkIG9uIHRoZSBzb2Z0CisJ ICogYXNzdW1wdGlvbiB0aGF0IHRoZSBzY2FuIHdvdWxkIGFsd2F5cyBwcm9jZWVkIGluIHRoZSBz YW1lIGRpcmVjdGlvbi4KKwkgKgorCSAqIFRoZXNlIHN0ZXBzIHdvcmsgYXJvdW5kIHRoZSBzb2Z0 IGFzc3VtcHRpb24gYmVpbmcgdmlvbGF0ZWQ6IHRoZXkgZm9yY2UKKwkgKiB0aGUgc2NhbiB0byBz dGVwIHRvIHRoZSBuZXh0L3ByZXZpb3VzIHBhZ2UsIG1ha2luZyB0aGUgYXJyYXlzIHJlY292ZXIu CisJICogV2hlbiB3ZSBnbyB0byByZWFkIHRoYXQgcGFnZSwgX2J0X3JlYWRwYWdlIHdpbGwgcmVs aWFibHkgZGV0ZXJtaW5lIGlmIGEKKwkgKiBwcmltaXRpdmUgc2NhbiByZWFsbHkgaXMgbmVlZGVk IGJhc2VkIG9uIHRoZSBwYWdlJ3MgdHVwbGVzLiAgSWYgdGhlcmUncworCSAqIGEgcHJpbWl0aXZl IHNjYW4sIGl0IHdpbGwgcmVwb3NpdGlvbiB0aGUgc2NhbiB1c2luZyBuZXcgYXJyYXkgdmFsdWVz CisJICogKGJhc2VkIG9uIHRoZSB0dXBsZXMgZnJvbSB0aGUgbmVpZ2hib3JpbmcgcGFnZSB3ZSds bCBzdGVwIG9uIHRvKS4KKwkgKgorCSAqIFdlIG5lZWQgdG8gcmVzZXQgdGhlIGFycmF5IGtleSBz dGF0ZSBpbiB0aGUgY29ycmVjdCBkaXJlY3Rpb24gc28gdGhhdAorCSAqIHdlIHdvbid0IGdldCBj b25mdXNlZC4gIFdoZW4gdGhlIGFycmF5IGtleXMgYXJlIGJlaGluZCB0aGUga2V5IHNwYWNlCisJ ICogZm9yIHRoZSBwYWdlIHdlJ3JlIHN0ZXBwaW5nIG9uIHRvIChiZWhpbmQgaW4gdGVybXMgb2Yg dGhlIHNjYW4gZGlyKSwKKwkgKiB0aGV5IHdpbGwgY2F0Y2ggdXAgYXV0b21hdGljYWxseS4gIEJ1 dCB3aGVuIHRoZXkncmUgYWhlYWQgb2YgdGhhdAorCSAqIHBhZ2UncyBrZXkgc3BhY2UsIHRoZSBz Y2FuIGNvdWxkIG1pc3MgbWF0Y2hpbmcgdHVwbGVzLgogCSAqLwotCWlmIChCVFNjYW5Qb3NJc1Zh bGlkKHNvLT5jdXJyUG9zKSkKLQkJc28tPm1hcmtJdGVtSW5kZXggPSBzby0+Y3VyclBvcy5pdGVt SW5kZXg7CisJX2J0X3N0YXJ0X2FycmF5X2tleXMoc2NhbiwgYmF0Y2gtPmRpcik7CisJaWYgKFNj YW5EaXJlY3Rpb25Jc0ZvcndhcmQoYmF0Y2gtPmRpcikpCisJCWJhdGNoLT5tb3JlUmlnaHQgPSB0 cnVlOwogCWVsc2UKLQl7Ci0JCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPm1hcmtQb3MpOwotCQlz by0+bWFya0l0ZW1JbmRleCA9IC0xOwotCX0KLX0KLQotLyoKLSAqCWJ0cmVzdHJwb3MoKSAtLSBy ZXN0b3JlIHNjYW4gdG8gbGFzdCBzYXZlZCBwb3NpdGlvbgotICovCi12b2lkCi1idHJlc3RycG9z KEluZGV4U2NhbkRlc2Mgc2NhbikKLXsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVl KSBzY2FuLT5vcGFxdWU7Ci0KLQlpZiAoc28tPm1hcmtJdGVtSW5kZXggPj0gMCkKLQl7Ci0JCS8q Ci0JCSAqIFRoZSBzY2FuIGhhcyBuZXZlciBtb3ZlZCB0byBhIG5ldyBwYWdlIHNpbmNlIHRoZSBs YXN0IG1hcmsuICBKdXN0Ci0JCSAqIHJlc3RvcmUgdGhlIGl0ZW1JbmRleC4KLQkJICoKLQkJICog TkI6IEluIHRoaXMgY2FzZSB3ZSBjYW4ndCBjb3VudCBvbiBhbnl0aGluZyBpbiBzby0+bWFya1Bv cyB0byBiZQotCQkgKiBhY2N1cmF0ZS4KLQkJICovCi0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9 IHNvLT5tYXJrSXRlbUluZGV4OwotCX0KLQllbHNlCi0JewotCQkvKgotCQkgKiBUaGUgc2NhbiBt b3ZlZCB0byBhIG5ldyBwYWdlIGFmdGVyIGxhc3QgbWFyayBvciByZXN0b3JlLCBhbmQgd2UgYXJl Ci0JCSAqIG5vdyByZXN0b3JpbmcgdG8gdGhlIG1hcmtlZCBwYWdlLiAgV2UgYXJlbid0IGhvbGRp bmcgYW55IHJlYWQKLQkJICogbG9ja3MsIGJ1dCBpZiB3ZSdyZSBzdGlsbCBob2xkaW5nIHRoZSBw aW4gZm9yIHRoZSBjdXJyZW50IHBvc2l0aW9uLAotCQkgKiB3ZSBtdXN0IGRyb3AgaXQuCi0JCSAq LwotCQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0JCXsKLQkJCS8qIEJlZm9y ZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJ CWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOwotCQkJQlRT Y2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3VyclBvcyk7Ci0JCX0KLQotCQlpZiAoQlRTY2FuUG9z SXNWYWxpZChzby0+bWFya1BvcykpCi0JCXsKLQkJCS8qIGJ1bXAgcGluIG9uIG1hcmsgYnVmZmVy IGZvciBhc3NpZ25tZW50IHRvIGN1cnJlbnQgYnVmZmVyICovCi0JCQlpZiAoQlRTY2FuUG9zSXNQ aW5uZWQoc28tPm1hcmtQb3MpKQotCQkJCUluY3JCdWZmZXJSZWZDb3VudChzby0+bWFya1Bvcy5i dWYpOwotCQkJbWVtY3B5KCZzby0+Y3VyclBvcywgJnNvLT5tYXJrUG9zLAotCQkJCSAgIG9mZnNl dG9mKEJUU2NhblBvc0RhdGEsIGl0ZW1zWzFdKSArCi0JCQkJICAgc28tPm1hcmtQb3MubGFzdEl0 ZW0gKiBzaXplb2YoQlRTY2FuUG9zSXRlbSkpOwotCQkJaWYgKHNvLT5jdXJyVHVwbGVzKQotCQkJ CW1lbWNweShzby0+Y3VyclR1cGxlcywgc28tPm1hcmtUdXBsZXMsCi0JCQkJCSAgIHNvLT5tYXJr UG9zLm5leHRUdXBsZU9mZnNldCk7Ci0JCQkvKiBSZXNldCB0aGUgc2NhbidzIGFycmF5IGtleXMg KHNlZSBfYnRfc3RlcHBhZ2UgZm9yIHdoeSkgKi8KLQkJCWlmIChzby0+bnVtQXJyYXlLZXlzKQot CQkJewotCQkJCV9idF9zdGFydF9hcnJheV9rZXlzKHNjYW4sIHNvLT5jdXJyUG9zLmRpcik7Ci0J CQkJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOwotCQkJfQotCQl9Ci0JCWVsc2UKLQkJCUJUU2Nh blBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCX0KKwkJYmF0Y2gtPm1vcmVMZWZ0ID0gdHJ1 ZTsKKwlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7CisJc28tPnNjYW5CZWhpbmQgPSBmYWxzZTsK Kwlzby0+b3Bwb3NpdGVEaXJDaGVjayA9IGZhbHNlOwogfQogCiAvKgpAQCAtODc5LDE1ICs4ODEs NiBAQCBfYnRfcGFyYWxsZWxfc2VpemUoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciAq bmV4dF9zY2FuX3BhZ2UsCiAJKm5leHRfc2Nhbl9wYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwog CSpsYXN0X2N1cnJfcGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsKIAotCS8qCi0JICogUmVzZXQg c28tPmN1cnJQb3MsIGFuZCBpbml0aWFsaXplIG1vcmVMZWZ0L21vcmVSaWdodCBzdWNoIHRoYXQg dGhlIG5leHQKLQkgKiBjYWxsIHRvIF9idF9yZWFkbmV4dHBhZ2UgdHJlYXRzIHRoaXMgYmFja2Vu ZCBzaW1pbGFybHkgdG8gYSBzZXJpYWwKLQkgKiBiYWNrZW5kIHRoYXQgc3RlcHMgZnJvbSAqbGFz dF9jdXJyX3BhZ2UgdG8gKm5leHRfc2Nhbl9wYWdlICh1bmxlc3MgdGhpcwotCSAqIGJhY2tlbmQn cyBzby0+Y3VyclBvcyBpcyBpbml0aWFsaXplZCBieSBfYnRfcmVhZGZpcnN0cGFnZSBiZWZvcmUg dGhlbikuCi0JICovCi0JQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0Jc28tPmN1 cnJQb3MubW9yZUxlZnQgPSBzby0+Y3VyclBvcy5tb3JlUmlnaHQgPSB0cnVlOwotCiAJaWYgKGZp cnN0KQogCXsKIAkJLyoKQEAgLTEwMzcsOCArMTAzMCw2IEBAIF9idF9wYXJhbGxlbF9kb25lKElu ZGV4U2NhbkRlc2Mgc2NhbikKIAlCVFBhcmFsbGVsU2NhbkRlc2MgYnRzY2FuOwogCWJvb2wJCXN0 YXR1c19jaGFuZ2VkID0gZmFsc2U7CiAKLQlBc3NlcnQoIUJUU2NhblBvc0lzVmFsaWQoc28tPmN1 cnJQb3MpKTsKLQogCS8qIERvIG5vdGhpbmcsIGZvciBub24tcGFyYWxsZWwgc2NhbnMgKi8KIAlp ZiAocGFyYWxsZWxfc2NhbiA9PSBOVUxMKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRzZWFyY2guYwppbmRleCAwY2VkN2IwMmMuLjZmYmRiY2E0ZiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHNlYXJjaC5jCkBAIC0yNiw1MiArMjYsMjMgQEAKICNpbmNsdWRlICJ1dGls cy9yZWwuaCIKIAogCi1zdGF0aWMgaW5saW5lIHZvaWQgX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVf cGluKFJlbGF0aW9uIHJlbCwgQlRTY2FuT3BhcXVlIHNvKTsKIHN0YXRpYyBCdWZmZXIgX2J0X21v dmVyaWdodChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJUU2Nhbkluc2VydCBrZXks CiAJCQkJCQkJQnVmZmVyIGJ1ZiwgYm9vbCBmb3J1cGRhdGUsIEJUU3RhY2sgc3RhY2ssCiAJCQkJ CQkJaW50IGFjY2Vzcyk7CiBzdGF0aWMgT2Zmc2V0TnVtYmVyIF9idF9iaW5zcmNoKFJlbGF0aW9u IHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwgQnVmZmVyIGJ1Zik7CiBzdGF0aWMgaW50CV9idF9iaW5z cmNoX3Bvc3RpbmcoQlRTY2FuSW5zZXJ0IGtleSwgUGFnZSBwYWdlLAogCQkJCQkJCQlPZmZzZXRO dW1iZXIgb2ZmbnVtKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBfYnRfcmV0dXJuaXRlbShJbmRleFNj YW5EZXNjIHNjYW4sIEJUU2Nhbk9wYXF1ZSBzbyk7Ci1zdGF0aWMgYm9vbCBfYnRfc3RlcHBhZ2Uo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7Ci1zdGF0aWMgYm9vbCBfYnRf cmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIE9mZnNldE51bWJlciBvZmZudW0sCi0J CQkJCQkJICBTY2FuRGlyZWN0aW9uIGRpcik7Ci1zdGF0aWMgYm9vbCBfYnRfcmVhZG5leHRwYWdl KEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCi0JCQkJCQkJIEJsb2NrTnVt YmVyIGxhc3RjdXJyYmxrbm8sIFNjYW5EaXJlY3Rpb24gZGlyLAotCQkJCQkJCSBib29sIHNlaXpl ZCk7CitzdGF0aWMgSW5kZXhTY2FuQmF0Y2ggX2J0X3JlYWRmaXJzdHBhZ2UoSW5kZXhTY2FuRGVz YyBzY2FuLCBJbmRleFNjYW5CYXRjaCBmaXJzdGJhdGNoLAorCQkJCQkJCQkJCU9mZnNldE51bWJl ciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK3N0YXRpYyBJbmRleFNjYW5CYXRjaCBfYnRf cmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCisJCQkJ CQkJCQkgICBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vLAorCQkJCQkJCQkJICAgU2NhbkRpcmVj dGlvbiBkaXIsIGJvb2wgZmlyc3RwYWdlKTsKIHN0YXRpYyBCdWZmZXIgX2J0X2xvY2tfYW5kX3Zh bGlkYXRlX2xlZnQoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciAqYmxrbm8sCiAJCQkJCQkJCQkJ IEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8pOwotc3RhdGljIGJvb2wgX2J0X2VuZHBvaW50KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworc3RhdGljIEluZGV4U2NhbkJh dGNoIF9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAor CQkJCQkJCQkgICBJbmRleFNjYW5CYXRjaCBmaXJzdGJhdGNoKTsKIAogCi0vKgotICoJX2J0X2Ry b3BfbG9ja19hbmRfbWF5YmVfcGluKCkKLSAqCi0gKiBVbmxvY2sgc28tPmN1cnJQb3MuYnVmLiAg SWYgc2NhbiBpcyBzby0+ZHJvcFBpbiwgZHJvcCB0aGUgcGluLCB0b28uCi0gKiBEcm9wcGluZyB0 aGUgcGluIHByZXZlbnRzIFZBQ1VVTSBmcm9tIGJsb2NraW5nIG9uIGFjcXVpcmluZyBhIGNsZWFu dXAgbG9jay4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1fYnRfZHJvcF9sb2NrX2FuZF9tYXli ZV9waW4oUmVsYXRpb24gcmVsLCBCVFNjYW5PcGFxdWUgc28pCi17Ci0JaWYgKCFzby0+ZHJvcFBp bikKLQl7Ci0JCS8qIEp1c3QgZHJvcCB0aGUgbG9jayAobm90IHRoZSBwaW4pICovCi0JCV9idF91 bmxvY2tidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkg KiBEcm9wIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4uCi0JICoKLQkgKiBIYXZlIHRvIHNldCBz by0+Y3VyclBvcy5sc24gc28gdGhhdCBfYnRfa2lsbGl0ZW1zIGhhcyBhIHdheSB0byBkZXRlY3QK LQkgKiB3aGVuIGNvbmN1cnJlbnQgaGVhcCBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTSBtaWdodCBo YXZlIHRha2VuIHBsYWNlLgotCSAqLwotCXNvLT5jdXJyUG9zLmxzbiA9IEJ1ZmZlckdldExTTkF0 b21pYyhzby0+Y3VyclBvcy5idWYpOwotCV9idF9yZWxidWYocmVsLCBzby0+Y3VyclBvcy5idWYp OwotCXNvLT5jdXJyUG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7Ci19Ci0KIC8qCiAgKglfYnRfc2Vh cmNoKCkgLS0gU2VhcmNoIHRoZSB0cmVlIGZvciBhIHBhcnRpY3VsYXIgc2NhbmtleSwKICAqCQlv ciBtb3JlIHByZWNpc2VseSBmb3IgdGhlIGZpcnN0IGxlYWYgcGFnZSBpdCBjb3VsZCBiZSBvbi4K QEAgLTg1NCwyNiArODI1LDIzIEBAIF9idF9jb21wYXJlKFJlbGF0aW9uIHJlbCwKIH0KIAogLyoK LSAqCV9idF9maXJzdCgpIC0tIEZpbmQgdGhlIGZpcnN0IGl0ZW0gaW4gYSBzY2FuLgorICoJX2J0 X2ZpcnN0KCkgLS0gRmluZCB0aGUgZmlyc3QgYmF0Y2ggaW4gYSBzY2FuLgogICoKICAqCQlXZSBu ZWVkIHRvIGJlIGNsZXZlciBhYm91dCB0aGUgZGlyZWN0aW9uIG9mIHNjYW4sIHRoZSBzZWFyY2gK LSAqCQljb25kaXRpb25zLCBhbmQgdGhlIHRyZWUgb3JkZXJpbmcuICBXZSBmaW5kIHRoZSBmaXJz dCBpdGVtIChvciwKLSAqCQlpZiBiYWNrd2FyZHMgc2NhbiwgdGhlIGxhc3QgaXRlbSkgaW4gdGhl IHRyZWUgdGhhdCBzYXRpc2ZpZXMgdGhlCi0gKgkJcXVhbGlmaWNhdGlvbnMgaW4gdGhlIHNjYW4g a2V5LiAgT24gc3VjY2VzcyBleGl0LCBkYXRhIGFib3V0IHRoZQotICoJCW1hdGNoaW5nIHR1cGxl KHMpIG9uIHRoZSBwYWdlIGhhcyBiZWVuIGxvYWRlZCBpbnRvIHNvLT5jdXJyUG9zLiAgV2UnbGwK LSAqCQlkcm9wIGFsbCBsb2NrcyBhbmQgaG9sZCBvbnRvIGEgcGluIG9uIHBhZ2UncyBidWZmZXIs IGV4Y2VwdCBkdXJpbmcKLSAqCQlzby0+ZHJvcFBpbiBzY2Fucywgd2hlbiB3ZSBkcm9wIGJvdGgg dGhlIGxvY2sgYW5kIHRoZSBwaW4uCi0gKgkJX2J0X3JldHVybml0ZW0gc2V0cyB0aGUgbmV4dCBp dGVtIHRvIHJldHVybiB0byBzY2FuIG9uIHN1Y2Nlc3MgZXhpdC4KKyAqCQljb25kaXRpb25zLCBh bmQgdGhlIHRyZWUgb3JkZXJpbmcuICBXZSBmaW5kIHRoZSBmaXJzdCBsZWFmIHBhZ2UgKG9yCisg KgkJdGhlIGxhc3QgbGVhZiBwYWdlLCB3aGVuIHNjYW5uaW5nIGJhY2t3YXJkcykgaW4gdGhlIHRy ZWUgd2l0aCBhdCBsZWFzdAorICoJCW9uZSB0dXBsZSB0aGF0IHNhdGlzZmllcyB0aGUgcXVhbGlm aWNhdGlvbnMgaW4gdGhlIHNjYW4ga2V5LiAgT24KKyAqCQlzdWNjZXNzIGV4aXQsIHdlIHJldHVy biBhIG5ldyBiYXRjaCB3aXRoIHRoYXQgcGFnZSdzIG1hdGNoaW5nIGl0ZW1zLgogICoKLSAqIElm IHRoZXJlIGFyZSBubyBtYXRjaGluZyBpdGVtcyBpbiB0aGUgaW5kZXgsIHdlIHJldHVybiBmYWxz ZSwgd2l0aCBubwotICogcGlucyBvciBsb2NrcyBoZWxkLiAgc28tPmN1cnJQb3Mgd2lsbCByZW1h aW4gaW52YWxpZC4KKyAqIElmIHRoZXJlIGFyZSBubyBtYXRjaGluZyBpdGVtcyBpbiB0aGUgaW5k ZXggKGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbiksCisgKiB3ZSBqdXN0IHJldHVybiBOVUxM LgogICoKICAqIE5vdGUgdGhhdCBzY2FuLT5rZXlEYXRhW10sIGFuZCB0aGUgc28tPmtleURhdGFb XSBzY2Fua2V5IGJ1aWx0IGZyb20gaXQsCiAgKiBhcmUgYm90aCBzZWFyY2gtdHlwZSBzY2Fua2V5 cyAoc2VlIG5idHJlZS9SRUFETUUgZm9yIG1vcmUgYWJvdXQgdGhpcykuCiAgKiBXaXRoaW4gdGhp cyByb3V0aW5lLCB3ZSBidWlsZCBhIHRlbXBvcmFyeSBpbnNlcnRpb24tdHlwZSBzY2Fua2V5IHRv IHVzZQogICogaW4gbG9jYXRpbmcgdGhlIHNjYW4gc3RhcnQgcG9zaXRpb24uCiAgKi8KLWJvb2wK K0luZGV4U2NhbkJhdGNoCiBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcikKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwpAQCAtODg3 LDggKzg1NSwxMCBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcikKIAlTdHJhdGVneU51bWJlciBzdHJhdF90b3RhbCA9IEludmFsaWRTdHJhdGVneTsKIAlC bG9ja051bWJlciBibGtubyA9IEludmFsaWRCbG9ja051bWJlciwKIAkJCQlsYXN0Y3VycmJsa25v OworCUluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2g7CiAKLQlBc3NlcnQoIUJUU2NhblBvc0lzVmFs aWQoc28tPmN1cnJQb3MpKTsKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgZmlyc3QgYmF0Y2ggKi8K KwlmaXJzdGJhdGNoID0gaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKHNjYW4pOwogCiAJLyoKIAkg KiBFeGFtaW5lIHRoZSBzY2FuIGtleXMgYW5kIGVsaW1pbmF0ZSBhbnkgcmVkdW5kYW50IGtleXM7 IGFsc28gbWFyayB0aGUKQEAgLTkwNCw2ICs4NzQsNyBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAl7CiAJCUFzc2VydCghc28tPm5lZWRQcmltU2Nh bik7CiAJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVs ZWFzZShzY2FuLCBmaXJzdGJhdGNoKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIApAQCAtOTEzLDcg Kzg4NCwxMCBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp cikKIAkgKi8KIAlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCiAJCSFfYnRfcGFy YWxsZWxfc2VpemUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtubywgdHJ1ZSkpCi0JCXJldHVy biBmYWxzZTsKKwl7CisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGZpcnN0YmF0 Y2gpOworCQlyZXR1cm4gZmFsc2U7CQkJLyogZGVmaW5pdGVseSBkb25lIChzby0+bmVlZFByaW1T Y2FuIGlzIHVuc2V0KSAqLworCX0KIAogCS8qCiAJICogSW5pdGlhbGl6ZSB0aGUgc2NhbidzIGFy cmF5cyAoaWYgYW55KSBmb3IgdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24KQEAgLTkzMCwxNCAr OTA0LDEwIEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KQogCQkgKiBfYnRfcmVhZG5leHRwYWdlIHJlbGVhc2VzIHRoZSBzY2FuIGZvciB1cyAobm90IF9i dF9yZWFkZmlyc3RwYWdlKS4KIAkJICovCiAJCUFzc2VydChzY2FuLT5wYXJhbGxlbF9zY2FuICE9 IE5VTEwpOwotCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwotCQlBc3NlcnQoYmxrbm8gIT0g UF9OT05FKTsKIAotCQlpZiAoIV9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJy Ymxrbm8sIGRpciwgdHJ1ZSkpCi0JCQlyZXR1cm4gZmFsc2U7CisJCWluZGV4YW1fdXRpbF9iYXRj aF9yZWxlYXNlKHNjYW4sIGZpcnN0YmF0Y2gpOwogCi0JCV9idF9yZXR1cm5pdGVtKHNjYW4sIHNv KTsKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBfYnRfcmVhZG5leHRwYWdlKHNjYW4sIGJsa25v LCBsYXN0Y3VycmJsa25vLCBkaXIsIHRydWUpOwogCX0KIAogCS8qCkBAIC0xMjM3LDcgKzEyMDcs NyBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkg KiBOb3RlOiBjYWxscyBfYnRfcmVhZGZpcnN0cGFnZSBmb3IgdXMsIHdoaWNoIHJlbGVhc2VzIHRo ZSBwYXJhbGxlbCBzY2FuLgogCSAqLwogCWlmIChrZXlzeiA9PSAwKQotCQlyZXR1cm4gX2J0X2Vu ZHBvaW50KHNjYW4sIGRpcik7CisJCXJldHVybiBfYnRfZW5kcG9pbnQoc2NhbiwgZGlyLCBmaXJz dGJhdGNoKTsKIAogCS8qCiAJICogV2Ugd2FudCB0byBzdGFydCB0aGUgc2NhbiBzb21ld2hlcmUg d2l0aGluIHRoZSBpbmRleC4gIFNldCB1cCBhbgpAQCAtMTUwNSwxMiArMTQ3NSwxMiBAQCBfYnRf Zmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKiBwb3NpdGlv biBvdXJzZWx2ZXMgb24gdGhlIHRhcmdldCBsZWFmIHBhZ2UuCiAJICovCiAJQXNzZXJ0KFNjYW5E aXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikgPT0gaW5za2V5LmJhY2t3YXJkKTsKLQlzdGFjayA9IF9i dF9zZWFyY2gocmVsLCBOVUxMLCAmaW5za2V5LCAmc28tPmN1cnJQb3MuYnVmLCBCVF9SRUFEKTsK KwlzdGFjayA9IF9idF9zZWFyY2gocmVsLCBOVUxMLCAmaW5za2V5LCAmZmlyc3RiYXRjaC0+YnVm LCBCVF9SRUFEKTsKIAogCS8qIGRvbid0IG5lZWQgdG8ga2VlcCB0aGUgc3RhY2sgYXJvdW5kLi4u ICovCiAJX2J0X2ZyZWVzdGFjayhzdGFjayk7CiAKLQlpZiAoIUJ1ZmZlcklzVmFsaWQoc28tPmN1 cnJQb3MuYnVmKSkKKwlpZiAodW5saWtlbHkoIUJ1ZmZlcklzVmFsaWQoZmlyc3RiYXRjaC0+YnVm KSkpCiAJewogCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwogCkBAIC0xNTI2LDIzICsxNDk2 LDI0IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQog CQlpZiAoSXNvbGF0aW9uSXNTZXJpYWxpemFibGUoKSkKIAkJewogCQkJUHJlZGljYXRlTG9ja1Jl bGF0aW9uKHJlbCwgc2Nhbi0+eHNfc25hcHNob3QpOwotCQkJc3RhY2sgPSBfYnRfc2VhcmNoKHJl bCwgTlVMTCwgJmluc2tleSwgJnNvLT5jdXJyUG9zLmJ1ZiwgQlRfUkVBRCk7CisJCQlzdGFjayA9 IF9idF9zZWFyY2gocmVsLCBOVUxMLCAmaW5za2V5LCAmZmlyc3RiYXRjaC0+YnVmLCBCVF9SRUFE KTsKIAkJCV9idF9mcmVlc3RhY2soc3RhY2spOwogCQl9CiAKLQkJaWYgKCFCdWZmZXJJc1ZhbGlk KHNvLT5jdXJyUG9zLmJ1ZikpCisJCWlmICghQnVmZmVySXNWYWxpZChmaXJzdGJhdGNoLT5idWYp KQogCQl7CiAJCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKKwkJCWluZGV4YW1fdXRpbF9iYXRj aF9yZWxlYXNlKHNjYW4sIGZpcnN0YmF0Y2gpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJfQog CiAJLyogcG9zaXRpb24gdG8gdGhlIHByZWNpc2UgaXRlbSBvbiB0aGUgcGFnZSAqLwotCW9mZm51 bSA9IF9idF9iaW5zcmNoKHJlbCwgJmluc2tleSwgc28tPmN1cnJQb3MuYnVmKTsKKwlvZmZudW0g PSBfYnRfYmluc3JjaChyZWwsICZpbnNrZXksIGZpcnN0YmF0Y2gtPmJ1Zik7CiAKIAkvKgogCSAq IE5vdyBsb2FkIGRhdGEgZnJvbSB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgc2NhbiAodXN1YWxseSB0 aGUgcGFnZQotCSAqIGN1cnJlbnRseSBpbiBzby0+Y3VyclBvcy5idWYpLgorCSAqIGN1cnJlbnRs eSBpbiBmaXJzdGJhdGNoLmJ1ZikuCiAJICoKIAkgKiBJZiBpbnNrZXkubmV4dGtleSA9IGZhbHNl IGFuZCBpbnNrZXkuYmFja3dhcmQgPSBmYWxzZSwgb2ZmbnVtIGlzCiAJICogcG9zaXRpb25lZCBh dCB0aGUgZmlyc3Qgbm9uLXBpdm90IHR1cGxlID49IGluc2tleS5zY2Fua2V5cy4KQEAgLTE1NjAs MTY1ICsxNTMxLDY1IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyKQogCSAqIGZvciB0aGUgcGFnZS4gIEZvciBleGFtcGxlLCB3aGVuIGluc2tleSBpcyBi b3RoIDwgdGhlIGxlYWYgcGFnZSdzIGhpZ2gKIAkgKiBrZXkgYW5kID4gYWxsIG9mIGl0cyBub24t cGl2b3QgdHVwbGVzLCBvZmZudW0gd2lsbCBiZSAibWF4b2ZmICsgMSIuCiAJICovCi0JaWYgKCFf YnRfcmVhZGZpcnN0cGFnZShzY2FuLCBvZmZudW0sIGRpcikpCi0JCXJldHVybiBmYWxzZTsKLQot CV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gX2J0X3Jl YWRmaXJzdHBhZ2Uoc2NhbiwgZmlyc3RiYXRjaCwgb2ZmbnVtLCBkaXIpOwogfQogCiAvKgotICoJ X2J0X25leHQoKSAtLSBHZXQgdGhlIG5leHQgaXRlbSBpbiBhIHNjYW4uCisgKglfYnRfbmV4dCgp IC0tIEdldCB0aGUgbmV4dCBiYXRjaCBpbiBhIHNjYW4uCiAgKgotICoJCU9uIGVudHJ5LCBzby0+ Y3VyclBvcyBkZXNjcmliZXMgdGhlIGN1cnJlbnQgcGFnZSwgd2hpY2ggbWF5IGJlIHBpbm5lZAot ICoJCWJ1dCBpcyBub3QgbG9ja2VkLCBhbmQgc28tPmN1cnJQb3MuaXRlbUluZGV4IGlkZW50aWZp ZXMgd2hpY2ggaXRlbSB3YXMKLSAqCQlwcmV2aW91c2x5IHJldHVybmVkLgorICoJCU9uIGVudHJ5 LCBwcmlvcmJhdGNoIGRlc2NyaWJlcyB0aGUgYmF0Y2ggdGhhdCB3YXMgbGFzdCByZXR1cm5lZCBi eQorICoJCWJ0Z2V0YmF0Y2guICBXZSdsbCB1c2UgdGhlIHByaW9yIGJhdGNoJ3MgcG9zaXRpb25p bmcgaW5mb3JtYXRpb24gdG8KKyAqCQlkZWNpZGUgd2hpY2ggbGVhZiBwYWdlIHRvIHJlYWQgbmV4 dC4KICAqCi0gKgkJT24gc3VjY2VzcyBleGl0LCBzby0+Y3VyclBvcyBpcyB1cGRhdGVkIGFzIG5l ZWRlZCwgYW5kIF9idF9yZXR1cm5pdGVtCi0gKgkJc2V0cyB0aGUgbmV4dCBpdGVtIHRvIHJldHVy biB0byB0aGUgc2Nhbi4gIHNvLT5jdXJyUG9zIHJlbWFpbnMgdmFsaWQuCi0gKgotICoJCU9uIGZh aWx1cmUgZXhpdCAobm8gbW9yZSB0dXBsZXMpLCB3ZSBpbnZhbGlkYXRlIHNvLT5jdXJyUG9zLiAg SXQnbGwKLSAqCQlzdGlsbCBiZSBwb3NzaWJsZSBmb3IgdGhlIHNjYW4gdG8gcmV0dXJuIHR1cGxl cyBieSBjaGFuZ2luZyBkaXJlY3Rpb24sCi0gKgkJdGhvdWdoIHdlJ2xsIG5lZWQgdG8gY2FsbCBf YnRfZmlyc3QgYW5ldyBpbiB0aGF0IG90aGVyIGRpcmVjdGlvbi4KKyAqCQlPbiBzdWNjZXNzIGV4 aXQsIHJldHVybnMgdGhlIG5leHQgYmF0Y2guICBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZQor ICoJCW1hdGNoaW5nIHR1cGxlIG9uIGFueSByZXR1cm5lZCBiYXRjaCAoZWxzZSB3ZSdkIGp1c3Qg cmV0dXJuIE5VTEwpLgogICovCi1ib29sCi1fYnRfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyKQotewotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNj YW4tPm9wYXF1ZTsKLQotCUFzc2VydChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0K LQkvKgotCSAqIEFkdmFuY2UgdG8gbmV4dCB0dXBsZSBvbiBjdXJyZW50IHBhZ2U7IG9yIGlmIHRo ZXJlJ3Mgbm8gbW9yZSwgdHJ5IHRvCi0JICogc3RlcCB0byB0aGUgbmV4dCBwYWdlIHdpdGggZGF0 YS4KLQkgKi8KLQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQotCXsKLQkJaWYgKCsr c28tPmN1cnJQb3MuaXRlbUluZGV4ID4gc28tPmN1cnJQb3MubGFzdEl0ZW0pCi0JCXsKLQkJCWlm ICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRpcikpCi0JCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JfQot CWVsc2UKLQl7Ci0JCWlmICgtLXNvLT5jdXJyUG9zLml0ZW1JbmRleCA8IHNvLT5jdXJyUG9zLmZp cnN0SXRlbSkKLQkJewotCQkJaWYgKCFfYnRfc3RlcHBhZ2Uoc2NhbiwgZGlyKSkKLQkJCQlyZXR1 cm4gZmFsc2U7Ci0JCX0KLQl9Ci0KLQlfYnRfcmV0dXJuaXRlbShzY2FuLCBzbyk7Ci0JcmV0dXJu IHRydWU7Ci19Ci0KLS8qCi0gKiBSZXR1cm4gdGhlIGluZGV4IGl0ZW0gZnJvbSBzby0+Y3VyclBv cy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdIHRvIHRoZQotICogaW5kZXggc2NhbiBieSBz ZXR0aW5nIHRoZSByZWxldmFudCBmaWVsZHMgaW4gY2FsbGVyJ3MgaW5kZXggc2NhbiBkZXNjcmlw dG9yCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotX2J0X3JldHVybml0ZW0oSW5kZXhTY2FuRGVz YyBzY2FuLCBCVFNjYW5PcGFxdWUgc28pCi17Ci0JQlRTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAm c28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XTsKLQotCS8qIE1vc3QgcmVj ZW50IF9idF9yZWFkcGFnZSBtdXN0IGhhdmUgc3VjY2VlZGVkICovCi0JQXNzZXJ0KEJUU2NhblBv c0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQlBc3NlcnQoc28tPmN1cnJQb3MuaXRlbUluZGV4ID49 IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSk7Ci0JQXNzZXJ0KHNvLT5jdXJyUG9zLml0ZW1JbmRleCA8 PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7Ci0KLQkvKiBSZXR1cm4gbmV4dCBpdGVtLCBwZXIgYW1n ZXR0dXBsZSBjb250cmFjdCAqLwotCXNjYW4tPnhzX2hlYXB0aWQgPSBjdXJySXRlbS0+aGVhcFRp ZDsKLQlpZiAoc28tPmN1cnJUdXBsZXMpCi0JCXNjYW4tPnhzX2l0dXAgPSAoSW5kZXhUdXBsZSkg KHNvLT5jdXJyVHVwbGVzICsgY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0KTsKLX0KLQotLyoKLSAqCV9i dF9zdGVwcGFnZSgpIC0tIFN0ZXAgdG8gbmV4dCBwYWdlIGNvbnRhaW5pbmcgdmFsaWQgZGF0YSBm b3Igc2NhbgotICoKLSAqIFdyYXBwZXIgb24gX2J0X3JlYWRuZXh0cGFnZSB0aGF0IHBlcmZvcm1z IGZpbmFsIHN0ZXBzIGZvciB0aGUgY3VycmVudCBwYWdlLgotICoKLSAqIE9uIGVudHJ5LCBzby0+ Y3VyclBvcyBtdXN0IGJlIHZhbGlkLiAgSXRzIGJ1ZmZlciB3aWxsIGJlIHBpbm5lZCwgdGhvdWdo Ci0gKiBuZXZlciBsb2NrZWQuIChBY3R1YWxseSwgd2hlbiBzby0+ZHJvcFBpbiB0aGVyZSB3b24n dCBldmVuIGJlIGEgcGluIGhlbGQsCi0gKiB0aG91Z2ggc28tPmN1cnJQb3MuY3VyclBhZ2UgbXVz dCBzdGlsbCBiZSBzZXQgdG8gYSB2YWxpZCBibG9jayBudW1iZXIuKQotICovCi1zdGF0aWMgYm9v bAotX2J0X3N0ZXBwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitJ bmRleFNjYW5CYXRjaAorX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpciwgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCkKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAo QlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAJQmxvY2tOdW1iZXIgYmxrbm8sCiAJCQkJbGFz dGN1cnJibGtubzsKIAotCUFzc2VydChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0K LQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0 ZW1zICovCi0JaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOwot Ci0JLyoKLQkgKiBCZWZvcmUgd2UgbW9kaWZ5IGN1cnJQb3MsIG1ha2UgYSBjb3B5IG9mIHRoZSBw YWdlIGRhdGEgaWYgdGhlcmUgd2FzIGEKLQkgKiBtYXJrIHBvc2l0aW9uIHRoYXQgbmVlZHMgaXQu Ci0JICovCi0JaWYgKHNvLT5tYXJrSXRlbUluZGV4ID49IDApCi0JewotCQkvKiBidW1wIHBpbiBv biBjdXJyZW50IGJ1ZmZlciBmb3IgYXNzaWdubWVudCB0byBtYXJrIGJ1ZmZlciAqLwotCQlpZiAo QlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKQotCQkJSW5jckJ1ZmZlclJlZkNvdW50KHNv LT5jdXJyUG9zLmJ1Zik7Ci0JCW1lbWNweSgmc28tPm1hcmtQb3MsICZzby0+Y3VyclBvcywKLQkJ CSAgIG9mZnNldG9mKEJUU2NhblBvc0RhdGEsIGl0ZW1zWzFdKSArCi0JCQkgICBzby0+Y3VyclBv cy5sYXN0SXRlbSAqIHNpemVvZihCVFNjYW5Qb3NJdGVtKSk7Ci0JCWlmIChzby0+bWFya1R1cGxl cykKLQkJCW1lbWNweShzby0+bWFya1R1cGxlcywgc28tPmN1cnJUdXBsZXMsCi0JCQkJICAgc28t PmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0KTsKLQkJc28tPm1hcmtQb3MuaXRlbUluZGV4ID0gc28t Pm1hcmtJdGVtSW5kZXg7Ci0JCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7Ci0KLQkJLyoKLQkJICog SWYgd2UncmUganVzdCBhYm91dCB0byBzdGFydCB0aGUgbmV4dCBwcmltaXRpdmUgaW5kZXggc2Nh bgotCQkgKiAocG9zc2libGUgd2l0aCBhIHNjYW4gdGhhdCBoYXMgYXJyYXlzIGtleXMsIGFuZCBu ZWVkcyB0byBza2lwIHRvCi0JCSAqIGNvbnRpbnVlIGluIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0 aW9uKSwgbW9yZUxlZnQvbW9yZVJpZ2h0IG9ubHkKLQkJICogaW5kaWNhdGUgdGhlIGVuZCBvZiB0 aGUgY3VycmVudCBwcmltaXRpdmUgaW5kZXggc2Nhbi4gIFRoZXkgbXVzdAotCQkgKiBuZXZlciBi ZSB0YWtlbiB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0b3AtbGV2ZWwgaW5kZXggc2NhbiBoYXMgZW5k ZWQKLQkJICogKHRoYXQgd291bGQgYmUgd3JvbmcpLgotCQkgKgotCQkgKiBXZSBjb3VsZCBoYW5k bGUgdGhpcyBjYXNlIGJ5IHRyZWF0aW5nIHRoZSBjdXJyZW50IGFycmF5IGtleXMgYXMKLQkJICog bWFya1BvcyBzdGF0ZS4gIEJ1dCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgYXJyYXkgc3RhdGUg bGlrZSB0aGlzCi0JCSAqIHdvdWxkIGFkZCBjb21wbGV4aXR5LiAgSW5zdGVhZCwgd2UganVzdCB1 bnNldCBtYXJrUG9zJ3MgY29weSBvZgotCQkgKiBtb3JlUmlnaHQgb3IgbW9yZUxlZnQgKHdoaWNo ZXZlciBtaWdodCBiZSBhZmZlY3RlZCksIHdoaWxlIG1ha2luZwotCQkgKiBidHJlc3RycG9zIHJl c2V0IHRoZSBzY2FuJ3MgYXJyYXlzIHRvIHRoZWlyIGluaXRpYWwgc2NhbiBwb3NpdGlvbnMuCi0J CSAqIEluIGVmZmVjdCwgYnRyZXN0cnBvcyBsZWF2ZXMgYWR2YW5jaW5nIHRoZSBhcnJheXMgdXAg dG8gdGhlIGZpcnN0Ci0JCSAqIF9idF9yZWFkcGFnZSBjYWxsICh0aGF0IHRha2VzIHBsYWNlIGFm dGVyIGl0IGhhcyByZXN0b3JlZCBtYXJrUG9zKS4KLQkJICovCi0JCWlmIChzby0+bmVlZFByaW1T Y2FuKQotCQl7Ci0JCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChzby0+Y3VyclBvcy5kaXIp KQotCQkJCXNvLT5tYXJrUG9zLm1vcmVSaWdodCA9IHRydWU7Ci0JCQllbHNlCi0JCQkJc28tPm1h cmtQb3MubW9yZUxlZnQgPSB0cnVlOwotCQl9Ci0KLQkJLyogbWFyay9yZXN0b3JlIG5vdCBzdXBw b3J0ZWQgYnkgcGFyYWxsZWwgc2NhbnMgKi8KLQkJQXNzZXJ0KCFzY2FuLT5wYXJhbGxlbF9zY2Fu KTsKLQl9Ci0KLQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKKwlBc3NlcnQo QmxvY2tOdW1iZXJJc1ZhbGlkKHByaW9yYmF0Y2gtPmN1cnJQYWdlKSk7CiAKIAkvKiBXYWxrIHRv IHRoZSBuZXh0IHBhZ2Ugd2l0aCBkYXRhICovCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQo ZGlyKSkKLQkJYmxrbm8gPSBzby0+Y3VyclBvcy5uZXh0UGFnZTsKKwkJYmxrbm8gPSBwcmlvcmJh dGNoLT5uZXh0UGFnZTsKIAllbHNlCi0JCWJsa25vID0gc28tPmN1cnJQb3MucHJldlBhZ2U7Ci0J bGFzdGN1cnJibGtubyA9IHNvLT5jdXJyUG9zLmN1cnJQYWdlOworCQlibGtubyA9IHByaW9yYmF0 Y2gtPnByZXZQYWdlOworCWxhc3RjdXJyYmxrbm8gPSBwcmlvcmJhdGNoLT5jdXJyUGFnZTsKIAog CS8qCi0JICogQ2FuY2VsIHByaW1pdGl2ZSBpbmRleCBzY2FucyB0aGF0IHdlcmUgc2NoZWR1bGVk IHdoZW4gdGhlIGNhbGwgdG8KLQkgKiBfYnRfcmVhZHBhZ2UgZm9yIGN1cnJQb3MgaGFwcGVuZWQg dG8gdXNlIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gdG8gdGhlCi0JICogb25lIHRoYXQgd2UncmUg c3RlcHBpbmcgaW4gbm93LiAgKEl0J3Mgb2theSB0byBsZWF2ZSB0aGUgc2NhbidzIGFycmF5Ci0J ICoga2V5cyBhcy1pcywgc2luY2UgdGhlIG5leHQgX2J0X3JlYWRwYWdlIHdpbGwgYWR2YW5jZSB0 aGVtLikKKwkgKiBDYW5jZWwgcHJpbWl0aXZlIGluZGV4IHNjYW5zIHRoYXQgd2VyZSBzY2hlZHVs ZWQgd2hlbiBwcmlvcmJhdGNoJ3MgY2FsbAorCSAqIHRvIF9idF9yZWFkcGFnZSBoYXBwZW5lZCB0 byB1c2UgdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiB0byB0aGUgb25lIHRoYXQKKwkgKiB3ZSdyZSBz dGVwcGluZyBpbiBub3cuICAoSXQncyBva2F5IHRvIGxlYXZlIHRoZSBzY2FuJ3MgYXJyYXkga2V5 cworCSAqIGFzLWlzLCBzaW5jZSB0aGUgbmV4dCBfYnRfcmVhZHBhZ2Ugd2lsbCBhZHZhbmNlIHRo ZW0uKQogCSAqLwotCWlmIChzby0+Y3VyclBvcy5kaXIgIT0gZGlyKQorCWlmIChwcmlvcmJhdGNo LT5kaXIgIT0gZGlyKQogCQlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7CiAKKwlpZiAoYmxrbm8g PT0gUF9OT05FIHx8CisJCShTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPworCQkgIXByaW9y YmF0Y2gtPm1vcmVSaWdodCA6ICFwcmlvcmJhdGNoLT5tb3JlTGVmdCkpCisJeworCQkvKgorCQkg KiBwcmlvcmJhdGNoJ3MgcGFnZSBpcyBrbm93biB0byBiZSB0aGUgZmluYWwgbGVhZiBwYWdlIHdp dGggbWF0Y2hlcworCQkgKiBpbiB0aGlzIHNjYW4gZGlyZWN0aW9uIChpdHMgX2J0X3JlYWRwYWdl IGNhbGwgZmlndXJlZCB0aGF0IG91dCkuCisJCSAqCisJCSAqIE5vdGU6IGlmIHNvLT5uZWVkUHJp bVNjYW4gaXMgc2V0LCB0aGVuIHByaW9yYmF0Y2gncyBsZWFmIHBhZ2UgaXMKKwkJICogYWN0dWFs bHkganVzdCB0aGUgZmluYWwgcGFnZSBmb3IgdGhlIGN1cnJlbnQgcHJpbWl0aXZlIGluZGV4IHNj YW4KKwkJICogaW4gdGhpcyBzY2FuIGRpcmVjdGlvbiAodGhlIHNjYW4gd2lsbCBjb250aW51ZSBp biBfYnRfZmlyc3QpLgorCQkgKi8KKwkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJCXJldHVy biBOVUxMOworCX0KKworCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6ZSB0aGUgc2NhbiB0byBn ZXQgbmV4dCBibGtubyAqLworCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwgJiYKKwkJ IV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBmYWxzZSkp CisJCXJldHVybiBOVUxMOwkJCS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJpbVNjYW4gd2Fzbid0IHNl dCAqLworCiAJcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJyYmxr bm8sIGRpciwgZmFsc2UpOwogfQogCkBAIC0xNzMxLDczICsxNjAyLDkwIEBAIF9idF9zdGVwcGFn ZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogICogdG8gc3RvcCB0aGUg c2NhbiBvbiB0aGlzIHBhZ2UgYnkgY2FsbGluZyBfYnRfY2hlY2trZXlzIGFnYWluc3QgdGhlIGhp Z2gKICAqIGtleS4gIFNlZSBfYnRfcmVhZHBhZ2UgZm9yIGZ1bGwgZGV0YWlscy4KICAqCi0gKiBP biBlbnRyeSwgc28tPmN1cnJQb3MgbXVzdCBiZSBwaW5uZWQgYW5kIGxvY2tlZCAoc28gb2ZmbnVt IHN0YXlzIHZhbGlkKS4KKyAqIE9uIGVudHJ5LCBmaXJzdGJhdGNoIG11c3QgYmUgcGlubmVkIGFu ZCBsb2NrZWQgKHNvIG9mZm51bSBzdGF5cyB2YWxpZCkuCiAgKiBQYXJhbGxlbCBzY2FuIGNhbGxl cnMgbXVzdCBoYXZlIHNlaXplZCB0aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlLgogICoKLSAq IE9uIGV4aXQsIHdlJ2xsIGhhdmUgdXBkYXRlZCBzby0+Y3VyclBvcyBhbmQgcmV0YWluZWQgbG9j a3MgYW5kIHBpbnMKKyAqIE9uIGV4aXQsIHdlJ2xsIGhhdmUgdXBkYXRlZCBmaXJzdGJhdGNoIGFu ZCByZXRhaW5lZCBsb2NrcyBhbmQgcGlucwogICogYWNjb3JkaW5nIHRvIHRoZSBzYW1lIHJ1bGVz IGFzIHRob3NlIGxhaWQgb3V0IGZvciBfYnRfcmVhZG5leHRwYWdlIGV4aXQuCi0gKiBMaWtlIF9i dF9yZWFkbmV4dHBhZ2UsIG91ciByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIGlmIHRoZXJlIGFyZSBh bnkgbWF0Y2hpbmcKLSAqIHJlY29yZHMgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi4KICAqCiAgKiBX ZSBhbHdheXMgcmVsZWFzZSB0aGUgc2NhbiBmb3IgYSBwYXJhbGxlbCBzY2FuIGNhbGxlciwgcmVn YXJkbGVzcyBvZgogICogc3VjY2VzcyBvciBmYWlsdXJlOyB3ZSdsbCBjYWxsIF9idF9wYXJhbGxl bF9yZWxlYXNlIGFzIHNvb24gYXMgcG9zc2libGUuCiAgKi8KLXN0YXRpYyBib29sCi1fYnRfcmVh ZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5E aXJlY3Rpb24gZGlyKQorc3RhdGljIEluZGV4U2NhbkJhdGNoCitfYnRfcmVhZGZpcnN0cGFnZShJ bmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2gsCisJCQkJICBPZmZz ZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlCVFNjYW5PcGFxdWUgc28g PSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQmxvY2tOdW1iZXIgYmxrbm8sCisJCQkJ bGFzdGN1cnJibGtubzsKIAotCXNvLT5udW1LaWxsZWQgPSAwOwkJCS8qIGp1c3QgcGFyYW5vaWEg Ki8KLQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwkJLyogZGl0dG8gKi8KLQotCS8qIEluaXRpYWxp emUgc28tPmN1cnJQb3MgZm9yIHRoZSBmaXJzdCBwYWdlIChwYWdlIGluIHNvLT5jdXJyUG9zLmJ1 ZikgKi8KKwkvKiBJbml0aWFsaXplIGZpcnN0YmF0Y2gncyBwb3NpdGlvbiBmb3IgdGhlIGZpcnN0 IHBhZ2UgKi8KIAlpZiAoc28tPm5lZWRQcmltU2NhbikKIAl7CiAJCUFzc2VydChzby0+bnVtQXJy YXlLZXlzKTsKIAotCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IHRydWU7Ci0JCXNvLT5jdXJyUG9z Lm1vcmVSaWdodCA9IHRydWU7CisJCWZpcnN0YmF0Y2gtPm1vcmVMZWZ0ID0gdHJ1ZTsKKwkJZmly c3RiYXRjaC0+bW9yZVJpZ2h0ID0gdHJ1ZTsKIAkJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOwog CX0KIAllbHNlIGlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJewotCQlzby0+Y3Vy clBvcy5tb3JlTGVmdCA9IGZhbHNlOwotCQlzby0+Y3VyclBvcy5tb3JlUmlnaHQgPSB0cnVlOwor CQlmaXJzdGJhdGNoLT5tb3JlTGVmdCA9IGZhbHNlOworCQlmaXJzdGJhdGNoLT5tb3JlUmlnaHQg PSB0cnVlOwogCX0KIAllbHNlCiAJewotCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IHRydWU7Ci0J CXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IGZhbHNlOworCQlmaXJzdGJhdGNoLT5tb3JlTGVmdCA9 IHRydWU7CisJCWZpcnN0YmF0Y2gtPm1vcmVSaWdodCA9IGZhbHNlOwogCX0KIAogCS8qCiAJICog QXR0ZW1wdCB0byBsb2FkIG1hdGNoaW5nIHR1cGxlcyBmcm9tIHRoZSBmaXJzdCBwYWdlLgogCSAq Ci0JICogTm90ZSB0aGF0IF9idF9yZWFkcGFnZSB3aWxsIGZpbmlzaCBpbml0aWFsaXppbmcgdGhl IHNvLT5jdXJyUG9zIGZpZWxkcy4KKwkgKiBOb3RlIHRoYXQgX2J0X3JlYWRwYWdlIHdpbGwgZmlu aXNoIGluaXRpYWxpemluZyB0aGUgZmlyc3RiYXRjaCBmaWVsZHMuCiAJICogX2J0X3JlYWRwYWdl IGFsc28gcmVsZWFzZXMgcGFyYWxsZWwgc2NhbiAoZXZlbiB3aGVuIGl0IHJldHVybnMgZmFsc2Up LgogCSAqLwotCWlmIChfYnRfcmVhZHBhZ2Uoc2NhbiwgZGlyLCBvZmZudW0sIHRydWUpKQorCWlm IChfYnRfcmVhZHBhZ2Uoc2NhbiwgZmlyc3RiYXRjaCwgZGlyLCBvZmZudW0sIHRydWUpKQogCXsK LQkJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQotCQkvKgotCQkgKiBfYnRf cmVhZHBhZ2Ugc3VjY2VlZGVkLiAgRHJvcCB0aGUgbG9jayAoYW5kIG1heWJlIHRoZSBwaW4pIG9u Ci0JCSAqIHNvLT5jdXJyUG9zLmJ1ZiBpbiBwcmVwYXJhdGlvbiBmb3IgYnRnZXR0dXBsZSByZXR1 cm5pbmcgdHVwbGVzLgotCQkgKi8KLQkJQXNzZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJy UG9zKSk7Ci0JCV9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbihyZWwsIHNvKTsKLQkJcmV0dXJu IHRydWU7CisJCS8qIF9idF9yZWFkcGFnZSBzYXZlZCBvbmUgb3IgbW9yZSBtYXRjaGVzIGluIGZp cnN0YmF0Y2guaXRlbXNbXSAqLworCQlpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrKHNjYW4sIGZp cnN0YmF0Y2gpOworCQlyZXR1cm4gZmlyc3RiYXRjaDsKIAl9CiAKLQkvKiBUaGVyZSdzIG5vIGFj dHVhbGx5LW1hdGNoaW5nIGRhdGEgb24gdGhlIHBhZ2UgaW4gc28tPmN1cnJQb3MuYnVmICovCi0J X2J0X3VubG9ja2J1ZihzY2FuLT5pbmRleFJlbGF0aW9uLCBzby0+Y3VyclBvcy5idWYpOworCS8q IFRoZXJlJ3Mgbm8gYWN0dWFsbHktbWF0Y2hpbmcgZGF0YSBvbiB0aGUgcGFnZSAqLworCV9idF9y ZWxidWYoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgZmlyc3RiYXRjaC0+YnVmKTsKKwlmaXJzdGJhdGNo LT5idWYgPSBJbnZhbGlkQnVmZmVyOwogCi0JLyogQ2FsbCBfYnRfcmVhZG5leHRwYWdlIHVzaW5n IGl0cyBfYnRfc3RlcHBhZ2Ugd3JhcHBlciBmdW5jdGlvbiAqLwotCWlmICghX2J0X3N0ZXBwYWdl KHNjYW4sIGRpcikpCi0JCXJldHVybiBmYWxzZTsKKwkvKiBXYWxrIHRvIHRoZSBuZXh0IHBhZ2Ug d2l0aCBkYXRhICovCisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKKwkJYmxrbm8g PSBmaXJzdGJhdGNoLT5uZXh0UGFnZTsKKwllbHNlCisJCWJsa25vID0gZmlyc3RiYXRjaC0+cHJl dlBhZ2U7CisJbGFzdGN1cnJibGtubyA9IGZpcnN0YmF0Y2gtPmN1cnJQYWdlOwogCi0JLyogX2J0 X3JlYWRwYWdlIGZvciBhIGxhdGVyIHBhZ2UgKG5vdyBpbiBzby0+Y3VyclBvcykgc3VjY2VlZGVk ICovCi0JcmV0dXJuIHRydWU7CisJQXNzZXJ0KGZpcnN0YmF0Y2gtPmRpciA9PSBkaXIpOworCisJ aWYgKGJsa25vID09IFBfTk9ORSB8fAorCQkoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8K KwkJICFmaXJzdGJhdGNoLT5tb3JlUmlnaHQgOiAhZmlyc3RiYXRjaC0+bW9yZUxlZnQpKQorCXsK KwkJLyoKKwkJICogZmlyc3RiYXRjaCBfYnRfcmVhZHBhZ2UgY2FsbCBlbmRlZCBzY2FuIGluIHRo aXMgZGlyZWN0aW9uICh0aG91Z2gKKwkJICogaWYgc28tPm5lZWRQcmltU2NhbiB3YXMgc2V0IHRo ZSBzY2FuIHdpbGwgY29udGludWUgaW4gX2J0X2ZpcnN0KQorCQkgKi8KKwkJaW5kZXhhbV91dGls X2JhdGNoX3JlbGVhc2Uoc2NhbiwgZmlyc3RiYXRjaCk7CisJCV9idF9wYXJhbGxlbF9kb25lKHNj YW4pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShz Y2FuLCBmaXJzdGJhdGNoKTsKKworCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6ZSB0aGUgc2Nh biB0byBnZXQgbmV4dCBibGtubyAqLworCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwg JiYKKwkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBm YWxzZSkpCisJCXJldHVybiBOVUxMOwkJCS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJpbVNjYW4gd2Fz bid0IHNldCAqLworCisJcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3Rj dXJyYmxrbm8sIGRpciwgZmFsc2UpOwogfQogCiAvKgpAQCAtMTgwNywxMDIgKzE2OTUsNjUgQEAg X2J0X3JlYWRmaXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBPZmZzZXROdW1iZXIgb2ZmbnVt LCBTY2FuRGlyZWN0aW9uIGRpcikKICAqIHByZXZpb3VzbHktc2F2ZWQgcmlnaHQgbGluayBvciBs ZWZ0IGxpbmsuICBsYXN0Y3VycmJsa25vIGlzIHRoZSBwYWdlIHRoYXQKICAqIHdhcyBjdXJyZW50 IGF0IHRoZSBwb2ludCB3aGVyZSB0aGUgYmxrbm8gbGluayB3YXMgc2F2ZWQsIHdoaWNoIHdlIHVz ZSB0bwogICogcmVhc29uIGFib3V0IGNvbmN1cnJlbnQgcGFnZSBzcGxpdHMvcGFnZSBkZWxldGlv bnMgZHVyaW5nIGJhY2t3YXJkcyBzY2Fucy4KLSAqIEluIHRoZSBjb21tb24gY2FzZSB3aGVyZSBz ZWl6ZWQ9ZmFsc2UsIGJsa25vIGlzIGVpdGhlciBzby0+Y3VyclBvcy5uZXh0UGFnZQotICogb3Ig c28tPmN1cnJQb3MucHJldlBhZ2UsIGFuZCBsYXN0Y3VycmJsa25vIGlzIHNvLT5jdXJyUG9zLmN1 cnJQYWdlLgorICogYmxrbm8gaXMgdGhlIHByaW9yIGJhdGNoJ3MgbmV4dFBhZ2Ugb3IgcHJldlBh Z2UgKGRlcGVuZGluZyBvbiB0aGUgY3VycmVudAorICogc2NhbiBkaXJlY3Rpb24pLCBhbmQgbGFz dGN1cnJibGtubyBpcyB0aGUgcHJpb3IgYmF0Y2gncyBjdXJyUGFnZS4KICAqCi0gKiBPbiBlbnRy eSwgc28tPmN1cnJQb3Mgc2hvdWxkbid0IGJlIGxvY2tlZCBieSBjYWxsZXIuICBzby0+Y3VyclBv cy5idWYgbXVzdAotICogYmUgSW52YWxpZEJ1ZmZlci91bnBpbm5lZCBhcyBuZWVkZWQgYnkgY2Fs bGVyIChub3RlIHRoYXQgbGFzdGN1cnJibGtubwotICogd29uJ3QgbmVlZCB0byBiZSByZWFkIGFn YWluIGluIGFsbW9zdCBhbGwgY2FzZXMpLiAgUGFyYWxsZWwgc2NhbiBjYWxsZXJzCi0gKiB0aGF0 IHNlaXplZCB0aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlIHNob3VsZCBwYXNzIHNlaXplZD10 cnVlOyBzdWNoIGEKLSAqIGNhbGxlcidzIGJsa25vIGFuZCBsYXN0Y3VycmJsa25vIGFyZ3VtZW50 cyBjb21lIGZyb20gdGhlIHNlaXplZCBzY2FuLgotICogc2VpemVkPWZhbHNlIGNhbGxlcnMganVz dCBwYXNzIHVzIHRoZSBibGtuby9sYXN0Y3VycmJsa25vIHRha2VuIGZyb20gdGhlaXIKLSAqIHNv LT5jdXJyUG9zLCB3aGljaCAoYWxvbmcgd2l0aCBzby0+Y3VyclBvcyBpdHNlbGYpIGNhbiBiZSB1 c2VkIHRvIGVuZCB0aGUKLSAqIHNjYW4uICBBIHNlaXplZD1mYWxzZSBjYWxsZXIncyBibGtubyBj YW4gbmV2ZXIgYmUgYXNzdW1lZCB0byBiZSB0aGUgcGFnZQotICogdGhhdCBtdXN0IGJlIHJlYWQg bmV4dCBkdXJpbmcgYSBwYXJhbGxlbCBzY2FuLCB0aG91Z2guICBXZSBtdXN0IGZpZ3VyZSB0aGF0 Ci0gKiBwYXJ0IG91dCBmb3Igb3Vyc2VsdmVzIGJ5IHNlaXppbmcgdGhlIHNjYW4gKHRoZSBjb3Jy ZWN0IHBhZ2UgdG8gcmVhZCBtaWdodAotICogYWxyZWFkeSBiZSBiZXlvbmQgdGhlIHNlaXplZD1m YWxzZSBjYWxsZXIncyBibGtubyBkdXJpbmcgYSBwYXJhbGxlbCBzY2FuLAotICogdW5sZXNzIGJs a25vL3NvLT5jdXJyUG9zLm5leHRQYWdlL3NvLT5jdXJyUG9zLnByZXZQYWdlIGlzIGFscmVhZHkg UF9OT05FLAotICogb3IgdW5sZXNzIHNvLT5jdXJyUG9zLm1vcmVSaWdodC9zby0+Y3VyclBvcy5t b3JlTGVmdCBpcyBhbHJlYWR5IHVuc2V0KS4KKyAqIE9uIGVudHJ5LCBubyBwYWdlIHNob3VsZCBi ZSBsb2NrZWQgYnkgY2FsbGVyLgogICoKLSAqIE9uIHN1Y2Nlc3MgZXhpdCwgc28tPmN1cnJQb3Mg aXMgdXBkYXRlZCB0byBjb250YWluIGRhdGEgZnJvbSB0aGUgbmV4dAotICogaW50ZXJlc3Rpbmcg cGFnZSwgYW5kIHdlIHJldHVybiB0cnVlLiAgV2UgaG9sZCBhIHBpbiBvbiB0aGUgYnVmZmVyIG9u Ci0gKiBzdWNjZXNzIGV4aXQgKGV4Y2VwdCBkdXJpbmcgc28tPmRyb3BQaW4gaW5kZXggc2NhbnMs IHdoZW4gd2UgZHJvcCB0aGUgcGluCi0gKiBlYWdlcmx5IHRvIGF2b2lkIGJsb2NraW5nIFZBQ1VV TSkuCisgKiBPbiBzdWNjZXNzIGV4aXQsIHJldHVybnMgYmF0Y2ggY29udGFpbmluZyBkYXRhIGZy b20gdGhlIG5leHQgcGFnZSB0aGF0IGhhcworICogYXQgbGVhc3Qgb25lIG1hdGNoaW5nIGl0ZW0u ICBJZiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGluZyBpdGVtcyBpbiB0aGUKKyAqIGdpdmVuIHNj YW4gZGlyZWN0aW9uLCB3ZSBqdXN0IHJldHVybiBOVUxMLgogICoKLSAqIElmIHRoZXJlIGFyZSBu byBtb3JlIG1hdGNoaW5nIHJlY29yZHMgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbiwgd2UgaW52YWxp ZGF0ZQotICogc28tPmN1cnJQb3MgKHdoaWxlIGVuc3VyaW5nIGl0IHJldGFpbnMgbm8gbG9ja3Mg b3IgcGlucyksIGFuZCByZXR1cm4gZmFsc2UuCi0gKgotICogV2UgYWx3YXlzIHJlbGVhc2UgdGhl IHNjYW4gZm9yIGEgcGFyYWxsZWwgc2NhbiBjYWxsZXIsIHJlZ2FyZGxlc3Mgb2YKLSAqIHN1Y2Nl c3Mgb3IgZmFpbHVyZTsgd2UnbGwgY2FsbCBfYnRfcGFyYWxsZWxfcmVsZWFzZSBhcyBzb29uIGFz IHBvc3NpYmxlLgorICogUGFyYWxsZWwgc2NhbiBjYWxsZXJzIG11c3Qgc2VpemUgdGhlIHNjYW4g YmVmb3JlIGNhbGxpbmcgaGVyZS4gIGJsa25vIGFuZAorICogbGFzdGN1cnJibGtubyBzaG91bGQg Y29tZSBmcm9tIHRoZSBzZWl6ZWQgc2Nhbi4gIFdlJ2xsIHJlbGVhc2UgdGhlIHNjYW4gYXMKKyAq IHNvb24gYXMgcG9zc2libGUuCiAgKi8KLXN0YXRpYyBib29sCitzdGF0aWMgSW5kZXhTY2FuQmF0 Y2gKIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtu bywKLQkJCQkgQmxvY2tOdW1iZXIgbGFzdGN1cnJibGtubywgU2NhbkRpcmVjdGlvbiBkaXIsIGJv b2wgc2VpemVkKQorCQkJCSBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vLCBTY2FuRGlyZWN0aW9u IGRpciwgYm9vbCBmaXJzdHBhZ2UpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxh dGlvbjsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJ SW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2g7CiAKLQlBc3NlcnQoc28tPmN1cnJQb3MuY3VyclBhZ2Ug PT0gbGFzdGN1cnJibGtubyB8fCBzZWl6ZWQpOwotCUFzc2VydCghKGJsa25vID09IFBfTk9ORSAm JiBzZWl6ZWQpKTsKLQlBc3NlcnQoIUJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7CisJ LyogQWxsb2NhdGUgc3BhY2UgZm9yIG5leHQgYmF0Y2ggKi8KKwluZXdiYXRjaCA9IGluZGV4YW1f dXRpbF9iYXRjaF9hbGxvYyhzY2FuKTsKIAogCS8qCi0JICogUmVtZW1iZXIgdGhhdCB0aGUgc2Nh biBhbHJlYWR5IHJlYWQgbGFzdGN1cnJibGtubywgYSBwYWdlIHRvIHRoZSBsZWZ0Ci0JICogb2Yg Ymxrbm8gKG9yIHJlbWVtYmVyIHJlYWRpbmcgYSBwYWdlIHRvIHRoZSByaWdodCwgZm9yIGJhY2t3 YXJkcyBzY2FucykKKwkgKiBuZXdiYXRjaCB3aWxsIGJlIHRoZSBiYXRjaCBmb3IgbGFzdGN1cnJi bGtubywgYSBwYWdlIHRvIHRoZSBsZWZ0IG9mCisJICogYmxrbm8gKG9yIHRvIHRoZSByaWdodCwg d2hlbiB0aGUgc2NhbiBpcyBtb3ZpbmcgYmFja3dhcmRzKQogCSAqLwotCWlmIChTY2FuRGlyZWN0 aW9uSXNGb3J3YXJkKGRpcikpCi0JCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gdHJ1ZTsKLQllbHNl Ci0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IHRydWU7CisJbmV3YmF0Y2gtPm1vcmVMZWZ0ID0g dHJ1ZTsKKwluZXdiYXRjaC0+bW9yZVJpZ2h0ID0gdHJ1ZTsKIAogCWZvciAoOzspCiAJewogCQlQ YWdlCQlwYWdlOwogCQlCVFBhZ2VPcGFxdWUgb3BhcXVlOwogCi0JCWlmIChibGtubyA9PSBQX05P TkUgfHwKLQkJCShTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPwotCQkJICFzby0+Y3VyclBv cy5tb3JlUmlnaHQgOiAhc28tPmN1cnJQb3MubW9yZUxlZnQpKQotCQl7Ci0JCQkvKiBtb3N0IHJl Y2VudCBfYnRfcmVhZHBhZ2UgY2FsbCAoZm9yIGxhc3RjdXJyYmxrbm8pIGVuZGVkIHNjYW4gKi8K LQkJCUFzc2VydChzby0+Y3VyclBvcy5jdXJyUGFnZSA9PSBsYXN0Y3VycmJsa25vICYmICFzZWl6 ZWQpOwotCQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JCQlfYnRfcGFyYWxs ZWxfZG9uZShzY2FuKTsJLyogaWZmICFzby0+bmVlZFByaW1TY2FuICovCi0JCQlyZXR1cm4gZmFs c2U7Ci0JCX0KLQotCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwotCi0JCS8qIHBhcmFsbGVs IHNjYW4gbXVzdCBuZXZlciBhY3R1YWxseSB2aXNpdCBzby0+Y3VyclBvcyBibGtubyAqLwotCQlp ZiAoIXNlaXplZCAmJiBzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwgJiYKLQkJCSFfYnRfcGFy YWxsZWxfc2VpemUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtubywgZmFsc2UpKQotCQl7Ci0J CQkvKiB3aG9sZSBzY2FuIGlzIG5vdyBkb25lIChvciBhbm90aGVyIHByaW1pdGl2ZSBzY2FuIHJl cXVpcmVkKSAqLwotCQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JCQlyZXR1 cm4gZmFsc2U7Ci0JCX0KKwkJQXNzZXJ0KCEoKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlKS0+ bmVlZFByaW1TY2FuKTsKKwkJQXNzZXJ0KGJsa25vICE9IFBfTk9ORSAmJiBsYXN0Y3VycmJsa25v ICE9IFBfTk9ORSk7CiAKIAkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAkJewog CQkJLyogcmVhZCBibGtubywgYnV0IGNoZWNrIGZvciBpbnRlcnJ1cHRzIGZpcnN0ICovCiAJCQlD SEVDS19GT1JfSU5URVJSVVBUUygpOwotCQkJc28tPmN1cnJQb3MuYnVmID0gX2J0X2dldGJ1Zihy ZWwsIGJsa25vLCBCVF9SRUFEKTsKKwkJCW5ld2JhdGNoLT5idWYgPSBfYnRfZ2V0YnVmKHJlbCwg Ymxrbm8sIEJUX1JFQUQpOwogCQl9CiAJCWVsc2UKIAkJewogCQkJLyogcmVhZCBibGtubywgYXZv aWRpbmcgcmFjZSAoYWxzbyBjaGVja3MgZm9yIGludGVycnVwdHMpICovCi0JCQlzby0+Y3VyclBv cy5idWYgPSBfYnRfbG9ja19hbmRfdmFsaWRhdGVfbGVmdChyZWwsICZibGtubywKLQkJCQkJCQkJ CQkJCQkJIGxhc3RjdXJyYmxrbm8pOwotCQkJaWYgKHNvLT5jdXJyUG9zLmJ1ZiA9PSBJbnZhbGlk QnVmZmVyKQorCQkJbmV3YmF0Y2gtPmJ1ZiA9IF9idF9sb2NrX2FuZF92YWxpZGF0ZV9sZWZ0KHJl bCwgJmJsa25vLAorCQkJCQkJCQkJCQkJCSAgIGxhc3RjdXJyYmxrbm8pOworCQkJaWYgKG5ld2Jh dGNoLT5idWYgPT0gSW52YWxpZEJ1ZmZlcikKIAkJCXsKIAkJCQkvKiBtdXN0IGhhdmUgYmVlbiBh IGNvbmN1cnJlbnQgZGVsZXRpb24gb2YgbGVmdG1vc3QgcGFnZSAqLwotCQkJCUJUU2NhblBvc0lu dmFsaWRhdGUoc28tPmN1cnJQb3MpOwogCQkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOwotCQkJ CXJldHVybiBmYWxzZTsKKwkJCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBuZXdi YXRjaCk7CisJCQkJcmV0dXJuIE5VTEw7CiAJCQl9CiAJCX0KIAotCQlwYWdlID0gQnVmZmVyR2V0 UGFnZShzby0+Y3VyclBvcy5idWYpOworCQlwYWdlID0gQnVmZmVyR2V0UGFnZShuZXdiYXRjaC0+ YnVmKTsKIAkJb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOwogCQlsYXN0Y3VycmJsa25v ID0gYmxrbm87CiAJCWlmIChsaWtlbHkoIVBfSUdOT1JFKG9wYXF1ZSkpKQpAQCAtMTkxMCwxNyAr MTc2MSwxNyBAQCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1i ZXIgYmxrbm8sCiAJCQkvKiBzZWUgaWYgdGhlcmUgYXJlIGFueSBtYXRjaGVzIG9uIHRoaXMgcGFn ZSAqLwogCQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAkJCXsKLQkJCQkvKiBu b3RlIHRoYXQgdGhpcyB3aWxsIGNsZWFyIG1vcmVSaWdodCBpZiB3ZSBjYW4gc3RvcCAqLwotCQkJ CWlmIChfYnRfcmVhZHBhZ2Uoc2NhbiwgZGlyLCBQX0ZJUlNUREFUQUtFWShvcGFxdWUpLCBzZWl6 ZWQpKQorCQkJCWlmIChfYnRfcmVhZHBhZ2Uoc2NhbiwgbmV3YmF0Y2gsIGRpciwKKwkJCQkJCQkJ IFBfRklSU1REQVRBS0VZKG9wYXF1ZSksIGZpcnN0cGFnZSkpCiAJCQkJCWJyZWFrOwotCQkJCWJs a25vID0gc28tPmN1cnJQb3MubmV4dFBhZ2U7CisJCQkJYmxrbm8gPSBuZXdiYXRjaC0+bmV4dFBh Z2U7CiAJCQl9CiAJCQllbHNlCiAJCQl7Ci0JCQkJLyogbm90ZSB0aGF0IHRoaXMgd2lsbCBjbGVh ciBtb3JlTGVmdCBpZiB3ZSBjYW4gc3RvcCAqLwotCQkJCWlmIChfYnRfcmVhZHBhZ2Uoc2Nhbiwg ZGlyLCBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpLCBzZWl6ZWQpKQorCQkJCWlmIChfYnRf cmVhZHBhZ2Uoc2NhbiwgbmV3YmF0Y2gsIGRpciwKKwkJCQkJCQkJIFBhZ2VHZXRNYXhPZmZzZXRO dW1iZXIocGFnZSksIGZpcnN0cGFnZSkpCiAJCQkJCWJyZWFrOwotCQkJCWJsa25vID0gc28tPmN1 cnJQb3MucHJldlBhZ2U7CisJCQkJYmxrbm8gPSBuZXdiYXRjaC0+cHJldlBhZ2U7CiAJCQl9CiAJ CX0KIAkJZWxzZQpAQCAtMTkzNSwxOSArMTc4NiwzOSBAQCBfYnRfcmVhZG5leHRwYWdlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJCX0KIAogCQkvKiBubyBtYXRjaGlu ZyB0dXBsZXMgb24gdGhpcyBwYWdlICovCi0JCV9idF9yZWxidWYocmVsLCBzby0+Y3VyclBvcy5i dWYpOwotCQlzZWl6ZWQgPSBmYWxzZTsJCQkvKiByZWxlYXNlZCBieSBfYnRfcmVhZHBhZ2UgKG9y IGJ5IHVzKSAqLworCQlfYnRfcmVsYnVmKHJlbCwgbmV3YmF0Y2gtPmJ1Zik7CisJCW5ld2JhdGNo LT5idWYgPSBJbnZhbGlkQnVmZmVyOworCisJCS8qIENvbnRpbnVlIHRoZSBzY2FuIGluIHRoaXMg ZGlyZWN0aW9uPyAqLworCQlpZiAoYmxrbm8gPT0gUF9OT05FIHx8CisJCQkoU2NhbkRpcmVjdGlv bklzRm9yd2FyZChkaXIpID8KKwkJCSAhbmV3YmF0Y2gtPm1vcmVSaWdodCA6ICFuZXdiYXRjaC0+ bW9yZUxlZnQpKQorCQl7CisJCQkvKgorCQkJICogYmxrbm8gX2J0X3JlYWRwYWdlIGNhbGwgZW5k ZWQgc2NhbiBpbiB0aGlzIGRpcmVjdGlvbiAodGhvdWdoIGlmCisJCQkgKiBzby0+bmVlZFByaW1T Y2FuIHdhcyBzZXQgdGhlIHNjYW4gd2lsbCBjb250aW51ZSBpbiBfYnRfZmlyc3QpCisJCQkgKi8K KwkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVh c2Uoc2NhbiwgbmV3YmF0Y2gpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQkvKiBwYXJhbGxl bCBzY2FuIG11c3Qgc2VpemUgdGhlIHNjYW4gdG8gZ2V0IG5leHQgYmxrbm8gKi8KKwkJaWYgKHNj YW4tPnBhcmFsbGVsX3NjYW4gIT0gTlVMTCAmJgorCQkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2Fu LCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBmYWxzZSkpCisJCXsKKwkJCWluZGV4YW1fdXRpbF9i YXRjaF9yZWxlYXNlKHNjYW4sIG5ld2JhdGNoKTsKKwkJCXJldHVybiBOVUxMOwkJLyogZG9uZSBp ZmYgc28tPm5lZWRQcmltU2NhbiB3YXNuJ3Qgc2V0ICovCisJCX0KKworCQlmaXJzdHBhZ2UgPSBm YWxzZTsJCS8qIG5leHQgcGFnZSBjYW5ub3QgYmUgZmlyc3QgKi8KIAl9CiAKLQkvKgotCSAqIF9i dF9yZWFkcGFnZSBzdWNjZWVkZWQuICBEcm9wIHRoZSBsb2NrIChhbmQgbWF5YmUgdGhlIHBpbikg b24KLQkgKiBzby0+Y3VyclBvcy5idWYgaW4gcHJlcGFyYXRpb24gZm9yIGJ0Z2V0dHVwbGUgcmV0 dXJuaW5nIHR1cGxlcy4KLQkgKi8KLQlBc3NlcnQoc28tPmN1cnJQb3MuY3VyclBhZ2UgPT0gYmxr bm8pOwotCUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOwotCV9idF9kcm9w X2xvY2tfYW5kX21heWJlX3BpbihyZWwsIHNvKTsKKwkvKiBfYnRfcmVhZHBhZ2Ugc2F2ZWQgb25l IG9yIG1vcmUgbWF0Y2hlcyBpbiBuZXdiYXRjaC5pdGVtc1tdICovCisJQXNzZXJ0KG5ld2JhdGNo LT5jdXJyUGFnZSA9PSBibGtubyk7CisJaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayhzY2FuLCBu ZXdiYXRjaCk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbmV3YmF0Y2g7CiB9CiAKIC8qCkBA IC0yMTczLDI1ICsyMDQ0LDIzIEBAIF9idF9nZXRfZW5kcG9pbnQoUmVsYXRpb24gcmVsLCB1aW50 MzIgbGV2ZWwsIGJvb2wgcmlnaHRtb3N0KQogICogUGFyYWxsZWwgc2NhbiBjYWxsZXJzIG11c3Qg aGF2ZSBzZWl6ZWQgdGhlIHNjYW4gYmVmb3JlIGNhbGxpbmcgaGVyZS4KICAqIEV4aXQgY29uZGl0 aW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yIF9idF9maXJzdCgpLgogICovCi1zdGF0aWMgYm9vbAot X2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitzdGF0 aWMgSW5kZXhTY2FuQmF0Y2gKK19idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyLCBJbmRleFNjYW5CYXRjaCBmaXJzdGJhdGNoKQogewogCVJlbGF0aW9uCXJl bCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0JQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1 ZSkgc2Nhbi0+b3BhcXVlOwogCVBhZ2UJCXBhZ2U7CiAJQlRQYWdlT3BhcXVlIG9wYXF1ZTsKIAlP ZmZzZXROdW1iZXIgc3RhcnQ7CiAKLQlBc3NlcnQoIUJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQ b3MpKTsKLQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOworCUFzc2VydCghKChCVFNjYW5PcGFx dWUpIHNjYW4tPm9wYXF1ZSktPm5lZWRQcmltU2Nhbik7CiAKIAkvKgogCSAqIFNjYW4gZG93biB0 byB0aGUgbGVmdG1vc3Qgb3IgcmlnaHRtb3N0IGxlYWYgcGFnZS4gIFRoaXMgaXMgYSBzaW1wbGlm aWVkCiAJICogdmVyc2lvbiBvZiBfYnRfc2VhcmNoKCkuCiAJICovCi0Jc28tPmN1cnJQb3MuYnVm ID0gX2J0X2dldF9lbmRwb2ludChyZWwsIDAsIFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikp OworCWZpcnN0YmF0Y2gtPmJ1ZiA9IF9idF9nZXRfZW5kcG9pbnQocmVsLCAwLCBTY2FuRGlyZWN0 aW9uSXNCYWNrd2FyZChkaXIpKTsKIAotCWlmICghQnVmZmVySXNWYWxpZChzby0+Y3VyclBvcy5i dWYpKQorCWlmICghQnVmZmVySXNWYWxpZChmaXJzdGJhdGNoLT5idWYpKQogCXsKIAkJLyoKIAkJ ICogRW1wdHkgaW5kZXguIExvY2sgdGhlIHdob2xlIHJlbGF0aW9uLCBhcyBub3RoaW5nIGZpbmVy IHRvIGxvY2sKQEAgLTIyMDIsNyArMjA3MSw3IEBAIF9idF9lbmRwb2ludChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JcGFnZSA9 IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQb3MuYnVmKTsKKwlwYWdlID0gQnVmZmVyR2V0UGFnZShm aXJzdGJhdGNoLT5idWYpOwogCW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsKIAlBc3Nl cnQoUF9JU0xFQUYob3BhcXVlKSk7CiAKQEAgLTIyMjgsOSArMjA5Nyw1IEBAIF9idF9lbmRwb2lu dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCS8qCiAJICogTm93IGxv YWQgZGF0YSBmcm9tIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBzY2FuLgogCSAqLwotCWlmICghX2J0 X3JlYWRmaXJzdHBhZ2Uoc2Nhbiwgc3RhcnQsIGRpcikpCi0JCXJldHVybiBmYWxzZTsKLQotCV9i dF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gX2J0X3JlYWRm aXJzdHBhZ2Uoc2NhbiwgZmlyc3RiYXRjaCwgc3RhcnQsIGRpcik7CiB9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idHV0aWxzLmMKaW5kZXggZmMzMDJjMmFkLi5hMWU2ZGQzYTggMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKQEAgLTE5LDE3ICsxOSwxMyBAQAogCiAjaW5jbHVkZSAi YWNjZXNzL25idHJlZS5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxvcHRpb25zLmgiCi0jaW5jbHVk ZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJjb21tYW5kcy9wcm9ncmVzcy5oIgotI2lu Y2x1ZGUgImNvbW1vbi9pbnQuaCIKLSNpbmNsdWRlICJsaWIvcXVuaXF1ZS5oIgogI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInV0aWxzL2RhdHVtLmgiCiAjaW5jbHVkZSAidXRpbHMv bHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKIAotc3RhdGljIGludAlfYnRf Y29tcGFyZV9pbnQoY29uc3Qgdm9pZCAqdmEsIGNvbnN0IHZvaWQgKnZiKTsKIHN0YXRpYyBpbnQJ X2J0X2tlZXBfbmF0dHMoUmVsYXRpb24gcmVsLCBJbmRleFR1cGxlIGxhc3RsZWZ0LAogCQkJCQkJ ICAgSW5kZXhUdXBsZSBmaXJzdHJpZ2h0LCBCVFNjYW5JbnNlcnQgaXR1cF9rZXkpOwogCkBAIC0x NjAsMjM0ICsxNTYsNiBAQCBfYnRfZnJlZXN0YWNrKEJUU3RhY2sgc3RhY2spCiAJfQogfQogCi0v KgotICogcXNvcnQgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgaW50IGFycmF5cwotICovCi1zdGF0 aWMgaW50Ci1fYnRfY29tcGFyZV9pbnQoY29uc3Qgdm9pZCAqdmEsIGNvbnN0IHZvaWQgKnZiKQot ewotCWludAkJCWEgPSAqKChjb25zdCBpbnQgKikgdmEpOwotCWludAkJCWIgPSAqKChjb25zdCBp bnQgKikgdmIpOwotCi0JcmV0dXJuIHBnX2NtcF9zMzIoYSwgYik7Ci19Ci0KLS8qCi0gKiBfYnRf a2lsbGl0ZW1zIC0gc2V0IExQX0RFQUQgc3RhdGUgZm9yIGl0ZW1zIGFuIGluZGV4c2NhbiBjYWxs ZXIgaGFzCi0gKiB0b2xkIHVzIHdlcmUga2lsbGVkCi0gKgotICogc2Nhbi0+b3BhcXVlLCByZWZl cmVuY2VkIGxvY2FsbHkgdGhyb3VnaCBzbywgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhl Ci0gKiBjdXJyZW50IHBhZ2UgYW5kIGtpbGxlZCB0dXBsZXMgdGhlcmVvbiAoZ2VuZXJhbGx5LCB0 aGlzIHNob3VsZCBvbmx5IGJlCi0gKiBjYWxsZWQgaWYgc28tPm51bUtpbGxlZCA+IDApLgotICoK LSAqIENhbGxlciBzaG91bGQgbm90IGhhdmUgYSBsb2NrIG9uIHRoZSBzby0+Y3VyclBvcyBwYWdl LCBidXQgbXVzdCBob2xkIGEKLSAqIGJ1ZmZlciBwaW4gd2hlbiAhc28tPmRyb3BQaW4uICBXaGVu IHdlIHJldHVybiwgaXQgc3RpbGwgd29uJ3QgYmUgbG9ja2VkLgotICogSXQnbGwgY29udGludWUg dG8gaG9sZCB3aGF0ZXZlciBwaW5zIHdlcmUgaGVsZCBiZWZvcmUgY2FsbGluZyBoZXJlLgotICoK LSAqIFdlIG1hdGNoIGl0ZW1zIGJ5IGhlYXAgVElEIGJlZm9yZSBhc3N1bWluZyB0aGV5IGFyZSB0 aGUgcmlnaHQgb25lcyB0byBzZXQKLSAqIExQX0RFQUQuICBJZiB0aGUgc2NhbiBpcyBvbmUgdGhh dCBob2xkcyBhIGJ1ZmZlciBwaW4gb24gdGhlIHRhcmdldCBwYWdlCi0gKiBjb250aW51b3VzbHkg ZnJvbSBpbml0aWFsbHkgcmVhZGluZyB0aGUgaXRlbXMgdW50aWwgYXBwbHlpbmcgdGhpcyBmdW5j dGlvbgotICogKGlmIGl0IGlzIGEgIXNvLT5kcm9wUGluIHNjYW4pLCBWQUNVVU0gY2Fubm90IGhh dmUgZGVsZXRlZCBhbnkgaXRlbXMgb24gdGhlCi0gKiBwYWdlLCBzbyB0aGUgcGFnZSdzIFRJRHMg Y2FuJ3QgaGF2ZSBiZWVuIHJlY3ljbGVkIGJ5IG5vdy4gIFRoZXJlJ3Mgbm8gcmlzawotICogdGhh dCB3ZSdsbCBjb25mdXNlIGEgbmV3IGluZGV4IHR1cGxlIHRoYXQgaGFwcGVucyB0byB1c2UgYSBy ZWN5Y2xlZCBUSUQKLSAqIHdpdGggYSBub3ctcmVtb3ZlZCB0dXBsZSB3aXRoIHRoZSBzYW1lIFRJ RCAodGhhdCB1c2VkIHRvIGJlIG9uIHRoaXMgc2FtZQotICogcGFnZSkuICBXZSBjYW4ndCByZWx5 IG9uIHRoYXQgZHVyaW5nIHNjYW5zIHRoYXQgZHJvcCBidWZmZXIgcGlucyBlYWdlcmx5Ci0gKiAo c28tPmRyb3BQaW4gc2NhbnMpLCB0aG91Z2gsIHNvIHdlIG11c3QgY29uZGl0aW9uIHNldHRpbmcg TFBfREVBRCBiaXRzIG9uCi0gKiB0aGUgcGFnZSBMU04gaGF2aW5nIG5vdCBjaGFuZ2VkIHNpbmNl IGJhY2sgd2hlbiBfYnRfcmVhZHBhZ2Ugc2F3IHRoZSBwYWdlLgotICogV2UgdG90YWxseSBnaXZl IHVwIG9uIHNldHRpbmcgTFBfREVBRCBiaXRzIHdoZW4gdGhlIHBhZ2UgTFNOIGNoYW5nZWQuCi0g KgotICogV2UgZ2l2ZSB1cCBtdWNoIGxlc3Mgb2Z0ZW4gZHVyaW5nICFzby0+ZHJvcFBpbiBzY2Fu cywgYnV0IGl0IHN0aWxsIGhhcHBlbnMuCi0gKiBXZSBjb3BlIHdpdGggY2FzZXMgd2hlcmUgaXRl bXMgaGF2ZSBtb3ZlZCByaWdodCBkdWUgdG8gaW5zZXJ0aW9ucy4gIElmIGFuCi0gKiBpdGVtIGhh cyBtb3ZlZCBvZmYgdGhlIGN1cnJlbnQgcGFnZSBkdWUgdG8gYSBzcGxpdCwgd2UnbGwgZmFpbCB0 byBmaW5kIGl0Ci0gKiBhbmQganVzdCBnaXZlIHVwIG9uIGl0LgotICovCi12b2lkCi1fYnRfa2ls bGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKLXsKLQlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRl eFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1 ZTsKLQlQYWdlCQlwYWdlOwotCUJUUGFnZU9wYXF1ZSBvcGFxdWU7Ci0JT2Zmc2V0TnVtYmVyIG1p bm9mZjsKLQlPZmZzZXROdW1iZXIgbWF4b2ZmOwotCWludAkJCW51bUtpbGxlZCA9IHNvLT5udW1L aWxsZWQ7Ci0JYm9vbAkJa2lsbGVkc29tZXRoaW5nID0gZmFsc2U7Ci0JQnVmZmVyCQlidWY7Ci0K LQlBc3NlcnQobnVtS2lsbGVkID4gMCk7Ci0JQXNzZXJ0KEJUU2NhblBvc0lzVmFsaWQoc28tPmN1 cnJQb3MpKTsKLQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwpOyAvKiBjYW4ndCBi ZSBhIGJpdG1hcCBpbmRleCBzY2FuICovCi0KLQkvKiBBbHdheXMgaW52YWxpZGF0ZSBzby0+a2ls bGVkSXRlbXNbXSBiZWZvcmUgbGVhdmluZyBzby0+Y3VyclBvcyAqLwotCXNvLT5udW1LaWxsZWQg PSAwOwotCi0JLyoKLQkgKiBXZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBzby0+a2lsbGVkSXRl bXNbXSBpbiBsZWFmIHBhZ2Ugb3JkZXI7IHRoZQotCSAqIGxvb3AgYmVsb3cgZXhwZWN0cyB0aGlz ICh3aGVuIG1hcmtpbmcgcG9zdGluZyBsaXN0IHR1cGxlcywgYXQgbGVhc3QpLgotCSAqIHNvLT5r aWxsZWRJdGVtc1tdIGlzIG5vdyBpbiB3aGF0ZXZlciBvcmRlciB0aGUgc2NhbiByZXR1cm5lZCBp dGVtcyBpbi4KLQkgKiBTY3JvbGxhYmxlIGN1cnNvciBzY2FucyBtaWdodCBoYXZlIGV2ZW4gc2F2 ZWQgdGhlIHNhbWUgaXRlbS9USUQgdHdpY2UuCi0JICoKLQkgKiBTb3J0IGFuZCB1bmlxdWUtaWZ5 IHNvLT5raWxsZWRJdGVtc1tdIHRvIGRlYWwgd2l0aCBhbGwgdGhpcy4KLQkgKi8KLQlpZiAobnVt S2lsbGVkID4gMSkKLQl7Ci0JCXFzb3J0KHNvLT5raWxsZWRJdGVtcywgbnVtS2lsbGVkLCBzaXpl b2YoaW50KSwgX2J0X2NvbXBhcmVfaW50KTsKLQkJbnVtS2lsbGVkID0gcXVuaXF1ZShzby0+a2ls bGVkSXRlbXMsIG51bUtpbGxlZCwgc2l6ZW9mKGludCksCi0JCQkJCQkJX2J0X2NvbXBhcmVfaW50 KTsKLQl9Ci0KLQlpZiAoIXNvLT5kcm9wUGluKQotCXsKLQkJLyoKLQkJICogV2UgaGF2ZSBoZWxk IHRoZSBwaW4gb24gdGhpcyBwYWdlIHNpbmNlIHdlIHJlYWQgdGhlIGluZGV4IHR1cGxlcywKLQkJ ICogc28gYWxsIHdlIG5lZWQgdG8gZG8gaXMgbG9jayBpdC4gIFRoZSBwaW4gd2lsbCBoYXZlIHBy ZXZlbnRlZAotCQkgKiBjb25jdXJyZW50IFZBQ1VVTXMgZnJvbSByZWN5Y2xpbmcgYW55IG9mIHRo ZSBUSURzIG9uIHRoZSBwYWdlLgotCQkgKi8KLQkJQXNzZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNv LT5jdXJyUG9zKSk7Ci0JCWJ1ZiA9IHNvLT5jdXJyUG9zLmJ1ZjsKLQkJX2J0X2xvY2tidWYocmVs LCBidWYsIEJUX1JFQUQpOwotCX0KLQllbHNlCi0JewotCQlYTG9nUmVjUHRyCWxhdGVzdGxzbjsK LQotCQlBc3NlcnQoIUJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7Ci0JCWJ1ZiA9IF9i dF9nZXRidWYocmVsLCBzby0+Y3VyclBvcy5jdXJyUGFnZSwgQlRfUkVBRCk7Ci0KLQkJbGF0ZXN0 bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJ1Zik7Ci0JCUFzc2VydChzby0+Y3VyclBvcy5sc24g PD0gbGF0ZXN0bHNuKTsKLQkJaWYgKHNvLT5jdXJyUG9zLmxzbiAhPSBsYXRlc3Rsc24pCi0JCXsK LQkJCS8qIE1vZGlmaWVkLCBnaXZlIHVwIG9uIGhpbnRpbmcgKi8KLQkJCV9idF9yZWxidWYocmVs LCBidWYpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJLyogVW5tb2RpZmllZCwgaGludGluZyBpcyBz YWZlICovCi0JfQotCi0JcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKLQlvcGFxdWUgPSBCVFBh Z2VHZXRPcGFxdWUocGFnZSk7Ci0JbWlub2ZmID0gUF9GSVJTVERBVEFLRVkob3BhcXVlKTsKLQlt YXhvZmYgPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOwotCi0JLyogSXRlcmF0ZSB0aHJv dWdoIHNvLT5raWxsZWRJdGVtc1tdIGluIGxlYWYgcGFnZSBvcmRlciAqLwotCWZvciAoaW50IGkg PSAwOyBpIDwgbnVtS2lsbGVkOyBpKyspCi0JewotCQlpbnQJCQlpdGVtSW5kZXggPSBzby0+a2ls bGVkSXRlbXNbaV07Ci0JCUJUU2NhblBvc0l0ZW0gKmtpdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1z W2l0ZW1JbmRleF07Ci0JCU9mZnNldE51bWJlciBvZmZudW0gPSBraXRlbS0+aW5kZXhPZmZzZXQ7 Ci0KLQkJQXNzZXJ0KGl0ZW1JbmRleCA+PSBzby0+Y3VyclBvcy5maXJzdEl0ZW0gJiYKLQkJCSAg IGl0ZW1JbmRleCA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7Ci0JCUFzc2VydChpID09IDAgfHwK LQkJCSAgIG9mZm51bSA+PSBzby0+Y3VyclBvcy5pdGVtc1tzby0+a2lsbGVkSXRlbXNbaSAtIDFd XS5pbmRleE9mZnNldCk7Ci0KLQkJaWYgKG9mZm51bSA8IG1pbm9mZikKLQkJCWNvbnRpbnVlOwkJ CS8qIHB1cmUgcGFyYW5vaWEgKi8KLQkJd2hpbGUgKG9mZm51bSA8PSBtYXhvZmYpCi0JCXsKLQkJ CUl0ZW1JZAkJaWlkID0gUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZudW0pOwotCQkJSW5kZXhUdXBs ZQlpdHVwbGUgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgaWlkKTsKLQkJCWJvb2wJ CWtpbGx0dXBsZSA9IGZhbHNlOwotCi0JCQlpZiAoQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwbGUp KQotCQkJewotCQkJCWludAkJCXBpID0gaSArIDE7Ci0JCQkJaW50CQkJbnBvc3RpbmcgPSBCVHJl ZVR1cGxlR2V0TlBvc3RpbmcoaXR1cGxlKTsKLQkJCQlpbnQJCQlqOwotCi0JCQkJLyoKLQkJCQkg KiBOb3RlIHRoYXQgdGhlIHBhZ2UgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBpbiBhbG1vc3QgYW55 IHdheQotCQkJCSAqIHNpbmNlIHdlIGZpcnN0IHJlYWQgaXQgKGluIHRoZSAhc28tPmRyb3BQaW4g Y2FzZSksIHNvIGl0J3MKLQkJCQkgKiBwb3NzaWJsZSB0aGF0IHRoaXMgcG9zdGluZyBsaXN0IHR1 cGxlIHdhc24ndCBhIHBvc3RpbmcgbGlzdAotCQkJCSAqIHR1cGxlIHdoZW4gd2UgZmlyc3QgZW5j b3VudGVyZWQgaXRzIGhlYXAgVElEcy4KLQkJCQkgKi8KLQkJCQlmb3IgKGogPSAwOyBqIDwgbnBv c3Rpbmc7IGorKykKLQkJCQl7Ci0JCQkJCUl0ZW1Qb2ludGVyIGl0ZW0gPSBCVHJlZVR1cGxlR2V0 UG9zdGluZ04oaXR1cGxlLCBqKTsKLQotCQkJCQlpZiAoIUl0ZW1Qb2ludGVyRXF1YWxzKGl0ZW0s ICZraXRlbS0+aGVhcFRpZCkpCi0JCQkJCQlicmVhazsJLyogb3V0IG9mIHBvc3RpbmcgbGlzdCBs b29wICovCi0KLQkJCQkJLyoKLQkJCQkJICoga2l0ZW0gbXVzdCBoYXZlIG1hdGNoaW5nIG9mZm51 bSB3aGVuIGhlYXAgVElEcyBtYXRjaCwKLQkJCQkJICogdGhvdWdoIG9ubHkgaW4gdGhlIGNvbW1v biBjYXNlIHdoZXJlIHRoZSBwYWdlIGNhbid0Ci0JCQkJCSAqIGhhdmUgYmVlbiBjb25jdXJyZW50 bHkgbW9kaWZpZWQKLQkJCQkJICovCi0JCQkJCUFzc2VydChraXRlbS0+aW5kZXhPZmZzZXQgPT0g b2ZmbnVtIHx8ICFzby0+ZHJvcFBpbik7Ci0KLQkJCQkJLyoKLQkJCQkJICogUmVhZC1haGVhZCB0 byBsYXRlciBraXRlbXMgaGVyZS4KLQkJCQkJICoKLQkJCQkJICogV2UgcmVseSBvbiB0aGUgYXNz dW1wdGlvbiB0aGF0IG5vdCBhZHZhbmNpbmcga2l0ZW0gaGVyZQotCQkJCQkgKiB3aWxsIHByZXZl bnQgdXMgZnJvbSBjb25zaWRlcmluZyB0aGUgcG9zdGluZyBsaXN0IHR1cGxlCi0JCQkJCSAqIGZ1 bGx5IGRlYWQgYnkgbm90IG1hdGNoaW5nIGl0cyBuZXh0IGhlYXAgVElEIGluIG5leHQKLQkJCQkJ ICogbG9vcCBpdGVyYXRpb24uCi0JCQkJCSAqCi0JCQkJCSAqIElmLCBvbiB0aGUgb3RoZXIgaGFu ZCwgdGhpcyBpcyB0aGUgZmluYWwgaGVhcCBUSUQgaW4KLQkJCQkJICogdGhlIHBvc3RpbmcgbGlz dCB0dXBsZSwgdGhlbiB0dXBsZSBnZXRzIGtpbGxlZAotCQkJCQkgKiByZWdhcmRsZXNzIChpLmUu IHdlIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgbGFzdAotCQkJCQkgKiBraXRlbSBpcyBhbHNv IHRoZSBsYXN0IGhlYXAgVElEIGluIHRoZSBsYXN0IGluZGV4IHR1cGxlCi0JCQkJCSAqIGNvcnJl Y3RseSAtLSBwb3N0aW5nIHR1cGxlIHN0aWxsIGdldHMga2lsbGVkKS4KLQkJCQkJICovCi0JCQkJ CWlmIChwaSA8IG51bUtpbGxlZCkKLQkJCQkJCWtpdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW3Nv LT5raWxsZWRJdGVtc1twaSsrXV07Ci0JCQkJfQotCi0JCQkJLyoKLQkJCQkgKiBEb24ndCBib3Ro ZXIgYWR2YW5jaW5nIHRoZSBvdXRlcm1vc3QgbG9vcCdzIGludCBpdGVyYXRvciB0bwotCQkJCSAq IGF2b2lkIHByb2Nlc3Npbmcga2lsbGVkIGl0ZW1zIHRoYXQgcmVsYXRlIHRvIHRoZSBzYW1lCi0J CQkJICogb2ZmbnVtL3Bvc3RpbmcgbGlzdCB0dXBsZS4gIFRoaXMgbWljcm8tb3B0aW1pemF0aW9u IGhhcmRseQotCQkJCSAqIHNlZW1zIHdvcnRoIGl0LiAgKEZ1cnRoZXIgaXRlcmF0aW9ucyBvZiB0 aGUgb3V0ZXJtb3N0IGxvb3AKLQkJCQkgKiB3aWxsIGZhaWwgdG8gbWF0Y2ggb24gdGhpcyBzYW1l IHBvc3RpbmcgbGlzdCdzIGZpcnN0IGhlYXAKLQkJCQkgKiBUSUQgaW5zdGVhZCwgc28gd2UnbGwg YWR2YW5jZSB0byB0aGUgbmV4dCBvZmZudW0vaW5kZXgKLQkJCQkgKiB0dXBsZSBwcmV0dHkgcXVp Y2tseS4pCi0JCQkJICovCi0JCQkJaWYgKGogPT0gbnBvc3RpbmcpCi0JCQkJCWtpbGx0dXBsZSA9 IHRydWU7Ci0JCQl9Ci0JCQllbHNlIGlmIChJdGVtUG9pbnRlckVxdWFscygmaXR1cGxlLT50X3Rp ZCwgJmtpdGVtLT5oZWFwVGlkKSkKLQkJCQlraWxsdHVwbGUgPSB0cnVlOwotCi0JCQkvKgotCQkJ ICogTWFyayBpbmRleCBpdGVtIGFzIGRlYWQsIGlmIGl0IGlzbid0IGFscmVhZHkuICBTaW5jZSB0 aGlzCi0JCQkgKiBoYXBwZW5zIHdoaWxlIGhvbGRpbmcgYSBidWZmZXIgbG9jayBwb3NzaWJseSBp biBzaGFyZWQgbW9kZSwKLQkJCSAqIGl0J3MgcG9zc2libGUgdGhhdCBtdWx0aXBsZSBwcm9jZXNz ZXMgYXR0ZW1wdCB0byBkbyB0aGlzCi0JCQkgKiBzaW11bHRhbmVvdXNseSwgbGVhZGluZyB0byBt dWx0aXBsZSBmdWxsLXBhZ2UgaW1hZ2VzIGJlaW5nIHNlbnQKLQkJCSAqIHRvIFdBTCAoaWYgd2Fs X2xvZ19oaW50cyBvciBkYXRhIGNoZWNrc3VtcyBhcmUgZW5hYmxlZCksIHdoaWNoCi0JCQkgKiBp cyB1bmRlc2lyYWJsZS4KLQkJCSAqLwotCQkJaWYgKGtpbGx0dXBsZSAmJiAhSXRlbUlkSXNEZWFk KGlpZCkpCi0JCQl7Ci0JCQkJLyogZm91bmQgdGhlIGl0ZW0vYWxsIHBvc3RpbmcgbGlzdCBpdGVt cyAqLwotCQkJCUl0ZW1JZE1hcmtEZWFkKGlpZCk7Ci0JCQkJa2lsbGVkc29tZXRoaW5nID0gdHJ1 ZTsKLQkJCQlicmVhazsJCQkvKiBvdXQgb2YgaW5uZXIgc2VhcmNoIGxvb3AgKi8KLQkJCX0KLQkJ CW9mZm51bSA9IE9mZnNldE51bWJlck5leHQob2ZmbnVtKTsKLQkJfQotCX0KLQotCS8qCi0JICog U2luY2UgdGhpcyBjYW4gYmUgcmVkb25lIGxhdGVyIGlmIG5lZWRlZCwgbWFyayBhcyBkaXJ0eSBo aW50LgotCSAqCi0JICogV2hlbmV2ZXIgd2UgbWFyayBhbnl0aGluZyBMUF9ERUFELCB3ZSBhbHNv IHNldCB0aGUgcGFnZSdzCi0JICogQlRQX0hBU19HQVJCQUdFIGZsYWcsIHdoaWNoIGlzIGxpa2V3 aXNlIGp1c3QgYSBoaW50LiAgKE5vdGUgdGhhdCB3ZQotCSAqIG9ubHkgcmVseSBvbiB0aGUgcGFn ZS1sZXZlbCBmbGFnIGluICFoZWFwa2V5c3BhY2UgaW5kZXhlcy4pCi0JICovCi0JaWYgKGtpbGxl ZHNvbWV0aGluZykKLQl7Ci0JCW9wYXF1ZS0+YnRwb19mbGFncyB8PSBCVFBfSEFTX0dBUkJBR0U7 Ci0JCU1hcmtCdWZmZXJEaXJ0eUhpbnQoYnVmLCB0cnVlKTsKLQl9Ci0KLQlpZiAoIXNvLT5kcm9w UGluKQotCQlfYnRfdW5sb2NrYnVmKHJlbCwgYnVmKTsKLQllbHNlCi0JCV9idF9yZWxidWYocmVs LCBidWYpOwotfQotCiAKIC8qCiAgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIG1hbmFnZSBhIHNo YXJlZC1tZW1vcnkgYXJlYSBpbiB3aGljaCB3ZSB0cmFjawpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnR4bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25i dHhsb2cuYwppbmRleCBkZmY3ZDI4NmYuLjNiYzVlNWNjZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnR4bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnR4bG9nLmMKQEAgLTEwOTUsMTUgKzEwOTUsMTUgQEAgYnRyZWVfbWFzayhjaGFyICpwYWdl ZGF0YSwgQmxvY2tOdW1iZXIgYmxrbm8pCiAJCS8qCiAJCSAqIEluIGJ0cmVlIGxlYWYgcGFnZXMs IGl0IGlzIHBvc3NpYmxlIHRvIG1vZGlmeSB0aGUgTFBfRkxBR1Mgd2l0aG91dAogCQkgKiBlbWl0 dGluZyBhbnkgV0FMIHJlY29yZC4gSGVuY2UsIG1hc2sgdGhlIGxpbmUgcG9pbnRlciBmbGFncy4g U2VlCi0JCSAqIF9idF9raWxsaXRlbXMoKSwgX2J0X2NoZWNrX3VuaXF1ZSgpIGZvciBkZXRhaWxz LgorCQkgKiBidGtpbGxpdGVtc2JhdGNoKCksIF9idF9jaGVja191bmlxdWUoKSBmb3IgZGV0YWls cy4KIAkJICovCiAJCW1hc2tfbHBfZmxhZ3MocGFnZSk7CiAJfQogCiAJLyoKIAkgKiBCVFBfSEFT X0dBUkJBR0UgaXMganVzdCBhbiB1bi1sb2dnZWQgaGludCBiaXQuIFNvLCBtYXNrIGl0LiBTZWUK LQkgKiBfYnRfZGVsZXRlX29yX2RlZHVwX29uZV9wYWdlKCksIF9idF9raWxsaXRlbXMoKSwgYW5k IF9idF9jaGVja191bmlxdWUoKQotCSAqIGZvciBkZXRhaWxzLgorCSAqIF9idF9kZWxldGVfb3Jf ZGVkdXBfb25lX3BhZ2UoKSwgYnRraWxsaXRlbXNiYXRjaCgpLCBhbmQKKwkgKiBfYnRfY2hlY2tf dW5pcXVlKCkgZm9yIGRldGFpbHMuCiAJICovCiAJbWFza29wYXEtPmJ0cG9fZmxhZ3MgJj0gfkJU UF9IQVNfR0FSQkFHRTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9z cGd1dGlscy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCmluZGV4IDlm NTM3OWI4Ny4uNDRlNDA0NTFiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0 L3NwZ3V0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCkBA IC04OCwxMCArODgsMTEgQEAgc3BnaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1iZWdp bnNjYW4gPSBzcGdiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IHNwZ3Jlc2NhbiwKIAkJLmFtZ2V0 dHVwbGUgPSBzcGdnZXR0dXBsZSwKKwkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAorCQkuYW1raWxsaXRl bXNiYXRjaCA9IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IHNwZ2dldGJpdG1hcCwKIAkJLmFtZW5k c2NhbiA9IHNwZ2VuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9 IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4g PSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNj YW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IDkzOTE4YTIyMy4uNGUwNWJkNzcw IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCkBAIC0xMzUsNyArMTM1LDcgQEAgc3RhdGljIHZvaWQg c2hvd19yZWN1cnNpdmVfdW5pb25faW5mbyhSZWN1cnNpdmVVbmlvblN0YXRlICpyc3RhdGUsCiBz dGF0aWMgdm9pZCBzaG93X21lbW9pemVfaW5mbyhNZW1vaXplU3RhdGUgKm1zdGF0ZSwgTGlzdCAq YW5jZXN0b3JzLAogCQkJCQkJCSAgRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBzaG93 X2hhc2hhZ2dfaW5mbyhBZ2dTdGF0ZSAqYWdnc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpOwotc3Rh dGljIHZvaWQgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUsIEV4 cGxhaW5TdGF0ZSAqZXMpOworc3RhdGljIHZvaWQgc2hvd19pbmRleHNjYW5faW5mbyhQbGFuU3Rh dGUgKnBsYW5zdGF0ZSwgRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBzaG93X3RpZGJp dG1hcF9pbmZvKEJpdG1hcEhlYXBTY2FuU3RhdGUgKnBsYW5zdGF0ZSwKIAkJCQkJCQkJRXhwbGFp blN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBzaG93X2luc3RydW1lbnRhdGlvbl9jb3VudChjb25z dCBjaGFyICpxbGFiZWwsIGludCB3aGljaCwKQEAgLTE5NzIsNyArMTk3Miw3IEBAIEV4cGxhaW5O b2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQlpZiAocGxhbi0+ cXVhbCkKIAkJCQlzaG93X2luc3RydW1lbnRhdGlvbl9jb3VudCgiUm93cyBSZW1vdmVkIGJ5IEZp bHRlciIsIDEsCiAJCQkJCQkJCQkJICAgcGxhbnN0YXRlLCBlcyk7Ci0JCQlzaG93X2luZGV4c2Vh cmNoZXNfaW5mbyhwbGFuc3RhdGUsIGVzKTsKKwkJCXNob3dfaW5kZXhzY2FuX2luZm8ocGxhbnN0 YXRlLCBlcyk7CiAJCQlicmVhazsKIAkJY2FzZSBUX0luZGV4T25seVNjYW46CiAJCQlzaG93X3Nj YW5fcXVhbCgoKEluZGV4T25seVNjYW4gKikgcGxhbiktPmluZGV4cXVhbCwKQEAgLTE5ODYsMTUg KzE5ODYsMTIgQEAgRXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2Vz dG9ycywKIAkJCWlmIChwbGFuLT5xdWFsKQogCQkJCXNob3dfaW5zdHJ1bWVudGF0aW9uX2NvdW50 KCJSb3dzIFJlbW92ZWQgYnkgRmlsdGVyIiwgMSwKIAkJCQkJCQkJCQkgICBwbGFuc3RhdGUsIGVz KTsKLQkJCWlmIChlcy0+YW5hbHl6ZSkKLQkJCQlFeHBsYWluUHJvcGVydHlGbG9hdCgiSGVhcCBG ZXRjaGVzIiwgTlVMTCwKLQkJCQkJCQkJCSBwbGFuc3RhdGUtPmluc3RydW1lbnQtPm50dXBsZXMy LCAwLCBlcyk7Ci0JCQlzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhwbGFuc3RhdGUsIGVzKTsKKwkJ CXNob3dfaW5kZXhzY2FuX2luZm8ocGxhbnN0YXRlLCBlcyk7CiAJCQlicmVhazsKIAkJY2FzZSBU X0JpdG1hcEluZGV4U2NhbjoKIAkJCXNob3dfc2Nhbl9xdWFsKCgoQml0bWFwSW5kZXhTY2FuICop IHBsYW4pLT5pbmRleHF1YWxvcmlnLAogCQkJCQkJICAgIkluZGV4IENvbmQiLCBwbGFuc3RhdGUs IGFuY2VzdG9ycywgZXMpOwotCQkJc2hvd19pbmRleHNlYXJjaGVzX2luZm8ocGxhbnN0YXRlLCBl cyk7CisJCQlzaG93X2luZGV4c2Nhbl9pbmZvKHBsYW5zdGF0ZSwgZXMpOwogCQkJYnJlYWs7CiAJ CWNhc2UgVF9CaXRtYXBIZWFwU2NhbjoKIAkJCXNob3dfc2Nhbl9xdWFsKCgoQml0bWFwSGVhcFNj YW4gKikgcGxhbiktPmJpdG1hcHF1YWxvcmlnLApAQCAtMzg1OCwxNSArMzg1NSwxNiBAQCBzaG93 X2hhc2hhZ2dfaW5mbyhBZ2dTdGF0ZSAqYWdnc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiB9CiAK IC8qCi0gKiBTaG93IHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kZXggc2VhcmNoZXMgZm9yIGEKKyAq IFNob3cgaW5kZXggc2NhbiByZWxhdGVkIGV4ZWN1dG9yIGluc3RydW1lbnRhdGlvbiBmb3IgYQog ICogSW5kZXhTY2FuL0luZGV4T25seVNjYW4vQml0bWFwSW5kZXhTY2FuIG5vZGUKICAqLwogc3Rh dGljIHZvaWQKLXNob3dfaW5kZXhzZWFyY2hlc19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBF eHBsYWluU3RhdGUgKmVzKQorc2hvd19pbmRleHNjYW5faW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0 ZSwgRXhwbGFpblN0YXRlICplcykKIHsKIAlQbGFuCSAgICpwbGFuID0gcGxhbnN0YXRlLT5wbGFu OwogCVNoYXJlZEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqU2hhcmVkSW5mbyA9IE5VTEw7Ci0J dWludDY0CQluc2VhcmNoZXMgPSAwOworCXVpbnQ2NAkJbnNlYXJjaGVzID0gMCwKKwkJCQluaGVh cGZldGNoZXMgPSAwOwogCiAJaWYgKCFlcy0+YW5hbHl6ZSkKIAkJcmV0dXJuOwpAQCAtMzg3OCw3 ICszODc2LDcgQEAgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUs IEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQl7CiAJCQkJSW5kZXhTY2FuU3RhdGUgKmluZGV4c3RhdGUg PSAoKEluZGV4U2NhblN0YXRlICopIHBsYW5zdGF0ZSk7CiAKLQkJCQluc2VhcmNoZXMgPSBpbmRl eHN0YXRlLT5pc3NfSW5zdHJ1bWVudC5uc2VhcmNoZXM7CisJCQkJbnNlYXJjaGVzID0gaW5kZXhz dGF0ZS0+aXNzX0luc3RydW1lbnQtPm5zZWFyY2hlczsKIAkJCQlTaGFyZWRJbmZvID0gaW5kZXhz dGF0ZS0+aXNzX1NoYXJlZEluZm87CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0zODg2LDcgKzM4ODQs OCBAQCBzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhwbGFp blN0YXRlICplcykKIAkJCXsKIAkJCQlJbmRleE9ubHlTY2FuU3RhdGUgKmluZGV4c3RhdGUgPSAo KEluZGV4T25seVNjYW5TdGF0ZSAqKSBwbGFuc3RhdGUpOwogCi0JCQkJbnNlYXJjaGVzID0gaW5k ZXhzdGF0ZS0+aW9zc19JbnN0cnVtZW50Lm5zZWFyY2hlczsKKwkJCQluc2VhcmNoZXMgPSBpbmRl eHN0YXRlLT5pb3NzX0luc3RydW1lbnQtPm5zZWFyY2hlczsKKwkJCQluaGVhcGZldGNoZXMgPSBp bmRleHN0YXRlLT5pb3NzX0luc3RydW1lbnQtPm5oZWFwZmV0Y2hlczsKIAkJCQlTaGFyZWRJbmZv ID0gaW5kZXhzdGF0ZS0+aW9zc19TaGFyZWRJbmZvOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMzg5 NCw3ICszODkzLDcgQEAgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3Rh dGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQl7CiAJCQkJQml0bWFwSW5kZXhTY2FuU3RhdGUgKmlu ZGV4c3RhdGUgPSAoKEJpdG1hcEluZGV4U2NhblN0YXRlICopIHBsYW5zdGF0ZSk7CiAKLQkJCQlu c2VhcmNoZXMgPSBpbmRleHN0YXRlLT5iaXNzX0luc3RydW1lbnQubnNlYXJjaGVzOworCQkJCW5z ZWFyY2hlcyA9IGluZGV4c3RhdGUtPmJpc3NfSW5zdHJ1bWVudC0+bnNlYXJjaGVzOwogCQkJCVNo YXJlZEluZm8gPSBpbmRleHN0YXRlLT5iaXNzX1NoYXJlZEluZm87CiAJCQkJYnJlYWs7CiAJCQl9 CkBAIC0zOTEwLDkgKzM5MDksMTMgQEAgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRl ICpwbGFuc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQlJbmRleFNjYW5JbnN0cnVtZW50YXRp b24gKndpbnN0cnVtZW50ID0gJlNoYXJlZEluZm8tPndpbnN0cnVtZW50W2ldOwogCiAJCQluc2Vh cmNoZXMgKz0gd2luc3RydW1lbnQtPm5zZWFyY2hlczsKKwkJCW5oZWFwZmV0Y2hlcyArPSB3aW5z dHJ1bWVudC0+bmhlYXBmZXRjaGVzOwogCQl9CiAJfQogCisJaWYgKG5vZGVUYWcocGxhbikgPT0g VF9JbmRleE9ubHlTY2FuKQorCQlFeHBsYWluUHJvcGVydHlVSW50ZWdlcigiSGVhcCBGZXRjaGVz IiwgTlVMTCwgbmhlYXBmZXRjaGVzLCBlcyk7CisKIAlFeHBsYWluUHJvcGVydHlVSW50ZWdlcigi SW5kZXggU2VhcmNoZXMiLCBOVUxMLCBuc2VhcmNoZXMsIGVzKTsKIH0KIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9p bmRleGNtZHMuYwppbmRleCA2MzU2NzljYzEuLjU0YzI0MDNkYSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5k ZXhjbWRzLmMKQEAgLTg4NCw3ICs4ODQsNyBAQCBEZWZpbmVJbmRleChQYXJzZVN0YXRlICpwc3Rh dGUsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCSBl cnJtc2coImFjY2VzcyBtZXRob2QgXCIlc1wiIGRvZXMgbm90IHN1cHBvcnQgbXVsdGljb2x1bW4g aW5kZXhlcyIsCiAJCQkJCQlhY2Nlc3NNZXRob2ROYW1lKSkpOwotCWlmIChleGNsdXNpb24gJiYg YW1Sb3V0aW5lLT5hbWdldHR1cGxlID09IE5VTEwpCisJaWYgKGV4Y2x1c2lvbiAmJiBhbVJvdXRp bmUtPmFtZ2V0dHVwbGUgPT0gTlVMTCAmJiBhbVJvdXRpbmUtPmFtZ2V0YmF0Y2ggPT0gTlVMTCkK IAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBP UlRFRCksCiAJCQkJIGVycm1zZygiYWNjZXNzIG1ldGhvZCBcIiVzXCIgZG9lcyBub3Qgc3VwcG9y dCBleGNsdXNpb24gY29uc3RyYWludHMiLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY0FtaS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCmluZGV4IDkwYTY4 YzBkMS4uMGRmYjAxMzM3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1p LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCkBAIC00MjgsNyArNDI4LDcg QEAgRXhlY1N1cHBvcnRzTWFya1Jlc3RvcmUoUGF0aCAqcGF0aG5vZGUpCiAJCWNhc2UgVF9JbmRl eE9ubHlTY2FuOgogCiAJCQkvKgotCQkJICogTm90IGFsbCBpbmRleCB0eXBlcyBzdXBwb3J0IG1h cmsvcmVzdG9yZS4KKwkJCSAqIE5vdCBhbGwgaW5kZXggdHlwZXMgc3VwcG9ydCByZXN0b3Jpbmcg YSBtYXJrCiAJCQkgKi8KIAkJCXJldHVybiBjYXN0Tm9kZShJbmRleFBhdGgsIHBhdGhub2RlKS0+ aW5kZXhpbmZvLT5hbWNhbm1hcmtwb3M7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNJbmRleGluZy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMK aW5kZXggOWQwNzFlNDk1Li4zZjBjODQ1M2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNJbmRleGluZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGlu Zy5jCkBAIC04MTUsMTAgKzgxNSwxMiBAQCBjaGVja19leGNsdXNpb25fb3JfdW5pcXVlX2NvbnN0 cmFpbnQoUmVsYXRpb24gaGVhcCwgUmVsYXRpb24gaW5kZXgsCiByZXRyeToKIAljb25mbGljdCA9 IGZhbHNlOwogCWZvdW5kX3NlbGYgPSBmYWxzZTsKLQlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5z Y2FuKGhlYXAsIGluZGV4LCAmRGlydHlTbmFwc2hvdCwgTlVMTCwgaW5kbmtleWF0dHMsIDApOwor CWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcCwgaW5kZXgsIGZhbHNlLCAmRGlydHlT bmFwc2hvdCwgTlVMTCwKKwkJCQkJCQkJIGluZG5rZXlhdHRzLCAwKTsKIAlpbmRleF9yZXNjYW4o aW5kZXhfc2Nhbiwgc2NhbmtleXMsIGluZG5rZXlhdHRzLCBOVUxMLCAwKTsKIAotCXdoaWxlIChp bmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhfc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIGV4aXN0 aW5nX3Nsb3QpKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhfc2Nhbiwg Rm9yd2FyZFNjYW5EaXJlY3Rpb24sCisJCQkJCQkJCQlleGlzdGluZ19zbG90KSkKIAl7CiAJCVRy YW5zYWN0aW9uSWQgeHdhaXQ7CiAJCVhMVFdfT3BlcglyZWFzb25fd2FpdDsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKaW5kZXggMjQ5N2VlN2VkLi4yZjYzNmJhM2UgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCisrKyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCkBAIC0yMDUsNyArMjA1LDcgQEAgUmVs YXRpb25GaW5kUmVwbFR1cGxlQnlJbmRleChSZWxhdGlvbiByZWwsIE9pZCBpZHhvaWQsCiAJc2tl eV9hdHRvZmYgPSBidWlsZF9yZXBsaW5kZXhfc2Nhbl9rZXkoc2tleSwgcmVsLCBpZHhyZWwsIHNl YXJjaHNsb3QpOwogCiAJLyogU3RhcnQgYW4gaW5kZXggc2Nhbi4gKi8KLQlzY2FuID0gaW5kZXhf YmVnaW5zY2FuKHJlbCwgaWR4cmVsLCAmc25hcCwgTlVMTCwgc2tleV9hdHRvZmYsIDApOworCXNj YW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWwsIGZhbHNlLCAmc25hcCwgTlVMTCwgc2tl eV9hdHRvZmYsIDApOwogCiByZXRyeToKIAlmb3VuZCA9IGZhbHNlOwpAQCAtMjEzLDcgKzIxMyw3 IEBAIHJldHJ5OgogCWluZGV4X3Jlc2NhbihzY2FuLCBza2V5LCBza2V5X2F0dG9mZiwgTlVMTCwg MCk7CiAKIAkvKiBUcnkgdG8gZmluZCB0aGUgdHVwbGUgKi8KLQl3aGlsZSAoaW5kZXhfZ2V0bmV4 dF9zbG90KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBvdXRzbG90KSkKKwl3aGlsZSAodGFi bGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBvdXRzbG90 KSkKIAl7CiAJCS8qCiAJCSAqIEF2b2lkIGV4cGVuc2l2ZSBlcXVhbGl0eSBjaGVjayBpZiB0aGUg aW5kZXggaXMgcHJpbWFyeSBrZXkgb3IKQEAgLTY2NiwxMiArNjY2LDEyIEBAIFJlbGF0aW9uRmlu ZERlbGV0ZWRUdXBsZUluZm9CeUluZGV4KFJlbGF0aW9uIHJlbCwgT2lkIGlkeG9pZCwKIAkgKiBu b3QgeWV0IGNvbW1pdHRlZCBvciB0aG9zZSBqdXN0IGNvbW1pdHRlZCBwcmlvciB0byB0aGUgc2Nh biBhcmUKIAkgKiBleGNsdWRlZCBpbiB1cGRhdGVfbW9zdF9yZWNlbnRfZGVsZXRpb25faW5mbygp LgogCSAqLwotCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWwsIFNuYXBzaG90QW55 LCBOVUxMLCBza2V5X2F0dG9mZiwgMCk7CisJc2NhbiA9IGluZGV4X2JlZ2luc2NhbihyZWwsIGlk eHJlbCwgZmFsc2UsIFNuYXBzaG90QW55LCBOVUxMLCBza2V5X2F0dG9mZiwgMCk7CiAKIAlpbmRl eF9yZXNjYW4oc2Nhbiwgc2tleSwgc2tleV9hdHRvZmYsIE5VTEwsIDApOwogCiAJLyogVHJ5IHRv IGZpbmQgdGhlIHR1cGxlICovCi0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChzY2FuLCBGb3J3 YXJkU2NhbkRpcmVjdGlvbiwgc2NhbnNsb3QpKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0 X3Nsb3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNjYW5zbG90KSkKIAl7CiAJCS8qCiAJ CSAqIEF2b2lkIGV4cGVuc2l2ZSBlcXVhbGl0eSBjaGVjayBpZiB0aGUgaW5kZXggaXMgcHJpbWFy eSBrZXkgb3IKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRl eHNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNjYW4uYwppbmRl eCAwNThhNTllZjUuLmE4OTc3Y2NhYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZUJpdG1hcEluZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRt YXBJbmRleHNjYW4uYwpAQCAtMjAxLDcgKzIwMSw4IEBAIEV4ZWNFbmRCaXRtYXBJbmRleFNjYW4o Qml0bWFwSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIHNodXRkb3duIG9uIHRoZSB3b3JrZXJz LiAgT24gcmVzY2FuIGl0IHdpbGwgc3BpbiB1cCBuZXcgd29ya2VycwogCQkgKiB3aGljaCB3aWxs IGhhdmUgYSBuZXcgQml0bWFwSW5kZXhTY2FuU3RhdGUgYW5kIHplcm9lZCBzdGF0cy4KIAkJICov Ci0JCXdpbnN0cnVtZW50LT5uc2VhcmNoZXMgKz0gbm9kZS0+Ymlzc19JbnN0cnVtZW50Lm5zZWFy Y2hlczsKKwkJd2luc3RydW1lbnQtPm5zZWFyY2hlcyArPSBub2RlLT5iaXNzX0luc3RydW1lbnQt Pm5zZWFyY2hlczsKKwkJQXNzZXJ0KG5vZGUtPmJpc3NfSW5zdHJ1bWVudC0+bmhlYXBmZXRjaGVz ID09IDApOwogCX0KIAogCS8qCkBAIC0yNzIsNiArMjczLDEwIEBAIEV4ZWNJbml0Qml0bWFwSW5k ZXhTY2FuKEJpdG1hcEluZGV4U2NhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3Mp CiAJaWYgKGVmbGFncyAmIEVYRUNfRkxBR19FWFBMQUlOX09OTFkpCiAJCXJldHVybiBpbmRleHN0 YXRlOwogCisJLyogU2V0IHVwIGluc3RydW1lbnRhdGlvbiBvZiBiaXRtYXAgaW5kZXggc2NhbnMg aWYgcmVxdWVzdGVkICovCisJaWYgKGVzdGF0ZS0+ZXNfaW5zdHJ1bWVudCkKKwkJaW5kZXhzdGF0 ZS0+Ymlzc19JbnN0cnVtZW50ID0gcGFsbG9jMF9vYmplY3QoSW5kZXhTY2FuSW5zdHJ1bWVudGF0 aW9uKTsKKwogCS8qIE9wZW4gdGhlIGluZGV4IHJlbGF0aW9uLiAqLwogCWxvY2ttb2RlID0gZXhl Y19ydF9mZXRjaChub2RlLT5zY2FuLnNjYW5yZWxpZCwgZXN0YXRlKS0+cmVsbG9ja21vZGU7CiAJ aW5kZXhzdGF0ZS0+Ymlzc19SZWxhdGlvbkRlc2MgPSBpbmRleF9vcGVuKG5vZGUtPmluZGV4aWQs IGxvY2ttb2RlKTsKQEAgLTMyMyw3ICszMjgsNyBAQCBFeGVjSW5pdEJpdG1hcEluZGV4U2NhbihC aXRtYXBJbmRleFNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCWluZGV4 c3RhdGUtPmJpc3NfU2NhbkRlc2MgPQogCQlpbmRleF9iZWdpbnNjYW5fYml0bWFwKGluZGV4c3Rh dGUtPmJpc3NfUmVsYXRpb25EZXNjLAogCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfc25hcHNob3QsCi0J CQkJCQkJICAgJmluZGV4c3RhdGUtPmJpc3NfSW5zdHJ1bWVudCwKKwkJCQkJCQkgICBpbmRleHN0 YXRlLT5iaXNzX0luc3RydW1lbnQsCiAJCQkJCQkJICAgaW5kZXhzdGF0ZS0+Ymlzc19OdW1TY2Fu S2V5cyk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4 b25seXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKaW5k ZXggYzJkMDkzNzQ1Li44NGJmZjYwY2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVJbmRleG9ubHlzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4 b25seXNjYW4uYwpAQCAtMzQsMTQgKzM0LDEyIEBACiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4u aCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy90dXBkZXNj LmgiCi0jaW5jbHVkZSAiYWNjZXNzL3Zpc2liaWxpdHltYXAuaCIKICNpbmNsdWRlICJjYXRhbG9n L3BnX3R5cGUuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgImV4 ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUluZGV4 c2Nhbi5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdy LmgiCi0jaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9idWls dGlucy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCkBAIC02NSw3ICs2Myw2IEBAIEluZGV4 T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCVNjYW5EaXJlY3Rpb24gZGlyZWN0 aW9uOwogCUluZGV4U2NhbkRlc2Mgc2NhbmRlc2M7CiAJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7Ci0J SXRlbVBvaW50ZXIgdGlkOwogCiAJLyoKIAkgKiBleHRyYWN0IG5lY2Vzc2FyeSBpbmZvcm1hdGlv biBmcm9tIGluZGV4IHNjYW4gbm9kZQpAQCAtOTAsMTggKzg3LDE0IEBAIEluZGV4T25seU5leHQo SW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkgKiBwYXJhbGxlbC4KIAkJICovCiAJCXNjYW5k ZXNjID0gaW5kZXhfYmVnaW5zY2FuKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJ CQkJICAgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSAgIG5vZGUtPmlvc3NfUmVs YXRpb25EZXNjLCB0cnVlLAogCQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAotCQkJCQkJ CQkgICAmbm9kZS0+aW9zc19JbnN0cnVtZW50LAorCQkJCQkJCQkgICBub2RlLT5pb3NzX0luc3Ry dW1lbnQsCiAJCQkJCQkJCSAgIG5vZGUtPmlvc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSAgIG5v ZGUtPmlvc3NfTnVtT3JkZXJCeUtleXMpOwogCiAJCW5vZGUtPmlvc3NfU2NhbkRlc2MgPSBzY2Fu ZGVzYzsKLQotCi0JCS8qIFNldCBpdCB1cCBmb3IgaW5kZXgtb25seSBzY2FuICovCi0JCW5vZGUt Pmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCA9IHRydWU7Ci0JCW5vZGUtPmlvc3NfVk1CdWZm ZXIgPSBJbnZhbGlkQnVmZmVyOworCQlBc3NlcnQobm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2Fu dF9pdHVwKTsKIAogCQkvKgogCQkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBv ciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5kCkBAIC0xMTgsNzggKzExMSwxMCBAQCBJbmRl eE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkvKgogCSAqIE9LLCBub3cgdGhh dCB3ZSBoYXZlIHdoYXQgd2UgbmVlZCwgZmV0Y2ggdGhlIG5leHQgdHVwbGUuCiAJICovCi0Jd2hp bGUgKCh0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChzY2FuZGVzYywgZGlyZWN0aW9uKSkgIT0gTlVM TCkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBkaXJlY3Rpb24s IG5vZGUtPmlvc3NfVGFibGVTbG90KSkKIAl7Ci0JCWJvb2wJCXR1cGxlX2Zyb21faGVhcCA9IGZh bHNlOwotCiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKLQkJLyoKLQkJICogV2UgY2FuIHNr aXAgdGhlIGhlYXAgZmV0Y2ggaWYgdGhlIFRJRCByZWZlcmVuY2VzIGEgaGVhcCBwYWdlIG9uCi0J CSAqIHdoaWNoIGFsbCB0dXBsZXMgYXJlIGtub3duIHZpc2libGUgdG8gZXZlcnlib2R5LiAgSW4g YW55IGNhc2UsCi0JCSAqIHdlJ2xsIHVzZSB0aGUgaW5kZXggdHVwbGUgbm90IHRoZSBoZWFwIHR1 cGxlIGFzIHRoZSBkYXRhIHNvdXJjZS4KLQkJICoKLQkJICogTm90ZSBvbiBNZW1vcnkgT3JkZXJp bmcgRWZmZWN0czogdmlzaWJpbGl0eW1hcF9nZXRfc3RhdHVzIGRvZXMgbm90Ci0JCSAqIGxvY2sg dGhlIHZpc2liaWxpdHkgbWFwIGJ1ZmZlciwgYW5kIHRoZXJlZm9yZSB0aGUgcmVzdWx0IHdlIHJl YWQKLQkJICogaGVyZSBjb3VsZCBiZSBzbGlnaHRseSBzdGFsZS4gIEhvd2V2ZXIsIGl0IGNhbid0 IGJlIHN0YWxlIGVub3VnaCB0bwotCQkgKiBtYXR0ZXIuCi0JCSAqCi0JCSAqIFdlIG5lZWQgdG8g ZGV0ZWN0IGNsZWFyaW5nIGEgVk0gYml0IGR1ZSB0byBhbiBpbnNlcnQgcmlnaHQgYXdheSwKLQkJ ICogYmVjYXVzZSB0aGUgdHVwbGUgaXMgcHJlc2VudCBpbiB0aGUgaW5kZXggcGFnZSBidXQgbm90 IHZpc2libGUuIFRoZQotCQkgKiByZWFkaW5nIG9mIHRoZSBUSUQgYnkgdGhpcyBzY2FuICh1c2lu ZyBhIHNoYXJlZCBsb2NrIG9uIHRoZSBpbmRleAotCQkgKiBidWZmZXIpIGlzIHNlcmlhbGl6ZWQg d2l0aCB0aGUgaW5zZXJ0IG9mIHRoZSBUSUQgaW50byB0aGUgaW5kZXgKLQkJICogKHVzaW5nIGFu IGV4Y2x1c2l2ZSBsb2NrIG9uIHRoZSBpbmRleCBidWZmZXIpLiBCZWNhdXNlIHRoZSBWTSBiaXQK LQkJICogaXMgY2xlYXJlZCBiZWZvcmUgdXBkYXRpbmcgdGhlIGluZGV4LCBhbmQgbG9ja2luZy91 bmxvY2tpbmcgb2YgdGhlCi0JCSAqIGluZGV4IHBhZ2UgYWN0cyBhcyBhIGZ1bGwgbWVtb3J5IGJh cnJpZXIsIHdlIGFyZSBzdXJlIHRvIHNlZSB0aGUKLQkJICogY2xlYXJlZCBiaXQgaWYgd2Ugc2Vl IGEgcmVjZW50bHktaW5zZXJ0ZWQgVElELgotCQkgKgotCQkgKiBEZWxldGVzIGRvIG5vdCB1cGRh dGUgdGhlIGluZGV4IHBhZ2UgKG9ubHkgVkFDVVVNIHdpbGwgY2xlYXIgb3V0Ci0JCSAqIHRoZSBU SUQpLCBzbyB0aGUgY2xlYXJpbmcgb2YgdGhlIFZNIGJpdCBieSBhIGRlbGV0ZSBpcyBub3QKLQkJ ICogc2VyaWFsaXplZCB3aXRoIHRoaXMgdGVzdCBiZWxvdywgYW5kIHdlIG1heSBzZWUgYSB2YWx1 ZSB0aGF0IGlzCi0JCSAqIHNpZ25pZmljYW50bHkgc3RhbGUuIEhvd2V2ZXIsIHdlIGRvbid0IGNh cmUgYWJvdXQgdGhlIGRlbGV0ZSByaWdodAotCQkgKiBhd2F5LCBiZWNhdXNlIHRoZSB0dXBsZSBp cyBzdGlsbCB2aXNpYmxlIHVudGlsIHRoZSBkZWxldGluZwotCQkgKiB0cmFuc2FjdGlvbiBjb21t aXRzIG9yIHRoZSBzdGF0ZW1lbnQgZW5kcyAoaWYgaXQncyBvdXIKLQkJICogdHJhbnNhY3Rpb24p LiBJbiBlaXRoZXIgY2FzZSwgdGhlIGxvY2sgb24gdGhlIFZNIGJ1ZmZlciB3aWxsIGhhdmUKLQkJ ICogYmVlbiByZWxlYXNlZCAoYWN0aW5nIGFzIGEgd3JpdGUgYmFycmllcikgYWZ0ZXIgY2xlYXJp bmcgdGhlIGJpdC4KLQkJICogQW5kIGZvciB1cyB0byBoYXZlIGEgc25hcHNob3QgdGhhdCBpbmNs dWRlcyB0aGUgZGVsZXRpbmcKLQkJICogdHJhbnNhY3Rpb24gKG1ha2luZyB0aGUgdHVwbGUgaW52 aXNpYmxlKSwgd2UgbXVzdCBoYXZlIGFjcXVpcmVkCi0JCSAqIFByb2NBcnJheUxvY2sgYWZ0ZXIg dGhhdCB0aW1lLCBhY3RpbmcgYXMgYSByZWFkIGJhcnJpZXIuCi0JCSAqCi0JCSAqIEl0J3Mgd29y dGggZ29pbmcgdGhyb3VnaCB0aGlzIGNvbXBsZXhpdHkgdG8gYXZvaWQgbmVlZGluZyB0byBsb2Nr Ci0JCSAqIHRoZSBWTSBidWZmZXIsIHdoaWNoIGNvdWxkIGNhdXNlIHNpZ25pZmljYW50IGNvbnRl bnRpb24uCi0JCSAqLwotCQlpZiAoIVZNX0FMTF9WSVNJQkxFKHNjYW5kZXNjLT5oZWFwUmVsYXRp b24sCi0JCQkJCQkJSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpLAotCQkJCQkJCSZub2Rl LT5pb3NzX1ZNQnVmZmVyKSkKLQkJewotCQkJLyoKLQkJCSAqIFJhdHMsIHdlIGhhdmUgdG8gdmlz aXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlzaWJpbGl0eS4KLQkJCSAqLwotCQkJSW5zdHJDb3VudFR1 cGxlczIobm9kZSwgMSk7Ci0JCQlpZiAoIWluZGV4X2ZldGNoX2hlYXAoc2NhbmRlc2MsIG5vZGUt Pmlvc3NfVGFibGVTbG90KSkKLQkJCQljb250aW51ZTsJCS8qIG5vIHZpc2libGUgdHVwbGUsIHRy eSBuZXh0IGluZGV4IGVudHJ5ICovCi0KLQkJCUV4ZWNDbGVhclR1cGxlKG5vZGUtPmlvc3NfVGFi bGVTbG90KTsKLQotCQkJLyoKLQkJCSAqIE9ubHkgTVZDQyBzbmFwc2hvdHMgYXJlIHN1cHBvcnRl ZCBoZXJlLCBzbyB0aGVyZSBzaG91bGQgYmUgbm8KLQkJCSAqIG5lZWQgdG8ga2VlcCBmb2xsb3dp bmcgdGhlIEhPVCBjaGFpbiBvbmNlIGEgdmlzaWJsZSBlbnRyeSBoYXMKLQkJCSAqIGJlZW4gZm91 bmQuICBJZiB3ZSBkaWQgd2FudCB0byBhbGxvdyB0aGF0LCB3ZSdkIG5lZWQgdG8ga2VlcAotCQkJ ICogbW9yZSBzdGF0ZSB0byByZW1lbWJlciBub3QgdG8gY2FsbCBpbmRleF9nZXRuZXh0X3RpZCBu ZXh0IHRpbWUuCi0JCQkgKi8KLQkJCWlmIChzY2FuZGVzYy0+eHNfaGVhcF9jb250aW51ZSkKLQkJ CQllbG9nKEVSUk9SLCAibm9uLU1WQ0Mgc25hcHNob3RzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGlu ZGV4LW9ubHkgc2NhbnMiKTsKLQotCQkJLyoKLQkJCSAqIE5vdGU6IGF0IHRoaXMgcG9pbnQgd2Ug YXJlIGhvbGRpbmcgYSBwaW4gb24gdGhlIGhlYXAgcGFnZSwgYXMKLQkJCSAqIHJlY29yZGVkIGlu IHNjYW5kZXNjLT54c19jYnVmLiAgV2UgY291bGQgcmVsZWFzZSB0aGF0IHBpbiBub3csCi0JCQkg KiBidXQgaXQncyBub3QgY2xlYXIgd2hldGhlciBpdCdzIGEgd2luIHRvIGRvIHNvLiAgVGhlIG5l eHQgaW5kZXgKLQkJCSAqIGVudHJ5IG1pZ2h0IHJlcXVpcmUgYSB2aXNpdCB0byB0aGUgc2FtZSBo ZWFwIHBhZ2UuCi0JCQkgKi8KLQotCQkJdHVwbGVfZnJvbV9oZWFwID0gdHJ1ZTsKLQkJfQotCiAJ CS8qCiAJCSAqIEZpbGwgdGhlIHNjYW4gdHVwbGUgc2xvdCB3aXRoIGRhdGEgZnJvbSB0aGUgaW5k ZXguICBUaGlzIG1pZ2h0IGJlCiAJCSAqIHByb3ZpZGVkIGluIGVpdGhlciBIZWFwVHVwbGUgb3Ig SW5kZXhUdXBsZSBmb3JtYXQuICBDb25jZWl2YWJseSBhbgpAQCAtMjM4LDE2ICsxNjMsNiBAQCBJ bmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkJCWVyZXBvcnQoRVJST1Is CiAJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkJIGVy cm1zZygibG9zc3kgZGlzdGFuY2UgZnVuY3Rpb25zIGFyZSBub3Qgc3VwcG9ydGVkIGluIGluZGV4 LW9ubHkgc2NhbnMiKSkpOwotCi0JCS8qCi0JCSAqIElmIHdlIGRpZG4ndCBhY2Nlc3MgdGhlIGhl YXAsIHRoZW4gd2UnbGwgbmVlZCB0byB0YWtlIGEgcHJlZGljYXRlCi0JCSAqIGxvY2sgZXhwbGlj aXRseSwgYXMgaWYgd2UgaGFkLiAgRm9yIG5vdyB3ZSBkbyB0aGF0IGF0IHBhZ2UgbGV2ZWwuCi0J CSAqLwotCQlpZiAoIXR1cGxlX2Zyb21faGVhcCkKLQkJCVByZWRpY2F0ZUxvY2tQYWdlKHNjYW5k ZXNjLT5oZWFwUmVsYXRpb24sCi0JCQkJCQkJICBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRp ZCksCi0JCQkJCQkJICBlc3RhdGUtPmVzX3NuYXBzaG90KTsKLQogCQlyZXR1cm4gc2xvdDsKIAl9 CiAKQEAgLTQwNywxMyArMzIyLDYgQEAgRXhlY0VuZEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2Nh blN0YXRlICpub2RlKQogCWluZGV4UmVsYXRpb25EZXNjID0gbm9kZS0+aW9zc19SZWxhdGlvbkRl c2M7CiAJaW5kZXhTY2FuRGVzYyA9IG5vZGUtPmlvc3NfU2NhbkRlc2M7CiAKLQkvKiBSZWxlYXNl IFZNIGJ1ZmZlciBwaW4sIGlmIGFueS4gKi8KLQlpZiAobm9kZS0+aW9zc19WTUJ1ZmZlciAhPSBJ bnZhbGlkQnVmZmVyKQotCXsKLQkJUmVsZWFzZUJ1ZmZlcihub2RlLT5pb3NzX1ZNQnVmZmVyKTsK LQkJbm9kZS0+aW9zc19WTUJ1ZmZlciA9IEludmFsaWRCdWZmZXI7Ci0JfQotCiAJLyoKIAkgKiBX aGVuIGVuZGluZyBhIHBhcmFsbGVsIHdvcmtlciwgY29weSB0aGUgc3RhdGlzdGljcyBnYXRoZXJl ZCBieSB0aGUKIAkgKiB3b3JrZXIgYmFjayBpbnRvIHNoYXJlZCBtZW1vcnkgc28gdGhhdCBpdCBj YW4gYmUgcGlja2VkIHVwIGJ5IHRoZSBtYWluCkBAIC00MzIsNyArMzQwLDggQEAgRXhlY0VuZElu ZGV4T25seVNjYW4oSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkgKiBzaHV0ZG93biBvbiB0 aGUgd29ya2Vycy4gIE9uIHJlc2NhbiBpdCB3aWxsIHNwaW4gdXAgbmV3IHdvcmtlcnMKIAkJICog d2hpY2ggd2lsbCBoYXZlIGEgbmV3IEluZGV4T25seVNjYW5TdGF0ZSBhbmQgemVyb2VkIHN0YXRz LgogCQkgKi8KLQkJd2luc3RydW1lbnQtPm5zZWFyY2hlcyArPSBub2RlLT5pb3NzX0luc3RydW1l bnQubnNlYXJjaGVzOworCQl3aW5zdHJ1bWVudC0+bnNlYXJjaGVzICs9IG5vZGUtPmlvc3NfSW5z dHJ1bWVudC0+bnNlYXJjaGVzOworCQl3aW5zdHJ1bWVudC0+bmhlYXBmZXRjaGVzICs9IG5vZGUt Pmlvc3NfSW5zdHJ1bWVudC0+bmhlYXBmZXRjaGVzOwogCX0KIAogCS8qCkBAIC02MDQsNiArNTEz LDEwIEBAIEV4ZWNJbml0SW5kZXhPbmx5U2NhbihJbmRleE9ubHlTY2FuICpub2RlLCBFU3RhdGUg KmVzdGF0ZSwgaW50IGVmbGFncykKIAlpZiAoZWZsYWdzICYgRVhFQ19GTEFHX0VYUExBSU5fT05M WSkKIAkJcmV0dXJuIGluZGV4c3RhdGU7CiAKKwkvKiBTZXQgdXAgaW5zdHJ1bWVudGF0aW9uIG9m IGluZGV4LW9ubHkgc2NhbnMgaWYgcmVxdWVzdGVkICovCisJaWYgKGVzdGF0ZS0+ZXNfaW5zdHJ1 bWVudCkKKwkJaW5kZXhzdGF0ZS0+aW9zc19JbnN0cnVtZW50ID0gcGFsbG9jMF9vYmplY3QoSW5k ZXhTY2FuSW5zdHJ1bWVudGF0aW9uKTsKKwogCS8qIE9wZW4gdGhlIGluZGV4IHJlbGF0aW9uLiAq LwogCWxvY2ttb2RlID0gZXhlY19ydF9mZXRjaChub2RlLT5zY2FuLnNjYW5yZWxpZCwgZXN0YXRl KS0+cmVsbG9ja21vZGU7CiAJaW5kZXhSZWxhdGlvbiA9IGluZGV4X29wZW4obm9kZS0+aW5kZXhp ZCwgbG9ja21vZGUpOwpAQCAtNzg0LDEzICs2OTcsMTIgQEAgRXhlY0luZGV4T25seVNjYW5Jbml0 aWFsaXplRFNNKEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSwKIAogCW5vZGUtPmlvc3NfU2NhbkRl c2MgPQogCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0 aW9uLAotCQkJCQkJCQkgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsCi0JCQkJCQkJCSAmbm9kZS0+ aW9zc19JbnN0cnVtZW50LAorCQkJCQkJCQkgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsIHRydWUs CisJCQkJCQkJCSBub2RlLT5pb3NzX0luc3RydW1lbnQsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051 bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1PcmRlckJ5S2V5cywKIAkJCQkJCQkJ IHBpc2Nhbik7Ci0Jbm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKLQlu b2RlLT5pb3NzX1ZNQnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKKwlBc3NlcnQobm9kZS0+aW9zc19T Y2FuRGVzYy0+eHNfd2FudF9pdHVwKTsKIAogCS8qCiAJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0 byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZCBwYXNzCkBAIC04NTAs MTIgKzc2MiwxMiBAQCBFeGVjSW5kZXhPbmx5U2NhbkluaXRpYWxpemVXb3JrZXIoSW5kZXhPbmx5 U2NhblN0YXRlICpub2RlLAogCiAJbm9kZS0+aW9zc19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2lu c2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCi0JCQkJCQkJCSBub2Rl LT5pb3NzX1JlbGF0aW9uRGVzYywKLQkJCQkJCQkJICZub2RlLT5pb3NzX0luc3RydW1lbnQsCisJ CQkJCQkJCSBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywgdHJ1ZSwKKwkJCQkJCQkJIG5vZGUtPmlv c3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJ CSBub2RlLT5pb3NzX051bU9yZGVyQnlLZXlzLAogCQkJCQkJCQkgcGlzY2FuKTsKLQlub2RlLT5p b3NzX1NjYW5EZXNjLT54c193YW50X2l0dXAgPSB0cnVlOworCUFzc2VydChub2RlLT5pb3NzX1Nj YW5EZXNjLT54c193YW50X2l0dXApOwogCiAJLyoKIAkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRv IGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5kIHBhc3MKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVJbmRleHNjYW4uYwppbmRleCBhNjE2YWJmZjAuLjY3ODIyOTQ3YSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwpAQCAtMTA3LDkgKzEwNyw5IEBAIEluZGV4TmV4 dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJICogc2VyaWFsbHkgZXhlY3V0aW5nIGFuIGluZGV4 IHNjYW4gdGhhdCB3YXMgcGxhbm5lZCB0byBiZSBwYXJhbGxlbC4KIAkJICovCiAJCXNjYW5kZXNj ID0gaW5kZXhfYmVnaW5zY2FuKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJ ICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9u RGVzYywgZmFsc2UsCiAJCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfc25hcHNob3QsCi0JCQkJCQkJCSAg ICZub2RlLT5pc3NfSW5zdHJ1bWVudCwKKwkJCQkJCQkJICAgbm9kZS0+aXNzX0luc3RydW1lbnQs CiAJCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJICAgbm9kZS0+aXNz X051bU9yZGVyQnlLZXlzKTsKIApAQCAtMTI4LDcgKzEyOCw3IEBAIEluZGV4TmV4dChJbmRleFNj YW5TdGF0ZSAqbm9kZSkKIAkvKgogCSAqIG9rLCBub3cgdGhhdCB3ZSBoYXZlIHdoYXQgd2UgbmVl ZCwgZmV0Y2ggdGhlIG5leHQgdHVwbGUuCiAJICovCi0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xv dChzY2FuZGVzYywgZGlyZWN0aW9uLCBzbG90KSkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4 dF9zbG90KHNjYW5kZXNjLCBkaXJlY3Rpb24sIHNsb3QpKQogCXsKIAkJQ0hFQ0tfRk9SX0lOVEVS UlVQVFMoKTsKIApAQCAtMjAzLDkgKzIwMyw5IEBAIEluZGV4TmV4dFdpdGhSZW9yZGVyKEluZGV4 U2NhblN0YXRlICpub2RlKQogCQkgKiBzZXJpYWxseSBleGVjdXRpbmcgYW4gaW5kZXggc2NhbiB0 aGF0IHdhcyBwbGFubmVkIHRvIGJlIHBhcmFsbGVsLgogCQkgKi8KIAkJc2NhbmRlc2MgPSBpbmRl eF9iZWdpbnNjYW4obm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAotCQkJCQkJCQkgICBub2Rl LT5pc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLCBm YWxzZSwKIAkJCQkJCQkJICAgZXN0YXRlLT5lc19zbmFwc2hvdCwKLQkJCQkJCQkJICAgJm5vZGUt Pmlzc19JbnN0cnVtZW50LAorCQkJCQkJCQkgICBub2RlLT5pc3NfSW5zdHJ1bWVudCwKIAkJCQkJ CQkJICAgbm9kZS0+aXNzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgICBub2RlLT5pc3NfTnVtT3Jk ZXJCeUtleXMpOwogCkBAIC0yNjAsNyArMjYwLDcgQEAgSW5kZXhOZXh0V2l0aFJlb3JkZXIoSW5k ZXhTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIEZldGNoIG5leHQgdHVwbGUgZnJvbSB0aGUgaW5kZXgu CiAJCSAqLwogbmV4dF9pbmRleHR1cGxlOgotCQlpZiAoIWluZGV4X2dldG5leHRfc2xvdChzY2Fu ZGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNsb3QpKQorCQlpZiAoIXRhYmxlX2luZGV4X2dl dG5leHRfc2xvdChzY2FuZGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNsb3QpKQogCQl7CiAJ CQkvKgogCQkJICogTm8gbW9yZSB0dXBsZXMgZnJvbSB0aGUgaW5kZXguICBCdXQgd2Ugc3RpbGwg bmVlZCB0byBkcmFpbiBhbnkKQEAgLTgxMSw3ICs4MTEsOCBAQCBFeGVjRW5kSW5kZXhTY2FuKElu ZGV4U2NhblN0YXRlICpub2RlKQogCQkgKiBzaHV0ZG93biBvbiB0aGUgd29ya2Vycy4gIE9uIHJl c2NhbiBpdCB3aWxsIHNwaW4gdXAgbmV3IHdvcmtlcnMKIAkJICogd2hpY2ggd2lsbCBoYXZlIGEg bmV3IEluZGV4T25seVNjYW5TdGF0ZSBhbmQgemVyb2VkIHN0YXRzLgogCQkgKi8KLQkJd2luc3Ry dW1lbnQtPm5zZWFyY2hlcyArPSBub2RlLT5pc3NfSW5zdHJ1bWVudC5uc2VhcmNoZXM7CisJCXdp bnN0cnVtZW50LT5uc2VhcmNoZXMgKz0gbm9kZS0+aXNzX0luc3RydW1lbnQtPm5zZWFyY2hlczsK KwkJQXNzZXJ0KG5vZGUtPmlzc19JbnN0cnVtZW50LT5uaGVhcGZldGNoZXMgPT0gMCk7CiAJfQog CiAJLyoKQEAgLTk3MSw2ICs5NzIsMTAgQEAgRXhlY0luaXRJbmRleFNjYW4oSW5kZXhTY2FuICpu b2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAlpZiAoZWZsYWdzICYgRVhFQ19GTEFH X0VYUExBSU5fT05MWSkKIAkJcmV0dXJuIGluZGV4c3RhdGU7CiAKKwkvKiBTZXQgdXAgaW5zdHJ1 bWVudGF0aW9uIG9mIGluZGV4IHNjYW5zIGlmIHJlcXVlc3RlZCAqLworCWlmIChlc3RhdGUtPmVz X2luc3RydW1lbnQpCisJCWluZGV4c3RhdGUtPmlzc19JbnN0cnVtZW50ID0gcGFsbG9jMF9vYmpl Y3QoSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uKTsKKwogCS8qIE9wZW4gdGhlIGluZGV4IHJlbGF0 aW9uLiAqLwogCWxvY2ttb2RlID0gZXhlY19ydF9mZXRjaChub2RlLT5zY2FuLnNjYW5yZWxpZCwg ZXN0YXRlKS0+cmVsbG9ja21vZGU7CiAJaW5kZXhzdGF0ZS0+aXNzX1JlbGF0aW9uRGVzYyA9IGlu ZGV4X29wZW4obm9kZS0+aW5kZXhpZCwgbG9ja21vZGUpOwpAQCAtMTcxOSw4ICsxNzI0LDggQEAg RXhlY0luZGV4U2NhbkluaXRpYWxpemVEU00oSW5kZXhTY2FuU3RhdGUgKm5vZGUsCiAKIAlub2Rl LT5pc3NfU2NhbkRlc2MgPQogCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3Nf Y3VycmVudFJlbGF0aW9uLAotCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKLQkJCQkJ CQkJICZub2RlLT5pc3NfSW5zdHJ1bWVudCwKKwkJCQkJCQkJIG5vZGUtPmlzc19SZWxhdGlvbkRl c2MsIGZhbHNlLAorCQkJCQkJCQkgbm9kZS0+aXNzX0luc3RydW1lbnQsCiAJCQkJCQkJCSBub2Rl LT5pc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtT3JkZXJCeUtleXMsCiAJ CQkJCQkJCSBwaXNjYW4pOwpAQCAtMTc4Myw4ICsxNzg4LDggQEAgRXhlY0luZGV4U2NhbkluaXRp YWxpemVXb3JrZXIoSW5kZXhTY2FuU3RhdGUgKm5vZGUsCiAKIAlub2RlLT5pc3NfU2NhbkRlc2Mg PQogCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9u LAotCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKLQkJCQkJCQkJICZub2RlLT5pc3Nf SW5zdHJ1bWVudCwKKwkJCQkJCQkJIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsIGZhbHNlLAorCQkJ CQkJCQkgbm9kZS0+aXNzX0luc3RydW1lbnQsCiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtU2Nhbktl eXMsCiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtT3JkZXJCeUtleXMsCiAJCQkJCQkJCSBwaXNjYW4p OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jCmluZGV4IGNiY2FlNGM3MC4uOWI0M2Vk OGI0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2Vqb2luLmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jCkBAIC01NCw4ICs1NCw4IEBA CiAgKgkJdGhlIGlubmVyICI1J3MiLiBUaGlzIHJlcXVpcmVzIHJlcG9zaXRpb25pbmcgdGhlIGlu bmVyICJjdXJzb3IiCiAgKgkJdG8gcG9pbnQgYXQgdGhlIGZpcnN0IGlubmVyICI1Ii4gVGhpcyBp cyBkb25lIGJ5ICJtYXJraW5nIiB0aGUKICAqCQlmaXJzdCBpbm5lciA1IHNvIHdlIGNhbiByZXN0 b3JlIHRoZSAiY3Vyc29yIiB0byBpdCBiZWZvcmUgam9pbmluZwotICoJCXdpdGggdGhlIHNlY29u ZCBvdXRlciA1LiBUaGUgYWNjZXNzIG1ldGhvZCBpbnRlcmZhY2UgcHJvdmlkZXMKLSAqCQlyb3V0 aW5lcyB0byBtYXJrIGFuZCByZXN0b3JlIHRvIGEgdHVwbGUuCisgKgkJd2l0aCB0aGUgc2Vjb25k IG91dGVyIDUuIFRoZSBpbmRleGJhdGNoLmMgaW50ZXJmYWNlIHByb3ZpZGVzCisgKgkJcm91dGlu ZXMgdG8gbWFyayBhbmQgcmVzdG9yZSB0byBhIHR1cGxlIGR1cmluZyBpbmRleCBzY2Fucy4KICAq CiAgKgogICoJCUVzc2VudGlhbCBvcGVyYXRpb24gb2YgdGhlIG1lcmdlIGpvaW4gYWxnb3JpdGht IGlzIGFzIGZvbGxvd3M6CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9p bmR4cGF0aC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYwppbmRleCA2 N2Q5ZGMzNWYuLmQ2MWMwYjZmMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvaW5keHBhdGguYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5j CkBAIC00Myw3ICs0Myw3IEBACiAvKiBXaGV0aGVyIHdlIGFyZSBsb29raW5nIGZvciBwbGFpbiBp bmRleHNjYW4sIGJpdG1hcCBzY2FuLCBvciBlaXRoZXIgKi8KIHR5cGVkZWYgZW51bQogewotCVNU X0lOREVYU0NBTiwJCQkJLyogbXVzdCBzdXBwb3J0IGFtZ2V0dHVwbGUgKi8KKwlTVF9JTkRFWFND QU4sCQkJCS8qIG11c3Qgc3VwcG9ydCBhbWdldHR1cGxlIG9yIGFtZ2V0YmF0Y2ggKi8KIAlTVF9C SVRNQVBTQ0FOLAkJCQkvKiBtdXN0IHN1cHBvcnQgYW1nZXRiaXRtYXAgKi8KIAlTVF9BTllTQ0FO LAkJCQkJLyogZWl0aGVyIGlzIG9rYXkgKi8KIH0gU2NhblR5cGVDb250cm9sOwpAQCAtNzQ3LDcg Kzc0Nyw3IEBAIGdldF9pbmRleF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq cmVsLAogCXsKIAkJSW5kZXhQYXRoICAqaXBhdGggPSAoSW5kZXhQYXRoICopIGxmaXJzdChsYyk7 CiAKLQkJaWYgKGluZGV4LT5hbWhhc2dldHR1cGxlKQorCQlpZiAoaW5kZXgtPmFtaGFzZ2V0YmF0 Y2gpCiAJCQlhZGRfcGF0aChyZWwsIChQYXRoICopIGlwYXRoKTsKIAogCQlpZiAoaW5kZXgtPmFt aGFzZ2V0Yml0bWFwICYmCkBAIC04MzUsNyArODM1LDcgQEAgYnVpbGRfaW5kZXhfcGF0aHMoUGxh bm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAlzd2l0Y2ggKHNjYW50eXBlKQogCXsK IAkJY2FzZSBTVF9JTkRFWFNDQU46Ci0JCQlpZiAoIWluZGV4LT5hbWhhc2dldHR1cGxlKQorCQkJ aWYgKCFpbmRleC0+YW1oYXNnZXRiYXRjaCkKIAkJCQlyZXR1cm4gTklMOwogCQkJYnJlYWs7CiAJ CWNhc2UgU1RfQklUTUFQU0NBTjoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91 dGlsL3BsYW5jYXQuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwppbmRl eCBkNjNlNzM5MGIuLjE2ZTMxZTAwNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3V0aWwvcGxhbmNhdC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQu YwpAQCAtMzEzLDExICszMTMsMTEgQEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJv b3QsIE9pZCByZWxhdGlvbk9iamVjdElkLCBib29sIGluaHBhcmVudCwKIAkJCQlpbmZvLT5hbXNl YXJjaGFycmF5ID0gYW1yb3V0aW5lLT5hbXNlYXJjaGFycmF5OwogCQkJCWluZm8tPmFtc2VhcmNo bnVsbHMgPSBhbXJvdXRpbmUtPmFtc2VhcmNobnVsbHM7CiAJCQkJaW5mby0+YW1jYW5wYXJhbGxl bCA9IGFtcm91dGluZS0+YW1jYW5wYXJhbGxlbDsKLQkJCQlpbmZvLT5hbWhhc2dldHR1cGxlID0g KGFtcm91dGluZS0+YW1nZXR0dXBsZSAhPSBOVUxMKTsKKwkJCQlpbmZvLT5hbWhhc2dldGJhdGNo ID0gKGFtcm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMIHx8CisJCQkJCQkJCQkgICBhbXJvdXRp bmUtPmFtZ2V0dHVwbGUgIT0gTlVMTCk7CiAJCQkJaW5mby0+YW1oYXNnZXRiaXRtYXAgPSBhbXJv dXRpbmUtPmFtZ2V0Yml0bWFwICE9IE5VTEwgJiYKIAkJCQkJcmVsYXRpb24tPnJkX3RhYmxlYW0t PnNjYW5fYml0bWFwX25leHRfdHVwbGUgIT0gTlVMTDsKLQkJCQlpbmZvLT5hbWNhbm1hcmtwb3Mg PSAoYW1yb3V0aW5lLT5hbW1hcmtwb3MgIT0gTlVMTCAmJgotCQkJCQkJCQkJICBhbXJvdXRpbmUt PmFtcmVzdHJwb3MgIT0gTlVMTCk7CisJCQkJaW5mby0+YW1jYW5tYXJrcG9zID0gYW1yb3V0aW5l LT5hbWdldGJhdGNoICE9IE5VTEw7CiAJCQkJaW5mby0+YW1jb3N0ZXN0aW1hdGUgPSBhbXJvdXRp bmUtPmFtY29zdGVzdGltYXRlOwogCQkJCUFzc2VydChpbmZvLT5hbWNvc3Rlc3RpbWF0ZSAhPSBO VUxMKTsKIApAQCAtNDE0LDcgKzQxNCw3IEBAIGdldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZv ICpyb290LCBPaWQgcmVsYXRpb25PYmplY3RJZCwgYm9vbCBpbmhwYXJlbnQsCiAJCQkJaW5mby0+ YW1zZWFyY2hhcnJheSA9IGZhbHNlOwogCQkJCWluZm8tPmFtc2VhcmNobnVsbHMgPSBmYWxzZTsK IAkJCQlpbmZvLT5hbWNhbnBhcmFsbGVsID0gZmFsc2U7Ci0JCQkJaW5mby0+YW1oYXNnZXR0dXBs ZSA9IGZhbHNlOworCQkJCWluZm8tPmFtaGFzZ2V0YmF0Y2ggPSBmYWxzZTsKIAkJCQlpbmZvLT5h bWhhc2dldGJpdG1hcCA9IGZhbHNlOwogCQkJCWluZm8tPmFtY2FubWFya3BvcyA9IGZhbHNlOwog CQkJCWluZm8tPmFtY29zdGVzdGltYXRlID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvcmVsYXRpb24uYwppbmRleCAwYjFkODBiNWIuLjc2YjBkMDM1ZiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jCisrKyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYwpAQCAtODkwLDcgKzg5MCw4IEBA IElzSW5kZXhVc2FibGVGb3JSZXBsaWNhSWRlbnRpdHlGdWxsKFJlbGF0aW9uIGlkeHJlbCwgQXR0 ck1hcCAqYXR0cm1hcCkKIAkgKiBUaGUgZ2l2ZW4gaW5kZXggYWNjZXNzIG1ldGhvZCBtdXN0IGlt cGxlbWVudCAiYW1nZXR0dXBsZSIsIHdoaWNoIHdpbGwKIAkgKiBiZSB1c2VkIGxhdGVyIHRvIGZl dGNoIHRoZSB0dXBsZXMuICBTZWUgUmVsYXRpb25GaW5kUmVwbFR1cGxlQnlJbmRleCgpLgogCSAq LwotCWlmIChHZXRJbmRleEFtUm91dGluZUJ5QW1JZChpZHhyZWwtPnJkX3JlbC0+cmVsYW0sIGZh bHNlKS0+YW1nZXR0dXBsZSA9PSBOVUxMKQorCWlmIChHZXRJbmRleEFtUm91dGluZUJ5QW1JZChp ZHhyZWwtPnJkX3JlbC0+cmVsYW0sIGZhbHNlKS0+YW1nZXR0dXBsZSA9PSBOVUxMICYmCisJCUdl dEluZGV4QW1Sb3V0aW5lQnlBbUlkKGlkeHJlbC0+cmRfcmVsLT5yZWxhbSwgZmFsc2UpLT5hbWdl dGJhdGNoID09IE5VTEwpCiAJCXJldHVybiBmYWxzZTsKIAogCXJldHVybiB0cnVlOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9hbXV0aWxzLmMKaW5kZXggYzgxZmI2MWEwLi5kZGZkMWI1NWMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2FtdXRpbHMuYwpAQCAtMzYzLDEwICszNjMsMTEgQEAgaW5kZXhhbV9wcm9wZXJ0eShGdW5jdGlv bkNhbGxJbmZvIGZjaW5mbywKIAkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWNsdXN0ZXJh YmxlKTsKIAogCQkJY2FzZSBBTVBST1BfSU5ERVhfU0NBTjoKLQkJCQlQR19SRVRVUk5fQk9PTChy b3V0aW5lLT5hbWdldHR1cGxlID8gdHJ1ZSA6IGZhbHNlKTsKKwkJCQlQR19SRVRVUk5fQk9PTChy b3V0aW5lLT5hbWdldHR1cGxlICE9IE5VTEwgfHwKKwkJCQkJCQkgICByb3V0aW5lLT5hbWdldGJh dGNoICE9IE5VTEwpOwogCiAJCQljYXNlIEFNUFJPUF9CSVRNQVBfU0NBTjoKLQkJCQlQR19SRVRV Uk5fQk9PTChyb3V0aW5lLT5hbWdldGJpdG1hcCA/IHRydWUgOiBmYWxzZSk7CisJCQkJUEdfUkVU VVJOX0JPT0wocm91dGluZS0+YW1nZXRiaXRtYXAgIT0gTlVMTCk7CiAKIAkJCWNhc2UgQU1QUk9Q X0JBQ0tXQVJEX1NDQU46CiAJCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1jYW5iYWNrd2Fy ZCk7CkBAIC0zOTIsNyArMzkzLDggQEAgaW5kZXhhbV9wcm9wZXJ0eShGdW5jdGlvbkNhbGxJbmZv IGZjaW5mbywKIAkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtY2FubXVsdGljb2wpOwogCiAJ CWNhc2UgQU1QUk9QX0NBTl9FWENMVURFOgotCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1n ZXR0dXBsZSA/IHRydWUgOiBmYWxzZSk7CisJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdl dHR1cGxlICE9IE5VTEwgfHwKKwkJCQkJCSAgIHJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7 CiAKIAkJY2FzZSBBTVBST1BfQ0FOX0lOQ0xVREU6CiAJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5l LT5hbWNhbmluY2x1ZGUpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1 bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYwppbmRleCAyOWZlYzY1NTUu LjYxNmFjZmM5NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKQEAgLTEwMiw3ICsxMDIsNiBA QAogI2luY2x1ZGUgImFjY2Vzcy9naW4uaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKICNp bmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgotI2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFw LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24uaCIKICNpbmNsdWRlICJjYXRhbG9n L3BnX29wZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdGF0aXN0aWMuaCIKQEAgLTcx MjQsMTAgKzcxMjMsNiBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBvaW50KFJlbGF0aW9uIGhl YXBSZWwsCiAJYm9vbAkJaGF2ZV9kYXRhID0gZmFsc2U7CiAJU25hcHNob3REYXRhIFNuYXBzaG90 Tm9uVmFjdXVtYWJsZTsKIAlJbmRleFNjYW5EZXNjIGluZGV4X3NjYW47Ci0JQnVmZmVyCQl2bWJ1 ZmZlciA9IEludmFsaWRCdWZmZXI7Ci0JQmxvY2tOdW1iZXIgbGFzdF9oZWFwX2Jsb2NrID0gSW52 YWxpZEJsb2NrTnVtYmVyOwotCWludAkJCW5fdmlzaXRlZF9oZWFwX3BhZ2VzID0gMDsKLQlJdGVt UG9pbnRlciB0aWQ7CiAJRGF0dW0JCXZhbHVlc1tJTkRFWF9NQVhfS0VZU107CiAJYm9vbAkJaXNu dWxsW0lOREVYX01BWF9LRVlTXTsKIAlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CkBAIC03MTc1 LDYwICs3MTcwLDI2IEBAIGdldF9hY3R1YWxfdmFyaWFibGVfZW5kcG9pbnQoUmVsYXRpb24gaGVh cFJlbCwKIAkgKiBhIGh1Z2UgYW1vdW50IG9mIHRpbWUgaGVyZSwgc28gd2UgZ2l2ZSB1cCBvbmNl IHdlJ3ZlIHJlYWQgdG9vIG1hbnkgaGVhcAogCSAqIHBhZ2VzLiAgV2hlbiB3ZSBmYWlsIGZvciB0 aGF0IHJlYXNvbiwgdGhlIGNhbGxlciB3aWxsIGVuZCB1cCB1c2luZwogCSAqIHdoYXRldmVyIGV4 dHJlbWFsIHZhbHVlIGlzIHJlY29yZGVkIGluIHBnX3N0YXRpc3RpYy4KKwkgKgorCSAqIFhYWCBU aGlzIGNhbid0IHdvcmsgd2l0aCB0aGUgbmV3IHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBpbnRl cmZhY2UsCisJICogd2hpY2ggc2ltcGx5IHdvbid0IHJldHVybiBhIHR1cGxlIHRoYXQgaXNuJ3Qg dmlzaWJsZSB0byBvdXIgc25hcHNob3QuCisJICogdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IHdp bGwgbmVlZCBzb21lIGtpbmQgb2YgY2FsbGJhY2sgdGhhdCBwcm92aWRlcworCSAqIGEgd2F5IGZv ciB0aGUgc2NhbiB0byBnaXZlIHVwIHdoZW4gdGhlIGNvc3RzIHN0YXJ0IHRvIGdldCBvdXQgb2Yg aGFuZC4KIAkgKi8KIAlJbml0Tm9uVmFjdXVtYWJsZVNuYXBzaG90KFNuYXBzaG90Tm9uVmFjdXVt YWJsZSwKIAkJCQkJCQkgIEdsb2JhbFZpc1Rlc3RGb3IoaGVhcFJlbCkpOwogCi0JaW5kZXhfc2Nh biA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsLCBpbmRleFJlbCwKKwlpbmRleF9zY2FuID0gaW5k ZXhfYmVnaW5zY2FuKGhlYXBSZWwsIGluZGV4UmVsLCB0cnVlLAogCQkJCQkJCQkgJlNuYXBzaG90 Tm9uVmFjdXVtYWJsZSwgTlVMTCwKIAkJCQkJCQkJIDEsIDApOwotCS8qIFNldCBpdCB1cCBmb3Ig aW5kZXgtb25seSBzY2FuICovCi0JaW5kZXhfc2Nhbi0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKKwlB c3NlcnQoaW5kZXhfc2Nhbi0+eHNfd2FudF9pdHVwKTsKIAlpbmRleF9yZXNjYW4oaW5kZXhfc2Nh biwgc2NhbmtleXMsIDEsIE5VTEwsIDApOwogCiAJLyogRmV0Y2ggZmlyc3QvbmV4dCB0dXBsZSBp biBzcGVjaWZpZWQgZGlyZWN0aW9uICovCi0Jd2hpbGUgKCh0aWQgPSBpbmRleF9nZXRuZXh0X3Rp ZChpbmRleF9zY2FuLCBpbmRleHNjYW5kaXIpKSAhPSBOVUxMKQorCXdoaWxlICh0YWJsZV9pbmRl eF9nZXRuZXh0X3Nsb3QoaW5kZXhfc2NhbiwgaW5kZXhzY2FuZGlyLCB0YWJsZXNsb3QpKQogCXsK LQkJQmxvY2tOdW1iZXIgYmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCk7Ci0K LQkJaWYgKCFWTV9BTExfVklTSUJMRShoZWFwUmVsLAotCQkJCQkJCWJsb2NrLAotCQkJCQkJCSZ2 bWJ1ZmZlcikpCi0JCXsKLQkJCS8qIFJhdHMsIHdlIGhhdmUgdG8gdmlzaXQgdGhlIGhlYXAgdG8g Y2hlY2sgdmlzaWJpbGl0eSAqLwotCQkJaWYgKCFpbmRleF9mZXRjaF9oZWFwKGluZGV4X3NjYW4s IHRhYmxlc2xvdCkpCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBObyB2aXNpYmxlIHR1cGxlIGZvciB0 aGlzIGluZGV4IGVudHJ5LCBzbyB3ZSBuZWVkIHRvCi0JCQkJICogYWR2YW5jZSB0byB0aGUgbmV4 dCBlbnRyeS4gIEJlZm9yZSBkb2luZyBzbywgY291bnQgaGVhcAotCQkJCSAqIHBhZ2UgZmV0Y2hl cyBhbmQgZ2l2ZSB1cCBpZiB3ZSd2ZSBkb25lIHRvbyBtYW55LgotCQkJCSAqCi0JCQkJICogV2Ug ZG9uJ3QgY2hhcmdlIGEgcGFnZSBmZXRjaCBpZiB0aGlzIGlzIHRoZSBzYW1lIGhlYXAgcGFnZQot CQkJCSAqIGFzIHRoZSBwcmV2aW91cyB0dXBsZS4gIFRoaXMgaXMgb24gdGhlIGNvbnNlcnZhdGl2 ZSBzaWRlLAotCQkJCSAqIHNpbmNlIG90aGVyIHJlY2VudGx5LWFjY2Vzc2VkIHBhZ2VzIGFyZSBw cm9iYWJseSBzdGlsbCBpbgotCQkJCSAqIGJ1ZmZlcnMgdG9vOyBidXQgaXQncyBnb29kIGVub3Vn aCBmb3IgdGhpcyBoZXVyaXN0aWMuCi0JCQkJICovCi0jZGVmaW5lIFZJU0lURURfUEFHRVNfTElN SVQgMTAwCi0KLQkJCQlpZiAoYmxvY2sgIT0gbGFzdF9oZWFwX2Jsb2NrKQotCQkJCXsKLQkJCQkJ bGFzdF9oZWFwX2Jsb2NrID0gYmxvY2s7Ci0JCQkJCW5fdmlzaXRlZF9oZWFwX3BhZ2VzKys7Ci0J CQkJCWlmIChuX3Zpc2l0ZWRfaGVhcF9wYWdlcyA+IFZJU0lURURfUEFHRVNfTElNSVQpCi0JCQkJ CQlicmVhazsKLQkJCQl9Ci0KLQkJCQljb250aW51ZTsJCS8qIG5vIHZpc2libGUgdHVwbGUsIHRy eSBuZXh0IGluZGV4IGVudHJ5ICovCi0JCQl9Ci0KLQkJCS8qIFdlIGRvbid0IGFjdHVhbGx5IG5l ZWQgdGhlIGhlYXAgdHVwbGUgZm9yIGFueXRoaW5nICovCi0JCQlFeGVjQ2xlYXJUdXBsZSh0YWJs ZXNsb3QpOwotCi0JCQkvKgotCQkJICogV2UgZG9uJ3QgY2FyZSB3aGV0aGVyIHRoZXJlJ3MgbW9y ZSB0aGFuIG9uZSB2aXNpYmxlIHR1cGxlIGluCi0JCQkgKiB0aGUgSE9UIGNoYWluOyBpZiBhbnkg YXJlIHZpc2libGUsIHRoYXQncyBnb29kIGVub3VnaC4KLQkJCSAqLwotCQl9CisJCS8qIFdlIGRv bid0IGFjdHVhbGx5IG5lZWQgdGhlIGhlYXAgdHVwbGUgZm9yIGFueXRoaW5nICovCisJCUV4ZWND bGVhclR1cGxlKHRhYmxlc2xvdCk7CiAKIAkJLyoKIAkJICogV2UgZXhwZWN0IHRoYXQgdGhlIGlu ZGV4IHdpbGwgcmV0dXJuIGRhdGEgaW4gSW5kZXhUdXBsZSBub3QKQEAgLTcyNjEsOCArNzIyMiw2 IEBAIGdldF9hY3R1YWxfdmFyaWFibGVfZW5kcG9pbnQoUmVsYXRpb24gaGVhcFJlbCwKIAkJYnJl YWs7CiAJfQogCi0JaWYgKHZtYnVmZmVyICE9IEludmFsaWRCdWZmZXIpCi0JCVJlbGVhc2VCdWZm ZXIodm1idWZmZXIpOwogCWluZGV4X2VuZHNjYW4oaW5kZXhfc2Nhbik7CiAKIAlyZXR1cm4gaGF2 ZV9kYXRhOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYyBiL2Nv bnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMKaW5kZXggZTA0YjdjYTY5Li4wYjc0ZmUzYTkg MTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMKKysrIGIvY29udHJp Yi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYwpAQCAtMzkzLDcgKzM5Myw3IEBAIGJ0X2NoZWNrX2V2 ZXJ5X2xldmVsKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgYm9vbCBoZWFwa2V5c3Bh Y2UsCiAJCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7CiAKIAkvKgotCSAqIFRoaXMg YXNzZXJ0aW9uIG1hdGNoZXMgdGhlIG9uZSBpbiBpbmRleF9nZXRuZXh0X3RpZCgpLiAgU2VlIHBh Z2UKKwkgKiBUaGlzIGFzc2VydGlvbiBtYXRjaGVzIHRoZSBvbmUgaW4gaGVhcGFtX2JhdGNoX2dl dG5leHQoKS4gIFNlZSBwYWdlCiAJICogcmVjeWNsaW5nLyJ2aXNpYmxlIHRvIGV2ZXJ5b25lIiBu b3RlcyBpbiBuYnRyZWUgUkVBRE1FLgogCSAqLwogCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxp ZChSZWNlbnRYbWluKSk7CmRpZmYgLS1naXQgYS9jb250cmliL2Jsb29tL2JsdXRpbHMuYyBiL2Nv bnRyaWIvYmxvb20vYmx1dGlscy5jCmluZGV4IDUxMTFjZGM2ZC4uZWE3ZDA5OGFhIDEwMDY0NAot LS0gYS9jb250cmliL2Jsb29tL2JsdXRpbHMuYworKysgYi9jb250cmliL2Jsb29tL2JsdXRpbHMu YwpAQCAtMTQ2LDEwICsxNDYsMTEgQEAgYmxoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5h bWJlZ2luc2NhbiA9IGJsYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBibHJlc2NhbiwKIAkJLmFt Z2V0dHVwbGUgPSBOVUxMLAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2Jh dGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gYmxnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4g PSBibGVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEws CisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxM LAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBO VUxMLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9p bmRleF9hbS5jIGIvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9h bS5jCmluZGV4IDMxZjhkMmI4MS4uNzQ1YzRjOGZmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1 bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMKKysrIGIvc3JjL3Rlc3QvbW9kdWxl cy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jCkBAIC0zMzQsMTAgKzMzNCwxMSBAQCBk aWhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gZGliZWdpbnNjYW4s CiAJCS5hbXJlc2NhbiA9IGRpcmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdl dGJhdGNoID0gTlVMTCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRt YXAgPSBOVUxMLAogCQkuYW1lbmRzY2FuID0gZGllbmRzY2FuLAotCQkuYW1tYXJrcG9zID0gTlVM TCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3NyZXNldCA9IE5VTEwsCiAJCS5hbWVz dGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEws CiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5k ZXggMjQxOTQ1NzM0Li5lMTgzMTc1MmIgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0y MjcsOCArMjI3LDYgQEAgQlRTY2FuSW5zZXJ0RGF0YQogQlRTY2FuS2V5UHJlcHJvYwogQlRTY2Fu T3BhcXVlCiBCVFNjYW5PcGFxdWVEYXRhCi1CVFNjYW5Qb3NEYXRhCi1CVFNjYW5Qb3NJdGVtCiBC VFNoYXJlZAogQlRTb3J0QXJyYXlDb250ZXh0CiBCVFNwb29sCkBAIC0yNTcsNiArMjU1LDkgQEAg QmFzZUJhY2t1cENtZAogQmFzZUJhY2t1cFRhcmdldEhhbmRsZQogQmFzZUJhY2t1cFRhcmdldFR5 cGUKIEJhdGNoTVZDQ1N0YXRlCitCYXRjaE1hdGNoaW5nSXRlbQorQmF0Y2hSaW5nQnVmZmVyCitC YXRjaFJpbmdJdGVtUG9zCiBCZWdpbkRpcmVjdE1vZGlmeV9mdW5jdGlvbgogQmVnaW5Gb3JlaWdu SW5zZXJ0X2Z1bmN0aW9uCiBCZWdpbkZvcmVpZ25Nb2RpZnlfZnVuY3Rpb24KQEAgLTEyODksNiAr MTI5MCw4IEBAIEluZGV4T3JkZXJCeURpc3RhbmNlCiBJbmRleFBhdGgKIEluZGV4UnVudGltZUtl eUluZm8KIEluZGV4U2NhbgorSW5kZXhTY2FuQmF0Y2gKK0luZGV4U2NhbkJhdGNoRGF0YQogSW5k ZXhTY2FuRGVzYwogSW5kZXhTY2FuRGVzY0RhdGEKIEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbgpA QCAtMzQ3OSwxOCArMzQ4MiwxNyBAQCBhbWNhbnJldHVybl9mdW5jdGlvbgogYW1jb3N0ZXN0aW1h dGVfZnVuY3Rpb24KIGFtZW5kc2Nhbl9mdW5jdGlvbgogYW1lc3RpbWF0ZXBhcmFsbGVsc2Nhbl9m dW5jdGlvbgorYW1nZXRiYXRjaF9mdW5jdGlvbgogYW1nZXRiaXRtYXBfZnVuY3Rpb24KIGFtZ2V0 dHJlZWhlaWdodF9mdW5jdGlvbgogYW1nZXR0dXBsZV9mdW5jdGlvbgogYW1pbml0cGFyYWxsZWxz Y2FuX2Z1bmN0aW9uCiBhbWluc2VydF9mdW5jdGlvbgogYW1pbnNlcnRjbGVhbnVwX2Z1bmN0aW9u Ci1hbW1hcmtwb3NfZnVuY3Rpb24KIGFtb3B0aW9uc19mdW5jdGlvbgogYW1wYXJhbGxlbHJlc2Nh bl9mdW5jdGlvbgogYW1wcm9wZXJ0eV9mdW5jdGlvbgogYW1yZXNjYW5fZnVuY3Rpb24KLWFtcmVz dHJwb3NfZnVuY3Rpb24KIGFtdHJhbnNsYXRlX2NtcHR5cGVfZnVuY3Rpb24KIGFtdHJhbnNsYXRl X3N0cmF0ZWd5X2Z1bmN0aW9uCiBhbXZhY3V1bWNsZWFudXBfZnVuY3Rpb24KLS0gCjIuNTEuMAoK --000000000000a2454a064b95d983 Content-Type: application/x-patch; name="v11-0002-Use-fake-LSNs-to-improve-nbtree-dropPin-behavior.patch" Content-Disposition: attachment; filename="v11-0002-Use-fake-LSNs-to-improve-nbtree-dropPin-behavior.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm0x5ogw11 RnJvbSA2NGZhZTI5ZjNiOTgyMTlhOGYzMjI0NmIyYWRmMTAzZWUyNjRmNGQ1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMTggSmFuIDIwMjYgMTE6MTQ6MzYgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMSAwMi8xMl0g VXNlIGZha2UgTFNOcyB0byBpbXByb3ZlIG5idHJlZSBkcm9wUGluIGJlaGF2aW9yLgoKUHJldmlv dXNseSB1bmxvZ2dlZCBuYnRyZWUgaW5kZXhlcyBuZWVkZWQgdG8gaG9sZCBvbiB0byBhIGxlYWYg cGFnZQpidWZmZXIgcGluIHdoZW4gc3RvcHBlZCBvbiB0aGF0IGxlYWYgcGFnZSwgcHVyZWx5IHNv IHRoYXQgdGhlCl9idF9raWxsaXRlbXMgcHJvY2VzcyBoYWQgYSB3YXkgdG8gYmUgc3VyZSB0aGF0 IHRoZXJlIHdhc24ndCBhbnkgdW5zYWZlCmNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBieSBWQUNV VU0uICBUaGUgX2J0X2tpbGxpdGVtcycgZHJvcFBpbiBzdHJhdGVneQpjb3VsZG4ndCBiZSB1c2Vk IGJlZm9yZSBub3csIHNpbmNlIGl0IHdvcmtzIGJ5IGNoZWNraW5nIGlmIHRoZSBwYWdlIExTTgpo YXMgY2hhbmdlZCBpbiB0aGUgcGVyaW9kIGFmdGVyIF9idF9yZWFkcGFnZSByZWFkIHRoZSBwYWdl J3MgaXRlbXMsIGJ1dApiZWZvcmUgX2J0X2tpbGxpdGVtcyB3YXMgY2FsbGVkLiAgV2Ugbm93IHVz ZSB0aGUgc2FtZSBMU04gdHJpY2sgd2l0aAp1bmxvZ2dlZCBpbmRleGVzLCBicmluZ2luZyB0aGUg c2FtZSBiZW5lZml0cyB0byB0aGVzZSBzY2FucyB0aGF0IGNvbW1pdAoyZWQ1Yjg3ZiBicm91Z2h0 IHRvIHNjYW5zIG9mIGxvZ2dlZCByZWxhdGlvbnMuCgpUaGlzIGlzIHByZXBhcmF0aW9uIGZvciBh biB1cGNvbWluZyBjb21taXQgdGhhdCB3aWxsIGFkZCB0aGUgYW1nZXRiYXRjaAppbnRlcmZhY2Ug YW5kIHN3aXRjaCBuYnRyZWUgb3ZlciB0byBpdCAoZnJvbSBhbWdldHR1cGxlKS4gIFRoYXQgd2ls bCBnbwpmdXJ0aGVyIGJ5IGNvbXBsZXRlbHkgb2J2aWF0aW5nIHRoZSBuZWVkIGZvciBhbWdldGJh dGNoIHNjYW5zIHRvIGhhbmcgb24KdG8gYnVmZmVyIHBpbnMgKGJhcnJpbmcgc2NhbnMgaW52b2x2 aW5nIGEgbm9uLU1WQ0Mgc25hcHNob3QpLgoKQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJv d3QuaWU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1XemtlaHVoeHl1QThx dWM3clJOM0V0TlhwaUtzalBmTzhtaGIrMERyMkswRHRnQG1haWwuZ21haWwuY29tCi0tLQogc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUgICAgICB8ICA1ICstCiBzcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idGRlZHVwLmMgIHwgIDggKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idGluc2VydC5jIHwgNDggKysrKysrKysrLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRwYWdlLmMgICB8IDgyICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyAgICB8ICA4IC0tLQogc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyB8ICAxIC0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0dXRpbHMuYyAgfCAgMSAtCiA3IGZpbGVzIGNoYW5nZWQsIDgwIGluc2VydGlvbnMoKyks IDczIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv UkVBRE1FIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUKaW5kZXggNTNkNGE2MWRj Li5jYjkyMWNhMmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1F CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FCkBAIC00ODUsOSArNDg1LDgg QEAgV2UgaGFuZGxlIHRoaXMga2lsbF9wcmlvcl90dXBsZSByYWNlIGNvbmRpdGlvbiBieSBoYXZp bmcgYWZmZWN0ZWQgaW5kZXgKIHNjYW5zIGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSB0aGF0IGFueSBj aGFuZ2UgdG8gdGhlIGxlYWYgcGFnZSBhdCBhbGwKIGltcGxpZXMgdGhhdCBpdCB3YXMgcmVhY2hl ZCBieSBidGJ1bGtkZWxldGUgaW4gdGhlIGludGVyaW0gcGVyaW9kIHdoZW4gbm8KIGJ1ZmZlciBw aW4gd2FzIGhlbGQuICBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IG5vdCBzZXR0aW5nIGFueSBMUF9E RUFEIGJpdHMKLW9uIHRoZSBsZWFmIHBhZ2UgYXQgYWxsIHdoZW4gdGhlIHBhZ2UncyBMU04gaGFz IGNoYW5nZWQuICAoVGhhdCB3b24ndCB3b3JrCi13aXRoIGFuIHVubG9nZ2VkIGluZGV4LCBzbyBm b3Igbm93IHdlIGRvbid0IGV2ZXIgYXBwbHkgdGhlICJkb24ndCBob2xkCi1vbnRvIHBpbiIgb3B0 aW1pemF0aW9uIHRoZXJlLikKK29uIHRoZSBsZWFmIHBhZ2UgYXQgYWxsIHdoZW4gdGhlIHBhZ2Un cyBMU04gaGFzIGNoYW5nZWQuICAoVGhpcyBpcyB3aHkgd2UKK2ltcGxlbWVudCAiZmFrZSIgTFNO cyBmb3IgdW5sb2dnZWQgaW5kZXggcmVsYXRpb25zLikKIAogRmFzdHBhdGggRm9yIEluZGV4IElu c2VydGlvbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRkZWR1cC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRkZWR1cC5jCmluZGV4IDk1YmUwYjE3OS4uYWY3YWZmZGY0IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGRlZHVwLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRkZWR1cC5jCkBAIC02OSw2ICs2OSw3IEBAIF9idF9kZWR1cF9wYXNzKFJlbGF0 aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgSW5kZXhUdXBsZSBuZXdpdGVtLCBTaXplIG5ld2l0ZW1zeiwK IAlTaXplCQlwYWdlc2F2aW5nIFBHX1VTRURfRk9SX0FTU0VSVFNfT05MWSA9IDA7CiAJYm9vbAkJ c2luZ2xldmFsc3RyYXQgPSBmYWxzZTsKIAlpbnQJCQlua2V5YXR0cyA9IEluZGV4UmVsYXRpb25H ZXROdW1iZXJPZktleUF0dHJpYnV0ZXMocmVsKTsKKwlYTG9nUmVjUHRyCXJlY3B0cjsKIAogCS8q IFBhc3NlZC1pbiBuZXdpdGVtc3ogaXMgTUFYQUxJR05FRCBidXQgZG9lcyBub3QgaW5jbHVkZSBs aW5lIHBvaW50ZXIgKi8KIAluZXdpdGVtc3ogKz0gc2l6ZW9mKEl0ZW1JZERhdGEpOwpAQCAtMjQ1 LDcgKzI0Niw2IEBAIF9idF9kZWR1cF9wYXNzKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgSW5k ZXhUdXBsZSBuZXdpdGVtLCBTaXplIG5ld2l0ZW1zeiwKIAkvKiBYTE9HIHN0dWZmICovCiAJaWYg KFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKIAl7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCQl4bF9i dHJlZV9kZWR1cCB4bHJlY19kZWR1cDsKIAogCQl4bHJlY19kZWR1cC5uaW50ZXJ2YWxzID0gc3Rh dGUtPm5pbnRlcnZhbHM7CkBAIC0yNjMsOSArMjYzLDExIEBAIF9idF9kZWR1cF9wYXNzKFJlbGF0 aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgSW5kZXhUdXBsZSBuZXdpdGVtLCBTaXplIG5ld2l0ZW1zeiwK IAkJCQkJCQlzdGF0ZS0+bmludGVydmFscyAqIHNpemVvZihCVERlZHVwSW50ZXJ2YWwpKTsKIAog CQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX0JUUkVFX0lELCBYTE9HX0JUUkVFX0RFRFVQKTsKLQot CQlQYWdlU2V0TFNOKHBhZ2UsIHJlY3B0cik7CiAJfQorCWVsc2UKKwkJcmVjcHRyID0gWExvZ0dl dEZha2VMU04ocmVsKTsKKworCVBhZ2VTZXRMU04ocGFnZSwgcmVjcHRyKTsKIAogCUVORF9DUklU X1NFQ1RJT04oKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRp bnNlcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMKaW5kZXggZDE3 YWFhNWFhLi5jYzc5ODk0ZDIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0aW5zZXJ0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQuYwpA QCAtMTEyNSw2ICsxMTI1LDcgQEAgX2J0X2luc2VydG9ucGcoUmVsYXRpb24gcmVsLAogCUluZGV4 VHVwbGUJb3Bvc3RpbmcgPSBOVUxMOwogCUluZGV4VHVwbGUJb3JpZ2l0dXAgPSBOVUxMOwogCUlu ZGV4VHVwbGUJbnBvc3RpbmcgPSBOVUxMOworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJcGFnZSA9 IEJ1ZmZlckdldFBhZ2UoYnVmKTsKIAlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7CkBA IC0xMzIyLDcgKzEzMjMsNiBAQCBfYnRfaW5zZXJ0b25wZyhSZWxhdGlvbiByZWwsCiAJCQl4bF9i dHJlZV9pbnNlcnQgeGxyZWM7CiAJCQl4bF9idHJlZV9tZXRhZGF0YSB4bG1ldGE7CiAJCQl1aW50 OAkJeGxpbmZvOwotCQkJWExvZ1JlY1B0cglyZWNwdHI7CiAJCQl1aW50MTYJCXVwb3N0aW5nb2Zm OwogCiAJCQl4bHJlYy5vZmZudW0gPSBuZXdpdGVtb2ZmOwpAQCAtMTM5NSwxNCArMTM5NSwxNiBA QCBfYnRfaW5zZXJ0b25wZyhSZWxhdGlvbiByZWwsCiAJCQl9CiAKIAkJCXJlY3B0ciA9IFhMb2dJ bnNlcnQoUk1fQlRSRUVfSUQsIHhsaW5mbyk7Ci0KLQkJCWlmIChCdWZmZXJJc1ZhbGlkKG1ldGFi dWYpKQotCQkJCVBhZ2VTZXRMU04obWV0YXBnLCByZWNwdHIpOwotCQkJaWYgKCFpc2xlYWYpCi0J CQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGNidWYpLCByZWNwdHIpOwotCi0JCQlQYWdlU2V0 TFNOKHBhZ2UsIHJlY3B0cik7CiAJCX0KKwkJZWxzZQorCQkJcmVjcHRyID0gWExvZ0dldEZha2VM U04ocmVsKTsKKworCQlpZiAoQnVmZmVySXNWYWxpZChtZXRhYnVmKSkKKwkJCVBhZ2VTZXRMU04o bWV0YXBnLCByZWNwdHIpOworCQlpZiAoIWlzbGVhZikKKwkJCVBhZ2VTZXRMU04oQnVmZmVyR2V0 UGFnZShjYnVmKSwgcmVjcHRyKTsKKworCQlQYWdlU2V0TFNOKHBhZ2UsIHJlY3B0cik7CiAKIAkJ RU5EX0NSSVRfU0VDVElPTigpOwogCkBAIC0xNTA0LDYgKzE1MDYsNyBAQCBfYnRfc3BsaXQoUmVs YXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBCVFNjYW5JbnNlcnQgaXR1cF9rZXksIEJ1ZmZl ciBidWYsCiAJYm9vbAkJbmV3aXRlbW9ubGVmdCwKIAkJCQlpc2xlYWYsCiAJCQkJaXNyaWdodG1v c3Q7CisJWExvZ1JlY1B0cglyZWNwdHI7CiAKIAkvKgogCSAqIG9yaWdwYWdlIGlzIHRoZSBvcmln aW5hbCBwYWdlIHRvIGJlIHNwbGl0LiAgbGVmdHBhZ2UgaXMgYSB0ZW1wb3JhcnkKQEAgLTE5ODMs NyArMTk4Niw2IEBAIF9idF9zcGxpdChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJU U2Nhbkluc2VydCBpdHVwX2tleSwgQnVmZmVyIGJ1ZiwKIAl7CiAJCXhsX2J0cmVlX3NwbGl0IHhs cmVjOwogCQl1aW50OAkJeGxpbmZvOwotCQlYTG9nUmVjUHRyCXJlY3B0cjsKIAogCQl4bHJlYy5s ZXZlbCA9IHJvcGFxdWUtPmJ0cG9fbGV2ZWw7CiAJCS8qIFNlZSBjb21tZW50cyBiZWxvdyBvbiBu ZXdpdGVtLCBvcmlnbmV3aXRlbSwgYW5kIHBvc3RpbmcgbGlzdHMgKi8KQEAgLTIwNjcsMTQgKzIw NjksMTYgQEAgX2J0X3NwbGl0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2Fu SW5zZXJ0IGl0dXBfa2V5LCBCdWZmZXIgYnVmLAogCiAJCXhsaW5mbyA9IG5ld2l0ZW1vbmxlZnQg PyBYTE9HX0JUUkVFX1NQTElUX0wgOiBYTE9HX0JUUkVFX1NQTElUX1I7CiAJCXJlY3B0ciA9IFhM b2dJbnNlcnQoUk1fQlRSRUVfSUQsIHhsaW5mbyk7Ci0KLQkJUGFnZVNldExTTihvcmlncGFnZSwg cmVjcHRyKTsKLQkJUGFnZVNldExTTihyaWdodHBhZ2UsIHJlY3B0cik7Ci0JCWlmICghaXNyaWdo dG1vc3QpCi0JCQlQYWdlU2V0TFNOKHNwYWdlLCByZWNwdHIpOwotCQlpZiAoIWlzbGVhZikKLQkJ CVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShjYnVmKSwgcmVjcHRyKTsKIAl9CisJZWxzZQorCQly ZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJUGFnZVNldExTTihvcmlncGFnZSwgcmVj cHRyKTsKKwlQYWdlU2V0TFNOKHJpZ2h0cGFnZSwgcmVjcHRyKTsKKwlpZiAoIWlzcmlnaHRtb3N0 KQorCQlQYWdlU2V0TFNOKHNwYWdlLCByZWNwdHIpOworCWlmICghaXNsZWFmKQorCQlQYWdlU2V0 TFNOKEJ1ZmZlckdldFBhZ2UoY2J1ZiksIHJlY3B0cik7CiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7 CiAKQEAgLTI0NzYsNiArMjQ4MCw3IEBAIF9idF9uZXdsZXZlbChSZWxhdGlvbiByZWwsIFJlbGF0 aW9uIGhlYXByZWwsIEJ1ZmZlciBsYnVmLCBCdWZmZXIgcmJ1ZikKIAlCdWZmZXIJCW1ldGFidWY7 CiAJUGFnZQkJbWV0YXBnOwogCUJUTWV0YVBhZ2VEYXRhICptZXRhZDsKKwlYTG9nUmVjUHRyCXJl Y3B0cjsKIAogCWxia25vID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIobGJ1Zik7CiAJcmJrbm8gPSBC dWZmZXJHZXRCbG9ja051bWJlcihyYnVmKTsKQEAgLTI1NzEsNyArMjU3Niw2IEBAIF9idF9uZXds ZXZlbChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJ1ZmZlciBsYnVmLCBCdWZmZXIg cmJ1ZikKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKIAkJeGxfYnRyZWVfbmV3cm9v dCB4bHJlYzsKLQkJWExvZ1JlY1B0cglyZWNwdHI7CiAJCXhsX2J0cmVlX21ldGFkYXRhIG1kOwog CiAJCXhscmVjLnJvb3RibGsgPSByb290YmxrbnVtOwpAQCAtMjYwNSwxMSArMjYwOSwxMyBAQCBf YnRfbmV3bGV2ZWwoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBCdWZmZXIgbGJ1Ziwg QnVmZmVyIHJidWYpCiAJCQkJCQkJKChQYWdlSGVhZGVyKSByb290cGFnZSktPnBkX3VwcGVyKTsK IAogCQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX0JUUkVFX0lELCBYTE9HX0JUUkVFX05FV1JPT1Qp OwotCi0JCVBhZ2VTZXRMU04obHBhZ2UsIHJlY3B0cik7Ci0JCVBhZ2VTZXRMU04ocm9vdHBhZ2Us IHJlY3B0cik7Ci0JCVBhZ2VTZXRMU04obWV0YXBnLCByZWNwdHIpOwogCX0KKwllbHNlCisJCXJl Y3B0ciA9IFhMb2dHZXRGYWtlTFNOKHJlbCk7CisKKwlQYWdlU2V0TFNOKGxwYWdlLCByZWNwdHIp OworCVBhZ2VTZXRMU04ocm9vdHBhZ2UsIHJlY3B0cik7CisJUGFnZVNldExTTihtZXRhcGcsIHJl Y3B0cik7CiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRw YWdlLmMKaW5kZXggNDEyNWMxODVlLi43MGI1MjRkZmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0cGFnZS5jCkBAIC0yMzUsNiArMjM1LDcgQEAgX2J0X3NldF9jbGVhbnVwX2luZm8oUmVsYXRp b24gcmVsLCBCbG9ja051bWJlciBudW1fZGVscGFnZXMpCiAJQnVmZmVyCQltZXRhYnVmOwogCVBh Z2UJCW1ldGFwZzsKIAlCVE1ldGFQYWdlRGF0YSAqbWV0YWQ7CisJWExvZ1JlY1B0cglyZWNwdHI7 CiAKIAkvKgogCSAqIE9uLWRpc2sgY29tcGF0aWJpbGl0eSBub3RlOiBUaGUgYnRtX2xhc3RfY2xl YW51cF9udW1fZGVscGFnZXMgbWV0YXBhZ2UKQEAgLTI4Niw3ICsyODcsNiBAQCBfYnRfc2V0X2Ns ZWFudXBfaW5mbyhSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIG51bV9kZWxwYWdlcykKIAlpZiAo UmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKIAkJeGxfYnRyZWVfbWV0YWRhdGEgbWQ7Ci0JCVhM b2dSZWNQdHIJcmVjcHRyOwogCiAJCVhMb2dCZWdpbkluc2VydCgpOwogCQlYTG9nUmVnaXN0ZXJC dWZmZXIoMCwgbWV0YWJ1ZiwgUkVHQlVGX1dJTExfSU5JVCB8IFJFR0JVRl9TVEFOREFSRCk7CkBA IC0zMDMsOSArMzAzLDExIEBAIF9idF9zZXRfY2xlYW51cF9pbmZvKFJlbGF0aW9uIHJlbCwgQmxv Y2tOdW1iZXIgbnVtX2RlbHBhZ2VzKQogCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDAsICZtZCwgc2l6 ZW9mKHhsX2J0cmVlX21ldGFkYXRhKSk7CiAKIAkJcmVjcHRyID0gWExvZ0luc2VydChSTV9CVFJF RV9JRCwgWExPR19CVFJFRV9NRVRBX0NMRUFOVVApOwotCi0JCVBhZ2VTZXRMU04obWV0YXBnLCBy ZWNwdHIpOwogCX0KKwllbHNlCisJCXJlY3B0ciA9IFhMb2dHZXRGYWtlTFNOKHJlbCk7CisKKwlQ YWdlU2V0TFNOKG1ldGFwZywgcmVjcHRyKTsKIAogCUVORF9DUklUX1NFQ1RJT04oKTsKIApAQCAt MzUxLDYgKzM1Myw3IEBAIF9idF9nZXRyb290KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJl bCwgaW50IGFjY2VzcykKIAlCbG9ja051bWJlciByb290Ymxrbm87CiAJdWludDMyCQlyb290bGV2 ZWw7CiAJQlRNZXRhUGFnZURhdGEgKm1ldGFkOworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJQXNz ZXJ0KGFjY2VzcyA9PSBCVF9SRUFEIHx8IGhlYXByZWwgIT0gTlVMTCk7CiAKQEAgLTQ3Myw3ICs0 NzYsNiBAQCBfYnRfZ2V0cm9vdChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIGludCBh Y2Nlc3MpCiAJCWlmIChSZWxhdGlvbk5lZWRzV0FMKHJlbCkpCiAJCXsKIAkJCXhsX2J0cmVlX25l d3Jvb3QgeGxyZWM7Ci0JCQlYTG9nUmVjUHRyCXJlY3B0cjsKIAkJCXhsX2J0cmVlX21ldGFkYXRh IG1kOwogCiAJCQlYTG9nQmVnaW5JbnNlcnQoKTsKQEAgLTQ5NywxMCArNDk5LDEyIEBAIF9idF9n ZXRyb290KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgaW50IGFjY2VzcykKIAkJCVhM b2dSZWdpc3RlckRhdGEoJnhscmVjLCBTaXplT2ZCdHJlZU5ld3Jvb3QpOwogCiAJCQlyZWNwdHIg PSBYTG9nSW5zZXJ0KFJNX0JUUkVFX0lELCBYTE9HX0JUUkVFX05FV1JPT1QpOwotCi0JCQlQYWdl U2V0TFNOKHJvb3RwYWdlLCByZWNwdHIpOwotCQkJUGFnZVNldExTTihtZXRhcGcsIHJlY3B0cik7 CiAJCX0KKwkJZWxzZQorCQkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsKKworCQlQYWdl U2V0TFNOKHJvb3RwYWdlLCByZWNwdHIpOworCQlQYWdlU2V0TFNOKG1ldGFwZywgcmVjcHRyKTsK IAogCQlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKQEAgLTExNjIsNiArMTE2Niw3IEBAIF9idF9kZWxp dGVtc192YWN1dW0oUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLAogCWNoYXIJICAgKnVwZGF0ZWRi dWYgPSBOVUxMOwogCVNpemUJCXVwZGF0ZWRidWZsZW4gPSAwOwogCU9mZnNldE51bWJlciB1cGRh dGVkb2Zmc2V0c1tNYXhJbmRleFR1cGxlc1BlclBhZ2VdOworCVhMb2dSZWNQdHIJcmVjcHRyOwog CiAJLyogU2hvdWxkbid0IGJlIGNhbGxlZCB1bmxlc3MgdGhlcmUncyBzb21ldGhpbmcgdG8gZG8g Ki8KIAlBc3NlcnQobmRlbGV0YWJsZSA+IDAgfHwgbnVwZGF0YWJsZSA+IDApOwpAQCAtMTIyNiw3 ICsxMjMxLDYgQEAgX2J0X2RlbGl0ZW1zX3ZhY3V1bShSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYs CiAJLyogWExPRyBzdHVmZiAqLwogCWlmIChuZWVkc3dhbCkKIAl7Ci0JCVhMb2dSZWNQdHIJcmVj cHRyOwogCQl4bF9idHJlZV92YWN1dW0geGxyZWNfdmFjdXVtOwogCiAJCXhscmVjX3ZhY3V1bS5u ZGVsZXRlZCA9IG5kZWxldGFibGU7CkBAIC0xMjQ4LDkgKzEyNTIsMTEgQEAgX2J0X2RlbGl0ZW1z X3ZhY3V1bShSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYsCiAJCX0KIAogCQlyZWNwdHIgPSBYTG9n SW5zZXJ0KFJNX0JUUkVFX0lELCBYTE9HX0JUUkVFX1ZBQ1VVTSk7Ci0KLQkJUGFnZVNldExTTihw YWdlLCByZWNwdHIpOwogCX0KKwllbHNlCisJCXJlY3B0ciA9IFhMb2dHZXRGYWtlTFNOKHJlbCk7 CisKKwlQYWdlU2V0TFNOKHBhZ2UsIHJlY3B0cik7CiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAK QEAgLTEyOTIsNiArMTI5OCw3IEBAIF9idF9kZWxpdGVtc19kZWxldGUoUmVsYXRpb24gcmVsLCBC dWZmZXIgYnVmLAogCWNoYXIJICAgKnVwZGF0ZWRidWYgPSBOVUxMOwogCVNpemUJCXVwZGF0ZWRi dWZsZW4gPSAwOwogCU9mZnNldE51bWJlciB1cGRhdGVkb2Zmc2V0c1tNYXhJbmRleFR1cGxlc1Bl clBhZ2VdOworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJLyogU2hvdWxkbid0IGJlIGNhbGxlZCB1 bmxlc3MgdGhlcmUncyBzb21ldGhpbmcgdG8gZG8gKi8KIAlBc3NlcnQobmRlbGV0YWJsZSA+IDAg fHwgbnVwZGF0YWJsZSA+IDApOwpAQCAtMTM0Miw3ICsxMzQ5LDYgQEAgX2J0X2RlbGl0ZW1zX2Rl bGV0ZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYsCiAJLyogWExPRyBzdHVmZiAqLwogCWlmIChu ZWVkc3dhbCkKIAl7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCQl4bF9idHJlZV9kZWxldGUgeGxy ZWNfZGVsZXRlOwogCiAJCXhscmVjX2RlbGV0ZS5zbmFwc2hvdENvbmZsaWN0SG9yaXpvbiA9IHNu YXBzaG90Q29uZmxpY3RIb3Jpem9uOwpAQCAtMTM2Niw5ICsxMzcyLDExIEBAIF9idF9kZWxpdGVt c19kZWxldGUoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLAogCQl9CiAKIAkJcmVjcHRyID0gWExv Z0luc2VydChSTV9CVFJFRV9JRCwgWExPR19CVFJFRV9ERUxFVEUpOwotCi0JCVBhZ2VTZXRMU04o cGFnZSwgcmVjcHRyKTsKIAl9CisJZWxzZQorCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwp OworCisJUGFnZVNldExTTihwYWdlLCByZWNwdHIpOwogCiAJRU5EX0NSSVRfU0VDVElPTigpOwog CkBAIC0yMTAzLDYgKzIxMTEsNyBAQCBfYnRfbWFya19wYWdlX2hhbGZkZWFkKFJlbGF0aW9uIHJl bCwgUmVsYXRpb24gaGVhcHJlbCwgQnVmZmVyIGxlYWZidWYsCiAJT2Zmc2V0TnVtYmVyIG5leHRv ZmZzZXQ7CiAJSW5kZXhUdXBsZQlpdHVwOwogCUluZGV4VHVwbGVEYXRhIHRydW5jdHVwbGU7CisJ WExvZ1JlY1B0cglyZWNwdHI7CiAKIAlwYWdlID0gQnVmZmVyR2V0UGFnZShsZWFmYnVmKTsKIAlv cGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7CkBAIC0yMjUzLDcgKzIyNjIsNiBAQCBfYnRf bWFya19wYWdlX2hhbGZkZWFkKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQnVmZmVy IGxlYWZidWYsCiAJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKIAl7CiAJCXhsX2J0cmVlX21h cmtfcGFnZV9oYWxmZGVhZCB4bHJlYzsKLQkJWExvZ1JlY1B0cglyZWNwdHI7CiAKIAkJeGxyZWMu cG9mZnNldCA9IHBvZmZzZXQ7CiAJCXhscmVjLmxlYWZibGsgPSBsZWFmYmxrbm87CkBAIC0yMjc0 LDEyICsyMjgyLDE0IEBAIF9idF9tYXJrX3BhZ2VfaGFsZmRlYWQoUmVsYXRpb24gcmVsLCBSZWxh dGlvbiBoZWFwcmVsLCBCdWZmZXIgbGVhZmJ1ZiwKIAkJWExvZ1JlZ2lzdGVyRGF0YSgmeGxyZWMs IFNpemVPZkJ0cmVlTWFya1BhZ2VIYWxmRGVhZCk7CiAKIAkJcmVjcHRyID0gWExvZ0luc2VydChS TV9CVFJFRV9JRCwgWExPR19CVFJFRV9NQVJLX1BBR0VfSEFMRkRFQUQpOwotCi0JCXBhZ2UgPSBC dWZmZXJHZXRQYWdlKHN1YnRyZWVwYXJlbnQpOwotCQlQYWdlU2V0TFNOKHBhZ2UsIHJlY3B0cik7 Ci0JCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGxlYWZidWYpOwotCQlQYWdlU2V0TFNOKHBhZ2UsIHJl Y3B0cik7CiAJfQorCWVsc2UKKwkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsKKworCXBh Z2UgPSBCdWZmZXJHZXRQYWdlKHN1YnRyZWVwYXJlbnQpOworCVBhZ2VTZXRMU04ocGFnZSwgcmVj cHRyKTsKKwlwYWdlID0gQnVmZmVyR2V0UGFnZShsZWFmYnVmKTsKKwlQYWdlU2V0TFNOKHBhZ2Us IHJlY3B0cik7CiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKQEAgLTIzMzcsNiArMjM0Nyw3IEBA IF9idF91bmxpbmtfaGFsZmRlYWRfcGFnZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBsZWFmYnVmLCBC bG9ja051bWJlciBzY2FuYmxrbm8sCiAJdWludDMyCQl0YXJnZXRsZXZlbDsKIAlJbmRleFR1cGxl CWxlYWZoaWtleTsKIAlCbG9ja051bWJlciBsZWFmdG9wcGFyZW50OworCVhMb2dSZWNQdHIJcmVj cHRyOwogCiAJcGFnZSA9IEJ1ZmZlckdldFBhZ2UobGVhZmJ1Zik7CiAJb3BhcXVlID0gQlRQYWdl R2V0T3BhcXVlKHBhZ2UpOwpAQCAtMjY3Niw3ICsyNjg3LDYgQEAgX2J0X3VubGlua19oYWxmZGVh ZF9wYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGxlYWZidWYsIEJsb2NrTnVtYmVyIHNjYW5ibGtu bywKIAkJeGxfYnRyZWVfdW5saW5rX3BhZ2UgeGxyZWM7CiAJCXhsX2J0cmVlX21ldGFkYXRhIHhs bWV0YTsKIAkJdWludDgJCXhsaW5mbzsKLQkJWExvZ1JlY1B0cglyZWNwdHI7CiAKIAkJWExvZ0Jl Z2luSW5zZXJ0KCk7CiAKQEAgLTI3MjAsMjUgKzI3MzAsMjUgQEAgX2J0X3VubGlua19oYWxmZGVh ZF9wYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGxlYWZidWYsIEJsb2NrTnVtYmVyIHNjYW5ibGtu bywKIAkJCXhsaW5mbyA9IFhMT0dfQlRSRUVfVU5MSU5LX1BBR0U7CiAKIAkJcmVjcHRyID0gWExv Z0luc2VydChSTV9CVFJFRV9JRCwgeGxpbmZvKTsKKwl9CisJZWxzZQorCQlyZWNwdHIgPSBYTG9n R2V0RmFrZUxTTihyZWwpOwogCi0JCWlmIChCdWZmZXJJc1ZhbGlkKG1ldGFidWYpKQotCQl7Ci0J CQlQYWdlU2V0TFNOKG1ldGFwZywgcmVjcHRyKTsKLQkJfQotCQlwYWdlID0gQnVmZmVyR2V0UGFn ZShyYnVmKTsKKwlpZiAoQnVmZmVySXNWYWxpZChtZXRhYnVmKSkKKwkJUGFnZVNldExTTihtZXRh cGcsIHJlY3B0cik7CisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UocmJ1Zik7CisJUGFnZVNldExTTihw YWdlLCByZWNwdHIpOworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7CisJUGFnZVNldExTTihw YWdlLCByZWNwdHIpOworCWlmIChCdWZmZXJJc1ZhbGlkKGxidWYpKQorCXsKKwkJcGFnZSA9IEJ1 ZmZlckdldFBhZ2UobGJ1Zik7CiAJCVBhZ2VTZXRMU04ocGFnZSwgcmVjcHRyKTsKLQkJcGFnZSA9 IEJ1ZmZlckdldFBhZ2UoYnVmKTsKKwl9CisJaWYgKHRhcmdldCAhPSBsZWFmYmxrbm8pCisJewor CQlwYWdlID0gQnVmZmVyR2V0UGFnZShsZWFmYnVmKTsKIAkJUGFnZVNldExTTihwYWdlLCByZWNw dHIpOwotCQlpZiAoQnVmZmVySXNWYWxpZChsYnVmKSkKLQkJewotCQkJcGFnZSA9IEJ1ZmZlckdl dFBhZ2UobGJ1Zik7Ci0JCQlQYWdlU2V0TFNOKHBhZ2UsIHJlY3B0cik7Ci0JCX0KLQkJaWYgKHRh cmdldCAhPSBsZWFmYmxrbm8pCi0JCXsKLQkJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGxlYWZidWYp OwotCQkJUGFnZVNldExTTihwYWdlLCByZWNwdHIpOwotCQl9CiAJfQogCiAJRU5EX0NSSVRfU0VD VElPTigpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKaW5kZXggM2RlYzFlZTY1Li44ZDYz NmQ5ODYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwpAQCAtNDA2LDEzICs0MDYsNiBA QCBidHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fu a2V5cywKIAkgKiByYWNlIGNvbmRpdGlvbiBpbnZvbHZpbmcgVkFDVVVNIHNldHRpbmcgcGFnZXMg YWxsLXZpc2libGUgaW4gdGhlIFZNLgogCSAqIEl0J3MgYWxzbyB1bnNhZmUgZm9yIHBsYWluIGlu ZGV4IHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1WQ0Mgc25hcHNob3QuCiAJICoKLQkgKiBXaGVuIHdl IGRyb3AgcGlucyBlYWdlcmx5LCB0aGUgbWVjaGFuaXNtIHRoYXQgbWFya3Mgc28tPmtpbGxlZEl0 ZW1zW10KLQkgKiBpbmRleCB0dXBsZXMgTFBfREVBRCBoYXMgdG8gZGVhbCB3aXRoIGNvbmN1cnJl bnQgVElEIHJlY3ljbGluZyByYWNlcy4KLQkgKiBUaGUgc2NoZW1lIHVzZWQgdG8gZGV0ZWN0IHVu c2FmZSBUSUQgcmVjeWNsaW5nIHdvbid0IHdvcmsgd2hlbiBzY2FubmluZwotCSAqIHVubG9nZ2Vk IHJlbGF0aW9ucyAoc2luY2UgaXQgaW52b2x2ZXMgc2F2aW5nIGFuIGFmZmVjdGVkIHBhZ2UncyBM U04pLgotCSAqIE9wdCBvdXQgb2YgZWFnZXIgcGluIGRyb3BwaW5nIGR1cmluZyB1bmxvZ2dlZCBy ZWxhdGlvbiBzY2FucyBmb3Igbm93Ci0JICogKHRoaXMgaXMgcHJlZmVyYWJsZSB0byBvcHRpbmcg b3V0IG9mIGtpbGxfcHJpb3JfdHVwbGUgTFBfREVBRCBzZXR0aW5nKS4KLQkgKgogCSAqIEFsc28g b3B0IG91dCBvZiBkcm9wcGluZyBsZWFmIHBhZ2UgcGlucyBlYWdlcmx5IGR1cmluZyBiaXRtYXAg c2NhbnMuCiAJICogUGlucyBjYW5ub3QgYmUgaGVsZCBmb3IgbW9yZSB0aGFuIGFuIGluc3RhbnQg ZHVyaW5nIGJpdG1hcCBzY2FucyBlaXRoZXIKIAkgKiB3YXksIHNvIHdlIG1pZ2h0IGFzIHdlbGwg YXZvaWQgd2FzdGluZyBjeWNsZXMgb24gYWNxdWlyaW5nIHBhZ2UgTFNOcy4KQEAgLTQyMyw3ICs0 MTYsNiBAQCBidHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50 IG5zY2Fua2V5cywKIAkgKi8KIAlzby0+ZHJvcFBpbiA9ICghc2Nhbi0+eHNfd2FudF9pdHVwICYm CiAJCQkJICAgSXNNVkNDU25hcHNob3Qoc2Nhbi0+eHNfc25hcHNob3QpICYmCi0JCQkJICAgUmVs YXRpb25OZWVkc1dBTChzY2FuLT5pbmRleFJlbGF0aW9uKSAmJgogCQkJCSAgIHNjYW4tPmhlYXBS ZWxhdGlvbiAhPSBOVUxMKTsKIAogCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRzZWFyY2guYwppbmRleCAzMmFlMGJkYTguLjBjZWQ3YjAyYyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCkBAIC02Nyw3ICs2Nyw2IEBAIF9idF9kcm9w X2xvY2tfYW5kX21heWJlX3BpbihSZWxhdGlvbiByZWwsIEJUU2Nhbk9wYXF1ZSBzbykKIAkgKiBI YXZlIHRvIHNldCBzby0+Y3VyclBvcy5sc24gc28gdGhhdCBfYnRfa2lsbGl0ZW1zIGhhcyBhIHdh eSB0byBkZXRlY3QKIAkgKiB3aGVuIGNvbmN1cnJlbnQgaGVhcCBUSUQgcmVjeWNsaW5nIGJ5IFZB Q1VVTSBtaWdodCBoYXZlIHRha2VuIHBsYWNlLgogCSAqLwotCUFzc2VydChSZWxhdGlvbk5lZWRz V0FMKHJlbCkpOwogCXNvLT5jdXJyUG9zLmxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhzby0+Y3Vy clBvcy5idWYpOwogCV9idF9yZWxidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwogCXNvLT5jdXJy UG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idHV0aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMK aW5kZXggNWM1MGYwZGQxLi5mYzMwMmMyYWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0dXRpbHMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0 aWxzLmMKQEAgLTI1Miw3ICsyNTIsNiBAQCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nh bikKIAkJWExvZ1JlY1B0cglsYXRlc3Rsc247CiAKIAkJQXNzZXJ0KCFCVFNjYW5Qb3NJc1Bpbm5l ZChzby0+Y3VyclBvcykpOwotCQlBc3NlcnQoUmVsYXRpb25OZWVkc1dBTChyZWwpKTsKIAkJYnVm ID0gX2J0X2dldGJ1ZihyZWwsIHNvLT5jdXJyUG9zLmN1cnJQYWdlLCBCVF9SRUFEKTsKIAogCQls YXRlc3Rsc24gPSBCdWZmZXJHZXRMU05BdG9taWMoYnVmKTsKLS0gCjIuNTEuMAoK --000000000000a2454a064b95d983--