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 1oIiT4-0006tB-Es for pgsql-hackers@arkaria.postgresql.org; Tue, 02 Aug 2022 03:21:15 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oIiT3-0004Hp-1D for pgsql-hackers@arkaria.postgresql.org; Tue, 02 Aug 2022 03:21:13 +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 1oIiT1-0004Hc-NH for pgsql-hackers@lists.postgresql.org; Tue, 02 Aug 2022 03:21:12 +0000 Received: from esa13.fujitsucc.c3s2.iphmx.com ([68.232.156.96]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oIiSx-0005CH-6l for pgsql-hackers@lists.postgresql.org; Tue, 02 Aug 2022 03:21:10 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=fujitsu.com; i=@fujitsu.com; q=dns/txt; s=fj1; t=1659410468; x=1690946468; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=j1aTsEmWkeKSc3H8/EL2fg0zVIhYPyXyFgHGJDcMweA=; b=TUrGAjFlBpIskjPoqfLYn2gR269Bzh016t3uzxXnUSwFPDRivmUXdyln sJntutlayZPI2KXDlgDxxtOMWO9QsBieritPIT090+WSKyY5Uq+KTIi1W Uo9E5skHWRdJ25k9rOQYQn6n512lUivUoG//AxvFx1FfFNgThJ0yPr7M2 tbgwtYoHdxZkka0KptvcTWpvbqwbQRRRAaK20G0Yr7aJUsGokNtgersQR fVhn2CBTZlh0S0d6XfDPujs+0tIV5z7hzd5cpf6FkOFcqh7t4caqSA1Bv 4P0hVkI8Lm7+4Cn+M/eB9aRy7hpghvG0KEHcv46o/1chIcUVy2i6I2okh A==; X-IronPort-AV: E=McAfee;i="6400,9594,10426"; a="61619985" X-IronPort-AV: E=Sophos;i="5.93,209,1654527600"; d="scan'208,223";a="61619985" Received: from mail-os0jpn01lp2113.outbound.protection.outlook.com (HELO JPN01-OS0-obe.outbound.protection.outlook.com) ([104.47.23.113]) by ob1.fujitsucc.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Aug 2022 12:21:01 +0900 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JL610QY8gUs/l5rqrHj/mbat9xvdND8DJRJ9vO7GSZu4vf8jVc55dOxLhcZQBbNsw47zt/llIBaNMDBs6DTuPws0VBVSjYy5mNIgjYMuLqtan/mtoSRpXdNk4vwP8YwcNXt34YGDvsI8GzY/Cll/Jcwi2QTQNutF30cgm+4vR17I2+6XYbxA45T4lwxtTSdf/C92dSqMyKooEwDICEV+54F9TWdXwCT+gInLnRf4I8j2VcJw9rTMOTjHQ6Y8/uaxmPe1ICFxJlqkoWzkV9rMj7Y1RGatcoAQ3zbmpQacSxc4I6fZzmgFrmakYEXjEA2tRxdgpVxkBPutNcWc1vLwAw== 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=BHHlvYtl4K31x00+u500dsQxr/WTEou5YpcqiLS4VY8=; b=nvvXuAFMRBeobXL2iPnZm6b65IHefU87vX5VrYnkLFNG1iyudtpVzWpdXWpdEKNhkwXJXSAKHzRfXSNvnBJZainUidcySxCNYEki7az0GCLCOY786bKC1Rl4I+BB9UP3BMAGSYkzAER9Hsfb4PrJ6Qq1zBf8g58FvLoHhmtGXSmRAOLr1I0qiF+Dk+jGqKDHqdqfY7/nTv8hSAO03IGeEQaccb36UEpBrXZs1LbT3qPijUagdTKWksUIZDymPewUldoQsKKLWERFPdPj5Zrb4mpcn87Yc0WLYqA/JS0uxThNMcfWbtc5w0CRmTooaLErDiNZxuu2jQCU27kG+SOOPA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=fujitsu.com; dmarc=pass action=none header.from=fujitsu.com; dkim=pass header.d=fujitsu.com; arc=none Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com (2603:1096:604:bb::12) by TYAPR01MB2496.jpnprd01.prod.outlook.com (2603:1096:404:86::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5482.13; Tue, 2 Aug 2022 03:20:55 +0000 Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::c943:3fe1:8fba:a589]) by OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::c943:3fe1:8fba:a589%2]) with mapi id 15.20.5482.016; Tue, 2 Aug 2022 03:20:55 +0000 From: "houzj.fnst@fujitsu.com" To: Peter Smith CC: Amit Kapila , Masahiko Sawada , Japin Li , Alvaro Herrera , Dilip Kumar , rajesh singarapu , PostgreSQL Hackers , Zheng Li Subject: RE: Support logical replication of DDLs Thread-Topic: Support logical replication of DDLs Thread-Index: AQHYJz33Pggarn88u0G0lS13R7uLfKy9TlgAgAVZmgCAAA2xAIABMlkAgACE3QCAAKgDAIAAduOAgABm6oCABIs+AIACG98AgBfo2QCABsLLgIAyhVqAgBOd9QCAAOYWgIAAPoOAgAUH2oCABQvawIAPYMWAgAHJ99CAAn9yAIAAPzmAgAQqm4CAA6XiQIACJNSQgAsCywCAAPmNAIAAalXwgAAWjQCACT8UwIAEWbkAgAam+gCADNiE8IAMBWyAgAZSRYCAAW8VgA== Date: Tue, 2 Aug 2022 03:20:55 +0000 Message-ID: References: In-Reply-To: Accept-Language: ja-JP, en-US Content-Language: ja-JP X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: =?utf-8?B?TVNJUF9MYWJlbF9hNzI5NWNjMS1kMjc5LTQyYWMtYWI0ZC0zYjBmNGZlY2Uw?= =?utf-8?B?NTBfQWN0aW9uSWQ9NWFhOTRlNWEtYzQ2NS00NmM1LWI0YTYtYWZjNzdlNmFk?= =?utf-8?B?YjU0O01TSVBfTGFiZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRm?= =?utf-8?B?ZWNlMDUwX0NvbnRlbnRCaXRzPTA7TVNJUF9MYWJlbF9hNzI5NWNjMS1kMjc5?= =?utf-8?B?LTQyYWMtYWI0ZC0zYjBmNGZlY2UwNTBfRW5hYmxlZD10cnVlO01TSVBfTGFi?= =?utf-8?B?ZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRmZWNlMDUwX01ldGhv?= =?utf-8?B?ZD1TdGFuZGFyZDtNU0lQX0xhYmVsX2E3Mjk1Y2MxLWQyNzktNDJhYy1hYjRk?= =?utf-8?B?LTNiMGY0ZmVjZTA1MF9OYW1lPUZVSklUU1UtUkVTVFJJQ1RFRO+/ou++gA==?= =?utf-8?B?776LO01TSVBfTGFiZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRm?= =?utf-8?B?ZWNlMDUwX1NldERhdGU9MjAyMi0wOC0wMlQwMjoxMjowNVo7TVNJUF9MYWJl?= =?utf-8?B?bF9hNzI5NWNjMS1kMjc5LTQyYWMtYWI0ZC0zYjBmNGZlY2UwNTBfU2l0ZUlk?= =?utf-8?Q?=3Da19f121d-81e1-4858-a9d8-736e267fd4c7;?= authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=fujitsu.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: f1c9b12e-efc8-4ecd-2a1d-08da74360330 x-ms-traffictypediagnostic: TYAPR01MB2496:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: qfo8RdPxaivYQDS23BS7qco/QtqvIu7/gHrzT6oIK4o8vAUE2DL694ksKimlGw9gYL58a6gklxHHlLA12nC/J7MMWkCXT7Ah3OqBRwHuFwAXCKRukqfD/wAB2J5ru87SLmpF1ujrsEE2DwafiIP6Y4doQi7k6Z2HKvTMbfWGM4VCgge4qi/shqXVCs/1jxTc3PPm+GVjbX6LVll/Ngb8uTblw+sT0ulzOGV4j3uyNLHrtEqpl4n4aptP3nIxfH+HdNNRxps8Fuo7Nxf4haI219rgya+9tjEDBPK5cgPugUBOcFd/DPJeriwODV/yN5v9QuH58KRYMSghf+l/R9Cpl8qsY1+eh0Xz/VU1xUcDTKskok+/NbfWZ4UynoSg6Sh5426gOP02vsNU7mf1JsMrj/MEsVuOxabo4NRmbr32OXYNDhouv8hCNK/q/GOHIQ3G6WQVzZwsG2sGIxQsIEdUQ1+x7Hj95DTP5GDK8R2yMy9pbEKE1TcqcRTdJSMwOvpAJT91UOhe2b5m6hNcqpw3kdj0DelT9EfVl1tGpG8TqOr06k1CcTbDnVgBQ/hgtwm4cdpIvGpT9/jsUqLRc4u6RU6wTbwokM/M/G7emwgZT6k7puOO0JDuH2ZuXFNgQLL7n+h3SOWWTORtSJx4R79pbLB8lq57bQDyrighVkpQINMumZT2ytlQVoy0T0fbdntUK5fY9p6k5dPq/fZwUZQjFTULAbRhsvqo/GN704BM0wx3NJbHBU95kR75GezRZj1nBW1wkNegoeXQEM5Sd/4UiQJ6jIlc3GQgyE5gtw7nif+FnbT+fr8o1z9JHqTEdmeS x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:OS0PR01MB5716.jpnprd01.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(136003)(39860400002)(396003)(346002)(376002)(366004)(8676002)(8936002)(4326008)(85182001)(64756008)(5660300002)(558084003)(76116006)(99936003)(2906002)(86362001)(38070700005)(186003)(55016003)(66946007)(6916009)(316002)(54906003)(53546011)(52536014)(38100700002)(33656002)(66476007)(66446008)(478600001)(41300700001)(6506007)(26005)(122000001)(9686003)(7696005)(71200400001)(82960400001)(66556008);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?OElQNzFaOThLdDB4cTI2WU5hMHVDekZLY1ZiSnlFU291dEdHaiszYld1R0lE?= =?utf-8?B?Tm5CemVGZm5vM1RJcFdqeTZYQkJxNG5ITFYvMkUyeDFUR3FCbjA1Z1l4QnZt?= =?utf-8?B?ZGdRZ3pGR0Vwc1M1cDJub1V3cllDbmd0SzFTYnY2Sm44S0dXZzlZeVBiSFpC?= =?utf-8?B?MElYMEZGZzNXd2Q5bEs2S05kVjMrdE4vTFc4WWNXbUpEVkg4ek4va1grZXY5?= =?utf-8?B?RkZ0OEp4bjNVbWd3YndUbjh2OS9OZURrRFM2UHRhSVZTV3NjSjhlMm9iRmNv?= =?utf-8?B?NExrWjcyUmFMZDk0REJIcUJYOVhkY3BxYTRRTjJtWUVXYzdvdERHcmJkdzlo?= =?utf-8?B?OS9yd1M2ajZPK0hYOXgyemFMTE5waUN3U0xDSER2dFY5ZENvbUtRYjExUzZV?= =?utf-8?B?UGYxRHEybmtuWk9SUWZPMTc3Z0R5TFBuY1B4VlBNTURKTEkyS3FZeGk4WTFW?= =?utf-8?B?M0hwYnRkUkJDY1VFalNGYXAvVlZsZHd3elpOUC9kK0VOWjBHeGVzTXJ4c3RM?= =?utf-8?B?YjJ6RDNrZFBMUXQ2MmtvZVNVSk9OdEh0Q0tMQ2t4T0RxTEZuRWt1dnd2UUY2?= =?utf-8?B?TEgrNVRFdDBJTk5QVlVGWitnYVllTTJabVZwdDRVT2lsQnJ3Z2hUU0VuRDQv?= =?utf-8?B?M2FJN2RncGY2OXBRdnR5MkttRjNvVHkvNVluVysvREIyMlVkV0J5YURKOTZW?= =?utf-8?B?MU5COHA2ZStqRnMvbitZdnhKK041ZFU2eHBNRUFvSCswWnFFTWhaSkZRWTZ6?= =?utf-8?B?OFhKZUlIV3M0OWRqR3FuaC9QYlBVb3k5UkUrK0REb21CR2ROZ3lsVUJ6QTVK?= =?utf-8?B?RUVDQVhCbDRZdEozcWFodG93VDdreDJaUzk4VXlZdkZxdm1CQ2NKaEpVejNs?= =?utf-8?B?eHRVV3Q4Q2VsZnBTZ3kyUW9wL3IrUHRkWnJKYk9neHpyakl0WjJFb0dna3JB?= =?utf-8?B?SDJoN3RXSzMrSTZ1ck5tbDJObkRXOHhWdlZ5cjZUYTdzRFd0QWVZS3ZaR3cr?= =?utf-8?B?cXlmQ011OXQ5VnhTc3p6TVFkMDdCRkxhdEdjVFhOc2tBVHlBYVZuWktrY2t5?= =?utf-8?B?THg2by8yTnpsMno2Zmx0SlFlWnV1NURGaDNvdmRvUmttaENDS3c3bXFRY2pX?= =?utf-8?B?STU1YldPT1NEUU40eUhPZHdqKzlYSk1RdHkyME5nZXh1aG91d1E1V1JOTVVn?= =?utf-8?B?ZnNCbzBZVXdPc0U0UFNDRHYxdHNHSzM1NnNPbTZxOWZrRnhENVRNUG1XekZ5?= =?utf-8?B?eWo5MGxBaFQ5ZEdzUHhzL0xUK01mb0N2L2F5MkFSMWROZkIvcFZsTGN5Nmhz?= =?utf-8?B?a2dmMW9jZlFyb3dleDlaUDlsRmdudVhPMGgrWmdTM0E0WkNXWG1WbUhNNkMz?= =?utf-8?B?S052WWQ3Vy9FRzdEd25VSkZJeTNDeUlEZ1J4dDRoUU1wSlpuakMzRTF3OXEr?= =?utf-8?B?NzFqK0d4Mk1uc2MzTVJ6NEExVmw2Rzd6Y01SRm4vbVQ5eHdhVnU1b0N6SVhW?= =?utf-8?B?UEJDZWNOQVN4MTZHS1VlMUl5U3hKU3d0WXNISHcxalZtc3JNNkFCeDR0YU82?= =?utf-8?B?SlQzdGdUcmlxbDlLZ2hWN285NlZPYVQ2RWVMQzJiOVNXM3o4R0FLZUhrcVNG?= =?utf-8?B?UmU2SG9KVG9QeHg1aFI4bkJGUjk5NTdSYlFUam1OMmcrUnBPRHNSZW9INGd1?= =?utf-8?B?WUk5S1MycHdVRUplOWpvVWJ2bzdvVGZTYlh5VlgySkdmVFFYczZ6N09UV2g2?= =?utf-8?B?WW1xRlRQM2ZqKzZ6cUc2cXB3NjJJUHlhSlJUMXlZbGtlRG5wUDZsL0RqS05X?= =?utf-8?B?SHg0cVo3dzhSb1hTVVNjZUdOUWpmbXoySXJSZ2Z5UmtHVjNWTzdhMTI4VjQz?= =?utf-8?B?RE4zVW1ldTNYTVBFeTZLcmZWbEJHZnB3RjdsZWxvQkJ3ZDhrb0xtYkNkcnNS?= =?utf-8?B?V1FiZXEwSmU0d3o5NUhNeHZuTi9sNVRVc3pVd3NrY1ZkWEh4ekxhclNoY1RC?= =?utf-8?B?RUZDa0ZCVjh1TnRUN2pZSU82L2REc1RnK0pIV3d5aTBLL3A4QXNoUEFqMlZT?= =?utf-8?B?bDdrUzJzWDV1QXpWbXA5em1aYVduZm5VRnkvSVVrN1J1ZnpLQXlvRnlkZkVP?= =?utf-8?Q?mNXjlexiDJSS+ZIJMDAKbeDGu?= Content-Type: multipart/mixed; boundary="_005_OS0PR01MB5716009FDCCC0B50BCB14A99949D9OS0PR01MB5716jpnp_" MIME-Version: 1.0 X-OriginatorOrg: fujitsu.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: OS0PR01MB5716.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f1c9b12e-efc8-4ecd-2a1d-08da74360330 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Aug 2022 03:20:55.6578 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a19f121d-81e1-4858-a9d8-736e267fd4c7 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: cLdDWHRELJks0hEY0i97loJEz9VM5HA6B0ribx88CzCXqIIbx6EeBw10u/sWxKpiZaZXMupf5PeArd21e5lRNA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYAPR01MB2496 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_005_OS0PR01MB5716009FDCCC0B50BCB14A99949D9OS0PR01MB5716jpnp_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T24gTW9uZGF5LCBBdWd1c3QgMSwgMjAyMiAxMjoxOCBQTSBQZXRlciBTbWl0aCA8c21pdGhwYjIy NTBAZ21haWwuY29tPiB3cm90ZToNCj4gDQo+IEZZSSwgSSBmb3VuZCB0aGF0IHRoZSB2MTQtMDAw MSBwYXRjaCBkb2VzIG5vdCBjdXJyZW50bHkgYXBwbHkgWzFdLiBDYW4geW91IHBsZWFzZQ0KPiBy ZWJhc2UgaXQ/DQoNClRoYW5rcyBmb3IgcmVwb3J0aW5nLiBIZXJlIGlzIHRoZSByZWJhc2VkIHZl cnNpb24uDQoNCkJlc3QgcmVnYXJkcywNCkhvdSB6ag0K --_005_OS0PR01MB5716009FDCCC0B50BCB14A99949D9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v15-0004-Test-cases-for-DDL-replication.patch" Content-Description: v15-0004-Test-cases-for-DDL-replication.patch Content-Disposition: attachment; filename="v15-0004-Test-cases-for-DDL-replication.patch"; size=23049; creation-date="Tue, 02 Aug 2022 03:20:00 GMT"; modification-date="Tue, 02 Aug 2022 03:20:52 GMT" Content-Transfer-Encoding: base64 RnJvbSBlZTcwZjJiNTZjNjIxMTVhMjdmODI4NjlkNWM2M2UxNDMwM2U2ZTJkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYWthbWljaGkgT3N1bWkgPG9zdW1pLnRha2FtaWNoaUBmdWpp dHN1LmNvbT4KRGF0ZTogV2VkLCAxNSBKdW4gMjAyMiAwOTo0NTo0MiArMDAwMApTdWJqZWN0OiBb UEFUQ0ggdjE1IDQvNF0gVGVzdCBjYXNlcyBmb3IgRERMIHJlcGxpY2F0aW9uCgpBdXRob3I6IFRh a2FtaWNoaSBPc3VtaQotLS0KIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVwbGlj YXRpb24ucGwgfCA0MTQgKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQs IDQxNCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qvc3Vic2NyaXB0 aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlvbi5wbAoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNj cmlwdGlvbi90LzAzMl9kZGxfcmVwbGljYXRpb24ucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24v dC8wMzJfZGRsX3JlcGxpY2F0aW9uLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjk0ZGU4ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8w MzJfZGRsX3JlcGxpY2F0aW9uLnBsCkBAIC0wLDAgKzEsNDE0IEBACisjIENvcHlyaWdodCAoYykg MjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyMgUmVncmVzc2lvbiB0 ZXN0cyBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiBvZiBERExzCisjCit1c2Ugc3RyaWN0OwordXNl IHdhcm5pbmdzOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNR TDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworbXkgJG5vZGVfcHVibGlzaGVyID0g UG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKKyRub2RlX3B1Ymxp c2hlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7Ciskbm9kZV9wdWJsaXNo ZXItPnN0YXJ0OworCitteSAkbm9kZV9zdWJzY3JpYmVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1 c3Rlci0+bmV3KCdzdWJzY3JpYmVyJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5pbml0KGFsbG93c19z dHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3N1YnNjcmliZXItPnN0YXJ0OworCitteSAk ZGRsID0gIkNSRUFURSBUQUJMRSB0ZXN0X3JlcChpZCBpbnQgcHJpbWFyeSBrZXksIG5hbWUgdmFy Y2hhciwgdmFsdWUgaW50ZWdlcik7IjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICRkZGwpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoMSwgJ2RhdGExJywgMSk7Iik7Ciskbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJGRkbCk7CisKK215ICRwdWJsaXNoZXJfY29u bnN0ciA9ICRub2RlX3B1Ymxpc2hlci0+Y29ubnN0ciAuICcgZGJuYW1lPXBvc3RncmVzJzsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBQVUJMSUNBVElP TiBteXB1YiBGT1IgQUxMIFRBQkxFUyB3aXRoIChwdWJsaXNoID0gJ2luc2VydCwgdXBkYXRlLCBk ZWxldGUsIGRkbCcpOyIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJIkNSRUFURSBTVUJTQ1JJUFRJT04gbXlzdWIgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25u c3RyJyBQVUJMSUNBVElPTiBteXB1YjsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0 Y2h1cCgnbXlzdWInKTsKKworIyBNYWtlIHN1cmUgd2UgaGF2ZSBmdWxseSBzeW5jaHJvbml6ZWQg dGhlIHRhYmxlLgorIyBUaGlzIHByZXZlbnRzIEFMVEVSIFRBQkxFIGNvbW1hbmQgYmVsb3cgZnJv bSBiZWluZyBleGVjdXRlZCBkdXJpbmcgdGFibGUgc3luY2hyb25pemF0aW9uLgorJG5vZGVfc3Vi c2NyaWJlci0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLAorICAgIlNFTEVDVCBDT1VOVCgx KSA9IDAgRlJPTSBwZ19zdWJzY3JpcHRpb25fcmVsIHNyIFdIRVJFIHNyLnNyc3Vic3RhdGUgTk9U IElOICgncycsICdyJykgQU5EIHNyLnNycmVsaWQgPSAndGVzdF9yZXAnOjpyZWdjbGFzcyIKKyk7 CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBBREQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBREQgYzQgaW50OyIpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVF UyAoMiwgJ2RhdGEyJywgMiwgMik7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJ215c3ViJyk7CitteSAkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBjNCA9IDI7Iik7 CitpcygkcmVzdWx0LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIEFERCByZXBsaWNhdGVkJyk7CisK KyMgVGVzdCBBTFRFUiBUQUJMRSBEUk9QCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgRFJPUCBjNDsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJPTSB0ZXN0X3JlcCB3aGVyZSBpZCA9 IDI7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291 bnQoKikgZnJvbSB0ZXN0X3JlcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQUxURVIgdGVzdF9y ZXAgRFJPUCByZXBsaWNhdGVkJyk7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBBTFRFUiBUWVBFCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9y ZXAgQUxURVIgdmFsdWUgVFlQRSB2YXJjaGFyIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICgzLCAnZGF0YTMnLCAn MycpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJl c3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNv dW50KCopIEZST00gdGVzdF9yZXAgV0hFUkUgdmFsdWUgPSAnMyc7Iik7CitpcygkcmVzdWx0LCBx cSgxKSwgJ0FMVEVSIHRlc3RfcmVwIEFMVEVSIENPTFVNTiBUWVBFIHJlcGxpY2F0ZWQnKTsKKwor IyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIFNFVCBERUZBVUxUCisjIENoZWNrIGlmIHdlIGhhdmUg dGhlIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgdGhlIGRpcmVjdCBpbnNlcnQgdG8gc3Vic2NyaWJlciBu b2RlLgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFRBQkxF IHRlc3RfcmVwIEFMVEVSIENPTFVNTiB2YWx1ZSBTRVQgREVGQVVMVCAnZm9vJyIpOworJG5vZGVf cHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDQsICdk YXRhNCcpOyIpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUIHZhbHVlIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA0OyIpOworaXMoJHJl c3VsdCwgJ2ZvbycsICdBTFRFUiB0ZXN0X3JlcCBBTFRFUiBTRVQgREVGQVVMVCByZXBsaWNhdGVk Jyk7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBBTFRFUiBEUk9QIERFRkFVTFQKKyMgQ2hlY2sgaWYg d2UgZG9uJ3QgaGF2ZSB0aGUgZGVmYXVsdCB2YWx1ZSBwcmV2aW91c2x5IGRlZmluZWQuCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAg QUxURVIgQ09MVU1OIHZhbHVlIERST1AgREVGQVVMVDsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICg1LCAnZGF0YTUnKTsiKTsKKyRy ZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCB2 YWx1ZSBJUyBOVUxMIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA1OyIpOworaXMoJHJlc3VsdCwg cSh0KSwgJ0FMVEVSIHRlc3RfcmVwIEFMVEVSIERST1AgREVGQVVMVCByZXBsaWNhdGVkJyk7CisK KyMgVGVzdCBBTFRFUiBUQUJMRSBBTFRFUiBTRVQgTk9UIE5VTEwKKyMgUmVtb3ZlIHRoZSBleGlz dGluZyByZWNvcmQgdGhhdCBjb250YWlucyBudWxsIHZhbHVlIGZpcnN0LgorbXkgKCRzdGRvdXQs ICRzdGRlcnIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxF VEUgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDU7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgQUxURVIgdmFsdWUgU0VUIE5P VCBOVUxMOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOwor JG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAg VkFMVUVTICg2LCAnZGF0YTYnKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJ CSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRz dGRlcnIgPX4gL0VSUk9SOiAgbnVsbCB2YWx1ZSBpbiBjb2x1bW4gXCJ2YWx1ZVwiIG9mIHJlbGF0 aW9uIFwidGVzdF9yZXBcIiB2aW9sYXRlcyBub3QtbnVsbCBjb25zdHJhaW50LworICBvciBkaWUg ImZhaWxlZCB0byByZXBsaWNhdGUgQUxURVIgVEFCTEUgQUxURVIgU0VUIE5PVCBOVUxMIjsKKwor IyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIERST1AgTk9UIE5VTEwKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2YWx1ZSBE Uk9QIE5PVCBOVUxMOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1 YicpOworIyBJbnNlcnQgc2FtZSBkYXRhIHRoYXQgaGFzIE5VTEwgdmFsdWUuIFRoaXMgZmFpbGVk IGJlZm9yZSBidXQgbm93IHNob3VsZCBzdWNjZWVkLgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDYsICdkYXRhNicp OyIpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi U0VMRUNUIHZhbHVlIElTIE5VTEwgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDY7Iik7Citpcygk cmVzdWx0LCBxKHQpLCAiQUxURVIgdGVzdF9yZXAgQUxURVIgRFJPUCBOT1QgTlVMTCByZXBsaWNh dGVkIik7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBTRVQgVU5MT0dHRUQKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdBTFRFUiBUQUJMRSB0ZXN0X3JlcCBTRVQgVU5MT0dH RUQ7Jyk7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAg VkFMVUVTICg3LCAnZGF0YTcnLCAnNycpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9j YXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA3OyIp OworaXMoJHJlc3VsdCwgcXEoMCksICdBTFRFUiB0ZXN0X3JlcCBTRVQgVU5MT0dHRUQgcmVwbGlj YXRlZCcpOworCisjIFRlc3QgQUxURVIgVEFCTEUgU0VUIExPR0dFRAorJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0FMVEVSIFRBQkxFIHRlc3RfcmVwIFNFVCBMT0dHRUQ7 Jyk7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFM VUVTICg4LCAnZGF0YTgnLCAnOCcpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA4OyIpOwor aXMoJHJlc3VsdCwgcXEoMSksICdBTFRFUiB0ZXN0X3JlcCBTRVQgTE9HR0VEIHJlcGxpY2F0ZWQn KTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBhbmQgRE1MIGNoYW5nZXMKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChhIGludCwgYiB2YXJj aGFyKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRy ZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBj b3VudCgqKSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRy ZXN1bHQsIHFxKDEpLCAnQ1JFQVRFIHRtcCBpcyByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIHZhbHVlcyAoMSwgJ2En KSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRP IHRtcCB2YWx1ZXMgKDIsICdiJykiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDIpLCAn RE1MIENoYW5nZXMgdG8gdG1wIGFyZSByZXBsaWNhdGVkJyk7CisKKyMgVGVzdCBDUkVBVEUgVEFC TEUgSU5IRVJJVFMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVB VEUgVEFCTEUgdG1wMiAoYzMgaW50KSBJTkhFUklUUyAodG1wKTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAyIFZBTFVFUyAoMSwgJ2En LCAxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRy ZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBj b3VudCgqKSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wMic7Iik7Citpcygk cmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBJTkhFUklUUyBpcyByZXBsaWNhdGVkJyk7Cisk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qg Y291bnQoKikgZnJvbSB0bXAyOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdpbnNlcnRpbmcgc29t ZSBkYXRhIHRvIGluaGVyaXRlZCB0YWJsZSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAyIik7CisKKyMgVGVzdCBDUkVB VEUgVEFCTEUgTElLRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNS RUFURSBUQUJMRSB0bXAzIChjMyBpbnQsIExJS0UgdG1wKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAzIFZBTFVFUyAoMSwgMSwgJ2En KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3Vu dCgqKSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wMyc7Iik7CitpcygkcmVz dWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBMSUtFIHJlcGxpY2F0ZWQnKTsKKyRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBm cm9tIHRtcDM7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydCBzb21lIGRhdGEgdG8gYSB0 YWJsZSBkZWZpbmVkIHdpdGggTElLRSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAzIik7CisKKyMgVGVzdCBEUk9QIFRB QkxFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0 bXA7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291 bnQoKikgZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVz dWx0LCBxcSgwKSwgJ1RBQkxFIHRtcCBpcyBkcm9wcGVkJyk7CisKKyMgVGVzdCBDUkVBVEUgVU5M T0dHRUQgVEFCTEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVB VEUgVU5MT0dHRUQgVEFCTEUgdG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVf cHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gcGdf dGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdD UkVBVEUgVU5MT0dHRUQgVEFCTEUgaXMgcmVwbGljYXRlZCBjb3JyZWN0bHknKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDApLCAnaW5zZXJ0aW5nIGRhdGEgdG8gdW5s b2dnZWQgdGFibGUgaXMgbm90IHJlcGxpY2F0ZWQgY29ycmVjdGx5Jyk7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENS RUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgdG1wIChpZCBpbnQpOyIpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxV RVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOwor JHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNU IGNvdW50KCopIGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMo JHJlc3VsdCwgcXEoMSksICdDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVkJyk7 CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydGluZyBk YXRhIHRvIGEgdGFibGUgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgSUYg Tk9UIEVYSVNUUyAoY2hlY2sgaWYgd2Ugc2tpcCB0byBjcmVhdGUgYSB0YWJsZQorIyB3aGVuIHdl IGhhdmUgdGhlIHRhYmxlIG9uIHRoZSBzdWJzY3JpYmVyIGluIGFkdmFuY2UsIGFuZCBpZiB3ZSBz dWNjZWVkCisjIGluIHJlcGxpY2F0aW5nIGNoYW5nZXMuKQorJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQpOyIpOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJ U1RTIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1 bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcmVwbGljYXRlZCcpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisK KyMgVGVzdCBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyAoY2hlY2sgaWYgd2Ugc2tpcCB0byBj cmVhdGUgYSB0YWJsZQorIyB3aGVuIHdlIGhhdmUgdGhlIHRhYmxlIG9uIHRoZSBwdWJsaXNoZXIs IGJ1dCBub3Qgb24gdGhlIHN1YnNjcmliZXIuKQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgdG1w IChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9j YXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEo MSksICdDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0 IENSRUFURSBUQUJMRSB3aXRoIGNvbGxhdGUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChuYW1lIHRleHQgQ09MTEFURSBcIkNcIik7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1w IFZBTFVFUyAoJ2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiU0VMRUNUIGNvbGxhdGlvbl9uYW1lIEZST00gaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbnMg V0hFUkUgdGFibGVfbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwgcXEoQyksICdDUkVBVEUg VEFCTEUgd2l0aCBjb2xsYXRlIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxF IHdpdGggbmFtZWQgY29uc3RyYWludAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCBDT05TVFJBSU5UIFwibXVzdCBiZSBiaWdn ZXIgdGhhbiAxMFwiIENIRUNLIChpZCA+IDEwKSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3Jlcycs ICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+ IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rk b3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRpb24gInRtcCIgdmlv bGF0ZXMgY2hlY2sgY29uc3RyYWludCAibXVzdCBiZSBiaWdnZXIgdGhhbiAxMCIvCisgIG9yIGRp ZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBuYW1lZCBjb25zdHJhaW50IGF0IGNyZWF0aW5nIHRhYmxl IjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRt cDsiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSB3aXRoIHZhcmlvdXMgdHlwZXMgb2YgY29uc3Ry YWludHMuCisjIE5PVCBOVUxMIGNvbnN0cmFpbnQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQsIG5hbWUgdGV4dCBOT1QgTlVM TCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9k ZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgx KTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0 ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAg bnVsbCB2YWx1ZSBpbiBjb2x1bW4gIm5hbWUiIG9mIHJlbGF0aW9uICJ0bXAiIHZpb2xhdGVzIG5v dC1udWxsIGNvbnN0cmFpbnQvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBub24gbnVs bCBjb25zdHJhaW50IGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBOVUxMIGNvbnN0cmFpbnQK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1w IChpZCBpbnQsIG5hbWUgdGV4dCBOVUxMKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgbmFtZSBJUyBOVUxMIEZST00gdG1w OyIpOworaXMoJHJlc3VsdCwgcXEodCksICJDUkVBVEUgVEFCTEUgd2l0aCBOVUxMIGNvbnN0cmFp bnQgcmVwbGljYXRlZCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkRST1AgVEFCTEUgdG1wIik7CisKKyMgQ0hFQ0sgY29uc3RyYWludAorJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwgcHJvZHVj dF9hbWUgdGV4dCwgcHJpY2UgaW50IENIRUNLIChwcmljZSA+IDApKTsiKTsKKyRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nLCAtMTAwKTsiLAor CQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwK KwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJv dyBmb3IgcmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidG1wX3ByaWNl X2NoZWNrIi8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIENIRUNLIGNvbnN0cmFpbnQi OworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1w OyIpOworCisjIERFRkFVTFQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQsIG5hbWUgdGV4dCBERUZBVUxUICdmb28nKTsiKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7 Iik7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgbmFtZSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKGZvbyksICJDUkVBVEUgVEFC TEUgd2l0aCBkZWZhdWx0IHZhbHVlIHJlcGxpY2F0ZWQiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFVOSVFVRSBjb25zdHJh aW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxF IHRtcCAoaWQgaW50IFVOSVFVRSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0 Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiLAorCQkJCQkgICBvbl9lcnJvcl9z dG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+ IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9s YXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX2lkX2tleSIvCisgIG9yIGRpZSAiZmFpbGVkIHRv IHJlcGxpY2F0ZSBjb25zdHJhaW50IGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBQUklNQVJZ IEtFWQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJM RSB0bXAgKGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnZm9v Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9k ZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgx LCAnYmFyJyk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIg PT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9F UlJPUjogIGR1cGxpY2F0ZSBrZXkgdmFsdWUgdmlvbGF0ZXMgdW5pcXVlIGNvbnN0cmFpbnQgInRt cF9wa2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIHByaW1hcnkga2V5IGF0IGNy ZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJE Uk9QIFRBQkxFIHRtcDsiKTsKKworIyBFWENMVURFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIGNpcmNsZXMgKGMgY2lyY2xlLCBFWENMVURFIFVT SU5HIGdpc3QgKGMgV0lUSCAmJikpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIklOU0VSVCBJTlRPIGNpcmNsZXMgVkFMVUVTICgnPCgxLCAxKSwgMT4nOjpjaXJj bGUpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5v ZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gY2lyY2xlcyBWQUxV RVMgKCc8KDEsIDEpLCAxPic6OmNpcmNsZSk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAw LAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91 dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIGNvbmZsaWN0aW5nIGtleSB2YWx1ZSB2aW9sYXRlcyBl eGNsdXNpb24gY29uc3RyYWludCAiY2lyY2xlc19jX2V4Y2wiLworICBvciBkaWUgImZhaWxlZCB0 byByZXBsaWNhdGUgRVhDTFVERSBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBjaXJjbGVzIik7CisKKyMgUkVGRVJF TkNFUworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJM RSBwcm9kdWN0IChpZCBpbnQgUFJJTUFSWSBLRVksIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gcHJvZHVjdCBWQUxVRVMg KDEsICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJ TlNFUlQgSU5UTyBwcm9kdWN0IFZBTFVFUyAoMiwgJ2JhcicpOyIpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSBvcmRlcnMgKG9yZGVyX2lkIGlu dCBQUklNQVJZIEtFWSwgcHJvZHVjdF9pZCBpbnQgUkVGRVJFTkNFUyBwcm9kdWN0IChpZCkpIik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJz Y3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBvcmRlcnMgVkFMVUVTICgxLCAx MCkiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0 ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAg aW5zZXJ0IG9yIHVwZGF0ZSBvbiB0YWJsZSAib3JkZXJzIiB2aW9sYXRlcyBmb3JlaWduIGtleSBj b25zdHJhaW50ICJvcmRlcnNfcHJvZHVjdF9pZF9ma2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8g cmVwbGljYXRlIFJFRkVSRU5DRVMgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgb3JkZXJzIik7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBwcm9kdWN0Iik7CisKKyMg REVGRVJSQUJMRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFU RSBUQUJMRSB0bXAgKGlkIGludCBQUklNQVJZIEtFWSBERUZFUlJBQkxFLCBuYW1lIHRleHQpOyIp OworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRt cCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CisjIFF1aWNrIGNoZWNrIG9mIGRlZmVy cmFibGUgY2xhdXNlCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlVQ REFURSB0bXAgU0VUIGlkID0gaWQgKyAxOyIpOworIyBBbHNvLCBleGVjdXRlIGEgdGVzdCB0aGF0 IHNob3VsZCBmYWlsIGZvciBJTklUSUFMTFkgSU1NRURJQVRFKHRoZSBkZWZhdWx0KQorJG5vZGVf c3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCBxcSgKK0JFR0lOOworVVBEQVRFIHRtcCBTRVQg aWQgPSBpZCArIDE7CitJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgzLCAnZm9vYmFyJyk7CitERUxF VEUgRlJPTSB0bXAgV0hFUkUgaWQgPSAzOworQ09NTUlUOworKSwgb25fZXJyb3Jfc3RvcCA9PiAw LCBzdGRlcnIgPT4gXCRzdGRlcnIsIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9F UlJPUjogIGR1cGxpY2F0ZSBrZXkgdmFsdWUgdmlvbGF0ZXMgdW5pcXVlIGNvbnN0cmFpbnQgInRt cF9wa2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIERFRkVSUkFCTEUgYXQgY3Jl YXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRS T1AgVEFCTEUgdG1wOyIpOworCisjIE5PVCBERUZFUlJBQkxFCiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50IFBSSU1BUlkgS0VZ IE5PVCBERUZFUlJBQkxFLCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFM VUVTICgyLCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215 c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJVUERBVEUgdG1wIFNF VCBpZCA9IGlkICsgMTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0 ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIg PX4gL0VSUk9SOiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWlu dCAidG1wX3BrZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgTk9UIERFRkVSUkFC TEUgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIERFRkVSUkFCTEUgYW5kIElOSVRJQUxMWSBE RUZFUlJFRAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU QUJMRSB0bXAgKGlkIGludCBQUklNQVJZIEtFWSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJF RCwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnZm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMiwgJ2Jhcicp OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworIyBRdWlj ayBjaGVjayBvZiBkZWZlcnJhYmxlIGNsYXVzZQorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJVUERBVEUgdG1wIFNFVCBpZCA9IGlkICsgMTsiKTsKKyMgQWxzbywgZXhl Y3V0ZSBhIHRlc3QgdGhhdCBzaG91bGQgc3VjY2VlZCBmb3IgSU5JVElBTExZIERFRkVSUkVECisk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCitCRUdJTjsKK1VQREFU RSB0bXAgU0VUIGlkID0gaWQgKyAxOworSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMywgJ2Zvb2Jh cicpOworREVMRVRFIEZST00gdG1wIFdIRVJFIGlkID0gMzsKK0NPTU1JVDsKKykpOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisj IFRlc3QgQ1JFQVRFIFRBQkxFIHdpdGggdGFibGUgY29uc3RyYWludAorIyBXZSB3aWxsIHNldCB0 d28gY2hlY2tzIGFuZCBjb25kdWN0IHR3byBpbnNlcnRzIHRoYXQgc2hvdWxkIGZhaWwgcmVzcGVj dGl2ZWx5LgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRF IFRBQkxFIHRtcCAocHJpY2UgaW50LCBkaXNjb3VudGVkX3ByaWNlIGludCwgQ0hFQ0sgKGRpc2Nv dW50ZWRfcHJpY2UgPiAwIEFORCBwcmljZSA+IGRpc2NvdW50ZWRfcHJpY2UpKTsiKTsKKyRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXIt PnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEwMCwgMCk7IiwKKwkJ CQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJ CQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cg Zm9yIHJlbGF0aW9uICJ0bXAiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRtcF9jaGVjayIv CisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSB0YWJsZSBjb25zdHJhaW50IChmaXJzdCBj b25kaXRpb24pIGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bv c3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDUwLCAxMDApOyIsCisJCQkJCSAgIG9u X2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBz dGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciByZWxh dGlvbiAidG1wIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0bXBfY2hlY2siLworICBvciBk aWUgImZhaWxlZCB0byByZXBsaWNhdGUgdGFibGUgY29uc3RyYWludCAoc2Vjb25kIGNvbmRpdGlv bikgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIFdJVEggc3Ry b3JhZ2VfcGFyYW1ldGVyCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi Q1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50KSBXSVRIIChmaWxsZmFjdG9yID0gODApOyIpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxV RVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOwor JG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHJlbG9wdGlvbnMgRlJP TSBwZ19jbGFzcyBXSEVSRSByZWxuYW1lID0gJ3RtcCc7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3Rv cCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBc JHN0ZG91dCk7Ciskc3Rkb3V0ID1+IC97ZmlsbGZhY3Rvcj04MH0vCisgIG9yIGRpZSAiZmFpbGVk IHRvIHJlcGxpY2F0ZSBzdG9yYWdlIG9wdGlvbiI7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7Citp cygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSB3aXRoIHN0b3JhZ2VfcGFyYW1ldGVyIHJl cGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9Q IFRBQkxFIHRtcDsiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBUQUJMRVNQQUNFIChjcmVhdGlu ZyBhIHRhYmxlc3BhY2UgaXMgbm90IHJlcGxpY2F0ZWQpCisjIFByZXBhcmUgdGhlIGRpcmVjdG9y aWVzIGZvciB0aGUgcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyIGZpcnN0LgorbXkgKCRiYXNlZGly LCAkdGFibGVzcGFjZV9kaXIpOworCiskYmFzZWRpciA9ICRub2RlX3B1Ymxpc2hlci0+YmFzZWRp cjsKKyR0YWJsZXNwYWNlX2RpciA9ICIkYmFzZWRpci90YmxzcGNfcHViIjsKK21rZGlyKCR0YWJs ZXNwYWNlX2Rpcik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JF QVRFIFRBQkxFU1BBQ0UgbXl0YmxzcGMgTE9DQVRJT04gJyR0YWJsZXNwYWNlX2Rpcic7Iik7Cisk YmFzZWRpciA9ICRub2RlX3N1YnNjcmliZXItPmJhc2VkaXI7CiskdGFibGVzcGFjZV9kaXIgPSAi JGJhc2VkaXIvdGJsc3BjX3N1YiI7Citta2RpciAoJHRhYmxlc3BhY2VfZGlyKTsKKyRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFU1BBQ0UgbXl0Ymxz cGMgTE9DQVRJT04gJyR0YWJsZXNwYWNlX2Rpcic7Iik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQpIFRBQkxFU1BBQ0Ug bXl0YmxzcGM7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5T RVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2Nh dGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgx KSwgJ0NSRUFURSBUQUJMRSBUQUJMRVNQQUNFIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBUZXN0IENS RUFURSBUQUJMRSBPRiAoY3JlYXRpbmcgYSB0eXBlIGlzIG5vdCByZXBsaWNhdGVkKQorJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUWVBFIG15dHlwZSBBUyAo aWQgaW50LCBuYW1lIHRleHQsIGFnZSBpbnQpOyIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVFlQRSBteXR5cGUgQVMgKGlkIGludCwgbmFtZSB0ZXh0 LCBhZ2UgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJD UkVBVEUgVEFCTEUgdG1wIE9GIG15dHlwZTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnYmFyJyk7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0 bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBPRiByZXBsaWNhdGVkJyk7 Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAi KTsKKworcGFzcyAiRERMIHJlcGxpY2F0aW9uIHRlc3RzIHBhc3NlZDoiOworCiskbm9kZV9zdWJz Y3JpYmVyLT5zdG9wOworJG5vZGVfcHVibGlzaGVyLT5zdG9wOworCitkb25lX3Rlc3RpbmcoKTsK LS0gCjIuNy4yLndpbmRvd3MuMQoK --_005_OS0PR01MB5716009FDCCC0B50BCB14A99949D9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v15-0001-Functions-to-deparse-DDL-commands.patch" Content-Description: v15-0001-Functions-to-deparse-DDL-commands.patch Content-Disposition: attachment; filename="v15-0001-Functions-to-deparse-DDL-commands.patch"; size=186997; creation-date="Tue, 02 Aug 2022 03:20:00 GMT"; modification-date="Tue, 02 Aug 2022 03:20:53 GMT" Content-Transfer-Encoding: base64 RnJvbSA3MjhmOTAzZDZhZTQ1YjM3NWE2NWQ3OWEwN2YwMTdhYzc2NDgyMmM0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IFR1ZSwgMiBBdWcgMjAyMiAxMDowODo1MSArMDgwMApTdWJqZWN0OiBbUEFUQ0gg djE1IDEvNF0gRnVuY3Rpb25zIHRvIGRlcGFyc2UgRERMIGNvbW1hbmRzLgoKVGhpcyBwYXRjaCBw cm92aWRlcyBKU09OIGJsb2JzIHJlcHJlc2VudGluZyBEREwgY29tbWFuZHMsIHdoaWNoIGNhbgps YXRlciBiZSByZS1wcm9jZXNzZWQgaW50byBwbGFpbiBzdHJpbmdzIGJ5IHdlbGwtZGVmaW5lZCBz cHJpbnRmLWxpa2UKZXhwYW5zaW9uLiBUaGVzZSBKU09OIG9iamVjdHMgYXJlIGludGVuZGVkIHRv IGFsbG93IGZvciBtYWNoaW5lLWVkaXRpbmcgb2YKdGhlIGNvbW1hbmRzLCBieSByZXBsYWNpbmcg Y2VydGFpbiBub2RlcyB3aXRoaW4gdGhlIG9iamVjdHMuCgpNdWNoIG9mIHRoZSBpbmZvcm1hdGlv biBpbiB0aGUgb3V0cHV0IGJsb2IgYWN0dWFsbHkgY29tZXMgZnJvbSBzeXN0ZW0KY2F0YWxvZ3Ms IG5vdCBmcm9tIHRoZSBjb21tYW5kIHBhcnNlIG5vZGUsIGFzIGl0IGlzIGltcG9zc2libGUgdG8g cmVsaWFibHkKY29uc3RydWN0IGEgZnVsbHktc3BlY2lmaWVkIGNvbW1hbmQgKGkuZS4gb25lIG5v dCBkZXBlbmRlbnQgb24gc2VhcmNoX3BhdGgKZXRjKSBsb29raW5nIG9ubHkgYXQgdGhlIHBhcnNl IG5vZGUuCgpUaGlzIHByb3ZpZGVzIGEgYmFzZSBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiBvZiBE REwgc3RhdGVtZW50cy4gQ3VycmVudGx5LAp0aGUgcGF0Y2ggaGFzIHN1cHBvcnQgZm9yOgoKQ1JF QVRFL0FMVEVSL0RST1AgVEFCTEUgKCopCkNSRUFURS9BTFRFUi9EUk9QIFNFUVVFTkNFCkNSRUFU RS9BTFRFUi9EUk9QIFNDSEVNQQpDUkVBVEUvQUxURVIgRlVOQ1RJT04vUFJPQ0VEVVJFCkNSRUFU RS9BTFRFUiBUUklHR0VSCkNSRUFURS9EUk9QIElOREVYCkNSRUFURS9EUk9QIE9QRVJBVE9SIFtD TEFTUy9GQU1JTFldCgooKikgTm90ZSB0aGF0IHNvbWUgcmVjZW50bHkgaW50cm9kdWNlZCBERExz KGUuZy4gRERMcyByZWxhdGVkIHRvClBBUlRJVElPTkVEIFRBQkxFKSBhcmUgdW5zdXBwb3J0ZWQu IFdlIGNhbiBleHRlbmQgaXQgYXMgd2UgbmVlZCBtb3JlCmZ1bmN0aW9uYWxpdHkgZm9yIERETCBy ZXBsaWNhdGlvbi4KCigqKSBOb3RlIHRoYXQsIGZvciBBVFRBQ0gvREVUQUNIIFBBUlRJVElPTiwg d2UgaGF2ZW4ndCBhZGRlZCBleHRyYSBsb2dpYyBvbgpzdWJzY3JpYmVyIHRvIGhhbmRsZSB0aGUg Y2FzZSB3aGVyZSB0aGUgdGFibGUgb24gcHVibGlzaGVyIGlzIGEgUEFSVElUSU9ORUQKVEFCTEUg d2hpbGUgdGhlIHRhcmdldCB0YWJsZSBvbiBzdWJjcmliZXIgc2lkZSBpcyBOT1JNQUwgdGFibGUu IFdlIHdpbGwKcmVzZWFyY2ggdGhpcyBtb3JlIGFuZCBpbXByb3ZlIHRoaXMgbGF0ZXIuCi0tLQog c3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUgICAgICAgfCAgICAyICsKIHNyYy9iYWNrZW5k L2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgIHwgNTEzNSArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24uYyAgICAgfCAgNzYwICsr KysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYyAgICAgfCAgIDMzICsKIHNyYy9i YWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jIHwgICAgMyArLQogc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3J1bGV1dGlscy5jICAgfCAgMTQ5ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0ICAgICB8ICAgIDYgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaCAgICAg fCAgICAxICsKIHNyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaCAgICAgIHwgICAyMyArCiBz cmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oICB8ICAgIDEgKwogc3JjL2luY2x1ZGUv dXRpbHMvYnVpbHRpbnMuaCAgICAgICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL3J1bGV1 dGlscy5oICAgICAgIHwgICAxMyArCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAg ICB8ICAgIDQgKwogMTMgZmlsZXMgY2hhbmdlZCwgNjA2MSBpbnNlcnRpb25zKCspLCA3MCBkZWxl dGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVw YXJzZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24u YwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaAoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvTWFrZWZpbGUKaW5kZXggNDhmNzM0OC4uMTcxZGZiMiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZp bGUKQEAgLTI5LDYgKzI5LDggQEAgT0JKUyA9IFwKIAljb3B5dG8ubyBcCiAJY3JlYXRlYXMubyBc CiAJZGJjb21tYW5kcy5vIFwKKwlkZGxfZGVwYXJzZS5vIFwKKwlkZGxfanNvbi5vIFwKIAlkZWZp bmUubyBcCiAJZGlzY2FyZC5vIFwKIAlkcm9wY21kcy5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVw YXJzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMTA5YTYKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCkBAIC0wLDAg KzEsNTEzNSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRsX2RlcGFyc2UuYworICoJ ICBGdW5jdGlvbnMgdG8gY29udmVydCB1dGlsaXR5IGNvbW1hbmRzIHRvIG1hY2hpbmUtcGFyc2Vh YmxlCisgKgkgIHJlcHJlc2VudGF0aW9uCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAx OTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9u cyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZv cm5pYQorICoKKyAqIE5PVEVTCisgKgorICogVGhpcyBpcyBpbnRlbmRlZCB0byBwcm92aWRlIEpT T04gYmxvYnMgcmVwcmVzZW50aW5nIERETCBjb21tYW5kcywgd2hpY2ggY2FuCisgKiBsYXRlciBi ZSByZS1wcm9jZXNzZWQgaW50byBwbGFpbiBzdHJpbmdzIGJ5IHdlbGwtZGVmaW5lZCBzcHJpbnRm LWxpa2UKKyAqIGV4cGFuc2lvbi4gIFRoZXNlIEpTT04gb2JqZWN0cyBhcmUgaW50ZW5kZWQgdG8g YWxsb3cgZm9yIG1hY2hpbmUtZWRpdGluZyBvZgorICogdGhlIGNvbW1hbmRzLCBieSByZXBsYWNp bmcgY2VydGFpbiBub2RlcyB3aXRoaW4gdGhlIG9iamVjdHMuCisgKgorICogTXVjaCBvZiB0aGUg aW5mb3JtYXRpb24gaW4gdGhlIG91dHB1dCBibG9iIGFjdHVhbGx5IGNvbWVzIGZyb20gc3lzdGVt CisgKiBjYXRhbG9ncywgbm90IGZyb20gdGhlIGNvbW1hbmQgcGFyc2Ugbm9kZSwgYXMgaXQgaXMg aW1wb3NzaWJsZSB0byByZWxpYWJseQorICogY29uc3RydWN0IGEgZnVsbHktc3BlY2lmaWVkIGNv bW1hbmQgKGkuZS4gb25lIG5vdCBkZXBlbmRlbnQgb24gc2VhcmNoX3BhdGgKKyAqIGV0YykgbG9v a2luZyBvbmx5IGF0IHRoZSBwYXJzZSBub2RlLgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkg IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJ0Y29wL2RkbF9kZXBh cnNlLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvYW1hcGkuaCIKKyNpbmNsdWRlICJhY2Nlc3MvdGFi bGUuaCIKKyNpbmNsdWRlICJhY2Nlc3MvcmVsYXRpb24uaCIKKyNpbmNsdWRlICJjYXRhbG9nL25h bWVzcGFjZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYW0uaCIKKyNpbmNsdWRlICJjYXRhbG9n L3BnX2F0dHJpYnV0ZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY2xhc3MuaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29uc3RyYWlu dC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfZGVwZW5kLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9w Z19pbmhlcml0cy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfbGFuZ3VhZ2UuaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX25hbWVzcGFjZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BjbGFzcy5o IgorI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BlcmF0b3IuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3Bn X29wZmFtaWx5LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wcm9jLmgiCisjaW5jbHVkZSAiY2F0 YWxvZy9wZ19zZXF1ZW5jZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgorI2luY2x1 ZGUgImNvbW1hbmRzL2RlZnJlbS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3NlcXVlbmNlLmgiCisj aW5jbHVkZSAiY29tbWFuZHMvdGFibGVzcGFjZS5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNp bmNsdWRlICJsaWIvaWxpc3QuaCIKKyNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKKyNpbmNs dWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKKyNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVzLmgiCisj aW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgorI2luY2x1ZGUgInJld3JpdGUvcmV3cml0 ZUhhbmRsZXIuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxz L2ZtZ3JvaWRzLmgiCisjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCisjaW5jbHVkZSAidXRpbHMvanNv bmIuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11 dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3JlbC5oIgorI2luY2x1ZGUgInV0aWxzL3J1bGV1dGls cy5oIgorI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCisKKy8qIEVzdGltYXRlZCBsZW5ndGgg b2YgdGhlIGdlbmVyYXRlZCBqc29uYiBzdHJpbmcgKi8KKyNkZWZpbmUgSlNPTkJfRVNUSU1BVEVE X0xFTiAxMjgKKworLyoKKyAqIEJlZm9yZSB0aGV5IGFyZSB0dXJuZWQgaW50byBKU09OQiByZXBy ZXNlbnRhdGlvbiwgZWFjaCBjb21tYW5kIGlzCisgKiByZXByZXNlbnRlZCBhcyBhbiBvYmplY3Qg dHJlZSwgdXNpbmcgdGhlIHN0cnVjdHMgYmVsb3cuCisgKi8KK3R5cGVkZWYgZW51bQoreworCU9i alR5cGVOdWxsLAorCU9ialR5cGVCb29sLAorCU9ialR5cGVTdHJpbmcsCisJT2JqVHlwZUFycmF5 LAorCU9ialR5cGVJbnRlZ2VyLAorCU9ialR5cGVGbG9hdCwKKwlPYmpUeXBlT2JqZWN0Cit9IE9i alR5cGU7CisKK3R5cGVkZWYgc3RydWN0IE9ialRyZWUKK3sKKwlzbGlzdF9oZWFkCXBhcmFtczsK KwlpbnQJCQludW1QYXJhbXM7CisJU3RyaW5nSW5mbwlmbXRpbmZvOworCWJvb2wJCXByZXNlbnQ7 Cit9IE9ialRyZWU7CisKK3R5cGVkZWYgc3RydWN0IE9iakVsZW0KK3sKKwljaGFyCSAgICpuYW1l OworCU9ialR5cGUJCW9ianR5cGU7CisKKwl1bmlvbgorCXsKKwkJYm9vbAkJYm9vbGVhbjsKKwkJ Y2hhcgkgICAqc3RyaW5nOworCQlpbnQ2NAkJaW50ZWdlcjsKKwkJZmxvYXQ4CQlmbHQ7CisJCU9i alRyZWUJICAgKm9iamVjdDsKKwkJTGlzdAkgICAqYXJyYXk7CisJfSB2YWx1ZTsKKwlzbGlzdF9u b2RlCW5vZGU7Cit9IE9iakVsZW07CisKK2Jvb2wgdmVyYm9zZSA9IHRydWU7CisKK3N0YXRpYyBP YmpFbGVtICpuZXdfb2JqZWN0KE9ialR5cGUgdHlwZSwgY2hhciAqbmFtZSk7CitzdGF0aWMgT2Jq RWxlbSAqbmV3X3N0cmluZ19vYmplY3QoY2hhciAqdmFsdWUpOworc3RhdGljIE9iakVsZW0gKm5l d19vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnZhbHVlKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9udWxs X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpuYW1lKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9i b29sX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpuYW1lLCBib29sIHZhbHVlKTsKK3N0YXRp YyB2b2lkIGFwcGVuZF9zdHJpbmdfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5hbWUsIGNo YXIgKnZhbHVlKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnRy ZWUsIGNoYXIgKm5hbWUsIE9ialRyZWUgKnZhbHVlKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9hcnJh eV9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqbmFtZSwgTGlzdCAqYXJyYXkpOworc3RhdGlj IHZvaWQgYXBwZW5kX2Zsb2F0X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpuYW1lLCBmbG9h dDggdmFsdWUpOworc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZF9wcmVtYWRlX29iamVjdChPYmpU cmVlICp0cmVlLCBPYmpFbGVtICplbGVtKTsKK3N0YXRpYyBKc29uYlZhbHVlICpvYmp0cmVlX3Rv X2pzb25iX3JlYyhPYmpUcmVlICp0cmVlLCBKc29uYlBhcnNlU3RhdGUgKnN0YXRlKTsKK3N0YXRp YyB2b2lkIGZvcm1hdF90eXBlX2RldGFpbGVkKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCwK KwkJCQkJCQkJIE9pZCAqbnNwaWQsIGNoYXIgKip0eXBuYW1lLCBjaGFyICoqdHlwZW1vZHN0ciwK KwkJCQkJCQkJIGJvb2wgKnR5cGFycmF5KTsKK3N0YXRpYyBjb25zdCBjaGFyICpzdHJpbmdpZnlf b2JqdHlwZShPYmplY3RUeXBlIG9ianR5cGUpOworCitzdGF0aWMgY2hhciAqUmVsYXRpb25HZXRD b2x1bW5EZWZhdWx0KFJlbGF0aW9uIHJlbCwgQXR0ck51bWJlciBhdHRubywKKwkJCQkJCQkJCSAg TGlzdCAqZHBjb250ZXh0LCBMaXN0ICoqZXhwcnMpOworc3RhdGljIExpc3QgKkZ1bmN0aW9uR2V0 RGVmYXVsdHModGV4dCAqcHJvYXJnZGVmYXVsdHMpOworCitzdGF0aWMgaW5saW5lIE9iakVsZW0g KmRlcGFyc2VfU2VxX0NhY2hlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFk YXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9T ZXFfQ3ljbGUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wg YWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9JbmNyZW1l bnRCeShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRl cl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX01pbnZhbHVlKE9i alRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxl KTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfTWF4dmFsdWUoT2JqVHJlZSAq cGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3Rh dGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9TdGFydHdpdGgoT2JqVHJlZSAqcGFyZW50 LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlu bGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9SZXN0YXJ0KE9ialRyZWUgKnBhcmVudCwgRm9ybV9w Z19zZXF1ZW5jZV9kYXRhIHNlcWRhdGEpOworCisvKgorICogU2ltaWxhciB0byBmb3JtYXRfdHlw ZV9leHRlbmRlZCwgZXhjZXB0IHdlIHJldHVybiBlYWNoIGJpdCBvZiBpbmZvcm1hdGlvbgorICog c2VwYXJhdGVseToKKyAqCisgKiAtIG5zcGlkIGlzIHRoZSBzY2hlbWEgT0lELiAgRm9yIGNlcnRh aW4gU1FMLXN0YW5kYXJkIHR5cGVzIHdoaWNoIGhhdmUgd2VpcmQKKyAqICAgdHlwbW9kIHJ1bGVz LCB3ZSByZXR1cm4gSW52YWxpZE9pZDsgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIG5vdCBzY2hlbWEt CisgKiAgIHF1YWxpZnkgdGhlIG5hbWUgbm9yIGFkZCBxdW90ZXMgdG8gdGhlIHR5cGUgbmFtZSBp biB0aGlzIGNhc2UuCisgKgorICogLSB0eXBlbmFtZSBpcyBzZXQgdG8gdGhlIHR5cGUgbmFtZSwg d2l0aG91dCBxdW90ZXMKKyAqCisgKiAtIHR5cG1vZCBpcyBzZXQgdG8gdGhlIHR5cGVtb2QsIGlm IGFueSwgYXMgYSBzdHJpbmcgd2l0aCBwYXJlbnMKKyAqCisgKiAtIHR5cGFycmF5IGluZGljYXRl cyB3aGV0aGVyIFtdcyBtdXN0IGJlIGFkZGVkCisgKgorICogV2UgZG9uJ3QgdHJ5IHRvIGRlY29k ZSB0eXBlIG5hbWVzIHRvIHRoZWlyIHN0YW5kYXJkLW1hbmRhdGVkIG5hbWVzLCBleGNlcHQKKyAq IGluIHRoZSBjYXNlcyBvZiB0eXBlcyB3aXRoIHVudXN1YWwgdHlwbW9kIHJ1bGVzLgorICovCitz dGF0aWMgdm9pZAorZm9ybWF0X3R5cGVfZGV0YWlsZWQoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBl bW9kLAorCQkJCQkgT2lkICpuc3BpZCwgY2hhciAqKnR5cG5hbWUsIGNoYXIgKip0eXBlbW9kc3Ry LAorCQkJCQkgYm9vbCAqdHlwYXJyYXkpCit7CisJSGVhcFR1cGxlCQl0dXBsZTsKKwlGb3JtX3Bn X3R5cGUJdHlwZWZvcm07CisJT2lkCQkJCWFycmF5X2Jhc2VfdHlwZTsKKworCXR1cGxlID0gU2Vh cmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0dW0odHlwZV9vaWQpKTsKKwlpZiAo IUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3IgdHlwZSAldSIsIHR5cGVfb2lkKTsKKworCXR5cGVmb3JtID0gKEZvcm1fcGdfdHlw ZSkgR0VUU1RSVUNUKHR1cGxlKTsKKworCS8qCisJICogQ2hlY2sgaWYgaXQncyBhIHJlZ3VsYXIg KHZhcmlhYmxlIGxlbmd0aCkgYXJyYXkgdHlwZS4gIEFzIGFib3ZlLAorCSAqIGZpeGVkLWxlbmd0 aCBhcnJheSB0eXBlcyBzdWNoIGFzICJuYW1lIiBzaG91bGRuJ3QgZ2V0IGRlY29uc3RydWN0ZWQu CisJICovCisJYXJyYXlfYmFzZV90eXBlID0gdHlwZWZvcm0tPnR5cGVsZW07CisKKwlpZiAoSXNU cnVlQXJyYXlUeXBlKHR5cGVmb3JtKSAmJgorCQl0eXBlZm9ybS0+dHlwc3RvcmFnZSAhPSBUWVBT VE9SQUdFX1BMQUlOKQorCXsKKwkJLyogU3dpdGNoIG91ciBhdHRlbnRpb24gdG8gdGhlIGFycmF5 IGVsZW1lbnQgdHlwZSAqLworCQlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworCQl0dXBsZSA9IFNl YXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKGFycmF5X2Jhc2VfdHlwZSkp OworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQorCQkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgJXUiLCB0eXBlX29pZCk7CisKKwkJdHlwZWZvcm0gPSAo Rm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHVwbGUpOworCQl0eXBlX29pZCA9IGFycmF5X2Jhc2Vf dHlwZTsKKwkJKnR5cGFycmF5ID0gdHJ1ZTsKKwl9CisJZWxzZQorCQkqdHlwYXJyYXkgPSBmYWxz ZTsKKworCS8qCisJICogU3BlY2lhbC1jYXNlIGNyb2NrIGZvciB0eXBlcyB3aXRoIHN0cmFuZ2Ug dHlwbW9kIHJ1bGVzIHdoZXJlIHdlIHB1dAorCSAqIHR5cG1vZCBhdCB0aGUgbWlkZGxlIG9mIG5h bWUoZS5nLiBUSU1FKDYpIHdpdGggdGltZSB6b25lICkuIFdlIGNhbm5vdAorCSAqIHNjaGVtYS1x dWFsaWZ5IG5vciBhZGQgcXVvdGVzIHRvIHRoZSB0eXBlIG5hbWUgaW4gdGhlc2UgY2FzZXMuCisJ ICovCisJaWYgKHR5cGVfb2lkID09IElOVEVSVkFMT0lEIHx8CisJCXR5cGVfb2lkID09IFRJTUVT VEFNUE9JRCB8fAorCQl0eXBlX29pZCA9PSBUSU1FU1RBTVBUWk9JRCB8fAorCQl0eXBlX29pZCA9 PSBUSU1FT0lEIHx8CisJCXR5cGVfb2lkID09IFRJTUVUWk9JRCkKKwl7CisJCXN3aXRjaCAodHlw ZV9vaWQpCisJCXsKKwkJCWNhc2UgSU5URVJWQUxPSUQ6CisJCQkJKnR5cG5hbWUgPSBwc3RyZHVw KCJJTlRFUlZBTCIpOworCQkJCWJyZWFrOworCQkJY2FzZSBUSU1FU1RBTVBUWk9JRDoKKwkJCQlp ZiAodHlwZW1vZCA8IDApCisJCQkJCSp0eXBuYW1lID0gcHN0cmR1cCgiVElNRVNUQU1QIFdJVEgg VElNRSBaT05FIik7CisJCQkJZWxzZQorCQkJCQkvKiBvdGhlcndpc2UsIFdJVEggVFogaXMgYWRk ZWQgYnkgdHlwbW9kLiAqLworCQkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJTUVTVEFNUCIpOwor CQkJCWJyZWFrOworCQkJY2FzZSBUSU1FU1RBTVBPSUQ6CisJCQkJKnR5cG5hbWUgPSBwc3RyZHVw KCJUSU1FU1RBTVAiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVElNRVRaT0lEOgorCQkJCWlmICh0 eXBlbW9kIDwgMCkKKwkJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1FIFdJVEggVElNRSBaT05F Iik7CisJCQkJZWxzZQorCQkJCQkvKiBvdGhlcndpc2UsIFdJVEggVFogaXMgYWRkZWQgYnkgdHlw bW9kZS4gKi8KKwkJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1FIik7CisJCQkJYnJlYWs7CisJ CQljYXNlIFRJTUVPSUQ6CisJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1FIik7CisJCQkJYnJl YWs7CisJCX0KKwkJKm5zcGlkID0gSW52YWxpZE9pZDsKKwl9CisJZWxzZQorCXsKKwkJLyoKKwkJ ICogTm8gYWRkaXRpb25hbCBwcm9jZXNzaW5nIGlzIHJlcXVpcmVkIGZvciBvdGhlciB0eXBlcywg c28gZ2V0IHRoZSB0eXBlCisJCSAqIG5hbWUgYW5kIHNjaGVtYSBkaXJlY3RseSBmcm9tIHRoZSBj YXRhbG9nLgorCQkgKi8KKwkJKm5zcGlkID0gdHlwZWZvcm0tPnR5cG5hbWVzcGFjZTsKKwkJKnR5 cG5hbWUgPSBwc3RyZHVwKE5hbWVTdHIodHlwZWZvcm0tPnR5cG5hbWUpKTsKKwl9CisKKwlpZiAo dHlwZW1vZCA+PSAwKQorCQkqdHlwZW1vZHN0ciA9IHByaW50VHlwbW9kKCIiLCB0eXBlbW9kLCB0 eXBlZm9ybS0+dHlwbW9kb3V0KTsKKwllbHNlCisJCSp0eXBlbW9kc3RyID0gcHN0cmR1cCgiIik7 CisKKwlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworfQorCisvKgorICogT2J0YWluIHRoZSBkZXBh cnNlZCBkZWZhdWx0IHZhbHVlIGZvciB0aGUgZ2l2ZW4gY29sdW1uIG9mIHRoZSBnaXZlbiB0YWJs ZS4KKyAqCisgKiBDYWxsZXIgbXVzdCBoYXZlIHNldCBhIGNvcnJlY3QgZGVwYXJzZSBjb250ZXh0 LgorICovCitzdGF0aWMgY2hhciAqCitSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQoUmVsYXRpb24g cmVsLCBBdHRyTnVtYmVyIGF0dG5vLCBMaXN0ICpkcGNvbnRleHQsCisJCQkJCQkgTGlzdCAqKmV4 cHJzKQoreworCU5vZGUgKmRlZnZhbDsKKwljaGFyICpkZWZzdHI7CisKKwlkZWZ2YWwgPSBidWls ZF9jb2x1bW5fZGVmYXVsdChyZWwsIGF0dG5vKTsKKwlkZWZzdHIgPSBkZXBhcnNlX2V4cHJlc3Np b24oZGVmdmFsLCBkcGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisKKwkvKiBDb2xsZWN0IHRoZSBl eHByZXNzaW9uIGZvciBsYXRlciByZXBsaWNhdGlvbiBzYWZldHkgY2hlY2tzICovCisJaWYgKGV4 cHJzKQorCQkqZXhwcnMgPSBsYXBwZW5kKCpleHBycywgZGVmdmFsKTsKKworCXJldHVybiBkZWZz dHI7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGRlZmF1bHRzIHZhbHVlcyBvZiBhcmd1bWVudHMg dG8gYSBmdW5jdGlvbiwgYXMgYSBsaXN0IG9mCisgKiBkZXBhcnNlZCBleHByZXNzaW9ucy4KKyAq Lworc3RhdGljIExpc3QgKgorRnVuY3Rpb25HZXREZWZhdWx0cyh0ZXh0ICpwcm9hcmdkZWZhdWx0 cykKK3sKKwlMaXN0ICAgKm5vZGVkZWZzOworCUxpc3QgICAqc3RyZGVmcyA9IE5JTDsKKwlMaXN0 Q2VsbCAqY2VsbDsKKworCW5vZGVkZWZzID0gKExpc3QgKikgc3RyaW5nVG9Ob2RlKFRleHREYXR1 bUdldENTdHJpbmcocHJvYXJnZGVmYXVsdHMpKTsKKwlpZiAoIUlzQShub2RlZGVmcywgTGlzdCkp CisJCWVsb2coRVJST1IsICJwcm9hcmdkZWZhdWx0cyBpcyBub3QgYSBsaXN0Iik7CisKKwlmb3Jl YWNoKGNlbGwsIG5vZGVkZWZzKQorCXsKKwkJTm9kZSAgICpvbmVkZWYgPSBsZmlyc3QoY2VsbCk7 CisKKwkJc3RyZGVmcyA9IGxhcHBlbmQoc3RyZGVmcywgZGVwYXJzZV9leHByZXNzaW9uKG9uZWRl ZiwgTklMLCBmYWxzZSwgZmFsc2UpKTsKKwl9CisKKwlyZXR1cm4gc3RyZGVmczsKK30KKworLyoK KyAqIEFsbG9jYXRlIGEgbmV3IG9iamVjdCB0cmVlIHRvIHN0b3JlIHBhcmFtZXRlciB2YWx1ZXMu CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlKGNoYXIgKmZtdCkKK3sKKwlPYmpU cmVlCSpwYXJhbXM7CisKKwlwYXJhbXMgPSBwYWxsb2MwKHNpemVvZihPYmpUcmVlKSk7CisJcGFy YW1zLT5wcmVzZW50ID0gdHJ1ZTsKKwlzbGlzdF9pbml0KCZwYXJhbXMtPnBhcmFtcyk7CisKKwlp ZiAoZm10KQorCXsKKwkJcGFyYW1zLT5mbXRpbmZvID0gbWFrZVN0cmluZ0luZm8oKTsKKwkJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZyhwYXJhbXMtPmZtdGluZm8sIGZtdCk7CisJfQorCisJcmV0dXJu IHBhcmFtczsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IG9iamVjdCB0cmVlIHRvIHN0b3Jl IHBhcmFtZXRlciB2YWx1ZXMgLS0gdmFyYXJncyB2ZXJzaW9uLgorICoKKyAqIFRoZSAiZm10IiBh cmd1bWVudCBpcyB1c2VkIHRvIGFwcGVuZCBhcyBhICJmbXQiIGVsZW1lbnQgaW4gdGhlIG91dHB1 dCBibG9iLgorICogbnVtb2JqcyBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBleHRyYSBlbGVtZW50 cyB0byBhcHBlbmQ7IGZvciBlYWNoIG9uZSwgYQorICogbmFtZSAoc3RyaW5nKSwgdHlwZSAoZnJv bSB0aGUgT2JqVHlwZSBlbnVtKSBhbmQgdmFsdWUgbXVzdCBiZSBzdXBwbGllZC4gIFRoZQorICog dmFsdWUgbXVzdCBtYXRjaCB0aGUgdHlwZSBnaXZlbjsgZm9yIGluc3RhbmNlLCBPYmpUeXBlSW50 ZWdlciByZXF1aXJlcyBhbgorICogaW50NjQsIE9ialR5cGVTdHJpbmcgcmVxdWlyZXMgYSBjaGFy ICosIE9ialR5cGVBcnJheSByZXF1aXJlcyBhIGxpc3QgKG9mCisgKiBPYmpFbGVtKSwgT2JqVHlw ZU9iamVjdCByZXF1aXJlcyBhbiBPYmpUcmVlLCBhbmQgc28gb24uICBFYWNoIGVsZW1lbnQgdHlw ZSAqCisgKiBtdXN0IG1hdGNoIHRoZSBjb252ZXJzaW9uIHNwZWNpZmllciBnaXZlbiBpbiB0aGUg Zm9ybWF0IHN0cmluZywgYXMgZGVzY3JpYmVkCisgKiBpbiBkZGxfZGVwYXJzZV9leHBhbmRfY29t bWFuZCwgcS52LgorICoKKyAqIE5vdGUgd2UgZG9uJ3QgaGF2ZSB0aGUgbHV4dXJ5IG9mIHNwcmlu dGYtbGlrZSBjb21waWxlciB3YXJuaW5ncyBmb3IKKyAqIG1hbGZvcm1lZCBhcmd1bWVudCBsaXN0 cy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfVkEoY2hhciAqZm10LCBpbnQg bnVtb2JqcywuLi4pCit7CisJT2JqVHJlZQkgICAqdHJlZTsKKwl2YV9saXN0CQlhcmdzOworCWlu dAkJCWk7CisKKwkvKiBTZXQgdXAgdGhlIHRvcGxldmVsIG9iamVjdCBhbmQgaXRzICJmbXQiICov CisJdHJlZSA9IG5ld19vYmp0cmVlKGZtdCk7CisKKwkvKiBBbmQgcHJvY2VzcyB0aGUgZ2l2ZW4g dmFyYXJncyAqLworCXZhX3N0YXJ0KGFyZ3MsIG51bW9ianMpOworCWZvciAoaSA9IDA7IGkgPCBu dW1vYmpzOyBpKyspCisJeworCQljaGFyCSAgICpuYW1lOworCQlPYmpUeXBlCQl0eXBlOworCQlP YmpFbGVtCSAgICplbGVtOworCisJCW5hbWUgPSB2YV9hcmcoYXJncywgY2hhciAqKTsKKwkJdHlw ZSA9IHZhX2FyZyhhcmdzLCBPYmpUeXBlKTsKKwkJZWxlbSA9IG5ld19vYmplY3QodHlwZSwgTlVM TCk7CisKKwkJLyoKKwkJICogRm9yIGFsbCBvdGhlciBwYXJhbSB0eXBlcyB0aGVyZSBtdXN0IGJl IGEgdmFsdWUgaW4gdGhlIHZhcmFyZ3MuCisJCSAqIEZldGNoIGl0IGFuZCBhZGQgdGhlIGZ1bGx5 IGZvcm1lZCBzdWJvYmplY3QgaW50byB0aGUgbWFpbiBvYmplY3QuCisJCSAqLworCQlzd2l0Y2gg KHR5cGUpCisJCXsKKwkJCWNhc2UgT2JqVHlwZU51bGw6CisJCQkJLyogTnVsbCBwYXJhbXMgZG9u J3QgaGF2ZSBhIHZhbHVlIChvYnZpb3VzbHkpICovCisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5 cGVCb29sOgorCQkJCWVsZW0tPnZhbHVlLmJvb2xlYW4gPSB2YV9hcmcoYXJncywgaW50KTsKKwkJ CQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZVN0cmluZzoKKwkJCQllbGVtLT52YWx1ZS5zdHJpbmcg PSB2YV9hcmcoYXJncywgY2hhciAqKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZUFycmF5 OgorCQkJCWVsZW0tPnZhbHVlLmFycmF5ID0gdmFfYXJnKGFyZ3MsIExpc3QgKik7CisJCQkJYnJl YWs7CisJCQljYXNlIE9ialR5cGVJbnRlZ2VyOgorCQkJCWVsZW0tPnZhbHVlLmludGVnZXIgPSB2 YV9hcmcoYXJncywgaW50NjQpOworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlRmxvYXQ6CisJ CQkJZWxlbS0+dmFsdWUuZmx0ID0gdmFfYXJnKGFyZ3MsIGRvdWJsZSk7CisJCQkJYnJlYWs7CisJ CQljYXNlIE9ialR5cGVPYmplY3Q6CisJCQkJZWxlbS0+dmFsdWUub2JqZWN0ID0gdmFfYXJnKGFy Z3MsIE9ialRyZWUgKik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2coRVJST1Is ICJpbnZhbGlkIE9ialRyZWUgZWxlbWVudCB0eXBlICVkIiwgdHlwZSk7CisJCX0KKworCQllbGVt LT5uYW1lID0gbmFtZTsKKwkJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIGVsZW0pOworCX0K KworCXZhX2VuZChhcmdzKTsKKwlyZXR1cm4gdHJlZTsKK30KKworLyoKKyAqIEFwcGVuZCB0aGUg aW5wdXQgZm9ybWF0IHN0cmluZyB0byB0aGUgT2JqVHJlZS4KKyAqLworc3RhdGljIHZvaWQKK2Fw cGVuZF9mb3JtYXRfc3RyaW5nKE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQpCit7CisJaW50 CQkJCWxlbjsKKwljaGFyCQkgICAqZm10OworCisJaWYgKCF0cmVlLT5mbXRpbmZvKQorCQlyZXR1 cm47CisKKwlmbXQgPSB0cmVlLT5mbXRpbmZvLT5kYXRhOworCWxlbiA9IHRyZWUtPmZtdGluZm8t PmxlbjsKKworCS8qIEFkZCBhIHNlcGFyYXRvciBpZiBuZWNlc3NhcnkgKi8KKwlpZiAobGVuID4g MCAmJiBmbXRbbGVuIC0gMV0gIT0gJyAnKQorCQlhcHBlbmRTdHJpbmdJbmZvU3BhY2VzKHRyZWUt PmZtdGluZm8sIDEpOworCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyh0cmVlLT5mbXRpbmZvLCBz dWJfZm10KTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgb2JqZWN0IG5hbWUgd2hpY2ggaXMgZXh0 cmFjdGVkIGZyb20gdGhlIGlucHV0ICIqJXtuYW1lWzouXX0qIgorICogc3R5bGUgc3RyaW5nLiBB bmQgYXBwZW5kIHRoZSBpbnB1dCBmb3JtYXQgc3RyaW5nIHRvIHRoZSBPYmpUcmVlLgorICovCitz dGF0aWMgY2hhciAqCithcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcoT2JqVHJlZSAqdHJl ZSwgY2hhciAqc3ViX2ZtdCkKK3sKKwlTdHJpbmdJbmZvRGF0YQlvYmplY3RfbmFtZTsKKwljb25z dCBjaGFyCSAgICplbmRfcHRyOworCWNvbnN0IGNoYXIJICAgKmNwOworCWJvb2wJCQlzdGFydF9j b3B5ID0gZmFsc2U7CisKKwlpZiAoc3ViX2ZtdCA9PSBOVUxMIHx8IHRyZWUtPmZtdGluZm8gPT0g TlVMTCkKKwkJcmV0dXJuIHN1Yl9mbXQ7CisKKwlpbml0U3RyaW5nSW5mbygmb2JqZWN0X25hbWUp OworCWVuZF9wdHIgPSBzdWJfZm10ICsgc3RybGVuKHN1Yl9mbXQpOworCisJZm9yIChjcCA9IHN1 Yl9mbXQ7IGNwIDwgZW5kX3B0cjsgY3ArKykKKwl7CisJCWlmICgqY3AgPT0gJ3snKQorCQl7CisJ CQlzdGFydF9jb3B5ID0gdHJ1ZTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFzdGFydF9j b3B5KQorCQkJY29udGludWU7CisKKwkJaWYgKCpjcCA9PSAnOicgfHwgKmNwID09ICd9JykKKwkJ CWJyZWFrOworCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oJm9iamVjdF9uYW1lLCAqY3Ap OworCX0KKworCWlmIChvYmplY3RfbmFtZS5sZW4gPT0gMCkKKwkJZWxvZyhFUlJPUiwgIm9iamVj dCBuYW1lIG5vdCBmb3VuZCIpOworCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2Zt dCk7CisKKwlyZXR1cm4gb2JqZWN0X25hbWUuZGF0YTsKK30KKworLyogQWxsb2NhdGUgYSBuZXcg cGFyYW1ldGVyICovCitzdGF0aWMgT2JqRWxlbSAqCituZXdfb2JqZWN0KE9ialR5cGUgdHlwZSwg Y2hhciAqbmFtZSkKK3sKKwlPYmpFbGVtCSpwYXJhbTsKKworCXBhcmFtID0gcGFsbG9jMChzaXpl b2YoT2JqRWxlbSkpOworCXBhcmFtLT5uYW1lID0gbmFtZTsKKwlwYXJhbS0+b2JqdHlwZSA9IHR5 cGU7CisKKwlyZXR1cm4gcGFyYW07Cit9CisKKy8qIEFwcGVuZCBhIE5VTEwgb2JqZWN0IHRvIGEg dHJlZSAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9udWxsX29iamVjdChPYmpUcmVlICp0cmVlLCBj aGFyICpzdWJfZm10KQoreworCWNoYXIgKm9iamVjdF9uYW1lOworCisJQXNzZXJ0KHN1Yl9mbXQp OworCisJaWYgKCF2ZXJib3NlKQorCQlyZXR1cm47CisKKwlvYmplY3RfbmFtZSA9IGFwcGVuZF9v YmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCWFwcGVuZF9wcmVtYWRl X29iamVjdCh0cmVlLCBuZXdfb2JqZWN0KE9ialR5cGVOdWxsLCBvYmplY3RfbmFtZSkpOworfQor CisvKiBBcHBlbmQgYSBib29sZWFuIHBhcmFtZXRlciB0byBhIHRyZWUgKi8KK3N0YXRpYyB2b2lk CithcHBlbmRfYm9vbF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgYm9vbCB2 YWx1ZSkKK3sKKwlPYmpFbGVtICAqcGFyYW07CisJY2hhcgkgKm9iamVjdF9uYW1lID0gc3ViX2Zt dDsKKwlib29sCSAgaXNfcHJlc2VudF9mbGFnID0gZmFsc2U7CisKKwlBc3NlcnQoc3ViX2ZtdCk7 CisKKwlpZiAoc3RyY21wKHN1Yl9mbXQsICJwcmVzZW50IikgPT0gMCkKKwl7CisJCWlzX3ByZXNl bnRfZmxhZyA9IHRydWU7CisJCXRyZWUtPnByZXNlbnQgPSB2YWx1ZTsKKwl9CisKKwlpZiAoIXZl cmJvc2UgJiYgIXRyZWUtPnByZXNlbnQpCisJCXJldHVybjsKKworCWlmICghaXNfcHJlc2VudF9m bGFnKQorCQlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVl LCBzdWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlQm9vbCwgb2JqZWN0X25h bWUpOworCXBhcmFtLT52YWx1ZS5ib29sZWFuID0gdmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2Jq ZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyogQWxsb2NhdGUgYSBuZXcgc3RyaW5nIG9iamVjdCAq Lworc3RhdGljIE9iakVsZW0gKgorbmV3X3N0cmluZ19vYmplY3QoY2hhciAqdmFsdWUpCit7CisJ T2JqRWxlbSAgICAqcGFyYW07CisKKwlBc3NlcnQodmFsdWUpOworCisJcGFyYW0gPSBuZXdfb2Jq ZWN0KE9ialR5cGVTdHJpbmcsIE5VTEwpOworCXBhcmFtLT52YWx1ZS5zdHJpbmcgPSB2YWx1ZTsK KworCXJldHVybiBwYXJhbTsKK30KKworLyogQXBwZW5kIGEgc3RyaW5nIHBhcmFtZXRlciB0byBh IHRyZWUgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfc3RyaW5nX29iamVjdChPYmpUcmVlICp0cmVl LCBjaGFyICpzdWJfZm10LCBjaGFyICp2YWx1ZSkKK3sKKwlPYmpFbGVtCSAgICpwYXJhbTsKKwlj aGFyCSAgICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCWlmICghdmVyYm9z ZSAmJiAodmFsdWUgPT0gTlVMTCB8fCB2YWx1ZVswXSA9PSAnXDAnKSkKKwkJcmV0dXJuOworCisJ b2JqZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2Zt dCk7CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZVN0cmluZywgb2JqZWN0X25hbWUpOwor CXBhcmFtLT52YWx1ZS5zdHJpbmcgPSB2YWx1ZTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJl ZSwgcGFyYW0pOworfQorCisvKiBBbGxvY2F0ZSBhIG5ldyBvYmplY3QgcGFyYW1ldGVyICovCitz dGF0aWMgT2JqRWxlbSAqCituZXdfb2JqZWN0X29iamVjdChPYmpUcmVlICp2YWx1ZSkKK3sKKwlP YmpFbGVtCSpwYXJhbTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlT2JqZWN0LCBOVUxM KTsKKwlwYXJhbS0+dmFsdWUub2JqZWN0ID0gdmFsdWU7CisKKwlyZXR1cm4gcGFyYW07Cit9CisK Ky8qIEFwcGVuZCBhbiBvYmplY3QgcGFyYW1ldGVyIHRvIGEgdHJlZSAqLworc3RhdGljIHZvaWQK K2FwcGVuZF9vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIE9ialRy ZWUgKnZhbHVlKQoreworCU9iakVsZW0JKnBhcmFtOworCWNoYXIgICAqb2JqZWN0X25hbWU7CisK KwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlpZiAoIXZlcmJvc2UgJiYgIXZhbHVlLT5wcmVzZW50KQor CQlyZXR1cm47CisKKwlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmlu Zyh0cmVlLCBzdWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlT2JqZWN0LCBv YmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLm9iamVjdCA9IHZhbHVlOworCWFwcGVuZF9wcmVt YWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qIEFwcGVuZCBhbiBhcnJheSBwYXJhbWV0 ZXIgdG8gYSB0cmVlICovCitzdGF0aWMgdm9pZAorYXBwZW5kX2FycmF5X29iamVjdChPYmpUcmVl ICp0cmVlLCBjaGFyICpzdWJfZm10LCBMaXN0ICphcnJheSkKK3sKKwlPYmpFbGVtCSpwYXJhbTsK KwljaGFyICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCWlmICghdmVyYm9z ZSkKKwl7CisJCUxpc3RDZWxsICpsYzsKKworCQkvKiBFeHRyYWN0IHRoZSBPYmpFbGVtcyB3aG9z ZSBwcmVzZW50IGZsYWcgaXMgdHJ1ZSAqLworCQlmb3JlYWNoKGxjLCBhcnJheSkKKwkJeworCQkJ T2JqRWxlbSAqZWxlbSA9IChPYmpFbGVtICopIGxmaXJzdChsYyk7CisKKwkJCUFzc2VydChlbGVt LT5vYmp0eXBlID09IE9ialR5cGVPYmplY3QpOworCisJCQlpZiAoIWVsZW0tPnZhbHVlLm9iamVj dC0+cHJlc2VudCkKKwkJCQlhcnJheSA9IGZvcmVhY2hfZGVsZXRlX2N1cnJlbnQoYXJyYXksIGxj KTsKKwkJfQorCisJCWlmIChsaXN0X2xlbmd0aChhcnJheSkgPT0gMCkKKwkJCXJldHVybjsKKwl9 CisKKwlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBz dWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlQXJyYXksIG9iamVjdF9uYW1l KTsKKwlwYXJhbS0+dmFsdWUuYXJyYXkgPSBhcnJheTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3Qo dHJlZSwgcGFyYW0pOworfQorCisvKgorICogQXBwZW5kIGEgZmxvYXQ4IHBhcmFtZXRlciB0byBh IHRyZWUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfZmxvYXRfb2JqZWN0KE9ialRyZWUgKnRy ZWUsIGNoYXIgKnN1Yl9mbXQsIGZsb2F0OCB2YWx1ZSkKK3sKKwlPYmpFbGVtCSAgICpwYXJhbTsK KwljaGFyCSAgICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCW9iamVjdF9u YW1lID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJ cGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVGbG9hdCwgb2JqZWN0X25hbWUpOworCXBhcmFtLT52 YWx1ZS5mbHQgPSB2YWx1ZTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgcGFyYW0pOwor fQorCisvKiBBcHBlbmQgYSBwcmVhbGxvY2F0ZWQgcGFyYW1ldGVyIHRvIGEgdHJlZSAqLworc3Rh dGljIGlubGluZSB2b2lkCithcHBlbmRfcHJlbWFkZV9vYmplY3QoT2JqVHJlZSAqdHJlZSwgT2Jq RWxlbSAqZWxlbSkKK3sKKwlzbGlzdF9wdXNoX2hlYWQoJnRyZWUtPnBhcmFtcywgJmVsZW0tPm5v ZGUpOworCXRyZWUtPm51bVBhcmFtcysrOworfQorCisvKgorICogUHJvY2VzcyB0aGUgcHJlLWJ1 aWx0IGZvcm1hdCBzdHJpbmcgZnJvbSB0aGUgT2JqVHJlZSBpbnRvIHRoZSBvdXRwdXQgcGFyc2UK KyAqIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorb2JqdHJlZV9mbXRfdG9fanNvbmJfZWxlbWVu dChKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBPYmpUcmVlICp0cmVlKQoreworCUpzb25iVmFsdWUJ a2V5OworCUpzb25iVmFsdWUJdmFsOworCisJaWYgKCF0cmVlLT5mbXRpbmZvKQorCQlyZXR1cm47 CisKKwkvKiBQdXNoIHRoZSBrZXkgZmlyc3QgKi8KKwlrZXkudHlwZSA9IGpidlN0cmluZzsKKwlr ZXkudmFsLnN0cmluZy52YWwgPSAiZm10IjsKKwlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4o a2V5LnZhbC5zdHJpbmcudmFsKTsKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9LRVksICZr ZXkpOworCisJLyogVGhlbiBwcm9jZXNzIHRoZSBwcmUtYnVpbHQgZm9ybWF0IHN0cmluZyAqLwor CXZhbC50eXBlID0gamJ2U3RyaW5nOworCXZhbC52YWwuc3RyaW5nLmxlbiA9IHRyZWUtPmZtdGlu Zm8tPmxlbjsKKwl2YWwudmFsLnN0cmluZy52YWwgPSB0cmVlLT5mbXRpbmZvLT5kYXRhOworCXB1 c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX1ZBTFVFLCAmdmFsKTsKK30KKworLyoKKyAqIEhlbHBl ciBmb3Igb2JqdHJlZV90b19qc29uYjogcHJvY2VzcyBhbiBpbmRpdmlkdWFsIGVsZW1lbnQgZnJv bSBhbiBvYmplY3Qgb3IKKyAqIGFuIGFycmF5IGludG8gdGhlIG91dHB1dCBwYXJzZSBzdGF0ZS4K KyAqLworc3RhdGljIHZvaWQKK29ianRyZWVfdG9fanNvbmJfZWxlbWVudChKc29uYlBhcnNlU3Rh dGUgKnN0YXRlLCBPYmpFbGVtICpvYmplY3QsCisJCQkJCQkgSnNvbmJJdGVyYXRvclRva2VuIGVs ZW1fdG9rZW4pCit7CisJTGlzdENlbGwgICAqY2VsbDsKKwlKc29uYlZhbHVlCXZhbDsKKworCXN3 aXRjaCAob2JqZWN0LT5vYmp0eXBlKQorCXsKKwkJY2FzZSBPYmpUeXBlTnVsbDoKKwkJCXZhbC50 eXBlID0gamJ2TnVsbDsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZh bCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVTdHJpbmc6CisJCQl2YWwudHlwZSA9IGpi dlN0cmluZzsKKwkJCXZhbC52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihvYmplY3QtPnZhbHVlLnN0 cmluZyk7CisJCQl2YWwudmFsLnN0cmluZy52YWwgPSBvYmplY3QtPnZhbHVlLnN0cmluZzsKKwkJ CXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKwor CQljYXNlIE9ialR5cGVJbnRlZ2VyOgorCQkJdmFsLnR5cGUgPSBqYnZOdW1lcmljOworCQkJdmFs LnZhbC5udW1lcmljID0gKE51bWVyaWMpCisJCQkJRGF0dW1HZXROdW1lcmljKERpcmVjdEZ1bmN0 aW9uQ2FsbDEoaW50OF9udW1lcmljLAorCQkJCQkJCQkJCQkJCW9iamVjdC0+dmFsdWUuaW50ZWdl cikpOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rva2VuLCAmdmFsKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgT2JqVHlwZUZsb2F0OgorCQkJdmFsLnR5cGUgPSBqYnZOdW1lcmljOwor CQkJdmFsLnZhbC5udW1lcmljID0gKE51bWVyaWMpCisJCQkJRGF0dW1HZXROdW1lcmljKERpcmVj dEZ1bmN0aW9uQ2FsbDEoZmxvYXQ4X251bWVyaWMsCisJCQkJCQkJCQkJCQkJb2JqZWN0LT52YWx1 ZS5pbnRlZ2VyKSk7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwp OworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlQm9vbDoKKwkJCXZhbC50eXBlID0gamJ2Qm9v bDsKKwkJCXZhbC52YWwuYm9vbGVhbiA9IG9iamVjdC0+dmFsdWUuYm9vbGVhbjsKKwkJCXB1c2hK c29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNl IE9ialR5cGVPYmplY3Q6CisJCQkvKiByZWN1cnNpdmVseSBhZGQgdGhlIG9iamVjdCBpbnRvIHRo ZSBleGlzdGluZyBwYXJzZSBzdGF0ZSAqLworCQkJb2JqdHJlZV90b19qc29uYl9yZWMob2JqZWN0 LT52YWx1ZS5vYmplY3QsIHN0YXRlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUFycmF5 OgorCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fQVJSQVksIE5VTEwpOworCQkJ Zm9yZWFjaChjZWxsLCBvYmplY3QtPnZhbHVlLmFycmF5KQorCQkJeworCQkJCU9iakVsZW0gICAq ZWxlbSA9IGxmaXJzdChjZWxsKTsKKworCQkJCW9ianRyZWVfdG9fanNvbmJfZWxlbWVudChzdGF0 ZSwgZWxlbSwgV0pCX0VMRU0pOworCQkJfQorCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJf RU5EX0FSUkFZLCBOVUxMKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9S LCAidW5yZWNvZ25pemVkIG9iamVjdCB0eXBlICVkIiwgb2JqZWN0LT5vYmp0eXBlKTsKKwkJCWJy ZWFrOworCX0KK30KKworLyoKKyAqIFJlY3Vyc2l2ZSBoZWxwZXIgZm9yIG9ianRyZWVfdG9fanNv bmIuCisgKi8KK3N0YXRpYyBKc29uYlZhbHVlICoKK29ianRyZWVfdG9fanNvbmJfcmVjKE9ialRy ZWUgKnRyZWUsIEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUpCit7CisJc2xpc3RfaXRlcglpdGVyOwor CisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKworCW9i anRyZWVfZm10X3RvX2pzb25iX2VsZW1lbnQoc3RhdGUsIHRyZWUpOworCisJc2xpc3RfZm9yZWFj aChpdGVyLCAmdHJlZS0+cGFyYW1zKQorCXsKKwkJT2JqRWxlbQkqb2JqZWN0ID0gc2xpc3RfY29u dGFpbmVyKE9iakVsZW0sIG5vZGUsIGl0ZXIuY3VyKTsKKwkJSnNvbmJWYWx1ZQlrZXk7CisKKwkJ LyogUHVzaCB0aGUga2V5IGZpcnN0ICovCisJCWtleS50eXBlID0gamJ2U3RyaW5nOworCQlrZXku dmFsLnN0cmluZy5sZW4gPSBzdHJsZW4ob2JqZWN0LT5uYW1lKTsKKwkJa2V5LnZhbC5zdHJpbmcu dmFsID0gb2JqZWN0LT5uYW1lOworCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9LRVksICZr ZXkpOworCisJCS8qIFRoZW4gcHJvY2VzcyB0aGUgdmFsdWUgYWNjb3JkaW5nIHRvIGl0cyB0eXBl ICovCisJCW9ianRyZWVfdG9fanNvbmJfZWxlbWVudChzdGF0ZSwgb2JqZWN0LCBXSkJfVkFMVUUp OworCX0KKworCXJldHVybiBwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBO VUxMKTsKK30KKworLyoKKyAqIENyZWF0ZSBhIEpTT05CIHJlcHJlc2VudGF0aW9uIGZyb20gYW4g T2JqVHJlZS4KKyAqLworc3RhdGljIEpzb25iICoKK29ianRyZWVfdG9fanNvbmIoT2JqVHJlZSAq dHJlZSkKK3sKKwlKc29uYlZhbHVlICp2YWx1ZTsKKworCXZhbHVlID0gb2JqdHJlZV90b19qc29u Yl9yZWModHJlZSwgTlVMTCk7CisJcmV0dXJuIEpzb25iVmFsdWVUb0pzb25iKHZhbHVlKTsKK30K KworLyoKKyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0dXAgJXt9VCBlbGVtZW50cy4KKyAqLwor c3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3R5cGUoT2lkIHR5cGVJZCwgaW50MzIg dHlwbW9kKQoreworCU9ialRyZWUJKnR5cGVQYXJhbTsKKwlPaWQJCQl0eXBuc3BpZDsKKwljaGFy CSAgICp0eXBuc3A7CisJY2hhcgkgICAqdHlwZW5hbWUgPSBOVUxMOworCWNoYXIJICAgKnR5cG1v ZHN0cjsKKwlib29sCQl0eXBhcnJheTsKKworCWZvcm1hdF90eXBlX2RldGFpbGVkKHR5cGVJZCwg dHlwbW9kLAorCQkJCQkJICZ0eXBuc3BpZCwgJnR5cGVuYW1lLCAmdHlwbW9kc3RyLCAmdHlwYXJy YXkpOworCisJaWYgKE9pZElzVmFsaWQodHlwbnNwaWQpKQorCQl0eXBuc3AgPSBnZXRfbmFtZXNw YWNlX25hbWVfb3JfdGVtcCh0eXBuc3BpZCk7CisJZWxzZQorCQl0eXBuc3AgPSBwc3RyZHVwKCIi KTsKKworCXR5cGVQYXJhbSA9IG5ld19vYmp0cmVlX1ZBKE5VTEwsIDQsCisJCQkJCQkJICAgInNj aGVtYW5hbWUiLCBPYmpUeXBlU3RyaW5nLCB0eXBuc3AsCisJCQkJCQkJICAgInR5cGVuYW1lIiwg T2JqVHlwZVN0cmluZywgdHlwZW5hbWUsCisJCQkJCQkJICAgInR5cG1vZCIsIE9ialR5cGVTdHJp bmcsIHR5cG1vZHN0ciwKKwkJCQkJCQkgICAidHlwYXJyYXkiLCBPYmpUeXBlQm9vbCwgdHlwYXJy YXkpOworCisJcmV0dXJuIHR5cGVQYXJhbTsKK30KKworLyoKKyAqIEEgaGVscGVyIHJvdXRpbmUg dG8gc2V0dXAgJXt9RCBhbmQgJXt9TyBlbGVtZW50cy4KKyAqCisgKiBFbGVtZW50cyAic2NoZW1h bmFtZSIgYW5kICJvYmpuYW1lIiBhcmUgc2V0LiAgSWYgdGhlIG5hbWVzcGFjZSBPSUQKKyAqIGNv cnJlc3BvbmRzIHRvIGEgdGVtcCBzY2hlbWEsIHRoYXQncyBzZXQgdG8gInBnX3RlbXAiLgorICoK KyAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhvc2UgdHdvIGVsZW1lbnQgdHlwZXMgaXMgd2hl dGhlciB0aGUgb2JqbmFtZSB3aWxsCisgKiBiZSBxdW90ZWQgYXMgYW4gaWRlbnRpZmllciBvciBu b3QsIHdoaWNoIGlzIG5vdCBzb21ldGhpbmcgdGhhdCB0aGlzIHJvdXRpbmUKKyAqIGNvbmNlcm5z IGl0c2VsZiB3aXRoOyB0aGF0IHdpbGwgYmUgdXAgdG8gdGhlIGV4cGFuZCBmdW5jdGlvbi4KKyAq Lworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKE9pZCBuc3BpZCwg Y2hhciAqbmFtZSkKK3sKKwlPYmpUcmVlCSpxdWFsaWZpZWQ7CisJY2hhcgkgICAqbmFtZXNwYWNl OworCisJaWYgKGlzQW55VGVtcE5hbWVzcGFjZShuc3BpZCkpCisJCW5hbWVzcGFjZSA9IHBzdHJk dXAoInBnX3RlbXAiKTsKKwllbHNlCisJCW5hbWVzcGFjZSA9IGdldF9uYW1lc3BhY2VfbmFtZShu c3BpZCk7CisKKwlxdWFsaWZpZWQgPSBuZXdfb2JqdHJlZV9WQShOVUxMLCAyLAorCQkJCQkJCSAg InNjaGVtYW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBuYW1lc3BhY2UsCisJCQkJCQkJICAib2JqbmFt ZSIsIE9ialR5cGVTdHJpbmcsIHBzdHJkdXAobmFtZSkpOworCisJcmV0dXJuIHF1YWxpZmllZDsK K30KKworLyoKKyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0dXAgJXt9RCBhbmQgJXt9TyBlbGVt ZW50cywgd2l0aCB0aGUgb2JqZWN0IHNwZWNpZmllZAorICogYnkgY2xhc3NJZC9vYmpJZC4KKyAq CisgKiBFbGVtZW50cyAic2NoZW1hbmFtZSIgYW5kICJvYmpuYW1lIiBhcmUgc2V0LiAgSWYgdGhl IG9iamVjdCBpcyBhIHRlbXBvcmFyeQorICogb2JqZWN0LCB0aGUgc2NoZW1hIG5hbWUgaXMgc2V0 IHRvICJwZ190ZW1wIi4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKE9pZCBjbGFzc0lkLCBPaWQgb2JqZWN0SWQpCit7CisJT2JqVHJlZQkqcXVhbGlm aWVkOworCVJlbGF0aW9uCWNhdGFsb2c7CisJSGVhcFR1cGxlCWNhdG9iajsKKwlEYXR1bQkJb2Jq bnNwOworCURhdHVtCQlvYmpuYW1lOworCUF0dHJOdW1iZXIJQW51bV9uYW1lOworCUF0dHJOdW1i ZXIJQW51bV9uYW1lc3BhY2U7CisJQXR0ck51bWJlcglBbnVtX29pZCA9IGdldF9vYmplY3RfYXR0 bnVtX29pZChjbGFzc0lkKTsKKwlib29sCQlpc251bGw7CisKKwljYXRhbG9nID0gdGFibGVfb3Bl bihjbGFzc0lkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJY2F0b2JqID0gZ2V0X2NhdGFsb2dfb2Jq ZWN0X2J5X29pZChjYXRhbG9nLCBBbnVtX29pZCwgb2JqZWN0SWQpOworCWlmICghY2F0b2JqKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb2JqZWN0ICV1IG9mIGNhdGFs b2cgXCIlc1wiIiwKKwkJCSBvYmplY3RJZCwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoY2F0YWxv ZykpOworCUFudW1fbmFtZSA9IGdldF9vYmplY3RfYXR0bnVtX25hbWUoY2xhc3NJZCk7CisJQW51 bV9uYW1lc3BhY2UgPSBnZXRfb2JqZWN0X2F0dG51bV9uYW1lc3BhY2UoY2xhc3NJZCk7CisKKwlv Ympuc3AgPSBoZWFwX2dldGF0dHIoY2F0b2JqLCBBbnVtX25hbWVzcGFjZSwgUmVsYXRpb25HZXRE ZXNjcihjYXRhbG9nKSwKKwkJCQkJCSAgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhF UlJPUiwgInVuZXhwZWN0ZWQgTlVMTCBuYW1lc3BhY2UiKTsKKwlvYmpuYW1lID0gaGVhcF9nZXRh dHRyKGNhdG9iaiwgQW51bV9uYW1lLCBSZWxhdGlvbkdldERlc2NyKGNhdGFsb2cpLAorCQkJCQkJ ICAgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgTlVM TCBuYW1lIik7CisKKwlxdWFsaWZpZWQgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoRGF0dW1H ZXRPYmplY3RJZChvYmpuc3ApLAorCQkJCQkJCQkJCSBOYW1lU3RyKCpEYXR1bUdldE5hbWUob2Jq bmFtZSkpKTsKKwl0YWJsZV9jbG9zZShjYXRhbG9nLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0 dXJuIHF1YWxpZmllZDsKK30KKworLyoKKyAqIFJldHVybiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0 aW9uIG9mIHRoZSBnaXZlbiBSRUxQRVJTSVNURU5DRSB2YWx1ZS4KKyAqLworc3RhdGljIGNoYXIg KgorZ2V0X3BlcnNpc3RlbmNlX3N0cihjaGFyIHBlcnNpc3RlbmNlKQoreworCXN3aXRjaCAocGVy c2lzdGVuY2UpCisJeworCQljYXNlIFJFTFBFUlNJU1RFTkNFX1RFTVA6CisJCQlyZXR1cm4gIlRF TVBPUkFSWSI7CisJCWNhc2UgUkVMUEVSU0lTVEVOQ0VfVU5MT0dHRUQ6CisJCQlyZXR1cm4gIlVO TE9HR0VEIjsKKwkJY2FzZSBSRUxQRVJTSVNURU5DRV9QRVJNQU5FTlQ6CisJCQlyZXR1cm4gIiI7 CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBwZXJzaXN0ZW5jZSBtYXJr aW5nICVjIiwgcGVyc2lzdGVuY2UpOworCQkJcmV0dXJuICIiOwkJLyogbWFrZSBjb21waWxlciBo YXBweSAqLworCX0KK30KKworLyoKKyAqIERlcGFyc2UgdGhlIGRlZmluaXRpb24gb2YgY29sdW1u IGlkZW50aXR5LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbHVtbklkZW50aXR5 KE9pZCBzZXFyZWxpZCwgY2hhciBpZGVudGl0eSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpU cmVlCSAgICpjb2x1bW47CisJT2JqVHJlZQkgICAqaWRlbnRvYmo7CisJTGlzdAkgICAqZWxlbXMg PSBOSUw7CisJUmVsYXRpb24JcmVsOworCUhlYXBUdXBsZQlzZXF0dXBsZTsKKwlGb3JtX3BnX3Nl cXVlbmNlIHNlcWZvcm07CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGE7CisJY2hhcgkg ICAqaWRlbnRmbXQ7CisJY2hhcgkgICAqb2JqZm10OworCisJY29sdW1uID0gbmV3X29ianRyZWUo IiIpOworCisJaWYgKCFPaWRJc1ZhbGlkKHNlcXJlbGlkKSkKKwl7CisJCWFwcGVuZF9ib29sX29i amVjdChjb2x1bW4sICJwcmVzZW50IiwgZmFsc2UpOworCQlyZXR1cm4gY29sdW1uOworCX0KKwor CWlmIChhbHRlcl90YWJsZSkKKwl7CisJCWlkZW50Zm10ID0gIlNFVCBHRU5FUkFURUQgIjsKKwkJ b2JqZm10ID0gIiV7b3B0aW9ufXMiOworCX0KKwllbHNlCisJeworCQlpZGVudGZtdCA9ICJHRU5F UkFURUQgIjsKKwkJb2JqZm10ID0gIiV7b3B0aW9ufXMgQVMgSURFTlRJVFkiOworCX0KKworCWlk ZW50b2JqID0gbmV3X29ianRyZWUoaWRlbnRmbXQpOworCisJaWYgKGlkZW50aXR5ID09IEFUVFJJ QlVURV9JREVOVElUWV9BTFdBWVMpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGlkZW50b2JqLCBv YmpmbXQsICJBTFdBWVMiKTsKKwllbHNlIGlmIChpZGVudGl0eSA9PSAgQVRUUklCVVRFX0lERU5U SVRZX0JZX0RFRkFVTFQpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGlkZW50b2JqLCBvYmpmbXQs ICJCWSBERUZBVUxUIik7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QoaWRlbnRvYmosICJw cmVzZW50IiwgZmFsc2UpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QoY29sdW1uLCAiJXtpZGVu dGl0eV90eXBlfXMiLCBpZGVudG9iaik7CisKKwlyZWwgPSB0YWJsZV9vcGVuKFNlcXVlbmNlUmVs YXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJc2VxdHVwbGUgPSBTZWFyY2hTeXNDYWNoZUNv cHkxKFNFUVJFTElELCBzZXFyZWxpZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHNlcXR1cGxl KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNlcXVlbmNlICV1IiwK KwkJCSBzZXFyZWxpZCk7CisKKwlzZXFmb3JtID0gKEZvcm1fcGdfc2VxdWVuY2UpIEdFVFNUUlVD VChzZXF0dXBsZSk7CisJc2VxZGF0YSA9IGdldF9zZXF1ZW5jZV92YWx1ZXMoc2VxcmVsaWQpOwor CisJLyogRGVmaW5pdGlvbiBlbGVtZXRzICovCisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBh cnNlX1NlcV9DYWNoZShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFw cGVuZChlbGVtcywgZGVwYXJzZV9TZXFfQ3ljbGUoTlVMTCwgc2VxZm9ybSwgYWx0ZXJfdGFibGUp KTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0luY3JlbWVudEJ5KE5VTEws IHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNl X1NlcV9NaW52YWx1ZShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFw cGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWF4dmFsdWUoTlVMTCwgc2VxZm9ybSwgYWx0ZXJfdGFi bGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX1N0YXJ0d2l0aChOVUxM LCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJz ZV9TZXFfUmVzdGFydChOVUxMLCBzZXFkYXRhKSk7CisJLyogV2UgcHVycG9zZWZ1bGx5IGRvIG5v dCBlbWl0IE9XTkVEIEJZIGhlcmUgKi8KKworCWlmIChhbHRlcl90YWJsZSkKKwkJYXBwZW5kX2Fy cmF5X29iamVjdChjb2x1bW4sICIle3NlcV9kZWZpbml0aW9uOiB9cyIsIGVsZW1zKTsKKwllbHNl CisJCWFwcGVuZF9hcnJheV9vYmplY3QoY29sdW1uLCAiKCAle3NlcV9kZWZpbml0aW9uOiB9cyAp IiwgZWxlbXMpOworCisJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCXJl dHVybiBjb2x1bW47Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlVHJpZ1N0bXQgKENSRUFU RSBUUklHR0VSKQorICoKKyAqIEdpdmVuIGEgdHJpZ2dlciBPSUQgYW5kIHRoZSBwYXJzZXRyZWUg dGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBj cmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVRy aWdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVRyaWdTdG10 ICpub2RlID0gKENyZWF0ZVRyaWdTdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbglwZ190cmln Z2VyOworCUhlYXBUdXBsZQl0cmlnVHVwOworCUZvcm1fcGdfdHJpZ2dlciB0cmlnRm9ybTsKKwlP YmpUcmVlCSAgICp0cmlnZ2VyOworCU9ialRyZWUJICAgKnRtcDsKKwlpbnQJCQl0Z25hcmdzOwor CUxpc3QJICAgKmxpc3Q7CisJTGlzdAkgICAqZXZlbnRzOworCisJcGdfdHJpZ2dlciA9IHRhYmxl X29wZW4oVHJpZ2dlclJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwl0cmlnVHVwID0g Z2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChwZ190cmlnZ2VyLCBBbnVtX3BnX3RyaWdnZXJfb2lk LCBvYmplY3RJZCk7CisJdHJpZ0Zvcm0gPSAoRm9ybV9wZ190cmlnZ2VyKSBHRVRTVFJVQ1QodHJp Z1R1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgJXtjb25z dHJhaW50fXMgVFJJR0dFUiAle25hbWV9SSAle3RpbWV9cyAle2V2ZW50czogT1IgfXMKKwkgKiBP TiAle3JlbGF0aW9ufUQgJXtmcm9tX3RhYmxlfXMgJXtjb25zdHJhaW50X2F0dHJzOiB9cworCSAq IEZPUiBFQUNIICV7Zm9yX2VhY2h9cyAle3doZW59cyBFWEVDVVRFIFBST0NFRFVSRSAle2Z1bmN0 aW9ufXMKKwkgKi8KKwl0cmlnZ2VyID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5k X3N0cmluZ19vYmplY3QodHJpZ2dlciwgIiV7Y29uc3RyYWludH1zIiwKKwkJCQkJCSBub2RlLT5p c2NvbnN0cmFpbnQgPyAiQ09OU1RSQUlOVCIgOiAiIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVj dCh0cmlnZ2VyLCAiVFJJR0dFUiAle25hbWV9SSIsIG5vZGUtPnRyaWduYW1lKTsKKworCWlmIChu b2RlLT50aW1pbmcgPT0gVFJJR0dFUl9UWVBFX0JFRk9SRSkKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodHJpZ2dlciwgIiV7dGltZX1zIiwgIkJFRk9SRSIpOworCWVsc2UgaWYgKG5vZGUtPnRpbWlu ZyA9PSBUUklHR0VSX1RZUEVfQUZURVIpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRyaWdnZXIs ICIle3RpbWV9cyIsICJBRlRFUiIpOworCWVsc2UgaWYgKG5vZGUtPnRpbWluZyA9PSBUUklHR0VS X1RZUEVfSU5TVEVBRCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodHJpZ2dlciwgIiV7dGltZX1z IiwgIklOU1RFQUQgT0YiKTsKKwllbHNlCisJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgdHJp Z2dlciB0aW1pbmcgdmFsdWUgJWQiLCBub2RlLT50aW1pbmcpOworCisJLyoKKwkgKiBEZWNvZGUg dGhlIGV2ZW50cyB0aGF0IHRoZSB0cmlnZ2VyIGZpcmVzIGZvci4gIFRoZSBvdXRwdXQgaXMgYSBs aXN0OworCSAqIGluIG1vc3QgY2FzZXMgaXQgd2lsbCBqdXN0IGJlIGEgc3RyaW5nIHdpdGggdGhl IGV2ZW4gbmFtZSwgYnV0IHdoZW4KKwkgKiB0aGVyZSdzIGFuIFVQREFURSB3aXRoIGEgbGlzdCBv ZiBjb2x1bW5zLCB3ZSByZXR1cm4gYSBKU09OIG9iamVjdC4KKwkgKi8KKwlldmVudHMgPSBOSUw7 CisJaWYgKG5vZGUtPmV2ZW50cyAmIFRSSUdHRVJfVFlQRV9JTlNFUlQpCisJCWV2ZW50cyA9IGxh cHBlbmQoZXZlbnRzLCBuZXdfc3RyaW5nX29iamVjdCgiSU5TRVJUIikpOworCWlmIChub2RlLT5l dmVudHMgJiBUUklHR0VSX1RZUEVfREVMRVRFKQorCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywg bmV3X3N0cmluZ19vYmplY3QoIkRFTEVURSIpKTsKKwlpZiAobm9kZS0+ZXZlbnRzICYgVFJJR0dF Ul9UWVBFX1RSVU5DQVRFKQorCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19v YmplY3QoIlRSVU5DQVRFIikpOworCWlmIChub2RlLT5ldmVudHMgJiBUUklHR0VSX1RZUEVfVVBE QVRFKQorCXsKKwkJaWYgKG5vZGUtPmNvbHVtbnMgPT0gTklMKQorCQl7CisJCQlldmVudHMgPSBs YXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIlVQREFURSIpKTsKKwkJfQorCQllbHNl CisJCXsKKwkJCU9ialRyZWUJICAgKnVwZGF0ZTsKKwkJCUxpc3RDZWxsICAgKmNlbGw7CisJCQlM aXN0CSAgICpjb2xzID0gTklMOworCisJCQkvKgorCQkJICogQ3VycmVudGx5IG9ubHkgVVBEQVRF IE9GIGNhbiBiZSBvYmplY3RzIGluIHRoZSBvdXRwdXQgSlNPTiwgYnV0CisJCQkgKiB3ZSBhZGQg YSAia2luZCIgZWxlbWVudCBzbyB0aGF0IHVzZXIgY29kZSBjYW4gZGlzdGluZ3Vpc2gKKwkJCSAq IHBvc3NpYmxlIGZ1dHVyZSBuZXcgZXZlbnQgdHlwZXMuCisJCQkgKi8KKwkJCXVwZGF0ZSA9IG5l d19vYmp0cmVlX1ZBKCJVUERBVEUgT0YiLCAxLAorCQkJCQkJCQkJImtpbmQiLCBPYmpUeXBlU3Ry aW5nLCAidXBkYXRlX29mIik7CisKKwkJCWZvcmVhY2goY2VsbCwgbm9kZS0+Y29sdW1ucykKKwkJ CXsKKwkJCQljaGFyICAgKmNvbG5hbWUgPSBzdHJWYWwobGZpcnN0KGNlbGwpKTsKKworCQkJCWNv bHMgPSBsYXBwZW5kKGNvbHMsCisJCQkJCQkJICAgbmV3X3N0cmluZ19vYmplY3QoY29sbmFtZSkp OworCQkJfQorCisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHVwZGF0ZSwgIiV7Y29sdW1uczosIH1J IiwgY29scyk7CisKKwkJCWV2ZW50cyA9IGxhcHBlbmQoZXZlbnRzLAorCQkJCQkJCSBuZXdfb2Jq ZWN0X29iamVjdCh1cGRhdGUpKTsKKwkJfQorCX0KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHRyaWdn ZXIsICIle2V2ZW50czogT1IgfXMiLCBldmVudHMpOworCisJdG1wID0gbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCSAgdHJpZ0Zvcm0tPnRn cmVsaWQpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRyaWdnZXIsICJPTiAle3JlbGF0aW9ufUQi LCB0bXApOworCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkZST00iLCAwKTsKKwlpZiAodHJpZ0Zv cm0tPnRnY29uc3RycmVsaWQpCisJeworCQlPYmpUcmVlCSAgICpyZWw7CisKKwkJcmVsID0gbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkg IHRyaWdGb3JtLT50Z2NvbnN0cnJlbGlkKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAi JXtyZWxhdGlvbn1EIiwgcmVsKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1w LCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0cmlnZ2VyLCAiJXtm cm9tX3RhYmxlfXMiLCB0bXApOworCisJbGlzdCA9IE5JTDsKKwlpZiAobm9kZS0+ZGVmZXJyYWJs ZSkKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwKKwkJCQkJICAgbmV3X3N0cmluZ19vYmplY3QoIkRF RkVSUkFCTEUiKSk7CisJaWYgKG5vZGUtPmluaXRkZWZlcnJlZCkKKwkJbGlzdCA9IGxhcHBlbmQo bGlzdCwKKwkJCQkJICAgbmV3X3N0cmluZ19vYmplY3QoIklOSVRJQUxMWSBERUZFUlJFRCIpKTsK KwlhcHBlbmRfYXJyYXlfb2JqZWN0KHRyaWdnZXIsICIle2NvbnN0cmFpbnRfYXR0cnM6IH1zIiwg bGlzdCk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdCh0cmlnZ2VyLCAiRk9SIEVBQ0ggJXtmb3Jf ZWFjaH1zIiwKKwkJCQkJCSBub2RlLT5yb3cgPyAiUk9XIiA6ICJTVEFURU1FTlQiKTsKKworCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJXSEVOIiwgMCk7CisJaWYgKG5vZGUtPndoZW5DbGF1c2UpCisJ eworCQlOb2RlCSAgICp3aGVuQ2xhdXNlOworCQlEYXR1bQkJdmFsdWU7CisJCWJvb2wJCWlzbnVs bDsKKworCQl2YWx1ZSA9IGZhc3RnZXRhdHRyKHRyaWdUdXAsIEFudW1fcGdfdHJpZ2dlcl90Z3F1 YWwsCisJCQkJCQkJUmVsYXRpb25HZXREZXNjcihwZ190cmlnZ2VyKSwgJmlzbnVsbCk7CisJCWlm IChpc251bGwpCisJCQllbG9nKEVSUk9SLCAiYm9ndXMgTlVMTCB0Z3F1YWwiKTsKKworCQl3aGVu Q2xhdXNlID0gc3RyaW5nVG9Ob2RlKFRleHREYXR1bUdldENTdHJpbmcodmFsdWUpKTsKKwkJYXBw ZW5kX3N0cmluZ19vYmplY3QodG1wLCAiKCV7Y2xhdXNlfXMpIiwKKwkJCQkJCQkgcGdfZ2V0X3Ry aWdnZXJfd2hlbmNsYXVzZSh0cmlnRm9ybSwKKwkJCQkJCQkJCQkJCQkgICB3aGVuQ2xhdXNlLAor CQkJCQkJCQkJCQkJCSAgIGZhbHNlKSk7CisJfQorCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0 KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QodHJpZ2dlciwg IiV7d2hlbn1zIiwgdG1wKTsKKworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIle2Z1bmNuYW1lfUQi LCAxLAorCQkJCQkJICJmdW5jbmFtZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRy aWdGb3JtLT50Z2ZvaWQpKTsKKwlsaXN0ID0gTklMOworCXRnbmFyZ3MgPSB0cmlnRm9ybS0+dGdu YXJnczsKKwlpZiAodGduYXJncyA+IDApCisJeworCQlieXRlYSAgKnRnYXJnczsKKwkJY2hhciAg ICphcmdzdHI7CisJCWJvb2wJaXNudWxsOworCQlpbnQJCWZpbmR4OworCQlpbnQJCWxlbnRnYXJn czsKKwkJY2hhciAgICpwOworCisJCXRnYXJncyA9IERhdHVtR2V0Qnl0ZWFQKGZhc3RnZXRhdHRy KHRyaWdUdXAsCisJCQkJCQkJCQkJCUFudW1fcGdfdHJpZ2dlcl90Z2FyZ3MsCisJCQkJCQkJCQkJ CVJlbGF0aW9uR2V0RGVzY3IocGdfdHJpZ2dlciksCisJCQkJCQkJCQkJCSZpc251bGwpKTsKKwkJ aWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIE5VTEwgdGdhcmdzIik7CisJCWFy Z3N0ciA9IChjaGFyICopIFZBUkRBVEEodGdhcmdzKTsKKwkJbGVudGdhcmdzID0gVkFSU0laRV9B TllfRVhIRFIodGdhcmdzKTsKKworCQlwID0gYXJnc3RyOworCQlmb3IgKGZpbmR4ID0gMDsgZmlu ZHggPCB0Z25hcmdzOyBmaW5keCsrKQorCQl7CisJCQlzaXplX3QJdGxlbjsKKworCQkJLyogdmVy aWZ5IHRoYXQgdGhlIGFyZ3VtZW50IGVuY29kaW5nIGlzIGNvcnJlY3QgKi8KKwkJCXRsZW4gPSBz dHJsZW4ocCk7CisJCQlpZiAocCArIHRsZW4gPj0gYXJnc3RyICsgbGVudGdhcmdzKQorCQkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKKwkJCQkJCSBlcnJtc2coImludmFsaWQgYXJndW1lbnQgc3RyaW5nICglcykgZm9yIHRy aWdnZXIgXCIlc1wiIiwKKwkJCQkJCQkJYXJnc3RyLCBOYW1lU3RyKHRyaWdGb3JtLT50Z25hbWUp KSkpOworCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwKSk7CisK KwkJCXAgKz0gdGxlbiArIDE7CisJCX0KKwl9CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXAs ICIoIik7CisJYXBwZW5kX2FycmF5X29iamVjdCh0bXAsICIle2FyZ3M6LCB9TCIsIGxpc3QpOwkJ LyogbWlnaHQgYmUgTklMICovCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wLCAiKSIpOworCisJ YXBwZW5kX29iamVjdF9vYmplY3QodHJpZ2dlciwgIkVYRUNVVEUgUFJPQ0VEVVJFICV7ZnVuY3Rp b259cyIsIHRtcCk7CisKKwl0YWJsZV9jbG9zZShwZ190cmlnZ2VyLCBBY2Nlc3NTaGFyZUxvY2sp OworCisJcmV0dXJuIHRyaWdnZXI7Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZvciBDUkVBVEUg VEFCTEUgZGVwYXJzaW5nLgorICoKKyAqIERlcGFyc2UgYSBDb2x1bW5EZWYgbm9kZSB3aXRoaW4g YSByZWd1bGFyIChub24gdHlwZWQpIHRhYmxlIGNyZWF0aW9uLgorICoKKyAqIE5PVCBOVUxMIGNv bnN0cmFpbnRzIGluIHRoZSBjb2x1bW4gZGVmaW5pdGlvbiBhcmUgZW1pdHRlZCBkaXJlY3RseSBp biB0aGUKKyAqIGNvbHVtbiBkZWZpbml0aW9uIGJ5IHRoaXMgcm91dGluZTsgb3RoZXIgY29uc3Ry YWludHMgbXVzdCBiZSBlbWl0dGVkCisgKiBlbHNld2hlcmUgKHRoZSBpbmZvIGluIHRoZSBwYXJz ZSBub2RlIGlzIGluY29tcGxldGUgYW55d2F5LikuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfQ29sdW1uRGVmKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICpkcGNvbnRleHQsIGJvb2wg Y29tcG9zaXRlLAorCQkJCSAgQ29sdW1uRGVmICpjb2xkZWYsIGJvb2wgaXNfYWx0ZXIsIExpc3Qg KipleHBycykKK3sKKwlPYmpUcmVlCSAgICpjb2x1bW47CisJT2JqVHJlZQkgICAqdG1wOworCU9p ZAkJCXJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbik7CisJSGVhcFR1cGxlCWF0dHJU dXA7CisJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ckZvcm07CisJT2lkCQkJdHlwaWQ7CisJaW50MzIJ CXR5cG1vZDsKKwlPaWQJCQl0eXBjb2xsYXRpb247CisJYm9vbAkJc2F3X25vdG51bGw7CisJTGlz dENlbGwgICAqY2VsbDsKKworCS8qCisJICogSW5oZXJpdGVkIGNvbHVtbnMgd2l0aG91dCBsb2Nh bCBkZWZpbml0aW9ucyBtdXN0IG5vdCBiZSBlbWl0dGVkLgorCSAqCisJICogWFhYIG1heWJlIGl0 IGlzIHVzZWZ1bCB0byBoYXZlIHRoZW0gd2l0aCAicHJlc2VudCA9IGZhbHNlIiBvciBzb21lIHN1 Y2g/CisJICovCisJaWYgKCFjb2xkZWYtPmlzX2xvY2FsKQorCQlyZXR1cm4gTlVMTDsKKworCWF0 dHJUdXAgPSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUocmVsaWQsIGNvbGRlZi0+Y29sbmFtZSk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGF0dHJUdXApKQorCQllbG9nKEVSUk9SLCAiY291bGQgbm90 IGZpbmQgY2FjaGUgZW50cnkgZm9yIGNvbHVtbiBcIiVzXCIgb2YgcmVsYXRpb24gJXUiLAorCQkJ IGNvbGRlZi0+Y29sbmFtZSwgcmVsaWQpOworCWF0dHJGb3JtID0gKEZvcm1fcGdfYXR0cmlidXRl KSBHRVRTVFJVQ1QoYXR0clR1cCk7CisKKwlnZXRfYXR0dHlwZXR5cG1vZGNvbGwocmVsaWQsIGF0 dHJGb3JtLT5hdHRudW0sCisJCQkJCQkgICZ0eXBpZCwgJnR5cG1vZCwgJnR5cGNvbGxhdGlvbik7 CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiAle25hbWV9SSAle2NvbHR5cGV9 VCAle2NvbXByZXNzaW9ufXMgJXtkZWZhdWx0fXMgJXtub3RfbnVsbH1zCisJICogJXtjb2xsYXRp b259cworCSAqLworCWNvbHVtbiA9IG5ld19vYmp0cmVlX1ZBKCIle25hbWV9SSAle2NvbHR5cGV9 VCIsIDMsCisJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY29sdW1uIiwKKwkJCQkJCQki bmFtZSIsIE9ialR5cGVTdHJpbmcsIGNvbGRlZi0+Y29sbmFtZSwKKwkJCQkJCQkiY29sdHlwZSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUodHlwaWQsIHR5cG1v ZCkpOworCisJLyogVVNJTkcgY2xhdXNlICovCisJdG1wID0gbmV3X29ianRyZWUoIkNPTVBSRVNT SU9OIik7CisJaWYgKGNvbGRlZi0+Y29tcHJlc3Npb24pCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcCwgIiV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCBjb2xkZWYtPmNvbXByZXNzaW9uKTsKKwll bHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wLCAiJXtjb21wcmVzc2lvbl9tZXRob2R9 SSIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisJ YXBwZW5kX29iamVjdF9vYmplY3QoY29sdW1uLCAiJXtjb21wcmVzc2lvbn1zIiwgdG1wKTsKKwor CXRtcCA9IG5ld19vYmp0cmVlKCJDT0xMQVRFIik7CisJaWYgKE9pZElzVmFsaWQodHlwY29sbGF0 aW9uKSkKKwl7CisJCU9ialRyZWUgKmNvbGxuYW1lOworCisJCWNvbGxuYW1lID0gbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCSAgIHR5 cGNvbGxhdGlvbik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7bmFtZX1EIiwgY29s bG5hbWUpOworCX0KKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50Iiwg ZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwgIiV7Y29sbGF0aW9ufXMiLCB0 bXApOworCisJaWYgKCFjb21wb3NpdGUpCisJeworCQlPaWQJc2VxcmVsaWQgPSBJbnZhbGlkT2lk OworCisJCS8qCisJCSAqIEVtaXQgYSBOT1QgTlVMTCBkZWNsYXJhdGlvbiBpZiBuZWNlc3Nhcnku ICBOb3RlIHRoYXQgd2UgY2Fubm90IHRydXN0CisJCSAqIHBnX2F0dHJpYnV0ZS5hdHRub3RudWxs IGhlcmUsIGJlY2F1c2UgdGhhdCBiaXQgaXMgYWxzbyBzZXQgd2hlbgorCQkgKiBwcmltYXJ5IGtl eXMgYXJlIHNwZWNpZmllZDsgYW5kIHdlIG11c3Qgbm90IGVtaXQgYSBOT1QgTlVMTAorCQkgKiBj b25zdHJhaW50IGluIHRoYXQgY2FzZSwgdW5sZXNzIGV4cGxpY2l0ZWx5IHNwZWNpZmllZC4gIFRo ZXJlZm9yZSwKKwkJICogd2Ugc2NhbiB0aGUgbGlzdCBvZiBjb25zdHJhaW50cyBhdHRhY2hlZCB0 byB0aGlzIGNvbHVtbiB0byBkZXRlcm1pbmUKKwkJICogd2hldGhlciB3ZSBuZWVkIHRvIGVtaXQg YW55dGhpbmcuCisJCSAqIChGb3J0dW5hdGVseSwgTk9UIE5VTEwgY29uc3RyYWludHMgY2Fubm90 IGJlIHRhYmxlIGNvbnN0cmFpbnRzLikKKwkJICoKKwkJICogSW4gdGhlIEFMVEVSIFRBQkxFIGNh c2VzLCB3ZSBhbHNvIGFkZCBhIE5PVCBOVUxMIGlmIHRoZSBjb2xEZWYgaXMKKwkJICogbWFya2Vk IGlzX25vdF9udWxsLgorCQkgKi8KKwkJc2F3X25vdG51bGwgPSBmYWxzZTsKKwkJZm9yZWFjaChj ZWxsLCBjb2xkZWYtPmNvbnN0cmFpbnRzKQorCQl7CisJCQlDb25zdHJhaW50ICpjb25zdHIgPSAo Q29uc3RyYWludCAqKSBsZmlyc3QoY2VsbCk7CisKKwkJCWlmIChjb25zdHItPmNvbnR5cGUgPT0g Q09OU1RSX05PVE5VTEwpCisJCQkJc2F3X25vdG51bGwgPSB0cnVlOworCQl9CisJCWlmIChpc19h bHRlciAmJiBjb2xkZWYtPmlzX25vdF9udWxsKQorCQkJc2F3X25vdG51bGwgPSB0cnVlOworCisJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNvbHVtbiwgIiV7bm90X251bGx9cyIsCisJCQkJCQkJIHNh d19ub3RudWxsID8gIk5PVCBOVUxMIiA6ICIiKTsKKworCQl0bXAgPSBuZXdfb2JqdHJlZSgiREVG QVVMVCIpOworCQlpZiAoYXR0ckZvcm0tPmF0dGhhc2RlZikKKwkJeworCQkJY2hhciAqZGVmc3Ry OworCisJCQlkZWZzdHIgPSBSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQocmVsYXRpb24sIGF0dHJG b3JtLT5hdHRudW0sCisJCQkJCQkJCQkJCSAgZHBjb250ZXh0LCBleHBycyk7CisKKwkJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7ZGVmYXVsdH1zIiwgZGVmc3RyKTsKKwkJfQorCQllbHNl CisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwkJYXBwZW5k X29iamVjdF9vYmplY3QoY29sdW1uLCAiJXtkZWZhdWx0fXMiLCB0bXApOworCisJCS8qIElERU5U SVRZIENPTFVNTiAqLworCQlpZiAoY29sZGVmLT5pZGVudGl0eSkKKwkJeworCQkJT2lkCWF0dG5v ID0gZ2V0X2F0dG51bShyZWxpZCwgY29sZGVmLT5jb2xuYW1lKTsKKwkJCXNlcXJlbGlkID0gZ2V0 SWRlbnRpdHlTZXF1ZW5jZShyZWxpZCwgYXR0bm8sIGZhbHNlKTsKKwkJfQorCisJCXRtcCA9IGRl cGFyc2VfQ29sdW1uSWRlbnRpdHkoc2VxcmVsaWQsIGNvbGRlZi0+aWRlbnRpdHksIGlzX2FsdGVy KTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY29sdW1uLCAiJXtpZGVudGl0eV9jb2x1bW59cyIs IHRtcCk7CisKKwkJLyogR0VORVJBVEVEIENPTFVNTiBFWFBSRVNTSU9OICovCisJCXRtcCA9IG5l d19vYmp0cmVlKCJHRU5FUkFURUQgQUxXQVlTIEFTIik7CisJCWlmIChjb2xkZWYtPmdlbmVyYXRl ZCA9PSBBVFRSSUJVVEVfR0VORVJBVEVEX1NUT1JFRCkKKwkJeworCQkJY2hhciAqZGVmc3RyOwor CisJCQlkZWZzdHIgPSBSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQocmVsYXRpb24sIGF0dHJGb3Jt LT5hdHRudW0sCisJCQkJCQkJCQkJCSAgZHBjb250ZXh0LCBleHBycyk7CisJCQlhcHBlbmRfc3Ry aW5nX29iamVjdCh0bXAsICIle2dlbmVyYXRpb25fZXhwcn1zIFNUT1JFRCIsIGRlZnN0cik7CisJ CX0KKwkJZWxzZQorCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7 CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY29sdW1uLCAiJXtnZW5lcmF0ZWRfY29sdW1ufXMi LCB0bXApOworCX0KKworCVJlbGVhc2VTeXNDYWNoZShhdHRyVHVwKTsKKworCXJldHVybiBjb2x1 bW47Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZvciBDUkVBVEUgVEFCTEUgT0YgZGVwYXJzaW5n LgorICoKKyAqIERlcGFyc2UgYSBDb2x1bW5EZWYgbm9kZSB3aXRoaW4gYSB0eXBlZCB0YWJsZSBj cmVhdGlvbi4JVGhpcyBpcyBzaW1wbGVyCisgKiB0aGFuIHRoZSByZWd1bGFyIGNhc2UsIGJlY2F1 c2Ugd2UgZG9uJ3QgaGF2ZSB0byBlbWl0IHRoZSB0eXBlIGRlY2xhcmF0aW9uLAorICogY29sbGF0 aW9uLCBvciBkZWZhdWx0LiAgSGVyZSB3ZSBvbmx5IHJldHVybiBzb21ldGhpbmcgaWYgdGhlIGNv bHVtbiBpcyBiZWluZworICogZGVjbGFyZWQgTk9UIE5VTEwuCisgKgorICogQXMgaW4gZGVwYXJz ZV9Db2x1bW5EZWYsIGFueSBvdGhlciBjb25zdHJhaW50IGlzIHByb2Nlc3NlZCBlbHNld2hlcmUu CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29sdW1uRGVmX3R5cGVkKFJlbGF0aW9u IHJlbGF0aW9uLCBMaXN0ICpkcGNvbnRleHQsIENvbHVtbkRlZiAqY29sZGVmKQoreworCU9ialRy ZWUJKmNvbHVtbiA9IE5VTEw7CisJT2JqVHJlZQkqdG1wOworCU9pZAkJCXJlbGlkID0gUmVsYXRp b25HZXRSZWxpZChyZWxhdGlvbik7CisJSGVhcFR1cGxlCWF0dHJUdXA7CisJRm9ybV9wZ19hdHRy aWJ1dGUgYXR0ckZvcm07CisJT2lkCQkJdHlwaWQ7CisJaW50MzIJCXR5cG1vZDsKKwlPaWQJCQl0 eXBjb2xsYXRpb247CisJYm9vbAkJc2F3X25vdG51bGw7CisJTGlzdENlbGwgICAqY2VsbDsKKwor CWF0dHJUdXAgPSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUocmVsaWQsIGNvbGRlZi0+Y29sbmFtZSk7 CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGF0dHJUdXApKQorCQllbG9nKEVSUk9SLCAiY291bGQg bm90IGZpbmQgY2FjaGUgZW50cnkgZm9yIGNvbHVtbiBcIiVzXCIgb2YgcmVsYXRpb24gJXUiLAor CQkJIGNvbGRlZi0+Y29sbmFtZSwgcmVsaWQpOworCWF0dHJGb3JtID0gKEZvcm1fcGdfYXR0cmli dXRlKSBHRVRTVFJVQ1QoYXR0clR1cCk7CisKKwlnZXRfYXR0dHlwZXR5cG1vZGNvbGwocmVsaWQs IGF0dHJGb3JtLT5hdHRudW0sCisJCQkJCQkgICZ0eXBpZCwgJnR5cG1vZCwgJnR5cGNvbGxhdGlv bik7CisKKwkvKgorCSAqIFNlYXJjaCBmb3IgYSBOT1QgTlVMTCBkZWNsYXJhdGlvbi4gIEFzIGlu IGRlcGFyc2VfQ29sdW1uRGVmLCB3ZSByZWx5IG9uCisJICogZmluZGluZyBhIGNvbnN0cmFpbnQg b24gdGhlIGNvbHVtbiByYXRoZXIgdGhhbiBjb2xkZWYtPmlzX25vdF9udWxsLgorCSAqIChUaGlz IHJvdXRpbmUgaXMgbmV2ZXIgdXNlZCBmb3IgQUxURVIgY2FzZXMuKQorCSAqLworCXNhd19ub3Ru dWxsID0gZmFsc2U7CisJZm9yZWFjaChjZWxsLCBjb2xkZWYtPmNvbnN0cmFpbnRzKQorCXsKKwkJ Q29uc3RyYWludCAqY29uc3RyID0gKENvbnN0cmFpbnQgKikgbGZpcnN0KGNlbGwpOworCisJCWlm IChjb25zdHItPmNvbnR5cGUgPT0gQ09OU1RSX05PVE5VTEwpCisJCXsKKwkJCXNhd19ub3RudWxs ID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFzYXdfbm90bnVsbCAmJiAhYXR0 ckZvcm0tPmF0dGhhc2RlZikKKwl7CisJCVJlbGVhc2VTeXNDYWNoZShhdHRyVHVwKTsKKwkJcmV0 dXJuIE5VTEw7CisJfQorCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogJXtuYW1l fUkgV0lUSCBPUFRJT05TICV7ZGVmYXVsdH1zICV7bm90X251bGx9cy4KKwkgKi8KKwljb2x1bW4g PSBuZXdfb2JqdHJlZV9WQSgiJXtuYW1lfUkgV0lUSCBPUFRJT05TIiwgMiwKKwkJCQkJCQkidHlw ZSIsIE9ialR5cGVTdHJpbmcsICJjb2x1bW4iLAorCQkJCQkJCSJuYW1lIiwgT2JqVHlwZVN0cmlu ZywgY29sZGVmLT5jb2xuYW1lKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNvbHVtbiwgIiV7 bm90X251bGx9cyIsCisJCQkJCQkgc2F3X25vdG51bGwgPyAiTk9UIE5VTEwiIDogIiIpOworCisJ dG1wID0gbmV3X29ianRyZWUoIkRFRkFVTFQiKTsKKwlpZiAoYXR0ckZvcm0tPmF0dGhhc2RlZikK Kwl7CisJCWNoYXIgKmRlZnN0cjsKKworCQlkZWZzdHIgPSBSZWxhdGlvbkdldENvbHVtbkRlZmF1 bHQocmVsYXRpb24sIGF0dHJGb3JtLT5hdHRudW0sCisJCQkJCQkJCQkJICBkcGNvbnRleHQsIE5V TEwpOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7ZGVmYXVsdH1zIiwgZGVmc3Ry KTsKKwl9CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNl KTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIle2RlZmF1bHR9cyIsIHRtcCk7CisK KwkvKgorCSAqIEdlbmVyYXRlZCBjb2x1bW5zIGFyZSBub3Qgc3VwcG9ydGVkIG9uIHR5cGVkIHRh Ymxlcywgc28gd2UgYXJlIGRvbmUuCisJICovCisKKwlSZWxlYXNlU3lzQ2FjaGUoYXR0clR1cCk7 CisKKwlyZXR1cm4gY29sdW1uOworfQorCisvKgorICogU3Vicm91dGluZSBmb3IgQ1JFQVRFIFRB QkxFIGRlcGFyc2luZy4KKyAqCisgKiBEZWFsIHdpdGggYWxsIHRoZSB0YWJsZSBlbGVtZW50cyAo Y29sdW1ucyBhbmQgY29uc3RyYWludHMpLgorICoKKyAqIE5vdGUgd2UgaWdub3JlIGNvbnN0cmFp bnRzIGluIHRoZSBwYXJzZSBub2RlIGhlcmU7IHRoZXkgYXJlIGV4dHJhY3RlZCBmcm9tCisgKiBz eXN0ZW0gY2F0YWxvZ3MgaW5zdGVhZC4KKyAqLworc3RhdGljIExpc3QgKgorZGVwYXJzZV9UYWJs ZUVsZW1lbnRzKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICp0YWJsZUVsZW1lbnRzLCBMaXN0ICpk cGNvbnRleHQsCisJCQkJCSAgYm9vbCB0eXBlZCwgYm9vbCBjb21wb3NpdGUpCit7CisJTGlzdAkg ICAqZWxlbWVudHMgPSBOSUw7CisJTGlzdENlbGwgICAqbGM7CisKKwlmb3JlYWNoKGxjLCB0YWJs ZUVsZW1lbnRzKQorCXsKKwkJTm9kZQkgICAqZWx0ID0gKE5vZGUgKikgbGZpcnN0KGxjKTsKKwor CQlzd2l0Y2ggKG5vZGVUYWcoZWx0KSkKKwkJeworCQkJY2FzZSBUX0NvbHVtbkRlZjoKKwkJCQl7 CisJCQkJCU9ialRyZWUJICAgKnRyZWU7CisKKwkJCQkJdHJlZSA9IHR5cGVkID8KKwkJCQkJCWRl cGFyc2VfQ29sdW1uRGVmX3R5cGVkKHJlbGF0aW9uLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJCQko Q29sdW1uRGVmICopIGVsdCkgOgorCQkJCQkJZGVwYXJzZV9Db2x1bW5EZWYocmVsYXRpb24sIGRw Y29udGV4dCwKKwkJCQkJCQkJCQkJICBjb21wb3NpdGUsIChDb2x1bW5EZWYgKikgZWx0LAorCQkJ CQkJCQkJCQkgIGZhbHNlLCBOVUxMKTsKKwkJCQkJaWYgKHRyZWUgIT0gTlVMTCkKKwkJCQkJewor CQkJCQkJT2JqRWxlbQkqY29sdW1uOworCisJCQkJCQljb2x1bW4gPSBuZXdfb2JqZWN0X29iamVj dCh0cmVlKTsKKwkJCQkJCWVsZW1lbnRzID0gbGFwcGVuZChlbGVtZW50cywgY29sdW1uKTsKKwkJ CQkJfQorCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgVF9Db25zdHJhaW50OgorCQkJCWJyZWFr OworCQkJZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBub2RlIHR5cGUgJWQiLCBu b2RlVGFnKGVsdCkpOworCQl9CisJfQorCisJcmV0dXJuIGVsZW1lbnRzOworfQorCisvKgorICog U3Vicm91dGluZSBmb3IgQ1JFQVRFIFRBQkxFL0NSRUFURSBET01BSU4gZGVwYXJzaW5nLgorICoK KyAqIEdpdmVuIGEgdGFibGUgT0lEIG9yIGRvbWFpbiBPSUQsIG9idGFpbiBpdHMgY29uc3RyYWlu dHMgYW5kIGFwcGVuZCB0aGVtIHRvCisgKiB0aGUgZ2l2ZW4gZWxlbWVudHMgbGlzdC4gIFRoZSB1 cGRhdGVkIGxpc3QgaXMgcmV0dXJuZWQuCisgKgorICogVGhpcyB3b3JrcyBmb3IgdHlwZWQgdGFi bGVzLCByZWd1bGFyIHRhYmxlcywgYW5kIGRvbWFpbnMuCisgKgorICogTm90ZSB0aGF0IENPTlNU UkFJTlRfRk9SRUlHTiBjb25zdHJhaW50cyBhcmUgYWx3YXlzIGlnbm9yZWQuCisgKi8KK3N0YXRp YyBMaXN0ICoKK29idGFpbkNvbnN0cmFpbnRzKExpc3QgKmVsZW1lbnRzLCBPaWQgcmVsYXRpb25J ZCwgT2lkIGRvbWFpbklkKQoreworCVJlbGF0aW9uCWNvblJlbDsKKwlTY2FuS2V5RGF0YSBrZXk7 CisJU3lzU2NhbkRlc2Mgc2NhbjsKKwlIZWFwVHVwbGUJdHVwbGU7CisJT2JqVHJlZQkqY29uc3Ry OworCisJLyogb25seSBvbmUgbWF5IGJlIHZhbGlkICovCisJQXNzZXJ0KE9pZElzVmFsaWQocmVs YXRpb25JZCkgXiBPaWRJc1ZhbGlkKGRvbWFpbklkKSk7CisKKwkvKgorCSAqIHNjYW4gcGdfY29u c3RyYWludCB0byBmZXRjaCBhbGwgY29uc3RyYWludHMgbGlua2VkIHRvIHRoZSBnaXZlbgorCSAq IHJlbGF0aW9uLgorCSAqLworCWNvblJlbCA9IHRhYmxlX29wZW4oQ29uc3RyYWludFJlbGF0aW9u SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJaWYgKE9pZElzVmFsaWQocmVsYXRpb25JZCkpCisJewor CQlTY2FuS2V5SW5pdCgma2V5LAorCQkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29ucmVsaWQsCisJ CQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0SWRHZXREYXR1 bShyZWxhdGlvbklkKSk7CisJCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25z dHJhaW50UmVsaWRUeXBpZE5hbWVJbmRleElkLAorCQkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZr ZXkpOworCX0KKwllbHNlCisJeworCQlBc3NlcnQoT2lkSXNWYWxpZChkb21haW5JZCkpOworCQlT Y2FuS2V5SW5pdCgma2V5LAorCQkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29udHlwaWQsCisJCQkJ CUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0SWRHZXREYXR1bShk b21haW5JZCkpOworCQlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGNvblJlbCwgQ29uc3RyYWlu dFR5cGlkSW5kZXhJZCwKKwkJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAma2V5KTsKKwl9CisKKwkv KgorCSAqIEZvciBlYWNoIGNvbnN0cmFpbnQsIGFkZCBhIG5vZGUgdG8gdGhlIGxpc3Qgb2YgdGFi bGUgZWxlbWVudHMuICBJbgorCSAqIHRoZXNlIG5vZGVzIHdlIGluY2x1ZGUgbm90IG9ubHkgdGhl IHByaW50YWJsZSBpbmZvcm1hdGlvbiAoImZtdCIpLCBidXQKKwkgKiBhbHNvIHNlcGFyYXRlIGF0 dHJpYnV0ZXMgdG8gaW5kaWNhdGUgdGhlIHR5cGUgb2YgY29uc3RyYWludCwgZm9yCisJICogYXV0 b21hdGljIHByb2Nlc3NpbmcuCisJICovCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwbGUg PSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkKKwl7CisJCUZvcm1fcGdfY29uc3RyYWludCBjb25z dHJGb3JtOworCQljaGFyCSAgICpjb250eXBlOworCisJCWNvbnN0ckZvcm0gPSAoRm9ybV9wZ19j b25zdHJhaW50KSBHRVRTVFJVQ1QodHVwbGUpOworCisJCXN3aXRjaCAoY29uc3RyRm9ybS0+Y29u dHlwZSkKKwkJeworCQkJY2FzZSBDT05TVFJBSU5UX0NIRUNLOgorCQkJCWNvbnR5cGUgPSAiY2hl Y2siOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX0ZPUkVJR046CisJCQkJY29udGlu dWU7CS8qIG5vdCBoZXJlICovCisJCQljYXNlIENPTlNUUkFJTlRfUFJJTUFSWToKKwkJCQljb250 eXBlID0gInByaW1hcnkga2V5IjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9VTklR VUU6CisJCQkJY29udHlwZSA9ICJ1bmlxdWUiOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJB SU5UX1RSSUdHRVI6CisJCQkJY29udHlwZSA9ICJ0cmlnZ2VyIjsKKwkJCQlicmVhazsKKwkJCWNh c2UgQ09OU1RSQUlOVF9FWENMVVNJT046CisJCQkJY29udHlwZSA9ICJleGNsdXNpb24iOworCQkJ CWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGNvbnN0 cmFpbnQgdHlwZSIpOworCQl9CisKKwkJLyoKKwkJICogInR5cGUiIGFuZCAiY29udHlwZSIgYXJl IG5vdCBwYXJ0IG9mIHRoZSBwcmludGFibGUgb3V0cHV0LCBidXQgYXJlCisJCSAqIHVzZWZ1bCB0 byBwcm9ncmFtbWF0aWNhbGx5IGRpc3Rpbmd1aXNoIHRoZXNlIGZyb20gY29sdW1ucyBhbmQgYW1v bmcKKwkJICogZGlmZmVyZW50IGNvbnN0cmFpbnQgdHlwZXMuCisJCSAqCisJCSAqIFhYWCBpdCBt aWdodCBiZSB1c2VmdWwgdG8gYWxzbyBsaXN0IHRoZSBjb2x1bW4gbmFtZXMgaW4gYSBQSywgZXRj LgorCQkgKi8KKwkJY29uc3RyID0gbmV3X29ianRyZWVfVkEoIkNPTlNUUkFJTlQgJXtuYW1lfUkg JXtkZWZpbml0aW9ufXMiLAorCQkJCQkJCQk0LAorCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJp bmcsICJjb25zdHJhaW50IiwKKwkJCQkJCQkJImNvbnR5cGUiLCBPYmpUeXBlU3RyaW5nLCBjb250 eXBlLAorCQkJCQkJCQkibmFtZSIsIE9ialR5cGVTdHJpbmcsIE5hbWVTdHIoY29uc3RyRm9ybS0+ Y29ubmFtZSksCisJCQkJCQkJCSJkZWZpbml0aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJ IHBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0ckZvcm0tPm9pZCkpOwor CQllbGVtZW50cyA9IGxhcHBlbmQoZWxlbWVudHMsIG5ld19vYmplY3Rfb2JqZWN0KGNvbnN0cikp OworCX0KKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xvc2UoY29uUmVsLCBB Y2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIGVsZW1lbnRzOworfQorCisvKgorICogRGVwYXJz ZSB0aGUgT04gQ09NTU1JVCAuLi4gY2xhdXNlIGZvciBDUkVBVEUgLi4uIFRFTVBPUkFSWSAuLi4K KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9PbkNvbW1pdENsYXVzZShPbkNvbW1pdEFj dGlvbiBvcHRpb24pCit7CisJT2JqVHJlZQkgICAqb25jb21taXQ7CisKKwlvbmNvbW1pdCA9IG5l d19vYmp0cmVlKCJPTiBDT01NSVQiKTsKKwlzd2l0Y2ggKG9wdGlvbikKKwl7CisJCWNhc2UgT05D T01NSVRfRFJPUDoKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9uY29tbWl0LCAiJXtvbl9jb21t aXRfdmFsdWV9cyIsICJEUk9QIik7CisJCQlicmVhazsKKworCQljYXNlIE9OQ09NTUlUX0RFTEVU RV9ST1dTOgorCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qob25jb21taXQsICIle29uX2NvbW1pdF92 YWx1ZX1zIiwgIkRFTEVURSBST1dTIik7CisJCQlicmVhazsKKworCQljYXNlIE9OQ09NTUlUX1BS RVNFUlZFX1JPV1M6CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChvbmNvbW1pdCwgIiV7b25fY29t bWl0X3ZhbHVlfXMiLCAiUFJFU0VSVkUgUk9XUyIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPTkNP TU1JVF9OT09QOgorCQkJYXBwZW5kX251bGxfb2JqZWN0KG9uY29tbWl0LCAiJXtvbl9jb21taXRf dmFsdWV9cyIpOworCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KG9uY29tbWl0LCAicHJlc2VudCIsIGZh bHNlKTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBvbmNvbW1pdDsKK30KKworLyoKKyAqIERl cGFyc2UgRGVmRWxlbXMsIGFzIHVzZWQgZS5nLiBieSBBTFRFUiBDT0xVTU4gLi4uIFNFVCwgaW50 byBhIGxpc3Qgb2YgU0VUCisgKiAoLi4uKSAgb3IgUkVTRVQgKC4uLikgY29udGVudHMuCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmRWxlbShEZWZFbGVtICplbGVtLCBib29sIGlz X3Jlc2V0KQoreworCU9ialRyZWUJICAgKnNldDsKKwlPYmpUcmVlCSAgICpvcHRuYW1lOworCisJ c2V0ID0gbmV3X29ianRyZWUoIiIpOworCW9wdG5hbWUgPSBuZXdfb2JqdHJlZSgiIik7CisKKwlp ZiAoZWxlbS0+ZGVmbmFtZXNwYWNlICE9IE5VTEwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9w dG5hbWUsICIle3NjaGVtYX1JLiIsIGVsZW0tPmRlZm5hbWVzcGFjZSk7CisKKwlhcHBlbmRfc3Ry aW5nX29iamVjdChvcHRuYW1lLCAiJXtsYWJlbH1JIiwgZWxlbS0+ZGVmbmFtZSk7CisKKwlhcHBl bmRfb2JqZWN0X29iamVjdChzZXQsICIle2xhYmVsfXMiLCBvcHRuYW1lKTsKKworCWlmICghaXNf cmVzZXQpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHNldCwgIiA9ICV7dmFsdWV9TCIsCisJCQkJ CQkJIGVsZW0tPmFyZyA/IGRlZkdldFN0cmluZyhlbGVtKSA6CisJCQkJCQkJIGRlZkdldEJvb2xl YW4oZWxlbSkgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKworCXJldHVybiBzZXQ7Cit9CisKKy8qCisg KiAuLi4gQUxURVIgQ09MVU1OIC4uLiBTRVQvUkVTRVQgKC4uLikKKyAqLworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9Db2x1bW5TZXRPcHRpb25zKEFsdGVyVGFibGVDbWQgKnN1YmNtZCkKK3sK KwlMaXN0CSAgICpzZXRzID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJT2JqVHJlZQkgICAq Y29sc2V0OworCWNoYXIJICAgKmZtdDsKKwlib29sCQlpc19yZXNldCA9IHN1YmNtZC0+c3VidHlw ZSA9PSBBVF9SZXNldE9wdGlvbnM7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkg KiBBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBSRVNFVHxTRVQgKCV7b3B0aW9uczosIH1zKQorCSAq LworCWlmIChpc19yZXNldCkKKwkJZm10ID0gIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFJFU0VU ICI7CisJZWxzZQorCQlmbXQgPSAiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUICI7CisKKwlj b2xzZXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBz dWJjbWQtPm5hbWUpOworCisJZm9yZWFjaChjZWxsLCAoTGlzdCAqKSBzdWJjbWQtPmRlZikKKwl7 CisJCURlZkVsZW0JICAgKmVsZW07CisJCU9ialRyZWUJICAgKnNldDsKKworCQllbGVtID0gKERl ZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlzZXQgPSBkZXBhcnNlX0RlZkVsZW0oZWxlbSwgaXNf cmVzZXQpOworCQlzZXRzID0gbGFwcGVuZChzZXRzLCBuZXdfb2JqZWN0X29iamVjdChzZXQpKTsK Kwl9CisKKwlBc3NlcnQoc2V0cyk7CisJYXBwZW5kX2FycmF5X29iamVjdChjb2xzZXQsICIoJXtv cHRpb25zOiwgfXMpIiwgc2V0cyk7CisKKwlyZXR1cm4gY29sc2V0OworfQorCisvKgorICogLi4u IEFMVEVSIENPTFVNTiAuLi4gU0VUL1JFU0VUICguLi4pCisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfUmVsU2V0T3B0aW9ucyhBbHRlclRhYmxlQ21kICpzdWJjbWQpCit7CisJTGlzdAkg ICAqc2V0cyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCU9ialRyZWUJICAgKnJlbHNldDsK KwljaGFyCSAgICpmbXQ7CisJYm9vbAkJaXNfcmVzZXQgPSBzdWJjbWQtPnN1YnR5cGUgPT0gQVRf UmVzZXRSZWxPcHRpb25zOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogUkVT RVR8U0VUICgle29wdGlvbnM6LCB9cykKKwkgKi8KKwlpZiAoaXNfcmVzZXQpCisJCWZtdCA9ICJS RVNFVCAiOworCWVsc2UKKwkJZm10ID0gIlNFVCAiOworCisJcmVsc2V0ID0gbmV3X29ianRyZWUo Zm10KTsKKworCWZvcmVhY2goY2VsbCwgKExpc3QgKikgc3ViY21kLT5kZWYpCisJeworCQlEZWZF bGVtCSAgICplbGVtOworCQlPYmpUcmVlCSAgICpzZXQ7CisKKwkJZWxlbSA9IChEZWZFbGVtICop IGxmaXJzdChjZWxsKTsKKwkJc2V0ID0gZGVwYXJzZV9EZWZFbGVtKGVsZW0sIGlzX3Jlc2V0KTsK KwkJc2V0cyA9IGxhcHBlbmQoc2V0cywgbmV3X29iamVjdF9vYmplY3Qoc2V0KSk7CisJfQorCisJ QXNzZXJ0KHNldHMpOworCWFwcGVuZF9hcnJheV9vYmplY3QocmVsc2V0LCAiKCV7b3B0aW9uczos IH1zKSIsIHNldHMpOworCisJcmV0dXJuIHJlbHNldDsKK30KKworLyoKKyAqIERlcGFyc2UgdGhl IGluaGVyaXRzIHJlbGF0aW9ucy4KKyAqCisgKiBHaXZlbiBhIHRhYmxlIE9JRCwgcmV0dXJuIGEg c2NoZW1hIHF1YWxpZmllZCB0YWJsZSBsaXN0IHJlcHJlc2VudGluZworICogdGhlIHBhcmVudCB0 YWJsZXMuCisgKi8KK3N0YXRpYyBMaXN0ICoKK2RlcGFyc2VfSW5oUmVsYXRpb25zKE9pZCBvYmpl Y3RJZCkKK3sKKwlMaXN0CSAgICpwYXJlbnRzID0gTklMOworCVJlbGF0aW9uCWluaFJlbDsKKwlT eXNTY2FuRGVzYyBzY2FuOworCVNjYW5LZXlEYXRhIGtleTsKKwlIZWFwVHVwbGUJdHVwbGU7CisK KwlpbmhSZWwgPSB0YWJsZV9vcGVuKEluaGVyaXRzUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9j ayk7CisKKwlTY2FuS2V5SW5pdCgma2V5LAorCQkJCUFudW1fcGdfaW5oZXJpdHNfaW5ocmVsaWQs CisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0 dW0ob2JqZWN0SWQpKTsKKworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oaW5oUmVsLCBJbmhl cml0c1JlbGlkU2Vxbm9JbmRleElkLAorCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJmtleSk7CisK Kwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSA9IHN5c3RhYmxlX2dldG5leHQoc2Nhbikp KQorCXsKKwkJT2JqVHJlZQkqcGFyZW50OworCQlGb3JtX3BnX2luaGVyaXRzIGZvcm1JbmggPSAo Rm9ybV9wZ19pbmhlcml0cykgR0VUU1RSVUNUKHR1cGxlKTsKKworCQlwYXJlbnQgPSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkgZm9y bUluaC0+aW5ocGFyZW50KTsKKwkJcGFyZW50cyA9IGxhcHBlbmQocGFyZW50cywgbmV3X29iamVj dF9vYmplY3QocGFyZW50KSk7CisJfQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJs ZV9jbG9zZShpbmhSZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIHBhcmVudHM7Cit9 CisKKy8qCisgKiBPYnRhaW4gdGhlIGRlcGFyc2VkIHBhcnRpdGlvbiBib3VuZCBleHByZXNzaW9u IGZvciB0aGUgZ2l2ZW4gdGFibGUuCisgKi8KK3N0YXRpYyBjaGFyICoKK1JlbGF0aW9uR2V0UGFy dGl0aW9uQm91bmQoT2lkIHJlbGlkKQoreworCURhdHVtCQlkZXBhcnNlZDsKKwlEYXR1bQkJYm91 bmREYXR1bTsKKwlib29sCQlpc251bGw7CisJSGVhcFR1cGxlCXR1cGxlOworCisJdHVwbGUgPSBT ZWFyY2hTeXNDYWNoZTEoUkVMT0lELCByZWxpZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1 cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJlbGF0aW9uICV1 IiwKKwkJCSByZWxpZCk7CisKKwlib3VuZERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFJFTE9JRCwg dHVwbGUsCisJCQkJCQkJCSBBbnVtX3BnX2NsYXNzX3JlbHBhcnRib3VuZCwKKwkJCQkJCQkJICZp c251bGwpOworCisJZGVwYXJzZWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwyKHBnX2dldF9leHByLAor CQkJCQkJCQkgICBDU3RyaW5nR2V0VGV4dERhdHVtKFRleHREYXR1bUdldENTdHJpbmcoYm91bmRE YXR1bSkpLAorCQkJCQkJCQkgICByZWxpZCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOwor CisJcmV0dXJuIFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQpOworfQorCisvKgorICogUmV0 dXJuIGFuIGluZGV4IGRlZmluaXRpb24sIHNwbGl0IGluIHNldmVyYWwgcGllY2VzLgorICoKKyAq IFRoZXJlIGlzIGEgaHVnZSBsb3Qgb2YgY29kZSB0aGF0J3MgYSBkdXBlIG9mIHBnX2dldF9pbmRl eGRlZl93b3JrZXIsIGJ1dAorICogY29udHJvbCBmbG93IGlzIGRpZmZlcmVudCBlbm91Z2ggdGhh dCBpdCBkb2Vzbid0IHNlZW0gd29ydGgga2VlcGluZyB0aGVtCisgKiB0b2dldGhlci4KKyAqLwor c3RhdGljIHZvaWQKK3BnX2dldF9pbmRleGRlZl9kZXRhaWxlZChPaWQgaW5kZXhyZWxpZCwKKwkJ CQkJCSBjaGFyICoqaW5kZXhfYW0sCisJCQkJCQkgY2hhciAqKmRlZmluaXRpb24sCisJCQkJCQkg Y2hhciAqKnJlbG9wdGlvbnMsCisJCQkJCQkgY2hhciAqKnRhYmxlc3BhY2UsCisJCQkJCQkgY2hh ciAqKndoZXJlQ2xhdXNlKQoreworCUhlYXBUdXBsZQlodF9pZHg7CisJSGVhcFR1cGxlCWh0X2lk eHJlbDsKKwlIZWFwVHVwbGUJaHRfYW07CisJRm9ybV9wZ19pbmRleCBpZHhyZWM7CisJRm9ybV9w Z19jbGFzcyBpZHhyZWxyZWM7CisJRm9ybV9wZ19hbQlhbXJlYzsKKwlJbmRleEFtUm91dGluZSAq YW1yb3V0aW5lOworCUxpc3QJICAgKmluZGV4cHJzOworCUxpc3RDZWxsICAgKmluZGV4cHJfaXRl bTsKKwlMaXN0CSAgICpjb250ZXh0OworCU9pZAkJCWluZHJlbGlkOworCWludAkJCWtleW5vOwor CURhdHVtCQlpbmRjb2xsRGF0dW07CisJRGF0dW0JCWluZGNsYXNzRGF0dW07CisJRGF0dW0JCWlu ZG9wdGlvbkRhdHVtOworCWJvb2wJCWlzbnVsbDsKKwlvaWR2ZWN0b3IgICppbmRjb2xsYXRpb247 CisJb2lkdmVjdG9yICAqaW5kY2xhc3M7CisJaW50MnZlY3RvciAqaW5kb3B0aW9uOworCVN0cmlu Z0luZm9EYXRhIGRlZmluaXRpb25CdWY7CisKKwkvKgorCSAqIEZldGNoIHRoZSBwZ19pbmRleCB0 dXBsZSBieSB0aGUgT2lkIG9mIHRoZSBpbmRleAorCSAqLworCWh0X2lkeCA9IFNlYXJjaFN5c0Nh Y2hlMShJTkRFWFJFTElELCBPYmplY3RJZEdldERhdHVtKGluZGV4cmVsaWQpKTsKKwlpZiAoIUhl YXBUdXBsZUlzVmFsaWQoaHRfaWR4KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIGluZGV4ICV1IiwgaW5kZXhyZWxpZCk7CisJaWR4cmVjID0gKEZvcm1fcGdfaW5kZXgp IEdFVFNUUlVDVChodF9pZHgpOworCisJaW5kcmVsaWQgPSBpZHhyZWMtPmluZHJlbGlkOworCUFz c2VydChpbmRleHJlbGlkID09IGlkeHJlYy0+aW5kZXhyZWxpZCk7CisKKwkvKiBNdXN0IGdldCBp bmRjb2xsYXRpb24sIGluZGNsYXNzLCBhbmQgaW5kb3B0aW9uIHRoZSBoYXJkIHdheSAqLworCWlu ZGNvbGxEYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJ CSAgIEFudW1fcGdfaW5kZXhfaW5kY29sbGF0aW9uLCAmaXNudWxsKTsKKwlBc3NlcnQoIWlzbnVs bCk7CisJaW5kY29sbGF0aW9uID0gKG9pZHZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5kY29s bERhdHVtKTsKKworCWluZGNsYXNzRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwg aHRfaWR4LAorCQkJCQkJCQkJQW51bV9wZ19pbmRleF9pbmRjbGFzcywgJmlzbnVsbCk7CisJQXNz ZXJ0KCFpc251bGwpOworCWluZGNsYXNzID0gKG9pZHZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIo aW5kY2xhc3NEYXR1bSk7CisKKwlpbmRvcHRpb25EYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRF WFJFTElELCBodF9pZHgsCisJCQkJCQkJCQkgQW51bV9wZ19pbmRleF9pbmRvcHRpb24sICZpc251 bGwpOworCUFzc2VydCghaXNudWxsKTsKKwlpbmRvcHRpb24gPSAoaW50MnZlY3RvciAqKSBEYXR1 bUdldFBvaW50ZXIoaW5kb3B0aW9uRGF0dW0pOworCisJLyoKKwkgKiBGZXRjaCB0aGUgcGdfY2xh c3MgdHVwbGUgb2YgdGhlIGluZGV4IHJlbGF0aW9uCisJICovCisJaHRfaWR4cmVsID0gU2VhcmNo U3lzQ2FjaGUxKFJFTE9JRCwgT2JqZWN0SWRHZXREYXR1bShpbmRleHJlbGlkKSk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKGh0X2lkeHJlbCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAg ZmFpbGVkIGZvciByZWxhdGlvbiAldSIsIGluZGV4cmVsaWQpOworCWlkeHJlbHJlYyA9IChGb3Jt X3BnX2NsYXNzKSBHRVRTVFJVQ1QoaHRfaWR4cmVsKTsKKworCisJLyoKKwkgKiBGZXRjaCB0aGUg cGdfYW0gdHVwbGUgb2YgdGhlIGluZGV4JyBhY2Nlc3MgbWV0aG9kCisJICovCisJaHRfYW0gPSBT ZWFyY2hTeXNDYWNoZTEoQU1PSUQsIE9iamVjdElkR2V0RGF0dW0oaWR4cmVscmVjLT5yZWxhbSkp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZChodF9hbSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciBhY2Nlc3MgbWV0aG9kICV1IiwKKwkJCSBpZHhyZWxyZWMtPnJlbGFt KTsKKwlhbXJlYyA9IChGb3JtX3BnX2FtKSBHRVRTVFJVQ1QoaHRfYW0pOworCisJLyoKKwkgKiBH ZXQgdGhlIGluZGV4IGV4cHJlc3Npb25zLCBpZiBhbnkuICAoTk9URTogd2UgZG8gbm90IHVzZSB0 aGUgcmVsY2FjaGUKKwkgKiB2ZXJzaW9ucyBvZiB0aGUgZXhwcmVzc2lvbnMgYW5kIHByZWRpY2F0 ZSwgYmVjYXVzZSB3ZSB3YW50IHRvIGRpc3BsYXkKKwkgKiBub24tY29uc3QtZm9sZGVkIGV4cHJl c3Npb25zLikKKwkgKi8KKwlpZiAoIWhlYXBfYXR0aXNudWxsKGh0X2lkeCwgQW51bV9wZ19pbmRl eF9pbmRleHBycywgTlVMTCkpCisJeworCQlEYXR1bQkJZXhwcnNEYXR1bTsKKwkJYm9vbAkJaXNu dWxsOworCQljaGFyCSAgICpleHByc1N0cmluZzsKKworCQlleHByc0RhdHVtID0gU3lzQ2FjaGVH ZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJCSBBbnVtX3BnX2luZGV4X2luZGV4 cHJzLCAmaXNudWxsKTsKKwkJQXNzZXJ0KCFpc251bGwpOworCQlleHByc1N0cmluZyA9IFRleHRE YXR1bUdldENTdHJpbmcoZXhwcnNEYXR1bSk7CisJCWluZGV4cHJzID0gKExpc3QgKikgc3RyaW5n VG9Ob2RlKGV4cHJzU3RyaW5nKTsKKwkJcGZyZWUoZXhwcnNTdHJpbmcpOworCX0KKwllbHNlCisJ CWluZGV4cHJzID0gTklMOworCisJaW5kZXhwcl9pdGVtID0gbGlzdF9oZWFkKGluZGV4cHJzKTsK KworCWNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKGdldF9yZWxfbmFtZShpbmRyZWxpZCks IGluZHJlbGlkKTsKKworCWluaXRTdHJpbmdJbmZvKCZkZWZpbml0aW9uQnVmKTsKKworCS8qIE91 dHB1dCBpbmRleCBBTSAqLworCSppbmRleF9hbSA9IHBzdHJkdXAocXVvdGVfaWRlbnRpZmllcihO YW1lU3RyKGFtcmVjLT5hbW5hbWUpKSk7CisKKwkvKiBGZXRjaCB0aGUgaW5kZXggQU0ncyBBUEkg c3RydWN0ICovCisJYW1yb3V0aW5lID0gR2V0SW5kZXhBbVJvdXRpbmUoYW1yZWMtPmFtaGFuZGxl cik7CisKKwkvKgorCSAqIE91dHB1dCBpbmRleCBkZWZpbml0aW9uLiAgTm90ZSB0aGUgb3V0ZXIg cGFyZW5zIG11c3QgYmUgc3VwcGxpZWQgYnkKKwkgKiBjYWxsZXIuCisJICovCisJZm9yIChrZXlu byA9IDA7IGtleW5vIDwgaWR4cmVjLT5pbmRuYXR0czsga2V5bm8rKykKKwl7CisJCUF0dHJOdW1i ZXIJYXR0bnVtID0gaWR4cmVjLT5pbmRrZXkudmFsdWVzW2tleW5vXTsKKwkJaW50MTYJCW9wdCA9 IGluZG9wdGlvbi0+dmFsdWVzW2tleW5vXTsKKwkJT2lkCQkJa2V5Y29sdHlwZTsKKwkJT2lkCQkJ a2V5Y29sY29sbGF0aW9uOworCQlPaWQJCQlpbmRjb2xsOworCisJCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoJmRlZmluaXRpb25CdWYsIGtleW5vID09IDAgPyAiIiA6ICIsICIpOworCisJCWlmIChh dHRudW0gIT0gMCkKKwkJeworCQkJLyogU2ltcGxlIGluZGV4IGNvbHVtbiAqLworCQkJY2hhcgkg ICAqYXR0bmFtZTsKKwkJCWludDMyCQlrZXljb2x0eXBtb2Q7CisKKwkJCWF0dG5hbWUgPSBnZXRf YXR0bmFtZShpbmRyZWxpZCwgYXR0bnVtLCBmYWxzZSk7CisJCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKCZkZWZpbml0aW9uQnVmLCBxdW90ZV9pZGVudGlmaWVyKGF0dG5hbWUpKTsKKwkJCWdldF9h dHR0eXBldHlwbW9kY29sbChpbmRyZWxpZCwgYXR0bnVtLAorCQkJCQkJCQkgICZrZXljb2x0eXBl LCAma2V5Y29sdHlwbW9kLAorCQkJCQkJCQkgICZrZXljb2xjb2xsYXRpb24pOworCQl9CisJCWVs c2UKKwkJeworCQkJLyogRXhwcmVzc2lvbmFsIGluZGV4ICovCisJCQlOb2RlCSAgICppbmRleGtl eTsKKwkJCWNoYXIJICAgKnN0cjsKKworCQkJaWYgKGluZGV4cHJfaXRlbSA9PSBOVUxMKQorCQkJ CWVsb2coRVJST1IsICJ0b28gZmV3IGVudHJpZXMgaW4gaW5kZXhwcnMgbGlzdCIpOworCQkJaW5k ZXhrZXkgPSAoTm9kZSAqKSBsZmlyc3QoaW5kZXhwcl9pdGVtKTsKKwkJCWluZGV4cHJfaXRlbSA9 IGxuZXh0KGluZGV4cHJzLCBpbmRleHByX2l0ZW0pOworCQkJLyogRGVwYXJzZSAqLworCQkJc3Ry ID0gZGVwYXJzZV9leHByZXNzaW9uKGluZGV4a2V5LCBjb250ZXh0LCBmYWxzZSwgZmFsc2UpOwor CisJCQkvKiBOZWVkIHBhcmVucyBpZiBpdCdzIG5vdCBhIGJhcmUgZnVuY3Rpb24gY2FsbCAqLwor CQkJaWYgKGluZGV4a2V5ICYmIElzQShpbmRleGtleSwgRnVuY0V4cHIpICYmCisJCQkJKChGdW5j RXhwciAqKSBpbmRleGtleSktPmZ1bmNmb3JtYXQgPT0gQ09FUkNFX0VYUExJQ0lUX0NBTEwpCisJ CQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1Ziwgc3RyKTsKKwkJCWVsc2UK KwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZkZWZpbml0aW9uQnVmLCAiKCVzKSIsIHN0cik7CisKKwkJ CWtleWNvbHR5cGUgPSBleHByVHlwZShpbmRleGtleSk7CisJCQlrZXljb2xjb2xsYXRpb24gPSBl eHByQ29sbGF0aW9uKGluZGV4a2V5KTsKKwkJfQorCisJCS8qIEFkZCBjb2xsYXRpb24sIGV2ZW4g aWYgZGVmYXVsdCAqLworCQlpbmRjb2xsID0gaW5kY29sbGF0aW9uLT52YWx1ZXNba2V5bm9dOwor CQlpZiAoT2lkSXNWYWxpZChpbmRjb2xsKSkKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmRlZmluaXRp b25CdWYsICIgQ09MTEFURSAlcyIsCisJCQkJCQkJIGdlbmVyYXRlX2NvbGxhdGlvbl9uYW1lKChp bmRjb2xsKSkpOworCisJCS8qIEFkZCB0aGUgb3BlcmF0b3IgY2xhc3MgbmFtZSwgZXZlbiBpZiBk ZWZhdWx0ICovCisJCWdldF9vcGNsYXNzX25hbWUoaW5kY2xhc3MtPnZhbHVlc1trZXlub10sIElu dmFsaWRPaWQsICZkZWZpbml0aW9uQnVmKTsKKworCQkvKiBBZGQgb3B0aW9ucyBpZiByZWxldmFu dCAqLworCQlpZiAoYW1yb3V0aW5lLT5hbWNhbm9yZGVyKQorCQl7CisJCQkvKiBJZiBpdCBzdXBw b3J0cyBzb3J0IG9yZGVyaW5nLCByZXBvcnQgREVTQyBhbmQgTlVMTFMgb3B0cyAqLworCQkJaWYg KG9wdCAmIElORE9QVElPTl9ERVNDKQorCQkJeworCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco JmRlZmluaXRpb25CdWYsICIgREVTQyIpOworCQkJCS8qIE5VTExTIEZJUlNUIGlzIHRoZSBkZWZh dWx0IGluIHRoaXMgY2FzZSAqLworCQkJCWlmICghKG9wdCAmIElORE9QVElPTl9OVUxMU19GSVJT VCkpCisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsICIgTlVMTFMg TEFTVCIpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmIChvcHQgJiBJTkRPUFRJT05fTlVM TFNfRklSU1QpCisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsICIg TlVMTFMgRklSU1QiKTsKKwkJCX0KKwkJfQorCisJCS8qIFhYWCBleGNsdWRlT3BzIHRoaW5neSB3 YXMgaGVyZTsgZG8gd2UgbmVlZCBhbnl0aGluZz8gKi8KKwl9CisJKmRlZmluaXRpb24gPSBkZWZp bml0aW9uQnVmLmRhdGE7CisKKwkvKiBPdXRwdXQgcmVsb3B0aW9ucyAqLworCSpyZWxvcHRpb25z ID0gZmxhdHRlbl9yZWxvcHRpb25zKGluZGV4cmVsaWQpOworCisJLyogT3V0cHV0IHRhYmxlc3Bh Y2UgKi8KKwl7CisJCU9pZAkJCXRibHNwYzsKKworCQl0YmxzcGMgPSBnZXRfcmVsX3RhYmxlc3Bh Y2UoaW5kZXhyZWxpZCk7CisJCWlmIChPaWRJc1ZhbGlkKHRibHNwYykpCisJCQkqdGFibGVzcGFj ZSA9IHBzdHJkdXAocXVvdGVfaWRlbnRpZmllcihnZXRfdGFibGVzcGFjZV9uYW1lKHRibHNwYykp KTsKKwkJZWxzZQorCQkJKnRhYmxlc3BhY2UgPSBOVUxMOworCX0KKworCS8qIFJlcG9ydCBpbmRl eCBwcmVkaWNhdGUsIGlmIGFueSAqLworCWlmICghaGVhcF9hdHRpc251bGwoaHRfaWR4LCBBbnVt X3BnX2luZGV4X2luZHByZWQsIE5VTEwpKQorCXsKKwkJTm9kZQkgICAqbm9kZTsKKwkJRGF0dW0J CXByZWREYXR1bTsKKwkJYm9vbAkJaXNudWxsOworCQljaGFyCSAgICpwcmVkU3RyaW5nOworCisJ CS8qIENvbnZlcnQgdGV4dCBzdHJpbmcgdG8gbm9kZSB0cmVlICovCisJCXByZWREYXR1bSA9IFN5 c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCQlBbnVtX3BnX2luZGV4 X2luZHByZWQsICZpc251bGwpOworCQlBc3NlcnQoIWlzbnVsbCk7CisJCXByZWRTdHJpbmcgPSBU ZXh0RGF0dW1HZXRDU3RyaW5nKHByZWREYXR1bSk7CisJCW5vZGUgPSAoTm9kZSAqKSBzdHJpbmdU b05vZGUocHJlZFN0cmluZyk7CisJCXBmcmVlKHByZWRTdHJpbmcpOworCisJCS8qIERlcGFyc2Ug Ki8KKwkJKndoZXJlQ2xhdXNlID0KKwkJCWRlcGFyc2VfZXhwcmVzc2lvbihub2RlLCBjb250ZXh0 LCBmYWxzZSwgZmFsc2UpOworCX0KKwllbHNlCisJCSp3aGVyZUNsYXVzZSA9IE5VTEw7CisKKwkv KiBDbGVhbiB1cCAqLworCVJlbGVhc2VTeXNDYWNoZShodF9pZHgpOworCVJlbGVhc2VTeXNDYWNo ZShodF9pZHhyZWwpOworCVJlbGVhc2VTeXNDYWNoZShodF9hbSk7Cit9CisKKy8qCisgKiBEZXBh cnNlIGFuIEluZGV4U3RtdC4KKyAqCisgKiBHaXZlbiBhbiBpbmRleCBPSUQgYW5kIHRoZSBwYXJz ZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5n IHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIElmIHRoZSBpbmRleCBjb3JyZXNwb25kcyB0 byBhIGNvbnN0cmFpbnQsIE5VTEwgaXMgcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfSW5kZXhTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUlu ZGV4U3RtdCAgKm5vZGUgPSAoSW5kZXhTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpp bmRleFN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCVJlbGF0aW9uCWlkeHJlbDsKKwlSZWxhdGlv bgloZWFwcmVsOworCWNoYXIJICAgKmluZGV4X2FtOworCWNoYXIJICAgKmRlZmluaXRpb247CisJ Y2hhcgkgICAqcmVsb3B0aW9uczsKKwljaGFyCSAgICp0YWJsZXNwYWNlOworCWNoYXIJICAgKndo ZXJlQ2xhdXNlOworCisJaWYgKG5vZGUtPnByaW1hcnkgfHwgbm9kZS0+aXNjb25zdHJhaW50KQor CXsKKwkJLyoKKwkJICogaW5kZXhlcyBmb3IgUFJJTUFSWSBLRVkgYW5kIG90aGVyIGNvbnN0cmFp bnRzIGFyZSBvdXRwdXQKKwkJICogc2VwYXJhdGVseTsgcmV0dXJuIGVtcHR5IGhlcmUuCisJCSAq LworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZHhyZWwgPSByZWxhdGlvbl9vcGVuKG9iamVjdElk LCBBY2Nlc3NTaGFyZUxvY2spOworCWhlYXByZWwgPSByZWxhdGlvbl9vcGVuKGlkeHJlbC0+cmRf aW5kZXgtPmluZHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcGdfZ2V0X2luZGV4ZGVmX2Rl dGFpbGVkKG9iamVjdElkLAorCQkJCQkJCSAmaW5kZXhfYW0sICZkZWZpbml0aW9uLCAmcmVsb3B0 aW9ucywKKwkJCQkJCQkgJnRhYmxlc3BhY2UsICZ3aGVyZUNsYXVzZSk7CisKKwkvKgorCSAqIFZl cmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgJXt1bmlxdWV9cyBJTkRFWCAle2NvbmN1cnJl bnRseX1zICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JIE9OCisJICogJXt0YWJsZX1EIFVTSU5H ICV7aW5kZXhfYW19cyAoJXtkZWZpbml0aW9ufXMpICV7d2l0aH1zICV7dGFibGVzcGFjZX1zCisJ ICogJXt3aGVyZV9jbGF1c2V9cworCSAqLworCWluZGV4U3RtdCA9IG5ld19vYmp0cmVlKCJDUkVB VEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGluZGV4U3RtdCwgIiV7dW5pcXVlfXMiLAor CQkJCQkJIG5vZGUtPnVuaXF1ZSA/ICJVTklRVUUiIDogIiIpOworCisJYXBwZW5kX2Zvcm1hdF9z dHJpbmcoaW5kZXhTdG10LCAiSU5ERVgiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGluZGV4 U3RtdCwgIiV7Y29uY3VycmVudGx5fXMiLAorCQkJCQkJIG5vZGUtPmNvbmN1cnJlbnQgPyAiQ09O Q1VSUkVOVExZIiA6ICIiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGluZGV4U3RtdCwgIiV7 aWZfbm90X2V4aXN0c31zIiwKKwkJCQkJCSBub2RlLT5pZl9ub3RfZXhpc3RzID8gIklGIE5PVCBF WElTVFMiIDogIiIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoaW5kZXhTdG10LCAiJXtuYW1l fUkiLAorCQkJCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGlkeHJlbCkpOworCisJYXBwZW5k X29iamVjdF9vYmplY3QoaW5kZXhTdG10LCAiT04gJXt0YWJsZX1EIiwKKwkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWUoaGVhcHJlbC0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkg UmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaGVhcHJlbCkpKTsKKworCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KGluZGV4U3RtdCwgIlVTSU5HICV7aW5kZXhfYW19cyIsIGluZGV4X2FtKTsKKworCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KGluZGV4U3RtdCwgIigle2RlZmluaXRpb259cykiLCBkZWZpbml0aW9u KTsKKworCS8qIHJlbG9wdGlvbnMgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiV0lUSCIpOworCWlm IChyZWxvcHRpb25zKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIoJXtvcHRzfXMpIiwg cmVsb3B0aW9ucyk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIs IGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChpbmRleFN0bXQsICIle3dpdGh9cyIsIHRt cCk7CisKKwkvKiB0YWJsZXNwYWNlICovCisJdG1wID0gbmV3X29ianRyZWUoIlRBQkxFU1BBQ0Ui KTsKKwlpZiAodGFibGVzcGFjZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXt0YWJs ZXNwYWNlfXMiLCB0YWJsZXNwYWNlKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAs ICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGluZGV4U3RtdCwgIiV7 dGFibGVzcGFjZX1zIiwgdG1wKTsKKworCS8qIFdIRVJFIGNsYXVzZSAqLworCXRtcCA9IG5ld19v Ymp0cmVlKCJXSEVSRSIpOworCWlmICh3aGVyZUNsYXVzZSkKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodG1wLCAiJXt3aGVyZX1zIiwgd2hlcmVDbGF1c2UpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xf b2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoaW5k ZXhTdG10LCAiJXt3aGVyZV9jbGF1c2V9cyIsIHRtcCk7CisKKwl0YWJsZV9jbG9zZShpZHhyZWws IEFjY2Vzc1NoYXJlTG9jayk7CisJdGFibGVfY2xvc2UoaGVhcHJlbCwgQWNjZXNzU2hhcmVMb2Nr KTsKKworCXJldHVybiBpbmRleFN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlU3Rt dCAoQ1JFQVRFIFRBQkxFKS4KKyAqCisgKiBHaXZlbiBhIHRhYmxlIE9JRCBhbmQgdGhlIHBhcnNl dHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcg dGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3Jl YXRlU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVTdG10ICpu b2RlID0gKENyZWF0ZVN0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uCXJlbGF0aW9uID0gcmVs YXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlMaXN0CSAgICpkcGNvbnRl eHQ7CisJT2JqVHJlZQkqY3JlYXRlU3RtdDsKKwlPYmpUcmVlCSp0bXA7CisJTGlzdAkgICAqbGlz dDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJ ICogQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50 aXR5fUQgW09GCisJICogJXtvZl90eXBlfVQgfCBQQVJUSVRJT04gT0YgJXtwYXJlbnRfaWRlbnRp dHl9RF0gJXt0YWJsZV9lbGVtZW50c31zCisJICogJXtpbmhlcml0c31zICV7cGFydGl0aW9uX2J5 fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1zCisJICogJXtvbl9jb21taXR9cyAl e3RhYmxlc3BhY2V9cworCSAqLworCWNyZWF0ZVN0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7 CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTdG10LCAiJXtwZXJzaXN0ZW5jZX1zIiwK KwkJCQkJCSBnZXRfcGVyc2lzdGVuY2Vfc3RyKHJlbGF0aW9uLT5yZF9yZWwtPnJlbHBlcnNpc3Rl bmNlKSk7CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyhjcmVhdGVTdG10LCAiVEFCTEUiKTsKKwor CWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2lmX25vdF9leGlzdHN9cyIsCisJ CQkJCQkgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiKTsKKworCXRt cCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxuYW1lc3Bh Y2UsCisJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSk7CisJYXBw ZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7aWRlbnRpdHl9RCIsIHRtcCk7CisKKwlk cGNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJl bGF0aW9uKSwKKwkJCQkJCQkJCW9iamVjdElkKTsKKworCS8qCisJICogVHlwZWQgdGFibGVzIGFu ZCBwYXJ0aXRpb25zIHVzZSBhIHNsaWdodGx5IGRpZmZlcmVudCBmb3JtYXQgc3RyaW5nOiB3ZQor CSAqIG11c3Qgbm90IHB1dCB0YWJsZV9lbGVtZW50cyB3aXRoIHBhcmVudHMgZGlyZWN0bHkgaW4g dGhlIGZtdCBzdHJpbmcsCisJICogYmVjYXVzZSBpZiB0aGVyZSBhcmUgbm8gb3B0aW9ucyB0aGUg cGFyZW5zIG11c3Qgbm90IGJlIGVtaXR0ZWQ7IGFuZAorCSAqIGFsc28sIHR5cGVkIHRhYmxlcyBk byBub3QgYWxsb3cgZm9yIGluaGVyaXRhbmNlLgorCSAqLworCWlmIChub2RlLT5vZlR5cGVuYW1l IHx8IG5vZGUtPnBhcnRib3VuZCkKKwl7CisJCUxpc3QJICAgKnRhYmxlZWx0cyA9IE5JTDsKKwor CQkvKgorCQkgKiBXZSBjYW4ndCBwdXQgdGFibGUgZWxlbWVudHMgZGlyZWN0bHkgaW4gdGhlIGZt dCBzdHJpbmcgYXMgYW4gYXJyYXkKKwkJICogc3Vycm91bmRlZCBieSBwYXJlbnMgaGVyZSwgYmVj YXVzZSBhbiBlbXB0eSBjbGF1c2Ugd291bGQgY2F1c2UgYQorCQkgKiBzeW50YXggZXJyb3IuICBU aGVyZWZvcmUsIHdlIHVzZSBhbiBpbmRpcmVjdGlvbiBlbGVtZW50IGFuZCBzZXQKKwkJICogcHJl c2VudD1mYWxzZSB3aGVuIHRoZXJlIGFyZSBubyBlbGVtZW50cy4KKwkJICovCisJCWlmIChub2Rl LT5vZlR5cGVuYW1lKQorCQl7CisJCQl0bXAgPSBuZXdfb2JqdHJlZV9mb3JfdHlwZShyZWxhdGlv bi0+cmRfcmVsLT5yZWxvZnR5cGUsIC0xKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0 ZVN0bXQsICJPRiAle29mX3R5cGV9VCIsIHRtcCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlMaXN0 CSAqcGFyZW50czsKKwkJCU9iakVsZW0JICplbGVtOworCisJCQlwYXJlbnRzID0gZGVwYXJzZV9J bmhSZWxhdGlvbnMob2JqZWN0SWQpOworCQkJZWxlbSA9IChPYmpFbGVtICopIGxpbml0aWFsKHBh cmVudHMpOworCisJCQlBc3NlcnQobGlzdF9sZW5ndGgocGFyZW50cykgPT0gMSk7CisKKwkJCWFw cGVuZF9mb3JtYXRfc3RyaW5nKGNyZWF0ZVN0bXQsICJQQVJUSVRJT04gT0YiKTsKKworCQkJYXBw ZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7cGFyZW50X2lkZW50aXR5fUQiLAorCQkJ CQkJCQkgZWxlbS0+dmFsdWUub2JqZWN0KTsKKwkJfQorCisJCXRhYmxlZWx0cyA9IGRlcGFyc2Vf VGFibGVFbGVtZW50cyhyZWxhdGlvbiwgbm9kZS0+dGFibGVFbHRzLCBkcGNvbnRleHQsCisJCQkJ CQkJCQkJIHRydWUsCQkvKiB0eXBlZCB0YWJsZSAqLworCQkJCQkJCQkJCSBmYWxzZSk7CS8qIG5v dCBjb21wb3NpdGUgKi8KKwkJdGFibGVlbHRzID0gb2J0YWluQ29uc3RyYWludHModGFibGVlbHRz LCBvYmplY3RJZCwgSW52YWxpZE9pZCk7CisJCWlmICh0YWJsZWVsdHMgPT0gTklMKQorCQl7CisJ CQl0bXAgPSBuZXdfb2JqdHJlZSgiIik7CisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJl c2VudCIsIGZhbHNlKTsKKwkJfQorCQllbHNlCisJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiKCV7 ZWxlbWVudHM6LCB9cykiLCAxLAorCQkJCQkJCQkgImVsZW1lbnRzIiwgT2JqVHlwZUFycmF5LCB0 YWJsZWVsdHMpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXt0YWJsZV9l bGVtZW50c31zIiwgdG1wKTsKKwl9CisJZWxzZQorCXsKKwkJTGlzdAkgICAqdGFibGVlbHRzID0g TklMOworCisJCS8qCisJCSAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2VzcyBMSUtFIGNsYXVz ZXMgc2VwYXJhdGVseTsgdGhleSBoYXZlCisJCSAqIGFscmVhZHkgYmVlbiB0cmFuc2Zvcm1lZCBp bnRvIGNvbHVtbnMgYW5kIGNvbnN0cmFpbnRzLgorCQkgKi8KKworCQkvKgorCQkgKiBQcm9jZXNz IHRhYmxlIGVsZW1lbnRzOiBjb2x1bW4gZGVmaW5pdGlvbnMgYW5kIGNvbnN0cmFpbnRzLglPbmx5 CisJCSAqIHRoZSBjb2x1bW4gZGVmaW5pdGlvbnMgYXJlIG9idGFpbmVkIGZyb20gdGhlIHBhcnNl IG5vZGUgaXRzZWxmLglUbworCQkgKiBnZXQgY29uc3RyYWludHMgd2UgcmVseSBvbiBwZ19jb25z dHJhaW50LCBiZWNhdXNlIHRoZSBwYXJzZSBub2RlCisJCSAqIG1pZ2h0IGJlIG1pc3Npbmcgc29t ZSB0aGluZ3Mgc3VjaCBhcyB0aGUgbmFtZSBvZiB0aGUgY29uc3RyYWludHMuCisJCSAqLworCQl0 YWJsZWVsdHMgPSBkZXBhcnNlX1RhYmxlRWxlbWVudHMocmVsYXRpb24sIG5vZGUtPnRhYmxlRWx0 cywgZHBjb250ZXh0LAorCQkJCQkJCQkJCSBmYWxzZSwJCS8qIG5vdCB0eXBlZCB0YWJsZSAqLwor CQkJCQkJCQkJCSBmYWxzZSk7CS8qIG5vdCBjb21wb3NpdGUgKi8KKwkJdGFibGVlbHRzID0gb2J0 YWluQ29uc3RyYWludHModGFibGVlbHRzLCBvYmplY3RJZCwgSW52YWxpZE9pZCk7CisKKwkJYXBw ZW5kX2FycmF5X29iamVjdChjcmVhdGVTdG10LCAiKCV7dGFibGVfZWxlbWVudHM6LCB9cykiLCB0 YWJsZWVsdHMpOworCisJCS8qCisJCSAqIEFkZCBpbmhlcml0YW5jZSBzcGVjaWZpY2F0aW9uLiAg V2UgY2Fubm90IHNpbXBseSBzY2FuIHRoZSBsaXN0IG9mCisJCSAqIHBhcmVudHMgZnJvbSB0aGUg cGFyc2VyIG5vZGUsIGJlY2F1c2UgdGhhdCBtYXkgbGFjayB0aGUgYWN0dWFsCisJCSAqIHF1YWxp ZmllZCBuYW1lcyBvZiB0aGUgcGFyZW50IHJlbGF0aW9ucy4gIFJhdGhlciB0aGFuIHRyeWluZyB0 bworCQkgKiByZS1yZXNvbHZlIHRoZW0gZnJvbSB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIHBhcnNl IG5vZGUsIGl0IHNlZW1zCisJCSAqIG1vcmUgYWNjdXJhdGUgYW5kIGNvbnZlbmllbnQgdG8gZ3Jh YiBpdCBmcm9tIHBnX2luaGVyaXRzLgorCQkgKi8KKwkJdG1wID0gbmV3X29ianRyZWUoIklOSEVS SVRTIik7CisJCWlmIChsaXN0X2xlbmd0aChub2RlLT5pbmhSZWxhdGlvbnMpID4gMCkKKwkJCWFw cGVuZF9hcnJheV9vYmplY3QodG1wLCAiKCV7cGFyZW50czosIH1EKSIsIGRlcGFyc2VfSW5oUmVs YXRpb25zKG9iamVjdElkKSk7CisJCWVsc2UKKwkJeworCQkJYXBwZW5kX251bGxfb2JqZWN0KHRt cCwgIigle3BhcmVudHM6LCB9RCkiKTsKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVz ZW50IiwgZmFsc2UpOworCQl9CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIl e2luaGVyaXRzfXMiLCB0bXApOworCX0KKworCXRtcCA9IG5ld19vYmp0cmVlKCJUQUJMRVNQQUNF Iik7CisJaWYgKG5vZGUtPnRhYmxlc3BhY2VuYW1lKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0 bXAsICIle3RhYmxlc3BhY2V9SSIsIG5vZGUtPnRhYmxlc3BhY2VuYW1lKTsKKwllbHNlCisJewor CQlhcHBlbmRfbnVsbF9vYmplY3QodG1wLCAiJXt0YWJsZXNwYWNlfUkiKTsKKwkJYXBwZW5kX2Jv b2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KGNyZWF0ZVN0bXQsICIle3RhYmxlc3BhY2V9cyIsIHRtcCk7CisKKwlhcHBlbmRfb2JqZWN0 X29iamVjdChjcmVhdGVTdG10LCAiJXtvbl9jb21taXR9cyIsCisJCQkJCQkgZGVwYXJzZV9PbkNv bW1pdENsYXVzZShub2RlLT5vbmNvbW1pdCkpOworCisJLyogRk9SIFZBTFVFUyBjbGF1c2UgKi8K KwlpZiAobm9kZS0+cGFydGJvdW5kKQorCXsKKwkJLyoKKwkJICogR2V0IHBnX2NsYXNzLnJlbHBh cnRib3VuZC4gV2UgY2Fubm90IHVzZSBwYXJ0Ym91bmQgaW4gdGhlCisJCSAqIHBhcnNldHJlZSBk aXJlY3RseSBhcyBpdCdzIHRoZSBvcmlnaW5hbCBwYXJ0Ym91bmQgZXhwcmVzc2lvbgorCQkgKiB3 aGljaCBoYXZlbid0IGJlZW4gdHJhbnNmb3JtZWQuCisJCSAqLworCQlhcHBlbmRfc3RyaW5nX29i amVjdChjcmVhdGVTdG10LCAiJXtwYXJ0aXRpb25fYm91bmR9cyIsCisJCQkJCQkJIFJlbGF0aW9u R2V0UGFydGl0aW9uQm91bmQob2JqZWN0SWQpKTsKKwl9CisKKwkvKiBQQVJUSVRJT04gQlkgY2xh dXNlICovCisJdG1wID0gbmV3X29ianRyZWUoIlBBUlRJVElPTiBCWSIpOworCWlmIChyZWxhdGlv bi0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7ZGVmaW5pdGlvbn1zIiwgcGdfZ2V0X3BhcnRrZXlkZWZf c2ltcGxlKG9iamVjdElkKSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcCwg IiV7ZGVmaW5pdGlvbn1zIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50Iiwg ZmFsc2UpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtwYXJ0aXRp b25fYnl9cyIsIHRtcCk7CisKKwkvKiBVU0lORyBjbGF1c2UgKi8KKwl0bXAgPSBuZXdfb2JqdHJl ZSgiVVNJTkciKTsKKwlpZiAobm9kZS0+YWNjZXNzTWV0aG9kKQorCQlhcHBlbmRfc3RyaW5nX29i amVjdCh0bXAsICIle2FjY2Vzc19tZXRob2R9SSIsIG5vZGUtPmFjY2Vzc01ldGhvZCk7CisJZWxz ZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcCwgIiV7YWNjZXNzX21ldGhvZH1JIik7CisJ CWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlhcHBlbmRf b2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXthY2Nlc3NfbWV0aG9kfXMiLCB0bXApOworCisJ LyogV0lUSCBjbGF1c2UgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiV0lUSCIpOworCWxpc3QgPSBO SUw7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJeworCQlPYmpUcmVlCSAgICp0 bXAyOworCQlEZWZFbGVtCSpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJdG1w MiA9IGRlcGFyc2VfRGVmRWxlbShvcHQsIGZhbHNlKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wMikpOworCX0KKworCWlmIChsaXN0KQorCQlhcHBlbmRfYXJy YXlfb2JqZWN0KHRtcCwgIigle3dpdGg6LCB9cykiLCBsaXN0KTsKKwllbHNlCisJCWFwcGVuZF9i b29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCisJYXBwZW5kX29iamVjdF9vYmpl Y3QoY3JlYXRlU3RtdCwgIiV7d2l0aF9jbGF1c2V9cyIsIHRtcCk7CisKKwlyZWxhdGlvbl9jbG9z ZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBjcmVhdGVTdG10OworfQor CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Z1bmN0aW9uU2V0KFZhcmlhYmxlU2V0S2luZCBr aW5kLCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSkKK3sKKwlPYmpUcmVlCSAgICpyOworCisJaWYg KGtpbmQgPT0gVkFSX1JFU0VUX0FMTCkKKwl7CisJCXIgPSBuZXdfb2JqdHJlZSgiUkVTRVQgQUxM Iik7CisJfQorCWVsc2UgaWYgKHZhbHVlICE9IE5VTEwpCisJeworCQlyID0gbmV3X29ianRyZWVf VkEoIlNFVCAle3NldF9uYW1lfUkiLCAxLAorCQkJCQkJICAgInNldF9uYW1lIiwgT2JqVHlwZVN0 cmluZywgbmFtZSk7CisKKwkJLyoKKwkJICogU29tZSBHVUMgdmFyaWFibGUgbmFtZXMgYXJlICdM SVNUJyB0eXBlIGFuZCBoZW5jZSBtdXN0IG5vdCBiZQorCQkgKiBxdW90ZWQuCisJCSAqLworCQlp ZiAoR2V0Q29uZmlnT3B0aW9uRmxhZ3MobmFtZSwgdHJ1ZSkgJiBHVUNfTElTVF9RVU9URSkKKwkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHIsICJUTyAle3NldF92YWx1ZX1zIiwgdmFsdWUpOworCQll bHNlCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyLCAiVE8gJXtzZXRfdmFsdWV9TCIsIHZhbHVl KTsKKwl9CisJZWxzZQorCXsKKwkJciA9IG5ld19vYmp0cmVlKCJSRVNFVCIpOworCQlhcHBlbmRf c3RyaW5nX29iamVjdChyLCAiJXtzZXRfbmFtZX1JIiwgbmFtZSk7CisJfQorCisJcmV0dXJuIHI7 Cit9CisKKy8qCisgKiBkZXBhcnNlX0NyZWF0ZUZ1bmN0aW9uU3RtdAorICoJCURlcGFyc2UgYSBD cmVhdGVGdW5jdGlvblN0bXQgKENSRUFURSBGVU5DVElPTikKKyAqCisgKiBHaXZlbiBhIGZ1bmN0 aW9uIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiB0aGUgSlNP TgorICogYmxvYiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRp YyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRnVuY3Rpb24oT2lkIG9iamVjdElkLCBOb2RlICpw YXJzZXRyZWUpCit7CisJQ3JlYXRlRnVuY3Rpb25TdG10ICpub2RlID0gKENyZWF0ZUZ1bmN0aW9u U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqY3JlYXRlRnVuYzsKKwlPYmpUcmVlCSAg ICp0bXA7CisJRGF0dW0JCXRtcGRhdHVtOworCWNoYXIJICAgKnNvdXJjZTsKKwljaGFyCSAgICpw cm9iaW47CisJTGlzdAkgICAqcGFyYW1zOworCUxpc3QJICAgKmRlZmF1bHRzOworCUxpc3QJICAg KnNldHMgPSBOSUw7CisJTGlzdAkgICAqdHlwZXMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsK KwlMaXN0Q2VsbCAgICpjdXJkZWY7CisJTGlzdENlbGwgICAqdGFibGVfcGFyYW1zID0gTlVMTDsK KwlIZWFwVHVwbGUJcHJvY1R1cDsKKwlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07CisJSGVhcFR1cGxl CWxhbmdUdXA7CisJT2lkCQkgICAqdHlwYXJyYXk7CisJT2lkCQkgICAqdHJmdHlwZXM7CisJRm9y bV9wZ19sYW5ndWFnZSBsYW5nRm9ybTsKKwlpbnQJCQlpOworCWludAkJCXR5cG51bTsKKwlpbnQJ CQludHlwZXM7CisJYm9vbAkJaXNudWxsOworCWJvb2wJCWlzZnVuY3Rpb247CisKKwkvKiBnZXQg dGhlIHBnX3Byb2MgdHVwbGUgKi8KKwlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQs IG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbHVyZSBmb3IgZnVuY3Rpb24gd2l0aCBPSUQgJXUiLAorCQkJ IG9iamVjdElkKTsKKwlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jVHVw KTsKKworCS8qIGdldCB0aGUgY29ycmVzcG9uZGluZyBwZ19sYW5ndWFnZSB0dXBsZSAqLworCWxh bmdUdXAgPSBTZWFyY2hTeXNDYWNoZTEoTEFOR09JRCwgcHJvY0Zvcm0tPnByb2xhbmcpOworCWlm ICghSGVhcFR1cGxlSXNWYWxpZChsYW5nVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsdXJlIGZvciBsYW5ndWFnZSB3aXRoIE9JRCAldSIsCisJCQkgcHJvY0Zvcm0tPnByb2xh bmcpOworCWxhbmdGb3JtID0gKEZvcm1fcGdfbGFuZ3VhZ2UpIEdFVFNUUlVDVChsYW5nVHVwKTsK KworCS8qCisJICogRGV0ZXJtaW5lIHVzZWZ1bCB2YWx1ZXMgZm9yIHByb3NyYyBhbmQgcHJvYmlu LiAgV2UgY29wZSB3aXRoIHByb2JpbgorCSAqIGJlaW5nIGVpdGhlciBOVUxMIG9yICItIiwgYnV0 IHByb3NyYyBtdXN0IGhhdmUgYSB2YWxpZCB2YWx1ZS4KKwkgKi8KKwl0bXBkYXR1bSA9IFN5c0Nh Y2hlR2V0QXR0cihQUk9DT0lELCBwcm9jVHVwLAorCQkJCQkJCSAgIEFudW1fcGdfcHJvY19wcm9z cmMsICZpc251bGwpOworCWlmIChpc251bGwpCisJCWVsb2coRVJST1IsICJudWxsIHByb3NyYyBp biBmdW5jdGlvbiB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlzb3VyY2UgPSBUZXh0RGF0dW1H ZXRDU3RyaW5nKHRtcGRhdHVtKTsKKworCS8qIERldGVybWluZSBhIHVzZWZ1bCB2YWx1ZSBmb3Ig cHJvYmluICovCisJdG1wZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwK KwkJCQkJCQkgICBBbnVtX3BnX3Byb2NfcHJvYmluLCAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQor CQlwcm9iaW4gPSBOVUxMOworCWVsc2UKKwl7CisJCXByb2JpbiA9IFRleHREYXR1bUdldENTdHJp bmcodG1wZGF0dW0pOworCQlpZiAocHJvYmluWzBdID09ICdcMCcgfHwgc3RyY21wKHByb2Jpbiwg Ii0iKSA9PSAwKQorCQkJcHJvYmluID0gTlVMTDsKKwl9CisKKwkvKgorCSAqIFZlcmJvc2Ugc3lu dGF4CisJICoKKwkgKiBDUkVBVEUgJXtvcl9yZXBsYWNlfXMgRlVOQ1RJT04gJXtzaWduYXR1cmV9 cyBSRVRVUk5TICV7cmV0dXJuX3R5cGV9cworCSAqIExBTkdVQUdFICV7dHJhbnNmb3JtX3R5cGV9 cyAle2xhbmd1YWdlfUkgJXt3aW5kb3d9cyAle3ZvbGF0aWxpdHl9cworCSAqICV7cGFyYWxsZWxf c2FmZXR5fXMgJXtsZWFrcHJvb2Z9cyAle3N0cmljdH1zICV7c2VjdXJpdHlfZGVmaW5lcn1zCisJ ICogJXtjb3N0fXMgJXtyb3dzfXMgJXtzdXBwb3J0fXMgJXtzZXRfb3B0aW9uczogfXMgQVMgJXtv YmpmaWxlfUwsCisJICogJXtzeW1ib2x9TAorCSAqLworCWNyZWF0ZUZ1bmMgPSBuZXdfb2JqdHJl ZSgiQ1JFQVRFIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiJXtvcl9y ZXBsYWNlfXMiLAorCQkJCQkJIG5vZGUtPnJlcGxhY2UgPyAiT1IgUkVQTEFDRSIgOiAiIik7CisK KwkvKgorCSAqIFRvIGNvbnN0cnVjdCB0aGUgYXJndW1lbnRzIGFycmF5LCBleHRyYWN0IHRoZSB0 eXBlIE9JRHMgZnJvbSB0aGUKKwkgKiBmdW5jdGlvbidzIHBnX3Byb2MgZW50cnkuICBJZiBwcm9u YXJncyBlcXVhbHMgdGhlIHBhcmFtZXRlciBsaXN0IGxlbmd0aCwKKwkgKiB0aGVyZSBhcmUgbm8g T1VUIHBhcmFtZXRlcnMgYW5kIHRodXMgd2UgY2FuIGV4dHJhY3QgdGhlIHR5cGUgT0lEIGZyb20K KwkgKiBwcm9hcmd0eXBlczsgb3RoZXJ3aXNlIHdlIG5lZWQgdG8gZGVjb2RlIHByb2FsbGFyZ3R5 cGVzLCB3aGljaCBpcworCSAqIGEgYml0IG1vcmUgaW52b2x2ZWQuCisJICovCisJdHlwYXJyYXkg PSBwYWxsb2MobGlzdF9sZW5ndGgobm9kZS0+cGFyYW1ldGVycykgKiBzaXplb2YoT2lkKSk7CisJ aWYgKGxpc3RfbGVuZ3RoKG5vZGUtPnBhcmFtZXRlcnMpID4gcHJvY0Zvcm0tPnByb25hcmdzKQor CXsKKwkJYm9vbAlpc251bGw7CisJCURhdHVtCWFsbHR5cGVzOworCQlEYXR1bSAgKnZhbHVlczsK KwkJYm9vbCAgICpudWxsczsKKwkJaW50CQluZWxlbXM7CisKKwkJYWxsdHlwZXMgPSBTeXNDYWNo ZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwKKwkJCQkJCQkJICAgQW51bV9wZ19wcm9jX3Byb2Fs bGFyZ3R5cGVzLCAmaXNudWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1IsICJOVUxM IHByb2FsbGFyZ3R5cGVzLCBidXQgbW9yZSBwYXJhbWV0ZXJzIHRoYW4gYXJncyIpOworCQlkZWNv bnN0cnVjdF9hcnJheShEYXR1bUdldEFycmF5VHlwZVAoYWxsdHlwZXMpLAorCQkJCQkJICBPSURP SUQsIDQsICd0JywgJ2knLAorCQkJCQkJICAmdmFsdWVzLCAmbnVsbHMsICZuZWxlbXMpOworCQlp ZiAobmVsZW1zICE9IGxpc3RfbGVuZ3RoKG5vZGUtPnBhcmFtZXRlcnMpKQorCQkJZWxvZyhFUlJP UiwgIm1pc21hdGNoZWQgcHJvYWxsYXJnYXR5cGVzIik7CisJCWZvciAoaSA9IDA7IGkgPCBsaXN0 X2xlbmd0aChub2RlLT5wYXJhbWV0ZXJzKTsgaSsrKQorCQkJdHlwYXJyYXlbaV0gPSB2YWx1ZXNb aV07CisJfQorCWVsc2UKKwl7CisJCWZvciAoaSA9IDA7IGkgPCBsaXN0X2xlbmd0aChub2RlLT5w YXJhbWV0ZXJzKTsgaSsrKQorCQkJIHR5cGFycmF5W2ldID0gcHJvY0Zvcm0tPnByb2FyZ3R5cGVz LnZhbHVlc1tpXTsKKwl9CisKKwkvKgorCSAqIElmIHRoZXJlIGFyZSBhbnkgZGVmYXVsdCBleHBy ZXNzaW9ucywgd2UgcmVhZCB0aGUgZGVwYXJzZWQgZXhwcmVzc2lvbiBhcworCSAqIGEgbGlzdCBz byB0aGF0IHdlIGNhbiBhdHRhY2ggdGhlbSB0byBlYWNoIGFyZ3VtZW50LgorCSAqLworCXRtcGRh dHVtID0gU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsCisJCQkJCQkJICAgQW51bV9w Z19wcm9jX3Byb2FyZ2RlZmF1bHRzLCAmaXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwl7CisJCWRl ZmF1bHRzID0gRnVuY3Rpb25HZXREZWZhdWx0cyhEYXR1bUdldFRleHRQKHRtcGRhdHVtKSk7CisJ CWN1cmRlZiA9IGxpc3RfaGVhZChkZWZhdWx0cyk7CisJfQorCWVsc2UKKwl7CisJCWRlZmF1bHRz ID0gTklMOworCQljdXJkZWYgPSBOVUxMOworCX0KKworCS8qCisJICogTm93IGl0ZXJhdGUgb3Zl ciBlYWNoIHBhcmFtZXRlciBpbiB0aGUgcGFyc2V0cmVlIHRvIGNyZWF0ZSB0aGUKKwkgKiBwYXJh bWV0ZXJzIGFycmF5LgorCSAqLworCXBhcmFtcyA9IE5JTDsKKwl0eXBudW0gPSAwOworCWZvcmVh Y2goY2VsbCwgbm9kZS0+cGFyYW1ldGVycykKKwl7CisJCUZ1bmN0aW9uUGFyYW1ldGVyICpwYXJh bSA9IChGdW5jdGlvblBhcmFtZXRlciAqKSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUJICAgKnBh cmFtb2JqOworCQlPYmpUcmVlCSAgICpkZWZhdWx0dmFsOworCQlPYmpUcmVlCSAgICpuYW1lOwor CisJCS8qCisJCSAqIEEgUEFSQU1fVEFCTEUgcGFyYW1ldGVyIGluZGljYXRlcyBlbmQgb2YgaW5w dXQgYXJndW1lbnRzOyB0aGUKKwkJICogZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIHBhcnQgb2Yg dGhlIHJldHVybiB0eXBlLiAgV2UgaWdub3JlIHRoZW0KKwkJICogaGVyZSwgYnV0IGtlZXAgdHJh Y2sgb2YgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGxpc3Qgc28gdGhhdAorCQkgKiB3ZSBj YW4gZWFzaWx5IHByb2R1Y2UgdGhlIHJldHVybiB0eXBlIGJlbG93LgorCQkgKi8KKwkJaWYgKHBh cmFtLT5tb2RlID09IEZVTkNfUEFSQU1fVEFCTEUpCisJCXsKKwkJCXRhYmxlX3BhcmFtcyA9IGNl bGw7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFZlcmJvc2Ugc3ludGF4IGZvciBwYXJh bWF0ZXI6ICV7bW9kZX1zICV7bmFtZX1zICV7dHlwZX1UICV7ZGVmYXVsdH1zCisJCSAqCisJCSAq IE5vdGUgdGhhdCAle25hbWV9cyBpcyBhIHN0cmluZyBoZXJlLCBub3QgYW4gaWRlbnRpZmllcjsg dGhlIHJlYXNvbgorCQkgKiBmb3IgdGhpcyBpcyB0aGF0IGFuIGFic2VudCBwYXJhbWV0ZXIgbmFt ZSBtdXN0IHByb2R1Y2UgYW4gZW1wdHkKKwkJICogc3RyaW5nLCBub3QgIiIsIHdoaWNoIGlzIHdo YXQgd291bGQgaGFwcGVuIGlmIHdlIHdlcmUgdG8gdXNlCisJCSAqICV7bmFtZX1JIGhlcmUuICBT byB3ZSBhZGQgYW5vdGhlciBsZXZlbCBvZiBpbmRpcmVjdGlvbiB0byBhbGxvdyB1cworCQkgKiB0 byBpbmplY3QgYSAicHJlc2VudCIgcGFyYW1ldGVyLgorCQkgKi8KKwkJcGFyYW1vYmogPSBuZXdf b2JqdHJlZSgiIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHBhcmFtb2JqLCAiJXttb2RlfXMi LAorCQkJCQkJCSBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX0lOID8gIklOIiA6CisJCQkJCQkJ IHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1fT1VUID8gIk9VVCIgOgorCQkJCQkJCSBwYXJhbS0+ bW9kZSA9PSBGVU5DX1BBUkFNX0lOT1VUID8gIklOT1VUIiA6CisJCQkJCQkJIHBhcmFtLT5tb2Rl ID09IEZVTkNfUEFSQU1fVkFSSUFESUMgPyAiVkFSSUFESUMiIDoKKwkJCQkJCQkgIklOIik7CisK KwkJLyogb3B0aW9uYWwgd2hvbGVzYWxlIHN1cHByZXNzaW9uIG9mICJuYW1lIiBvY2N1cnMgaGVy ZSAqLworCisJCW5hbWUgPSBuZXdfb2JqdHJlZSgiIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KG5hbWUsICIle25hbWV9SSIsCisJCQkJCQkJIHBhcmFtLT5uYW1lID8gcGFyYW0tPm5hbWUgOiAi TlVMTCIpOworCisJCWFwcGVuZF9ib29sX29iamVjdChuYW1lLCAicHJlc2VudCIsCisJCQkJCQkg ICBwYXJhbS0+bmFtZSA/IHRydWUgOiBmYWxzZSk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo cGFyYW1vYmosICIle25hbWV9cyIsIG5hbWUpOworCisJCWRlZmF1bHR2YWwgPSBuZXdfb2JqdHJl ZSgiREVGQVVMVCIpOworCQlpZiAoUG9pbnRlcklzVmFsaWQocGFyYW0tPmRlZmV4cHIpKQorCQl7 CisJCQljaGFyICpleHByOworCisJCQlpZiAoY3VyZGVmID09IE5VTEwpCisJCQkJZWxvZyhFUlJP UiwgInByb2FyZ2RlZmF1bHRzIGxpc3QgdG9vIHNob3J0Iik7CisJCQlleHByID0gbGZpcnN0KGN1 cmRlZik7CisKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGRlZmF1bHR2YWwsICIle3ZhbHVlfXMi LCBleHByKTsKKwkJCWN1cmRlZiA9IGxuZXh0KGRlZmF1bHRzLCBjdXJkZWYpOworCQl9CisJCWVs c2UKKwkJCWFwcGVuZF9ib29sX29iamVjdChkZWZhdWx0dmFsLCAicHJlc2VudCIsIGZhbHNlKTsK KworCQlhcHBlbmRfb2JqZWN0X29iamVjdChwYXJhbW9iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCQkg bmV3X29ianRyZWVfZm9yX3R5cGUodHlwYXJyYXlbdHlwbnVtKytdLCAtMSkpOworCisJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHBhcmFtb2JqLCAiJXtkZWZhdWx0fXMiLCBkZWZhdWx0dmFsKTsKKwor CQlwYXJhbXMgPSBsYXBwZW5kKHBhcmFtcywgbmV3X29iamVjdF9vYmplY3QocGFyYW1vYmopKTsK Kwl9CisKKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiJXtpZGVudGl0eX1EIiwgMSwKKwkJCQkJCSAg ImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJICBvYmplY3RJZCkpOwor CisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wLCAiKCIpOworCWFwcGVuZF9hcnJheV9vYmplY3Qo dG1wLCAiJXthcmd1bWVudHM6LCB9cyIsIHBhcmFtcyk7CisJYXBwZW5kX2Zvcm1hdF9zdHJpbmco dG1wLCAiKSIpOworCisJaXNmdW5jdGlvbiA9IChwcm9jRm9ybS0+cHJva2luZCAhPSBQUk9LSU5E X1BST0NFRFVSRSk7CisKKwlpZiAoaXNmdW5jdGlvbikKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo Y3JlYXRlRnVuYywgIkZVTkNUSU9OICV7c2lnbmF0dXJlfXMiLCB0bXApOworCWVsc2UKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRnVuYywgIlBST0NFRFVSRSAle3NpZ25hdHVyZX1zIiwg dG1wKTsKKworCS8qCisJICogQSByZXR1cm4gdHlwZSBjYW4gYWRvcHQgb25lIG9mIHR3byBmb3Jt czogZWl0aGVyIGEgW1NFVE9GXSBzb21lX3R5cGUsIG9yCisJICogYSBUQUJMRShsaXN0LW9mLXR5 cGVzKS4gIFdlIGNhbiB0ZWxsIHRoZSBzZWNvbmQgZm9ybSBiZWNhdXNlIHdlIHNhdyBhCisJICog dGFibGUgcGFyYW0gYWJvdmUgd2hpbGUgc2Nhbm5pbmcgdGhlIGFyZ3VtZW50IGxpc3QuCisJICov CisJaWYgKHRhYmxlX3BhcmFtcyA9PSBOVUxMKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEo IiIsIDEsCisJCQkJCQkJICJyZXR1cm5fZm9ybSIsIE9ialR5cGVTdHJpbmcsICJwbGFpbiIpOwor CQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle3NldG9mfXMiLAorCQkJCQkJCSBwcm9jRm9y bS0+cHJvcmV0c2V0ID8gIlNFVE9GIiA6ICIiKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1w LCAiJXtyZXR0eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jRm9ybS0+ cHJvcmV0dHlwZSwgLTEpKTsKKwl9CisJZWxzZQorCXsKKwkJTGlzdAkgICAqcmV0dHlwZXMgPSBO SUw7CisJCU9ialRyZWUJICAgKnBhcmFtb2JqOworCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJU QUJMRSIsIDEsCisJCQkJCQkJICJyZXR1cm5fZm9ybSIsIE9ialR5cGVTdHJpbmcsICJ0YWJsZSIp OworCQlmb3IgKDsgdGFibGVfcGFyYW1zICE9IE5VTEw7IHRhYmxlX3BhcmFtcyA9IGxuZXh0KG5v ZGUtPnBhcmFtZXRlcnMsIHRhYmxlX3BhcmFtcykpCisJCXsKKwkJCUZ1bmN0aW9uUGFyYW1ldGVy ICpwYXJhbSA9IGxmaXJzdCh0YWJsZV9wYXJhbXMpOworCisJCQlwYXJhbW9iaiA9IG5ld19vYmp0 cmVlKCIiKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHBhcmFtb2JqLCAiJXtuYW1lfUkiLCBw YXJhbS0+bmFtZSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChwYXJhbW9iaiwgIiV7dHlwZX1U IiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cGFycmF5W3R5cG51bSsrXSwgLTEp KTsKKwkJCXJldHR5cGVzID0gbGFwcGVuZChyZXR0eXBlcywgbmV3X29iamVjdF9vYmplY3QocGFy YW1vYmopKTsKKwkJfQorCisJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wLCAiKCV7cmV0dHlwZXM6 LCB9cykiLCByZXR0eXBlcyk7CisJfQorCisJaWYgKGlzZnVuY3Rpb24pCisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICJSRVRVUk5TICV7cmV0dXJuX3R5cGV9cyIsIHRtcCk7CisK KwkvKiBUUkFOU0ZPUk0gRk9SIFRZUEUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiVFJBTlNGT1JN Iik7CisKKwludHlwZXMgPSBnZXRfZnVuY190cmZ0eXBlcyhwcm9jVHVwLCAmdHJmdHlwZXMpOwor CWZvciAoaSA9IDA7IGkgPCBudHlwZXM7IGkrKykKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJGT1IgVFlQRSAle3R5cGV9VCIsIDEsCisJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHJmdHlwZXNbaV0sIC0xKSk7CisJCXR5cGVz ID0gbGFwcGVuZCh0eXBlcywgdG1wKTsKKwl9CisKKwlpZiAodHlwZXMpCisJCWFwcGVuZF9hcnJh eV9vYmplY3QodG1wLCAiJXtmb3JfdHlwZTosIH1zIiwgdHlwZXMpOworCWVsc2UKKwkJYXBwZW5k X2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlhcHBlbmRfb2JqZWN0X29i amVjdChjcmVhdGVGdW5jLCAiJXt0cmFuc2Zvcm1fdHlwZX1zIiwgdG1wKTsKKworCWFwcGVuZF9z dHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICJMQU5HVUFHRSAle2xhbmd1YWdlfUkiLAorCQkJCQkJ IE5hbWVTdHIobGFuZ0Zvcm0tPmxhbm5hbWUpKTsKKworCWlmIChpc2Z1bmN0aW9uKQorCXsKKwkJ YXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7d2luZG93fXMiLAorCQkJCQkJCSBw cm9jRm9ybS0+cHJva2luZCA9PSBQUk9LSU5EX1dJTkRPVyA/ICJXSU5ET1ciIDogIiIpOworCQlh cHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiJXt2b2xhdGlsaXR5fXMiLAorCQkJCQkJ CSBwcm9jRm9ybS0+cHJvdm9sYXRpbGUgPT0gUFJPVk9MQVRJTEVfVk9MQVRJTEUgPworCQkJCQkJ CSAiVk9MQVRJTEUiIDoKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3ZvbGF0aWxlID09IFBST1ZPTEFU SUxFX1NUQUJMRSA/CisJCQkJCQkJICJTVEFCTEUiIDoKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3Zv bGF0aWxlID09IFBST1ZPTEFUSUxFX0lNTVVUQUJMRSA/CisJCQkJCQkJICJJTU1VVEFCTEUiIDog IklOVkFMSUQgVk9MQVRJTElUWSIpOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1 bmMsICIle3BhcmFsbGVsX3NhZmV0eX1zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3BhcmFsbGVs ID09IFBST1BBUkFMTEVMX1NBRkUgPworCQkJCQkJCSAiUEFSQUxMRUwgU0FGRSIgOgorCQkJCQkJ CSBwcm9jRm9ybS0+cHJvcGFyYWxsZWwgPT0gUFJPUEFSQUxMRUxfUkVTVFJJQ1RFRCA/CisJCQkJ CQkJICJQQVJBTExFTCBSRVNUUklDVEVEIiA6ICJQQVJBTExFTCBVTlNBRkUiKTsKKworCQlhcHBl bmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiJXtsZWFrcHJvb2Z9cyIsCisJCQkJCQkJIHBy b2NGb3JtLT5wcm9sZWFrcHJvb2YgPyAiTEVBS1BST09GIiA6ICIiKTsKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QoY3JlYXRlRnVuYywgIiV7c3RyaWN0fXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJv aXNzdHJpY3QgPworCQkJCQkJCSAiUkVUVVJOUyBOVUxMIE9OIE5VTEwgSU5QVVQiIDoKKwkJCQkJ CQkgIkNBTExFRCBPTiBOVUxMIElOUFVUIik7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3Jl YXRlRnVuYywgIiV7c2VjdXJpdHlfZGVmaW5lcn1zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3Nl Y2RlZiA/CisJCQkJCQkJICJTRUNVUklUWSBERUZJTkVSIiA6ICJTRUNVUklUWSBJTlZPS0VSIik7 CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRnVuYywgIiV7Y29zdH1zIiwKKwkJCQkJ CQkgbmV3X29ianRyZWVfVkEoIkNPU1QgJXtjb3N0fW4iLCAxLAorCQkJCQkJCQkJCQkiY29zdCIs IE9ialR5cGVGbG9hdCwKKwkJCQkJCQkJCQkJcHJvY0Zvcm0tPnByb2Nvc3QpKTsKKworCQl0bXAg PSBuZXdfb2JqdHJlZSgiUk9XUyIpOworCQlpZiAocHJvY0Zvcm0tPnByb3Jvd3MgPT0gMCkKKwkJ CWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCQllbHNlCisJCQlh cHBlbmRfZmxvYXRfb2JqZWN0KHRtcCwgIiV7cm93c31uIiwgcHJvY0Zvcm0tPnByb3Jvd3MpOwor CQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVGdW5jLCAiJXtyb3dzfXMiLCB0bXApOworCisJ CXRtcCA9IG5ld19vYmp0cmVlKCJTVVBQT1JUICV7bmFtZX1zIik7CisJCWlmIChwcm9jRm9ybS0+ cHJvc3VwcG9ydCkKKwkJeworCQkJT2lkCQkJYXJndHlwZXNbMV07CisKKwkJCS8qCisJCQkgKiBX ZSBzaG91bGQgcXVhbGlmeSB0aGUgc3VwcG9ydCBmdW5jdGlvbidzIG5hbWUgaWYgaXQgd291bGRu J3QgYmUKKwkJCSAqIHJlc29sdmVkIGJ5IGxvb2t1cCBpbiB0aGUgY3VycmVudCBzZWFyY2ggcGF0 aC4KKwkJCSAqLworCQkJYXJndHlwZXNbMF0gPSBJTlRFUk5BTE9JRDsKKwkJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHRtcCwgIiV7bmFtZX1zIiwKKwkJCQkJCQkJIGdlbmVyYXRlX2Z1bmN0aW9uX25h bWUocHJvY0Zvcm0tPnByb3N1cHBvcnQsIDEsCisJCQkJCQkJCQkJCQkJCU5JTCwgYXJndHlwZXMs CisJCQkJCQkJCQkJCQkJCWZhbHNlLCBOVUxMLAorCQkJCQkJCQkJCQkJCQlFWFBSX0tJTkRfTk9O RSkpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50Iiwg ZmFsc2UpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3N1cHBvcnR9 cyIsIHRtcCk7CisJfQorCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRpb25zKQorCXsKKwkJRGVm RWxlbQkqZGVmZWwgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUJICAgKnRt cCA9IE5VTEw7CisKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNldCIpID09IDApCisJ CXsKKwkJCVZhcmlhYmxlU2V0U3RtdCAqc3N0bXQgPSAoVmFyaWFibGVTZXRTdG10ICopIGRlZmVs LT5hcmc7CisJCQljaGFyICp2YWx1ZSA9IEV4dHJhY3RTZXRWYXJpYWJsZUFyZ3Moc3N0bXQpOwor CisJCQl0bXAgPSBkZXBhcnNlX0Z1bmN0aW9uU2V0KHNzdG10LT5raW5kLCBzc3RtdC0+bmFtZSwg dmFsdWUpOworCQkJc2V0cyA9IGxhcHBlbmQoc2V0cywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisJCX0KKwl9CisJYXBwZW5kX2FycmF5X29iamVjdChjcmVhdGVGdW5jLCAiJXtzZXRfb3B0aW9u czogfXMiLCBzZXRzKTsKKworCS8qIEFkZCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiAqLworCSh2 b2lkKSBTeXNDYWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwgQW51bV9wZ19wcm9jX3Byb3Nx bGJvZHksICZpc251bGwpOworCWlmIChwcm9jRm9ybS0+cHJvbGFuZyA9PSBTUUxsYW5ndWFnZUlk ICYmICFpc251bGwpCisJeworCQlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwkJaW5pdFN0cmluZ0lu Zm8oJmJ1Zik7CisJCXByaW50X2Z1bmN0aW9uX3NxbGJvZHkoJmJ1ZiwgcHJvY1R1cCk7CisKKwkJ YXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7ZGVmaW5pdGlvbn1zIiwgYnVmLmRh dGEpOworCX0KKwllbHNlIGlmIChwcm9iaW4gPT0gTlVMTCkKKwl7CisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGNyZWF0ZUZ1bmMsICJBUyAle2RlZmluaXRpb259TCIsCisJCQkJCQkJIHNvdXJjZSk7 CisJfQorCWVsc2UKKwl7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICJBUyAl e29iamZpbGV9TCIsIHByb2Jpbik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMs ICIsICV7c3ltYm9sfUwiLCBzb3VyY2UpOworCX0KKworCVJlbGVhc2VTeXNDYWNoZShsYW5nVHVw KTsKKwlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisKKwlyZXR1cm4gY3JlYXRlRnVuYzsKK30K KworLyoKKyAqIERlcGFyc2UgYSBBbHRlckZ1bmN0aW9uU3RtdCAoQUxURVIgRlVOQ1RJT04pCisg KgorICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVk IGl0LCByZXR1cm4gdGhlIEpTT04KKyAqIGJsb2IgcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21t YW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRnVuY3Rpb24oT2lkIG9i amVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJGdW5jdGlvblN0bXQgKm5vZGUgPSAo QWx0ZXJGdW5jdGlvblN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAgKmFsdGVyRnVuYzsK KwlPYmpUcmVlCSAgICpzaWduOworCUhlYXBUdXBsZQlwcm9jVHVwOworCUZvcm1fcGdfcHJvYyBw cm9jRm9ybTsKKwlMaXN0CSAgICpwYXJhbXM7CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJTGlz dENlbGwgICAqY2VsbDsKKwlpbnQJCQlpOworCisJLyogZ2V0IHRoZSBwZ19wcm9jIHR1cGxlICov CisJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBvYmplY3RJZCk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWx1cmUgZm9yIGZ1bmN0aW9uIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJcHJvY0Zv cm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwkvKgorCSAqIFZlcmJv c2Ugc3ludGF4CisJICoKKwkgKiBBTFRFUiBGVU5DVElPTiAle3NpZ25hdHVyZX1zICV7ZGVmaW5p dGlvbjogfXMKKwkgKi8KKwlhbHRlckZ1bmMgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgRlVOQ1RJ T04iLCAwKTsKKworCXBhcmFtcyA9IE5JTDsKKworCS8qCisJICogQUxURVIgRlVOQ1RJT04gZG9l cyBub3QgY2hhbmdlIHNpZ25hdHVyZSBzbyB3ZSBjYW4gdXNlIGNhdGFsb2cKKwkgKiB0byBnZXQg aW5wdXQgdHlwZSBPaWRzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJvbmFy Z3M7IGkrKykKKwl7CisJCU9ialRyZWUJICAgKnRtcCA9IG5ld19vYmp0cmVlX1ZBKCIle3R5cGV9 VCIsIDApOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgInR5cGUiLAorCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldLCAtMSkp OworCQlwYXJhbXMgPSBsYXBwZW5kKHBhcmFtcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJ fQorCisJc2lnbiA9IG5ld19vYmp0cmVlKCIiKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHNp Z24sICIle2lkZW50aXR5fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQ cm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJZCkpOworCWFwcGVuZF9h cnJheV9vYmplY3Qoc2lnbiwgIigle2FyZ3VtZW50czosIH1zKSIsIHBhcmFtcyk7CisKKwlhcHBl bmRfb2JqZWN0X29iamVjdChhbHRlckZ1bmMsICIle3NpZ25hdHVyZX1zIiwgc2lnbik7CisKKwlm b3JlYWNoKGNlbGwsIG5vZGUtPmFjdGlvbnMpCisJeworCQlEZWZFbGVtCSpkZWZlbCA9IChEZWZF bGVtICopIGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZQkgICAqdG1wID0gTlVMTDsKKworCQlpZiAo c3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidm9sYXRpbGl0eSIpID09IDApCisJCXsKKwkJCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKHN0clZhbChkZWZlbC0+YXJnKSwgMCk7CisJCX0KKwkJZWxzZSBpZiAo c3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3RyaWN0IikgPT0gMCkKKwkJeworCQkJdG1wID0gbmV3 X29ianRyZWVfVkEoaW50VmFsKGRlZmVsLT5hcmcpID8KKwkJCQkJCQkJICJSRVRVUk5TIE5VTEwg T04gTlVMTCBJTlBVVCIgOgorCQkJCQkJCQkgIkNBTExFRCBPTiBOVUxMIElOUFVUIiwgMCk7CisJ CX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic2VjdXJpdHkiKSA9PSAwKQor CQl7CisJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQShpbnRWYWwoZGVmZWwtPmFyZykgPworCQkJCQkJ CQkgIlNFQ1VSSVRZIERFRklORVIiIDogIlNFQ1VSSVRZIElOVk9LRVIiLCAwKTsKKwkJfQorCQll bHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJsZWFrcHJvb2YiKSA9PSAwKQorCQl7CisJ CQl0bXAgPSBuZXdfb2JqdHJlZV9WQShpbnRWYWwoZGVmZWwtPmFyZykgPworCQkJCQkJCQkgIkxF QUtQUk9PRiIgOiAiTk9UIExFQUtQUk9PRiIsIDApOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChk ZWZlbC0+ZGVmbmFtZSwgImNvc3QiKSA9PSAwKQorCQl7CisJCQl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiQ09TVCAle2Nvc3R9biIsIDEsCisJCQkJCQkJCSAiY29zdCIsIE9ialR5cGVGbG9hdCwKKwkJ CQkJCQkJIGRlZkdldE51bWVyaWMoZGVmZWwpKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVm ZWwtPmRlZm5hbWUsICJyb3dzIikgPT0gMCkKKwkJeworCQkJdG1wID0gbmV3X29ianRyZWVfVkEo IlJPV1MiLCAwKTsKKwkJCWlmIChkZWZHZXROdW1lcmljKGRlZmVsKSA9PSAwKQorCQkJCWFwcGVu ZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCQkJZWxzZQorCQkJCWFwcGVu ZF9mbG9hdF9vYmplY3QodG1wLCAiJXtyb3dzfW4iLAorCQkJCQkJCQkJZGVmR2V0TnVtZXJpYyhk ZWZlbCkpOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNldCIpID09 IDApCisJCXsKKwkJCVZhcmlhYmxlU2V0U3RtdCAqc3N0bXQgPSAoVmFyaWFibGVTZXRTdG10ICop IGRlZmVsLT5hcmc7CisJCQljaGFyICp2YWx1ZSA9IEV4dHJhY3RTZXRWYXJpYWJsZUFyZ3Moc3N0 bXQpOworCisJCQl0bXAgPSBkZXBhcnNlX0Z1bmN0aW9uU2V0KHNzdG10LT5raW5kLCBzc3RtdC0+ bmFtZSwgdmFsdWUpOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInN1 cHBvcnQiKSA9PSAwKQorCQl7CisJCQlPaWQJCQlhcmd0eXBlc1sxXTsKKworCQkJdG1wID0gbmV3 X29ianRyZWUoIlNVUFBPUlQiKTsKKworCQkJQXNzZXJ0KHByb2NGb3JtLT5wcm9zdXBwb3J0KTsK KworCQkJLyoKKwkJCSAqIFdlIHNob3VsZCBxdWFsaWZ5IHRoZSBzdXBwb3J0IGZ1bmN0aW9uJ3Mg bmFtZSBpZiBpdCB3b3VsZG4ndCBiZQorCQkJICogcmVzb2x2ZWQgYnkgbG9va3VwIGluIHRoZSBj dXJyZW50IHNlYXJjaCBwYXRoLgorCQkJICovCisJCQlhcmd0eXBlc1swXSA9IElOVEVSTkFMT0lE OworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtuYW1lfXMiLAorCQkJCQkJCQkgZ2Vu ZXJhdGVfZnVuY3Rpb25fbmFtZShwcm9jRm9ybS0+cHJvc3VwcG9ydCwgMSwKKwkJCQkJCQkJCQkJ CQkJTklMLCBhcmd0eXBlcywKKwkJCQkJCQkJCQkJCQkJZmFsc2UsIE5VTEwsCisJCQkJCQkJCQkJ CQkJCUVYUFJfS0lORF9OT05FKSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZu YW1lLCAicGFyYWxsZWwiKSA9PSAwKQorCQl7CisJCQljaGFyICpmbXQgPSBwc3ByaW50ZigiUEFS QUxMRUwgJXMiLCBzdHJWYWwoZGVmZWwtPmFyZykpOworCQkJdG1wID0gbmV3X29ianRyZWUoZm10 KTsKKwkJfQorCisJCWVsZW1zID0gbGFwcGVuZChlbGVtcywgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChhbHRlckZ1bmMsICIle2RlZmluaXRpb246 IH1zIiwgZWxlbXMpOworCisJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCisJcmV0dXJuIGFs dGVyRnVuYzsKK30KKworLyoKKyAqIERlcGFyc2UgYSBBbHRlck93bmVyU3RtdCAoQUxURVIgLi4u IE9XTkVSIFRPIC4uLikuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJPd25l clN0bXQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJP d25lclN0bXQgKm5vZGUgPSAoQWx0ZXJPd25lclN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJ CSAgICpvd25lclN0bXQ7CisJY2hhcgkJICAgKmZtdDsKKworCWZtdCA9IHBzcHJpbnRmKCJBTFRF UiAlcyAlJXtpZGVudGl0eX1zIE9XTkVSIFRPICUle25ld293bmVyfUkiLAorCQkJCSAgIHN0cmlu Z2lmeV9vYmp0eXBlKG5vZGUtPm9iamVjdFR5cGUpKTsKKworCW93bmVyU3RtdCA9IG5ld19vYmp0 cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCQkgICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJCSAgIGdldE9iamVjdElkZW50aXR5KCZhZGRyZXNzLCBmYWxzZSksCisJCQkJCQkJICAgIm5l d293bmVyIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgICBnZXRfcm9sZXNwZWNfbmFtZShub2Rl LT5uZXdvd25lcikpOworCisJcmV0dXJuIG93bmVyU3RtdDsKK30KKworLyoKKyAqIERlcGFyc2Ug YSBBbHRlck9wZXJhdG9yU3RtdCAoQUxURVIgT1BFUkFUT1IgLi4uIFNFVCAuLi4pLgorICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyT3BlcmF0b3JTdG10KE9pZCBvYmplY3RJZCwg Tm9kZSAqcGFyc2V0cmVlKQoreworCUhlYXBUdXBsZSAgIAlvcHJUdXA7CisJQWx0ZXJPcGVyYXRv clN0bXQgKm5vZGUgPSAoQWx0ZXJPcGVyYXRvclN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJ CSAgICphbHRlcm9wOworCUZvcm1fcGdfb3BlcmF0b3Igb3ByRm9ybTsKKwlMaXN0Q2VsbAkgICAq Y2VsbDsKKwlMaXN0CQkgICAqbGlzdCA9IE5JTDsKKworCW9wclR1cCA9IFNlYXJjaFN5c0NhY2hl MShPUEVST0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKG9wclR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBv cGVyYXRvciB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlvcHJGb3JtID0gKEZvcm1fcGdfb3Bl cmF0b3IpIEdFVFNUUlVDVChvcHJUdXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAq CisJICogQUxURVIgT1BFUkFUT1IgJXtpZGVudGl0eX1PICgle2xlZnRfdHlwZX1ULCAle3JpZ2h0 X3R5cGV9VCkgU0VUCisJICogKCV7ZWxlbXM6LCB9cykKKwkgKi8KKwlhbHRlcm9wID0gbmV3X29i anRyZWVfVkEoIkFMVEVSIE9QRVJBVE9SICV7aWRlbnRpdHl9TyIsIDEsCisJCQkJCQkJICJpZGVu dGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShv cHJGb3JtLT5vcHJuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJICBOYW1lU3RyKG9wckZvcm0tPm9w cm5hbWUpKSk7CisKKwkvKiBMRUZUQVJHICovCisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3By bGVmdCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyb3AsICIoJXtsZWZ0X3R5cGV9VCIs CisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wckZvcm0tPm9wcmxlZnQsIC0xKSk7CisJ ZWxzZQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlcm9wLCAiKCV7bGVmdF90eXBlfXMiLCAi Tk9ORSIpOworCisJLyogUklHSFRBUkcgKi8KKwlBc3NlcnQoT2lkSXNWYWxpZChvcHJGb3JtLT5v cHJsZWZ0KSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJvcCwgIiwgJXtyaWdodF90eXBl fVQpIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcHJGb3JtLT5vcHJyaWdodCwgLTEp KTsKKworCWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gKmVsZW0g PSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUgKnRtcCA9IE5VTEw7CisKKwkJ aWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAicmVzdHJpY3QiKSA9PSAwKQorCQl7CisJCQl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiUkVTVFJJQ1Q9IiwgMSwKKwkJCQkJCQkJICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAicmVzdHJpY3QiKTsKKwkJCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcnJl c3QpKQorCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJyZXN0KSk7CisJCQllbHNlCisJCQkJYXBwZW5k X3N0cmluZ19vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9cyIsICJOT05FIik7CisJCX0KKwkJZWxz ZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJqb2luIikgPT0gMCkKKwkJeworCQkJdG1wID0g bmV3X29ianRyZWVfVkEoIkpPSU49IiwgMSwKKwkJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAiam9pbiIpOworCQkJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3Byam9pbikpCisJCQkJ YXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJCQkJIG9wckZvcm0tPm9wcmpvaW4pKTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRfc3RyaW5nX29i amVjdCh0bXAsICIle3Byb2NlZHVyZX1zIiwgIk5PTkUiKTsKKwkJfQorCisJCUFzc2VydCh0bXAp OworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisK KwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVyb3AsICJTRVQgKCV7ZWxlbXM6LCB9cykiLCBsaXN0 KTsKKworCVJlbGVhc2VTeXNDYWNoZShvcHJUdXApOworCisJcmV0dXJuIGFsdGVyb3A7Cit9CisK Ky8qCisgKiBSZXR1cm4gdGhlIGdpdmVuIG9iamVjdCB0eXBlIGFzIGEgc3RyaW5nLgorICovCitz dGF0aWMgY29uc3QgY2hhciAqCitzdHJpbmdpZnlfb2JqdHlwZShPYmplY3RUeXBlIG9ianR5cGUp Cit7CisJc3dpdGNoIChvYmp0eXBlKQorCXsKKwkJY2FzZSBPQkpFQ1RfQUdHUkVHQVRFOgorCQkJ cmV0dXJuICJBR0dSRUdBVEUiOworCQljYXNlIE9CSkVDVF9DQVNUOgorCQkJcmV0dXJuICJDQVNU IjsKKwkJY2FzZSBPQkpFQ1RfQ09MVU1OOgorCQkJcmV0dXJuICJDT0xVTU4iOworCQljYXNlIE9C SkVDVF9DT0xMQVRJT046CisJCQlyZXR1cm4gIkNPTExBVElPTiI7CisJCWNhc2UgT0JKRUNUX0NP TlZFUlNJT046CisJCQlyZXR1cm4gIkNPTlZFUlNJT04iOworCQljYXNlIE9CSkVDVF9EQVRBQkFT RToKKwkJCXJldHVybiAiREFUQUJBU0UiOworCQljYXNlIE9CSkVDVF9ET01BSU46CisJCQlyZXR1 cm4gIkRPTUFJTiI7CisJCWNhc2UgT0JKRUNUX0VWRU5UX1RSSUdHRVI6CisJCQlyZXR1cm4gIkVW RU5UIFRSSUdHRVIiOworCQljYXNlIE9CSkVDVF9FWFRFTlNJT046CisJCQlyZXR1cm4gIkVYVEVO U0lPTiI7CisJCWNhc2UgT0JKRUNUX0ZEVzoKKwkJCXJldHVybiAiRk9SRUlHTiBEQVRBIFdSQVBQ RVIiOworCQljYXNlIE9CSkVDVF9GT1JFSUdOX1NFUlZFUjoKKwkJCXJldHVybiAiU0VSVkVSIjsK KwkJY2FzZSBPQkpFQ1RfRk9SRUlHTl9UQUJMRToKKwkJCXJldHVybiAiRk9SRUlHTiBUQUJMRSI7 CisJCWNhc2UgT0JKRUNUX0ZVTkNUSU9OOgorCQkJcmV0dXJuICJGVU5DVElPTiI7CisJCWNhc2Ug T0JKRUNUX0lOREVYOgorCQkJcmV0dXJuICJJTkRFWCI7CisJCWNhc2UgT0JKRUNUX0xBTkdVQUdF OgorCQkJcmV0dXJuICJMQU5HVUFHRSI7CisJCWNhc2UgT0JKRUNUX0xBUkdFT0JKRUNUOgorCQkJ cmV0dXJuICJMQVJHRSBPQkpFQ1QiOworCQljYXNlIE9CSkVDVF9NQVRWSUVXOgorCQkJcmV0dXJu ICJNQVRFUklBTElaRUQgVklFVyI7CisJCWNhc2UgT0JKRUNUX09QQ0xBU1M6CisJCQlyZXR1cm4g Ik9QRVJBVE9SIENMQVNTIjsKKwkJY2FzZSBPQkpFQ1RfT1BFUkFUT1I6CisJCQlyZXR1cm4gIk9Q RVJBVE9SIjsKKwkJY2FzZSBPQkpFQ1RfT1BGQU1JTFk6CisJCQlyZXR1cm4gIk9QRVJBVE9SIEZB TUlMWSI7CisJCWNhc2UgT0JKRUNUX1JPTEU6CisJCQlyZXR1cm4gIlJPTEUiOworCQljYXNlIE9C SkVDVF9SVUxFOgorCQkJcmV0dXJuICJSVUxFIjsKKwkJY2FzZSBPQkpFQ1RfU0NIRU1BOgorCQkJ cmV0dXJuICJTQ0hFTUEiOworCQljYXNlIE9CSkVDVF9TRVFVRU5DRToKKwkJCXJldHVybiAiU0VR VUVOQ0UiOworCQljYXNlIE9CSkVDVF9UQUJMRToKKwkJCXJldHVybiAiVEFCTEUiOworCQljYXNl IE9CSkVDVF9UQUJMRVNQQUNFOgorCQkJcmV0dXJuICJUQUJMRVNQQUNFIjsKKwkJY2FzZSBPQkpF Q1RfVFJJR0dFUjoKKwkJCXJldHVybiAiVFJJR0dFUiI7CisJCWNhc2UgT0JKRUNUX1RTQ09ORklH VVJBVElPTjoKKwkJCXJldHVybiAiVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiI7CisJCS8qCisJ CWNhc2UgT0JKRUNUX1RTQ09ORklHX01BUFBJTkc6CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIENP TkZJR1VSQVRJT04gTUFQUElORyI7CisJCSovCisJCWNhc2UgT0JKRUNUX1RTRElDVElPTkFSWToK KwkJCXJldHVybiAiVEVYVCBTRUFSQ0ggRElDVElPTkFSWSI7CisJCWNhc2UgT0JKRUNUX1RTUEFS U0VSOgorCQkJcmV0dXJuICJURVhUIFNFQVJDSCBQQVJTRVIiOworCQljYXNlIE9CSkVDVF9UU1RF TVBMQVRFOgorCQkJcmV0dXJuICJURVhUIFNFQVJDSCBURU1QTEFURSI7CisJCWNhc2UgT0JKRUNU X1RZUEU6CisJCQlyZXR1cm4gIlRZUEUiOworCQljYXNlIE9CSkVDVF9VU0VSX01BUFBJTkc6CisJ CQlyZXR1cm4gIlVTRVIgTUFQUElORyI7CisJCWNhc2UgT0JKRUNUX1ZJRVc6CisJCQlyZXR1cm4g IlZJRVciOworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb2JqZWN0 IHR5cGUgJWQiLCBvYmp0eXBlKTsKKwl9Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgUmVuYW1lU3Rt dC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9SZW5hbWVTdG10KE9iamVjdEFkZHJl c3MgYWRkcmVzcywgTm9kZSAqcGFyc2V0cmVlKQoreworCVJlbmFtZVN0bXQgKm5vZGUgPSAoUmVu YW1lU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqcmVuYW1lU3RtdDsKKwljaGFyCSAg ICpmbXRzdHI7CisJY29uc3QgY2hhciAqb2JqdHlwZTsKKwlSZWxhdGlvbglyZWxhdGlvbjsKKwlP aWQJCQlzY2hlbWFJZDsKKworCS8qCisJICogSW4gYSBBTFRFUiAuLiBSRU5BTUUgY29tbWFuZCwg d2UgZG9uJ3QgaGF2ZSB0aGUgb3JpZ2luYWwgbmFtZSBvZiB0aGUKKwkgKiBvYmplY3QgaW4gc3lz dGVtIGNhdGFsb2dzOiBzaW5jZSB3ZSBpbnNwZWN0IHRoZW0gYWZ0ZXIgdGhlIGNvbW1hbmQgaGFz CisJICogZXhlY3V0ZWQsIHRoZSBvbGQgbmFtZSBpcyBhbHJlYWR5IGdvbmUuICBUaGVyZWZvcmUs IHdlIGV4dHJhY3QgaXQgZnJvbQorCSAqIHRoZSBwYXJzZSBub2RlLiAgTm90ZSB3ZSBzdGlsbCBl eHRyYWN0IHRoZSBzY2hlbWEgbmFtZSBmcm9tIHRoZSBjYXRhbG9nCisJICogKGl0IG1pZ2h0IG5v dCBiZSBwcmVzZW50IGluIHRoZSBwYXJzZSBub2RlKTsgaXQgY2Fubm90IHBvc3NpYmx5IGhhdmUK KwkgKiBjaGFuZ2VkIGFueXdheS4KKwkgKi8KKwlzd2l0Y2ggKG5vZGUtPnJlbmFtZVR5cGUpCisJ eworCQljYXNlIE9CSkVDVF9UQUJMRToKKwkJY2FzZSBPQkpFQ1RfSU5ERVg6CisJCWNhc2UgT0JK RUNUX1NFUVVFTkNFOgorCisJCQkvKgorCQkJICogVmVyYm9zZSBzeW50YXgKKwkJCSAqCisJCQkg KiBBTFRFUiAlcyAle2lmX2V4aXN0c31zICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1l fUkKKwkJCSAqLworCQkJb2JqdHlwZSA9IHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5 cGUpOworCQkJZm10c3RyID0gcHNwcmludGYoIkFMVEVSICVzIiwgb2JqdHlwZSk7CisJCQlyZWxh dGlvbiA9IHJlbGF0aW9uX29wZW4oYWRkcmVzcy5vYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsK KwkJCXNjaGVtYUlkID0gUmVsYXRpb25HZXROYW1lc3BhY2UocmVsYXRpb24pOworCQkJcmVuYW1l U3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0ciwgMCk7CisJCQlhcHBlbmRfc3RyaW5nX29iamVj dChyZW5hbWVTdG10LCAiJXtpZl9leGlzdHN9cyIsCisJCQkJCQkJCSBub2RlLT5taXNzaW5nX29r ID8gIklGIEVYSVNUUyIgOiAiIik7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZW5hbWVTdG10 LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShzY2hl bWFJZCwKKwkJCQkJCQkJCQkJCQkJICBub2RlLT5yZWxhdGlvbi0+cmVsbmFtZSkpOworCQkJYXBw ZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwgIlJFTkFNRSBUTyAle25ld25hbWV9SSIsCisJ CQkJCQkJCSBub2RlLT5uZXduYW1lKTsKKwkJCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nl c3NTaGFyZUxvY2spOworCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfQVRUUklCVVRFOgorCQlj YXNlIE9CSkVDVF9DT0xVTU46CisJCQlyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4oYWRkcmVzcy5v YmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCXNjaGVtYUlkID0gUmVsYXRpb25HZXROYW1l c3BhY2UocmVsYXRpb24pOworCisJCQkvKgorCQkJICogVmVyYm9zZSBzeW50YXgKKwkJCSAqCisJ CQkgKiBDb21wb3NpdGUgdHlwZXM6IEFMVEVSIG9ianR5cGUgJXtpZGVudGl0eX1EIFJFTkFNRSBB VFRSSUJVVEUKKwkJCSAqICV7Y29sbmFtZX1JIFRPICV7bmV3bmFtZX1JICV7Y2FzY2FkZX1zCisJ CQkgKgorCQkJICogTm9ybWFsIHR5cGVzOiBBTFRFUiBvYmp0eXBlICV7aWZfZXhpc3RzfXMgJSV7 aWRlbnRpdHl9RCBSRU5BTUUKKwkJCSAqIENPTFVNTiAle2NvbG5hbWV9SSBUTyAle25ld25hbWV9 SQorCQkJICovCisJCQlvYmp0eXBlID0gc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlw ZSk7CisJCQlmbXRzdHIgPSBwc3ByaW50ZigiQUxURVIgJXMiLCBvYmp0eXBlKTsKKwkJCXJlbmFt ZVN0bXQgPSBuZXdfb2JqdHJlZShmbXRzdHIpOworCisJCQkvKiBDb21wb3NpdGUgdHlwZXMgZG8g bm90IHN1cHBvcnQgSUYgRVhJU1RTICovCisJCQlpZiAobm9kZS0+cmVuYW1lVHlwZSA9PSBPQkpF Q1RfQ09MVU1OKQorCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQsICIle2lmX2V4 aXN0c31zIiwKKwkJCQkJCQkJCSBub2RlLT5taXNzaW5nX29rID8gIklGIEVYSVNUUyIgOiAiIik7 CisKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJlbmFtZVN0bXQsICIle2lkZW50aXR5fUQiLAor CQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHNjaGVtYUlkLAorCQkJCQkJCQkJCQkJ CQkgIG5vZGUtPnJlbGF0aW9uLT5yZWxuYW1lKSk7CisKKwkJCWZtdHN0ciA9IHBzcHJpbnRmKCJS RU5BTUUgJXMgJSV7Y29sbmFtZX1JIiwgb2JqdHlwZSk7CisKKwkJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHJlbmFtZVN0bXQsIGZtdHN0ciwgbm9kZS0+c3VibmFtZSk7CisJCQlhcHBlbmRfc3RyaW5n X29iamVjdChyZW5hbWVTdG10LCAiVE8gJXtuZXduYW1lfUkiLCBub2RlLT5uZXduYW1lKTsKKwor CQkJaWYgKG5vZGUtPnJlbmFtZVR5cGUgPT0gT0JKRUNUX0FUVFJJQlVURSkKKwkJCQlhcHBlbmRf b2JqZWN0X29iamVjdChyZW5hbWVTdG10LCAiJXtjYXNjYWRlfXMiLAorCQkJCQkJCQkJIG5ld19v Ymp0cmVlX1ZBKCJDQVNDQURFIiwgMSwKKwkJCQkJCQkJCQkJCQkicHJlc2VudCIsIE9ialR5cGVC b29sLAorCQkJCQkJCQkJCQkJCW5vZGUtPmJlaGF2aW9yID09IERST1BfQ0FTQ0FERSkpOworCisJ CQlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQkJYnJlYWs7 CisJCWNhc2UgT0JKRUNUX1NDSEVNQToKKwkJCXJlbmFtZVN0bXQgPQorCQkJCW5ld19vYmp0cmVl X1ZBKCJBTFRFUiBTQ0hFTUEgJXtpZGVudGl0eX1JIFJFTkFNRSBUTyAle25ld25hbWV9SSIsCisJ CQkJCQkJICAgMSwKKwkJCQkJCQkgICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5z dWJuYW1lLAorCQkJCQkJCSAgICJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFt ZSk7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfVFJJR0dFUjoKKwkJCXsKKwkJCQlIZWFwVHVw bGUJdHJpZ1R1cDsKKwkJCQlGb3JtX3BnX3RyaWdnZXIgdHJpZ0Zvcm07CisJCQkJUmVsYXRpb24J cGdfdHJpZ2dlcjsKKworCQkJCXBnX3RyaWdnZXIgPSByZWxhdGlvbl9vcGVuKFRyaWdnZXJSZWxh dGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCXRyaWdUdXAgPSBnZXRfY2F0YWxvZ19vYmpl Y3RfYnlfb2lkKHBnX3RyaWdnZXIsIGdldF9vYmplY3RfYXR0bnVtX29pZChhZGRyZXNzLmNsYXNz SWQpLCBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQl0cmlnRm9ybSA9IChGb3JtX3BnX3RyaWdnZXIp IEdFVFNUUlVDVCh0cmlnVHVwKTsKKworCQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9WQSgi QUxURVIgVFJJR0dFUiAle3RyaWdnZXJuYW1lfUkgT04gJXtpZGVudGl0eX1EIFJFTkFNRSBUTyAl e25ld25hbWV9SSIsCisJCQkJCQkJCQkJCTMsCisJCQkJCQkJCQkJCSJ0cmlnZ2VybmFtZSIsIE9i alR5cGVTdHJpbmcsIG5vZGUtPnN1Ym5hbWUsCisJCQkJCQkJCQkJCSJpZGVudGl0eSIsIE9ialR5 cGVPYmplY3QsCisJCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlv blJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJCQl0cmlnRm9ybS0+dGdyZWxpZCksCisJCQkJ CQkJCQkJCSJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisKKwkJCQly ZWxhdGlvbl9jbG9zZShwZ190cmlnZ2VyLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJfQorCQkJYnJl YWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb2JqZWN0IHR5cGUg JWQiLCBub2RlLT5yZW5hbWVUeXBlKTsKKwl9CisKKwlyZXR1cm4gcmVuYW1lU3RtdDsKK30KKwor LyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIENBQ0hFIG9wdGlvbi4KKyAqLworc3RhdGljIGlu bGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX0NhY2hlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9w Z19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUJICAgKmNh Y2hlOworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwl0bXBzdHIgPSBwc3By aW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcWNhY2hlKTsKKworCWlmIChhbHRlcl90YWJs ZSkKKwkJZm10ID0gIlNFVCBDQUNIRSAle3ZhbHVlfXMiOworCWVsc2UKKwkJZm10ID0gIkNBQ0hF ICV7dmFsdWV9cyI7CisKKwljYWNoZSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAg ImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjYWNoZSIsCisJCQkJCQkgICJ2YWx1ZSIsIE9ialR5 cGVTdHJpbmcsIHRtcHN0cik7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QoY2FjaGUpOwor fQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgQ1lDTEUgb3B0aW9uLgorICovCitzdGF0 aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfQ3ljbGUoT2JqVHJlZSAqcGFyZW50LCBG b3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZQkg ICAqY3ljbGU7CisJY2hhcgkgICAqZm10OworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAi U0VUICV7bm99cyBDWUNMRSI7CisJZWxzZQorCQlmbXQgPSAiJXtub31zIENZQ0xFIjsKKworCWN5 Y2xlID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJICAgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJjeWNsZSIsCisJCQkJCQkgICAibm8iLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICAg c2VxZGF0YS0+c2VxY3ljbGUgPyAiIiA6ICJOTyIpOworCXJldHVybiBuZXdfb2JqZWN0X29iamVj dChjeWNsZSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBJTkNSRU1FTlQgQlkg b3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfSW5jcmVt ZW50QnkoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0 ZXJfdGFibGUpCit7CisJT2JqVHJlZQkgICAqaW5jcmVtZW50YWxieTsKKwljaGFyCSAgICp0bXBz dHI7CisJY2hhcgkgICAqZm10OworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAiU0VUIElO Q1JFTUVOVCBCWSAle3ZhbHVlfXMiOworCWVsc2UKKwkJZm10ID0gIklOQ1JFTUVOVCBCWSAle3Zh bHVlfXMiOworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFp bmNyZW1lbnQpOworCWluY3JlbWVudGFsYnkgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJ CQkJCSAgICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic2VxaW5jcmVtZW50IiwKKwkJCQkJCQkJ ICAgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKwlyZXR1cm4gbmV3X29iamVjdF9v YmplY3QoaW5jcmVtZW50YWxieSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBN SU5WQUxVRSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1Nl cV9NaW52YWx1ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9v bCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlCSAgICptaW52YWx1ZTsKKwljaGFyCSAgICp0bXBz dHI7CisJY2hhcgkgICAqZm10OworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAiU0VUIE1J TlZBTFVFICV7dmFsdWV9cyI7CisJZWxzZQorCQlmbXQgPSAiTUlOVkFMVUUgJXt2YWx1ZX1zIjsK KworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2VxbWluKTsKKwlt aW52YWx1ZSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCQkgICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAibWludmFsdWUiLAorCQkJCQkJCSAgInZhbHVlIiwgT2JqVHlwZVN0cmluZywg dG1wc3RyKTsKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QobWludmFsdWUpOworfQorCisvKgor ICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgTUFYVkFMVUUgb3B0aW9uLgorICovCitzdGF0aWMgaW5s aW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfTWF4dmFsdWUoT2JqVHJlZSAqcGFyZW50LCBGb3Jt X3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZQkgICAq bWF4dmFsdWU7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWlmIChhbHRl cl90YWJsZSkKKwkJZm10ID0gIlNFVCBNQVhWQUxVRSAle3ZhbHVlfXMiOworCWVsc2UKKwkJZm10 ID0gIk1BWFZBTFVFICV7dmFsdWV9cyI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JN QVQsIHNlcWRhdGEtPnNlcW1heCk7CisJbWF4dmFsdWUgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIs CisJCQkJCQkJICAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm1heHZhbHVlIiwKKwkJCQkJCQkg ICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisJcmV0dXJuIG5ld19vYmplY3Rfb2Jq ZWN0KG1heHZhbHVlKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIFNUQVJUIFdJ VEggb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfU3Rh cnR3aXRoKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFs dGVyX3RhYmxlKQoreworCU9ialRyZWUJICAgKnN0YXJ0d2l0aDsKKwljaGFyCSAgICp0bXBzdHI7 CisJY2hhcgkgICAqZm10OworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAiU0VUIFNUQVJU IFdJVEggJXt2YWx1ZX1zIjsKKwllbHNlCisJCWZtdCA9ICJTVEFSVCBXSVRIICV7dmFsdWV9cyI7 CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcXN0YXJ0KTsK KwlzdGFydHdpdGggPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkJICAgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJzdGFydCIsCisJCQkJCQkJICAgInZhbHVlIiwgT2JqVHlwZVN0cmlu ZywgdG1wc3RyKTsKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3Qoc3RhcnR3aXRoKTsKK30KKwor LyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIFJFU1RBUlQgb3B0aW9uLgorICovCitzdGF0aWMg aW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfUmVzdGFydChPYmpUcmVlICpwYXJlbnQsIEZv cm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhKQoreworCU9ialRyZWUJICAgKnJlc3RhcnQ7CisJ Y2hhcgkgICAqdG1wc3RyOworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFk YXRhLT5sYXN0X3ZhbHVlKTsKKwlyZXN0YXJ0ID0gbmV3X29ianRyZWVfVkEoIlJFU1RBUlQgJXt2 YWx1ZX1zIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJyZXN0YXJ0IiwK KwkJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKwlyZXR1cm4gbmV3X29i amVjdF9vYmplY3QocmVzdGFydCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlU2NoZW1h U3RtdC4KKyAqCisgKiBHaXZlbiBhIHNjaGVtYSBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBj cmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlv biBjb21tYW5kLgorICoKKyAqIE5vdGUgd2UgZG9uJ3Qgb3V0cHV0IHRoZSBzY2hlbWEgZWxlbWVu dHMgZ2l2ZW4gaW4gdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKiBUaGV5IG11c3QgYmUgb3V0cHV0 IHNlcGFyYXRlbHkuCSAoSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sCisgKiBDcmVhdGVT Y2hlbWFDb21tYW5kIHBhc3NlcyB0aGVtIGJhY2sgdG8gUHJvY2Vzc1V0aWxpdHksIHdoaWNoIHdp bGwgbGVhZCB0bworICogdGhpcyBmaWxlIGlmIGFwcHJvcHJpYXRlLikKKyAqLworc3RhdGljIE9i alRyZWUgKgorZGVwYXJzZV9DcmVhdGVTY2hlbWFTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFy c2V0cmVlKQoreworCUNyZWF0ZVNjaGVtYVN0bXQgKm5vZGUgPSAoQ3JlYXRlU2NoZW1hU3RtdCAq KSBwYXJzZXRyZWU7CisJT2JqVHJlZQkJCSAqY3JlYXRlU2NoZW1hOworCU9ialRyZWUJCQkgKmF1 dGg7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgU0NIRU1BICV7 aWZfbm90X2V4aXN0c31zICV7bmFtZX1JICV7YXV0aG9yaXphdGlvbn1zCisJICovCisJY3JlYXRl U2NoZW1hID0gbmV3X29ianRyZWUoIkNSRUFURSBTQ0hFTUEiKTsKKworCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGNyZWF0ZVNjaGVtYSwgIiV7aWZfbm90X2V4aXN0c31zIiwKKwkJCQkJCSBub2RlLT5p Zl9ub3RfZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIpOworCisJYXBwZW5kX3N0cmluZ19v YmplY3QoY3JlYXRlU2NoZW1hLCAiJXtuYW1lfUkiLCBub2RlLT5zY2hlbWFuYW1lKTsKKworCWF1 dGggPSBuZXdfb2JqdHJlZSgiQVVUSE9SSVpBVElPTiIpOworCWlmIChub2RlLT5hdXRocm9sZSkK KwkJYXBwZW5kX3N0cmluZ19vYmplY3QoYXV0aCwgIiV7YXV0aG9yaXphdGlvbl9yb2xlfUkiLAor CQkJCQkJCSBnZXRfcm9sZXNwZWNfbmFtZShub2RlLT5hdXRocm9sZSkpOworCWVsc2UKKwl7CisJ CWFwcGVuZF9udWxsX29iamVjdChhdXRoLCAiJXthdXRob3JpemF0aW9uX3JvbGV9SSAiKTsKKwkJ YXBwZW5kX2Jvb2xfb2JqZWN0KGF1dGgsICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlhcHBlbmRf b2JqZWN0X29iamVjdChjcmVhdGVTY2hlbWEsICIle2F1dGhvcml6YXRpb259cyIsIGF1dGgpOwor CisJcmV0dXJuIGNyZWF0ZVNjaGVtYTsKK30KKworc3RhdGljIE9iakVsZW0gKgorZGVwYXJzZV9T ZXFfT3duZWRCeShPYmpUcmVlICpwYXJlbnQsIE9pZCBzZXF1ZW5jZUlkLCBib29sIGFsdGVyX3Rh YmxlKQoreworCU9ialRyZWUJICAgKm93bmVkYnkgPSBOVUxMOworCVJlbGF0aW9uCWRlcFJlbDsK KwlTeXNTY2FuRGVzYyBzY2FuOworCVNjYW5LZXlEYXRhIGtleXNbM107CisJSGVhcFR1cGxlICAg dHVwbGU7CisKKwlkZXBSZWwgPSB0YWJsZV9vcGVuKERlcGVuZFJlbGF0aW9uSWQsIEFjY2Vzc1No YXJlTG9jayk7CisJU2NhbktleUluaXQoJmtleXNbMF0sCisJCQkJQW51bV9wZ19kZXBlbmRfY2xh c3NpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRH ZXREYXR1bShSZWxhdGlvblJlbGF0aW9uSWQpKTsKKwlTY2FuS2V5SW5pdCgma2V5c1sxXSwKKwkJ CQlBbnVtX3BnX2RlcGVuZF9vYmppZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lE RVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShzZXF1ZW5jZUlkKSk7CisJU2NhbktleUluaXQoJmtl eXNbMl0sCisJCQkJQW51bV9wZ19kZXBlbmRfb2Jqc3ViaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5 TnVtYmVyLCBGX0lOVDRFUSwKKwkJCQlJbnQzMkdldERhdHVtKDApKTsKKworCXNjYW4gPSBzeXN0 YWJsZV9iZWdpbnNjYW4oZGVwUmVsLCBEZXBlbmREZXBlbmRlckluZGV4SWQsIHRydWUsCisJCQkJ CQkJICBOVUxMLCAzLCBrZXlzKTsKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSA9IHN5 c3RhYmxlX2dldG5leHQoc2NhbikpKQorCXsKKwkJT2lkCQkgb3duZXJJZDsKKwkJRm9ybV9wZ19k ZXBlbmQgZGVwZm9ybTsKKwkJT2JqVHJlZQkqdG1wOworCQljaGFyCSAgICpjb2xuYW1lOworCisJ CWRlcGZvcm0gPSAoRm9ybV9wZ19kZXBlbmQpIEdFVFNUUlVDVCh0dXBsZSk7CisKKwkJLyogb25s eSBjb25zaWRlciBBVVRPIGRlcGVuZGVuY2llcyBvbiBwZ19jbGFzcyAqLworCQlpZiAoZGVwZm9y bS0+ZGVwdHlwZSAhPSBERVBFTkRFTkNZX0FVVE8pCisJCQljb250aW51ZTsKKwkJaWYgKGRlcGZv cm0tPnJlZmNsYXNzaWQgIT0gUmVsYXRpb25SZWxhdGlvbklkKQorCQkJY29udGludWU7CisJCWlm IChkZXBmb3JtLT5yZWZvYmpzdWJpZCA8PSAwKQorCQkJY29udGludWU7CisKKwkJb3duZXJJZCA9 IGRlcGZvcm0tPnJlZm9iamlkOworCQljb2xuYW1lID0gZ2V0X2F0dG5hbWUob3duZXJJZCwgZGVw Zm9ybS0+cmVmb2Jqc3ViaWQsIGZhbHNlKTsKKwkJaWYgKGNvbG5hbWUgPT0gTlVMTCkKKwkJCWNv bnRpbnVlOworCisJCXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJl bGF0aW9uSWQsIG93bmVySWQpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICJhdHRybmFt ZSIsIGNvbG5hbWUpOworCQlvd25lZGJ5ID0gbmV3X29ianRyZWVfVkEoIk9XTkVEIEJZICV7b3du ZXJ9RCIsCisJCQkJCQkJCSAyLAorCQkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJv d25lZCIsCisJCQkJCQkJCSAib3duZXIiLCBPYmpUeXBlT2JqZWN0LCB0bXApOworCX0KKworCXN5 c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJcmVsYXRpb25fY2xvc2UoZGVwUmVsLCBBY2Nlc3NTaGFy ZUxvY2spOworCisJLyoKKwkgKiBJZiB0aGVyZSdzIG5vIG93bmVyIGNvbHVtbiwgZW1pdCBhbiBl bXB0eSBPV05FRCBCWSBlbGVtZW50LCBzZXQgdXAgc28KKwkgKiB0aGF0IGl0IHdvbid0IHByaW50 IGFueXRoaW5nLgorCSAqLworCWlmICghb3duZWRieSkKKwkJLyogWFhYIHRoaXMgc2hvdWxkbid0 IGhhcHBlbiAuLi4gKi8KKwkJb3duZWRieSA9IG5ld19vYmp0cmVlX1ZBKCJPV05FRCBCWSAle293 bmVyfUQiLAorCQkJCQkJCQkgMywKKwkJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi b3duZWQiLAorCQkJCQkJCQkgIm93bmVyIiwgT2JqVHlwZU51bGwsCisJCQkJCQkJCSAicHJlc2Vu dCIsIE9ialR5cGVCb29sLCBmYWxzZSk7CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KG93bmVk YnkpOworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVNlcVN0bXQuCisgKgorICogR2l2ZW4g YSBzZXF1ZW5jZSBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGUgaXQsIHJldHVybiBh biBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlU2VxU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUg KnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlCSpjcmVhdGVTZXE7CisJT2JqVHJlZQkqdG1wOworCVJl bGF0aW9uCXJlbGF0aW9uOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhOworCUxpc3QJ ICAgKmVsZW1zID0gTklMOworCUZvcm1fcGdfc2VxdWVuY2Ugc2VxZm9ybTsKKwlSZWxhdGlvbgly ZWw7CisJSGVhcFR1cGxlCXNlcXR1cGxlOworCUNyZWF0ZVNlcVN0bXQgKmNyZWF0ZVNlcVN0bXQg PSAoQ3JlYXRlU2VxU3RtdCAqKSBwYXJzZXRyZWU7CisKKwkvKgorCSAqIFNlcXVlbmNlIGZvciBJ REVOVElUWSBDT0xVTU4gb3V0cHV0IHNlcGFyYXRlbHkodmlhIENSRUFURSBUQUJMRSBvcgorCSAq IEFMVEVSIFRBQkxFKTsgcmV0dXJuIGVtcHR5IGhlcmUuCisJICovCisJaWYgKGNyZWF0ZVNlcVN0 bXQtPmZvcl9pZGVudGl0eSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzZXFkYXRhID0gZ2V0X3NlcXVl bmNlX3ZhbHVlcyhvYmplY3RJZCk7CisKKwlyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0 SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJcmVsID0gdGFibGVfb3BlbihTZXF1ZW5jZVJlbGF0aW9u SWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXNlcXR1cGxlID0gU2VhcmNoU3lzQ2FjaGVDb3B5MShT RVFSRUxJRCwKKwkJCQkJCQkJICAgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICgh SGVhcFR1cGxlSXNWYWxpZChzZXF0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAg ZmFpbGVkIGZvciBzZXF1ZW5jZSAldSIsCisJCQkgb2JqZWN0SWQpOworCisJc2VxZm9ybSA9IChG b3JtX3BnX3NlcXVlbmNlKSBHRVRTVFJVQ1Qoc2VxdHVwbGUpOworCisJLyoKKwkgKiBWZXJib3Nl IHN5bnRheAorCSAqCisJICogQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBTRVFVRU5DRSAle2lkZW50 aXR5fUQKKwkgKi8KKwljcmVhdGVTZXEgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7CisKKwlhcHBl bmRfc3RyaW5nX29iamVjdChjcmVhdGVTZXEsICIle3BlcnNpc3RlbmNlfXMiLAorCQkJCQkJIGdl dF9wZXJzaXN0ZW5jZV9zdHIocmVsYXRpb24tPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UpKTsKKwor CXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxuYW1l c3BhY2UsCisJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSk7CisJ YXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU2VxLCAiU0VRVUVOQ0UgJXtpZGVudGl0eX1EIiwg dG1wKTsKKworCS8qIGRlZmluaXRpb24gZWxlbWV0cyAqLworCWVsZW1zID0gbGFwcGVuZChlbGVt cywgZGVwYXJzZV9TZXFfQ2FjaGUoY3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1z ID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfQ3ljbGUoY3JlYXRlU2VxLCBzZXFmb3JtLCBm YWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfSW5jcmVtZW50Qnko Y3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVw YXJzZV9TZXFfTWludmFsdWUoY3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0g bGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWF4dmFsdWUoY3JlYXRlU2VxLCBzZXFmb3JtLCBm YWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfU3RhcnR3aXRoKGNy ZWF0ZVNlcSwgc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFy c2VfU2VxX1Jlc3RhcnQoY3JlYXRlU2VxLCBzZXFkYXRhKSk7CisJLyogd2UgcHVycG9zZWZ1bGx5 IGRvIG5vdCBlbWl0IE9XTkVEIEJZIGhlcmUgKi8KKworCWFwcGVuZF9hcnJheV9vYmplY3QoY3Jl YXRlU2VxLCAiJXtkZWZpbml0aW9uOiB9cyIsIGVsZW1zKTsKKworCXRhYmxlX2Nsb3NlKHJlbCwg Um93RXhjbHVzaXZlTG9jayk7CisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJl TG9jayk7CisKKwlyZXR1cm4gY3JlYXRlU2VxOworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRl clNlcVN0bXQuCisgKgorICogR2l2ZW4gYSBzZXF1ZW5jZSBPSUQgYW5kIGEgcGFyc2V0cmVlIHRo YXQgbW9kaWZpZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFs dGVyIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJTZXFTdG10 KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUJCSphbHRlclNlcTsK KwlPYmpUcmVlCQkqdG1wOworCVJlbGF0aW9uCSByZWxhdGlvbjsKKwlGb3JtX3BnX3NlcXVlbmNl X2RhdGEgc2VxZGF0YTsKKwlMaXN0CSAgICplbGVtcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxs OworCUZvcm1fcGdfc2VxdWVuY2Ugc2VxZm9ybTsKKwlSZWxhdGlvbglyZWw7CisJSGVhcFR1cGxl CXNlcXR1cGxlOworCUFsdGVyU2VxU3RtdCAqYWx0ZXJTZXFTdG10ID0gKEFsdGVyU2VxU3RtdCAq KSBwYXJzZXRyZWU7CisKKwkvKgorCSAqIFNlcXVlbmNlIGZvciBJREVOVElUWSBDT0xVTU4gb3V0 cHV0IHNlcGFyYXRlbHkodmlhIENSRUFURSBUQUJMRSBvcgorCSAqIEFMVEVSIFRBQkxFKTsgcmV0 dXJuIGVtcHR5IGhlcmUuCisJICovCisJaWYgKGFsdGVyU2VxU3RtdC0+Zm9yX2lkZW50aXR5KQor CQlyZXR1cm4gTlVMTDsKKworCXNlcWRhdGEgPSBnZXRfc2VxdWVuY2VfdmFsdWVzKG9iamVjdElk KTsKKworCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2Nr KTsKKwlyZWwgPSB0YWJsZV9vcGVuKFNlcXVlbmNlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9j ayk7CisJc2VxdHVwbGUgPSBTZWFyY2hTeXNDYWNoZUNvcHkxKFNFUVJFTElELAorCQkJCQkJCQkg ICBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHNl cXR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNlcXVlbmNl ICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlzZXFmb3JtID0gKEZvcm1fcGdfc2VxdWVuY2UpIEdF VFNUUlVDVChzZXF0dXBsZSk7CisKKwlhbHRlclNlcSA9IG5ld19vYmp0cmVlKCJBTFRFUiBTRVFV RU5DRSIpOworCisJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9y ZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVs YXRpb24pKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlclNlcSwgIiV7aWRlbnRpdHl9RCIs IHRtcCk7CisKKwlmb3JlYWNoKGNlbGwsICgoQWx0ZXJTZXFTdG10ICopIHBhcnNldHJlZSktPm9w dGlvbnMpCisJeworCQlEZWZFbGVtICplbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOwor CQlPYmpFbGVtICpuZXdlbG07CisKKwkJaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiY2FjaGUi KSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfQ2FjaGUoYWx0ZXJTZXEsIHNlcWZvcm0s IGZhbHNlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJjeWNsZSIpID09IDAp CisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9DeWNsZShhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2Up OworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImluY3JlbWVudCIpID09IDApCisJ CQluZXdlbG0gPSBkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShhbHRlclNlcSwgc2VxZm9ybSwgZmFs c2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgIm1pbnZhbHVlIikgPT0gMCkK KwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX01pbnZhbHVlKGFsdGVyU2VxLCBzZXFmb3JtLCBmYWxz ZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAibWF4dmFsdWUiKSA9PSAwKQor CQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfTWF4dmFsdWUoYWx0ZXJTZXEsIHNlcWZvcm0sIGZhbHNl KTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJzdGFydCIpID09IDApCisJCQlu ZXdlbG0gPSBkZXBhcnNlX1NlcV9TdGFydHdpdGgoYWx0ZXJTZXEsIHNlcWZvcm0sIGZhbHNlKTsK KwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJyZXN0YXJ0IikgPT0gMCkKKwkJCW5l d2VsbSA9IGRlcGFyc2VfU2VxX1Jlc3RhcnQoYWx0ZXJTZXEsIHNlcWRhdGEpOworCQllbHNlIGlm IChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgIm93bmVkX2J5IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRl cGFyc2VfU2VxX093bmVkQnkoYWx0ZXJTZXEsIG9iamVjdElkLCBmYWxzZSk7CisJCWVsc2UKKwkJ CWVsb2coRVJST1IsICJpbnZhbGlkIHNlcXVlbmNlIG9wdGlvbiAlcyIsIGVsZW0tPmRlZm5hbWUp OworCisJCWVsZW1zID0gbGFwcGVuZChlbGVtcywgbmV3ZWxtKTsKKwl9CisKKwlhcHBlbmRfYXJy YXlfb2JqZWN0KGFsdGVyU2VxLCAiJXtkZWZpbml0aW9uOiB9cyIsIGVsZW1zKTsKKworCXRhYmxl X2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24s IEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gYWx0ZXJTZXE7Cit9CisKKy8qCisgKiBEZXBh cnNlIGFsbCB0aGUgY29sbGVjdGVkIHN1YmNvbW1hbmRzIGFuZCByZXR1cm4gYW4gT2JqVHJlZSBy ZXByZXNlbnRpbmcgdGhlCisgKiBhbHRlciBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0FsdGVyVGFibGVTdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlPYmpU cmVlCSAgICphbHRlclRhYmxlU3RtdDsKKwlPYmpUcmVlCSAgICp0bXA7CisJT2JqVHJlZQkgICAq dG1wMjsKKwlMaXN0CSAgICpkcGNvbnRleHQ7CisJUmVsYXRpb24JcmVsOworCUxpc3QJICAgKnN1 YmNtZHMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwljaGFyCSAgICpmbXRzdHI7CisJY29u c3QgY2hhciAqcmVsdHlwZTsKKwlib29sCQlpc3R5cGUgPSBmYWxzZTsKKwlMaXN0CSAgICpleHBy cyA9IE5JTDsKKworCUFzc2VydChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVGFibGUpOworCisJcmVs ID0gcmVsYXRpb25fb3BlbihjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCwgQWNjZXNzU2hhcmVM b2NrKTsKKwlkcGNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRp b25OYW1lKHJlbCksCisJCQkJCQkJCQljbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCk7CisKKwlz d2l0Y2ggKHJlbC0+cmRfcmVsLT5yZWxraW5kKQorCXsKKwkJY2FzZSBSRUxLSU5EX1JFTEFUSU9O OgorCQljYXNlIFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEU6CisJCQlyZWx0eXBlID0gIlRBQkxF IjsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfSU5ERVg6CisJCWNhc2UgUkVMS0lORF9QQVJU SVRJT05FRF9JTkRFWDoKKwkJCXJlbHR5cGUgPSAiSU5ERVgiOworCQkJYnJlYWs7CisJCWNhc2Ug UkVMS0lORF9WSUVXOgorCQkJcmVsdHlwZSA9ICJWSUVXIjsKKwkJCWJyZWFrOworCQljYXNlIFJF TEtJTkRfQ09NUE9TSVRFX1RZUEU6CisJCQlyZWx0eXBlID0gIlRZUEUiOworCQkJaXN0eXBlID0g dHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfRk9SRUlHTl9UQUJMRToKKwkJCXJlbHR5 cGUgPSAiRk9SRUlHTiBUQUJMRSI7CisJCQlicmVhazsKKworCQkvKiBUT0RPIHN1cHBvcnQgZm9y IHBhcnRpdGlvbmVkIHRhYmxlICovCisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bmV4 cGVjdGVkIHJlbGtpbmQgJWQiLCByZWwtPnJkX3JlbC0+cmVsa2luZCk7CisJfQorCisJLyoKKwkg KiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQUxURVIgcmVsdHlwZSAle2lkZW50aXR5fUQgJXtz dWJjbWRzOiwgfXMKKwkgKi8KKwlmbXRzdHIgPSBwc3ByaW50ZigiQUxURVIgJXMiLCByZWx0eXBl KTsKKwlhbHRlclRhYmxlU3RtdCA9IG5ld19vYmp0cmVlKGZtdHN0cik7CisKKwl0bXAgPSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJ ICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7CisJYXBwZW5kX29iamVjdF9vYmplY3Qo YWx0ZXJUYWJsZVN0bXQsICIle2lkZW50aXR5fUQiLCB0bXApOworCisJZm9yZWFjaChjZWxsLCBj bWQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzKQorCXsKKwkJQ29sbGVjdGVkQVRTdWJjbWQgKnN1YiA9 IChDb2xsZWN0ZWRBVFN1YmNtZCAqKSBsZmlyc3QoY2VsbCk7CisJCUFsdGVyVGFibGVDbWQJKnN1 YmNtZCA9IChBbHRlclRhYmxlQ21kICopIHN1Yi0+cGFyc2V0cmVlOworCQlPYmpUcmVlCSAgICp0 cmVlOworCisJCUFzc2VydChJc0Eoc3ViY21kLCBBbHRlclRhYmxlQ21kKSk7CisKKwkJc3dpdGNo IChzdWJjbWQtPnN1YnR5cGUpCisJCXsKKwkJCWNhc2UgQVRfQWRkQ29sdW1uOgorCQkJY2FzZSBB VF9BZGRDb2x1bW5SZWN1cnNlOgorCQkJCS8qIFhYWCBuZWVkIHRvIHNldCB0aGUgInJlY3Vyc2Ui IGJpdCBzb21ld2hlcmU/ICovCisJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgQ29sdW1uRGVm KSk7CisJCQkJdHJlZSA9IGRlcGFyc2VfQ29sdW1uRGVmKHJlbCwgZHBjb250ZXh0LCBmYWxzZSwK KwkJCQkJCQkJCQkgKENvbHVtbkRlZiAqKSBzdWJjbWQtPmRlZiwgdHJ1ZSwgJmV4cHJzKTsKKwkJ CQlmbXRzdHIgPSBwc3ByaW50ZigiQUREICVzICUle2RlZmluaXRpb259cyIsCisJCQkJCQkJCSAg aXN0eXBlID8gIkFUVFJJQlVURSIgOiAiQ09MVU1OIik7CisJCQkJdG1wID0gbmV3X29ianRyZWVf VkEoZm10c3RyLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBjb2x1 bW4iLAorCQkJCQkJCQkJICJkZWZpbml0aW9uIiwgT2JqVHlwZU9iamVjdCwgdHJlZSk7CisJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJ YnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkSW5kZXhDb25zdHJhaW50OgorCQkJCXsKKwkJCQkJSW5k ZXhTdG10ICAqaXN0bXQ7CisJCQkJCVJlbGF0aW9uCWlkeDsKKwkJCQkJT2lkCQkJY29uc3RyT2lk ID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOworCisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYs IEluZGV4U3RtdCkpOworCQkJCQlpc3RtdCA9IChJbmRleFN0bXQgKikgc3ViY21kLT5kZWY7CisK KwkJCQkJQXNzZXJ0KGlzdG10LT5pc2NvbnN0cmFpbnQgJiYgaXN0bXQtPnVuaXF1ZSk7CisKKwkJ CQkJaWR4ID0gcmVsYXRpb25fb3Blbihpc3RtdC0+aW5kZXhPaWQsIEFjY2Vzc1NoYXJlTG9jayk7 CisKKwkJCQkJLyoKKwkJCQkJICogVmVyYm9zZSBzeW50YXgKKwkJCQkJICoKKwkJCQkJICogQURE IENPTlNUUkFJTlQgJXtuYW1lfUkgJXtjb25zdHJhaW50X3R5cGV9cyBVU0lORyBJTkRFWAorCQkJ CQkgKiAlaW5kZXhfbmFtZX1JICV7ZGVmZXJyYWJsZX1zICV7aW5pdF9kZWZlcnJlZH1zCisJCQkJ CSAqLworCQkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQUREIENPTlNUUkFJTlQgJXtuYW1lfUki LAorCQkJCQkJCQkJCSAyLAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQg Y29uc3RyYWludCB1c2luZyBpbmRleCIsCisJCQkJCQkJCQkJICJuYW1lIiwgT2JqVHlwZVN0cmlu ZywgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25zdHJPaWQpKTsKKworCQkJCQlhcHBlbmRfc3RyaW5n X29iamVjdCh0bXAsICIle2NvbnN0cmFpbnRfdHlwZX1zIiwgaXN0bXQtPmRlZmVycmFibGUgPwor CQkJCQkJCQkJCSAiREVGRVJSQUJMRSIgOiAiTk9UIERFRkVSUkFCTEUiKTsKKwkJCQkJYXBwZW5k X3N0cmluZ19vYmplY3QodG1wLCAiVVNJTkcgSU5ERVggJXtpbmRleF9uYW1lfUkiLAorCQkJCQkJ CQkJCSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpZHgpKTsKKwkJCQkJYXBwZW5kX3N0cmluZ19v YmplY3QodG1wLCAiJXtkZWZlcnJhYmxlfXMiLCBpc3RtdC0+ZGVmZXJyYWJsZSA/CisJCQkJCQkJ CQkJICJERUZFUlJBQkxFIiA6ICJOT1QgREVGRVJSQUJMRSIpOworCQkJCQlhcHBlbmRfc3RyaW5n X29iamVjdCh0bXAsICIle2luaXRfZGVmZXJyZWR9cyIsIGlzdG10LT5pbml0ZGVmZXJyZWQgPwor CQkJCQkJCQkJCSAiSU5JVElBTExZIERFRkVSUkVEIiA6ICJJTklUSUFMTFkgSU1NRURJQVRFIik7 CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisKKwkJCQkJcmVsYXRpb25fY2xvc2UoaWR4LCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCX0K KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9SZUFkZEluZGV4OgorCQkJY2FzZSBBVF9SZUFkZENv bnN0cmFpbnQ6CisJCQljYXNlIEFUX1JlQWRkQ29tbWVudDoKKwkJCWNhc2UgQVRfUmVwbGFjZVJl bE9wdGlvbnM6CisJCQkJLyogU3VidHlwZXMgdXNlZCBmb3IgaW50ZXJuYWwgb3BlcmF0aW9uczsg bm90aGluZyB0byBkbyBoZXJlICovCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkQ29sdW1u VG9WaWV3OgorCQkJCS8qIENSRUFURSBPUiBSRVBMQUNFIFZJRVcgLS0gbm90aGluZyB0byBkbyBo ZXJlICovCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQ29sdW1uRGVmYXVsdDoKKwkJCQlpZiAo c3ViY21kLT5kZWYgPT0gTlVMTCkKKwkJCQl7CisJCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJB TFRFUiBDT0xVTU4gJXtjb2x1bW59SSBEUk9QIERFRkFVTFQiLAorCQkJCQkJCQkJCSAyLAorCQkJ CQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGRlZmF1bHQiLAorCQkJCQkJCQkJ CSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQl9CisJCQkJZWxz ZQorCQkJCXsKKwkJCQkJTGlzdAkgICAqZHBjb250ZXh0OworCQkJCQlIZWFwVHVwbGUJYXR0cnR1 cDsKKwkJCQkJQXR0ck51bWJlcglhdHRubzsKKworCQkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgi QUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIERFRkFVTFQiLAorCQkJCQkJCQkJCSAyLAorCQkJ CQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgZGVmYXVsdCIsCisJCQkJCQkJCQkJ ICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJCQkJCWRwY29udGV4 dCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwKKwkJ CQkJCQkJCQkJCQlSZWxhdGlvbkdldFJlbGlkKHJlbCkpOworCQkJCQlhdHRydHVwID0gU2VhcmNo U3lzQ2FjaGVBdHROYW1lKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgc3ViY21kLT5uYW1lKTsKKwkJ CQkJYXR0bm8gPSAoKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRTVFJVQ1QoYXR0cnR1cCkpLT5hdHRu dW07CisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7ZGVmaW5pdGlvbn1zIiwKKwkJ CQkJCQkJCQkgUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KHJlbCwgYXR0bm8sIGRwY29udGV4dCwg TlVMTCkpOworCQkJCQlSZWxlYXNlU3lzQ2FjaGUoYXR0cnR1cCk7CisJCQkJfQorCisJCQkJc3Vi Y21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgQVRfRHJvcE5vdE51bGw6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEo IkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgTk9UIE5VTEwiLAorCQkJCQkJCQkJIDIsCisJ CQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBub3QgbnVsbCIsCisJCQkJCQkJ CQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfU2V0Tm90TnVsbDoKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIg Q09MVU1OICV7Y29sdW1ufUkgU0VUIE5PVCBOVUxMIiwKKwkJCQkJCQkJCSAyLAorCQkJCQkJCQkJ ICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBub3QgbnVsbCIsCisJCQkJCQkJCQkgImNvbHVt biIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug QVRfRHJvcEV4cHJlc3Npb246CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVN TiAle2NvbHVtbn1JIERST1AgRVhQUkVTU0lPTiIsCisJCQkJCQkJCQkgMiwKKwkJCQkJCQkJCSAi dHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGV4cHJlc3Npb24iLAorCQkJCQkJCQkJICJjb2x1 bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRtcCwgIiV7aWZfbm90X2V4aXN0c31zIiwKKwkJCQkJCQkJCSBzdWJjbWQtPm1pc3Npbmdf b2sgPyAiSUYgRVhJU1RTIjogIiIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldFN0YXRp c3RpY3M6CisJCQkJeworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJbnRlZ2VyKSk7CisJ CQkJCWlmIChzdWJjbWQtPm5hbWUpCisJCQkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIg Q09MVU1OICV7Y29sdW1ufUkgU0VUIFNUQVRJU1RJQ1MgJXtzdGF0aXN0aWNzfW4iLAorCQkJCQkJ CQkJCQkgMywKKwkJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBzdGF0aXN0 aWNzIiwKKwkJCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUs CisJCQkJCQkJCQkJCSAic3RhdGlzdGljcyIsIE9ialR5cGVJbnRlZ2VyLAorCQkJCQkJCQkJCQkg aW50VmFsKChJbnRlZ2VyICopIHN1YmNtZC0+ZGVmKSk7CisJCQkJCWVsc2UKKwkJCQkJCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59biBTRVQgU1RBVElTVElDUyAl e3N0YXRpc3RpY3N9biIsCisJCQkJCQkJCQkJCSAzLAorCQkJCQkJCQkJCQkgInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAic2V0IHN0YXRpc3RpY3MiLAorCQkJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5 cGVJbnRlZ2VyLCBzdWJjbWQtPm51bSwKKwkJCQkJCQkJCQkJICJzdGF0aXN0aWNzIiwgT2JqVHlw ZUludGVnZXIsCisJCQkJCQkJCQkJCSBpbnRWYWwoKEludGVnZXIgKikgc3ViY21kLT5kZWYpKTsK KwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldE9wdGlvbnM6CisJCQljYXNlIEFU X1Jlc2V0T3B0aW9uczoKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCgKKwkJCQkJCQkJCSAgZGVwYXJzZV9Db2x1bW5TZXRPcHRpb25zKHN1YmNtZCkpKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRTdG9yYWdlOgorCQkJCUFzc2VydChJc0Eoc3Vi Y21kLT5kZWYsIFN0cmluZykpOworCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xV TU4gJXtjb2x1bW59SSBTRVQgU1RPUkFHRSAle3N0b3JhZ2V9cyIsCisJCQkJCQkJCQkgMywKKwkJ CQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgc3RvcmFnZSIsCisJCQkJCQkJCQkg ImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCSAic3RvcmFn ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgc3RyVmFsKChTdHJpbmcgKikgc3ViY21kLT5k ZWYpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRDb21wcmVzc2lvbjoKKwkJCQlBc3Nl cnQoSXNBKHN1YmNtZC0+ZGVmLCBTdHJpbmcpKTsKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgi QUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIENPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0 aG9kfXMiLAorCQkJCQkJCQkJIDMsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi c2V0IGNvbXByZXNzaW9uIiwKKwkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3Vi Y21kLT5uYW1lLAorCQkJCQkJCQkJICJjb21wcmVzc2lvbl9tZXRob2QiLCBPYmpUeXBlU3RyaW5n LAorCQkJCQkJCQkJIHN0clZhbCgoU3RyaW5nICopIHN1YmNtZC0+ZGVmKSk7CisJCQkJc3ViY21k cyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfRHJvcENvbHVtblJlY3Vyc2U6CisJCQljYXNlIEFUX0Ryb3BDb2x1bW46 CisJCQkJZm10c3RyID0gcHNwcmludGYoIkRST1AgJXMgJSV7Y29sdW1ufUkiLAorCQkJCQkJCQkg IGlzdHlwZSA/ICJBVFRSSUJVVEUiIDogIkNPTFVNTiIpOworCQkJCXRtcCA9IG5ld19vYmp0cmVl X1ZBKGZtdHN0ciwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGNv bHVtbiIsCisJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7 CisJCQkJdG1wMiA9IG5ld19vYmp0cmVlX1ZBKCJDQVNDQURFIiwgMSwKKwkJCQkJCQkJCSAgInBy ZXNlbnQiLCBPYmpUeXBlQm9vbCwgc3ViY21kLT5iZWhhdmlvcik7CisJCQkJYXBwZW5kX29iamVj dF9vYmplY3QodG1wLCAiJXtjYXNjYWRlfXMiLCB0bXAyKTsKKworCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJCQlj YXNlIEFUX0FkZEluZGV4OgorCQkJCXsKKwkJCQkJT2lkCQkJaWR4T2lkID0gc3ViLT5hZGRyZXNz Lm9iamVjdElkOworCQkJCQlJbmRleFN0bXQgICppc3RtdDsKKwkJCQkJUmVsYXRpb24JaWR4Owor CQkJCQljb25zdCBjaGFyICppZHhuYW1lOworCQkJCQlPaWQJCQljb25zdHJPaWQ7CisKKwkJCQkJ QXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgSW5kZXhTdG10KSk7CisJCQkJCWlzdG10ID0gKEluZGV4 U3RtdCAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQlpZiAoIWlzdG10LT5pc2NvbnN0cmFpbnQpCisJ CQkJCQlicmVhazsKKworCQkJCQlpZHggPSByZWxhdGlvbl9vcGVuKGlkeE9pZCwgQWNjZXNzU2hh cmVMb2NrKTsKKwkJCQkJaWR4bmFtZSA9IFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGlkeCk7CisK KwkJCQkJY29uc3RyT2lkID0gZ2V0X3JlbGF0aW9uX2NvbnN0cmFpbnRfb2lkKAorCQkJCQkJY21k LT5kLmFsdGVyVGFibGUub2JqZWN0SWQsIGlkeG5hbWUsIGZhbHNlKTsKKworCQkJCQl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiQUREIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLAor CQkJCQkJCQkJCSAzLAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgY29u c3RyYWludCIsCisJCQkJCQkJCQkJICJuYW1lIiwgT2JqVHlwZVN0cmluZywgaWR4bmFtZSwKKwkJ CQkJCQkJCQkgImRlZmluaXRpb24iLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCSBwZ19nZXRf Y29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBsZShjb25zdHJPaWQpKTsKKwkJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkJCQkJcmVsYXRp b25fY2xvc2UoaWR4LCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJ Y2FzZSBBVF9BZGRDb25zdHJhaW50OgorCQkJY2FzZSBBVF9BZGRDb25zdHJhaW50UmVjdXJzZToK KwkJCQl7CisJCQkJCS8qIFhYWCBuZWVkIHRvIHNldCB0aGUgInJlY3Vyc2UiIGJpdCBzb21ld2hl cmU/ICovCisJCQkJCU9pZAkJCWNvbnN0ck9pZCA9IHN1Yi0+YWRkcmVzcy5vYmplY3RJZDsKKwkJ CQkJYm9vbAkJaXNudWxsOworCQkJCQlIZWFwVHVwbGUJdHVwOworCQkJCQlEYXR1bQkJdmFsOwor CQkJCQlDb25zdHJhaW50ICpjb25zdHI7CisKKwkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwg Q29uc3RyYWludCkpOworCQkJCQljb25zdHIgPSAgY2FzdE5vZGUoQ29uc3RyYWludCwgc3ViY21k LT5kZWYpOworCisJCQkJCWlmICghY29uc3RyLT5za2lwX3ZhbGlkYXRpb24pCisJCQkJCXsKKwkJ CQkJCXR1cCA9IFNlYXJjaFN5c0NhY2hlMShDT05TVFJPSUQsIE9iamVjdElkR2V0RGF0dW0oY29u c3RyT2lkKSk7CisKKwkJCQkJCWlmIChIZWFwVHVwbGVJc1ZhbGlkKHR1cCkpCisJCQkJCQl7CisJ CQkJCQkJY2hhcgkgICAqY29uYmluOworCisJCQkJCQkJLyogRmV0Y2ggY29uc3RyYWludCBleHBy ZXNzaW9uIGluIHBhcnNldHJlZSBmb3JtICovCisJCQkJCQkJdmFsID0gU3lzQ2FjaGVHZXRBdHRy KENPTlNUUk9JRCwgdHVwLAorCQkJCQkJCQkJCQkJICBBbnVtX3BnX2NvbnN0cmFpbnRfY29uYmlu LCAmaXNudWxsKTsKKworCQkJCQkJCWlmICghaXNudWxsKQorCQkJCQkJCXsKKwkJCQkJCQkJY29u YmluID0gVGV4dERhdHVtR2V0Q1N0cmluZyh2YWwpOworCQkJCQkJCQlleHBycyA9IGxhcHBlbmQo ZXhwcnMsIHN0cmluZ1RvTm9kZShjb25iaW4pKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlSZWxlYXNl U3lzQ2FjaGUodHVwKTsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCXRtcCA9IG5ld19vYmp0cmVl X1ZBKCJBREQgQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIsCisJCQkJCQkJCQkJ IDMsCisJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBjb25zdHJhaW50IiwK KwkJCQkJCQkJCQkgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBnZXRfY29uc3RyYWludF9uYW1lKGNv bnN0ck9pZCksCisJCQkJCQkJCQkJICJkZWZpbml0aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJ CQkJCQkgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoY29uc3RyT2lkKSk7CisJ CQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOwor CQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BbHRlckNvbnN0cmFpbnQ6CisJCQkJewor CQkJCQlPaWQJCWNvbnN0ck9pZCA9IHN1Yi0+YWRkcmVzcy5vYmplY3RJZDsKKwkJCQkJQ29uc3Ry YWludCAqYyA9IChDb25zdHJhaW50ICopIHN1YmNtZC0+ZGVmOworCisJCQkJCS8qIElmIG5vIGNv bnN0cmFpbnQgd2FzIGFsdGVyZWQsIHNpbGVudGx5IHNraXAgaXQgKi8KKwkJCQkJaWYgKCFPaWRJ c1ZhbGlkKGNvbnN0ck9pZCkpCisJCQkJCQlicmVhazsKKworCQkJCQlBc3NlcnQoSXNBKGMsIENv bnN0cmFpbnQpKTsKKwkJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTlNUUkFJTlQg JXtuYW1lfUkgJXtkZWZlcnJhYmxlfXMgJXtpbml0X2RlZmVycmVkfXMiLAorCQkJCQkJCQkJCSA0 LAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhbHRlciBjb25zdHJhaW50IiwK KwkJCQkJCQkJCQkgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBnZXRfY29uc3RyYWludF9uYW1lKGNv bnN0ck9pZCksCisJCQkJCQkJCQkJICJkZWZlcnJhYmxlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJ CQkJCQkgYy0+ZGVmZXJyYWJsZSA/ICJERUZFUlJBQkxFIiA6ICJOT1QgREVGRVJSQUJMRSIsCisJ CQkJCQkJCQkJICJpbml0X2RlZmVycmVkIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkgYy0+ aW5pdGRlZmVycmVkID8gIklOSVRJQUxMWSBERUZFUlJFRCIgOiAiSU5JVElBTExZIElNTUVESUFU RSIpOworCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9WYWxpZGF0ZUNvbnN0cmFp bnRSZWN1cnNlOgorCQkJY2FzZSBBVF9WYWxpZGF0ZUNvbnN0cmFpbnQ6CisJCQkJdG1wID0gbmV3 X29ianRyZWVfVkEoIlZBTElEQVRFIENPTlNUUkFJTlQgJXtjb25zdHJhaW50fUkiLAorCQkJCQkJ CQkJIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAidmFsaWRhdGUgY29uc3Ry YWludCIsCisJCQkJCQkJCQkgImNvbnN0cmFpbnQiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5h bWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BDb25zdHJhaW50UmVjdXJzZToKKwkJ CWNhc2UgQVRfRHJvcENvbnN0cmFpbnQ6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkRST1Ag Q09OU1RSQUlOVCAle2NvbnN0cmFpbnR9SSIsCisJCQkJCQkJCQkgMiwKKwkJCQkJCQkJCSAidHlw ZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJICJjb25zdHJh aW50IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9BbHRlckNvbHVtblR5cGU6CisJCQkJeworCQkJCQlUdXBsZURlc2MgdHVwZGVzYyA9IFJl bGF0aW9uR2V0RGVzY3IocmVsKTsKKwkJCQkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0OworCQkJCQlD b2x1bW5EZWYJICAgKmRlZjsKKworCQkJCQlhdHQgPSAmKHR1cGRlc2MtPmF0dHJzW3N1Yi0+YWRk cmVzcy5vYmplY3RTdWJJZCAtIDFdKTsKKwkJCQkJZGVmID0gKENvbHVtbkRlZiAqKSBzdWJjbWQt PmRlZjsKKwkJCQkJQXNzZXJ0KElzQShkZWYsIENvbHVtbkRlZikpOworCisJCQkJCS8qCisJCQkJ CSAqIFZlcmJvc2Ugc3ludGF4CisJCQkJCSAqCisJCQkJCSAqIENvbXBvc2l0ZSB0eXBlczogQUxU RVIgcmVsdHlwZSAle2NvbHVtbn1JIFNFVCBEQVRBIFRZUEUKKwkJCQkJICogJXtkYXRhdHlwZX1U ICV7Y29sbGF0aW9ufXMgQVRUUklCVVRFICV7Y2FzY2FkZX1zCisJCQkJCSAqCisJCQkJCSAqIE5v cm1hbCB0eXBlczogQUxURVIgcmVsdHlwZSAle2NvbHVtbn1JIFNFVCBEQVRBIFRZUEUKKwkJCQkJ ICogJXtkYXRhdHlwZX1UICV7Y29sbGF0aW9ufXMgQ09MVU1OICV7dXNpbmd9cworCQkJCQkgKi8K KwkJCQkJZm10c3RyID0gcHNwcmludGYoIkFMVEVSICVzICUle2NvbHVtbn1JIFNFVCBEQVRBIFRZ UEUiLAorCQkJCQkJCQkJICBpc3R5cGUgPyAiQVRUUklCVVRFIiA6ICJDT0xVTU4iKTsKKworCQkJ CQl0bXAgPSBuZXdfb2JqdHJlZV9WQShmbXRzdHIsIDIsCisJCQkJCQkJCQkJICJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgImFsdGVyIGNvbHVtbiB0eXBlIiwKKwkJCQkJCQkJCQkgImNvbHVtbiIsIE9i alR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJCS8qIEFkZCB0aGUgVFlQRSBjbGF1c2Ug Ki8KKwkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtkYXRhdHlwZX1UIiwKKwkJCQkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUoYXR0LT5hdHR0eXBpZCwKKwkJCQkJCQkJCQkJCQkJ CSAgYXR0LT5hdHR0eXBtb2QpKTsKKworCQkJCQkvKiBBZGQgYSBDT0xMQVRFIGNsYXVzZSwgaWYg bmVlZGVkICovCisJCQkJCXRtcDIgPSBuZXdfb2JqdHJlZSgiQ09MTEFURSIpOworCQkJCQlpZiAo T2lkSXNWYWxpZChhdHQtPmF0dGNvbGxhdGlvbikpCisJCQkJCXsKKwkJCQkJCU9ialRyZWUgKmNv bGxuYW1lOworCisJCQkJCQljb2xsbmFtZSA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChD b2xsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJICAgYXR0LT5hdHRjb2xsYXRpb24p OworCQkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wMiwgIiV7bmFtZX1EIiwgY29sbG5hbWUp OworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJCWFwcGVuZF9ib29sX29iamVjdCh0bXAyLCAicHJl c2VudCIsIGZhbHNlKTsKKwkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtjb2xsYXRp b259cyIsIHRtcDIpOworCisJCQkJCS8qIElmIG5vdCBhIGNvbXBvc2l0ZSB0eXBlLCBhZGQgdGhl IFVTSU5HIGNsYXVzZSAqLworCQkJCQlpZiAoIWlzdHlwZSkKKwkJCQkJeworCQkJCQkJLyoKKwkJ CQkJCSAqIElmIHRoZXJlJ3MgYSBVU0lORyBjbGF1c2UsIHRyYW5zZm9ybUFsdGVyVGFibGVTdG10 CisJCQkJCQkgKiByYW4gaXQgdGhyb3VnaCB0cmFuc2Zvcm1FeHByIGFuZCBzdG9yZWQgdGhlCisJ CQkJCQkgKiByZXN1bHRpbmcgbm9kZSBpbiBjb29rZWRfZGVmYXVsdCwgd2hpY2ggd2UgY2FuIHVz ZQorCQkJCQkJICogaGVyZS4KKwkJCQkJCSAqLworCQkJCQkJdG1wMiA9IG5ld19vYmp0cmVlKCJV U0lORyIpOworCQkJCQkJaWYgKGRlZi0+cmF3X2RlZmF1bHQpCisJCQkJCQl7CisJCQkJCQkJRGF0 dW0JZGVwYXJzZWQ7CisJCQkJCQkJY2hhciAgICpkZWZleHByOworCisJCQkJCQkJZXhwcnMgPSBs YXBwZW5kKGV4cHJzLCBkZWYtPmNvb2tlZF9kZWZhdWx0KTsKKwkJCQkJCQlkZWZleHByID0gbm9k ZVRvU3RyaW5nKGRlZi0+Y29va2VkX2RlZmF1bHQpOworCQkJCQkJCWRlcGFyc2VkID0gRGlyZWN0 RnVuY3Rpb25DYWxsMihwZ19nZXRfZXhwciwKKwkJCQkJCQkJCQkJCQkJICAgQ1N0cmluZ0dldFRl eHREYXR1bShkZWZleHByKSwKKwkJCQkJCQkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxpZChyZWwp KTsKKwkJCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAyLCAiJXtleHByZXNzaW9ufXMiLAor CQkJCQkJCQkJCQkJIFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQpKTsKKwkJCQkJCX0KKwkJ CQkJCWVsc2UKKwkJCQkJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wMiwgInByZXNlbnQiLCBmYWxz ZSk7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3VzaW5nfXMiLCB0bXAyKTsK KwkJCQkJfQorCisJCQkJCS8qIElmIGl0J3MgYSBjb21wb3NpdGUgdHlwZSwgYWRkIHRoZSBDQVND QURFIGNsYXVzZSAqLworCQkJCQlpZiAoaXN0eXBlKQorCQkJCQl7CisJCQkJCQl0bXAyID0gbmV3 X29ianRyZWUoIkNBU0NBREUiKTsKKwkJCQkJCWlmIChzdWJjbWQtPmJlaGF2aW9yICE9IERST1Bf Q0FTQ0FERSkKKwkJCQkJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wMiwgInByZXNlbnQiLCBmYWxz ZSk7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle2Nhc2NhZGV9cyIsIHRtcDIp OworCQkJCQl9CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisJCQkJfQorCQkJCWJyZWFrOworCisjaWZkZWYgVE9ET0xJU1QKKwkJCWNh c2UgQVRfQWx0ZXJDb2x1bW5HZW5lcmljT3B0aW9uczoKKwkJCQl0bXAgPSBkZXBhcnNlX0Zkd09w dGlvbnMoKExpc3QgKikgc3ViY21kLT5kZWYsCisJCQkJCQkJCQkJIHN1YmNtZC0+bmFtZSk7CisJ CQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJ CQkJYnJlYWs7CisjZW5kaWYKKwkJCWNhc2UgQVRfQ2hhbmdlT3duZXI6CisJCQkJdG1wID0gbmV3 X29ianRyZWVfVkEoIk9XTkVSIFRPICV7b3duZXJ9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAiY2hhbmdlIG93bmVyIiwKKwkJCQkJCQkJCSAib3duZXIiLCAgT2JqVHlw ZVN0cmluZywKKwkJCQkJCQkJCSBnZXRfcm9sZXNwZWNfbmFtZShzdWJjbWQtPm5ld293bmVyKSk7 CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQ2x1c3Rlck9uOgorCQkJCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJDTFVTVEVSIE9OICV7aW5kZXh9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAiY2x1c3RlciBvbiIsCisJCQkJCQkJCQkgImluZGV4IiwgT2JqVHlwZVN0cmlu Zywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wQ2x1c3RlcjoK KwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU0VUIFdJVEhPVVQgQ0xVU1RFUiIsIDEsCisJCQkJ CQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHdpdGhvdXQgY2x1c3RlciIpOworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJ CWJyZWFrOworCisJCQljYXNlIEFUX1NldExvZ2dlZDoKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiU0VUIExPR0dFRCIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0 IGxvZ2dlZCIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldFVuTG9nZ2VkOgorCQkJCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgVU5MT0dHRUQiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwg T2JqVHlwZVN0cmluZywgInNldCB1bmxvZ2dlZCIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1 YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X0Ryb3BPaWRzOgorCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgV0lUSE9VVCBPSURTIiwg MSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgd2l0aG91dCBvaWRzIik7 CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX1NldEFjY2Vzc01ldGhvZDoKKwkJCQl0bXAgPSBuZXdf b2JqdHJlZV9WQSgiU0VUIEFDQ0VTUyBNRVRIT0QgJXthY2Nlc3NfbWV0aG9kfUkiLCAyLAorCQkJ CQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBhY2Nlc3MgbWV0aG9kIiwKKwkJCQkJ CQkJCSAiYWNjZXNzX21ldGhvZCIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJ YnJlYWs7CisJCQljYXNlIEFUX1NldFRhYmxlU3BhY2U6CisJCQkJdG1wID0gbmV3X29ianRyZWVf VkEoIlNFVCBUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIs IE9ialR5cGVTdHJpbmcsICJzZXQgdGFibGVzcGFjZSIsCisJCQkJCQkJCQkgInRhYmxlc3BhY2Ui LCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1 YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X1NldFJlbE9wdGlvbnM6CisJCQljYXNlIEFUX1Jlc2V0UmVsT3B0aW9uczoKKwkJCQlzdWJjbWRz ID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCgKKwkJCQkJCQkJCSAgZGVwYXJz ZV9SZWxTZXRPcHRpb25zKHN1YmNtZCkpKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFi bGVUcmlnOgorCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgVFJJR0dFUiAle3RyaWdn ZXJ9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHRyaWdn ZXIiLAorCQkJCQkJCQkJICJ0cmlnZ2VyIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVBbHdheXNUcmlnOgorCQkJCXRtcCA9IG5l d19vYmp0cmVlX1ZBKCJFTkFCTEUgQUxXQVlTIFRSSUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJ CQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSBhbHdheXMgdHJpZ2dlciIsCisJ CQkJCQkJCQkgInRyaWdnZXIiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1 YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVJlcGxpY2FUcmlnOgorCQkJCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJFTkFCTEUgUkVQTElDQSBUUklHR0VSICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJ CSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgcmVwbGljYSB0cmlnZ2VyIiwKKwkJCQkJ CQkJCSAidHJpZ2dlciIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21k cyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfRGlzYWJsZVRyaWc6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkRJ U0FCTEUgVFJJR0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBl U3RyaW5nLCAiZGlzYWJsZSB0cmlnZ2VyIiwKKwkJCQkJCQkJCSAidHJpZ2dlciIsIE9ialR5cGVT dHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3 X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlVHJp Z0FsbDoKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFRSSUdHRVIgQUxMIiwgMSwK KwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgdHJpZ2dlciBhbGwiKTsK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlVHJpZ0FsbDoKKwkJCQl0bXAgPSBuZXdf b2JqdHJlZV9WQSgiRElTQUJMRSBUUklHR0VSIEFMTCIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAiZGlzYWJsZSB0cmlnZ2VyIGFsbCIpOworCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJCQlj YXNlIEFUX0VuYWJsZVRyaWdVc2VyOgorCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUg VFJJR0dFUiBVU0VSIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFi bGUgdHJpZ2dlciB1c2VyIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVRyaWdV c2VyOgorCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFRSSUdHRVIgVVNFUiIsIDEs CisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSB0cmlnZ2VyIHVzZXIi KTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVSdWxlOgorCQkJCXRtcCA9IG5ld19v Ymp0cmVlX1ZBKCJFTkFCTEUgUlVMRSAle3J1bGV9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAiZW5hYmxlIHJ1bGUiLAorCQkJCQkJCQkJICJydWxlIiwgT2JqVHlwZVN0 cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVBbHdh eXNSdWxlOgorCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgQUxXQVlTIFJVTEUgJXty dWxlfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSBhbHdh eXMgcnVsZSIsCisJCQkJCQkJCQkgInJ1bGUiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUp OworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkp OworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVJlcGxpY2FSdWxlOgorCQkJCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUkVQTElDQSBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJ CQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgcmVwbGljYSBydWxlIiwKKwkJCQkJ CQkJCSAicnVsZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfRGlzYWJsZVJ1bGU6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkRJU0FC TEUgUlVMRSAle3J1bGV9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi ZGlzYWJsZSBydWxlIiwKKwkJCQkJCQkJCSAicnVsZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+ bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkSW5oZXJpdDoKKwkJCQl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiSU5IRVJJVCAle3BhcmVudH1EIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIs IE9ialR5cGVTdHJpbmcsICJpbmhlcml0IiwKKwkJCQkJCQkJCSAicGFyZW50IiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQli cmVhazsKKworCQkJY2FzZSBBVF9Ecm9wSW5oZXJpdDoKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiTk8gSU5IRVJJVCAle3BhcmVudH1EIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVT dHJpbmcsICJkcm9wIGluaGVyaXQiLAorCQkJCQkJCQkJICJwYXJlbnQiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCQkJCQkJIHN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFr OworCisJCQljYXNlIEFUX0FkZE9mOgorCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJPRiAle3R5 cGVfb2Z9VCIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIG9mIiwK KwkJCQkJCQkJCSAidHlwZV9vZiIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3R5cGUoc3ViLT5hZGRyZXNzLm9iamVjdElkLCAtMSkpOworCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX0Ryb3BPZjoKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTk9UIE9GIiwgMSwK KwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJub3Qgb2YiKTsKKwkJCQlzdWJjbWRz ID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9SZXBsaWNhSWRlbnRpdHk6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEo IlJFUExJQ0EgSURFTlRJVFkiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywg InJlcGxpY2EgaWRlbnRpdHkiKTsKKwkJCQlzd2l0Y2ggKCgoUmVwbGljYUlkZW50aXR5U3RtdCAq KSBzdWJjbWQtPmRlZiktPmlkZW50aXR5X3R5cGUpCisJCQkJeworCQkJCQljYXNlIFJFUExJQ0Ff SURFTlRJVFlfREVGQVVMVDoKKwkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7aWRl bnR9cyIsICJERUZBVUxUIik7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBSRVBMSUNBX0lERU5U SVRZX0ZVTEw6CisJCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle2lkZW50fXMiLCAi RlVMTCIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgUkVQTElDQV9JREVOVElUWV9OT1RISU5H OgorCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtpZGVudH1zIiwgIk5PVEhJTkci KTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfSU5ERVg6CisJCQkJ CQl0bXAyID0gbmV3X29ianRyZWVfVkEoIlVTSU5HIElOREVYICV7aW5kZXh9SSIsIDEsCisJCQkJ CQkJCQkJCSAgImluZGV4IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJICAoKFJlcGxpY2FJ ZGVudGl0eVN0bXQgKikgc3ViY21kLT5kZWYpLT5uYW1lKTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHRtcCwgIiV7aWRlbnR9cyIsIHRtcDIpOworCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJ CWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVJvd1NlY3VyaXR5OgorCQkJCXRtcCA9IG5ld19v Ymp0cmVlX1ZBKCJFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZIiwgMSwKKwkJCQkJCQkJCSAidHlw ZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgcm93IHNlY3VyaXR5Iik7CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfRGlzYWJsZVJvd1NlY3VyaXR5OgorCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJESVNBQkxFIFJPVyBMRVZFTCBTRUNVUklUWSIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAiZGlzYWJsZSByb3cgc2VjdXJpdHkiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKyNpZmRlZiBU T0RPTElTVAorCQkJY2FzZSBBVF9HZW5lcmljT3B0aW9uczoKKwkJCQl0bXAgPSBkZXBhcnNlX0Zk d09wdGlvbnMoKExpc3QgKikgc3ViY21kLT5kZWYsIE5VTEwpOworCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworI2VuZGlm CisJCQljYXNlIEFUX0F0dGFjaFBhcnRpdGlvbjoKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgi QVRUQUNIIFBBUlRJVElPTiAle3BhcnRpdGlvbl9pZGVudGl0eX1EIiwKKwkJCQkJCQkJCSAyLAor CQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImF0dGFjaCBwYXJ0aXRpb24iLAorCQkJ CQkJCQkJICJwYXJ0aXRpb25faWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJCQkJIHN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCisJCQkJaWYgKHJlbC0+cmRfcmVsLT5y ZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJCQkJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHRtcCwgIiV7cGFydGl0aW9uX2JvdW5kfXMiLAorCQkJCQkJCQkJCSBSZWxhdGlvbkdl dFBhcnRpdGlvbkJvdW5kKHN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisJ CQljYXNlIEFUX0RldGFjaFBhcnRpdGlvbjoKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiREVU QUNIIFBBUlRJVElPTiAle3BhcnRpdGlvbl9pZGVudGl0eX1EIiwKKwkJCQkJCQkJCSAyLAorCQkJ CQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRldGFjaCBwYXJ0aXRpb24iLAorCQkJCQkJ CQkJICJwYXJ0aXRpb25faWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ CQkJIHN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9EZXRh Y2hQYXJ0aXRpb25GaW5hbGl6ZToKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiREVUQUNIIFBB UlRJVElPTiAle3BhcnRpdGlvbl9pZGVudGl0eX1EIEZJTkFMSVpFIiwKKwkJCQkJCQkJCSAyLAor CQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRldGFjaCBwYXJ0aXRpb24gZmluYWxp emUiLAorCQkJCQkJCQkJICJwYXJ0aXRpb25faWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJCQkJIHN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCQkJ Y2FzZSBBVF9BZGRJZGVudGl0eToKKwkJCQl7CisJCQkJCUF0dHJOdW1iZXIJYXR0bnVtOworCQkJ CQlPaWQJCQlzZXFfcmVsaWQ7CisJCQkJCU9ialRyZWUJKnNlcWRlZjsKKwkJCQkJQ29sdW1uRGVm ICAqY29sZGVmID0gKENvbHVtbkRlZiAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQl0bXAgPSBuZXdf b2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgQUREICV7aWRlbnRpdHlfY29sdW1u fXMiLAorCQkJCQkJCQkJCSAyLAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJh ZGQgaWRlbnRpdHkiLAorCQkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21k LT5uYW1lKTsKKworCQkJCQlhdHRudW0gPSBnZXRfYXR0bnVtKFJlbGF0aW9uR2V0UmVsaWQocmVs KSwgc3ViY21kLT5uYW1lKTsKKwkJCQkJc2VxX3JlbGlkID0gZ2V0SWRlbnRpdHlTZXF1ZW5jZShS ZWxhdGlvbkdldFJlbGlkKHJlbCksIGF0dG51bSwgdHJ1ZSk7CisJCQkJCXNlcWRlZiA9IGRlcGFy c2VfQ29sdW1uSWRlbnRpdHkoc2VxX3JlbGlkLCBjb2xkZWYtPmlkZW50aXR5LCBmYWxzZSk7CisK KwkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiaWRlbnRpdHlfY29sdW1uIiwgc2VxZGVm KTsKKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX1NldElkZW50aXR5OgorCQkJCXsK KwkJCQkJRGVmRWxlbQkqZGVmZWw7CisJCQkJCWNoYXIJCWlkZW50aXR5ID0gMDsKKwkJCQkJT2Jq VHJlZQkgICAqc2VxZGVmOworCQkJCQlBdHRyTnVtYmVyCWF0dG51bTsKKwkJCQkJT2lkCQkJc2Vx X3JlbGlkOworCisKKwkJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2Nv bHVtbn1JIiwKKwkJCQkJCQkJCQkgMiwKKwkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAic2V0IGlkZW50aXR5IiwKKwkJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1 YmNtZC0+bmFtZSk7CisKKwkJCQkJaWYgKHN1YmNtZC0+ZGVmKQorCQkJCQl7CisJCQkJCQlMaXN0 CSAgICpkZWYgPSAoTGlzdCAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQkJQXNzZXJ0KElzQShzdWJj bWQtPmRlZiwgTGlzdCkpOworCisJCQkJCQlkZWZlbCA9IGxpbml0aWFsX25vZGUoRGVmRWxlbSwg ZGVmKTsKKwkJCQkJCWlkZW50aXR5ID0gZGVmR2V0SW50MzIoZGVmZWwpOworCQkJCQl9CisKKwkJ CQkJYXR0bnVtID0gZ2V0X2F0dG51bShSZWxhdGlvbkdldFJlbGlkKHJlbCksIHN1YmNtZC0+bmFt ZSk7CisJCQkJCXNlcV9yZWxpZCA9IGdldElkZW50aXR5U2VxdWVuY2UoUmVsYXRpb25HZXRSZWxp ZChyZWwpLCBhdHRudW0sIHRydWUpOworCQkJCQlzZXFkZWYgPSBkZXBhcnNlX0NvbHVtbklkZW50 aXR5KHNlcV9yZWxpZCwgaWRlbnRpdHksIHRydWUpOworCisJCQkJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHRtcCwgIiV7ZGVmaW5pdGlvbn1zIiwgc2VxZGVmKTsKKworCQkJCQlzdWJjbWRzID0gbGFw cGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQkJYnJlYWs7CisJCQkJ fQorCQkJY2FzZSBBVF9Ecm9wSWRlbnRpdHk6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkFM VEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgSURFTlRJVFkiLAorCQkJCQkJCQkJIDIsCisJCQkJ CQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBpZGVudGl0eSIsCisJCQkJCQkJCQkg ImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQlhcHBlbmRfc3Ry aW5nX29iamVjdCh0bXAsICIle2lmX25vdF9leGlzdHN9cyIsCisJCQkJCQkJCQkgc3ViY21kLT5t aXNzaW5nX29rID8gIklGIEVYSVNUUyIgOiAiIik7CisKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6 CisJCQkJZWxvZyhXQVJOSU5HLCAidW5zdXBwb3J0ZWQgYWx0ZXIgdGFibGUgc3VidHlwZSAlZCIs CisJCQkJCSBzdWJjbWQtPnN1YnR5cGUpOworCQkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICog V2UgZG9uJ3Qgc3VwcG9ydCByZXBsaWNhdGluZyBBTFRFUiBUQUJMRSB3aGljaCBjb250YWlucyB2 b2xhdGlsZQorCQkgKiBmdW5jdGlvbnMgYmVjYXVzZSBJdCdzIHBvc3NpYmxlIHRoZSBmdW5jdGlv bnMgY29udGFpbiBEREwvRE1MIGluCisJCSAqIHdoaWNoIGNhc2UgdGhlc2Ugb3BlcnRpb25zIHdp bGwgYmUgZXhlY3V0ZWQgdHdpY2UgYW5kIGNhdXNlCisJCSAqIGR1cGxpY2F0ZSBkYXRhLiBJbiBh ZGRpdGlvbiwgd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRoZSB0YWJsZXMgYmVpbmcKKwkJICogYWNj ZXNzZWQgYnkgdGhlc2UgRERML0RNTCBhcmUgcHVibGlzaGVkIG9yIG5vdC4gU28gYmxpbmRseSBh bGxvd2luZworCQkgKiBzdWNoIGZ1bmN0aW9ucyBjYW4gYWxsb3cgdW5pbnRlbmRlZCBjbGF1c2Vz IGxpa2UgdGhlIHRhYmxlcyBhY2Nlc3NlZAorCQkgKiBpbiB0aG9zZSBmdW5jdGlvbnMgbWF5IG5v dCBldmVuIGV4aXN0IG9uIHRoZSBzdWJzY3JpYmVyLXNpZGUuCisJCSAqLworCQlpZiAoY29udGFp bl92b2xhdGlsZV9mdW5jdGlvbnMoKE5vZGUgKikgZXhwcnMpKQorCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkgZXJy bXNnKCJBTFRFUiBUQUJMRSBjb21tYW5kIHVzaW5nIHZvbGF0aWxlIGZ1bmN0aW9uIGNhbm5vdCBi ZSByZXBsaWNhdGVkIikpKTsKKworCQkvKgorCQkgKiBDbGVhbiB0aGUgbGlzdCBhcyB3ZSBhbHJl YWR5IGNvbmZpcm1lZCB0aGVyZSBpcyBubyB2b2xhdGlsZQorCQkgKiBmdW5jdGlvbi4KKwkJICov CisJCWxpc3RfZnJlZShleHBycyk7CisJCWV4cHJzID0gTklMOworCX0KKworCXRhYmxlX2Nsb3Nl KHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCWlmIChsaXN0X2xlbmd0aChzdWJjbWRzKSA9PSAw KQorCQlyZXR1cm4gTlVMTDsKKworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJUYWJsZVN0bXQs ICIle3N1YmNtZHM6LCB9cyIsIHN1YmNtZHMpOworCXJldHVybiBhbHRlclRhYmxlU3RtdDsKK30K KworLyoKKyAqIERlcGFyc2UgYSBDUkVBVEUgT1BFUkFUT1IgQ0xBU1MgY29tbWFuZC4KKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVPcENsYXNzU3RtdChDb2xsZWN0ZWRDb21t YW5kICpjbWQpCit7CisJT2lkCQkJb3Bjb2lkID0gY21kLT5kLmNyZWF0ZW9wYy5hZGRyZXNzLm9i amVjdElkOworCUhlYXBUdXBsZSAgIG9wY1R1cDsKKwlIZWFwVHVwbGUgICBvcGZUdXA7CisJRm9y bV9wZ19vcGZhbWlseSBvcGZGb3JtOworCUZvcm1fcGdfb3BjbGFzcyBvcGNGb3JtOworCU9ialRy ZWUJICAgKnN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCUxpc3QJICAgKmxpc3Q7CisJTGlzdENl bGwgICAqY2VsbDsKKworCW9wY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShDTEFPSUQsIE9iamVjdElk R2V0RGF0dW0ob3Bjb2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wY1R1cCkpCisJCWVs b2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGNsYXNzIHdpdGggT0lEICV1Iiwg b3Bjb2lkKTsKKwlvcGNGb3JtID0gKEZvcm1fcGdfb3BjbGFzcykgR0VUU1RSVUNUKG9wY1R1cCk7 CisKKwlvcGZUdXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQsIG9wY0Zvcm0tPm9wY2Zh bWlseSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wZlR1cCkpCisJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkgd2l0aCBPSUQgJXUiLCBvcGNG b3JtLT5vcGNmYW1pbHkpOworCW9wZkZvcm0gPSAoRm9ybV9wZ19vcGZhbWlseSkgR0VUU1RSVUNU KG9wZlR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgT1BF UkFUT1IgQ0xBU1MgJXtpZGVudGl0eX1EICV7ZGVmYXVsdH1zIEZPUiBUWVBFICV7dHlwZX1UIFVT SU5HCisJICogJXthbW5hbWV9SSAle29wZmFtaWx5fXMgQVMgJXtpdGVtczosIH1zCisJICovCisK KwlzdG10ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBPUEVSQVRPUiBDTEFTUyAle2lkZW50aXR5 fUQiLCAxLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWUob3BjRm9ybS0+b3BjbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJ ICAgTmFtZVN0cihvcGNGb3JtLT5vcGNuYW1lKSkpOworCisJLyogQWRkIHRoZSBERUZBVUxUIGNs YXVzZSAqLworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHN0bXQsICIle2RlZmF1bHR9cyIsCisJCQkJ CQkgb3BjRm9ybS0+b3BjZGVmYXVsdCA/ICJERUZBVUxUIiA6ICIiKTsKKworCS8qIEFkZCB0aGUg Rk9SIFRZUEUgY2xhdXNlICovCisJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIkZPUiBUWVBF ICV7dHlwZX1UIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcGNGb3JtLT5vcGNpbnR5 cGUsIC0xKSk7CisKKwkvKiBBZGQgdGhlIFVTSU5HIGNsYXVzZSAqLworCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHN0bXQsICJVU0lORyAle2FtbmFtZX1JIiwgZ2V0X2FtX25hbWUob3BjRm9ybS0+b3Bj bWV0aG9kKSk7CisKKwkvKgorCSAqIEFkZCB0aGUgRkFNSUxZIGNsYXVzZTsgYnV0IGlmIGl0IGhh cyB0aGUgc2FtZSBuYW1lIGFuZCBuYW1lc3BhY2UgYXMgdGhlCisJICogb3BjbGFzcywgdGhlbiBo YXZlIGl0IGV4cGFuZCB0byBlbXB0eSwgYmVjYXVzZSBpdCB3b3VsZCBjYXVzZSBhIGZhaWx1cmUK KwkgKiBpZiB0aGUgb3BmYW1pbHkgd2FzIGNyZWF0ZWQgaW50ZXJuYWxseS4KKwkgKi8KKwl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiRkFNSUxZICV7b3BmYW1pbHl9RCIsIDEsCisJCQkJCQkgIm9wZmFt aWx5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3Bm Rm9ybS0+b3BmbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKG9wZkZvcm0tPm9wZm5h bWUpKSk7CisKKwlpZiAoc3RyY21wKE5hbWVTdHIob3BmRm9ybS0+b3BmbmFtZSksIE5hbWVTdHIo b3BjRm9ybS0+b3BjbmFtZSkpID09IDAgJiYKKwkJb3BmRm9ybS0+b3BmbmFtZXNwYWNlID09IG9w Y0Zvcm0tPm9wY25hbWVzcGFjZSkKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQi LCBmYWxzZSk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiJXtvcGZhbWlseX1zIiwg IHRtcCk7CisKKwkvKgorCSAqIEFkZCB0aGUgaW5pdGlhbCBpdGVtIGxpc3QuICBOb3RlIHdlIGFs d2F5cyBhZGQgdGhlIFNUT1JBR0UgY2xhdXNlLCBldmVuCisJICogd2hlbiBpdCBpcyBpbXBsaWNp dCBpbiB0aGUgb3JpZ2luYWwgY29tbWFuZC4KKwkgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiU1RP UkFHRSIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7dHlwZX1UIiwKKwkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfdHlwZShvcGNGb3JtLT5vcGNrZXl0eXBlICE9IEludmFsaWRPaWQgPwor CQkJCQkJCQkJCQkgIG9wY0Zvcm0tPm9wY2tleXR5cGUgOiBvcGNGb3JtLT5vcGNpbnR5cGUsCisJ CQkJCQkJCQkJCSAgLTEpKTsKKwlsaXN0ID0gbGlzdF9tYWtlMShuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKworCS8qIEFkZCB0aGUgZGVjbGFyZWQgb3BlcmF0b3JzICovCisJZm9yZWFjaChjZWxs LCBjbWQtPmQuY3JlYXRlb3BjLm9wZXJhdG9ycykKKwl7CisJCU9wRmFtaWx5TWVtYmVyICpvcGVy ID0gbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlCSAgICp0bXA7CisKKwkJdG1wID0gbmV3X29ianRy ZWVfVkEoIk9QRVJBVE9SICV7bnVtfW4gJXtvcGVyYXRvcn1PKCV7bHR5cGV9VCwgJXtydHlwZX1U KSIsCisJCQkJCQkJIDQsCisJCQkJCQkJICJudW0iLCBPYmpUeXBlSW50ZWdlciwgb3Blci0+bnVt YmVyLAorCQkJCQkJCSAib3BlcmF0b3IiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkg b3Blci0+b2JqZWN0KSwKKwkJCQkJCQkibHR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCW5l d19vYmp0cmVlX2Zvcl90eXBlKG9wZXItPmxlZnR0eXBlLCAtMSksCisJCQkJCQkJInJ0eXBlIiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShvcGVyLT5yaWdodHR5 cGUsIC0xKSk7CisKKwkJLyogQWRkIHRoZSBGT1IgU0VBUkNIIC8gRk9SIE9SREVSIEJZIGNsYXVz ZSAqLworCQlpZiAob3Blci0+c29ydGZhbWlseSA9PSBJbnZhbGlkT2lkKQorCQkJYXBwZW5kX3N0 cmluZ19vYmplY3QodG1wLCAiJXtwdXJwb3NlfXMiLCAiRk9SIFNFQVJDSCIpOworCQllbHNlCisJ CXsKKwkJCU9ialRyZWUJICAgKnRtcDI7CisKKwkJCXRtcDIgPSBuZXdfb2JqdHJlZV9WQSgiRk9S IE9SREVSIEJZICV7b3BmYW1pbHl9RCIsIDApOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1w MiwgIm9wZmFtaWx5IiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVy YXRvckZhbWlseVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkgb3Blci0+c29ydGZhbWlseSkp OworCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwdXJwb3NlfXMiLCB0bXAyKTsKKwkJ fQorCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0K KworCS8qIEFkZCB0aGUgZGVjbGFyZWQgc3VwcG9ydCBmdW5jdGlvbnMgKi8KKwlmb3JlYWNoKGNl bGwsIGNtZC0+ZC5jcmVhdGVvcGMucHJvY2VkdXJlcykKKwl7CisJCU9wRmFtaWx5TWVtYmVyICpw cm9jID0gbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlCSAgICp0bXA7CisJCUhlYXBUdXBsZQlwcm9j VHVwOworCQlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07CisJCU9pZAkJICAgKnByb2FyZ3R5cGVzOwor CQlMaXN0CSAgICphcmdsaXN0OworCQlpbnQJCQlpOworCisJCXByb2NUdXAgPSBTZWFyY2hTeXND YWNoZTEoUFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1bShwcm9jLT5vYmplY3QpKTsKKwkJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBm YWlsZWQgZm9yIHByb2NlZHVyZSAldSIsIHByb2MtPm9iamVjdCk7CisJCXByb2NGb3JtID0gKEZv cm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJGVU5DVElPTiAle251bX1uICgle2x0eXBlfVQsICV7cnR5cGV9VCkgJXtmdW5jdGlvbn1EIiwK KwkJCQkJCQkgNCwKKwkJCQkJCQkgIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBwcm9jLT5udW1iZXIs CisJCQkJCQkJICJsdHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl90eXBlKHByb2MtPmxlZnR0eXBlLCAtMSksCisJCQkJCQkJICJydHlwZSIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2MtPnJpZ2h0dHlwZSwgLTEpLAor CQkJCQkJCSAiZnVuY3Rpb24iLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWUocHJvY0Zvcm0tPnByb25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkgIE5hbWVT dHIocHJvY0Zvcm0tPnByb25hbWUpKSk7CisKKwkJcHJvYXJndHlwZXMgPSBwcm9jRm9ybS0+cHJv YXJndHlwZXMudmFsdWVzOworCQlhcmdsaXN0ID0gTklMOworCQlmb3IgKGkgPSAwOyBpIDwgcHJv Y0Zvcm0tPnByb25hcmdzOyBpKyspCisJCXsKKwkJCU9ialRyZWUJICAgKmFyZzsKKworCQkJYXJn ID0gbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYXJndHlwZXNbaV0sIC0xKTsKKwkJCWFyZ2xpc3Qg PSBsYXBwZW5kKGFyZ2xpc3QsIG5ld19vYmplY3Rfb2JqZWN0KGFyZykpOworCQl9CisKKwkJYXBw ZW5kX2Zvcm1hdF9zdHJpbmcodG1wLCAiKCIpOworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcCwg IiV7YXJndHlwZXM6LCB9VCIsIGFyZ2xpc3QpOworCQlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXAs ICIpIik7CisKKwkJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCisJCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmpl Y3Qoc3RtdCwgIkFTICV7aXRlbXM6LCB9cyIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKG9w ZlR1cCk7CisJUmVsZWFzZVN5c0NhY2hlKG9wY1R1cCk7CisKKwlyZXR1cm4gc3RtdDsKK30KKwor LyoKKyAqIERlcGFyc2UgYSBDcmVhdGVUcmlnU3RtdCAoQ1JFQVRFIE9QRVJBVE9SIEZBTUlMWSkK KyAqCisgKiBHaXZlbiBhIHRyaWdnZXIgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRl ZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29t bWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVPcEZhbWlseShPaWQg b2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlIZWFwVHVwbGUgICBvcGZUdXA7CisJSGVh cFR1cGxlICAgYW1UdXA7CisJRm9ybV9wZ19vcGZhbWlseSBvcGZGb3JtOworCUZvcm1fcGdfYW0g IGFtRm9ybTsKKwlPYmpUcmVlCSAgICpjb3BmU3RtdDsKKworCW9wZlR1cCA9IFNlYXJjaFN5c0Nh Y2hlMShPUEZBTUlMWU9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVh cFR1cGxlSXNWYWxpZChvcGZUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxl ZCBmb3Igb3BlcmF0b3IgZmFtaWx5IHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCW9wZkZvcm0g PSAoRm9ybV9wZ19vcGZhbWlseSkgR0VUU1RSVUNUKG9wZlR1cCk7CisKKwlhbVR1cCA9IFNlYXJj aFN5c0NhY2hlMShBTU9JRCwgT2JqZWN0SWRHZXREYXR1bShvcGZGb3JtLT5vcGZtZXRob2QpKTsK KwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYW1UdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3IgYWNjZXNzIG1ldGhvZCAldSIsCisJCQkgb3BmRm9ybS0+b3BmbWV0aG9k KTsKKwlhbUZvcm0gPSAoRm9ybV9wZ19hbSkgR0VUU1RSVUNUKGFtVHVwKTsKKworCWNvcGZTdG10 ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBPUEVSQVRPUiBGQU1JTFkgJXtpZGVudGl0eX1EIFVT SU5HICV7YW1uYW1lfUkiLAorCQkJCQkJCSAgMiwKKwkJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5 cGVPYmplY3QsCisJCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BmRm9ybS0+b3Bm bmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCSAgIE5hbWVTdHIob3BmRm9ybS0+b3BmbmFtZSkpLAor CQkJCQkJCSAgImFtbmFtZSIsIE9ialR5cGVTdHJpbmcsIE5hbWVTdHIoYW1Gb3JtLT5hbW5hbWUp KTsKKworCVJlbGVhc2VTeXNDYWNoZShhbVR1cCk7CisJUmVsZWFzZVN5c0NhY2hlKG9wZlR1cCk7 CisKKwlyZXR1cm4gY29wZlN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFMVEVSIE9QRVJB VE9SIEZBTUlMWSBBREQvRFJPUCBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0FsdGVyT3BGYW1pbHkoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9ialRyZWUJICAg KmFsdGVyT3BGYW07CisJQWx0ZXJPcEZhbWlseVN0bXQgKnN0bXQgPSAoQWx0ZXJPcEZhbWlseVN0 bXQgKikgY21kLT5wYXJzZXRyZWU7CisJSGVhcFR1cGxlCWZ0cDsKKwlGb3JtX3BnX29wZmFtaWx5 IG9wZkZvcm07CisJTGlzdAkgICAqbGlzdDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJZnRwID0g U2VhcmNoU3lzQ2FjaGUxKE9QRkFNSUxZT0lELAorCQkJCQkJICBPYmplY3RJZEdldERhdHVtKGNt ZC0+ZC5vcGZhbS5hZGRyZXNzLm9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGZ0 cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBmYW1p bHkgJXUiLAorCQkJIGNtZC0+ZC5vcGZhbS5hZGRyZXNzLm9iamVjdElkKTsKKwlvcGZGb3JtID0g KEZvcm1fcGdfb3BmYW1pbHkpIEdFVFNUUlVDVChmdHApOworCisJLyoKKwkgKiBWZXJib3NlIHN5 bnRheAorCSAqCisJICogQUxURVIgT1BFUkFUT1IgRkFNSUxZICV7aWRlbnRpdHl9RCBVU0lORyAl e2FtbmFtZX1JIEFERC9EUk9QCisJICogJXtpdGVtczosIH1zCisJICovCisJYWx0ZXJPcEZhbSA9 IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBPUEVSQVRPUiBGQU1JTFkgJXtpZGVudGl0eX1EICIKKwkJ CQkJCQkJIlVTSU5HICV7YW1uYW1lfUkiLCAyLAorCQkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BmRm9ybS0+b3BmbmFt ZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkgTmFtZVN0cihvcGZGb3JtLT5vcGZuYW1lKSksCisJCQkJ CQkJCSJhbW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBzdG10LT5hbW5hbWUpOworCisJbGlzdCA9IE5J TDsKKwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5vcGZhbS5vcGVyYXRvcnMpCisJeworCQlPcEZhbWls eU1lbWJlciAqb3BlciA9IGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZQkgICAqdG1wOworCisJCS8q CisJCSAqIFZlcmJvc2Ugc3ludGF4CisJCSAqCisJCSAqIE9QRVJBVE9SICV7bnVtfW4gJXtvcGVy YXRvcn1PKCV7bHR5cGV9VCwgJXtydHlwZX1UKSAle3B1cnBvc2V9cworCQkgKi8KKwkJdG1wID0g bmV3X29ianRyZWVfVkEoIk9QRVJBVE9SICV7bnVtfW4iLCAxLAorCQkJCQkJCSAibnVtIiwgT2Jq VHlwZUludGVnZXIsIG9wZXItPm51bWJlcik7CisKKwkJLyogQWRkIHRoZSBvcGVyYXRvciBuYW1l OyB0aGUgRFJPUCBjYXNlIGRvZXNuJ3QgaGF2ZSB0aGlzICovCisJCWlmICghc3RtdC0+aXNEcm9w KQorCQl7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle29wZXJhdG9yfU8iLAorCQkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkJCSBvcGVyLT5vYmplY3QpKTsKKwkJfQorCisJCS8qIEFkZCB0aGUgdHlwZXMg Ki8KKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiKCV7bHR5cGV9VCwiLAorCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfdHlwZShvcGVyLT5sZWZ0dHlwZSwgLTEpKTsKKwkJYXBwZW5kX29iamVj dF9vYmplY3QodG1wLCAiJXtydHlwZX1UKSIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBl KG9wZXItPnJpZ2h0dHlwZSwgLTEpKTsKKworCQkvKiBBZGQgdGhlIEZPUiBTRUFSQ0ggLyBGT1Ig T1JERVIgQlkgY2xhdXNlOyBub3QgaW4gdGhlIERST1AgY2FzZSAqLworCQlpZiAoIXN0bXQtPmlz RHJvcCkKKwkJeworCQkJaWYgKG9wZXItPnNvcnRmYW1pbHkgPT0gSW52YWxpZE9pZCkKKwkJCQlh cHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle3B1cnBvc2V9cyIsICJGT1IgU0VBUkNIIik7CisJ CQllbHNlCisJCQl7CisJCQkJT2JqVHJlZQkgICAqdG1wMjsKKworCQkJCXRtcDIgPSBuZXdfb2Jq dHJlZV9WQSgiRk9SIE9SREVSIEJZIiwgMCk7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1w MiwgIiV7b3BmYW1pbHl9RCIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KE9wZXJhdG9yRmFtaWx5UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgb3Blci0+c29ydGZh bWlseSkpOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHVycG9zZX1zIiwgdG1w Mik7CisJCQl9CisJCX0KKworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKwl9CisKKwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5vcGZhbS5wcm9jZWR1cmVzKQor CXsKKwkJT3BGYW1pbHlNZW1iZXIgKnByb2MgPSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUJICAg KnRtcDsKKworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRlVOQ1RJT04gJXtudW19biAoJXtsdHlw ZX1ULCAle3J0eXBlfVQpIiwgMywKKwkJCQkJCQkgIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBwcm9j LT5udW1iZXIsCisJCQkJCQkJICJsdHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl90eXBlKHByb2MtPmxlZnR0eXBlLCAtMSksCisJCQkJCQkJICJydHlwZSIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2MtPnJpZ2h0dHlw ZSwgLTEpKTsKKworCQkvKiBBZGQgdGhlIGZ1bmN0aW9uIG5hbWUgYW5kIGFyZyB0eXBlczsgdGhl IERST1AgY2FzZSBkb2Vzbid0IGhhdmUgdGhpcyAqLworCQlpZiAoIXN0bXQtPmlzRHJvcCkKKwkJ eworCQkJSGVhcFR1cGxlCXByb2NUdXA7CisJCQlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07CisJCQlP aWQJCSAgICpwcm9hcmd0eXBlczsKKwkJCUxpc3QJICAgKmFyZ2xpc3Q7CisJCQlpbnQJCQlpOwor CisJCQlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0o cHJvYy0+b2JqZWN0KSk7CisJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSAldSIsIHByb2Mt Pm9iamVjdCk7CisJCQlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jVHVw KTsKKworCQkJcHJvYXJndHlwZXMgPSBwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzOworCQkJ YXJnbGlzdCA9IE5JTDsKKwkJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJvbmFyZ3M7IGkr KykKKwkJCXsKKwkJCQlPYmpUcmVlCSAgICphcmc7CisKKwkJCQlhcmcgPSBuZXdfb2JqdHJlZV9m b3JfdHlwZShwcm9hcmd0eXBlc1tpXSwgLTEpOworCQkJCWFyZ2xpc3QgPSBsYXBwZW5kKGFyZ2xp c3QsIG5ld19vYmplY3Rfb2JqZWN0KGFyZykpOworCQkJfQorCisJCQlhcHBlbmRfb2JqZWN0X29i amVjdCh0bXAsICIle2Z1bmN0aW9ufUQiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lKHByb2NGb3JtLT5wcm9uYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihwcm9j Rm9ybS0+cHJvbmFtZSkpKTsKKworCQkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wLCAiKCIpOwor CQkJYXBwZW5kX2FycmF5X29iamVjdCh0bXAsICIle2FyZ3R5cGVzOiwgfVQiLCBhcmdsaXN0KTsK KwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcCwgIikiKTsKKworCQkJUmVsZWFzZVN5c0NhY2hl KHByb2NUdXApOworCQl9CisKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmpl Y3QodG1wKSk7CisJfQorCisJaWYgKCFzdG10LT5pc0Ryb3ApCisJCWFwcGVuZF9mb3JtYXRfc3Ry aW5nKGFsdGVyT3BGYW0sICJBREQiKTsKKwllbHNlCisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGFs dGVyT3BGYW0sICJEUk9QIik7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVyT3BGYW0sICIl e2l0ZW1zOiwgfXMiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZShmdHApOworCisJcmV0dXJu IGFsdGVyT3BGYW07Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgRGVmaW5lU3RtdCAoQ1JFQVRFIE9Q RVJBVE9SKQorICoKKyAqIEdpdmVuIGEgdHJpZ2dlciBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhh dCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVh dGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRf T3BlcmF0b3IoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxl ICAgb3ByVHVwOworCU9ialRyZWUJICAgKnN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCUxpc3QJ ICAgKmxpc3Q7CisJRm9ybV9wZ19vcGVyYXRvciBvcHJGb3JtOworCisJb3ByVHVwID0gU2VhcmNo U3lzQ2FjaGUxKE9QRVJPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhl YXBUdXBsZUlzVmFsaWQob3ByVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIG9wZXJhdG9yIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCW9wckZvcm0gPSAoRm9y bV9wZ19vcGVyYXRvcikgR0VUU1RSVUNUKG9wclR1cCk7CisKKwlzdG10ID0gbmV3X29ianRyZWVf VkEoIkNSRUFURSBPUEVSQVRPUiAle2lkZW50aXR5fU8iLCAxLAorCQkJCQkJICAiaWRlbnRpdHki LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3ByRm9y bS0+b3BybmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICAgTmFtZVN0cihvcHJGb3JtLT5vcHJuYW1l KSkpOworCisJLyogQWRkIHRoZSBkZWZpbml0aW9uIGNsYXVzZSAqLworCWxpc3QgPSBOSUw7CisK KwkvKiBQUk9DRURVUkUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUFJPQ0VEVVJFPSV7cHJv Y2VkdXJlfUQiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicHJvY2VkdXJl IiwKKwkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgb3By Rm9ybS0+b3ByY29kZSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCisJLyogTEVGVEFSRyAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJMRUZUQVJH PSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJsZWZ0YXJnIik7CisJaWYg KE9pZElzVmFsaWQob3ByRm9ybS0+b3BybGVmdCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRt cCwgIiV7dHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3ByRm9ybS0+b3By bGVmdCwgLTEpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50Iiwg ZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOwor CisJLyogUklHSFRBUkcgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUklHSFRBUkc9IiwgMSwK KwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJpZ2h0YXJnIik7CisJaWYgKE9pZElz VmFsaWQob3ByRm9ybS0+b3BycmlnaHQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIl e3R5cGV9VCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wckZvcm0tPm9wcnJpZ2h0 LCAtMSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxz ZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkv KiBDT01NVVRBVE9SICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkNPTU1VVEFUT1I9IiwgMSwK KwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNvbW11dGF0b3IiKTsKKwlpZiAoT2lk SXNWYWxpZChvcHJGb3JtLT5vcHJjb20pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIl e29wZXJ9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvclJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJjb20pKTsKKwllbHNlCisJCWFw cGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogTkVHQVRPUiAqLworCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJORUdBVE9SPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJuZWdhdG9yIik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BybmVnYXRlKSkK KwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtvcGVyfUQiLAorCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkg b3ByRm9ybS0+b3BybmVnYXRlKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAi cHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKworCS8qIFJFU1RSSUNUICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlJFU1RS SUNUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJyZXN0cmljdCIpOwor CWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcnJlc3QpKQorCQlhcHBlbmRfb2JqZWN0X29iamVj dCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJyZXN0 KSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsK KwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEpP SU4gKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSk9JTj0iLCAxLAorCQkJCQkJICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAiam9pbiIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmpv aW4pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJqb2luKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmpl Y3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKworCS8qIE1FUkdFUyAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJNRVJHRVMiLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibWVyZ2VzIik7 CisJaWYgKCFvcHJGb3JtLT5vcHJjYW5tZXJnZSkKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwg InByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmpl Y3QodG1wKSk7CisKKwkvKiBIQVNIRVMgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSEFTSEVT IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImhhc2hlcyIpOworCWlmICgh b3ByRm9ybS0+b3ByY2FuaGFzaCkKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQi LCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHN0bXQsICIoJXtlbGVtczosIH1zKSIsIGxpc3QpOwor CisJUmVsZWFzZVN5c0NhY2hlKG9wclR1cCk7CisKKwlyZXR1cm4gc3RtdDsKK30KKworLyoKKyAq IERlcGFyc2UgYSBEZWZpbmVTdG10LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Rl ZmluZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUsIE9iamVjdEFkZHJlc3Mgc2Vj b25kYXJ5T2JqKQoreworCURlZmluZVN0bXQgKmRlZmluZSA9IChEZWZpbmVTdG10ICopIHBhcnNl dHJlZTsKKwlPYmpUcmVlCSAgICpkZWZTdG10OworCisJc3dpdGNoIChkZWZpbmUtPmtpbmQpCisJ eworCQljYXNlIE9CSkVDVF9PUEVSQVRPUjoKKwkJCWRlZlN0bXQgPSBkZXBhcnNlX0RlZmluZVN0 bXRfT3BlcmF0b3Iob2JqZWN0SWQsIGRlZmluZSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0Ogor CQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9iamVjdCBraW5kIik7CisJCQlyZXR1cm4gTlVM TDsKKwl9CisKKwlyZXR1cm4gZGVmU3RtdDsKK30KKworLyoKKyAqIEhhbmRsZSBkZXBhcnNpbmcg b2Ygc2ltcGxlIGNvbW1hbmRzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGNvdmVyIGFs bCBjYXNlcyBoYW5kbGVkIGluIFByb2Nlc3NVdGlsaXR5U2xvdy4KKyAqLworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9zaW1wbGVfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJ T2lkCQkJb2JqZWN0SWQ7CisJTm9kZQkgICAqcGFyc2V0cmVlOworCU9ialRyZWUJICAgKmNvbW1h bmQ7CisKKwlBc3NlcnQoY21kLT50eXBlID09IFNDVF9TaW1wbGUpOworCisJcGFyc2V0cmVlID0g Y21kLT5wYXJzZXRyZWU7CisJb2JqZWN0SWQgPSBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0 SWQ7CisKKwkvKiBUaGlzIHN3aXRjaCBuZWVkcyB0byBoYW5kbGUgZXZlcnl0aGluZyB0aGF0IFBy b2Nlc3NVdGlsaXR5U2xvdyBkb2VzICovCisJc3dpdGNoIChub2RlVGFnKHBhcnNldHJlZSkpCisJ eworCQljYXNlIFRfQ3JlYXRlU2NoZW1hU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0 ZVNjaGVtYVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRf Q3JlYXRlU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBh cnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlVHJpZ1N0bXQ6CisJCQljb21t YW5kID0gZGVwYXJzZV9DcmVhdGVUcmlnU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgVF9DcmVhdGVTZXFTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3Jl YXRlU2VxU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9B bHRlclNlcVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlclNlcVN0bXQob2JqZWN0SWQs IHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfRGVmaW5lU3RtdDoKKwkJCWNvbW1h bmQgPSBkZXBhcnNlX0RlZmluZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkg Y21kLT5kLnNpbXBsZS5zZWNvbmRhcnlPYmplY3QpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0Ny ZWF0ZU9wRmFtaWx5U3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZU9wRmFtaWx5KG9i amVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0luZGV4U3RtdDoKKwkJ CWNvbW1hbmQgPSBkZXBhcnNlX0luZGV4U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgVF9DcmVhdGVGdW5jdGlvblN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJz ZV9DcmVhdGVGdW5jdGlvbihvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNh c2UgVF9BbHRlckZ1bmN0aW9uU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyRnVuY3Rp b24ob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfUmVuYW1lU3Rt dDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX1JlbmFtZVN0bXQoY21kLT5kLnNpbXBsZS5hZGRyZXNz LCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyT3duZXJTdG10OgorCQkJ Y29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJPd25lclN0bXQoY21kLT5kLnNpbXBsZS5hZGRyZXNzLCBw YXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyT3BlcmF0b3JTdG10OgorCQkJ Y29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJPcGVyYXRvclN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7 CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWNvbW1hbmQgPSBOVUxMOworCQkJZWxvZyhMT0cs ICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlIGluIGRlcGFyc2UgY29tbWFuZDogJWQiLAorCQkJCSAo aW50KSBub2RlVGFnKHBhcnNldHJlZSkpOworCX0KKworCXJldHVybiBjb21tYW5kOworfQorCisv KgorICogSGFuZGxlIGRlcGFyc2luZyBvZiBEUk9QIGNvbW1hbmRzLgorICovCitjaGFyICoKK2Rl cGFyc2VfZHJvcF9jb21tYW5kKGNvbnN0IGNoYXIgKm9iamlkZW50aXR5LCBjb25zdCBjaGFyICpv YmplY3R0eXBlLAorCQkJCQkgRHJvcEJlaGF2aW9yIGJlaGF2aW9yKQoreworCVN0cmluZ0luZm9E YXRhICBzdHI7CisJY2hhcgkJICAgKmNvbW1hbmQ7CisJY2hhcgkJICAgKmlkZW50aXR5ID0gKGNo YXIgKikgb2JqaWRlbnRpdHk7CisJY2hhcgkJICAgKmZtdDsKKwlPYmpUcmVlCQkqc3RtdCwgKnN0 bXQyOworCUpzb25iCQkgICpqc29uYjsKKworCWluaXRTdHJpbmdJbmZvKCZzdHIpOworCisJZm10 ID0gcHNwcmludGYoIkRST1AgJXMgSUYgRVhJU1RTICUle29iamlkZW50aXR5fXMiLCBvYmplY3R0 eXBlKTsKKworCXN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJvYmppZGVudGl0eSIsIE9i alR5cGVTdHJpbmcsIGlkZW50aXR5KTsKKwlzdG10MiA9IG5ld19vYmp0cmVlX1ZBKCJDQVNDQURF IiwgMSwKKwkJCQkJCSAgICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsIGJlaGF2aW9yID09IERST1Bf Q0FTQ0FERSk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiJXtjYXNjYWRlfXMiLCBz dG10Mik7CisKKwlqc29uYiA9IG9ianRyZWVfdG9fanNvbmIoc3RtdCk7CisJY29tbWFuZCA9IEpz b25iVG9DU3RyaW5nKCZzdHIsICZqc29uYi0+cm9vdCwgSlNPTkJfRVNUSU1BVEVEX0xFTik7CisK KwlyZXR1cm4gY29tbWFuZDsKK30KKworLyoKKyAqIFdvcmtob3JzZSB0byBkZXBhcnNlIGEgQ29s bGVjdGVkQ29tbWFuZC4KKyAqLworY2hhciAqCitkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xs ZWN0ZWRDb21tYW5kICpjbWQsIGJvb2wgdmVyYm9zZV9tb2RlKQoreworCU92ZXJyaWRlU2VhcmNo UGF0aCAqb3ZlcnJpZGVQYXRoOworCU1lbW9yeUNvbnRleHQJb2xkY3h0OworCU1lbW9yeUNvbnRl eHQJdG1wY3h0OworCU9ialRyZWUJCSAgICp0cmVlOworCWNoYXIJCSAgICpjb21tYW5kOworCVN0 cmluZ0luZm9EYXRhICBzdHI7CisKKwkvKgorCSAqIEFsbG9jYXRlIGV2ZXJ5dGhpbmcgZG9uZSBi eSB0aGUgZGVwYXJzaW5nIHJvdXRpbmVzIGludG8gYSB0ZW1wIGNvbnRleHQsCisJICogdG8gYXZv aWQgaGF2aW5nIHRvIHNwcmlua2xlIHRoZW0gd2l0aCBtZW1vcnkgaGFuZGxpbmcgY29kZTsgYnV0 IGFsbG9jYXRlCisJICogdGhlIG91dHB1dCBTdHJpbmdJbmZvIGJlZm9yZSBzd2l0Y2hpbmcuCisJ ICovCisJaW5pdFN0cmluZ0luZm8oJnN0cik7CisJdG1wY3h0ID0gQWxsb2NTZXRDb250ZXh0Q3Jl YXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkgICAiZGVwYXJzZSBjdHgiLAorCQkJ CQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX01JTlNJWkUsCisJCQkJCQkJCSAgIEFMTE9DU0VUX0RF RkFVTFRfSU5JVFNJWkUsCisJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfTUFYU0laRSk7CisJ b2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHRtcGN4dCk7CisKKwkvKgorCSAqIE1hbnkg cm91dGluZXMgdW5kZXJseWluZyB0aGlzIG9uZSB3aWxsIGludm9rZSBydWxldXRpbHMuYyBmdW5j dGlvbmFsaXR5CisJICogaW4gb3JkZXIgdG8gb2J0YWluIGRlcGFyc2VkIHZlcnNpb25zIG9mIGV4 cHJlc3Npb25zLiAgSW4gc3VjaCByZXN1bHRzLAorCSAqIHdlIHdhbnQgYWxsIG9iamVjdCBuYW1l cyB0byBiZSBxdWFsaWZpZWQsIHNvIHRoYXQgcmVzdWx0cyBhcmUgInBvcnRhYmxlIgorCSAqIHRv IGVudmlyb25tZW50cyB3aXRoIGRpZmZlcmVudCBzZWFyY2hfcGF0aCBzZXR0aW5ncy4gIFJhdGhl ciB0aGFuIGluamVjdAorCSAqIHdoYXQgd291bGQgYmUgcmVwZXRpdGl2ZSBjYWxscyB0byBvdmVy cmlkZSBzZWFyY2ggcGF0aCBhbGwgb3ZlciB0aGUKKwkgKiBwbGFjZSwgd2UgZG8gaXQgY2VudHJh bGx5IGhlcmUuCisJICovCisJb3ZlcnJpZGVQYXRoID0gR2V0T3ZlcnJpZGVTZWFyY2hQYXRoKEN1 cnJlbnRNZW1vcnlDb250ZXh0KTsKKwlvdmVycmlkZVBhdGgtPnNjaGVtYXMgPSBOSUw7CisJb3Zl cnJpZGVQYXRoLT5hZGRDYXRhbG9nID0gZmFsc2U7CisJb3ZlcnJpZGVQYXRoLT5hZGRUZW1wID0g dHJ1ZTsKKwlQdXNoT3ZlcnJpZGVTZWFyY2hQYXRoKG92ZXJyaWRlUGF0aCk7CisKKwl2ZXJib3Nl ID0gdmVyYm9zZV9tb2RlOworCisJc3dpdGNoIChjbWQtPnR5cGUpCisJeworCQljYXNlIFNDVF9T aW1wbGU6CisJCQl0cmVlID0gZGVwYXJzZV9zaW1wbGVfY29tbWFuZChjbWQpOworCQkJYnJlYWs7 CisJCWNhc2UgU0NUX0FsdGVyVGFibGU6CisJCQl0cmVlID0gZGVwYXJzZV9BbHRlclRhYmxlU3Rt dChjbWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0FsdGVyT3BGYW1pbHk6CisJCQl0cmVlID0g ZGVwYXJzZV9BbHRlck9wRmFtaWx5KGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfQ3JlYXRl T3BDbGFzczoKKwkJCXRyZWUgPSBkZXBhcnNlX0NyZWF0ZU9wQ2xhc3NTdG10KGNtZCk7CisJCQli cmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGRlcGFyc2Ugbm9k ZSB0eXBlICVkIiwgY21kLT50eXBlKTsKKwl9CisKKwlQb3BPdmVycmlkZVNlYXJjaFBhdGgoKTsK KworCWlmICh0cmVlKQorCXsKKwkJSnNvbmIgKmpzb25iOworCisJCWpzb25iID0gb2JqdHJlZV90 b19qc29uYih0cmVlKTsKKwkJY29tbWFuZCA9IEpzb25iVG9DU3RyaW5nKCZzdHIsICZqc29uYi0+ cm9vdCwgSlNPTkJfRVNUSU1BVEVEX0xFTik7CisJfQorCWVsc2UKKwkJY29tbWFuZCA9IE5VTEw7 CisKKwkvKgorCSAqIENsZWFuIHVwLiAgTm90ZSB0aGF0IHNpbmNlIHdlIGNyZWF0ZWQgdGhlIFN0 cmluZ0luZm8gaW4gdGhlIGNhbGxlcidzCisJICogY29udGV4dCwgdGhlIG91dHB1dCBzdHJpbmcg aXMgbm90IGRlbGV0ZWQgaGVyZS4KKwkgKi8KKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0 KTsKKwlNZW1vcnlDb250ZXh0RGVsZXRlKHRtcGN4dCk7CisKKwlyZXR1cm4gY29tbWFuZDsKK30K KworLyoKKyAqIEdpdmVuIGEgQ29sbGVjdGVkQ29tbWFuZCwgcmV0dXJuIGEgSlNPTiByZXByZXNl bnRhdGlvbiBvZiBpdC4KKyAqCisgKiBUaGUgY29tbWFuZCBpcyBleHBhbmRlZCBmdWxseSwgc28g dGhhdCB0aGVyZSBhcmUgbm8gYW1iaWd1aXRpZXMgZXZlbiBpbiB0aGUKKyAqIGZhY2Ugb2Ygc2Vh cmNoX3BhdGggY2hhbmdlcy4KKyAqLworRGF0dW0KK2RkbF9kZXBhcnNlX3RvX2pzb24oUEdfRlVO Q1RJT05fQVJHUykKK3sKKwlDb2xsZWN0ZWRDb21tYW5kICpjbWQgPSAoQ29sbGVjdGVkQ29tbWFu ZCAqKSBQR19HRVRBUkdfUE9JTlRFUigwKTsKKwljaGFyCQkgICAqY29tbWFuZDsKKworCWNvbW1h bmQgPSBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChjbWQsIHRydWUpOworCisJaWYgKGNvbW1hbmQp CisJCVBHX1JFVFVSTl9URVhUX1AoQ1N0cmluZ0dldFRleHREYXR1bShjb21tYW5kKSk7CisKKwlQ R19SRVRVUk5fTlVMTCgpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRs X2pzb24uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uZDY0NzE5YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMKQEAgLTAsMCArMSw3NjAgQEAKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICoKKyAqIGRkbF9qc29uLmMKKyAqCSAgSlNPTiBjb2RlIHJlbGF0ZWQgdG8gRERMIGNv bW1hbmQgZGVwYXJzaW5nCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmln aHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoK KyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMK KyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNp bmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisj aW5jbHVkZSAidXRpbHMvanNvbmIuaCIKKworCisvKgorICogQ29udmVyc2lvbiBzcGVjaWZpZXIs IGl0IGRldGVybWluZXMgaG93IHdlIGV4cGFuZCB0aGUganNvbiBlbGVtZW50IGludG8KKyAqIHN0 cmluZy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJU3BlY1R5cGVuYW1lLAorCVNwZWNPcGVyYXRv cm5hbWUsCisJU3BlY0RvdHRlZE5hbWUsCisJU3BlY1N0cmluZywKKwlTcGVjTnVtYmVyLAorCVNw ZWNTdHJpbmdMaXRlcmFsLAorCVNwZWNJZGVudGlmaWVyLAorCVNwZWNSb2xlCit9IGNvbnZTcGVj aWZpZXI7CisKKy8qCisgKiBBIHRlcm5hcnkgdmFsdWUgd2hpY2ggcmVwcmVzZW50cyBhIGJvb2xl YW4gdHlwZSBKc29uYlZhbHVlLgorICovCit0eXBlZGVmIGVudW0KK3sKKwl0dl9hYnNlbnQsCisJ dHZfdHJ1ZSwKKwl0dl9mYWxzZQorfSB0cml2YWx1ZTsKKworc3RhdGljIGJvb2wgZXhwYW5kX29u ZV9qc29uYl9lbGVtZW50KFN0cmluZ0luZm8gYnVmLCBjaGFyICpwYXJhbSwKKwkJCQkJCSBKc29u YlZhbHVlICpqc29udmFsLCBjb252U3BlY2lmaWVyIHNwZWNpZmllciwKKwkJCQkJCSBjb25zdCBj aGFyICpmbXQpOworc3RhdGljIHZvaWQgZXhwYW5kX2pzb25iX2FycmF5KFN0cmluZ0luZm8gYnVm LCBjaGFyICpwYXJhbSwKKwkJCQkgICBKc29uYlZhbHVlICpqc29uYXJyLCBjaGFyICphcnJheXNl cCwKKwkJCQkgICBjb252U3BlY2lmaWVyIHNwZWNpZmllciwgY29uc3QgY2hhciAqZm10KTsKK3N0 YXRpYyB2b2lkIGZtdHN0cl9lcnJvcl9jYWxsYmFjayh2b2lkICphcmcpOworY2hhciAqZGRsX2Rl cGFyc2VfanNvbl90b19zdHJpbmcoY2hhciAqanNvbmIpOworCisvKgorICogR2l2ZW4gYSBKc29u YkNvbnRhaW5lciwgZmluZCB0aGUgSnNvbmJWYWx1ZSB3aXRoIHRoZSBnaXZlbiBrZXkgbmFtZSBp biBpdC4KKyAqIElmIGl0J3Mgb2YgYSB0eXBlIG90aGVyIHRoYW4gamJ2Qm9vbCwgYW4gZXJyb3Ig aXMgcmFpc2VkLiBJZiBpdCBkb2Vzbid0CisgKiBleGlzdCwgdHZfYWJzZW50IGlzIHJldHVybmVk OyBvdGhlcndpc2UgcmV0dXJuIHRoZSBhY3R1YWwgdHJpdmFsdWUuCisgKi8KK3N0YXRpYyB0cml2 YWx1ZQorZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKEpzb25iQ29udGFpbmVyICpjb250YWlu ZXIsIGNoYXIgKmtleW5hbWUpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNvbmJWYWx1ZSAqdmFs dWU7CisJdHJpdmFsdWUJcmVzdWx0OworCisJa2V5LnR5cGUgPSBqYnZTdHJpbmc7CisJa2V5LnZh bC5zdHJpbmcudmFsID0ga2V5bmFtZTsKKwlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4oa2V5 bmFtZSk7CisJdmFsdWUgPSBmaW5kSnNvbmJWYWx1ZUZyb21Db250YWluZXIoY29udGFpbmVyLAor CQkJCQkJCQkJCUpCX0ZPQkpFQ1QsICZrZXkpOworCWlmICh2YWx1ZSA9PSBOVUxMKQorCQlyZXR1 cm4gdHZfYWJzZW50OworCWlmICh2YWx1ZS0+dHlwZSAhPSBqYnZCb29sKQorCQllcmVwb3J0KEVS Uk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJ CSBlcnJtc2coImVsZW1lbnQgXCIlc1wiIGlzIG5vdCBvZiB0eXBlIGJvb2xlYW4iLAorCQkJCQkJ a2V5bmFtZSkpKTsKKwlyZXN1bHQgPSB2YWx1ZS0+dmFsLmJvb2xlYW4gPyB0dl90cnVlIDogdHZf ZmFsc2U7CisJcGZyZWUodmFsdWUpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEdp dmVuIGEgSnNvbmJDb250YWluZXIsIGZpbmQgdGhlIEpzb25iVmFsdWUgd2l0aCB0aGUgZ2l2ZW4g a2V5IG5hbWUgaW4gaXQuCisgKiBJZiBpdCdzIG9mIGEgdHlwZSBvdGhlciB0aGFuIGpidlN0cmlu ZywgYW4gZXJyb3IgaXMgcmFpc2VkLiAgSWYgaXQgZG9lc24ndAorICogZXhpc3QsIGFuIGVycm9y IGlzIHJhaXNlZCB1bmxlc3MgbWlzc2luZ19vazsgb3RoZXJ3aXNlIHJldHVybiBOVUxMLgorICoK KyAqIElmIGl0IGV4aXN0cyBhbmQgaXMgYSBzdHJpbmcsIGEgZnJlc2hseSBwYWxsb2MnZWQgY29w eSBpcyByZXR1cm5lZC4KKyAqCisgKiBJZiAqbGVuZ3RoIGlzIG5vdCBOVUxMLCBpdCBpcyBzZXQg dG8gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLgorICovCitzdGF0aWMgY2hhciAqCitmaW5kX3N0 cmluZ19pbl9qc29uYmNvbnRhaW5lcihKc29uYkNvbnRhaW5lciAqY29udGFpbmVyLCBjaGFyICpr ZXluYW1lLAorCQkJCQkJCSAgYm9vbCBtaXNzaW5nX29rLCBpbnQgKmxlbmd0aCkKK3sKKwlKc29u YlZhbHVlCWtleTsKKwlKc29uYlZhbHVlICp2YWx1ZTsKKwljaGFyCSAgICpzdHI7CisKKwkvKiBY WFggdmVyaWZ5IHRoYXQgdGhpcyBpcyBhbiBvYmplY3QsIG5vdCBhbiBhcnJheSAqLworCisJa2V5 LnR5cGUgPSBqYnZTdHJpbmc7CisJa2V5LnZhbC5zdHJpbmcudmFsID0ga2V5bmFtZTsKKwlrZXku dmFsLnN0cmluZy5sZW4gPSBzdHJsZW4oa2V5bmFtZSk7CisJdmFsdWUgPSBmaW5kSnNvbmJWYWx1 ZUZyb21Db250YWluZXIoY29udGFpbmVyLAorCQkJCQkJCQkJCUpCX0ZPQkpFQ1QsICZrZXkpOwor CWlmICh2YWx1ZSA9PSBOVUxMKQorCXsKKwkJaWYgKG1pc3Npbmdfb2spCisJCQlyZXR1cm4gTlVM TDsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1F VEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJtaXNzaW5nIGVsZW1lbnQgXCIlc1wiIGluIGpzb24g b2JqZWN0Iiwga2V5bmFtZSkpKTsKKwl9CisKKwlzdHIgPSBwbnN0cmR1cCh2YWx1ZS0+dmFsLnN0 cmluZy52YWwsIHZhbHVlLT52YWwuc3RyaW5nLmxlbik7CisJaWYgKGxlbmd0aCkKKwkJKmxlbmd0 aCA9IHZhbHVlLT52YWwuc3RyaW5nLmxlbjsKKwlwZnJlZSh2YWx1ZSk7CisJcmV0dXJuIHN0cjsK K30KKworI2RlZmluZSBBRFZBTkNFX1BBUlNFX1BPSU5URVIocHRyLGVuZF9wdHIpIFwKKwlkbyB7 IFwKKwkJaWYgKCsrKHB0cikgPj0gKGVuZF9wdHIpKSBcCisJCQllcmVwb3J0KEVSUk9SLCBcCisJ CQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLCBcCisJCQkJCSBl cnJtc2coInVudGVybWluYXRlZCBmb3JtYXQgc3BlY2lmaWVyIikpKTsgXAorCX0gd2hpbGUgKDAp CisKKy8qCisgKiBSZWN1cnNpdmUgaGVscGVyIGZvciBwZ19ldmVudF90cmlnZ2VyX2V4cGFuZF9j b21tYW5kCisgKgorICogRmluZCB0aGUgImZtdCIgZWxlbWVudCBpbiB0aGUgZ2l2ZW4gY29udGFp bmVyLCBhbmQgZXhwYW5kIGl0IGludG8gdGhlCisgKiBwcm92aWRlZCBTdHJpbmdJbmZvLgorICov CitzdGF0aWMgdm9pZAorZXhwYW5kX2ZtdF9yZWN1cnNpdmUoSnNvbmJDb250YWluZXIgKmNvbnRh aW5lciwgU3RyaW5nSW5mbyBidWYpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNvbmJWYWx1ZSAq dmFsdWU7CisJY29uc3QgY2hhciAqY3A7CisJY29uc3QgY2hhciAqc3RhcnRfcHRyOworCWNvbnN0 IGNoYXIgKmVuZF9wdHI7CisJaW50CQkJbGVuOworCisJc3RhcnRfcHRyID0gZmluZF9zdHJpbmdf aW5fanNvbmJjb250YWluZXIoY29udGFpbmVyLCAiZm10IiwgZmFsc2UsICZsZW4pOworCWVuZF9w dHIgPSBzdGFydF9wdHIgKyBsZW47CisKKwlmb3IgKGNwID0gc3RhcnRfcHRyOyBjcCA8IGVuZF9w dHI7IGNwKyspCisJeworCQljb252U3BlY2lmaWVyIHNwZWNpZmllcjsKKwkJYm9vbAkJaXNfYXJy YXk7CisJCWNoYXIJICAgKnBhcmFtID0gTlVMTDsKKwkJY2hhcgkgICAqYXJyYXlzZXAgPSBOVUxM OworCisJCWlmICgqY3AgIT0gJyUnKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3Jv KGJ1ZiwgKmNwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaXNfYXJyYXkgPSBmYWxzZTsKKwor CQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCisJCS8qIEVhc3kgY2FzZTog JSUgb3V0cHV0cyBhIHNpbmdsZSAlICovCisJCWlmICgqY3AgPT0gJyUnKQorCQl7CisJCQlhcHBl bmRTdHJpbmdJbmZvQ2hhck1hY3JvKGJ1ZiwgKmNwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJ LyoKKwkJICogU2NhbiB0aGUgbWFuZGF0b3J5IGVsZW1lbnQgbmFtZS4gIEFsbG93IGZvciBhbiBh cnJheSBzZXBhcmF0b3IKKwkJICogKHdoaWNoIG1heSBiZSB0aGUgZW1wdHkgc3RyaW5nKSB0byBi ZSBzcGVjaWZpZWQgYWZ0ZXIgY29sb24uCisJCSAqLworCQlpZiAoKmNwID09ICd7JykKKwkJewor CQkJU3RyaW5nSW5mb0RhdGEgcGFyYnVmOworCQkJU3RyaW5nSW5mb0RhdGEgYXJyYXlzZXBidWY7 CisJCQlTdHJpbmdJbmZvCWFwcGVuZFRvOworCisJCQlpbml0U3RyaW5nSW5mbygmcGFyYnVmKTsK KwkJCWFwcGVuZFRvID0gJnBhcmJ1ZjsKKworCQkJQURWQU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBl bmRfcHRyKTsKKwkJCWZvciAoOyBjcCA8IGVuZF9wdHI7KQorCQkJeworCQkJCWlmICgqY3AgPT0g JzonKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogRm91bmQgYXJyYXkgc2VwYXJhdG9yIGRlbGlt aXRlcjsgZWxlbWVudCBuYW1lIGlzIG5vdworCQkJCQkgKiBjb21wbGV0ZSwgc3RhcnQgZmlsbGlu ZyB0aGUgc2VwYXJhdG9yLgorCQkJCQkgKi8KKwkJCQkJaW5pdFN0cmluZ0luZm8oJmFycmF5c2Vw YnVmKTsKKwkJCQkJYXBwZW5kVG8gPSAmYXJyYXlzZXBidWY7CisJCQkJCWlzX2FycmF5ID0gdHJ1 ZTsKKwkJCQkJQURWQU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKwkJCQkJY29udGlu dWU7CisJCQkJfQorCisJCQkJaWYgKCpjcCA9PSAnfScpCisJCQkJeworCQkJCQlBRFZBTkNFX1BB UlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJYXBwZW5k U3RyaW5nSW5mb0NoYXJNYWNybyhhcHBlbmRUbywgKmNwKTsKKwkJCQlBRFZBTkNFX1BBUlNFX1BP SU5URVIoY3AsIGVuZF9wdHIpOworCQkJfQorCQkJcGFyYW0gPSBwYXJidWYuZGF0YTsKKwkJCWlm IChpc19hcnJheSkKKwkJCQlhcnJheXNlcCA9IGFycmF5c2VwYnVmLmRhdGE7CisJCX0KKwkJaWYg KHBhcmFtID09IE5VTEwpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RF X0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJtaXNzaW5nIGNvbnZlcnNp b24gbmFtZSBpbiBjb252ZXJzaW9uIHNwZWNpZmllciIpKSk7CisKKwkJc3dpdGNoICgqY3ApCisJ CXsKKwkJCWNhc2UgJ0knOgorCQkJCXNwZWNpZmllciA9IFNwZWNJZGVudGlmaWVyOworCQkJCWJy ZWFrOworCQkJY2FzZSAnRCc6CisJCQkJc3BlY2lmaWVyID0gU3BlY0RvdHRlZE5hbWU7CisJCQkJ YnJlYWs7CisJCQljYXNlICdzJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjU3RyaW5nOworCQkJCWJy ZWFrOworCQkJY2FzZSAnTCc6CisJCQkJc3BlY2lmaWVyID0gU3BlY1N0cmluZ0xpdGVyYWw7CisJ CQkJYnJlYWs7CisJCQljYXNlICdUJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjVHlwZW5hbWU7CisJ CQkJYnJlYWs7CisJCQljYXNlICdPJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjT3BlcmF0b3JuYW1l OworCQkJCWJyZWFrOworCQkJY2FzZSAnbic6CisJCQkJc3BlY2lmaWVyID0gU3BlY051bWJlcjsK KwkJCQlicmVhazsKKwkJCWNhc2UgJ1InOgorCQkJCXNwZWNpZmllciA9IFNwZWNSb2xlOworCQkJ CWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUo RVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJpbnZhbGlk IGNvbnZlcnNpb24gc3BlY2lmaWVyIFwiJWNcIiIsICpjcCkpKTsKKwkJfQorCisJCS8qCisJCSAq IE9idGFpbiB0aGUgZWxlbWVudCB0byBiZSBleHBhbmRlZC4KKwkJICovCisJCWtleS50eXBlID0g amJ2U3RyaW5nOworCQlrZXkudmFsLnN0cmluZy52YWwgPSBwYXJhbTsKKwkJa2V5LnZhbC5zdHJp bmcubGVuID0gc3RybGVuKHBhcmFtKTsKKworCQl2YWx1ZSA9IGZpbmRKc29uYlZhbHVlRnJvbUNv bnRhaW5lcihjb250YWluZXIsIEpCX0ZPQkpFQ1QsICZrZXkpOworCisJCS8qCisJCSAqIFZhbGlk YXRlIHRoYXQgd2UgZ290IGFuIGFycmF5IGlmIHRoZSBmb3JtYXQgc3RyaW5nIHNwZWNpZmllZCBv bmUuCisJCSAqIEFuZCBmaW5hbGx5IHByaW50IG91dCB0aGUgZGF0YQorCQkgKi8KKwkJaWYgKGlz X2FycmF5KQorCQkJZXhwYW5kX2pzb25iX2FycmF5KGJ1ZiwgcGFyYW0sIHZhbHVlLCBhcnJheXNl cCwgc3BlY2lmaWVyLCBzdGFydF9wdHIpOworCQllbHNlCisJCQlleHBhbmRfb25lX2pzb25iX2Vs ZW1lbnQoYnVmLCBwYXJhbSwgdmFsdWUsIHNwZWNpZmllciwgc3RhcnRfcHRyKTsKKwl9Cit9CisK Ky8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGFuIGlkZW50aWZpZXIuICBUaGUgdmFsdWUg bXVzdCBiZSBvZiB0eXBlIHN0cmluZy4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFs X2lkZW50aWZpZXIoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hh cgkgICAqc3RyOworCisJQXNzZXJ0KGpzb252YWwtPnR5cGUgPT0gamJ2U3RyaW5nKTsKKworCXN0 ciA9IHBuc3RyZHVwKGpzb252YWwtPnZhbC5zdHJpbmcudmFsLCBqc29udmFsLT52YWwuc3RyaW5n Lmxlbik7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHF1b3RlX2lkZW50aWZpZXIoc3Ry KSk7CisJcGZyZWUoc3RyKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYSBk b3Qtc2VwYXJhdGVkLW5hbWUuICBUaGUgdmFsdWUgbXVzdCBiZSBvZiB0eXBlCisgKiBvYmplY3Qg YW5kIG1heSBjb250YWluIGVsZW1lbnRzICJzY2hlbWFuYW1lIiAob3B0aW9uYWwpLCAib2JqbmFt ZSIKKyAqIChtYW5kYXRvcnkpLCAiYXR0cm5hbWUiIChvcHRpb25hbCkuICBEb3VibGUgcXVvdGVz IGFyZSBhZGRlZCB0byBlYWNoIGVsZW1lbnQKKyAqIGFzIG5lY2Vzc2FyeSwgYW5kIGRvdCBzZXBh cmF0b3JzIHdoZXJlIG5lZWRlZC4KKyAqCisgKiBPbmUgZGF5IHdlIG1pZ2h0IG5lZWQgYSAiY2F0 YWxvZyIgZWxlbWVudCBhcyB3ZWxsLCBidXQgbm8gY3VycmVudCB1c2UgY2FzZQorICogbmVlZHMg dGhhdC4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX2RvdHRlZG5hbWUoU3RyaW5n SW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc3RyOworCisJc3Ry ID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRh LAorCQkJCQkJCQkJCSJzY2hlbWFuYW1lIiwgdHJ1ZSwgTlVMTCk7CisJaWYgKHN0cikKKwl7CisJ CWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMuIiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwkJ cGZyZWUoc3RyKTsKKwl9CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihq c29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJIm9iam5hbWUiLCBmYWxzZSwgTlVM TCk7CisJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyIsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7 CisJcGZyZWUoc3RyKTsKKworCXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpz b252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkiYXR0cm5hbWUiLCB0cnVlLCBOVUxM KTsKKwlpZiAoc3RyKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIuJXMiLCBxdW90ZV9p ZGVudGlmaWVyKHN0cikpOworCQlwZnJlZShzdHIpOworCX0KK30KKworLyoKKyAqIEV4cGFuZCBh IGpzb24gdmFsdWUgYXMgYSB0eXBlIG5hbWUuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNv bnZhbF90eXBlbmFtZShTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwlj aGFyCSAgICpzY2hlbWEgPSBOVUxMOworCWNoYXIJICAgKnR5cGVuYW1lOworCWNoYXIJICAgKnR5 cG1vZHN0cjsKKwl0cml2YWx1ZQlpc19hcnJheTsKKwljaGFyCSAgICphcnJheV9kZWNvcjsKKwor CS8qCisJICogV2Ugb21pdCBzY2hlbWEtcXVhbGlmeWluZyB0aGUgb3V0cHV0IG5hbWUgaWYgdGhl IHNjaGVtYSBlbGVtZW50IGlzCisJICogZWl0aGVyIHRoZSBlbXB0eSBzdHJpbmcgb3IgTlVMTDsg dGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aG9zZSB0d28gY2FzZXMKKwkgKiBpcyB0aGF0IGluIHRo ZSBsYXR0ZXIgd2UgcXVvdGUgdGhlIHR5cGUgbmFtZSwgaW4gdGhlIGZvcm1lciB3ZSBkb24ndC4K KwkgKiBUaGlzIGFsbG93cyBmb3IgdHlwZXMgd2l0aCBzcGVjaWFsIHR5cG1vZCBuZWVkcywgc3Vj aCBhcyBpbnRlcnZhbCBhbmQKKwkgKiB0aW1lc3RhbXAgKHNlZSBmb3JtYXRfdHlwZV9kZXRhaWxl ZCksIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgYWxsb3dpbmcKKwkgKiBmb3IgdGhlIHNjaGVtYSBu YW1lIHRvIGJlIG9taXR0ZWQgZnJvbSB0eXBlIG5hbWVzIHRoYXQgcmVxdWlyZSBxdW90ZXMKKwkg KiBidXQgYXJlIHRvIGJlIG9idGFpbmVkIGZyb20gYSB1c2VyIHNjaGVtYS4KKwkgKi8KKworCXNj aGVtYSA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnku ZGF0YSwKKwkJCQkJCQkJCQkgICAic2NoZW1hbmFtZSIsIHRydWUsIE5VTEwpOworCXR5cGVuYW1l ID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRh LAorCQkJCQkJCQkJCQkgInR5cGVuYW1lIiwgZmFsc2UsIE5VTEwpOworCXR5cG1vZHN0ciA9IGZp bmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJ CQkJCQkJCQkJICAidHlwbW9kIiwgdHJ1ZSwgTlVMTCk7CisJaXNfYXJyYXkgPSBmaW5kX2Jvb2xf aW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSAg ICJ0eXBhcnJheSIpOworCXN3aXRjaCAoaXNfYXJyYXkpCisJeworCQlkZWZhdWx0OgorCQljYXNl IHR2X2Fic2VudDoKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5W QUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJtaXNzaW5nIHR5cGFycmF5IGVs ZW1lbnQiKSkpOworCQkJYnJlYWs7CisJCWNhc2UgdHZfdHJ1ZToKKwkJCWFycmF5X2RlY29yID0g IltdIjsKKwkJCWJyZWFrOworCQljYXNlIHR2X2ZhbHNlOgorCQkJYXJyYXlfZGVjb3IgPSAiIjsK KwkJCWJyZWFrOworCX0KKworCWlmIChzY2hlbWEgPT0gTlVMTCkKKwkJYXBwZW5kU3RyaW5nSW5m byhidWYsICIlcyVzJXMiLAorCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIodHlwZW5hbWUpLAorCQkJ CQkJIHR5cG1vZHN0ciA/IHR5cG1vZHN0ciA6ICIiLAorCQkJCQkJIGFycmF5X2RlY29yKTsKKwor CS8qIFNwZWNpYWwgdHlwbW9kIG5lZWRzICovCisJZWxzZSBpZiAoc2NoZW1hWzBdID09ICdcMCcp CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMlcyVzIiwKKwkJCQkJCSB0eXBlbmFtZSwKKwkJ CQkJCSB0eXBtb2RzdHIgPyB0eXBtb2RzdHIgOiAiIiwKKwkJCQkJCSBhcnJheV9kZWNvcik7CisJ ZWxzZQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzLiVzJXMlcyIsCisJCQkJCQkgcXVvdGVf aWRlbnRpZmllcihzY2hlbWEpLAorCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIodHlwZW5hbWUpLAor CQkJCQkJIHR5cG1vZHN0ciA/IHR5cG1vZHN0ciA6ICIiLAorCQkJCQkJIGFycmF5X2RlY29yKTsK K30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYW4gb3BlcmF0b3IgbmFtZQorICov CitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfb3BlcmF0b3IoU3RyaW5nSW5mbyBidWYsIEpz b25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc3RyOworCisJc3RyID0gZmluZF9zdHJp bmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJ CSJzY2hlbWFuYW1lIiwgdHJ1ZSwgTlVMTCk7CisJLyogc2NoZW1hIG1pZ2h0IGJlIE5VTEwgb3Ig ZW1wdHkgKi8KKwlpZiAoc3RyICE9IE5VTEwgJiYgc3RyWzBdICE9ICdcMCcpCisJCWFwcGVuZFN0 cmluZ0luZm8oYnVmLCAiJXMuIiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKworCXN0ciA9IGZp bmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJ CQkJCQkJCQkib2JqbmFtZSIsIGZhbHNlLCBOVUxMKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KGJ1Ziwgc3RyKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYSBzdHJpbmcu ICBUaGUgdmFsdWUgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBvZgorICogdHlwZSBvYmplY3Qu ICBJbiB0aGUgbGF0dGVyIGNhc2UgaXQgbXVzdCBjb250YWluIGEgImZtdCIgZWxlbWVudCB3aGlj aCB3aWxsCisgKiBiZSByZWN1cnNpdmVseSBleHBhbmRlZDsgYWxzbywgaWYgdGhlIG9iamVjdCBj b250YWlucyBhbiBlbGVtZW50ICJwcmVzZW50IgorICogYW5kIGl0IGlzIHNldCB0byBmYWxzZSwg dGhlIGV4cGFuc2lvbiBpcyB0aGUgZW1wdHkgc3RyaW5nLgorICoKKyAqIFJldHVybnMgZmFsc2Ug aWYgbm8gYWN0dWFsIGV4cGFuc2lvbiB3YXMgbWFkZSBkdWUgdG8gdGhlICJwcmVzZW50IiBmbGFn CisgKiBiZWluZyBzZXQgdG8gImZhbHNlIi4KKyAqLworc3RhdGljIGJvb2wKK2V4cGFuZF9qc29u dmFsX3N0cmluZyhTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwlpZiAo anNvbnZhbC0+dHlwZSA9PSBqYnZTdHJpbmcpCisJeworCQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZv KGJ1ZiwganNvbnZhbC0+dmFsLnN0cmluZy52YWwsCisJCQkJCQkJICAganNvbnZhbC0+dmFsLnN0 cmluZy5sZW4pOworCX0KKwllbHNlIGlmIChqc29udmFsLT50eXBlID09IGpidkJpbmFyeSkKKwl7 CisJCXRyaXZhbHVlCXByZXNlbnQ7CisKKwkJcHJlc2VudCA9IGZpbmRfYm9vbF9pbl9qc29uYmNv bnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJCSAgInByZXNlbnQi KTsKKwkJLyoKKwkJICogSWYgInByZXNlbnQiIGlzIHNldCB0byBmYWxzZSwgdGhpcyBlbGVtZW50 IGV4cGFuZHMgdG8gZW1wdHk7CisJCSAqIG90aGVyd2lzZSAoZWl0aGVyIHRydWUgb3IgYWJzZW50 KSwgZmFsbCB0aHJvdWdoIHRvIGV4cGFuZCAiZm10Ii4KKwkJICovCisJCWlmIChwcmVzZW50ID09 IHR2X2ZhbHNlKQorCQkJcmV0dXJuIGZhbHNlOworCisJCWV4cGFuZF9mbXRfcmVjdXJzaXZlKGpz b252YWwtPnZhbC5iaW5hcnkuZGF0YSwgYnVmKTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKKy8q CisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgc3RyaW5nIGxpdGVyYWwuCisgKi8KK3N0YXRp YyB2b2lkCitleHBhbmRfanNvbnZhbF9zdHJsaXQoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUg Kmpzb252YWwpCit7CisJY2hhciAgICpzdHI7CisJU3RyaW5nSW5mb0RhdGEgZHFkZWxpbTsKKwlz dGF0aWMgY29uc3QgY2hhciBkcXN1ZmZpeGVzW10gPSAiX1hZWlpZWF8iOworCWludCAgICAgICAg IGRxbmV4dGNoYXIgPSAwOworCisJc3RyID0gcG5zdHJkdXAoanNvbnZhbC0+dmFsLnN0cmluZy52 YWwsIGpzb252YWwtPnZhbC5zdHJpbmcubGVuKTsKKworCS8qIEVhc3kgY2FzZTogaWYgdGhlcmUg YXJlIG5vICcgYW5kIG5vIFwsIGp1c3QgdXNlIGEgc2luZ2xlIHF1b3RlICovCisJaWYgKHN0cmNo cihzdHIsICdcJycpID09IE5VTEwgJiYKKwkJc3RyY2hyKHN0ciwgJ1xcJykgPT0gTlVMTCkKKwl7 CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJyVzJyIsIHN0cik7CisJCXBmcmVlKHN0cik7CisJ CXJldHVybjsKKwl9CisKKwkvKiBPdGhlcndpc2UgbmVlZCB0byBmaW5kIGEgdXNlZnVsIGRvbGxh ci1xdW90ZSBkZWxpbWl0ZXIgKi8KKwlpbml0U3RyaW5nSW5mbygmZHFkZWxpbSk7CisJYXBwZW5k U3RyaW5nSW5mb1N0cmluZygmZHFkZWxpbSwgIiQiKTsKKwl3aGlsZSAoc3Ryc3RyKHN0ciwgZHFk ZWxpbS5kYXRhKSAhPSBOVUxMKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmRxZGVsaW0s IGRxc3VmZml4ZXNbZHFuZXh0Y2hhcisrXSk7CisJCWRxbmV4dGNoYXIgPSBkcW5leHRjaGFyICUg KHNpemVvZihkcXN1ZmZpeGVzKSAtIDEpOworCX0KKwkvKiBBZGQgdHJhaWxpbmcgJCAqLworCWFw cGVuZFN0cmluZ0luZm9DaGFyKCZkcWRlbGltLCAnJCcpOworCisJLyogQW5kIGZpbmFsbHkgcHJv ZHVjZSB0aGUgcXVvdGVkIGxpdGVyYWwgaW50byB0aGUgb3V0cHV0IFN0cmluZ0luZm8gKi8KKwlh cHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzJXMlcyIsIGRxZGVsaW0uZGF0YSwgc3RyLCBkcWRlbGlt LmRhdGEpOworCXBmcmVlKGRxZGVsaW0uZGF0YSk7CisJcGZyZWUoc3RyKTsKK30KKworLyoKKyAq IEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYW4gaW50ZWdlciBxdWFudGl0eS4KKyAqLworc3RhdGlj IHZvaWQKK2V4cGFuZF9qc29udmFsX251bWJlcihTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAq anNvbnZhbCkKK3sKKwljaGFyICpzdHJkYXR1bTsKKworCXN0cmRhdHVtID0gRGF0dW1HZXRDU3Ry aW5nKERpcmVjdEZ1bmN0aW9uQ2FsbDEobnVtZXJpY19vdXQsCisJCQkJCQkJCQkJCQkgICBOdW1l cmljR2V0RGF0dW0oanNvbnZhbC0+dmFsLm51bWVyaWMpKSk7CisJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZyhidWYsIHN0cmRhdHVtKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUgYXMg YSByb2xlIG5hbWUuICBJZiB0aGUgaXNfcHVibGljIGVsZW1lbnQgaXMgc2V0IHRvCisgKiB0cnVl LCBQVUJMSUMgaXMgZXhwYW5kZWQgKG5vIHF1b3Rlcyk7IG90aGVyd2lzZSwgZXhwYW5kIHRoZSBn aXZlbiByb2xlIG5hbWUsCisgKiBxdW90aW5nIGFzIGFuIGlkZW50aWZpZXIuCisgKi8KK3N0YXRp YyB2b2lkCitleHBhbmRfanNvbnZhbF9yb2xlKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpq c29udmFsKQoreworCXRyaXZhbHVlCWlzX3B1YmxpYzsKKworCWlzX3B1YmxpYyA9IGZpbmRfYm9v bF9pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJ CSJpc19wdWJsaWMiKTsKKwlpZiAoaXNfcHVibGljID09IHR2X3RydWUpCisJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoYnVmLCAiUFVCTElDIik7CisJZWxzZQorCXsKKwkJY2hhciAqcm9sZW5hbWU7 CisKKwkJcm9sZW5hbWUgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52 YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJCQkgInJvbGVuYW1lIiwgZmFsc2UsIE5VTEwpOwor CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgcXVvdGVfaWRlbnRpZmllcihyb2xlbmFtZSkp OworCX0KK30KKworLyoKKyAqIEV4cGFuZCBvbmUganNvbiBlbGVtZW50IGludG8gdGhlIG91dHB1 dCBTdHJpbmdJbmZvIGFjY29yZGluZyB0byB0aGUKKyAqIGNvbnZlcnNpb24gc3BlY2lmaWVyLiAg VGhlIGVsZW1lbnQgdHlwZSBpcyB2YWxpZGF0ZWQsIGFuZCBhbiBlcnJvciBpcyByYWlzZWQKKyAq IGlmIGl0IGRvZXNuJ3QgbWF0Y2ggd2hhdCB3ZSBleHBlY3QgZm9yIHRoZSBjb252ZXJzaW9uIHNw ZWNpZmllci4KKyAqCisgKiBSZXR1cm5zIGZhbHNlIGlmIG5vIGFjdHVhbCBleHBhbnNpb24gd2Fz IG1hZGUgKGR1ZSB0byB0aGUgInByZXNlbnQiIGZsYWcKKyAqIGJlaW5nIHNldCB0byAiZmFsc2Ui IGluIGZvcm1hdHRlZCBzdHJpbmcgZXhwYW5zaW9uKS4KKyAqLworc3RhdGljIGJvb2wKK2V4cGFu ZF9vbmVfanNvbmJfZWxlbWVudChTdHJpbmdJbmZvIGJ1ZiwgY2hhciAqcGFyYW0sIEpzb25iVmFs dWUgKmpzb252YWwsCisJCQkJCQkgY29udlNwZWNpZmllciBzcGVjaWZpZXIsIGNvbnN0IGNoYXIg KmZtdCkKK3sKKwlib29sIHJlc3VsdCA9IHRydWU7CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgc3Fs ZXJyY29udGV4dDsKKworCS8qIElmIHdlIHdlcmUgZ2l2ZW4gYSBmb3JtYXQgc3RyaW5nLCBzZXR1 cCBhbiBlcmVwb3J0KCkgY29udGV4dCBjYWxsYmFjayAqLworCWlmIChmbXQpCisJeworCQlzcWxl cnJjb250ZXh0LmNhbGxiYWNrID0gZm10c3RyX2Vycm9yX2NhbGxiYWNrOworCQlzcWxlcnJjb250 ZXh0LmFyZyA9ICh2b2lkICopIGZtdDsKKwkJc3FsZXJyY29udGV4dC5wcmV2aW91cyA9IGVycm9y X2NvbnRleHRfc3RhY2s7CisJCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmc3FsZXJyY29udGV4dDsK Kwl9CisKKwlpZiAoIWpzb252YWwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJS Q09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZWxlbWVudCBcIiVz XCIgbm90IGZvdW5kIiwgcGFyYW0pKSk7CisKKwlzd2l0Y2ggKHNwZWNpZmllcikKKwl7CisJCWNh c2UgU3BlY0lkZW50aWZpZXI6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZTdHJpbmcpCisJ CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVU RVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBzdHJpbmcgZm9yICUlSSBl bGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7 CisJCQlleHBhbmRfanNvbnZhbF9pZGVudGlmaWVyKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsK KworCQljYXNlIFNwZWNEb3R0ZWROYW1lOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2Qmlu YXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURf UEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gb2JqZWN0IGZv ciAlJUQgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50 eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfZG90dGVkbmFtZShidWYsIGpzb252YWwpOworCQkJ YnJlYWs7CisKKwkJY2FzZSBTcGVjU3RyaW5nOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2 U3RyaW5nICYmCisJCQkJanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChF UlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAor CQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBzdHJpbmcgb3Igb2JqZWN0IGZvciAlJXMgZWxl bWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOwor CQkJcmVzdWx0ID0gZXhwYW5kX2pzb252YWxfc3RyaW5nKGJ1ZiwganNvbnZhbCk7CisJCQlicmVh azsKKworCQljYXNlIFNwZWNTdHJpbmdMaXRlcmFsOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0g amJ2U3RyaW5nKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lO VkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gc3Ry aW5nIGZvciAlJUwgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29u dmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfc3RybGl0KGJ1ZiwganNvbnZhbCk7CisJ CQlicmVhazsKKworCQljYXNlIFNwZWNUeXBlbmFtZToKKwkJCWlmIChqc29udmFsLT50eXBlICE9 IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9J TlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIG9i amVjdCBmb3IgJSVUIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNv bnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX3R5cGVuYW1lKGJ1ZiwganNvbnZhbCk7 CisJCQlicmVhazsKKworCQljYXNlIFNwZWNPcGVyYXRvcm5hbWU6CisJCQlpZiAoanNvbnZhbC0+ dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQg SlNPTiBvYmplY3QgZm9yICUlTyBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFy YW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9vcGVyYXRvcihidWYsIGpz b252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjTnVtYmVyOgorCQkJaWYgKGpzb252YWwt PnR5cGUgIT0gamJ2TnVtZXJpYykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUo RVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3Rl ZCBKU09OIG51bWVyaWMgZm9yICUlbiBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJ cGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9udW1iZXIoYnVmLCBq c29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY1JvbGU6CisJCQlpZiAoanNvbnZhbC0+ dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQg SlNPTiBvYmplY3QgZm9yICUlUiBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFy YW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9yb2xlKGJ1ZiwganNvbnZh bCk7CisJCQlicmVhazsKKwl9CisKKwlpZiAoZm10KQorCQllcnJvcl9jb250ZXh0X3N0YWNrID0g c3FsZXJyY29udGV4dC5wcmV2aW91czsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBJ dGVyYXRlIG9uIHRoZSBlbGVtZW50cyBvZiBhIEpTT04gYXJyYXksIGV4cGFuZGluZyBlYWNoIG9u ZSBpbnRvIHRoZSBvdXRwdXQKKyAqIFN0cmluZ0luZm8gcGVyIHRoZSBnaXZlbiBjb252ZXJzaW9u IHNwZWNpZmllciwgc2VwYXJhdGVkIGJ5IHRoZSBnaXZlbgorICogc2VwYXJhdG9yLgorICovCitz dGF0aWMgdm9pZAorZXhwYW5kX2pzb25iX2FycmF5KFN0cmluZ0luZm8gYnVmLCBjaGFyICpwYXJh bSwKKwkJCQkgICBKc29uYlZhbHVlICpqc29uYXJyLCBjaGFyICphcnJheXNlcCwgY29udlNwZWNp ZmllciBzcGVjaWZpZXIsCisJCQkJICAgY29uc3QgY2hhciAqZm10KQoreworCUVycm9yQ29udGV4 dENhbGxiYWNrIHNxbGVycmNvbnRleHQ7CisJSnNvbmJDb250YWluZXIgKmNvbnRhaW5lcjsKKwlK c29uYkl0ZXJhdG9yICAqaXQ7CisJSnNvbmJWYWx1ZQl2OworCWludAkJCXR5cGU7CisJYm9vbAkJ Zmlyc3QgPSB0cnVlOworCVN0cmluZ0luZm9EYXRhIGFycmF5ZWxlbTsKKworCS8qIElmIHdlIHdl cmUgZ2l2ZW4gYSBmb3JtYXQgc3RyaW5nLCBzZXR1cCBhbiBlcmVwb3J0KCkgY29udGV4dCBjYWxs YmFjayAqLworCWlmIChmbXQpCisJeworCQlzcWxlcnJjb250ZXh0LmNhbGxiYWNrID0gZm10c3Ry X2Vycm9yX2NhbGxiYWNrOworCQlzcWxlcnJjb250ZXh0LmFyZyA9ICh2b2lkICopIGZtdDsKKwkJ c3FsZXJyY29udGV4dC5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJCWVycm9yX2Nv bnRleHRfc3RhY2sgPSAmc3FsZXJyY29udGV4dDsKKwl9CisKKwlpZiAoanNvbmFyci0+dHlwZSAh PSBqYnZCaW5hcnkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZB TElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90 IGEgSlNPTiBhcnJheSIsIHBhcmFtKSkpOworCisJY29udGFpbmVyID0ganNvbmFyci0+dmFsLmJp bmFyeS5kYXRhOworCWlmICghSnNvbkNvbnRhaW5lcklzQXJyYXkoY29udGFpbmVyKSkKKwkJZXJl cG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVF KSwKKwkJCQkgZXJybXNnKCJlbGVtZW50IFwiJXNcIiBpcyBub3QgYSBKU09OIGFycmF5IiwgcGFy YW0pKSk7CisKKwlpbml0U3RyaW5nSW5mbygmYXJyYXllbGVtKTsKKworCWl0ID0gSnNvbmJJdGVy YXRvckluaXQoY29udGFpbmVyKTsKKwl3aGlsZSAoKHR5cGUgPSBKc29uYkl0ZXJhdG9yTmV4dCgm aXQsICZ2LCB0cnVlKSkgIT0gV0pCX0RPTkUpCisJeworCQlpZiAodHlwZSA9PSBXSkJfRUxFTSkK KwkJeworCQkJcmVzZXRTdHJpbmdJbmZvKCZhcnJheWVsZW0pOworCisJCQlpZiAoZXhwYW5kX29u ZV9qc29uYl9lbGVtZW50KCZhcnJheWVsZW0sIHBhcmFtLCAmdiwgc3BlY2lmaWVyLCBOVUxMKSkK KwkJCXsKKwkJCQlpZiAoIWZpcnN0KQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwg YXJyYXlzZXApOworCisJCQkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbyhidWYsIGFycmF5ZWxlbS5k YXRhLCBhcnJheWVsZW0ubGVuKTsKKwkJCQlmaXJzdCA9IGZhbHNlOworCQkJfQorCQl9CisJfQor CisJaWYgKGZtdCkKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9IHNxbGVycmNvbnRleHQucHJldmlv dXM7Cit9CisKKy8qCisgKiBXb3JraG9yc2UgZm9yIGRkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5k LgorICovCitjaGFyICoKK2RkbF9kZXBhcnNlX2pzb25fdG9fc3RyaW5nKGNoYXIgKmpzb25fc3Ry KQoreworCURhdHVtCQlkOworCUpzb25iCSAgICpqc29uYjsKKwlTdHJpbmdJbmZvIGJ1ZiA9IChT dHJpbmdJbmZvKSBwYWxsb2MwKHNpemVvZihTdHJpbmdJbmZvRGF0YSkpOworCisJaW5pdFN0cmlu Z0luZm8oYnVmKTsKKworCWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwxKGpzb25iX2luLAorCQkJCQkJ CVBvaW50ZXJHZXREYXR1bShqc29uX3N0cikpOworCWpzb25iID0gKEpzb25iICopIERhdHVtR2V0 UG9pbnRlcihkKTsKKworCWV4cGFuZF9mbXRfcmVjdXJzaXZlKCZqc29uYi0+cm9vdCwgYnVmKTsK KworCXJldHVybiBidWYtPmRhdGE7Cit9CisKKy8qLS0tLS0tCisgKiBSZXR1cm5zIGEgZm9ybWF0 dGVkIHN0cmluZyBmcm9tIGEgSlNPTiBvYmplY3QuCisgKgorICogVGhlIHN0YXJ0aW5nIHBvaW50 IGlzIHRoZSBlbGVtZW50IG5hbWVkICJmbXQiICh3aGljaCBtdXN0IGJlIGEgc3RyaW5nKS4KKyAq IFRoaXMgZm9ybWF0IHN0cmluZyBtYXkgY29udGFpbiB6ZXJvIG9yIG1vcmUgJS1lc2NhcGVzLCB3 aGljaCBjb25zaXN0IG9mIGFuCisgKiBlbGVtZW50IG5hbWUgZW5jbG9zZWQgaW4geyB9LCBwb3Nz aWJseSBmb2xsb3dlZCBieSBhIGNvbnZlcnNpb24gbW9kaWZpZXIsCisgKiBmb2xsb3dlZCBieSBh IGNvbnZlcnNpb24gc3BlY2lmaWVyLiAgUG9zc2libGUgY29udmVyc2lvbiBzcGVjaWZpZXJzIGFy ZToKKyAqCisgKiAlCQlleHBhbmQgdG8gYSBsaXRlcmFsICUuCisgKiBJCQlleHBhbmQgYXMgYSBz aW5nbGUsIG5vbi1xdWFsaWZpZWQgaWRlbnRpZmllcgorICogRAkJZXhwYW5kIGFzIGEgcG9zc2li bHktcXVhbGlmaWVkIGlkZW50aWZpZXIKKyAqIFQJCWV4cGFuZCBhcyBhIHR5cGUgbmFtZQorICog TwkJZXhwYW5kIGFzIGFuIG9wZXJhdG9yIG5hbWUKKyAqIEwJCWV4cGFuZCBhcyBhIHN0cmluZyBs aXRlcmFsIChxdW90ZSB1c2luZyBzaW5nbGUgcXVvdGVzKQorICogcwkJZXhwYW5kIGFzIGEgc2lt cGxlIHN0cmluZyAobm8gcXVvdGluZykKKyAqIG4JCWV4cGFuZCBhcyBhIHNpbXBsZSBudW1iZXIg KG5vIHF1b3RpbmcpCisgKiBSCQlleHBhbmQgYXMgYSByb2xlIG5hbWUgKHBvc3NpYmx5IHF1b3Rl ZCBuYW1lLCBvciBQVUJMSUMpCisgKgorICogVGhlIGVsZW1lbnQgbmFtZSBtYXkgaGF2ZSBhbiBv cHRpb25hbCBzZXBhcmF0b3Igc3BlY2lmaWNhdGlvbiBwcmVjZWRlZAorICogYnkgYSBjb2xvbi4g IEl0cyBwcmVzZW5jZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBpcyBleHBlY3RlZCB0byBi ZQorICogYW4gYXJyYXk7IHRoZSBzcGVjaWZpZWQgc2VwYXJhdG9yIGlzIHVzZWQgdG8gam9pbiB0 aGUgYXJyYXkgZWxlbWVudHMuCisgKi0tLS0tLQorICovCitEYXR1bQorZGRsX2RlcGFyc2VfZXhw YW5kX2NvbW1hbmQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwl0ZXh0CSAgICpqc29uID0gUEdfR0VU QVJHX1RFWFRfUCgwKTsKKwljaGFyCSAgICpqc29uX3N0cjsKKworCWpzb25fc3RyID0gVGV4dERh dHVtR2V0Q1N0cmluZyhqc29uKTsKKworCVBHX1JFVFVSTl9URVhUX1AoQ1N0cmluZ0dldFRleHRE YXR1bShkZGxfZGVwYXJzZV9qc29uX3RvX3N0cmluZyhqc29uX3N0cikpKTsKK30KKworLyoKKyAq IEVycm9yIGNvbnRleHQgY2FsbGJhY2sgZm9yIEpTT04gZm9ybWF0IHN0cmluZyBleHBhbnNpb24u CisgKgorICogUG9zc2libGUgaW1wcm92ZW1lbnQ6IGluZGljYXRlIHdoaWNoIGVsZW1lbnQgd2Un cmUgZXhwYW5kaW5nLCBpZiBhcHBsaWNhYmxlLgorICovCitzdGF0aWMgdm9pZAorZm10c3RyX2Vy cm9yX2NhbGxiYWNrKHZvaWQgKmFyZykKK3sKKwllcnJjb250ZXh0KCJ3aGlsZSBleHBhbmRpbmcg Zm9ybWF0IHN0cmluZyBcIiVzXCIiLCAoY2hhciAqKSBhcmcpOworCit9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2Vx dWVuY2UuYwppbmRleCBiMGIyMTE4Li4yODlhNWRlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j b21tYW5kcy9zZXF1ZW5jZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMK QEAgLTE3MDAsNiArMTcwMCwzOSBAQCBwcm9jZXNzX293bmVkX2J5KFJlbGF0aW9uIHNlcXJlbCwg TGlzdCAqb3duZWRfYnksIGJvb2wgZm9yX2lkZW50aXR5KQogCQlyZWxhdGlvbl9jbG9zZSh0YWJs ZXJlbCwgTm9Mb2NrKTsKIH0KIAorLyoKKyAqIFJldHVybiBzZXF1ZW5jZSBwYXJhbWV0ZXJzLCBk ZXRhaWxlZAorICovCitGb3JtX3BnX3NlcXVlbmNlX2RhdGEKK2dldF9zZXF1ZW5jZV92YWx1ZXMo T2lkIHNlcXVlbmNlSWQpCit7CisJQnVmZmVyICAgICAgYnVmOworCVNlcVRhYmxlICAgIGVsbTsK KwlSZWxhdGlvbiAgICBzZXFyZWw7CisJSGVhcFR1cGxlRGF0YSBzZXF0dXBsZTsKKwlGb3JtX3Bn X3NlcXVlbmNlX2RhdGEgc2VxOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSByZXRTZXE7CisKKwkv KiBPcGVuIGFuZCBBY2Nlc3NTaGFyZUxvY2sgc2VxdWVuY2UgKi8KKwlpbml0X3NlcXVlbmNlKHNl cXVlbmNlSWQsICZlbG0sICZzZXFyZWwpOworCisJaWYgKHBnX2NsYXNzX2FjbGNoZWNrKHNlcXVl bmNlSWQsIEdldFVzZXJJZCgpLAorCQkJQUNMX1NFTEVDVCB8IEFDTF9VUERBVEUgfCBBQ0xfVVNB R0UpICE9IEFDTENIRUNLX09LKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJD T0RFX0lOU1VGRklDSUVOVF9QUklWSUxFR0UpLAorCQkJCQkgZXJybXNnKCJwZXJtaXNzaW9uIGRl bmllZCBmb3Igc2VxdWVuY2UgJXMiLAorCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHNl cXJlbCkpKSk7CisKKwlzZXEgPSByZWFkX3NlcV90dXBsZShzZXFyZWwsICZidWYsICZzZXF0dXBs ZSk7CisJcmV0U2VxID0gcGFsbG9jKHNpemVvZihGb3JtRGF0YV9wZ19zZXF1ZW5jZV9kYXRhKSk7 CisKKwltZW1jcHkocmV0U2VxLCBzZXEsIHNpemVvZihGb3JtRGF0YV9wZ19zZXF1ZW5jZV9kYXRh KSk7CisKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1Zik7CisJcmVsYXRpb25fY2xvc2Uoc2VxcmVs LCBOb0xvY2spOworCisJcmV0dXJuIHJldFNlcTsKK30KIAogLyoKICAqIFJldHVybiBzZXF1ZW5j ZSBwYXJhbWV0ZXJzIGluIGEgbGlzdCBvZiB0aGUgZm9ybSBjcmVhdGVkIGJ5IHRoZSBwYXJzZXIu CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jCmluZGV4IDA2MGZkN2UuLjZhZjIyNTcgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVk ZSAidXRpbHMvbnVtZXJpYy5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAKLXN0YXRp YyBjaGFyICpwcmludFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQzMiB0eXBtb2QsIE9p ZCB0eXBtb2RvdXQpOwogCiAKIC8qCkBAIC0zNjcsNyArMzY2LDcgQEAgZm9ybWF0X3R5cGVfd2l0 aF90eXBlbW9kKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCkKIC8qCiAgKiBBZGQgdHlwbW9k IGRlY29yYXRpb24gdG8gdGhlIGJhc2ljIHR5cGUgbmFtZQogICovCi1zdGF0aWMgY2hhciAqCitj aGFyICoKIHByaW50VHlwbW9kKGNvbnN0IGNoYXIgKnR5cG5hbWUsIGludDMyIHR5cG1vZCwgT2lk IHR5cG1vZG91dCkKIHsKIAljaGFyCSAgICpyZXM7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvcnVsZXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMK aW5kZXggZDU3NWFhMC4uOTVlNjc4MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3J1bGV1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwpAQCAt MzU4LDcgKzM1OCw2IEBAIHN0YXRpYyBpbnQJcHJpbnRfZnVuY3Rpb25fYXJndW1lbnRzKFN0cmlu Z0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCwKIAkJCQkJCQkJCSBib29sIHByaW50X3RhYmxl X2FyZ3MsIGJvb2wgcHJpbnRfZGVmYXVsdHMpOwogc3RhdGljIHZvaWQgcHJpbnRfZnVuY3Rpb25f cmV0dHlwZShTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXApOwogc3RhdGljIHZvaWQg cHJpbnRfZnVuY3Rpb25fdHJmdHlwZXMoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVw KTsKLXN0YXRpYyB2b2lkIHByaW50X2Z1bmN0aW9uX3NxbGJvZHkoU3RyaW5nSW5mbyBidWYsIEhl YXBUdXBsZSBwcm9jdHVwKTsKIHN0YXRpYyB2b2lkIHNldF9ydGFibGVfbmFtZXMoZGVwYXJzZV9u YW1lc3BhY2UgKmRwbnMsIExpc3QgKnBhcmVudF9uYW1lc3BhY2VzLAogCQkJCQkJCSBCaXRtYXBz ZXQgKnJlbHNfdXNlZCk7CiBzdGF0aWMgdm9pZCBzZXRfZGVwYXJzZV9mb3JfcXVlcnkoZGVwYXJz ZV9uYW1lc3BhY2UgKmRwbnMsIFF1ZXJ5ICpxdWVyeSwKQEAgLTQ4OCwyMiArNDg3LDE1IEBAIHN0 YXRpYyB2b2lkIGdldF9mcm9tX2NsYXVzZV9jb2xkZWZsaXN0KFJhbmdlVGJsRnVuY3Rpb24gKnJ0 ZnVuYywKIAkJCQkJCQkJCSAgIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgdm9p ZCBnZXRfdGFibGVzYW1wbGVfZGVmKFRhYmxlU2FtcGxlQ2xhdXNlICp0YWJsZXNhbXBsZSwKIAkJ CQkJCQkJZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKLXN0YXRpYyB2b2lkIGdldF9vcGNsYXNz X25hbWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1YWxfZGF0YXR5cGUsCi0JCQkJCQkJIFN0cmluZ0lu Zm8gYnVmKTsKIHN0YXRpYyBOb2RlICpwcm9jZXNzSW5kaXJlY3Rpb24oTm9kZSAqbm9kZSwgZGVw YXJzZV9jb250ZXh0ICpjb250ZXh0KTsKIHN0YXRpYyB2b2lkIHByaW50U3Vic2NyaXB0cyhTdWJz Y3JpcHRpbmdSZWYgKnNic3JlZiwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKIHN0YXRpYyBj aGFyICpnZXRfcmVsYXRpb25fbmFtZShPaWQgcmVsaWQpOwogc3RhdGljIGNoYXIgKmdlbmVyYXRl X3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkLCBMaXN0ICpuYW1lc3BhY2VzKTsKIHN0YXRpYyBjaGFy ICpnZW5lcmF0ZV9xdWFsaWZpZWRfcmVsYXRpb25fbmFtZShPaWQgcmVsaWQpOwotc3RhdGljIGNo YXIgKmdlbmVyYXRlX2Z1bmN0aW9uX25hbWUoT2lkIGZ1bmNpZCwgaW50IG5hcmdzLAotCQkJCQkJ CQkJTGlzdCAqYXJnbmFtZXMsIE9pZCAqYXJndHlwZXMsCi0JCQkJCQkJCQlib29sIGhhc192YXJp YWRpYywgYm9vbCAqdXNlX3ZhcmlhZGljX3AsCi0JCQkJCQkJCQlQYXJzZUV4cHJLaW5kIHNwZWNp YWxfZXhwcmtpbmQpOwogc3RhdGljIGNoYXIgKmdlbmVyYXRlX29wZXJhdG9yX25hbWUoT2lkIG9w ZXJpZCwgT2lkIGFyZzEsIE9pZCBhcmcyKTsKIHN0YXRpYyB2b2lkIGFkZF9jYXN0X3RvKFN0cmlu Z0luZm8gYnVmLCBPaWQgdHlwaWQpOwogc3RhdGljIGNoYXIgKmdlbmVyYXRlX3F1YWxpZmllZF90 eXBlX25hbWUoT2lkIHR5cGlkKTsKIHN0YXRpYyB0ZXh0ICpzdHJpbmdfdG9fdGV4dChjaGFyICpz dHIpOwotc3RhdGljIGNoYXIgKmZsYXR0ZW5fcmVsb3B0aW9ucyhPaWQgcmVsaWQpOwogc3RhdGlj IHZvaWQgZ2V0X3JlbG9wdGlvbnMoU3RyaW5nSW5mbyBidWYsIERhdHVtIHJlbG9wdGlvbnMpOwog c3RhdGljIHZvaWQgZ2V0X2pzb25fcGF0aF9zcGVjKE5vZGUgKnBhdGhfc3BlYywgZGVwYXJzZV9j b250ZXh0ICpjb250ZXh0LAogCQkJCQkJCSAgIGJvb2wgc2hvd2ltcGxpY2l0KTsKQEAgLTEwMjUs NjUgKzEwMTcsMTIgQEAgcGdfZ2V0X3RyaWdnZXJkZWZfd29ya2VyKE9pZCB0cmlnaWQsIGJvb2wg cHJldHR5KQogCWlmICghaXNudWxsKQogCXsKIAkJTm9kZQkgICAqcXVhbDsKLQkJY2hhcgkJcmVs a2luZDsKLQkJZGVwYXJzZV9jb250ZXh0IGNvbnRleHQ7Ci0JCWRlcGFyc2VfbmFtZXNwYWNlIGRw bnM7Ci0JCVJhbmdlVGJsRW50cnkgKm9sZHJ0ZTsKLQkJUmFuZ2VUYmxFbnRyeSAqbmV3cnRlOwot Ci0JCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmJ1ZiwgIldIRU4gKCIpOworCQljaGFyICAgICAg ICpxdWFsc3RyOwogCiAJCXF1YWwgPSBzdHJpbmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0cmluZyh2 YWx1ZSkpOworCQlxdWFsc3RyID0gcGdfZ2V0X3RyaWdnZXJfd2hlbmNsYXVzZSh0cmlncmVjLCBx dWFsLCBwcmV0dHkpOwogCi0JCXJlbGtpbmQgPSBnZXRfcmVsX3JlbGtpbmQodHJpZ3JlYy0+dGdy ZWxpZCk7Ci0KLQkJLyogQnVpbGQgbWluaW1hbCBPTEQgYW5kIE5FVyBSVEVzIGZvciB0aGUgcmVs ICovCi0JCW9sZHJ0ZSA9IG1ha2VOb2RlKFJhbmdlVGJsRW50cnkpOwotCQlvbGRydGUtPnJ0ZWtp bmQgPSBSVEVfUkVMQVRJT047Ci0JCW9sZHJ0ZS0+cmVsaWQgPSB0cmlncmVjLT50Z3JlbGlkOwot CQlvbGRydGUtPnJlbGtpbmQgPSByZWxraW5kOwotCQlvbGRydGUtPnJlbGxvY2ttb2RlID0gQWNj ZXNzU2hhcmVMb2NrOwotCQlvbGRydGUtPmFsaWFzID0gbWFrZUFsaWFzKCJvbGQiLCBOSUwpOwot CQlvbGRydGUtPmVyZWYgPSBvbGRydGUtPmFsaWFzOwotCQlvbGRydGUtPmxhdGVyYWwgPSBmYWxz ZTsKLQkJb2xkcnRlLT5pbmggPSBmYWxzZTsKLQkJb2xkcnRlLT5pbkZyb21DbCA9IHRydWU7Ci0K LQkJbmV3cnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7Ci0JCW5ld3J0ZS0+cnRla2luZCA9 IFJURV9SRUxBVElPTjsKLQkJbmV3cnRlLT5yZWxpZCA9IHRyaWdyZWMtPnRncmVsaWQ7Ci0JCW5l d3J0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7Ci0JCW5ld3J0ZS0+cmVsbG9ja21vZGUgPSBBY2Nlc3NT aGFyZUxvY2s7Ci0JCW5ld3J0ZS0+YWxpYXMgPSBtYWtlQWxpYXMoIm5ldyIsIE5JTCk7Ci0JCW5l d3J0ZS0+ZXJlZiA9IG5ld3J0ZS0+YWxpYXM7Ci0JCW5ld3J0ZS0+bGF0ZXJhbCA9IGZhbHNlOwot CQluZXdydGUtPmluaCA9IGZhbHNlOwotCQluZXdydGUtPmluRnJvbUNsID0gdHJ1ZTsKLQotCQkv KiBCdWlsZCB0d28tZWxlbWVudCBydGFibGUgKi8KLQkJbWVtc2V0KCZkcG5zLCAwLCBzaXplb2Yo ZHBucykpOwotCQlkcG5zLnJ0YWJsZSA9IGxpc3RfbWFrZTIob2xkcnRlLCBuZXdydGUpOwotCQlk cG5zLnN1YnBsYW5zID0gTklMOwotCQlkcG5zLmN0ZXMgPSBOSUw7Ci0JCWRwbnMuYXBwZW5kcmVs cyA9IE5VTEw7Ci0JCXNldF9ydGFibGVfbmFtZXMoJmRwbnMsIE5JTCwgTlVMTCk7Ci0JCXNldF9z aW1wbGVfY29sdW1uX25hbWVzKCZkcG5zKTsKLQotCQkvKiBTZXQgdXAgY29udGV4dCB3aXRoIG9u ZS1kZWVwIG5hbWVzcGFjZSBzdGFjayAqLwotCQljb250ZXh0LmJ1ZiA9ICZidWY7Ci0JCWNvbnRl eHQubmFtZXNwYWNlcyA9IGxpc3RfbWFrZTEoJmRwbnMpOwotCQljb250ZXh0LndpbmRvd0NsYXVz ZSA9IE5JTDsKLQkJY29udGV4dC53aW5kb3dUTGlzdCA9IE5JTDsKLQkJY29udGV4dC52YXJwcmVm aXggPSB0cnVlOwotCQljb250ZXh0LnByZXR0eUZsYWdzID0gR0VUX1BSRVRUWV9GTEFHUyhwcmV0 dHkpOwotCQljb250ZXh0LndyYXBDb2x1bW4gPSBXUkFQX0NPTFVNTl9ERUZBVUxUOwotCQljb250 ZXh0LmluZGVudExldmVsID0gUFJFVFRZSU5ERU5UX1NURDsKLQkJY29udGV4dC5zcGVjaWFsX2V4 cHJraW5kID0gRVhQUl9LSU5EX05PTkU7Ci0JCWNvbnRleHQuYXBwZW5kcGFyZW50cyA9IE5VTEw7 Ci0KLQkJZ2V0X3J1bGVfZXhwcihxdWFsLCAmY29udGV4dCwgZmFsc2UpOwotCi0JCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoJmJ1ZiwgIikgIik7CisJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIldI RU4gKCVzKSAiLCBxdWFsc3RyKTsKIAl9CiAKIAlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJFWEVD VVRFIEZVTkNUSU9OICVzKCIsCkBAIC0xMTI0LDYgKzEwNjMsNjQgQEAgcGdfZ2V0X3RyaWdnZXJk ZWZfd29ya2VyKE9pZCB0cmlnaWQsIGJvb2wgcHJldHR5KQogCXJldHVybiBidWYuZGF0YTsKIH0K IAorY2hhciAqCitwZ19nZXRfdHJpZ2dlcl93aGVuY2xhdXNlKEZvcm1fcGdfdHJpZ2dlciB0cmln cmVjLCBOb2RlICp3aGVuQ2xhdXNlLCBib29sIHByZXR0eSkKK3sKKwlTdHJpbmdJbmZvRGF0YSBi dWY7CisJY2hhciAgICAgICAgcmVsa2luZDsKKwlkZXBhcnNlX2NvbnRleHQgY29udGV4dDsKKwlk ZXBhcnNlX25hbWVzcGFjZSBkcG5zOworCVJhbmdlVGJsRW50cnkgKm9sZHJ0ZTsKKwlSYW5nZVRi bEVudHJ5ICpuZXdydGU7CisKKyAgIGluaXRTdHJpbmdJbmZvKCZidWYpOworCisgICByZWxraW5k ID0gZ2V0X3JlbF9yZWxraW5kKHRyaWdyZWMtPnRncmVsaWQpOworCisgICAvKiBCdWlsZCBtaW5p bWFsIE9MRCBhbmQgTkVXIFJURXMgZm9yIHRoZSByZWwgKi8KKyAgIG9sZHJ0ZSA9IG1ha2VOb2Rl KFJhbmdlVGJsRW50cnkpOworICAgb2xkcnRlLT5ydGVraW5kID0gUlRFX1JFTEFUSU9OOworICAg b2xkcnRlLT5yZWxpZCA9IHRyaWdyZWMtPnRncmVsaWQ7CisgICBvbGRydGUtPnJlbGtpbmQgPSBy ZWxraW5kOworICAgb2xkcnRlLT5hbGlhcyA9IG1ha2VBbGlhcygib2xkIiwgTklMKTsKKyAgIG9s ZHJ0ZS0+ZXJlZiA9IG9sZHJ0ZS0+YWxpYXM7CisgICBvbGRydGUtPmxhdGVyYWwgPSBmYWxzZTsK KyAgIG9sZHJ0ZS0+aW5oID0gZmFsc2U7CisgICBvbGRydGUtPmluRnJvbUNsID0gdHJ1ZTsKKwor ICAgbmV3cnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7CisgICBuZXdydGUtPnJ0ZWtpbmQg PSBSVEVfUkVMQVRJT047CisgICBuZXdydGUtPnJlbGlkID0gdHJpZ3JlYy0+dGdyZWxpZDsKKyAg IG5ld3J0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7CisgICBuZXdydGUtPmFsaWFzID0gbWFrZUFsaWFz KCJuZXciLCBOSUwpOworICAgbmV3cnRlLT5lcmVmID0gbmV3cnRlLT5hbGlhczsKKyAgIG5ld3J0 ZS0+bGF0ZXJhbCA9IGZhbHNlOworICAgbmV3cnRlLT5pbmggPSBmYWxzZTsKKyAgIG5ld3J0ZS0+ aW5Gcm9tQ2wgPSB0cnVlOworCisgICAvKiBCdWlsZCB0d28tZWxlbWVudCBydGFibGUgKi8KKyAg IG1lbXNldCgmZHBucywgMCwgc2l6ZW9mKGRwbnMpKTsKKyAgIGRwbnMucnRhYmxlID0gbGlzdF9t YWtlMihvbGRydGUsIG5ld3J0ZSk7CisgICBkcG5zLmN0ZXMgPSBOSUw7CisgICBzZXRfcnRhYmxl X25hbWVzKCZkcG5zLCBOSUwsIE5VTEwpOworICAgc2V0X3NpbXBsZV9jb2x1bW5fbmFtZXMoJmRw bnMpOworCisgICAvKiBTZXQgdXAgY29udGV4dCB3aXRoIG9uZS1kZWVwIG5hbWVzcGFjZSBzdGFj ayAqLworICAgY29udGV4dC5idWYgPSAmYnVmOworICAgY29udGV4dC5uYW1lc3BhY2VzID0gbGlz dF9tYWtlMSgmZHBucyk7CisgICBjb250ZXh0LndpbmRvd0NsYXVzZSA9IE5JTDsKKyAgIGNvbnRl eHQud2luZG93VExpc3QgPSBOSUw7CisgICBjb250ZXh0LnZhcnByZWZpeCA9IHRydWU7CisgICBj b250ZXh0LnByZXR0eUZsYWdzID0gcHJldHR5ID8gUFJFVFRZRkxBR19QQVJFTiB8IFBSRVRUWUZM QUdfSU5ERU5UIDogUFJFVFRZRkxBR19JTkRFTlQ7CisgICBjb250ZXh0LndyYXBDb2x1bW4gPSBX UkFQX0NPTFVNTl9ERUZBVUxUOworICAgY29udGV4dC5pbmRlbnRMZXZlbCA9IFBSRVRUWUlOREVO VF9TVEQ7CisgICBjb250ZXh0LnNwZWNpYWxfZXhwcmtpbmQgPSBFWFBSX0tJTkRfTk9ORTsKKwor ICAgZ2V0X3J1bGVfZXhwcih3aGVuQ2xhdXNlLCAmY29udGV4dCwgZmFsc2UpOworCisgICByZXR1 cm4gYnVmLmRhdGE7Cit9CisKIC8qIC0tLS0tLS0tLS0KICAqIHBnX2dldF9pbmRleGRlZgkJCS0g R2V0IHRoZSBkZWZpbml0aW9uIG9mIGFuIGluZGV4CiAgKgpAQCAtMTg5MSw2ICsxODg4LDEzIEBA IHBnX2dldF9wYXJ0a2V5ZGVmX2NvbHVtbnMoT2lkIHJlbGlkLCBib29sIHByZXR0eSkKIAlyZXR1 cm4gcGdfZ2V0X3BhcnRrZXlkZWZfd29ya2VyKHJlbGlkLCBwcmV0dHlGbGFncywgdHJ1ZSwgZmFs c2UpOwogfQogCisvKiBJbnRlcm5hbCB2ZXJzaW9uIHRoYXQgcmVwb3J0cyB0aGUgZnVsbCBwYXJ0 aXRpb24ga2V5IGRlZmluaXRpb24gKi8KK2NoYXIgKgorcGdfZ2V0X3BhcnRrZXlkZWZfc2ltcGxl KE9pZCByZWxpZCkKK3sKKwlyZXR1cm4gcGdfZ2V0X3BhcnRrZXlkZWZfd29ya2VyKHJlbGlkLCAw LCBmYWxzZSwgZmFsc2UpOworfQorCiAvKgogICogSW50ZXJuYWwgd29ya2hvcnNlIHRvIGRlY29t cGlsZSBhIHBhcnRpdGlvbiBrZXkgZGVmaW5pdGlvbi4KICAqLwpAQCAtMjE0NCw2ICsyMTQ4LDE1 IEBAIHBnX2dldF9jb25zdHJhaW50ZGVmX2V4dChQR19GVU5DVElPTl9BUkdTKQogfQogCiAvKgor ICogSW50ZXJuYWwgdmVyc2lvbiB0aGF0IHJldHVybnMgZGVmaW5pdGlvbiBvZiBhIENPTlNUUkFJ TlQgY29tbWFuZAorICovCitjaGFyICoKK3BnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2lt cGxlKE9pZCBjb25zdHJhaW50SWQpCit7CisJcmV0dXJuIHBnX2dldF9jb25zdHJhaW50ZGVmX3dv cmtlcihjb25zdHJhaW50SWQsIGZhbHNlLCAwLCBmYWxzZSk7Cit9CisKKy8qCiAgKiBJbnRlcm5h bCB2ZXJzaW9uIHRoYXQgcmV0dXJucyBhIGZ1bGwgQUxURVIgVEFCTEUgLi4uIEFERCBDT05TVFJB SU5UIGNvbW1hbmQKICAqLwogY2hhciAqCkBAIC0zNTEzLDcgKzM1MjYsNyBAQCBwZ19nZXRfZnVu Y3Rpb25fYXJnX2RlZmF1bHQoUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5fVEVYVF9QKHN0 cmluZ190b190ZXh0KHN0cikpOwogfQogCi1zdGF0aWMgdm9pZAordm9pZAogcHJpbnRfZnVuY3Rp b25fc3FsYm9keShTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXApCiB7CiAJaW50CQkJ bnVtYXJnczsKQEAgLTEyMDUzLDcgKzEyMDY2LDcgQEAgZ2V0X3RhYmxlc2FtcGxlX2RlZihUYWJs ZVNhbXBsZUNsYXVzZSAqdGFibGVzYW1wbGUsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCkKICAq IGFjdHVhbF9kYXRhdHlwZS4gIChJZiB5b3UgZG9uJ3Qgd2FudCB0aGlzIGJlaGF2aW9yLCBqdXN0 IHBhc3MKICAqIEludmFsaWRPaWQgZm9yIGFjdHVhbF9kYXRhdHlwZS4pCiAgKi8KLXN0YXRpYyB2 b2lkCit2b2lkCiBnZXRfb3BjbGFzc19uYW1lKE9pZCBvcGNsYXNzLCBPaWQgYWN0dWFsX2RhdGF0 eXBlLAogCQkJCSBTdHJpbmdJbmZvIGJ1ZikKIHsKQEAgLTEyNDQ3LDcgKzEyNDYwLDcgQEAgZ2Vu ZXJhdGVfcXVhbGlmaWVkX3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKQogICoKICAqIFRoZSByZXN1 bHQgaW5jbHVkZXMgYWxsIG5lY2Vzc2FyeSBxdW90aW5nIGFuZCBzY2hlbWEtcHJlZml4aW5nLgog ICovCi1zdGF0aWMgY2hhciAqCitjaGFyICoKIGdlbmVyYXRlX2Z1bmN0aW9uX25hbWUoT2lkIGZ1 bmNpZCwgaW50IG5hcmdzLCBMaXN0ICphcmduYW1lcywgT2lkICphcmd0eXBlcywKIAkJCQkJICAg Ym9vbCBoYXNfdmFyaWFkaWMsIGJvb2wgKnVzZV92YXJpYWRpY19wLAogCQkJCQkgICBQYXJzZUV4 cHJLaW5kIHNwZWNpYWxfZXhwcmtpbmQpCkBAIC0xMjgzMyw3ICsxMjg0Niw3IEBAIGdldF9yZWxv cHRpb25zKFN0cmluZ0luZm8gYnVmLCBEYXR1bSByZWxvcHRpb25zKQogLyoKICAqIEdlbmVyYXRl IGEgQyBzdHJpbmcgcmVwcmVzZW50aW5nIGEgcmVsYXRpb24ncyByZWxvcHRpb25zLCBvciBOVUxM IGlmIG5vbmUuCiAgKi8KLXN0YXRpYyBjaGFyICoKK2NoYXIgKgogZmxhdHRlbl9yZWxvcHRpb25z KE9pZCByZWxpZCkKIHsKIAljaGFyCSAgICpyZXN1bHQgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJv Yy5kYXQKaW5kZXggYmU0NzU4My4uM2U3ZjM2NCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBA IC0xMTg5NCw0ICsxMTg5NCwxMCBAQAogICBwcm9yZXR0eXBlID0+ICdieXRlYScsIHByb2FyZ3R5 cGVzID0+ICdwZ19icmluX21pbm1heF9tdWx0aV9zdW1tYXJ5JywKICAgcHJvc3JjID0+ICdicmlu X21pbm1heF9tdWx0aV9zdW1tYXJ5X3NlbmQnIH0sCiAKK3sgb2lkID0+ICc0NjQyJywgZGVzY3Ig PT4gJ2RlcGFyc2UgdGhlIERETCBjb21tYW5kIGludG8ganNvbiBmb3JtYXQgc3RyaW5nJywKKyAg cHJvbmFtZSA9PiAnZGRsX2RlcGFyc2VfdG9fanNvbicsIHByb3JldHR5cGUgPT4gJ3RleHQnLAor ICBwcm9hcmd0eXBlcyA9PiAncGdfZGRsX2NvbW1hbmQnLCBwcm9zcmMgPT4gJ2RkbF9kZXBhcnNl X3RvX2pzb24nIH0sCit7IG9pZCA9PiAnNDY0MycsIGRlc2NyID0+ICdleHBhbmQganNvbiBmb3Jt YXQgRERMIHRvIGEgcGxhaW4gRERMIGNvbW1hbmQnLAorICBwcm9uYW1lID0+ICdkZGxfZGVwYXJz ZV9leHBhbmRfY29tbWFuZCcsIHByb3JldHR5cGUgPT4gJ3RleHQnLAorICBwcm9hcmd0eXBlcyA9 PiAndGV4dCcsIHByb3NyYyA9PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnIH0sCiBdCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oIGIvc3JjL2luY2x1ZGUv Y29tbWFuZHMvc2VxdWVuY2UuaAppbmRleCBkMzhjMGUyLi40Y2E4NGIyIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRz L3NlcXVlbmNlLmgKQEAgLTU0LDYgKzU0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgeGxfc2VxX3JlYwog ZXh0ZXJuIGludDY0IG5leHR2YWxfaW50ZXJuYWwoT2lkIHJlbGlkLCBib29sIGNoZWNrX3Blcm1p c3Npb25zKTsKIGV4dGVybiBEYXR1bSBuZXh0dmFsKFBHX0ZVTkNUSU9OX0FSR1MpOwogZXh0ZXJu IExpc3QgKnNlcXVlbmNlX29wdGlvbnMoT2lkIHJlbGlkKTsKK2V4dGVybiBGb3JtX3BnX3NlcXVl bmNlX2RhdGEgZ2V0X3NlcXVlbmNlX3ZhbHVlcyhPaWQgc2VxdWVuY2VJZCk7CiAKIGV4dGVybiBP YmplY3RBZGRyZXNzIERlZmluZVNlcXVlbmNlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlU2Vx U3RtdCAqc3RtdCk7CiBleHRlcm4gT2JqZWN0QWRkcmVzcyBBbHRlclNlcXVlbmNlKFBhcnNlU3Rh dGUgKnBzdGF0ZSwgQWx0ZXJTZXFTdG10ICpzdG10KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3Rjb3AvZGRsX2RlcGFyc2UuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGZkZjQ3Ci0tLSAvZGV2L251bGwKKysr IGIvc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbF9kZXBhcnNlLmgKKyAqCisgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0 eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oCisg KgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgRERMX0RFUEFSU0VfSAorI2RlZmlu ZSBERExfREVQQVJTRV9ICisKKyNpbmNsdWRlICJ0Y29wL2RlcGFyc2VfdXRpbGl0eS5oIgorCitl eHRlcm4gY2hhciAqZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21k LCBib29sIHZlcmJvc2VfbW9kZSk7CitleHRlcm4gY2hhciAqZGRsX2RlcGFyc2VfanNvbl90b19z dHJpbmcoY2hhciAqanNvbmIpOworZXh0ZXJuIGNoYXIgKmRlcGFyc2VfZHJvcF9jb21tYW5kKGNv bnN0IGNoYXIgKm9iamlkZW50aXR5LCBjb25zdCBjaGFyICpvYmplY3R0eXBlLAorCQkJCQkJCQkg IERyb3BCZWhhdmlvciBiZWhhdmlvcik7CisKKworI2VuZGlmCQkvKiBERExfREVQQVJTRV9IICov CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oIGIvc3JjL2lu Y2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaAppbmRleCA5NGRlMTNkLi5iNTMyOTRiIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCisrKyBiL3NyYy9pbmNs dWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKQEAgLTYyLDYgKzYyLDcgQEAgdHlwZWRlZiBzdHJ1 Y3QgQ29sbGVjdGVkQ29tbWFuZAogCQl7CiAJCQlPaWQJCQlvYmplY3RJZDsKIAkJCU9pZAkJCWNs YXNzSWQ7CisJCQlib29sCQlyZXdyaXRlOwogCQkJTGlzdAkgICAqc3ViY21kczsKIAkJfQkJCWFs dGVyVGFibGU7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmggYi9z cmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oCmluZGV4IDIyMWMzZTYuLjg1YTYyYTEgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRp bHMvYnVpbHRpbnMuaApAQCAtMTE4LDYgKzExOCw3IEBAIGV4dGVybiBjaGFyICpmb3JtYXRfdHlw ZV9leHRlbmRlZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QsIGJpdHMxNiBmbGFncyk7CiBl eHRlcm4gY2hhciAqZm9ybWF0X3R5cGVfYmUoT2lkIHR5cGVfb2lkKTsKIGV4dGVybiBjaGFyICpm b3JtYXRfdHlwZV9iZV9xdWFsaWZpZWQoT2lkIHR5cGVfb2lkKTsKIGV4dGVybiBjaGFyICpmb3Jt YXRfdHlwZV93aXRoX3R5cGVtb2QoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kKTsKK2V4dGVy biBjaGFyICpwcmludFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQzMiB0eXBtb2QsIE9p ZCB0eXBtb2RvdXQpOwogCiBleHRlcm4gaW50MzIgdHlwZV9tYXhpbXVtX3NpemUoT2lkIHR5cGVf b2lkLCBpbnQzMiB0eXBlbW9kKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcnVs ZXV0aWxzLmggYi9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaAppbmRleCA3ZDQ4OTcxLi4z ZDY5YTYwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaAorKysgYi9z cmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaApAQCAtMTMsNiArMTMsNyBAQAogI2lmbmRlZiBS VUxFVVRJTFNfSAogI2RlZmluZSBSVUxFVVRJTFNfSAogCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190 cmlnZ2VyLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZXMuaCIKICNpbmNsdWRlICJub2Rlcy9wYXJz ZW5vZGVzLmgiCiAjaW5jbHVkZSAibm9kZXMvcGdfbGlzdC5oIgpAQCAtMjMsMTIgKzI0LDE2IEBA IHN0cnVjdCBQbGFubmVkU3RtdDsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9pbmRleGRlZl9zdHJp bmcoT2lkIGluZGV4cmVsaWQpOwogZXh0ZXJuIGNoYXIgKnBnX2dldF9pbmRleGRlZl9jb2x1bW5z KE9pZCBpbmRleHJlbGlkLCBib29sIHByZXR0eSk7CitleHRlcm4gY2hhciAqcGdfZ2V0X3RyaWdn ZXJfd2hlbmNsYXVzZShGb3JtX3BnX3RyaWdnZXIgdHJpZ3JlYywKKwkJCQkJCQkJCSAgIE5vZGUg KndoZW5DbGF1c2UsIGJvb2wgcHJldHR5KTsKIGV4dGVybiBjaGFyICpwZ19nZXRfcXVlcnlkZWYo UXVlcnkgKnF1ZXJ5LCBib29sIHByZXR0eSk7CiAKIGV4dGVybiBjaGFyICpwZ19nZXRfcGFydGtl eWRlZl9jb2x1bW5zKE9pZCByZWxpZCwgYm9vbCBwcmV0dHkpOworZXh0ZXJuIGNoYXIgKnBnX2dl dF9wYXJ0a2V5ZGVmX3NpbXBsZShPaWQgcmVsaWQpOwogZXh0ZXJuIGNoYXIgKnBnX2dldF9wYXJ0 Y29uc3RyZGVmX3N0cmluZyhPaWQgcGFydGl0aW9uSWQsIGNoYXIgKmFsaWFzbmFtZSk7CiAKIGV4 dGVybiBjaGFyICpwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kKE9pZCBjb25zdHJhaW50SWQp OworZXh0ZXJuIGNoYXIgKnBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKE9pZCBj b25zdHJhaW50SWQpOwogZXh0ZXJuIGNoYXIgKmRlcGFyc2VfZXhwcmVzc2lvbihOb2RlICpleHBy LCBMaXN0ICpkcGNvbnRleHQsCiAJCQkJCQkJCWJvb2wgZm9yY2VwcmVmaXgsIGJvb2wgc2hvd2lt cGxpY2l0KTsKIGV4dGVybiBMaXN0ICpkZXBhcnNlX2NvbnRleHRfZm9yKGNvbnN0IGNoYXIgKmFs aWFzbmFtZSwgT2lkIHJlbGlkKTsKQEAgLTQwLDggKzQ1LDE2IEBAIGV4dGVybiBMaXN0ICpzZWxl Y3RfcnRhYmxlX25hbWVzX2Zvcl9leHBsYWluKExpc3QgKnJ0YWJsZSwKIAkJCQkJCQkJCQkJIEJp dG1hcHNldCAqcmVsc191c2VkKTsKIGV4dGVybiBjaGFyICpnZW5lcmF0ZV9jb2xsYXRpb25fbmFt ZShPaWQgY29sbGlkKTsKIGV4dGVybiBjaGFyICpnZW5lcmF0ZV9vcGNsYXNzX25hbWUoT2lkIG9w Y2xhc3MpOworZXh0ZXJuIGNoYXIgKmdlbmVyYXRlX2Z1bmN0aW9uX25hbWUoT2lkIGZ1bmNpZCwg aW50IG5hcmdzLCBMaXN0ICphcmduYW1lcywKKwkJCQkJCQkJCU9pZCAqYXJndHlwZXMsIGJvb2wg aGFzX3ZhcmlhZGljLAorCQkJCQkJCQkJYm9vbCAqdXNlX3ZhcmlhZGljX3AsCisJCQkJCQkJCQlQ YXJzZUV4cHJLaW5kIHNwZWNpYWxfZXhwcmtpbmQpOwogZXh0ZXJuIGNoYXIgKmdldF9yYW5nZV9w YXJ0Ym91bmRfc3RyaW5nKExpc3QgKmJvdW5kX2RhdHVtcyk7CitleHRlcm4gdm9pZCBnZXRfb3Bj bGFzc19uYW1lKE9pZCBvcGNsYXNzLCBPaWQgYWN0dWFsX2RhdGF0eXBlLAorCQkJCQkJCSAgU3Ry aW5nSW5mbyBidWYpOworZXh0ZXJuIGNoYXIgKmZsYXR0ZW5fcmVsb3B0aW9ucyhPaWQgcmVsaWQp OwogCiBleHRlcm4gY2hhciAqcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfc3RyaW5nKE9pZCBzdGF0 ZXh0aWQpOworZXh0ZXJuIHZvaWQgcHJpbnRfZnVuY3Rpb25fc3FsYm9keShTdHJpbmdJbmZvIGJ1 ZiwgSGVhcFR1cGxlIHByb2N0dXApOwogCiAjZW5kaWYJCQkJCQkJLyogUlVMRVVUSUxTX0ggKi8K ZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggMzVjOWYxZS4uY2Q5ZGFkMSAxMDA2NDQKLS0t IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE2MjEsNiArMTYyMSw5IEBAIE9TSW5mbwogT1NTTENpcGhl cgogT1NTTERpZ2VzdAogT1ZFUkxBUFBFRAorT2JqRWxlbQorT2JqVHJlZQorT2JqVHlwZQogT2Jq ZWN0QWNjZXNzRHJvcAogT2JqZWN0QWNjZXNzTmFtZXNwYWNlU2VhcmNoCiBPYmplY3RBY2Nlc3NQ b3N0QWx0ZXIKQEAgLTMxODgsNiArMzE5MSw3IEBAIGNvbG9ybWFwcmFuZ2UKIGNvbXBhcmVfY29u dGV4dAogY29uZmlnX3Zhcl92YWx1ZQogY29udGFpbl9hZ2dzX29mX2xldmVsX2NvbnRleHQKK2Nv bnZTcGVjaWZpZXIKIGNvbnZlcnRfdGVzdGV4cHJfY29udGV4dAogY29weV9kYXRhX3NvdXJjZV9j YgogY29yZV9ZWVNUWVBFCi0tIAoyLjcuMi53aW5kb3dzLjEKCg== --_005_OS0PR01MB5716009FDCCC0B50BCB14A99949D9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v15-0002-Support-DDL-replication.patch" Content-Description: v15-0002-Support-DDL-replication.patch Content-Disposition: attachment; filename="v15-0002-Support-DDL-replication.patch"; size=126744; creation-date="Tue, 02 Aug 2022 03:20:00 GMT"; modification-date="Tue, 02 Aug 2022 03:20:54 GMT" Content-Transfer-Encoding: base64 RnJvbSA5N2UzNjliYjc0OGQ1MTJiODMyMWVlM2M2ODM2ZDRkZmVkZTZiOWZhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgMjggSnVsIDIwMjIgMTA6Mjk6MjMgKzA4MDAKU3ViamVjdDogW1BBVENI IHYxNSAyLzRdIFN1cHBvcnQgRERMIHJlcGxpY2F0aW9uLgoKVG8gc3VwcG9ydCBEREwgcmVwbGlj YXRpb24sIHdlIHVzZSBldmVudCB0cmlnZ2VyIGFuZCBEREwgZGVwYXJzaW5nCmZhY2lsaXRpZXMu IFdoaWxlIGNyZWF0aW5nIGEgcHVibGljYXRpb24sIHdlIHJlZ2lzdGVyIGEgY29tbWFuZCBlbmQK dHJpZ2dlciB0aGF0IGRlcGFyc2VzIHRoZSBEREwgYXMgYSBKU09OIGJsb2IsIGFuZCBXQUwgbG9n cyBpdC4gVGhlIGV2ZW50CnRyaWdnZXIgaXMgYXV0b21hdGljYWxseSByZW1vdmVkIGF0IHRoZSB0 aW1lIG9mIGRyb3AgcHVibGljYXRpb24uIFRoZQpXQUxTZW5kZXIgZGVjb2RlcyB0aGUgV0FMIGFu ZCBzZW5kcyBpdCBkb3duc3RyZWFtIHNpbWlsYXIgdG8gb3RoZXIgRE1MCmNvbW1hbmRzLiBUaGUg c3Vic2NyaWJlciB0aGVuIGNvbnZlcnRzIEpTT04gYmFjayB0byB0aGUgRERMIGNvbW1hbmQgc3Ry aW5nCmFuZCBleGVjdXRlcyBpdC4gSW4gdGhlIHN1YnNjcmliZXIsIHdlIGFsc28gYWRkIHRoZSBu ZXdseSBhZGRlZCByZWwgdG8KcGdfc3Vic2NyaXB0aW9uX3JlbCBzbyB0aGF0IHRoZSBETUwgY2hh bmdlcyBvbiB0aGUgbmV3IHRhYmxlIGNhbiBiZQpyZXBsaWNhdGVkIHdpdGhvdXQgaGF2aW5nIHRv IG1hbnVhbGx5IHJ1bgoiQUxURVIgU1VCU0NSSVBUSU9OIC4uLiBSRUZSRVNIIFBVQkxJQ0FUSU9O Ii4KClRoaXMgaXMgYSBQT0MgcGF0Y2ggdG8gc2hvdyBob3cgdXNpbmcgZXZlbnQgdHJpZ2dlcnMg YW5kIERETCBkZXBhcnNpbmcKZmFjaWxpdGllcyB3ZSBjYW4gaW1wbGVtZW50IERETCByZXBsaWNh dGlvbi4gU28sIHRoZSBpbXBsZW1lbnRhdGlvbiBpcwpyZXN0cmljdGVkIHRvIENSRUFURSBUQUJM RS9BTFRFUiBUQUJMRS9EUk9QIFRBQkxFIGNvbW1hbmRzLgoKLSBGb3Igbm9uLXJld3JpdGUgQUxU RVIgW1RBQkxFfFNFUVVFTkNFfFNDSEVNQV0gY29tbWFuZCBhbmQKLSAgICAgQ1JFQVRFIFtUQUJM RXxTRVFVRU5DRXxTQ0hFTUF8SU5ERVhdIGNvbW1hbmQ6Ci0gQW5kIG90aGVyIHRhYmxlIHVucmVs YXRlZCBjb21tYW5kCndlIGRlcGFyc2UgdGhlIGNvbW1hbmQgYXQgZGRsX2NvbW1hbmRfZW5kIGV2 ZW50IHRyaWdnZXIgYW5kIFdBTCBsb2cgdGhlCmRlcGFyc2VkIGpzb24gc3RyaW5nLiBUaGUgV0FM U2VuZGVyIGRlY29kZXMgdGhlIFdBTCBhbmQgc2VuZHMgaXQgdG8Kc3Vic2NyaWJlciBpZiB0aGUg Y3JlYXRlZC9hbHRlcmVkIHRhYmxlIGlzIHB1Ymxpc2hlZC4gSXQgc3VwcG9ydHMgbW9zdCBvZgpB TFRFUiBUQUJMRSBjb21tYW5kIGV4Y2VwdCBzb21lIGNvbW1hbmRzKERETCByZWxhdGVkIHRvIFBB UlRJVElPTkVEIFRBQkxFCi4uLikgdGhhdCBpbnRyb2R1Y2VkIHJlY2VudGx5IHdoaWNoIGhhdmVu J3QgYmVlbiBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQKZGRsX2RlcGFyc2VyLCB3ZSB3aWxsIHN1 cHBvcnQgdGhhdCBsYXRlci4KCk5vdGUgdGhhdCB0aGUgcmVwbGljYXRpb24gZm9yIEFMVEVSIElO REVYIGNvbW1hbmQgaXMgc3RpbGwgdW5kZXIKcHJvZ3Jlc3MuCgotIEZvciBEUk9QIFtUQUJMRXxT RVFVRU5DRXxTQ0hFTUF8SU5ERVhdOgpUaGUgJ2NvbW1hbmQgc3RhcnQnIGV2ZW50IGhhbmRsZXIg bG9ncyBhIGRkbCBtZXNzYWdlIHdpdGggdGhlIHJlbGlkcyBvZgp0aGUgdGFibGVzIHRoYXQgYXJl IGRyb3BwZWQgd2hpY2ggdGhlIG91dHB1dCBwbHVnaW4gKHBnb3V0cHV0KSBzdG9yZXMgaW4KaXRz IGludGVybmFsIGRhdGEgc3RydWN0dXJlIGFmdGVyIHZlcmlmeWluZyB0aGF0IGl0IGlzIGZvciBh IHRhYmxlIHRoYXQgaXMKcGFydCBvZiB0aGUgcHVibGljYXRpb24uIExhdGVyIHRoZSAnY29tbWFu ZCBlbmQnIGV2ZW50IGhhbmRsZXIgc2VuZHMgdGhlCmFjdHVhbCBkcm9wIG1lc3NhZ2UuIFBnb3V0 cHV0IG9uIHJlY2VpdmluZyB0aGUgY29tbWFuZCBlbmQsIG9ubHkgc2VuZHMgb3V0CnRoZSBkcm9w IGNvbW1hbmQgb25seSBpZiBpdCBpcyBmb3Igb25lIG9mIHRoZSByZWxpZHMgbWFya2VkIGZvciBk ZWxldGluZy4KVGhlIHJlYXNvbiB3ZSBoYXZlIHRvIGRvIHRoaXMgaXMgYmVjYXVzZSwgb25jZSB0 aGUgbG9naWNhbCBkZWNvZGVyCnJlY2VpdmVzIHRoZSAnY29tbWFuZCBlbmQnIG1lc3NhZ2UsICB0 aGUgcmVsaWQgb2YgdGhlIHRhYmxlIGlzIG5vIGxvbmdlcgp2YWxpZCBhcyBpdCBoYXMgYmVlbiBk ZWxldGVkIGFzIHBhcnQgb2YgaW52YWxpZGF0aW9ucyByZWNlaXZlZCBmb3IgdGhlCmRyb3AgdGFi bGUgY29tbWFuZC4gSXQgaXMgbm8gbG9uZ2VyIHBvc3NpYmxlIHRvIHZlcmlmeSBpZiB0aGUgdGFi bGUgaXMKcGFydCBvZiB0aGUgcHVibGljYXRpb24gbGlzdCBvciBub3QuIFRvIG1ha2UgdGhpcyBw b3NzaWJsZSwgSSBoYXZlIGFkZGVkCnR3byBtb3JlIGVsZW1lbnRzIHRvIHRoZSBkZGwgeGxvZyBh bmQgZGRsIG1lc3NhZ2UsIChyZWxpZCBhbmQgY21kdHlwZSkuCgpXZSBjb3VsZCBoYXZlIGFsc28g aGFuZGxlZCBhbGwgdGhpcyBvbiB0aGUgc3Vic2NyaWJlciBzaWRlIGFzIHdlbGwsIGJ1dAp0aGF0 IHdvdWxkIG1lYW4gc2VuZGluZyBzcHVyaW91cyBkZGwgbWVzc2FnZXMgZm9yIHRhYmxlcyB0aGF0 IGFyZSBub3QgcGFydApvZiB0aGUgcHVibGljYXRpb24uCgotIEZvciB0YWJsZV9yZXdyaXRlIEFM VEVSIFRBQkxFIGNvbW1hbmQ6CihBTFRFUiBDT0xVTU4gVFlQRSwgQUREIENPTFVNTiBERUZBVUxU LCBTRVQgTE9HR0VELCBTRVQgQUNDRVNTIE1FVEhPRCkKCndlIGRlcGFyc2UgdGhlIGNvbW1hbmQg YW5kIFdBTCBsb2cgdGhlIGRlcGFyc2VkIGpzb24gc3RyaW5nIGF0CnRhYmxlX3Jld3JpdGUgZXZl bnQgdHJpZ2dlci4gVGhlIFdBTFNlbmRlciBkZWNvZGVzIHRoZSBXQUwgYW5kIHNlbmRzIGl0IHRv CnN1YnNjcmliZXIgaWYgdGhlIGFsdGVyZWQgdGFibGUgaXMgcHVibGlzaGVkLiBUaGVuLCB0aGUg V0FMU2VuZGVyIHdpbGwKY29udmVydCB0aGUgdXBjb21pbmcgcmV3cml0ZSBJTlNFUlRzIHRvIFVQ REFURXMgYW5kIHNlbmQgdGhlbSB0bwpzdWJzY3JpYmVyIHNvIHRoYXQgdGhlIGRhdGEgYmV0d2Vl biBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgY2FuIGFsd2F5cyBiZQpjb25zaXN0ZW50LiBOb3Rl IHRoYXQgdGhlIHRhYmxlcyB0aGF0IHB1Ymxpc2ggcmV3cml0ZSBkZGwgbXVzdCBoYXZlIGEKcmVw bGljYSBpZGVudGl0eSBjb25maWd1cmVkIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gcmVwbGljYXRl IHRoZSB1cGNvbWluZwpyZXdyaXRlIFVQREFURXMuCgpXZSBkbyB0aGlzIHdheSBiZWNhdXNlIG9m IHR3byByZWFzb246CigxKSBUaGUgZGF0YSBiZWZvcmUgdGhlIHJld3JpdGUgZGRsIGNvdWxkIGFs cmVhZHkgYmUgZGlmZmVyZW50IGFtb25nCnB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlci4gVG8gbWFr ZSBzdXJlIHRoZSBleHRyYSBkYXRhIGluIHN1YnNjcmliZXIgd2hpY2gKZG9lc24ndCBleGlzdCBp biBwdWJsaXNoZXIgYWxzbyBnZXQgcmV3cml0dGVuLCB3ZSBuZWVkIHRvIGxldCB0aGUKc3Vic2Ny aWJlciBleGVjdXRlIHRoZSBvcmlnaW5hbCByZXdyaXRlIGRkbCB0byByZXdyaXRlIGFsbCB0aGUg ZGF0YSBhdApmaXJzdC4KCigyKSB0aGUgZGF0YSBhZnRlciBleGVjdXRpbmcgcmV3cml0ZSBkZGwg Y291bGQgYmUgZGlmZmVyZW50IGFtb25nCnB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlcihkdWUgdG8g ZGlmZmVyZW50IGZ1bmN0aW9ucy9vcGVyYXRvcnMgdXNlZCBkdXJpbmcKcmV3cml0ZSksIHNvIHdl IG5lZWQgdG8gcmVwbGljYXRlIHRoZSByZXdyaXRlIFVQREFURXMgdG8ga2VlcCB0aGUgZGF0YQpj b25zaXN0ZW50LgoKVE8gSU1QUk9WRToKVGhpcyBhcHByb2FjaCBjb3VsZCBiZSBpbXByb3ZlZCBi eSBsZXR0aW5nIHRoZSBzdWJzY3JpYmVyIHRyeSB0byB1cGRhdGUKdGhlIGV4dHJhIGRhdGEgaXRz ZWxmIGluc3RlYWQgb2YgZG9pbmcgZnVsbHkgcmV3cml0ZSBkZGwgYW5kIHVzZSB0aGUKdXBjb21p bmcgcmV3cml0ZSBVUERBVEVzIHRvIHJld3JpdGUgdGhlIHJlc3QgZGF0YS4gVG8gYWNoaWV2ZSB0 aGlzLCB3ZQpjb3VsZCBtb2RpZnkgdGhlIGRlcGFyc2VkIGpzb24gc3RyaW5nIHRvIHRlbXBvcmFy aWx5IHJlbW92ZSB0aGUgcmV3cml0ZQpwYXJ0IGFuZCBhZGQgc29tZSBsb2dpYyBpbiBzdWJzY3Jp YmVyIHRvIHVwZGF0ZSB0aGUgZXh0cmEgZGF0YS4KQmVzaWRlcywgd2UgbWF5IG5vdCBuZWVkIHRv IHNlbmQgcmV3cml0ZSBjaGFuZ2VzIGZvciBhbGwgdHlwZSBvZiByZXdyaXRlCmRkbCwgZm9yIGV4 YW1wbGUsIGl0IHNlZW1zIGZpbmUgdG8gc2tpcCBzZW5kaW5nIHJld3JpdGUgY2hhbmdlcyBmb3Ig QUxURVIKVEFCTEUgU0VUIExPR0dFRCBhcyB0aGUgZGF0YSBpbiB0aGUgdGFibGUgZG9lc24ndCBh Y3R1YWxseSBiZSBjaGFuZ2VkLiBXZQpjb3VsZCB1c2UgdGhlIGRlcGFyc2VyIGFuZCBldmVudCB0 cmlnZ2VyIHRvIGZpbHRlciB0aGVzZSBkZGxzIGFuZCBza2lwCnNlbmRpbmcgcmV3cml0ZSBjaGFu Z2VzIGZvciB0aGVtLgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZSAg ICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRs bXNnZGVzYy5jIHwgIDUyICsrKysKIHNyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24u YyAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIu YyAgICAgICAgICAgIHwgMjE0ICsrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3B1 YmxpY2F0aW9uY21kcy5jICAgICAgICAgIHwgMTEyICsrKysrKysKIHNyYy9iYWNrZW5kL2NvbW1h bmRzL3RhYmxlY21kcy5jICAgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYyAgICB8ICA4NiArKysrKysKIHNyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMgICAgICAgIHwgIDQxICsrKwogc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMgICAgICAgfCAgOTMgKysrKysrCiBzcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMgICAgICAgICB8ICA0OCArKysKIHNy Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jIHwgMTM2ICsrKysr KysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyAgICAgICAgfCAy MzIgKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0 cHV0LmMgICAgIHwgMTkyICsrKysrKysrKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVs Y2FjaGUuYyAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyAg ICAgICAgICAgICAgICAgICAgICAgfCAgMjcgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgg ICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVz Yy5jICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4vcHNxbC9kZXNjcmliZS5jICAg ICAgICAgICAgICAgICAgICAgICAgIHwgIDE3ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3Mvcm1ncmxp c3QuaCAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0ICAgICAgICAgICAgICAgICB8ICAgOSArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1 YmxpY2F0aW9uLmggICAgICAgICAgICB8ICAgNCArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVu dF90cmlnZ2VyLmggICAgICAgICAgICB8ICAgMyArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v ZGRsbWVzc2FnZS5oICAgICAgICAgICAgfCAgNjAgKysrKwogc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vZGVjb2RlLmggICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vbG9naWNhbHByb3RvLmggICAgICAgICAgfCAgIDcgKy0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL291dHB1dF9wbHVnaW4uaCAgICAgICAgIHwgIDI3ICsrCiBzcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9wZ291dHB1dC5oICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9yZW9yZGVyYnVmZmVyLmggICAgICAgICB8ICAzOSArKysKIHNyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvcHNxbC5vdXQgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dCAgICAgICB8IDM4OCArKysrKysrKysrKystLS0tLS0t LS0tLS0KIDMxIGZpbGVzIGNoYW5nZWQsIDE1OTEgaW5zZXJ0aW9ucygrKSwgMjEzIGRlbGV0aW9u cygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dp Y2FsZGRsbXNnZGVzYy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9kZGxtZXNzYWdlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv cm1ncmRlc2MvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUK aW5kZXggZjg4ZDcyZi4uYjhlMjllOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Jt Z3JkZXNjL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmls ZQpAQCAtMTksNiArMTksNyBAQCBPQkpTID0gXAogCWhhc2hkZXNjLm8gXAogCWhlYXBkZXNjLm8g XAogCWxvZ2ljYWxtc2dkZXNjLm8gXAorCWxvZ2ljYWxkZGxtc2dkZXNjLm8gXAogCW14YWN0ZGVz Yy5vIFwKIAluYnRkZXNjLm8gXAogCXJlbG1hcGRlc2MubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRkbG1zZ2Rlc2MuYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjgxZGVlNTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9hY2Nl c3Mvcm1ncmRlc2MvbG9naWNhbGRkbG1zZ2Rlc2MuYwpAQCAtMCwwICsxLDUyIEBACisvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiBsb2dpY2FsZGRsbXNnZGVzYy5jCisgKgkgIHJtZ3IgZGVzY3Jp cHRvciByb3V0aW5lcyBmb3IgcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKKyAqCisg KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTUtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tl bmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKKyAqCisgKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJyZXBsaWNhdGlv bi9kZGxtZXNzYWdlLmgiCisKK3ZvaWQKK2xvZ2ljYWxkZGxtc2dfZGVzYyhTdHJpbmdJbmZvIGJ1 ZiwgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCit7CisJY2hhcgkgICAqcmVjID0gWExvZ1JlY0dl dERhdGEocmVjb3JkKTsKKwl1aW50OAkJaW5mbyA9IFhMb2dSZWNHZXRJbmZvKHJlY29yZCkgJiB+ WExSX0lORk9fTUFTSzsKKworCWlmIChpbmZvID09IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkK Kwl7CisJCXhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UgKnhscmVjID0gKHhsX2xvZ2ljYWxfZGRsX21l c3NhZ2UgKikgcmVjOworCQljaGFyCSAgICpwcmVmaXggPSB4bHJlYy0+bWVzc2FnZTsKKwkJY2hh cgkgICAqbWVzc2FnZSA9IHhscmVjLT5tZXNzYWdlICsgeGxyZWMtPnByZWZpeF9zaXplOworCQlj aGFyCSAgICpzZXAgPSAiIjsKKworCQlBc3NlcnQocHJlZml4W3hscmVjLT5wcmVmaXhfc2l6ZV0g IT0gJ1wwJyk7CisKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJwcmVmaXggXCIlc1wiOyBwYXls b2FkICglenUgYnl0ZXMpOiAiLAorCQkJCQkJIHByZWZpeCwgeGxyZWMtPm1lc3NhZ2Vfc2l6ZSk7 CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAicmVsaWQgJXUgY21kdHlwZSAldSIsIHhscmVjLT5y ZWxpZCwgeGxyZWMtPmNtZHR5cGUpOworCQkvKiBXcml0ZSBtZXNzYWdlIHBheWxvYWQgYXMgYSBz ZXJpZXMgb2YgaGV4IGJ5dGVzICovCisJCWZvciAoaW50IGNudCA9IDA7IGNudCA8IHhscmVjLT5t ZXNzYWdlX3NpemU7IGNudCsrKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzJTAy WCIsIHNlcCwgKHVuc2lnbmVkIGNoYXIpIG1lc3NhZ2VbY250XSk7CisJCQlzZXAgPSAiICI7CisJ CX0KKwl9Cit9CisKK2NvbnN0IGNoYXIgKgorbG9naWNhbGRkbG1zZ19pZGVudGlmeSh1aW50OCBp bmZvKQoreworCWlmICgoaW5mbyAmIH5YTFJfSU5GT19NQVNLKSA9PSBYTE9HX0xPR0lDQUxfRERM X01FU1NBR0UpCisJCXJldHVybiAiRERMIE1FU1NBR0UiOworCisJcmV0dXJuIE5VTEw7Cit9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgYi9zcmMvYmFj a2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKaW5kZXggZTI5NGJlYS4uNDQzOWI2MyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCisrKyBiL3NyYy9i YWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYwpAQCAtMTAwNSw2ICsxMDA1LDcgQEAgR2V0 UHVibGljYXRpb24oT2lkIHB1YmlkKQogCXB1Yi0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgPSBwdWJm b3JtLT5wdWJ1cGRhdGU7CiAJcHViLT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9IHB1YmZvcm0tPnB1 YmRlbGV0ZTsKIAlwdWItPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPSBwdWJmb3JtLT5wdWJ0cnVu Y2F0ZTsKKwlwdWItPnB1YmFjdGlvbnMucHViZGRsID0gcHViZm9ybS0+cHViZGRsOwogCXB1Yi0+ cHVidmlhcm9vdCA9IHB1YmZvcm0tPnB1YnZpYXJvb3Q7CiAKIAlSZWxlYXNlU3lzQ2FjaGUodHVw KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwppbmRleCBlZWYzZTVkLi5hMDBmMDYx IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCkBAIC0zNyw4ICszNywxMSBAQAog I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9mdW5jLmgiCiAj aW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgor I2luY2x1ZGUgInJlcGxpY2F0aW9uL21lc3NhZ2UuaCIKICNpbmNsdWRlICJ0Y29wL2RlcGFyc2Vf dXRpbGl0eS5oIgogI2luY2x1ZGUgInRjb3AvdXRpbGl0eS5oIgorI2luY2x1ZGUgInRjb3AvZGRs X2RlcGFyc2UuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9idWls dGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2V2dGNhY2hlLmgiCkBAIC0xNTM2LDYgKzE1MzksNyBA QCBFdmVudFRyaWdnZXJBbHRlclRhYmxlU3RhcnQoTm9kZSAqcGFyc2V0cmVlKQogCiAJY29tbWFu ZC0+ZC5hbHRlclRhYmxlLmNsYXNzSWQgPSBSZWxhdGlvblJlbGF0aW9uSWQ7CiAJY29tbWFuZC0+ ZC5hbHRlclRhYmxlLm9iamVjdElkID0gSW52YWxpZE9pZDsKKwljb21tYW5kLT5kLmFsdGVyVGFi bGUucmV3cml0ZSA9IGZhbHNlOwogCWNvbW1hbmQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzID0gTklM OwogCWNvbW1hbmQtPnBhcnNldHJlZSA9IGNvcHlPYmplY3QocGFyc2V0cmVlKTsKIApAQCAtMTU2 OSw3ICsxNTczLDcgQEAgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVJlbGlkKE9pZCBvYmplY3RJZCkK ICAqIGludGVybmFsbHksIHNvIHRoYXQncyBhbGwgdGhhdCB0aGlzIGNvZGUgbmVlZHMgdG8gaGFu ZGxlIGF0IHRoZSBtb21lbnQuCiAgKi8KIHZvaWQKLUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRh YmxlU3ViY21kKE5vZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzKQorRXZlbnRUcmln Z2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFk ZHJlc3MsIGJvb2wgcmV3cml0ZSkKIHsKIAlNZW1vcnlDb250ZXh0IG9sZGN4dDsKIAlDb2xsZWN0 ZWRBVFN1YmNtZCAqbmV3c3ViOwpAQCAtMTU4OSw2ICsxNTkzLDcgQEAgRXZlbnRUcmlnZ2VyQ29s bGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJlc3Mp CiAJbmV3c3ViLT5hZGRyZXNzID0gYWRkcmVzczsKIAluZXdzdWItPnBhcnNldHJlZSA9IGNvcHlP YmplY3Qoc3ViY21kKTsKIAorCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1h bmQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlIHw9IHJld3JpdGU7CiAJY3VycmVudEV2ZW50VHJpZ2dl clN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMgPQogCQlsYXBwZW5k KGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJsZS5z dWJjbWRzLCBuZXdzdWIpOwogCkBAIC0yMTc0LDMgKzIxNzksMjEwIEBAIHN0cmluZ2lmeV9hZGVm cHJpdnNfb2JqdHlwZShPYmplY3RUeXBlIG9ianR5cGUpCiAKIAlyZXR1cm4gIj8/PyI7CQkJCS8q IGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KIH0KKworLyoKKyAqIHB1YmxpY2F0aW9uX2RlcGFyc2Vf ZGRsX2NvbW1hbmRfc3RhcnQKKyAqCisgKiBEZXBhcnNlIHRoZSBkZGwgY29tbWFuZCBhbmQgbG9n IGl0LgorICovCitEYXR1bQorcHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9zdGFydChQ R19GVU5DVElPTl9BUkdTKQoreworCUV2ZW50VHJpZ2dlckRhdGEgKnRyaWdkYXRhOworCWNoYXIJ CSpjb21tYW5kID0gcHNwcmludGYoIkRyb3AgdGFibGUgY29tbWFuZCBzdGFydCIpOworCURyb3BT dG10CSpzdG10OworCUxpc3RDZWxsCSpjZWxsMTsKKworCWlmICghQ0FMTEVEX0FTX0VWRU5UX1RS SUdHRVIoZmNpbmZvKSkKKwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0cmlnZ2Vy IG1hbmFnZXIiKTsKKworCXRyaWdkYXRhID0gKEV2ZW50VHJpZ2dlckRhdGEgKikgZmNpbmZvLT5j b250ZXh0OworCXN0bXQJID0gKERyb3BTdG10ICopIHRyaWdkYXRhLT5wYXJzZXRyZWU7CisKKwkv KiBleHRyYWN0IHRoZSByZWxpZCBmcm9tIHRoZSBwYXJzZSB0cmVlICovCisJZm9yZWFjaChjZWxs MSwgc3RtdC0+b2JqZWN0cykKKwl7CisJCWNoYXIJcmVscGVyc2lzdDsKKwkJTm9kZQkqb2JqZWN0 ID0gbGZpcnN0KGNlbGwxKTsKKwkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzOworCQlSZWxhdGlvbiBy ZWxhdGlvbiA9IE5VTEw7CisKKwkJYWRkcmVzcyA9IGdldF9vYmplY3RfYWRkcmVzcyhzdG10LT5y ZW1vdmVUeXBlLAorCQkJCQkJCQkJIG9iamVjdCwKKwkJCQkJCQkJCSAmcmVsYXRpb24sCisJCQkJ CQkJCQkgQWNjZXNzRXhjbHVzaXZlTG9jaywKKwkJCQkJCQkJCSB0cnVlKTsKKworCQlyZWxwZXJz aXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShhZGRyZXNzLm9iamVjdElkKTsKKworCQkvKgorCQkg KiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMgd2hvc2UgdGFyZ2V0IHRhYmxl IGlzIGEKKwkJICogdGVtcG9yYXJ5IHRhYmxlLgorCQkgKgorCQkgKiBXZSB3aWxsIGdlbmVyYXRl IHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1bmxvZ2dlZAorCQkgKiB0YWJs ZXMgY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJlZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRl LiBUaGlzCisJCSAqIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRpcmVjdGx5IHJlcGxheSB0aGUgU0VU IExPR0dFRCBjb21tYW5kIGFuZCB0aGUKKwkJICogaW5jb21pbmcgcmV3cml0ZSBtZXNzYWdlIHdp dGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJCSAqLworCQlpZiAocmVscGVyc2lzdCA9PSBS RUxQRVJTSVNURU5DRV9URU1QKQorCQl7CisJCQl0YWJsZV9jbG9zZShyZWxhdGlvbiwgTm9Mb2Nr KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2Ui LCBhZGRyZXNzLm9iamVjdElkLCBEQ1RfVGFibGVEcm9wU3RhcnQsCisJCQkJCQkJIGNvbW1hbmQs IHN0cmxlbihjb21tYW5kKSArIDEpOworCisJCWlmIChyZWxhdGlvbikKKwkJCXRhYmxlX2Nsb3Nl KHJlbGF0aW9uLCBOb0xvY2spOworCX0KKwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOwor fQorCisvKgorICogcHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlCisgKgorICogRGVw YXJzZSB0aGUgZGRsIHRhYmxlIHJld3JpdGUgY29tbWFuZCBhbmQgbG9nIGl0LgorICovCitEYXR1 bQorcHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlKFBHX0ZVTkNUSU9OX0FSR1MpCit7 CisJY2hhcgkJCQlyZWxwZXJzaXN0OworCUNvbGxlY3RlZENvbW1hbmQgICAqY21kOworCWNoYXIJ CQkgICAqanNvbl9zdHJpbmc7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5m bykpCisJCWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7 CisKKwljbWQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOworCisJ QXNzZXJ0KGNtZCAmJiBjbWQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlKTsKKworCXJlbHBlcnNpc3Qg PSBnZXRfcmVsX3BlcnNpc3RlbmNlKGNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkKTsKKworCS8q CisJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9yIGNvbW1hbmRzIHdob3NlIHRhcmdldCB0 YWJsZSBpcyBhIHRlbXBvcmFyeQorCSAqIHRhYmxlLgorCSAqCisJICogV2Ugd2lsbCBnZW5lcmF0 ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNvIHRoYXQgdW5sb2dnZWQgdGFibGVzCisJ ICogY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJlZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRl LiBUaGlzIG1ha2VzIGl0CisJICogcG9zc2libGUgdG8gZGlyZWN0bHkgcmVwbGF5IHRoZSBTRVQg TE9HR0VEIGNvbW1hbmQgYW5kIHRoZSBpbmNvbWluZworCSAqIHJld3JpdGUgbWVzc2FnZSB3aXRo b3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCSAqLworCWlmIChyZWxwZXJzaXN0ID09IFJFTFBF UlNJU1RFTkNFX1RFTVApCisJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CisKKwkvKiBE ZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxvZyBpdCB0byBhbGxvdyBkZWNvZGluZyBv ZiB0aGUgc2FtZS4gKi8KKwlqc29uX3N0cmluZyA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNt ZCwgZmFsc2UpOworCisJaWYgKGpzb25fc3RyaW5nICE9IE5VTEwpCisJCUxvZ0xvZ2ljYWxERExN ZXNzYWdlKCJkZXBhcnNlIiwgY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQsIERDVF9UYWJsZUFs dGVyLAorCQkJCQkJCSBqc29uX3N0cmluZywgc3RybGVuKGpzb25fc3RyaW5nKSArIDEpOworCisJ cmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKK30KKworLyoKKyAqIHB1YmxpY2F0aW9uX2Rl cGFyc2VfZGRsX2NvbW1hbmRfZW5kCisgKgorICogRGVwYXJzZSB0aGUgZGRsIGNvbW1hbmQgYW5k IGxvZyBpdC4KKyAqLworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfZW5k KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJTGlzdENlbGwgICAqbGM7CisJc2xpc3RfaXRlciAgaXRl cjsKKwlEZXBhcnNlZENvbW1hbmRUeXBlIHR5cGU7CisJT2lkIHJlbGlkOworCisJaWYgKCFDQUxM RURfQVNfRVZFTlRfVFJJR0dFUihmY2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5 IGV2ZW50IHRyaWdnZXIgbWFuYWdlciIpOworCisJZm9yZWFjaChsYywgY3VycmVudEV2ZW50VHJp Z2dlclN0YXRlLT5jb21tYW5kTGlzdCkKKwl7CisJCWNoYXIJCQkJcmVscGVyc2lzdCA9IFJFTFBF UlNJU1RFTkNFX1BFUk1BTkVOVDsKKwkJQ29sbGVjdGVkQ29tbWFuZCAgICpjbWQgPSBsZmlyc3Qo bGMpOworCQljaGFyCQkJICAgKmpzb25fc3RyaW5nOworCisJCS8qIFJld3JpdGUgRERMIGhhcyBi ZWVuIGhhbmRsZWQgaW4gdGFibGVfcmV3cml0ZSB0cmlnZ2VyICovCisJCWlmIChjbWQtPmQuYWx0 ZXJUYWJsZS5yZXdyaXRlKQorCQkJY29udGludWU7CisKKwkJaWYgKGNtZC0+dHlwZSA9PSBTQ1Rf U2ltcGxlICYmCisJCQkhT2lkSXNWYWxpZChjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQp KQorCQkJY29udGludWU7CisKKwkJaWYgKGNtZC0+dHlwZSA9PSBTQ1RfQWx0ZXJUYWJsZSkKKwkJ eworCQkJcmVsaWQgPSBjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZDsKKwkJCXR5cGUgPSBEQ1Rf VGFibGVBbHRlcjsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIE9ubHkgU0NUX1NpbXBsZSBmb3Ig bm93ICovCisJCQlyZWxpZCA9IGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJZDsKKwkJCXR5 cGUgPSBEQ1RfU2ltcGxlQ21kOworCQl9CisKKwkJaWYgKGdldF9yZWxfcmVsa2luZChyZWxpZCkp CisJCQlyZWxwZXJzaXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShyZWxpZCk7CisKKwkJLyoKKwkJ ICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9yIGNvbW1hbmRzIHdob3NlIHRhcmdldCB0YWJs ZSBpcyBhCisJCSAqIHRlbXBvcmFyeSB0YWJsZS4KKwkJICoKKwkJICogV2Ugd2lsbCBnZW5lcmF0 ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNvIHRoYXQgdW5sb2dnZWQgdGFibGVzCisJ CSAqIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVyZWQgb24gdGhlIHN1YnNjcmliZXIgc2lk ZS4gVGhpcyBtYWtlcyBpdAorCQkgKiBwb3NzaWJsZSB0byBkaXJlY3RseSByZXBsYXkgdGhlIFNF VCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlIGluY29taW5nCisJCSAqIHJld3JpdGUgbWVzc2FnZSB3 aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCQkgKi8KKwkJaWYgKHJlbHBlcnNpc3QgPT0g UkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIERlcGFyc2Ug dGhlIERETCBjb21tYW5kIGFuZCBXQUwgbG9nIGl0IHRvIGFsbG93IGRlY29kaW5nIG9mIHRoZQor CQkgKiBzYW1lLgorCQkgKi8KKwkJanNvbl9zdHJpbmcgPSBkZXBhcnNlX3V0aWxpdHlfY29tbWFu ZChjbWQsIGZhbHNlKTsKKworCQlpZiAoanNvbl9zdHJpbmcgPT0gTlVMTCkKKwkJCWNvbnRpbnVl OworCisJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgcmVsaWQsIHR5cGUsIGpzb25f c3RyaW5nLAorCQkJCQkJCSBzdHJsZW4oanNvbl9zdHJpbmcpICsgMSk7CisJfQorCisJc2xpc3Rf Zm9yZWFjaChpdGVyLCAmKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+U1FMRHJvcExpc3QpKQor CXsKKwkJdm9sYXRpbGUgU1FMRHJvcE9iamVjdCAqb2JqOworCQlEcm9wU3RtdAkJCSAgICpzdG10 OworCQlFdmVudFRyaWdnZXJEYXRhIAkgICAqdHJpZ2RhdGE7CisJCWNoYXIJCQkJICAgKmNvbW1h bmQ7CisJCURlcGFyc2VkQ29tbWFuZFR5cGUJCWNtZHR5cGU7CisKKwkJdHJpZ2RhdGEgPSAoRXZl bnRUcmlnZ2VyRGF0YSAqKSBmY2luZm8tPmNvbnRleHQ7CisJCXN0bXQJID0gKERyb3BTdG10ICop IHRyaWdkYXRhLT5wYXJzZXRyZWU7CisKKwkJb2JqID0gc2xpc3RfY29udGFpbmVyKFNRTERyb3BP YmplY3QsIG5leHQsIGl0ZXIuY3VyKTsKKworCQlpZiAoc3RybmNtcChvYmotPm9iamVjdHR5cGUs ICJ0YWJsZSIsIDUpID09IDApCisJCQljbWR0eXBlID0gRENUX1RhYmxlRHJvcEVuZDsKKwkJZWxz ZSBpZiAoc3RybmNtcChvYmotPm9iamVjdHR5cGUsICJzZXF1ZW5jZSIsIDUpID09IDAgfHwKKwkJ CQkgc3RybmNtcChvYmotPm9iamVjdHR5cGUsICJzY2hlbWEiLCA1KSA9PSAwIHx8CisJCQkJIHN0 cm5jbXAob2JqLT5vYmplY3R0eXBlLCAiaW5kZXgiLCA1KSA9PSAwKQorCQkJY21kdHlwZSA9IERD VF9PYmplY3REcm9wOworCQllbHNlCisJCQljb250aW51ZTsKKworCQljb21tYW5kID0gZGVwYXJz ZV9kcm9wX2NvbW1hbmQob2JqLT5vYmppZGVudGl0eSwgb2JqLT5vYmplY3R0eXBlLAorCQkJCQkJ CQkJICAgc3RtdC0+YmVoYXZpb3IpOworCisJCWlmIChjb21tYW5kID09IE5VTEwpCisJCQljb250 aW51ZTsKKworCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIG9iai0+YWRkcmVzcy5v YmplY3RJZCwgY21kdHlwZSwKKwkJCQkJCQkgY29tbWFuZCwgc3RybGVuKGNvbW1hbmQpICsgMSk7 CisJfQorCisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKK30KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvcHVibGljYXRpb25jbWRzLmMKaW5kZXggODlhMDA1NS4uNTNiZGM3NyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKQEAgLTM3LDEwICszNywxMiBAQAogI2luY2x1ZGUg ImNvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNs dWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNsdWRl ICJub2Rlcy9ub2RlRnVuY3MuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfY2xhdXNlLmgiCiAj aW5jbHVkZSAicGFyc2VyL3BhcnNlX2NvbGxhdGUuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2Vf cmVsYXRpb24uaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2VyLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9sbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYXJyYXku aCIKQEAgLTk1LDYgKzk3LDcgQEAgcGFyc2VfcHVibGljYXRpb25fb3B0aW9ucyhQYXJzZVN0YXRl ICpwc3RhdGUsCiAJcHViYWN0aW9ucy0+cHVidXBkYXRlID0gdHJ1ZTsKIAlwdWJhY3Rpb25zLT5w dWJkZWxldGUgPSB0cnVlOwogCXB1YmFjdGlvbnMtPnB1YnRydW5jYXRlID0gdHJ1ZTsKKwlwdWJh Y3Rpb25zLT5wdWJkZGwgPSBmYWxzZTsKIAkqcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBm YWxzZTsKIAogCS8qIFBhcnNlIG9wdGlvbnMgKi8KQEAgLTE0MSw2ICsxNDQsOCBAQCBwYXJzZV9w dWJsaWNhdGlvbl9vcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJcHViYWN0aW9ucy0+ cHViZGVsZXRlID0gdHJ1ZTsKIAkJCQllbHNlIGlmIChzdHJjbXAocHVibGlzaF9vcHQsICJ0cnVu Y2F0ZSIpID09IDApCiAJCQkJCXB1YmFjdGlvbnMtPnB1YnRydW5jYXRlID0gdHJ1ZTsKKwkJCQll bHNlIGlmIChzdHJjbXAocHVibGlzaF9vcHQsICJkZGwiKSA9PSAwKQorCQkJCQlwdWJhY3Rpb25z LT5wdWJkZGwgPSB0cnVlOwogCQkJCWVsc2UKIAkJCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJCQko ZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCkBAIC03NDksNiArNzU0LDUzIEBAIENoZWNr UHViUmVsYXRpb25Db2x1bW5MaXN0KExpc3QgKnRhYmxlcywgY29uc3QgY2hhciAqcXVlcnlTdHJp bmcsCiB9CiAKIC8qCisgKiBDcmVhdGUgZXZlbnQgdHJpZ2dlciB3aGljaCBpcyB1c2VkIGZvciBE REwgcmVwbGljYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitDcmVhdGVERExSZXBsaWNhRXZlbnRU cmlnZ2VyKGNoYXIgKmV2ZW50bmFtZSwgQ29tbWFuZFRhZyAqY29tbWFuZHMsCisJCQkJCQkJIGlu dCBuY29tbWFuZHMsIE9iamVjdEFkZHJlc3MgcHViYWRkcmVzcywKKwkJCQkJCQkgT2lkIHB1Ym9p ZCkKK3sKKwlpbnQJCQkJCWk7CisJTGlzdAkJCSAgICp0YWdzID0gTklMOworCU9pZAkJCQkJdHJp Z2dlcl9pZDsKKwlPYmplY3RBZGRyZXNzCQlyZWZlcmVuY2VkOworCUNyZWF0ZUV2ZW50VHJpZ1N0 bXQgKmRkbF90cmlnZ2VyOworCWNoYXIJCQkJdHJpZ2dlcl9uYW1lW05BTUVEQVRBTEVOXTsKKwlj aGFyCQkJCXRyaWdnZXJfZnVuY19uYW1lW05BTUVEQVRBTEVOXTsKKwlzdGF0aWMgY29uc3QgY2hh ciAgICp0cmlnZ2VyX25hbWVfcHJlZml4ID0gInBnX2RlcGFyc2VfdHJpZ18lc18ldSI7CisJc3Rh dGljIGNvbnN0IGNoYXIgICAqdHJpZ2dlcl9mdW5jX3ByZWZpeCA9ICJwdWJsaWNhdGlvbl9kZXBh cnNlXyVzIjsKKworCWRkbF90cmlnZ2VyID0gbWFrZU5vZGUoQ3JlYXRlRXZlbnRUcmlnU3RtdCk7 CisKKwlzbnByaW50Zih0cmlnZ2VyX25hbWUsIHNpemVvZih0cmlnZ2VyX25hbWUpLCB0cmlnZ2Vy X25hbWVfcHJlZml4LAorCQkJIGV2ZW50bmFtZSwgcHVib2lkKTsKKwlzbnByaW50Zih0cmlnZ2Vy X2Z1bmNfbmFtZSwgc2l6ZW9mKHRyaWdnZXJfZnVuY19uYW1lKSwgdHJpZ2dlcl9mdW5jX3ByZWZp eCwKKwkJCSBldmVudG5hbWUpOworCisJZGRsX3RyaWdnZXItPnRyaWduYW1lID0gcHN0cmR1cCh0 cmlnZ2VyX25hbWUpOworCWRkbF90cmlnZ2VyLT5ldmVudG5hbWUgPSBldmVudG5hbWU7CisJZGRs X3RyaWdnZXItPmZ1bmNuYW1lID0gU3lzdGVtRnVuY05hbWUodHJpZ2dlcl9mdW5jX25hbWUpOwor CisJZm9yIChpID0gMDsgaSA8IG5jb21tYW5kczsgaSsrKQorCXsKKwkJU3RyaW5nICp0YWcgPSBt YWtlU3RyaW5nKHBzdHJkdXAoR2V0Q29tbWFuZFRhZ05hbWUoY29tbWFuZHNbaV0pKSk7CisJCXRh Z3MgPSBsYXBwZW5kKHRhZ3MsIHRhZyk7CisJfQorCisJZGRsX3RyaWdnZXItPndoZW5jbGF1c2Ug PSBsaXN0X21ha2UxKG1ha2VEZWZFbGVtKCJ0YWciLCAoTm9kZSAqKSB0YWdzLCAtMSkpOworCisJ dHJpZ2dlcl9pZCA9IENyZWF0ZUV2ZW50VHJpZ2dlcihkZGxfdHJpZ2dlcik7CisKKwkvKgorCSAq IFJlZ2lzdGVyIHRoZSBldmVudCB0cmlnZ2VycyBhcyBpbnRlcm5hbGx5IGRlcGVuZGVudCBvbiB0 aGUKKwkgKiBwdWJsaWNhdGlvbi4KKwkgKi8KKwlPYmplY3RBZGRyZXNzU2V0KHJlZmVyZW5jZWQs IEV2ZW50VHJpZ2dlclJlbGF0aW9uSWQsIHRyaWdnZXJfaWQpOworCXJlY29yZERlcGVuZGVuY3lP bigmcmVmZXJlbmNlZCwgJnB1YmFkZHJlc3MsIERFUEVOREVOQ1lfSU5URVJOQUwpOworfQorCisv KgogICogQ3JlYXRlIG5ldyBwdWJsaWNhdGlvbi4KICAqLwogT2JqZWN0QWRkcmVzcwpAQCAtODIw LDYgKzg3Miw4IEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRl UHVibGljYXRpb25TdG10ICpzdG10KQogCQlCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZWxl dGUpOwogCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnRydW5jYXRlIC0gMV0gPQogCQlC b29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSk7CisJdmFsdWVzW0FudW1fcGdfcHVi bGljYXRpb25fcHViZGRsIC0gMV0gPQorCQlCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZGwp OwogCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnZpYXJvb3QgLSAxXSA9CiAJCUJvb2xH ZXREYXR1bShwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CiAKQEAgLTg4Miw2ICs5MzYsNjEg QEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlv blN0bXQgKnN0bXQpCiAJCX0KIAl9CiAKKwkvKgorCSAqIENyZWF0ZSBhbiBldmVudCB0cmlnZ2Vy IHRvIGFsbG93IGxvZ2dpbmcgb2YgRERMIHN0YXRlbWVudHMuCisJICoKKwkgKiBUT0RPOiBXZSBu ZWVkIHRvIGZpbmQgYSBiZXR0ZXIgc3ludGF4IHRvIGFsbG93IHJlcGxpY2F0aW9uIG9mIERETAor CSAqIHN0YXRlbWVudHMuCisJICoKKwkgKiBYWFg6IFRoaXMgY29kZSBpcyBqdXN0IHRvIHNob3cg dGhlIHJlcGxpY2F0aW9uIG9mIENSRUFURS9BTFRFUi9EUk9QCisJICogVEFCTEUgd29ya3MuIFdl IG5lZWQgdG8gZW5oYW5jZSB0aGlzIG9uY2UgdGhlIGFwcHJvYWNoIGZvciBEREwKKwkgKiByZXBs aWNhdGlvbiBpcyBmaW5hbGl6ZWQuCisJICovCisJaWYgKHB1YmFjdGlvbnMucHViZGRsKQorCXsK KwkJQ29tbWFuZFRhZwlzdGFydF9jb21tYW5kc1tdID0ge0NNRFRBR19EUk9QX1RBQkxFfTsKKwkJ Q29tbWFuZFRhZwlyZXdyaXRlX2NvbW1hbmRzW10gPSB7Q01EVEFHX0FMVEVSX1RBQkxFfTsKKwor CQlDb21tYW5kVGFnCWVuZF9jb21tYW5kc1tdID0geworCQkJQ01EVEFHX0NSRUFURV9PUEVSQVRP UiwKKwkJCUNNRFRBR19DUkVBVEVfT1BFUkFUT1JfQ0xBU1MsCisJCQlDTURUQUdfQ1JFQVRFX09Q RVJBVE9SX0ZBTUlMWSwKKwkJCUNNRFRBR19BTFRFUl9PUEVSQVRPUl9GQU1JTFksCisJCQlDTURU QUdfQUxURVJfT1BFUkFUT1JfQ0xBU1MsCisJCQlDTURUQUdfQUxURVJfT1BFUkFUT1IsCisJCQlD TURUQUdfQ1JFQVRFX1BST0NFRFVSRSwKKwkJCUNNRFRBR19BTFRFUl9QUk9DRURVUkUsCisJCQlD TURUQUdfQ1JFQVRFX0ZVTkNUSU9OLAorCQkJQ01EVEFHX0FMVEVSX0ZVTkNUSU9OLAorCQkJQ01E VEFHX0NSRUFURV9UUklHR0VSLAorCQkJQ01EVEFHX0FMVEVSX1RSSUdHRVIsCisJCQlDTURUQUdf RFJPUF9UQUJMRSwKKwkJCUNNRFRBR19DUkVBVEVfVEFCTEUsCisJCQlDTURUQUdfQUxURVJfVEFC TEUsCisJCQlDTURUQUdfQ1JFQVRFX1NFUVVFTkNFLAorCQkJQ01EVEFHX0FMVEVSX1NFUVVFTkNF LAorCQkJQ01EVEFHX0RST1BfU0VRVUVOQ0UsCisJCQlDTURUQUdfQ1JFQVRFX1NDSEVNQSwKKwkJ CUNNRFRBR19BTFRFUl9TQ0hFTUEsCisJCQlDTURUQUdfRFJPUF9TQ0hFTUEsCisJCQlDTURUQUdf Q1JFQVRFX0lOREVYLAorCQkJQ01EVEFHX0RST1BfSU5ERVgsCisJCQlDTURUQUdfQUxURVJfSU5E RVgKKwkJfTsKKworCQkvKiBDcmVhdGUgdGhlIGRkbF9jb21tYW5kX2VuZCBldmVudCB0cmlnZ2Vy ICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoImRkbF9jb21tYW5kX2VuZCIsIGVu ZF9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihlbmRfY29tbWFuZHMpLCBteXNlbGYsIHB1 Ym9pZCk7CisKKwkJLyogQ3JlYXRlIHRoZSBkZGxfY29tbWFuZF9zdGFydCBldmVudCB0cmlnZ2Vy ICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoImRkbF9jb21tYW5kX3N0YXJ0Iiwg c3RhcnRfY29tbWFuZHMsCisJCQkJCQkJCQkgbGVuZ3Rob2Yoc3RhcnRfY29tbWFuZHMpLCBteXNl bGYsIHB1Ym9pZCk7CisKKwkJLyogQ3JlYXRlIHRoZSB0YWJsZV9yZXdyaXRlIGV2ZW50IHRyaWdn ZXIgKi8KKwkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigidGFibGVfcmV3cml0ZSIsIHJl d3JpdGVfY29tbWFuZHMsCisJCQkJCQkJCQkgbGVuZ3Rob2YocmV3cml0ZV9jb21tYW5kcyksIG15 c2VsZiwgcHVib2lkKTsKKwl9CisKIAl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2sp OwogCiAJSW52b2tlT2JqZWN0UG9zdENyZWF0ZUhvb2soUHVibGljYXRpb25SZWxhdGlvbklkLCBw dWJvaWQsIDApOwpAQCAtMTAyMiw2ICsxMTMxLDkgQEAgQWx0ZXJQdWJsaWNhdGlvbk9wdGlvbnMo UGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwKIAogCQl2YWx1 ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ0cnVuY2F0ZSAtIDFdID0gQm9vbEdldERhdHVtKHB1 YmFjdGlvbnMucHVidHJ1bmNhdGUpOwogCQlyZXBsYWNlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1 YnRydW5jYXRlIC0gMV0gPSB0cnVlOworCisJCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1 YmRkbCAtIDFdID0gQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHViZGRsKTsKKwkJcmVwbGFjZXNb QW51bV9wZ19wdWJsaWNhdGlvbl9wdWJkZGwgLSAxXSA9IHRydWU7CiAJfQogCiAJaWYgKHB1Ymxp c2hfdmlhX3BhcnRpdGlvbl9yb290X2dpdmVuKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwppbmRl eCBkMjJkZDQ0Li45NzM2ZGU0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJs ZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtNTIzMSw3 ICs1MjMxLDcgQEAgQVRFeGVjQ21kKExpc3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUluZm8gKnRh YiwKIAkgKiBSZXBvcnQgdGhlIHN1YmNvbW1hbmQgdG8gaW50ZXJlc3RlZCBldmVudCB0cmlnZ2Vy cy4KIAkgKi8KIAlpZiAoY21kKQotCQlFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNt ZCgoTm9kZSAqKSBjbWQsIGFkZHJlc3MpOworCQlFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJs ZVN1YmNtZCgoTm9kZSAqKSBjbWQsIGFkZHJlc3MsIHRhYi0+cmV3cml0ZSk7CiAKIAkvKgogCSAq IEJ1bXAgdGhlIGNvbW1hbmQgY291bnRlciB0byBlbnN1cmUgdGhlIG5leHQgc3ViY29tbWFuZCBp biB0aGUgc2VxdWVuY2UKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCmlu ZGV4IGM0ZTJmZGUuLmYzZWViNjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9N YWtlZmlsZQpAQCAtMTYsNiArMTYsNyBAQCBvdmVycmlkZSBDUFBGTEFHUyA6PSAtSSQoc3JjZGly KSAkKENQUEZMQUdTKQogCiBPQkpTID0gXAogCWRlY29kZS5vIFwKKwlkZGxtZXNzYWdlLm9cCiAJ bGF1bmNoZXIubyBcCiAJbG9naWNhbC5vIFwKIAlsb2dpY2FsZnVuY3MubyBcCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjUwOTM1MjMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYwpAQCAtMCwwICsxLDg2IEBACisvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiBkZGxtZXNzYWdlLmMKKyAqCSAgTG9naWNhbCBEREwgbWVzc2Fn ZXMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9w bWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jCisgKgorICogTk9URVMKKyAqCisgKiBMb2dpY2Fs IERETCBtZXNzYWdlcyBhbGxvdyBYTE9HIGxvZ2dpbmcgb2YgRERMIGNvbW1hbmQgc3RyaW5ncyB0 aGF0CisgKiBnZXQgcGFzc2VkIHRvIHRoZSBsb2dpY2FsIGRlY29kaW5nIHBsdWdpbi4gSW4gbm9y bWFsIFhMT0cgcHJvY2Vzc2luZyB0aGV5CisgKiBhcmUgc2FtZSBhcyBOT09QLgorICoKKyAqIFVu bGlrZSBnZW5lcmljIGxvZ2ljYWwgbWVzc2FnZXMsIHRoZXNlIERETCBtZXNzYWdlcyBoYXZlIG9u bHkgdHJhbnNhY3Rpb25hbAorICogbW9kZS5Ob3RlIGJ5IGRlZmF1bHQgRERMcyBpbiBQb3N0Z3Jl U1FMIGFyZSB0cmFuc2FjdGlvbmFsLgorICoKKyAqIFRoZXNlIG1lc3NhZ2VzIGFyZSBwYXJ0IG9m IGN1cnJlbnQgdHJhbnNhY3Rpb24gYW5kIHdpbGwgYmUgc2VudCB0bworICogZGVjb2RpbmcgcGx1 Z2luIHVzaW5nIGluIGEgc2FtZSB3YXkgYXMgRE1MIG9wZXJhdGlvbnMuCisgKgorICogRXZlcnkg bWVzc2FnZSBjYXJyaWVzIHByZWZpeCB0byBhdm9pZCBjb25mbGljdHMgYmV0d2VlbiBkaWZmZXJl bnQgZGVjb2RpbmcKKyAqIHBsdWdpbnMuIFRoZSBwbHVnaW4gYXV0aG9ycyBtdXN0IHRha2UgZXh0 cmEgY2FyZSB0byB1c2UgdW5pcXVlIHByZWZpeCwKKyAqIGdvb2Qgb3B0aW9ucyBzZWVtcyB0byBi ZSBmb3IgZXhhbXBsZSB0byB1c2UgdGhlIG5hbWUgb2YgdGhlIGV4dGVuc2lvbi4KKyAqCisgKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1 ZGUgImFjY2Vzcy94YWN0LmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dpbnNlcnQuaCIKKyNpbmNs dWRlICJjYXRhbG9nL25hbWVzcGFjZS5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1 ZGUgIm5vZGVzL2V4ZWNub2Rlcy5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIK KyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCisjaW5jbHVkZSAidXRpbHMvbWVt dXRpbHMuaCIKKworLyoKKyAqIFdyaXRlIGxvZ2ljYWwgZGVjb2RpbmcgRERMIG1lc3NhZ2UgaW50 byBYTG9nLgorICovCitYTG9nUmVjUHRyCitMb2dMb2dpY2FsRERMTWVzc2FnZShjb25zdCBjaGFy ICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkg Y29uc3QgY2hhciAqbWVzc2FnZSwgc2l6ZV90IHNpemUpCit7CisJeGxfbG9naWNhbF9kZGxfbWVz c2FnZSB4bHJlYzsKKworCS8qCisJICogRW5zdXJlIHdlIGhhdmUgYSB2YWxpZCB0cmFuc2FjdGlv biBpZC4KKwkgKi8KKwlBc3NlcnQoSXNUcmFuc2FjdGlvblN0YXRlKCkpOworCUdldEN1cnJlbnRU cmFuc2FjdGlvbklkKCk7CisKKwl4bHJlYy5kYklkID0gTXlEYXRhYmFzZUlkOworCS8qIHRyYWls aW5nIHplcm8gaXMgY3JpdGljYWw7IHNlZSBsb2dpY2FsZGRsbXNnX2Rlc2MgKi8KKwl4bHJlYy5w cmVmaXhfc2l6ZSA9IHN0cmxlbihwcmVmaXgpICsgMTsKKwl4bHJlYy5tZXNzYWdlX3NpemUgPSBz aXplOworCXhscmVjLnJlbGlkID0gcmVsaWQ7CisJeGxyZWMuY21kdHlwZSA9IGNtZHR5cGU7CisK KwlYTG9nQmVnaW5JbnNlcnQoKTsKKwlYTG9nUmVnaXN0ZXJEYXRhKChjaGFyICopICZ4bHJlYywg U2l6ZU9mTG9naWNhbERETE1lc3NhZ2UpOworCVhMb2dSZWdpc3RlckRhdGEodW5jb25zdGlmeShj aGFyICosIHByZWZpeCksIHhscmVjLnByZWZpeF9zaXplKTsKKwlYTG9nUmVnaXN0ZXJEYXRhKHVu Y29uc3RpZnkoY2hhciAqLCBtZXNzYWdlKSwgc2l6ZSk7CisKKwkvKiBhbGxvdyBvcmlnaW4gZmls dGVyaW5nICovCisJWExvZ1NldFJlY29yZEZsYWdzKFhMT0dfSU5DTFVERV9PUklHSU4pOworCisJ cmV0dXJuIFhMb2dJbnNlcnQoUk1fTE9HSUNBTERETE1TR19JRCwgWExPR19MT0dJQ0FMX0RETF9N RVNTQUdFKTsKK30KKworLyoKKyAqIFJlZG8gaXMgYmFzaWNhbGx5IGp1c3Qgbm9vcCBmb3IgbG9n aWNhbCBkZWNvZGluZyBkZGwgbWVzc2FnZXMuCisgKi8KK3ZvaWQKK2xvZ2ljYWxkZGxtc2dfcmVk byhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKK3sKKwl1aW50OAkJaW5mbyA9IFhMb2dSZWNHZXRJ bmZvKHJlY29yZCkgJiB+WExSX0lORk9fTUFTSzsKKworCWlmIChpbmZvICE9IFhMT0dfTE9HSUNB TF9ERExfTUVTU0FHRSkKKwkJZWxvZyhQQU5JQywgImxvZ2ljYWxkZGxtc2dfcmVkbzogdW5rbm93 biBvcCBjb2RlICV1IiwgaW5mbyk7CisKKwkvKiBUaGlzIGlzIG9ubHkgaW50ZXJlc3RpbmcgZm9y IGxvZ2ljYWwgZGVjb2RpbmcsIHNlZSBkZWNvZGUuYy4gKi8KK30KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL2RlY29kZS5jCmluZGV4IGM1YzZhMmIuLmU0ZTBiNjIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKKysrIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1 ZGUgImFjY2Vzcy94bG9ndXRpbHMuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnRyb2wuaCIK ICNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZWNvZGUuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9k ZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUg InJlcGxpY2F0aW9uL21lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIK QEAgLTYwNCw2ICs2MDUsNDYgQEAgbG9naWNhbG1zZ19kZWNvZGUoTG9naWNhbERlY29kaW5nQ29u dGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpCiB9CiAKIC8qCisgKiBIYW5kbGUgcm1n ciBMT0dJQ0FMRERMTVNHX0lEIHJlY29yZHMgZm9yIERlY29kZVJlY29yZEludG9SZW9yZGVyQnVm ZmVyKCkuCisgKi8KK3ZvaWQKK2xvZ2ljYWxkZGxtc2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0Nv bnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKQoreworCVNuYXBCdWlsZCAgKmJ1aWxk ZXIgPSBjdHgtPnNuYXBzaG90X2J1aWxkZXI7CisJWExvZ1JlYWRlclN0YXRlICpyID0gYnVmLT5y ZWNvcmQ7CisJVHJhbnNhY3Rpb25JZCB4aWQgPSBYTG9nUmVjR2V0WGlkKHIpOworCXVpbnQ4CQlp bmZvID0gWExvZ1JlY0dldEluZm8ocikgJiB+WExSX0lORk9fTUFTSzsKKwlSZXBPcmlnaW5JZCBv cmlnaW5faWQgPSBYTG9nUmVjR2V0T3JpZ2luKHIpOworCXhsX2xvZ2ljYWxfZGRsX21lc3NhZ2Ug Km1lc3NhZ2U7CisKKwlpZiAoaW5mbyAhPSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpCisJCWVs b2coRVJST1IsICJ1bmV4cGVjdGVkIFJNX0xPR0lDQUxERExNU0dfSUQgcmVjb3JkIHR5cGU6ICV1 IiwgaW5mbyk7CisKKwlSZW9yZGVyQnVmZmVyUHJvY2Vzc1hpZChjdHgtPnJlb3JkZXIsIFhMb2dS ZWNHZXRYaWQociksIGJ1Zi0+b3JpZ3B0cik7CisKKwkvKgorCSAqIElmIHdlIGRvbid0IGhhdmUg c25hcHNob3Qgb3Igd2UgYXJlIGp1c3QgZmFzdC1mb3J3YXJkaW5nLCB0aGVyZSBpcyBubworCSAq IHBvaW50IGluIGRlY29kaW5nIGRkbCBtZXNzYWdlcy4KKwkgKi8KKwlpZiAoU25hcEJ1aWxkQ3Vy cmVudFN0YXRlKGJ1aWxkZXIpIDwgU05BUEJVSUxEX0ZVTExfU05BUFNIT1QgfHwKKwkJY3R4LT5m YXN0X2ZvcndhcmQpCisJCXJldHVybjsKKworCW1lc3NhZ2UgPSAoeGxfbG9naWNhbF9kZGxfbWVz c2FnZSAqKSBYTG9nUmVjR2V0RGF0YShyKTsKKworCWlmIChtZXNzYWdlLT5kYklkICE9IGN0eC0+ c2xvdC0+ZGF0YS5kYXRhYmFzZSB8fAorCQlGaWx0ZXJCeU9yaWdpbihjdHgsIG9yaWdpbl9pZCkp CisJCXJldHVybjsKKworCWlmIChTbmFwQnVpbGRQcm9jZXNzQ2hhbmdlKGJ1aWxkZXIsIHhpZCwg YnVmLT5vcmlncHRyKSkKKwkJUmVvcmRlckJ1ZmZlclF1ZXVlRERMTWVzc2FnZShjdHgtPnJlb3Jk ZXIsIHhpZCwgYnVmLT5lbmRwdHIsCisJCQkJCQkJCQkgbWVzc2FnZS0+bWVzc2FnZSwgLyogZmly c3QgcGFydCBvZiBtZXNzYWdlIGlzIHByZWZpeCAqLworCQkJCQkJCQkJIG1lc3NhZ2UtPm1lc3Nh Z2Vfc2l6ZSwKKwkJCQkJCQkJCSBtZXNzYWdlLT5tZXNzYWdlICsgbWVzc2FnZS0+cHJlZml4X3Np emUsCisJCQkJCQkJCQkgbWVzc2FnZS0+cmVsaWQsIG1lc3NhZ2UtPmNtZHR5cGUpOworfQorCisv KgogICogQ29uc29saWRhdGVkIGNvbW1pdCByZWNvcmQgaGFuZGxpbmcgYmV0d2VlbiB0aGUgZGlm ZmVyZW50IGZvcm0gb2YgY29tbWl0CiAgKiByZWNvcmRzLgogICoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9sb2dpY2FsLmMKaW5kZXggNjI1YTdmNC4uOTg5NjljNyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMKKysrIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNp bmNsdWRlICJmbWdyLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0 LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxp Y2F0aW9uL2RlY29kZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIKICNpbmNs dWRlICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIKQEAgLTczLDYgKzc0LDEwIEBAIHN0YXRpYyB2b2lk IHRydW5jYXRlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJU WE4gKnR4biwKIHN0YXRpYyB2b2lkIG1lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpj YWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJCSAgIFhMb2dSZWNQdHIgbWVzc2Fn ZV9sc24sIGJvb2wgdHJhbnNhY3Rpb25hbCwKIAkJCQkJCQkgICBjb25zdCBjaGFyICpwcmVmaXgs IFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKK3N0YXRpYyB2b2lkIGRk bG1lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRY TiAqdHhuLAorCQkJCQkJCQkgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sIGNvbnN0IGNoYXIgKnBy ZWZpeCwKKwkJCQkJCQkJICBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwK KwkJCQkJCQkJICBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKIC8q IHN0cmVhbWluZyBjYWxsYmFja3MgKi8KIHN0YXRpYyB2b2lkIHN0cmVhbV9zdGFydF9jYl93cmFw cGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCkBAIC05MCw2 ICs5NSwxMSBAQCBzdGF0aWMgdm9pZCBzdHJlYW1fY2hhbmdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1 ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4bgogc3RhdGljIHZvaWQgc3RyZWFtX21l c3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAq dHhuLAogCQkJCQkJCQkJICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLCBib29sIHRyYW5zYWN0aW9u YWwsCiAJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBtZXNzYWdlX3NpemUsIGNv bnN0IGNoYXIgKm1lc3NhZ2UpOworc3RhdGljIHZvaWQgc3RyZWFtX2RkbG1lc3NhZ2VfY2Jfd3Jh cHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJ CQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQkJCSBjb25zdCBjaGFyICpwcmVm aXgsCisJCQkJCQkJCQkJIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAor CQkJCQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CiBzdGF0 aWMgdm9pZCBzdHJlYW1fdHJ1bmNhdGVfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwg UmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJCQkJICAgaW50IG5yZWxhdGlvbnMsIFJlbGF0 aW9uIHJlbGF0aW9uc1tdLCBSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2UpOwogCkBAIC0yMTgs NiArMjI4LDcgQEAgU3RhcnR1cERlY29kaW5nQ29udGV4dChMaXN0ICpvdXRwdXRfcGx1Z2luX29w dGlvbnMsCiAJY3R4LT5yZW9yZGVyLT5hcHBseV90cnVuY2F0ZSA9IHRydW5jYXRlX2NiX3dyYXBw ZXI7CiAJY3R4LT5yZW9yZGVyLT5jb21taXQgPSBjb21taXRfY2Jfd3JhcHBlcjsKIAljdHgtPnJl b3JkZXItPm1lc3NhZ2UgPSBtZXNzYWdlX2NiX3dyYXBwZXI7CisJY3R4LT5yZW9yZGVyLT5kZGxt ZXNzYWdlID0gZGRsbWVzc2FnZV9jYl93cmFwcGVyOwogCiAJLyoKIAkgKiBUbyBzdXBwb3J0IHN0 cmVhbWluZywgd2UgcmVxdWlyZSBzdGFydC9zdG9wL2Fib3J0L2NvbW1pdC9jaGFuZ2UKQEAgLTIz NCw2ICsyNDUsNyBAQCBTdGFydHVwRGVjb2RpbmdDb250ZXh0KExpc3QgKm91dHB1dF9wbHVnaW5f b3B0aW9ucywKIAkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9jb21taXRfY2IgIT0gTlVMTCkgfHwK IAkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9jaGFuZ2VfY2IgIT0gTlVMTCkgfHwKIAkJKGN0eC0+ Y2FsbGJhY2tzLnN0cmVhbV9tZXNzYWdlX2NiICE9IE5VTEwpIHx8CisJCShjdHgtPmNhbGxiYWNr cy5zdHJlYW1fZGRsbWVzc2FnZV9jYiAhPSBOVUxMKSB8fAogCQkoY3R4LT5jYWxsYmFja3Muc3Ry ZWFtX3RydW5jYXRlX2NiICE9IE5VTEwpOwogCiAJLyoKQEAgLTI1MSw2ICsyNjMsNyBAQCBTdGFy dHVwRGVjb2RpbmdDb250ZXh0KExpc3QgKm91dHB1dF9wbHVnaW5fb3B0aW9ucywKIAljdHgtPnJl b3JkZXItPnN0cmVhbV9jb21taXQgPSBzdHJlYW1fY29tbWl0X2NiX3dyYXBwZXI7CiAJY3R4LT5y ZW9yZGVyLT5zdHJlYW1fY2hhbmdlID0gc3RyZWFtX2NoYW5nZV9jYl93cmFwcGVyOwogCWN0eC0+ cmVvcmRlci0+c3RyZWFtX21lc3NhZ2UgPSBzdHJlYW1fbWVzc2FnZV9jYl93cmFwcGVyOworCWN0 eC0+cmVvcmRlci0+c3RyZWFtX2RkbG1lc3NhZ2UgPSBzdHJlYW1fZGRsbWVzc2FnZV9jYl93cmFw cGVyOwogCWN0eC0+cmVvcmRlci0+c3RyZWFtX3RydW5jYXRlID0gc3RyZWFtX3RydW5jYXRlX2Ni X3dyYXBwZXI7CiAKIApAQCAtMTIyMSw2ICsxMjM0LDQ0IEBAIG1lc3NhZ2VfY2Jfd3JhcHBlcihS ZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogfQogCiBzdGF0aWMg dm9pZAorZGRsbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVy QnVmZmVyVFhOICp0eG4sCisJCQkJCSAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJICBj b25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBl LAorCQkJCQkgIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkgIGNvbnN0IGNoYXIgKm1lc3NhZ2Up Cit7CisJTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4ID0gY2FjaGUtPnByaXZhdGVfZGF0YTsK KwlMb2dpY2FsRXJyb3JDYWxsYmFja1N0YXRlIHN0YXRlOworCUVycm9yQ29udGV4dENhbGxiYWNr IGVycmNhbGxiYWNrOworCisJQXNzZXJ0KCFjdHgtPmZhc3RfZm9yd2FyZCk7CisKKwlpZiAoY3R4 LT5jYWxsYmFja3MuZGRsbWVzc2FnZV9jYiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBQdXNo IGNhbGxiYWNrICsgaW5mbyBvbiB0aGUgZXJyb3IgY29udGV4dCBzdGFjayAqLworCXN0YXRlLmN0 eCA9IGN0eDsKKwlzdGF0ZS5jYWxsYmFja19uYW1lID0gImRkbG1lc3NhZ2UiOworCXN0YXRlLnJl cG9ydF9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCWVycmNhbGxiYWNrLmNhbGxiYWNrID0gb3V0 cHV0X3BsdWdpbl9lcnJvcl9jYWxsYmFjazsKKwllcnJjYWxsYmFjay5hcmcgPSAodm9pZCAqKSAm c3RhdGU7CisJZXJyY2FsbGJhY2sucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOworCWVy cm9yX2NvbnRleHRfc3RhY2sgPSAmZXJyY2FsbGJhY2s7CisKKwkvKiBzZXQgb3V0cHV0IHN0YXRl ICovCisJY3R4LT5hY2NlcHRfd3JpdGVzID0gdHJ1ZTsKKwljdHgtPndyaXRlX3hpZCA9IHR4biAh PSBOVUxMID8gdHhuLT54aWQgOiBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwljdHgtPndyaXRlX2xv Y2F0aW9uID0gbWVzc2FnZV9sc247CisKKwkvKiBkbyB0aGUgYWN0dWFsIHdvcms6IGNhbGwgY2Fs bGJhY2sgKi8KKwljdHgtPmNhbGxiYWNrcy5kZGxtZXNzYWdlX2NiKGN0eCwgdHhuLCBtZXNzYWdl X2xzbiwgcHJlZml4LCByZWxpZCwgY21kdHlwZSwKKwkJCQkJCQkJIG1lc3NhZ2Vfc2l6ZSwgbWVz c2FnZSk7CisKKwkvKiBQb3AgdGhlIGVycm9yIGNvbnRleHQgc3RhY2sgKi8KKwllcnJvcl9jb250 ZXh0X3N0YWNrID0gZXJyY2FsbGJhY2sucHJldmlvdXM7Cit9CisKK3N0YXRpYyB2b2lkCiBzdHJl YW1fc3RhcnRfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRY TiAqdHhuLAogCQkJCQkJWExvZ1JlY1B0ciBmaXJzdF9sc24pCiB7CkBAIC0xNTM2LDYgKzE1ODcs NDggQEAgc3RyZWFtX21lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVv cmRlckJ1ZmZlclRYTiAqdHhuLAogfQogCiBzdGF0aWMgdm9pZAorc3RyZWFtX2RkbG1lc3NhZ2Vf Y2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAor CQkJCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCSBjb25zdCBjaGFyICpwcmVm aXgsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCSBTaXpl IG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHggPSBjYWNoZS0+cHJpdmF0ZV9kYXRhOworCUxvZ2ljYWxFcnJv ckNhbGxiYWNrU3RhdGUgc3RhdGU7CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7 CisKKwlBc3NlcnQoIWN0eC0+ZmFzdF9mb3J3YXJkKTsKKworCS8qIFdlJ3JlIG9ubHkgc3VwcG9z ZWQgdG8gY2FsbCB0aGlzIHdoZW4gc3RyZWFtaW5nIGlzIHN1cHBvcnRlZC4gKi8KKwlBc3NlcnQo Y3R4LT5zdHJlYW1pbmcpOworCisJLyogdGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbCAqLworCWlm IChjdHgtPmNhbGxiYWNrcy5zdHJlYW1fZGRsbWVzc2FnZV9jYiA9PSBOVUxMKQorCQlyZXR1cm47 CisKKwkvKiBQdXNoIGNhbGxiYWNrICsgaW5mbyBvbiB0aGUgZXJyb3IgY29udGV4dCBzdGFjayAq LworCXN0YXRlLmN0eCA9IGN0eDsKKwlzdGF0ZS5jYWxsYmFja19uYW1lID0gInN0cmVhbV9kZGxt ZXNzYWdlIjsKKwlzdGF0ZS5yZXBvcnRfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsKKwllcnJjYWxs YmFjay5jYWxsYmFjayA9IG91dHB1dF9wbHVnaW5fZXJyb3JfY2FsbGJhY2s7CisJZXJyY2FsbGJh Y2suYXJnID0gKHZvaWQgKikgJnN0YXRlOworCWVycmNhbGxiYWNrLnByZXZpb3VzID0gZXJyb3Jf Y29udGV4dF9zdGFjazsKKwllcnJvcl9jb250ZXh0X3N0YWNrID0gJmVycmNhbGxiYWNrOworCisJ Lyogc2V0IG91dHB1dCBzdGF0ZSAqLworCWN0eC0+YWNjZXB0X3dyaXRlcyA9IHRydWU7CisJY3R4 LT53cml0ZV94aWQgPSB0eG4gIT0gTlVMTCA/IHR4bi0+eGlkIDogSW52YWxpZFRyYW5zYWN0aW9u SWQ7CisJY3R4LT53cml0ZV9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCisJLyogZG8gdGhlIGFj dHVhbCB3b3JrOiBjYWxsIGNhbGxiYWNrICovCisJY3R4LT5jYWxsYmFja3Muc3RyZWFtX2RkbG1l c3NhZ2VfY2IoY3R4LCB0eG4sIG1lc3NhZ2VfbHNuLCBwcmVmaXgsIHJlbGlkLAorCQkJCQkJCQkJ CWNtZHR5cGUsIG1lc3NhZ2Vfc2l6ZSwgbWVzc2FnZSk7CisKKwkvKiBQb3AgdGhlIGVycm9yIGNv bnRleHQgc3RhY2sgKi8KKwllcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyY2FsbGJhY2sucHJldmlv dXM7Cit9CisKK3N0YXRpYyB2b2lkCiBzdHJlYW1fdHJ1bmNhdGVfY2Jfd3JhcHBlcihSZW9yZGVy QnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJICAgaW50IG5yZWxh dGlvbnMsIFJlbGF0aW9uIHJlbGF0aW9uc1tdLAogCQkJCQkJICAgUmVvcmRlckJ1ZmZlckNoYW5n ZSAqY2hhbmdlKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9w cm90by5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCmluZGV4IGZm ODUxM2UuLmYzNTQwNjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvcHJvdG8uYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMK QEAgLTY2Myw2ICs2NjMsNTIgQEAgbG9naWNhbHJlcF93cml0ZV9tZXNzYWdlKFN0cmluZ0luZm8g b3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCiB9CiAKIC8qCisgKiBSZWFk IERETCBNRVNTQUdFIGZyb20gc3RyZWFtCisgKi8KK2NoYXIgKgorbG9naWNhbHJlcF9yZWFkX2Rk bG1lc3NhZ2UoU3RyaW5nSW5mbyBpbiwgWExvZ1JlY1B0ciAqbHNuLAorCQkJCQkJICAgY29uc3Qg Y2hhciAqKnByZWZpeCwKKwkJCQkJCSAgIFNpemUgKnN6KQoreworCXVpbnQ4IGZsYWdzOworCWNo YXIgKm1zZzsKKworCS8vVE9ETyBkb3VibGUgY2hlY2sgd2hlbiBkbyB3ZSBuZWVkIHRvIGdldCBU cmFuc2FjdGlvbklkLgorCisJZmxhZ3MgPSBwcV9nZXRtc2dpbnQoaW4sIDEpOworCWlmIChmbGFn cyAhPSAwKQorCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGZsYWdzICV1IGluIGRkbCBtZXNz YWdlIiwgZmxhZ3MpOworCSpsc24gPSBwcV9nZXRtc2dpbnQ2NChpbik7CisJKnByZWZpeCA9IHBx X2dldG1zZ3N0cmluZyhpbik7CisJKnN6ID0gcHFfZ2V0bXNnaW50KGluLCA0KTsKKwltc2cgPSAo Y2hhciAqKSBwcV9nZXRtc2dieXRlcyhpbiwgKnN6KTsKKworCXJldHVybiBtc2c7Cit9CisKKy8q CisgKiBXcml0ZSBEREwgTUVTU0FHRSB0byBzdHJlYW0KKyAqLwordm9pZAorbG9naWNhbHJlcF93 cml0ZV9kZGxtZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1Jl Y1B0ciBsc24sCisJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LCBjb25zdCBjaGFy ICptZXNzYWdlKQoreworCXVpbnQ4CQlmbGFncyA9IDA7CisKKwlwcV9zZW5kYnl0ZShvdXQsIExP R0lDQUxfUkVQX01TR19ERExNRVNTQUdFKTsKKworCS8qIHRyYW5zYWN0aW9uIElEIChpZiBub3Qg dmFsaWQsIHdlJ3JlIG5vdCBzdHJlYW1pbmcpICovCisJaWYgKFRyYW5zYWN0aW9uSWRJc1ZhbGlk KHhpZCkpCisJCXBxX3NlbmRpbnQzMihvdXQsIHhpZCk7CisKKwlwcV9zZW5kaW50OChvdXQsIGZs YWdzKTsKKwlwcV9zZW5kaW50NjQob3V0LCBsc24pOworCXBxX3NlbmRzdHJpbmcob3V0LCBwcmVm aXgpOworCXBxX3NlbmRpbnQzMihvdXQsIHN6KTsKKwlwcV9zZW5kYnl0ZXMob3V0LCBtZXNzYWdl LCBzeik7Cit9CisKKy8qCiAgKiBXcml0ZSByZWxhdGlvbiBkZXNjcmlwdGlvbiB0byB0aGUgb3V0 cHV0IHN0cmVhbS4KICAqLwogdm9pZApAQCAtMTIxOCw2ICsxMjY0LDggQEAgbG9naWNhbHJlcF9t ZXNzYWdlX3R5cGUoTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9uKQogCQkJcmV0dXJuICJUWVBFIjsK IAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfTUVTU0FHRToKIAkJCXJldHVybiAiTUVTU0FHRSI7CisJ CWNhc2UgTE9HSUNBTF9SRVBfTVNHX0RETE1FU1NBR0U6CisJCQlyZXR1cm4gIkRETCI7CiAJCWNh c2UgTE9HSUNBTF9SRVBfTVNHX0JFR0lOX1BSRVBBUkU6CiAJCQlyZXR1cm4gIkJFR0lOIFBSRVBB UkUiOwogCQljYXNlIExPR0lDQUxfUkVQX01TR19QUkVQQVJFOgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYwppbmRleCA4OGEzN2ZkLi4xZjZkNGVh IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZm ZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIu YwpAQCAtOTQsNiArOTQsNyBAQAogI2luY2x1ZGUgImxpYi9iaW5hcnloZWFwLmgiCiAjaW5jbHVk ZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicmVwbGljYXRp b24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIKICNpbmNs dWRlICJyZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24v c2xvdC5oIgpAQCAtNTEyLDYgKzUxMywxNCBAQCBSZW9yZGVyQnVmZmVyUmV0dXJuQ2hhbmdlKFJl b3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2UsCiAJCQkJcGZyZWUo Y2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlKTsKIAkJCWNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZSA9 IE5VTEw7CiAJCQlicmVhazsKKwkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMTUVTU0FH RToKKwkJCWlmIChjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCAhPSBOVUxMKQorCQkJCXBmcmVl KGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4KTsKKwkJCWNoYW5nZS0+ZGF0YS5kZGxtc2cucHJl Zml4ID0gTlVMTDsKKwkJCWlmIChjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UgIT0gTlVMTCkK KwkJCQlwZnJlZShjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UpOworCQkJY2hhbmdlLT5kYXRh LmRkbG1zZy5tZXNzYWdlID0gTlVMTDsKKwkJCWJyZWFrOwogCQljYXNlIFJFT1JERVJfQlVGRkVS X0NIQU5HRV9JTlZBTElEQVRJT046CiAJCQlpZiAoY2hhbmdlLT5kYXRhLmludmFsLmludmFsaWRh dGlvbnMpCiAJCQkJcGZyZWUoY2hhbmdlLT5kYXRhLmludmFsLmludmFsaWRhdGlvbnMpOwpAQCAt ODY3LDYgKzg3NiwzNiBAQCBSZW9yZGVyQnVmZmVyUXVldWVNZXNzYWdlKFJlb3JkZXJCdWZmZXIg KnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKIH0KIAogLyoKKyAqIEEgdHJhbnNhY3Rpb25hbCBEREwg bWVzc2FnZSBpcyBxdWV1ZWQgdG8gYmUgcHJvY2Vzc2VkIHVwb24gY29tbWl0LgorICovCit2b2lk CitSZW9yZGVyQnVmZmVyUXVldWVERExNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2Fj dGlvbklkIHhpZCwKKwkJCQkJCQkgWExvZ1JlY1B0ciBsc24sIGNvbnN0IGNoYXIgKnByZWZpeCwK KwkJCQkJCQkgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsCisJCQkJCQkJ IE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlKQoreworCU1lbW9yeUNvbnRl eHQgb2xkY29udGV4dDsKKwlSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2U7CisKKwlBc3NlcnQo eGlkICE9IEludmFsaWRUcmFuc2FjdGlvbklkKTsKKworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250 ZXh0U3dpdGNoVG8ocmItPmNvbnRleHQpOworCisJY2hhbmdlID0gUmVvcmRlckJ1ZmZlckdldENo YW5nZShyYik7CisJY2hhbmdlLT5hY3Rpb24gPSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMTUVT U0FHRTsKKwljaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCA9IHBzdHJkdXAocHJlZml4KTsKKwlj aGFuZ2UtPmRhdGEuZGRsbXNnLnJlbGlkID0gcmVsaWQ7CisJY2hhbmdlLT5kYXRhLmRkbG1zZy5j bWR0eXBlID0gY21kdHlwZTsKKwljaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSA9IG1l c3NhZ2Vfc2l6ZTsKKwljaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UgPSBwYWxsb2MobWVzc2Fn ZV9zaXplKTsKKwltZW1jcHkoY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlLCBtZXNzYWdlLCBt ZXNzYWdlX3NpemUpOworCisJUmVvcmRlckJ1ZmZlclF1ZXVlQ2hhbmdlKHJiLCB4aWQsIGxzbiwg Y2hhbmdlLCBmYWxzZSk7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7Cit9 CisKKy8qCiAgKiBBc3NlcnRUWE5Mc25PcmRlcgogICoJCVZlcmlmeSBMU04gb3JkZXJpbmcgb2Yg dHJhbnNhY3Rpb24gbGlzdHMgaW4gdGhlIHJlb3JkZXJidWZmZXIKICAqCkBAIC0xOTU4LDYgKzE5 OTcsMjkgQEAgUmVvcmRlckJ1ZmZlckFwcGx5TWVzc2FnZShSZW9yZGVyQnVmZmVyICpyYiwgUmVv cmRlckJ1ZmZlclRYTiAqdHhuLAogfQogCiAvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBSZW9y ZGVyQnVmZmVyUHJvY2Vzc1RYTiBmb3IgYXBwbHlpbmcgdGhlIERETCBtZXNzYWdlLgorICovCitz dGF0aWMgaW5saW5lIHZvaWQKK1Jlb3JkZXJCdWZmZXJBcHBseURETE1lc3NhZ2UoUmVvcmRlckJ1 ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkgUmVvcmRlckJ1ZmZlckNo YW5nZSAqY2hhbmdlLCBib29sIHN0cmVhbWluZykKK3sKKwlpZiAoc3RyZWFtaW5nKQorCQlyYi0+ c3RyZWFtX2RkbG1lc3NhZ2UocmIsIHR4biwgY2hhbmdlLT5sc24sCisJCQkJCQkJICBjaGFuZ2Ut PmRhdGEuZGRsbXNnLnByZWZpeCwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGxtc2cucmVsaWQs CisJCQkJCQkJICBjaGFuZ2UtPmRhdGEuZGRsbXNnLmNtZHR5cGUsCisJCQkJCQkJICBjaGFuZ2Ut PmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGxtc2cu bWVzc2FnZSk7CisJZWxzZQorCQlyYi0+ZGRsbWVzc2FnZShyYiwgdHhuLCBjaGFuZ2UtPmxzbiwK KwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXgsCisJCQkJCSAgIGNoYW5nZS0+ZGF0 YS5kZGxtc2cucmVsaWQsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGxtc2cuY21kdHlwZSwKKwkJ CQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlX3NpemUsCisJCQkJCSAgIGNoYW5nZS0+ ZGF0YS5kZGxtc2cubWVzc2FnZSk7Cit9CisKKy8qCiAgKiBGdW5jdGlvbiB0byBzdG9yZSB0aGUg Y29tbWFuZCBpZCBhbmQgc25hcHNob3QgYXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudAogICogc3Ry ZWFtIHNvIHRoYXQgd2UgY2FuIHJldXNlIHRoZSBzYW1lIHdoaWxlIHNlbmRpbmcgdGhlIG5leHQg c3RyZWFtLgogICovCkBAIC0yMzM1LDYgKzIzOTcsMTAgQEAgUmVvcmRlckJ1ZmZlclByb2Nlc3NU WE4oUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJUmVvcmRl ckJ1ZmZlckFwcGx5TWVzc2FnZShyYiwgdHhuLCBjaGFuZ2UsIHN0cmVhbWluZyk7CiAJCQkJCWJy ZWFrOwogCisJCQkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMTUVTU0FHRToKKwkJCQkJ UmVvcmRlckJ1ZmZlckFwcGx5RERMTWVzc2FnZShyYiwgdHhuLCBjaGFuZ2UsIHN0cmVhbWluZyk7 CisJCQkJCWJyZWFrOworCiAJCQkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFU SU9OOgogCQkJCQkvKiBFeGVjdXRlIHRoZSBpbnZhbGlkYXRpb24gbWVzc2FnZXMgbG9jYWxseSAq LwogCQkJCQlSZW9yZGVyQnVmZmVyRXhlY3V0ZUludmFsaWRhdGlvbnMoY2hhbmdlLT5kYXRhLmlu dmFsLm5pbnZhbGlkYXRpb25zLApAQCAtMzcxMCw2ICszNzc2LDQwIEBAIFJlb3JkZXJCdWZmZXJT ZXJpYWxpemVDaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwK IAogCQkJCWJyZWFrOwogCQkJfQorCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNT QUdFOgorCQkJeworCQkJCWNoYXIJICAgKmRhdGE7CisJCQkJU2l6ZQkJcHJlZml4X3NpemUgPSBz dHJsZW4oY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXgpICsgMTsKKworCQkJCXN6ICs9IHByZWZp eF9zaXplICsgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlX3NpemUgKworCQkJCQlzaXplb2Yo U2l6ZSkgKyBzaXplb2YoT2lkKSArIHNpemVvZihpbnQpICsgc2l6ZW9mKFNpemUpOworCQkJCVJl b3JkZXJCdWZmZXJTZXJpYWxpemVSZXNlcnZlKHJiLCBzeik7CisKKwkJCQlkYXRhID0gKChjaGFy ICopIHJiLT5vdXRidWYpICsgc2l6ZW9mKFJlb3JkZXJCdWZmZXJEaXNrQ2hhbmdlKTsKKworCQkJ CS8qIG1pZ2h0IGhhdmUgYmVlbiByZWFsbG9jYXRlZCBhYm92ZSAqLworCQkJCW9uZGlzayA9IChS ZW9yZGVyQnVmZmVyRGlza0NoYW5nZSAqKSByYi0+b3V0YnVmOworCisJCQkJLyogd3JpdGUgdGhl IHByZWZpeCwgcmVsaWQgYW5kIGNtZHR5cGUgaW5jbHVkaW5nIHRoZSBzaXplICovCisJCQkJbWVt Y3B5KGRhdGEsICZwcmVmaXhfc2l6ZSwgc2l6ZW9mKFNpemUpKTsKKwkJCQlkYXRhICs9IHNpemVv ZihTaXplKTsKKwkJCQltZW1jcHkoZGF0YSwgJmNoYW5nZS0+ZGF0YS5kZGxtc2cucmVsaWQsIHNp emVvZihPaWQpKTsKKwkJCQlkYXRhICs9IHNpemVvZihPaWQpOworCQkJCW1lbWNweShkYXRhLCAm Y2hhbmdlLT5kYXRhLmRkbG1zZy5jbWR0eXBlLCBzaXplb2YoaW50KSk7CisJCQkJZGF0YSArPSBz aXplb2YoaW50KTsKKwkJCQltZW1jcHkoZGF0YSwgY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXgs CisJCQkJCSAgIHByZWZpeF9zaXplKTsKKwkJCQlkYXRhICs9IHByZWZpeF9zaXplOworCisJCQkJ Lyogd3JpdGUgdGhlIG1lc3NhZ2UgaW5jbHVkaW5nIHRoZSBzaXplICovCisJCQkJbWVtY3B5KGRh dGEsICZjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSwgc2l6ZW9mKFNpemUpKTsKKwkJ CQlkYXRhICs9IHNpemVvZihTaXplKTsKKwkJCQltZW1jcHkoZGF0YSwgY2hhbmdlLT5kYXRhLmRk bG1zZy5tZXNzYWdlLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSk7 CisJCQkJZGF0YSArPSBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZTsKKworCQkJCWJy ZWFrOworCQkJfQogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CiAJ CQl7CiAJCQkJY2hhcgkgICAqZGF0YTsKQEAgLTQwMjQsNiArNDEyNCwxNSBAQCBSZW9yZGVyQnVm ZmVyQ2hhbmdlU2l6ZShSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2UpCiAKIAkJCQlicmVhazsK IAkJCX0KKwkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMTUVTU0FHRToKKwkJCXsKKwkJ CQlTaXplCQlwcmVmaXhfc2l6ZSA9IHN0cmxlbihjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCkg KyAxOworCisJCQkJc3ogKz0gcHJlZml4X3NpemUgKyBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3Nh Z2Vfc2l6ZSArCisJCQkJCXNpemVvZihTaXplKSArIHNpemVvZihTaXplKSArIHNpemVvZihPaWQp ICsgc2l6ZW9mKGludCk7CisKKwkJCQlicmVhazsKKwkJCX0KIAkJY2FzZSBSRU9SREVSX0JVRkZF Ul9DSEFOR0VfSU5WQUxJREFUSU9OOgogCQkJewogCQkJCXN6ICs9IHNpemVvZihTaGFyZWRJbnZh bGlkYXRpb25NZXNzYWdlKSAqCkBAIC00Mjk5LDYgKzQ0MDgsMzMgQEAgUmVvcmRlckJ1ZmZlclJl c3RvcmVDaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAog CQkJCWJyZWFrOwogCQkJfQorCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdF OgorCQkJeworCQkJCVNpemUJCXByZWZpeF9zaXplOworCisJCQkJLyogcmVhZCBwcmVmaXggKi8K KwkJCQltZW1jcHkoJnByZWZpeF9zaXplLCBkYXRhLCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEg Kz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNweSgmY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwg ZGF0YSwgc2l6ZW9mKE9pZCkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKE9pZCk7CisJCQkJbWVtY3B5 KCZjaGFuZ2UtPmRhdGEuZGRsbXNnLmNtZHR5cGUsIGRhdGEsIHNpemVvZihpbnQpKTsKKwkJCQlk YXRhICs9IHNpemVvZihpbnQpOworCQkJCWNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4ID0gTWVt b3J5Q29udGV4dEFsbG9jKHJiLT5jb250ZXh0LCBwcmVmaXhfc2l6ZSk7CisJCQkJbWVtY3B5KGNo YW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4LCBkYXRhLCBwcmVmaXhfc2l6ZSk7CisJCQkJQXNzZXJ0 KGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4W3ByZWZpeF9zaXplIC0gMV0gPT0gJ1wwJyk7CisJ CQkJZGF0YSArPSBwcmVmaXhfc2l6ZTsKKworCQkJCS8qIHJlYWQgdGhlIG1lc3NhZ2UgKi8KKwkJ CQltZW1jcHkoJmNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplLCBkYXRhLCBzaXplb2YoU2l6 ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCWNoYW5nZS0+ZGF0YS5tc2cubWVz c2FnZSA9IE1lbW9yeUNvbnRleHRBbGxvYyhyYi0+Y29udGV4dCwKKwkJCQkJCQkJCQkJCQkJCSAg Y2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUpOworCQkJCW1lbWNweShjaGFuZ2UtPmRhdGEu bXNnLm1lc3NhZ2UsIGRhdGEsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXpl KTsKKwkJCQlkYXRhICs9IGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplOworCisJCQkJYnJl YWs7CisJCQl9CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKIAkJ CXsKIAkJCQlTaXplCQlpbnZhbF9zaXplID0gc2l6ZW9mKFNoYXJlZEludmFsaWRhdGlvbk1lc3Nh Z2UpICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2Vy LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCmluZGV4IDVmOGM1 NDEuLjQ0M2EzYzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv d29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwpA QCAtMTU2LDYgKzE1Niw3IEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9k ZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgorI2luY2x1 ZGUgInBhcnNlci9hbmFseXplLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9z dG1hc3Rlci9iZ3dvcmtlci5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvaW50ZXJydXB0LmgiCkBA IC0xNzksNyArMTgwLDEwIEBACiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRl ICJ0Y29wL2RkbF9kZXBhcnNlLmgiCisjaW5jbHVkZSAidGNvcC9wcXVlcnkuaCIKICNpbmNsdWRl ICJ0Y29wL3Rjb3Bwcm90LmgiCisjaW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCiAjaW5jbHVkZSAi dXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGls cy9jYXRjYWNoZS5oIgpAQCAtMjQ2Myw2ICsyNDY3LDIzMCBAQCBhcHBseV9oYW5kbGVfdHJ1bmNh dGUoU3RyaW5nSW5mbyBzKQogCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7CiB9CiAKKy8qIFJlbW92 ZSB0aGUgZGF0YSBwb3B1bGF0aW9uIGZyb20gdGhlIGNvbW1hbmQgKi8KK3N0YXRpYyB2b2lkCitw cmVwcm9jZXNzX2NyZWF0ZV90YWJsZShSYXdTdG10ICpjb21tYW5kKQoreworCUNvbW1hbmRUYWcJ Y29tbWFuZFRhZzsKKworCWNvbW1hbmRUYWcgPSBDcmVhdGVDb21tYW5kVGFnKChOb2RlICopY29t bWFuZCk7CisKKwlzd2l0Y2ggKGNvbW1hbmRUYWcpCisJeworCQljYXNlIENNRFRBR19DUkVBVEVf VEFCTEVfQVM6CisJCWNhc2UgQ01EVEFHX1NFTEVDVF9JTlRPOgorCQkJeworCQkJCUNyZWF0ZVRh YmxlQXNTdG10ICpjYXN0bXQgPSAoQ3JlYXRlVGFibGVBc1N0bXQgKikgY29tbWFuZC0+c3RtdDsK KwkJCQlpZiAoY2FzdG10LT5vYmp0eXBlID09IE9CSkVDVF9UQUJMRSkKKwkJCQl7CisJCQkJCS8q CisJCQkJCSAqIEZvcmNlIHNraXBwaW5nIGRhdGEgcG9wdWxhdGlvbiB0byBhdm9pZCBkYXRhCisJ CQkJCSAqIGluY29uc2lzdGVuY3kuIERhdGEgc2hvdWxkIGJlIHJlcGxpY2F0ZWQgZnJvbSB0aGUK KwkJCQkJICogcHVibGlzaGVyIGluc3RlYWQuCisJCQkJCSAqLworCQkJCQljYXN0bXQtPmludG8t PnNraXBEYXRhID0gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDTURUQUdf U0VMRUNUOgorCQkJeworCQkJCVNlbGVjdFN0bXQgKnNzdG10ID0gKFNlbGVjdFN0bXQgKikgY29t bWFuZC0+c3RtdDsKKworCQkJCWlmIChzc3RtdC0+aW50b0NsYXVzZSAhPSBOVUxMKQorCQkJCXsK KwkJCQkJLyoKKwkJCQkJICogRm9yY2Ugc2tpcHBpbmcgZGF0YSBwb3B1bGF0aW9uIHRvIGF2b2lk IGRhdGEKKwkJCQkJICogaW5jb25zaXN0ZW5jeS4gRGF0YSBzaG91bGQgYmUgcmVwbGljYXRlZCBm cm9tIHRoZQorCQkJCQkgKiBwdWJsaXNoZXIgaW5zdGVhZC4KKwkJCQkJICovCisJCQkJCXNzdG10 LT5pbnRvQ2xhdXNlLT5za2lwRGF0YSA9IHRydWU7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJ ZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogSGFuZGxlIENSRUFURSBUQUJMRSBj b21tYW5kCisgKgorICogQ2FsbCBBZGRTdWJzY3JpcHRpb25SZWxTdGF0ZSBmb3IgQ1JFQVRFIFRB QkVMIGNvbW1hbmQgdG8gc2V0IHRoZSByZWxzdGF0ZSB0bworICogU1VCUkVMX1NUQVRFX1JFQURZ IHNvIERNTCBjaGFuZ2VzIG9uIHRoaXMgbmV3IHRhYmxlIGNhbiBiZSByZXBsaWNhdGVkIHdpdGhv dXQKKyAqIGhhdmluZyB0byBtYW51YWxseSBydW4gImFsdGVyIHN1YnNjcmlwdGlvbiAuLi4gcmVm cmVzaCBwdWJsaWNhdGlvbiIKKyAqLworc3RhdGljIHZvaWQKK2hhbmRsZV9jcmVhdGVfdGFibGUo UmF3U3RtdCAqY29tbWFuZCkKK3sKKwlDb21tYW5kVGFnCWNvbW1hbmRUYWc7CisJUmFuZ2VWYXIJ ICpydiA9IE5VTEw7CisJT2lkCQkJcmVsaWQ7CisJT2lkCQkJcmVsbmFtZXNwYWNlID0gSW52YWxp ZE9pZDsKKwljaGFyIAkJICpzY2hlbWFuYW1lID0gTlVMTDsKKwljaGFyCQkgKnJlbG5hbWUgPSBO VUxMOworCisJY29tbWFuZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWcoKE5vZGUgKikgY29tbWFuZCk7 CisKKwlzd2l0Y2ggKGNvbW1hbmRUYWcpCisJeworCQljYXNlIENNRFRBR19DUkVBVEVfVEFCTEU6 CisJCQl7CisJCQkJQ3JlYXRlU3RtdCAqY3N0bXQgPSAoQ3JlYXRlU3RtdCAqKSBjb21tYW5kLT5z dG10OworCQkJCXJ2ID0gY3N0bXQtPnJlbGF0aW9uOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1 bHQ6CisJCQlicmVhazsKKwl9CisKKwlpZiAoIXJ2KQorCQlyZXR1cm47CisKKwlzY2hlbWFuYW1l ID0gcnYtPnNjaGVtYW5hbWU7CisJcmVsbmFtZSA9IHJ2LT5yZWxuYW1lOworCisJaWYgKHNjaGVt YW5hbWUgIT0gTlVMTCkKKwkJcmVsbmFtZXNwYWNlID0gZ2V0X25hbWVzcGFjZV9vaWQoc2NoZW1h bmFtZSwgZmFsc2UpOworCisJaWYgKHJlbG5hbWVzcGFjZSAhPSBJbnZhbGlkT2lkKQorCQlyZWxp ZCA9IGdldF9yZWxuYW1lX3JlbGlkKHJlbG5hbWUsIHJlbG5hbWVzcGFjZSk7CisJZWxzZQorCQly ZWxpZCA9IFJlbG5hbWVHZXRSZWxpZChyZWxuYW1lKTsKKworCWlmIChyZWxpZCAhPSBJbnZhbGlk T2lkKQorCXsKKwkJQWRkU3Vic2NyaXB0aW9uUmVsU3RhdGUoTXlTdWJzY3JpcHRpb24tPm9pZCwg cmVsaWQsCisJCQkJCQkJCVNVQlJFTF9TVEFURV9SRUFEWSwKKwkJCQkJCQkJSW52YWxpZFhMb2dS ZWNQdHIpOworCQllcmVwb3J0KERFQlVHMSwKKwkJCQkoZXJybXNnX2ludGVybmFsKCJ0YWJsZSBc IiVzXCIgYWRkZWQgdG8gc3Vic2NyaXB0aW9uIFwiJXNcIiIsCisJCQkJCQkJCSByZWxuYW1lLCBN eVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCithcHBseV9oYW5k bGVfZGRsKFN0cmluZ0luZm8gcykKK3sKKwlYTG9nUmVjUHRyIGxzbjsKKwljb25zdCBjaGFyICpw cmVmaXggPSBOVUxMOworCWNoYXIgKm1lc3NhZ2UgPSBOVUxMOworCWNoYXIJICAgKmRkbF9jb21t YW5kOworCVNpemUJCXN6OworCUxpc3QJICAgKnBhcnNldHJlZV9saXN0OworCUxpc3RDZWxsICAg KnBhcnNldHJlZV9pdGVtOworCURlc3RSZWNlaXZlciAqcmVjZWl2ZXI7CisJTWVtb3J5Q29udGV4 dCBvbGRjb250ZXh0OworCWNvbnN0IGNoYXIgKnNhdmVfZGVidWdfcXVlcnlfc3RyaW5nID0gZGVi dWdfcXVlcnlfc3RyaW5nOworCisJbWVzc2FnZSA9IGxvZ2ljYWxyZXBfcmVhZF9kZGxtZXNzYWdl KHMsICZsc24sICZwcmVmaXgsICZzeik7CisKKwkvKiBNYWtlIHN1cmUgd2UgYXJlIGluIGEgdHJh bnNhY3Rpb24gY29tbWFuZCAqLworCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKKworCWRkbF9j b21tYW5kID0gZGRsX2RlcGFyc2VfanNvbl90b19zdHJpbmcobWVzc2FnZSk7CisJZGVidWdfcXVl cnlfc3RyaW5nID0gZGRsX2NvbW1hbmQ7CisKKwkvKiBEZXN0Tm9uZSBmb3IgbG9naWNhbCByZXBs aWNhdGlvbiAqLworCXJlY2VpdmVyID0gQ3JlYXRlRGVzdFJlY2VpdmVyKERlc3ROb25lKTsKKwlw YXJzZXRyZWVfbGlzdCA9IHBnX3BhcnNlX3F1ZXJ5KGRkbF9jb21tYW5kKTsKKworCWZvcmVhY2go cGFyc2V0cmVlX2l0ZW0sIHBhcnNldHJlZV9saXN0KQorCXsKKwkJTGlzdAkgICAqcGxhbnRyZWVf bGlzdDsKKwkJTGlzdAkgICAqcXVlcnl0cmVlX2xpc3Q7CisJCVJhd1N0bXQJICAgKmNvbW1hbmQg PSAoUmF3U3RtdCAqKSBsZmlyc3QocGFyc2V0cmVlX2l0ZW0pOworCQlDb21tYW5kVGFnCWNvbW1h bmRUYWc7CisJCU1lbW9yeUNvbnRleHQgcGVyX3BhcnNldHJlZV9jb250ZXh0ID0gTlVMTDsKKwkJ UG9ydGFsCQlwb3J0YWw7CisJCWJvb2wJCSBzbmFwc2hvdF9zZXQgPSBmYWxzZTsKKworCQljb21t YW5kVGFnID0gQ3JlYXRlQ29tbWFuZFRhZygoTm9kZSAqKSBjb21tYW5kKTsKKworCQkvKiBJZiB3 ZSBnb3QgYSBjYW5jZWwgc2lnbmFsIGluIHBhcnNpbmcgb3IgcHJpb3IgY29tbWFuZCwgcXVpdCAq LworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCS8qIFJlbW92ZSBkYXRhIHBvcHVsYXRp b24gZnJvbSB0aGUgY29tbWFuZCAqLworCQlwcmVwcm9jZXNzX2NyZWF0ZV90YWJsZShjb21tYW5k KTsKKworCQkvKgorCQkgKiBTZXQgdXAgYSBzbmFwc2hvdCBpZiBwYXJzZSBhbmFseXNpcy9wbGFu bmluZyB3aWxsIG5lZWQgb25lLgorCQkgKi8KKwkJaWYgKGFuYWx5emVfcmVxdWlyZXNfc25hcHNo b3QoY29tbWFuZCkpCisJCXsKKwkJCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNu YXBzaG90KCkpOworCQkJc25hcHNob3Rfc2V0ID0gdHJ1ZTsKKwkJfQorCisJCS8qCisJCSAqIFdl IGRvIHRoZSB3b3JrIGZvciBlYWNoIHBhcnNldHJlZSBpbiBhIHNob3J0LWxpdmVkIGNvbnRleHQs IHRvCisJCSAqIGxpbWl0IHRoZSBtZW1vcnkgdXNlZCB3aGVuIHRoZXJlIGFyZSBtYW55IGNvbW1h bmRzIGluIHRoZSBzdHJpbmcuCisJCSAqLworCQlwZXJfcGFyc2V0cmVlX2NvbnRleHQgPQorCQkJ QWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkgICJl eGVjdXRlX3NxbF9zdHJpbmcgcGVyLXN0YXRlbWVudCBjb250ZXh0IiwKKwkJCQkJCQkJICBBTExP Q1NFVF9ERUZBVUxUX1NJWkVTKTsKKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hU byhwZXJfcGFyc2V0cmVlX2NvbnRleHQpOworCisJCXF1ZXJ5dHJlZV9saXN0ID0gcGdfYW5hbHl6 ZV9hbmRfcmV3cml0ZV9maXhlZHBhcmFtcyhjb21tYW5kLAorCQkJCQkJCQkJCQkJCQkJZGRsX2Nv bW1hbmQsCisJCQkJCQkJCQkJCQkJCQlOVUxMLCAwLCBOVUxMKTsKKworCQlwbGFudHJlZV9saXN0 ID0gcGdfcGxhbl9xdWVyaWVzKHF1ZXJ5dHJlZV9saXN0LCBkZGxfY29tbWFuZCwgMCwgTlVMTCk7 CisKKwkJLyogRG9uZSB3aXRoIHRoZSBzbmFwc2hvdCB1c2VkIGZvciBwYXJzaW5nL3BsYW5uaW5n ICovCisJCWlmIChzbmFwc2hvdF9zZXQpCisJCQlQb3BBY3RpdmVTbmFwc2hvdCgpOworCisJCXBv cnRhbCA9IENyZWF0ZVBvcnRhbCgibG9naWNhbCByZXBsaWNhdGlvbiIsIHRydWUsIHRydWUpOwor CisJCS8qCisJCSAqIFdlIGRvbid0IGhhdmUgdG8gY29weSBhbnl0aGluZyBpbnRvIHRoZSBwb3J0 YWwsIGJlY2F1c2UgZXZlcnl0aGluZworCQkgKiB3ZSBhcmUgcGFzc2luZyBoZXJlIGlzIGluIEFw cGx5TWVzc2FnZUNvbnRleHQgb3IgdGhlCisJCSAqIHBlcl9wYXJzZXRyZWVfY29udGV4dCwgYW5k IHNvIHdpbGwgb3V0bGl2ZSB0aGUgcG9ydGFsIGFueXdheS4KKwkJICovCisJCVBvcnRhbERlZmlu ZVF1ZXJ5KHBvcnRhbCwKKwkJCQkJCSAgTlVMTCwKKwkJCQkJCSAgZGRsX2NvbW1hbmQsCisJCQkJ CQkgIGNvbW1hbmRUYWcsCisJCQkJCQkgIHBsYW50cmVlX2xpc3QsCisJCQkJCQkgIE5VTEwpOwor CisJCS8qCisJCSAqIFN0YXJ0IHRoZSBwb3J0YWwuICBObyBwYXJhbWV0ZXJzIGhlcmUuCisJCSAq LworCQlQb3J0YWxTdGFydChwb3J0YWwsIE5VTEwsIDAsIEludmFsaWRTbmFwc2hvdCk7CisKKwkJ LyoKKwkJICogU3dpdGNoIGJhY2sgdG8gdHJhbnNhY3Rpb24gY29udGV4dCBmb3IgZXhlY3V0aW9u LgorCQkgKi8KKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJCSh2b2lk KSBQb3J0YWxSdW4ocG9ydGFsLAorCQkJCQkJIEZFVENIX0FMTCwKKwkJCQkJCSB0cnVlLAorCQkJ CQkJIHRydWUsCisJCQkJCQkgcmVjZWl2ZXIsCisJCQkJCQkgcmVjZWl2ZXIsCisJCQkJCQkgTlVM TCk7CisKKwkJUG9ydGFsRHJvcChwb3J0YWwsIGZhbHNlKTsKKworCQlDb21tYW5kQ291bnRlcklu Y3JlbWVudCgpOworCisJCS8qCisJCSAqIFRhYmxlIGNyZWF0ZWQgYnkgRERMIHJlcGxpY2F0aW9u IChkYXRhYmFzZSBsZXZlbCkgaXMgYXV0b21hdGljYWxseQorCQkgKiBhZGRlZCB0byB0aGUgc3Vi c2NyaXB0aW9uIGhlcmUuCisJCSAqLworCQloYW5kbGVfY3JlYXRlX3RhYmxlKGNvbW1hbmQpOwor CisJCS8qIE5vdyB3ZSBtYXkgZHJvcCB0aGUgcGVyLXBhcnNldHJlZSBjb250ZXh0LCBpZiBvbmUg d2FzIGNyZWF0ZWQuICovCisJCU1lbW9yeUNvbnRleHREZWxldGUocGVyX3BhcnNldHJlZV9jb250 ZXh0KTsKKwl9CisKKwlkZWJ1Z19xdWVyeV9zdHJpbmcgPSBzYXZlX2RlYnVnX3F1ZXJ5X3N0cmlu ZzsKKwllbmRfcmVwbGljYXRpb25fc3RlcCgpOworfQorCiAKIC8qCiAgKiBMb2dpY2FsIHJlcGxp Y2F0aW9uIHByb3RvY29sIG1lc3NhZ2UgZGlzcGF0Y2hlci4KQEAgLTI1MjgsNiArMjc1NiwxMCBA QCBhcHBseV9kaXNwYXRjaChTdHJpbmdJbmZvIHMpCiAJCQkgKi8KIAkJCWJyZWFrOwogCisJCWNh c2UgTE9HSUNBTF9SRVBfTVNHX0RETE1FU1NBR0U6CisJCQlhcHBseV9oYW5kbGVfZGRsKHMpOwor CQkJYnJlYWs7CisKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfU1RSRUFNX1NUQVJUOgogCQkJYXBw bHlfaGFuZGxlX3N0cmVhbV9zdGFydChzKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKaW5kZXggYTNjMWJhOC4uN2JmNjNkYyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYworKysgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCkBAIC01Myw2ICs1Mywx MSBAQCBzdGF0aWMgdm9pZCBwZ291dHB1dF9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQg KmN0eCwKIAkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLCBYTG9nUmVjUHRyIG1lc3NhZ2Vf bHNuLAogCQkJCQkJCSBib29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNoYXIgKnByZWZpeCwKIAkJ CQkJCQkgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitzdGF0aWMgdm9pZCBwZ291dHB1 dF9kZGxtZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkJUmVvcmRl ckJ1ZmZlclRYTiAqdHhuLCBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQljb25zdCBj aGFyICpwcmVmaXgsIE9pZCByZWxpZCwKKwkJCQkJCQkJRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0 eXBlLAorCQkJCQkJCQlTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKIHN0YXRpYyBib29s IHBnb3V0cHV0X29yaWdpbl9maWx0ZXIoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJ CQkJCQkgICBSZXBPcmlnaW5JZCBvcmlnaW5faWQpOwogc3RhdGljIHZvaWQgcGdvdXRwdXRfYmVn aW5fcHJlcGFyZV90eG4oTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LApAQCAtMjU2LDYgKzI2 MSw3IEBAIF9QR19vdXRwdXRfcGx1Z2luX2luaXQoT3V0cHV0UGx1Z2luQ2FsbGJhY2tzICpjYikK IAljYi0+Y2hhbmdlX2NiID0gcGdvdXRwdXRfY2hhbmdlOwogCWNiLT50cnVuY2F0ZV9jYiA9IHBn b3V0cHV0X3RydW5jYXRlOwogCWNiLT5tZXNzYWdlX2NiID0gcGdvdXRwdXRfbWVzc2FnZTsKKwlj Yi0+ZGRsbWVzc2FnZV9jYiA9IHBnb3V0cHV0X2RkbG1lc3NhZ2U7CiAJY2ItPmNvbW1pdF9jYiA9 IHBnb3V0cHV0X2NvbW1pdF90eG47CiAKIAljYi0+YmVnaW5fcHJlcGFyZV9jYiA9IHBnb3V0cHV0 X2JlZ2luX3ByZXBhcmVfdHhuOwpAQCAtMjcyLDYgKzI3OCw3IEBAIF9QR19vdXRwdXRfcGx1Z2lu X2luaXQoT3V0cHV0UGx1Z2luQ2FsbGJhY2tzICpjYikKIAljYi0+c3RyZWFtX2NvbW1pdF9jYiA9 IHBnb3V0cHV0X3N0cmVhbV9jb21taXQ7CiAJY2ItPnN0cmVhbV9jaGFuZ2VfY2IgPSBwZ291dHB1 dF9jaGFuZ2U7CiAJY2ItPnN0cmVhbV9tZXNzYWdlX2NiID0gcGdvdXRwdXRfbWVzc2FnZTsKKwlj Yi0+c3RyZWFtX2RkbG1lc3NhZ2VfY2IgPSBwZ291dHB1dF9kZGxtZXNzYWdlOwogCWNiLT5zdHJl YW1fdHJ1bmNhdGVfY2IgPSBwZ291dHB1dF90cnVuY2F0ZTsKIAkvKiB0cmFuc2FjdGlvbiBzdHJl YW1pbmcgLSB0d28tcGhhc2UgY29tbWl0ICovCiAJY2ItPnN0cmVhbV9wcmVwYXJlX2NiID0gcGdv dXRwdXRfc3RyZWFtX3ByZXBhcmVfdHhuOwpAQCAtNDI2LDYgKzQzMyw3IEBAIHBnb3V0cHV0X3N0 YXJ0dXAoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBPdXRwdXRQbHVnaW5PcHRpb25zICpv cHQsCiAKIAkvKiBUaGlzIHBsdWdpbiB1c2VzIGJpbmFyeSBwcm90b2NvbC4gKi8KIAlvcHQtPm91 dHB1dF90eXBlID0gT1VUUFVUX1BMVUdJTl9CSU5BUllfT1VUUFVUOworCW9wdC0+cmVjZWl2ZV9y ZXdyaXRlcyA9IHRydWU7CiAKIAkvKgogCSAqIFRoaXMgaXMgcmVwbGljYXRpb24gc3RhcnQgYW5k IG5vdCBzbG90IGluaXRpYWxpemF0aW9uLgpAQCAtNDk5LDYgKzUwNyw3IEBAIHBnb3V0cHV0X3N0 YXJ0dXAoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBPdXRwdXRQbHVnaW5PcHRpb25zICpv cHQsCiAKIAkJLyogSW5pdCBwdWJsaWNhdGlvbiBzdGF0ZS4gKi8KIAkJZGF0YS0+cHVibGljYXRp b25zID0gTklMOworCQlkYXRhLT5kZWxldGVkX3JlbGlkcyA9IE5JTDsKIAkJcHVibGljYXRpb25z X3ZhbGlkID0gZmFsc2U7CiAJCUNhY2hlUmVnaXN0ZXJTeXNjYWNoZUNhbGxiYWNrKFBVQkxJQ0FU SU9OT0lELAogCQkJCQkJCQkJICBwdWJsaWNhdGlvbl9pbnZhbGlkYXRpb25fY2IsCkBAIC0xMzgx LDkgKzEzOTAsMjIgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0 eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCVJlb3JkZXJCdWZmZXJDaGFuZ2VUeXBlIGFjdGlv biA9IGNoYW5nZS0+YWN0aW9uOwogCVR1cGxlVGFibGVTbG90ICpvbGRfc2xvdCA9IE5VTEw7CiAJ VHVwbGVUYWJsZVNsb3QgKm5ld19zbG90ID0gTlVMTDsKKwlib29sCQkJdGFibGVfcmV3cml0ZSA9 IGZhbHNlOwogCiAJdXBkYXRlX3JlcGxpY2F0aW9uX3Byb2dyZXNzKGN0eCwgZmFsc2UpOwogCisJ LyoKKwkgKiBGb3IgaGVhcCByZXdyaXRlcywgd2UgbWlnaHQgbmVlZCB0byByZXBsaWNhdGUgdGhl bSBpZiB0aGUgcmV3cml0dGVuCisJICogdGFibGUgcHVibGlzaGVzIHJld3JpdGUgZGRsIG1lc3Nh Z2UuIFNvIGdldCB0aGUgYWN0dWFsIHJlbGF0aW9uIGhlcmUgYW5kCisJICogY2hlY2sgdGhlIHB1 YmFjdGlvbiBsYXRlci4KKwkgKi8KKwlpZiAocmVsYXRpb24tPnJkX3JlbC0+cmVscmV3cml0ZSkK Kwl7CisJCXRhYmxlX3Jld3JpdGUgPSB0cnVlOworCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRS ZWxhdGlvbihyZWxhdGlvbi0+cmRfcmVsLT5yZWxyZXdyaXRlKTsKKwkJdGFyZ2V0cmVsID0gcmVs YXRpb247CisJfQorCiAJaWYgKCFpc19wdWJsaXNoYWJsZV9yZWxhdGlvbihyZWxhdGlvbikpCiAJ CXJldHVybjsKIApAQCAtMTQxNyw2ICsxNDM5LDEzIEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCUFzc2VydChm YWxzZSk7CiAJfQogCisJLyoKKwkgKiBXZSBkb24ndCBwdWJsaXNoIHRhYmxlIHJld3JpdGUgY2hh bmdlIHVubGVzcyB3ZSBwdWJsaXNoIHRoZSByZXdyaXRlIGRkbAorCSAqIG1lc3NhZ2UuCisJICov CisJaWYgKHRhYmxlX3Jld3JpdGUgJiYgIXJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCkKKwkJ cmV0dXJuOworCiAJLyogQXZvaWQgbGVha2luZyBtZW1vcnkgYnkgdXNpbmcgYW5kIHJlc2V0dGlu ZyBvdXIgb3duIGNvbnRleHQgKi8KIAlvbGQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZGF0YS0+ Y29udGV4dCk7CiAKQEAgLTE0NDYsOCArMTQ3NSw4IEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCX0KIAogCQkJ LyogQ2hlY2sgcm93IGZpbHRlciAqLwotCQkJaWYgKCFwZ291dHB1dF9yb3dfZmlsdGVyKHRhcmdl dHJlbCwgTlVMTCwgJm5ld19zbG90LCByZWxlbnRyeSwKLQkJCQkJCQkJCSAmYWN0aW9uKSkKKwkJ CWlmICghdGFibGVfcmV3cml0ZSAmJgorCQkJCSFwZ291dHB1dF9yb3dfZmlsdGVyKHRhcmdldHJl bCwgTlVMTCwgJm5ld19zbG90LCByZWxlbnRyeSwgJmFjdGlvbikpCiAJCQkJYnJlYWs7CiAKIAkJ CS8qCkBAIC0xNDY3LDggKzE0OTYsMTkgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGlu Z0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJbWF5YmVfc2VuZF9zY2hl bWEoY3R4LCBjaGFuZ2UsIHJlbGF0aW9uLCByZWxlbnRyeSk7CiAKIAkJCU91dHB1dFBsdWdpblBy ZXBhcmVXcml0ZShjdHgsIHRydWUpOwotCQkJbG9naWNhbHJlcF93cml0ZV9pbnNlcnQoY3R4LT5v dXQsIHhpZCwgdGFyZ2V0cmVsLCBuZXdfc2xvdCwKLQkJCQkJCQkJCWRhdGEtPmJpbmFyeSwgcmVs ZW50cnktPmNvbHVtbnMpOworCisJCQkvKgorCQkJICogQ29udmVydCB0aGUgcmV3cml0ZSBpbnNl cnRzIHRvIHVwZGF0ZXMgc28gdGhhdCB0aGUgc3Vic2NyaWJlcgorCQkJICogY2FuIHJlcGxheSBp dC4gVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSBzdXJlIHRoZSBkYXRhIGJldHdlZW4KKwkJCSAqIHB1 Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBpcyBjb25zaXN0ZW50LgorCQkJICovCisJCQlpZiAodGFi bGVfcmV3cml0ZSkKKwkJCQlsb2dpY2FscmVwX3dyaXRlX3VwZGF0ZShjdHgtPm91dCwgeGlkLCB0 YXJnZXRyZWwsCisJCQkJCQkJCQkJTlVMTCwgbmV3X3Nsb3QsIGRhdGEtPmJpbmFyeSwKKwkJCQkJ CQkJCQlyZWxlbnRyeS0+Y29sdW1ucyk7CisJCQllbHNlCisJCQkJbG9naWNhbHJlcF93cml0ZV9p bnNlcnQoY3R4LT5vdXQsIHhpZCwgdGFyZ2V0cmVsLCBuZXdfc2xvdCwKKwkJCQkJCQkJCQlkYXRh LT5iaW5hcnksIHJlbGVudHJ5LT5jb2x1bW5zKTsKIAkJCU91dHB1dFBsdWdpbldyaXRlKGN0eCwg dHJ1ZSk7CiAJCQlicmVhazsKIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfVVBEQVRFOgpA QCAtMTU5OCw2ICsxNjM4LDkgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQlhbmNlc3RvciA9IE5VTEw7CiAJfQog CisJaWYgKHRhYmxlX3Jld3JpdGUpCisJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworCiAJLyog Q2xlYW51cCAqLwogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGQpOwogCU1lbW9yeUNvbnRleHRS ZXNldChkYXRhLT5jb250ZXh0KTsKQEAgLTE2NzUsOCArMTcxOCw4IEBAIHBnb3V0cHV0X3RydW5j YXRlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAog CiBzdGF0aWMgdm9pZAogcGdvdXRwdXRfbWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpj dHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKLQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwg Ym9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osCi0JCQkJIGNv bnN0IGNoYXIgKm1lc3NhZ2UpCisJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sIGJvb2wgdHJh bnNhY3Rpb25hbCwKKwkJCQkgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LCBjb25zdCBjaGFy ICptZXNzYWdlKQogewogCVBHT3V0cHV0RGF0YSAqZGF0YSA9IChQR091dHB1dERhdGEgKikgY3R4 LT5vdXRwdXRfcGx1Z2luX3ByaXZhdGU7CiAJVHJhbnNhY3Rpb25JZCB4aWQgPSBJbnZhbGlkVHJh bnNhY3Rpb25JZDsKQEAgLTE3MTYsNiArMTc1OSwxMzcgQEAgcGdvdXRwdXRfbWVzc2FnZShMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAlPdXRwdXRQ bHVnaW5Xcml0ZShjdHgsIHRydWUpOwogfQogCitzdGF0aWMgdm9pZAorcGdvdXRwdXRfZGRsbWVz c2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwK KwkJCQkJWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBP aWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJU2l6ZSBzeiwgY29u c3QgY2hhciAqbWVzc2FnZSkKK3sKKwlQR091dHB1dERhdGEgKmRhdGEgPSAoUEdPdXRwdXREYXRh ICopIGN0eC0+b3V0cHV0X3BsdWdpbl9wcml2YXRlOworCVBHT3V0cHV0VHhuRGF0YSAqdHhuZGF0 YSA9IChQR091dHB1dFR4bkRhdGEgKikgdHhuLT5vdXRwdXRfcGx1Z2luX3ByaXZhdGU7CisJUmVs YXRpb24JcmVsYXRpb24gPSBOVUxMOworCVRyYW5zYWN0aW9uSWQgeGlkID0gSW52YWxpZFRyYW5z YWN0aW9uSWQ7CisJUmVsYXRpb25TeW5jRW50cnkgKnJlbGVudHJ5OworCisJLyoKKwkgKiBSZW1l bWJlciB0aGUgeGlkIGZvciB0aGUgbWVzc2FnZSBpbiBzdHJlYW1pbmcgbW9kZS4gU2VlCisJICog cGdvdXRwdXRfY2hhbmdlLgorCSAqLworCWlmIChpbl9zdHJlYW1pbmcpCisJCXhpZCA9IHR4bi0+ eGlkOworCisJc3dpdGNoIChjbWR0eXBlKQorCXsKKwkJY2FzZSBEQ1RfVGFibGVEcm9wU3RhcnQ6 CisJCQkvKgorCQkJICogT24gRFJPUCBzdGFydCwgYWRkIHRoZSByZWxpZCB0byBhIGRlbGV0ZWRf cmVsaWQgbGlzdCBpZiB0aGUKKwkJCSAqIHJlbGlkIGlzIHBhcnQgb2YgYSBwdWJsaWNhdGlvbiB0 aGF0IHN1cHBvcnRzIGRkbCBwdWJsaWNhdGlvbi4gV2UKKwkJCSAqIG5lZWQgdGhpcyBiZWNhdXNl IG9uIERST1AgZW5kLCB0aGUgcmVsaWQgd2lsbCBubyBsb25nZXIgYmUKKwkJCSAqIHZhbGlkLiBM YXRlciBvbiBEcm9wIGVuZCwgdmVyaWZ5IHRoYXQgdGhlIGRyb3AgaXMgZm9yIGEgcmVsaWQKKwkJ CSAqIHRoYXQgaXMgb24gdGhlIGRlbGV0ZWRfcmlkIGxpc3QsIGFuZCBvbmx5IHRoZW4gc2VuZCB0 aGUgZGRsCisJCQkgKiBtZXNzYWdlLgorCQkJICovCisJCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRH ZXRSZWxhdGlvbihyZWxpZCk7CisKKwkJCUFzc2VydChyZWxhdGlvbik7CisJCQlyZWxlbnRyeSA9 IGdldF9yZWxfc3luY19lbnRyeShkYXRhLCByZWxhdGlvbik7CisKKwkJCWlmIChyZWxlbnRyeS0+ cHViYWN0aW9ucy5wdWJkZGwpCisJCQkJZGF0YS0+ZGVsZXRlZF9yZWxpZHMgPSBsYXBwZW5kX29p ZChkYXRhLT5kZWxldGVkX3JlbGlkcywgcmVsaWQpOworCisJCQlSZWxhdGlvbkNsb3NlKHJlbGF0 aW9uKTsKKwkJCXJldHVybjsKKwkJY2FzZSBEQ1RfVGFibGVEcm9wRW5kOgorCQkJaWYgKCFsaXN0 X21lbWJlcl9vaWQoZGF0YS0+ZGVsZXRlZF9yZWxpZHMsIHJlbGlkKSkKKwkJCQlyZXR1cm47CisJ CQllbHNlCisJCQkJZGF0YS0+ZGVsZXRlZF9yZWxpZHMgPSBsaXN0X2RlbGV0ZV9vaWQoZGF0YS0+ ZGVsZXRlZF9yZWxpZHMsIHJlbGlkKTsKKwkJCWJyZWFrOworCQljYXNlIERDVF9UYWJsZUFsdGVy OgorCQkJLyoKKwkJCSAqIEZvciB0YWJsZSByZXdyaXRlIGRkbCwgd2UgZmlyc3Qgc2VuZCB0aGUg b3JpZ2luYWwgZGRsIG1lc3NhZ2UgdG8KKwkJCSAqIHN1YnNjcmliZXIsIHRoZW4gY29udmVydCB0 aGUgdXBjb21pbmcgcmV3cml0ZSBJTlNFUlQgdG8gVVBEQVRFIGFuZAorCQkJICogc2VuZCB0aGVt IHRvIHN1YnNjcmliZXIgc28gdGhhdCB0aGUgZGF0YSBiZXR3ZWVuIHB1Ymxpc2hlciBhbmQKKwkJ CSAqIHN1YnNjcmliZXIgY2FuIGFsd2F5cyBiZSBjb25zaXN0ZW50LgorCQkJICoKKwkJCSAqIFdl IGRvIHRoaXMgd2F5IGJlY2F1c2Ugb2YgdHdvIHJlYXNvbjoKKwkJCSAqCisJCQkgKiAoMSkgVGhl IGRhdGEgYmVmb3JlIHRoZSByZXdyaXRlIGRkbCBjb3VsZCBhbHJlYWR5IGJlIGRpZmZlcmVudCBh bW9uZworCQkJICogcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyLiBUbyBtYWtlIHN1cmUgdGhlIGV4 dHJhIGRhdGEgaW4gc3Vic2NyaWJlcgorCQkJICogd2hpY2ggZG9lc24ndCBleGlzdCBpbiBwdWJs aXNoZXIgYWxzbyBnZXQgcmV3cml0dGVuLCB3ZSBuZWVkIHRvIGxldAorCQkJICogdGhlIHN1YnNj cmliZXIgZXhlY3V0ZSB0aGUgb3JpZ2luYWwgcmV3cml0ZSBkZGwgdG8gcmV3cml0ZSBhbGwgdGhl CisJCQkgKiBkYXRhIGF0IGZpcnN0LgorCQkJICoKKwkJCSAqICgyKSB0aGUgZGF0YSBhZnRlciBl eGVjdXRpbmcgcmV3cml0ZSBkZGwgY291bGQgYmUgZGlmZmVyZW50IGFtb25nCisJCQkgKiBwdWJs aXNoZXIgYW5kIHN1YnNjcmliZXIoZHVlIHRvIGRpZmZlcmVudCBmdW5jdGlvbnMvb3BlcmF0b3Jz IHVzZWQKKwkJCSAqIGR1cmluZyByZXdyaXRlKSwgc28gd2UgbmVlZCB0byByZXBsaWNhdGUgdGhl IHJld3JpdGUgVVBEQVRFcyB0byBrZWVwCisJCQkgKiB0aGUgZGF0YSBjb25zaXN0ZW50LgorCQkJ ICoKKwkJCSAqIFRPIElNUFJPVkU6IFdlIGNvdWxkIGltcHJvdmUgdGhpcyBieSBsZXR0aW5nIHRo ZSBzdWJzY3JpYmVyIG9ubHkKKwkJCSAqIHJld3JpdGUgdGhlIGV4dHJhIGRhdGEgaW5zdGVhZCBv ZiBkb2luZyBmdWxseSByZXdyaXRlIGFuZCB1c2UgdGhlCisJCQkgKiB1cGNvbWluZyByZXdyaXRl IFVQREFURXMgdG8gcmV3cml0ZSB0aGUgcmVzdCBkYXRhLiBCZXNpZGVzLCB3ZSBtYXkKKwkJCSAq IG5vdCBuZWVkIHRvIHNlbmQgcmV3cml0ZSBjaGFuZ2VzIGZvciBhbGwgdHlwZSBvZiByZXdyaXRl IGRkbCwgZm9yCisJCQkgKiBleGFtcGxlLCBpdCBzZWVtcyBmaW5lIHRvIHNraXAgc2VuZGluZyBy ZXdyaXRlIGNoYW5nZXMgZm9yIEFMVEVSCisJCQkgKiBUQUJMRSBTRVQgTE9HR0VEIGFzIHRoZSBk YXRhIGluIHRoZSB0YWJsZSBkb2Vzbid0IGFjdHVhbGx5IGJlCisJCQkgKiBjaGFuZ2VkLgorCQkJ ICovCisJCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihyZWxpZCk7CisJCQlBc3Nl cnQocmVsYXRpb24pOworCisJCQlyZWxlbnRyeSA9IGdldF9yZWxfc3luY19lbnRyeShkYXRhLCBy ZWxhdGlvbik7CisKKwkJCS8qCisJCQkgKiBTa2lwIHNlbmRpbmcgdGhpcyBkZGwgaWYgd2UgZG9u J3QgcHVibGlzaCBkZGwgbWVzc2FnZSBvciB0aGUgZGRsCisJCQkgKiBuZWVkIHRvIGJlIHB1Ymxp c2hlZCB2aWEgaXRzIHJvb3QgcmVsYXRpb24uCisJCQkgKi8KKwkJCWlmICghcmVsZW50cnktPnB1 YmFjdGlvbnMucHViZGRsIHx8CisJCQkJcmVsZW50cnktPnB1Ymxpc2hfYXNfcmVsaWQgIT0gcmVs aWQpCisJCQl7CisJCQkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7CisJCQkJcmV0dXJuOworCQkJ fQorCisJCQlicmVhazsKKwkJY2FzZSBEQ1RfU2ltcGxlQ21kOgorCQkJcmVsYXRpb24gPSBSZWxh dGlvbklkR2V0UmVsYXRpb24ocmVsaWQpOworCisJCQlpZiAocmVsYXRpb24gPT0gTlVMTCkKKwkJ CQlicmVhazsKKworCQkJcmVsZW50cnkgPSBnZXRfcmVsX3N5bmNfZW50cnkoZGF0YSwgcmVsYXRp b24pOworCisJCQlpZiAoIXJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCkKKwkJCXsKKwkJCQlS ZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCWJyZWFrOwor CQljYXNlIERDVF9PYmplY3REcm9wOgorCQkJLyogZG8gbm90aGluZyAqLworCQkJYnJlYWs7CisJ CWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgdHlwZSAlZCIsIGNtZHR5cGUp OworCQkJYnJlYWs7CisJfQorCisJLyogU2VuZCBCRUdJTiBpZiB3ZSBoYXZlbid0IHlldCAqLwor CWlmICh0eG5kYXRhICYmICF0eG5kYXRhLT5zZW50X2JlZ2luX3R4bikKKwkJcGdvdXRwdXRfc2Vu ZF9iZWdpbihjdHgsIHR4bik7CisKKwlPdXRwdXRQbHVnaW5QcmVwYXJlV3JpdGUoY3R4LCB0cnVl KTsKKwlsb2dpY2FscmVwX3dyaXRlX2RkbG1lc3NhZ2UoY3R4LT5vdXQsCisJCQkJCQkJCXhpZCwK KwkJCQkJCQkJbWVzc2FnZV9sc24sCisJCQkJCQkJCXByZWZpeCwKKwkJCQkJCQkJc3osCisJCQkJ CQkJCW1lc3NhZ2UpOworCU91dHB1dFBsdWdpbldyaXRlKGN0eCwgdHJ1ZSk7CisKKwlpZiAocmVs YXRpb24pCisJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworfQorCiAvKgogICogUmV0dXJuIHRy dWUgaWYgdGhlIGRhdGEgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIG9yaWdpbiBhbmQgdGhlIHVzZXIg aGFzCiAgKiByZXF1ZXN0ZWQgdGhlIGNoYW5nZXMgdGhhdCBkb24ndCBoYXZlIGFuIG9yaWdpbiwg ZmFsc2Ugb3RoZXJ3aXNlLgpAQCAtMTk5Nyw3ICsyMTcxLDggQEAgZ2V0X3JlbF9zeW5jX2VudHJ5 KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCWVudHJ5LT5zY2hlbWFf c2VudCA9IGZhbHNlOwogCQllbnRyeS0+c3RyZWFtZWRfdHhucyA9IE5JTDsKIAkJZW50cnktPnB1 YmFjdGlvbnMucHViaW5zZXJ0ID0gZW50cnktPnB1YmFjdGlvbnMucHVidXBkYXRlID0KLQkJCWVu dHJ5LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRl ID0gZmFsc2U7CisJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBlbnRyeS0+cHViYWN0 aW9ucy5wdWJ0cnVuY2F0ZSA9CisJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwgPSBmYWxzZTsK IAkJZW50cnktPm5ld19zbG90ID0gTlVMTDsKIAkJZW50cnktPm9sZF9zbG90ID0gTlVMTDsKIAkJ bWVtc2V0KGVudHJ5LT5leHByc3RhdGUsIDAsIHNpemVvZihlbnRyeS0+ZXhwcnN0YXRlKSk7CkBA IC0yMDU1LDYgKzIyMzAsNyBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRh LCBSZWxhdGlvbiByZWxhdGlvbikKIAkJZW50cnktPnB1YmFjdGlvbnMucHVidXBkYXRlID0gZmFs c2U7CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9IGZhbHNlOwogCQllbnRyeS0+cHVi YWN0aW9ucy5wdWJ0cnVuY2F0ZSA9IGZhbHNlOworCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwg PSBmYWxzZTsKIAogCQkvKgogCQkgKiBUdXBsZSBzbG90cyBjbGVhbnVwcy4gKFdpbGwgYmUgcmVi dWlsdCBsYXRlciBpZiBuZWVkZWQpLgpAQCAtMjE2OCw2ICsyMzQ0LDcgQEAgZ2V0X3JlbF9zeW5j X2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCQkJZW50cnkt PnB1YmFjdGlvbnMucHVidXBkYXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJ1cGRhdGU7CiAJCQkJ ZW50cnktPnB1YmFjdGlvbnMucHViZGVsZXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJkZWxldGU7 CiAJCQkJZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1 YnRydW5jYXRlOworCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCB8PSBwdWItPnB1YmFjdGlv bnMucHViZGRsOwogCiAJCQkJLyoKIAkJCQkgKiBXZSB3YW50IHRvIHB1Ymxpc2ggdGhlIGNoYW5n ZXMgYXMgdGhlIHRvcC1tb3N0IGFuY2VzdG9yCkBAIC0yMzUzLDYgKzI1MzAsNyBAQCByZWxfc3lu Y19jYWNoZV9wdWJsaWNhdGlvbl9jYihEYXR1bSBhcmcsIGludCBjYWNoZWlkLCB1aW50MzIgaGFz aHZhbHVlKQogCXsKIAkJZW50cnktPnJlcGxpY2F0ZV92YWxpZCA9IGZhbHNlOwogCX0KKwogfQog CiAvKiBTZW5kIFJlcGxpY2F0aW9uIG9yaWdpbiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvY2FjaGUvcmVsY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hl LmMKaW5kZXggMDBkYzBmMi4uZjFiNGQwOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMv Y2FjaGUvcmVsY2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5j CkBAIC01NjgzLDYgKzU2ODMsNyBAQCBSZWxhdGlvbkJ1aWxkUHVibGljYXRpb25EZXNjKFJlbGF0 aW9uIHJlbGF0aW9uLCBQdWJsaWNhdGlvbkRlc2MgKnB1YmRlc2MpCiAJCXB1YmRlc2MtPnB1YmFj dGlvbnMucHVidXBkYXRlIHw9IHB1YmZvcm0tPnB1YnVwZGF0ZTsKIAkJcHViZGVzYy0+cHViYWN0 aW9ucy5wdWJkZWxldGUgfD0gcHViZm9ybS0+cHViZGVsZXRlOwogCQlwdWJkZXNjLT5wdWJhY3Rp b25zLnB1YnRydW5jYXRlIHw9IHB1YmZvcm0tPnB1YnRydW5jYXRlOworCQlwdWJkZXNjLT5wdWJh Y3Rpb25zLnB1YmRkbCB8PSBwdWJmb3JtLT5wdWJkZGw7CiAKIAkJLyoKIAkJICogQ2hlY2sgaWYg YWxsIGNvbHVtbnMgcmVmZXJlbmNlZCBpbiB0aGUgZmlsdGVyIGV4cHJlc3Npb24gYXJlIHBhcnQK ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9zcmMvYmluL3BnX2R1bXAv cGdfZHVtcC5jCmluZGV4IGRhNjYwNTEuLmU1NDhlM2MgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpAQCAtMzg5Niw2 ICszODk2LDcgQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZvdXQsIGludCAqbnVtUHVibGlj YXRpb25zKQogCWludAkJCWlfcHVidXBkYXRlOwogCWludAkJCWlfcHViZGVsZXRlOwogCWludAkJ CWlfcHVidHJ1bmNhdGU7CisJaW50CQkJaV9wdWJkZGw7CiAJaW50CQkJaV9wdWJ2aWFyb290Owog CWludAkJCWksCiAJCQkJbnR1cHM7CkBAIC0zOTExLDIzICszOTEyLDI5IEBAIGdldFB1YmxpY2F0 aW9ucyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAlyZXNldFBRRXhwQnVm ZmVyKHF1ZXJ5KTsKIAogCS8qIEdldCB0aGUgcHVibGljYXRpb25zLiAqLwotCWlmIChmb3V0LT5y ZW1vdGVWZXJzaW9uID49IDEzMDAwMCkKKwlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxNTAw MDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyKHF1ZXJ5LAogCQkJCQkJICAiU0VMRUNUIHAudGFibGVv aWQsIHAub2lkLCBwLnB1Ym5hbWUsICIKIAkJCQkJCSAgInAucHVib3duZXIsICIKLQkJCQkJCSAg InAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBw LnB1YnRydW5jYXRlLCBwLnB1YnZpYXJvb3QgIgorCQkJCQkJICAicC5wdWJhbGx0YWJsZXMsIHAu cHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIHAucHVi ZGRsLCBwLnB1YnZpYXJvb3QgIgorCQkJCQkJICAiRlJPTSBwZ19wdWJsaWNhdGlvbiBwIik7CisJ ZWxzZSBpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxMzAwMDApCisJCWFwcGVuZFBRRXhwQnVm ZmVyKHF1ZXJ5LAorCQkJCQkJICAiU0VMRUNUIHAudGFibGVvaWQsIHAub2lkLCBwLnB1Ym5hbWUs ICIKKwkJCQkJCSAgInAucHVib3duZXIsICIKKwkJCQkJCSAgInAucHViYWxsdGFibGVzLCBwLnB1 Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBwLnB1YnRydW5jYXRlLCBmYWxzZSBh cyBwLnB1YmRkbCwgcC5wdWJ2aWFyb290ICIKIAkJCQkJCSAgIkZST00gcGdfcHVibGljYXRpb24g cCIpOwogCWVsc2UgaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTEwMDAwKQogCQlhcHBlbmRQ UUV4cEJ1ZmZlcihxdWVyeSwKIAkJCQkJCSAgIlNFTEVDVCBwLnRhYmxlb2lkLCBwLm9pZCwgcC5w dWJuYW1lLCAiCiAJCQkJCQkgICJwLnB1Ym93bmVyLCAiCi0JCQkJCQkgICJwLnB1YmFsbHRhYmxl cywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwg ZmFsc2UgQVMgcHVidmlhcm9vdCAiCisJCQkJCQkgICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNl cnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwgZmFsc2UgYXMgcC5w dWJkZGwsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgogCQkJCQkJICAiRlJPTSBwZ19wdWJsaWNhdGlv biBwIik7CiAJZWxzZQogCQlhcHBlbmRQUUV4cEJ1ZmZlcihxdWVyeSwKIAkJCQkJCSAgIlNFTEVD VCBwLnRhYmxlb2lkLCBwLm9pZCwgcC5wdWJuYW1lLCAiCiAJCQkJCQkgICJwLnB1Ym93bmVyLCAi Ci0JCQkJCQkgICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1 YmRlbGV0ZSwgZmFsc2UgQVMgcHVidHJ1bmNhdGUsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgorCQkJ CQkJICAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxl dGUsIGZhbHNlIEFTIHB1YnRydW5jYXRlLCBmYWxzZSBhcyBwLnB1YmRkbCwgZmFsc2UgQVMgcHVi dmlhcm9vdCAiCiAJCQkJCQkgICJGUk9NIHBnX3B1YmxpY2F0aW9uIHAiKTsKIAogCXJlcyA9IEV4 ZWN1dGVTcWxRdWVyeShmb3V0LCBxdWVyeS0+ZGF0YSwgUEdSRVNfVFVQTEVTX09LKTsKQEAgLTM5 NDMsNiArMzk1MCw3IEBAIGdldFB1YmxpY2F0aW9ucyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVB1 YmxpY2F0aW9ucykKIAlpX3B1YnVwZGF0ZSA9IFBRZm51bWJlcihyZXMsICJwdWJ1cGRhdGUiKTsK IAlpX3B1YmRlbGV0ZSA9IFBRZm51bWJlcihyZXMsICJwdWJkZWxldGUiKTsKIAlpX3B1YnRydW5j YXRlID0gUFFmbnVtYmVyKHJlcywgInB1YnRydW5jYXRlIik7CisJaV9wdWJkZGwgPSBQUWZudW1i ZXIocmVzLCAicHViZGRsIik7CiAJaV9wdWJ2aWFyb290ID0gUFFmbnVtYmVyKHJlcywgInB1YnZp YXJvb3QiKTsKIAogCXB1YmluZm8gPSBwZ19tYWxsb2MobnR1cHMgKiBzaXplb2YoUHVibGljYXRp b25JbmZvKSk7CkBAIC0zOTY2LDYgKzM5NzQsOCBAQCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAq Zm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMpCiAJCQkoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBp LCBpX3B1YmRlbGV0ZSksICJ0IikgPT0gMCk7CiAJCXB1YmluZm9baV0ucHVidHJ1bmNhdGUgPQog CQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJ0cnVuY2F0ZSksICJ0IikgPT0gMCk7 CisJCXB1YmluZm9baV0ucHViZGRsID0KKwkJCShzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlf cHViZGRsKSwgInQiKSA9PSAwKTsKIAkJcHViaW5mb1tpXS5wdWJ2aWFyb290ID0KIAkJCShzdHJj bXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHVidmlhcm9vdCksICJ0IikgPT0gMCk7CiAKQEAgLTQw NDUsNiArNDA1NSwxNSBAQCBkdW1wUHVibGljYXRpb24oQXJjaGl2ZSAqZm91dCwgY29uc3QgUHVi bGljYXRpb25JbmZvICpwdWJpbmZvKQogCQlmaXJzdCA9IGZhbHNlOwogCX0KIAorCWlmIChwdWJp bmZvLT5wdWJkZGwpCisJeworCQlpZiAoIWZpcnN0KQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIo cXVlcnksICIsICIpOworCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiZGRsIik7CisJ CWZpcnN0ID0gZmFsc2U7CisJfQorCiAJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICInIik7 CiAKIAlpZiAocHViaW5mby0+cHVidmlhcm9vdCkKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVt cC9wZ19kdW1wLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCmluZGV4IDY5ZWU5MzkuLjZj NTVkZTMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKKysrIGIvc3JjL2Jp bi9wZ19kdW1wL3BnX2R1bXAuaApAQCAtNjIwLDYgKzYyMCw3IEBAIHR5cGVkZWYgc3RydWN0IF9Q dWJsaWNhdGlvbkluZm8KIAlib29sCQlwdWJkZWxldGU7CiAJYm9vbAkJcHVidHJ1bmNhdGU7CiAJ Ym9vbAkJcHVidmlhcm9vdDsKKwlib29sCQlwdWJkZGw7CiB9IFB1YmxpY2F0aW9uSW5mbzsKIAog LyoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jIGIvc3JjL2Jpbi9w Z193YWxkdW1wL3JtZ3JkZXNjLmMKaW5kZXggNmI4YzE3Yi4uNzkyZjQzOCAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3JkZXNjLmMKKysrIGIvc3JjL2Jpbi9wZ193YWxkdW1wL3Jt Z3JkZXNjLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJjb21tYW5kcy9zZXF1ZW5jZS5o IgogI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlc3BhY2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlv bi9tZXNzYWdlLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1 ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgogI2luY2x1ZGUgInJtZ3JkZXNjLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9zdGFuZGJ5ZGVmcy5oIgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL2Rlc2Ny aWJlLmMgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwppbmRleCAzMjdhNjk0Li43N2M0NzExIDEw MDY0NAotLS0gYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYworKysgYi9zcmMvYmluL3BzcWwvZGVz Y3JpYmUuYwpAQCAtNjE1OSw3ICs2MTU5LDcgQEAgbGlzdFB1YmxpY2F0aW9ucyhjb25zdCBjaGFy ICpwYXR0ZXJuKQogCVBRRXhwQnVmZmVyRGF0YSBidWY7CiAJUEdyZXN1bHQgICAqcmVzOwogCXBy aW50UXVlcnlPcHQgbXlvcHQgPSBwc2V0LnBvcHQ7Ci0Jc3RhdGljIGNvbnN0IGJvb2wgdHJhbnNs YXRlX2NvbHVtbnNbXSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNl LCBmYWxzZSwgZmFsc2V9OworCXN0YXRpYyBjb25zdCBib29sIHRyYW5zbGF0ZV9jb2x1bW5zW10g PSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNl LCBmYWxzZX07CiAKIAlpZiAocHNldC5zdmVyc2lvbiA8IDEwMDAwMCkKIAl7CkBAIC02MTk0LDYg KzYxOTQsMTAgQEAgbGlzdFB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQlhcHBl bmRQUUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkJICAiLFxuICBwdWJ2aWFyb290IEFTIFwiJXNcIiIs CiAJCQkJCQkgIGdldHRleHRfbm9vcCgiVmlhIHJvb3QiKSk7CisJaWYgKHBzZXQuc3ZlcnNpb24g Pj0gMTQwMDAwKQorCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkJICAiLFxuICBwdWJk ZGwgQVMgXCIlc1wiIiwKKwkJCQkJCSAgZ2V0dGV4dF9ub29wKCJERExzIikpOwogCiAJYXBwZW5k UFFFeHBCdWZmZXJTdHIoJmJ1ZiwKIAkJCQkJCSAiXG5GUk9NIHBnX2NhdGFsb2cucGdfcHVibGlj YXRpb25cbiIpOwpAQCAtNjI4NCw2ICs2Mjg4LDcgQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29u c3QgY2hhciAqcGF0dGVybikKIAlQR3Jlc3VsdCAgICpyZXM7CiAJYm9vbAkJaGFzX3B1YnRydW5j YXRlOwogCWJvb2wJCWhhc19wdWJ2aWFyb290OworCWJvb2wJCWhhc19wdWJkZGw7CiAKIAlQUUV4 cEJ1ZmZlckRhdGEgdGl0bGU7CiAJcHJpbnRUYWJsZUNvbnRlbnQgY29udDsKQEAgLTYzMDAsNiAr NjMwNSw3IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAKIAlo YXNfcHVidHJ1bmNhdGUgPSAocHNldC5zdmVyc2lvbiA+PSAxMTAwMDApOwogCWhhc19wdWJ2aWFy b290ID0gKHBzZXQuc3ZlcnNpb24gPj0gMTMwMDAwKTsKKwloYXNfcHViZGRsID0gIChwc2V0LnN2 ZXJzaW9uID49IDE1MDAwMCk7CiAKIAlpbml0UFFFeHBCdWZmZXIoJmJ1Zik7CiAKQEAgLTYzMTMs NiArNjMxOSw5IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJ aWYgKGhhc19wdWJ2aWFyb290KQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAogCQkJCQkJ CSAiLCBwdWJ2aWFyb290Iik7CisJaWYgKGhhc19wdWJkZGwpCisJCWFwcGVuZFBRRXhwQnVmZmVy U3RyKCZidWYsCisJCQkJCQkJICIsIHB1YmRkbCIpOwogCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZi dWYsCiAJCQkJCQkgIlxuRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uXG4iKTsKIApAQCAt NjM2NCw2ICs2MzczLDggQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVy bikKIAkJCW5jb2xzKys7CiAJCWlmIChoYXNfcHVidmlhcm9vdCkKIAkJCW5jb2xzKys7CisJCWlm IChoYXNfcHViZGRsKQorCQkJbmNvbHMrKzsKIAogCQlpbml0UFFFeHBCdWZmZXIoJnRpdGxlKTsK IAkJcHJpbnRmUFFFeHBCdWZmZXIoJnRpdGxlLCBfKCJQdWJsaWNhdGlvbiAlcyIpLCBwdWJuYW1l KTsKQEAgLTYzNzgsNiArNjM4OSw4IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIg KnBhdHRlcm4pCiAJCQlwcmludFRhYmxlQWRkSGVhZGVyKCZjb250LCBnZXR0ZXh0X25vb3AoIlRy dW5jYXRlcyIpLCB0cnVlLCBhbGlnbik7CiAJCWlmIChoYXNfcHVidmlhcm9vdCkKIAkJCXByaW50 VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdldHRleHRfbm9vcCgiVmlhIHJvb3QiKSwgdHJ1ZSwgYWxp Z24pOworCQlpZiAoaGFzX3B1YmRkbCkKKwkJCXByaW50VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdl dHRleHRfbm9vcCgiRERMcyIpLCB0cnVlLCBhbGlnbik7CiAKIAkJcHJpbnRUYWJsZUFkZENlbGwo JmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCAyKSwgZmFsc2UsIGZhbHNlKTsKIAkJcHJpbnRUYWJs ZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCAzKSwgZmFsc2UsIGZhbHNlKTsKQEAg LTYzODgsNiArNjQwMSw4IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRl cm4pCiAJCQlwcmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDcpLCBm YWxzZSwgZmFsc2UpOwogCQlpZiAoaGFzX3B1YnZpYXJvb3QpCiAJCQlwcmludFRhYmxlQWRkQ2Vs bCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDgpLCBmYWxzZSwgZmFsc2UpOworCQlpZiAoaGFz X3B1YmRkbCkKKwkJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJlcywgaSwg OSksIGZhbHNlLCBmYWxzZSk7CiAKIAkJaWYgKCFwdWJhbGx0YWJsZXMpCiAJCXsKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3Jt Z3JsaXN0LmgKaW5kZXggOWE3NDcyMS4uOWRlM2I4ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv YWNjZXNzL3JtZ3JsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKQEAg LTQ3LDMgKzQ3LDQgQEAgUEdfUk1HUihSTV9DT01NSVRfVFNfSUQsICJDb21taXRUcyIsIGNvbW1p dF90c19yZWRvLCBjb21taXRfdHNfZGVzYywgY29tbWl0X3RzX2kKIFBHX1JNR1IoUk1fUkVQTE9S SUdJTl9JRCwgIlJlcGxpY2F0aW9uT3JpZ2luIiwgcmVwbG9yaWdpbl9yZWRvLCByZXBsb3JpZ2lu X2Rlc2MsIHJlcGxvcmlnaW5faWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCiBQR19S TUdSKFJNX0dFTkVSSUNfSUQsICJHZW5lcmljIiwgZ2VuZXJpY19yZWRvLCBnZW5lcmljX2Rlc2Ms IGdlbmVyaWNfaWRlbnRpZnksIE5VTEwsIE5VTEwsIGdlbmVyaWNfbWFzaywgTlVMTCkKIFBHX1JN R1IoUk1fTE9HSUNBTE1TR19JRCwgIkxvZ2ljYWxNZXNzYWdlIiwgbG9naWNhbG1zZ19yZWRvLCBs b2dpY2FsbXNnX2Rlc2MsIGxvZ2ljYWxtc2dfaWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEwsIGxv Z2ljYWxtc2dfZGVjb2RlKQorUEdfUk1HUihSTV9MT0dJQ0FMRERMTVNHX0lELCAiTG9naWNhbERE TE1lc3NhZ2UiLCBsb2dpY2FsZGRsbXNnX3JlZG8sIGxvZ2ljYWxkZGxtc2dfZGVzYywgbG9naWNh bGRkbG1zZ19pZGVudGlmeSwgTlVMTCwgTlVMTCwgTlVMTCwgbG9naWNhbGRkbG1zZ19kZWNvZGUp CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCAzZTdmMzY0Li5hYjI5MGRkIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQKQEAgLTExOTAwLDQgKzExOTAwLDEzIEBACiB7IG9pZCA9PiAnNDY0Mycs IGRlc2NyID0+ICdleHBhbmQganNvbiBmb3JtYXQgRERMIHRvIGEgcGxhaW4gRERMIGNvbW1hbmQn LAogICBwcm9uYW1lID0+ICdkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZCcsIHByb3JldHR5cGUg PT4gJ3RleHQnLAogICBwcm9hcmd0eXBlcyA9PiAndGV4dCcsIHByb3NyYyA9PiAnZGRsX2RlcGFy c2VfZXhwYW5kX2NvbW1hbmQnIH0sCit7IG9pZCA9PiAnNDY0NCcsIGRlc2NyID0+ICd0cmlnZ2Vy IGZvciBkZGwgY29tbWFuZCBkZXBhcnNlJywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRpb25fZGVw YXJzZV9kZGxfY29tbWFuZF9lbmQnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2VyJywKKyAg cHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29t bWFuZF9lbmQnIH0sCit7IG9pZCA9PiAnNDY0NScsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBkZGwg Y29tbWFuZCBkZXBhcnNlIHN0YXJ0JywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRpb25fZGVwYXJz ZV9kZGxfY29tbWFuZF9zdGFydCcsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXInLAorICBw cm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21t YW5kX3N0YXJ0JyB9LAoreyBvaWQgPT4gJzQ2NDYnLCBkZXNjciA9PiAndHJpZ2dlciBmb3IgZGRs IGNvbW1hbmQgZGVwYXJzZSB0YWJsZSByZXdyaXRlJywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRp b25fZGVwYXJzZV90YWJsZV9yZXdyaXRlJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcics CisgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFi bGVfcmV3cml0ZScgfSwKIF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVi bGljYXRpb24uaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaAppbmRleCA0 ODIwNWJhLi42MDZjMDA5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1Ymxp Y2F0aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCkBAIC01 NCw2ICs1NCw5IEBAIENBVEFMT0cocGdfcHVibGljYXRpb24sNjEwNCxQdWJsaWNhdGlvblJlbGF0 aW9uSWQpCiAKIAkvKiB0cnVlIGlmIHBhcnRpdGlvbiBjaGFuZ2VzIGFyZSBwdWJsaXNoZWQgdXNp bmcgcm9vdCBzY2hlbWEgKi8KIAlib29sCQlwdWJ2aWFyb290OworCisJLyogdHJ1ZSBpZiB0YWJs ZSBjcmVhdGlvbnMgYXJlIHB1Ymxpc2hlZCAqLworCWJvb2wJCXB1YmRkbDsKIH0gRm9ybURhdGFf cGdfcHVibGljYXRpb247CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTcyLDYgKzc1LDcgQEAg dHlwZWRlZiBzdHJ1Y3QgUHVibGljYXRpb25BY3Rpb25zCiAJYm9vbAkJcHVidXBkYXRlOwogCWJv b2wJCXB1YmRlbGV0ZTsKIAlib29sCQlwdWJ0cnVuY2F0ZTsKKwlib29sCQlwdWJkZGw7CiB9IFB1 YmxpY2F0aW9uQWN0aW9uczsKIAogdHlwZWRlZiBzdHJ1Y3QgUHVibGljYXRpb25EZXNjCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmggYi9zcmMvaW5jbHVk ZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKaW5kZXggMTAwOTFjMy4uZmQyZWU3ZiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCisrKyBiL3NyYy9pbmNs dWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaApAQCAtNzEsNyArNzEsOCBAQCBleHRlcm4gdm9p ZCBFdmVudFRyaWdnZXJDb2xsZWN0U2ltcGxlQ29tbWFuZChPYmplY3RBZGRyZXNzIGFkZHJlc3Ms CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclRhYmxlU3RhcnQoTm9kZSAqcGFyc2V0cmVl KTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVSZWxpZChPaWQgb2JqZWN0SWQp OwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAq c3ViY21kLAotCQkJCQkJCQkJCQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzKTsKKwkJCQkJCQkJCQkJ CU9iamVjdEFkZHJlc3MgYWRkcmVzcywKKwkJCQkJCQkJCQkJCWJvb2wgcmV3cml0ZSk7CiBleHRl cm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclRhYmxlRW5kKHZvaWQpOwogCiBleHRlcm4gdm9pZCBF dmVudFRyaWdnZXJDb2xsZWN0R3JhbnQoSW50ZXJuYWxHcmFudCAqaXN0bXQpOwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIGIvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vZGRsbWVzc2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmE4ZGNhODYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxt ZXNzYWdlLmgKQEAgLTAsMCArMSw2MCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBkZGxtZXNz YWdlLmgKKyAqCSAgIEV4cG9ydHMgZnJvbSByZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2Uu YworICoKKyAqIENvcHlyaWdodCAoYykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKyAqCisgKiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgKKyAq LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHX0xPR0lDQUxfRERMX01FU1NBR0VfSAor I2RlZmluZSBQR19MT0dJQ0FMX0RETF9NRVNTQUdFX0gKKworI2luY2x1ZGUgImFjY2Vzcy94bG9n LmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dkZWZzLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dy ZWFkZXIuaCIKKyNpbmNsdWRlICJub2Rlcy9ub2Rlcy5oIgorCisKKy8qCisgKiBTdXBwb3J0IGZv ciBrZWVwaW5nIHRyYWNrIG9mIGRlcGFyc2VkIGNvbW1hbmRzLgorICovCit0eXBlZGVmIGVudW0g RGVwYXJzZWRDb21tYW5kVHlwZQoreworCURDVF9TaW1wbGVDbWQsCisJRENUX1RhYmxlRHJvcFN0 YXJ0LAorCURDVF9UYWJsZURyb3BFbmQsCisJRENUX1RhYmxlQWx0ZXIsCisJRENUX09iamVjdENy ZWF0ZSwKKwlEQ1RfT2JqZWN0RHJvcAorfSBEZXBhcnNlZENvbW1hbmRUeXBlOworCisvKgorICog R2VuZXJpYyBsb2dpY2FsIGRlY29kaW5nIERETCBtZXNzYWdlIHdhbCByZWNvcmQuCisgKi8KK3R5 cGVkZWYgc3RydWN0IHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UKK3sKKwlPaWQJCQkJCQlkYklkOwkJ CS8qIGRhdGFiYXNlIE9pZCBlbWl0dGVkIGZyb20gKi8KKwlTaXplCQkJCQlwcmVmaXhfc2l6ZTsJ LyogbGVuZ3RoIG9mIHByZWZpeCAqLworCU9pZAkJCQkJCXJlbGlkOwkJCS8qIGlkIG9mIHRoZSB0 YWJsZSAqLworCURlcGFyc2VkQ29tbWFuZFR5cGUJCWNtZHR5cGU7CQkvKiB0eXBlIG9mIHNxbCBj b21tYW5kICovCisJU2l6ZQkJCQkJbWVzc2FnZV9zaXplOwkgIC8qIHNpemUgb2YgdGhlIG1lc3Nh Z2UgKi8KKworCS8qCisJICogcGF5bG9hZCwgaW5jbHVkaW5nIG51bGwtdGVybWluYXRlZCBwcmVm aXggb2YgbGVuZ3RoIHByZWZpeF9zaXplCisJICovCisJY2hhcgkJbWVzc2FnZVtGTEVYSUJMRV9B UlJBWV9NRU1CRVJdOworfSB4bF9sb2dpY2FsX2RkbF9tZXNzYWdlOworCisjZGVmaW5lIFNpemVP ZkxvZ2ljYWxERExNZXNzYWdlCShvZmZzZXRvZih4bF9sb2dpY2FsX2RkbF9tZXNzYWdlLCBtZXNz YWdlKSkKKworZXh0ZXJuIFhMb2dSZWNQdHIgTG9nTG9naWNhbERETE1lc3NhZ2UoY29uc3QgY2hh ciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJ CQkJCSAgIGNvbnN0IGNoYXIgKmRkbF9tZXNzYWdlLCBzaXplX3Qgc2l6ZSk7CisKKy8qIFJNR1Ig QVBJKi8KKyNkZWZpbmUgWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFCTB4MDAKK3ZvaWQJCWxvZ2lj YWxkZGxtc2dfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7Cit2b2lkCQlsb2dpY2FsZGRs bXNnX2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKK2NvbnN0 IGNoYXIgKmxvZ2ljYWxkZGxtc2dfaWRlbnRpZnkodWludDggaW5mbyk7CisKKyNlbmRpZgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmggYi9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9kZWNvZGUuaAppbmRleCA3NDFiZjY1Li40MjdhN2I5IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9kZWNvZGUuaApAQCAtMjcsNiArMjcsNyBAQCBleHRlcm4gdm9pZCBoZWFwMl9kZWNvZGUo TG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwogZXh0 ZXJuIHZvaWQgeGFjdF9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVj b3JkQnVmZmVyICpidWYpOwogZXh0ZXJuIHZvaWQgc3RhbmRieV9kZWNvZGUoTG9naWNhbERlY29k aW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwogZXh0ZXJuIHZvaWQgbG9n aWNhbG1zZ19kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVm ZmVyICpidWYpOworZXh0ZXJuIHZvaWQgbG9naWNhbGRkbG1zZ19kZWNvZGUoTG9naWNhbERlY29k aW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwogCiBleHRlcm4gdm9pZCBM b2dpY2FsRGVjb2RpbmdQcm9jZXNzUmVjb3JkKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwK IAkJCQkJCQkJCQkgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9sb2dpY2FscHJvdG8uaAppbmRleCBhNzcxYWI4Li4yYWJjY2I4IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaAorKysgYi9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9sb2dpY2FscHJvdG8uaApAQCAtNjEsNiArNjEsNyBAQCB0eXBlZGVmIGVudW0gTG9n aWNhbFJlcE1zZ1R5cGUKIAlMT0dJQ0FMX1JFUF9NU0dfUkVMQVRJT04gPSAnUicsCiAJTE9HSUNB TF9SRVBfTVNHX1RZUEUgPSAnWScsCiAJTE9HSUNBTF9SRVBfTVNHX01FU1NBR0UgPSAnTScsCisJ TE9HSUNBTF9SRVBfTVNHX0RETE1FU1NBR0UgPSAnTCcsCiAJTE9HSUNBTF9SRVBfTVNHX0JFR0lO X1BSRVBBUkUgPSAnYicsCiAJTE9HSUNBTF9SRVBfTVNHX1BSRVBBUkUgPSAnUCcsCiAJTE9HSUNB TF9SRVBfTVNHX0NPTU1JVF9QUkVQQVJFRCA9ICdLJywKQEAgLTIyOSw3ICsyMzAsMTEgQEAgZXh0 ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV90cnVuY2F0ZShTdHJpbmdJbmZvIG91dCwgVHJhbnNh Y3Rpb25JZCB4aWQsCiBleHRlcm4gTGlzdCAqbG9naWNhbHJlcF9yZWFkX3RydW5jYXRlKFN0cmlu Z0luZm8gaW4sCiAJCQkJCQkJCQkgIGJvb2wgKmNhc2NhZGUsIGJvb2wgKnJlc3RhcnRfc2Vxcyk7 CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX21lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRy YW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKLQkJCQkJCQkJCSBib29sIHRyYW5zYWN0 aW9uYWwsIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7 CisJCQkJCQkJCQkgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJ CQkJCQkgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitleHRlcm4gdm9pZCBsb2dpY2Fs cmVwX3dyaXRlX2RkbG1lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBY TG9nUmVjUHRyIGxzbiwKKwkJCQkJCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNv bnN0IGNoYXIgKm1lc3NhZ2UpOworZXh0ZXJuIGNoYXIgKmxvZ2ljYWxyZXBfcmVhZF9kZGxtZXNz YWdlKFN0cmluZ0luZm8gaW4sIFhMb2dSZWNQdHIgKmxzbiwgY29uc3QgY2hhciAqKnByZWZpeCwg U2l6ZSAqc3opOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9yZWwoU3RyaW5nSW5mbyBv dXQsIFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCQkgUmVsYXRpb24gcmVsLCBCaXRtYXBzZXQg KmNvbHVtbnMpOwogZXh0ZXJuIExvZ2ljYWxSZXBSZWxhdGlvbiAqbG9naWNhbHJlcF9yZWFkX3Jl bChTdHJpbmdJbmZvIGluKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291 dHB1dF9wbHVnaW4uaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaApp bmRleCBiN2QyOGQ3Li43NjNlNDNmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9vdXRwdXRfcGx1Z2luLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3Bs dWdpbi5oCkBAIC05MSw2ICs5MSwxOCBAQCB0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlTWVz c2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkJCQlj b25zdCBjaGFyICptZXNzYWdlKTsKIAogLyoKKyAqIENhbGxlZCBmb3IgdGhlIGxvZ2ljYWwgZGVj b2RpbmcgRERMIG1lc3NhZ2VzLgorICovCit0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlRERM TWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkJ CQkgICBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJICAgWExvZ1JlY1B0ciBtZXNz YWdlX2xzbiwKKwkJCQkJCQkJCQkgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCQkJICAg T2lkIHJlbGlkLAorCQkJCQkJCQkJCSAgIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJ CQkJCQkJCQkgICBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJCQkgICBjb25zdCBjaGFyICpt ZXNzYWdlKTsKKworLyoKICAqIEZpbHRlciBjaGFuZ2VzIGJ5IG9yaWdpbi4KICAqLwogdHlwZWRl ZiBib29sICgqTG9naWNhbERlY29kZUZpbHRlckJ5T3JpZ2luQ0IpIChzdHJ1Y3QgTG9naWNhbERl Y29kaW5nQ29udGV4dCAqY3R4LApAQCAtMjAyLDYgKzIxNCwxOSBAQCB0eXBlZGVmIHZvaWQgKCpM b2dpY2FsRGVjb2RlU3RyZWFtTWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eAogCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCiAvKgorICogQ2Fs bGJhY2sgZm9yIHN0cmVhbWluZyBsb2dpY2FsIGRlY29kaW5nIERETCBtZXNzYWdlcyBmcm9tIGlu LXByb2dyZXNzCisgKiB0cmFuc2FjdGlvbnMuCisgKi8KK3R5cGVkZWYgdm9pZCAoKkxvZ2ljYWxE ZWNvZGVTdHJlYW1ERExNZXNzYWdlQ0IpIChzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAq Y3R4LAorCQkJCQkJCQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkJCSBY TG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwK KwkJCQkJCQkJCQkJCSBPaWQgcmVsaWQsCisJCQkJCQkJCQkJCQkgRGVwYXJzZWRDb21tYW5kVHlw ZSBjbWR0eXBlLAorCQkJCQkJCQkJCQkJIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkJCQkJCQkJ IGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCisvKgogICogQ2FsbGJhY2sgZm9yIHN0cmVhbWluZyB0 cnVuY2F0ZXMgZnJvbSBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMuCiAgKi8KIHR5cGVkZWYgdm9p ZCAoKkxvZ2ljYWxEZWNvZGVTdHJlYW1UcnVuY2F0ZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGlu Z0NvbnRleHQgKmN0eCwKQEAgLTIyMSw2ICsyNDYsNyBAQCB0eXBlZGVmIHN0cnVjdCBPdXRwdXRQ bHVnaW5DYWxsYmFja3MKIAlMb2dpY2FsRGVjb2RlVHJ1bmNhdGVDQiB0cnVuY2F0ZV9jYjsKIAlM b2dpY2FsRGVjb2RlQ29tbWl0Q0IgY29tbWl0X2NiOwogCUxvZ2ljYWxEZWNvZGVNZXNzYWdlQ0Ig bWVzc2FnZV9jYjsKKwlMb2dpY2FsRGVjb2RlRERMTWVzc2FnZUNCIGRkbG1lc3NhZ2VfY2I7CiAJ TG9naWNhbERlY29kZUZpbHRlckJ5T3JpZ2luQ0IgZmlsdGVyX2J5X29yaWdpbl9jYjsKIAlMb2dp Y2FsRGVjb2RlU2h1dGRvd25DQiBzaHV0ZG93bl9jYjsKIApAQCAtMjM5LDYgKzI2NSw3IEBAIHR5 cGVkZWYgc3RydWN0IE91dHB1dFBsdWdpbkNhbGxiYWNrcwogCUxvZ2ljYWxEZWNvZGVTdHJlYW1D b21taXRDQiBzdHJlYW1fY29tbWl0X2NiOwogCUxvZ2ljYWxEZWNvZGVTdHJlYW1DaGFuZ2VDQiBz dHJlYW1fY2hhbmdlX2NiOwogCUxvZ2ljYWxEZWNvZGVTdHJlYW1NZXNzYWdlQ0Igc3RyZWFtX21l c3NhZ2VfY2I7CisJTG9naWNhbERlY29kZVN0cmVhbURETE1lc3NhZ2VDQiBzdHJlYW1fZGRsbWVz c2FnZV9jYjsKIAlMb2dpY2FsRGVjb2RlU3RyZWFtVHJ1bmNhdGVDQiBzdHJlYW1fdHJ1bmNhdGVf Y2I7CiB9IE91dHB1dFBsdWdpbkNhbGxiYWNrczsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vcGdvdXRwdXQuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0 LmgKaW5kZXggMDIwMjc1NS4uODNlMGIxZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vcGdvdXRwdXQuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5o CkBAIC0yNSw2ICsyNSw3IEBAIHR5cGVkZWYgc3RydWN0IFBHT3V0cHV0RGF0YQogCXVpbnQzMgkJ cHJvdG9jb2xfdmVyc2lvbjsKIAlMaXN0CSAgICpwdWJsaWNhdGlvbl9uYW1lczsKIAlMaXN0CSAg ICpwdWJsaWNhdGlvbnM7CisJTGlzdAkgICAqZGVsZXRlZF9yZWxpZHM7CiAJYm9vbAkJYmluYXJ5 OwogCWJvb2wJCXN0cmVhbWluZzsKIAlib29sCQltZXNzYWdlczsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL3Jlb3JkZXJidWZmZXIuaAppbmRleCBkMTA5ZDBiLi43MzcyODRjIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKKysrIGIvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCkBAIC0xMSw2ICsxMSw4IEBACiAKICNpbmNsdWRl ICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAibGliL2lsaXN0LmgiCisjaW5jbHVk ZSAibm9kZXMvbm9kZXMuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9zaW52YWwuaCIKICNpbmNsdWRlICJ1dGlscy9oc2VhcmNoLmgiCiAj aW5jbHVkZSAidXRpbHMvcmVsY2FjaGUuaCIKQEAgLTU2LDYgKzU4LDcgQEAgdHlwZWRlZiBlbnVt IFJlb3JkZXJCdWZmZXJDaGFuZ2VUeXBlCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOU0VSVCwK IAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfVVBEQVRFLAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9E RUxFVEUsCisJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1FU1NBR0UsCiAJUkVPUkRFUl9CVUZG RVJfQ0hBTkdFX01FU1NBR0UsCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTiwK IAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5URVJOQUxfU05BUFNIT1QsCkBAIC0xMzAsNiArMTMz LDE2IEBAIHR5cGVkZWYgc3RydWN0IFJlb3JkZXJCdWZmZXJDaGFuZ2UKIAkJCWNoYXIJICAgKm1l c3NhZ2U7CiAJCX0JCQltc2c7CiAKKwkJLyogRERMIE1lc3NhZ2UuICovCisJCXN0cnVjdAorCQl7 CisJCQljaGFyCSAgICpwcmVmaXg7CisJCQlTaXplCQltZXNzYWdlX3NpemU7CisJCQljaGFyCSAg ICptZXNzYWdlOworCQkJT2lkCQkJcmVsaWQ7CisJCQlEZXBhcnNlZENvbW1hbmRUeXBlCWNtZHR5 cGU7CisJCX0JCQlkZGxtc2c7CisKIAkJLyogTmV3IHNuYXBzaG90LCBzZXQgd2hlbiBhY3Rpb24g PT0gKl9JTlRFUk5BTF9TTkFQU0hPVCAqLwogCQlTbmFwc2hvdAlzbmFwc2hvdDsKIApAQCAtNDMw LDYgKzQ0MywxNiBAQCB0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyTWVzc2FnZUNCKSAoUmVv cmRlckJ1ZmZlciAqcmIsCiAJCQkJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LAog CQkJCQkJCQkJCWNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCisvKiBEREwgbWVzc2FnZSBjYWxsYmFj ayBzaWduYXR1cmUgKi8KK3R5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJERExNZXNzYWdlQ0Ip IChSZW9yZGVyQnVmZmVyICpyYiwKKwkJCQkJCQkJCQkgICBSZW9yZGVyQnVmZmVyVFhOICp0eG4s CisJCQkJCQkJCQkJICAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkgICBjb25z dCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCQkJICAgT2lkIHJlbGlkLAorCQkJCQkJCQkJCSAgIERl cGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkgICBTaXplIHN6LAorCQkJCQkJ CQkJCSAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCiAvKiBiZWdpbiBwcmVwYXJlIGNhbGxiYWNr IHNpZ25hdHVyZSAqLwogdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlckJlZ2luUHJlcGFyZUNC KSAoUmVvcmRlckJ1ZmZlciAqcmIsCiAJCQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVyVFhOICp0eG4p OwpAQCAtNDk2LDYgKzUxOSwxNyBAQCB0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyU3RyZWFt TWVzc2FnZUNCKSAoCiAJCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LAog CQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCisvKiBzdHJlYW0gRERMIG1lc3Nh Z2UgY2FsbGJhY2sgc2lnbmF0dXJlICovCit0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyU3Ry ZWFtRERMTWVzc2FnZUNCKSAoCisJCQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlciAqcmIsCisJCQkJ CQkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCQkJIFhMb2dSZWNQdHIg bWVzc2FnZV9sc24sCisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJ CQkJIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkJCSBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUs CisJCQkJCQkJCQkJCQkgU2l6ZSBzeiwKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICptZXNzYWdl KTsKKwogLyogc3RyZWFtIHRydW5jYXRlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwogdHlwZWRlZiB2 b2lkICgqUmVvcmRlckJ1ZmZlclN0cmVhbVRydW5jYXRlQ0IpICgKIAkJCQkJCQkJCQkJICAgUmVv cmRlckJ1ZmZlciAqcmIsCkBAIC01NDEsNiArNTc1LDcgQEAgc3RydWN0IFJlb3JkZXJCdWZmZXIK IAlSZW9yZGVyQnVmZmVyQXBwbHlUcnVuY2F0ZUNCIGFwcGx5X3RydW5jYXRlOwogCVJlb3JkZXJC dWZmZXJDb21taXRDQiBjb21taXQ7CiAJUmVvcmRlckJ1ZmZlck1lc3NhZ2VDQiBtZXNzYWdlOwor CVJlb3JkZXJCdWZmZXJERExNZXNzYWdlQ0IgZGRsbWVzc2FnZTsKIAogCS8qCiAJICogQ2FsbGJh Y2tzIHRvIGJlIGNhbGxlZCB3aGVuIHN0cmVhbWluZyBhIHRyYW5zYWN0aW9uIGF0IHByZXBhcmUg dGltZS4KQEAgLTU2MCw2ICs1OTUsNyBAQCBzdHJ1Y3QgUmVvcmRlckJ1ZmZlcgogCVJlb3JkZXJC dWZmZXJTdHJlYW1Db21taXRDQiBzdHJlYW1fY29tbWl0OwogCVJlb3JkZXJCdWZmZXJTdHJlYW1D aGFuZ2VDQiBzdHJlYW1fY2hhbmdlOwogCVJlb3JkZXJCdWZmZXJTdHJlYW1NZXNzYWdlQ0Igc3Ry ZWFtX21lc3NhZ2U7CisJUmVvcmRlckJ1ZmZlclN0cmVhbURETE1lc3NhZ2VDQiBzdHJlYW1fZGRs bWVzc2FnZTsKIAlSZW9yZGVyQnVmZmVyU3RyZWFtVHJ1bmNhdGVDQiBzdHJlYW1fdHJ1bmNhdGU7 CiAKIAkvKgpAQCAtNjM1LDYgKzY3MSw5IEBAIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJRdWV1 ZUNoYW5nZShSZW9yZGVyQnVmZmVyICosIFRyYW5zYWN0aW9uSWQsCiBleHRlcm4gdm9pZCBSZW9y ZGVyQnVmZmVyUXVldWVNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKiwgVHJhbnNhY3Rpb25JZCwgU25h cHNob3Qgc25hcHNob3QsIFhMb2dSZWNQdHIgbHNuLAogCQkJCQkJCQkJICBib29sIHRyYW5zYWN0 aW9uYWwsIGNvbnN0IGNoYXIgKnByZWZpeCwKIAkJCQkJCQkJCSAgU2l6ZSBtZXNzYWdlX3NpemUs IGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlclF1ZXVlRERM TWVzc2FnZShSZW9yZGVyQnVmZmVyICosIFRyYW5zYWN0aW9uSWQsIFhMb2dSZWNQdHIgbHNuLAor CQkJCQkJCQkJCSBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkJ CQkJCSBjb25zdCBjaGFyICptZXNzYWdlLCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUg Y21kdHlwZSk7CiBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyQ29tbWl0KFJlb3JkZXJCdWZmZXIg KiwgVHJhbnNhY3Rpb25JZCwKIAkJCQkJCQkJWExvZ1JlY1B0ciBjb21taXRfbHNuLCBYTG9nUmVj UHRyIGVuZF9sc24sCiAJCQkJCQkJCVRpbWVzdGFtcFR6IGNvbW1pdF90aW1lLCBSZXBPcmlnaW5J ZCBvcmlnaW5faWQsIFhMb2dSZWNQdHIgb3JpZ2luX2xzbik7CmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9w c3FsLm91dAppbmRleCBhN2Y1NzAwLi5iZmM3M2MyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3BzcWwub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNx bC5vdXQKQEAgLTU5NzAsOSArNTk3MCw5IEBAIExpc3Qgb2Ygc2NoZW1hcwogKDAgcm93cykKIAog XGRScCAibm8uc3VjaC5wdWJsaWNhdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExpc3Qgb2YgcHVibGljYXRpb25zCi0gTmFtZSB8IE93bmVyIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tKy0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Yg cHVibGljYXRpb25zCisgTmFtZSB8IE93bmVyIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLSstLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLQogKDAgcm93cykKIAogXGRScyAibm8uc3VjaC5zdWJzY3JpcHRp b24iCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91 dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CmluZGV4IDQyOGMx ZjEuLjFkZjU5NTEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGlj YXRpb24ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0 CkBAIC0zMCwyMCArMzAsMjAgQEAgRVJST1I6ICBjb25mbGljdGluZyBvciByZWR1bmRhbnQgb3B0 aW9ucwogTElORSAxOiAuLi51Yl94eHggV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3Qg PSAndHJ1ZScsIHB1Ymxpc2hfdmkuLi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiBcZFJwCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICAgICAg TmFtZSAgICAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHRlc3Rw aWJfaW5zX3RydW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCi0gdGVzdHB1Yl9kZWZh dWx0ICAgIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAg fCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAgICAg ICAgTmFtZSAgICAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExz IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0rLS0tLS0tCisgdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8 IGYgICAgICAgIHwgZgorIHRlc3RwdWJfZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCBmICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAg ICAgfCBmICAgICAgICB8IGYKICgyIHJvd3MpCiAKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJf ZGVmYXVsdCBTRVQgKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRlbGV0ZScpOwogXGRScAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVi bGljYXRpb25zCi0gICAgICAgIE5hbWUgICAgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSB0ZXN0cGliX2luc190cnVuY3QgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAg IHwgZgotIHRlc3RwdWJfZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Yg cHVibGljYXRpb25zCisgICAgICAgIE5hbWUgICAgICAgIHwgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHRlc3RwaWJfaW5zX3RydW5jdCB8IHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYg ICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKKyB0ZXN0cHViX2RlZmF1bHQgICAgfCBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMiByb3dzKQogCiAtLS0gYWRk aW5nIHRhYmxlcwpAQCAtODcsMTAgKzg3LDEwIEBAIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7 CiAtLSBzaG91bGQgYmUgYWJsZSB0byBhZGQgc2NoZW1hIHRvICdGT1IgVEFCTEUnIHB1YmxpY2F0 aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEFERCBBTEwgVEFCTEVTIElO IFNDSEVNQSBwdWJfdGVzdDsKIFxkUnArIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQorICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBm CiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDEiCiBUYWJsZXMgZnJvbSBzY2hlbWFz OgpAQCAtOTksMjAgKzk5LDIwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSBzaG91bGQgYmUg YWJsZSB0byBkcm9wIHNjaGVtYSBmcm9tICdGT1IgVEFCTEUnIHB1YmxpY2F0aW9uCiBBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIERST1AgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHVi X3Rlc3Q7CiBcZFJwKyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgog ICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgogCiAtLSBzaG91bGQgYmUgYWJsZSB0byBzZXQgc2No ZW1hIHRvICdGT1IgVEFCTEUnIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi X2ZvcnRhYmxlIFNFVCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDsKIFxkUnArIHRlc3Rw dWJfZm9ydGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1Yl9mb3J0YWJsZQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJw dWJfdGVzdCIKIApAQCAtMTM0LDEwICsxMzQsMTAgQEAgRVJST1I6ICByZWxhdGlvbiAidGVzdHB1 Yl9ub3BrIiBpcyBub3QgcGFydCBvZiB0aGUgcHVibGljYXRpb24KIC0tIHNob3VsZCBiZSBhYmxl IHRvIHNldCB0YWJsZSB0byBzY2hlbWEgcHVibGljYXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWJfZm9yc2NoZW1hIFNFVCBUQUJMRSBwdWJfdGVzdC50ZXN0cHViX25vcGs7CiBcZFJwKyB0 ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8 IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0 LnRlc3RwdWJfbm9wayIKIApAQCAtMTU5LDEwICsxNTksMTAgQEAgUHVibGljYXRpb25zOgogICAg ICJ0ZXN0cHViX2ZvcmFsbHRhYmxlcyIKIAogXGRScCsgdGVzdHB1Yl9mb3JhbGx0YWJsZXMKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yYWxsdGFi bGVzCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCB0ICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JhbGx0YWJs ZXMKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgdCAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg ICB8IGYgICAgICAgIHwgZgogKDEgcm93KQogCiBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsMjsKQEAg LTE3NCwxOSArMTc0LDE5IEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViMyBGT1IgVEFCTEUg dGVzdHB1Yl90YmwzOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI0IEZPUiBUQUJMRSBPTkxZ IHRlc3RwdWJfdGJsMzsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHVi MwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 YjMKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMworICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAg ICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDMiCiAgICAgInB1Ymxp Yy50ZXN0cHViX3RibDNhIgogCiBcZFJwKyB0ZXN0cHViNAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjQKLSAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0t LS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAg InB1YmxpYy50ZXN0cHViX3RibDMiCiAKQEAgLTIwNywxMCArMjA3LDEwIEBAIFVQREFURSB0ZXN0 cHViX3BhcnRlZDEgU0VUIGEgPSAxOwogLS0gb25seSBwYXJlbnQgaXMgbGlzdGVkIGFzIGJlaW5n IGluIHB1YmxpY2F0aW9uLCBub3QgdGhlIHBhcnRpdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVz dHB1Yl9mb3JwYXJ0ZWQgQUREIFRBQkxFIHRlc3RwdWJfcGFydGVkOwogXGRScCsgdGVzdHB1Yl9m b3JwYXJ0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViX2ZvcnBhcnRlZAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 Yl9mb3JwYXJ0ZWQKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9w YXJ0ZWQiCiAKQEAgLTIyMywxMCArMjIzLDEwIEBAIEFMVEVSIFRBQkxFIHRlc3RwdWJfcGFydGVk IERFVEFDSCBQQVJUSVRJT04gdGVzdHB1Yl9wYXJ0ZWQxOwogVVBEQVRFIHRlc3RwdWJfcGFydGVk MSBTRVQgYSA9IDE7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnBhcnRlZCBTRVQgKHB1 Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7CiBcZFJwKyB0ZXN0cHViX2ZvcnBhcnRl ZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9y cGFydGVkCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgdAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnBh cnRlZAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgdCAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3BhcnRlZCIK IApAQCAtMjU1LDEwICsyNTUsMTAgQEAgU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1In OwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEs IHRlc3RwdWJfcmZfdGJsMiBXSEVSRSAoYyA8PiAndGVzdCcgQU5EIGQgPCA1KSBXSVRIIChwdWJs aXNoID0gJ2luc2VydCcpOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3Rw dWI1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViNQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1Cisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBm ICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAi cHVibGljLnRlc3RwdWJfcmZfdGJsMiIgV0hFUkUgKChjIDw+ICd0ZXN0Jzo6dGV4dCkgQU5EIChk IDwgNSkpCkBAIC0yNzEsMTAgKzI3MSwxMCBAQCBUYWJsZXM6CiAKIEFMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWI1IEFERCBUQUJMRSB0ZXN0cHViX3JmX3RibDMgV0hFUkUgKGUgPiAxMDAwIEFORCBl IDwgMjAwMCk7CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg fCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8 IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBm ICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50 ZXN0cHViX3JmX3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDIiIFdIRVJFICgoYyA8 PiAndGVzdCc6OnRleHQpIEFORCAoZCA8IDUpKQpAQCAtMjkwLDEwICsyOTAsMTAgQEAgUHVibGlj YXRpb25zOgogCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNSBEUk9QIFRBQkxFIHRlc3RwdWJf cmZfdGJsMjsKIFxkUnArIHRlc3RwdWI1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8 IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWI1CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwg RERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYg ICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRl c3RwdWJfcmZfdGJsMSIKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMyIgV0hFUkUgKChlID4g MTAwMCkgQU5EIChlIDwgMjAwMCkpCkBAIC0zMDEsMTAgKzMwMSwxMCBAQCBUYWJsZXM6CiAtLSBy ZW1vdmUgdGVzdHB1Yl9yZl90YmwxIGFuZCBhZGQgdGVzdHB1Yl9yZl90YmwzIGFnYWluIChhbm90 aGVyIFdIRVJFIGV4cHJlc3Npb24pCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNSBTRVQgVEFC TEUgdGVzdHB1Yl9yZl90YmwzIFdIRVJFIChlID4gMzAwIEFORCBlIDwgNTAwKTsKIFxkUnArIHRl c3RwdWI1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViNQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1 CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAg fCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMyIgV0hF UkUgKChlID4gMzAwKSBBTkQgKGUgPCA1MDApKQogCkBAIC0zMzcsMTAgKzMzNywxMCBAQCBTRVQg Y2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1 Yl9zeW50YXgxIEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEsIE9OTFkgdGVzdHB1Yl9yZl90Ymwz IFdIRVJFIChlIDwgOTk5KSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcpOwogUkVTRVQgY2xpZW50 X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJfc3ludGF4MQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5bnRheDEKLSAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAg ICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5bnRheDEKKyAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFi bGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJwdWJsaWMudGVzdHB1Yl9y Zl90YmwzIiBXSEVSRSAoZSA8IDk5OSkKQEAgLTM1MCwxMCArMzUwLDEwIEBAIFNFVCBjbGllbnRf bWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX3N5bnRh eDIgRk9SIFRBQkxFIHRlc3RwdWJfcmZfdGJsMSwgdGVzdHB1Yl9yZl9zY2hlbWExLnRlc3RwdWJf cmZfdGJsNSBXSEVSRSAoaCA8IDk5OSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQnKTsKIFJFU0VU IGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViX3N5bnRheDIKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgyCi0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgyCisgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8 IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAidGVzdHB1Yl9y Zl9zY2hlbWExLnRlc3RwdWJfcmZfdGJsNSIgV0hFUkUgKGggPCA5OTkpCkBAIC02NzYsMTAgKzY3 NiwxMCBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl90YWJsZV9pbnMgV0lUSCAocHVibGlz aCA9ICdpbnNlcnQsIHRydW5jYXRlJyk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogQUxU RVIgUFVCTElDQVRJT04gdGVzdHB1Yl90YWJsZV9pbnMgQUREIFRBQkxFIHRlc3RwdWJfdGJsNSAo YSk7CQktLSBvawogXGRScCsgdGVzdHB1Yl90YWJsZV9pbnMKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3RhYmxlX2lucwotICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAg ICAgIHwgZiAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl90YWJsZV9pbnMKKyAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFi bGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90Ymw1IiAoYSkKIApAQCAtODIxLDEwICs4MjEsMTAg QEAgQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyAoYSBpbnQsIGIgaW50LCBj IGludCwgUFJJTUFSWSBLRVkgKGEsYykpOwogQUxURVIgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9m aWx0ZXJzIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdHB1Yl90YmxfYm90aF9maWx0 ZXJzX3BrZXk7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2JvdGhfZmlsdGVycyBBREQgVEFC TEUgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIChhLGMpIFdIRVJFIChjICE9IDEpOwogXGRScCsg dGVzdHB1Yl9ib3RoX2ZpbHRlcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWJfYm90aF9maWx0ZXJzCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t CisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJw dWJsaWMudGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIiAoYSwgYykgV0hFUkUgKGMgPD4gMSkKIApA QCAtMTAyOSwxMCArMTAyOSwxMCBAQCBFUlJPUjogIHJlbGF0aW9uICJ0ZXN0cHViX3RibDEiIGlz IGFscmVhZHkgbWVtYmVyIG9mIHB1YmxpY2F0aW9uICJ0ZXN0cHViX2ZvcnRibAogQ1JFQVRFIFBV QkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGJsIEZPUiBUQUJMRSB0ZXN0cHViX3RibDE7CiBFUlJPUjog IHB1YmxpY2F0aW9uICJ0ZXN0cHViX2ZvcnRibCIgYWxyZWFkeSBleGlzdHMKIFxkUnArIHRlc3Rw dWJfZm9ydGJsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViX2ZvcnRibAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWJfZm9ydGJsCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9u b3BrIgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgpAQCAtMTA3MCwxMCArMTA3MCwxMCBAQCBQ dWJsaWNhdGlvbnM6CiAgICAgInRlc3RwdWJfZm9ydGJsIgogCiBcZFJwKyB0ZXN0cHViX2RlZmF1 bHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9k ZWZhdWx0Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9kZWZh dWx0CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAg ICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgog ICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgpAQCAtMTE1MSwxMCArMTE1MSwxMCBAQCBSRVZPS0Ug Q1JFQVRFIE9OIERBVEFCQVNFIHJlZ3Jlc3Npb24gRlJPTSByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIyOwogRFJPUCBUQUJMRSB0ZXN0cHViX3BhcnRlZDsKIERST1AgVEFCTEUgdGVzdHB1Yl90Ymwx OwogXGRScCsgdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0K KyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMSByb3cpCiAKIC0tIGZh aWwgLSBtdXN0IGJlIG93bmVyIG9mIHB1YmxpY2F0aW9uCkBAIC0xMTY0LDIwICsxMTY0LDIwIEBA IEVSUk9SOiAgbXVzdCBiZSBvd25lciBvZiBwdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKIFJF U0VUIFJPTEU7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2RlZmF1bHQgUkVOQU1FIFRPIHRl c3RwdWJfZm9vOwogXGRScCB0ZXN0cHViX2ZvbwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCi0gICAgTmFtZSAgICAgfCAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gdGVzdHB1Yl9mb28gfCByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExpc3Qgb2YgcHVibGljYXRpb25zCisgICAgTmFtZSAgICAgfCAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyB0ZXN0cHViX2ZvbyB8IHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAg ICAgICAgfCBmICAgICAgICB8IGYKICgxIHJvdykKIAogLS0gcmVuYW1lIGJhY2sgdG8ga2VlcCB0 aGUgcmVzdCBzaW1wbGUKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9vIFJFTkFNRSBUTyB0 ZXN0cHViX2RlZmF1bHQ7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2RlZmF1bHQgT1dORVIg VE8gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMjsKIFxkUnAgdGVzdHB1Yl9kZWZhdWx0Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0 aW9ucwotICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSB0ZXN0cHViX2RlZmF1bHQgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1Ymxp Y2F0aW9ucworICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLQorIHRlc3RwdWJfZGVmYXVsdCB8IHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlcjIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAg ICAgICAgIHwgZiAgICAgICAgfCBmCiAoMSByb3cpCiAKIC0tIGFkZGluZyBzY2hlbWFzIGFuZCB0 YWJsZXMKQEAgLTExOTMsMTkgKzExOTMsMTkgQEAgQ1JFQVRFIFRBQkxFICJDVVJSRU5UX1NDSEVN QSIuIkNVUlJFTlRfU0NIRU1BIihpZCBpbnQpOwogU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAn RVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBGT1IgQUxMIFRB QkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1h Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKIENS RUFURSBQVUJMSUNBVElPTiB0ZXN0cHViMl9mb3JzY2hlbWEgRk9SIEFMTCBUQUJMRVMgSU4gU0NI RU1BIHB1Yl90ZXN0MSwgcHViX3Rlc3QyLCBwdWJfdGVzdDM7CiBcZFJwKyB0ZXN0cHViMl9mb3Jz Y2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi Ml9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJf Zm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90 ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTIxOSw0NCArMTIxOSw0NCBAQCBDUkVBVEUgUFVC TElDQVRJT04gdGVzdHB1YjZfZm9yc2NoZW1hIEZPUiBBTEwgVEFCTEVTIElOIFNDSEVNQSAiQ1VS UkVOVF9TQ0hFTUEiLAogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgRk9SIFRB QkxFICJDVVJSRU5UX1NDSEVNQSIuIkNVUlJFTlRfU0NIRU1BIjsKIFJFU0VUIGNsaWVudF9taW5f bWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRh YmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1YmxpYyIKIAogXGRScCsgdGVzdHB1YjRfZm9yc2No ZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjRf Zm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI0X2Zv cnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJDVVJSRU5U X1NDSEVNQSIKIAogXGRScCsgdGVzdHB1YjVfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjVfZm9yc2NoZW1hCi0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1X2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBU YWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJDVVJSRU5UX1NDSEVNQSIKICAgICAicHVibGljIgog CiBcZFJwKyB0ZXN0cHViNl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViNl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjZfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9t IHNjaGVtYXM6CiAgICAgIkNVUlJFTlRfU0NIRU1BIgogICAgICJwdWJsaWMiCiAKIFxkUnArIHRl c3RwdWJfZm9ydGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1Yl9mb3J0YWJsZQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERE THMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgIkNVUlJFTlRfU0NI RU1BLkNVUlJFTlRfU0NIRU1BIgogCkBAIC0xMjkwLDEwICsxMjkwLDEwIEBAIEVSUk9SOiAgc2No ZW1hICJ0ZXN0cHViX3ZpZXciIGRvZXMgbm90IGV4aXN0CiAtLSBkcm9wcGluZyB0aGUgc2NoZW1h IHNob3VsZCByZWZsZWN0IHRoZSBjaGFuZ2UgaW4gcHVibGljYXRpb24KIERST1AgU0NIRU1BIHB1 Yl90ZXN0MzsKIFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFi bGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0x MzAxLDIwICsxMzAxLDIwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSByZW5hbWluZyB0aGUg c2NoZW1hIHNob3VsZCByZWZsZWN0IHRoZSBjaGFuZ2UgaW4gcHVibGljYXRpb24KIEFMVEVSIFND SEVNQSBwdWJfdGVzdDEgUkVOQU1FIHRvIHB1Yl90ZXN0MV9yZW5hbWVkOwogXGRScCsgdGVzdHB1 YjJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWIyX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERE THMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAg ICJwdWJfdGVzdDFfcmVuYW1lZCIKICAgICAicHViX3Rlc3QyIgogCiBBTFRFUiBTQ0hFTUEgcHVi X3Rlc3QxX3JlbmFtZWQgUkVOQU1FIHRvIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIyX2ZvcnNj aGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIy X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9m b3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rl c3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xMzIyLDEwICsxMzIyLDEwIEBAIFRhYmxlcyBmcm9t IHNjaGVtYXM6CiAtLSBhbHRlciBwdWJsaWNhdGlvbiBhZGQgc2NoZW1hCiBBTFRFUiBQVUJMSUNB VElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgQUREIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0 MjsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZy b20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xMzM0LDEw ICsxMzM0LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViMV9mb3JzY2hlbWEgQUREIEFMTCBUQUJMRVMgSU4gU0NIRU1BIG5vbl9leGlzdGVudF9zY2hl bWE7CiBFUlJPUjogIHNjaGVtYSAibm9uX2V4aXN0ZW50X3NjaGVtYSIgZG9lcyBub3QgZXhpc3QK IFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20g c2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xMzQ2LDEwICsx MzQ2LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi MV9mb3JzY2hlbWEgQUREIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIEVSUk9SOiAg c2NoZW1hICJwdWJfdGVzdDEiIGlzIGFscmVhZHkgbWVtYmVyIG9mIHB1YmxpY2F0aW9uICJ0ZXN0 cHViMV9mb3JzY2hlbWEiCiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8 IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3Qy IgpAQCAtMTM1NywxMCArMTM1NywxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gYWx0ZXIg cHVibGljYXRpb24gZHJvcCBzY2hlbWEKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNj aGVtYSBEUk9QIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MjsKIFxkUnArIHRlc3RwdWIx X2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExz IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAi cHViX3Rlc3QxIgogCkBAIC0xMzY4LDEwICsxMzY4LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJPUCBBTEwgVEFCTEVTIElO IFNDSEVNQSBwdWJfdGVzdDI7CiBFUlJPUjogIHRhYmxlcyBmcm9tIHNjaGVtYSAicHViX3Rlc3Qy IiBhcmUgbm90IHBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uCiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hl bWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9m b3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9y c2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0 MSIKIApAQCAtMTM3OSwyOSArMTM3OSwyOSBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIg UFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIERST1AgQUxMIFRBQkxFUyBJTiBTQ0hFTUEg bm9uX2V4aXN0ZW50X3NjaGVtYTsKIEVSUk9SOiAgc2NoZW1hICJub25fZXhpc3RlbnRfc2NoZW1h IiBkb2VzIG5vdCBleGlzdAogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAg fCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKIC0tIGRyb3AgYWxs IHNjaGVtYXMKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBEUk9QIEFMTCBU QUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVt YQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEK KyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYgICAgICAgIHwgZgogKDEgcm93KQogCiAtLSBhbHRlciBwdWJsaWNhdGlvbiBzZXQgbXVsdGlw bGUgc2NoZW1hCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VUIEFMTCBU QUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MSwgcHViX3Rlc3QyOwogXGRScCsgdGVzdHB1YjFfZm9y c2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIx X2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJf dGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTE0MTAsMTAgKzE0MTAsMTAgQEAgVGFibGVzIGZy b20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBTRVQgQUxM IFRBQkxFUyBJTiBTQ0hFTUEgbm9uX2V4aXN0ZW50X3NjaGVtYTsKIEVSUk9SOiAgc2NoZW1hICJu b25fZXhpc3RlbnRfc2NoZW1hIiBkb2VzIG5vdCBleGlzdAogXGRScCsgdGVzdHB1YjFfZm9yc2No ZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFf Zm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2Zv cnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVz dDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTE0MjIsMTAgKzE0MjIsMTAgQEAgVGFibGVzIGZyb20g c2NoZW1hczoKIC0tIHJlbW92aW5nIHRoZSBkdXBsaWNhdGUgc2NoZW1hcwogQUxURVIgUFVCTElD QVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIFNFVCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVz dDEsIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwg ZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCkBAIC0xNTA0LDE4ICsx NTA0LDE4IEBAIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJM SUNBVElPTiB0ZXN0cHViM19mb3JzY2hlbWE7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwog XGRScCsgdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0t LS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMSByb3cpCiAKIEFM VEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIzX2ZvcnNjaGVtYSBTRVQgQUxMIFRBQkxFUyBJTiBTQ0hF TUEgcHViX3Rlc3QxOwogXGRScCsgdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQorICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBm CiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKQEAgLTE1MjUsMjAgKzE1 MjUsMjAgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlIEZP UiBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDEKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0 cHViX2ZvcnRhYmxlX2ZvcnNjaGVtYSBGT1IgVEFCTEUgcHViX3Rlc3QyLnRibDEsIEFMTCBUQUJM RVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJw KyB0ZXN0cHViX2ZvcnNjaGVtYV9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWFfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYV9mb3J0YWJsZQorICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBU YWJsZXM6CiAgICAgInB1Yl90ZXN0Mi50YmwxIgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAi cHViX3Rlc3QxIgogCiBcZFJwKyB0ZXN0cHViX2ZvcnRhYmxlX2ZvcnNjaGVtYQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlX2ZvcnNjaGVt YQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0Mi50YmwxIgogVGFibGVzIGZy b20gc2NoZW1hczoKLS0gCjIuNy4yLndpbmRvd3MuMQoK --_005_OS0PR01MB5716009FDCCC0B50BCB14A99949D9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v15-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Description: v15-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch Content-Disposition: attachment; filename="v15-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch"; size=15442; creation-date="Tue, 02 Aug 2022 03:20:00 GMT"; modification-date="Tue, 02 Aug 2022 03:20:54 GMT" Content-Transfer-Encoding: base64 RnJvbSBjN2UwZGQ0YTViODQ1YzcwNzllOWRlZjUzYWIxZmMxNzkzOTNjYzUxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgMjggSnVsIDIwMjIgMTA6Mzk6MTcgKzA4MDAKU3ViamVjdDogW1BBVENI IHYxNSAzLzRdIFN1cHBvcnQgQ1JFQVRFIFRBQkxFIEFTIFNFTEVDVCBJTlRPCgpUaGUgbWFpbiBp ZGVhIG9mIHJlcGxpY2F0aW5nIHRoZSBDUkVBVEUgVEFCTEUgQVMgaXMgdGhhdCB3ZSBkZXByYXNl IHRoZSBDUkVBVEUKVEFCTEUgQVMgaW50byBhIHNpbXBsZSBDUkVBVEUgVEFCTEUod2l0aG91dCBz dWJxdWVyeSkgY29tbWFuZCBhbmQgV0FMIGxvZyBpdAphZnRlciBjcmVhdGluZyB0aGUgdGFibGUg YW5kIGJlZm9yZSB3cml0aW5nIGRhdGEgaW50byB0aGUgdGFibGUgYW5kIHJlcGxpY2F0ZQp0aGUg aW5jb21pbmcgd3JpdGVzIGxhdGVyIGFzIG5vcm1hbCBJTlNFUlRzLiBJbiB0aGlzIGFwcG9yYWNo LCB3ZSBkb24ndCBleGVjdXRlCnRoZSBzdWJxdWVyeSBvbiBzdWJzY3JpYmVyIHNvIHRoYXQgZG9u J3QgbmVlZCB0byBtYWtlIHN1cmUgYWxsIHRoZSBvYmplY3RzCnJlZmVyZW5jZWQgaW4gdGhlIHN1 YnF1ZXJ5IGFsc28gZXhpc3RzIGluIHN1YnNjcmliZXIuIEFuZCBUaGlzIGFwcHJvYWNoIHdvcmtz CmZvciBhbGwga2luZCBvZiBjb21tYW5kcyhlLmcuIENSQUVURSBUQUJMRSBBUyBbU0VMRUNUXVtF WEVDVVRFXVtWQUxVRVNdKQoKSW50cm9kdWNpbmcgYSBuZXcgdHlwZSBvZiBldmVudCB0cmlnZ2Vy ICJ0YWJsZV9pbml0X3dyaXRlIi4gd2hpY2ggd291bGQgYmUgZmlyZWQKZm9yIENSRUFURSBUQUJM RSBBUy9TRUxFQ1QgSU5UTyBhZnRlciBjcmVhdGluZyB0aGUgdGFibGUgYW5kCmJlZm9yZSBhbnkg b3RoZXIgbW9kaWZpY2F0aW9uLiB3ZSBkZXBhcnNlIHRoZSBjb21tYW5kIGluIHRoZSB0YWJsZV9p bml0X3dyaXRlIGV2ZW50CnRyaWdnZXIgYW5kIFdBTCBsb2cgdGhlIGRlcGFyc2VkIGpzb24gc3Ry aW5nLiBUaGUgd2Fsc2VuZGVyIHdpbGwgc2VuZCB0aGUKc3RyaW5nIHRvIHN1YnNjcmliZXIuIEFu ZCBpbmNvbWluZyBJTlNFUlRzIHdpbGwgYWxzbyBiZSByZXBsaWNhdGVkLgotLS0KIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMgICAgICAgIHwgIDEwICsrCiBzcmMvYmFja2VuZC9jb21t YW5kcy9kZGxfZGVwYXJzZS5jICAgICB8ICAyNCArKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5jICAgfCAxNzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst CiBzcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyB8ICAgOSArKwogc3JjL2Jh Y2tlbmQvdGNvcC91dGlsaXR5LmMgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvdXRp bHMvY2FjaGUvZXZ0Y2FjaGUuYyAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmRhdCAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dl ci5oICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCAgICAgfCAg IDkgKy0KIHNyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmggICAgICAgICAgIHwgICAzICstCiAx MCBmaWxlcyBjaGFuZ2VkLCAyMzIgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvY3JlYXRlYXMuYwppbmRleCA5YWJiYjZiLi45ODllODk0IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Ny ZWF0ZWFzLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5o IgogI2luY2x1ZGUgImNhdGFsb2cvdG9hc3RpbmcuaCIKICNpbmNsdWRlICJjb21tYW5kcy9jcmVh dGVhcy5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCIKICNpbmNsdWRlICJj b21tYW5kcy9tYXR2aWV3LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJlcGFyZS5oIgogI2luY2x1 ZGUgImNvbW1hbmRzL3RhYmxlY21kcy5oIgpAQCAtMTQzLDYgKzE0NCwxNSBAQCBjcmVhdGVfY3Rh c19pbnRlcm5hbChMaXN0ICphdHRyTGlzdCwgSW50b0NsYXVzZSAqaW50bykKIAkJU3RvcmVWaWV3 UXVlcnkoaW50b1JlbGF0aW9uQWRkci5vYmplY3RJZCwgcXVlcnksIGZhbHNlKTsKIAkJQ29tbWFu ZENvdW50ZXJJbmNyZW1lbnQoKTsKIAl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogRmlyZSB0aGUg dHJpZ2dlciBmb3IgdGFibGVfaW5pdF93cml0ZSBhZnRlciBjcmVhdGluZyB0aGUgdGFibGUgc28K KwkJICogdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZSBjYXRhbG9nIGluZm8gYWJvdXQgdGhlIG5ld2x5 IGNyZWF0ZWQgdGFibGUgaW4KKwkJICogdGhlIHRyaWdnZXIgZnVuY3Rpb24uCisJCSAqLworCQlF dmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZSgoTm9kZSAqKSBjcmVhdGUsIGludG9SZWxhdGlvbkFk ZHIpOworCX0KIAogCXJldHVybiBpbnRvUmVsYXRpb25BZGRyOwogfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Rk bF9kZXBhcnNlLmMKaW5kZXggYmQxMDlhNi4uNzhmYjFjYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxf ZGVwYXJzZS5jCkBAIC00OTIyLDYgKzQ5MjIsMjcgQEAgZGVwYXJzZV9EZWZpbmVTdG10KE9pZCBv YmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlLCBPYmplY3RBZGRyZXNzIHNlY29uZGFyeU9iaikKIH0K IAogLyoKKyAqIERlcGFyc2UgQ1JFQVRFIFRBQkxFIEFTIGNvbW1hbmQuCisgKgorICogZGVwYXJz ZV9DcmVhdGVTdG10IGRvIHRoZSBhY3R1YWwgd29yayBhcyB3ZSBkZXBhcnNlIHRoZSBmaW5hbCBD cmVhdGVTdG10IGZvcgorICogQ1JFQVRFIFRBQkxFIEFTIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlVGFibGVBc1N0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21k KQoreworCU9pZAkJCW9iamVjdElkOworCU5vZGUJICAgKnBhcnNldHJlZTsKKworCUFzc2VydChj bWQtPnR5cGUgPT0gU0NUX0NyZWF0ZVRhYmxlQXMpOworCisJcGFyc2V0cmVlID0gY21kLT5kLmN0 YXMucmVhbF9jcmVhdGU7CisJb2JqZWN0SWQgPSBjbWQtPmQuY3Rhcy5hZGRyZXNzLm9iamVjdElk OworCisJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKK30K KworCisvKgogICogSGFuZGxlIGRlcGFyc2luZyBvZiBzaW1wbGUgY29tbWFuZHMuCiAgKgogICog VGhpcyBmdW5jdGlvbiBzaG91bGQgY292ZXIgYWxsIGNhc2VzIGhhbmRsZWQgaW4gUHJvY2Vzc1V0 aWxpdHlTbG93LgpAQCAtNTA4Miw2ICs1MTAzLDkgQEAgZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQo Q29sbGVjdGVkQ29tbWFuZCAqY21kLCBib29sIHZlcmJvc2VfbW9kZSkKIAkJY2FzZSBTQ1RfQWx0 ZXJUYWJsZToKIAkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyVGFibGVTdG10KGNtZCk7CiAJCQlicmVh azsKKwkJY2FzZSBTQ1RfQ3JlYXRlVGFibGVBczoKKwkJCXRyZWUgPSBkZXBhcnNlX0NyZWF0ZVRh YmxlQXNTdG10KGNtZCk7CisJCQlicmVhazsKIAkJY2FzZSBTQ1RfQWx0ZXJPcEZhbWlseToKIAkJ CXRyZWUgPSBkZXBhcnNlX0FsdGVyT3BGYW1pbHkoY21kKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvZXZlbnRfdHJpZ2dlci5jCmluZGV4IGEwMGYwNjEuLjcyYjgzYTEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYworKysgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9ldmVudF90cmlnZ2VyLmMKQEAgLTEzMyw3ICsxMzMsOCBAQCBDcmVhdGVFdmVudFRy aWdnZXIoQ3JlYXRlRXZlbnRUcmlnU3RtdCAqc3RtdCkKIAlpZiAoc3RyY21wKHN0bXQtPmV2ZW50 bmFtZSwgImRkbF9jb21tYW5kX3N0YXJ0IikgIT0gMCAmJgogCQlzdHJjbXAoc3RtdC0+ZXZlbnRu YW1lLCAiZGRsX2NvbW1hbmRfZW5kIikgIT0gMCAmJgogCQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1l LCAic3FsX2Ryb3AiKSAhPSAwICYmCi0JCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9y ZXdyaXRlIikgIT0gMCkKKwkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUi KSAhPSAwICYmCisJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9pbml0X3dyaXRlIikg IT0gMCkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJP UiksCiAJCQkJIGVycm1zZygidW5yZWNvZ25pemVkIGV2ZW50IG5hbWUgXCIlc1wiIiwKQEAgLTE1 OSw3ICsxNjAsOCBAQCBDcmVhdGVFdmVudFRyaWdnZXIoQ3JlYXRlRXZlbnRUcmlnU3RtdCAqc3Rt dCkKIAkvKiBWYWxpZGF0ZSB0YWcgbGlzdCwgaWYgYW55LiAqLwogCWlmICgoc3RyY21wKHN0bXQt PmV2ZW50bmFtZSwgImRkbF9jb21tYW5kX3N0YXJ0IikgPT0gMCB8fAogCQkgc3RyY21wKHN0bXQt PmV2ZW50bmFtZSwgImRkbF9jb21tYW5kX2VuZCIpID09IDAgfHwKLQkJIHN0cmNtcChzdG10LT5l dmVudG5hbWUsICJzcWxfZHJvcCIpID09IDApCisJCSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAi c3FsX2Ryb3AiKSA9PSAwIHx8CisJCSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfaW5p dF93cml0ZSIpID09IDApCiAJCSYmIHRhZ3MgIT0gTlVMTCkKIAkJdmFsaWRhdGVfZGRsX3RhZ3Mo InRhZyIsIHRhZ3MpOwogCWVsc2UgaWYgKHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9y ZXdyaXRlIikgPT0gMApAQCAtNTg1LDcgKzU4Nyw4IEBAIEV2ZW50VHJpZ2dlckNvbW1vblNldHVw KE5vZGUgKnBhcnNldHJlZSwKIAkJZGJndGFnID0gQ3JlYXRlQ29tbWFuZFRhZyhwYXJzZXRyZWUp OwogCQlpZiAoZXZlbnQgPT0gRVZUX0RETENvbW1hbmRTdGFydCB8fAogCQkJZXZlbnQgPT0gRVZU X0RETENvbW1hbmRFbmQgfHwKLQkJCWV2ZW50ID09IEVWVF9TUUxEcm9wKQorCQkJZXZlbnQgPT0g RVZUX1NRTERyb3AgfHwKKwkJCWV2ZW50ID09IEVWVF9UYWJsZUluaXRXcml0ZSkKIAkJewogCQkJ aWYgKCFjb21tYW5kX3RhZ19ldmVudF90cmlnZ2VyX29rKGRiZ3RhZykpCiAJCQkJZWxvZyhFUlJP UiwgInVuZXhwZWN0ZWQgY29tbWFuZCB0YWcgXCIlc1wiIiwgR2V0Q29tbWFuZFRhZ05hbWUoZGJn dGFnKSk7CkBAIC04NjgsNiArODcxLDE2MyBAQCBFdmVudFRyaWdnZXJUYWJsZVJld3JpdGUoTm9k ZSAqcGFyc2V0cmVlLCBPaWQgdGFibGVPaWQsIGludCByZWFzb24pCiAJQ29tbWFuZENvdW50ZXJJ bmNyZW1lbnQoKTsKIH0KIAorCisvKgorICogRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVTdGFy dAorICogICAgIFByZXBhcmUgdG8gcmVjZWl2ZSBkYXRhIG9uIGFuIENSRUFURSBUQUJMRSBBUy9T RUxFVCBJTlRPIGNvbW1hbmQgYWJvdXQKKyAqICAgICB0byBiZSBleGVjdXRlZC4KKyAqLwordm9p ZAorRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVTdGFydChOb2RlICpwYXJzZXRyZWUpCit7CisJ TWVtb3J5Q29udGV4dCBvbGRjeHQ7CisJQ29sbGVjdGVkQ29tbWFuZCAqY29tbWFuZDsKKworCS8q IGlnbm9yZSBpZiBldmVudCB0cmlnZ2VyIGNvbnRleHQgbm90IHNldCwgb3IgY29sbGVjdGlvbiBk aXNhYmxlZCAqLworCWlmICghY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJlbnRF dmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFuZENvbGxlY3Rpb25JbmhpYml0ZWQpCisJCXJldHVybjsK KworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjdXJyZW50RXZlbnRUcmlnZ2VyU3Rh dGUtPmN4dCk7CisKKwljb21tYW5kID0gcGFsbG9jKHNpemVvZihDb2xsZWN0ZWRDb21tYW5kKSk7 CisKKwljb21tYW5kLT50eXBlID0gU0NUX0NyZWF0ZVRhYmxlQXM7CisJY29tbWFuZC0+aW5fZXh0 ZW5zaW9uID0gY3JlYXRpbmdfZXh0ZW5zaW9uOworCWNvbW1hbmQtPmQuY3Rhcy5hZGRyZXNzID0g SW52YWxpZE9iamVjdEFkZHJlc3M7CisJY29tbWFuZC0+ZC5jdGFzLnJlYWxfY3JlYXRlID0gTlVM TDsKKwljb21tYW5kLT5wYXJzZXRyZWUgPSBjb3B5T2JqZWN0KHBhcnNldHJlZSk7CisKKwljb21t YW5kLT5wYXJlbnQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOwor CWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQgPSBjb21tYW5kOworCisJ TWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7Cit9CisKKy8qCisgKiBFdmVudFRyaWdnZXJU YWJsZUluaXRXcml0ZUVuZAorICoJCUZpbmlzaCB1cCBzYXZpbmcgYW4gQ1JFQVRFIFRBQkxFIEFT L1NFTEVDVCBJTlRPIGNvbW1hbmQuCisgKgorICogRklYTUUgdGhpcyBBUEkgaXNuJ3QgY29uc2lk ZXJpbmcgdGhlIHBvc3NpYmlsaXR5IHRoYXQgYW4geGFjdC9zdWJ4YWN0IGlzCisgKiBhYm9ydGVk IHBhcnR3YXkgdGhyb3VnaC4gIFByb2JhYmx5IGl0J3MgYmVzdCB0byBhZGQgYW4KKyAqIEF0RU9T dWJYYWN0X0V2ZW50VHJpZ2dlcnMoKSB0byBmaXggdGhpcy4KKyAqLwordm9pZAorRXZlbnRUcmln Z2VyVGFibGVJbml0V3JpdGVFbmQodm9pZCkKK3sKKwlDb2xsZWN0ZWRDb21tYW5kICpwYXJlbnQ7 CisKKwkvKiBpZ25vcmUgaWYgZXZlbnQgdHJpZ2dlciBjb250ZXh0IG5vdCBzZXQsIG9yIGNvbGxl Y3Rpb24gZGlzYWJsZWQgKi8KKwlpZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSB8fAorCQlj dXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRDb2xsZWN0aW9uSW5oaWJpdGVkKQorCQly ZXR1cm47CisKKwlwYXJlbnQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21t YW5kLT5wYXJlbnQ7CisKKwlwZnJlZShjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRD b21tYW5kKTsKKworCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQgPSBw YXJlbnQ7Cit9CisKKy8qCisgKiBwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX2luaXRfd3JpdGUK KyAqCisgKiBEZXBhcnNlIHRoZSBkZGwgdGFibGUgY3JlYXRlIGNvbW1hbmQgYW5kIGxvZyBpdC4K KyAqLworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZShQR19GVU5D VElPTl9BUkdTKQoreworCWNoYXIJCQkJcmVscGVyc2lzdDsKKwlDb2xsZWN0ZWRDb21tYW5kICAg KmNtZDsKKwljaGFyICAgCQkJICAgKmpzb25fc3RyaW5nOworCisJaWYgKCFDQUxMRURfQVNfRVZF TlRfVFJJR0dFUihmY2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5IGV2ZW50IHRy aWdnZXIgbWFuYWdlciIpOworCisJY21kID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJy ZW50Q29tbWFuZDsKKwlBc3NlcnQoY21kKTsKKworCXJlbHBlcnNpc3QgPSBnZXRfcmVsX3BlcnNp c3RlbmNlKGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJZCk7CisKKwkvKgorCSAqIERvIG5v dCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3aG9zZSB0YXJnZXQgdGFibGUgaXMgYSB0 ZW1wb3JhcnkKKwkgKiB0YWJsZS4KKwkgKgorCSAqIFdlIHdpbGwgZ2VuZXJhdGUgd2FsIGxvZ3Mg Zm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVubG9nZ2VkIHRhYmxlcworCSAqIGNhbiBhbHNv IGJlIGNyZWF0ZWQgYW5kIGFsdGVyZWQgb24gdGhlIHN1YnNjcmliZXIgc2lkZS4gVGhpcyBtYWtl cyBpdAorCSAqIHBvc3NpYmxlIHRvIGRpcmVjdGx5IHJlcGxheSB0aGUgU0VUIExPR0dFRCBjb21t YW5kIGFuZCB0aGUgaW5jb21pbmcKKwkgKiByZXdyaXRlIG1lc3NhZ2Ugd2l0aG91dCBjcmVhdGlu ZyBhIG5ldyB0YWJsZS4KKwkgKi8KKwlpZiAocmVscGVyc2lzdCA9PSBSRUxQRVJTSVNURU5DRV9U RU1QKQorCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworCisJLyogRGVwYXJzZSB0aGUg RERMIGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQgdG8gYWxsb3cgZGVjb2Rpbmcgb2YgdGhlIHNhbWUu ICovCisJanNvbl9zdHJpbmcgPSBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChjbWQsIGZhbHNlKTsK KworCWlmIChqc29uX3N0cmluZyAhPSBOVUxMKQorCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVw YXJzZSIsIGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJZCwgRENUX1NpbXBsZUNtZCwKKwkJ CQkJCQkganNvbl9zdHJpbmcsIHN0cmxlbihqc29uX3N0cmluZykgKyAxKTsKKworCXJldHVybiBQ b2ludGVyR2V0RGF0dW0oTlVMTCk7Cit9CisKKy8qCisgKiBGaXJlIHRhYmxlX2luaXRfcmV3cml0 ZSB0cmlnZ2Vycy4KKyAqLwordm9pZAorRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGUoTm9kZSAq cmVhbF9jcmVhdGUsIE9iamVjdEFkZHJlc3MgYWRkcmVzcykKK3sKKwlMaXN0CSAgICpydW5saXN0 OworCUV2ZW50VHJpZ2dlckRhdGEgdHJpZ2RhdGE7CisJQ29sbGVjdGVkQ29tbWFuZCAqY29tbWFu ZDsKKworCS8qCisJICogU2VlIEV2ZW50VHJpZ2dlckRETENvbW1hbmRTdGFydCBmb3IgYSBkaXNj dXNzaW9uIGFib3V0IHdoeSBldmVudAorCSAqIHRyaWdnZXJzIGFyZSBkaXNhYmxlZCBpbiBzaW5n bGUgdXNlciBtb2RlLgorCSAqLworCWlmICghSXNVbmRlclBvc3RtYXN0ZXIpCisJCXJldHVybjsK KworCS8qCisJICogQWxzbyBkbyBub3RoaW5nIGlmIG91ciBzdGF0ZSBpc24ndCBzZXQgdXAsIHdo aWNoIGl0IHdvbid0IGJlIGlmIHRoZXJlCisJICogd2VyZW4ndCBhbnkgcmVsZXZhbnQgZXZlbnQg dHJpZ2dlcnMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IERETAorCSAqIGNvbW1hbmQuICBU aGlzIHRlc3QgbWlnaHQgdGhlcmVmb3JlIHNlZW0gb3B0aW9uYWwsIGJ1dCBpdCdzCisJICogKm5l Y2Vzc2FyeSosIGJlY2F1c2UgRXZlbnRUcmlnZ2VyQ29tbW9uU2V0dXAgbWlnaHQgZmluZCB0cmln Z2VycyB0aGF0CisJICogZGlkbid0IGV4aXN0IGF0IHRoZSB0aW1lIHRoZSBjb21tYW5kIHN0YXJ0 ZWQuCisJICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUpCisJCXJldHVybjsKKwor CS8qIERvIG5vdGhpbmcgaWYgbm8gY29tbWFuZCB3YXMgY29sbGVjdGVkLiAqLworCWlmICghY3Vy cmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCkKKwkJcmV0dXJuOworCisJY29t bWFuZCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisKKwlydW5s aXN0ID0gRXZlbnRUcmlnZ2VyQ29tbW9uU2V0dXAoY29tbWFuZC0+cGFyc2V0cmVlLAorCQkJCQkJ CQkJICBFVlRfVGFibGVJbml0V3JpdGUsCisJCQkJCQkJCQkgICJ0YWJsZV9pbml0X3dyaXRlIiwK KwkJCQkJCQkJCSAgJnRyaWdkYXRhKTsKKwlpZiAocnVubGlzdCA9PSBOSUwpCisJCXJldHVybjsK KworCS8qIFNldCB0aGUgcmVhbCBDcmVhdGVUYWJsZSBzdGF0bWVudCBhbmQgb2JqZWN0IGFkZHJl c3MgKi8KKwljb21tYW5kLT5kLmN0YXMucmVhbF9jcmVhdGUgPSByZWFsX2NyZWF0ZTsKKwljb21t YW5kLT5kLmN0YXMuYWRkcmVzcyA9IGFkZHJlc3M7CisKKwkvKiBSdW4gdGhlIHRyaWdnZXJzLiAq LworCUV2ZW50VHJpZ2dlckludm9rZShydW5saXN0LCAmdHJpZ2RhdGEpOworCisJLyogQ2xlYW51 cC4gKi8KKwlsaXN0X2ZyZWUocnVubGlzdCk7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSBhbnl0aGlu ZyB0aGUgZXZlbnQgdHJpZ2dlcnMgZGlkIHdpbGwgYmUgdmlzaWJsZSB0byB0aGUgbWFpbgorCSAq IGNvbW1hbmQuCisJICovCisJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKK30KKwogLyoKICAq IEludm9rZSBlYWNoIGV2ZW50IHRyaWdnZXIgaW4gYSBsaXN0IG9mIGV2ZW50IHRyaWdnZXJzLgog ICovCkBAIC0xMTQ4LDcgKzEzMDgsOCBAQCB0cmFja0Ryb3BwZWRPYmplY3RzTmVlZGVkKHZvaWQp CiAJICovCiAJcmV0dXJuIGxpc3RfbGVuZ3RoKEV2ZW50Q2FjaGVMb29rdXAoRVZUX1NRTERyb3Ap KSA+IDAgfHwKIAkJbGlzdF9sZW5ndGgoRXZlbnRDYWNoZUxvb2t1cChFVlRfVGFibGVSZXdyaXRl KSkgPiAwIHx8Ci0JCWxpc3RfbGVuZ3RoKEV2ZW50Q2FjaGVMb29rdXAoRVZUX0RETENvbW1hbmRF bmQpKSA+IDA7CisJCWxpc3RfbGVuZ3RoKEV2ZW50Q2FjaGVMb29rdXAoRVZUX0RETENvbW1hbmRF bmQpKSA+IDAgfHwKKwkJbGlzdF9sZW5ndGgoRXZlbnRDYWNoZUxvb2t1cChFVlRfVGFibGVJbml0 V3JpdGUpKSA+IDA7CiB9CiAKIC8qCkBAIC0xODY3LDYgKzIwMjgsNyBAQCBwZ19ldmVudF90cmln Z2VyX2RkbF9jb21tYW5kcyhQR19GVU5DVElPTl9BUkdTKQogCQkJY2FzZSBTQ1RfQWx0ZXJPcEZh bWlseToKIAkJCWNhc2UgU0NUX0NyZWF0ZU9wQ2xhc3M6CiAJCQljYXNlIFNDVF9BbHRlclRTQ29u ZmlnOgorCQkJY2FzZSBTQ1RfQ3JlYXRlVGFibGVBczoKIAkJCQl7CiAJCQkJCWNoYXIJICAgKmlk ZW50aXR5OwogCQkJCQljaGFyCSAgICp0eXBlOwpAQCAtMTg4NCw2ICsyMDQ2LDggQEAgcGdfZXZl bnRfdHJpZ2dlcl9kZGxfY29tbWFuZHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJCWFkZHIgPSBj bWQtPmQuY3JlYXRlb3BjLmFkZHJlc3M7CiAJCQkJCWVsc2UgaWYgKGNtZC0+dHlwZSA9PSBTQ1Rf QWx0ZXJUU0NvbmZpZykKIAkJCQkJCWFkZHIgPSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3M7CisJCQkJ CWVsc2UgaWYgKGNtZC0+dHlwZSA9PSBTQ1RfQWx0ZXJUU0NvbmZpZykKKwkJCQkJCWFkZHIgPSBj bWQtPmQuY3Rhcy5hZGRyZXNzOwogCiAJCQkJCS8qCiAJCQkJCSAqIElmIGFuIG9iamVjdCB3YXMg ZHJvcHBlZCBpbiB0aGUgc2FtZSBjb21tYW5kIHdlIG1heSBlbmQKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv cHVibGljYXRpb25jbWRzLmMKaW5kZXggNTNiZGM3Ny4uM2EwNDFiMiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvcHVibGljYXRpb25jbWRzLmMKQEAgLTk3OCw2ICs5NzgsMTEgQEAgQ3JlYXRlUHVibGlj YXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJ CQlDTURUQUdfQUxURVJfSU5ERVgKIAkJfTsKIAorCQlDb21tYW5kVGFnCWluaXRfY29tbWFuZHNb XSA9IHsKKwkJCUNNRFRBR19DUkVBVEVfVEFCTEVfQVMsCisJCQlDTURUQUdfU0VMRUNUX0lOVE8K KwkJfTsKKwogCQkvKiBDcmVhdGUgdGhlIGRkbF9jb21tYW5kX2VuZCBldmVudCB0cmlnZ2VyICov CiAJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoImRkbF9jb21tYW5kX2VuZCIsIGVuZF9j b21tYW5kcywKIAkJCQkJCQkJCSBsZW5ndGhvZihlbmRfY29tbWFuZHMpLCBteXNlbGYsIHB1Ym9p ZCk7CkBAIC05ODksNiArOTk0LDEwIEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBz dGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCQkvKiBDcmVhdGUgdGhlIHRhYmxl X3Jld3JpdGUgZXZlbnQgdHJpZ2dlciAqLwogCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2Vy KCJ0YWJsZV9yZXdyaXRlIiwgcmV3cml0ZV9jb21tYW5kcywKIAkJCQkJCQkJCSBsZW5ndGhvZihy ZXdyaXRlX2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOworCisJCS8qIENyZWF0ZSB0aGUgdGFi bGVfaW5pdF93cml0ZSBldmVudCB0cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRy aWdnZXIoInRhYmxlX2luaXRfd3JpdGUiLCBpbml0X2NvbW1hbmRzLAorCQkJCQkJCQkJIGxlbmd0 aG9mKGluaXRfY29tbWFuZHMpLCBteXNlbGYsIHB1Ym9pZCk7CiAJfQogCiAJdGFibGVfY2xvc2Uo cmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRp bGl0eS5jIGIvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKaW5kZXggNmIwYTg2NS4uNDkwYjcz YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKKysrIGIvc3JjL2JhY2tl bmQvdGNvcC91dGlsaXR5LmMKQEAgLTE2NjUsOCArMTY2NSwxMCBAQCBQcm9jZXNzVXRpbGl0eVNs b3coUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCWJyZWFrOwogCiAJCQljYXNlIFRfQ3JlYXRlVGFi bGVBc1N0bXQ6CisJCQkJRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVTdGFydChwYXJzZXRyZWUp OwogCQkJCWFkZHJlc3MgPSBFeGVjQ3JlYXRlVGFibGVBcyhwc3RhdGUsIChDcmVhdGVUYWJsZUFz U3RtdCAqKSBwYXJzZXRyZWUsCiAJCQkJCQkJCQkJCXBhcmFtcywgcXVlcnlFbnYsIHFjKTsKKwkJ CQlFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZUVuZCgpOwogCQkJCWJyZWFrOwogCiAJCQljYXNl IFRfUmVmcmVzaE1hdFZpZXdTdG10OgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2Fj aGUvZXZ0Y2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2V2dGNhY2hlLmMKaW5kZXgg ZjdmNzE2NS4uN2ZiOGNiMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0 Y2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRjYWNoZS5jCkBAIC0xNjcs NiArMTY3LDggQEAgQnVpbGRFdmVudFRyaWdnZXJDYWNoZSh2b2lkKQogCQkJZXZlbnQgPSBFVlRf U1FMRHJvcDsKIAkJZWxzZSBpZiAoc3RyY21wKGV2dGV2ZW50LCAidGFibGVfcmV3cml0ZSIpID09 IDApCiAJCQlldmVudCA9IEVWVF9UYWJsZVJld3JpdGU7CisJCWVsc2UgaWYgKHN0cmNtcChldnRl dmVudCwgInRhYmxlX2luaXRfd3JpdGUiKSA9PSAwKQorCQkJZXZlbnQgPSBFVlRfVGFibGVJbml0 V3JpdGU7CiAJCWVsc2UKIAkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRl eCBhYjI5MGRkLi4xMzY3MzcyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTExOTA5LDQg KzExOTA5LDcgQEAKIHsgb2lkID0+ICc0NjQ2JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRkbCBj b21tYW5kIGRlcGFyc2UgdGFibGUgcmV3cml0ZScsCiAgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9u X2RlcGFyc2VfdGFibGVfcmV3cml0ZScsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXInLAog ICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxl X3Jld3JpdGUnIH0sCit7IG9pZCA9PiAnNDY0NycsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBkZGwg Y29tbWFuZCBkZXBhcnNlIHRhYmxlIGluaXQnLAorICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9k ZXBhcnNlX3RhYmxlX2luaXRfd3JpdGUnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2VyJywK KyAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV90YWJs ZV9pbml0X3dyaXRlJyB9LAogXQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZl bnRfdHJpZ2dlci5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCmluZGV4 IGZkMmVlN2YuLmE5ZTBmNzEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50 X3RyaWdnZXIuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKQEAg LTU1LDYgKzU1LDEwIEBAIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckRETENvbW1hbmRFbmQoTm9k ZSAqcGFyc2V0cmVlKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlclNRTERyb3AoTm9kZSAqcGFy c2V0cmVlKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlclRhYmxlUmV3cml0ZShOb2RlICpwYXJz ZXRyZWUsIE9pZCB0YWJsZU9pZCwgaW50IHJlYXNvbik7CiAKK2V4dGVybiB2b2lkIEV2ZW50VHJp Z2dlclRhYmxlSW5pdFdyaXRlU3RhcnQoTm9kZSAqcGFyc2V0cmVlKTsKK2V4dGVybiB2b2lkIEV2 ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlKE5vZGUgKnBhcnNldHJlZSwgT2JqZWN0QWRkcmVzcyBh ZGRyZXNzKTsKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kKHZvaWQp OworCiBleHRlcm4gYm9vbCBFdmVudFRyaWdnZXJCZWdpbkNvbXBsZXRlUXVlcnkodm9pZCk7CiBl eHRlcm4gdm9pZCBFdmVudFRyaWdnZXJFbmRDb21wbGV0ZVF1ZXJ5KHZvaWQpOwogZXh0ZXJuIGJv b2wgdHJhY2tEcm9wcGVkT2JqZWN0c05lZWRlZCh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmggYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRp bGl0eS5oCmluZGV4IGI1MzI5NGIuLjNkMjk0YTAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rj b3AvZGVwYXJzZV91dGlsaXR5LmgKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxp dHkuaApAQCAtMjksNyArMjksOCBAQCB0eXBlZGVmIGVudW0gQ29sbGVjdGVkQ29tbWFuZFR5cGUK IAlTQ1RfQWx0ZXJPcEZhbWlseSwKIAlTQ1RfQWx0ZXJEZWZhdWx0UHJpdmlsZWdlcywKIAlTQ1Rf Q3JlYXRlT3BDbGFzcywKLQlTQ1RfQWx0ZXJUU0NvbmZpZworCVNDVF9BbHRlclRTQ29uZmlnLAor CVNDVF9DcmVhdGVUYWJsZUFzCiB9IENvbGxlY3RlZENvbW1hbmRUeXBlOwogCiAvKgpAQCAtMTAx LDYgKzEwMiwxMiBAQCB0eXBlZGVmIHN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kCiAJCXsKIAkJCU9i amVjdFR5cGUJb2JqdHlwZTsKIAkJfQkJCWRlZnByaXZzOworCisJCXN0cnVjdAorCQl7CisJCQlP YmplY3RBZGRyZXNzIGFkZHJlc3M7CisJCQlOb2RlCQkgKnJlYWxfY3JlYXRlOworCQl9CQkJY3Rh czsKIAl9CQkJZDsKIAogCXN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kICpwYXJlbnQ7CS8qIHdoZW4g bmVzdGVkICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oIGIvc3Jj L2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaAppbmRleCBkZGI2N2E2Li4xZTY0ODMxIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxz L2V2dGNhY2hlLmgKQEAgLTIyLDcgKzIyLDggQEAgdHlwZWRlZiBlbnVtCiAJRVZUX0RETENvbW1h bmRTdGFydCwKIAlFVlRfRERMQ29tbWFuZEVuZCwKIAlFVlRfU1FMRHJvcCwKLQlFVlRfVGFibGVS ZXdyaXRlCisJRVZUX1RhYmxlUmV3cml0ZSwKKwlFVlRfVGFibGVJbml0V3JpdGUKIH0gRXZlbnRU cmlnZ2VyRXZlbnQ7CiAKIHR5cGVkZWYgc3RydWN0Ci0tIAoyLjcuMi53aW5kb3dzLjEKCg== --_005_OS0PR01MB5716009FDCCC0B50BCB14A99949D9OS0PR01MB5716jpnp_--