Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1n7fSJ-0000Gm-MF for pgsql-hackers@arkaria.postgresql.org; Wed, 12 Jan 2022 15:22:32 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1n7fSI-0005GS-4l for pgsql-hackers@arkaria.postgresql.org; Wed, 12 Jan 2022 15:22:30 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1n7fSH-0005Fl-5A for pgsql-hackers@lists.postgresql.org; Wed, 12 Jan 2022 15:22:29 +0000 Received: from mail-vi1eur05on2095.outbound.protection.outlook.com ([40.107.21.95] helo=EUR05-VI1-obe.outbound.protection.outlook.com) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1n7fSE-0002QT-7M for pgsql-hackers@postgresql.org; Wed, 12 Jan 2022 15:22:28 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BAcNEzQsaD7liVGFdg/nxkg8AOjYnPLuJPHVOIQBSI+qS++6oOZROAcenfCJB43K+MK268vh4QUH1clF/4rd0nwzqRRjXNnwdXgTwrBeBuQzq+0eLP6hpiGIn94PZ2rEqjIAPlfjQoLOENpoB5oKYAoKXowIT1lqjklXme+eOotXq3xvlEhc+uQnagSTR3AeYFPwqNYFEkrYm1l0Dc0LVBL+oSkVJGtTmCpKSrqqikIMu8BQZfmFtLHY+38IeHamH0elvSJ/75FtvSXE8aBT2YgoBL2V3aT2tu+EdvZx3h8bEy1pt83lyQTu2NjYITxXx9VhjJeutiucr9ELNmh5gw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=7deXKhAdkf0TlX4Mqrc5PYaeGtUFYCzlfVCRVC3V7FM=; b=AfzhHjAnOTUbwcA/tpfQny9OW9P80AgHxmAux9COv+Xas317sk2WrskHuZpR60m1dMc9EC2fSoHIZwO+CcT05DivBGhGZqECvSNyhPjNkAaOrlsyeGhdUcn22ZP7BXIpoT+OdE+SnIlZ8tDhfmscswEfYAntuFbK4Jul/AU8Xuq7dQCMUogvmGiKoLt2rmSsAOtKsSk9mo0AmtzBYD2NG5KtthLJWfYmSjMrSZXSJY/R20FbjpE3GEq8r4tMqikRQ17YrQa/WqCfHv5Rr1XnEER/XTOMYwvOm1Ph8qFtu8aXPHlafA3Y9cmXgDeFCGuhp7hu2d9BYPT8Uar7N0VT0Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microsoft.com; dmarc=pass action=none header.from=microsoft.com; dkim=pass header.d=microsoft.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7deXKhAdkf0TlX4Mqrc5PYaeGtUFYCzlfVCRVC3V7FM=; b=cYdlcoPRA2PRotZJEFUZmdjt6BA2bqr8dCyq6o3AakL9D5Oznakim0pTTbVjVvOv43zCTQQS9yII9Rp33jQFSSQAl0LCMHva+v1J283tFFjQx2MIs2OAey4Wb0uMc6Xt3TO8Oq8qudLVjFPxoqjnrJ6VlpzeR4llnzb+SbejClw= Received: from AM5PR83MB0178.EURPRD83.prod.outlook.com (2603:10a6:206:25::31) by VI1PR83MB0351.EURPRD83.prod.outlook.com (2603:10a6:802:3b::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.1; Wed, 12 Jan 2022 15:22:19 +0000 Received: from AM5PR83MB0178.EURPRD83.prod.outlook.com ([fe80::94c7:60b4:5670:3b04]) by AM5PR83MB0178.EURPRD83.prod.outlook.com ([fe80::94c7:60b4:5670:3b04%5]) with mapi id 15.20.4909.001; Wed, 12 Jan 2022 15:22:19 +0000 From: Jelte Fennema To: "pgsql-hackers@postgresql.org" Subject: Add non-blocking version of PQcancel Thread-Topic: Add non-blocking version of PQcancel Thread-Index: AQHYB8aXKcs4rAmCQEStdAtwrxT5+g== Date: Wed, 12 Jan 2022 15:22:18 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Enabled=True;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SiteId=72f988bf-86f1-41af-91ab-2d7cd011db47;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SetDate=2022-01-12T15:22:18.580Z;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Name=General;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_ContentBits=0;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Method=Standard; authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=microsoft.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: fc6d3269-19c4-4fec-a409-08d9d5df52a8 x-ms-traffictypediagnostic: VI1PR83MB0351:EE_ x-ms-exchange-atpmessageproperties: SA|SL x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:800; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: v928/DnAGof8FCDtuoAP1iqtivntI7+TLonn4P9Q/TrLpCkxcB4+6aQSk9W43TNb74wgfOiwVA4jjgxuxK3H9RGu1AlR0hEzHxRPcAMLnGrmONl12oSomhu6D/H/R4a3joF9LsQujSZAefSJQC4lQWWnZHucK8k4brSmHw5aJnrxKEEK7d6OLzORnawPJMXW12nfddOFJk0JXCOmeVvdoyAAOum+ZSTgep6gHUHJ0WpmE1kQimN5XsrOpYQFivodnxtDQVr3XXfRYoUv6ZIunAYhRW7wTzboQ+98xF2DMC94Fh1NQ7S63m4prggXywyvlIz9Bj6VNElSes68jNw5qn/t7Q8a8n4Aa/iZo0soezCeT6YA9oTlCSXYKpou6++jErvpbLMIc6s/LKjK9VLXTEAjQh3L3fwS8+dDok28ZgWUFfL6VS0s8lDy0Xy3ThCTjJTBXLEBxP1E3ewmCBUJvN8XU7oc3XzcewD+/Ja3tUApP9Md5OHkxJLxk0LidFUYEu5amzrgd4/7RCSwHKAdOkxsh9xVLAPpxSFOXxvuH8l3nKfSrhvEtf4XhT5xovxnS17fjESuxAQT+taIkFWtbzlFi0KRQnYFOY6UKKSITGyEl7d/bI+Eg2aniD/PhAKCLv0P9TFyT0wg69aWxqCqcsDAkeLFRCTFUYou5xoKT/Kc6iZp8tEiGnB2g85OnGZKWfAmPl3txdlacQn3ulTUbzyJ87v7YdCdM3FGhz8czzkogPWaJuGJ+d8XlgBv2rpA x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM5PR83MB0178.EURPRD83.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(4636009)(366004)(122000001)(38070700005)(10290500003)(508600001)(66476007)(8676002)(66946007)(66556008)(55016003)(8936002)(64756008)(66446008)(26005)(186003)(99936003)(5660300002)(6916009)(76116006)(2906002)(52536014)(316002)(91956017)(86362001)(71200400001)(83380400001)(82960400001)(82950400001)(38100700002)(6506007)(33656002)(9686003)(8990500004)(7696005)(20210929001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?JfcZJwBTyAfyJNsjnZLXHZr9fTnOLT4DSlKmO/M463B+insVdKj8ZWpdfK?= =?iso-8859-1?Q?yIUQNkuHYoKZnHDF7io9ny3Ktp7TFehK/qRQXI4jwW6M8ByEibaKrXSDrj?= =?iso-8859-1?Q?ulwEeumQ5wM0bvkt+yt6ybVCrxefBfDu1AG7D+FXtlUjhMCb1hbMkk9tWa?= =?iso-8859-1?Q?HOr6HNOpnEiBZiziKsZtFJ02498micnnr1nF5ZHsEbyMIBfV6i6NrUXEjE?= =?iso-8859-1?Q?eEyjPcBdBwQkUYjQmRmlj7WkxdqlM4TVXoh30tI8T+Dt/lWcMcLW40jLKb?= =?iso-8859-1?Q?0AVJt0+i9VBXvs8gtdoLBVQJb89sZYflU2cvWbB22gSJlEsgOzBgY6ttHE?= =?iso-8859-1?Q?P6WB3Sb6o144mOu7Up6rrG29+1Zvn2WFHV0zjqVOR7pmy+aLHC/Zfr96oN?= =?iso-8859-1?Q?f4xxG4t1xZb+p1Ca4Aayds9Ajyf4U/qVG2k3M2cN2qRpL+tSLDTHOZAQml?= =?iso-8859-1?Q?Nx+L3KvQOPsXjwjWRv0hju+H2lg2y5e2zO/530cq40jr/0BhxPxQxr+/fN?= =?iso-8859-1?Q?nMvH/VKf5u8U0A3BB0CqNiGZyOLfSuTYBteVAr36xmUseYcCvY54XlrlHA?= =?iso-8859-1?Q?c/QPmZ2I5F+CnZliHS6rcqwqY07yFHEpAYY1DyaIBqUHLKwqazIWBQd+pA?= =?iso-8859-1?Q?nY3/fZgrL7AgdLaDe2CIfSM/wsRWlYfPJWuWNUnR5h4ewl+lMEA74+PS4D?= =?iso-8859-1?Q?XEtMO5ej4C8Imz3W9KhMFOAUB1UF5sZeVjPcVPvzIKR6g2s2ODtyi9sQlo?= =?iso-8859-1?Q?4gss2cBIPgubRxQnXOQSvhJICJ+L7TFPHaVy6AFUG6obMmFk0l+WAOUPfi?= =?iso-8859-1?Q?Wu/6ZfX/q+K7xdZiQfk6mgGcTJ58U8kyOpc9mHaToq2hhc8406jDEXAvSF?= =?iso-8859-1?Q?fF2DouDUb/U4YyZLL/vqri3/Lu4E0/grZtcUZhpK31Cj0teRY58h6YbG2F?= =?iso-8859-1?Q?mzwDdXGAbvqTTObGYCzwCn1bBjOtXrx9LsIu6ezXTkkZIWMwo0paXBZd8q?= =?iso-8859-1?Q?QirznSDoCdtEucuTIljNteciDcR++nq8WqwYwJbIk2XdV7lI54mMEhD0ig?= =?iso-8859-1?Q?3F6ddm1AieKzLiJpbn6aOOXB0dXfUx0k9UOFb+fTdEXfsSTFyC+eIq3hOU?= =?iso-8859-1?Q?JUotHp+joZ2y/t1TS/00Lhep1KS+6zToe3ataOgLj/l4KlBZKrOxFczctb?= =?iso-8859-1?Q?wJBZG12mmb8eJ0RY4HLrl4htwL4uHCnol2GJAwpWKiMG8xLKF0FZELsDvs?= =?iso-8859-1?Q?dTZh7bLvU3x57nrCyXBr+US6LjtTQycJXIWW9o2BdTsBIeRlY1A/kFAfQK?= =?iso-8859-1?Q?/2v1g0jNVRtadLqlRSd+wNT0Y8AVFFd/W2LEVqzIliPmxvzpdw+8QqnXn3?= =?iso-8859-1?Q?xVVOJ7u+02wlXoRglvKwdJkClUsaW0u3S42hXrzE17CCtblqaTH1+ryDtm?= =?iso-8859-1?Q?7TZgNWG7WxK4eCpMNnvNE6A3zz+fMqouPxlSkWovetvjZKIhAEYzbkTbOi?= =?iso-8859-1?Q?P4MGVwksCP2quaup9aNWm2REsOXgfAxmyxrLIDnp459QwejqWtYEs27DI/?= =?iso-8859-1?Q?9JApkGdWubbSAF7T6zC2eVYMWSaYA0y9r2Quu4to3hS1hTeWSJ834wQw83?= =?iso-8859-1?Q?OuASoby7YyNQ2FLK/qcCeh0YJS1F1BNwxaSsmhUJ8YAsAmPUmpaZCgxR/7?= =?iso-8859-1?Q?tujBo9r/JQDzA4RBy4s=3D?= Content-Type: multipart/mixed; boundary="_002_AM5PR83MB0178D3B31CA1B6EC4A8ECC42F7529AM5PR83MB0178EURP_" MIME-Version: 1.0 X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AM5PR83MB0178.EURPRD83.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: fc6d3269-19c4-4fec-a409-08d9d5df52a8 X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Jan 2022 15:22:18.9343 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: XHqfUKqp3TBAaqruIQNoC66IdeS8WASMdPfkoTZ21emGRn9cOd4UNhzpeEFoblMLe64kNUGK/yMmYhn+uxceQg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR83MB0351 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_002_AM5PR83MB0178D3B31CA1B6EC4A8ECC42F7529AM5PR83MB0178EURP_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable The existing PQcancel API is using blocking IO. This makes PQcancel=0A= impossible to use in an event loop based codebase, without blocking the=0A= event loop until the call returns.=0A= =0A= This patch adds a new cancellation API to libpq which is called=0A= PQcancelConnectionStart. This API can be used to send cancellations in a=0A= non-blocking fashion. To do this it internally uses regular PGconn=0A= connection establishment. This has as a downside that=0A= PQcancelConnectionStart cannot be safely called from a signal handler.=0A= =0A= Luckily, this should be fine for most usages of this API. Since most=0A= code that's using an event loop handles signals in that event loop as=0A= well (as opposed to calling functions from the signal handler directly).=0A= =0A= There are also a few advantages of this approach:=0A= 1. No need to add and maintain a second non-blocking connection=0A= establishment codepath.=0A= 2. Cancel connections benefit automatically from any improvements made=0A= to the normal connection establishment codepath. Examples of things=0A= that it currently gets for free currently are TLS support and=0A= keepalive settings.=0A= =0A= This patch also includes a test for this new API (and also the already=0A= existing cancellation APIs). The test can be easily run like this:=0A= =0A= cd src/test/modules/libpq_pipeline=0A= make && ./libpq_pipeline cancel=0A= =0A= NOTE: I have not tested this with GSS for the moment. My expectation is=0A= that using this new API with a GSS connection will result in a=0A= CONNECTION_BAD status when calling PQcancelStatus. The reason for this=0A= is that GSS reads will also need to communicate back that an EOF was=0A= found, just like I've done for TLS reads and unencrypted reads. Since in=0A= case of a cancel connection an EOF is actually expected, and should not=0A= be treated as an error.= --_002_AM5PR83MB0178D3B31CA1B6EC4A8ECC42F7529AM5PR83MB0178EURP_ Content-Type: application/octet-stream; name="0001-Add-non-blocking-version-of-PQcancel.patch" Content-Description: 0001-Add-non-blocking-version-of-PQcancel.patch Content-Disposition: attachment; filename="0001-Add-non-blocking-version-of-PQcancel.patch"; size=19429; creation-date="Wed, 12 Jan 2022 15:21:50 GMT"; modification-date="Wed, 12 Jan 2022 15:21:50 GMT" Content-Transfer-Encoding: base64 RnJvbSAwZTBkNzQ3YzYwZDU2NDk5MWZjMzc1ZjQzOTY0OWFjNmYzNWY0NTc4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hIDxqZWx0ZS5mZW5uZW1hQG1pY3Jvc29m dC5jb20+CkRhdGU6IFdlZCwgMTIgSmFuIDIwMjIgMDk6NTI6MDUgKzAxMDAKU3ViamVjdDogW1BB VENIXSBBZGQgbm9uLWJsb2NraW5nIHZlcnNpb24gb2YgUFFjYW5jZWwKClRoZSBleGlzdGluZyBQ UWNhbmNlbCBBUEkgaXMgdXNpbmcgYmxvY2tpbmcgSU8uIFRoaXMgbWFrZXMgUFFjYW5jZWwKaW1w b3NzaWJsZSB0byB1c2UgaW4gYW4gZXZlbnQgbG9vcCBiYXNlZCBjb2RlYmFzZSwgd2l0aG91dCBi bG9ja2luZyB0aGUKZXZlbnQgbG9vcCB1bnRpbCB0aGUgY2FsbCByZXR1cm5zLgoKVGhpcyBwYXRj aCBhZGRzIGEgbmV3IGNhbmNlbGxhdGlvbiBBUEkgdG8gbGlicHEgd2hpY2ggaXMgY2FsbGVkClBR Y2FuY2VsQ29ubmVjdGlvblN0YXJ0LiBUaGlzIEFQSSBjYW4gYmUgdXNlZCB0byBzZW5kIGNhbmNl bGxhdGlvbnMgaW4gYQpub24tYmxvY2tpbmcgZmFzaGlvbi4gVG8gZG8gdGhpcyBpdCBpbnRlcm5h bGx5IHVzZXMgcmVndWxhciBQR2Nvbm4KY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LiBUaGlzIGhh cyBhcyBhIGRvd25zaWRlIHRoYXQKUFFjYW5jZWxDb25uZWN0aW9uU3RhcnQgY2Fubm90IGJlIHNh ZmVseSBjYWxsZWQgZnJvbSBhICBzaWduYWwgaGFuZGxlci4KCkx1Y2tpbHksIHRoaXMgc2hvdWxk IGJlIGZpbmUgZm9yIG1vc3QgdXNhZ2VzIG9mIHRoaXMgQVBJLiBTaW5jZSBtb3N0CmNvZGUgdGhh dCdzIHVzaW5nIGFuIGV2ZW50IGxvb3AgaGFuZGxlcyBzaWduYWxzIGluIHRoYXQgZXZlbnQgbG9v cCBhcwp3ZWxsIChhcyBvcHBvc2VkIHRvIGNhbGxpbmcgZnVuY3Rpb25zIGZyb20gdGhlIHNpZ25h bCBoYW5kbGVyIGRpcmVjdGx5KS4KClRoZXJlIGFyZSBhbHNvIGEgZmV3IGFkdmFudGFnZXMgb2Yg dGhpcyBhcHByb2FjaDoKMS4gTm8gbmVlZCB0byBhZGQgYW5kIG1haW50YWluIGEgc2Vjb25kIG5v bi1ibG9ja2luZyBjb25uZWN0aW9uCiAgIGVzdGFibGlzaG1lbnQgY29kZXBhdGguCjIuIENhbmNl bCBjb25uZWN0aW9ucyBiZW5lZml0IGF1dG9tYXRpY2FsbHkgZnJvbSBhbnkgaW1wcm92ZW1lbnRz IG1hZGUKICAgdG8gdGhlIG5vcm1hbCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgY29kZXBhdGgu IEV4YW1wbGVzIG9mIHRoaW5ncwogICB0aGF0IGl0IGN1cnJlbnRseSBnZXRzIGZvciBmcmVlIGN1 cnJlbnRseSBhcmUgVExTIHN1cHBvcnQgYW5kCiAgIGtlZXBhbGl2ZSBzZXR0aW5ncy4KClRoaXMg cGF0Y2ggYWxzbyBpbmNsdWRlcyBhIHRlc3QgZm9yIHRoaXMgbmV3IEFQSSAoYW5kIGFsc28gdGhl IGFscmVhZHkKZXhpc3RpbmcgY2FuY2VsbGF0aW9uIEFQSXMpLiBUaGUgdGVzdCBjYW4gYmUgZWFz aWx5IHJ1biBsaWtlIHRoaXM6CgogICAgY2Qgc3JjL3Rlc3QvbW9kdWxlcy9saWJwcV9waXBlbGlu ZQogICAgbWFrZSAmJiAuL2xpYnBxX3BpcGVsaW5lIGNhbmNlbAoKTk9URTogSSBoYXZlIG5vdCB0 ZXN0ZWQgdGhpcyB3aXRoIEdTUyBmb3IgdGhlIG1vbWVudC4gTXkgZXhwZWN0YXRpb24gaXMKdGhh dCB1c2luZyB0aGlzIG5ldyBBUEkgd2l0aCBhIEdTUyBjb25uZWN0aW9uIHdpbGwgcmVzdWx0IGlu IGEKQ09OTkVDVElPTl9CQUQgc3RhdHVzIHdoZW4gY2FsbGluZyBQUWNhbmNlbFN0YXR1cy4gVGhl IHJlYXNvbiBmb3IgdGhpcwppcyB0aGF0IEdTUyByZWFkcyB3aWxsIGFsc28gbmVlZCB0byBjb21t dW5pY2F0ZSBiYWNrIHRoYXQgYW4gRU9GIHdhcwpmb3VuZCwganVzdCBsaWtlIEkndmUgZG9uZSBm b3IgVExTIHJlYWRzIGFuZCB1bmVuY3J5cHRlZCByZWFkcy4gU2luY2UgaW4KY2FzZSBvZiBhIGNh bmNlbCBjb25uZWN0aW9uIGFuIEVPRiBpcyBhY3R1YWxseSBleHBlY3RlZCwgYW5kIHNob3VsZCBu b3QKYmUgdHJlYXRlZCBhcyBhbiBlcnJvci4KLS0tCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9leHBv cnRzLnR4dCAgICAgICAgICAgICAgfCAgIDcgKwogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY29u bmVjdC5jICAgICAgICAgICAgIHwgMTkyICsrKysrKysrKysrKysrKysrLQogc3JjL2ludGVyZmFj ZXMvbGlicHEvZmUtbWlzYy5jICAgICAgICAgICAgICAgIHwgIDE1ICstCiBzcmMvaW50ZXJmYWNl cy9saWJwcS9mZS1zZWN1cmUtb3BlbnNzbC5jICAgICAgfCAgIDIgKy0KIHNyYy9pbnRlcmZhY2Vz L2xpYnBxL2ZlLXNlY3VyZS5jICAgICAgICAgICAgICB8ICAgMyArCiBzcmMvaW50ZXJmYWNlcy9s aWJwcS9saWJwcS1mZS5oICAgICAgICAgICAgICAgfCAgMTMgKysKIHNyYy9pbnRlcmZhY2VzL2xp YnBxL2xpYnBxLWludC5oICAgICAgICAgICAgICB8ICAgOCArCiAuLi4vbW9kdWxlcy9saWJwcV9w aXBlbGluZS9saWJwcV9waXBlbGluZS5jICAgfCAxMTUgKysrKysrKysrKy0KIC4uLi9saWJwcV9w aXBlbGluZS90LzAwMV9saWJwcV9waXBlbGluZS5wbCAgICB8ICAgMiArLQogOSBmaWxlcyBjaGFu Z2VkLCAzNDggaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv aW50ZXJmYWNlcy9saWJwcS9leHBvcnRzLnR4dCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2V4cG9y dHMudHh0CmluZGV4IGU4YmNjODgzNzAuLjY0MzY0YWZlYWYgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRl cmZhY2VzL2xpYnBxL2V4cG9ydHMudHh0CisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2V4cG9y dHMudHh0CkBAIC0xODYsMyArMTg2LDEwIEBAIFBRcGlwZWxpbmVTdGF0dXMgICAgICAgICAgMTgz CiBQUXNldFRyYWNlRmxhZ3MgICAgICAgICAgIDE4NAogUFFtYmxlbkJvdW5kZWQgICAgICAgICAg ICAxODUKIFBRc2VuZEZsdXNoUmVxdWVzdCAgICAgICAgMTg2CitQUWNhbmNlbENvbm5lY3QgICAg ICAgICAgIDE4NworUFFjYW5jZWxDb25uZWN0U3RhcnQgICAgICAxODgKK1BRY2FuY2VsQ29ubmVj dFBvbGwgICAgICAgMTg5CitQUWNhbmNlbFN0YXR1cyAgICAgICAgICAgIDE4OQorUFFjYW5jZWxT b2NrZXQgICAgICAgICAgICAxOTAKK1BRY2FuY2VsRXJyb3JNZXNzYWdlICAgICAgMTkxCitQUWNh bmNlbEZpbmlzaCAgICAgICAgICAgIDE5MgpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGli cHEvZmUtY29ubmVjdC5jIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY29ubmVjdC5jCmluZGV4 IDVmYzE2YmU4NDkuLjM0N2QzMmFkNWYgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBx L2ZlLWNvbm5lY3QuYworKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMKQEAg LTM3OCw2ICszNzgsNyBAQCBzdGF0aWMgaW50CWNvbm5lY3REQkNvbXBsZXRlKFBHY29ubiAqY29u bik7CiBzdGF0aWMgUEdQaW5nIGludGVybmFsX3BpbmcoUEdjb25uICpjb25uKTsKIHN0YXRpYyBQ R2Nvbm4gKm1ha2VFbXB0eVBHY29ubih2b2lkKTsKIHN0YXRpYyBib29sIGZpbGxQR2Nvbm4oUEdj b25uICpjb25uLCBQUWNvbm5pbmZvT3B0aW9uICpjb25uT3B0aW9ucyk7CitzdGF0aWMgYm9vbCBj b3B5UEdjb25uKFBHY29ubiAqc3JjQ29ubiwgUEdjb25uICpkc3RDb25uKTsKIHN0YXRpYyB2b2lk IGZyZWVQR2Nvbm4oUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lkIGNsb3NlUEdjb25uKFBHY29u biAqY29ubik7CiBzdGF0aWMgdm9pZCByZWxlYXNlX2Nvbm5fYWRkcmluZm8oUEdjb25uICpjb25u KTsKQEAgLTYwNCw4ICs2MDUsMTEgQEAgcHFEcm9wU2VydmVyRGF0YShQR2Nvbm4gKmNvbm4pCiAJ aWYgKGNvbm4tPndyaXRlX2Vycl9tc2cpCiAJCWZyZWUoY29ubi0+d3JpdGVfZXJyX21zZyk7CiAJ Y29ubi0+d3JpdGVfZXJyX21zZyA9IE5VTEw7Ci0JY29ubi0+YmVfcGlkID0gMDsKLQljb25uLT5i ZV9rZXkgPSAwOworCWlmICghY29ubi0+Y2FuY2VsUmVxdWVzdCkKKwl7CisJCWNvbm4tPmJlX3Bp ZCA9IDA7CisJCWNvbm4tPmJlX2tleSA9IDA7CisJfQogfQogCiAKQEAgLTczNyw2ICs3NDEsMTIw IEBAIFBRcGluZyhjb25zdCBjaGFyICpjb25uaW5mbykKIAlyZXR1cm4gcmV0OwogfQogCisvKgor ICoJCVBRY2FuY2VsQ29ubmVjdFN0YXJ0CisgKgorICogQXN5bmNocm9ub3VzbHkgY2FuY2VsIGEg cmVxdWVzdCBvbiB0aGUgZ2l2ZW4gY29ubmVjdGlvbi4gVGhpcyByZXF1aXJlcworICogcG9sbGlu ZyB0aGUgcmV0dXJuZWQgUEdjb25uIHRvIGFjdHVhbGx5IGNvbXBsZXRlIHRoZSBjYW5jZWxsYXRp b24gb2YgdGhlCisgKiByZXF1ZXN0LgorICovCitQR2NhbmNlbENvbm4gKgorUFFjYW5jZWxDb25u ZWN0U3RhcnQoUEdjb25uICpjb25uKQoreworCVBHY29ubgkgICAqY2FuY2VsQ29ubiA9IG1ha2VF bXB0eVBHY29ubigpOworCisJaWYgKGNhbmNlbENvbm4gPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7 CisKKwkvKgorCSAqIEluZGljYXRlIHRoYXQgdGhpcyBjb25uZWN0aW9uIGlzIHVzZWQgdG8gc2Vu ZCBhIGNhbmNlbGxhdGlvbgorCSAqLworCWNhbmNlbENvbm4tPmNhbmNlbFJlcXVlc3QgPSB0cnVl OworCisJaWYgKCFjb3B5UEdjb25uKGNvbm4sIGNhbmNlbENvbm4pKQorCQlyZXR1cm4gKFBHY2Fu Y2VsQ29ubiAqKSBjYW5jZWxDb25uOworCisJLyoKKwkgKiBDb3B5IG92ZXIgaW5mb3JtYXRpb24g bmVlZGVkIHRvIGNhbmNlbAorCSAqLworCWNhbmNlbENvbm4tPmJlX3BpZCA9IGNvbm4tPmJlX3Bp ZDsKKwljYW5jZWxDb25uLT5iZV9rZXkgPSBjb25uLT5iZV9rZXk7CisKKwkvKgorCSAqIENvbXB1 dGUgZGVyaXZlZCBvcHRpb25zCisJICovCisJaWYgKCFjb25uZWN0T3B0aW9uczIoY2FuY2VsQ29u bikpCisJCXJldHVybiAoUEdjYW5jZWxDb25uICopIGNhbmNlbENvbm47CisKKwkvKgorCSAqIENv bm5lY3QgdG8gdGhlIGRhdGFiYXNlCisJICovCisJaWYgKCFjb25uZWN0REJTdGFydChjYW5jZWxD b25uKSkKKwl7CisJCS8qIEp1c3QgaW4gY2FzZSB3ZSBmYWlsZWQgdG8gc2V0IGl0IGluIGNvbm5l Y3REQlN0YXJ0ICovCisJCWNhbmNlbENvbm4tPnN0YXR1cyA9IENPTk5FQ1RJT05fQkFEOworCX0K KworCXJldHVybiAoUEdjYW5jZWxDb25uICopIGNhbmNlbENvbm47Cit9CisKKy8qCisgKgkJUFFj YW5jZWxDb25uZWN0CisgKgorICogQ2FuY2VsIGEgcmVxdWVzdCBvbiB0aGUgZ2l2ZW4gY29ubmVj dGlvbgorICovCitQR2NhbmNlbENvbm4gKgorUFFjYW5jZWxDb25uZWN0KFBHY29ubiAqY29ubikK K3sKKwlQR2NhbmNlbENvbm4gKmNhbmNlbENvbm4gPSBQUWNhbmNlbENvbm5lY3RTdGFydChjb25u KTsKKworCWlmIChjYW5jZWxDb25uICYmIGNhbmNlbENvbm4tPmNvbm4uc3RhdHVzICE9IENPTk5F Q1RJT05fQkFEKQorCQkodm9pZCkgY29ubmVjdERCQ29tcGxldGUoJmNhbmNlbENvbm4tPmNvbm4p OworCisJcmV0dXJuIGNhbmNlbENvbm47Cit9CisKKy8qCisgKgkJUFFjYW5jZWxDb25uZWN0UG9s bAorICoKKyAqIFBvbGwgYSBjYW5jZWwgY29ubmVjdGlvbi4gRm9yIHVzYWdlIGRldGFpbHMgc2Vl IHRoZSBQUWNvbm5lY3RQb2xsLgorICovCitQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlCitQUWNh bmNlbENvbm5lY3RQb2xsKFBHY2FuY2VsQ29ubiAqIGNhbmNlbENvbm4pCit7CisJcmV0dXJuIFBR Y29ubmVjdFBvbGwoKFBHY29ubiAqKSBjYW5jZWxDb25uKTsKK30KKworLyoKKyAqCQlQUWNhbmNl bFN0YXR1cworICoKKyAqIEdldCB0aGUgc3RhdHVzIG9mIGEgY2FuY2VsIGNvbm5lY3Rpb24uCisg Ki8KK0Nvbm5TdGF0dXNUeXBlCitQUWNhbmNlbFN0YXR1cyhjb25zdCBQR2NhbmNlbENvbm4gKiBj YW5jZWxDb25uKQoreworCXJldHVybiBQUXN0YXR1cygoUEdjb25uICopIGNhbmNlbENvbm4pOwor fQorCisvKgorICoJCVBRY2FuY2VsU29ja2V0CisgKgorICogR2V0IHRoZSBzb2NrZXQgb2YgdGhl IGNhbmNlbCBjb25uZWN0aW9uLgorICovCitpbnQKK1BRY2FuY2VsU29ja2V0KGNvbnN0IFBHY2Fu Y2VsQ29ubiAqIGNhbmNlbENvbm4pCit7CisJcmV0dXJuIFBRc29ja2V0KChQR2Nvbm4gKikgY2Fu Y2VsQ29ubik7Cit9CisKKy8qCisgKgkJUFFjYW5jZWxFcnJvck1lc3NhZ2UKKyAqCisgKiBHZXQg dGhlIHNvY2tldCBvZiB0aGUgY2FuY2VsIGNvbm5lY3Rpb24uCisgKi8KK2NoYXIgKgorUFFjYW5j ZWxFcnJvck1lc3NhZ2UoY29uc3QgUEdjYW5jZWxDb25uICogY2FuY2VsQ29ubikKK3sKKwlyZXR1 cm4gUFFlcnJvck1lc3NhZ2UoKFBHY29ubiAqKSBjYW5jZWxDb25uKTsKK30KKwordm9pZAorUFFj YW5jZWxGaW5pc2goUEdjYW5jZWxDb25uICogY2FuY2VsQ29ubikKK3sKKwlQUWZpbmlzaCgoUEdj b25uICopIGNhbmNlbENvbm4pOworfQorCisKIC8qCiAgKgkJUFFjb25uZWN0U3RhcnRQYXJhbXMK ICAqCkBAIC05MTQsNiArMTAzMiw0NiBAQCBmaWxsUEdjb25uKFBHY29ubiAqY29ubiwgUFFjb25u aW5mb09wdGlvbiAqY29ubk9wdGlvbnMpCiAJcmV0dXJuIHRydWU7CiB9CiAKKy8qCisgKiBDb3B5 IG92ZXIgb3B0aW9uIHZhbHVlcyBmcm9tIHNyY0Nvbm4gdG8gZHN0Q29ubgorICoKKyAqIERvbid0 IHB1dCBhbnl0aGluZyBjdXRlIGhlcmUgLS0tIGludGVsbGlnZW5jZSBzaG91bGQgYmUgaW4KKyAq IGNvbm5lY3RPcHRpb25zMiAuLi4KKyAqCisgKiBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4gT24g ZmFpbHVyZSwgcmV0dXJucyBmYWxzZSBhbmQgc2V0cyBlcnJvciBtZXNzYWdlIG9mCisgKiBkc3RD b25uLgorICovCitzdGF0aWMgYm9vbAorY29weVBHY29ubihQR2Nvbm4gKnNyY0Nvbm4sIFBHY29u biAqZHN0Q29ubikKK3sKKwljb25zdCBpbnRlcm5hbFBRY29ubmluZm9PcHRpb24gKm9wdGlvbjsK KworCS8qIGNvcHkgb3ZlciBjb25uZWN0aW9uIG9wdGlvbnMgKi8KKwlmb3IgKG9wdGlvbiA9IFBR Y29ubmluZm9PcHRpb25zOyBvcHRpb24tPmtleXdvcmQ7IG9wdGlvbisrKQorCXsKKwkJaWYgKG9w dGlvbi0+Y29ubm9mcyA+PSAwKQorCQl7CisJCQljb25zdCBjaGFyICoqdG1wID0gKGNvbnN0IGNo YXIgKiopICgoY2hhciAqKSBzcmNDb25uICsgb3B0aW9uLT5jb25ub2ZzKTsKKworCQkJaWYgKCp0 bXApCisJCQl7CisJCQkJY2hhcgkgICoqZHN0Q29ubm1lbWJlciA9IChjaGFyICoqKSAoKGNoYXIg KikgZHN0Q29ubiArIG9wdGlvbi0+Y29ubm9mcyk7CisKKwkJCQlpZiAoKmRzdENvbm5tZW1iZXIp CisJCQkJCWZyZWUoKmRzdENvbm5tZW1iZXIpOworCQkJCSpkc3RDb25ubWVtYmVyID0gc3RyZHVw KCp0bXApOworCQkJCWlmICgqZHN0Q29ubm1lbWJlciA9PSBOVUxMKQorCQkJCXsKKwkJCQkJYXBw ZW5kUFFFeHBCdWZmZXJTdHIoJmRzdENvbm4tPmVycm9yTWVzc2FnZSwKKwkJCQkJCQkJCQkgbGli cHFfZ2V0dGV4dCgib3V0IG9mIG1lbW9yeVxuIikpOworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJ fQorCQkJfQorCQl9CisJfQorCXJldHVybiB0cnVlOworfQorCiAvKgogICoJCWNvbm5lY3RPcHRp b25zMQogICoKQEAgLTIyNzYsNiArMjQzNCwxNyBAQCBQUWNvbm5lY3RQb2xsKFBHY29ubiAqY29u bikKIAkJCQkvKiBMb2FkIHdhaXRpbmcgZGF0YSAqLwogCQkJCWludAkJCW4gPSBwcVJlYWREYXRh KGNvbm4pOwogCisJCQkJaWYgKG4gPT0gLTIgJiYgY29ubi0+Y2FuY2VsUmVxdWVzdCkKKwkJCQl7 CisJCQkJCS8qCisJCQkJCSAqIFRoaXMgaXMgdGhlIGV4cGVjdGVkIGVuZCBzdGF0ZSBmb3IgY2Fu Y2VsIGNvbm5lY3Rpb25zLgorCQkJCQkgKiBUaGV5IGFyZSBjbG9zZWQgb25jZSB0aGUgY2FuY2Vs IGlzIHByb2Nlc3NlZCBieSB0aGUKKwkJCQkJICogc2VydmVyLgorCQkJCQkgKi8KKwkJCQkJY29u bi0+c3RhdHVzID0gQ09OTkVDVElPTl9DQU5DRUxfRklOSVNIRUQ7CisJCQkJCXJlc2V0UFFFeHBC dWZmZXIoJmNvbm4tPmVycm9yTWVzc2FnZSk7CisJCQkJCXJldHVybiBQR1JFU19QT0xMSU5HX09L OworCQkJCX0KIAkJCQlpZiAobiA8IDApCiAJCQkJCWdvdG8gZXJyb3JfcmV0dXJuOwogCQkJCWlm IChuID09IDApCkBAIC0yOTUwLDYgKzMxMTksMjUgQEAga2VlcF9nb2luZzoJCQkJCQkvKiBXZSB3 aWxsIGNvbWUgYmFjayB0byBoZXJlIHVudGlsIHRoZXJlIGlzCiAJCQkJfQogI2VuZGlmCQkJCQkJ CS8qIFVTRV9TU0wgKi8KIAorCQkJCWlmIChjb25uLT5jYW5jZWxSZXF1ZXN0KQorCQkJCXsKKwkJ CQkJQ2FuY2VsUmVxdWVzdFBhY2tldCBjYW5jZWxwYWNrZXQ7CisKKwkJCQkJcGFja2V0bGVuID0g c2l6ZW9mKGNhbmNlbHBhY2tldCk7CisJCQkJCWNhbmNlbHBhY2tldC5jYW5jZWxSZXF1ZXN0Q29k ZSA9IChNc2dUeXBlKSBwZ19odG9uMzIoQ0FOQ0VMX1JFUVVFU1RfQ09ERSk7CisJCQkJCWNhbmNl bHBhY2tldC5iYWNrZW5kUElEID0gcGdfaHRvbjMyKGNvbm4tPmJlX3BpZCk7CisJCQkJCWNhbmNl bHBhY2tldC5jYW5jZWxBdXRoQ29kZSA9IHBnX2h0b24zMihjb25uLT5iZV9rZXkpOworCQkJCQlp ZiAocHFQYWNrZXRTZW5kKGNvbm4sIDAsICZjYW5jZWxwYWNrZXQsIHBhY2tldGxlbikgIT0gU1RB VFVTX09LKQorCQkJCQl7CisJCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmY29ubi0+ZXJyb3JNZXNz YWdlLAorCQkJCQkJCQkJCSAgbGlicHFfZ2V0dGV4dCgiY291bGQgbm90IHNlbmQgY2FuY2VsIHBh Y2tldDogJXNcbiIpLAorCQkJCQkJCQkJCSAgU09DS19TVFJFUlJPUihTT0NLX0VSUk5PLCBzZWJ1 Ziwgc2l6ZW9mKHNlYnVmKSkpOworCQkJCQkJZ290byBlcnJvcl9yZXR1cm47CisJCQkJCX0KKwkJ CQkJY29ubi0+c3RhdHVzID0gQ09OTkVDVElPTl9BV0FJVElOR19SRVNQT05TRTsKKwkJCQkJcmV0 dXJuIFBHUkVTX1BPTExJTkdfUkVBRElORzsKKwkJCQl9CisKIAkJCQkvKgogCQkJCSAqIEJ1aWxk IHRoZSBzdGFydHVwIHBhY2tldC4KIAkJCQkgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2Vz L2xpYnBxL2ZlLW1pc2MuYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLW1pc2MuYwppbmRleCA3 ZmNmZTA4ZmQyLi5hOTVkNjNmZmNkIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9m ZS1taXNjLmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtbWlzYy5jCkBAIC01NTgsOCAr NTU4LDExIEBAIHBxUHV0TXNnRW5kKFBHY29ubiAqY29ubikKICAqIFBvc3NpYmxlIHJldHVybiB2 YWx1ZXM6CiAgKgkgMTogc3VjY2Vzc2Z1bGx5IGxvYWRlZCBhdCBsZWFzdCBvbmUgbW9yZSBieXRl CiAgKgkgMDogbm8gZGF0YSBpcyBwcmVzZW50bHkgYXZhaWxhYmxlLCBidXQgbm8gZXJyb3IgZGV0 ZWN0ZWQKLSAqCS0xOiBlcnJvciBkZXRlY3RlZCAoaW5jbHVkaW5nIEVPRiA9IGNvbm5lY3Rpb24g Y2xvc3VyZSk7CisgKgktMTogZXJyb3IgZGV0ZWN0ZWQgKGV4Y2x1ZGluZyBFT0YgPSBjb25uZWN0 aW9uIGNsb3N1cmUpOwogICoJCWNvbm4tPmVycm9yTWVzc2FnZSBzZXQKKyAqCS0yOiBFT0YgZGV0 ZWN0ZWQsIGNvbm5lY3Rpb24gaXMgY2xvc2VkCisgKgkJY29ubi0+ZXJyb3JNZXNzYWdlIHNldAor ICoKICAqIE5PVEU6IGNhbGxlcnMgbXVzdCBub3QgYXNzdW1lIHRoYXQgcG9pbnRlcnMgb3IgaW5k ZXhlcyBpbnRvIGNvbm4tPmluQnVmZmVyCiAgKiByZW1haW4gdmFsaWQgYWNyb3NzIHRoaXMgY2Fs bCEKICAqIC0tLS0tLS0tLS0KQEAgLTY0Miw3ICs2NDUsNyBAQCByZXRyeTM6CiAKIAkJCWRlZmF1 bHQ6CiAJCQkJLyogcHFzZWN1cmVfcmVhZCBzZXQgdGhlIGVycm9yIG1lc3NhZ2UgZm9yIHVzICov Ci0JCQkJcmV0dXJuIC0xOworCQkJCXJldHVybiBucmVhZDsKIAkJfQogCX0KIAlpZiAobnJlYWQg PiAwKQpAQCAtNzM3LDcgKzc0MCw3IEBAIHJldHJ5NDoKIAogCQkJZGVmYXVsdDoKIAkJCQkvKiBw cXNlY3VyZV9yZWFkIHNldCB0aGUgZXJyb3IgbWVzc2FnZSBmb3IgdXMgKi8KLQkJCQlyZXR1cm4g LTE7CisJCQkJcmV0dXJuIG5yZWFkOwogCQl9CiAJfQogCWlmIChucmVhZCA+IDApCkBAIC03NTUs MTMgKzc1OCwxNyBAQCBkZWZpbml0ZWx5RU9GOgogCQkJCQkJIGxpYnBxX2dldHRleHQoInNlcnZl ciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gdW5leHBlY3RlZGx5XG4iCiAJCQkJCQkJCQkgICAiXHRU aGlzIHByb2JhYmx5IG1lYW5zIHRoZSBzZXJ2ZXIgdGVybWluYXRlZCBhYm5vcm1hbGx5XG4iCiAJ CQkJCQkJCQkgICAiXHRiZWZvcmUgb3Igd2hpbGUgcHJvY2Vzc2luZyB0aGUgcmVxdWVzdC5cbiIp KTsKKwkvKiBEbyAqbm90KiBkcm9wIGFueSBhbHJlYWR5LXJlYWQgZGF0YTsgY2FsbGVyIHN0aWxs IHdhbnRzIGl0ICovCisJcHFEcm9wQ29ubmVjdGlvbihjb25uLCBmYWxzZSk7CisJY29ubi0+c3Rh dHVzID0gQ09OTkVDVElPTl9CQUQ7CS8qIE5vIG1vcmUgY29ubmVjdGlvbiB0byBiYWNrZW5kICov CisJcmV0dXJuIC0yOwogCiAJLyogQ29tZSBoZXJlIGlmIGxvd2VyLWxldmVsIGNvZGUgYWxyZWFk eSBzZXQgYSBzdWl0YWJsZSBlcnJvck1lc3NhZ2UgKi8KIGRlZmluaXRlbHlGYWlsZWQ6CiAJLyog RG8gKm5vdCogZHJvcCBhbnkgYWxyZWFkeS1yZWFkIGRhdGE7IGNhbGxlciBzdGlsbCB3YW50cyBp dCAqLwogCXBxRHJvcENvbm5lY3Rpb24oY29ubiwgZmFsc2UpOwogCWNvbm4tPnN0YXR1cyA9IENP Tk5FQ1RJT05fQkFEOwkvKiBObyBtb3JlIGNvbm5lY3Rpb24gdG8gYmFja2VuZCAqLwotCXJldHVy biAtMTsKKwlyZXR1cm4gbnJlYWQgPCAwID8gbnJlYWQgOiAtMTsKIH0KIAogLyoKZGlmZiAtLWdp dCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLXNlY3VyZS1vcGVuc3NsLmMgYi9zcmMvaW50ZXJm YWNlcy9saWJwcS9mZS1zZWN1cmUtb3BlbnNzbC5jCmluZGV4IDlmNzM1YmE0MzcuLjNjZDY1ZmEy NzYgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLXNlY3VyZS1vcGVuc3NsLmMK KysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtc2VjdXJlLW9wZW5zc2wuYwpAQCAtMjUyLDcg KzI1Miw3IEBAIHJsb29wOgogCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVz c2FnZSwKIAkJCQkJCQkJIGxpYnBxX2dldHRleHQoIlNTTCBjb25uZWN0aW9uIGhhcyBiZWVuIGNs b3NlZCB1bmV4cGVjdGVkbHlcbiIpKTsKIAkJCXJlc3VsdF9lcnJubyA9IEVDT05OUkVTRVQ7Ci0J CQluID0gLTE7CisJCQluID0gLTI7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWFwcGVuZFBR RXhwQnVmZmVyKCZjb25uLT5lcnJvck1lc3NhZ2UsCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNl cy9saWJwcS9mZS1zZWN1cmUuYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLXNlY3VyZS5jCmlu ZGV4IDBiOTk4ZTI1NGQuLmIyYzY2ZjQ3YTUgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xp YnBxL2ZlLXNlY3VyZS5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLXNlY3VyZS5jCkBA IC0yMDEsNiArMjAxLDkgQEAgcHFzZWN1cmVfY2xvc2UoUEdjb25uICpjb25uKQogICogT24gZmFp bHVyZSwgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgYXBwZW5kaW5nIGEgc3VpdGFi bGUgbWVzc2FnZQogICogdG8gY29ubi0+ZXJyb3JNZXNzYWdlLiAgVGhlIGNhbGxlciBtdXN0IHN0 aWxsIGluc3BlY3QgZXJybm8sIGJ1dCBvbmx5CiAgKiB0byBkZXRlcm1pbmUgd2hldGhlciB0byBj b250aW51ZS9yZXRyeSBhZnRlciBlcnJvci4KKyAqCisgKiBSZXR1cm5zIC0xIGluIGNhc2Ugb2Yg ZmFpbHVyZXMsIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBjbGVhbiBjb25uZWN0aW9uCisgKiBjbG9z dXJlIHRoZW4gaXQgcmV0dXJucyAtMi4KICAqLwogc3NpemVfdAogcHFzZWN1cmVfcmVhZChQR2Nv bm4gKmNvbm4sIHZvaWQgKnB0ciwgc2l6ZV90IGxlbikKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZh Y2VzL2xpYnBxL2xpYnBxLWZlLmggYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1mZS5oCmlu ZGV4IDIwZWI4NTVhYmMuLjM5YWVkNWRiM2UgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xp YnBxL2xpYnBxLWZlLmgKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtZmUuaApAQCAt NTcsNiArNTcsNyBAQCB0eXBlZGVmIGVudW0KIHsKIAlDT05ORUNUSU9OX09LLAogCUNPTk5FQ1RJ T05fQkFELAorCUNPTk5FQ1RJT05fQ0FOQ0VMX0ZJTklTSEVELAogCS8qIE5vbi1ibG9ja2luZyBt b2RlIG9ubHkgYmVsb3cgaGVyZSAqLwogCiAJLyoKQEAgLTE2Myw2ICsxNjQsMTEgQEAgdHlwZWRl ZiBlbnVtCiAgKi8KIHR5cGVkZWYgc3RydWN0IHBnX2Nvbm4gUEdjb25uOwogCisvKiBQR2NhbmNl bENvbm4gZW5jYXBzdWxhdGVzIGEgY2FuY2VsIGNvbm5lY3Rpb24gdG8gdGhlIGJhY2tlbmQuCisg KiBUaGUgY29udGVudHMgb2YgdGhpcyBzdHJ1Y3QgYXJlIG5vdCBzdXBwb3NlZCB0byBiZSBrbm93 biB0byBhcHBsaWNhdGlvbnMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBnX2NhbmNlbF9jb25uIFBH Y2FuY2VsQ29ubjsKKwogLyogUEdyZXN1bHQgZW5jYXBzdWxhdGVzIHRoZSByZXN1bHQgb2YgYSBx dWVyeSAob3IgbW9yZSBwcmVjaXNlbHksIG9mIGEgc2luZ2xlCiAgKiBTUUwgY29tbWFuZCAtLS0g YSBxdWVyeSBzdHJpbmcgZ2l2ZW4gdG8gUFFzZW5kUXVlcnkgY2FuIGNvbnRhaW4gbXVsdGlwbGUK ICAqIGNvbW1hbmRzIGFuZCB0aHVzIHJldHVybiBtdWx0aXBsZSBQR3Jlc3VsdCBvYmplY3RzKS4K QEAgLTMyNyw2ICszMzMsMTMgQEAgZXh0ZXJuIHZvaWQgUFFmcmVlQ2FuY2VsKFBHY2FuY2VsICpj YW5jZWwpOwogCiAvKiBpc3N1ZSBhIGNhbmNlbCByZXF1ZXN0ICovCiBleHRlcm4gaW50CVBRY2Fu Y2VsKFBHY2FuY2VsICpjYW5jZWwsIGNoYXIgKmVycmJ1ZiwgaW50IGVycmJ1ZnNpemUpOworZXh0 ZXJuIFBHY2FuY2VsQ29ubiAqIFBRY2FuY2VsQ29ubmVjdFN0YXJ0KFBHY29ubiAqY29ubik7Citl eHRlcm4gUEdjYW5jZWxDb25uICogUFFjYW5jZWxDb25uZWN0KFBHY29ubiAqY29ubik7CitleHRl cm4gUG9zdGdyZXNQb2xsaW5nU3RhdHVzVHlwZSBQUWNhbmNlbENvbm5lY3RQb2xsKFBHY2FuY2Vs Q29ubiAqIGNhbmNlbENvbm4pOworZXh0ZXJuIENvbm5TdGF0dXNUeXBlIFBRY2FuY2VsU3RhdHVz KGNvbnN0IFBHY2FuY2VsQ29ubiAqIGNhbmNlbENvbm4pOworZXh0ZXJuIGludAlQUWNhbmNlbFNv Y2tldChjb25zdCBQR2NhbmNlbENvbm4gKiBjYW5jZWxDb25uKTsKK2V4dGVybiBjaGFyICpQUWNh bmNlbEVycm9yTWVzc2FnZShjb25zdCBQR2NhbmNlbENvbm4gKiBjYW5jZWxDb25uKTsKK2V4dGVy biB2b2lkIFBRY2FuY2VsRmluaXNoKFBHY2FuY2VsQ29ubiAqIGNhbmNlbENvbm4pOwogCiAvKiBi YWNrd2FyZHMgY29tcGF0aWJsZSB2ZXJzaW9uIG9mIFBRY2FuY2VsOyBub3QgdGhyZWFkLXNhZmUg Ki8KIGV4dGVybiBpbnQJUFFyZXF1ZXN0Q2FuY2VsKFBHY29ubiAqY29ubik7CmRpZmYgLS1naXQg YS9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1pbnQuaCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBx L2xpYnBxLWludC5oCmluZGV4IGZjY2UxMzg0M2UuLjhhZjNkZDBlZTcgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWludC5oCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBx L2xpYnBxLWludC5oCkBAIC0zOTQsNiArMzk0LDggQEAgc3RydWN0IHBnX2Nvbm4KIAljaGFyCSAg ICpzc2xfbWF4X3Byb3RvY29sX3ZlcnNpb247CS8qIG1heGltdW0gVExTIHByb3RvY29sIHZlcnNp b24gKi8KIAljaGFyCSAgICp0YXJnZXRfc2Vzc2lvbl9hdHRyczsJLyogZGVzaXJlZCBzZXNzaW9u IHByb3BlcnRpZXMgKi8KIAorCWJvb2wJCWNhbmNlbFJlcXVlc3Q7CisKIAkvKiBPcHRpb25hbCBm aWxlIHRvIHdyaXRlIHRyYWNlIGluZm8gdG8gKi8KIAlGSUxFCSAgICpQZmRlYnVnOwogCWludAkJ CXRyYWNlRmxhZ3M7CkBAIC01NzQsNiArNTc2LDExIEBAIHN0cnVjdCBwZ19jb25uCiAJUFFFeHBC dWZmZXJEYXRhIHdvcmtCdWZmZXI7IC8qIGV4cGFuc2libGUgc3RyaW5nICovCiB9OwogCitzdHJ1 Y3QgcGdfY2FuY2VsX2Nvbm4KK3sKKwlQR2Nvbm4JCWNvbm47Cit9OworCiAvKiBQR2NhbmNlbCBz dG9yZXMgYWxsIGRhdGEgbmVjZXNzYXJ5IHRvIGNhbmNlbCBhIGNvbm5lY3Rpb24uIEEgY29weSBv ZiB0aGlzCiAgKiBkYXRhIGlzIHJlcXVpcmVkIHRvIHNhZmVseSBjYW5jZWwgYSBjb25uZWN0aW9u IHJ1bm5pbmcgb24gYSBkaWZmZXJlbnQKICAqIHRocmVhZC4KQEAgLTY5MSw2ICs2OTgsNyBAQCBl eHRlcm4gaW50CXBxUHV0SW50KGludCB2YWx1ZSwgc2l6ZV90IGJ5dGVzLCBQR2Nvbm4gKmNvbm4p OwogZXh0ZXJuIGludAlwcVB1dE1zZ1N0YXJ0KGNoYXIgbXNnX3R5cGUsIFBHY29ubiAqY29ubik7 CiBleHRlcm4gaW50CXBxUHV0TXNnRW5kKFBHY29ubiAqY29ubik7CiBleHRlcm4gaW50CXBxUmVh ZERhdGEoUEdjb25uICpjb25uKTsKK2V4dGVybiBpbnQJcHFSZWFkRGF0YU9yRW9mKFBHY29ubiAq Y29ubik7CiBleHRlcm4gaW50CXBxRmx1c2goUEdjb25uICpjb25uKTsKIGV4dGVybiBpbnQJcHFX YWl0KGludCBmb3JSZWFkLCBpbnQgZm9yV3JpdGUsIFBHY29ubiAqY29ubik7CiBleHRlcm4gaW50 CXBxV2FpdFRpbWVkKGludCBmb3JSZWFkLCBpbnQgZm9yV3JpdGUsIFBHY29ubiAqY29ubiwKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvbGlicHFfcGlwZWxpbmUvbGlicHFfcGlwZWxpbmUu YyBiL3NyYy90ZXN0L21vZHVsZXMvbGlicHFfcGlwZWxpbmUvbGlicHFfcGlwZWxpbmUuYwppbmRl eCAwZmY1NjNmNTlhLi4yNzE4OGQ0M2JiIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL2xp YnBxX3BpcGVsaW5lL2xpYnBxX3BpcGVsaW5lLmMKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9saWJw cV9waXBlbGluZS9saWJwcV9waXBlbGluZS5jCkBAIC04Niw2ICs4NiwxMTYgQEAgcGdfZmF0YWxf aW1wbChpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LC4uLikKIAlleGl0KDEpOwogfQogCitzdGF0 aWMgdm9pZAorY29uZmlybV9xdWVyeV9jYW5jZWxsZWQoUEdjb25uICpjb25uKQoreworCVBHcmVz dWx0ICAgKnJlcyA9IE5VTEw7CisKKwlyZXMgPSBQUWdldFJlc3VsdChjb25uKTsKKwlpZiAocmVz ID09IE5VTEwpCisJCXBnX2ZhdGFsKCJQUWdldFJlc3VsdCByZXR1cm5lZCBudWxsOiAlcyIsCisJ CQkJIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQ R1JFU19GQVRBTF9FUlJPUikKKwkJcGdfZmF0YWwoInF1ZXJ5IGRpZCBub3QgZmFpbCB3aGVuIGl0 IHdhcyBleHBlY3RlZCIpOworCWlmIChzdHJjbXAoUFFyZXN1bHRFcnJvckZpZWxkKHJlcywgUEdf RElBR19TUUxTVEFURSksICI1NzAxNCIpICE9IDApCisJCXBnX2ZhdGFsKCJxdWVyeSBmYWlsZWQg d2l0aCBhIGRpZmZlcmVudCBlcnJvciB0aGFuIGNhbmNlbGxhdGlvbjogJXMiLCBQUWVycm9yTWVz c2FnZShjb25uKSk7CisJUFFjbGVhcihyZXMpOworCXdoaWxlIChQUWlzQnVzeShjb25uKSkKKwl7 CisJCVBRY29uc3VtZUlucHV0KGNvbm4pOworCX0KK30KKworc3RhdGljIHZvaWQKK3Rlc3RfY2Fu Y2VsKFBHY29ubiAqY29ubikKK3sKKwlQR2NhbmNlbCAgICpjYW5jZWwgPSBOVUxMOworCVBHY2Fu Y2VsQ29ubiAqY2FuY2VsQ29ubiA9IE5VTEw7CisJY2hhcgkJZXJyb3JidWZbMjU2XTsKKworCWlm IChQUXNldG5vbmJsb2NraW5nKGNvbm4sIDEpICE9IDApCisJCXBnX2ZhdGFsKCJmYWlsZWQgdG8g c2V0IG5vbmJsb2NraW5nIG1vZGU6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCisJLyog dGVzdCBQUXJlcXVlc3RjYW5jZWwgKi8KKwlpZiAoUFFzZW5kUXVlcnkoY29ubiwgIlNFTEVDVCBw Z19zbGVlcCgzKSIpICE9IDEpCisJCXBnX2ZhdGFsKCJmYWlsZWQgdG8gc2VuZCBxdWVyeTogJXMi LCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJUFFyZXF1ZXN0Q2FuY2VsKGNvbm4pOworCWNvbmZp cm1fcXVlcnlfY2FuY2VsbGVkKGNvbm4pOworCisJLyogdGVzdCBQUWNhbmNlbCAqLworCWlmIChQ UXNlbmRRdWVyeShjb25uLCAiU0VMRUNUIHBnX3NsZWVwKDMpIikgIT0gMSkKKwkJcGdfZmF0YWwo ImZhaWxlZCB0byBzZW5kIHF1ZXJ5OiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwljYW5j ZWwgPSBQUWdldENhbmNlbChjb25uKTsKKwlQUWNhbmNlbChjYW5jZWwsIGVycm9yYnVmLCBzaXpl b2YoZXJyb3JidWYpKTsKKwljb25maXJtX3F1ZXJ5X2NhbmNlbGxlZChjb25uKTsKKworCS8qIHRl c3QgUFFjYW5jZWxDb25uZWN0ICovCisJaWYgKFBRc2VuZFF1ZXJ5KGNvbm4sICJTRUxFQ1QgcGdf c2xlZXAoMykiKSAhPSAxKQorCQlwZ19mYXRhbCgiZmFpbGVkIHRvIHNlbmQgcXVlcnk6ICVzIiwg UFFlcnJvck1lc3NhZ2UoY29ubikpOworCWNhbmNlbENvbm4gPSBQUWNhbmNlbENvbm5lY3QoY29u bik7CisJaWYgKFBRY2FuY2VsU3RhdHVzKGNhbmNlbENvbm4pICE9IENPTk5FQ1RJT05fQ0FOQ0VM X0ZJTklTSEVEKQorCQlwZ19mYXRhbCgidW5leHBlY3RlZCBjYW5jZWwgY29ubmVjdGlvbiBzdGF0 dXM6ICVzIiwgUFFjYW5jZWxFcnJvck1lc3NhZ2UoY2FuY2VsQ29ubikpOworCWNvbmZpcm1fcXVl cnlfY2FuY2VsbGVkKGNvbm4pOworCVBRY2FuY2VsRmluaXNoKGNhbmNlbENvbm4pOworCisJLyog dGVzdCBQUWNhbmNlbENvbm5lY3RTdGFydCBhbmQgdGhlbiBwb2xsaW5nIHdpdGggUFFjYW5jZWxD b25uZWN0UG9sbCAqLworCWlmIChQUXNlbmRRdWVyeShjb25uLCAiU0VMRUNUIHBnX3NsZWVwKDMp IikgIT0gMSkKKwkJcGdfZmF0YWwoImZhaWxlZCB0byBzZW5kIHF1ZXJ5OiAlcyIsIFBRZXJyb3JN ZXNzYWdlKGNvbm4pKTsKKwljYW5jZWxDb25uID0gUFFjYW5jZWxDb25uZWN0U3RhcnQoY29ubik7 CisJaWYgKFBRY2FuY2VsU3RhdHVzKGNhbmNlbENvbm4pID09IENPTk5FQ1RJT05fQkFEKQorCQlw Z19mYXRhbCgiYmFkIGNhbmNlbCBjb25uZWN0aW9uOiAlcyIsIFBRY2FuY2VsRXJyb3JNZXNzYWdl KGNhbmNlbENvbm4pKTsKKwl3aGlsZSAodHJ1ZSkKKwl7CisJCXN0cnVjdCB0aW1ldmFsIHR2Owor CQlmZF9zZXQJCWlucHV0X21hc2s7CisJCWZkX3NldAkJb3V0cHV0X21hc2s7CisJCVBvc3RncmVz UG9sbGluZ1N0YXR1c1R5cGUgcG9sbHJlcyA9IFBRY2FuY2VsQ29ubmVjdFBvbGwoY2FuY2VsQ29u bik7CisJCWludAkJCXNvY2sgPSBQUWNhbmNlbFNvY2tldChjYW5jZWxDb25uKTsKKworCQlpZiAo cG9sbHJlcyA9PSBQR1JFU19QT0xMSU5HX09LKQorCQl7CisJCQlicmVhazsKKwkJfQorCisJCUZE X1pFUk8oJmlucHV0X21hc2spOworCQlGRF9aRVJPKCZvdXRwdXRfbWFzayk7CisJCXN3aXRjaCAo cG9sbHJlcykKKwkJeworCQkJY2FzZSBQR1JFU19QT0xMSU5HX1JFQURJTkc6CisJCQkJcGdfZGVi dWcoInBvbGxpbmcgZm9yIHJlYWRzXG4iKTsKKwkJCQlGRF9TRVQoc29jaywgJmlucHV0X21hc2sp OworCQkJCWJyZWFrOworCQkJY2FzZSBQR1JFU19QT0xMSU5HX1dSSVRJTkc6CisJCQkJcGdfZGVi dWcoInBvbGxpbmcgZm9yIHdyaXRlc1xuIik7CisJCQkJRkRfU0VUKHNvY2ssICZvdXRwdXRfbWFz ayk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXBnX2ZhdGFsKCJiYWQgY2FuY2VsIGNv bm5lY3Rpb246ICVzIiwgUFFjYW5jZWxFcnJvck1lc3NhZ2UoY2FuY2VsQ29ubikpOworCQl9CisK KwkJaWYgKHNvY2sgPCAwKQorCQkJcGdfZmF0YWwoInNvY2sgZGlkIG5vdCBleGlzdDogJXMiLCBQ UWNhbmNlbEVycm9yTWVzc2FnZShjYW5jZWxDb25uKSk7CisKKwkJdHYudHZfc2VjID0gMzsKKwkJ dHYudHZfdXNlYyA9IDA7CisKKwkJd2hpbGUgKHRydWUpCisJCXsKKwkJCWlmIChzZWxlY3Qoc29j ayArIDEsICZpbnB1dF9tYXNrLCAmb3V0cHV0X21hc2ssIE5VTEwsICZ0dikgPCAwKQorCQkJewor CQkJCWlmIChlcnJubyA9PSBFSU5UUikKKwkJCQkJY29udGludWU7CisJCQkJcGdfZmF0YWwoInNl bGVjdCgpIGZhaWxlZDogJW0iKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChQUWNh bmNlbFN0YXR1cyhjYW5jZWxDb25uKSAhPSBDT05ORUNUSU9OX0NBTkNFTF9GSU5JU0hFRCkKKwkJ cGdfZmF0YWwoInVuZXhwZWN0ZWQgY2FuY2VsIGNvbm5lY3Rpb24gc3RhdHVzOiAlcyIsIFBRY2Fu Y2VsRXJyb3JNZXNzYWdlKGNhbmNlbENvbm4pKTsKKwljb25maXJtX3F1ZXJ5X2NhbmNlbGxlZChj b25uKTsKKwlQUWNhbmNlbEZpbmlzaChjYW5jZWxDb25uKTsKK30KKwogc3RhdGljIHZvaWQKIHRl c3RfZGlzYWxsb3dlZF9pbl9waXBlbGluZShQR2Nvbm4gKmNvbm4pCiB7CkBAIC0xNTU1LDYgKzE2 NjUsNyBAQCBwcmludF90ZXN0X2xpc3Qodm9pZCkKIAlwcmludGYoInNpbmdsZXJvd1xuIik7CiAJ cHJpbnRmKCJ0cmFuc2FjdGlvblxuIik7CiAJcHJpbnRmKCJ1bmlxdmlvbFxuIik7CisJcHJpbnRm KCJjYW5jZWxcbiIpOwogfQogCiBpbnQKQEAgLTE2NDIsNyArMTc1Myw5IEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQogCQkJCQkJUFFUUkFDRV9TVVBQUkVTU19USU1FU1RBTVBTIHwgUFFU UkFDRV9SRUdSRVNTX01PREUpOwogCX0KIAotCWlmIChzdHJjbXAodGVzdG5hbWUsICJkaXNhbGxv d2VkX2luX3BpcGVsaW5lIikgPT0gMCkKKwlpZiAoc3RyY21wKHRlc3RuYW1lLCAiY2FuY2VsIikg PT0gMCkKKwkJdGVzdF9jYW5jZWwoY29ubik7CisJZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCAi ZGlzYWxsb3dlZF9pbl9waXBlbGluZSIpID09IDApCiAJCXRlc3RfZGlzYWxsb3dlZF9pbl9waXBl bGluZShjb25uKTsKIAllbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsICJtdWx0aV9waXBlbGluZXMi KSA9PSAwKQogCQl0ZXN0X211bHRpX3BpcGVsaW5lcyhjb25uKTsKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L21vZHVsZXMvbGlicHFfcGlwZWxpbmUvdC8wMDFfbGlicHFfcGlwZWxpbmUucGwgYi9zcmMv dGVzdC9tb2R1bGVzL2xpYnBxX3BpcGVsaW5lL3QvMDAxX2xpYnBxX3BpcGVsaW5lLnBsCmluZGV4 IDBjMTY0ZGNhYmEuLmUwNzczNTQzYWUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvbGli cHFfcGlwZWxpbmUvdC8wMDFfbGlicHFfcGlwZWxpbmUucGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxl cy9saWJwcV9waXBlbGluZS90LzAwMV9saWJwcV9waXBlbGluZS5wbApAQCAtMjYsNyArMjYsNyBA QCBmb3IgbXkgJHRlc3RuYW1lIChAdGVzdHMpCiAJbXkgQGV4dHJhYXJncyA9ICgnLXInLCAkbnVt cm93cyk7CiAJbXkgJGNtcHRyYWNlID0gZ3JlcCgvXiR0ZXN0bmFtZSQvLAogCQlxdyhzaW1wbGVf cGlwZWxpbmUgbm9zeW5jIG11bHRpX3BpcGVsaW5lcyBwcmVwYXJlZCBzaW5nbGVyb3cKLQkJICBw aXBlbGluZV9hYm9ydCB0cmFuc2FjdGlvbiBkaXNhbGxvd2VkX2luX3BpcGVsaW5lKSkgPiAwOwor CQkgIHBpcGVsaW5lX2Fib3J0IHRyYW5zYWN0aW9uIGRpc2FsbG93ZWRfaW5fcGlwZWxpbmUgY2Fu Y2VsKSkgPiAwOwogCiAJIyBGb3IgYSBidW5jaCBvZiB0ZXN0cywgZ2VuZXJhdGUgYSBsaWJwcSB0 cmFjZSBmaWxlIHRvby4KIAlteSAkdHJhY2VvdXQgPSAiJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxz Ojp0bXBfY2hlY2svdHJhY2VzLyR0ZXN0bmFtZS50cmFjZSI7Ci0tIAoyLjE3LjEKCg== --_002_AM5PR83MB0178D3B31CA1B6EC4A8ECC42F7529AM5PR83MB0178EURP_--