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 1vTWJq-003hrF-03 for pgsql-hackers@arkaria.postgresql.org; Thu, 11 Dec 2025 02:22:15 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vTWJo-001wjT-2E for pgsql-hackers@arkaria.postgresql.org; Thu, 11 Dec 2025 02:22:13 +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 1vTWJn-001wjK-13 for pgsql-hackers@lists.postgresql.org; Thu, 11 Dec 2025 02:22:12 +0000 Received: from mail-wm1-x333.google.com ([2a00:1450:4864:20::333]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vTWJl-0004RW-0f for pgsql-hackers@lists.postgresql.org; Thu, 11 Dec 2025 02:22:11 +0000 Received: by mail-wm1-x333.google.com with SMTP id 5b1f17b1804b1-4779adb38d3so2960605e9.2 for ; Wed, 10 Dec 2025 18:22:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bowt-ie.20230601.gappssmtp.com; s=20230601; t=1765419726; x=1766024526; 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=xxWQ2AYRe7pOn4Sy1zTFaFWz+1gKrqiw0iqg7Sxf4fY=; b=24/9gmfdjLw4hf6AmKBRCs07Q0Do8x24/ipI7HRlniX5THEoTUYKEjuPF5dVnsBnYM 0MtQG9r8LMCufQnkeum4ulruCa6tAJtvQ5UgjYrXUgCqRk/mq6TgQ033BzcUmO8G5Uv7 aInf/BUWnavrV5DJ5oZ13pP3OkjGFnijzhD6o3WbApzQWnhm+dEbNaAadkDj1TCMHl4h 5W4jKcTRLnOLSq2Sc85XCCeveHn3LyY/dwki5QZjlADMAhdorDXogt18mw4rSBfZ1lTy JceK9NbgCs3BLlaGlZjfcK/iKlpw4UJ86P+mm+1//S7hst7Sfvd0nmOMC7+M1/YnOdQ4 wneA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765419726; x=1766024526; 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=xxWQ2AYRe7pOn4Sy1zTFaFWz+1gKrqiw0iqg7Sxf4fY=; b=orykRUXJJ0VpshRXgxLfPX8MfZyl+IJ7kNdvLNt2djhjeSCO6rOLCe9tErZkotKEDn ilFMA7odoYWEXX687L+Rn7ROuvcL8/m7BUPYgJRdNyMliRSy7dJ3jtDE6bBQGJ0XpASR M6mQLLNQLKqujKL+z3X1KTJPQrl71cMtH+TbtJJzibfr8oytHoF8VPPlT0qViwZqI9jd V9qvJJODq0fYg1bGNWUwN2bPScIl4Luf3+DRh3aiJJcFM1A7cfavQrBaHvTOkoco95Dn BUtFfRMQjbxzNF/Ry9A+SiodZ424cMk9R1SAyJ4Blfs38CbKLSbDFTEEmKjMNT77YBtK r24w== X-Forwarded-Encrypted: i=1; AJvYcCV/+AU6hNFoOQutCRXJl89GHs2mcz3hLPJHBwj+uZDBPeuG+Kodq/+BBoyihY0EWu+4kvcsR2sBjzK8Y6NE@lists.postgresql.org X-Gm-Message-State: AOJu0YwoFxn8OcB4WVWH2rGEwkFhhP4DFB4KMiv+cSjrE3dV1BFhBJ7T 78skcFnZr0r4xWD/qfZsjXGvDusPRAkWIOFznj0SYG20swqUoSbt9i04sWkDcVC6MjVlc4eZVI1 CzGrUtie+fcUZlDuxXVO54G8l4VGfUprX88XcPmE93A== X-Gm-Gg: AY/fxX6VbBAgYp2ZS/rrtrRPv2oHdP1Sze60hVvWfYvu8Apbi4DJ5Mceu1Exvpq09ld sPhUCe4ROUpbPD0oGQ8gPDAfiCwUZoCt5gYlQkEH8iDT96rnyRXldSjsjLyOfz+bJ7S3q6DgLKz 2Au2s5+NjABD3CYrSHSN+DpQmOgiSFK8id7VYCEaA0xvvCac+bnlNIKzfDY7OYsVhJ65g74PNRB HNciViLPD4hfR/XO+fTGkxhMarS2HQ6nEi7bWsRgqpbIxIFU3BSo9e/+Om3SwfsfE/J2rU= X-Google-Smtp-Source: AGHT+IGq8dUAICplyhVzFurMKaErR6FNrvjTVH4yd4TAXMLQ1sGySh9LpGPEog3x8dDJidMspMapaEg95nZlD5MM8/U= X-Received: by 2002:a05:6000:608:b0:429:b9bc:e826 with SMTP id ffacd0b85a97d-42fa3b079c1mr5084126f8f.53.1765419726434; Wed, 10 Dec 2025 18:22:06 -0800 (PST) MIME-Version: 1.0 References: <6d59c277-c440-4d1f-a46e-157958c06a5f@vondra.me> <5pltwb73d7cynsxo2yb54ygjk7haviatkrx43mnzihc6kkield@ahnstpgof46i> <931afce3-8c86-4c96-9861-0ffa17c6560f@vondra.me> <4zeu5yb73byiquvf3eefsunnrydyqfxy3eup66jrliutrtd4xl@5iifjey4n5m5> In-Reply-To: From: Peter Geoghegan Date: Wed, 10 Dec 2025 21:21:39 -0500 X-Gm-Features: AQt7F2qbw6pmZ9si5SsGPsLu8-qulSY1GYH6LDH5xjz-ZXdegVCYEwxrC_xLe2A Message-ID: Subject: Re: index prefetching To: Tomas Vondra Cc: Andres Freund , Thomas Munro , Nazir Bilal Yavuz , Robert Haas , Melanie Plageman , PostgreSQL Hackers , Georgios , Konstantin Knizhnik , Dilip Kumar Content-Type: multipart/mixed; boundary="000000000000acefda0645a3cfd4" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000acefda0645a3cfd4 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Dec 10, 2025 at 5:41=E2=80=AFPM Peter Geoghegan wrote: > Attached is v3. This is another revision whose sole purpose is to keep > the patch applying cleanly. No real changes compared to v1 to report > here, either. Attached is v4. Same story again (another bitrot-fix-only revision). --=20 Peter Geoghegan --000000000000acefda0645a3cfd4 Content-Type: application/octet-stream; name="v4-0003-bufmgr-aio-Prototype-for-not-waiting-for-already-.patch" Content-Disposition: attachment; filename="v4-0003-bufmgr-aio-Prototype-for-not-waiting-for-already-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mj0taoso2 RnJvbSA4ZGNkNTYwYmIzOWMyNDlmNWQwNmYwMmZkYmUzOWQyZTY5NTA2YzMxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IEZyaSwgMTUgQXVnIDIwMjUgMTE6MDE6NTIgLTA0MDAKU3ViamVjdDogW1BBVENIIHY0IDMv NF0gYnVmbWdyOiBhaW86IFByb3RvdHlwZSBmb3Igbm90IHdhaXRpbmcgZm9yCiBhbHJlYWR5LWlu LXByb2dyZXNzIElPCgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bv c3Rnci5lcy9tL3psamVyZ3dlcXRpN3g2N2xnNWlqZTJyemp1c2llMzduc2xzbmtqa2tieTRsYXFx YmZ3QDNwM3p1NTIyeXlrdgpCYWNrcGF0Y2g6Ci0tLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZt Z3IuaCAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMg fCAxNTAgKysrKysrKysrKysrKysrKysrKysrKysrKystLQogMiBmaWxlcyBjaGFuZ2VkLCAxNDIg aW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9z dG9yYWdlL2J1Zm1nci5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAppbmRleCA5N2Mx MTI0YzEuLjFlZjNlYmM4ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3Iu aAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCkBAIC0xNDcsNiArMTQ3LDcgQEAg c3RydWN0IFJlYWRCdWZmZXJzT3BlcmF0aW9uCiAJaW50CQkJZmxhZ3M7CiAJaW50MTYJCW5ibG9j a3M7CiAJaW50MTYJCW5ibG9ja3NfZG9uZTsKKwlib29sCQlmb3JlaWduX2lvOwogCVBnQWlvV2Fp dFJlZiBpb193cmVmOwogCVBnQWlvUmV0dXJuIGlvX3JldHVybjsKIH07CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zm1nci5jCmluZGV4IGNlNTJkNmNhOC4uYjRmODExMmJlIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9idWZtZ3IuYwpAQCAtMTUzOCw2ICsxNTM4LDQ2IEBAIFJlYWRCdWZmZXJzQ2Fu U3RhcnRJT09uY2UoQnVmZmVyIGJ1ZmZlciwgYm9vbCBub3dhaXQpCiAJCXJldHVybiBTdGFydEJ1 ZmZlcklPKEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVyIC0gMSksIHRydWUsIG5vd2FpdCk7CiB9 CiAKKy8qCisgKiBDaGVjayBpZiB0aGUgYnVmZmVyIGlzIGFscmVhZHkgdW5kZXJnb2luZyByZWFk IEFJTy4gSWYgaXQgaXMsIGFzc2lnbiB0aGUKKyAqIElPJ3Mgd2FpdCByZWZlcmVuY2UgdG8gb3Bl cmF0aW9uLT5pb193cmVmLCB0aGVyZWJ5IGFsbG93aW5nIHRoZSBjYWxsZXIgdG8KKyAqIHdhaXQg Zm9yIHRoYXQgSU8uCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorUmVhZEJ1ZmZlcnNJT0FscmVh ZHlJblByb2dyZXNzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sIEJ1ZmZlciBidWZm ZXIpCit7CisJQnVmZmVyRGVzYyAqZGVzYzsKKwl1aW50MzIJCWJ1Zl9zdGF0ZTsKKwlQZ0Fpb1dh aXRSZWYgaW93OworCisJcGdhaW9fd3JlZl9jbGVhcigmaW93KTsKKworCWlmIChCdWZmZXJJc0xv Y2FsKGJ1ZmZlcikpCisJeworCQlkZXNjID0gR2V0TG9jYWxCdWZmZXJEZXNjcmlwdG9yKC1idWZm ZXIgLSAxKTsKKwkJYnVmX3N0YXRlID0gcGdfYXRvbWljX3JlYWRfdTMyKCZkZXNjLT5zdGF0ZSk7 CisJCWlmICgoYnVmX3N0YXRlICYgQk1fSU9fSU5fUFJPR1JFU1MpICYmICEoYnVmX3N0YXRlICYg Qk1fVkFMSUQpKQorCQkJaW93ID0gZGVzYy0+aW9fd3JlZjsKKwl9CisJZWxzZQorCXsKKwkJZGVz YyA9IEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVyIC0gMSk7CisJCWJ1Zl9zdGF0ZSA9IExvY2tC dWZIZHIoZGVzYyk7CisKKwkJaWYgKChidWZfc3RhdGUgJiBCTV9JT19JTl9QUk9HUkVTUykgJiYg IShidWZfc3RhdGUgJiBCTV9WQUxJRCkpCisJCQlpb3cgPSBkZXNjLT5pb193cmVmOworCQlVbmxv Y2tCdWZIZHIoZGVzYyk7CisJfQorCisJaWYgKHBnYWlvX3dyZWZfdmFsaWQoJmlvdykpCisJewor CQlvcGVyYXRpb24tPmlvX3dyZWYgPSBpb3c7CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVy biBmYWxzZTsKK30KKwogLyoKICAqIEhlbHBlciBmb3IgQXN5bmNSZWFkQnVmZmVycyB0aGF0IHRy aWVzIHRvIGdldCB0aGUgYnVmZmVyIHJlYWR5IGZvciBJTy4KICAqLwpAQCAtMTY3MCw3ICsxNzEw LDcgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiAJ CQkgKgogCQkJICogd2UgZmlyc3QgY2hlY2sgaWYgd2UgYWxyZWFkeSBrbm93IHRoZSBJTyBpcyBj b21wbGV0ZS4KIAkJCSAqLwotCQkJaWYgKGFpb19yZXQtPnJlc3VsdC5zdGF0dXMgPT0gUEdBSU9f UlNfVU5LTk9XTiAmJgorCQkJaWYgKChvcGVyYXRpb24tPmZvcmVpZ25faW8gfHwgYWlvX3JldC0+ cmVzdWx0LnN0YXR1cyA9PSBQR0FJT19SU19VTktOT1dOKSAmJgogCQkJCSFwZ2Fpb193cmVmX2No ZWNrX2RvbmUoJm9wZXJhdGlvbi0+aW9fd3JlZikpCiAJCQl7CiAJCQkJaW5zdHJfdGltZQlpb19z dGFydCA9IHBnc3RhdF9wcmVwYXJlX2lvX3RpbWUodHJhY2tfaW9fdGltaW5nKTsKQEAgLTE2ODks MTEgKzE3MjksNjYgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVy YXRpb24pCiAJCQkJQXNzZXJ0KHBnYWlvX3dyZWZfY2hlY2tfZG9uZSgmb3BlcmF0aW9uLT5pb193 cmVmKSk7CiAJCQl9CiAKLQkJCS8qCi0JCQkgKiBXZSBub3cgYXJlIHN1cmUgdGhlIElPIGNvbXBs ZXRlZC4gQ2hlY2sgdGhlIHJlc3VsdHMuIFRoaXMKLQkJCSAqIGluY2x1ZGVzIHJlcG9ydGluZyBv biBlcnJvcnMgaWYgdGhlcmUgd2VyZSBhbnkuCi0JCQkgKi8KLQkJCVByb2Nlc3NSZWFkQnVmZmVy c1Jlc3VsdChvcGVyYXRpb24pOworCQkJaWYgKHVubGlrZWx5KG9wZXJhdGlvbi0+Zm9yZWlnbl9p bykpCisJCQl7CisJCQkJQnVmZmVyCQlidWZmZXIgPSBvcGVyYXRpb24tPmJ1ZmZlcnNbb3BlcmF0 aW9uLT5uYmxvY2tzX2RvbmVdOworCQkJCUJ1ZmZlckRlc2MgKmRlc2M7CisJCQkJdWludDMyCQli dWZfc3RhdGU7CisKKwkJCQlpZiAoQnVmZmVySXNMb2NhbChidWZmZXIpKQorCQkJCXsKKwkJCQkJ ZGVzYyA9IEdldExvY2FsQnVmZmVyRGVzY3JpcHRvcigtYnVmZmVyIC0gMSk7CisJCQkJCWJ1Zl9z dGF0ZSA9IHBnX2F0b21pY19yZWFkX3UzMigmZGVzYy0+c3RhdGUpOworCQkJCX0KKwkJCQllbHNl CisJCQkJeworCQkJCQlkZXNjID0gR2V0QnVmZmVyRGVzY3JpcHRvcihidWZmZXIgLSAxKTsKKwkJ CQkJYnVmX3N0YXRlID0gTG9ja0J1ZkhkcihkZXNjKTsKKwkJCQkJVW5sb2NrQnVmSGRyKGRlc2Mp OworCQkJCX0KKworCQkJCWlmIChidWZfc3RhdGUgJiBCTV9WQUxJRCkKKwkJCQl7CisJCQkJCW9w ZXJhdGlvbi0+bmJsb2Nrc19kb25lICs9IDE7CisJCQkJCUFzc2VydChvcGVyYXRpb24tPm5ibG9j a3NfZG9uZSA8PSBvcGVyYXRpb24tPm5ibG9ja3MpOworCisJCQkJCS8qCisJCQkJCSAqIFJlcG9y dCBhbmQgdHJhY2sgdGhpcyBhcyBhICdoaXQnIGZvciB0aGlzIGJhY2tlbmQsIGV2ZW4KKwkJCQkJ ICogdGhvdWdoIGl0IG11c3QgaGF2ZSBzdGFydGVkIG91dCBhcyBhIG1pc3MgaW4KKwkJCQkJICog UGluQnVmZmVyRm9yQmxvY2soKS4gVGhlIG90aGVyIGJhY2tlbmQgKG9yIG91cnNlbHZlcywKKwkJ CQkJICogYXMgcGFydCBvZiBhIHJlYWQgc3RhcnRlZCBlYXJsaWVyKSB3aWxsIHRyYWNrIHRoaXMg YXMgYQorCQkJCQkgKiAncmVhZCcuCisJCQkJCSAqLworCQkJCQlUUkFDRV9QT1NUR1JFU1FMX0JV RkZFUl9SRUFEX0RPTkUob3BlcmF0aW9uLT5mb3JrbnVtLAorCQkJCQkJCQkJCQkJCSAgb3BlcmF0 aW9uLT5ibG9ja251bSArIG9wZXJhdGlvbi0+bmJsb2Nrc19kb25lLAorCQkJCQkJCQkJCQkJCSAg b3BlcmF0aW9uLT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAorCQkJCQkJCQkJ CQkJCSAgb3BlcmF0aW9uLT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCisJCQkJ CQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1i ZXIsCisJCQkJCQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0b3IuYmFja2Vu ZCwKKwkJCQkJCQkJCQkJCQkgIHRydWUpOworCisJCQkJCWlmIChCdWZmZXJJc0xvY2FsKGJ1ZmZl cikpCisJCQkJCQlwZ0J1ZmZlclVzYWdlLmxvY2FsX2Jsa3NfaGl0ICs9IDE7CisJCQkJCWVsc2UK KwkJCQkJCXBnQnVmZmVyVXNhZ2Uuc2hhcmVkX2Jsa3NfaGl0ICs9IDE7CisKKwkJCQkJaWYgKG9w ZXJhdGlvbi0+cmVsKQorCQkJCQkJcGdzdGF0X2NvdW50X2J1ZmZlcl9oaXQob3BlcmF0aW9uLT5y ZWwpOworCisJCQkJCXBnc3RhdF9jb3VudF9pb19vcChpb19vYmplY3QsIGlvX2NvbnRleHQsIElP T1BfSElULCAxLCAwKTsKKworCQkJCQlpZiAoVmFjdXVtQ29zdEFjdGl2ZSkKKwkJCQkJCVZhY3V1 bUNvc3RCYWxhbmNlICs9IFZhY3V1bUNvc3RQYWdlSGl0OworCQkJCX0KKwkJCX0KKwkJCWVsc2UK KwkJCXsKKwkJCQkvKgorCQkJCSAqIFdlIG5vdyBhcmUgc3VyZSB0aGUgSU8gY29tcGxldGVkLiBD aGVjayB0aGUgcmVzdWx0cy4gVGhpcworCQkJCSAqIGluY2x1ZGVzIHJlcG9ydGluZyBvbiBlcnJv cnMgaWYgdGhlcmUgd2VyZSBhbnkuCisJCQkJICovCisJCQkJUHJvY2Vzc1JlYWRCdWZmZXJzUmVz dWx0KG9wZXJhdGlvbik7CisJCQl9CiAJCX0KIAogCQkvKgpAQCAtMTc3OSw2ICsxODc0LDQzIEBA IEFzeW5jUmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwgaW50ICpu YmxvY2tzX3Byb2dyZXNzKQogCQlpb19vYmplY3QgPSBJT09CSkVDVF9SRUxBVElPTjsKIAl9CiAK KwkvKgorCSAqIElmIEFJTyBpcyBpbiBwcm9ncmVzcywgYmUgaXQgaW4gdGhpcyBiYWNrZW5kIG9y IGFub3RoZXIgYmFja2VuZCwgd2UKKwkgKiBqdXN0IGFzc29jaWF0ZSB0aGUgd2FpdCByZWZlcmVu Y2Ugd2l0aCB0aGUgb3BlcmF0aW9uIGFuZCB3YWl0IGluCisJICogV2FpdFJlYWRCdWZmZXJzKCku IFRoaXMgdHVybnMgb3V0IHRvIGJlIGltcG9ydGFudCBmb3IgcGVyZm9ybWFuY2UgaW4KKwkgKiB0 d28gd29ya2xvYWRzOgorCSAqCisJICogMSkgQSByZWFkIHN0cmVhbSB0aGF0IGhhcyB0byByZWFk IHRoZSBzYW1lIGJsb2NrIG11bHRpcGxlIHRpbWVzIHdpdGhpbgorCSAqIHRoZSByZWFkYWhlYWQg ZGlzdGFuY2UuIFRoaXMgY2FuIGhhcHBlbiBlLmcuIGZvciB0aGUgdGFibGUgYWNjZXNzZXMgb2YK KwkgKiBhbiBpbmRleCBzY2FuLgorCSAqCisJICogMikgQ29uY3VycmVudCBzY2FucyBieSBtdWx0 aXBsZSBiYWNrZW5kcyBvbiB0aGUgc2FtZSByZWxhdGlvbi4KKwkgKgorCSAqIElmIHdlIHdlcmUg dG8gc3luY2hyb25vdXNseSB3YWl0IGZvciB0aGUgaW4tcHJvZ3Jlc3MgSU8sIHdlJ2Qgbm90IGJl CisJICogYWJsZSB0byBrZWVwIGVub3VnaCBJL08gaW4gZmxpZ2h0LgorCSAqCisJICogSWYgd2Ug ZG8gZmluZCB0aGVyZSBpcyBvbmdvaW5nIEkvTyBmb3IgdGhlIGJ1ZmZlciwgd2Ugc2V0IHVwIGEg MS1ibG9jaworCSAqIFJlYWRCdWZmZXJzT3BlcmF0aW9uIHRoYXQgV2FpdFJlYWRCdWZmZXJzIHRo ZW4gY2FuIHdhaXQgb24uCisJICoKKwkgKiBJdCdzIHBvc3NpYmxlIHRoYXQgYW5vdGhlciBiYWNr ZW5kIHN0YXJ0cyBJTyBvbiB0aGUgYnVmZmVyIGJldHdlZW4gdGhpcworCSAqIGNoZWNrIGFuZCB0 aGUgUmVhZEJ1ZmZlcnNDYW5TdGFydElPKG5vd2FpdCA9IGZhbHNlKSBiZWxvdy4gSW4gdGhhdCBj YXNlCisJICogd2Ugd2lsbCBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHRoZSBJTyBiZWxvdywgYnV0 IHRoZSB3aW5kb3cgZm9yIHRoYXQgaXMKKwkgKiBzbWFsbCBlbm91Z2ggdGhhdCBpdCB3b24ndCBo YXBwZW4gb2Z0ZW4gZW5vdWdoIHRvIGhhdmUgYSBzaWduaWZpY2FudAorCSAqIHBlcmZvcm1hbmNl IGltcGFjdC4KKwkgKi8KKwlpZiAoUmVhZEJ1ZmZlcnNJT0FscmVhZHlJblByb2dyZXNzKG9wZXJh dGlvbiwgYnVmZmVyc1tuYmxvY2tzX2RvbmVdKSkKKwl7CisJCSpuYmxvY2tzX3Byb2dyZXNzID0g MTsKKwkJb3BlcmF0aW9uLT5mb3JlaWduX2lvID0gdHJ1ZTsKKworCQlDaGVja1JlYWRCdWZmZXJz T3BlcmF0aW9uKG9wZXJhdGlvbiwgZmFsc2UpOworCisKKwkJcmV0dXJuIHRydWU7CisJfQorCisJ b3BlcmF0aW9uLT5mb3JlaWduX2lvID0gZmFsc2U7CisKIAkvKgogCSAqIElmIHplcm9fZGFtYWdl ZF9wYWdlcyBpcyBlbmFibGVkLCBhZGQgdGhlIFJFQURfQlVGRkVSU19aRVJPX09OX0VSUk9SCiAJ ICogZmxhZy4gVGhlIHJlYXNvbiBmb3IgdGhhdCBpcyB0aGF0LCBob3BlZnVsbHksIHplcm9fZGFt YWdlZF9wYWdlcyBpc24ndApAQCAtMTgzNiw5ICsxOTY4LDkgQEAgQXN5bmNSZWFkQnVmZmVycyhS ZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpCiAJ LyoKIAkgKiBDaGVjayBpZiB3ZSBjYW4gc3RhcnQgSU8gb24gdGhlIGZpcnN0IHRvLWJlLXJlYWQg YnVmZmVyLgogCSAqCi0JICogSWYgYW4gSS9PIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MgaW4gYW5v dGhlciBiYWNrZW5kLCB3ZSB3YW50IHRvIHdhaXQKLQkgKiBmb3IgdGhlIG91dGNvbWU6IGVpdGhl ciBkb25lLCBvciBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgd2Ugd2lsbAotCSAqIHJldHJ5Lgor CSAqIElmIGEgc3luY2hyb25vdXMgSS9PIGlzIGluIHByb2dyZXNzIGluIGFub3RoZXIgYmFja2Vu ZCAoaXQgY2FuJ3QgYmUKKwkgKiB0aGlzIGJhY2tlbmQpLCB3ZSB3YW50IHRvIHdhaXQgZm9yIHRo ZSBvdXRjb21lOiBlaXRoZXIgZG9uZSwgb3IKKwkgKiBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQg d2Ugd2lsbCByZXRyeS4KIAkgKi8KIAlpZiAoIVJlYWRCdWZmZXJzQ2FuU3RhcnRJTyhidWZmZXJz W25ibG9ja3NfZG9uZV0sIGZhbHNlKSkKIAl7Ci0tIAoyLjUxLjAKCg== --000000000000acefda0645a3cfd4 Content-Type: application/octet-stream; name="v4-0004-Add-amgetbatch-support-to-hash-index-AM.patch" Content-Disposition: attachment; filename="v4-0004-Add-amgetbatch-support-to-hash-index-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mj0taosk1 RnJvbSA5NTQ3NjA2OWQ3Mjk1ODJmYTI5ZmE2ODIzMzY3YjJlZmExNzg3NmRlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMjUgTm92IDIwMjUgMTg6MDM6MTUgLTA1MDAKU3ViamVjdDogW1BBVENIIHY0IDQvNF0gQWRk IGFtZ2V0YmF0Y2ggc3VwcG9ydCB0byBoYXNoIGluZGV4IEFNLgoKVGhpcyBwYXRjaCBzaG91bGQg YmUgY29uc2lkZXJlZCBhIHdvcmsgaW4gcHJvZ3Jlc3MuICBJdCBoYXMgb25seSBiZWVuCmxpZ2h0 bHkgdGVzdGVkLCBhbmQgaXQncyBub3QgY2xlYXIgaWYgSSd2ZSBhY2NvdW50ZWQgZm9yIGFsbCBv ZiB0aGUKaW50cmljYWNpZXMgd2l0aCBidWNrZXQgc3BsaXRzIChhbmQgd2l0aCBwaW5zIHRoYXQg YXJlIGhlbGQgYnkgdGhlCnNjYW4ncyBvcGFxdWUgc3RhdGUgbW9yZSBnZW5lcmFsbHkpLgoKVGhp cyBhdXRvbWF0aWNhbGx5IHN3aXRjaGVkIGhhc2ggaW5kZXhlcyBvdmVyIHRvIHVzaW5nIHRoZSBk cm9wUGluCm9wdGltaXphdGlvbiwgc2luY2UgdGhhdCBpcyBzdGFuZGFyZCB3aGVuIHVzaW5nIHRo ZSBuZXcgYW1nZXRiYXRjaAppbnRlcmZhY2UuICBUaGlzIHdvbid0IGJyaW5nIHNpbWlsYXIgYmVu ZWZpdHMgdG8gaGFzaCBpbmRleCBzY2FucyB0aGF0Cm5idHJlZSBpbmRleCBzY2FucyBnYWluZWQg d2hlbiBjb21taXQgMmVkNWI4N2Ygd2VudCBpbi4gIEhhc2ggaW5kZXgKdmFjdXVtaW5nIGFjcXVp cmVzIGEgY2xlYW51cCBsb2NrIG9uIGJ1Y2tldCBwYWdlcywgYnV0IGNvbmZsaWN0aW5nIHBpbnMK b24gYnVja2V0IHBhZ2VzIGFyZSBzdGlsbCBoZWxkIGZvciB0aGUgZnVsbCBkdXJhdGlvbiBvZiBl YWNoIGluZGV4IHNjYW4uCgpIb3dldmVyLCB0aGVyZSBpcyBzdGlsbCBpbmRlcGVuZGVudCB2YWx1 ZSBpbiBhdm9pZGluZyBob2xkaW5nIG9uIHRvCmJ1ZmZlciBwaW5zIGR1cmluZyBpbmRleCBzY2Fu czogaW5kZXggcHJlZmV0Y2hpbmcgdGVuZHMgdG8gaG9sZCBvcGVuCmFzIG1hbnkgYXMgc2V2ZXJh bCBkb3plbiBiYXRjaGVzIHdpdGggY2VydGFpbiB3b3JrbG9hZHMgKHdvcmtsb2FkcyB3aGVyZQp0 aGUgc3RyZWFtIHBvc2l0aW9uIGhhcyB0byBnZXQgcXVpdGUgZmFyIGFoZWFkIG9mIHRoZSByZWFk IHBvc2l0aW9uIGluCm9yZGVyIHRvIG1haW50YWluIHRoZSBhcHByb3ByaWF0ZSBwcmVmZXRjaCBk aXN0YW5jZSBvbiB0aGUgaGVhcGFtIHNpZGUpLgpHdWFyYW50ZWVpbmcgdGhhdCBvcGVuIGJhdGNo ZXMgd29uJ3QgaG9sZCBidWZmZXIgcGlucyBvbiBpbmRleCBwYWdlcyAoYXQKbGVhc3QgZHVyaW5n IHBsYWluIGluZGV4IHNjYW5zIHRoYXQgdXNlIGFuIE1WQ0Mgc25hcHNob3QsIHBlciB0aGUgcnVs ZXMKZXN0YWJsaXNoZWQgYnkgY29tbWl0IDJlZDViODdmKSBpcyBsaWtlbHkgdG8gbWFrZSBsaWZl IGVhc2llciB3aGVuIHRoZQpyZXNvdXJjZSBtYW5hZ2VtZW50IHJ1bGVzIGZvciBJL08gcHJlZmV0 Y2hpbmcgYXJlIGZ1bGx5IGlyb25lZC1vdXQuCgpOb3RlIHRoYXQgdGhlIGNvZGUgcGF0aCBpbiBf aGFzaF9raWxsX2l0ZW1zIHRoYXQgY2FsbHMgX2hhc2hfZ2V0YnVmCih0aG91Z2ggb25seSB3aXRo IHRoZSBMSF9PVkVSRkxPV19QQUdFIGZsYWcvb3ZlcmZsb3cgcGFnZXMpIGlzIGRlYWQKY29kZS92 ZXN0aWdpYWwgb24gbWFzdGVyIFsxXS4gIEhvd2V2ZXIsIGl0J3Mgbm93IHVzZWZ1bCBhZ2Fpbiwg c2luY2UKX2hhc2hfa2lsbF9pdGVtcyBtaWdodCBub3cgbmVlZCB0byByZWxvY2sgYW5kIHJlcGlu IGFuIG92ZXJmbG93IHBhZ2UKKG5vdCBqdXN0IHJlbG9jayBpdCkgZHVyaW5nIGRyb3BQaW4gc2Nh bnMuCgpbMV0gaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6PThtZWZ5OFFVY3NuS0xUZVB1eTR0 RThwZE8rZ1NSUTl5UXdVSG9hZUZURndAbWFpbC5nbWFpbC5jb20KCkF1dGhvcjogUGV0ZXIgR2Vv Z2hlZ2FuIDxwZ0Bib3d0LmllPgotLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmggICAgICAg ICAgICB8ICA3MyArLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgICAgICAg fCAxMjIgKysrKy0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jICAg fCAgMTkgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYyB8IDI4NyArKysr KysrKysrKystLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGls LmMgICB8ICA5OCArKysrLS0tLS0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAg ICB8ICAgMiAtCiA2IGZpbGVzIGNoYW5nZWQsIDIzOSBpbnNlcnRpb25zKCspLCAzNjIgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaCBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9oYXNoLmgKaW5kZXggODM5YzM0MzEyLi4wM2Y4YmM5YjMgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2gu aApAQCAtMTAwLDU4ICsxMDAsNiBAQCB0eXBlZGVmIEhhc2hQYWdlT3BhcXVlRGF0YSAqSGFzaFBh Z2VPcGFxdWU7CiAgKi8KICNkZWZpbmUgSEFTSE9fUEFHRV9JRAkJMHhGRjgwCiAKLXR5cGVkZWYg c3RydWN0IEhhc2hTY2FuUG9zSXRlbQkvKiB3aGF0IHdlIHJlbWVtYmVyIGFib3V0IGVhY2ggbWF0 Y2ggKi8KLXsKLQlJdGVtUG9pbnRlckRhdGEgaGVhcFRpZDsJLyogVElEIG9mIHJlZmVyZW5jZWQg aGVhcCBpdGVtICovCi0JT2Zmc2V0TnVtYmVyIGluZGV4T2Zmc2V0OwkvKiBpbmRleCBpdGVtJ3Mg bG9jYXRpb24gd2l0aGluIHBhZ2UgKi8KLX0gSGFzaFNjYW5Qb3NJdGVtOwotCi10eXBlZGVmIHN0 cnVjdCBIYXNoU2NhblBvc0RhdGEKLXsKLQlCdWZmZXIJCWJ1ZjsJCQkvKiBpZiB2YWxpZCwgdGhl IGJ1ZmZlciBpcyBwaW5uZWQgKi8KLQlCbG9ja051bWJlciBjdXJyUGFnZTsJCS8qIGN1cnJlbnQg aGFzaCBpbmRleCBwYWdlICovCi0JQmxvY2tOdW1iZXIgbmV4dFBhZ2U7CQkvKiBuZXh0IG92ZXJm bG93IHBhZ2UgKi8KLQlCbG9ja051bWJlciBwcmV2UGFnZTsJCS8qIHByZXYgb3ZlcmZsb3cgb3Ig YnVja2V0IHBhZ2UgKi8KLQotCS8qCi0JICogVGhlIGl0ZW1zIGFycmF5IGlzIGFsd2F5cyBvcmRl cmVkIGluIGluZGV4IG9yZGVyIChpZSwgaW5jcmVhc2luZwotCSAqIGluZGV4b2Zmc2V0KS4gIFdo ZW4gc2Nhbm5pbmcgYmFja3dhcmRzIGl0IGlzIGNvbnZlbmllbnQgdG8gZmlsbCB0aGUKLQkgKiBh cnJheSBiYWNrLXRvLWZyb250LCBzbyB3ZSBzdGFydCBhdCB0aGUgbGFzdCBzbG90IGFuZCBmaWxs IGRvd253YXJkcy4KLQkgKiBIZW5jZSB3ZSBuZWVkIGJvdGggYSBmaXJzdC12YWxpZC1lbnRyeSBh bmQgYSBsYXN0LXZhbGlkLWVudHJ5IGNvdW50ZXIuCi0JICogaXRlbUluZGV4IGlzIGEgY3Vyc29y IHNob3dpbmcgd2hpY2ggZW50cnkgd2FzIGxhc3QgcmV0dXJuZWQgdG8gY2FsbGVyLgotCSAqLwot CWludAkJCWZpcnN0SXRlbTsJCS8qIGZpcnN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KLQlp bnQJCQlsYXN0SXRlbTsJCS8qIGxhc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAqLwotCWludAkJ CWl0ZW1JbmRleDsJCS8qIGN1cnJlbnQgaW5kZXggaW4gaXRlbXNbXSAqLwotCi0JSGFzaFNjYW5Q b3NJdGVtIGl0ZW1zW01heEluZGV4VHVwbGVzUGVyUGFnZV07CS8qIE1VU1QgQkUgTEFTVCAqLwot fSBIYXNoU2NhblBvc0RhdGE7Ci0KLSNkZWZpbmUgSGFzaFNjYW5Qb3NJc1Bpbm5lZChzY2FucG9z KSBcCi0oIFwKLQlBc3NlcnRNYWNybyhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQ YWdlKSB8fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBcCi0JQnVmZmVy SXNWYWxpZCgoc2NhbnBvcykuYnVmKSBcCi0pCi0KLSNkZWZpbmUgSGFzaFNjYW5Qb3NJc1ZhbGlk KHNjYW5wb3MpIFwKLSggXAotCUFzc2VydE1hY3JvKEJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBv cykuY3VyclBhZ2UpIHx8IFwKLQkJCQkhQnVmZmVySXNWYWxpZCgoc2NhbnBvcykuYnVmKSksIFwK LQlCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSBcCi0pCi0KLSNkZWZpbmUg SGFzaFNjYW5Qb3NJbnZhbGlkYXRlKHNjYW5wb3MpIFwKLQlkbyB7IFwKLQkJKHNjYW5wb3MpLmJ1 ZiA9IEludmFsaWRCdWZmZXI7IFwKLQkJKHNjYW5wb3MpLmN1cnJQYWdlID0gSW52YWxpZEJsb2Nr TnVtYmVyOyBcCi0JCShzY2FucG9zKS5uZXh0UGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsgXAot CQkoc2NhbnBvcykucHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7IFwKLQkJKHNjYW5wb3Mp LmZpcnN0SXRlbSA9IDA7IFwKLQkJKHNjYW5wb3MpLmxhc3RJdGVtID0gMDsgXAotCQkoc2NhbnBv cykuaXRlbUluZGV4ID0gMDsgXAotCX0gd2hpbGUgKDApCi0KIC8qCiAgKglIYXNoU2Nhbk9wYXF1 ZURhdGEgaXMgcHJpdmF0ZSBzdGF0ZSBmb3IgYSBoYXNoIGluZGV4IHNjYW4uCiAgKi8KQEAgLTE3 OCwxNSArMTI2LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSGFzaFNjYW5PcGFxdWVEYXRhCiAJICogcmVm ZXJyZWQgb25seSB3aGVuIGhhc2hzb19idWNfcG9wdWxhdGVkIGlzIHRydWUuCiAJICovCiAJYm9v bAkJaGFzaHNvX2J1Y19zcGxpdDsKLQkvKiBpbmZvIGFib3V0IGtpbGxlZCBpdGVtcyBpZiBhbnkg KGtpbGxlZEl0ZW1zIGlzIE5VTEwgaWYgbmV2ZXIgdXNlZCkgKi8KLQlpbnQJCSAgICpraWxsZWRJ dGVtczsJLyogY3VyclBvcy5pdGVtcyBpbmRleGVzIG9mIGtpbGxlZCBpdGVtcyAqLwotCWludAkJ CW51bUtpbGxlZDsJCS8qIG51bWJlciBvZiBjdXJyZW50bHkgc3RvcmVkIGl0ZW1zICovCi0KLQkv KgotCSAqIElkZW50aWZ5IGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgb24gYSBwYWdlIGFuZCBzYXZl IHRoZW0gaW4KLQkgKiBIYXNoU2NhblBvc0RhdGEKLQkgKi8KLQlIYXNoU2NhblBvc0RhdGEgY3Vy clBvczsJLyogY3VycmVudCBwb3NpdGlvbiBkYXRhICovCiB9IEhhc2hTY2FuT3BhcXVlRGF0YTsK IAogdHlwZWRlZiBIYXNoU2Nhbk9wYXF1ZURhdGEgKkhhc2hTY2FuT3BhcXVlOwpAQCAtMzY4LDEx ICszMDcsMTQgQEAgZXh0ZXJuIGJvb2wgaGFzaGluc2VydChSZWxhdGlvbiByZWwsIERhdHVtICp2 YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIAkJCQkJICAgSW5kZXhVbmlxdWVDaGVjayBjaGVja1VuaXF1 ZSwKIAkJCQkJICAgYm9vbCBpbmRleFVuY2hhbmdlZCwKIAkJCQkJICAgc3RydWN0IEluZGV4SW5m byAqaW5kZXhJbmZvKTsKLWV4dGVybiBib29sIGhhc2hnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBCYXRjaEluZGV4U2NhbiBoYXNoZ2V0YmF0 Y2goSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkgICBCYXRjaEluZGV4U2NhbiBwcmlvcmJh dGNoLAorCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50NjQgaGFzaGdl dGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKTsKIGV4dGVybiBJbmRl eFNjYW5EZXNjIGhhc2hiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3Jk ZXJieXMpOwogZXh0ZXJuIHZvaWQgaGFzaHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5L ZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkJCQkJICAgU2NhbktleSBvcmRlcmJ5cywgaW50 IG5vcmRlcmJ5cyk7CitleHRlcm4gdm9pZCBoYXNoZnJlZWJhdGNoKEluZGV4U2NhbkRlc2Mgc2Nh biwgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpOwogZXh0ZXJuIHZvaWQgaGFzaGVuZHNjYW4oSW5kZXhT Y2FuRGVzYyBzY2FuKTsKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmhhc2hidWxrZGVs ZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKIAkJCQkJCQkJCQkJIEluZGV4QnVsa0RlbGV0ZVJl c3VsdCAqc3RhdHMsCkBAIC00NDUsOCArMzg3LDkgQEAgZXh0ZXJuIHZvaWQgX2hhc2hfZmluaXNo X3NwbGl0KFJlbGF0aW9uIHJlbCwgQnVmZmVyIG1ldGFidWYsIEJ1ZmZlciBvYnVmLAogCQkJCQkJ CSAgIHVpbnQzMiBsb3dtYXNrKTsKIAogLyogaGFzaHNlYXJjaC5jICovCi1leHRlcm4gYm9vbCBf aGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwotZXh0ZXJu IGJvb2wgX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7 CitleHRlcm4gQmF0Y2hJbmRleFNjYW4gX2hhc2hfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCQkgQmF0Y2hJbmRleFNjYW4gcHJpb3JiYXRjaCk7Citl eHRlcm4gQmF0Y2hJbmRleFNjYW4gX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcik7CiAKIC8qIGhhc2hzb3J0LmMgKi8KIHR5cGVkZWYgc3RydWN0IEhTcG9v bCBIU3Bvb2w7CS8qIG9wYXF1ZSBzdHJ1Y3QgaW4gaGFzaHNvcnQuYyAqLwpAQCAtNDc2LDcgKzQx OSw3IEBAIGV4dGVybiBCbG9ja051bWJlciBfaGFzaF9nZXRfb2xkYmxvY2tfZnJvbV9uZXdidWNr ZXQoUmVsYXRpb24gcmVsLCBCdWNrZXQgbmV3X2J1CiBleHRlcm4gQmxvY2tOdW1iZXIgX2hhc2hf Z2V0X25ld2Jsb2NrX2Zyb21fb2xkYnVja2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0IG9sZF9idWNr ZXQpOwogZXh0ZXJuIEJ1Y2tldCBfaGFzaF9nZXRfbmV3YnVja2V0X2Zyb21fb2xkYnVja2V0KFJl bGF0aW9uIHJlbCwgQnVja2V0IG9sZF9idWNrZXQsCiAJCQkJCQkJCQkJCQkgdWludDMyIGxvd21h c2ssIHVpbnQzMiBtYXhidWNrZXQpOwotZXh0ZXJuIHZvaWQgX2hhc2hfa2lsbF9pdGVtcyhJbmRl eFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgX2hhc2hfa2lsbF9pdGVtcyhJbmRleFNjYW5E ZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNoKTsKIAogLyogaGFzaC5jICovCiBleHRlcm4g dm9pZCBoYXNoYnVja2V0Y2xlYW51cChSZWxhdGlvbiByZWwsIEJ1Y2tldCBjdXJfYnVja2V0LApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hhc2gvaGFzaC5jCmluZGV4IDcyODlkZjU3NC4uM2YyYjc3OTk2IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaC5jCkBAIC0xMDEsOSArMTAxLDkgQEAgaGFzaGhhbmRsZXIoUEdfRlVOQ1RJT05f QVJHUykKIAlhbXJvdXRpbmUtPmFtYWRqdXN0bWVtYmVycyA9IGhhc2hhZGp1c3RtZW1iZXJzOwog CWFtcm91dGluZS0+YW1iZWdpbnNjYW4gPSBoYXNoYmVnaW5zY2FuOwogCWFtcm91dGluZS0+YW1y ZXNjYW4gPSBoYXNocmVzY2FuOwotCWFtcm91dGluZS0+YW1nZXR0dXBsZSA9IGhhc2hnZXR0dXBs ZTsKLQlhbXJvdXRpbmUtPmFtZ2V0YmF0Y2ggPSBOVUxMOwotCWFtcm91dGluZS0+YW1mcmVlYmF0 Y2ggPSBOVUxMOworCWFtcm91dGluZS0+YW1nZXR0dXBsZSA9IE5VTEw7CisJYW1yb3V0aW5lLT5h bWdldGJhdGNoID0gaGFzaGdldGJhdGNoOworCWFtcm91dGluZS0+YW1mcmVlYmF0Y2ggPSBoYXNo ZnJlZWJhdGNoOwogCWFtcm91dGluZS0+YW1nZXRiaXRtYXAgPSBoYXNoZ2V0Yml0bWFwOwogCWFt cm91dGluZS0+YW1lbmRzY2FuID0gaGFzaGVuZHNjYW47CiAJYW1yb3V0aW5lLT5hbXBvc3Jlc2V0 ID0gTlVMTDsKQEAgLTI4NSw1MyArMjg1LDIyIEBAIGhhc2hpbnNlcnQoUmVsYXRpb24gcmVsLCBE YXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiAKIAogLyoKLSAqCWhhc2hnZXR0dXBsZSgpIC0t IEdldCB0aGUgbmV4dCB0dXBsZSBpbiB0aGUgc2Nhbi4KKyAqCWhhc2hnZXRiYXRjaCgpIC0tIEdl dCB0aGUgZmlyc3Qgb3IgbmV4dCBiYXRjaCBvZiB0dXBsZXMgaW4gdGhlIHNjYW4KICAqLwotYm9v bAotaGFzaGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitC YXRjaEluZGV4U2NhbgoraGFzaGdldGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRl eFNjYW4gcHJpb3JiYXRjaCwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7Ci0JSGFzaFNjYW5PcGFxdWUg c28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlib29sCQlyZXM7Ci0KIAkvKiBI YXNoIGluZGV4ZXMgYXJlIGFsd2F5cyBsb3NzeSBzaW5jZSB3ZSBzdG9yZSBvbmx5IHRoZSBoYXNo IGNvZGUgKi8KIAlzY2FuLT54c19yZWNoZWNrID0gdHJ1ZTsKIAotCS8qCi0JICogSWYgd2UndmUg YWxyZWFkeSBpbml0aWFsaXplZCB0aGlzIHNjYW4sIHdlIGNhbiBqdXN0IGFkdmFuY2UgaXQgaW4g dGhlCi0JICogYXBwcm9wcmlhdGUgZGlyZWN0aW9uLiAgSWYgd2UgaGF2ZW4ndCBkb25lIHNvIHll dCwgd2UgY2FsbCBhIHJvdXRpbmUgdG8KLQkgKiBnZXQgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHNj YW4uCi0JICovCi0JaWYgKCFIYXNoU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCQlyZXMg PSBfaGFzaF9maXJzdChzY2FuLCBkaXIpOwotCWVsc2UKKwlpZiAocHJpb3JiYXRjaCA9PSBOVUxM KQogCXsKLQkJLyoKLQkJICogQ2hlY2sgdG8gc2VlIGlmIHdlIHNob3VsZCBraWxsIHRoZSBwcmV2 aW91c2x5LWZldGNoZWQgdHVwbGUuCi0JCSAqLwotCQlpZiAoc2Nhbi0+a2lsbF9wcmlvcl90dXBs ZSkKLQkJewotCQkJLyoKLQkJCSAqIFllcywgc28gcmVtZW1iZXIgaXQgZm9yIGxhdGVyLiAoV2Un bGwgZGVhbCB3aXRoIGFsbCBzdWNoIHR1cGxlcwotCQkJICogYXQgb25jZSByaWdodCBhZnRlciBs ZWF2aW5nIHRoZSBpbmRleCBwYWdlIG9yIGF0IGVuZCBvZiBzY2FuLikKLQkJCSAqIEluIGNhc2Ug aWYgY2FsbGVyIHJldmVyc2VzIHRoZSBpbmRleHNjYW4gZGlyZWN0aW9uIGl0IGlzIHF1aXRlCi0J CQkgKiBwb3NzaWJsZSB0aGF0IHRoZSBzYW1lIGl0ZW0gbWlnaHQgZ2V0IGVudGVyZWQgbXVsdGlw bGUgdGltZXMuCi0JCQkgKiBCdXQsIHdlIGRvbid0IGRldGVjdCB0aGF0OyBpbnN0ZWFkLCB3ZSBq dXN0IGZvcmdldCBhbnkgZXhjZXNzCi0JCQkgKiBlbnRyaWVzLgotCQkJICovCi0JCQlpZiAoc28t PmtpbGxlZEl0ZW1zID09IE5VTEwpCi0JCQkJc28tPmtpbGxlZEl0ZW1zID0gcGFsbG9jX2FycmF5 KGludCwgTWF4SW5kZXhUdXBsZXNQZXJQYWdlKTsKLQotCQkJaWYgKHNvLT5udW1LaWxsZWQgPCBN YXhJbmRleFR1cGxlc1BlclBhZ2UpCi0JCQkJc28tPmtpbGxlZEl0ZW1zW3NvLT5udW1LaWxsZWQr K10gPSBzby0+Y3VyclBvcy5pdGVtSW5kZXg7Ci0JCX0KLQotCQkvKgotCQkgKiBOb3cgY29udGlu dWUgdGhlIHNjYW4uCi0JCSAqLwotCQlyZXMgPSBfaGFzaF9uZXh0KHNjYW4sIGRpcik7CisJCS8q IEluaXRpYWxpemUgdGhlIHNjYW4sIGFuZCByZXR1cm4gZmlyc3QgYmF0Y2ggb2YgbWF0Y2hpbmcg aXRlbXMgKi8KKwkJcmV0dXJuIF9oYXNoX2ZpcnN0KHNjYW4sIGRpcik7CiAJfQogCi0JcmV0dXJu IHJlczsKKwkvKiBSZXR1cm4gYmF0Y2ggcG9zaXRpb25lZCBhZnRlciBjYWxsZXIncyBiYXRjaCAo aW4gZGlyZWN0aW9uICdkaXInKSAqLworCXJldHVybiBfaGFzaF9uZXh0KHNjYW4sIGRpciwgcHJp b3JiYXRjaCk7CiB9CiAKIApAQCAtMzQxLDI2ICszMTAsMjMgQEAgaGFzaGdldHR1cGxlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiBpbnQ2NAogaGFzaGdldGJpdG1hcChJ bmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogewotCUhhc2hTY2FuT3BhcXVlIHNv ID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JYm9vbAkJcmVzOworCUJhdGNoSW5k ZXhTY2FuIGJhdGNoOwogCWludDY0CQludGlkcyA9IDA7Ci0JSGFzaFNjYW5Qb3NJdGVtICpjdXJy SXRlbTsKKwlpbnQJCQlpdGVtSW5kZXg7CiAKLQlyZXMgPSBfaGFzaF9maXJzdChzY2FuLCBGb3J3 YXJkU2NhbkRpcmVjdGlvbik7CisJYmF0Y2ggPSBfaGFzaF9maXJzdChzY2FuLCBGb3J3YXJkU2Nh bkRpcmVjdGlvbik7CiAKLQl3aGlsZSAocmVzKQorCXdoaWxlIChiYXRjaCAhPSBOVUxMKQogCXsK LQkJY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XTsK KwkJZm9yIChpdGVtSW5kZXggPSBiYXRjaC0+Zmlyc3RJdGVtOworCQkJIGl0ZW1JbmRleCA8PSBi YXRjaC0+bGFzdEl0ZW07CisJCQkgaXRlbUluZGV4KyspCisJCXsKKwkJCXRibV9hZGRfdHVwbGVz KHRibSwgJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLmhlYXBUaWQsIDEsIHRydWUpOworCQkJbnRp ZHMrKzsKKwkJfQogCi0JCS8qCi0JCSAqIF9oYXNoX2ZpcnN0IGFuZCBfaGFzaF9uZXh0IGhhbmRs ZSBlbGltaW5hdGUgZGVhZCBpbmRleCBlbnRyaWVzCi0JCSAqIHdoZW5ldmVyIHNjYW4tPmlnbm9y ZV9raWxsZWRfdHVwbGVzIGlzIHRydWUuICBUaGVyZWZvcmUsIHRoZXJlJ3MKLQkJICogbm90aGlu ZyB0byBkbyBoZXJlIGV4Y2VwdCBhZGQgdGhlIHJlc3VsdHMgdG8gdGhlIFRJREJpdG1hcC4KLQkJ ICovCi0JCXRibV9hZGRfdHVwbGVzKHRibSwgJihjdXJySXRlbS0+aGVhcFRpZCksIDEsIHRydWUp OwotCQludGlkcysrOwotCi0JCXJlcyA9IF9oYXNoX25leHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJl Y3Rpb24pOworCQliYXRjaCA9IF9oYXNoX25leHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24s IGJhdGNoKTsKIAl9CiAKIAlyZXR1cm4gbnRpZHM7CkBAIC0zODIsMTYgKzM0OCwxMiBAQCBoYXNo YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCXNjYW4g PSBSZWxhdGlvbkdldEluZGV4U2NhbihyZWwsIG5rZXlzLCBub3JkZXJieXMpOwogCiAJc28gPSAo SGFzaFNjYW5PcGFxdWUpIHBhbGxvY19vYmplY3QoSGFzaFNjYW5PcGFxdWVEYXRhKTsKLQlIYXNo U2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwogCXNvLT5oYXNoc29fYnVja2V0X2J1ZiA9 IEludmFsaWRCdWZmZXI7CiAJc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmID0gSW52YWxpZEJ1 ZmZlcjsKIAogCXNvLT5oYXNoc29fYnVjX3BvcHVsYXRlZCA9IGZhbHNlOwogCXNvLT5oYXNoc29f YnVjX3NwbGl0ID0gZmFsc2U7CiAKLQlzby0+a2lsbGVkSXRlbXMgPSBOVUxMOwotCXNvLT5udW1L aWxsZWQgPSAwOwotCiAJc2Nhbi0+b3BhcXVlID0gc287CiAKIAlyZXR1cm4gc2NhbjsKQEAgLTQw NywxOCArMzY5LDggQEAgaGFzaHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2Nh bmtleSwgaW50IG5zY2Fua2V5cywKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1 ZSkgc2Nhbi0+b3BhcXVlOwogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAK LQlpZiAoSGFzaFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8qIEJlZm9yZSBs ZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJaWYg KHNvLT5udW1LaWxsZWQgPiAwKQotCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKLQl9Ci0KIAlf aGFzaF9kcm9wc2NhbmJ1ZihyZWwsIHNvKTsKIAotCS8qIHNldCBwb3NpdGlvbiBpbnZhbGlkICh0 aGlzIHdpbGwgY2F1c2UgX2hhc2hfZmlyc3QgY2FsbCkgKi8KLQlIYXNoU2NhblBvc0ludmFsaWRh dGUoc28tPmN1cnJQb3MpOwotCiAJLyogVXBkYXRlIHNjYW4ga2V5LCBpZiBhIG5ldyBvbmUgaXMg Z2l2ZW4gKi8KIAlpZiAoc2NhbmtleSAmJiBzY2FuLT5udW1iZXJPZktleXMgPiAwKQogCQltZW1j cHkoc2Nhbi0+a2V5RGF0YSwgc2NhbmtleSwgc2Nhbi0+bnVtYmVyT2ZLZXlzICogc2l6ZW9mKFNj YW5LZXlEYXRhKSk7CkBAIC00MjcsNiArMzc5LDI1IEBAIGhhc2hyZXNjYW4oSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCiAJc28tPmhhc2hzb19idWNf c3BsaXQgPSBmYWxzZTsKIH0KIAorLyoKKyAqCWhhc2hmcmVlYmF0Y2goKSAtLSBGcmVlIGJhdGNo IHJlc291cmNlcywgaW5jbHVkaW5nIGl0cyBidWZmZXIgcGluCisgKi8KK3ZvaWQKK2hhc2hmcmVl YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBiYXRjaCkKK3sKKwlpZiAo YmF0Y2gtPm51bUtpbGxlZCA+IDApCisJCV9oYXNoX2tpbGxfaXRlbXMoc2NhbiwgYmF0Y2gpOwor CisJaWYgKCFzY2FuLT5iYXRjaHF1ZXVlLT5kcm9wUGluKQorCXsKKwkJLyogaW5kZXhhbV91dGls X2JhdGNoX3VubG9jayBkaWRuJ3QgdW5waW4gcGFnZSBlYXJsaWVyLCBkbyBpdCBub3cgKi8KKwkJ UmVsZWFzZUJ1ZmZlcihiYXRjaC0+YnVmKTsKKwkJYmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7 CisJfQorCisJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgYmF0Y2gpOworfQorCiAv KgogICoJaGFzaGVuZHNjYW4oKSAtLSBjbG9zZSBkb3duIGEgc2NhbgogICovCkBAIC00MzYsMTcg KzQwNyw4IEBAIGhhc2hlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlIYXNoU2Nhbk9wYXF1 ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCVJlbGF0aW9uCXJlbCA9IHNj YW4tPmluZGV4UmVsYXRpb247CiAKLQlpZiAoSGFzaFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9z KSkKLQl7Ci0JCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBr aWxsZWQgaXRlbXMgKi8KLQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJX2hhc2hfa2lsbF9p dGVtcyhzY2FuKTsKLQl9Ci0KIAlfaGFzaF9kcm9wc2NhbmJ1ZihyZWwsIHNvKTsKIAotCWlmIChz by0+a2lsbGVkSXRlbXMgIT0gTlVMTCkKLQkJcGZyZWUoc28tPmtpbGxlZEl0ZW1zKTsKIAlwZnJl ZShzbyk7CiAJc2Nhbi0+b3BhcXVlID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFn ZS5jCmluZGV4IGI4ZTViZDAwNS4uYjBiMGM1MzBjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNocGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hw YWdlLmMKQEAgLTI4MCwzMSArMjgwLDI0IEBAIF9oYXNoX2Ryb3BidWYoUmVsYXRpb24gcmVsLCBC dWZmZXIgYnVmKQogfQogCiAvKgotICoJX2hhc2hfZHJvcHNjYW5idWYoKSAtLSByZWxlYXNlIGJ1 ZmZlcnMgdXNlZCBpbiBzY2FuLgorICoJX2hhc2hfZHJvcHNjYW5idWYoKSAtLSByZWxlYXNlIGJ1 ZmZlcnMgb3duZWQgYnkgc2Nhbi4KICAqCi0gKiBUaGlzIHJvdXRpbmUgdW5waW5zIHRoZSBidWZm ZXJzIHVzZWQgZHVyaW5nIHNjYW4gb24gd2hpY2ggd2UKLSAqIGhvbGQgbm8gbG9jay4KKyAqIFRo aXMgcm91dGluZSB1bnBpbnMgdGhlIGJ1ZmZlcnMgZm9yIHRoZSBwcmltYXJ5IGJ1Y2tldCBwYWdl IGFuZCBmb3IgdGhlCisgKiBidWNrZXQgcGFnZSBvZiBhIGJ1Y2tldCBiZWluZyBzcGxpdCBhcyBu ZWVkZWQuCiAgKi8KIHZvaWQKIF9oYXNoX2Ryb3BzY2FuYnVmKFJlbGF0aW9uIHJlbCwgSGFzaFNj YW5PcGFxdWUgc28pCiB7CiAJLyogcmVsZWFzZSBwaW4gd2UgaG9sZCBvbiBwcmltYXJ5IGJ1Y2tl dCBwYWdlICovCi0JaWYgKEJ1ZmZlcklzVmFsaWQoc28tPmhhc2hzb19idWNrZXRfYnVmKSAmJgot CQlzby0+aGFzaHNvX2J1Y2tldF9idWYgIT0gc28tPmN1cnJQb3MuYnVmKQorCWlmIChCdWZmZXJJ c1ZhbGlkKHNvLT5oYXNoc29fYnVja2V0X2J1ZikpCiAJCV9oYXNoX2Ryb3BidWYocmVsLCBzby0+ aGFzaHNvX2J1Y2tldF9idWYpOwogCXNvLT5oYXNoc29fYnVja2V0X2J1ZiA9IEludmFsaWRCdWZm ZXI7CiAKLQkvKiByZWxlYXNlIHBpbiB3ZSBob2xkIG9uIHByaW1hcnkgYnVja2V0IHBhZ2UgIG9m IGJ1Y2tldCBiZWluZyBzcGxpdCAqLwotCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29fc3Bs aXRfYnVja2V0X2J1ZikgJiYKLQkJc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmICE9IHNvLT5j dXJyUG9zLmJ1ZikKKwkvKiByZWxlYXNlIHBpbiBoZWxkIG9uIHByaW1hcnkgYnVja2V0IHBhZ2Ug b2YgYnVja2V0IGJlaW5nIHNwbGl0ICovCisJaWYgKEJ1ZmZlcklzVmFsaWQoc28tPmhhc2hzb19z cGxpdF9idWNrZXRfYnVmKSkKIAkJX2hhc2hfZHJvcGJ1ZihyZWwsIHNvLT5oYXNoc29fc3BsaXRf YnVja2V0X2J1Zik7CiAJc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmID0gSW52YWxpZEJ1ZmZl cjsKIAotCS8qIHJlbGVhc2UgYW55IHBpbiB3ZSBzdGlsbCBob2xkICovCi0JaWYgKEJ1ZmZlcklz VmFsaWQoc28tPmN1cnJQb3MuYnVmKSkKLQkJX2hhc2hfZHJvcGJ1ZihyZWwsIHNvLT5jdXJyUG9z LmJ1Zik7Ci0Jc28tPmN1cnJQb3MuYnVmID0gSW52YWxpZEJ1ZmZlcjsKLQogCS8qIHJlc2V0IHNw bGl0IHNjYW4gKi8KIAlzby0+aGFzaHNvX2J1Y19wb3B1bGF0ZWQgPSBmYWxzZTsKIAlzby0+aGFz aHNvX2J1Y19zcGxpdCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hh c2gvaGFzaHNlYXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJjaC5jCmlu ZGV4IDkyYzE1YTY1Yi4uN2I5YjMxZWVlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aGFzaC9oYXNoc2VhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJj aC5jCkBAIC0yMiwxMDQgKzIyLDc0IEBACiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKIHN0YXRp YyBib29sIF9oYXNoX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpidWZQLAot CQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXIpOworCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXIs IEJhdGNoSW5kZXhTY2FuIGJhdGNoKTsKIHN0YXRpYyBpbnQJX2hhc2hfbG9hZF9xdWFsaWZpZWRf aXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2UsCi0JCQkJCQkJCQkgICBPZmZzZXRO dW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcik7Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2hh c2hfc2F2ZWl0ZW0oSGFzaFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCisJCQkJCQkJCQkg ICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCQkJCSAgIEJh dGNoSW5kZXhTY2FuIGJhdGNoKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfaGFzaF9zYXZlaXRlbShC YXRjaEluZGV4U2NhbiBiYXRjaCwgaW50IGl0ZW1JbmRleCwKIAkJCQkJCQkJICBPZmZzZXROdW1i ZXIgb2ZmbnVtLCBJbmRleFR1cGxlIGl0dXApOwogc3RhdGljIHZvaWQgX2hhc2hfcmVhZG5leHQo SW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgKmJ1ZnAsCiAJCQkJCQkgICBQYWdlICpwYWdlcCwg SGFzaFBhZ2VPcGFxdWUgKm9wYXF1ZXApOwogCiAvKgotICoJX2hhc2hfbmV4dCgpIC0tIEdldCB0 aGUgbmV4dCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9oYXNoX25leHQoKSAtLSBHZXQgdGhlIG5leHQg YmF0Y2ggb2YgaXRlbXMgaW4gYSBzY2FuLgogICoKLSAqCQlPbiBlbnRyeSwgc28tPmN1cnJQb3Mg ZGVzY3JpYmVzIHRoZSBjdXJyZW50IHBhZ2UsIHdoaWNoIG1heQotICoJCWJlIHBpbm5lZCBidXQg bm90IGxvY2tlZCwgYW5kIHNvLT5jdXJyUG9zLml0ZW1JbmRleCBpZGVudGlmaWVzCi0gKgkJd2hp Y2ggaXRlbSB3YXMgcHJldmlvdXNseSByZXR1cm5lZC4KKyAqCQlPbiBlbnRyeSwgcHJpb3JiYXRj aCBkZXNjcmliZXMgdGhlIGN1cnJlbnQgcGFnZSBiYXRjaCB3aXRoIGl0ZW1zCisgKgkJYWxyZWFk eSByZXR1cm5lZC4KICAqCi0gKgkJT24gc3VjY2Vzc2Z1bCBleGl0LCBzY2FuLT54c19oZWFwdGlk IGlzIHNldCB0byB0aGUgVElEIG9mIHRoZSBuZXh0Ci0gKgkJaGVhcCB0dXBsZS4gIHNvLT5jdXJy UG9zIGlzIHVwZGF0ZWQgYXMgbmVlZGVkLgorICoJCU9uIHN1Y2Nlc3NmdWwgZXhpdCwgcmV0dXJu cyBhIGJhdGNoIGNvbnRhaW5pbmcgbWF0Y2hpbmcgaXRlbXMgZnJvbQorICoJCW5leHQgcGFnZS4g IE90aGVyd2lzZSByZXR1cm5zIE5VTEwsIGluZGljYXRpbmcgdGhhdCB0aGVyZSBhcmUgbm8KKyAq CQlmdXJ0aGVyIG1hdGNoZXMuICBObyBsb2NrcyBhcmUgZXZlciBoZWxkIHdoZW4gd2UgcmV0dXJu LgogICoKLSAqCQlPbiBmYWlsdXJlIGV4aXQgKG5vIG1vcmUgdHVwbGVzKSwgd2UgcmV0dXJuIGZh bHNlIHdpdGggcGluCi0gKgkJaGVsZCBvbiBidWNrZXQgcGFnZSBidXQgbm8gcGlucyBvciBsb2Nr cyBoZWxkIG9uIG92ZXJmbG93Ci0gKgkJcGFnZS4KKyAqCQlSZXRhaW5zIHBpbnMgYWNjb3JkaW5n IHRvIHRoZSBzYW1lIHJ1bGVzIGFzIF9oYXNoX2ZpcnN0LgogICovCi1ib29sCi1faGFzaF9uZXh0 KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitCYXRjaEluZGV4U2Nhbgor X2hhc2hfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBCYXRjaElu ZGV4U2NhbiBwcmlvcmJhdGNoKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRp b247CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsK LQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtOwogCUJsb2NrTnVtYmVyIGJsa25vOwogCUJ1ZmZl cgkJYnVmOwotCWJvb2wJCWVuZF9vZl9zY2FuID0gZmFsc2U7CisJQmF0Y2hJbmRleFNjYW4gYmF0 Y2g7CiAKIAkvKgotCSAqIEFkdmFuY2UgdG8gdGhlIG5leHQgdHVwbGUgb24gdGhlIGN1cnJlbnQg cGFnZTsgb3IgaWYgZG9uZSwgdHJ5IHRvIHJlYWQKLQkgKiBkYXRhIGZyb20gdGhlIG5leHQgb3Ig cHJldmlvdXMgcGFnZSBiYXNlZCBvbiB0aGUgc2NhbiBkaXJlY3Rpb24uIEJlZm9yZQotCSAqIG1v dmluZyB0byB0aGUgbmV4dCBvciBwcmV2aW91cyBwYWdlIG1ha2Ugc3VyZSB0aGF0IHdlIGRlYWwg d2l0aCBhbGwgdGhlCi0JICoga2lsbGVkIGl0ZW1zLgorCSAqIERldGVybWluZSB3aGljaCBwYWdl IHRvIHJlYWQgbmV4dCBiYXNlZCBvbiBzY2FuIGRpcmVjdGlvbiBhbmQgZGV0YWlscworCSAqIHRh a2VuIGZyb20gdGhlIHByaW9yIGJhdGNoCiAJICovCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0Zvcndh cmQoZGlyKSkKIAl7Ci0JCWlmICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRleCA+IHNvLT5jdXJyUG9z Lmxhc3RJdGVtKQorCQlibGtubyA9IHByaW9yYmF0Y2gtPm5leHRQYWdlOworCQlpZiAoIUJsb2Nr TnVtYmVySXNWYWxpZChibGtubykgfHwgIXByaW9yYmF0Y2gtPm1vcmVSaWdodCkKIAkJewotCQkJ aWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7Ci0KLQkJ CWJsa25vID0gc28tPmN1cnJQb3MubmV4dFBhZ2U7Ci0JCQlpZiAoQmxvY2tOdW1iZXJJc1ZhbGlk KGJsa25vKSkKLQkJCXsKLQkJCQlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBibGtubywgSEFTSF9S RUFELCBMSF9PVkVSRkxPV19QQUdFKTsKLQkJCQlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sICZi dWYsIGRpcikpCi0JCQkJCWVuZF9vZl9zY2FuID0gdHJ1ZTsKLQkJCX0KLQkJCWVsc2UKLQkJCQll bmRfb2Zfc2NhbiA9IHRydWU7CisJCQlfaGFzaF9kcm9wc2NhbmJ1ZihyZWwsIHNvKTsKKwkJCXJl dHVybiBOVUxMOwogCQl9CiAJfQogCWVsc2UKIAl7Ci0JCWlmICgtLXNvLT5jdXJyUG9zLml0ZW1J bmRleCA8IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSkKKwkJYmxrbm8gPSBwcmlvcmJhdGNoLT5wcmV2 UGFnZTsKKwkJaWYgKCFCbG9ja051bWJlcklzVmFsaWQoYmxrbm8pIHx8ICFwcmlvcmJhdGNoLT5t b3JlTGVmdCkKIAkJewotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tpbGxf aXRlbXMoc2Nhbik7Ci0KLQkJCWJsa25vID0gc28tPmN1cnJQb3MucHJldlBhZ2U7Ci0JCQlpZiAo QmxvY2tOdW1iZXJJc1ZhbGlkKGJsa25vKSkKLQkJCXsKLQkJCQlidWYgPSBfaGFzaF9nZXRidWYo cmVsLCBibGtubywgSEFTSF9SRUFELAotCQkJCQkJCQkgICBMSF9CVUNLRVRfUEFHRSB8IExIX09W RVJGTE9XX1BBR0UpOwotCi0JCQkJLyoKLQkJCQkgKiBXZSBhbHdheXMgbWFpbnRhaW4gdGhlIHBp biBvbiBidWNrZXQgcGFnZSBmb3Igd2hvbGUgc2NhbgotCQkJCSAqIG9wZXJhdGlvbiwgc28gcmVs ZWFzaW5nIHRoZSBhZGRpdGlvbmFsIHBpbiB3ZSBoYXZlIGFjcXVpcmVkCi0JCQkJICogaGVyZS4K LQkJCQkgKi8KLQkJCQlpZiAoYnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8fAotCQkJCQli dWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQotCQkJCQlfaGFzaF9kcm9wYnVmKHJl bCwgYnVmKTsKLQotCQkJCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgJmJ1ZiwgZGlyKSkKLQkJ CQkJZW5kX29mX3NjYW4gPSB0cnVlOwotCQkJfQotCQkJZWxzZQotCQkJCWVuZF9vZl9zY2FuID0g dHJ1ZTsKKwkJCV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOworCQkJcmV0dXJuIE5VTEw7CiAJ CX0KIAl9CiAKLQlpZiAoZW5kX29mX3NjYW4pCisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIG5leHQg YmF0Y2ggKi8KKwliYXRjaCA9IGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyhzY2FuLCBNYXhJbmRl eFR1cGxlc1BlclBhZ2UsIGZhbHNlKTsKKworCS8qIEdldCB0aGUgYnVmZmVyIGZvciBuZXh0IGJh dGNoICovCisJYnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwgTEhfT1ZF UkZMT1dfUEFHRSk7CisKKwkvKiBSZWFkIHRoZSBuZXh0IHBhZ2UgYW5kIGxvYWQgaXRlbXMgaW50 byBhbGxvY2F0ZWQgYmF0Y2ggKi8KKwlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sICZidWYsIGRp ciwgYmF0Y2gpKQogCXsKLQkJX2hhc2hfZHJvcHNjYW5idWYocmVsLCBzbyk7Ci0JCUhhc2hTY2Fu UG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JCXJldHVybiBmYWxzZTsKKwkJaW5kZXhhbV91 dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgYmF0Y2gpOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQkv KiBPSywgaXRlbUluZGV4IHNheXMgd2hhdCB0byByZXR1cm4gKi8KLQljdXJySXRlbSA9ICZzby0+ Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdOwotCXNjYW4tPnhzX2hlYXB0aWQg PSBjdXJySXRlbS0+aGVhcFRpZDsKLQotCXJldHVybiB0cnVlOworCS8qIFJldHVybiB0aGUgYmF0 Y2ggY29udGFpbmluZyBtYXRjaGVkIGl0ZW1zIGZyb20gbmV4dCBwYWdlICovCisJcmV0dXJuIGJh dGNoOwogfQogCiAvKgpAQCAtMjY5LDIyICsyMzksMjEgQEAgX2hhc2hfcmVhZHByZXYoSW5kZXhT Y2FuRGVzYyBzY2FuLAogfQogCiAvKgotICoJX2hhc2hfZmlyc3QoKSAtLSBGaW5kIHRoZSBmaXJz dCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9oYXNoX2ZpcnN0KCkgLS0gRmluZCB0aGUgZmlyc3QgYmF0 Y2ggb2YgaXRlbXMgaW4gYSBzY2FuLgogICoKLSAqCQlXZSBmaW5kIHRoZSBmaXJzdCBpdGVtIChv ciwgaWYgYmFja3dhcmQgc2NhbiwgdGhlIGxhc3QgaXRlbSkgaW4gdGhlCi0gKgkJaW5kZXggdGhh dCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBzY2FuCi0g KgkJZGVzY3JpcHRvci4KKyAqCQlXZSBmaW5kIHRoZSBmaXJzdCBiYXRjaCBvZiBpdGVtcyAob3Is IGlmIGJhY2t3YXJkIHNjYW4sIHRoZSBsYXN0CisgKgkJYmF0Y2gpIGluIHRoZSBpbmRleCB0aGF0 IHNhdGlzZmllcyB0aGUgcXVhbGlmaWNhdGlvbiBhc3NvY2lhdGVkIHdpdGgKKyAqCQl0aGUgc2Nh biBkZXNjcmlwdG9yLgogICoKLSAqCQlPbiBzdWNjZXNzZnVsIGV4aXQsIGlmIHRoZSBwYWdlIGNv bnRhaW5pbmcgY3VycmVudCBpbmRleCB0dXBsZSBpcyBhbgotICoJCW92ZXJmbG93IHBhZ2UsIGJv dGggcGluIGFuZCBsb2NrIGFyZSByZWxlYXNlZCB3aGVyZWFzIGlmIGl0IGlzIGEgYnVja2V0Ci0g KgkJcGFnZSB0aGVuIGl0IGlzIHBpbm5lZCBidXQgbm90IGxvY2tlZCBhbmQgZGF0YSBhYm91dCB0 aGUgbWF0Y2hpbmcKLSAqCQl0dXBsZShzKSBvbiB0aGUgcGFnZSBoYXMgYmVlbiBsb2FkZWQgaW50 byBzby0+Y3VyclBvcywKLSAqCQlzY2FuLT54c19oZWFwdGlkIGlzIHNldCB0byB0aGUgaGVhcCBU SUQgb2YgdGhlIGN1cnJlbnQgdHVwbGUuCisgKgkJT24gc3VjY2Vzc2Z1bCBleGl0LCByZXR1cm5z IGEgYmF0Y2ggY29udGFpbmluZyBtYXRjaGluZyBpdGVtcy4KKyAqCQlPdGhlcndpc2UgcmV0dXJu cyBOVUxMLCBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgYXJlIG5vIGZ1cnRoZXIgbWF0Y2hlcy4KKyAq CQlObyBsb2NrcyBhcmUgZXZlciBoZWxkIHdoZW4gd2UgcmV0dXJuLgogICoKLSAqCQlPbiBmYWls dXJlIGV4aXQgKG5vIG1vcmUgdHVwbGVzKSwgd2UgcmV0dXJuIGZhbHNlLCB3aXRoIHBpbiBoZWxk IG9uCi0gKgkJYnVja2V0IHBhZ2UgYnV0IG5vIHBpbnMgb3IgbG9ja3MgaGVsZCBvbiBvdmVyZmxv dyBwYWdlLgorICoJCVdlIGFsd2F5cyByZXRhaW4gb3VyIG93biBwaW4gb24gdGhlIGJ1Y2tldCBw YWdlLiAgV2hlbiB3ZSByZXR1cm4gYQorICoJCWJhdGNoIHdpdGggYSBidWNrZXQgcGFnZSwgaXQg d2lsbCByZXRhaW4gaXRzIG93biByZWZlcmVuY2UgcGluIGlmZgorICoJCWluZGV4YW1fdXRpbF9i YXRjaF9yZWxlYXNlIGRldGVybWluZWQgdGhhdCB0YWJsZSBBTSByZXF1aXJlcyBvbmUuCiAgKi8K LWJvb2wKK0JhdGNoSW5kZXhTY2FuCiBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247 CkBAIC0yOTUsNyArMjY0LDcgQEAgX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcikKIAlCdWZmZXIJCWJ1ZjsKIAlQYWdlCQlwYWdlOwogCUhhc2hQYWdlT3Bh cXVlIG9wYXF1ZTsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtOworCUJhdGNoSW5kZXhTY2Fu IGJhdGNoOwogCiAJcGdzdGF0X2NvdW50X2luZGV4X3NjYW4ocmVsKTsKIAlpZiAoc2Nhbi0+aW5z dHJ1bWVudCkKQEAgLTMyNSw3ICsyOTQsNyBAQCBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqIGl0ZW1zIGluIHRoZSBpbmRleC4KIAkgKi8KIAlp ZiAoY3VyLT5za19mbGFncyAmIFNLX0lTTlVMTCkKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4g TlVMTDsKIAogCS8qCiAJICogT2theSB0byBjb21wdXRlIHRoZSBoYXNoIGtleS4gIFdlIHdhbnQg dG8gZG8gdGhpcyBiZWZvcmUgYWNxdWlyaW5nIGFueQpAQCAtNDE4LDM0ICszODcsMzMgQEAgX2hh c2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJCV9oYXNo X3JlYWRuZXh0KHNjYW4sICZidWYsICZwYWdlLCAmb3BhcXVlKTsKIAl9CiAKLQkvKiByZW1lbWJl ciB3aGljaCBidWZmZXIgd2UgaGF2ZSBwaW5uZWQsIGlmIGFueSAqLwotCUFzc2VydChCdWZmZXJJ c0ludmFsaWQoc28tPmN1cnJQb3MuYnVmKSk7Ci0Jc28tPmN1cnJQb3MuYnVmID0gYnVmOworCS8q IEFsbG9jYXRlIHNwYWNlIGZvciBmaXJzdCBiYXRjaCAqLworCWJhdGNoID0gaW5kZXhhbV91dGls X2JhdGNoX2FsbG9jKHNjYW4sIE1heEluZGV4VHVwbGVzUGVyUGFnZSwgZmFsc2UpOwogCi0JLyog Tm93IGZpbmQgYWxsIHRoZSB0dXBsZXMgc2F0aXNmeWluZyB0aGUgcXVhbGlmaWNhdGlvbiBmcm9t IGEgcGFnZSAqLwotCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgJmJ1ZiwgZGlyKSkKLQkJcmV0 dXJuIGZhbHNlOworCS8qIFJlYWQgdGhlIGZpcnN0IHBhZ2UgYW5kIGxvYWQgaXRlbXMgaW50byBh bGxvY2F0ZWQgYmF0Y2ggKi8KKwlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sICZidWYsIGRpciwg YmF0Y2gpKQorCXsKKwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgYmF0Y2gpOwor CQlyZXR1cm4gTlVMTDsKKwl9CiAKLQkvKiBPSywgaXRlbUluZGV4IHNheXMgd2hhdCB0byByZXR1 cm4gKi8KLQljdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5k ZXhdOwotCXNjYW4tPnhzX2hlYXB0aWQgPSBjdXJySXRlbS0+aGVhcFRpZDsKLQotCS8qIGlmIHdl J3JlIGhlcmUsIF9oYXNoX3JlYWRwYWdlIGZvdW5kIGEgdmFsaWQgdHVwbGVzICovCi0JcmV0dXJu IHRydWU7CisJLyogUmV0dXJuIHRoZSBiYXRjaCBjb250YWluaW5nIG1hdGNoZWQgaXRlbXMgKi8K KwlyZXR1cm4gYmF0Y2g7CiB9CiAKIC8qCi0gKglfaGFzaF9yZWFkcGFnZSgpIC0tIExvYWQgZGF0 YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIHNvLT5jdXJyUG9zCisgKglfaGFzaF9yZWFk cGFnZSgpIC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIGJhdGNoCiAg KgogICoJV2Ugc2NhbiBhbGwgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGluZGV4IHBhZ2UgYW5k IHNhdmUgdGhlbSBpbnRvCi0gKglzby0+Y3VyclBvcyBpZiBpdCBzYXRpc2ZpZXMgdGhlIHF1YWxp ZmljYXRpb24uIElmIG5vIG1hdGNoaW5nIGl0ZW1zCisgKgl0aGUgYmF0Y2ggaWYgdGhleSBzYXRp c2Z5IHRoZSBxdWFsaWZpY2F0aW9uLiBJZiBubyBtYXRjaGluZyBpdGVtcwogICoJYXJlIGZvdW5k IGluIHRoZSBjdXJyZW50IHBhZ2UsIHdlIG1vdmUgdG8gdGhlIG5leHQgb3IgcHJldmlvdXMgcGFn ZQogICoJaW4gYSBidWNrZXQgY2hhaW4gYXMgaW5kaWNhdGVkIGJ5IHRoZSBkaXJlY3Rpb24uCiAg KgogICoJUmV0dXJuIHRydWUgaWYgYW55IG1hdGNoaW5nIGl0ZW1zIGFyZSBmb3VuZCBlbHNlIHJl dHVybiBmYWxzZS4KICAqLwogc3RhdGljIGJvb2wKLV9oYXNoX3JlYWRwYWdlKEluZGV4U2NhbkRl c2Mgc2NhbiwgQnVmZmVyICpidWZQLCBTY2FuRGlyZWN0aW9uIGRpcikKK19oYXNoX3JlYWRwYWdl KEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpidWZQLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJ CSAgIEJhdGNoSW5kZXhTY2FuIGJhdGNoKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4 UmVsYXRpb247CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9w YXF1ZTsKQEAgLTQ2MSw4ICs0MjksOCBAQCBfaGFzaF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNj YW4sIEJ1ZmZlciAqYnVmUCwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJcGFnZSA9IEJ1ZmZlckdldFBh Z2UoYnVmKTsKIAlvcGFxdWUgPSBIYXNoUGFnZUdldE9wYXF1ZShwYWdlKTsKIAotCXNvLT5jdXJy UG9zLmJ1ZiA9IGJ1ZjsKLQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVt YmVyKGJ1Zik7CisJYmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwliYXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJH ZXRCbG9ja051bWJlcihidWYpOwogCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkK IAl7CkBAIC00NzMsMjUgKzQ0MSwyMSBAQCBfaGFzaF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNj YW4sIEJ1ZmZlciAqYnVmUCwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCQkvKiBuZXcgcGFnZSwgbG9j YXRlIHN0YXJ0aW5nIHBvc2l0aW9uIGJ5IGJpbmFyeSBzZWFyY2ggKi8KIAkJCW9mZm51bSA9IF9o YXNoX2JpbnNlYXJjaChwYWdlLCBzby0+aGFzaHNvX3NrX2hhc2gpOwogCi0JCQlpdGVtSW5kZXgg PSBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhzY2FuLCBwYWdlLCBvZmZudW0sIGRpcik7CisJ CQlpdGVtSW5kZXggPSBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhzY2FuLCBwYWdlLCBvZmZu dW0sIGRpciwKKwkJCQkJCQkJCQkJCSAgIGJhdGNoKTsKIAogCQkJaWYgKGl0ZW1JbmRleCAhPSAw KQogCQkJCWJyZWFrOwogCiAJCQkvKgogCQkJICogQ291bGQgbm90IGZpbmQgYW55IG1hdGNoaW5n IHR1cGxlcyBpbiB0aGUgY3VycmVudCBwYWdlLCBtb3ZlIHRvCi0JCQkgKiB0aGUgbmV4dCBwYWdl LiBCZWZvcmUgbGVhdmluZyB0aGUgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55Ci0JCQkgKiBr aWxsZWQgaXRlbXMuCi0JCQkgKi8KLQkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCQlfaGFz aF9raWxsX2l0ZW1zKHNjYW4pOwotCi0JCQkvKgorCQkJICogdGhlIG5leHQgcGFnZS4KKwkJCSAq CiAJCQkgKiBJZiB0aGlzIGlzIGEgcHJpbWFyeSBidWNrZXQgcGFnZSwgaGFzaG9fcHJldmJsa25v IGlzIG5vdCBhIHJlYWwKIAkJCSAqIGJsb2NrIG51bWJlci4KIAkJCSAqLwotCQkJaWYgKHNvLT5j dXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwKLQkJCQlzby0+Y3VyclBvcy5i dWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQorCQkJaWYgKGJhdGNoLT5idWYgPT0g c28tPmhhc2hzb19idWNrZXRfYnVmIHx8CisJCQkJYmF0Y2gtPmJ1ZiA9PSBzby0+aGFzaHNvX3Nw bGl0X2J1Y2tldF9idWYpCiAJCQkJcHJldl9ibGtubyA9IEludmFsaWRCbG9ja051bWJlcjsKIAkJ CWVsc2UKIAkJCQlwcmV2X2Jsa25vID0gb3BhcXVlLT5oYXNob19wcmV2Ymxrbm87CkBAIC00OTks MjkgKzQ2MywyNSBAQCBfaGFzaF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJ1ZmZlciAq YnVmUCwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCQlfaGFzaF9yZWFkbmV4dChzY2FuLCAmYnVmLCAm cGFnZSwgJm9wYXF1ZSk7CiAJCQlpZiAoQnVmZmVySXNWYWxpZChidWYpKQogCQkJewotCQkJCXNv LT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKLQkJCQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdl dEJsb2NrTnVtYmVyKGJ1Zik7CisJCQkJYmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwkJCQliYXRjaC0+Y3Vy clBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwogCQkJfQogCQkJZWxzZQogCQkJewog CQkJCS8qCiAJCQkJICogUmVtZW1iZXIgbmV4dCBhbmQgcHJldmlvdXMgYmxvY2sgbnVtYmVycyBm b3Igc2Nyb2xsYWJsZQogCQkJCSAqIGN1cnNvcnMgdG8ga25vdyB0aGUgc3RhcnQgcG9zaXRpb24g YW5kIHJldHVybiBmYWxzZQotCQkJCSAqIGluZGljYXRpbmcgdGhhdCBubyBtb3JlIG1hdGNoaW5n IHR1cGxlcyB3ZXJlIGZvdW5kLiBBbHNvLAotCQkJCSAqIGRvbid0IHJlc2V0IGN1cnJQYWdlIG9y IGxzbiwgYmVjYXVzZSB3ZSBleHBlY3QKLQkJCQkgKiBfaGFzaF9raWxsX2l0ZW1zIHRvIGJlIGNh bGxlZCBmb3IgdGhlIG9sZCBwYWdlIGFmdGVyIHRoaXMKLQkJCQkgKiBmdW5jdGlvbiByZXR1cm5z LgorCQkJCSAqIGluZGljYXRpbmcgdGhhdCBubyBtb3JlIG1hdGNoaW5nIHR1cGxlcyB3ZXJlIGZv dW5kCiAJCQkJICovCi0JCQkJc28tPmN1cnJQb3MucHJldlBhZ2UgPSBwcmV2X2Jsa25vOwotCQkJ CXNvLT5jdXJyUG9zLm5leHRQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCQkJCXNvLT5jdXJy UG9zLmJ1ZiA9IGJ1ZjsKKwkJCQliYXRjaC0+cHJldlBhZ2UgPSBwcmV2X2Jsa25vOworCQkJCWJh dGNoLT5uZXh0UGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsKKwkJCQliYXRjaC0+YnVmID0gSW52 YWxpZEJ1ZmZlcjsKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9CiAJCX0KIAotCQlzby0+Y3VyclBv cy5maXJzdEl0ZW0gPSAwOwotCQlzby0+Y3VyclBvcy5sYXN0SXRlbSA9IGl0ZW1JbmRleCAtIDE7 Ci0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IDA7CisJCWJhdGNoLT5maXJzdEl0ZW0gPSAwOwor CQliYXRjaC0+bGFzdEl0ZW0gPSBpdGVtSW5kZXggLSAxOwogCX0KIAllbHNlCiAJewpAQCAtNTMy LDc3ICs0OTIsOTEgQEAgX2hhc2hfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIg KmJ1ZlAsIFNjYW5EaXJlY3Rpb24gZGlyKQogCQkJLyogbmV3IHBhZ2UsIGxvY2F0ZSBzdGFydGlu ZyBwb3NpdGlvbiBieSBiaW5hcnkgc2VhcmNoICovCiAJCQlvZmZudW0gPSBfaGFzaF9iaW5zZWFy Y2hfbGFzdChwYWdlLCBzby0+aGFzaHNvX3NrX2hhc2gpOwogCi0JCQlpdGVtSW5kZXggPSBfaGFz aF9sb2FkX3F1YWxpZmllZF9pdGVtcyhzY2FuLCBwYWdlLCBvZmZudW0sIGRpcik7CisJCQlpdGVt SW5kZXggPSBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhzY2FuLCBwYWdlLCBvZmZudW0sIGRp ciwKKwkJCQkJCQkJCQkJCSAgIGJhdGNoKTsKIAogCQkJaWYgKGl0ZW1JbmRleCAhPSBNYXhJbmRl eFR1cGxlc1BlclBhZ2UpCiAJCQkJYnJlYWs7CiAKIAkJCS8qCiAJCQkgKiBDb3VsZCBub3QgZmlu ZCBhbnkgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50IHBhZ2UsIG1vdmUgdG8KLQkJCSAq IHRoZSBwcmV2aW91cyBwYWdlLiBCZWZvcmUgbGVhdmluZyB0aGUgY3VycmVudCBwYWdlLCBkZWFs IHdpdGgKLQkJCSAqIGFueSBraWxsZWQgaXRlbXMuCisJCQkgKiB0aGUgcHJldmlvdXMgcGFnZQog CQkJICovCi0JCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQkJX2hhc2hfa2lsbF9pdGVtcyhz Y2FuKTsKLQotCQkJaWYgKHNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYg fHwKLQkJCQlzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQor CQkJaWYgKGJhdGNoLT5idWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8CisJCQkJYmF0Y2gt PmJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCiAJCQkJbmV4dF9ibGtubyA9IG9w YXF1ZS0+aGFzaG9fbmV4dGJsa25vOwogCiAJCQlfaGFzaF9yZWFkcHJldihzY2FuLCAmYnVmLCAm cGFnZSwgJm9wYXF1ZSk7CiAJCQlpZiAoQnVmZmVySXNWYWxpZChidWYpKQogCQkJewotCQkJCXNv LT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKLQkJCQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdl dEJsb2NrTnVtYmVyKGJ1Zik7CisJCQkJYmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwkJCQliYXRjaC0+Y3Vy clBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwogCQkJfQogCQkJZWxzZQogCQkJewog CQkJCS8qCiAJCQkJICogUmVtZW1iZXIgbmV4dCBhbmQgcHJldmlvdXMgYmxvY2sgbnVtYmVycyBm b3Igc2Nyb2xsYWJsZQogCQkJCSAqIGN1cnNvcnMgdG8ga25vdyB0aGUgc3RhcnQgcG9zaXRpb24g YW5kIHJldHVybiBmYWxzZQotCQkJCSAqIGluZGljYXRpbmcgdGhhdCBubyBtb3JlIG1hdGNoaW5n IHR1cGxlcyB3ZXJlIGZvdW5kLiBBbHNvLAotCQkJCSAqIGRvbid0IHJlc2V0IGN1cnJQYWdlIG9y IGxzbiwgYmVjYXVzZSB3ZSBleHBlY3QKLQkJCQkgKiBfaGFzaF9raWxsX2l0ZW1zIHRvIGJlIGNh bGxlZCBmb3IgdGhlIG9sZCBwYWdlIGFmdGVyIHRoaXMKLQkJCQkgKiBmdW5jdGlvbiByZXR1cm5z LgorCQkJCSAqIGluZGljYXRpbmcgdGhhdCBubyBtb3JlIG1hdGNoaW5nIHR1cGxlcyB3ZXJlIGZv dW5kCiAJCQkJICovCi0JCQkJc28tPmN1cnJQb3MucHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1i ZXI7Ci0JCQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBuZXh0X2Jsa25vOwotCQkJCXNvLT5jdXJy UG9zLmJ1ZiA9IGJ1ZjsKKwkJCQliYXRjaC0+cHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7 CisJCQkJYmF0Y2gtPm5leHRQYWdlID0gbmV4dF9ibGtubzsKKwkJCQliYXRjaC0+YnVmID0gSW52 YWxpZEJ1ZmZlcjsKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9CiAJCX0KIAotCQlzby0+Y3VyclBv cy5maXJzdEl0ZW0gPSBpdGVtSW5kZXg7Ci0JCXNvLT5jdXJyUG9zLmxhc3RJdGVtID0gTWF4SW5k ZXhUdXBsZXNQZXJQYWdlIC0gMTsKLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gTWF4SW5kZXhU dXBsZXNQZXJQYWdlIC0gMTsKKwkJYmF0Y2gtPmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKKwkJYmF0 Y2gtPmxhc3RJdGVtID0gTWF4SW5kZXhUdXBsZXNQZXJQYWdlIC0gMTsKIAl9CiAKLQlpZiAoc28t PmN1cnJQb3MuYnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8fAotCQlzby0+Y3VyclBvcy5i dWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQorCS8qIFNhdmVkIGF0IGxlYXN0IG9u ZSBtYXRjaCBpbiBiYXRjaC5pdGVtc1tdLCBzbyBwcmVwYXJlIHRvIHJldHVybiBpdCAqLworCWlm IChiYXRjaC0+YnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8fAorCQliYXRjaC0+YnVmID09 IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikKIAl7Ci0JCXNvLT5jdXJyUG9zLnByZXZQYWdl ID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IG9wYXF1ZS0+ aGFzaG9fbmV4dGJsa25vOwotCQlMb2NrQnVmZmVyKHNvLT5jdXJyUG9zLmJ1ZiwgQlVGRkVSX0xP Q0tfVU5MT0NLKTsKKwkJLyoKKwkJICogQmF0Y2gncyBidWZmZXIgaXMgZWl0aGVyIHRoZSBwcmlt YXJ5IGJ1Y2tldCwgb3IgYSBidWNrZXQgYmVpbmcKKwkJICogcG9wdWxhdGVkIGR1ZSB0byBhIHNw bGl0CisJCSAqLworCQliYXRjaC0+cHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJCWJh dGNoLT5uZXh0UGFnZSA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOworCQliYXRjaC0+bW9yZUxl ZnQgPSAoU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSAmJgorCQkJCQkJICAgQmxvY2tOdW1i ZXJJc1ZhbGlkKGJhdGNoLT5wcmV2UGFnZSkpOworCQliYXRjaC0+bW9yZVJpZ2h0ID0gKFNjYW5E aXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSAmJgorCQkJCQkJCUJsb2NrTnVtYmVySXNWYWxpZChiYXRj aC0+bmV4dFBhZ2UpKTsKKworCQkvKgorCQkgKiBJbmNyZW1lbnQgbG9jYWwgcmVmZXJlbmNlIGNv dW50IHNvIHRoYXQgYmF0Y2ggZ2V0cyBhbiBpbmRlcGVuZGVudAorCQkgKiBidWZmZXIgcmVmZXJl bmNlIHRoYXQgY2FuIGJlIHJlbGVhc2VkIChieSBoYXNoZnJlZWJhdGNoKSBiZWZvcmUgdGhlCisJ CSAqIGhhc2hzb19idWNrZXRfYnVmL2hhc2hzb19zcGxpdF9idWNrZXRfYnVmIHJlZmVyZW5jZXMg YXJlIHJlbGVhc2VkCisJCSAqLworCQlJbmNyQnVmZmVyUmVmQ291bnQoYmF0Y2gtPmJ1Zik7CiAJ fQogCWVsc2UKIAl7Ci0JCXNvLT5jdXJyUG9zLnByZXZQYWdlID0gb3BhcXVlLT5oYXNob19wcmV2 Ymxrbm87Ci0JCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gb3BhcXVlLT5oYXNob19uZXh0Ymxrbm87 Ci0JCV9oYXNoX3JlbGJ1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0JCXNvLT5jdXJyUG9zLmJ1 ZiA9IEludmFsaWRCdWZmZXI7CisJCWJhdGNoLT5wcmV2UGFnZSA9IG9wYXF1ZS0+aGFzaG9fcHJl dmJsa25vOworCQliYXRjaC0+bmV4dFBhZ2UgPSBvcGFxdWUtPmhhc2hvX25leHRibGtubzsKKwkJ YmF0Y2gtPm1vcmVMZWZ0ID0gKFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikgJiYKKwkJCQkJ CSAgIEJsb2NrTnVtYmVySXNWYWxpZChiYXRjaC0+cHJldlBhZ2UpKTsKKwkJYmF0Y2gtPm1vcmVS aWdodCA9IChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgJiYKKwkJCQkJCQlCbG9ja051bWJl cklzVmFsaWQoYmF0Y2gtPm5leHRQYWdlKSk7CiAJfQogCi0JQXNzZXJ0KHNvLT5jdXJyUG9zLmZp cnN0SXRlbSA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7CisJLyogVW5sb2NrIChhbmQgbGlrZWx5 IHVucGluKSBidWZmZXIsIHBlciBhbWdldGJhdGNoIGNvbnRyYWN0ICovCisJaW5kZXhhbV91dGls X2JhdGNoX3VubG9jayhzY2FuLCBiYXRjaCk7CisKKwlBc3NlcnQoYmF0Y2gtPmZpcnN0SXRlbSA8 PSBiYXRjaC0+bGFzdEl0ZW0pOwogCXJldHVybiB0cnVlOwogfQogCiAvKgogICogTG9hZCBhbGwg dGhlIHF1YWxpZmllZCBpdGVtcyBmcm9tIGEgY3VycmVudCBpbmRleCBwYWdlCi0gKiBpbnRvIHNv LT5jdXJyUG9zLiBIZWxwZXIgZnVuY3Rpb24gZm9yIF9oYXNoX3JlYWRwYWdlLgorICogaW50byBi YXRjaC4gSGVscGVyIGZ1bmN0aW9uIGZvciBfaGFzaF9yZWFkcGFnZS4KICAqLwogc3RhdGljIGlu dAogX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBh Z2UsCi0JCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcikKKwkJ CQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJICAg QmF0Y2hJbmRleFNjYW4gYmF0Y2gpCiB7CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5P cGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlJbmRleFR1cGxlCWl0dXA7CkBAIC02MzksNyArNjEzLDcg QEAgX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBh Z2UsCiAJCQkJX2hhc2hfY2hlY2txdWFsKHNjYW4sIGl0dXApKQogCQkJewogCQkJCS8qIHR1cGxl IGlzIHF1YWxpZmllZCwgc28gcmVtZW1iZXIgaXQgKi8KLQkJCQlfaGFzaF9zYXZlaXRlbShzbywg aXRlbUluZGV4LCBvZmZudW0sIGl0dXApOworCQkJCV9oYXNoX3NhdmVpdGVtKGJhdGNoLCBpdGVt SW5kZXgsIG9mZm51bSwgaXR1cCk7CiAJCQkJaXRlbUluZGV4Kys7CiAJCQl9CiAJCQllbHNlCkBA IC02ODYsNyArNjYwLDcgQEAgX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVz YyBzY2FuLCBQYWdlIHBhZ2UsCiAJCQl7CiAJCQkJaXRlbUluZGV4LS07CiAJCQkJLyogdHVwbGUg aXMgcXVhbGlmaWVkLCBzbyByZW1lbWJlciBpdCAqLwotCQkJCV9oYXNoX3NhdmVpdGVtKHNvLCBp dGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJCQkJX2hhc2hfc2F2ZWl0ZW0oYmF0Y2gsIGl0ZW1J bmRleCwgb2ZmbnVtLCBpdHVwKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTcwNSwxMyArNjc5 LDE0IEBAIF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbiwgUGFn ZSBwYWdlLAogCX0KIH0KIAotLyogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gc28tPmN1cnJQb3Mu aXRlbXNbaXRlbUluZGV4XSAqLworLyogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gYmF0Y2gtPml0 ZW1zW2l0ZW1JbmRleF0gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotX2hhc2hfc2F2ZWl0ZW0oSGFz aFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCitfaGFzaF9zYXZlaXRlbShCYXRjaEluZGV4 U2NhbiBiYXRjaCwgaW50IGl0ZW1JbmRleCwKIAkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sIElu ZGV4VHVwbGUgaXR1cCkKIHsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJy UG9zLml0ZW1zW2l0ZW1JbmRleF07CisJQmF0Y2hNYXRjaGluZ0l0ZW0gKmN1cnJJdGVtID0gJmJh dGNoLT5pdGVtc1tpdGVtSW5kZXhdOwogCiAJY3Vyckl0ZW0tPmhlYXBUaWQgPSBpdHVwLT50X3Rp ZDsKIAljdXJySXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07CisJY3Vyckl0ZW0tPnR1cGxlT2Zm c2V0ID0gMDsJLyogSGFzaCBkb2Vzbid0IHN1cHBvcnQgaW5kZXgtb25seSBzY2FucyAqLwogfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMKaW5kZXggZjQxMjMzZmNkLi5kMDFkM2I3ZDIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYwpAQCAtNTEwLDY3ICs1MTAsNzQgQEAgX2hhc2hf Z2V0X25ld2J1Y2tldF9mcm9tX29sZGJ1Y2tldChSZWxhdGlvbiByZWwsIEJ1Y2tldCBvbGRfYnVj a2V0LAogICogX2hhc2hfa2lsbF9pdGVtcyAtIHNldCBMUF9ERUFEIHN0YXRlIGZvciBpdGVtcyBh biBpbmRleHNjYW4gY2FsbGVyIGhhcwogICogdG9sZCB1cyB3ZXJlIGtpbGxlZC4KICAqCi0gKiBz Y2FuLT5vcGFxdWUsIHJlZmVyZW5jZWQgbG9jYWxseSB0aHJvdWdoIHNvLCBjb250YWlucyBpbmZv cm1hdGlvbiBhYm91dCB0aGUKLSAqIGN1cnJlbnQgcGFnZSBhbmQga2lsbGVkIHR1cGxlcyB0aGVy ZW9uIChnZW5lcmFsbHksIHRoaXMgc2hvdWxkIG9ubHkgYmUKLSAqIGNhbGxlZCBpZiBzby0+bnVt S2lsbGVkID4gMCkuCisgKiBUaGUgYmF0Y2ggcGFyYW1ldGVyIGNvbnRhaW5zIGluZm9ybWF0aW9u IGFib3V0IHRoZSBjdXJyZW50IHBhZ2UgYW5kIGtpbGxlZAorICogdHVwbGVzIHRoZXJlb24gKHRo aXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlmIGJhdGNoLT5udW1LaWxsZWQgPiAwKS4KICAqCi0g KiBUaGUgY2FsbGVyIGRvZXMgbm90IGhhdmUgYSBsb2NrIG9uIHRoZSBwYWdlIGFuZCBtYXkgb3Ig bWF5IG5vdCBoYXZlIHRoZQotICogcGFnZSBwaW5uZWQgaW4gYSBidWZmZXIuICBOb3RlIHRoYXQg cmVhZC1sb2NrIGlzIHN1ZmZpY2llbnQgZm9yIHNldHRpbmcKLSAqIExQX0RFQUQgc3RhdHVzICh3 aGljaCBpcyBvbmx5IGEgaGludCkuCisgKiBDYWxsZXIgc2hvdWxkIG5vdCBoYXZlIGEgbG9jayBv biB0aGUgYmF0Y2ggcG9zaXRpb24ncyBwYWdlLCBidXQgbXVzdCBob2xkIGEKKyAqIGJ1ZmZlciBw aW4gd2hlbiAhZHJvcFBpbi4gIFdoZW4gd2UgcmV0dXJuLCBpdCBzdGlsbCB3b24ndCBiZSBsb2Nr ZWQuICBJdCdsbAorICogY29udGludWUgdG8gaG9sZCB3aGF0ZXZlciBwaW5zIHdlcmUgaGVsZCBi ZWZvcmUgY2FsbGluZyBoZXJlLgogICoKLSAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIHBpbiBvbiBi dWNrZXQgYnVmZmVyLCBidXQgbWF5IG9yIG1heSBub3QgaGF2ZSBwaW4KLSAqIG9uIG92ZXJmbG93 IGJ1ZmZlciwgYXMgaW5kaWNhdGVkIGJ5IEhhc2hTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3Mp LgotICoKLSAqIFdlIG1hdGNoIGl0ZW1zIGJ5IGhlYXAgVElEIGJlZm9yZSBhc3N1bWluZyB0aGV5 IGFyZSB0aGUgcmlnaHQgb25lcyB0bwotICogZGVsZXRlLgotICoKLSAqIFRoZXJlIGFyZSBuZXZl ciBhbnkgc2NhbnMgYWN0aXZlIGluIGEgYnVja2V0IGF0IHRoZSB0aW1lIFZBQ1VVTSBiZWdpbnMs Ci0gKiBiZWNhdXNlIFZBQ1VVTSB0YWtlcyBhIGNsZWFudXAgbG9jayBvbiB0aGUgcHJpbWFyeSBi dWNrZXQgcGFnZSBhbmQgc2NhbnMKLSAqIGhvbGQgYSBwaW4uICBBIHNjYW4gY2FuIGJlZ2luIGFm dGVyIFZBQ1VVTSBsZWF2ZXMgdGhlIHByaW1hcnkgYnVja2V0IHBhZ2UKLSAqIGJ1dCBiZWZvcmUg aXQgZmluaXNoZXMgdGhlIGVudGlyZSBidWNrZXQsIGJ1dCBpdCBjYW4gbmV2ZXIgcGFzcyBWQUNV VU0sCi0gKiBiZWNhdXNlIFZBQ1VVTSBhbHdheXMgbG9ja3MgdGhlIG5leHQgcGFnZSBiZWZvcmUg cmVsZWFzaW5nIHRoZSBsb2NrIG9uCi0gKiB0aGUgcHJldmlvdXMgb25lLiAgVGhlcmVmb3JlLCB3 ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGFjY2lkZW50YWxseQotICoga2lsbGluZyBhIFRJ RCB0aGF0IGhhcyBiZWVuIHJldXNlZCBmb3IgYW4gdW5yZWxhdGVkIHR1cGxlLgorICogV2UgbWF0 Y2ggaXRlbXMgYnkgaGVhcCBUSUQgYmVmb3JlIGFzc3VtaW5nIHRoZXkgYXJlIHRoZSByaWdodCBv bmVzIHRvIHNldAorICogTFBfREVBRC4gIElmIHRoZSBzY2FuIGlzIG9uZSB0aGF0IGhvbGRzIGEg YnVmZmVyIHBpbiBvbiB0aGUgdGFyZ2V0IHBhZ2UKKyAqIGNvbnRpbnVvdXNseSBmcm9tIGluaXRp YWxseSByZWFkaW5nIHRoZSBpdGVtcyB1bnRpbCBhcHBseWluZyB0aGlzIGZ1bmN0aW9uCisgKiAo aWYgaXQgaXMgYSAhZHJvcFBpbiBzY2FuKSwgVkFDVVVNIGNhbm5vdCBoYXZlIGRlbGV0ZWQgYW55 IGl0ZW1zIG9uIHRoZQorICogcGFnZSwgc28gdGhlIHBhZ2UncyBUSURzIGNhbid0IGhhdmUgYmVl biByZWN5Y2xlZCBieSBub3cuICBUaGVyZSdzIG5vIHJpc2sKKyAqIHRoYXQgd2UnbGwgY29uZnVz ZSBhIG5ldyBpbmRleCB0dXBsZSB0aGF0IGhhcHBlbnMgdG8gdXNlIGEgcmVjeWNsZWQgVElECisg KiB3aXRoIGEgbm93LXJlbW92ZWQgdHVwbGUgd2l0aCB0aGUgc2FtZSBUSUQgKHRoYXQgdXNlZCB0 byBiZSBvbiB0aGlzIHNhbWUKKyAqIHBhZ2UpLiAgV2UgY2FuJ3QgcmVseSBvbiB0aGF0IGR1cmlu ZyBzY2FucyB0aGF0IGRyb3AgYnVmZmVyIHBpbnMgZWFnZXJseQorICogKGkuZS4gZHJvcFBpbiBz Y2FucyksIHRob3VnaCwgc28gd2UgbXVzdCBjb25kaXRpb24gc2V0dGluZyBMUF9ERUFEIGJpdHMg b24KKyAqIHRoZSBwYWdlIExTTiBoYXZpbmcgbm90IGNoYW5nZWQgc2luY2UgYmFjayB3aGVuIF9o YXNoX3JlYWRwYWdlIHNhdyB0aGUgcGFnZS4KKyAqIFdlIHRvdGFsbHkgZ2l2ZSB1cCBvbiBzZXR0 aW5nIExQX0RFQUQgYml0cyB3aGVuIHRoZSBwYWdlIExTTiBjaGFuZ2VkLgogICovCiB2b2lkCi1f aGFzaF9raWxsX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKK19oYXNoX2tpbGxfaXRlbXMoSW5k ZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBiYXRjaCkKIHsKLQlIYXNoU2Nhbk9wYXF1 ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCVJlbGF0aW9uCXJlbCA9IHNj YW4tPmluZGV4UmVsYXRpb247Ci0JQmxvY2tOdW1iZXIgYmxrbm87CiAJQnVmZmVyCQlidWY7CiAJ UGFnZQkJcGFnZTsKIAlIYXNoUGFnZU9wYXF1ZSBvcGFxdWU7CiAJT2Zmc2V0TnVtYmVyIG9mZm51 bSwKIAkJCQltYXhvZmY7Ci0JaW50CQkJbnVtS2lsbGVkID0gc28tPm51bUtpbGxlZDsKKwlpbnQJ CQludW1LaWxsZWQgPSBiYXRjaC0+bnVtS2lsbGVkOwogCWludAkJCWk7CiAJYm9vbAkJa2lsbGVk c29tZXRoaW5nID0gZmFsc2U7Ci0JYm9vbAkJaGF2ZVBpbiA9IGZhbHNlOwogCi0JQXNzZXJ0KHNv LT5udW1LaWxsZWQgPiAwKTsKLQlBc3NlcnQoc28tPmtpbGxlZEl0ZW1zICE9IE5VTEwpOwotCUFz c2VydChIYXNoU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKKwlBc3NlcnQobnVtS2lsbGVk ID4gMCk7CisJQXNzZXJ0KGJhdGNoLT5raWxsZWRJdGVtcyAhPSBOVUxMKTsKKwlBc3NlcnQoQmxv Y2tOdW1iZXJJc1ZhbGlkKGJhdGNoLT5jdXJyUGFnZSkpOwogCi0JLyoKLQkgKiBBbHdheXMgcmVz ZXQgdGhlIHNjYW4gc3RhdGUsIHNvIHdlIGRvbid0IGxvb2sgZm9yIHNhbWUgaXRlbXMgb24gb3Ro ZXIKLQkgKiBwYWdlcy4KLQkgKi8KLQlzby0+bnVtS2lsbGVkID0gMDsKKwkvKiBBbHdheXMgaW52 YWxpZGF0ZSBiYXRjaC0+a2lsbGVkSXRlbXNbXSBiZWZvcmUgZnJlZWluZyBiYXRjaCAqLworCWJh dGNoLT5udW1LaWxsZWQgPSAwOwogCi0JYmxrbm8gPSBzby0+Y3VyclBvcy5jdXJyUGFnZTsKLQlp ZiAoSGFzaFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpCisJaWYgKCFzY2FuLT5iYXRjaHF1 ZXVlLT5kcm9wUGluKQogCXsKIAkJLyoKLQkJICogV2UgYWxyZWFkeSBoYXZlIHBpbiBvbiB0aGlz IGJ1ZmZlciwgc28sIGFsbCB3ZSBuZWVkIHRvIGRvIGlzCi0JCSAqIGFjcXVpcmUgbG9jayBvbiBp dC4KKwkJICogV2UgaGF2ZSBoZWxkIHRoZSBwaW4gb24gdGhpcyBwYWdlIHNpbmNlIHdlIHJlYWQg dGhlIGluZGV4IHR1cGxlcywKKwkJICogc28gYWxsIHdlIG5lZWQgdG8gZG8gaXMgbG9jayBpdC4g IFRoZSBwaW4gd2lsbCBoYXZlIHByZXZlbnRlZAorCQkgKiBjb25jdXJyZW50IFZBQ1VVTXMgZnJv bSByZWN5Y2xpbmcgYW55IG9mIHRoZSBUSURzIG9uIHRoZSBwYWdlLgogCQkgKi8KLQkJaGF2ZVBp biA9IHRydWU7Ci0JCWJ1ZiA9IHNvLT5jdXJyUG9zLmJ1ZjsKKwkJYnVmID0gYmF0Y2gtPmJ1ZjsK IAkJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9MT0NLX1NIQVJFKTsKIAl9CiAJZWxzZQotCQlidWYg PSBfaGFzaF9nZXRidWYocmVsLCBibGtubywgSEFTSF9SRUFELCBMSF9PVkVSRkxPV19QQUdFKTsK Kwl7CisJCVhMb2dSZWNQdHIJbGF0ZXN0bHNuOworCisJCUFzc2VydChSZWxhdGlvbk5lZWRzV0FM KHJlbCkpOworCQlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBiYXRjaC0+Y3VyclBhZ2UsIEhBU0hf UkVBRCwKKwkJCQkJCSAgIExIX0JVQ0tFVF9QQUdFIHwgTEhfT1ZFUkZMT1dfUEFHRSk7CisKKwkJ bGF0ZXN0bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJ1Zik7CisJCUFzc2VydChiYXRjaC0+bHNu IDw9IGxhdGVzdGxzbik7CisJCWlmIChiYXRjaC0+bHNuICE9IGxhdGVzdGxzbikKKwkJeworCQkJ LyogTW9kaWZpZWQsIGdpdmUgdXAgb24gaGludGluZyAqLworCQkJX2hhc2hfcmVsYnVmKHJlbCwg YnVmKTsKKwkJCXJldHVybjsKKwkJfQorCisJCS8qIFVubW9kaWZpZWQsIGhpbnRpbmcgaXMgc2Fm ZSAqLworCX0KIAogCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7CiAJb3BhcXVlID0gSGFzaFBh Z2VHZXRPcGFxdWUocGFnZSk7CkBAIC01NzgsMTMgKzU4NSwxMyBAQCBfaGFzaF9raWxsX2l0ZW1z KEluZGV4U2NhbkRlc2Mgc2NhbikKIAogCWZvciAoaSA9IDA7IGkgPCBudW1LaWxsZWQ7IGkrKykK IAl7Ci0JCWludAkJCWl0ZW1JbmRleCA9IHNvLT5raWxsZWRJdGVtc1tpXTsKLQkJSGFzaFNjYW5Q b3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOworCQlpbnQJ CQlpdGVtSW5kZXggPSBiYXRjaC0+a2lsbGVkSXRlbXNbaV07CisJCUJhdGNoTWF0Y2hpbmdJdGVt ICpjdXJySXRlbSA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsKIAogCQlvZmZudW0gPSBjdXJy SXRlbS0+aW5kZXhPZmZzZXQ7CiAKLQkJQXNzZXJ0KGl0ZW1JbmRleCA+PSBzby0+Y3VyclBvcy5m aXJzdEl0ZW0gJiYKLQkJCSAgIGl0ZW1JbmRleCA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7CisJ CUFzc2VydChpdGVtSW5kZXggPj0gYmF0Y2gtPmZpcnN0SXRlbSAmJgorCQkJICAgaXRlbUluZGV4 IDw9IGJhdGNoLT5sYXN0SXRlbSk7CiAKIAkJd2hpbGUgKG9mZm51bSA8PSBtYXhvZmYpCiAJCXsK QEAgLTYxMyw5ICs2MjAsOCBAQCBfaGFzaF9raWxsX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikK IAkJTWFya0J1ZmZlckRpcnR5SGludChidWYsIHRydWUpOwogCX0KIAotCWlmIChzby0+aGFzaHNv X2J1Y2tldF9idWYgPT0gc28tPmN1cnJQb3MuYnVmIHx8Ci0JCWhhdmVQaW4pCi0JCUxvY2tCdWZm ZXIoc28tPmN1cnJQb3MuYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCWlmICghc2Nhbi0+YmF0 Y2hxdWV1ZS0+ZHJvcFBpbikKKwkJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7 CiAJZWxzZQogCQlfaGFzaF9yZWxidWYocmVsLCBidWYpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdAppbmRleCA2ODEyZDJmZDcuLmUyM2E5YTk4ZCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKQEAgLTExODQsOCArMTE4NCw2IEBAIEhhc2hQYWdlU3RhdAogSGFzaFBhdGgKIEhhc2hTY2Fu T3BhcXVlCiBIYXNoU2Nhbk9wYXF1ZURhdGEKLUhhc2hTY2FuUG9zRGF0YQotSGFzaFNjYW5Qb3NJ dGVtCiBIYXNoU2tld0J1Y2tldAogSGFzaFN0YXRlCiBIYXNoVmFsdWVGdW5jCi0tIAoyLjUxLjAK Cg== --000000000000acefda0645a3cfd4 Content-Type: application/octet-stream; name="v4-0001-Add-batching-interfaces-used-by-heapam-and-nbtree.patch" Content-Disposition: attachment; filename="v4-0001-Add-batching-interfaces-used-by-heapam-and-nbtree.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mj0taosb0 RnJvbSAwNmI4NTUwMzIzZjdmODA0OGQxYTRhZTI3NjA4MGY3YjMzODIwNTAxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgOSBTZXAgMjAyNSAxOTo1MDowMyAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjQgMS80XSBBZGQg YmF0Y2hpbmcgaW50ZXJmYWNlcyB1c2VkIGJ5IGhlYXBhbSBhbmQgbmJ0cmVlLgoKQWRkIGEgbmV3 IGFtZ2V0YmF0Y2ggaW5kZXggQU0gaW50ZXJmYWNlIHRoYXQgYWxsb3dzIGluZGV4IGFjY2VzcyBt ZXRob2RzCnRvIGltcGxlbWVudCBwbGFpbi9vcmRlcmVkIGluZGV4IHNjYW5zIHRoYXQgcmV0dXJu IGluZGV4IGVudHJpZXMgaW4KcGVyLWxlYWYtcGFnZSBiYXRjaGVzLCByYXRoZXIgdGhhbiBvbmUg YXQgYSB0aW1lLiAgVGhpcyBlbmFibGVzIGEKdmFyaWV0eSBvZiBvcHRpbWl6YXRpb25zIG9uIHRo ZSB0YWJsZSBBTSBzaWRlLCBtb3N0IG5vdGFibHkgSS9PCnByZWZldGNoaW5nIG9mIGhlYXAgdHVw bGVzIGR1cmluZyBvcmRlcmVkIGluZGV4IHNjYW5zLiAgSXQgd2lsbCBhbHNvCmVuYWJsZSBhbiBv cHRpbWl6YXRpb24gdGhhdCBoYXMgaGVhcGFtIGF2b2lkIHJlcGVhdGVkbHkgbG9ja2luZyBhbmQK dW5sb2NraW5nIHRoZSBzYW1lIGhlYXAgcGFnZSdzIGJ1ZmZlci4KCkluZGV4IGFjY2VzcyBtZXRo b2RzIHRoYXQgc3VwcG9ydCBwbGFpbiBpbmRleCBzY2FucyBtdXN0IG5vdyBpbXBsZW1lbnQKZWl0 aGVyIHRoZSBhbWdldGJhdGNoIGludGVyZmFjZSBPUiB0aGUgYW1nZXR0dXBsZSBpbnRlcmZhY2Uu ICBUaGUKYW1nZXR0dXBsZSBpbnRlcmZhY2Ugd2lsbCBzdGlsbCBiZSB1c2VkIGJ5IGluZGV4IEFN cyB0aGF0IHJlcXVpcmUgZGlyZWN0CmNvbnRyb2wgb3ZlciB0aGUgcHJvZ3Jlc3Mgb2YgaW5kZXgg c2NhbnMgKGUuZy4sIEdpU1Qgd2l0aCBLTk4gb3JkZXJlZApzY2FucykuCgpUaGlzIGNvbW1pdCBh bHNvIGFkZHMgYSBuZXcgdGFibGUgQU0gaW50ZXJmYWNlIGNhbGxiYWNrLCBjYWxsZWQgYnkgdGhl CmNvcmUgZXhlY3V0b3IgdGhyb3VnaCB0aGUgbmV3IHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBz aGltIGZ1bmN0aW9uLgpUaGlzIGFsbG93cyB0aGUgdGFibGUgQU0gdG8gZGlyZWN0bHkgbWFuYWdl IHRoZSBwcm9ncmVzcyBvZiBpbmRleCBzY2FucwpyYXRoZXIgdGhhbiBoYXZpbmcgaW5kaXZpZHVh bCBUSURzIHBhc3NlZCBpbiBieSB0aGUgY2FsbGVyLiBUaGUKYW1nZXRiYXRjaCBpbnRlcmZhY2Ug aXMgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIG5ldyBhcHByb2FjaCB0byBvcmRlcmVkCmluZGV4 IHNjYW5zIGFkZGVkIHRvIHRoZSB0YWJsZSBBTS4gIFRoZSB0YWJsZSBBTSBjYW4gYXBwbHkga25v d2xlZGdlIG9mCndoaWNoIFRJRHMgd2lsbCBiZSByZXR1cm5lZCB0byBzY2FuIGluIHRoZSBuZWFy IGZ1dHVyZSB0byBvcHRpbWl6ZSBhbmQKYmF0Y2ggdGFibGUgQU0gYmxvY2sgYWNjZXNzZXMsIGFu ZCB0byBwZXJmb3JtIEkvTyBwcmVmZXRjaGluZy4gIFRoZXNlCm9wdGltaXphdGlvbnMgYXJlIGxl ZnQgYXMgd29yayBmb3IgbGF0ZXIgY29tbWl0cy4KCkJhdGNoZXMgcmV0dXJuZWQgZnJvbSBhbWdl dGJhdGNoIGFyZSBndWFyYW50ZWVkIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBhbgppbmRleCBwYWdl IGNvbnRhaW5pbmcgYXQgbGVhc3Qgb25lIG1hdGNoaW5nIHR1cGxlLiAgVGhlIGFtZ2V0YmF0Y2gK aW50ZXJmYWNlIG1heSBob2xkIGJ1ZmZlciBwaW5zIGFzIGludGVybG9ja3MgYWdhaW5zdCBjb25j dXJyZW50IFRJRApyZWN5Y2xpbmcgYnkgVkFDVVVNLiAgVGhpcyBleHRlbmRzL2dlbmVyYWxpemVz IHRoZSBtZWNoYW5pc20gYWRkZWQgdG8KbmJ0cmVlIGJ5IGNvbW1pdCAyZWQ1Yjg3ZiB0byBhbGwg aW5kZXggQU1zIHRoYXQgYWRkIHN1cHBvcnQgZm9yIHRoZSBuZXcKYW1nZXRiYXRjaCBpbnRlcmZh Y2UuCgpBdXRob3I6IFRvbWFzIFZvbmRyYSA8dG9tYXNAdm9uZHJhLm1lPgpBdXRob3I6IFBldGVy IEdlb2doZWdhbiA8cGdAYm93dC5pZT4KUmV2aWV3ZWQtQnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJl c0BhbmFyYXplbC5kZT4KUmV2aWV3ZWQtQnk6IFRob21hcyBNdW5ybyA8dGhvbWFzLm11bnJvQGdt YWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9jZjg1ZjQ2Zi1iMDJmLTA1 YjItNTI0OC01MDAwYjg5NGViYWJAZW50ZXJwcmlzZWRiLmNvbQpEaXNjdXNzaW9uOiBodHRwczov L3Bvc3Rnci5lcy9tL2VmYWMzMjM4LTZmMzQtNDFlYS1hMzkzLTI2Y2MwNDQxYjUwNiU0MHZvbmRy YS5tZQpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBSDItV3prOSUzRHglM0RhMlRi Y3FZY1glMkJYWG1ESFFyNSUzRDF2OW00Wl92OGEtS3dGMVpvejBBJTQwbWFpbC5nbWFpbC5jb20K LS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCAgICAgICAgICAgICAgICAgICAgfCAgMjIg Ky0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oICAgICAgICAgICAgICAgICAgICB8ICAyNyAr LQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAgICAgICAgIHwgICA1ICsK IHNyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCAgICAgICAgICAgICAgICAgICB8IDE3NiArLS0t LQogc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCAgICAgICAgICAgICAgICAgIHwgMjQ0ICsr KysrKysKIHNyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggICAgICAgICAgICAgICAgICB8ICA1 NyArLQogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgICAgICAgIHwgICAy IC0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAgMiAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jICAgICAgICAgICAgICAgIHwgICA1ICst CiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jICAgICAgICAgICAgICAgfCAgIDYgKy0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jICAgICAgICAgICAgICB8ICAgNSArLQog c3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jICAgICAgICAgICAgICAgIHwgICA1ICstCiBz cmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgICAgICAgICAgICAgICAgfCAgIDUgKy0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgICAgICB8IDUxMiArKysrKysr KysrKysrLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlICAgICAgICAgICAgIHwg ICAzICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyAgICAgICAgICAgICAgfCAg MTAgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMgICAgICAgICAgICB8IDEz MCArLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jICAgICAgICAgfCA2 NDAgKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVp bGQgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMg ICAgICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2Uu YyAgICAgICB8IDE5NiArKystLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMg ICAgICAgICAgICB8IDMwNiArKy0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 c2VhcmNoLmMgICAgICAgICB8IDUxMSArKysrKy0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnR1dGlscy5jICAgICAgICAgIHwgIDcwICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mv c3BnaXN0L3NwZ3V0aWxzLmMgICAgICAgICAgfCAgIDUgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90 YWJsZS90YWJsZWFtLmMgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMv Y29uc3RyYWludC5jICAgICAgICAgICAgIHwgICAzICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9p bmRleGNtZHMuYyAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNBbWkuYyAgICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y0luZGV4aW5nLmMgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVj UmVwbGljYXRpb24uYyAgICAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJ bmRleG9ubHlzY2FuLmMgICAgICB8IDEwMCArLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJ bmRleHNjYW4uYyAgICAgICAgICB8ICAxMiArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv aW5keHBhdGguYyAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9w bGFuY2F0LmMgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvcmVsYXRpb24uYyAgICB8ICAgMyArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMu YyAgICAgICAgICAgICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3Mu YyAgICAgICAgICAgICAgfCAgNTcgKy0KIGNvbnRyaWIvYmxvb20vYmx1dGlscy5jICAgICAgICAg ICAgICAgICAgICAgICB8ICAgMyArLQogZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCAgICAgICAg ICAgICAgICAgICAgIHwgMzEwICsrKysrKystLQogZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFi bGUuc2dtbCAgICAgICAgICAgIHwgIDEzICstCiAuLi4vbW9kdWxlcy9kdW1teV9pbmRleF9hbS9k dW1teV9pbmRleF9hbS5jICAgfCAgIDQgKy0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0ICAgICAgICAgICAgICB8ICAgNCAtCiA0MyBmaWxlcyBjaGFuZ2VkLCAyMjk1IGluc2VydGlv bnMoKyksIDExOTQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vz cy9hbWFwaS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKaW5kZXggNjNkZDQxYzFmLi5h N2ViMzNjZTkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCisrKyBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCkBAIC0xOTgsNiArMTk4LDE1IEBAIHR5cGVkZWYgdm9p ZCAoKmFtcmVzY2FuX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogdHlwZWRlZiBib29s ICgqYW1nZXR0dXBsZV9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSBT Y2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CiAKKy8qIG5leHQgYmF0Y2ggb2YgdmFsaWQgdHVwbGVz ICovCit0eXBlZGVmIEJhdGNoSW5kZXhTY2FuICgqYW1nZXRiYXRjaF9mdW5jdGlvbikgKEluZGV4 U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkJICAgQmF0Y2hJbmRleFNjYW4gcHJpb3JiYXRjaCwK KwkJCQkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOworCisvKiByZWxlYXNlIGJh dGNoIG9mIHZhbGlkIHR1cGxlcyAqLwordHlwZWRlZiB2b2lkICgqYW1mcmVlYmF0Y2hfZnVuY3Rp b24pIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkgIEJhdGNoSW5kZXhTY2FuIGJhdGNo KTsKKwogLyogZmV0Y2ggYWxsIHZhbGlkIHR1cGxlcyAqLwogdHlwZWRlZiBpbnQ2NCAoKmFtZ2V0 Yml0bWFwX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJICAgVElEQml0 bWFwICp0Ym0pOwpAQCAtMjA1LDExICsyMTQsOSBAQCB0eXBlZGVmIGludDY0ICgqYW1nZXRiaXRt YXBfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCiAvKiBlbmQgaW5kZXggc2NhbiAqLwog dHlwZWRlZiB2b2lkICgqYW1lbmRzY2FuX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsK IAotLyogbWFyayBjdXJyZW50IHNjYW4gcG9zaXRpb24gKi8KLXR5cGVkZWYgdm9pZCAoKmFtbWFy a3Bvc19mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci0KLS8qIHJlc3RvcmUgbWFya2Vk IHNjYW4gcG9zaXRpb24gKi8KLXR5cGVkZWYgdm9pZCAoKmFtcmVzdHJwb3NfZnVuY3Rpb24pIChJ bmRleFNjYW5EZXNjIHNjYW4pOworLyogaW52YWxpZGF0ZSBpbmRleCBBTSBzdGF0ZSB0aGF0IGlu ZGVwZW5kZW50bHkgdHJhY2tzIHNjYW4ncyBwb3NpdGlvbiAqLwordHlwZWRlZiB2b2lkICgqYW1w b3NyZXNldF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCSBCYXRjaElu ZGV4U2NhbiBiYXRjaCk7CiAKIC8qCiAgKiBDYWxsYmFjayBmdW5jdGlvbiBzaWduYXR1cmVzIC0g Zm9yIHBhcmFsbGVsIGluZGV4IHNjYW5zLgpAQCAtMzA5LDEwICszMTYsMTEgQEAgdHlwZWRlZiBz dHJ1Y3QgSW5kZXhBbVJvdXRpbmUKIAlhbWJlZ2luc2Nhbl9mdW5jdGlvbiBhbWJlZ2luc2NhbjsK IAlhbXJlc2Nhbl9mdW5jdGlvbiBhbXJlc2NhbjsKIAlhbWdldHR1cGxlX2Z1bmN0aW9uIGFtZ2V0 dHVwbGU7IC8qIGNhbiBiZSBOVUxMICovCisJYW1nZXRiYXRjaF9mdW5jdGlvbiBhbWdldGJhdGNo OyAvKiBjYW4gYmUgTlVMTCAqLworCWFtZnJlZWJhdGNoX2Z1bmN0aW9uIGFtZnJlZWJhdGNoOwkv KiBjYW4gYmUgTlVMTCAqLwogCWFtZ2V0Yml0bWFwX2Z1bmN0aW9uIGFtZ2V0Yml0bWFwOwkvKiBj YW4gYmUgTlVMTCAqLwogCWFtZW5kc2Nhbl9mdW5jdGlvbiBhbWVuZHNjYW47Ci0JYW1tYXJrcG9z X2Z1bmN0aW9uIGFtbWFya3BvczsJLyogY2FuIGJlIE5VTEwgKi8KLQlhbXJlc3RycG9zX2Z1bmN0 aW9uIGFtcmVzdHJwb3M7IC8qIGNhbiBiZSBOVUxMICovCisJYW1wb3NyZXNldF9mdW5jdGlvbiBh bXBvc3Jlc2V0OyAvKiBjYW4gYmUgTlVMTCAqLwogCiAJLyogaW50ZXJmYWNlIGZ1bmN0aW9ucyB0 byBzdXBwb3J0IHBhcmFsbGVsIGluZGV4IHNjYW5zICovCiAJYW1lc3RpbWF0ZXBhcmFsbGVsc2Nh bl9mdW5jdGlvbiBhbWVzdGltYXRlcGFyYWxsZWxzY2FuOyAvKiBjYW4gYmUgTlVMTCAqLwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv Z2VuYW0uaAppbmRleCA5MjAwYTIyYmQuLmYxOTg0ZTcwMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvYWNjZXNzL2dlbmFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKQEAgLTEx NSw2ICsxMTUsNyBAQCB0eXBlZGVmIGJvb2wgKCpJbmRleEJ1bGtEZWxldGVDYWxsYmFjaykgKEl0 ZW1Qb2ludGVyIGl0ZW1wdHIsIHZvaWQgKnN0YXRlKTsKIAogLyogc3RydWN0IGRlZmluaXRpb25z IGFwcGVhciBpbiByZWxzY2FuLmggKi8KIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRh ICpJbmRleFNjYW5EZXNjOwordHlwZWRlZiBzdHJ1Y3QgQmF0Y2hJbmRleFNjYW5EYXRhICpCYXRj aEluZGV4U2NhbjsKIHR5cGVkZWYgc3RydWN0IFN5c1NjYW5EZXNjRGF0YSAqU3lzU2NhbkRlc2M7 CiAKIHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsSW5kZXhTY2FuRGVzY0RhdGEgKlBhcmFsbGVsSW5k ZXhTY2FuRGVzYzsKQEAgLTE3NSw2ICsxNzYsNyBAQCBleHRlcm4gdm9pZCBpbmRleF9pbnNlcnRf Y2xlYW51cChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCiBleHRlcm4gSW5kZXhTY2FuRGVzYyBp bmRleF9iZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCQkJCQkJIFJlbGF0aW9u IGluZGV4UmVsYXRpb24sCisJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKmlvc190YWJsZXNsb3Qs CiAJCQkJCQkJCQkgU25hcHNob3Qgc25hcHNob3QsCiAJCQkJCQkJCQkgSW5kZXhTY2FuSW5zdHJ1 bWVudGF0aW9uICppbnN0cnVtZW50LAogCQkJCQkJCQkJIGludCBua2V5cywgaW50IG5vcmRlcmJ5 cyk7CkBAIC0yMDEsMTQgKzIwMywxMiBAQCBleHRlcm4gdm9pZCBpbmRleF9wYXJhbGxlbHNjYW5f aW5pdGlhbGl6ZShSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiBleHRlcm4gdm9pZCBpbmRleF9wYXJh bGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5k ZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhlYXByZWwsCiAJCQkJCQkJCQkJCSAgUmVs YXRpb24gaW5kZXhyZWwsCisJCQkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKmlvc190YWJsZXNs b3QsCiAJCQkJCQkJCQkJCSAgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50LAog CQkJCQkJCQkJCQkgIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywKIAkJCQkJCQkJCQkJICBQYXJh bGxlbEluZGV4U2NhbkRlc2MgcHNjYW4pOwogZXh0ZXJuIEl0ZW1Qb2ludGVyIGluZGV4X2dldG5l eHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVj dGlvbik7Ci1leHRlcm4gYm9vbCBpbmRleF9mZXRjaF9oZWFwKEluZGV4U2NhbkRlc2Mgc2Nhbiwg VHVwbGVUYWJsZVNsb3QgKnNsb3QpOwotZXh0ZXJuIGJvb2wgaW5kZXhfZ2V0bmV4dF9zbG90KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCi0JCQkJCQkJICAgVHVw bGVUYWJsZVNsb3QgKnNsb3QpOwogZXh0ZXJuIGludDY0IGluZGV4X2dldGJpdG1hcChJbmRleFNj YW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqYml0bWFwKTsKIAogZXh0ZXJuIEluZGV4QnVsa0RlbGV0 ZVJlc3VsdCAqaW5kZXhfYnVsa19kZWxldGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLApAQCAtMjcy LDQgKzI3MiwyNSBAQCBleHRlcm4gdm9pZCBzeXN0YWJsZV9pbnBsYWNlX3VwZGF0ZV9iZWdpbihS ZWxhdGlvbiByZWxhdGlvbiwKIGV4dGVybiB2b2lkIHN5c3RhYmxlX2lucGxhY2VfdXBkYXRlX2Zp bmlzaCh2b2lkICpzdGF0ZSwgSGVhcFR1cGxlIHR1cGxlKTsKIGV4dGVybiB2b2lkIHN5c3RhYmxl X2lucGxhY2VfdXBkYXRlX2NhbmNlbCh2b2lkICpzdGF0ZSk7CiAKKy8qCisgKiBhbWdldGJhdGNo IHV0aWxpdGllcyBjYWxsZWQgYnkgaW5kZXhhbS5jIChpbiBpbmRleGJhdGNoLmMpCisgKi8KK3N0 cnVjdCBCYXRjaFF1ZXVlSXRlbVBvczsKK2V4dGVybiB2b2lkIGluZGV4X2JhdGNoX2luaXQoSW5k ZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiBib29sIGJhdGNoX2dldG5leHQoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CitleHRlcm4gdm9pZCBiYXRjaF9mcmVl KEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpOworZXh0ZXJuIHZvaWQg aW5kZXhfYmF0Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBib29sIGNvbXBsZXRlKTsKK2V4 dGVybiB2b2lkIGluZGV4X2JhdGNoX21hcmtfcG9zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRl cm4gdm9pZCBpbmRleF9iYXRjaF9yZXN0b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0 ZXJuIHZvaWQgaW5kZXhfYmF0Y2hfa2lsbF9pdGVtKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRl cm4gdm9pZCBpbmRleF9iYXRjaF9lbmQoSW5kZXhTY2FuRGVzYyBzY2FuKTsKKworLyoKKyAqIGFt Z2V0YmF0Y2ggdXRpbGl0aWVzIGNhbGxlZCBieSBpbmRleCBBTXMgKGluIGluZGV4YmF0Y2guYykK KyAqLworZXh0ZXJuIHZvaWQgaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayhJbmRleFNjYW5EZXNj IHNjYW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNoKTsKK2V4dGVybiBCYXRjaEluZGV4U2NhbiBpbmRl eGFtX3V0aWxfYmF0Y2hfYWxsb2MoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkgICBp bnQgbWF4aXRlbXMsIGJvb2wgd2FudF9pdHVwKTsKK2V4dGVybiB2b2lkIGluZGV4YW1fdXRpbF9i YXRjaF9yZWxlYXNlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpOwor CiAjZW5kaWYJCQkJCQkJLyogR0VOQU1fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNj ZXNzL2hlYXBhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCmluZGV4IDYzMmM0MzMy YS4uZThkMzQ3ZTQ3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysr IGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBAIC0xMTgsNiArMTE4LDExIEBAIHR5cGVk ZWYgc3RydWN0IEluZGV4RmV0Y2hIZWFwRGF0YQogCiAJQnVmZmVyCQl4c19jYnVmOwkJLyogY3Vy cmVudCBoZWFwIGJ1ZmZlciBpbiBzY2FuLCBpZiBhbnkgKi8KIAkvKiBOQjogaWYgeHNfY2J1ZiBp cyBub3QgSW52YWxpZEJ1ZmZlciwgd2UgaG9sZCBhIHBpbiBvbiB0aGF0IGJ1ZmZlciAqLworCisJ QnVmZmVyCQl2bWJ1ZjsJCQkvKiB2aXNpYmlsaXR5IG1hcCBidWZmZXIgKi8KKwlUdXBsZVRhYmxl U2xvdCAqaW9zX3RhYmxlc2xvdDsJLyogdHJhbnNpZW50IHNsb3QgZm9yIGZldGNoaW5nIHR1cGxl cyB0bworCQkJCQkJCQkJICogY2hlY2sgdmlzaWJpbGl0eSBkdXJpbmcgaW5kZXgtb25seQorCQkJ CQkJCQkJICogc2NhbnMgKi8KIH0gSW5kZXhGZXRjaEhlYXBEYXRhOwogCiAvKiBSZXN1bHQgY29k ZXMgZm9yIEhlYXBUdXBsZVNhdGlzZmllc1ZhY3V1bSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvYWNjZXNzL25idHJlZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCmluZGV4IDdh M2VmZDIwOS4uNjU4YzQ2YTFmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVl LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCkBAIC05MjQsMTEyICs5MjQsNiBA QCB0eXBlZGVmIHN0cnVjdCBCVFZhY3V1bVBvc3RpbmdEYXRhCiAKIHR5cGVkZWYgQlRWYWN1dW1Q b3N0aW5nRGF0YSAqQlRWYWN1dW1Qb3N0aW5nOwogCi0vKgotICogQlRTY2FuT3BhcXVlRGF0YSBp cyB0aGUgYnRyZWUtcHJpdmF0ZSBzdGF0ZSBuZWVkZWQgZm9yIGFuIGluZGV4c2Nhbi4KLSAqIFRo aXMgY29uc2lzdHMgb2YgcHJlcHJvY2Vzc2VkIHNjYW4ga2V5cyAoc2VlIF9idF9wcmVwcm9jZXNz X2tleXMoKSBmb3IKLSAqIGRldGFpbHMgb2YgdGhlIHByZXByb2Nlc3NpbmcpLCBpbmZvcm1hdGlv biBhYm91dCB0aGUgY3VycmVudCBsb2NhdGlvbgotICogb2YgdGhlIHNjYW4sIGFuZCBpbmZvcm1h dGlvbiBhYm91dCB0aGUgbWFya2VkIGxvY2F0aW9uLCBpZiBhbnkuICAoV2UgdXNlCi0gKiBCVFNj YW5Qb3NEYXRhIHRvIHJlcHJlc2VudCB0aGUgZGF0YSBuZWVkZWQgZm9yIGVhY2ggb2YgY3VycmVu dCBhbmQgbWFya2VkCi0gKiBsb2NhdGlvbnMuKQlJbiBhZGRpdGlvbiB3ZSBjYW4gcmVtZW1iZXIg c29tZSBrbm93bi1raWxsZWQgaW5kZXggZW50cmllcwotICogdGhhdCBtdXN0IGJlIG1hcmtlZCBi ZWZvcmUgd2UgY2FuIG1vdmUgb2ZmIHRoZSBjdXJyZW50IHBhZ2UuCi0gKgotICogSW5kZXggc2Nh bnMgd29yayBhIHBhZ2UgYXQgYSB0aW1lOiB3ZSBwaW4gYW5kIHJlYWQtbG9jayB0aGUgcGFnZSwg aWRlbnRpZnkKLSAqIGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgb24gdGhlIHBhZ2UgYW5kIHNhdmUg dGhlbSBpbiBCVFNjYW5Qb3NEYXRhLCB0aGVuCi0gKiByZWxlYXNlIHRoZSByZWFkLWxvY2sgd2hp bGUgcmV0dXJuaW5nIHRoZSBpdGVtcyB0byB0aGUgY2FsbGVyIGZvcgotICogcHJvY2Vzc2luZy4g IFRoaXMgYXBwcm9hY2ggbWluaW1pemVzIGxvY2svdW5sb2NrIHRyYWZmaWMuICBXZSBtdXN0IGFs d2F5cwotICogZHJvcCB0aGUgbG9jayB0byBtYWtlIGl0IG9rYXkgZm9yIGNhbGxlciB0byBwcm9j ZXNzIHRoZSByZXR1cm5lZCBpdGVtcy4KLSAqIFdoZXRoZXIgb3Igbm90IHdlIGNhbiBhbHNvIHJl bGVhc2UgdGhlIHBpbiBkdXJpbmcgdGhpcyB3aW5kb3cgd2lsbCB2YXJ5LgotICogV2UgZHJvcCB0 aGUgcGluICh3aGVuIHNvLT5kcm9wUGluKSB0byBhdm9pZCBibG9ja2luZyBwcm9ncmVzcyBieSBW QUNVVU0KLSAqIChzZWUgbmJ0cmVlL1JFQURNRSBzZWN0aW9uIGFib3V0IG1ha2luZyBjb25jdXJy ZW50IFRJRCByZWN5Y2xpbmcgc2FmZSkuCi0gKiBXZSdsbCBhbHdheXMgcmVsZWFzZSBib3RoIHRo ZSBsb2NrIGFuZCB0aGUgcGluIG9uIHRoZSBjdXJyZW50IHBhZ2UgYmVmb3JlCi0gKiBtb3Zpbmcg b24gdG8gaXRzIHNpYmxpbmcgcGFnZS4KLSAqCi0gKiBJZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgt b25seSBzY2FuLCB3ZSBzYXZlIHRoZSBlbnRpcmUgSW5kZXhUdXBsZSBmb3IgZWFjaAotICogbWF0 Y2hlZCBpdGVtLCBvdGhlcndpc2Ugb25seSBpdHMgaGVhcCBUSUQgYW5kIG9mZnNldC4gIFRoZSBJ bmRleFR1cGxlcyBnbwotICogaW50byBhIHNlcGFyYXRlIHdvcmtzcGFjZSBhcnJheTsgZWFjaCBC VFNjYW5Qb3NJdGVtIHN0b3JlcyBpdHMgdHVwbGUncwotICogb2Zmc2V0IHdpdGhpbiB0aGF0IGFy cmF5LiAgUG9zdGluZyBsaXN0IHR1cGxlcyBzdG9yZSBhICJiYXNlIiB0dXBsZSBvbmNlLAotICog YWxsb3dpbmcgdGhlIHNhbWUga2V5IHRvIGJlIHJldHVybmVkIGZvciBlYWNoIFRJRCBpbiB0aGUg cG9zdGluZyBsaXN0Ci0gKiB0dXBsZS4KLSAqLwotCi10eXBlZGVmIHN0cnVjdCBCVFNjYW5Qb3NJ dGVtCS8qIHdoYXQgd2UgcmVtZW1iZXIgYWJvdXQgZWFjaCBtYXRjaCAqLwotewotCUl0ZW1Qb2lu dGVyRGF0YSBoZWFwVGlkOwkvKiBUSUQgb2YgcmVmZXJlbmNlZCBoZWFwIGl0ZW0gKi8KLQlPZmZz ZXROdW1iZXIgaW5kZXhPZmZzZXQ7CS8qIGluZGV4IGl0ZW0ncyBsb2NhdGlvbiB3aXRoaW4gcGFn ZSAqLwotCUxvY2F0aW9uSW5kZXggdHVwbGVPZmZzZXQ7CS8qIEluZGV4VHVwbGUncyBvZmZzZXQg aW4gd29ya3NwYWNlLCBpZiBhbnkgKi8KLX0gQlRTY2FuUG9zSXRlbTsKLQotdHlwZWRlZiBzdHJ1 Y3QgQlRTY2FuUG9zRGF0YQotewotCUJ1ZmZlcgkJYnVmOwkJCS8qIGN1cnJQYWdlIGJ1ZiAoaW52 YWxpZCBtZWFucyB1bnBpbm5lZCkgKi8KLQotCS8qIHBhZ2UgZGV0YWlscyBhcyBvZiB0aGUgc2F2 ZWQgcG9zaXRpb24ncyBjYWxsIHRvIF9idF9yZWFkcGFnZSAqLwotCUJsb2NrTnVtYmVyIGN1cnJQ YWdlOwkJLyogcGFnZSByZWZlcmVuY2VkIGJ5IGl0ZW1zIGFycmF5ICovCi0JQmxvY2tOdW1iZXIg cHJldlBhZ2U7CQkvKiBjdXJyUGFnZSdzIGxlZnQgbGluayAqLwotCUJsb2NrTnVtYmVyIG5leHRQ YWdlOwkJLyogY3VyclBhZ2UncyByaWdodCBsaW5rICovCi0JWExvZ1JlY1B0cglsc247CQkJLyog Y3VyclBhZ2UncyBMU04gKHdoZW4gc28tPmRyb3BQaW4pICovCi0KLQkvKiBzY2FuIGRpcmVjdGlv biBmb3IgdGhlIHNhdmVkIHBvc2l0aW9uJ3MgY2FsbCB0byBfYnRfcmVhZHBhZ2UgKi8KLQlTY2Fu RGlyZWN0aW9uIGRpcjsKLQotCS8qCi0JICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkg c2NhbiwgbmV4dFR1cGxlT2Zmc2V0IGlzIHRoZSBmaXJzdCBmcmVlCi0JICogbG9jYXRpb24gaW4g dGhlIGFzc29jaWF0ZWQgdHVwbGUgc3RvcmFnZSB3b3Jrc3BhY2UuCi0JICovCi0JaW50CQkJbmV4 dFR1cGxlT2Zmc2V0OwotCi0JLyoKLQkgKiBtb3JlTGVmdCBhbmQgbW9yZVJpZ2h0IHRyYWNrIHdo ZXRoZXIgd2UgdGhpbmsgdGhlcmUgbWF5IGJlIG1hdGNoaW5nCi0JICogaW5kZXggZW50cmllcyB0 byB0aGUgbGVmdCBhbmQgcmlnaHQgb2YgdGhlIGN1cnJlbnQgcGFnZSwgcmVzcGVjdGl2ZWx5Lgot CSAqLwotCWJvb2wJCW1vcmVMZWZ0OwotCWJvb2wJCW1vcmVSaWdodDsKLQotCS8qCi0JICogVGhl IGl0ZW1zIGFycmF5IGlzIGFsd2F5cyBvcmRlcmVkIGluIGluZGV4IG9yZGVyIChpZSwgaW5jcmVh c2luZwotCSAqIGluZGV4b2Zmc2V0KS4gIFdoZW4gc2Nhbm5pbmcgYmFja3dhcmRzIGl0IGlzIGNv bnZlbmllbnQgdG8gZmlsbCB0aGUKLQkgKiBhcnJheSBiYWNrLXRvLWZyb250LCBzbyB3ZSBzdGFy dCBhdCB0aGUgbGFzdCBzbG90IGFuZCBmaWxsIGRvd253YXJkcy4KLQkgKiBIZW5jZSB3ZSBuZWVk IGJvdGggYSBmaXJzdC12YWxpZC1lbnRyeSBhbmQgYSBsYXN0LXZhbGlkLWVudHJ5IGNvdW50ZXIu Ci0JICogaXRlbUluZGV4IGlzIGEgY3Vyc29yIHNob3dpbmcgd2hpY2ggZW50cnkgd2FzIGxhc3Qg cmV0dXJuZWQgdG8gY2FsbGVyLgotCSAqLwotCWludAkJCWZpcnN0SXRlbTsJCS8qIGZpcnN0IHZh bGlkIGluZGV4IGluIGl0ZW1zW10gKi8KLQlpbnQJCQlsYXN0SXRlbTsJCS8qIGxhc3QgdmFsaWQg aW5kZXggaW4gaXRlbXNbXSAqLwotCWludAkJCWl0ZW1JbmRleDsJCS8qIGN1cnJlbnQgaW5kZXgg aW4gaXRlbXNbXSAqLwotCi0JQlRTY2FuUG9zSXRlbSBpdGVtc1tNYXhUSURzUGVyQlRyZWVQYWdl XTsJLyogTVVTVCBCRSBMQVNUICovCi19IEJUU2NhblBvc0RhdGE7Ci0KLXR5cGVkZWYgQlRTY2Fu UG9zRGF0YSAqQlRTY2FuUG9zOwotCi0jZGVmaW5lIEJUU2NhblBvc0lzUGlubmVkKHNjYW5wb3Mp IFwKLSggXAotCUFzc2VydE1hY3JvKEJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcykuY3VyclBh Z2UpIHx8IFwKLQkJCQkhQnVmZmVySXNWYWxpZCgoc2NhbnBvcykuYnVmKSksIFwKLQlCdWZmZXJJ c1ZhbGlkKChzY2FucG9zKS5idWYpIFwKLSkKLSNkZWZpbmUgQlRTY2FuUG9zVW5waW4oc2NhbnBv cykgXAotCWRvIHsgXAotCQlSZWxlYXNlQnVmZmVyKChzY2FucG9zKS5idWYpOyBcCi0JCShzY2Fu cG9zKS5idWYgPSBJbnZhbGlkQnVmZmVyOyBcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUgQlRTY2Fu UG9zVW5waW5JZlBpbm5lZChzY2FucG9zKSBcCi0JZG8geyBcCi0JCWlmIChCVFNjYW5Qb3NJc1Bp bm5lZChzY2FucG9zKSkgXAotCQkJQlRTY2FuUG9zVW5waW4oc2NhbnBvcyk7IFwKLQl9IHdoaWxl ICgwKQotCi0jZGVmaW5lIEJUU2NhblBvc0lzVmFsaWQoc2NhbnBvcykgXAotKCBcCi0JQXNzZXJ0 TWFjcm8oQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgfHwgXAotCQkJCSFC dWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpKSwgXAotCUJsb2NrTnVtYmVySXNWYWxpZCgoc2Nh bnBvcykuY3VyclBhZ2UpIFwKLSkKLSNkZWZpbmUgQlRTY2FuUG9zSW52YWxpZGF0ZShzY2FucG9z KSBcCi0JZG8geyBcCi0JCShzY2FucG9zKS5idWYgPSBJbnZhbGlkQnVmZmVyOyBcCi0JCShzY2Fu cG9zKS5jdXJyUGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsgXAotCX0gd2hpbGUgKDApCi0KIC8q IFdlIG5lZWQgb25lIG9mIHRoZXNlIGZvciBlYWNoIGVxdWFsaXR5LXR5cGUgU0tfU0VBUkNIQVJS QVkgc2NhbiBrZXkgKi8KIHR5cGVkZWYgc3RydWN0IEJUQXJyYXlLZXlJbmZvCiB7CkBAIC0xMDUw LDYgKzk0NCwzMCBAQCB0eXBlZGVmIHN0cnVjdCBCVEFycmF5S2V5SW5mbwogCVNjYW5LZXkJCWhp Z2hfY29tcGFyZTsJLyogYXJyYXkncyA8IG9yIDw9IHVwcGVyIGJvdW5kICovCiB9IEJUQXJyYXlL ZXlJbmZvOwogCisvKgorICogQlRTY2FuT3BhcXVlRGF0YSBpcyB0aGUgYnRyZWUtcHJpdmF0ZSBz dGF0ZSBuZWVkZWQgZm9yIGFuIGluZGV4c2Nhbi4KKyAqIFRoaXMgY29uc2lzdHMgb2YgcHJlcHJv Y2Vzc2VkIHNjYW4ga2V5cyAoc2VlIF9idF9wcmVwcm9jZXNzX2tleXMoKSBmb3IKKyAqIGRldGFp bHMgb2YgdGhlIHByZXByb2Nlc3NpbmcpLCBhbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJl bnQgYXJyYXkKKyAqIGtleXMuICBUaGVyZSBhcmUgYXNzdW1wdGlvbnMgYWJvdXQgaG93IHRoZSBj dXJyZW50IGFycmF5IGtleXMgdHJhY2sgdGhlCisgKiBwcm9ncmVzcyBvZiB0aGUgaW5kZXggc2Nh biB0aHJvdWdoIHRoZSBpbmRleCdzIGtleSBzcGFjZSAoc2VlIF9idF9yZWFkcGFnZQorICogYW5k IF9idF9hZHZhbmNlX2FycmF5X2tleXMpLCBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgdHJhY2sgYW55 dGhpbmcgYWJvdXQgdGhlCisgKiBjdXJyZW50IHNjYW4gcG9zaXRpb24gaW4gdGhpcyBvcGFxdWUg c3RydWN0LiAgVGhhdCBpcyB0cmFja2VkIGV4dGVybmFsbHksCisgKiBieSBpbXBsZW1lbnRpbmcg YSBxdWV1ZSBvZiAiYmF0Y2hlcyIsIHdoZXJlIGVhY2ggYmF0Y2ggcmVwcmVzZW50cyB0aGUgaXRl bXMKKyAqIHJldHVybmVkIGJ5IGJ0Z2V0YmF0Y2ggd2l0aGluIGEgc2luZ2xlIGxlYWYgcGFnZS4K KyAqCisgKiBJbmRleCBzY2FucyB3b3JrIGEgcGFnZSBhdCBhIHRpbWUsIGFzIHJlcXVpcmVkIGJ5 IHRoZSBhbWdldGJhdGNoIGNvbnRyYWN0OgorICogd2UgcGluIGFuZCByZWFkLWxvY2sgdGhlIHBh Z2UsIGlkZW50aWZ5IGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgb24gdGhlIHBhZ2UKKyAqIGFuZCBy ZXR1cm4gdGhlbSBpbiBhIG5ld2x5IGFsbG9jYXRlZCBiYXRjaC4gIFdlIHRoZW4gcmVsZWFzZSB0 aGUgcmVhZC1sb2NrCisgKiB1c2luZyBhbWdldGJhdGNoIHV0aWxpdHkgcm91dGluZXMuICBUaGlz IGFwcHJvYWNoIG1pbmltaXplcyBsb2NrL3VubG9jaworICogdHJhZmZpYy4gX2J0X25leHQgaXMg cGFzc2VkIHByaW9yYmF0Y2gsIHdoaWNoIGNvbnRhaW5zIGRldGFpbHMgb2Ygd2hpY2gKKyAqIHBh Z2UgaXMgbmV4dCBpbiBsaW5lIHRvIGJlIHJlYWQgKHByaW9yYmF0Y2ggaXMgcHJvdmlkZWQgYXMg YW4gYXJndW1lbnQgdG8KKyAqIGJ0Z2V0YmF0Y2ggYnkgY29yZSBjb2RlKS4KKyAqCisgKiBJZiB3 ZSBhcmUgZG9pbmcgYW4gaW5kZXgtb25seSBzY2FuLCB3ZSBzYXZlIHRoZSBlbnRpcmUgSW5kZXhU dXBsZSBmb3IgZWFjaAorICogbWF0Y2hlZCBpdGVtLCBvdGhlcndpc2Ugb25seSBpdHMgaGVhcCBU SUQgYW5kIG9mZnNldC4gIFRoaXMgaXMgYWxzbyBwZXIgdGhlCisgKiBhbWdldGJhdGNoIGNvbnRy YWN0LiAgUG9zdGluZyBsaXN0IHR1cGxlcyBzdG9yZSBhICJiYXNlIiB0dXBsZSBvbmNlLAorICog YWxsb3dpbmcgdGhlIHNhbWUga2V5IHRvIGJlIHJldHVybmVkIGZvciBlYWNoIFRJRCBpbiB0aGUg cG9zdGluZyBsaXN0LgorICovCiB0eXBlZGVmIHN0cnVjdCBCVFNjYW5PcGFxdWVEYXRhCiB7CiAJ LyogdGhlc2UgZmllbGRzIGFyZSBzZXQgYnkgX2J0X3ByZXByb2Nlc3Nfa2V5cygpOiAqLwpAQCAt MTA2NiwzMiArOTg0LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuT3BhcXVlRGF0YQogCUJUQXJy YXlLZXlJbmZvICphcnJheUtleXM7CS8qIGluZm8gYWJvdXQgZWFjaCBlcXVhbGl0eS10eXBlIGFy cmF5IGtleSAqLwogCUZtZ3JJbmZvICAgKm9yZGVyUHJvY3M7CQkvKiBPUkRFUiBwcm9jcyBmb3Ig cmVxdWlyZWQgZXF1YWxpdHkga2V5cyAqLwogCU1lbW9yeUNvbnRleHQgYXJyYXlDb250ZXh0OyAv KiBzY2FuLWxpZmVzcGFuIGNvbnRleHQgZm9yIGFycmF5IGRhdGEgKi8KLQotCS8qIGluZm8gYWJv dXQga2lsbGVkIGl0ZW1zIGlmIGFueSAoa2lsbGVkSXRlbXMgaXMgTlVMTCBpZiBuZXZlciB1c2Vk KSAqLwotCWludAkJICAgKmtpbGxlZEl0ZW1zOwkvKiBjdXJyUG9zLml0ZW1zIGluZGV4ZXMgb2Yg a2lsbGVkIGl0ZW1zICovCi0JaW50CQkJbnVtS2lsbGVkOwkJLyogbnVtYmVyIG9mIGN1cnJlbnRs eSBzdG9yZWQgaXRlbXMgKi8KLQlib29sCQlkcm9wUGluOwkJLyogZHJvcCBsZWFmIHBpbiBiZWZv cmUgYnRnZXR0dXBsZSByZXR1cm5zPyAqLwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgZG9pbmcgYW4g aW5kZXgtb25seSBzY2FuLCB0aGVzZSBhcmUgdGhlIHR1cGxlIHN0b3JhZ2UKLQkgKiB3b3Jrc3Bh Y2VzIGZvciB0aGUgY3VyclBvcyBhbmQgbWFya1BvcyByZXNwZWN0aXZlbHkuICBFYWNoIGlzIG9m IHNpemUKLQkgKiBCTENLU1osIHNvIGl0IGNhbiBob2xkIGFzIG11Y2ggYXMgYSBmdWxsIHBhZ2Un cyB3b3J0aCBvZiB0dXBsZXMuCi0JICovCi0JY2hhcgkgICAqY3VyclR1cGxlczsJCS8qIHR1cGxl IHN0b3JhZ2UgZm9yIGN1cnJQb3MgKi8KLQljaGFyCSAgICptYXJrVHVwbGVzOwkJLyogdHVwbGUg c3RvcmFnZSBmb3IgbWFya1BvcyAqLwotCi0JLyoKLQkgKiBJZiB0aGUgbWFya2VkIHBvc2l0aW9u IGlzIG9uIHRoZSBzYW1lIHBhZ2UgYXMgY3VycmVudCBwb3NpdGlvbiwgd2UKLQkgKiBkb24ndCB1 c2UgbWFya1BvcywgYnV0IGp1c3Qga2VlcCB0aGUgbWFya2VkIGl0ZW1JbmRleCBpbiBtYXJrSXRl bUluZGV4Ci0JICogKGFsbCB0aGUgcmVzdCBvZiBjdXJyUG9zIGlzIHZhbGlkIGZvciB0aGUgbWFy ayBwb3NpdGlvbikuIEhlbmNlLCB0bwotCSAqIGRldGVybWluZSBpZiB0aGVyZSBpcyBhIG1hcmss IGZpcnN0IGxvb2sgYXQgbWFya0l0ZW1JbmRleCwgdGhlbiBhdAotCSAqIG1hcmtQb3MuCi0JICov Ci0JaW50CQkJbWFya0l0ZW1JbmRleDsJLyogaXRlbUluZGV4LCBvciAtMSBpZiBub3QgdmFsaWQg Ki8KLQotCS8qIGtlZXAgdGhlc2UgbGFzdCBpbiBzdHJ1Y3QgZm9yIGVmZmljaWVuY3kgKi8KLQlC VFNjYW5Qb3NEYXRhIGN1cnJQb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGRhdGEgKi8KLQlCVFNj YW5Qb3NEYXRhIG1hcmtQb3M7CQkvKiBtYXJrZWQgcG9zaXRpb24sIGlmIGFueSAqLwogfSBCVFNj YW5PcGFxdWVEYXRhOwogCiB0eXBlZGVmIEJUU2Nhbk9wYXF1ZURhdGEgKkJUU2Nhbk9wYXF1ZTsK QEAgLTExNjAsMTQgKzEwNTIsMTYgQEAgZXh0ZXJuIGJvb2wgYnRpbnNlcnQoUmVsYXRpb24gcmVs LCBEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiBleHRlcm4gSW5kZXhTY2FuRGVzYyBidGJl Z2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cyk7CiBleHRlcm4g U2l6ZSBidGVzdGltYXRlcGFyYWxsZWxzY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQg bm9yZGVyYnlzKTsKIGV4dGVybiB2b2lkIGJ0aW5pdHBhcmFsbGVsc2Nhbih2b2lkICp0YXJnZXQp OwotZXh0ZXJuIGJvb2wgYnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyKTsKK2V4dGVybiBCYXRjaEluZGV4U2NhbiBidGdldGJhdGNoKEluZGV4U2NhbkRlc2Mg c2NhbiwKKwkJCQkJCQkJIEJhdGNoSW5kZXhTY2FuIHByaW9yYmF0Y2gsCisJCQkJCQkJCSBTY2Fu RGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50NjQgYnRnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBz Y2FuLCBUSURCaXRtYXAgKnRibSk7CiBleHRlcm4gdm9pZCBidHJlc2NhbihJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkJCQkJIFNjYW5LZXkgb3Jk ZXJieXMsIGludCBub3JkZXJieXMpOworZXh0ZXJuIHZvaWQgYnRmcmVlYmF0Y2goSW5kZXhTY2Fu RGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBiYXRjaCk7CiBleHRlcm4gdm9pZCBidHBhcmFsbGVs cmVzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gdm9pZCBidGVuZHNjYW4oSW5kZXhT Y2FuRGVzYyBzY2FuKTsKLWV4dGVybiB2b2lkIGJ0bWFya3BvcyhJbmRleFNjYW5EZXNjIHNjYW4p OwotZXh0ZXJuIHZvaWQgYnRyZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZv aWQgYnRwb3NyZXNldChJbmRleFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIG1hcmtiYXRj aCk7CiBleHRlcm4gSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpidGJ1bGtkZWxldGUoSW5kZXhWYWN1 dW1JbmZvICppbmZvLAogCQkJCQkJCQkJCSAgIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMs CiAJCQkJCQkJCQkJICAgSW5kZXhCdWxrRGVsZXRlQ2FsbGJhY2sgY2FsbGJhY2ssCkBAIC0xMjcx LDggKzExNjUsOSBAQCBleHRlcm4gdm9pZCBfYnRfcHJlcHJvY2Vzc19rZXlzKEluZGV4U2NhbkRl c2Mgc2Nhbik7CiAvKgogICogcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIGluIG5idHJlYWRwYWdl LmMKICAqLwotZXh0ZXJuIGJvb2wgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIsCi0JCQkJCQkgT2Zmc2V0TnVtYmVyIG9mZm51bSwgYm9vbCBmaXJzdHBh Z2UpOworZXh0ZXJuIGJvb2wgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJ bmRleFNjYW4gbmV3YmF0Y2gsCisJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJl ciBvZmZudW0sCisJCQkJCQkgYm9vbCBmaXJzdHBhZ2UpOwogZXh0ZXJuIHZvaWQgX2J0X3N0YXJ0 X2FycmF5X2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CiBleHRl cm4gaW50CV9idF9iaW5zcmNoX2FycmF5X3NrZXkoRm1nckluZm8gKm9yZGVycHJvYywKIAkJCQkJ CQkJICAgYm9vbCBjdXJfZWxlbV90cmlnLCBTY2FuRGlyZWN0aW9uIGRpciwKQEAgLTEyODcsOCAr MTE4Miw5IEBAIGV4dGVybiBCVFN0YWNrIF9idF9zZWFyY2goUmVsYXRpb24gcmVsLCBSZWxhdGlv biBoZWFwcmVsLCBCVFNjYW5JbnNlcnQga2V5LAogCQkJCQkJICBCdWZmZXIgKmJ1ZlAsIGludCBh Y2Nlc3MpOwogZXh0ZXJuIE9mZnNldE51bWJlciBfYnRfYmluc3JjaF9pbnNlcnQoUmVsYXRpb24g cmVsLCBCVEluc2VydFN0YXRlIGluc2VydHN0YXRlKTsKIGV4dGVybiBpbnQzMiBfYnRfY29tcGFy ZShSZWxhdGlvbiByZWwsIEJUU2Nhbkluc2VydCBrZXksIFBhZ2UgcGFnZSwgT2Zmc2V0TnVtYmVy IG9mZm51bSk7Ci1leHRlcm4gYm9vbCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcik7Ci1leHRlcm4gYm9vbCBfYnRfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBCYXRjaEluZGV4U2NhbiBfYnRfZmlyc3QoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4gQmF0Y2hJbmRleFNj YW4gX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJ CQkgICBCYXRjaEluZGV4U2NhbiBwcmlvcmJhdGNoKTsKIGV4dGVybiBCdWZmZXIgX2J0X2dldF9l bmRwb2ludChSZWxhdGlvbiByZWwsIHVpbnQzMiBsZXZlbCwgYm9vbCByaWdodG1vc3QpOwogCiAv KgpAQCAtMTI5Niw3ICsxMTkyLDcgQEAgZXh0ZXJuIEJ1ZmZlciBfYnRfZ2V0X2VuZHBvaW50KFJl bGF0aW9uIHJlbCwgdWludDMyIGxldmVsLCBib29sIHJpZ2h0bW9zdCk7CiAgKi8KIGV4dGVybiBC VFNjYW5JbnNlcnQgX2J0X21rc2NhbmtleShSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgaXR1cCk7 CiBleHRlcm4gdm9pZCBfYnRfZnJlZXN0YWNrKEJUU3RhY2sgc3RhY2spOwotZXh0ZXJuIHZvaWQg X2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgX2J0X2tpbGxp dGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNoKTsKIGV4dGVybiBC VEN5Y2xlSWQgX2J0X3ZhY3V1bV9jeWNsZWlkKFJlbGF0aW9uIHJlbCk7CiBleHRlcm4gQlRDeWNs ZUlkIF9idF9zdGFydF92YWN1dW0oUmVsYXRpb24gcmVsKTsKIGV4dGVybiB2b2lkIF9idF9lbmRf dmFjdXVtKFJlbGF0aW9uIHJlbCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVs c2Nhbi5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAppbmRleCA4N2E4YmUxMDQuLjNh NDE2ZTc2YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAorKysgYi9z cmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCkBAIC0xNiw2ICsxNiw3IEBACiAKICNpbmNsdWRl ICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2l0dXAuaCIKKyNpbmNs dWRlICJhY2Nlc3Mvc2Rpci5oIgogI2luY2x1ZGUgIm5vZGVzL3RpZGJpdG1hcC5oIgogI2luY2x1 ZGUgInBvcnQvYXRvbWljcy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmLmgiCkBAIC0xMjMsOCAr MTI0LDE5MiBAQCB0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEJsb2NrVGFibGVTY2FuV29ya2VyRGF0 YSAqUGFyYWxsZWxCbG9ja1RhYmxlU2NhbldvcmtlcjsKIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0 Y2hUYWJsZURhdGEKIHsKIAlSZWxhdGlvbglyZWw7CisKKwlpbnQJCQluaGVhcGFjY2Vzc2VzOwkv KiBudW1iZXIgb2YgaGVhcCBhY2Nlc3NlcywgZm9yCisJCQkJCQkJCSAqIGluc3RydW1lbnRhdGlv bi9tZXRyaWNzICovCiB9IEluZGV4RmV0Y2hUYWJsZURhdGE7CiAKKy8qCisgKiBRdWV1ZS13aXNl IGxvY2F0aW9uIG9mIGEgQmF0Y2hNYXRjaGluZ0l0ZW0gdGhhdCBhcHBlYXJzIGluIGEgQmF0Y2hJ bmRleFNjYW4KKyAqIHJldHVybmVkIGJ5IChhbmQgc3Vic2VxdWVudGx5IHBhc3NlZCB0bykgYW4g YW1nZXRiYXRjaCByb3V0aW5lCisgKi8KK3R5cGVkZWYgc3RydWN0IEJhdGNoUXVldWVJdGVtUG9z Cit7CisJLyogQmF0Y2hRdWV1ZS5iYXRjaGVzW10td2lzZSBpbmRleCB0byByZWxldmFudCBCYXRj aEluZGV4U2NhbiAqLworCWludAkJCWJhdGNoOworCisJLyogQmF0Y2hJbmRleFNjYW4uaXRlbXNb XS13aXNlIGluZGV4IHRvIHJlbGV2YW50IEJhdGNoTWF0Y2hpbmdJdGVtICovCisJaW50CQkJaXRl bTsKK30gQmF0Y2hRdWV1ZUl0ZW1Qb3M7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYmF0Y2hfcmVz ZXRfcG9zKEJhdGNoUXVldWVJdGVtUG9zICpwb3MpCit7CisJcG9zLT5iYXRjaCA9IC0xOworCXBv cy0+aXRlbSA9IC0xOworfQorCisvKgorICogTWF0Y2hpbmcgaXRlbSByZXR1cm5lZCBieSBhbWdl dGJhdGNoIChpbiByZXR1cm5lZCBCYXRjaEluZGV4U2NhbikgZHVyaW5nIGFuCisgKiBpbmRleCBz Y2FuLiAgVXNlZCBieSB0YWJsZSBBTSB0byBsb2NhdGUgcmVsZXZhbnQgbWF0Y2hpbmcgdGFibGUg dHVwbGUuCisgKi8KK3R5cGVkZWYgc3RydWN0IEJhdGNoTWF0Y2hpbmdJdGVtCit7CisJSXRlbVBv aW50ZXJEYXRhIGhlYXBUaWQ7CS8qIFRJRCBvZiByZWZlcmVuY2VkIGhlYXAgaXRlbSAqLworCU9m ZnNldE51bWJlciBpbmRleE9mZnNldDsJLyogaW5kZXggaXRlbSdzIGxvY2F0aW9uIHdpdGhpbiBw YWdlICovCisJTG9jYXRpb25JbmRleCB0dXBsZU9mZnNldDsJLyogSW5kZXhUdXBsZSdzIG9mZnNl dCBpbiB3b3Jrc3BhY2UsIGlmIGFueSAqLworfSBCYXRjaE1hdGNoaW5nSXRlbTsKKworLyoKKyAq IERhdGEgYWJvdXQgb25lIGJhdGNoIG9mIGl0ZW1zIHJldHVybmVkIGJ5IChhbmQgcGFzc2VkIHRv KSBhbWdldGJhdGNoIGR1cmluZworICogaW5kZXggc2NhbnMKKyAqLwordHlwZWRlZiBzdHJ1Y3Qg QmF0Y2hJbmRleFNjYW5EYXRhCit7CisJLyoKKwkgKiBJbmZvcm1hdGlvbiBvdXRwdXQgYnkgYW1n ZXRiYXRjaCBpbmRleCBBTXMgdXBvbiByZXR1cm5pbmcgYSBiYXRjaCB3aXRoCisJICogb25lIG9y IG1vcmUgbWF0Y2hpbmcgaXRlbXMsIGRlc2NyaWJpbmcgZGV0YWlscyBvZiB0aGUgaW5kZXggcGFn ZSB3aGVyZQorCSAqIG1hdGNoZXMgd2VyZSBsb2NhdGVkLgorCSAqCisJICogVXNlZCBpbiB0aGUg bmV4dCBhbWdldGJhdGNoIGNhbGwgdG8gZGV0ZXJtaW5lIHdoaWNoIGluZGV4IHBhZ2UgdG8gcmVh ZAorCSAqIG5leHQgKG9yIHRvIGRldGVybWluZSBpZiB0aGVyZSdzIG5vIGZ1cnRoZXIgbWF0Y2hl cyBpbiBjdXJyZW50IHNjYW4KKwkgKiBkaXJlY3Rpb24pLgorCSAqLworCUJsb2NrTnVtYmVyIGN1 cnJQYWdlOwkJLyogSW5kZXggcGFnZSB3aXRoIG1hdGNoaW5nIGl0ZW1zICovCisJQmxvY2tOdW1i ZXIgcHJldlBhZ2U7CQkvKiBjdXJyUGFnZSdzIGxlZnQgbGluayAqLworCUJsb2NrTnVtYmVyIG5l eHRQYWdlOwkJLyogY3VyclBhZ2UncyByaWdodCBsaW5rICovCisKKwlCdWZmZXIJCWJ1ZjsJCQkv KiBjdXJyUGFnZSBidWYgKGludmFsaWQgbWVhbnMgdW5waW5uZWQpICovCisJWExvZ1JlY1B0cgls c247CQkJLyogY3VyclBhZ2UncyBMU04gKHdoZW4gZHJvcFBpbikgKi8KKworCS8qIHNjYW4gZGly ZWN0aW9uIHdoZW4gdGhlIGluZGV4IHBhZ2Ugd2FzIHJlYWQgKi8KKwlTY2FuRGlyZWN0aW9uIGRp cjsKKworCS8qCisJICogbW9yZUxlZnQgYW5kIG1vcmVSaWdodCB0cmFjayB3aGV0aGVyIHdlIHRo aW5rIHRoZXJlIG1heSBiZSBtYXRjaGluZworCSAqIGluZGV4IGVudHJpZXMgdG8gdGhlIGxlZnQg YW5kIHJpZ2h0IG9mIHRoZSBjdXJyZW50IHBhZ2UsIHJlc3BlY3RpdmVseQorCSAqLworCWJvb2wJ CW1vcmVMZWZ0OworCWJvb2wJCW1vcmVSaWdodDsKKworCS8qCisJICogVGhlIGl0ZW1zIGFycmF5 IGlzIGFsd2F5cyBvcmRlcmVkIGluIGluZGV4IG9yZGVyIChpZSwgaW5jcmVhc2luZworCSAqIGlu ZGV4b2Zmc2V0KS4gIFdoZW4gc2Nhbm5pbmcgYmFja3dhcmRzIGl0IGlzIGNvbnZlbmllbnQgdG8g ZmlsbCB0aGUKKwkgKiBhcnJheSBiYWNrLXRvLWZyb250LCBzbyB3ZSBzdGFydCBhdCB0aGUgbGFz dCBzbG90IGFuZCBmaWxsIGRvd253YXJkcy4KKwkgKiBIZW5jZSB3ZSBuZWVkIGJvdGggYSBmaXJz dC12YWxpZC1lbnRyeSBhbmQgYSBsYXN0LXZhbGlkLWVudHJ5IGNvdW50ZXIuCisJICovCisJaW50 CQkJZmlyc3RJdGVtOwkJLyogZmlyc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAqLworCWludAkJ CWxhc3RJdGVtOwkJLyogbGFzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICovCisKKwkvKiBpbmZv IGFib3V0IGtpbGxlZCBpdGVtcyBpZiBhbnkgKGtpbGxlZEl0ZW1zIGlzIE5VTEwgaWYgbmV2ZXIg dXNlZCkgKi8KKwlpbnQJCSAgICpraWxsZWRJdGVtczsJLyogaW5kZXhlcyBvZiBraWxsZWQgaXRl bXMgKi8KKwlpbnQJCQludW1LaWxsZWQ7CQkvKiBudW1iZXIgb2YgY3VycmVudGx5IHN0b3JlZCBp dGVtcyAqLworCisJLyoKKwkgKiBNYXRjaGluZyBpdGVtcyBzdGF0ZSBmb3IgdGhpcyBiYXRjaC4K KwkgKgorCSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHRoZXNlIGFyZSB0 aGUgdHVwbGUgc3RvcmFnZQorCSAqIHdvcmtzcGFjZXMgZm9yIHRoZSBtYXRjaGluZyB0dXBsZXMg KHR1cGxlcyByZWZlcmVuY2VkIGJ5IGl0ZW1zW10pLiBFYWNoCisJICogaXMgb2Ygc2l6ZSBCTENL U1osIHNvIGl0IGNhbiBob2xkIGFzIG11Y2ggYXMgYSBmdWxsIHBhZ2UncyB3b3J0aCBvZgorCSAq IHR1cGxlcy4KKwkgKi8KKwljaGFyCSAgICpjdXJyVHVwbGVzOwkJLyogdHVwbGUgc3RvcmFnZSBm b3IgaXRlbXNbXSAqLworCWludAkJCW1heGl0ZW1zOwkJLyogYWxsb2NhdGVkIHNpemUgb2YgaXRl bXNbXSAqLworCUJhdGNoTWF0Y2hpbmdJdGVtIGl0ZW1zW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07 Cit9IEJhdGNoSW5kZXhTY2FuRGF0YTsKKwordHlwZWRlZiBzdHJ1Y3QgQmF0Y2hJbmRleFNjYW5E YXRhICpCYXRjaEluZGV4U2NhbjsKKworLyoKKyAqIE1heGltdW0gbnVtYmVyIG9mIGJhdGNoZXMg KGxlYWYgcGFnZXMpIHdlIGNhbiBrZWVwIGluIG1lbW9yeS4gIFdlIG5lZWQgYQorICogbWluaW11 bSBvZiB0d28sIHNpbmNlIHdlJ2xsIG9ubHkgY29uc2lkZXIgcmVsZWFzaW5nIG9uZSBiYXRjaCB3 aGVuIGFub3RoZXIKKyAqIGlzIHJlYWQuCisgKi8KKyNkZWZpbmUgSU5ERVhfU0NBTl9NQVhfQkFU Q0hFUwkJMgorI2RlZmluZSBJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVMJMgorI2RlZmluZSBJTkRF WF9TQ0FOX0JBVENIX0NPVU5UKHNjYW4pIFwKKwkoKHNjYW4pLT5iYXRjaHF1ZXVlLT5uZXh0QmF0 Y2ggLSAoc2NhbiktPmJhdGNocXVldWUtPmhlYWRCYXRjaCkKKworLyogRGlkIHdlIGFscmVhZHkg bG9hZCBiYXRjaCB3aXRoIHRoZSByZXF1ZXN0ZWQgaW5kZXg/ICovCisjZGVmaW5lIElOREVYX1ND QU5fQkFUQ0hfTE9BREVEKHNjYW4sIGlkeCkgXAorCSgoaWR4KSA8IChzY2FuKS0+YmF0Y2hxdWV1 ZS0+bmV4dEJhdGNoKQorCisvKiBIYXZlIHdlIGxvYWRlZCB0aGUgbWF4aW11bSBudW1iZXIgb2Yg YmF0Y2hlcz8gKi8KKyNkZWZpbmUgSU5ERVhfU0NBTl9CQVRDSF9GVUxMKHNjYW4pIFwKKwkoSU5E RVhfU0NBTl9CQVRDSF9DT1VOVChzY2FuKSA9PSBJTkRFWF9TQ0FOX01BWF9CQVRDSEVTKQorCisv KiBSZXR1cm4gYmF0Y2ggZm9yIHRoZSBwcm92aWRlZCBpbmRleC4gKi8KKyNkZWZpbmUgSU5ERVhf U0NBTl9CQVRDSChzY2FuLCBpZHgpCVwKKwkJKChzY2FuKS0+YmF0Y2hxdWV1ZS0+YmF0Y2hlc1so aWR4KSAlIElOREVYX1NDQU5fTUFYX0JBVENIRVNdKQorCisvKiBJcyB0aGUgcG9zaXRpb24gaW52 YWxpZC91bmRlZmluZWQ/ICovCisjZGVmaW5lIElOREVYX1NDQU5fUE9TX0lOVkFMSUQocG9zKSBc CisJCSgoKHBvcyktPmJhdGNoID09IC0xKSAmJiAoKHBvcyktPml0ZW0gPT0gLTEpKQorCisjaWZk ZWYgSU5ERVhBTV9ERUJVRworI2RlZmluZSBERUJVR19MT0coLi4uKSBlbG9nKEFtUmVndWxhckJh Y2tlbmRQcm9jZXNzKCkgPyBOT1RJQ0UgOiBERUJVRzIsIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNk ZWZpbmUgREVCVUdfTE9HKC4uLikKKyNlbmRpZgorCisvKgorICogU3RhdGUgdXNlZCBieSB0YWJs ZSBBTXMgdG8gbWFuYWdlIGFuIGluZGV4IHNjYW4gdGhhdCB1c2VzIHRoZSBhbWdldGJhdGNoCisg KiBpbnRlcmZhY2UuICBTY2FucyB3b3JrIHdpdGggYSBxdWV1ZSBvZiBiYXRjaGVzIHJldHVybmVk IGJ5IGFtZ2V0YmF0Y2guCisgKgorICogQmF0Y2hlcyBhcmUga2VwdCBpbiB0aGUgb3JkZXIgdGhh dCB0aGV5IHdlcmUgcmV0dXJuZWQgaW4gYnkgYW1nZXRiYXRjaCwKKyAqIHNpbmNlIHRoYXQgaXMg dGhlIHNhbWUgb3JkZXIgdGhhdCB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qgd2lsbCByZXR1cm4K KyAqIG1hdGNoZXMgaW4uICBIb3dldmVyLCB0YWJsZSBBTXMgYXJlIGZyZWUgdG8gZmV0Y2ggdGFi bGUgdHVwbGVzIGluIHdoYXRldmVyCisgKiBvcmRlciBpcyBtb3N0IGNvbnZlbmllbnQvZWZmaWNp ZW50IC0tIHByb3ZpZGVkIHRoYXQgc3VjaCByZW9yZGVyaW5nIGNhbm5vdAorICogYWZmZWN0IHRo ZSBvcmRlciB0aGF0IHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBsYXRlciByZXR1cm5zIHR1cGxl cyBpbi4KKyAqCisgKiBUaGlzIGRhdGEgc3RydWN0dXJlIGFsc28gcHJvdmlkZXMgdGFibGUgQU1z IHdpdGggYSB3YXkgdG8gcmVhZCBhaGVhZCBvZiB0aGUKKyAqIGN1cnJlbnQgcmVhZCBwb3NpdGlv biBieSBfbXVsdGlwbGVfIGJhdGNoZXMvaW5kZXggcGFnZXMuICBUaGUgZnVydGhlciBvdXQKKyAq IHRoZSB0YWJsZSBBTSByZWFkcyBhaGVhZCBsaWtlIHRoaXMsIHRoZSBmdXJ0aGVyIGl0IGNhbiBz ZWUgaW50byB0aGUgZnV0dXJlLgorICogVGhhdCB3YXkgdGhlIHRhYmxlIEFNIGlzIGFibGUgdG8g cmVvcmRlciB3b3JrIGFzIGFnZ3Jlc3NpdmVseSBhcyBkZXNpcmVkLgorICogRm9yIGV4YW1wbGUs IGluZGV4IHNjYW5zIHNvbWV0aW1lcyBuZWVkIHRvIHJlYWRhaGVhZCBieSBhcyBtYW55IGFzIGEg ZmV3CisgKiBkb3plbiBhbWdldGJhdGNoIGJhdGNoZXMgaW4gb3JkZXIgdG8gbWFpbnRhaW4gYW4g b3B0aW1hbCBJL08gcHJlZmV0Y2gKKyAqIGRpc3RhbmNlIChkaXN0YW5jZSBmb3IgcmVhZGluZyB0 YWJsZSBibG9ja3MvZmV0Y2hpbmcgdGFibGUgdHVwbGVzKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qg QmF0Y2hRdWV1ZQoreworCS8qIGFtZ2V0YmF0Y2ggY2FuIHNhZmVseSBkcm9wIHBpbnMgb24gcmV0 dXJuZWQgYmF0Y2gncyBpbmRleCBwYWdlPyAqLworCWJvb2wJCWRyb3BQaW47CisKKwkvKgorCSAq IERpZCB3ZSByZWFkIHRoZSBmaW5hbCBiYXRjaCBpbiB0aGlzIHNjYW4gZGlyZWN0aW9uPyBUaGUg YmF0Y2hlcyBtYXkgYmUKKwkgKiBsb2FkZWQgZnJvbSBtdWx0aXBsZSBwbGFjZXMsIGFuZCB3ZSBu ZWVkIHRvIHJlbWVtYmVyIHdoZW4gd2UgZmFpbCB0bworCSAqIGxvYWQgdGhlIG5leHQgYmF0Y2gg aW4gYSBnaXZlbiBzY2FuICh3aGljaCBtZWFucyAibm8gbW9yZSBiYXRjaGVzIikuCisJICogYW1n ZXRiYXRjaCBtYXkgcmVzdGFydCB0aGUgc2NhbiBvbiB0aGUgZ2V0IGNhbGwsIHNvIHdlIG5lZWQg dG8gcmVtZW1iZXIKKwkgKiBpdCdzIG92ZXIuCisJICovCisJYm9vbAkJZmluaXNoZWQ7CisKKwkv KiBDdXJyZW50IHNjYW4gZGlyZWN0aW9uLCBmb3IgdGhlIGN1cnJlbnRseSBsb2FkZWQgYmF0Y2hl cyAqLworCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uOworCisJLyogY3VycmVudCBwb3NpdGlvbnMg aW4gYmF0Y2hlc1tdIGZvciBzY2FuICovCisJQmF0Y2hRdWV1ZUl0ZW1Qb3MgcmVhZFBvczsJLyog cmVhZCBwb3NpdGlvbiAqLworCUJhdGNoUXVldWVJdGVtUG9zIG1hcmtQb3M7CS8qIG1hcmsvcmVz dG9yZSBwb3NpdGlvbiAqLworCisJQmF0Y2hJbmRleFNjYW4gbWFya0JhdGNoOworCisJLyoKKwkg KiBBcnJheSBvZiBiYXRjaGVzIHJldHVybmVkIGJ5IHRoZSBBTS4gVGhlIGFycmF5IGhhcyBhIGNh cGFjaXR5IChidXQgY2FuCisJICogYmUgcmVzaXplZCBpZiBuZWVkZWQpLiBUaGUgaGVhZEJhdGNo IGlzIGFuIGluZGV4IG9mIHRoZSBiYXRjaCB3ZSdyZQorCSAqIGN1cnJlbnRseSByZWFkaW5nIGZy b20gKHRoaXMgbmVlZHMgdG8gYmUgdHJhbnNsYXRlZCBieSBtb2R1bG8KKwkgKiBJTkRFWF9TQ0FO X01BWF9CQVRDSEVTIGludG8gaW5kZXggaW4gdGhlIGJhdGNoZXMgYXJyYXkpLgorCSAqLworCWlu dAkJCWhlYWRCYXRjaDsJCS8qIGhlYWQgYmF0Y2ggc2xvdCAqLworCWludAkJCW5leHRCYXRjaDsJ CS8qIG5leHQgZW1wdHkgYmF0Y2ggc2xvdCAqLworCisJLyogQXJyYXkgb2YgcG9pbnRlcnMgdG8g Y2FjaGVkIHJlY3ljbGFibGUgYmF0Y2hlcyAqLworCUJhdGNoSW5kZXhTY2FuIGNhY2hlW0lOREVY X1NDQU5fQ0FDSEVfQkFUQ0hFU107CisKKwkvKiBBcnJheSBvZiBwb2ludGVycyB0byBxdWV1ZWQg YmF0Y2hlcyAqLworCUJhdGNoSW5kZXhTY2FuIGJhdGNoZXNbSU5ERVhfU0NBTl9NQVhfQkFUQ0hF U107CisKK30gQmF0Y2hRdWV1ZTsKKwogc3RydWN0IEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbjsK IAogLyoKQEAgLTE0MCw2ICszMjUsOCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0 YQogCXN0cnVjdCBTbmFwc2hvdERhdGEgKnhzX3NuYXBzaG90OwkvKiBzbmFwc2hvdCB0byBzZWUg Ki8KIAlpbnQJCQludW1iZXJPZktleXM7CS8qIG51bWJlciBvZiBpbmRleCBxdWFsaWZpZXIgY29u ZGl0aW9ucyAqLwogCWludAkJCW51bWJlck9mT3JkZXJCeXM7CS8qIG51bWJlciBvZiBvcmRlcmlu ZyBvcGVyYXRvcnMgKi8KKwlCYXRjaFF1ZXVlICpiYXRjaHF1ZXVlOwkJLyogYW1nZXRiYXRjaCBy ZWxhdGVkIHN0YXRlICovCisKIAlzdHJ1Y3QgU2NhbktleURhdGEgKmtleURhdGE7CS8qIGFycmF5 IG9mIGluZGV4IHF1YWxpZmllciBkZXNjcmlwdG9ycyAqLwogCXN0cnVjdCBTY2FuS2V5RGF0YSAq b3JkZXJCeURhdGE7CS8qIGFycmF5IG9mIG9yZGVyaW5nIG9wIGRlc2NyaXB0b3JzICovCiAJYm9v bAkJeHNfd2FudF9pdHVwOwkvKiBjYWxsZXIgcmVxdWVzdHMgaW5kZXggdHVwbGVzICovCkBAIC0y MTYsNCArNDAzLDYxIEBAIHR5cGVkZWYgc3RydWN0IFN5c1NjYW5EZXNjRGF0YQogCXN0cnVjdCBU dXBsZVRhYmxlU2xvdCAqc2xvdDsKIH0JCQlTeXNTY2FuRGVzY0RhdGE7CiAKKy8qCisgKiBDaGVj ayB0aGF0IGEgcG9zaXRpb24gKGJhdGNoLGl0ZW0pIGlzIHZhbGlkIHdpdGggcmVzcGVjdCB0byB0 aGUgYmF0Y2hlcyB3ZQorICogaGF2ZSBjdXJyZW50bHkgbG9hZGVkLgorICovCitzdGF0aWMgaW5s aW5lIHZvaWQKK2JhdGNoX2Fzc2VydF9wb3NfdmFsaWQoSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4s IEJhdGNoUXVldWVJdGVtUG9zICpwb3MpCit7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORwor CUJhdGNoUXVldWUgKmJhdGNocXVldWUgPSBzY2FuLT5iYXRjaHF1ZXVlOworCisJLyogbWFrZSBz dXJlIHRoZSBwb3NpdGlvbiBpcyB2YWxpZCBmb3IgY3VycmVudGx5IGxvYWRlZCBiYXRjaGVzICov CisJQXNzZXJ0KHBvcy0+YmF0Y2ggPj0gYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoKTsKKwlBc3NlcnQo cG9zLT5iYXRjaCA8IGJhdGNocXVldWUtPm5leHRCYXRjaCk7CisjZW5kaWYKK30KKworLyoKKyAq IENoZWNrIGEgc2luZ2xlIGJhdGNoIGlzIHZhbGlkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQK K2JhdGNoX2Fzc2VydF9iYXRjaF92YWxpZChJbmRleFNjYW5EZXNjRGF0YSAqc2NhbiwgQmF0Y2hJ bmRleFNjYW4gYmF0Y2gpCit7CisJLyogYmF0Y2ggbXVzdCBoYXZlIG9uZSBvciBtb3JlIG1hdGNo aW5nIGl0ZW1zIHJldHVybmVkIGJ5IGluZGV4IEFNICovCisJQXNzZXJ0KGJhdGNoLT5maXJzdEl0 ZW0gPj0gMCAmJiBiYXRjaC0+Zmlyc3RJdGVtIDw9IGJhdGNoLT5sYXN0SXRlbSk7CisJQXNzZXJ0 KGJhdGNoLT5pdGVtcyAhPSBOVUxMKTsKKworCS8qCisJICogVGhlIG51bWJlciBvZiBraWxsZWQg aXRlbXMgbXVzdCBiZSB2YWxpZCwgYW5kIHRoZXJlIG11c3QgYmUgYW4gYXJyYXkgb2YKKwkgKiBp bmRleGVzIGlmIHRoZXJlIGFyZSBpdGVtcy4KKwkgKi8KKwlBc3NlcnQoYmF0Y2gtPm51bUtpbGxl ZCA+PSAwKTsKKwlBc3NlcnQoIShiYXRjaC0+bnVtS2lsbGVkID4gMCAmJiBiYXRjaC0+a2lsbGVk SXRlbXMgPT0gTlVMTCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2JhdGNoX2Fzc2VydF9i YXRjaGVzX3ZhbGlkKEluZGV4U2NhbkRlc2NEYXRhICAqc2NhbikKK3sKKyNpZmRlZiBVU0VfQVNT RVJUX0NIRUNLSU5HCisJQmF0Y2hRdWV1ZSAqYmF0Y2hxdWV1ZSA9IHNjYW4tPmJhdGNocXVldWU7 CisKKwkvKiB3ZSBzaG91bGQgaGF2ZSBiYXRjaGVzIGluaXRpYWxpemVkICovCisJQXNzZXJ0KGJh dGNocXVldWUgIT0gTlVMTCk7CisKKwkvKiBUaGUgaGVhZC9uZXh0IGluZGV4ZXMgc2hvdWxkIGRl ZmluZSBhIHZhbGlkIHJhbmdlICovCisJQXNzZXJ0KGJhdGNocXVldWUtPmhlYWRCYXRjaCA+PSAw ICYmCisJCSAgIGJhdGNocXVldWUtPmhlYWRCYXRjaCA8PSBiYXRjaHF1ZXVlLT5uZXh0QmF0Y2gp OworCisJLyogQ2hlY2sgYWxsIGN1cnJlbnQgYmF0Y2hlcyAqLworCWZvciAoaW50IGkgPSBiYXRj aHF1ZXVlLT5oZWFkQmF0Y2g7IGkgPCBiYXRjaHF1ZXVlLT5uZXh0QmF0Y2g7IGkrKykKKwl7CisJ CUJhdGNoSW5kZXhTY2FuIGJhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBpKTsKKworCQli YXRjaF9hc3NlcnRfYmF0Y2hfdmFsaWQoc2NhbiwgYmF0Y2gpOworCX0KKyNlbmRpZgorfQorCiAj ZW5kaWYJCQkJCQkJLyogUkVMU0NBTl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nl c3MvdGFibGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAppbmRleCAyZmE3OTBi NmIuLjNlOThkODUzNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAor KysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCkBAIC00MjAsNyArNDIwLDggQEAgdHlw ZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAkgKgogCSAqIFR1cGxlcyBmb3IgYW4gaW5kZXgg c2NhbiBjYW4gdGhlbiBiZSBmZXRjaGVkIHZpYSBpbmRleF9mZXRjaF90dXBsZS4KIAkgKi8KLQlz dHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqKCppbmRleF9mZXRjaF9iZWdpbikgKFJlbGF0aW9u IHJlbCk7CisJc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKigqaW5kZXhfZmV0Y2hfYmVnaW4p IChSZWxhdGlvbiByZWwsCisJCQkJCQkJCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqaW9zX3RhYmxl c2xvdCk7CiAKIAkvKgogCSAqIFJlc2V0IGluZGV4IGZldGNoLiBUeXBpY2FsbHkgdGhpcyB3aWxs IHJlbGVhc2UgY3Jvc3MgaW5kZXggZmV0Y2gKQEAgLTQzMywxMSArNDM0LDM0IEBAIHR5cGVkZWYg c3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJICovCiAJdm9pZAkJKCppbmRleF9mZXRjaF9lbmQpIChz dHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqZGF0YSk7CiAKKwkvKgorCSAqIEZldGNoIHRoZSBu ZXh0IHR1cGxlIGZyb20gYW4gaW5kZXggc2NhbiBpbnRvIHNsb3QsIHNjYW5uaW5nIGluIHRoZQor CSAqIHNwZWNpZmllZCBkaXJlY3Rpb24sIGFuZCByZXR1cm4gdHJ1ZSBpZiBhIHR1cGxlIHdhcyBm b3VuZCwgZmFsc2UKKwkgKiBvdGhlcndpc2UuCisJICoKKwkgKiBUaGlzIGNhbGxiYWNrIGFsbG93 cyB0aGUgdGFibGUgQU0gdG8gZGlyZWN0bHkgbWFuYWdlIHRoZSBzY2FuIHByb2Nlc3MsCisJICog aW5jbHVkaW5nIGludGVyZmFjaW5nIHdpdGggdGhlIGluZGV4IEFNLiBUaGUgY2FsbGVyIHNpbXBs eSBzcGVjaWZpZXMKKwkgKiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBzY2FuOyB0aGUgdGFibGUgQU0g dGFrZXMgY2FyZSBvZiByZXRyaWV2aW5nIFRJRHMKKwkgKiBmcm9tIHRoZSBpbmRleCwgcGVyZm9y bWluZyB2aXNpYmlsaXR5IGNoZWNrcywgYW5kIHJldHVybmluZyB0dXBsZXMgaW4KKwkgKiB0aGUg c2xvdC4gVGhpcyBlbmFibGVzIGltcG9ydGFudCBvcHRpbWl6YXRpb25zIChzdWNoIGFzIHRhYmxl IGJsb2NrIEkvTworCSAqIHByZWZldGNoaW5nKSB0aGF0IHJlcXVpcmUgdGhhdCB0aGUgdGFibGUg QU0gZGlyZWN0bHkgbWFuYWdlcyB0aGUKKwkgKiBwcm9ncmVzcyBvZiB0aGUgaW5kZXggc2Nhbi4K KwkgKgorCSAqIFRhYmxlIEFNcyB0aGF0IGltcGxlbWVudCB0aGlzIGFyZSBleHBlY3RlZCB0byB1 c2UgYmF0Y2hfZ2V0bmV4dCAoYW5kCisJICogb3RoZXIgYmF0Y2ggdXRpbGl0eSByb3V0aW5lcykg dG8gcGVyZm9ybSBhbWdldGJhdGNoIGluZGV4IHNjYW5zLgorCSAqLworCWJvb2wJCSgqaW5kZXhf Z2V0bmV4dF9zbG90KSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJICAgU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CisKIAkv KgogCSAqIEZldGNoIHR1cGxlIGF0IGB0aWRgIGludG8gYHNsb3RgLCBhZnRlciBkb2luZyBhIHZp c2liaWxpdHkgdGVzdAogCSAqIGFjY29yZGluZyB0byBgc25hcHNob3RgLiBJZiBhIHR1cGxlIHdh cyBmb3VuZCBhbmQgcGFzc2VkIHRoZSB2aXNpYmlsaXR5CiAJICogdGVzdCwgcmV0dXJuIHRydWUs IGZhbHNlIG90aGVyd2lzZS4KIAkgKgorCSAqIFRoaXMgaXMgYSBsb3dlci1sZXZlbCBjYWxsYmFj ayB0aGF0IHRha2VzIGEgVElEIGZyb20gdGhlIGNhbGxlci4KKwkgKiBDYWxsZXJzIHNob3VsZCBm YXZvciB0aGUgaW5kZXhfZ2V0bmV4dF9zbG90IGNhbGxiYWNrIHdoZW5ldmVyIHBvc3NpYmxlLgor CSAqCiAJICogTm90ZSB0aGF0IEFNcyB0aGF0IGRvIG5vdCBuZWNlc3NhcmlseSB1cGRhdGUgaW5k ZXhlcyB3aGVuIGluZGV4ZWQKIAkgKiBjb2x1bW5zIGRvIG5vdCBjaGFuZ2UsIG5lZWQgdG8gcmV0 dXJuIHRoZSBjdXJyZW50L2NvcnJlY3QgdmVyc2lvbiBvZgogCSAqIHRoZSB0dXBsZSB0aGF0IGlz IHZpc2libGUgdG8gdGhlIHNuYXBzaG90LCBldmVuIGlmIHRoZSB0aWQgcG9pbnRzIHRvIGFuCkBA IC00NTksNyArNDgzLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAkJCQkJCQkJ CSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJCQkJCQkgIGJvb2wgKmNhbGxfYWdhaW4sIGJv b2wgKmFsbF9kZWFkKTsKIAotCiAJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJICogQ2FsbGJhY2tzIGZv ciBub24tbW9kaWZ5aW5nIG9wZXJhdGlvbnMgb24gaW5kaXZpZHVhbCB0dXBsZXMKIAkgKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KQEAgLTExNTksMTQgKzExODIsMTUgQEAgdGFibGVfcGFyYWxsZWxzY2FuX3Jl aW5pdGlhbGl6ZShSZWxhdGlvbiByZWwsIFBhcmFsbGVsVGFibGVTY2FuRGVzYyBwc2NhbikKIAog LyoKICAqIFByZXBhcmUgdG8gZmV0Y2ggdHVwbGVzIGZyb20gdGhlIHJlbGF0aW9uLCBhcyBuZWVk ZWQgd2hlbiBmZXRjaGluZyB0dXBsZXMKLSAqIGZvciBhbiBpbmRleCBzY2FuLgorICogZm9yIGFu IGluZGV4IHNjYW4uICBJbmRleC1vbmx5IHNjYW4gY2FsbGVycyBtdXN0IHByb3ZpZGUgaW9zX3Rh Ymxlc2xvdCwKKyAqIHdoaWNoIGlzIGEgc2xvdCBmb3IgaG9sZGluZyB0dXBsZXMgZmV0Y2hlZCBm cm9tIHRoZSB0YWJsZS4KICAqCiAgKiBUdXBsZXMgZm9yIGFuIGluZGV4IHNjYW4gY2FuIHRoZW4g YmUgZmV0Y2hlZCB2aWEgdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoKS4KICAqLwogc3RhdGljIGlu bGluZSBJbmRleEZldGNoVGFibGVEYXRhICoKLXRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0 aW9uIHJlbCkKK3RhYmxlX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9uIHJlbCwgVHVwbGVUYWJs ZVNsb3QgKmlvc190YWJsZXNsb3QpCiB7Ci0JcmV0dXJuIHJlbC0+cmRfdGFibGVhbS0+aW5kZXhf ZmV0Y2hfYmVnaW4ocmVsKTsKKwlyZXR1cm4gcmVsLT5yZF90YWJsZWFtLT5pbmRleF9mZXRjaF9i ZWdpbihyZWwsIGlvc190YWJsZXNsb3QpOwogfQogCiAvKgpAQCAtMTE4OCw2ICsxMjEyLDI2IEBA IHRhYmxlX2luZGV4X2ZldGNoX2VuZChzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikK IAlzY2FuLT5yZWwtPnJkX3RhYmxlYW0tPmluZGV4X2ZldGNoX2VuZChzY2FuKTsKIH0KIAorLyoK KyAqIEZldGNoIHRoZSBuZXh0IHR1cGxlIGZyb20gYW4gaW5kZXggc2NhbiBpbnRvIGBzbG90YCwg c2Nhbm5pbmcgaW4gdGhlCisgKiBzcGVjaWZpZWQgZGlyZWN0aW9uLiBSZXR1cm5zIHRydWUgaWYg YSB0dXBsZSB3YXMgZm91bmQsIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBUaGUgaW5kZXggc2Nh biBzaG91bGQgaGF2ZSBiZWVuIHN0YXJ0ZWQgdmlhIHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKCku CisgKiBDYWxsZXJzIG11c3QgY2hlY2sgc2Nhbi0+eHNfcmVjaGVjayBhbmQgcmVjaGVjayBzY2Fu IGtleXMgaWYgcmVxdWlyZWQuCisgKgorICogSW5kZXgtb25seSBzY2FuIGNhbGxlcnMgbXVzdCBw YXNzIGFuIGluZGV4IHNjYW4gZGVzY3JpcHRvciB0aGF0IHdhcyBjcmVhdGVkCisgKiBieSBwYXNz aW5nIGEgdmFsaWQgaW9zX3RhYmxlc2xvdCB0byBpbmRleF9iZWdpbnNjYW4uICBUaGlzIGlvc190 YWJsZXNsb3QKKyAqIHdpbGwgYmUgcGFzc2VkIGRvd24gdG8gdGFibGVfaW5kZXhfZmV0Y2hfYmVn aW4gYnkgaW5kZXhfYmVnaW5zY2FuLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wKK3RhYmxlX2lu ZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIGlkeHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly ZWN0aW9uLAorCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90KQoreworCXN0cnVjdCBJbmRleEZl dGNoVGFibGVEYXRhICpzY2FuID0gaWR4c2Nhbi0+eHNfaGVhcGZldGNoOworCisJcmV0dXJuIHNj YW4tPnJlbC0+cmRfdGFibGVhbS0+aW5kZXhfZ2V0bmV4dF9zbG90KGlkeHNjYW4sIGRpcmVjdGlv biwgc2xvdCk7Cit9CisKIC8qCiAgKiBGZXRjaGVzLCBhcyBwYXJ0IG9mIGFuIGluZGV4IHNjYW4s IHR1cGxlIGF0IGB0aWRgIGludG8gYHNsb3RgLCBhZnRlciBkb2luZwogICogYSB2aXNpYmlsaXR5 IHRlc3QgYWNjb3JkaW5nIHRvIGBzbmFwc2hvdGAuIElmIGEgdHVwbGUgd2FzIGZvdW5kIGFuZCBw YXNzZWQKQEAgLTEyMTEsNiArMTI1NSw5IEBAIHRhYmxlX2luZGV4X2ZldGNoX2VuZChzdHJ1Y3Qg SW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKICAqIGVudHJ5IChsaWtlIGhlYXAncyBIT1QpLiBX aGVyZWFzIHRhYmxlX3R1cGxlX2ZldGNoX3Jvd192ZXJzaW9uKCkgb25seQogICogZXZhbHVhdGVz IHRoZSB0dXBsZSBleGFjdGx5IGF0IGB0aWRgLiBPdXRzaWRlIG9mIGluZGV4IGVudHJ5IC0+dGFi bGUgdHVwbGUKICAqIGxvb2t1cHMsIHRhYmxlX3R1cGxlX2ZldGNoX3Jvd192ZXJzaW9uKCkgaXMg d2hhdCdzIHVzdWFsbHkgbmVlZGVkLgorICoKKyAqIFRoaXMgaXMgYSBsb3dlci1sZXZlbCBpbnRl cmZhY2UgdGhhdCB0YWtlcyBhIFRJRCBmcm9tIHRoZSBjYWxsZXIuICBDYWxsZXJzCisgKiBzaG91 bGQgZmF2b3IgdGhlIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBpbnRlcmZhY2Ugd2hlbmV2ZXIg cG9zc2libGUuCiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbAogdGFibGVfaW5kZXhfZmV0Y2hfdHVw bGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmlu ZGV4IDY0ZmY2OTk2NC4uYjYwNjRiYjNkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9l eGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMTc1MSw3 ICsxNzUxLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuU3RhdGUKICAqCQlJbnN0cnVtZW50 CQkgICBsb2NhbCBpbmRleCBzY2FuIGluc3RydW1lbnRhdGlvbgogICoJCVNoYXJlZEluZm8JCSAg IHBhcmFsbGVsIHdvcmtlciBpbnN0cnVtZW50YXRpb24gKG5vIGxlYWRlciBlbnRyeSkKICAqCQlU YWJsZVNsb3QJCSAgIHNsb3QgZm9yIGhvbGRpbmcgdHVwbGVzIGZldGNoZWQgZnJvbSB0aGUgdGFi bGUKLSAqCQlWTUJ1ZmZlcgkJICAgYnVmZmVyIGluIHVzZSBmb3IgdmlzaWJpbGl0eSBtYXAgdGVz dGluZywgaWYgYW55CiAgKgkJUHNjYW5MZW4JCSAgIHNpemUgb2YgcGFyYWxsZWwgaW5kZXgtb25s eSBzY2FuIGRlc2NyaXB0b3IKICAqCQlOYW1lQ1N0cmluZ0F0dE51bXMgYXR0bnVtcyBvZiBuYW1l IHR5cGVkIGNvbHVtbnMgdG8gcGFkIHRvIE5BTUVEQVRBTEVOCiAgKgkJTmFtZUNTdHJpbmdDb3Vu dCAgIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgTmFtZUNTdHJpbmdBdHROdW1zIGFycmF5CkBA IC0xNzc0LDcgKzE3NzMsNiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleE9ubHlTY2FuU3RhdGUKIAlJ bmRleFNjYW5JbnN0cnVtZW50YXRpb24gaW9zc19JbnN0cnVtZW50OwogCVNoYXJlZEluZGV4U2Nh bkluc3RydW1lbnRhdGlvbiAqaW9zc19TaGFyZWRJbmZvOwogCVR1cGxlVGFibGVTbG90ICppb3Nz X1RhYmxlU2xvdDsKLQlCdWZmZXIJCWlvc3NfVk1CdWZmZXI7CiAJU2l6ZQkJaW9zc19Qc2Nhbkxl bjsKIAlBdHRyTnVtYmVyICppb3NzX05hbWVDU3RyaW5nQXR0TnVtczsKIAlpbnQJCQlpb3NzX05h bWVDU3RyaW5nQ291bnQ7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMu aCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDQ2YTg2NTU2Mi4uMTE4MDVi ZmY5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9zcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMTM0NCw3ICsxMzQ0LDcgQEAgdHlwZWRlZiBz dHJ1Y3QgSW5kZXhPcHRJbmZvCiAJLyogZG9lcyBBTSBoYXZlIGFtZ2V0Yml0bWFwIGludGVyZmFj ZT8gKi8KIAlib29sCQlhbWhhc2dldGJpdG1hcDsKIAlib29sCQlhbWNhbnBhcmFsbGVsOwotCS8q IGRvZXMgQU0gaGF2ZSBhbW1hcmtwb3MgaW50ZXJmYWNlPyAqLworCS8qIGlzIEFNIHByZXBhcmVk IGZvciB1cyB0byByZXN0b3JlIGEgbWFyaz8gKi8KIAlib29sCQlhbWNhbm1hcmtwb3M7CiAJLyog QU0ncyBjb3N0IGVzdGltYXRvciAqLwogCS8qIFJhdGhlciB0aGFuIGluY2x1ZGUgYW1hcGkuaCBo ZXJlLCB3ZSBkZWNsYXJlIGFtY29zdGVzdGltYXRlIGxpa2UgdGhpcyAqLwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4v YnJpbi5jCmluZGV4IDI2Y2I3NTA1OC4uODgwOTIxOTYxIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvYnJpbi9icmluLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5j CkBAIC0yOTQsMTAgKzI5NCwxMSBAQCBicmluaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFt cm91dGluZS0+YW1iZWdpbnNjYW4gPSBicmluYmVnaW5zY2FuOwogCWFtcm91dGluZS0+YW1yZXNj YW4gPSBicmlucmVzY2FuOwogCWFtcm91dGluZS0+YW1nZXR0dXBsZSA9IE5VTEw7CisJYW1yb3V0 aW5lLT5hbWdldGJhdGNoID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtZnJlZWJhdGNoID0gTlVMTDsK IAlhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwID0gYnJpbmdldGJpdG1hcDsKIAlhbXJvdXRpbmUtPmFt ZW5kc2NhbiA9IGJyaW5lbmRzY2FuOwotCWFtcm91dGluZS0+YW1tYXJrcG9zID0gTlVMTDsKLQlh bXJvdXRpbmUtPmFtcmVzdHJwb3MgPSBOVUxMOworCWFtcm91dGluZS0+YW1wb3NyZXNldCA9IE5V TEw7CiAJYW1yb3V0aW5lLT5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTDsKIAlhbXJvdXRp bmUtPmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbXBhcmFsbGVscmVz Y2FuID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jCmluZGV4IGIzZTJlOWQ1Zi4uYjhmODMx YTMxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMKQEAgLTE5NTMsOSArMTk1Myw5IEBAIGdpbmdl dGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogCSAqIGludG8gdGhl IG1haW4gaW5kZXgsIGFuZCBzbyB3ZSBtaWdodCB2aXNpdCBpdCBhIHNlY29uZCB0aW1lIGR1cmlu ZyB0aGUKIAkgKiBtYWluIHNjYW4uICBUaGlzIGlzIG9rYXkgYmVjYXVzZSB3ZSdsbCBqdXN0IHJl LXNldCB0aGUgc2FtZSBiaXQgaW4gdGhlCiAJICogYml0bWFwLiAgKFRoZSBwb3NzaWJpbGl0eSBv ZiBkdXBsaWNhdGUgdmlzaXRzIGlzIGEgbWFqb3IgcmVhc29uIHdoeSBHSU4KLQkgKiBjYW4ndCBz dXBwb3J0IHRoZSBhbWdldHR1cGxlIEFQSSwgaG93ZXZlci4pIE5vdGUgdGhhdCBpdCB3b3VsZCBu b3QgZG8KLQkgKiB0byBzY2FuIHRoZSBtYWluIGluZGV4IGJlZm9yZSB0aGUgcGVuZGluZyBsaXN0 LCBzaW5jZSBjb25jdXJyZW50Ci0JICogY2xlYW51cCBjb3VsZCB0aGVuIG1ha2UgdXMgbWlzcyBl bnRyaWVzIGVudGlyZWx5LgorCSAqIGNhbid0IHN1cHBvcnQgZWl0aGVyIHRoZSBhbWdldHR1cGxl IG9yIGFtZ2V0YmF0Y2ggQVBJLikgTm90ZSB0aGF0IGl0CisJICogd291bGQgbm90IGRvIHRvIHNj YW4gdGhlIG1haW4gaW5kZXggYmVmb3JlIHRoZSBwZW5kaW5nIGxpc3QsIHNpbmNlCisJICogY29u Y3VycmVudCBjbGVhbnVwIGNvdWxkIHRoZW4gbWFrZSB1cyBtaXNzIGVudHJpZXMgZW50aXJlbHku CiAJICovCiAJc2NhblBlbmRpbmdJbnNlcnQoc2NhbiwgdGJtLCAmbnRpZHMpOwogCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9naW4vZ2ludXRpbC5jCmluZGV4IDYwNWY4MGFhZC4uMWQyMzMwODdlIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv Z2luL2dpbnV0aWwuYwpAQCAtODIsMTAgKzgyLDExIEBAIGdpbmhhbmRsZXIoUEdfRlVOQ1RJT05f QVJHUykKIAlhbXJvdXRpbmUtPmFtYmVnaW5zY2FuID0gZ2luYmVnaW5zY2FuOwogCWFtcm91dGlu ZS0+YW1yZXNjYW4gPSBnaW5yZXNjYW47CiAJYW1yb3V0aW5lLT5hbWdldHR1cGxlID0gTlVMTDsK KwlhbXJvdXRpbmUtPmFtZ2V0YmF0Y2ggPSBOVUxMOworCWFtcm91dGluZS0+YW1mcmVlYmF0Y2gg PSBOVUxMOwogCWFtcm91dGluZS0+YW1nZXRiaXRtYXAgPSBnaW5nZXRiaXRtYXA7CiAJYW1yb3V0 aW5lLT5hbWVuZHNjYW4gPSBnaW5lbmRzY2FuOwotCWFtcm91dGluZS0+YW1tYXJrcG9zID0gTlVM TDsKLQlhbXJvdXRpbmUtPmFtcmVzdHJwb3MgPSBOVUxMOworCWFtcm91dGluZS0+YW1wb3NyZXNl dCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTDsKIAlh bXJvdXRpbmUtPmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbXBhcmFs bGVscmVzY2FuID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dp c3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwppbmRleCBjMjZkODUzOGYuLjBk MjgyYzY5YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwpAQCAtMTAzLDEwICsxMDMsMTEgQEAgZ2lz dGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtYmVnaW5zY2FuID0gZ2lz dGJlZ2luc2NhbjsKIAlhbXJvdXRpbmUtPmFtcmVzY2FuID0gZ2lzdHJlc2NhbjsKIAlhbXJvdXRp bmUtPmFtZ2V0dHVwbGUgPSBnaXN0Z2V0dHVwbGU7CisJYW1yb3V0aW5lLT5hbWdldGJhdGNoID0g TlVMTDsKKwlhbXJvdXRpbmUtPmFtZnJlZWJhdGNoID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtZ2V0 Yml0bWFwID0gZ2lzdGdldGJpdG1hcDsKIAlhbXJvdXRpbmUtPmFtZW5kc2NhbiA9IGdpc3RlbmRz Y2FuOwotCWFtcm91dGluZS0+YW1tYXJrcG9zID0gTlVMTDsKLQlhbXJvdXRpbmUtPmFtcmVzdHJw b3MgPSBOVUxMOworCWFtcm91dGluZS0+YW1wb3NyZXNldCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5h bWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtaW5pdHBhcmFsbGVs c2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbXBhcmFsbGVscmVzY2FuID0gTlVMTDsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oYXNoL2hhc2guYwppbmRleCBlMzg4MjUyYWYuLjcyODlkZjU3NCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo L2hhc2guYwpAQCAtMTAyLDEwICsxMDIsMTEgQEAgaGFzaGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJH UykKIAlhbXJvdXRpbmUtPmFtYmVnaW5zY2FuID0gaGFzaGJlZ2luc2NhbjsKIAlhbXJvdXRpbmUt PmFtcmVzY2FuID0gaGFzaHJlc2NhbjsKIAlhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgPSBoYXNoZ2V0 dHVwbGU7CisJYW1yb3V0aW5lLT5hbWdldGJhdGNoID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtZnJl ZWJhdGNoID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwID0gaGFzaGdldGJpdG1hcDsK IAlhbXJvdXRpbmUtPmFtZW5kc2NhbiA9IGhhc2hlbmRzY2FuOwotCWFtcm91dGluZS0+YW1tYXJr cG9zID0gTlVMTDsKLQlhbXJvdXRpbmUtPmFtcmVzdHJwb3MgPSBOVUxMOworCWFtcm91dGluZS0+ YW1wb3NyZXNldCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0g TlVMTDsKIAlhbXJvdXRpbmUtPmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5l LT5hbXBhcmFsbGVscmVzY2FuID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1f aGFuZGxlci5jCmluZGV4IGRkNGZlNmJmNi4uYzEyZGI0OGE2IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTcyLDYgKzcyLDMzIEBAIGhlYXBhbV9zbG90X2Nh bGxiYWNrcyhSZWxhdGlvbiByZWxhdGlvbikKIAlyZXR1cm4gJlRUU09wc0J1ZmZlckhlYXBUdXBs ZTsKIH0KIAorc3RhdGljIHZvaWQKK1N0b3JlSW5kZXhUdXBsZShUdXBsZVRhYmxlU2xvdCAqc2xv dCwKKwkJCQlJbmRleFR1cGxlIGl0dXAsIFR1cGxlRGVzYyBpdHVwZGVzYykKK3sKKwkvKgorCSAq IE5vdGU6IHdlIG11c3QgdXNlIHRoZSB0dXBkZXNjIHN1cHBsaWVkIGJ5IHRoZSBBTSBpbiBpbmRl eF9kZWZvcm1fdHVwbGUsCisJICogbm90IHRoZSBzbG90J3MgdHVwZGVzYywgaW4gY2FzZSB0aGUg bGF0dGVyIGhhcyBkaWZmZXJlbnQgZGF0YXR5cGVzCisJICogKHRoaXMgaGFwcGVucyBmb3IgYnRy ZWUgbmFtZV9vcHMgaW4gcGFydGljdWxhcikuICBUaGV5J2QgYmV0dGVyIGhhdmUKKwkgKiB0aGUg c2FtZSBudW1iZXIgb2YgY29sdW1ucyB0aG91Z2gsIGFzIHdlbGwgYXMgYmVpbmcgZGF0YXR5cGUt Y29tcGF0aWJsZQorCSAqIHdoaWNoIGlzIHNvbWV0aGluZyB3ZSBjYW4ndCBzbyBlYXNpbHkgY2hl Y2suCisJICovCisJQXNzZXJ0KHNsb3QtPnR0c190dXBsZURlc2NyaXB0b3ItPm5hdHRzID09IGl0 dXBkZXNjLT5uYXR0cyk7CisKKwlFeGVjQ2xlYXJUdXBsZShzbG90KTsKKwlpbmRleF9kZWZvcm1f dHVwbGUoaXR1cCwgaXR1cGRlc2MsIHNsb3QtPnR0c192YWx1ZXMsIHNsb3QtPnR0c19pc251bGwp OworCisJLyoKKwkgKiBDb3B5IGFsbCBuYW1lIGNvbHVtbnMgc3RvcmVkIGFzIGNzdHJpbmdzIGJh Y2sgaW50byBhIE5BTUVEQVRBTEVOIGJ5dGUKKwkgKiBzaXplZCBhbGxvY2F0aW9uLiAgV2UgbWFy ayB0aGlzIGJyYW5jaCBhcyB1bmxpa2VseSBhcyBnZW5lcmFsbHkgIm5hbWUiCisJICogaXMgdXNl ZCBvbmx5IGZvciB0aGUgc3lzdGVtIGNhdGFsb2dzIGFuZCB0aGlzIHdvdWxkIGhhdmUgdG8gYmUg YSB1c2VyCisJICogcXVlcnkgcnVubmluZyBvbiB0aG9zZSBvciBzb21lIG90aGVyIHVzZXIgdGFi bGUgd2l0aCBhbiBpbmRleCBvbiBhIG5hbWUKKwkgKiBjb2x1bW4uCisJICovCisKKwlFeGVjU3Rv cmVWaXJ0dWFsVHVwbGUoc2xvdCk7Cit9CisKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBJbmRl eCBTY2FuIENhbGxiYWNrcyBmb3IgaGVhcCBBTQpAQCAtNzksMTIgKzEwNiwxNyBAQCBoZWFwYW1f c2xvdF9jYWxsYmFja3MoUmVsYXRpb24gcmVsYXRpb24pCiAgKi8KIAogc3RhdGljIEluZGV4RmV0 Y2hUYWJsZURhdGEgKgotaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9uIHJlbCkKK2hl YXBhbV9pbmRleF9mZXRjaF9iZWdpbihSZWxhdGlvbiByZWwsIFR1cGxlVGFibGVTbG90ICppb3Nf dGFibGVzbG90KQogewotCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSBwYWxsb2MwX29iamVj dChJbmRleEZldGNoSGVhcERhdGEpOworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSBwYWxs b2Nfb2JqZWN0KEluZGV4RmV0Y2hIZWFwRGF0YSk7CiAKIAloc2Nhbi0+eHNfYmFzZS5yZWwgPSBy ZWw7CisJaHNjYW4tPnhzX2Jhc2UubmhlYXBhY2Nlc3NlcyA9IDA7CisKKwkvKiBoZWFwYW0gc3Bl Y2lmaWMgZmllbGRzICovCiAJaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlkQnVmZmVyOworCWhzY2Fu LT52bWJ1ZiA9IEludmFsaWRCdWZmZXI7CisJaHNjYW4tPmlvc190YWJsZXNsb3QgPSBpb3NfdGFi bGVzbG90OwogCiAJcmV0dXJuICZoc2Nhbi0+eHNfYmFzZTsKIH0KQEAgLTk0LDYgKzEyNiw3IEBA IGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQogewog CUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW47 CiAKKwkvKiBkZWxpYmVyYXRlbHkgZG9uJ3QgZHJvcCBWTSBidWZmZXIgcGluIGhlcmUgKi8KIAlp ZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpCiAJewogCQlSZWxlYXNlQnVmZmVyKGhz Y2FuLT54c19jYnVmKTsKQEAgLTEwOCw2ICsxNDEsMTIgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2Vu ZChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQogCiAJaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0 KHNjYW4pOwogCisJaWYgKGhzY2FuLT52bWJ1ZiAhPSBJbnZhbGlkQnVmZmVyKQorCXsKKwkJUmVs ZWFzZUJ1ZmZlcihoc2Nhbi0+dm1idWYpOworCQloc2Nhbi0+dm1idWYgPSBJbnZhbGlkQnVmZmVy OworCX0KKwogCXBmcmVlKGhzY2FuKTsKIH0KIApAQCAtMTczLDYgKzIxMiw0NjggQEAgaGVhcGFt X2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAogCXJl dHVybiBnb3RfaGVhcF90dXBsZTsKIH0KIAorLyoKKyAqIGhlYXBfYmF0Y2hfYWR2YW5jZV9wb3MK KyAqCQlBZHZhbmNlIHRoZSBwb3NpdGlvbiB0byB0aGUgbmV4dCBpdGVtLCBkZXBlbmRpbmcgb24g c2NhbiBkaXJlY3Rpb24uCisgKgorICogTW92ZSB0byB0aGUgbmV4dCBpdGVtIHdpdGhpbiB0aGUg YmF0Y2ggcG9pbnRlZCB0byBieSBjYWxsZXIncyBwb3MuICBUaGlzIGlzCisgKiB1c3VhbGx5IHJl YWRQb3MuICBBZHZhbmNlcyB0aGUgcG9zaXRpb24gdG8gdGhlIG5leHQgaXRlbSwgZWl0aGVyIGlu IHRoZQorICogc2FtZSBiYXRjaCBvciB0aGUgZm9sbG93aW5nIG9uZSAoaWYgYWxyZWFkeSBhdmFp bGFibGUpLgorICoKKyAqIFdlIGNhbiBhZHZhbmNlIG9ubHkgaWYgd2UgYWxyZWFkeSBoYXZlIHNv bWUgYmF0Y2hlcyBsb2FkZWQsIGFuZCB0aGVyZSdzCisgKiBlaXRoZXIgZW5vdWdoIGl0ZW1zIGlu IHRoZSBjdXJyZW50IGJhdGNoLCBvciBzb21lIG1vcmUgaXRlbXMgaW4gdGhlCisgKiBzdWJzZXF1 ZW50IGJhdGNoZXMuCisgKgorICogSWYgdGhpcyBpcyB0aGUgZmlyc3QgYWR2YW5jZSAocmlnaHQg YWZ0ZXIgbG9hZGluZyB0aGUgaW5pdGlhbC9oZWFkIGJhdGNoKSwKKyAqIHBvc2l0aW9uIGlzIHN0 aWxsIHVuZGVmaW5lZC4gIE90aGVyd2lzZSB3ZSBleHBlY3QgdGhlIHBvc2l0aW9uIHRvIGJlIHZh bGlkLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcG9zaXRpb24gd2FzIGFkdmFuY2VkLCBm YWxzZSBvdGhlcndpc2UuICBUaGUgcG9zaXRpb24KKyAqIGlzIGd1YXJhbnRlZWQgdG8gYmUgdmFs aWQgb25seSBhZnRlciBhIHN1Y2Nlc3NmdWwgYWR2YW5jZS4KKyAqLworc3RhdGljIGJvb2wKK2hl YXBfYmF0Y2hfYWR2YW5jZV9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuLCBzdHJ1Y3QgQmF0Y2hRdWV1 ZUl0ZW1Qb3MgKnBvcywKKwkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQmF0 Y2hJbmRleFNjYW4gYmF0Y2g7CisKKwkvKiBtYWtlIHN1cmUgd2UgaGF2ZSBiYXRjaGluZyBpbml0 aWFsaXplZCBhbmQgY29uc2lzdGVudCAqLworCWJhdGNoX2Fzc2VydF9iYXRjaGVzX3ZhbGlkKHNj YW4pOworCisJLyogc2hvdWxkIGtub3cgZGlyZWN0aW9uIGJ5IG5vdyAqLworCUFzc2VydChkaXJl Y3Rpb24gPT0gc2Nhbi0+YmF0Y2hxdWV1ZS0+ZGlyZWN0aW9uKTsKKwlBc3NlcnQoZGlyZWN0aW9u ICE9IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9uKTsKKworCS8qIFdlIGNhbid0IGFkdmFuY2UgaWYg dGhlcmUgYXJlIG5vIGJhdGNoZXMgYXZhaWxhYmxlLiAqLworCWlmIChJTkRFWF9TQ0FOX0JBVENI X0NPVU5UKHNjYW4pID09IDApCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogSWYgdGhlIHBv c2l0aW9uIGhhcyBub3QgYmVlbiBhZHZhbmNlZCB5ZXQsIGl0IGhhcyB0byBiZSByaWdodCBhZnRl ciB3ZQorCSAqIGxvYWRlZCB0aGUgaW5pdGlhbCBiYXRjaCAobXVzdCBiZSB0aGUgaGVhZCBiYXRj aCkuIEluIHRoYXQgY2FzZSBqdXN0CisJICogaW5pdGlhbGl6ZSBpdCB0byB0aGUgYmF0Y2gncyBm aXJzdCBpdGVtIChvciBpdHMgbGFzdCBpdGVtLCB3aGVuCisJICogc2Nhbm5pbmcgYmFja3dhcmRz KS4KKwkgKi8KKwlpZiAoSU5ERVhfU0NBTl9QT1NfSU5WQUxJRChwb3MpKQorCXsKKwkJLyoKKwkJ ICogV2Ugc2hvdWxkIGhhdmUgbG9hZGVkIHRoZSBzY2FuJ3MgaW5pdGlhbCBiYXRjaCwgb3IgbWF5 YmUgd2UgaGF2ZQorCQkgKiBjaGFuZ2VkIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHNjYW4gYWZ0ZXIg c2Nhbm5pbmcgYWxsIHRoZSB3YXkgdG8gdGhlCisJCSAqIGVuZCAoaW4gd2hpY2ggY2FzZSB0aGUg cG9zaXRpb24gaXMgaW52YWxpZCwgYW5kIHdlIG1ha2UgaXQgbG9vaworCQkgKiBsaWtlIHRoZXJl IGlzIGp1c3Qgb25lIGJhdGNoKS4gV2Ugc2hvdWxkIGhhdmUganVzdCBvbmUgYmF0Y2gsCisJCSAq IHRob3VnaC4KKwkJICovCisJCUFzc2VydChJTkRFWF9TQ0FOX0JBVENIX0NPVU5UKHNjYW4pID09 IDEpOworCisJCS8qCisJCSAqIEdldCB0aGUgaW5pdGlhbCBiYXRjaCAod2hpY2ggbXVzdCBiZSB0 aGUgaGVhZCksIGFuZCBpbml0aWFsaXplIHRoZQorCQkgKiBwb3NpdGlvbiB0byB0aGUgYXBwcm9w cmlhdGUgaXRlbSBmb3IgdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24KKwkJICovCisJCWJhdGNo ID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBzY2FuLT5iYXRjaHF1ZXVlLT5oZWFkQmF0Y2gpOwor CisJCXBvcy0+YmF0Y2ggPSBzY2FuLT5iYXRjaHF1ZXVlLT5oZWFkQmF0Y2g7CisKKwkJaWYgKFNj YW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJCXBvcy0+aXRlbSA9IGJhdGNoLT5m aXJzdEl0ZW07CisJCWVsc2UKKwkJCXBvcy0+aXRlbSA9IGJhdGNoLT5sYXN0SXRlbTsKKworCQli YXRjaF9hc3NlcnRfcG9zX3ZhbGlkKHNjYW4sIHBvcyk7CisKKwkJcmV0dXJuIHRydWU7CisJfQor CisJLyoKKwkgKiBUaGUgcG9zaXRpb24gaXMgYWxyZWFkeSBkZWZpbmVkLCBzbyB3ZSBzaG91bGQg aGF2ZSBzb21lIGJhdGNoZXMgbG9hZGVkCisJICogYW5kIHRoZSBwb3NpdGlvbiBoYXMgdG8gYmUg dmFsaWQgd2l0aCByZXNwZWN0IHRvIHRob3NlLgorCSAqLworCWJhdGNoX2Fzc2VydF9wb3NfdmFs aWQoc2NhbiwgcG9zKTsKKworCS8qCisJICogQWR2YW5jZSB0byB0aGUgbmV4dCBpdGVtIGluIHRo ZSBzYW1lIGJhdGNoLCBpZiB0aGVyZSBhcmUgbW9yZSBpdGVtcy4gSWYKKwkgKiB3ZSdyZSBhdCB0 aGUgbGFzdCBpdGVtLCB3ZSdsbCB0cnkgYWR2YW5jaW5nIHRvIHRoZSBuZXh0IGJhdGNoIGxhdGVy LgorCSAqLworCWJhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBwb3MtPmJhdGNoKTsKKwor CWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJeworCQlpZiAoKytwb3Mt Pml0ZW0gPD0gYmF0Y2gtPmxhc3RJdGVtKQorCQl7CisJCQliYXRjaF9hc3NlcnRfcG9zX3ZhbGlk KHNjYW4sIHBvcyk7CisKKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCWVsc2UJCQkJCQkvKiBT Y2FuRGlyZWN0aW9uSXNCYWNrd2FyZCAqLworCXsKKwkJaWYgKC0tcG9zLT5pdGVtID49IGJhdGNo LT5maXJzdEl0ZW0pCisJCXsKKwkJCWJhdGNoX2Fzc2VydF9wb3NfdmFsaWQoc2NhbiwgcG9zKTsK KworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisKKwkvKgorCSAqIFdlIGNvdWxkbid0IGFkdmFu Y2Ugd2l0aGluIHRoZSBzYW1lIGJhdGNoLCB0cnkgYWR2YW5jaW5nIHRvIHRoZSBuZXh0CisJICog YmF0Y2gsIGlmIGl0J3MgYWxyZWFkeSBsb2FkZWQuCisJICovCisJaWYgKElOREVYX1NDQU5fQkFU Q0hfTE9BREVEKHNjYW4sIHBvcy0+YmF0Y2ggKyAxKSkKKwl7CisJCS8qIGFkdmFuY2UgdG8gdGhl IG5leHQgYmF0Y2ggKi8KKwkJcG9zLT5iYXRjaCsrOworCisJCWJhdGNoID0gSU5ERVhfU0NBTl9C QVRDSChzY2FuLCBwb3MtPmJhdGNoKTsKKwkJQXNzZXJ0KGJhdGNoICE9IE5VTEwpOworCisJCWlm IChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJCQlwb3MtPml0ZW0gPSBiYXRj aC0+Zmlyc3RJdGVtOworCQllbHNlCisJCQlwb3MtPml0ZW0gPSBiYXRjaC0+bGFzdEl0ZW07CisK KwkJYmF0Y2hfYXNzZXJ0X3Bvc192YWxpZChzY2FuLCBwb3MpOworCisJCXJldHVybiB0cnVlOwor CX0KKworCS8qIGNhbid0IGFkdmFuY2UgKi8KKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qIC0tLS0t LS0tLS0tLS0tLS0KKyAqCQloZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQgLSBnZXQgbmV4dCBUSUQg ZnJvbSBpbmRleCBzY2FuIGJhdGNoIHF1ZXVlCisgKgorICogVGhpcyBmdW5jdGlvbiBpbXBsZW1l bnRzIGhlYXBhbSdzIHZlcnNpb24gb2YgZ2V0dGluZyB0aGUgbmV4dCBUSUQgZnJvbSBhbgorICog aW5kZXggc2NhbiB0aGF0IHVzZXMgdGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLiAgSXQgaXMgaW1w bGVtZW50ZWQgdXNpbmcKKyAqIHZhcmlvdXMgaW5kZXhiYXRjaC5jIHV0aWxpdHkgcm91dGluZXMu CisgKgorICogVGhlIHJvdXRpbmVzIGZyb20gaW5kZXhiYXRjaC5jIGFyZSBzdGF0ZWxlc3MgLS0g dGhleSBqdXN0IGltcGxlbWVudCBiYXRjaAorICogcXVldWUgbWVjaGFuaWNzLiAgaGVhcGFtX2Jh dGNoX2dldG5leHRfdGlkIGltcGxlbWVudHMgdGhlIGhlYXBhbSBwb2xpY3k7IGl0CisgKiBkZWNp ZGVzIHdoZW4gdG8gbG9hZC9mcmVlIGJhdGNoZXMsIGFuZCBjb250cm9scyBzY2FuIGRpcmVjdGlv biBjaGFuZ2VzLgorICogLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgSXRlbVBvaW50ZXIK K2hlYXBhbV9iYXRjaF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyZWN0aW9uKQoreworCUJhdGNoUXVldWUgKmJhdGNocXVldWUgPSBzY2FuLT5iYXRjaHF1 ZXVlOworCUJhdGNoUXVldWVJdGVtUG9zICpyZWFkUG9zOworCisJLyogc2hvdWxkbid0IGdldCBo ZXJlIHdpdGhvdXQgYmF0Y2hpbmcgKi8KKwliYXRjaF9hc3NlcnRfYmF0Y2hlc192YWxpZChzY2Fu KTsKKworCS8qIEluaXRpYWxpemUgZGlyZWN0aW9uIG9uIGZpcnN0IGNhbGwgKi8KKwlpZiAoYmF0 Y2hxdWV1ZS0+ZGlyZWN0aW9uID09IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9uKQorCQliYXRjaHF1 ZXVlLT5kaXJlY3Rpb24gPSBkaXJlY3Rpb247CisJZWxzZSBpZiAodW5saWtlbHkoYmF0Y2hxdWV1 ZS0+ZGlyZWN0aW9uICE9IGRpcmVjdGlvbikpCisJeworCQkvKgorCQkgKiBIYW5kbGUgYSBjaGFu Z2UgaW4gdGhlIHNjYW4ncyBkaXJlY3Rpb24uCisJCSAqCisJCSAqIFJlbGVhc2UgZnV0dXJlIGJh dGNoZXMgcHJvcGVybHksIHRvIG1ha2UgaXQgbG9vayBsaWtlIHRoZSBjdXJyZW50CisJCSAqIGJh dGNoIGlzIHRoZSBvbmx5IG9uZSB3ZSBsb2FkZWQuCisJCSAqLworCQl3aGlsZSAoYmF0Y2hxdWV1 ZS0+bmV4dEJhdGNoID4gYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoICsgMSkKKwkJeworCQkJLyogcmVs ZWFzZSAibGF0ZXIiIGJhdGNoZXMgaW4gcmV2ZXJzZSBvcmRlciAqLworCQkJQmF0Y2hJbmRleFNj YW4gZmJhdGNoOworCisJCQliYXRjaHF1ZXVlLT5uZXh0QmF0Y2gtLTsKKwkJCWZiYXRjaCA9IElO REVYX1NDQU5fQkFUQ0goc2NhbiwgYmF0Y2hxdWV1ZS0+bmV4dEJhdGNoKTsKKwkJCWJhdGNoX2Zy ZWUoc2NhbiwgZmJhdGNoKTsKKwkJfQorCisJCS8qCisJCSAqIFJlbWVtYmVyIHRoZSBuZXcgZGly ZWN0aW9uLCBhbmQgbWFrZSBzdXJlIHRoZSBzY2FuIGlzIG5vdCBtYXJrZWQgYXMKKwkJICogImZp bmlzaGVkIiAod2UgbWlnaHQgaGF2ZSBhbHJlYWR5IHJlYWQgdGhlIGxhc3QgYmF0Y2gsIGJ1dCBu b3cgd2UKKwkJICogbmVlZCB0byBzdGFydCBvdmVyKS4KKwkJICovCisJCWJhdGNocXVldWUtPmRp cmVjdGlvbiA9IGRpcmVjdGlvbjsKKwkJYmF0Y2hxdWV1ZS0+ZmluaXNoZWQgPSBmYWxzZTsKKwl9 CisKKwkvKiBzaG9ydGN1dCBmb3IgdGhlIHJlYWQgcG9zaXRpb24sIGZvciBjb252ZW5pZW5jZSAq LworCXJlYWRQb3MgPSAmYmF0Y2hxdWV1ZS0+cmVhZFBvczsKKworCS8qCisJICogVHJ5IGFkdmFu Y2luZyB0aGUgYmF0Y2ggcG9zaXRpb24uIElmIHRoYXQgZG9lc24ndCBzdWNjZWVkLCBpdCBtZWFu cyB3ZQorCSAqIGRvbid0IGhhdmUgbW9yZSBpdGVtcyBpbiB0aGUgY3VycmVudCBiYXRjaCwgYW5k IHRoZXJlJ3Mgbm8gZnV0dXJlIGJhdGNoCisJICogbG9hZGVkLiBTbyB0cnkgbG9hZGluZyBhbm90 aGVyIGJhdGNoLCBhbmQgcmV0cnkgaWYgbmVlZGVkLgorCSAqLworCXdoaWxlICh0cnVlKQorCXsK KwkJLyoKKwkJICogSWYgd2UgbWFuYWdlIHRvIGFkdmFuY2UgdG8gdGhlIG5leHQgaXRlbXMsIHJl dHVybiBpdCBhbmQgd2UncmUKKwkJICogZG9uZS4gT3RoZXJ3aXNlIHRyeSBsb2FkaW5nIGFub3Ro ZXIgYmF0Y2guCisJCSAqLworCQlpZiAoaGVhcF9iYXRjaF9hZHZhbmNlX3BvcyhzY2FuLCByZWFk UG9zLCBkaXJlY3Rpb24pKQorCQl7CisJCQlCYXRjaEluZGV4U2NhbiByZWFkQmF0Y2ggPSBJTkRF WF9TQ0FOX0JBVENIKHNjYW4sIHJlYWRQb3MtPmJhdGNoKTsKKworCQkJLyogc2V0IHRoZSBUSUQg LyBpdHVwIGZvciB0aGUgc2NhbiAqLworCQkJc2Nhbi0+eHNfaGVhcHRpZCA9IHJlYWRCYXRjaC0+ aXRlbXNbcmVhZFBvcy0+aXRlbV0uaGVhcFRpZDsKKworCQkJLyogeHNfaGl0dXAgaXMgbm90IHN1 cHBvcnRlZCBieSBhbWdldGJhdGNoIHNjYW5zICovCisJCQlBc3NlcnQoIXNjYW4tPnhzX2hpdHVw KTsKKworCQkJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJCQlzY2FuLT54c19pdHVwID0KKwkJ CQkJKEluZGV4VHVwbGUpIChyZWFkQmF0Y2gtPmN1cnJUdXBsZXMgKworCQkJCQkJCQkgIHJlYWRC YXRjaC0+aXRlbXNbcmVhZFBvcy0+aXRlbV0udHVwbGVPZmZzZXQpOworCisJCQkvKgorCQkJICog SWYgd2UgYWR2YW5jZWQgdG8gdGhlIG5leHQgYmF0Y2gsIHJlbGVhc2UgdGhlIGJhdGNoIHdlIG5v CisJCQkgKiBsb25nZXIgbmVlZC4gVGhlIHBvc2l0aW9ucyBpcyB0aGUgInJlYWQiIHBvc2l0aW9u LCBhbmQgd2UgY2FuCisJCQkgKiBjb21wYXJlIGl0IHRvIGhlYWRCYXRjaC4KKwkJCSAqLworCQkJ aWYgKHVubGlrZWx5KHJlYWRQb3MtPmJhdGNoICE9IGJhdGNocXVldWUtPmhlYWRCYXRjaCkpCisJ CQl7CisJCQkJQmF0Y2hJbmRleFNjYW4gaGVhZEJhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2Fu LAorCQkJCQkJCQkJCQkJCQkJYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoKTsKKworCQkJCS8qIEZyZWUg dGhlIGhlYWQgYmF0Y2ggKGV4Y2VwdCB3aGVuIGl0J3MgbWFya0JhdGNoKSAqLworCQkJCWJhdGNo X2ZyZWUoc2NhbiwgaGVhZEJhdGNoKTsKKworCQkJCS8qCisJCQkJICogSW4gYW55IGNhc2UsIHJl bW92ZSB0aGUgYmF0Y2ggZnJvbSB0aGUgcmVndWxhciBxdWV1ZSwgZXZlbgorCQkJCSAqIGlmIHdl IGtlcHQgaXQgZm9yIG1hcmsvcmVzdG9yZS4KKwkJCQkgKi8KKwkJCQliYXRjaHF1ZXVlLT5oZWFk QmF0Y2grKzsKKworCQkJCS8qIHdlIGNhbid0IHNraXAgYW55IGJhdGNoZXMgKi8KKwkJCQlBc3Nl cnQoYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoID09IHJlYWRQb3MtPmJhdGNoKTsKKwkJCX0KKworCQkJ cGdzdGF0X2NvdW50X2luZGV4X3R1cGxlcyhzY2FuLT5pbmRleFJlbGF0aW9uLCAxKTsKKwkJCXJl dHVybiAmc2Nhbi0+eHNfaGVhcHRpZDsKKwkJfQorCisJCS8qCisJCSAqIEZhaWxlZCB0byBhZHZh bmNlIHRoZSByZWFkIHBvc2l0aW9uLiAgSGF2ZSBpbmRleGJhdGNoLmMgdXRpbGl0eQorCQkgKiBy b3V0aW5lIGxvYWQgYW5vdGhlciBiYXRjaCBpbnRvIG91ciBxdWV1ZSAobmV4dCBpbiB0aGlzIGRp cmVjdGlvbikuCisJCSAqLworCQlpZiAoIWJhdGNoX2dldG5leHQoc2NhbiwgZGlyZWN0aW9uKSkK KwkJeworCQkJLyogd2UncmUgZG9uZSAtLSB0aGVyZSdzIG5vIG1vcmUgYmF0Y2hlcyBpbiB0aGlz IHNjYW4gZGlyZWN0aW9uICovCisJCQlicmVhazsKKwkJfQorCX0KKworCS8qCisJICogSWYgd2Ug Z2V0IGhlcmUsIHdlIGZhaWxlZCB0byBhZHZhbmNlIHRoZSBwb3NpdGlvbiBhbmQgdGhlcmUgYXJl IG5vIG1vcmUKKwkgKiBiYXRjaGVzIHRvIGJlIGxvYWRlZCBpbiB0aGUgY3VycmVudCBzY2FuIGRp cmVjdGlvbi4gIERlZmVuc2l2ZWx5IHJlc2V0CisJICogdGhlIHJlYWQgcG9zaXRpb24uCisJICov CisJYmF0Y2hfcmVzZXRfcG9zKHJlYWRQb3MpOworCUFzc2VydChzY2FuLT5iYXRjaHF1ZXVlLT5m aW5pc2hlZCk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJ CWluZGV4X2ZldGNoX2hlYXAgLSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhlYXAgdHVwbGUKKyAqCisg KiBUaGUgcmVzdWx0IGlzIGEgdmlzaWJsZSBoZWFwIHR1cGxlIGFzc29jaWF0ZWQgd2l0aCB0aGUg aW5kZXggVElEIG1vc3QKKyAqIHJlY2VudGx5IGZldGNoZWQgYnkgb3VyIGNhbGxlciBpbiBzY2Fu LT54c19oZWFwdGlkLCBvciBOVUxMIGlmIG5vIG1vcmUKKyAqIG1hdGNoaW5nIHR1cGxlcyBleGlz dC4gIChUaGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBtYXRjaGluZyB0dXBsZSBiZWNhdXNlCisg KiBvZiBIT1QgY2hhaW5zLCBhbHRob3VnaCB3aGVuIHVzaW5nIGFuIE1WQ0Mgc25hcHNob3QgaXQg c2hvdWxkIGJlIGltcG9zc2libGUKKyAqIGZvciBtb3JlIHRoYW4gb25lIHN1Y2ggdHVwbGUgdG8g ZXhpc3QuKQorICoKKyAqIE9uIHN1Y2Nlc3MsIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgaGVh cCB0dXAgaXMgcGlubmVkLiAgVGhlIHBpbiBtdXN0IGJlCisgKiBkcm9wcGVkIGVsc2V3aGVyZS4K KyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIGJvb2wKK2luZGV4X2ZldGNoX2hlYXAo SW5kZXhTY2FuRGVzYyBzY2FuLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlib29sCQlhbGxf ZGVhZCA9IGZhbHNlOworCWJvb2wJCWZvdW5kOworCisJZm91bmQgPSBoZWFwYW1faW5kZXhfZmV0 Y2hfdHVwbGUoc2Nhbi0+eHNfaGVhcGZldGNoLCAmc2Nhbi0+eHNfaGVhcHRpZCwKKwkJCQkJCQkJ CSBzY2FuLT54c19zbmFwc2hvdCwgc2xvdCwKKwkJCQkJCQkJCSAmc2Nhbi0+eHNfaGVhcF9jb250 aW51ZSwgJmFsbF9kZWFkKTsKKworCWlmIChmb3VuZCkKKwkJcGdzdGF0X2NvdW50X2hlYXBfZmV0 Y2goc2Nhbi0+aW5kZXhSZWxhdGlvbik7CisKKwkvKgorCSAqIElmIHdlIHNjYW5uZWQgYSB3aG9s ZSBIT1QgY2hhaW4gYW5kIGZvdW5kIG9ubHkgZGVhZCB0dXBsZXMsIHRlbGwgaW5kZXgKKwkgKiBB TSB0byBraWxsIGl0cyBlbnRyeSBmb3IgdGhhdCBUSUQgKHRoaXMgd2lsbCB0YWtlIGVmZmVjdCBp biB0aGUgbmV4dAorCSAqIGFtZ2V0dHVwbGUgY2FsbCwgaW4gaW5kZXhfZ2V0bmV4dF90aWQpLiAg V2UgZG8gbm90IGRvIHRoaXMgd2hlbiBpbgorCSAqIHJlY292ZXJ5IGJlY2F1c2UgaXQgbWF5IHZp b2xhdGUgTVZDQyB0byBkbyBzby4gIFNlZSBjb21tZW50cyBpbgorCSAqIFJlbGF0aW9uR2V0SW5k ZXhTY2FuKCkuCisJICoKKwkgKiBYWFggRm9yIHNjYW5zIHVzaW5nIGJhdGNoaW5nLCByZWNvcmQg dGhlIGZsYWcgaW4gdGhlIGJhdGNoICh3ZSB3aWxsCisJICogcGFzcyBpdCB0byB0aGUgQU0gbGF0 ZXIsIHdoZW4gZnJlZWluZyBpdCkuIE90aGVyd2lzZSBqdXN0IHBhc3MgaXQgdG8KKwkgKiB0aGUg QU0gdXNpbmcgdGhlIGtpbGxfcHJpb3JfdHVwbGUgZmllbGQuCisJICovCisJaWYgKCFzY2FuLT54 YWN0U3RhcnRlZEluUmVjb3ZlcnkpCisJeworCQlpZiAoc2Nhbi0+YmF0Y2hxdWV1ZSA9PSBOVUxM KQorCQkJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGFsbF9kZWFkOworCQllbHNlIGlmIChhbGxf ZGVhZCkKKwkJCWluZGV4X2JhdGNoX2tpbGxfaXRlbShzY2FuKTsKKwl9CisKKwlyZXR1cm4gZm91 bmQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQloZWFwYW1faW5kZXhfZ2V0bmV4dF9z bG90IC0gZ2V0IHRoZSBuZXh0IHR1cGxlIGZyb20gYSBzY2FuCisgKgorICogVGhlIHJlc3VsdCBp cyB0cnVlIGlmIGEgdHVwbGUgc2F0aXNmeWluZyB0aGUgc2NhbiBrZXlzIGFuZCB0aGUgc25hcHNo b3Qgd2FzCisgKiBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlLiAgVGhlIHR1cGxlIGlzIHN0b3JlZCBp biB0aGUgc3BlY2lmaWVkIHNsb3QuCisgKgorICogT24gc3VjY2VzcywgcmVzb3VyY2VzIChsaWtl IGJ1ZmZlciBwaW5zKSBhcmUgbGlrZWx5IHRvIGJlIGhlbGQsIGFuZCB3aWxsIGJlCisgKiBkcm9w cGVkIGJ5IGEgZnV0dXJlIGNhbGwgaGVyZSAob3IgYnkgYSBsYXRlciBjYWxsIHRvIGluZGV4X2Vu ZHNjYW4pLgorICoKKyAqIE5vdGU6IGNhbGxlciBtdXN0IGNoZWNrIHNjYW4tPnhzX3JlY2hlY2ss IGFuZCBwZXJmb3JtIHJlY2hlY2tpbmcgb2YgdGhlCisgKiBzY2FuIGtleXMgaWYgcmVxdWlyZWQu ICBXZSBkbyBub3QgZG8gdGhhdCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZQorICogZW5vdWdo IGluZm9ybWF0aW9uIHRvIGRvIGl0IGVmZmljaWVudGx5IGluIHRoZSBnZW5lcmFsIGNhc2UuCisg KiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyBib29sCitoZWFwYW1faW5kZXhfZ2V0bmV4 dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJ CQkgIFR1cGxlVGFibGVTbG90ICpzbG90KQoreworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4g PSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW4tPnhzX2hlYXBmZXRjaDsKKwlJdGVtUG9pbnRl ciB0aWQgPSBOVUxMOworCisJZm9yICg7OykKKwl7CisJCWlmICghc2Nhbi0+eHNfaGVhcF9jb250 aW51ZSkKKwkJeworCQkJLyoKKwkJCSAqIFNjYW5zIHRoYXQgdXNlIGFuIGFtZ2V0YmF0Y2ggaW5k ZXggQU0gYXJlIG1hbmFnZWQgYnkgaGVhcGFtJ3MKKwkJCSAqIGluZGV4IHNjYW4gbWFuYWdlci4g IFRoaXMgZ2l2ZXMgaGVhcGFtIHRoZSBhYmlsaXR5IHRvIHJlYWQgaGVhcAorCQkJICogdHVwbGVz IGluIGEgZmxleGlibGUgb3JkZXIgdGhhdCBpcyBhdHR1bmVkIHRvIGJvdGggY29zdHMgYW5kCisJ CQkgKiBiZW5lZml0cyBvbiB0aGUgaGVhcGFtIGFuZCB0YWJsZSBBTSBzaWRlLgorCQkJICoKKwkJ CSAqIFNjYW5zIHRoYXQgdXNlIGFuIGFtZ2V0dHVwbGUgaW5kZXggQU0gc2ltcGx5IGNhbGwgdGhy b3VnaCB0bworCQkJICogaW5kZXhfZ2V0bmV4dF90aWQgdG8gZ2V0IHRoZSBuZXh0IFRJRCByZXR1 cm5lZCBieSBpbmRleCBBTS4gVGhlCisJCQkgKiBwcm9ncmVzcyBvZiB0aGUgc2NhbiB3aWxsIGJl IHVuZGVyIHRoZSBjb250cm9sIG9mIGluZGV4IEFNICh3ZQorCQkJICoganVzdCBwYXNzIGl0IHRo cm91Z2ggYSBkaXJlY3Rpb24gdG8gZ2V0IHRoZSBuZXh0IHR1cGxlIGluKSwgc28KKwkJCSAqIHdl IGNhbm5vdCByZW9yZGVyIGFueSB3b3JrLgorCQkJICovCisJCQlpZiAoc2Nhbi0+YmF0Y2hxdWV1 ZSAhPSBOVUxMKQorCQkJCXRpZCA9IGhlYXBhbV9iYXRjaF9nZXRuZXh0X3RpZChzY2FuLCBkaXJl Y3Rpb24pOworCQkJZWxzZQorCQkJCXRpZCA9IGluZGV4X2dldG5leHRfdGlkKHNjYW4sIGRpcmVj dGlvbik7CisKKwkJCS8qIElmIHdlJ3JlIG91dCBvZiBpbmRleCBlbnRyaWVzLCB3ZSdyZSBkb25l ICovCisJCQlpZiAodGlkID09IE5VTEwpCisJCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBG ZXRjaCB0aGUgbmV4dCAob3Igb25seSkgdmlzaWJsZSBoZWFwIHR1cGxlIGZvciB0aGlzIGluZGV4 IGVudHJ5LgorCQkgKiBJZiB3ZSBkb24ndCBmaW5kIGFueXRoaW5nLCBsb29wIGFyb3VuZCBhbmQg Z3JhYiB0aGUgbmV4dCBUSUQgZnJvbQorCQkgKiB0aGUgaW5kZXguCisJCSAqLworCQlBc3NlcnQo SXRlbVBvaW50ZXJJc1ZhbGlkKCZzY2FuLT54c19oZWFwdGlkKSk7CisJCWlmICghc2Nhbi0+eHNf d2FudF9pdHVwKQorCQl7CisJCQkvKiBQbGFpbiBpbmRleCBzY2FuICovCisJCQlpZiAoaW5kZXhf ZmV0Y2hfaGVhcChzY2FuLCBzbG90KSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQllbHNlCisJ CXsKKwkJCS8qCisJCQkgKiBJbmRleC1vbmx5IHNjYW4uCisJCQkgKgorCQkJICogV2UgY2FuIHNr aXAgdGhlIGhlYXAgZmV0Y2ggaWYgdGhlIFRJRCByZWZlcmVuY2VzIGEgaGVhcCBwYWdlIG9uCisJ CQkgKiB3aGljaCBhbGwgdHVwbGVzIGFyZSBrbm93biB2aXNpYmxlIHRvIGV2ZXJ5Ym9keS4gIElu IGFueSBjYXNlLAorCQkJICogd2UnbGwgdXNlIHRoZSBpbmRleCB0dXBsZSBub3QgdGhlIGhlYXAg dHVwbGUgYXMgdGhlIGRhdGEKKwkJCSAqIHNvdXJjZS4KKwkJCSAqCisJCQkgKiBOb3RlIG9uIE1l bW9yeSBPcmRlcmluZyBFZmZlY3RzOiB2aXNpYmlsaXR5bWFwX2dldF9zdGF0dXMgZG9lcworCQkJ ICogbm90IGxvY2sgdGhlIHZpc2liaWxpdHkgbWFwIGJ1ZmZlciwgYW5kIHRoZXJlZm9yZSB0aGUg cmVzdWx0IHdlCisJCQkgKiByZWFkIGhlcmUgY291bGQgYmUgc2xpZ2h0bHkgc3RhbGUuICBIb3dl dmVyLCBpdCBjYW4ndCBiZSBzdGFsZQorCQkJICogZW5vdWdoIHRvIG1hdHRlci4KKwkJCSAqCisJ CQkgKiBXZSBuZWVkIHRvIGRldGVjdCBjbGVhcmluZyBhIFZNIGJpdCBkdWUgdG8gYW4gaW5zZXJ0 IHJpZ2h0CisJCQkgKiBhd2F5LCBiZWNhdXNlIHRoZSB0dXBsZSBpcyBwcmVzZW50IGluIHRoZSBp bmRleCBwYWdlIGJ1dCBub3QKKwkJCSAqIHZpc2libGUuIFRoZSByZWFkaW5nIG9mIHRoZSBUSUQg YnkgdGhpcyBzY2FuICh1c2luZyBhIHNoYXJlZAorCQkJICogbG9jayBvbiB0aGUgaW5kZXggYnVm ZmVyKSBpcyBzZXJpYWxpemVkIHdpdGggdGhlIGluc2VydCBvZiB0aGUKKwkJCSAqIFRJRCBpbnRv IHRoZSBpbmRleCAodXNpbmcgYW4gZXhjbHVzaXZlIGxvY2sgb24gdGhlIGluZGV4CisJCQkgKiBi dWZmZXIpLiBCZWNhdXNlIHRoZSBWTSBiaXQgaXMgY2xlYXJlZCBiZWZvcmUgdXBkYXRpbmcgdGhl CisJCQkgKiBpbmRleCwgYW5kIGxvY2tpbmcvdW5sb2NraW5nIG9mIHRoZSBpbmRleCBwYWdlIGFj dHMgYXMgYSBmdWxsCisJCQkgKiBtZW1vcnkgYmFycmllciwgd2UgYXJlIHN1cmUgdG8gc2VlIHRo ZSBjbGVhcmVkIGJpdCBpZiB3ZSBzZWUgYQorCQkJICogcmVjZW50bHktaW5zZXJ0ZWQgVElELgor CQkJICoKKwkJCSAqIERlbGV0ZXMgZG8gbm90IHVwZGF0ZSB0aGUgaW5kZXggcGFnZSAob25seSBW QUNVVU0gd2lsbCBjbGVhcgorCQkJICogb3V0IHRoZSBUSUQpLCBzbyB0aGUgY2xlYXJpbmcgb2Yg dGhlIFZNIGJpdCBieSBhIGRlbGV0ZSBpcyBub3QKKwkJCSAqIHNlcmlhbGl6ZWQgd2l0aCB0aGlz IHRlc3QgYmVsb3csIGFuZCB3ZSBtYXkgc2VlIGEgdmFsdWUgdGhhdCBpcworCQkJICogc2lnbmlm aWNhbnRseSBzdGFsZS4gSG93ZXZlciwgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgZGVsZXRlCisJ CQkgKiByaWdodCBhd2F5LCBiZWNhdXNlIHRoZSB0dXBsZSBpcyBzdGlsbCB2aXNpYmxlIHVudGls IHRoZQorCQkJICogZGVsZXRpbmcgdHJhbnNhY3Rpb24gY29tbWl0cyBvciB0aGUgc3RhdGVtZW50 IGVuZHMgKGlmIGl0J3Mgb3VyCisJCQkgKiB0cmFuc2FjdGlvbikuIEluIGVpdGhlciBjYXNlLCB0 aGUgbG9jayBvbiB0aGUgVk0gYnVmZmVyIHdpbGwKKwkJCSAqIGhhdmUgYmVlbiByZWxlYXNlZCAo YWN0aW5nIGFzIGEgd3JpdGUgYmFycmllcikgYWZ0ZXIgY2xlYXJpbmcKKwkJCSAqIHRoZSBiaXQu IEFuZCBmb3IgdXMgdG8gaGF2ZSBhIHNuYXBzaG90IHRoYXQgaW5jbHVkZXMgdGhlCisJCQkgKiBk ZWxldGluZyB0cmFuc2FjdGlvbiAobWFraW5nIHRoZSB0dXBsZSBpbnZpc2libGUpLCB3ZSBtdXN0 IGhhdmUKKwkJCSAqIGFjcXVpcmVkIFByb2NBcnJheUxvY2sgYWZ0ZXIgdGhhdCB0aW1lLCBhY3Rp bmcgYXMgYSByZWFkCisJCQkgKiBiYXJyaWVyLgorCQkJICoKKwkJCSAqIEl0J3Mgd29ydGggZ29p bmcgdGhyb3VnaCB0aGlzIGNvbXBsZXhpdHkgdG8gYXZvaWQgbmVlZGluZyB0bworCQkJICogbG9j ayB0aGUgVk0gYnVmZmVyLCB3aGljaCBjb3VsZCBjYXVzZSBzaWduaWZpY2FudCBjb250ZW50aW9u LgorCQkJICovCisJCQlpZiAoIVZNX0FMTF9WSVNJQkxFKGhzY2FuLT54c19iYXNlLnJlbCwKKwkJ CQkJCQkJSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpLAorCQkJCQkJCQkmaHNjYW4tPnZt YnVmKSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFJhdHMsIHdlIGhhdmUgdG8gdmlzaXQgdGhlIGhl YXAgdG8gY2hlY2sgdmlzaWJpbGl0eS4KKwkJCQkgKi8KKwkJCQloc2Nhbi0+eHNfYmFzZS5uaGVh cGFjY2Vzc2VzKys7CisJCQkJaWYgKCFpbmRleF9mZXRjaF9oZWFwKHNjYW4sIGhzY2FuLT5pb3Nf dGFibGVzbG90KSkKKwkJCQkJY29udGludWU7CS8qIG5vIHZpc2libGUgdHVwbGUsIHRyeSBuZXh0 IGluZGV4IGVudHJ5ICovCisKKwkJCQkvKgorCQkJCSAqIHNlbGZ1bmNzLmMgY2FsbGVyIHVzZXMg U25hcHNob3ROb25WYWN1dW1hYmxlLiAgSnVzdCBhc3N1bWUKKwkJCQkgKiB0aGF0IGl0J3MgZ29v ZCBlbm91Z2ggdGhhdCBhbnkgb25lIHR1cGxlIGZyb20gSE9UIGNoYWluIGlzCisJCQkJICogdmlz aWJsZSBmb3Igc3VjaCBhIGNhbGxlcgorCQkJCSAqLworCQkJCWlmICh1bmxpa2VseSghSXNNVkND U25hcHNob3Qoc2Nhbi0+eHNfc25hcHNob3QpKSkKKwkJCQkJcmV0dXJuIHRydWU7CisKKwkJCQlF eGVjQ2xlYXJUdXBsZShoc2Nhbi0+aW9zX3RhYmxlc2xvdCk7CisKKwkJCQkvKgorCQkJCSAqIE9u bHkgTVZDQyBzbmFwc2hvdHMgYXJlIHN1cHBvcnRlZCBoZXJlLCBzbyB0aGVyZSBzaG91bGQgYmUK KwkJCQkgKiBubyBuZWVkIHRvIGtlZXAgZm9sbG93aW5nIHRoZSBIT1QgY2hhaW4gb25jZSBhIHZp c2libGUKKwkJCQkgKiBlbnRyeSBoYXMgYmVlbiBmb3VuZC4KKwkJCQkgKi8KKwkJCQlpZiAoc2Nh bi0+eHNfaGVhcF9jb250aW51ZSkKKwkJCQkJZWxvZyhFUlJPUiwgIm5vbi1NVkNDIHNuYXBzaG90 cyBhcmUgbm90IHN1cHBvcnRlZCBpbiBpbmRleC1vbmx5IHNjYW5zIik7CisKKwkJCQkvKgorCQkJ CSAqIE5vdGU6IGF0IHRoaXMgcG9pbnQgd2UgYXJlIGhvbGRpbmcgYSBwaW4gb24gdGhlIGhlYXAg cGFnZSwKKwkJCQkgKiBhcyByZWNvcmRlZCBpbiBJbmRleEZldGNoSGVhcERhdGEueHNfY2J1Zi4g IFdlIGNvdWxkCisJCQkJICogcmVsZWFzZSB0aGF0IHBpbiBub3csIGJ1dCB3ZSBwcmVmZXIgdG8g aG9sZCBvbiB0byBWTSBwaW5zLgorCQkJCSAqIGl0J3MgcXVpdGUgcG9zc2libGUgdGhhdCB0aGUg aW5kZXggZW50cnkgd2lsbCByZXF1aXJlIGEKKwkJCQkgKiB2aXNpdCB0byB0aGUgc2FtZSBoZWFw IHBhZ2UuICBJdCdzIGV2ZW4gbW9yZSBsaWtlbHkgdGhhdAorCQkJCSAqIHRoZSBpbmRleCBlbnRy eSB3aWxsIGZvcmNlIHVzIHRvIHBlcmZvcm0gYSBsb29rdXAgdGhhdCB1c2VzCisJCQkJICogdGhl IHNhbWUgYWxyZWFkeS1waW5uZWQgVk0gcGFnZS4KKwkJCQkgKi8KKwkJCQlpZiAoc2Nhbi0+eHNf aXR1cCkKKwkJCQkJU3RvcmVJbmRleFR1cGxlKHNsb3QsIHNjYW4tPnhzX2l0dXAsIHNjYW4tPnhz X2l0dXBkZXNjKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFdlIGRpZG4n dCBhY2Nlc3MgdGhlIGhlYXAsIHNvIHdlJ2xsIG5lZWQgdG8gdGFrZSBhCisJCQkJICogcHJlZGlj YXRlIGxvY2sgZXhwbGljaXRseSwgYXMgaWYgd2UgaGFkLiAgRm9yIG5vdyB3ZSBkbworCQkJCSAq IHRoYXQgYXQgcGFnZSBsZXZlbC4KKwkJCQkgKi8KKwkJCQlQcmVkaWNhdGVMb2NrUGFnZShoc2Nh bi0+eHNfYmFzZS5yZWwsCisJCQkJCQkJCSAgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQp LAorCQkJCQkJCQkgIHNjYW4tPnhzX3NuYXBzaG90KTsKKwkJCX0KKwkJCXJldHVybiB0cnVlOwor CQl9CisJfQorCisJcmV0dXJuIGZhbHNlOworfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIENh bGxiYWNrcyBmb3Igbm9uLW1vZGlmeWluZyBvcGVyYXRpb25zIG9uIGluZGl2aWR1YWwgdHVwbGVz IGZvciBoZWFwIEFNCkBAIC03NTMsNyArMTI1NCw4IEBAIGhlYXBhbV9yZWxhdGlvbl9jb3B5X2Zv cl9jbHVzdGVyKFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5ld0hlYXAsCiAKIAkJdGFibGVT Y2FuID0gTlVMTDsKIAkJaGVhcFNjYW4gPSBOVUxMOwotCQlpbmRleFNjYW4gPSBpbmRleF9iZWdp bnNjYW4oT2xkSGVhcCwgT2xkSW5kZXgsIFNuYXBzaG90QW55LCBOVUxMLCAwLCAwKTsKKwkJaW5k ZXhTY2FuID0gaW5kZXhfYmVnaW5zY2FuKE9sZEhlYXAsIE9sZEluZGV4LCBOVUxMLCBTbmFwc2hv dEFueSwKKwkJCQkJCQkJCU5VTEwsIDAsIDApOwogCQlpbmRleF9yZXNjYW4oaW5kZXhTY2FuLCBO VUxMLCAwLCBOVUxMLCAwKTsKIAl9CiAJZWxzZQpAQCAtNzkwLDcgKzEyOTIsOCBAQCBoZWFwYW1f cmVsYXRpb25fY29weV9mb3JfY2x1c3RlcihSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBOZXdI ZWFwLAogCiAJCWlmIChpbmRleFNjYW4gIT0gTlVMTCkKIAkJewotCQkJaWYgKCFpbmRleF9nZXRu ZXh0X3Nsb3QoaW5kZXhTY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc2xvdCkpCisJCQlpZiAo IWhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhTY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlv biwKKwkJCQkJCQkJCQkgICBzbG90KSkKIAkJCQlicmVhazsKIAogCQkJLyogU2luY2Ugd2UgdXNl ZCBubyBzY2FuIGtleXMsIHNob3VsZCBuZXZlciBuZWVkIHRvIHJlY2hlY2sgKi8KQEAgLTI2MzMs NiArMzEzNiw3IEBAIHN0YXRpYyBjb25zdCBUYWJsZUFtUm91dGluZSBoZWFwYW1fbWV0aG9kcyA9 IHsKIAkuaW5kZXhfZmV0Y2hfYmVnaW4gPSBoZWFwYW1faW5kZXhfZmV0Y2hfYmVnaW4sCiAJLmlu ZGV4X2ZldGNoX3Jlc2V0ID0gaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0LAogCS5pbmRleF9mZXRj aF9lbmQgPSBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kLAorCS5pbmRleF9nZXRuZXh0X3Nsb3QgPSBo ZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90LAogCS5pbmRleF9mZXRjaF90dXBsZSA9IGhlYXBhbV9p bmRleF9mZXRjaF90dXBsZSwKIAogCS50dXBsZV9pbnNlcnQgPSBoZWFwYW1fdHVwbGVfaW5zZXJ0 LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlCmluZGV4IDZmMmUzMDYxYS4uZTZkNjgxYjQwIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBAIE9CSlMgPSBcCiAJ YW1hcGkubyBcCiAJYW12YWxpZGF0ZS5vIFwKIAlnZW5hbS5vIFwKLQlpbmRleGFtLm8KKwlpbmRl eGFtLm8gXAorCWluZGV4YmF0Y2gubwogCiBpbmNsdWRlICQodG9wX3NyY2Rpcikvc3JjL2JhY2tl bmQvY29tbW9uLm1rCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0u YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCmluZGV4IDcwN2MyNTI4OS4uOWVh ZGMzYWZjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwpAQCAtODksNiArODksNyBAQCBSZWxh dGlvbkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGludCBu b3JkZXJieXMpCiAJc2Nhbi0+eHNfc25hcHNob3QgPSBJbnZhbGlkU25hcHNob3Q7CS8qIGNhbGxl ciBtdXN0IGluaXRpYWxpemUgdGhpcyAqLwogCXNjYW4tPm51bWJlck9mS2V5cyA9IG5rZXlzOwog CXNjYW4tPm51bWJlck9mT3JkZXJCeXMgPSBub3JkZXJieXM7CisJc2Nhbi0+YmF0Y2hxdWV1ZSA9 IE5VTEw7CS8qIHVzZWQgYnkgYW1nZXRiYXRjaCBpbmRleCBBTXMgKi8KIAogCS8qCiAJICogV2Ug YWxsb2NhdGUga2V5IHdvcmtzcGFjZSBoZXJlLCBidXQgaXQgd29uJ3QgZ2V0IGZpbGxlZCB1bnRp bCBhbXJlc2Nhbi4KQEAgLTQ0Niw3ICs0NDcsNyBAQCBzeXN0YWJsZV9iZWdpbnNjYW4oUmVsYXRp b24gaGVhcFJlbGF0aW9uLAogCQkJCWVsb2coRVJST1IsICJjb2x1bW4gaXMgbm90IGluIGluZGV4 Iik7CiAJCX0KIAotCQlzeXNzY2FuLT5pc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsYXRp b24sIGlyZWwsCisJCXN5c3NjYW4tPmlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlv biwgaXJlbCwgTlVMTCwKIAkJCQkJCQkJCQkgc25hcHNob3QsIE5VTEwsIG5rZXlzLCAwKTsKIAkJ aW5kZXhfcmVzY2FuKHN5c3NjYW4tPmlzY2FuLCBpZHhrZXksIG5rZXlzLCBOVUxMLCAwKTsKIAkJ c3lzc2Nhbi0+c2NhbiA9IE5VTEw7CkBAIC01MTcsNyArNTE4LDggQEAgc3lzdGFibGVfZ2V0bmV4 dChTeXNTY2FuRGVzYyBzeXNzY2FuKQogCiAJaWYgKHN5c3NjYW4tPmlyZWwpCiAJewotCQlpZiAo aW5kZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwg c3lzc2Nhbi0+c2xvdCkpCisJCWlmICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc3lzc2Nhbi0+ aXNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJIHN5c3NjYW4tPnNsb3QpKQog CQl7CiAJCQlib29sCQlzaG91bGRGcmVlOwogCkBAIC03MDcsNyArNzA5LDcgQEAgc3lzdGFibGVf YmVnaW5zY2FuX29yZGVyZWQoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJZWxvZyhFUlJPUiwg ImNvbHVtbiBpcyBub3QgaW4gaW5kZXgiKTsKIAl9CiAKLQlzeXNzY2FuLT5pc2NhbiA9IGluZGV4 X2JlZ2luc2NhbihoZWFwUmVsYXRpb24sIGluZGV4UmVsYXRpb24sCisJc3lzc2Nhbi0+aXNjYW4g PSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0aW9uLCBpbmRleFJlbGF0aW9uLCBOVUxMLAogCQkJ CQkJCQkJIHNuYXBzaG90LCBOVUxMLCBua2V5cywgMCk7CiAJaW5kZXhfcmVzY2FuKHN5c3NjYW4t PmlzY2FuLCBpZHhrZXksIG5rZXlzLCBOVUxMLCAwKTsKIAlzeXNzY2FuLT5zY2FuID0gTlVMTDsK QEAgLTczNCw3ICs3MzYsNyBAQCBzeXN0YWJsZV9nZXRuZXh0X29yZGVyZWQoU3lzU2NhbkRlc2Mg c3lzc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiAJSGVhcFR1cGxlCWh0dXAgPSBOVUxM OwogCiAJQXNzZXJ0KHN5c3NjYW4tPmlyZWwpOwotCWlmIChpbmRleF9nZXRuZXh0X3Nsb3Qoc3lz c2Nhbi0+aXNjYW4sIGRpcmVjdGlvbiwgc3lzc2Nhbi0+c2xvdCkpCisJaWYgKHRhYmxlX2luZGV4 X2dldG5leHRfc2xvdChzeXNzY2FuLT5pc2NhbiwgZGlyZWN0aW9uLCBzeXNzY2FuLT5zbG90KSkK IAkJaHR1cCA9IEV4ZWNGZXRjaFNsb3RIZWFwVHVwbGUoc3lzc2Nhbi0+c2xvdCwgZmFsc2UsIE5V TEwpOwogCiAJLyogU2VlIG5vdGVzIGluIHN5c3RhYmxlX2dldG5leHQgKi8KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aW5kZXgvaW5kZXhhbS5jCmluZGV4IDA0OTJkOTJkMi4uOWU0ZWQ1YjU1IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9pbmRleC9pbmRleGFtLmMKQEAgLTI0LDkgKzI0LDcgQEAKICAqCQlpbmRleF9wYXJhbGxlbHNj YW5faW5pdGlhbGl6ZSAtIGluaXRpYWxpemUgcGFyYWxsZWwgc2NhbgogICoJCWluZGV4X3BhcmFs bGVscmVzY2FuICAtIChyZSlzdGFydCBhIHBhcmFsbGVsIHNjYW4gb2YgYW4gaW5kZXgKICAqCQlp bmRleF9iZWdpbnNjYW5fcGFyYWxsZWwgLSBqb2luIHBhcmFsbGVsIGluZGV4IHNjYW4KLSAqCQlp bmRleF9nZXRuZXh0X3RpZAktIGdldCB0aGUgbmV4dCBUSUQgZnJvbSBhIHNjYW4KLSAqCQlpbmRl eF9mZXRjaF9oZWFwCQktIGdldCB0aGUgc2NhbidzIG5leHQgaGVhcCB0dXBsZQotICoJCWluZGV4 X2dldG5leHRfc2xvdAktIGdldCB0aGUgbmV4dCB0dXBsZSBmcm9tIGEgc2NhbgorICoJCWluZGV4 X2dldG5leHRfdGlkCS0gYW1nZXR0dXBsZSB0YWJsZSBBTSBoZWxwZXIgcm91dGluZQogICoJCWlu ZGV4X2dldGJpdG1hcCAtIGdldCBhbGwgdHVwbGVzIGZyb20gYSBzY2FuCiAgKgkJaW5kZXhfYnVs a19kZWxldGUJLSBidWxrIGRlbGV0aW9uIG9mIGluZGV4IHR1cGxlcwogICoJCWluZGV4X3ZhY3V1 bV9jbGVhbnVwCS0gcG9zdC1kZWxldGlvbiBjbGVhbnVwIG9mIGFuIGluZGV4CkBAIC0yNTUsNiAr MjUzLDcgQEAgaW5kZXhfaW5zZXJ0X2NsZWFudXAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIElu ZGV4U2NhbkRlc2MKIGluZGV4X2JlZ2luc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJ UmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKKwkJCQlUdXBsZVRhYmxlU2xvdCAqaW9zX3RhYmxlc2xv dCwKIAkJCQlTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24g Kmluc3RydW1lbnQsCiAJCQkJaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQpAQCAtMjgzLDggKzI4 MiwxMSBAQCBpbmRleF9iZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCXNjYW4tPnhz X3NuYXBzaG90ID0gc25hcHNob3Q7CiAJc2Nhbi0+aW5zdHJ1bWVudCA9IGluc3RydW1lbnQ7CiAK KwlpZiAoaW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCkKKwkJaW5k ZXhfYmF0Y2hfaW5pdChzY2FuKTsKKwogCS8qIHByZXBhcmUgdG8gZmV0Y2ggaW5kZXggbWF0Y2hl cyBmcm9tIHRhYmxlICovCi0Jc2Nhbi0+eHNfaGVhcGZldGNoID0gdGFibGVfaW5kZXhfZmV0Y2hf YmVnaW4oaGVhcFJlbGF0aW9uKTsKKwlzY2FuLT54c19oZWFwZmV0Y2ggPSB0YWJsZV9pbmRleF9m ZXRjaF9iZWdpbihoZWFwUmVsYXRpb24sIGlvc190YWJsZXNsb3QpOwogCiAJcmV0dXJuIHNjYW47 CiB9CkBAIC0zODAsNiArMzgyLDggQEAgaW5kZXhfcmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwK IAlzY2FuLT5raWxsX3ByaW9yX3R1cGxlID0gZmFsc2U7IC8qIGZvciBzYWZldHkgKi8KIAlzY2Fu LT54c19oZWFwX2NvbnRpbnVlID0gZmFsc2U7CiAKKwlpbmRleF9iYXRjaF9yZXNldChzY2FuLCB0 cnVlKTsKKwogCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXJlc2NhbihzY2FuLCBr ZXlzLCBua2V5cywKIAkJCQkJCQkJCQkJb3JkZXJieXMsIG5vcmRlcmJ5cyk7CiB9CkBAIC0zOTQs NiArMzk4LDkgQEAgaW5kZXhfZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAJU0NBTl9DSEVD S1M7CiAJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1lbmRzY2FuKTsKIAorCS8qIENsZWFudXAgYmF0 Y2hpbmcsIHNvIHRoYXQgdGhlIEFNIGNhbiByZWxlYXNlIHBpbnMgYW5kIHNvIG9uLiAqLworCWlu ZGV4X2JhdGNoX2VuZChzY2FuKTsKKwogCS8qIFJlbGVhc2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZl ciBwaW5zKSBmcm9tIHRhYmxlIGFjY2Vzc2VzICovCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkK IAl7CkBAIC00MjIsOSArNDI5LDEwIEBAIHZvaWQKIGluZGV4X21hcmtwb3MoSW5kZXhTY2FuRGVz YyBzY2FuKQogewogCVNDQU5fQ0hFQ0tTOwotCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtbWFya3Bv cyk7CisJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1wb3NyZXNldCk7CiAKLQlzY2FuLT5pbmRleFJl bGF0aW9uLT5yZF9pbmRhbS0+YW1tYXJrcG9zKHNjYW4pOworCS8qIE9ubHkgYW1nZXRiYXRjaCBp bmRleCBBTXMgc3VwcG9ydCBtYXJrIGFuZCByZXN0b3JlICovCisJcmV0dXJuIGluZGV4X2JhdGNo X21hcmtfcG9zKHNjYW4pOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC00NDgsNyArNDU2 LDggQEAgaW5kZXhfcmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogCUFzc2VydChJc01WQ0NT bmFwc2hvdChzY2FuLT54c19zbmFwc2hvdCkpOwogCiAJU0NBTl9DSEVDS1M7Ci0JQ0hFQ0tfU0NB Tl9QUk9DRURVUkUoYW1yZXN0cnBvcyk7CisJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1nZXRiYXRj aCk7CisJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1wb3NyZXNldCk7CiAKIAkvKiByZWxlYXNlIHJl c291cmNlcyAobGlrZSBidWZmZXIgcGlucykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLwogCWlmIChz Y2FuLT54c19oZWFwZmV0Y2gpCkBAIC00NTcsNyArNDY2LDcgQEAgaW5kZXhfcmVzdHJwb3MoSW5k ZXhTY2FuRGVzYyBzY2FuKQogCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBmYWxzZTsgLyogZm9y IHNhZmV0eSAqLwogCXNjYW4tPnhzX2hlYXBfY29udGludWUgPSBmYWxzZTsKIAotCXNjYW4tPmlu ZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXJlc3RycG9zKHNjYW4pOworCWluZGV4X2JhdGNoX3Jl c3RvcmVfcG9zKHNjYW4pOwogfQogCiAvKgpAQCAtNTc5LDYgKzU4OCw4IEBAIGluZGV4X3BhcmFs bGVscmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQog CQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2FuLT54c19oZWFwZmV0Y2gpOwogCisJaW5kZXhf YmF0Y2hfcmVzZXQoc2NhbiwgdHJ1ZSk7CisKIAkvKiBhbXBhcmFsbGVscmVzY2FuIGlzIG9wdGlv bmFsOyBhc3N1bWUgbm8tb3AgaWYgbm90IHByb3ZpZGVkIGJ5IEFNICovCiAJaWYgKHNjYW4tPmlu ZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBhcmFsbGVscmVzY2FuICE9IE5VTEwpCiAJCXNjYW4t PmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBhcmFsbGVscmVzY2FuKHNjYW4pOwpAQCAtNTkx LDYgKzYwMiw3IEBAIGluZGV4X3BhcmFsbGVscmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKICAq LwogSW5kZXhTY2FuRGVzYwogaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhlYXBy ZWwsIFJlbGF0aW9uIGluZGV4cmVsLAorCQkJCQkJIFR1cGxlVGFibGVTbG90ICppb3NfdGFibGVz bG90LAogCQkJCQkJIEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKIAkJCQkJ CSBpbnQgbmtleXMsIGludCBub3JkZXJieXMsCiAJCQkJCQkgUGFyYWxsZWxJbmRleFNjYW5EZXNj IHBzY2FuKQpAQCAtNjE0LDE3ICs2MjYsMjQgQEAgaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJl bGF0aW9uIGhlYXByZWwsIFJlbGF0aW9uIGluZGV4cmVsLAogCXNjYW4tPnhzX3NuYXBzaG90ID0g c25hcHNob3Q7CiAJc2Nhbi0+aW5zdHJ1bWVudCA9IGluc3RydW1lbnQ7CiAKKwlpZiAoaW5kZXhy ZWwtPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpCisJCWluZGV4X2JhdGNoX2luaXQoc2Nh bik7CisKIAkvKiBwcmVwYXJlIHRvIGZldGNoIGluZGV4IG1hdGNoZXMgZnJvbSB0YWJsZSAqLwot CXNjYW4tPnhzX2hlYXBmZXRjaCA9IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKGhlYXByZWwpOwor CXNjYW4tPnhzX2hlYXBmZXRjaCA9IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKGhlYXByZWwsIGlv c190YWJsZXNsb3QpOwogCiAJcmV0dXJuIHNjYW47CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0K LSAqIGluZGV4X2dldG5leHRfdGlkIC0gZ2V0IHRoZSBuZXh0IFRJRCBmcm9tIGEgc2NhbgorICog aW5kZXhfZ2V0bmV4dF90aWQgLSBhbWdldHR1cGxlIGludGVyZmFjZQogICoKICAqIFRoZSByZXN1 bHQgaXMgdGhlIG5leHQgVElEIHNhdGlzZnlpbmcgdGhlIHNjYW4ga2V5cywKICAqIG9yIE5VTEwg aWYgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMgZXhpc3QuCisgKgorICogVGhpcyBzaG91bGQgb25s eSBiZSBjYWxsZWQgYnkgdGFibGUgQU0ncyBpbmRleF9nZXRuZXh0X3Nsb3QgaW1wbGVtZW50YXRp b24sCisgKiBhbmQgb25seSBnaXZlbiBhbiBpbmRleCBBTSB0aGF0IHN1cHBvcnRzIHRoZSBzaW5n bGUtdHVwbGUgYW1nZXR0dXBsZQorICogaW50ZXJmYWNlLgogICogLS0tLS0tLS0tLS0tLS0tLQog ICovCiBJdGVtUG9pbnRlcgpAQCAtNjY3LDk3ICs2ODYsNiBAQCBpbmRleF9nZXRuZXh0X3RpZChJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQogCXJldHVybiAmc2Nh bi0+eHNfaGVhcHRpZDsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLQotICoJCWluZGV4X2ZldGNo X2hlYXAgLSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhlYXAgdHVwbGUKLSAqCi0gKiBUaGUgcmVzdWx0 IGlzIGEgdmlzaWJsZSBoZWFwIHR1cGxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5kZXggVElEIG1v c3QKLSAqIHJlY2VudGx5IGZldGNoZWQgYnkgaW5kZXhfZ2V0bmV4dF90aWQsIG9yIE5VTEwgaWYg bm8gbW9yZSBtYXRjaGluZyB0dXBsZXMKLSAqIGV4aXN0LiAgKFRoZXJlIGNhbiBiZSBtb3JlIHRo YW4gb25lIG1hdGNoaW5nIHR1cGxlIGJlY2F1c2Ugb2YgSE9UIGNoYWlucywKLSAqIGFsdGhvdWdo IHdoZW4gdXNpbmcgYW4gTVZDQyBzbmFwc2hvdCBpdCBzaG91bGQgYmUgaW1wb3NzaWJsZSBmb3Ig bW9yZSB0aGFuCi0gKiBvbmUgc3VjaCB0dXBsZSB0byBleGlzdC4pCi0gKgotICogT24gc3VjY2Vz cywgdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBoZWFwIHR1cCBpcyBwaW5uZWQgKHRoZSBwaW4g d2lsbCBiZQotICogZHJvcHBlZCBpbiBhIGZ1dHVyZSBpbmRleF9nZXRuZXh0X3RpZCwgaW5kZXhf ZmV0Y2hfaGVhcCBvciBpbmRleF9lbmRzY2FuCi0gKiBjYWxsKS4KLSAqCi0gKiBOb3RlOiBjYWxs ZXIgbXVzdCBjaGVjayBzY2FuLT54c19yZWNoZWNrLCBhbmQgcGVyZm9ybSByZWNoZWNraW5nIG9m IHRoZQotICogc2NhbiBrZXlzIGlmIHJlcXVpcmVkLiAgV2UgZG8gbm90IGRvIHRoYXQgaGVyZSBi ZWNhdXNlIHdlIGRvbid0IGhhdmUKLSAqIGVub3VnaCBpbmZvcm1hdGlvbiB0byBkbyBpdCBlZmZp Y2llbnRseSBpbiB0aGUgZ2VuZXJhbCBjYXNlLgotICogLS0tLS0tLS0tLS0tLS0tLQotICovCi1i b29sCi1pbmRleF9mZXRjaF9oZWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVHVwbGVUYWJsZVNsb3Qg KnNsb3QpCi17Ci0JYm9vbAkJYWxsX2RlYWQgPSBmYWxzZTsKLQlib29sCQlmb3VuZDsKLQotCWZv dW5kID0gdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoc2Nhbi0+eHNfaGVhcGZldGNoLCAmc2Nhbi0+ eHNfaGVhcHRpZCwKLQkJCQkJCQkJCXNjYW4tPnhzX3NuYXBzaG90LCBzbG90LAotCQkJCQkJCQkJ JnNjYW4tPnhzX2hlYXBfY29udGludWUsICZhbGxfZGVhZCk7Ci0KLQlpZiAoZm91bmQpCi0JCXBn c3RhdF9jb3VudF9oZWFwX2ZldGNoKHNjYW4tPmluZGV4UmVsYXRpb24pOwotCi0JLyoKLQkgKiBJ ZiB3ZSBzY2FubmVkIGEgd2hvbGUgSE9UIGNoYWluIGFuZCBmb3VuZCBvbmx5IGRlYWQgdHVwbGVz LCB0ZWxsIGluZGV4Ci0JICogQU0gdG8ga2lsbCBpdHMgZW50cnkgZm9yIHRoYXQgVElEICh0aGlz IHdpbGwgdGFrZSBlZmZlY3QgaW4gdGhlIG5leHQKLQkgKiBhbWdldHR1cGxlIGNhbGwsIGluIGlu ZGV4X2dldG5leHRfdGlkKS4gIFdlIGRvIG5vdCBkbyB0aGlzIHdoZW4gaW4KLQkgKiByZWNvdmVy eSBiZWNhdXNlIGl0IG1heSB2aW9sYXRlIE1WQ0MgdG8gZG8gc28uICBTZWUgY29tbWVudHMgaW4K LQkgKiBSZWxhdGlvbkdldEluZGV4U2NhbigpLgotCSAqLwotCWlmICghc2Nhbi0+eGFjdFN0YXJ0 ZWRJblJlY292ZXJ5KQotCQlzY2FuLT5raWxsX3ByaW9yX3R1cGxlID0gYWxsX2RlYWQ7Ci0KLQly ZXR1cm4gZm91bmQ7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0KLSAqCQlpbmRleF9nZXRuZXh0 X3Nsb3QgLSBnZXQgdGhlIG5leHQgdHVwbGUgZnJvbSBhIHNjYW4KLSAqCi0gKiBUaGUgcmVzdWx0 IGlzIHRydWUgaWYgYSB0dXBsZSBzYXRpc2Z5aW5nIHRoZSBzY2FuIGtleXMgYW5kIHRoZSBzbmFw c2hvdCB3YXMKLSAqIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UuICBUaGUgdHVwbGUgaXMgc3RvcmVk IGluIHRoZSBzcGVjaWZpZWQgc2xvdC4KLSAqCi0gKiBPbiBzdWNjZXNzLCByZXNvdXJjZXMgKGxp a2UgYnVmZmVyIHBpbnMpIGFyZSBsaWtlbHkgdG8gYmUgaGVsZCwgYW5kIHdpbGwgYmUKLSAqIGRy b3BwZWQgYnkgYSBmdXR1cmUgaW5kZXhfZ2V0bmV4dF90aWQsIGluZGV4X2ZldGNoX2hlYXAgb3Ig aW5kZXhfZW5kc2NhbgotICogY2FsbCkuCi0gKgotICogTm90ZTogY2FsbGVyIG11c3QgY2hlY2sg c2Nhbi0+eHNfcmVjaGVjaywgYW5kIHBlcmZvcm0gcmVjaGVja2luZyBvZiB0aGUKLSAqIHNjYW4g a2V5cyBpZiByZXF1aXJlZC4gIFdlIGRvIG5vdCBkbyB0aGF0IGhlcmUgYmVjYXVzZSB3ZSBkb24n dCBoYXZlCi0gKiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZG8gaXQgZWZmaWNpZW50bHkgaW4gdGhl IGdlbmVyYWwgY2FzZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0KLSAqLwotYm9vbAotaW5kZXhfZ2V0 bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFR1 cGxlVGFibGVTbG90ICpzbG90KQotewotCWZvciAoOzspCi0JewotCQlpZiAoIXNjYW4tPnhzX2hl YXBfY29udGludWUpCi0JCXsKLQkJCUl0ZW1Qb2ludGVyIHRpZDsKLQotCQkJLyogVGltZSB0byBm ZXRjaCB0aGUgbmV4dCBUSUQgZnJvbSB0aGUgaW5kZXggKi8KLQkJCXRpZCA9IGluZGV4X2dldG5l eHRfdGlkKHNjYW4sIGRpcmVjdGlvbik7Ci0KLQkJCS8qIElmIHdlJ3JlIG91dCBvZiBpbmRleCBl bnRyaWVzLCB3ZSdyZSBkb25lICovCi0JCQlpZiAodGlkID09IE5VTEwpCi0JCQkJYnJlYWs7Ci0K LQkJCUFzc2VydChJdGVtUG9pbnRlckVxdWFscyh0aWQsICZzY2FuLT54c19oZWFwdGlkKSk7Ci0J CX0KLQotCQkvKgotCQkgKiBGZXRjaCB0aGUgbmV4dCAob3Igb25seSkgdmlzaWJsZSBoZWFwIHR1 cGxlIGZvciB0aGlzIGluZGV4IGVudHJ5LgotCQkgKiBJZiB3ZSBkb24ndCBmaW5kIGFueXRoaW5n LCBsb29wIGFyb3VuZCBhbmQgZ3JhYiB0aGUgbmV4dCBUSUQgZnJvbQotCQkgKiB0aGUgaW5kZXgu Ci0JCSAqLwotCQlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKCZzY2FuLT54c19oZWFwdGlkKSk7 Ci0JCWlmIChpbmRleF9mZXRjaF9oZWFwKHNjYW4sIHNsb3QpKQotCQkJcmV0dXJuIHRydWU7Ci0J fQotCi0JcmV0dXJuIGZhbHNlOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJaW5kZXhf Z2V0Yml0bWFwIC0gZ2V0IGFsbCB0dXBsZXMgYXQgb25jZSBmcm9tIGFuIGluZGV4IHNjYW4KICAq CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAuLmUzMGNjMTc5YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKQEAgLTAsMCArMSw2NDAgQEAKKy8qLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICoKKyAqIGluZGV4YmF0Y2guYworICoJICBhbWdldGJhdGNoIGltcGxlbWVudGF0 aW9uIHJvdXRpbmVzCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjUsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAq CisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhi YXRjaC5jCisgKgorICogSU5URVJGQUNFIFJPVVRJTkVTCisgKgkJaW5kZXhfYmF0Y2hfaW5pdCAt IEluaXRpYWxpemUgZmllbGRzIG5lZWRlZCBieSBiYXRjaGluZworICoJCWluZGV4X2JhdGNoX3Jl c2V0IC0gcmVzZXQgYSBiYXRjaAorICoJCWluZGV4X2JhdGNoX21hcmtfcG9zIC0gc2V0IGEgbWFy ayBmcm9tIGN1cnJlbnQgYmF0Y2ggcG9zaXRpb24KKyAqCQlpbmRleF9iYXRjaF9yZXN0b3JlX3Bv cyAtIHJlc3RvcmUgbWFyayB0byBjdXJyZW50IGJhdGNoIHBvc2l0aW9uCisgKgkJaW5kZXhfYmF0 Y2hfa2lsbF9pdGVtIC0gcmVjb3JkIGRlYWQgaW5kZXggdHVwbGUKKyAqCQlpbmRleF9iYXRjaF9l bmQgLSBlbmQgYmF0Y2gKKyAqCisgKgkJaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayAtIHVubG9j ayBiYXRjaCdzIGJ1ZmZlciBsb2NrCisgKgkJaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jIC0gYWxs b2NhdGUgYW5vdGhlciBiYXRjaAorICoJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlIC0gcmVs ZWFzZSBhbGxvY2F0ZWQgYmF0Y2gKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5j bHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUg ImFjY2Vzcy90YWJsZWFtLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL2Nvc3QuaCIKKyNpbmNsdWRl ICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW1kZWJ1Zy5oIgorCitzdGF0aWMgdm9pZCBi YXRjaF9kZWJ1Z19wcmludF9iYXRjaGVzKGNvbnN0IGNoYXIgKmxhYmVsLCBJbmRleFNjYW5EZXNj IHNjYW4pOworCisvKgorICogaW5kZXhfYmF0Y2hfaW5pdAorICoJCUluaXRpYWxpemUgdmFyaW91 cyBmaWVsZHMgYW5kIGFycmF5cyBuZWVkZWQgYnkgYmF0Y2hpbmcuCisgKgorICogU2V0cyB1cCB0 aGUgYmF0Y2ggcXVldWUgc3RydWN0dXJlIGFuZCBpdHMgaW5pdGlhbCByZWFkIHBvc2l0aW9uLiAg QWxzbworICogZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzY2FuIHdpbGwgZWFnZXJseSBkcm9wIGlu ZGV4IHBhZ2UgcGlucy4gIEl0IGlzbid0CisgKiBzYWZlIHRvIGRyb3AgaW5kZXggcGFnZSBwaW5z IGVhZ2VybHkgd2hlbiBkb2luZyBzbyByaXNrcyBicmVha2luZyBhbgorICogYXNzdW1wdGlvbiAo YWJvdXQgdGFibGUgVElEIHJlY3ljbGluZykgdGhhdCBhbWZyZWViYXRjaCByb3V0aW5lcyBtYWtl IHdoZW4KKyAqIHNldHRpbmcgTFBfREVBRCBiaXRzIGZvciBrbm93bi1kZWFkIGluZGV4IHR1cGxl cy4gIFNwZWNpZmljYWxseSwgYnVmZmVyCisgKiBwaW5zIG9uIGluZGV4IHBhZ2VzIHNlcnZlIGFz IGludGVybG9ja3MgcHJldmVudGluZyBWQUNVVU0gZnJvbSByZWN5Y2xpbmcKKyAqIFRJRHMgb24g dGhvc2UgcGFnZXMsIHByb3RlY3RpbmcgdGhlIHRhYmxlIEFNIGZyb20gY29uZnVzaW5nIGEgcmVj eWNsZWQgVElECisgKiB3aXRoIHRoZSBvcmlnaW5hbCByb3cgaXQgbWVhbnQgdG8gcmVmZXJlbmNl LgorICovCit2b2lkCitpbmRleF9iYXRjaF9pbml0KEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwkv KiBCb3RoIGFtZ2V0YmF0Y2ggYW5kIGFtZnJlZWJhdGNoIG11c3QgYmUgcHJlc2VudCB0b2dldGhl ciAqLworCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAh PSBOVUxMKTsKKwlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZnJlZWJh dGNoICE9IE5VTEwpOworCisJc2Nhbi0+YmF0Y2hxdWV1ZSA9IHBhbGxvYyhzaXplb2YoQmF0Y2hR dWV1ZSkpOworCisJLyoKKwkgKiBXZSBwcmVmZXIgdG8gZWFnZXJseSBkcm9wIGxlYWYgcGFnZSBw aW5zIGJlZm9yZSBhbWdldGJhdGNoIHJldHVybnMuCisJICogVGhpcyBhdm9pZHMgbWFraW5nIFZB Q1VVTSB3YWl0IHRvIGFjcXVpcmUgYSBjbGVhbnVwIGxvY2sgb24gdGhlIHBhZ2UuCisJICoKKwkg KiBXZSBjYW5ub3Qgc2FmZWx5IGRyb3AgbGVhZiBwYWdlIHBpbnMgZHVyaW5nIGluZGV4LW9ubHkg c2NhbnMgZHVlIHRvIGEKKwkgKiByYWNlIGNvbmRpdGlvbiBpbnZvbHZpbmcgVkFDVVVNIHNldHRp bmcgcGFnZXMgYWxsLXZpc2libGUgaW4gdGhlIFZNLgorCSAqIEl0J3MgYWxzbyB1bnNhZmUgZm9y IHBsYWluIGluZGV4IHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1WQ0Mgc25hcHNob3QuCisJICoKKwkg KiBXaGVuIHdlIGRyb3AgcGlucyBlYWdlcmx5LCB0aGUgbWVjaGFuaXNtIHRoYXQgbWFya3MgaW5k ZXggdHVwbGVzIGFzCisJICogTFBfREVBRCBoYXMgdG8gZGVhbCB3aXRoIGNvbmN1cnJlbnQgVElE IHJlY3ljbGluZyByYWNlcy4gIFRoZSBzY2hlbWUKKwkgKiB1c2VkIHRvIGRldGVjdCB1bnNhZmUg VElEIHJlY3ljbGluZyB3b24ndCB3b3JrIHdoZW4gc2Nhbm5pbmcgdW5sb2dnZWQKKwkgKiByZWxh dGlvbnMgKHNpbmNlIGl0IGludm9sdmVzIHNhdmluZyBhbiBhZmZlY3RlZCBwYWdlJ3MgTFNOKS4g IE9wdCBvdXQKKwkgKiBvZiBlYWdlciBwaW4gZHJvcHBpbmcgZHVyaW5nIHVubG9nZ2VkIHJlbGF0 aW9uIHNjYW5zIGZvciBub3cuCisJICovCisJc2Nhbi0+YmF0Y2hxdWV1ZS0+ZHJvcFBpbiA9CisJ CSghc2Nhbi0+eHNfd2FudF9pdHVwICYmIElzTVZDQ1NuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90 KSAmJgorCQkgUmVsYXRpb25OZWVkc1dBTChzY2FuLT5pbmRleFJlbGF0aW9uKSk7CisJc2Nhbi0+ YmF0Y2hxdWV1ZS0+ZmluaXNoZWQgPSBmYWxzZTsKKwlzY2FuLT5iYXRjaHF1ZXVlLT5kaXJlY3Rp b24gPSBOb01vdmVtZW50U2NhbkRpcmVjdGlvbjsKKworCS8qIHBvc2l0aW9ucyBpbiB0aGUgcXVl dWUgb2YgYmF0Y2hlcyAqLworCWJhdGNoX3Jlc2V0X3Bvcygmc2Nhbi0+YmF0Y2hxdWV1ZS0+cmVh ZFBvcyk7CisJYmF0Y2hfcmVzZXRfcG9zKCZzY2FuLT5iYXRjaHF1ZXVlLT5tYXJrUG9zKTsKKwor CXNjYW4tPmJhdGNocXVldWUtPm1hcmtCYXRjaCA9IE5VTEw7CisJc2Nhbi0+YmF0Y2hxdWV1ZS0+ aGVhZEJhdGNoID0gMDsJLyogaW5pdGlhbCBoZWFkIGJhdGNoICovCisJc2Nhbi0+YmF0Y2hxdWV1 ZS0+bmV4dEJhdGNoID0gMDsJLyogaW5pdGlhbCBiYXRjaCBzdGFydHMgZW1wdHkgKi8KKwltZW1z ZXQoJnNjYW4tPmJhdGNocXVldWUtPmNhY2hlLCAwLCBzaXplb2Yoc2Nhbi0+YmF0Y2hxdWV1ZS0+ Y2FjaGUpKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJCWJhdGNoX2dldG5leHQgLSBn ZXQgdGhlIG5leHQgYmF0Y2ggb2YgVElEcyBmcm9tIGEgc2NhbgorICoKKyAqIENhbGxlZCBieSB0 YWJsZSBBTSdzIG9yZGVyZWQgaW5kZXggc2NhbiBpbXBsZW1lbnRhdGlvbiB3aGVuIGl0IG5lZWRz IHRvCisgKiBsb2FkIHRoZSBuZXh0IGJhdGNoIG9mIGluZGV4IGVudHJpZXMgdG8gcHJvY2VzcyBp biB0aGUgZ2l2ZW4gZGlyZWN0aW9uLgorICoKKyAqIFRoZSB0YWJsZSBBTSBjb250cm9scyB0aGUg b3ZlcmFsbCBwcm9ncmVzcyBvZiB0aGUgc2NhbiwgZGVjaWRpbmcgd2hlbiB0bworICogcmVxdWVz dCBuZXcgYmF0Y2hlcy4gIFRoaXMgZGl2aXNpb24gb2YgbGFib3IgZ2l2ZXMgdGhlIHRhYmxlIEFN IHRoZSBhYmlsaXR5CisgKiB0byByZW9yZGVyIGZldGNoZXMgb2YgbmVhcmJ5IHRhYmxlIHR1cGxl cyAoZnJvbSB0aGUgc2FtZSBiYXRjaCwgb3IgZnJvbQorICogYWRqYWNlbnQgYmF0Y2hlcykgYmFz ZWQgb24gaXRzIG93biBjb25zaWRlcmF0aW9ucy4gIEltcG9ydGFudGx5LCB0YWJsZSBBTXMKKyAq IGFyZSBfbm90XyByZXF1aXJlZCB0byBmcmVlIGEgYmF0Y2ggYmVmb3JlIGxvYWRpbmcgdGhlIG5l eHQgYmF0Y2ggZHVyaW5nIGFuCisgKiBpbmRleCBzY2FuIG9mIGFuIGluZGV4IHRoYXQgdXNlcyB0 aGUgYW1nZXRiYXRjaC9hbWZyZWViYXRjaCBpbnRlcmZhY2UuCisgKiAoVGhpcyBpc24ndCBwb3Nz aWJsZSB3aXRoIHRoZSBzaW5nbGUtdHVwbGUgYW1nZXR0dXBsZSBpbnRlcmZhY2UsIHdoaWNoIGdp dmVzCisgKiB0aGUgaW5kZXggQU0gZGlyZWN0IGNvbnRyb2wgb3ZlciB0aGUgcHJvZ3Jlc3Mgb2Yg dGhlIGluZGV4IHNjYW4uICBhbWdldHR1cGxlCisgKiBpbmRleCBzY2FucyBwZXJmb3JtIHRoZSB3 b3JrIHRoYXQgd2UgcGVyZm9ybSBpbiBiYXRjaF9mcmVlIGFzIHRoZSBzY2FuCisgKiBwcm9ncmVz c2VzLCBhbmQgd2l0aG91dCBub3RpZnlpbmcgdGhlIHRhYmxlIEFNLCB3aGljaCBtYWtlcyBpdCBp bXBvc3NpYmxlCisgKiB0byBzYWZlbHkgcmVvcmRlciB3b3JrIGluIHRoZSB3YXkgdGhhdCBvdXIg Y2FsbGVycyBjYW4uKQorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB3ZSBtYW5hZ2VkIHRvIHJlYWQg YSBiYXRjaCBvZiBUSURzLCBvciBmYWxzZSBpZiB0aGVyZSBhcmUKKyAqIG5vIG1vcmUgYmF0Y2hl cyBpbiB0aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24uCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8K K2Jvb2wKK2JhdGNoX2dldG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp cmVjdGlvbikKK3sKKwlCYXRjaFF1ZXVlICpiYXRjaHF1ZXVlID0gc2Nhbi0+YmF0Y2hxdWV1ZTsK KwlCYXRjaEluZGV4U2NhbiBwcmlvcmJhdGNoID0gTlVMTCwKKwkJCQliYXRjaCA9IE5VTEw7CisK KwkvKiBYWFg6IHdlIHNob3VsZCBhc3NlcnQgdGhhdCBhIHNuYXBzaG90IGlzIHB1c2hlZCBvciBy ZWdpc3RlcmVkICovCisJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKFJlY2VudFhtaW4pKTsK KworCS8qIERpZCB3ZSBhbHJlYWR5IHJlYWQgdGhlIGxhc3QgYmF0Y2ggZm9yIHRoaXMgc2Nhbj8g Ki8KKwlpZiAoYmF0Y2hxdWV1ZS0+ZmluaXNoZWQpCisJCXJldHVybiBmYWxzZTsKKworCUFzc2Vy dCghSU5ERVhfU0NBTl9CQVRDSF9GVUxMKHNjYW4pKTsKKworCWJhdGNoX2RlYnVnX3ByaW50X2Jh dGNoZXMoImJhdGNoX2dldG5leHQgLyBzdGFydCIsIHNjYW4pOworCisJLyoKKwkgKiBHZXQgdGhl IHByZXZpb3VzbHkgcmV0dXJuZWQgYmF0Y2ggdG8gcGFzcyB0byBhbWdldGJhdGNoLiAgVGhlIGlu ZGV4IEFNCisJICogdXNlcyB0aGlzIHRvIGRldGVybWluZSB3aGljaCBpbmRleCBwYWdlIHRvIHJl YWQgbmV4dCwgdHlwaWNhbGx5IGJ5CisJICogZm9sbG93aW5nIHBhZ2UgbGlua3MgZm9yd2FyZCBv ciBiYWNrd2FyZC4KKwkgKi8KKwlpZiAoYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoIDwgYmF0Y2hxdWV1 ZS0+bmV4dEJhdGNoKQorCQlwcmlvcmJhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBiYXRj aHF1ZXVlLT5uZXh0QmF0Y2ggLSAxKTsKKworCWJhdGNoID0gc2Nhbi0+aW5kZXhSZWxhdGlvbi0+ cmRfaW5kYW0tPmFtZ2V0YmF0Y2goc2NhbiwgcHJpb3JiYXRjaCwKKwkJCQkJCQkJCQkJCQkgIGRp cmVjdGlvbik7CisJaWYgKGJhdGNoICE9IE5VTEwpCisJeworCQkvKiBXZSBnb3QgdGhlIGJhdGNo IGZyb20gdGhlIEFNIC0tIGFkZCBpdCB0byBvdXIgcXVldWUgKi8KKwkJaW50CQkJYmF0Y2hJbmRl eCA9IGJhdGNocXVldWUtPm5leHRCYXRjaDsKKworCQlJTkRFWF9TQ0FOX0JBVENIKHNjYW4sIGJh dGNoSW5kZXgpID0gYmF0Y2g7CisKKwkJYmF0Y2hxdWV1ZS0+bmV4dEJhdGNoKys7CisKKwkJREVC VUdfTE9HKCJiYXRjaF9nZXRuZXh0IGhlYWRCYXRjaCAlZCBuZXh0QmF0Y2ggJWQgYmF0Y2ggJXAi LAorCQkJCSAgYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoLCBiYXRjaHF1ZXVlLT5uZXh0QmF0Y2gsIGJh dGNoKTsKKwl9CisJZWxzZQorCQliYXRjaHF1ZXVlLT5maW5pc2hlZCA9IHRydWU7CisKKwliYXRj aF9hc3NlcnRfYmF0Y2hlc192YWxpZChzY2FuKTsKKworCWJhdGNoX2RlYnVnX3ByaW50X2JhdGNo ZXMoImJhdGNoX2dldG5leHQgLyBlbmQiLCBzY2FuKTsKKworCXJldHVybiAoYmF0Y2ggIT0gTlVM TCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQlpbmRleF9iYXRjaF9yZXNldCAtIHJl c2V0IGJhdGNoIHF1ZXVlIGFuZCByZWFkIHBvc2l0aW9uCisgKgorICogUmVzZXRzIGFsbCBsb2Fk ZWQgYmF0Y2hlcyBpbiB0aGUgcXVldWUsIGFuZCByZXNldHMgdGhlIHJlYWQgcG9zaXRpb24gdG8g dGhlCisgKiBpbml0aWFsIHN0YXRlIChvciBqdXN0IGluaXRpYWxpemUgcXVldWUgc3RhdGUpLiAg V2hlbiAnY29tcGxldGUnIGlzIHRydWUsCisgKiBhbHNvIGZyZWVzIHRoZSBzY2FuJ3MgbWFya2Vk IGJhdGNoIChpZiBhbnkpLCB3aGljaCBpcyB1c2VmdWwgd2hlbiBlbmRpbmcgYW4KKyAqIGFtZ2V0 YmF0Y2gtYmFzZWQgaW5kZXggc2Nhbi4KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZAor aW5kZXhfYmF0Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBib29sIGNvbXBsZXRlKQorewor CUJhdGNoUXVldWUgKmJhdGNocXVldWUgPSBzY2FuLT5iYXRjaHF1ZXVlOworCisJLyogYmFpbCBv dXQgaWYgYmF0Y2hpbmcgbm90IGVuYWJsZWQgKi8KKwlpZiAoIWJhdGNocXVldWUpCisJCXJldHVy bjsKKworCWJhdGNoX2Fzc2VydF9iYXRjaGVzX3ZhbGlkKHNjYW4pOworCWJhdGNoX2RlYnVnX3By aW50X2JhdGNoZXMoImluZGV4X2JhdGNoX3Jlc2V0Iiwgc2Nhbik7CisJQXNzZXJ0KHNjYW4tPnhz X2hlYXBmZXRjaCk7CisKKwkvKiByZXNldCB0aGUgcG9zaXRpb25zICovCisJYmF0Y2hfcmVzZXRf cG9zKCZiYXRjaHF1ZXVlLT5yZWFkUG9zKTsKKworCS8qCisJICogV2l0aCAiY29tcGxldGUiIHJl c2V0LCBtYWtlIHN1cmUgdG8gYWxzbyBmcmVlIHRoZSBtYXJrZWQgYmF0Y2gsIGVpdGhlcgorCSAq IGJ5IGp1c3QgZm9yZ2V0dGluZyBpdCAoaWYgaXQncyBzdGlsbCBpbiB0aGUgcXVldWUpLCBvciBi eSBleHBsaWNpdGx5CisJICogZnJlZWluZyBpdC4KKwkgKi8KKwlpZiAoY29tcGxldGUgJiYgdW5s aWtlbHkoYmF0Y2hxdWV1ZS0+bWFya0JhdGNoICE9IE5VTEwpKQorCXsKKwkJQmF0Y2hRdWV1ZUl0 ZW1Qb3MgKm1hcmtQb3MgPSAmYmF0Y2hxdWV1ZS0+bWFya1BvczsKKwkJQmF0Y2hJbmRleFNjYW4g bWFya0JhdGNoID0gYmF0Y2hxdWV1ZS0+bWFya0JhdGNoOworCisJCS8qIGFsd2F5cyByZXNldCB0 aGUgcG9zaXRpb24sIGZvcmdldCB0aGUgbWFya2VkIGJhdGNoICovCisJCWJhdGNocXVldWUtPm1h cmtCYXRjaCA9IE5VTEw7CisKKwkJLyoKKwkJICogSWYgd2UndmUgYWxyZWFkeSBtb3ZlZCBwYXN0 IHRoZSBtYXJrZWQgYmF0Y2ggKGl0J3Mgbm90IGluIHRoZQorCQkgKiBjdXJyZW50IHF1ZXVlKSwg ZnJlZSBpdCBleHBsaWNpdGx5LiBPdGhlcndpc2UgaXQnbGwgYmUgaW4gdGhlIGZyZWVkCisJCSAq IGxhdGVyLgorCQkgKi8KKwkJaWYgKG1hcmtQb3MtPmJhdGNoIDwgYmF0Y2hxdWV1ZS0+aGVhZEJh dGNoIHx8CisJCQltYXJrUG9zLT5iYXRjaCA+PSBiYXRjaHF1ZXVlLT5uZXh0QmF0Y2gpCisJCQli YXRjaF9mcmVlKHNjYW4sIG1hcmtCYXRjaCk7CisKKwkJLyogcmVzZXQgcG9zaXRpb24gb25seSBh ZnRlciB0aGUgcXVldWUgcmFuZ2UgY2hlY2sgKi8KKwkJYmF0Y2hfcmVzZXRfcG9zKCZiYXRjaHF1 ZXVlLT5tYXJrUG9zKTsKKwl9CisKKwkvKiBub3cgcmVsZWFzZSBhbGwgb3RoZXIgY3VycmVudGx5 IGxvYWRlZCBiYXRjaGVzICovCisJd2hpbGUgKGJhdGNocXVldWUtPmhlYWRCYXRjaCA8IGJhdGNo cXVldWUtPm5leHRCYXRjaCkKKwl7CisJCUJhdGNoSW5kZXhTY2FuIGJhdGNoID0gSU5ERVhfU0NB Tl9CQVRDSChzY2FuLCBiYXRjaHF1ZXVlLT5oZWFkQmF0Y2gpOworCisJCURFQlVHX0xPRygiZnJl ZWluZyBiYXRjaCAlZCAlcCIsIGJhdGNocXVldWUtPmhlYWRCYXRjaCwgYmF0Y2gpOworCisJCWJh dGNoX2ZyZWUoc2NhbiwgYmF0Y2gpOworCisJCS8qIHVwZGF0ZSB0aGUgdmFsaWQgcmFuZ2UsIHNv IHRoYXQgYXNzZXJ0cyAvIGRlYnVnZ2luZyB3b3JrcyAqLworCQliYXRjaHF1ZXVlLT5oZWFkQmF0 Y2grKzsKKwl9CisKKwkvKiByZXNldCByZWxldmFudCBiYXRjaCBzdGF0ZSBmaWVsZHMgKi8KKwli YXRjaHF1ZXVlLT5oZWFkQmF0Y2ggPSAwOwkvKiBpbml0aWFsIGJhdGNoICovCisJYmF0Y2hxdWV1 ZS0+bmV4dEJhdGNoID0gMDsJLyogaW5pdGlhbCBiYXRjaCBpcyBlbXB0eSAqLworCisJYmF0Y2hx dWV1ZS0+ZmluaXNoZWQgPSBmYWxzZTsKKworCWJhdGNoX2Fzc2VydF9iYXRjaGVzX3ZhbGlkKHNj YW4pOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJaW5kZXhfYmF0Y2hfbWFya19wb3Mg LSBtYXJrIGN1cnJlbnQgcG9zaXRpb24gaW4gc2NhbiBmb3IgcmVzdG9yYXRpb24KKyAqCisgKiBT YXZlcyB0aGUgY3VycmVudCByZWFkIHBvc2l0aW9uIGFuZCBhc3NvY2lhdGVkIGJhdGNoIHNvIHRo YXQgdGhlIHNjYW4gY2FuCisgKiBiZSByZXN0b3JlZCB0byB0aGlzIHBvaW50IGxhdGVyLCB2aWEg YSBjYWxsIHRvIGluZGV4X2JhdGNoX3Jlc3RvcmVfcG9zLgorICogVGhlIG1hcmtlZCBiYXRjaCBp cyByZXRhaW5lZCBhbmQgbm90IGZyZWVkIHVudGlsIGEgbmV3IG1hcmsgaXMgc2V0IG9yIHRoZQor ICogc2NhbiBlbmRzIChvciB1bnRpbCB0aGUgbWFyayBpcyByZXN0b3JlZCkuCisgKiAtLS0tLS0t LS0tLS0tLS0tCisgKi8KK3ZvaWQKK2luZGV4X2JhdGNoX21hcmtfcG9zKEluZGV4U2NhbkRlc2Mg c2NhbikKK3sKKwlCYXRjaFF1ZXVlICpiYXRjaHF1ZXVlID0gc2Nhbi0+YmF0Y2hxdWV1ZTsKKwlC YXRjaFF1ZXVlSXRlbVBvcyAqbWFya1BvcyA9ICZiYXRjaHF1ZXVlLT5tYXJrUG9zOworCUJhdGNo SW5kZXhTY2FuIG1hcmtCYXRjaCA9IGJhdGNocXVldWUtPm1hcmtCYXRjaDsKKworCS8qCisJICog RnJlZSB0aGUgcHJldmlvdXMgbWFyayBiYXRjaCAoaWYgYW55KSwgYnV0IG9ubHkgaWYgdGhlIGJh dGNoIGlzIG5vCisJICogbG9uZ2VyIHZhbGlkIChpbiB0aGUgY3VycmVudCBoZWFkL25leHQgcmFu Z2UpLiAgTm90ZSB0aGF0IHdlIGRvbid0IGhhdmUKKwkgKiB0byBkbyB0aGlzIGluIHRoZSBjb21t b24gY2FzZSB3aGVyZSB3ZSBtYXJrIGEgcG9zaXRpb24gdGhhdCBjb21lcyBmcm9tCisJICogb3Vy IGN1cnJlbnQgcmVhZEJhdGNoLgorCSAqLworCWlmIChtYXJrQmF0Y2ggIT0gTlVMTCAmJiAobWFy a1Bvcy0+YmF0Y2ggPCBiYXRjaHF1ZXVlLT5oZWFkQmF0Y2ggfHwKKwkJCQkJCQkgIG1hcmtQb3Mt PmJhdGNoID49IGJhdGNocXVldWUtPm5leHRCYXRjaCkpCisJeworCQliYXRjaHF1ZXVlLT5tYXJr QmF0Y2ggPSBOVUxMOworCQliYXRjaF9mcmVlKHNjYW4sIG1hcmtCYXRjaCk7CisJfQorCisJLyog Y29weSB0aGUgcmVhZCBwb3NpdGlvbiAqLworCWJhdGNocXVldWUtPm1hcmtQb3MgPSBiYXRjaHF1 ZXVlLT5yZWFkUG9zOworCWJhdGNocXVldWUtPm1hcmtCYXRjaCA9IElOREVYX1NDQU5fQkFUQ0go c2NhbiwgYmF0Y2hxdWV1ZS0+bWFya1Bvcy5iYXRjaCk7CisKKwkvKiByZWFkUG9zL21hcmtQb3Mg bXVzdCBiZSB2YWxpZCAqLworCWJhdGNoX2Fzc2VydF9wb3NfdmFsaWQoc2NhbiwgJmJhdGNocXVl dWUtPm1hcmtQb3MpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJaW5kZXhfYmF0Y2hf cmVzdG9yZV9wb3MgLSByZXN0b3JlIHNjYW4gdG8gYSBwcmV2aW91c2x5IG1hcmtlZCBwb3NpdGlv bgorICoKKyAqIFJlc3RvcmVzIHRoZSBzY2FuIHRvIGEgcG9zaXRpb24gcHJldmlvdXNseSBzYXZl ZCBieSBpbmRleF9iYXRjaF9tYXJrX3Bvcy4KKyAqIFRoZSBtYXJrZWQgYmF0Y2ggaXMgcmVzdG9y ZWQgYXMgdGhlIGN1cnJlbnQgYmF0Y2gsIGFsbG93aW5nIHRoZSBzY2FuIHRvCisgKiByZXN1bWUg ZnJvbSB0aGUgbWFya2VkIHBvc2l0aW9uLiAgQWxzbyBub3RpZmllcyB0aGUgaW5kZXggQU0gdmlh IGEgY2FsbCB0bworICogaXRzIGFtcG9zcmVzZXQgcm91dGluZSwgd2hpY2ggYWxsb3dzIGl0IHRv IGludmFsaWRhdGUgYW55IHByaXZhdGUgc3RhdGUKKyAqIHRoYXQgaW5kZXBlbmRlbnRseSB0cmFj a3Mgc2NhbiBwcm9ncmVzcyAoc3VjaCBhcyBhcnJheSBrZXkgc3RhdGUpCisgKgorICogRnVuY3Rp b24gY3VycmVudGx5IGp1c3QgZGlzY2FyZHMgbW9zdCBiYXRjaCBxdWV1ZSBzdGF0ZS4gIEl0IG1p Z2h0IG1ha2UKKyAqIHNlbnNlIHRvIHRlYWNoIGl0IHRvIGhvbGQgb24gdG8gb3RoZXIgbmVhcmJ5 IGJhdGNoZXMgKHN0aWxsLWhlbGQgYmF0Y2hlcworICogdGhhdCBhcmUgbGlrZWx5IHRvIGJlIG5l ZWRlZCBvbmNlIHRoZSBzY2FuIGZpbmlzaGVzIHJldHVybmluZyBtYXRjaGluZworICogaXRlbXMg ZnJvbSB0aGUgcmVzdG9yZWQgYmF0Y2gpIGFzIGFuIG9wdGltaXphdGlvbi4gIFN1Y2ggYSBzY2hl bWUgd291bGQKKyAqIGhhdmUgdGhlIGJlbmVmaXQgb2YgYXZvaWRpbmcgcmVwZWF0IGNhbGxzIHRv IGFtZ2V0YmF0Y2gvcmVwZWF0ZWRseSByZWFkaW5nCisgKiB0aGUgc2FtZSBpbmRleCBwYWdlcy4K KyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZAoraW5kZXhfYmF0Y2hfcmVzdG9yZV9wb3Mo SW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUJhdGNoUXVldWUgKmJhdGNocXVldWUgPSBzY2FuLT5i YXRjaHF1ZXVlOworCUJhdGNoUXVldWVJdGVtUG9zICptYXJrUG9zID0gJmJhdGNocXVldWUtPm1h cmtQb3M7CisJQmF0Y2hRdWV1ZUl0ZW1Qb3MgKnJlYWRQb3MgPSAmYmF0Y2hxdWV1ZS0+cmVhZFBv czsKKwlCYXRjaEluZGV4U2NhbiBtYXJrQmF0Y2ggPSBiYXRjaHF1ZXVlLT5tYXJrQmF0Y2g7CisK KwlpZiAocmVhZFBvcy0+YmF0Y2ggPT0gbWFya1Bvcy0+YmF0Y2ggJiYKKwkJcmVhZFBvcy0+YmF0 Y2ggPT0gYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoKQorCXsKKwkJLyoKKwkJICogV2UgZG9uJ3QgaGF2 ZSB0byBkaXNjYXJkIHRoZSBzY2FuJ3Mgc3RhdGUgYWZ0ZXIgYWxsLCBzaW5jZSB0aGUKKwkJICog Y3VycmVudCBoZWFkQmF0Y2ggaXMgYWxzbyB0aGUgYmF0Y2ggdGhhdCB3ZSdyZSByZXN0b3Jpbmcg dG8KKwkJICovCisJCXJlYWRQb3MtPml0ZW0gPSBtYXJrUG9zLT5pdGVtOworCQlyZXR1cm47CisJ fQorCisJLyoKKwkgKiBDYWxsIGFtcG9zcmVzZXQgdG8gbGV0IGluZGV4IEFNIGtub3cgdG8gaW52 YWxpZGF0ZSBhbnkgcHJpdmF0ZSBzdGF0ZQorCSAqIHRoYXQgaW5kZXBlbmRlbnRseSB0cmFja3Mg dGhlIHNjYW4ncyBwcm9ncmVzcworCSAqLworCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFt LT5hbXBvc3Jlc2V0KHNjYW4sIG1hcmtCYXRjaCk7CisKKwkvKgorCSAqIFJlc2V0IHRoZSBiYXRj aGluZyBzdGF0ZSwgZXhjZXB0IGZvciB0aGUgbWFya2VkIGJhdGNoLCBhbmQgbWFrZSBpdCBsb29r CisJICogbGlrZSB3ZSBoYXZlIGEgc2luZ2xlIGJhdGNoIC0tIHRoZSBtYXJrZWQgb25lLgorCSAq LworCWluZGV4X2JhdGNoX3Jlc2V0KHNjYW4sIGZhbHNlKTsKKworCWJhdGNocXVldWUtPnJlYWRQ b3MgPSAqbWFya1BvczsKKwliYXRjaHF1ZXVlLT5oZWFkQmF0Y2ggPSBtYXJrUG9zLT5iYXRjaDsK KwliYXRjaHF1ZXVlLT5uZXh0QmF0Y2ggPSBtYXJrUG9zLT5iYXRjaCArIDE7CisKKwlJTkRFWF9T Q0FOX0JBVENIKHNjYW4sIGJhdGNocXVldWUtPm1hcmtQb3MuYmF0Y2gpID0gbWFya0JhdGNoOwor CWJhdGNocXVldWUtPm1hcmtCYXRjaCA9IG1hcmtCYXRjaDsKK30KKworLyoKKyAqIGJhdGNoX2Zy ZWUKKyAqCQlSZWxlYXNlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBiYXRjaCByZXR1cm5l ZCBieSB0aGUgaW5kZXggQU0uCisgKgorICogQ2FsbGVkIGJ5IHRhYmxlIEFNJ3Mgb3JkZXJlZCBp bmRleCBzY2FuIGltcGxlbWVudGF0aW9uIHdoZW4gaXQgaXMgZmluaXNoZWQKKyAqIHdpdGggYSBi YXRjaCBhbmQgd2lzaGVzIHRvIHJlbGVhc2UgaXRzIHJlc291cmNlcy4KKyAqCisgKiBUaGlzIGNh bGxzIHRoZSBpbmRleCBBTSdzIGFtZnJlZWJhdGNoIGNhbGxiYWNrIHRvIHJlbGVhc2UgQU0tc3Bl Y2lmaWMKKyAqIHJlc291cmNlcywgYW5kIHRvIHNldCBMUF9ERUFEIGJpdHMgb24gdGhlIGJhdGNo J3MgaW5kZXggcGFnZS4gIEl0IGlzbid0CisgKiBzYWZlIGZvciB0YWJsZSBBTXMgdG8gZmV0Y2gg dGFibGUgdHVwbGVzIHVzaW5nIFRJRHMgc2F2ZWQgZnJvbSBhIGJhdGNoIHRoYXQKKyAqIHdhcyBh bHJlYWR5IGZyZWVkOiAnZHJvcFBpbicgc2NhbnMgbmVlZCB0aGUgaW5kZXggQU0gdG8gcmV0YWlu IGEgcGluIG9uIHRoZQorICogVElEJ3MgaW5kZXggcGFnZSwgYXMgYW4gaW50ZXJsb2NrIGFnYWlu c3QgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nLgorICovCit2b2lkCitiYXRjaF9mcmVlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpCit7CisJYmF0Y2hfYXNzZXJ0X2Jh dGNoX3ZhbGlkKHNjYW4sIGJhdGNoKTsKKworCS8qIGRvbid0IGZyZWUgdGhlIGJhdGNoIHRoYXQg aXMgbWFya2VkICovCisJaWYgKGJhdGNoID09IHNjYW4tPmJhdGNocXVldWUtPm1hcmtCYXRjaCkK KwkJcmV0dXJuOworCisJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZnJlZWJhdGNo KHNjYW4sIGJhdGNoKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJCWluZGV4X2JhdGNo X2tpbGxfaXRlbSAtIHJlY29yZCBpdGVtIGZvciBkZWZlcnJlZCBMUF9ERUFEIG1hcmtpbmcKKyAq CisgKiBSZWNvcmRzIHRoZSBpdGVtIGluZGV4IG9mIHRoZSBjdXJyZW50bHktcmVhZCB0dXBsZSBp biByZWFkQmF0Y2gncworICoga2lsbGVkSXRlbXMgYXJyYXkuIFRoZSBpdGVtcycgaW5kZXggdHVw bGVzIHdpbGwgbGF0ZXIgYmUgbWFya2VkIExQX0RFQUQKKyAqIHdoZW4gY3VycmVudCByZWFkQmF0 Y2ggaXMgZnJlZWQgYnkgYW1mcmVlYmF0Y2ggcm91dGluZSAoc2VlIGJhdGNoX2ZyZWUpLgorICog LS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCitpbmRleF9iYXRjaF9raWxsX2l0ZW0oSW5kZXhT Y2FuRGVzYyBzY2FuKQoreworCUJhdGNoUXVldWVJdGVtUG9zICpyZWFkUG9zID0gJnNjYW4tPmJh dGNocXVldWUtPnJlYWRQb3M7CisJQmF0Y2hJbmRleFNjYW4gcmVhZEJhdGNoID0gSU5ERVhfU0NB Tl9CQVRDSChzY2FuLCByZWFkUG9zLT5iYXRjaCk7CisKKwliYXRjaF9hc3NlcnRfcG9zX3ZhbGlk KHNjYW4sIHJlYWRQb3MpOworCisJaWYgKHJlYWRCYXRjaC0+a2lsbGVkSXRlbXMgPT0gTlVMTCkK KwkJcmVhZEJhdGNoLT5raWxsZWRJdGVtcyA9IChpbnQgKikKKwkJCXBhbGxvYyhyZWFkQmF0Y2gt Pm1heGl0ZW1zICogc2l6ZW9mKGludCkpOworCWlmIChyZWFkQmF0Y2gtPm51bUtpbGxlZCA8IHJl YWRCYXRjaC0+bWF4aXRlbXMpCisJCXJlYWRCYXRjaC0+a2lsbGVkSXRlbXNbcmVhZEJhdGNoLT5u dW1LaWxsZWQrK10gPSByZWFkUG9zLT5pdGVtOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisg KgkJaW5kZXhfYmF0Y2hfZW5kIC0gZW5kIGEgYmF0Y2ggc2NhbiBhbmQgZnJlZSBhbGwgcmVzb3Vy Y2VzCisgKgorICogQ2FsbGVkIHdoZW4gYW4gaW5kZXggc2NhbiBpcyBiZWluZyBlbmRlZCwgcmln aHQgYmVmb3JlIHRoZSBvd25pbmcgc2NhbgorICogZGVzY3JpcHRvciBnb2VzIGF3YXkuICBDbGVh bnMgdXAgYWxsIGJhdGNoIHJlbGF0ZWQgcmVzb3VyY2VzLgorICogLS0tLS0tLS0tLS0tLS0tLQor ICovCit2b2lkCitpbmRleF9iYXRjaF9lbmQoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCWluZGV4 X2JhdGNoX3Jlc2V0KHNjYW4sIHRydWUpOworCisJLyogYmFpbCBvdXQgd2l0aG91dCBiYXRjaGlu ZyAqLworCWlmICghc2Nhbi0+YmF0Y2hxdWV1ZSkKKwkJcmV0dXJuOworCisJZm9yIChpbnQgaSA9 IDA7IGkgPCBJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVM7IGkrKykKKwl7CisJCWlmIChzY2FuLT5i YXRjaHF1ZXVlLT5jYWNoZVtpXSA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJcGZyZWUoc2Nh bi0+YmF0Y2hxdWV1ZS0+Y2FjaGVbaV0pOworCX0KKworCXBmcmVlKHNjYW4tPmJhdGNocXVldWUp OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKgkJCXV0aWxpdHkgZnVuY3Rpb25zIGNhbGxlZCBieSBhbWdl dGJhdGNoIGluZGV4IEFNcworICoKKyAqIFRoZXNlIGZ1bmN0aW9ucyBtYW5hZ2UgYmF0Y2ggYWxs b2NhdGlvbiwgdW5sb2NrL3BpbiBtYW5hZ2VtZW50LCBhbmQgYmF0Y2gKKyAqIHJlc291cmNlIHJl Y3ljbGluZy4gIEluZGV4IEFNcyBpbXBsZW1lbnRpbmcgYW1nZXRiYXRjaCBzaG91bGQgdXNlIHRo ZXNlCisgKiByYXRoZXIgdGhhbiBtYW5hZ2luZyBidWZmZXJzIGRpcmVjdGx5LgorICogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICovCisKKy8qCisgKiBpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrIC0gRHJvcCBsb2NrIGFu ZCBjb25kaXRpb25hbGx5IGRyb3AgcGluIG9uIGJhdGNoIHBhZ2UKKyAqCisgKiBVbmxvY2tzIGNh bGxlcidzIGJhdGNoLT5idWYgaW4gcHJlcGFyYXRpb24gZm9yIGFtZ2V0YmF0Y2ggcmV0dXJuaW5n IGl0ZW1zCisgKiBzYXZlZCBpbiB0aGF0IGJhdGNoLiAgTWFuYWdlcyB0aGUgZGV0YWlscyBvZiBk cm9wcGluZyB0aGUgbG9jayBhbmQgcG9zc2libHkKKyAqIHRoZSBwaW4gZm9yIGluZGV4IEFNIGNh bGxlciAoZHJvcHBpbmcgdGhlIHBpbiBwcmV2ZW50cyBWQUNVVU0gZnJvbSBibG9ja2luZworICog b24gYWNxdWlyaW5nIGEgY2xlYW51cCBsb2NrLCBidXQgaXNuJ3QgYWx3YXlzIHNhZmUpLgorICoK KyAqIE9ubHkgY2FsbCBoZXJlIHdoZW4gYSBiYXRjaCBoYXMgb25lIG9yIG1vcmUgbWF0Y2hpbmcg aXRlbXMgdG8gcmV0dXJuIHVzaW5nCisgKiBhbWdldGJhdGNoIChvciBmb3IgYW1nZXRiaXRtYXAg dG8gbG9hZCBpbnRvIGl0cyBiaXRtYXAgb2YgbWF0Y2hpbmcgVElEcykuCisgKiBXaGVuIGFuIGlu ZGV4IHBhZ2UgaGFzIG5vIG1hdGNoZXMsIGl0J3MgYWx3YXlzIHNhZmUgZm9yIGluZGV4IEFNcyB0 byBkcm9wCisgKiBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGluIGZvciB0aGVtc2VsdmVzLgorICoK KyAqIE5vdGU6IEl0IGlzIGNvbnZlbmllbnQgZm9yIGluZGV4IEFNcyB0aGF0IGltcGxlbWVudCBi b3RoIGFtZ2V0Yml0bWFwIGFuZAorICogYW1nZXRiaXRtYXAgdG8gY29uc2lzdGVudGx5IHVzZSB0 aGUgc2FtZSBiYXRjaCBtYW5hZ2VtZW50IGFwcHJvYWNoLCBzaW5jZQorICogdGhhdCBhdm9pZHMg aW50cm9kdWNpbmcgc3BlY2lhbCBjYXNlcyB0byBsb3dlci1sZXZlbCBjb2RlLiAgV2UgYWx3YXlz IGRyb3AKKyAqIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4gb24gYmF0Y2gncyBwYWdlIG9uIGJl aGFsZiBvZiBhbWdldGJpdG1hcCBjYWxsZXJzLgorICogU3VjaCBhbWdldGJpdG1hcCBjYWxsZXJz IG11c3QgYmUgY2FyZWZ1bCB0byBmcmVlIGFsbCBiYXRjaGVzIHdpdGggbWF0Y2hpbmcKKyAqIGl0 ZW1zIG9uY2UgdGhleSdyZSBkb25lIHNhdmluZyB0aGUgbWF0Y2hpbmcgVElEcyAodGhlcmUgd2ls bCBuZXZlciBiZSBhbnkKKyAqIGNhbGxzIHRvIGFtZnJlZWJhdGNoLCBzbyBhbWdldGJpdG1hcCBt dXN0IGNhbGwgaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UKKyAqIGRpcmVjdGx5LCBpbiBsaWV1 IG9mIGEgZGVmZXJyZWQgY2FsbCB0byBhbWZyZWViYXRjaCBmcm9tIGNvcmUgY29kZSkuCisgKi8K K3ZvaWQKK2luZGV4YW1fdXRpbF9iYXRjaF91bmxvY2soSW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRj aEluZGV4U2NhbiBiYXRjaCkKK3sKKwlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9u OworCWJvb2wJCWRyb3BQaW4gPSAhc2Nhbi0+YmF0Y2hxdWV1ZSB8fCBzY2FuLT5iYXRjaHF1ZXVl LT5kcm9wUGluOworCisJLyogYmF0Y2ggbXVzdCBoYXZlIG9uZSBvciBtb3JlIG1hdGNoaW5nIGl0 ZW1zIHJldHVybmVkIGJ5IGluZGV4IEFNICovCisJQXNzZXJ0KGJhdGNoLT5maXJzdEl0ZW0gPj0g MCAmJiBiYXRjaC0+Zmlyc3RJdGVtIDw9IGJhdGNoLT5sYXN0SXRlbSk7CisKKwlpZiAoIWRyb3BQ aW4pCisJeworCQlpZiAoIVJlbGF0aW9uVXNlc0xvY2FsQnVmZmVycyhyZWwpKQorCQkJVkFMR1JJ TkRfTUFLRV9NRU1fTk9BQ0NFU1MoQnVmZmVyR2V0UGFnZShiYXRjaC0+YnVmKSwgQkxDS1NaKTsK KworCQkvKiBKdXN0IGRyb3AgdGhlIGxvY2sgKG5vdCB0aGUgcGluKSAqLworCQlMb2NrQnVmZmVy KGJhdGNoLT5idWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAo c2Nhbi0+YmF0Y2hxdWV1ZSkKKwl7CisJCS8qIGFtZ2V0YmF0Y2ggKG5vdCBhbWdldGJpdG1hcCkg Y2FsbGVyICovCisJCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gIT0gTlVMTCk7CisKKwkJLyoK KwkJICogSGF2ZSB0byBzZXQgYmF0Y2gtPmxzbiBzbyB0aGF0IGFtZnJlZWJhdGNoIGhhcyBhIHdh eSB0byBkZXRlY3Qgd2hlbgorCQkgKiBjb25jdXJyZW50IGhlYXAgVElEIHJlY3ljbGluZyBieSBW QUNVVU0gbWlnaHQgaGF2ZSB0YWtlbiBwbGFjZS4KKwkJICogSXQnbGwgb25seSBiZSBzYWZlIHRv IHNldCBhbnkgaW5kZXggdHVwbGUgTFBfREVBRCBiaXRzIHdoZW4gdGhlCisJCSAqIHBhZ2UgTFNO IGhhc24ndCBhZHZhbmNlZC4KKwkJICovCisJCUFzc2VydChSZWxhdGlvbk5lZWRzV0FMKHJlbCkp OworCQliYXRjaC0+bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJhdGNoLT5idWYpOworCX0KKwor CS8qIERyb3AgYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbiAqLworCUxvY2tCdWZmZXIoYmF0Y2gt PmJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKKwlpZiAoIVJlbGF0aW9uVXNlc0xvY2FsQnVmZmVy cyhyZWwpKQorCQlWQUxHUklORF9NQUtFX01FTV9OT0FDQ0VTUyhCdWZmZXJHZXRQYWdlKGJhdGNo LT5idWYpLCBCTENLU1opOworCVJlbGVhc2VCdWZmZXIoYmF0Y2gtPmJ1Zik7CisJYmF0Y2gtPmJ1 ZiA9IEludmFsaWRCdWZmZXI7IC8qIGRlZmVuc2l2ZSAqLworfQorCisvKgorICogaW5kZXhhbV91 dGlsX2JhdGNoX2FsbG9jCisgKgkJQWxsb2NhdGUgYSBiYXRjaCB0aGF0IGNhbiBmaXQgbWF4aXRl bXMtbWFueSBCYXRjaE1hdGNoaW5nSXRlbXMuCisgKgorICogUmV0dXJucyBhIEJhdGNoSW5kZXhT Y2FuIHNpemVkIHRvIGNhbGxlcidzIHJlcXVpcmVkIG1heGl0ZW1zIGNhcGFjaXR5LgorICogVGhp cyB3aWxsIGVpdGhlciBiZSBhIG5ld2x5IGFsbG9jYXRlZCBiYXRjaCwgb3IgYSBiYXRjaCByZXVz ZWQgZnJvbSBhIGNhY2hlCisgKiBvZiBiYXRjaGVzIGFscmVhZHkgZnJlZWQgYnkgY2FsbGluZyBp bmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZS4gIFNlZQorICogY29tbWVudHMgYWJvdmUgaW5kZXhh bV91dGlsX2JhdGNoX3JlbGVhc2UuCisgKgorICogV2UgYXNzdW1lIHRoYXQgYWxsIGNhbGxzIGhl cmUgZHVyaW5nIHRoZSBzYW1lIGluZGV4IHNjYW4gd2lsbCBhbHdheXMgdXNlCisgKiB0aGUgc2Ft ZSBtYXhpdGVtcyBhbmQgd2FudF9pdHVwIGFyZ3VtZW50cy4gIEluZGV4IEFNcyB0aGF0IHVzZSBi YXRjaGVzCisgKiBzaG91bGQgY2FsbCB0aGlzIGZyb20gZWl0aGVyIHRoZWlyIGFtZ2V0YmF0Y2gg b3IgYW1nZXRiaXRtYXAgcm91dGluZXMuCisgKiBUaGV5IG11c3Qgbm90IGNhbGwgaGVyZSBmcm9t IG90aGVyIHJvdXRpbmVzIChwYXJ0aWN1bGFybHkgbm90IGFtZnJlZWJhdGNoKS4KKyAqLworQmF0 Y2hJbmRleFNjYW4KK2luZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyhJbmRleFNjYW5EZXNjIHNjYW4s IGludCBtYXhpdGVtcywgYm9vbCB3YW50X2l0dXApCit7CisJQmF0Y2hJbmRleFNjYW4gYmF0Y2gg PSBOVUxMOworCisJLyogRmlyc3QgbG9vayBmb3IgYW4gZXhpc3RpbmcgYmF0Y2ggZnJvbSBxdWV1 ZSdzIGNhY2hlIG9mIGJhdGNoZXMgKi8KKwlpZiAoc2Nhbi0+YmF0Y2hxdWV1ZSAhPSBOVUxMKQor CXsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVM7IGkrKykK KwkJeworCQkJaWYgKHNjYW4tPmJhdGNocXVldWUtPmNhY2hlW2ldICE9IE5VTEwpCisJCQl7CisJ CQkJLyogUmV0dXJuIGNhY2hlZCB1bnJlZmVyZW5jZWQgYmF0Y2ggKi8KKwkJCQliYXRjaCA9IHNj YW4tPmJhdGNocXVldWUtPmNhY2hlW2ldOworCQkJCXNjYW4tPmJhdGNocXVldWUtPmNhY2hlW2ld ID0gTlVMTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWlmICghYmF0Y2gpCisJewor CQliYXRjaCA9IHBhbGxvYyhvZmZzZXRvZihCYXRjaEluZGV4U2NhbkRhdGEsIGl0ZW1zKSArCisJ CQkJCSAgIHNpemVvZihCYXRjaE1hdGNoaW5nSXRlbSkgKiBtYXhpdGVtcyk7CisKKwkJYmF0Y2gt Pm1heGl0ZW1zID0gbWF4aXRlbXM7CisKKwkJLyoKKwkJICogSWYgd2UgYXJlIGRvaW5nIGFuIGlu ZGV4LW9ubHkgc2Nhbiwgd2UgbmVlZCBhIHR1cGxlIHN0b3JhZ2UKKwkJICogd29ya3NwYWNlLiBX ZSBhbGxvY2F0ZSBCTENLU1ogZm9yIHRoaXMsIHdoaWNoIHNob3VsZCBhbHdheXMgZ2l2ZQorCQkg KiB0aGUgaW5kZXggQU0gZW5vdWdoIHNwYWNlIHRvIGZpdCBhIGZ1bGwgcGFnZSdzIHdvcnRoIG9m IHR1cGxlcy4KKwkJICovCisJCWJhdGNoLT5jdXJyVHVwbGVzID0gTlVMTDsKKwkJaWYgKHdhbnRf aXR1cCkKKwkJCWJhdGNoLT5jdXJyVHVwbGVzID0gcGFsbG9jKEJMQ0tTWik7CisKKwkJLyoKKwkJ ICogQmF0Y2hlcyBhbGxvY2F0ZSBraWxsZWRJdGVtcyBsYXppbHkgKHRob3VnaCBub3RlIHRoYXQg Y2FjaGVkCisJCSAqIGJhdGNoZXMga2VlcCB0aGVpciBraWxsZWRJdGVtcyBhbGxvY2F0aW9uIHdo ZW4gcmVjeWNsZWQpCisJCSAqLworCQliYXRjaC0+a2lsbGVkSXRlbXMgPSBOVUxMOworCX0KKwor CS8qIHdhbnRfaXR1cCBjYWxsZXJzIG11c3QgZ2V0IGEgY3VyclR1cGxlcyBzcGFjZSAqLworCUFz c2VydChiYXRjaC0+bWF4aXRlbXMgPT0gbWF4aXRlbXMpOworCUFzc2VydCghKHdhbnRfaXR1cCAm JiAoYmF0Y2gtPmN1cnJUdXBsZXMgPT0gTlVMTCkpKTsKKworCS8qIHNoYXJlZCBpbml0aWFsaXph dGlvbiAqLworCWJhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOworCWJhdGNoLT5maXJzdEl0ZW0g PSAtMTsKKwliYXRjaC0+bGFzdEl0ZW0gPSAtMTsKKwliYXRjaC0+bnVtS2lsbGVkID0gMDsKKwor CXJldHVybiBiYXRjaDsKK30KKworLyoKKyAqIGluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlCisg KgkJRWl0aGVyIHN0YXNoIHRoZSBiYXRjaCBpbiBhIHNtYWxsIGNhY2hlIGZvciByZXVzZSwgb3Ig ZnJlZSBpdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBpbmRleCBBTXMgdG8g cmVsZWFzZSBhIGJhdGNoIGFsbG9jYXRlZCBieQorICogaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9j LiAgQmF0Y2hlcyBhcmUgY2FjaGVkIGhlcmUgZm9yIHJldXNlICh3aGVuIHNjYW4KKyAqIGhhc24n dCBhbHJlYWR5IGZpbmlzaGVkKSB0byByZWR1Y2UgcGFsbG9jL3BmcmVlIG92ZXJoZWFkLgorICoK KyAqIEl0J3Mgc2FmZSB0byByZWxlYXNlIGEgYmF0Y2ggaW1tZWRpYXRlbHkgd2hlbiBpdCB3YXMg dXNlZCB0byByZWFkIGEgcGFnZQorICogdGhhdCByZXR1cm5lZCBubyBtYXRjaGVzIHRvIHRoZSBz Y2FuLiAgQmF0Y2hlcyBhY3R1YWxseSByZXR1cm5lZCBieSBpbmRleAorICogQU0ncyBhbWdldGJh dGNoIHJvdXRpbmUgKGkuZS4gYmF0Y2hlcyBmb3IgcGFnZXMgd2l0aCBvbmUgb3IgbW9yZSBtYXRj aGVzKQorICogbXVzdCBiZSByZWxlYXNlZCBieSBjYWxsaW5nIGhlcmUgYXQgdGhlIGVuZCBvZiB0 aGVpciBhbWZyZWViYXRjaCByb3V0aW5lLgorICogSW5kZXggQU1zIHRoYXQgdXNlcyBiYXRjaGVz IHNob3VsZCBjYWxsIGhlcmUgdG8gcmVsZWFzZSBhIGJhdGNoIGZyb20gYW55IG9mCisgKiB0aGVp ciBhbWdldGJhdGNoLCBhbWdldGJpdG1hcCwgYW5kIGFtZnJlZWJhdGNoIHJvdXRpbmVzLgorICov Cit2b2lkCitpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShJbmRleFNjYW5EZXNjIHNjYW4sIEJh dGNoSW5kZXhTY2FuIGJhdGNoKQoreworCUFzc2VydChiYXRjaC0+YnVmID09IEludmFsaWRCdWZm ZXIpOworCisJaWYgKHNjYW4tPmJhdGNocXVldWUpCisJeworCQkvKiBhbWdldGJhdGNoIHNjYW4g Y2FsbGVyICovCisJCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gIT0gTlVMTCk7CisKKwkJaWYg KHNjYW4tPmJhdGNocXVldWUtPmZpbmlzaGVkKQorCQl7CisJCQkvKiBEb24ndCBib3RoZXIgdXNp bmcgY2FjaGUgd2hlbiBzY2FuIGlzIGVuZGluZyAqLworCQkJcGZyZWUoYmF0Y2gpOworCQkJcmV0 dXJuOworCQl9CisKKwkJLyoKKwkJICogVXNlIGNhY2hlLiAgVGhpcyBpcyBnZW5lcmFsbHkgb25s eSBiZW5lZmljaWFsIHdoZW4gdGhlcmUgYXJlIG1hbnkKKwkJICogc21hbGwgcmVzY2FucyBvZiBh biBpbmRleC4KKwkJICovCisJCWZvciAoaW50IGkgPSAwOyBpIDwgSU5ERVhfU0NBTl9DQUNIRV9C QVRDSEVTOyBpKyspCisJCXsKKwkJCWlmIChzY2FuLT5iYXRjaHF1ZXVlLT5jYWNoZVtpXSA9PSBO VUxMKQorCQkJeworCQkJCS8qIGZvdW5kIGVtcHR5IHNsb3QsIHdlJ3JlIGRvbmUgKi8KKwkJCQlz Y2FuLT5iYXRjaHF1ZXVlLT5jYWNoZVtpXSA9IGJhdGNoOworCQkJCXJldHVybjsKKwkJCX0KKwkJ fQorCisJCS8qCisJCSAqIEZhaWxlZCB0byBmaW5kIGEgZnJlZSBzbG90IGZvciB0aGlzIGJhdGNo LiAgV2UnbGwganVzdCBmcmVlIGl0CisJCSAqIG91cnNlbHZlcy4gIFRoaXMgaXNuJ3QgcmVhbGx5 IGV4cGVjdGVkOyBpdCdzIGp1c3QgZGVmZW5zaXZlLgorCQkgKi8KKwkJaWYgKGJhdGNoLT5raWxs ZWRJdGVtcykKKwkJCXBmcmVlKGJhdGNoLT5raWxsZWRJdGVtcyk7CisJCWlmIChiYXRjaC0+Y3Vy clR1cGxlcykKKwkJCXBmcmVlKGJhdGNoLT5jdXJyVHVwbGVzKTsKKwl9CisJZWxzZQorCXsKKwkJ LyogYW1nZXRiaXRtYXAgc2NhbiBjYWxsZXIgKi8KKwkJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlv biA9PSBOVUxMKTsKKwkJQXNzZXJ0KGJhdGNoLT5raWxsZWRJdGVtcyA9PSBOVUxMKTsKKwkJQXNz ZXJ0KGJhdGNoLT5jdXJyVHVwbGVzID09IE5VTEwpOworCX0KKworCS8qIG5vIGZyZWUgc2xvdCB0 byBzYXZlIHRoaXMgYmF0Y2ggKGV4cGVjdGVkIHdpdGggYW1nZXRiaXRtYXAgY2FsbGVycykgKi8K KwlwZnJlZShiYXRjaCk7Cit9CisKK3N0YXRpYyB2b2lkCitiYXRjaF9kZWJ1Z19wcmludF9iYXRj aGVzKGNvbnN0IGNoYXIgKmxhYmVsLCBJbmRleFNjYW5EZXNjIHNjYW4pCit7CisjaWZkZWYgSU5E RVhBTV9ERUJVRworCUJhdGNoUXVldWUgKmJhdGNocXVldWUgPSBzY2FuLT5iYXRjaHF1ZXVlOwor CisJaWYgKCFzY2FuLT5iYXRjaHF1ZXVlKQorCQlyZXR1cm47CisKKwlpZiAoIUFtUmVndWxhckJh Y2tlbmRQcm9jZXNzKCkpCisJCXJldHVybjsKKwlpZiAoSXNDYXRhbG9nUmVsYXRpb24oc2Nhbi0+ aW5kZXhSZWxhdGlvbikpCisJCXJldHVybjsKKworCURFQlVHX0xPRygiJXM6IGJhdGNoZXMgaGVh ZEJhdGNoICVkIG5leHRCYXRjaCAlZCIsCisJCQkgIGxhYmVsLAorCQkJICBiYXRjaHF1ZXVlLT5o ZWFkQmF0Y2gsIGJhdGNocXVldWUtPm5leHRCYXRjaCk7CisKKwlmb3IgKGludCBpID0gYmF0Y2hx dWV1ZS0+aGVhZEJhdGNoOyBpIDwgYmF0Y2hxdWV1ZS0+bmV4dEJhdGNoOyBpKyspCisJeworCQlC YXRjaEluZGV4U2NhbiBiYXRjaCA9IElOREVYX1NDQU5fQkFUQ0goc2NhbiwgaSk7CisKKwkJREVC VUdfTE9HKCIgICAgYmF0Y2ggJWQgY3VyclBhZ2UgJXUgJXAgZmlyc3RJdGVtICVkIGxhc3RJdGVt ICVkIGtpbGxlZCAlZCIsCisJCQkJICBpLCBiYXRjaC0+Y3VyclBhZ2UsIGJhdGNoLCBiYXRjaC0+ Zmlyc3RJdGVtLAorCQkJCSAgYmF0Y2gtPmxhc3RJdGVtLCBiYXRjaC0+bnVtS2lsbGVkKTsKKwl9 CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9tZXNvbi5i dWlsZCBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9tZXNvbi5idWlsZAppbmRleCBlMjljMDMw ODkuLmMwMWZmZjcwOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29u LmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9tZXNvbi5idWlsZApAQCAtNSw0 ICs1LDUgQEAgYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAnYW12YWxpZGF0ZS5jJywKICAg J2dlbmFtLmMnLAogICAnaW5kZXhhbS5jJywKKyAgJ2luZGV4YmF0Y2guYycsCiApCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0cGFnZS5jCmluZGV4IGNmYjA3YjJiYy4uMTViNzg4ZTNhIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYwpAQCAtMTAzMyw2ICsxMDMzLDkgQEAgX2J0X3JlbGJ1 ZihSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYpCiAgKiBMb2NrIGlzIGFjcXVpcmVkIHdpdGhvdXQg YWNxdWlyaW5nIGFub3RoZXIgcGluLiAgVGhpcyBpcyBsaWtlIGEgcmF3CiAgKiBMb2NrQnVmZmVy KCkgY2FsbCwgYnV0IHBlcmZvcm1zIGV4dHJhIHN0ZXBzIG5lZWRlZCBieSBWYWxncmluZC4KICAq CisgKiBOb3RlOiBpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrIGhhcyBzaW1pbGFyIFZhbGdyaW5k IGJ1ZmZlciBsb2NrCisgKiBpbnN0cnVtZW50YXRpb24sIHdoaWNoIHdlIHJlbHkgb24gaGVyZS4K KyAqCiAgKiBOb3RlOiBDYWxsZXIgbWF5IG5lZWQgdG8gY2FsbCBfYnRfY2hlY2twYWdlKCkgd2l0 aCBidWYgd2hlbiBwaW4gb24gYnVmCiAgKiB3YXNuJ3Qgb3JpZ2luYWxseSBhY3F1aXJlZCBpbiBf YnRfZ2V0YnVmKCkgb3IgX2J0X3JlbGFuZGdldGJ1ZigpLgogICovCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idHJlYWRwYWdlLmMKaW5kZXggYjNiOGI1NTM0Li5jMGQyMmVlNTEgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRwYWdlLmMKQEAgLTMyLDYgKzMyLDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgQlRSZWFkUGFnZVN0YXRlCiB7CiAJLyogSW5wdXQgcGFyYW1ldGVycywgc2V0IGJ5 IF9idF9yZWFkcGFnZSBmb3IgX2J0X2NoZWNra2V5cyAqLwogCVNjYW5EaXJlY3Rpb24gZGlyOwkJ CS8qIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24gKi8KKwlCbG9ja051bWJlciBjdXJycGFnZTsJCS8q IGN1cnJlbnQgcGFnZSBiZWluZyByZWFkICovCiAJT2Zmc2V0TnVtYmVyIG1pbm9mZjsJCS8qIExv d2VzdCBub24tcGl2b3QgdHVwbGUncyBvZmZzZXQgKi8KIAlPZmZzZXROdW1iZXIgbWF4b2ZmOwkJ LyogSGlnaGVzdCBub24tcGl2b3QgdHVwbGUncyBvZmZzZXQgKi8KIAlJbmRleFR1cGxlCWZpbmFs dHVwOwkJLyogTmVlZGVkIGJ5IHNjYW5zIHdpdGggYXJyYXkga2V5cyAqLwpAQCAtNjMsMTQgKzY0 LDEzIEBAIHN0YXRpYyBib29sIF9idF9zY2FuYmVoaW5kX2NoZWNra2V5cyhJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAogCQkJCQkJCQkJIEluZGV4VHVwbGUgZmluYWx0dXAp Owogc3RhdGljIGJvb2wgX2J0X29wcG9kaXJfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIsCiAJCQkJCQkJCSAgSW5kZXhUdXBsZSBmaW5hbHR1cCk7Ci1zdGF0 aWMgdm9pZCBfYnRfc2F2ZWl0ZW0oQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAotCQkJ CQkJIE9mZnNldE51bWJlciBvZmZudW0sIEluZGV4VHVwbGUgaXR1cCk7Ci1zdGF0aWMgaW50CV9i dF9zZXR1cHBvc3RpbmdpdGVtcyhCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkJ CQkJCSAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpoZWFwVGlk LAotCQkJCQkJCQkgIEluZGV4VHVwbGUgaXR1cCk7Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2J0X3Nh dmVwb3N0aW5naXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkJCQkJCQkg ICBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJCQkJCQkJICAgSXRlbVBvaW50ZXIgaGVhcFRpZCwg aW50IHR1cGxlT2Zmc2V0KTsKK3N0YXRpYyB2b2lkIF9idF9zYXZlaXRlbShCYXRjaEluZGV4U2Nh biBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICBJbmRleFR1cGxlIGl0dXAsIGludCAqdHVwbGVPZmZzZXQpOworc3Rh dGljIGludAlfYnRfc2V0dXBwb3N0aW5naXRlbXMoQmF0Y2hJbmRleFNjYW4gbmV3YmF0Y2gsIGlu dCBpdGVtSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXROdW1i ZXIgb2ZmbnVtLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKmhlYXBUaWQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBJbmRleFR1cGxlIGl0dXAsIGludCAqdHVwbGVPZmZzZXQpOwor c3RhdGljIGlubGluZSB2b2lkIF9idF9zYXZlcG9zdGluZ2l0ZW0oQmF0Y2hJbmRleFNjYW4gbmV3 YmF0Y2gsIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBJdGVtUG9pbnRlciBoZWFwVGlkLCBpbnQgYmFzZU9m ZnNldCk7CiBzdGF0aWMgYm9vbCBfYnRfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRS ZWFkUGFnZVN0YXRlICpwc3RhdGUsIGJvb2wgYXJyYXlLZXlzLAogCQkJCQkJICBJbmRleFR1cGxl IHR1cGxlLCBpbnQgdHVwbmF0dHMpOwogc3RhdGljIGJvb2wgX2J0X2NoZWNrX2NvbXBhcmUoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKQEAgLTExMSwxNSArMTExLDE1IEBA IHN0YXRpYyBib29sIF9idF92ZXJpZnlfa2V5c193aXRoX2FycmF5a2V5cyhJbmRleFNjYW5EZXNj IHNjYW4pOwogCiAKIC8qCi0gKglfYnRfcmVhZHBhZ2UoKSAtLSBMb2FkIGRhdGEgZnJvbSBjdXJy ZW50IGluZGV4IHBhZ2UgaW50byBzby0+Y3VyclBvcworICoJX2J0X3JlYWRwYWdlKCkgLS0gTG9h ZCBkYXRhIGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gbmV3YmF0Y2guCiAgKgotICogQ2Fs bGVyIG11c3QgaGF2ZSBwaW5uZWQgYW5kIHJlYWQtbG9ja2VkIHNvLT5jdXJyUG9zLmJ1ZjsgdGhl IGJ1ZmZlcidzIHN0YXRlCi0gKiBpcyBub3QgY2hhbmdlZCBoZXJlLiAgQWxzbywgY3VyclBvcy5t b3JlTGVmdCBhbmQgbW9yZVJpZ2h0IG11c3QgYmUgdmFsaWQ7Ci0gKiB0aGV5IGFyZSB1cGRhdGVk IGFzIGFwcHJvcHJpYXRlLiAgQWxsIG90aGVyIGZpZWxkcyBvZiBzby0+Y3VyclBvcyBhcmUKLSAq IGluaXRpYWxpemVkIGZyb20gc2NyYXRjaCBoZXJlLgorICogQ2FsbGVyIG11c3QgaGF2ZSBwaW5u ZWQgYW5kIHJlYWQtbG9ja2VkIG5ld2JhdGNoLmJ1ZjsgdGhlIGJ1ZmZlcidzIHN0YXRlIGlzCisg KiBub3QgY2hhbmdlZCBoZXJlLiAgQWxzbywgcG9zLm1vcmVMZWZ0IGFuZCBtb3JlUmlnaHQgbXVz dCBiZSB2YWxpZDsgdGhleSBhcmUKKyAqIHVwZGF0ZWQgYXMgYXBwcm9wcmlhdGUuICBBbGwgb3Ro ZXIgZmllbGRzIG9mIG5ld2JhdGNoIGFyZSBpbml0aWFsaXplZCBmcm9tCisgKiBzY3JhdGNoIGhl cmUuCiAgKgogICogV2Ugc2NhbiB0aGUgY3VycmVudCBwYWdlIHN0YXJ0aW5nIGF0IG9mZm51bSBh bmQgbW92aW5nIGluIHRoZSBpbmRpY2F0ZWQKLSAqIGRpcmVjdGlvbi4gIEFsbCBpdGVtcyBtYXRj aGluZyB0aGUgc2NhbiBrZXlzIGFyZSBsb2FkZWQgaW50byBjdXJyUG9zLml0ZW1zLgorICogZGly ZWN0aW9uLiAgQWxsIGl0ZW1zIG1hdGNoaW5nIHRoZSBzY2FuIGtleXMgYXJlIHNhdmVkIGluIG5l d2JhdGNoLml0ZW1zLgogICogbW9yZUxlZnQgb3IgbW9yZVJpZ2h0IChhcyBhcHByb3ByaWF0ZSkg aXMgY2xlYXJlZCBpZiBfYnRfY2hlY2trZXlzIHJlcG9ydHMKICAqIHRoYXQgdGhlcmUgY2FuIGJl IG5vIG1vcmUgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uCiAg KiAoY291bGQganVzdCBiZSBmb3IgdGhlIGN1cnJlbnQgcHJpbWl0aXZlIGluZGV4IHNjYW4gd2hl biBzY2FuIGhhcyBhcnJheXMpLgpAQCAtMTMxLDggKzEzMSw4IEBAIHN0YXRpYyBib29sIF9idF92 ZXJpZnlfa2V5c193aXRoX2FycmF5a2V5cyhJbmRleFNjYW5EZXNjIHNjYW4pOwogICogUmV0dXJu cyB0cnVlIGlmIGFueSBtYXRjaGluZyBpdGVtcyBmb3VuZCBvbiB0aGUgcGFnZSwgZmFsc2UgaWYg bm9uZS4KICAqLwogYm9vbAotX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkgYm9vbCBmaXJzdHBhZ2UpCitf YnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBuZXdiYXRjaCwg U2NhbkRpcmVjdGlvbiBkaXIsCisJCQkgT2Zmc2V0TnVtYmVyIG9mZm51bSwgYm9vbCBmaXJzdHBh Z2UpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAlCVFNjYW5PcGFx dWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CkBAIC0xNDQsMjMgKzE0NCwyMCBA QCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zm c2V0TnVtYmVyIG9mZm51bSwKIAlib29sCQlhcnJheUtleXMsCiAJCQkJaWdub3JlX2tpbGxlZF90 dXBsZXMgPSBzY2FuLT5pZ25vcmVfa2lsbGVkX3R1cGxlczsKIAlpbnQJCQlpdGVtSW5kZXgsCisJ CQkJdHVwbGVPZmZzZXQgPSAwLAogCQkJCWluZG5hdHRzOwogCiAJLyogc2F2ZSB0aGUgcGFnZS9i dWZmZXIgYmxvY2sgbnVtYmVyLCBhbG9uZyB3aXRoIGl0cyBzaWJsaW5nIGxpbmtzICovCi0JcGFn ZSA9IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQb3MuYnVmKTsKKwlwYWdlID0gQnVmZmVyR2V0UGFn ZShuZXdiYXRjaC0+YnVmKTsKIAlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7Ci0Jc28t PmN1cnJQb3MuY3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihzby0+Y3VyclBvcy5idWYp OwotCXNvLT5jdXJyUG9zLnByZXZQYWdlID0gb3BhcXVlLT5idHBvX3ByZXY7Ci0Jc28tPmN1cnJQ b3MubmV4dFBhZ2UgPSBvcGFxdWUtPmJ0cG9fbmV4dDsKLQkvKiBkZWxheSBzZXR0aW5nIHNvLT5j dXJyUG9zLmxzbiB1bnRpbCBfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4gKi8KLQlwc3RhdGUu ZGlyID0gc28tPmN1cnJQb3MuZGlyID0gZGlyOwotCXNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNl dCA9IDA7CisJcHN0YXRlLmN1cnJwYWdlID0gbmV3YmF0Y2gtPmN1cnJQYWdlID0gQnVmZmVyR2V0 QmxvY2tOdW1iZXIobmV3YmF0Y2gtPmJ1Zik7CisJbmV3YmF0Y2gtPnByZXZQYWdlID0gb3BhcXVl LT5idHBvX3ByZXY7CisJbmV3YmF0Y2gtPm5leHRQYWdlID0gb3BhcXVlLT5idHBvX25leHQ7CisJ cHN0YXRlLmRpciA9IG5ld2JhdGNoLT5kaXIgPSBkaXI7CiAKIAkvKiBlaXRoZXIgbW9yZVJpZ2h0 IG9yIG1vcmVMZWZ0IHNob3VsZCBiZSBzZXQgbm93IChtYXkgYmUgdW5zZXQgbGF0ZXIpICovCi0J QXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/IHNvLT5jdXJyUG9zLm1vcmVSaWdo dCA6Ci0JCSAgIHNvLT5jdXJyUG9zLm1vcmVMZWZ0KTsKKwlBc3NlcnQoU2NhbkRpcmVjdGlvbklz Rm9yd2FyZChkaXIpID8gbmV3YmF0Y2gtPm1vcmVSaWdodCA6IG5ld2JhdGNoLT5tb3JlTGVmdCk7 CiAJQXNzZXJ0KCFQX0lHTk9SRShvcGFxdWUpKTsKLQlBc3NlcnQoQlRTY2FuUG9zSXNQaW5uZWQo c28tPmN1cnJQb3MpKTsKIAlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwogCiAJLyogaW5pdGlh bGl6ZSBsb2NhbCB2YXJpYWJsZXMgKi8KQEAgLTE4OCwxNCArMTg1LDEyIEBAIF9idF9yZWFkcGFn ZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2Zm bnVtLAogCXsKIAkJLyogYWxsb3cgbmV4dC9wcmV2IHBhZ2UgdG8gYmUgcmVhZCBieSBvdGhlciB3 b3JrZXIgd2l0aG91dCBkZWxheSAqLwogCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIp KQotCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2Nhbiwgc28tPmN1cnJQb3MubmV4dFBhZ2UsCi0J CQkJCQkJCSBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQlfYnRfcGFyYWxsZWxfcmVsZWFzZShz Y2FuLCBuZXdiYXRjaC0+bmV4dFBhZ2UsIG5ld2JhdGNoLT5jdXJyUGFnZSk7CiAJCWVsc2UKLQkJ CV9idF9wYXJhbGxlbF9yZWxlYXNlKHNjYW4sIHNvLT5jdXJyUG9zLnByZXZQYWdlLAotCQkJCQkJ CQkgc28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2Nhbiwg bmV3YmF0Y2gtPnByZXZQYWdlLCBuZXdiYXRjaC0+Y3VyclBhZ2UpOwogCX0KIAotCVByZWRpY2F0 ZUxvY2tQYWdlKHJlbCwgc28tPmN1cnJQb3MuY3VyclBhZ2UsIHNjYW4tPnhzX3NuYXBzaG90KTsK KwlQcmVkaWNhdGVMb2NrUGFnZShyZWwsIG5ld2JhdGNoLT5jdXJyUGFnZSwgc2Nhbi0+eHNfc25h cHNob3QpOwogCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAl7CkBAIC0yMTIs MTEgKzIwNywxMCBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQkJIV9idF9zY2FuYmVoaW5kX2NoZWNr a2V5cyhzY2FuLCBkaXIsIHBzdGF0ZS5maW5hbHR1cCkpCiAJCQkJewogCQkJCQkvKiBTY2hlZHVs ZSBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuIGFmdGVyIGFsbCAqLwotCQkJCQlzby0+Y3Vy clBvcy5tb3JlUmlnaHQgPSBmYWxzZTsKKwkJCQkJbmV3YmF0Y2gtPm1vcmVSaWdodCA9IGZhbHNl OwogCQkJCQlzby0+bmVlZFByaW1TY2FuID0gdHJ1ZTsKIAkJCQkJaWYgKHNjYW4tPnBhcmFsbGVs X3NjYW4pCi0JCQkJCQlfYnRfcGFyYWxsZWxfcHJpbXNjYW5fc2NoZWR1bGUoc2NhbiwKLQkJCQkJ CQkJCQkJCQkgICBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQkJCQlfYnRfcGFyYWxsZWxfcHJp bXNjYW5fc2NoZWR1bGUoc2NhbiwgbmV3YmF0Y2gtPmN1cnJQYWdlKTsKIAkJCQkJcmV0dXJuIGZh bHNlOwogCQkJCX0KIAkJCX0KQEAgLTI4MCwyNiArMjc0LDI2IEBAIF9idF9yZWFkcGFnZShJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAog CQkJCWlmICghQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSkKIAkJCQl7CiAJCQkJCS8qIFJlbWVt YmVyIGl0ICovCi0JCQkJCV9idF9zYXZlaXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sIGl0dXAp OworCQkJCQlfYnRfc2F2ZWl0ZW0obmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwLCAm dHVwbGVPZmZzZXQpOwogCQkJCQlpdGVtSW5kZXgrKzsKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsK LQkJCQkJaW50CQkJdHVwbGVPZmZzZXQ7CisJCQkJCWludAkJCWJhc2VPZmZzZXQ7CiAKIAkJCQkJ LyogU2V0IHVwIHBvc3RpbmcgbGlzdCBzdGF0ZSAoYW5kIHJlbWVtYmVyIGZpcnN0IFRJRCkgKi8K LQkJCQkJdHVwbGVPZmZzZXQgPQotCQkJCQkJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKHNvLCBpdGVt SW5kZXgsIG9mZm51bSwKKwkJCQkJYmFzZU9mZnNldCA9CisJCQkJCQlfYnRfc2V0dXBwb3N0aW5n aXRlbXMobmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJCQkgIEJUcmVlVHVw bGVHZXRQb3N0aW5nTihpdHVwLCAwKSwKLQkJCQkJCQkJCQkJICBpdHVwKTsKKwkJCQkJCQkJCQkJ ICBpdHVwLCAmdHVwbGVPZmZzZXQpOwogCQkJCQlpdGVtSW5kZXgrKzsKIAogCQkJCQkvKiBSZW1l bWJlciBhbGwgbGF0ZXIgVElEcyAobXVzdCBiZSBhdCBsZWFzdCBvbmUpICovCiAJCQkJCWZvciAo aW50IGkgPSAxOyBpIDwgQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXApOyBpKyspCiAJCQkJCXsK LQkJCQkJCV9idF9zYXZlcG9zdGluZ2l0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQkJ X2J0X3NhdmVwb3N0aW5naXRlbShuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJCQkJCQkJ CQkJCUJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCBpKSwKLQkJCQkJCQkJCQkJdHVwbGVPZmZz ZXQpOworCQkJCQkJCQkJCQliYXNlT2Zmc2V0KTsKIAkJCQkJCWl0ZW1JbmRleCsrOwogCQkJCQl9 CiAJCQkJfQpAQCAtMzM5LDEyICszMzMsMTEgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCX0KIAogCQlp ZiAoIXBzdGF0ZS5jb250aW51ZXNjYW4pCi0JCQlzby0+Y3VyclBvcy5tb3JlUmlnaHQgPSBmYWxz ZTsKKwkJCW5ld2JhdGNoLT5tb3JlUmlnaHQgPSBmYWxzZTsKIAogCQlBc3NlcnQoaXRlbUluZGV4 IDw9IE1heFRJRHNQZXJCVHJlZVBhZ2UpOwotCQlzby0+Y3VyclBvcy5maXJzdEl0ZW0gPSAwOwot CQlzby0+Y3VyclBvcy5sYXN0SXRlbSA9IGl0ZW1JbmRleCAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0 ZW1JbmRleCA9IDA7CisJCW5ld2JhdGNoLT5maXJzdEl0ZW0gPSAwOworCQluZXdiYXRjaC0+bGFz dEl0ZW0gPSBpdGVtSW5kZXggLSAxOwogCX0KIAllbHNlCiAJewpAQCAtMzYxLDExICszNTQsMTAg QEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9m ZnNldE51bWJlciBvZmZudW0sCiAJCQkJCSFfYnRfc2NhbmJlaGluZF9jaGVja2tleXMoc2Nhbiwg ZGlyLCBwc3RhdGUuZmluYWx0dXApKQogCQkJCXsKIAkJCQkJLyogU2NoZWR1bGUgYW5vdGhlciBw cmltaXRpdmUgaW5kZXggc2NhbiBhZnRlciBhbGwgKi8KLQkJCQkJc28tPmN1cnJQb3MubW9yZUxl ZnQgPSBmYWxzZTsKKwkJCQkJbmV3YmF0Y2gtPm1vcmVMZWZ0ID0gZmFsc2U7CiAJCQkJCXNvLT5u ZWVkUHJpbVNjYW4gPSB0cnVlOwogCQkJCQlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbikKLQkJCQkJ CV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVsZShzY2FuLAotCQkJCQkJCQkJCQkJCSAgIHNv LT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJCQkJCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVs ZShzY2FuLCBuZXdiYXRjaC0+Y3VyclBhZ2UpOwogCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJfQog CQkJfQpAQCAtNDY2LDI3ICs0NTgsMjcgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCQkJewogCQkJCQkv KiBSZW1lbWJlciBpdCAqLwogCQkJCQlpdGVtSW5kZXgtLTsKLQkJCQkJX2J0X3NhdmVpdGVtKHNv LCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJCQkJCV9idF9zYXZlaXRlbShuZXdiYXRjaCwg aXRlbUluZGV4LCBvZmZudW0sIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAJCQkJfQogCQkJCWVsc2UK IAkJCQl7CiAJCQkJCXVpbnQxNgkJbml0ZW1zID0gQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXAp OwotCQkJCQlpbnQJCQl0dXBsZU9mZnNldDsKKwkJCQkJaW50CQkJYmFzZU9mZnNldDsKIAogCQkJ CQkvKiBTZXQgdXAgcG9zdGluZyBsaXN0IHN0YXRlIChhbmQgcmVtZW1iZXIgbGFzdCBUSUQpICov CiAJCQkJCWl0ZW1JbmRleC0tOwotCQkJCQl0dXBsZU9mZnNldCA9Ci0JCQkJCQlfYnRfc2V0dXBw b3N0aW5naXRlbXMoc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQliYXNlT2Zmc2V0ID0KKwkJ CQkJCV9idF9zZXR1cHBvc3RpbmdpdGVtcyhuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJ CQkJCQkJCQkJCSAgQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIG5pdGVtcyAtIDEpLAotCQkJ CQkJCQkJCQkgIGl0dXApOworCQkJCQkJCQkJCQkgIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAKIAkJ CQkJLyogUmVtZW1iZXIgYWxsIHByaW9yIFRJRHMgKG11c3QgYmUgYXQgbGVhc3Qgb25lKSAqLwog CQkJCQlmb3IgKGludCBpID0gbml0ZW1zIC0gMjsgaSA+PSAwOyBpLS0pCiAJCQkJCXsKIAkJCQkJ CWl0ZW1JbmRleC0tOwotCQkJCQkJX2J0X3NhdmVwb3N0aW5naXRlbShzbywgaXRlbUluZGV4LCBv ZmZudW0sCisJCQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVtKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9m Zm51bSwKIAkJCQkJCQkJCQkJQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIGkpLAotCQkJCQkJ CQkJCQl0dXBsZU9mZnNldCk7CisJCQkJCQkJCQkJCWJhc2VPZmZzZXQpOwogCQkJCQl9CiAJCQkJ fQogCQkJfQpAQCAtNTAyLDEyICs0OTQsMTEgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCSAqIGJlIGZv dW5kIHRoZXJlCiAJCSAqLwogCQlpZiAoIXBzdGF0ZS5jb250aW51ZXNjYW4pCi0JCQlzby0+Y3Vy clBvcy5tb3JlTGVmdCA9IGZhbHNlOworCQkJbmV3YmF0Y2gtPm1vcmVMZWZ0ID0gZmFsc2U7CiAK IAkJQXNzZXJ0KGl0ZW1JbmRleCA+PSAwKTsKLQkJc28tPmN1cnJQb3MuZmlyc3RJdGVtID0gaXRl bUluZGV4OwotCQlzby0+Y3VyclBvcy5sYXN0SXRlbSA9IE1heFRJRHNQZXJCVHJlZVBhZ2UgLSAx OwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSBNYXhUSURzUGVyQlRyZWVQYWdlIC0gMTsKKwkJ bmV3YmF0Y2gtPmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKKwkJbmV3YmF0Y2gtPmxhc3RJdGVtID0g TWF4VElEc1BlckJUcmVlUGFnZSAtIDE7CiAJfQogCiAJLyoKQEAgLTUyNCw3ICs1MTUsNyBAQCBf YnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0 TnVtYmVyIG9mZm51bSwKIAkgKi8KIAlBc3NlcnQoIXBzdGF0ZS5mb3JjZW5vbnJlcXVpcmVkKTsK IAotCXJldHVybiAoc28tPmN1cnJQb3MuZmlyc3RJdGVtIDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVt KTsKKwlyZXR1cm4gKG5ld2JhdGNoLT5maXJzdEl0ZW0gPD0gbmV3YmF0Y2gtPmxhc3RJdGVtKTsK IH0KIAogLyoKQEAgLTEwMjcsOTAgKzEwMTgsOTMgQEAgX2J0X29wcG9kaXJfY2hlY2trZXlzKElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCiAJcmV0dXJuIHRydWU7CiB9CiAK LS8qIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIHNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF0g Ki8KKy8qIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIG5ld2JhdGNoLml0ZW1zW2l0ZW1JbmRleF0g Ki8KIHN0YXRpYyB2b2lkCi1fYnRfc2F2ZWl0ZW0oQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUlu ZGV4LAotCQkJIE9mZnNldE51bWJlciBvZmZudW0sIEluZGV4VHVwbGUgaXR1cCkKK19idF9zYXZl aXRlbShCYXRjaEluZGV4U2NhbiBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVy IG9mZm51bSwKKwkJCSBJbmRleFR1cGxlIGl0dXAsIGludCAqdHVwbGVPZmZzZXQpCiB7Ci0JQlRT Y2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKLQog CUFzc2VydCghQlRyZWVUdXBsZUlzUGl2b3QoaXR1cCkgJiYgIUJUcmVlVHVwbGVJc1Bvc3Rpbmco aXR1cCkpOwogCi0JY3Vyckl0ZW0tPmhlYXBUaWQgPSBpdHVwLT50X3RpZDsKLQljdXJySXRlbS0+ aW5kZXhPZmZzZXQgPSBvZmZudW07Ci0JaWYgKHNvLT5jdXJyVHVwbGVzKQorCS8qIGNvcHkgdGhl IHBvcHVsYXRlZCBwYXJ0IG9mIHRoZSBpdGVtcyBhcnJheSAqLworCW5ld2JhdGNoLT5pdGVtc1tp dGVtSW5kZXhdLmhlYXBUaWQgPSBpdHVwLT50X3RpZDsKKwluZXdiYXRjaC0+aXRlbXNbaXRlbUlu ZGV4XS5pbmRleE9mZnNldCA9IG9mZm51bTsKKworCWlmIChuZXdiYXRjaC0+Y3VyclR1cGxlcykK IAl7CiAJCVNpemUJCWl0dXBzeiA9IEluZGV4VHVwbGVTaXplKGl0dXApOwogCi0JCWN1cnJJdGVt LT50dXBsZU9mZnNldCA9IHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldDsKLQkJbWVtY3B5KHNv LT5jdXJyVHVwbGVzICsgc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0LCBpdHVwLCBpdHVwc3op OwotCQlzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQgKz0gTUFYQUxJR04oaXR1cHN6KTsKKwkJ bmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0udHVwbGVPZmZzZXQgPSAqdHVwbGVPZmZzZXQ7CisJ CW1lbWNweShuZXdiYXRjaC0+Y3VyclR1cGxlcyArICp0dXBsZU9mZnNldCwgaXR1cCwgaXR1cHN6 KTsKKwkJKnR1cGxlT2Zmc2V0ICs9IE1BWEFMSUdOKGl0dXBzeik7CiAJfQogfQogCiAvKgogICog U2V0dXAgc3RhdGUgdG8gc2F2ZSBUSURzL2l0ZW1zIGZyb20gYSBzaW5nbGUgcG9zdGluZyBsaXN0 IHR1cGxlLgogICoKLSAqIFNhdmVzIGFuIGluZGV4IGl0ZW0gaW50byBzby0+Y3VyclBvcy5pdGVt c1tpdGVtSW5kZXhdIGZvciBUSUQgdGhhdCBpcwotICogcmV0dXJuZWQgdG8gc2NhbiBmaXJzdC4g IFNlY29uZCBvciBzdWJzZXF1ZW50IFRJRHMgZm9yIHBvc3RpbmcgbGlzdCBzaG91bGQKLSAqIGJl IHNhdmVkIGJ5IGNhbGxpbmcgX2J0X3NhdmVwb3N0aW5naXRlbSgpLgorICogU2F2ZXMgYW4gaW5k ZXggaXRlbSBpbnRvIG5ld2JhdGNoLml0ZW1zW2l0ZW1JbmRleF0gZm9yIFRJRCB0aGF0IGlzIHJl dHVybmVkCisgKiB0byBzY2FuIGZpcnN0LiAgU2Vjb25kIG9yIHN1YnNlcXVlbnQgVElEcyBmb3Ig cG9zdGluZyBsaXN0IHNob3VsZCBiZSBzYXZlZAorICogYnkgY2FsbGluZyBfYnRfc2F2ZXBvc3Rp bmdpdGVtKCkuCiAgKgotICogUmV0dXJucyBhbiBvZmZzZXQgaW50byB0dXBsZSBzdG9yYWdlIHNw YWNlIHRoYXQgbWFpbiB0dXBsZSBpcyBzdG9yZWQgYXQgaWYKLSAqIG5lZWRlZC4KKyAqIFJldHVy bnMgYmFzZU9mZnNldCwgYW4gb2Zmc2V0IGludG8gdHVwbGUgc3RvcmFnZSBzcGFjZSB0aGF0IG1h aW4gdHVwbGUgaXMKKyAqIHN0b3JlZCBhdCBpZiBuZWVkZWQuCiAgKi8KIHN0YXRpYyBpbnQKLV9i dF9zZXR1cHBvc3RpbmdpdGVtcyhCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsIE9mZnNl dE51bWJlciBvZmZudW0sCi0JCQkJCSAgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpoZWFwVGlkLCBJ bmRleFR1cGxlIGl0dXApCitfYnRfc2V0dXBwb3N0aW5naXRlbXMoQmF0Y2hJbmRleFNjYW4gbmV3 YmF0Y2gsIGludCBpdGVtSW5kZXgsCisJCQkJCSAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgY29uc3Qg SXRlbVBvaW50ZXJEYXRhICpoZWFwVGlkLAorCQkJCQkgIEluZGV4VHVwbGUgaXR1cCwgaW50ICp0 dXBsZU9mZnNldCkKIHsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5p dGVtc1tpdGVtSW5kZXhdOworCUJhdGNoTWF0Y2hpbmdJdGVtICppdGVtID0gJm5ld2JhdGNoLT5p dGVtc1tpdGVtSW5kZXhdOwogCiAJQXNzZXJ0KEJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkpOwog Ci0JY3Vyckl0ZW0tPmhlYXBUaWQgPSAqaGVhcFRpZDsKLQljdXJySXRlbS0+aW5kZXhPZmZzZXQg PSBvZmZudW07Ci0JaWYgKHNvLT5jdXJyVHVwbGVzKQorCS8qIGNvcHkgdGhlIHBvcHVsYXRlZCBw YXJ0IG9mIHRoZSBpdGVtcyBhcnJheSAqLworCWl0ZW0tPmhlYXBUaWQgPSAqaGVhcFRpZDsKKwlp dGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKKworCWlmIChuZXdiYXRjaC0+Y3VyclR1cGxlcykK IAl7CiAJCS8qIFNhdmUgYmFzZSBJbmRleFR1cGxlICh0cnVuY2F0ZSBwb3N0aW5nIGxpc3QpICov CiAJCUluZGV4VHVwbGUJYmFzZTsKIAkJU2l6ZQkJaXR1cHN6ID0gQlRyZWVUdXBsZUdldFBvc3Rp bmdPZmZzZXQoaXR1cCk7CiAKIAkJaXR1cHN6ID0gTUFYQUxJR04oaXR1cHN6KTsKLQkJY3Vyckl0 ZW0tPnR1cGxlT2Zmc2V0ID0gc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0OwotCQliYXNlID0g KEluZGV4VHVwbGUpIChzby0+Y3VyclR1cGxlcyArIHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNl dCk7CisJCWl0ZW0tPnR1cGxlT2Zmc2V0ID0gKnR1cGxlT2Zmc2V0OworCQliYXNlID0gKEluZGV4 VHVwbGUpIChuZXdiYXRjaC0+Y3VyclR1cGxlcyArICp0dXBsZU9mZnNldCk7CiAJCW1lbWNweShi YXNlLCBpdHVwLCBpdHVwc3opOwogCQkvKiBEZWZlbnNpdmVseSByZWR1Y2Ugd29yayBhcmVhIGlu ZGV4IHR1cGxlIGhlYWRlciBzaXplICovCiAJCWJhc2UtPnRfaW5mbyAmPSB+SU5ERVhfU0laRV9N QVNLOwogCQliYXNlLT50X2luZm8gfD0gaXR1cHN6OwotCQlzby0+Y3VyclBvcy5uZXh0VHVwbGVP ZmZzZXQgKz0gaXR1cHN6OworCQkqdHVwbGVPZmZzZXQgKz0gaXR1cHN6OwogCi0JCXJldHVybiBj dXJySXRlbS0+dHVwbGVPZmZzZXQ7CisJCXJldHVybiBpdGVtLT50dXBsZU9mZnNldDsKIAl9CiAK IAlyZXR1cm4gMDsKIH0KIAogLyoKLSAqIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIHNvLT5jdXJy UG9zLml0ZW1zW2l0ZW1JbmRleF0gZm9yIGN1cnJlbnQgcG9zdGluZworICogU2F2ZSBhbiBpbmRl eCBpdGVtIGludG8gbmV3YmF0Y2guaXRlbXNbaXRlbUluZGV4XSBmb3IgY3VycmVudCBwb3N0aW5n CiAgKiB0dXBsZS4KICAqCiAgKiBBc3N1bWVzIHRoYXQgX2J0X3NldHVwcG9zdGluZ2l0ZW1zKCkg aGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgZm9yIGN1cnJlbnQKLSAqIHBvc3RpbmcgbGlzdCB0dXBs ZS4gIENhbGxlciBwYXNzZXMgaXRzIHJldHVybiB2YWx1ZSBhcyB0dXBsZU9mZnNldC4KKyAqIHBv c3RpbmcgbGlzdCB0dXBsZS4gIENhbGxlciBwYXNzZXMgaXRzIHJldHVybiB2YWx1ZSBhcyBiYXNl T2Zmc2V0LgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLV9idF9zYXZlcG9zdGluZ2l0ZW0oQlRT Y2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJCQlJ dGVtUG9pbnRlciBoZWFwVGlkLCBpbnQgdHVwbGVPZmZzZXQpCitfYnRfc2F2ZXBvc3RpbmdpdGVt KEJhdGNoSW5kZXhTY2FuIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2Zm bnVtLAorCQkJCQlJdGVtUG9pbnRlciBoZWFwVGlkLCBpbnQgYmFzZU9mZnNldCkKIHsKLQlCVFNj YW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOworCUJh dGNoTWF0Y2hpbmdJdGVtICppdGVtID0gJm5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdOwogCi0J Y3Vyckl0ZW0tPmhlYXBUaWQgPSAqaGVhcFRpZDsKLQljdXJySXRlbS0+aW5kZXhPZmZzZXQgPSBv ZmZudW07CisJaXRlbS0+aGVhcFRpZCA9ICpoZWFwVGlkOworCWl0ZW0tPmluZGV4T2Zmc2V0ID0g b2ZmbnVtOwogCiAJLyoKIAkgKiBIYXZlIGluZGV4LW9ubHkgc2NhbnMgcmV0dXJuIHRoZSBzYW1l IGJhc2UgSW5kZXhUdXBsZSBmb3IgZXZlcnkgVElECiAJICogdGhhdCBvcmlnaW5hdGVzIGZyb20g dGhlIHNhbWUgcG9zdGluZyBsaXN0CiAJICovCi0JaWYgKHNvLT5jdXJyVHVwbGVzKQotCQljdXJy SXRlbS0+dHVwbGVPZmZzZXQgPSB0dXBsZU9mZnNldDsKKwlpZiAobmV3YmF0Y2gtPmN1cnJUdXBs ZXMpCisJCWl0ZW0tPnR1cGxlT2Zmc2V0ID0gYmFzZU9mZnNldDsKIH0KIAogI2RlZmluZSBMT09L X0FIRUFEX1JFUVVJUkVEX1JFQ0hFQ0tTIAkzCkBAIC0yODIyLDEzICsyODE2LDEzIEBAIG5ld19w cmltX3NjYW46CiAJICogTm90ZTogV2UgbWFrZSBhIHNvZnQgYXNzdW1wdGlvbiB0aGF0IHRoZSBj dXJyZW50IHNjYW4gZGlyZWN0aW9uIHdpbGwKIAkgKiBhbHNvIGJlIHVzZWQgd2l0aGluIF9idF9u ZXh0LCB3aGVuIGl0IGlzIGFza2VkIHRvIHN0ZXAgb2ZmIHRoaXMgcGFnZS4KIAkgKiBJdCBpcyB1 cCB0byBfYnRfbmV4dCB0byBjYW5jZWwgdGhpcyBzY2hlZHVsZWQgcHJpbWl0aXZlIGluZGV4IHNj YW4KLQkgKiB3aGVuZXZlciBpdCBzdGVwcyB0byBhIHBhZ2UgaW4gdGhlIGRpcmVjdGlvbiBvcHBv c2l0ZSBjdXJyUG9zLmRpci4KKwkgKiB3aGVuZXZlciBpdCBzdGVwcyB0byBhIHBhZ2UgaW4gdGhl IGRpcmVjdGlvbiBvcHBvc2l0ZSBwc3RhdGUtPmRpci4KIAkgKi8KIAlwc3RhdGUtPmNvbnRpbnVl c2NhbiA9IGZhbHNlOwkvKiBUZWxsIF9idF9yZWFkcGFnZSB3ZSdyZSBkb25lLi4uICovCiAJc28t Pm5lZWRQcmltU2NhbiA9IHRydWU7CS8qIC4uLmJ1dCBjYWxsIF9idF9maXJzdCBhZ2FpbiAqLwog CiAJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4pCi0JCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hl ZHVsZShzY2FuLCBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCV9idF9wYXJhbGxlbF9wcmltc2Nh bl9zY2hlZHVsZShzY2FuLCBwc3RhdGUtPmN1cnJwYWdlKTsKIAogCS8qIENhbGxlcidzIHR1cGxl IGRvZXNuJ3QgbWF0Y2ggdGhlIG5ldyBxdWFsICovCiAJcmV0dXJuIGZhbHNlOwpAQCAtMjkxMywx NCArMjkwNyw2IEBAIF9idF9hZHZhbmNlX2FycmF5X2tleXNfaW5jcmVtZW50KEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCiAJICogUmVzdG9yZSB0aGUgYXJyYXkga2V5cyB0 byB0aGUgc3RhdGUgdGhleSB3ZXJlIGluIGltbWVkaWF0ZWx5IGJlZm9yZSB3ZQogCSAqIHdlcmUg Y2FsbGVkLiAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGFycmF5cyBvbmx5IGV2ZXIgcmF0Y2hldCBp biB0aGUKIAkgKiBjdXJyZW50IHNjYW4gZGlyZWN0aW9uLgotCSAqCi0JICogV2l0aG91dCB0aGlz LCBzY2FucyBjb3VsZCBvdmVybG9vayBtYXRjaGluZyB0dXBsZXMgd2hlbiB0aGUgc2NhbgotCSAq IGRpcmVjdGlvbiBnZXRzIHJldmVyc2VkIGp1c3QgYmVmb3JlIGJ0Z2V0dHVwbGUgcnVucyBvdXQg b2YgaXRlbXMgdG8KLQkgKiByZXR1cm4sIGJ1dCBqdXN0IGFmdGVyIF9idF9yZWFkcGFnZSBwcmVw YXJlcyBhbGwgdGhlIGl0ZW1zIGZyb20gdGhlCi0JICogc2NhbidzIGZpbmFsIHBhZ2UgaW4gc28t PmN1cnJQb3MuICBXaGVuIHdlJ3JlIG9uIHRoZSBmaW5hbCBwYWdlIGl0IGlzCi0JICogdHlwaWNh bCBmb3Igc28tPmN1cnJQb3MgdG8gZ2V0IGludmFsaWRhdGVkIG9uY2UgYnRnZXR0dXBsZSBmaW5h bGx5Ci0JICogcmV0dXJucyBmYWxzZSwgd2hpY2gnbGwgZWZmZWN0aXZlbHkgaW52YWxpZGF0ZSB0 aGUgc2NhbidzIGFycmF5IGtleXMuCi0JICogVGhhdCBoYXNuJ3QgaGFwcGVuZWQgeWV0LCB0aG91 Z2ggLS0gYW5kIGluIGdlbmVyYWwgaXQgbWF5IG5ldmVyIGhhcHBlbi4KIAkgKi8KIAlfYnRfc3Rh cnRfYXJyYXlfa2V5cyhzY2FuLCAtZGlyKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRyZWUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMK aW5kZXggNjE5N2I3MjVmLi4xZGNlYmQ4YWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0cmVlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUu YwpAQCAtMTU5LDExICsxNTksMTIgQEAgYnRoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1y b3V0aW5lLT5hbWFkanVzdG1lbWJlcnMgPSBidGFkanVzdG1lbWJlcnM7CiAJYW1yb3V0aW5lLT5h bWJlZ2luc2NhbiA9IGJ0YmVnaW5zY2FuOwogCWFtcm91dGluZS0+YW1yZXNjYW4gPSBidHJlc2Nh bjsKLQlhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgPSBidGdldHR1cGxlOworCWFtcm91dGluZS0+YW1n ZXR0dXBsZSA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbWdldGJhdGNoID0gYnRnZXRiYXRjaDsKKwlh bXJvdXRpbmUtPmFtZnJlZWJhdGNoID0gYnRmcmVlYmF0Y2g7CiAJYW1yb3V0aW5lLT5hbWdldGJp dG1hcCA9IGJ0Z2V0Yml0bWFwOwogCWFtcm91dGluZS0+YW1lbmRzY2FuID0gYnRlbmRzY2FuOwot CWFtcm91dGluZS0+YW1tYXJrcG9zID0gYnRtYXJrcG9zOwotCWFtcm91dGluZS0+YW1yZXN0cnBv cyA9IGJ0cmVzdHJwb3M7CisJYW1yb3V0aW5lLT5hbXBvc3Jlc2V0ID0gYnRwb3NyZXNldDsKIAlh bXJvdXRpbmUtPmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBidGVzdGltYXRlcGFyYWxsZWxzY2Fu OwogCWFtcm91dGluZS0+YW1pbml0cGFyYWxsZWxzY2FuID0gYnRpbml0cGFyYWxsZWxzY2FuOwog CWFtcm91dGluZS0+YW1wYXJhbGxlbHJlc2NhbiA9IGJ0cGFyYWxsZWxyZXNjYW47CkBAIC0yMjEs MTMgKzIyMiwxMyBAQCBidGluc2VydChSZWxhdGlvbiByZWwsIERhdHVtICp2YWx1ZXMsIGJvb2wg KmlzbnVsbCwKIH0KIAogLyoKLSAqCWJ0Z2V0dHVwbGUoKSAtLSBHZXQgdGhlIG5leHQgdHVwbGUg aW4gdGhlIHNjYW4uCisgKglidGdldGJhdGNoKCkgLS0gR2V0IHRoZSBmaXJzdCBvciBuZXh0IGJh dGNoIG9mIHR1cGxlcyBpbiB0aGUgc2NhbgogICovCi1ib29sCi1idGdldHR1cGxlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitCYXRjaEluZGV4U2NhbgorYnRnZXRiYXRj aChJbmRleFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIHByaW9yYmF0Y2gsIFNjYW5EaXJl Y3Rpb24gZGlyKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9w YXF1ZTsKLQlib29sCQlyZXM7CisJQmF0Y2hJbmRleFNjYW4gYmF0Y2ggPSBwcmlvcmJhdGNoOwog CiAJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsKIApAQCAtMjQyLDQzICsyNDMs MTggQEAgYnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQog CQkgKiB0aGUgYXBwcm9wcmlhdGUgZGlyZWN0aW9uLiAgSWYgd2UgaGF2ZW4ndCBkb25lIHNvIHll dCwgd2UgY2FsbAogCQkgKiBfYnRfZmlyc3QoKSB0byBnZXQgdGhlIGZpcnN0IGl0ZW0gaW4gdGhl IHNjYW4uCiAJCSAqLwotCQlpZiAoIUJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCQkJ cmVzID0gX2J0X2ZpcnN0KHNjYW4sIGRpcik7CisJCWlmIChiYXRjaCA9PSBOVUxMKQorCQkJYmF0 Y2ggPSBfYnRfZmlyc3Qoc2NhbiwgZGlyKTsKIAkJZWxzZQotCQl7Ci0JCQkvKgotCQkJICogQ2hl Y2sgdG8gc2VlIGlmIHdlIHNob3VsZCBraWxsIHRoZSBwcmV2aW91c2x5LWZldGNoZWQgdHVwbGUu Ci0JCQkgKi8KLQkJCWlmIChzY2FuLT5raWxsX3ByaW9yX3R1cGxlKQotCQkJewotCQkJCS8qCi0J CQkJICogWWVzLCByZW1lbWJlciBpdCBmb3IgbGF0ZXIuIChXZSdsbCBkZWFsIHdpdGggYWxsIHN1 Y2gKLQkJCQkgKiB0dXBsZXMgYXQgb25jZSByaWdodCBiZWZvcmUgbGVhdmluZyB0aGUgaW5kZXgg cGFnZS4pICBUaGUKLQkJCQkgKiB0ZXN0IGZvciBudW1LaWxsZWQgb3ZlcnJ1biBpcyBub3QganVz dCBwYXJhbm9pYTogaWYgdGhlCi0JCQkJICogY2FsbGVyIHJldmVyc2VzIGRpcmVjdGlvbiBpbiB0 aGUgaW5kZXhzY2FuIHRoZW4gdGhlIHNhbWUKLQkJCQkgKiBpdGVtIG1pZ2h0IGdldCBlbnRlcmVk IG11bHRpcGxlIHRpbWVzLiBJdCdzIG5vdCB3b3J0aAotCQkJCSAqIHRyeWluZyB0byBvcHRpbWl6 ZSB0aGF0LCBzbyB3ZSBkb24ndCBkZXRlY3QgaXQsIGJ1dCBpbnN0ZWFkCi0JCQkJICoganVzdCBm b3JnZXQgYW55IGV4Y2VzcyBlbnRyaWVzLgotCQkJCSAqLwotCQkJCWlmIChzby0+a2lsbGVkSXRl bXMgPT0gTlVMTCkKLQkJCQkJc28tPmtpbGxlZEl0ZW1zID0gcGFsbG9jX2FycmF5KGludCwgTWF4 VElEc1BlckJUcmVlUGFnZSk7Ci0JCQkJaWYgKHNvLT5udW1LaWxsZWQgPCBNYXhUSURzUGVyQlRy ZWVQYWdlKQotCQkJCQlzby0+a2lsbGVkSXRlbXNbc28tPm51bUtpbGxlZCsrXSA9IHNvLT5jdXJy UG9zLml0ZW1JbmRleDsKLQkJCX0KKwkJCWJhdGNoID0gX2J0X25leHQoc2NhbiwgZGlyLCBiYXRj aCk7CiAKLQkJCS8qCi0JCQkgKiBOb3cgY29udGludWUgdGhlIHNjYW4uCi0JCQkgKi8KLQkJCXJl cyA9IF9idF9uZXh0KHNjYW4sIGRpcik7Ci0JCX0KLQotCQkvKiBJZiB3ZSBoYXZlIGEgdHVwbGUs IHJldHVybiBpdCAuLi4gKi8KLQkJaWYgKHJlcykKKwkJLyogSWYgd2UgaGF2ZSBhIGJhdGNoLCBy ZXR1cm4gaXQgLi4uICovCisJCWlmIChiYXRjaCkKIAkJCWJyZWFrOwogCQkvKiAuLi4gb3RoZXJ3 aXNlIHNlZSBpZiB3ZSBuZWVkIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gKi8KIAl9IHdo aWxlIChzby0+bnVtQXJyYXlLZXlzICYmIF9idF9zdGFydF9wcmltX3NjYW4oc2NhbikpOwogCi0J cmV0dXJuIHJlczsKKwlyZXR1cm4gYmF0Y2g7CiB9CiAKIC8qCkBAIC0yODgsNiArMjY0LDcgQEAg aW50NjQKIGJ0Z2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiB7 CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJhdGNo SW5kZXhTY2FuIGJhdGNoOwogCWludDY0CQludGlkcyA9IDA7CiAJSXRlbVBvaW50ZXIgaGVhcFRp ZDsKIApAQCAtMjk2LDI5ICsyNzMsMjkgQEAgYnRnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2Fu LCBUSURCaXRtYXAgKnRibSkKIAkvKiBFYWNoIGxvb3AgaXRlcmF0aW9uIHBlcmZvcm1zIGFub3Ro ZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gKi8KIAlkbwogCXsKLQkJLyogRmV0Y2ggdGhlIGZpcnN0 IHBhZ2UgJiB0dXBsZSAqLwotCQlpZiAoX2J0X2ZpcnN0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0 aW9uKSkKKwkJLyogRmV0Y2ggdGhlIGZpcnN0IGJhdGNoICovCisJCWlmICgoYmF0Y2ggPSBfYnRf Zmlyc3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pKSkKIAkJewotCQkJLyogU2F2ZSB0dXBs ZSBJRCwgYW5kIGNvbnRpbnVlIHNjYW5uaW5nICovCi0JCQloZWFwVGlkID0gJnNjYW4tPnhzX2hl YXB0aWQ7CisJCQlpbnQJCQlpdGVtSW5kZXggPSAwOworCisJCQkvKiBTYXZlIGZpcnN0IHR1cGxl J3MgVElEICovCisJCQloZWFwVGlkID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLmhlYXBUaWQ7 CiAJCQl0Ym1fYWRkX3R1cGxlcyh0Ym0sIGhlYXBUaWQsIDEsIGZhbHNlKTsKIAkJCW50aWRzKys7 CiAKIAkJCWZvciAoOzspCiAJCQl7Ci0JCQkJLyoKLQkJCQkgKiBBZHZhbmNlIHRvIG5leHQgdHVw bGUgd2l0aGluIHBhZ2UuICBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZQotCQkJCSAqIGVhc3kgY2Fz ZSBpbiBfYnRfbmV4dCgpLgotCQkJCSAqLwotCQkJCWlmICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRl eCA+IHNvLT5jdXJyUG9zLmxhc3RJdGVtKQorCQkJCS8qIEFkdmFuY2UgdG8gbmV4dCBUSUQgd2l0 aGluIHBhZ2Utc2l6ZWQgYmF0Y2ggKi8KKwkJCQlpZiAoKytpdGVtSW5kZXggPiBiYXRjaC0+bGFz dEl0ZW0pCiAJCQkJewogCQkJCQkvKiBsZXQgX2J0X25leHQgZG8gdGhlIGhlYXZ5IGxpZnRpbmcg Ki8KLQkJCQkJaWYgKCFfYnRfbmV4dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbikpCisJCQkJ CWl0ZW1JbmRleCA9IDA7CisJCQkJCWJhdGNoID0gX2J0X25leHQoc2NhbiwgRm9yd2FyZFNjYW5E aXJlY3Rpb24sIGJhdGNoKTsKKwkJCQkJaWYgKCFiYXRjaCkKIAkJCQkJCWJyZWFrOwogCQkJCX0K IAotCQkJCS8qIFNhdmUgdHVwbGUgSUQsIGFuZCBjb250aW51ZSBzY2FubmluZyAqLwotCQkJCWhl YXBUaWQgPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XS5oZWFwVGlk OworCQkJCWhlYXBUaWQgPSAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0uaGVhcFRpZDsKIAkJCQl0 Ym1fYWRkX3R1cGxlcyh0Ym0sIGhlYXBUaWQsIDEsIGZhbHNlKTsKIAkJCQludGlkcysrOwogCQkJ fQpAQCAtMzQ2LDggKzMyMyw2IEBAIGJ0YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlz LCBpbnQgbm9yZGVyYnlzKQogCiAJLyogYWxsb2NhdGUgcHJpdmF0ZSB3b3Jrc3BhY2UgKi8KIAlz byA9IHBhbGxvY19vYmplY3QoQlRTY2FuT3BhcXVlRGF0YSk7Ci0JQlRTY2FuUG9zSW52YWxpZGF0 ZShzby0+Y3VyclBvcyk7Ci0JQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+bWFya1Bvcyk7CiAJaWYg KHNjYW4tPm51bWJlck9mS2V5cyA+IDApCiAJCXNvLT5rZXlEYXRhID0gKFNjYW5LZXkpIHBhbGxv YyhzY2FuLT5udW1iZXJPZktleXMgKiBzaXplb2YoU2NhbktleURhdGEpKTsKIAllbHNlCkBAIC0z NjEsMTkgKzMzNiw4IEBAIGJ0YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQg bm9yZGVyYnlzKQogCXNvLT5vcmRlclByb2NzID0gTlVMTDsKIAlzby0+YXJyYXlDb250ZXh0ID0g TlVMTDsKIAotCXNvLT5raWxsZWRJdGVtcyA9IE5VTEw7CQkvKiB1bnRpbCBuZWVkZWQgKi8KLQlz by0+bnVtS2lsbGVkID0gMDsKLQotCS8qCi0JICogV2UgZG9uJ3Qga25vdyB5ZXQgd2hldGhlciB0 aGUgc2NhbiB3aWxsIGJlIGluZGV4LW9ubHksIHNvIHdlIGRvIG5vdAotCSAqIGFsbG9jYXRlIHRo ZSB0dXBsZSB3b3Jrc3BhY2UgYXJyYXlzIHVudGlsIGJ0cmVzY2FuLiAgSG93ZXZlciwgd2Ugc2V0 IHVwCi0JICogc2Nhbi0+eHNfaXR1cGRlc2Mgd2hldGhlciB3ZSdsbCBuZWVkIGl0IG9yIG5vdCwg c2luY2UgdGhhdCdzIHNvIGNoZWFwLgotCSAqLwotCXNvLT5jdXJyVHVwbGVzID0gc28tPm1hcmtU dXBsZXMgPSBOVUxMOwotCi0Jc2Nhbi0+eHNfaXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJl bCk7Ci0KIAlzY2FuLT5vcGFxdWUgPSBzbzsKKwlzY2FuLT54c19pdHVwZGVzYyA9IFJlbGF0aW9u R2V0RGVzY3IocmVsKTsKIAogCXJldHVybiBzY2FuOwogfQpAQCAtMzg3LDgyICszNTEsMzcgQEAg YnRyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2Nhbmtl eXMsCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwog Ci0JLyogd2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQgbG9ja3MsIGJ1dCBnb3R0YSBkcm9wIHRo ZSBwaW5zICovCi0JaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCXsKLQkJLyog QmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAq LwotCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOwotCQlC VFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKLQkJQlRTY2FuUG9zSW52YWxpZGF0 ZShzby0+Y3VyclBvcyk7Ci0JfQotCi0JLyoKLQkgKiBXZSBwcmVmZXIgdG8gZWFnZXJseSBkcm9w IGxlYWYgcGFnZSBwaW5zIGJlZm9yZSBidGdldHR1cGxlIHJldHVybnMuCi0JICogVGhpcyBhdm9p ZHMgbWFraW5nIFZBQ1VVTSB3YWl0IHRvIGFjcXVpcmUgYSBjbGVhbnVwIGxvY2sgb24gdGhlIHBh Z2UuCi0JICoKLQkgKiBXZSBjYW5ub3Qgc2FmZWx5IGRyb3AgbGVhZiBwYWdlIHBpbnMgZHVyaW5n IGluZGV4LW9ubHkgc2NhbnMgZHVlIHRvIGEKLQkgKiByYWNlIGNvbmRpdGlvbiBpbnZvbHZpbmcg VkFDVVVNIHNldHRpbmcgcGFnZXMgYWxsLXZpc2libGUgaW4gdGhlIFZNLgotCSAqIEl0J3MgYWxz byB1bnNhZmUgZm9yIHBsYWluIGluZGV4IHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1WQ0Mgc25hcHNo b3QuCi0JICoKLQkgKiBXaGVuIHdlIGRyb3AgcGlucyBlYWdlcmx5LCB0aGUgbWVjaGFuaXNtIHRo YXQgbWFya3Mgc28tPmtpbGxlZEl0ZW1zW10KLQkgKiBpbmRleCB0dXBsZXMgTFBfREVBRCBoYXMg dG8gZGVhbCB3aXRoIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyByYWNlcy4KLQkgKiBUaGUgc2No ZW1lIHVzZWQgdG8gZGV0ZWN0IHVuc2FmZSBUSUQgcmVjeWNsaW5nIHdvbid0IHdvcmsgd2hlbiBz Y2FubmluZwotCSAqIHVubG9nZ2VkIHJlbGF0aW9ucyAoc2luY2UgaXQgaW52b2x2ZXMgc2F2aW5n IGFuIGFmZmVjdGVkIHBhZ2UncyBMU04pLgotCSAqIE9wdCBvdXQgb2YgZWFnZXIgcGluIGRyb3Bw aW5nIGR1cmluZyB1bmxvZ2dlZCByZWxhdGlvbiBzY2FucyBmb3Igbm93Ci0JICogKHRoaXMgaXMg cHJlZmVyYWJsZSB0byBvcHRpbmcgb3V0IG9mIGtpbGxfcHJpb3JfdHVwbGUgTFBfREVBRCBzZXR0 aW5nKS4KLQkgKgotCSAqIEFsc28gb3B0IG91dCBvZiBkcm9wcGluZyBsZWFmIHBhZ2UgcGlucyBl YWdlcmx5IGR1cmluZyBiaXRtYXAgc2NhbnMuCi0JICogUGlucyBjYW5ub3QgYmUgaGVsZCBmb3Ig bW9yZSB0aGFuIGFuIGluc3RhbnQgZHVyaW5nIGJpdG1hcCBzY2FucyBlaXRoZXIKLQkgKiB3YXks IHNvIHdlIG1pZ2h0IGFzIHdlbGwgYXZvaWQgd2FzdGluZyBjeWNsZXMgb24gYWNxdWlyaW5nIHBh Z2UgTFNOcy4KLQkgKgotCSAqIFNlZSBuYnRyZWUvUkVBRE1FIHNlY3Rpb24gb24gbWFraW5nIGNv bmN1cnJlbnQgVElEIHJlY3ljbGluZyBzYWZlLgotCSAqCi0JICogTm90ZTogc28tPmRyb3BQaW4g c2hvdWxkIG5ldmVyIGNoYW5nZSBhY3Jvc3MgcmVzY2Fucy4KLQkgKi8KLQlzby0+ZHJvcFBpbiA9 ICghc2Nhbi0+eHNfd2FudF9pdHVwICYmCi0JCQkJICAgSXNNVkNDU25hcHNob3Qoc2Nhbi0+eHNf c25hcHNob3QpICYmCi0JCQkJICAgUmVsYXRpb25OZWVkc1dBTChzY2FuLT5pbmRleFJlbGF0aW9u KSAmJgotCQkJCSAgIHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsKLQotCXNvLT5tYXJrSXRl bUluZGV4ID0gLTE7Ci0Jc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOwotCXNvLT5zY2FuQmVoaW5k ID0gZmFsc2U7Ci0Jc28tPm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxzZTsKLQlCVFNjYW5Qb3NVbnBp bklmUGlubmVkKHNvLT5tYXJrUG9zKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5tYXJrUG9z KTsKLQotCS8qCi0JICogQWxsb2NhdGUgdHVwbGUgd29ya3NwYWNlIGFycmF5cywgaWYgbmVlZGVk IGZvciBhbiBpbmRleC1vbmx5IHNjYW4gYW5kCi0JICogbm90IGFscmVhZHkgZG9uZSBpbiBhIHBy ZXZpb3VzIHJlc2NhbiBjYWxsLiAgVG8gc2F2ZSBvbiBwYWxsb2MKLQkgKiBvdmVyaGVhZCwgYm90 aCB3b3Jrc3BhY2VzIGFyZSBhbGxvY2F0ZWQgYXMgb25lIHBhbGxvYyBibG9jazsgb25seSB0aGlz Ci0JICogZnVuY3Rpb24gYW5kIGJ0ZW5kc2NhbiBrbm93IHRoYXQuCi0JICoKLQkgKiBOT1RFOiB0 aGlzIGRhdGEgc3RydWN0dXJlIGFsc28gbWFrZXMgaXQgc2FmZSB0byByZXR1cm4gZGF0YSBmcm9t IGEKLQkgKiAibmFtZSIgY29sdW1uLCBldmVuIHRob3VnaCBidHJlZSBuYW1lX29wcyB1c2VzIGFu IHVuZGVybHlpbmcgc3RvcmFnZQotCSAqIGRhdGF0eXBlIG9mIGNzdHJpbmcuICBUaGUgcmlzayB0 aGVyZSBpcyB0aGF0ICJuYW1lIiBpcyBzdXBwb3NlZCB0byBiZQotCSAqIHBhZGRlZCB0byBOQU1F REFUQUxFTiwgYnV0IHRoZSBhY3R1YWwgaW5kZXggdHVwbGUgaXMgcHJvYmFibHkgc2hvcnRlci4K LQkgKiBIb3dldmVyLCBzaW5jZSB3ZSBvbmx5IHJldHVybiBkYXRhIG91dCBvZiB0dXBsZXMgc2l0 dGluZyBpbiB0aGUKLQkgKiBjdXJyVHVwbGVzIGFycmF5LCBhIGZldGNoIG9mIE5BTUVEQVRBTEVO IGJ5dGVzIGNhbiBhdCB3b3JzdCBwdWxsIHNvbWUKLQkgKiBkYXRhIG91dCBvZiB0aGUgbWFya1R1 cGxlcyBhcnJheSAtLS0gcnVubmluZyBvZmYgdGhlIGVuZCBvZiBtZW1vcnkgZm9yCi0JICogYSBT SUdTRUdWIGlzIG5vdCBwb3NzaWJsZS4gIFllYWgsIHRoaXMgaXMgdWdseSBhcyBzaW4sIGJ1dCBp dCBiZWF0cwotCSAqIGFkZGluZyBzcGVjaWFsLWNhc2UgdHJlYXRtZW50IGZvciBuYW1lX29wcyBl bHNld2hlcmUuCi0JICovCi0JaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCAmJiBzby0+Y3VyclR1cGxl cyA9PSBOVUxMKQotCXsKLQkJc28tPmN1cnJUdXBsZXMgPSAoY2hhciAqKSBwYWxsb2MoQkxDS1Na ICogMik7Ci0JCXNvLT5tYXJrVHVwbGVzID0gc28tPmN1cnJUdXBsZXMgKyBCTENLU1o7Ci0JfQot CiAJLyoKIAkgKiBSZXNldCB0aGUgc2NhbiBrZXlzCiAJICovCiAJaWYgKHNjYW5rZXkgJiYgc2Nh bi0+bnVtYmVyT2ZLZXlzID4gMCkKIAkJbWVtY3B5KHNjYW4tPmtleURhdGEsIHNjYW5rZXksIHNj YW4tPm51bWJlck9mS2V5cyAqIHNpemVvZihTY2FuS2V5RGF0YSkpOworCXNvLT5uZWVkUHJpbVNj YW4gPSBmYWxzZTsKKwlzby0+c2NhbkJlaGluZCA9IGZhbHNlOworCXNvLT5vcHBvc2l0ZURpckNo ZWNrID0gZmFsc2U7CiAJc28tPm51bWJlck9mS2V5cyA9IDA7CQkvKiB1bnRpbCBfYnRfcHJlcHJv Y2Vzc19rZXlzIHNldHMgaXQgKi8KIAlzby0+bnVtQXJyYXlLZXlzID0gMDsJCS8qIGRpdHRvICov CiB9CiAKKy8qCisgKglidGZyZWViYXRjaCgpIC0tIEZyZWUgYmF0Y2ggcmVzb3VyY2VzLCBpbmNs dWRpbmcgaXRzIGJ1ZmZlciBwaW4KKyAqLwordm9pZAorYnRmcmVlYmF0Y2goSW5kZXhTY2FuRGVz YyBzY2FuLCBCYXRjaEluZGV4U2NhbiBiYXRjaCkKK3sKKwlpZiAoYmF0Y2gtPm51bUtpbGxlZCA+ IDApCisJCV9idF9raWxsaXRlbXMoc2NhbiwgYmF0Y2gpOworCisJaWYgKCFzY2FuLT5iYXRjaHF1 ZXVlLT5kcm9wUGluKQorCXsKKwkJLyogaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayBkaWRuJ3Qg dW5waW4gcGFnZSBlYXJsaWVyLCBkbyBpdCBub3cgKi8KKwkJUmVsZWFzZUJ1ZmZlcihiYXRjaC0+ YnVmKTsKKwkJYmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJfQorCisJaW5kZXhhbV91dGls X2JhdGNoX3JlbGVhc2Uoc2NhbiwgYmF0Y2gpOworfQorCiAvKgogICoJYnRlbmRzY2FuKCkgLS0g Y2xvc2UgZG93biBhIHNjYW4KICAqLwpAQCAtNDcxLDExNiArMzkwLDQ4IEBAIGJ0ZW5kc2NhbihJ bmRleFNjYW5EZXNjIHNjYW4pCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkg c2Nhbi0+b3BhcXVlOwogCi0JLyogd2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQgbG9ja3MsIGJ1 dCBnb3R0YSBkcm9wIHRoZSBwaW5zICovCi0JaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQ b3MpKQotCXsKLQkJLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55 IGtpbGxlZCBpdGVtcyAqLwotCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfYnRfa2lsbGl0 ZW1zKHNjYW4pOwotCQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKLQl9Ci0K LQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwotCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPm1h cmtQb3MpOwotCi0JLyogTm8gbmVlZCB0byBpbnZhbGlkYXRlIHBvc2l0aW9ucywgdGhlIFJBTSBp cyBhYm91dCB0byBiZSBmcmVlZC4gKi8KLQogCS8qIFJlbGVhc2Ugc3RvcmFnZSAqLwogCWlmIChz by0+a2V5RGF0YSAhPSBOVUxMKQogCQlwZnJlZShzby0+a2V5RGF0YSk7CiAJLyogc28tPmFycmF5 S2V5cyBhbmQgc28tPm9yZGVyUHJvY3MgYXJlIGluIGFycmF5Q29udGV4dCAqLwogCWlmIChzby0+ YXJyYXlDb250ZXh0ICE9IE5VTEwpCiAJCU1lbW9yeUNvbnRleHREZWxldGUoc28tPmFycmF5Q29u dGV4dCk7Ci0JaWYgKHNvLT5raWxsZWRJdGVtcyAhPSBOVUxMKQotCQlwZnJlZShzby0+a2lsbGVk SXRlbXMpOwotCWlmIChzby0+Y3VyclR1cGxlcyAhPSBOVUxMKQotCQlwZnJlZShzby0+Y3VyclR1 cGxlcyk7Ci0JLyogc28tPm1hcmtUdXBsZXMgc2hvdWxkIG5vdCBiZSBwZnJlZSdkLCBzZWUgYnRy ZXNjYW4gKi8KIAlwZnJlZShzbyk7CiB9CiAKIC8qCi0gKglidG1hcmtwb3MoKSAtLSBzYXZlIGN1 cnJlbnQgc2NhbiBwb3NpdGlvbgorICoJYnRwb3NyZXNldCgpIC0tIGludmFsaWRhdGUgc2Nhbidz IGFycmF5IGtleXMKICAqLwogdm9pZAotYnRtYXJrcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKK2J0 cG9zcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBtYXJrYmF0Y2gpCiB7 CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCi0JLyog VGhlcmUgbWF5IGJlIGFuIG9sZCBtYXJrIHdpdGggYSBwaW4gKGJ1dCBubyBsb2NrKS4gKi8KLQlC VFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5tYXJrUG9zKTsKKwlpZiAoIXNvLT5udW1BcnJheUtl eXMpCisJCXJldHVybjsKIAogCS8qCi0JICogSnVzdCByZWNvcmQgdGhlIGN1cnJlbnQgaXRlbUlu ZGV4LiAgSWYgd2UgbGF0ZXIgc3RlcCB0byBuZXh0IHBhZ2UKLQkgKiBiZWZvcmUgcmVsZWFzaW5n IHRoZSBtYXJrZWQgcG9zaXRpb24sIF9idF9zdGVwcGFnZSBtYWtlcyBhIGZ1bGwgY29weSBvZgot CSAqIHRoZSBjdXJyUG9zIHN0cnVjdCBpbiBtYXJrUG9zLiAgSWYgKGFzIG9mdGVuIGhhcHBlbnMp IHRoZSBtYXJrIGlzIG1vdmVkCi0JICogYmVmb3JlIHdlIGxlYXZlIHRoZSBwYWdlLCB3ZSBkb24n dCBoYXZlIHRvIGRvIHRoYXQgd29yay4KKwkgKiBDb3JlIHN5c3RlbSBpcyBhYm91dCB0byByZXN0 b3JlIGEgbWFyayBhc3NvY2lhdGVkIHdpdGggYSBwcmV2aW91c2x5CisJICogcmV0dXJuZWQgYmF0 Y2guICBSZXNldCB0aGUgc2NhbidzIGFycmF5cyB0byBtYWtlIGFsbCB0aGlzIHNhZmUuCiAJICov Ci0JaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCQlzby0+bWFya0l0ZW1JbmRl eCA9IHNvLT5jdXJyUG9zLml0ZW1JbmRleDsKKwlfYnRfc3RhcnRfYXJyYXlfa2V5cyhzY2FuLCBt YXJrYmF0Y2gtPmRpcik7CisKKwkvKgorCSAqIENvcmUgc3lzdGVtIHdpbGwgaW52YWxpZGF0ZSBh bGwgb3RoZXIgYmF0Y2hlcy4KKwkgKgorCSAqIERlYWwgd2l0aCB0aGlzIGJ5IHVuc2V0dGluZyBu ZWVkUHJpbVNjYW4gYXMgd2VsbCBhcyBtb3JlUmlnaHQgKG9yIGFzCisJICogd2VsbCBhcyBtb3Jl TGVmdCwgd2hlbiBzY2FubmluZyBiYWNrd2FyZHMpLiAgVGhhdCB3YXksIHRoZSBuZXh0IHRpbWUK KwkgKiBfYnRfbmV4dCBpcyBjYWxsZWQgaXQgd2lsbCBzdGVwIHRvIHRoZSByaWdodCAob3IgdG8g dGhlIGxlZnQpLiAgQXQgdGhhdAorCSAqIHBvaW50IF9idF9yZWFkcGFnZSB3aWxsIHJlc3RvcmUg dGhlIHNjYW4ncyBhcnJheXMgdG8gZWxlbWVudHMgdGhhdAorCSAqIGNvcnJlY3RseSB0cmFjayB0 aGUgbmV4dCBwYWdlJ3MgcG9zaXRpb24gaW4gdGhlIGluZGV4J3Mga2V5IHNwYWNlLgorCSAqLwor CWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKG1hcmtiYXRjaC0+ZGlyKSkKKwkJbWFya2JhdGNo LT5tb3JlUmlnaHQgPSB0cnVlOwogCWVsc2UKLQl7Ci0JCUJUU2NhblBvc0ludmFsaWRhdGUoc28t Pm1hcmtQb3MpOwotCQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwotCX0KLX0KLQotLyoKLSAqCWJ0 cmVzdHJwb3MoKSAtLSByZXN0b3JlIHNjYW4gdG8gbGFzdCBzYXZlZCBwb3NpdGlvbgotICovCi12 b2lkCi1idHJlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKLXsKLQlCVFNjYW5PcGFxdWUgc28g PSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0KLQlpZiAoc28tPm1hcmtJdGVtSW5kZXgg Pj0gMCkKLQl7Ci0JCS8qCi0JCSAqIFRoZSBzY2FuIGhhcyBuZXZlciBtb3ZlZCB0byBhIG5ldyBw YWdlIHNpbmNlIHRoZSBsYXN0IG1hcmsuICBKdXN0Ci0JCSAqIHJlc3RvcmUgdGhlIGl0ZW1JbmRl eC4KLQkJICoKLQkJICogTkI6IEluIHRoaXMgY2FzZSB3ZSBjYW4ndCBjb3VudCBvbiBhbnl0aGlu ZyBpbiBzby0+bWFya1BvcyB0byBiZQotCQkgKiBhY2N1cmF0ZS4KLQkJICovCi0JCXNvLT5jdXJy UG9zLml0ZW1JbmRleCA9IHNvLT5tYXJrSXRlbUluZGV4OwotCX0KLQllbHNlCi0JewotCQkvKgot CQkgKiBUaGUgc2NhbiBtb3ZlZCB0byBhIG5ldyBwYWdlIGFmdGVyIGxhc3QgbWFyayBvciByZXN0 b3JlLCBhbmQgd2UgYXJlCi0JCSAqIG5vdyByZXN0b3JpbmcgdG8gdGhlIG1hcmtlZCBwYWdlLiAg V2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQKLQkJICogbG9ja3MsIGJ1dCBpZiB3ZSdyZSBzdGls bCBob2xkaW5nIHRoZSBwaW4gZm9yIHRoZSBjdXJyZW50IHBvc2l0aW9uLAotCQkgKiB3ZSBtdXN0 IGRyb3AgaXQuCi0JCSAqLwotCQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0J CXsKLQkJCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxs ZWQgaXRlbXMgKi8KLQkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCQlfYnRfa2lsbGl0ZW1z KHNjYW4pOwotCQkJQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3VyclBvcyk7Ci0JCX0KLQot CQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+bWFya1BvcykpCi0JCXsKLQkJCS8qIGJ1bXAgcGlu IG9uIG1hcmsgYnVmZmVyIGZvciBhc3NpZ25tZW50IHRvIGN1cnJlbnQgYnVmZmVyICovCi0JCQlp ZiAoQlRTY2FuUG9zSXNQaW5uZWQoc28tPm1hcmtQb3MpKQotCQkJCUluY3JCdWZmZXJSZWZDb3Vu dChzby0+bWFya1Bvcy5idWYpOwotCQkJbWVtY3B5KCZzby0+Y3VyclBvcywgJnNvLT5tYXJrUG9z LAotCQkJCSAgIG9mZnNldG9mKEJUU2NhblBvc0RhdGEsIGl0ZW1zWzFdKSArCi0JCQkJICAgc28t Pm1hcmtQb3MubGFzdEl0ZW0gKiBzaXplb2YoQlRTY2FuUG9zSXRlbSkpOwotCQkJaWYgKHNvLT5j dXJyVHVwbGVzKQotCQkJCW1lbWNweShzby0+Y3VyclR1cGxlcywgc28tPm1hcmtUdXBsZXMsCi0J CQkJCSAgIHNvLT5tYXJrUG9zLm5leHRUdXBsZU9mZnNldCk7Ci0JCQkvKiBSZXNldCB0aGUgc2Nh bidzIGFycmF5IGtleXMgKHNlZSBfYnRfc3RlcHBhZ2UgZm9yIHdoeSkgKi8KLQkJCWlmIChzby0+ bnVtQXJyYXlLZXlzKQotCQkJewotCQkJCV9idF9zdGFydF9hcnJheV9rZXlzKHNjYW4sIHNvLT5j dXJyUG9zLmRpcik7Ci0JCQkJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOwotCQkJfQotCQl9Ci0J CWVsc2UKLQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCX0KKwkJbWFya2Jh dGNoLT5tb3JlTGVmdCA9IHRydWU7CisJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOworCXNvLT5z Y2FuQmVoaW5kID0gZmFsc2U7CisJc28tPm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxzZTsKIH0KIAog LyoKQEAgLTg5NiwxNSArNzQ3LDYgQEAgX2J0X3BhcmFsbGVsX3NlaXplKEluZGV4U2NhbkRlc2Mg c2NhbiwgQmxvY2tOdW1iZXIgKm5leHRfc2Nhbl9wYWdlLAogCSpuZXh0X3NjYW5fcGFnZSA9IElu dmFsaWRCbG9ja051bWJlcjsKIAkqbGFzdF9jdXJyX3BhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7 CiAKLQkvKgotCSAqIFJlc2V0IHNvLT5jdXJyUG9zLCBhbmQgaW5pdGlhbGl6ZSBtb3JlTGVmdC9t b3JlUmlnaHQgc3VjaCB0aGF0IHRoZSBuZXh0Ci0JICogY2FsbCB0byBfYnRfcmVhZG5leHRwYWdl IHRyZWF0cyB0aGlzIGJhY2tlbmQgc2ltaWxhcmx5IHRvIGEgc2VyaWFsCi0JICogYmFja2VuZCB0 aGF0IHN0ZXBzIGZyb20gKmxhc3RfY3Vycl9wYWdlIHRvICpuZXh0X3NjYW5fcGFnZSAodW5sZXNz IHRoaXMKLQkgKiBiYWNrZW5kJ3Mgc28tPmN1cnJQb3MgaXMgaW5pdGlhbGl6ZWQgYnkgX2J0X3Jl YWRmaXJzdHBhZ2UgYmVmb3JlIHRoZW4pLgotCSAqLwotCUJUU2NhblBvc0ludmFsaWRhdGUoc28t PmN1cnJQb3MpOwotCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gc28tPmN1cnJQb3MubW9yZVJpZ2h0 ID0gdHJ1ZTsKLQogCWlmIChmaXJzdCkKIAl7CiAJCS8qCkBAIC0xMDU0LDggKzg5Niw2IEBAIF9i dF9wYXJhbGxlbF9kb25lKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlCVFBhcmFsbGVsU2NhbkRlc2Mg YnRzY2FuOwogCWJvb2wJCXN0YXR1c19jaGFuZ2VkID0gZmFsc2U7CiAKLQlBc3NlcnQoIUJUU2Nh blBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQogCS8qIERvIG5vdGhpbmcsIGZvciBub24tcGFy YWxsZWwgc2NhbnMgKi8KIAlpZiAocGFyYWxsZWxfc2NhbiA9PSBOVUxMKQogCQlyZXR1cm47CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwppbmRleCBhZWM3MTA5MzYuLjRmYTU5M2Yy YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCkBAIC0yNSw1MiArMjUsMjEg QEAKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAogCi1zdGF0aWMgaW5saW5lIHZvaWQgX2J0X2Ry b3BfbG9ja19hbmRfbWF5YmVfcGluKFJlbGF0aW9uIHJlbCwgQlRTY2FuT3BhcXVlIHNvKTsKIHN0 YXRpYyBCdWZmZXIgX2J0X21vdmVyaWdodChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWws IEJUU2Nhbkluc2VydCBrZXksCiAJCQkJCQkJQnVmZmVyIGJ1ZiwgYm9vbCBmb3J1cGRhdGUsIEJU U3RhY2sgc3RhY2ssCiAJCQkJCQkJaW50IGFjY2Vzcyk7CiBzdGF0aWMgT2Zmc2V0TnVtYmVyIF9i dF9iaW5zcmNoKFJlbGF0aW9uIHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwgQnVmZmVyIGJ1Zik7CiBz dGF0aWMgaW50CV9idF9iaW5zcmNoX3Bvc3RpbmcoQlRTY2FuSW5zZXJ0IGtleSwgUGFnZSBwYWdl LAogCQkJCQkJCQlPZmZzZXROdW1iZXIgb2ZmbnVtKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBfYnRf cmV0dXJuaXRlbShJbmRleFNjYW5EZXNjIHNjYW4sIEJUU2Nhbk9wYXF1ZSBzbyk7Ci1zdGF0aWMg Ym9vbCBfYnRfc3RlcHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7 Ci1zdGF0aWMgYm9vbCBfYnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIE9mZnNl dE51bWJlciBvZmZudW0sCi0JCQkJCQkJICBTY2FuRGlyZWN0aW9uIGRpcik7Ci1zdGF0aWMgYm9v bCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8s Ci0JCQkJCQkJIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8sIFNjYW5EaXJlY3Rpb24gZGlyLAot CQkJCQkJCSBib29sIHNlaXplZCk7CitzdGF0aWMgQmF0Y2hJbmRleFNjYW4gX2J0X3JlYWRmaXJz dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBmaXJzdGJhdGNoLAorCQkJ CQkJCQkJCU9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK3N0YXRpYyBC YXRjaEluZGV4U2NhbiBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tO dW1iZXIgYmxrbm8sCisJCQkJCQkJCQkgICBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vLAorCQkJ CQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wgZmlyc3RwYWdlKTsKIHN0YXRpYyBCdWZm ZXIgX2J0X2xvY2tfYW5kX3ZhbGlkYXRlX2xlZnQoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciAq Ymxrbm8sCiAJCQkJCQkJCQkJIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8pOwotc3RhdGljIGJv b2wgX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwot Ci0KLS8qCi0gKglfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4oKQotICoKLSAqIFVubG9jayBz by0+Y3VyclBvcy5idWYuICBJZiBzY2FuIGlzIHNvLT5kcm9wUGluLCBkcm9wIHRoZSBwaW4sIHRv by4KLSAqIERyb3BwaW5nIHRoZSBwaW4gcHJldmVudHMgVkFDVVVNIGZyb20gYmxvY2tpbmcgb24g YWNxdWlyaW5nIGEgY2xlYW51cCBsb2NrLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9idF9k cm9wX2xvY2tfYW5kX21heWJlX3BpbihSZWxhdGlvbiByZWwsIEJUU2Nhbk9wYXF1ZSBzbykKLXsK LQlpZiAoIXNvLT5kcm9wUGluKQotCXsKLQkJLyogSnVzdCBkcm9wIHRoZSBsb2NrIChub3QgdGhl IHBpbikgKi8KLQkJX2J0X3VubG9ja2J1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0JCXJldHVy bjsKLQl9Ci0KLQkvKgotCSAqIERyb3AgYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbi4KLQkgKgot CSAqIEhhdmUgdG8gc2V0IHNvLT5jdXJyUG9zLmxzbiBzbyB0aGF0IF9idF9raWxsaXRlbXMgaGFz IGEgd2F5IHRvIGRldGVjdAotCSAqIHdoZW4gY29uY3VycmVudCBoZWFwIFRJRCByZWN5Y2xpbmcg YnkgVkFDVVVNIG1pZ2h0IGhhdmUgdGFrZW4gcGxhY2UuCi0JICovCi0JQXNzZXJ0KFJlbGF0aW9u TmVlZHNXQUwocmVsKSk7Ci0Jc28tPmN1cnJQb3MubHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKHNv LT5jdXJyUG9zLmJ1Zik7Ci0JX2J0X3JlbGJ1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0Jc28t PmN1cnJQb3MuYnVmID0gSW52YWxpZEJ1ZmZlcjsKLX0KK3N0YXRpYyBCYXRjaEluZGV4U2NhbiBf YnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJ CQkJICAgQmF0Y2hJbmRleFNjYW4gZmlyc3RiYXRjaCk7CiAKIC8qCiAgKglfYnRfc2VhcmNoKCkg LS0gU2VhcmNoIHRoZSB0cmVlIGZvciBhIHBhcnRpY3VsYXIgc2NhbmtleSwKQEAgLTg2MCwyMCAr ODI5LDE2IEBAIF9idF9jb21wYXJlKFJlbGF0aW9uIHJlbCwKICAqCQljb25kaXRpb25zLCBhbmQg dGhlIHRyZWUgb3JkZXJpbmcuICBXZSBmaW5kIHRoZSBmaXJzdCBpdGVtIChvciwKICAqCQlpZiBi YWNrd2FyZHMgc2NhbiwgdGhlIGxhc3QgaXRlbSkgaW4gdGhlIHRyZWUgdGhhdCBzYXRpc2ZpZXMg dGhlCiAgKgkJcXVhbGlmaWNhdGlvbnMgaW4gdGhlIHNjYW4ga2V5LiAgT24gc3VjY2VzcyBleGl0 LCBkYXRhIGFib3V0IHRoZQotICoJCW1hdGNoaW5nIHR1cGxlKHMpIG9uIHRoZSBwYWdlIGhhcyBi ZWVuIGxvYWRlZCBpbnRvIHNvLT5jdXJyUG9zLiAgV2UnbGwKLSAqCQlkcm9wIGFsbCBsb2NrcyBh bmQgaG9sZCBvbnRvIGEgcGluIG9uIHBhZ2UncyBidWZmZXIsIGV4Y2VwdCBkdXJpbmcKLSAqCQlz by0+ZHJvcFBpbiBzY2Fucywgd2hlbiB3ZSBkcm9wIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4u Ci0gKgkJX2J0X3JldHVybml0ZW0gc2V0cyB0aGUgbmV4dCBpdGVtIHRvIHJldHVybiB0byBzY2Fu IG9uIHN1Y2Nlc3MgZXhpdC4KKyAqCQltYXRjaGluZyB0dXBsZShzKSBvbiB0aGUgcGFnZSBoYXMg YmVlbiBsb2FkZWQgaW50byB0aGUgcmV0dXJuZWQgYmF0Y2guCiAgKgotICogSWYgdGhlcmUgYXJl IG5vIG1hdGNoaW5nIGl0ZW1zIGluIHRoZSBpbmRleCwgd2UgcmV0dXJuIGZhbHNlLCB3aXRoIG5v Ci0gKiBwaW5zIG9yIGxvY2tzIGhlbGQuICBzby0+Y3VyclBvcyB3aWxsIHJlbWFpbiBpbnZhbGlk LgorICogSWYgdGhlcmUgYXJlIG5vIG1hdGNoaW5nIGl0ZW1zIGluIHRoZSBpbmRleCwgd2UganVz dCByZXR1cm4gTlVMTC4KICAqCiAgKiBOb3RlIHRoYXQgc2Nhbi0+a2V5RGF0YVtdLCBhbmQgdGhl IHNvLT5rZXlEYXRhW10gc2NhbmtleSBidWlsdCBmcm9tIGl0LAogICogYXJlIGJvdGggc2VhcmNo LXR5cGUgc2NhbmtleXMgKHNlZSBuYnRyZWUvUkVBRE1FIGZvciBtb3JlIGFib3V0IHRoaXMpLgog ICogV2l0aGluIHRoaXMgcm91dGluZSwgd2UgYnVpbGQgYSB0ZW1wb3JhcnkgaW5zZXJ0aW9uLXR5 cGUgc2NhbmtleSB0byB1c2UKICAqIGluIGxvY2F0aW5nIHRoZSBzY2FuIHN0YXJ0IHBvc2l0aW9u LgogICovCi1ib29sCitCYXRjaEluZGV4U2NhbgogX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxh dGlvbjsKQEAgLTg4Nyw4ICs4NTIsNyBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcikKIAlTdHJhdGVneU51bWJlciBzdHJhdF90b3RhbCA9IEludmFsaWRT dHJhdGVneTsKIAlCbG9ja051bWJlciBibGtubyA9IEludmFsaWRCbG9ja051bWJlciwKIAkJCQls YXN0Y3VycmJsa25vOwotCi0JQXNzZXJ0KCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7 CisJQmF0Y2hJbmRleFNjYW4gZmlyc3RiYXRjaDsKIAogCS8qCiAJICogRXhhbWluZSB0aGUgc2Nh biBrZXlzIGFuZCBlbGltaW5hdGUgYW55IHJlZHVuZGFudCBrZXlzOyBhbHNvIG1hcmsgdGhlCkBA IC05MTMsNyArODc3LDcgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIpCiAJICovCiAJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4gIT0gTlVMTCAmJgogCQkh X2J0X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtubywgJmxhc3RjdXJyYmxrbm8sIHRydWUpKQot CQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiBmYWxzZTsJCQkvKiBkZWZpbml0ZWx5IGRvbmUgKHNv LT5uZWVkUHJpbVNjYW4gaXMgdW5zZXQpICovCiAKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIHNj YW4ncyBhcnJheXMgKGlmIGFueSkgZm9yIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uCkBAIC05 MzAsMTQgKzg5NCw4IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyKQogCQkgKiBfYnRfcmVhZG5leHRwYWdlIHJlbGVhc2VzIHRoZSBzY2FuIGZvciB1cyAo bm90IF9idF9yZWFkZmlyc3RwYWdlKS4KIAkJICovCiAJCUFzc2VydChzY2FuLT5wYXJhbGxlbF9z Y2FuICE9IE5VTEwpOwotCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwotCQlBc3NlcnQoYmxr bm8gIT0gUF9OT05FKTsKIAotCQlpZiAoIV9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxh c3RjdXJyYmxrbm8sIGRpciwgdHJ1ZSkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJX2J0X3JldHVy bml0ZW0oc2Nhbiwgc28pOwotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIF9idF9yZWFkbmV4dHBh Z2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJyYmxrbm8sIGRpciwgdHJ1ZSk7CiAJfQogCiAJLyoKQEAg LTEyMjksNiArMTE4NywxMCBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcikKIAkJfQogCX0KIAorCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBmaXJzdCBiYXRj aCAqLworCWZpcnN0YmF0Y2ggPSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2Moc2NhbiwgTWF4VElE c1BlckJUcmVlUGFnZSwKKwkJCQkJCQkJCQkgIHNjYW4tPnhzX3dhbnRfaXR1cCk7CisKIAkvKgog CSAqIElmIHdlIGZvdW5kIG5vIHVzYWJsZSBib3VuZGFyeSBrZXlzLCB3ZSBoYXZlIHRvIHN0YXJ0 IGZyb20gb25lIGVuZCBvZgogCSAqIHRoZSB0cmVlLiAgV2FsayBkb3duIHRoYXQgZWRnZSB0byB0 aGUgZmlyc3Qgb3IgbGFzdCBrZXksIGFuZCBzY2FuIGZyb20KQEAgLTEyMzcsNyArMTE5OSw3IEBA IF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqIE5v dGU6IGNhbGxzIF9idF9yZWFkZmlyc3RwYWdlIGZvciB1cywgd2hpY2ggcmVsZWFzZXMgdGhlIHBh cmFsbGVsIHNjYW4uCiAJICovCiAJaWYgKGtleXN6ID09IDApCi0JCXJldHVybiBfYnRfZW5kcG9p bnQoc2NhbiwgZGlyKTsKKwkJcmV0dXJuIF9idF9lbmRwb2ludChzY2FuLCBkaXIsIGZpcnN0YmF0 Y2gpOwogCiAJLyoKIAkgKiBXZSB3YW50IHRvIHN0YXJ0IHRoZSBzY2FuIHNvbWV3aGVyZSB3aXRo aW4gdGhlIGluZGV4LiAgU2V0IHVwIGFuCkBAIC0xNTA1LDEyICsxNDY3LDEyIEBAIF9idF9maXJz dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqIHBvc2l0aW9uIG91 cnNlbHZlcyBvbiB0aGUgdGFyZ2V0IGxlYWYgcGFnZS4KIAkgKi8KIAlBc3NlcnQoU2NhbkRpcmVj dGlvbklzQmFja3dhcmQoZGlyKSA9PSBpbnNrZXkuYmFja3dhcmQpOwotCXN0YWNrID0gX2J0X3Nl YXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZzby0+Y3VyclBvcy5idWYsIEJUX1JFQUQpOworCXN0 YWNrID0gX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZmaXJzdGJhdGNoLT5idWYsIEJU X1JFQUQpOwogCiAJLyogZG9uJ3QgbmVlZCB0byBrZWVwIHRoZSBzdGFjayBhcm91bmQuLi4gKi8K IAlfYnRfZnJlZXN0YWNrKHN0YWNrKTsKIAotCWlmICghQnVmZmVySXNWYWxpZChzby0+Y3VyclBv cy5idWYpKQorCWlmICghQnVmZmVySXNWYWxpZChmaXJzdGJhdGNoLT5idWYpKQogCXsKIAkJQXNz ZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKIApAQCAtMTUyNiwxMSArMTQ4OCwxMSBAQCBfYnRfZmly c3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJaWYgKElzb2xhdGlv bklzU2VyaWFsaXphYmxlKCkpCiAJCXsKIAkJCVByZWRpY2F0ZUxvY2tSZWxhdGlvbihyZWwsIHNj YW4tPnhzX3NuYXBzaG90KTsKLQkJCXN0YWNrID0gX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNr ZXksICZzby0+Y3VyclBvcy5idWYsIEJUX1JFQUQpOworCQkJc3RhY2sgPSBfYnRfc2VhcmNoKHJl bCwgTlVMTCwgJmluc2tleSwgJmZpcnN0YmF0Y2gtPmJ1ZiwgQlRfUkVBRCk7CiAJCQlfYnRfZnJl ZXN0YWNrKHN0YWNrKTsKIAkJfQogCi0JCWlmICghQnVmZmVySXNWYWxpZChzby0+Y3VyclBvcy5i dWYpKQorCQlpZiAoIUJ1ZmZlcklzVmFsaWQoZmlyc3RiYXRjaC0+YnVmKSkKIAkJewogCQkJX2J0 X3BhcmFsbGVsX2RvbmUoc2Nhbik7CiAJCQlyZXR1cm4gZmFsc2U7CkBAIC0xNTM4LDExICsxNTAw LDExIEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQog CX0KIAogCS8qIHBvc2l0aW9uIHRvIHRoZSBwcmVjaXNlIGl0ZW0gb24gdGhlIHBhZ2UgKi8KLQlv ZmZudW0gPSBfYnRfYmluc3JjaChyZWwsICZpbnNrZXksIHNvLT5jdXJyUG9zLmJ1Zik7CisJb2Zm bnVtID0gX2J0X2JpbnNyY2gocmVsLCAmaW5za2V5LCBmaXJzdGJhdGNoLT5idWYpOwogCiAJLyoK IAkgKiBOb3cgbG9hZCBkYXRhIGZyb20gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHNjYW4gKHVzdWFs bHkgdGhlIHBhZ2UKLQkgKiBjdXJyZW50bHkgaW4gc28tPmN1cnJQb3MuYnVmKS4KKwkgKiBjdXJy ZW50bHkgaW4gZmlyc3RiYXRjaC5idWYpLgogCSAqCiAJICogSWYgaW5za2V5Lm5leHRrZXkgPSBm YWxzZSBhbmQgaW5za2V5LmJhY2t3YXJkID0gZmFsc2UsIG9mZm51bSBpcwogCSAqIHBvc2l0aW9u ZWQgYXQgdGhlIGZpcnN0IG5vbi1waXZvdCB0dXBsZSA+PSBpbnNrZXkuc2NhbmtleXMuCkBAIC0x NTYwLDE2OCArMTUyMiw2OSBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcikKIAkgKiBmb3IgdGhlIHBhZ2UuICBGb3IgZXhhbXBsZSwgd2hlbiBpbnNrZXkg aXMgYm90aCA8IHRoZSBsZWFmIHBhZ2UncyBoaWdoCiAJICoga2V5IGFuZCA+IGFsbCBvZiBpdHMg bm9uLXBpdm90IHR1cGxlcywgb2ZmbnVtIHdpbGwgYmUgIm1heG9mZiArIDEiLgogCSAqLwotCWlm ICghX2J0X3JlYWRmaXJzdHBhZ2Uoc2Nhbiwgb2ZmbnVtLCBkaXIpKQotCQlyZXR1cm4gZmFsc2U7 Ci0KLQlfYnRfcmV0dXJuaXRlbShzY2FuLCBzbyk7Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuIF9i dF9yZWFkZmlyc3RwYWdlKHNjYW4sIGZpcnN0YmF0Y2gsIG9mZm51bSwgZGlyKTsKIH0KIAogLyoK ICAqCV9idF9uZXh0KCkgLS0gR2V0IHRoZSBuZXh0IGl0ZW0gaW4gYSBzY2FuLgogICoKLSAqCQlP biBlbnRyeSwgc28tPmN1cnJQb3MgZGVzY3JpYmVzIHRoZSBjdXJyZW50IHBhZ2UsIHdoaWNoIG1h eSBiZSBwaW5uZWQKLSAqCQlidXQgaXMgbm90IGxvY2tlZCwgYW5kIHNvLT5jdXJyUG9zLml0ZW1J bmRleCBpZGVudGlmaWVzIHdoaWNoIGl0ZW0gd2FzCi0gKgkJcHJldmlvdXNseSByZXR1cm5lZC4K KyAqCQlPbiBlbnRyeSwgcHJpb3JiYXRjaCBkZXNjcmliZXMgdGhlIGJhdGNoIHRoYXQgd2FzIGxh c3QgcmV0dXJuZWQgYnkKKyAqCQlidGdldGJhdGNoLiAgV2UnbGwgdXNlIHRoZSBwcmlvciBiYXRj aCdzIHBvc2l0aW9uaW5nIGluZm9ybWF0aW9uIHRvCisgKgkJZGVjaWRlIHdoaWNoIHBhZ2UgdG8g cmVhZCBuZXh0LgogICoKLSAqCQlPbiBzdWNjZXNzIGV4aXQsIHNvLT5jdXJyUG9zIGlzIHVwZGF0 ZWQgYXMgbmVlZGVkLCBhbmQgX2J0X3JldHVybml0ZW0KLSAqCQlzZXRzIHRoZSBuZXh0IGl0ZW0g dG8gcmV0dXJuIHRvIHRoZSBzY2FuLiAgc28tPmN1cnJQb3MgcmVtYWlucyB2YWxpZC4KKyAqCQlP biBzdWNjZXNzIGV4aXQsIHJldHVybnMgdGhlIG5leHQgYmF0Y2guICBUaGVyZSBtdXN0IGJlIGF0 IGxlYXN0IG9uZQorICoJCW1hdGNoaW5nIHR1cGxlIG9uIGFueSByZXR1cm5lZCBiYXRjaCAoZWxz ZSB3ZSdkIGp1c3QgcmV0dXJuIE5VTEwpLgogICoKLSAqCQlPbiBmYWlsdXJlIGV4aXQgKG5vIG1v cmUgdHVwbGVzKSwgd2UgaW52YWxpZGF0ZSBzby0+Y3VyclBvcy4gIEl0J2xsCi0gKgkJc3RpbGwg YmUgcG9zc2libGUgZm9yIHRoZSBzY2FuIHRvIHJldHVybiB0dXBsZXMgYnkgY2hhbmdpbmcgZGly ZWN0aW9uLAotICoJCXRob3VnaCB3ZSdsbCBuZWVkIHRvIGNhbGwgX2J0X2ZpcnN0IGFuZXcgaW4g dGhhdCBvdGhlciBkaXJlY3Rpb24uCisgKgkJT24gZmFpbHVyZSBleGl0IChubyBtb3JlIHR1cGxl cyksIHdlIHJldHVybiBOVUxMLiAgSXQnbGwgc3RpbGwgYmUKKyAqCQlwb3NzaWJsZSBmb3IgdGhl IHNjYW4gdG8gcmV0dXJuIHR1cGxlcyBieSBjaGFuZ2luZyBkaXJlY3Rpb24sIHRob3VnaAorICoJ CXdlJ2xsIG5lZWQgdG8gY2FsbCBfYnRfZmlyc3QgYW5ldyBpbiB0aGF0IG90aGVyIGRpcmVjdGlv bi4KICAqLwotYm9vbAotX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcikKLXsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7 Ci0KLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCi0JLyoKLQkgKiBB ZHZhbmNlIHRvIG5leHQgdHVwbGUgb24gY3VycmVudCBwYWdlOyBvciBpZiB0aGVyZSdzIG5vIG1v cmUsIHRyeSB0bwotCSAqIHN0ZXAgdG8gdGhlIG5leHQgcGFnZSB3aXRoIGRhdGEuCi0JICovCi0J aWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQl7Ci0JCWlmICgrK3NvLT5jdXJyUG9z Lml0ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxhc3RJdGVtKQotCQl7Ci0JCQlpZiAoIV9idF9zdGVw cGFnZShzY2FuLCBkaXIpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQllbHNlCi0Jewot CQlpZiAoLS1zby0+Y3VyclBvcy5pdGVtSW5kZXggPCBzby0+Y3VyclBvcy5maXJzdEl0ZW0pCi0J CXsKLQkJCWlmICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRpcikpCi0JCQkJcmV0dXJuIGZhbHNlOwot CQl9Ci0JfQotCi0JX2J0X3JldHVybml0ZW0oc2Nhbiwgc28pOwotCXJldHVybiB0cnVlOwotfQot Ci0vKgotICogUmV0dXJuIHRoZSBpbmRleCBpdGVtIGZyb20gc28tPmN1cnJQb3MuaXRlbXNbc28t PmN1cnJQb3MuaXRlbUluZGV4XSB0byB0aGUKLSAqIGluZGV4IHNjYW4gYnkgc2V0dGluZyB0aGUg cmVsZXZhbnQgZmllbGRzIGluIGNhbGxlcidzIGluZGV4IHNjYW4gZGVzY3JpcHRvcgotICovCi1z dGF0aWMgaW5saW5lIHZvaWQKLV9idF9yZXR1cm5pdGVtKEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRT Y2FuT3BhcXVlIHNvKQotewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9z Lml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF07Ci0KLQkvKiBNb3N0IHJlY2VudCBfYnRfcmVh ZHBhZ2UgbXVzdCBoYXZlIHN1Y2NlZWRlZCAqLwotCUFzc2VydChCVFNjYW5Qb3NJc1ZhbGlkKHNv LT5jdXJyUG9zKSk7Ci0JQXNzZXJ0KHNvLT5jdXJyUG9zLml0ZW1JbmRleCA+PSBzby0+Y3VyclBv cy5maXJzdEl0ZW0pOwotCUFzc2VydChzby0+Y3VyclBvcy5pdGVtSW5kZXggPD0gc28tPmN1cnJQ b3MubGFzdEl0ZW0pOwotCi0JLyogUmV0dXJuIG5leHQgaXRlbSwgcGVyIGFtZ2V0dHVwbGUgY29u dHJhY3QgKi8KLQlzY2FuLT54c19oZWFwdGlkID0gY3Vyckl0ZW0tPmhlYXBUaWQ7Ci0JaWYgKHNv LT5jdXJyVHVwbGVzKQotCQlzY2FuLT54c19pdHVwID0gKEluZGV4VHVwbGUpIChzby0+Y3VyclR1 cGxlcyArIGN1cnJJdGVtLT50dXBsZU9mZnNldCk7Ci19Ci0KLS8qCi0gKglfYnRfc3RlcHBhZ2Uo KSAtLSBTdGVwIHRvIG5leHQgcGFnZSBjb250YWluaW5nIHZhbGlkIGRhdGEgZm9yIHNjYW4KLSAq Ci0gKiBXcmFwcGVyIG9uIF9idF9yZWFkbmV4dHBhZ2UgdGhhdCBwZXJmb3JtcyBmaW5hbCBzdGVw cyBmb3IgdGhlIGN1cnJlbnQgcGFnZS4KLSAqCi0gKiBPbiBlbnRyeSwgc28tPmN1cnJQb3MgbXVz dCBiZSB2YWxpZC4gIEl0cyBidWZmZXIgd2lsbCBiZSBwaW5uZWQsIHRob3VnaAotICogbmV2ZXIg bG9ja2VkLiAoQWN0dWFsbHksIHdoZW4gc28tPmRyb3BQaW4gdGhlcmUgd29uJ3QgZXZlbiBiZSBh IHBpbiBoZWxkLAotICogdGhvdWdoIHNvLT5jdXJyUG9zLmN1cnJQYWdlIG11c3Qgc3RpbGwgYmUg c2V0IHRvIGEgdmFsaWQgYmxvY2sgbnVtYmVyLikKLSAqLwotc3RhdGljIGJvb2wKLV9idF9zdGVw cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorQmF0Y2hJbmRleFNj YW4KK19idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIEJhdGNo SW5kZXhTY2FuIHByaW9yYmF0Y2gpCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1 ZSkgc2Nhbi0+b3BhcXVlOwogCUJsb2NrTnVtYmVyIGJsa25vLAogCQkJCWxhc3RjdXJyYmxrbm87 CiAKLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCi0JLyogQmVmb3Jl IGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwotCWlm IChzby0+bnVtS2lsbGVkID4gMCkKLQkJX2J0X2tpbGxpdGVtcyhzY2FuKTsKLQotCS8qCi0JICog QmVmb3JlIHdlIG1vZGlmeSBjdXJyUG9zLCBtYWtlIGEgY29weSBvZiB0aGUgcGFnZSBkYXRhIGlm IHRoZXJlIHdhcyBhCi0JICogbWFyayBwb3NpdGlvbiB0aGF0IG5lZWRzIGl0LgotCSAqLwotCWlm IChzby0+bWFya0l0ZW1JbmRleCA+PSAwKQotCXsKLQkJLyogYnVtcCBwaW4gb24gY3VycmVudCBi dWZmZXIgZm9yIGFzc2lnbm1lbnQgdG8gbWFyayBidWZmZXIgKi8KLQkJaWYgKEJUU2NhblBvc0lz UGlubmVkKHNvLT5jdXJyUG9zKSkKLQkJCUluY3JCdWZmZXJSZWZDb3VudChzby0+Y3VyclBvcy5i dWYpOwotCQltZW1jcHkoJnNvLT5tYXJrUG9zLCAmc28tPmN1cnJQb3MsCi0JCQkgICBvZmZzZXRv ZihCVFNjYW5Qb3NEYXRhLCBpdGVtc1sxXSkgKwotCQkJICAgc28tPmN1cnJQb3MubGFzdEl0ZW0g KiBzaXplb2YoQlRTY2FuUG9zSXRlbSkpOwotCQlpZiAoc28tPm1hcmtUdXBsZXMpCi0JCQltZW1j cHkoc28tPm1hcmtUdXBsZXMsIHNvLT5jdXJyVHVwbGVzLAotCQkJCSAgIHNvLT5jdXJyUG9zLm5l eHRUdXBsZU9mZnNldCk7Ci0JCXNvLT5tYXJrUG9zLml0ZW1JbmRleCA9IHNvLT5tYXJrSXRlbUlu ZGV4OwotCQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwotCi0JCS8qCi0JCSAqIElmIHdlJ3JlIGp1 c3QgYWJvdXQgdG8gc3RhcnQgdGhlIG5leHQgcHJpbWl0aXZlIGluZGV4IHNjYW4KLQkJICogKHBv c3NpYmxlIHdpdGggYSBzY2FuIHRoYXQgaGFzIGFycmF5cyBrZXlzLCBhbmQgbmVlZHMgdG8gc2tp cCB0bwotCQkgKiBjb250aW51ZSBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbiksIG1vcmVM ZWZ0L21vcmVSaWdodCBvbmx5Ci0JCSAqIGluZGljYXRlIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQg cHJpbWl0aXZlIGluZGV4IHNjYW4uICBUaGV5IG11c3QKLQkJICogbmV2ZXIgYmUgdGFrZW4gdG8g aW5kaWNhdGUgdGhhdCB0aGUgdG9wLWxldmVsIGluZGV4IHNjYW4gaGFzIGVuZGVkCi0JCSAqICh0 aGF0IHdvdWxkIGJlIHdyb25nKS4KLQkJICoKLQkJICogV2UgY291bGQgaGFuZGxlIHRoaXMgY2Fz ZSBieSB0cmVhdGluZyB0aGUgY3VycmVudCBhcnJheSBrZXlzIGFzCi0JCSAqIG1hcmtQb3Mgc3Rh dGUuICBCdXQgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGFycmF5IHN0YXRlIGxpa2UgdGhpcwot CQkgKiB3b3VsZCBhZGQgY29tcGxleGl0eS4gIEluc3RlYWQsIHdlIGp1c3QgdW5zZXQgbWFya1Bv cydzIGNvcHkgb2YKLQkJICogbW9yZVJpZ2h0IG9yIG1vcmVMZWZ0ICh3aGljaGV2ZXIgbWlnaHQg YmUgYWZmZWN0ZWQpLCB3aGlsZSBtYWtpbmcKLQkJICogYnRyZXN0cnBvcyByZXNldCB0aGUgc2Nh bidzIGFycmF5cyB0byB0aGVpciBpbml0aWFsIHNjYW4gcG9zaXRpb25zLgotCQkgKiBJbiBlZmZl Y3QsIGJ0cmVzdHJwb3MgbGVhdmVzIGFkdmFuY2luZyB0aGUgYXJyYXlzIHVwIHRvIHRoZSBmaXJz dAotCQkgKiBfYnRfcmVhZHBhZ2UgY2FsbCAodGhhdCB0YWtlcyBwbGFjZSBhZnRlciBpdCBoYXMg cmVzdG9yZWQgbWFya1BvcykuCi0JCSAqLwotCQlpZiAoc28tPm5lZWRQcmltU2NhbikKLQkJewot CQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoc28tPmN1cnJQb3MuZGlyKSkKLQkJCQlzby0+ bWFya1Bvcy5tb3JlUmlnaHQgPSB0cnVlOwotCQkJZWxzZQotCQkJCXNvLT5tYXJrUG9zLm1vcmVM ZWZ0ID0gdHJ1ZTsKLQkJfQotCi0JCS8qIG1hcmsvcmVzdG9yZSBub3Qgc3VwcG9ydGVkIGJ5IHBh cmFsbGVsIHNjYW5zICovCi0JCUFzc2VydCghc2Nhbi0+cGFyYWxsZWxfc2Nhbik7Ci0JfQotCi0J QlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3VyclBvcyk7CisJQXNzZXJ0KEJsb2NrTnVtYmVy SXNWYWxpZChwcmlvcmJhdGNoLT5jdXJyUGFnZSkpOwogCiAJLyogV2FsayB0byB0aGUgbmV4dCBw YWdlIHdpdGggZGF0YSAqLwogCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCi0JCWJs a25vID0gc28tPmN1cnJQb3MubmV4dFBhZ2U7CisJCWJsa25vID0gcHJpb3JiYXRjaC0+bmV4dFBh Z2U7CiAJZWxzZQotCQlibGtubyA9IHNvLT5jdXJyUG9zLnByZXZQYWdlOwotCWxhc3RjdXJyYmxr bm8gPSBzby0+Y3VyclBvcy5jdXJyUGFnZTsKKwkJYmxrbm8gPSBwcmlvcmJhdGNoLT5wcmV2UGFn ZTsKKwlsYXN0Y3VycmJsa25vID0gcHJpb3JiYXRjaC0+Y3VyclBhZ2U7CiAKIAkvKgogCSAqIENh bmNlbCBwcmltaXRpdmUgaW5kZXggc2NhbnMgdGhhdCB3ZXJlIHNjaGVkdWxlZCB3aGVuIHRoZSBj YWxsIHRvCi0JICogX2J0X3JlYWRwYWdlIGZvciBjdXJyUG9zIGhhcHBlbmVkIHRvIHVzZSB0aGUg b3Bwb3NpdGUgZGlyZWN0aW9uIHRvIHRoZQotCSAqIG9uZSB0aGF0IHdlJ3JlIHN0ZXBwaW5nIGlu IG5vdy4gIChJdCdzIG9rYXkgdG8gbGVhdmUgdGhlIHNjYW4ncyBhcnJheQotCSAqIGtleXMgYXMt aXMsIHNpbmNlIHRoZSBuZXh0IF9idF9yZWFkcGFnZSB3aWxsIGFkdmFuY2UgdGhlbS4pCisJICog X2J0X3JlYWRwYWdlIGZvciBwb3MgaGFwcGVuZWQgdG8gdXNlIHRoZSBvcHBvc2l0ZSBkaXJlY3Rp b24gdG8gdGhlIG9uZQorCSAqIHRoYXQgd2UncmUgc3RlcHBpbmcgaW4gbm93LiAgKEl0J3Mgb2th eSB0byBsZWF2ZSB0aGUgc2NhbidzIGFycmF5IGtleXMKKwkgKiBhcy1pcywgc2luY2UgdGhlIG5l eHQgX2J0X3JlYWRwYWdlIHdpbGwgYWR2YW5jZSB0aGVtLikKIAkgKi8KLQlpZiAoc28tPmN1cnJQ b3MuZGlyICE9IGRpcikKKwlpZiAocHJpb3JiYXRjaC0+ZGlyICE9IGRpcikKIAkJc28tPm5lZWRQ cmltU2NhbiA9IGZhbHNlOwogCisJaWYgKGJsa25vID09IFBfTk9ORSB8fAorCQkoU2NhbkRpcmVj dGlvbklzRm9yd2FyZChkaXIpID8KKwkJICFwcmlvcmJhdGNoLT5tb3JlUmlnaHQgOiAhcHJpb3Ji YXRjaC0+bW9yZUxlZnQpKQorCXsKKwkJLyoKKwkJICogcHJpb3JiYXRjaCBfYnRfcmVhZHBhZ2Ug Y2FsbCBlbmRlZCBzY2FuIGluIHRoaXMgZGlyZWN0aW9uICh0aG91Z2gKKwkJICogaWYgc28tPm5l ZWRQcmltU2NhbiB3YXMgc2V0IHRoZSBzY2FuIHdpbGwgY29udGludWUgaW4gX2J0X2ZpcnN0KQor CQkgKi8KKwkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJCXJldHVybiBOVUxMOworCX0KKwor CS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6ZSB0aGUgc2NhbiB0byBnZXQgbmV4dCBibGtubyAq LworCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwgJiYKKwkJIV9idF9wYXJhbGxlbF9z ZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBmYWxzZSkpCisJCXJldHVybiBOVUxM OwkJCS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJpbVNjYW4gd2Fzbid0IHNldCAqLworCiAJcmV0dXJu IF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJyYmxrbm8sIGRpciwgZmFsc2Up OwogfQogCisKIC8qCiAgKglfYnRfcmVhZGZpcnN0cGFnZSgpIC0tIFJlYWQgZmlyc3QgcGFnZSBj b250YWluaW5nIHZhbGlkIGRhdGEgZm9yIF9idF9maXJzdAogICoKQEAgLTE3MzEsNzMgKzE1OTQs OTAgQEAgX2J0X3N0ZXBwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp CiAgKiB0byBzdG9wIHRoZSBzY2FuIG9uIHRoaXMgcGFnZSBieSBjYWxsaW5nIF9idF9jaGVja2tl eXMgYWdhaW5zdCB0aGUgaGlnaAogICoga2V5LiAgU2VlIF9idF9yZWFkcGFnZSBmb3IgZnVsbCBk ZXRhaWxzLgogICoKLSAqIE9uIGVudHJ5LCBzby0+Y3VyclBvcyBtdXN0IGJlIHBpbm5lZCBhbmQg bG9ja2VkIChzbyBvZmZudW0gc3RheXMgdmFsaWQpLgorICogT24gZW50cnksIGZpcnN0YmF0Y2gg bXVzdCBiZSBwaW5uZWQgYW5kIGxvY2tlZCAoc28gb2ZmbnVtIHN0YXlzIHZhbGlkKS4KICAqIFBh cmFsbGVsIHNjYW4gY2FsbGVycyBtdXN0IGhhdmUgc2VpemVkIHRoZSBzY2FuIGJlZm9yZSBjYWxs aW5nIGhlcmUuCiAgKgotICogT24gZXhpdCwgd2UnbGwgaGF2ZSB1cGRhdGVkIHNvLT5jdXJyUG9z IGFuZCByZXRhaW5lZCBsb2NrcyBhbmQgcGlucworICogT24gZXhpdCwgd2UnbGwgaGF2ZSB1cGRh dGVkIGZpcnN0YmF0Y2ggYW5kIHJldGFpbmVkIGxvY2tzIGFuZCBwaW5zCiAgKiBhY2NvcmRpbmcg dG8gdGhlIHNhbWUgcnVsZXMgYXMgdGhvc2UgbGFpZCBvdXQgZm9yIF9idF9yZWFkbmV4dHBhZ2Ug ZXhpdC4KLSAqIExpa2UgX2J0X3JlYWRuZXh0cGFnZSwgb3VyIHJldHVybiB2YWx1ZSBpbmRpY2F0 ZXMgaWYgdGhlcmUgYXJlIGFueSBtYXRjaGluZwotICogcmVjb3JkcyBpbiB0aGUgZ2l2ZW4gZGly ZWN0aW9uLgogICoKICAqIFdlIGFsd2F5cyByZWxlYXNlIHRoZSBzY2FuIGZvciBhIHBhcmFsbGVs IHNjYW4gY2FsbGVyLCByZWdhcmRsZXNzIG9mCiAgKiBzdWNjZXNzIG9yIGZhaWx1cmU7IHdlJ2xs IGNhbGwgX2J0X3BhcmFsbGVsX3JlbGVhc2UgYXMgc29vbiBhcyBwb3NzaWJsZS4KICAqLwotc3Rh dGljIGJvb2wKLV9idF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgT2Zmc2V0TnVt YmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpCitzdGF0aWMgQmF0Y2hJbmRleFNjYW4KK19i dF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4gZmlyc3Ri YXRjaCwKKwkJCQkgIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKQogewog CUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlCbG9ja051 bWJlciBibGtubywKKwkJCQlsYXN0Y3VycmJsa25vOwogCi0Jc28tPm51bUtpbGxlZCA9IDA7CQkJ LyoganVzdCBwYXJhbm9pYSAqLwotCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7CQkvKiBkaXR0byAq LwotCi0JLyogSW5pdGlhbGl6ZSBzby0+Y3VyclBvcyBmb3IgdGhlIGZpcnN0IHBhZ2UgKHBhZ2Ug aW4gc28tPmN1cnJQb3MuYnVmKSAqLworCS8qIEluaXRpYWxpemUgZmlyc3RiYXRjaCdzIHBvc2l0 aW9uIGZvciB0aGUgZmlyc3QgcGFnZSAqLwogCWlmIChzby0+bmVlZFByaW1TY2FuKQogCXsKIAkJ QXNzZXJ0KHNvLT5udW1BcnJheUtleXMpOwogCi0JCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gdHJ1 ZTsKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKKwkJZmlyc3RiYXRjaC0+bW9yZUxl ZnQgPSB0cnVlOworCQlmaXJzdGJhdGNoLT5tb3JlUmlnaHQgPSB0cnVlOwogCQlzby0+bmVlZFBy aW1TY2FuID0gZmFsc2U7CiAJfQogCWVsc2UgaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGly KSkKIAl7Ci0JCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gZmFsc2U7Ci0JCXNvLT5jdXJyUG9zLm1v cmVSaWdodCA9IHRydWU7CisJCWZpcnN0YmF0Y2gtPm1vcmVMZWZ0ID0gZmFsc2U7CisJCWZpcnN0 YmF0Y2gtPm1vcmVSaWdodCA9IHRydWU7CiAJfQogCWVsc2UKIAl7Ci0JCXNvLT5jdXJyUG9zLm1v cmVMZWZ0ID0gdHJ1ZTsKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gZmFsc2U7CisJCWZpcnN0 YmF0Y2gtPm1vcmVMZWZ0ID0gdHJ1ZTsKKwkJZmlyc3RiYXRjaC0+bW9yZVJpZ2h0ID0gZmFsc2U7 CiAJfQogCiAJLyoKIAkgKiBBdHRlbXB0IHRvIGxvYWQgbWF0Y2hpbmcgdHVwbGVzIGZyb20gdGhl IGZpcnN0IHBhZ2UuCiAJICoKLQkgKiBOb3RlIHRoYXQgX2J0X3JlYWRwYWdlIHdpbGwgZmluaXNo IGluaXRpYWxpemluZyB0aGUgc28tPmN1cnJQb3MgZmllbGRzLgorCSAqIE5vdGUgdGhhdCBfYnRf cmVhZHBhZ2Ugd2lsbCBmaW5pc2ggaW5pdGlhbGl6aW5nIHRoZSBmaXJzdGJhdGNoIGZpZWxkcy4K IAkgKiBfYnRfcmVhZHBhZ2UgYWxzbyByZWxlYXNlcyBwYXJhbGxlbCBzY2FuIChldmVuIHdoZW4g aXQgcmV0dXJucyBmYWxzZSkuCiAJICovCi0JaWYgKF9idF9yZWFkcGFnZShzY2FuLCBkaXIsIG9m Zm51bSwgdHJ1ZSkpCisJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBmaXJzdGJhdGNoLCBkaXIsIG9m Zm51bSwgdHJ1ZSkpCiAJewotCQlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwot Ci0JCS8qCi0JCSAqIF9idF9yZWFkcGFnZSBzdWNjZWVkZWQuICBEcm9wIHRoZSBsb2NrIChhbmQg bWF5YmUgdGhlIHBpbikgb24KLQkJICogc28tPmN1cnJQb3MuYnVmIGluIHByZXBhcmF0aW9uIGZv ciBidGdldHR1cGxlIHJldHVybmluZyB0dXBsZXMuCi0JCSAqLwotCQlBc3NlcnQoQlRTY2FuUG9z SXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKLQkJX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKHJl bCwgc28pOwotCQlyZXR1cm4gdHJ1ZTsKKwkJLyogX2J0X3JlYWRwYWdlIHNhdmVkIG9uZSBvciBt b3JlIG1hdGNoZXMgaW4gZmlyc3RiYXRjaC5pdGVtc1tdICovCisJCWluZGV4YW1fdXRpbF9iYXRj aF91bmxvY2soc2NhbiwgZmlyc3RiYXRjaCk7CisJCXJldHVybiBmaXJzdGJhdGNoOwogCX0KIAot CS8qIFRoZXJlJ3Mgbm8gYWN0dWFsbHktbWF0Y2hpbmcgZGF0YSBvbiB0aGUgcGFnZSBpbiBzby0+ Y3VyclBvcy5idWYgKi8KLQlfYnRfdW5sb2NrYnVmKHNjYW4tPmluZGV4UmVsYXRpb24sIHNvLT5j dXJyUG9zLmJ1Zik7CisJLyogVGhlcmUncyBubyBhY3R1YWxseS1tYXRjaGluZyBkYXRhIG9uIHRo ZSBwYWdlICovCisJX2J0X3JlbGJ1ZihzY2FuLT5pbmRleFJlbGF0aW9uLCBmaXJzdGJhdGNoLT5i dWYpOworCWZpcnN0YmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7CiAKLQkvKiBDYWxsIF9idF9y ZWFkbmV4dHBhZ2UgdXNpbmcgaXRzIF9idF9zdGVwcGFnZSB3cmFwcGVyIGZ1bmN0aW9uICovCi0J aWYgKCFfYnRfc3RlcHBhZ2Uoc2NhbiwgZGlyKSkKLQkJcmV0dXJuIGZhbHNlOworCS8qIFdhbGsg dG8gdGhlIG5leHQgcGFnZSB3aXRoIGRhdGEgKi8KKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2Fy ZChkaXIpKQorCQlibGtubyA9IGZpcnN0YmF0Y2gtPm5leHRQYWdlOworCWVsc2UKKwkJYmxrbm8g PSBmaXJzdGJhdGNoLT5wcmV2UGFnZTsKKwlsYXN0Y3VycmJsa25vID0gZmlyc3RiYXRjaC0+Y3Vy clBhZ2U7CiAKLQkvKiBfYnRfcmVhZHBhZ2UgZm9yIGEgbGF0ZXIgcGFnZSAobm93IGluIHNvLT5j dXJyUG9zKSBzdWNjZWVkZWQgKi8KLQlyZXR1cm4gdHJ1ZTsKKwlBc3NlcnQoZmlyc3RiYXRjaC0+ ZGlyID09IGRpcik7CisKKwlpZiAoYmxrbm8gPT0gUF9OT05FIHx8CisJCShTY2FuRGlyZWN0aW9u SXNGb3J3YXJkKGRpcikgPworCQkgIWZpcnN0YmF0Y2gtPm1vcmVSaWdodCA6ICFmaXJzdGJhdGNo LT5tb3JlTGVmdCkpCisJeworCQkvKgorCQkgKiBmaXJzdGJhdGNoIF9idF9yZWFkcGFnZSBjYWxs IGVuZGVkIHNjYW4gaW4gdGhpcyBkaXJlY3Rpb24gKHRob3VnaAorCQkgKiBpZiBzby0+bmVlZFBy aW1TY2FuIHdhcyBzZXQgdGhlIHNjYW4gd2lsbCBjb250aW51ZSBpbiBfYnRfZmlyc3QpCisJCSAq LworCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBmaXJzdGJhdGNoKTsKKwkJX2J0 X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJCXJldHVybiBOVUxMOworCX0KKworCWluZGV4YW1fdXRp bF9iYXRjaF9yZWxlYXNlKHNjYW4sIGZpcnN0YmF0Y2gpOworCisJLyogcGFyYWxsZWwgc2NhbiBt dXN0IHNlaXplIHRoZSBzY2FuIHRvIGdldCBuZXh0IGJsa25vICovCisJaWYgKHNjYW4tPnBhcmFs bGVsX3NjYW4gIT0gTlVMTCAmJgorCQkhX2J0X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtubywg Jmxhc3RjdXJyYmxrbm8sIGZhbHNlKSkKKwkJcmV0dXJuIE5VTEw7CQkJLyogZG9uZSBpZmYgc28t Pm5lZWRQcmltU2NhbiB3YXNuJ3Qgc2V0ICovCisKKwlyZXR1cm4gX2J0X3JlYWRuZXh0cGFnZShz Y2FuLCBibGtubywgbGFzdGN1cnJibGtubywgZGlyLCBmYWxzZSk7CiB9CiAKIC8qCkBAIC0xODA3 LDEwMiArMTY4Nyw2OSBAQCBfYnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIE9m ZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKQogICogcHJldmlvdXNseS1zYXZl ZCByaWdodCBsaW5rIG9yIGxlZnQgbGluay4gIGxhc3RjdXJyYmxrbm8gaXMgdGhlIHBhZ2UgdGhh dAogICogd2FzIGN1cnJlbnQgYXQgdGhlIHBvaW50IHdoZXJlIHRoZSBibGtubyBsaW5rIHdhcyBz YXZlZCwgd2hpY2ggd2UgdXNlIHRvCiAgKiByZWFzb24gYWJvdXQgY29uY3VycmVudCBwYWdlIHNw bGl0cy9wYWdlIGRlbGV0aW9ucyBkdXJpbmcgYmFja3dhcmRzIHNjYW5zLgotICogSW4gdGhlIGNv bW1vbiBjYXNlIHdoZXJlIHNlaXplZD1mYWxzZSwgYmxrbm8gaXMgZWl0aGVyIHNvLT5jdXJyUG9z Lm5leHRQYWdlCi0gKiBvciBzby0+Y3VyclBvcy5wcmV2UGFnZSwgYW5kIGxhc3RjdXJyYmxrbm8g aXMgc28tPmN1cnJQb3MuY3VyclBhZ2UuCisgKiBibGtubyBpcyB0aGUgcHJpb3Igc2NhbiBwb3Np dGlvbidzIG5leHRQYWdlIG9yIHByZXZQYWdlIChkZXBlbmRpbmcgb24gc2NhbgorICogZGlyZWN0 aW9uKSwgYW5kIGxhc3RjdXJyYmxrbm8gaXMgdGhlIHByaW9yIHBvc2l0aW9uJ3MgY3VyclBhZ2Uu CiAgKgotICogT24gZW50cnksIHNvLT5jdXJyUG9zIHNob3VsZG4ndCBiZSBsb2NrZWQgYnkgY2Fs bGVyLiAgc28tPmN1cnJQb3MuYnVmIG11c3QKLSAqIGJlIEludmFsaWRCdWZmZXIvdW5waW5uZWQg YXMgbmVlZGVkIGJ5IGNhbGxlciAobm90ZSB0aGF0IGxhc3RjdXJyYmxrbm8KLSAqIHdvbid0IG5l ZWQgdG8gYmUgcmVhZCBhZ2FpbiBpbiBhbG1vc3QgYWxsIGNhc2VzKS4gIFBhcmFsbGVsIHNjYW4g Y2FsbGVycwotICogdGhhdCBzZWl6ZWQgdGhlIHNjYW4gYmVmb3JlIGNhbGxpbmcgaGVyZSBzaG91 bGQgcGFzcyBzZWl6ZWQ9dHJ1ZTsgc3VjaCBhCi0gKiBjYWxsZXIncyBibGtubyBhbmQgbGFzdGN1 cnJibGtubyBhcmd1bWVudHMgY29tZSBmcm9tIHRoZSBzZWl6ZWQgc2Nhbi4KLSAqIHNlaXplZD1m YWxzZSBjYWxsZXJzIGp1c3QgcGFzcyB1cyB0aGUgYmxrbm8vbGFzdGN1cnJibGtubyB0YWtlbiBm cm9tIHRoZWlyCi0gKiBzby0+Y3VyclBvcywgd2hpY2ggKGFsb25nIHdpdGggc28tPmN1cnJQb3Mg aXRzZWxmKSBjYW4gYmUgdXNlZCB0byBlbmQgdGhlCi0gKiBzY2FuLiAgQSBzZWl6ZWQ9ZmFsc2Ug Y2FsbGVyJ3MgYmxrbm8gY2FuIG5ldmVyIGJlIGFzc3VtZWQgdG8gYmUgdGhlIHBhZ2UKLSAqIHRo YXQgbXVzdCBiZSByZWFkIG5leHQgZHVyaW5nIGEgcGFyYWxsZWwgc2NhbiwgdGhvdWdoLiAgV2Ug bXVzdCBmaWd1cmUgdGhhdAotICogcGFydCBvdXQgZm9yIG91cnNlbHZlcyBieSBzZWl6aW5nIHRo ZSBzY2FuICh0aGUgY29ycmVjdCBwYWdlIHRvIHJlYWQgbWlnaHQKLSAqIGFscmVhZHkgYmUgYmV5 b25kIHRoZSBzZWl6ZWQ9ZmFsc2UgY2FsbGVyJ3MgYmxrbm8gZHVyaW5nIGEgcGFyYWxsZWwgc2Nh biwKLSAqIHVubGVzcyBibGtuby9zby0+Y3VyclBvcy5uZXh0UGFnZS9zby0+Y3VyclBvcy5wcmV2 UGFnZSBpcyBhbHJlYWR5IFBfTk9ORSwKLSAqIG9yIHVubGVzcyBzby0+Y3VyclBvcy5tb3JlUmln aHQvc28tPmN1cnJQb3MubW9yZUxlZnQgaXMgYWxyZWFkeSB1bnNldCkuCisgKiBPbiBlbnRyeSwg bm8gcGFnZSBzaG91bGQgYmUgbG9ja2VkIGJ5IGNhbGxlci4KICAqCi0gKiBPbiBzdWNjZXNzIGV4 aXQsIHNvLT5jdXJyUG9zIGlzIHVwZGF0ZWQgdG8gY29udGFpbiBkYXRhIGZyb20gdGhlIG5leHQK LSAqIGludGVyZXN0aW5nIHBhZ2UsIGFuZCB3ZSByZXR1cm4gdHJ1ZS4gIFdlIGhvbGQgYSBwaW4g b24gdGhlIGJ1ZmZlciBvbgotICogc3VjY2VzcyBleGl0IChleGNlcHQgZHVyaW5nIHNvLT5kcm9w UGluIGluZGV4IHNjYW5zLCB3aGVuIHdlIGRyb3AgdGhlIHBpbgotICogZWFnZXJseSB0byBhdm9p ZCBibG9ja2luZyBWQUNVVU0pLgorICogT24gc3VjY2VzcyBleGl0LCByZXR1cm5zIHNjYW4gYmF0 Y2ggY29udGFpbmluZyBkYXRhIGZyb20gdGhlIG5leHQKKyAqIGludGVyZXN0aW5nIHBhZ2UuICBX ZSBob2xkIGEgcGluIG9uIHRoZSBidWZmZXIgb24gc3VjY2VzcyBleGl0IChleGNlcHQKKyAqIGR1 cmluZyBkcm9wUGluIHBsYWluIGluZGV4IHNjYW5zLCB3aGVuIHdlIGRyb3AgdGhlIHBpbiBlYWdl cmx5IHRvIGF2b2lkCisgKiBibG9ja2luZyBWQUNVVU0pLiAgSWYgdGhlcmUgYXJlIG5vIG1vcmUg bWF0Y2hpbmcgcmVjb3JkcyBpbiB0aGUgZ2l2ZW4KKyAqIGRpcmVjdGlvbiwgd2UganVzdCByZXR1 cm4gTlVMTC4KICAqCi0gKiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGluZyByZWNvcmRzIGlu IHRoZSBnaXZlbiBkaXJlY3Rpb24sIHdlIGludmFsaWRhdGUKLSAqIHNvLT5jdXJyUG9zICh3aGls ZSBlbnN1cmluZyBpdCByZXRhaW5zIG5vIGxvY2tzIG9yIHBpbnMpLCBhbmQgcmV0dXJuIGZhbHNl LgotICoKLSAqIFdlIGFsd2F5cyByZWxlYXNlIHRoZSBzY2FuIGZvciBhIHBhcmFsbGVsIHNjYW4g Y2FsbGVyLCByZWdhcmRsZXNzIG9mCi0gKiBzdWNjZXNzIG9yIGZhaWx1cmU7IHdlJ2xsIGNhbGwg X2J0X3BhcmFsbGVsX3JlbGVhc2UgYXMgc29vbiBhcyBwb3NzaWJsZS4KKyAqIFBhcmFsbGVsIHNj YW4gY2FsbGVycyBtdXN0IHNlaXplIHRoZSBzY2FuIGJlZm9yZSBjYWxsaW5nIGhlcmUuICBibGtu byBhbmQKKyAqIGxhc3RjdXJyYmxrbm8gc2hvdWxkIGNvbWUgZnJvbSB0aGUgc2VpemVkIHNjYW4u ICBXZSdsbCByZWxlYXNlIHRoZSBzY2FuIGFzCisgKiBzb29uIGFzIHBvc3NpYmxlLgogICovCi1z dGF0aWMgYm9vbAorc3RhdGljIEJhdGNoSW5kZXhTY2FuCiBfYnRfcmVhZG5leHRwYWdlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCi0JCQkJIEJsb2NrTnVtYmVyIGxhc3Rj dXJyYmxrbm8sIFNjYW5EaXJlY3Rpb24gZGlyLCBib29sIHNlaXplZCkKKwkJCQkgQmxvY2tOdW1i ZXIgbGFzdGN1cnJibGtubywgU2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wgZmlyc3RwYWdlKQogewog CVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0JQlRTY2FuT3BhcXVlIHNvID0g KEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJhdGNoSW5kZXhTY2FuIG5ld2JhdGNoOwog Ci0JQXNzZXJ0KHNvLT5jdXJyUG9zLmN1cnJQYWdlID09IGxhc3RjdXJyYmxrbm8gfHwgc2VpemVk KTsKLQlBc3NlcnQoIShibGtubyA9PSBQX05PTkUgJiYgc2VpemVkKSk7Ci0JQXNzZXJ0KCFCVFNj YW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBuZXh0 IGJhdGNoICovCisJbmV3YmF0Y2ggPSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2Moc2NhbiwgTWF4 VElEc1BlckJUcmVlUGFnZSwKKwkJCQkJCQkJCQlzY2FuLT54c193YW50X2l0dXApOwogCiAJLyoK LQkgKiBSZW1lbWJlciB0aGF0IHRoZSBzY2FuIGFscmVhZHkgcmVhZCBsYXN0Y3VycmJsa25vLCBh IHBhZ2UgdG8gdGhlIGxlZnQKLQkgKiBvZiBibGtubyAob3IgcmVtZW1iZXIgcmVhZGluZyBhIHBh Z2UgdG8gdGhlIHJpZ2h0LCBmb3IgYmFja3dhcmRzIHNjYW5zKQorCSAqIHBvcyBpcyB0aGUgZmly c3QgdmFsaWQgcGFnZSB0byB0aGUgcmlnaHQgKG9yIHRvIHRoZSBsZWZ0KSBvZgorCSAqIGxhc3Rj dXJyYmxrbm8uICBBbHNvIHByb3Zpc2lvbmFsbHkgYXNzdW1lIHRoYXQgdGhlcmUnbGwgYmUgYW5v dGhlciBwYWdlCisJICogd2UnbGwgbmVlZCB0byB0aGUgcmlnaHQgKG9yIHRvIHRoZSBsZWZ0KSBh aGVhZCBvZiBfYnRfcmVhZHBhZ2UgY2FsbC4KIAkgKi8KLQlpZiAoU2NhbkRpcmVjdGlvbklzRm9y d2FyZChkaXIpKQotCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IHRydWU7Ci0JZWxzZQotCQlzby0+ Y3VyclBvcy5tb3JlUmlnaHQgPSB0cnVlOworCW5ld2JhdGNoLT5tb3JlTGVmdCA9IHRydWU7CisJ bmV3YmF0Y2gtPm1vcmVSaWdodCA9IHRydWU7CiAKIAlmb3IgKDs7KQogCXsKIAkJUGFnZQkJcGFn ZTsKIAkJQlRQYWdlT3BhcXVlIG9wYXF1ZTsKIAotCQlpZiAoYmxrbm8gPT0gUF9OT05FIHx8Ci0J CQkoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8KLQkJCSAhc28tPmN1cnJQb3MubW9yZVJp Z2h0IDogIXNvLT5jdXJyUG9zLm1vcmVMZWZ0KSkKLQkJewotCQkJLyogbW9zdCByZWNlbnQgX2J0 X3JlYWRwYWdlIGNhbGwgKGZvciBsYXN0Y3VycmJsa25vKSBlbmRlZCBzY2FuICovCi0JCQlBc3Nl cnQoc28tPmN1cnJQb3MuY3VyclBhZ2UgPT0gbGFzdGN1cnJibGtubyAmJiAhc2VpemVkKTsKLQkJ CUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCQkJX2J0X3BhcmFsbGVsX2RvbmUo c2Nhbik7CS8qIGlmZiAhc28tPm5lZWRQcmltU2NhbiAqLwotCQkJcmV0dXJuIGZhbHNlOwotCQl9 Ci0KLQkJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKLQotCQkvKiBwYXJhbGxlbCBzY2FuIG11 c3QgbmV2ZXIgYWN0dWFsbHkgdmlzaXQgc28tPmN1cnJQb3MgYmxrbm8gKi8KLQkJaWYgKCFzZWl6 ZWQgJiYgc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCi0JCQkhX2J0X3BhcmFsbGVsX3Nl aXplKHNjYW4sICZibGtubywgJmxhc3RjdXJyYmxrbm8sIGZhbHNlKSkKLQkJewotCQkJLyogd2hv bGUgc2NhbiBpcyBub3cgZG9uZSAob3IgYW5vdGhlciBwcmltaXRpdmUgc2NhbiByZXF1aXJlZCkg Ki8KLQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCQkJcmV0dXJuIGZhbHNl OwotCQl9CisJCUFzc2VydCghKChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZSktPm5lZWRQcmlt U2Nhbik7CisJCUFzc2VydChibGtubyAhPSBQX05PTkUgJiYgbGFzdGN1cnJibGtubyAhPSBQX05P TkUpOwogCiAJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJCXsKIAkJCS8qIHJl YWQgYmxrbm8sIGJ1dCBjaGVjayBmb3IgaW50ZXJydXB0cyBmaXJzdCAqLwogCQkJQ0hFQ0tfRk9S X0lOVEVSUlVQVFMoKTsKLQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IF9idF9nZXRidWYocmVsLCBibGtu bywgQlRfUkVBRCk7CisJCQluZXdiYXRjaC0+YnVmID0gX2J0X2dldGJ1ZihyZWwsIGJsa25vLCBC VF9SRUFEKTsKIAkJfQogCQllbHNlCiAJCXsKIAkJCS8qIHJlYWQgYmxrbm8sIGF2b2lkaW5nIHJh Y2UgKGFsc28gY2hlY2tzIGZvciBpbnRlcnJ1cHRzKSAqLwotCQkJc28tPmN1cnJQb3MuYnVmID0g X2J0X2xvY2tfYW5kX3ZhbGlkYXRlX2xlZnQocmVsLCAmYmxrbm8sCi0JCQkJCQkJCQkJCQkJCSBs YXN0Y3VycmJsa25vKTsKLQkJCWlmIChzby0+Y3VyclBvcy5idWYgPT0gSW52YWxpZEJ1ZmZlcikK KwkJCW5ld2JhdGNoLT5idWYgPSBfYnRfbG9ja19hbmRfdmFsaWRhdGVfbGVmdChyZWwsICZibGtu bywKKwkJCQkJCQkJCQkJCQkgICBsYXN0Y3VycmJsa25vKTsKKwkJCWlmIChuZXdiYXRjaC0+YnVm ID09IEludmFsaWRCdWZmZXIpCiAJCQl7CiAJCQkJLyogbXVzdCBoYXZlIGJlZW4gYSBjb25jdXJy ZW50IGRlbGV0aW9uIG9mIGxlZnRtb3N0IHBhZ2UgKi8KLQkJCQlCVFNjYW5Qb3NJbnZhbGlkYXRl KHNvLT5jdXJyUG9zKTsKIAkJCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKLQkJCQlyZXR1cm4g ZmFsc2U7CisJCQkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgbmV3YmF0Y2gpOwor CQkJCXJldHVybiBOVUxMOwogCQkJfQogCQl9CiAKLQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc28t PmN1cnJQb3MuYnVmKTsKKwkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UobmV3YmF0Y2gtPmJ1Zik7CiAJ CW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsKIAkJbGFzdGN1cnJibGtubyA9IGJsa25v OwogCQlpZiAobGlrZWx5KCFQX0lHTk9SRShvcGFxdWUpKSkKQEAgLTE5MTAsMTcgKzE3NTcsMTcg QEAgX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyIGJsa25v LAogCQkJLyogc2VlIGlmIHRoZXJlIGFyZSBhbnkgbWF0Y2hlcyBvbiB0aGlzIHBhZ2UgKi8KIAkJ CWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJCQl7Ci0JCQkJLyogbm90ZSB0aGF0 IHRoaXMgd2lsbCBjbGVhciBtb3JlUmlnaHQgaWYgd2UgY2FuIHN0b3AgKi8KLQkJCQlpZiAoX2J0 X3JlYWRwYWdlKHNjYW4sIGRpciwgUF9GSVJTVERBVEFLRVkob3BhcXVlKSwgc2VpemVkKSkKKwkJ CQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIG5ld2JhdGNoLCBkaXIsCisJCQkJCQkJCSBQX0ZJUlNU REFUQUtFWShvcGFxdWUpLCBmaXJzdHBhZ2UpKQogCQkJCQlicmVhazsKLQkJCQlibGtubyA9IHNv LT5jdXJyUG9zLm5leHRQYWdlOworCQkJCWJsa25vID0gbmV3YmF0Y2gtPm5leHRQYWdlOwogCQkJ fQogCQkJZWxzZQogCQkJewotCQkJCS8qIG5vdGUgdGhhdCB0aGlzIHdpbGwgY2xlYXIgbW9yZUxl ZnQgaWYgd2UgY2FuIHN0b3AgKi8KLQkJCQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGRpciwgUGFn ZUdldE1heE9mZnNldE51bWJlcihwYWdlKSwgc2VpemVkKSkKKwkJCQlpZiAoX2J0X3JlYWRwYWdl KHNjYW4sIG5ld2JhdGNoLCBkaXIsCisJCQkJCQkJCSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBh Z2UpLCBmaXJzdHBhZ2UpKQogCQkJCQlicmVhazsKLQkJCQlibGtubyA9IHNvLT5jdXJyUG9zLnBy ZXZQYWdlOworCQkJCWJsa25vID0gbmV3YmF0Y2gtPnByZXZQYWdlOwogCQkJfQogCQl9CiAJCWVs c2UKQEAgLTE5MzUsMTkgKzE3ODIsMzkgQEAgX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNj IHNjYW4sIEJsb2NrTnVtYmVyIGJsa25vLAogCQl9CiAKIAkJLyogbm8gbWF0Y2hpbmcgdHVwbGVz IG9uIHRoaXMgcGFnZSAqLwotCQlfYnRfcmVsYnVmKHJlbCwgc28tPmN1cnJQb3MuYnVmKTsKLQkJ c2VpemVkID0gZmFsc2U7CQkJLyogcmVsZWFzZWQgYnkgX2J0X3JlYWRwYWdlIChvciBieSB1cykg Ki8KKwkJX2J0X3JlbGJ1ZihyZWwsIG5ld2JhdGNoLT5idWYpOworCQluZXdiYXRjaC0+YnVmID0g SW52YWxpZEJ1ZmZlcjsKKworCQkvKiBDb250aW51ZSB0aGUgc2NhbiBpbiB0aGlzIGRpcmVjdGlv bj8gKi8KKwkJaWYgKGJsa25vID09IFBfTk9ORSB8fAorCQkJKFNjYW5EaXJlY3Rpb25Jc0Zvcndh cmQoZGlyKSA/CisJCQkgIW5ld2JhdGNoLT5tb3JlUmlnaHQgOiAhbmV3YmF0Y2gtPm1vcmVMZWZ0 KSkKKwkJeworCQkJLyoKKwkJCSAqIGJsa25vIF9idF9yZWFkcGFnZSBjYWxsIGVuZGVkIHNjYW4g aW4gdGhpcyBkaXJlY3Rpb24gKHRob3VnaCBpZgorCQkJICogc28tPm5lZWRQcmltU2NhbiB3YXMg c2V0IHRoZSBzY2FuIHdpbGwgY29udGludWUgaW4gX2J0X2ZpcnN0KQorCQkJICovCisJCQlfYnRf cGFyYWxsZWxfZG9uZShzY2FuKTsKKwkJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4s IG5ld2JhdGNoKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJLyogcGFyYWxsZWwgc2NhbiBt dXN0IHNlaXplIHRoZSBzY2FuIHRvIGdldCBuZXh0IGJsa25vICovCisJCWlmIChzY2FuLT5wYXJh bGxlbF9zY2FuICE9IE5VTEwgJiYKKwkJCSFfYnRfcGFyYWxsZWxfc2VpemUoc2NhbiwgJmJsa25v LCAmbGFzdGN1cnJibGtubywgZmFsc2UpKQorCQl7CisJCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVs ZWFzZShzY2FuLCBuZXdiYXRjaCk7CisJCQlyZXR1cm4gTlVMTDsJCS8qIGRvbmUgaWZmIHNvLT5u ZWVkUHJpbVNjYW4gd2Fzbid0IHNldCAqLworCQl9CisKKwkJZmlyc3RwYWdlID0gZmFsc2U7CQkv KiBuZXh0IHBhZ2UgY2Fubm90IGJlIGZpcnN0ICovCiAJfQogCi0JLyoKLQkgKiBfYnRfcmVhZHBh Z2Ugc3VjY2VlZGVkLiAgRHJvcCB0aGUgbG9jayAoYW5kIG1heWJlIHRoZSBwaW4pIG9uCi0JICog c28tPmN1cnJQb3MuYnVmIGluIHByZXBhcmF0aW9uIGZvciBidGdldHR1cGxlIHJldHVybmluZyB0 dXBsZXMuCi0JICovCi0JQXNzZXJ0KHNvLT5jdXJyUG9zLmN1cnJQYWdlID09IGJsa25vKTsKLQlB c3NlcnQoQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKLQlfYnRfZHJvcF9sb2NrX2Fu ZF9tYXliZV9waW4ocmVsLCBzbyk7CisJLyogX2J0X3JlYWRwYWdlIHNhdmVkIG9uZSBvciBtb3Jl IG1hdGNoZXMgaW4gbmV3YmF0Y2guaXRlbXNbXSAqLworCUFzc2VydChuZXdiYXRjaC0+Y3VyclBh Z2UgPT0gYmxrbm8pOworCWluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2soc2NhbiwgbmV3YmF0Y2gp OwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIG5ld2JhdGNoOwogfQogCiAvKgpAQCAtMjE3MCwy NSArMjAzNywyMyBAQCBfYnRfZ2V0X2VuZHBvaW50KFJlbGF0aW9uIHJlbCwgdWludDMyIGxldmVs LCBib29sIHJpZ2h0bW9zdCkKICAqIFBhcmFsbGVsIHNjYW4gY2FsbGVycyBtdXN0IGhhdmUgc2Vp emVkIHRoZSBzY2FuIGJlZm9yZSBjYWxsaW5nIGhlcmUuCiAgKiBFeGl0IGNvbmRpdGlvbnMgYXJl IHRoZSBzYW1lIGFzIGZvciBfYnRfZmlyc3QoKS4KICAqLwotc3RhdGljIGJvb2wKLV9idF9lbmRw b2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorc3RhdGljIEJhdGNo SW5kZXhTY2FuCitfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpciwgQmF0Y2hJbmRleFNjYW4gZmlyc3RiYXRjaCkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2Fu LT5pbmRleFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4t Pm9wYXF1ZTsKIAlQYWdlCQlwYWdlOwogCUJUUGFnZU9wYXF1ZSBvcGFxdWU7CiAJT2Zmc2V0TnVt YmVyIHN0YXJ0OwogCi0JQXNzZXJ0KCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0J QXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKKwlBc3NlcnQoISgoQlRTY2FuT3BhcXVlKSBzY2Fu LT5vcGFxdWUpLT5uZWVkUHJpbVNjYW4pOwogCiAJLyoKIAkgKiBTY2FuIGRvd24gdG8gdGhlIGxl ZnRtb3N0IG9yIHJpZ2h0bW9zdCBsZWFmIHBhZ2UuICBUaGlzIGlzIGEgc2ltcGxpZmllZAogCSAq IHZlcnNpb24gb2YgX2J0X3NlYXJjaCgpLgogCSAqLwotCXNvLT5jdXJyUG9zLmJ1ZiA9IF9idF9n ZXRfZW5kcG9pbnQocmVsLCAwLCBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpKTsKKwlmaXJz dGJhdGNoLT5idWYgPSBfYnRfZ2V0X2VuZHBvaW50KHJlbCwgMCwgU2NhbkRpcmVjdGlvbklzQmFj a3dhcmQoZGlyKSk7CiAKLQlpZiAoIUJ1ZmZlcklzVmFsaWQoc28tPmN1cnJQb3MuYnVmKSkKKwlp ZiAoIUJ1ZmZlcklzVmFsaWQoZmlyc3RiYXRjaC0+YnVmKSkKIAl7CiAJCS8qCiAJCSAqIEVtcHR5 IGluZGV4LiBMb2NrIHRoZSB3aG9sZSByZWxhdGlvbiwgYXMgbm90aGluZyBmaW5lciB0byBsb2Nr CkBAIC0yMTk5LDcgKzIwNjQsNyBAQCBfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcikKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCXBhZ2UgPSBCdWZmZXJH ZXRQYWdlKHNvLT5jdXJyUG9zLmJ1Zik7CisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoZmlyc3RiYXRj aC0+YnVmKTsKIAlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7CiAJQXNzZXJ0KFBfSVNM RUFGKG9wYXF1ZSkpOwogCkBAIC0yMjI1LDkgKzIwOTAsNSBAQCBfYnRfZW5kcG9pbnQoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkvKgogCSAqIE5vdyBsb2FkIGRhdGEg ZnJvbSB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgc2Nhbi4KIAkgKi8KLQlpZiAoIV9idF9yZWFkZmly c3RwYWdlKHNjYW4sIHN0YXJ0LCBkaXIpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlfYnRfcmV0dXJu aXRlbShzY2FuLCBzbyk7Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuIF9idF9yZWFkZmlyc3RwYWdl KHNjYW4sIGZpcnN0YmF0Y2gsIHN0YXJ0LCBkaXIpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnR1dGlscy5jCmluZGV4IGE0NTFkNDhlMS4uNmVjNTYzYzk1IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9uYnR1dGlscy5jCkBAIC0xNzYsODggKzE3Niw4NCBAQCBfYnRfY29tcGFyZV9pbnQoY29u c3Qgdm9pZCAqdmEsIGNvbnN0IHZvaWQgKnZiKQogICogX2J0X2tpbGxpdGVtcyAtIHNldCBMUF9E RUFEIHN0YXRlIGZvciBpdGVtcyBhbiBpbmRleHNjYW4gY2FsbGVyIGhhcwogICogdG9sZCB1cyB3 ZXJlIGtpbGxlZAogICoKLSAqIHNjYW4tPm9wYXF1ZSwgcmVmZXJlbmNlZCBsb2NhbGx5IHRocm91 Z2ggc28sIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZQotICogY3VycmVudCBwYWdlIGFu ZCBraWxsZWQgdHVwbGVzIHRoZXJlb24gKGdlbmVyYWxseSwgdGhpcyBzaG91bGQgb25seSBiZQot ICogY2FsbGVkIGlmIHNvLT5udW1LaWxsZWQgPiAwKS4KKyAqIFRoZSBiYXRjaCBwYXJhbWV0ZXIg Y29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgcGFnZSBhbmQga2lsbGVkCisg KiB0dXBsZXMgdGhlcmVvbiAodGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgaWYgYmF0Y2gtPm51 bUtpbGxlZCA+IDApLgogICoKLSAqIENhbGxlciBzaG91bGQgbm90IGhhdmUgYSBsb2NrIG9uIHRo ZSBzby0+Y3VyclBvcyBwYWdlLCBidXQgbXVzdCBob2xkIGEKLSAqIGJ1ZmZlciBwaW4gd2hlbiAh c28tPmRyb3BQaW4uICBXaGVuIHdlIHJldHVybiwgaXQgc3RpbGwgd29uJ3QgYmUgbG9ja2VkLgot ICogSXQnbGwgY29udGludWUgdG8gaG9sZCB3aGF0ZXZlciBwaW5zIHdlcmUgaGVsZCBiZWZvcmUg Y2FsbGluZyBoZXJlLgorICogQ2FsbGVyIHNob3VsZCBub3QgaGF2ZSBhIGxvY2sgb24gdGhlIGJh dGNoIHBvc2l0aW9uJ3MgcGFnZSwgYnV0IG11c3QgaG9sZCBhCisgKiBidWZmZXIgcGluIHdoZW4g IWRyb3BQaW4uICBXaGVuIHdlIHJldHVybiwgaXQgc3RpbGwgd29uJ3QgYmUgbG9ja2VkLiAgSXQn bGwKKyAqIGNvbnRpbnVlIHRvIGhvbGQgd2hhdGV2ZXIgcGlucyB3ZXJlIGhlbGQgYmVmb3JlIGNh bGxpbmcgaGVyZS4KICAqCiAgKiBXZSBtYXRjaCBpdGVtcyBieSBoZWFwIFRJRCBiZWZvcmUgYXNz dW1pbmcgdGhleSBhcmUgdGhlIHJpZ2h0IG9uZXMgdG8gc2V0CiAgKiBMUF9ERUFELiAgSWYgdGhl IHNjYW4gaXMgb25lIHRoYXQgaG9sZHMgYSBidWZmZXIgcGluIG9uIHRoZSB0YXJnZXQgcGFnZQog ICogY29udGludW91c2x5IGZyb20gaW5pdGlhbGx5IHJlYWRpbmcgdGhlIGl0ZW1zIHVudGlsIGFw cGx5aW5nIHRoaXMgZnVuY3Rpb24KLSAqIChpZiBpdCBpcyBhICFzby0+ZHJvcFBpbiBzY2FuKSwg VkFDVVVNIGNhbm5vdCBoYXZlIGRlbGV0ZWQgYW55IGl0ZW1zIG9uIHRoZQorICogKGlmIGl0IGlz IGEgIWRyb3BQaW4gc2NhbiksIFZBQ1VVTSBjYW5ub3QgaGF2ZSBkZWxldGVkIGFueSBpdGVtcyBv biB0aGUKICAqIHBhZ2UsIHNvIHRoZSBwYWdlJ3MgVElEcyBjYW4ndCBoYXZlIGJlZW4gcmVjeWNs ZWQgYnkgbm93LiAgVGhlcmUncyBubyByaXNrCiAgKiB0aGF0IHdlJ2xsIGNvbmZ1c2UgYSBuZXcg aW5kZXggdHVwbGUgdGhhdCBoYXBwZW5zIHRvIHVzZSBhIHJlY3ljbGVkIFRJRAogICogd2l0aCBh IG5vdy1yZW1vdmVkIHR1cGxlIHdpdGggdGhlIHNhbWUgVElEICh0aGF0IHVzZWQgdG8gYmUgb24g dGhpcyBzYW1lCiAgKiBwYWdlKS4gIFdlIGNhbid0IHJlbHkgb24gdGhhdCBkdXJpbmcgc2NhbnMg dGhhdCBkcm9wIGJ1ZmZlciBwaW5zIGVhZ2VybHkKLSAqIChzby0+ZHJvcFBpbiBzY2FucyksIHRo b3VnaCwgc28gd2UgbXVzdCBjb25kaXRpb24gc2V0dGluZyBMUF9ERUFEIGJpdHMgb24KKyAqIChp LmUuIGRyb3BQaW4gc2NhbnMpLCB0aG91Z2gsIHNvIHdlIG11c3QgY29uZGl0aW9uIHNldHRpbmcg TFBfREVBRCBiaXRzIG9uCiAgKiB0aGUgcGFnZSBMU04gaGF2aW5nIG5vdCBjaGFuZ2VkIHNpbmNl IGJhY2sgd2hlbiBfYnRfcmVhZHBhZ2Ugc2F3IHRoZSBwYWdlLgogICogV2UgdG90YWxseSBnaXZl IHVwIG9uIHNldHRpbmcgTFBfREVBRCBiaXRzIHdoZW4gdGhlIHBhZ2UgTFNOIGNoYW5nZWQuCiAg KgotICogV2UgZ2l2ZSB1cCBtdWNoIGxlc3Mgb2Z0ZW4gZHVyaW5nICFzby0+ZHJvcFBpbiBzY2Fu cywgYnV0IGl0IHN0aWxsIGhhcHBlbnMuCisgKiBXZSB0ZW5kIHRvIGdpdmUgdXAgbGVzcyBvZnRl biBkdXJpbmcgIWRyb3BQaW4gc2NhbnMsIGJ1dCBpdCBzdGlsbCBoYXBwZW5zLgogICogV2UgY29w ZSB3aXRoIGNhc2VzIHdoZXJlIGl0ZW1zIGhhdmUgbW92ZWQgcmlnaHQgZHVlIHRvIGluc2VydGlv bnMuICBJZiBhbgogICogaXRlbSBoYXMgbW92ZWQgb2ZmIHRoZSBjdXJyZW50IHBhZ2UgZHVlIHRv IGEgc3BsaXQsIHdlJ2xsIGZhaWwgdG8gZmluZCBpdAogICogYW5kIGp1c3QgZ2l2ZSB1cCBvbiBp dC4KICAqLwogdm9pZAotX2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pCitfYnRfa2ls bGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpCiB7CiAJUmVs YXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRT Y2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAJUGFnZQkJcGFnZTsKIAlCVFBhZ2VPcGFxdWUgb3Bh cXVlOwogCU9mZnNldE51bWJlciBtaW5vZmY7CiAJT2Zmc2V0TnVtYmVyIG1heG9mZjsKLQlpbnQJ CQludW1LaWxsZWQgPSBzby0+bnVtS2lsbGVkOworCWludAkJCW51bUtpbGxlZCA9IGJhdGNoLT5u dW1LaWxsZWQ7CiAJYm9vbAkJa2lsbGVkc29tZXRoaW5nID0gZmFsc2U7CiAJQnVmZmVyCQlidWY7 CiAKIAlBc3NlcnQobnVtS2lsbGVkID4gMCk7Ci0JQXNzZXJ0KEJUU2NhblBvc0lzVmFsaWQoc28t PmN1cnJQb3MpKTsKKwlBc3NlcnQoQmxvY2tOdW1iZXJJc1ZhbGlkKGJhdGNoLT5jdXJyUGFnZSkp OwogCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gIT0gTlVMTCk7IC8qIGNhbid0IGJlIGEgYml0 bWFwIGluZGV4IHNjYW4gKi8KIAotCS8qIEFsd2F5cyBpbnZhbGlkYXRlIHNvLT5raWxsZWRJdGVt c1tdIGJlZm9yZSBsZWF2aW5nIHNvLT5jdXJyUG9zICovCi0Jc28tPm51bUtpbGxlZCA9IDA7CisJ LyogQWx3YXlzIGludmFsaWRhdGUgYmF0Y2gtPmtpbGxlZEl0ZW1zW10gYmVmb3JlIGZyZWVpbmcg YmF0Y2ggKi8KKwliYXRjaC0+bnVtS2lsbGVkID0gMDsKIAogCS8qCi0JICogV2UgbmVlZCB0byBp dGVyYXRlIHRocm91Z2ggc28tPmtpbGxlZEl0ZW1zW10gaW4gbGVhZiBwYWdlIG9yZGVyOyB0aGUK KwkgKiBXZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBiYXRjaC5raWxsZWRJdGVtc1tdIGluIGxl YWYgcGFnZSBvcmRlcjsgdGhlCiAJICogbG9vcCBiZWxvdyBleHBlY3RzIHRoaXMgKHdoZW4gbWFy a2luZyBwb3N0aW5nIGxpc3QgdHVwbGVzLCBhdCBsZWFzdCkuCi0JICogc28tPmtpbGxlZEl0ZW1z W10gaXMgbm93IGluIHdoYXRldmVyIG9yZGVyIHRoZSBzY2FuIHJldHVybmVkIGl0ZW1zIGluLgor CSAqIGtpbGxlZEl0ZW1zW10gaXMgbm93IGluIHdoYXRldmVyIG9yZGVyIHRoZSBzY2FuIHJldHVy bmVkIGl0ZW1zIGluLgogCSAqIFNjcm9sbGFibGUgY3Vyc29yIHNjYW5zIG1pZ2h0IGhhdmUgZXZl biBzYXZlZCB0aGUgc2FtZSBpdGVtL1RJRCB0d2ljZS4KIAkgKgotCSAqIFNvcnQgYW5kIHVuaXF1 ZS1pZnkgc28tPmtpbGxlZEl0ZW1zW10gdG8gZGVhbCB3aXRoIGFsbCB0aGlzLgorCSAqIFNvcnQg YW5kIHVuaXF1ZS1pZnkgYmF0Y2gua2lsbGVkSXRlbXNbXSB0byBkZWFsIHdpdGggYWxsIHRoaXMu CiAJICovCiAJaWYgKG51bUtpbGxlZCA+IDEpCiAJewotCQlxc29ydChzby0+a2lsbGVkSXRlbXMs IG51bUtpbGxlZCwgc2l6ZW9mKGludCksIF9idF9jb21wYXJlX2ludCk7Ci0JCW51bUtpbGxlZCA9 IHF1bmlxdWUoc28tPmtpbGxlZEl0ZW1zLCBudW1LaWxsZWQsIHNpemVvZihpbnQpLAorCQlxc29y dChiYXRjaC0+a2lsbGVkSXRlbXMsIG51bUtpbGxlZCwgc2l6ZW9mKGludCksIF9idF9jb21wYXJl X2ludCk7CisJCW51bUtpbGxlZCA9IHF1bmlxdWUoYmF0Y2gtPmtpbGxlZEl0ZW1zLCBudW1LaWxs ZWQsIHNpemVvZihpbnQpLAogCQkJCQkJCV9idF9jb21wYXJlX2ludCk7CiAJfQogCi0JaWYgKCFz by0+ZHJvcFBpbikKKwlpZiAoIXNjYW4tPmJhdGNocXVldWUtPmRyb3BQaW4pCiAJewogCQkvKgog CQkgKiBXZSBoYXZlIGhlbGQgdGhlIHBpbiBvbiB0aGlzIHBhZ2Ugc2luY2Ugd2UgcmVhZCB0aGUg aW5kZXggdHVwbGVzLAogCQkgKiBzbyBhbGwgd2UgbmVlZCB0byBkbyBpcyBsb2NrIGl0LiAgVGhl IHBpbiB3aWxsIGhhdmUgcHJldmVudGVkCiAJCSAqIGNvbmN1cnJlbnQgVkFDVVVNcyBmcm9tIHJl Y3ljbGluZyBhbnkgb2YgdGhlIFRJRHMgb24gdGhlIHBhZ2UuCiAJCSAqLwotCQlBc3NlcnQoQlRT Y2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKLQkJYnVmID0gc28tPmN1cnJQb3MuYnVmOwor CQlidWYgPSBiYXRjaC0+YnVmOwogCQlfYnRfbG9ja2J1ZihyZWwsIGJ1ZiwgQlRfUkVBRCk7CiAJ fQogCWVsc2UKIAl7CiAJCVhMb2dSZWNQdHIJbGF0ZXN0bHNuOwogCi0JCUFzc2VydCghQlRTY2Fu UG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKIAkJQXNzZXJ0KFJlbGF0aW9uTmVlZHNXQUwocmVs KSk7Ci0JCWJ1ZiA9IF9idF9nZXRidWYocmVsLCBzby0+Y3VyclBvcy5jdXJyUGFnZSwgQlRfUkVB RCk7CisJCWJ1ZiA9IF9idF9nZXRidWYocmVsLCBiYXRjaC0+Y3VyclBhZ2UsIEJUX1JFQUQpOwog CiAJCWxhdGVzdGxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhidWYpOwotCQlBc3NlcnQoc28tPmN1 cnJQb3MubHNuIDw9IGxhdGVzdGxzbik7Ci0JCWlmIChzby0+Y3VyclBvcy5sc24gIT0gbGF0ZXN0 bHNuKQorCQlBc3NlcnQoYmF0Y2gtPmxzbiA8PSBsYXRlc3Rsc24pOworCQlpZiAoYmF0Y2gtPmxz biAhPSBsYXRlc3Rsc24pCiAJCXsKIAkJCS8qIE1vZGlmaWVkLCBnaXZlIHVwIG9uIGhpbnRpbmcg Ki8KIAkJCV9idF9yZWxidWYocmVsLCBidWYpOwpAQCAtMjcyLDE3ICsyNjgsMTYgQEAgX2J0X2tp bGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJbWlub2ZmID0gUF9GSVJTVERBVEFLRVkob3Bh cXVlKTsKIAltYXhvZmYgPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOwogCi0JLyogSXRl cmF0ZSB0aHJvdWdoIHNvLT5raWxsZWRJdGVtc1tdIGluIGxlYWYgcGFnZSBvcmRlciAqLworCS8q IEl0ZXJhdGUgdGhyb3VnaCBiYXRjaC0+a2lsbGVkSXRlbXNbXSBpbiBsZWFmIHBhZ2Ugb3JkZXIg Ki8KIAlmb3IgKGludCBpID0gMDsgaSA8IG51bUtpbGxlZDsgaSsrKQogCXsKLQkJaW50CQkJaXRl bUluZGV4ID0gc28tPmtpbGxlZEl0ZW1zW2ldOwotCQlCVFNjYW5Qb3NJdGVtICpraXRlbSA9ICZz by0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOworCQlpbnQJCQlpdGVtSW5kZXggPSBiYXRjaC0+ a2lsbGVkSXRlbXNbaV07CisJCUJhdGNoTWF0Y2hpbmdJdGVtICpraXRlbSA9ICZiYXRjaC0+aXRl bXNbaXRlbUluZGV4XTsKIAkJT2Zmc2V0TnVtYmVyIG9mZm51bSA9IGtpdGVtLT5pbmRleE9mZnNl dDsKIAotCQlBc3NlcnQoaXRlbUluZGV4ID49IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSAmJgotCQkJ ICAgaXRlbUluZGV4IDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVtKTsKKwkJQXNzZXJ0KGl0ZW1JbmRl eCA+PSBiYXRjaC0+Zmlyc3RJdGVtICYmIGl0ZW1JbmRleCA8PSBiYXRjaC0+bGFzdEl0ZW0pOwog CQlBc3NlcnQoaSA9PSAwIHx8Ci0JCQkgICBvZmZudW0gPj0gc28tPmN1cnJQb3MuaXRlbXNbc28t PmtpbGxlZEl0ZW1zW2kgLSAxXV0uaW5kZXhPZmZzZXQpOworCQkJICAgb2ZmbnVtID49IGJhdGNo LT5pdGVtc1tiYXRjaC0+a2lsbGVkSXRlbXNbaSAtIDFdXS5pbmRleE9mZnNldCk7CiAKIAkJaWYg KG9mZm51bSA8IG1pbm9mZikKIAkJCWNvbnRpbnVlOwkJCS8qIHB1cmUgcGFyYW5vaWEgKi8KQEAg LTMwMCw3ICsyOTUsNyBAQCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAogCQkJ CS8qCiAJCQkJICogTm90ZSB0aGF0IHRoZSBwYWdlIG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgaW4g YWxtb3N0IGFueSB3YXkKLQkJCQkgKiBzaW5jZSB3ZSBmaXJzdCByZWFkIGl0IChpbiB0aGUgIXNv LT5kcm9wUGluIGNhc2UpLCBzbyBpdCdzCisJCQkJICogc2luY2Ugd2UgZmlyc3QgcmVhZCBpdCAo aW4gdGhlICFkcm9wUGluIGNhc2UpLCBzbyBpdCdzCiAJCQkJICogcG9zc2libGUgdGhhdCB0aGlz IHBvc3RpbmcgbGlzdCB0dXBsZSB3YXNuJ3QgYSBwb3N0aW5nIGxpc3QKIAkJCQkgKiB0dXBsZSB3 aGVuIHdlIGZpcnN0IGVuY291bnRlcmVkIGl0cyBoZWFwIFRJRHMuCiAJCQkJICovCkBAIC0zMTYs NyArMzExLDggQEAgX2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJCQkJCSAqIHRo b3VnaCBvbmx5IGluIHRoZSBjb21tb24gY2FzZSB3aGVyZSB0aGUgcGFnZSBjYW4ndAogCQkJCQkg KiBoYXZlIGJlZW4gY29uY3VycmVudGx5IG1vZGlmaWVkCiAJCQkJCSAqLwotCQkJCQlBc3NlcnQo a2l0ZW0tPmluZGV4T2Zmc2V0ID09IG9mZm51bSB8fCAhc28tPmRyb3BQaW4pOworCQkJCQlBc3Nl cnQoa2l0ZW0tPmluZGV4T2Zmc2V0ID09IG9mZm51bSB8fAorCQkJCQkJICAgIXNjYW4tPmJhdGNo cXVldWUtPmRyb3BQaW4pOwogCiAJCQkJCS8qCiAJCQkJCSAqIFJlYWQtYWhlYWQgdG8gbGF0ZXIg a2l0ZW1zIGhlcmUuCkBAIC0zMzMsNyArMzI5LDcgQEAgX2J0X2tpbGxpdGVtcyhJbmRleFNjYW5E ZXNjIHNjYW4pCiAJCQkJCSAqIGNvcnJlY3RseSAtLSBwb3N0aW5nIHR1cGxlIHN0aWxsIGdldHMg a2lsbGVkKS4KIAkJCQkJICovCiAJCQkJCWlmIChwaSA8IG51bUtpbGxlZCkKLQkJCQkJCWtpdGVt ID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5raWxsZWRJdGVtc1twaSsrXV07CisJCQkJCQlraXRl bSA9ICZiYXRjaC0+aXRlbXNbYmF0Y2gtPmtpbGxlZEl0ZW1zW3BpKytdXTsKIAkJCQl9CiAKIAkJ CQkvKgpAQCAtMzgzLDcgKzM3OSw3IEBAIF9idF9raWxsaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2Fu KQogCQlNYXJrQnVmZmVyRGlydHlIaW50KGJ1ZiwgdHJ1ZSk7CiAJfQogCi0JaWYgKCFzby0+ZHJv cFBpbikKKwlpZiAoIXNjYW4tPmJhdGNocXVldWUtPmRyb3BQaW4pCiAJCV9idF91bmxvY2tidWYo cmVsLCBidWYpOwogCWVsc2UKIAkJX2J0X3JlbGJ1ZihyZWwsIGJ1Zik7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv c3BnaXN0L3NwZ3V0aWxzLmMKaW5kZXggYTYwZWM4NWU4Li5iMGE2ZTA5NzQgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKQEAgLTg4LDEwICs4OCwxMSBAQCBzcGdoYW5kbGVyKFBH X0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5hbWJlZ2luc2NhbiA9IHNwZ2JlZ2luc2NhbjsK IAlhbXJvdXRpbmUtPmFtcmVzY2FuID0gc3BncmVzY2FuOwogCWFtcm91dGluZS0+YW1nZXR0dXBs ZSA9IHNwZ2dldHR1cGxlOworCWFtcm91dGluZS0+YW1nZXRiYXRjaCA9IE5VTEw7CisJYW1yb3V0 aW5lLT5hbWZyZWViYXRjaCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWdldGJpdG1hcCA9IHNwZ2dl dGJpdG1hcDsKIAlhbXJvdXRpbmUtPmFtZW5kc2NhbiA9IHNwZ2VuZHNjYW47Ci0JYW1yb3V0aW5l LT5hbW1hcmtwb3MgPSBOVUxMOwotCWFtcm91dGluZS0+YW1yZXN0cnBvcyA9IE5VTEw7CisJYW1y b3V0aW5lLT5hbXBvc3Jlc2V0ID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtZXN0aW1hdGVwYXJhbGxl bHNjYW4gPSBOVUxMOwogCWFtcm91dGluZS0+YW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTDsKIAlh bXJvdXRpbmUtPmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJs ZWFtLmMKaW5kZXggMWUwOTlmZWJkLi5hNzM0MWJjYWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3Rh YmxlYW0uYwpAQCAtMjQ4LDcgKzI0OCw3IEBAIHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlX2NoZWNr KFJlbGF0aW9uIHJlbCwKIAlib29sCQlmb3VuZDsKIAogCXNsb3QgPSB0YWJsZV9zbG90X2NyZWF0 ZShyZWwsIE5VTEwpOwotCXNjYW4gPSB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbihyZWwpOworCXNj YW4gPSB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbihyZWwsIE5VTEwpOwogCWZvdW5kID0gdGFibGVf aW5kZXhfZmV0Y2hfdHVwbGUoc2NhbiwgdGlkLCBzbmFwc2hvdCwgc2xvdCwgJmNhbGxfYWdhaW4s CiAJCQkJCQkJCQlhbGxfZGVhZCk7CiAJdGFibGVfaW5kZXhfZmV0Y2hfZW5kKHNjYW4pOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29uc3RyYWludC5jIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvY29uc3RyYWludC5jCmluZGV4IDM0OTdhODIyMS4uOGE1ZDc5YTI3IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb25zdHJhaW50LmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvY29uc3RyYWludC5jCkBAIC0xMDYsNyArMTA2LDggQEAgdW5pcXVlX2tleV9yZWNo ZWNrKFBHX0ZVTkNUSU9OX0FSR1MpCiAJICovCiAJdG1wdGlkID0gY2hlY2t0aWQ7CiAJewotCQlJ bmRleEZldGNoVGFibGVEYXRhICpzY2FuID0gdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4odHJpZ2Rh dGEtPnRnX3JlbGF0aW9uKTsKKwkJSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiA9IHRhYmxlX2lu ZGV4X2ZldGNoX2JlZ2luKHRyaWdkYXRhLT50Z19yZWxhdGlvbiwKKwkJCQkJCQkJCQkJCQkJCU5V TEwpOwogCQlib29sCQljYWxsX2FnYWluID0gZmFsc2U7CiAKIAkJaWYgKCF0YWJsZV9pbmRleF9m ZXRjaF90dXBsZShzY2FuLCAmdG1wdGlkLCBTbmFwc2hvdFNlbGYsIHNsb3QsCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2luZGV4Y21kcy5jCmluZGV4IGQ5Y2NjYjZhYy4uM2FjOTFmMTJlIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9p bmRleGNtZHMuYwpAQCAtODgwLDcgKzg4MCw3IEBAIERlZmluZUluZGV4KE9pZCB0YWJsZUlkLAog CQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkgZXJybXNn KCJhY2Nlc3MgbWV0aG9kIFwiJXNcIiBkb2VzIG5vdCBzdXBwb3J0IG11bHRpY29sdW1uIGluZGV4 ZXMiLAogCQkJCQkJYWNjZXNzTWV0aG9kTmFtZSkpKTsKLQlpZiAoZXhjbHVzaW9uICYmIGFtUm91 dGluZS0+YW1nZXR0dXBsZSA9PSBOVUxMKQorCWlmIChleGNsdXNpb24gJiYgYW1Sb3V0aW5lLT5h bWdldHR1cGxlID09IE5VTEwgJiYgYW1Sb3V0aW5lLT5hbWdldGJhdGNoID09IE5VTEwpCiAJCWVy ZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQp LAogCQkJCSBlcnJtc2coImFjY2VzcyBtZXRob2QgXCIlc1wiIGRvZXMgbm90IHN1cHBvcnQgZXhj bHVzaW9uIGNvbnN0cmFpbnRzIiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNBbWkuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYwppbmRleCAxZDBlOGFkNTcu LmFjMzM3ZDkwMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCisr KyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYwpAQCAtNDI4LDcgKzQyOCw3IEBAIEV4 ZWNTdXBwb3J0c01hcmtSZXN0b3JlKFBhdGggKnBhdGhub2RlKQogCQljYXNlIFRfSW5kZXhPbmx5 U2NhbjoKIAogCQkJLyoKLQkJCSAqIE5vdCBhbGwgaW5kZXggdHlwZXMgc3VwcG9ydCBtYXJrL3Jl c3RvcmUuCisJCQkgKiBOb3QgYWxsIGluZGV4IHR5cGVzIHN1cHBvcnQgcmVzdG9yaW5nIGEgbWFy awogCQkJICovCiAJCQlyZXR1cm4gY2FzdE5vZGUoSW5kZXhQYXRoLCBwYXRobm9kZSktPmluZGV4 aW5mby0+YW1jYW5tYXJrcG9zOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjSW5kZXhpbmcuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCmluZGV4 IDBiM2EzMWYxNy4uODkxYTViMmM5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjSW5kZXhpbmcuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYwpA QCAtODE2LDEwICs4MTYsMTIgQEAgY2hlY2tfZXhjbHVzaW9uX29yX3VuaXF1ZV9jb25zdHJhaW50 KFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4LAogcmV0cnk6CiAJY29uZmxpY3QgPSBmYWxz ZTsKIAlmb3VuZF9zZWxmID0gZmFsc2U7Ci0JaW5kZXhfc2NhbiA9IGluZGV4X2JlZ2luc2Nhbiho ZWFwLCBpbmRleCwgJkRpcnR5U25hcHNob3QsIE5VTEwsIGluZG5rZXlhdHRzLCAwKTsKKwlpbmRl eF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXAsIGluZGV4LCBOVUxMLCAmRGlydHlTbmFwc2hv dCwgTlVMTCwKKwkJCQkJCQkJIGluZG5rZXlhdHRzLCAwKTsKIAlpbmRleF9yZXNjYW4oaW5kZXhf c2Nhbiwgc2NhbmtleXMsIGluZG5rZXlhdHRzLCBOVUxMLCAwKTsKIAotCXdoaWxlIChpbmRleF9n ZXRuZXh0X3Nsb3QoaW5kZXhfc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIGV4aXN0aW5nX3Ns b3QpKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhfc2NhbiwgRm9yd2Fy ZFNjYW5EaXJlY3Rpb24sCisJCQkJCQkJCQlleGlzdGluZ19zbG90KSkKIAl7CiAJCVRyYW5zYWN0 aW9uSWQgeHdhaXQ7CiAJCVhMVFdfT3BlcglyZWFzb25fd2FpdDsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY1JlcGxpY2F0aW9uLmMKaW5kZXggODYwZjc5ZjljLi45MjM2ZGE5YjIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCkBAIC0yMDQsNyArMjA0LDcgQEAgUmVsYXRpb25G aW5kUmVwbFR1cGxlQnlJbmRleChSZWxhdGlvbiByZWwsIE9pZCBpZHhvaWQsCiAJc2tleV9hdHRv ZmYgPSBidWlsZF9yZXBsaW5kZXhfc2Nhbl9rZXkoc2tleSwgcmVsLCBpZHhyZWwsIHNlYXJjaHNs b3QpOwogCiAJLyogU3RhcnQgYW4gaW5kZXggc2Nhbi4gKi8KLQlzY2FuID0gaW5kZXhfYmVnaW5z Y2FuKHJlbCwgaWR4cmVsLCAmc25hcCwgTlVMTCwgc2tleV9hdHRvZmYsIDApOworCXNjYW4gPSBp bmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWwsIE5VTEwsICZzbmFwLCBOVUxMLCBza2V5X2F0dG9m ZiwgMCk7CiAKIHJldHJ5OgogCWZvdW5kID0gZmFsc2U7CkBAIC0yMTIsNyArMjEyLDcgQEAgcmV0 cnk6CiAJaW5kZXhfcmVzY2FuKHNjYW4sIHNrZXksIHNrZXlfYXR0b2ZmLCBOVUxMLCAwKTsKIAog CS8qIFRyeSB0byBmaW5kIHRoZSB0dXBsZSAqLwotCXdoaWxlIChpbmRleF9nZXRuZXh0X3Nsb3Qo c2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIG91dHNsb3QpKQorCXdoaWxlICh0YWJsZV9pbmRl eF9nZXRuZXh0X3Nsb3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIG91dHNsb3QpKQogCXsK IAkJLyoKIAkJICogQXZvaWQgZXhwZW5zaXZlIGVxdWFsaXR5IGNoZWNrIGlmIHRoZSBpbmRleCBp cyBwcmltYXJ5IGtleSBvcgpAQCAtNjY1LDEyICs2NjUsMTIgQEAgUmVsYXRpb25GaW5kRGVsZXRl ZFR1cGxlSW5mb0J5SW5kZXgoUmVsYXRpb24gcmVsLCBPaWQgaWR4b2lkLAogCSAqIG5vdCB5ZXQg Y29tbWl0dGVkIG9yIHRob3NlIGp1c3QgY29tbWl0dGVkIHByaW9yIHRvIHRoZSBzY2FuIGFyZQog CSAqIGV4Y2x1ZGVkIGluIHVwZGF0ZV9tb3N0X3JlY2VudF9kZWxldGlvbl9pbmZvKCkuCiAJICov Ci0Jc2NhbiA9IGluZGV4X2JlZ2luc2NhbihyZWwsIGlkeHJlbCwgU25hcHNob3RBbnksIE5VTEws IHNrZXlfYXR0b2ZmLCAwKTsKKwlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKHJlbCwgaWR4cmVsLCBO VUxMLCBTbmFwc2hvdEFueSwgTlVMTCwgc2tleV9hdHRvZmYsIDApOwogCiAJaW5kZXhfcmVzY2Fu KHNjYW4sIHNrZXksIHNrZXlfYXR0b2ZmLCBOVUxMLCAwKTsKIAogCS8qIFRyeSB0byBmaW5kIHRo ZSB0dXBsZSAqLwotCXdoaWxlIChpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgRm9yd2FyZFNjYW5E aXJlY3Rpb24sIHNjYW5zbG90KSkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNj YW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzY2Fuc2xvdCkpCiAJewogCQkvKgogCQkgKiBBdm9p ZCBleHBlbnNpdmUgZXF1YWxpdHkgY2hlY2sgaWYgdGhlIGluZGV4IGlzIHByaW1hcnkga2V5IG9y CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwppbmRleCA2YmVhNDJmMTIu Ljk2Nzc4YWJlMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25s eXNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCkBA IC0zNCwxNCArMzQsMTIgQEAKICNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUg ImFjY2Vzcy90YWJsZWFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3R1cGRlc2MuaCIKLSNpbmNsdWRl ICJhY2Nlc3MvdmlzaWJpbGl0eW1hcC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgog I2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUlu ZGV4b25seXNjYW4uaCIKICNpbmNsdWRlICJleGVjdXRvci9ub2RlSW5kZXhzY2FuLmgiCiAjaW5j bHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKLSNpbmNsdWRl ICJzdG9yYWdlL3ByZWRpY2F0ZS5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5j bHVkZSAidXRpbHMvcmVsLmgiCiAKQEAgLTY1LDcgKzYzLDYgQEAgSW5kZXhPbmx5TmV4dChJbmRl eE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb247CiAJSW5kZXhT Y2FuRGVzYyBzY2FuZGVzYzsKIAlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKLQlJdGVtUG9pbnRlciB0 aWQ7CiAKIAkvKgogCSAqIGV4dHJhY3QgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZyb20gaW5kZXgg c2NhbiBub2RlCkBAIC05MSw2ICs4OCw3IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0 YXRlICpub2RlKQogCQkgKi8KIAkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4obm9kZS0+c3Mu c3NfY3VycmVudFJlbGF0aW9uLAogCQkJCQkJCQkgICBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywK KwkJCQkJCQkJICAgbm9kZS0+aW9zc19UYWJsZVNsb3QsCiAJCQkJCQkJCSAgIGVzdGF0ZS0+ZXNf c25hcHNob3QsCiAJCQkJCQkJCSAgICZub2RlLT5pb3NzX0luc3RydW1lbnQsCiAJCQkJCQkJCSAg IG5vZGUtPmlvc3NfTnVtU2NhbktleXMsCkBAIC0xMDEsNyArOTksNiBAQCBJbmRleE9ubHlOZXh0 KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAogCQkvKiBTZXQgaXQgdXAgZm9yIGluZGV4LW9u bHkgc2NhbiAqLwogCQlub2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50X2l0dXAgPSB0cnVlOwot CQlub2RlLT5pb3NzX1ZNQnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKIAogCQkvKgogCQkgKiBJZiBu byBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQg YW5kCkBAIC0xMTgsNzcgKzExNSwxMiBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0 ZSAqbm9kZSkKIAkvKgogCSAqIE9LLCBub3cgdGhhdCB3ZSBoYXZlIHdoYXQgd2UgbmVlZCwgZmV0 Y2ggdGhlIG5leHQgdHVwbGUuCiAJICovCi0Jd2hpbGUgKCh0aWQgPSBpbmRleF9nZXRuZXh0X3Rp ZChzY2FuZGVzYywgZGlyZWN0aW9uKSkgIT0gTlVMTCkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0 bmV4dF9zbG90KHNjYW5kZXNjLCBkaXJlY3Rpb24sIHNsb3QpKQogCXsKLQkJYm9vbAkJdHVwbGVf ZnJvbV9oZWFwID0gZmFsc2U7Ci0KIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAotCQkvKgot CQkgKiBXZSBjYW4gc2tpcCB0aGUgaGVhcCBmZXRjaCBpZiB0aGUgVElEIHJlZmVyZW5jZXMgYSBo ZWFwIHBhZ2Ugb24KLQkJICogd2hpY2ggYWxsIHR1cGxlcyBhcmUga25vd24gdmlzaWJsZSB0byBl dmVyeWJvZHkuICBJbiBhbnkgY2FzZSwKLQkJICogd2UnbGwgdXNlIHRoZSBpbmRleCB0dXBsZSBu b3QgdGhlIGhlYXAgdHVwbGUgYXMgdGhlIGRhdGEgc291cmNlLgotCQkgKgotCQkgKiBOb3RlIG9u IE1lbW9yeSBPcmRlcmluZyBFZmZlY3RzOiB2aXNpYmlsaXR5bWFwX2dldF9zdGF0dXMgZG9lcyBu b3QKLQkJICogbG9jayB0aGUgdmlzaWJpbGl0eSBtYXAgYnVmZmVyLCBhbmQgdGhlcmVmb3JlIHRo ZSByZXN1bHQgd2UgcmVhZAotCQkgKiBoZXJlIGNvdWxkIGJlIHNsaWdodGx5IHN0YWxlLiAgSG93 ZXZlciwgaXQgY2FuJ3QgYmUgc3RhbGUgZW5vdWdoIHRvCi0JCSAqIG1hdHRlci4KLQkJICoKLQkJ ICogV2UgbmVlZCB0byBkZXRlY3QgY2xlYXJpbmcgYSBWTSBiaXQgZHVlIHRvIGFuIGluc2VydCBy aWdodCBhd2F5LAotCQkgKiBiZWNhdXNlIHRoZSB0dXBsZSBpcyBwcmVzZW50IGluIHRoZSBpbmRl eCBwYWdlIGJ1dCBub3QgdmlzaWJsZS4gVGhlCi0JCSAqIHJlYWRpbmcgb2YgdGhlIFRJRCBieSB0 aGlzIHNjYW4gKHVzaW5nIGEgc2hhcmVkIGxvY2sgb24gdGhlIGluZGV4Ci0JCSAqIGJ1ZmZlcikg aXMgc2VyaWFsaXplZCB3aXRoIHRoZSBpbnNlcnQgb2YgdGhlIFRJRCBpbnRvIHRoZSBpbmRleAot CQkgKiAodXNpbmcgYW4gZXhjbHVzaXZlIGxvY2sgb24gdGhlIGluZGV4IGJ1ZmZlcikuIEJlY2F1 c2UgdGhlIFZNIGJpdAotCQkgKiBpcyBjbGVhcmVkIGJlZm9yZSB1cGRhdGluZyB0aGUgaW5kZXgs IGFuZCBsb2NraW5nL3VubG9ja2luZyBvZiB0aGUKLQkJICogaW5kZXggcGFnZSBhY3RzIGFzIGEg ZnVsbCBtZW1vcnkgYmFycmllciwgd2UgYXJlIHN1cmUgdG8gc2VlIHRoZQotCQkgKiBjbGVhcmVk IGJpdCBpZiB3ZSBzZWUgYSByZWNlbnRseS1pbnNlcnRlZCBUSUQuCi0JCSAqCi0JCSAqIERlbGV0 ZXMgZG8gbm90IHVwZGF0ZSB0aGUgaW5kZXggcGFnZSAob25seSBWQUNVVU0gd2lsbCBjbGVhciBv dXQKLQkJICogdGhlIFRJRCksIHNvIHRoZSBjbGVhcmluZyBvZiB0aGUgVk0gYml0IGJ5IGEgZGVs ZXRlIGlzIG5vdAotCQkgKiBzZXJpYWxpemVkIHdpdGggdGhpcyB0ZXN0IGJlbG93LCBhbmQgd2Ug bWF5IHNlZSBhIHZhbHVlIHRoYXQgaXMKLQkJICogc2lnbmlmaWNhbnRseSBzdGFsZS4gSG93ZXZl ciwgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgZGVsZXRlIHJpZ2h0Ci0JCSAqIGF3YXksIGJlY2F1 c2UgdGhlIHR1cGxlIGlzIHN0aWxsIHZpc2libGUgdW50aWwgdGhlIGRlbGV0aW5nCi0JCSAqIHRy YW5zYWN0aW9uIGNvbW1pdHMgb3IgdGhlIHN0YXRlbWVudCBlbmRzIChpZiBpdCdzIG91cgotCQkg KiB0cmFuc2FjdGlvbikuIEluIGVpdGhlciBjYXNlLCB0aGUgbG9jayBvbiB0aGUgVk0gYnVmZmVy IHdpbGwgaGF2ZQotCQkgKiBiZWVuIHJlbGVhc2VkIChhY3RpbmcgYXMgYSB3cml0ZSBiYXJyaWVy KSBhZnRlciBjbGVhcmluZyB0aGUgYml0LgotCQkgKiBBbmQgZm9yIHVzIHRvIGhhdmUgYSBzbmFw c2hvdCB0aGF0IGluY2x1ZGVzIHRoZSBkZWxldGluZwotCQkgKiB0cmFuc2FjdGlvbiAobWFraW5n IHRoZSB0dXBsZSBpbnZpc2libGUpLCB3ZSBtdXN0IGhhdmUgYWNxdWlyZWQKLQkJICogUHJvY0Fy cmF5TG9jayBhZnRlciB0aGF0IHRpbWUsIGFjdGluZyBhcyBhIHJlYWQgYmFycmllci4KLQkJICoK LQkJICogSXQncyB3b3J0aCBnb2luZyB0aHJvdWdoIHRoaXMgY29tcGxleGl0eSB0byBhdm9pZCBu ZWVkaW5nIHRvIGxvY2sKLQkJICogdGhlIFZNIGJ1ZmZlciwgd2hpY2ggY291bGQgY2F1c2Ugc2ln bmlmaWNhbnQgY29udGVudGlvbi4KLQkJICovCi0JCWlmICghVk1fQUxMX1ZJU0lCTEUoc2NhbmRl c2MtPmhlYXBSZWxhdGlvbiwKLQkJCQkJCQlJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCks Ci0JCQkJCQkJJm5vZGUtPmlvc3NfVk1CdWZmZXIpKQotCQl7Ci0JCQkvKgotCQkJICogUmF0cywg d2UgaGF2ZSB0byB2aXNpdCB0aGUgaGVhcCB0byBjaGVjayB2aXNpYmlsaXR5LgotCQkJICovCi0J CQlJbnN0ckNvdW50VHVwbGVzMihub2RlLCAxKTsKLQkJCWlmICghaW5kZXhfZmV0Y2hfaGVhcChz Y2FuZGVzYywgbm9kZS0+aW9zc19UYWJsZVNsb3QpKQotCQkJCWNvbnRpbnVlOwkJLyogbm8gdmlz aWJsZSB0dXBsZSwgdHJ5IG5leHQgaW5kZXggZW50cnkgKi8KLQotCQkJRXhlY0NsZWFyVHVwbGUo bm9kZS0+aW9zc19UYWJsZVNsb3QpOwotCi0JCQkvKgotCQkJICogT25seSBNVkNDIHNuYXBzaG90 cyBhcmUgc3VwcG9ydGVkIGhlcmUsIHNvIHRoZXJlIHNob3VsZCBiZSBubwotCQkJICogbmVlZCB0 byBrZWVwIGZvbGxvd2luZyB0aGUgSE9UIGNoYWluIG9uY2UgYSB2aXNpYmxlIGVudHJ5IGhhcwot CQkJICogYmVlbiBmb3VuZC4gIElmIHdlIGRpZCB3YW50IHRvIGFsbG93IHRoYXQsIHdlJ2QgbmVl ZCB0byBrZWVwCi0JCQkgKiBtb3JlIHN0YXRlIHRvIHJlbWVtYmVyIG5vdCB0byBjYWxsIGluZGV4 X2dldG5leHRfdGlkIG5leHQgdGltZS4KLQkJCSAqLwotCQkJaWYgKHNjYW5kZXNjLT54c19oZWFw X2NvbnRpbnVlKQotCQkJCWVsb2coRVJST1IsICJub24tTVZDQyBzbmFwc2hvdHMgYXJlIG5vdCBz dXBwb3J0ZWQgaW4gaW5kZXgtb25seSBzY2FucyIpOwotCi0JCQkvKgotCQkJICogTm90ZTogYXQg dGhpcyBwb2ludCB3ZSBhcmUgaG9sZGluZyBhIHBpbiBvbiB0aGUgaGVhcCBwYWdlLCBhcwotCQkJ ICogcmVjb3JkZWQgaW4gc2NhbmRlc2MtPnhzX2NidWYuICBXZSBjb3VsZCByZWxlYXNlIHRoYXQg cGluIG5vdywKLQkJCSAqIGJ1dCBpdCdzIG5vdCBjbGVhciB3aGV0aGVyIGl0J3MgYSB3aW4gdG8g ZG8gc28uICBUaGUgbmV4dCBpbmRleAotCQkJICogZW50cnkgbWlnaHQgcmVxdWlyZSBhIHZpc2l0 IHRvIHRoZSBzYW1lIGhlYXAgcGFnZS4KLQkJCSAqLwotCi0JCQl0dXBsZV9mcm9tX2hlYXAgPSB0 cnVlOwotCQl9CisJCUluc3RyQ291bnRUdXBsZXMyKG5vZGUsIHNjYW5kZXNjLT54c19oZWFwZmV0 Y2gtPm5oZWFwYWNjZXNzZXMpOworCQlzY2FuZGVzYy0+eHNfaGVhcGZldGNoLT5uaGVhcGFjY2Vz c2VzID0gMDsKIAogCQkvKgogCQkgKiBGaWxsIHRoZSBzY2FuIHR1cGxlIHNsb3Qgd2l0aCBkYXRh IGZyb20gdGhlIGluZGV4LiAgVGhpcyBtaWdodCBiZQpAQCAtMjM4LDE5ICsxNzAsMTMgQEAgSW5k ZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJCQllcmVwb3J0KEVSUk9SLAog CQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJCSBlcnJt c2coImxvc3N5IGRpc3RhbmNlIGZ1bmN0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCBpbiBpbmRleC1v bmx5IHNjYW5zIikpKTsKLQotCQkvKgotCQkgKiBJZiB3ZSBkaWRuJ3QgYWNjZXNzIHRoZSBoZWFw LCB0aGVuIHdlJ2xsIG5lZWQgdG8gdGFrZSBhIHByZWRpY2F0ZQotCQkgKiBsb2NrIGV4cGxpY2l0 bHksIGFzIGlmIHdlIGhhZC4gIEZvciBub3cgd2UgZG8gdGhhdCBhdCBwYWdlIGxldmVsLgotCQkg Ki8KLQkJaWYgKCF0dXBsZV9mcm9tX2hlYXApCi0JCQlQcmVkaWNhdGVMb2NrUGFnZShzY2FuZGVz Yy0+aGVhcFJlbGF0aW9uLAotCQkJCQkJCSAgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQp LAotCQkJCQkJCSAgZXN0YXRlLT5lc19zbmFwc2hvdCk7Ci0KIAkJcmV0dXJuIHNsb3Q7CiAJfQog CisJLyogWFhYIFRoaXMgaXMgdWdseSwgYnV0IG5vdCBjbGVhciBob3cgdG8gZG8gYmV0dGVyICov CisJSW5zdHJDb3VudFR1cGxlczIobm9kZSwgc2NhbmRlc2MtPnhzX2hlYXBmZXRjaC0+bmhlYXBh Y2Nlc3Nlcyk7CisJc2NhbmRlc2MtPnhzX2hlYXBmZXRjaC0+bmhlYXBhY2Nlc3NlcyA9IDA7CisK IAkvKgogCSAqIGlmIHdlIGdldCBoZXJlIGl0IG1lYW5zIHRoZSBpbmRleCBzY2FuIGZhaWxlZCBz byB3ZSBhcmUgYXQgdGhlIGVuZCBvZgogCSAqIHRoZSBzY2FuLi4KQEAgLTQwNywxMyArMzMzLDYg QEAgRXhlY0VuZEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCWluZGV4 UmVsYXRpb25EZXNjID0gbm9kZS0+aW9zc19SZWxhdGlvbkRlc2M7CiAJaW5kZXhTY2FuRGVzYyA9 IG5vZGUtPmlvc3NfU2NhbkRlc2M7CiAKLQkvKiBSZWxlYXNlIFZNIGJ1ZmZlciBwaW4sIGlmIGFu eS4gKi8KLQlpZiAobm9kZS0+aW9zc19WTUJ1ZmZlciAhPSBJbnZhbGlkQnVmZmVyKQotCXsKLQkJ UmVsZWFzZUJ1ZmZlcihub2RlLT5pb3NzX1ZNQnVmZmVyKTsKLQkJbm9kZS0+aW9zc19WTUJ1ZmZl ciA9IEludmFsaWRCdWZmZXI7Ci0JfQotCiAJLyoKIAkgKiBXaGVuIGVuZGluZyBhIHBhcmFsbGVs IHdvcmtlciwgY29weSB0aGUgc3RhdGlzdGljcyBnYXRoZXJlZCBieSB0aGUKIAkgKiB3b3JrZXIg YmFjayBpbnRvIHNoYXJlZCBtZW1vcnkgc28gdGhhdCBpdCBjYW4gYmUgcGlja2VkIHVwIGJ5IHRo ZSBtYWluCkBAIC03ODUsMTIgKzcwNCwxMiBAQCBFeGVjSW5kZXhPbmx5U2NhbkluaXRpYWxpemVE U00oSW5kZXhPbmx5U2NhblN0YXRlICpub2RlLAogCW5vZGUtPmlvc3NfU2NhbkRlc2MgPQogCQlp bmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAogCQkJ CQkJCQkgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSBub2RlLT5pb3NzX1RhYmxl U2xvdCwKIAkJCQkJCQkJICZub2RlLT5pb3NzX0luc3RydW1lbnQsCiAJCQkJCQkJCSBub2RlLT5p b3NzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1PcmRlckJ5S2V5cywKIAkJ CQkJCQkJIHBpc2Nhbik7CiAJbm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwID0gdHJ1 ZTsKLQlub2RlLT5pb3NzX1ZNQnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKIAogCS8qCiAJICogSWYg bm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFk IGFuZCBwYXNzCkBAIC04NTEsNiArNzcwLDcgQEAgRXhlY0luZGV4T25seVNjYW5Jbml0aWFsaXpl V29ya2VyKEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSwKIAlub2RlLT5pb3NzX1NjYW5EZXNjID0K IAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwK IAkJCQkJCQkJIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkgbm9kZS0+aW9zc19U YWJsZVNsb3QsCiAJCQkJCQkJCSAmbm9kZS0+aW9zc19JbnN0cnVtZW50LAogCQkJCQkJCQkgbm9k ZS0+aW9zc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtT3JkZXJCeUtleXMs CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMgYi9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKaW5kZXggNzJiMTM1ZTVkLi5mZGY4YmNi YzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYworKysg Yi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKQEAgLTEwNyw3ICsxMDcsNyBA QCBJbmRleE5leHQoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIHNlcmlhbGx5IGV4ZWN1dGlu ZyBhbiBpbmRleCBzY2FuIHRoYXQgd2FzIHBsYW5uZWQgdG8gYmUgcGFyYWxsZWwuCiAJCSAqLwog CQlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24s Ci0JCQkJCQkJCSAgIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSAgIG5vZGUtPmlz c19SZWxhdGlvbkRlc2MsIE5VTEwsCiAJCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfc25hcHNob3QsCiAJ CQkJCQkJCSAgICZub2RlLT5pc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJICAgbm9kZS0+aXNzX051 bVNjYW5LZXlzLApAQCAtMTI4LDcgKzEyOCw3IEBAIEluZGV4TmV4dChJbmRleFNjYW5TdGF0ZSAq bm9kZSkKIAkvKgogCSAqIG9rLCBub3cgdGhhdCB3ZSBoYXZlIHdoYXQgd2UgbmVlZCwgZmV0Y2gg dGhlIG5leHQgdHVwbGUuCiAJICovCi0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChzY2FuZGVz YywgZGlyZWN0aW9uLCBzbG90KSkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNj YW5kZXNjLCBkaXJlY3Rpb24sIHNsb3QpKQogCXsKIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsK IApAQCAtMjAzLDcgKzIwMyw3IEBAIEluZGV4TmV4dFdpdGhSZW9yZGVyKEluZGV4U2NhblN0YXRl ICpub2RlKQogCQkgKiBzZXJpYWxseSBleGVjdXRpbmcgYW4gaW5kZXggc2NhbiB0aGF0IHdhcyBw bGFubmVkIHRvIGJlIHBhcmFsbGVsLgogCQkgKi8KIAkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNj YW4obm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAotCQkJCQkJCQkgICBub2RlLT5pc3NfUmVs YXRpb25EZXNjLAorCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLCBOVUxMLAogCQkJ CQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAogCQkJCQkJCQkgICAmbm9kZS0+aXNzX0luc3Ry dW1lbnQsCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1TY2FuS2V5cywKQEAgLTI2MCw3ICsyNjAs NyBAQCBJbmRleE5leHRXaXRoUmVvcmRlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJICogRmV0 Y2ggbmV4dCB0dXBsZSBmcm9tIHRoZSBpbmRleC4KIAkJICovCiBuZXh0X2luZGV4dHVwbGU6Ci0J CWlmICghaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwg c2xvdCkpCisJCWlmICghdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBGb3J3YXJk U2NhbkRpcmVjdGlvbiwgc2xvdCkpCiAJCXsKIAkJCS8qCiAJCQkgKiBObyBtb3JlIHR1cGxlcyBm cm9tIHRoZSBpbmRleC4gIEJ1dCB3ZSBzdGlsbCBuZWVkIHRvIGRyYWluIGFueQpAQCAtMTcxOSw3 ICsxNzE5LDcgQEAgRXhlY0luZGV4U2NhbkluaXRpYWxpemVEU00oSW5kZXhTY2FuU3RhdGUgKm5v ZGUsCiAKIAlub2RlLT5pc3NfU2NhbkRlc2MgPQogCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwo bm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAotCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9u RGVzYywKKwkJCQkJCQkJIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsIE5VTEwsCiAJCQkJCQkJCSAm bm9kZS0+aXNzX0luc3RydW1lbnQsCiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtU2NhbktleXMsCiAJ CQkJCQkJCSBub2RlLT5pc3NfTnVtT3JkZXJCeUtleXMsCkBAIC0xNzgzLDcgKzE3ODMsNyBAQCBF eGVjSW5kZXhTY2FuSW5pdGlhbGl6ZVdvcmtlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSwKIAogCW5v ZGUtPmlzc19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5z c19jdXJyZW50UmVsYXRpb24sCi0JCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAorCQkJ CQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywgTlVMTCwKIAkJCQkJCQkJICZub2RlLT5pc3Nf SW5zdHJ1bWVudCwKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5v ZGUtPmlzc19OdW1PcmRlckJ5S2V5cywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL2luZHhwYXRoLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5j CmluZGV4IDVkNGY4MWVlNy4uODM2ODFhNmYzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGF0aC9pbmR4cGF0aC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2lu ZHhwYXRoLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIC8qIFdoZXRoZXIgd2UgYXJlIGxvb2tpbmcgZm9y IHBsYWluIGluZGV4c2NhbiwgYml0bWFwIHNjYW4sIG9yIGVpdGhlciAqLwogdHlwZWRlZiBlbnVt CiB7Ci0JU1RfSU5ERVhTQ0FOLAkJCQkvKiBtdXN0IHN1cHBvcnQgYW1nZXR0dXBsZSAqLworCVNU X0lOREVYU0NBTiwJCQkJLyogbXVzdCBzdXBwb3J0IGFtZ2V0dHVwbGUgb3IgYW1nZXRiYXRjaCAq LwogCVNUX0JJVE1BUFNDQU4sCQkJCS8qIG11c3Qgc3VwcG9ydCBhbWdldGJpdG1hcCAqLwogCVNU X0FOWVNDQU4sCQkJCQkvKiBlaXRoZXIgaXMgb2theSAqLwogfSBTY2FuVHlwZUNvbnRyb2w7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKaW5kZXggZTU1M2FmYjdmLi5hYzg5YzVlZTMg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYworKysgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKQEAgLTMxMywxMSArMzEzLDExIEBA IGdldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQgcmVsYXRpb25PYmplY3RJ ZCwgYm9vbCBpbmhwYXJlbnQsCiAJCQkJaW5mby0+YW1zZWFyY2hhcnJheSA9IGFtcm91dGluZS0+ YW1zZWFyY2hhcnJheTsKIAkJCQlpbmZvLT5hbXNlYXJjaG51bGxzID0gYW1yb3V0aW5lLT5hbXNl YXJjaG51bGxzOwogCQkJCWluZm8tPmFtY2FucGFyYWxsZWwgPSBhbXJvdXRpbmUtPmFtY2FucGFy YWxsZWw7Ci0JCQkJaW5mby0+YW1oYXNnZXR0dXBsZSA9IChhbXJvdXRpbmUtPmFtZ2V0dHVwbGUg IT0gTlVMTCk7CisJCQkJaW5mby0+YW1oYXNnZXR0dXBsZSA9IChhbXJvdXRpbmUtPmFtZ2V0dHVw bGUgIT0gTlVMTCB8fAorCQkJCQkJCQkJICAgYW1yb3V0aW5lLT5hbWdldGJhdGNoICE9IE5VTEwp OwogCQkJCWluZm8tPmFtaGFzZ2V0Yml0bWFwID0gYW1yb3V0aW5lLT5hbWdldGJpdG1hcCAhPSBO VUxMICYmCiAJCQkJCXJlbGF0aW9uLT5yZF90YWJsZWFtLT5zY2FuX2JpdG1hcF9uZXh0X3R1cGxl ICE9IE5VTEw7Ci0JCQkJaW5mby0+YW1jYW5tYXJrcG9zID0gKGFtcm91dGluZS0+YW1tYXJrcG9z ICE9IE5VTEwgJiYKLQkJCQkJCQkJCSAgYW1yb3V0aW5lLT5hbXJlc3RycG9zICE9IE5VTEwpOwor CQkJCWluZm8tPmFtY2FubWFya3BvcyA9IGFtcm91dGluZS0+YW1wb3NyZXNldCAhPSBOVUxMOwog CQkJCWluZm8tPmFtY29zdGVzdGltYXRlID0gYW1yb3V0aW5lLT5hbWNvc3Rlc3RpbWF0ZTsKIAkJ CQlBc3NlcnQoaW5mby0+YW1jb3N0ZXN0aW1hdGUgIT0gTlVMTCk7CiAKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYwppbmRleCAyYzg0ODViODguLjRhNzRiNjlkZiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jCisr KyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYwpAQCAtODg5LDcg Kzg4OSw4IEBAIElzSW5kZXhVc2FibGVGb3JSZXBsaWNhSWRlbnRpdHlGdWxsKFJlbGF0aW9uIGlk eHJlbCwgQXR0ck1hcCAqYXR0cm1hcCkKIAkgKiBUaGUgZ2l2ZW4gaW5kZXggYWNjZXNzIG1ldGhv ZCBtdXN0IGltcGxlbWVudCAiYW1nZXR0dXBsZSIsIHdoaWNoIHdpbGwKIAkgKiBiZSB1c2VkIGxh dGVyIHRvIGZldGNoIHRoZSB0dXBsZXMuICBTZWUgUmVsYXRpb25GaW5kUmVwbFR1cGxlQnlJbmRl eCgpLgogCSAqLwotCWlmIChHZXRJbmRleEFtUm91dGluZUJ5QW1JZChpZHhyZWwtPnJkX3JlbC0+ cmVsYW0sIGZhbHNlKS0+YW1nZXR0dXBsZSA9PSBOVUxMKQorCWlmIChHZXRJbmRleEFtUm91dGlu ZUJ5QW1JZChpZHhyZWwtPnJkX3JlbC0+cmVsYW0sIGZhbHNlKS0+YW1nZXR0dXBsZSA9PSBOVUxM ICYmCisJCUdldEluZGV4QW1Sb3V0aW5lQnlBbUlkKGlkeHJlbC0+cmRfcmVsLT5yZWxhbSwgZmFs c2UpLT5hbWdldGJhdGNoID09IE5VTEwpCiAJCXJldHVybiBmYWxzZTsKIAogCXJldHVybiB0cnVl OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMKaW5kZXggMGFmMjZkNmFjLi4xZWJlMGE3NmEgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L2FtdXRpbHMuYwpAQCAtMzYzLDcgKzM2Myw3IEBAIGluZGV4YW1fcHJvcGVydHko RnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1j bHVzdGVyYWJsZSk7CiAKIAkJCWNhc2UgQU1QUk9QX0lOREVYX1NDQU46Ci0JCQkJUEdfUkVUVVJO X0JPT0wocm91dGluZS0+YW1nZXR0dXBsZSA/IHRydWUgOiBmYWxzZSk7CisJCQkJUEdfUkVUVVJO X0JPT0wocm91dGluZS0+YW1nZXR0dXBsZSB8fCByb3V0aW5lLT5hbWdldGJhdGNoID8gdHJ1ZSA6 IGZhbHNlKTsKIAogCQkJY2FzZSBBTVBST1BfQklUTUFQX1NDQU46CiAJCQkJUEdfUkVUVVJOX0JP T0wocm91dGluZS0+YW1nZXRiaXRtYXAgPyB0cnVlIDogZmFsc2UpOwpAQCAtMzkyLDcgKzM5Miw3 IEBAIGluZGV4YW1fcHJvcGVydHkoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJCQlQR19SRVRV Uk5fQk9PTChyb3V0aW5lLT5hbWNhbm11bHRpY29sKTsKIAogCQljYXNlIEFNUFJPUF9DQU5fRVhD TFVERToKLQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUgPyB0cnVlIDogZmFs c2UpOworCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1nZXR0dXBsZSB8fCByb3V0aW5lLT5h bWdldGJhdGNoID8gdHJ1ZSA6IGZhbHNlKTsKIAogCQljYXNlIEFNUFJPUF9DQU5fSU5DTFVERToK IAkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtY2FuaW5jbHVkZSk7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9z ZWxmdW5jcy5jCmluZGV4IGM3NjBiMTlkYi4uN2JiYTIyM2MwIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2Vs ZnVuY3MuYwpAQCAtMTAyLDcgKzEwMiw2IEBACiAjaW5jbHVkZSAiYWNjZXNzL2dpbi5oIgogI2lu Y2x1ZGUgImFjY2Vzcy90YWJsZS5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCi0jaW5j bHVkZSAiYWNjZXNzL3Zpc2liaWxpdHltYXAuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbGxh dGlvbi5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BlcmF0b3IuaCIKICNpbmNsdWRlICJjYXRh bG9nL3BnX3N0YXRpc3RpYy5oIgpAQCAtNzA0MywxMCArNzA0Miw2IEBAIGdldF9hY3R1YWxfdmFy aWFibGVfZW5kcG9pbnQoUmVsYXRpb24gaGVhcFJlbCwKIAlib29sCQloYXZlX2RhdGEgPSBmYWxz ZTsKIAlTbmFwc2hvdERhdGEgU25hcHNob3ROb25WYWN1dW1hYmxlOwogCUluZGV4U2NhbkRlc2Mg aW5kZXhfc2NhbjsKLQlCdWZmZXIJCXZtYnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKLQlCbG9ja051 bWJlciBsYXN0X2hlYXBfYmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JaW50CQkJbl92aXNp dGVkX2hlYXBfcGFnZXMgPSAwOwotCUl0ZW1Qb2ludGVyIHRpZDsKIAlEYXR1bQkJdmFsdWVzW0lO REVYX01BWF9LRVlTXTsKIAlib29sCQlpc251bGxbSU5ERVhfTUFYX0tFWVNdOwogCU1lbW9yeUNv bnRleHQgb2xkY29udGV4dDsKQEAgLTcwOTgsNyArNzA5Myw3IEBAIGdldF9hY3R1YWxfdmFyaWFi bGVfZW5kcG9pbnQoUmVsYXRpb24gaGVhcFJlbCwKIAlJbml0Tm9uVmFjdXVtYWJsZVNuYXBzaG90 KFNuYXBzaG90Tm9uVmFjdXVtYWJsZSwKIAkJCQkJCQkgIEdsb2JhbFZpc1Rlc3RGb3IoaGVhcFJl bCkpOwogCi0JaW5kZXhfc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsLCBpbmRleFJlbCwK KwlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWwsIGluZGV4UmVsLCB0YWJsZXNs b3QsCiAJCQkJCQkJCSAmU25hcHNob3ROb25WYWN1dW1hYmxlLCBOVUxMLAogCQkJCQkJCQkgMSwg MCk7CiAJLyogU2V0IGl0IHVwIGZvciBpbmRleC1vbmx5IHNjYW4gKi8KQEAgLTcxMDYsNDggKzcx MDEsMjAgQEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVsLAog CWluZGV4X3Jlc2NhbihpbmRleF9zY2FuLCBzY2Fua2V5cywgMSwgTlVMTCwgMCk7CiAKIAkvKiBG ZXRjaCBmaXJzdC9uZXh0IHR1cGxlIGluIHNwZWNpZmllZCBkaXJlY3Rpb24gKi8KLQl3aGlsZSAo KHRpZCA9IGluZGV4X2dldG5leHRfdGlkKGluZGV4X3NjYW4sIGluZGV4c2NhbmRpcikpICE9IE5V TEwpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChpbmRleF9zY2FuLCBpbmRleHNj YW5kaXIsIHRhYmxlc2xvdCkpCiAJewotCQlCbG9ja051bWJlciBibG9jayA9IEl0ZW1Qb2ludGVy R2V0QmxvY2tOdW1iZXIodGlkKTsKKwkJLyogV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0aGUgaGVh cCB0dXBsZSBmb3IgYW55dGhpbmcgKi8KKwkJRXhlY0NsZWFyVHVwbGUodGFibGVzbG90KTsKIAot CQlpZiAoIVZNX0FMTF9WSVNJQkxFKGhlYXBSZWwsCi0JCQkJCQkJYmxvY2ssCi0JCQkJCQkJJnZt YnVmZmVyKSkKLQkJewotCQkJLyogUmF0cywgd2UgaGF2ZSB0byB2aXNpdCB0aGUgaGVhcCB0byBj aGVjayB2aXNpYmlsaXR5ICovCi0JCQlpZiAoIWluZGV4X2ZldGNoX2hlYXAoaW5kZXhfc2Nhbiwg dGFibGVzbG90KSkKLQkJCXsKLQkJCQkvKgotCQkJCSAqIE5vIHZpc2libGUgdHVwbGUgZm9yIHRo aXMgaW5kZXggZW50cnksIHNvIHdlIG5lZWQgdG8KLQkJCQkgKiBhZHZhbmNlIHRvIHRoZSBuZXh0 IGVudHJ5LiAgQmVmb3JlIGRvaW5nIHNvLCBjb3VudCBoZWFwCi0JCQkJICogcGFnZSBmZXRjaGVz IGFuZCBnaXZlIHVwIGlmIHdlJ3ZlIGRvbmUgdG9vIG1hbnkuCi0JCQkJICoKLQkJCQkgKiBXZSBk b24ndCBjaGFyZ2UgYSBwYWdlIGZldGNoIGlmIHRoaXMgaXMgdGhlIHNhbWUgaGVhcCBwYWdlCi0J CQkJICogYXMgdGhlIHByZXZpb3VzIHR1cGxlLiAgVGhpcyBpcyBvbiB0aGUgY29uc2VydmF0aXZl IHNpZGUsCi0JCQkJICogc2luY2Ugb3RoZXIgcmVjZW50bHktYWNjZXNzZWQgcGFnZXMgYXJlIHBy b2JhYmx5IHN0aWxsIGluCi0JCQkJICogYnVmZmVycyB0b287IGJ1dCBpdCdzIGdvb2QgZW5vdWdo IGZvciB0aGlzIGhldXJpc3RpYy4KLQkJCQkgKi8KKwkJLyoKKwkJICogTm8gdmlzaWJsZSB0dXBs ZSBmb3IgdGhpcyBpbmRleCBlbnRyeSwgc28gd2UgbmVlZCB0byBhZHZhbmNlIHRvIHRoZQorCQkg KiBuZXh0IGVudHJ5LiAgQmVmb3JlIGRvaW5nIHNvLCBjb3VudCBoZWFwIHBhZ2UgZmV0Y2hlcyBh bmQgZ2l2ZSB1cAorCQkgKiBpZiB3ZSd2ZSBkb25lIHRvbyBtYW55LgorCQkgKi8KICNkZWZpbmUg VklTSVRFRF9QQUdFU19MSU1JVCAxMDAKIAotCQkJCWlmIChibG9jayAhPSBsYXN0X2hlYXBfYmxv Y2spCi0JCQkJewotCQkJCQlsYXN0X2hlYXBfYmxvY2sgPSBibG9jazsKLQkJCQkJbl92aXNpdGVk X2hlYXBfcGFnZXMrKzsKLQkJCQkJaWYgKG5fdmlzaXRlZF9oZWFwX3BhZ2VzID4gVklTSVRFRF9Q QUdFU19MSU1JVCkKLQkJCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJCWNvbnRpbnVlOwkJLyogbm8g dmlzaWJsZSB0dXBsZSwgdHJ5IG5leHQgaW5kZXggZW50cnkgKi8KLQkJCX0KLQotCQkJLyogV2Ug ZG9uJ3QgYWN0dWFsbHkgbmVlZCB0aGUgaGVhcCB0dXBsZSBmb3IgYW55dGhpbmcgKi8KLQkJCUV4 ZWNDbGVhclR1cGxlKHRhYmxlc2xvdCk7Ci0KLQkJCS8qCi0JCQkgKiBXZSBkb24ndCBjYXJlIHdo ZXRoZXIgdGhlcmUncyBtb3JlIHRoYW4gb25lIHZpc2libGUgdHVwbGUgaW4KLQkJCSAqIHRoZSBI T1QgY2hhaW47IGlmIGFueSBhcmUgdmlzaWJsZSwgdGhhdCdzIGdvb2QgZW5vdWdoLgotCQkJICov Ci0JCX0KKwkJaWYgKGluZGV4X3NjYW4tPnhzX2hlYXBmZXRjaC0+bmhlYXBhY2Nlc3NlcyA+IFZJ U0lURURfUEFHRVNfTElNSVQpCisJCQlicmVhazsKIAogCQkvKgogCQkgKiBXZSBleHBlY3QgdGhh dCB0aGUgaW5kZXggd2lsbCByZXR1cm4gZGF0YSBpbiBJbmRleFR1cGxlIG5vdApAQCAtNzE4MCw4 ICs3MTQ3LDYgQEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVs LAogCQlicmVhazsKIAl9CiAKLQlpZiAodm1idWZmZXIgIT0gSW52YWxpZEJ1ZmZlcikKLQkJUmVs ZWFzZUJ1ZmZlcih2bWJ1ZmZlcik7CiAJaW5kZXhfZW5kc2NhbihpbmRleF9zY2FuKTsKIAogCXJl dHVybiBoYXZlX2RhdGE7CmRpZmYgLS1naXQgYS9jb250cmliL2Jsb29tL2JsdXRpbHMuYyBiL2Nv bnRyaWIvYmxvb20vYmx1dGlscy5jCmluZGV4IDdhNDY4YjRhMS4uMGMzYmE2ODRhIDEwMDY0NAot LS0gYS9jb250cmliL2Jsb29tL2JsdXRpbHMuYworKysgYi9jb250cmliL2Jsb29tL2JsdXRpbHMu YwpAQCAtMTQ4LDggKzE0OCw3IEBAIGJsaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91 dGluZS0+YW1nZXR0dXBsZSA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWdldGJpdG1hcCA9IGJsZ2V0 Yml0bWFwOwogCWFtcm91dGluZS0+YW1lbmRzY2FuID0gYmxlbmRzY2FuOwotCWFtcm91dGluZS0+ YW1tYXJrcG9zID0gTlVMTDsKLQlhbXJvdXRpbmUtPmFtcmVzdHJwb3MgPSBOVUxMOworCWFtcm91 dGluZS0+YW1wb3NyZXNldCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWVzdGltYXRlcGFyYWxsZWxz Y2FuID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1y b3V0aW5lLT5hbXBhcmFsbGVscmVzY2FuID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dt bC9pbmRleGFtLnNnbWwgYi9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCmluZGV4IDYzZDdlMzc2 Zi4uY2RjOWM2NWE2IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCisrKyBi L2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKQEAgLTE2MSwxMCArMTYxLDExIEBAIHR5cGVkZWYg c3RydWN0IEluZGV4QW1Sb3V0aW5lCiAgICAgYW1iZWdpbnNjYW5fZnVuY3Rpb24gYW1iZWdpbnNj YW47CiAgICAgYW1yZXNjYW5fZnVuY3Rpb24gYW1yZXNjYW47CiAgICAgYW1nZXR0dXBsZV9mdW5j dGlvbiBhbWdldHR1cGxlOyAgICAgLyogY2FuIGJlIE5VTEwgKi8KKyAgICBhbWdldGJhdGNoX2Z1 bmN0aW9uIGFtZ2V0YmF0Y2g7IC8qIGNhbiBiZSBOVUxMICovCisgICAgYW1mcmVlYmF0Y2hfZnVu Y3Rpb24gYW1mcmVlYmF0Y2g7CS8qIGNhbiBiZSBOVUxMICovCiAgICAgYW1nZXRiaXRtYXBfZnVu Y3Rpb24gYW1nZXRiaXRtYXA7ICAgLyogY2FuIGJlIE5VTEwgKi8KICAgICBhbWVuZHNjYW5fZnVu Y3Rpb24gYW1lbmRzY2FuOwotICAgIGFtbWFya3Bvc19mdW5jdGlvbiBhbW1hcmtwb3M7ICAgICAg IC8qIGNhbiBiZSBOVUxMICovCi0gICAgYW1yZXN0cnBvc19mdW5jdGlvbiBhbXJlc3RycG9zOyAg ICAgLyogY2FuIGJlIE5VTEwgKi8KKyAgICBhbXBvc3Jlc2V0X2Z1bmN0aW9uIGFtcG9zcmVzZXQ7 IC8qIGNhbiBiZSBOVUxMICovCiAKICAgICAvKiBpbnRlcmZhY2UgZnVuY3Rpb25zIHRvIHN1cHBv cnQgcGFyYWxsZWwgaW5kZXggc2NhbnMgKi8KICAgICBhbWVzdGltYXRlcGFyYWxsZWxzY2FuX2Z1 bmN0aW9uIGFtZXN0aW1hdGVwYXJhbGxlbHNjYW47ICAgIC8qIGNhbiBiZSBOVUxMICovCkBAIC03 NDMsNiArNzQ0LDEzNyBAQCBhbWdldHR1cGxlIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICA8c3Ry dWN0ZmllbGQ+YW1nZXR0dXBsZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGluIGl0cyA8c3RydWN0bmFt ZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFtZT4KICAgIHN0cnVjdCBtdXN0IGJlIHNldCB0byBO VUxMLgogICA8L3BhcmE+CisgIDxub3RlPgorICAgPHBhcmE+CisgICAgQXMgb2YgPHByb2R1Y3Ru YW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiB2ZXJzaW9uIDE5LCBwb3NpdGlvbiBtYXJraW5n CisgICAgYW5kIHJlc3RvcmF0aW9uIG9mIHNjYW5zIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgZm9y IHRoZQorICAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gaW50ZXJmYWNlOyBvbmx5 IHRoZQorICAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlIHN1cHBv cnRzIHRoaXMgZmVhdHVyZSB0aHJvdWdoCisgICAgdGhlIDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9m dW5jdGlvbj4gY2FsbGJhY2suCisgICA8L3BhcmE+CisgIDwvbm90ZT4KKworICA8cGFyYT4KKzxw cm9ncmFtbGlzdGluZz4KK0JhdGNoSW5kZXhTY2FuCithbWdldGJhdGNoIChJbmRleFNjYW5EZXNj IHNjYW4sCisgICAgICAgICAgICBCYXRjaEluZGV4U2NhbiBwcmlvcmJhdGNoLAorICAgICAgICAg ICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOworPC9wcm9ncmFtbGlzdGluZz4KKyAgIFJldHVy biB0aGUgbmV4dCBiYXRjaCBvZiBpbmRleCB0dXBsZXMgaW4gdGhlIGdpdmVuIHNjYW4sIG1vdmlu ZyBpbiB0aGUKKyAgIGdpdmVuIGRpcmVjdGlvbiAoZm9yd2FyZCBvciBiYWNrd2FyZCBpbiB0aGUg aW5kZXgpLiAgUmV0dXJucyBhbiBpbnN0YW5jZSBvZgorICAgPHR5cGU+QmF0Y2hJbmRleFNjYW48 L3R5cGU+IHdpdGggaW5kZXggdHVwbGVzIGxvYWRlZCwgb3IKKyAgIDxsaXRlcmFsPk5VTEw8L2xp dGVyYWw+IGlmIHRoZXJlIGFyZSBubyBtb3JlIGluZGV4IHR1cGxlcy4KKyAgPC9wYXJhPgorCisg IDxwYXJhPgorICAgVGhlIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+IHBhcmFtZXRlciBw YXNzZXMgdGhlIGJhdGNoIHByZXZpb3VzbHkKKyAgIHJldHVybmVkIGJ5IGFuIGVhcmxpZXIgPGZ1 bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBjYWxsIChvcgorICAgPGxpdGVyYWw+TlVMTDwv bGl0ZXJhbD4gb24gdGhlIGZpcnN0IGNhbGwpLiAgVGhlIGluZGV4IEFNIHVzZXMKKyAgIDxsaXRl cmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+IHRvIGRldGVybWluZSB3aGljaCBpbmRleCBwYWdlIHRv IHJlYWQgbmV4dCwKKyAgIHR5cGljYWxseSBieSBmb2xsb3dpbmcgcGFnZSBsaW5rcyBmb3VuZCBp biA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPi4KKyAgIFRoZSByZXR1cm5lZCBiYXRjaCBj b250YWlucyBtYXRjaGluZyBpdGVtcyBpbW1lZGlhdGVseSBhZGphY2VudCB0byB0aG9zZQorICAg ZnJvbSA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPiBpbiB0aGUgY29tbW9uIGNhc2Ugd2hl cmUKKyAgIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+IGlzIHRoZSBiYXRjaCB0aGF0IHdh cyByZXR1cm5lZCBieSB0aGUgbW9zdAorICAgcmVjZW50IGNhbGwgdG8gPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPiBjYWxsICh0aG91Z2ggbm90IHdoZW4gdGhlCisgICBtb3N0IHJlY2Vu dCBjYWxsIHVzZWQgdGhlIG9wcG9zaXRlIHNjYW4gZGlyZWN0aW9uIHRvIHRoaXMgY2FsbCwgYW5k IG5vdAorICAgd2hlbiBhIG1hcmsgaGFzIGJlZW4gcmVzdG9yZWQpLgorICA8L3BhcmE+CisKKyAg PHBhcmE+CisgICBBIGJhdGNoIHJldHVybmVkIGJ5IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4gaXMgZ3VhcmFudGVlZCB0byBiZQorICAgYXNzb2NpYXRlZCB3aXRoIGFuIGluZGV4IHBh Z2UgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgbWF0Y2hpbmcgdHVwbGUuCisgICBUaGUgaW5kZXgg cGFnZSBhc3NvY2lhdGVkIHdpdGggdGhlIGJhdGNoIG1heSBiZSByZXRhaW5lZCBpbiBhIGJ1ZmZl ciB3aXRoCisgICBpdHMgcGluIGhlbGQgYXMgYW4gaW50ZXJsb2NrIGFnYWluc3QgY29uY3VycmVu dCBUSUQgcmVjeWNsaW5nIGJ5CisgICA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+LiAgU2VlIDx4 cmVmIGxpbmtlbmQ9ImluZGV4LWxvY2tpbmciLz4gZm9yIGRldGFpbHMKKyAgIG9uIGJ1ZmZlciBw aW4gbWFuYWdlbWVudCBkdXJpbmcgPHF1b3RlPnBsYWluPC9xdW90ZT4gaW5kZXggc2NhbnMuCisg IDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rp b24+IGludGVyZmFjZSBkb2VzIG5vdCBzdXBwb3J0IGluZGV4LW9ubHkKKyAgIHNjYW5zIHRoYXQg cmV0dXJuIGRhdGEgdmlhIHRoZSA8bGl0ZXJhbD54c19oaXR1cDwvbGl0ZXJhbD4gbWVjaGFuaXNt LgorICAgSW5kZXgtb25seSBzY2FucyBhcmUgc3VwcG9ydGVkIHRocm91Z2ggdGhlIDxsaXRlcmFs PnhzX2l0dXA8L2xpdGVyYWw+CisgICBtZWNoYW5pc20gb25seS4KKyAgPC9wYXJhPgorCisgIDxw YXJhPgorICAgVGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gZnVuY3Rpb24gbmVl ZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRoZQorICAgYWNjZXNzIG1ldGhvZCBzdXBwb3J0cyA8cXVv dGU+cGxhaW48L3F1b3RlPiBpbmRleCBzY2Fucy4gIElmIGl0IGRvZXNuJ3QsCisgICB0aGUgPGZ1 bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmaWVsZCBpbiBpdHMKKyAgIDxzdHJ1Y3RuYW1l PkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3QgbXVzdCBiZSBzZXQgdG8gTlVMTC4K KyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgQSA8dHlwZT5CYXRjaEluZGV4U2NhbjwvdHlwZT4g dGhhdCBpcyByZXR1cm5lZCBieQorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBp cyBubyBsb25nZXIgbWFuYWdlZCBieSB0aGUgYWNjZXNzIG1ldGhvZC4KKyAgIEl0IGlzIHVwIHRv IHRoZSB0YWJsZSBBTSBjYWxsZXIgdG8gZGVjaWRlIHdoZW4gaXQgc2hvdWxkIGJlIGZyZWVkIGJ5 CisgICBwYXNzaW5nIGl0IHRvIDxmdW5jdGlvbj5hbWZyZWViYXRjaDwvZnVuY3Rpb24+LiAgTm90 ZSBhbHNvIHRoYXQKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gZnVuY3Rpb25z IG11c3QgbmV2ZXIgbW9kaWZ5IHRoZQorICAgPHN0cnVjdGZpZWxkPnByaW9yYmF0Y2g8L3N0cnVj dGZpZWxkPiBwYXJhbWV0ZXIuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSBhY2Nlc3Mg bWV0aG9kIG1heSBwcm92aWRlIG9ubHkgb25lIG9mIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5j dGlvbj4KKyAgIGFuZCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGNhbGxiYWNrcywg bm90IGJvdGggKFhYWCB1bmNlcnRhaW4pLgorICAgV2hlbiB0aGUgYWNjZXNzIG1ldGhvZCBwcm92 aWRlcyA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LCBpdCBtdXN0CisgICBhbHNvIHBy b3ZpZGUgPGZ1bmN0aW9uPmFtZnJlZWJhdGNoPC9mdW5jdGlvbj4uCisgIDwvcGFyYT4KKworICA8 cGFyYT4KKyAgIFRoZSBzYW1lIGNhdmVhdHMgZGVzY3JpYmVkIGZvciA8ZnVuY3Rpb24+YW1nZXR0 dXBsZTwvZnVuY3Rpb24+IGFwcGx5IGhlcmUKKyAgIHRvbzogYW4gZW50cnkgaW4gdGhlIHJldHVy bmVkIGJhdGNoIG1lYW5zIG9ubHkgdGhhdCB0aGUgaW5kZXggY29udGFpbnMKKyAgIGFuIGVudHJ5 IHRoYXQgbWF0Y2hlcyB0aGUgc2NhbiBrZXlzLCBub3QgdGhhdCB0aGUgdHVwbGUgbmVjZXNzYXJp bHkgc3RpbGwKKyAgIGV4aXN0cyBpbiB0aGUgaGVhcCBvciB3aWxsIHBhc3MgdGhlIGNhbGxlcidz IHNuYXBzaG90IHRlc3QuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKzxwcm9ncmFtbGlzdGluZz4K K3ZvaWQKK2FtZnJlZWJhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCisgICAgICAgICAgICAgQmF0 Y2hJbmRleFNjYW4gYmF0Y2gpOworPC9wcm9ncmFtbGlzdGluZz4KKyAgIFJlbGVhc2VzIGEgYmF0 Y2ggcmV0dXJuZWQgYnkgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gY2FsbGJh Y2suCisgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBleGNsdXNpdmVseSBieSB0YWJsZSBhY2Nl c3MgbWV0aG9kcyB0byBpbmRpY2F0ZQorICAgdGhhdCBwcm9jZXNzaW5nIG9mIHRoZSBiYXRjaCBp cyBjb21wbGV0ZTsgaXQgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aXRoaW4KKyAgIHRoZSBpbmRl eCBhY2Nlc3MgbWV0aG9kIGl0c2VsZi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgPGZ1bmN0 aW9uPmFtZnJlZWJhdGNoPC9mdW5jdGlvbj4gZnJlZXMgYnVmZmVyIHBpbnMgaGVsZCBvbiB0aGUg YmF0Y2gncworICAgYXNzb2NpYXRlZCBpbmRleCBwYWdlIGFuZCByZWxlYXNlcyByZWxhdGVkIG1l bW9yeSBhbmQgcmVzb3VyY2VzLiAgVGhlc2UKKyAgIGJ1ZmZlciBwaW5zIHNlcnZlIGFzIGFuIGlu dGVybG9jayBhZ2FpbnN0IGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBieQorICAgPGNvbW1hbmQ+ VkFDVVVNPC9jb21tYW5kPiwgcHJvdGVjdGluZyB0aGUgdGFibGUgYWNjZXNzIG1ldGhvZCBmcm9t IGNvbmZ1c2lvbgorICAgYWJvdXQgd2hpY2ggVElEIGNvcnJlc3BvbmRzIHRvIHdoaWNoIGxvZ2lj YWwgcm93LiAgU2VlIDx4cmVmCisgICBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+IGZvciBkZXRh aWxlZCBkaXNjdXNzaW9uIG9mIGJ1ZmZlciBwaW4gbWFuYWdlbWVudC4KKyAgPC9wYXJhPgorCisg IDxwYXJhPgorICAgVGhlIGluZGV4IEFNIG1heSBjaG9vc2UgdG8gcmV0YWluIGl0cyBvd24gYnVm ZmVyIHBpbnMgYWNyb3NzIG11bHRpcGxlCisgICA8ZnVuY3Rpb24+YW1mcmVlYmF0Y2g8L2Z1bmN0 aW9uPiBjYWxscyB3aGVuIHRoaXMgc2VydmVzIGFuIGludGVybmFsIHB1cnBvc2UKKyAgIChmb3Ig ZXhhbXBsZSwgbWFpbnRhaW5pbmcgYSBkZXNjZW50IHN0YWNrIG9mIHBpbm5lZCBpbmRleCBwYWdl cyBmb3IgcmV1c2UKKyAgIGFjcm9zcyA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGNh bGxzKS4gIEhvd2V2ZXIsIGFueSBzY2hlbWUgdGhhdAorICAgcmV0YWlucyBidWZmZXIgcGlucyBt dXN0IGtlZXAgdGhlIG51bWJlciBvZiByZXRhaW5lZCBwaW5zIGZpeGVkIGFuZCBzbWFsbCwKKyAg IHRvIGF2b2lkIGV4aGF1c3RpbmcgdGhlIGJhY2tlbmQncyBidWZmZXIgcGluIGxpbWl0LgorICA8 L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgaW5kZXggQU0gaGFzIHRoZSBvcHRpb24gb2Ygc2V0 dGluZyA8bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFsPiBiaXRzIGluCisgICB0aGUgaW5kZXggcGFn ZSB0byBtYXJrIGRlYWQgdHVwbGVzIGJlZm9yZSByZWxlYXNpbmcgdGhlIGJ1ZmZlciBwaW4uICBX aGVuCisgICA8bGl0ZXJhbD5CYXRjaFF1ZXVlLmRyb3BQaW48L2xpdGVyYWw+IGlzIHRydWUgYW5k IHRoZSBidWZmZXIgcGluIGlzIGJlaW5nCisgICBkcm9wcGVkIGVhZ2VybHksIHRoZSBpbmRleCBB TSBtdXN0IGNoZWNrIDxsaXRlcmFsPkJhdGNoSW5kZXhTY2FuLmxzbjwvbGl0ZXJhbD4KKyAgIHRv IHZlcmlmeSB0aGF0IHRoZSBwYWdlIExTTiBoYXMgbm90IGFkdmFuY2VkIHNpbmNlIHRoZSBiYXRj aCB3YXMgb3JpZ2luYWxseQorICAgcmVhZCBiZWZvcmUgc2V0dGluZyA8bGl0ZXJhbD5MUF9ERUFE PC9saXRlcmFsPiBiaXRzLCB0byBhdm9pZCBjb25jdXJyZW50CisgICBUSUQgcmVjeWNsaW5nIGhh emFyZHMuICBXaGVuIDxsaXRlcmFsPnNjYW4tPmJhdGNocXVldWUtPmRyb3BQaW48L2xpdGVyYWw+ CisgICBpcyBmYWxzZSAocmVxdWlyaW5nIHRoYXQgYSBidWZmZXIgcGluIGJlIGhlbGQgdGhyb3Vn aG91dCBmaXJzdCByZWFkaW5nIHRoZQorICAgaW5kZXggbGVhZiBwYWdlIGFuZCBjYWxsaW5nIDxm dW5jdGlvbj5hbWZyZWViYXRjaDwvZnVuY3Rpb24+KSwKKyAgIDxsaXRlcmFsPkxQX0RFQUQ8L2xp dGVyYWw+IGJpdHMgY2FuIGFsd2F5cyBiZSBzZXQgc2FmZWx5IHdpdGhvdXQgYW4gTFNOIGNoZWNr LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgPGZ1bmN0aW9uPmFtZnJlZWJhdGNoPC9m dW5jdGlvbj4gZnVuY3Rpb24gbmVlZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRoZQorICAgYWNjZXNz IG1ldGhvZCBwcm92aWRlcyA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LiBPdGhlcndp c2UgaXQgaGFzIHRvCisgICByZW1haW4gc2V0IHRvIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+Lgor ICA8L3BhcmE+CiAKICAgPHBhcmE+CiA8cHJvZ3JhbWxpc3Rpbmc+CkBAIC03NjIsOCArODk0LDgg QEAgYW1nZXRiaXRtYXAgKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIGl0c2VsZiwgYW5kIHRoZXJl Zm9yZSBjYWxsZXJzIHJlY2hlY2sgYm90aCB0aGUgc2NhbiBjb25kaXRpb25zIGFuZCB0aGUKICAg IHBhcnRpYWwgaW5kZXggcHJlZGljYXRlIChpZiBhbnkpIGZvciByZWNoZWNrYWJsZSB0dXBsZXMu ICBUaGF0IG1pZ2h0IG5vdAogICAgYWx3YXlzIGJlIHRydWUsIGhvd2V2ZXIuCi0gICA8ZnVuY3Rp b24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBhbmQKLSAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9m dW5jdGlvbj4gY2Fubm90IGJlIHVzZWQgaW4gdGhlIHNhbWUgaW5kZXggc2NhbjsgdGhlcmUKKyAg IE9ubHkgb25lIG9mIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+ YW1nZXR0dXBsZTwvZnVuY3Rpb24+LAorICAgb3IgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0 aW9uPiBjYW4gYmUgdXNlZCBpbiBhbnkgZ2l2ZW4gaW5kZXggc2NhbjsgdGhlcmUKICAgIGFyZSBv dGhlciByZXN0cmljdGlvbnMgdG9vIHdoZW4gdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9m dW5jdGlvbj4sIGFzIGV4cGxhaW5lZAogICAgaW4gPHhyZWYgbGlua2VuZD0iaW5kZXgtc2Nhbm5p bmciLz4uCiAgIDwvcGFyYT4KQEAgLTc4OSwzMiArOTIxLDI1IEBAIGFtZW5kc2NhbiAoSW5kZXhT Y2FuRGVzYyBzY2FuKTsKICAgPHBhcmE+CiA8cHJvZ3JhbWxpc3Rpbmc+CiB2b2lkCi1hbW1hcmtw b3MgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CithbXBvc3Jlc2V0IChJbmRleFNjYW5EZXNjIHNjYW4p OwogPC9wcm9ncmFtbGlzdGluZz4KLSAgIE1hcmsgY3VycmVudCBzY2FuIHBvc2l0aW9uLiAgVGhl IGFjY2VzcyBtZXRob2QgbmVlZCBvbmx5IHN1cHBvcnQgb25lCi0gICByZW1lbWJlcmVkIHNjYW4g cG9zaXRpb24gcGVyIHNjYW4uCisgICBOb3RpZnkgaW5kZXggQU0gdGhhdCBjb3JlIGNvZGUgd2ls bCBjaGFuZ2UgdGhlIHNjYW4ncyBwb3NpdGlvbiB0byBhbiBpdGVtCisgICByZXR1cm5lZCBhcyBw YXJ0IG9mIGFuIGVhcmxpZXIgYmF0Y2guICBUaGUgaW5kZXggQU0gbXVzdCB0aGVyZWZvcmUKKyAg IGludmFsaWRhdGUgYW55IHN0YXRlIHRoYXQgaW5kZXBlbmRlbnRseSB0cmFja3MgdGhlIHNjYW4n cyBwcm9ncmVzcworICAgKGUuZy4sIGFycmF5IGtleXMgdXNlZCB3aXRoIGEgU2NhbGFyQXJyYXlP cEV4cHIgcXVhbCkuICBDYWxsZWQgYnkgdGhlIGNvcmUKKyAgIHN5c3RlbSB3aGVuIGl0IGlzIGFi b3V0IHRvIHJlc3RvcmUgYSBtYXJrLgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBUaGUgPGZ1 bmN0aW9uPmFtbWFya3BvczwvZnVuY3Rpb24+IGZ1bmN0aW9uIG5lZWQgb25seSBiZSBwcm92aWRl ZCBpZiB0aGUgYWNjZXNzCi0gICBtZXRob2Qgc3VwcG9ydHMgb3JkZXJlZCBzY2Fucy4gIElmIGl0 IGRvZXNuJ3QsCi0gICB0aGUgPHN0cnVjdGZpZWxkPmFtbWFya3Bvczwvc3RydWN0ZmllbGQ+IGZp ZWxkIGluIGl0cyA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFtZT4KLSAgIHN0 cnVjdCBtYXkgYmUgc2V0IHRvIE5VTEwuCi0gIDwvcGFyYT4KLQotICA8cGFyYT4KLTxwcm9ncmFt bGlzdGluZz4KLXZvaWQKLWFtcmVzdHJwb3MgKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci08L3Byb2dy YW1saXN0aW5nPgotICAgUmVzdG9yZSB0aGUgc2NhbiB0byB0aGUgbW9zdCByZWNlbnRseSBtYXJr ZWQgcG9zaXRpb24uCi0gIDwvcGFyYT4KLQotICA8cGFyYT4KLSAgIFRoZSA8ZnVuY3Rpb24+YW1y ZXN0cnBvczwvZnVuY3Rpb24+IGZ1bmN0aW9uIG5lZWQgb25seSBiZSBwcm92aWRlZCBpZiB0aGUg YWNjZXNzCi0gICBtZXRob2Qgc3VwcG9ydHMgb3JkZXJlZCBzY2Fucy4gIElmIGl0IGRvZXNuJ3Qs Ci0gICB0aGUgPHN0cnVjdGZpZWxkPmFtcmVzdHJwb3M8L3N0cnVjdGZpZWxkPiBmaWVsZCBpbiBp dHMgPHN0cnVjdG5hbWU+SW5kZXhBbVJvdXRpbmU8L3N0cnVjdG5hbWU+Ci0gICBzdHJ1Y3QgbWF5 IGJlIHNldCB0byBOVUxMLgorICAgVGhlIDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5jdGlvbj4g ZnVuY3Rpb24gY2FuIG9ubHkgYmUgcHJvdmlkZWQgaWYgdGhlCisgICBhY2Nlc3MgbWV0aG9kIHN1 cHBvcnRzIG9yZGVyZWQgc2NhbnMgdGhyb3VnaCB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1 bmN0aW9uPgorICAgaW50ZXJmYWNlLiAgSWYgaXQgZG9lc24ndCwgdGhlIDxzdHJ1Y3RmaWVsZD5h bXBvc3Jlc2V0PC9zdHJ1Y3RmaWVsZD4gZmllbGQKKyAgIGluIGl0cyA8c3RydWN0bmFtZT5JbmRl eEFtUm91dGluZTwvc3RydWN0bmFtZT4gc3RydWN0IHNob3VsZCBiZSBzZXQgdG8KKyAgIE5VTEwu ICBJbmRleCBBTXMgdGhhdCBkb24ndCBoYXZlIGFueSBwcml2YXRlIHN0YXRlIHRoYXQgbWlnaHQg bmVlZCB0byBiZQorICAgaW52YWxpZGF0ZWQgbWlnaHQgc3RpbGwgZmluZCBpdCB1c2VmdWwgdG8g cHJvdmlkZSBhbiBlbXB0eQorICAgPHN0cnVjdGZpZWxkPmFtcG9zcmVzZXQ8L3N0cnVjdGZpZWxk PiBmdW5jdGlvbjsgaWYgPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPgorICAgaXMgc2V0 IHRvIE5VTEwsIHRoZSBjb3JlIHN5c3RlbSB3aWxsIGFzc3VtZSB0aGF0IGl0IGlzIHVuc2FmZSB0 byByZXN0b3JlIGEKKyAgIG1hcmtlZCBwb3NpdGlvbi4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpA QCAtOTg4LDMwICsxMTEzLDQ3IEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5cGUgY21w dHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAgPC9wYXJhPgogCiAgIDxwYXJh PgotICAgVGhlIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gZnVuY3Rpb24gaGFzIGEg PGxpdGVyYWw+ZGlyZWN0aW9uPC9saXRlcmFsPiBhcmd1bWVudCwKKyAgIFRoZSA8ZnVuY3Rpb24+ YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGFuZCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ CisgICBmdW5jdGlvbnMgaGF2ZSBhIDxsaXRlcmFsPmRpcmVjdGlvbjwvbGl0ZXJhbD4gYXJndW1l bnQsCiAgICB3aGljaCBjYW4gYmUgZWl0aGVyIDxsaXRlcmFsPkZvcndhcmRTY2FuRGlyZWN0aW9u PC9saXRlcmFsPiAodGhlIG5vcm1hbCBjYXNlKQogICAgb3IgIDxsaXRlcmFsPkJhY2t3YXJkU2Nh bkRpcmVjdGlvbjwvbGl0ZXJhbD4uICBJZiB0aGUgZmlyc3QgY2FsbCBhZnRlcgogICAgPGZ1bmN0 aW9uPmFtcmVzY2FuPC9mdW5jdGlvbj4gc3BlY2lmaWVzIDxsaXRlcmFsPkJhY2t3YXJkU2NhbkRp cmVjdGlvbjwvbGl0ZXJhbD4sIHRoZW4gdGhlCiAgICBzZXQgb2YgbWF0Y2hpbmcgaW5kZXggZW50 cmllcyBpcyB0byBiZSBzY2FubmVkIGJhY2stdG8tZnJvbnQgcmF0aGVyIHRoYW4gaW4KLSAgIHRo ZSBub3JtYWwgZnJvbnQtdG8tYmFjayBkaXJlY3Rpb24sIHNvIDxmdW5jdGlvbj5hbWdldHR1cGxl PC9mdW5jdGlvbj4gbXVzdCByZXR1cm4KLSAgIHRoZSBsYXN0IG1hdGNoaW5nIHR1cGxlIGluIHRo ZSBpbmRleCwgcmF0aGVyIHRoYW4gdGhlIGZpcnN0IG9uZSBhcyBpdAotICAgbm9ybWFsbHkgd291 bGQuICAoVGhpcyB3aWxsIG9ubHkgb2NjdXIgZm9yIGFjY2VzcwotICAgbWV0aG9kcyB0aGF0IHNl dCA8c3RydWN0ZmllbGQ+YW1jYW5vcmRlcjwvc3RydWN0ZmllbGQ+IHRvIHRydWUuKSAgQWZ0ZXIg dGhlCi0gICBmaXJzdCBjYWxsLCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IG11c3Qg YmUgcHJlcGFyZWQgdG8gYWR2YW5jZSB0aGUgc2NhbiBpbgorICAgdGhlIG5vcm1hbCBmcm9udC10 by1iYWNrIGRpcmVjdGlvbi4gIEluIHRoaXMgY2FzZSwKKyAgIDxmdW5jdGlvbj5hbWdldHR1cGxl PC9mdW5jdGlvbj4gbXVzdCByZXR1cm4gdGhlIGxhc3QgbWF0Y2hpbmcgdHVwbGUgaW4gdGhlCisg ICBpbmRleCwgcmF0aGVyIHRoYW4gdGhlIGZpcnN0IG9uZSBhcyBpdCBub3JtYWxseSB3b3VsZC4g IFNpbWlsYXJseSwKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gbXVzdCByZXR1 cm4gdGhlIGxhc3QgbWF0Y2hpbmcgYmF0Y2ggb2YgaXRlbXMKKyAgIHdoZW4gZWl0aGVyIHRoZSBm aXJzdCBjYWxsIGFmdGVyIDxmdW5jdGlvbj5hbXJlc2NhbjwvZnVuY3Rpb24+IHNwZWNpZmllcwor ICAgPGxpdGVyYWw+QmFja3dhcmRTY2FuRGlyZWN0aW9uPC9saXRlcmFsPiwgb3IgYSBzdWJzZXF1 ZW50IGNhbGwgaGFzCisgICA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiBhcyBpdHMgPHN0cnVjdGZp ZWxkPnByaW9yYmF0Y2g8L3N0cnVjdGZpZWxkPiBhcmd1bWVudAorICAgKGluZGljYXRpbmcgYSBi YWNrd2FyZCBzY2FuIHJlc3RhcnQpLiAgKFRoaXMgYmFja3dhcmQtc2NhbiBiZWhhdmlvciB3aWxs CisgICBvbmx5IG9jY3VyIGZvciBhY2Nlc3MgbWV0aG9kcyB0aGF0IHNldCA8c3RydWN0ZmllbGQ+ YW1jYW5vcmRlcjwvc3RydWN0ZmllbGQ+CisgICB0byB0cnVlLikgIEFmdGVyIHRoZSBmaXJzdCBj YWxsLCBib3RoIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gYW5kCisgICA8ZnVuY3Rp b24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IG11c3QgYmUgcHJlcGFyZWQgdG8gYWR2YW5jZSB0aGUg c2NhbiBpbgogICAgZWl0aGVyIGRpcmVjdGlvbiBmcm9tIHRoZSBtb3N0IHJlY2VudGx5IHJldHVy bmVkIGVudHJ5LiAgKEJ1dCBpZgogICAgPHN0cnVjdGZpZWxkPmFtY2FuYmFja3dhcmQ8L3N0cnVj dGZpZWxkPiBpcyBmYWxzZSwgYWxsIHN1YnNlcXVlbnQKICAgIGNhbGxzIHdpbGwgaGF2ZSB0aGUg c2FtZSBkaXJlY3Rpb24gYXMgdGhlIGZpcnN0IG9uZS4pCiAgIDwvcGFyYT4KIAogICA8cGFyYT4K LSAgIEFjY2VzcyBtZXRob2RzIHRoYXQgc3VwcG9ydCBvcmRlcmVkIHNjYW5zIG11c3Qgc3VwcG9y dCA8cXVvdGU+bWFya2luZzwvcXVvdGU+IGEKLSAgIHBvc2l0aW9uIGluIGEgc2NhbiBhbmQgbGF0 ZXIgcmV0dXJuaW5nIHRvIHRoZSBtYXJrZWQgcG9zaXRpb24uICBUaGUgc2FtZQotICAgcG9zaXRp b24gbWlnaHQgYmUgcmVzdG9yZWQgbXVsdGlwbGUgdGltZXMuICBIb3dldmVyLCBvbmx5IG9uZSBw b3NpdGlvbiBuZWVkCi0gICBiZSByZW1lbWJlcmVkIHBlciBzY2FuOyBhIG5ldyA8ZnVuY3Rpb24+ YW1tYXJrcG9zPC9mdW5jdGlvbj4gY2FsbCBvdmVycmlkZXMgdGhlCi0gICBwcmV2aW91c2x5IG1h cmtlZCBwb3NpdGlvbi4gIEFuIGFjY2VzcyBtZXRob2QgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IG9y ZGVyZWQKLSAgIHNjYW5zIG5lZWQgbm90IHByb3ZpZGUgPGZ1bmN0aW9uPmFtbWFya3BvczwvZnVu Y3Rpb24+IGFuZCA8ZnVuY3Rpb24+YW1yZXN0cnBvczwvZnVuY3Rpb24+Ci0gICBmdW5jdGlvbnMg aW4gPHN0cnVjdG5hbWU+SW5kZXhBbVJvdXRpbmU8L3N0cnVjdG5hbWU+OyBzZXQgdGhvc2UgcG9p bnRlcnMgdG8gTlVMTAotICAgaW5zdGVhZC4KKyAgIEFjY2VzcyBtZXRob2RzIHVzaW5nIHRoZSA8 ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSBtYXkKKyAgIHN1cHBvcnQg PHF1b3RlPm1hcmtpbmc8L3F1b3RlPiBhIHBvc2l0aW9uIGluIGEgc2NhbiBhbmQgbGF0ZXIgcmV0 dXJuaW5nIHRvCisgICB0aGUgbWFya2VkIHBvc2l0aW9uLCB0aG91Z2ggdGhpcyBpcyBvcHRpb25h bC4gIElmIHRoZSBzYW1lIG1hcmtlZCBwb3NpdGlvbgorICAgbWlnaHQgYmUgcmVzdG9yZWQgbXVs dGlwbGUgdGltZXMsIHRoZSBjb3JlIHN5c3RlbSBtYW5hZ2VzIG1hcmtpbmcgYW5kCisgICByZXN0 b3JhdGlvbiB0aHJvdWdoIHRoZSA8ZnVuY3Rpb24+aW5kZXhfYmF0Y2hfbWFya19wb3M8L2Z1bmN0 aW9uPiBhbmQKKyAgIDxmdW5jdGlvbj5pbmRleF9iYXRjaF9yZXN0b3JlX3BvczwvZnVuY3Rpb24+ IGludGVybmFsIGZ1bmN0aW9ucy4gIFdoZW4gYQorICAgbWFya2VkIHBvc2l0aW9uIGlzIHJlc3Rv cmVkLCB0aGUgaW5kZXggQU0gaXMgbm90aWZpZWQgdmlhIHRoZQorICAgPGZ1bmN0aW9uPmFtcG9z cmVzZXQ8L2Z1bmN0aW9uPiBjYWxsYmFjayBzbyBpdCBjYW4gaW52YWxpZGF0ZSBhbnkgcHJpdmF0 ZQorICAgc3RhdGUgdGhhdCBpbmRlcGVuZGVudGx5IHRyYWNrcyB0aGUgc2NhbidzIHByb2dyZXNz IChzdWNoIGFzIGFycmF5IGtleQorICAgc3RhdGUpLgorICA8L3BhcmE+CisKKyAgPHBhcmE+Cisg ICBUaGUgPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiBmdW5jdGlvbiBpbiA8c3RydWN0 bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFtZT4KKyAgIHNob3VsZCBiZSBzZXQgdG8gTlVM TCBmb3IgYWNjZXNzIG1ldGhvZHMgdGhhdCBkbyBub3Qgc3VwcG9ydCBtYXJrL3Jlc3RvcmUuCisg ICBGb3IgYWNjZXNzIG1ldGhvZHMgdGhhdCBkbyBzdXBwb3J0IHRoaXMgZmVhdHVyZSwgPGZ1bmN0 aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPgorICAgbXVzdCBiZSBwcm92aWRlZCAodGhvdWdoIGl0 IGNhbiBiZSBhIG5vLW9wIGZ1bmN0aW9uIGlmIHRoZSBBTSBoYXMgbm8gcHJpdmF0ZQorICAgc3Rh dGUgdG8gaW52YWxpZGF0ZSkuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KQEAgLTExODAsNiArMTMy Miw5NCBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZh bWlseSwgT2lkIG9wY2ludHlwZSk7CiAgICByZWR1Y2UgdGhlIGZyZXF1ZW5jeSBvZiBzdWNoIHRy YW5zYWN0aW9uIGNhbmNlbGxhdGlvbnMuCiAgIDwvcGFyYT4KIAorICA8c2VjdDIgaWQ9ImluZGV4 LWxvY2tpbmctYmF0Y2hlcyI+CisgICA8dGl0bGU+QmF0Y2ggU2Nhbm5pbmcgYW5kIEJ1ZmZlciBQ aW4gTWFuYWdlbWVudDwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAgIEluZGV4IGFjY2VzcyBtZXRo b2RzIHRoYXQgaW1wbGVtZW50IHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+Cisg ICAgaW50ZXJmYWNlIG11c3QgY29vcGVyYXRlIHdpdGggdGhlIGNvcmUgc3lzdGVtIHRvIG1hbmFn ZSBidWZmZXIgcGlucyBpbiBhCisgICAgd2F5IHRoYXQgcHJldmVudHMgY29uY3VycmVudCA8Y29t bWFuZD5WQUNVVU08L2NvbW1hbmQ+IGZyb20gY3JlYXRpbmcKKyAgICBUSUQgcmVjeWNsaW5nIGhh emFyZHMuICBVbmxpa2UgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBzY2FucywKKyAg ICB3aGljaCBrZWVwIHRoZSBpbmRleCBhY2Nlc3MgbWV0aG9kIGluIGNvbnRyb2wgb2Ygc2NhbiBw cm9ncmVzc2lvbiwKKyAgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHNjYW5zIGdp dmUgY29udHJvbCB0byB0aGUgdGFibGUgYWNjZXNzCisgICAgbWV0aG9kLCB3aGljaCBtYXkgZmV0 Y2ggdGFibGUgdHVwbGVzIGluIGEgZGlmZmVyZW50IG9yZGVyIHRoYW4gdGhlIGluZGV4CisgICAg ZW50cmllcyB3ZXJlIHJldHVybmVkLiAgVGhpcyBjcmVhdGVzIHRoZSBuZWVkIGZvciBleHBsaWNp dCBidWZmZXIgcGluCisgICAgbWFuYWdlbWVudCB0byBlbnN1cmUgdGhlIHRhYmxlIGFjY2VzcyBt ZXRob2QgZG9lcyBub3QgY29uZnVzZSBhIHJlY3ljbGVkCisgICAgVElEIHdpdGggdGhlIG9yaWdp bmFsIHJvdyBpdCBtZWFudCB0byByZWZlcmVuY2UuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgor ICAgIFdoZW4gPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiByZXR1cm5zIGEgYmF0Y2gs IHRoZSBiYXRjaCdzCisgICAgYXNzb2NpYXRlZCBpbmRleCBwYWdlIG1heSBiZSByZXRhaW5lZCBp biBhIGJ1ZmZlciB3aXRoIGEgcGluIGhlbGQgb24gaXQuCisgICAgVGhpcyBwaW4gc2VydmVzIGFz IGFuIGludGVybG9jazogPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPiBjYW5ub3QgcmVjeWNsZQor ICAgIFRJRHMgb24gYSBwaW5uZWQgcGFnZS4gIFRoZSBidWZmZXIgcGluIHByb3RlY3RzIG9ubHkg dGhlIHRhYmxlIGFjY2VzcworICAgIG1ldGhvZCdzIGFiaWxpdHkgdG8gbWFwIFRJRHMgdG8gcm93 cyBjb3JyZWN0bHk7IGl0IGRvZXMgbm90IHByb3RlY3QgdGhlCisgICAgaW5kZXggc3RydWN0dXJl IGl0c2VsZi4gIEluZGV4IGFjY2VzcyBtZXRob2RzIG1heSB1c2UgcGlucyBmb3Igb3RoZXIKKyAg ICBwdXJwb3NlcyAoZm9yIGV4YW1wbGUsIG1haW50YWluaW5nIGEgZGVzY2VudCBzdGFjayBvZiBw aW5uZWQgcGFnZXMpLCBidXQKKyAgICB0aG9zZSB1c2VzIGFyZSBpbnRlcm5hbCB0byB0aGUgYWNj ZXNzIG1ldGhvZCBhbmQgaW5kZXBlbmRlbnQgb2YgdGhlCisgICAgdGFibGUtQU0gc3luY2hyb25p emF0aW9uIGRlc2NyaWJlZCBoZXJlLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBXaGV0 aGVyIGEgcGluIHNob3VsZCBiZSBoZWxkIHdoZW4gcmV0dXJuaW5nIGEgYmF0Y2ggaXMgY29udHJv bGxlZCBieSB0aGUKKyAgICA8c3RydWN0ZmllbGQ+ZHJvcFBpbjwvc3RydWN0ZmllbGQ+IGZsYWcg aW4gdGhlIDx0eXBlPkJhdGNoUXVldWU8L3R5cGU+CisgICAgc3RydWN0dXJlLiBXaGVuIDxsaXRl cmFsPmRyb3BQaW48L2xpdGVyYWw+IGlzIHRydWUsIHRoZSBpbmRleCBhY2Nlc3MgbWV0aG9kCisg ICAgZHJvcHMgdGhlIHBpbiBiZWZvcmUgcmV0dXJuaW5nIHRoZSBiYXRjaCwgd2hpY2ggYXZvaWRz IGJsb2NraW5nCisgICAgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPi4gV2hlbiA8bGl0ZXJhbD5k cm9wUGluPC9saXRlcmFsPiBpcyBmYWxzZSwgdGhlCisgICAgaW5kZXggYWNjZXNzIG1ldGhvZCBt dXN0IGhvbGQgdGhlIHBpbiB1bnRpbCB0aGUgYmF0Y2ggaXMgZnJlZWQgdmlhCisgICAgPGZ1bmN0 aW9uPmFtZnJlZWJhdGNoPC9mdW5jdGlvbj4uICBUaGUgY29yZSBzeXN0ZW0gc2V0cyB0aGUKKyAg ICA8bGl0ZXJhbD5kcm9wUGluPC9saXRlcmFsPiBmbGFnIGJhc2VkIG9uIHNjYW4gdHlwZTogaXQg aXMgdHJ1ZSBmb3IKKyAgICBNVkNDLWNvbXBsaWFudCBzbmFwc2hvdHMgb24gbG9nZ2VkIHJlbGF0 aW9ucyAodW5sZXNzIGluZGV4LW9ubHkgc2NhbnMgYXJlCisgICAgaW4gdXNlKSwgYW5kIGZhbHNl IG90aGVyd2lzZS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgV2hlbiA8bGl0ZXJhbD5k cm9wUGluPC9saXRlcmFsPiBpcyB0cnVlIGFuZCB0aGUgaW5kZXggYWNjZXNzIG1ldGhvZCBpcwor ICAgIGVhZ2VyIGFib3V0IGRyb3BwaW5nIHBpbnMsIGl0IG11c3Qgc2F2ZSB0aGUgcGFnZSdzIExT TiBpbiB0aGUgYmF0Y2ggYmVmb3JlCisgICAgcmV0dXJuaW5nLiBMYXRlciwgd2hlbiA8ZnVuY3Rp b24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPiBpcyBjYWxsZWQgYW5kIHRoZQorICAgIGFjY2VzcyBt ZXRob2Qgd2lzaGVzIHRvIHNldCA8bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFsPiBiaXRzIHRvIG1h cmsgZGVhZAorICAgIHR1cGxlcywgaXQgbXVzdCB2ZXJpZnkgdGhhdCB0aGUgcGFnZSdzIExTTiBo YXMgbm90IGNoYW5nZWQgc2luY2UgdGhlIGJhdGNoCisgICAgd2FzIHJlYWQuIElmIHRoZSBMU04g aGFzIGNoYW5nZWQsIHRoZSBwYWdlIG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgYnkKKyAgICBjb25j dXJyZW50IGFjdGl2aXR5IGFuZCBpdCBpcyB1bnNhZmUgdG8gc2V0IDxsaXRlcmFsPkxQX0RFQUQ8 L2xpdGVyYWw+IGJpdHMuCisgICAgVGhpcyBMU04tYmFzZWQgdmFsaWRhdGlvbiBzY2hlbWUgcHJv dGVjdHMgYWdhaW5zdCBUSUQgcmVjeWNsaW5nIHJhY2VzIHdoZW4KKyAgICBwaW5zIGhhdmUgYmVl biBkcm9wcGVkLiAgV2hlbiA8bGl0ZXJhbD5kcm9wUGluPC9saXRlcmFsPiBpcyBmYWxzZSwgdGhl IHBpbgorICAgIHByZXZlbnRzIHVuc2FmZSBjb25jdXJyZW50IHJlbW92YWwgb2YgdGFibGUgVElE IHJlZmVyZW5jZXMgYnkKKyAgICA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+LCBzbyBubyBMU04g Y2hlY2sgaXMgbmVjZXNzYXJ5LgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBUaGUgY29y ZSBzeXN0ZW0gcHJvdmlkZXMgdGhyZWUgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGJh dGNoCisgICAgcmVzb3VyY2VzOgorICAgIDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfYmF0Y2hfYWxs b2M8L2Z1bmN0aW9uPiBhbGxvY2F0ZXMgYSBuZXcgYmF0Y2ggb3IKKyAgICByZXVzZXMgYSBjYWNo ZWQgb25lLAorICAgIDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrPC9mdW5jdGlv bj4gZHJvcHMgdGhlIGxvY2sgYW5kCisgICAgY29uZGl0aW9uYWxseSBkcm9wcyB0aGUgcGluIG9u IGEgYmF0Y2gncyBpbmRleCBwYWdlIChiYXNlZCBvbiB0aGUKKyAgICA8bGl0ZXJhbD5kcm9wUGlu PC9saXRlcmFsPiBzZXR0aW5nKSwgYW5kCisgICAgPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF9iYXRj aF9yZWxlYXNlPC9mdW5jdGlvbj4gZnJlZXMgb3IgY2FjaGVzIGEgYmF0Y2guCisgICAgSW5kZXgg YWNjZXNzIG1ldGhvZHMgc2hvdWxkIHVzZSB0aGVzZSB1dGlsaXRpZXMgcmF0aGVyIHRoYW4gbWFu YWdpbmcKKyAgICBidWZmZXJzIGRpcmVjdGx5LiAgVGhlIDxmaWxlbmFtZT5zcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlLzwvZmlsZW5hbWU+CisgICAgaW1wbGVtZW50YXRpb24gcHJvdmlkZXMgYSBy ZWZlcmVuY2UgZXhhbXBsZSBvZiBjb3JyZWN0IHVzYWdlLgorICAgPC9wYXJhPgorCisgICA8cGFy YT4KKyAgICBOb3RlIHRoYXQgPGZ1bmN0aW9uPmFtZnJlZWJhdGNoPC9mdW5jdGlvbj4gaXMgY2Fs bGVkIG9ubHkgYnkgdGhlIGNvcmUgY29kZQorICAgIGFuZCB0YWJsZSBhY2Nlc3MgbWV0aG9kLCBu ZXZlciBieSB0aGUgaW5kZXggYWNjZXNzIG1ldGhvZCBpdHNlbGYuIFRoZQorICAgIGluZGV4IEFN IG11c3Qgbm90IGFzc3VtZSB0aGF0IGEgY2FsbCB0byA8ZnVuY3Rpb24+YW1mcmVlYmF0Y2g8L2Z1 bmN0aW9uPgorICAgIHdpbGwgdGFrZSBwbGFjZSBiZWZvcmUgYW5vdGhlciBjYWxsIHRvIDxmdW5j dGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4KKyAgICAoZm9yIHRoZSBzYW1lIGluZGV4IHNjYW4p IHRha2VzIHBsYWNlLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBUaGUgaW5kZXggQU0g bXVzdCBhbHNvIGF2b2lkIHJlbHlpbmcgb24gdGhlIGNvcmUgY29kZSBjYWxsaW5nCisgICAgPGZ1 bmN0aW9uPmFtZnJlZWJhdGNoPC9mdW5jdGlvbj4gd2l0aCBiYXRjaGVzIHRoYXQgYXJlIGluIGFu eSBwYXJ0aWN1bGFyCisgICAgb3JkZXIuICBGb3IgZXhhbXBsZSwgaXQgaXMgbm90IG9rYXkgZm9y IGFuIGluZGV4IEFNIHRvIGFzc3VtZSB0aGF0IGNhbGxzCisgICAgdG8gPGZ1bmN0aW9uPmFtZnJl ZWJhdGNoPC9mdW5jdGlvbj4gd2lsbCB0YWtlIHBsYWNlIGluIHRoZSBzYW1lIG9yZGVyIGFzCisg ICAgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gY2FsbHMgdGhhdCBpbml0aWFs bHkKKyAgICBhbGxvY2F0ZWQvcG9wdWxhdGVkL3JldHVybmVkIGVhY2ggYmF0Y2guCisgICA8L3Bh cmE+CisKKyAgPC9zZWN0Mj4KKwogIDwvc2VjdDE+CiAKICA8c2VjdDEgaWQ9ImluZGV4LXVuaXF1 ZS1jaGVja3MiPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dt bCBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwKaW5kZXggNzdjNWE3NjNkLi41 NWI3MjIyZTkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwK KysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbApAQCAtMTE1MiwxMiArMTE1 MiwxMyBAQCBXSVRIICggTU9EVUxVUyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVt ZXJpY19saXRlcmFsPC9yZXBsYWNlYWJsZT4sIFJFTQogICAgICA8L3BhcmE+CiAKICAgICAgPHBh cmE+Ci0gICAgICBUaGUgYWNjZXNzIG1ldGhvZCBtdXN0IHN1cHBvcnQgPGxpdGVyYWw+YW1nZXR0 dXBsZTwvbGl0ZXJhbD4gKHNlZSA8eHJlZgotICAgICAgbGlua2VuZD0iaW5kZXhhbSIvPik7IGF0 IHByZXNlbnQgdGhpcyBtZWFucyA8YWNyb255bT5HSU48L2Fjcm9ueW0+Ci0gICAgICBjYW5ub3Qg YmUgdXNlZC4gIEFsdGhvdWdoIGl0J3MgYWxsb3dlZCwgdGhlcmUgaXMgbGl0dGxlIHBvaW50IGlu IHVzaW5nCi0gICAgICBCLXRyZWUgb3IgaGFzaCBpbmRleGVzIHdpdGggYW4gZXhjbHVzaW9uIGNv bnN0cmFpbnQsIGJlY2F1c2UgdGhpcwotICAgICAgZG9lcyBub3RoaW5nIHRoYXQgYW4gb3JkaW5h cnkgdW5pcXVlIGNvbnN0cmFpbnQgZG9lc24ndCBkbyBiZXR0ZXIuCi0gICAgICBTbyBpbiBwcmFj dGljZSB0aGUgYWNjZXNzIG1ldGhvZCB3aWxsIGFsd2F5cyBiZSA8YWNyb255bT5HaVNUPC9hY3Jv bnltPiBvcgorICAgICAgVGhlIGFjY2VzcyBtZXRob2QgbXVzdCBzdXBwb3J0IGVpdGhlciA8bGl0 ZXJhbD5hbWdldHR1cGxlPC9saXRlcmFsPgorICAgICAgb3IgPGxpdGVyYWw+YW1nZXRiYXRjaDwv bGl0ZXJhbD4gKHNlZSA8eHJlZiBsaW5rZW5kPSJpbmRleGFtIi8+KTsgYXQKKyAgICAgIHByZXNl bnQgdGhpcyBtZWFucyA8YWNyb255bT5HSU48L2Fjcm9ueW0+IGNhbm5vdCBiZSB1c2VkLiAgQWx0 aG91Z2gKKyAgICAgIGl0J3MgYWxsb3dlZCwgdGhlcmUgaXMgbGl0dGxlIHBvaW50IGluIHVzaW5n IEItdHJlZSBvciBoYXNoIGluZGV4ZXMKKyAgICAgIHdpdGggYW4gZXhjbHVzaW9uIGNvbnN0cmFp bnQsIGJlY2F1c2UgdGhpcyBkb2VzIG5vdGhpbmcgdGhhdCBhbgorICAgICAgb3JkaW5hcnkgdW5p cXVlIGNvbnN0cmFpbnQgZG9lc24ndCBkbyBiZXR0ZXIuICBTbyBpbiBwcmFjdGljZSB0aGUKKyAg ICAgIGFjY2VzcyBtZXRob2Qgd2lsbCBhbHdheXMgYmUgPGFjcm9ueW0+R2lTVDwvYWNyb255bT4g b3IKICAgICAgIDxhY3JvbnltPlNQLUdpU1Q8L2Fjcm9ueW0+LgogICAgICA8L3BhcmE+CiAKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0u YyBiL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYwppbmRl eCBhMzQzODJhNWYuLjU1MjY3NzFiNSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9kdW1t eV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlf aW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYwpAQCAtMzE3LDEwICszMTcsMTAgQEAgZGloYW5kbGVy KFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5hbWJlZ2luc2NhbiA9IGRpYmVnaW5zY2Fu OwogCWFtcm91dGluZS0+YW1yZXNjYW4gPSBkaXJlc2NhbjsKIAlhbXJvdXRpbmUtPmFtZ2V0dHVw bGUgPSBOVUxMOworCWFtcm91dGluZS0+YW1nZXRiYXRjaCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5h bWdldGJpdG1hcCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWVuZHNjYW4gPSBkaWVuZHNjYW47Ci0J YW1yb3V0aW5lLT5hbW1hcmtwb3MgPSBOVUxMOwotCWFtcm91dGluZS0+YW1yZXN0cnBvcyA9IE5V TEw7CisJYW1yb3V0aW5lLT5hbXBvc3Jlc2V0ID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtZXN0aW1h dGVwYXJhbGxlbHNjYW4gPSBOVUxMOwogCWFtcm91dGluZS0+YW1pbml0cGFyYWxsZWxzY2FuID0g TlVMTDsKIAlhbXJvdXRpbmUtPmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMOwpkaWZmIC0tZ2l0IGEv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdAppbmRleCA5ZGQ2NWIxMDIuLjY4MTJkMmZkNyAxMDA2NDQKLS0tIGEvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKQEAgLTIyMCw4ICsyMjAsNiBAQCBCVFNjYW5JbnNlcnREYXRhCiBCVFNjYW5LZXlQ cmVwcm9jCiBCVFNjYW5PcGFxdWUKIEJUU2Nhbk9wYXF1ZURhdGEKLUJUU2NhblBvc0RhdGEKLUJU U2NhblBvc0l0ZW0KIEJUU2hhcmVkCiBCVFNvcnRBcnJheUNvbnRleHQKIEJUU3Bvb2wKQEAgLTM0 NTAsMTIgKzM0NDgsMTAgQEAgYW1nZXR0dXBsZV9mdW5jdGlvbgogYW1pbml0cGFyYWxsZWxzY2Fu X2Z1bmN0aW9uCiBhbWluc2VydF9mdW5jdGlvbgogYW1pbnNlcnRjbGVhbnVwX2Z1bmN0aW9uCi1h bW1hcmtwb3NfZnVuY3Rpb24KIGFtb3B0aW9uc19mdW5jdGlvbgogYW1wYXJhbGxlbHJlc2Nhbl9m dW5jdGlvbgogYW1wcm9wZXJ0eV9mdW5jdGlvbgogYW1yZXNjYW5fZnVuY3Rpb24KLWFtcmVzdHJw b3NfZnVuY3Rpb24KIGFtdHJhbnNsYXRlX2NtcHR5cGVfZnVuY3Rpb24KIGFtdHJhbnNsYXRlX3N0 cmF0ZWd5X2Z1bmN0aW9uCiBhbXZhY3V1bWNsZWFudXBfZnVuY3Rpb24KLS0gCjIuNTEuMAoK --000000000000acefda0645a3cfd4 Content-Type: application/octet-stream; name="v4-0002-Add-prefetching-to-index-scans-using-batch-interf.patch" Content-Disposition: attachment; filename="v4-0002-Add-prefetching-to-index-scans-using-batch-interf.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mj0taosr3 RnJvbSAzOTVhYTNjYzUwZDc0ZmIzNmQ2ZGRmYjdmYjc1YjhkMjVmZDExNTQ2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFNh dCwgMTUgTm92IDIwMjUgMTQ6MDM6NTggLTA1MDAKU3ViamVjdDogW1BBVENIIHY0IDIvNF0gQWRk IHByZWZldGNoaW5nIHRvIGluZGV4IHNjYW5zIHVzaW5nIGJhdGNoIGludGVyZmFjZXMuCgpUaGlz IGNvbW1pdCBpbXBsZW1lbnRzIEkvTyBwcmVmZXRjaGluZyBmb3IgaW5kZXggc2NhbnMsIG1hZGUg cG9zc2libGUgYnkKdGhlIHJlY2VudCBhZGRpdGlvbiBvZiBiYXRjaGluZyBpbnRlcmZhY2VzIHRv IGJvdGggdGhlIHRhYmxlIEFNIGFuZAppbmRleCBBTSBBUElzLgoKVGhlIGFtZ2V0YmF0Y2ggaW5k ZXggQU0gaW50ZXJmYWNlIHByb3ZpZGVzIGJhdGNoZXMgb2YgVElEcyAocmF0aGVyIHRoYW4Kb25l IGF0IGEgdGltZSkgZnJvbSBhIHNpbmdsZSBpbmRleCBsZWFmIHBhZ2UsIGFuZCBhbGxvd3MgbXVs dGlwbGUKYmF0Y2hlcyB0byBiZSBoZWxkIGluIG1lbW9yeS9waW5uZWQgc2ltdWx0YW5lb3VzbHku ICBUaGlzIGdpdmVzIHRoZQp0YWJsZSBBTSB0aGUgZnJlZWRvbSB0byByZWFkYWhlYWQgd2l0aGlu IGFuIGluZGV4IHNjYW4sIHdoaWNoIGlzIGNydWNpYWwKZm9yIEkvTyBwcmVmZXRjaGluZyB3aXRo IGNlcnRhaW4gd29ya2xvYWRzICh3b3JrbG9hZHMgdGhhdCB3b3VsZApvdGhlcndpc2UgYmUgdW5h YmxlIHRvIGtlZXAgYSBzdWZmaWNpZW50bHkgaGlnaCBwcmVmZXRjaCBkaXN0YW5jZSBmb3IKaGVh cCBibG9jayBJL08pLiAgUHJlZmV0Y2hpbmcgaXMgaW1wbGVtZW50ZWQgdXNpbmcgYSByZWFkIHN0 cmVhbSB1bmRlcgp0aGUgY29udHJvbCBvZiB0aGUgdGFibGUgQU0uCgpYWFggV2hlbiB0aGUgYmF0 Y2ggcXVldWUgcmVhY2hlcyBjYXBhY2l0eSwgdGhlIHN0cmVhbSBwYXVzZXMgdW50aWwKdGhlIHNj YW4gY2F0Y2hlcyB1cCBhbmQgZnJlZXMgc29tZSBiYXRjaGVzLiAgV2UgbmVlZCBhIG1vcmUgcHJp bmNpcGxlZAphcHByb2FjaCBoZXJlLiAgRXNzZW50aWFsbHksIHdlIG5lZWQgaW5mcmFzdHJ1Y3R1 cmUgdGhhdCBhbGxvd3MgYSByZWFkCnN0cmVhbSBjYWxsIGJhY2sgdG8gdGVsbCB0aGUgcmVhZCBz dHJlYW0gdG8gImJhY2sgb2ZmIiB3aXRob3V0IGl0IGZ1bGx5CmVuZGluZy9yZXNldHRpbmcgdGhl IHJlYWQgc3RyZWFtLgoKTm90ZTogRm9yIG5vdyBwcmVmZXRjaGluZyBpcyB0ZW1wb3JhcmlseSBk aXNhYmxlZCBkdXJpbmcgaW5kZXgtb25seQpzY2FucywgcGVuZGluZyB0aGUgcmVpbnRyb2R1Y3Rp b24gb2YgdmlzaWJpbGl0eSBtYXAgY2FjaGluZyBpbiBiYXRjaGVzLgpQcmV2aW91cyB2ZXJzaW9u cyBvZiB0aGUgcGF0Y2ggc2VyaWVzIGhhZCB0aGF0LCBidXQgaXQgd2FzIHJlbW92ZWQgd2hlbgp3 ZSBtb3ZlZCBvdmVyIHRvIHRoZSBuZXcgdGFibGUgQU0gaW50ZXJmYWNlLgoKQXV0aG9yOiBUb21h cyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4KQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJv d3QuaWU+ClJldmlld2VkLUJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+ClJl dmlld2VkLUJ5OiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+CkRpc2N1c3Np b246IGh0dHBzOi8vcG9zdGdyLmVzL20vY2Y4NWY0NmYtYjAyZi0wNWIyLTUyNDgtNTAwMGI4OTRl YmFiQGVudGVycHJpc2VkYi5jb20KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAg ICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCAgICAg ICAgICAgICAgICAgIHwgIDMyICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oICAgICAg ICAgICAgICAgICAgfCAgMTUgKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCAgICAgICAg ICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVy LmMgICAgICB8IDMyNSArKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9pbmRleGFtLmMgICAgICAgICAgICB8ICAxMCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4 L2luZGV4YmF0Y2guYyAgICAgICAgIHwgIDQ2ICsrLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvY29zdHNpemUuYyAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3Jl YWRfc3RyZWFtLmMgICAgICAgICB8ICAxNCArLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNf cGFyYW1ldGVycy5kYXQgICAgIHwgICA3ICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdy ZXNxbC5jb25mLnNhbXBsZSB8ICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3Zp ZXdzLm91dCAgICAgICAgfCAgIDMgKy0KIDEyIGZpbGVzIGNoYW5nZWQsIDQzNSBpbnNlcnRpb25z KCspLCAyMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVh cGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggZThkMzQ3ZTQ3Li4yY2M4 MTczNjAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMv aW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTExNyw2ICsxMTcsNyBAQCB0eXBlZGVmIHN0cnVj dCBJbmRleEZldGNoSGVhcERhdGEKIAlJbmRleEZldGNoVGFibGVEYXRhIHhzX2Jhc2U7CS8qIEFN IGluZGVwZW5kZW50IHBhcnQgb2YgdGhlIGRlc2NyaXB0b3IgKi8KIAogCUJ1ZmZlcgkJeHNfY2J1 ZjsJCS8qIGN1cnJlbnQgaGVhcCBidWZmZXIgaW4gc2NhbiwgaWYgYW55ICovCisJQmxvY2tOdW1i ZXIgeHNfYmxrOwkJCS8qIHhzX2NidWYncyBibG9jayBudW1iZXIsIGlmIGFueSAqLwogCS8qIE5C OiBpZiB4c19jYnVmIGlzIG5vdCBJbnZhbGlkQnVmZmVyLCB3ZSBob2xkIGEgcGluIG9uIHRoYXQg YnVmZmVyICovCiAKIAlCdWZmZXIJCXZtYnVmOwkJCS8qIHZpc2liaWxpdHkgbWFwIGJ1ZmZlciAq LwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9yZWxzY2FuLmgKaW5kZXggM2E0MTZlNzZiLi5kZmVmMmZmZmIgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3Jl bHNjYW4uaApAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgIm5vZGVzL3RpZGJpdG1hcC5oIgog I2luY2x1ZGUgInBvcnQvYXRvbWljcy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmLmgiCisjaW5j bHVkZSAic3RvcmFnZS9yZWFkX3N0cmVhbS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcmVsZmlsZWxv Y2F0b3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NwaW4uaCIKICNpbmNsdWRlICJ1dGlscy9yZWxj YWNoZS5oIgpAQCAtMTI0LDYgKzEyNSw3IEBAIHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsQmxvY2tU YWJsZVNjYW5Xb3JrZXJEYXRhICpQYXJhbGxlbEJsb2NrVGFibGVTY2FuV29ya2VyOwogdHlwZWRl ZiBzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YQogewogCVJlbGF0aW9uCXJlbDsKKwlSZWFkU3Ry ZWFtICpyczsKIAogCWludAkJCW5oZWFwYWNjZXNzZXM7CS8qIG51bWJlciBvZiBoZWFwIGFjY2Vz c2VzLCBmb3IKIAkJCQkJCQkJICogaW5zdHJ1bWVudGF0aW9uL21ldHJpY3MgKi8KQEAgLTIyNCw4 ICsyMjYsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgQmF0Y2hJbmRleFNjYW5EYXRhICpCYXRjaEluZGV4 U2NhbjsKICAqIE1heGltdW0gbnVtYmVyIG9mIGJhdGNoZXMgKGxlYWYgcGFnZXMpIHdlIGNhbiBr ZWVwIGluIG1lbW9yeS4gIFdlIG5lZWQgYQogICogbWluaW11bSBvZiB0d28sIHNpbmNlIHdlJ2xs IG9ubHkgY29uc2lkZXIgcmVsZWFzaW5nIG9uZSBiYXRjaCB3aGVuIGFub3RoZXIKICAqIGlzIHJl YWQuCisgKgorICogVGhlIGNob2ljZSBvZiA2NCBiYXRjaGVzIGlzIGFyYml0cmFyeS4gIEl0J3Mg YWJvdXQgMU1CIG9mIGRhdGEgd2l0aCA4S0IKKyAqIHBhZ2VzICg1MTJrQiBmb3IgcGFnZXMsIGFu ZCB0aGVuIGEgYml0IG9mIG92ZXJoZWFkKS4gV2Ugc2hvdWxkIG5vdCByZWFsbHkKKyAqIG5lZWQg dGhpcyBtYW55IGJhdGNoZXMgaW4gbW9zdCBjYXNlcywgdGhvdWdoLiBUaGUgcmVhZCBzdHJlYW0g bG9va3MgYWhlYWQKKyAqIGp1c3QgZW5vdWdoIHRvIHF1ZXVlIGVub3VnaCBJT3MsIGFkanVzdGlu ZyB0aGUgZGlzdGFuY2UgKFRJRHMsIGJ1dAorICogdWx0aW1hdGVseSB0aGUgbnVtYmVyIG9mIGZ1 dHVyZSBiYXRjaGVzKSB0byBtZWV0IHRoYXQuCiAgKi8KLSNkZWZpbmUgSU5ERVhfU0NBTl9NQVhf QkFUQ0hFUwkJMgorI2RlZmluZSBJTkRFWF9TQ0FOX01BWF9CQVRDSEVTCQk2NAogI2RlZmluZSBJ TkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVMJMgogI2RlZmluZSBJTkRFWF9TQ0FOX0JBVENIX0NPVU5U KHNjYW4pIFwKIAkoKHNjYW4pLT5iYXRjaHF1ZXVlLT5uZXh0QmF0Y2ggLSAoc2NhbiktPmJhdGNo cXVldWUtPmhlYWRCYXRjaCkKQEAgLTI4Myw2ICsyOTEsMjcgQEAgdHlwZWRlZiBzdHJ1Y3QgQmF0 Y2hRdWV1ZQogCSAqIGl0J3Mgb3Zlci4KIAkgKi8KIAlib29sCQlmaW5pc2hlZDsKKwlib29sCQly ZXNldDsKKworCS8qCisJICogRGlkIHdlIGRpc2FibGUgcHJlZmV0Y2hpbmcvdXNlIG9mIGEgcmVh ZCBzdHJlYW0gYmVjYXVzZSBpdCBkaWRuJ3QgcGF5CisJICogZm9yIGl0c2VsZj8KKwkgKi8KKwli b29sCQlwcmVmZXRjaGluZ0xvY2tlZEluOworCWJvb2wJCWRpc2FibGVkOworCisJLyoKKwkgKiBE dXJpbmcgcHJlZmV0Y2hpbmcsIGN1cnJlbnRQcmVmZXRjaEJsb2NrIGlzIHRoZSB0YWJsZSBBTSBi bG9jayBudW1iZXIKKwkgKiB0aGF0IHdhcyByZXR1cm5lZCBieSBvdXIgcmVhZCBzdHJlYW0gY2Fs bGJhY2sgbW9zdCByZWNlbnRseS4gIFVzZWQgdG8KKwkgKiBzdXBwcmVzcyBkdXBsaWNhdGUgc3Vj Y2Vzc2l2ZSByZWFkIHN0cmVhbSBibG9jayByZXF1ZXN0cy4KKwkgKgorCSAqIFByZWZldGNoaW5n IGNhbiBzdGlsbCBwZXJmb3JtIG5vbi1zdWNjZXNzaXZlIHJlcXVlc3RzIGZvciB0aGUgc2FtZQor CSAqIGJsb2NrIG51bWJlciAoaW4gZ2VuZXJhbCB3ZSdyZSBwcmVmZXRjaGluZyBpbiBleGFjdGx5 IHRoZSBzYW1lIG9yZGVyCisJICogdGhhdCB0aGUgc2NhbiB3aWxsIHJldHVybiB0YWJsZSBBTSBU SURzIGluKS4gIFdlIG5lZWQgdG8gYXZvaWQKKwkgKiBkdXBsaWNhdGUgc3VjY2Vzc2l2ZSByZXF1 ZXN0cyBiZWNhdXNlIHRhYmxlIEFNcyBleHBlY3QgdG8gYmUgYWJsZSB0bworCSAqIGhhbmcgb24g dG8gYnVmZmVyIHBpbnMgYWNyb3NzIHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlIGNhbGxzLgorCSAq LworCUJsb2NrTnVtYmVyIGN1cnJlbnRQcmVmZXRjaEJsb2NrOwogCiAJLyogQ3VycmVudCBzY2Fu IGRpcmVjdGlvbiwgZm9yIHRoZSBjdXJyZW50bHkgbG9hZGVkIGJhdGNoZXMgKi8KIAlTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbjsKQEAgLTI5MCw2ICszMTksNyBAQCB0eXBlZGVmIHN0cnVjdCBCYXRj aFF1ZXVlCiAJLyogY3VycmVudCBwb3NpdGlvbnMgaW4gYmF0Y2hlc1tdIGZvciBzY2FuICovCiAJ QmF0Y2hRdWV1ZUl0ZW1Qb3MgcmVhZFBvczsJLyogcmVhZCBwb3NpdGlvbiAqLwogCUJhdGNoUXVl dWVJdGVtUG9zIG1hcmtQb3M7CS8qIG1hcmsvcmVzdG9yZSBwb3NpdGlvbiAqLworCUJhdGNoUXVl dWVJdGVtUG9zIHN0cmVhbVBvczsJLyogc3RyZWFtIHBvc2l0aW9uIChmb3IgcHJlZmV0Y2hpbmcp ICovCiAKIAlCYXRjaEluZGV4U2NhbiBtYXJrQmF0Y2g7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2FjY2Vzcy90YWJsZWFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCmluZGV4 IDNlOThkODUzNy4uYzNlNTgwMTJmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFi bGVhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTQ1NCw2ICs0NTQs MjEgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAkJCQkJCQkJCSAgIFNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uLAogCQkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwogCisJ LyoKKwkgKiBSZWFkIHN0cmVhbSBjYWxsYmFjaywgdXNlZCB0byBwZXJmb3JtIEkvTyBwcmVmZXRj aGluZyBvZiB0YWJsZSBBTSBwYWdlcworCSAqIGR1cmluZyBgaW5kZXhfZ2V0bmV4dF9zbG90YCBp bmRleCBzY2Fucy4KKwkgKgorCSAqIFRoaXMgY2FsbGJhY2sgaXMgZGlyZWN0bHkgcGFzc2VkIHRv IHJlYWRfc3RyZWFtX2JlZ2luX3JlbGF0aW9uLCBmcm9tCisJICogYmF0Y2hfZ2V0bmV4dCByb3V0 aW5lLiAgSXQgd2lsbCBvbmx5IGJlIHVzZWQgZHVyaW5nIHNjYW5zIHdob3NlIGluZGV4CisJICog QU0gdXNlcyB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2UuICAoU2NhbnMgd2l0aCBhbWdldHR1cGxl LWJhc2VkIGluZGV4CisJICogQU1zIGNhbm5vdCByZWFzb25hYmx5IGJlIHVzZWQgZm9yIEkvTyBw cmVmZXRjaGluZywgc2luY2UgaXRzIG9wYXF1ZQorCSAqIHR1cGxlLWF0LWEtdGltZSBpbnRlcmZh Y2UgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBzY2hlZHVsZSBpbmRleCBzY2FuCisJICogd29yayBz ZW5zaWJseS4pCisJICovCisJQmxvY2tOdW1iZXIgKCppbmRleF9nZXRuZXh0X3N0cmVhbSkgKFJl YWRTdHJlYW0gKnN0cmVhbSwKKwkJCQkJCQkJCQkgdm9pZCAqY2FsbGJhY2tfcHJpdmF0ZV9kYXRh LAorCQkJCQkJCQkJCSB2b2lkICpwZXJfYnVmZmVyX2RhdGEpOworCiAJLyoKIAkgKiBGZXRjaCB0 dXBsZSBhdCBgdGlkYCBpbnRvIGBzbG90YCwgYWZ0ZXIgZG9pbmcgYSB2aXNpYmlsaXR5IHRlc3QK IAkgKiBhY2NvcmRpbmcgdG8gYHNuYXBzaG90YC4gSWYgYSB0dXBsZSB3YXMgZm91bmQgYW5kIHBh c3NlZCB0aGUgdmlzaWJpbGl0eQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nv c3QuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKaW5kZXggYjUyM2JjZGE4Li4wMGY0 YzNkMDAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKKysrIGIvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaApAQCAtNTEsNiArNTEsNyBAQCBleHRlcm4gUEdETExJ TVBPUlQgQ29zdCBkaXNhYmxlX2Nvc3Q7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9wYXJh bGxlbF93b3JrZXJzX3Blcl9nYXRoZXI7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVf c2Vxc2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9pbmRleHNjYW47CitleHRl cm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoOwogZXh0ZXJuIFBH RExMSU1QT1JUIGJvb2wgZW5hYmxlX2luZGV4b25seXNjYW47CiBleHRlcm4gUEdETExJTVBPUlQg Ym9vbCBlbmFibGVfYml0bWFwc2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV90 aWRzY2FuOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggYzEy ZGI0OGE2Li5jZGNmNjhhNmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYwpAQCAtNTksNiArNTksOSBAQCBzdGF0aWMgQmxvY2tOdW1iZXIgaGVhcGFtX3NjYW5fZ2V0 X2Jsb2Nrc19kb25lKEhlYXBTY2FuRGVzYyBoc2Nhbik7CiBzdGF0aWMgYm9vbCBCaXRtYXBIZWFw U2Nhbk5leHRCbG9jayhUYWJsZVNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQlib29sICpyZWNoZWNr LAogCQkJCQkJCQkJdWludDY0ICpsb3NzeV9wYWdlcywgdWludDY0ICpleGFjdF9wYWdlcyk7Citz dGF0aWMgQmxvY2tOdW1iZXIgaGVhcGFtX2dldG5leHRfc3RyZWFtKFJlYWRTdHJlYW0gKnN0cmVh bSwKKwkJCQkJCQkJCQkgdm9pZCAqY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLAorCQkJCQkJCQkJCSB2 b2lkICpwZXJfYnVmZmVyX2RhdGEpOwogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTExLDEw ICsxMTQsMTIgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9uIHJlbCwgVHVwbGVU YWJsZVNsb3QgKmlvc190YWJsZXNsb3QpCiAJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IHBh bGxvY19vYmplY3QoSW5kZXhGZXRjaEhlYXBEYXRhKTsKIAogCWhzY2FuLT54c19iYXNlLnJlbCA9 IHJlbDsKKwloc2Nhbi0+eHNfYmFzZS5ycyA9IE5VTEw7CiAJaHNjYW4tPnhzX2Jhc2UubmhlYXBh Y2Nlc3NlcyA9IDA7CiAKIAkvKiBoZWFwYW0gc3BlY2lmaWMgZmllbGRzICovCiAJaHNjYW4tPnhz X2NidWYgPSBJbnZhbGlkQnVmZmVyOworCWhzY2FuLT54c19ibGsgPSBJbnZhbGlkQmxvY2tOdW1i ZXI7CiAJaHNjYW4tPnZtYnVmID0gSW52YWxpZEJ1ZmZlcjsKIAloc2Nhbi0+aW9zX3RhYmxlc2xv dCA9IGlvc190YWJsZXNsb3Q7CiAKQEAgLTEyNiwxMSArMTMxLDE1IEBAIGhlYXBhbV9pbmRleF9m ZXRjaF9yZXNldChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQogewogCUluZGV4RmV0Y2hIZWFw RGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW47CiAKKwlpZiAoc2Nhbi0+ cnMpCisJCXJlYWRfc3RyZWFtX3Jlc2V0KHNjYW4tPnJzKTsKKwogCS8qIGRlbGliZXJhdGVseSBk b24ndCBkcm9wIFZNIGJ1ZmZlciBwaW4gaGVyZSAqLwogCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2Fu LT54c19jYnVmKSkKIAl7CiAJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhzX2NidWYpOwogCQloc2Nh bi0+eHNfY2J1ZiA9IEludmFsaWRCdWZmZXI7CisJCWhzY2FuLT54c19ibGsgPSBJbnZhbGlkQmxv Y2tOdW1iZXI7CiAJfQogfQogCkBAIC0xNDEsNiArMTUwLDkgQEAgaGVhcGFtX2luZGV4X2ZldGNo X2VuZChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQogCiAJaGVhcGFtX2luZGV4X2ZldGNoX3Jl c2V0KHNjYW4pOwogCisJaWYgKHNjYW4tPnJzKQorCQlyZWFkX3N0cmVhbV9lbmQoc2Nhbi0+cnMp OworCiAJaWYgKGhzY2FuLT52bWJ1ZiAhPSBJbnZhbGlkQnVmZmVyKQogCXsKIAkJUmVsZWFzZUJ1 ZmZlcihoc2Nhbi0+dm1idWYpOwpAQCAtMTYzLDIzICsxNzUsMzcgQEAgaGVhcGFtX2luZGV4X2Zl dGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAogCiAJQXNzZXJ0KFRU U19JU19CVUZGRVJUVVBMRShzbG90KSk7CiAKLQkvKiBXZSBjYW4gc2tpcCB0aGUgYnVmZmVyLXN3 aXRjaGluZyBsb2dpYyBpZiB3ZSdyZSBpbiBtaWQtSE9UIGNoYWluLiAqLwotCWlmICghKmNhbGxf YWdhaW4pCisJLyoKKwkgKiBTd2l0Y2ggdG8gY29ycmVjdCBidWZmZXIgaWYgd2UgZG9uJ3QgaGF2 ZSBpdCBhbHJlYWR5ICh3ZSBjYW4gc2tpcCB0aGlzCisJICogaWYgd2UncmUgaW4gbWlkLUhPVCBj aGFpbikKKwkgKi8KKwlpZiAoISpjYWxsX2FnYWluICYmIGhzY2FuLT54c19ibGsgIT0gSXRlbVBv aW50ZXJHZXRCbG9ja051bWJlcih0aWQpKQogCXsKLQkJLyogU3dpdGNoIHRvIGNvcnJlY3QgYnVm ZmVyIGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeSAqLwotCQlCdWZmZXIJCXByZXZfYnVmID0g aHNjYW4tPnhzX2NidWY7CisJCS8qIFJlbWVtYmVyIHRoaXMgYnVmZmVyJ3MgYmxvY2sgbnVtYmVy IGZvciBuZXh0IHRpbWUgKi8KKwkJaHNjYW4tPnhzX2JsayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tO dW1iZXIodGlkKTsKIAotCQloc2Nhbi0+eHNfY2J1ZiA9IFJlbGVhc2VBbmRSZWFkQnVmZmVyKGhz Y2FuLT54c19jYnVmLAotCQkJCQkJCQkJCQkgIGhzY2FuLT54c19iYXNlLnJlbCwKLQkJCQkJCQkJ CQkJICBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCkpOworCQlpZiAoQnVmZmVySXNWYWxp ZChoc2Nhbi0+eHNfY2J1ZikpCisJCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKIAog CQkvKgotCQkgKiBQcnVuZSBwYWdlLCBidXQgb25seSBpZiB3ZSB3ZXJlbid0IGFscmVhZHkgb24g dGhpcyBwYWdlCisJCSAqIFdoZW4gdXNpbmcgYSByZWFkIHN0cmVhbSwgdGhlIHN0cmVhbSB3aWxs IGFscmVhZHkga25vdyB3aGljaCBibG9jaworCQkgKiBudW1iZXIgY29tZXMgbmV4dCAodGhvdWdo IGFuIGFzc2VydGlvbiB3aWxsIHZlcmlmeSBhIG1hdGNoIGJlbG93KQogCQkgKi8KLQkJaWYgKHBy ZXZfYnVmICE9IGhzY2FuLT54c19jYnVmKQotCQkJaGVhcF9wYWdlX3BydW5lX29wdChoc2Nhbi0+ eHNfYmFzZS5yZWwsIGhzY2FuLT54c19jYnVmKTsKKwkJaWYgKHNjYW4tPnJzKQorCQkJaHNjYW4t PnhzX2NidWYgPSByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcihzY2FuLT5ycywgTlVMTCk7CisJCWVs c2UKKwkJCWhzY2FuLT54c19jYnVmID0gUmVhZEJ1ZmZlcihoc2Nhbi0+eHNfYmFzZS5yZWwsIGhz Y2FuLT54c19ibGspOworCisJCS8qCisJCSAqIFBydW5lIHBhZ2Ugd2hlbiBpdCBpcyBwaW5uZWQg Zm9yIHRoZSBmaXJzdCB0aW1lCisJCSAqLworCQloZWFwX3BhZ2VfcHJ1bmVfb3B0KGhzY2FuLT54 c19iYXNlLnJlbCwgaHNjYW4tPnhzX2NidWYpOwogCX0KIAorCS8qIEFzc2VydCB0aGF0IHRoZSBU SUQncyBibG9jayBudW1iZXIncyBidWZmZXIgaXMgbm93IHBpbm5lZCAqLworCUFzc2VydChCdWZm ZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSk7CisJQXNzZXJ0KEJ1ZmZlckdldEJsb2NrTnVtYmVy KGhzY2FuLT54c19jYnVmKSA9PSBoc2Nhbi0+eHNfYmxrKTsKKwogCS8qIE9idGFpbiBzaGFyZS1s b2NrIG9uIHRoZSBidWZmZXIgc28gd2UgY2FuIGV4YW1pbmUgdmlzaWJpbGl0eSAqLwogCUxvY2tC dWZmZXIoaHNjYW4tPnhzX2NidWYsIEJVRkZFUl9MT0NLX1NIQVJFKTsKIAlnb3RfaGVhcF90dXBs ZSA9IGhlYXBfaG90X3NlYXJjaF9idWZmZXIodGlkLApAQCAtMzYzLDEzICszODksMjQgQEAgaGVh cGFtX2JhdGNoX2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXJlY3Rpb24pCiAJLyogSW5pdGlhbGl6ZSBkaXJlY3Rpb24gb24gZmlyc3QgY2FsbCAqLwogCWlm IChiYXRjaHF1ZXVlLT5kaXJlY3Rpb24gPT0gTm9Nb3ZlbWVudFNjYW5EaXJlY3Rpb24pCiAJCWJh dGNocXVldWUtPmRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKKwllbHNlIGlmICh1bmxpa2VseShiYXRj aHF1ZXVlLT5kaXNhYmxlZCAmJiBzY2FuLT54c19oZWFwZmV0Y2gtPnJzKSkKKwl7CisJCS8qCisJ CSAqIEhhbmRsZSBjYW5jZWxsaW5nIHRoZSB1c2Ugb2YgdGhlIHJlYWQgc3RyZWFtIGZvciBwcmVm ZXRjaGluZworCQkgKi8KKwkJYmF0Y2hfcmVzZXRfcG9zKCZiYXRjaHF1ZXVlLT5zdHJlYW1Qb3Mp OworCisJCXJlYWRfc3RyZWFtX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaC0+cnMpOworCQlzY2Fu LT54c19oZWFwZmV0Y2gtPnJzID0gTlVMTDsKKwl9CiAJZWxzZSBpZiAodW5saWtlbHkoYmF0Y2hx dWV1ZS0+ZGlyZWN0aW9uICE9IGRpcmVjdGlvbikpCiAJewogCQkvKgogCQkgKiBIYW5kbGUgYSBj aGFuZ2UgaW4gdGhlIHNjYW4ncyBkaXJlY3Rpb24uCiAJCSAqCiAJCSAqIFJlbGVhc2UgZnV0dXJl IGJhdGNoZXMgcHJvcGVybHksIHRvIG1ha2UgaXQgbG9vayBsaWtlIHRoZSBjdXJyZW50Ci0JCSAq IGJhdGNoIGlzIHRoZSBvbmx5IG9uZSB3ZSBsb2FkZWQuCisJCSAqIGJhdGNoIGlzIHRoZSBvbmx5 IG9uZSB3ZSBsb2FkZWQuIEFsc28gcmVzZXQgdGhlIHN0cmVhbSBwb3NpdGlvbiwgYXMKKwkJICog aWYgd2UgYXJlIGp1c3Qgc3RhcnRpbmcgdGhlIHNjYW4uCiAJCSAqLwogCQl3aGlsZSAoYmF0Y2hx dWV1ZS0+bmV4dEJhdGNoID4gYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoICsgMSkKIAkJewpAQCAtMzg0 LDEwICs0MjEsMTYgQEAgaGVhcGFtX2JhdGNoX2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiAJCS8qCiAJCSAqIFJlbWVtYmVyIHRoZSBuZXcg ZGlyZWN0aW9uLCBhbmQgbWFrZSBzdXJlIHRoZSBzY2FuIGlzIG5vdCBtYXJrZWQgYXMKIAkJICog ImZpbmlzaGVkIiAod2UgbWlnaHQgaGF2ZSBhbHJlYWR5IHJlYWQgdGhlIGxhc3QgYmF0Y2gsIGJ1 dCBub3cgd2UKLQkJICogbmVlZCB0byBzdGFydCBvdmVyKS4KKwkJICogbmVlZCB0byBzdGFydCBv dmVyKS4gRG8gdGhpcyBiZWZvcmUgcmVzZXR0aW5nIHRoZSBzdHJlYW0gLSBpdAorCQkgKiBzaG91 bGQgbm90IGludm9rZSB0aGUgY2FsbGJhY2sgdW50aWwgdGhlIGZpcnN0IHJlYWQsIGJ1dCBpdCBt YXkKKwkJICogc2VlbSBhIGJpdCBjb25mdXNpbmcgb3RoZXJ3aXNlLgogCQkgKi8KIAkJYmF0Y2hx dWV1ZS0+ZGlyZWN0aW9uID0gZGlyZWN0aW9uOwogCQliYXRjaHF1ZXVlLT5maW5pc2hlZCA9IGZh bHNlOworCQliYXRjaF9yZXNldF9wb3MoJmJhdGNocXVldWUtPnN0cmVhbVBvcyk7CisKKwkJaWYg KHNjYW4tPnhzX2hlYXBmZXRjaC0+cnMpCisJCQlyZWFkX3N0cmVhbV9yZXNldChzY2FuLT54c19o ZWFwZmV0Y2gtPnJzKTsKIAl9CiAKIAkvKiBzaG9ydGN1dCBmb3IgdGhlIHJlYWQgcG9zaXRpb24s IGZvciBjb252ZW5pZW5jZSAqLwpAQCAtNDI5LDYgKzQ3MiwzNyBAQCBoZWFwYW1fYmF0Y2hfZ2V0 bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAkJ CQlCYXRjaEluZGV4U2NhbiBoZWFkQmF0Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNjYW4sCiAJCQkJ CQkJCQkJCQkJCQliYXRjaHF1ZXVlLT5oZWFkQmF0Y2gpOwogCisJCQkJLyoKKwkJCQkgKiBYWFgg V2hlbiBhZHZhbmNpbmcgcmVhZFBvcywgdGhlIHN0cmVhbVBvcyBtYXkgZ2V0IGJlaGluZCBhcwor CQkJCSAqIHdlJ3JlIG9ubHkgYWR2YW5jaW5nIGl0IHdoZW4gYWN0dWFsbHkgcmVxdWVzdGluZyBo ZWFwCisJCQkJICogYmxvY2tzLiBCdXQgd2UgbWF5IG5vdCBkbyB0aGF0IG9mdGVuIGVub3VnaCAt IGUuZy4gSU9TIG1heQorCQkJCSAqIG5vdCBuZWVkIHRvIGFjY2VzcyBhbGwtdmlzaWJsZSBoZWFw IGJsb2Nrcywgc28gdGhlCisJCQkJICogcmVhZF9uZXh0IGNhbGxiYWNrIGRvZXMgbm90IGdldCBp bnZva2VkIGZvciBhIGxvbmcgdGltZS4KKwkJCQkgKiBJdCdzIHBvc3NpYmxlIHRoZSBzdHJlYW0g Z2V0cyBzbyBmYXIgYmVoaW5kIHRoZSBwb3NpdGlvbgorCQkJCSAqIHRoYXQgaXMgYmVjb21lcyBp bnZhbGlkLCBhcyB3ZSBhbHJlYWR5IHJlbW92ZWQgdGhlIGJhdGNoLgorCQkJCSAqIEJ1dCB0aGF0 IG1lYW5zIHdlIGRvbid0IG5lZWQgYW55IGhlYXAgYmxvY2tzIHVudGlsIHRoZQorCQkJCSAqIGN1 cnJlbnQgcmVhZCBwb3NpdGlvbiAtLSBpZiB3ZSBkaWQsIHdlIHdvdWxkIG5vdCBiZSBpbiB0aGlz CisJCQkJICogc2l0dWF0aW9uIChvciBpdCdzIGEgc2lnbiBvZiBhIGJ1ZywgYXMgdGhvc2UgdHdv IHBsYWNlcyBhcmUKKwkJCQkgKiBleHBlY3RlZCB0byBiZSBpbiBzeW5jKS4gU28gaWYgdGhlIHN0 cmVhbVBvcyBzdGlsbCBwb2ludHMKKwkJCQkgKiBhdCB0aGUgYmF0Y2ggd2UncmUgYWJvdXQgdG8g ZnJlZSwgcmVzZXQgdGhlIHBvc2l0aW9uIC0tCisJCQkJICogd2UnbGwgc2V0IGl0IHRvIHJlYWRQ b3MgaW4gdGhlIHJlYWRfbmV4dCBjYWxsYmFjayBsYXRlciBvbi4KKwkJCQkgKgorCQkJCSAqIFhY WCBUaGlzIGNhbiBoYXBwZW4gYWZ0ZXIgdGhlIHF1ZXVlIGdldHMgZnVsbCwgd2UgInBhdXNlIgor CQkJCSAqIHRoZSBzdHJlYW0sIGFuZCB0aGVuIHJlc2V0IGl0IHRvIGNvbnRpbnVlLiBCdXQgSSB0 aGluayB0aGF0CisJCQkJICoganVzdCBpbmNyZWFzZXMgdGhlIHByb2JhYmlsaXR5IG9mIGhpdHRp bmcgdGhlIGlzc3VlLCBpdCdzCisJCQkJICoganVzdCBtb3JlIGNoYW5jZSB0byB0byBub3QgYWR2 YW5jZSB0aGUgc3RyZWFtUG9zLCB3aGljaAorCQkJCSAqIGRlcGVuZHMgb24gd2hlbiB3ZSB0cnkg dG8gZmV0Y2ggdGhlIGZpcnN0IGhlYXAgYmxvY2sgYWZ0ZXIKKwkJCQkgKiBjYWxsaW5nIHJlYWRf c3RyZWFtX3Jlc2V0KCkuCisJCQkJICoKKwkJCQkgKiBGSVhNRSBTaW1wbGlmeS9jbGFyaWZ5L3No b3J0ZW4gdGhpcyBjb21tZW50LiBDYW4gaXQKKwkJCQkgKiBhY3R1YWxseSBoYXBwZW4sIGlmIHdl IG5ldmVyIHB1bGwgZnJvbSB0aGUgc3RyZWFtIGluIElPUz8KKwkJCQkgKiBXZSBwcm9iYWJseSBk b24ndCBsb29rIGFoZWFkIGZvciB0aGUgZmlyc3QgY2FsbC4KKwkJCQkgKi8KKwkJCQlpZiAodW5s aWtlbHkoYmF0Y2hxdWV1ZS0+c3RyZWFtUG9zLmJhdGNoID09IGJhdGNocXVldWUtPmhlYWRCYXRj aCkpCisJCQkJeworCQkJCQliYXRjaF9yZXNldF9wb3MoJmJhdGNocXVldWUtPnN0cmVhbVBvcyk7 CisJCQkJfQorCiAJCQkJLyogRnJlZSB0aGUgaGVhZCBiYXRjaCAoZXhjZXB0IHdoZW4gaXQncyBt YXJrQmF0Y2gpICovCiAJCQkJYmF0Y2hfZnJlZShzY2FuLCBoZWFkQmF0Y2gpOwogCkBAIC00NDcs OCArNTIxLDM4IEBAIGhlYXBhbV9iYXRjaF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQogCQl9CiAKIAkJLyoKLQkJICogRmFpbGVkIHRvIGFk dmFuY2UgdGhlIHJlYWQgcG9zaXRpb24uICBIYXZlIGluZGV4YmF0Y2guYyB1dGlsaXR5Ci0JCSAq IHJvdXRpbmUgbG9hZCBhbm90aGVyIGJhdGNoIGludG8gb3VyIHF1ZXVlIChuZXh0IGluIHRoaXMg ZGlyZWN0aW9uKS4KKwkJICogV2UgZmFpbGVkIHRvIGFkdmFuY2UsIGkuZS4gd2UgcmFuIG91dCBv ZiBjdXJyZW50bHkgbG9hZGVkIGJhdGNoZXMuCisJCSAqIFNvIGlmIHdlIGZpbGxlZCB0aGUgcXVl dWUsIHRoaXMgaXMgYSBnb29kIHRpbWUgdG8gcmVzZXQgdGhlIHN0cmVhbQorCQkgKiAoYmVmb3Jl IHdlIHRyeSBsb2FkaW5nIHRoZSBuZXh0IGJhdGNoKS4KKwkJICovCisJCWlmICh1bmxpa2VseShi YXRjaHF1ZXVlLT5yZXNldCkpCisJCXsKKwkJCWJhdGNocXVldWUtPnJlc2V0ID0gZmFsc2U7CisJ CQliYXRjaHF1ZXVlLT5jdXJyZW50UHJlZmV0Y2hCbG9jayA9IEludmFsaWRCbG9ja051bWJlcjsK KworCQkJLyoKKwkJCSAqIE5lZWQgdG8gcmVzZXQgdGhlIHN0cmVhbSBwb3NpdGlvbiwgaXQgbWln aHQgYmUgdG9vIGZhciBiZWhpbmQuCisJCQkgKiBVbHRpbWF0ZWx5IHdlIHdhbnQgdG8gc2V0IGl0 IHRvIHJlYWRQb3MsIGJ1dCB3ZSBjYW4ndCBkbyB0aGF0CisJCQkgKiB5ZXQgLSByZWFkUG9zIHN0 aWxsIHBvaW50IHNhdCB0aGUgb2xkIGJhdGNoLCBzbyBqdXN0IHJlc2V0IGl0CisJCQkgKiBhbmQg d2UnbGwgaW5pdCBpdCB0byByZWFkUG9zIGxhdGVyIGluIHRoZSBjYWxsYmFjay4KKwkJCSAqLwor CQkJYmF0Y2hfcmVzZXRfcG9zKCZiYXRjaHF1ZXVlLT5zdHJlYW1Qb3MpOworCisJCQlpZiAoc2Nh bi0+eHNfaGVhcGZldGNoLT5ycykKKwkJCQlyZWFkX3N0cmVhbV9yZXNldChzY2FuLT54c19oZWFw ZmV0Y2gtPnJzKTsKKwkJfQorCisJCS8qCisJCSAqIEZhaWxlZCB0byBhZHZhbmNlIHRoZSByZWFk IHBvc2l0aW9uLCBzbyB0cnkgcmVhZGluZyB0aGUgbmV4dCBiYXRjaC4KKwkJICogSWYgdGhpcyBm YWlscywgd2UncmUgZG9uZSAtIHRoZXJlJ3Mgbm90aGluZyBtb3JlIHRvIGxvYWQuCisJCSAqCisJ CSAqIE1vc3Qgb2YgdGhlIGJhdGNoZXMgc2hvdWxkIGJlIGxvYWRlZCBmcm9tIHJlYWRfc3RyZWFt X25leHRfYnVmZmVyLAorCQkgKiBidXQgd2UgbmVlZCB0byBjYWxsIGJhdGNoX2dldG5leHQgaGVy ZSB0b28sIGZvciB0d28gcmVhc29ucy4gRmlyc3QsCisJCSAqIHRoZSByZWFkX3N0cmVhbSBvbmx5 IGdldHMgd29ya2luZyBhZnRlciB3ZSB0cnkgZmV0Y2hpbmcgdGhlIGZpcnN0CisJCSAqIGhlYXAg dHVwbGUsIHNvIHdlIG5lZWQgdG8gbG9hZCB0aGUgaW5pdGlhbCBiYXRjaCAodGhlIGhlYWQpLgor CQkgKiBTZWNvbmQsIHdoaWxlIG1vc3QgYmF0Y2hlcyB3aWxsIGJlIHByZWxvYWRlZCBieSB0aGUg c3RyZWFtIHRoYW5rcworCQkgKiB0byBwcmVmZXRjaGluZywgaXQncyBwb3NzaWJsZSB0byBzZXQg ZWZmZWN0aXZlX2lvX2NvbmN1cnJlbmN5PTAsCisJCSAqIGFuZCBpbiB0aGF0IGNhc2UgYWxsIHRo ZSBiYXRjaGVzIGdldCBsb2FkZWQgZnJvbSBoZXJlLgogCQkgKi8KIAkJaWYgKCFiYXRjaF9nZXRu ZXh0KHNjYW4sIGRpcmVjdGlvbikpCiAJCXsKQEAgLTQ2OCw2ICs1NzIsMTk4IEBAIGhlYXBhbV9i YXRjaF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0 aW9uKQogCXJldHVybiBOVUxMOwogfQogCisvKgorICogQ29udHJvbHMgd2hlbiB3ZSBjYW5jZWwg dXNlIG9mIGEgcmVhZCBzdHJlYW0gdG8gZG8gcHJlZmV0Y2hpbmcKKyAqLworI2RlZmluZSBJTkRF WF9TQ0FOX01JTl9ESVNUQU5DRV9OQkFUQ0hFUwkyMAorI2RlZmluZSBJTkRFWF9TQ0FOX01JTl9U VVBMRV9ESVNUQU5DRQkJNworCisvKgorICogaGVhcGFtX2dldG5leHRfc3RyZWFtCisgKgkJcmV0 dXJuIHRoZSBuZXh0IGJsb2NrIHRvIHBhc3MgdG8gdGhlIHJlYWQgc3RyZWFtCisgKgorICogVGhp cyBhc3N1bWVzIHRoZSAiY3VycmVudCIgc2NhbiBkaXJlY3Rpb24sIHJlcXVlc3RlZCBieSB0aGUg Y2FsbGVyLgorICoKKyAqIElmIHRoZSBkaXJlY3Rpb24gY2hhbmdlcyBiZWZvcmUgY29uc3VtaW5n IGFsbCBibG9ja3MsIHdlJ2xsIHJlc2V0IHRoZSBzdHJlYW0KKyAqIGFuZCBzdGFydCBmcm9tIHNj cmF0Y2guIFRoZSBzY2FuIGRpcmVjdGlvbiBjaGFuZ2UgaXMgaGFuZGxlZCBlbHNld2hlcmUuCisg KiBIZXJlIHdlIHJlbHkgb24gaGF2aW5nIHRoZSBjb3JyZWN0IHZhbHVlIGluIGJhdGNocXVldWUt PmRpcmVjdGlvbi4KKyAqCisgKiBUaGUgcG9zaXRpb24gb2YgdGhlIHJlYWRfc3RyZWFtIGlzIHN0 b3JlZCBpbiBzdHJlYW1Qb3MsIHdoaWNoIG1heSBiZSBhaGVhZCBvZgorICogdGhlIGN1cnJlbnQg cmVhZFBvcyAod2hpY2ggaXMgd2hhdCBnb3QgY29uc3VtZWQgYnkgdGhlIHNjYW4pLgorICoKKyAq IFRoZSBzdHJlYW1Qb3MgY2FuIGhvd2V2ZXIgYWxzbyBnZXQgYmVoaW5kIHJlYWRQb3MgdG9vLCB3 aGVuIHNvbWUgYmxvY2tzIGFyZQorICogc2tpcHBlZCBhbmQgbm90IHJldHVybmVkIHRvIHRoZSBy ZWFkX3N0cmVhbS4gQW4gZXhhbXBsZSBpcyBhbiBpbmRleCBzY2FuIG9uCisgKiBhIGNvcnJlbGF0 ZWQgaW5kZXgsIHdpdGggbWFueSBkdXBsaWNhdGUgYmxvY2tzIGFyZSBza2lwcGVkLCBvciBhbiBJ T1Mgd2hlcmUKKyAqIGFsbC12aXNpYmxlIGJsb2NrcyBhcmUgc2tpcHBlZC4KKyAqCisgKiBUaGUg aW5pdGlhbCBiYXRjaCBpcyBhbHdheXMgbG9hZGVkIGZyb20gYmF0Y2hfZ2V0bmV4dF90aWQoKS4g V2UgZG9uJ3QKKyAqIGdldCBoZXJlIHVudGlsIHRoZSBmaXJzdCByZWFkX3N0cmVhbV9uZXh0X2J1 ZmZlcigpIGNhbGwsIHdoZW4gcHVsbGluZyB0aGUKKyAqIGZpcnN0IGhlYXAgdHVwbGUgZnJvbSB0 aGUgc3RyZWFtLiBBZnRlciB0aGF0LCBtb3N0IGJhdGNoZXMgc2hvdWxkIGJlIGxvYWRlZAorICog YnkgdGhpcyBjYWxsYmFjaywgZHJpdmVuIGJ5IHRoZSByZWFkX3N0cmVhbSBsb29rLWFoZWFkIGRp c3RhbmNlLiBIb3dldmVyLAorICogd2l0aCBkaXNhYmxlZCBwcmVmZXRjaGluZyAodGhhdCBpcywg d2l0aCBlZmZlY3RpdmVfaW9fY29uY3VycmVuY3k9MCksIGFsbAorICogYmF0Y2hlcyB3aWxsIGJl IGxvYWRlZCBpbiBiYXRjaF9nZXRuZXh0X3RpZC4KKyAqCisgKiBJdCdzIHBvc3NpYmxlIHdlIGdv dCBoZXJlIG9ubHkgZmFpcmx5IGxhdGUgaW4gdGhlIHNjYW4sIGUuZy4gaWYgbWFueSB0dXBsZXMK KyAqIGdvdCBza2lwcGVkIGluIHRoZSBpbmRleC1vbmx5IHNjYW4sIGV0Yy4gSW4gdGhpcyBjYXNl IGp1c3QgdXNlIHRoZSByZWFkCisgKiBwb3NpdGlvbiBhcyBhIHN0cmVhbVBvcyBzdGFydGluZyBw b2ludC4KKyAqLworc3RhdGljIEJsb2NrTnVtYmVyCitoZWFwYW1fZ2V0bmV4dF9zdHJlYW0oUmVh ZFN0cmVhbSAqc3RyZWFtLCB2b2lkICpjYWxsYmFja19wcml2YXRlX2RhdGEsCisJCQkJCSAgdm9p ZCAqcGVyX2J1ZmZlcl9kYXRhKQoreworCUluZGV4U2NhbkRlc2Mgc2NhbiA9IChJbmRleFNjYW5E ZXNjKSBjYWxsYmFja19wcml2YXRlX2RhdGE7CisJQmF0Y2hRdWV1ZSAqYmF0Y2hxdWV1ZSA9IHNj YW4tPmJhdGNocXVldWU7CisJQmF0Y2hRdWV1ZUl0ZW1Qb3MgKnN0cmVhbVBvcyA9ICZiYXRjaHF1 ZXVlLT5zdHJlYW1Qb3M7CisJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBiYXRjaHF1ZXVlLT5k aXJlY3Rpb247CisKKwkvKiBCeSBub3cgd2Ugc2hvdWxkIGtub3cgdGhlIGRpcmVjdGlvbiBvZiB0 aGUgc2Nhbi4gKi8KKwlBc3NlcnQoZGlyZWN0aW9uICE9IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9u KTsKKworCS8qCisJICogVGhlIHJlYWQgcG9zaXRpb24gKHJlYWRQb3MpIGhhcyB0byBiZSB2YWxp ZC4KKwkgKgorCSAqIFdlIGluaXRpYWxpemUvYWR2YW5jZSBpdCBiZWZvcmUgZXZlbiBhdHRlbXB0 aW5nIHRvIHJlYWQgdGhlIGhlYXAgdHVwbGUsCisJICogYW5kIGl0IGdldHMgaW52YWxpZGF0ZWQg d2hlbiB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBzY2FuIChidXQgdGhlbiB3ZQorCSAqIGRvbid0 IGludm9rZSB0aGUgY2FsbGJhY2sgYWdhaW4pLgorCSAqCisJICogWFhYIFRoaXMgYXBwbGllcyB0 byB0aGUgcmVhZFBvcy4gV2UnbGwgdXNlIHN0cmVhbVBvcyB0byBkZXRlcm1pbmUgd2hpY2gKKwkg KiBibG9ja3MgdG8gcGFzcyB0byB0aGUgc3RyZWFtLCBhbmQgcmVhZFBvcyBtYXkgYmUgdXNlZCB0 byBpbml0aWFsaXplIGl0LgorCSAqLworCWJhdGNoX2Fzc2VydF9wb3NfdmFsaWQoc2NhbiwgJmJh dGNocXVldWUtPnJlYWRQb3MpOworCisJLyoKKwkgKiBUcnkgdG8gYWR2YW5jZSB0aGUgc3RyZWFt UG9zIHRvIHRoZSBuZXh0IGl0ZW0sIGFuZCBpZiB0aGF0IGRvZXNuJ3QKKwkgKiBzdWNjZWVkIChp ZiB0aGVyZSBhcmUgbm8gbW9yZSBpdGVtcyBpbiBsb2FkZWQgYmF0Y2hlcyksIHRyeSBsb2FkaW5n IHRoZQorCSAqIG5leHQgb25lLgorCSAqCisJICogRklYTUUgVW5saWtlIGJhdGNoX2dldG5leHRf dGlkLCB0aGlzIGNhbiBsb29wIG1vcmUgdGhhbiB0d2ljZS4gSWYgbWFueQorCSAqIGJsb2NrcyBn ZXQgc2tpcHBlZCBkdWUgdG8gY3VycmVudFByZWZldGNoQmxvY2sgb3IgYWxsLXZpc2liaWxpdHkg KHBlcgorCSAqIHRoZSAicHJlZmV0Y2giIGNhbGxiYWNrKSwgd2UgZ2V0IHRvIGxvYWQgYWRkaXRp b25hbCBiYXRjaGVzLiBJbiB0aGUKKwkgKiB3b3JzdCBjYXNlIHdlIGhpdCB0aGUgSU5ERVhfU0NB Tl9NQVhfQkFUQ0hFUyBsaW1pdCBhbmQgaGF2ZSB0byAicGF1c2UiCisJICogdGhlIHN0cmVhbS4K KwkgKi8KKwl3aGlsZSAodHJ1ZSkKKwl7CisJCWJvb2wJCWFkdmFuY2VkID0gZmFsc2U7CisKKwkJ LyoKKwkJICogSWYgdGhlIHN0cmVhbSBwb3NpdGlvbiBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQg eWV0LCBzZXQgaXQgdG8gdGhlCisJCSAqIGN1cnJlbnQgcmVhZCBwb3NpdGlvbi4gVGhpcyBpcyB0 aGUgaXRlbSB0aGUgY2FsbGVyIGlzIHRyeWluZyB0bworCQkgKiByZWFkLCBzbyBpdCdzIHdoYXQg d2Ugc2hvdWxkIHJldHVybiB0byB0aGUgc3RyZWFtLgorCQkgKi8KKwkJaWYgKElOREVYX1NDQU5f UE9TX0lOVkFMSUQoc3RyZWFtUG9zKSkKKwkJeworCQkJKnN0cmVhbVBvcyA9IGJhdGNocXVldWUt PnJlYWRQb3M7CisJCQlhZHZhbmNlZCA9IHRydWU7CisJCX0KKwkJZWxzZSBpZiAoaGVhcF9iYXRj aF9hZHZhbmNlX3BvcyhzY2FuLCBzdHJlYW1Qb3MsIGRpcmVjdGlvbikpCisJCXsKKwkJCWFkdmFu Y2VkID0gdHJ1ZTsKKwkJfQorCisJCS8qCisJCSAqIEZJWE1FIE1heWJlIGNoZWNrIHRoZSBzdHJl YW1Qb3MgaXMgbm90IGJlaGluZCByZWFkUG9zPworCQkgKgorCQkgKiBGSVhNRSBBY3R1YWxseSwg Y291bGQgc3RyZWFtUG9zIGdldCBzdGFsZS9sYWdnaW5nIGJlaGluZCByZWFkUG9zLAorCQkgKiBh bmQgaWYgeWVzIGhvdyBtdWNoLiBDb3VsZCBpdCBnZXQgc28gZmFyIGJlaGluZCB0byBub3QgYmUg dmFsaWQsCisJCSAqIHBvaW50aW5nIGF0IGEgZnJlZWQgYmF0Y2g/IEluIHRoYXQgY2FzZSB3ZSBj YW4ndCBldmVuIGFkdmFuY2UgaXQsCisJCSAqIGFuZCB3ZSBzaG91bGQganVzdCBpbml0aWFsaXpl IGl0IHRvIHJlYWRQb3MuIFdlIG1pZ2h0IGRvIHRoYXQKKwkJICogYW55d2F5LCBJIGd1ZXNzLCBq dXN0IHRvIHNhdmUgb24gInBvaW50bGVzcyIgYWR2YW5jZXMgKGl0IG11c3QKKwkJICogYWdyZWUg d2l0aCByZWFkUG9zLCB3ZSBjYW4ndCBhbGxvdyAicmV0cm9hY3RpdmVseSIgY2hhbmdpbmcgdGhl CisJCSAqIGJsb2NrIHNlcXVlbmNlKS4KKwkJICovCisKKwkJLyoKKwkJICogSWYgd2UgYWR2YW5j ZWQgdGhlIHBvc2l0aW9uLCBlaXRoZXIgcmV0dXJuIHRoZSBibG9jayBmb3IgdGhlIFRJRCwKKwkJ ICogb3Igc2tpcCBpdCAoYW5kIHRoZW4gdHJ5IGFkdmFuY2luZyBhZ2FpbikuCisJCSAqCisJCSAq IFRoZSBibG9jayBtYXkgYmUgInNraXBwZWQiIGZvciB0d28gcmVhc29ucy4gRmlyc3QsIHRoZSBj YWxsZXIgbWF5CisJCSAqIGRlZmluZSBhICJwcmVmZXRjaCIgY2FsbGJhY2sgdGhhdCB0ZWxscyB1 cyB0byBza2lwIGl0ZW1zIChJT1MgZG9lcworCQkgKiB0aGlzIHRvIHNraXAgYWxsLXZpc2libGUg cGFnZXMpLiBTZWNvbmQsIGN1cnJlbnRQcmVmZXRjaEJsb2NrIGlzCisJCSAqIHVzZWQgdG8gc2tp cCBkdXBsaWNhdGUgYmxvY2sgbnVtYmVycyAoYSBzZXF1ZW5jZSBvZiBUSURTIGZvciB0aGUKKwkJ ICogc2FtZSBibG9jaykuCisJCSAqLworCQlpZiAoYWR2YW5jZWQpCisJCXsKKwkJCUJhdGNoSW5k ZXhTY2FuIHN0cmVhbUJhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBzdHJlYW1Qb3MtPmJh dGNoKTsKKwkJCUl0ZW1Qb2ludGVyIHRpZCA9ICZzdHJlYW1CYXRjaC0+aXRlbXNbc3RyZWFtUG9z LT5pdGVtXS5oZWFwVGlkOworCisJCQlERUJVR19MT0coImhlYXBhbV9nZXRuZXh0X3N0cmVhbTog aXRlbSAlZCwgVElEICgldSwldSkiLAorCQkJCQkgIHN0cmVhbVBvcy0+aXRlbSwKKwkJCQkJICBJ dGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCisJCQkJCSAgSXRlbVBvaW50ZXJHZXRPZmZz ZXROdW1iZXIodGlkKSk7CisKKwkJCS8qIHNhbWUgYmxvY2sgYXMgYmVmb3JlLCBkb24ndCBuZWVk IHRvIHJlYWQgaXQgKi8KKwkJCWlmIChiYXRjaHF1ZXVlLT5jdXJyZW50UHJlZmV0Y2hCbG9jayA9 PSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCkpCisJCQl7CisJCQkJREVCVUdfTE9HKCJo ZWFwYW1fZ2V0bmV4dF9zdHJlYW06IHNraXAgYmxvY2sgKGN1cnJlbnRQcmVmZXRjaEJsb2NrKSIp OworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQliYXRjaHF1ZXVlLT5jdXJyZW50UHJlZmV0Y2hC bG9jayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKTsKKworCQkJcmV0dXJuIGJhdGNo cXVldWUtPmN1cnJlbnRQcmVmZXRjaEJsb2NrOworCQl9CisKKwkJLyoKKwkJICogQ291bGRuJ3Qg YWR2YW5jZSB0aGUgcG9zaXRpb24sIG5vIG1vcmUgaXRlbXMgaW4gdGhlIGxvYWRlZCBiYXRjaGVz LgorCQkgKiBUcnkgbG9hZGluZyB0aGUgbmV4dCBiYXRjaCAtIGlmIHRoYXQgc3VjY2VlZHMsIHRy eSBhZHZhbmNpbmcgYWdhaW4KKwkJICogKHRoaXMgdGltZSB0aGUgYWR2YW5jZSBzaG91bGQgd29y aywgYnV0IHdlIG1heSBza2lwIGFsbCB0aGUgaXRlbXMpLgorCQkgKgorCQkgKiBJZiB3ZSBmYWls IHRvIGxvYWQgdGhlIG5leHQgYmF0Y2gsIHdlJ3JlIGRvbmUuCisJCSAqLworCQlpZiAoIWJhdGNo X2dldG5leHQoc2NhbiwgZGlyZWN0aW9uKSkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIENvbnNp ZGVyIGRpc2FibGluZyBwcmVmZXRjaGluZyB3aGVuIHdlIGNhbid0IGtlZXAgYSBzdWZmaWNpZW50 bHkKKwkJICogbGFyZ2UgImluZGV4IHR1cGxlIGRpc3RhbmNlIiBiZXR3ZWVuIHJlYWRQb3MgYW5k IHN0cmVhbVBvcy4KKwkJICoKKwkJICogT25seSBjb25zaWRlciBkb2luZyB0aGlzIHdoZW4gd2Un cmUgbm90IG9uIHRoZSBzY2FuJ3MgaW5pdGlhbAorCQkgKiBiYXRjaCwgd2hlbiByZWFkUG9zIGFu ZCBzdHJlYW1Qb3Mgc2hhcmUgdGhlIHNhbWUgYmF0Y2guCisJCSAqLworCQlpZiAoIWJhdGNocXVl dWUtPmZpbmlzaGVkICYmICFiYXRjaHF1ZXVlLT5wcmVmZXRjaGluZ0xvY2tlZEluKQorCQl7CisJ CQlpbnQJCQlpdGVtZGlmZjsKKworCQkJaWYgKHN0cmVhbVBvcy0+YmF0Y2ggPD0gSU5ERVhfU0NB Tl9NSU5fRElTVEFOQ0VfTkJBVENIRVMpCisJCQl7CisJCQkJLyogVG9vIGVhcmx5IHRvIGNoZWNr IGlmIHByZWZldGNoaW5nIHNob3VsZCBiZSBkaXNhYmxlZCAqLworCQkJfQorCQkJZWxzZSBpZiAo YmF0Y2hxdWV1ZS0+cmVhZFBvcy5iYXRjaCA9PSBzdHJlYW1Qb3MtPmJhdGNoKQorCQkJeworCQkJ CUJhdGNoUXVldWVJdGVtUG9zICpyZWFkUG9zID0gJmJhdGNocXVldWUtPnJlYWRQb3M7CisKKwkJ CQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCQkJCQlpdGVtZGlmZiA9 IHN0cmVhbVBvcy0+aXRlbSAtIHJlYWRQb3MtPml0ZW07CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJ QmF0Y2hJbmRleFNjYW4gcmVhZEJhdGNoID0KKwkJCQkJCUlOREVYX1NDQU5fQkFUQ0goc2Nhbiwg cmVhZFBvcy0+YmF0Y2gpOworCisJCQkJCWl0ZW1kaWZmID0gKHJlYWRQb3MtPml0ZW0gLSByZWFk QmF0Y2gtPmZpcnN0SXRlbSkgLQorCQkJCQkJKHN0cmVhbVBvcy0+aXRlbSAtIHJlYWRCYXRjaC0+ Zmlyc3RJdGVtKTsKKwkJCQl9CisKKwkJCQlpZiAoaXRlbWRpZmYgPCBJTkRFWF9TQ0FOX01JTl9U VVBMRV9ESVNUQU5DRSkKKwkJCQl7CisJCQkJCWJhdGNocXVldWUtPmRpc2FibGVkID0gdHJ1ZTsK KwkJCQkJcmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsK KwkJCQkJYmF0Y2hxdWV1ZS0+cHJlZmV0Y2hpbmdMb2NrZWRJbiA9IHRydWU7CisJCQkJfQorCQkJ fQorCQkJZWxzZQorCQkJCWJhdGNocXVldWUtPnByZWZldGNoaW5nTG9ja2VkSW4gPSB0cnVlOwor CQl9CisJfQorCisJLyogbm8gbW9yZSBpdGVtcyBpbiB0aGlzIHNjYW4gKi8KKwlyZXR1cm4gSW52 YWxpZEJsb2NrTnVtYmVyOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJaW5kZXhfZmV0 Y2hfaGVhcCAtIGdldCB0aGUgc2NhbidzIG5leHQgaGVhcCB0dXBsZQogICoKQEAgLTMxMzcsNiAr MzQzMyw3IEBAIHN0YXRpYyBjb25zdCBUYWJsZUFtUm91dGluZSBoZWFwYW1fbWV0aG9kcyA9IHsK IAkuaW5kZXhfZmV0Y2hfcmVzZXQgPSBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQsCiAJLmluZGV4 X2ZldGNoX2VuZCA9IGhlYXBhbV9pbmRleF9mZXRjaF9lbmQsCiAJLmluZGV4X2dldG5leHRfc2xv dCA9IGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QsCisJLmluZGV4X2dldG5leHRfc3RyZWFtID0g aGVhcGFtX2dldG5leHRfc3RyZWFtLAogCS5pbmRleF9mZXRjaF90dXBsZSA9IGhlYXBhbV9pbmRl eF9mZXRjaF90dXBsZSwKIAogCS50dXBsZV9pbnNlcnQgPSBoZWFwYW1fdHVwbGVfaW5zZXJ0LApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKaW5kZXggOWU0ZWQ1YjU1Li4xOTM2YTM0YzggMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwpAQCAtNDU5LDcgKzQ1OSwxNSBAQCBpbmRleF9y ZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1nZXRi YXRjaCk7CiAJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1wb3NyZXNldCk7CiAKLQkvKiByZWxlYXNl IHJlc291cmNlcyAobGlrZSBidWZmZXIgcGlucykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLworCS8q CisJICogcmVsZWFzZSByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGZyb20gdGFibGUgYWNj ZXNzZXMKKwkgKgorCSAqIFhYWDogQ3VycmVudGx5LCB0aGUgZGlzdGFuY2UgaXMgYWx3YXlzIHJl bWVtYmVyZWQgYWNyb3NzIGFueQorCSAqIHJlYWRfc3RyZWFtX3Jlc2V0IGNhbGxzICh0byB3b3Jr IGFyb3VuZCB0aGUgc2Nhbi0+YmF0Y2hxdWV1ZS0+cmVzZXQKKwkgKiBiZWhhdmlvciBvZiByZXNl dHRpbmcgdGhlIHN0cmVhbSB0byBkZWFsIHdpdGggcnVubmluZyBvdXQgb2YgYmF0Y2hlcykuCisJ ICogV2UgcHJvYmFibHkgX3Nob3VsZF8gYmUgZm9yZ2V0dGluZyB0aGUgZGlzdGFuY2Ugd2hlbiB3 ZSByZXNldCB0aGUKKwkgKiBzdHJlYW0gaGVyZSAodGhyb3VnaCBvdXIgdGFibGVfaW5kZXhfZmV0 Y2hfcmVzZXQgY2FsbCksIHRob3VnaC4KKwkgKi8KIAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQog CQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2FuLT54c19oZWFwZmV0Y2gpOwogCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwppbmRleCBlMzBjYzE3OWMuLjM0Zjk2ZTU0NCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCkBAIC03NSwxMSArNzUsMTYgQEAgaW5k ZXhfYmF0Y2hfaW5pdChJbmRleFNjYW5EZXNjIHNjYW4pCiAJCSghc2Nhbi0+eHNfd2FudF9pdHVw ICYmIElzTVZDQ1NuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSAmJgogCQkgUmVsYXRpb25OZWVk c1dBTChzY2FuLT5pbmRleFJlbGF0aW9uKSk7CiAJc2Nhbi0+YmF0Y2hxdWV1ZS0+ZmluaXNoZWQg PSBmYWxzZTsKKwlzY2FuLT5iYXRjaHF1ZXVlLT5yZXNldCA9IGZhbHNlOworCXNjYW4tPmJhdGNo cXVldWUtPnByZWZldGNoaW5nTG9ja2VkSW4gPSBmYWxzZTsKKwlzY2FuLT5iYXRjaHF1ZXVlLT5k aXNhYmxlZCA9IGZhbHNlOworCXNjYW4tPmJhdGNocXVldWUtPmN1cnJlbnRQcmVmZXRjaEJsb2Nr ID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCXNjYW4tPmJhdGNocXVldWUtPmRpcmVjdGlvbiA9IE5v TW92ZW1lbnRTY2FuRGlyZWN0aW9uOwogCiAJLyogcG9zaXRpb25zIGluIHRoZSBxdWV1ZSBvZiBi YXRjaGVzICovCiAJYmF0Y2hfcmVzZXRfcG9zKCZzY2FuLT5iYXRjaHF1ZXVlLT5yZWFkUG9zKTsK IAliYXRjaF9yZXNldF9wb3MoJnNjYW4tPmJhdGNocXVldWUtPm1hcmtQb3MpOworCWJhdGNoX3Jl c2V0X3Bvcygmc2Nhbi0+YmF0Y2hxdWV1ZS0+c3RyZWFtUG9zKTsKIAogCXNjYW4tPmJhdGNocXVl dWUtPm1hcmtCYXRjaCA9IE5VTEw7CiAJc2Nhbi0+YmF0Y2hxdWV1ZS0+aGVhZEJhdGNoID0gMDsJ LyogaW5pdGlhbCBoZWFkIGJhdGNoICovCkBAIC0xMjMsNyArMTI4LDIzIEBAIGJhdGNoX2dldG5l eHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAlpZiAoYmF0 Y2hxdWV1ZS0+ZmluaXNoZWQpCiAJCXJldHVybiBmYWxzZTsKIAotCUFzc2VydCghSU5ERVhfU0NB Tl9CQVRDSF9GVUxMKHNjYW4pKTsKKwkvKgorCSAqIElmIHdlIGFscmVhZHkgdXNlZCB0aGUgbWF4 aW11bSBudW1iZXIgb2YgYmF0Y2ggc2xvdHMgYXZhaWxhYmxlLCBpdCdzCisJICogcG9pbnRsZXNz IHRvIHRyeSBsb2FkaW5nIGFub3RoZXIgb25lLiBUaGlzIGNhbiBoYXBwZW4gZm9yIHZhcmlvdXMK KwkgKiByZWFzb25zLCBlLmcuIGZvciBpbmRleC1vbmx5IHNjYW5zIG9uIGFsbC12aXNpYmxlIHRh YmxlLCBvciBza2lwcGluZworCSAqIGR1cGxpY2F0ZSBibG9ja3Mgb24gcGVyZmVjdGx5IGNvcnJl bGF0ZWQgaW5kZXhlcywgZXRjLgorCSAqCisJICogV2UgY291bGQgZW5sYXJnZSB0aGUgYXJyYXkg dG8gYWxsb3cgbW9yZSBiYXRjaGVzLCBidXQgdGhhdCdzIGZ1dGlsZSwgd2UKKwkgKiBjYW4gYWx3 YXlzIGNvbnN0cnVjdCBhIGNhc2UgdXNpbmcgbW9yZSBtZW1vcnkuIE5vdCBvbmx5IGl0IHdvdWxk IHJpc2sKKwkgKiBPT00sIGl0J2QgYWxzbyBiZSBpbmVmZmljaWVudCBiZWNhdXNlIHRoaXMgaGFw cGVucyBlYXJseSBpbiB0aGUgc2NhbgorCSAqIChzbyBpdCdkIGludGVyZmVyZSB3aXRoIExJTUlU IHF1ZXJpZXMpLgorCSAqLworCWlmIChJTkRFWF9TQ0FOX0JBVENIX0ZVTEwoc2NhbikpCisJewor CQlERUJVR19MT0coImJhdGNoX2dldG5leHQ6IHJhbiBvdXQgb2Ygc3BhY2UgZm9yIGJhdGNoZXMi KTsKKwkJc2Nhbi0+YmF0Y2hxdWV1ZS0+cmVzZXQgPSB0cnVlOworCQlyZXR1cm4gZmFsc2U7CisJ fQogCiAJYmF0Y2hfZGVidWdfcHJpbnRfYmF0Y2hlcygiYmF0Y2hfZ2V0bmV4dCAvIHN0YXJ0Iiwg c2Nhbik7CiAKQEAgLTE0OCw2ICsxNjksMTcgQEAgYmF0Y2hfZ2V0bmV4dChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQogCiAJCURFQlVHX0xPRygiYmF0Y2hfZ2V0 bmV4dCBoZWFkQmF0Y2ggJWQgbmV4dEJhdGNoICVkIGJhdGNoICVwIiwKIAkJCQkgIGJhdGNocXVl dWUtPmhlYWRCYXRjaCwgYmF0Y2hxdWV1ZS0+bmV4dEJhdGNoLCBiYXRjaCk7CisKKwkJLyogRGVs YXkgaW5pdGlhbGl6aW5nIHN0cmVhbSB1bnRpbCByZWFkaW5nIGZyb20gc2NhbidzIHNlY29uZCBi YXRjaCAqLworCQlpZiAocHJpb3JiYXRjaCAmJiAhc2Nhbi0+eHNfaGVhcGZldGNoLT5ycyAmJiAh YmF0Y2hxdWV1ZS0+ZGlzYWJsZWQgJiYKKwkJCSFzY2FuLT54c193YW50X2l0dXAgJiYJLyogWFhY IHByZWZldGNoaW5nIGRpc2FibGVkIGZvciBJb1MsIGZvcgorCQkJCQkJCQkJICogbm93ICovCisJ CQllbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoKQorCQkJc2Nhbi0+eHNfaGVhcGZldGNoLT5ycyA9 CisJCQkJcmVhZF9zdHJlYW1fYmVnaW5fcmVsYXRpb24oUkVBRF9TVFJFQU1fREVGQVVMVCwgTlVM TCwKKwkJCQkJCQkJCQkgICBzY2FuLT5oZWFwUmVsYXRpb24sIE1BSU5fRk9SS05VTSwKKwkJCQkJ CQkJCQkgICBzY2FuLT5oZWFwUmVsYXRpb24tPnJkX3RhYmxlYW0tPmluZGV4X2dldG5leHRfc3Ry ZWFtLAorCQkJCQkJCQkJCSAgIHNjYW4sIDApOwogCX0KIAllbHNlCiAJCWJhdGNocXVldWUtPmZp bmlzaGVkID0gdHJ1ZTsKQEAgLTE4MCw5ICsyMTIsMTIgQEAgaW5kZXhfYmF0Y2hfcmVzZXQoSW5k ZXhTY2FuRGVzYyBzY2FuLCBib29sIGNvbXBsZXRlKQogCWJhdGNoX2Fzc2VydF9iYXRjaGVzX3Zh bGlkKHNjYW4pOwogCWJhdGNoX2RlYnVnX3ByaW50X2JhdGNoZXMoImluZGV4X2JhdGNoX3Jlc2V0 Iiwgc2Nhbik7CiAJQXNzZXJ0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisJaWYgKHNjYW4tPnhzX2hl YXBmZXRjaC0+cnMpCisJCXJlYWRfc3RyZWFtX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaC0+cnMp OwogCiAJLyogcmVzZXQgdGhlIHBvc2l0aW9ucyAqLwogCWJhdGNoX3Jlc2V0X3BvcygmYmF0Y2hx dWV1ZS0+cmVhZFBvcyk7CisJYmF0Y2hfcmVzZXRfcG9zKCZiYXRjaHF1ZXVlLT5zdHJlYW1Qb3Mp OwogCiAJLyoKIAkgKiBXaXRoICJjb21wbGV0ZSIgcmVzZXQsIG1ha2Ugc3VyZSB0byBhbHNvIGZy ZWUgdGhlIG1hcmtlZCBiYXRjaCwgZWl0aGVyCkBAIC0yMjgsNiArMjYzLDggQEAgaW5kZXhfYmF0 Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBib29sIGNvbXBsZXRlKQogCWJhdGNocXVldWUt Pm5leHRCYXRjaCA9IDA7CS8qIGluaXRpYWwgYmF0Y2ggaXMgZW1wdHkgKi8KIAogCWJhdGNocXVl dWUtPmZpbmlzaGVkID0gZmFsc2U7CisJYmF0Y2hxdWV1ZS0+cmVzZXQgPSBmYWxzZTsKKwliYXRj aHF1ZXVlLT5jdXJyZW50UHJlZmV0Y2hCbG9jayA9IEludmFsaWRCbG9ja051bWJlcjsKIAogCWJh dGNoX2Fzc2VydF9iYXRjaGVzX3ZhbGlkKHNjYW4pOwogfQpAQCAtMjkxLDkgKzMyOCwxMyBAQCBp bmRleF9iYXRjaF9yZXN0b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiB7CiAJQmF0Y2hRdWV1 ZSAqYmF0Y2hxdWV1ZSA9IHNjYW4tPmJhdGNocXVldWU7CiAJQmF0Y2hRdWV1ZUl0ZW1Qb3MgKm1h cmtQb3MgPSAmYmF0Y2hxdWV1ZS0+bWFya1BvczsKLQlCYXRjaFF1ZXVlSXRlbVBvcyAqcmVhZFBv cyA9ICZiYXRjaHF1ZXVlLT5yZWFkUG9zOwogCUJhdGNoSW5kZXhTY2FuIG1hcmtCYXRjaCA9IGJh dGNocXVldWUtPm1hcmtCYXRjaDsKIAorCS8qCisJICogWFhYIERpc2FibGUgdGhpcyBvcHRpbWl6 YXRpb24gd2hlbiBJL08gcHJlZmV0Y2hpbmcgaXMgaW4gdXNlLCBhdCBsZWFzdAorCSAqIHVudGls IHRoZSBwb3NzaWJsZSBpbnRlcmFjdGlvbnMgd2l0aCBzdHJlYW1Qb3MgYXJlIGZ1bGx5IHVuZGVy c3Rvb2QuCisJICovCisjaWYgMAogCWlmIChyZWFkUG9zLT5iYXRjaCA9PSBtYXJrUG9zLT5iYXRj aCAmJgogCQlyZWFkUG9zLT5iYXRjaCA9PSBiYXRjaHF1ZXVlLT5oZWFkQmF0Y2gpCiAJewpAQCAt MzA0LDYgKzM0NSw3IEBAIGluZGV4X2JhdGNoX3Jlc3RvcmVfcG9zKEluZGV4U2NhbkRlc2Mgc2Nh bikKIAkJcmVhZFBvcy0+aXRlbSA9IG1hcmtQb3MtPml0ZW07CiAJCXJldHVybjsKIAl9CisjZW5k aWYKIAogCS8qCiAJICogQ2FsbCBhbXBvc3Jlc2V0IHRvIGxldCBpbmRleCBBTSBrbm93IHRvIGlu dmFsaWRhdGUgYW55IHByaXZhdGUgc3RhdGUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGlt aXplci9wYXRoL2Nvc3RzaXplLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6 ZS5jCmluZGV4IGEzOWNjNzkzYi4uMzdhMGU2YTNmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2Nvc3RzaXplLmMKQEAgLTE0NCw2ICsxNDQsNyBAQCBpbnQJCQltYXhfcGFyYWxsZWxfd29ya2Vy c19wZXJfZ2F0aGVyID0gMjsKIAogYm9vbAkJZW5hYmxlX3NlcXNjYW4gPSB0cnVlOwogYm9vbAkJ ZW5hYmxlX2luZGV4c2NhbiA9IHRydWU7Citib29sCQllbmFibGVfaW5kZXhzY2FuX3ByZWZldGNo ID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9pbmRleG9ubHlzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJs ZV9iaXRtYXBzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV90aWRzY2FuID0gdHJ1ZTsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMgYi9zcmMvYmFja2Vu ZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCmluZGV4IGYxYjg4ZDA1OC4uMmEwNjI3OWY1IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCisrKyBiL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKQEAgLTk5LDYgKzk5LDcgQEAgc3Ry dWN0IFJlYWRTdHJlYW0KIAlpbnQxNgkJZm9yd2FyZGVkX2J1ZmZlcnM7CiAJaW50MTYJCXBpbm5l ZF9idWZmZXJzOwogCWludDE2CQlkaXN0YW5jZTsKKwlpbnQxNgkJZGlzdGFuY2Vfb2xkOwogCWlu dDE2CQlpbml0aWFsaXplZF9idWZmZXJzOwogCWludAkJCXJlYWRfYnVmZmVyc19mbGFnczsKIAli b29sCQlzeW5jX21vZGU7CQkvKiB1c2luZyBpb19tZXRob2Q9c3luYyAqLwpAQCAtNDY0LDYgKzQ2 NSw3IEBAIHJlYWRfc3RyZWFtX2xvb2tfYWhlYWQoUmVhZFN0cmVhbSAqc3RyZWFtKQogCQlpZiAo YmxvY2tudW0gPT0gSW52YWxpZEJsb2NrTnVtYmVyKQogCQl7CiAJCQkvKiBFbmQgb2Ygc3RyZWFt LiAqLworCQkJc3RyZWFtLT5kaXN0YW5jZV9vbGQgPSBzdHJlYW0tPmRpc3RhbmNlOwogCQkJc3Ry ZWFtLT5kaXN0YW5jZSA9IDA7CiAJCQlicmVhazsKIAkJfQpAQCAtODYyLDYgKzg2NCw3IEBAIHJl YWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRTdHJlYW0gKnN0cmVhbSwgdm9pZCAqKnBlcl9idWZm ZXJfZGF0YSkKIAkJZWxzZQogCQl7CiAJCQkvKiBObyBtb3JlIGJsb2NrcywgZW5kIG9mIHN0cmVh bS4gKi8KKwkJCXN0cmVhbS0+ZGlzdGFuY2Vfb2xkID0gc3RyZWFtLT5kaXN0YW5jZTsKIAkJCXN0 cmVhbS0+ZGlzdGFuY2UgPSAwOwogCQkJc3RyZWFtLT5vbGRlc3RfYnVmZmVyX2luZGV4ID0gc3Ry ZWFtLT5uZXh0X2J1ZmZlcl9pbmRleDsKIAkJCXN0cmVhbS0+cGlubmVkX2J1ZmZlcnMgPSAwOwpA QCAtMTA0Niw2ICsxMDQ5LDkgQEAgcmVhZF9zdHJlYW1fcmVzZXQoUmVhZFN0cmVhbSAqc3RyZWFt KQogCWludDE2CQlpbmRleDsKIAlCdWZmZXIJCWJ1ZmZlcjsKIAorCS8qIHJlbWVtYmVyIHRoZSBv bGQgZGlzdGFuY2UgKGlmIHdlIHJlc2V0IGJlZm9yZSBlbmQgb2YgdGhlIHN0cmVhbSkgKi8KKwlz dHJlYW0tPmRpc3RhbmNlX29sZCA9IE1heChzdHJlYW0tPmRpc3RhbmNlLCBzdHJlYW0tPmRpc3Rh bmNlX29sZCk7CisKIAkvKiBTdG9wIGxvb2tpbmcgYWhlYWQuICovCiAJc3RyZWFtLT5kaXN0YW5j ZSA9IDA7CiAKQEAgLTEwNzgsOCArMTA4NCwxMiBAQCByZWFkX3N0cmVhbV9yZXNldChSZWFkU3Ry ZWFtICpzdHJlYW0pCiAJQXNzZXJ0KHN0cmVhbS0+cGlubmVkX2J1ZmZlcnMgPT0gMCk7CiAJQXNz ZXJ0KHN0cmVhbS0+aW9zX2luX3Byb2dyZXNzID09IDApOwogCi0JLyogU3RhcnQgb2ZmIGFzc3Vt aW5nIGRhdGEgaXMgY2FjaGVkLiAqLwotCXN0cmVhbS0+ZGlzdGFuY2UgPSAxOworCS8qCisJICog UmVzdG9yZSB0aGUgb2xkIGRpc3RhbmNlLCBpZiB3ZSBoYXZlIG9uZS4gT3RoZXJ3aXNlIHN0YXJ0 IGFzc3VtaW5nIGRhdGEKKwkgKiBpcyBjYWNoZWQuCisJICovCisJc3RyZWFtLT5kaXN0YW5jZSA9 IE1heCgxLCBzdHJlYW0tPmRpc3RhbmNlX29sZCk7CisJc3RyZWFtLT5kaXN0YW5jZV9vbGQgPSAw OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1l dGVycy5kYXQgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAppbmRl eCAzYjlkODM0OTAuLjNmMjY0ZjFjZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9ndWNfcGFyYW1ldGVycy5kYXQKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFy YW1ldGVycy5kYXQKQEAgLTg4Miw2ICs4ODIsMTMgQEAKICAgYm9vdF92YWwgPT4gJ3RydWUnLAog fSwKIAoreyBuYW1lID0+ICdlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoJywgdHlwZSA9PiAnYm9v bCcsIGNvbnRleHQgPT4gJ1BHQ19VU0VSU0VUJywgZ3JvdXAgPT4gJ1FVRVJZX1RVTklOR19NRVRI T0QnLAorICBzaG9ydF9kZXNjID0+ICdFbmFibGVzIHByZWZldGNoaW5nIGZvciBpbmRleCBzY2Fu cyBhbmQgaW5kZXgtb25seS1zY2Fucy4nLAorICBmbGFncyA9PiAnR1VDX0VYUExBSU4nLAorICB2 YXJpYWJsZSA9PiAnZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCcsCisgIGJvb3RfdmFsID0+ICd0 cnVlJywKK30sCisKIHsgbmFtZSA9PiAnZW5hYmxlX21hdGVyaWFsJywgdHlwZSA9PiAnYm9vbCcs IGNvbnRleHQgPT4gJ1BHQ19VU0VSU0VUJywgZ3JvdXAgPT4gJ1FVRVJZX1RVTklOR19NRVRIT0Qn LAogICBzaG9ydF9kZXNjID0+ICdFbmFibGVzIHRoZSBwbGFubmVyXCdzIHVzZSBvZiBtYXRlcmlh bGl6YXRpb24uJywKICAgZmxhZ3MgPT4gJ0dVQ19FWFBMQUlOJywKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCBkYzllMjI1NWYuLmRhNTBhZTE1 ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2Ft cGxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQpA QCAtNDEyLDYgKzQxMiw3IEBACiAjZW5hYmxlX2luY3JlbWVudGFsX3NvcnQgPSBvbgogI2VuYWJs ZV9pbmRleHNjYW4gPSBvbgogI2VuYWJsZV9pbmRleG9ubHlzY2FuID0gb24KKyNlbmFibGVfaW5k ZXhzY2FuX3ByZWZldGNoID0gb24KICNlbmFibGVfbWF0ZXJpYWwgPSBvbgogI2VuYWJsZV9tZW1v aXplID0gb24KICNlbmFibGVfbWVyZ2Vqb2luID0gb24KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9z eXN2aWV3cy5vdXQKaW5kZXggMDQxMWRiODMyLi5hMmE4YzNhZmEgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvc3lzdmlld3Mub3V0CkBAIC0xNTksNiArMTU5LDcgQEAgc2VsZWN0IG5hbWUsIHNl dHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1lIGxpa2UgJ2VuYWJsZSUnOwogIGVuYWJs ZV9pbmNyZW1lbnRhbF9zb3J0ICAgICAgICB8IG9uCiAgZW5hYmxlX2luZGV4b25seXNjYW4gICAg ICAgICAgIHwgb24KICBlbmFibGVfaW5kZXhzY2FuICAgICAgICAgICAgICAgfCBvbgorIGVuYWJs ZV9pbmRleHNjYW5fcHJlZmV0Y2ggICAgICB8IG9uCiAgZW5hYmxlX21hdGVyaWFsICAgICAgICAg ICAgICAgIHwgb24KICBlbmFibGVfbWVtb2l6ZSAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJs ZV9tZXJnZWpvaW4gICAgICAgICAgICAgICB8IG9uCkBAIC0xNzMsNyArMTc0LDcgQEAgc2VsZWN0 IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1lIGxpa2UgJ2VuYWJsZSUn OwogIGVuYWJsZV9zZXFzY2FuICAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX3NvcnQgICAg ICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfdGlkc2NhbiAgICAgICAgICAgICAgICAgfCBv bgotKDI1IHJvd3MpCisoMjYgcm93cykKIAogLS0gVGhlcmUgYXJlIGFsd2F5cyB3YWl0IGV2ZW50 IGRlc2NyaXB0aW9ucyBmb3IgdmFyaW91cyB0eXBlcy4gIEluamVjdGlvblBvaW50CiAtLSBtYXkg YmUgcHJlc2VudCBvciBhYnNlbnQsIGRlcGVuZGluZyBvbiBoaXN0b3J5IHNpbmNlIGxhc3QgcG9z dG1hc3RlciBzdGFydC4KLS0gCjIuNTEuMAoK --000000000000acefda0645a3cfd4--