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 1w8PZH-000VSY-35 for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Apr 2026 21:27:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w8PZG-0088ha-2A for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Apr 2026 21:27:11 +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 1w8PZF-0088hQ-2i for pgsql-hackers@lists.postgresql.org; Thu, 02 Apr 2026 21:27:10 +0000 Received: from mail-qv1-xf2f.google.com ([2607:f8b0:4864:20::f2f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w8PZD-00000000FOm-0ptd for pgsql-hackers@lists.postgresql.org; Thu, 02 Apr 2026 21:27:08 +0000 Received: by mail-qv1-xf2f.google.com with SMTP id 6a1803df08f44-89f87257904so11794846d6.1 for ; Thu, 02 Apr 2026 14:27:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775165225; cv=none; d=google.com; s=arc-20240605; b=a29ORB5TfDAf9/XtnjMsTT+ALI0AocRHK4LjpXkrUyFjUwqTCattWjfMaiW/LWGSMV u0jzDM7laBSfKSQkO32DeqIoobOJ/VsDHDNhZdQfQfs7NpBjfUGr9ery9/SBzlVi3OMc V/6wkBE9z0PbFtyAbC/2u9tTc3wmtbV2XQ+w0OPtMflQbohS2V8Nr5rfVbvMuTFmIxk0 xrUEV+KwlrpaJX+5hFnPGsfN3tBAEVvBUHinNfh3VzF4se3FwjGLHfv2m9W6FUEmA9Bs 4AUL+WoYzn5bjEVRViJ26s2ZV1PbZT4g7leFmEZNrg7T6IVidoxNc2q7M0d/4wVfQe+z MKUQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=WPveSNKIqlMrYFzOo6f6YXrqHfh6sJIUhlOhWvmLcRk=; fh=z0DgflwTZKPeb0+heSrqAPtnBB7fP3n1VgUMdOR5DhQ=; b=cCjT0EuyUyygiYg5M0b08f+4z2stgFF3Ouha6CC2KRFUGQE4Yw4AtKIer1i04GNOX2 T483TRUVMrfMU4vAInQlINR94V93Fl/qel3FBAARoFNAk1aV59uKpEv+/sGoDfyurYyY id6tbvPaCjXzVsTRsj53l411yswmZcVAJaxBBGILdA3oeKJ9jSEs5QRrZZItyHS+k1FA 26hboCun/Wj7vxcrlbNk9Ofru0AsDw2uPfqN9tE1mRbgMPd1aZKLErWG5JMDX2TFCQuT GhkM6KDk+nJQYBcs+Ffm3gNg5xjgK8gf7qItQK/60Nw34nKfLkcBpdPovrjYK0J9tGM3 xhmg==; 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=enterprisedb.com; s=google; t=1775165225; x=1775770025; 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=WPveSNKIqlMrYFzOo6f6YXrqHfh6sJIUhlOhWvmLcRk=; b=fMLJn4YEFLThIPzQ6IAxT/QlLaEldMfElKXStpUiPvUWCJM+81dOUgI4Ndie/uHrYf h71xALFy55mkANlXCg0Hh6GlAwmPVzx0egaAon4S3Nv4YJyyvWd0jPhd0cGktHKGEi1/ RxB0/gsU4t0j8/OUzHpDw6shEzploJikqa0c1BEEUKiF/HEN7uM0ohW8+2PIh1MqF2mk 32+rQAlvQEMyzjiNkbCDRrqShzURYCq5g7ODDWPMvkftDjUkYiQfPHM5H++Tulj7vuY/ CkPkx3sb9pDZf5W1lAQdtSoc2qEo+L6XYjK8Nq6vOT9uqb8eLhtRjRYDO9U+B8lPMS00 hZVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775165225; x=1775770025; 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=WPveSNKIqlMrYFzOo6f6YXrqHfh6sJIUhlOhWvmLcRk=; b=X1zwxG6XRB3r3NsEdZiEaP/9H8pr3mn/6tKlQKjJh5OlPnaaTSZsBNo6SgJb56xfyZ J9A7GPeWMHGoMz1jqkPVpTnCnxeV2xTogmJt0pdiWY0UuvWQyoQWEPJvUgggYnMv1PRv mDmw7GzXru3zGLKejx/m4yoT6bnGap3kYsI3iVCcIHsRsdz499TwJAfoggiy4/0S2MXE V5Ut1M6Rn4/rBvdmoQcuUJgWeSXfuhdYcb6lV8NoHhnS3m2T4Pv+M7rN+OwmFzV1lCSR Y8jWOg9zVAiH2S7mkIEApCWKtWB1UC4QdS7cECIGKszBbUabLEj9Xt9zjLVTkAAUroCK boVA== X-Forwarded-Encrypted: i=1; AJvYcCUgizShdIp0mu9ncpumQFtg6WfBjuwsvk1wxa79ZsbdQucLifEhGXVf/AD/5Ov6PSLTWnh2uEm1thYTq69J@lists.postgresql.org X-Gm-Message-State: AOJu0Yy+YYETvlMBw3ZTm449kNbXmvs2tH+nnQWnK0LxHTvmci+m5oyC 0SoueAUzGja6Z8VssCNieptoEWUyAzNiVOkn2JMRx3aamKZHfB8tG7cTwDdOV2Xmv59vdwj+EaF XugRQAIJ+uzUjTirA6uo7iZs9hzsYXrVDwBKUL0Zi X-Gm-Gg: AeBDieuWAW8YdCqOCkuOYR0kTZ/xAo+RrOSUj6rVi4HUl4pbQImstofdCHKtTJ2ZYVP uUDtlQozT8TNR+nBIZ6e5ySQtrf2pa3Ex+X1PIacjFZeinxtJ7uB+ZS9e0yd8G3v8kuiChtqMMV 1BNiE9j0KbKWhzqdXTANIatiwiAuLHHnwjTCNa2jv4yYq7Sa3xsQE3VHQgwvRp5nxUOKpykwvXC d3t/DZRGr7n1TY2Ryr4StARuAL5djkA/oqjvbdOxMTaqmbtKFY8muMloJF/yxOUVjfknjwFIUkI Tw9VozSI7w== X-Received: by 2002:a05:6214:2422:b0:89c:d931:62ee with SMTP id 6a1803df08f44-8a7041fd1f4mr12726736d6.34.1775165225196; Thu, 02 Apr 2026 14:27:05 -0700 (PDT) MIME-Version: 1.0 References: <202601281620.m3hrqtih5b2w@alvherre.pgsql> In-Reply-To: From: Jacob Champion Date: Thu, 2 Apr 2026 14:26:54 -0700 X-Gm-Features: AQROBzCjAhraKyMIaW47Neqc6gTlwN-e83kjefMCQWZd2mf8HaDP15wKlf0o8W0 Message-ID: Subject: Re: Custom oauth validator options To: Zsolt Parragi Cc: Nikolay Shaplov , =?UTF-8?Q?=C3=81lvaro_Herrera?= , VASUKI M , PostgreSQL Hackers , david.g.johnston@gmail.com, Robert Haas , myon@debian.org Content-Type: multipart/mixed; boundary="000000000000aaebf1064e80dc74" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000aaebf1064e80dc74 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Mar 30, 2026 at 4:54=E2=80=AFPM Jacob Champion wrote: > Sounds good. Barring other objections, then, I'll plan to move forward > with this approach for PG19. v4-0002 (based on top of [1]) addresses Zsolt's feedback and adds the missing user documentation. I believe this is now a complete patch proposal; tear it apart. :D Thanks, --Jacob [1] https://postgr.es/m/CAOYmi%2BmvFS7Ukmacb1z%3DxWO7M%2BDPF41GZsJiJ6sh4U1Q= m_yWOA%40mail.gmail.com --000000000000aaebf1064e80dc74 Content-Type: application/octet-stream; name="v4-0001-oauth-Let-validators-provide-failure-DETAILs.patch" Content-Disposition: attachment; filename="v4-0001-oauth-Let-validators-provide-failure-DETAILs.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnhzhha60 RnJvbSBhOWE1MDc2MDRjNTc5YWMxYmYzYzA3Y2Q4MzUzYWRhMmZiYWMxZmI4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogVGh1LCAxOSBNYXIgMjAyNiAwOTozNzoyMCAtMDcwMApTdWJqZWN0 OiBbUEFUQ0ggdjQgMS8yXSBvYXV0aDogTGV0IHZhbGlkYXRvcnMgcHJvdmlkZSBmYWlsdXJlIERF VEFJTHMKTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0 PVVURi04CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKCkF0IHRoZSBtb21lbnQsIHRo ZSBvbmx5IHdheSBmb3IgYSB2YWxpZGF0b3IgbW9kdWxlIHRvIHJlcG9ydCBlcnJvcgpkZXRhaWxz IG9uIGZhaWx1cmUgaXMgdG8gbG9nIHRoZW0gc2VwYXJhdGVseSBiZWZvcmUgcmV0dXJuaW5nIGZy b20KdmFsaWRhdGVfY2IuIEluZGVwZW5kZW50bHkgb2YgdGhhdCBwcm9ibGVtLCB0aGUgZXJlcG9y dCgpIGNhbGxzIHRoYXQgd2UKbWFrZSBkdXJpbmcgdmFsaWRhdGlvbiBmYWlsdXJlIHBhcnRpYWxs eSBkdXBsaWNhdGUgc29tZSBvZiB0aGUgd29yayBvZgphdXRoX2ZhaWxlZCgpLgoKVGhlIGVuZCBy ZXN1bHQgaXMgb3Zlcmx5IHZlcmJvc2UgYW5kIGNvbmZ1c2luZyBmb3IgcmVhZGVycyBvZiB0aGUg bG9nczoKCiAgICBbNzY4MjMzXSBMT0c6ICBbbXlfdmFsaWRhdG9yXSBiYWQgc2lnbmF0dXJlIGlu IGJlYXJlciB0b2tlbgogICAgWzc2ODIzM10gTE9HOiAgT0F1dGggYmVhcmVyIGF1dGhlbnRpY2F0 aW9uIGZhaWxlZCBmb3IgdXNlciAiamFjb2IiCiAgICBbNzY4MjMzXSBERVRBSUw6ICBWYWxpZGF0 b3IgZmFpbGVkIHRvIGF1dGhvcml6ZSB0aGUgcHJvdmlkZWQgdG9rZW4uCiAgICBbNzY4MjMzXSBG QVRBTDogIE9BdXRoIGJlYXJlciBhdXRoZW50aWNhdGlvbiBmYWlsZWQgZm9yIHVzZXIgImphY29i IgogICAgWzc2ODIzM10gREVUQUlMOiAgQ29ubmVjdGlvbiBtYXRjaGVkIGZpbGUgIi4uLi9wZ19o YmEuY29uZiIgbGluZSAuLi4KClNvbHZlIGJvdGggcHJvYmxlbXMgYnkgbWFraW5nIHVzZSBvZiB0 aGUgZXhpc3RpbmcgbG9nZGV0YWlsIHBvaW50ZXIKdGhhdCdzIHByb3ZpZGVkIGJ5IENsaWVudEF1 dGhlbnRpY2F0aW9uLiBWYWxpZGF0b3IgbW9kdWxlcyBtYXkgc2V0ClZhbGlkYXRvck1vZHVsZVJl c3VsdC0+ZXJyb3JfZGV0YWlsIHRvIG92ZXJyaWRlIG91ciBkZWZhdWx0IGdlbmVyaWMKbWVzc2Fn ZS4KClRoZSBlbmQgcmVzdWx0IGxvb2tzIHNvbWV0aGluZyBsaWtlCgogICAgWzI0MjI4NF0gRkFU QUw6ICBPQXV0aCBiZWFyZXIgYXV0aGVudGljYXRpb24gZmFpbGVkIGZvciB1c2VyICJqYWNvYiIK ICAgIFsyNDIyODRdIERFVEFJTDogIFtteV92YWxpZGF0b3JdIGJhZCBzaWduYXR1cmUgaW4gYmVh cmVyIHRva2VuCiAgICAgICAgQ29ubmVjdGlvbiBtYXRjaGVkIGZpbGUgIi4uLi9wZ19oYmEuY29u ZiIgbGluZSAuLi4KClJlcG9ydGVkLWJ5OiDDgWx2YXJvIEhlcnJlcmEgPGFsdmhlcnJlQGt1cmls ZW11LmRlPgpSZXBvcnRlZC1ieTogWnNvbHQgUGFycmFnaSA8enNvbHQucGFycmFnaUBwZXJjb25h LmNvbT4KUmV2aWV3ZWQtYnk6IENoYW8gTGkgPGxpLmV2YW4uY2hhb0BnbWFpbC5jb20+ClJldmll d2VkLWJ5OiBEYW5pZWwgR3VzdGFmc3NvbiA8ZGFuaWVsQHllc3FsLnNlPgpSZXZpZXdlZC1ieTog WnNvbHQgUGFycmFnaSA8enNvbHQucGFycmFnaUBwZXJjb25hLmNvbT4KRGlzY3Vzc2lvbjogaHR0 cHM6Ly9wb3N0Z3IuZXMvbS8yMDI2MDEyNDEwMTUueTV1dnhkN294bmZzJTQwYWx2aGVycmUucGdz cWwKLS0tCiBkb2Mvc3JjL3NnbWwvb2F1dGgtdmFsaWRhdG9ycy5zZ21sICAgICAgICAgICAgfCAy MyArKysrKysrKysrLQogc3JjL2luY2x1ZGUvbGlicHEvb2F1dGguaCAgICAgICAgICAgICAgICAg ICAgIHwgMTQgKysrKysrKwogc3JjL2JhY2tlbmQvbGlicHEvYXV0aC1vYXV0aC5jICAgICAgICAg ICAgICAgIHwgMjQgKysrKystLS0tLS0KIHNyYy9iYWNrZW5kL2xpYnBxL2F1dGguYyAgICAgICAg ICAgICAgICAgICAgICB8ICAyICstCiAuLi4vbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvdC8wMDFf c2VydmVyLnBsICAgfCA0MCArKysrKysrKysrKysrKysrKystCiBzcmMvdGVzdC9tb2R1bGVzL29h dXRoX3ZhbGlkYXRvci92YWxpZGF0b3IuYyAgfCAyOSArKysrKysrKysrKysrKwogNiBmaWxlcyBj aGFuZ2VkLCAxMTYgaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv ZG9jL3NyYy9zZ21sL29hdXRoLXZhbGlkYXRvcnMuc2dtbCBiL2RvYy9zcmMvc2dtbC9vYXV0aC12 YWxpZGF0b3JzLnNnbWwKaW5kZXggNzA0MDg5ZGQ3YjMuLjVmMjlmMmJlMTg2IDEwMDY0NAotLS0g YS9kb2Mvc3JjL3NnbWwvb2F1dGgtdmFsaWRhdG9ycy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9v YXV0aC12YWxpZGF0b3JzLnNnbWwKQEAgLTE5MiwxMSArMTkyLDIwIEBACiAgICAgIDx0ZXJtPkxv Z2dpbmc8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4KICAgICAgIDxwYXJhPgotICAgICAgIE1vZHVs ZXMgbWF5IHVzZSB0aGUgc2FtZSA8bGluayBsaW5rZW5kPSJlcnJvci1tZXNzYWdlLXJlcG9ydGlu ZyI+bG9nZ2luZworICAgICAgIFRvIHNpbXBseSBsb2cgdGhlIHJlYXNvbiBmb3IgYSB2YWxpZGF0 aW9uIGZhaWx1cmUsIG1vZHVsZXMgbWF5IHNldCB0aGUKKyAgICAgICBmcmVlZm9ybSA8c3RydWN0 ZmllbGQ+ZXJyb3JfZGV0YWlsPC9zdHJ1Y3RmaWVsZD4gZmllbGQgZHVyaW5nIHRoZQorICAgICAg IDxsaW5rIGxpbmtlbmQ9Im9hdXRoLXZhbGlkYXRvci1jYWxsYmFjay12YWxpZGF0ZSI+dmFsaWRh dGUgY2FsbGJhY2s8L2xpbms+LgorICAgICAgICg8eHJlZiBsaW5rZW5kPSJlcnJvci1zdHlsZS1n dWlkZSIvPiBoYXMgZ3VpZGVsaW5lcyBmb3Igd3JpdGluZyBnb29kCisgICAgICAgPGxpdGVyYWw+ REVUQUlMPC9saXRlcmFsPiBtZXNzYWdlcy4pIDxzdHJ1Y3RmaWVsZD5lcnJvcl9kZXRhaWw8L3N0 cnVjdGZpZWxkPgorICAgICAgIGlzIHByaW50ZWQgb25seSB0byB0aGUgc2VydmVyIGxvZywgYXMg cGFydCBvZiB0aGUgZmluYWwgYXV0aGVudGljYXRpb24KKyAgICAgICBmYWlsdXJlIG1lc3NhZ2Us IGFuZCBpdCBpcyBub3Qgc2hhcmVkIHdpdGggdGhlIGNsaWVudC4KKyAgICAgIDwvcGFyYT4KKyAg ICAgIDxwYXJhPgorICAgICAgIE1vZHVsZXMgbWF5IGFsc28gdXNlIHRoZSBzYW1lIDxsaW5rIGxp bmtlbmQ9ImVycm9yLW1lc3NhZ2UtcmVwb3J0aW5nIj5sb2dnaW5nCiAgICAgICAgZmFjaWxpdGll czwvbGluaz4gYXMgc3RhbmRhcmQgZXh0ZW5zaW9uczsgaG93ZXZlciwgdGhlIHJ1bGVzIGZvciBl bWl0dGluZwogICAgICAgIGxvZyBlbnRyaWVzIHRvIHRoZSBjbGllbnQgYXJlIHN1YnRseSBkaWZm ZXJlbnQgZHVyaW5nIHRoZSBhdXRoZW50aWNhdGlvbgogICAgICAgIHBoYXNlIG9mIHRoZSBjb25u ZWN0aW9uLiBHZW5lcmFsbHkgc3BlYWtpbmcsIG1vZHVsZXMgc2hvdWxkIGxvZwotICAgICAgIHZl cmlmaWNhdGlvbiBwcm9ibGVtcyBhdCB0aGUgPHN5bWJvbD5DT01NRVJST1I8L3N5bWJvbD4gbGV2 ZWwgYW5kIHJldHVybgorICAgICAgIHByb2JsZW1zIGF0IHRoZSA8c3ltYm9sPkNPTU1FUlJPUjwv c3ltYm9sPiBsZXZlbCBhbmQgcmV0dXJuCiAgICAgICAgbm9ybWFsbHksIGluc3RlYWQgb2YgdXNp bmcgPHN5bWJvbD5FUlJPUjwvc3ltYm9sPi88c3ltYm9sPkZBVEFMPC9zeW1ib2w+CiAgICAgICAg dG8gdW53aW5kIHRoZSBzdGFjaywgdG8gYXZvaWQgbGVha2luZyBpbmZvcm1hdGlvbiB0byB1bmF1 dGhlbnRpY2F0ZWQKICAgICAgICBjbGllbnRzLgpAQCAtMzcwLDYgKzM3OSw3IEBAIHR5cGVkZWYg c3RydWN0IFZhbGlkYXRvck1vZHVsZVJlc3VsdAogewogICAgIGJvb2wgICAgICAgIGF1dGhvcml6 ZWQ7CiAgICAgY2hhciAgICAgICAqYXV0aG5faWQ7CisgICAgY2hhciAgICAgICAqZXJyb3JfZGV0 YWlsOwogfSBWYWxpZGF0b3JNb2R1bGVSZXN1bHQ7CiA8L3Byb2dyYW1saXN0aW5nPgogCkBAIC0z ODcsNiArMzk3LDE1IEBAIHR5cGVkZWYgc3RydWN0IFZhbGlkYXRvck1vZHVsZVJlc3VsdAogICAg IE90aGVyd2lzZSB0aGUgdmFsaWRhdG9yIHNob3VsZCByZXR1cm4gPGxpdGVyYWw+dHJ1ZTwvbGl0 ZXJhbD4gdG8gaW5kaWNhdGUKICAgICB0aGF0IGl0IGhhcyBwcm9jZXNzZWQgdGhlIHRva2VuIGFu ZCBtYWRlIGFuIGF1dGhvcml6YXRpb24gZGVjaXNpb24uCiAgICA8L3BhcmE+CisgICA8cGFyYT4K KyAgICBJbiBlaXRoZXIgZmFpbHVyZSBjYXNlICh2YWxpZGF0aW9uIGVycm9yIG9yIGludGVybmFs IGVycm9yKSB0aGUgbW9kdWxlIG1heQorICAgIHN0b3JlIGEgdXNlci1yZWFkYWJsZSByZWFzb24g Zm9yIHRoZSBmYWlsdXJlIGluIDxzdHJ1Y3RmaWVsZD5yZXN1bHQtPmVycm9yX2RldGFpbDwvc3Ry dWN0ZmllbGQ+LgorICAgIFRoaXMgd2lsbCBiZSBwcmludGVkIHRvIHRoZSBzZXJ2ZXIgbG9ncyAo bm90IHNlbnQgdG8gdGhlIGNsaWVudCkgYXMgYQorICAgIDxsaXRlcmFsPkRFVEFJTDwvbGl0ZXJh bD4gZW50cnkgZm9yIHRoZSBhdXRoZW50aWNhdGlvbiBmYWlsdXJlLiBUaGUgbWVtb3J5CisgICAg cG9pbnRlZCB0byBieSA8c3RydWN0ZmllbGQ+ZXJyb3JfZGV0YWlsPC9zdHJ1Y3RmaWVsZD4gbWF5 IGJlIGVpdGhlciBwYWxsb2MnZAorICAgIG9yIG9mIHN0YXRpYyBkdXJhdGlvbi4gPHN0cnVjdGZp ZWxkPmVycm9yX2RldGFpbDwvc3RydWN0ZmllbGQ+IGlzIGlnbm9yZWQKKyAgICBvbiBzdWNjZXNz LgorICAgPC9wYXJhPgogICAgPHBhcmE+CiAgICAgVGhlIGJlaGF2aW9yIGFmdGVyIDxmdW5jdGlv bj52YWxpZGF0ZV9jYjwvZnVuY3Rpb24+IHJldHVybnMgZGVwZW5kcyBvbiB0aGUKICAgICBzcGVj aWZpYyBIQkEgc2V0dXAuICBOb3JtYWxseSwgdGhlIDxzdHJ1Y3RmaWVsZD5yZXN1bHQtPmF1dGhu X2lkPC9zdHJ1Y3RmaWVsZD4gdXNlcgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGlicHEvb2F1 dGguaCBiL3NyYy9pbmNsdWRlL2xpYnBxL29hdXRoLmgKaW5kZXggNGE4MjJlOWExZjIuLjYwZjQ5 M2FjZGRkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9saWJwcS9vYXV0aC5oCisrKyBiL3NyYy9p bmNsdWRlL2xpYnBxL29hdXRoLmgKQEAgLTQ5LDYgKzQ5LDIwIEBAIHR5cGVkZWYgc3RydWN0IFZh bGlkYXRvck1vZHVsZVJlc3VsdAogCSAqIGRlbGVnYXRpb24uIFNlZSB0aGUgdmFsaWRhdG9yIG1v ZHVsZSBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLgogCSAqLwogCWNoYXIJICAgKmF1dGhuX2lk OworCisJLyoKKwkgKiBXaGVuIHZhbGlkYXRpb24gZmFpbHMsIHRoaXMgbWF5IG9wdGlvbmFsbHkg YmUgc2V0IHRvIGEgc3RyaW5nCisJICogY29udGFpbmluZyBhbiBleHBsYW5hdGlvbiBmb3IgdGhl IGZhaWx1cmUuIEl0IHdpbGwgYmUgc2VudCB0byB0aGUKKwkgKiBzZXJ2ZXIgbG9nIG9ubHk7IGl0 IGlzIG5vdCBwcm92aWRlZCB0byB0aGUgY2xpZW50LCBhbmQgaXQncyBpZ25vcmVkIGlmCisJICog dmFsaWRhdGlvbiBzdWNjZWVkcy4KKwkgKgorCSAqIFRoaXMgZGVzY3JpcHRpb24gd2lsbCBiZSBh dHRhY2hlZCB0byB0aGUgZmluYWwgYXV0aGVudGljYXRpb24gZmFpbHVyZQorCSAqIG1lc3NhZ2Ug aW4gdGhlIGxvZ3MsIGFzIGEgREVUQUlMLCB3aGljaCBtYXkgYmUgcHJlZmVyYWJsZSB0byBzZXBh cmF0ZQorCSAqIGVyZXBvcnQoKSBjYWxscyB0aGF0IGhhdmUgdG8gYmUgY29ycmVsYXRlZCBieSB0 aGUgcmVhZGVyLgorCSAqCisJICogVGhpcyBzdHJpbmcgbWF5IGJlIGVpdGhlciBvZiBzdGF0aWMg ZHVyYXRpb24gb3IgcGFsbG9jJ2QuCisJICovCisJY2hhcgkgICAqZXJyb3JfZGV0YWlsOwogfSBW YWxpZGF0b3JNb2R1bGVSZXN1bHQ7CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9saWJw cS9hdXRoLW9hdXRoLmMgYi9zcmMvYmFja2VuZC9saWJwcS9hdXRoLW9hdXRoLmMKaW5kZXggODk0 ZWZlM2M5MDQuLjZhNzViNzllZmJmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9saWJwcS9hdXRo LW9hdXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvbGlicHEvYXV0aC1vYXV0aC5jCkBAIC03NCw3ICs3 NCw3IEBAIHN0cnVjdCBvYXV0aF9jdHgKIHN0YXRpYyBjaGFyICpzYW5pdGl6ZV9jaGFyKGNoYXIg Yyk7CiBzdGF0aWMgY2hhciAqcGFyc2Vfa3ZwYWlyc19mb3JfYXV0aChjaGFyICoqaW5wdXQpOwog c3RhdGljIHZvaWQgZ2VuZXJhdGVfZXJyb3JfcmVzcG9uc2Uoc3RydWN0IG9hdXRoX2N0eCAqY3R4 LCBjaGFyICoqb3V0cHV0LCBpbnQgKm91dHB1dGxlbik7Ci1zdGF0aWMgYm9vbCB2YWxpZGF0ZShQ b3J0ICpwb3J0LCBjb25zdCBjaGFyICphdXRoKTsKK3N0YXRpYyBib29sIHZhbGlkYXRlKFBvcnQg KnBvcnQsIGNvbnN0IGNoYXIgKmF1dGgsIGNvbnN0IGNoYXIgKipsb2dkZXRhaWwpOwogCiAvKiBD b25zdGFudHMgc2VlbiBpbiBhbiBPQVVUSEJFQVJFUiBjbGllbnQgaW5pdGlhbCByZXNwb25zZS4g Ki8KICNkZWZpbmUgS1ZTRVAgMHgwMQkJCQkvKiBzZXBhcmF0b3IgYnl0ZSBmb3Iga2V5L3ZhbHVl IHBhaXJzICovCkBAIC0zMDUsNyArMzA1LDcgQEAgb2F1dGhfZXhjaGFuZ2Uodm9pZCAqb3BhcSwg Y29uc3QgY2hhciAqaW5wdXQsIGludCBpbnB1dGxlbiwKIAkJY3R4LT5zdGF0ZSA9IE9BVVRIX1NU QVRFX0VSUk9SX0RJU0NPVkVSWTsKIAkJc3RhdHVzID0gUEdfU0FTTF9FWENIQU5HRV9DT05USU5V RTsKIAl9Ci0JZWxzZSBpZiAoIXZhbGlkYXRlKGN0eC0+cG9ydCwgYXV0aCkpCisJZWxzZSBpZiAo IXZhbGlkYXRlKGN0eC0+cG9ydCwgYXV0aCwgbG9nZGV0YWlsKSkKIAl7CiAJCWdlbmVyYXRlX2Vy cm9yX3Jlc3BvbnNlKGN0eCwgb3V0cHV0LCBvdXRwdXRsZW4pOwogCkBAIC02NTAsNyArNjUwLDcg QEAgdmFsaWRhdGVfdG9rZW5fZm9ybWF0KGNvbnN0IGNoYXIgKmhlYWRlcikKICAqIGF1dGhvcml6 YXRpb24uIFJldHVybnMgdHJ1ZSBpZiB2YWxpZGF0aW9uIHN1Y2NlZWRzLgogICovCiBzdGF0aWMg Ym9vbAotdmFsaWRhdGUoUG9ydCAqcG9ydCwgY29uc3QgY2hhciAqYXV0aCkKK3ZhbGlkYXRlKFBv cnQgKnBvcnQsIGNvbnN0IGNoYXIgKmF1dGgsIGNvbnN0IGNoYXIgKipsb2dkZXRhaWwpCiB7CiAJ aW50CQkJbWFwX3N0YXR1czsKIAlWYWxpZGF0b3JNb2R1bGVSZXN1bHQgKnJldDsKQEAgLTY3Nyw3 ICs2NzcsMTAgQEAgdmFsaWRhdGUoUG9ydCAqcG9ydCwgY29uc3QgY2hhciAqYXV0aCkKIAl7CiAJ CWVyZXBvcnQoV0FSTklORywKIAkJCQllcnJjb2RlKEVSUkNPREVfSU5URVJOQUxfRVJST1IpLAot CQkJCWVycm1zZygiaW50ZXJuYWwgZXJyb3IgaW4gT0F1dGggdmFsaWRhdG9yIG1vZHVsZSIpKTsK KwkJCQllcnJtc2coImludGVybmFsIGVycm9yIGluIE9BdXRoIHZhbGlkYXRvciBtb2R1bGUiKSwK KwkJCQlyZXQtPmVycm9yX2RldGFpbCA/IGVycmRldGFpbF9sb2coIiVzIiwgcmV0LT5lcnJvcl9k ZXRhaWwpIDogMCk7CisKKwkJKmxvZ2RldGFpbCA9IHJldC0+ZXJyb3JfZGV0YWlsOwogCQlyZXR1 cm4gZmFsc2U7CiAJfQogCkBAIC02OTAsMTAgKzY5MywxMCBAQCB2YWxpZGF0ZShQb3J0ICpwb3J0 LCBjb25zdCBjaGFyICphdXRoKQogCiAJaWYgKCFyZXQtPmF1dGhvcml6ZWQpCiAJewotCQllcmVw b3J0KExPRywKLQkJCQllcnJtc2coIk9BdXRoIGJlYXJlciBhdXRoZW50aWNhdGlvbiBmYWlsZWQg Zm9yIHVzZXIgXCIlc1wiIiwKLQkJCQkJICAgcG9ydC0+dXNlcl9uYW1lKSwKLQkJCQllcnJkZXRh aWxfbG9nKCJWYWxpZGF0b3IgZmFpbGVkIHRvIGF1dGhvcml6ZSB0aGUgcHJvdmlkZWQgdG9rZW4u IikpOworCQlpZiAocmV0LT5lcnJvcl9kZXRhaWwpCisJCQkqbG9nZGV0YWlsID0gcmV0LT5lcnJv cl9kZXRhaWw7CisJCWVsc2UKKwkJCSpsb2dkZXRhaWwgPSBfKCJWYWxpZGF0b3IgZmFpbGVkIHRv IGF1dGhvcml6ZSB0aGUgcHJvdmlkZWQgdG9rZW4uIik7CiAKIAkJc3RhdHVzID0gZmFsc2U7CiAJ CWdvdG8gY2xlYW51cDsKQEAgLTcxNCwxMCArNzE3LDcgQEAgdmFsaWRhdGUoUG9ydCAqcG9ydCwg Y29uc3QgY2hhciAqYXV0aCkKIAkvKiBNYWtlIHN1cmUgdGhlIHZhbGlkYXRvciBhdXRoZW50aWNh dGVkIHRoZSB1c2VyLiAqLwogCWlmIChyZXQtPmF1dGhuX2lkID09IE5VTEwgfHwgcmV0LT5hdXRo bl9pZFswXSA9PSAnXDAnKQogCXsKLQkJZXJlcG9ydChMT0csCi0JCQkJZXJybXNnKCJPQXV0aCBi ZWFyZXIgYXV0aGVudGljYXRpb24gZmFpbGVkIGZvciB1c2VyIFwiJXNcIiIsCi0JCQkJCSAgIHBv cnQtPnVzZXJfbmFtZSksCi0JCQkJZXJyZGV0YWlsX2xvZygiVmFsaWRhdG9yIHByb3ZpZGVkIG5v IGlkZW50aXR5LiIpKTsKKwkJKmxvZ2RldGFpbCA9IF8oIlZhbGlkYXRvciBwcm92aWRlZCBubyBp ZGVudGl0eS4iKTsKIAogCQlzdGF0dXMgPSBmYWxzZTsKIAkJZ290byBjbGVhbnVwOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvbGlicHEvYXV0aC5jIGIvc3JjL2JhY2tlbmQvbGlicHEvYXV0aC5j CmluZGV4IGZkYWNjMDYwMzgxLi40N2I1ZWViOGYyMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv bGlicHEvYXV0aC5jCisrKyBiL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGguYwpAQCAtNjM5LDcgKzYz OSw3IEBAIENsaWVudEF1dGhlbnRpY2F0aW9uKFBvcnQgKnBvcnQpCiAJCQlzdGF0dXMgPSBTVEFU VVNfT0s7CiAJCQlicmVhazsKIAkJY2FzZSB1YU9BdXRoOgotCQkJc3RhdHVzID0gQ2hlY2tTQVNM QXV0aCgmcGdfYmVfb2F1dGhfbWVjaCwgcG9ydCwgTlVMTCwgTlVMTCwKKwkJCXN0YXR1cyA9IENo ZWNrU0FTTEF1dGgoJnBnX2JlX29hdXRoX21lY2gsIHBvcnQsIE5VTEwsICZsb2dkZXRhaWwsCiAJ CQkJCQkJCSAgICZhYmFuZG9uZWQpOwogCQkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvdC8wMDFfc2VydmVyLnBsIGIvc3JjL3Rlc3QvbW9k dWxlcy9vYXV0aF92YWxpZGF0b3IvdC8wMDFfc2VydmVyLnBsCmluZGV4IGM5YzQ2ZTYzNTM5Li5h YzYyNTU1Njc1YSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Iv dC8wMDFfc2VydmVyLnBsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL3Qv MDAxX3NlcnZlci5wbApAQCAtNTQ0LDggKzU0NCw4IEBAICRub2RlLT5jb25uZWN0X2ZhaWxzKAog CWV4cGVjdGVkX3N0ZGVyciA9PiBxci9PQXV0aCBiZWFyZXIgYXV0aGVudGljYXRpb24gZmFpbGVk LywKIAlsb2dfbGlrZSA9PiBbCiAJCXFyL2Nvbm5lY3Rpb24gYXV0aGVudGljYXRlZDogaWRlbnRp dHk9IiIvLAotCQlxci9ERVRBSUw6XHMrVmFsaWRhdG9yIHByb3ZpZGVkIG5vIGlkZW50aXR5LywK IAkJcXIvRkFUQUw6XHMrT0F1dGggYmVhcmVyIGF1dGhlbnRpY2F0aW9uIGZhaWxlZC8sCisJCXFy L0RFVEFJTDpccytWYWxpZGF0b3IgcHJvdmlkZWQgbm8gaWRlbnRpdHkvLAogCV0pOwogCiAjIEV2 ZW4gaWYgYSB2YWxpZGF0b3IgYXV0aGVudGljYXRlcyB0aGUgdXNlciwgaWYgdGhlIHRva2VuIGlz bid0IGNvbnNpZGVyZWQKQEAgLTU2NCwxMCArNTY0LDQ4IEBAICRub2RlLT5jb25uZWN0X2ZhaWxz KAogCWV4cGVjdGVkX3N0ZGVyciA9PiBxci9PQXV0aCBiZWFyZXIgYXV0aGVudGljYXRpb24gZmFp bGVkLywKIAlsb2dfbGlrZSA9PiBbCiAJCXFyL2Nvbm5lY3Rpb24gYXV0aGVudGljYXRlZDogaWRl bnRpdHk9InRlc3RcQGV4YW1wbGVcLm9yZyIvLAorCQlxci9GQVRBTDpccytPQXV0aCBiZWFyZXIg YXV0aGVudGljYXRpb24gZmFpbGVkLywKIAkJcXIvREVUQUlMOlxzK1ZhbGlkYXRvciBmYWlsZWQg dG8gYXV0aG9yaXplIHRoZSBwcm92aWRlZCB0b2tlbi8sCisJXSk7CisKKyMgVmFsaWRhdG9ycyBj YW4gcHJvdmlkZSB0aGVpciBvd24gZXhwbGFuYXRpb25zLgorJGJnY29ubi0+cXVlcnlfc2FmZSgK KwkiQUxURVIgU1lTVEVNIFNFVCBvYXV0aF92YWxpZGF0b3IuZXJyb3JfZGV0YWlsIFRPICdzb21l dGhpbmcgZmFpbGVkJyIpOworJG5vZGUtPnJlbG9hZDsKKyRsb2dfc3RhcnQgPQorICAkbm9kZS0+ d2FpdF9mb3JfbG9nKHFyL3JlbG9hZGluZyBjb25maWd1cmF0aW9uIGZpbGVzLywgJGxvZ19zdGFy dCk7CisKKyRub2RlLT5jb25uZWN0X2ZhaWxzKAorCSIkY29tbW9uX2Nvbm5zdHIgdXNlcj10ZXN0 IiwKKwkidmFsaWRhdG9yIG11c3QgYXV0aG9yaXplIHRva2VuIGV4cGxpY2l0bHkgKGN1c3RvbSBs b2dkZXRhaWwpIiwKKwlleHBlY3RlZF9zdGRlcnIgPT4gcXIvT0F1dGggYmVhcmVyIGF1dGhlbnRp Y2F0aW9uIGZhaWxlZC8sCisJbG9nX2xpa2UgPT4gWworCQlxci9jb25uZWN0aW9uIGF1dGhlbnRp Y2F0ZWQ6IGlkZW50aXR5PSJ0ZXN0XEBleGFtcGxlXC5vcmciLywKIAkJcXIvRkFUQUw6XHMrT0F1 dGggYmVhcmVyIGF1dGhlbnRpY2F0aW9uIGZhaWxlZC8sCisJCXFyL0RFVEFJTDpccytzb21ldGhp bmcgZmFpbGVkLywKIAldKTsKIAorJGJnY29ubi0+cXVlcnlfc2FmZSgKKwkiQUxURVIgU1lTVEVN IFNFVCBvYXV0aF92YWxpZGF0b3IuaW50ZXJuYWxfZXJyb3IgVE8gdHJ1ZSIpOworJG5vZGUtPnJl bG9hZDsKKyRsb2dfc3RhcnQgPQorICAkbm9kZS0+d2FpdF9mb3JfbG9nKHFyL3JlbG9hZGluZyBj b25maWd1cmF0aW9uIGZpbGVzLywgJGxvZ19zdGFydCk7CisKKyRub2RlLT5jb25uZWN0X2ZhaWxz KAorCSIkY29tbW9uX2Nvbm5zdHIgdXNlcj10ZXN0IiwKKwkidmFsaWRhdG9yIGludGVybmFsIGVy cm9yIChjdXN0b20gbG9nZGV0YWlsKSIsCisJZXhwZWN0ZWRfc3RkZXJyID0+IHFyL09BdXRoIGJl YXJlciBhdXRoZW50aWNhdGlvbiBmYWlsZWQvLAorCWxvZ19saWtlID0+IFsKKwkJcXIvV0FSTklO RzpccytpbnRlcm5hbCBlcnJvciBpbiBPQXV0aCB2YWxpZGF0b3IgbW9kdWxlLywKKwkJcXIvREVU QUlMOlxzK3NvbWV0aGluZyBmYWlsZWQvLAorCV0pOworCiskYmdjb25uLT5xdWVyeV9zYWZlKCJB TFRFUiBTWVNURU0gUkVTRVQgb2F1dGhfdmFsaWRhdG9yLmVycm9yX2RldGFpbCIpOworJGJnY29u bi0+cXVlcnlfc2FmZSgiQUxURVIgU1lTVEVNIFJFU0VUIG9hdXRoX3ZhbGlkYXRvci5pbnRlcm5h bF9lcnJvciIpOworJG5vZGUtPnJlbG9hZDsKKyRsb2dfc3RhcnQgPQorICAkbm9kZS0+d2FpdF9m b3JfbG9nKHFyL3JlbG9hZGluZyBjb25maWd1cmF0aW9uIGZpbGVzLywgJGxvZ19zdGFydCk7CisK ICMKICMgVGVzdCB1c2VyIG1hcHBpbmcuCiAjCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L29hdXRoX3ZhbGlkYXRvci92YWxpZGF0b3IuYyBiL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFs aWRhdG9yL3ZhbGlkYXRvci5jCmluZGV4IDBiOTgzYTlkYzhmLi4zNTNlMGUwZDMyYSAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvdmFsaWRhdG9yLmMKKysrIGIv c3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvdmFsaWRhdG9yLmMKQEAgLTQwLDYgKzQw LDggQEAgc3RhdGljIGNvbnN0IE9BdXRoVmFsaWRhdG9yQ2FsbGJhY2tzIHZhbGlkYXRvcl9jYWxs YmFja3MgPSB7CiAvKiBHVUNzICovCiBzdGF0aWMgY2hhciAqYXV0aG5faWQgPSBOVUxMOwogc3Rh dGljIGJvb2wgYXV0aG9yaXplX3Rva2VucyA9IHRydWU7CitzdGF0aWMgY2hhciAqZXJyb3JfZGV0 YWlsID0gTlVMTDsKK3N0YXRpYyBib29sIGludGVybmFsX2Vycm9yID0gZmFsc2U7CiAKIC8qLS0t CiAgKiBFeHRlbnNpb24gZW50cnkgcG9pbnQuIFNldHMgdXAgR1VDcyBmb3IgdXNlIGJ5IHRlc3Rz OgpAQCAtNTEsNiArNTMsMTMgQEAgc3RhdGljIGJvb2wgYXV0aG9yaXplX3Rva2VucyA9IHRydWU7 CiAgKiAtIG9hdXRoX3ZhbGlkYXRvci5hdXRob3JpemVfdG9rZW5zCiAgKgkJCQkJCQkJU2V0cyB3 aGV0aGVyIHRvIHN1Y2Nlc3NmdWxseSB2YWxpZGF0ZSBpbmNvbWluZwogICoJCQkJCQkJCXRva2Vu cy4gRGVmYXVsdHMgdG8gdHJ1ZS4KKyAqCisgKiAtIG9hdXRoX3ZhbGlkYXRvci5lcnJvcl9kZXRh aWwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0cyBhbiBlcnJvciBtZXNzYWdl IHRvIGJlIGluY2x1ZGVkIGFzIGEKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVU QUlMIG9uIGZhaWx1cmUuCisgKgorICogLSBvYXV0aF92YWxpZGF0b3IuaW50ZXJuYWxfZXJyb3IK KyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVwb3J0cyBhbiBpbnRlcm5hbCBlcnJv ciB0byB0aGUgc2VydmVyLgogICovCiB2b2lkCiBfUEdfaW5pdCh2b2lkKQpAQCAtNzEsNiArODAs MjIgQEAgX1BHX2luaXQodm9pZCkKIAkJCQkJCQkgUEdDX1NJR0hVUCwKIAkJCQkJCQkgMCwKIAkJ CQkJCQkgTlVMTCwgTlVMTCwgTlVMTCk7CisJRGVmaW5lQ3VzdG9tU3RyaW5nVmFyaWFibGUoIm9h dXRoX3ZhbGlkYXRvci5lcnJvcl9kZXRhaWwiLAorCQkJCQkJCSAgICJFcnJvciBtZXNzYWdlIHRv IHByaW50IGR1cmluZyBmYWlsdXJlcyIsCisJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICAmZXJy b3JfZGV0YWlsLAorCQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJICAgUEdDX1NJR0hVUCwKKwkJCQkJ CQkgICAwLAorCQkJCQkJCSAgIE5VTEwsIE5VTEwsIE5VTEwpOworCURlZmluZUN1c3RvbUJvb2xW YXJpYWJsZSgib2F1dGhfdmFsaWRhdG9yLmludGVybmFsX2Vycm9yIiwKKwkJCQkJCQkgIlNob3Vs ZCB0aGUgdmFsaWRhdG9yIHJlcG9ydCBhbiBpbnRlcm5hbCBlcnJvcj8iLAorCQkJCQkJCSBOVUxM LAorCQkJCQkJCSAmaW50ZXJuYWxfZXJyb3IsCisJCQkJCQkJIGZhbHNlLAorCQkJCQkJCSBQR0Nf U0lHSFVQLAorCQkJCQkJCSAwLAorCQkJCQkJCSBOVUxMLCBOVUxMLCBOVUxMKTsKIAogCU1hcmtH VUNQcmVmaXhSZXNlcnZlZCgib2F1dGhfdmFsaWRhdG9yIik7CiB9CkBAIC0xMzMsNiArMTU4LDEw IEBAIHZhbGlkYXRlX3Rva2VuKGNvbnN0IFZhbGlkYXRvck1vZHVsZVN0YXRlICpzdGF0ZSwKIAkJ IE15UHJvY1BvcnQtPmhiYS0+b2F1dGhfaXNzdWVyLAogCQkgTXlQcm9jUG9ydC0+aGJhLT5vYXV0 aF9zY29wZSk7CiAKKwlyZXMtPmVycm9yX2RldGFpbCA9IGVycm9yX2RldGFpbDsJLyogb25seSBy ZWxldmFudCBmb3IgZmFpbHVyZXMgKi8KKwlpZiAoaW50ZXJuYWxfZXJyb3IpCisJCXJldHVybiBm YWxzZTsKKwogCXJlcy0+YXV0aG9yaXplZCA9IGF1dGhvcml6ZV90b2tlbnM7CiAJaWYgKGF1dGhu X2lkKQogCQlyZXMtPmF1dGhuX2lkID0gcHN0cmR1cChhdXRobl9pZCk7Ci0tIAoyLjM0LjEKCg== --000000000000aaebf1064e80dc74 Content-Type: application/octet-stream; name="v4-0002-oauth-Allow-validators-to-register-custom-HBA-opt.patch" Content-Disposition: attachment; filename="v4-0002-oauth-Allow-validators-to-register-custom-HBA-opt.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnhzhk5u1 RnJvbSA1MDM5Y2U3NDM3MGJjYTE5ZjEzM2JhYzI5ZmNjMjIwZTI0Y2I5YjIwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogVHVlLCAxNyBNYXIgMjAyNiAxMjowMToyOCAtMDcwMApTdWJqZWN0 OiBbUEFUQ0ggdjQgMi8yXSBvYXV0aDogQWxsb3cgdmFsaWRhdG9ycyB0byByZWdpc3RlciBjdXN0 b20gSEJBIG9wdGlvbnMKCk9BdXRoIHZhbGlkYXRvcnMgY2FuIGFscmVhZHkgdXNlIGN1c3RvbSBH VUNzIHRvIGNvbmZpZ3VyZSBiZWhhdmlvcgpnbG9iYWxseSwgYnV0IHdlIGN1cnJlbnRseSBwcm92 aWRlIG5vIGFiaWxpdHkgdG8gYWRqdXN0IHNldHRpbmdzIGZvcgppbmRpdmlkdWFsIEhCQSBlbnRy aWVzLCBiZWNhdXNlIHRoZSBvcmlnaW5hbCBkZXNpZ24gZm9jdXNlZCBvbiBhIHdvcmxkCndoZXJl IGEgcHJvdmlkZXIgY292ZXJlZCBhICJzaW5nbGUgYXVkaWVuY2UiIG9mIHVzZXJzIGZvciBvbmUg ZGF0YWJhc2UKY2x1c3Rlci4gVGhpcyBhc3N1bXB0aW9uIGRvZXMgbm90IGFwcGx5IHRvIG11bHRp dGVuYW50IHVzZSBjYXNlcywgd2hlcmUKYSBzaW5nbGUgdmFsaWRhdG9yIG1heSBiZSBjb250cm9s bGluZyBhY2Nlc3MgZm9yIHdpbGRseSBkaWZmZXJlbnQgdXNlcgpncm91cHMuCgpUbyBpbXByb3Zl IHRoaXMgdXNlIGNhc2UsIGFkZCB0d28gbmV3IEFQSSBjYWxscyBmb3IgdXNlIGJ5IHZhbGlkYXRv cgpjYWxsYmFja3M6IFJlZ2lzdGVyT0F1dGhIQkFPcHRpb25zKCkgYW5kIEdldE9BdXRoSEJBT3B0 aW9uKCkuClJlZ2lzdGVyaW5nIG9wdGlvbnMgImZvbyIgYW5kICJiYXIiIGFsbG93cyBhIHVzZXIg dG8gc2V0ICJ2YWxpZGF0b3IuZm9vIgphbmQgInZhbGlkYXRvci5iYXIiIGluIGFuIG9hdXRoIEhC QSBlbnRyeS4gVGhlc2Ugb3B0aW9ucyBhcmUgc3RyaW5nbHkKdHlwZWQgKHN5bnRheCB2YWxpZGF0 aW9uIGlzIHNvbGVseSB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGRlZmluaW5nCm1vZHVsZSks IGFuZCBuYW1lcyBhcmUgcmVzdHJpY3RlZCB0byBhIHN1YnNldCBvZiBBU0NJSSB0byBhdm9pZCB0 eWluZwpvdXIgaGFuZHMgd2l0aCBmdXR1cmUgSEJBIHN5bnRheCBpbXByb3ZlbWVudHMuCgpVbmZv cnR1bmF0ZWx5LCB3ZSBjYW4ndCBjaGVjayB0aGUgY3VzdG9tIG9wdGlvbiBuYW1lcyBkdXJpbmcg YSByZWxvYWQgb2YKdGhlIGNvbmZpZ3VyYXRpb24sIGxpa2Ugd2UgZG8gd2l0aCBzdGFuZGFyZCBI QkEgb3B0aW9ucywgdW5sZXNzIHdlIHdlcmUKdG8gcmVxdWlyZSBhbGwgdmFsaWRhdG9ycyB0byBi ZSBsb2FkZWQgdmlhIHNoYXJlZF9wcmVsb2FkX2xpYnJhcmllcy4KKEkgY29uc2lkZXIgdGhpcyB0 byBiZSBhIG5vbnN0YXJ0ZXI6IG1vc3QgdmFsaWRhdG9ycyBzaG91bGQgcHJvYmFibHkgdXNlCnNl c3Npb25fcHJlbG9hZF9saWJyYXJpZXMgYXQgbW9zdCwgc2luY2UgcmVxdWlyaW5nIGEgZnVsbCBy ZXN0YXJ0IG9mIGEKcHJvZHVjdGlvbiBzZXJ2ZXIganVzdCB0byB1cGRhdGUgYXV0aGVudGljYXRp b24gYmVoYXZpb3Igd2lsbCBiZQp1bmFjY2VwdGFibGUgdG8gbWFueSB1c2Vycy4pIEluc3RlYWQs IHRoZSBuZXcgdmFsaWRhdG9yLiogb3B0aW9ucyBhcmUKY2hlY2tlZCBhZ2FpbnN0IHRoZSByZWdp c3RlcmVkIGxpc3QgYXQgY29ubmVjdGlvbiB0aW1lLgoKTXVsdGlwbGUgYWx0ZXJuYXRpdmVzIHdl cmUgcHJvcG9zZWQgYW5kL29yIHByb3RvdHlwZWQsIGluY2x1ZGluZwpleHRlbmRpbmcgdGhlIEdV QyBzeXN0ZW0gdG8gYWxsb3cgcGVyLUhCQSBvdmVycmlkZXMsIGpvaW5pbmcgZm9yY2VzIHdpdGgK cmVjZW50IHJlZmFjdG9yaW5nIHdvcmsgb24gdGhlIHJlbG9wdGlvbnMgc3Vic3lzdGVtLCBhbmQg Z2l2aW5nIHRoZQphYmlsaXR5IHRvIGN1c3RvbWl6ZSBIQkEgb3B0aW9ucyB0byBhbGwgUG9zdGdy ZVNRTCBleHRlbnNpb25zLiBJCnBlcnNvbmFsbHkgYmVsaWV2ZSBwZXItSEJBIEdVQyBvdmVycmlk ZXMgYXJlIHRoZSBiZXN0IG9wdGlvbiwgYmVjYXVzZQpzZXZlcmFsIGV4aXN0aW5nIEdVQ3MgbGlr ZSBhdXRoZW50aWNhdGlvbl90aW1lb3V0IGFuZCBwcmVfYXV0aF9kZWxheQp3b3VsZCBmaXQgdGhl cmUgdXNlZnVsbHkuIEJ1dCB0aGUgcmVjZW50IGFkZGl0aW9uIG9mIFNOSSBwZXItaG9zdApzZXR0 aW5ncyBpbiA0ZjQzMzAyNWYgaW5kaWNhdGVzIHRoYXQgYSBtb3JlIGdlbmVyYWwgc29sdXRpb24g aXMgbmVlZGVkLAphbmQgSSBleHBlY3QgdGhhdCB0byB0YWtlIG11bHRpcGxlIHJlbGVhc2VzJyB3 b3J0aCBvZiBkaXNjdXNzaW9uLgoKVGhpcyBjb21wcm9taXNlIHBhdGNoLCB0aGVuLCBpcyBpbnRl bnRpb25hbGx5IGRlc2lnbmVkIHRvIGJlIGFuCmFyY2hpdGVjdHVyYWwgZGVhZCBlbmQ6IHNpbXBs ZSB0byBkZXNjcmliZSwgY2hlYXAgdG8gbWFpbnRhaW4sIGFuZApwcm92aWRpbmcganVzdCBlbm91 Z2ggZnVuY3Rpb25hbGl0eSB0byBsZXQgdmFsaWRhdG9ycyBtb3ZlIGZvcndhcmQgZm9yClBHMTku IFRoZSBob3BlIGlzIHRoYXQgaXQgd2lsbCBiZSByZXBsYWNlZCBpbiB0aGUgZnV0dXJlIGJ5IGEg c29sdXRpb24KdGhhdCBjYW4gaGFuZGxlIHBlci1ob3N0LCBwZXItSEJBLCBhbmQgb3RoZXIgcGVy LWNvbnRleHQgY29uZmlndXJhdGlvbgp3aXRoIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgdGhhdCBH VUNzIHByb3ZpZGUgdG9kYXkuIEluIHRoZSBtZWFudGltZSwKdGhlIGJ1bGsgb2YgdGhlIGNvZGUg aW4gdGhpcyBwYXRjaCBjb25zaXN0cyBvZiBzdHJpY3QgZ3VhcmRyYWlscyBvbiB0aGUKc2ltcGxl IEFQSSwgdG8gdHJ5IHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0IGhhdmUgYW55IHJlYXNvbiB0byBy ZWdyZXQgaXRzCmV4aXN0ZW5jZSBkdXJpbmcgaXRzIHVua25vd24gbGlmZXNwYW4uCgpTdWdnZXN0 ZWQtYnk6IFpzb2x0IFBhcnJhZ2kgPHpzb2x0LnBhcnJhZ2lAcGVyY29uYS5jb20+ClN1Z2dlc3Rl ZC1ieTogVkFTVUtJIE0gPHZhc3VraWFuYW5kMDExOUBnbWFpbC5jb20+CkludmVzdGlnYXRlZC1i eTogWnNvbHQgUGFycmFnaSA8enNvbHQucGFycmFnaUBwZXJjb25hLmNvbT4KUmV2aWV3ZWQtYnk6 IFpzb2x0IFBhcnJhZ2kgPHpzb2x0LnBhcnJhZ2lAcGVyY29uYS5jb20+CkRpc2N1c3Npb246IGh0 dHBzOi8vcG9zdGdyLmVzL20vQ0FONENaRk0zYjh1NXVOTk5zWTZYQ3lhMjU3dSUyQkRvZm1zM3N1 OWYxMWlNQ3h2Q2FjYWclNDBtYWlsLmdtYWlsLmNvbQotLS0KIGRvYy9zcmMvc2dtbC9jbGllbnQt YXV0aC5zZ21sICAgICAgICAgICAgICAgICB8ICAzOSArKysKIGRvYy9zcmMvc2dtbC9vYXV0aC12 YWxpZGF0b3JzLnNnbWwgICAgICAgICAgICB8IDIyMSArKysrKysrKysrKysrKysrLQogc3JjL2lu Y2x1ZGUvbGlicHEvaGJhLmggICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKIHNyYy9pbmNs dWRlL2xpYnBxL29hdXRoLmggICAgICAgICAgICAgICAgICAgICB8ICAxNSArLQogc3JjL2JhY2tl bmQvbGlicHEvYXV0aC1vYXV0aC5jICAgICAgICAgICAgICAgIHwgMjI1ICsrKysrKysrKysrKysr KysrKwogc3JjL2JhY2tlbmQvbGlicHEvaGJhLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDI2 ICsrCiAuLi4vbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvdC8wMDFfc2VydmVyLnBsICAgfCAgOTcg KysrKysrKysKIHNyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL3ZhbGlkYXRvci5jICB8 ICA0OCArKystCiA4IGZpbGVzIGNoYW5nZWQsIDY2NyBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jbGllbnQtYXV0aC5zZ21sIGIvZG9jL3Ny Yy9zZ21sL2NsaWVudC1hdXRoLnNnbWwKaW5kZXggYTM0N2VlMTg5ODAuLmJjYTA5YTgwNDE2IDEw MDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY2xpZW50LWF1dGguc2dtbAorKysgYi9kb2Mvc3JjL3Nn bWwvY2xpZW50LWF1dGguc2dtbApAQCAtMjUzMiw2ICsyNTMyLDQ1IEBAIGhvc3QgLi4uIHJhZGl1 cyByYWRpdXNzZXJ2ZXJzPSJzZXJ2ZXIxLHNlcnZlcjIiIHJhZGl1c3NlY3JldHM9IiIic2VjcmV0 IG9uZSIiLCIiCiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAg ICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0gaWQ9ImF1dGgtb2F1dGgtdmFsaWRhdG9yLW9w dGlvbiI+CisgICAgICAgPGxpdGVyYWw+dmFsaWRhdG9yLjxyZXBsYWNlYWJsZT5vcHRpb248L3Jl cGxhY2VhYmxlPjwvbGl0ZXJhbD4KKyAgICAgIDwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAg ICAgICA8cGFyYT4KKyAgICAgICAgVmFsaWRhdG9yIG1vZHVsZXMgbWF5IDxsaW5rIGxpbmtlbmQ9 Im9hdXRoLXZhbGlkYXRvci1oYmEiPmRlZmluZTwvbGluaz4KKyAgICAgICAgYWRkaXRpb25hbCBj b25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIDxsaXRlcmFsPm9hdXRoPC9saXRlcmFsPgorICAgICAg ICBIQkEgZW50cmllcy4gVGhlc2UgdmFsaWRhdG9yLXNwZWNpZmljIG9wdGlvbnMgYXJlIGFjY2Vz c2libGUgdmlhIHRoZQorICAgICAgICA8bGl0ZXJhbD52YWxpZGF0b3IuKjwvbGl0ZXJhbD4gIm5h bWVzcGFjZSIuIEZvciBleGFtcGxlLCBhIG1vZHVsZSBtYXkKKyAgICAgICAgcmVnaXN0ZXIgdGhl IDxsaXRlcmFsPnZhbGlkYXRvci5mb288L2xpdGVyYWw+IGFuZAorICAgICAgICA8bGl0ZXJhbD52 YWxpZGF0b3IuYmFyPC9saXRlcmFsPiBvcHRpb25zIGFuZCBkZWZpbmUgdGhlaXIgZWZmZWN0cyBv bgorICAgICAgICBhdXRoZW50aWNhdGlvbi4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+ CisgICAgICAgIFRoZSBuYW1lLCBzeW50YXgsIGFuZCBiZWhhdmlvciBvZiBlYWNoIDxyZXBsYWNl YWJsZT5vcHRpb248L3JlcGxhY2VhYmxlPgorICAgICAgICBhcmUgbm90IGRldGVybWluZWQgYnkg PHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPjsgY29uc3VsdCB0aGUKKyAgICAg ICAgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHZhbGlkYXRvciBtb2R1bGUgaW4gdXNlLgorICAgICAg IDwvcGFyYT4KKyAgICAgICA8d2FybmluZz4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICBBIGxp bWl0YXRpb24gb2YgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXMgdGhhdCB1bnJlY29nbml6 ZWQKKyAgICAgICAgIDxyZXBsYWNlYWJsZT5vcHRpb248L3JlcGxhY2VhYmxlPiBuYW1lcyB3aWxs IG5vdCBiZSBjYXVnaHQgdW50aWwKKyAgICAgICAgIGNvbm5lY3Rpb24gdGltZS4gQSA8bGl0ZXJh bD5wZ19jdGwgcmVsb2FkPC9saXRlcmFsPiB3aWxsIHN1Y2NlZWQsIGJ1dAorICAgICAgICAgbWF0 Y2hpbmcgY29ubmVjdGlvbnMgd2lsbCBmYWlsOgorPHByb2dyYW1saXN0aW5nPgorTE9HOiAgY29u bmVjdGlvbiByZWNlaXZlZDogaG9zdD1bbG9jYWxdCitXQVJOSU5HOiAgdW5yZWNvZ25pemVkIGF1 dGhlbnRpY2F0aW9uIG9wdGlvbiBuYW1lOiAidmFsaWRhdG9yLmJhZCIKK0RFVEFJTDogIFRoZSBp bnN0YWxsZWQgdmFsaWRhdG9yIG1vZHVsZSAoIm15X3ZhbGlkYXRvciIpIGRpZCBub3QgZGVmaW5l IGFuIG9wdGlvbiBuYW1lZCAiYmFkIi4KK0hJTlQ6ICBBbGwgT0F1dGggY29ubmVjdGlvbnMgbWF0 Y2hpbmcgdGhpcyBsaW5lIHdpbGwgZmFpbC4gQ29ycmVjdCB0aGUgb3B0aW9uIGFuZCByZWxvYWQg dGhlIHNlcnZlciBjb25maWd1cmF0aW9uLgorQ09OVEVYVDogIGxpbmUgMiBvZiBjb25maWd1cmF0 aW9uIGZpbGUgImRhdGEvcGdfaGJhLmNvbmYiCis8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAg VXNlIGNhdXRpb24gd2hlbiBtYWtpbmcgY2hhbmdlcyB0byB2YWxpZGF0b3Itc3BlY2lmaWMgSEJB IG9wdGlvbnMgaW4KKyAgICAgICAgIHByb2R1Y3Rpb24gc3lzdGVtcy4KKyAgICAgICAgPC9wYXJh PgorICAgICAgIDwvd2FybmluZz4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVu dHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48bGl0ZXJhbD5tYXA8L2xp dGVyYWw+PC90ZXJtPgogICAgICAgPGxpc3RpdGVtPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L29hdXRoLXZhbGlkYXRvcnMuc2dtbCBiL2RvYy9zcmMvc2dtbC9vYXV0aC12YWxpZGF0b3JzLnNn bWwKaW5kZXggNWYyOWYyYmUxODYuLjdjOWUzZGQ5MzFhIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3Nn bWwvb2F1dGgtdmFsaWRhdG9ycy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9vYXV0aC12YWxpZGF0 b3JzLnNnbWwKQEAgLTI1MSw2ICsyNTEsMTEgQEAKICAgICAgICA8c3ltYm9sPmRlbGVnYXRlX2lk ZW50X21hcHBpbmc9MTwvc3ltYm9sPiBtb2RlLCBhbmQgd2hhdCBhZGRpdGlvbmFsCiAgICAgICAg Y29uZmlndXJhdGlvbiBpcyByZXF1aXJlZCBpbiBvcmRlciB0byBkbyBzby4KICAgICAgIDwvcGFy YT4KKyAgICAgIDxwYXJhPgorICAgICAgIElmIGFuIGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIDxs aW5rIGxpbmtlbmQ9Im9hdXRoLXZhbGlkYXRvci1oYmEiPmN1c3RvbQorICAgICAgIEhCQSBvcHRp b25zPC9saW5rPiwgdGhlIG5hbWVzIGFuZCBzeW50YXggb2YgdGhvc2Ugb3B0aW9ucyBzaG91bGQg YmUKKyAgICAgICBkb2N1bWVudGVkIGFzIHdlbGwuCisgICAgICA8L3BhcmE+CiAgICAgIDwvbGlz dGl0ZW0+CiAgICAgPC92YXJsaXN0ZW50cnk+CiAgICA8L3ZhcmlhYmxlbGlzdD4KQEAgLTM0Myw3 ICszNDgsOCBAQCB0eXBlZGVmIGNvbnN0IE9BdXRoVmFsaWRhdG9yQ2FsbGJhY2tzICooKk9BdXRo VmFsaWRhdG9yTW9kdWxlSW5pdCkgKHZvaWQpOwogICAgPHRpdGxlPlN0YXJ0dXAgQ2FsbGJhY2s8 L3RpdGxlPgogICAgPHBhcmE+CiAgICAgVGhlIDxmdW5jdGlvbj5zdGFydHVwX2NiPC9mdW5jdGlv bj4gY2FsbGJhY2sgaXMgZXhlY3V0ZWQgZGlyZWN0bHkgYWZ0ZXIKLSAgICBsb2FkaW5nIHRoZSBt b2R1bGUuIFRoaXMgY2FsbGJhY2sgY2FuIGJlIHVzZWQgdG8gc2V0IHVwIGxvY2FsIHN0YXRlIGFu ZAorICAgIGxvYWRpbmcgdGhlIG1vZHVsZS4gVGhpcyBjYWxsYmFjayBjYW4gYmUgdXNlZCB0byBz ZXQgdXAgbG9jYWwgc3RhdGUsCisgICAgZGVmaW5lIDxsaW5rIGxpbmtlbmQ9Im9hdXRoLXZhbGlk YXRvci1oYmEiPmN1c3RvbSBIQkEgb3B0aW9uczwvbGluaz4sIGFuZAogICAgIHBlcmZvcm0gYWRk aXRpb25hbCBpbml0aWFsaXphdGlvbiBpZiByZXF1aXJlZC4gSWYgdGhlIHZhbGlkYXRvciBtb2R1 bGUKICAgICBoYXMgc3RhdGUgaXQgY2FuIHVzZSA8c3RydWN0ZmllbGQ+c3RhdGUtPnByaXZhdGVf ZGF0YTwvc3RydWN0ZmllbGQ+IHRvCiAgICAgc3RvcmUgaXQuCkBAIC00MzIsNCArNDM4LDIxNyBA QCB0eXBlZGVmIHZvaWQgKCpWYWxpZGF0b3JTaHV0ZG93bkNCKSAoVmFsaWRhdG9yTW9kdWxlU3Rh dGUgKnN0YXRlKTsKICAgPC9zZWN0Mj4KIAogIDwvc2VjdDE+CisKKyA8c2VjdDEgaWQ9Im9hdXRo LXZhbGlkYXRvci1oYmEiPgorICA8dGl0bGU+Q3VzdG9tIEhCQSBPcHRpb25zPC90aXRsZT4KKwor ICA8cGFyYT4KKyAgIExpa2Ugb3RoZXIgcHJlbG9hZGVkIGxpYnJhcmllcywgdmFsaWRhdG9yIG1v ZHVsZXMgbWF5IGRlZmluZQorICAgPGxpbmsgbGlua2VuZD0icnVudGltZS1jb25maWctY3VzdG9t Ij5jdXN0b20gR1VDIHBhcmFtZXRlcnM8L2xpbms+IGZvciB1c2VyCisgICBjb25maWd1cmF0aW9u IGluIDxmaWxlbmFtZT5wb3N0Z3Jlc3FsLmNvbmY8L2ZpbGVuYW1lPi4gSG93ZXZlciwgaXQgbWF5 IGJlCisgICBkZXNpcmFibGUgdG8gY29uZmlndXJlIGJlaGF2aW9yIGF0IGEgbW9yZSBncmFudWxh ciBsZXZlbCAoc2F5LCBmb3IgYQorICAgcGFydGljdWxhciBpc3N1ZXIgb3IgYSBncm91cCBvZiB1 c2VycykgaW5zdGVhZCBvZiBnbG9iYWxseS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgQmVn aW5uaW5nIGluIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gMTksIHZhbGlk YXRvcgorICAgaW1wbGVtZW50YXRpb25zIG1heSBkZWZpbmUgY3VzdG9tIG9wdGlvbnMgZm9yIHVz ZSBpbnNpZGUKKyAgIDxmaWxlbmFtZT5wZ19oYmEuY29uZjwvZmlsZW5hbWU+LiBUaGVzZSBvcHRp b25zIGFyZSB0aGVuCisgICA8bGluayBsaW5rZW5kPSJhdXRoLW9hdXRoLXZhbGlkYXRvci1vcHRp b24iPm1hZGUgYXZhaWxhYmxlPC9saW5rPiB0byB0aGUgdXNlcgorICAgYXMgPGxpdGVyYWw+dmFs aWRhdG9yLjxyZXBsYWNlYWJsZT5vcHRpb248L3JlcGxhY2VhYmxlPjwvbGl0ZXJhbD4uIFRoZSBB UEkKKyAgIGZvciByZWdpc3RlcmluZyBhbmQgcmV0cmlldmluZyBjdXN0b20gb3B0aW9ucyBpcyBk ZXNjcmliZWQgYmVsb3cuCisgIDwvcGFyYT4KKworICA8c2VjdDIgaWQ9Im9hdXRoLXZhbGlkYXRv ci1oYmEtYXBpIj4KKyAgIDx0aXRsZT5PcHRpb25zIEFQSTwvdGl0bGU+CisgICAgPHBhcmE+Cisg ICAgIE1vZHVsZXMgcmVnaXN0ZXIgY3VzdG9tIEhCQSBvcHRpb24gbmFtZXMgZHVyaW5nIHRoZSA8 ZnVuY3Rpb24+c3RhcnR1cF9jYjwvZnVuY3Rpb24+CisgICAgIGNhbGxiYWNrLCB1c2luZyA8ZnVu Y3Rpb24+UmVnaXN0ZXJPQXV0aEhCQU9wdGlvbnMoKTwvZnVuY3Rpb24+OgorCis8cHJvZ3JhbWxp c3Rpbmc+CisvKgorICogUmVnaXN0ZXIgYSBsaXN0IG9mIGN1c3RvbSBvcHRpb24gbmFtZXMgZm9y IHVzZSBpbiBwZ19oYmEuY29uZi4gRm9yIGVhY2ggbmFtZQorICogImZvbyIgcmVnaXN0ZXJlZCBo ZXJlLCB0aGF0IG9wdGlvbiB3aWxsIGJlIHByb3ZpZGVkIGFzICJ2YWxpZGF0b3IuZm9vIiBpbgor ICogdGhlIEhCQS4KKyAqCisgKiBWYWxpZCBvcHRpb24gbmFtZXMgY29uc2lzdCBvZiBhbHBoYW51 bWVyaWMgQVNDSUksIHVuZGVyc2NvcmUgKF8pLCBhbmQgaHlwaGVuCisgKiAoLSkuIEludmFsaWQg b3B0aW9uIG5hbWVzIHdpbGwgYmUgaWdub3JlZCB3aXRoIGEgV0FSTklORyBsb2dnZWQgYXQKKyAq IGNvbm5lY3Rpb24gdGltZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1heSBvbmx5IGJlIGNhbGxl ZCBkdXJpbmcgdGhlIHN0YXJ0dXBfY2IgY2FsbGJhY2suIE11bHRpcGxlCisgKiBjYWxscyBhcmUg cGVybWl0dGVkLCB3aGljaCB3aWxsIGFwcGVuZCB0byB0aGUgZXhpc3RpbmcgbGlzdCBvZiByZWdp c3RlcmVkCisgKiBvcHRpb25zOyBvcHRpb25zIGNhbm5vdCBiZSB1bnJlZ2lzdGVyZWQuCisgKgor ICogUGFyYW1ldGVyczoKKyAqCisgKiAtIHN0YXRlOiB0aGUgc3RhdGUgcG9pbnRlciBwYXNzZWQg dG8gdGhlIHN0YXJ0dXBfY2IgY2FsbGJhY2sKKyAqIC0gbnVtOiAgIHRoZSBudW1iZXIgb2Ygb3B0 aW9ucyBpbiB0aGUgb3B0cyBhcnJheQorICogLSBvcHRzOiAgYW4gYXJyYXkgb2YgbnVsbC10ZXJt aW5hdGVkIG9wdGlvbiBuYW1lcyB0byByZWdpc3RlcgorICoKKyAqIFRoZSBsaXN0IG9mIG9wdGlv biBuYW1lcyBpcyBjb3BpZWQgaW50ZXJuYWxseSwgYW5kIHRoZSBvcHRzIGFycmF5IGlzIG5vdAor ICogcmVxdWlyZWQgdG8gcmVtYWluIHZhbGlkIGFmdGVyIHRoZSBjYWxsLgorICovCit2b2lkIFJl Z2lzdGVyT0F1dGhIQkFPcHRpb25zKFZhbGlkYXRvck1vZHVsZVN0YXRlICpzdGF0ZSwgaW50IG51 bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqb3B0c1tdKTsKKzwv cHJvZ3JhbWxpc3Rpbmc+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgIEVhY2ggb3B0 aW9uJ3MgdmFsdWUsIGlmIHNldCwgbWF5IGJlIGxhdGVyIHJldHJpZXZlZCB1c2luZworICAgICA8 ZnVuY3Rpb24+R2V0T0F1dGhIQkFPcHRpb24oKTwvZnVuY3Rpb24+OgorCis8cHJvZ3JhbWxpc3Rp bmc+CisvKgorICogUmV0cmlldmUgdGhlIHN0cmluZyB2YWx1ZSBvZiBhbiBIQkEgb3B0aW9uIHdo aWNoIHdhcyByZWdpc3RlcmVkIHZpYQorICogUmVnaXN0ZXJPQXV0aEhCQU9wdGlvbnMoKS4gVXNh YmxlIG9ubHkgZHVyaW5nIHZhbGlkYXRlX2NiIG9yIHNodXRkb3duX2NiLgorICoKKyAqIElmIHRo ZSB1c2VyIGhhcyBzZXQgdGhlIGNvcnJlc3BvbmRpbmcgb3B0aW9uIGluIHBnX2hiYS5jb25mLCB0 aGlzIGZ1bmN0aW9uCisgKiByZXR1cm5zIHRoYXQgdmFsdWUgYXMgYSBudWxsLXRlcm1pbmF0ZWQg c3RyaW5nLCB3aGljaCBtdXN0IG5vdCBiZSBtb2RpZmllZAorICogb3IgZnJlZWQuIE5VTEwgaXMg cmV0dXJuZWQgaW5zdGVhZCBpZiB0aGUgdXNlciBoYXMgbm90IHNldCB0aGlzIG9wdGlvbiwgaWYK KyAqIHRoZSBvcHRpb24gbmFtZSB3YXMgbm90IHJlZ2lzdGVyZWQsIG9yIGlmIHRoaXMgZnVuY3Rp b24gaXMgaW5jb3JyZWN0bHkgY2FsbGVkCisgKiBkdXJpbmcgdGhlIHN0YXJ0dXBfY2IuCisgKgor ICogUGFyYW1ldGVyczoKKyAqCisgKiAtIHN0YXRlOiAgIHRoZSBzdGF0ZSBwb2ludGVyIHBhc3Nl ZCB0byB0aGUgdmFsaWRhdGVfY2Ivc2h1dGRvd25fY2IgY2FsbGJhY2sKKyAqIC0gb3B0bmFtZTog dGhlIG5hbWUgb2YgdGhlIG9wdGlvbiB0byByZXRyaWV2ZQorICovCitjb25zdCBjaGFyICpHZXRP QXV0aEhCQU9wdGlvbihjb25zdCBWYWxpZGF0b3JNb2R1bGVTdGF0ZSAqc3RhdGUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpvcHRuYW1lKTsKKzwvcHJvZ3JhbWxp c3Rpbmc+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgIFNlZSA8eHJlZiBsaW5rZW5k PSJvYXV0aC12YWxpZGF0b3ItaGJhLWV4YW1wbGUtdXNhZ2UiLz4gZm9yIHNhbXBsZSB1c2FnZS4K KyAgICA8L3BhcmE+CisgIDwvc2VjdDI+CisKKyAgPHNlY3QyIGlkPSJvYXV0aC12YWxpZGF0b3It aGJhLWxpbWl0YXRpb25zIj4KKyAgIDx0aXRsZT5MaW1pdGF0aW9uczwvdGl0bGU+CisgICA8cGFy YT4KKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAg ICAgICBPcHRpb24gbmFtZXMgYXJlIGxpbWl0ZWQgdG8gQVNDSUkgYWxwaGFudW1lcmljIGNoYXJh Y3RlcnMsCisgICAgICAgdW5kZXJzY29yZXMgKDxsaXRlcmFsPl88L2xpdGVyYWw+KSwgYW5kIGh5 cGhlbnMgKDxsaXRlcmFsPi08L2xpdGVyYWw+KS4KKyAgICAgIDwvcGFyYT4KKyAgICAgPC9saXN0 aXRlbT4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAgT3B0aW9uIHZhbHVl cyBhcmUgYWx3YXlzIGZyZWVmb3JtIHN0cmluZ3MgKGluIGNvbnRyYXN0IHRvIGN1c3RvbSBHVUNz LAorICAgICAgIHdoaWNoIHN1cHBvcnQgbnVtZXJpY3MsIGJvb2xlYW5zLCBhbmQgZW51bXMpLgor ICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8 cGFyYT4KKyAgICAgICBPcHRpb24gbmFtZXMgYW5kIHZhbHVlcyBjYW5ub3QgYmUgY2hlY2tlZCBi eSB0aGUgc2VydmVyIGR1cmluZyBhIHJlbG9hZCBvZgorICAgICAgIHRoZSBjb25maWd1cmF0aW9u LiBBbnkgdW5yZWdpc3RlcmVkIG9wdGlvbnMgaW4gPGZpbGVuYW1lPnBnX2hiYS5jb25mPC9maWxl bmFtZT4KKyAgICAgICB3aWxsIGluc3RlYWQgcmVzdWx0IGluIGNvbm5lY3Rpb24gZmFpbHVyZXMu IEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZgorICAgICAgIGVhY2ggbW9kdWxlIHRvIGRvY3Vt ZW50IGFuZCB2ZXJpZnkgdGhlIHN5bnRheCBvZiBvcHRpb24gdmFsdWVzIGFzIG5lZWRlZC4KKyAg ICAgICA8Zm9vdG5vdGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgSWYgYSBtb2R1bGUgZmlu ZHMgYW4gaW52YWxpZCBvcHRpb24gdmFsdWUgZHVyaW5nIDxmdW5jdGlvbj52YWxpZGF0ZV9jYjwv ZnVuY3Rpb24+LAorICAgICAgICAgaXQncyByZWNvbW1lbmRlZCB0byA8bGluayBsaW5rZW5kPSJv YXV0aC12YWxpZGF0b3ItY2FsbGJhY2stdmFsaWRhdGUiPnNpZ25hbAorICAgICAgICAgYW4gaW50 ZXJuYWwgZXJyb3I8L2xpbms+IGJ5IHNldHRpbmcgPHN0cnVjdGZpZWxkPnJlc3VsdC0+ZXJyb3Jf ZGV0YWlsPC9zdHJ1Y3RmaWVsZD4KKyAgICAgICAgIHRvIGEgZGVzY3JpcHRpb24gb2YgdGhlIHBy b2JsZW0gYW5kIHJldHVybmluZyA8bGl0ZXJhbD5mYWxzZTwvbGl0ZXJhbD4uCisgICAgICAgIDwv cGFyYT4KKyAgICAgICA8L2Zvb3Rub3RlPgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVt PgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgPC9wYXJhPgorICA8L3NlY3QyPgorCisgIDxzZWN0 MiBpZD0ib2F1dGgtdmFsaWRhdG9yLWhiYS1leGFtcGxlLXVzYWdlIj4KKyAgIDx0aXRsZT5FeGFt cGxlIFVzYWdlPC90aXRsZT4KKworICAgPHBhcmE+CisgICAgRm9yIGEgaHlwb3RoZXRpY2FsIG1v ZHVsZSwgdGhlIG9wdGlvbnMgPGxpdGVyYWw+Zm9vPC9saXRlcmFsPiBhbmQKKyAgICA8bGl0ZXJh bD5iYXI8L2xpdGVyYWw+IGNvdWxkIGJlIHJlZ2lzdGVyZWQgYXMgZm9sbG93czoKKworPHByb2dy YW1saXN0aW5nPgorc3RhdGljIHZvaWQKK3ZhbGlkYXRvcl9zdGFydHVwKFZhbGlkYXRvck1vZHVs ZVN0YXRlICpzdGF0ZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqb3B0c1tdID0geworICAg ICAgICAiZm9vIiwgICAgICAvKiBkZXNjcmlwdGlvbiBvZiBhY2Nlc3MgcHJpdmlsZWdlcyAqLwor ICAgICAgICAiYmFyIiwgICAgICAvKiBtYWdpYyBVUkwgZm9yIGFkZGl0aW9uYWwgYWRtaW5pc3Ry YXRvciBwb3dlcnMgKi8KKyAgICB9OworCisgICAgUmVnaXN0ZXJPQXV0aEhCQU9wdGlvbnMoc3Rh dGUsIGxlbmd0aG9mKG9wdHMpLCBvcHRzKTsKKworICAgIC8qIC4uLm90aGVyIHNldHVwLi4uICov Cit9Cis8L3Byb2dyYW1saXN0aW5nPgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBUaGUg Zm9sbG93aW5nIHNhbXBsZSBlbnRyaWVzIGluIDxmaWxlbmFtZT5wZ19oYmEuY29uZjwvZmlsZW5h bWU+IGNhbiB0aGVuCisgICAgbWFrZSB1c2Ugb2YgdGhlc2Ugb3B0aW9uczoKKworPHByb2dyYW1s aXN0aW5nPgorIyBUWVBFICAgREFUQUJBU0UgICBVU0VSICAgQUREUkVTUyAgICBNRVRIT0QKK2hv c3Rzc2wgIHBvc3RncmVzICAgYWRtaW4gIDAuMC4wLjAvMCAgb2F1dGggaXNzdWVyPWh0dHBzOi8v YWRtaW4uZXhhbXBsZS5jb20gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzY29wZT0icGctYWRtaW4gb3BlbmlkIGVtYWlsIiBcCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcD1vYXV0aC1lbWFpbCBcCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvci5mb289ImFkbWluIGFj Y2VzcyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxp ZGF0b3IuYmFyPWh0dHBzOi8vbWFnaWMuZXhhbXBsZS5jb20KKworaG9zdHNzbCAgcG9zdGdyZXMg ICBhbGwgICAgMC4wLjAuMC8wICBvYXV0aCBpc3N1ZXI9aHR0cHM6Ly93d3cuZXhhbXBsZS5jb20g XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZT0icGct dXNlciBvcGVuaWQgZW1haWwiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbWFwPW9hdXRoLWVtYWlsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdmFsaWRhdG9yLmZvbz0idXNlciBhY2Nlc3MiCis8L3Byb2dyYW1saXN0 aW5nPgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBUaGUgbW9kdWxlIGNhbiByZXRyaWV2 ZSB0aGUgb3B0aW9uIHNldHRpbmdzIGZyb20gdGhlIEhCQSBkdXJpbmcgdmFsaWRhdGlvbjoKKwor PHByb2dyYW1saXN0aW5nPgorc3RhdGljIGJvb2wKK3ZhbGlkYXRlX3Rva2VuKGNvbnN0IFZhbGlk YXRvck1vZHVsZVN0YXRlICpzdGF0ZSwKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRva2Vu LCBjb25zdCBjaGFyICpyb2xlLAorICAgICAgICAgICAgICAgVmFsaWRhdG9yTW9kdWxlUmVzdWx0 ICpyZXMpCit7CisgICAgY29uc3QgY2hhciAqZm9vID0gR2V0T0F1dGhIQkFPcHRpb24oc3RhdGUs ICJmb28iKTsgLyogImFkbWluIGFjY2VzcyIgb3IgInVzZXIgYWNjZXNzIiAqLworICAgIGNvbnN0 IGNoYXIgKmJhciA9IEdldE9BdXRoSEJBT3B0aW9uKHN0YXRlLCAiYmFyIik7IC8qICJodHRwczov L21hZ2ljLmV4YW1wbGUuY29tIiBvciBOVUxMICovCisKKyAgICBpZiAoYmFyICZhbXA7JmFtcDsg IWlzX3ZhbGlkX3VybChiYXIpKQorICAgIHsKKyAgICAgICAgcmVzLT5lcnJvcl9kZXRhaWwgPSBw c3ByaW50ZigidmFsaWRhdG9yLmJhciAoXCIlc1wiKSBpcyBub3QgYSB2YWxpZCBVUkwuIiwgYmFy KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qIHByb2NlZWQgdG8gdmFs aWRhdGUgdG9rZW4gKi8KK30KKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICA8L3BhcmE+CisKKyAgIDxw YXJhPgorICAgIFdoZW4gbXVsdGlwbGUgdmFsaWRhdG9ycyBhcmUgaW4gdXNlLCB0aGVpciByZWdp c3RlcmVkIG9wdGlvbiBsaXN0cyByZW1haW4KKyAgICBpbmRlcGVuZGVudDoKKworPHByb2dyYW1s aXN0aW5nPgorPGxpbmVhbm5vdGF0aW9uPmluIHBvc3RncmVzcWwuY29uZjo8L2xpbmVhbm5vdGF0 aW9uPgorb2F1dGhfdmFsaWRhdG9yX2xpYnJhcmllcyA9ICdleGFtcGxlX29yZywgbXlfdmFsaWRh dG9yJworCis8bGluZWFubm90YXRpb24+aW4gcGdfaGJhLmNvbmY6PC9saW5lYW5ub3RhdGlvbj4K KyMgVFlQRSAgIERBVEFCQVNFICAgVVNFUiAgIEFERFJFU1MgICAgTUVUSE9ECitob3N0c3NsICBw b3N0Z3JlcyAgIGFkbWluICAwLjAuMC4wLzAgIG9hdXRoIGlzc3Vlcj1odHRwczovL2FkbWluLmV4 YW1wbGUuY29tIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2NvcGU9InBnLWFkbWluIG9wZW5pZCBlbWFpbCIgXAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBtYXA9b2F1dGgtZW1haWwgXAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3I9bXlfdmFsaWRhdG9yIFwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yLmZvbz0iYWRt aW4gYWNjZXNzIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZhbGlkYXRvci5iYXI9aHR0cHM6Ly9tYWdpYy5leGFtcGxlLmNvbQorCitob3N0c3NsICBwb3N0 Z3JlcyAgIGFsbCAgICAwLjAuMC4wLzAgIG9hdXRoIGlzc3Vlcj1odHRwczovL3d3dy5leGFtcGxl Lm9yZyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3Bl PSJwZy11c2VyIG9wZW5pZCBwcm9maWxlIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZhbGlkYXRvcj1leGFtcGxlX29yZyBcCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGVnYXRlX2lkZW50X21hcHBpbmc9MSBcCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvci5tYWdp Yz1vbiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlk YXRvci5tb3JlX21hZ2ljPW9mZgorPC9wcm9ncmFtbGlzdGluZz4KKyAgIDwvcGFyYT4KKyAgPC9z ZWN0Mj4KKyA8L3NlY3QxPgogPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGli cHEvaGJhLmggYi9zcmMvaW5jbHVkZS9saWJwcS9oYmEuaAppbmRleCBjNDU3MGNlOWIzZi4uZTg4 OTg1NjFjOGMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2xpYnBxL2hiYS5oCisrKyBiL3NyYy9p bmNsdWRlL2xpYnBxL2hiYS5oCkBAIC0xNDAsNiArMTQwLDggQEAgdHlwZWRlZiBzdHJ1Y3QgSGJh TGluZQogCWNoYXIJICAgKm9hdXRoX3Njb3BlOwogCWNoYXIJICAgKm9hdXRoX3ZhbGlkYXRvcjsK IAlib29sCQlvYXV0aF9za2lwX3VzZXJtYXA7CisJTGlzdAkgICAqb2F1dGhfb3B0X2tleXM7CisJ TGlzdAkgICAqb2F1dGhfb3B0X3ZhbHM7CiB9IEhiYUxpbmU7CiAKIHR5cGVkZWYgc3RydWN0IElk ZW50TGluZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGlicHEvb2F1dGguaCBiL3NyYy9pbmNs dWRlL2xpYnBxL29hdXRoLmgKaW5kZXggNjBmNDkzYWNkZGQuLjg2ZjQ2M2EyODRlIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9saWJwcS9vYXV0aC5oCisrKyBiL3NyYy9pbmNsdWRlL2xpYnBxL29h dXRoLmgKQEAgLTk2LDYgKzk2LDE3IEBAIHR5cGVkZWYgc3RydWN0IE9BdXRoVmFsaWRhdG9yQ2Fs bGJhY2tzCiAJVmFsaWRhdG9yVmFsaWRhdGVDQiB2YWxpZGF0ZV9jYjsKIH0gT0F1dGhWYWxpZGF0 b3JDYWxsYmFja3M7CiAKKy8qCisgKiBBIHZhbGlkYXRvciBjYW4gcmVnaXN0ZXIgYSBsaXN0IG9m IGN1c3RvbSBvcHRpb24gbmFtZXMgZHVyaW5nIGl0cyBzdGFydHVwX2NiLAorICogdGhlbiBsYXRl ciByZXRyaWV2ZSB0aGUgdXNlciBzZXR0aW5ncyBmb3IgZWFjaCBkdXJpbmcgdmFsaWRhdGlvbi4g VGhpcworICogZW5hYmxlcyBwZXItSEJBLWxpbmUgY29uZmlndXJhdGlvbi4gRm9yIG1vcmUgaW5m b3JtYXRpb24sIHJlZmVyIHRvIHRoZSBPQXV0aAorICogdmFsaWRhdG9yIG1vZHVsZXMgZG9jdW1l bnRhdGlvbi4KKyAqLworZXh0ZXJuIHZvaWQgUmVnaXN0ZXJPQXV0aEhCQU9wdGlvbnMoVmFsaWRh dG9yTW9kdWxlU3RhdGUgKnN0YXRlLCBpbnQgbnVtLAorCQkJCQkJCQkJY29uc3QgY2hhciAqb3B0 c1tdKTsKK2V4dGVybiBjb25zdCBjaGFyICpHZXRPQXV0aEhCQU9wdGlvbihjb25zdCBWYWxpZGF0 b3JNb2R1bGVTdGF0ZSAqc3RhdGUsCisJCQkJCQkJCQkgY29uc3QgY2hhciAqb3B0bmFtZSk7CisK IC8qCiAgKiBUeXBlIG9mIHRoZSBzaGFyZWQgbGlicmFyeSBzeW1ib2wgX1BHX29hdXRoX3ZhbGlk YXRvcl9tb2R1bGVfaW5pdCB3aGljaCBpcwogICogcmVxdWlyZWQgZm9yIGFsbCB2YWxpZGF0b3Ig bW9kdWxlcy4gIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIGR1cmluZwpAQCAtMTA3LDkg KzExOCw3IEBAIGV4dGVybiBQR0RMTEVYUE9SVCBjb25zdCBPQXV0aFZhbGlkYXRvckNhbGxiYWNr cyAqX1BHX29hdXRoX3ZhbGlkYXRvcl9tb2R1bGVfaW5pCiAvKiBJbXBsZW1lbnRhdGlvbiAqLwog ZXh0ZXJuIFBHRExMSU1QT1JUIGNvbnN0IHBnX2JlX3Nhc2xfbWVjaCBwZ19iZV9vYXV0aF9tZWNo OwogCi0vKgotICogRW5zdXJlIGEgdmFsaWRhdG9yIG5hbWVkIGluIHRoZSBIQkEgaXMgcGVybWl0 dGVkIGJ5IHRoZSBjb25maWd1cmF0aW9uLgotICovCiBleHRlcm4gYm9vbCBjaGVja19vYXV0aF92 YWxpZGF0b3IoSGJhTGluZSAqaGJhbGluZSwgaW50IGVsZXZlbCwgY2hhciAqKmVycl9tc2cpOwor ZXh0ZXJuIGJvb2wgdmFsaWRfb2F1dGhfaGJhX29wdGlvbl9uYW1lKGNvbnN0IGNoYXIgKm5hbWUp OwogCiAjZW5kaWYJCQkJCQkJLyogUEdfT0FVVEhfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvbGlicHEvYXV0aC1vYXV0aC5jIGIvc3JjL2JhY2tlbmQvbGlicHEvYXV0aC1vYXV0aC5jCmlu ZGV4IDZhNzViNzllZmJmLi5lYTM0ZWJkYjczMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbGli cHEvYXV0aC1vYXV0aC5jCisrKyBiL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGgtb2F1dGguYwpAQCAt MjUsNiArMjUsNyBAQAogI2luY2x1ZGUgImxpYnBxL2hiYS5oIgogI2luY2x1ZGUgImxpYnBxL29h dXRoLmgiCiAjaW5jbHVkZSAibGlicHEvc2FzbC5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgog I2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgogI2luY2x1 ZGUgInV0aWxzL2pzb24uaCIKQEAgLTQwLDEwICs0MSwxNSBAQCBzdGF0aWMgaW50CW9hdXRoX2V4 Y2hhbmdlKHZvaWQgKm9wYXEsIGNvbnN0IGNoYXIgKmlucHV0LCBpbnQgaW5wdXRsZW4sCiAKIHN0 YXRpYyB2b2lkIGxvYWRfdmFsaWRhdG9yX2xpYnJhcnkoY29uc3QgY2hhciAqbGlibmFtZSk7CiBz dGF0aWMgdm9pZCBzaHV0ZG93bl92YWxpZGF0b3JfbGlicmFyeSh2b2lkICphcmcpOworc3RhdGlj IGJvb2wgY2hlY2tfdmFsaWRhdG9yX2hiYV9vcHRpb25zKFBvcnQgKnBvcnQsIGNvbnN0IGNoYXIg Kipsb2dkZXRhaWwpOwogCiBzdGF0aWMgVmFsaWRhdG9yTW9kdWxlU3RhdGUgKnZhbGlkYXRvcl9t b2R1bGVfc3RhdGU7CiBzdGF0aWMgY29uc3QgT0F1dGhWYWxpZGF0b3JDYWxsYmFja3MgKlZhbGlk YXRvckNhbGxiYWNrczsKIAorc3RhdGljIE1lbW9yeUNvbnRleHQgVmFsaWRhdG9yTWVtb3J5Q29u dGV4dDsKK3N0YXRpYyBMaXN0ICpWYWxpZGF0b3JPcHRpb25zOworc3RhdGljIGJvb2wgVmFsaWRh dG9yT3B0aW9uc0NoZWNrZWQ7CisKIC8qIE1lY2hhbmlzbSBkZWNsYXJhdGlvbiAqLwogY29uc3Qg cGdfYmVfc2FzbF9tZWNoIHBnX2JlX29hdXRoX21lY2ggPSB7CiAJLmdldF9tZWNoYW5pc21zID0g b2F1dGhfZ2V0X21lY2hhbmlzbXMsCkBAIC0xMDksNiArMTE1LDkgQEAgb2F1dGhfaW5pdChQb3J0 ICpwb3J0LCBjb25zdCBjaGFyICpzZWxlY3RlZF9tZWNoLCBjb25zdCBjaGFyICpzaGFkb3dfcGFz cykKIAkJCQllcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKIAkJCQllcnJtc2co ImNsaWVudCBzZWxlY3RlZCBhbiBpbnZhbGlkIFNBU0wgYXV0aGVudGljYXRpb24gbWVjaGFuaXNt IikpOwogCisJLyogU2F2ZSBvdXIgbWVtb3J5IGNvbnRleHQgZm9yIGxhdGVyIHVzZSBieSBjbGll bnQgQVBJIGNhbGxzLiAqLworCVZhbGlkYXRvck1lbW9yeUNvbnRleHQgPSBDdXJyZW50TWVtb3J5 Q29udGV4dDsKKwogCWN0eCA9IHBhbGxvYzBfb2JqZWN0KHN0cnVjdCBvYXV0aF9jdHgpOwogCiAJ Y3R4LT5zdGF0ZSA9IE9BVVRIX1NUQVRFX0lOSVQ7CkBAIC0yOTMsNiArMzAyLDE2IEBAIG9hdXRo X2V4Y2hhbmdlKHZvaWQgKm9wYXEsIGNvbnN0IGNoYXIgKmlucHV0LCBpbnQgaW5wdXRsZW4sCiAJ CQkJZXJybXNnKCJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIpLAogCQkJCWVycmRldGFp bCgiTWVzc2FnZSBjb250YWlucyBhZGRpdGlvbmFsIGRhdGEgYWZ0ZXIgdGhlIGZpbmFsIHRlcm1p bmF0b3IuIikpOwogCisJLyoKKwkgKiBNYWtlIHN1cmUgYWxsIGN1c3RvbSBIQkEgb3B0aW9ucyBh cmUgdW5kZXJzdG9vZCBieSB0aGUgdmFsaWRhdG9yIGJlZm9yZQorCSAqIGNvbnRpbnVpbmcsIHNp bmNlIHdlIGNvdWxkbid0IGNoZWNrIHRoZW0gZHVyaW5nIHNlcnZlciBzdGFydC9yZWxvYWQuCisJ ICovCisJaWYgKCFjaGVja192YWxpZGF0b3JfaGJhX29wdGlvbnMoY3R4LT5wb3J0LCBsb2dkZXRh aWwpKQorCXsKKwkJY3R4LT5zdGF0ZSA9IE9BVVRIX1NUQVRFX0ZJTklTSEVEOworCQlyZXR1cm4g UEdfU0FTTF9FWENIQU5HRV9GQUlMVVJFOworCX0KKwogCWlmIChhdXRoWzBdID09ICdcMCcpCiAJ ewogCQkvKgpAQCAtODIyLDYgKzg0MSw5IEBAIHNodXRkb3duX3ZhbGlkYXRvcl9saWJyYXJ5KHZv aWQgKmFyZykKIHsKIAlpZiAoVmFsaWRhdG9yQ2FsbGJhY2tzLT5zaHV0ZG93bl9jYiAhPSBOVUxM KQogCQlWYWxpZGF0b3JDYWxsYmFja3MtPnNodXRkb3duX2NiKHZhbGlkYXRvcl9tb2R1bGVfc3Rh dGUpOworCisJLyogVGhlIGJhY2tpbmcgbWVtb3J5IGZvciB0aGlzIGlzIGFib3V0IHRvIGRpc2Fw cGVhci4gKi8KKwlWYWxpZGF0b3JPcHRpb25zID0gTklMOwogfQogCiAvKgpAQCAtOTA3LDMgKzky OSwyMDYgQEAgZG9uZToKIAogCXJldHVybiAoKmVycl9tc2cgPT0gTlVMTCk7CiB9CisKKy8qCisg KiBDbGllbnQgQVBJcyBmb3IgdmFsaWRhdG9yIGltcGxlbWVudGF0aW9ucworICoKKyAqIFNpbmNl IHdlJ3JlIGN1cnJlbnRseSBub3QgdGhyZWFkZWQsIHdlIG9ubHkgYWxsb3cgb25lIHZhbGlkYXRv ciBpbiB0aGUKKyAqIHByb2Nlc3MgYXQgYSB0aW1lLiBTbyB3ZSBjYW4gbWFrZSB1c2Ugb2YgZ2xv YmFscyBmb3Igbm93IGluc3RlYWQgb2YgbG9va2luZworICogdXAgaW5mb3JtYXRpb24gdXNpbmcg dGhlIHN0YXRlIHBvaW50ZXIuIFdlIHByb2JhYmx5IHNob3VsZG4ndCBhc3N1bWUgdGhhdCB0aGUK KyAqIG1vZHVsZSBoYXNuJ3QgdGVtcG9yYXJpbHkgY2hhbmdlZCBtZW1vcnkgY29udGV4dHMgb24g dXMsIHRob3VnaDsgZnVuY3Rpb25zCisgKiBoZXJlIHNob3VsZCBkZWZlbnNpdmVseSB1c2UgYW4g YXBwcm9wcmlhdGUgY29udGV4dCB3aGVuIG1ha2luZyBnbG9iYWwKKyAqIGFsbG9jYXRpb25zLgor ICovCisKKy8qCisgKiBBZGRzIHRvIHRoZSBsaXN0IG9mIGFsbG93ZWQgdmFsaWRhdG9yLiogSEJB IG9wdGlvbnMuIFVzZWQgZHVyaW5nIHRoZQorICogc3RhcnR1cF9jYi4KKyAqLwordm9pZAorUmVn aXN0ZXJPQXV0aEhCQU9wdGlvbnMoVmFsaWRhdG9yTW9kdWxlU3RhdGUgKnN0YXRlLCBpbnQgbnVt LAorCQkJCQkJY29uc3QgY2hhciAqb3B0c1tdKQoreworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4 dDsKKworCWlmICghc3RhdGUpCisJeworCQlBc3NlcnQoZmFsc2UpOworCQlyZXR1cm47CisJfQor CisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhWYWxpZGF0b3JNZW1vcnlDb250 ZXh0KTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtOyBpKyspCisJeworCQlpZiAoIXZhbGlk X29hdXRoX2hiYV9vcHRpb25fbmFtZShvcHRzW2ldKSkKKwkJeworCQkJLyoKKwkJCSAqIFRoZSB1 c2VyIGNhbid0IHNldCB0aGlzIG9wdGlvbiBpbiB0aGUgSEJBLCBzbyBHZXRPQXV0aEhCQU9wdGlv bgorCQkJICogd291bGQgYWx3YXlzIHJldHVybiBOVUxMLgorCQkJICovCisJCQllcmVwb3J0KFdB Uk5JTkcsCisJCQkJCWVycm1zZygiSEJBIG9wdGlvbiBuYW1lIFwiJXNcIiBpcyBpbnZhbGlkIGFu ZCB3aWxsIGJlIGlnbm9yZWQiLAorCQkJCQkJICAgb3B0c1tpXSksCisJCQkvKiB0cmFuc2xhdG9y OiB0aGUgc2Vjb25kICVzIGlzIGEgZnVuY3Rpb24gbmFtZSAqLworCQkJCQllcnJjb250ZXh0KCJ2 YWxpZGF0b3IgbW9kdWxlIFwiJXNcIiwgaW4gY2FsbCB0byAlcyIsCisJCQkJCQkJICAgTXlQcm9j UG9ydC0+aGJhLT5vYXV0aF92YWxpZGF0b3IsCisJCQkJCQkJICAgIlJlZ2lzdGVyT0F1dGhIQkFP cHRpb25zIikpOworCQkJY29udGludWU7CisJCX0KKworCQlWYWxpZGF0b3JPcHRpb25zID0gbGFw cGVuZChWYWxpZGF0b3JPcHRpb25zLCBwc3RyZHVwKG9wdHNbaV0pKTsKKwl9CisKKwlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwkvKgorCSAqIFdhaXQgdG8gdmFsaWRhdGUg dGhlIEhCQSBhZ2FpbnN0IHRoZSByZWdpc3RlcmVkIG9wdGlvbnMgdW50aWwgbGF0ZXIKKwkgKiAo c2VlIGNoZWNrX3ZhbGlkYXRvcl9oYmFfb3B0aW9ucygpKS4KKwkgKgorCSAqIERlbGF5aW5nIGFs bG93cyB0aGUgdmFsaWRhdG9yIHRvIG1ha2UgbXVsdGlwbGUgcmVnaXN0cmF0aW9uIGNhbGxzLCB0 bworCSAqIGFwcGVuZCB0byB0aGUgbGlzdDsgaXQgbGV0cyB1cyBtYWtlIHRoZSBjaGVjayBpbiBh IHBsYWNlIHdoZXJlIHdlIGNhbgorCSAqIHJlcG9ydCB0aGUgZXJyb3Igd2l0aG91dCBsZWFraW5n IGRldGFpbHMgdG8gdGhlIGNsaWVudDsgYW5kIGl0IGF2b2lkcworCSAqIGV4cG9ydGluZyB0aGUg b3JkZXIgb2Ygb3BlcmF0aW9ucyBiZXR3ZWVuIEhCQSBtYXRjaGluZyBhbmQgdGhlCisJICogc3Rh cnR1cF9jYiBjYWxsIGFzIGFuIEFQSSBndWFyYW50ZWUuIChUaGUgbGFzdCBpc3N1ZSBtYXkgYmVj b21lCisJICogcmVsZXZhbnQgd2l0aCBhIHRocmVhZGVkIG1vZGVsLikKKwkgKi8KK30KKworLyoK KyAqIFJlc3RyaWN0IHRoZSBuYW1lcyBhdmFpbGFibGUgdG8gY3VzdG9tIEhCQSBvcHRpb25zLCBz byB0aGF0IHdlIGRvbid0CisgKiBhY2NpZGVudGFsbHkgcHJldmVudCBmdXR1cmUgc3ludGF4IGV4 dGVuc2lvbnMgdG8gSEJBIGZpbGVzLgorICovCitib29sCit2YWxpZF9vYXV0aF9oYmFfb3B0aW9u X25hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwkvKgorCSAqIFRoaXMgbGlzdCBpcyBub3QgaW5j cmVkaWJseSBwcmluY2lwbGVkLCBzaW5jZSB0aGUgZ29hbCBpcyBqdXN0IHRvIGJvdW5kCisJICog Y29tcGF0aWJpbGl0eSBndWFyYW50ZWVzIGZvciBvdXIgSEJBIHBhcnNlci4gQWxwaGFudW1lcmlj cyBzZWVtCisJICogb2J2aW91c2x5IGZpbmUsIGFuZCBpdCdzIGRpZmZpY3VsdCB0byBhcmd1ZSBh Z2FpbnN0IHRoZSBwdW5jdHVhdGlvbgorCSAqIHRoYXQncyBhbHJlYWR5IGluY2x1ZGVkIGluIHNv bWUgSEJBIG9wdGlvbiBuYW1lcyBhbmQgaWRlbnRpZmllcnMuCisJICovCisJc3RhdGljIGNvbnN0 IGNoYXIgKm5hbWVfYWxsb3dlZF9zZXQgPQorCQkiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoi CisJCSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIKKwkJIjAxMjM0NTY3ODlfLSI7CisKKwlz aXplX3QJCXNwYW47CisKKwlpZiAoIW5hbWVbMF0pCisJCXJldHVybiBmYWxzZTsKKworCXNwYW4g PSBzdHJzcG4obmFtZSwgbmFtZV9hbGxvd2VkX3NldCk7CisJcmV0dXJuIG5hbWVbc3Bhbl0gPT0g J1wwJzsKK30KKworLyoKKyAqIFZlcmlmaWVzIHRoYXQgYWxsIHZhbGlkYXRvci4qIEhCQSBvcHRp b25zIHNwZWNpZmllZCBieSB0aGUgdXNlciB3ZXJlIGFjdHVhbGx5CisgKiByZWdpc3RlcmVkIGJ5 IHRoZSB2YWxpZGF0b3IgbGlicmFyeSBpbiB1c2UuCisgKi8KK3N0YXRpYyBib29sCitjaGVja192 YWxpZGF0b3JfaGJhX29wdGlvbnMoUG9ydCAqcG9ydCwgY29uc3QgY2hhciAqKmxvZ2RldGFpbCkK K3sKKwlIYmFMaW5lICAgICpoYmEgPSBwb3J0LT5oYmE7CisKKwlmb3JlYWNoX3B0cihjaGFyLCBr ZXksIGhiYS0+b2F1dGhfb3B0X2tleXMpCisJeworCQlib29sCQlmb3VuZCA9IGZhbHNlOworCisJ CS8qIE8obl4yKSBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtIGhlcmUgaW4gcHJhY3RpY2UuICovCisJ CWZvcmVhY2hfcHRyKGNoYXIsIG9wdG5hbWUsIFZhbGlkYXRvck9wdGlvbnMpCisJCXsKKwkJCWlm IChzdHJjbXAoa2V5LCBvcHRuYW1lKSA9PSAwKQorCQkJeworCQkJCWZvdW5kID0gdHJ1ZTsKKwkJ CQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICghZm91bmQpCisJCXsKKwkJCS8qCisJCQkgKiBV bmtub3duIG9wdGlvbiBuYW1lLiBNaXJyb3IgdGhlIGVycm9yIG1lc3NhZ2VzIGluIGhiYS5jIGhl cmUsCisJCQkgKiBrZWVwaW5nIGluIG1pbmQgdGhhdCB0aGUgb3JpZ2luYWwgInZhbGlkYXRvci4i IHByZWZpeCB3YXMKKwkJCSAqIHN0cmlwcGVkIGZyb20gdGhlIGtleSBkdXJpbmcgcGFyc2luZy4K KwkJCSAqCisJCQkgKiBTaW5jZSB0aGlzIGlzIGFmZmVjdGluZyBsaXZlIGNvbm5lY3Rpb25zLCB3 aGljaCBpcyB1bnVzdWFsIGZvcgorCQkJICogSEJBLCBiZSBub2lzeSB3aXRoIGEgV0FSTklORy4g KFdhcm5pbmdzIGFyZW4ndCBzZW50IHRvIGNsaWVudHMKKwkJCSAqIHByaW9yIHRvIHN1Y2Nlc3Nm dWwgYXV0aGVudGljYXRpb24sIHNvIHRoaXMgd29uJ3QgZGlzY2xvc2UgdGhlCisJCQkgKiBzZXJ2 ZXIgY29uZmlnLikgSXQnbGwgZHVwbGljYXRlIHNvbWUgb2YgdGhlIGluZm9ybWF0aW9uIGluIHRo ZQorCQkJICogbG9nZGV0YWlsLCBidXQgdGhhdCBzaG91bGQgbWFrZSBpdCBoYXJkIHRvIG1pc3Mg dGhlIGNvbm5lY3Rpb24KKwkJCSAqIGJldHdlZW4gdGhlIHR3by4KKwkJCSAqLworCQkJY2hhcgkg ICAqbmFtZSA9IHBzcHJpbnRmKCJ2YWxpZGF0b3IuJXMiLCBrZXkpOworCisJCQkqbG9nZGV0YWls ID0gcHNwcmludGYoXygidW5yZWNvZ25pemVkIGF1dGhlbnRpY2F0aW9uIG9wdGlvbiBuYW1lOiBc IiVzXCIiKSwKKwkJCQkJCQkJICBuYW1lKTsKKwkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJZXJy Y29kZShFUlJDT0RFX0NPTkZJR19GSUxFX0VSUk9SKSwKKwkJCQkJZXJybXNnKCJ1bnJlY29nbml6 ZWQgYXV0aGVudGljYXRpb24gb3B0aW9uIG5hbWU6IFwiJXNcIiIsCisJCQkJCQkgICBuYW1lKSwK KwkJCS8qIHRyYW5zbGF0b3I6IHRoZSBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxl ICovCisJCQkJCWVycmRldGFpbCgiVGhlIGluc3RhbGxlZCB2YWxpZGF0b3IgbW9kdWxlIChcIiVz XCIpIGRpZCBub3QgZGVmaW5lIGFuIG9wdGlvbiBuYW1lZCBcIiVzXCIuIiwKKwkJCQkJCQkgIGhi YS0+b2F1dGhfdmFsaWRhdG9yLCBrZXkpLAorCQkJCQllcnJoaW50KCJBbGwgT0F1dGggY29ubmVj dGlvbnMgbWF0Y2hpbmcgdGhpcyBsaW5lIHdpbGwgZmFpbC4gQ29ycmVjdCB0aGUgb3B0aW9uIGFu ZCByZWxvYWQgdGhlIHNlcnZlciBjb25maWd1cmF0aW9uLiIpLAorCQkJCQllcnJjb250ZXh0KCJs aW5lICVkIG9mIGNvbmZpZ3VyYXRpb24gZmlsZSBcIiVzXCIiLAorCQkJCQkJCSAgIGhiYS0+bGlu ZW51bWJlciwgaGJhLT5zb3VyY2VmaWxlKSk7CisKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0K KworCVZhbGlkYXRvck9wdGlvbnNDaGVja2VkID0gdHJ1ZTsgLyogdW5mZXR0ZXIgR2V0T0F1dGhI QkFPcHRpb24oKSAqLworCXJldHVybiB0cnVlOworfQorCisvKgorICogUmV0cmlldmVzIHRoZSBz ZXR0aW5nIGZvciBhIHZhbGlkYXRvci4qIEhCQSBvcHRpb24sIG9yIE5VTEwgaWYgbm90IGZvdW5k LgorICogVGhpcyBtYXkgb25seSBiZSB1c2VkIGR1cmluZyB0aGUgdmFsaWRhdGVfY2IgYW5kIHNo dXRkb3duX2NiLgorICovCitjb25zdCBjaGFyICoKK0dldE9BdXRoSEJBT3B0aW9uKGNvbnN0IFZh bGlkYXRvck1vZHVsZVN0YXRlICpzdGF0ZSwgY29uc3QgY2hhciAqb3B0bmFtZSkKK3sKKwlIYmFM aW5lICAgICpoYmEgPSBNeVByb2NQb3J0LT5oYmE7CisJTGlzdENlbGwgICAqbGNfazsKKwlMaXN0 Q2VsbCAgICpsY192OworCWNvbnN0IGNoYXIgKnJldCA9IE5VTEw7CisKKwlpZiAoIVZhbGlkYXRv ck9wdGlvbnNDaGVja2VkKQorCXsKKwkJLyoKKwkJICogUHJldmVudCB0aGUgc3RhcnR1cF9jYiBm cm9tIHJldHJpZXZpbmcgSEJBIG9wdGlvbnMgdGhhdCBpdCBoYXMganVzdAorCQkgKiByZWdpc3Rl cmVkLiBUaGlzIHByb2JhYmx5IHNlZW1zIHN0cmFuZ2UgLS0gd2h5IHJlZnVzZSB0byBoYW5kIG91 dAorCQkgKiBpbmZvcm1hdGlvbiB3ZSBhbHJlYWR5IGtub3c/IC0tIGJ1dCB0aGlzIGxldHMgdXMg cmVzZXJ2ZSB0aGUKKwkJICogYWJpbGl0eSB0byBwZXJmb3JtIHRoZSBzdGFydHVwX2NiIGNhbGwg ZWFybGllciwgYmVmb3JlIHdlIGtub3cKKwkJICogd2hpY2ggSEJBIGxpbmUgaXMgbWF0Y2hlZCBi eSBhIGNvbm5lY3Rpb24sIHdpdGhvdXQgYnJlYWtpbmcgdGhpcworCQkgKiBBUEkuCisJCSAqLwor CQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoIXN0YXRlIHx8ICFoYmEpCisJeworCQlBc3NlcnQo ZmFsc2UpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlBc3NlcnQobGlzdF9sZW5ndGgoaGJhLT5v YXV0aF9vcHRfa2V5cykgPT0gbGlzdF9sZW5ndGgoaGJhLT5vYXV0aF9vcHRfdmFscykpOworCisJ Zm9yYm90aChsY19rLCBoYmEtPm9hdXRoX29wdF9rZXlzLCBsY192LCBoYmEtPm9hdXRoX29wdF92 YWxzKQorCXsKKwkJY29uc3QgY2hhciAqa2V5ID0gbGZpcnN0KGxjX2spOworCQljb25zdCBjaGFy ICp2YWwgPSBsZmlyc3QobGNfdik7CisKKwkJaWYgKHN0cmNtcChrZXksIG9wdG5hbWUpID09IDAp CisJCXsKKwkJCS8qCisJCQkgKiBEb24ndCByZXR1cm4geWV0IC0tIHdoZW4gcmVndWxhciBIQkEg b3B0aW9ucyBhcmUgc3BlY2lmaWVkIG1vcmUKKwkJCSAqIHRoYW4gb25jZSwgdGhlIGxhc3Qgb25l IHdpbnMuIERvIHRoZSBzYW1lIGZvciB0aGVzZSBvcHRpb25zLgorCQkJICovCisJCQlyZXQgPSB2 YWw7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv bGlicHEvaGJhLmMgYi9zcmMvYmFja2VuZC9saWJwcS9oYmEuYwppbmRleCA4N2VlNTQxZTg4MC4u NzY5NDUwNmFhZjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2xpYnBxL2hiYS5jCisrKyBiL3Ny Yy9iYWNrZW5kL2xpYnBxL2hiYS5jCkBAIC0yNDk3LDYgKzI0OTcsMzIgQEAgcGFyc2VfaGJhX2F1 dGhfb3B0KGNoYXIgKm5hbWUsIGNoYXIgKnZhbCwgSGJhTGluZSAqaGJhbGluZSwKIAkJUkVRVUlS RV9BVVRIX09QVElPTih1YU9BdXRoLCAidmFsaWRhdG9yIiwgIm9hdXRoIik7CiAJCWhiYWxpbmUt Pm9hdXRoX3ZhbGlkYXRvciA9IHBzdHJkdXAodmFsKTsKIAl9CisJZWxzZSBpZiAoc3RybmNtcChu YW1lLCAidmFsaWRhdG9yLiIsIHN0cmxlbigidmFsaWRhdG9yLiIpKSA9PSAwKQorCXsKKwkJY29u c3QgY2hhciAqa2V5ID0gbmFtZSArIHN0cmxlbigidmFsaWRhdG9yLiIpOworCisJCVJFUVVJUkVf QVVUSF9PUFRJT04odWFPQXV0aCwgbmFtZSwgIm9hdXRoIik7CisKKwkJLyoKKwkJICogVmFsaWRh dG9yIG1vZHVsZXMgbWF5IHJlZ2lzdGVyIHRoZWlyIG93biBwZXItSEJBLWxpbmUgb3B0aW9ucy4K KwkJICogVW5mb3J0dW5hdGVseSwgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0byByZXF1aXJlIHRoZXNl IG1vZHVsZXMgdG8gYmUKKwkJICogbG9hZGVkIGludG8gdGhlIHBvc3RtYXN0ZXIsIHdlIGRvbid0 IGtub3cgaWYgdGhlIG9wdGlvbnMgYXJlIHZhbGlkCisJCSAqIHlldCBhbmQgbXVzdCBzdG9yZSB0 aGVtIGZvciBsYXRlci4gUGVyZm9ybSBvbmx5IGEgYmFzaWMgc3ludGF4CisJCSAqIGNoZWNrIGhl cmUuCisJCSAqLworCQlpZiAoIXZhbGlkX29hdXRoX2hiYV9vcHRpb25fbmFtZShrZXkpKQorCQl7 CisJCQllcmVwb3J0KGVsZXZlbCwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9DT05GSUdfRklMRV9F UlJPUiksCisJCQkJCSBlcnJtc2coImludmFsaWQgT0F1dGggdmFsaWRhdG9yIG9wdGlvbiBuYW1l OiBcIiVzXCIiLCBuYW1lKSwKKwkJCQkJIGVycmNvbnRleHQoImxpbmUgJWQgb2YgY29uZmlndXJh dGlvbiBmaWxlIFwiJXNcIiIsCisJCQkJCQkJCWxpbmVfbnVtLCBmaWxlX25hbWUpKSk7CisJCQly ZXR1cm4gZmFsc2U7CisJCX0KKworCQloYmFsaW5lLT5vYXV0aF9vcHRfa2V5cyA9IGxhcHBlbmQo aGJhbGluZS0+b2F1dGhfb3B0X2tleXMsIHBzdHJkdXAoa2V5KSk7CisJCWhiYWxpbmUtPm9hdXRo X29wdF92YWxzID0gbGFwcGVuZChoYmFsaW5lLT5vYXV0aF9vcHRfdmFscywgcHN0cmR1cCh2YWwp KTsKKwl9CiAJZWxzZSBpZiAoc3RyY21wKG5hbWUsICJkZWxlZ2F0ZV9pZGVudF9tYXBwaW5nIikg PT0gMCkKIAl7CiAJCVJFUVVJUkVfQVVUSF9PUFRJT04odWFPQXV0aCwgImRlbGVnYXRlX2lkZW50 X21hcHBpbmciLCAib2F1dGgiKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhf dmFsaWRhdG9yL3QvMDAxX3NlcnZlci5wbCBiL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRh dG9yL3QvMDAxX3NlcnZlci5wbAppbmRleCBhYzYyNTU1Njc1YS4uY2IzMjZiNTE1OTcgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL3QvMDAxX3NlcnZlci5wbAor KysgYi9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci90LzAwMV9zZXJ2ZXIucGwKQEAg LTYwMiwxMCArNjAyLDI5IEBAICRub2RlLT5jb25uZWN0X2ZhaWxzKAogCiAkYmdjb25uLT5xdWVy eV9zYWZlKCJBTFRFUiBTWVNURU0gUkVTRVQgb2F1dGhfdmFsaWRhdG9yLmVycm9yX2RldGFpbCIp OwogJGJnY29ubi0+cXVlcnlfc2FmZSgiQUxURVIgU1lTVEVNIFJFU0VUIG9hdXRoX3ZhbGlkYXRv ci5pbnRlcm5hbF9lcnJvciIpOworCisjIFdlIGNvbXBsYWluIHdoZW4gYmFkIG9wdGlvbiBuYW1l cyBhcmUgcmVnaXN0ZXJlZCwgYnV0IGNvbm5lY3Rpb25zIG1heSBwcm9jZWVkCisjIChzaW5jZSB1 c2VycyBjYW4ndCBzZXQgdGhvc2Ugb3B0aW9ucyBpbiB0aGUgSEJBIGFueXdheSkuCiskYmdjb25u LT5xdWVyeV9zYWZlKCJBTFRFUiBTWVNURU0gUkVTRVQgb2F1dGhfdmFsaWRhdG9yLmF1dGhuX2lk Iik7CiskYmdjb25uLT5xdWVyeV9zYWZlKCJBTFRFUiBTWVNURU0gUkVTRVQgb2F1dGhfdmFsaWRh dG9yLmF1dGhvcml6ZV90b2tlbnMiKTsKKyRiZ2Nvbm4tPnF1ZXJ5X3NhZmUoIkFMVEVSIFNZU1RF TSBTRVQgb2F1dGhfdmFsaWRhdG9yLmludmFsaWRfaGJhIFRPIHRydWUiKTsKKwogJG5vZGUtPnJl bG9hZDsKICRsb2dfc3RhcnQgPQogICAkbm9kZS0+d2FpdF9mb3JfbG9nKHFyL3JlbG9hZGluZyBj b25maWd1cmF0aW9uIGZpbGVzLywgJGxvZ19zdGFydCk7CiAKKyRub2RlLT5jb25uZWN0X29rKAor CSIkY29tbW9uX2Nvbm5zdHIgdXNlcj10ZXN0IiwKKwkiYmFkIHJlZ2lzdGVyZWQgSEJBIG9wdGlv biIsCisJZXhwZWN0ZWRfc3RkZXJyID0+CisJICBxckBWaXNpdCBodHRwczovL2V4YW1wbGVcLmNv bS8gYW5kIGVudGVyIHRoZSBjb2RlOiBwb3N0Z3Jlc3VzZXJALAorCWxvZ19saWtlID0+IFsKKwkJ cXIvV0FSTklORzpccytIQkEgb3B0aW9uIG5hbWUgImJhZCBvcHRpb24gbmFtZSIgaXMgaW52YWxp ZCBhbmQgd2lsbCBiZSBpZ25vcmVkLywKKwkJcXIvQ09OVEVYVDpccyt2YWxpZGF0b3IgbW9kdWxl ICJ2YWxpZGF0b3IiLCBpbiBjYWxsIHRvIFJlZ2lzdGVyT0F1dGhIQkFPcHRpb25zLywKKwldKTsK KworJGJnY29ubi0+cXVlcnlfc2FmZSgiQUxURVIgU1lTVEVNIFJFU0VUIG9hdXRoX3ZhbGlkYXRv ci5pbnZhbGlkX2hiYSIpOworCiAjCiAjIFRlc3QgdXNlciBtYXBwaW5nLgogIwpAQCAtNjc0LDYg KzY5Myw4NCBAQCAkbm9kZS0+cmVsb2FkOwogJGxvZ19zdGFydCA9CiAgICRub2RlLT53YWl0X2Zv cl9sb2cocXIvcmVsb2FkaW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMvLCAkbG9nX3N0YXJ0KTsKIAor JGJnY29ubi0+cXVpdDsgICAgIyB0aGUgdGVzdHMgYmVsb3cgcmVzdGFydCB0aGUgc2VydmVyCisK KyMKKyMgVGVzdCB2YWxpZGF0b3Itc3BlY2lmaWMgSEJBIG9wdGlvbnMuCisjCisKK3VubGluaygk bm9kZS0+ZGF0YV9kaXIgLiAnL3BnX2hiYS5jb25mJyk7Ciskbm9kZS0+YXBwZW5kX2NvbmYoCisJ J3BnX2hiYS5jb25mJywgcXF7Citsb2NhbCBhbGwgdGVzdCAgICBvYXV0aCBpc3N1ZXI9IiRpc3N1 ZXIiIHNjb3BlPSJvcGVuaWQgcG9zdGdyZXMiIGRlbGVnYXRlX2lkZW50X21hcHBpbmc9MSBcXAor ICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yLmF1dGhuX2lkPSJpZ25vcmVkIiB2YWxp ZGF0b3IuYXV0aG5faWQ9Im90aGVyLWlkZW50aXR5IgorbG9jYWwgYWxsIHRlc3RhbHQgb2F1dGgg aXNzdWVyPSIkaXNzdWVyIiBzY29wZT0ib3BlbmlkIHBvc3RncmVzIiB2YWxpZGF0b3IubG9nPSJ0 ZXN0YWx0IG1lc3NhZ2UiCit9KTsKKworJG5vZGUtPnJlbG9hZDsKKyRsb2dfc3RhcnQgPQorICAk bm9kZS0+d2FpdF9mb3JfbG9nKHFyL3JlbG9hZGluZyBjb25maWd1cmF0aW9uIGZpbGVzLywgJGxv Z19zdGFydCk7CisKKyRub2RlLT5jb25uZWN0X29rKAorCSIkY29tbW9uX2Nvbm5zdHIgdXNlcj10 ZXN0IiwKKwkiY3VzdG9tIEhCQSBzZXR0aW5nICh0ZXN0KSIsCisJZXhwZWN0ZWRfc3RkZXJyID0+ CisJICBxckBWaXNpdCBodHRwczovL2V4YW1wbGVcLmNvbS8gYW5kIGVudGVyIHRoZSBjb2RlOiBw b3N0Z3Jlc3VzZXJALAorCWxvZ19saWtlID0+IFtxci9jb25uZWN0aW9uIGF1dGhlbnRpY2F0ZWQ6 IGlkZW50aXR5PSJvdGhlci1pZGVudGl0eSIvXSk7Ciskbm9kZS0+Y29ubmVjdF9vaygKKwkiJGNv bW1vbl9jb25uc3RyIHVzZXI9dGVzdGFsdCIsCisJImN1c3RvbSBIQkEgc2V0dGluZyAodGVzdGFs dCkiLAorCWV4cGVjdGVkX3N0ZGVyciA9PgorCSAgcXJAVmlzaXQgaHR0cHM6Ly9leGFtcGxlXC5j b20vIGFuZCBlbnRlciB0aGUgY29kZTogcG9zdGdyZXN1c2VyQCwKKwlsb2dfbGlrZSA9PiBbCisJ CXFyL0xPRzpccyt0ZXN0YWx0IG1lc3NhZ2UvLAorCQlxci9jb25uZWN0aW9uIGF1dGhlbnRpY2F0 ZWQ6IGlkZW50aXR5PSJ0ZXN0YWx0Ii8sCisJXSk7CisKKyMgYmFkIHN5bnRheAordW5saW5rKCRu b2RlLT5kYXRhX2RpciAuICcvcGdfaGJhLmNvbmYnKTsKKyRub2RlLT5hcHBlbmRfY29uZigKKwkn cGdfaGJhLmNvbmYnLCBxcXsKK2xvY2FsIGFsbCB0ZXN0YWx0IG9hdXRoIGlzc3Vlcj0iJGlzc3Vl ciIgc2NvcGU9Im9wZW5pZCBwb3N0Z3JlcyIgdmFsaWRhdG9yLj0xCit9KTsKKworJGxvZ19zdGFy dCA9IC1zICRub2RlLT5sb2dmaWxlOworJG5vZGUtPnJlc3RhcnQoZmFpbF9vayA9PiAxKTsKKyRu b2RlLT5sb2dfY2hlY2soImVtcHR5IEhCQSBvcHRpb24gbmFtZSIsCisJJGxvZ19zdGFydCwKKwls b2dfbGlrZSA9PiBbcXIvaW52YWxpZCBPQXV0aCB2YWxpZGF0b3Igb3B0aW9uIG5hbWU6ICJ2YWxp ZGF0b3JcLiIvXSk7CisKK3VubGluaygkbm9kZS0+ZGF0YV9kaXIgLiAnL3BnX2hiYS5jb25mJyk7 Ciskbm9kZS0+YXBwZW5kX2NvbmYoCisJJ3BnX2hiYS5jb25mJywgcXF7Citsb2NhbCBhbGwgdGVz dGFsdCBvYXV0aCBpc3N1ZXI9IiRpc3N1ZXIiIHNjb3BlPSJvcGVuaWQgcG9zdGdyZXMiIHZhbGlk YXRvci5AQD0xCit9KTsKKworJGxvZ19zdGFydCA9IC1zICRub2RlLT5sb2dmaWxlOworJG5vZGUt PnJlc3RhcnQoZmFpbF9vayA9PiAxKTsKKyRub2RlLT5sb2dfY2hlY2soImludmFsaWQgSEJBIG9w dGlvbiBuYW1lIiwKKwkkbG9nX3N0YXJ0LAorCWxvZ19saWtlID0+IFtxci9pbnZhbGlkIE9BdXRo IHZhbGlkYXRvciBvcHRpb24gbmFtZTogInZhbGlkYXRvclwuQEAiL10pOworCisjIHVua25vd24g c2V0dGluZ3MgKHZhbGlkYXRpb24gaXMgZGVmZXJyZWQgdG8gY29ubmVjdCB0aW1lKQordW5saW5r KCRub2RlLT5kYXRhX2RpciAuICcvcGdfaGJhLmNvbmYnKTsKKyRub2RlLT5hcHBlbmRfY29uZigK KwkncGdfaGJhLmNvbmYnLCBxcXsKK2xvY2FsIGFsbCB0ZXN0YWx0IG9hdXRoIGlzc3Vlcj0iJGlz c3VlciIgc2NvcGU9Im9wZW5pZCBwb3N0Z3JlcyIgXFwKKyAgICAgICAgICAgICAgICAgICAgICAg IHZhbGlkYXRvci5sb2c9aWdub3JlZCB2YWxpZGF0b3IuYmFkPTEKK30pOworJG5vZGUtPnJlc3Rh cnQ7CisKKyRub2RlLT5jb25uZWN0X2ZhaWxzKAorCSIkY29tbW9uX2Nvbm5zdHIgdXNlcj10ZXN0 YWx0IiwKKwkiYmFkIEhCQSBzZXR0aW5nIiwKKwlleHBlY3RlZF9zdGRlcnIgPT4gcXIvT0F1dGgg YmVhcmVyIGF1dGhlbnRpY2F0aW9uIGZhaWxlZC8sCisJbG9nX2xpa2UgPT4gWworCQlxci9XQVJO SU5HOlxzK3VucmVjb2duaXplZCBhdXRoZW50aWNhdGlvbiBvcHRpb24gbmFtZTogInZhbGlkYXRv clwuYmFkIi8sCisJCXFyL0ZBVEFMOlxzK09BdXRoIGJlYXJlciBhdXRoZW50aWNhdGlvbiBmYWls ZWQvLAorCQlxci9ERVRBSUw6XHMrdW5yZWNvZ25pemVkIGF1dGhlbnRpY2F0aW9uIG9wdGlvbiBu YW1lOiAidmFsaWRhdG9yXC5iYWQiLywKKwldKTsKKwogIwogIyBUZXN0IG11bHRpcGxlIHZhbGlk YXRvcnMuCiAjCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci92 YWxpZGF0b3IuYyBiL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL3ZhbGlkYXRvci5j CmluZGV4IDM1M2UwZTBkMzJhLi44NWZiNGMwOGJmMiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9k dWxlcy9vYXV0aF92YWxpZGF0b3IvdmFsaWRhdG9yLmMKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9v YXV0aF92YWxpZGF0b3IvdmFsaWRhdG9yLmMKQEAgLTQyLDEzICs0MiwyMSBAQCBzdGF0aWMgY2hh ciAqYXV0aG5faWQgPSBOVUxMOwogc3RhdGljIGJvb2wgYXV0aG9yaXplX3Rva2VucyA9IHRydWU7 CiBzdGF0aWMgY2hhciAqZXJyb3JfZGV0YWlsID0gTlVMTDsKIHN0YXRpYyBib29sIGludGVybmFs X2Vycm9yID0gZmFsc2U7CitzdGF0aWMgYm9vbCBpbnZhbGlkX2hiYSA9IGZhbHNlOworCisvKiBI QkEgb3B0aW9ucyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmhiYV9vcHRzW10gPSB7CisJImF1dGhu X2lkIiwJCQkJCS8qIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBhdXRobl9pZCAqLworCSJsb2ciLAkJ CQkJCS8qIGxvZ3MgYW4gYXJiaXRyYXJ5IHN0cmluZyAqLworfTsKIAogLyotLS0KICAqIEV4dGVu c2lvbiBlbnRyeSBwb2ludC4gU2V0cyB1cCBHVUNzIGZvciB1c2UgYnkgdGVzdHM6CiAgKgogICog LSBvYXV0aF92YWxpZGF0b3IuYXV0aG5faWQJU2V0cyB0aGUgdXNlciBpZGVudGlmaWVyIHRvIHJl dHVybiBkdXJpbmcgdG9rZW4KICAqCQkJCQkJCQl2YWxpZGF0aW9uLiBEZWZhdWx0cyB0byB0aGUg dXNlcm5hbWUgaW4gdGhlCi0gKgkJCQkJCQkJc3RhcnR1cCBwYWNrZXQuCisgKgkJCQkJCQkJc3Rh cnR1cCBwYWNrZXQsIG9yIHRoZSB2YWxpZGF0b3IuYXV0aG5faWQgSEJBCisgKgkJCQkJCQkJb3B0 aW9uIGlmIGl0IGlzIHNldC4KICAqCiAgKiAtIG9hdXRoX3ZhbGlkYXRvci5hdXRob3JpemVfdG9r ZW5zCiAgKgkJCQkJCQkJU2V0cyB3aGV0aGVyIHRvIHN1Y2Nlc3NmdWxseSB2YWxpZGF0ZSBpbmNv bWluZwpAQCAtOTYsNiArMTA0LDE0IEBAIF9QR19pbml0KHZvaWQpCiAJCQkJCQkJIFBHQ19TSUdI VVAsCiAJCQkJCQkJIDAsCiAJCQkJCQkJIE5VTEwsIE5VTEwsIE5VTEwpOworCURlZmluZUN1c3Rv bUJvb2xWYXJpYWJsZSgib2F1dGhfdmFsaWRhdG9yLmludmFsaWRfaGJhIiwKKwkJCQkJCQkgIlNo b3VsZCB0aGUgdmFsaWRhdG9yIHJlZ2lzdGVyIGFuIGludmFsaWQgb3B0aW9uPyIsCisJCQkJCQkJ IE5VTEwsCisJCQkJCQkJICZpbnZhbGlkX2hiYSwKKwkJCQkJCQkgZmFsc2UsCisJCQkJCQkJIFBH Q19TSUdIVVAsCisJCQkJCQkJIDAsCisJCQkJCQkJIE5VTEwsIE5VTEwsIE5VTEwpOwogCiAJTWFy a0dVQ1ByZWZpeFJlc2VydmVkKCJvYXV0aF92YWxpZGF0b3IiKTsKIH0KQEAgLTEyNCw2ICsxNDAs MjkgQEAgdmFsaWRhdG9yX3N0YXJ0dXAoVmFsaWRhdG9yTW9kdWxlU3RhdGUgKnN0YXRlKQogCWlm IChzdGF0ZS0+c3ZlcnNpb24gIT0gUEdfVkVSU0lPTl9OVU0pCiAJCWVsb2coRVJST1IsICJvYXV0 aF92YWxpZGF0b3I6IHN2ZXJzaW9uIHNldCB0byAlZCIsIHN0YXRlLT5zdmVyc2lvbik7CiAKKwkv KgorCSAqIFRlc3QgdGhlIGJlaGF2aW9yIG9mIGN1c3RvbSBIQkEgb3B0aW9ucy4gUmVnaXN0ZXJl ZCBvcHRpb25zIHNob3VsZCBub3QKKwkgKiBiZSByZXRyaWV2YWJsZSBkdXJpbmcgc3RhcnR1cCAo d2Ugd2FudCB0byBkaXNjb3VyYWdlIG1vZHVsZXMgZnJvbQorCSAqIHJlbHlpbmcgb24gdGhlIHJl bGF0aXZlIG9yZGVyIG9mIGNsaWVudCBjb25uZWN0aW9ucyBhbmQgdGhlCisJICogc3RhcnR1cF9j YikuCisJICovCisJUmVnaXN0ZXJPQXV0aEhCQU9wdGlvbnMoc3RhdGUsIGxlbmd0aG9mKGhiYV9v cHRzKSwgaGJhX29wdHMpOworCWZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3Rob2YoaGJhX29wdHMp OyBpKyspCisJeworCQlpZiAoR2V0T0F1dGhIQkFPcHRpb24oc3RhdGUsIGhiYV9vcHRzW2ldKSkK KwkJCWVsb2coRVJST1IsCisJCQkJICJvYXV0aF92YWxpZGF0b3I6IEdldE9BdXRoVmFsaWRhdG9y T3B0aW9uKFwiJXNcIikgd2FzIG5vbi1OVUxMIGR1cmluZyBzdGFydHVwX2NiIiwKKwkJCQkgaGJh X29wdHNbaV0pOworCX0KKworCWlmIChpbnZhbGlkX2hiYSkKKwl7CisJCS8qIFJlZ2lzdGVyIGEg YmFkIG9wdGlvbiwgd2hpY2ggc2hvdWxkIHByaW50IGEgV0FSTklORyB0byB0aGUgbG9ncy4gKi8K KwkJY29uc3QgY2hhciAqaW52YWxpZCA9ICJiYWQgb3B0aW9uIG5hbWUiOworCisJCVJlZ2lzdGVy T0F1dGhIQkFPcHRpb25zKHN0YXRlLCAxLCAmaW52YWxpZCk7CisJfQorCiAJc3RhdGUtPnByaXZh dGVfZGF0YSA9IFBSSVZBVEVfQ09PS0lFOwogfQogCkBAIC0xNDEsNyArMTgwLDcgQEAgdmFsaWRh dG9yX3NodXRkb3duKFZhbGlkYXRvck1vZHVsZVN0YXRlICpzdGF0ZSkKIAogLyoKICAqIFZhbGlk YXRvciBpbXBsZW1lbnRhdGlvbi4gTG9ncyB0aGUgaW5jb21pbmcgZGF0YSBhbmQgYXV0aG9yaXpl cyB0aGUgdG9rZW4gYnkKLSAqIGRlZmF1bHQ7IHRoZSBiZWhhdmlvciBjYW4gYmUgbW9kaWZpZWQg dmlhIHRoZSBtb2R1bGUncyBHVUMgc2V0dGluZ3MuCisgKiBkZWZhdWx0OyB0aGUgYmVoYXZpb3Ig Y2FuIGJlIG1vZGlmaWVkIHZpYSB0aGUgbW9kdWxlJ3MgR1VDIGFuZCBIQkEgc2V0dGluZ3MuCiAg Ki8KIHN0YXRpYyBib29sCiB2YWxpZGF0ZV90b2tlbihjb25zdCBWYWxpZGF0b3JNb2R1bGVTdGF0 ZSAqc3RhdGUsCkBAIC0xNTMsNiArMTkyLDkgQEAgdmFsaWRhdGVfdG9rZW4oY29uc3QgVmFsaWRh dG9yTW9kdWxlU3RhdGUgKnN0YXRlLAogCQllbG9nKEVSUk9SLCAib2F1dGhfdmFsaWRhdG9yOiBw cml2YXRlIHN0YXRlIGNvb2tpZSBjaGFuZ2VkIHRvICVwIGluIHZhbGlkYXRlIiwKIAkJCSBzdGF0 ZS0+cHJpdmF0ZV9kYXRhKTsKIAorCWlmIChHZXRPQXV0aEhCQU9wdGlvbihzdGF0ZSwgImxvZyIp KQorCQllbG9nKExPRywgIiVzIiwgR2V0T0F1dGhIQkFPcHRpb24oc3RhdGUsICJsb2ciKSk7CisK IAllbG9nKExPRywgIm9hdXRoX3ZhbGlkYXRvcjogdG9rZW49XCIlc1wiLCByb2xlPVwiJXNcIiIs IHRva2VuLCByb2xlKTsKIAllbG9nKExPRywgIm9hdXRoX3ZhbGlkYXRvcjogaXNzdWVyPVwiJXNc Iiwgc2NvcGU9XCIlc1wiIiwKIAkJIE15UHJvY1BvcnQtPmhiYS0+b2F1dGhfaXNzdWVyLApAQCAt MTY1LDYgKzIwNyw4IEBAIHZhbGlkYXRlX3Rva2VuKGNvbnN0IFZhbGlkYXRvck1vZHVsZVN0YXRl ICpzdGF0ZSwKIAlyZXMtPmF1dGhvcml6ZWQgPSBhdXRob3JpemVfdG9rZW5zOwogCWlmIChhdXRo bl9pZCkKIAkJcmVzLT5hdXRobl9pZCA9IHBzdHJkdXAoYXV0aG5faWQpOworCWVsc2UgaWYgKEdl dE9BdXRoSEJBT3B0aW9uKHN0YXRlLCAiYXV0aG5faWQiKSkKKwkJcmVzLT5hdXRobl9pZCA9IHBz dHJkdXAoR2V0T0F1dGhIQkFPcHRpb24oc3RhdGUsICJhdXRobl9pZCIpKTsKIAllbHNlCiAJCXJl cy0+YXV0aG5faWQgPSBwc3RyZHVwKHJvbGUpOwogCi0tIAoyLjM0LjEKCg== --000000000000aaebf1064e80dc74 Content-Type: application/octet-stream; name="since-v3.nocfbot.diff" Content-Disposition: attachment; filename="since-v3.nocfbot.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnhzhmyx2 MTogIGYzNmU2YmVjYzM0ICEgMTogIGE5YTUwNzYwNGM1IG9hdXRoOiBMZXQgdmFsaWRhdG9ycyBw cm92aWRlIGZhaWx1cmUgREVUQUlMcwogICAgQEAgQ29tbWl0IG1lc3NhZ2UKICAgICAKICAgICAg ICAgUmVwb3J0ZWQtYnk6IMOBbHZhcm8gSGVycmVyYSA8YWx2aGVycmVAa3VyaWxlbXUuZGU+CiAg ICAgICAgIFJlcG9ydGVkLWJ5OiBac29sdCBQYXJyYWdpIDx6c29sdC5wYXJyYWdpQHBlcmNvbmEu Y29tPgogICAgKyAgICBSZXZpZXdlZC1ieTogQ2hhbyBMaSA8bGkuZXZhbi5jaGFvQGdtYWlsLmNv bT4KICAgICsgICAgUmV2aWV3ZWQtYnk6IERhbmllbCBHdXN0YWZzc29uIDxkYW5pZWxAeWVzcWwu c2U+CiAgICArICAgIFJldmlld2VkLWJ5OiBac29sdCBQYXJyYWdpIDx6c29sdC5wYXJyYWdpQHBl cmNvbmEuY29tPgogICAgICAgICBEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLzIwMjYw MTI0MTAxNS55NXV2eGQ3b3huZnMlNDBhbHZoZXJyZS5wZ3NxbAogICAgLSAgICBEaXNjdXNzaW9u OiBUT0RPCiAgICAgCiAgICAgICMjIGRvYy9zcmMvc2dtbC9vYXV0aC12YWxpZGF0b3JzLnNnbWwg IyMKICAgICBAQAogICAgQEAgZG9jL3NyYy9zZ21sL29hdXRoLXZhbGlkYXRvcnMuc2dtbAogICAg ICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgLSAgICAgICBNb2R1bGVz IG1heSB1c2UgdGhlIHNhbWUgPGxpbmsgbGlua2VuZD0iZXJyb3ItbWVzc2FnZS1yZXBvcnRpbmci PmxvZ2dpbmcKICAgIC0rICAgICAgIFRvIHNpbXBseSBsb2cgdGhlIHJlYXNvbiBmb3IgYSB2YWxp ZGF0aW9uIGZhaWx1cmUsIHZhbGlkYXRvcnMgbWF5IHNldAogICAgLSsgICAgICAgdGhlIGZyZWVm b3JtIDxzdHJ1Y3RmaWVsZD5lcnJvcl9kZXRhaWw8L3N0cnVjdGZpZWxkPiBmaWVsZCBkdXJpbmcg dGhlCiAgICAtKyAgICAgICA8eHJlZiBsaW5rZW5kPSJvYXV0aC12YWxpZGF0b3ItY2FsbGJhY2st dmFsaWRhdGUiLz4uIFRoaXMgaXMgcHJpbnRlZCBvbmx5CiAgICAtKyAgICAgICB0byB0aGUgc2Vy dmVyIGxvZywgYXMgcGFydCBvZiB0aGUgZmluYWwgYXV0aGVudGljYXRpb24gZmFpbHVyZSBtZXNz YWdlLAogICAgLSsgICAgICAgYW5kIGl0IGlzIG5vdCBzaGFyZWQgd2l0aCB0aGUgY2xpZW50Lgog ICAgKysgICAgICAgVG8gc2ltcGx5IGxvZyB0aGUgcmVhc29uIGZvciBhIHZhbGlkYXRpb24gZmFp bHVyZSwgbW9kdWxlcyBtYXkgc2V0IHRoZQogICAgKysgICAgICAgZnJlZWZvcm0gPHN0cnVjdGZp ZWxkPmVycm9yX2RldGFpbDwvc3RydWN0ZmllbGQ+IGZpZWxkIGR1cmluZyB0aGUKICAgICsrICAg ICAgIDxsaW5rIGxpbmtlbmQ9Im9hdXRoLXZhbGlkYXRvci1jYWxsYmFjay12YWxpZGF0ZSI+dmFs aWRhdGUgY2FsbGJhY2s8L2xpbms+LgogICAgKysgICAgICAgKDx4cmVmIGxpbmtlbmQ9ImVycm9y LXN0eWxlLWd1aWRlIi8+IGhhcyBndWlkZWxpbmVzIGZvciB3cml0aW5nIGdvb2QKICAgICsrICAg ICAgIDxsaXRlcmFsPkRFVEFJTDwvbGl0ZXJhbD4gbWVzc2FnZXMuKSA8c3RydWN0ZmllbGQ+ZXJy b3JfZGV0YWlsPC9zdHJ1Y3RmaWVsZD4KICAgICsrICAgICAgIGlzIHByaW50ZWQgb25seSB0byB0 aGUgc2VydmVyIGxvZywgYXMgcGFydCBvZiB0aGUgZmluYWwgYXV0aGVudGljYXRpb24KICAgICsr ICAgICAgIGZhaWx1cmUgbWVzc2FnZSwgYW5kIGl0IGlzIG5vdCBzaGFyZWQgd2l0aCB0aGUgY2xp ZW50LgogICAgICsgICAgICA8L3BhcmE+CiAgICAgKyAgICAgIDxwYXJhPgogICAgICsgICAgICAg TW9kdWxlcyBtYXkgYWxzbyB1c2UgdGhlIHNhbWUgPGxpbmsgbGlua2VuZD0iZXJyb3ItbWVzc2Fn ZS1yZXBvcnRpbmciPmxvZ2dpbmcKICAgIEBAIHNyYy9iYWNrZW5kL2xpYnBxL2F1dGgtb2F1dGgu Yzogc3RydWN0IG9hdXRoX2N0eAogICAgICAvKiBDb25zdGFudHMgc2VlbiBpbiBhbiBPQVVUSEJF QVJFUiBjbGllbnQgaW5pdGlhbCByZXNwb25zZS4gKi8KICAgICAgI2RlZmluZSBLVlNFUCAweDAx CQkJCS8qIHNlcGFyYXRvciBieXRlIGZvciBrZXkvdmFsdWUgcGFpcnMgKi8KICAgICBAQCBzcmMv YmFja2VuZC9saWJwcS9hdXRoLW9hdXRoLmM6IG9hdXRoX2V4Y2hhbmdlKHZvaWQgKm9wYXEsIGNv bnN0IGNoYXIgKmlucHV0LCBpbnQgaW5wdXRsZW4sCiAgICAtIAkJCQllcnJtc2coIm1hbGZvcm1l ZCBPQVVUSEJFQVJFUiBtZXNzYWdlIiksCiAgICAtIAkJCQllcnJkZXRhaWwoIk1lc3NhZ2UgY29u dGFpbnMgYWRkaXRpb25hbCBkYXRhIGFmdGVyIHRoZSBmaW5hbCB0ZXJtaW5hdG9yLiIpKTsKICAg IC0gCiAgICAtLQlpZiAoIXZhbGlkYXRlKGN0eC0+cG9ydCwgYXV0aCkpCiAgICAtKwlpZiAoIXZh bGlkYXRlKGN0eC0+cG9ydCwgYXV0aCwgbG9nZGV0YWlsKSkKICAgICsgCQljdHgtPnN0YXRlID0g T0FVVEhfU1RBVEVfRVJST1JfRElTQ09WRVJZOwogICAgKyAJCXN0YXR1cyA9IFBHX1NBU0xfRVhD SEFOR0VfQ09OVElOVUU7CiAgICArIAl9CiAgICArLQllbHNlIGlmICghdmFsaWRhdGUoY3R4LT5w b3J0LCBhdXRoKSkKICAgICsrCWVsc2UgaWYgKCF2YWxpZGF0ZShjdHgtPnBvcnQsIGF1dGgsIGxv Z2RldGFpbCkpCiAgICAgIAl7CiAgICAgIAkJZ2VuZXJhdGVfZXJyb3JfcmVzcG9uc2UoY3R4LCBv dXRwdXQsIG91dHB1dGxlbik7CiAgICAgIAogICAgQEAgc3JjL2JhY2tlbmQvbGlicHEvYXV0aC5j OiBDbGllbnRBdXRoZW50aWNhdGlvbihQb3J0ICpwb3J0KQogICAgICAJCQlzdGF0dXMgPSBTVEFU VVNfT0s7CiAgICAgIAkJCWJyZWFrOwogICAgICAJCWNhc2UgdWFPQXV0aDoKICAgIC0tCQkJc3Rh dHVzID0gQ2hlY2tTQVNMQXV0aCgmcGdfYmVfb2F1dGhfbWVjaCwgcG9ydCwgTlVMTCwgTlVMTCk7 CiAgICAtKwkJCXN0YXR1cyA9IENoZWNrU0FTTEF1dGgoJnBnX2JlX29hdXRoX21lY2gsIHBvcnQs IE5VTEwsICZsb2dkZXRhaWwpOwogICAgKy0JCQlzdGF0dXMgPSBDaGVja1NBU0xBdXRoKCZwZ19i ZV9vYXV0aF9tZWNoLCBwb3J0LCBOVUxMLCBOVUxMLAogICAgKysJCQlzdGF0dXMgPSBDaGVja1NB U0xBdXRoKCZwZ19iZV9vYXV0aF9tZWNoLCBwb3J0LCBOVUxMLCAmbG9nZGV0YWlsLAogICAgKyAJ CQkJCQkJCSAgICZhYmFuZG9uZWQpOwogICAgICAJCQlicmVhazsKICAgICAgCX0KICAgIC0gCiAg ICAgCiAgICAgICMjIHNyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL3QvMDAxX3NlcnZl ci5wbCAjIwogICAgIEBAIHNyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL3QvMDAxX3Nl cnZlci5wbDogJG5vZGUtPmNvbm5lY3RfZmFpbHMoCjI6ICA5NzI2YWMzOTQ0MiAhIDI6ICA1MDM5 Y2U3NDM3MCBXSVA6IG9hdXRoOiBBbGxvdyB2YWxpZGF0b3JzIHRvIHJlZ2lzdGVyIGN1c3RvbSBI QkEgb3B0aW9ucwogICAgQEAgTWV0YWRhdGEKICAgICBBdXRob3I6IEphY29iIENoYW1waW9uIDxq YWNvYi5jaGFtcGlvbkBlbnRlcnByaXNlZGIuY29tPgogICAgIAogICAgICAjIyBDb21taXQgbWVz c2FnZSAjIwogICAgLSAgICBXSVA6IG9hdXRoOiBBbGxvdyB2YWxpZGF0b3JzIHRvIHJlZ2lzdGVy IGN1c3RvbSBIQkEgb3B0aW9ucwogICAgKyAgICBvYXV0aDogQWxsb3cgdmFsaWRhdG9ycyB0byBy ZWdpc3RlciBjdXN0b20gSEJBIG9wdGlvbnMKICAgICAKICAgIC0gICAgKGxhY2tzIHVzZXIgZG9j dW1lbnRhdGlvbikKICAgICsgICAgT0F1dGggdmFsaWRhdG9ycyBjYW4gYWxyZWFkeSB1c2UgY3Vz dG9tIEdVQ3MgdG8gY29uZmlndXJlIGJlaGF2aW9yCiAgICArICAgIGdsb2JhbGx5LCBidXQgd2Ug Y3VycmVudGx5IHByb3ZpZGUgbm8gYWJpbGl0eSB0byBhZGp1c3Qgc2V0dGluZ3MgZm9yCiAgICAr ICAgIGluZGl2aWR1YWwgSEJBIGVudHJpZXMsIGJlY2F1c2UgdGhlIG9yaWdpbmFsIGRlc2lnbiBm b2N1c2VkIG9uIGEgd29ybGQKICAgICsgICAgd2hlcmUgYSBwcm92aWRlciBjb3ZlcmVkIGEgInNp bmdsZSBhdWRpZW5jZSIgb2YgdXNlcnMgZm9yIG9uZSBkYXRhYmFzZQogICAgKyAgICBjbHVzdGVy LiBUaGlzIGFzc3VtcHRpb24gZG9lcyBub3QgYXBwbHkgdG8gbXVsdGl0ZW5hbnQgdXNlIGNhc2Vz LCB3aGVyZQogICAgKyAgICBhIHNpbmdsZSB2YWxpZGF0b3IgbWF5IGJlIGNvbnRyb2xsaW5nIGFj Y2VzcyBmb3Igd2lsZGx5IGRpZmZlcmVudCB1c2VyCiAgICArICAgIGdyb3Vwcy4KICAgICAKICAg IC0gICAgVHdvIG5ldyBBUEkgZW50cnkgcG9pbnRzIGZvciB2YWxpZGF0b3IgY2FsbGJhY2tzOgog ICAgLSAgICAtIFJlZ2lzdGVyT0F1dGhIQkFPcHRpb25zCiAgICAtICAgIC0gR2V0T0F1dGhIQkFP cHRpb24KICAgICsgICAgVG8gaW1wcm92ZSB0aGlzIHVzZSBjYXNlLCBhZGQgdHdvIG5ldyBBUEkg Y2FsbHMgZm9yIHVzZSBieSB2YWxpZGF0b3IKICAgICsgICAgY2FsbGJhY2tzOiBSZWdpc3Rlck9B dXRoSEJBT3B0aW9ucygpIGFuZCBHZXRPQXV0aEhCQU9wdGlvbigpLgogICAgKyAgICBSZWdpc3Rl cmluZyBvcHRpb25zICJmb28iIGFuZCAiYmFyIiBhbGxvd3MgYSB1c2VyIHRvIHNldCAidmFsaWRh dG9yLmZvbyIKICAgICsgICAgYW5kICJ2YWxpZGF0b3IuYmFyIiBpbiBhbiBvYXV0aCBIQkEgZW50 cnkuIFRoZXNlIG9wdGlvbnMgYXJlIHN0cmluZ2x5CiAgICArICAgIHR5cGVkIChzeW50YXggdmFs aWRhdGlvbiBpcyBzb2xlbHkgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBkZWZpbmluZwogICAg KyAgICBtb2R1bGUpLCBhbmQgbmFtZXMgYXJlIHJlc3RyaWN0ZWQgdG8gYSBzdWJzZXQgb2YgQVND SUkgdG8gYXZvaWQgdHlpbmcKICAgICsgICAgb3VyIGhhbmRzIHdpdGggZnV0dXJlIEhCQSBzeW50 YXggaW1wcm92ZW1lbnRzLgogICAgIAogICAgLSAgICBSZWdpc3RlcmluZyBvcHRpb25zICJmb28i IGFuZCAiYmFyIiBhbGxvd3MgYSB1c2VyIHRvIHNldCB2YWxpZGF0b3IuZm9vCiAgICAtICAgIGFu ZCB2YWxpZGF0b3IuYmFyIG9uIGFuIGBvYXV0aGAgSEJBIGxpbmUuCiAgICArICAgIFVuZm9ydHVu YXRlbHksIHdlIGNhbid0IGNoZWNrIHRoZSBjdXN0b20gb3B0aW9uIG5hbWVzIGR1cmluZyBhIHJl bG9hZCBvZgogICAgKyAgICB0aGUgY29uZmlndXJhdGlvbiwgbGlrZSB3ZSBkbyB3aXRoIHN0YW5k YXJkIEhCQSBvcHRpb25zLCB1bmxlc3Mgd2Ugd2VyZQogICAgKyAgICB0byByZXF1aXJlIGFsbCB2 YWxpZGF0b3JzIHRvIGJlIGxvYWRlZCB2aWEgc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzLgogICAg KyAgICAoSSBjb25zaWRlciB0aGlzIHRvIGJlIGEgbm9uc3RhcnRlcjogbW9zdCB2YWxpZGF0b3Jz IHNob3VsZCBwcm9iYWJseSB1c2UKICAgICsgICAgc2Vzc2lvbl9wcmVsb2FkX2xpYnJhcmllcyBh dCBtb3N0LCBzaW5jZSByZXF1aXJpbmcgYSBmdWxsIHJlc3RhcnQgb2YgYQogICAgKyAgICBwcm9k dWN0aW9uIHNlcnZlciBqdXN0IHRvIHVwZGF0ZSBhdXRoZW50aWNhdGlvbiBiZWhhdmlvciB3aWxs IGJlCiAgICArICAgIHVuYWNjZXB0YWJsZSB0byBtYW55IHVzZXJzLikgSW5zdGVhZCwgdGhlIG5l dyB2YWxpZGF0b3IuKiBvcHRpb25zIGFyZQogICAgKyAgICBjaGVja2VkIGFnYWluc3QgdGhlIHJl Z2lzdGVyZWQgbGlzdCBhdCBjb25uZWN0aW9uIHRpbWUuCiAgICAgCiAgICAtICAgIFRoZSBidWxr IG9mIHRoZSBwYXRjaCBpcyBub3QgdGhlIGNvbmNlcHR1YWxseSBzaW1wbGUgQVBJIGltcGxlbWVu dGF0aW9uLAogICAgLSAgICBidXQgZ3VhcmRyYWlscyBvbiB0aGUgc2ltcGxlIEFQSSB0byBtYWtl IHN1cmUgaXQgZG9lc24ndCBiaW5kIG91ciBoYW5kcwogICAgLSAgICBpbiB0aGUgZnV0dXJlLCBl aXRoZXIgZm9yIGNhbGxiYWNrIGFyY2hpdGVjdHVyZSBvciBIQkEgc3ludGF4LgogICAgKyAgICBN dWx0aXBsZSBhbHRlcm5hdGl2ZXMgd2VyZSBwcm9wb3NlZCBhbmQvb3IgcHJvdG90eXBlZCwgaW5j bHVkaW5nCiAgICArICAgIGV4dGVuZGluZyB0aGUgR1VDIHN5c3RlbSB0byBhbGxvdyBwZXItSEJB IG92ZXJyaWRlcywgam9pbmluZyBmb3JjZXMgd2l0aAogICAgKyAgICByZWNlbnQgcmVmYWN0b3Jp bmcgd29yayBvbiB0aGUgcmVsb3B0aW9ucyBzdWJzeXN0ZW0sIGFuZCBnaXZpbmcgdGhlCiAgICAr ICAgIGFiaWxpdHkgdG8gY3VzdG9taXplIEhCQSBvcHRpb25zIHRvIGFsbCBQb3N0Z3JlU1FMIGV4 dGVuc2lvbnMuIEkKICAgICsgICAgcGVyc29uYWxseSBiZWxpZXZlIHBlci1IQkEgR1VDIG92ZXJy aWRlcyBhcmUgdGhlIGJlc3Qgb3B0aW9uLCBiZWNhdXNlCiAgICArICAgIHNldmVyYWwgZXhpc3Rp bmcgR1VDcyBsaWtlIGF1dGhlbnRpY2F0aW9uX3RpbWVvdXQgYW5kIHByZV9hdXRoX2RlbGF5CiAg ICArICAgIHdvdWxkIGZpdCB0aGVyZSB1c2VmdWxseS4gQnV0IHRoZSByZWNlbnQgYWRkaXRpb24g b2YgU05JIHBlci1ob3N0CiAgICArICAgIHNldHRpbmdzIGluIDRmNDMzMDI1ZiBpbmRpY2F0ZXMg dGhhdCBhIG1vcmUgZ2VuZXJhbCBzb2x1dGlvbiBpcyBuZWVkZWQsCiAgICArICAgIGFuZCBJIGV4 cGVjdCB0aGF0IHRvIHRha2UgbXVsdGlwbGUgcmVsZWFzZXMnIHdvcnRoIG9mIGRpc2N1c3Npb24u CiAgICArCiAgICArICAgIFRoaXMgY29tcHJvbWlzZSBwYXRjaCwgdGhlbiwgaXMgaW50ZW50aW9u YWxseSBkZXNpZ25lZCB0byBiZSBhbgogICAgKyAgICBhcmNoaXRlY3R1cmFsIGRlYWQgZW5kOiBz aW1wbGUgdG8gZGVzY3JpYmUsIGNoZWFwIHRvIG1haW50YWluLCBhbmQKICAgICsgICAgcHJvdmlk aW5nIGp1c3QgZW5vdWdoIGZ1bmN0aW9uYWxpdHkgdG8gbGV0IHZhbGlkYXRvcnMgbW92ZSBmb3J3 YXJkIGZvcgogICAgKyAgICBQRzE5LiBUaGUgaG9wZSBpcyB0aGF0IGl0IHdpbGwgYmUgcmVwbGFj ZWQgaW4gdGhlIGZ1dHVyZSBieSBhIHNvbHV0aW9uCiAgICArICAgIHRoYXQgY2FuIGhhbmRsZSBw ZXItaG9zdCwgcGVyLUhCQSwgYW5kIG90aGVyIHBlci1jb250ZXh0IGNvbmZpZ3VyYXRpb24KICAg ICsgICAgd2l0aCB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IHRoYXQgR1VDcyBwcm92aWRlIHRvZGF5 LiBJbiB0aGUgbWVhbnRpbWUsCiAgICArICAgIHRoZSBidWxrIG9mIHRoZSBjb2RlIGluIHRoaXMg cGF0Y2ggY29uc2lzdHMgb2Ygc3RyaWN0IGd1YXJkcmFpbHMgb24gdGhlCiAgICArICAgIHNpbXBs ZSBBUEksIHRvIHRyeSB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCBoYXZlIGFueSByZWFzb24gdG8g cmVncmV0IGl0cwogICAgKyAgICBleGlzdGVuY2UgZHVyaW5nIGl0cyB1bmtub3duIGxpZmVzcGFu LgogICAgIAogICAgICAgICBTdWdnZXN0ZWQtYnk6IFpzb2x0IFBhcnJhZ2kgPHpzb2x0LnBhcnJh Z2lAcGVyY29uYS5jb20+CiAgICAgICAgIFN1Z2dlc3RlZC1ieTogVkFTVUtJIE0gPHZhc3VraWFu YW5kMDExOUBnbWFpbC5jb20+CiAgICAgICAgIEludmVzdGlnYXRlZC1ieTogWnNvbHQgUGFycmFn aSA8enNvbHQucGFycmFnaUBwZXJjb25hLmNvbT4KICAgICsgICAgUmV2aWV3ZWQtYnk6IFpzb2x0 IFBhcnJhZ2kgPHpzb2x0LnBhcnJhZ2lAcGVyY29uYS5jb20+CiAgICArICAgIERpc2N1c3Npb246 IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FONENaRk0zYjh1NXVOTk5zWTZYQ3lhMjU3dSUyQkRvZm1z M3N1OWYxMWlNQ3h2Q2FjYWclNDBtYWlsLmdtYWlsLmNvbQogICAgKwogICAgKyAjIyBkb2Mvc3Jj L3NnbWwvY2xpZW50LWF1dGguc2dtbCAjIwogICAgK0BAIGRvYy9zcmMvc2dtbC9jbGllbnQtYXV0 aC5zZ21sOiBob3N0IC4uLiByYWRpdXMgcmFkaXVzc2VydmVycz0ic2VydmVyMSxzZXJ2ZXIyIiBy YWRpdXNzZWNyZXRzPSIiInNlY3JldCBvbmUiIiwiIgogICAgKyAgICAgICA8L2xpc3RpdGVtPgog ICAgKyAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgKyAKICAgICsrICAgICA8dmFybGlzdGVudHJ5 PgogICAgKysgICAgICA8dGVybSBpZD0iYXV0aC1vYXV0aC12YWxpZGF0b3Itb3B0aW9uIj4KICAg ICsrICAgICAgIDxsaXRlcmFsPnZhbGlkYXRvci48cmVwbGFjZWFibGU+b3B0aW9uPC9yZXBsYWNl YWJsZT48L2xpdGVyYWw+CiAgICArKyAgICAgIDwvdGVybT4KICAgICsrICAgICAgPGxpc3RpdGVt PgogICAgKysgICAgICAgPHBhcmE+CiAgICArKyAgICAgICAgVmFsaWRhdG9yIG1vZHVsZXMgbWF5 IDxsaW5rIGxpbmtlbmQ9Im9hdXRoLXZhbGlkYXRvci1oYmEiPmRlZmluZTwvbGluaz4KICAgICsr ICAgICAgICBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgPGxpdGVyYWw+b2F1 dGg8L2xpdGVyYWw+CiAgICArKyAgICAgICAgSEJBIGVudHJpZXMuIFRoZXNlIHZhbGlkYXRvci1z cGVjaWZpYyBvcHRpb25zIGFyZSBhY2Nlc3NpYmxlIHZpYSB0aGUKICAgICsrICAgICAgICA8bGl0 ZXJhbD52YWxpZGF0b3IuKjwvbGl0ZXJhbD4gIm5hbWVzcGFjZSIuIEZvciBleGFtcGxlLCBhIG1v ZHVsZSBtYXkKICAgICsrICAgICAgICByZWdpc3RlciB0aGUgPGxpdGVyYWw+dmFsaWRhdG9yLmZv bzwvbGl0ZXJhbD4gYW5kCiAgICArKyAgICAgICAgPGxpdGVyYWw+dmFsaWRhdG9yLmJhcjwvbGl0 ZXJhbD4gb3B0aW9ucyBhbmQgZGVmaW5lIHRoZWlyIGVmZmVjdHMgb24KICAgICsrICAgICAgICBh dXRoZW50aWNhdGlvbi4KICAgICsrICAgICAgIDwvcGFyYT4KICAgICsrICAgICAgIDxwYXJhPgog ICAgKysgICAgICAgIFRoZSBuYW1lLCBzeW50YXgsIGFuZCBiZWhhdmlvciBvZiBlYWNoIDxyZXBs YWNlYWJsZT5vcHRpb248L3JlcGxhY2VhYmxlPgogICAgKysgICAgICAgIGFyZSBub3QgZGV0ZXJt aW5lZCBieSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+OyBjb25zdWx0IHRo ZQogICAgKysgICAgICAgIGRvY3VtZW50YXRpb24gZm9yIHRoZSB2YWxpZGF0b3IgbW9kdWxlIGlu IHVzZS4KICAgICsrICAgICAgIDwvcGFyYT4KICAgICsrICAgICAgIDx3YXJuaW5nPgogICAgKysg ICAgICAgIDxwYXJhPgogICAgKysgICAgICAgICBBIGxpbWl0YXRpb24gb2YgdGhlIGN1cnJlbnQg aW1wbGVtZW50YXRpb24gaXMgdGhhdCB1bnJlY29nbml6ZWQKICAgICsrICAgICAgICAgPHJlcGxh Y2VhYmxlPm9wdGlvbjwvcmVwbGFjZWFibGU+IG5hbWVzIHdpbGwgbm90IGJlIGNhdWdodCB1bnRp bAogICAgKysgICAgICAgICBjb25uZWN0aW9uIHRpbWUuIEEgPGxpdGVyYWw+cGdfY3RsIHJlbG9h ZDwvbGl0ZXJhbD4gd2lsbCBzdWNjZWVkLCBidXQKICAgICsrICAgICAgICAgbWF0Y2hpbmcgY29u bmVjdGlvbnMgd2lsbCBmYWlsOgogICAgKys8cHJvZ3JhbWxpc3Rpbmc+CiAgICArK0xPRzogIGNv bm5lY3Rpb24gcmVjZWl2ZWQ6IGhvc3Q9W2xvY2FsXQogICAgKytXQVJOSU5HOiAgdW5yZWNvZ25p emVkIGF1dGhlbnRpY2F0aW9uIG9wdGlvbiBuYW1lOiAidmFsaWRhdG9yLmJhZCIKICAgICsrREVU QUlMOiAgVGhlIGluc3RhbGxlZCB2YWxpZGF0b3IgbW9kdWxlICgibXlfdmFsaWRhdG9yIikgZGlk IG5vdCBkZWZpbmUgYW4gb3B0aW9uIG5hbWVkICJiYWQiLgogICAgKytISU5UOiAgQWxsIE9BdXRo IGNvbm5lY3Rpb25zIG1hdGNoaW5nIHRoaXMgbGluZSB3aWxsIGZhaWwuIENvcnJlY3QgdGhlIG9w dGlvbiBhbmQgcmVsb2FkIHRoZSBzZXJ2ZXIgY29uZmlndXJhdGlvbi4KICAgICsrQ09OVEVYVDog IGxpbmUgMiBvZiBjb25maWd1cmF0aW9uIGZpbGUgImRhdGEvcGdfaGJhLmNvbmYiCiAgICArKzwv cHJvZ3JhbWxpc3Rpbmc+CiAgICArKyAgICAgICAgIFVzZSBjYXV0aW9uIHdoZW4gbWFraW5nIGNo YW5nZXMgdG8gdmFsaWRhdG9yLXNwZWNpZmljIEhCQSBvcHRpb25zIGluCiAgICArKyAgICAgICAg IHByb2R1Y3Rpb24gc3lzdGVtcy4KICAgICsrICAgICAgICA8L3BhcmE+CiAgICArKyAgICAgICA8 L3dhcm5pbmc+CiAgICArKyAgICAgIDwvbGlzdGl0ZW0+CiAgICArKyAgICAgPC92YXJsaXN0ZW50 cnk+CiAgICArKwogICAgKyAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICArICAgICAgIDx0ZXJtPjxs aXRlcmFsPm1hcDwvbGl0ZXJhbD48L3Rlcm0+CiAgICArICAgICAgIDxsaXN0aXRlbT4KICAgICsK ICAgICsgIyMgZG9jL3NyYy9zZ21sL29hdXRoLXZhbGlkYXRvcnMuc2dtbCAjIwogICAgK0BACiAg ICArICAgICAgICA8c3ltYm9sPmRlbGVnYXRlX2lkZW50X21hcHBpbmc9MTwvc3ltYm9sPiBtb2Rl LCBhbmQgd2hhdCBhZGRpdGlvbmFsCiAgICArICAgICAgICBjb25maWd1cmF0aW9uIGlzIHJlcXVp cmVkIGluIG9yZGVyIHRvIGRvIHNvLgogICAgKyAgICAgICA8L3BhcmE+CiAgICArKyAgICAgIDxw YXJhPgogICAgKysgICAgICAgSWYgYW4gaW1wbGVtZW50YXRpb24gcHJvdmlkZXMgPGxpbmsgbGlu a2VuZD0ib2F1dGgtdmFsaWRhdG9yLWhiYSI+Y3VzdG9tCiAgICArKyAgICAgICBIQkEgb3B0aW9u czwvbGluaz4sIHRoZSBuYW1lcyBhbmQgc3ludGF4IG9mIHRob3NlIG9wdGlvbnMgc2hvdWxkIGJl CiAgICArKyAgICAgICBkb2N1bWVudGVkIGFzIHdlbGwuCiAgICArKyAgICAgIDwvcGFyYT4KICAg ICsgICAgICA8L2xpc3RpdGVtPgogICAgKyAgICAgPC92YXJsaXN0ZW50cnk+CiAgICArICAgIDwv dmFyaWFibGVsaXN0PgogICAgK0BAIGRvYy9zcmMvc2dtbC9vYXV0aC12YWxpZGF0b3JzLnNnbWw6 IHR5cGVkZWYgY29uc3QgT0F1dGhWYWxpZGF0b3JDYWxsYmFja3MgKigqT0F1dGhWYWxpZGF0b3JN b2R1bGVJbml0KSAodm9pZCk7CiAgICArICAgIDx0aXRsZT5TdGFydHVwIENhbGxiYWNrPC90aXRs ZT4KICAgICsgICAgPHBhcmE+CiAgICArICAgICBUaGUgPGZ1bmN0aW9uPnN0YXJ0dXBfY2I8L2Z1 bmN0aW9uPiBjYWxsYmFjayBpcyBleGVjdXRlZCBkaXJlY3RseSBhZnRlcgogICAgKy0gICAgbG9h ZGluZyB0aGUgbW9kdWxlLiBUaGlzIGNhbGxiYWNrIGNhbiBiZSB1c2VkIHRvIHNldCB1cCBsb2Nh bCBzdGF0ZSBhbmQKICAgICsrICAgIGxvYWRpbmcgdGhlIG1vZHVsZS4gVGhpcyBjYWxsYmFjayBj YW4gYmUgdXNlZCB0byBzZXQgdXAgbG9jYWwgc3RhdGUsCiAgICArKyAgICBkZWZpbmUgPGxpbmsg bGlua2VuZD0ib2F1dGgtdmFsaWRhdG9yLWhiYSI+Y3VzdG9tIEhCQSBvcHRpb25zPC9saW5rPiwg YW5kCiAgICArICAgICBwZXJmb3JtIGFkZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24gaWYgcmVxdWly ZWQuIElmIHRoZSB2YWxpZGF0b3IgbW9kdWxlCiAgICArICAgICBoYXMgc3RhdGUgaXQgY2FuIHVz ZSA8c3RydWN0ZmllbGQ+c3RhdGUtPnByaXZhdGVfZGF0YTwvc3RydWN0ZmllbGQ+IHRvCiAgICAr ICAgICBzdG9yZSBpdC4KICAgICtAQCBkb2Mvc3JjL3NnbWwvb2F1dGgtdmFsaWRhdG9ycy5zZ21s OiB0eXBlZGVmIHZvaWQgKCpWYWxpZGF0b3JTaHV0ZG93bkNCKSAoVmFsaWRhdG9yTW9kdWxlU3Rh dGUgKnN0YXRlKTsKICAgICsgICA8L3NlY3QyPgogICAgKyAKICAgICsgIDwvc2VjdDE+CiAgICAr KwogICAgKysgPHNlY3QxIGlkPSJvYXV0aC12YWxpZGF0b3ItaGJhIj4KICAgICsrICA8dGl0bGU+ Q3VzdG9tIEhCQSBPcHRpb25zPC90aXRsZT4KICAgICsrCiAgICArKyAgPHBhcmE+CiAgICArKyAg IExpa2Ugb3RoZXIgcHJlbG9hZGVkIGxpYnJhcmllcywgdmFsaWRhdG9yIG1vZHVsZXMgbWF5IGRl ZmluZQogICAgKysgICA8bGluayBsaW5rZW5kPSJydW50aW1lLWNvbmZpZy1jdXN0b20iPmN1c3Rv bSBHVUMgcGFyYW1ldGVyczwvbGluaz4gZm9yIHVzZXIKICAgICsrICAgY29uZmlndXJhdGlvbiBp biA8ZmlsZW5hbWU+cG9zdGdyZXNxbC5jb25mPC9maWxlbmFtZT4uIEhvd2V2ZXIsIGl0IG1heSBi ZQogICAgKysgICBkZXNpcmFibGUgdG8gY29uZmlndXJlIGJlaGF2aW9yIGF0IGEgbW9yZSBncmFu dWxhciBsZXZlbCAoc2F5LCBmb3IgYQogICAgKysgICBwYXJ0aWN1bGFyIGlzc3VlciBvciBhIGdy b3VwIG9mIHVzZXJzKSBpbnN0ZWFkIG9mIGdsb2JhbGx5LgogICAgKysgIDwvcGFyYT4KICAgICsr CiAgICArKyAgPHBhcmE+CiAgICArKyAgIEJlZ2lubmluZyBpbiA8cHJvZHVjdG5hbWU+UG9zdGdy ZVNRTDwvcHJvZHVjdG5hbWU+IDE5LCB2YWxpZGF0b3IKICAgICsrICAgaW1wbGVtZW50YXRpb25z IG1heSBkZWZpbmUgY3VzdG9tIG9wdGlvbnMgZm9yIHVzZSBpbnNpZGUKICAgICsrICAgPGZpbGVu YW1lPnBnX2hiYS5jb25mPC9maWxlbmFtZT4uIFRoZXNlIG9wdGlvbnMgYXJlIHRoZW4KICAgICsr ICAgPGxpbmsgbGlua2VuZD0iYXV0aC1vYXV0aC12YWxpZGF0b3Itb3B0aW9uIj5tYWRlIGF2YWls YWJsZTwvbGluaz4gdG8gdGhlIHVzZXIKICAgICsrICAgYXMgPGxpdGVyYWw+dmFsaWRhdG9yLjxy ZXBsYWNlYWJsZT5vcHRpb248L3JlcGxhY2VhYmxlPjwvbGl0ZXJhbD4uIFRoZSBBUEkKICAgICsr ICAgZm9yIHJlZ2lzdGVyaW5nIGFuZCByZXRyaWV2aW5nIGN1c3RvbSBvcHRpb25zIGlzIGRlc2Ny aWJlZCBiZWxvdy4KICAgICsrICA8L3BhcmE+CiAgICArKwogICAgKysgIDxzZWN0MiBpZD0ib2F1 dGgtdmFsaWRhdG9yLWhiYS1hcGkiPgogICAgKysgICA8dGl0bGU+T3B0aW9ucyBBUEk8L3RpdGxl PgogICAgKysgICAgPHBhcmE+CiAgICArKyAgICAgTW9kdWxlcyByZWdpc3RlciBjdXN0b20gSEJB IG9wdGlvbiBuYW1lcyBkdXJpbmcgdGhlIDxmdW5jdGlvbj5zdGFydHVwX2NiPC9mdW5jdGlvbj4K ICAgICsrICAgICBjYWxsYmFjaywgdXNpbmcgPGZ1bmN0aW9uPlJlZ2lzdGVyT0F1dGhIQkFPcHRp b25zKCk8L2Z1bmN0aW9uPjoKICAgICsrCiAgICArKzxwcm9ncmFtbGlzdGluZz4KICAgICsrLyoK ICAgICsrICogUmVnaXN0ZXIgYSBsaXN0IG9mIGN1c3RvbSBvcHRpb24gbmFtZXMgZm9yIHVzZSBp biBwZ19oYmEuY29uZi4gRm9yIGVhY2ggbmFtZQogICAgKysgKiAiZm9vIiByZWdpc3RlcmVkIGhl cmUsIHRoYXQgb3B0aW9uIHdpbGwgYmUgcHJvdmlkZWQgYXMgInZhbGlkYXRvci5mb28iIGluCiAg ICArKyAqIHRoZSBIQkEuCiAgICArKyAqCiAgICArKyAqIFZhbGlkIG9wdGlvbiBuYW1lcyBjb25z aXN0IG9mIGFscGhhbnVtZXJpYyBBU0NJSSwgdW5kZXJzY29yZSAoXyksIGFuZCBoeXBoZW4KICAg ICsrICogKC0pLiBJbnZhbGlkIG9wdGlvbiBuYW1lcyB3aWxsIGJlIGlnbm9yZWQgd2l0aCBhIFdB Uk5JTkcgbG9nZ2VkIGF0CiAgICArKyAqIGNvbm5lY3Rpb24gdGltZS4KICAgICsrICoKICAgICsr ICogVGhpcyBmdW5jdGlvbiBtYXkgb25seSBiZSBjYWxsZWQgZHVyaW5nIHRoZSBzdGFydHVwX2Ni IGNhbGxiYWNrLiBNdWx0aXBsZQogICAgKysgKiBjYWxscyBhcmUgcGVybWl0dGVkLCB3aGljaCB3 aWxsIGFwcGVuZCB0byB0aGUgZXhpc3RpbmcgbGlzdCBvZiByZWdpc3RlcmVkCiAgICArKyAqIG9w dGlvbnM7IG9wdGlvbnMgY2Fubm90IGJlIHVucmVnaXN0ZXJlZC4KICAgICsrICoKICAgICsrICog UGFyYW1ldGVyczoKICAgICsrICoKICAgICsrICogLSBzdGF0ZTogdGhlIHN0YXRlIHBvaW50ZXIg cGFzc2VkIHRvIHRoZSBzdGFydHVwX2NiIGNhbGxiYWNrCiAgICArKyAqIC0gbnVtOiAgIHRoZSBu dW1iZXIgb2Ygb3B0aW9ucyBpbiB0aGUgb3B0cyBhcnJheQogICAgKysgKiAtIG9wdHM6ICBhbiBh cnJheSBvZiBudWxsLXRlcm1pbmF0ZWQgb3B0aW9uIG5hbWVzIHRvIHJlZ2lzdGVyCiAgICArKyAq CiAgICArKyAqIFRoZSBsaXN0IG9mIG9wdGlvbiBuYW1lcyBpcyBjb3BpZWQgaW50ZXJuYWxseSwg YW5kIHRoZSBvcHRzIGFycmF5IGlzIG5vdAogICAgKysgKiByZXF1aXJlZCB0byByZW1haW4gdmFs aWQgYWZ0ZXIgdGhlIGNhbGwuCiAgICArKyAqLwogICAgKyt2b2lkIFJlZ2lzdGVyT0F1dGhIQkFP cHRpb25zKFZhbGlkYXRvck1vZHVsZVN0YXRlICpzdGF0ZSwgaW50IG51bSwKICAgICsrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpvcHRzW10pOwogICAgKys8L3Byb2dy YW1saXN0aW5nPgogICAgKysgICAgPC9wYXJhPgogICAgKysKICAgICsrICAgIDxwYXJhPgogICAg KysgICAgIEVhY2ggb3B0aW9uJ3MgdmFsdWUsIGlmIHNldCwgbWF5IGJlIGxhdGVyIHJldHJpZXZl ZCB1c2luZwogICAgKysgICAgIDxmdW5jdGlvbj5HZXRPQXV0aEhCQU9wdGlvbigpPC9mdW5jdGlv bj46CiAgICArKwogICAgKys8cHJvZ3JhbWxpc3Rpbmc+CiAgICArKy8qCiAgICArKyAqIFJldHJp ZXZlIHRoZSBzdHJpbmcgdmFsdWUgb2YgYW4gSEJBIG9wdGlvbiB3aGljaCB3YXMgcmVnaXN0ZXJl ZCB2aWEKICAgICsrICogUmVnaXN0ZXJPQXV0aEhCQU9wdGlvbnMoKS4gVXNhYmxlIG9ubHkgZHVy aW5nIHZhbGlkYXRlX2NiIG9yIHNodXRkb3duX2NiLgogICAgKysgKgogICAgKysgKiBJZiB0aGUg dXNlciBoYXMgc2V0IHRoZSBjb3JyZXNwb25kaW5nIG9wdGlvbiBpbiBwZ19oYmEuY29uZiwgdGhp cyBmdW5jdGlvbgogICAgKysgKiByZXR1cm5zIHRoYXQgdmFsdWUgYXMgYSBudWxsLXRlcm1pbmF0 ZWQgc3RyaW5nLCB3aGljaCBtdXN0IG5vdCBiZSBtb2RpZmllZAogICAgKysgKiBvciBmcmVlZC4g TlVMTCBpcyByZXR1cm5lZCBpbnN0ZWFkIGlmIHRoZSB1c2VyIGhhcyBub3Qgc2V0IHRoaXMgb3B0 aW9uLCBpZgogICAgKysgKiB0aGUgb3B0aW9uIG5hbWUgd2FzIG5vdCByZWdpc3RlcmVkLCBvciBp ZiB0aGlzIGZ1bmN0aW9uIGlzIGluY29ycmVjdGx5IGNhbGxlZAogICAgKysgKiBkdXJpbmcgdGhl IHN0YXJ0dXBfY2IuCiAgICArKyAqCiAgICArKyAqIFBhcmFtZXRlcnM6CiAgICArKyAqCiAgICAr KyAqIC0gc3RhdGU6ICAgdGhlIHN0YXRlIHBvaW50ZXIgcGFzc2VkIHRvIHRoZSB2YWxpZGF0ZV9j Yi9zaHV0ZG93bl9jYiBjYWxsYmFjawogICAgKysgKiAtIG9wdG5hbWU6IHRoZSBuYW1lIG9mIHRo ZSBvcHRpb24gdG8gcmV0cmlldmUKICAgICsrICovCiAgICArK2NvbnN0IGNoYXIgKkdldE9BdXRo SEJBT3B0aW9uKGNvbnN0IFZhbGlkYXRvck1vZHVsZVN0YXRlICpzdGF0ZSwKICAgICsrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqb3B0bmFtZSk7CiAgICArKzwvcHJv Z3JhbWxpc3Rpbmc+CiAgICArKyAgICA8L3BhcmE+CiAgICArKwogICAgKysgICAgPHBhcmE+CiAg ICArKyAgICAgU2VlIDx4cmVmIGxpbmtlbmQ9Im9hdXRoLXZhbGlkYXRvci1oYmEtZXhhbXBsZS11 c2FnZSIvPiBmb3Igc2FtcGxlIHVzYWdlLgogICAgKysgICAgPC9wYXJhPgogICAgKysgIDwvc2Vj dDI+CiAgICArKwogICAgKysgIDxzZWN0MiBpZD0ib2F1dGgtdmFsaWRhdG9yLWhiYS1saW1pdGF0 aW9ucyI+CiAgICArKyAgIDx0aXRsZT5MaW1pdGF0aW9uczwvdGl0bGU+CiAgICArKyAgIDxwYXJh PgogICAgKysgICAgPGl0ZW1pemVkbGlzdD4KICAgICsrICAgICA8bGlzdGl0ZW0+CiAgICArKyAg ICAgIDxwYXJhPgogICAgKysgICAgICAgT3B0aW9uIG5hbWVzIGFyZSBsaW1pdGVkIHRvIEFTQ0lJ IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLAogICAgKysgICAgICAgdW5kZXJzY29yZXMgKDxsaXRl cmFsPl88L2xpdGVyYWw+KSwgYW5kIGh5cGhlbnMgKDxsaXRlcmFsPi08L2xpdGVyYWw+KS4KICAg ICsrICAgICAgPC9wYXJhPgogICAgKysgICAgIDwvbGlzdGl0ZW0+CiAgICArKyAgICAgPGxpc3Rp dGVtPgogICAgKysgICAgICA8cGFyYT4KICAgICsrICAgICAgIE9wdGlvbiB2YWx1ZXMgYXJlIGFs d2F5cyBmcmVlZm9ybSBzdHJpbmdzIChpbiBjb250cmFzdCB0byBjdXN0b20gR1VDcywKICAgICsr ICAgICAgIHdoaWNoIHN1cHBvcnQgbnVtZXJpY3MsIGJvb2xlYW5zLCBhbmQgZW51bXMpLgogICAg KysgICAgICA8L3BhcmE+CiAgICArKyAgICAgPC9saXN0aXRlbT4KICAgICsrICAgICA8bGlzdGl0 ZW0+CiAgICArKyAgICAgIDxwYXJhPgogICAgKysgICAgICAgT3B0aW9uIG5hbWVzIGFuZCB2YWx1 ZXMgY2Fubm90IGJlIGNoZWNrZWQgYnkgdGhlIHNlcnZlciBkdXJpbmcgYSByZWxvYWQgb2YKICAg ICsrICAgICAgIHRoZSBjb25maWd1cmF0aW9uLiBBbnkgdW5yZWdpc3RlcmVkIG9wdGlvbnMgaW4g PGZpbGVuYW1lPnBnX2hiYS5jb25mPC9maWxlbmFtZT4KICAgICsrICAgICAgIHdpbGwgaW5zdGVh ZCByZXN1bHQgaW4gY29ubmVjdGlvbiBmYWlsdXJlcy4gSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5 IG9mCiAgICArKyAgICAgICBlYWNoIG1vZHVsZSB0byBkb2N1bWVudCBhbmQgdmVyaWZ5IHRoZSBz eW50YXggb2Ygb3B0aW9uIHZhbHVlcyBhcyBuZWVkZWQuCiAgICArKyAgICAgICA8Zm9vdG5vdGU+ CiAgICArKyAgICAgICAgPHBhcmE+CiAgICArKyAgICAgICAgIElmIGEgbW9kdWxlIGZpbmRzIGFu IGludmFsaWQgb3B0aW9uIHZhbHVlIGR1cmluZyA8ZnVuY3Rpb24+dmFsaWRhdGVfY2I8L2Z1bmN0 aW9uPiwKICAgICsrICAgICAgICAgaXQncyByZWNvbW1lbmRlZCB0byA8bGluayBsaW5rZW5kPSJv YXV0aC12YWxpZGF0b3ItY2FsbGJhY2stdmFsaWRhdGUiPnNpZ25hbAogICAgKysgICAgICAgICBh biBpbnRlcm5hbCBlcnJvcjwvbGluaz4gYnkgc2V0dGluZyA8c3RydWN0ZmllbGQ+cmVzdWx0LT5l cnJvcl9kZXRhaWw8L3N0cnVjdGZpZWxkPgogICAgKysgICAgICAgICB0byBhIGRlc2NyaXB0aW9u IG9mIHRoZSBwcm9ibGVtIGFuZCByZXR1cm5pbmcgPGxpdGVyYWw+ZmFsc2U8L2xpdGVyYWw+Lgog ICAgKysgICAgICAgIDwvcGFyYT4KICAgICsrICAgICAgIDwvZm9vdG5vdGU+CiAgICArKyAgICAg IDwvcGFyYT4KICAgICsrICAgICA8L2xpc3RpdGVtPgogICAgKysgICAgPC9pdGVtaXplZGxpc3Q+ CiAgICArKyAgIDwvcGFyYT4KICAgICsrICA8L3NlY3QyPgogICAgKysKICAgICsrICA8c2VjdDIg aWQ9Im9hdXRoLXZhbGlkYXRvci1oYmEtZXhhbXBsZS11c2FnZSI+CiAgICArKyAgIDx0aXRsZT5F eGFtcGxlIFVzYWdlPC90aXRsZT4KICAgICsrCiAgICArKyAgIDxwYXJhPgogICAgKysgICAgRm9y IGEgaHlwb3RoZXRpY2FsIG1vZHVsZSwgdGhlIG9wdGlvbnMgPGxpdGVyYWw+Zm9vPC9saXRlcmFs PiBhbmQKICAgICsrICAgIDxsaXRlcmFsPmJhcjwvbGl0ZXJhbD4gY291bGQgYmUgcmVnaXN0ZXJl ZCBhcyBmb2xsb3dzOgogICAgKysKICAgICsrPHByb2dyYW1saXN0aW5nPgogICAgKytzdGF0aWMg dm9pZAogICAgKyt2YWxpZGF0b3Jfc3RhcnR1cChWYWxpZGF0b3JNb2R1bGVTdGF0ZSAqc3RhdGUp CiAgICArK3sKICAgICsrICAgIHN0YXRpYyBjb25zdCBjaGFyICpvcHRzW10gPSB7CiAgICArKyAg ICAgICAgImZvbyIsICAgICAgLyogZGVzY3JpcHRpb24gb2YgYWNjZXNzIHByaXZpbGVnZXMgKi8K ICAgICsrICAgICAgICAiYmFyIiwgICAgICAvKiBtYWdpYyBVUkwgZm9yIGFkZGl0aW9uYWwgYWRt aW5pc3RyYXRvciBwb3dlcnMgKi8KICAgICsrICAgIH07CiAgICArKwogICAgKysgICAgUmVnaXN0 ZXJPQXV0aEhCQU9wdGlvbnMoc3RhdGUsIGxlbmd0aG9mKG9wdHMpLCBvcHRzKTsKICAgICsrCiAg ICArKyAgICAvKiAuLi5vdGhlciBzZXR1cC4uLiAqLwogICAgKyt9CiAgICArKzwvcHJvZ3JhbWxp c3Rpbmc+CiAgICArKyAgIDwvcGFyYT4KICAgICsrCiAgICArKyAgIDxwYXJhPgogICAgKysgICAg VGhlIGZvbGxvd2luZyBzYW1wbGUgZW50cmllcyBpbiA8ZmlsZW5hbWU+cGdfaGJhLmNvbmY8L2Zp bGVuYW1lPiBjYW4gdGhlbgogICAgKysgICAgbWFrZSB1c2Ugb2YgdGhlc2Ugb3B0aW9uczoKICAg ICsrCiAgICArKzxwcm9ncmFtbGlzdGluZz4KICAgICsrIyBUWVBFICAgREFUQUJBU0UgICBVU0VS ICAgQUREUkVTUyAgICBNRVRIT0QKICAgICsraG9zdHNzbCAgcG9zdGdyZXMgICBhZG1pbiAgMC4w LjAuMC8wICBvYXV0aCBpc3N1ZXI9aHR0cHM6Ly9hZG1pbi5leGFtcGxlLmNvbSBcCiAgICArKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGU9InBnLWFkbWlu IG9wZW5pZCBlbWFpbCIgXAogICAgKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG1hcD1vYXV0aC1lbWFpbCBcCiAgICArKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yLmZvbz0iYWRtaW4gYWNjZXNzIiBcCiAgICAr KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yLmJh cj1odHRwczovL21hZ2ljLmV4YW1wbGUuY29tCiAgICArKwogICAgKytob3N0c3NsICBwb3N0Z3Jl cyAgIGFsbCAgICAwLjAuMC4wLzAgIG9hdXRoIGlzc3Vlcj1odHRwczovL3d3dy5leGFtcGxlLmNv bSBcCiAgICArKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nv cGU9InBnLXVzZXIgb3BlbmlkIGVtYWlsIiBcCiAgICArKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbWFwPW9hdXRoLWVtYWlsIFwKICAgICsrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3IuZm9vPSJ1c2VyIGFjY2Vz cyIKICAgICsrPC9wcm9ncmFtbGlzdGluZz4KICAgICsrICAgPC9wYXJhPgogICAgKysKICAgICsr ICAgPHBhcmE+CiAgICArKyAgICBUaGUgbW9kdWxlIGNhbiByZXRyaWV2ZSB0aGUgb3B0aW9uIHNl dHRpbmdzIGZyb20gdGhlIEhCQSBkdXJpbmcgdmFsaWRhdGlvbjoKICAgICsrCiAgICArKzxwcm9n cmFtbGlzdGluZz4KICAgICsrc3RhdGljIGJvb2wKICAgICsrdmFsaWRhdGVfdG9rZW4oY29uc3Qg VmFsaWRhdG9yTW9kdWxlU3RhdGUgKnN0YXRlLAogICAgKysgICAgICAgICAgICAgICBjb25zdCBj aGFyICp0b2tlbiwgY29uc3QgY2hhciAqcm9sZSwKICAgICsrICAgICAgICAgICAgICAgVmFsaWRh dG9yTW9kdWxlUmVzdWx0ICpyZXMpCiAgICArK3sKICAgICsrICAgIGNvbnN0IGNoYXIgKmZvbyA9 IEdldE9BdXRoSEJBT3B0aW9uKHN0YXRlLCAiZm9vIik7IC8qICJhZG1pbiBhY2Nlc3MiIG9yICJ1 c2VyIGFjY2VzcyIgKi8KICAgICsrICAgIGNvbnN0IGNoYXIgKmJhciA9IEdldE9BdXRoSEJBT3B0 aW9uKHN0YXRlLCAiYmFyIik7IC8qICJodHRwczovL21hZ2ljLmV4YW1wbGUuY29tIiBvciBOVUxM ICovCiAgICArKwogICAgKysgICAgaWYgKGJhciAmYW1wOyZhbXA7ICFpc192YWxpZF91cmwoYmFy KSkKICAgICsrICAgIHsKICAgICsrICAgICAgICByZXMtPmVycm9yX2RldGFpbCA9IHBzcHJpbnRm KCJ2YWxpZGF0b3IuYmFyIChcIiVzXCIpIGlzIG5vdCBhIHZhbGlkIFVSTC4iLCBiYXIpOwogICAg KysgICAgICAgIHJldHVybiBmYWxzZTsKICAgICsrICAgIH0KICAgICsrCiAgICArKyAgICAvKiBw cm9jZWVkIHRvIHZhbGlkYXRlIHRva2VuICovCiAgICArK30KICAgICsrPC9wcm9ncmFtbGlzdGlu Zz4KICAgICsrICAgPC9wYXJhPgogICAgKysKICAgICsrICAgPHBhcmE+CiAgICArKyAgICBXaGVu IG11bHRpcGxlIHZhbGlkYXRvcnMgYXJlIGluIHVzZSwgdGhlaXIgcmVnaXN0ZXJlZCBvcHRpb24g bGlzdHMgcmVtYWluCiAgICArKyAgICBpbmRlcGVuZGVudDoKICAgICsrCiAgICArKzxwcm9ncmFt bGlzdGluZz4KICAgICsrPGxpbmVhbm5vdGF0aW9uPmluIHBvc3RncmVzcWwuY29uZjo8L2xpbmVh bm5vdGF0aW9uPgogICAgKytvYXV0aF92YWxpZGF0b3JfbGlicmFyaWVzID0gJ2V4YW1wbGVfb3Jn LCBteV92YWxpZGF0b3InCiAgICArKwogICAgKys8bGluZWFubm90YXRpb24+aW4gcGdfaGJhLmNv bmY6PC9saW5lYW5ub3RhdGlvbj4KICAgICsrIyBUWVBFICAgREFUQUJBU0UgICBVU0VSICAgQURE UkVTUyAgICBNRVRIT0QKICAgICsraG9zdHNzbCAgcG9zdGdyZXMgICBhZG1pbiAgMC4wLjAuMC8w ICBvYXV0aCBpc3N1ZXI9aHR0cHM6Ly9hZG1pbi5leGFtcGxlLmNvbSBcCiAgICArKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGU9InBnLWFkbWluIG9wZW5p ZCBlbWFpbCIgXAogICAgKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG1hcD1vYXV0aC1lbWFpbCBcCiAgICArKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdmFsaWRhdG9yPW15X3ZhbGlkYXRvciBcCiAgICArKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yLmZvbz0iYWRtaW4gYWNj ZXNzIiBcCiAgICArKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dmFsaWRhdG9yLmJhcj1odHRwczovL21hZ2ljLmV4YW1wbGUuY29tCiAgICArKwogICAgKytob3N0 c3NsICBwb3N0Z3JlcyAgIGFsbCAgICAwLjAuMC4wLzAgIG9hdXRoIGlzc3Vlcj1odHRwczovL3d3 dy5leGFtcGxlLm9yZyBcCiAgICArKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2NvcGU9InBnLXVzZXIgb3BlbmlkIHByb2ZpbGUiIFwKICAgICsrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3I9ZXhhbXBsZV9vcmcg XAogICAgKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGVn YXRlX2lkZW50X21hcHBpbmc9MSBcCiAgICArKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdmFsaWRhdG9yLm1hZ2ljPW9uIFwKICAgICsrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3IubW9yZV9tYWdpYz1vZmYKICAg ICsrPC9wcm9ncmFtbGlzdGluZz4KICAgICsrICAgPC9wYXJhPgogICAgKysgIDwvc2VjdDI+CiAg ICArKyA8L3NlY3QxPgogICAgKyA8L2NoYXB0ZXI+CiAgICAgCiAgICAgICMjIHNyYy9pbmNsdWRl L2xpYnBxL2hiYS5oICMjCiAgICAgQEAgc3JjL2luY2x1ZGUvbGlicHEvaGJhLmg6IHR5cGVkZWYg c3RydWN0IEhiYUxpbmUKICAgIEBAIHNyYy9iYWNrZW5kL2xpYnBxL2F1dGgtb2F1dGguYzogb2F1 dGhfZXhjaGFuZ2Uodm9pZCAqb3BhcSwgY29uc3QgY2hhciAqaW5wdXQsIGluCiAgICAgKwkJcmV0 dXJuIFBHX1NBU0xfRVhDSEFOR0VfRkFJTFVSRTsKICAgICArCX0KICAgICArCiAgICAtIAlpZiAo IXZhbGlkYXRlKGN0eC0+cG9ydCwgYXV0aCwgbG9nZGV0YWlsKSkKICAgICsgCWlmIChhdXRoWzBd ID09ICdcMCcpCiAgICAgIAl7CiAgICAtIAkJZ2VuZXJhdGVfZXJyb3JfcmVzcG9uc2UoY3R4LCBv dXRwdXQsIG91dHB1dGxlbik7CiAgICArIAkJLyoKICAgICBAQCBzcmMvYmFja2VuZC9saWJwcS9h dXRoLW9hdXRoLmM6IHNodXRkb3duX3ZhbGlkYXRvcl9saWJyYXJ5KHZvaWQgKmFyZykKICAgICAg ewogICAgICAJaWYgKFZhbGlkYXRvckNhbGxiYWNrcy0+c2h1dGRvd25fY2IgIT0gTlVMTCkKICAg IEBAIHNyYy9iYWNrZW5kL2xpYnBxL2F1dGgtb2F1dGguYzogZG9uZToKICAgICArCQlpZiAoIWZv dW5kKQogICAgICsJCXsKICAgICArCQkJLyoKICAgIC0rCQkJICogQmFkIG9wdGlvbiBuYW1lLiBN aXJyb3IgdGhlIGVycm9yIG1lc3NhZ2VzIGluIGhiYS5jIGhlcmUsCiAgICArKwkJCSAqIFVua25v d24gb3B0aW9uIG5hbWUuIE1pcnJvciB0aGUgZXJyb3IgbWVzc2FnZXMgaW4gaGJhLmMgaGVyZSwK ICAgICArCQkJICoga2VlcGluZyBpbiBtaW5kIHRoYXQgdGhlIG9yaWdpbmFsICJ2YWxpZGF0b3Iu IiBwcmVmaXggd2FzCiAgICAgKwkJCSAqIHN0cmlwcGVkIGZyb20gdGhlIGtleSBkdXJpbmcgcGFy c2luZy4KICAgICArCQkJICoKICAgIEBAIHNyYy9iYWNrZW5kL2xpYnBxL2hiYS5jOiBwYXJzZV9o YmFfYXV0aF9vcHQoY2hhciAqbmFtZSwgY2hhciAqdmFsLCBIYmFMaW5lICpoYmFsCiAgICAgKwl7 CiAgICAgKwkJY29uc3QgY2hhciAqa2V5ID0gbmFtZSArIHN0cmxlbigidmFsaWRhdG9yLiIpOwog ICAgICsKICAgICsrCQlSRVFVSVJFX0FVVEhfT1BUSU9OKHVhT0F1dGgsIG5hbWUsICJvYXV0aCIp OwogICAgKysKICAgICArCQkvKgogICAgICsJCSAqIFZhbGlkYXRvciBtb2R1bGVzIG1heSByZWdp c3RlciB0aGVpciBvd24gcGVyLUhCQS1saW5lIG9wdGlvbnMuCiAgICAgKwkJICogVW5mb3J0dW5h dGVseSwgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0byByZXF1aXJlIHRoZXNlIG1vZHVsZXMgdG8gYmUK ICAgIEBAIHNyYy9iYWNrZW5kL2xpYnBxL2hiYS5jOiBwYXJzZV9oYmFfYXV0aF9vcHQoY2hhciAq bmFtZSwgY2hhciAqdmFsLCBIYmFMaW5lICpoYmFsCiAgICAgKwkJCXJldHVybiBmYWxzZTsKICAg ICArCQl9CiAgICAgKwogICAgLSsJCVJFUVVJUkVfQVVUSF9PUFRJT04odWFPQXV0aCwgbmFtZSwg Im9hdXRoIik7CiAgICAgKwkJaGJhbGluZS0+b2F1dGhfb3B0X2tleXMgPSBsYXBwZW5kKGhiYWxp bmUtPm9hdXRoX29wdF9rZXlzLCBwc3RyZHVwKGtleSkpOwogICAgICsJCWhiYWxpbmUtPm9hdXRo X29wdF92YWxzID0gbGFwcGVuZChoYmFsaW5lLT5vYXV0aF9vcHRfdmFscywgcHN0cmR1cCh2YWwp KTsKICAgICArCX0K --000000000000aaebf1064e80dc74--