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 1vyJVa-000142-2M for pgsql-hackers@arkaria.postgresql.org; Fri, 06 Mar 2026 00:57:39 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vyJVZ-0026AR-0b for pgsql-hackers@arkaria.postgresql.org; Fri, 06 Mar 2026 00:57:37 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vyJVY-0026AA-2D for pgsql-hackers@lists.postgresql.org; Fri, 06 Mar 2026 00:57:37 +0000 Received: from mail-qv1-xf34.google.com ([2607:f8b0:4864:20::f34]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vyJVP-000000016JO-2xnh for pgsql-hackers@postgresql.org; Fri, 06 Mar 2026 00:57:30 +0000 Received: by mail-qv1-xf34.google.com with SMTP id 6a1803df08f44-899fa9610bbso80763346d6.0 for ; Thu, 05 Mar 2026 16:57:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772758645; cv=none; d=google.com; s=arc-20240605; b=AZux1YPN1r1SBST+Na/CyiNSFlWcof4LYQ/eu6yJiRJFiN1cMQCzAwd6La75I2FDdk zKWWzNVSCEKJg3RDe5PgROt0gR77JhDBAdTfKWY6dGk7pCvyI74f1Z1GiteFhys2rnN3 yUI7n4maRRXLs7WJrceds24156VeoPriTudc55O2pnCACAg2lXNSb/EHGZ2gPIAlBR6+ 9gtfpdzFlI/i4gnqzfyxMQtleijXIvookjOEdXzF0qAuzU6D9fWVoIf7vz9rpCYX1mBj owHfuPe6fYvbs0tdRM6cbFZZ0w7XqHNoXcgBMnQpcxFY0UY066uUXdeBljAsc8NrAjbB 7cqQ== 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=FtrqTIOTYtslbQZoxAgeoL9xy1JppuTy+Zhz1MabGBg=; fh=pfkmzW6GKlJ0l1fsmHrQ2YGNtR4HiNVrGovoMNulRlY=; b=lTU66oWdaYMwjFVYM6JXEIz0tpWvnynDOdTbgE4wkav5FzystplCg4DTYR7FYFNpEm CSdltnXyiGR0HY0xebfiqN9h0Zqj6L4R9bAdA81zIHhrHuMMazBK2XGr+ZPY9UiOlxFh l0UgStEg5p0Qeq/MAlv3b+W++J3kRJ8jDWhIVRzHVK0WpvNTB2onRa0+bOKygFjsU67b R60RVk0/G4KBRN4o4LIjY3zaJRkrODVtmWZRz2BeAC365WeEICamWaNaUt7ZyaEolGhs O4T3E3rpeQl0kY96tlddkq16iZkr0uJlC4OByPSyTWKaqdS4McsuNO/bayc5YnM4kuw/ xMUw==; darn=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=1772758645; x=1773363445; darn=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=FtrqTIOTYtslbQZoxAgeoL9xy1JppuTy+Zhz1MabGBg=; b=crj0rx9Io+hS17k0N4Db6po7zuahRrR4lAhbrrTxo265vRU10nM1Nmdncx6svM6ZCl QAcxO0BfVepMVqxmoVmINtc4F3HoZU3mJmoe6Cjgzr0egj52P54JY7159RlQKp1tMM2c VQK0GU3t9b9L7BWGhlHPtJgZsjGPZsRYrKMiirtqntrSTTR+RvzBgP0f4uCVmig7Audm mzY3ka2VhffYgzQwxXBLOaBD4dTDc/plWEvhzW3JX7vPnPlAiWK9BLDaJcfT4Qbdsnt8 JfhbBEpMyewBPPoXhOTgh674er03XN3IZwljGKqn13rh5fcXoA9AmZrC0lJWWkmTqWmR NfWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772758645; x=1773363445; 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=FtrqTIOTYtslbQZoxAgeoL9xy1JppuTy+Zhz1MabGBg=; b=UldVTKZzB62RMa2ag3ZhdKTb16j3TccQu4yM+ZHpLdOl/6wvlOhAdYRfvuTRR5a38i A7E33c+M6FS0JIl0B38rnP+/FzAFSaKjqrK+Njc/2Bem4II+aIPTS1OPAY/p1r2XqrYU 2w8+vRgSpOCdWSg+i4XABGxrJ0YaknJr67nFa/jQ+Q2EXj31O580X+2uhNAbFipXfbFF nYoJJLbEj/KXBbGvbirT4m81dPahXinKo6po/gjNWBAe9P+mLFy4sxyWrBSpzLueMdi6 39FjO+cdCsAJHlqpz2UH/4DHDOwJKtXtMh/MekYaOqZ2/eek7vMpp4hnQQ5/iHGS1MUg KXWA== X-Gm-Message-State: AOJu0YxMAo/fW4XCX2PbGQGNJF4tmodGRiQLqr2w35p0/lP/8TwdaePO lcDSBQveAAfsHXsDEGfc7gxHsn+WaJoiEhdwUnwt6aObUwg0it3eR5NnDJI6WkD5hw7uODjEAon T5TkxJeSscvxSCBy1ILVOnOhfSV41Of3N3yDSCRfs X-Gm-Gg: ATEYQzxMGXDYO6s1WntqcMdLlPHJ3r3kmVn8zwGDlAVNrgnEfc4JQ+ir7RQioiN2IPV QwwhKJRI3eKzE+IoxKLfchlVO14wzTQUH0LksGTkxYSyKnIHo5JrcRXBxdYvBNJSoABOE8gO92h FdRZGbvFCzNIVYdFFFu6TB+itbnUEEsCPJDCYz4PMgMHvIxlLVnDEtft6QxXX6lrAauXvJuAM1B 6tsp/9oAQP2qXNxQ4oqBllDMuMCMkbcPw+5xqs70LmWRtPXIX3g3X6w9aZFGlDKK+4xM9bCYPzc cmlwJIBeAw== X-Received: by 2002:a05:6214:daf:b0:899:eba1:3c09 with SMTP id 6a1803df08f44-89a30aa01f1mr2975796d6.39.1772758645317; Thu, 05 Mar 2026 16:57:25 -0800 (PST) MIME-Version: 1.0 References: <3720B2E1-0B96-4063-8D63-B5AE6AFEA159@gmail.com> In-Reply-To: From: Jacob Champion Date: Thu, 5 Mar 2026 16:57:13 -0800 X-Gm-Features: AaiRm518RZ-uWWAR1wJIRikKjvg1w6se-4ou6PnLY47iGfg86TiGCgbxqUIRNKQ Message-ID: Subject: Re: [oauth] Stabilize the libpq-oauth ABI (and allow alternative implementations?) To: Zsolt Parragi Cc: PostgreSQL Hackers , Chao Li Content-Type: multipart/mixed; boundary="000000000000545e04064c5089cb" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000545e04064c5089cb Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Mar 3, 2026 at 2:08=E2=80=AFPM Jacob Champion wrote: > I don't plan to block the other patches on -0006, since -0004 is > blocking PGOAUTHCAFILE. v5-0001 and -0002 are now committed. Attached is a v6 rebase with some minor self-review fixups and the removal of ASan from the poisoning experiment. v6-0001 through -0003 are targeted for commit next. I'll leave -0004 for later; I plan to ask for some committer review, since it's pretty unusual code for libpq, but it needs a real commit message and some better docs first. As for -0005: I think I'll cherry-pick only the ability for the libpq_oauth_init entry to be optional, marking any flows that don't provide it as user-defined, to make it possible for v19 developers to help us iterate on v20 if they want. Thanks, --Jacob --000000000000545e04064c5089cb Content-Type: text/plain; charset="US-ASCII"; name="since-v5.diff.txt" Content-Disposition: attachment; filename="since-v5.diff.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mme6h9sy0 MTogIGNhZWM5Mzc5MDU1IDwgLTogIC0tLS0tLS0tLS0tIG9hdXRoOiBSZXBvcnQgY2xlYW51cCBl cnJvcnMgYXMgd2FybmluZ3Mgb24gc3RkZXJyCjI6ICA3MjI4YWYxMTRjYSA8IC06ICAtLS0tLS0t LS0tLSBsaWJwcTogQWRkIFBRZ2V0VGhyZWFkTG9jaygpIHRvIG1pcnJvciBQUXJlZ2lzdGVyVGhy ZWFkTG9jaygpCjM6ICA3NTFkZjIyZjk5ZCAhIDE6ICA5MGYwNWM1ZDk2MyBsaWJwcTogSW50cm9k dWNlIFBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOX1YyCiAgICBAQCBkb2Mvc3JjL3NnbWwv bGlicHEuc2dtbDogdHlwZWRlZiBzdHJ1Y3QgUEdvYXV0aEJlYXJlclJlcXVlc3QKICAgICArICAg ICAgICAgPHJlcGxhY2VhYmxlPmlzc3VlcjwvcmVwbGFjZWFibGU+IGNvbnRhaW5zIHRoZSBpc3N1 ZXIgaWRlbnRpZmllciwgYXMKICAgICArICAgICAgICAgZGVmaW5lZCBpbiA8dWxpbmsgdXJsPSJo dHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzkyMDciPlJGQyA5MjA3PC91 bGluaz4sCiAgICAgKyAgICAgICAgIHRoYXQgaXMgaW4gdXNlIGZvciB0aGUgY3VycmVudCBjb25u ZWN0aW9uLiBUaGlzIGlkZW50aWZpZXIgaXMKICAgIC0rICAgICAgICAgZGV0ZXJtaW5lZCBieSA8 eHJlZiBsaW5rZW5kPSJsaWJwcS1jb25uZWN0LW9hdXRoLWlzc3VlciIvPi4KICAgICsrICAgICAg ICAgZGVyaXZlZCBmcm9tIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLWNvbm5lY3Qtb2F1dGgtaXNzdWVy Ii8+LgogICAgICsgICAgICAgICBUbyBhdm9pZCBtaXgtdXAgYXR0YWNrcywgY3VzdG9tIGZsb3dz IHNob3VsZCBlbnN1cmUgdGhhdCBhbnkgZGlzY292ZXJ5CiAgICAgKyAgICAgICAgIG1ldGFkYXRh IHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciBtYXRjaGVzIHRoaXMgaXNzdWVy IElELgogICAgICsgICAgICAgIDwvcGFyYT4KICAgIEBAIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2Zl LWF1dGgtb2F1dGguYzogc2V0dXBfdG9rZW5fcmVxdWVzdChQR2Nvbm4gKmNvbm4sIGZlX29hdXRo CiAgICAgIAogICAgIAogICAgICAjIyBzcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci9v YXV0aF9ob29rX2NsaWVudC5jICMjCiAgICAtQEAKICAgIC0gCiAgICAtICNpbmNsdWRlICJnZXRv cHRfbG9uZy5oIgogICAgLSAjaW5jbHVkZSAibGlicHEtZmUuaCIKICAgIC0rI2luY2x1ZGUgInBx ZXhwYnVmZmVyLmgiCiAgICAtIAogICAgLSBzdGF0aWMgaW50CWhhbmRsZV9hdXRoX2RhdGEoUEdh dXRoRGF0YSB0eXBlLCBQR2Nvbm4gKmNvbm4sIHZvaWQgKmRhdGEpOwogICAgLSBzdGF0aWMgUG9z dGdyZXNQb2xsaW5nU3RhdHVzVHlwZSBhc3luY19jYihQR2Nvbm4gKmNvbm4sCiAgICAgQEAgc3Jj L3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Ivb2F1dGhfaG9va19jbGllbnQuYzogdXNhZ2Uo Y2hhciAqYXJndltdKQogICAgICAKICAgICAgCXByaW50ZigicmVjb2duaXplZCBmbGFnczpcbiIp Owo0OiAgZmI5OTE1NDM3ZGEgPSAyOiAgZDhmYmZjOGY3YTAgbGlicHEtb2F1dGg6IFVzZSB0aGUg UEdvYXV0aEJlYXJlclJlcXVlc3RWMiBBUEkKNTogIGVkNmU3MjY4ZWMyID0gMzogIDk2YmQ1OTcw NjY4IGxpYnBxLW9hdXRoOiBOZXZlciBsaW5rIGFnYWluc3QgbGlicHEncyBlbmNvZGluZyBmdW5j dGlvbnMKNjogIGU0YjA5ODUzZTNhICEgNDogIDBlN2ZhZTFlMTUyIFdJUDogdGVzdCBvdXQgcG9p c29uaW5nCiAgICBAQCBNZXRhZGF0YQogICAgICAjIyBDb21taXQgbWVzc2FnZSAjIwogICAgICAg ICBXSVA6IHRlc3Qgb3V0IHBvaXNvbmluZwogICAgIAogICAgLSAjIyBzcmMvaW50ZXJmYWNlcy9s aWJwcS9tZXNvbi5idWlsZCAjIwogICAgLUBAIHNyYy9pbnRlcmZhY2VzL2xpYnBxL21lc29uLmJ1 aWxkOiBsaWJwcV9jX2FyZ3MgPSBbJy1EU09fTUFKT1JfVkVSU0lPTj01J10KICAgIC0gIyBUaGUg T0F1dGggaW1wbGVtZW50YXRpb24gZGlmZmVycyBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgbGli cmFyeSBiZWluZyBidWlsdC4KICAgIC0gbGlicHFfc29fY19hcmdzID0gWyctRFVTRV9EWU5BTUlD X09BVVRIJ10KICAgIC0gCiAgICAtK2xpYnBxX2xpbmtfYXJncyA9IFtdCiAgICAtK2lmIGhvc3Rf c3lzdGVtID09ICdkYXJ3aW4nCiAgICAtKyAgIyBUT0RPIHN0YXRpY2xpYiB0b28uLi4KICAgIC0r ICBsaWJwcV9saW5rX2FyZ3MgKz0gWwogICAgLSsgICAgJy1XbCwtVSxfX19hc2FuX3BvaXNvbl9t ZW1vcnlfcmVnaW9uJywKICAgIC0rICAgICctV2wsLVUsX19fYXNhbl91bnBvaXNvbl9tZW1vcnlf cmVnaW9uJywKICAgIC0rICBdCiAgICAtK2VuZGlmCiAgICAtKwogICAgLSAjIE5vdCB1c2luZyBi b3RoX2xpYnJhcmllcygpIGhlcmUgYXMKICAgIC0gIyAxKSByZXNvdXJjZSBmaWxlcyBzaG91bGQg b25seSBiZSBpbiB0aGUgc2hhcmVkIGxpYnJhcnkKICAgIC0gIyAyKSB3ZSB3YW50IHRoZSAucGMg ZmlsZSB0byBpbmNsdWRlIGEgZGVwZW5kZW5jeSB0byB7cGdwb3J0LGNvbW1vbn1fc3RhdGljIGZv cgogICAgLUBAIHNyYy9pbnRlcmZhY2VzL2xpYnBxL21lc29uLmJ1aWxkOiBsaWJwcV9zbyA9IHNo YXJlZF9saWJyYXJ5KCdsaWJwcScsCiAgICAtICAgZGFyd2luX3ZlcnNpb25zOiBbJzUnLCAnNS4n ICsgcGdfdmVyc2lvbl9tYWpvci50b19zdHJpbmcoKV0sCiAgICAtICAgZGVwZW5kZW5jaWVzOiBb ZnJvbnRlbmRfc2hsaWJfY29kZSwgbGlicHFfZGVwc10sCiAgICAtICAgbGlua19kZXBlbmRzOiBl eHBvcnRfZmlsZSwKICAgIC0tICBsaW5rX2FyZ3M6IGV4cG9ydF9mbXQuZm9ybWF0KGV4cG9ydF9m aWxlLmZ1bGxfcGF0aCgpKSwKICAgIC0rICBsaW5rX2FyZ3M6IFsKICAgIC0rICAgIGV4cG9ydF9m bXQuZm9ybWF0KGV4cG9ydF9maWxlLmZ1bGxfcGF0aCgpKSwKICAgIC0rICAgIGxpYnBxX2xpbmtf YXJncywKICAgIC0rICBdLAogICAgLSAgIGt3YXJnczogZGVmYXVsdF9saWJfYXJncywKICAgIC0g KQogICAgLSBsaWJwcV90YXJnZXRzICs9IGxpYnBxX3NvCiAgICAtCiAgICAtICMjIHNyYy9pbnRl cmZhY2VzL2xpYnBxL01ha2VmaWxlICMjCiAgICAtQEAgc3JjL2ludGVyZmFjZXMvbGlicHEvTWFr ZWZpbGU6IGlmbmVxICgkKFBPUlROQU1FKSwgd2luMzIpCiAgICAtIG92ZXJyaWRlIENGTEFHUyAr PSAkKFBUSFJFQURfQ0ZMQUdTKQogICAgLSBlbmRpZgogICAgLSAKICAgIC0raWZlcSAoJChQT1JU TkFNRSksZGFyd2luKQogICAgLSsjIFRPRE8gc3RhdGljbGliIHRvby4uLgogICAgLStvdmVycmlk ZSBMREZMQUdTICs9IC1XbCwtVSxfX19hc2FuX3BvaXNvbl9tZW1vcnlfcmVnaW9uCiAgICAtK292 ZXJyaWRlIExERkxBR1MgKz0gLVdsLC1VLF9fX2FzYW5fdW5wb2lzb25fbWVtb3J5X3JlZ2lvbgog ICAgLStlbmRpZgogICAgLSsKICAgIC0gT0JKUyA9IFwKICAgIC0gCSQoV0lOMzJSRVMpIFwKICAg IC0gCWZlLWF1dGgtc2NyYW0ubyBcCiAgICAtCiAgICAgICMjIHNyYy9pbnRlcmZhY2VzL2xpYnBx L2ZlLWF1dGgtb2F1dGguaCAjIwogICAgIEBAIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgt b2F1dGguaDogdHlwZWRlZiBzdHJ1Y3QKICAgICAgCVBHY29ubgkgICAqY29ubjsKICAgIEBAIHNy Yy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguYzogb2F1dGhfdW5zYWZlX2RlYnVnZ2lu Z19lbmFibGVkKHZvaWQpCiAgICAgKyAqIFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIuIChTdWNoIGNs aWVudHMgbWF5IGNyYXNoIG9yIHdvcnNlIHdoZW4gc3BlYWtpbmcgdG8KICAgICArICogbGlicHEg MTguKQogICAgICsgKgogICAgLSsgKiBUaGlzIGF0dGVtcHRzIHRvIHVzZSBWYWxncmluZCBhbmQg QWRkcmVzc1Nhbml0aXplciBob29rcywgaWYgcHJlc2VudCwgdG8gbWFyawogICAgLSsgKiB0aGUg ZXh0cmEgbWVtYmVycyBhcyBpbmFjY2Vzc2libGUuIEZvciB1bmluc3RydW1lbnRlZCBidWlsZHMs IGl0IGFsc28gbXVuZ2VzCiAgICAtKyAqIHJlcXVlc3QtPmlzc3VlciB0byB0cnkgdG8gY3Jhc2gg Y2xpZW50cyB0aGF0IHBlcmZvcm0gc3RyaW5nIG9wZXJhdGlvbnMsIGFuZAogICAgLSsgKiBpdCBh Ym9ydHMgaWYgcmVxdWVzdC0+ZXJyb3IgaXMgc2V0LgogICAgKysgKiBUaGlzIGF0dGVtcHRzIHRv IHVzZSBWYWxncmluZCBob29rcywgaWYgcHJlc2VudCwgdG8gbWFyayB0aGUgZXh0cmEgbWVtYmVy cyBhcwogICAgKysgKiBpbmFjY2Vzc2libGUuIEZvciB1bmluc3RydW1lbnRlZCBidWlsZHMsIGl0 IGFsc28gbXVuZ2VzIHJlcXVlc3QtPmlzc3VlciB0bwogICAgKysgKiB0cnkgdG8gY3Jhc2ggY2xp ZW50cyB0aGF0IHBlcmZvcm0gc3RyaW5nIG9wZXJhdGlvbnMsIGFuZCBpdCBhYm9ydHMgaWYKICAg ICsrICogcmVxdWVzdC0+ZXJyb3IgaXMgc2V0LgogICAgICsgKi8KICAgICArCiAgICAtKyNpZiBk ZWZpbmVkKF9faGFzX2F0dHJpYnV0ZSkgJiYgX19oYXNfYXR0cmlidXRlKHdlYWspCiAgICAtK3Zv aWQJCV9fYXNhbl9wb2lzb25fbWVtb3J5X3JlZ2lvbih2b2lkIGNvbnN0IHZvbGF0aWxlICphZGRy LCBzaXplX3Qgc2l6ZSkgX19hdHRyaWJ1dGVfXygod2VhaykpOwogICAgLSt2b2lkCQlfX2FzYW5f dW5wb2lzb25fbWVtb3J5X3JlZ2lvbih2b2lkIGNvbnN0IHZvbGF0aWxlICphZGRyLCBzaXplX3Qg c2l6ZSkgX19hdHRyaWJ1dGVfXygod2VhaykpOwogICAgLSsjZWxzZQogICAgLStzdGF0aWMgdm9p ZCAoKmNvbnN0IF9fYXNhbl9wb2lzb25fbWVtb3J5X3JlZ2lvbikgKHZvaWQgY29uc3Qgdm9sYXRp bGUgKmFkZHIsIHNpemVfdCBzaXplKSA9IE5VTEw7CiAgICAtK3N0YXRpYyB2b2lkICgqY29uc3Qg X19hc2FuX3VucG9pc29uX21lbW9yeV9yZWdpb24pICh2b2lkIGNvbnN0IHZvbGF0aWxlICphZGRy LCBzaXplX3Qgc2l6ZSkgPSBOVUxMOwogICAgLSsjZW5kaWYKICAgIC0rCiAgICAgKyNkZWZpbmUg TUFTS19CSVRTICgodWludHB0cl90KSAweDU1YWE1NWFhNTVhYTU1YWEpCiAgICAgKyNkZWZpbmUg UE9JU09OX01BU0socHRyKSAoKHZvaWQgKikgKCgodWludHB0cl90KSBwdHIpIF4gTUFTS19CSVRT KSkKICAgICArCiAgICBAQCBzcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmM6IG9h dXRoX3Vuc2FmZV9kZWJ1Z2dpbmdfZW5hYmxlZCh2b2lkKQogICAgICsJCXJlcXVlc3QtPmlzc3Vl ciA9IFBPSVNPTl9NQVNLKHJlcXVlc3QtPmlzc3Vlcik7CiAgICAgKwogICAgICsJCVZBTEdSSU5E X01BS0VfTUVNX05PQUNDRVNTKGJhc2UsIGxlbik7CiAgICAtKwkJaWYgKF9fYXNhbl9wb2lzb25f bWVtb3J5X3JlZ2lvbikKICAgIC0rCQkJX19hc2FuX3BvaXNvbl9tZW1vcnlfcmVnaW9uKGJhc2Us IGxlbik7CiAgICAgKwl9CiAgICAgKwllbHNlCiAgICAgKwl7CiAgICBAQCBzcmMvaW50ZXJmYWNl cy9saWJwcS9mZS1hdXRoLW9hdXRoLmM6IG9hdXRoX3Vuc2FmZV9kZWJ1Z2dpbmdfZW5hYmxlZCh2 b2lkKQogICAgICsJCSAqIG9yaWdpbmFsIHN0YXRlIG9mIHRoZSBtZW1vcnkuCiAgICAgKwkJICov CiAgICAgKwkJVkFMR1JJTkRfTUFLRV9NRU1fREVGSU5FRChiYXNlLCBsZW4pOwogICAgLSsJCWlm IChfX2FzYW5fdW5wb2lzb25fbWVtb3J5X3JlZ2lvbikKICAgIC0rCQkJX19hc2FuX3VucG9pc29u X21lbW9yeV9yZWdpb24oYmFzZSwgbGVuKTsKICAgICArCiAgICAgKwkJLyogVW5kbyBvdXIgbWFz ay4gKi8KICAgICArCQlyZXF1ZXN0LT5pc3N1ZXIgPSBQT0lTT05fTUFTSyhyZXF1ZXN0LT5pc3N1 ZXIpOwo3OiAgM2Q2ZDA5MDFmN2UgISA1OiAgZmJiODliY2Q5ODAgV0lQOiBJbnRyb2R1Y2UgdGhp cmQtcGFydHkgT0F1dGggZmxvdyBwbHVnaW5zPwogICAgQEAgc3JjL3Rlc3QvbW9kdWxlcy9vYXV0 aF92YWxpZGF0b3IvbWVzb24uYnVpbGQ6IG9hdXRoX2hvb2tfY2xpZW50ID0gZXhlY3V0YWJsZSgn b2EKICAgICAgICAnbmFtZSc6ICdvYXV0aF92YWxpZGF0b3InLAogICAgICAgICdzZCc6IG1lc29u LmN1cnJlbnRfc291cmNlX2RpcigpLAogICAgIEBAIHNyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFs aWRhdG9yL21lc29uLmJ1aWxkOiB0ZXN0cyArPSB7CiAgICAtICAgICAgICdQWVRIT04nOiBweXRo b24uZnVsbF9wYXRoKCksCiAgICAgICAgICAgICd3aXRoX2xpYmN1cmwnOiBvYXV0aF9mbG93X3N1 cHBvcnRlZCA/ICd5ZXMnIDogJ25vJywKICAgICAgICAgICAgJ3dpdGhfcHl0aG9uJzogJ3llcycs CiAgICArICAgICAgICdjZXJ0X2Rpcic6IG1lc29uLnByb2plY3Rfc291cmNlX3Jvb3QoKSAvICdz cmMvdGVzdC9zc2wvc3NsJywKICAgICArICAgICAgJ2Zsb3dfbW9kdWxlX3BhdGgnOiBvYXV0aF9m bG93LmZ1bGxfcGF0aCgpLAogICAgICAgICAgfSwKICAgICAgICAgICdkZXBzJzogW29hdXRoX2hv b2tfY2xpZW50XSwKICAgIEBAIHNyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL01ha2Vm aWxlOiB0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLi8uLgogICAgICBleHBvcnQgUFlUSE9OCiAgICAg IGV4cG9ydCB3aXRoX2xpYmN1cmwKICAgICAgZXhwb3J0IHdpdGhfcHl0aG9uCiAgICArLWV4cG9y dCBjZXJ0X2Rpcj0kKHRvcF9zcmNkaXIpL3NyYy90ZXN0L3NzbC9zc2wKICAgICsrZXhwb3J0IGNl cnRfZGlyIDo9ICQodG9wX3NyY2Rpcikvc3JjL3Rlc3Qvc3NsL3NzbAogICAgICtleHBvcnQgZmxv d19tb2R1bGVfcGF0aCA6PSAkKGFic190b3BfYnVpbGRkaXIpLyQoc3ViZGlyKS9vYXV0aF9mbG93 JChETFNVRkZJWCkKICAgICAgCiAgICAgIGVuZGlmCiAgICBAQCBzcmMvdGVzdC9tb2R1bGVzL29h dXRoX3ZhbGlkYXRvci9vYXV0aF9ob29rX2NsaWVudC5jCiAgICAgIAogICAgIC0jaW5jbHVkZSAi Z2V0b3B0X2xvbmcuaCIKICAgICAgI2luY2x1ZGUgImxpYnBxLWZlLmgiCiAgICAtLSNpbmNsdWRl ICJwcWV4cGJ1ZmZlci5oIgogICAgICAKICAgICAtc3RhdGljIGludAloYW5kbGVfYXV0aF9kYXRh KFBHYXV0aERhdGEgdHlwZSwgUEdjb25uICpjb25uLCB2b2lkICpkYXRhKTsKICAgICAtc3RhdGlj IFBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUgYXN5bmNfY2IoUEdjb25uICpjb25uLAogICAgQEAg c3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Ivb2F1dGhfdGVzdF9jb21tb24uYyAobmV3 KQogICAgICsKICAgICArI2luY2x1ZGUgImdldG9wdF9sb25nLmgiCiAgICAgKyNpbmNsdWRlICJs aWJwcS1mZS5oIgogICAgLSsjaW5jbHVkZSAicHFleHBidWZmZXIuaCIKICAgICArCiAgICAgKyNp bmNsdWRlICJvYXV0aF90ZXN0X2NvbW1vbi5oIgogICAgICsK --000000000000545e04064c5089cb Content-Type: application/octet-stream; name="v6-0001-libpq-Introduce-PQAUTHDATA_OAUTH_BEARER_TOKEN_V2.patch" Content-Disposition: attachment; filename="v6-0001-libpq-Introduce-PQAUTHDATA_OAUTH_BEARER_TOKEN_V2.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mme6hdap1 RnJvbSA5MGYwNWM1ZDk2MzQzZWU1YjA5ZDNlNzQ0NWM3ODY1YWFjMjkwMGJmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogTW9uLCAxIERlYyAyMDI1IDE1OjA3OjI2IC0wODAwClN1YmplY3Q6 IFtQQVRDSCB2NiAxLzVdIGxpYnBxOiBJbnRyb2R1Y2UgUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJf VE9LRU5fVjIKCkZvciB0aGUgbGlicHEtb2F1dGggbW9kdWxlIHRvIGV2ZW50dWFsbHkgbWFrZSB1 c2Ugb2YgdGhlClBHb2F1dGhCZWFyZXJSZXF1ZXN0IEFQSSwgaXQgbmVlZHMgc29tZSBhZGRpdGlv bmFsIGZ1bmN0aW9uYWxpdHk6IHRoZQpkZXJpdmVkIElzc3VlciBJRCBmb3IgdGhlIGF1dGhvcml6 YXRpb24gc2VydmVyIG5lZWRzIHRvIGJlIHByb3ZpZGVkIGJ5CmxpYnBxLCBhbmQgZXJyb3IgbWVz c2FnZXMgbmVlZCB0byBiZSBidWlsdCB3aXRob3V0IHJlbHlpbmcgb24gUEdjb25uCmludGVybmFs cy4gVGhlc2UgZmVhdHVyZXMgc2VlbSB1c2VmdWwgZm9yIGFwcGxpY2F0aW9uIGhvb2tzLCB0b28s IHNvCnRoYXQgdGhleSBkb24ndCBlYWNoIGhhdmUgdG8gcmVpbnZlbnQgdGhlIHdoZWVsLgoKVGhl IG9yaWdpbmFsIHBsYW4gd2FzIGZvciBhZGRpdGlvbnMgdG8gUEdvYXV0aEJlYXJlclJlcXVlc3Qg dG8gYmUgbWFkZQp3aXRob3V0IGEgdmVyc2lvbiBidW1wIHRvIHRoZSBQR2F1dGhEYXRhIHR5cGUs IGFuZCB0aGVuIGFwcGxpY2F0aW9ucwp3b3VsZCBzaW1wbHkgY2hlY2sgYSBMSUJQUV9IQVNfKiBt YWNybyBhdCBjb21waWxlIHRpbWUgdG8gZGVjaWRlIHdoZXRoZXIKdGhleSBjb3VsZCB1c2UgdGhl IG5ldyBmZWF0dXJlcy4gVGhhdCB0aGVvcmV0aWNhbGx5IHdvcmtzIGZvcgphcHBsaWNhdGlvbnMg bGlua2VkIGFnYWluc3QgbGlicHEsIHNpbmNlIGl0J3Mgbm90IHNhZmUgdG8gZG93bmdyYWRlCmxp YnBxIGZyb20gdGhlIHZlcnNpb24geW91J3ZlIGNvbXBpbGVkIGFnYWluc3QuCgpUaGF0IHN0cmF0 ZWd5IHdvbid0IHdvcmsgZm9yIHBsdWdpbnMsIHRob3VnaCwgZHVlIHRvIGEgY29tcGxpY2F0aW9u CmZpcnN0IG5vdGljZWQgZHVyaW5nIHRoZSBsaWJwcS1vYXV0aCBtb2R1bGUgc3BsaXQ6IGl0J3Mg bm9ybWFsIGZvciBhCnBsdWdpbiBvbiBkaXNrIHRvIGJlICpuZXdlciogdGhhbiB0aGUgbGlicHEg dGhhdCdzIGxvYWRpbmcgaXQsIGJlY2F1c2UKeW91IG1pZ2h0IGhhdmUgdXBncmFkZWQgeW91ciBp bnN0YWxsYXRpb24gd2hpbGUgYW4gYXBwbGljYXRpb24gd2FzCnJ1bm5pbmcuIChJbiBvdGhlciB3 b3JkcywgYSBwbHVnaW4gYXJjaGl0ZWN0dXJlIGNhdXNlcyB0aGUgY29tcGlsZS10aW1lCmFuZCBy dW4tdGltZSBkZXBlbmRlbmN5IGFycm93cyB0byBwb2ludCBpbiBvcHBvc2l0ZSBkaXJlY3Rpb25z LCBzbwpwbHVnaW5zIHdvbid0IGJlIGFibGUgdG8gcmVseSBvbiB0aGUgTElCUFFfSEFTXyogbWFj cm9zIHRvIGRldGVybWluZQp3aGF0IEFQSXMgYXJlIGF2YWlsYWJsZSB0byB0aGVtLikKCkluc3Rl YWQsIGFkZCBhIG5ldyBzdHJ1Y3Qgd2hpY2ggZXh0ZW5kcyB0aGUgInYxIiBQR29hdXRoQmVhcmVy UmVxdWVzdC4KV2hlbiBhbiBhcHBsaWNhdGlvbiBob29rIHJlY2VpdmVzIFBRQVVUSERBVEFfT0FV VEhfQkVBUkVSX1RPS0VOX1YyLCBpdAptYXkgc2FmZWx5IGRvd25jYXN0IHRoZSByZXF1ZXN0IHBv aW50ZXIgaXQgcmVjZWl2ZXMgaW4gaXRzIGNhbGxiYWNrcyB0bwptYWtlIHVzZSBvZiB0aGUgbmV3 IGZ1bmN0aW9uYWxpdHkuIGxpYnBxIHdpbGwgZmlyc3QgdHJ5IHRoZSBuZXcgdmVyc2lvbiwKdGhl biBmYWxsIGJhY2sgdG8gdGhlIG9sZCBiZWZvcmUgZ2l2aW5nIHVwLgoKUmV2aWV3ZWQtYnk6IENo YW8gTGkgPGxpLmV2YW4uY2hhb0BnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBac29sdCBQYXJyYWdp IDx6c29sdC5wYXJyYWdpQHBlcmNvbmEuY29tPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5l cy9tL0NBT1ltaSUyQm1yR2clMkJuX1gyTU9MZ2VXY2ozdl9NMDBnUjh1el9EN21NOHolM0RkWDFK WVZiZyU0MG1haWwuZ21haWwuY29tCi0tLQogZG9jL3NyYy9zZ21sL2xpYnBxLnNnbWwgICAgICAg ICAgICAgICAgICAgICAgIHwgODMgKysrKysrKysrKysrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgIDEgKwogc3JjL2ludGVyZmFjZXMvbGlicHEv bGlicHEtZmUuaCAgICAgICAgICAgICAgIHwgMzEgKysrKystCiBzcmMvaW50ZXJmYWNlcy9saWJw cS9mZS1hdXRoLW9hdXRoLmMgICAgICAgICAgfCA4NyArKysrKysrKysrKy0tLS0tLQogLi4uL29h dXRoX3ZhbGlkYXRvci9vYXV0aF9ob29rX2NsaWVudC5jICAgICAgIHwgOTYgKysrKysrKysrKysr KysrKysrLQogLi4uL21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL3QvMDAyX2NsaWVudC5wbCAgIHwg NDMgKysrKysrKystCiA2IGZpbGVzIGNoYW5nZWQsIDMwNSBpbnNlcnRpb25zKCspLCAzNiBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvbGlicHEuc2dtbCBiL2RvYy9zcmMv c2dtbC9saWJwcS5zZ21sCmluZGV4IDU3MzQ5ZWY4Zjg0Li5lOGQyYzc5ZGZmNSAxMDA2NDQKLS0t IGEvZG9jL3NyYy9zZ21sL2xpYnBxLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2xpYnBxLnNnbWwK QEAgLTEwMzYyLDYgKzEwMzYyLDcgQEAgUFFhdXRoRGF0YUhvb2tfdHlwZSBQUWdldEF1dGhEYXRh SG9vayh2b2lkKTsKICAgICAgICAgPGluZGV4dGVybT48cHJpbWFyeT5QUUFVVEhEQVRBX1BST01Q VF9PQVVUSF9ERVZJQ0U8L3ByaW1hcnk+PC9pbmRleHRlcm0+CiAgICAgICAgPC90ZXJtPgogICAg ICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+PGVtcGhhc2lzPkF2YWlsYWJsZSBpbiBQb3N0 Z3JlU1FMIDE4IGFuZCBsYXRlci48L2VtcGhhc2lzPjwvcGFyYT4KICAgICAgICAgPHBhcmE+CiAg ICAgICAgICBSZXBsYWNlcyB0aGUgZGVmYXVsdCB1c2VyIHByb21wdCBkdXJpbmcgdGhlIGJ1aWx0 aW4gZGV2aWNlCiAgICAgICAgICBhdXRob3JpemF0aW9uIGNsaWVudCBmbG93LiA8cmVwbGFjZWFi bGU+ZGF0YTwvcmVwbGFjZWFibGU+IHBvaW50cyB0bwpAQCAtMTA0MTQsNiArMTA0MTUsNyBAQCB0 eXBlZGVmIHN0cnVjdCBfUEdwcm9tcHRPQXV0aERldmljZQogICAgICAgICA8aW5kZXh0ZXJtPjxw cmltYXJ5PlBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOPC9wcmltYXJ5PjwvaW5kZXh0ZXJt PgogICAgICAgIDwvdGVybT4KICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPjxlbXBo YXNpcz5BdmFpbGFibGUgaW4gUG9zdGdyZVNRTCAxOCBhbmQgbGF0ZXIuPC9lbXBoYXNpcz48L3Bh cmE+CiAgICAgICAgIDxwYXJhPgogICAgICAgICAgQWRkcyBhIGN1c3RvbSBpbXBsZW1lbnRhdGlv biBvZiBhIGZsb3csIHJlcGxhY2luZyB0aGUgYnVpbHRpbiBmbG93IGlmCiAgICAgICAgICBpdCBp cyA8bGluayBsaW5rZW5kPSJjb25maWd1cmUtb3B0aW9uLXdpdGgtbGliY3VybCI+aW5zdGFsbGVk PC9saW5rPi4KQEAgLTEwNDIxLDYgKzEwNDIzLDEzIEBAIHR5cGVkZWYgc3RydWN0IF9QR3Byb21w dE9BdXRoRGV2aWNlCiAgICAgICAgICB1c2VyL2lzc3Vlci9zY29wZSBjb21iaW5hdGlvbiwgaWYg b25lIGlzIGF2YWlsYWJsZSB3aXRob3V0IGJsb2NraW5nLCBvcgogICAgICAgICAgZWxzZSBzZXQg dXAgYW4gYXN5bmNocm9ub3VzIGNhbGxiYWNrIHRvIHJldHJpZXZlIG9uZS4KICAgICAgICAgPC9w YXJhPgorICAgICAgICA8bm90ZT4KKyAgICAgICAgIDxwYXJhPgorICAgICAgICAgIEZvciA8cHJv ZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IHJlbGVhc2VzIDE5IGFuZCBsYXRlciwK KyAgICAgICAgICBhcHBsaWNhdGlvbnMgc2hvdWxkIHByZWZlcgorICAgICAgICAgIDxsaW5rIGxp bmtlbmQ9ImxpYnBxLW9hdXRoLWF1dGhkYXRhLW9hdXRoLWJlYXJlci10b2tlbi12MiI+PGxpdGVy YWw+UFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5fVjI8L2xpdGVyYWw+PC9saW5rPi4KKyAg ICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9ub3RlPgogICAgICAgICA8cGFyYT4KICAgICAgICAg IDxyZXBsYWNlYWJsZT5kYXRhPC9yZXBsYWNlYWJsZT4gcG9pbnRzIHRvIGFuIGluc3RhbmNlCiAg ICAgICAgICBvZiA8c3ltYm9sPlBHb2F1dGhCZWFyZXJSZXF1ZXN0PC9zeW1ib2w+LCB3aGljaCBz aG91bGQgYmUgZmlsbGVkIGluCkBAIC0xMDUxNiw2ICsxMDUyNSw4MCBAQCB0eXBlZGVmIHN0cnVj dCBQR29hdXRoQmVhcmVyUmVxdWVzdAogICAgICAgICA8L3BhcmE+CiAgICAgICAgPC9saXN0aXRl bT4KICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJsaWJw cS1vYXV0aC1hdXRoZGF0YS1vYXV0aC1iZWFyZXItdG9rZW4tdjIiPgorICAgICAgIDx0ZXJtPgor ICAgICAgICA8c3ltYm9sPlBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOX1YyPC9zeW1ib2w+ CisgICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgICA8cHJpbWFyeT5QUUFVVEhEQVRBX09BVVRI X0JFQVJFUl9UT0tFTl9WMjwvcHJpbWFyeT4KKyAgICAgICAgIDxzZWNvbmRhcnk+UFFBVVRIREFU QV9PQVVUSF9CRUFSRVJfVE9LRU48L3NlY29uZGFyeT4KKyAgICAgICAgPC9pbmRleHRlcm0+Cisg ICAgICAgPC90ZXJtPgorICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+PGVtcGhhc2lz PkF2YWlsYWJsZSBpbiBQb3N0Z3JlU1FMIDE5IGFuZCBsYXRlci48L2VtcGhhc2lzPjwvcGFyYT4K KyAgICAgICAgPHBhcmE+CisgICAgICAgICBQcm92aWRlcyBhbGwgdGhlIGZ1bmN0aW9uYWxpdHkg b2YKKyAgICAgICAgIDxsaW5rIGxpbmtlbmQ9ImxpYnBxLW9hdXRoLWF1dGhkYXRhLW9hdXRoLWJl YXJlci10b2tlbiI+PGxpdGVyYWw+UFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU48L2xpdGVy YWw+PC9saW5rPiwKKyAgICAgICAgIGFuZCBhZGRzIHRoZSBhYmlsaXR5IHRvIHNldCBjdXN0b20g ZXJyb3IgbWVzc2FnZXMgYW5kIGluc3BlY3QgdGhlCisgICAgICAgICBPQXV0aCBpc3N1ZXIgSUQg dGhhdCB0aGUgY2xpZW50IGV4cGVjdHMgdG8gdXNlLgorICAgICAgICA8L3BhcmE+CisgICAgICAg IDxwYXJhPgorICAgICAgICAgPHJlcGxhY2VhYmxlPmRhdGE8L3JlcGxhY2VhYmxlPiBwb2ludHMg dG8gYW4gaW5zdGFuY2UKKyAgICAgICAgIG9mIDxzeW1ib2w+UEdvYXV0aEJlYXJlclJlcXVlc3RW Mjwvc3ltYm9sPiwgd2hpY2ggc2hvdWxkIGJlIGZpbGxlZCBpbgorICAgICAgICAgYnkgdGhlIGlt cGxlbWVudGF0aW9uOgorPHN5bm9wc2lzPgordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBQR29hdXRo QmVhcmVyUmVxdWVzdCB2MTsgICAgLyogc2VlIHRoZSBQR29hdXRoQmVhcmVyUmVxdWVzdCBzdHJ1 Y3QsIGFib3ZlICovCisKKyAgICAvKiBIb29rIGlucHV0cyAoY29uc3RhbnQgYWNyb3NzIGFsbCBj YWxscykgKi8KKyAgICBjb25zdCBjaGFyICppc3N1ZXI7ICAgICAgICAgICAgLyogdGhlIGlzc3Vl ciBpZGVudGlmaWVyIChSRkMgOTIwNykgaW4gdXNlICovCisKKyAgICAvKiBIb29rIG91dHB1dHMg Ki8KKyAgICBjb25zdCBjaGFyICplcnJvcjsgICAgICAgICAgICAgLyogaG9vay1kZWZpbmVkIGVy cm9yIG1lc3NhZ2UgKi8KK30gUEdvYXV0aEJlYXJlclJlcXVlc3RWMjsKKzwvc3lub3BzaXM+Cisg ICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICBXaGVuIGEgPGxpdGVyYWw+ UFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5fVjI8L2xpdGVyYWw+IGhvb2sgaXMgaW4KKyAg ICAgICAgIHVzZSwgPGFwcGxpY2F0aW9uPmxpYnBxPC9hcHBsaWNhdGlvbj4gYWRkaXRpb25hbGx5 IGd1YXJhbnRlZXMgdGhhdCB0aGUKKyAgICAgICAgIDxsaXRlcmFsPnJlcXVlc3Q8L2xpdGVyYWw+ IHBvaW50ZXIgdGhhdCBpcyBwcm92aWRlZCB0byB0aGUKKyAgICAgICAgIDxyZXBsYWNlYWJsZT52 MS5hc3luYzwvcmVwbGFjZWFibGU+IGFuZCA8cmVwbGFjZWFibGU+djEuY2xlYW51cDwvcmVwbGFj ZWFibGU+CisgICAgICAgICBjYWxsYmFja3MgbWF5IGJlIHNhZmVseSBjYXN0IHRvIDxsaXRlcmFs PihQR29hdXRoQmVhcmVyUmVxdWVzdFYyJm5ic3A7Kik8L2xpdGVyYWw+LgorICAgICAgICAgSW1w bGVtZW50YXRpb25zIG11c3Qgb3RoZXJ3aXNlIGZvbGxvdyB0aGUgdjEgQVBJLCBhcyBkZXNjcmli ZWQgYWJvdmUsCisgICAgICAgICB1c2luZyB0aGUgPHJlcGxhY2VhYmxlPnYxPC9yZXBsYWNlYWJs ZT4gc3RydWN0IG1lbWJlci4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8d2FybmluZz4KKyAg ICAgICAgIDxwYXJhPgorICAgICAgICAgIENhc3RpbmcgdG8gPGxpdGVyYWw+KFBHb2F1dGhCZWFy ZXJSZXF1ZXN0VjImbmJzcDsqKTwvbGl0ZXJhbD4gaXMKKyAgICAgICAgICA8ZW1waGFzaXM+b25s eTwvZW1waGFzaXM+IHNhZmUgd2hlbiB0aGUgaG9vayB0eXBlIGlzCisgICAgICAgICAgPGxpdGVy YWw+UFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5fVjI8L2xpdGVyYWw+LiBBcHBsaWNhdGlv bnMgbWF5CisgICAgICAgICAgY3Jhc2ggb3IgbWlzYmVoYXZlIGlmIGEgaG9vayBhdHRlbXB0cyB0 byB1c2UgdjIgZmVhdHVyZXMgd2l0aCB0aGUgdjEKKyAgICAgICAgICBob29rIHR5cGUuCisgICAg ICAgICA8L3BhcmE+CisgICAgICAgIDwvd2FybmluZz4KKyAgICAgICAgPHBhcmE+CisgICAgICAg ICBJbiBhZGRpdGlvbiB0byB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgdmVyc2lvbiAxIEFQSSwg dGhlIHYyIHN0cnVjdAorICAgICAgICAgcHJvdmlkZXMgYW4gYWRkaXRpb25hbCBpbnB1dCBhbmQg b3V0cHV0IGZvciB0aGUgaG9vazoKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAg ICAgICAgIDxyZXBsYWNlYWJsZT5pc3N1ZXI8L3JlcGxhY2VhYmxlPiBjb250YWlucyB0aGUgaXNz dWVyIGlkZW50aWZpZXIsIGFzCisgICAgICAgICBkZWZpbmVkIGluIDx1bGluayB1cmw9Imh0dHBz Oi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjOTIwNyI+UkZDIDkyMDc8L3VsaW5r PiwKKyAgICAgICAgIHRoYXQgaXMgaW4gdXNlIGZvciB0aGUgY3VycmVudCBjb25uZWN0aW9uLiBU aGlzIGlkZW50aWZpZXIgaXMKKyAgICAgICAgIGRlcml2ZWQgZnJvbSA8eHJlZiBsaW5rZW5kPSJs aWJwcS1jb25uZWN0LW9hdXRoLWlzc3VlciIvPi4KKyAgICAgICAgIFRvIGF2b2lkIG1peC11cCBh dHRhY2tzLCBjdXN0b20gZmxvd3Mgc2hvdWxkIGVuc3VyZSB0aGF0IGFueSBkaXNjb3ZlcnkKKyAg ICAgICAgIG1ldGFkYXRhIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciBtYXRj aGVzIHRoaXMgaXNzdWVyIElELgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAg ICAgICAgPHJlcGxhY2VhYmxlPmVycm9yPC9yZXBsYWNlYWJsZT4gbWF5IGJlIHNldCB0byBwb2lu dCB0byBhIGN1c3RvbQorICAgICAgICAgZXJyb3IgbWVzc2FnZSB3aGVuIGEgZmxvdyBmYWlscy4g VGhlIG1lc3NhZ2Ugd2lsbCBiZSBpbmNsdWRlZCBhcyBwYXJ0CisgICAgICAgICBvZiA8bGluayBs aW5rZW5kPSJsaWJwcS1QUWVycm9yTWVzc2FnZSI+PGxpdGVyYWw+UFFlcnJvck1lc3NhZ2UoKTwv bGl0ZXJhbD48L2xpbms+LgorICAgICAgICAgSG9va3MgbXVzdCBmcmVlIGFueSBlcnJvciBtZXNz YWdlIGFsbG9jYXRpb25zIGR1cmluZyB0aGUKKyAgICAgICAgIDxyZXBsYWNlYWJsZT52MS5jbGVh bnVwPC9yZXBsYWNlYWJsZT4gY2FsbGJhY2suCisgICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2xp c3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPC92YXJpYWJsZWxpc3Q+CiAg ICAgPC9wYXJhPgogICAgPC9zZWN0Mz4KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNzdl M2MwNDE0NGUuLjMyNTA1NjRkNGZmIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTky Niw2ICsxOTI2LDcgQEAgUEdkYXRhVmFsdWUKIFBHbG9iamZ1bmNzCiBQR25vdGlmeQogUEdvYXV0 aEJlYXJlclJlcXVlc3QKK1BHb2F1dGhCZWFyZXJSZXF1ZXN0VjIKIFBHcGlwZWxpbmVTdGF0dXMK IFBHcHJvbXB0T0F1dGhEZXZpY2UKIFBHcmVzQXR0RGVzYwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVy ZmFjZXMvbGlicHEvbGlicHEtZmUuaCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWZlLmgK aW5kZXggMWI0NjAzMmI2ZjkuLmYwNmU3YTk3MmMzIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNl cy9saWJwcS9saWJwcS1mZS5oCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWZlLmgK QEAgLTY2LDYgKzY2LDggQEAgZXh0ZXJuICJDIgogLyogRmVhdHVyZXMgYWRkZWQgaW4gUG9zdGdy ZVNRTCB2MTk6ICovCiAvKiBJbmRpY2F0ZXMgcHJlc2VuY2Ugb2YgUFFnZXRUaHJlYWRMb2NrICov CiAjZGVmaW5lIExJQlBRX0hBU19HRVRfVEhSRUFEX0xPQ0sgMQorLyogSW5kaWNhdGVzIHByZXNl bmNlIG9mIHRoZSBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTl9WMiBhdXRoZGF0YSBob29r ICovCisjZGVmaW5lIExJQlBRX0hBU19PQVVUSF9CRUFSRVJfVE9LRU5fVjIgMQogCiAvKgogICog T3B0aW9uIGZsYWdzIGZvciBQUWNvcHlSZXN1bHQKQEAgLTE5Nyw3ICsxOTksOSBAQCB0eXBlZGVm IGVudW0KIHsKIAlQUUFVVEhEQVRBX1BST01QVF9PQVVUSF9ERVZJQ0UsIC8qIHVzZXIgbXVzdCB2 aXNpdCBhIGRldmljZS1hdXRob3JpemF0aW9uCiAJCQkJCQkJCQkgKiBVUkwgKi8KLQlQUUFVVEhE QVRBX09BVVRIX0JFQVJFUl9UT0tFTiwJLyogc2VydmVyIHJlcXVlc3RzIGFuIE9BdXRoIEJlYXJl ciB0b2tlbiAqLworCVBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOLAkvKiBzZXJ2ZXIgcmVx dWVzdHMgYW4gT0F1dGggQmVhcmVyIHRva2VuCisJCQkJCQkJCQkgKiAodjIgaXMgcHJlZmVycmVk OyBzZWUgYmVsb3cpICovCisJUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5fVjIsCS8qIG5l d2VzdCBBUEkgZm9yIE9BdXRoIEJlYXJlciB0b2tlbnMgKi8KIH0gUEdhdXRoRGF0YTsKIAogLyog UEdjb25uIGVuY2Fwc3VsYXRlcyBhIGNvbm5lY3Rpb24gdG8gdGhlIGJhY2tlbmQuCkBAIC03MzUs NiArNzM5LDcgQEAgZXh0ZXJuIGludAlQUWVudjJlbmNvZGluZyh2b2lkKTsKIAogLyogPT09IGlu IGZlLWF1dGguYyA9PT0gKi8KIAorLyogQXV0aGRhdGEgZm9yIFBRQVVUSERBVEFfUFJPTVBUX09B VVRIX0RFVklDRSAqLwogdHlwZWRlZiBzdHJ1Y3QgX1BHcHJvbXB0T0F1dGhEZXZpY2UKIHsKIAlj b25zdCBjaGFyICp2ZXJpZmljYXRpb25fdXJpOwkvKiB2ZXJpZmljYXRpb24gVVJJIHRvIHZpc2l0 ICovCkBAIC03NTUsNiArNzYwLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX1BHcHJvbXB0T0F1dGhEZXZp Y2UKICNkZWZpbmUgUFFfU09DS1RZUEUgaW50CiAjZW5kaWYKIAorLyogQXV0aGRhdGEgZm9yIFBR QVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOICovCiB0eXBlZGVmIHN0cnVjdCBQR29hdXRoQmVh cmVyUmVxdWVzdAogewogCS8qIEhvb2sgaW5wdXRzIChjb25zdGFudCBhY3Jvc3MgYWxsIGNhbGxz KSAqLwpAQCAtNzg4LDcgKzc5NCw4IEBAIHR5cGVkZWYgc3RydWN0IFBHb2F1dGhCZWFyZXJSZXF1 ZXN0CiAKIAkvKgogCSAqIENhbGxiYWNrIHRvIGNsZWFuIHVwIGN1c3RvbSBhbGxvY2F0aW9ucy4g QSBob29rIGltcGxlbWVudGF0aW9uIG1heSB1c2UKLQkgKiB0aGlzIHRvIGZyZWUgcmVxdWVzdC0+ dG9rZW4gYW5kIGFueSByZXNvdXJjZXMgaW4gcmVxdWVzdC0+dXNlci4KKwkgKiB0aGlzIHRvIGZy ZWUgcmVxdWVzdC0+dG9rZW4gYW5kIGFueSByZXNvdXJjZXMgaW4gcmVxdWVzdC0+dXNlci4gVjIK KwkgKiBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkIGFkZGl0aW9uYWxseSBmcmVlIHJlcXVlc3QtPmVy cm9yLCBpZiBzZXQuCiAJICoKIAkgKiBUaGlzIGlzIHRlY2huaWNhbGx5IG9wdGlvbmFsLCBidXQg aGlnaGx5IHJlY29tbWVuZGVkLCBiZWNhdXNlIHRoZXJlIGlzCiAJICogbm8gb3RoZXIgaW5kaWNh dGlvbiBhcyB0byB3aGVuIGl0IGlzIHNhZmUgdG8gZnJlZSB0aGUgdG9rZW4uCkBAIC04MTMsNiAr ODIwLDI2IEBAIHR5cGVkZWYgc3RydWN0IFBHb2F1dGhCZWFyZXJSZXF1ZXN0CiAKICN1bmRlZiBQ UV9TT0NLVFlQRQogCisvKiBBdXRoZGF0YSBmb3IgUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9L RU5fVjIgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUEdvYXV0aEJlYXJlclJlcXVlc3QgdjE7CS8q IHNlZSB0aGUgUEdvYXV0aEJlYXJlclJlcXVlc3Qgc3RydWN0LCBhYm92ZSAqLworCisJLyogSG9v ayBpbnB1dHMgKGNvbnN0YW50IGFjcm9zcyBhbGwgY2FsbHMpICovCisJY29uc3QgY2hhciAqaXNz dWVyOwkJCS8qIHRoZSBpc3N1ZXIgaWRlbnRpZmllciAoUkZDIDkyMDcpIGluIHVzZSwgYXMKKwkJ CQkJCQkJICogZGVyaXZlZCBmcm9tIHRoZSBjb25uZWN0aW9uJ3Mgb2F1dGhfaXNzdWVyICovCisK KwkvKiBIb29rIG91dHB1dHMgKi8KKworCS8qCisJICogSG9vay1kZWZpbmVkIGVycm9yIG1lc3Nh Z2Ugd2hpY2ggd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgY29ubmVjdGlvbidzCisJICogUFFlcnJv ck1lc3NhZ2UoKSBvdXRwdXQgd2hlbiB0aGUgZmxvdyBmYWlscy4gbGlicHEgZG9lcyBub3QgdGFr ZQorCSAqIG93bmVyc2hpcCBvZiB0aGlzIHBvaW50ZXI7IGFueSBhbGxvY2F0aW9ucyBzaG91bGQg YmUgZnJlZWQgZHVyaW5nIHRoZQorCSAqIGNsZWFudXAgY2FsbGJhY2suCisJICovCisJY29uc3Qg Y2hhciAqZXJyb3I7Cit9IFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjI7CisKIGV4dGVybiBjaGFyICpQ UWVuY3J5cHRQYXNzd29yZChjb25zdCBjaGFyICpwYXNzd2QsIGNvbnN0IGNoYXIgKnVzZXIpOwog ZXh0ZXJuIGNoYXIgKlBRZW5jcnlwdFBhc3N3b3JkQ29ubihQR2Nvbm4gKmNvbm4sIGNvbnN0IGNo YXIgKnBhc3N3ZCwgY29uc3QgY2hhciAqdXNlciwgY29uc3QgY2hhciAqYWxnb3JpdGhtKTsKIGV4 dGVybiBQR3Jlc3VsdCAqUFFjaGFuZ2VQYXNzd29yZChQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIg KnVzZXIsIGNvbnN0IGNoYXIgKnBhc3N3ZCk7CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9s aWJwcS9mZS1hdXRoLW9hdXRoLmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLW9hdXRo LmMKaW5kZXggNjc4NzlkNjRiMzkuLmI2NGQwNWExM2UzIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJm YWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUt YXV0aC1vYXV0aC5jCkBAIC02NzUsNiArNjc1LDI1IEBAIGNsZWFudXA6CiAJcmV0dXJuIHN1Y2Nl c3M7CiB9CiAKKy8qCisgKiBIZWxwZXIgZm9yIGhhbmRsaW5nIGZsb3cgZmFpbHVyZXMuIElmIGFu eXRoaW5nIHdhcyBwdXQgaW50byByZXF1ZXN0LT5lcnJvciwKKyAqIGl0J3MgYWRkZWQgdG8gY29u bi0+ZXJyb3JNZXNzYWdlIGhlcmUuCisgKi8KK3N0YXRpYyB2b2lkCityZXBvcnRfdXNlcl9mbG93 X2Vycm9yKFBHY29ubiAqY29ubiwgY29uc3QgUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVxdWVz dCkKK3sKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNzYWdlLAorCQkJCQkJ IGxpYnBxX2dldHRleHQoInVzZXItZGVmaW5lZCBPQXV0aCBmbG93IGZhaWxlZCIpKTsKKworCWlm IChyZXF1ZXN0LT5lcnJvcikKKwl7CisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjb25uLT5lcnJv ck1lc3NhZ2UsICI6ICIpOworCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNz YWdlLCByZXF1ZXN0LT5lcnJvcik7CisJfQorCisJYXBwZW5kUFFFeHBCdWZmZXJDaGFyKCZjb25u LT5lcnJvck1lc3NhZ2UsICdcbicpOworfQorCiAvKgogICogQ2FsbGJhY2sgaW1wbGVtZW50YXRp b24gb2YgY29ubi0+YXN5bmNfYXV0aCgpIGZvciBhIHVzZXItZGVmaW5lZCBPQXV0aCBmbG93Lgog ICogRGVsZWdhdGVzIHRoZSByZXRyaWV2YWwgb2YgdGhlIHRva2VuIHRvIHRoZSBhcHBsaWNhdGlv bidzIGFzeW5jIGNhbGxiYWNrLgpAQCAtNjg3LDIwICs3MDYsMjMgQEAgc3RhdGljIFBvc3RncmVz UG9sbGluZ1N0YXR1c1R5cGUKIHJ1bl91c2VyX29hdXRoX2Zsb3coUEdjb25uICpjb25uKQogewog CWZlX29hdXRoX3N0YXRlICpzdGF0ZSA9IGNvbm4tPnNhc2xfc3RhdGU7Ci0JUEdvYXV0aEJlYXJl clJlcXVlc3QgKnJlcXVlc3QgPSBzdGF0ZS0+YXN5bmNfY3R4OworCVBHb2F1dGhCZWFyZXJSZXF1 ZXN0VjIgKnJlcXVlc3QgPSBzdGF0ZS0+YXN5bmNfY3R4OwogCVBvc3RncmVzUG9sbGluZ1N0YXR1 c1R5cGUgc3RhdHVzOwogCi0JaWYgKCFyZXF1ZXN0LT5hc3luYykKKwlpZiAoIXJlcXVlc3QtPnYx LmFzeW5jKQogCXsKIAkJbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3IoY29ubiwKIAkJCQkJCQkJInVz ZXItZGVmaW5lZCBPQXV0aCBmbG93IHByb3ZpZGVkIG5laXRoZXIgYSB0b2tlbiBub3IgYW4gYXN5 bmMgY2FsbGJhY2siKTsKIAkJcmV0dXJuIFBHUkVTX1BPTExJTkdfRkFJTEVEOwogCX0KIAotCXN0 YXR1cyA9IHJlcXVlc3QtPmFzeW5jKGNvbm4sIHJlcXVlc3QsICZjb25uLT5hbHRzb2NrKTsKKwlz dGF0dXMgPSByZXF1ZXN0LT52MS5hc3luYyhjb25uLAorCQkJCQkJCSAgIChQR29hdXRoQmVhcmVy UmVxdWVzdCAqKSByZXF1ZXN0LAorCQkJCQkJCSAgICZjb25uLT5hbHRzb2NrKTsKKwogCWlmIChz dGF0dXMgPT0gUEdSRVNfUE9MTElOR19GQUlMRUQpCiAJewotCQlsaWJwcV9hcHBlbmRfY29ubl9l cnJvcihjb25uLCAidXNlci1kZWZpbmVkIE9BdXRoIGZsb3cgZmFpbGVkIik7CisJCXJlcG9ydF91 c2VyX2Zsb3dfZXJyb3IoY29ubiwgcmVxdWVzdCk7CiAJCXJldHVybiBzdGF0dXM7CiAJfQogCWVs c2UgaWYgKHN0YXR1cyA9PSBQR1JFU19QT0xMSU5HX09LKQpAQCAtNzEwLDE0ICs3MzIsMTQgQEAg cnVuX3VzZXJfb2F1dGhfZmxvdyhQR2Nvbm4gKmNvbm4pCiAJCSAqIG9udG8gdGhlIG9yaWdpbmFs IHN0cmluZywgc2luY2UgaXQgbWF5IG5vdCBiZSBzYWZlIGZvciB1cyB0byBmcmVlKCkKIAkJICog aXQuKQogCQkgKi8KLQkJaWYgKCFyZXF1ZXN0LT50b2tlbikKKwkJaWYgKCFyZXF1ZXN0LT52MS50 b2tlbikKIAkJewogCQkJbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3IoY29ubiwKIAkJCQkJCQkJCSJ1 c2VyLWRlZmluZWQgT0F1dGggZmxvdyBkaWQgbm90IHByb3ZpZGUgYSB0b2tlbiIpOwogCQkJcmV0 dXJuIFBHUkVTX1BPTExJTkdfRkFJTEVEOwogCQl9CiAKLQkJY29ubi0+b2F1dGhfdG9rZW4gPSBz dHJkdXAocmVxdWVzdC0+dG9rZW4pOworCQljb25uLT5vYXV0aF90b2tlbiA9IHN0cmR1cChyZXF1 ZXN0LT52MS50b2tlbik7CiAJCWlmICghY29ubi0+b2F1dGhfdG9rZW4pCiAJCXsKIAkJCWxpYnBx X2FwcGVuZF9jb25uX2Vycm9yKGNvbm4sICJvdXQgb2YgbWVtb3J5Iik7CkBAIC03MzksMTkgKzc2 MSwyMCBAQCBydW5fdXNlcl9vYXV0aF9mbG93KFBHY29ubiAqY29ubikKIH0KIAogLyoKLSAqIENs ZWFudXAgY2FsbGJhY2sgZm9yIHRoZSBhc3luYyB1c2VyIGZsb3cuIERlbGVnYXRlcyBtb3N0IG9m IGl0cyBqb2IgdG8gdGhlCi0gKiB1c2VyLXByb3ZpZGVkIGNsZWFudXAgaW1wbGVtZW50YXRpb24s IHRoZW4gZGlzY29ubmVjdHMgdGhlIGFsdHNvY2suCisgKiBDbGVhbnVwIGNhbGxiYWNrIGZvciB0 aGUgYXN5bmMgdXNlciBmbG93LiBEZWxlZ2F0ZXMgbW9zdCBvZiBpdHMgam9iIHRvCisgKiBQR29h dXRoQmVhcmVyUmVxdWVzdFYyLmNsZWFudXAoKSwgdGhlbiBkaXNjb25uZWN0cyB0aGUgYWx0c29j ayBhbmQgZnJlZXMgdGhlCisgKiByZXF1ZXN0IGl0c2VsZi4KICAqLwogc3RhdGljIHZvaWQKIGNs ZWFudXBfdXNlcl9vYXV0aF9mbG93KFBHY29ubiAqY29ubikKIHsKIAlmZV9vYXV0aF9zdGF0ZSAq c3RhdGUgPSBjb25uLT5zYXNsX3N0YXRlOwotCVBHb2F1dGhCZWFyZXJSZXF1ZXN0ICpyZXF1ZXN0 ID0gc3RhdGUtPmFzeW5jX2N0eDsKKwlQR29hdXRoQmVhcmVyUmVxdWVzdFYyICpyZXF1ZXN0ID0g c3RhdGUtPmFzeW5jX2N0eDsKIAogCUFzc2VydChyZXF1ZXN0KTsKIAotCWlmIChyZXF1ZXN0LT5j bGVhbnVwKQotCQlyZXF1ZXN0LT5jbGVhbnVwKGNvbm4sIHJlcXVlc3QpOworCWlmIChyZXF1ZXN0 LT52MS5jbGVhbnVwKQorCQlyZXF1ZXN0LT52MS5jbGVhbnVwKGNvbm4sIChQR29hdXRoQmVhcmVy UmVxdWVzdCAqKSByZXF1ZXN0KTsKIAljb25uLT5hbHRzb2NrID0gUEdJTlZBTElEX1NPQ0tFVDsK IAogCWZyZWUocmVxdWVzdCk7CkBAIC05NzUsOCArOTk4LDggQEAgdXNlX2J1aWx0aW5fZmxvdyhQ R2Nvbm4gKmNvbm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSkKICAqIHRva2VuIGZvciBwcmVzZW50 YXRpb24gdG8gdGhlIHNlcnZlci4KICAqCiAgKiBJZiB0aGUgYXBwbGljYXRpb24gaGFzIHJlZ2lz dGVyZWQgYSBjdXN0b20gZmxvdyBoYW5kbGVyIHVzaW5nCi0gKiBQUUFVVEhEQVRBX09BVVRIX0JF QVJFUl9UT0tFTiwgaXQgbWF5IGVpdGhlciByZXR1cm4gYSB0b2tlbiBpbW1lZGlhdGVseSAoZS5n LgotICogaWYgaXQgaGFzIG9uZSBjYWNoZWQgZm9yIGltbWVkaWF0ZSB1c2UpLCBvciBzZXQgdXAg Zm9yIGEgc2VyaWVzIG9mCisgKiBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTltfVjJdLCBp dCBtYXkgZWl0aGVyIHJldHVybiBhIHRva2VuIGltbWVkaWF0ZWx5CisgKiAoZS5nLiBpZiBpdCBo YXMgb25lIGNhY2hlZCBmb3IgaW1tZWRpYXRlIHVzZSksIG9yIHNldCB1cCBmb3IgYSBzZXJpZXMg b2YKICAqIGFzeW5jaHJvbm91cyBjYWxsYmFja3Mgd2hpY2ggd2lsbCBiZSBtYW5hZ2VkIGJ5IHJ1 bl91c2VyX29hdXRoX2Zsb3coKS4KICAqCiAgKiBJZiB0aGUgZGVmYXVsdCBoYW5kbGVyIGlzIHVz ZWQgaW5zdGVhZCwgYSBEZXZpY2UgQXV0aG9yaXphdGlvbiBmbG93IGlzIHVzZWQKQEAgLTk5MCwy NyArMTAxMywzNyBAQCBzdGF0aWMgYm9vbAogc2V0dXBfdG9rZW5fcmVxdWVzdChQR2Nvbm4gKmNv bm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSkKIHsKIAlpbnQJCQlyZXM7Ci0JUEdvYXV0aEJlYXJl clJlcXVlc3QgcmVxdWVzdCA9IHsKLQkJLm9wZW5pZF9jb25maWd1cmF0aW9uID0gY29ubi0+b2F1 dGhfZGlzY292ZXJ5X3VyaSwKLQkJLnNjb3BlID0gY29ubi0+b2F1dGhfc2NvcGUsCisJUEdvYXV0 aEJlYXJlclJlcXVlc3RWMiByZXF1ZXN0ID0geworCQkudjEgPSB7CisJCQkub3BlbmlkX2NvbmZp Z3VyYXRpb24gPSBjb25uLT5vYXV0aF9kaXNjb3ZlcnlfdXJpLAorCQkJLnNjb3BlID0gY29ubi0+ b2F1dGhfc2NvcGUsCisJCX0sCisJCS5pc3N1ZXIgPSBjb25uLT5vYXV0aF9pc3N1ZXJfaWQsCiAJ fTsKIAotCUFzc2VydChyZXF1ZXN0Lm9wZW5pZF9jb25maWd1cmF0aW9uKTsKKwlBc3NlcnQocmVx dWVzdC52MS5vcGVuaWRfY29uZmlndXJhdGlvbik7CisJQXNzZXJ0KHJlcXVlc3QuaXNzdWVyKTsK KworCS8qCisJICogVGhlIGNsaWVudCBtYXkgaGF2ZSBvdmVycmlkZGVuIHRoZSBPQXV0aCBmbG93 LiBUcnkgdGhlIHYyIGhvb2sgZmlyc3QsCisJICogdGhlbiBmYWxsIGJhY2sgdG8gdGhlIHYxIGlt cGxlbWVudGF0aW9uLgorCSAqLworCXJlcyA9IFBRYXV0aERhdGFIb29rKFBRQVVUSERBVEFfT0FV VEhfQkVBUkVSX1RPS0VOX1YyLCBjb25uLCAmcmVxdWVzdCk7CisJaWYgKHJlcyA9PSAwKQorCQly ZXMgPSBQUWF1dGhEYXRhSG9vayhQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTiwgY29ubiwg JnJlcXVlc3QpOwogCi0JLyogVGhlIGNsaWVudCBtYXkgaGF2ZSBvdmVycmlkZGVuIHRoZSBPQXV0 aCBmbG93LiAqLwotCXJlcyA9IFBRYXV0aERhdGFIb29rKFBRQVVUSERBVEFfT0FVVEhfQkVBUkVS X1RPS0VOLCBjb25uLCAmcmVxdWVzdCk7CiAJaWYgKHJlcyA+IDApCiAJewotCQlQR29hdXRoQmVh cmVyUmVxdWVzdCAqcmVxdWVzdF9jb3B5OworCQlQR29hdXRoQmVhcmVyUmVxdWVzdFYyICpyZXF1 ZXN0X2NvcHk7CiAKLQkJaWYgKHJlcXVlc3QudG9rZW4pCisJCWlmIChyZXF1ZXN0LnYxLnRva2Vu KQogCQl7CiAJCQkvKgogCQkJICogV2UgYWxyZWFkeSBoYXZlIGEgdG9rZW4sIHNvIGNvcHkgaXQg aW50byB0aGUgY29ubi4gKFdlIGNhbid0CiAJCQkgKiBob2xkIG9udG8gdGhlIG9yaWdpbmFsIHN0 cmluZywgc2luY2UgaXQgbWF5IG5vdCBiZSBzYWZlIGZvciB1cwogCQkJICogdG8gZnJlZSgpIGl0 LikKIAkJCSAqLwotCQkJY29ubi0+b2F1dGhfdG9rZW4gPSBzdHJkdXAocmVxdWVzdC50b2tlbik7 CisJCQljb25uLT5vYXV0aF90b2tlbiA9IHN0cmR1cChyZXF1ZXN0LnYxLnRva2VuKTsKIAkJCWlm ICghY29ubi0+b2F1dGhfdG9rZW4pCiAJCQl7CiAJCQkJbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3Io Y29ubiwgIm91dCBvZiBtZW1vcnkiKTsKQEAgLTEwMTgsOCArMTA1MSw4IEBAIHNldHVwX3Rva2Vu X3JlcXVlc3QoUEdjb25uICpjb25uLCBmZV9vYXV0aF9zdGF0ZSAqc3RhdGUpCiAJCQl9CiAKIAkJ CS8qIHNob3J0LWNpcmN1aXQgKi8KLQkJCWlmIChyZXF1ZXN0LmNsZWFudXApCi0JCQkJcmVxdWVz dC5jbGVhbnVwKGNvbm4sICZyZXF1ZXN0KTsKKwkJCWlmIChyZXF1ZXN0LnYxLmNsZWFudXApCisJ CQkJcmVxdWVzdC52MS5jbGVhbnVwKGNvbm4sIChQR29hdXRoQmVhcmVyUmVxdWVzdCAqKSAmcmVx dWVzdCk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCkBAIC0xMDM4LDcgKzEwNzEsNyBAQCBzZXR1 cF90b2tlbl9yZXF1ZXN0KFBHY29ubiAqY29ubiwgZmVfb2F1dGhfc3RhdGUgKnN0YXRlKQogCX0K IAllbHNlIGlmIChyZXMgPCAwKQogCXsKLQkJbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3IoY29ubiwg InVzZXItZGVmaW5lZCBPQXV0aCBmbG93IGZhaWxlZCIpOworCQlyZXBvcnRfdXNlcl9mbG93X2Vy cm9yKGNvbm4sICZyZXF1ZXN0KTsKIAkJZ290byBmYWlsOwogCX0KIAllbHNlIGlmICghdXNlX2J1 aWx0aW5fZmxvdyhjb25uLCBzdGF0ZSkpCkBAIC0xMDUwLDggKzEwODMsOCBAQCBzZXR1cF90b2tl bl9yZXF1ZXN0KFBHY29ubiAqY29ubiwgZmVfb2F1dGhfc3RhdGUgKnN0YXRlKQogCXJldHVybiB0 cnVlOwogCiBmYWlsOgotCWlmIChyZXF1ZXN0LmNsZWFudXApCi0JCXJlcXVlc3QuY2xlYW51cChj b25uLCAmcmVxdWVzdCk7CisJaWYgKHJlcXVlc3QudjEuY2xlYW51cCkKKwkJcmVxdWVzdC52MS5j bGVhbnVwKGNvbm4sIChQR29hdXRoQmVhcmVyUmVxdWVzdCAqKSAmcmVxdWVzdCk7CiAJcmV0dXJu IGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRv ci9vYXV0aF9ob29rX2NsaWVudC5jIGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Iv b2F1dGhfaG9va19jbGllbnQuYwppbmRleCA2MGRkMWRjZGFhMC4uNDY5NWQ3M2U4ZjcgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL29hdXRoX2hvb2tfY2xpZW50 LmMKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Ivb2F1dGhfaG9va19jbGll bnQuYwpAQCAtMzYsMTMgKzM2LDE2IEBAIHVzYWdlKGNoYXIgKmFyZ3ZbXSkKIAogCXByaW50Zigi cmVjb2duaXplZCBmbGFnczpcbiIpOwogCXByaW50ZigiICAtaCwgLS1oZWxwICAgICAgICAgICAg ICBzaG93IHRoaXMgbWVzc2FnZVxuIik7CisJcHJpbnRmKCIgIC12IFZFUlNJT04gICAgICAgICAg ICAgIHNlbGVjdCB0aGUgaG9vayBBUEkgdmVyc2lvbiAoZGVmYXVsdCAyKVxuIik7CiAJcHJpbnRm KCIgIC0tZXhwZWN0ZWQtc2NvcGUgU0NPUEUgIGZhaWwgaWYgcmVjZWl2ZWQgc2NvcGVzIGRvIG5v dCBtYXRjaCBTQ09QRVxuIik7CiAJcHJpbnRmKCIgIC0tZXhwZWN0ZWQtdXJpIFVSSSAgICAgIGZh aWwgaWYgcmVjZWl2ZWQgY29uZmlndXJhdGlvbiBsaW5rIGRvZXMgbm90IG1hdGNoIFVSSVxuIik7 CisJcHJpbnRmKCIgIC0tZXhwZWN0ZWQtaXNzdWVyIElTUyAgIGZhaWwgaWYgcmVjZWl2ZWQgaXNz dWVyIGRvZXMgbm90IG1hdGNoIElTUyAodjIgb25seSlcbiIpOwogCXByaW50ZigiICAtLW1pc2Jl aGF2ZT1NT0RFICAgICAgICBoYXZlIHRoZSBob29rIGZhaWwgcmVxdWlyZWQgcG9zdGNvbmRpdGlv bnNcbiIKIAkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgKE1PREVzOiBuby1ob29rLCBm YWlsLWFzeW5jLCBuby10b2tlbiwgbm8tc29ja2V0KVxuIik7CiAJcHJpbnRmKCIgIC0tbm8taG9v ayAgICAgICAgICAgICAgIGRvbid0IGluc3RhbGwgT0F1dGggaG9va3NcbiIpOwogCXByaW50Zigi ICAtLWhhbmctZm9yZXZlciAgICAgICAgICBkb24ndCBldmVyIHJldHVybiBhIHRva2VuIChjb21i aW5lIHdpdGggY29ubmVjdF90aW1lb3V0KVxuIik7CiAJcHJpbnRmKCIgIC0tdG9rZW4gVE9LRU4g ICAgICAgICAgIHVzZSB0aGUgcHJvdmlkZWQgVE9LRU4gdmFsdWVcbiIpOworCXByaW50ZigiICAt LWVycm9yIEVSUk1TRyAgICAgICAgICBmYWlsIGluc3RlYWQsIHdpdGggdGhlIGdpdmVuIEVSUk1T RyAodjIgb25seSlcbiIpOwogCXByaW50ZigiICAtLXN0cmVzcy1hc3luYyAgICAgICAgICBidXN5 LWxvb3Agb24gUFFjb25uZWN0UG9sbCByYXRoZXIgdGhhbiBwb2xsaW5nXG4iKTsKIH0KIApAQCAt NTEsOSArNTQsMTIgQEAgc3RhdGljIGJvb2wgbm9faG9vayA9IGZhbHNlOwogc3RhdGljIGJvb2wg aGFuZ19mb3JldmVyID0gZmFsc2U7CiBzdGF0aWMgYm9vbCBzdHJlc3NfYXN5bmMgPSBmYWxzZTsK IHN0YXRpYyBjb25zdCBjaGFyICpleHBlY3RlZF91cmkgPSBOVUxMOworc3RhdGljIGNvbnN0IGNo YXIgKmV4cGVjdGVkX2lzc3VlciA9IE5VTEw7CiBzdGF0aWMgY29uc3QgY2hhciAqZXhwZWN0ZWRf c2NvcGUgPSBOVUxMOwogc3RhdGljIGNvbnN0IGNoYXIgKm1pc2JlaGF2ZV9tb2RlID0gTlVMTDsK IHN0YXRpYyBjaGFyICp0b2tlbiA9IE5VTEw7CitzdGF0aWMgY2hhciAqZXJybXNnID0gTlVMTDsK K3N0YXRpYyBpbnQJaG9va192ZXJzaW9uID0gUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5f VjI7CiAKIGludAogbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQpAQCAtNjgsNiArNzQsOCBA QCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCXsiaGFuZy1mb3JldmVyIiwgbm9fYXJn dW1lbnQsIE5VTEwsIDEwMDR9LAogCQl7Im1pc2JlaGF2ZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBO VUxMLCAxMDA1fSwKIAkJeyJzdHJlc3MtYXN5bmMiLCBub19hcmd1bWVudCwgTlVMTCwgMTAwNn0s CisJCXsiZXhwZWN0ZWQtaXNzdWVyIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDEwMDd9LAor CQl7ImVycm9yIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDEwMDh9LAogCQl7MH0KIAl9Owog CkBAIC03NSw3ICs4Myw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlQR2Nvbm4J ICAgKmNvbm47CiAJaW50CQkJYzsKIAotCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFy Z3YsICJoIiwgbG9uZ19vcHRpb25zLCBOVUxMKSkgIT0gLTEpCisJd2hpbGUgKChjID0gZ2V0b3B0 X2xvbmcoYXJnYywgYXJndiwgImh2OiIsIGxvbmdfb3B0aW9ucywgTlVMTCkpICE9IC0xKQogCXsK IAkJc3dpdGNoIChjKQogCQl7CkBAIC04Myw2ICs5MSwxOCBAQCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCiAJCQkJdXNhZ2UoYXJndik7CiAJCQkJcmV0dXJuIDA7CiAKKwkJCWNhc2UgJ3Yn OgorCQkJCWlmIChzdHJjbXAob3B0YXJnLCAiMSIpID09IDApCisJCQkJCWhvb2tfdmVyc2lvbiA9 IFBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOOworCQkJCWVsc2UgaWYgKHN0cmNtcChvcHRh cmcsICIyIikgPT0gMCkKKwkJCQkJaG9va192ZXJzaW9uID0gUFFBVVRIREFUQV9PQVVUSF9CRUFS RVJfVE9LRU5fVjI7CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJdXNhZ2UoYXJndik7CisJCQkJCXJl dHVybiAxOworCQkJCX0KKwkJCQlicmVhazsKKwogCQkJY2FzZSAxMDAwOgkJCS8qIC0tZXhwZWN0 ZWQtc2NvcGUgKi8KIAkJCQlleHBlY3RlZF9zY29wZSA9IG9wdGFyZzsKIAkJCQlicmVhazsKQEAg LTExMSw2ICsxMzEsMTQgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJCXN0cmVz c19hc3luYyA9IHRydWU7CiAJCQkJYnJlYWs7CiAKKwkJCWNhc2UgMTAwNzoJCQkvKiAtLWV4cGVj dGVkLWlzc3VlciAqLworCQkJCWV4cGVjdGVkX2lzc3VlciA9IG9wdGFyZzsKKwkJCQlicmVhazsK KworCQkJY2FzZSAxMDA4OgkJCS8qIC0tZXJyb3IgKi8KKwkJCQllcnJtc2cgPSBvcHRhcmc7CisJ CQkJYnJlYWs7CisKIAkJCWRlZmF1bHQ6CiAJCQkJdXNhZ2UoYXJndik7CiAJCQkJcmV0dXJuIDE7 CkBAIC0xNjcsMTYgKzE5NSwyNCBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAKIC8q CiAgKiBQUWF1dGhEYXRhSG9vayBpbXBsZW1lbnRhdGlvbi4gUmVwbGFjZXMgdGhlIGRlZmF1bHQg Y2xpZW50IGZsb3cgYnkgaGFuZGxpbmcKLSAqIFBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VO LgorICogUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5bX1YyXS4KICAqLwogc3RhdGljIGlu dAogaGFuZGxlX2F1dGhfZGF0YShQR2F1dGhEYXRhIHR5cGUsIFBHY29ubiAqY29ubiwgdm9pZCAq ZGF0YSkKIHsKLQlQR29hdXRoQmVhcmVyUmVxdWVzdCAqcmVxID0gZGF0YTsKKwlQR29hdXRoQmVh cmVyUmVxdWVzdCAqcmVxOworCVBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcTIgPSBOVUxMOwor CisJQXNzZXJ0KGhvb2tfdmVyc2lvbiA9PSBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTiB8 fAorCQkgICBob29rX3ZlcnNpb24gPT0gUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5fVjIp OwogCi0JaWYgKG5vX2hvb2sgfHwgKHR5cGUgIT0gUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9L RU4pKQorCWlmIChub19ob29rIHx8IHR5cGUgIT0gaG9va192ZXJzaW9uKQogCQlyZXR1cm4gMDsK IAorCXJlcSA9IGRhdGE7CisJaWYgKHR5cGUgPT0gUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9L RU5fVjIpCisJCXJlcTIgPSBkYXRhOworCiAJaWYgKGhhbmdfZm9yZXZlcikKIAl7CiAJCS8qIFN0 YXJ0IGFzeW5jaHJvbm91cyBwcm9jZXNzaW5nLiAqLwpAQCAtMjIxLDYgKzI1Nyw0NCBAQCBoYW5k bGVfYXV0aF9kYXRhKFBHYXV0aERhdGEgdHlwZSwgUEdjb25uICpjb25uLCB2b2lkICpkYXRhKQog CQl9CiAJfQogCisJaWYgKGV4cGVjdGVkX2lzc3VlcikKKwl7CisJCWlmICghcmVxMikKKwkJewor CQkJZnByaW50ZihzdGRlcnIsICItLWV4cGVjdGVkLWlzc3VlciBjYW5ub3QgYmUgY29tYmluZWQg d2l0aCAtdjFcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKCFyZXEyLT5pc3N1ZXIp CisJCXsKKwkJCWZwcmludGYoc3RkZXJyLCAiZXhwZWN0ZWQgaXNzdWVyIFwiJXNcIiwgZ290IE5V TExcbiIsIGV4cGVjdGVkX2lzc3Vlcik7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoc3Ry Y21wKGV4cGVjdGVkX2lzc3VlciwgcmVxMi0+aXNzdWVyKSAhPSAwKQorCQl7CisJCQlmcHJpbnRm KHN0ZGVyciwgImV4cGVjdGVkIGlzc3VlciBcIiVzXCIsIGdvdCBcIiVzXCJcbiIsIGV4cGVjdGVk X2lzc3VlciwgcmVxMi0+aXNzdWVyKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCWlmIChl cnJtc2cpCisJeworCQlpZiAodG9rZW4pCisJCXsKKwkJCWZwcmludGYoc3RkZXJyLCAiLS1lcnJv ciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtLXRva2VuXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJ fQorCQllbHNlIGlmICghcmVxMikKKwkJeworCQkJZnByaW50ZihzdGRlcnIsICItLWVycm9yIGNh bm5vdCBiZSBjb21iaW5lZCB3aXRoIC12MVxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQly ZXEyLT5lcnJvciA9IGVycm1zZzsKKwkJcmV0dXJuIC0xOworCX0KKwogCXJlcS0+dG9rZW4gPSB0 b2tlbjsKIAlyZXR1cm4gMTsKIH0KQEAgLTI3Myw2ICszNDcsMjAgQEAgbWlzYmVoYXZlX2NiKFBH Y29ubiAqY29ubiwgUEdvYXV0aEJlYXJlclJlcXVlc3QgKnJlcSwgcGdzb2NrZXQgKmFsdHNvY2sp CiAJaWYgKHN0cmNtcChtaXNiZWhhdmVfbW9kZSwgImZhaWwtYXN5bmMiKSA9PSAwKQogCXsKIAkJ LyogSnVzdCBmYWlsICJub3JtYWxseSIuICovCisJCWlmIChlcnJtc2cpCisJCXsKKwkJCVBHb2F1 dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcTI7CisKKwkJCWlmIChob29rX3ZlcnNpb24gPT0gUFFBVVRI REFUQV9PQVVUSF9CRUFSRVJfVE9LRU4pCisJCQl7CisJCQkJZnByaW50ZihzdGRlcnIsICItLWVy cm9yIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC12MVxuIik7CisJCQkJZXhpdCgxKTsKKwkJCX0K KworCQkJcmVxMiA9IChQR29hdXRoQmVhcmVyUmVxdWVzdFYyICopIHJlcTsKKwkJCXJlcTItPmVy cm9yID0gZXJybXNnOworCQl9CisKIAkJcmV0dXJuIFBHUkVTX1BPTExJTkdfRkFJTEVEOwogCX0K IAllbHNlIGlmIChzdHJjbXAobWlzYmVoYXZlX21vZGUsICJuby10b2tlbiIpID09IDApCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci90LzAwMl9jbGllbnQucGwg Yi9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci90LzAwMl9jbGllbnQucGwKaW5kZXgg ZDY2Y2QwYjRhNWYuLjBiZDVjYmI5ODc0IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL29h dXRoX3ZhbGlkYXRvci90LzAwMl9jbGllbnQucGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0 aF92YWxpZGF0b3IvdC8wMDJfY2xpZW50LnBsCkBAIC03OCw5ICs3OCw5IEBAIHN1YiB0ZXN0CiAJ bXkgJGxvZ19zdGFydCA9IC1zICRub2RlLT5sb2dmaWxlOwogCW15ICgkc3Rkb3V0LCAkc3RkZXJy KSA9IHJ1bl9jb21tYW5kKFxAY21kKTsKIAotCWlmIChkZWZpbmVkKCRwYXJhbXN7ZXhwZWN0ZWRf c3Rkb3V0fSkpCisJaWYgKCRwYXJhbXN7ZXhwZWN0X3N1Y2Nlc3N9KQogCXsKLQkJbGlrZSgkc3Rk b3V0LCAkcGFyYW1ze2V4cGVjdGVkX3N0ZG91dH0sICIkdGVzdF9uYW1lOiBzdGRvdXQgbWF0Y2hl cyIpOworCQlsaWtlKCRzdGRvdXQsIHFyL2Nvbm5lY3Rpb24gc3VjY2VlZGVkLywgIiR0ZXN0X25h bWU6IHN0ZG91dCBtYXRjaGVzIik7CiAJfQogCiAJaWYgKGRlZmluZWQoJHBhcmFtc3tleHBlY3Rl ZF9zdGRlcnJ9KSkKQEAgLTExMCwxMSArMTEwLDI0IEBAIHRlc3QoCiAJZmxhZ3MgPT4gWwogCQki LS10b2tlbiIsICJteS10b2tlbiIsCiAJCSItLWV4cGVjdGVkLXVyaSIsICIkaXNzdWVyLy53ZWxs LWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIiwKKwkJIi0tZXhwZWN0ZWQtaXNzdWVyIiwgIiRp c3N1ZXIiLAogCQkiLS1leHBlY3RlZC1zY29wZSIsICRzY29wZSwKIAldLAotCWV4cGVjdGVkX3N0 ZG91dCA9PiBxci9jb25uZWN0aW9uIHN1Y2NlZWRlZC8sCisJZXhwZWN0X3N1Y2Nlc3MgPT4gMSwK IAlsb2dfbGlrZSA9PiBbcXIvb2F1dGhfdmFsaWRhdG9yOiB0b2tlbj0ibXktdG9rZW4iLCByb2xl PSIkdXNlciIvXSk7CiAKKyMgTWFrZSBzdXJlIHRoZSB2MSBob29rIGNvbnRpbnVlcyB0byB3b3Jr LgordGVzdCgKKwkidjEgc3luY2hyb25vdXMgaG9vayBjYW4gcHJvdmlkZSBhIHRva2VuIiwKKwlm bGFncyA9PiBbCisJCSItdjEiLAorCQkiLS10b2tlbiIgPT4gIm15LXRva2VuLXYxIiwKKwkJIi0t ZXhwZWN0ZWQtdXJpIiA9PiAiJGlzc3Vlci8ud2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJhdGlv biIsCisJCSItLWV4cGVjdGVkLXNjb3BlIiA9PiAkc2NvcGUsCisJXSwKKwlleHBlY3Rfc3VjY2Vz cyA9PiAxLAorCWxvZ19saWtlID0+IFtxci9vYXV0aF92YWxpZGF0b3I6IHRva2VuPSJteS10b2tl bi12MSIsIHJvbGU9IiR1c2VyIi9dKTsKKwogaWYgKCRFTlZ7d2l0aF9saWJjdXJsfSBuZSAneWVz JykKIHsKIAkjIGxpYnBxIHNob3VsZCBoZWxwIHVzZXJzIG91dCBpZiBubyBPQXV0aCBzdXBwb3J0 IGlzIGJ1aWx0IGluLgpAQCAtMTI2LDYgKzEzOSwxNSBAQCBpZiAoJEVOVnt3aXRoX2xpYmN1cmx9 IG5lICd5ZXMnKQogCSk7CiB9CiAKKyMgdjIgc3luY2hyb25vdXMgZmxvd3Mgc2hvdWxkIGJlIGFi bGUgdG8gc2V0IGN1c3RvbSBlcnJvciBtZXNzYWdlcy4KK3Rlc3QoCisJImJhc2ljIHN5bmNocm9u b3VzIGhvb2sgY2FuIHNldCBlcnJvciBtZXNzYWdlcyIsCisJZmxhZ3MgPT4gWworCQkiLS1lcnJv ciIgPT4gImEgY3VzdG9tIGVycm9yIG1lc3NhZ2UiLAorCV0sCisJZXhwZWN0ZWRfc3RkZXJyID0+ CisJICBxci91c2VyLWRlZmluZWQgT0F1dGggZmxvdyBmYWlsZWQ6IGEgY3VzdG9tIGVycm9yIG1l c3NhZ2UvKTsKKwogIyBjb25uZWN0X3RpbWVvdXQgc2hvdWxkIHdvcmsgaWYgdGhlIGZsb3cgZG9l c24ndCByZXNwb25kLgogJGNvbW1vbl9jb25uc3RyID0gIiRjb21tb25fY29ubnN0ciBjb25uZWN0 X3RpbWVvdXQ9MSI7CiB0ZXN0KApAQCAtMTYzLDYgKzE4NSwyMSBAQCBmb3JlYWNoIG15ICRjIChA Y2FzZXMpCiAJCSJob29rIG1pc2JlaGF2aW9yOiAkYy0+eydmbGFnJ30iLAogCQlmbGFncyA9PiBb ICRjLT57J2ZsYWcnfSBdLAogCQlleHBlY3RlZF9zdGRlcnIgPT4gJGMtPnsnZXhwZWN0ZWRfZXJy b3InfSk7CisKKwl0ZXN0KAorCQkiaG9vayBtaXNiZWhhdmlvcjogJGMtPnsnZmxhZyd9ICh2MSki LAorCQlmbGFncyA9PiBbICctdjEnLCAkYy0+eydmbGFnJ30gXSwKKwkJZXhwZWN0ZWRfc3RkZXJy ID0+ICRjLT57J2V4cGVjdGVkX2Vycm9yJ30pOwogfQogCisjIHYyIGFzeW5jIGZsb3dzIHNob3Vs ZCBiZSBhYmxlIHRvIHNldCBlcnJvciBtZXNzYWdlcywgdG9vLgordGVzdCgKKwkiYXN5bmNocm9u b3VzIGhvb2sgY2FuIHNldCBlcnJvciBtZXNzYWdlcyIsCisJZmxhZ3MgPT4gWworCQkiLS1taXNi ZWhhdmUiID0+ICJmYWlsLWFzeW5jIiwKKwkJIi0tZXJyb3IiID0+ICJhc3luYyBlcnJvciBtZXNz YWdlIiwKKwldLAorCWV4cGVjdGVkX3N0ZGVyciA9PgorCSAgcXIvdXNlci1kZWZpbmVkIE9BdXRo IGZsb3cgZmFpbGVkOiBhc3luYyBlcnJvciBtZXNzYWdlLyk7CisKIGRvbmVfdGVzdGluZygpOwot LSAKMi4zNC4xCgo= --000000000000545e04064c5089cb Content-Type: application/octet-stream; name="v6-0002-libpq-oauth-Use-the-PGoauthBearerRequestV2-API.patch" Content-Disposition: attachment; filename="v6-0002-libpq-oauth-Use-the-PGoauthBearerRequestV2-API.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mme6hgg72 RnJvbSBkOGZiZmM4ZjdhMDZkNDlhZjI0MjhmYWQ3YjY3ZmIzZGRiNTViZDU0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogVGh1LCAyMyBPY3QgMjAyNSAxMjoyNDoyMCAtMDcwMApTdWJqZWN0 OiBbUEFUQ0ggdjYgMi81XSBsaWJwcS1vYXV0aDogVXNlIHRoZSBQR29hdXRoQmVhcmVyUmVxdWVz dFYyIEFQSQoKU3dpdGNoIHRoZSBwcml2YXRlIGxpYnBxLW9hdXRoIEFCSSB0byB0aGUgcHVibGlj IFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIKQVBJLiBBIGh1Z2UgYW1vdW50IG9mIGdsdWUgY29kZSBj YW4gYmUgcmVtb3ZlZCBhcyBwYXJ0IG9mIHRoaXMsIGFuZCBzZXZlcmFsCmNvZGUgcGF0aHMgY2Fu IGJlIGRlZHVwbGljYXRlZC4gQWRkaXRpb25hbGx5LCB0aGUgc2hhcmVkIGxpYnJhcnkgbm8KbG9u Z2VyIG5lZWRzIHRvIGNoYW5nZSBpdHMgbmFtZSBmb3IgZXZlcnkgbWFqb3IgcmVsZWFzZTsgaXQn cyBub3cganVzdAoibGlicHEtb2F1dGguc28iLgoKUmV2aWV3ZWQtYnk6IENoYW8gTGkgPGxpLmV2 YW4uY2hhb0BnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBac29sdCBQYXJyYWdpIDx6c29sdC5wYXJy YWdpQHBlcmNvbmEuY29tPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBT1ltaSUy Qm1yR2clMkJuX1gyTU9MZ2VXY2ozdl9NMDBnUjh1el9EN21NOHolM0RkWDFKWVZiZyU0MG1haWwu Z21haWwuY29tCi0tLQogc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvUkVBRE1FICAgICAgICB8 ICA2NyArKy0tLQogc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvZXhwb3J0cy50eHQgICB8ICAg MyArLQogc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvbWVzb24uYnVpbGQgICB8ICAgNCArLQog c3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvTWFrZWZpbGUgICAgICB8ICAgOSArLQogc3JjL2lu dGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5oICB8ICAgNiArLQogc3JjL2ludGVyZmFj ZXMvbGlicHEtb2F1dGgvb2F1dGgtdXRpbHMuaCB8ICA0MyArLS0KIHNyYy9pbnRlcmZhY2VzL2xp YnBxL2ZlLWF1dGgtb2F1dGguaCAgICAgfCAgIDcgKy0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9h dXRoL29hdXRoLWN1cmwuYyAgfCAzMzYgKysrKysrKysrKysrKystLS0tLS0tLS0KIHNyYy9pbnRl cmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLXV0aWxzLmMgfCAgNzcgKy0tLS0tCiBzcmMvaW50ZXJm YWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmMgICAgIHwgMTk4ICsrKysrKystLS0tLS0KIDEwIGZp bGVzIGNoYW5nZWQsIDMzNCBpbnNlcnRpb25zKCspLCA0MTYgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvUkVBRE1FIGIvc3JjL2ludGVyZmFjZXMv bGlicHEtb2F1dGgvUkVBRE1FCmluZGV4IDU1Mzk2MmQ2NDRlLi5hMjdhODIzOGQ0YiAxMDA2NDQK LS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvUkVBRE1FCisrKyBiL3NyYy9pbnRlcmZh Y2VzL2xpYnBxLW9hdXRoL1JFQURNRQpAQCAtMTAsNDggKzEwLDMzIEBAIHJlc3VsdHMgaW4gYSBm YWlsZWQgY29ubmVjdGlvbi4KIAogPSBMb2FkLVRpbWUgQUJJID0KIAotVGhpcyBtb2R1bGUgQUJJ IGlzIGFuIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbCwgc28gaXQncyBzdWJqZWN0IHRv IGNoYW5nZQotYWNyb3NzIG1ham9yIHJlbGVhc2VzOyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIChs aWJwcS1vYXV0aC1NQUpPUikgcmVmbGVjdHMgdGhpcy4KLVRoZSBtb2R1bGUgZXhwb3J0cyB0aGUg Zm9sbG93aW5nIHN5bWJvbHM6Ci0KLS0gUG9zdGdyZXNQb2xsaW5nU3RhdHVzVHlwZSBwZ19mZV9y dW5fb2F1dGhfZmxvdyhQR2Nvbm4gKmNvbm4pOwotLSB2b2lkIHBnX2ZlX2NsZWFudXBfb2F1dGhf ZmxvdyhQR2Nvbm4gKmNvbm4pOwotCi1wZ19mZV9ydW5fb2F1dGhfZmxvdyBhbmQgcGdfZmVfY2xl YW51cF9vYXV0aF9mbG93IGFyZSBpbXBsZW1lbnRhdGlvbnMgb2YKLWNvbm4tPmFzeW5jX2F1dGgg YW5kIGNvbm4tPmNsZWFudXBfYXN5bmNfYXV0aCwgcmVzcGVjdGl2ZWx5LgotCi1BdCB0aGUgbW9t ZW50LCBwZ19mZV9ydW5fb2F1dGhfZmxvdygpIHJlbGllcyBvbiBsaWJwcSdzIHBnX2dfdGhyZWFk bG9jayBhbmQKLWxpYnBxX2dldHRleHQoKSwgd2hpY2ggbXVzdCBiZSBpbmplY3RlZCBieSBsaWJw cSB1c2luZyB0aGlzIGluaXRpYWxpemF0aW9uCi1mdW5jdGlvbiBiZWZvcmUgdGhlIGZsb3cgaXMg cnVuOgotCi0tIHZvaWQgbGlicHFfb2F1dGhfaW5pdChwZ3RocmVhZGxvY2tfdCB0aHJlYWRsb2Nr LAotCQkJCQkJbGlicHFfZ2V0dGV4dF9mdW5jIGdldHRleHRfaW1wbCwKLQkJCQkJCWNvbm5fZXJy b3JNZXNzYWdlX2Z1bmMgZXJybXNnX2ltcGwsCi0JCQkJCQljb25uX29hdXRoX2NsaWVudF9pZF9m dW5jIGNsaWVudGlkX2ltcGwsCi0JCQkJCQljb25uX29hdXRoX2NsaWVudF9zZWNyZXRfZnVuYyBj bGllbnRzZWNyZXRfaW1wbCwKLQkJCQkJCWNvbm5fb2F1dGhfZGlzY292ZXJ5X3VyaV9mdW5jIGRp c2NvdmVyeXVyaV9pbXBsLAotCQkJCQkJY29ubl9vYXV0aF9pc3N1ZXJfaWRfZnVuYyBpc3N1ZXJp ZF9pbXBsLAotCQkJCQkJY29ubl9vYXV0aF9zY29wZV9mdW5jIHNjb3BlX2ltcGwsCi0JCQkJCQlj b25uX3Nhc2xfc3RhdGVfZnVuYyBzYXNsc3RhdGVfaW1wbCwKLQkJCQkJCXNldF9jb25uX2FsdHNv Y2tfZnVuYyBzZXRhbHRzb2NrX2ltcGwsCi0JCQkJCQlzZXRfY29ubl9vYXV0aF90b2tlbl9mdW5j IHNldHRva2VuX2ltcGwpOwotCi1JdCBhbHNvIHJlbGllcyBvbiBhY2Nlc3MgdG8gc2V2ZXJhbCBt ZW1iZXJzIG9mIHRoZSBQR2Nvbm4gc3RydWN0LiBOb3Qgb25seSBjYW4KLXRoZXNlIGNoYW5nZSBw b3NpdGlvbnMgYWNyb3NzIG1pbm9yIHZlcnNpb25zLCBidXQgdGhlIG9mZnNldHMgYXJlbid0IG5l Y2Vzc2FyaWx5Ci1zdGFibGUgd2l0aGluIGEgc2luZ2xlIG1pbm9yIHJlbGVhc2UgKGNvbm4tPmVy cm9yTWVzc2FnZSwgZm9yIGluc3RhbmNlLCBjYW4KLWNoYW5nZSBvZmZzZXRzIGRlcGVuZGluZyBv biBjb25maWd1cmUtdGltZSBvcHRpb25zKS4gVGhlcmVmb3JlIHRoZSBuZWNlc3NhcnkKLWFjY2Vz c29ycyAobmFtZWQgY29ubl8qKSBhbmQgbXV0YXRvcnMgKHNldF9jb25uXyopIGFyZSBpbmplY3Rl ZCBoZXJlLiBXaXRoIHRoaXMKLWFwcHJvYWNoLCB3ZSBjYW4gc2FmZWx5IHNlYXJjaCB0aGUgc3Rh bmRhcmQgZGxvcGVuKCkgcGF0aHMgKGUuZy4gUlBBVEgsCi1MRF9MSUJSQVJZX1BBVEgsIHRoZSBT TyBjYWNoZSkgZm9yIGFuIGltcGxlbWVudGF0aW9uIG1vZHVsZSB0byB1c2UsIGV2ZW4gaWYgdGhh dAotbW9kdWxlIHdhc24ndCBjb21waWxlZCBhdCB0aGUgc2FtZSB0aW1lIGFzIGxpYnBxIC0tIHdo aWNoIGJlY29tZXMgZXNwZWNpYWxseQotaW1wb3J0YW50IGR1cmluZyAibGl2ZSB1cGdyYWRlIiBz aXR1YXRpb25zIHdoZXJlIGEgcnVubmluZyBsaWJwcSBhcHBsaWNhdGlvbiBoYXMKLXRoZSBsaWJw cS1vYXV0aCBtb2R1bGUgdXBkYXRlZCBvdXQgZnJvbSB1bmRlciBpdCBiZWZvcmUgaXQncyBmaXJz dCBsb2FkZWQgZnJvbQotZGlzay4KK0FzIG9mIHYxOSwgdGhpcyBtb2R1bGUgQUJJIGlzIHB1Ymxp YyBhbmQgY2Fubm90IGNoYW5nZSBpbmNvbXBhdGlibHkgd2l0aG91dCBhbHNvCitjaGFuZ2luZyB0 aGUgZW50cnkgcG9pbnRzLiBCb3RoIGxpYnBxIGFuZCBsaWJwcS1vYXV0aCBtdXN0IGdyYWNlZnVs bHkgaGFuZGxlCitzaXR1YXRpb25zIHdoZXJlIHRoZSBvdGhlciBsaWJyYXJ5IGlzIG9mIGEgZGlm ZmVyZW50IHJlbGVhc2UgdmVyc2lvbiwgcGFzdCBvcgorZnV0dXJlLCBzaW5jZSB1cGdyYWRlcyB0 byB0aGUgbGlicmFyaWVzIG1heSBoYXBwZW4gaW4gZWl0aGVyIG9yZGVyLgorCisoRG9uJ3QgYXNz dW1lIHRoYXQgcGFja2FnZSB2ZXJzaW9uIGRlcGVuZGVuY2llcyBmcm9tIGxpYnBxLW9hdXRoIHRv IGxpYnBxIHdpbGwKK3NpbXBsaWZ5IHRoZSBzaXR1YXRpb24hIFNpbmNlIGxpYnBxIGRlbGF5LWxv YWRzIGxpYnBxLW9hdXRoLCB3ZSBzdGlsbCBoYXZlIHRvCitoYW5kbGUgY2FzZXMgd2hlcmUgYSBs b25nLXJ1bm5pbmcgY2xpZW50IGFwcGxpY2F0aW9uIGhhcyBhIGxpYnBxIHRoYXQncyBvbGRlcgor dGhhbiBhIG5ld2x5IHVwZ3JhZGVkIHBsdWdpbi4pCisKK1RoZSBtb2R1bGUgZXhwb3J0cyB0aGUg Zm9sbG93aW5nIHN5bWJvbDoKKworLSBpbnQgcGdfc3RhcnRfb2F1dGhiZWFyZXIoUEdjb25uICpj b25uLCBQR29hdXRoQmVhcmVyUmVxdWVzdFYyICpyZXF1ZXN0KTsKKworVGhlIG1vZHVsZSB0aGVu IGJlaGF2ZXMgYXMgaWYgaXQgaGFkIHJlY2VpdmVkIGEgUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJf VE9LRU5fVjIKK3JlcXVlc3QgdmlhIHRoZSBQUWF1dGhEYXRhSG9vayBBUEksIGFuZCBpdCBlaXRo ZXIgZmlsbHMgaW4gYW4gZXhpc3RpbmcgdG9rZW4gb3IKK3BvcHVsYXRlcyB0aGUgbmVjZXNzYXJ5 IGNhbGxiYWNrcyBmb3IgYSB0b2tlbiB0byBiZSBvYnRhaW5lZCBhc3luY2hyb25vdXNseS4KKyhT ZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIFBHb2F1dGhCZWFyZXJSZXF1ZXN0LikgVGhlIGZ1bmN0 aW9uIHJldHVybnMgemVybyBvbgorc3VjY2VzcyBhbmQgbm9uemVybyBvbiBmYWlsdXJlLgorCitB ZGRpdGlvbmFsbHksIGxpYnBxLW9hdXRoIHJlbGllcyBvbiBsaWJwcSdzIGxpYnBxX2dldHRleHQo KSwgd2hpY2ggbXVzdCBiZQoraW5qZWN0ZWQgYnkgbGlicHEgdXNpbmcgdGhpcyBpbml0aWFsaXph dGlvbiBmdW5jdGlvbiBiZWZvcmUgdGhlIGZsb3cgaXMgcnVuOgorCistIHZvaWQgbGlicHFfb2F1 dGhfaW5pdChsaWJwcV9nZXR0ZXh0X2Z1bmMgZ2V0dGV4dF9pbXBsKTsKIAogPSBTdGF0aWMgQnVp bGQgPQogCiBUaGUgc3RhdGljIGxpYnJhcnkgbGlicHEuYSBkb2VzIG5vdCBwZXJmb3JtIGFueSBk eW5hbWljIGxvYWRpbmcuIElmIHRoZSBidWlsdGluCi1mbG93IGlzIGVuYWJsZWQsIHRoZSBhcHBs aWNhdGlvbiBpcyBleHBlY3RlZCB0byBsaW5rIGFnYWluc3QgbGlicHEtb2F1dGguYQotZGlyZWN0 bHkgdG8gcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMuIChsaWJwcS5hIGFuZCBsaWJwcS1v YXV0aC5hIG11c3QgYmUKLXBhcnQgb2YgdGhlIHNhbWUgYnVpbGQuIFVubGlrZSB0aGUgZHluYW1p YyBtb2R1bGUsIHRoZXJlIGFyZSBubyB0cmFuc2xhdGlvbgotc2hpbXMgcHJvdmlkZWQuKQorZmxv dyBpcyBlbmFibGVkLCB0aGUgYXBwbGljYXRpb24gaXMgZXhwZWN0ZWQgdG8gbGluayBhZ2FpbnN0 IGxpYnBxLW9hdXRoLmEgdG8KK3Byb3ZpZGUgdGhlIG5lY2Vzc2FyeSBzeW1ib2wsIG9yIGVsc2Ug aW1wbGVtZW50IHBnX3N0YXJ0X29hdXRoYmVhcmVyKCkgaXRzZWxmLgpkaWZmIC0tZ2l0IGEvc3Jj L2ludGVyZmFjZXMvbGlicHEtb2F1dGgvZXhwb3J0cy50eHQgYi9zcmMvaW50ZXJmYWNlcy9saWJw cS1vYXV0aC9leHBvcnRzLnR4dAppbmRleCA2ODkxYTgzZGJmOS4uN2JjMTJiODYwZDcgMTAwNjQ0 Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL2V4cG9ydHMudHh0CisrKyBiL3NyYy9p bnRlcmZhY2VzL2xpYnBxLW9hdXRoL2V4cG9ydHMudHh0CkBAIC0xLDQgKzEsMyBAQAogIyBzcmMv aW50ZXJmYWNlcy9saWJwcS1vYXV0aC9leHBvcnRzLnR4dAogbGlicHFfb2F1dGhfaW5pdCAgICAg ICAgICAxCi1wZ19mZV9ydW5fb2F1dGhfZmxvdyAgICAgIDIKLXBnX2ZlX2NsZWFudXBfb2F1dGhf ZmxvdyAgMworcGdfc3RhcnRfb2F1dGhiZWFyZXIgICAgICAyCmRpZmYgLS1naXQgYS9zcmMvaW50 ZXJmYWNlcy9saWJwcS1vYXV0aC9tZXNvbi5idWlsZCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9h dXRoL21lc29uLmJ1aWxkCmluZGV4IDI3YWNhMmJjMzI0Li42ODVhMDBhY2Y3YSAxMDA2NDQKLS0t IGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvbWVzb24uYnVpbGQKKysrIGIvc3JjL2ludGVy ZmFjZXMvbGlicHEtb2F1dGgvbWVzb24uYnVpbGQKQEAgLTM4LDEwICszOCw4IEBAIGVuZGlmCiAK ICMgVGhpcyBpcyBhbiBpbnRlcm5hbCBtb2R1bGU7IHdlIGRvbid0IHdhbnQgYW4gU09OQU1FIGFu ZCB0aGVyZWZvcmUgZG8gbm90IHNldAogIyBTT19NQUpPUl9WRVJTSU9OLgotbGlicHFfb2F1dGhf bmFtZSA9ICdsaWJwcS1vYXV0aC1AMEAnLmZvcm1hdChwZ192ZXJzaW9uX21ham9yKQotCiBpZiBi dWlsZF9zaGFyZWRfbGliCi1saWJwcV9vYXV0aF9zbyA9IHNoYXJlZF9tb2R1bGUobGlicHFfb2F1 dGhfbmFtZSwKK2xpYnBxX29hdXRoX3NvID0gc2hhcmVkX21vZHVsZSgnbGlicHEtb2F1dGgnLAog ICBsaWJwcV9vYXV0aF9zb3VyY2VzICsgbGlicHFfb2F1dGhfc29fc291cmNlcywKICAgaW5jbHVk ZV9kaXJlY3RvcmllczogW2xpYnBxX29hdXRoX2luYywgcG9zdGdyZXNfaW5jXSwKICAgY19hcmdz OiBsaWJwcV9vYXV0aF9zb19jX2FyZ3MsCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJw cS1vYXV0aC9NYWtlZmlsZSBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL01ha2VmaWxlCmlu ZGV4IGE1ZjJkNjVmY2FkLi5lOTA0ODI1NjZiMSAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMv bGlicHEtb2F1dGgvTWFrZWZpbGUKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvTWFr ZWZpbGUKQEAgLTE2LDEzICsxNiwxMCBAQCBpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFr ZWZpbGUuZ2xvYmFsCiBQR0ZJTEVERVNDID0gImxpYnBxLW9hdXRoIC0gZGV2aWNlIGF1dGhvcml6 YXRpb24gT0F1dGggc3VwcG9ydCIKIAogIyBUaGlzIGlzIGFuIGludGVybmFsIG1vZHVsZTsgd2Ug ZG9uJ3Qgd2FudCBhbiBTT05BTUUgYW5kIHRoZXJlZm9yZSBkbyBub3Qgc2V0Ci0jIFNPX01BSk9S X1ZFUlNJT04uCi1OQU1FID0gcHEtb2F1dGgtJChNQUpPUlZFUlNJT04pCi0KLSMgRm9yY2UgdGhl IG5hbWUgImxpYnBxLW9hdXRoIiBmb3IgYm90aCB0aGUgc3RhdGljIGFuZCBzaGFyZWQgbGlicmFy aWVzLiBUaGUKLSMgc3RhdGljbGliIGRvZXNuJ3QgbmVlZCB2ZXJzaW9uIGluZm9ybWF0aW9uIGlu IGl0cyBuYW1lLgorIyBTT19NQUpPUl9WRVJTSU9OLiBUaGlzIHJlcXVpcmVzIGFuIGV4cGxpY2l0 IG92ZXJyaWRlIGZvciB0aGUgc2hhcmVkIGxpYnJhcnkKKyMgbmFtZS4KK05BTUUgPSBwcS1vYXV0 aAogb3ZlcnJpZGUgc2hsaWIgOj0gbGliJChOQU1FKSQoRExTVUZGSVgpCi1vdmVycmlkZSBzdGxp YiA6PSBsaWJwcS1vYXV0aC5hCiAKIG92ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChsaWJwcV9zcmNk aXIpIC1JJCh0b3BfYnVpbGRkaXIpL3NyYy9wb3J0ICQoQ1BQRkxBR1MpICQoTElCQ1VSTF9DUFBG TEFHUykKIG92ZXJyaWRlIENGTEFHUyArPSAkKFBUSFJFQURfQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEv c3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5oIGIvc3JjL2ludGVyZmFjZXMv bGlicHEtb2F1dGgvb2F1dGgtY3VybC5oCmluZGV4IDY4NmU3YjRkZjNmLi4xZDRkZDc2NjIxNyAx MDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5oCisrKyBi L3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuaApAQCAtMTcsOCArMTcsOCBA QAogCiAjaW5jbHVkZSAibGlicHEtZmUuaCIKIAotLyogRXhwb3J0ZWQgYXN5bmMtYXV0aCBjYWxs YmFja3MuICovCi1leHRlcm4gUEdETExFWFBPUlQgUG9zdGdyZXNQb2xsaW5nU3RhdHVzVHlwZSBw Z19mZV9ydW5fb2F1dGhfZmxvdyhQR2Nvbm4gKmNvbm4pOwotZXh0ZXJuIFBHRExMRVhQT1JUIHZv aWQgcGdfZmVfY2xlYW51cF9vYXV0aF9mbG93KFBHY29ubiAqY29ubik7CisvKiBFeHBvcnRlZCBm bG93IGNhbGxiYWNrLiAqLworZXh0ZXJuIFBHRExMRVhQT1JUIGludCBwZ19zdGFydF9vYXV0aGJl YXJlcihQR2Nvbm4gKmNvbm4sCisJCQkJCQkJCQkJCVBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJl cXVlc3QpOwogCiAjZW5kaWYJCQkJCQkJLyogT0FVVEhfQ1VSTF9IICovCmRpZmYgLS1naXQgYS9z cmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC11dGlscy5oIGIvc3JjL2ludGVyZmFjZXMv bGlicHEtb2F1dGgvb2F1dGgtdXRpbHMuaAppbmRleCA5ZjRkNWI2OTJkMi4uMjkzZTk5MzY5ODkg MTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLXV0aWxzLmgKKysr IGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtdXRpbHMuaApAQCAtMTUsNTMgKzE1 LDEzIEBACiAjaWZuZGVmIE9BVVRIX1VUSUxTX0gKICNkZWZpbmUgT0FVVEhfVVRJTFNfSAogCi0j aW5jbHVkZSAiZmUtYXV0aC1vYXV0aC5oIgogI2luY2x1ZGUgImxpYnBxLWZlLmgiCiAjaW5jbHVk ZSAicHFleHBidWZmZXIuaCIKIAotLyoKLSAqIEEgYmFuayBvZiBjYWxsYmFja3MgdG8gc2FmZWx5 IGFjY2VzcyBtZW1iZXJzIG9mIFBHY29ubiwgd2hpY2ggYXJlIGFsbCBwYXNzZWQKLSAqIHRvIGxp YnBxX29hdXRoX2luaXQoKSBieSBsaWJwcS4KLSAqCi0gKiBLZWVwIHRoZXNlIGFsaWduZWQgd2l0 aCB0aGUgZGVmaW5pdGlvbnMgaW4gZmUtYXV0aC1vYXV0aC5jIGFzIHdlbGwgYXMgdGhlCi0gKiBz dGF0aWMgZGVjbGFyYXRpb25zIGluIG9hdXRoLWN1cmwuYy4KLSAqLwotI2RlZmluZSBERUNMQVJF X0dFVFRFUihUWVBFLCBNRU1CRVIpIFwKLQl0eXBlZGVmIFRZUEUgKCpjb25uXyAjIyBNRU1CRVIg IyMgX2Z1bmMpIChQR2Nvbm4gKmNvbm4pOyBcCi0JZXh0ZXJuIGNvbm5fICMjIE1FTUJFUiAjIyBf ZnVuYyBjb25uXyAjIyBNRU1CRVI7Ci0KLSNkZWZpbmUgREVDTEFSRV9TRVRURVIoVFlQRSwgTUVN QkVSKSBcCi0JdHlwZWRlZiB2b2lkICgqc2V0X2Nvbm5fICMjIE1FTUJFUiAjIyBfZnVuYykgKFBH Y29ubiAqY29ubiwgVFlQRSB2YWwpOyBcCi0JZXh0ZXJuIHNldF9jb25uXyAjIyBNRU1CRVIgIyMg X2Z1bmMgc2V0X2Nvbm5fICMjIE1FTUJFUjsKLQotREVDTEFSRV9HRVRURVIoUFFFeHBCdWZmZXIs IGVycm9yTWVzc2FnZSk7Ci1ERUNMQVJFX0dFVFRFUihjaGFyICosIG9hdXRoX2NsaWVudF9pZCk7 Ci1ERUNMQVJFX0dFVFRFUihjaGFyICosIG9hdXRoX2NsaWVudF9zZWNyZXQpOwotREVDTEFSRV9H RVRURVIoY2hhciAqLCBvYXV0aF9kaXNjb3ZlcnlfdXJpKTsKLURFQ0xBUkVfR0VUVEVSKGNoYXIg Kiwgb2F1dGhfaXNzdWVyX2lkKTsKLURFQ0xBUkVfR0VUVEVSKGNoYXIgKiwgb2F1dGhfc2NvcGUp OwotREVDTEFSRV9HRVRURVIoZmVfb2F1dGhfc3RhdGUgKiwgc2FzbF9zdGF0ZSk7Ci0KLURFQ0xB UkVfU0VUVEVSKHBnc29ja2V0LCBhbHRzb2NrKTsKLURFQ0xBUkVfU0VUVEVSKGNoYXIgKiwgb2F1 dGhfdG9rZW4pOwotCi0jdW5kZWYgREVDTEFSRV9HRVRURVIKLSN1bmRlZiBERUNMQVJFX1NFVFRF UgotCiB0eXBlZGVmIGNoYXIgKigqbGlicHFfZ2V0dGV4dF9mdW5jKSAoY29uc3QgY2hhciAqbXNn aWQpOwogCiAvKiBJbml0aWFsaXplcyBsaWJwcS1vYXV0aC4gKi8KLWV4dGVybiBQR0RMTEVYUE9S VCB2b2lkIGxpYnBxX29hdXRoX2luaXQocGd0aHJlYWRsb2NrX3QgdGhyZWFkbG9jaywKLQkJCQkJ CQkJCQkgbGlicHFfZ2V0dGV4dF9mdW5jIGdldHRleHRfaW1wbCwKLQkJCQkJCQkJCQkgY29ubl9l cnJvck1lc3NhZ2VfZnVuYyBlcnJtc2dfaW1wbCwKLQkJCQkJCQkJCQkgY29ubl9vYXV0aF9jbGll bnRfaWRfZnVuYyBjbGllbnRpZF9pbXBsLAotCQkJCQkJCQkJCSBjb25uX29hdXRoX2NsaWVudF9z ZWNyZXRfZnVuYyBjbGllbnRzZWNyZXRfaW1wbCwKLQkJCQkJCQkJCQkgY29ubl9vYXV0aF9kaXNj b3ZlcnlfdXJpX2Z1bmMgZGlzY292ZXJ5dXJpX2ltcGwsCi0JCQkJCQkJCQkJIGNvbm5fb2F1dGhf aXNzdWVyX2lkX2Z1bmMgaXNzdWVyaWRfaW1wbCwKLQkJCQkJCQkJCQkgY29ubl9vYXV0aF9zY29w ZV9mdW5jIHNjb3BlX2ltcGwsCi0JCQkJCQkJCQkJIGNvbm5fc2FzbF9zdGF0ZV9mdW5jIHNhc2xz dGF0ZV9pbXBsLAotCQkJCQkJCQkJCSBzZXRfY29ubl9hbHRzb2NrX2Z1bmMgc2V0YWx0c29ja19p bXBsLAotCQkJCQkJCQkJCSBzZXRfY29ubl9vYXV0aF90b2tlbl9mdW5jIHNldHRva2VuX2ltcGwp OworZXh0ZXJuIFBHRExMRVhQT1JUIHZvaWQgbGlicHFfb2F1dGhfaW5pdChsaWJwcV9nZXR0ZXh0 X2Z1bmMgZ2V0dGV4dF9pbXBsKTsKIAogLyoKICAqIER1cGxpY2F0ZWQgQVBJcywgY29waWVkIGZy b20gbGlicHEgKHByaW1hcmlseSBsaWJwcS1pbnQuaCwgd2hpY2ggd2UgY2Fubm90CkBAIC03NSw3 ICszNSw2IEBAIHR5cGVkZWYgZW51bQogCVBHX0JPT0xfTk8JCQkJCS8qIE5vIChmYWxzZSkgKi8K IH0gUEdUZXJuYXJ5Qm9vbDsKIAotZXh0ZXJuIHZvaWQgbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3Io UEdjb25uICpjb25uLCBjb25zdCBjaGFyICpmbXQsLi4uKSBwZ19hdHRyaWJ1dGVfcHJpbnRmKDIs IDMpOwogZXh0ZXJuIGJvb2wgb2F1dGhfdW5zYWZlX2RlYnVnZ2luZ19lbmFibGVkKHZvaWQpOwog ZXh0ZXJuIGludAlwcV9ibG9ja19zaWdwaXBlKHNpZ3NldF90ICpvc2lnc2V0LCBib29sICpzaWdw aXBlX3BlbmRpbmcpOwogZXh0ZXJuIHZvaWQgcHFfcmVzZXRfc2lncGlwZShzaWdzZXRfdCAqb3Np Z3NldCwgYm9vbCBzaWdwaXBlX3BlbmRpbmcsIGJvb2wgZ290X2VwaXBlKTsKZGlmZiAtLWdpdCBh L3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguaCBiL3NyYy9pbnRlcmZhY2VzL2xp YnBxL2ZlLWF1dGgtb2F1dGguaAppbmRleCA1YzhhMjRiNzZmYS4uNTExMjg0NjE0ZjcgMTAwNjQ0 Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguaAorKysgYi9zcmMvaW50 ZXJmYWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmgKQEAgLTI3LDExICsyNyw2IEBAIGVudW0gZmVf b2F1dGhfc3RlcAogCUZFX09BVVRIX1NFUlZFUl9FUlJPUiwKIH07CiAKLS8qCi0gKiBUaGlzIHN0 cnVjdCBpcyBleHBvcnRlZCB0byB0aGUgbGlicHEtb2F1dGggbW9kdWxlLiBJZiBjaGFuZ2VzIGFy ZSBuZWVkZWQKLSAqIGR1cmluZyBiYWNrcG9ydHMgdG8gc3RhYmxlIGJyYW5jaGVzLCBwbGVhc2Ug a2VlcCBBQkkgY29tcGF0aWJpbGl0eSAobm8KLSAqIGNoYW5nZXMgdG8gZXhpc3RpbmcgbWVtYmVy cywgYWRkIG5ldyBtZW1iZXJzIGF0IHRoZSBlbmQsIGV0Yy4pLgotICovCiB0eXBlZGVmIHN0cnVj dAogewogCWVudW0gZmVfb2F1dGhfc3RlcCBzdGVwOwpAQCAtMzksMTIgKzM0LDEyIEBAIHR5cGVk ZWYgc3RydWN0CiAJUEdjb25uCSAgICpjb25uOwogCXZvaWQJICAgKmFzeW5jX2N0eDsKIAorCWJv b2wJCWJ1aWx0aW47CiAJdm9pZAkgICAqYnVpbHRpbl9mbG93OwogfSBmZV9vYXV0aF9zdGF0ZTsK IAogZXh0ZXJuIHZvaWQgcHFDbGVhck9BdXRoVG9rZW4oUEdjb25uICpjb25uKTsKIGV4dGVybiBi b29sIG9hdXRoX3Vuc2FmZV9kZWJ1Z2dpbmdfZW5hYmxlZCh2b2lkKTsKLWV4dGVybiBib29sIHVz ZV9idWlsdGluX2Zsb3coUEdjb25uICpjb25uLCBmZV9vYXV0aF9zdGF0ZSAqc3RhdGUpOwogCiAv KiBNZWNoYW5pc21zIGluIGZlLWF1dGgtb2F1dGguYyAqLwogZXh0ZXJuIGNvbnN0IHBnX2ZlX3Nh c2xfbWVjaCBwZ19vYXV0aF9tZWNoOwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEt b2F1dGgvb2F1dGgtY3VybC5jIGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3Vy bC5jCmluZGV4IDJjMTQ3Zjk4ZDBkLi4wNTJlY2QzMmRhMiAxMDA2NDQKLS0tIGEvc3JjL2ludGVy ZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBx LW9hdXRoL29hdXRoLWN1cmwuYwpAQCAtMjksNyArMjksNiBAQAogI2VuZGlmCiAKICNpbmNsdWRl ICJjb21tb24vanNvbmFwaS5oIgotI2luY2x1ZGUgImZlLWF1dGgtb2F1dGguaCIKICNpbmNsdWRl ICJtYi9wZ193Y2hhci5oIgogI2luY2x1ZGUgIm9hdXRoLWN1cmwuaCIKIApAQCAtNDQsMjMgKzQz LDEwIEBACiAKICNlbHNlCQkJCQkJCS8qICFVU0VfRFlOQU1JQ19PQVVUSCAqLwogCi0vKgotICog U3RhdGljIGJ1aWxkcyBtYXkgcmVseSBvbiBQR2Nvbm4gb2Zmc2V0cyBkaXJlY3RseS4gS2VlcCB0 aGVzZSBhbGlnbmVkIHdpdGgKLSAqIHRoZSBiYW5rIG9mIGNhbGxiYWNrcyBpbiBvYXV0aC11dGls cy5oLgotICovCisvKiBTdGF0aWMgYnVpbGRzIG1heSBtYWtlIHVzZSBvZiBsaWJwcSBpbnRlcm5h bHMgZGlyZWN0bHkuICovCisjaW5jbHVkZSAiZmUtYXV0aC1vYXV0aC5oIgogI2luY2x1ZGUgImxp YnBxLWludC5oIgogCi0jZGVmaW5lIGNvbm5fZXJyb3JNZXNzYWdlKENPTk4pICgmQ09OTi0+ZXJy b3JNZXNzYWdlKQotI2RlZmluZSBjb25uX29hdXRoX2NsaWVudF9pZChDT05OKSAoQ09OTi0+b2F1 dGhfY2xpZW50X2lkKQotI2RlZmluZSBjb25uX29hdXRoX2NsaWVudF9zZWNyZXQoQ09OTikgKENP Tk4tPm9hdXRoX2NsaWVudF9zZWNyZXQpCi0jZGVmaW5lIGNvbm5fb2F1dGhfZGlzY292ZXJ5X3Vy aShDT05OKSAoQ09OTi0+b2F1dGhfZGlzY292ZXJ5X3VyaSkKLSNkZWZpbmUgY29ubl9vYXV0aF9p c3N1ZXJfaWQoQ09OTikgKENPTk4tPm9hdXRoX2lzc3Vlcl9pZCkKLSNkZWZpbmUgY29ubl9vYXV0 aF9zY29wZShDT05OKSAoQ09OTi0+b2F1dGhfc2NvcGUpCi0jZGVmaW5lIGNvbm5fc2FzbF9zdGF0 ZShDT05OKSAoQ09OTi0+c2FzbF9zdGF0ZSkKLQotI2RlZmluZSBzZXRfY29ubl9hbHRzb2NrKENP Tk4sIFZBTCkgZG8geyBDT05OLT5hbHRzb2NrID0gVkFMOyB9IHdoaWxlICgwKQotI2RlZmluZSBz ZXRfY29ubl9vYXV0aF90b2tlbihDT05OLCBWQUwpIGRvIHsgQ09OTi0+b2F1dGhfdG9rZW4gPSBW QUw7IH0gd2hpbGUgKDApCi0KICNlbmRpZgkJCQkJCQkvKiBVU0VfRFlOQU1JQ19PQVVUSCAqLwog CiAvKiBPbmUgZmluYWwgZ3VhcmRyYWlsIGFnYWluc3QgYWNjaWRlbnRhbCBpbmNsdXNpb24uLi4g Ki8KQEAgLTIyNyw2ICsyMTMsMTUgQEAgZW51bSBPQXV0aFN0ZXAKICAqLwogc3RydWN0IGFzeW5j X2N0eAogeworCS8qIHJlbGV2YW50IGNvbm5lY3Rpb24gb3B0aW9ucyBjYWNoZWQgZnJvbSB0aGUg UEdjb25uICovCisJY2hhcgkgICAqY2xpZW50X2lkOwkJLyogb2F1dGhfY2xpZW50X2lkICovCisJ Y2hhcgkgICAqY2xpZW50X3NlY3JldDsJLyogb2F1dGhfY2xpZW50X3NlY3JldCAobWF5IGJlIE5V TEwpICovCisKKwkvKiBvcHRpb25zIGNhY2hlZCBmcm9tIHRoZSBQR29hdXRoQmVhcmVyUmVxdWVz dCAod2UgZG9uJ3Qgb3duIHRoZXNlKSAqLworCWNvbnN0IGNoYXIgKmRpc2NvdmVyeV91cmk7CisJ Y29uc3QgY2hhciAqaXNzdWVyX2lkOworCWNvbnN0IGNoYXIgKnNjb3BlOworCiAJZW51bSBPQXV0 aFN0ZXAgc3RlcDsJCS8qIHdoZXJlIGFyZSB3ZSBpbiB0aGUgZmxvdz8gKi8KIAogCWludAkJCXRp bWVyZmQ7CQkvKiBkZXNjcmlwdG9yIGZvciBzaWduYWxpbmcgYXN5bmMgdGltZW91dHMgKi8KQEAg LTMzOSwyOSArMzM0LDcyIEBAIGZyZWVfYXN5bmNfY3R4KHN0cnVjdCBhc3luY19jdHggKmFjdHgp CiAJaWYgKGFjdHgtPnRpbWVyZmQgPj0gMCkKIAkJY2xvc2UoYWN0eC0+dGltZXJmZCk7CiAKKwlm cmVlKGFjdHgtPmNsaWVudF9pZCk7CisJZnJlZShhY3R4LT5jbGllbnRfc2VjcmV0KTsKKwogCWZy ZWUoYWN0eCk7CiB9CiAKIC8qCi0gKiBSZWxlYXNlIHJlc291cmNlcyB1c2VkIGZvciB0aGUgYXN5 bmNocm9ub3VzIGV4Y2hhbmdlIGFuZCBkaXNjb25uZWN0IHRoZQotICogYWx0c29jay4KLSAqCi0g KiBUaGlzIGlzIGNhbGxlZCBlaXRoZXIgYXQgdGhlIGVuZCBvZiBhIHN1Y2Nlc3NmdWwgYXV0aGVu dGljYXRpb24sIG9yIGR1cmluZwotICogcHFEcm9wQ29ubmVjdGlvbigpLCBzbyB3ZSB3b24ndCBs ZWFrIHJlc291cmNlcyBldmVuIGlmIFBRY29ubmVjdFBvbGwoKSBuZXZlcgotICogY2FsbHMgdXMg YmFjay4KKyAqIFJlbGVhc2UgcmVzb3VyY2VzIHVzZWQgZm9yIHRoZSBhc3luY2hyb25vdXMgZXhj aGFuZ2UuCiAgKi8KLXZvaWQKLXBnX2ZlX2NsZWFudXBfb2F1dGhfZmxvdyhQR2Nvbm4gKmNvbm4p CitzdGF0aWMgdm9pZAorcGdfZmVfY2xlYW51cF9vYXV0aF9mbG93KFBHY29ubiAqY29ubiwgUEdv YXV0aEJlYXJlclJlcXVlc3QgKnJlcXVlc3QpCiB7Ci0JZmVfb2F1dGhfc3RhdGUgKnN0YXRlID0g Y29ubl9zYXNsX3N0YXRlKGNvbm4pOworCXN0cnVjdCBhc3luY19jdHggKmFjdHggPSByZXF1ZXN0 LT51c2VyOworCisJLyogcmVxdWVzdC0+Y2xlYW51cCBpcyBvbmx5IHNldCBhZnRlciBhY3R4IGhh cyBiZWVuIGFsbG9jYXRlZC4gKi8KKwlBc3NlcnQoYWN0eCk7CiAKLQlpZiAoc3RhdGUtPmFzeW5j X2N0eCkKKwlmcmVlX2FzeW5jX2N0eChhY3R4KTsKKwlyZXF1ZXN0LT51c2VyID0gTlVMTDsKKwor CS8qIGxpYnBxIGhhcyBtYWRlIGl0cyBvd24gY29weSBvZiB0aGUgdG9rZW47IGNsZWFyIG91cnMg bm93LiAqLworCWlmIChyZXF1ZXN0LT50b2tlbikKIAl7Ci0JCWZyZWVfYXN5bmNfY3R4KHN0YXRl LT5hc3luY19jdHgpOwotCQlzdGF0ZS0+YXN5bmNfY3R4ID0gTlVMTDsKKwkJZXhwbGljaXRfYnpl cm8ocmVxdWVzdC0+dG9rZW4sIHN0cmxlbihyZXF1ZXN0LT50b2tlbikpOworCQlmcmVlKHJlcXVl c3QtPnRva2VuKTsKKwkJcmVxdWVzdC0+dG9rZW4gPSBOVUxMOwogCX0KK30KIAotCXNldF9jb25u X2FsdHNvY2soY29ubiwgUEdJTlZBTElEX1NPQ0tFVCk7CisvKgorICogQnVpbGRzIGFuIGVycm9y IG1lc3NhZ2UgZnJvbSBhY3R4IGFuZCBzdG9yZXMgaXQgaW4gcmVxLT5lcnJvci4gVGhlIGFsbG9j YXRpb24KKyAqIGlzIGJhY2tlZCBieSBhY3R4LT53b3JrX2RhdGEgKHdoaWNoIHdpbGwgYmUgcmVz ZXQgZmlyc3QpLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX2FjdHhfZXJyb3IoUEdvYXV0aEJl YXJlclJlcXVlc3RWMiAqcmVxLCBzdHJ1Y3QgYXN5bmNfY3R4ICphY3R4KQoreworCVBRRXhwQnVm ZmVyIGVycmJ1ZiA9ICZhY3R4LT53b3JrX2RhdGE7CisKKwlyZXNldFBRRXhwQnVmZmVyKGVycmJ1 Zik7CisKKwkvKgorCSAqIEFzc2VtYmxlIHRoZSB0aHJlZSBwYXJ0cyBvZiBvdXIgZXJyb3I6IGNv bnRleHQsIGJvZHksIGFuZCBkZXRhaWwuIFNlZQorCSAqIGFsc28gdGhlIGRvY3VtZW50YXRpb24g Zm9yIHN0cnVjdCBhc3luY19jdHguCisJICovCisJaWYgKGFjdHgtPmVycmN0eCkKKwkJYXBwZW5k UFFFeHBCdWZmZXIoZXJyYnVmLCAiJXM6ICIsIGFjdHgtPmVycmN0eCk7CisKKwlpZiAoUFFFeHBC dWZmZXJEYXRhQnJva2VuKGFjdHgtPmVycmJ1ZikpCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKGVy cmJ1ZiwgbGlicHFfZ2V0dGV4dCgib3V0IG9mIG1lbW9yeSIpKTsKKwllbHNlCisJCWFwcGVuZFBR RXhwQnVmZmVyU3RyKGVycmJ1ZiwgYWN0eC0+ZXJyYnVmLmRhdGEpOworCisJaWYgKGFjdHgtPmN1 cmxfZXJyWzBdKQorCXsKKwkJYXBwZW5kUFFFeHBCdWZmZXIoZXJyYnVmLCAiIChsaWJjdXJsOiAl cykiLCBhY3R4LT5jdXJsX2Vycik7CisKKwkJLyogU29tZXRpbWVzIGxpYmN1cmwgYWRkcyBhIG5l d2xpbmUgdG8gdGhlIGVycm9yIGJ1ZmZlci4gOiggKi8KKwkJaWYgKGVycmJ1Zi0+bGVuID49IDIg JiYgZXJyYnVmLT5kYXRhW2VycmJ1Zi0+bGVuIC0gMl0gPT0gJ1xuJykKKwkJeworCQkJZXJyYnVm LT5kYXRhW2VycmJ1Zi0+bGVuIC0gMl0gPSAnKSc7CisJCQllcnJidWYtPmRhdGFbZXJyYnVmLT5s ZW4gLSAxXSA9ICdcMCc7CisJCQllcnJidWYtPmxlbi0tOworCQl9CisJfQorCisJcmVxLT5lcnJv ciA9IGVycmJ1Zi0+ZGF0YTsKIH0KIAogLyoKQEAgLTIxOTcsNyArMjIzNSw3IEBAIHN0YXRpYyBi b29sCiBjaGVja19pc3N1ZXIoc3RydWN0IGFzeW5jX2N0eCAqYWN0eCwgUEdjb25uICpjb25uKQog ewogCWNvbnN0IHN0cnVjdCBwcm92aWRlciAqcHJvdmlkZXIgPSAmYWN0eC0+cHJvdmlkZXI7Ci0J Y29uc3QgY2hhciAqb2F1dGhfaXNzdWVyX2lkID0gY29ubl9vYXV0aF9pc3N1ZXJfaWQoY29ubik7 CisJY29uc3QgY2hhciAqb2F1dGhfaXNzdWVyX2lkID0gYWN0eC0+aXNzdWVyX2lkOwogCiAJQXNz ZXJ0KG9hdXRoX2lzc3Vlcl9pZCk7CS8qIGVuc3VyZWQgYnkgc2V0dXBfb2F1dGhfcGFyYW1ldGVy cygpICovCiAJQXNzZXJ0KHByb3ZpZGVyLT5pc3N1ZXIpOwkvKiBlbnN1cmVkIGJ5IHBhcnNlX3By b3ZpZGVyKCkgKi8KQEAgLTIzMDAsOCArMjMzOCw4IEBAIGNoZWNrX2Zvcl9kZXZpY2VfZmxvdyhz dHJ1Y3QgYXN5bmNfY3R4ICphY3R4KQogc3RhdGljIGJvb2wKIGFkZF9jbGllbnRfaWRlbnRpZmlj YXRpb24oc3RydWN0IGFzeW5jX2N0eCAqYWN0eCwgUFFFeHBCdWZmZXIgcmVxYm9keSwgUEdjb25u ICpjb25uKQogewotCWNvbnN0IGNoYXIgKm9hdXRoX2NsaWVudF9pZCA9IGNvbm5fb2F1dGhfY2xp ZW50X2lkKGNvbm4pOwotCWNvbnN0IGNoYXIgKm9hdXRoX2NsaWVudF9zZWNyZXQgPSBjb25uX29h dXRoX2NsaWVudF9zZWNyZXQoY29ubik7CisJY29uc3QgY2hhciAqb2F1dGhfY2xpZW50X2lkID0g YWN0eC0+Y2xpZW50X2lkOworCWNvbnN0IGNoYXIgKm9hdXRoX2NsaWVudF9zZWNyZXQgPSBhY3R4 LT5jbGllbnRfc2VjcmV0OwogCiAJYm9vbAkJc3VjY2VzcyA9IGZhbHNlOwogCWNoYXIJICAgKnVz ZXJuYW1lID0gTlVMTDsKQEAgLTIzODQsMTEgKzI0MjIsMTAgQEAgY2xlYW51cDoKIHN0YXRpYyBi b29sCiBzdGFydF9kZXZpY2VfYXV0aHooc3RydWN0IGFzeW5jX2N0eCAqYWN0eCwgUEdjb25uICpj b25uKQogewotCWNvbnN0IGNoYXIgKm9hdXRoX3Njb3BlID0gY29ubl9vYXV0aF9zY29wZShjb25u KTsKKwljb25zdCBjaGFyICpvYXV0aF9zY29wZSA9IGFjdHgtPnNjb3BlOwogCWNvbnN0IGNoYXIg KmRldmljZV9hdXRoel91cmkgPSBhY3R4LT5wcm92aWRlci5kZXZpY2VfYXV0aG9yaXphdGlvbl9l bmRwb2ludDsKIAlQUUV4cEJ1ZmZlciB3b3JrX2J1ZmZlciA9ICZhY3R4LT53b3JrX2RhdGE7CiAK LQlBc3NlcnQoY29ubl9vYXV0aF9jbGllbnRfaWQoY29ubikpOyAvKiBlbnN1cmVkIGJ5IHNldHVw X29hdXRoX3BhcmFtZXRlcnMoKSAqLwogCUFzc2VydChkZXZpY2VfYXV0aHpfdXJpKTsJLyogZW5z dXJlZCBieSBjaGVja19mb3JfZGV2aWNlX2Zsb3coKSAqLwogCiAJLyogQ29uc3RydWN0IG91ciBy ZXF1ZXN0IGJvZHkuICovCkBAIC0yNDc2LDcgKzI1MTMsNiBAQCBzdGFydF90b2tlbl9yZXF1ZXN0 KHN0cnVjdCBhc3luY19jdHggKmFjdHgsIFBHY29ubiAqY29ubikKIAljb25zdCBjaGFyICpkZXZp Y2VfY29kZSA9IGFjdHgtPmF1dGh6LmRldmljZV9jb2RlOwogCVBRRXhwQnVmZmVyIHdvcmtfYnVm ZmVyID0gJmFjdHgtPndvcmtfZGF0YTsKIAotCUFzc2VydChjb25uX29hdXRoX2NsaWVudF9pZChj b25uKSk7IC8qIGVuc3VyZWQgYnkgc2V0dXBfb2F1dGhfcGFyYW1ldGVycygpICovCiAJQXNzZXJ0 KHRva2VuX3VyaSk7CQkJLyogZW5zdXJlZCBieSBwYXJzZV9wcm92aWRlcigpICovCiAJQXNzZXJ0 KGRldmljZV9jb2RlKTsJCS8qIGVuc3VyZWQgYnkgcGFyc2VfZGV2aWNlX2F1dGh6KCkgKi8KIApA QCAtMjY1NSw3ICsyNjkxLDcgQEAgcHJvbXB0X3VzZXIoc3RydWN0IGFzeW5jX2N0eCAqYWN0eCwg UEdjb25uICpjb25uKQogICogZnVuY3Rpb24gd2lsbCBub3QgdHJ5IHRvIHJlaW5pdGlhbGl6ZSBD dXJsIG9uIHN1Y2Nlc3NpdmUgY2FsbHMuCiAgKi8KIHN0YXRpYyBib29sCi1pbml0aWFsaXplX2N1 cmwoUEdjb25uICpjb25uKQoraW5pdGlhbGl6ZV9jdXJsKFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIg KnJlcSkKIHsKIAkvKgogCSAqIERvbid0IGxldCB0aGUgY29tcGlsZXIgcGxheSB0cmlja3Mgd2l0 aCB0aGlzIHZhcmlhYmxlLiBJbiB0aGUKQEAgLTI2ODksOCArMjcyNSw3IEBAIGluaXRpYWxpemVf Y3VybChQR2Nvbm4gKmNvbm4pCiAJCWdvdG8gZG9uZTsKIAllbHNlIGlmIChpbml0X3N1Y2Nlc3Nm dWwgPT0gUEdfQk9PTF9OTykKIAl7Ci0JCWxpYnBxX2FwcGVuZF9jb25uX2Vycm9yKGNvbm4sCi0J CQkJCQkJCSJjdXJsX2dsb2JhbF9pbml0IHByZXZpb3VzbHkgZmFpbGVkIGR1cmluZyBPQXV0aCBz ZXR1cCIpOworCQlyZXEtPmVycm9yID0gbGlicHFfZ2V0dGV4dCgiY3VybF9nbG9iYWxfaW5pdCBw cmV2aW91c2x5IGZhaWxlZCBkdXJpbmcgT0F1dGggc2V0dXAiKTsKIAkJZ290byBkb25lOwogCX0K IApAQCAtMjcwOCw4ICsyNzQzLDcgQEAgaW5pdGlhbGl6ZV9jdXJsKFBHY29ubiAqY29ubikKIAkg Ki8KIAlpZiAoY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwgJiB+Q1VSTF9HTE9CQUxf V0lOMzIpICE9IENVUkxFX09LKQogCXsKLQkJbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3IoY29ubiwK LQkJCQkJCQkJImN1cmxfZ2xvYmFsX2luaXQgZmFpbGVkIGR1cmluZyBPQXV0aCBzZXR1cCIpOwor CQlyZXEtPmVycm9yID0gbGlicHFfZ2V0dGV4dCgiY3VybF9nbG9iYWxfaW5pdCBmYWlsZWQgZHVy aW5nIE9BdXRoIHNldHVwIik7CiAJCWluaXRfc3VjY2Vzc2Z1bCA9IFBHX0JPT0xfTk87CiAJCWdv dG8gZG9uZTsKIAl9CkBAIC0yNzMwLDExICsyNzY0LDExIEBAIGluaXRpYWxpemVfY3VybChQR2Nv bm4gKmNvbm4pCiAJCSAqIEluIGEgZG93bmdyYWRlIHNpdHVhdGlvbiwgdGhlIGRhbWFnZSBpcyBh bHJlYWR5IGRvbmUuIEN1cmwgZ2xvYmFsCiAJCSAqIHN0YXRlIG1heSBiZSBjb3JydXB0ZWQuIEJl IG5vaXN5LgogCQkgKi8KLQkJbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3IoY29ubiwgImxpYmN1cmwg aXMgbm8gbG9uZ2VyIHRocmVhZC1zYWZlXG4iCi0JCQkJCQkJCSJcdEN1cmwgaW5pdGlhbGl6YXRp b24gd2FzIHJlcG9ydGVkIHRocmVhZC1zYWZlIHdoZW4gbGlicHFcbiIKLQkJCQkJCQkJIlx0d2Fz IGNvbXBpbGVkLCBidXQgdGhlIGN1cnJlbnRseSBpbnN0YWxsZWQgdmVyc2lvbiBvZlxuIgotCQkJ CQkJCQkiXHRsaWJjdXJsIHJlcG9ydHMgdGhhdCBpdCBpcyBub3QuIFJlY29tcGlsZSBsaWJwcSBh Z2FpbnN0XG4iCi0JCQkJCQkJCSJcdHRoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiBsaWJjdXJsLiIp OworCQlyZXEtPmVycm9yID0gbGlicHFfZ2V0dGV4dCgibGliY3VybCBpcyBubyBsb25nZXIgdGhy ZWFkLXNhZmVcbiIKKwkJCQkJCQkJICAgIlx0Q3VybCBpbml0aWFsaXphdGlvbiB3YXMgcmVwb3J0 ZWQgdGhyZWFkLXNhZmUgd2hlbiBsaWJwcVxuIgorCQkJCQkJCQkgICAiXHR3YXMgY29tcGlsZWQs IGJ1dCB0aGUgY3VycmVudGx5IGluc3RhbGxlZCB2ZXJzaW9uIG9mXG4iCisJCQkJCQkJCSAgICJc dGxpYmN1cmwgcmVwb3J0cyB0aGF0IGl0IGlzIG5vdC4gUmVjb21waWxlIGxpYnBxIGFnYWluc3Rc biIKKwkJCQkJCQkJICAgIlx0dGhlIGluc3RhbGxlZCB2ZXJzaW9uIG9mIGxpYmN1cmwuIik7CiAJ CWluaXRfc3VjY2Vzc2Z1bCA9IFBHX0JPT0xfTk87CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0yNzY0 LDU0ICsyNzk4LDE2IEBAIGRvbmU6CiAgKiBwcm92aWRlci4KICAqLwogc3RhdGljIFBvc3RncmVz UG9sbGluZ1N0YXR1c1R5cGUKLXBnX2ZlX3J1bl9vYXV0aF9mbG93X2ltcGwoUEdjb25uICpjb25u KQorcGdfZmVfcnVuX29hdXRoX2Zsb3dfaW1wbChQR2Nvbm4gKmNvbm4sIFBHb2F1dGhCZWFyZXJS ZXF1ZXN0VjIgKnJlcXVlc3QsCisJCQkJCQkgIGludCAqYWx0c29jaykKIHsKLQlmZV9vYXV0aF9z dGF0ZSAqc3RhdGUgPSBjb25uX3Nhc2xfc3RhdGUoY29ubik7Ci0Jc3RydWN0IGFzeW5jX2N0eCAq YWN0eDsKKwlzdHJ1Y3QgYXN5bmNfY3R4ICphY3R4ID0gcmVxdWVzdC0+djEudXNlcjsKIAljaGFy CSAgICpvYXV0aF90b2tlbiA9IE5VTEw7Ci0JUFFFeHBCdWZmZXIgZXJyYnVmOwotCi0JaWYgKCFp bml0aWFsaXplX2N1cmwoY29ubikpCi0JCXJldHVybiBQR1JFU19QT0xMSU5HX0ZBSUxFRDsKLQot CWlmICghc3RhdGUtPmFzeW5jX2N0eCkKLQl7Ci0JCS8qCi0JCSAqIENyZWF0ZSBvdXIgYXN5bmNo cm9ub3VzIHN0YXRlLCBhbmQgaG9vayBpdCBpbnRvIHRoZSB1cHBlci1sZXZlbAotCQkgKiBPQXV0 aCBzdGF0ZSBpbW1lZGlhdGVseSwgc28gYW55IGZhaWx1cmVzIGJlbG93IHdvbid0IGxlYWsgdGhl Ci0JCSAqIGNvbnRleHQgYWxsb2NhdGlvbi4KLQkJICovCi0JCWFjdHggPSBjYWxsb2MoMSwgc2l6 ZW9mKCphY3R4KSk7Ci0JCWlmICghYWN0eCkKLQkJewotCQkJbGlicHFfYXBwZW5kX2Nvbm5fZXJy b3IoY29ubiwgIm91dCBvZiBtZW1vcnkiKTsKLQkJCXJldHVybiBQR1JFU19QT0xMSU5HX0ZBSUxF RDsKLQkJfQotCi0JCWFjdHgtPm11eCA9IFBHSU5WQUxJRF9TT0NLRVQ7Ci0JCWFjdHgtPnRpbWVy ZmQgPSAtMTsKLQotCQkvKiBTaG91bGQgd2UgZW5hYmxlIHVuc2FmZSBmZWF0dXJlcz8gKi8KLQkJ YWN0eC0+ZGVidWdnaW5nID0gb2F1dGhfdW5zYWZlX2RlYnVnZ2luZ19lbmFibGVkKCk7Ci0KLQkJ c3RhdGUtPmFzeW5jX2N0eCA9IGFjdHg7Ci0KLQkJaW5pdFBRRXhwQnVmZmVyKCZhY3R4LT53b3Jr X2RhdGEpOwotCQlpbml0UFFFeHBCdWZmZXIoJmFjdHgtPmVycmJ1Zik7Ci0KLQkJaWYgKCFzZXR1 cF9tdWx0aXBsZXhlcihhY3R4KSkKLQkJCWdvdG8gZXJyb3JfcmV0dXJuOwotCi0JCWlmICghc2V0 dXBfY3VybF9oYW5kbGVzKGFjdHgpKQotCQkJZ290byBlcnJvcl9yZXR1cm47Ci0JfQotCi0JYWN0 eCA9IHN0YXRlLT5hc3luY19jdHg7CiAKIAlkbwogCXsKIAkJLyogQnkgZGVmYXVsdCwgdGhlIG11 bHRpcGxleGVyIGlzIHRoZSBhbHRzb2NrLiBSZWFzc2lnbiBhcyBkZXNpcmVkLiAqLwotCQlzZXRf Y29ubl9hbHRzb2NrKGNvbm4sIGFjdHgtPm11eCk7CisJCSphbHRzb2NrID0gYWN0eC0+bXV4Owog CiAJCXN3aXRjaCAoYWN0eC0+c3RlcCkKIAkJewpAQCAtMjg3Niw3ICsyODcyLDcgQEAgcGdfZmVf cnVuX29hdXRoX2Zsb3dfaW1wbChQR2Nvbm4gKmNvbm4pCiAKIAkJCQkJaWYgKCFleHBpcmVkKQog CQkJCQl7Ci0JCQkJCQlzZXRfY29ubl9hbHRzb2NrKGNvbm4sIGFjdHgtPnRpbWVyZmQpOworCQkJ CQkJKmFsdHNvY2sgPSBhY3R4LT50aW1lcmZkOwogCQkJCQkJcmV0dXJuIFBHUkVTX1BPTExJTkdf UkVBRElORzsKIAkJCQkJfQogCkBAIC0yODkzLDcgKzI4ODksNyBAQCBwZ19mZV9ydW5fb2F1dGhf Zmxvd19pbXBsKFBHY29ubiAqY29ubikKIAkJewogCQkJY2FzZSBPQVVUSF9TVEVQX0lOSVQ6CiAJ CQkJYWN0eC0+ZXJyY3R4ID0gbGlicHFfZ2V0dGV4dCgiZmFpbGVkIHRvIGZldGNoIE9wZW5JRCBk aXNjb3ZlcnkgZG9jdW1lbnQiKTsKLQkJCQlpZiAoIXN0YXJ0X2Rpc2NvdmVyeShhY3R4LCBjb25u X29hdXRoX2Rpc2NvdmVyeV91cmkoY29ubikpKQorCQkJCWlmICghc3RhcnRfZGlzY292ZXJ5KGFj dHgsIGFjdHgtPmRpc2NvdmVyeV91cmkpKQogCQkJCQlnb3RvIGVycm9yX3JldHVybjsKIAogCQkJ CWFjdHgtPnN0ZXAgPSBPQVVUSF9TVEVQX0RJU0NPVkVSWTsKQEAgLTI5MzMsMTAgKzI5MjksMTAg QEAgcGdfZmVfcnVuX29hdXRoX2Zsb3dfaW1wbChQR2Nvbm4gKmNvbm4pCiAJCQkJCWdvdG8gZXJy b3JfcmV0dXJuOwogCiAJCQkJLyoKLQkJCQkgKiBIb29rIGFueSBvYXV0aF90b2tlbiBpbnRvIHRo ZSBQR2Nvbm4gaW1tZWRpYXRlbHkgc28gdGhhdAotCQkJCSAqIHRoZSBhbGxvY2F0aW9uIGlzbid0 IGxvc3QgaW4gY2FzZSBvZiBhbiBlcnJvci4KKwkJCQkgKiBIb29rIGFueSBvYXV0aF90b2tlbiBp bnRvIHRoZSByZXF1ZXN0IHN0cnVjdCBpbW1lZGlhdGVseSBzbworCQkJCSAqIHRoYXQgdGhlIGFs bG9jYXRpb24gaXNuJ3QgbG9zdCBpbiBjYXNlIG9mIGFuIGVycm9yLgogCQkJCSAqLwotCQkJCXNl dF9jb25uX29hdXRoX3Rva2VuKGNvbm4sIG9hdXRoX3Rva2VuKTsKKwkJCQlyZXF1ZXN0LT52MS50 b2tlbiA9IG9hdXRoX3Rva2VuOwogCiAJCQkJaWYgKCFhY3R4LT51c2VyX3Byb21wdGVkKQogCQkJ CXsKQEAgLTI5NjUsNyArMjk2MSw3IEBAIHBnX2ZlX3J1bl9vYXV0aF9mbG93X2ltcGwoUEdjb25u ICpjb25uKQogCQkJCSAqIHRoZSBjbGllbnQgd2FpdCBkaXJlY3RseSBvbiB0aGUgdGltZXJmZCBy YXRoZXIgdGhhbiB0aGUKIAkJCQkgKiBtdWx0aXBsZXhlci4KIAkJCQkgKi8KLQkJCQlzZXRfY29u bl9hbHRzb2NrKGNvbm4sIGFjdHgtPnRpbWVyZmQpOworCQkJCSphbHRzb2NrID0gYWN0eC0+dGlt ZXJmZDsKIAogCQkJCWFjdHgtPnN0ZXAgPSBPQVVUSF9TVEVQX1dBSVRfSU5URVJWQUw7CiAJCQkJ YWN0eC0+cnVubmluZyA9IDE7CkBAIC0yOTkxLDQ4ICsyOTg3LDIxIEBAIHBnX2ZlX3J1bl9vYXV0 aF9mbG93X2ltcGwoUEdjb25uICpjb25uKQogCXJldHVybiBvYXV0aF90b2tlbiA/IFBHUkVTX1BP TExJTkdfT0sgOiBQR1JFU19QT0xMSU5HX1JFQURJTkc7CiAKIGVycm9yX3JldHVybjoKLQllcnJi dWYgPSBjb25uX2Vycm9yTWVzc2FnZShjb25uKTsKLQotCS8qCi0JICogQXNzZW1ibGUgdGhlIHRo cmVlIHBhcnRzIG9mIG91ciBlcnJvcjogY29udGV4dCwgYm9keSwgYW5kIGRldGFpbC4gU2VlCi0J ICogYWxzbyB0aGUgZG9jdW1lbnRhdGlvbiBmb3Igc3RydWN0IGFzeW5jX2N0eC4KLQkgKi8KLQlp ZiAoYWN0eC0+ZXJyY3R4KQotCQlhcHBlbmRQUUV4cEJ1ZmZlcihlcnJidWYsICIlczogIiwgYWN0 eC0+ZXJyY3R4KTsKLQotCWlmIChQUUV4cEJ1ZmZlckRhdGFCcm9rZW4oYWN0eC0+ZXJyYnVmKSkK LQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoZXJyYnVmLCBsaWJwcV9nZXR0ZXh0KCJvdXQgb2YgbWVt b3J5IikpOwotCWVsc2UKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoZXJyYnVmLCBhY3R4LT5lcnJi dWYuZGF0YSk7Ci0KLQlpZiAoYWN0eC0+Y3VybF9lcnJbMF0pCi0JewotCQlhcHBlbmRQUUV4cEJ1 ZmZlcihlcnJidWYsICIgKGxpYmN1cmw6ICVzKSIsIGFjdHgtPmN1cmxfZXJyKTsKLQotCQkvKiBT b21ldGltZXMgbGliY3VybCBhZGRzIGEgbmV3bGluZSB0byB0aGUgZXJyb3IgYnVmZmVyLiA6KCAq LwotCQlpZiAoZXJyYnVmLT5sZW4gPj0gMiAmJiBlcnJidWYtPmRhdGFbZXJyYnVmLT5sZW4gLSAy XSA9PSAnXG4nKQotCQl7Ci0JCQllcnJidWYtPmRhdGFbZXJyYnVmLT5sZW4gLSAyXSA9ICcpJzsK LQkJCWVycmJ1Zi0+ZGF0YVtlcnJidWYtPmxlbiAtIDFdID0gJ1wwJzsKLQkJCWVycmJ1Zi0+bGVu LS07Ci0JCX0KLQl9Ci0KLQlhcHBlbmRQUUV4cEJ1ZmZlckNoYXIoZXJyYnVmLCAnXG4nKTsKKwlh cHBlbmRfYWN0eF9lcnJvcihyZXF1ZXN0LCBhY3R4KTsKIAogCXJldHVybiBQR1JFU19QT0xMSU5H X0ZBSUxFRDsKIH0KIAogLyoKLSAqIFRoZSB0b3AtbGV2ZWwgZW50cnkgcG9pbnQuIFRoaXMgaXMg YSBjb252ZW5pZW50IHBsYWNlIHRvIHB1dCBuZWNlc3NhcnkKLSAqIHdyYXBwZXIgbG9naWMgYmVm b3JlIGhhbmRpbmcgb2ZmIHRvIHRoZSB0cnVlIGltcGxlbWVudGF0aW9uLCBhYm92ZS4KKyAqIFRo ZSB0b3AtbGV2ZWwgZW50cnkgcG9pbnQgZm9yIHRoZSBmbG93LiBUaGlzIGlzIGEgY29udmVuaWVu dCBwbGFjZSB0byBwdXQKKyAqIG5lY2Vzc2FyeSB3cmFwcGVyIGxvZ2ljIGJlZm9yZSBoYW5kaW5n IG9mZiB0byB0aGUgdHJ1ZSBpbXBsZW1lbnRhdGlvbiwgYWJvdmUuCiAgKi8KLVBvc3RncmVzUG9s bGluZ1N0YXR1c1R5cGUKLXBnX2ZlX3J1bl9vYXV0aF9mbG93KFBHY29ubiAqY29ubikKK3N0YXRp YyBQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlCitwZ19mZV9ydW5fb2F1dGhfZmxvdyhQR2Nvbm4g KmNvbm4sIHN0cnVjdCBQR29hdXRoQmVhcmVyUmVxdWVzdCAqcmVxdWVzdCwKKwkJCQkJIGludCAq YWx0c29jaykKIHsKIAlQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlIHJlc3VsdDsKLQlmZV9vYXV0 aF9zdGF0ZSAqc3RhdGUgPSBjb25uX3Nhc2xfc3RhdGUoY29ubik7Ci0Jc3RydWN0IGFzeW5jX2N0 eCAqYWN0eDsKKwlzdHJ1Y3QgYXN5bmNfY3R4ICphY3R4ID0gcmVxdWVzdC0+dXNlcjsKICNpZm5k ZWYgV0lOMzIKIAlzaWdzZXRfdAlvc2lnc2V0OwogCWJvb2wJCXNpZ3BpcGVfcGVuZGluZzsKQEAg LTMwNTksMjAgKzMwMjgsMTYgQEAgcGdfZmVfcnVuX29hdXRoX2Zsb3coUEdjb25uICpjb25uKQog CW1hc2tlZCA9IChwcV9ibG9ja19zaWdwaXBlKCZvc2lnc2V0LCAmc2lncGlwZV9wZW5kaW5nKSA9 PSAwKTsKICNlbmRpZgogCi0JcmVzdWx0ID0gcGdfZmVfcnVuX29hdXRoX2Zsb3dfaW1wbChjb25u KTsKKwlyZXN1bHQgPSBwZ19mZV9ydW5fb2F1dGhfZmxvd19pbXBsKGNvbm4sCisJCQkJCQkJCQkg ICAoUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqKSByZXF1ZXN0LAorCQkJCQkJCQkJICAgYWx0c29j ayk7CiAKIAkvKgogCSAqIFRvIGFzc2lzdCB3aXRoIGZpbmRpbmcgYnVncyBpbiBjb21iX211bHRp cGxleGVyKCkgYW5kCiAJICogZHJhaW5fdGltZXJfZXZlbnRzKCksIHdoZW4gd2UncmUgaW4gZGVi dWcgbW9kZSwgdHJhY2sgdGhlIHRvdGFsIG51bWJlcgogCSAqIG9mIGNhbGxzIHRvIHRoaXMgZnVu Y3Rpb24gYW5kIHByaW50IHRoYXQgYXQgdGhlIGVuZCBvZiB0aGUgZmxvdy4KLQkgKgotCSAqIEJl IGNhcmVmdWwgdGhhdCBzdGF0ZS0+YXN5bmNfY3R4IGNvdWxkIGJlIE5VTEwgaWYgZWFybHkgaW5p dGlhbGl6YXRpb24KLQkgKiBmYWlscyBkdXJpbmcgdGhlIGZpcnN0IGNhbGwuCiAJICovCi0JYWN0 eCA9IHN0YXRlLT5hc3luY19jdHg7Ci0JQXNzZXJ0KGFjdHggfHwgcmVzdWx0ID09IFBHUkVTX1BP TExJTkdfRkFJTEVEKTsKLQotCWlmIChhY3R4ICYmIGFjdHgtPmRlYnVnZ2luZykKKwlpZiAoYWN0 eC0+ZGVidWdnaW5nKQogCXsKIAkJYWN0eC0+ZGJnX251bV9jYWxscysrOwogCQlpZiAocmVzdWx0 ID09IFBHUkVTX1BPTExJTkdfT0sgfHwgcmVzdWx0ID09IFBHUkVTX1BPTExJTkdfRkFJTEVEKQpA QCAtMzA5MywzICszMDU4LDEwNCBAQCBwZ19mZV9ydW5fb2F1dGhfZmxvdyhQR2Nvbm4gKmNvbm4p CiAKIAlyZXR1cm4gcmVzdWx0OwogfQorCisvKgorICogQ2FsbGJhY2sgcmVnaXN0cmF0aW9uIGZv ciBPQVVUSEJFQVJFUi4gbGlicHEgY2FsbHMgdGhpcyBvbmNlIHBlciBPQXV0aAorICogY29ubmVj dGlvbi4KKyAqLworaW50CitwZ19zdGFydF9vYXV0aGJlYXJlcihQR2Nvbm4gKmNvbm4sIFBHb2F1 dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcXVlc3QpCit7CisJc3RydWN0IGFzeW5jX2N0eCAqYWN0eDsK KwlQUWNvbm5pbmZvT3B0aW9uICpjb25uaW5mbyA9IE5VTEw7CisKKwlpZiAoIWluaXRpYWxpemVf Y3VybChyZXF1ZXN0KSkKKwkJcmV0dXJuIC0xOworCisJLyoKKwkgKiBDcmVhdGUgb3VyIGFzeW5j aHJvbm91cyBzdGF0ZSwgYW5kIGhvb2sgaXQgaW50byB0aGUgdXBwZXItbGV2ZWwgT0F1dGgKKwkg KiBzdGF0ZSBpbW1lZGlhdGVseSwgc28gYW55IGZhaWx1cmVzIGJlbG93IHdvbid0IGxlYWsgdGhl IGNvbnRleHQKKwkgKiBhbGxvY2F0aW9uLgorCSAqLworCWFjdHggPSBjYWxsb2MoMSwgc2l6ZW9m KCphY3R4KSk7CisJaWYgKCFhY3R4KQorCQlnb3RvIG9vbTsKKworCWFjdHgtPm11eCA9IFBHSU5W QUxJRF9TT0NLRVQ7CisJYWN0eC0+dGltZXJmZCA9IC0xOworCisJLyoKKwkgKiBOb3cgd2UgaGF2 ZSBhIHZhbGlkIChidXQgc3RpbGwgdXNlbGVzcykgYWN0eCwgc28gd2UgY2FuIGZpbGwgaW4gdGhl CisJICogcmVxdWVzdCBvYmplY3QuIEZyb20gdGhpcyBwb2ludCBvbndhcmQsIGZhaWx1cmVzIHdp bGwgcmVzdWx0IGluIGEgY2FsbAorCSAqIHRvIHBnX2ZlX2NsZWFudXBfb2F1dGhfZmxvdygpLiBG dXJ0aGVyIGNsZWFudXAgbG9naWMgYmVsb25ncyB0aGVyZS4KKwkgKi8KKwlyZXF1ZXN0LT52MS5h c3luYyA9IHBnX2ZlX3J1bl9vYXV0aF9mbG93OworCXJlcXVlc3QtPnYxLmNsZWFudXAgPSBwZ19m ZV9jbGVhbnVwX29hdXRoX2Zsb3c7CisJcmVxdWVzdC0+djEudXNlciA9IGFjdHg7CisKKwkvKgor CSAqIE5vdyBmaW5pc2ggZmlsbGluZyBpbiB0aGUgYWN0eC4KKwkgKi8KKworCS8qIFNob3VsZCB3 ZSBlbmFibGUgdW5zYWZlIGZlYXR1cmVzPyAqLworCWFjdHgtPmRlYnVnZ2luZyA9IG9hdXRoX3Vu c2FmZV9kZWJ1Z2dpbmdfZW5hYmxlZCgpOworCisJaW5pdFBRRXhwQnVmZmVyKCZhY3R4LT53b3Jr X2RhdGEpOworCWluaXRQUUV4cEJ1ZmZlcigmYWN0eC0+ZXJyYnVmKTsKKworCS8qIFB1bGwgcmVs ZXZhbnQgY29ubmVjdGlvbiBvcHRpb25zLiAqLworCWNvbm5pbmZvID0gUFFjb25uaW5mbyhjb25u KTsKKwlpZiAoIWNvbm5pbmZvKQorCQlnb3RvIG9vbTsKKworCWZvciAoUFFjb25uaW5mb09wdGlv biAqb3B0ID0gY29ubmluZm87IG9wdC0+a2V5d29yZDsgb3B0KyspCisJeworCQlpZiAoIW9wdC0+ dmFsKQorCQkJY29udGludWU7CQkJLyogc2ltcGxpZmllcyB0aGUgc3RyZHVwIGxvZ2ljIGJlbG93 ICovCisKKwkJaWYgKHN0cmNtcChvcHQtPmtleXdvcmQsICJvYXV0aF9jbGllbnRfaWQiKSA9PSAw KQorCQl7CisJCQlhY3R4LT5jbGllbnRfaWQgPSBzdHJkdXAob3B0LT52YWwpOworCQkJaWYgKCFh Y3R4LT5jbGllbnRfaWQpCisJCQkJZ290byBvb207CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKG9w dC0+a2V5d29yZCwgIm9hdXRoX2NsaWVudF9zZWNyZXQiKSA9PSAwKQorCQl7CisJCQlhY3R4LT5j bGllbnRfc2VjcmV0ID0gc3RyZHVwKG9wdC0+dmFsKTsKKwkJCWlmICghYWN0eC0+Y2xpZW50X3Nl Y3JldCkKKwkJCQlnb3RvIG9vbTsKKwkJfQorCX0KKworCVBRY29ubmluZm9GcmVlKGNvbm5pbmZv KTsKKwljb25uaW5mbyA9IE5VTEw7CQkJLyoga2VlcHMgYGdvdG8gb29tYCBzYWZlICovCisKKwlh Y3R4LT5kaXNjb3ZlcnlfdXJpID0gcmVxdWVzdC0+djEub3BlbmlkX2NvbmZpZ3VyYXRpb247CisJ YWN0eC0+aXNzdWVyX2lkID0gcmVxdWVzdC0+aXNzdWVyOworCWFjdHgtPnNjb3BlID0gcmVxdWVz dC0+djEuc2NvcGU7CisKKwlBc3NlcnQoYWN0eC0+Y2xpZW50X2lkKTsJLyogZW5zdXJlZCBieSBz ZXR1cF9vYXV0aF9wYXJhbWV0ZXJzKCkgKi8KKwlBc3NlcnQoYWN0eC0+aXNzdWVyX2lkKTsJLyog ZW5zdXJlZCBieSBzZXR1cF9vYXV0aF9wYXJhbWV0ZXJzKCkgKi8KKwlBc3NlcnQoYWN0eC0+ZGlz Y292ZXJ5X3VyaSk7CS8qIGVuc3VyZWQgYnkgb2F1dGhfZXhjaGFuZ2UoKSAqLworCisJaWYgKCFz ZXR1cF9tdWx0aXBsZXhlcihhY3R4KSkKKwl7CisJCWFwcGVuZF9hY3R4X2Vycm9yKHJlcXVlc3Qs IGFjdHgpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKCFzZXR1cF9jdXJsX2hhbmRsZXMoYWN0 eCkpCisJeworCQlhcHBlbmRfYWN0eF9lcnJvcihyZXF1ZXN0LCBhY3R4KTsKKwkJcmV0dXJuIC0x OworCX0KKworCXJldHVybiAwOworCitvb206CisJaWYgKGNvbm5pbmZvKQorCQlQUWNvbm5pbmZv RnJlZShjb25uaW5mbyk7CisKKwlyZXF1ZXN0LT5lcnJvciA9IGxpYnBxX2dldHRleHQoIm91dCBv ZiBtZW1vcnkiKTsKKwlyZXR1cm4gLTE7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9s aWJwcS1vYXV0aC9vYXV0aC11dGlscy5jIGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1 dGgtdXRpbHMuYwppbmRleCA0ZWJlN2QwOTQ4Yy4uY2NiMGQ5YmYyYzUgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLXV0aWxzLmMKKysrIGIvc3JjL2ludGVyZmFj ZXMvbGlicHEtb2F1dGgvb2F1dGgtdXRpbHMuYwpAQCAtMzUsODUgKzM1LDE4IEBACiBwZ3RocmVh ZGxvY2tfdCBwZ19nX3RocmVhZGxvY2s7CiBzdGF0aWMgbGlicHFfZ2V0dGV4dF9mdW5jIGxpYnBx X2dldHRleHRfaW1wbDsKIAotY29ubl9lcnJvck1lc3NhZ2VfZnVuYyBjb25uX2Vycm9yTWVzc2Fn ZTsKLWNvbm5fb2F1dGhfY2xpZW50X2lkX2Z1bmMgY29ubl9vYXV0aF9jbGllbnRfaWQ7Ci1jb25u X29hdXRoX2NsaWVudF9zZWNyZXRfZnVuYyBjb25uX29hdXRoX2NsaWVudF9zZWNyZXQ7Ci1jb25u X29hdXRoX2Rpc2NvdmVyeV91cmlfZnVuYyBjb25uX29hdXRoX2Rpc2NvdmVyeV91cmk7Ci1jb25u X29hdXRoX2lzc3Vlcl9pZF9mdW5jIGNvbm5fb2F1dGhfaXNzdWVyX2lkOwotY29ubl9vYXV0aF9z Y29wZV9mdW5jIGNvbm5fb2F1dGhfc2NvcGU7Ci1jb25uX3Nhc2xfc3RhdGVfZnVuYyBjb25uX3Nh c2xfc3RhdGU7Ci0KLXNldF9jb25uX2FsdHNvY2tfZnVuYyBzZXRfY29ubl9hbHRzb2NrOwotc2V0 X2Nvbm5fb2F1dGhfdG9rZW5fZnVuYyBzZXRfY29ubl9vYXV0aF90b2tlbjsKLQogLyotCiAgKiBJ bml0aWFsaXplcyBsaWJwcS1vYXV0aCBieSBzZXR0aW5nIG5lY2Vzc2FyeSBjYWxsYmFja3MuCiAg KgotICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gcmVsaWVzIG9uIHRoZSBmb2xsb3dpbmcg cHJpdmF0ZSBpbXBsZW1lbnRhdGlvbgotICogZGV0YWlscyBvZiBsaWJwcToKLSAqCi0gKiAtIHBn X2dfdGhyZWFkbG9jazogcHJvdGVjdHMgbGliY3VybCBpbml0aWFsaXphdGlvbiBpZiB0aGUgdW5k ZXJseWluZyBDdXJsCi0gKiAgIGluc3RhbGxhdGlvbiBpcyBub3QgdGhyZWFkc2FmZQotICoKLSAq IC0gbGlicHFfZ2V0dGV4dDogdHJhbnNsYXRlcyBlcnJvciBtZXNzYWdlcyB1c2luZyBsaWJwcSdz IG1lc3NhZ2UgZG9tYWluCi0gKgotICogVGhlIGltcGxlbWVudGF0aW9uIGFsc28gbmVlZHMgYWNj ZXNzIHRvIHNldmVyYWwgbWVtYmVycyBvZiB0aGUgUEdjb25uIHN0cnVjdCwKLSAqIHdoaWNoIGFy ZSBub3QgZ3VhcmFudGVlZCB0byBzdGF5IGluIHBsYWNlIGFjcm9zcyBtaW5vciB2ZXJzaW9ucy4g QWNjZXNzb3JzCi0gKiAobmFtZWQgY29ubl8qKSBhbmQgbXV0YXRvcnMgKG5hbWVkIHNldF9jb25u XyopIGFyZSBpbmplY3RlZCBoZXJlLgorICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gcmVs aWVzIG9uIGxpYnBxX2dldHRleHQgdG8gdHJhbnNsYXRlIGVycm9yCisgKiBtZXNzYWdlcyB1c2lu ZyBsaWJwcSdzIG1lc3NhZ2UgZG9tYWluLCBzbyBsaWJwcSBpbmplY3RzIGl0IGhlcmUuIFdlIGFs c28gdXNlCisgKiB0aGlzIGNoYW5jZSB0byBpbml0aWFsaXplIG91ciB0aHJlYWRsb2NrLgogICov CiB2b2lkCi1saWJwcV9vYXV0aF9pbml0KHBndGhyZWFkbG9ja190IHRocmVhZGxvY2tfaW1wbCwK LQkJCQkgbGlicHFfZ2V0dGV4dF9mdW5jIGdldHRleHRfaW1wbCwKLQkJCQkgY29ubl9lcnJvck1l c3NhZ2VfZnVuYyBlcnJtc2dfaW1wbCwKLQkJCQkgY29ubl9vYXV0aF9jbGllbnRfaWRfZnVuYyBj bGllbnRpZF9pbXBsLAotCQkJCSBjb25uX29hdXRoX2NsaWVudF9zZWNyZXRfZnVuYyBjbGllbnRz ZWNyZXRfaW1wbCwKLQkJCQkgY29ubl9vYXV0aF9kaXNjb3ZlcnlfdXJpX2Z1bmMgZGlzY292ZXJ5 dXJpX2ltcGwsCi0JCQkJIGNvbm5fb2F1dGhfaXNzdWVyX2lkX2Z1bmMgaXNzdWVyaWRfaW1wbCwK LQkJCQkgY29ubl9vYXV0aF9zY29wZV9mdW5jIHNjb3BlX2ltcGwsCi0JCQkJIGNvbm5fc2FzbF9z dGF0ZV9mdW5jIHNhc2xzdGF0ZV9pbXBsLAotCQkJCSBzZXRfY29ubl9hbHRzb2NrX2Z1bmMgc2V0 YWx0c29ja19pbXBsLAotCQkJCSBzZXRfY29ubl9vYXV0aF90b2tlbl9mdW5jIHNldHRva2VuX2lt cGwpCitsaWJwcV9vYXV0aF9pbml0KGxpYnBxX2dldHRleHRfZnVuYyBnZXR0ZXh0X2ltcGwpCiB7 Ci0JcGdfZ190aHJlYWRsb2NrID0gdGhyZWFkbG9ja19pbXBsOworCXBnX2dfdGhyZWFkbG9jayA9 IFBRZ2V0VGhyZWFkTG9jaygpOwogCWxpYnBxX2dldHRleHRfaW1wbCA9IGdldHRleHRfaW1wbDsK LQljb25uX2Vycm9yTWVzc2FnZSA9IGVycm1zZ19pbXBsOwotCWNvbm5fb2F1dGhfY2xpZW50X2lk ID0gY2xpZW50aWRfaW1wbDsKLQljb25uX29hdXRoX2NsaWVudF9zZWNyZXQgPSBjbGllbnRzZWNy ZXRfaW1wbDsKLQljb25uX29hdXRoX2Rpc2NvdmVyeV91cmkgPSBkaXNjb3Zlcnl1cmlfaW1wbDsK LQljb25uX29hdXRoX2lzc3Vlcl9pZCA9IGlzc3VlcmlkX2ltcGw7Ci0JY29ubl9vYXV0aF9zY29w ZSA9IHNjb3BlX2ltcGw7Ci0JY29ubl9zYXNsX3N0YXRlID0gc2FzbHN0YXRlX2ltcGw7Ci0Jc2V0 X2Nvbm5fYWx0c29jayA9IHNldGFsdHNvY2tfaW1wbDsKLQlzZXRfY29ubl9vYXV0aF90b2tlbiA9 IHNldHRva2VuX2ltcGw7Ci19Ci0KLS8qCi0gKiBBcHBlbmQgYSBmb3JtYXR0ZWQgc3RyaW5nIHRv IHRoZSBlcnJvciBtZXNzYWdlIGJ1ZmZlciBvZiB0aGUgZ2l2ZW4KLSAqIGNvbm5lY3Rpb24sIGFm dGVyIHRyYW5zbGF0aW5nIGl0LiAgVGhpcyBpcyBhIGNvcHkgb2YgbGlicHEncyBpbnRlcm5hbCBB UEkuCi0gKi8KLXZvaWQKLWxpYnBxX2FwcGVuZF9jb25uX2Vycm9yKFBHY29ubiAqY29ubiwgY29u c3QgY2hhciAqZm10LC4uLikKLXsKLQlpbnQJCQlzYXZlX2Vycm5vID0gZXJybm87Ci0JYm9vbAkJ ZG9uZTsKLQl2YV9saXN0CQlhcmdzOwotCVBRRXhwQnVmZmVyIGVycm9yTWVzc2FnZSA9IGNvbm5f ZXJyb3JNZXNzYWdlKGNvbm4pOwotCi0JQXNzZXJ0KGZtdFtzdHJsZW4oZm10KSAtIDFdICE9ICdc bicpOwotCi0JaWYgKFBRRXhwQnVmZmVyQnJva2VuKGVycm9yTWVzc2FnZSkpCi0JCXJldHVybjsJ CQkJCS8qIGFscmVhZHkgZmFpbGVkICovCi0KLQkvKiBMb29wIGluIGNhc2Ugd2UgaGF2ZSB0byBy ZXRyeSBhZnRlciBlbmxhcmdpbmcgdGhlIGJ1ZmZlci4gKi8KLQlkbwotCXsKLQkJZXJybm8gPSBz YXZlX2Vycm5vOwotCQl2YV9zdGFydChhcmdzLCBmbXQpOwotCQlkb25lID0gYXBwZW5kUFFFeHBC dWZmZXJWQShlcnJvck1lc3NhZ2UsIGxpYnBxX2dldHRleHQoZm10KSwgYXJncyk7Ci0JCXZhX2Vu ZChhcmdzKTsKLQl9IHdoaWxlICghZG9uZSk7Ci0KLQlhcHBlbmRQUUV4cEJ1ZmZlckNoYXIoZXJy b3JNZXNzYWdlLCAnXG4nKTsKIH0KIAogI2lmZGVmIEVOQUJMRV9OTFMKZGlmZiAtLWdpdCBhL3Ny Yy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBx L2ZlLWF1dGgtb2F1dGguYwppbmRleCBiNjRkMDVhMTNlMy4uOTA0ZjQzZTkwZWEgMTAwNjQ0Ci0t LSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguYworKysgYi9zcmMvaW50ZXJm YWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmMKQEAgLTc4LDcgKzc4LDcgQEAgb2F1dGhfaW5pdChQ R2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnBhc3N3b3JkLAogICogVGhpcyBoYW5kbGVzIG9ubHkg bWVjaGFuaXNtIHN0YXRlIHRpZWQgdG8gdGhlIGNvbm5lY3Rpb24gbGlmZXRpbWU7IHN0YXRlCiAg KiBzdG9yZWQgaW4gc3RhdGUtPmFzeW5jX2N0eCBpcyBmcmVlZCB1cCBlaXRoZXIgaW1tZWRpYXRl bHkgYWZ0ZXIgdGhlCiAgKiBhdXRoZW50aWNhdGlvbiBoYW5kc2hha2Ugc3VjY2VlZHMsIG9yIGJl Zm9yZSB0aGUgbWVjaGFuaXNtIGlzIGNsZWFuZWQgdXAgb24KLSAqIGZhaWx1cmUuIFNlZSBwZ19m ZV9jbGVhbnVwX29hdXRoX2Zsb3coKSBhbmQgY2xlYW51cF91c2VyX29hdXRoX2Zsb3coKS4KKyAq IGZhaWx1cmUuIFNlZSBwZ19mZV9jbGVhbnVwX29hdXRoX2Zsb3coKSBhbmQgY2xlYW51cF9vYXV0 aF9mbG93KCkuCiAgKi8KIHN0YXRpYyB2b2lkCiBvYXV0aF9mcmVlKHZvaWQgKm9wYXEpCkBAIC02 ODAsMzAgKzY4MCw1NCBAQCBjbGVhbnVwOgogICogaXQncyBhZGRlZCB0byBjb25uLT5lcnJvck1l c3NhZ2UgaGVyZS4KICAqLwogc3RhdGljIHZvaWQKLXJlcG9ydF91c2VyX2Zsb3dfZXJyb3IoUEdj b25uICpjb25uLCBjb25zdCBQR29hdXRoQmVhcmVyUmVxdWVzdFYyICpyZXF1ZXN0KQorcmVwb3J0 X2Zsb3dfZXJyb3IoUEdjb25uICpjb25uLCBjb25zdCBQR29hdXRoQmVhcmVyUmVxdWVzdFYyICpy ZXF1ZXN0KQogewotCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjb25uLT5lcnJvck1lc3NhZ2UsCi0J CQkJCQkgbGlicHFfZ2V0dGV4dCgidXNlci1kZWZpbmVkIE9BdXRoIGZsb3cgZmFpbGVkIikpOwor CWZlX29hdXRoX3N0YXRlICpzdGF0ZSA9IGNvbm4tPnNhc2xfc3RhdGU7CisJY29uc3QgY2hhciAq ZXJybXNnID0gcmVxdWVzdC0+ZXJyb3I7CisKKwkvKgorCSAqIFVzZXItZGVmaW5lZCBmbG93cyBh cmUgY2FsbGVkIG91dCBleHBsaWNpdGx5IHNvIHRoYXQgdGhlIHVzZXIga25vd3Mgd2hvCisJICog dG8gYmxhbWUuIEJ1aWx0aW4gZmxvd3MgZG9uJ3QgbmVlZCB0aGF0IGV4dHJhIG1lc3NhZ2UgbGVu Z3RoOyB3ZSBleHBlY3QKKwkgKiB0aGVtIHRvIGFsd2F5cyBmaWxsIGluIHJlcXVlc3QtPmVycm9y IG9uIGZhaWx1cmUgYW55d2F5LgorCSAqLworCWlmIChzdGF0ZS0+YnVpbHRpbikKKwl7CisJCWlm ICghZXJybXNnKQorCQl7CisJCQkvKgorCQkJICogRG9uJ3QgdHVybiBhIGJ1ZyBoZXJlIGludG8g YSBjcmFzaCBpbiBwcm9kdWN0aW9uLCBidXQgZG9uJ3QKKwkJCSAqIGJvdGhlciB0cmFuc2xhdGlu ZyBlaXRoZXIuCisJCQkgKi8KKwkJCUFzc2VydChmYWxzZSk7CisJCQllcnJtc2cgPSAiYnVpbHRp biBmbG93IGZhaWxlZCBidXQgZGlkIG5vdCBwcm92aWRlIGFuIGVycm9yIG1lc3NhZ2UiOworCQl9 CiAKLQlpZiAocmVxdWVzdC0+ZXJyb3IpCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjb25uLT5l cnJvck1lc3NhZ2UsIGVycm1zZyk7CisJfQorCWVsc2UKIAl7Ci0JCWFwcGVuZFBRRXhwQnVmZmVy U3RyKCZjb25uLT5lcnJvck1lc3NhZ2UsICI6ICIpOwotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigm Y29ubi0+ZXJyb3JNZXNzYWdlLCByZXF1ZXN0LT5lcnJvcik7CisJCWFwcGVuZFBRRXhwQnVmZmVy U3RyKCZjb25uLT5lcnJvck1lc3NhZ2UsCisJCQkJCQkJIGxpYnBxX2dldHRleHQoInVzZXItZGVm aW5lZCBPQXV0aCBmbG93IGZhaWxlZCIpKTsKKwkJaWYgKGVycm1zZykKKwkJeworCQkJYXBwZW5k UFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVzc2FnZSwgIjogIik7CisJCQlhcHBlbmRQUUV4 cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNzYWdlLCBlcnJtc2cpOworCQl9CiAJfQogCiAJYXBw ZW5kUFFFeHBCdWZmZXJDaGFyKCZjb25uLT5lcnJvck1lc3NhZ2UsICdcbicpOwogfQogCiAvKgot ICogQ2FsbGJhY2sgaW1wbGVtZW50YXRpb24gb2YgY29ubi0+YXN5bmNfYXV0aCgpIGZvciBhIHVz ZXItZGVmaW5lZCBPQXV0aCBmbG93LgotICogRGVsZWdhdGVzIHRoZSByZXRyaWV2YWwgb2YgdGhl IHRva2VuIHRvIHRoZSBhcHBsaWNhdGlvbidzIGFzeW5jIGNhbGxiYWNrLgorICogQ2FsbGJhY2sg aW1wbGVtZW50YXRpb24gb2YgY29ubi0+YXN5bmNfYXV0aCgpIGZvciBPQXV0aCBmbG93cy4gRGVs ZWdhdGVzIHRoZQorICogcmV0cmlldmFsIG9mIHRoZSB0b2tlbiB0byB0aGUgUEdvYXV0aEJlYXJl clJlcXVlc3RWMi5hc3luYygpIGNhbGxiYWNrLgogICoKLSAqIFRoaXMgd2lsbCBiZSBjYWxsZWQg bXVsdGlwbGUgdGltZXMgYXMgbmVlZGVkOyB0aGUgYXBwbGljYXRpb24gaXMgcmVzcG9uc2libGUK LSAqIGZvciBzZXR0aW5nIGFuIGFsdHNvY2sgdG8gc2lnbmFsIGFuZCByZXR1cm5pbmcgdGhlIGNv cnJlY3QgUEdSRVNfUE9MTElOR18qCisgKiBUaGlzIHdpbGwgYmUgY2FsbGVkIG11bHRpcGxlIHRp bWVzIGFzIG5lZWRlZDsgdGhlIGNhbGxiYWNrIGlzIHJlc3BvbnNpYmxlIGZvcgorICogc2V0dGlu ZyBhbiBhbHRzb2NrIHRvIHNpZ25hbCBhbmQgcmV0dXJuaW5nIHRoZSBjb3JyZWN0IFBHUkVTX1BP TExJTkdfKgogICogc3RhdHVzZXMgZm9yIHVzZSBieSBQUWNvbm5lY3RQb2xsKCkuCiAgKi8KIHN0 YXRpYyBQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlCi1ydW5fdXNlcl9vYXV0aF9mbG93KFBHY29u biAqY29ubikKK3J1bl9vYXV0aF9mbG93KFBHY29ubiAqY29ubikKIHsKIAlmZV9vYXV0aF9zdGF0 ZSAqc3RhdGUgPSBjb25uLT5zYXNsX3N0YXRlOwogCVBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJl cXVlc3QgPSBzdGF0ZS0+YXN5bmNfY3R4OwpAQCAtNzExLDYgKzczNSw3IEBAIHJ1bl91c2VyX29h dXRoX2Zsb3coUEdjb25uICpjb25uKQogCiAJaWYgKCFyZXF1ZXN0LT52MS5hc3luYykKIAl7CisJ CUFzc2VydCghc3RhdGUtPmJ1aWx0aW4pOwkvKiBiZSB2ZXJ5IG5vaXN5IGlmIG91ciBjb2RlIGRv ZXMgdGhpcyAqLwogCQlsaWJwcV9hcHBlbmRfY29ubl9lcnJvcihjb25uLAogCQkJCQkJCQkidXNl ci1kZWZpbmVkIE9BdXRoIGZsb3cgcHJvdmlkZWQgbmVpdGhlciBhIHRva2VuIG5vciBhbiBhc3lu YyBjYWxsYmFjayIpOwogCQlyZXR1cm4gUEdSRVNfUE9MTElOR19GQUlMRUQ7CkBAIC03MjIsNyAr NzQ3LDcgQEAgcnVuX3VzZXJfb2F1dGhfZmxvdyhQR2Nvbm4gKmNvbm4pCiAKIAlpZiAoc3RhdHVz ID09IFBHUkVTX1BPTExJTkdfRkFJTEVEKQogCXsKLQkJcmVwb3J0X3VzZXJfZmxvd19lcnJvcihj b25uLCByZXF1ZXN0KTsKKwkJcmVwb3J0X2Zsb3dfZXJyb3IoY29ubiwgcmVxdWVzdCk7CiAJCXJl dHVybiBzdGF0dXM7CiAJfQogCWVsc2UgaWYgKHN0YXR1cyA9PSBQR1JFU19QT0xMSU5HX09LKQpA QCAtNzM0LDYgKzc1OSw3IEBAIHJ1bl91c2VyX29hdXRoX2Zsb3coUEdjb25uICpjb25uKQogCQkg Ki8KIAkJaWYgKCFyZXF1ZXN0LT52MS50b2tlbikKIAkJeworCQkJQXNzZXJ0KCFzdGF0ZS0+YnVp bHRpbik7CiAJCQlsaWJwcV9hcHBlbmRfY29ubl9lcnJvcihjb25uLAogCQkJCQkJCQkJInVzZXIt ZGVmaW5lZCBPQXV0aCBmbG93IGRpZCBub3QgcHJvdmlkZSBhIHRva2VuIik7CiAJCQlyZXR1cm4g UEdSRVNfUE9MTElOR19GQUlMRUQ7CkBAIC03NTIsNiArNzc4LDcgQEAgcnVuX3VzZXJfb2F1dGhf ZmxvdyhQR2Nvbm4gKmNvbm4pCiAJLyogVGhlIGhvb2sgd2FudHMgdGhlIGNsaWVudCB0byBwb2xs IHRoZSBhbHRzb2NrLiBNYWtlIHN1cmUgaXQgc2V0IG9uZS4gKi8KIAlpZiAoY29ubi0+YWx0c29j ayA9PSBQR0lOVkFMSURfU09DS0VUKQogCXsKKwkJQXNzZXJ0KCFzdGF0ZS0+YnVpbHRpbik7CiAJ CWxpYnBxX2FwcGVuZF9jb25uX2Vycm9yKGNvbm4sCiAJCQkJCQkJCSJ1c2VyLWRlZmluZWQgT0F1 dGggZmxvdyBkaWQgbm90IHByb3ZpZGUgYSBzb2NrZXQgZm9yIHBvbGxpbmciKTsKIAkJcmV0dXJu IFBHUkVTX1BPTExJTkdfRkFJTEVEOwpAQCAtNzYxLDEyICs3ODgsMTYgQEAgcnVuX3VzZXJfb2F1 dGhfZmxvdyhQR2Nvbm4gKmNvbm4pCiB9CiAKIC8qCi0gKiBDbGVhbnVwIGNhbGxiYWNrIGZvciB0 aGUgYXN5bmMgdXNlciBmbG93LiBEZWxlZ2F0ZXMgbW9zdCBvZiBpdHMgam9iIHRvCisgKiBDbGVh bnVwIGNhbGxiYWNrIGZvciB0aGUgYXN5bmMgZmxvdy4gRGVsZWdhdGVzIG1vc3Qgb2YgaXRzIGpv YiB0bwogICogUEdvYXV0aEJlYXJlclJlcXVlc3RWMi5jbGVhbnVwKCksIHRoZW4gZGlzY29ubmVj dHMgdGhlIGFsdHNvY2sgYW5kIGZyZWVzIHRoZQogICogcmVxdWVzdCBpdHNlbGYuCisgKgorICog VGhpcyBpcyBjYWxsZWQgZWl0aGVyIGF0IHRoZSBlbmQgb2YgYSBzdWNjZXNzZnVsIGF1dGhlbnRp Y2F0aW9uLCBvciBkdXJpbmcKKyAqIHBxRHJvcENvbm5lY3Rpb24oKSwgc28gd2Ugd29uJ3QgbGVh ayByZXNvdXJjZXMgZXZlbiBpZiBQUWNvbm5lY3RQb2xsKCkgbmV2ZXIKKyAqIGNhbGxzIHVzIGJh Y2suCiAgKi8KIHN0YXRpYyB2b2lkCi1jbGVhbnVwX3VzZXJfb2F1dGhfZmxvdyhQR2Nvbm4gKmNv bm4pCitjbGVhbnVwX29hdXRoX2Zsb3coUEdjb25uICpjb25uKQogewogCWZlX29hdXRoX3N0YXRl ICpzdGF0ZSA9IGNvbm4tPnNhc2xfc3RhdGU7CiAJUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVx dWVzdCA9IHN0YXRlLT5hc3luY19jdHg7CkBAIC03ODYsMTIgKzgxNywxNiBAQCBjbGVhbnVwX3Vz ZXJfb2F1dGhfZmxvdyhQR2Nvbm4gKmNvbm4pCiAgKgogICogVGhlcmUgYXJlIHRocmVlIHBvdGVu dGlhbCBpbXBsZW1lbnRhdGlvbnMgb2YgdXNlX2J1aWx0aW5fZmxvdzoKICAqCi0gKiAxKSBJZiB0 aGUgT0F1dGggY2xpZW50IGlzIGRpc2FibGVkIGF0IGNvbmZpZ3VyYXRpb24gdGltZSwgcmV0dXJu IGZhbHNlLgorICogMSkgSWYgdGhlIE9BdXRoIGNsaWVudCBpcyBkaXNhYmxlZCBhdCBjb25maWd1 cmF0aW9uIHRpbWUsIHJldHVybiB6ZXJvLgogICogICAgRGVwZW5kZW50IGNsaWVudHMgbXVzdCBw cm92aWRlIHRoZWlyIG93biBmbG93LgogICogMikgSWYgdGhlIE9BdXRoIGNsaWVudCBpcyBlbmFi bGVkIGFuZCBVU0VfRFlOQU1JQ19PQVVUSCBpcyBkZWZpbmVkLCBkbG9wZW4oKQogICogICAgdGhl IGxpYnBxLW9hdXRoIHBsdWdpbiBhbmQgdXNlIGl0cyBpbXBsZW1lbnRhdGlvbi4KICAqIDMpIE90 aGVyd2lzZSwgdXNlIGZsb3cgY2FsbGJhY2tzIHRoYXQgYXJlIHN0YXRpY2FsbHkgbGlua2VkIGlu dG8gdGhlCiAgKiAgICBleGVjdXRhYmxlLgorICoKKyAqIEZvciBjYWxsZXIgY29udmVuaWVuY2Us IHRoZSByZXR1cm4gdmFsdWUgZm9sbG93cyB0aGUgY29udmVudGlvbiBvZgorICogUFFhdXRoRGF0 YUhvb2s6IHplcm8gbWVhbnMgbm8gaW1wbGVtZW50YXRpb24gaXMgcHJvdmlkZWQsIG5lZ2F0aXZl IGluZGljYXRlcworICogZmFpbHVyZSwgYW5kIHBvc2l0aXZlIGluZGljYXRlcyBzdWNjZXNzLgog ICovCiAKICNpZiAhZGVmaW5lZChVU0VfTElCQ1VSTCkKQEAgLTgwMCwxMCArODM1LDEwIEBAIGNs ZWFudXBfdXNlcl9vYXV0aF9mbG93KFBHY29ubiAqY29ubikKICAqIFRoaXMgY29uZmlndXJhdGlv biBkb2Vzbid0IHN1cHBvcnQgdGhlIGJ1aWx0aW4gZmxvdy4KICAqLwogCi1ib29sCi11c2VfYnVp bHRpbl9mbG93KFBHY29ubiAqY29ubiwgZmVfb2F1dGhfc3RhdGUgKnN0YXRlKQorc3RhdGljIGlu dAordXNlX2J1aWx0aW5fZmxvdyhQR2Nvbm4gKmNvbm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSwg UEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVxdWVzdCkKIHsKLQlyZXR1cm4gZmFsc2U7CisJcmV0 dXJuIDA7CiB9CiAKICNlbGlmIGRlZmluZWQoVVNFX0RZTkFNSUNfT0FVVEgpCkBAIC04MTQsMzYg Kzg0OSw2IEBAIHVzZV9idWlsdGluX2Zsb3coUEdjb25uICpjb25uLCBmZV9vYXV0aF9zdGF0ZSAq c3RhdGUpCiAKIHR5cGVkZWYgY2hhciAqKCpsaWJwcV9nZXR0ZXh0X2Z1bmMpIChjb25zdCBjaGFy ICptc2dpZCk7CiAKLS8qCi0gKiBEZWZpbmUgYWNjZXNzb3IvbXV0YXRvciBzaGltcyB0byBpbmpl Y3QgaW50byBsaWJwcS1vYXV0aCwgc28gdGhhdCBpdCBkb2Vzbid0Ci0gKiBkZXBlbmQgb24gdGhl IG9mZnNldHMgd2l0aGluIFBHY29ubi4gKFRoZXNlIGhhdmUgY2hhbmdlZCBkdXJpbmcgbWlub3Ig dmVyc2lvbgotICogdXBkYXRlcyBpbiB0aGUgcGFzdC4pCi0gKi8KLQotI2RlZmluZSBERUZJTkVf R0VUVEVSKFRZUEUsIE1FTUJFUikgXAotCXR5cGVkZWYgVFlQRSAoKmNvbm5fICMjIE1FTUJFUiAj IyBfZnVuYykgKFBHY29ubiAqY29ubik7IFwKLQlzdGF0aWMgVFlQRSBjb25uXyAjIyBNRU1CRVIo UEdjb25uICpjb25uKSB7IHJldHVybiBjb25uLT5NRU1CRVI7IH0KLQotLyogTGlrZSBERUZJTkVf R0VUVEVSLCBidXQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG1lbWJlci4gKi8KLSNkZWZpbmUg REVGSU5FX0dFVFRFUl9QKFRZUEUsIE1FTUJFUikgXAotCXR5cGVkZWYgVFlQRSAoKmNvbm5fICMj IE1FTUJFUiAjIyBfZnVuYykgKFBHY29ubiAqY29ubik7IFwKLQlzdGF0aWMgVFlQRSBjb25uXyAj IyBNRU1CRVIoUEdjb25uICpjb25uKSB7IHJldHVybiAmY29ubi0+TUVNQkVSOyB9Ci0KLSNkZWZp bmUgREVGSU5FX1NFVFRFUihUWVBFLCBNRU1CRVIpIFwKLQl0eXBlZGVmIHZvaWQgKCpzZXRfY29u bl8gIyMgTUVNQkVSICMjIF9mdW5jKSAoUEdjb25uICpjb25uLCBUWVBFIHZhbCk7IFwKLQlzdGF0 aWMgdm9pZCBzZXRfY29ubl8gIyMgTUVNQkVSKFBHY29ubiAqY29ubiwgVFlQRSB2YWwpIHsgY29u bi0+TUVNQkVSID0gdmFsOyB9Ci0KLURFRklORV9HRVRURVJfUChQUUV4cEJ1ZmZlciwgZXJyb3JN ZXNzYWdlKTsKLURFRklORV9HRVRURVIoY2hhciAqLCBvYXV0aF9jbGllbnRfaWQpOwotREVGSU5F X0dFVFRFUihjaGFyICosIG9hdXRoX2NsaWVudF9zZWNyZXQpOwotREVGSU5FX0dFVFRFUihjaGFy ICosIG9hdXRoX2Rpc2NvdmVyeV91cmkpOwotREVGSU5FX0dFVFRFUihjaGFyICosIG9hdXRoX2lz c3Vlcl9pZCk7Ci1ERUZJTkVfR0VUVEVSKGNoYXIgKiwgb2F1dGhfc2NvcGUpOwotREVGSU5FX0dF VFRFUihmZV9vYXV0aF9zdGF0ZSAqLCBzYXNsX3N0YXRlKTsKLQotREVGSU5FX1NFVFRFUihwZ3Nv Y2tldCwgYWx0c29jayk7Ci1ERUZJTkVfU0VUVEVSKGNoYXIgKiwgb2F1dGhfdG9rZW4pOwotCiAv KgogICogTG9hZHMgdGhlIGxpYnBxLW9hdXRoIHBsdWdpbiB2aWEgZGxvcGVuKCksIGluaXRpYWxp emVzIGl0LCBhbmQgcGx1Z3MgaXRzCiAgKiBjYWxsYmFja3MgaW50byB0aGUgY29ubmVjdGlvbidz IGFzeW5jIGF1dGggaGFuZGxlcnMuCkBAIC04NTIsMjcgKzg1NywxOSBAQCBERUZJTkVfU0VUVEVS KGNoYXIgKiwgb2F1dGhfdG9rZW4pOwogICogaGFuZGxlIHRoZSB1c2UgY2FzZSB3aGVyZSB0aGUg YnVpbGQgc3VwcG9ydHMgbG9hZGluZyBhIGZsb3cgYnV0IGEgdXNlciBkb2VzCiAgKiBub3Qgd2Fu dCB0byBpbnN0YWxsIGl0LiBUcm91Ymxlc2hvb3Rpbmcgb2YgbGlua2VyL2xvYWRlciBmYWlsdXJl cyBjYW4gYmUgZG9uZQogICogdmlhIFBHT0FVVEhERUJVRy4KKyAqCisgKiBUaGUgbGlmZXRpbWUg b2YgKnJlcXVlc3QgZW5kcyBzaG9ydGx5IGFmdGVyIHRoaXMgY2FsbCwgc28gaXQgbXVzdCBiZSBj b3BpZWQKKyAqIHRvIGxvbmdlci1saXZlZCBzdG9yYWdlLgogICovCi1ib29sCi11c2VfYnVpbHRp bl9mbG93KFBHY29ubiAqY29ubiwgZmVfb2F1dGhfc3RhdGUgKnN0YXRlKQorc3RhdGljIGludAor dXNlX2J1aWx0aW5fZmxvdyhQR2Nvbm4gKmNvbm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSwgUEdv YXV0aEJlYXJlclJlcXVlc3RWMiAqcmVxdWVzdCkKIHsKIAlzdGF0aWMgYm9vbCBpbml0aWFsaXpl ZCA9IGZhbHNlOwogCXN0YXRpYyBwdGhyZWFkX211dGV4X3QgaW5pdF9tdXRleCA9IFBUSFJFQURf TVVURVhfSU5JVElBTElaRVI7CiAJaW50CQkJbG9ja2VycjsKIAotCXZvaWQJCSgqaW5pdCkgKHBn dGhyZWFkbG9ja190IHRocmVhZGxvY2ssCi0JCQkJCQkgbGlicHFfZ2V0dGV4dF9mdW5jIGdldHRl eHRfaW1wbCwKLQkJCQkJCSBjb25uX2Vycm9yTWVzc2FnZV9mdW5jIGVycm1zZ19pbXBsLAotCQkJ CQkJIGNvbm5fb2F1dGhfY2xpZW50X2lkX2Z1bmMgY2xpZW50aWRfaW1wbCwKLQkJCQkJCSBjb25u X29hdXRoX2NsaWVudF9zZWNyZXRfZnVuYyBjbGllbnRzZWNyZXRfaW1wbCwKLQkJCQkJCSBjb25u X29hdXRoX2Rpc2NvdmVyeV91cmlfZnVuYyBkaXNjb3Zlcnl1cmlfaW1wbCwKLQkJCQkJCSBjb25u X29hdXRoX2lzc3Vlcl9pZF9mdW5jIGlzc3VlcmlkX2ltcGwsCi0JCQkJCQkgY29ubl9vYXV0aF9z Y29wZV9mdW5jIHNjb3BlX2ltcGwsCi0JCQkJCQkgY29ubl9zYXNsX3N0YXRlX2Z1bmMgc2FzbHN0 YXRlX2ltcGwsCi0JCQkJCQkgc2V0X2Nvbm5fYWx0c29ja19mdW5jIHNldGFsdHNvY2tfaW1wbCwK LQkJCQkJCSBzZXRfY29ubl9vYXV0aF90b2tlbl9mdW5jIHNldHRva2VuX2ltcGwpOwotCVBvc3Rn cmVzUG9sbGluZ1N0YXR1c1R5cGUgKCpmbG93KSAoUEdjb25uICpjb25uKTsKLQl2b2lkCQkoKmNs ZWFudXApIChQR2Nvbm4gKmNvbm4pOworCXZvaWQJCSgqaW5pdCkgKGxpYnBxX2dldHRleHRfZnVu YyBnZXR0ZXh0X2ltcGwpOworCWludAkJCSgqc3RhcnRfZmxvdykgKFBHY29ubiAqY29ubiwgUEdv YXV0aEJlYXJlclJlcXVlc3RWMiAqcmVxdWVzdCk7CiAKIAkvKgogCSAqIE9uIG1hY09TIG9ubHks IGxvYWQgdGhlIG1vZHVsZSB1c2luZyBpdHMgYWJzb2x1dGUgaW5zdGFsbCBwYXRoOyB0aGUKQEAg LTg4NSw5ICs4ODIsOSBAQCB1c2VfYnVpbHRpbl9mbG93KFBHY29ubiAqY29ubiwgZmVfb2F1dGhf c3RhdGUgKnN0YXRlKQogCSAqLwogCWNvbnN0IGNoYXIgKmNvbnN0IG1vZHVsZV9uYW1lID0KICNp ZiBkZWZpbmVkKF9fZGFyd2luX18pCi0JCUxJQkRJUiAiL2xpYnBxLW9hdXRoLSIgUEdfTUFKT1JW RVJTSU9OIERMU1VGRklYOworCQlMSUJESVIgIi9saWJwcS1vYXV0aCIgRExTVUZGSVg7CiAjZWxz ZQotCQkibGlicHEtb2F1dGgtIiBQR19NQUpPUlZFUlNJT04gRExTVUZGSVg7CisJCSJsaWJwcS1v YXV0aCIgRExTVUZGSVg7CiAjZW5kaWYKIAogCXN0YXRlLT5idWlsdGluX2Zsb3cgPSBkbG9wZW4o bW9kdWxlX25hbWUsIFJUTERfTk9XIHwgUlRMRF9MT0NBTCk7CkBAIC05MDMsMTIgKzkwMCwxMSBA QCB1c2VfYnVpbHRpbl9mbG93KFBHY29ubiAqY29ubiwgZmVfb2F1dGhfc3RhdGUgKnN0YXRlKQog CQlpZiAob2F1dGhfdW5zYWZlX2RlYnVnZ2luZ19lbmFibGVkKCkpCiAJCQlmcHJpbnRmKHN0ZGVy ciwgImZhaWxlZCBkbG9wZW4gZm9yIGxpYnBxLW9hdXRoOiAlc1xuIiwgZGxlcnJvcigpKTsKIAot CQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCX0KIAogCWlmICgoaW5pdCA9IGRsc3ltKHN0 YXRlLT5idWlsdGluX2Zsb3csICJsaWJwcV9vYXV0aF9pbml0IikpID09IE5VTEwKLQkJfHwgKGZs b3cgPSBkbHN5bShzdGF0ZS0+YnVpbHRpbl9mbG93LCAicGdfZmVfcnVuX29hdXRoX2Zsb3ciKSkg PT0gTlVMTAotCQl8fCAoY2xlYW51cCA9IGRsc3ltKHN0YXRlLT5idWlsdGluX2Zsb3csICJwZ19m ZV9jbGVhbnVwX29hdXRoX2Zsb3ciKSkgPT0gTlVMTCkKKwkJfHwgKHN0YXJ0X2Zsb3cgPSBkbHN5 bShzdGF0ZS0+YnVpbHRpbl9mbG93LCAicGdfc3RhcnRfb2F1dGhiZWFyZXIiKSkgPT0gTlVMTCkK IAl7CiAJCS8qCiAJCSAqIFRoaXMgaXMgbW9yZSBvZiBhbiBlcnJvciBjb25kaXRpb24gdGhhbiB0 aGUgb25lIGFib3ZlLCBidXQgZHVlIHRvCkBAIC05MTgsNyArOTE0LDcgQEAgdXNlX2J1aWx0aW5f ZmxvdyhQR2Nvbm4gKmNvbm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSkKIAkJCWZwcmludGYoc3Rk ZXJyLCAiZmFpbGVkIGRsc3ltIGZvciBsaWJwcS1vYXV0aDogJXNcbiIsIGRsZXJyb3IoKSk7CiAK IAkJZGxjbG9zZShzdGF0ZS0+YnVpbHRpbl9mbG93KTsKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1 cm4gMDsKIAl9CiAKIAkvKgpAQCAtOTM4LDU2ICs5MzQsNDAgQEAgdXNlX2J1aWx0aW5fZmxvdyhQ R2Nvbm4gKmNvbm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSkKIAkJQXNzZXJ0KGZhbHNlKTsKIAog CQlsaWJwcV9hcHBlbmRfY29ubl9lcnJvcihjb25uLCAiZmFpbGVkIHRvIGxvY2sgbXV0ZXggKCVk KSIsIGxvY2tlcnIpOwotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCX0KIAogCWlmICgh aW5pdGlhbGl6ZWQpCiAJewotCQlpbml0KHBnX2dfdGhyZWFkbG9jaywKKwkJaW5pdCgKICNpZmRl ZiBFTkFCTEVfTkxTCi0JCQkgbGlicHFfZ2V0dGV4dCwKKwkJCSBsaWJwcV9nZXR0ZXh0CiAjZWxz ZQotCQkJIE5VTEwsCisJCQkgTlVMTAogI2VuZGlmCi0JCQkgY29ubl9lcnJvck1lc3NhZ2UsCi0J CQkgY29ubl9vYXV0aF9jbGllbnRfaWQsCi0JCQkgY29ubl9vYXV0aF9jbGllbnRfc2VjcmV0LAot CQkJIGNvbm5fb2F1dGhfZGlzY292ZXJ5X3VyaSwKLQkJCSBjb25uX29hdXRoX2lzc3Vlcl9pZCwK LQkJCSBjb25uX29hdXRoX3Njb3BlLAotCQkJIGNvbm5fc2FzbF9zdGF0ZSwKLQkJCSBzZXRfY29u bl9hbHRzb2NrLAotCQkJIHNldF9jb25uX29hdXRoX3Rva2VuKTsKKwkJCSk7CiAKIAkJaW5pdGlh bGl6ZWQgPSB0cnVlOwogCX0KIAogCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZpbml0X211dGV4KTsK IAotCS8qIFNldCBvdXIgYXN5bmNocm9ub3VzIGNhbGxiYWNrcy4gKi8KLQljb25uLT5hc3luY19h dXRoID0gZmxvdzsKLQljb25uLT5jbGVhbnVwX2FzeW5jX2F1dGggPSBjbGVhbnVwOwotCi0JcmV0 dXJuIHRydWU7CisJcmV0dXJuIChzdGFydF9mbG93KGNvbm4sIHJlcXVlc3QpID09IDApID8gMSA6 IC0xOwogfQogCiAjZWxzZQogCiAvKgotICogVXNlIHRoZSBidWlsdGluIGZsb3cgaW4gbGlicHEt b2F1dGguYSAoc2VlIGxpYnBxLW9hdXRoL29hdXRoLWN1cmwuaCkuCisgKiBGb3Igc3RhdGljIGJ1 aWxkcywgd2UgY2FuIGp1c3QgY2FsbCBwZ19zdGFydF9vYXV0aGJlYXJlcigpIGRpcmVjdGx5LiBJ dCdzCisgKiBwcm92aWRlZCBieSBsaWJwcS1vYXV0aC5hLgogICovCiAKLWV4dGVybiBQb3N0Z3Jl c1BvbGxpbmdTdGF0dXNUeXBlIHBnX2ZlX3J1bl9vYXV0aF9mbG93KFBHY29ubiAqY29ubik7Ci1l eHRlcm4gdm9pZCBwZ19mZV9jbGVhbnVwX29hdXRoX2Zsb3coUEdjb25uICpjb25uKTsKK2V4dGVy biBpbnQJcGdfc3RhcnRfb2F1dGhiZWFyZXIoUEdjb25uICpjb25uLCBQR29hdXRoQmVhcmVyUmVx dWVzdFYyICpyZXF1ZXN0KTsKIAotYm9vbAotdXNlX2J1aWx0aW5fZmxvdyhQR2Nvbm4gKmNvbm4s IGZlX29hdXRoX3N0YXRlICpzdGF0ZSkKK3N0YXRpYyBpbnQKK3VzZV9idWlsdGluX2Zsb3coUEdj b25uICpjb25uLCBmZV9vYXV0aF9zdGF0ZSAqc3RhdGUsIFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIg KnJlcXVlc3QpCiB7Ci0JLyogU2V0IG91ciBhc3luY2hyb25vdXMgY2FsbGJhY2tzLiAqLwotCWNv bm4tPmFzeW5jX2F1dGggPSBwZ19mZV9ydW5fb2F1dGhfZmxvdzsKLQljb25uLT5jbGVhbnVwX2Fz eW5jX2F1dGggPSBwZ19mZV9jbGVhbnVwX29hdXRoX2Zsb3c7Ci0KLQlyZXR1cm4gdHJ1ZTsKKwly ZXR1cm4gKHBnX3N0YXJ0X29hdXRoYmVhcmVyKGNvbm4sIHJlcXVlc3QpID09IDApID8gMSA6IC0x OwogfQogCiAjZW5kaWYJCQkJCQkJLyogVVNFX0xJQkNVUkwgKi8KQEAgLTEwMDAsMTEgKzk4MCwx MSBAQCB1c2VfYnVpbHRpbl9mbG93KFBHY29ubiAqY29ubiwgZmVfb2F1dGhfc3RhdGUgKnN0YXRl KQogICogSWYgdGhlIGFwcGxpY2F0aW9uIGhhcyByZWdpc3RlcmVkIGEgY3VzdG9tIGZsb3cgaGFu ZGxlciB1c2luZwogICogUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5bX1YyXSwgaXQgbWF5 IGVpdGhlciByZXR1cm4gYSB0b2tlbiBpbW1lZGlhdGVseQogICogKGUuZy4gaWYgaXQgaGFzIG9u ZSBjYWNoZWQgZm9yIGltbWVkaWF0ZSB1c2UpLCBvciBzZXQgdXAgZm9yIGEgc2VyaWVzIG9mCi0g KiBhc3luY2hyb25vdXMgY2FsbGJhY2tzIHdoaWNoIHdpbGwgYmUgbWFuYWdlZCBieSBydW5fdXNl cl9vYXV0aF9mbG93KCkuCisgKiBhc3luY2hyb25vdXMgY2FsbGJhY2tzIHdoaWNoIHdpbGwgYmUg bWFuYWdlZCBieSBydW5fb2F1dGhfZmxvdygpLgogICoKICAqIElmIHRoZSBkZWZhdWx0IGhhbmRs ZXIgaXMgdXNlZCBpbnN0ZWFkLCBhIERldmljZSBBdXRob3JpemF0aW9uIGZsb3cgaXMgdXNlZAot ICogZm9yIHRoZSBjb25uZWN0aW9uIGlmIHN1cHBvcnQgaGFzIGJlZW4gY29tcGlsZWQgaW4uIChT ZWUKLSAqIGZlLWF1dGgtb2F1dGgtY3VybC5jIGZvciBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLikK KyAqIGZvciB0aGUgY29ubmVjdGlvbiBpZiBzdXBwb3J0IGhhcyBiZWVuIGNvbXBpbGVkIGluLiAo U2VlIG9hdXRoLWN1cmwuYyBmb3IKKyAqIGltcGxlbWVudGF0aW9uIGRldGFpbHMuKQogICoKICAq IElmIG5laXRoZXIgYSBjdXN0b20gaGFuZGxlciBub3IgdGhlIGJ1aWx0aW4gZmxvdyBpcyBhdmFp bGFibGUsIHRoZSBjb25uZWN0aW9uCiAgKiBmYWlscyBoZXJlLgpAQCAtMTAyNiwxMSArMTAwNiwx NyBAQCBzZXR1cF90b2tlbl9yZXF1ZXN0KFBHY29ubiAqY29ubiwgZmVfb2F1dGhfc3RhdGUgKnN0 YXRlKQogCiAJLyoKIAkgKiBUaGUgY2xpZW50IG1heSBoYXZlIG92ZXJyaWRkZW4gdGhlIE9BdXRo IGZsb3cuIFRyeSB0aGUgdjIgaG9vayBmaXJzdCwKLQkgKiB0aGVuIGZhbGwgYmFjayB0byB0aGUg djEgaW1wbGVtZW50YXRpb24uCisJICogdGhlbiBmYWxsIGJhY2sgdG8gdGhlIHYxIGltcGxlbWVu dGF0aW9uLiBJZiBuZWl0aGVyIGlzIGF2YWlsYWJsZSwgdHJ5CisJICogdGhlIGJ1aWx0aW4gZmxv dy4KIAkgKi8KIAlyZXMgPSBQUWF1dGhEYXRhSG9vayhQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9U T0tFTl9WMiwgY29ubiwgJnJlcXVlc3QpOwogCWlmIChyZXMgPT0gMCkKIAkJcmVzID0gUFFhdXRo RGF0YUhvb2soUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU4sIGNvbm4sICZyZXF1ZXN0KTsK KwlpZiAocmVzID09IDApCisJeworCQlzdGF0ZS0+YnVpbHRpbiA9IHRydWU7CisJCXJlcyA9IHVz ZV9idWlsdGluX2Zsb3coY29ubiwgc3RhdGUsICZyZXF1ZXN0KTsKKwl9CiAKIAlpZiAocmVzID4g MCkKIAl7CkBAIC0xMDY1LDE2ICsxMDUxLDE2IEBAIHNldHVwX3Rva2VuX3JlcXVlc3QoUEdjb25u ICpjb25uLCBmZV9vYXV0aF9zdGF0ZSAqc3RhdGUpCiAKIAkJKnJlcXVlc3RfY29weSA9IHJlcXVl c3Q7CiAKLQkJY29ubi0+YXN5bmNfYXV0aCA9IHJ1bl91c2VyX29hdXRoX2Zsb3c7Ci0JCWNvbm4t PmNsZWFudXBfYXN5bmNfYXV0aCA9IGNsZWFudXBfdXNlcl9vYXV0aF9mbG93OworCQljb25uLT5h c3luY19hdXRoID0gcnVuX29hdXRoX2Zsb3c7CisJCWNvbm4tPmNsZWFudXBfYXN5bmNfYXV0aCA9 IGNsZWFudXBfb2F1dGhfZmxvdzsKIAkJc3RhdGUtPmFzeW5jX2N0eCA9IHJlcXVlc3RfY29weTsK IAl9CiAJZWxzZSBpZiAocmVzIDwgMCkKIAl7Ci0JCXJlcG9ydF91c2VyX2Zsb3dfZXJyb3IoY29u biwgJnJlcXVlc3QpOworCQlyZXBvcnRfZmxvd19lcnJvcihjb25uLCAmcmVxdWVzdCk7CiAJCWdv dG8gZmFpbDsKIAl9Ci0JZWxzZSBpZiAoIXVzZV9idWlsdGluX2Zsb3coY29ubiwgc3RhdGUpKQor CWVsc2UKIAl7CiAJCWxpYnBxX2FwcGVuZF9jb25uX2Vycm9yKGNvbm4sICJubyBPQXV0aCBmbG93 cyBhcmUgYXZhaWxhYmxlICh0cnkgaW5zdGFsbGluZyB0aGUgbGlicHEtb2F1dGggcGFja2FnZSki KTsKIAkJZ290byBmYWlsOwotLSAKMi4zNC4xCgo= --000000000000545e04064c5089cb Content-Type: application/octet-stream; name="v6-0003-libpq-oauth-Never-link-against-libpq-s-encoding-f.patch" Content-Disposition: attachment; filename="v6-0003-libpq-oauth-Never-link-against-libpq-s-encoding-f.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mme6hjby3 RnJvbSA5NmJkNTk3MDY2ODQ5MDZjMjI0NTg0ZTFjNDI0YjgwOWIzMjcxZWUzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogV2VkLCAzIERlYyAyMDI1IDA5OjUzOjQ0IC0wODAwClN1YmplY3Q6 IFtQQVRDSCB2NiAzLzVdIGxpYnBxLW9hdXRoOiBOZXZlciBsaW5rIGFnYWluc3QgbGlicHEncyBl bmNvZGluZwogZnVuY3Rpb25zCgpOb3cgdGhhdCBsaWJwcS1vYXV0aCBkb2Vzbid0IGhhdmUgdG8g bWF0Y2ggdGhlIG1ham9yIHZlcnNpb24gb2YgbGlicHEsCnNvbWUgdGhpbmdzIGluIHBnX3djaGFy LmggYXJlIHRlY2huaWNhbGx5IHVuc2FmZSBmb3IgdXMgdG8gdXNlLiAoU2VlCmI2YzdjZmFjOCBm b3IgYSBmdWxsZXIgZGlzY3Vzc2lvbi4pIFRoaXMgaXMgdW5saWtlbHkgdG8gYmUgYSBwcm9ibGVt IC0tCndlIG9ubHkgY2FyZSBhYm91dCBVVEYtOCBpbiB0aGUgY29udGV4dCBvZiBPQXV0aCByaWdo dCBub3cgLS0gYnV0IGlmCmFueW9uZSBkaWQgaW50cm9kdWNlIGEgd2F5IHRvIGhpdCBpdCwgaXQn ZCBiZSBleHRyZW1lbHkgZGlmZmljdWx0IHRvCmRlYnVnIG9yIHJlcHJvZHVjZSwgYW5kIGl0J2Qg YmUgYSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSB0bwpib290LgoKRGVmaW5lIFVT RV9QUklWQVRFX0VOQ09ESU5HX0ZVTkNTIHNvIHRoYXQgYW55b25lIHdobyB0cmllcyB0byBhZGQg YQpkZXBlbmRlbmN5IG9uIHRoZSBleHBvcnRlZCBBUElzIHdpbGwgc2ltcGx5IGZhaWwgdG8gbGlu ayB0aGUgc2hhcmVkCm1vZHVsZS4KClJldmlld2VkLWJ5OiBDaGFvIExpIDxsaS5ldmFuLmNoYW9A Z21haWwuY29tPgpSZXZpZXdlZC1ieTogWnNvbHQgUGFycmFnaSA8enNvbHQucGFycmFnaUBwZXJj b25hLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQU9ZbWklMkJtckdnJTJC bl9YMk1PTGdlV2NqM3ZfTTAwZ1I4dXpfRDdtTTh6JTNEZFgxSllWYmclNDBtYWlsLmdtYWlsLmNv bQotLS0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL21lc29uLmJ1aWxkIHwgMTAgKysrKysr KysrLQogc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvTWFrZWZpbGUgICAgfCAxMSArKysrKysr KystLQogMiBmaWxlcyBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL21lc29uLmJ1aWxkIGIvc3Jj L2ludGVyZmFjZXMvbGlicHEtb2F1dGgvbWVzb24uYnVpbGQKaW5kZXggNjg1YTAwYWNmN2EuLmVh M2E5MDBmNGYxIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9tZXNvbi5i dWlsZAorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9tZXNvbi5idWlsZApAQCAtMTIs NyArMTIsMTUgQEAgbGlicHFfb2F1dGhfc291cmNlcyA9IGZpbGVzKAogbGlicHFfb2F1dGhfc29f c291cmNlcyA9IGZpbGVzKAogICAnb2F1dGgtdXRpbHMuYycsCiApCi1saWJwcV9vYXV0aF9zb19j X2FyZ3MgPSBbJy1EVVNFX0RZTkFNSUNfT0FVVEgnXQorbGlicHFfb2F1dGhfc29fY19hcmdzID0g WworICAnLURVU0VfRFlOQU1JQ19PQVVUSCcsCisKKyAgIyBBIGJpdCBvZiBmb3J3YXJkLWxvb2tp bmcgcGFyYW5vaWE6IGRvbid0IGFsbG93IGFueW9uZSB0byBhY2NpZGVudGFsbHkgZGVwZW5kCisg ICMgb24gdGhlIGVuY29kaW5nIElEcyBjb21pbmcgZnJvbSBsaWJwcS4gVGhleSdyZSBub3QgZ3Vh cmFudGVlZCB0byBtYXRjaCB0aGUKKyAgIyBJRHMgaW4gdXNlIGJ5IG91ciB2ZXJzaW9uIG9mIHBn Y29tbW9uLCBub3cgdGhhdCB3ZSBhbGxvdyB0aGUgbWFqb3IgdmVyc2lvbgorICAjIG9mIGxpYnBx IHRvIGRpZmZlciBmcm9tIHRoZSBtYWpvciB2ZXJzaW9uIG9mIGxpYnBxLW9hdXRoLgorICAnLURV U0VfUFJJVkFURV9FTkNPRElOR19GVU5DUycsCitdCiAKIGV4cG9ydF9maWxlID0gY3VzdG9tX3Rh cmdldCgnbGlicHEtb2F1dGguZXhwb3J0cycsCiAgIGt3YXJnczogZ2VuX2V4cG9ydF9rd2FyZ3Ms CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9NYWtlZmlsZSBiL3NyYy9p bnRlcmZhY2VzL2xpYnBxLW9hdXRoL01ha2VmaWxlCmluZGV4IGU5MDQ4MjU2NmIxLi4yMzEzNDkw MzRkMSAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvTWFrZWZpbGUKKysr IGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvTWFrZWZpbGUKQEAgLTI0LDYgKzI0LDE0IEBA IG92ZXJyaWRlIHNobGliIDo9IGxpYiQoTkFNRSkkKERMU1VGRklYKQogb3ZlcnJpZGUgQ1BQRkxB R1MgOj0gLUkkKGxpYnBxX3NyY2RpcikgLUkkKHRvcF9idWlsZGRpcikvc3JjL3BvcnQgJChDUFBG TEFHUykgJChMSUJDVVJMX0NQUEZMQUdTKQogb3ZlcnJpZGUgQ0ZMQUdTICs9ICQoUFRIUkVBRF9D RkxBR1MpCiAKK292ZXJyaWRlIENQUEZMQUdTX1NITElCIDo9IC1EVVNFX0RZTkFNSUNfT0FVVEgK KworIyBBIGJpdCBvZiBmb3J3YXJkLWxvb2tpbmcgcGFyYW5vaWE6IGRvbid0IGFsbG93IGxpYnBx LW9hdXRoLnNvIHRvIGFjY2lkZW50YWxseQorIyBkZXBlbmQgb24gdGhlIGVuY29kaW5nIElEcyBj b21pbmcgZnJvbSBsaWJwcS4gVGhleSdyZSBub3QgZ3VhcmFudGVlZCB0byBtYXRjaAorIyB0aGUg SURzIGluIHVzZSBieSBvdXIgdmVyc2lvbiBvZiBwZ2NvbW1vbiwgbm93IHRoYXQgd2UgYWxsb3cg dGhlIG1ham9yIHZlcnNpb24KKyMgb2YgbGlicHEgdG8gZGlmZmVyIGZyb20gdGhlIG1ham9yIHZl cnNpb24gb2YgbGlicHEtb2F1dGguCitvdmVycmlkZSBDUFBGTEFHU19TSExJQiArPSAtRFVTRV9Q UklWQVRFX0VOQ09ESU5HX0ZVTkNTCisKIE9CSlMgPSBcCiAJJChXSU4zMlJFUykKIApAQCAtMzQs OCArNDIsNyBAQCBPQkpTX1NITElCID0gXAogCW9hdXRoLWN1cmxfc2hsaWIubyBcCiAJb2F1dGgt dXRpbHMubyBcCiAKLW9hdXRoLXV0aWxzLm86IG92ZXJyaWRlIENQUEZMQUdTICs9IC1EVVNFX0RZ TkFNSUNfT0FVVEgKLW9hdXRoLWN1cmxfc2hsaWIubzogb3ZlcnJpZGUgQ1BQRkxBR1NfU0hMSUIg Kz0gLURVU0VfRFlOQU1JQ19PQVVUSAorb2F1dGgtdXRpbHMubzogb3ZlcnJpZGUgQ1BQRkxBR1Mg Kz0gJChDUFBGTEFHU19TSExJQikKIAogIyBBZGQgc2hsaWItL3N0bGliLXNwZWNpZmljIG9iamVj dHMuCiAkKHNobGliKTogb3ZlcnJpZGUgT0JKUyArPSAkKE9CSlNfU0hMSUIpCi0tIAoyLjM0LjEK Cg== --000000000000545e04064c5089cb Content-Type: application/octet-stream; name="v6-0004-WIP-test-out-poisoning.patch" Content-Disposition: attachment; filename="v6-0004-WIP-test-out-poisoning.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mme6hmfa4 RnJvbSAwZTdmYWUxZTE1Mjc4MTQ3OGQxYjQ3N2M3YmEwZGQwNjJhZWZkNzZkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogVHVlLCAzIE1hciAyMDI2IDA5OjQ1OjM3IC0wODAwClN1YmplY3Q6 IFtQQVRDSCB2NiA0LzVdIFdJUDogdGVzdCBvdXQgcG9pc29uaW5nCgotLS0KIHNyYy9pbnRlcmZh Y2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguaCB8ICAgMSArCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9m ZS1hdXRoLW9hdXRoLmMgfCAxMzMgKysrKysrKysrKysrKysrKysrKysrKysrKy0tCiAyIGZpbGVz IGNoYW5nZWQsIDEyNSBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguaCBiL3NyYy9pbnRlcmZhY2VzL2xp YnBxL2ZlLWF1dGgtb2F1dGguaAppbmRleCA1MTEyODQ2MTRmNy4uMmIyMmQyM2ZmZGUgMTAwNjQ0 Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguaAorKysgYi9zcmMvaW50 ZXJmYWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmgKQEAgLTM0LDYgKzM0LDcgQEAgdHlwZWRlZiBz dHJ1Y3QKIAlQR2Nvbm4JICAgKmNvbm47CiAJdm9pZAkgICAqYXN5bmNfY3R4OwogCisJYm9vbAkJ djE7CiAJYm9vbAkJYnVpbHRpbjsKIAl2b2lkCSAgICpidWlsdGluX2Zsb3c7CiB9IGZlX29hdXRo X3N0YXRlOwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1vYXV0aC5j IGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1vYXV0aC5jCmluZGV4IDkwNGY0M2U5MGVh Li44MDNjMWRjNDMwZiAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1v YXV0aC5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguYwpAQCAtMjcs NiArMjcsMTEgQEAKICNpbmNsdWRlICJmZS1hdXRoLW9hdXRoLmgiCiAjaW5jbHVkZSAibWIvcGdf d2NoYXIuaCIKICNpbmNsdWRlICJwZ19jb25maWdfcGF0aHMuaCIKKyNpbmNsdWRlICJ1dGlscy9t ZW1kZWJ1Zy5oIgorCitzdGF0aWMgaW50CWRvX2FzeW5jKGZlX29hdXRoX3N0YXRlICpzdGF0ZSwg UEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVxdWVzdCk7CitzdGF0aWMgdm9pZCBkb19jbGVhbnVw KGZlX29hdXRoX3N0YXRlICpzdGF0ZSwgUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVxdWVzdCk7 CitzdGF0aWMgdm9pZCBwb2lzb25fcmVxX3YyKFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcXVl c3QsIGJvb2wgcG9pc29uKTsKIAogLyogVGhlIGV4cG9ydGVkIE9BdXRoIGNhbGxiYWNrIG1lY2hh bmlzbS4gKi8KIHN0YXRpYyB2b2lkICpvYXV0aF9pbml0KFBHY29ubiAqY29ubiwgY29uc3QgY2hh ciAqcGFzc3dvcmQsCkBAIC03NDEsOSArNzQ2LDcgQEAgcnVuX29hdXRoX2Zsb3coUEdjb25uICpj b25uKQogCQlyZXR1cm4gUEdSRVNfUE9MTElOR19GQUlMRUQ7CiAJfQogCi0Jc3RhdHVzID0gcmVx dWVzdC0+djEuYXN5bmMoY29ubiwKLQkJCQkJCQkgICAoUEdvYXV0aEJlYXJlclJlcXVlc3QgKikg cmVxdWVzdCwKLQkJCQkJCQkgICAmY29ubi0+YWx0c29jayk7CisJc3RhdHVzID0gZG9fYXN5bmMo c3RhdGUsIHJlcXVlc3QpOwogCiAJaWYgKHN0YXR1cyA9PSBQR1JFU19QT0xMSU5HX0ZBSUxFRCkK IAl7CkBAIC04MDQsOCArODA3LDcgQEAgY2xlYW51cF9vYXV0aF9mbG93KFBHY29ubiAqY29ubikK IAogCUFzc2VydChyZXF1ZXN0KTsKIAotCWlmIChyZXF1ZXN0LT52MS5jbGVhbnVwKQotCQlyZXF1 ZXN0LT52MS5jbGVhbnVwKGNvbm4sIChQR29hdXRoQmVhcmVyUmVxdWVzdCAqKSByZXF1ZXN0KTsK Kwlkb19jbGVhbnVwKHN0YXRlLCByZXF1ZXN0KTsKIAljb25uLT5hbHRzb2NrID0gUEdJTlZBTElE X1NPQ0tFVDsKIAogCWZyZWUocmVxdWVzdCk7CkBAIC0xMDExLDcgKzEwMTMsMTQgQEAgc2V0dXBf dG9rZW5fcmVxdWVzdChQR2Nvbm4gKmNvbm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSkKIAkgKi8K IAlyZXMgPSBQUWF1dGhEYXRhSG9vayhQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTl9WMiwg Y29ubiwgJnJlcXVlc3QpOwogCWlmIChyZXMgPT0gMCkKKwl7CisJCXBvaXNvbl9yZXFfdjIoJnJl cXVlc3QsIHRydWUpOworCiAJCXJlcyA9IFBRYXV0aERhdGFIb29rKFBRQVVUSERBVEFfT0FVVEhf QkVBUkVSX1RPS0VOLCBjb25uLCAmcmVxdWVzdCk7CisJCXN0YXRlLT52MSA9IChyZXMgIT0gMCk7 CisKKwkJcG9pc29uX3JlcV92MigmcmVxdWVzdCwgZmFsc2UpOworCX0KIAlpZiAocmVzID09IDAp CiAJewogCQlzdGF0ZS0+YnVpbHRpbiA9IHRydWU7CkBAIC0xMDM3LDggKzEwNDYsNyBAQCBzZXR1 cF90b2tlbl9yZXF1ZXN0KFBHY29ubiAqY29ubiwgZmVfb2F1dGhfc3RhdGUgKnN0YXRlKQogCQkJ fQogCiAJCQkvKiBzaG9ydC1jaXJjdWl0ICovCi0JCQlpZiAocmVxdWVzdC52MS5jbGVhbnVwKQot CQkJCXJlcXVlc3QudjEuY2xlYW51cChjb25uLCAoUEdvYXV0aEJlYXJlclJlcXVlc3QgKikgJnJl cXVlc3QpOworCQkJZG9fY2xlYW51cChzdGF0ZSwgJnJlcXVlc3QpOwogCQkJcmV0dXJuIHRydWU7 CiAJCX0KIApAQCAtMTA2OSw4ICsxMDc3LDcgQEAgc2V0dXBfdG9rZW5fcmVxdWVzdChQR2Nvbm4g KmNvbm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSkKIAlyZXR1cm4gdHJ1ZTsKIAogZmFpbDoKLQlp ZiAocmVxdWVzdC52MS5jbGVhbnVwKQotCQlyZXF1ZXN0LnYxLmNsZWFudXAoY29ubiwgKFBHb2F1 dGhCZWFyZXJSZXF1ZXN0ICopICZyZXF1ZXN0KTsKKwlkb19jbGVhbnVwKHN0YXRlLCAmcmVxdWVz dCk7CiAJcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xNDIxLDMgKzE0MjgsMTExIEBAIG9hdXRoX3Vu c2FmZV9kZWJ1Z2dpbmdfZW5hYmxlZCh2b2lkKQogCiAJcmV0dXJuIChlbnYgJiYgc3RyY21wKGVu diwgIlVOU0FGRSIpID09IDApOwogfQorCisvKgorICogSG9vayB2MSBQb2lzb25pbmcKKyAqCisg KiBUcnkgdG8gY2F0Y2ggbWlzdXNlcyBvZiB0aGUgdjEgUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJf VE9LRU4gaG9vayBhbmQgaXRzCisgKiBjYWxsYmFja3MsIHdoaWNoIGFyZSBub3QgYWxsb3dlZCB0 byBkb3duY2FzdCB0aGVpciByZXF1ZXN0IGFyZ3VtZW50IHRvCisgKiBQR29hdXRoQmVhcmVyUmVx dWVzdFYyLiAoU3VjaCBjbGllbnRzIG1heSBjcmFzaCBvciB3b3JzZSB3aGVuIHNwZWFraW5nIHRv CisgKiBsaWJwcSAxOC4pCisgKgorICogVGhpcyBhdHRlbXB0cyB0byB1c2UgVmFsZ3JpbmQgaG9v a3MsIGlmIHByZXNlbnQsIHRvIG1hcmsgdGhlIGV4dHJhIG1lbWJlcnMgYXMKKyAqIGluYWNjZXNz aWJsZS4gRm9yIHVuaW5zdHJ1bWVudGVkIGJ1aWxkcywgaXQgYWxzbyBtdW5nZXMgcmVxdWVzdC0+ aXNzdWVyIHRvCisgKiB0cnkgdG8gY3Jhc2ggY2xpZW50cyB0aGF0IHBlcmZvcm0gc3RyaW5nIG9w ZXJhdGlvbnMsIGFuZCBpdCBhYm9ydHMgaWYKKyAqIHJlcXVlc3QtPmVycm9yIGlzIHNldC4KKyAq LworCisjZGVmaW5lIE1BU0tfQklUUyAoKHVpbnRwdHJfdCkgMHg1NWFhNTVhYTU1YWE1NWFhKQor I2RlZmluZSBQT0lTT05fTUFTSyhwdHIpICgodm9pZCAqKSAoKCh1aW50cHRyX3QpIHB0cikgXiBN QVNLX0JJVFMpKQorCisvKgorICogV29ya2hvcnNlIGZvciB2MiByZXF1ZXN0IHBvaXNvbmluZy4g VGhpcyBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IHR3aWNlOiBvbmNlCisgKiB0byBwb2lzb24sIG9u Y2UgdG8gdW5wb2lzb24uCisgKgorICogTkI6IFVucG9pc29uaW5nIG11c3QgcmVzdG9yZSB0aGUg cmVxdWVzdCB0byBpdHMgb3JpZ2luYWwgc3RhdGUsIGJlY2F1c2Ugd2UKKyAqIG1pZ2h0IHN0aWxs IHN3aXRjaCBiYWNrIHRvIGEgdjIgaW1wbGVtZW50YXRpb24gaW50ZXJuYWxseS4gRG9uJ3QgZG8g YW55dGhpbmcKKyAqIGRlc3RydWN0aXZlIGR1cmluZyB0aGUgcG9pc29uIG9wZXJhdGlvbi4KKyAq Lworc3RhdGljIHZvaWQKK3BvaXNvbl9yZXFfdjIoUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVx dWVzdCwgYm9vbCBwb2lzb24pCit7CisJdm9pZAkgICAqY29uc3QgYmFzZSA9IChjaGFyICopIHJl cXVlc3QgKyBzaXplb2YocmVxdWVzdC0+djEpOworCWNvbnN0IHNpemVfdCBsZW4gPSBzaXplb2Yo KnJlcXVlc3QpIC0gc2l6ZW9mKHJlcXVlc3QtPnYxKTsKKworCWlmIChwb2lzb24pCisJeworCQkv KiBQb2lzb24gcmVxdWVzdC0+aXNzdWVyIHdpdGggYSBtYXNrIHRvIGhlbHAgdW5pbnN0cnVtZW50 ZWQgYnVpbGRzLiAqLworCQlyZXF1ZXN0LT5pc3N1ZXIgPSBQT0lTT05fTUFTSyhyZXF1ZXN0LT5p c3N1ZXIpOworCisJCVZBTEdSSU5EX01BS0VfTUVNX05PQUNDRVNTKGJhc2UsIGxlbik7CisJfQor CWVsc2UKKwl7CisJCS8qCisJCSAqIFhYWCBVc2luZyBERUZJTkVEIGhlcmUgaXMgdGVjaG5pY2Fs bHkgdG9vIGxheDsgd2UgbWlnaHQgY2F0Y2gKKwkJICogc3RydWN0IHBhZGRpbmcgaW4gdGhlIGJs YXN0IHJhZGl1cy4gQnV0IHNpbmNlIHRoaXMgQVBJIGhhcyB0bworCQkgKiBwb2lzb24gc3RhY2sg YWRkcmVzc2VzLCBhbmQgVmFsZ3JpbmQgY2FuJ3QgdHJhY2svbWFuYWdlIHVuZGVmaW5lZAorCQkg KiBzdGFjayByZWdpb25zLCB3ZSBjYW4ndCBiZSBhbnkgc3RyaWN0ZXIgd2l0aG91dCB0cmFja2lu ZyB0aGUKKwkJICogb3JpZ2luYWwgc3RhdGUgb2YgdGhlIG1lbW9yeS4KKwkJICovCisJCVZBTEdS SU5EX01BS0VfTUVNX0RFRklORUQoYmFzZSwgbGVuKTsKKworCQkvKiBVbmRvIG91ciBtYXNrLiAq LworCQlyZXF1ZXN0LT5pc3N1ZXIgPSBQT0lTT05fTUFTSyhyZXF1ZXN0LT5pc3N1ZXIpOworCisJ CS8qCisJCSAqIEZvciB1bmluc3RydW1lbnRlZCBidWlsZHMsIG1ha2Ugc3VyZSByZXF1ZXN0LT5l cnJvciB3YXNuJ3QgdG91Y2hlZC4KKwkJICovCisJCWlmIChyZXF1ZXN0LT5lcnJvcikKKwkJewor CQkJZnByaW50ZihzdGRlcnIsCisJCQkJCSJhYm9ydCEgb3V0LW9mLWJvdW5kcyB3cml0ZSB0byBQ R29hdXRoQmVhcmVyUmVxdWVzdCBieSBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTiBob29r XG4iKTsKKwkJCWFib3J0KCk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBXcmFwcGVyIGFyb3VuZCBQ R29hdXRoQmVhcmVyUmVxdWVzdC5hc3luYygpIHdoaWNoIGFwcGxpZXMgcG9pc29uIGR1cmluZyB0 aGUKKyAqIGNhbGxiYWNrIHdoZW4gbmVjZXNzYXJ5LgorICovCitzdGF0aWMgaW50Citkb19hc3lu YyhmZV9vYXV0aF9zdGF0ZSAqc3RhdGUsIFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcXVlc3Qp Cit7CisJUEdjb25uCSAgICpjb25uID0gc3RhdGUtPmNvbm47CisJaW50CQkJcmV0OworCisJQXNz ZXJ0KHJlcXVlc3QtPnYxLmFzeW5jKTsKKworCWlmIChzdGF0ZS0+djEpCisJCXBvaXNvbl9yZXFf djIocmVxdWVzdCwgdHJ1ZSk7CisKKwlyZXQgPSByZXF1ZXN0LT52MS5hc3luYyhjb25uLAorCQkJ CQkJCShQR29hdXRoQmVhcmVyUmVxdWVzdCAqKSByZXF1ZXN0LAorCQkJCQkJCSZjb25uLT5hbHRz b2NrKTsKKworCWlmIChzdGF0ZS0+djEpCisJCXBvaXNvbl9yZXFfdjIocmVxdWVzdCwgZmFsc2Up OworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFNpbWlsYXIgd3JhcHBlciBmb3IgdGhlIG9w dGlvbmFsIFBHb2F1dGhCZWFyZXJSZXF1ZXN0LmNsZWFudXAoKSBjYWxsYmFjay4KKyAqIERvZXMg bm90aGluZyBpZiBvbmUgaXMgbm90IGRlZmluZWQuCisgKi8KK3N0YXRpYyB2b2lkCitkb19jbGVh bnVwKGZlX29hdXRoX3N0YXRlICpzdGF0ZSwgUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVxdWVz dCkKK3sKKwlpZiAoIXJlcXVlc3QtPnYxLmNsZWFudXApCisJCXJldHVybjsKKworCWlmIChzdGF0 ZS0+djEpCisJCXBvaXNvbl9yZXFfdjIocmVxdWVzdCwgdHJ1ZSk7CisKKwlyZXF1ZXN0LT52MS5j bGVhbnVwKHN0YXRlLT5jb25uLCAoUEdvYXV0aEJlYXJlclJlcXVlc3QgKikgcmVxdWVzdCk7CisK KwlpZiAoc3RhdGUtPnYxKQorCQlwb2lzb25fcmVxX3YyKHJlcXVlc3QsIGZhbHNlKTsKK30KLS0g CjIuMzQuMQoK --000000000000545e04064c5089cb Content-Type: application/octet-stream; name="v6-0005-WIP-Introduce-third-party-OAuth-flow-plugins.patch" Content-Disposition: attachment; filename="v6-0005-WIP-Introduce-third-party-OAuth-flow-plugins.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mme6hp7z5 RnJvbSBmYmI4OWJjZDk4MDlmMzQ2OTYxYjIxMTRjMzBjNDBiMWQ3N2FlODg0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogV2VkLCAzIERlYyAyMDI1IDE1OjQ3OjIzIC0wODAwClN1YmplY3Q6 IFtQQVRDSCB2NiA1LzVdIFdJUDogSW50cm9kdWNlIHRoaXJkLXBhcnR5IE9BdXRoIGZsb3cgcGx1 Z2lucz8KCltOb3QgaW50ZW5kZWQgZm9yIFBHMTkuXQoKVGhpcyBleHBlcmltZW50YWwgY29tbWl0 IHByb21vdGVzIHRoZSBwZ19zdGFydF9vYXV0aGJlYXJlciBBUEkgdG8gYQpwdWJsaWMgaGVhZGVy IChsaWJwcS1vYXV0aC5oKSBhbmQgYWRkcyBhIFBHT0FVVEhNT0RVTEUgZW52aXJvbm1lbnQKdmFy aWFibGUgdGhhdCBvdmVycmlkZXMgdGhlIGxvYWQgcGF0aCBmb3IgdGhlIHBsdWdpbiwgYWxsb3dp bmcgdXNlcnMgdG8KcHJvdmlkZSB0aGVpciBvd24uIFRoZSBsaWJwcV9vYXV0aF9pbml0IGZ1bmN0 aW9uIGlzIG5vdyBvcHRpb25hbCwgYW5kCndpbGwgcmVtYWluIHVuZG9jdW1lbnRlZC4gKE1vZHVs ZXMgdGhhdCBkb24ndCBwcm92aWRlIGl0IGFyZSBtYXJrZWQgYXMKdXNlci1kZWZpbmVkLikKClRo aXMgaXMgYSByZWxhdGl2ZWx5IHNtYWxsIGFtb3VudCBvZiBpbXBsZW1lbnRhdGlvbiBjaGFuZ2Us IGJ1dAp1bmZvcnR1bmF0ZWx5IHRoZSB0ZXN0cyBoYXZlIGEgbGFyZ2UgYW1vdW50IG9mIGNvZGUg bW90aW9uIHRvIGJlIGFibGUgdG8Kc2hhcmUgbG9naWMgYmV0d2VlbiB0aGUgdGVzdCBleGVjdXRh YmxlIGFuZCBwbHVnaW4uIEkgbWlnaHQgbmVlZCB0bwpzcGxpdCB0aGF0IGludG8gbXVsdGlwbGUg c3F1YXNoISBjb21taXRzIHRvIG1ha2UgaXQgbW9yZSBlYXNpbHkKcmV2aWV3YWJsZS4KClRPRE86 IGZpZ3VyZSBvdXQgUEdETExFWFBPUlQsIHdoaWNoIHdlIGRvIG5vdCBjdXJyZW50bHkgcHJvdmlk ZSBwdWJsaWNseQpUT0RPOiBsb2NrIGRvd24gUEdPQVVUSE1PRFVMRSBhcyBuZWNlc3NhcnkgdG8g YXZvaWQgaW50cm9kdWNpbmcgZXhjaXRpbmcKICAgICAgbmV3IHZ1bG5lcmFiaWxpdGllcwpUT0RP OiBob3cgaGFyZCB3b3VsZCBpdCBiZSB0byBzdXBwb3J0IFdpbmRvd3MgaGVyZT8KClJldmlld2Vk LWJ5OiBac29sdCBQYXJyYWdpIDx6c29sdC5wYXJyYWdpQHBlcmNvbmEuY29tPgpEaXNjdXNzaW9u OiBodHRwczovL3Bvc3Rnci5lcy9tL0NBT1ltaSUyQm1yR2clMkJuX1gyTU9MZ2VXY2ozdl9NMDBn Ujh1el9EN21NOHolM0RkWDFKWVZiZyU0MG1haWwuZ21haWwuY29tCi0tLQogc3JjL2ludGVyZmFj ZXMvbGlicHEvbWVzb24uYnVpbGQgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbnRlcmZhY2Vz L2xpYnBxL01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvaW50ZXJmYWNlcy9s aWJwcS1vYXV0aC9vYXV0aC1jdXJsLmggICAgICAgfCAgMjQgLS0KIHNyYy9pbnRlcmZhY2VzL2xp YnBxL2ZlLWF1dGgtb2F1dGguaCAgICAgICAgICB8ICAgMiArLQogc3JjL2ludGVyZmFjZXMvbGli cHEvbGlicHEtb2F1dGguaCAgICAgICAgICAgIHwgIDUyICsrKwogc3JjL2ludGVyZmFjZXMvbGli cHEtb2F1dGgvb2F1dGgtY3VybC5jICAgICAgIHwgICAyICstCiBzcmMvaW50ZXJmYWNlcy9saWJw cS9mZS1hdXRoLW9hdXRoLmMgICAgICAgICAgfCAxMjYgKysrKy0tCiBzcmMvdGVzdC9tb2R1bGVz L29hdXRoX3ZhbGlkYXRvci9tZXNvbi5idWlsZCAgfCAgMTUgKwogc3JjL3Rlc3QvbW9kdWxlcy9v YXV0aF92YWxpZGF0b3IvTWFrZWZpbGUgICAgIHwgIDEyICstCiAuLi4vb2F1dGhfdmFsaWRhdG9y L29hdXRoX3Rlc3RfY29tbW9uLmggICAgICAgfCAgMjYgKysKIHNyYy90ZXN0L21vZHVsZXMvb2F1 dGhfdmFsaWRhdG9yL29hdXRoX2Zsb3cuYyB8ICA3MiArKysrCiAuLi4vb2F1dGhfdmFsaWRhdG9y L29hdXRoX2hvb2tfY2xpZW50LmMgICAgICAgfCAzMTggKy0tLS0tLS0tLS0tLS0tCiAuLi4vb2F1 dGhfdmFsaWRhdG9yL29hdXRoX3Rlc3RfY29tbW9uLmMgICAgICAgfCAzNzMgKysrKysrKysrKysr KysrKysrCiAuLi4vbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvdC8wMDJfY2xpZW50LnBsICAgfCAg NTcgKystCiAxNCBmaWxlcyBjaGFuZ2VkLCA2OTYgaW5zZXJ0aW9ucygrKSwgMzg2IGRlbGV0aW9u cygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRo LWN1cmwuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLW9h dXRoLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRv ci9vYXV0aF90ZXN0X2NvbW1vbi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxl cy9vYXV0aF92YWxpZGF0b3Ivb2F1dGhfZmxvdy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rl c3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Ivb2F1dGhfdGVzdF9jb21tb24uYwoKZGlmZiAtLWdp dCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL21lc29uLmJ1aWxkIGIvc3JjL2ludGVyZmFjZXMvbGli cHEvbWVzb24uYnVpbGQKaW5kZXggYjBhZTcyMTY3YTEuLjRlYjAyOWNjMmE2IDEwMDY0NAotLS0g YS9zcmMvaW50ZXJmYWNlcy9saWJwcS9tZXNvbi5idWlsZAorKysgYi9zcmMvaW50ZXJmYWNlcy9s aWJwcS9tZXNvbi5idWlsZApAQCAtMTM1LDYgKzEzNSw3IEBAIHBrZ2NvbmZpZy5nZW5lcmF0ZSgK IGluc3RhbGxfaGVhZGVycygKICAgJ2xpYnBxLWZlLmgnLAogICAnbGlicHEtZXZlbnRzLmgnLAor ICAnbGlicHEtb2F1dGguaCcsCiApCiAKIGluc3RhbGxfaGVhZGVycygKZGlmZiAtLWdpdCBhL3Ny Yy9pbnRlcmZhY2VzL2xpYnBxL01ha2VmaWxlIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvTWFrZWZp bGUKaW5kZXggMDk2Mzk5NWVlZDQuLmE2NWMzNmE2M2ZkIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJm YWNlcy9saWJwcS9NYWtlZmlsZQorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9NYWtlZmlsZQpA QCAtMTU3LDYgKzE1Nyw3IEBAICQodG9wX2J1aWxkZGlyKS9zcmMvcG9ydC9wZ19jb25maWdfcGF0 aHMuaDoKIGluc3RhbGw6IGFsbCBpbnN0YWxsZGlycyBpbnN0YWxsLWxpYgogCSQoSU5TVEFMTF9E QVRBKSAkKHNyY2RpcikvbGlicHEtZmUuaCAnJChERVNURElSKSQoaW5jbHVkZWRpciknCiAJJChJ TlNUQUxMX0RBVEEpICQoc3JjZGlyKS9saWJwcS1ldmVudHMuaCAnJChERVNURElSKSQoaW5jbHVk ZWRpciknCisJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9saWJwcS1vYXV0aC5oICckKERFU1RE SVIpJChpbmNsdWRlZGlyKScKIAkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2xpYnBxLWludC5o ICckKERFU1RESVIpJChpbmNsdWRlZGlyX2ludGVybmFsKScKIAkkKElOU1RBTExfREFUQSkgJChz cmNkaXIpL2ZlLWF1dGgtc2FzbC5oICckKERFU1RESVIpJChpbmNsdWRlZGlyX2ludGVybmFsKScK IAkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL3BxZXhwYnVmZmVyLmggJyQoREVTVERJUikkKGlu Y2x1ZGVkaXJfaW50ZXJuYWwpJwpAQCAtMTc5LDYgKzE4MCw3IEBAIGluc3RhbGxkaXJzOiBpbnN0 YWxsZGlycy1saWIKIHVuaW5zdGFsbDogdW5pbnN0YWxsLWxpYgogCXJtIC1mICckKERFU1RESVIp JChpbmNsdWRlZGlyKS9saWJwcS1mZS5oJwogCXJtIC1mICckKERFU1RESVIpJChpbmNsdWRlZGly KS9saWJwcS1ldmVudHMuaCcKKwlybSAtZiAnJChERVNURElSKSQoaW5jbHVkZWRpcikvbGlicHEt b2F1dGguaCcKIAlybSAtZiAnJChERVNURElSKSQoaW5jbHVkZWRpcl9pbnRlcm5hbCkvbGlicHEt aW50LmgnCiAJcm0gLWYgJyQoREVTVERJUikkKGluY2x1ZGVkaXJfaW50ZXJuYWwpL2ZlLWF1dGgt c2FzbC5oJwogCXJtIC1mICckKERFU1RESVIpJChpbmNsdWRlZGlyX2ludGVybmFsKS9wcWV4cGJ1 ZmZlci5oJwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3Vy bC5oIGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5oCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAxZDRkZDc2NjIxNy4uMDAwMDAwMDAwMDAKLS0tIGEvc3JjL2lu dGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQg KzAsMCBAQAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogb2F1dGgtY3VybC5oCi0gKgotICoJ ICBEZWZpbml0aW9ucyBmb3IgT0F1dGggRGV2aWNlIEF1dGhvcml6YXRpb24gbW9kdWxlCi0gKgot ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMg b2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQotICoKLSAqIHNyYy9pbnRlcmZhY2VzL2xp YnBxLW9hdXRoL29hdXRoLWN1cmwuaAotICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLSNp Zm5kZWYgT0FVVEhfQ1VSTF9ICi0jZGVmaW5lIE9BVVRIX0NVUkxfSAotCi0jaW5jbHVkZSAibGli cHEtZmUuaCIKLQotLyogRXhwb3J0ZWQgZmxvdyBjYWxsYmFjay4gKi8KLWV4dGVybiBQR0RMTEVY UE9SVCBpbnQgcGdfc3RhcnRfb2F1dGhiZWFyZXIoUEdjb25uICpjb25uLAotCQkJCQkJCQkJCQlQ R29hdXRoQmVhcmVyUmVxdWVzdFYyICpyZXF1ZXN0KTsKLQotI2VuZGlmCQkJCQkJCS8qIE9BVVRI X0NVUkxfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1vYXV0 aC5oIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1vYXV0aC5oCmluZGV4IDJiMjJkMjNm ZmRlLi44NzJmNWRmNTUxYSAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0 aC1vYXV0aC5oCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguaApAQCAt MzYsNyArMzYsNyBAQCB0eXBlZGVmIHN0cnVjdAogCiAJYm9vbAkJdjE7CiAJYm9vbAkJYnVpbHRp bjsKLQl2b2lkCSAgICpidWlsdGluX2Zsb3c7CisJdm9pZAkgICAqZmxvd19tb2R1bGU7CiB9IGZl X29hdXRoX3N0YXRlOwogCiBleHRlcm4gdm9pZCBwcUNsZWFyT0F1dGhUb2tlbihQR2Nvbm4gKmNv bm4pOwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtb2F1dGguaCBiL3Ny Yy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLW9hdXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjJhNjJiMzMwYjFjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2ludGVy ZmFjZXMvbGlicHEvbGlicHEtb2F1dGguaApAQCAtMCwwICsxLDUyIEBACisvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqCisgKiBsaWJwcS1vYXV0aC5oCisgKgkgIFRoaXMgZmlsZSBjb250YWlucyBzdHJ1 Y3RzIGFuZCBmdW5jdGlvbnMgdXNlZCBieSBjdXN0b20gT0F1dGggcGx1Z2lucy4KKyAqCisgKiBD b3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KgorICogc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtb2F1dGguaAorICoKKyAqLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICovCisKKyNpZm5kZWYgTElCUFFfT0FVVEhfSAorI2RlZmluZSBMSUJQUV9PQVVU SF9ICisKKyNpbmNsdWRlICJsaWJwcS1mZS5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVy biAiQyIKK3sKKyNlbmRpZgorCisvKiBYWFggY2FuJ3QgcmVseSBvbiBjLmgsIGJ1dCBkdXBsaWNh dGluZyB0aGlzIGlzIGFza2luZyBmb3IgdHJvdWJsZSAqLworI2lmbmRlZiBQR0RMTEVYUE9SVAor I2lmZGVmIF9XSU4zMgorI2RlZmluZSBQR0RMTEVYUE9SVCBfX2RlY2xzcGVjIChkbGxleHBvcnQp CisjZWxpZiBkZWZpbmVkKF9faGFzX2F0dHJpYnV0ZSkKKyNpZiBfX2hhc19hdHRyaWJ1dGUodmlz aWJpbGl0eSkKKyNkZWZpbmUgUEdETExFWFBPUlQgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgi ZGVmYXVsdCIpKSkKKyNlbHNlCisjZGVmaW5lIFBHRExMRVhQT1JUCisjZW5kaWYKKyNlbHNlCisj ZGVmaW5lIFBHRExMRVhQT1JUCisjZW5kaWYKKyNlbmRpZgorCisvKgorICogVjEgQVBJCisgKgor ICogRmxvdyBwbHVnaW5zIG11c3QgcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGNh bGxiYWNrLgorICoKKyAqIFRPRE86IHByb3ZpZGUgYSBtYWdpYyBzdHJ1Y3QgdGhhdCBhbGxvd3Mg YmFja3dhcmRzIGJ1dCBub3QgZm9yd2FyZHMgY29tcGF0PworICovCitleHRlcm4gUEdETExFWFBP UlQgaW50IHBnX3N0YXJ0X29hdXRoYmVhcmVyKFBHY29ubiAqY29ubiwKKwkJCQkJCQkJCQkJUEdv YXV0aEJlYXJlclJlcXVlc3RWMiAqcmVxdWVzdCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQor I2VuZGlmCisKKyNlbmRpZgkJCQkJCQkvKiBMSUJQUV9PQVVUSF9IICovCmRpZmYgLS1naXQgYS9z cmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmMgYi9zcmMvaW50ZXJmYWNlcy9s aWJwcS1vYXV0aC9vYXV0aC1jdXJsLmMKaW5kZXggMDUyZWNkMzJkYTIuLjQwMGNhMDdjMjk3IDEw MDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmMKKysrIGIv c3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5jCkBAIC0yOSw4ICsyOSw4IEBA CiAjZW5kaWYKIAogI2luY2x1ZGUgImNvbW1vbi9qc29uYXBpLmgiCisjaW5jbHVkZSAibGlicHEt b2F1dGguaCIKICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgotI2luY2x1ZGUgIm9hdXRoLWN1cmwu aCIKIAogI2lmZGVmIFVTRV9EWU5BTUlDX09BVVRICiAKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZh Y2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgt b2F1dGguYwppbmRleCA4MDNjMWRjNDMwZi4uZTFjOGYyY2EzMzAgMTAwNjQ0Ci0tLSBhL3NyYy9p bnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguYworKysgYi9zcmMvaW50ZXJmYWNlcy9saWJw cS9mZS1hdXRoLW9hdXRoLmMKQEAgLTE3LDYgKzE3LDggQEAKIAogI2lmZGVmIFVTRV9EWU5BTUlD X09BVVRICiAjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbHNlCisjaW5jbHVkZSAibGlicHEtb2F1dGgu aCIKICNlbmRpZgogCiAjaW5jbHVkZSAiY29tbW9uL2Jhc2U2NC5oIgpAQCAtODgyLDQxICs4ODQs NjggQEAgdXNlX2J1aWx0aW5fZmxvdyhQR2Nvbm4gKmNvbm4sIGZlX29hdXRoX3N0YXRlICpzdGF0 ZSwgUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmUKIAkgKiBPbiB0aGUgb3RoZXIgcGxhdGZvcm1z LCBsb2FkIHRoZSBtb2R1bGUgdXNpbmcgb25seSB0aGUgYmFzZW5hbWUsIHRvCiAJICogcmVseSBv biB0aGUgcnVudGltZSBsaW5rZXIncyBzdGFuZGFyZCBzZWFyY2ggYmVoYXZpb3IuCiAJICovCi0J Y29uc3QgY2hhciAqY29uc3QgbW9kdWxlX25hbWUgPQorCWNvbnN0IGNoYXIgKm1vZHVsZV9uYW1l ID0KICNpZiBkZWZpbmVkKF9fZGFyd2luX18pCiAJCUxJQkRJUiAiL2xpYnBxLW9hdXRoIiBETFNV RkZJWDsKICNlbHNlCiAJCSJsaWJwcS1vYXV0aCIgRExTVUZGSVg7CiAjZW5kaWYKIAotCXN0YXRl LT5idWlsdGluX2Zsb3cgPSBkbG9wZW4obW9kdWxlX25hbWUsIFJUTERfTk9XIHwgUlRMRF9MT0NB TCk7Ci0JaWYgKCFzdGF0ZS0+YnVpbHRpbl9mbG93KQorCS8qLQorCSAqIEFkZGl0aW9uYWxseSwg dGhlIHVzZXIgbWF5IG92ZXJyaWRlIHRoZSBtb2R1bGUgcGF0aCBleHBsaWNpdGx5IHRvIGJlCisJ ICogYWJsZSB0byBwcm92aWRlIHRoZWlyIG93biBtb2R1bGUsIHZpYSBQR09BVVRITU9EVUxFLgor CSAqCisJICogVE9ETzogaGF2ZSB0byB0aGluayBhYm91dCBfYWxsXyB0aGUgc2VjdXJpdHkgcmFt aWZpY2F0aW9ucyBvZiB0aGlzLiBXaGF0CisJICogZXhpc3RpbmcgcHJvdGVjdGlvbnMgaW4gTERf TElCUkFSWV9QQVRIIChhbmQvb3IgU0lQKSBhcmUgd2UgcG90ZW50aWFsbHkKKwkgKiBieXBhc3Np bmc/IFNob3VsZCB3ZSBjaGVjayB0aGUgcGVybWlzc2lvbnMgb2YgdGhlIGZpbGUgc29tZWhvdy4u Lj8KKwkgKiBUT0RPOiBtYXliZSBkaXNhbGxvdyBhbnl0aGluZyBub3QgdW5kZXJuZWF0aCBMSUJE SVI/IG9yIFBLR0xJQkRJUj8KKwkgKiBTaG91bGQgaXQgaGF2ZSBhIG5hbWluZyBjb252ZW50aW9u PworCSAqLworCWNvbnN0IGNoYXIgKmVudiA9IGdldGVudigiUEdPQVVUSE1PRFVMRSIpOworCisJ aWYgKGVudiAmJiBlbnZbMF0pCisJCW1vZHVsZV9uYW1lID0gZW52OworCWVsc2UKKwkJc3RhdGUt PmJ1aWx0aW4gPSB0cnVlOworCisJc3RhdGUtPmZsb3dfbW9kdWxlID0gZGxvcGVuKG1vZHVsZV9u YW1lLCBSVExEX05PVyB8IFJUTERfTE9DQUwpOworCWlmICghc3RhdGUtPmZsb3dfbW9kdWxlKQog CXsKIAkJLyoKIAkJICogRm9yIGVuZCB1c2VycywgdGhpcyBwcm9iYWJseSBpc24ndCBhbiBlcnJv ciBjb25kaXRpb24sIGl0IGp1c3QKIAkJICogbWVhbnMgdGhlIGZsb3cgaXNuJ3QgaW5zdGFsbGVk LiBEZXZlbG9wZXJzIGFuZCBwYWNrYWdlIG1haW50YWluZXJzCi0JCSAqIG1heSB3YW50IHRvIGRl YnVnIHRoaXMgdmlhIHRoZSBQR09BVVRIREVCVUcgZW52dmFyLCB0aG91Z2guCisJCSAqIG1heSB3 YW50IHRvIGRlYnVnIHRoaXMgdmlhIHRoZSBQR09BVVRIREVCVUcgZW52dmFyLCB0aG91Z2gsIGFu ZCB3ZQorCQkgKiBzaG91bGQgYmUgbW9yZSBub2lzeSBpZiB1c2VycyB0cmllZCB0byBwcm92aWRl IGEgUEdPQVVUSE1PRFVMRS4KIAkJICoKIAkJICogTm90ZSB0aGF0IFBPU0lYIGRsZXJyb3IoKSBp c24ndCBndWFyYW50ZWVkIHRvIGJlIHRocmVhZHNhZmUuCiAJCSAqLwogCQlpZiAob2F1dGhfdW5z YWZlX2RlYnVnZ2luZ19lbmFibGVkKCkpCi0JCQlmcHJpbnRmKHN0ZGVyciwgImZhaWxlZCBkbG9w ZW4gZm9yIGxpYnBxLW9hdXRoOiAlc1xuIiwgZGxlcnJvcigpKTsKKwkJCWZwcmludGYoc3RkZXJy LCAiZmFpbGVkIGRsb3BlbiBmb3IgJXM6ICVzXG4iLCBtb2R1bGVfbmFtZSwgZGxlcnJvcigpKTsK KworCQlpZiAoc3RhdGUtPmJ1aWx0aW4pCisJCQlyZXR1cm4gMDsKIAotCQlyZXR1cm4gMDsKKwkJ cmVxdWVzdC0+ZXJyb3IgPSBsaWJwcV9nZXR0ZXh0KCJwbHVnaW4gY291bGQgbm90IGJlIGxvYWRl ZCIpOworCQlyZXR1cm4gLTE7CiAJfQogCi0JaWYgKChpbml0ID0gZGxzeW0oc3RhdGUtPmJ1aWx0 aW5fZmxvdywgImxpYnBxX29hdXRoX2luaXQiKSkgPT0gTlVMTAotCQl8fCAoc3RhcnRfZmxvdyA9 IGRsc3ltKHN0YXRlLT5idWlsdGluX2Zsb3csICJwZ19zdGFydF9vYXV0aGJlYXJlciIpKSA9PSBO VUxMKQorCWlmICgoc3RhcnRfZmxvdyA9IGRsc3ltKHN0YXRlLT5mbG93X21vZHVsZSwgInBnX3N0 YXJ0X29hdXRoYmVhcmVyIikpID09IE5VTEwpCiAJewogCQkvKgogCQkgKiBUaGlzIGlzIG1vcmUg b2YgYW4gZXJyb3IgY29uZGl0aW9uIHRoYW4gdGhlIG9uZSBhYm92ZSwgYnV0IGR1ZSB0bwogCQkg KiB0aGUgZGxlcnJvcigpIHRocmVhZHNhZmV0eSBpc3N1ZSwgbG9jayBpdCBiZWhpbmQgUEdPQVVU SERFQlVHIHRvby4KIAkJICovCiAJCWlmIChvYXV0aF91bnNhZmVfZGVidWdnaW5nX2VuYWJsZWQo KSkKLQkJCWZwcmludGYoc3RkZXJyLCAiZmFpbGVkIGRsc3ltIGZvciBsaWJwcS1vYXV0aDogJXNc biIsIGRsZXJyb3IoKSk7CisJCQlmcHJpbnRmKHN0ZGVyciwgImZhaWxlZCBkbHN5bSBmb3IgJXM6 ICVzXG4iLCBtb2R1bGVfbmFtZSwgZGxlcnJvcigpKTsKKworCQlkbGNsb3NlKHN0YXRlLT5mbG93 X21vZHVsZSk7CisJCXN0YXRlLT5mbG93X21vZHVsZSA9IE5VTEw7CisKKwkJaWYgKHN0YXRlLT5i dWlsdGluKQorCQkJcmV0dXJuIDA7CiAKLQkJZGxjbG9zZShzdGF0ZS0+YnVpbHRpbl9mbG93KTsK LQkJcmV0dXJuIDA7CisJCXJlcXVlc3QtPmVycm9yID0gbGlicHFfZ2V0dGV4dCgicGx1Z2luIGVu dHJ5IHBvaW50IGNvdWxkIG5vdCBiZSBsb2NhdGVkIik7CisJCXJldHVybiAtMTsKIAl9CiAKIAkv KgpAQCAtOTI1LDM0ICs5NTQsNTAgQEAgdXNlX2J1aWx0aW5fZmxvdyhQR2Nvbm4gKmNvbm4sIGZl X29hdXRoX3N0YXRlICpzdGF0ZSwgUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmUKIAkgKi8KIAog CS8qCi0JICogV2UgbmVlZCB0byBpbmplY3QgbmVjZXNzYXJ5IGZ1bmN0aW9uIHBvaW50ZXJzIGlu dG8gdGhlIG1vZHVsZS4gVGhpcwotCSAqIG9ubHkgbmVlZHMgdG8gYmUgZG9uZSBvbmNlIC0tIGV2 ZW4gaWYgdGhlIHBvaW50ZXJzIGFyZSBjb25zdGFudCwKLQkgKiBhc3NpZ25pbmcgdGhlbSB3aGls ZSBhbm90aGVyIHRocmVhZCBpcyBleGVjdXRpbmcgdGhlIGZsb3dzIGZlZWxzIGxpa2UKLQkgKiB0 ZW1wdGluZyBmYXRlLgorCSAqIE91ciBsaWJwcS1vYXV0aC5zbyBwcm92aWRlcyBhIHNwZWNpYWwg aW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIGxpYnBxCisJICogaW50ZWdyYXRpb24uIEl0J3Mg bm90IGEgcHJvYmxlbSBpZiB3ZSBkb24ndCBmaW5kIHRoaXM7IGl0IGp1c3QgbWVhbnMKKwkgKiB0 aGF0IGEgdXNlci1kZWZpbmVkIG1vZHVsZSBpcyBiZWluZyB1c2VkLgogCSAqLwotCWlmICgobG9j a2VyciA9IHB0aHJlYWRfbXV0ZXhfbG9jaygmaW5pdF9tdXRleCkpICE9IDApCisJaW5pdCA9IGRs c3ltKHN0YXRlLT5mbG93X21vZHVsZSwgImxpYnBxX29hdXRoX2luaXQiKTsKKworCWlmICghaW5p dCkKKwkJc3RhdGUtPmJ1aWx0aW4gPSBmYWxzZTsgLyogYWRqdXN0IG91ciBlcnJvciBtZXNzYWdl cyAqLworCWVsc2UKIAl7Ci0JCS8qIFNob3VsZCBub3QgaGFwcGVuLi4uIGJ1dCBkb24ndCBjb250 aW51ZSBpZiBpdCBkb2VzLiAqLwotCQlBc3NlcnQoZmFsc2UpOworCQkvKgorCQkgKiBXZSBuZWVk IHRvIGluamVjdCBuZWNlc3NhcnkgZnVuY3Rpb24gcG9pbnRlcnMgaW50byB0aGUgbW9kdWxlLiBU aGlzCisJCSAqIG9ubHkgbmVlZHMgdG8gYmUgZG9uZSBvbmNlIC0tIGV2ZW4gaWYgdGhlIHBvaW50 ZXJzIGFyZSBjb25zdGFudCwKKwkJICogYXNzaWduaW5nIHRoZW0gd2hpbGUgYW5vdGhlciB0aHJl YWQgaXMgZXhlY3V0aW5nIHRoZSBmbG93cyBmZWVscworCQkgKiBsaWtlIHRlbXB0aW5nIGZhdGUu CisJCSAqLworCQlpZiAoKGxvY2tlcnIgPSBwdGhyZWFkX211dGV4X2xvY2soJmluaXRfbXV0ZXgp KSAhPSAwKQorCQl7CisJCQkvKiBTaG91bGQgbm90IGhhcHBlbi4uLiBidXQgZG9uJ3QgY29udGlu dWUgaWYgaXQgZG9lcy4gKi8KKwkJCUFzc2VydChmYWxzZSk7CiAKLQkJbGlicHFfYXBwZW5kX2Nv bm5fZXJyb3IoY29ubiwgImZhaWxlZCB0byBsb2NrIG11dGV4ICglZCkiLCBsb2NrZXJyKTsKLQkJ cmV0dXJuIDA7Ci0JfQorCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwK KwkJCQkJCQkgICJ1c2VfYnVpbHRpbl9mbG93OiBmYWlsZWQgdG8gbG9jayBtdXRleCAoJWQpXG4i LAorCQkJCQkJCSAgbG9ja2Vycik7CiAKLQlpZiAoIWluaXRpYWxpemVkKQotCXsKLQkJaW5pdCgK KwkJCXJlcXVlc3QtPmVycm9yID0gIiI7CS8qIHNhdGlzZnkgcmVwb3J0X2Zsb3dfZXJyb3IoKSAq LworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKCFpbml0aWFsaXplZCkKKwkJeworCQkJaW5p dCgKICNpZmRlZiBFTkFCTEVfTkxTCi0JCQkgbGlicHFfZ2V0dGV4dAorCQkJCSBsaWJwcV9nZXR0 ZXh0CiAjZWxzZQotCQkJIE5VTEwKKwkJCQkgTlVMTAogI2VuZGlmCi0JCQkpOworCQkJCSk7CiAK LQkJaW5pdGlhbGl6ZWQgPSB0cnVlOwotCX0KKwkJCWluaXRpYWxpemVkID0gdHJ1ZTsKKwkJfQog Ci0JcHRocmVhZF9tdXRleF91bmxvY2soJmluaXRfbXV0ZXgpOworCQlwdGhyZWFkX211dGV4X3Vu bG9jaygmaW5pdF9tdXRleCk7CisJfQogCiAJcmV0dXJuIChzdGFydF9mbG93KGNvbm4sIHJlcXVl c3QpID09IDApID8gMSA6IC0xOwogfQpAQCAtOTY5LDYgKzEwMTQsNyBAQCBleHRlcm4gaW50CXBn X3N0YXJ0X29hdXRoYmVhcmVyKFBHY29ubiAqY29ubiwgUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAq cmVxdWVzdCk7CiBzdGF0aWMgaW50CiB1c2VfYnVpbHRpbl9mbG93KFBHY29ubiAqY29ubiwgZmVf b2F1dGhfc3RhdGUgKnN0YXRlLCBQR29hdXRoQmVhcmVyUmVxdWVzdFYyICpyZXF1ZXN0KQogewor CXN0YXRlLT5idWlsdGluID0gdHJ1ZTsKIAlyZXR1cm4gKHBnX3N0YXJ0X29hdXRoYmVhcmVyKGNv bm4sIHJlcXVlc3QpID09IDApID8gMSA6IC0xOwogfQogCkBAIC0xMDIyLDEwICsxMDY4LDcgQEAg c2V0dXBfdG9rZW5fcmVxdWVzdChQR2Nvbm4gKmNvbm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSkK IAkJcG9pc29uX3JlcV92MigmcmVxdWVzdCwgZmFsc2UpOwogCX0KIAlpZiAocmVzID09IDApCi0J ewotCQlzdGF0ZS0+YnVpbHRpbiA9IHRydWU7CiAJCXJlcyA9IHVzZV9idWlsdGluX2Zsb3coY29u biwgc3RhdGUsICZyZXF1ZXN0KTsKLQl9CiAKIAlpZiAocmVzID4gMCkKIAl7CkBAIC0xMDYyLDE5 ICsxMTA1LDE4IEBAIHNldHVwX3Rva2VuX3JlcXVlc3QoUEdjb25uICpjb25uLCBmZV9vYXV0aF9z dGF0ZSAqc3RhdGUpCiAJCWNvbm4tPmFzeW5jX2F1dGggPSBydW5fb2F1dGhfZmxvdzsKIAkJY29u bi0+Y2xlYW51cF9hc3luY19hdXRoID0gY2xlYW51cF9vYXV0aF9mbG93OwogCQlzdGF0ZS0+YXN5 bmNfY3R4ID0gcmVxdWVzdF9jb3B5OworCisJCXJldHVybiB0cnVlOwogCX0KLQllbHNlIGlmIChy ZXMgPCAwKQotCXsKKworCS8qCisJICogRmFpbHVyZSBjYXNlczogZWl0aGVyIHdlIHRyaWVkIHRv IHNldCB1cCBhIGZsb3cgYW5kIGZhaWxlZCwgb3IgdGhlcmUKKwkgKiB3YXMgbm8gZmxvdyB0byB0 cnkuCisJICovCisJaWYgKHJlcyA8IDApCiAJCXJlcG9ydF9mbG93X2Vycm9yKGNvbm4sICZyZXF1 ZXN0KTsKLQkJZ290byBmYWlsOwotCX0KIAllbHNlCi0JewogCQlsaWJwcV9hcHBlbmRfY29ubl9l cnJvcihjb25uLCAibm8gT0F1dGggZmxvd3MgYXJlIGF2YWlsYWJsZSAodHJ5IGluc3RhbGxpbmcg dGhlIGxpYnBxLW9hdXRoIHBhY2thZ2UpIik7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQlyZXR1cm4g dHJ1ZTsKIAogZmFpbDoKIAlkb19jbGVhbnVwKHN0YXRlLCAmcmVxdWVzdCk7CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci9tZXNvbi5idWlsZCBiL3NyYy90ZXN0 L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL21lc29uLmJ1aWxkCmluZGV4IDUwNmE5ODk0YjhkLi45 MTU2MDNjYmQyOSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Iv bWVzb24uYnVpbGQKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvbWVzb24u YnVpbGQKQEAgLTUwLDYgKzUwLDcgQEAgdGVzdF9pbnN0YWxsX2xpYnMgKz0gbWFnaWNfdmFsaWRh dG9yCiAKIG9hdXRoX2hvb2tfY2xpZW50X3NvdXJjZXMgPSBmaWxlcygKICAgJ29hdXRoX2hvb2tf Y2xpZW50LmMnLAorICAnb2F1dGhfdGVzdF9jb21tb24uYycsCiApCiAKIGlmIGhvc3Rfc3lzdGVt ID09ICd3aW5kb3dzJwpAQCAtNjcsNiArNjgsMTkgQEAgb2F1dGhfaG9va19jbGllbnQgPSBleGVj dXRhYmxlKCdvYXV0aF9ob29rX2NsaWVudCcsCiApCiB0ZXN0cHJlcF90YXJnZXRzICs9IG9hdXRo X2hvb2tfY2xpZW50CiAKK29hdXRoX2Zsb3cgPSBzaGFyZWRfbW9kdWxlKCdvYXV0aF9mbG93JywK KyAgZmlsZXMoCisgICAgJ29hdXRoX2Zsb3cuYycsCisgICAgJ29hdXRoX3Rlc3RfY29tbW9uLmMn LAorICApLAorICBpbmNsdWRlX2RpcmVjdG9yaWVzOiBbcG9zdGdyZXNfaW5jXSwKKyAgZGVwZW5k ZW5jaWVzOiBbZnJvbnRlbmRfc2hsaWJfY29kZSwgbGlicHFdLAorICBrd2FyZ3M6IGRlZmF1bHRf bGliX2FyZ3MgKyB7CisgICAgJ2luc3RhbGwnOiBmYWxzZSwKKyAgfSwKKykKK3Rlc3RwcmVwX3Rh cmdldHMgKz0gb2F1dGhfZmxvdworCiB0ZXN0cyArPSB7CiAgICduYW1lJzogJ29hdXRoX3ZhbGlk YXRvcicsCiAgICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNlX2RpcigpLApAQCAtODEsNiArOTUs NyBAQCB0ZXN0cyArPSB7CiAgICAgICAnd2l0aF9saWJjdXJsJzogb2F1dGhfZmxvd19zdXBwb3J0 ZWQgPyAneWVzJyA6ICdubycsCiAgICAgICAnd2l0aF9weXRob24nOiAneWVzJywKICAgICAgICdj ZXJ0X2Rpcic6IG1lc29uLnByb2plY3Rfc291cmNlX3Jvb3QoKSAvICdzcmMvdGVzdC9zc2wvc3Ns JywKKyAgICAgICdmbG93X21vZHVsZV9wYXRoJzogb2F1dGhfZmxvdy5mdWxsX3BhdGgoKSwKICAg ICB9LAogICAgICdkZXBzJzogW29hdXRoX2hvb2tfY2xpZW50XSwKICAgfSwKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9k dWxlcy9vYXV0aF92YWxpZGF0b3IvTWFrZWZpbGUKaW5kZXggMGIzOWE4OGZkOWYuLjQ4YjMwYWVh MjRmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci9NYWtlZmls ZQorKysgYi9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci9NYWtlZmlsZQpAQCAtMTQs MTEgKzE0LDEzIEBAIFBHRklMRURFU0MgPSAidmFsaWRhdG9yIC0gdGVzdCBPQXV0aCB2YWxpZGF0 b3IgbW9kdWxlIgogCiBQUk9HUkFNID0gb2F1dGhfaG9va19jbGllbnQKIFBHQVBQSUNPTiA9IHdp bjMyCi1PQkpTID0gJChXSU4zMlJFUykgb2F1dGhfaG9va19jbGllbnQubworT0JKUyA9ICQoV0lO MzJSRVMpIG9hdXRoX2hvb2tfY2xpZW50Lm8gb2F1dGhfdGVzdF9jb21tb24ubwogCiBQR19DUFBG TEFHUyA9IC1JJChsaWJwcV9zcmNkaXIpCiBQR19MSUJTX0lOVEVSTkFMICs9ICQobGlicHFfcGdw b3J0KQogCitFWFRSQV9DTEVBTiA9IG9hdXRoX2Zsb3ckKERMU1VGRklYKSBvYXV0aF9mbG93Lm8K KwogTk9fSU5TVEFMTENIRUNLID0gMQogCiBUQVBfVEVTVFMgPSAxCkBAIC0zMyw5ICszNSwxNSBA QCB0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLi8uLgogaW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3Jj L01ha2VmaWxlLmdsb2JhbAogaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbnRyaWIvY29udHJpYi1n bG9iYWwubWsKIAorYWxsOiBvYXV0aF9mbG93JChETFNVRkZJWCkKKworb2F1dGhfZmxvdyQoRExT VUZGSVgpOiBvYXV0aF9mbG93Lm8gb2F1dGhfdGVzdF9jb21tb24ubworCSQoQ0MpICQoQ0ZMQUdT KSAkXiAkKExERkxBR1MpICQobGlicHFfcGdwb3J0X3NobGliKSAkKExERkxBR1NfU0wpIC1zaGFy ZWQgLW8gJEAKKwogZXhwb3J0IFBZVEhPTgogZXhwb3J0IHdpdGhfbGliY3VybAogZXhwb3J0IHdp dGhfcHl0aG9uCi1leHBvcnQgY2VydF9kaXI9JCh0b3Bfc3JjZGlyKS9zcmMvdGVzdC9zc2wvc3Ns CitleHBvcnQgY2VydF9kaXIgOj0gJCh0b3Bfc3JjZGlyKS9zcmMvdGVzdC9zc2wvc3NsCitleHBv cnQgZmxvd19tb2R1bGVfcGF0aCA6PSAkKGFic190b3BfYnVpbGRkaXIpLyQoc3ViZGlyKS9vYXV0 aF9mbG93JChETFNVRkZJWCkKIAogZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMv b2F1dGhfdmFsaWRhdG9yL29hdXRoX3Rlc3RfY29tbW9uLmggYi9zcmMvdGVzdC9tb2R1bGVzL29h dXRoX3ZhbGlkYXRvci9vYXV0aF90ZXN0X2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi4zM2U3MmUzMDQ0MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0 L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL29hdXRoX3Rlc3RfY29tbW9uLmgKQEAgLTAsMCArMSwy NiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogb2F1dGhfdGVzdF9jb21tb24uaAorICoJ ICBTaGFyZWQgZnVuY3Rpb25hbGl0eSBmb3Igb2F1dGhfaG9va19jbGllbnQgYW5kIG9hdXRoX2Zs b3cKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2lmbmRlZiBPQVVUSF9U RVNUX0NPTU1PTl9ICisjZGVmaW5lIE9BVVRIX1RFU1RfQ09NTU9OX0gKKworLyoKKyAqIE9ubHkg cHVibGljIGhlYWRlcnMgY2FuIGJlIGhlcmUsIHNpbmNlIG9hdXRoX2Zsb3cuYyBpcyB0cnlpbmcg dG8gdGVzdCBvbmx5CisgKiB0aGUgcHVibGljIEFQSS4KKyAqLworI2luY2x1ZGUgImxpYnBxLWZl LmgiCisKK2V4dGVybiBpbnQJc3RyZXNzX2FzeW5jOwkJLyogZm9yIG9hdXRoX2hvb2tfY2xpZW50 ICovCisKK2V4dGVybiBjaGFyICpvYXV0aF90ZXN0X3BhcnNlX2FyZ3YoaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSwgaW50IGZvcl9wbHVnaW4pOworZXh0ZXJuIGludAlvYXV0aF90ZXN0X2F1dGhkYXRh X2hvb2soUEdhdXRoRGF0YSB0eXBlLCBQR2Nvbm4gKmNvbm4sIHZvaWQgKmRhdGEpOworZXh0ZXJu IGludAlvYXV0aF90ZXN0X3N0YXJ0X2Zsb3coUEdjb25uICpjb25uLCBQR29hdXRoQmVhcmVyUmVx dWVzdFYyICpyZXF1ZXN0KTsKKworI2VuZGlmCQkJCQkJCS8qIE9BVVRIX1RFU1RfQ09NTU9OX0gg Ki8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL29hdXRoX2Zs b3cuYyBiL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL29hdXRoX2Zsb3cuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOWVmNjdmMDNlYjMKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci9vYXV0aF9mbG93LmMK QEAgLTAsMCArMSw3MiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogb2F1dGhfZmxvdy5j CisgKgkgIFRlc3QgcGx1Z2luIGZvciBjbGllbnRzaWRlIE9BdXRoIGZsb3dzCisgKgorICogQ29w eXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRl IDxzdHJpbmcuaD4KKworLyogU2luY2Ugd2Ugd2FudCB0byB0ZXN0IHRoZSBwdWJsaWMgQVBJLCBv bmx5IGluY2x1ZGUgcHVibGljIGhlYWRlcnMgaGVyZS4gKi8KKyNpbmNsdWRlICJsaWJwcS1mZS5o IgorI2luY2x1ZGUgImxpYnBxLW9hdXRoLmgiCisjaW5jbHVkZSAib2F1dGhfdGVzdF9jb21tb24u aCIKKworc3RhdGljIHZvaWQKK2xvYWRfdGVzdF9mbGFncyh2b2lkKQoreworCWludAkJCWFyZ2M7 CisJY2hhcgkgICoqYXJndjsKKwljaGFyCSAgICplbnYgPSBnZXRlbnYoIk9BVVRIX1RFU1RfRkxB R1MiKTsKKwlpbnQJCQlmbGFnX2NvdW50OworCWludAkJCWk7CisKKwlpZiAoIWVudiB8fCAhZW52 WzBdKQorCXsKKwkJZnByaW50ZihzdGRlcnIsICJPQVVUSF9URVNUX0ZMQUdTIG11c3QgYmUgc2V0 XG4iKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlmbGFnX2NvdW50ID0gMTsKKwlmb3IgKGNoYXIgKmMg PSBlbnY7ICpjOyBjKyspCisJeworCQlpZiAoKmMgPT0gJ1x4MDEnKQorCQkJZmxhZ19jb3VudCsr OworCX0KKworCS8qIFNsaWNlIE9BVVRIX1RFU1RfRkxBR1MgaW50byBhIGZha2UgYXJndiBhcnJh eS4gKi8KKwllbnYgPSBzdHJkdXAoZW52KTsKKwlhcmdjID0gZmxhZ19jb3VudCArIDE7CisJYXJn diA9IG1hbGxvYyhzaXplb2YoKmFyZ3YpICogKGFyZ2MgKyAxKSk7CisKKwlpZiAoIWVudiB8fCAh YXJndikKKwl7CisJCWZwcmludGYoc3RkZXJyLCAib3V0IG9mIG1lbW9yeSIpOworCQlleGl0KDEp OworCX0KKworCWFyZ3ZbMF0gPSAiW3BsdWdpbiB0ZXN0XSI7CisJZm9yIChpID0gMTsgaSA8IGZs YWdfY291bnQ7IGkrKykKKwl7CisJCWFyZ3ZbaV0gPSBlbnY7CisKKwkJZW52ID0gc3RyY2hyKGVu diwgJ1x4MDEnKTsKKwkJKmVudisrID0gJ1wwJzsKKwl9CisJYXJndltmbGFnX2NvdW50XSA9IGVu djsKKwlhcmd2W2FyZ2NdID0gTlVMTDsKKworCW9hdXRoX3Rlc3RfcGFyc2VfYXJndihhcmdjLCBh cmd2LCAxIC8qIHBsdWdpbiAqLyApOworfQorCitpbnQKK3BnX3N0YXJ0X29hdXRoYmVhcmVyKFBH Y29ubiAqY29ubiwgUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVxdWVzdCkKK3sKKwlsb2FkX3Rl c3RfZmxhZ3MoKTsKKworCXJldHVybiBvYXV0aF90ZXN0X3N0YXJ0X2Zsb3coY29ubiwgcmVxdWVz dCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci9vYXV0 aF9ob29rX2NsaWVudC5jIGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Ivb2F1dGhf aG9va19jbGllbnQuYwppbmRleCA0Njk1ZDczZThmNy4uNWY5MzJhY2M1NzEgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL29hdXRoX2hvb2tfY2xpZW50LmMKKysr IGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Ivb2F1dGhfaG9va19jbGllbnQuYwpA QCAtMTgsMTQzICsxOCwxOCBAQAogCiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogCi0jaW5jbHVk ZSAiZ2V0b3B0X2xvbmcuaCIKICNpbmNsdWRlICJsaWJwcS1mZS5oIgogCi1zdGF0aWMgaW50CWhh bmRsZV9hdXRoX2RhdGEoUEdhdXRoRGF0YSB0eXBlLCBQR2Nvbm4gKmNvbm4sIHZvaWQgKmRhdGEp Owotc3RhdGljIFBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUgYXN5bmNfY2IoUEdjb25uICpjb25u LAotCQkJCQkJCQkJCSAgUEdvYXV0aEJlYXJlclJlcXVlc3QgKnJlcSwKLQkJCQkJCQkJCQkgIHBn c29ja2V0ICphbHRzb2NrKTsKLXN0YXRpYyBQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlIG1pc2Jl aGF2ZV9jYihQR2Nvbm4gKmNvbm4sCi0JCQkJCQkJCQkJCSAgUEdvYXV0aEJlYXJlclJlcXVlc3Qg KnJlcSwKLQkJCQkJCQkJCQkJICBwZ3NvY2tldCAqYWx0c29jayk7Ci0KLXN0YXRpYyB2b2lkCi11 c2FnZShjaGFyICphcmd2W10pCi17Ci0JcHJpbnRmKCJ1c2FnZTogJXMgW2ZsYWdzXSBDT05OSU5G T1xuXG4iLCBhcmd2WzBdKTsKLQotCXByaW50ZigicmVjb2duaXplZCBmbGFnczpcbiIpOwotCXBy aW50ZigiICAtaCwgLS1oZWxwICAgICAgICAgICAgICBzaG93IHRoaXMgbWVzc2FnZVxuIik7Ci0J cHJpbnRmKCIgIC12IFZFUlNJT04gICAgICAgICAgICAgIHNlbGVjdCB0aGUgaG9vayBBUEkgdmVy c2lvbiAoZGVmYXVsdCAyKVxuIik7Ci0JcHJpbnRmKCIgIC0tZXhwZWN0ZWQtc2NvcGUgU0NPUEUg IGZhaWwgaWYgcmVjZWl2ZWQgc2NvcGVzIGRvIG5vdCBtYXRjaCBTQ09QRVxuIik7Ci0JcHJpbnRm KCIgIC0tZXhwZWN0ZWQtdXJpIFVSSSAgICAgIGZhaWwgaWYgcmVjZWl2ZWQgY29uZmlndXJhdGlv biBsaW5rIGRvZXMgbm90IG1hdGNoIFVSSVxuIik7Ci0JcHJpbnRmKCIgIC0tZXhwZWN0ZWQtaXNz dWVyIElTUyAgIGZhaWwgaWYgcmVjZWl2ZWQgaXNzdWVyIGRvZXMgbm90IG1hdGNoIElTUyAodjIg b25seSlcbiIpOwotCXByaW50ZigiICAtLW1pc2JlaGF2ZT1NT0RFICAgICAgICBoYXZlIHRoZSBo b29rIGZhaWwgcmVxdWlyZWQgcG9zdGNvbmRpdGlvbnNcbiIKLQkJICAgIiAgICAgICAgICAgICAg ICAgICAgICAgICAgKE1PREVzOiBuby1ob29rLCBmYWlsLWFzeW5jLCBuby10b2tlbiwgbm8tc29j a2V0KVxuIik7Ci0JcHJpbnRmKCIgIC0tbm8taG9vayAgICAgICAgICAgICAgIGRvbid0IGluc3Rh bGwgT0F1dGggaG9va3NcbiIpOwotCXByaW50ZigiICAtLWhhbmctZm9yZXZlciAgICAgICAgICBk b24ndCBldmVyIHJldHVybiBhIHRva2VuIChjb21iaW5lIHdpdGggY29ubmVjdF90aW1lb3V0KVxu Iik7Ci0JcHJpbnRmKCIgIC0tdG9rZW4gVE9LRU4gICAgICAgICAgIHVzZSB0aGUgcHJvdmlkZWQg VE9LRU4gdmFsdWVcbiIpOwotCXByaW50ZigiICAtLWVycm9yIEVSUk1TRyAgICAgICAgICBmYWls IGluc3RlYWQsIHdpdGggdGhlIGdpdmVuIEVSUk1TRyAodjIgb25seSlcbiIpOwotCXByaW50Zigi ICAtLXN0cmVzcy1hc3luYyAgICAgICAgICBidXN5LWxvb3Agb24gUFFjb25uZWN0UG9sbCByYXRo ZXIgdGhhbiBwb2xsaW5nXG4iKTsKLX0KLQotLyogLS1vcHRpb25zICovCi1zdGF0aWMgYm9vbCBu b19ob29rID0gZmFsc2U7Ci1zdGF0aWMgYm9vbCBoYW5nX2ZvcmV2ZXIgPSBmYWxzZTsKLXN0YXRp YyBib29sIHN0cmVzc19hc3luYyA9IGZhbHNlOwotc3RhdGljIGNvbnN0IGNoYXIgKmV4cGVjdGVk X3VyaSA9IE5VTEw7Ci1zdGF0aWMgY29uc3QgY2hhciAqZXhwZWN0ZWRfaXNzdWVyID0gTlVMTDsK LXN0YXRpYyBjb25zdCBjaGFyICpleHBlY3RlZF9zY29wZSA9IE5VTEw7Ci1zdGF0aWMgY29uc3Qg Y2hhciAqbWlzYmVoYXZlX21vZGUgPSBOVUxMOwotc3RhdGljIGNoYXIgKnRva2VuID0gTlVMTDsK LXN0YXRpYyBjaGFyICplcnJtc2cgPSBOVUxMOwotc3RhdGljIGludAlob29rX3ZlcnNpb24gPSBQ UUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTl9WMjsKKyNpbmNsdWRlICJvYXV0aF90ZXN0X2Nv bW1vbi5oIgogCiBpbnQKIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKLQlzdGF0aWMg Y29uc3Qgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9IHsKLQkJeyJoZWxwIiwgbm9fYXJn dW1lbnQsIE5VTEwsICdoJ30sCi0KLQkJeyJleHBlY3RlZC1zY29wZSIsIHJlcXVpcmVkX2FyZ3Vt ZW50LCBOVUxMLCAxMDAwfSwKLQkJeyJleHBlY3RlZC11cmkiLCByZXF1aXJlZF9hcmd1bWVudCwg TlVMTCwgMTAwMX0sCi0JCXsibm8taG9vayIsIG5vX2FyZ3VtZW50LCBOVUxMLCAxMDAyfSwKLQkJ eyJ0b2tlbiIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAxMDAzfSwKLQkJeyJoYW5nLWZvcmV2 ZXIiLCBub19hcmd1bWVudCwgTlVMTCwgMTAwNH0sCi0JCXsibWlzYmVoYXZlIiwgcmVxdWlyZWRf YXJndW1lbnQsIE5VTEwsIDEwMDV9LAotCQl7InN0cmVzcy1hc3luYyIsIG5vX2FyZ3VtZW50LCBO VUxMLCAxMDA2fSwKLQkJeyJleHBlY3RlZC1pc3N1ZXIiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVM TCwgMTAwN30sCi0JCXsiZXJyb3IiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMTAwOH0sCi0J CXswfQotCX07Ci0KLQljb25zdCBjaGFyICpjb25uaW5mbzsKKwljb25zdCBjaGFyICpjb25uaW5m byA9IG9hdXRoX3Rlc3RfcGFyc2VfYXJndihhcmdjLCBhcmd2LCAwIC8qIGhvb2sgKi8gKTsKIAlQ R2Nvbm4JICAgKmNvbm47Ci0JaW50CQkJYzsKLQotCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFy Z2MsIGFyZ3YsICJodjoiLCBsb25nX29wdGlvbnMsIE5VTEwpKSAhPSAtMSkKLQl7Ci0JCXN3aXRj aCAoYykKLQkJewotCQkJY2FzZSAnaCc6Ci0JCQkJdXNhZ2UoYXJndik7Ci0JCQkJcmV0dXJuIDA7 Ci0KLQkJCWNhc2UgJ3YnOgotCQkJCWlmIChzdHJjbXAob3B0YXJnLCAiMSIpID09IDApCi0JCQkJ CWhvb2tfdmVyc2lvbiA9IFBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOOwotCQkJCWVsc2Ug aWYgKHN0cmNtcChvcHRhcmcsICIyIikgPT0gMCkKLQkJCQkJaG9va192ZXJzaW9uID0gUFFBVVRI REFUQV9PQVVUSF9CRUFSRVJfVE9LRU5fVjI7Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJdXNhZ2Uo YXJndik7Ci0JCQkJCXJldHVybiAxOwotCQkJCX0KLQkJCQlicmVhazsKLQotCQkJY2FzZSAxMDAw OgkJCS8qIC0tZXhwZWN0ZWQtc2NvcGUgKi8KLQkJCQlleHBlY3RlZF9zY29wZSA9IG9wdGFyZzsK LQkJCQlicmVhazsKLQotCQkJY2FzZSAxMDAxOgkJCS8qIC0tZXhwZWN0ZWQtdXJpICovCi0JCQkJ ZXhwZWN0ZWRfdXJpID0gb3B0YXJnOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDEwMDI6CQkJLyog LS1uby1ob29rICovCi0JCQkJbm9faG9vayA9IHRydWU7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2Ug MTAwMzoJCQkvKiAtLXRva2VuICovCi0JCQkJdG9rZW4gPSBvcHRhcmc7Ci0JCQkJYnJlYWs7Ci0K LQkJCWNhc2UgMTAwNDoJCQkvKiAtLWhhbmctZm9yZXZlciAqLwotCQkJCWhhbmdfZm9yZXZlciA9 IHRydWU7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgMTAwNToJCQkvKiAtLW1pc2JlaGF2ZSAqLwot CQkJCW1pc2JlaGF2ZV9tb2RlID0gb3B0YXJnOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDEwMDY6 CQkJLyogLS1zdHJlc3MtYXN5bmMgKi8KLQkJCQlzdHJlc3NfYXN5bmMgPSB0cnVlOwotCQkJCWJy ZWFrOwotCi0JCQljYXNlIDEwMDc6CQkJLyogLS1leHBlY3RlZC1pc3N1ZXIgKi8KLQkJCQlleHBl Y3RlZF9pc3N1ZXIgPSBvcHRhcmc7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgMTAwODoJCQkvKiAt LWVycm9yICovCi0JCQkJZXJybXNnID0gb3B0YXJnOwotCQkJCWJyZWFrOwotCi0JCQlkZWZhdWx0 OgotCQkJCXVzYWdlKGFyZ3YpOwotCQkJCXJldHVybiAxOwotCQl9Ci0JfQotCi0JaWYgKGFyZ2Mg IT0gb3B0aW5kICsgMSkKLQl7Ci0JCXVzYWdlKGFyZ3YpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlj b25uaW5mbyA9IGFyZ3Zbb3B0aW5kXTsKIAogCS8qIFNldCB1cCBvdXIgT0F1dGggaG9va3MuICov Ci0JUFFzZXRBdXRoRGF0YUhvb2soaGFuZGxlX2F1dGhfZGF0YSk7CisJUFFzZXRBdXRoRGF0YUhv b2sob2F1dGhfdGVzdF9hdXRoZGF0YV9ob29rKTsKIAogCS8qIENvbm5lY3QuIChBbGwgdGhlIGFj dHVhbCB3b3JrIGlzIGluIHRoZSBob29rLikgKi8KIAlpZiAoc3RyZXNzX2FzeW5jKQpAQCAtMTky LDE5MCArNjcsMyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJUFFmaW5pc2goY29u bik7CiAJcmV0dXJuIDA7CiB9Ci0KLS8qCi0gKiBQUWF1dGhEYXRhSG9vayBpbXBsZW1lbnRhdGlv bi4gUmVwbGFjZXMgdGhlIGRlZmF1bHQgY2xpZW50IGZsb3cgYnkgaGFuZGxpbmcKLSAqIFBRQVVU SERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOW19WMl0uCi0gKi8KLXN0YXRpYyBpbnQKLWhhbmRsZV9h dXRoX2RhdGEoUEdhdXRoRGF0YSB0eXBlLCBQR2Nvbm4gKmNvbm4sIHZvaWQgKmRhdGEpCi17Ci0J UEdvYXV0aEJlYXJlclJlcXVlc3QgKnJlcTsKLQlQR29hdXRoQmVhcmVyUmVxdWVzdFYyICpyZXEy ID0gTlVMTDsKLQotCUFzc2VydChob29rX3ZlcnNpb24gPT0gUFFBVVRIREFUQV9PQVVUSF9CRUFS RVJfVE9LRU4gfHwKLQkJICAgaG9va192ZXJzaW9uID09IFBRQVVUSERBVEFfT0FVVEhfQkVBUkVS X1RPS0VOX1YyKTsKLQotCWlmIChub19ob29rIHx8IHR5cGUgIT0gaG9va192ZXJzaW9uKQotCQly ZXR1cm4gMDsKLQotCXJlcSA9IGRhdGE7Ci0JaWYgKHR5cGUgPT0gUFFBVVRIREFUQV9PQVVUSF9C RUFSRVJfVE9LRU5fVjIpCi0JCXJlcTIgPSBkYXRhOwotCi0JaWYgKGhhbmdfZm9yZXZlcikKLQl7 Ci0JCS8qIFN0YXJ0IGFzeW5jaHJvbm91cyBwcm9jZXNzaW5nLiAqLwotCQlyZXEtPmFzeW5jID0g YXN5bmNfY2I7Ci0JCXJldHVybiAxOwotCX0KLQotCWlmIChtaXNiZWhhdmVfbW9kZSkKLQl7Ci0J CWlmIChzdHJjbXAobWlzYmVoYXZlX21vZGUsICJuby1ob29rIikgIT0gMCkKLQkJCXJlcS0+YXN5 bmMgPSBtaXNiZWhhdmVfY2I7Ci0JCXJldHVybiAxOwotCX0KLQotCWlmIChleHBlY3RlZF91cmkp Ci0JewotCQlpZiAoIXJlcS0+b3BlbmlkX2NvbmZpZ3VyYXRpb24pCi0JCXsKLQkJCWZwcmludGYo c3RkZXJyLCAiZXhwZWN0ZWQgVVJJIFwiJXNcIiwgZ290IE5VTExcbiIsIGV4cGVjdGVkX3VyaSk7 Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQotCQlpZiAoc3RyY21wKGV4cGVjdGVkX3VyaSwgcmVxLT5v cGVuaWRfY29uZmlndXJhdGlvbikgIT0gMCkKLQkJewotCQkJZnByaW50ZihzdGRlcnIsICJleHBl Y3RlZCBVUkkgXCIlc1wiLCBnb3QgXCIlc1wiXG4iLCBleHBlY3RlZF91cmksIHJlcS0+b3Blbmlk X2NvbmZpZ3VyYXRpb24pOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotCi0JaWYgKGV4cGVjdGVk X3Njb3BlKQotCXsKLQkJaWYgKCFyZXEtPnNjb3BlKQotCQl7Ci0JCQlmcHJpbnRmKHN0ZGVyciwg ImV4cGVjdGVkIHNjb3BlIFwiJXNcIiwgZ290IE5VTExcbiIsIGV4cGVjdGVkX3Njb3BlKTsKLQkJ CXJldHVybiAtMTsKLQkJfQotCi0JCWlmIChzdHJjbXAoZXhwZWN0ZWRfc2NvcGUsIHJlcS0+c2Nv cGUpICE9IDApCi0JCXsKLQkJCWZwcmludGYoc3RkZXJyLCAiZXhwZWN0ZWQgc2NvcGUgXCIlc1wi LCBnb3QgXCIlc1wiXG4iLCBleHBlY3RlZF9zY29wZSwgcmVxLT5zY29wZSk7Ci0JCQlyZXR1cm4g LTE7Ci0JCX0KLQl9Ci0KLQlpZiAoZXhwZWN0ZWRfaXNzdWVyKQotCXsKLQkJaWYgKCFyZXEyKQot CQl7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIi0tZXhwZWN0ZWQtaXNzdWVyIGNhbm5vdCBiZSBjb21i aW5lZCB3aXRoIC12MVxuIik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQotCQlpZiAoIXJlcTItPmlz c3VlcikKLQkJewotCQkJZnByaW50ZihzdGRlcnIsICJleHBlY3RlZCBpc3N1ZXIgXCIlc1wiLCBn b3QgTlVMTFxuIiwgZXhwZWN0ZWRfaXNzdWVyKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCi0JCWlm IChzdHJjbXAoZXhwZWN0ZWRfaXNzdWVyLCByZXEyLT5pc3N1ZXIpICE9IDApCi0JCXsKLQkJCWZw cmludGYoc3RkZXJyLCAiZXhwZWN0ZWQgaXNzdWVyIFwiJXNcIiwgZ290IFwiJXNcIlxuIiwgZXhw ZWN0ZWRfaXNzdWVyLCByZXEyLT5pc3N1ZXIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotCi0J aWYgKGVycm1zZykKLQl7Ci0JCWlmICh0b2tlbikKLQkJewotCQkJZnByaW50ZihzdGRlcnIsICIt LWVycm9yIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC0tdG9rZW5cbiIpOwotCQkJcmV0dXJuIC0x OwotCQl9Ci0JCWVsc2UgaWYgKCFyZXEyKQotCQl7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIi0tZXJy b3IgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLXYxXG4iKTsKLQkJCXJldHVybiAtMTsKLQkJfQot Ci0JCXJlcTItPmVycm9yID0gZXJybXNnOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmVxLT50b2tl biA9IHRva2VuOwotCXJldHVybiAxOwotfQotCi1zdGF0aWMgUG9zdGdyZXNQb2xsaW5nU3RhdHVz VHlwZQotYXN5bmNfY2IoUEdjb25uICpjb25uLCBQR29hdXRoQmVhcmVyUmVxdWVzdCAqcmVxLCBw Z3NvY2tldCAqYWx0c29jaykKLXsKLQlpZiAoaGFuZ19mb3JldmVyKQotCXsKLQkJLyoKLQkJICog VGhpcyBjb2RlIHRlc3RzIHRoYXQgbm90aGluZyBpcyBpbnRlcmZlcmluZyB3aXRoIGxpYnBxJ3Mg aGFuZGxpbmcKLQkJICogb2YgY29ubmVjdF90aW1lb3V0LgotCQkgKi8KLQkJc3RhdGljIHBnc29j a2V0IHNvY2sgPSBQR0lOVkFMSURfU09DS0VUOwotCi0JCWlmIChzb2NrID09IFBHSU5WQUxJRF9T T0NLRVQpCi0JCXsKLQkJCS8qIEZpcnN0IGNhbGwuIENyZWF0ZSBhbiB1bmJvdW5kIHNvY2tldCB0 byB3YWl0IG9uLiAqLwotI2lmZGVmIFdJTjMyCi0JCQlXU0FEQVRBCQl3c2FEYXRhOwotCQkJaW50 CQkJZXJyOwotCi0JCQllcnIgPSBXU0FTdGFydHVwKE1BS0VXT1JEKDIsIDIpLCAmd3NhRGF0YSk7 Ci0JCQlpZiAoZXJyKQotCQkJewotCQkJCXBlcnJvcigiV1NBU3RhcnR1cCBmYWlsZWQiKTsKLQkJ CQlyZXR1cm4gUEdSRVNfUE9MTElOR19GQUlMRUQ7Ci0JCQl9Ci0jZW5kaWYKLQkJCXNvY2sgPSBz b2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCk7Ci0JCQlpZiAoc29jayA9PSBQR0lOVkFMSURf U09DS0VUKQotCQkJewotCQkJCXBlcnJvcigiZmFpbGVkIHRvIGNyZWF0ZSBkYXRhZ3JhbSBzb2Nr ZXQiKTsKLQkJCQlyZXR1cm4gUEdSRVNfUE9MTElOR19GQUlMRUQ7Ci0JCQl9Ci0JCX0KLQotCQkv KiBNYWtlIGxpYnBxIHdhaXQgb24gdGhlICh1bnJlYWRhYmxlKSBzb2NrZXQuICovCi0JCSphbHRz b2NrID0gc29jazsKLQkJcmV0dXJuIFBHUkVTX1BPTExJTkdfUkVBRElORzsKLQl9Ci0KLQlyZXEt PnRva2VuID0gdG9rZW47Ci0JcmV0dXJuIFBHUkVTX1BPTExJTkdfT0s7Ci19Ci0KLXN0YXRpYyBQ b3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlCi1taXNiZWhhdmVfY2IoUEdjb25uICpjb25uLCBQR29h dXRoQmVhcmVyUmVxdWVzdCAqcmVxLCBwZ3NvY2tldCAqYWx0c29jaykKLXsKLQlpZiAoc3RyY21w KG1pc2JlaGF2ZV9tb2RlLCAiZmFpbC1hc3luYyIpID09IDApCi0JewotCQkvKiBKdXN0IGZhaWwg Im5vcm1hbGx5Ii4gKi8KLQkJaWYgKGVycm1zZykKLQkJewotCQkJUEdvYXV0aEJlYXJlclJlcXVl c3RWMiAqcmVxMjsKLQotCQkJaWYgKGhvb2tfdmVyc2lvbiA9PSBQUUFVVEhEQVRBX09BVVRIX0JF QVJFUl9UT0tFTikKLQkJCXsKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIi0tZXJyb3IgY2Fubm90IGJl IGNvbWJpbmVkIHdpdGggLXYxXG4iKTsKLQkJCQlleGl0KDEpOwotCQkJfQotCi0JCQlyZXEyID0g KFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKikgcmVxOwotCQkJcmVxMi0+ZXJyb3IgPSBlcnJtc2c7 Ci0JCX0KLQotCQlyZXR1cm4gUEdSRVNfUE9MTElOR19GQUlMRUQ7Ci0JfQotCWVsc2UgaWYgKHN0 cmNtcChtaXNiZWhhdmVfbW9kZSwgIm5vLXRva2VuIikgPT0gMCkKLQl7Ci0JCS8qIENhbGxiYWNr cyBtdXN0IGFzc2lnbiByZXEtPnRva2VuIGJlZm9yZSByZXR1cm5pbmcgT0suICovCi0JCXJldHVy biBQR1JFU19QT0xMSU5HX09LOwotCX0KLQllbHNlIGlmIChzdHJjbXAobWlzYmVoYXZlX21vZGUs ICJuby1zb2NrZXQiKSA9PSAwKQotCXsKLQkJLyogQ2FsbGJhY2tzIG11c3QgYXNzaWduICphbHRz b2NrIGJlZm9yZSBhc2tpbmcgZm9yIHBvbGxpbmcuICovCi0JCXJldHVybiBQR1JFU19QT0xMSU5H X1JFQURJTkc7Ci0JfQotCWVsc2UKLQl7Ci0JCWZwcmludGYoc3RkZXJyLCAidW5yZWNvZ25pemVk IC0tbWlzYmVoYXZlIG1vZGU6ICVzXG4iLCBtaXNiZWhhdmVfbW9kZSk7Ci0JCWV4aXQoMSk7Ci0J fQotfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Ivb2F1dGhf dGVzdF9jb21tb24uYyBiL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL29hdXRoX3Rl c3RfY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNmY2I0 YTM1NGE4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0 b3Ivb2F1dGhfdGVzdF9jb21tb24uYwpAQCAtMCwwICsxLDM3MyBAQAorLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKgorICogb2F1dGhfdGVzdF9jb21tb24uYworICoJICBTaGFyZWQgZnVuY3Rpb25hbGl0 eSBmb3Igb2F1dGhfaG9va19jbGllbnQgYW5kIG9hdXRoX2Zsb3cKKyAqCisgKiBDb3B5cmlnaHQg KGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCisKKyNpbmNsdWRl IDxzeXMvc29ja2V0Lmg+CisKKyNpbmNsdWRlICJnZXRvcHRfbG9uZy5oIgorI2luY2x1ZGUgImxp YnBxLWZlLmgiCisKKyNpbmNsdWRlICJvYXV0aF90ZXN0X2NvbW1vbi5oIgorCitzdGF0aWMgUG9z dGdyZXNQb2xsaW5nU3RhdHVzVHlwZSBhc3luY19jYihQR2Nvbm4gKmNvbm4sCisJCQkJCQkJCQkJ ICBQR29hdXRoQmVhcmVyUmVxdWVzdCAqcmVxLAorCQkJCQkJCQkJCSAgcGdzb2NrZXQgKmFsdHNv Y2spOworc3RhdGljIFBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUgbWlzYmVoYXZlX2NiKFBHY29u biAqY29ubiwKKwkJCQkJCQkJCQkJICBQR29hdXRoQmVhcmVyUmVxdWVzdCAqcmVxLAorCQkJCQkJ CQkJCQkgIHBnc29ja2V0ICphbHRzb2NrKTsKKworLyogLS1vcHRpb25zICovCitzdGF0aWMgYm9v bCBub19ob29rID0gZmFsc2U7CitzdGF0aWMgYm9vbCBoYW5nX2ZvcmV2ZXIgPSBmYWxzZTsKK3N0 YXRpYyBjb25zdCBjaGFyICpleHBlY3RlZF91cmkgPSBOVUxMOworc3RhdGljIGNvbnN0IGNoYXIg KmV4cGVjdGVkX2lzc3VlciA9IE5VTEw7CitzdGF0aWMgY29uc3QgY2hhciAqZXhwZWN0ZWRfc2Nv cGUgPSBOVUxMOworc3RhdGljIGNvbnN0IGNoYXIgKm1pc2JlaGF2ZV9tb2RlID0gTlVMTDsKK3N0 YXRpYyBjaGFyICp0b2tlbiA9IE5VTEw7CitzdGF0aWMgY2hhciAqZXJybXNnID0gTlVMTDsKK3N0 YXRpYyBpbnQJaG9va192ZXJzaW9uID0gUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5fVjI7 CisKKy8qCisgKiBYWFg6IHN0cmVzc19hc3luYyBpcyBleHBvcnRlZCBmb3IgdGhlIGJlbmVmaXQg b2Ygb2F1dGhfaG9va19jbGllbnQuIFNpbmNlCisgKiB3ZSBvbmx5IHVzZSBwdWJsaWMgaGVhZGVy cyAobGlicHEtZmUuaCkgZm9yIG9hdXRoX2Zsb3csIGl0IG5lZWRzIHRvIGJlIGFuIGludAorICog cmF0aGVyIHRoYW4gYSBib29sLgorICovCitpbnQJCQlzdHJlc3NfYXN5bmMgPSBmYWxzZTsKKwor c3RhdGljIHZvaWQKK3VzYWdlKGNoYXIgKmFyZ3ZbXSkKK3sKKwlwcmludGYoInVzYWdlOiAlcyBb ZmxhZ3NdIENPTk5JTkZPXG5cbiIsIGFyZ3ZbMF0pOworCisJcHJpbnRmKCJyZWNvZ25pemVkIGZs YWdzOlxuIik7CisJcHJpbnRmKCIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgIHNob3cgdGhpcyBt ZXNzYWdlXG4iKTsKKwlwcmludGYoIiAgLXYgVkVSU0lPTiAgICAgICAgICAgICAgc2VsZWN0IHRo ZSBob29rIEFQSSB2ZXJzaW9uIChkZWZhdWx0IDIpXG4iKTsKKwlwcmludGYoIiAgLS1leHBlY3Rl ZC1zY29wZSBTQ09QRSAgZmFpbCBpZiByZWNlaXZlZCBzY29wZXMgZG8gbm90IG1hdGNoIFNDT1BF XG4iKTsKKwlwcmludGYoIiAgLS1leHBlY3RlZC11cmkgVVJJICAgICAgZmFpbCBpZiByZWNlaXZl ZCBjb25maWd1cmF0aW9uIGxpbmsgZG9lcyBub3QgbWF0Y2ggVVJJXG4iKTsKKwlwcmludGYoIiAg LS1leHBlY3RlZC1pc3N1ZXIgSVNTICAgZmFpbCBpZiByZWNlaXZlZCBpc3N1ZXIgZG9lcyBub3Qg bWF0Y2ggSVNTICh2MiBvbmx5KVxuIik7CisJcHJpbnRmKCIgIC0tbWlzYmVoYXZlPU1PREUgICAg ICAgIGhhdmUgdGhlIGhvb2sgZmFpbCByZXF1aXJlZCBwb3N0Y29uZGl0aW9uc1xuIgorCQkgICAi ICAgICAgICAgICAgICAgICAgICAgICAgICAoTU9ERXM6IG5vLWhvb2ssIGZhaWwtYXN5bmMsIG5v LXRva2VuLCBuby1zb2NrZXQpXG4iKTsKKwlwcmludGYoIiAgLS1uby1ob29rICAgICAgICAgICAg ICAgZG9uJ3QgaW5zdGFsbCBPQXV0aCBob29rc1xuIik7CisJcHJpbnRmKCIgIC0taGFuZy1mb3Jl dmVyICAgICAgICAgIGRvbid0IGV2ZXIgcmV0dXJuIGEgdG9rZW4gKGNvbWJpbmUgd2l0aCBjb25u ZWN0X3RpbWVvdXQpXG4iKTsKKwlwcmludGYoIiAgLS10b2tlbiBUT0tFTiAgICAgICAgICAgdXNl IHRoZSBwcm92aWRlZCBUT0tFTiB2YWx1ZVxuIik7CisJcHJpbnRmKCIgIC0tZXJyb3IgRVJSTVNH ICAgICAgICAgIGZhaWwgaW5zdGVhZCwgd2l0aCB0aGUgZ2l2ZW4gRVJSTVNHICh2MiBvbmx5KVxu Iik7CisJcHJpbnRmKCIgIC0tc3RyZXNzLWFzeW5jICAgICAgICAgIGJ1c3ktbG9vcCBvbiBQUWNv bm5lY3RQb2xsIHJhdGhlciB0aGFuIHBvbGxpbmdcbiIpOworfQorCitjaGFyICoKK29hdXRoX3Rl c3RfcGFyc2VfYXJndihpbnQgYXJnYywgY2hhciAqYXJndltdLCBpbnQgZm9yX3BsdWdpbikKK3sK KwlzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9IHsKKwkJeyJoZWxw Iiwgbm9fYXJndW1lbnQsIE5VTEwsICdoJ30sCisKKwkJeyJleHBlY3RlZC1zY29wZSIsIHJlcXVp cmVkX2FyZ3VtZW50LCBOVUxMLCAxMDAwfSwKKwkJeyJleHBlY3RlZC11cmkiLCByZXF1aXJlZF9h cmd1bWVudCwgTlVMTCwgMTAwMX0sCisJCXsibm8taG9vayIsIG5vX2FyZ3VtZW50LCBOVUxMLCAx MDAyfSwKKwkJeyJ0b2tlbiIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAxMDAzfSwKKwkJeyJo YW5nLWZvcmV2ZXIiLCBub19hcmd1bWVudCwgTlVMTCwgMTAwNH0sCisJCXsibWlzYmVoYXZlIiwg cmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDEwMDV9LAorCQl7InN0cmVzcy1hc3luYyIsIG5vX2Fy Z3VtZW50LCBOVUxMLCAxMDA2fSwKKwkJeyJleHBlY3RlZC1pc3N1ZXIiLCByZXF1aXJlZF9hcmd1 bWVudCwgTlVMTCwgMTAwN30sCisJCXsiZXJyb3IiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwg MTAwOH0sCisJCXswfQorCX07CisKKwlpbnQJCQljOworCisJaWYgKGZvcl9wbHVnaW4pCisJewor CQkvKiBUaGUgInJlYWwiIGFyZ3YgaGFzIGFscmVhZHkgYmVlbiBwYXJzZWQuIFJlc2V0IG9wdGlu ZC4gKi8KKwkJb3B0aW5kID0gMTsKKwl9CisKKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdj LCBhcmd2LCAiaHY6IiwgbG9uZ19vcHRpb25zLCBOVUxMKSkgIT0gLTEpCisJeworCQlzd2l0Y2gg KGMpCisJCXsKKwkJCWNhc2UgJ2gnOgorCQkJCXVzYWdlKGFyZ3YpOworCQkJCWV4aXQoMCk7CisK KwkJCWNhc2UgJ3YnOgorCQkJCWlmIChzdHJjbXAob3B0YXJnLCAiMSIpID09IDApCisJCQkJCWhv b2tfdmVyc2lvbiA9IFBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOOworCQkJCWVsc2UgaWYg KHN0cmNtcChvcHRhcmcsICIyIikgPT0gMCkKKwkJCQkJaG9va192ZXJzaW9uID0gUFFBVVRIREFU QV9PQVVUSF9CRUFSRVJfVE9LRU5fVjI7CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJdXNhZ2UoYXJn dik7CisJCQkJCWV4aXQoMSk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIDEwMDA6CQkJ LyogLS1leHBlY3RlZC1zY29wZSAqLworCQkJCWV4cGVjdGVkX3Njb3BlID0gb3B0YXJnOworCQkJ CWJyZWFrOworCisJCQljYXNlIDEwMDE6CQkJLyogLS1leHBlY3RlZC11cmkgKi8KKwkJCQlleHBl Y3RlZF91cmkgPSBvcHRhcmc7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMTAwMjoJCQkvKiAtLW5v LWhvb2sgKi8KKwkJCQlub19ob29rID0gdHJ1ZTsKKwkJCQlicmVhazsKKworCQkJY2FzZSAxMDAz OgkJCS8qIC0tdG9rZW4gKi8KKwkJCQl0b2tlbiA9IG9wdGFyZzsKKwkJCQlicmVhazsKKworCQkJ Y2FzZSAxMDA0OgkJCS8qIC0taGFuZy1mb3JldmVyICovCisJCQkJaGFuZ19mb3JldmVyID0gdHJ1 ZTsKKwkJCQlicmVhazsKKworCQkJY2FzZSAxMDA1OgkJCS8qIC0tbWlzYmVoYXZlICovCisJCQkJ bWlzYmVoYXZlX21vZGUgPSBvcHRhcmc7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMTAwNjoJCQkv KiAtLXN0cmVzcy1hc3luYyAqLworCQkJCXN0cmVzc19hc3luYyA9IHRydWU7CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgMTAwNzoJCQkvKiAtLWV4cGVjdGVkLWlzc3VlciAqLworCQkJCWV4cGVjdGVk X2lzc3VlciA9IG9wdGFyZzsKKwkJCQlicmVhazsKKworCQkJY2FzZSAxMDA4OgkJCS8qIC0tZXJy b3IgKi8KKwkJCQllcnJtc2cgPSBvcHRhcmc7CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJ CQkJdXNhZ2UoYXJndik7CisJCQkJZXhpdCgxKTsKKwkJfQorCX0KKworCWlmIChhcmdjICE9IChm b3JfcGx1Z2luID8gb3B0aW5kIDogb3B0aW5kICsgMSkpCisJeworCQl1c2FnZShhcmd2KTsKKwkJ ZXhpdCgxKTsKKwl9CisKKwlyZXR1cm4gYXJndltvcHRpbmRdOworfQorCisvKgorICogUFFhdXRo RGF0YUhvb2sgaW1wbGVtZW50YXRpb24uIFJlcGxhY2VzIHRoZSBkZWZhdWx0IGNsaWVudCBmbG93 IGJ5IGhhbmRsaW5nCisgKiBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTltfVjJdLgorICov CitpbnQKK29hdXRoX3Rlc3RfYXV0aGRhdGFfaG9vayhQR2F1dGhEYXRhIHR5cGUsIFBHY29ubiAq Y29ubiwgdm9pZCAqZGF0YSkKK3sKKwlQR29hdXRoQmVhcmVyUmVxdWVzdCAqcmVxOworCVBHb2F1 dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcTIgPSBOVUxMOworCisJQXNzZXJ0KGhvb2tfdmVyc2lvbiA9 PSBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTiB8fAorCQkgICBob29rX3ZlcnNpb24gPT0g UFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5fVjIpOworCisJaWYgKG5vX2hvb2sgfHwgdHlw ZSAhPSBob29rX3ZlcnNpb24pCisJCXJldHVybiAwOworCisJcmVxID0gZGF0YTsKKwlpZiAodHlw ZSA9PSBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTl9WMikKKwkJcmVxMiA9IGRhdGE7CisK KwlpZiAoaGFuZ19mb3JldmVyKQorCXsKKwkJLyogU3RhcnQgYXN5bmNocm9ub3VzIHByb2Nlc3Np bmcuICovCisJCXJlcS0+YXN5bmMgPSBhc3luY19jYjsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYg KG1pc2JlaGF2ZV9tb2RlKQorCXsKKwkJaWYgKHN0cmNtcChtaXNiZWhhdmVfbW9kZSwgIm5vLWhv b2siKSAhPSAwKQorCQkJcmVxLT5hc3luYyA9IG1pc2JlaGF2ZV9jYjsKKwkJcmV0dXJuIDE7CisJ fQorCisJaWYgKGV4cGVjdGVkX3VyaSkKKwl7CisJCWlmICghcmVxLT5vcGVuaWRfY29uZmlndXJh dGlvbikKKwkJeworCQkJZnByaW50ZihzdGRlcnIsICJleHBlY3RlZCBVUkkgXCIlc1wiLCBnb3Qg TlVMTFxuIiwgZXhwZWN0ZWRfdXJpKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmIChzdHJj bXAoZXhwZWN0ZWRfdXJpLCByZXEtPm9wZW5pZF9jb25maWd1cmF0aW9uKSAhPSAwKQorCQl7CisJ CQlmcHJpbnRmKHN0ZGVyciwgImV4cGVjdGVkIFVSSSBcIiVzXCIsIGdvdCBcIiVzXCJcbiIsIGV4 cGVjdGVkX3VyaSwgcmVxLT5vcGVuaWRfY29uZmlndXJhdGlvbik7CisJCQlyZXR1cm4gLTE7CisJ CX0KKwl9CisKKwlpZiAoZXhwZWN0ZWRfc2NvcGUpCisJeworCQlpZiAoIXJlcS0+c2NvcGUpCisJ CXsKKwkJCWZwcmludGYoc3RkZXJyLCAiZXhwZWN0ZWQgc2NvcGUgXCIlc1wiLCBnb3QgTlVMTFxu IiwgZXhwZWN0ZWRfc2NvcGUpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKHN0cmNtcChl eHBlY3RlZF9zY29wZSwgcmVxLT5zY29wZSkgIT0gMCkKKwkJeworCQkJZnByaW50ZihzdGRlcnIs ICJleHBlY3RlZCBzY29wZSBcIiVzXCIsIGdvdCBcIiVzXCJcbiIsIGV4cGVjdGVkX3Njb3BlLCBy ZXEtPnNjb3BlKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCWlmIChleHBlY3RlZF9pc3N1 ZXIpCisJeworCQlpZiAoIXJlcTIpCisJCXsKKwkJCWZwcmludGYoc3RkZXJyLCAiLS1leHBlY3Rl ZC1pc3N1ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLXYxXG4iKTsKKwkJCXJldHVybiAtMTsK KwkJfQorCisJCWlmICghcmVxMi0+aXNzdWVyKQorCQl7CisJCQlmcHJpbnRmKHN0ZGVyciwgImV4 cGVjdGVkIGlzc3VlciBcIiVzXCIsIGdvdCBOVUxMXG4iLCBleHBlY3RlZF9pc3N1ZXIpOworCQkJ cmV0dXJuIC0xOworCQl9CisKKwkJaWYgKHN0cmNtcChleHBlY3RlZF9pc3N1ZXIsIHJlcTItPmlz c3VlcikgIT0gMCkKKwkJeworCQkJZnByaW50ZihzdGRlcnIsICJleHBlY3RlZCBpc3N1ZXIgXCIl c1wiLCBnb3QgXCIlc1wiXG4iLCBleHBlY3RlZF9pc3N1ZXIsIHJlcTItPmlzc3Vlcik7CisJCQly ZXR1cm4gLTE7CisJCX0KKwl9CisKKwlpZiAoZXJybXNnKQorCXsKKwkJaWYgKHRva2VuKQorCQl7 CisJCQlmcHJpbnRmKHN0ZGVyciwgIi0tZXJyb3IgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLS10 b2tlblxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJZWxzZSBpZiAoIXJlcTIpCisJCXsKKwkJ CWZwcmludGYoc3RkZXJyLCAiLS1lcnJvciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtdjFcbiIp OworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJcmVxMi0+ZXJyb3IgPSBlcnJtc2c7CisJCXJldHVy biAtMTsKKwl9CisKKwlyZXEtPnRva2VuID0gdG9rZW47CisJcmV0dXJuIDE7Cit9CisKKy8qCisg KiBTZXRzIHVwIGEgcmVxdWVzdCBmb3IgYSBwbHVnaW4gbW9kdWxlIChwZ19zdGFydF9vYXV0aGJl YXJlcigpKSByYXRoZXIgdGhhbgorICogdXNpbmcgdGhlIGhvb2suCisgKi8KK2ludAorb2F1dGhf dGVzdF9zdGFydF9mbG93KFBHY29ubiAqY29ubiwgUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVx dWVzdCkKK3sKKwlpbnQJCQlyZXQ7CisKKwkvKgorCSAqIFdlIGNhbiBzdGlsbCBkZWZlciB0byB0 aGUgaG9vayBhYm92ZSB0byBhdm9pZCBjb3B5aW5nIGNvZGU7IHdlIGp1c3QKKwkgKiBoYXZlIHRv IHRyYW5zbGF0ZSB0aGUgcmV0dXJuIHZhbHVlLgorCSAqLworCXJldCA9IG9hdXRoX3Rlc3RfYXV0 aGRhdGFfaG9vayhQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTl9WMiwgY29ubiwKKwkJCQkJ CQkJICAgcmVxdWVzdCk7CisKKwlpZiAocmV0ID09IDApCisJeworCQkvKiBUaGlzIGlzIGEgYnVn IGluIHRoZSB0ZXN0LiAqLworCQlmcHJpbnRmKHN0ZGVyciwgInBsdWdpbiB0ZXN0cyBjYW5ub3Qg bWFrZSB1c2Ugb2YgLXYxIG9yIC0tbm8taG9va1xuIik7CisJCWV4aXQoMSk7CisJfQorCisJcmV0 dXJuIChyZXQgPT0gMSkgPyAwIDogLTE7Cit9CisKK3N0YXRpYyBQb3N0Z3Jlc1BvbGxpbmdTdGF0 dXNUeXBlCithc3luY19jYihQR2Nvbm4gKmNvbm4sIFBHb2F1dGhCZWFyZXJSZXF1ZXN0ICpyZXEs IHBnc29ja2V0ICphbHRzb2NrKQoreworCWlmIChoYW5nX2ZvcmV2ZXIpCisJeworCQkvKgorCQkg KiBUaGlzIGNvZGUgdGVzdHMgdGhhdCBub3RoaW5nIGlzIGludGVyZmVyaW5nIHdpdGggbGlicHEn cyBoYW5kbGluZworCQkgKiBvZiBjb25uZWN0X3RpbWVvdXQuCisJCSAqLworCQlzdGF0aWMgcGdz b2NrZXQgc29jayA9IFBHSU5WQUxJRF9TT0NLRVQ7CisKKwkJaWYgKHNvY2sgPT0gUEdJTlZBTElE X1NPQ0tFVCkKKwkJeworCQkJLyogRmlyc3QgY2FsbC4gQ3JlYXRlIGFuIHVuYm91bmQgc29ja2V0 IHRvIHdhaXQgb24uICovCisjaWZkZWYgV0lOMzIKKwkJCVdTQURBVEEJCXdzYURhdGE7CisJCQlp bnQJCQllcnI7CisKKwkJCWVyciA9IFdTQVN0YXJ0dXAoTUFLRVdPUkQoMiwgMiksICZ3c2FEYXRh KTsKKwkJCWlmIChlcnIpCisJCQl7CisJCQkJcGVycm9yKCJXU0FTdGFydHVwIGZhaWxlZCIpOwor CQkJCXJldHVybiBQR1JFU19QT0xMSU5HX0ZBSUxFRDsKKwkJCX0KKyNlbmRpZgorCQkJc29jayA9 IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKTsKKwkJCWlmIChzb2NrID09IFBHSU5WQUxJ RF9TT0NLRVQpCisJCQl7CisJCQkJcGVycm9yKCJmYWlsZWQgdG8gY3JlYXRlIGRhdGFncmFtIHNv Y2tldCIpOworCQkJCXJldHVybiBQR1JFU19QT0xMSU5HX0ZBSUxFRDsKKwkJCX0KKwkJfQorCisJ CS8qIE1ha2UgbGlicHEgd2FpdCBvbiB0aGUgKHVucmVhZGFibGUpIHNvY2tldC4gKi8KKwkJKmFs dHNvY2sgPSBzb2NrOworCQlyZXR1cm4gUEdSRVNfUE9MTElOR19SRUFESU5HOworCX0KKworCXJl cS0+dG9rZW4gPSB0b2tlbjsKKwlyZXR1cm4gUEdSRVNfUE9MTElOR19PSzsKK30KKworc3RhdGlj IFBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUKK21pc2JlaGF2ZV9jYihQR2Nvbm4gKmNvbm4sIFBH b2F1dGhCZWFyZXJSZXF1ZXN0ICpyZXEsIHBnc29ja2V0ICphbHRzb2NrKQoreworCWlmIChzdHJj bXAobWlzYmVoYXZlX21vZGUsICJmYWlsLWFzeW5jIikgPT0gMCkKKwl7CisJCS8qIEp1c3QgZmFp bCAibm9ybWFsbHkiLiAqLworCQlpZiAoZXJybXNnKQorCQl7CisJCQlQR29hdXRoQmVhcmVyUmVx dWVzdFYyICpyZXEyOworCisJCQlpZiAoaG9va192ZXJzaW9uID09IFBRQVVUSERBVEFfT0FVVEhf QkVBUkVSX1RPS0VOKQorCQkJeworCQkJCWZwcmludGYoc3RkZXJyLCAiLS1lcnJvciBjYW5ub3Qg YmUgY29tYmluZWQgd2l0aCAtdjFcbiIpOworCQkJCWV4aXQoMSk7CisJCQl9CisKKwkJCXJlcTIg PSAoUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqKSByZXE7CisJCQlyZXEyLT5lcnJvciA9IGVycm1z ZzsKKwkJfQorCisJCXJldHVybiBQR1JFU19QT0xMSU5HX0ZBSUxFRDsKKwl9CisJZWxzZSBpZiAo c3RyY21wKG1pc2JlaGF2ZV9tb2RlLCAibm8tdG9rZW4iKSA9PSAwKQorCXsKKwkJLyogQ2FsbGJh Y2tzIG11c3QgYXNzaWduIHJlcS0+dG9rZW4gYmVmb3JlIHJldHVybmluZyBPSy4gKi8KKwkJcmV0 dXJuIFBHUkVTX1BPTExJTkdfT0s7CisJfQorCWVsc2UgaWYgKHN0cmNtcChtaXNiZWhhdmVfbW9k ZSwgIm5vLXNvY2tldCIpID09IDApCisJeworCQkvKiBDYWxsYmFja3MgbXVzdCBhc3NpZ24gKmFs dHNvY2sgYmVmb3JlIGFza2luZyBmb3IgcG9sbGluZy4gKi8KKwkJcmV0dXJuIFBHUkVTX1BPTExJ TkdfUkVBRElORzsKKwl9CisJZWxzZQorCXsKKwkJZnByaW50ZihzdGRlcnIsICJ1bnJlY29nbml6 ZWQgLS1taXNiZWhhdmUgbW9kZTogJXNcbiIsIG1pc2JlaGF2ZV9tb2RlKTsKKwkJZXhpdCgxKTsK Kwl9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci90LzAw Ml9jbGllbnQucGwgYi9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci90LzAwMl9jbGll bnQucGwKaW5kZXggMGJkNWNiYjk4NzQuLjAzMGZiMmZmYWUxIDEwMDY0NAotLS0gYS9zcmMvdGVz dC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci90LzAwMl9jbGllbnQucGwKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvdC8wMDJfY2xpZW50LnBsCkBAIC0xLDYgKzEsNiBAQAog IwogIyBFeGVyY2lzZXMgdGhlIEFQSSBmb3IgY3VzdG9tIE9BdXRoIGNsaWVudCBmbG93cywgdXNp bmcgdGhlIG9hdXRoX2hvb2tfY2xpZW50Ci0jIHRlc3QgZHJpdmVyLgorIyB0ZXN0IGRyaXZlciBh bmQgdGhlIG9hdXRoX2Zsb3cgY3VzdG9tIHBsdWdpbi4KICMKICMgQ29weXJpZ2h0IChjKSAyMDIx LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCiAjCkBAIC0yMCw2ICsy MCwxMCBAQCBpZiAoISRFTlZ7UEdfVEVTVF9FWFRSQX0gfHwgJEVOVntQR19URVNUX0VYVFJBfSAh fiAvXGJvYXV0aFxiLykKIAkgICdQb3RlbnRpYWxseSB1bnNhZmUgdGVzdCBvYXV0aCBub3QgZW5h YmxlZCBpbiBQR19URVNUX0VYVFJBJzsKIH0KIAorbXkgJHBsdWdpbl9zdXBwb3J0ZWQgPSAoCisJ CSBjaGVja19wZ19jb25maWcoIiNkZWZpbmUgSEFWRV9TWVNfRVZFTlRfSCAxIikKKwkgIG9yIGNo ZWNrX3BnX2NvbmZpZygiI2RlZmluZSBIQVZFX1NZU19FUE9MTF9IIDEiKSk7CisKICMKICMgQ2x1 c3RlciBTZXR1cAogIwpAQCAtNzIsNiArNzYsOCBAQCBzdWIgdGVzdAogCQkkZmxhZ3MgPSAkcGFy YW1ze2ZsYWdzfTsKIAl9CiAKKwkjIEZpcnN0IHJ1biB0aGUgb2F1dGhfaG9va19jbGllbnQsIHdo aWNoIHVzZXMgUFFhdXRoRGF0YUhvb2sgdG8gaW5zZXJ0IGEgbmV3CisJIyBPQXV0aCBmbG93Lgog CW15IEBjbWQgPSAoIm9hdXRoX2hvb2tfY2xpZW50IiwgQHskZmxhZ3N9LCAkY29tbW9uX2Nvbm5z dHIpOwogCW5vdGUgInJ1bm5pbmcgJyIgLiBqb2luKCInICciLCBAY21kKSAuICInIjsKIApAQCAt MTAzLDYgKzEwOSwzNyBAQCBzdWIgdGVzdAogCQkkbm9kZS0+bG9nX2NoZWNrKCIkdGVzdF9uYW1l OiBsb2cgbWF0Y2hlcyIsCiAJCQkkbG9nX3N0YXJ0LCBsb2dfbGlrZSA9PiAkcGFyYW1ze2xvZ19s aWtlfSk7CiAJfQorCisgIFNLSVA6CisJeworCQlsYXN0IFNLSVAgaWYgJHBhcmFtc3tob29rX29u bHl9OworCQlza2lwICJPQXV0aCBtb2R1bGVzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxh dGZvcm0iCisJCSAgdW5sZXNzICRwbHVnaW5fc3VwcG9ydGVkOworCisJCSMgUnVuIHRoZSBzYW1l IHRlc3Qgd2l0aCBwc3FsIGl0c2VsZiwgbG9hZGluZyB0aGUgb2F1dGhfZmxvdy5zbyBtb2R1bGUu CisJCWxvY2FsICRFTlZ7UEdPQVVUSE1PRFVMRX0gPSAkRU5We2Zsb3dfbW9kdWxlX3BhdGh9Owor CisJCSMgRmxhZ3MgYXJlIHBhc3NlZCB0byB0aGUgbW9kdWxlIHZpYSBPQVVUSF9URVNUX0ZMQUdT LCB3aXRoIDB4MDEgYXMgYQorCQkjIHNlcGFyYXRvci4KKwkJbG9jYWwgJEVOVntPQVVUSF9URVNU X0ZMQUdTfSA9IGpvaW4oIlx4MDEiLCBAeyRmbGFnc30pOworCisJCWlmICgkcGFyYW1ze2V4cGVj dF9zdWNjZXNzfSkKKwkJeworCQkJJG5vZGUtPmNvbm5lY3Rfb2soCisJCQkJJGNvbW1vbl9jb25u c3RyLAorCQkJCSJbcGx1Z2luIGZsb3ddICR0ZXN0X25hbWUiLAorCQkJCWV4cGVjdGVkX3N0ZGVy ciA9PiAkcGFyYW1ze2V4cGVjdGVkX3N0ZGVycn0sCisJCQkJbG9nX2xpa2UgPT4gJHBhcmFtc3ts b2dfbGlrZX0pOworCQl9CisJCWVsc2UKKwkJeworCQkJJG5vZGUtPmNvbm5lY3RfZmFpbHMoCisJ CQkJJGNvbW1vbl9jb25uc3RyLAorCQkJCSJbcGx1Z2luIGZsb3ddICR0ZXN0X25hbWUiLAorCQkJ CWV4cGVjdGVkX3N0ZGVyciA9PiAkcGFyYW1ze2V4cGVjdGVkX3N0ZGVycn0sCisJCQkJbG9nX2xp a2UgPT4gJHBhcmFtc3tsb2dfbGlrZX0pOworCQl9CisJfQogfQogCiB0ZXN0KApAQCAtMTE5LDYg KzE1Niw3IEBAIHRlc3QoCiAjIE1ha2Ugc3VyZSB0aGUgdjEgaG9vayBjb250aW51ZXMgdG8gd29y ay4KIHRlc3QoCiAJInYxIHN5bmNocm9ub3VzIGhvb2sgY2FuIHByb3ZpZGUgYSB0b2tlbiIsCisJ aG9va19vbmx5ID0+IDEsICAgICMgcGx1Z2lucyBkb24ndCBzdXBwb3J0IEFQSSB2MQogCWZsYWdz ID0+IFsKIAkJIi12MSIsCiAJCSItLXRva2VuIiA9PiAibXktdG9rZW4tdjEiLApAQCAtMTMzLDYg KzE3MSw3IEBAIGlmICgkRU5We3dpdGhfbGliY3VybH0gbmUgJ3llcycpCiAJIyBsaWJwcSBzaG91 bGQgaGVscCB1c2VycyBvdXQgaWYgbm8gT0F1dGggc3VwcG9ydCBpcyBidWlsdCBpbi4KIAl0ZXN0 KAogCQkiZmFpbHMgd2l0aG91dCBjdXN0b20gaG9vayBpbnN0YWxsZWQiLAorCQlob29rX29ubHkg PT4gMSwgICAgIyBwbHVnaW5zIGNhbid0IHVzZSAtLW5vLWhvb2sKIAkJZmxhZ3MgPT4gWyItLW5v LWhvb2siXSwKIAkJZXhwZWN0ZWRfc3RkZXJyID0+CiAJCSAgcXIvbm8gT0F1dGggZmxvd3MgYXJl IGF2YWlsYWJsZSBcKHRyeSBpbnN0YWxsaW5nIHRoZSBsaWJwcS1vYXV0aCBwYWNrYWdlXCkvCkBA IC0xODksNiArMjI4LDcgQEAgZm9yZWFjaCBteSAkYyAoQGNhc2VzKQogCXRlc3QoCiAJCSJob29r IG1pc2JlaGF2aW9yOiAkYy0+eydmbGFnJ30gKHYxKSIsCiAJCWZsYWdzID0+IFsgJy12MScsICRj LT57J2ZsYWcnfSBdLAorCQlob29rX29ubHkgPT4gMSwgICAgIyBwbHVnaW5zIGNhbid0IHVzZSAt djEKIAkJZXhwZWN0ZWRfc3RkZXJyID0+ICRjLT57J2V4cGVjdGVkX2Vycm9yJ30pOwogfQogCkBA IC0yMDIsNCArMjQyLDE5IEBAIHRlc3QoCiAJZXhwZWN0ZWRfc3RkZXJyID0+CiAJICBxci91c2Vy LWRlZmluZWQgT0F1dGggZmxvdyBmYWlsZWQ6IGFzeW5jIGVycm9yIG1lc3NhZ2UvKTsKIAorU0tJ UDoKK3sKKwlza2lwICJPQXV0aCBtb2R1bGVzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxh dGZvcm0iCisJICB1bmxlc3MgJHBsdWdpbl9zdXBwb3J0ZWQ7CisKKwkjIE1ha2Ugc3VyZSBhIG1p c2FpbWVkIFBHT0FVVEhNT0RVTEUgZ2l2ZXMgdGhlIGNvcnJlY3QgZXJyb3IgbWVzc2FnZS4KKwls b2NhbCAkRU5We1BHT0FVVEhNT0RVTEV9ID0gJG5vZGUtPmJhc2VkaXIgLiAnL25vbmV4aXN0ZW50 LnNvJzsKKworCSRub2RlLT5jb25uZWN0X2ZhaWxzKAorCQkkY29tbW9uX2Nvbm5zdHIsCisJCSJQ R09BVVRITU9EVUxFIGVycm9yIG1lc3NhZ2VzIiwKKwkJZXhwZWN0ZWRfc3RkZXJyID0+CisJCSAg cXIvdXNlci1kZWZpbmVkIE9BdXRoIGZsb3cgZmFpbGVkOiBwbHVnaW4gY291bGQgbm90IGJlIGxv YWRlZC8pOworfQorCiBkb25lX3Rlc3RpbmcoKTsKLS0gCjIuMzQuMQoK --000000000000545e04064c5089cb--