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 1vrADZ-007izi-0H for pgsql-hackers@arkaria.postgresql.org; Sat, 14 Feb 2026 07:37:29 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vrADW-00HBzk-29 for pgsql-hackers@arkaria.postgresql.org; Sat, 14 Feb 2026 07:37:26 +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 1vrADV-00HBzb-39 for pgsql-hackers@lists.postgresql.org; Sat, 14 Feb 2026 07:37:26 +0000 Received: from mail-ot1-x32b.google.com ([2607:f8b0:4864:20::32b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vrADT-00000000ZKR-0dm7 for pgsql-hackers@lists.postgresql.org; Sat, 14 Feb 2026 07:37:24 +0000 Received: by mail-ot1-x32b.google.com with SMTP id 46e09a7af769-7d4c65d772cso1173295a34.1 for ; Fri, 13 Feb 2026 23:37:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1771054643; cv=none; d=google.com; s=arc-20240605; b=I4LN8R5oMstER4xiHUICy/AhWwJhy9UtiP3r5iht6gZU8QQ4c2qCg/fyH/i7UaR+42 ff3RV0VpByd/8bp0uHLDIuNiht2UlzkvZZXj9LCfX6r9s6D2diDnj8jXp20SJni0pc28 RcIQhNOql8XipynBBkdcS3AeSgjAaCw+Ahl1GBxdzm7Ynthk/CJmkg1Z3vBKCCpZRpyH N5YuySN26IeARbG6ktf2N8JNuxivo5wo7MAiI71reGlcxWQ9sRjxEotEZa4A3CVVDQql P8hNWm/FBaJCed/9hF4kyvtrhWQZH1islSxIQqYlpMIpuEb53IFUaQ7R/RTOq6jpQn0s /DYw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=FxZ7Gfs34YCptqkAA4aUyjCZBZM9pgIAYtgwlCsqOsA=; fh=pmBMntjmyx6XYOkmIq7jCPL8+6Ex8nEv6KGKxj4+8uc=; b=NXaCXqQh1mvg7S0zcAAxrGSIccqqIgB1+/N/W+sfx2gy4LhaolELtu1UwutZ+wBhTa hgB9MELNKBDcEIgdsSwJcVgPME5/GdrjPCSypx3FGKNILzbvc9LxZJMNM9QLZ/iKa6XB 6WNSZsis7YBF4Y+QnjAUrvkbaCsny+C5JYiJWHDuLL8thHNzphAN+pcwRKjiGu2WNScR ystc+PmJ/P9Osyg/LPqe8bf1J4ecaOvq3SUVy5Y16upkVSALQa+El9pWcFPS0mbpE1/W SH/63lLk8kX8FXg28j2loVEhUjcLep7oE2q1F21f8dc2UUYCrKOENH6clOxuYcDsOz7p kEmw==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771054643; x=1771659443; darn=lists.postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=FxZ7Gfs34YCptqkAA4aUyjCZBZM9pgIAYtgwlCsqOsA=; b=izeKGI0vDjvIBVqNQA7XkPFqSFZdXgvISfe7eDNYI6ukjp0SFN2DwlbmSojxly03CV xERCs4XZ+RytCkqZQSxWV1r7kIdAcHXo65ZHBNFwJXJBENn2aLJwN1momO1k/P8PRfj3 u2kC0RBoqq7iFyGodB3UgbOTLIvQAq0a6D7qTNoKLDVpTgSZQ2oOl/7nIxEs4C8hOef9 VqglrA1m8f3cIlQd0E/lrjYz4CyqRo0QeIBFrEWHDmMhlu6N6gB2+oO3mMZgc9T23TJ5 NTkwiD1AOrfC6nOgKKOOiyYIQM3jkIvk3Ulao+mISox1BVkVLgcHDpsXLGf4orR0DU9j BbUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771054643; x=1771659443; h=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=FxZ7Gfs34YCptqkAA4aUyjCZBZM9pgIAYtgwlCsqOsA=; b=otHo15RX4ceOPxceezqVeDopqnOd/w9q5DTlWGBZCDIml/dvt1TAMpIekoh1MBFRS2 E+dxtLAEB0/6yFtiFuprjSMWRK8qB0FoJLD26CY6q6MS+LpK4Y7aPwgDhGgkutQyvyc7 DxtiHMduE0uu5B6WGgQucgZAjmEEO6x9NK92+exI2ZfsF/81/iFzEgX5wVoKOQ1r9PG2 dWeeEJ4klwKlfQBNn/lsC3Gafxiit2k9HsSGVGafpP4tuXmaXMx9cYb7y6T6mOkQQ3BD ELlyjoUBQLC/SfsxmNiTZ++iDRo34IYHkCoDOS157yAjMOLD/dy9uW1NrPkZwDq5rIMy 3q7g== X-Gm-Message-State: AOJu0Yw0/7CCv21z9ZLnF61Z8hQlou/WMeYFv4I2AZC4ipnkD+5dmL8O JaAnDhTTY4fKVyUJTRYUzwNLUB6RuFT3uqmkQ+YzZkiyErVp1Na2WeiFVwePf3ROb1GwMMvuN4l CYvdCBU1Wv3TT5Q10gWupOg0qwuvK9KaSy66g X-Gm-Gg: AZuq6aIG9c8tLaZDVkdJ6rUFzINgCgsxXFRAEJJUuwD64eHDMmXcvig2X78uHm5rzJX jv/Ck5udRU7O1ITF27zVPXh09nmQxqGqxUZHVhDEcpW25DcYPP4s8lhxWuMdwG4YWtgSy5rv2tH o3C4/m3R8dPDZLADNZC3SfrBfcNw+ersmJHwhaPBI6oMqoN4C+evbjcDvTn7OJ0lNQ2X1UO5jWO NRf+u96+QWbpemHTtEBNFb6lGhHaMxuJT+4NHlB4pGMHgZER0U7zYtVjPiy0uYPQ4BAxow0t0lb dAxL7YT/Rw== X-Received: by 2002:a05:6820:450f:b0:65d:88b:c00d with SMTP id 006d021491bc7-677694a0f8emr1627154eaf.66.1771054643069; Fri, 13 Feb 2026 23:37:23 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Richard Guo Date: Sat, 14 Feb 2026 16:37:11 +0900 X-Gm-Features: AZwV_QheaGiG99EIdWIqGSDNVN9UZimwvztha7q3dzvUGrHtK2JtvDdSloUXYcc Message-ID: Subject: Re: Convert NOT IN sublinks to anti-joins when safe To: Pg Hackers Content-Type: multipart/mixed; boundary="000000000000e0e4cc064ac3ca1d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e0e4cc064ac3ca1d Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Feb 5, 2026 at 3:51=E2=80=AFPM Richard Guo = wrote: > Attached is the updated patch, which adds the check requiring the > operator to be a member of a btree or hash opfamily. Attached is another updated patch rebased on current master, with the addition of support for RowCompareExpr to handle multi-column ordering operations; otherwise unchanged. - Richard --000000000000e0e4cc064ac3ca1d Content-Type: application/octet-stream; name="v3-0001-Convert-NOT-IN-sublinks-to-anti-joins-when-safe.patch" Content-Disposition: attachment; filename="v3-0001-Convert-NOT-IN-sublinks-to-anti-joins-when-safe.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlm06l6z0 RnJvbSAzODk5YjgxMWQzZjkwNDI4NWZiNTA5NWNiMzRiM2JlNmFiMjZiNjMyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAzMCBKYW4gMjAyNiAxMjoyOTo0MiArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjNd IENvbnZlcnQgTk9UIElOIHN1YmxpbmtzIHRvIGFudGktam9pbnMgd2hlbiBzYWZlCgpUaGUgcGxh bm5lciBoYXMgaGlzdG9yaWNhbGx5IGJlZW4gdW5hYmxlIHRvIGNvbnZlcnQgInggTk9UIElOIChT RUxFQ1QKeSAuLi4pIiBzdWJsaW5rcyBpbnRvIGFudGktam9pbnMuICBUaGlzIGlzIGJlY2F1c2Ug c3RhbmRhcmQgU1FMCnNlbWFudGljcyBmb3IgTk9UIElOIHJlcXVpcmUgdGhhdCBpZiB0aGUgY29t cGFyaXNvbiAieCA9IHkiIHJldHVybnMKTlVMTCwgdGhlICJOT1QgSU4iIGV4cHJlc3Npb24gZXZh bHVhdGVzIHRvIE5VTEwgKGVmZmVjdGl2ZWx5IGZhbHNlKSwKY2F1c2luZyB0aGUgcm93IHRvIGJl IGRpc2NhcmRlZC4gIEluIGNvbnRyYXN0LCBhbiBhbnRpLWpvaW4gcHJlc2VydmVzCnRoZSByb3cg aWYgbm8gbWF0Y2ggaXMgZm91bmQuICBEdWUgdG8gdGhpcyBzZW1hbnRpYyBtaXNtYXRjaCByZWdh cmRpbmcKTlVMTCBoYW5kbGluZywgdGhlIGNvbnZlcnNpb24gd2FzIHByZXZpb3VzbHkgY29uc2lk ZXJlZCB1bnNhZmUuCgpIb3dldmVyLCBpZiB3ZSBjYW4gcHJvdmUgdGhhdCBuZWl0aGVyIHNpZGUg b2YgdGhlIGNvbXBhcmlzb24gY2FuIHlpZWxkCk5VTEwgdmFsdWVzLCBhbmQgZnVydGhlciB0aGF0 IHRoZSBvcGVyYXRvciBpdHNlbGYgY2Fubm90IHJldHVybiBOVUxMCmZvciBub24tbnVsbCBpbnB1 dHMsIHRoZSBiZWhhdmlvciBvZiBOT1QgSU4gYW5kIGFudGktam9pbiBiZWNvbWVzCmlkZW50aWNh bC4gIEVuYWJsaW5nIHRoaXMgY29udmVyc2lvbiBhbGxvd3MgdGhlIHBsYW5uZXIgdG8gdHJlYXQg dGhlCnN1YmxpbmsgYXMgYSBmaXJzdC1jbGFzcyByZWxhdGlvbiByYXRoZXIgdGhhbiBhbiBvcGFx dWUgU3ViUGxhbgpmaWx0ZXIuICBUaGlzIHVubG9ja3MgZ2xvYmFsIGpvaW4gb3JkZXJpbmcgb3B0 aW1pemF0aW9uIGFuZCBwZXJtaXRzCnRoZSBzZWxlY3Rpb24gb2YgdGhlIG1vc3QgZWZmaWNpZW50 IGpvaW4gYWxnb3JpdGhtIGJhc2VkIG9uIGNvc3QsCm9mdGVuIHlpZWxkaW5nIHNpZ25pZmljYW50 IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBmb3IgbGFyZ2UKZGF0YXNldHMuCgpUaGlzIHBhdGNo IHZlcmlmaWVzIHRoYXQgbmVpdGhlciBzaWRlIG9mIHRoZSBjb21wYXJpc29uIGNhbiBiZSBOVUxM CmFuZCB0aGF0IHRoZSBvcGVyYXRvciBpcyBzYWZlIHJlZ2FyZGluZyBOVUxMIHJlc3VsdHMgYmVm b3JlIHBlcmZvcm1pbmcKdGhlIGNvbnZlcnNpb24uCgpUbyB2ZXJpZnkgb3BlcmF0b3Igc2FmZXR5 LCB3ZSByZXF1aXJlIHRoYXQgdGhlIG9wZXJhdG9yIGJlIGEgbWVtYmVyIG9mCmEgQi10cmVlIG9y IEhhc2ggb3BlcmF0b3IgZmFtaWx5LiAgVGhpcyBzZXJ2ZXMgYXMgYSBwcm94eSBmb3Igc3RhbmRh cmQKYm9vbGVhbiBiZWhhdmlvciwgZW5zdXJpbmcgdGhlIG9wZXJhdG9yIGRvZXMgbm90IHJldHVy biBOVUxMIG9uIHZhbGlkCm5vbi1udWxsIGlucHV0cywgYXMgZG9pbmcgc28gd291bGQgYnJlYWsg aW5kZXggaW50ZWdyaXR5LgoKRm9yIG9wZXJhbmQgbm9uLW51bGxhYmlsaXR5LCB0aGlzIHBhdGNo IG1ha2VzIHVzZSBvZiBzZXZlcmFsIGV4aXN0aW5nCm1lY2hhbmlzbXMuICBJdCBsZXZlcmFnZXMg dGhlIG91dGVyLWpvaW4tYXdhcmUtVmFyIGluZnJhc3RydWN0dXJlIHRvCnZlcmlmeSB0aGF0IGEg VmFyIGRvZXMgbm90IGNvbWUgZnJvbSB0aGUgbnVsbGFibGUgc2lkZSBvZiBhbiBvdXRlcgpqb2lu LCBhbmQgY29uc3VsdHMgdGhlIE5PVC1OVUxMLWF0dG51bXMgaGFzaCB0YWJsZSB0byBlZmZpY2ll bnRseQp2ZXJpZnkgc2NoZW1hLWxldmVsIE5PVCBOVUxMIGNvbnN0cmFpbnRzLiAgQWRkaXRpb25h bGx5LCBpdCBlbXBsb3lzCmZpbmRfbm9ubnVsbGFibGVfdmFycyB0byBpZGVudGlmeSBWYXJzIGZv cmNlZCBub24tbnVsbGFibGUgYnkgcXVhbApjbGF1c2VzLCBhbmQgZXhwcl9pc19ub25udWxsYWJs ZSB0byBkZWR1Y2Ugbm9uLW51bGxhYmlsaXR5IGZvciBvdGhlcgpleHByZXNzaW9uIHR5cGVzLgot LS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jICAgIHwgICA0ICstCiBz cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zdWJzZWxlY3QuYyAgICB8IDE2NiArKysrKysrLQog c3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcGpvaW50cmVlLmMgfCAgNzIgKysrLQogc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jICAgICAgfCAzODQgKysrKysrKysrKysr KysrKy0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2ludDguYyAgICAgICAgICAgICAgfCAgIDIg Ky0KIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2xzeXNjYWNoZS5jICAgICAgIHwgIDY4ICsrKysK IHNyYy9pbmNsdWRlL29wdGltaXplci9jbGF1c2VzLmggICAgICAgICAgIHwgICAxICsKIHNyYy9p bmNsdWRlL29wdGltaXplci9vcHRpbWl6ZXIuaCAgICAgICAgIHwgIDEzICstCiBzcmMvaW5jbHVk ZS9vcHRpbWl6ZXIvc3Vic2VsZWN0LmggICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS91dGls cy9sc3lzY2FjaGUuaCAgICAgICAgICAgICB8ICAgMiArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3N1YnNlbGVjdC5vdXQgICB8IDQzOSArKysrKysrKysrKysrKysrKysrKysrCiBzcmMvdGVz dC9yZWdyZXNzL3NxbC9zdWJzZWxlY3Quc3FsICAgICAgICB8IDE4NSArKysrKysrKysKIHNyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgIHwgICAxICsKIDEzIGZpbGVzIGNo YW5nZWQsIDEyNzIgaW5zZXJ0aW9ucygrKSwgNjYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vaW5pdHNwbGFuLmMgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9pbml0c3BsYW4uYwppbmRleCA5N2VhOTVhNGViOC4uOWFhZjFjNGU1Y2EgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jCisrKyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jCkBAIC0zNDQ3LDcgKzM0NDcsNyBA QCByZXN0cmljdGlvbl9pc19hbHdheXNfdHJ1ZShQbGFubmVySW5mbyAqcm9vdCwKIAkJaWYgKG51 bGx0ZXN0LT5hcmdpc3JvdykKIAkJCXJldHVybiBmYWxzZTsKIAotCQlyZXR1cm4gZXhwcl9pc19u b25udWxsYWJsZShyb290LCBudWxsdGVzdC0+YXJnLCB0cnVlKTsKKwkJcmV0dXJuIGV4cHJfaXNf bm9ubnVsbGFibGUocm9vdCwgbnVsbHRlc3QtPmFyZywgTk9UTlVMTF9TT1VSQ0VfUkVMT1BUKTsK IAl9CiAKIAkvKiBJZiBpdCdzIGFuIE9SLCBjaGVjayBpdHMgc3ViLWNsYXVzZXMgKi8KQEAgLTM1 MTIsNyArMzUxMiw3IEBAIHJlc3RyaWN0aW9uX2lzX2Fsd2F5c19mYWxzZShQbGFubmVySW5mbyAq cm9vdCwKIAkJaWYgKG51bGx0ZXN0LT5hcmdpc3JvdykKIAkJCXJldHVybiBmYWxzZTsKIAotCQly ZXR1cm4gZXhwcl9pc19ub25udWxsYWJsZShyb290LCBudWxsdGVzdC0+YXJnLCB0cnVlKTsKKwkJ cmV0dXJuIGV4cHJfaXNfbm9ubnVsbGFibGUocm9vdCwgbnVsbHRlc3QtPmFyZywgTk9UTlVMTF9T T1VSQ0VfUkVMT1BUKTsKIAl9CiAKIAkvKiBJZiBpdCdzIGFuIE9SLCBjaGVjayBpdHMgc3ViLWNs YXVzZXMgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3N1YnNlbGVj dC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc3Vic2VsZWN0LmMKaW5kZXggZTlkYzlk MzFmMDUuLjIxZDlhMTQyMzFjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9zdWJzZWxlY3QuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zdWJzZWxlY3Qu YwpAQCAtOTEsNiArOTEsNyBAQCBzdGF0aWMgYm9vbCBjb250YWluX291dGVyX3NlbGZyZWYoTm9k ZSAqbm9kZSk7CiBzdGF0aWMgYm9vbCBjb250YWluX291dGVyX3NlbGZyZWZfd2Fsa2VyKE5vZGUg Km5vZGUsIEluZGV4ICpkZXB0aCk7CiBzdGF0aWMgdm9pZCBpbmxpbmVfY3RlKFBsYW5uZXJJbmZv ICpyb290LCBDb21tb25UYWJsZUV4cHIgKmN0ZSk7CiBzdGF0aWMgYm9vbCBpbmxpbmVfY3RlX3dh bGtlcihOb2RlICpub2RlLCBpbmxpbmVfY3RlX3dhbGtlcl9jb250ZXh0ICpjb250ZXh0KTsKK3N0 YXRpYyBib29sIHN1YmxpbmtfdGVzdGV4cHJfaXNfbm90X251bGxhYmxlKFBsYW5uZXJJbmZvICpy b290LCBTdWJMaW5rICpzdWJsaW5rKTsKIHN0YXRpYyBib29sIHNpbXBsaWZ5X0VYSVNUU19xdWVy eShQbGFubmVySW5mbyAqcm9vdCwgUXVlcnkgKnF1ZXJ5KTsKIHN0YXRpYyBRdWVyeSAqY29udmVy dF9FWElTVFNfdG9fQU5ZKFBsYW5uZXJJbmZvICpyb290LCBRdWVyeSAqc3Vic2VsZWN0LAogCQkJ CQkJCQkJTm9kZSAqKnRlc3RleHByLCBMaXN0ICoqcGFyYW1JZHMpOwpAQCAtMTMwNiwxMSArMTMw NywxNCBAQCBjb252ZXJ0X1ZBTFVFU190b19BTlkoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKnRl c3RleHByLCBRdWVyeSAqdmFsdWVzKQogICogSWYgc28sIGZvcm0gYSBKb2luRXhwciBhbmQgcmV0 dXJuIGl0LiAgUmV0dXJuIE5VTEwgaWYgdGhlIFN1YkxpbmsgY2Fubm90CiAgKiBiZSBjb252ZXJ0 ZWQgdG8gYSBqb2luLgogICoKLSAqIFRoZSBvbmx5IG5vbi1vYnZpb3VzIGlucHV0IHBhcmFtZXRl ciBpcyBhdmFpbGFibGVfcmVsczogdGhpcyBpcyB0aGUgc2V0Ci0gKiBvZiBxdWVyeSByZWxzIHRo YXQgY2FuIHNhZmVseSBiZSByZWZlcmVuY2VkIGluIHRoZSBzdWJsaW5rIGV4cHJlc3Npb24uCi0g KiAoV2UgbXVzdCByZXN0cmljdCB0aGlzIHRvIGF2b2lkIGNoYW5naW5nIHRoZSBzZW1hbnRpY3Mg d2hlbiBhIHN1YmxpbmsKLSAqIGlzIHByZXNlbnQgaW4gYW4gb3V0ZXIgam9pbidzIE9OIHF1YWwu KSAgVGhlIGNvbnZlcnNpb24gbXVzdCBmYWlsIGlmCi0gKiB0aGUgY29udmVydGVkIHF1YWwgd291 bGQgcmVmZXJlbmNlIGFueSBidXQgdGhlc2UgcGFyZW50LXF1ZXJ5IHJlbGlkcy4KKyAqIElmIHVu ZGVyX25vdCBpcyB0cnVlLCB0aGUgY2FsbGVyIGFjdHVhbGx5IGZvdW5kIE5PVCAoQU5ZIFN1Ykxp bmspLCBzbworICogdGhhdCB3aGF0IHdlIG11c3QgdHJ5IHRvIGJ1aWxkIGlzIGFuIEFOVEkgbm90 IFNFTUkgam9pbi4KKyAqCisgKiBhdmFpbGFibGVfcmVscyBpcyB0aGUgc2V0IG9mIHF1ZXJ5IHJl bHMgdGhhdCBjYW4gc2FmZWx5IGJlIHJlZmVyZW5jZWQKKyAqIGluIHRoZSBzdWJsaW5rIGV4cHJl c3Npb24uICAoV2UgbXVzdCByZXN0cmljdCB0aGlzIHRvIGF2b2lkIGNoYW5naW5nCisgKiB0aGUg c2VtYW50aWNzIHdoZW4gYSBzdWJsaW5rIGlzIHByZXNlbnQgaW4gYW4gb3V0ZXIgam9pbidzIE9O IHF1YWwuKQorICogVGhlIGNvbnZlcnNpb24gbXVzdCBmYWlsIGlmIHRoZSBjb252ZXJ0ZWQgcXVh bCB3b3VsZCByZWZlcmVuY2UgYW55IGJ1dAorICogdGhlc2UgcGFyZW50LXF1ZXJ5IHJlbGlkcy4K ICAqCiAgKiBPbiBzdWNjZXNzLCB0aGUgcmV0dXJuZWQgSm9pbkV4cHIgaGFzIGxhcmcgPSBOVUxM IGFuZCByYXJnID0gdGhlIGpvaW50cmVlCiAgKiBpdGVtIHJlcHJlc2VudGluZyB0aGUgcHVsbGVk LXVwIHN1YnF1ZXJ5LiAgVGhlIGNhbGxlciBtdXN0IHNldCBsYXJnIHRvCkBAIC0xMzMzLDcgKzEz MzcsNyBAQCBjb252ZXJ0X1ZBTFVFU190b19BTlkoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKnRl c3RleHByLCBRdWVyeSAqdmFsdWVzKQogICovCiBKb2luRXhwciAqCiBjb252ZXJ0X0FOWV9zdWJs aW5rX3RvX2pvaW4oUGxhbm5lckluZm8gKnJvb3QsIFN1YkxpbmsgKnN1YmxpbmssCi0JCQkJCQkJ UmVsaWRzIGF2YWlsYWJsZV9yZWxzKQorCQkJCQkJCWJvb2wgdW5kZXJfbm90LCBSZWxpZHMgYXZh aWxhYmxlX3JlbHMpCiB7CiAJSm9pbkV4cHIgICAqcmVzdWx0OwogCVF1ZXJ5CSAgICpwYXJzZSA9 IHJvb3QtPnBhcnNlOwpAQCAtMTM1MSw2ICsxMzU1LDE5IEBAIGNvbnZlcnRfQU5ZX3N1Ymxpbmtf dG9fam9pbihQbGFubmVySW5mbyAqcm9vdCwgU3ViTGluayAqc3VibGluaywKIAogCUFzc2VydChz dWJsaW5rLT5zdWJMaW5rVHlwZSA9PSBBTllfU1VCTElOSyk7CiAKKwkvKgorCSAqIFBlciBTUUwg c3BlYywgTk9UIElOIGlzIG5vdCBvcmRpbmFyaWx5IGVxdWl2YWxlbnQgdG8gYW4gYW50aS1qb2lu LCBzbworCSAqIHRoYXQgYnkgZGVmYXVsdCB3ZSBoYXZlIHRvIGZhaWwgd2hlbiB1bmRlcl9ub3Qu ICBIb3dldmVyLCBpZiB3ZSBjYW4KKwkgKiBwcm92ZSB0aGF0IG5laXRoZXIgdGhlIG91dGVyIHF1 ZXJ5J3MgZXhwcmVzc2lvbnMgbm9yIHRoZSBzdWItc2VsZWN0J3MKKwkgKiBvdXRwdXQgY29sdW1u cyBjYW4gYmUgTlVMTCwgYW5kIGZ1cnRoZXIgdGhhdCB0aGUgb3BlcmF0b3IgaXRzZWxmIGNhbm5v dAorCSAqIHJldHVybiBOVUxMIGZvciBub24tbnVsbCBpbnB1dHMsIHRoZW4gdGhlIGxvZ2ljIGlz IGlkZW50aWNhbCBhbmQgaXQncworCSAqIHNhZmUgdG8gY29udmVydCBOT1QgSU4gdG8gYW4gYW50 aS1qb2luLgorCSAqLworCWlmICh1bmRlcl9ub3QgJiYKKwkJKCFzdWJsaW5rX3Rlc3RleHByX2lz X25vdF9udWxsYWJsZShyb290LCBzdWJsaW5rKSB8fAorCQkgIXF1ZXJ5X291dHB1dHNfYXJlX25v dF9udWxsYWJsZShzdWJzZWxlY3QpKSkKKwkJcmV0dXJuIE5VTEw7CisKIAkvKgogCSAqIElmIHRo ZSBzdWItc2VsZWN0IGNvbnRhaW5zIGFueSBWYXJzIG9mIHRoZSBwYXJlbnQgcXVlcnksIHdlIHRy ZWF0IGl0IGFzCiAJICogTEFURVJBTC4gIChWYXJzIGZyb20gaGlnaGVyIGxldmVscyBkb24ndCBt YXR0ZXIgaGVyZS4pCkBAIC0xNDI4LDcgKzE0NDUsNyBAQCBjb252ZXJ0X0FOWV9zdWJsaW5rX3Rv X2pvaW4oUGxhbm5lckluZm8gKnJvb3QsIFN1YkxpbmsgKnN1YmxpbmssCiAJICogQW5kIGZpbmFs bHksIGJ1aWxkIHRoZSBKb2luRXhwciBub2RlLgogCSAqLwogCXJlc3VsdCA9IG1ha2VOb2RlKEpv aW5FeHByKTsKLQlyZXN1bHQtPmpvaW50eXBlID0gSk9JTl9TRU1JOworCXJlc3VsdC0+am9pbnR5 cGUgPSB1bmRlcl9ub3QgPyBKT0lOX0FOVEkgOiBKT0lOX1NFTUk7CiAJcmVzdWx0LT5pc05hdHVy YWwgPSBmYWxzZTsKIAlyZXN1bHQtPmxhcmcgPSBOVUxMOwkJLyogY2FsbGVyIG11c3QgZmlsbCB0 aGlzIGluICovCiAJcmVzdWx0LT5yYXJnID0gKE5vZGUgKikgcnRyOwpAQCAtMTQ0MSwxMiArMTQ1 OCwxNDEgQEAgY29udmVydF9BTllfc3VibGlua190b19qb2luKFBsYW5uZXJJbmZvICpyb290LCBT dWJMaW5rICpzdWJsaW5rLAogCXJldHVybiByZXN1bHQ7CiB9CiAKKy8qCisgKiBzdWJsaW5rX3Rl c3RleHByX2lzX25vdF9udWxsYWJsZTogdmVyaWZ5IHRoYXQgdGVzdGV4cHIgb2YgYW4gQU5ZX1NV QkxJTksKKyAqIGd1YXJhbnRlZXMgYSBub24tbnVsbCByZXN1bHQsIGFzc3VtaW5nIHRoZSBpbm5l ciBzaWRlIGlzIGFsc28gbm9uLW51bGwuCisgKgorICogVG8gZW5zdXJlIHRoZSBleHByZXNzaW9u IG5ldmVyIHJldHVybnMgTlVMTCwgd2UgcmVxdWlyZSBib3RoIHRoYXQgdGhlIG91dGVyCisgKiBl eHByZXNzaW9ucyBhcmUgcHJvdmFibHkgbm9uLW51bGxhYmxlIGFuZCB0aGF0IHRoZSBvcGVyYXRv ciBpdHNlbGYgaXMgc2FmZS4KKyAqIFdlIHZhbGlkYXRlIG9wZXJhdG9yIHNhZmV0eSBieSBjaGVj a2luZyBmb3IgbWVtYmVyc2hpcCBpbiBhIHN0YW5kYXJkIGluZGV4CisgKiBvcGVyYXRvciBmYW1p bHkgKEItdHJlZSBvciBIYXNoKTsgdGhpcyBhY3RzIGFzIGEgcHJveHkgZm9yIHN0YW5kYXJkIGJv b2xlYW4KKyAqIGJlaGF2aW9yLCBlbnN1cmluZyB0aGUgb3BlcmF0b3IgZG9lcyBub3QgcHJvZHVj ZSBOVUxMIHJlc3VsdHMgZnJvbSBub24tbnVsbAorICogaW5wdXRzLgorICoKKyAqIFdlIGhhbmRs ZSB0aGUgdGhyZWUgc3RhbmRhcmQgcGFyc2VyIHJlcHJlc2VudGF0aW9ucyBmb3IgQU5ZIHN1Ymxp bmtzOiBhCisgKiBzaW5nbGUgT3BFeHByIGZvciBzaW5nbGUtY29sdW1uIGNvbXBhcmlzb25zLCBh IEJvb2xFeHByIGNvbnRhaW5pbmcgYSBsaXN0IG9mCisgKiBPcEV4cHJzIGZvciBtdWx0aS1jb2x1 bW4gZXF1YWxpdHkgb3IgaW5lcXVhbGl0eSBjaGVja3MgKHdoZXJlIGVxdWFsaXR5CisgKiBiZWNv bWVzIGFuIEFORCBhbmQgaW5lcXVhbGl0eSBiZWNvbWVzIGFuIE9SKSwgYW5kIGEgUm93Q29tcGFy ZUV4cHIgZm9yCisgKiBtdWx0aS1jb2x1bW4gb3JkZXJpbmcgY2hlY2tzLiAgSW4gYWxsIGNhc2Vz LCB3ZSB2YWxpZGF0ZSB0aGUgb3BlcmF0b3JzIGFuZAorICogdGhlIG91dGVyIGV4cHJlc3Npb25z LgorICoKKyAqIEl0IGlzIGFjY2VwdGFibGUgZm9yIHRoaXMgY2hlY2sgbm90IHRvIGJlIGV4aGF1 c3RpdmUuICBXZSBjYW4gZXJyIG9uIHRoZQorICogc2lkZSBvZiBjb25zZXJ2YXRpc206IGlmIHdl J3JlIG5vdCBzdXJlLCBpdCdzIG9rYXkgdG8gcmV0dXJuIEZBTFNFLgorICovCitzdGF0aWMgYm9v bAorc3VibGlua190ZXN0ZXhwcl9pc19ub3RfbnVsbGFibGUoUGxhbm5lckluZm8gKnJvb3QsIFN1 YkxpbmsgKnN1YmxpbmspCit7CisJTm9kZQkgICAqdGVzdGV4cHIgPSBzdWJsaW5rLT50ZXN0ZXhw cjsKKwlMaXN0CSAgICpvdXRlcl9leHBycyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpsYzsKKworCS8q IFB1bnQgaWYgc3VibGluayBpcyBub3QgaW4gdGhlIGV4cGVjdGVkIGZvcm1hdCAqLworCWlmIChz dWJsaW5rLT5zdWJMaW5rVHlwZSAhPSBBTllfU1VCTElOSyB8fCB0ZXN0ZXhwciA9PSBOVUxMKQor CQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoSXNBKHRlc3RleHByLCBPcEV4cHIpKQorCXsKKwkJLyog c2luZ2xlLWNvbHVtbiBjb21wYXJpc29uICovCisJCU9wRXhwcgkgICAqb3BleHByID0gKE9wRXhw ciAqKSB0ZXN0ZXhwcjsKKworCQkvKiBzdGFuZGFyZCBBTlkgc3RydWN0dXJlIHNob3VsZCBiZSBv cChvdXRlcl92YXIsIHBhcmFtKSAqLworCQlpZiAobGlzdF9sZW5ndGgob3BleHByLT5hcmdzKSAh PSAyKQorCQkJcmV0dXJuIGZhbHNlOworCisJCS8qCisJCSAqIFdlIHJlbHkgb24gbWVtYmVyc2hp cCBpbiBhIEItdHJlZSBvciBIYXNoIG9wZXJhdG9yIGZhbWlseSBhcyBhCisJCSAqIGd1YXJhbnRl ZSB0aGF0IHRoZSBvcGVyYXRvciBhY3RzIGFzIGEgcHJvcGVyIGJvb2xlYW4gY29tcGFyaXNvbgor CQkgKiBhbmQgZG9lcyBub3QgeWllbGQgTlVMTCBmb3IgdmFsaWQgbm9uLW51bGwgaW5wdXRzLgor CQkgKi8KKwkJaWYgKCFvcF9pc19zYWZlX2luZGV4X21lbWJlcihvcGV4cHItPm9wbm8pKQorCQkJ cmV0dXJuIGZhbHNlOworCisJCW91dGVyX2V4cHJzID0gbGFwcGVuZChvdXRlcl9leHBycywgbGlu aXRpYWwob3BleHByLT5hcmdzKSk7CisJfQorCWVsc2UgaWYgKGlzX2FuZGNsYXVzZSh0ZXN0ZXhw cikgfHwgaXNfb3JjbGF1c2UodGVzdGV4cHIpKQorCXsKKwkJLyogbXVsdGktY29sdW1uIGVxdWFs aXR5IG9yIGluZXF1YWxpdHkgY2hlY2tzICovCisJCUJvb2xFeHByICAgKmIgPSAoQm9vbEV4cHIg KikgdGVzdGV4cHI7CisKKwkJZm9yZWFjaChsYywgYi0+YXJncykKKwkJeworCQkJT3BFeHByCSAg ICpvcGV4cHIgPSAoT3BFeHByICopIGxmaXJzdChsYyk7CisKKwkJCWlmICghSXNBKG9wZXhwciwg T3BFeHByKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisKKwkJCS8qIHN0YW5kYXJkIEFOWSBzdHJ1Y3R1 cmUgc2hvdWxkIGJlIG9wKG91dGVyX3ZhciwgcGFyYW0pICovCisJCQlpZiAobGlzdF9sZW5ndGgo b3BleHByLT5hcmdzKSAhPSAyKQorCQkJCXJldHVybiBmYWxzZTsKKworCQkJLyogdmVyaWZ5IG9w ZXJhdG9yIHNhZmV0eTsgc2VlIGNvbW1lbnQgYWJvdmUgKi8KKwkJCWlmICghb3BfaXNfc2FmZV9p bmRleF9tZW1iZXIob3BleHByLT5vcG5vKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisKKwkJCW91dGVy X2V4cHJzID0gbGFwcGVuZChvdXRlcl9leHBycywgbGluaXRpYWwob3BleHByLT5hcmdzKSk7CisJ CX0KKwl9CisJZWxzZSBpZiAoSXNBKHRlc3RleHByLCBSb3dDb21wYXJlRXhwcikpCisJeworCQkv KiBtdWx0aS1jb2x1bW4gb3JkZXJpbmcgY2hlY2tzICovCisJCVJvd0NvbXBhcmVFeHByICpyY2V4 cHIgPSAoUm93Q29tcGFyZUV4cHIgKikgdGVzdGV4cHI7CisKKwkJZm9yZWFjaChsYywgcmNleHBy LT5vcG5vcykKKwkJeworCQkJT2lkCQkJb3BubyA9IGxmaXJzdF9vaWQobGMpOworCisJCQkvKiB2 ZXJpZnkgb3BlcmF0b3Igc2FmZXR5OyBzZWUgY29tbWVudCBhYm92ZSAqLworCQkJaWYgKCFvcF9p c19zYWZlX2luZGV4X21lbWJlcihvcG5vKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQlv dXRlcl9leHBycyA9IGxpc3RfY29uY2F0KG91dGVyX2V4cHJzLCByY2V4cHItPmxhcmdzKTsKKwl9 CisJZWxzZQorCXsKKwkJLyogUHVudCBpZiBvdGhlciBub2RlIHR5cGVzICovCisJCXJldHVybiBm YWxzZTsKKwl9CisKKwkvKgorCSAqIFNpbmNlIHRoZSBxdWVyeSBoYXNuJ3QgeWV0IGJlZW4gdGhy b3VnaCBleHByZXNzaW9uIHByZXByb2Nlc3NpbmcsIHdlCisJICogbXVzdCBhcHBseSBmbGF0dGVu X2pvaW5fYWxpYXNfdmFycyB0byB0aGUgb3V0ZXIgZXhwcmVzc2lvbnMgdG8gYXZvaWQKKwkgKiBi ZWluZyBmb29sZWQgYnkgam9pbiBhbGlhc2VzLgorCSAqCisJICogV2UgZG8gbm90IG5lZWQgdG8g YXBwbHkgZmxhdHRlbl9ncm91cF9leHBycyB0aG91Z2gsIHNpbmNlIGdyb3VwaW5nIFZhcnMKKwkg KiBjYW5ub3QgYXBwZWFyIGluIGpvaW50cmVlIHF1YWxzLgorCSAqLworCW91dGVyX2V4cHJzID0g KExpc3QgKikKKwkJZmxhdHRlbl9qb2luX2FsaWFzX3ZhcnMocm9vdCwgcm9vdC0+cGFyc2UsIChO b2RlICopIG91dGVyX2V4cHJzKTsKKworCS8qIENoZWNrIHRoYXQgZXZlcnkgb3V0ZXIgZXhwcmVz c2lvbiBpcyBub24tbnVsbGFibGUgKi8KKwlmb3JlYWNoKGxjLCBvdXRlcl9leHBycykKKwl7CisJ CUV4cHIJICAgKmV4cHIgPSAoRXhwciAqKSBsZmlyc3QobGMpOworCisJCS8qCisJCSAqIFdlIGhh dmUgYWxyZWFkeSBjb2xsZWN0ZWQgcmVsYXRpb24tbGV2ZWwgbm90LW51bGwgY29uc3RyYWludHMg Zm9yCisJCSAqIHRoZSBvdXRlciBxdWVyeSwgc28gd2UgY2FuIGNvbnN1bHQgdGhlIGdsb2JhbCBo YXNoIHRhYmxlIGZvcgorCQkgKiBudWxsYWJpbGl0eSBpbmZvcm1hdGlvbi4KKwkJICovCisJCWlm ICghZXhwcl9pc19ub25udWxsYWJsZShyb290LCBleHByLCBOT1ROVUxMX1NPVVJDRV9IQVNIVEFC TEUpKQorCQkJcmV0dXJuIGZhbHNlOworCisJCS8qCisJCSAqIFhYWCBJdCBpcyBwb3NzaWJsZSB0 byBmdXJ0aGVyIHByb3ZlIG5vbi1udWxsYWJpbGl0eSBieSBleGFtaW5pbmcKKwkJICogdGhlIHF1 YWwgY2xhdXNlcyBhdmFpbGFibGUgYXQgb3IgYmVsb3cgdGhlIGpvaW50cmVlIG5vZGUgd2hlcmUg dGhpcworCQkgKiBOT1QgSU4gY2xhdXNlIGlzIGV2YWx1YXRlZCwgYnV0IGZvciB0aGUgbW9tZW50 IGl0IGRvZXNuJ3Qgc2VlbQorCQkgKiB3b3J0aCB0aGUgZXh0cmEgY29tcGxpY2F0aW9uLgorCQkg Ki8KKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogLyoKICAqIGNvbnZlcnRfRVhJU1RTX3N1Ymxp bmtfdG9fam9pbjogdHJ5IHRvIGNvbnZlcnQgYW4gRVhJU1RTIFN1YkxpbmsgdG8gYSBqb2luCiAg KgotICogVGhlIEFQSSBvZiB0aGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBjb252ZXJ0X0FO WV9zdWJsaW5rX3RvX2pvaW4ncywKLSAqIGV4Y2VwdCB0aGF0IHdlIGFsc28gc3VwcG9ydCB0aGUg Y2FzZSB3aGVyZSB0aGUgY2FsbGVyIGhhcyBmb3VuZCBOT1QgRVhJU1RTLAotICogc28gd2UgbmVl ZCBhbiBhZGRpdGlvbmFsIGlucHV0IHBhcmFtZXRlciAidW5kZXJfbm90Ii4KKyAqIFRoZSBBUEkg b2YgdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gY29udmVydF9BTllfc3VibGlua190b19q b2luJ3MuCiAgKi8KIEpvaW5FeHByICoKIGNvbnZlcnRfRVhJU1RTX3N1YmxpbmtfdG9fam9pbihQ bGFubmVySW5mbyAqcm9vdCwgU3ViTGluayAqc3VibGluaywKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wcmVwL3ByZXBqb2ludHJlZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3ByZXAvcHJlcGpvaW50cmVlLmMKaW5kZXggYzkwZjRiMzI3MzMuLmIyYmViMGEwZDY4IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwam9pbnRyZWUuYworKysgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwam9pbnRyZWUuYwpAQCAtODUyLDE0ICs4NTIs MTUgQEAgcHVsbF91cF9zdWJsaW5rc19xdWFsX3JlY3Vyc2UoUGxhbm5lckluZm8gKnJvb3QsIE5v ZGUgKm5vZGUsCiAJCQlpZiAoKHNhb3AgPSBjb252ZXJ0X1ZBTFVFU190b19BTlkocm9vdCwKIAkJ CQkJCQkJCQkJICBzdWJsaW5rLT50ZXN0ZXhwciwKIAkJCQkJCQkJCQkJICAoUXVlcnkgKikgc3Vi bGluay0+c3Vic2VsZWN0KSkgIT0gTlVMTCkKLQorCQkJewogCQkJCS8qCiAJCQkJICogVGhlIFZB TFVFUyBzZXF1ZW5jZSB3YXMgc2ltcGxpZmllZC4gIE5vdGhpbmcgbW9yZSB0byBkbwogCQkJCSAq IGhlcmUuCiAJCQkJICovCiAJCQkJcmV0dXJuIChOb2RlICopIHNhb3A7CisJCQl9CiAKLQkJCWlm ICgoaiA9IGNvbnZlcnRfQU5ZX3N1YmxpbmtfdG9fam9pbihyb290LCBzdWJsaW5rLAorCQkJaWYg KChqID0gY29udmVydF9BTllfc3VibGlua190b19qb2luKHJvb3QsIHN1YmxpbmssIGZhbHNlLAog CQkJCQkJCQkJCQkJIGF2YWlsYWJsZV9yZWxzMSkpICE9IE5VTEwpCiAJCQl7CiAJCQkJLyogWWVz OyBpbnNlcnQgdGhlIG5ldyBqb2luIG5vZGUgaW50byB0aGUgam9pbiB0cmVlICovCkBAIC04ODUs NyArODg2LDcgQEAgcHVsbF91cF9zdWJsaW5rc19xdWFsX3JlY3Vyc2UoUGxhbm5lckluZm8gKnJv b3QsIE5vZGUgKm5vZGUsCiAJCQkJcmV0dXJuIE5VTEw7CiAJCQl9CiAJCQlpZiAoYXZhaWxhYmxl X3JlbHMyICE9IE5VTEwgJiYKLQkJCQkoaiA9IGNvbnZlcnRfQU5ZX3N1YmxpbmtfdG9fam9pbihy b290LCBzdWJsaW5rLAorCQkJCShqID0gY29udmVydF9BTllfc3VibGlua190b19qb2luKHJvb3Qs IHN1YmxpbmssIGZhbHNlLAogCQkJCQkJCQkJCQkJIGF2YWlsYWJsZV9yZWxzMikpICE9IE5VTEwp CiAJCQl7CiAJCQkJLyogWWVzOyBpbnNlcnQgdGhlIG5ldyBqb2luIG5vZGUgaW50byB0aGUgam9p biB0cmVlICovCkBAIC05NzAsMTQgKzk3MSw2OCBAQCBwdWxsX3VwX3N1YmxpbmtzX3F1YWxfcmVj dXJzZShQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAqbm9kZSwKIAl9CiAJaWYgKGlzX25vdGNsYXVz ZShub2RlKSkKIAl7Ci0JCS8qIElmIHRoZSBpbW1lZGlhdGUgYXJndW1lbnQgb2YgTk9UIGlzIEVY SVNUUywgdHJ5IHRvIGNvbnZlcnQgKi8KKwkJLyogSWYgdGhlIGltbWVkaWF0ZSBhcmd1bWVudCBv ZiBOT1QgaXMgQU5ZIG9yIEVYSVNUUywgdHJ5IHRvIGNvbnZlcnQgKi8KIAkJU3ViTGluayAgICAq c3VibGluayA9IChTdWJMaW5rICopIGdldF9ub3RjbGF1c2VhcmcoKEV4cHIgKikgbm9kZSk7CiAJ CUpvaW5FeHByICAgKmo7CiAJCVJlbGlkcwkJY2hpbGRfcmVsczsKIAogCQlpZiAoc3VibGluayAm JiBJc0Eoc3VibGluaywgU3ViTGluaykpCiAJCXsKLQkJCWlmIChzdWJsaW5rLT5zdWJMaW5rVHlw ZSA9PSBFWElTVFNfU1VCTElOSykKKwkJCWlmIChzdWJsaW5rLT5zdWJMaW5rVHlwZSA9PSBBTllf U1VCTElOSykKKwkJCXsKKwkJCQlpZiAoKGogPSBjb252ZXJ0X0FOWV9zdWJsaW5rX3RvX2pvaW4o cm9vdCwgc3VibGluaywgdHJ1ZSwKKwkJCQkJCQkJCQkJCQkgYXZhaWxhYmxlX3JlbHMxKSkgIT0g TlVMTCkKKwkJCQl7CisJCQkJCS8qIFllczsgaW5zZXJ0IHRoZSBuZXcgam9pbiBub2RlIGludG8g dGhlIGpvaW4gdHJlZSAqLworCQkJCQlqLT5sYXJnID0gKmp0bGluazE7CisJCQkJCSpqdGxpbmsx ID0gKE5vZGUgKikgajsKKwkJCQkJLyogUmVjdXJzaXZlbHkgcHJvY2VzcyBwdWxsZWQtdXAgam9p bnRyZWUgbm9kZXMgKi8KKwkJCQkJai0+cmFyZyA9IHB1bGxfdXBfc3VibGlua3Nfam9pbnRyZWVf cmVjdXJzZShyb290LAorCQkJCQkJCQkJCQkJCQkJCWotPnJhcmcsCisJCQkJCQkJCQkJCQkJCQkJ JmNoaWxkX3JlbHMpOworCisJCQkJCS8qCisJCQkJCSAqIE5vdyByZWN1cnNpdmVseSBwcm9jZXNz IHRoZSBwdWxsZWQtdXAgcXVhbHMuICBCZWNhdXNlCisJCQkJCSAqIHdlIGFyZSB1bmRlcm5lYXRo IGEgTk9ULCB3ZSBjYW4ndCBwdWxsIHVwIHN1YmxpbmtzIHRoYXQKKwkJCQkJICogcmVmZXJlbmNl IHRoZSBsZWZ0LWhhbmQgc3R1ZmYsIGJ1dCBpdCdzIHN0aWxsIG9rYXkgdG8KKwkJCQkJICogcHVs bCB1cCBzdWJsaW5rcyByZWZlcmVuY2luZyBqLT5yYXJnLgorCQkJCQkgKi8KKwkJCQkJai0+cXVh bHMgPSBwdWxsX3VwX3N1YmxpbmtzX3F1YWxfcmVjdXJzZShyb290LAorCQkJCQkJCQkJCQkJCQkJ IGotPnF1YWxzLAorCQkJCQkJCQkJCQkJCQkJICZqLT5yYXJnLAorCQkJCQkJCQkJCQkJCQkJIGNo aWxkX3JlbHMsCisJCQkJCQkJCQkJCQkJCQkgTlVMTCwgTlVMTCk7CisJCQkJCS8qIFJldHVybiBO VUxMIHJlcHJlc2VudGluZyBjb25zdGFudCBUUlVFICovCisJCQkJCXJldHVybiBOVUxMOworCQkJ CX0KKwkJCQlpZiAoYXZhaWxhYmxlX3JlbHMyICE9IE5VTEwgJiYKKwkJCQkJKGogPSBjb252ZXJ0 X0FOWV9zdWJsaW5rX3RvX2pvaW4ocm9vdCwgc3VibGluaywgdHJ1ZSwKKwkJCQkJCQkJCQkJCQkg YXZhaWxhYmxlX3JlbHMyKSkgIT0gTlVMTCkKKwkJCQl7CisJCQkJCS8qIFllczsgaW5zZXJ0IHRo ZSBuZXcgam9pbiBub2RlIGludG8gdGhlIGpvaW4gdHJlZSAqLworCQkJCQlqLT5sYXJnID0gKmp0 bGluazI7CisJCQkJCSpqdGxpbmsyID0gKE5vZGUgKikgajsKKwkJCQkJLyogUmVjdXJzaXZlbHkg cHJvY2VzcyBwdWxsZWQtdXAgam9pbnRyZWUgbm9kZXMgKi8KKwkJCQkJai0+cmFyZyA9IHB1bGxf dXBfc3VibGlua3Nfam9pbnRyZWVfcmVjdXJzZShyb290LAorCQkJCQkJCQkJCQkJCQkJCWotPnJh cmcsCisJCQkJCQkJCQkJCQkJCQkJJmNoaWxkX3JlbHMpOworCisJCQkJCS8qCisJCQkJCSAqIE5v dyByZWN1cnNpdmVseSBwcm9jZXNzIHRoZSBwdWxsZWQtdXAgcXVhbHMuICBCZWNhdXNlCisJCQkJ CSAqIHdlIGFyZSB1bmRlcm5lYXRoIGEgTk9ULCB3ZSBjYW4ndCBwdWxsIHVwIHN1YmxpbmtzIHRo YXQKKwkJCQkJICogcmVmZXJlbmNlIHRoZSBsZWZ0LWhhbmQgc3R1ZmYsIGJ1dCBpdCdzIHN0aWxs IG9rYXkgdG8KKwkJCQkJICogcHVsbCB1cCBzdWJsaW5rcyByZWZlcmVuY2luZyBqLT5yYXJnLgor CQkJCQkgKi8KKwkJCQkJai0+cXVhbHMgPSBwdWxsX3VwX3N1YmxpbmtzX3F1YWxfcmVjdXJzZShy b290LAorCQkJCQkJCQkJCQkJCQkJIGotPnF1YWxzLAorCQkJCQkJCQkJCQkJCQkJICZqLT5yYXJn LAorCQkJCQkJCQkJCQkJCQkJIGNoaWxkX3JlbHMsCisJCQkJCQkJCQkJCQkJCQkgTlVMTCwgTlVM TCk7CisJCQkJCS8qIFJldHVybiBOVUxMIHJlcHJlc2VudGluZyBjb25zdGFudCBUUlVFICovCisJ CQkJCXJldHVybiBOVUxMOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKHN1YmxpbmstPnN1Ykxp bmtUeXBlID09IEVYSVNUU19TVUJMSU5LKQogCQkJewogCQkJCWlmICgoaiA9IGNvbnZlcnRfRVhJ U1RTX3N1YmxpbmtfdG9fam9pbihyb290LCBzdWJsaW5rLCB0cnVlLAogCQkJCQkJCQkJCQkJCQlh dmFpbGFibGVfcmVsczEpKSAhPSBOVUxMKQpAQCAtMzcwNiw2ICszNzYxLDEzIEBAIGhhc19ub3Ru dWxsX2ZvcmNlZF92YXIoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmZvcmNlZF9udWxsX3ZhcnMs CiAKIAkJcnRlID0gcnRfZmV0Y2godmFybm8sIHJvb3QtPnBhcnNlLT5ydGFibGUpOwogCisJCS8q IFdlIGNhbiBvbmx5IHJlYXNvbiBhYm91dCBvcmRpbmFyeSByZWxhdGlvbnMgKi8KKwkJaWYgKHJ0 ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04pCisJCXsKKwkJCWJtc19mcmVlKGZvcmNlZG51bGxh dHRudW1zKTsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJLyoKIAkJICogV2UgbXVzdCBza2lwIGlu aGVyaXRhbmNlIHBhcmVudCB0YWJsZXMsIGFzIHNvbWUgY2hpbGQgdGFibGVzIG1heQogCQkgKiBo YXZlIGEgTk9UIE5VTEwgY29uc3RyYWludCBmb3IgYSBjb2x1bW4gd2hpbGUgb3RoZXJzIG1heSBu b3QuICBUaGlzCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2Vz LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMKaW5kZXggNTA0YTMwZDg4 MzYuLjA5MDZiMDI0MDg4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9j bGF1c2VzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jCkBAIC0y MSw2ICsyMSw3IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVk ZSAiY2F0YWxvZy9wZ19jbGFzcy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfaW5oZXJpdHMuaCIK ICNpbmNsdWRlICJjYXRhbG9nL3BnX2xhbmd1YWdlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19v cGVyYXRvci5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfcHJvYy5oIgpAQCAtMTEyLDYgKzExMyw3 IEBAIHN0YXRpYyBib29sIGNvbnRhaW5fY29udGV4dF9kZXBlbmRlbnRfbm9kZV93YWxrZXIoTm9k ZSAqbm9kZSwgaW50ICpmbGFncyk7CiBzdGF0aWMgYm9vbCBjb250YWluX2xlYWtlZF92YXJzX3dh bGtlcihOb2RlICpub2RlLCB2b2lkICpjb250ZXh0KTsKIHN0YXRpYyBSZWxpZHMgZmluZF9ub25u dWxsYWJsZV9yZWxzX3dhbGtlcihOb2RlICpub2RlLCBib29sIHRvcF9sZXZlbCk7CiBzdGF0aWMg TGlzdCAqZmluZF9ub25udWxsYWJsZV92YXJzX3dhbGtlcihOb2RlICpub2RlLCBib29sIHRvcF9s ZXZlbCk7CitzdGF0aWMgdm9pZCBmaW5kX3N1YnF1ZXJ5X3NhZmVfcXVhbHMoTm9kZSAqanRub2Rl LCBMaXN0ICoqc2FmZV9xdWFscyk7CiBzdGF0aWMgYm9vbCBpc19zdHJpY3Rfc2FvcChTY2FsYXJB cnJheU9wRXhwciAqZXhwciwgYm9vbCBmYWxzZU9LKTsKIHN0YXRpYyBib29sIGNvbnZlcnRfc2Fv cF90b19oYXNoZWRfc2FvcF93YWxrZXIoTm9kZSAqbm9kZSwgdm9pZCAqY29udGV4dCk7CiBzdGF0 aWMgTm9kZSAqZXZhbF9jb25zdF9leHByZXNzaW9uc19tdXRhdG9yKE5vZGUgKm5vZGUsCkBAIC0x NDMzLDYgKzE0MzUsMTAgQEAgY29udGFpbl9sZWFrZWRfdmFyc193YWxrZXIoTm9kZSAqbm9kZSwg dm9pZCAqY29udGV4dCkKIAkJCQkJCQkJICBjb250ZXh0KTsKIH0KIAorLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCisgKgkJICBOdWxsYWJpbGl0eSBhbmFseXNpcworICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LworCiAvKgogICogZmluZF9ub25udWxsYWJsZV9yZWxzCiAgKgkJRGV0ZXJtaW5lIHdoaWNoIGJh c2UgcmVscyBhcmUgZm9yY2VkIG5vbm51bGxhYmxlIGJ5IGdpdmVuIGNsYXVzZS4KQEAgLTE3MDEs NyArMTcwNyw3IEBAIGZpbmRfbm9ubnVsbGFibGVfcmVsc193YWxrZXIoTm9kZSAqbm9kZSwgYm9v bCB0b3BfbGV2ZWwpCiAgKiBidXQgaGVyZSB3ZSBhc3N1bWUgdGhhdCB0aGUgaW5wdXQgaXMgYSBC b29sZWFuIGV4cHJlc3Npb24sIGFuZCB3aXNoIHRvCiAgKiBzZWUgaWYgTlVMTCBpbnB1dHMgd2ls bCBwcm92YWJseSBjYXVzZSBhIEZBTFNFLW9yLU5VTEwgcmVzdWx0LiAgV2UgZXhwZWN0CiAgKiB0 aGUgZXhwcmVzc2lvbiB0byBoYXZlIGJlZW4gQU5EL09SIGZsYXR0ZW5lZCBhbmQgY29udmVydGVk IHRvIGltcGxpY2l0LUFORAotICogZm9ybWF0LgorICogZm9ybWF0IChidXQgdGhlIHJlc3VsdHMg YXJlIHN0aWxsIGdvb2QgaWYgaXQgd2Fzbid0IEFORC9PUiBmbGF0dGVuZWQpLgogICoKICAqIEF0 dG5vcyBvZiB0aGUgaWRlbnRpZmllZCBWYXJzIGFyZSByZXR1cm5lZCBpbiBhIG11bHRpYml0bWFw c2V0IChhIExpc3Qgb2YKICAqIEJpdG1hcHNldHMpLiAgTGlzdCBpbmRleGVzIGNvcnJlc3BvbmQg dG8gcmVsaWRzICh2YXJub3MpLCB3aGlsZSB0aGUgcGVyLXJlbApAQCAtMjAyMSw2ICsyMDI3LDIz MCBAQCBmaW5kX2ZvcmNlZF9udWxsX3ZhcihOb2RlICpub2RlKQogCXJldHVybiBOVUxMOwogfQog CisvKgorICogcXVlcnlfb3V0cHV0c19hcmVfbm90X251bGxhYmxlCisgKgkJUmV0dXJucyBUUlVF IGlmIHRoZSBvdXRwdXQgdmFsdWVzIG9mIHRoZSBRdWVyeSBhcmUgY2VydGFpbmx5IG5vdCBOVUxM LgorICoJCUFsbCBvdXRwdXQgY29sdW1ucyBtdXN0IHJldHVybiBub24tTlVMTCB0byBhbnN3ZXIg VFJVRS4KKyAqCisgKiBUaGUgcmVhc29uIHRoaXMgdGFrZXMgYSBRdWVyeSwgYW5kIG5vdCBqdXN0 IGFuIGluZGl2aWR1YWwgdGxpc3QgZXhwcmVzc2lvbiwKKyAqIGlzIHNvIHRoYXQgd2UgY2FuIG1h a2UgdXNlIG9mIHRoZSBxdWVyeSdzIFdIRVJFL09OIGNsYXVzZXMgdG8gcHJvdmUgaXQgZG9lcwor ICogbm90IHJldHVybiBudWxscy4KKyAqCisgKiBJbiBjdXJyZW50IHVzYWdlLCB0aGUgcGFzc2Vk IHN1Yi1RdWVyeSBoYXNuJ3QgeWV0IGJlZW4gdGhyb3VnaCBhbnkgcGxhbm5lcgorICogcHJvY2Vz c2luZy4gIFRoaXMgbWVhbnMgdGhhdCBhcHBseWluZyBmaW5kX25vbm51bGxhYmxlX3ZhcnMoKSB0 byBpdHMgV0hFUkUKKyAqIGNsYXVzZXMgaXNuJ3QgcmVhbGx5IGlkZWFsOiBmb3IgbGFjayBvZiBj b25zdC1zaW1wbGlmaWNhdGlvbiwgd2UgbWlnaHQgYmUKKyAqIHVuYWJsZSB0byBwcm92ZSBub3Qt bnVsbG5lc3MgaW4gc29tZSBjYXNlcyB3aGVyZSB3ZSBjb3VsZCBoYXZlIHByb3ZlZCBpdAorICog YWZ0ZXJ3YXJkcy4gIEhvd2V2ZXIsIHdlIHNob3VsZCBub3QgZ2V0IGFueSBmYWxzZSBwb3NpdGl2 ZSByZXN1bHRzLgorICoKKyAqIExpa2UgdGhlIG90aGVyIGZvcm1zIG9mIG51bGxhYmlsaXR5IGFu YWx5c2lzIGFib3ZlLCB3ZSBjYW4gZXJyIG9uIHRoZQorICogc2lkZSBvZiBjb25zZXJ2YXRpc206 IGlmIHdlJ3JlIG5vdCBzdXJlLCBpdCdzIG9rYXkgdG8gcmV0dXJuIEZBTFNFLgorICovCitib29s CitxdWVyeV9vdXRwdXRzX2FyZV9ub3RfbnVsbGFibGUoUXVlcnkgKnF1ZXJ5KQoreworCVBsYW5u ZXJJbmZvIHN1YnJvb3Q7CisJTGlzdAkgICAqc2FmZV9xdWFscyA9IE5JTDsKKwlMaXN0CSAgICpu b25udWxsYWJsZV92YXJzID0gTklMOworCWJvb2wJCWNvbXB1dGVkX25vbm51bGxhYmxlX3ZhcnMg PSBmYWxzZTsKKwlMaXN0Q2VsbCAgICp0bDsKKworCS8qCisJICogSWYgdGhlIHF1ZXJ5IGNvbnRh aW5zIHNldCBvcGVyYXRpb25zLCBwdW50LiAgVGhlIHNldCBvcHMgdGhlbXNlbHZlcworCSAqIGNv dWxkbid0IGludHJvZHVjZSBudWxscyB0aGF0IHdlcmVuJ3QgaW4gdGhlaXIgaW5wdXRzLCBidXQg dGhlIHRsaXN0CisJICogcHJlc2VudCBpbiB0aGUgdG9wLWxldmVsIHF1ZXJ5IGlzIGp1c3QgZHVt bXkgYW5kIHdvbid0IGdpdmUgdXMgdXNlZnVsCisJICogaW5mby4gIFdlIGNvdWxkIGdldCBhbiBh bnN3ZXIgYnkgcmVjdXJzaW5nIHRvIGV4YW1pbmUgZWFjaCBsZWFmIHF1ZXJ5LAorCSAqIGJ1dCBm b3IgdGhlIG1vbWVudCBpdCBkb2Vzbid0IHNlZW0gd29ydGggdGhlIGV4dHJhIGNvbXBsaWNhdGlv bi4KKwkgKi8KKwlpZiAocXVlcnktPnNldE9wZXJhdGlvbnMpCisJCXJldHVybiBmYWxzZTsKKwor CS8qCisJICogSWYgdGhlIHF1ZXJ5IGNvbnRhaW5zIGdyb3VwaW5nIHNldHMsIHB1bnQuICBHcm91 cGluZyBzZXRzIGNhbiBpbnRyb2R1Y2UKKwkgKiBOVUxMIHZhbHVlcywgYW5kIHdlIGN1cnJlbnRs eSBsYWNrIHRoZSBQbGFubmVySW5mbyBuZWVkZWQgdG8gZmxhdHRlbgorCSAqIGdyb3VwaW5nIFZh cnMgaW4gdGhlIHF1ZXJ5J3Mgb3V0cHV0cy4KKwkgKi8KKwlpZiAocXVlcnktPmdyb3VwaW5nU2V0 cykKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBXZSBuZWVkIGEgUGxhbm5lckluZm8gdG8g cGFzcyB0byBleHByX2lzX25vbm51bGxhYmxlLiAgRm9ydHVuYXRlbHksIHdlCisJICogY2FuIGNv bnMgdXAgYW4gZW50aXJlbHkgZHVtbXkgb25lLCBiZWNhdXNlIG9ubHkgdGhlICJwYXJzZSIgbGlu ayBpbiB0aGUKKwkgKiBzdHJ1Y3QgaXMgdXNlZCBieSBleHByX2lzX25vbm51bGxhYmxlLgorCSAq LworCU1lbVNldCgmc3Vicm9vdCwgMCwgc2l6ZW9mKHN1YnJvb3QpKTsKKwlzdWJyb290LnBhcnNl ID0gcXVlcnk7CisKKwkvKgorCSAqIEV4YW1pbmUgZWFjaCB0YXJnZXRsaXN0IGVudHJ5IHRvIHBy b3ZlIHRoYXQgaXQgY2FuJ3QgcHJvZHVjZSBOVUxMLgorCSAqLworCWZvcmVhY2godGwsIHF1ZXJ5 LT50YXJnZXRMaXN0KQorCXsKKwkJVGFyZ2V0RW50cnkgKnRsZSA9IChUYXJnZXRFbnRyeSAqKSBs Zmlyc3QodGwpOworCQlFeHByCSAgICpleHByID0gdGxlLT5leHByOworCisJCS8qIFJlc2p1bmsg Y29sdW1ucyBjYW4gYmUgaWdub3JlZDogdGhleSBkb24ndCBwcm9kdWNlIG91dHB1dCB2YWx1ZXMg Ki8KKwkJaWYgKHRsZS0+cmVzanVuaykKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIExvb2sg dGhyb3VnaCBiaW5hcnkgcmVsYWJlbGluZ3MsIHNpbmNlIHdlIGtub3cgdGhvc2UgZG9uJ3QKKwkJ ICogaW50cm9kdWNlIG51bGxzLgorCQkgKi8KKwkJd2hpbGUgKGV4cHIgJiYgSXNBKGV4cHIsIFJl bGFiZWxUeXBlKSkKKwkJCWV4cHIgPSAoKFJlbGFiZWxUeXBlICopIGV4cHIpLT5hcmc7CisKKwkJ aWYgKGV4cHIgPT0gTlVMTCkJCS8qIHBhcmFub2lhICovCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJ LyoKKwkJICogU2luY2UgdGhlIHN1YnF1ZXJ5IGhhc24ndCB5ZXQgYmVlbiB0aHJvdWdoIGV4cHJl c3Npb24KKwkJICogcHJlcHJvY2Vzc2luZywgd2UgbXVzdCBhcHBseSBmbGF0dGVuX2pvaW5fYWxp YXNfdmFycyB0byB0aGUgZ2l2ZW4KKwkJICogZXhwcmVzc2lvbiwgYW5kIHRvIHRoZSBxdWFscyBm b3VuZCBieSBmaW5kX3N1YnF1ZXJ5X3NhZmVfcXVhbHMsIHRvCisJCSAqIGF2b2lkIGJlaW5nIGZv b2xlZCBieSBqb2luIGFsaWFzZXMuCisJCSAqCisJCSAqIFdlIHdvbid0IGJlIGRlYWxpbmcgd2l0 aCBhcmJpdHJhcnkgZXhwcmVzc2lvbnMsIHNvIGl0J3Mgc2FmZSB0byB1c2UKKwkJICogTlVMTCBh cyB0aGUgcm9vdCwgc28gbG9uZyBhcyBhZGp1c3Rfc3RhbmRhcmRfam9pbl9hbGlhc19leHByZXNz aW9uCisJCSAqIGNhbiBoYW5kbGUgZXZlcnl0aGluZyB0aGUgcGFyc2VyIHdvdWxkIG1ha2UgYXMg YSBqb2luIGFsaWFzCisJCSAqIGV4cHJlc3Npb24uCisJCSAqLworCQlleHByID0gKEV4cHIgKikg ZmxhdHRlbl9qb2luX2FsaWFzX3ZhcnMoTlVMTCwgcXVlcnksIChOb2RlICopIGV4cHIpOworCisJ CS8qCisJCSAqIFNpbWlsYXJseSwgd2UgbXVzdCBhcHBseSBmbGF0dGVuX2dyb3VwX2V4cHJzIHRv IHRoZSBnaXZlbgorCQkgKiBleHByZXNzaW9uIHRvIGF2b2lkIGJlaW5nIGZvb2xlZCBieSBncm91 cGluZyBWYXJzLiAgV2UgZG8gbm90IG5lZWQKKwkJICogdG8gYXBwbHkgZmxhdHRlbl9ncm91cF9l eHBycyB0byB0aGUgcXVhbHMgZm91bmQgYnkKKwkJICogZmluZF9zdWJxdWVyeV9zYWZlX3F1YWxz IHRob3VnaCwgYXMgZ3JvdXBpbmcgVmFycyBjYW5ub3QgYXBwZWFyIGluCisJCSAqIGpvaW50cmVl IHF1YWxzLgorCQkgKgorCQkgKiBXZSBoYXZlIHZlcmlmaWVkIHRoYXQgdGhlIHF1ZXJ5IGRvZXMg bm90IGNvbnRhaW4gZ3JvdXBpbmcgc2V0cywgc28KKwkJICogaXQncyBzYWZlIHRvIHVzZSBOVUxM IGFzIHRoZSByb290IGhlcmUuCisJCSAqLworCQlleHByID0gKEV4cHIgKikgZmxhdHRlbl9ncm91 cF9leHBycyhOVUxMLCBxdWVyeSwgKE5vZGUgKikgZXhwcik7CisKKwkJLyoKKwkJICogQ2hlY2sg dG8gc2VlIGlmIHRoZSBleHByIGNhbm5vdCBiZSBOVUxMLiAgU2luY2Ugd2UncmUgb24gYSByYXcK KwkJICogcGFyc2UgdHJlZSwgd2UgbmVlZCB0byBsb29rIHVwIHRoZSBub3QtbnVsbCBjb25zdHJh aW50cyBmcm9tIHRoZQorCQkgKiBzeXN0ZW0gY2F0YWxvZ3MuCisJCSAqLworCQlpZiAoZXhwcl9p c19ub25udWxsYWJsZSgmc3Vicm9vdCwgZXhwciwgTk9UTlVMTF9TT1VSQ0VfU1lTQ0FDSEUpKQor CQkJY29udGludWU7CisKKwkJaWYgKElzQShleHByLCBWYXIpKQorCQl7CisJCQlWYXIJCSAgICp2 YXIgPSAoVmFyICopIGV4cHI7CisKKwkJCS8qCisJCQkgKiBGb3IgYSBwbGFpbiBWYXIsIGV2ZW4g aWYgdGhhdCBkaWRuJ3Qgd29yaywgd2UgY2FuIGNvbmNsdWRlIHRoYXQKKwkJCSAqIHRoZSBWYXIg aXMgbm90IG51bGxhYmxlIGlmIGZpbmRfbm9ubnVsbGFibGVfdmFycyBjYW4gZmluZCBhCisJCQkg KiAidmFyIElTIE5PVCBOVUxMIiBvciBzaW1pbGFybHkgc3RyaWN0IGNvbmRpdGlvbiBhbW9uZyB0 aGUgcXVhbHMKKwkJCSAqIG9uIG5vbi1vdXRlcmpvaW5lZC1yZWxzLiAgQ29tcHV0ZSB0aGUgbGlz dCBvZiBWYXJzIGhhdmluZyBzdWNoCisJCQkgKiBxdWFscyBpZiB3ZSBkaWRuJ3QgYWxyZWFkeS4K KwkJCSAqLworCQkJaWYgKCFjb21wdXRlZF9ub25udWxsYWJsZV92YXJzKQorCQkJeworCQkJCWZp bmRfc3VicXVlcnlfc2FmZV9xdWFscygoTm9kZSAqKSBxdWVyeS0+am9pbnRyZWUsICZzYWZlX3F1 YWxzKTsKKwkJCQlzYWZlX3F1YWxzID0gKExpc3QgKikKKwkJCQkJZmxhdHRlbl9qb2luX2FsaWFz X3ZhcnMoTlVMTCwgcXVlcnksIChOb2RlICopIHNhZmVfcXVhbHMpOworCQkJCW5vbm51bGxhYmxl X3ZhcnMgPSBmaW5kX25vbm51bGxhYmxlX3ZhcnMoKE5vZGUgKikgc2FmZV9xdWFscyk7CisJCQkJ Y29tcHV0ZWRfbm9ubnVsbGFibGVfdmFycyA9IHRydWU7CisJCQl9CisKKwkJCWlmICghbWJtc19p c19tZW1iZXIodmFyLT52YXJubywKKwkJCQkJCQkJdmFyLT52YXJhdHRubyAtIEZpcnN0TG93SW52 YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIsCisJCQkJCQkJCW5vbm51bGxhYmxlX3ZhcnMpKQorCQkJ CXJldHVybiBmYWxzZTsJLyogd2UgZmFpbGVkIHRvIHByb3ZlIHRoZSBWYXIgbm9uLW51bGwgKi8K KwkJfQorCQllbHNlCisJCXsKKwkJCS8qIFB1bnQgb3RoZXJ3aXNlICovCisJCQlyZXR1cm4gZmFs c2U7CisJCX0KKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIGZpbmRfc3VicXVlcnlf c2FmZV9xdWFscworICoJCVRyYXZlcnNlIGpvaW50cmVlIHRvIGxvY2F0ZSBxdWFscyBvbiBub24t b3V0ZXJqb2luZWQtcmVscy4KKyAqCisgKiBXZSBsb2NhdGUgYWxsIFdIRVJFIGFuZCBKT0lOL09O IHF1YWxzIHRoYXQgY29uc3RyYWluIHRoZSByZWxzIHRoYXQgYXJlIG5vdAorICogYmVsb3cgdGhl IG51bGxhYmxlIHNpZGUgb2YgYW55IG91dGVyIGpvaW4sIGFuZCBhZGQgdGhlbSB0byB0aGUgKnNh ZmVfcXVhbHMKKyAqIGxpc3QgKGZvcm1pbmcgYSBsaXN0IHdpdGggaW1wbGljaXQtQU5EIHNlbWFu dGljcykuICBUaGVzZSBxdWFscyBjYW4gYmUgdXNlZAorICogdG8gcHJvdmUgbm9uLW51bGxhYmls aXR5IG9mIHRoZSBzdWJxdWVyeSdzIG91dHB1dHMuCisgKgorICogVG9wLWxldmVsIGNhbGxlciBt dXN0IGluaXRpYWxpemUgKnNhZmVfcXVhbHMgdG8gTklMLgorICovCitzdGF0aWMgdm9pZAorZmlu ZF9zdWJxdWVyeV9zYWZlX3F1YWxzKE5vZGUgKmp0bm9kZSwgTGlzdCAqKnNhZmVfcXVhbHMpCit7 CisJaWYgKGp0bm9kZSA9PSBOVUxMKQorCQlyZXR1cm47CisJaWYgKElzQShqdG5vZGUsIFJhbmdl VGJsUmVmKSkKKwl7CisJCS8qIExlYWYgbm9kZTogbm90aGluZyB0byBkbyAqLworCQlyZXR1cm47 CisJfQorCWVsc2UgaWYgKElzQShqdG5vZGUsIEZyb21FeHByKSkKKwl7CisJCUZyb21FeHByICAg KmYgPSAoRnJvbUV4cHIgKikganRub2RlOworCQlMaXN0Q2VsbCAgICpsYzsKKworCQkvKiBBbGwg ZWxlbWVudHMgb2YgdGhlIEZST00gbGlzdCBhcmUgYWxsb3dhYmxlICovCisJCWZvcmVhY2gobGMs IGYtPmZyb21saXN0KQorCQkJZmluZF9zdWJxdWVyeV9zYWZlX3F1YWxzKChOb2RlICopIGxmaXJz dChsYyksIHNhZmVfcXVhbHMpOworCQkvKiAuLi4gYW5kIGl0cyBXSEVSRSBxdWFscyBhcmUgdG9v ICovCisJCWlmIChmLT5xdWFscykKKwkJCSpzYWZlX3F1YWxzID0gbGFwcGVuZCgqc2FmZV9xdWFs cywgZi0+cXVhbHMpOworCX0KKwllbHNlIGlmIChJc0EoanRub2RlLCBKb2luRXhwcikpCisJewor CQlKb2luRXhwciAgICpqID0gKEpvaW5FeHByICopIGp0bm9kZTsKKworCQlzd2l0Y2ggKGotPmpv aW50eXBlKQorCQl7CisJCQljYXNlIEpPSU5fSU5ORVI6CisJCQkJLyogdmlzaXQgYm90aCBjaGls ZHJlbiAqLworCQkJCWZpbmRfc3VicXVlcnlfc2FmZV9xdWFscyhqLT5sYXJnLCBzYWZlX3F1YWxz KTsKKwkJCQlmaW5kX3N1YnF1ZXJ5X3NhZmVfcXVhbHMoai0+cmFyZywgc2FmZV9xdWFscyk7CisJ CQkJLyogYW5kIGdyYWIgdGhlIE9OIHF1YWxzIHRvbyAqLworCQkJCWlmIChqLT5xdWFscykKKwkJ CQkJKnNhZmVfcXVhbHMgPSBsYXBwZW5kKCpzYWZlX3F1YWxzLCBqLT5xdWFscyk7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgSk9JTl9MRUZUOgorCQkJY2FzZSBKT0lOX1NFTUk6CisJCQljYXNlIEpP SU5fQU5USToKKworCQkJCS8qCisJCQkJICogT25seSB0aGUgbGVmdCBpbnB1dCBpcyBwb3NzaWJs eSBub24tbnVsbGFibGU7IGZ1cnRoZXJtb3JlLAorCQkJCSAqIHRoZSBxdWFscyBvZiB0aGlzIGpv aW4gZG9uJ3QgY29uc3RyYWluIHRoZSBsZWZ0IGlucHV0LgorCQkJCSAqIE5vdGU6IHdlIHByb2Jh Ymx5IGNhbid0IHNlZSBTRU1JIG9yIEFOVEkgam9pbnMgYXQgdGhpcworCQkJCSAqIHBvaW50LCBi dXQgaWYgd2UgZG8sIHdlIGNhbiB0cmVhdCB0aGVtIGxpa2UgTEVGVCBqb2lucy4KKwkJCQkgKi8K KwkJCQlmaW5kX3N1YnF1ZXJ5X3NhZmVfcXVhbHMoai0+bGFyZywgc2FmZV9xdWFscyk7CisJCQkJ YnJlYWs7CisKKwkJCWNhc2UgSk9JTl9SSUdIVDoKKwkJCQkvKiBSZXZlcnNlIG9mIHRoZSBhYm92 ZSBjYXNlICovCisJCQkJZmluZF9zdWJxdWVyeV9zYWZlX3F1YWxzKGotPnJhcmcsIHNhZmVfcXVh bHMpOworCQkJCWJyZWFrOworCisJCQljYXNlIEpPSU5fRlVMTDoKKwkJCQkvKiBOZWl0aGVyIHNp ZGUgaXMgbm9uLW51bGxhYmxlLCBzbyBzdG9wIGRlc2NlbmRpbmcgKi8KKwkJCQlicmVhazsKKwor CQkJZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGpvaW4gdHlwZTogJWQi LAorCQkJCQkgKGludCkgai0+am9pbnR5cGUpOworCQkJCWJyZWFrOworCQl9CisJfQorCWVsc2UK KwkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBub2RlIHR5cGU6ICVkIiwKKwkJCSAoaW50KSBu b2RlVGFnKGp0bm9kZSkpOworfQorCiAvKgogICogQ2FuIHdlIHRyZWF0IGEgU2NhbGFyQXJyYXlP cEV4cHIgYXMgc3RyaWN0PwogICoKQEAgLTI3MzksNyArMjk2OSw4IEBAIGV2YWxfY29uc3RfZXhw cmVzc2lvbnNfbXV0YXRvcihOb2RlICpub2RlLAogCiAJCQkJCQlpZiAoIWhhc19udWxsYWJsZV9u b25jb25zdCAmJgogCQkJCQkJCSFleHByX2lzX25vbm51bGxhYmxlKGNvbnRleHQtPnJvb3QsCi0J CQkJCQkJCQkJCQkgKEV4cHIgKikgbGZpcnN0KGFyZyksIGZhbHNlKSkKKwkJCQkJCQkJCQkJCSAo RXhwciAqKSBsZmlyc3QoYXJnKSwKKwkJCQkJCQkJCQkJCSBOT1ROVUxMX1NPVVJDRV9IQVNIVEFC TEUpKQogCQkJCQkJCWhhc19udWxsYWJsZV9ub25jb25zdCA9IHRydWU7CiAJCQkJCX0KIAkJCQl9 CkBAIC0zNDE4LDcgKzM2NDksOCBAQCBldmFsX2NvbnN0X2V4cHJlc3Npb25zX211dGF0b3IoTm9k ZSAqbm9kZSwKIAkJCQkJCW5ld2FyZ3MgPSBsYXBwZW5kKG5ld2FyZ3MsIGUpOwogCQkJCQkJYnJl YWs7CiAJCQkJCX0KLQkJCQkJaWYgKGV4cHJfaXNfbm9ubnVsbGFibGUoY29udGV4dC0+cm9vdCwg KEV4cHIgKikgZSwgZmFsc2UpKQorCQkJCQlpZiAoZXhwcl9pc19ub25udWxsYWJsZShjb250ZXh0 LT5yb290LCAoRXhwciAqKSBlLAorCQkJCQkJCQkJCQlOT1ROVUxMX1NPVVJDRV9IQVNIVEFCTEUp KQogCQkJCQl7CiAJCQkJCQlpZiAobmV3YXJncyA9PSBOSUwpCiAJCQkJCQkJcmV0dXJuIGU7CS8q IGZpcnN0IGV4cHIgKi8KQEAgLTM2MTIsNyArMzg0NCw3IEBAIGV2YWxfY29uc3RfZXhwcmVzc2lv bnNfbXV0YXRvcihOb2RlICpub2RlLAogCQkJCQkJICovCiAJCQkJCQlpZiAocmVsZW0gJiYKIAkJ CQkJCQlleHByX2lzX25vbm51bGxhYmxlKGNvbnRleHQtPnJvb3QsIChFeHByICopIHJlbGVtLAot CQkJCQkJCQkJCQkJZmFsc2UpKQorCQkJCQkJCQkJCQkJTk9UTlVMTF9TT1VSQ0VfSEFTSFRBQkxF KSkKIAkJCQkJCXsKIAkJCQkJCQlpZiAobnRlc3QtPm51bGx0ZXN0dHlwZSA9PSBJU19OVUxMKQog CQkJCQkJCQlyZXR1cm4gbWFrZUJvb2xDb25zdChmYWxzZSwgZmFsc2UpOwpAQCAtMzY2NCw3ICsz ODk2LDggQEAgZXZhbF9jb25zdF9leHByZXNzaW9uc19tdXRhdG9yKE5vZGUgKm5vZGUsCiAJCQkJ CXJldHVybiBtYWtlQm9vbENvbnN0KHJlc3VsdCwgZmFsc2UpOwogCQkJCX0KIAkJCQlpZiAoIW50 ZXN0LT5hcmdpc3JvdyAmJiBhcmcgJiYKLQkJCQkJZXhwcl9pc19ub25udWxsYWJsZShjb250ZXh0 LT5yb290LCAoRXhwciAqKSBhcmcsIGZhbHNlKSkKKwkJCQkJZXhwcl9pc19ub25udWxsYWJsZShj b250ZXh0LT5yb290LCAoRXhwciAqKSBhcmcsCisJCQkJCQkJCQkJTk9UTlVMTF9TT1VSQ0VfSEFT SFRBQkxFKSkKIAkJCQl7CiAJCQkJCWJvb2wJCXJlc3VsdDsKIApAQCAtMzc0OSw3ICszOTgyLDkg QEAgZXZhbF9jb25zdF9leHByZXNzaW9uc19tdXRhdG9yKE5vZGUgKm5vZGUsCiAKIAkJCQkJcmV0 dXJuIG1ha2VCb29sQ29uc3QocmVzdWx0LCBmYWxzZSk7CiAJCQkJfQotCQkJCWlmIChhcmcgJiYg ZXhwcl9pc19ub25udWxsYWJsZShjb250ZXh0LT5yb290LCAoRXhwciAqKSBhcmcsIGZhbHNlKSkK KwkJCQlpZiAoYXJnICYmCisJCQkJCWV4cHJfaXNfbm9ubnVsbGFibGUoY29udGV4dC0+cm9vdCwg KEV4cHIgKikgYXJnLAorCQkJCQkJCQkJCU5PVE5VTExfU09VUkNFX0hBU0hUQUJMRSkpCiAJCQkJ ewogCQkJCQkvKgogCQkJCQkgKiBJZiBhcmcgaXMgcHJvdmVuIG5vbi1udWxsYWJsZSwgc2ltcGxp ZnkgdG8gYm9vbGVhbgpAQCAtNDM4NCwxNCArNDYxOSwxMSBAQCBzaW1wbGlmeV9hZ2dyZWYoQWdn cmVmICphZ2dyZWYsIGV2YWxfY29uc3RfZXhwcmVzc2lvbnNfY29udGV4dCAqY29udGV4dCkKICAq IElmIHRoZSBWYXIgaXMgZGVmaW5lZCBOT1QgTlVMTCBhbmQgbWVhbndoaWxlIGlzIG5vdCBudWxs ZWQgYnkgYW55IG91dGVyCiAgKiBqb2lucyBvciBncm91cGluZyBzZXRzLCB0aGVuIHdlIGNhbiBr bm93IHRoYXQgaXQgY2Fubm90IGJlIE5VTEwuCiAgKgotICogdXNlX3JlbF9pbmZvIGluZGljYXRl cyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFJlbE9wdEluZm8gaXMgYXZhaWxhYmxlIGZvcgot ICogdXNlLgorICogInNvdXJjZSIgc3BlY2lmaWVzIHdoZXJlIHdlIHNob3VsZCBsb29rIGZvciBO T1QgTlVMTCBwcm9vZnMuCiAgKi8KIGJvb2wKLXZhcl9pc19ub25udWxsYWJsZShQbGFubmVySW5m byAqcm9vdCwgVmFyICp2YXIsIGJvb2wgdXNlX3JlbF9pbmZvKQordmFyX2lzX25vbm51bGxhYmxl KFBsYW5uZXJJbmZvICpyb290LCBWYXIgKnZhciwgTm90TnVsbFNvdXJjZSBzb3VyY2UpCiB7Ci0J Qml0bWFwc2V0ICAqbm90bnVsbGF0dG51bXMgPSBOVUxMOwotCiAJQXNzZXJ0KElzQSh2YXIsIFZh cikpOwogCiAJLyogc2tpcCB1cHBlci1sZXZlbCBWYXJzICovCkBAIC00NDA2LDM1ICs0NjM4LDg5 IEBAIHZhcl9pc19ub25udWxsYWJsZShQbGFubmVySW5mbyAqcm9vdCwgVmFyICp2YXIsIGJvb2wg dXNlX3JlbF9pbmZvKQogCWlmICh2YXItPnZhcmF0dG5vIDwgMCkKIAkJcmV0dXJuIHRydWU7CiAK LQkvKgotCSAqIENoZWNrIGlmIHRoZSBWYXIgaXMgZGVmaW5lZCBhcyBOT1QgTlVMTC4gIFdlIHJl dHJpZXZlIHRoZSBjb2x1bW4gTk9UCi0JICogTlVMTCBjb25zdHJhaW50IGluZm9ybWF0aW9uIGZy b20gdGhlIGNvcnJlc3BvbmRpbmcgUmVsT3B0SW5mbyBpZiBpdCBpcwotCSAqIGF2YWlsYWJsZTsg b3RoZXJ3aXNlLCB3ZSBzZWFyY2ggdGhlIGhhc2ggdGFibGUgZm9yIHRoaXMgaW5mb3JtYXRpb24u Ci0JICovCi0JaWYgKHVzZV9yZWxfaW5mbykKLQl7Ci0JCVJlbE9wdEluZm8gKnJlbCA9IGZpbmRf YmFzZV9yZWwocm9vdCwgdmFyLT52YXJubyk7CisJLyogd2UgZG9uJ3QgdHJ1c3Qgd2hvbGUtcm93 IFZhcnMgKi8KKwlpZiAodmFyLT52YXJhdHRubyA9PSAwKQorCQlyZXR1cm4gZmFsc2U7CiAKLQkJ bm90bnVsbGF0dG51bXMgPSByZWwtPm5vdG51bGxhdHRudW1zOwotCX0KLQllbHNlCisJLyogQ2hl Y2sgaWYgdGhlIFZhciBpcyBkZWZpbmVkIGFzIE5PVCBOVUxMLiAqLworCXN3aXRjaCAoc291cmNl KQogCXsKLQkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gcGxhbm5lcl9ydF9mZXRjaCh2YXItPnZhcm5v LCByb290KTsKKwkJY2FzZSBOT1ROVUxMX1NPVVJDRV9SRUxPUFQ6CisJCQl7CisJCQkJLyoKKwkJ CQkgKiBXZSByZXRyaWV2ZSB0aGUgY29sdW1uIE5PVCBOVUxMIGNvbnN0cmFpbnQgaW5mb3JtYXRp b24gZnJvbQorCQkJCSAqIHRoZSBjb3JyZXNwb25kaW5nIFJlbE9wdEluZm8uCisJCQkJICovCisJ CQkJUmVsT3B0SW5mbyAqcmVsOworCQkJCUJpdG1hcHNldCAgKm5vdG51bGxhdHRudW1zOwogCi0J CS8qCi0JCSAqIFdlIG11c3Qgc2tpcCBpbmhlcml0YW5jZSBwYXJlbnQgdGFibGVzLCBhcyBzb21l IGNoaWxkIHRhYmxlcyBtYXkKLQkJICogaGF2ZSBhIE5PVCBOVUxMIGNvbnN0cmFpbnQgZm9yIGEg Y29sdW1uIHdoaWxlIG90aGVycyBtYXkgbm90LiAgVGhpcwotCQkgKiBjYW5ub3QgaGFwcGVuIHdp dGggcGFydGl0aW9uZWQgdGFibGVzLCB0aG91Z2guCi0JCSAqLwotCQlpZiAocnRlLT5pbmggJiYg cnRlLT5yZWxraW5kICE9IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCi0JCQlyZXR1cm4gZmFs c2U7CisJCQkJcmVsID0gZmluZF9iYXNlX3JlbChyb290LCB2YXItPnZhcm5vKTsKKwkJCQlub3Ru dWxsYXR0bnVtcyA9IHJlbC0+bm90bnVsbGF0dG51bXM7CiAKLQkJbm90bnVsbGF0dG51bXMgPSBm aW5kX3JlbGF0aW9uX25vdG51bGxhdHRzKHJvb3QsIHJ0ZS0+cmVsaWQpOwotCX0KKwkJCQlyZXR1 cm4gYm1zX2lzX21lbWJlcih2YXItPnZhcmF0dG5vLCBub3RudWxsYXR0bnVtcyk7CisJCQl9CisJ CWNhc2UgTk9UTlVMTF9TT1VSQ0VfSEFTSFRBQkxFOgorCQkJeworCQkJCS8qCisJCQkJICogV2Ug cmV0cmlldmUgdGhlIGNvbHVtbiBOT1QgTlVMTCBjb25zdHJhaW50IGluZm9ybWF0aW9uIGZyb20K KwkJCQkgKiB0aGUgaGFzaCB0YWJsZS4KKwkJCQkgKi8KKwkJCQlSYW5nZVRibEVudHJ5ICpydGU7 CisJCQkJQml0bWFwc2V0ICAqbm90bnVsbGF0dG51bXM7CiAKLQlpZiAodmFyLT52YXJhdHRubyA+ IDAgJiYKLQkJYm1zX2lzX21lbWJlcih2YXItPnZhcmF0dG5vLCBub3RudWxsYXR0bnVtcykpCi0J CXJldHVybiB0cnVlOworCQkJCXJ0ZSA9IHBsYW5uZXJfcnRfZmV0Y2godmFyLT52YXJubywgcm9v dCk7CisKKwkJCQkvKiBXZSBjYW4gb25seSByZWFzb24gYWJvdXQgb3JkaW5hcnkgcmVsYXRpb25z ICovCisJCQkJaWYgKHJ0ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04pCisJCQkJCXJldHVybiBm YWxzZTsKKworCQkJCS8qCisJCQkJICogV2UgbXVzdCBza2lwIGluaGVyaXRhbmNlIHBhcmVudCB0 YWJsZXMsIGFzIHNvbWUgY2hpbGQKKwkJCQkgKiB0YWJsZXMgbWF5IGhhdmUgYSBOT1QgTlVMTCBj b25zdHJhaW50IGZvciBhIGNvbHVtbiB3aGlsZQorCQkJCSAqIG90aGVycyBtYXkgbm90LiAgVGhp cyBjYW5ub3QgaGFwcGVuIHdpdGggcGFydGl0aW9uZWQKKwkJCQkgKiB0YWJsZXMsIHRob3VnaC4K KwkJCQkgKi8KKwkJCQlpZiAocnRlLT5pbmggJiYgcnRlLT5yZWxraW5kICE9IFJFTEtJTkRfUEFS VElUSU9ORURfVEFCTEUpCisJCQkJCXJldHVybiBmYWxzZTsKKworCQkJCW5vdG51bGxhdHRudW1z ID0gZmluZF9yZWxhdGlvbl9ub3RudWxsYXR0cyhyb290LCBydGUtPnJlbGlkKTsKKworCQkJCXJl dHVybiBibXNfaXNfbWVtYmVyKHZhci0+dmFyYXR0bm8sIG5vdG51bGxhdHRudW1zKTsKKwkJCX0K KwkJY2FzZSBOT1ROVUxMX1NPVVJDRV9TWVNDQUNIRToKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFdl IGxvb2sgdXAgdGhlICJhdHRub3RudWxsIiBmaWVsZCBpbiB0aGUgYXR0cmlidXRlCisJCQkJICog cmVsYXRpb24uCisJCQkJICovCisJCQkJUmFuZ2VUYmxFbnRyeSAqcnRlOworCisJCQkJcnRlID0g cGxhbm5lcl9ydF9mZXRjaCh2YXItPnZhcm5vLCByb290KTsKKworCQkJCS8qIFdlIGNhbiBvbmx5 IHJlYXNvbiBhYm91dCBvcmRpbmFyeSByZWxhdGlvbnMgKi8KKwkJCQlpZiAocnRlLT5ydGVraW5k ICE9IFJURV9SRUxBVElPTikKKwkJCQkJcmV0dXJuIGZhbHNlOworCisJCQkJLyoKKwkJCQkgKiBX ZSBtdXN0IHNraXAgaW5oZXJpdGFuY2UgcGFyZW50IHRhYmxlcywgYXMgc29tZSBjaGlsZAorCQkJ CSAqIHRhYmxlcyBtYXkgaGF2ZSBhIE5PVCBOVUxMIGNvbnN0cmFpbnQgZm9yIGEgY29sdW1uIHdo aWxlCisJCQkJICogb3RoZXJzIG1heSBub3QuICBUaGlzIGNhbm5vdCBoYXBwZW4gd2l0aCBwYXJ0 aXRpb25lZAorCQkJCSAqIHRhYmxlcywgdGhvdWdoLgorCQkJCSAqCisJCQkJICogTm90ZSB0aGF0 IHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIHJlbGF0aW9uIGFjdHVhbGx5IGhhcyBhbnkKKwkJCQkg KiBjaGlsZHJlbiwgYXMgd2UgbWlnaHQgbm90IGhhdmUgZG9uZSB0aGF0IHlldC4KKwkJCQkgKi8K KwkJCQlpZiAocnRlLT5pbmggJiYgaGFzX3N1YmNsYXNzKHJ0ZS0+cmVsaWQpICYmCisJCQkJCXJ0 ZS0+cmVsa2luZCAhPSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQorCQkJCQlyZXR1cm4gZmFs c2U7CisKKwkJCQlyZXR1cm4gZ2V0X2F0dG5vdG51bGwocnRlLT5yZWxpZCwgdmFyLT52YXJhdHRu byk7CisJCQl9CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIE5vdE51 bGxTb3VyY2U6ICVkIiwKKwkJCQkgKGludCkgc291cmNlKTsKKwkJCWJyZWFrOworCX0KIAogCXJl dHVybiBmYWxzZTsKIH0KQEAgLTQ0NDQsMTYgKzQ3MzAsMjIgQEAgdmFyX2lzX25vbm51bGxhYmxl KFBsYW5uZXJJbmZvICpyb290LCBWYXIgKnZhciwgYm9vbCB1c2VfcmVsX2luZm8pCiAgKgogICog UmV0dXJucyB0cnVlIGlmZiB0aGUgZ2l2ZW4gJ2V4cHInIGNhbm5vdCBwcm9kdWNlIFNRTCBOVUxM cy4KICAqCi0gKiBJZiAndXNlX3JlbF9pbmZvJyBpcyB0cnVlLCBudWxsYWJpbGl0eSBvZiBWYXJz IGlzIGNoZWNrZWQgdmlhIHRoZQotICogY29ycmVzcG9uZGluZyBSZWxPcHRJbmZvIGZvciB0aGUg Z2l2ZW4gVmFyLiAgU29tZSBjYWxsZXJzIHJlcXVpcmUKLSAqIG51bGxhYmlsaXR5IGluZm9ybWF0 aW9uIGJlZm9yZSBSZWxPcHRJbmZvcyBhcmUgZ2VuZXJhdGVkLiAgVGhlc2Ugc2hvdWxkCi0gKiBw YXNzICd1c2VfcmVsX2luZm8nIGFzIGZhbHNlLgorICogc291cmNlOiBzcGVjaWZpZXMgd2hlcmUg d2Ugc2hvdWxkIGxvb2sgZm9yIE5PVCBOVUxMIHByb29mcyBmb3IgVmFycy4KKyAqCS0gTk9UTlVM TF9TT1VSQ0VfUkVMT1BUOiBVc2VkIHdoZW4gUmVsT3B0SW5mb3MgaGF2ZSBiZWVuIGdlbmVyYXRl ZC4gIFdlCisgKglyZXRyaWV2ZSBudWxsYWJpbGl0eSBpbmZvcm1hdGlvbiBkaXJlY3RseSBmcm9t IHRoZSBSZWxPcHRJbmZvIGNvcnJlc3BvbmRpbmcKKyAqCXRvIHRoZSBWYXIuCisgKgktIE5PVE5V TExfU09VUkNFX0hBU0hUQUJMRTogVXNlZCB3aGVuIFJlbE9wdEluZm9zIGFyZSBub3QgeWV0IGF2 YWlsYWJsZSwKKyAqCWJ1dCB3ZSBoYXZlIGFscmVhZHkgY29sbGVjdGVkIHJlbGF0aW9uLWxldmVs IG5vdC1udWxsIGNvbnN0cmFpbnRzIGludG8gdGhlCisgKglnbG9iYWwgaGFzaCB0YWJsZS4KKyAq CS0gTk9UTlVMTF9TT1VSQ0VfU1lTQ0FDSEU6IFVzZWQgZm9yIHJhdyBwYXJzZSB0cmVlcyB3aGVy ZSBuZWl0aGVyCisgKglSZWxPcHRJbmZvcyBub3IgdGhlIGhhc2ggdGFibGUgYXJlIGF2YWlsYWJs ZS4gIEluIHRoaXMgY2FzZSwgd2UgaGF2ZSB0bworICoJbG9vayB1cCB0aGUgJ2F0dG5vdG51bGwn IGZpZWxkIGRpcmVjdGx5IGluIHRoZSBzeXN0ZW0gY2F0YWxvZ3MuCiAgKgogICogRm9yIG5vdywg d2Ugc3VwcG9ydCBvbmx5IGEgbGltaXRlZCBzZXQgb2YgZXhwcmVzc2lvbiB0eXBlcy4gIFN1cHBv cnQgZm9yCiAgKiBhZGRpdGlvbmFsIG5vZGUgdHlwZXMgY2FuIGJlIGFkZGVkIGluIHRoZSBmdXR1 cmUuCiAgKi8KIGJvb2wKLWV4cHJfaXNfbm9ubnVsbGFibGUoUGxhbm5lckluZm8gKnJvb3QsIEV4 cHIgKmV4cHIsIGJvb2wgdXNlX3JlbF9pbmZvKQorZXhwcl9pc19ub25udWxsYWJsZShQbGFubmVy SW5mbyAqcm9vdCwgRXhwciAqZXhwciwgTm90TnVsbFNvdXJjZSBzb3VyY2UpCiB7CiAJLyogc2lu Y2UgdGhpcyBmdW5jdGlvbiByZWN1cnNlcywgaXQgY291bGQgYmUgZHJpdmVuIHRvIHN0YWNrIG92 ZXJmbG93ICovCiAJY2hlY2tfc3RhY2tfZGVwdGgoKTsKQEAgLTQ0NjMsNyArNDc1NSw3IEBAIGV4 cHJfaXNfbm9ubnVsbGFibGUoUGxhbm5lckluZm8gKnJvb3QsIEV4cHIgKmV4cHIsIGJvb2wgdXNl X3JlbF9pbmZvKQogCQljYXNlIFRfVmFyOgogCQkJewogCQkJCWlmIChyb290KQotCQkJCQlyZXR1 cm4gdmFyX2lzX25vbm51bGxhYmxlKHJvb3QsIChWYXIgKikgZXhwciwgdXNlX3JlbF9pbmZvKTsK KwkJCQkJcmV0dXJuIHZhcl9pc19ub25udWxsYWJsZShyb290LCAoVmFyICopIGV4cHIsIHNvdXJj ZSk7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBUX0NvbnN0OgpAQCAtNDQ4MCw3ICs0NzcyLDcg QEAgZXhwcl9pc19ub25udWxsYWJsZShQbGFubmVySW5mbyAqcm9vdCwgRXhwciAqZXhwciwgYm9v bCB1c2VfcmVsX2luZm8pCiAKIAkJCQlmb3JlYWNoX3B0cihFeHByLCBhcmcsIGNvYWxlc2NlZXhw ci0+YXJncykKIAkJCQl7Ci0JCQkJCWlmIChleHByX2lzX25vbm51bGxhYmxlKHJvb3QsIGFyZywg dXNlX3JlbF9pbmZvKSkKKwkJCQkJaWYgKGV4cHJfaXNfbm9ubnVsbGFibGUocm9vdCwgYXJnLCBz b3VyY2UpKQogCQkJCQkJcmV0dXJuIHRydWU7CiAJCQkJfQogCQkJfQpAQCAtNDQ5NSw3ICs0Nzg3 LDcgQEAgZXhwcl9pc19ub25udWxsYWJsZShQbGFubmVySW5mbyAqcm9vdCwgRXhwciAqZXhwciwg Ym9vbCB1c2VfcmVsX2luZm8pCiAKIAkJCQlmb3JlYWNoX3B0cihFeHByLCBhcmcsIG1pbm1heGV4 cHItPmFyZ3MpCiAJCQkJewotCQkJCQlpZiAoZXhwcl9pc19ub25udWxsYWJsZShyb290LCBhcmcs IHVzZV9yZWxfaW5mbykpCisJCQkJCWlmIChleHByX2lzX25vbm51bGxhYmxlKHJvb3QsIGFyZywg c291cmNlKSkKIAkJCQkJCXJldHVybiB0cnVlOwogCQkJCX0KIAkJCX0KQEAgLTQ1MTEsMTMgKzQ4 MDMsMTMgQEAgZXhwcl9pc19ub25udWxsYWJsZShQbGFubmVySW5mbyAqcm9vdCwgRXhwciAqZXhw ciwgYm9vbCB1c2VfcmVsX2luZm8pCiAKIAkJCQkvKiBUaGUgZGVmYXVsdCByZXN1bHQgbXVzdCBi ZSBwcmVzZW50IGFuZCBub24tbnVsbGFibGUgKi8KIAkJCQlpZiAoY2FzZWV4cHItPmRlZnJlc3Vs dCA9PSBOVUxMIHx8Ci0JCQkJCSFleHByX2lzX25vbm51bGxhYmxlKHJvb3QsIGNhc2VleHByLT5k ZWZyZXN1bHQsIHVzZV9yZWxfaW5mbykpCisJCQkJCSFleHByX2lzX25vbm51bGxhYmxlKHJvb3Qs IGNhc2VleHByLT5kZWZyZXN1bHQsIHNvdXJjZSkpCiAJCQkJCXJldHVybiBmYWxzZTsKIAogCQkJ CS8qIEFsbCBicmFuY2ggcmVzdWx0cyBtdXN0IGJlIG5vbi1udWxsYWJsZSAqLwogCQkJCWZvcmVh Y2hfcHRyKENhc2VXaGVuLCBjYXNld2hlbiwgY2FzZWV4cHItPmFyZ3MpCiAJCQkJewotCQkJCQlp ZiAoIWV4cHJfaXNfbm9ubnVsbGFibGUocm9vdCwgY2FzZXdoZW4tPnJlc3VsdCwgdXNlX3JlbF9p bmZvKSkKKwkJCQkJaWYgKCFleHByX2lzX25vbm51bGxhYmxlKHJvb3QsIGNhc2V3aGVuLT5yZXN1 bHQsIHNvdXJjZSkpCiAJCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJfQogCkBAIC00NTY1LDcgKzQ4 NTcsNyBAQCBleHByX2lzX25vbm51bGxhYmxlKFBsYW5uZXJJbmZvICpyb290LCBFeHByICpleHBy LCBib29sIHVzZV9yZWxfaW5mbykKIAkJCQkgKiBub24tbnVsbGFibGUuCiAJCQkJICovCiAJCQkJ cmV0dXJuIGV4cHJfaXNfbm9ubnVsbGFibGUocm9vdCwgKChSZWxhYmVsVHlwZSAqKSBleHByKS0+ YXJnLAotCQkJCQkJCQkJCSAgIHVzZV9yZWxfaW5mbyk7CisJCQkJCQkJCQkJICAgc291cmNlKTsK IAkJCX0KIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2ludDguYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9pbnQ4LmMKaW5kZXggMzdkMzQ2 ODViOTMuLjZjOGZiN2I3Mjc1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvaW50 OC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9pbnQ4LmMKQEAgLTgzNCw3ICs4MzQsNyBA QCBpbnQ4aW5jX3N1cHBvcnQoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQlQR19SRVRVUk5fUE9JTlRF UihOVUxMKTsKIAogCQkJLyogSWYgdGhlIGFyZyBpc24ndCBOVUxMYWJsZSwgZG8gdGhlIGNvbnZl cnNpb24gKi8KLQkJCWlmIChleHByX2lzX25vbm51bGxhYmxlKHJlcS0+cm9vdCwgYXJnLCBmYWxz ZSkpCisJCQlpZiAoZXhwcl9pc19ub25udWxsYWJsZShyZXEtPnJvb3QsIGFyZywgTk9UTlVMTF9T T1VSQ0VfSEFTSFRBQkxFKSkKIAkJCXsKIAkJCQlBZ2dyZWYJICAgKm5ld2FnZzsKIApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvbHN5c2NhY2hlLmMgYi9zcmMvYmFja2VuZC91 dGlscy9jYWNoZS9sc3lzY2FjaGUuYwppbmRleCBiOTI0YTJkOTAwYi4uZGViOWFhMDRiNzIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2xzeXNjYWNoZS5jCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL2NhY2hlL2xzeXNjYWNoZS5jCkBAIC04NTgsNiArODU4LDQ3IEBAIGNvbXBh cmlzb25fb3BzX2FyZV9jb21wYXRpYmxlKE9pZCBvcG5vMSwgT2lkIG9wbm8yKQogCXJldHVybiBy ZXN1bHQ7CiB9CiAKKy8qCisgKiBvcF9pc19zYWZlX2luZGV4X21lbWJlcgorICoJCUNoZWNrIGlm IHRoZSBvcGVyYXRvciBpcyBhIG1lbWJlciBvZiBhIEItdHJlZSBvciBIYXNoIG9wZXJhdG9yIGZh bWlseS4KKyAqCisgKiBXZSB1c2UgdGhpcyBjaGVjayBhcyBhIHByb3h5IGZvciAibnVsbC1zYWZl dHkiOiBpZiBhbiBvcGVyYXRvciBpcyB0cnVzdGVkIGJ5CisgKiB0aGUgYnRyZWUgb3IgaGFzaCBv cGZhbWlseSwgaXQgaW1wbGllcyB0aGF0IHRoZSBvcGVyYXRvciBhZGhlcmVzIHRvIHN0YW5kYXJk CisgKiBib29sZWFuIGJlaGF2aW9yLCBhbmQgd291bGQgbm90IHJldHVybiBOVUxMIHdoZW4gZ2l2 ZW4gdmFsaWQgbm9uLW51bGwKKyAqIGlucHV0cywgYXMgZG9pbmcgc28gd291bGQgYnJlYWsgaW5k ZXggaW50ZWdyaXR5LgorICovCitib29sCitvcF9pc19zYWZlX2luZGV4X21lbWJlcihPaWQgb3Bu bykKK3sKKwlib29sCQlyZXN1bHQgPSBmYWxzZTsKKwlDYXRDTGlzdCAgICpjYXRsaXN0OworCWlu dAkJCWk7CisKKwkvKgorCSAqIFNlYXJjaCBwZ19hbW9wIHRvIHNlZSBpZiB0aGUgdGFyZ2V0IG9w ZXJhdG9yIGlzIHJlZ2lzdGVyZWQgZm9yIGFueQorCSAqIGJ0cmVlIG9yIGhhc2ggb3BmYW1pbHku CisJICovCisJY2F0bGlzdCA9IFNlYXJjaFN5c0NhY2hlTGlzdDEoQU1PUE9QSUQsIE9iamVjdElk R2V0RGF0dW0ob3BubykpOworCisJZm9yIChpID0gMDsgaSA8IGNhdGxpc3QtPm5fbWVtYmVyczsg aSsrKQorCXsKKwkJSGVhcFR1cGxlCXR1cGxlID0gJmNhdGxpc3QtPm1lbWJlcnNbaV0tPnR1cGxl OworCQlGb3JtX3BnX2Ftb3AgYWZvcm0gPSAoRm9ybV9wZ19hbW9wKSBHRVRTVFJVQ1QodHVwbGUp OworCisJCS8qIENoZWNrIGlmIHRoZSBBTSBpcyBCLXRyZWUgb3IgSGFzaCAqLworCQlpZiAoYWZv cm0tPmFtb3BtZXRob2QgPT0gQlRSRUVfQU1fT0lEIHx8CisJCQlhZm9ybS0+YW1vcG1ldGhvZCA9 PSBIQVNIX0FNX09JRCkKKwkJeworCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJ fQorCisJUmVsZWFzZVN5c0NhY2hlTGlzdChjYXRsaXN0KTsKKworCXJldHVybiByZXN1bHQ7Cit9 CisKIAogLyoJCQkJLS0tLS0tLS0tLSBBTVBST0MgQ0FDSEVTIC0tLS0tLS0tLS0JCQkJCQkgKi8K IApAQCAtMTA3MSw2ICsxMTEyLDMzIEBAIGdldF9hdHRvcHRpb25zKE9pZCByZWxpZCwgaW50MTYg YXR0bnVtKQogCXJldHVybiByZXN1bHQ7CiB9CiAKKy8qCisgKiBnZXRfYXR0bm90bnVsbAorICoK KyAqCQlHaXZlbiB0aGUgcmVsYXRpb24gaWQgYW5kIHRoZSBhdHRyaWJ1dGUgbnVtYmVyLAorICoJ CXJldHVybiB0aGUgImF0dG5vdG51bGwiIGZpZWxkIGZyb20gdGhlIGF0dHJpYnV0ZSByZWxhdGlv bi4KKyAqLworYm9vbAorZ2V0X2F0dG5vdG51bGwoT2lkIHJlbGlkLCBBdHRyTnVtYmVyIGF0dG51 bSkKK3sKKwlIZWFwVHVwbGUJdHA7CisJYm9vbAkJcmVzdWx0ID0gZmFsc2U7CisKKwl0cCA9IFNl YXJjaFN5c0NhY2hlMihBVFROVU0sCisJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShyZWxpZCksCisJ CQkJCQkgSW50MTZHZXREYXR1bShhdHRudW0pKTsKKworCWlmIChIZWFwVHVwbGVJc1ZhbGlkKHRw KSkKKwl7CisJCUZvcm1fcGdfYXR0cmlidXRlIGF0dF90dXAgPSAoRm9ybV9wZ19hdHRyaWJ1dGUp IEdFVFNUUlVDVCh0cCk7CisKKwkJcmVzdWx0ID0gYXR0X3R1cC0+YXR0bm90bnVsbDsKKwkJUmVs ZWFzZVN5c0NhY2hlKHRwKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCiAvKgkJCQktLS0t LS0tLS0tIFBHX0NBU1QgQ0FDSEUgLS0tLS0tLS0tLQkJCQkJICovCiAKIC8qCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY2xhdXNlcy5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVy L2NsYXVzZXMuaAppbmRleCBhNjQwMzRlOGE2ZC4uODUzYTI4YzAwMDcgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL29wdGltaXplci9jbGF1c2VzLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVy L2NsYXVzZXMuaApAQCAtNDIsNiArNDIsNyBAQCBleHRlcm4gUmVsaWRzIGZpbmRfbm9ubnVsbGFi bGVfcmVscyhOb2RlICpjbGF1c2UpOwogZXh0ZXJuIExpc3QgKmZpbmRfbm9ubnVsbGFibGVfdmFy cyhOb2RlICpjbGF1c2UpOwogZXh0ZXJuIExpc3QgKmZpbmRfZm9yY2VkX251bGxfdmFycyhOb2Rl ICpub2RlKTsKIGV4dGVybiBWYXIgKmZpbmRfZm9yY2VkX251bGxfdmFyKE5vZGUgKm5vZGUpOwor ZXh0ZXJuIGJvb2wgcXVlcnlfb3V0cHV0c19hcmVfbm90X251bGxhYmxlKFF1ZXJ5ICpxdWVyeSk7 CiAKIGV4dGVybiBib29sIGlzX3BzZXVkb19jb25zdGFudF9jbGF1c2UoTm9kZSAqY2xhdXNlKTsK IGV4dGVybiBib29sIGlzX3BzZXVkb19jb25zdGFudF9jbGF1c2VfcmVsaWRzKE5vZGUgKmNsYXVz ZSwgUmVsaWRzIHJlbGlkcyk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvb3B0 aW1pemVyLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvb3B0aW1pemVyLmgKaW5kZXggM2QyN2Ew MTk2MDkuLjY4NTQ4NTE0OGFjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvb3B0 aW1pemVyLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL29wdGltaXplci5oCkBAIC0xMzAs NiArMTMwLDE0IEBAIGV4dGVybiBFeHByICpjYW5vbmljYWxpemVfcXVhbChFeHByICpxdWFsLCBi b29sIGlzX2NoZWNrKTsKIAogLyogaW4gdXRpbC9jbGF1c2VzLmM6ICovCiAKKy8qIEVudW0gdG8g c3BlY2lmeSB3aGVyZSB2YXJfaXNfbm9ubnVsbGFibGUgc2hvdWxkIGxvb2sgZm9yIE5PVCBOVUxM IHByb29mcyAqLwordHlwZWRlZiBlbnVtCit7CisJTk9UTlVMTF9TT1VSQ0VfUkVMT1BULAkJLyog VXNlIFJlbE9wdEluZm8gKi8KKwlOT1ROVUxMX1NPVVJDRV9IQVNIVEFCTEUsCS8qIFVzZSBHbG9i YWwgSGFzaCBUYWJsZSAqLworCU5PVE5VTExfU09VUkNFX1NZU0NBQ0hFLAkvKiBVc2UgU3lzdGVt IENhdGFsb2cgKi8KK30gTm90TnVsbFNvdXJjZTsKKwogZXh0ZXJuIGJvb2wgY29udGFpbl9tdXRh YmxlX2Z1bmN0aW9ucyhOb2RlICpjbGF1c2UpOwogZXh0ZXJuIGJvb2wgY29udGFpbl9tdXRhYmxl X2Z1bmN0aW9uc19hZnRlcl9wbGFubmluZyhFeHByICpleHByKTsKIGV4dGVybiBib29sIGNvbnRh aW5fdm9sYXRpbGVfZnVuY3Rpb25zKE5vZGUgKmNsYXVzZSk7CkBAIC0xNDUsMTAgKzE1MywxMSBA QCBleHRlcm4gTm9kZSAqZXN0aW1hdGVfZXhwcmVzc2lvbl92YWx1ZShQbGFubmVySW5mbyAqcm9v dCwgTm9kZSAqbm9kZSk7CiBleHRlcm4gRXhwciAqZXZhbHVhdGVfZXhwcihFeHByICpleHByLCBP aWQgcmVzdWx0X3R5cGUsIGludDMyIHJlc3VsdF90eXBtb2QsCiAJCQkJCQkgICBPaWQgcmVzdWx0 X2NvbGxhdGlvbik7CiAKLWV4dGVybiBib29sIHZhcl9pc19ub25udWxsYWJsZShQbGFubmVySW5m byAqcm9vdCwgVmFyICp2YXIsIGJvb2wgdXNlX3JlbF9pbmZvKTsKK2V4dGVybiBib29sIHZhcl9p c19ub25udWxsYWJsZShQbGFubmVySW5mbyAqcm9vdCwgVmFyICp2YXIsCisJCQkJCQkJICAgTm90 TnVsbFNvdXJjZSBzb3VyY2UpOwogCiBleHRlcm4gYm9vbCBleHByX2lzX25vbm51bGxhYmxlKFBs YW5uZXJJbmZvICpyb290LCBFeHByICpleHByLAotCQkJCQkJCQlib29sIHVzZV9yZWxfaW5mbyk7 CisJCQkJCQkJCU5vdE51bGxTb3VyY2Ugc291cmNlKTsKIAogZXh0ZXJuIExpc3QgKmV4cGFuZF9m dW5jdGlvbl9hcmd1bWVudHMoTGlzdCAqYXJncywgYm9vbCBpbmNsdWRlX291dF9hcmd1bWVudHMs CiAJCQkJCQkJCQkgICBPaWQgcmVzdWx0X3R5cGUsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9v cHRpbWl6ZXIvc3Vic2VsZWN0LmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvc3Vic2VsZWN0LmgK aW5kZXggOGE1NTAzZWI5NzMuLjRlY2NjZjQ2YmQzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9v cHRpbWl6ZXIvc3Vic2VsZWN0LmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3N1YnNlbGVj dC5oCkBAIC0yMiw2ICsyMiw3IEBAIGV4dGVybiBTY2FsYXJBcnJheU9wRXhwciAqY29udmVydF9W QUxVRVNfdG9fQU5ZKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQkJUXVlcnkgKnZhbHVl cyk7CiBleHRlcm4gSm9pbkV4cHIgKmNvbnZlcnRfQU5ZX3N1YmxpbmtfdG9fam9pbihQbGFubmVy SW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJIFN1YkxpbmsgKnN1YmxpbmssCisJCQkJCQkJCQkJCSBi b29sIHVuZGVyX25vdCwKIAkJCQkJCQkJCQkJIFJlbGlkcyBhdmFpbGFibGVfcmVscyk7CiBleHRl cm4gSm9pbkV4cHIgKmNvbnZlcnRfRVhJU1RTX3N1YmxpbmtfdG9fam9pbihQbGFubmVySW5mbyAq cm9vdCwKIAkJCQkJCQkJCQkJCVN1YkxpbmsgKnN1YmxpbmssCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS91dGlscy9sc3lzY2FjaGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2xzeXNjYWNoZS5oCmlu ZGV4IDU2NTVhY2E0YzE0Li5iOWFkODRlY2Q0MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRp bHMvbHN5c2NhY2hlLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvbHN5c2NhY2hlLmgKQEAgLTg5 LDYgKzg5LDcgQEAgZXh0ZXJuIGJvb2wgZ2V0X29wX2hhc2hfZnVuY3Rpb25zKE9pZCBvcG5vLAog ZXh0ZXJuIExpc3QgKmdldF9vcF9pbmRleF9pbnRlcnByZXRhdGlvbihPaWQgb3Bubyk7CiBleHRl cm4gYm9vbCBlcXVhbGl0eV9vcHNfYXJlX2NvbXBhdGlibGUoT2lkIG9wbm8xLCBPaWQgb3BubzIp OwogZXh0ZXJuIGJvb2wgY29tcGFyaXNvbl9vcHNfYXJlX2NvbXBhdGlibGUoT2lkIG9wbm8xLCBP aWQgb3BubzIpOworZXh0ZXJuIGJvb2wgb3BfaXNfc2FmZV9pbmRleF9tZW1iZXIoT2lkIG9wbm8p OwogZXh0ZXJuIE9pZAlnZXRfb3BmYW1pbHlfcHJvYyhPaWQgb3BmYW1pbHksIE9pZCBsZWZ0dHlw ZSwgT2lkIHJpZ2h0dHlwZSwKIAkJCQkJCQkgIGludDE2IHByb2NudW0pOwogZXh0ZXJuIGNoYXIg KmdldF9hdHRuYW1lKE9pZCByZWxpZCwgQXR0ck51bWJlciBhdHRudW0sIGJvb2wgbWlzc2luZ19v ayk7CkBAIC05OCw2ICs5OSw3IEBAIGV4dGVybiBPaWQJZ2V0X2F0dHR5cGUoT2lkIHJlbGlkLCBB dHRyTnVtYmVyIGF0dG51bSk7CiBleHRlcm4gdm9pZCBnZXRfYXR0dHlwZXR5cG1vZGNvbGwoT2lk IHJlbGlkLCBBdHRyTnVtYmVyIGF0dG51bSwKIAkJCQkJCQkJICBPaWQgKnR5cGlkLCBpbnQzMiAq dHlwbW9kLCBPaWQgKmNvbGxpZCk7CiBleHRlcm4gRGF0dW0gZ2V0X2F0dG9wdGlvbnMoT2lkIHJl bGlkLCBpbnQxNiBhdHRudW0pOworZXh0ZXJuIGJvb2wgZ2V0X2F0dG5vdG51bGwoT2lkIHJlbGlk LCBBdHRyTnVtYmVyIGF0dG51bSk7CiBleHRlcm4gT2lkCWdldF9jYXN0X29pZChPaWQgc291cmNl dHlwZWlkLCBPaWQgdGFyZ2V0dHlwZWlkLCBib29sIG1pc3Npbmdfb2spOwogZXh0ZXJuIGNoYXIg KmdldF9jb2xsYXRpb25fbmFtZShPaWQgY29sbG9pZCk7CiBleHRlcm4gYm9vbCBnZXRfY29sbGF0 aW9uX2lzZGV0ZXJtaW5pc3RpYyhPaWQgY29sbG9pZCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3N1YnNlbGVjdC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3N1YnNlbGVjdC5vdXQKaW5kZXggMjEzNWQ4Mjg4NGQuLjIwMDIzNmEwYTY5IDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNlbGVjdC5vdXQKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9zdWJzZWxlY3Qub3V0CkBAIC0zMzIzLDMgKzMzMjMsNDQyIEBAIFNF TEVDVCB0ZW4gRlJPTSBvbmVrIHQgV0hFUkUgMS4wOjppbnRlZ2VyIElOICgoVkFMVUVTICgxKSwg KDMpKSk7CiAgU2VxIFNjYW4gb24gb25layB0CiAoMSByb3cpCiAKKy0tCistLSBDaGVjayBOT1Qg SU4gcGVyZm9ybXMgYW4gQU5USSBKT0lOIHdoZW4gYm90aCB0aGUgb3V0ZXIgcXVlcnkncyBleHBy ZXNzaW9ucworLS0gYW5kIHRoZSBzdWItc2VsZWN0J3Mgb3V0cHV0IGNvbHVtbnMgYXJlIHByb3Zh Ymx5IG5vbi1udWxsYWJsZSwgYW5kIHRoZQorLS0gb3BlcmF0b3IgaXRzZWxmIGNhbm5vdCByZXR1 cm4gTlVMTCBmb3Igbm9uLW51bGwgaW5wdXRzLgorLS0KK0JFR0lOOworQ1JFQVRFIFRFTVAgVEFC TEUgbm90X251bGxfdGFiIChpZCBpbnQgTk9UIE5VTEwsIHZhbCBpbnQgTk9UIE5VTEwpOworQ1JF QVRFIFRFTVAgVEFCTEUgbnVsbF90YWIgKGlkIGludCwgdmFsIGludCk7CistLSBBTlRJIEpPSU46 IGJvdGggc2lkZXMgYXJlIGRlZmluZWQgTk9UIE5VTEwKK0VYUExBSU4gKENPU1RTIE9GRikKK1NF TEVDVCAqIEZST00gbm90X251bGxfdGFiCitXSEVSRSBpZCBOT1QgSU4gKFNFTEVDVCBpZCBGUk9N IG5vdF9udWxsX3RhYik7CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBIYXNoIEFudGkgSm9pbgorICAgSGFzaCBDb25kOiAobm90X251bGxfdGFi LmlkID0gbm90X251bGxfdGFiXzEuaWQpCisgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFi CisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYiBub3Rf bnVsbF90YWJfMQorKDUgcm93cykKKworLS0gTm8gQU5USSBKT0lOOiBvdXRlciBzaWRlIGlzIG51 bGxhYmxlCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG51bGxfdGFiCitXSEVS RSBpZCBOT1QgSU4gKFNFTEVDVCBpZCBGUk9NIG5vdF9udWxsX3RhYik7CisgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNj YW4gb24gbnVsbF90YWIKKyAgIEZpbHRlcjogKE5PVCAoQU5ZIChpZCA9IChoYXNoZWQgU3ViUGxh biBhbnlfMSkuY29sMSkpKQorICAgU3ViUGxhbiBhbnlfMQorICAgICAtPiAgU2VxIFNjYW4gb24g bm90X251bGxfdGFiCisoNCByb3dzKQorCistLSBObyBBTlRJIEpPSU46IGlubmVyIHNpZGUgaXMg bnVsbGFibGUKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFi CitXSEVSRSBpZCBOT1QgSU4gKFNFTEVDVCBpZCBGUk9NIG51bGxfdGFiKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEg U2NhbiBvbiBub3RfbnVsbF90YWIKKyAgIEZpbHRlcjogKE5PVCAoQU5ZIChpZCA9IChoYXNoZWQg U3ViUGxhbiBhbnlfMSkuY29sMSkpKQorICAgU3ViUGxhbiBhbnlfMQorICAgICAtPiAgU2VxIFNj YW4gb24gbnVsbF90YWIKKyg0IHJvd3MpCisKKy0tIEFOVEkgSk9JTjogb3V0ZXIgc2lkZSBpcyBk ZWZpbmVkIE5PVCBOVUxMLCBpbm5lciBzaWRlIGlzIGZvcmNlZCBub25udWxsYWJsZQorLS0gYnkg cXVhbCBjbGF1c2UKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxf dGFiCitXSEVSRSBpZCBOT1QgSU4gKFNFTEVDVCBpZCBGUk9NIG51bGxfdGFiIFdIRVJFIGlkIElT IE5PVCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNo IEFudGkgSm9pbgorICAgSGFzaCBDb25kOiAobm90X251bGxfdGFiLmlkID0gbnVsbF90YWIuaWQp CisgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiCisgICAtPiAgSGFzaAorICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIG51bGxfdGFiCisgICAgICAgICAgICAgICBGaWx0ZXI6IChpZCBJUyBO T1QgTlVMTCkKKyg2IHJvd3MpCisKKy0tIE5vIEFOVEkgSk9JTjogb3V0ZXIgc2lkZSBpcyBudWxs YWJsZSAod2UgZG9uJ3QgY2hlY2sgb3V0ZXIgcXVlcnkgcXVhbHMgZm9yIG5vdykKK0VYUExBSU4g KENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbnVsbF90YWIKK1dIRVJFIGlkIElTIE5PVCBOVUxM CisgIEFORCBpZCBOT1QgSU4gKFNFTEVDVCBpZCBGUk9NIG5vdF9udWxsX3RhYik7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9u IG51bGxfdGFiCisgICBGaWx0ZXI6ICgoaWQgSVMgTk9UIE5VTEwpIEFORCAoTk9UIChBTlkgKGlk ID0gKGhhc2hlZCBTdWJQbGFuIGFueV8xKS5jb2wxKSkpKQorICAgU3ViUGxhbiBhbnlfMQorICAg ICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiCisoNCByb3dzKQorCistLSBBTlRJIEpPSU46 IG91dGVyIHNpZGUgaXMgZGVmaW5lZCBOT1QgTlVMTCwgaW5uZXIgc2lkZSBpcyBkZWZpbmVkIE5P VCBOVUxMCistLSBhbmQgaXMgbm90IG51bGxlZCBieSBvdXRlciBqb2luCitFWFBMQUlOIChDT1NU UyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUgaWQgTk9UIElOICgKKyAg ICBTRUxFQ1QgdDEuaWQKKyAgICBGUk9NIG5vdF9udWxsX3RhYiB0MQorICAgIExFRlQgSk9JTiBu b3RfbnVsbF90YWIgdDIgT04gdDEuaWQgPSB0Mi5pZAorKTsKKyAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggQW50aSBKb2luCisgICBIYXNo IENvbmQ6IChub3RfbnVsbF90YWIuaWQgPSB0MS5pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBub3Rf bnVsbF90YWIKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgTWVyZ2UgTGVmdCBKb2luCisgICAg ICAgICAgICAgICBNZXJnZSBDb25kOiAodDEuaWQgPSB0Mi5pZCkKKyAgICAgICAgICAgICAgIC0+ ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogdDEuaWQKKyAgICAgICAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIgdDEKKyAgICAgICAgICAgICAg IC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogdDIuaWQKKyAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIgdDIKKygxMiByb3dzKQor CistLSBObyBBTlRJIEpPSU46IGlubmVyIHNpZGUgaXMgZGVmaW5lZCBOT1QgTlVMTCBidXQgaXMg bnVsbGVkIGJ5IG91dGVyIGpvaW4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00g bm90X251bGxfdGFiCitXSEVSRSBpZCBOT1QgSU4gKAorICAgIFNFTEVDVCB0Mi5pZAorICAgIEZS T00gbm90X251bGxfdGFiIHQxCisgICAgTEVGVCBKT0lOIG5vdF9udWxsX3RhYiB0MiBPTiB0MS5p ZCA9IHQyLmlkCispOworICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYgorICAgRmlsdGVy OiAoTk9UIChBTlkgKGlkID0gKGhhc2hlZCBTdWJQbGFuIGFueV8xKS5jb2wxKSkpCisgICBTdWJQ bGFuIGFueV8xCisgICAgIC0+ICBNZXJnZSBMZWZ0IEpvaW4KKyAgICAgICAgICAgTWVyZ2UgQ29u ZDogKHQxLmlkID0gdDIuaWQpCisgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAg IFNvcnQgS2V5OiB0MS5pZAorICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbm90X251 bGxfdGFiIHQxCisgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAgIFNvcnQgS2V5 OiB0Mi5pZAorICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiIHQy CisoMTEgcm93cykKKworLS0gQU5USSBKT0lOOiBvdXRlciBzaWRlIGlzIGRlZmluZWQgTk9UIE5V TEwsIGlubmVyIHNpZGUgaXMgZm9yY2VkIG5vbm51bGxhYmxlCistLSBieSBxdWFsIGNsYXVzZQor RVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIKK1dIRVJFIGlk IE5PVCBJTiAoCisgICAgU0VMRUNUIHQyLmlkCisgICAgRlJPTSBub3RfbnVsbF90YWIgdDEKKyAg ICBMRUZUIEpPSU4gbm90X251bGxfdGFiIHQyIE9OIHQxLmlkID0gdDIuaWQKKyAgICBXSEVSRSB0 Mi5pZCBJUyBOT1QgTlVMTAorKTsKKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggQW50aSBKb2luCisgICBIYXNoIENvbmQ6IChub3RfbnVs bF90YWIuaWQgPSB0Mi5pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIKKyAgIC0+ ICBIYXNoCisgICAgICAgICAtPiAgTWVyZ2UgSm9pbgorICAgICAgICAgICAgICAgTWVyZ2UgQ29u ZDogKHQxLmlkID0gdDIuaWQpCisgICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAg ICAgICAgICAgU29ydCBLZXk6IHQxLmlkCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gbm90X251bGxfdGFiIHQxCisgICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAg ICAgICAgICAgICAgU29ydCBLZXk6IHQyLmlkCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gbm90X251bGxfdGFiIHQyCisoMTIgcm93cykKKworLS0gQU5USSBKT0lOOiBvdXRl ciBzaWRlIGlzIGRlZmluZWQgTk9UIE5VTEwsIGlubmVyIHNpZGUgaXMgZm9yY2VkIG5vbm51bGxh YmxlCistLSBieSBxdWFsIGNsYXVzZQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJP TSBub3RfbnVsbF90YWIKK1dIRVJFIGlkIE5PVCBJTiAoCisgICAgU0VMRUNUIHQxLmlkCisgICAg RlJPTSBudWxsX3RhYiB0MQorICAgIExFRlQgSk9JTiBudWxsX3RhYiB0MiBPTiB0MS5pZCA9IHQy LmlkCisgICAgV0hFUkUgdDEuaWQgSVMgTk9UIE5VTEwKKyk7CisgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBBbnRpIEpvaW4KKyAgIEhhc2gg Q29uZDogKG5vdF9udWxsX3RhYi5pZCA9IHQxLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9u dWxsX3RhYgorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBNZXJnZSBMZWZ0IEpvaW4KKyAgICAg ICAgICAgICAgIE1lcmdlIENvbmQ6ICh0MS5pZCA9IHQyLmlkKQorICAgICAgICAgICAgICAgLT4g IFNvcnQKKyAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiB0MS5pZAorICAgICAgICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG51bGxfdGFiIHQxCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBGaWx0ZXI6IChpZCBJUyBOT1QgTlVMTCkKKyAgICAgICAgICAgICAgIC0+ICBTb3J0 CisgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogdDIuaWQKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBudWxsX3RhYiB0MgorKDEzIHJvd3MpCisKKy0tIEFOVEkgSk9J Tjogb3V0ZXIgc2lkZSBpcyBkZWZpbmVkIE5PVCBOVUxMLCBpbm5lciBzaWRlIGlzIGZvcmNlZCBu b25udWxsYWJsZQorLS0gYnkgcXVhbCBjbGF1c2UKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVD VCAqIEZST00gbm90X251bGxfdGFiCitXSEVSRSBpZCBOT1QgSU4gKAorICAgIFNFTEVDVCB0MS5p ZAorICAgIEZST00gbnVsbF90YWIgdDEKKyAgICBJTk5FUiBKT0lOIG51bGxfdGFiIHQyIE9OIHQx LmlkID0gdDIuaWQKKyAgICBMRUZUIEpPSU4gbnVsbF90YWIgdDMgT04gVFJVRQorKTsKKyAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBBbnRpIEpvaW4K KyAgIE1lcmdlIENvbmQ6IChub3RfbnVsbF90YWIuaWQgPSB0MS5pZCkKKyAgIC0+ICBTb3J0Cisg ICAgICAgICBTb3J0IEtleTogbm90X251bGxfdGFiLmlkCisgICAgICAgICAtPiAgU2VxIFNjYW4g b24gbm90X251bGxfdGFiCisgICAtPiAgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICAgICAgICAt PiAgTWVyZ2UgSm9pbgorICAgICAgICAgICAgICAgTWVyZ2UgQ29uZDogKHQxLmlkID0gdDIuaWQp CisgICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6 IHQxLmlkCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbnVsbF90YWIgdDEK KyAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTog dDIuaWQKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBudWxsX3RhYiB0Mgor ICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g bnVsbF90YWIgdDMKKygxNiByb3dzKQorCistLSBBTlRJIEpPSU46IG91dGVyIHNpZGUgaXMgZGVm aW5lZCBOT1QgTlVMTCBhbmQgaXMgbm90IG51bGxlZCBieSBvdXRlciBqb2luLAorLS0gaW5uZXIg c2lkZSBpcyBkZWZpbmVkIE5PVCBOVUxMCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBG Uk9NIG5vdF9udWxsX3RhYiB0MQorTEVGVCBKT0lOIG5vdF9udWxsX3RhYiB0MiBPTiB0MS5pZCA9 IHQyLmlkCitXSEVSRSB0MS5pZCBOT1QgSU4gKFNFTEVDVCBpZCBGUk9NIG5vdF9udWxsX3RhYik7 CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVy Z2UgTGVmdCBKb2luCisgICBNZXJnZSBDb25kOiAodDEuaWQgPSB0Mi5pZCkKKyAgIC0+ICBTb3J0 CisgICAgICAgICBTb3J0IEtleTogdDEuaWQKKyAgICAgICAgIC0+ICBIYXNoIEFudGkgSm9pbgor ICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDEuaWQgPSBub3RfbnVsbF90YWIuaWQpCisgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiIHQxCisgICAgICAgICAgICAg ICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxs X3RhYgorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiB0Mi5pZAorICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYiB0MgorKDEyIHJvd3MpCisKKy0tIE5vIEFOVEkgSk9J Tjogb3V0ZXIgc2lkZSBpcyBudWxsZWQgYnkgb3V0ZXIgam9pbgorRVhQTEFJTiAoQ09TVFMgT0ZG KQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIgdDEKK0xFRlQgSk9JTiBub3RfbnVsbF90YWIg dDIgT04gdDEuaWQgPSB0Mi5pZAorV0hFUkUgdDIuaWQgTk9UIElOIChTRUxFQ1QgaWQgRlJPTSBu b3RfbnVsbF90YWIpOworICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIExlZnQgSm9pbgorICAgTWVyZ2UgQ29u ZDogKHQxLmlkID0gdDIuaWQpCisgICBGaWx0ZXI6IChOT1QgKEFOWSAodDIuaWQgPSAoaGFzaGVk IFN1YlBsYW4gYW55XzEpLmNvbDEpKSkKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTog dDEuaWQKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIgdDEKKyAgIC0+ICBT b3J0CisgICAgICAgICBTb3J0IEtleTogdDIuaWQKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBu b3RfbnVsbF90YWIgdDIKKyAgIFN1YlBsYW4gYW55XzEKKyAgICAgLT4gIFNlcSBTY2FuIG9uIG5v dF9udWxsX3RhYgorKDExIHJvd3MpCisKKy0tIE5vIEFOVEkgSk9JTjogc3VibGluayBpcyBpbiBh biBvdXRlciBqb2luJ3MgT04gcXVhbCBhbmQgcmVmZXJlbmNlcyB0aGUKKy0tIG5vbi1udWxsYWJs ZSBzaWRlCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYiB0 MQorTEVGVCBKT0lOIG5vdF9udWxsX3RhYiB0MgorT04gdDEuaWQgTk9UIElOIChTRUxFQ1QgaWQg RlJPTSBub3RfbnVsbF90YWIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBM ZWZ0IEpvaW4KKyAgIEpvaW4gRmlsdGVyOiAoTk9UIChBTlkgKHQxLmlkID0gKGhhc2hlZCBTdWJQ bGFuIGFueV8xKS5jb2wxKSkpCisgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiIHQxCisg ICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIg dDIKKyAgIFN1YlBsYW4gYW55XzEKKyAgICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYgor KDcgcm93cykKKworLS0gQU5USSBKT0lOOiBvdXRlciBzaWRlIGlzIGRlZmluZWQgTk9UIE5VTEwg YW5kIGlzIG5vdCBudWxsZWQgYnkgb3V0ZXIgam9pbiwKKy0tIGlubmVyIHNpZGUgaXMgZGVmaW5l ZCBOT1QgTlVMTAorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90 YWIgdDEKK0xFRlQgSk9JTiBub3RfbnVsbF90YWIgdDIKK09OIHQyLmlkIE5PVCBJTiAoU0VMRUNU IGlkIEZST00gbm90X251bGxfdGFiKTsKKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgIC0+ICBTZXEgU2Nh biBvbiBub3RfbnVsbF90YWIgdDEKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIEhh c2ggQW50aSBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Mi5pZCA9IG5vdF9udWxs X3RhYi5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIgdDIK KyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gbm90X251bGxfdGFiCisoOCByb3dzKQorCistLSBBTlRJIEpPSU46IGJvdGggc2lkZXMg YXJlIGRlZmluZWQgTk9UIE5VTEwKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00g bm90X251bGxfdGFiCitXSEVSRSAoaWQsIHZhbCkgTk9UIElOIChTRUxFQ1QgaWQsIHZhbCBGUk9N IG5vdF9udWxsX3RhYik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEFu dGkgSm9pbgorICAgTWVyZ2UgQ29uZDogKChub3RfbnVsbF90YWIuaWQgPSBub3RfbnVsbF90YWJf MS5pZCkgQU5EIChub3RfbnVsbF90YWIudmFsID0gbm90X251bGxfdGFiXzEudmFsKSkKKyAgIC0+ ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogbm90X251bGxfdGFiLmlkLCBub3RfbnVsbF90YWIu dmFsCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiCisgICAtPiAgU29ydAor ICAgICAgICAgU29ydCBLZXk6IG5vdF9udWxsX3RhYl8xLmlkLCBub3RfbnVsbF90YWJfMS52YWwK KyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIgbm90X251bGxfdGFiXzEKKyg4 IHJvd3MpCisKKy0tIEFOVEkgSk9JTjogYm90aCBzaWRlcyBhcmUgZGVmaW5lZCBOT1QgTlVMTAor RVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIKK1dIRVJFIE5P VCAoaWQsIHZhbCkgPiBBTlkgKFNFTEVDVCBpZCwgdmFsIEZST00gbm90X251bGxfdGFiKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AgQW50aSBKb2lu CisgICBKb2luIEZpbHRlcjogKFJPVyhub3RfbnVsbF90YWIuaWQsIG5vdF9udWxsX3RhYi52YWwp ID4gUk9XKG5vdF9udWxsX3RhYl8xLmlkLCBub3RfbnVsbF90YWJfMS52YWwpKQorICAgLT4gIFNl cSBTY2FuIG9uIG5vdF9udWxsX3RhYgorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAg U2VxIFNjYW4gb24gbm90X251bGxfdGFiIG5vdF9udWxsX3RhYl8xCisoNSByb3dzKQorCistLSBO byBBTlRJIEpPSU46IG9uZSBjb2x1bW4gb2YgdGhlIG91dGVyIHNpZGUgaXMgbnVsbGFibGUKK0VY UExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiIHQxLCBudWxsX3Rh YiB0MgorV0hFUkUgKHQxLmlkLCB0Mi5pZCkgTk9UIElOIChTRUxFQ1QgaWQsIHZhbCBGUk9NIG5v dF9udWxsX3RhYik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6IChOT1QgKEFOWSAoKHQxLmlk ID0gKGhhc2hlZCBTdWJQbGFuIGFueV8xKS5jb2wxKSBBTkQgKHQyLmlkID0gKGhhc2hlZCBTdWJQ bGFuIGFueV8xKS5jb2wyKSkpKQorICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYiB0MQor ICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbnVsbF90YWIgdDIK KyAgIFN1YlBsYW4gYW55XzEKKyAgICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYgorKDcg cm93cykKKworLS0gTm8gQU5USSBKT0lOOiBvbmUgY29sdW1uIG9mIHRoZSBpbm5lciBzaWRlIGlz IG51bGxhYmxlCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3Rh YgorV0hFUkUgKGlkLCB2YWwpIE5PVCBJTiAoU0VMRUNUIHQxLmlkLCB0Mi5pZCBGUk9NIG5vdF9u dWxsX3RhYiB0MSwgbnVsbF90YWIgdDIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gbm90X251bGxfdGFi CisgICBGaWx0ZXI6IChOT1QgKEFOWSAoKGlkID0gKFN1YlBsYW4gYW55XzEpLmNvbDEpIEFORCAo dmFsID0gKFN1YlBsYW4gYW55XzEpLmNvbDIpKSkpCisgICBTdWJQbGFuIGFueV8xCisgICAgIC0+ ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYiB0MQorICAgICAgICAgICAgICAgICAtPiAg TWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG51bGxf dGFiIHQyCisoOCByb3dzKQorCistLSBBTlRJIEpPSU46IENPQUxFU0NFKG51bGxhYmxlLCBjb25z dGFudCkgaXMgbm9uLW51bGxhYmxlCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9N IG51bGxfdGFiCitXSEVSRSBDT0FMRVNDRShpZCwgLTEpIE5PVCBJTiAoU0VMRUNUIGlkIEZST00g bm90X251bGxfdGFiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggQW50 aSBKb2luCisgICBIYXNoIENvbmQ6IChDT0FMRVNDRShudWxsX3RhYi5pZCwgJy0xJzo6aW50ZWdl cikgPSBub3RfbnVsbF90YWIuaWQpCisgICAtPiAgU2VxIFNjYW4gb24gbnVsbF90YWIKKyAgIC0+ ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiCisoNSByb3dzKQor CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUg aWQgTk9UIElOIChTRUxFQ1QgQ09BTEVTQ0UoaWQsIC0xKSBGUk9NIG51bGxfdGFiKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggQW50aSBKb2luCisgICBIYXNoIENvbmQ6 IChub3RfbnVsbF90YWIuaWQgPSBDT0FMRVNDRShudWxsX3RhYi5pZCwgJy0xJzo6aW50ZWdlcikp CisgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiCisgICAtPiAgSGFzaAorICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIG51bGxfdGFiCisoNSByb3dzKQorCistLSBBTlRJIEpPSU46IEdST1VQ IEJZICh3aXRob3V0IEdyb3VwaW5nIFNldHMpIHByZXNlcnZlcyB0aGUgbm9uLW51bGxhYmlsaXR5 IG9mCistLSB0aGUgY29sdW1uCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5v dF9udWxsX3RhYgorV0hFUkUgaWQgTk9UIElOIChTRUxFQ1QgaWQgRlJPTSBub3RfbnVsbF90YWIg R1JPVVAgQlkgaWQpOworICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBBbnRpIEpvaW4KKyAgIEhhc2ggQ29uZDogKG5v dF9udWxsX3RhYi5pZCA9IG5vdF9udWxsX3RhYl8xLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIG5v dF9udWxsX3RhYgorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAg ICAgICAgICAgICBHcm91cCBLZXk6IG5vdF9udWxsX3RhYl8xLmlkCisgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiIG5vdF9udWxsX3RhYl8xCisoNyByb3dzKQorCist LSBObyBBTlRJIEpPSU46IEdST1VQIEJZIG9uIGEgbnVsbGFibGUgY29sdW1uCitFWFBMQUlOIChD T1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUgaWQgTk9UIElOIChT RUxFQ1QgaWQgRlJPTSBudWxsX3RhYiBHUk9VUCBCWSBpZCk7CisgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24g bm90X251bGxfdGFiCisgICBGaWx0ZXI6IChOT1QgKEFOWSAoaWQgPSAoaGFzaGVkIFN1YlBsYW4g YW55XzEpLmNvbDEpKSkKKyAgIFN1YlBsYW4gYW55XzEKKyAgICAgLT4gIEhhc2hBZ2dyZWdhdGUK KyAgICAgICAgICAgR3JvdXAgS2V5OiBudWxsX3RhYi5pZAorICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gbnVsbF90YWIKKyg2IHJvd3MpCisKKy0tIE5vIEFOVEkgSk9JTjogR3JvdXBpbmcgU2V0 cyBjYW4gaW50cm9kdWNlIE5VTExzCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9N IG5vdF9udWxsX3RhYgorV0hFUkUgaWQgTk9UIElOICgKKyAgICBTRUxFQ1QgaWQKKyAgICBGUk9N IG5vdF9udWxsX3RhYgorICAgIEdST1VQIEJZIEdST1VQSU5HIFNFVFMgKChpZCksICh2YWwpKQor KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIKKyAgIEZpbHRlcjogKE5PVCAoQU5Z IChpZCA9IChoYXNoZWQgU3ViUGxhbiBhbnlfMSkuY29sMSkpKQorICAgU3ViUGxhbiBhbnlfMQor ICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICBIYXNoIEtleTogbm90X251bGxfdGFi XzEuaWQKKyAgICAgICAgICAgSGFzaCBLZXk6IG5vdF9udWxsX3RhYl8xLnZhbAorICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiIG5vdF9udWxsX3RhYl8xCisoNyByb3dzKQor CistLSBjcmVhdGUgYSBjdXN0b20gInVuc2FmZSIgZXF1YWxpdHkgb3BlcmF0b3IKK0NSRUFURSBG VU5DVElPTiBpbnQ0ZXFfdW5zYWZlKGludDQsIGludDQpCisgICAgUkVUVVJOUyBib29sCisgICAg QVMgJ2ludDRlcScKKyAgICBMQU5HVUFHRSBpbnRlcm5hbCBJTU1VVEFCTEU7CitDUkVBVEUgT1BF UkFUT1IgPz0gKAorICAgIFBST0NFRFVSRSA9IGludDRlcV91bnNhZmUsCisgICAgTEVGVEFSRyA9 IGludDQsCisgICAgUklHSFRBUkcgPSBpbnQ0CispOworLS0gTm8gQU5USSBKT0lOOiB0aGUgb3Bl cmF0b3IgaXMgbm90IHNhZmUKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90 X251bGxfdGFiCitXSEVSRSBOT1QgaWQgPz0gQU5ZIChTRUxFQ1QgaWQgRlJPTSBub3RfbnVsbF90 YWIpOworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYgorICAgRmlsdGVyOiAoTk9UIChBTlkgKGlk ID89IChTdWJQbGFuIGFueV8xKS5jb2wxKSkpCisgICBTdWJQbGFuIGFueV8xCisgICAgIC0+ICBN YXRlcmlhbGl6ZQorICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiIG5vdF9u dWxsX3RhYl8xCisoNSByb3dzKQorCitST0xMQkFDSzsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL3N1YnNlbGVjdC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdWJzZWxlY3Qu c3FsCmluZGV4IGNhZGMzMjkzNjg3Li40Y2QwMTZmNGFjMyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvc3Vic2VsZWN0LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdWJz ZWxlY3Quc3FsCkBAIC0xNDQ4LDMgKzE0NDgsMTg4IEBAIFNFTEVDVCAqIEZST00gb25layB0MSwg bGF0ZXJhbCAoU0VMRUNUICogRlJPTSBvbmVrIHQyIFdIRVJFIHQyLnRlbiBJTiAodmFsdWVzICh0 CiAtLSBWdEEgY2F1c2VzIHRoZSB3aG9sZSBleHByZXNzaW9uIHRvIGJlIGV2YWx1YXRlZCBhcyBh IGNvbnN0YW50CiBFWFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1QgdGVuIEZST00gb25layB0IFdI RVJFIDEuMDo6aW50ZWdlciBJTiAoKFZBTFVFUyAoMSksICgzKSkpOworCistLQorLS0gQ2hlY2sg Tk9UIElOIHBlcmZvcm1zIGFuIEFOVEkgSk9JTiB3aGVuIGJvdGggdGhlIG91dGVyIHF1ZXJ5J3Mg ZXhwcmVzc2lvbnMKKy0tIGFuZCB0aGUgc3ViLXNlbGVjdCdzIG91dHB1dCBjb2x1bW5zIGFyZSBw cm92YWJseSBub24tbnVsbGFibGUsIGFuZCB0aGUKKy0tIG9wZXJhdG9yIGl0c2VsZiBjYW5ub3Qg cmV0dXJuIE5VTEwgZm9yIG5vbi1udWxsIGlucHV0cy4KKy0tCisKK0JFR0lOOworCitDUkVBVEUg VEVNUCBUQUJMRSBub3RfbnVsbF90YWIgKGlkIGludCBOT1QgTlVMTCwgdmFsIGludCBOT1QgTlVM TCk7CitDUkVBVEUgVEVNUCBUQUJMRSBudWxsX3RhYiAoaWQgaW50LCB2YWwgaW50KTsKKworLS0g QU5USSBKT0lOOiBib3RoIHNpZGVzIGFyZSBkZWZpbmVkIE5PVCBOVUxMCitFWFBMQUlOIChDT1NU UyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUgaWQgTk9UIElOIChTRUxF Q1QgaWQgRlJPTSBub3RfbnVsbF90YWIpOworCistLSBObyBBTlRJIEpPSU46IG91dGVyIHNpZGUg aXMgbnVsbGFibGUKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbnVsbF90YWIK K1dIRVJFIGlkIE5PVCBJTiAoU0VMRUNUIGlkIEZST00gbm90X251bGxfdGFiKTsKKworLS0gTm8g QU5USSBKT0lOOiBpbm5lciBzaWRlIGlzIG51bGxhYmxlCitFWFBMQUlOIChDT1NUUyBPRkYpCitT RUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUgaWQgTk9UIElOIChTRUxFQ1QgaWQgRlJP TSBudWxsX3RhYik7CisKKy0tIEFOVEkgSk9JTjogb3V0ZXIgc2lkZSBpcyBkZWZpbmVkIE5PVCBO VUxMLCBpbm5lciBzaWRlIGlzIGZvcmNlZCBub25udWxsYWJsZQorLS0gYnkgcXVhbCBjbGF1c2UK K0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiCitXSEVSRSBp ZCBOT1QgSU4gKFNFTEVDVCBpZCBGUk9NIG51bGxfdGFiIFdIRVJFIGlkIElTIE5PVCBOVUxMKTsK KworLS0gTm8gQU5USSBKT0lOOiBvdXRlciBzaWRlIGlzIG51bGxhYmxlICh3ZSBkb24ndCBjaGVj ayBvdXRlciBxdWVyeSBxdWFscyBmb3Igbm93KQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNU ICogRlJPTSBudWxsX3RhYgorV0hFUkUgaWQgSVMgTk9UIE5VTEwKKyAgQU5EIGlkIE5PVCBJTiAo U0VMRUNUIGlkIEZST00gbm90X251bGxfdGFiKTsKKworLS0gQU5USSBKT0lOOiBvdXRlciBzaWRl IGlzIGRlZmluZWQgTk9UIE5VTEwsIGlubmVyIHNpZGUgaXMgZGVmaW5lZCBOT1QgTlVMTAorLS0g YW5kIGlzIG5vdCBudWxsZWQgYnkgb3V0ZXIgam9pbgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VM RUNUICogRlJPTSBub3RfbnVsbF90YWIKK1dIRVJFIGlkIE5PVCBJTiAoCisgICAgU0VMRUNUIHQx LmlkCisgICAgRlJPTSBub3RfbnVsbF90YWIgdDEKKyAgICBMRUZUIEpPSU4gbm90X251bGxfdGFi IHQyIE9OIHQxLmlkID0gdDIuaWQKKyk7CisKKy0tIE5vIEFOVEkgSk9JTjogaW5uZXIgc2lkZSBp cyBkZWZpbmVkIE5PVCBOVUxMIGJ1dCBpcyBudWxsZWQgYnkgb3V0ZXIgam9pbgorRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIKK1dIRVJFIGlkIE5PVCBJTiAo CisgICAgU0VMRUNUIHQyLmlkCisgICAgRlJPTSBub3RfbnVsbF90YWIgdDEKKyAgICBMRUZUIEpP SU4gbm90X251bGxfdGFiIHQyIE9OIHQxLmlkID0gdDIuaWQKKyk7CisKKy0tIEFOVEkgSk9JTjog b3V0ZXIgc2lkZSBpcyBkZWZpbmVkIE5PVCBOVUxMLCBpbm5lciBzaWRlIGlzIGZvcmNlZCBub25u dWxsYWJsZQorLS0gYnkgcXVhbCBjbGF1c2UKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAq IEZST00gbm90X251bGxfdGFiCitXSEVSRSBpZCBOT1QgSU4gKAorICAgIFNFTEVDVCB0Mi5pZAor ICAgIEZST00gbm90X251bGxfdGFiIHQxCisgICAgTEVGVCBKT0lOIG5vdF9udWxsX3RhYiB0MiBP TiB0MS5pZCA9IHQyLmlkCisgICAgV0hFUkUgdDIuaWQgSVMgTk9UIE5VTEwKKyk7CisKKy0tIEFO VEkgSk9JTjogb3V0ZXIgc2lkZSBpcyBkZWZpbmVkIE5PVCBOVUxMLCBpbm5lciBzaWRlIGlzIGZv cmNlZCBub25udWxsYWJsZQorLS0gYnkgcXVhbCBjbGF1c2UKK0VYUExBSU4gKENPU1RTIE9GRikK K1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiCitXSEVSRSBpZCBOT1QgSU4gKAorICAgIFNFTEVD VCB0MS5pZAorICAgIEZST00gbnVsbF90YWIgdDEKKyAgICBMRUZUIEpPSU4gbnVsbF90YWIgdDIg T04gdDEuaWQgPSB0Mi5pZAorICAgIFdIRVJFIHQxLmlkIElTIE5PVCBOVUxMCispOworCistLSBB TlRJIEpPSU46IG91dGVyIHNpZGUgaXMgZGVmaW5lZCBOT1QgTlVMTCwgaW5uZXIgc2lkZSBpcyBm b3JjZWQgbm9ubnVsbGFibGUKKy0tIGJ5IHF1YWwgY2xhdXNlCitFWFBMQUlOIChDT1NUUyBPRkYp CitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUgaWQgTk9UIElOICgKKyAgICBTRUxF Q1QgdDEuaWQKKyAgICBGUk9NIG51bGxfdGFiIHQxCisgICAgSU5ORVIgSk9JTiBudWxsX3RhYiB0 MiBPTiB0MS5pZCA9IHQyLmlkCisgICAgTEVGVCBKT0lOIG51bGxfdGFiIHQzIE9OIFRSVUUKKyk7 CisKKy0tIEFOVEkgSk9JTjogb3V0ZXIgc2lkZSBpcyBkZWZpbmVkIE5PVCBOVUxMIGFuZCBpcyBu b3QgbnVsbGVkIGJ5IG91dGVyIGpvaW4sCistLSBpbm5lciBzaWRlIGlzIGRlZmluZWQgTk9UIE5V TEwKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiIHQxCitM RUZUIEpPSU4gbm90X251bGxfdGFiIHQyIE9OIHQxLmlkID0gdDIuaWQKK1dIRVJFIHQxLmlkIE5P VCBJTiAoU0VMRUNUIGlkIEZST00gbm90X251bGxfdGFiKTsKKworLS0gTm8gQU5USSBKT0lOOiBv dXRlciBzaWRlIGlzIG51bGxlZCBieSBvdXRlciBqb2luCitFWFBMQUlOIChDT1NUUyBPRkYpCitT RUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYiB0MQorTEVGVCBKT0lOIG5vdF9udWxsX3RhYiB0MiBP TiB0MS5pZCA9IHQyLmlkCitXSEVSRSB0Mi5pZCBOT1QgSU4gKFNFTEVDVCBpZCBGUk9NIG5vdF9u dWxsX3RhYik7CisKKy0tIE5vIEFOVEkgSk9JTjogc3VibGluayBpcyBpbiBhbiBvdXRlciBqb2lu J3MgT04gcXVhbCBhbmQgcmVmZXJlbmNlcyB0aGUKKy0tIG5vbi1udWxsYWJsZSBzaWRlCitFWFBM QUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYiB0MQorTEVGVCBKT0lO IG5vdF9udWxsX3RhYiB0MgorT04gdDEuaWQgTk9UIElOIChTRUxFQ1QgaWQgRlJPTSBub3RfbnVs bF90YWIpOworCistLSBBTlRJIEpPSU46IG91dGVyIHNpZGUgaXMgZGVmaW5lZCBOT1QgTlVMTCBh bmQgaXMgbm90IG51bGxlZCBieSBvdXRlciBqb2luLAorLS0gaW5uZXIgc2lkZSBpcyBkZWZpbmVk IE5PVCBOVUxMCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3Rh YiB0MQorTEVGVCBKT0lOIG5vdF9udWxsX3RhYiB0MgorT04gdDIuaWQgTk9UIElOIChTRUxFQ1Qg aWQgRlJPTSBub3RfbnVsbF90YWIpOworCistLSBBTlRJIEpPSU46IGJvdGggc2lkZXMgYXJlIGRl ZmluZWQgTk9UIE5VTEwKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251 bGxfdGFiCitXSEVSRSAoaWQsIHZhbCkgTk9UIElOIChTRUxFQ1QgaWQsIHZhbCBGUk9NIG5vdF9u dWxsX3RhYik7CisKKy0tIEFOVEkgSk9JTjogYm90aCBzaWRlcyBhcmUgZGVmaW5lZCBOT1QgTlVM TAorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIKK1dIRVJF IE5PVCAoaWQsIHZhbCkgPiBBTlkgKFNFTEVDVCBpZCwgdmFsIEZST00gbm90X251bGxfdGFiKTsK KworLS0gTm8gQU5USSBKT0lOOiBvbmUgY29sdW1uIG9mIHRoZSBvdXRlciBzaWRlIGlzIG51bGxh YmxlCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYiB0MSwg bnVsbF90YWIgdDIKK1dIRVJFICh0MS5pZCwgdDIuaWQpIE5PVCBJTiAoU0VMRUNUIGlkLCB2YWwg RlJPTSBub3RfbnVsbF90YWIpOworCistLSBObyBBTlRJIEpPSU46IG9uZSBjb2x1bW4gb2YgdGhl IGlubmVyIHNpZGUgaXMgbnVsbGFibGUKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZS T00gbm90X251bGxfdGFiCitXSEVSRSAoaWQsIHZhbCkgTk9UIElOIChTRUxFQ1QgdDEuaWQsIHQy LmlkIEZST00gbm90X251bGxfdGFiIHQxLCBudWxsX3RhYiB0Mik7CisKKy0tIEFOVEkgSk9JTjog Q09BTEVTQ0UobnVsbGFibGUsIGNvbnN0YW50KSBpcyBub24tbnVsbGFibGUKK0VYUExBSU4gKENP U1RTIE9GRikKK1NFTEVDVCAqIEZST00gbnVsbF90YWIKK1dIRVJFIENPQUxFU0NFKGlkLCAtMSkg Tk9UIElOIChTRUxFQ1QgaWQgRlJPTSBub3RfbnVsbF90YWIpOworCitFWFBMQUlOIChDT1NUUyBP RkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUgaWQgTk9UIElOIChTRUxFQ1Qg Q09BTEVTQ0UoaWQsIC0xKSBGUk9NIG51bGxfdGFiKTsKKworLS0gQU5USSBKT0lOOiBHUk9VUCBC WSAod2l0aG91dCBHcm91cGluZyBTZXRzKSBwcmVzZXJ2ZXMgdGhlIG5vbi1udWxsYWJpbGl0eSBv ZgorLS0gdGhlIGNvbHVtbgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3Rf bnVsbF90YWIKK1dIRVJFIGlkIE5PVCBJTiAoU0VMRUNUIGlkIEZST00gbm90X251bGxfdGFiIEdS T1VQIEJZIGlkKTsKKworLS0gTm8gQU5USSBKT0lOOiBHUk9VUCBCWSBvbiBhIG51bGxhYmxlIGNv bHVtbgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIKK1dI RVJFIGlkIE5PVCBJTiAoU0VMRUNUIGlkIEZST00gbnVsbF90YWIgR1JPVVAgQlkgaWQpOworCist LSBObyBBTlRJIEpPSU46IEdyb3VwaW5nIFNldHMgY2FuIGludHJvZHVjZSBOVUxMcworRVhQTEFJ TiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIKK1dIRVJFIGlkIE5PVCBJ TiAoCisgICAgU0VMRUNUIGlkCisgICAgRlJPTSBub3RfbnVsbF90YWIKKyAgICBHUk9VUCBCWSBH Uk9VUElORyBTRVRTICgoaWQpLCAodmFsKSkKKyk7CisKKy0tIGNyZWF0ZSBhIGN1c3RvbSAidW5z YWZlIiBlcXVhbGl0eSBvcGVyYXRvcgorQ1JFQVRFIEZVTkNUSU9OIGludDRlcV91bnNhZmUoaW50 NCwgaW50NCkKKyAgICBSRVRVUk5TIGJvb2wKKyAgICBBUyAnaW50NGVxJworICAgIExBTkdVQUdF IGludGVybmFsIElNTVVUQUJMRTsKKworQ1JFQVRFIE9QRVJBVE9SID89ICgKKyAgICBQUk9DRURV UkUgPSBpbnQ0ZXFfdW5zYWZlLAorICAgIExFRlRBUkcgPSBpbnQ0LAorICAgIFJJR0hUQVJHID0g aW50NAorKTsKKworLS0gTm8gQU5USSBKT0lOOiB0aGUgb3BlcmF0b3IgaXMgbm90IHNhZmUKK0VY UExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiCitXSEVSRSBOT1Qg aWQgPz0gQU5ZIChTRUxFQ1QgaWQgRlJPTSBub3RfbnVsbF90YWIpOworCitST0xMQkFDSzsKZGlm ZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNmUyZDg3NmE0MGYuLjg0ZGM0Y2I1NTQzIDEwMDY0 NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTc4Nyw2ICsxNzg3LDcgQEAgTm9kZQogTm9kZVRh ZwogTm9uRW1wdHlSYW5nZQogTm9uZUNvbXByZXNzb3JTdGF0ZQorTm90TnVsbFNvdXJjZQogTm90 aWZpY2F0aW9uCiBOb3RpZmljYXRpb25MaXN0CiBOb3RpZnlTdG10Ci0tIAoyLjM5LjUgKEFwcGxl IEdpdC0xNTQpCgo= --000000000000e0e4cc064ac3ca1d--