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 1qJB7i-0001cS-RL for pgsql-hackers@arkaria.postgresql.org; Tue, 11 Jul 2023 11:01:39 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1qJB7h-0007S9-PK for pgsql-hackers@arkaria.postgresql.org; Tue, 11 Jul 2023 11:01:37 +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 1qJB7g-0007Rw-HH for pgsql-hackers@lists.postgresql.org; Tue, 11 Jul 2023 11:01:37 +0000 Received: from esa17.fujitsucc.c3s2.iphmx.com ([216.71.158.34]) by makus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qJB7c-003FWV-AJ for pgsql-hackers@lists.postgresql.org; Tue, 11 Jul 2023 11:01:35 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=fujitsu.com; i=@fujitsu.com; q=dns/txt; s=fj1; t=1689073292; x=1720609292; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=rxlITkw0DeDPYOOqMu/Mf64Nq5uA1WTqJLcJPqIfdhI=; b=SRkqvYiilRFCud3dmMlOclNyF1ugnmxQTqL0+kQzahj9GhDRnp7wHRu2 qvUkknaEQSvNRPwLAsNF8aqP4cR4LO+Gqb+QzBOhbu3U7MJVspxF5/20w XQ31d38BM9my0Bt4OSAkcsB1ZLmXPITr7Qf7DlamU18ASt64ICYgd0bTH S/Z7aDyHHNdiXhP/AAOiOOyC9QUBOdlcguy4+vYWjFIPwO7dZbUEz/yWD +dD2d5S5iVZeU+bM1x5htiJ9xeeUkXq6WjXlFbBdaztWUVPI+NQeo/Kac rnzoyZuI60P+euLdZD/7AbshZ0/x890JyNaq6E9y0OPBycpgfNrPuKg33 Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10767"; a="89284740" X-IronPort-AV: E=Sophos;i="6.01,196,1684767600"; d="scan'208,223";a="89284740" 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; 11 Jul 2023 20:01:24 +0900 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Nhh6TL+3LSuNhRhaGjpZEtu6U6RVKb/VOZJbZXnyFLywU+AzMkxHxOM0caTJ6NdyvNN8f+I9j1DxCGsvj7rmVH8v/teCgP4rUE9TpvPl0G4/IJltsJxtRamIDR/YysmTvTGvqFCESENo9GvH0m0u99S7UZRQcadK+f0reptsJACfDhgXLwNSC1dJ+CeoBGsKU53DYWZv5hrpg3DdTh73UOoAYaY8MTOhc6pQELqoiIFqWRtBuB0iKmICx/hEu76QkgWQwPWjjVFWK5HDVFLj2c9jY+gf+ul3otSlmh5kRHDmwml/yfP1qR1vCnS26fUPPydpadhzJv4876PR/hsdLQ== 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=BdD4Rox7ML1sLXQAwF7c9jhop0Qn7G6POLvOsLHLjw4=; b=WBkofTcVFteXI9i53vltlcR6bzz1hSF6Z5SvOrdB+32Nh5pr7Eax4gJkHjxw2u97q+ioJm3klnpG5Kbwpwlml2sWFQW3i2eTjoyPQgjzLKdyZBFeDbGgCjXlDfbhtpYeExELJRUoN2YKOviAnOMjQjMH/q23JcjCDb5kh+r7MBouYpbLFVdnCj6BrAnyl2FuLMBWzYSK7yZeul5d8/725mj5xFJYvS5nK1WlH/zbRMxoPhVh+lo/4TRWK1WHdRWLnwjgALAvARZ+yo2GT8Wys4Or/xmE3iMjaczeDS00bumpnfWyEvzvkzskKDpUK2Ee2+BL9qR/sEX+Nk1YCwttwg== 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 OS3PR01MB9430.jpnprd01.prod.outlook.com (2603:1096:604:1cc::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6565.31; Tue, 11 Jul 2023 11:01:20 +0000 Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::bebc:3a69:7cc8:24bf]) by OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::bebc:3a69:7cc8:24bf%4]) with mapi id 15.20.6588.017; Tue, 11 Jul 2023 11:01:20 +0000 From: "Zhijie Hou (Fujitsu)" To: shveta malik , Amit Kapila CC: Michael Paquier , "Wei Wang (Fujitsu)" , "Yu Shi (Fujitsu)" , vignesh C , Ajin Cherian , Runqi Tian , Peter Smith , Tom Lane , li jie , Dilip Kumar , Alvaro Herrera , Masahiko Sawada , Japin Li , rajesh singarapu , PostgreSQL Hackers , Zheng Li Subject: RE: Support logical replication of DDLs Thread-Topic: Support logical replication of DDLs Thread-Index: AQHZa550vJuN3I2iPEORe4eokT+s7a8uzU1ggATPdwCAAFiUAIAAPa2AgAcrybCABVaUgIAFt/uAgAnrLACAAAkQAIABkB4AgARuagCACBiUgIAAEc4AgAeCpACACwWJAIADXfcAgAFwm4CABmgbgIABqnmAgALCugCAAHQ1gIAFnY8AgAH3/gCAAFveAIAAkHMAgAP3lYCABKbugIAEXEwAgAzD/4CAEYiUAA== Date: Tue, 11 Jul 2023 11:01:20 +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?NTBfQWN0aW9uSWQ9ZmIyZDVhM2ItYTZkOC00ZjkyLWJkOWItZTQwOWNlMzky?= =?utf-8?B?YjlhO01TSVBfTGFiZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRm?= =?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?ZWNlMDUwX1NldERhdGU9MjAyMy0wNy0xMVQxMDo1MToyMVo7TVNJUF9MYWJl?= =?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-traffictypediagnostic: OS0PR01MB5716:EE_|OS3PR01MB9430:EE_ x-ms-office365-filtering-correlation-id: 799f7a67-0720-4359-3d88-08db81fe2861 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: psSMuK0FY9X1LlGY4fVUzJ4BnoT4GW7ftIdKtzE7TMrV6NE+NRfGDHTnNKuY9fm89V//XPIlqY1cbAcYapfuBA4XFefC2+CJ86jlXJsy5ImsqV/Lda3Av+oZ3Z5Xi6R0wNgtNlZEPTev7+8kIOUEOPzLNi9eia0ahV4jxyh2Hbnlv0lf4e2QOd6IAHN4B0XIuwxq3sRu9XElHjTT2l43IjQi0Tp5xl8zrC+wSqsketRTdyqackcPwKUse4BXklVJSZ8cVdtvGgEv4qbdvXDi1pVULYE4ZLseJ7LEmdi1UqMJMnEEFeN844ZYDyWjxnHgN7uAfwYomWy+fC93qYGvsTzT1lJIg0CKGiCaXtASsm5A7XW8Z5aOu4oAMob58NZaMVPIIcYr1FIEk2jM6s+49ltvZUBKfjRatck9pFfp/94CcZQcVq9BPge0rDdbL+TasbMC6RDjPhSf74E4wheHGSzDLUxZ8QsVMPfM8v75BbFUuq9myXrerweU6SqTjS5G+2FRUUgyKL41p+F2c/bqwAympbWKKX2wE8j1GWgRMQCrmT3Pivi8zXl+cEWhw1BSFymYdQ166593ok/eVoBkgSfy47/J0GJRHF5u4PCrwqFYPJwF8tXhBcy9nD+iRzsQW1kqHp1NxjkIdTnnmMY/sh+Gira55jyNWOvO8HnJc+o= 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:(13230028)(4636009)(366004)(39860400002)(346002)(136003)(396003)(376002)(1590799018)(451199021)(71200400001)(1580799015)(966005)(54906003)(7696005)(316002)(110136005)(76116006)(122000001)(55016003)(38100700002)(38070700005)(478600001)(2906002)(66946007)(99936003)(66446008)(64756008)(66476007)(66556008)(85182001)(82960400001)(4326008)(83380400001)(186003)(8936002)(8676002)(5660300002)(52536014)(41300700001)(86362001)(7416002)(9686003)(6506007)(26005)(33656002)(21314003);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?QmU1MS9GbFg4UnV0UHJhZFRUL1lwdFpPOTlHaTlocWNoRm1HOVZYZmtuZkJy?= =?utf-8?B?MVZwRWlDZllUN0YwL3hiZjdrSTlXMXozTzhhdVRkTnhQK0wvSW5MVUhaU1lw?= =?utf-8?B?L1Nia3djeFB1Z0FINGRPWFZNRHMvV0lvWFdqR3NMQnZKWVdGWlVmTkpZaEh4?= =?utf-8?B?dWlMNkpYK3JsUk5ERlpEVE0vdFZpaEY4TUdFMDA3T1lVUGVmVmVldWllbmUr?= =?utf-8?B?b0FSUU95bk1lTzNxNDBMUmI0Q0t6RTZKbUZSbGh1RllxeXNJWWxlWitFWXBL?= =?utf-8?B?ME9EZFdlS0VlaDQzcEgyTDg5K3RMOHV0Y0xNamsyVC8vZk9wM3hBRDJ4ZmJF?= =?utf-8?B?MWdwWFNuRjYreXVWbWgyL1FjakRNd2RLWkUydVlWQ3VTQW1NMnphaXZEY2tq?= =?utf-8?B?VUNBbzNsdmdmUXpWbkZIdlBGcGtaT3lnZWFXMHJMMWsxWFQydXJoZWhUQnBV?= =?utf-8?B?djdhNEZnSDhSRERINmUrZWRTdjVXWHJzeTZNL2FZRXNscmZkRUlPMzZYRElu?= =?utf-8?B?YW1KUWw3ZmV5cFRzZ040SzJ1M3hmYURVQjd4VTZxeE9KU05BazBmNVJiMzJC?= =?utf-8?B?cXQ3dWY2WmQwWkM3UVQ2OXFhaEtKZjVqTGVuVFZ2Y1VHb1hwS0YvbDRJak9P?= =?utf-8?B?TGoyKzNLN3lRM0daVmxHUDZmYWRHTzdqYXdlOEFQZjVwekpIS1pVYVlsUFQ0?= =?utf-8?B?WTBDM21JdTNrUU5WR1FkbjRTWDJpR09udVdOWHBYYWI5SUJIU0dIamVqOTBl?= =?utf-8?B?Mkxkd0kwN0hEVnJTTkYzZ1FtbHpLdFhSL09sTDVyQkRCSmt1OSszR09GVURJ?= =?utf-8?B?dENGMkVXMkRGelJ4L3E2T250ZUZoZWZ1emFoeXROdGg1UjhmWmluMlArWmRs?= =?utf-8?B?bXpFZU41RExFZ0NicG9MVCtSdUt0ZEpuR3VaM2RVcnJRdUJONHZSdEtwVW1W?= =?utf-8?B?N1VmUmV2OHVZUEJVU2ZJRUJRdFlFMDg1YUJla0V4OGNPR1BuSWoreVlHd2gv?= =?utf-8?B?U2ZFSmJpU09sbVJ0SWd4U0JtRkxGTWIwYlhrSGM5dkwzSnpMTHJ4VDVZVnA1?= =?utf-8?B?T2QrK0FpTlpSNjJIbjltK1NnbzdnMnFTZFMxd2QrdHMyZ1BCbXJBVXRKRkJY?= =?utf-8?B?Qlp5K0hsV0FqeFJmaUo0a3dUTWwyZWN1MFNnSE5KY3hvVXRZcFZIb09vZHlk?= =?utf-8?B?OC9rMTViYnhGMjFlQXVPUERhQ2tWVlNaZmRKYTFTUmt1dFp6bURFNkJibjlQ?= =?utf-8?B?OG9ldGR0VnplMlJ3L05zOWZrbTYreDhxWFh6Y1hCcHM2UktEa1NlZFo5bmkr?= =?utf-8?B?MFVwK1laTXRIVXB2NDh6dVQ3OTEyT3Q5UG01dForSCtsMnIyWGp3WTl4MVRp?= =?utf-8?B?UGI1ZytTN09pNUpzTnhrZWF0V1VVWTdEQVV4WmlOMEZYbUZydzY3emx0aEJW?= =?utf-8?B?K1hvL3NsbXJubXJ6a1U1aFprNStzNU9YM0ZuQ3VtemIzdXFhNFZPR3ZydFdz?= =?utf-8?B?ajcrb01aOXg0V3FDV29keHhVb0pPamswcGhWeCs0SHdzRFNLeTZPRUNSeitZ?= =?utf-8?B?aXpSZm5wU3duYWkzNFVzSjhaTUsxVWNnK245TjQrQkcraVkvM1lBRmxXc1Zz?= =?utf-8?B?K1p0b1Q1c2VVeWsrTFM2OHl6WXkyUXRyRkpaZFFzWVhMSWFSb0ppaFhlRm9Q?= =?utf-8?B?akE1SGl2TFBXVnFlWXFETWU5dlV0WEZVTzh0SVRFZ09vVUtUemxRYzlWaG94?= =?utf-8?B?WjVWODc0Y2ozamt1R1dmSGRocmk4SjFraHcvUUErRklTSXIvS1FZRnNsdzVJ?= =?utf-8?B?T3dXSm9BN1h0amdXWm0zWURnTmM1M3c4M2RwYnJpTURYdVd1UEpsM0xTbGwv?= =?utf-8?B?QXN3YTQwR3k1NkU4U0ZjcDA1RHpwR0E2S0MxVUh6NitNZEpkN1ExSWpkMlZx?= =?utf-8?B?R0JCYlVrbFZTTEJiLzIyeXZIUS9ONERKaCtuMUJsWEJsTEpLUnFPV0xFaW83?= =?utf-8?B?R3FOYWQ3Q1VFTENBY1c3NzFETjZkcXE2V2s5NzZZY0Z3NkJCWnFPL2UxR1l4?= =?utf-8?B?TzM1cGxrUHZ5eFZvdDRxTlkvZHg2eE5Od1NTMGdtNmFMSVBtQlB3TTNjSHNQ?= =?utf-8?Q?fgLyqzbYtHipTsz//CZ2ugHfq?= Content-Type: multipart/mixed; boundary="_005_OS0PR01MB5716A47D23EFAF988475D4A99431AOS0PR01MB5716jpnp_" MIME-Version: 1.0 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: =?utf-8?B?UmtyaDNRWGxUNDA5clRjczA0UHZ5UG5IRjhPNUJSbk5oV2loSXVXbmp6Y3ZN?= =?utf-8?B?TG9jOFYwREkvbldvcCs0UEw5ZW1pZ3k1dFU0TytIVzVKdmgvZE9MMS9CQ1l3?= =?utf-8?B?R3l2UEVQMDRxMXNpd0hyL2R3WXo3OStFcXNkVERNVGMwSzZqdWFaYXgzWlpp?= =?utf-8?B?OVlMcGs1dElxN0FGSmdTb3dOZzJCaGFEd3ltNnpZWHl4aXl4K2psUzIzNSts?= =?utf-8?B?RDlyMkJWZDI5cnQ0cjc1ZzVxSERFeGI5aEJMRGJmWVZuU2UzK1JSTDZWelZt?= =?utf-8?B?azBTVVJJZk5BS1ZZSTJtVGpKUlRJWkxseEt3bVVKNFFmaCtwdjVCNk1Lalht?= =?utf-8?B?V3ZHZENxdWtYd3FQVGF3UXRZR2RtYkZPR0ZybFNrKytRNVZjc2xoQ3FlSEZL?= =?utf-8?B?OUJ2amdGSktSbjdQTGNWak95Wi9vbUJDMHo4M0xPaVhhUFE3R0FneXVIUFgw?= =?utf-8?B?SjRTTzdFZ0loaG4rNE5aU2lpVHZBeG1adDFRWk5xY0lHeUJralRHaXp6YTdx?= =?utf-8?B?Q0NTV1ppL2FuWXZIUVAvYVlBUDNiQVdSa0tEUmVOQWtzcFRMZkk2WFlIVWpv?= =?utf-8?B?dW1TOEdocGJKWmY5UEtVSnRiT2dJVWp1Ymx2ZVlBeVdFTzhzb1lIWng0SVpO?= =?utf-8?B?ME1sUndIdWxFRHprWExUeEtQMXZQbG1GT21DMmpVa2EwVWV2djhTNEU0R2o2?= =?utf-8?B?ZEJQMks1K1FYYWwydDNUVmhPcHppZExYelo0NC8vcmttWGpYSUJPaCsybmtC?= =?utf-8?B?M1MvaFU2NzNxTEI3cGkxdFRxZ3pWazF5Y0dLRFdXLzdaVm84K1V0ZFZocGZt?= =?utf-8?B?NmZ4UCtwbURrQ3FxbGVvbW8zRmRXb2thVlNDVHRHaW5qQkMzcnpWSVUwZzZR?= =?utf-8?B?ZWFKcFB3Y3hkTUNzUWdaT0NrOVppTHlabjdVanlEc2VQNDVsL0llWWJYc1c5?= =?utf-8?B?MWl3MG1DbVNxTy9hcE5uanBCc1MwSnZtd1ltYjZVL3AyUTlJVVVJaWFUTEM0?= =?utf-8?B?ZG1FcU9UT1VqVVhhUlRyRW9QRjc3MTVWOWtkMTRIZHlTK0VlUG9Rei9XSVFa?= =?utf-8?B?bEFDWi9Db0pmNmpwY3BicHM5K005TWVaNGl2VjZBNXhuRTMwTDYxK0ltNjNO?= =?utf-8?B?YWJqd2ZpS0NZZVlYNlpDa2h3UzlDSzFRVUdoc1AyV2QzZmlRRk1lWmMrRjlC?= =?utf-8?B?UEJUT0lKc2l6b2xRZCt3SU5PY3NYRVVLWlRKd2tFdzlOREJ0K1NUcVllVFd5?= =?utf-8?B?N3huMVpQTjhEWTcxTHovTVBxdGVJQlFtMEt0SVJyOHBmcjRlUT09?= 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: 799f7a67-0720-4359-3d88-08db81fe2861 X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Jul 2023 11:01:20.1875 (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: sI0sftV3aR9MvKhUFE/MtTOfZeMtqt4D0dc4scJ94LpMAxEYz4tXaDwurXYDakzX5czPlOBMqiLhOx+EC0Zf0g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS3PR01MB9430 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_005_OS0PR01MB5716A47D23EFAF988475D4A99431AOS0PR01MB5716jpnp_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGksDQoNCldlIGhhdmUgYmVlbiByZXNlYXJjaGluZyBob3cgdG8gY3JlYXRlIGEgdGVzdCB0aGF0 IGRldGVjdHMgZmFpbHVyZXMgcmVzdWx0aW5nDQpmcm9tIGZ1dHVyZSBzeW50YXggY2hhbmdlcywg d2hlcmUgdGhlIGRlcGFyc2VyIGZhaWxzIHRvIHVwZGF0ZSBwcm9wZXJseS4NCg0KVGhlIGJhc2lj IGlkZWEgY29tZXMgZnJvbSB3aGF0IFJvYmVydCBIYWFzIHN1Z2dlc3RlZCBpbiBbMV06IHdoZW4g cnVubmluZyB0aGUNCnJlZ3Jlc3Npb24gdGVzdCh0ZXN0cyBpbiBwYXJhbGxlbF9zY2hlZHVsZSks IHdlIHJlcGxhY2UgdGhlIGV4ZWN1dGluZyBkZGwNCnN0YXRlbWVudCB3aXRoIHRoZSBpdHMgZGVw YXJzZWQgdmVyc2lvbiBhbmQgZXhlY3V0ZSB0aGUgZGVwYXJzZWQgc3RhdGVtZW50LCBzbw0KdGhh dCB3ZSBjYW4gcnVuIGFsbCB0aGUgcmVncmVzc2lvbiB3aXRoIHRoZSBkZXBhcnNlZCBzdGF0ZW1l bnQgYW5kIGNhbiBleHBlY3QNCnRoZSBvdXRwdXQgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIGV4aXN0 aW5nIGV4cGVjdGVkLyoub3V0LiBBcyBkZXZlbG9wZXJzDQp0eXBpY2FsbHkgYWRkIG5ldyByZWdy ZXNzaW9uIHRlc3RzIHRvIHRlc3QgbmV3IHN5bnRheCwgc28gd2UgZXhwZWN0IHRoaXMgdGVzdA0K Y2FuIGF1dG9tYXRpY2FsbHkgaWRlbnRpZnkgbW9zdCBvZiB0aGUgbmV3IHN5bnRheCBjaGFuZ2Vz Lg0KDQpPbmUgdGhpbmcgdG8gbm90ZSBpcyB0aGF0IHdoZW4gZW50ZXJpbmcgdGhlIGV2ZW50IHRy aWdnZXIod2hlcmUgdGhlIGRlcGFyc2luZw0KaGFwcGVuKSwgdGhlIGRkbCBoYXZlIGFscmVhZHkg YmVlbiBleGVjdXRlZC4gU28gd2UgbmVlZCB0byBnZXQgdGhlIGRlcGFyc2VkDQpzdGF0ZW1lbnQg YmVmb3JlIHRoZSBleGVjdXRpb24gYW5kIHJlcGxhY2UgdGhlIGN1cnJlbnQgc3RhdGVtZW50IHdp dGggaXQuIFRvDQphY2hpZXZlIHRoaXMsIHRoZSBjdXJyZW50IGFwcHJvYWNoIGlzIHRvIGNyZWF0 ZSBhbm90aGVyIGRhdGFiYXNlIHdpdGggZGVwYXJzZXINCnRyaWdnZXIgYW5kIGluIHRoZSBQcm9j ZXNzVXRpbGl0eSBob29rKGUuZy4gdGRlcGFyc2VyX1Byb2Nlc3NVdGlsaXR5IGluIHRoZQ0KcGF0 Y2gpIHdlIHJlZGlyZWN0IHRoZSBsb2NhbCBzdGF0ZW1lbnQgdG8gdGhhdCByZW1vdGUgZGF0YWJh c2UsIHRoZW4gdGhlDQpzdGF0bWVudCB3aWxsIGJlIGRlcGFyc2VkIGFuZCBzdG9yZWQgc29tZXdo ZXJlLCB3ZSBjYW4gcXVlcnkgdGhlIHJlbW90ZQ0KZGF0YWJhc2UgdG8gZ2V0IHRoZSBkZXBhcnNl ZCBzdGF0ZW1lbnQgYW5kIHVzZSBpdCB0byByZXBsYWNlIHRoZSBvcmlnaW5hbA0Kc3RhdG1lbnQu DQoNClRoZSBwcm9jZXNzIGxvb2tzIGxpa2U6DQoxKSBjcmVhdGUgYW5vdGhlciBkYXRhYmFzZSBh bmQgZGVwYXJzZXIgZXZlbnQgdHJpZ2dlciBpbiBpdCBiZWZvcmUgcnVubmluZyB0aGUgcmVncmVz c2lvbiB0ZXN0LiANCjIpIHJ1biB0aGUgcmVncmVzc2lvbiB0ZXN0ICh0aGUgc3RhdGVtZW50IHdp bGwgYmUgcmVkaXJlY3QgdG8gdGhlIHJlbW90ZSBkYXRhYmFzZSBhbmQgZ2V0IHRoZSBkZXBhcnNl ZCBzdGF0ZW1lbnQpDQozKSBjb21wYXJlIHRoZSBvdXRwdXQgZmlsZSB3aXRoIHRoZSBleHBlY3Rl ZCBvbmVzLg0KDQpBdHRhY2ggdGhlIFBPQyBwYXRjaCgwMDA0KSBmb3IgdGhpcyBhcHByb2FjaC4g Tm90ZSB0aGF0LCB0aGUgbmV3IHRlc3QgbW9kdWxlIG9ubHkNCnRlc3QgdGVzdF9zZXR1cC5zcWws IGNyZWF0ZV9pbmRleC5zcWwsIGNyZWF0ZV90YWJsZS5zcWwgYW5kIGFsdGVyX3RhYmxlLnNxbCBh cw0Kd2Ugb25seSBzdXBwb3J0IGRlcGFyc2luZyBUQUJMRSByZWxhdGVkIGNvbW1hbmQgZm9yIG5v dy4gQW5kIHRoZSBjdXJyZW50IHRlc3QNCmNhbm5vdCBwYXNzIGJlY2F1c2Ugb2Ygc29tZSBidWdz IGluIGRlcGFyc2VyLCB3ZSB3aWxsIGZpeCB0aGVzZSBidWdzIHNvb24uDQoNCg0KVE8gSU1QUk9W RToNCg0KMS4gVGhlIGN1cnJlbnQgYXBwcm9hY2ggbmVlZHMgdG8gaGFuZGxlIHRoZSBFUlJPUnMs IFdBUk5JTkdzLCBhbmQgTk9USUNFcyBmcm9tDQp0aGUgcmVtb3RlIGRhdGFiYXNlLiBDdXJyZW50 bHkgaXQgd2lsbCBkaXJlY3RseSByZXRocm93IGFueSBFUlJPUnMgZW5jb3VudGVyZWQNCmluIHRo ZSByZW1vdGUgZGF0YWJhc2UuIEhvd2V2ZXIsIGZvciBXQVJOSU5HcyBhbmQgTk9USUNFcywgd2Ug d2lsbCBvbmx5IHJldGhyb3cNCnRoZW0gYWxvbmcgd2l0aCB0aGUgRVJST1JzLiBUaGlzIGlzIGRv bmUgdG8gcHJldmVudCBkdXBsaWNhdGUgbWVzc2FnZXMgaW4gdGhlDQpvdXRwdXQgZmlsZSBkdXJp bmcgbG9jYWwgc3RhdGVtZW50IGV4ZWN1dGlvbiwgd2hpY2ggd291bGQgYmUgaW5jb25zaXN0ZW50 IHdpdGgNCnRoZSBleGlzdGluZyBleHBlY3RlZCBvdXRwdXQuIE5vdGUgdGhhdCB0aGlzIGFwcHJv YWNoIG1heSBwb3RlbnRpYWxseSBtaXNzIHNvbWUNCmJ1Z3MsIGFzIHRoZXJlIGNvdWxkIGJlIGFk ZGl0aW9uYWwgV0FSTklOR3Mgb3IgTk9USUNFcyBjYXVzZWQgYnkgdGhlIGRlcGFyc2VyDQppbiB0 aGUgcmVtb3RlIGRhdGFiYXNlLg0KDQoyLiBUaGUgdmFyaWFibGUgcmVmZXJlbmNlIGFuZCBhc3Np Z25tZW50ICh4eHggL2dzZXQgYW5kIHNlbGVjdCA6dmFyX25hbWUpIHdpbGwNCm5vdCBiZSBzZW50 IHRvIHRoZSBzZXJ2ZXIob25seSB0aGUgcXVhbGlmaWVkIHZhbHVlIHdpbGwgYmUgc2VudCksIGJ1 dCBpdCdzDQpwb3NzaWJsZSB0aGUgdmFyaWFibGUgaW4gYW5vdGhlciBzZXNzaW9uIHNob3VsZCBi ZSBzZXQgdG8gYSBkaWZmZXJlbnQgdmFsdWUsIHNvDQp0aGlzIGNhbiBjYXVzZSBpbmNvbnNpc3Rl bnQgb3V0cHV0Lg0KDQozIC5DUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIHdpbGwgY3JlYXRlIGFu IGludmFsaWQgaW5kZXggaW50ZXJuYWxseSBldmVuIGlmIGl0DQpyZXBvcnRzIGFuIEVSUk9SIGxh dGVyLiBCdXQgc2luY2Ugd2Ugd2lsbCBkaXJlY3RseSByZXRocm93IHRoZSByZW1vdGUgRVJST1Ig aW4NCnRoZSBtYWluIGRhdGFiYXNlLCB3ZSB3b24ndCBleGVjdXRlIHRoZSAiQ1JFQVRFIElOREVY IENPTkNVUlJFTlRMWSIgaW4gdGhlIG1haW4NCmRhdGFiYXNlLiBUaGlzIG1lYW5zIHRoYXQgd2Ug Y2Fubm90IHNlZSB0aGUgaW52YWxpZCBpbmRleCBpbiB0aGUgbWFpbiBkYXRhYmFzZS4NCg0KVG8g aW1wcm92ZSB0aGUgYWJvdmUgcG9pbnRzLCBhbm90aGVyIHZhcmlldHkgaXM6IHJ1biB0aGUgcmVn cmVzc2lvbiB0ZXN0IHR3aWNlLg0KVGhlIGZpcnN0IHJ1biBpcyBzb2xlbHkgaW50ZW5kZWQgdG8g Y29sbGVjdCBhbGwgdGhlIGRlcGFyc2VkIHN0YXRlbWVudHMuIFdlIGNhbg0KZHVtcCB0aGVzZSBz dGF0ZW1lbnRzIGZyb20gdGhlIGRhdGFiYXNlIGFuZCB0aGVuIHJlbG9hZCB0aGVtIGluIHRoZSBz ZWNvbmQNCnJlZ3Jlc3Npb24gcnVuLiBUaGlzIGFsbG93cyB1cyB0byB1dGlsaXplIHRoZSBkZXBh cnNlZCBzdGF0ZW1lbnRzIHRvIHJlcGxhY2UNCnRoZSBsb2NhbCBzdGF0ZW1lbnRzIGluIHRoZSBz ZWNvbmQgcmVncmVzc2lvbiBydW4uIFRoaXMgYXBwcm9hY2ggZG9lcyBub3QgbmVlZA0KdG8gaGFu ZGxlIGFueSByZW1vdGUgbWVzc2FnZXMgYW5kIGNsaWVudCB2YXJpYWJsZSBzdHVmZiBkdXJpbmcg ZXhlY3V0aW9uLA0KYWx0aG91Z2ggaXQgY291bGQgdGFrZSBtb3JlIHRpbWUgdG8gZmluc2ggdGhl IHRlc3QuDQoNClsxXSBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL0NBJTJC VGdtb1olM0R2WnJpSk14TGtxaV9WMGpnNGs0TEVBUG13VVNDNlJXWFM1TXF1WFVKTkElNDBtYWls LmdtYWlsLmNvbQ0KDQpCZXN0IFJlZ2FyZHMsDQpIb3UgemoNCg== --_005_OS0PR01MB5716A47D23EFAF988475D4A99431AOS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="0004-test-deparser-module.patch" Content-Description: 0004-test-deparser-module.patch Content-Disposition: attachment; filename="0004-test-deparser-module.patch"; size=30221; creation-date="Tue, 11 Jul 2023 10:51:27 GMT"; modification-date="Tue, 11 Jul 2023 11:01:16 GMT" Content-Transfer-Encoding: base64 RnJvbSBhNTMwZjVlZjljMzY5YWI2NjMxYjhkMmM4NTUzOTMxODBkYTE4OTVmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIb3UgWmhpamllIDxob3V6ai5mbnN0QGNuLmZ1aml0c3UuY29t PgpEYXRlOiBUdWUsIDQgSnVsIDIwMjMgMTY6MTg6MzMgKzA4MDAKU3ViamVjdDogW1BBVENIXSB0 ZXN0IGRlcGFyc2VyIG1vZHVsZQoKV2hlbiBydW5uaW5nIHRoZSByZWdyZXNzaW9uIHRlc3QodGVz dHMgaW4gcGFyYWxsZWxfc2NoZWR1bGUpLCB3ZSByZXBsYWNlIHRoZQpleGVjdXRpbmcgZGRsIHN0 YXRlbWVudCB3aXRoIHRoZSBpdHMgZGVwYXJzZWQgdmVyc2lvbiBhbmQgZXhlY3V0ZSB0aGUgZGVw YXJzZWQKc3RhdGVtZW50LCBzbyB0aGF0IHdlIGNhbiBydW4gYWxsIHRoZSByZWdyZXNzaW9uIHdp dGggdGhlIGRlcGFyc2VkIHN0YXRlbWVudAphbmQgY2FuIGV4cGVjdCB0aGUgb3V0cHV0IHRvIGJl IHRoZSBzYW1lIGFzIHRoZSBleGlzdGluZyBleHBlY3RlZC8qLm91dC4gQXMKZGV2ZWxvcGVycyB0 eXBpY2FsbHkgYWRkIG5ldyByZWdyZXNzaW9uIHRlc3RzIHRvIHRlc3QgbmV3IHN5bnRheCwgc28g d2UgZXhwZWN0CnRoaXMgdGVzdCBjYW4gYXV0b21hdGljYWxseSBpZGVudGlmeSBhbnkgbmV3IHN5 bnRheCBjaGFuZ2VzLgoKVG8gZ2V0IHRoZSBkZXBhcnNlZCBzdGF0ZW1lbnQgYmVmb3JlIHRoZSBl eGVjdXRpb24gYW5kIHJlcGxhY2UgdGhlIGN1cnJlbnQKc3RhdGVtZW50IHdpdGggaXQsIHRoZSBj dXJyZW50IGFwcHJvYWNoIGlzIHRvIGNyZWF0ZSBhbm90aGVyIGRhdGFiYXNlIHdpdGgKZGVwYXJz ZXIgdHJpZ2dlciBhbmQgaW4gdGhlIGhvb2sgd2UgcmVkaXJlY3QgdGhlIGxvY2FsIHN0YXRlbWVu dCB0byB0aGF0IHJlbW90ZQpkYXRhYmFzZSwgdGhlbiB0aGUgc3RhdG1lbnQgd2lsbCBiZSBkZXBh cnNlZCBhbmQgc3RvcmVkIHNvbWV3aGVyZSwgd2UgY2FuIHF1ZXJ5CnRoZSByZW1vdGUgZGF0YWJh c2UgdG8gZ2V0IHRoZSBkZXBhcnNlZCBzdGF0ZW1lbnQgYW5kIHVzZSBpdCB0byByZXBsYWNlIHRo ZQpvcmlnaW5hbCBzdGF0bWVudC4KClRPIElNUFJPVkU6CgoxLiBUaGUgY3VycmVudCBhcHByb2Fj aCBuZWVkcyB0byBoYW5kbGUgdGhlIEVSUk9ScywgV0FSTklOR3MsIGFuZCBOT1RJQ0VzIGZyb20K dGhlIHJlbW90ZSBkYXRhYmFzZS4gQ3VycmVudGx5IGl0IHdpbGwgZGlyZWN0bHkgcmV0aHJvdyBh bnkgRVJST1JzIGVuY291bnRlcmVkCmluIHRoZSByZW1vdGUgZGF0YWJhc2UuIEhvd2V2ZXIsIGZv ciBXQVJOSU5HcyBhbmQgTk9USUNFcywgd2Ugd2lsbCBvbmx5IHJldGhyb3cKdGhlbSBhbG9uZyB3 aXRoIHRoZSBFUlJPUnMuIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IGR1cGxpY2F0ZSBtZXNzYWdl cyBpbiB0aGUKb3V0cHV0IGZpbGUgZHVyaW5nIGxvY2FsIHN0YXRlbWVudCBleGVjdXRpb24sIHdo aWNoIHdvdWxkIGJlIGluY29uc2lzdGVudCB3aXRoCnRoZSBleGlzdGluZyBleHBlY3RlZCBvdXRw dXQuIE5vdGUgdGhhdCB0aGlzIGFwcHJvYWNoIG1heSBwb3RlbnRpYWxseSBtaXNzIHNvbWUKYnVn cywgYXMgdGhlcmUgY291bGQgYmUgYWRkaXRpb25hbCBXQVJOSU5HcyBvciBOT1RJQ0VzIGNhdXNl ZCBieSB0aGUgZGVwYXJzZXIKaW4gdGhlIHJlbW90ZSBkYXRhYmFzZS4KCjIuIFRoZSB2YXJpYWJs ZSByZWZlcmVuY2UgYW5kIGFzc2lnbm1lbnQgKHh4eCAvZ3NldCBhbmQgc2VsZWN0IDp2YXJfbmFt ZSkgd2lsbApub3QgYmUgc2VudCB0byB0aGUgc2VydmVyKG9ubHkgdGhlIHF1YWxpZmllZCB2YWx1 ZSB3aWxsIGJlIHNlbnQpLCBidXQgaXQncwpwb3NzaWJsZSB0aGUgdmFyaWFibGUgaW4gYW5vdGhl ciBzZXNzaW9uIHNob3VsZCBiZSBzZXQgdG8gYSBkaWZmZXJlbnQgdmFsdWUsIHNvCnRoaXMgY2Fu IGNhdXNlIGluY29uc2lzdGVudCBvdXRwdXQuCgozIC5DUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZ IHdpbGwgY3JlYXRlIGFuIGludmFsaWQgaW5kZXggaW50ZXJuYWxseSBldmVuIGlmIGl0CnJlcG9y dHMgYW4gRVJST1IgbGF0ZXIuIEJ1dCBzaW5jZSB3ZSB3aWxsIGRpcmVjdGx5IHJldGhyb3cgdGhl IHJlbW90ZSBFUlJPUiBpbgp0aGUgbWFpbiBkYXRhYmFzZSwgd2Ugd29uJ3QgZXhlY3V0ZSB0aGUg IkNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkiIGluIHRoZSBtYWluCmRhdGFiYXNlLiBUaGlzIG1l YW5zIHRoYXQgd2UgY2Fubm90IHNlZSB0aGUgaW52YWxpZCBpbmRleCBpbiB0aGUgbWFpbiBkYXRh YmFzZS4KClRvIGltcHJvdmUgdGhlIGFib3ZlIHBvaW50cywgYW5vdGhlciB2YXJpZXR5IGlzOiBy dW4gdGhlIHJlZ3Jlc3Npb24gdGVzdCB0d2ljZS4KVGhlIGZpcnN0IHJ1biBpcyBzb2xlbHkgaW50 ZW5kZWQgdG8gY29sbGVjdCBhbGwgdGhlIGRlcGFyc2VkIHN0YXRlbWVudHMuIFdlIGNhbgpkdW1w IHRoZXNlIHN0YXRlbWVudHMgZnJvbSB0aGUgZGF0YWJhc2UgYW5kIHRoZW4gcmVsb2FkIHRoZW0g aW4gdGhlIHNlY29uZApyZWdyZXNzaW9uIHJ1bi4gVGhpcyBhbGxvd3MgdXMgdG8gdXRpbGl6ZSB0 aGUgZGVwYXJzZWQgc3RhdGVtZW50cyB0byByZXBsYWNlCnRoZSBsb2NhbCBzdGF0ZW1lbnRzIGlu IHRoZSBzZWNvbmQgcmVncmVzc2lvbiBydW4uIFRoaXMgYXBwcm9hY2ggZG9lcyBub3QgbmVlZAp0 byBoYW5kbGUgYW55IHJlbW90ZSBtZXNzYWdlcyBhbmQgY2xpZW50IHZhcmlhYmxlIHN0dWZmIGR1 cmluZyBleGVjdXRpb24sCmFsdGhvdWdoIGl0IGNvdWxkIHRha2UgbW9yZSB0aW1lIHRvIGZpbnNo IHRoZSB0ZXN0LgoKCi0tLQogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RlcGFyc2VyL01ha2VmaWxl ICAgICAgIHwgIDQ2ICsrCiAuLi4vdGVzdF9kZXBhcnNlci9leHBlY3RlZC90ZXN0X2RlcGFyc2Vy Lm91dCAgfCAgNTEgKysKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZXBhcnNlci9tZXNvbi5idWls ZCAgICB8ICAyOSArCiAuLi4vdGVzdF9kZXBhcnNlci9zcWwvdGVzdF9kZXBhcnNlci5zcWwgICAg ICAgfCAgNTUgKysKIC4uLi90ZXN0X2RlcGFyc2VyL3Rlc3RfZGVwYXJzZXItLTEuMC5zcWwgICAg ICB8ICAgNSArCiAuLi4vbW9kdWxlcy90ZXN0X2RlcGFyc2VyL3Rlc3RfZGVwYXJzZXIuYyAgICAg fCA2NTUgKysrKysrKysrKysrKysrKysrCiAuLi4vbW9kdWxlcy90ZXN0X2RlcGFyc2VyL3Rlc3Rf ZGVwYXJzZXIuY29uZiAgfCAgIDEgKwogLi4uL3Rlc3RfZGVwYXJzZXIvdGVzdF9kZXBhcnNlci5j b250cm9sICAgICAgIHwgICA0ICsKIDggZmlsZXMgY2hhbmdlZCwgODQ2IGluc2VydGlvbnMoKykK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGVwYXJzZXIvTWFrZWZp bGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGVwYXJzZXIvZXhw ZWN0ZWQvdGVzdF9kZXBhcnNlci5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfZGVwYXJzZXIvbWVzb24uYnVpbGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVz dC9tb2R1bGVzL3Rlc3RfZGVwYXJzZXIvc3FsL3Rlc3RfZGVwYXJzZXIuc3FsCiBjcmVhdGUgbW9k ZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RlcGFyc2VyL3Rlc3RfZGVwYXJzZXItLTEu MC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGVwYXJzZXIv dGVzdF9kZXBhcnNlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2RlcGFyc2VyL3Rlc3RfZGVwYXJzZXIuY29uZgogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L21vZHVsZXMvdGVzdF9kZXBhcnNlci90ZXN0X2RlcGFyc2VyLmNvbnRyb2wKCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGVwYXJzZXIvTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfZGVwYXJzZXIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uOTQ0Njg2YzZlMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9kZXBhcnNlci9NYWtlZmlsZQpAQCAtMCwwICsxLDQ2IEBACisjIHNyYy90ZXN0L21vZHVs ZXMvdGVzdF9kZXBhcnNlci9NYWtlZmlsZQorCitNT0RVTEVTID0gdGVzdF9kZXBhcnNlcgorUEdG SUxFREVTQyA9ICJ0ZXN0X2RlcGFyc2VyIC0gcmVncmVzc2lvbiB0ZXN0aW5nIGZvciBEREwgZGVw YXJzaW5nIgorCitFWFRFTlNJT04gPSB0ZXN0X2RlcGFyc2VyCitEQVRBID0gdGVzdF9kZXBhcnNl ci0tMS4wLnNxbAorCitNT0RVTEVfYmlnID0gdGVzdF9kZXBhcnNlcgorT0JKUyA9IFwKKwkkKFdJ TjMyUkVTKSBcCisJdGVzdF9kZXBhcnNlci5vCisKK1BHX0NQUEZMQUdTID0gLUkkKGxpYnBxX3Ny Y2RpcikKK1NITElCX0xJTktfSU5URVJOQUwgPSAkKGxpYnBxKQorCitpZmRlZiBVU0VfUEdYUwor UEdfQ09ORklHID0gcGdfY29uZmlnCitQR1hTIDo9ICQoc2hlbGwgJChQR19DT05GSUcpIC0tcGd4 cykKK2luY2x1ZGUgJChQR1hTKQorZWxzZQorc3ViZGlyID0gc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2RlcGFyc2VyCit0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLi8uLgoraW5jbHVkZSAkKHRvcF9idWls ZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbnRyaWIv Y29udHJpYi1nbG9iYWwubWsKK2VuZGlmCisKK1JFR1JFU1NfT1BUUyArPSAtLWxvYWQtZXh0ZW5z aW9uPXRlc3RfZGVwYXJzZXIgLS1kbHBhdGg9JCh0b3BfYnVpbGRkaXIpL3NyYy90ZXN0L3JlZ3Jl c3MgXAorCQktLWlucHV0ZGlyPSQodG9wX3NyY2Rpcikvc3JjL3Rlc3QvcmVncmVzcyBcCisJCS0t aG9zdD1sb2NhbGhvc3QKKworY2hlY2s6IGFsbCBkZXBhcnNlX3JlZ3Jlc3Nfc2NoZWR1bGUKKwkk KHBnX3JlZ3Jlc3NfY2hlY2spICQoUkVHUkVTU19PUFRTKSAtLXNjaGVkdWxlPWRlcGFyc2VfcmVn cmVzc19zY2hlZHVsZQorCitkZXBhcnNlX3JlZ3Jlc3Nfc2NoZWR1bGU6CisJZWNobyAidGVzdDog dGVzdF9kZXBhcnNlciIgPiAkQAorCWVjaG8gInRlc3Q6IHRlc3Rfc2V0dXAiID4+ICRACisJZWNo byAidGVzdDogY3JlYXRlX2luZGV4IiA+PiAkQAorCWVjaG8gInRlc3Q6IGNyZWF0ZV90YWJsZSIg Pj4gJEAKKwllY2hvICJ0ZXN0OiBhbHRlcl90YWJsZSIgPj4gJEAKKwkjY2F0ICQodG9wX3NyY2Rp cikvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSA+PiAkQAorCitkZXBhcnNlX2Ns ZWFuOiBjbGVhbgorCXJtIC1mICQoT0JKUykKKwlybSAtcmYgJChwZ19yZWdyZXNzX2NsZWFuX2Zp bGVzKQorCXJtIC1mIGRlcGFyc2VfcmVncmVzc19zY2hlZHVsZQpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2RlcGFyc2VyL2V4cGVjdGVkL3Rlc3RfZGVwYXJzZXIub3V0IGIvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2RlcGFyc2VyL2V4cGVjdGVkL3Rlc3RfZGVwYXJzZXIub3V0Cm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjIyZWE2YTc5ZmQKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGVwYXJzZXIvZXhwZWN0ZWQvdGVzdF9k ZXBhcnNlci5vdXQKQEAgLTAsMCArMSw1MSBAQAorXHNldCBwcmV2ZGIgOkRCTkFNRQorQ1JFQVRF IERBVEFCQVNFIGRlcGFyc2VyX3JlZ3Jlc3M7CitcYyBkZXBhcnNlcl9yZWdyZXNzOworQ1JFQVRF IFRBQkxFIHB1YmxpYy5kZXBhcnNlX3Rlc3RfY29tbWFuZHMoCisgdGVzdF9uYW1lIHRleHQsCisg YmFja2VuZF9pZCBpbnQsCisgYmFja2VuZF9zdGFydCB0aW1lc3RhbXB0eiwKKyBsc24gcGdfbHNu LAorIG9yZCBpbnRlZ2VyLAorIGNvbW1hbmQgVEVYVAorKTsKK0NSRUFURSBPUiBSRVBMQUNFIEZV TkNUSU9OIHB1YmxpYy5kZXBhcnNlX3Rlc3RfZGRsX2NvbW1hbmRfZW5kKCkKKyAgUkVUVVJOUyBl dmVudF90cmlnZ2VyCisgIFNFQ1VSSVRZIERFRklORVIKKyAgTEFOR1VBR0UgcGxwZ3NxbAorQVMg JGZuJAorQkVHSU4KKwlCRUdJTgorCQlJTlNFUlQgSU5UTyBwdWJsaWMuZGVwYXJzZV90ZXN0X2Nv bW1hbmRzCisJCSAgICAgICAgICAgICh0ZXN0X25hbWUsIGJhY2tlbmRfaWQsIGJhY2tlbmRfc3Rh cnQsIGNvbW1hbmQsIG9yZCwgbHNuKQorCQlTRUxFQ1QgY3VycmVudF9zZXR0aW5nKCdhcHBsaWNh dGlvbl9uYW1lJyksCisJCWlkLCBwZ19zdGF0X2dldF9iYWNrZW5kX3N0YXJ0KGlkKSwKKyAgICAg ICBwZ19jYXRhbG9nLmRkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kKHBnX2NhdGFsb2cuZGRsX2Rl cGFyc2VfdG9fanNvbihjb21tYW5kKSksCistLSAgICAgICAgIHBnX2NhdGFsb2cuZGRsX2RlcGFy c2VfdG9fanNvbihjb21tYW5kKSwKKyAgICAgICAgICAgICAgICAgICAgIG9yZGluYWxpdHksIGxz bgorCQlGUk9NIHBnX2V2ZW50X3RyaWdnZXJfZGRsX2NvbW1hbmRzKCkgV0lUSCBPUkRJTkFMSVRZ LAorCQlwZ19jdXJyZW50X3dhbF9pbnNlcnRfbHNuKCkgbHNuLAorCQlwZ19zdGF0X2dldF9iYWNr ZW5kX2lkc2V0KCkgaWQKKwkJIFdIRVJFIHBnX3N0YXRfZ2V0X2JhY2tlbmRfcGlkKGlkKSA9IHBn X2JhY2tlbmRfcGlkKCkgQU5ECisJCU5PVCBjb21tYW5kX3RhZyA9ICdzcyc7CisKKwlFWENFUFRJ T04gV0hFTiBPVEhFUlMgVEhFTgorCQkJUkFJU0UgV0FSTklORyAnc3RhdGU6ICUgZXJybTogJScs IHNxbHN0YXRlLCBzcWxlcnJtOworCUVORDsKK0VORDsKKyRmbiQ7CitDUkVBVEUgRVhURU5TSU9O IHRlc3RfZGVwYXJzZXI7CitDUkVBVEUgRVZFTlQgVFJJR0dFUiBkZXBhcnNlX3Rlc3RfdHJnX3Nx bF9kcm9wCisgIE9OIHNxbF9kcm9wCisgIEVYRUNVVEUgUFJPQ0VEVVJFIHRlc3RfZGVwYXJzZXJf ZHJvcF9jb21tYW5kKCk7CitDUkVBVEUgRVZFTlQgVFJJR0dFUiBkZXBhcnNlX3Rlc3RfdHJnX2Rk bF9jb21tYW5kX2VuZAorICBPTiBkZGxfY29tbWFuZF9lbmQgV0hFTiBUQUcgSU4gKCdDUkVBVEUg VEFCTEUnLCAnQUxURVIgVEFCTEUnKQorICBFWEVDVVRFIFBST0NFRFVSRSBkZXBhcnNlX3Rlc3Rf ZGRsX2NvbW1hbmRfZW5kKCk7CitcYyA6cHJldmRiCitBTFRFUiBTWVNURU0gU0VUIHNlc3Npb25f cHJlbG9hZF9saWJyYXJpZXMgPSAndGVzdF9kZXBhcnNlcic7CitTRUxFQ1QgcGdfcmVsb2FkX2Nv bmYoKTsKKyBwZ19yZWxvYWRfY29uZiAKKy0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZXBhcnNlci9tZXNvbi5idWlsZCBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZXBhcnNlci9tZXNvbi5idWlsZApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5mYzJmMmQxNWE0Ci0tLSAvZGV2L251bGwKKysrIGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RlcGFyc2VyL21lc29uLmJ1aWxkCkBAIC0wLDAgKzEsMjkg QEAKKyMgQ29weXJpZ2h0IChjKSAyMDIyLTIwMjMsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisKK3Rlc3RfZGVwYXJzZXJfc291cmNlcyA9IGZpbGVzKAorICAndGVzdF9kZXBh cnNlci5jJywKKykKKworaWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCisgIHRlc3RfZGVwYXJz ZXJfc291cmNlcyArPSByY19saWJfZ2VuLnByb2Nlc3Mod2luMzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6 IFsKKyAgICAnLS1OQU1FJywgJ3Rlc3RfZGVwYXJzZXInLAorICAgICctLUZJTEVERVNDJywgJ3Rl c3RfZGVwYXJzZXIgLSBhbGxvdyBkZWxheSBiZXR3ZWVuIHBhcnNpbmcgYW5kIGV4ZWN1dGlvbics XSkKK2VuZGlmCisKK3Rlc3RfZGVwYXJzZXIgPSBzaGFyZWRfbW9kdWxlKCd0ZXN0X2RlcGFyc2Vy JywKKyAgdGVzdF9kZXBhcnNlcl9zb3VyY2VzLAorICBrd2FyZ3M6IHBnX3Rlc3RfbW9kX2FyZ3Ms CispCit0ZXN0X2luc3RhbGxfbGlicyArPSB0ZXN0X2RlcGFyc2VyCisKK3Rlc3RzICs9IHsKKyAg J25hbWUnOiAndGVzdF9kZXBhcnNlcicsCisgICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNlX2Rp cigpLAorICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpLAorICAnaXNvbGF0aW9uJzog eworICAgICdzcGVjcyc6IFsKKyAgICAgICdwYXJ0aXRpb24tYWRkaXRpb24nLAorICAgICAgJ3Bh cnRpdGlvbi1yZW1vdmFsLTEnLAorICAgIF0sCisgIH0sCit9CmRpZmYgLS1naXQgYS9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfZGVwYXJzZXIvc3FsL3Rlc3RfZGVwYXJzZXIuc3FsIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2RlcGFyc2VyL3NxbC90ZXN0X2RlcGFyc2VyLnNxbApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi45NDMyOWYwMTdmCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RlcGFyc2VyL3NxbC90ZXN0X2RlcGFyc2VyLnNxbApAQCAt MCwwICsxLDU1IEBACitcc2V0IHByZXZkYiA6REJOQU1FCisKK0NSRUFURSBEQVRBQkFTRSBkZXBh cnNlcl9yZWdyZXNzOworXGMgZGVwYXJzZXJfcmVncmVzczsKKworQ1JFQVRFIFRBQkxFIHB1Ymxp Yy5kZXBhcnNlX3Rlc3RfY29tbWFuZHMoCisgdGVzdF9uYW1lIHRleHQsCisgYmFja2VuZF9pZCBp bnQsCisgYmFja2VuZF9zdGFydCB0aW1lc3RhbXB0eiwKKyBsc24gcGdfbHNuLAorIG9yZCBpbnRl Z2VyLAorIGNvbW1hbmQgVEVYVAorKTsKKworCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBw dWJsaWMuZGVwYXJzZV90ZXN0X2RkbF9jb21tYW5kX2VuZCgpCisgIFJFVFVSTlMgZXZlbnRfdHJp Z2dlcgorICBTRUNVUklUWSBERUZJTkVSCisgIExBTkdVQUdFIHBscGdzcWwKK0FTICRmbiQKK0JF R0lOCisJQkVHSU4KKwkJSU5TRVJUIElOVE8gcHVibGljLmRlcGFyc2VfdGVzdF9jb21tYW5kcwor CQkgICAgICAgICAgICAodGVzdF9uYW1lLCBiYWNrZW5kX2lkLCBiYWNrZW5kX3N0YXJ0LCBjb21t YW5kLCBvcmQsIGxzbikKKwkJU0VMRUNUIGN1cnJlbnRfc2V0dGluZygnYXBwbGljYXRpb25fbmFt ZScpLAorCQlpZCwgcGdfc3RhdF9nZXRfYmFja2VuZF9zdGFydChpZCksCisgICAgICAgcGdfY2F0 YWxvZy5kZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZChwZ19jYXRhbG9nLmRkbF9kZXBhcnNlX3Rv X2pzb24oY29tbWFuZCkpLAorLS0gICAgICAgICBwZ19jYXRhbG9nLmRkbF9kZXBhcnNlX3RvX2pz b24oY29tbWFuZCksCisgICAgICAgICAgICAgICAgICAgICBvcmRpbmFsaXR5LCBsc24KKwkJRlJP TSBwZ19ldmVudF90cmlnZ2VyX2RkbF9jb21tYW5kcygpIFdJVEggT1JESU5BTElUWSwKKwkJcGdf Y3VycmVudF93YWxfaW5zZXJ0X2xzbigpIGxzbiwKKwkJcGdfc3RhdF9nZXRfYmFja2VuZF9pZHNl dCgpIGlkCisJCSBXSEVSRSBwZ19zdGF0X2dldF9iYWNrZW5kX3BpZChpZCkgPSBwZ19iYWNrZW5k X3BpZCgpIEFORAorCQlOT1QgY29tbWFuZF90YWcgPSAnc3MnOworCisJRVhDRVBUSU9OIFdIRU4g T1RIRVJTIFRIRU4KKwkJCVJBSVNFIFdBUk5JTkcgJ3N0YXRlOiAlIGVycm06ICUnLCBzcWxzdGF0 ZSwgc3FsZXJybTsKKwlFTkQ7CitFTkQ7CiskZm4kOworCitDUkVBVEUgRVhURU5TSU9OIHRlc3Rf ZGVwYXJzZXI7CisKK0NSRUFURSBFVkVOVCBUUklHR0VSIGRlcGFyc2VfdGVzdF90cmdfc3FsX2Ry b3AKKyAgT04gc3FsX2Ryb3AKKyAgRVhFQ1VURSBQUk9DRURVUkUgdGVzdF9kZXBhcnNlcl9kcm9w X2NvbW1hbmQoKTsKKworQ1JFQVRFIEVWRU5UIFRSSUdHRVIgZGVwYXJzZV90ZXN0X3RyZ19kZGxf Y29tbWFuZF9lbmQKKyAgT04gZGRsX2NvbW1hbmRfZW5kIFdIRU4gVEFHIElOICgnQ1JFQVRFIFRB QkxFJywgJ0FMVEVSIFRBQkxFJykKKyAgRVhFQ1VURSBQUk9DRURVUkUgZGVwYXJzZV90ZXN0X2Rk bF9jb21tYW5kX2VuZCgpOworCitcYyA6cHJldmRiCisKK0FMVEVSIFNZU1RFTSBTRVQgc2Vzc2lv bl9wcmVsb2FkX2xpYnJhcmllcyA9ICd0ZXN0X2RlcGFyc2VyJzsKK1NFTEVDVCBwZ19yZWxvYWRf Y29uZigpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RlcGFyc2VyL3Rlc3Rf ZGVwYXJzZXItLTEuMC5zcWwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGVwYXJzZXIvdGVzdF9k ZXBhcnNlci0tMS4wLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5m OTVlYjJkMGU5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RlcGFy c2VyL3Rlc3RfZGVwYXJzZXItLTEuMC5zcWwKQEAgLTAsMCArMSw1IEBACitcZWNobyBVc2UgIkNS RUFURSBFWFRFTlNJT04gdGVzdF9kZXBhcnNlciIgdG8gbG9hZCB0aGlzIGZpbGUuIFxxdWl0CisK K0NSRUFURSBGVU5DVElPTiB0ZXN0X2RlcGFyc2VyX2Ryb3BfY29tbWFuZCgpCitSRVRVUk5TIGV2 ZW50X3RyaWdnZXIgU1RSSUNUCitBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RlcGFyc2VyL3Rlc3RfZGVwYXJzZXIuYyBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZXBhcnNlci90ZXN0X2RlcGFyc2VyLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMDc2NzI4NmJkMgotLS0gL2Rldi9udWxsCisr KyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZXBhcnNlci90ZXN0X2RlcGFyc2VyLmMKQEAgLTAs MCArMSw2NTUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHRlc3RfZGVwYXJzZXIuYwor ICoJCVRlc3QgRERMIGRlcGFyc2VyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIwLTIwMjMsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURFTlRJRklDQVRJT04K KyAqCSAgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RlcGFyc2VyL3Rlc3RfZGVwYXJzZXIuYworICoK KyAqIHdoZW4gcnVubmluZyB0aGUgcmVncmVzc2lvbiB0ZXN0LCBpdCB3aWxsIHJlcGxhY2UgdGhl IGV4ZWN1dGluZyBkZGwKKyAqIHN0YXRlbWVudCB3aXRoIHRoZSBkZXBhcnNlZCBzdGF0ZW1lbnRz IGluIFByb2Nlc3NVdGlsaXR5IGhvb2sgZnVuY3Rpb24sIHNvCisgKiB0aGF0IHdlIGNhbiBydW4g dGhlIHJlZ3Jlc3Npb24gd2l0aCB0aGUgZGVwYXJzZWQgc3RhdGVtZW50IGFuZCB3ZSBjYW4gZXhw ZWN0CisgKiB0aGUgb3V0cHV0IHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBleGlzdGluZyBleHBlY3Rl ZCAqLm91dC4KKyAqCisgKiBUbyBnZXQgdGhlIGRlcGFyc2VkIHN0YXRlbWVudCwgdGhlIGN1cnJl bnQgYXBwcm9hY2ggaXMgdG8gY3JlYXRlIGFub3RoZXIKKyAqIGRhdGFiYXNlIGFuZCByZWRpcmVj dCB0aGUgbG9jYWwgc3RhdGVtZW50IHRvIHRoYXQgcmVtb3RlIGRhdGFiYXNlLiBJbiBkb2luZwor ICogc28sIHRoZSBzdGF0ZW1lbnQgd2lsbCBiZSBkZXBhcnNlZCBhbmQgc3RvcmVkIGluIHRoZSBy ZW1vdGUgZGF0YWJhc2UsCisgKiBhbGxvd2luZyB1cyB0byBxdWVyeSBpdCBhbmQgcmV0cmlldmUg dGhlIGRlcGFyc2VkIHN0YXRlbWVudC4gVGhpcyBkZXBhcnNlZAorICogc3RhdGVtZW50IGNhbiB0 aGVuIGJlIHVzZWQgdG8gcmVwbGFjZSB0aGUgb3JpZ2luYWwgc3RhdGVtZW50LgorICoKKyAqIFhY WCBJbiB0aGlzIGFwcHJvYWNoLCB3ZSBuZWVkIHRvIGhhbmRsZSB0aGUgRVJST1JzLCBXQVJOSU5H cywgYW5kIE5PVElDRXMKKyAqIGZyb20gdGhlIHJlbW90ZSBkYXRhYmFzZS4gV2Ugd2lsbCBkaXJl Y3RseSByZXRocm93IGFueSBFUlJPUnMgZW5jb3VudGVyZWQgaW4KKyAqIHRoZSByZW1vdGUgZGF0 YWJhc2UuIEhvd2V2ZXIsIGZvciBXQVJOSU5HcyBhbmQgTk9USUNFcywgd2Ugd2lsbCBvbmx5IHJl dGhyb3cKKyAqIHRoZW0gYWxvbmcgd2l0aCB0aGUgRVJST1JzLiBUaGlzIGlzIGRvbmUgdG8gcHJl dmVudCBkdXBsaWNhdGUgbWVzc2FnZXMgaW4KKyAqIHRoZSBvdXRwdXQgZmlsZSBkdXJpbmcgbG9j YWwgc3RhdGVtZW50IGV4ZWN1dGlvbiwgd2hpY2ggd291bGQgYmUKKyAqIGluY29uc2lzdGVudCB3 aXRoIHRoZSBleGlzdGluZyBleHBlY3RlZCBvdXRwdXQuIE5vdGUgdGhhdCB0aGlzIGFwcHJvYWNo IG1heQorICogcG90ZW50aWFsbHkgbWlzcyBzb21lIGJ1Z3MsIGFzIHRoZXJlIGNvdWxkIGJlIGFk ZGl0aW9uYWwgV0FSTklOR3Mgb3IgTk9USUNFcworICogY2F1c2VkIGJ5IHRoZSBkZXBhcnNlciBp biB0aGUgcmVtb3RlIGRhdGFiYXNlLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNp bmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiY2F0YWxvZy9kZXBlbmRlbmN5LmgiCisj aW5jbHVkZSAiY2F0YWxvZy9vYmplY3RhY2Nlc3MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2Ns YXNzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19kYXRhYmFzZS5oIgorI2luY2x1ZGUgImNhdGFs b2cvcGdfbmFtZXNwYWNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wcm9jLmgiCisjaW5jbHVk ZSAiY29tbWFuZHMvZGJjb21tYW5kcy5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2V2ZW50X3RyaWdn ZXIuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9zZWNsYWJlbC5oIgorI2luY2x1ZGUgImV4ZWN1dG9y L2V4ZWN1dG9yLmgiCisjaW5jbHVkZSAiZXhlY3V0b3Ivc3BpLmgiCisjaW5jbHVkZSAiZm1nci5o IgorI2luY2x1ZGUgImxpYnBxLWZlLmgiCisjaW5jbHVkZSAibGlicHEvbGlicHEtYmUuaCIKKyNp bmNsdWRlICJsaWJwcS9saWJwcS1iZS1mZS1oZWxwZXJzLmgiCisjaW5jbHVkZSAibWlzY2FkbWlu LmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5uZXIuaCIKKyNpbmNsdWRlICJ0Y29wL2RkbGRl cGFyc2UuaCIKKyNpbmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIKKyNpbmNsdWRlICJ1dGlscy9idWls dGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgorI2luY2x1ZGUgInV0aWxzL3BvcnRhbC5o IgorI2luY2x1ZGUgInV0aWxzL3F1ZXJ5ZW52aXJvbm1lbnQuaCIKKworUEdfTU9EVUxFX01BR0lD OworCit0eXBlZGVmIHN0cnVjdCBkZXBhcnNlcl9lcnJkYXRhCit7CisJaW50CQlzcWxzdGF0ZTsK KwlpbnQJCWxldmVsOworCWludAkJZXJycG9zOworCWNoYXIgKm1lc3NhZ2VfcHJpbWFyeTsKKwlj aGFyICptZXNzYWdlX2RldGFpbDsKKwljaGFyICptZXNzYWdlX2hpbnQ7CisJY2hhciAqbWVzc2Fn ZV9jb250ZXh0OworfSBkZXBhcnNlcl9lcnJkYXRhOworCitzdGF0aWMgUHJvY2Vzc1V0aWxpdHlf aG9va190eXBlIHByZXZfUHJvY2Vzc1V0aWxpdHkgPSBOVUxMOworc3RhdGljIEV4ZWN1dG9yUnVu X2hvb2tfdHlwZSBwcmV2X0V4ZWN1dG9yUnVuID0gTlVMTDsKK3N0YXRpYyBFeGVjdXRvclN0YXJ0 X2hvb2tfdHlwZSBwcmV2X0V4ZWN1dG9yU3RhcnQgPSBOVUxMOworc3RhdGljIHBsYW5uZXJfaG9v a190eXBlIHByZXZfcGxhbm5lcl9ob29rID0gTlVMTDsKK2V4dGVybiBFdmVudFRyaWdnZXJRdWVy eVN0YXRlICpjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGU7CisKK3N0YXRpYyB2b2lkIHRkZXBhcnNl cl9Qcm9jZXNzVXRpbGl0eShQbGFubmVkU3RtdCAqcHN0bXQsIGNvbnN0IGNoYXIgKnF1ZXJ5U3Ry aW5nLAorCQkJCQkJCQkJIGJvb2wgcmVhZE9ubHlUcmVlLAorCQkJCQkJCQkJIFByb2Nlc3NVdGls aXR5Q29udGV4dCBjb250ZXh0LCBQYXJhbUxpc3RJbmZvIHBhcmFtcywKKwkJCQkJCQkJCSBRdWVy eUVudmlyb25tZW50ICpxdWVyeUVudiwKKwkJCQkJCQkJCSBEZXN0UmVjZWl2ZXIgKmRlc3QsIFF1 ZXJ5Q29tcGxldGlvbiAqcWMpOworCitzdGF0aWMgdm9pZCB0ZGVwYXJzZXJfRXhlY3V0b3JSdW4o UXVlcnlEZXNjICpxdWVyeURlc2MsIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLCB1aW50NjQgY291 bnQsCisJCQkJCQkJCSAgYm9vbCBleGVjdXRlX29uY2UpOworCitzdGF0aWMgdm9pZCB0ZGVwYXJz ZXJfRXhlY3V0b3JTdGFydChRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncyk7CisKK3N0 YXRpYyBQbGFubmVkU3RtdCAqdGRlcGFyc2VyX3BsYW5uZXIoUXVlcnkgKnBhcnNlLAorCQljb25z dCBjaGFyICpxdWVyeV9zdHJpbmcsCisJCWludCBjdXJzb3JPcHRpb25zLAorCQlQYXJhbUxpc3RJ bmZvIGJvdW5kUGFyYW1zKTsKKworc3RhdGljIHZvaWQgdGVzdF9kZXBhcnNlcl9yZWRpcmVjdF9j bWQoY29uc3QgY2hhciAqcXVlcnkpOworCitzdGF0aWMgdm9pZCB0ZXN0X2RlcGFyc2VyX3JlcG9y dF9lcnJvcih2b2lkICphcmcsIGNvbnN0IFBHcmVzdWx0ICpyZXMpOworCitzdGF0aWMgUEdjb25u ICpjb25uID0gTlVMTDsKK3N0YXRpYyBpbnQJbmVzdGluZ19sZXZlbCA9IDA7CitzdGF0aWMgY2hh ciAqY3VycmVudF9yb2xlID0gTlVMTDsKK3N0YXRpYyBjaGFyICpzZXNzaW9uX3JvbGUgPSBOVUxM Oworc3RhdGljIExpc3QgKmRlcGFyc2VyX2VycmRhdGFfbGlzdCA9IE5JTDsKK3N0YXRpYyBNZW1v cnlDb250ZXh0IHRlc3RfZGVwYXJzZXIgPSBOVUxMOworCitzdGF0aWMgdm9pZAordGVzdF9kZXBh cnNlcl9jb25uZWN0KHZvaWQpCit7CisJU3RyaW5nSW5mb0RhdGEgY21kOworCisJaWYgKGNvbm4g IT0gTlVMTCkKKwkJcmV0dXJuOworCisJY29ubiA9IGxpYnBxc3J2X2Nvbm5lY3QoImRibmFtZT1k ZXBhcnNlcl9yZWdyZXNzIGhvc3Q9bG9jYWxob3N0IiwgUEdfV0FJVF9FWFRFTlNJT04pOworCisJ aWYgKFBRc3RhdHVzKGNvbm4pID09IENPTk5FQ1RJT05fQkFEKQorCXsKKwkJY2hhcgkgICAqbXNn ID0gcGNob21wKFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKworCQlsaWJwcXNydl9kaXNjb25uZWN0 KGNvbm4pOworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfU1FMQ0xJRU5U X1VOQUJMRV9UT19FU1RBQkxJU0hfU1FMQ09OTkVDVElPTiksCisJCQkJIGVycm1zZygiY291bGQg bm90IGVzdGFibGlzaCBjb25uZWN0aW9uIiksCisJCQkJIGVycmRldGFpbF9pbnRlcm5hbCgiJXMi LCBtc2cpKSk7CisJfQorCisJaW5pdFN0cmluZ0luZm8oJmNtZCk7CisJYXBwZW5kU3RyaW5nSW5m bygmY21kLCAiU0VMRUNUIHNldF9jb25maWcoJ2FwcGxpY2F0aW9uX25hbWUnLCAnJXMnLCBmYWxz ZSk7IiwgYXBwbGljYXRpb25fbmFtZSk7CisKKwl0ZXN0X2RlcGFyc2VyX3JlZGlyZWN0X2NtZChj bWQuZGF0YSk7CisKKwl0ZXN0X2RlcGFyc2VyID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKFRvcE1l bW9yeUNvbnRleHQsCisJCQkidGVzdCBkZXBhcnNlciIsCisJCQlBTExPQ1NFVF9ERUZBVUxUX1NJ WkVTKTsKKworCVBRc2V0Tm90aWNlUmVjZWl2ZXIoY29ubiwgJnRlc3RfZGVwYXJzZXJfcmVwb3J0 X2Vycm9yLCAodm9pZCAqKSBOVUxMKTsKK30KKworc3RhdGljIHZvaWQKK2FwcGVuZF9lcnJkYXRh X2xpc3QoaW50IHNxbHN0YXRlLCBpbnQgbGV2ZWwsIGludCBlcnJwb3MsIGNoYXIgKm1lc3NhZ2Vf cHJpbWFyeSwKKwkJY2hhciAqbWVzc2FnZV9kZXRhaWwsIGNoYXIgKm1lc3NhZ2VfaGludCwgY2hh ciAqbWVzc2FnZV9jb250ZXh0KQoreworCU1lbW9yeUNvbnRleHQgb2xkY3R4OworCWRlcGFyc2Vy X2VycmRhdGEgKmVycmRhdGE7CisKKwlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8odGVz dF9kZXBhcnNlcik7CisKKwllcnJkYXRhID0gcGFsbG9jMChzaXplb2YoZGVwYXJzZXJfZXJyZGF0 YSkpOworCWVycmRhdGEtPmxldmVsID0gbGV2ZWw7CisJZXJyZGF0YS0+c3Fsc3RhdGUgPSBzcWxz dGF0ZTsKKwllcnJkYXRhLT5lcnJwb3MgPSBlcnJwb3M7CisKKwlpZiAobWVzc2FnZV9jb250ZXh0 KQorCQllcnJkYXRhLT5tZXNzYWdlX2NvbnRleHQgPSBwc3RyZHVwKG1lc3NhZ2VfY29udGV4dCk7 CisKKwlpZiAobWVzc2FnZV9kZXRhaWwpCisJCWVycmRhdGEtPm1lc3NhZ2VfZGV0YWlsID0gcHN0 cmR1cChtZXNzYWdlX2RldGFpbCk7CisKKwlpZiAobWVzc2FnZV9oaW50KQorCQllcnJkYXRhLT5t ZXNzYWdlX2hpbnQgPSBwc3RyZHVwKG1lc3NhZ2VfaGludCk7CisKKwlpZiAobWVzc2FnZV9wcmlt YXJ5KQorCQllcnJkYXRhLT5tZXNzYWdlX3ByaW1hcnkgPSBwc3RyZHVwKG1lc3NhZ2VfcHJpbWFy eSk7CisKKwlkZXBhcnNlcl9lcnJkYXRhX2xpc3QgPSBsYXBwZW5kKGRlcGFyc2VyX2VycmRhdGFf bGlzdCwgZXJyZGF0YSk7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKK30KKwor c3RhdGljIHZvaWQKK3Rlc3RfZGVwYXJzZXJfcmV0aHJvd19lcnJvcihpbnQgc3Fsc3RhdGUsIGlu dCBsZXZlbCwgaW50IGVycnBvcywgY2hhciAqbWVzc2FnZV9wcmltYXJ5LAorCQljaGFyICptZXNz YWdlX2RldGFpbCwgY2hhciAqbWVzc2FnZV9oaW50LAorCQljaGFyICptZXNzYWdlX2NvbnRleHQp Cit7CisJZXJlcG9ydChsZXZlbCwKKwkJCShlcnJjb2RlKHNxbHN0YXRlKSwKKwkJCSAobWVzc2Fn ZV9wcmltYXJ5ICE9IE5VTEwgJiYgbWVzc2FnZV9wcmltYXJ5WzBdICE9ICdcMCcpID8KKwkJCSBl cnJtc2dfaW50ZXJuYWwoIiVzIiwgbWVzc2FnZV9wcmltYXJ5KSA6CisJCQkgZXJybXNnKCJjb3Vs ZCBub3Qgb2J0YWluIG1lc3NhZ2Ugc3RyaW5nIGZvciByZW1vdGUgZXJyb3IiKSwKKwkJCSBtZXNz YWdlX2RldGFpbCA/IGVycmRldGFpbF9pbnRlcm5hbCgiJXMiLCBtZXNzYWdlX2RldGFpbCkgOiAw LAorCQkJIG1lc3NhZ2VfaGludCA/IGVycmhpbnQoIiVzIiwgbWVzc2FnZV9oaW50KSA6IDAsCisJ CQkgZXJycG9zID8gZXJycG9zaXRpb24oZXJycG9zKSA6IDAsCisJCQkgbWVzc2FnZV9jb250ZXh0 ID8gZXJyY29udGV4dCgiJXMiLCBtZXNzYWdlX2NvbnRleHQpIDogMCkpOworfQorCitzdGF0aWMg dm9pZAordGVzdF9kZXBhcnNlcl9jbGVhbl9lcnJkYXRhKGJvb2wgcmV0aHJvdykKK3sKKwlMaXN0 Q2VsbCAqbGM7CisKKwlpZiAoIXJldGhyb3cpCisJeworCQlsaXN0X2ZyZWUoZGVwYXJzZXJfZXJy ZGF0YV9saXN0KTsKKwkJZGVwYXJzZXJfZXJyZGF0YV9saXN0ID0gTklMOworCQlyZXR1cm47CisJ fQorCisJZm9yZWFjaChsYywgZGVwYXJzZXJfZXJyZGF0YV9saXN0KQorCXsKKwkJZGVwYXJzZXJf ZXJyZGF0YSAqZWQgPSAoZGVwYXJzZXJfZXJyZGF0YSAqKSBsZmlyc3QobGMpOworCQl0ZXN0X2Rl cGFyc2VyX3JldGhyb3dfZXJyb3IoZWQtPnNxbHN0YXRlLCBlZC0+bGV2ZWwsIGVkLT5lcnJwb3Ms IGVkLT5tZXNzYWdlX3ByaW1hcnksCisJCQkJZWQtPm1lc3NhZ2VfZGV0YWlsLCBlZC0+bWVzc2Fn ZV9oaW50LAorCQkJCWVkLT5tZXNzYWdlX2NvbnRleHQpOworCQlkZXBhcnNlcl9lcnJkYXRhX2xp c3QgPSBmb3JlYWNoX2RlbGV0ZV9jdXJyZW50KGRlcGFyc2VyX2VycmRhdGFfbGlzdCwgbGMpOwor CX0KKworCUFzc2VydChkZXBhcnNlcl9lcnJkYXRhX2xpc3QgPT0gTklMKTsKK30KKworLyoKKyAq IFhYWCBDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIHdpbGwgY3JlYXRlIGFuIGludmFsaWQgaW5k ZXggaW50ZXJuYWxseSBldmVuCisgKiBpZiBpdCByZXBvcnRzIGFuIEVSUk9SIGxhdGVyLiBCdXQg c2luY2Ugd2Ugd2lsbCBkaXJlY3RseSByZXRocm93IHRoZSByZW1vdGUKKyAqIEVSUk9SIGluIHRo ZSBtYWluIGRhdGFiYXNlLCB3ZSB3b24ndCBleGVjdXRlIHRoZSAiQ1JFQVRFIElOREVYIENPTkNV UlJFTlRMWSIKKyAqIGluIHRoZSBtYWluIGRhdGFiYXNlLiBUaGlzIG1lYW5zIHRoYXQgd2UgY2Fu bm90IHNlZSB0aGUgaW52YWxpZCBpbmRleCBpbiB0aGUKKyAqIG1haW4gZGF0YWJhc2UuIFRvIGZp eCB0aGlzIGlzc3VlLCB3ZSB3b24ndCByZXRocm93IHRoZSBFUlJPUiBpbiB0aGlzCisgKiBzcGVj aWZpYyBjYXNlLCBhbGxvd2luZyB0aGUgbWFpbiBkYXRhYmFzZSB0byBjcmVhdGUgdGhlIGludmFs aWQgaW5kZXguCisgKiBIb3dldmVyLCBpdCdzIGltcG9ydGFudCB0byBub3RlIHRoYXQgdGhpcyBh cHByb2FjaCBtYXkgYWxzbyBhZmZlY3Qgb3RoZXIKKyAqIHN0YXRlbWVudHMgdGhhdCByZXBvcnQg c2ltaWxhciBFUlJPUlMgYW5kIG5lZWQgdG8gYmUgdXBkYXRlZCB3aGVuIGFkZGluZyBuZXcKKyAq IHNpbWlsYXIgdGVzdCBjYXNlcy4KKyAqLworc3RhdGljIGJvb2wKK3Rlc3RfZGVwYXJzZXJfaWdu b3JlX2Vycm9yKGludCBzcWxzdGF0ZSwgY2hhciAqbWVzc2FnZV9wcmltYXJ5KQoreworCXJldHVy biAoc3Fsc3RhdGUgPT0gRVJSQ09ERV9VTklRVUVfVklPTEFUSU9OICYmCisJCQkoc3RyY21wKG1l c3NhZ2VfcHJpbWFyeSwgImNvdWxkIG5vdCBjcmVhdGUgdW5pcXVlIGluZGV4IFwiY29uY3VyX2lu ZGV4M1wiIikgPT0gMCB8fAorCQkJc3RyY21wKG1lc3NhZ2VfcHJpbWFyeSwgImNvdWxkIG5vdCBj cmVhdGUgdW5pcXVlIGluZGV4IFwiY29uY3VyX3JlaW5kZXhfaW5kNVwiIikgPT0gMCB8fAorCQkJ c3RyY21wKG1lc3NhZ2VfcHJpbWFyeSwgImNvdWxkIG5vdCBjcmVhdGUgdW5pcXVlIGluZGV4IFwi Y29uY3VyX3JlaW5kZXhfaW5kNV9jY25ld1wiIikgPT0gMCkpOworfQorCitzdGF0aWMgdm9pZAor dGVzdF9kZXBhcnNlcl9yZXBvcnRfZXJyb3Iodm9pZCAqYXJnLCBjb25zdCBQR3Jlc3VsdCAqcmVz KQoreworCWNoYXIJICAgKmRpYWdfc3Fsc3RhdGUgPSBQUXJlc3VsdEVycm9yRmllbGQocmVzLCBQ R19ESUFHX1NRTFNUQVRFKTsKKwljaGFyCSAgICptZXNzYWdlX3ByaW1hcnkgPSBQUXJlc3VsdEVy cm9yRmllbGQocmVzLCBQR19ESUFHX01FU1NBR0VfUFJJTUFSWSk7CisJY2hhcgkgICAqbWVzc2Fn ZV9kZXRhaWwgPSBQUXJlc3VsdEVycm9yRmllbGQocmVzLCBQR19ESUFHX01FU1NBR0VfREVUQUlM KTsKKwljaGFyCSAgICptZXNzYWdlX2hpbnQgPSBQUXJlc3VsdEVycm9yRmllbGQocmVzLCBQR19E SUFHX01FU1NBR0VfSElOVCk7CisJY2hhcgkgICAqbWVzc2FnZV9jb250ZXh0ID0gUFFyZXN1bHRF cnJvckZpZWxkKHJlcywgUEdfRElBR19DT05URVhUKTsKKwljaGFyCSAgICptZXNzYWdlX2xldmVs ID0gUFFyZXN1bHRFcnJvckZpZWxkKHJlcywgUEdfRElBR19TRVZFUklUWSk7CisJY2hhcgkgICAq bWVzc2FnZV9wb3NpdGlvbiA9IFBRcmVzdWx0RXJyb3JGaWVsZChyZXMsIFBHX0RJQUdfU1RBVEVN RU5UX1BPU0lUSU9OKTsKKwlpbnQJCQlzcWxzdGF0ZTsKKwlpbnQJCQlsZXZlbDsKKwlpbnQJCQlt c2dwb3M7CisKKwlpZiAoZGlhZ19zcWxzdGF0ZSkKKwkJc3Fsc3RhdGUgPSBNQUtFX1NRTFNUQVRF KGRpYWdfc3Fsc3RhdGVbMF0sCisJCQkJCQkJCSBkaWFnX3NxbHN0YXRlWzFdLAorCQkJCQkJCQkg ZGlhZ19zcWxzdGF0ZVsyXSwKKwkJCQkJCQkJIGRpYWdfc3Fsc3RhdGVbM10sCisJCQkJCQkJCSBk aWFnX3NxbHN0YXRlWzRdKTsKKwllbHNlCisJCXNxbHN0YXRlID0gRVJSQ09ERV9DT05ORUNUSU9O X0ZBSUxVUkU7CisKKwkvKgorCSAqIElmIHdlIGRvbid0IGdldCBhIG1lc3NhZ2UgZnJvbSB0aGUg UEdyZXN1bHQsIHRyeSB0aGUgUEdjb25uLiAgVGhpcworCSAqIGlzIG5lZWRlZCBiZWNhdXNlIGZv ciBjb25uZWN0aW9uLWxldmVsIGZhaWx1cmVzLCBQUWV4ZWMgbWF5IGp1c3QKKwkgKiByZXR1cm4g TlVMTCwgbm90IGEgUEdyZXN1bHQgYXQgYWxsLgorCSAqLworCWlmIChtZXNzYWdlX3ByaW1hcnkg PT0gTlVMTCkKKwkJbWVzc2FnZV9wcmltYXJ5ID0gcGNob21wKFBRZXJyb3JNZXNzYWdlKGNvbm4p KTsKKworCWlmICh0ZXN0X2RlcGFyc2VyX2lnbm9yZV9lcnJvcihzcWxzdGF0ZSwgbWVzc2FnZV9w cmltYXJ5KSkKKwkJcmV0dXJuOworCisJaWYgKG1lc3NhZ2VfcG9zaXRpb24pCisJCW1zZ3BvcyA9 IGF0b2kobWVzc2FnZV9wb3NpdGlvbik7CisJZWxzZQorCQltc2dwb3MgPSAwOworCisJaWYgKG1l c3NhZ2VfbGV2ZWwgPT0gTlVMTCB8fCBzdHJjbXAobWVzc2FnZV9sZXZlbCwgIkVSUk9SIikgPT0g MCkKKwkJbGV2ZWwgPSBFUlJPUjsKKwllbHNlIGlmIChzdHJjbXAobWVzc2FnZV9sZXZlbCwgIldB Uk5JTkciKSA9PSAwKQorCQlsZXZlbCA9IFdBUk5JTkc7CisJZWxzZSBpZiAoc3RyY21wKG1lc3Nh Z2VfbGV2ZWwsICJOT1RJQ0UiKSA9PSAwKQorCQlsZXZlbCA9IE5PVElDRTsKKwllbHNlCisJCXJl dHVybjsKKworCS8qIFdBUk5JTkcgYW5kIE5PVElDRSBhcmUgb25seSByZS10aHJvd24gd2l0aCBF UlJPUnMuICovCisJaWYgKGxldmVsID09IFdBUk5JTkcgfHwgbGV2ZWwgPT0gTk9USUNFKQorCXsK KwkJYXBwZW5kX2VycmRhdGFfbGlzdChzcWxzdGF0ZSwgbGV2ZWwsIG1zZ3BvcywgbWVzc2FnZV9w cmltYXJ5LCBtZXNzYWdlX2RldGFpbCwKKwkJbWVzc2FnZV9oaW50LCBtZXNzYWdlX2NvbnRleHQp OworCQlyZXR1cm47CisJfQorCisJLyogSXQgbXVzdCBiYSBhbiBFUlJPUiBtZXNzYWdlLCBzbyB3 ZSByZS10aHJvdyBhbGwgb3RoZXIgbWVzc2FnZXMuICovCisJdGVzdF9kZXBhcnNlcl9jbGVhbl9l cnJkYXRhKHRydWUpOworCXRlc3RfZGVwYXJzZXJfcmV0aHJvd19lcnJvcihzcWxzdGF0ZSwgbGV2 ZWwsIG1zZ3BvcywgbWVzc2FnZV9wcmltYXJ5LCBtZXNzYWdlX2RldGFpbCwKKwkJCW1lc3NhZ2Vf aGludCwgbWVzc2FnZV9jb250ZXh0KTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfZGVwYXJzZXJf cmVkaXJlY3RfY21kKGNvbnN0IGNoYXIgKnF1ZXJ5KQoreworCVBHcmVzdWx0ICAgKnJlczsKKwor CUFzc2VydChjb25uKTsKKworCXJlcyA9IFBRZXhlYyhjb25uLCBxdWVyeSk7CisKKwlzd2l0Y2gg KFBRcmVzdWx0U3RhdHVzKHJlcykpCisJeworCQljYXNlIFBHUkVTX0NPTU1BTkRfT0s6CisJCWNh c2UgUEdSRVNfVFVQTEVTX09LOgorCQljYXNlIFBHUkVTX0NPUFlfT1VUOgorCQkJLyogb2sgKi8K KwkJCWJyZWFrOworCisJCWNhc2UgUEdSRVNfTk9ORkFUQUxfRVJST1I6CisJCWNhc2UgUEdSRVNf RkFUQUxfRVJST1I6CisJCQl0ZXN0X2RlcGFyc2VyX3JlcG9ydF9lcnJvcihOVUxMLCByZXMpOwor CQkJYnJlYWs7CisKKwkJY2FzZSBQR1JFU19DT1BZX0lOOgorCQkJUFFwdXRDb3B5RW5kKGNvbm4s IE5VTEwpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiVW5leHBlY3Rl ZCByZXN1bHRzOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwkJCWJyZWFrOworCX0KKwor CVBRY2xlYXIocmVzKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfZGVwYXJzZXJfc3dpdGNoX3Jv bGUodm9pZCkKK3sKKwlQR3Jlc3VsdCAgICpyZXM7CisKKwlyZXMgPSBQUWV4ZWMoY29ubiwgIlNF TEVDVCBDVVJSRU5UX1VTRVIsIFNFU1NJT05fVVNFUiIpOworCisJaWYgKFBRcmVzdWx0U3RhdHVz KHJlcykgIT0gUEdSRVNfVFVQTEVTX09LIHx8CisJCQlQUW50dXBsZXMocmVzKSAhPSAxKQorCQll bG9nKEVSUk9SLCAiZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKworCWN1cnJl bnRfcm9sZSA9IHBzdHJkdXAoUFFnZXR2YWx1ZShyZXMsIDAsIDApKTsKKwlzZXNzaW9uX3JvbGUg PSBwc3RyZHVwKFBRZ2V0dmFsdWUocmVzLCAwLCAxKSk7CisJZWxvZyhMT0csICJDVVJSRU5UX1VT RVI6ICVzLCBTRVNTSU9OX1VTRVI6ICVzIiwgY3VycmVudF9yb2xlLCBzZXNzaW9uX3JvbGUpOwor CVBRY2xlYXIocmVzKTsKKworCXRlc3RfZGVwYXJzZXJfcmVkaXJlY3RfY21kKCJSRVNFVCBST0xF Iik7CisJdGVzdF9kZXBhcnNlcl9yZWRpcmVjdF9jbWQoIlJFU0VUIFNFU1NJT04gQVVUSE9SSVpB VElPTiIpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9kZXBhcnNlcl9yZXN0b3JlX3JvbGUodm9p ZCkKK3sKKwlTdHJpbmdJbmZvRGF0YSBjbWQ7CisKKwlpbml0U3RyaW5nSW5mbygmY21kKTsKKwlh cHBlbmRTdHJpbmdJbmZvKCZjbWQsICJTRVQgU0VTU0lPTiBBVVRIT1JJWkFUSU9OICVzIiwgc2Vz c2lvbl9yb2xlKTsKKwllbG9nKExPRywgIlNFVCBTRVNTSU9OIFJPTEUgQkFDSyBUTzogJXMiLCBz ZXNzaW9uX3JvbGUpOworCisJdGVzdF9kZXBhcnNlcl9yZWRpcmVjdF9jbWQoY21kLmRhdGEpOwor CisJcmVzZXRTdHJpbmdJbmZvKCZjbWQpOworCWFwcGVuZFN0cmluZ0luZm8oJmNtZCwgIlNFVCBS T0xFICVzIiwgY3VycmVudF9yb2xlKTsKKwllbG9nKExPRywgIlNFVCBST0xFIEJBQ0sgVE86ICVz IiwgY3VycmVudF9yb2xlKTsKKworCXRlc3RfZGVwYXJzZXJfcmVkaXJlY3RfY21kKGNtZC5kYXRh KTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfZGVwYXJzZXJfY2xlYW5fc3RhdGVtZW50KHZvaWQp Cit7CisJU3RyaW5nSW5mb0RhdGEgY2xlYW5jbWQ7CisKKwkvKiBDbGVhbiB0aGUgb2xkIGRlcGFy c2VkIGNvbW1hbmRzLiAqLworCWluaXRTdHJpbmdJbmZvKCZjbGVhbmNtZCk7CisJYXBwZW5kU3Ry aW5nSW5mbygmY2xlYW5jbWQsCisJCQkJCSAiREVMRVRFIEZST00gcHVibGljLmRlcGFyc2VfdGVz dF9jb21tYW5kcyBXSEVSRSB0ZXN0X25hbWUgPSAnJXMnIiwKKwkJCQkJIGFwcGxpY2F0aW9uX25h bWUpOworCXRlc3RfZGVwYXJzZXJfcmVkaXJlY3RfY21kKGNsZWFuY21kLmRhdGEpOworfQorCisK K3N0YXRpYyBMaXN0ICoKK2NoYW5nZV9kZXBhcnNlZF9zdG10KFBsYW5uZWRTdG10ICpwc3RtdCwg Y29uc3QgY2hhciAqcXVlcnlTdHJpbmcpCit7CisJTGlzdAkgICAqbnN0bXRfbGlzdCA9IE5JTDsK KwlMaXN0CSAgICpwYXJzZXRyZWVfbGlzdDsKKwlMaXN0Q2VsbCAgICpsYzsKKwlQR3Jlc3VsdCAg ICpyZXM7CisJaW50CQkJaTsKKwlTdHJpbmdJbmZvRGF0YSBjbWQ7CisJTm9kZSAqcGFyc2V0cmVl ID0gcHN0bXQtPnV0aWxpdHlTdG10OworCisJLyoKKwkgKiBYWFggdGhlIHN0YXRlbWVudCAiUkVJ TkRFWCBTQ0hFTUEgQ09OQ1VSUkVOVExZIDp0ZW1wX3NjaGVtYV9uYW1lIiBpbgorCSAqIGNyZWF0 ZV9pbmRleC5zcWwgY2Fubm90IGJlIHJlZGlyZWN0ZWQgdG8gYW5vdGhlciBkYXRhYmFzZS4gVGhp cyBpcworCSAqIGJlY2F1c2UgdGhlIHRlbXBfc2NoZW1hX25hbWUgaGFzIGFscmVhZHkgYmVlbiBy ZXBsYWNlZCB3aXRoIHRoZQorCSAqIHRlbXBvcmFyeSBzY2hlbWEgbmFtZSBpbiB0aGUgY3VycmVu dCBzZXNzaW9uIChwZ190ZW1wXzMgaW4gdGhpcyBjYXNlKSwKKwkgKiBhbmQgdGhlIHNjaGVtYSBu YW1lIHdpbGwgbm90IGJlIHRoZSBzYW1lIGluIGFub3RoZXIgc2Vzc2lvbi4gU28sIHdlIHNraXAK KwkgKiByZWRpcmVjdGluZyB0aGVzZSBSRUlOREVYIFNDRUhBTSBzdGF0ZW1lbnRzLiBOb3RlIHRo YXQgYWx0aG91Z2ggdGhpcyBtYXkKKwkgKiBiZSBhY2NlcHRhYmxlIGZvciBub3cgaWYgd2Ugb25s eSB3YW50IHRvIHRlc3QgdGhlIEFMVEVSL0NSRUFURSBUQUJMRSwgaXQKKwkgKiB3aWxsIG5lZWQg dG8gYmUgZml4ZWQgaWYgd2UgcGxhbiBvbiBzdXBwb3J0aW5nIGRlcGFyc2UgSU5ERVggZGRsCisJ ICogc3RhdGVtZW50cyBpbiB0aGUgZnV0dXJlLgorCSAqLworCWlmIChJc0EocGFyc2V0cmVlLCBS ZWluZGV4U3RtdCkpCisJeworCQlSZWluZGV4U3RtdCAqcmVpbmRleCA9IChSZWluZGV4U3RtdCAq KSBwYXJzZXRyZWU7CisJCWlmIChyZWluZGV4LT5raW5kID09IFJFSU5ERVhfT0JKRUNUX1NDSEVN QSkKKwkJCXJldHVybiBsaXN0X21ha2UxKHBzdG10KTsKKwl9CisKKwl0ZXN0X2RlcGFyc2VyX2Nv bm5lY3QoKTsKKworCS8qIFJlZGlyZWN0IHRoZSBzdGF0ZW1lbnQgdG8gdGhlIHRlbXAgZGF0YWJh c2UuICovCisJdGVzdF9kZXBhcnNlcl9yZWRpcmVjdF9jbWQocXVlcnlTdHJpbmcpOworCisJaW5p dFN0cmluZ0luZm8oJmNtZCk7CisKKwkvKgorCSAqIFRoZSB0ZXN0IG1heSBoYXZlIHN3dGljaGVk IHRoZSBjdXJyZW50IHJvbGUgdG8gYW4gdW50cnVzdGVkIHVzZXIsIHdlCisJICogbmVlZCB0byBz d2l0Y2ggdG8gYSBzYWZlIHVzZXIgdGVtcG9yYXJpbHkgdG8gYWNjZXNzIHRoZSBkZXBhcnNlZAor CSAqIGNvbW1hbmRzIGluIHRoZSByZW1vdGUgdGFibGUuCisJICovCisJdGVzdF9kZXBhcnNlcl9z d2l0Y2hfcm9sZSgpOworCisJYXBwZW5kU3RyaW5nSW5mbygmY21kLCAiU0VMRUNUIGNvbW1hbmQs IHRlc3RfbmFtZSBGUk9NIHB1YmxpYy5kZXBhcnNlX3Rlc3RfY29tbWFuZHMgV0hFUkUgdGVzdF9u YW1lID0gJyVzJzsiLCBhcHBsaWNhdGlvbl9uYW1lKTsKKworCS8qIFF1ZXJ5IHRoZSBkZXBhcnNl ZCBzdGF0ZW1lbnQuICovCisJcmVzID0gUFFleGVjKGNvbm4sIGNtZC5kYXRhKTsKKwlpZiAoUFFy ZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19UVVBMRVNfT0sgJiYKKwkJUFFyZXN1bHRTdGF0dXMo cmVzKSAhPSBQR1JFU19DT01NQU5EX09LKQorCQllbG9nKEVSUk9SLCAiZmFpbGVkOiAlcyIsIFBR ZXJyb3JNZXNzYWdlKGNvbm4pKTsKKworCWlmIChQUW50dXBsZXMocmVzKSA9PSAwKQorCXsKKwkJ UFFjbGVhcihyZXMpOworCQl0ZXN0X2RlcGFyc2VyX3Jlc3RvcmVfcm9sZSgpOworCQlyZXR1cm4g bGlzdF9tYWtlMShwc3RtdCk7CisJfQorCisJcmVzZXRTdHJpbmdJbmZvKCZjbWQpOworCisJZm9y IChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCisJeworCQlhcHBlbmRTdHJpbmdJbmZv KCZjbWQsICIlczsiLCBQUWdldHZhbHVlKHJlcywgaSwgMCkpOworCQllbG9nKExPRywgInJlc3Vs dDogJXMiLCBQUWdldHZhbHVlKHJlcywgaSwgMCkpOworCX0KKworCVBRY2xlYXIocmVzKTsKKwor CS8qIENsZWFuIHRoZSBvbGQgZGVwYXJzZWQgY29tbWFuZHMuICovCisJdGVzdF9kZXBhcnNlcl9j bGVhbl9zdGF0ZW1lbnQoKTsKKworCXRlc3RfZGVwYXJzZXJfcmVzdG9yZV9yb2xlKCk7CisKKwlw YXJzZXRyZWVfbGlzdCA9IHBnX3BhcnNlX3F1ZXJ5KGNtZC5kYXRhKTsKKworCS8qCisJICogT25l IHN0YXRtZW50IGNvdWxkIGJlIGRlcGFyc2VkIGludG8gbXVsaXRpcGxlIHN0YXRlbWVudHMsIGZv ciBleGFtcGxlOgorCSAqICJEUk9QIFRBQkxFIHQxLHQyIiB3aWxsIGJlIGRlcGFyc2VkIGludG8g IkRST1AgVEFCTEUgdDEiIEFORCAiRFJPUCBUQUJMRQorCSAqIHQyIi4gU28gd2UgbmVlZCB0byBt YWludGFpbiB0aGVtIGluIGEgbGlzdC4KKwkgKi8KKwlmb3JlYWNoKGxjLCBwYXJzZXRyZWVfbGlz dCkKKwl7CisJCUxpc3QJICAgKnBsYW5zOworCQlSYXdTdG10ICAgICpycyA9IGxmaXJzdF9ub2Rl KFJhd1N0bXQsIGxjKTsKKwkJTGlzdAkgICAqcXVlcnl0cmVlX2xpc3Q7CisKKwkJcXVlcnl0cmVl X2xpc3QgPSBwZ19hbmFseXplX2FuZF9yZXdyaXRlX2ZpeGVkcGFyYW1zKHJzLCBjbWQuZGF0YSwK KwkJCQkJCQkJCQkJCQkJCU5VTEwsIDAsIE5VTEwpOworCQlBc3NlcnQobGlzdF9sZW5ndGgocXVl cnl0cmVlX2xpc3QpID09IDEpOworCisJCXBsYW5zID0gcGdfcGxhbl9xdWVyaWVzKHF1ZXJ5dHJl ZV9saXN0LCBjbWQuZGF0YSwKKwkJCQkJCQkJQ1VSU09SX09QVF9QQVJBTExFTF9PSywgTlVMTCk7 CisJCUFzc2VydChsaXN0X2xlbmd0aChwbGFucykgPT0gMSk7CisKKwkJbnN0bXRfbGlzdCA9IGxh cHBlbmQobnN0bXRfbGlzdCwgbGluaXRpYWwocGxhbnMpKTsKKwl9CisKKwlyZXR1cm4gbnN0bXRf bGlzdDsKK30KKworLyoKKyAqIFByb2Nlc3NVdGlsaXR5IGhvb2sKKyAqLworc3RhdGljIHZvaWQK K3RkZXBhcnNlcl9Qcm9jZXNzVXRpbGl0eShQbGFubmVkU3RtdCAqcHN0bXQsIGNvbnN0IGNoYXIg KnF1ZXJ5U3RyaW5nLAorCQkJCQkJIGJvb2wgcmVhZE9ubHlUcmVlLAorCQkJCQkJIFByb2Nlc3NV dGlsaXR5Q29udGV4dCBjb250ZXh0LAorCQkJCQkJIFBhcmFtTGlzdEluZm8gcGFyYW1zLCBRdWVy eUVudmlyb25tZW50ICpxdWVyeUVudiwKKwkJCQkJCSBEZXN0UmVjZWl2ZXIgKmRlc3QsIFF1ZXJ5 Q29tcGxldGlvbiAqcWMpCit7CisJTGlzdCAqbnBsYW5fbGlzdDsKKwlMaXN0Q2VsbCAqbGM7CisJ Q29tbWFuZFRhZyB0YWcgPSBDcmVhdGVDb21tYW5kVGFnKHBzdG10LT51dGlsaXR5U3RtdCk7CisK KwlpZiAobmVzdGluZ19sZXZlbCA9PSAwICYmCisJCQl0YWcgIT0gQ01EVEFHX0NSRUFURV9ST0xF ICYmCisJCQl0YWcgIT0gQ01EVEFHX0RST1BfUk9MRSAmJgorCQkJdGFnICE9IENNRFRBR19DUkVB VEVfVEFCTEVTUEFDRSAmJgorCQkJdGFnICE9IENNRFRBR19EUk9QX1RBQkxFU1BBQ0UpCisJCW5w bGFuX2xpc3QgPSAgY2hhbmdlX2RlcGFyc2VkX3N0bXQocHN0bXQsIHF1ZXJ5U3RyaW5nKTsKKwll bHNlCisJCW5wbGFuX2xpc3QgPSBsaXN0X21ha2UxKHBzdG10KTsKKworCW5lc3RpbmdfbGV2ZWwr KzsKKwlQR19UUlkoKTsKKwl7CisJCWZvcmVhY2gobGMsIG5wbGFuX2xpc3QpCisJCXsKKwkJCVBs YW5uZWRTdG10ICpwbGFuID0gKFBsYW5uZWRTdG10ICopIGxmaXJzdChsYyk7CisJCQlpZiAocHJl dl9Qcm9jZXNzVXRpbGl0eSkKKwkJCQlwcmV2X1Byb2Nlc3NVdGlsaXR5KHBsYW4sIHF1ZXJ5U3Ry aW5nLCByZWFkT25seVRyZWUsCisJCQkJCQkJCQljb250ZXh0LCBwYXJhbXMsIHF1ZXJ5RW52LAor CQkJCQkJCQkJZGVzdCwgcWMpOworCQkJZWxzZQorCQkJCXN0YW5kYXJkX1Byb2Nlc3NVdGlsaXR5 KHBsYW4sIHF1ZXJ5U3RyaW5nLCByZWFkT25seVRyZWUsCisJCQkJCQkJCQkJY29udGV4dCwgcGFy YW1zLCBxdWVyeUVudiwKKwkJCQkJCQkJCQlkZXN0LCBxYyk7CisJCX0KKwl9CisJUEdfRklOQUxM WSgpOworCXsKKwkJbmVzdGluZ19sZXZlbC0tOworCQl0ZXN0X2RlcGFyc2VyX2NsZWFuX2VycmRh dGEoZmFsc2UpOworCX0KKwlQR19FTkRfVFJZKCk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZGVwYXJz ZXJfRXhlY3V0b3JTdGFydChRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncykKK3sKKwkv KiBSZWRpcmVjdCB0aGUgc3RhdGVtZW50IHRvIHRoZSB0ZW1wIGRhdGFiYXNlLiAqLworCWlmIChk ZWJ1Z19xdWVyeV9zdHJpbmcgJiYgbmVzdGluZ19sZXZlbCA9PSAwKQorCXsKKwkJdGVzdF9kZXBh cnNlcl9jb25uZWN0KCk7CisJCXRlc3RfZGVwYXJzZXJfcmVkaXJlY3RfY21kKGRlYnVnX3F1ZXJ5 X3N0cmluZyk7CisJCXRlc3RfZGVwYXJzZXJfY2xlYW5fc3RhdGVtZW50KCk7CisJfQorCisJaWYg KHByZXZfRXhlY3V0b3JTdGFydCkKKwkJcHJldl9FeGVjdXRvclN0YXJ0KHF1ZXJ5RGVzYywgZWZs YWdzKTsKKwllbHNlCisJCXN0YW5kYXJkX0V4ZWN1dG9yU3RhcnQocXVlcnlEZXNjLCBlZmxhZ3Mp OworfQorCisvKgorICogRXhlY3V0b3JSdW4gaG9vazogYWxsIHdlIG5lZWQgZG8gaXMgdHJhY2sg bmVzdGluZyBkZXB0aAorICovCitzdGF0aWMgdm9pZAordGRlcGFyc2VyX0V4ZWN1dG9yUnVuKFF1 ZXJ5RGVzYyAqcXVlcnlEZXNjLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwgdWludDY0IGNvdW50 LAorCQkJCQkgIGJvb2wgZXhlY3V0ZV9vbmNlKQoreworCW5lc3RpbmdfbGV2ZWwrKzsKKwlQR19U UlkoKTsKKwl7CisJCWlmIChwcmV2X0V4ZWN1dG9yUnVuKQorCQkJcHJldl9FeGVjdXRvclJ1bihx dWVyeURlc2MsIGRpcmVjdGlvbiwgY291bnQsIGV4ZWN1dGVfb25jZSk7CisJCWVsc2UKKwkJCXN0 YW5kYXJkX0V4ZWN1dG9yUnVuKHF1ZXJ5RGVzYywgZGlyZWN0aW9uLCBjb3VudCwgZXhlY3V0ZV9v bmNlKTsKKwl9CisJUEdfRklOQUxMWSgpOworCXsKKwkJbmVzdGluZ19sZXZlbC0tOworCX0KKwlQ R19FTkRfVFJZKCk7Cit9CisKK3N0YXRpYyBQbGFubmVkU3RtdCAqCit0ZGVwYXJzZXJfcGxhbm5l cihRdWVyeSAqcGFyc2UsCisJCWNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJaW50IGN1cnNv ck9wdGlvbnMsCisJCVBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMpCit7CisJUGxhbm5lZFN0bXQg KnJlc3VsdDsKKworCW5lc3RpbmdfbGV2ZWwrKzsKKwlQR19UUlkoKTsKKwl7CisJCWlmIChwcmV2 X3BsYW5uZXJfaG9vaykKKwkJCXJlc3VsdCA9IHByZXZfcGxhbm5lcl9ob29rKHBhcnNlLCBxdWVy eV9zdHJpbmcsIGN1cnNvck9wdGlvbnMsIGJvdW5kUGFyYW1zKTsKKwkJZWxzZQorCQkJcmVzdWx0 ID0gc3RhbmRhcmRfcGxhbm5lcihwYXJzZSwgcXVlcnlfc3RyaW5nLCBjdXJzb3JPcHRpb25zLCBi b3VuZFBhcmFtcyk7CisJfQorCVBHX0ZJTkFMTFkoKTsKKwl7CisJCW5lc3RpbmdfbGV2ZWwtLTsK Kwl9CisJUEdfRU5EX1RSWSgpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworUEdfRlVOQ1RJT05f SU5GT19WMSh0ZXN0X2RlcGFyc2VyX2Ryb3BfY29tbWFuZCk7CisKK0RhdHVtCit0ZXN0X2RlcGFy c2VyX2Ryb3BfY29tbWFuZChQR19GVU5DVElPTl9BUkdTKQoreworCXNsaXN0X2l0ZXIJaXRlcjsK KworCS8qIERyb3AgY29tbWFuZHMgYXJlIG5vdCBwYXJ0IGNvbW1hbmRsaXN0IGJ1dCBoYW5kbGVk IGhlcmUgYXMgcGFydCBvZiBTUUxEcm9wTGlzdCAqLworCXNsaXN0X2ZvcmVhY2goaXRlciwgJihj dXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPlNRTERyb3BMaXN0KSkKKwl7CisJCVNRTERyb3BPYmpl Y3QgKm9iajsKKwkJRXZlbnRUcmlnZ2VyRGF0YSAqdHJpZ2RhdGE7CisKKwkJdHJpZ2RhdGEgPSAo RXZlbnRUcmlnZ2VyRGF0YSAqKSBmY2luZm8tPmNvbnRleHQ7CisKKwkJb2JqID0gc2xpc3RfY29u dGFpbmVyKFNRTERyb3BPYmplY3QsIG5leHQsIGl0ZXIuY3VyKTsKKworCQlpZiAoIW9iai0+b3Jp Z2luYWwpCisJCQljb250aW51ZTsKKworCQlpZiAoc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInRh YmxlIikgPT0gMCkKKwkJeworCQkJY2hhcgkqY29tbWFuZDsKKworCQkJY29tbWFuZCA9IGRlcGFy c2VfZHJvcF90YWJsZShvYmotPm9iamlkZW50aXR5LCB0cmlnZGF0YS0+cGFyc2V0cmVlKTsKKwkJ CWlmIChjb21tYW5kKQorCQkJeworCQkJCVN0cmluZ0luZm9EYXRhIGNtZDsKKworCQkJCWNvbW1h bmQgPSBkZXBhcnNlX2RkbF9qc29uX3RvX3N0cmluZyhjb21tYW5kKTsKKwkJCQlpbml0U3RyaW5n SW5mbygmY21kKTsKKworCQkJCWFwcGVuZFN0cmluZ0luZm8oJmNtZCwgIklOU0VSVCBJTlRPIHB1 YmxpYy5kZXBhcnNlX3Rlc3RfY29tbWFuZHMgIgorCQkJCQkJIih0ZXN0X25hbWUsIGNvbW1hbmQp ICIKKwkJCQkJCSJTRUxFQ1QgY3VycmVudF9zZXR0aW5nKCdhcHBsaWNhdGlvbl9uYW1lJyksICcl cyciLAorCQkJCQkJY29tbWFuZCk7CisKKwkJCQkvKiBpbnNlcnQgZGVwYXJzZWQgc3RhdGVtZW50 IGludG8gdGFibGUgKi8KKwkJCQlTUElfY29ubmVjdCgpOworCQkJCWlmIChTUElfZXhlYyhjbWQu ZGF0YSwgOCkgIT0gU1BJX09LX0lOU0VSVCkKKwkJCQkJZWxvZyhFUlJPUiwgIlNQSV9leGVjIGZh aWxlZDogJXMiLCBjbWQuZGF0YSk7CisJCQkJU1BJX2ZpbmlzaCgpOworCQkJfQorCQl9CisJfQor CisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKK30KKworLyogTW9kdWxlIGxvYWQgZnVu Y3Rpb24gKi8KK3ZvaWQKK19QR19pbml0KHZvaWQpCit7CisJaWYgKHN0cmNtcChnZXRfZGF0YWJh c2VfbmFtZShNeURhdGFiYXNlSWQpLCAiZGVwYXJzZXJfcmVncmVzcyIpID09IDApCisJCXJldHVy bjsKKworCXByZXZfUHJvY2Vzc1V0aWxpdHkgPSBQcm9jZXNzVXRpbGl0eV9ob29rOworCVByb2Nl c3NVdGlsaXR5X2hvb2sgPSB0ZGVwYXJzZXJfUHJvY2Vzc1V0aWxpdHk7CisKKwlwcmV2X0V4ZWN1 dG9yUnVuID0gRXhlY3V0b3JSdW5faG9vazsKKwlFeGVjdXRvclJ1bl9ob29rID0gdGRlcGFyc2Vy X0V4ZWN1dG9yUnVuOworCisJcHJldl9FeGVjdXRvclN0YXJ0ID0gRXhlY3V0b3JTdGFydF9ob29r OworCUV4ZWN1dG9yU3RhcnRfaG9vayA9IHRkZXBhcnNlcl9FeGVjdXRvclN0YXJ0OworCisJcHJl dl9wbGFubmVyX2hvb2sgPSBwbGFubmVyX2hvb2s7CisJcGxhbm5lcl9ob29rID0gdGRlcGFyc2Vy X3BsYW5uZXI7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGVwYXJzZXIv dGVzdF9kZXBhcnNlci5jb25mIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RlcGFyc2VyL3Rlc3Rf ZGVwYXJzZXIuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4zNTg2 NWI1YzVhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RlcGFyc2Vy L3Rlc3RfZGVwYXJzZXIuY29uZgpAQCAtMCwwICsxIEBACitzZXNzaW9uX3ByZWxvYWRfbGlicmFy aWVzID0gJ3Rlc3RfZGVwYXJzZXInCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf ZGVwYXJzZXIvdGVzdF9kZXBhcnNlci5jb250cm9sIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Rl cGFyc2VyL3Rlc3RfZGVwYXJzZXIuY29udHJvbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwLi5jM2U5ZWFmMDY0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2RlcGFyc2VyL3Rlc3RfZGVwYXJzZXIuY29udHJvbApAQCAtMCwwICsxLDQgQEAKK2Nv bW1lbnQgPSAnVGVzdCBjb2RlIGZvciBEREwgZGVwYXJzZSBmZWF0dXJlJworZGVmYXVsdF92ZXJz aW9uID0gJzEuMCcKK21vZHVsZV9wYXRobmFtZSA9ICckbGliZGlyL3Rlc3RfZGVwYXJzZXInCity ZWxvY2F0YWJsZSA9IHRydWUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCi0tIAoyLjMwLjAu d2luZG93cy4yCgo= --_005_OS0PR01MB5716A47D23EFAF988475D4A99431AOS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="0001-Deparser-for-Create-And-Drop-Table-DDL-co-2023_06_30.patch" Content-Description: 0001-Deparser-for-Create-And-Drop-Table-DDL-co-2023_06_30.patch Content-Disposition: attachment; filename="0001-Deparser-for-Create-And-Drop-Table-DDL-co-2023_06_30.patch"; size=100431; creation-date="Tue, 11 Jul 2023 10:51:27 GMT"; modification-date="Tue, 11 Jul 2023 11:01:17 GMT" Content-Transfer-Encoding: base64 RnJvbSBiNGVjNzNkNDI1OThlNzIxODI1MWQzNWRhMjljOGFhYzc3ODFhMzgxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaHZldGEgTWFsaWsgPHNodmV0YS5tYWxpa0BnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMjIgTWF5IDIwMjMgMDg6MzY6NDkgKzA1MzAKU3ViamVjdDogW1BBVENIIDEv NV0gRGVwYXJzZXIgZm9yIENyZWF0ZSBBbmQgRHJvcCBUYWJsZSBEREwgY29tbWFuZHMuCgpUaGlz IHBhdGNoIGNvbnN0cnVjdHMgSlNPTiBibG9icyByZXByZXNlbnRpbmcgRERMIGNvbW1hbmRzLCB3 aGljaCBjYW4KbGF0ZXIgYmUgcmUtcHJvY2Vzc2VkIGludG8gcGxhaW4gc3RyaW5ncyBieSB3ZWxs LWRlZmluZWQgc3ByaW50Zi1saWtlCmV4cGFuc2lvbi4gVGhlc2UgSlNPTiBvYmplY3RzIGFyZSBp bnRlbmRlZCB0byBhbGxvdyBmb3IgbWFjaGluZS1lZGl0aW5nIG9mCnRoZSBjb21tYW5kcywgYnkg cmVwbGFjaW5nIGNlcnRhaW4gbm9kZXMgd2l0aGluIHRoZSBvYmplY3RzLgoKTXVjaCBvZiB0aGUg aW5mb3JtYXRpb24gaW4gdGhlIG91dHB1dCBibG9iIGFjdHVhbGx5IGNvbWVzIGZyb20gc3lzdGVt CmNhdGFsb2dzLCBub3QgZnJvbSB0aGUgY29tbWFuZCBwYXJzZSBub2RlLCBhcyBpdCBpcyBpbXBv c3NpYmxlIHRvIHJlbGlhYmx5CmNvbnN0cnVjdCBhIGZ1bGx5LXNwZWNpZmllZCBjb21tYW5kIChp LmUuIG9uZSBub3QgZGVwZW5kZW50IG9uIHNlYXJjaF9wYXRoCmV0YykgbG9va2luZyBvbmx5IGF0 IHRoZSBwYXJzZSBub2RlLgoKVGhpcyBwcm92aWRlcyBhIGJhc2UgZm9yIGxvZ2ljYWwgcmVwbGlj YXRpb24gb2YgRERMIHN0YXRlbWVudHMuIEN1cnJlbnRseSwKdGhlIHBhdGNoIGhhcyBzdXBwb3J0 IGZvciBDUkVBVEUgYW5kIERST1AgVEFCTEUKLS0tCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX2lu aGVyaXRzLmMgICAgIHwgICAzNiArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZSAgICAg ICAgIHwgICAgMiArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxkZXBhcnNlLmMgICAgIHwgMTg5 MSArKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxqc29u LmMgICAgICAgIHwgIDc1OSArKysrKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90 cmlnZ2VyLmMgIHwgICAgMSArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9tZXNvbi5idWlsZCAgICAg IHwgICAgMiArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jICAgICAgIHwgICA0MyAr CiBzcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyAgICAgIHwgICAgMyArLQogc3JjL2Jh Y2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYyAgICB8ICAgIDEgKwogc3JjL2JhY2tlbmQvcGFy dGl0aW9uaW5nL3BhcnRib3VuZHMuYyB8ICAgMjggKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zv cm1hdF90eXBlLmMgICB8ICAxMDggKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMu YyAgICAgfCAgIDUyICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2luaGVyaXRzLmggICAgIHwg ICAgMiArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgIHwgICAgNyArCiBz cmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oICAgICAgIHwgICAgOSArCiBzcmMvaW5jbHVk ZS9jb21tYW5kcy90YWJsZWNtZHMuaCAgICAgIHwgICAgMiArCiBzcmMvaW5jbHVkZS9ub2Rlcy9w YXJzZW5vZGVzLmggICAgICAgIHwgICAgMSArCiBzcmMvaW5jbHVkZS9wYXJ0aXRpb25pbmcvcGFy dGJvdW5kcy5oIHwgICAgMiArCiBzcmMvaW5jbHVkZS90Y29wL2RkbGRlcGFyc2UuaCAgICAgICAg IHwgICAyMSArCiBzcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oICAgICAgICAgIHwgICAgNSAr CiBzcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaCAgICAgICAgIHwgICAxMyArCiBzcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgIHwgICAgMiArCiAyMiBmaWxlcyBjaGFuZ2Vk LCAyOTc0IGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbGRlcGFyc2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy9iYWNrZW5kL2NvbW1hbmRzL2RkbGpzb24uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNs dWRlL3Rjb3AvZGRsZGVwYXJzZS5oCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9w Z19pbmhlcml0cy5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19pbmhlcml0cy5jCmluZGV4IGRh OTY5YmQyZjkuLjM2YjE2NDU3NWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdf aW5oZXJpdHMuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMKQEAgLTY1 NSwzICs2NTUsMzkgQEAgUGFydGl0aW9uSGFzUGVuZGluZ0RldGFjaChPaWQgcGFydG9pZCkKIAll bG9nKEVSUk9SLCAicmVsYXRpb24gJXUgaXMgbm90IGEgcGFydGl0aW9uIiwgcGFydG9pZCk7CiAJ cmV0dXJuIGZhbHNlOwkJCQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCiB9CisKKy8qCisgKiBH aXZlbiBhIHRhYmxlIE9JRCwgcmV0dXJuIGEgc2NoZW1hLXF1YWxpZmllZCB0YWJsZSBsaXN0IHJl cHJlc2VudGluZworICogdGhlIHBhcmVudCB0YWJsZXMuCisgKi8KK0xpc3QgKgorcmVsYXRpb25f Z2V0X2luaF9wYXJlbnRzKE9pZCBvYmplY3RJZCkKK3sKKwlMaXN0CSAgICpwYXJlbnRzID0gTklM OworCVJlbGF0aW9uCWluaFJlbDsKKwlTeXNTY2FuRGVzYyBzY2FuOworCVNjYW5LZXlEYXRhIGtl eTsKKwlIZWFwVHVwbGUJdHVwbGU7CisKKwlpbmhSZWwgPSB0YWJsZV9vcGVuKEluaGVyaXRzUmVs YXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlTY2FuS2V5SW5pdCgma2V5LAorCQkJCUFu dW1fcGdfaW5oZXJpdHNfaW5ocmVsaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09J REVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKworCXNjYW4gPSBzeXN0YWJs ZV9iZWdpbnNjYW4oaW5oUmVsLCBJbmhlcml0c1JlbGlkU2Vxbm9JbmRleElkLAorCQkJCQkJCSAg dHJ1ZSwgTlVMTCwgMSwgJmtleSk7CisKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSA9 IHN5c3RhYmxlX2dldG5leHQoc2NhbikpKQorCXsKKwkJRm9ybV9wZ19pbmhlcml0cyBmb3JtSW5o ID0gKEZvcm1fcGdfaW5oZXJpdHMpIEdFVFNUUlVDVCh0dXBsZSk7CisKKwkJcGFyZW50cyA9IGxh cHBlbmRfb2lkKHBhcmVudHMsIGZvcm1JbmgtPmluaHBhcmVudCk7CisJfQorCisJc3lzdGFibGVf ZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShpbmhSZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOwor CisJcmV0dXJuIHBhcmVudHM7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9N YWtlZmlsZSBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCmluZGV4IDQ4ZjczNDhmOTEu LjA3NmFjNGViMzEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCkBAIC0yOSw2ICsyOSw4IEBAIE9CSlMg PSBcCiAJY29weXRvLm8gXAogCWNyZWF0ZWFzLm8gXAogCWRiY29tbWFuZHMubyBcCisJZGRsZGVw YXJzZS5vIFwKKwlkZGxqc29uLm8gXAogCWRlZmluZS5vIFwKIAlkaXNjYXJkLm8gXAogCWRyb3Bj bWRzLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsZGVwYXJzZS5jIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsZGVwYXJzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAuLmM4ZTg4NWNhMWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9kZGxkZXBhcnNlLmMKQEAgLTAsMCArMSwxODkxIEBACisvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqCisgKiBkZGxkZXBhcnNlLmMKKyAqCSAgRnVuY3Rpb25zIHRvIGNvbnZlcnQgdXRp bGl0eSBjb21tYW5kcyB0byBtYWNoaW5lLXBhcnNlYWJsZQorICoJICByZXByZXNlbnRhdGlvbgor ICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIzLCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdl bnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBOT1RFUworICoKKyAq IFRoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBKU09OIGJsb2JzIHJlcHJlc2VudGluZyBEREwg Y29tbWFuZHMsIHdoaWNoIGNhbgorICogbGF0ZXIgYmUgcmUtcHJvY2Vzc2VkIGludG8gcGxhaW4g c3RyaW5ncyBieSB3ZWxsLWRlZmluZWQgc3ByaW50Zi1saWtlCisgKiBleHBhbnNpb24uICBUaGVz ZSBKU09OIG9iamVjdHMgYXJlIGludGVuZGVkIHRvIGFsbG93IGZvciBtYWNoaW5lLWVkaXRpbmcg b2YKKyAqIHRoZSBjb21tYW5kcywgYnkgcmVwbGFjaW5nIGNlcnRhaW4gbm9kZXMgd2l0aGluIHRo ZSBvYmplY3RzLgorICoKKyAqIE11Y2ggb2YgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBvdXRwdXQg YmxvYiBhY3R1YWxseSBjb21lcyBmcm9tIHN5c3RlbQorICogY2F0YWxvZ3MsIG5vdCBmcm9tIHRo ZSBjb21tYW5kIHBhcnNlIG5vZGUsIGFzIGl0IGlzIGltcG9zc2libGUgdG8gcmVsaWFibHkKKyAq IGNvbnN0cnVjdCBhIGZ1bGx5LXNwZWNpZmllZCBjb21tYW5kIChpLmUuIG9uZSBub3QgZGVwZW5k ZW50IG9uIHNlYXJjaF9wYXRoCisgKiBldGMpIGxvb2tpbmcgb25seSBhdCB0aGUgcGFyc2Ugbm9k ZS4KKyAqCisgKiBEZXBhcnNlZCBKc29uYlZhbHVlIGlzIGNyZWF0ZWQgYnkgdXNpbmc6CisgKiAJ bmV3X2pzb25iX1ZBIHdoZXJlIHRoZSBrZXktdmFsdWUgcGFpcnMgY29tcG9zaW5nIGFuIGpzb25i IG9iamVjdCBjYW4gYmUKKyAqIAlkZXJpdmVkIHVzaW5nIHRoZSBwYXNzZWQgdmFyaWFibGUgYXJn dW1lbnRzLiBJbiBvcmRlciB0byBzdWNjZXNzZnVsbHkKKyAqICBjb25zdHJ1Y3Qgb25lIGtleTp2 YWx1ZSBwYWlyLCBhIHNldCBvZiB0aHJlZSBhcmd1bWVudHMgY29uc2lzdGluZyBvZiBhIG5hbWUK KyAqIAkoc3RyaW5nKSwgdHlwZSAoZnJvbSB0aGUgamJ2VHlwZSBlbnVtKSBhbmQgdmFsdWUgbXVz dCBiZSBzdXBwbGllZC4gSXQgY2FuCisgKiAgdGFrZSBtdWx0aXBsZSBzdWNoIHNldHMgYW5kIGNv bnN0cnVjdCBtdWx0aXBsZSBrZXktdmFsdWUgcGFpcnMgYW5kIGFwcGVuZAorICogIHRob3NlIHRv IG91dHB1dCBwYXJzZS1zdGF0ZS4KKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFj a2VuZC9jb21tYW5kcy9kZGxkZXBhcnNlLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor I2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvYW1hcGkuaCIKKyNpbmNs dWRlICJhY2Nlc3MvcmVsYXRpb24uaCIKKyNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKKyNpbmNs dWRlICJjYXRhbG9nL25hbWVzcGFjZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9u LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb25zdHJhaW50LmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ19kZXBlbmQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2luaGVyaXRzLmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wZ19uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3Byb2MuaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0u aCIKKyNpbmNsdWRlICJjb21tYW5kcy9zZXF1ZW5jZS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3Rh Ymxlc3BhY2UuaCIKKyNpbmNsdWRlICJjb21tYW5kcy90YWJsZWNtZHMuaCIKKyNpbmNsdWRlICJm dW5jYXBpLmgiCisjaW5jbHVkZSAicGFydGl0aW9uaW5nL3BhcnRib3VuZHMuaCIKKyNpbmNsdWRl ICJ0Y29wL2RkbGRlcGFyc2UuaCIKKyNpbmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIKKyNpbmNsdWRl ICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCisjaW5jbHVk ZSAidXRpbHMvanNvbmIuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRl ICJ1dGlscy9yZWwuaCIKKyNpbmNsdWRlICJ1dGlscy9ydWxldXRpbHMuaCIKKyNpbmNsdWRlICJ1 dGlscy9zeXNjYWNoZS5oIgorCisvKiBFc3RpbWF0ZWQgbGVuZ3RoIG9mIHRoZSBnZW5lcmF0ZWQg anNvbmIgc3RyaW5nICovCisjZGVmaW5lIEpTT05CX0VTVElNQVRFRF9MRU4gMTI4CisKKy8qCisg KiBSZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gUkVMUEVSU0lT VEVOQ0UgdmFsdWUuCisgKi8KK3N0YXRpYyBjaGFyICoKK2dldF9wZXJzaXN0ZW5jZV9zdHIoY2hh ciBwZXJzaXN0ZW5jZSkKK3sKKwlzd2l0Y2ggKHBlcnNpc3RlbmNlKQorCXsKKwkJY2FzZSBSRUxQ RVJTSVNURU5DRV9URU1QOgorCQkJcmV0dXJuICJURU1QT1JBUlkiOworCQljYXNlIFJFTFBFUlNJ U1RFTkNFX1VOTE9HR0VEOgorCQkJcmV0dXJuICJVTkxPR0dFRCI7CisJCWNhc2UgUkVMUEVSU0lT VEVOQ0VfUEVSTUFORU5UOgorCQkJcmV0dXJuIE5VTEw7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVS Uk9SLCAidW5leHBlY3RlZCBwZXJzaXN0ZW5jZSBtYXJraW5nICVjIiwKKwkJCQkgcGVyc2lzdGVu Y2UpOworCQkJcmV0dXJuIE5VTEw7CQkvKiBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisJfQorfQor CisvKgorICogSW5zZXJ0IEpzb25iVmFsdWUga2V5IHRvIHRoZSBvdXRwdXQgcGFyc2Ugc3RhdGUu CisgKi8KK3N0YXRpYyB2b2lkCitpbnNlcnRfanNvbmJfa2V5KEpzb25iUGFyc2VTdGF0ZSAqc3Rh dGUsIGNoYXIgKm5hbWUpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisKKwkvKiBQdXNoIHRoZSBrZXkg Ki8KKwlrZXkudHlwZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwgPSBuYW1lOwor CWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihuYW1lKTsKKwlwdXNoSnNvbmJWYWx1ZSgmc3Rh dGUsIFdKQl9LRVksICZrZXkpOworfQorCisvKgorICogQXBwZW5kIG5ldyBqc29uYiBrZXk6dmFs dWUgcGFpcnMgdG8gdGhlIG91dHB1dCBwYXJzZSBzdGF0ZSAtLSB2YXJhcmdzCisgKiBmdW5jdGlv bgorICoKKyAqIEFyZ3VtZW50czoKKyAqICJzdGF0ZSI6IHRoZSBvdXRwdXQganNvbmIgc3RhdGUg d2hlcmUgZWFjaCBrZXktdmFsdWUgcGFpciBpcyBwdXNoZWQuCisgKgorICogIm51bW9ianMiOiB0 aGUgbnVtYmVyIG9mIGtleTp2YWx1ZSBwYWlycyB0byBiZSBwdXNoZWQgdG8gSnNvbmJQYXJzZVN0 YXRlOworICogZm9yIGVhY2ggb25lLCBhIG5hbWUgKHN0cmluZyksIHR5cGUgKGZyb20gdGhlIGpi dlR5cGUgZW51bSkgYW5kIHZhbHVlIG11c3QKKyAqIGJlIHN1cHBsaWVkLiAgVGhlIHZhbHVlIG11 c3QgbWF0Y2ggdGhlIHR5cGUgZ2l2ZW47IGZvciBpbnN0YW5jZSwgamJ2Qm9vbAorICogcmVxdWly ZXMgYW4gYm9vbCwgamJ2U3RyaW5nIHJlcXVpcmVzIGEgY2hhciAqIGFuZCBzbyBvbi4KKyAqIEVh Y2ggZWxlbWVudCB0eXBlIG11c3QgbWF0Y2ggdGhlIGNvbnZlcnNpb24gc3BlY2lmaWVyIGdpdmVu IGluIHRoZSBmb3JtYXQKKyAqIHN0cmluZywgYXMgZGVzY3JpYmVkIGluIGRkbF9kZXBhcnNlX2V4 cGFuZF9jb21tYW5kLgorICoKKyAqIE5vdGVzOgorICogYSkgVGhlIGNhbGxlciBjYW4gcGFzcyAi Zm10IjoiZm10c3RyIiBhcyBhIHJlZ3VsYXIga2V5OnZhbHVlIHBhaXIgdG8gdGhpcywKKyAqIG5v IHNwZWNpYWwgaGFuZGxpbmcgbmVlZGVkIGZvciB0aGF0LgorICogYikgVGhlIGNhbGxlciBuZWVk IHRvIGNhcmVmdWxseSBwYXNzIHNldHMgb2YgYXJndW1lbnRzLCB3ZSBkb24ndCBoYXZlIHRoZQor ICogbHV4dXJ5IG9mIHNwcmludGYtbGlrZSBjb21waWxlciB3YXJuaW5ncyBmb3IgbWFsZm9ybWVk IGFyZ3VtZW50IGxpc3RzLgorICovCitzdGF0aWMgdm9pZAorbmV3X2pzb25iX1ZBKEpzb25iUGFy c2VTdGF0ZSAqc3RhdGUsIGludCBudW1vYmpzLC4uLikKK3sKKwl2YV9saXN0CQlhcmdzOworCWlu dAkJCWk7CisJSnNvbmJWYWx1ZQl2YWw7CisKKwkvKiBQcm9jZXNzIHRoZSBnaXZlbiB2YXJhcmdz ICovCisJdmFfc3RhcnQoYXJncywgbnVtb2Jqcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtb2Jq czsgaSsrKQorCXsKKwkJY2hhcgkgICAqbmFtZTsKKwkJZW51bSBqYnZUeXBlIHR5cGU7CisKKwkJ bmFtZSA9IHZhX2FyZyhhcmdzLCBjaGFyICopOworCQl0eXBlID0gdmFfYXJnKGFyZ3MsIGVudW0g amJ2VHlwZSk7CisKKwkJLyogUHVzaCB0aGUga2V5IGZpcnN0ICovCisJCWluc2VydF9qc29uYl9r ZXkoc3RhdGUsIG5hbWUpOworCisJCS8qCisJCSAqIEZvciBhbGwgcGFyYW0gdHlwZXMgb3RoZXIg dGhhbiBqYnZOdWxsLCB0aGVyZSBtdXN0IGJlIGEgdmFsdWUgaW4KKwkJICogdGhlIHZhcmFyZ3Mu IEZldGNoIGl0IGFuZCBhZGQgdGhlIGZ1bGx5IGZvcm1lZCBzdWJvYmplY3QgaW50byB0aGUKKwkJ ICogbWFpbiBvYmplY3QuCisJCSAqLworCQlzd2l0Y2ggKHR5cGUpCisJCXsKKwkJCWNhc2UgamJ2 TnVsbDoKKwkJCQkvKiBOdWxsIHBhcmFtcyBkb24ndCBoYXZlIGEgdmFsdWUgKG9idmlvdXNseSkg Ki8KKwkJCQl2YWwudHlwZSA9IGpidk51bGw7CisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBX SkJfVkFMVUUsICZ2YWwpOworCQkJCWJyZWFrOworCisJCQljYXNlIGpidkJvb2w6CisJCQkJLyog UHVzaCB0aGUgYm9vbCB2YWx1ZSAqLworCQkJCXZhbC50eXBlID0gamJ2Qm9vbDsKKwkJCQl2YWwu dmFsLmJvb2xlYW4gPSB2YV9hcmcoYXJncywgaW50KTsKKwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3Rh dGUsIFdKQl9WQUxVRSwgJnZhbCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgamJ2U3RyaW5nOgor CQkJCS8qIFB1c2ggdGhlIHN0cmluZyB2YWx1ZSAqLworCQkJCXZhbC50eXBlID0gamJ2U3RyaW5n OworCQkJCXZhbC52YWwuc3RyaW5nLnZhbCA9IHBzdHJkdXAodmFfYXJnKGFyZ3MsIGNoYXIgKikp OworCQkJCXZhbC52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbih2YWwudmFsLnN0cmluZy52YWwpOwor CQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX1ZBTFVFLCAmdmFsKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBqYnZOdW1lcmljOgorCQkJCS8qIFB1c2ggdGhlIG51bWVyaWMgdmFsdWUgKi8K KwkJCQl2YWwudHlwZSA9IGpidk51bWVyaWM7CisJCQkJdmFsLnZhbC5udW1lcmljID0gKE51bWVy aWMpCisJCQkJCURhdHVtR2V0TnVtZXJpYyhEaXJlY3RGdW5jdGlvbkNhbGwxKAorCQkJCQkJCQkJ CQkJCQlpbnQ4X251bWVyaWMsCisJCQkJCQkJCQkJCQkJCXZhX2FyZyhhcmdzLCBpbnQpKSk7CisK KwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9WQUxVRSwgJnZhbCk7CisJCQkJYnJlYWs7 CisKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBqYnZUeXBlICVk IiwgdHlwZSk7CisJCX0KKwl9CisKKwl2YV9lbmQoYXJncyk7Cit9CisKKy8qCisgKiBBIGhlbHBl ciByb3V0aW5lIHRvIGluc2VydCBqc29uYiBmb3IgdHlwSWQgdG8gdGhlIG91dHB1dCBwYXJzZSBz dGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK25ld19qc29uYl9mb3JfdHlwZShKc29uYlBhcnNlU3Rh dGUgKnN0YXRlLCBjaGFyICpwYXJlbnRLZXksCisJCQkJICAgT2lkIHR5cElkLCBpbnQzMiB0eXBt b2QpCit7CisJT2lkCQkJdHlwbnNwaWQ7CisJY2hhcgkgICAqdHlwZV9uc3A7CisJY2hhcgkgICAq dHlwZV9uYW1lID0gTlVMTDsKKwljaGFyCSAgICp0eXBtb2RzdHI7CisJYm9vbAkJdHlwZV9hcnJh eTsKKworCUFzc2VydChwYXJlbnRLZXkpOworCisJZm9ybWF0X3R5cGVfZGV0YWlsZWQodHlwSWQs IHR5cG1vZCwgJnR5cG5zcGlkLCAmdHlwZV9uYW1lLCAmdHlwbW9kc3RyLAorCQkJCQkJICZ0eXBl X2FycmF5KTsKKworCWlmIChPaWRJc1ZhbGlkKHR5cG5zcGlkKSkKKwkJdHlwZV9uc3AgPSBnZXRf bmFtZXNwYWNlX25hbWVfb3JfdGVtcCh0eXBuc3BpZCk7CisJZWxzZQorCQl0eXBlX25zcCA9IHBz dHJkdXAoIiIpOworCisJaW5zZXJ0X2pzb25iX2tleShzdGF0ZSwgcGFyZW50S2V5KTsKKwlwdXNo SnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCW5ld19qc29uYl9W QShzdGF0ZSwgNCwKKwkJCQkgInNjaGVtYW5hbWUiLCBqYnZTdHJpbmcsIHR5cGVfbnNwLAorCQkJ CSAidHlwZW5hbWUiLCBqYnZTdHJpbmcsIHR5cGVfbmFtZSwKKwkJCQkgInR5cG1vZCIsIGpidlN0 cmluZywgdHlwbW9kc3RyLAorCQkJCSAidHlwYXJyYXkiLCBqYnZCb29sLCB0eXBlX2FycmF5KTsK KwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKK30KKworLyoK KyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0IHVwIG5hbWU6IHNjaGVtYW5hbWUsIG9iam5hbWUK KyAqCisgKiBFbGVtZW50cyAic2NoZW1hX25hbWUiIGFuZCAib2JqX25hbWUiIGFyZSBzZXQuICBJ ZiB0aGUgbmFtZXNwYWNlIE9JRAorICogY29ycmVzcG9uZHMgdG8gYSB0ZW1wIHNjaGVtYSwgdGhh dCdzIHNldCB0byAicGdfdGVtcCIuCisgKgorICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aG9z ZSB0d28gZWxlbWVudCB0eXBlcyBpcyB3aGV0aGVyIHRoZSBvYmpfbmFtZSB3aWxsCisgKiBiZSBx dW90ZWQgYXMgYW4gaWRlbnRpZmllciBvciBub3QsIHdoaWNoIGlzIG5vdCBzb21ldGhpbmcgdGhh dCB0aGlzIHJvdXRpbmUKKyAqIGNvbmNlcm5zIGl0c2VsZiB3aXRoOyB0aGF0IHdpbGwgYmUgdXAg dG8gdGhlIGV4cGFuZCBmdW5jdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK25ld19qc29uYl9mb3Jf cXVhbG5hbWUoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgT2lkIG5zcGlkLCBjaGFyICpvYmpOYW1l LAorCQkJCQkgICBjaGFyICprZXlOYW1lLCBib29sIGNyZWF0ZU9iamVjdCkKK3sKKwljaGFyCSAg ICpuYW1lc3BhY2U7CisKKwlpZiAoaXNBbnlUZW1wTmFtZXNwYWNlKG5zcGlkKSkKKwkJbmFtZXNw YWNlID0gcHN0cmR1cCgicGdfdGVtcCIpOworCWVsc2UKKwkJbmFtZXNwYWNlID0gZ2V0X25hbWVz cGFjZV9uYW1lKG5zcGlkKTsKKworCS8qIFB1c2ggdGhlIGtleSBmaXJzdCAqLworCWlmIChrZXlO YW1lKQorCQlpbnNlcnRfanNvbmJfa2V5KHN0YXRlLCBrZXlOYW1lKTsKKworCWlmIChjcmVhdGVP YmplY3QpCisJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7 CisKKwluZXdfanNvbmJfVkEoc3RhdGUsIDIsCisJCQkJICJzY2hlbWFuYW1lIiwgamJ2U3RyaW5n LCBuYW1lc3BhY2UsCisJCQkJICJvYmpuYW1lIiwgamJ2U3RyaW5nLCBvYmpOYW1lKTsKKworCWlm IChjcmVhdGVPYmplY3QpCisJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1Qs IE5VTEwpOworfQorCisvKgorICogQSBoZWxwZXIgcm91dGluZSB0byBzZXQgdXAgbmFtZTogJ3Nj aGVtYW5hbWUsIG9iam5hbWUnIHdoZXJlIHRoZSBvYmplY3QgaXMKKyAqIHNwZWNpZmllZCBieSBj bGFzc0lkIGFuZCBvYmpJZC4KKyAqLworc3RhdGljIHZvaWQKK25ld19qc29uYl9mb3JfcXVhbG5h bWVfaWQoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgT2lkIGNsYXNzSWQsIE9pZCBvYmplY3RJZCwK KwkJCQkJCSAgY2hhciAqa2V5TmFtZSwgYm9vbCBjcmVhdGVPYmplY3QpCit7CisJUmVsYXRpb24J Y2F0YWxvZzsKKwlIZWFwVHVwbGUJY2F0b2JqOworCURhdHVtCQlvYmpfbnNwOworCURhdHVtCQlv YmpfbmFtZTsKKwlBdHRyTnVtYmVyCUFudW1fbmFtZTsKKwlBdHRyTnVtYmVyCUFudW1fbmFtZXNw YWNlOworCUF0dHJOdW1iZXIJQW51bV9vaWQgPSBnZXRfb2JqZWN0X2F0dG51bV9vaWQoY2xhc3NJ ZCk7CisJYm9vbAkJaXNudWxsOworCisJY2F0YWxvZyA9IHRhYmxlX29wZW4oY2xhc3NJZCwgQWNj ZXNzU2hhcmVMb2NrKTsKKworCWNhdG9iaiA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQoY2F0 YWxvZywgQW51bV9vaWQsIG9iamVjdElkKTsKKwlpZiAoIWNhdG9iaikKKwkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9iamVjdCB3aXRoIE9JRCAldSBvZiBjYXRhbG9nIFwi JXNcIiIsCisJCQkgb2JqZWN0SWQsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGNhdGFsb2cpKTsK KwlBbnVtX25hbWUgPSBnZXRfb2JqZWN0X2F0dG51bV9uYW1lKGNsYXNzSWQpOworCUFudW1fbmFt ZXNwYWNlID0gZ2V0X29iamVjdF9hdHRudW1fbmFtZXNwYWNlKGNsYXNzSWQpOworCisJb2JqX25z cCA9IGhlYXBfZ2V0YXR0cihjYXRvYmosIEFudW1fbmFtZXNwYWNlLCBSZWxhdGlvbkdldERlc2Ny KGNhdGFsb2cpLAorCQkJCQkJICAgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJP UiwgIm51bGwgbmFtZXNwYWNlIGZvciBvYmplY3QgJXUiLCBvYmplY3RJZCk7CisKKwlvYmpfbmFt ZSA9IGhlYXBfZ2V0YXR0cihjYXRvYmosIEFudW1fbmFtZSwgUmVsYXRpb25HZXREZXNjcihjYXRh bG9nKSwKKwkJCQkJCQkmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCQllbG9nKEVSUk9SLCAibnVs bCBhdHRyaWJ1dGUgbmFtZSBmb3Igb2JqZWN0ICV1Iiwgb2JqZWN0SWQpOworCisJbmV3X2pzb25i X2Zvcl9xdWFsbmFtZShzdGF0ZSwgRGF0dW1HZXRPYmplY3RJZChvYmpfbnNwKSwKKwkJCQkJCSAg IE5hbWVTdHIoKkRhdHVtR2V0TmFtZShvYmpfbmFtZSkpLAorCQkJCQkJICAga2V5TmFtZSwgY3Jl YXRlT2JqZWN0KTsKKwl0YWJsZV9jbG9zZShjYXRhbG9nLCBBY2Nlc3NTaGFyZUxvY2spOworfQor CisvKgorICogQSBoZWxwZXIgcm91dGluZSB0byBpbnNlcnQga2V5OnZhbHVlIHdoZXJlIHZhbHVl IGlzIGFycmF5IG9mIHF1YWxuYW1lIHRvCisgKiB0aGUgb3V0cHV0IHBhcnNlIHN0YXRlLgorICov CitzdGF0aWMgdm9pZAorbmV3X2pzb25iQXJyYXlfZm9yX3F1YWxuYW1lX2lkKEpzb25iUGFyc2VT dGF0ZSAqc3RhdGUsCisJCQkJCQkJICAgY2hhciAqa2V5bmFtZSwgTGlzdCAqYXJyYXkpCit7CisJ TGlzdENlbGwgICAqbGM7CisKKwkvKiBQdXNoIHRoZSBrZXkgZmlyc3QgKi8KKwlpbnNlcnRfanNv bmJfa2V5KHN0YXRlLCBrZXluYW1lKTsKKworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JF R0lOX0FSUkFZLCBOVUxMKTsKKworCS8qIFB1c2ggdGhlIGFycmF5IGVsZW1lbnRzIG5vdyAqLwor CWZvcmVhY2gobGMsIGFycmF5KQorCQluZXdfanNvbmJfZm9yX3F1YWxuYW1lX2lkKHN0YXRlLCBS ZWxhdGlvblJlbGF0aW9uSWQsIGxmaXJzdF9vaWQobGMpLAorCQkJCQkJCQkgIE5VTEwsIHRydWUp OworCisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX0FSUkFZLCBOVUxMKTsKK30KKwor LyoKKyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gaW5zZXJ0IGNvbGxhdGUgb2JqZWN0IGZvciBjb2x1 bW4KKyAqIGRlZmluaXRpb24gdG8gdGhlIG91dHB1dCBwYXJzZSBzdGF0ZS4KKyAqLworc3RhdGlj IHZvaWQKK2luc2VydF9jb2xsYXRlX29iamVjdChKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBjaGFy ICpwYXJlbnRLZXksIGNoYXIgKmZtdCwKKwkJCQkJICBPaWQgY2xhc3NJZCwgT2lkIG9iamVjdElk LCBjaGFyICprZXkpCit7CisJLyoKKwkgKiBJbnNlcnQgcGFyZW50IGtleSBmb3Igd2hpY2ggd2Ug YXJlIGdvaW5nIHRvIGNyZWF0ZSB2YWx1ZSBvYmplY3QgaGVyZS4KKwkgKi8KKwlpZiAocGFyZW50 S2V5KQorCQlpbnNlcnRfanNvbmJfa2V5KHN0YXRlLCBwYXJlbnRLZXkpOworCisJcHVzaEpzb25i VmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKworCW5ld19qc29uYl9WQShz dGF0ZSwgMSwgImZtdCIsIGpidlN0cmluZywgZm10KTsKKworCS8qIHB1c2ggb2JqZWN0IG5vdyAq LworCW5ld19qc29uYl9mb3JfcXVhbG5hbWVfaWQoc3RhdGUsIGNsYXNzSWQsIG9iamVjdElkLCBr ZXksIHRydWUpOworCisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVM TCk7Cit9CisKKy8qCisgKiBBIGhlbHBlciByb3V0aW5lIHRvIGluc2VydCBpZGVudGl0eSBvYmpl Y3QgZm9yIHRoZSB0YWJsZSBkZWZpbml0aW9uCisgKiB0byB0aGUgb3V0cHV0IHBhcnNlIHN0YXRl LgorICovCitzdGF0aWMgdm9pZAoraW5zZXJ0X2lkZW50aXR5X29iamVjdChKc29uYlBhcnNlU3Rh dGUgKnN0YXRlLCBPaWQgbnNwaWQsIGNoYXIgKnJlbG5hbWUpCit7CisJbmV3X2pzb25iX2Zvcl9x dWFsbmFtZShzdGF0ZSwgbnNwaWQsIHJlbG5hbWUsICJpZGVudGl0eSIsIHRydWUpOworfQorCisv KgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgQ0FDSEUgb3B0aW9uIHRvIEpzb25iCisgKgorICog VmVyYm9zZSBzeW50YXgKKyAqIENBQ0hFICV7dmFsdWV9CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9p ZAorZGVwYXJzZV9TZXFfQ2FjaGUoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgRm9ybV9wZ19zZXF1 ZW5jZSBzZXFkYXRhKQoreworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVD VCwgTlVMTCk7CisJbmV3X2pzb25iX1ZBKHN0YXRlLCAzLAorCQkJCSAiZm10IiwgamJ2U3RyaW5n LCAiQ0FDSEUgJXt2YWx1ZX1zIiwKKwkJCQkgImNsYXVzZSIsIGpidlN0cmluZywgImNhY2hlIiwK KwkJCQkgInZhbHVlIiwgamJ2U3RyaW5nLAorCQkJCSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNl cWRhdGEtPnNlcWNhY2hlKSk7CisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVD VCwgTlVMTCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBDWUNMRSBvcHRpb24g dG8gSnNvbmIuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqICV7bm99cyBDWUNMRQorICovCitz dGF0aWMgaW5saW5lIHZvaWQKK2RlcGFyc2VfU2VxX0N5Y2xlKEpzb25iUGFyc2VTdGF0ZSAqc3Rh dGUsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSkKK3sKKwlTdHJpbmdJbmZvRGF0YSBmbXRTdHI7 CisKKwlpbml0U3RyaW5nSW5mbygmZm10U3RyKTsKKworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwg V0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisKKwlpZiAoIXNlcWRhdGEtPnNlcWN5Y2xlKQorCXsK KwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3RyLCAiJXtub31zICIpOworCQluZXdfanNv bmJfVkEoc3RhdGUsIDEsICJubyIsIGpidlN0cmluZywgIk5PIik7CisJfQorCisJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmZm10U3RyLCAiQ1lDTEUiKTsKKwluZXdfanNvbmJfVkEoc3RhdGUsIDIs CisJCQkJICJmbXQiLCBqYnZTdHJpbmcsIGZtdFN0ci5kYXRhLAorCQkJCSAiY2xhdXNlIiwgamJ2 U3RyaW5nLCAiY3ljbGUiKTsKKworCXBmcmVlKGZtdFN0ci5kYXRhKTsKKwlwdXNoSnNvbmJWYWx1 ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhl IHNlcXVlbmNlIElOQ1JFTUVOVCBCWSBvcHRpb24gdG8gSnNvbmIKKyAqCisgKiBWZXJib3NlIHN5 bnRheAorICogSU5DUkVNRU5UIEJZICV7dmFsdWV9cworICovCitzdGF0aWMgaW5saW5lIHZvaWQK K2RlcGFyc2VfU2VxX0luY3JlbWVudEJ5KEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIEZvcm1fcGdf c2VxdWVuY2Ugc2VxZGF0YSkKK3sKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9P QkpFQ1QsIE5VTEwpOworCW5ld19qc29uYl9WQShzdGF0ZSwgMywKKwkJCQkgImZtdCIsIGpidlN0 cmluZywgIklOQ1JFTUVOVCBCWSAle3ZhbHVlfXMiLAorCQkJCSAiY2xhdXNlIiwgamJ2U3RyaW5n LCAic2VxaW5jcmVtZW50IiwKKwkJCQkgInZhbHVlIiwgamJ2U3RyaW5nLAorCQkJCSBwc3ByaW50 ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcWluY3JlbWVudCkpOworCXB1c2hKc29uYlZhbHVl KCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworfQorCisvKgorICogRGVwYXJzZSB0aGUg c2VxdWVuY2UgTUFYVkFMVUUgb3B0aW9uIHRvIEpzb25iLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4 CisgKiBNQVhWQUxVRSAle3ZhbHVlfXMKKyAqLworc3RhdGljIGlubGluZSB2b2lkCitkZXBhcnNl X1NlcV9NYXh2YWx1ZShKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBGb3JtX3BnX3NlcXVlbmNlIHNl cWRhdGEpCit7CisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxM KTsKKwluZXdfanNvbmJfVkEoc3RhdGUsIDMsCisJCQkJICJmbXQiLCBqYnZTdHJpbmcsICJNQVhW QUxVRSAle3ZhbHVlfXMiLAorCQkJCSAiY2xhdXNlIiwgamJ2U3RyaW5nLCAibWF4dmFsdWUiLAor CQkJCSAidmFsdWUiLCBqYnZTdHJpbmcsCisJCQkJIHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2Vx ZGF0YS0+c2VxbWF4KSk7CisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwg TlVMTCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBNSU5WQUxVRSBvcHRpb24g dG8gSnNvbmIKKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogTUlOVkFMVUUgJXt2YWx1ZX1zCisg Ki8KK3N0YXRpYyBpbmxpbmUgdm9pZAorZGVwYXJzZV9TZXFfTWludmFsdWUoSnNvbmJQYXJzZVN0 YXRlICpzdGF0ZSwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhKQoreworCXB1c2hKc29uYlZhbHVl KCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJbmV3X2pzb25iX1ZBKHN0YXRlLCAz LAorCQkJCSAiZm10IiwgamJ2U3RyaW5nLCAiTUlOVkFMVUUgJXt2YWx1ZX1zIiwKKwkJCQkgImNs YXVzZSIsIGpidlN0cmluZywgIm1pbnZhbHVlIiwKKwkJCQkgInZhbHVlIiwgamJ2U3RyaW5nLAor CQkJCSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcW1pbikpOworCXB1c2hKc29u YlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworfQorCisvKgorICogRGVwYXJz ZSB0aGUgc2VxdWVuY2UgT1dORUQgQlkgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAor ICogT1dORUQgQlkgJXtvd25lcn1ECisgKi8KK3N0YXRpYyB2b2lkCitkZXBhcnNlX1NlcV9Pd25l ZEJ5KEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIE9pZCBzZXF1ZW5jZUlkKQoreworCVJlbGF0aW9u CWRlcFJlbDsKKwlTeXNTY2FuRGVzYyBzY2FuOworCVNjYW5LZXlEYXRhIGtleXNbM107CisJSGVh cFR1cGxlCXR1cGxlOworCWJvb2wJCWVsZW1fZm91bmQgUEdfVVNFRF9GT1JfQVNTRVJUU19PTkxZ ID0gZmFsc2U7CisKKwlkZXBSZWwgPSB0YWJsZV9vcGVuKERlcGVuZFJlbGF0aW9uSWQsIEFjY2Vz c1NoYXJlTG9jayk7CisJU2NhbktleUluaXQoJmtleXNbMF0sCisJCQkJQW51bV9wZ19kZXBlbmRf Y2xhc3NpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0 SWRHZXREYXR1bShSZWxhdGlvblJlbGF0aW9uSWQpKTsKKwlTY2FuS2V5SW5pdCgma2V5c1sxXSwK KwkJCQlBbnVtX3BnX2RlcGVuZF9vYmppZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZf T0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShzZXF1ZW5jZUlkKSk7CisJU2NhbktleUluaXQo JmtleXNbMl0sCisJCQkJQW51bV9wZ19kZXBlbmRfb2Jqc3ViaWQsCisJCQkJQlRFcXVhbFN0cmF0 ZWd5TnVtYmVyLCBGX0lOVDRFUSwKKwkJCQlJbnQzMkdldERhdHVtKDApKTsKKworCXNjYW4gPSBz eXN0YWJsZV9iZWdpbnNjYW4oZGVwUmVsLCBEZXBlbmREZXBlbmRlckluZGV4SWQsIHRydWUsCisJ CQkJCQkJICBOVUxMLCAzLCBrZXlzKTsKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSA9 IHN5c3RhYmxlX2dldG5leHQoc2NhbikpKQorCXsKKwkJT2lkCQkJb3duZXJJZDsKKwkJRm9ybV9w Z19kZXBlbmQgZGVwZm9ybTsKKwkJY2hhcgkgICAqY29sbmFtZTsKKworCQlkZXBmb3JtID0gKEZv cm1fcGdfZGVwZW5kKSBHRVRTVFJVQ1QodHVwbGUpOworCisJCS8qIE9ubHkgY29uc2lkZXIgQVVU TyBkZXBlbmRlbmNpZXMgb24gcGdfY2xhc3MgKi8KKwkJaWYgKGRlcGZvcm0tPmRlcHR5cGUgIT0g REVQRU5ERU5DWV9BVVRPKQorCQkJY29udGludWU7CisJCWlmIChkZXBmb3JtLT5yZWZjbGFzc2lk ICE9IFJlbGF0aW9uUmVsYXRpb25JZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoZGVwZm9ybS0+cmVm b2Jqc3ViaWQgPD0gMCkKKwkJCWNvbnRpbnVlOworCisJCW93bmVySWQgPSBkZXBmb3JtLT5yZWZv YmppZDsKKwkJY29sbmFtZSA9IGdldF9hdHRuYW1lKG93bmVySWQsIGRlcGZvcm0tPnJlZm9ianN1 YmlkLCBmYWxzZSk7CisKKwkJLyogbWFyayB0aGUgYmVnaW4gb2Ygb3duZXIncyBkZWZpbml0aW9u IG9iamVjdCAqLworCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5V TEwpOworCisJCW5ld19qc29uYl9WQShzdGF0ZSwgMiwKKwkJCQkJICJmbXQiLCBqYnZTdHJpbmcs ICJPV05FRCBCWSAle293bmVyfUQiLAorCQkJCQkgImNsYXVzZSIsIGpidlN0cmluZywgIm93bmVk Iik7CisKKwkJLyogb3duZXIga2V5ICovCisJCWluc2VydF9qc29uYl9rZXkoc3RhdGUsICJvd25l ciIpOworCisJCS8qIG93bmVyIHZhbHVlIGJlZ2luICovCisJCXB1c2hKc29uYlZhbHVlKCZzdGF0 ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisKKwkJbmV3X2pzb25iX2Zvcl9xdWFsbmFtZV9p ZChzdGF0ZSwgUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkgIG93bmVySWQsIE5VTEwsIGZh bHNlKTsKKwkJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLCAiYXR0cm5hbWUiLCBqYnZTdHJpbmcsIGNv bG5hbWUpOworCisJCS8qIG93bmVyIHZhbHVlIGVuZCAqLworCQlwdXNoSnNvbmJWYWx1ZSgmc3Rh dGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKworCQkvKiBtYXJrIHRoZSBlbmQgb2Ygb3duZXIn cyBkZWZpbml0aW9uIG9iamVjdCAqLworCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRf T0JKRUNULCBOVUxMKTsKKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwkJZWxlbV9mb3Vu ZCA9IHRydWU7CisjZW5kaWYKKwl9CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCXJlbGF0 aW9uX2Nsb3NlKGRlcFJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCS8qCisJICogSWYgdGhlcmUn cyBubyBvd25lciBjb2x1bW4sIGFzc2VydC4gVGhlIGNhbGxlciBtdXN0IGhhdmUgY2hlY2tlZAor CSAqIHByZXNlbmNlIG9mIG93bmVkX2J5IGVsZW1lbnQgYmVmb3JlIGludm9raW5nIHRoaXMuCisJ ICovCisJQXNzZXJ0KGVsZW1fZm91bmQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVu Y2UgU1RBUlQgV0lUSCBvcHRpb24gdG8gSnNvbmIuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAq IFNUQVJUIFdJVEggJXt2YWx1ZX1zCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorZGVwYXJzZV9T ZXFfU3RhcnR3aXRoKEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIEZvcm1fcGdfc2VxdWVuY2Ugc2Vx ZGF0YSkKK3sKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwp OworCW5ld19qc29uYl9WQShzdGF0ZSwgMywKKwkJCQkgImZtdCIsIGpidlN0cmluZywgIlNUQVJU IFdJVEggJXt2YWx1ZX1zIiwKKwkJCQkgImNsYXVzZSIsIGpidlN0cmluZywgInN0YXJ0IiwKKwkJ CQkgInZhbHVlIiwgamJ2U3RyaW5nLAorCQkJCSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRh dGEtPnNlcXN0YXJ0KSk7CisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwg TlVMTCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBSRVNUQVJUIG9wdGlvbiB0 byBKc29uYgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBSRVNUQVJUICV7dmFsdWV9cworICov CitzdGF0aWMgaW5saW5lIHZvaWQKK2RlcGFyc2VfU2VxX1Jlc3RhcnQoSnNvbmJQYXJzZVN0YXRl ICpzdGF0ZSwgaW50NjQgbGFzdF92YWx1ZSkKK3sKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdK Ql9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCW5ld19qc29uYl9WQShzdGF0ZSwgMywKKwkJCQkgImZt dCIsIGpidlN0cmluZywgIlJFU1RBUlQgJXt2YWx1ZX1zIiwKKwkJCQkgImNsYXVzZSIsIGpidlN0 cmluZywgInJlc3RhcnQiLAorCQkJCSAidmFsdWUiLCBqYnZTdHJpbmcsCisJCQkJIHBzcHJpbnRm KElOVDY0X0ZPUk1BVCwgbGFzdF92YWx1ZSkpOworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pC X0VORF9PQkpFQ1QsIE5VTEwpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgQVMg b3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBUyAle3NlcXR5cGV9VAorICovCitz dGF0aWMgaW5saW5lIHZvaWQKK2RlcGFyc2VfU2VxX0FzKEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUs IEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSkKK3sKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdK Ql9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCW5ld19qc29uYl9WQShzdGF0ZSwgMSwgImZtdCIsIGpi dlN0cmluZywgIkFTICV7c2VxdHlwZX1UIik7CisJbmV3X2pzb25iX2Zvcl90eXBlKHN0YXRlLCAi c2VxdHlwZSIsIHNlcWRhdGEtPnNlcXR5cGlkLCAtMSk7CisJcHVzaEpzb25iVmFsdWUoJnN0YXRl LCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBkZWZpbml0 aW9uIG9mIGNvbHVtbiBpZGVudGl0eSB0byBKc29uYi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAor ICogJXtpZGVudGl0eV90eXBlfXMgKCAle3NlcV9kZWZpbml0aW9uOiB9cyApCisgKiB3aGVyZSBp ZGVudGl0eV90eXBlIGlzOiAiR0VORVJBVEVEICV7b3B0aW9ufXMgQVMgSURFTlRJVFkiCisgKi8K K3N0YXRpYyB2b2lkCitkZXBhcnNlX0NvbHVtbklkZW50aXR5KEpzb25iUGFyc2VTdGF0ZSAqc3Rh dGUsIGNoYXIgKnBhcmVudEtleSwKKwkJCQkJICAgT2lkIHNlcXJlbGlkLCBjaGFyIGlkZW50aXR5 KQoreworCUZvcm1fcGdfc2VxdWVuY2Ugc2VxZm9ybTsKKwlTZXF1ZW5jZV92YWx1ZXMgKnNlcXZh bHVlczsKKwlTdHJpbmdJbmZvRGF0YSBmbXRTdHI7CisKKwlpbml0U3RyaW5nSW5mbygmZm10U3Ry KTsKKworCS8qCisJICogSW5zZXJ0IHBhcmVudCBrZXkgZm9yIHdoaWNoIHdlIGFyZSBnb2luZyB0 byBjcmVhdGUgdmFsdWUgb2JqZWN0IGhlcmUuCisJICovCisJaWYgKHBhcmVudEtleSkKKwkJaW5z ZXJ0X2pzb25iX2tleShzdGF0ZSwgcGFyZW50S2V5KTsKKworCS8qIGNyZWF0ZSBvYmplY3Qgbm93 IGZvciB2YWx1ZSBvZiBpZGVudGl0eV9jb2x1bW4gKi8KKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUs IFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCisJLyogaWRlbnRpdHlfdHlwZSBvYmplY3QgY3Jl YXRpb24gKi8KKwlpZiAoaWRlbnRpdHkgPT0gQVRUUklCVVRFX0lERU5USVRZX0FMV0FZUyB8fAor CQlpZGVudGl0eSA9PSBBVFRSSUJVVEVfSURFTlRJVFlfQllfREVGQVVMVCkKKwl7CisJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoJmZtdFN0ciwgIiV7aWRlbnRpdHlfdHlwZX1zIik7CisJCWluc2Vy dF9qc29uYl9rZXkoc3RhdGUsICJpZGVudGl0eV90eXBlIik7CisKKwkJcHVzaEpzb25iVmFsdWUo JnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKworCQluZXdfanNvbmJfVkEoc3RhdGUs IDIsCisJCQkJCSAiZm10IiwgamJ2U3RyaW5nLAorCQkJCQkgIkdFTkVSQVRFRCAle29wdGlvbn1z IEFTIElERU5USVRZIiwKKwkJCQkJICJvcHRpb24iLCBqYnZTdHJpbmcsCisJCQkJCSAoaWRlbnRp dHkgPT0gQVRUUklCVVRFX0lERU5USVRZX0FMV0FZUyA/CisJCQkJCSAgIkFMV0FZUyIgOiAiQlkg REVGQVVMVCIpKTsKKwkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVM TCk7CisJfQorCisJLyogc2VxX2RlZmluaXRpb24gYXJyYXkgb2JqZWN0IGNyZWF0aW9uICovCisJ aW5zZXJ0X2pzb25iX2tleShzdGF0ZSwgInNlcV9kZWZpbml0aW9uIik7CisKKwlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZmbXRTdHIsICIgKCAle3NlcV9kZWZpbml0aW9uOiB9cyApIik7CisKKwlw dXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9BUlJBWSwgTlVMTCk7CisKKwlzZXF2YWx1 ZXMgPSBnZXRfc2VxdWVuY2VfdmFsdWVzKHNlcXJlbGlkKTsKKwlzZXFmb3JtID0gc2VxdmFsdWVz LT5zZXFmb3JtOworCisJLyogRGVmaW5pdGlvbiBlbGVtZW50cyAqLworCWRlcGFyc2VfU2VxX0Nh Y2hlKHN0YXRlLCBzZXFmb3JtKTsKKwlkZXBhcnNlX1NlcV9DeWNsZShzdGF0ZSwgc2VxZm9ybSk7 CisJZGVwYXJzZV9TZXFfSW5jcmVtZW50Qnkoc3RhdGUsIHNlcWZvcm0pOworCWRlcGFyc2VfU2Vx X01pbnZhbHVlKHN0YXRlLCBzZXFmb3JtKTsKKwlkZXBhcnNlX1NlcV9NYXh2YWx1ZShzdGF0ZSwg c2VxZm9ybSk7CisJZGVwYXJzZV9TZXFfU3RhcnR3aXRoKHN0YXRlLCBzZXFmb3JtKTsKKwlkZXBh cnNlX1NlcV9SZXN0YXJ0KHN0YXRlLCBzZXF2YWx1ZXMtPmxhc3RfdmFsdWUpOworCS8qIFdlIHB1 cnBvc2VmdWxseSBkbyBub3QgZW1pdCBPV05FRCBCWSBoZXJlICovCisKKwlwdXNoSnNvbmJWYWx1 ZSgmc3RhdGUsIFdKQl9FTkRfQVJSQVksIE5VTEwpOworCisJLyogV2UgaGF2ZSBmdWxsIGZtdCBi eSBub3csIHNvIGFkZCBqc29uYiBlbGVtZW50IGZvciB0aGF0ICovCisJbmV3X2pzb25iX1ZBKHN0 YXRlLCAxLCAiZm10IiwgamJ2U3RyaW5nLCBmbXRTdHIuZGF0YSk7CisKKwlwZnJlZShmbXRTdHIu ZGF0YSk7CisKKwkvKiBlbmQgb2YgaWRlbmRpdHlfY29sdW1uIG9iamVjdCAqLworCXB1c2hKc29u YlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworfQorCisvKgorICogRGVwYXJz ZSBhIENvbHVtbkRlZiBub2RlIHdpdGhpbiBhIHJlZ3VsYXIgKG5vbi10eXBlZCkgdGFibGUgY3Jl YXRpb24uCisgKgorICogTk9UIE5VTEwgY29uc3RyYWludHMgaW4gdGhlIGNvbHVtbiBkZWZpbml0 aW9uIGFyZSBlbWl0dGVkIGRpcmVjdGx5IGluIHRoZQorICogY29sdW1uIGRlZmluaXRpb24gYnkg dGhpcyByb3V0aW5lOyBvdGhlciBjb25zdHJhaW50cyBtdXN0IGJlIGVtaXR0ZWQKKyAqIGVsc2V3 aGVyZSAodGhlIGluZm8gaW4gdGhlIHBhcnNlIG5vZGUgaXMgaW5jb21wbGV0ZSBhbnl3YXkpLgor ICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAl e2NvbHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cworICogICV7bm90X251 bGx9cyAle2RlZmF1bHR9cyAle2lkZW50aXR5X2NvbHVtbn1zICV7Z2VuZXJhdGVkX2NvbHVtbn1z IgorICovCitzdGF0aWMgdm9pZAorZGVwYXJzZV9Db2x1bW5EZWYoSnNvbmJQYXJzZVN0YXRlICpz dGF0ZSwgUmVsYXRpb24gcmVsYXRpb24sCisJCQkJICBMaXN0ICpkcGNvbnRleHQsIGJvb2wgY29t cG9zaXRlLCBDb2x1bW5EZWYgKmNvbGRlZikKK3sKKwlPaWQJCQlyZWxpZCA9IFJlbGF0aW9uR2V0 UmVsaWQocmVsYXRpb24pOworCUhlYXBUdXBsZQlhdHRyVHVwOworCUZvcm1fcGdfYXR0cmlidXRl IGF0dHJGb3JtOworCU9pZAkJCXR5cGlkOworCWludDMyCQl0eXBtb2Q7CisJT2lkCQkJdHlwY29s bGF0aW9uOworCWJvb2wJCXNhd19ub3RudWxsOworCUxpc3RDZWxsICAgKmNlbGw7CisJU3RyaW5n SW5mb0RhdGEgZm10U3RyOworCisJaW5pdFN0cmluZ0luZm8oJmZtdFN0cik7CisKKwkvKgorCSAq IEluaGVyaXRlZCBjb2x1bW5zIHdpdGhvdXQgbG9jYWwgZGVmaW5pdGlvbnMgc2hvdWxkIGJlIHNr aXBwZWQuIFdlIGRvbid0CisJICogd2FudCB0aG9zZSB0byBiZSBwYXJ0IG9mIGZpbmFsIHN0cmlu Zy4KKwkgKi8KKwlpZiAoIWNvbGRlZi0+aXNfbG9jYWwpCisJCXJldHVybjsKKworCWF0dHJUdXAg PSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUocmVsaWQsIGNvbGRlZi0+Y29sbmFtZSk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKGF0dHJUdXApKQorCQllbG9nKEVSUk9SLCAiY291bGQgbm90IGZpbmQg Y2FjaGUgZW50cnkgZm9yIGNvbHVtbiBcIiVzXCIgb2YgcmVsYXRpb24gJXUiLAorCQkJIGNvbGRl Zi0+Y29sbmFtZSwgcmVsaWQpOworCWF0dHJGb3JtID0gKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRT VFJVQ1QoYXR0clR1cCk7CisKKwlnZXRfYXR0dHlwZXR5cG1vZGNvbGwocmVsaWQsIGF0dHJGb3Jt LT5hdHRudW0sCisJCQkJCQkgICZ0eXBpZCwgJnR5cG1vZCwgJnR5cGNvbGxhdGlvbik7CisKKwkv KiBzdGFydCBtYWtpbmcgY29sdW1uIG9iamVjdCAqLworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwg V0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisKKwkvKiBjcmVhdGUgbmFtZSBhbmQgdHlwZSBlbGVt ZW50cyBmb3IgY29sdW1uICovCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3RyLCAiJXtu YW1lfUkiKTsKKwluZXdfanNvbmJfVkEoc3RhdGUsIDIsCisJCQkJICJuYW1lIiwgamJ2U3RyaW5n LCBjb2xkZWYtPmNvbG5hbWUsCisJCQkJICJ0eXBlIiwgamJ2U3RyaW5nLCAiY29sdW1uIik7CisK KwkvKgorCSAqIGNyZWF0ZSBjb2x0eXBlIG9iamVjdCBoYXZpbmcgNCBlbGVtZW50czogc2NoZW1h bmFtZSwgdHlwZW5hbWUsIHR5cGVtb2QsCisJICogdHlwZWFycmF5CisJICovCisJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmZm10U3RyLCAiICV7Y29sdHlwZX1UIik7CisJbmV3X2pzb25iX2Zvcl90 eXBlKHN0YXRlLCAiY29sdHlwZSIsIHR5cGlkLCB0eXBtb2QpOworCisJLyogU1RPUkFHRSBjbGF1 c2UgKi8KKwlpZiAoIWNvbXBvc2l0ZSkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmZt dFN0ciwgIiBTVE9SQUdFICV7Y29sc3RvcmFnZX1zIik7CisJCW5ld19qc29uYl9WQShzdGF0ZSwg MSwKKwkJCQkJICJjb2xzdG9yYWdlIiwgamJ2U3RyaW5nLAorCQkJCQkgc3RvcmFnZV9uYW1lKGF0 dHJGb3JtLT5hdHRzdG9yYWdlKSk7CisJfQorCisJLyogQ09NUFJFU1NJT04gY2xhdXNlICovCisJ aWYgKGNvbGRlZi0+Y29tcHJlc3Npb24pCisJeworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZm bXRTdHIsICIgJXtjb21wcmVzc2lvbn1zIik7CisJCWluc2VydF9qc29uYl9rZXkoc3RhdGUsICJj b21wcmVzc2lvbiIpOworCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1Qs IE5VTEwpOworCQluZXdfanNvbmJfVkEoc3RhdGUsIDIsCisJCQkJCSAiZm10IiwgamJ2U3RyaW5n LCAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsCisJCQkJCSAiY29tcHJlc3Np b25fbWV0aG9kIiwgamJ2U3RyaW5nLCBjb2xkZWYtPmNvbXByZXNzaW9uKTsKKwkJcHVzaEpzb25i VmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisJfQorCisJLyogQ09MTEFURSBj bGF1c2UgKi8KKwlpZiAoT2lkSXNWYWxpZCh0eXBjb2xsYXRpb24pKQorCXsKKwkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmZm10U3RyLCAiICV7Y29sbGF0aW9ufXMiKTsKKwkJaW5zZXJ0X2NvbGxh dGVfb2JqZWN0KHN0YXRlLCAiY29sbGF0aW9uIiwKKwkJCQkJCQkgICJDT0xMQVRFICV7Y29sbGF0 aW9uX25hbWV9RCIsCisJCQkJCQkJICBDb2xsYXRpb25SZWxhdGlvbklkLCB0eXBjb2xsYXRpb24s CisJCQkJCQkJICAiY29sbGF0aW9uX25hbWUiKTsKKwl9CisKKwlpZiAoIWNvbXBvc2l0ZSkKKwl7 CisJCU9pZAkJCXNlcXJlbGlkID0gSW52YWxpZE9pZDsKKworCQkvKgorCQkgKiBFbWl0IGEgTk9U IE5VTEwgZGVjbGFyYXRpb24gaWYgbmVjZXNzYXJ5LiAgTm90ZSB0aGF0IHdlIGNhbm5vdAorCQkg KiB0cnVzdCBwZ19hdHRyaWJ1dGUuYXR0bm90bnVsbCBoZXJlLCBiZWNhdXNlIHRoYXQgYml0IGlz IGFsc28gc2V0CisJCSAqIHdoZW4gcHJpbWFyeSBrZXlzIGFyZSBzcGVjaWZpZWQ7IHdlIG11c3Qg bm90IGVtaXQgYSBOT1QgTlVMTAorCQkgKiBjb25zdHJhaW50IGluIHRoYXQgY2FzZSwgdW5sZXNz IGV4cGxpY2l0bHkgc3BlY2lmaWVkLiAgVGhlcmVmb3JlLAorCQkgKiB3ZSBzY2FuIHRoZSBsaXN0 IG9mIGNvbnN0cmFpbnRzIGF0dGFjaGVkIHRvIHRoaXMgY29sdW1uIHRvCisJCSAqIGRldGVybWlu ZSB3aGV0aGVyIHdlIG5lZWQgdG8gZW1pdCBhbnl0aGluZy4gKEZvcnR1bmF0ZWx5LCBOT1QgTlVM TAorCQkgKiBjb25zdHJhaW50cyBjYW5ub3QgYmUgdGFibGUgY29uc3RyYWludHMuKQorCQkgKgor CQkgKiBJbiB0aGUgQUxURVIgVEFCTEUgY2FzZXMsIHdlIGFsc28gYWRkIGEgTk9UIE5VTEwgaWYg dGhlIGNvbERlZiBpcworCQkgKiBtYXJrZWQgaXNfbm90X251bGwuCisJCSAqLworCQlzYXdfbm90 bnVsbCA9IGZhbHNlOworCQlmb3JlYWNoKGNlbGwsIGNvbGRlZi0+Y29uc3RyYWludHMpCisJCXsK KwkJCUNvbnN0cmFpbnQgKmNvbnN0ciA9IChDb25zdHJhaW50ICopIGxmaXJzdChjZWxsKTsKKwor CQkJaWYgKGNvbnN0ci0+Y29udHlwZSA9PSBDT05TVFJfTk9UTlVMTCkKKwkJCXsKKwkJCQlzYXdf bm90bnVsbCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkvKiBOT1QgTlVMTCAq LworCQlpZiAoc2F3X25vdG51bGwpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmZt dFN0ciwgIiAle25vdF9udWxsfXMiKTsKKwkJCW5ld19qc29uYl9WQShzdGF0ZSwgMSwKKwkJCQkJ CSAibm90X251bGwiLCBqYnZTdHJpbmcsICJOT1QgTlVMTCIpOworCQl9CisKKworCQkvKiBERUZB VUxUICovCisJCWlmIChhdHRyRm9ybS0+YXR0aGFzZGVmICYmCisJCQljb2xkZWYtPmdlbmVyYXRl ZCAhPSBBVFRSSUJVVEVfR0VORVJBVEVEX1NUT1JFRCkKKwkJeworCQkJY2hhcgkgICAqZGVmc3Ry OworCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIsICIgJXtkZWZhdWx0fXMiKTsK KworCQkJZGVmc3RyID0gcmVsYXRpb25fZ2V0X2NvbHVtbl9kZWZhdWx0KHJlbGF0aW9uLCBhdHRy Rm9ybS0+YXR0bnVtLAorCQkJCQkJCQkJCQkJIGRwY29udGV4dCk7CisKKwkJCWluc2VydF9qc29u Yl9rZXkoc3RhdGUsICJkZWZhdWx0Iik7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9C RUdJTl9PQkpFQ1QsIE5VTEwpOworCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAyLAorCQkJCQkJICJm bXQiLCBqYnZTdHJpbmcsICJERUZBVUxUICV7ZGVmYXVsdH1zIiwKKwkJCQkJCSAiZGVmYXVsdCIs IGpidlN0cmluZywgZGVmc3RyKTsKKworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5E X09CSkVDVCwgTlVMTCk7CisJCX0KKworCQkvKiBJREVOVElUWSBDT0xVTU4gKi8KKwkJaWYgKGNv bGRlZi0+aWRlbnRpdHkpCisJCXsKKwkJCS8qCisJCQkgKiBGb3IgaWRlbnRpdHkgY29sdW1uLCBm aW5kIHRoZSBzZXF1ZW5jZSBvd25lZCBieSBjb2x1bW4gaW4gb3JkZXIKKwkJCSAqIHRvIGRlcGFy c2UgdGhlIGNvbHVtbiBkZWZpbml0aW9uLgorCQkJICovCisJCQlzZXFyZWxpZCA9IGdldElkZW50 aXR5U2VxdWVuY2UocmVsaWQsIGF0dHJGb3JtLT5hdHRudW0sIHRydWUpOworCQkJaWYgKE9pZElz VmFsaWQoc2VxcmVsaWQpICYmIGNvbGRlZi0+aWRlbnRpdHlTZXF1ZW5jZSkKKwkJCQlzZXFyZWxp ZCA9IFJhbmdlVmFyR2V0UmVsaWQoY29sZGVmLT5pZGVudGl0eVNlcXVlbmNlLAorCQkJCQkJCQkJ CQlOb0xvY2ssIGZhbHNlKTsKKworCQkJaWYgKE9pZElzVmFsaWQoc2VxcmVsaWQpKQorCQkJewor CQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmZtdFN0ciwgIiAle2lkZW50aXR5X2NvbHVtbn1z Iik7CisJCQkJZGVwYXJzZV9Db2x1bW5JZGVudGl0eShzdGF0ZSwgImlkZW50aXR5X2NvbHVtbiIs CisJCQkJCQkJCQkgICBzZXFyZWxpZCwKKwkJCQkJCQkJCSAgIGNvbGRlZi0+aWRlbnRpdHkpOwor CQkJfQorCQl9CisKKworCQkvKiBHRU5FUkFURUQgQ09MVU1OIEVYUFJFU1NJT04gKi8KKwkJaWYg KGNvbGRlZi0+Z2VuZXJhdGVkID09IEFUVFJJQlVURV9HRU5FUkFURURfU1RPUkVEKQorCQl7CisJ CQljaGFyCSAgICpkZWZzdHI7CisKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmZtdFN0ciwg IiAle2dlbmVyYXRlZF9jb2x1bW59cyIpOworCQkJZGVmc3RyID0gcmVsYXRpb25fZ2V0X2NvbHVt bl9kZWZhdWx0KHJlbGF0aW9uLCBhdHRyRm9ybS0+YXR0bnVtLAorCQkJCQkJCQkJCQkJIGRwY29u dGV4dCk7CisKKwkJCWluc2VydF9qc29uYl9rZXkoc3RhdGUsICJnZW5lcmF0ZWRfY29sdW1uIik7 CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCQkJ bmV3X2pzb25iX1ZBKHN0YXRlLCAyLAorCQkJCQkJICJmbXQiLCBqYnZTdHJpbmcsICJHRU5FUkFU RUQgQUxXQVlTIEFTIgorCQkJCQkJICIgKCV7Z2VuZXJhdGlvbl9leHByfXMpIFNUT1JFRCIsCisJ CQkJCQkgImdlbmVyYXRpb25fZXhwciIsIGpidlN0cmluZywgZGVmc3RyKTsKKworCQkJcHVzaEpz b25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisJCX0KKwl9CisKKwlSZWxl YXNlU3lzQ2FjaGUoYXR0clR1cCk7CisKKwkvKiBXZSBoYXZlIGZ1bGwgZm10IGJ5IG5vdywgc28g YWRkIGpzb25iIGVsZW1lbnQgZm9yIHRoYXQgKi8KKwluZXdfanNvbmJfVkEoc3RhdGUsIDEsICJm bXQiLCBqYnZTdHJpbmcsIGZtdFN0ci5kYXRhKTsKKworCXBmcmVlKGZtdFN0ci5kYXRhKTsKKwor CS8qIG1hcmsgdGhlIGVuZCBvZiBvbmUgY29sdW1uIG9iamVjdCAqLworCXB1c2hKc29uYlZhbHVl KCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworfQorCisvKgorICogSGVscGVyIGZvciBk ZXBhcnNlX0NvbHVtbkRlZl90eXBlZCgpCisgKgorICogUmV0dXJucyB0cnVlIGlmIHdlIG5lZWQg dG8gZGVwYXJzZSBhIENvbHVtbkRlZiBub2RlIHdpdGhpbiBhIHR5cGVkCisgKiB0YWJsZSBjcmVh dGlvbi4KKyAqLworc3RhdGljIGJvb2wKK2RlcGFyc2VfQ29sRGVmX3R5cGVkX25lZWRlZChSZWxh dGlvbiByZWxhdGlvbiwgQ29sdW1uRGVmICpjb2xkZWYsCisJCQkJCQkJRm9ybV9wZ19hdHRyaWJ1 dGUgKmF0Rm9ybU91dCwgYm9vbCAqbm90bnVsbCkKK3sKKwlPaWQJCQlyZWxpZCA9IFJlbGF0aW9u R2V0UmVsaWQocmVsYXRpb24pOworCUhlYXBUdXBsZQlhdHRyVHVwOworCUZvcm1fcGdfYXR0cmli dXRlIGF0dHJGb3JtOworCU9pZAkJCXR5cGlkOworCWludDMyCQl0eXBtb2Q7CisJT2lkCQkJdHlw Y29sbGF0aW9uOworCWJvb2wJCXNhd19ub3RudWxsOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlh dHRyVHVwID0gU2VhcmNoU3lzQ2FjaGVBdHROYW1lKHJlbGlkLCBjb2xkZWYtPmNvbG5hbWUpOwor CWlmICghSGVhcFR1cGxlSXNWYWxpZChhdHRyVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNvdWxkIG5v dCBmaW5kIGNhY2hlIGVudHJ5IGZvciBjb2x1bW4gXCIlc1wiIG9mIHJlbGF0aW9uICV1IiwKKwkJ CSBjb2xkZWYtPmNvbG5hbWUsIHJlbGlkKTsKKworCWF0dHJGb3JtID0gKEZvcm1fcGdfYXR0cmli dXRlKSBHRVRTVFJVQ1QoYXR0clR1cCk7CisKKwlpZiAoYXRGb3JtT3V0KQorCQkqYXRGb3JtT3V0 ID0gYXR0ckZvcm07CisKKwlnZXRfYXR0dHlwZXR5cG1vZGNvbGwocmVsaWQsIGF0dHJGb3JtLT5h dHRudW0sCisJCQkJCQkgICZ0eXBpZCwgJnR5cG1vZCwgJnR5cGNvbGxhdGlvbik7CisKKwkvKgor CSAqIFNlYXJjaCBmb3IgYSBOT1QgTlVMTCBkZWNsYXJhdGlvbi4gQXMgaW4gZGVwYXJzZV9Db2x1 bW5EZWYsIHdlIHJlbHkgb24KKwkgKiBmaW5kaW5nIGEgY29uc3RyYWludCBvbiB0aGUgY29sdW1u IHJhdGhlciB0aGFuIGNvbGRlZi0+aXNfbm90X251bGwuCisJICogKFRoaXMgcm91dGluZSBpcyBu ZXZlciB1c2VkIGZvciBBTFRFUiBjYXNlcy4pCisJICovCisJc2F3X25vdG51bGwgPSBmYWxzZTsK Kwlmb3JlYWNoKGNlbGwsIGNvbGRlZi0+Y29uc3RyYWludHMpCisJeworCQlDb25zdHJhaW50ICpj b25zdHIgPSAoQ29uc3RyYWludCAqKSBsZmlyc3QoY2VsbCk7CisKKwkJaWYgKGNvbnN0ci0+Y29u dHlwZSA9PSBDT05TVFJfTk9UTlVMTCkKKwkJeworCQkJc2F3X25vdG51bGwgPSB0cnVlOworCQkJ YnJlYWs7CisJCX0KKwl9CisKKwlpZiAobm90bnVsbCkKKwkJKm5vdG51bGwgPSBzYXdfbm90bnVs bDsKKworCWlmICghc2F3X25vdG51bGwgJiYgIWF0dHJGb3JtLT5hdHRoYXNkZWYpCisJeworCQlS ZWxlYXNlU3lzQ2FjaGUoYXR0clR1cCk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlSZWxlYXNl U3lzQ2FjaGUoYXR0clR1cCk7CisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEg Q29sdW1uRGVmIG5vZGUgd2l0aGluIGEgdHlwZWQgdGFibGUgY3JlYXRpb24uIFRoaXMgaXMgc2lt cGxlcgorICogdGhhbiB0aGUgcmVndWxhciBjYXNlLCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdG8g ZW1pdCB0aGUgdHlwZSBkZWNsYXJhdGlvbiwKKyAqIGNvbGxhdGlvbiwgb3IgZGVmYXVsdC4gSGVy ZSB3ZSBvbmx5IHJldHVybiBzb21ldGhpbmcgaWYgdGhlIGNvbHVtbiBpcyBiZWluZworICogZGVj bGFyZWQgTk9UIE5VTEwuCisgKgorICogQXMgaW4gZGVwYXJzZV9Db2x1bW5EZWYsIGFueSBvdGhl ciBjb25zdHJhaW50IGlzIHByb2Nlc3NlZCBlbHNld2hlcmUuCisgKgorICogVmVyYm9zZSBzeW50 YXgKKyAqICV7bmFtZX1JIFdJVEggT1BUSU9OUyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMuCisg Ki8KK3N0YXRpYyB2b2lkCitkZXBhcnNlX0NvbHVtbkRlZl90eXBlZChKc29uYlBhcnNlU3RhdGUg KnN0YXRlLCBSZWxhdGlvbiByZWxhdGlvbiwKKwkJCQkJCUxpc3QgKmRwY29udGV4dCwgQ29sdW1u RGVmICpjb2xkZWYpCit7CisJYm9vbAkJbmVlZGVkOworCUZvcm1fcGdfYXR0cmlidXRlIGF0dHJG b3JtOworCWJvb2wJCXNhd19ub3RudWxsOworCVN0cmluZ0luZm9EYXRhIGZtdFN0cjsKKworCWlu aXRTdHJpbmdJbmZvKCZmbXRTdHIpOworCisJbmVlZGVkID0gZGVwYXJzZV9Db2xEZWZfdHlwZWRf bmVlZGVkKHJlbGF0aW9uLCBjb2xkZWYsCisJCQkJCQkJCQkJICZhdHRyRm9ybSwgJnNhd19ub3Ru dWxsKTsKKwlpZiAoIW5lZWRlZCkKKwkJcmV0dXJuOworCisJLyogc3RhcnQgbWFraW5nIGNvbHVt biBvYmplY3QgKi8KKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5V TEwpOworCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3RyLCAiJXtuYW1lfUkgV0lUSCBP UFRJT05TIik7CisKKwkvKiBUWVBFIGFuZCBOQU1FICovCisJbmV3X2pzb25iX1ZBKHN0YXRlLCAy LAorCQkJCSAidHlwZSIsIGpidlN0cmluZywgImNvbHVtbiIsCisJCQkJICJuYW1lIiwgamJ2U3Ry aW5nLCBjb2xkZWYtPmNvbG5hbWUpOworCisJLyogTk9UIE5VTEwgKi8KKwlpZiAoc2F3X25vdG51 bGwpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIsICIgJXtub3RfbnVsbH1z Iik7CisJCW5ld19qc29uYl9WQShzdGF0ZSwgMSwgIm5vdF9udWxsIiwgamJ2U3RyaW5nLCAiTk9U IE5VTEwiKTsKKwl9CisKKwkvKiBERUZBVUxUICovCisJaWYgKGF0dHJGb3JtLT5hdHRoYXNkZWYp CisJeworCQljaGFyCSAgICpkZWZzdHI7CisKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10 U3RyLCAiICV7ZGVmYXVsdH1zIik7CisJCWRlZnN0ciA9IHJlbGF0aW9uX2dldF9jb2x1bW5fZGVm YXVsdChyZWxhdGlvbiwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCQkJCQkJIGRwY29udGV4dCk7 CisKKwkJaW5zZXJ0X2pzb25iX2tleShzdGF0ZSwgImRlZmF1bHQiKTsKKwkJcHVzaEpzb25iVmFs dWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKwkJbmV3X2pzb25iX1ZBKHN0YXRl LCAyLAorCQkJCQkgImZtdCIsIGpidlN0cmluZywgIkRFRkFVTFQgJXtkZWZhdWx0fXMiLAorCQkJ CQkgImRlZmF1bHQiLCBqYnZTdHJpbmcsIGRlZnN0cik7CisKKwkJcHVzaEpzb25iVmFsdWUoJnN0 YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisJfQorCisJLyogV2UgaGF2ZSBmdWxsIGZtdCBi eSBub3csIHNvIGFkZCBqc29uYiBlbGVtZW50IGZvciB0aGF0ICovCisJbmV3X2pzb25iX1ZBKHN0 YXRlLCAxLCAiZm10IiwgamJ2U3RyaW5nLCBmbXRTdHIuZGF0YSk7CisKKwlwZnJlZShmbXRTdHIu ZGF0YSk7CisKKwkvKiBtYXJrIHRoZSBlbmQgb2YgY29sdW1uIG9iamVjdCAqLworCXB1c2hKc29u YlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworCisJLyogR2VuZXJhdGVkIGNv bHVtbnMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gdHlwZWQgdGFibGVzLCBzbyB3ZSBhcmUgZG9uZSAq LworfQorCisvKgorICogU3Vicm91dGluZSBmb3IgQ1JFQVRFIFRBQkxFIGRlcGFyc2luZy4KKyAq CisgKiBEZWFsIHdpdGggYWxsIHRoZSB0YWJsZSBlbGVtZW50cyAoY29sdW1ucyBhbmQgY29uc3Ry YWludHMpLgorICoKKyAqIE5vdGUgd2UgaWdub3JlIGNvbnN0cmFpbnRzIGluIHRoZSBwYXJzZSBu b2RlIGhlcmU7IHRoZXkgYXJlIGV4dHJhY3RlZCBmcm9tCisgKiBzeXN0ZW0gY2F0YWxvZ3MgaW5z dGVhZC4KKyAqLworc3RhdGljIHZvaWQKK2RlcGFyc2VfVGFibGVFbGVtcyhKc29uYlBhcnNlU3Rh dGUgKnN0YXRlLCBSZWxhdGlvbiByZWxhdGlvbiwKKwkJCQkgICBMaXN0ICp0YWJsZUVsZW1lbnRz LCBMaXN0ICpkcGNvbnRleHQsCisJCQkJICAgYm9vbCB0eXBlZCwgYm9vbCBjb21wb3NpdGUpCit7 CisJTGlzdENlbGwgICAqbGM7CisKKwlmb3JlYWNoKGxjLCB0YWJsZUVsZW1lbnRzKQorCXsKKwkJ Tm9kZQkgICAqZWx0ID0gKE5vZGUgKikgbGZpcnN0KGxjKTsKKworCQlzd2l0Y2ggKG5vZGVUYWco ZWx0KSkKKwkJeworCQkJY2FzZSBUX0NvbHVtbkRlZjoKKwkJCQl7CisJCQkJCWlmICh0eXBlZCkK KwkJCQkJCWRlcGFyc2VfQ29sdW1uRGVmX3R5cGVkKHN0YXRlLCByZWxhdGlvbiwKKwkJCQkJCQkJ CQkJCWRwY29udGV4dCwKKwkJCQkJCQkJCQkJCShDb2x1bW5EZWYgKikgZWx0KTsKKwkJCQkJZWxz ZQorCQkJCQkJZGVwYXJzZV9Db2x1bW5EZWYoc3RhdGUsIHJlbGF0aW9uLCBkcGNvbnRleHQsCisJ CQkJCQkJCQkJICBjb21wb3NpdGUsIChDb2x1bW5EZWYgKikgZWx0KTsKKwkJCQl9CisJCQkJYnJl YWs7CisJCQljYXNlIFRfQ29uc3RyYWludDoKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJ ZWxvZyhFUlJPUiwgImludmFsaWQgbm9kZSB0eXBlICVkIiwgbm9kZVRhZyhlbHQpKTsKKwkJfQor CX0KK30KKworLyoKKyAqIFN1YnJvdXRpbmUgZm9yIENSRUFURSBUQUJMRSBkZXBhcnNpbmcuCisg KgorICogR2l2ZW4gYSB0YWJsZSBPSUQsIG9idGFpbiBpdHMgY29uc3RyYWludHMgYW5kIGFwcGVu ZCB0aGVtIHRvIHRoZSBnaXZlbgorICogSnNvbmJQYXJzZVN0YXRlLgorICoKKyAqIFRoaXMgd29y a3MgZm9yIHR5cGVkIHRhYmxlcywgcmVndWxhciB0YWJsZXMuCisgKgorICogTm90ZSB0aGF0IENP TlNUUkFJTlRfRk9SRUlHTiBjb25zdHJhaW50cyBhcmUgYWx3YXlzIGlnbm9yZWQuCisgKi8KK3N0 YXRpYyB2b2lkCitkZXBhcnNlX0NvbnN0cmFpbnRzKEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIE9p ZCByZWxhdGlvbklkKQoreworCVJlbGF0aW9uCWNvblJlbDsKKwlTY2FuS2V5RGF0YSBrZXk7CisJ U3lzU2NhbkRlc2Mgc2NhbjsKKwlIZWFwVHVwbGUJdHVwbGU7CisKKwlBc3NlcnQoT2lkSXNWYWxp ZChyZWxhdGlvbklkKSk7CisKKwkvKgorCSAqIFNjYW4gcGdfY29uc3RyYWludCB0byBmZXRjaCBh bGwgY29uc3RyYWludHMgbGlua2VkIHRvIHRoZSBnaXZlbgorCSAqIHJlbGF0aW9uLgorCSAqLwor CWNvblJlbCA9IHRhYmxlX29wZW4oQ29uc3RyYWludFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisJU2NhbktleUluaXQoJmtleSwgQW51bV9wZ19jb25zdHJhaW50X2NvbnJlbGlkLCBCVEVx dWFsU3RyYXRlZ3lOdW1iZXIsCisJCQkJRl9PSURFUSwgT2JqZWN0SWRHZXREYXR1bShyZWxhdGlv bklkKSk7CisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihjb25SZWwsIENvbnN0cmFpbnRSZWxp ZFR5cGlkTmFtZUluZGV4SWQsIHRydWUsCisJCQkJCQkJICBOVUxMLCAxLCAma2V5KTsKKworCS8q CisJICogRm9yIGVhY2ggY29uc3RyYWludCwgYWRkIGEgbm9kZSB0byB0aGUgbGlzdCBvZiB0YWJs ZSBlbGVtZW50cy4gIEluCisJICogdGhlc2Ugbm9kZXMgd2UgaW5jbHVkZSBub3Qgb25seSB0aGUg cHJpbnRhYmxlIGluZm9ybWF0aW9uICgiZm10IiksIGJ1dAorCSAqIGFsc28gc2VwYXJhdGUgYXR0 cmlidXRlcyB0byBpbmRpY2F0ZSB0aGUgdHlwZSBvZiBjb25zdHJhaW50LCBmb3IKKwkgKiBhdXRv bWF0aWMgcHJvY2Vzc2luZy4KKwkgKi8KKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSA9 IHN5c3RhYmxlX2dldG5leHQoc2NhbikpKQorCXsKKwkJRm9ybV9wZ19jb25zdHJhaW50IGNvbnN0 ckZvcm07CisJCWNoYXIJICAgKmNvbnR5cGU7CisJCVN0cmluZ0luZm9EYXRhIGZtdFN0cjsKKwor CQljb25zdHJGb3JtID0gKEZvcm1fcGdfY29uc3RyYWludCkgR0VUU1RSVUNUKHR1cGxlKTsKKwor CQlzd2l0Y2ggKGNvbnN0ckZvcm0tPmNvbnR5cGUpCisJCXsKKwkJCWNhc2UgQ09OU1RSQUlOVF9D SEVDSzoKKwkJCQljb250eXBlID0gImNoZWNrIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RS QUlOVF9GT1JFSUdOOgorCQkJCWNvbnRpbnVlOwkJLyogbm90IGhlcmUgKi8KKwkJCWNhc2UgQ09O U1RSQUlOVF9QUklNQVJZOgorCQkJCWNvbnR5cGUgPSAicHJpbWFyeSBrZXkiOworCQkJCWJyZWFr OworCQkJY2FzZSBDT05TVFJBSU5UX1VOSVFVRToKKwkJCQljb250eXBlID0gInVuaXF1ZSI7CisJ CQkJYnJlYWs7CisJCQljYXNlIENPTlNUUkFJTlRfRVhDTFVTSU9OOgorCQkJCWNvbnR5cGUgPSAi ZXhjbHVzaW9uIjsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhFUlJPUiwgInVu cmVjb2duaXplZCBjb25zdHJhaW50IHR5cGUiKTsKKwkJfQorCisJCS8qIE5vIG5lZWQgdG8gZGVw YXJzZSBjb25zdHJhaW50cyBpbmhlcml0ZWQgZnJvbSBwYXJlbnQgdGFibGUuICovCisJCWlmIChP aWRJc1ZhbGlkKGNvbnN0ckZvcm0tPmNvbnBhcmVudGlkKSkKKwkJCWNvbnRpbnVlOworCisJCS8q CisJCSAqICJ0eXBlIiBhbmQgImNvbnR5cGUiIGFyZSBub3QgcGFydCBvZiB0aGUgcHJpbnRhYmxl IG91dHB1dCwgYnV0IGFyZQorCQkgKiB1c2VmdWwgdG8gcHJvZ3JhbW1hdGljYWxseSBkaXN0aW5n dWlzaCB0aGVzZSBmcm9tIGNvbHVtbnMgYW5kIGFtb25nCisJCSAqIGRpZmZlcmVudCBjb25zdHJh aW50IHR5cGVzLgorCQkgKgorCQkgKiBYWFggaXQgbWlnaHQgYmUgdXNlZnVsIHRvIGFsc28gbGlz dCB0aGUgY29sdW1uIG5hbWVzIGluIGEgUEssIGV0Yy4KKwkJICovCisJCWluaXRTdHJpbmdJbmZv KCZmbXRTdHIpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIsICJDT05TVFJBSU5U ICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIik7CisJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pC X0JFR0lOX09CSkVDVCwgTlVMTCk7CisKKwkJbmV3X2pzb25iX1ZBKHN0YXRlLCA0LAorCQkJCQkg InR5cGUiLCBqYnZTdHJpbmcsICJjb25zdHJhaW50IiwKKwkJCQkJICJjb250eXBlIiwgamJ2U3Ry aW5nLCBjb250eXBlLAorCQkJCQkgIm5hbWUiLCBqYnZTdHJpbmcsIE5hbWVTdHIoY29uc3RyRm9y bS0+Y29ubmFtZSksCisJCQkJCSAiZGVmaW5pdGlvbiIsIGpidlN0cmluZywKKwkJCQkJIHBnX2dl dF9jb25zdHJhaW50ZGVmX3N0cmluZyhjb25zdHJGb3JtLT5vaWQpKTsKKworCQlpZiAoY29uc3Ry Rm9ybS0+Y29uaW5kaWQgJiYKKwkJCShjb25zdHJGb3JtLT5jb250eXBlID09IENPTlNUUkFJTlRf UFJJTUFSWSB8fAorCQkJIGNvbnN0ckZvcm0tPmNvbnR5cGUgPT0gQ09OU1RSQUlOVF9VTklRVUUg fHwKKwkJCSBjb25zdHJGb3JtLT5jb250eXBlID09IENPTlNUUkFJTlRfRVhDTFVTSU9OKSkKKwkJ eworCQkJT2lkCQkJdGJsc3BjID0gZ2V0X3JlbF90YWJsZXNwYWNlKGNvbnN0ckZvcm0tPmNvbmlu ZGlkKTsKKworCQkJaWYgKE9pZElzVmFsaWQodGJsc3BjKSkKKwkJCXsKKwkJCQljaGFyCSAgICp0 YmxzcGNuYW1lID0gZ2V0X3RhYmxlc3BhY2VfbmFtZSh0YmxzcGMpOworCisJCQkJaWYgKCF0Ymxz cGNuYW1lKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdGFibGVz cGFjZSAldSIsCisJCQkJCQkgdGJsc3BjKTsKKworCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco JmZtdFN0ciwKKwkJCQkJCQkJCSAgICIgVVNJTkcgSU5ERVggVEFCTEVTUEFDRSAle3RibHNwY31z Iik7CisJCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLAorCQkJCQkJCSAidGJsc3BjIiwgamJ2U3Ry aW5nLCB0YmxzcGNuYW1lKTsKKwkJCX0KKwkJfQorCisJCS8qIFdlIGhhdmUgZnVsbCBmbXQgYnkg bm93LCBzbyBhZGQganNvbmIgZWxlbWVudCBmb3IgdGhhdCAqLworCQluZXdfanNvbmJfVkEoc3Rh dGUsIDEsICJmbXQiLCBqYnZTdHJpbmcsIGZtdFN0ci5kYXRhKTsKKworCQlwZnJlZShmbXRTdHIu ZGF0YSk7CisKKwkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7 CisJfQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShjb25SZWwsIEFj Y2Vzc1NoYXJlTG9jayk7Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZvciBDUkVBVEUgVEFCTEUg ZGVwYXJzaW5nLgorICoKKyAqIEluc2VydCBjb2x1bW5zIGFuZCBjb25zdHJhaW50cyBlbGVtZW50 cyhpZiBhbnkpIGluIG91dHB1dCBKc29uYlBhcnNlU3RhdGUKKyAqLworc3RhdGljIHZvaWQKK2Fk ZF90YWJsZV9lbGVtcyhKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBTdHJpbmdJbmZvIGZtdFN0ciwK KwkJCQkJICAgUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKnRhYmxlRWx0cywgTGlzdCAqZHBjb250 ZXh0LAorCQkJCQkgICBPaWQgb2JqZWN0SWQsIGJvb2wgaW5oZXJpdCwgYm9vbCB0eXBlZCwgYm9v bCBjb21wb3NpdGUpCit7CisJaW5zZXJ0X2pzb25iX2tleShzdGF0ZSwgInRhYmxlX2VsZW1lbnRz Iik7CisKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9BUlJBWSwgTlVMTCk7CisK KwkvKgorCSAqIFByb2Nlc3MgdGFibGUgZWxlbWVudHM6IGNvbHVtbiBkZWZpbml0aW9ucyBhbmQg Y29uc3RyYWludHMuIE9ubHkgdGhlCisJICogY29sdW1uIGRlZmluaXRpb25zIGFyZSBvYnRhaW5l ZCBmcm9tIHRoZSBwYXJzZSBub2RlIGl0c2VsZi4gVG8gZ2V0CisJICogY29uc3RyYWludHMgd2Ug cmVseSBvbiBwZ19jb25zdHJhaW50LCBiZWNhdXNlIHRoZSBwYXJzZSBub2RlIG1pZ2h0IGJlCisJ ICogbWlzc2luZyBzb21lIHRoaW5ncyBzdWNoIGFzIHRoZSBuYW1lIG9mIHRoZSBjb25zdHJhaW50 cy4KKwkgKi8KKwlkZXBhcnNlX1RhYmxlRWxlbXMoc3RhdGUsIHJlbGF0aW9uLCB0YWJsZUVsdHMs IGRwY29udGV4dCwKKwkJCQkJICAgdHlwZWQsCS8qIHR5cGVkIHRhYmxlICovCisJCQkJCSAgIGNv bXBvc2l0ZSk7CS8qIG5vdCBjb21wb3NpdGUgKi8KKworCWRlcGFyc2VfQ29uc3RyYWludHMoc3Rh dGUsIG9iamVjdElkKTsKKworCS8qCisJICogRGVjaWRlIGlmIHdlIG5lZWQgdG8gcHV0ICcoKScg YXJvdW5kIHRhYmxlX2VsZW1lbnRzLiBJdCBpcyBuZWVkZWQgZm9yCisJICogYmVsb3cgY2FzZXM6 CisJICoKKwkgKiBhKSB3aGVyZSBhY3R1YWwgdGFibGUtZWxlbWVudHMgYXJlIHByZXNlbnQsIGVn OiBjcmVhdGUgdGFibGUgdDEgKGEgaW50KQorCSAqCisJICogYSkgaW5oZXJpdCBjYXNlIHdpdGgg bm8gbG9jYWwgdGFibGUtZWxlbWVudHMgcHJlc2VudCwgZWc6IGNyZWF0ZSB0YWJsZQorCSAqIHQx ICgpIGluaGVyaXRzICh0MikKKwkgKgorCSAqIE9UT0gsICcoKScgaXMgbm90IG5lZWRlZCBmb3Ig YmVsb3cgY2FzZXMgd2hlbiBubyB0YWJsZS1lbGVtZW50cyBhcmUKKwkgKiBwcmVzZW50OgorCSAq CisJICogYSkgJ3BhcnRpdGlvbiBvZicgY2FzZSwgZWc6IGNyZWF0ZSB0YWJsZSB0MiBwYXJ0aXRp b24gb2YgdDEKKwkgKgorCSAqIGIpICdvZiB0eXBlJyBjYXNlLCBlZzogY3JlYXRlIHRhYmxlIHQx IG9mIHR5cGUxOworCSAqLworCWlmICgoc3RhdGUtPmNvbnRWYWwudHlwZSA9PSBqYnZBcnJheSkg JiYKKwkJKGluaGVyaXQgfHwgKHN0YXRlLT5jb250VmFsLnZhbC5hcnJheS5uRWxlbXMgPiAwKSkp CisJeworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGZtdFN0ciwgIiAoJXt0YWJsZV9lbGVtZW50 czosIH1zKSIpOworCX0KKwllbHNlCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoZm10U3RyLCAi ICV7dGFibGVfZWxlbWVudHM6LCB9cyIpOworCisJLyogZW5kIG9mIHRhYmxlX2VsZW1lbnRzIGFy cmF5ICovCisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX0FSUkFZLCBOVUxMKTsKK30K KworLyoKKyAqIERlcGFyc2UgRGVmRWxlbXMsIGFzIHVzZWQgYnkgQ3JlYXRlIFRhYmxlCisgKgor ICogVmVyYm9zZSBzeW50YXgKKyAqICV7bGFiZWx9cyA9ICV7dmFsdWV9TAorICogd2hlcmUgbGFi ZWwgaXM6ICV7c2NoZW1hfUkgJXtsYWJlbH1JCisgKi8KK3N0YXRpYyB2b2lkCitkZXBhcnNlX0Rl ZkVsZW0oSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgRGVmRWxlbSAqZWxlbSwgYm9vbCBpc19yZXNl dCkKK3sKKwlTdHJpbmdJbmZvRGF0YSBmbXRTdHI7CisJU3RyaW5nSW5mb0RhdGEgbGFiZWxmbXQ7 CisKKwlpbml0U3RyaW5nSW5mbygmZm10U3RyKTsKKworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco JmZtdFN0ciwgIiV7bGFiZWx9cyIpOworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lO X09CSkVDVCwgTlVMTCk7CisKKwkvKiBMQUJFTCAqLworCWluaXRTdHJpbmdJbmZvKCZsYWJlbGZt dCk7CisKKwlpbnNlcnRfanNvbmJfa2V5KHN0YXRlLCAibGFiZWwiKTsKKwlwdXNoSnNvbmJWYWx1 ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCisJaWYgKGVsZW0tPmRlZm5hbWVz cGFjZSAhPSBOVUxMKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmbGFiZWxmbXQsICIl e3NjaGVtYX1JLiIpOworCQluZXdfanNvbmJfVkEoc3RhdGUsIDEsCisJCQkJCSAic2NoZW1hIiwg amJ2U3RyaW5nLCBlbGVtLT5kZWZuYW1lc3BhY2UpOworCX0KKworCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoJmxhYmVsZm10LCAiJXtsYWJlbH1JIik7CisJbmV3X2pzb25iX1ZBKHN0YXRlLCAyLAor CQkJCSAibGFiZWwiLCBqYnZTdHJpbmcsIGVsZW0tPmRlZm5hbWUsCisJCQkJICJmbXQiLCBqYnZT dHJpbmcsIGxhYmVsZm10LmRhdGEpOworCXBmcmVlKGxhYmVsZm10LmRhdGEpOworCisJcHVzaEpz b25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisKKwkvKiBWQUxVRSAqLwor CWlmICghaXNfcmVzZXQpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIsICIg PSAle3ZhbHVlfUwiKTsKKwkJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLCAidmFsdWUiLCBqYnZTdHJp bmcsCisJCQkJCSBlbGVtLT5hcmcgPyBkZWZHZXRTdHJpbmcoZWxlbSkgOgorCQkJCQkgZGVmR2V0 Qm9vbGVhbihlbGVtKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCX0KKworCW5ld19qc29uYl9WQShz dGF0ZSwgMSwgImZtdCIsIGpidlN0cmluZywgZm10U3RyLmRhdGEpOworCXBmcmVlKGZtdFN0ci5k YXRhKTsKKworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOwor fQorCisvKgorICogRGVwYXJzZSBXSVRIIGNsYXVzZSwgYXMgdXNlZCBieSBDcmVhdGUgVGFibGUu CisgKgorICogVmVyYm9zZSBzeW50YXggKGZvcm11bGF0ZWQgaW4gaGVscGVyIGZ1bmN0aW9uIGRl cGFyc2VfRGVmRWxlbSkKKyAqICV7bGFiZWx9cyA9ICV7dmFsdWV9TAorICovCitzdGF0aWMgdm9p ZAorZGVwYXJzZV93aXRoT2JqKEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIENyZWF0ZVN0bXQgKm5v ZGUpCit7CisJTGlzdENlbGwgICAqY2VsbDsKKworCS8qIFdJVEggKi8KKwlpbnNlcnRfanNvbmJf a2V5KHN0YXRlLCAid2l0aCIpOworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX0FS UkFZLCBOVUxMKTsKKworCS8qIGFkZCBlbGVtZW50cyB0byBhcnJheSAqLworCWZvcmVhY2goY2Vs bCwgbm9kZS0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAgKm9wdCA9IChEZWZFbGVtICopIGxm aXJzdChjZWxsKTsKKworCQlkZXBhcnNlX0RlZkVsZW0oc3RhdGUsIG9wdCwgZmFsc2UpOworCX0K KworCS8qIHdpdGgncyBhcnJheSBlbmQgKi8KKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9F TkRfQVJSQVksIE5VTEwpOworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVN0bXQgKENSRUFU RSBUQUJMRSkuCisgKgorICogR2l2ZW4gYSB0YWJsZSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRo YXQgY3JlYXRlZCBpdCwgcmV0dXJuIEpzb25iVmFsdWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3Jl YXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFICV7cGVyc2lz dGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgW09GCisgKiAle29m X3R5cGV9VCB8IFBBUlRJVElPTiBPRiAle3BhcmVudF9pZGVudGl0eX1EXSAle3RhYmxlX2VsZW1l bnRzfXMKKyAqICV7aW5oZXJpdHN9cyAle3BhcnRpdGlvbl9ib3VuZH1zICV7cGFydGl0aW9uX2J5 fXMgJXthY2Nlc3NfbWV0aG9kfXMKKyAqICV7d2l0aF9jbGF1c2V9cyAle3RhYmxlc3BhY2V9cwor ICovCitzdGF0aWMgSnNvbmIgKgorZGVwYXJzZV9DcmVhdGVTdG10KE9pZCBvYmplY3RJZCwgTm9k ZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVN0bXQgKm5vZGUgPSAoQ3JlYXRlU3RtdCAqKSBwYXJz ZXRyZWU7CisJUmVsYXRpb24JcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nl c3NTaGFyZUxvY2spOworCU9pZAkJCW5zcGlkID0gcmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNw YWNlOworCWNoYXIJICAgKnJlbG5hbWUgPSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlv bik7CisJTGlzdAkgICAqZHBjb250ZXh0OworCWNoYXIJICAgKnBlcnN0cjsKKwlTdHJpbmdJbmZv RGF0YSBmbXRTdHI7CisJSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSA9IE5VTEw7CisJSnNvbmJWYWx1 ZSAqdmFsdWU7CisKKwlpbml0U3RyaW5nSW5mbygmZm10U3RyKTsKKworCS8qIG1hcmsgdGhlIGJl Z2luIG9mIFJPT1Qgb2JqZWN0IGFuZCBzdGFydCBhZGRpbmcgZWxlbWVudHMgdG8gaXQuICovCisJ cHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKworCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoJmZtdFN0ciwgIkNSRUFURSIpOworCisJLyogUEVSU0lTVEVOQ0Ug Ki8KKwlwZXJzdHIgPSBnZXRfcGVyc2lzdGVuY2Vfc3RyKHJlbGF0aW9uLT5yZF9yZWwtPnJlbHBl cnNpc3RlbmNlKTsKKwlpZiAocGVyc3RyKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygm Zm10U3RyLCAiICV7cGVyc2lzdGVuY2V9cyIpOworCQluZXdfanNvbmJfVkEoc3RhdGUsIDEsCisJ CQkJCSAicGVyc2lzdGVuY2UiLCBqYnZTdHJpbmcsIHBlcnN0cik7CisJfQorCisJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmZm10U3RyLCAiIFRBQkxFIik7CisKKwkvKiBJRiBOT1QgRVhJU1RTICov CisJaWYgKG5vZGUtPmlmX25vdF9leGlzdHMpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KCZmbXRTdHIsICIgJXtpZl9ub3RfZXhpc3RzfXMiKTsKKwkJbmV3X2pzb25iX1ZBKHN0YXRlLCAx LAorCQkJCQkgImlmX25vdF9leGlzdHMiLCBqYnZTdHJpbmcsICJJRiBOT1QgRVhJU1RTIik7CisJ fQorCisJLyogSURFTlRJVFkgKi8KKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIsICIg JXtpZGVudGl0eX1EIik7CisJaW5zZXJ0X2lkZW50aXR5X29iamVjdChzdGF0ZSwgbnNwaWQsIHJl bG5hbWUpOworCisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShyZWxhdGlvbiksCisJCQkJCQkJCQlvYmplY3RJZCk7CisKKwkvKgorCSAqIFRB QkxFLUVMRU1FTlRTIGFycmF5IGNyZWF0aW9uCisJICovCisJaWYgKG5vZGUtPm9mVHlwZW5hbWUg fHwgbm9kZS0+cGFydGJvdW5kKQorCXsKKwkJLyogSW5zZXJ0IHRoZSAib2YgdHlwZSIgb3IgInBh cnRpdGlvbiBvZiIgY2xhdXNlIHdoaWNoZXZlciBwcmVzZW50ICovCisJCWlmIChub2RlLT5vZlR5 cGVuYW1lKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIsICIgT0YgJXtv Zl90eXBlfVQiKTsKKwkJCW5ld19qc29uYl9mb3JfdHlwZShzdGF0ZSwgIm9mX3R5cGUiLAorCQkJ CQkJCSAgIHJlbGF0aW9uLT5yZF9yZWwtPnJlbG9mdHlwZSwgLTEpOworCQl9CisJCWVsc2UKKwkJ eworCQkJTGlzdAkgICAqcGFyZW50czsKKwkJCU9pZAkJCW9iamlkOworCisJCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZmbXRTdHIsICIgUEFSVElUSU9OIE9GICV7cGFyZW50X2lkZW50aXR5fUQi KTsKKwkJCXBhcmVudHMgPSByZWxhdGlvbl9nZXRfaW5oX3BhcmVudHMob2JqZWN0SWQpOworCQkJ b2JqaWQgPSBsaW5pdGlhbF9vaWQocGFyZW50cyk7CisJCQlBc3NlcnQobGlzdF9sZW5ndGgocGFy ZW50cykgPT0gMSk7CisJCQluZXdfanNvbmJfZm9yX3F1YWxuYW1lX2lkKHN0YXRlLCBSZWxhdGlv blJlbGF0aW9uSWQsCisJCQkJCQkJCQkgIG9iamlkLCAicGFyZW50X2lkZW50aXR5IiwgdHJ1ZSk7 CisJCX0KKworCQlhZGRfdGFibGVfZWxlbXMoc3RhdGUsICZmbXRTdHIsIHJlbGF0aW9uLAorCQkJ CQkJCSAgIG5vZGUtPnRhYmxlRWx0cywgZHBjb250ZXh0LCBvYmplY3RJZCwKKwkJCQkJCQkgICBm YWxzZSwJLyogbm90IGluaGVyaXQgKi8KKwkJCQkJCQkgICB0cnVlLAkvKiB0eXBlZCB0YWJsZSAq LworCQkJCQkJCSAgIGZhbHNlKTsJLyogbm90IGNvbXBvc2l0ZSAqLworCX0KKwllbHNlCisJewor CQlMaXN0CSAgICppbmhyZWxhdGlvbnM7CisKKwkJLyoKKwkJICogVGhlcmUgaXMgbm8gbmVlZCB0 byBwcm9jZXNzIExJS0UgY2xhdXNlcyBzZXBhcmF0ZWx5OyB0aGV5IGhhdmUKKwkJICogYWxyZWFk eSBiZWVuIHRyYW5zZm9ybWVkIGludG8gY29sdW1ucyBhbmQgY29uc3RyYWludHMuCisJCSAqLwor CisJCWFkZF90YWJsZV9lbGVtcyhzdGF0ZSwgJmZtdFN0ciwgcmVsYXRpb24sCisJCQkJCQkJICAg bm9kZS0+dGFibGVFbHRzLCBkcGNvbnRleHQsIG9iamVjdElkLAorCQkJCQkJCSAgIHRydWUsCS8q IGluaGVyaXQgKi8KKwkJCQkJCQkgICBmYWxzZSwJLyogbm90IHR5cGVkIHRhYmxlICovCisJCQkJ CQkJICAgZmFsc2UpOwkvKiBub3QgY29tcG9zaXRlICovCisKKwkJLyoKKwkJICogQWRkIGluaGVy aXRhbmNlIHNwZWNpZmljYXRpb24uICBXZSBjYW5ub3Qgc2ltcGx5IHNjYW4gdGhlIGxpc3Qgb2YK KwkJICogcGFyZW50cyBmcm9tIHRoZSBwYXJzZXIgbm9kZSwgYmVjYXVzZSB0aGF0IG1heSBsYWNr IHRoZSBhY3R1YWwKKwkJICogcXVhbGlmaWVkIG5hbWVzIG9mIHRoZSBwYXJlbnQgcmVsYXRpb25z LiAgUmF0aGVyIHRoYW4gdHJ5aW5nIHRvCisJCSAqIHJlLXJlc29sdmUgdGhlbSBmcm9tIHRoZSBp bmZvcm1hdGlvbiBpbiB0aGUgcGFyc2Ugbm9kZSwgaXQgc2VlbXMKKwkJICogbW9yZSBhY2N1cmF0 ZSBhbmQgY29udmVuaWVudCB0byBncmFiIGl0IGZyb20gcGdfaW5oZXJpdHMuCisJCSAqLworCQlp ZiAobm9kZS0+aW5oUmVsYXRpb25zICE9IE5JTCkKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZygmZm10U3RyLCAiICV7aW5oZXJpdHN9cyIpOworCQkJaW5zZXJ0X2pzb25iX2tleShzdGF0 ZSwgImluaGVyaXRzIik7CisKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09C SkVDVCwgTlVMTCk7CisKKwkJCW5ld19qc29uYl9WQShzdGF0ZSwgMSwgImZtdCIsIGpidlN0cmlu ZywgIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiKTsKKwkJCWluaHJlbGF0aW9ucyA9IHJlbGF0 aW9uX2dldF9pbmhfcGFyZW50cyhvYmplY3RJZCk7CisKKwkJCW5ld19qc29uYkFycmF5X2Zvcl9x dWFsbmFtZV9pZChzdGF0ZSwgInBhcmVudHMiLCBpbmhyZWxhdGlvbnMpOworCQkJcHVzaEpzb25i VmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisJCX0KKwl9CisKKwkvKiBGT1Ig VkFMVUVTIGNsYXVzZSAqLworCWlmIChub2RlLT5wYXJ0Ym91bmQpCisJeworCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZmbXRTdHIsICIgJXtwYXJ0aXRpb25fYm91bmR9cyIpOworCisJCS8qCisJ CSAqIEdldCBwZ19jbGFzcy5yZWxwYXJ0Ym91bmQuIFdlIGNhbm5vdCB1c2UgcGFydGJvdW5kIGlu IHRoZSBwYXJzZXRyZWUKKwkJICogZGlyZWN0bHkgYXMgaXQncyB0aGUgb3JpZ2luYWwgcGFydGJv dW5kIGV4cHJlc3Npb24gd2hpY2ggaGF2ZW4ndAorCQkgKiBiZWVuIHRyYW5zZm9ybWVkLgorCQkg Ki8KKwkJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLAorCQkJCQkgInBhcnRpdGlvbl9ib3VuZCIsIGpi dlN0cmluZywKKwkJCQkJIHJlbGF0aW9uX2dldF9wYXJ0X2JvdW5kKG9iamVjdElkKSk7CisJfQor CisJLyogUEFSVElUSU9OIEJZIGNsYXVzZSAqLworCWlmIChyZWxhdGlvbi0+cmRfcmVsLT5yZWxr aW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJeworCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKCZmbXRTdHIsICIgJXtwYXJ0aXRpb25fYnl9cyIpOworCQlpbnNlcnRfanNvbmJfa2V5 KHN0YXRlLCAicGFydGl0aW9uX2J5Iik7CisJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JF R0lOX09CSkVDVCwgTlVMTCk7CisKKwkJbmV3X2pzb25iX1ZBKHN0YXRlLCAyLAorCQkJCQkgImZt dCIsIGpidlN0cmluZywgIlBBUlRJVElPTiBCWSAle2RlZmluaXRpb259cyIsCisJCQkJCSAiZGVm aW5pdGlvbiIsIGpidlN0cmluZywKKwkJCQkJIHBnX2dldF9wYXJ0a2V5ZGVmX3N0cmluZyhvYmpl Y3RJZCkpOworCisJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwp OworCX0KKworCS8qIFVTSU5HIGNsYXVzZSAqLworCWlmIChub2RlLT5hY2Nlc3NNZXRob2QpCisJ eworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIsICIgJXthY2Nlc3NfbWV0aG9kfXMi KTsKKwkJaW5zZXJ0X2pzb25iX2tleShzdGF0ZSwgImFjY2Vzc19tZXRob2QiKTsKKwkJcHVzaEpz b25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKworCQluZXdfanNvbmJf VkEoc3RhdGUsIDIsCisJCQkJCSAiZm10IiwgamJ2U3RyaW5nLCAiVVNJTkcgJXthY2Nlc3NfbWV0 aG9kfUkiLAorCQkJCQkgImFjY2Vzc19tZXRob2QiLCBqYnZTdHJpbmcsIG5vZGUtPmFjY2Vzc01l dGhvZCk7CisJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOwor CX0KKworCS8qIFdJVEggY2xhdXNlICovCisJaWYgKG5vZGUtPm9wdGlvbnMpCisJeworCQlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIsICIgJXt3aXRoX2NsYXVzZX1zIik7CisJCWluc2Vy dF9qc29uYl9rZXkoc3RhdGUsICJ3aXRoX2NsYXVzZSIpOworCQlwdXNoSnNvbmJWYWx1ZSgmc3Rh dGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCQluZXdfanNvbmJfVkEoc3RhdGUsIDEsCisJ CQkJCSAiZm10IiwgamJ2U3RyaW5nLCAiV0lUSCAoJXt3aXRoOiwgfXMpIik7CisKKwkJZGVwYXJz ZV93aXRoT2JqKHN0YXRlLCBub2RlKTsKKworCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9F TkRfT0JKRUNULCBOVUxMKTsKKworCX0KKworCS8qIFRBQkxFU1BBQ0UgKi8KKwlpZiAobm9kZS0+ dGFibGVzcGFjZW5hbWUpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIsICIg JXt0YWJsZXNwYWNlfXMiKTsKKwkJaW5zZXJ0X2pzb25iX2tleShzdGF0ZSwgInRhYmxlc3BhY2Ui KTsKKwkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKwkJ bmV3X2pzb25iX1ZBKHN0YXRlLCAyLAorCQkJCQkgImZtdCIsIGpidlN0cmluZywgIlRBQkxFU1BB Q0UgJXt0YWJsZXNwYWNlfUkiLAorCQkJCQkgInRhYmxlc3BhY2UiLCBqYnZTdHJpbmcsIG5vZGUt PnRhYmxlc3BhY2VuYW1lKTsKKwkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVD VCwgTlVMTCk7CisJfQorCisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9j ayk7CisKKwkvKiBXZSBoYXZlIGZ1bGwgZm10IGJ5IG5vdywgc28gYWRkIGpzb25iIGVsZW1lbnQg Zm9yIHRoYXQgKi8KKwluZXdfanNvbmJfVkEoc3RhdGUsIDEsICJmbXQiLCBqYnZTdHJpbmcsIGZt dFN0ci5kYXRhKTsKKworCXBmcmVlKGZtdFN0ci5kYXRhKTsKKworCS8qIE1hcmsgdGhlIGVuZCBv ZiBST09UIG9iamVjdCAqLworCXZhbHVlID0gcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5E X09CSkVDVCwgTlVMTCk7CisKKwlyZXR1cm4gSnNvbmJWYWx1ZVRvSnNvbmIodmFsdWUpOworfQor CisvKgorICogRGVwYXJzZSBhIERyb3BTdG10IChEUk9QIFRBQkxFKS4KKyAqCisgKiBHaXZlbiBh biBvYmplY3QgaWRlbnRpdHkgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0 dXJuCisgKiBqc29uYiBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBkcm9wIGNvbW1hbmQuCisgKgor ICogVmVyYm9zZSBzeW50YXgKKyAqIERST1AgVEFCTEUgJXtjb25jdXJyZW50bHl9cyAle2lmX2V4 aXN0c31zICV7b2JqaWRlbnRpdHl9cyAle2Nhc2NhZGV9cworICovCitjaGFyICoKK2RlcGFyc2Vf ZHJvcF90YWJsZShjb25zdCBjaGFyICpvYmppZGVudGl0eSwgTm9kZSAqcGFyc2V0cmVlKQorewor CURyb3BTdG10ICAgKm5vZGUgPSAoRHJvcFN0bXQgKikgcGFyc2V0cmVlOworCVN0cmluZ0luZm9E YXRhIGZtdFN0cjsKKwlKc29uYlZhbHVlICpqc29uYnZhbDsKKwlKc29uYgkgICAqanNvbmI7CisJ U3RyaW5nSW5mb0RhdGEgc3RyOworCUpzb25iUGFyc2VTdGF0ZSAqc3RhdGUgPSBOVUxMOworCisJ aW5pdFN0cmluZ0luZm8oJnN0cik7CisJaW5pdFN0cmluZ0luZm8oJmZtdFN0cik7CisKKwkvKiBt YXJrIHRoZSBiZWdpbiBvZiBST09UIG9iamVjdCBhbmQgc3RhcnQgYWRkaW5nIGVsZW1lbnRzIHRv IGl0LiAqLworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7 CisKKwkvKiBTdGFydCBjb25zdHJ1Y3RpbmcgZm10IHN0cmluZyAqLworCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoJmZtdFN0ciwgIkRST1AgVEFCTEUiKTsKKworCS8qIENPTkNVUlJFTlRMWSAqLwor CWlmIChub2RlLT5jb25jdXJyZW50KQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10 U3RyLCAiICV7Y29uY3VycmVudGx5fXMiKTsKKwkJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLAorCQkJ CQkgImNvbmN1cnJlbnRseSIsIGpidlN0cmluZywgIkNPTkNVUlJFTlRMWSIpOworCX0KKworCS8q IElGIEVYSVNUUyAqLworCWlmIChub2RlLT5taXNzaW5nX29rKQorCXsKKwkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZygmZm10U3RyLCAiICV7aWZfZXhpc3RzfXMiKTsKKwkJbmV3X2pzb25iX1ZBKHN0 YXRlLCAxLCAiaWZfZXhpc3RzIiwgamJ2U3RyaW5nLCAiSUYgRVhJU1RTIik7CisJfQorCisJLyog SURFTlRJVFkgKi8KKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIsICIgJXtvYmppZGVu dGl0eX1zIik7CisJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLCAib2JqaWRlbnRpdHkiLCBqYnZTdHJp bmcsIG9iamlkZW50aXR5KTsKKworCS8qIENBU0NBREUgKi8KKwlpZiAobm9kZS0+YmVoYXZpb3Ig PT0gRFJPUF9DQVNDQURFKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3RyLCAi ICV7Y2FzY2FkZX1zIik7CisJCW5ld19qc29uYl9WQShzdGF0ZSwgMSwgImNhc2NhZGUiLCBqYnZT dHJpbmcsICJDQVNDQURFIik7CisJfQorCisJLyogV2UgaGF2ZSBmdWxsIGZtdCBieSBub3csIHNv IGFkZCBqc29uYiBlbGVtZW50IGZvciB0aGF0ICovCisJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLCAi Zm10IiwgamJ2U3RyaW5nLCBmbXRTdHIuZGF0YSk7CisJcGZyZWUoZm10U3RyLmRhdGEpOworCisJ anNvbmJ2YWwgPSBwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsK KworCWpzb25iID0gSnNvbmJWYWx1ZVRvSnNvbmIoanNvbmJ2YWwpOworCXJldHVybiBKc29uYlRv Q1N0cmluZygmc3RyLCAmanNvbmItPnJvb3QsIEpTT05CX0VTVElNQVRFRF9MRU4pOworfQorCisv KgorICogRGVwYXJzZSBhIENyZWF0ZVNlcVN0bXQuCisgKgorICogR2l2ZW4gYSBzZXF1ZW5jZSBP SUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIEpzb25iCisgKiBy ZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogTm90ZTogV2UgbmVlZCB0 byBkZXBhcnNlIHRoZSBDUkVBVEUgU0VRVUVOQ0UgY29tbWFuZCBmb3IgdGhlIFRBQkxFCisgKiBj b21tYW5kcy4gRm9yIGV4YW1wbGUsIFdoZW4gY3JlYXRpbmcgYSB0YWJsZSwgaWYgd2Ugc3BlY2lm eSBhIGNvbHVtbiBhcyBhCisgKiBzZXJpYWwgdHlwZSwgdGhlbiB3ZSB3aWxsIGNyZWF0ZSBhIHNl cXVlbmNlIGZvciB0aGF0IGNvbHVtbiBhbmQgc2V0IHRoYXQKKyAqIHNlcXVlbmNlIE9XTkVEIEJZ IHRoZSB0YWJsZS4gVGhlIHNlcmlhbCBjb2x1bW4gdHlwZSBpbmZvcm1hdGlvbiBpcyBub3QKKyAq IGF2YWlsYWJsZSBkdXJpbmcgZGVwYXJzaW5nIHBoYXNlIGFzIHRoYXQgaGFzIGFscmVhZHkgYmVl biBjb252ZXJ0ZWQgdG8KKyAqIHRoZSBjb2x1bW4gZGVmYXVsdCB2YWx1ZSBhbmQgc2VxdWVuY2Vz IGNyZWF0aW9uIHdoaWxlIHBhcnNpbmcuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFU RSAle3BlcnNpc3RlbmNlfXMgU0VRVUVOQ0UgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1E ICV7ZGVmaW5pdGlvbjogfXMKKyAqLworc3RhdGljIEpzb25iICoKK2RlcGFyc2VfQ3JlYXRlU2Vx U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlSZWxhdGlvbglyZWxhdGlv bjsKKwlGb3JtX3BnX3NlcXVlbmNlIHNlcWZvcm07CisJU2VxdWVuY2VfdmFsdWVzICpzZXF2YWx1 ZXM7CisJQ3JlYXRlU2VxU3RtdCAqY3JlYXRlU2VxU3RtdCA9IChDcmVhdGVTZXFTdG10ICopIHBh cnNldHJlZTsKKwlKc29uYlBhcnNlU3RhdGUgKnN0YXRlID0gTlVMTDsKKwlKc29uYlZhbHVlICp2 YWx1ZTsKKwlTdHJpbmdJbmZvRGF0YSBmbXRTdHI7CisJY2hhcgkgICAqcGVyc3RyOworCisJLyoK KwkgKiBPbmx5IHN1cHBvcnQgc2VxdWVuY2UgZm9yIElERU5USVRZIENPTFVNTiBvdXRwdXQgc2Vw YXJhdGVseSAodmlhIENSRUFURQorCSAqIFRBQkxFIG9yIEFMVEVSIFRBQkxFKS4gT3RoZXJ3aXNl LCByZXR1cm4gZW1wdHkgaGVyZS4KKwkgKi8KKwlpZiAoY3JlYXRlU2VxU3RtdC0+Zm9yX2lkZW50 aXR5KQorCQlyZXR1cm4gTlVMTDsKKworCWluaXRTdHJpbmdJbmZvKCZmbXRTdHIpOworCXJlbGF0 aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCS8qIG1h cmsgdGhlIHN0YXJ0IG9mIFJPT1Qgb2JqZWN0ICovCisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBX SkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIs ICJDUkVBVEUiKTsKKworCS8qIFBFUlNJU1RFTkNFICovCisJcGVyc3RyID0gZ2V0X3BlcnNpc3Rl bmNlX3N0cihyZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSk7CisJaWYgKHBlcnN0cikK Kwl7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmZtdFN0ciwgIiAle3BlcnNpc3RlbmNlfXMi KTsKKwkJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLAorCQkJCQkgInBlcnNpc3RlbmNlIiwgamJ2U3Ry aW5nLCBwZXJzdHIpOworCX0KKworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmZtdFN0ciwgIiBT RVFVRU5DRSIpOworCisJLyogSUYgTk9UIEVYSVNUUyAqLworCWlmIChjcmVhdGVTZXFTdG10LT5p Zl9ub3RfZXhpc3RzKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3RyLCAiICV7 aWZfbm90X2V4aXN0c31zIik7CisJCW5ld19qc29uYl9WQShzdGF0ZSwgMSwKKwkJCQkJICJpZl9u b3RfZXhpc3RzIiwgamJ2U3RyaW5nLCAiSUYgTk9UIEVYSVNUUyIpOworCX0KKworCS8qIElERU5U SVRZICovCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3RyLCAiICV7aWRlbnRpdHl9RCIp OworCWluc2VydF9pZGVudGl0eV9vYmplY3Qoc3RhdGUsIHJlbGF0aW9uLT5yZF9yZWwtPnJlbG5h bWVzcGFjZSwKKwkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSk7CisK KwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXNlcXZhbHVl cyA9IGdldF9zZXF1ZW5jZV92YWx1ZXMob2JqZWN0SWQpOworCXNlcWZvcm0gPSBzZXF2YWx1ZXMt PnNlcWZvcm07CisKKwkvKiBzZXF1ZW5jZSBkZWZpbml0aW9uIGFycmF5IG9iamVjdCBjcmVhdGlv biwgcHVzaCB0aGUga2V5IGZpcnN0ICovCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3Ry LCAiICV7ZGVmaW5pdGlvbjogfXMiKTsKKwlpbnNlcnRfanNvbmJfa2V5KHN0YXRlLCAiZGVmaW5p dGlvbiIpOworCisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fQVJSQVksIE5VTEwp OworCisJLyogRGVmaW5pdGlvbiBlbGVtZW50cyAqLworCWRlcGFyc2VfU2VxX0NhY2hlKHN0YXRl LCBzZXFmb3JtKTsKKwlkZXBhcnNlX1NlcV9DeWNsZShzdGF0ZSwgc2VxZm9ybSk7CisJZGVwYXJz ZV9TZXFfSW5jcmVtZW50Qnkoc3RhdGUsIHNlcWZvcm0pOworCWRlcGFyc2VfU2VxX01pbnZhbHVl KHN0YXRlLCBzZXFmb3JtKTsKKwlkZXBhcnNlX1NlcV9NYXh2YWx1ZShzdGF0ZSwgc2VxZm9ybSk7 CisJZGVwYXJzZV9TZXFfU3RhcnR3aXRoKHN0YXRlLCBzZXFmb3JtKTsKKwlkZXBhcnNlX1NlcV9S ZXN0YXJ0KHN0YXRlLCBzZXF2YWx1ZXMtPmxhc3RfdmFsdWUpOworCWRlcGFyc2VfU2VxX0FzKHN0 YXRlLCBzZXFmb3JtKTsKKwkvKiBXZSBwdXJwb3NlZnVsbHkgZG8gbm90IGVtaXQgT1dORUQgQlkg aGVyZSAqLworCisJLyogbWFyayB0aGUgZW5kIG9mIHNlcXVlbmNlIGRlZmluaXRpb24gYXJyYXkg Ki8KKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfQVJSQVksIE5VTEwpOworCisJLyog V2UgaGF2ZSBmdWxsIGZtdCBieSBub3csIHNvIGFkZCBqc29uYiBlbGVtZW50IGZvciB0aGF0ICov CisJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLCAiZm10IiwgamJ2U3RyaW5nLCBmbXRTdHIuZGF0YSk7 CisKKwlwZnJlZShmbXRTdHIuZGF0YSk7CisKKwkvKiBtYXJrIHRoZSBlbmQgb2YgUk9PVCBvYmpl Y3QgKi8KKwl2YWx1ZSA9IHB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5V TEwpOworCisJcmV0dXJuIEpzb25iVmFsdWVUb0pzb25iKHZhbHVlKTsKK30KKworLyoKKyAqIERl cGFyc2UgYW4gQWx0ZXJTZXFTdG10LgorICoKKyAqIEdpdmVuIGEgc2VxdWVuY2UgT0lEIGFuZCBh IHBhcnNlIHRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJuIEpzb25iCisgKiByZXByZXNlbnRp bmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogTm90ZTogV2UgbmVlZCB0byBkZXBhcnNlIHRo ZSBBTFRFUiBTRVFVRU5DRSBjb21tYW5kIGZvciB0aGUgVEFCTEUgY29tbWFuZHMuCisgKiBGb3Ig ZXhhbXBsZSwgV2hlbiBjcmVhdGluZyBhIHRhYmxlLCBpZiB3ZSBzcGVjaWZ5IGEgY29sdW1uIGFz IGEgc2VyaWFsCisgKiB0eXBlLCB0aGVuIHdlIHdpbGwgY3JlYXRlIGEgc2VxdWVuY2UgZm9yIHRo YXQgY29sdW1uIGFuZCBzZXQgdGhhdCBzZXF1ZW5jZQorICogT1dORUQgQlkgdGhlIHRhYmxlLiBU aGUgc2VyaWFsIGNvbHVtbiB0eXBlIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUKKyAqIGR1 cmluZyBkZXBhcnNpbmcgcGhhc2UgYXMgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNvbnZlcnRlZCB0 byB0aGUgY29sdW1uCisgKiBkZWZhdWx0IHZhbHVlIGFuZCBzZXF1ZW5jZXMgY3JlYXRpb24gd2hp bGUgcGFyc2luZy4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgU0VRVUVOQ0UgJXtp ZGVudGl0eX1EICV7ZGVmaW5pdGlvbjogfXMKKyAqLworc3RhdGljIEpzb25iICoKK2RlcGFyc2Vf QWx0ZXJTZXFTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCVJlbGF0aW9u CXJlbGF0aW9uOworCUxpc3RDZWxsICAgKmNlbGw7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3Jt OworCVNlcXVlbmNlX3ZhbHVlcyAqc2VxdmFsdWVzOworCUFsdGVyU2VxU3RtdCAqYWx0ZXJTZXFT dG10ID0gKEFsdGVyU2VxU3RtdCAqKSBwYXJzZXRyZWU7CisJSnNvbmJQYXJzZVN0YXRlICpzdGF0 ZSA9IE5VTEw7CisJSnNvbmJWYWx1ZSAqdmFsdWU7CisKKwkvKgorCSAqIFNlcXVlbmNlIGZvciBJ REVOVElUWSBDT0xVTU4gb3V0cHV0IHNlcGFyYXRlbHkgKHZpYSBDUkVBVEUgVEFCTEUgb3IKKwkg KiBBTFRFUiBUQUJMRSk7IHJldHVybiBlbXB0eSBoZXJlLgorCSAqLworCWlmIChhbHRlclNlcVN0 bXQtPmZvcl9pZGVudGl0eSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZWxhdGlvbiA9IHJlbGF0aW9u X29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkvKiBtYXJrIHRoZSBzdGFydCBv ZiBST09UIG9iamVjdCAqLworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVD VCwgTlVMTCk7CisKKwluZXdfanNvbmJfVkEoc3RhdGUsIDEsCisJCQkJICJmbXQiLCBqYnZTdHJp bmcsICJBTFRFUiBTRVFVRU5DRSAle2lkZW50aXR5fUQgJXtkZWZpbml0aW9uOiB9cyIpOworCisJ aW5zZXJ0X2lkZW50aXR5X29iamVjdChzdGF0ZSwgcmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNw YWNlLAorCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pKTsKKwlyZWxh dGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXNlcXZhbHVlcyA9IGdl dF9zZXF1ZW5jZV92YWx1ZXMob2JqZWN0SWQpOworCXNlcWZvcm0gPSBzZXF2YWx1ZXMtPnNlcWZv cm07CisKKwkvKiBzZXF1ZW5jZSBkZWZpbml0aW9uIGFycmF5IG9iamVjdCBjcmVhdGlvbiwgcHVz aCB0aGUga2V5IGZpcnN0ICovCisJaW5zZXJ0X2pzb25iX2tleShzdGF0ZSwgImRlZmluaXRpb24i KTsKKworCS8qIG1hcmsgdGhlIHN0YXJ0IG9mIHNlcXVlbmNlIGRlZmluaXRpb24gYXJyYXkgKi8K KwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9BUlJBWSwgTlVMTCk7CisKKwlmb3Jl YWNoKGNlbGwsICgoQWx0ZXJTZXFTdG10ICopIHBhcnNldHJlZSktPm9wdGlvbnMpCisJeworCQlE ZWZFbGVtICAgICplbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCisJCWlmIChzdHJj bXAoZWxlbS0+ZGVmbmFtZSwgImNhY2hlIikgPT0gMCkKKwkJCWRlcGFyc2VfU2VxX0NhY2hlKHN0 YXRlLCBzZXFmb3JtKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJjeWNsZSIp ID09IDApCisJCQlkZXBhcnNlX1NlcV9DeWNsZShzdGF0ZSwgc2VxZm9ybSk7CisJCWVsc2UgaWYg KHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiaW5jcmVtZW50IikgPT0gMCkKKwkJCWRlcGFyc2VfU2Vx X0luY3JlbWVudEJ5KHN0YXRlLCBzZXFmb3JtKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRl Zm5hbWUsICJtaW52YWx1ZSIpID09IDApCisJCQlkZXBhcnNlX1NlcV9NaW52YWx1ZShzdGF0ZSwg c2VxZm9ybSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAibWF4dmFsdWUiKSA9 PSAwKQorCQkJZGVwYXJzZV9TZXFfTWF4dmFsdWUoc3RhdGUsIHNlcWZvcm0pOworCQllbHNlIGlm IChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInN0YXJ0IikgPT0gMCkKKwkJCWRlcGFyc2VfU2VxX1N0 YXJ0d2l0aChzdGF0ZSwgc2VxZm9ybSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1l LCAicmVzdGFydCIpID09IDApCisJCQlkZXBhcnNlX1NlcV9SZXN0YXJ0KHN0YXRlLCBzZXF2YWx1 ZXMtPmxhc3RfdmFsdWUpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgIm93bmVk X2J5IikgPT0gMCkKKwkJCWRlcGFyc2VfU2VxX093bmVkQnkoc3RhdGUsIG9iamVjdElkKTsKKwkJ ZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJhcyIpID09IDApCisJCQlkZXBhcnNlX1Nl cV9BcyhzdGF0ZSwgc2VxZm9ybSk7CisJCWVsc2UKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHNl cXVlbmNlIG9wdGlvbiAlcyIsIGVsZW0tPmRlZm5hbWUpOworCX0KKworCS8qIG1hcmsgdGhlIGVu ZCBvZiBzZXF1ZW5jZSBkZWZpbml0aW9uIGFycmF5ICovCisJcHVzaEpzb25iVmFsdWUoJnN0YXRl LCBXSkJfRU5EX0FSUkFZLCBOVUxMKTsKKworCS8qIG1hcmsgdGhlIGVuZCBvZiBST09UIG9iamVj dCAqLworCXZhbHVlID0gcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVM TCk7CisKKwlyZXR1cm4gSnNvbmJWYWx1ZVRvSnNvbmIodmFsdWUpOworfQorCisvKgorICogSGFu ZGxlIGRlcGFyc2luZyBvZiBzaW1wbGUgY29tbWFuZHMuCisgKgorICogVGhpcyBmdW5jdGlvbiBz aG91bGQgY292ZXIgYWxsIGNhc2VzIGhhbmRsZWQgaW4gUHJvY2Vzc1V0aWxpdHlTbG93LgorICov CitzdGF0aWMgSnNvbmIgKgorZGVwYXJzZV9zaW1wbGVfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5k ICpjbWQpCit7CisJT2lkCQkJb2JqZWN0SWQ7CisJTm9kZQkgICAqcGFyc2V0cmVlOworCisJQXNz ZXJ0KGNtZC0+dHlwZSA9PSBTQ1RfU2ltcGxlKTsKKworCXBhcnNldHJlZSA9IGNtZC0+cGFyc2V0 cmVlOworCW9iamVjdElkID0gY21kLT5kLnNpbXBsZS5hZGRyZXNzLm9iamVjdElkOworCisJaWYg KGNtZC0+aW5fZXh0ZW5zaW9uICYmIChub2RlVGFnKHBhcnNldHJlZSkgIT0gVF9DcmVhdGVFeHRl bnNpb25TdG10KSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBUaGlzIHN3aXRjaCBuZWVkcyB0byBo YW5kbGUgZXZlcnl0aGluZyB0aGF0IFByb2Nlc3NVdGlsaXR5U2xvdyBkb2VzICovCisJc3dpdGNo IChub2RlVGFnKHBhcnNldHJlZSkpCisJeworCQljYXNlIFRfQWx0ZXJTZXFTdG10OgorCQkJcmV0 dXJuIGRlcGFyc2VfQWx0ZXJTZXFTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2Ug VF9DcmVhdGVTZXFTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlU2VxU3RtdChvYmplY3RJ ZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlU3RtdDoKKwkJCXJldHVybiBkZXBhcnNl X0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2co TE9HLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZSBpbiBkZXBhcnNlIGNvbW1hbmQ6ICVkIiwKKwkJ CQkgKGludCkgbm9kZVRhZyhwYXJzZXRyZWUpKTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKwor LyoKKyAqIFdvcmtob3JzZSB0byBkZXBhcnNlIGEgQ29sbGVjdGVkQ29tbWFuZC4KKyAqLworY2hh ciAqCitkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJ T3ZlcnJpZGVTZWFyY2hQYXRoICpvdmVycmlkZVBhdGg7CisJTWVtb3J5Q29udGV4dCBvbGRjeHQ7 CisJTWVtb3J5Q29udGV4dCB0bXBjeHQ7CisJY2hhcgkgICAqY29tbWFuZCA9IE5VTEw7CisJU3Ry aW5nSW5mb0RhdGEgc3RyOworCUpzb25iCSAgICpqc29uYjsKKworCS8qCisJICogQWxsb2NhdGUg ZXZlcnl0aGluZyBkb25lIGJ5IHRoZSBkZXBhcnNpbmcgcm91dGluZXMgaW50byBhIHRlbXAgY29u dGV4dCwKKwkgKiB0byBhdm9pZCBoYXZpbmcgdG8gc3ByaW5rbGUgdGhlbSB3aXRoIG1lbW9yeSBo YW5kbGluZyBjb2RlLCBidXQKKwkgKiBhbGxvY2F0ZSB0aGUgb3V0cHV0IFN0cmluZ0luZm8gYmVm b3JlIHN3aXRjaGluZy4KKwkgKi8KKwlpbml0U3RyaW5nSW5mbygmc3RyKTsKKwl0bXBjeHQgPSBB bGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCSAgICJk ZXBhcnNlIGN0eCIsCisJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfTUlOU0laRSwKKwkJCQkJ CQkJICAgQUxMT0NTRVRfREVGQVVMVF9JTklUU0laRSwKKwkJCQkJCQkJICAgQUxMT0NTRVRfREVG QVVMVF9NQVhTSVpFKTsKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8odG1wY3h0KTsK KworCS8qCisJICogTWFueSByb3V0aW5lcyB1bmRlcmx5aW5nIHRoaXMgb25lIHdpbGwgaW52b2tl IHJ1bGV1dGlscy5jIGZ1bmN0aW9uYWxpdHkKKwkgKiB0byBvYnRhaW4gZGVwYXJzZWQgdmVyc2lv bnMgb2YgZXhwcmVzc2lvbnMuICBJbiBzdWNoIHJlc3VsdHMsIHdlIHdhbnQKKwkgKiBhbGwgb2Jq ZWN0IG5hbWVzIHRvIGJlIHF1YWxpZmllZCwgc28gdGhhdCByZXN1bHRzIGFyZSAicG9ydGFibGUi IHRvCisJICogZW52aXJvbm1lbnRzIHdpdGggZGlmZmVyZW50IHNlYXJjaF9wYXRoIHNldHRpbmdz LiAgUmF0aGVyIHRoYW4KKwkgKiBpbmplY3Rpbmcgd2hhdCB3b3VsZCBiZSByZXBldGl0aXZlIGNh bGxzIHRvIG92ZXJyaWRlIHNlYXJjaCBwYXRoIGFsbAorCSAqIG92ZXIgdGhlIHBsYWNlLCB3ZSBk byBpdCBjZW50cmFsbHkgaGVyZS4KKwkgKi8KKwlvdmVycmlkZVBhdGggPSBHZXRPdmVycmlkZVNl YXJjaFBhdGgoQ3VycmVudE1lbW9yeUNvbnRleHQpOworCW92ZXJyaWRlUGF0aC0+c2NoZW1hcyA9 IE5JTDsKKwlvdmVycmlkZVBhdGgtPmFkZENhdGFsb2cgPSBmYWxzZTsKKwlvdmVycmlkZVBhdGgt PmFkZFRlbXAgPSB0cnVlOworCVB1c2hPdmVycmlkZVNlYXJjaFBhdGgob3ZlcnJpZGVQYXRoKTsK KworCXN3aXRjaCAoY21kLT50eXBlKQorCXsKKwkJY2FzZSBTQ1RfU2ltcGxlOgorCQkJanNvbmIg PSBkZXBhcnNlX3NpbXBsZV9jb21tYW5kKGNtZCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJ CWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGRlcGFyc2Ugbm9kZSB0eXBlICVkIiwgY21kLT50eXBl KTsKKwl9CisKKwlQb3BPdmVycmlkZVNlYXJjaFBhdGgoKTsKKworCWlmIChqc29uYikKKwkJY29t bWFuZCA9IEpzb25iVG9DU3RyaW5nKCZzdHIsICZqc29uYi0+cm9vdCwgSlNPTkJfRVNUSU1BVEVE X0xFTik7CisKKwkvKgorCSAqIENsZWFuIHVwLiAgTm90ZSB0aGF0IHNpbmNlIHdlIGNyZWF0ZWQg dGhlIFN0cmluZ0luZm8gaW4gdGhlIGNhbGxlcidzCisJICogY29udGV4dCwgdGhlIG91dHB1dCBz dHJpbmcgaXMgbm90IGRlbGV0ZWQgaGVyZS4KKwkgKi8KKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8o b2xkY3h0KTsKKwlNZW1vcnlDb250ZXh0RGVsZXRlKHRtcGN4dCk7CisKKwlyZXR1cm4gY29tbWFu ZDsKK30KKworLyoKKyAqIEdpdmVuIGEgQ29sbGVjdGVkQ29tbWFuZCwgcmV0dXJuIGEgSlNPTiBy ZXByZXNlbnRhdGlvbiBvZiBpdC4KKyAqCisgKiBUaGUgY29tbWFuZCBpcyBleHBhbmRlZCBmdWxs eSBzbyB0aGF0IHRoZXJlIGFyZSBubyBhbWJpZ3VpdGllcyBldmVuIGluIHRoZQorICogZmFjZSBv ZiBzZWFyY2hfcGF0aCBjaGFuZ2VzLgorICovCitEYXR1bQorZGRsX2RlcGFyc2VfdG9fanNvbihQ R19GVU5DVElPTl9BUkdTKQoreworCUNvbGxlY3RlZENvbW1hbmQgKmNtZCA9IChDb2xsZWN0ZWRD b21tYW5kICopIFBHX0dFVEFSR19QT0lOVEVSKDApOworCWNoYXIJICAgKmNvbW1hbmQ7CisKKwlj b21tYW5kID0gZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoY21kKTsKKworCWlmIChjb21tYW5kKQor CQlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4dChjb21tYW5kKSk7CisKKwlQR19SRVRV Uk5fTlVMTCgpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsanNvbi5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsanNvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAuLmQ1Yzk2OGI3YzEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9kZGxqc29uLmMKQEAgLTAsMCArMSw3NTkgQEAKKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICoKKyAqIGRkbGpzb24uYworICoJICBKU09OIGNvZGUgcmVsYXRlZCB0byBEREwgY29tbWFu ZCBkZXBhcnNpbmcKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMywgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAo YykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICog Tk9URVMKKyAqCisgKiBFYWNoIEpTT05CIG9iamVjdCBpcyBzdXBwb3NlZCB0byBoYXZlIGEgImZt dCIgd2hpY2ggd2lsbCB0ZWxsIGV4cGFuc2lvbgorICogcm91dGluZXMgaG93IEpTT05CIGNhbiBi ZSBleHBhbmRlZCB0byBjb25zdHJ1Y3QgZGRsIGNvbW1hbmQuIE9uZSBleGFtcGxlCisgKiBzbmlw cGV0IGZyb20gSlNPTkIgb2JqZWN0IGZvciAnQUxURVIgVEFCTEUgc2FsZXMgQUREIGNvbDEgaW50 JzoKKyAqCisgKiB7ICoxLWxldmVsKgorICogICAiZm10IjogIkFMVEVSICV7b2JqdHlwZX1zICV7 b25seX1zICV7aWRlbnRpdHl9RCAle3N1YmNtZHM6LCB9cyIsCisgKiAgICJvbmx5IjogIiIsCisg KiAgIm9ianR5cGUiOiAiVEFCTEUiLAorICogICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJzYWxl cyIsICJzY2hlbWFuYW1lIjogInB1YmxpYyJ9CisgKiAgInN1YmNtZHMiOiBbCisgKiAgICAgIHsg KjItbGV2ZWwqCisgKiAgICAgICAgICAiZm10IjogIkFERCAle29ianR5cGV9cyAle2lmX25vdF9l eGlzdHN9cyAle2RlZmluaXRpb259cyIsCisgKiAgICAgICAgICAidHlwZSI6ICJhZGQgY29sdW1u IiwKKyAqICAgICAgICAgICJvYmp0eXBlIjogIkNPTFVNTiIsCisgKiAgICAgICAgICAiZGVmaW5p dGlvbiI6IHt9CisgKiAgICAgICAgICAgLi4uCisgKiAgICAgIH0KKyAqICAgICAgLi4uCisgKiB9 CisgKgorICogRnJvbSBhYm92ZSwgd2UgY2FuIHNlZSBkaWZmZXJlbnQga2V5LXZhbHVlIHBhaXJz LgorICogbGV2ZWwtMSByZXByZXNlbnRzIFJPT1Qgb2JqZWN0IHdpdGggJ2ZtdCcsICdvbmx5Jywg J29ianR5cGUnLCdpZGVudGl0eScsCisgKiAnc3ViY21kcycgYXMgdGhlIGtleXMgd2l0aCB0aGUg dmFsdWVzIGFwcGVuZGVkIGFmdGVyICI6IiB3aXRoIGVhY2gga2V5LgorICogVmFsdWUgY2FuIGJl IHN0cmluZywgYm9vbCwgbnVtZXJpYywgYXJyYXkgb3IgYW55IG5lc3RlZCBvYmplY3QuICBBcyBh bgorICogZXhhbXBsZSwgIm9ianR5cGUiIGhhcyBzdHJpbmcgdmFsdWUgd2hpbGUgInN1YmNtZHMi IGhhcyBuZXN0ZWQtb2JqZWN0CisgKiBhcyBpdHMgdmFsdWUgd2hpY2ggY2FuIGZ1cnRoZXIgaGF2 ZSBtdWx0aXBsZSBrZXktdmFsdWUgcGFpcnMuCisgKgorICogVGhlIHZhbHVlIG9mICJmbXQiIHRl bGxzIHVzIGhvdyB0aGUgZXhwYW5zaW9uIHdpbGwgYmUgY2FycmllZCBvbi4gVGhlCisgKiB2YWx1 ZSBvZiAiZm10IiAgbWF5IGNvbnRhaW4gemVybyBvciBtb3JlICUtZXNjYXBlcywgd2hpY2ggY29u c2lzdCBvZiBrZXkKKyAqIG5hbWUgZW5jbG9zZWQgaW4geyB9LCBmb2xsb3dlZCBieSBhIGNvbnZl cnNpb24gc3BlY2lmaWVyIHdoaWNoIHRlbGxzIHVzCisgKiBob3cgdGhlIHZhbHVlIGZvciB0aGF0 IHBhcnRpY3VsYXIga2V5IHNob3VsZCBiZSBleHBhbmRlZC4KKyAqIFBvc3NpYmxlIGNvbnZlcnNp b24gc3BlY2lmaWVycyBhcmU6CisgKiAlICAgICAgICAgICAgZXhwYW5kIHRvIGEgbGl0ZXJhbCAl CisgKiBJICAgICAgICAgICAgZXhwYW5kIGFzIGEgc2luZ2xlLCBub24tcXVhbGlmaWVkIGlkZW50 aWZpZXIKKyAqIEQgICAgICAgICAgICBleHBhbmQgYXMgYSBwb3NzaWJseS1xdWFsaWZpZWQgaWRl bnRpZmllcgorICogVCAgICAgICAgICAgIGV4cGFuZCBhcyBhIHR5cGUgbmFtZQorICogTCAgICAg ICAgICAgIGV4cGFuZCBhcyBhIHN0cmluZyBsaXRlcmFsIChxdW90ZSB1c2luZyBzaW5nbGUgcXVv dGVzKQorICogcyAgICAgICAgICAgIGV4cGFuZCBhcyBhIHNpbXBsZSBzdHJpbmcgKG5vIHF1b3Rp bmcpCisgKiBuICAgICAgICAgICAgZXhwYW5kIGFzIGEgc2ltcGxlIG51bWJlciAobm8gcXVvdGlu ZykKKyAqCisgKiBJbiBvcmRlciB0byBidWlsZCBhIERETCBjb21tYW5kLCBpdCB3aWxsIGZpcnN0 IGV4dHJhY3QgImZtdCIgbm9kZSBpbgorICoganNvbmIgc3RyaW5nIGFuZCB3aWxsIHJlYWQgZWFj aCBrZXkgbmFtZSBlbmNsb3NlZCBpbiB7IH0gaW4gZm10LXN0cmluZworICogYW5kIHdpbGwgcmVw bGFjZSBpdCB3aXRoIGl0cyB2YWx1ZS4gRm9yIGVhY2ggbmFtZSBtZW50aW9uZWQgaW4geyB9IGlu CisgKiBmbXQgc3RyaW5nLCB0aGVyZSBtdXN0IGJlIGEga2V5LXZhbHVlIHBhaXIsIGluIGFic2Vu Y2Ugb2Ygd2hpY2gsIHRoZQorICogZXhwYW5zaW9uIHdpbGwgZXJyb3Igb3V0LiBXaGlsZSBkb2lu ZyB0aGlzIGV4cGFuc2lvbiwgaXQgd2lsbCBjb25zaWRlcgorICogdGhlIGNvbnZlcnNpb24tc3Bl Y2lmaWVyIG1haW50YWluZWQgd2l0aCBlYWNoIGtleSBpbiBmbXQgc3RyaW5nIHRvIGZpZ3VyZQor ICogb3V0IGhvdyB2YWx1ZSBzaG91bGQgYWN0dWFsbHkgYmUgcmVwcmVzZW50ZWQuIFRoaXMgaXMg aG93IERETCBjb21tYW5kIGNhbgorICogYmUgY29uc3RydWN0ZWQgYmFjayBmcm9tIHRoZSBqc29u Yi1zdHJpbmcuCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvY29tbWFu ZHMvZGRsanNvbi5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0 Z3Jlcy5oIgorCisjaW5jbHVkZSAidGNvcC9kZGxkZXBhcnNlLmgiCisjaW5jbHVkZSAidXRpbHMv YnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9qc29uYi5oIgorCisKKyNkZWZpbmUgQURWQU5D RV9QQVJTRV9QT0lOVEVSKHB0cixlbmRfcHRyKSBcCisJZG8geyBcCisJCWlmICgrKyhwdHIpID49 IChlbmRfcHRyKSkgXAorCQkJZXJlcG9ydChFUlJPUiwgXAorCQkJCQllcnJjb2RlKEVSUkNPREVf SU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLCBcCisJCQkJCWVycm1zZygidW50ZXJtaW5hdGVkIGZv cm1hdCBzcGVjaWZpZXIiKSk7IFwKKwl9IHdoaWxlICgwKQorCisvKgorICogQ29udmVyc2lvbiBz cGVjaWZpZXIgd2hpY2ggZGV0ZXJtaW5lcyBob3cgdG8gZXhwYW5kIHRoZSBKU09OIGVsZW1lbnQK KyAqIGludG8gYSBzdHJpbmcuCisgKi8KK3R5cGVkZWYgZW51bQoreworCVNwZWNEb3R0ZWROYW1l LAorCVNwZWNJZGVudGlmaWVyLAorCVNwZWNOdW1iZXIsCisJU3BlY1N0cmluZywKKwlTcGVjU3Ry aW5nTGl0ZXJhbCwKKwlTcGVjVHlwZU5hbWUKK30gY29udlNwZWNpZmllcjsKKworLyoKKyAqIEEg dGVybmFyeSB2YWx1ZSB0aGF0IHJlcHJlc2VudHMgYSBib29sZWFuIHR5cGUgSnNvbmJWYWx1ZS4K KyAqLwordHlwZWRlZiBlbnVtCit7CisJdHZfYWJzZW50LAorCXR2X3RydWUsCisJdHZfZmFsc2UK K30JCQlqc29uX3RyaXZhbHVlOworCitzdGF0aWMgYm9vbCBleHBhbmRfb25lX2pzb25iX2VsZW1l bnQoU3RyaW5nSW5mbyBidWYsIGNoYXIgKnBhcmFtLAorCQkJCQkJCQkJIEpzb25iVmFsdWUgKmpz b252YWwsIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLAorCQkJCQkJCQkJIGNvbnN0IGNoYXIgKmZt dCk7CitzdGF0aWMgdm9pZCBleHBhbmRfanNvbmJfYXJyYXkoU3RyaW5nSW5mbyBidWYsIGNoYXIg KnBhcmFtLAorCQkJCQkJCSAgIEpzb25iVmFsdWUgKmpzb25hcnIsIGNoYXIgKmFycmF5c2VwLAor CQkJCQkJCSAgIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLCBjb25zdCBjaGFyICpmbXQpOworc3Rh dGljIHZvaWQgZm10c3RyX2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZyk7CisKKy8qCisgKiBHaXZl biBhIEpzb25iQ29udGFpbmVyLCBmaW5kIHRoZSBKc29uYlZhbHVlIHdpdGggdGhlIGdpdmVuIGtl eSBuYW1lIGluIGl0LgorICogSWYgaXQncyBvZiBhIHR5cGUgb3RoZXIgdGhhbiBqYnZCb29sLCBh biBlcnJvciBpcyByYWlzZWQuIElmIGl0IGRvZXNuJ3QKKyAqIGV4aXN0LCB0dl9hYnNlbnQgaXMg cmV0dXJuZWQ7IG90aGVyd2lzZSByZXR1cm4gdGhlIGFjdHVhbCBqc29uX3RyaXZhbHVlLgorICov CitzdGF0aWMganNvbl90cml2YWx1ZQorZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKEpzb25i Q29udGFpbmVyICpjb250YWluZXIsIGNoYXIgKmtleW5hbWUpCit7CisJSnNvbmJWYWx1ZQlrZXk7 CisJSnNvbmJWYWx1ZSAqdmFsdWU7CisJanNvbl90cml2YWx1ZSByZXN1bHQ7CisKKwlrZXkudHlw ZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwgPSBrZXluYW1lOworCWtleS52YWwu c3RyaW5nLmxlbiA9IHN0cmxlbihrZXluYW1lKTsKKwl2YWx1ZSA9IGZpbmRKc29uYlZhbHVlRnJv bUNvbnRhaW5lcihjb250YWluZXIsCisJCQkJCQkJCQkJSkJfRk9CSkVDVCwgJmtleSk7CisJaWYg KHZhbHVlID09IE5VTEwpCisJCXJldHVybiB0dl9hYnNlbnQ7CisJaWYgKHZhbHVlLT50eXBlICE9 IGpidkJvb2wpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURf UEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQllcnJtc2coImVsZW1lbnQgXCIlc1wiIGlzIG5vdCBvZiB0 eXBlIGJvb2xlYW4iLCBrZXluYW1lKSk7CisJcmVzdWx0ID0gdmFsdWUtPnZhbC5ib29sZWFuID8g dHZfdHJ1ZSA6IHR2X2ZhbHNlOworCXBmcmVlKHZhbHVlKTsKKworCXJldHVybiByZXN1bHQ7Cit9 CisKKy8qCisgKiBHaXZlbiBhIEpzb25iQ29udGFpbmVyLCBmaW5kIHRoZSBKc29uYlZhbHVlIHdp dGggdGhlIGdpdmVuIGtleSBuYW1lIGluIGl0LgorICogSWYgaXQncyBvZiBhIHR5cGUgb3RoZXIg dGhhbiBqYnZTdHJpbmcsIGFuIGVycm9yIGlzIHJhaXNlZC4gIElmIGl0IGRvZXNuJ3QKKyAqIGV4 aXN0LCBhbiBlcnJvciBpcyByYWlzZWQgdW5sZXNzIG1pc3Npbmdfb2s7IG90aGVyd2lzZSByZXR1 cm4gTlVMTC4KKyAqCisgKiBJZiBpdCBleGlzdHMgYW5kIGlzIGEgc3RyaW5nLCBhIGZyZXNobHkg cGFsbG9jJ2VkIGNvcHkgaXMgcmV0dXJuZWQuCisgKgorICogSWYgKmxlbmd0aCBpcyBub3QgTlVM TCwgaXQgaXMgc2V0IHRvIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZy4KKyAqLworc3RhdGljIGNo YXIgKgorZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoSnNvbmJDb250YWluZXIgKmNvbnRh aW5lciwgY2hhciAqa2V5bmFtZSwKKwkJCQkJCQkgIGJvb2wgbWlzc2luZ19vaywgaW50ICpsZW5n dGgpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNvbmJWYWx1ZSAqdmFsdWU7CisJY2hhcgkgICAq c3RyOworCisJLyogWFhYIHZlcmlmeSB0aGF0IHRoaXMgaXMgYW4gb2JqZWN0LCBub3QgYW4gYXJy YXkgKi8KKworCWtleS50eXBlID0gamJ2U3RyaW5nOworCWtleS52YWwuc3RyaW5nLnZhbCA9IGtl eW5hbWU7CisJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKGtleW5hbWUpOworCXZhbHVlID0g ZmluZEpzb25iVmFsdWVGcm9tQ29udGFpbmVyKGNvbnRhaW5lciwKKwkJCQkJCQkJCQlKQl9GT0JK RUNULCAma2V5KTsKKwlpZiAodmFsdWUgPT0gTlVMTCkKKwl7CisJCWlmIChtaXNzaW5nX29rKQor CQkJcmV0dXJuIE5VTEw7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX0lO VkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQllcnJtc2coIm1pc3NpbmcgZWxlbWVudCBcIiVz XCIgaW4gSlNPTiBvYmplY3QiLCBrZXluYW1lKSk7CisJfQorCisJaWYgKHZhbHVlLT50eXBlICE9 IGpidlN0cmluZykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCWVycm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90IG9m IHR5cGUgc3RyaW5nIiwga2V5bmFtZSkpOworCisJc3RyID0gcG5zdHJkdXAodmFsdWUtPnZhbC5z dHJpbmcudmFsLCB2YWx1ZS0+dmFsLnN0cmluZy5sZW4pOworCWlmIChsZW5ndGgpCisJCSpsZW5n dGggPSB2YWx1ZS0+dmFsLnN0cmluZy5sZW47CisJcGZyZWUodmFsdWUpOworCXJldHVybiBzdHI7 Cit9CisKKy8qCisgKiBSZWN1cnNpdmUgaGVscGVyIGZvciBkZXBhcnNlX2RkbF9qc29uX3RvX3N0 cmluZy4KKyAqCisgKiBGaW5kIHRoZSAiZm10IiBlbGVtZW50IGluIHRoZSBnaXZlbiBjb250YWlu ZXIsIGFuZCBleHBhbmQgaXQgaW50byB0aGUKKyAqIHByb3ZpZGVkIFN0cmluZ0luZm8uCisgKi8K K3N0YXRpYyB2b2lkCitleHBhbmRfZm10X3JlY3Vyc2l2ZShTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJD b250YWluZXIgKmNvbnRhaW5lcikKK3sKKwlKc29uYlZhbHVlCWtleTsKKwlKc29uYlZhbHVlICp2 YWx1ZTsKKwljb25zdCBjaGFyICpjcDsKKwljb25zdCBjaGFyICpzdGFydF9wdHI7CisJY29uc3Qg Y2hhciAqZW5kX3B0cjsKKwlpbnQJCQlsZW47CisKKwlzdGFydF9wdHIgPSBmaW5kX3N0cmluZ19p bl9qc29uYmNvbnRhaW5lcihjb250YWluZXIsICJmbXQiLCBmYWxzZSwgJmxlbik7CisJZW5kX3B0 ciA9IHN0YXJ0X3B0ciArIGxlbjsKKworCWZvciAoY3AgPSBzdGFydF9wdHI7IGNwIDwgZW5kX3B0 cjsgY3ArKykKKwl7CisJCWNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyOworCQlib29sCQlpc19hcnJh eSA9IGZhbHNlOworCQljaGFyCSAgICpwYXJhbSA9IE5VTEw7CisJCWNoYXIJICAgKmFycmF5c2Vw ID0gTlVMTDsKKworCQlpZiAoKmNwICE9ICclJykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0No YXJNYWNybyhidWYsICpjcCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCUFEVkFOQ0VfUEFSU0Vf UE9JTlRFUihjcCwgZW5kX3B0cik7CisKKwkJLyogRWFzeSBjYXNlOiAlJSBvdXRwdXRzIGEgc2lu Z2xlICUgKi8KKwkJaWYgKCpjcCA9PSAnJScpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFy TWFjcm8oYnVmLCAqY3ApOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBTY2FuIHRo ZSBtYW5kYXRvcnkgZWxlbWVudCBuYW1lLiAgQWxsb3cgZm9yIGFuIGFycmF5IHNlcGFyYXRvcgor CQkgKiAod2hpY2ggbWF5IGJlIHRoZSBlbXB0eSBzdHJpbmcpIHRvIGJlIHNwZWNpZmllZCBhZnRl ciBhIGNvbG9uLgorCQkgKi8KKwkJaWYgKCpjcCA9PSAneycpCisJCXsKKwkJCVN0cmluZ0luZm9E YXRhIHBhcmJ1ZjsKKwkJCVN0cmluZ0luZm9EYXRhIGFycmF5c2VwYnVmOworCQkJU3RyaW5nSW5m bwlhcHBlbmRUbzsKKworCQkJaW5pdFN0cmluZ0luZm8oJnBhcmJ1Zik7CisJCQlhcHBlbmRUbyA9 ICZwYXJidWY7CisKKwkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQl3 aGlsZSAoY3AgPCBlbmRfcHRyKQorCQkJeworCQkJCWlmICgqY3AgPT0gJzonKQorCQkJCXsKKwkJ CQkJLyoKKwkJCQkJICogRm91bmQgYXJyYXkgc2VwYXJhdG9yIGRlbGltaXRlcjsgZWxlbWVudCBu YW1lIGlzIG5vdworCQkJCQkgKiBjb21wbGV0ZSwgc3RhcnQgZmlsbGluZyB0aGUgc2VwYXJhdG9y LgorCQkJCQkgKi8KKwkJCQkJaW5pdFN0cmluZ0luZm8oJmFycmF5c2VwYnVmKTsKKwkJCQkJYXBw ZW5kVG8gPSAmYXJyYXlzZXBidWY7CisJCQkJCWlzX2FycmF5ID0gdHJ1ZTsKKwkJCQkJQURWQU5D RV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJ CQkJaWYgKCpjcCA9PSAnfScpCisJCQkJeworCQkJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3As IGVuZF9wdHIpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJN YWNybyhhcHBlbmRUbywgKmNwKTsKKwkJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9w dHIpOworCQkJfQorCQkJcGFyYW0gPSBwYXJidWYuZGF0YTsKKwkJCWlmIChpc19hcnJheSkKKwkJ CQlhcnJheXNlcCA9IGFycmF5c2VwYnVmLmRhdGE7CisJCX0KKwkJaWYgKHBhcmFtID09IE5VTEwp CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVU RVJfVkFMVUUpLAorCQkJCQllcnJtc2coIm1pc3NpbmcgY29udmVyc2lvbiBuYW1lIGluIGNvbnZl cnNpb24gc3BlY2lmaWVyIikpOworCisJCXN3aXRjaCAoKmNwKQorCQl7CisJCQljYXNlICdJJzoK KwkJCQlzcGVjaWZpZXIgPSBTcGVjSWRlbnRpZmllcjsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ0Qn OgorCQkJCXNwZWNpZmllciA9IFNwZWNEb3R0ZWROYW1lOworCQkJCWJyZWFrOworCQkJY2FzZSAn cyc6CisJCQkJc3BlY2lmaWVyID0gU3BlY1N0cmluZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ0wn OgorCQkJCXNwZWNpZmllciA9IFNwZWNTdHJpbmdMaXRlcmFsOworCQkJCWJyZWFrOworCQkJY2Fz ZSAnVCc6CisJCQkJc3BlY2lmaWVyID0gU3BlY1R5cGVOYW1lOworCQkJCWJyZWFrOworCQkJY2Fz ZSAnbic6CisJCQkJc3BlY2lmaWVyID0gU3BlY051bWJlcjsKKwkJCQlicmVhazsKKwkJCWRlZmF1 bHQ6CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BB UkFNRVRFUl9WQUxVRSksCisJCQkJCQllcnJtc2coImludmFsaWQgY29udmVyc2lvbiBzcGVjaWZp ZXIgXCIlY1wiIiwgKmNwKSk7CisJCX0KKworCQkvKgorCQkgKiBPYnRhaW4gdGhlIGVsZW1lbnQg dG8gYmUgZXhwYW5kZWQuCisJCSAqLworCQlrZXkudHlwZSA9IGpidlN0cmluZzsKKwkJa2V5LnZh bC5zdHJpbmcudmFsID0gcGFyYW07CisJCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihwYXJh bSk7CisKKwkJdmFsdWUgPSBmaW5kSnNvbmJWYWx1ZUZyb21Db250YWluZXIoY29udGFpbmVyLCBK Ql9GT0JKRUNULCAma2V5KTsKKwkJQXNzZXJ0KHZhbHVlICE9IE5VTEwpOworCisJCS8qCisJCSAq IEV4cGFuZCB0aGUgZGF0YSAocG9zc2libHkgYW4gYXJyYXkpIGludG8gdGhlIG91dHB1dCBTdHJp bmdJbmZvLgorCQkgKi8KKwkJaWYgKGlzX2FycmF5KQorCQkJZXhwYW5kX2pzb25iX2FycmF5KGJ1 ZiwgcGFyYW0sIHZhbHVlLCBhcnJheXNlcCwgc3BlY2lmaWVyLCBzdGFydF9wdHIpOworCQllbHNl CisJCQlleHBhbmRfb25lX2pzb25iX2VsZW1lbnQoYnVmLCBwYXJhbSwgdmFsdWUsIHNwZWNpZmll ciwgc3RhcnRfcHRyKTsKKworCQlwZnJlZSh2YWx1ZSk7CisJfQorfQorCisvKgorICogRXhwYW5k IGEganNvbiB2YWx1ZSBhcyBhIHF1b3RlZCBpZGVudGlmaWVyLiAgVGhlIHZhbHVlIG11c3QgYmUg b2YgdHlwZSBzdHJpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9pZGVudGlm aWVyKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAgKnN0 cjsKKworCUFzc2VydChqc29udmFsLT50eXBlID09IGpidlN0cmluZyk7CisKKwlzdHIgPSBwbnN0 cmR1cChqc29udmFsLT52YWwuc3RyaW5nLnZhbCwganNvbnZhbC0+dmFsLnN0cmluZy5sZW4pOwor CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBxdW90ZV9pZGVudGlmaWVyKHN0cikpOworCXBm cmVlKHN0cik7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgZG90LXNlcGFy YXRlZC1uYW1lLiAgVGhlIHZhbHVlIG11c3QgYmUgb2YgdHlwZQorICogYmluYXJ5IGFuZCBtYXkg Y29udGFpbiBlbGVtZW50cyAic2NoZW1hbmFtZSIgKG9wdGlvbmFsKSwgIm9iam5hbWUiCisgKiAo bWFuZGF0b3J5KSwgImF0dHJuYW1lIiAob3B0aW9uYWwpLiAgRG91YmxlIHF1b3RlcyBhcmUgYWRk ZWQgdG8gZWFjaCBlbGVtZW50CisgKiBhcyBuZWNlc3NhcnksIGFuZCBkb3Qgc2VwYXJhdG9ycyB3 aGVyZSBuZWVkZWQuCisgKgorICogT25lIGRheSB3ZSBtaWdodCBuZWVkIGEgImNhdGFsb2ciIGVs ZW1lbnQgYXMgd2VsbCwgYnV0IG5vIGN1cnJlbnQgdXNlIGNhc2UKKyAqIG5lZWRzIHRoYXQuCisg Ki8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9kb3R0ZWRuYW1lKFN0cmluZ0luZm8gYnVm LCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAgKnN0cjsKKwlKc29uYkNvbnRhaW5l ciAqZGF0YSA9IGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YTsKKworCUFzc2VydChqc29udmFsLT50 eXBlID09IGpidkJpbmFyeSk7CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5l cihkYXRhLCAic2NoZW1hbmFtZSIsIHRydWUsIE5VTEwpOworCWlmIChzdHIpCisJeworCQlhcHBl bmRTdHJpbmdJbmZvKGJ1ZiwgIiVzLiIsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJCXBmcmVl KHN0cik7CisJfQorCisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoZGF0YSwg Im9iam5hbWUiLCBmYWxzZSwgTlVMTCk7CisJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyIsIHF1 b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJcGZyZWUoc3RyKTsKKworCXN0ciA9IGZpbmRfc3RyaW5n X2luX2pzb25iY29udGFpbmVyKGRhdGEsICJhdHRybmFtZSIsIHRydWUsIE5VTEwpOworCWlmIChz dHIpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIi4lcyIsIHF1b3RlX2lkZW50aWZpZXIo c3RyKSk7CisJCXBmcmVlKHN0cik7CisJfQorfQorCisvKgorICogRXhwYW5kIGEgSlNPTiB2YWx1 ZSBhcyBhIHR5cGUgbmFtZS4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX3R5cGVu YW1lKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAgKnNj aGVtYSA9IE5VTEw7CisJY2hhcgkgICAqdHlwZW5hbWUgPSBOVUxMOworCWNoYXIJICAgKnR5cG1v ZHN0ciA9IE5VTEw7CisJanNvbl90cml2YWx1ZSBpc19hcnJheTsKKwljaGFyCSAgICphcnJheV9k ZWNvcjsKKwlKc29uYkNvbnRhaW5lciAqZGF0YSA9IGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YTsK KworCS8qCisJICogV2Ugb21pdCBzY2hlbWEtcXVhbGlmeWluZyB0aGUgb3V0cHV0IG5hbWUgaWYg dGhlIHNjaGVtYSBlbGVtZW50IGlzCisJICogZWl0aGVyIHRoZSBlbXB0eSBzdHJpbmcgb3IgTlVM TDsgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aG9zZSB0d28gY2FzZXMKKwkgKiBpcyB0aGF0IGlu IHRoZSBsYXR0ZXIgd2UgcXVvdGUgdGhlIHR5cGUgbmFtZSwgaW4gdGhlIGZvcm1lciB3ZSBkb24n dC4KKwkgKiBUaGlzIGFsbG93cyBmb3IgdHlwZXMgd2l0aCBzcGVjaWFsIHR5cG1vZCBuZWVkcywg c3VjaCBhcyBpbnRlcnZhbCBhbmQKKwkgKiB0aW1lc3RhbXAgKHNlZSBmb3JtYXRfdHlwZV9kZXRh aWxlZCksIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgYWxsb3dpbmcKKwkgKiBmb3IgdGhlIHNjaGVt YSBuYW1lIHRvIGJlIG9taXR0ZWQgZnJvbSB0eXBlIG5hbWVzIHRoYXQgcmVxdWlyZSBxdW90ZXMK KwkgKiBidXQgYXJlIHRvIGJlIG9idGFpbmVkIGZyb20gYSB1c2VyIHNjaGVtYS4KKwkgKi8KKwor CXNjaGVtYSA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGRhdGEsICJzY2hlbWFuYW1l IiwgdHJ1ZSwgTlVMTCk7CisJdHlwZW5hbWUgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5l cihkYXRhLCAidHlwZW5hbWUiLCBmYWxzZSwgTlVMTCk7CisJdHlwbW9kc3RyID0gZmluZF9zdHJp bmdfaW5fanNvbmJjb250YWluZXIoZGF0YSwgInR5cG1vZCIsIHRydWUsIE5VTEwpOworCWlzX2Fy cmF5ID0gZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKGRhdGEsICJ0eXBhcnJheSIpOworCXN3 aXRjaCAoaXNfYXJyYXkpCisJeworCQljYXNlIHR2X3RydWU6CisJCQlhcnJheV9kZWNvciA9ICJb XSI7CisJCQlicmVhazsKKworCQljYXNlIHR2X2ZhbHNlOgorCQkJYXJyYXlfZGVjb3IgPSAiIjsK KwkJCWJyZWFrOworCisJCWNhc2UgdHZfYWJzZW50OgorCQlkZWZhdWx0OgorCQkJZXJlcG9ydChF UlJPUiwKKwkJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJ CQkJZXJybXNnKCJtaXNzaW5nIHR5cGFycmF5IGVsZW1lbnQiKSk7CisJfQorCisJaWYgKHNjaGVt YSA9PSBOVUxMKQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzIiwgcXVvdGVfaWRlbnRpZmll cih0eXBlbmFtZSkpOworCWVsc2UgaWYgKHNjaGVtYVswXSA9PSAnXDAnKQorCQlhcHBlbmRTdHJp bmdJbmZvKGJ1ZiwgIiVzIiwgdHlwZW5hbWUpOwkvKiBTcGVjaWFsIHR5cG1vZCBuZWVkcyAqLwor CWVsc2UKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcy4lcyIsIHF1b3RlX2lkZW50aWZpZXIo c2NoZW1hKSwKKwkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKHR5cGVuYW1lKSk7CisKKwlhcHBlbmRT dHJpbmdJbmZvKGJ1ZiwgIiVzJXMiLCB0eXBtb2RzdHIgPyB0eXBtb2RzdHIgOiAiIiwgYXJyYXlf ZGVjb3IpOworCisJaWYgKHNjaGVtYSkKKwkJcGZyZWUoc2NoZW1hKTsKKwlpZiAodHlwZW5hbWUp CisJCXBmcmVlKHR5cGVuYW1lKTsKKwlpZiAodHlwbW9kc3RyKQorCQlwZnJlZSh0eXBtb2RzdHIp OworfQorCisvKgorICogRXhwYW5kIGEgSlNPTiB2YWx1ZSBhcyBhIHN0cmluZy4gIFRoZSB2YWx1 ZSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIG9mCisgKiB0eXBlIEJpbmFyeS4gIEluIHRoZSBs YXR0ZXIgY2FzZSwgaXQgbXVzdCBjb250YWluIGEgImZtdCIgZWxlbWVudCB3aGljaCB3aWxsCisg KiBiZSByZWN1cnNpdmVseSBleHBhbmRlZDsgYWxzbywgaWYgdGhlIG9iamVjdCBjb250YWlucyBh biBlbGVtZW50ICJwcmVzZW50IgorICogYW5kIGl0IGlzIHNldCB0byBmYWxzZSwgdGhlIGV4cGFu c2lvbiBpcyB0aGUgZW1wdHkgc3RyaW5nLgorICoKKyAqIFJldHVybnMgZmFsc2UgaWYgbm8gYWN0 dWFsIGV4cGFuc2lvbiB3YXMgbWFkZSBkdWUgdG8gdGhlICJwcmVzZW50IiBmbGFnCisgKiBiZWlu ZyBzZXQgdG8gImZhbHNlIi4KKyAqCisgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIHRvIGNo ZWNrIGpzb252YWwgaXMgb2YgdHlwZSBqYnZTdHJpbmcgb3IgamJ2QmluYXJ5LgorICovCitzdGF0 aWMgYm9vbAorZXhwYW5kX2pzb252YWxfc3RyaW5nKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVl ICpqc29udmFsKQoreworCWJvb2wgZXhwYW5kZWQgPSBmYWxzZTsKKworCUFzc2VydCgoanNvbnZh bC0+dHlwZSA9PSBqYnZTdHJpbmcpIHx8IChqc29udmFsLT50eXBlID09IGpidkJpbmFyeSkpOwor CisJaWYgKGpzb252YWwtPnR5cGUgPT0gamJ2U3RyaW5nKQorCXsKKwkJYXBwZW5kQmluYXJ5U3Ry aW5nSW5mbyhidWYsIGpzb252YWwtPnZhbC5zdHJpbmcudmFsLAorCQkJCQkJCSAgIGpzb252YWwt PnZhbC5zdHJpbmcubGVuKTsKKwkJZXhwYW5kZWQgPSB0cnVlOworCX0KKwllbHNlIGlmIChqc29u dmFsLT50eXBlID09IGpidkJpbmFyeSkKKwl7CisJCWpzb25fdHJpdmFsdWUgcHJlc2VudDsKKwor CQlwcmVzZW50ID0gZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5h cnkuZGF0YSwKKwkJCQkJCQkJCQkJICAicHJlc2VudCIpOworCisJCS8qCisJCSAqIElmICJwcmVz ZW50IiBpcyBzZXQgdG8gZmFsc2UsIHRoaXMgZWxlbWVudCBleHBhbmRzIHRvIGVtcHR5OworCQkg KiBvdGhlcndpc2UgKGVpdGhlciB0cnVlIG9yIGFic2VudCksIGV4cGFuZCAiZm10Ii4KKwkJICov CisJCWlmIChwcmVzZW50ICE9IHR2X2ZhbHNlKQorCQl7CisJCQlleHBhbmRfZm10X3JlY3Vyc2l2 ZShidWYsIGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSk7CisJCQlleHBhbmRlZCA9IHRydWU7CisJ CX0KKwl9CisKKwlyZXR1cm4gZXhwYW5kZWQ7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBKU09OIHZh bHVlIGFzIGEgc3RyaW5nIGxpdGVyYWwuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZh bF9zdHJsaXQoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkg ICAqc3RyOworCVN0cmluZ0luZm9EYXRhIGRxZGVsaW07CisJc3RhdGljIGNvbnN0IGNoYXIgZHFz dWZmaXhlc1tdID0gIl9YWVpaWVhfIjsKKwlpbnQJCQlkcW5leHRjaGFyID0gMDsKKworCUFzc2Vy dChqc29udmFsLT50eXBlID09IGpidlN0cmluZyk7CisKKwlzdHIgPSBwbnN0cmR1cChqc29udmFs LT52YWwuc3RyaW5nLnZhbCwganNvbnZhbC0+dmFsLnN0cmluZy5sZW4pOworCisJLyogRWFzeSBj YXNlOiBpZiB0aGVyZSBhcmUgbm8gJyBhbmQgbm8gXCwganVzdCB1c2UgYSBzaW5nbGUgcXVvdGUg Ki8KKwlpZiAoc3RycGJyayhzdHIsICJcJ1xcIikgPT0gTlVMTCkKKwl7CisJCWFwcGVuZFN0cmlu Z0luZm8oYnVmLCAiJyVzJyIsIHN0cik7CisJCXBmcmVlKHN0cik7CisJCXJldHVybjsKKwl9CisK KwkvKiBPdGhlcndpc2UgbmVlZCB0byBmaW5kIGEgdXNlZnVsIGRvbGxhci1xdW90ZSBkZWxpbWl0 ZXIgKi8KKwlpbml0U3RyaW5nSW5mbygmZHFkZWxpbSk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZygmZHFkZWxpbSwgIiQiKTsKKwl3aGlsZSAoc3Ryc3RyKHN0ciwgZHFkZWxpbS5kYXRhKSAhPSBO VUxMKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmRxZGVsaW0sIGRxc3VmZml4ZXNbZHFu ZXh0Y2hhcisrXSk7CisJCWRxbmV4dGNoYXIgPSBkcW5leHRjaGFyICUgKHNpemVvZihkcXN1ZmZp eGVzKSAtIDEpOworCX0KKwkvKiBBZGQgdHJhaWxpbmcgJCAqLworCWFwcGVuZFN0cmluZ0luZm9D aGFyKCZkcWRlbGltLCAnJCcpOworCisJLyogQW5kIGZpbmFsbHkgcHJvZHVjZSB0aGUgcXVvdGVk IGxpdGVyYWwgaW50byB0aGUgb3V0cHV0IFN0cmluZ0luZm8gKi8KKwlhcHBlbmRTdHJpbmdJbmZv KGJ1ZiwgIiVzJXMlcyIsIGRxZGVsaW0uZGF0YSwgc3RyLCBkcWRlbGltLmRhdGEpOworCXBmcmVl KGRxZGVsaW0uZGF0YSk7CisJcGZyZWUoc3RyKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIEpTT04g dmFsdWUgYXMgYW4gaW50ZWdlciBxdWFudGl0eS4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9q c29udmFsX251bWJlcihTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwlj aGFyCSAgICpzdHJkYXR1bTsKKworCUFzc2VydChqc29udmFsLT50eXBlID09IGpidk51bWVyaWMp OworCisJc3RyZGF0dW0gPSBEYXR1bUdldENTdHJpbmcoRGlyZWN0RnVuY3Rpb25DYWxsMShudW1l cmljX291dCwKKwkJCQkJCQkJCQkJCSAgIE51bWVyaWNHZXREYXR1bShqc29udmFsLT52YWwubnVt ZXJpYykpKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwgc3RyZGF0dW0pOworCXBmcmVl KHN0cmRhdHVtKTsKK30KKworLyoKKyAqIEV4cGFuZCBvbmUgSlNPTiBlbGVtZW50IGludG8gdGhl IG91dHB1dCBTdHJpbmdJbmZvIGFjY29yZGluZyB0byB0aGUKKyAqIGNvbnZlcnNpb24gc3BlY2lm aWVyLiAgVGhlIGVsZW1lbnQgdHlwZSBpcyB2YWxpZGF0ZWQsIGFuZCBhbiBlcnJvciBpcyByYWlz ZWQKKyAqIGlmIGl0IGRvZXNuJ3QgbWF0Y2ggd2hhdCB3ZSBleHBlY3QgZm9yIHRoZSBjb252ZXJz aW9uIHNwZWNpZmllci4KKyAqCisgKiBSZXR1cm5zIHRydWUsIGV4Y2VwdCBmb3IgdGhlIGZvcm1h dHRlZCBzdHJpbmcgY2FzZSBpZiBubyBhY3R1YWwgZXhwYW5zaW9uCisgKiB3YXMgbWFkZSAoZHVl IHRvIHRoZSAicHJlc2VudCIgZmxhZyBiZWluZyBzZXQgdG8gImZhbHNlIikuCisgKi8KK3N0YXRp YyBib29sCitleHBhbmRfb25lX2pzb25iX2VsZW1lbnQoU3RyaW5nSW5mbyBidWYsIGNoYXIgKnBh cmFtLCBKc29uYlZhbHVlICpqc29udmFsLAorCQkJCQkJIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVy LCBjb25zdCBjaGFyICpmbXQpCit7CisJYm9vbAkJc3RyaW5nX2V4cGFuZGVkID0gdHJ1ZTsKKwlF cnJvckNvbnRleHRDYWxsYmFjayBzcWxlcnJjb250ZXh0OworCisJLyogSWYgd2Ugd2VyZSBnaXZl biBhIGZvcm1hdCBzdHJpbmcsIHNldHVwIGFuIGVyZXBvcnQoKSBjb250ZXh0IGNhbGxiYWNrICov CisJaWYgKGZtdCkKKwl7CisJCXNxbGVycmNvbnRleHQuY2FsbGJhY2sgPSBmbXRzdHJfZXJyb3Jf Y2FsbGJhY2s7CisJCXNxbGVycmNvbnRleHQuYXJnID0gKHZvaWQgKikgZm10OworCQlzcWxlcnJj b250ZXh0LnByZXZpb3VzID0gZXJyb3JfY29udGV4dF9zdGFjazsKKwkJZXJyb3JfY29udGV4dF9z dGFjayA9ICZzcWxlcnJjb250ZXh0OworCX0KKworCWlmICghanNvbnZhbCkKKwkJZXJlcG9ydChF UlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJ CWVycm1zZygiZWxlbWVudCBcIiVzXCIgbm90IGZvdW5kIiwgcGFyYW0pKTsKKworCXN3aXRjaCAo c3BlY2lmaWVyKQorCXsKKwkJY2FzZSBTcGVjSWRlbnRpZmllcjoKKwkJCWlmIChqc29udmFsLT50 eXBlICE9IGpidlN0cmluZykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCWVycm1zZygiZXhwZWN0ZWQgSlNP TiBzdHJpbmcgZm9yICUlSSBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkgICBwYXJh bSwganNvbnZhbC0+dHlwZSkpOworCQkJZXhwYW5kX2pzb252YWxfaWRlbnRpZmllcihidWYsIGpz b252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjRG90dGVkTmFtZToKKwkJCWlmIChqc29u dmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJZXJyY29k ZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCWVycm1zZygiZXhwZWN0 ZWQgSlNPTiBzdHJ1Y3QgZm9yICUlRCBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkg ICBwYXJhbSwganNvbnZhbC0+dHlwZSkpOworCQkJZXhwYW5kX2pzb252YWxfZG90dGVkbmFtZShi dWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjU3RyaW5nOgorCQkJaWYgKGpz b252YWwtPnR5cGUgIT0gamJ2U3RyaW5nICYmCisJCQkJanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5h cnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BB UkFNRVRFUl9WQUxVRSksCisJCQkJCQllcnJtc2coImV4cGVjdGVkIEpTT04gc3RyaW5nIG9yIHN0 cnVjdCBmb3IgJSVzIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCSAgIHBhcmFtLCBq c29udmFsLT50eXBlKSk7CisJCQlzdHJpbmdfZXhwYW5kZWQgPSBleHBhbmRfanNvbnZhbF9zdHJp bmcoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY1N0cmluZ0xpdGVyYWw6 CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZTdHJpbmcpCisJCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQll cnJtc2coImV4cGVjdGVkIEpTT04gc3RyaW5nIGZvciAlJUwgZWxlbWVudCBcIiVzXCIsIGdvdCAl ZCIsCisJCQkJCQkJICAgcGFyYW0sIGpzb252YWwtPnR5cGUpKTsKKwkJCWV4cGFuZF9qc29udmFs X3N0cmxpdChidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjVHlwZU5hbWU6 CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQll cnJtc2coImV4cGVjdGVkIEpTT04gc3RydWN0IGZvciAlJVQgZWxlbWVudCBcIiVzXCIsIGdvdCAl ZCIsCisJCQkJCQkJICAgcGFyYW0sIGpzb252YWwtPnR5cGUpKTsKKwkJCWV4cGFuZF9qc29udmFs X3R5cGVuYW1lKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNOdW1iZXI6 CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZOdW1lcmljKQorCQkJCWVyZXBvcnQoRVJST1Is CisJCQkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJ ZXJybXNnKCJleHBlY3RlZCBKU09OIG51bWVyaWMgZm9yICUlbiBlbGVtZW50IFwiJXNcIiwgZ290 ICVkIiwKKwkJCQkJCQkgICBwYXJhbSwganNvbnZhbC0+dHlwZSkpOworCQkJZXhwYW5kX2pzb252 YWxfbnVtYmVyKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKwl9CisKKwlpZiAoZm10KQorCQll cnJvcl9jb250ZXh0X3N0YWNrID0gc3FsZXJyY29udGV4dC5wcmV2aW91czsKKworCXJldHVybiBz dHJpbmdfZXhwYW5kZWQ7Cit9CisKKy8qCisgKiBJdGVyYXRlIG9uIHRoZSBlbGVtZW50cyBvZiBh IEpTT04gYXJyYXksIGV4cGFuZGluZyBlYWNoIG9uZSBpbnRvIHRoZSBvdXRwdXQKKyAqIFN0cmlu Z0luZm8gcGVyIHRoZSBnaXZlbiBjb252ZXJzaW9uIHNwZWNpZmllciwgc2VwYXJhdGVkIGJ5IHRo ZSBnaXZlbgorICogc2VwYXJhdG9yLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb25iX2Fy cmF5KFN0cmluZ0luZm8gYnVmLCBjaGFyICpwYXJhbSwKKwkJCQkgICBKc29uYlZhbHVlICpqc29u YXJyLCBjaGFyICphcnJheXNlcCwgY29udlNwZWNpZmllciBzcGVjaWZpZXIsCisJCQkJICAgY29u c3QgY2hhciAqZm10KQoreworCUVycm9yQ29udGV4dENhbGxiYWNrIHNxbGVycmNvbnRleHQ7CisJ SnNvbmJDb250YWluZXIgKmNvbnRhaW5lcjsKKwlKc29uYkl0ZXJhdG9yICppdDsKKwlKc29uYlZh bHVlCXY7CisJaW50CQkJdHlwZTsKKwlib29sCQlmaXJzdCA9IHRydWU7CisJU3RyaW5nSW5mb0Rh dGEgYXJyYXllbGVtOworCisJLyogSWYgd2Ugd2VyZSBnaXZlbiBhIGZvcm1hdCBzdHJpbmcsIHNl dHVwIGFuIGVyZXBvcnQoKSBjb250ZXh0IGNhbGxiYWNrICovCisJaWYgKGZtdCkKKwl7CisJCXNx bGVycmNvbnRleHQuY2FsbGJhY2sgPSBmbXRzdHJfZXJyb3JfY2FsbGJhY2s7CisJCXNxbGVycmNv bnRleHQuYXJnID0gKHZvaWQgKikgZm10OworCQlzcWxlcnJjb250ZXh0LnByZXZpb3VzID0gZXJy b3JfY29udGV4dF9zdGFjazsKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9ICZzcWxlcnJjb250ZXh0 OworCX0KKworCWlmICghanNvbmFycikKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCWVycm1zZygiZWxlbWVudCBcIiVz XCIgbm90IGZvdW5kIiwgcGFyYW0pKTsKKworCWlmIChqc29uYXJyLT50eXBlICE9IGpidkJpbmFy eSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVU RVJfVkFMVUUpLAorCQkJCWVycm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90IGEgSlNPTiBhcnJh eSIsIHBhcmFtKSk7CisKKwljb250YWluZXIgPSBqc29uYXJyLT52YWwuYmluYXJ5LmRhdGE7CisJ aWYgKCFKc29uQ29udGFpbmVySXNBcnJheShjb250YWluZXIpKQorCQllcmVwb3J0KEVSUk9SLAor CQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJZXJybXNn KCJlbGVtZW50IFwiJXNcIiBpcyBub3QgYSBKU09OIGFycmF5IiwgcGFyYW0pKTsKKworCWluaXRT dHJpbmdJbmZvKCZhcnJheWVsZW0pOworCisJaXQgPSBKc29uYkl0ZXJhdG9ySW5pdChjb250YWlu ZXIpOworCXdoaWxlICgodHlwZSA9IEpzb25iSXRlcmF0b3JOZXh0KCZpdCwgJnYsIHRydWUpKSAh PSBXSkJfRE9ORSkKKwl7CisJCWlmICh0eXBlID09IFdKQl9FTEVNKQorCQl7CisJCQlyZXNldFN0 cmluZ0luZm8oJmFycmF5ZWxlbSk7CisKKwkJCWlmIChleHBhbmRfb25lX2pzb25iX2VsZW1lbnQo JmFycmF5ZWxlbSwgcGFyYW0sICZ2LCBzcGVjaWZpZXIsIE5VTEwpKQorCQkJeworCQkJCWlmICgh Zmlyc3QpCisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBhcnJheXNlcCk7CisKKwkJ CQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKGJ1ZiwgYXJyYXllbGVtLmRhdGEsIGFycmF5ZWxlbS5s ZW4pOworCQkJCWZpcnN0ID0gZmFsc2U7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZm10KQorCQll cnJvcl9jb250ZXh0X3N0YWNrID0gc3FsZXJyY29udGV4dC5wcmV2aW91czsKK30KKworLyoKKyAq IFdvcmtob3JzZSBmb3IgZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQuCisgKi8KK2NoYXIgKgor ZGVwYXJzZV9kZGxfanNvbl90b19zdHJpbmcoY2hhciAqanNvbl9zdHIpCit7CisJRGF0dW0JCWQ7 CisJSnNvbmIJICAgKmpzb25iOworCVN0cmluZ0luZm8JYnVmID0gKFN0cmluZ0luZm8pIHBhbGxv YzAoc2l6ZW9mKFN0cmluZ0luZm9EYXRhKSk7CisKKwlpbml0U3RyaW5nSW5mbyhidWYpOworCisJ ZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDEoanNvbmJfaW4sIFBvaW50ZXJHZXREYXR1bShqc29uX3N0 cikpOworCWpzb25iID0gKEpzb25iICopIERhdHVtR2V0UG9pbnRlcihkKTsKKworCWV4cGFuZF9m bXRfcmVjdXJzaXZlKGJ1ZiwgJmpzb25iLT5yb290KTsKKworCXJldHVybiBidWYtPmRhdGE7Cit9 CisKKy8qLS0tLS0tCisgKiBSZXR1cm5zIGEgZm9ybWF0dGVkIHN0cmluZyBmcm9tIGEgSlNPTiBv YmplY3QuCisgKgorICogVGhlIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBlbGVtZW50IG5hbWVkICJm bXQiICh3aGljaCBtdXN0IGJlIGEgc3RyaW5nKS4KKyAqIFRoaXMgZm9ybWF0IHN0cmluZyBtYXkg Y29udGFpbiB6ZXJvIG9yIG1vcmUgJS1lc2NhcGVzLCB3aGljaCBjb25zaXN0IG9mIGFuCisgKiBl bGVtZW50IG5hbWUgZW5jbG9zZWQgaW4geyB9LCBwb3NzaWJseSBmb2xsb3dlZCBieSBhIGNvbnZl cnNpb24gbW9kaWZpZXIsCisgKiBmb2xsb3dlZCBieSBhIGNvbnZlcnNpb24gc3BlY2lmaWVyLiAg UG9zc2libGUgY29udmVyc2lvbiBzcGVjaWZpZXJzIGFyZToKKyAqCisgKiAlCQlleHBhbmQgdG8g YSBsaXRlcmFsICUKKyAqIEkJCWV4cGFuZCBhcyBhIHNpbmdsZSwgbm9uLXF1YWxpZmllZCBpZGVu dGlmaWVyCisgKiBECQlleHBhbmQgYXMgYSBwb3NzaWJseS1xdWFsaWZpZWQgaWRlbnRpZmllcgor ICogVAkJZXhwYW5kIGFzIGEgdHlwZSBuYW1lCisgKiBMCQlleHBhbmQgYXMgYSBzdHJpbmcgbGl0 ZXJhbCAocXVvdGUgdXNpbmcgc2luZ2xlIHF1b3RlcykKKyAqIHMJCWV4cGFuZCBhcyBhIHNpbXBs ZSBzdHJpbmcgKG5vIHF1b3RpbmcpCisgKiBuCQlleHBhbmQgYXMgYSBzaW1wbGUgbnVtYmVyIChu byBxdW90aW5nKQorICoKKyAqIFRoZSBlbGVtZW50IG5hbWUgbWF5IGhhdmUgYW4gb3B0aW9uYWwg c2VwYXJhdG9yIHNwZWNpZmljYXRpb24gcHJlY2VkZWQKKyAqIGJ5IGEgY29sb24uICBJdHMgcHJl c2VuY2UgaW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgaXMgZXhwZWN0ZWQgdG8gYmUKKyAqIGFu IGFycmF5OyB0aGUgc3BlY2lmaWVkIHNlcGFyYXRvciBpcyB1c2VkIHRvIGpvaW4gdGhlIGFycmF5 IGVsZW1lbnRzLgorICoKKyAqIFRoZSBhY3R1YWwgY29udmVyc2lvbiBvZiBzaW5nbGUgSlNPTiBl bGVtZW50IGludG8gc3RyaW5nIGFjY29yZGluZyB0bworICogYWJvdmUgY29udmVyc2lvbiBzcGVj aWZpZXJzIHRha2VzIHBsYWNlIGluIGV4cGFuZF9vbmVfanNvbmJfZWxlbWVudCgpCisgKi0tLS0t LQorICovCitEYXR1bQorZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQoUEdfRlVOQ1RJT05fQVJH UykKK3sKKwl0ZXh0CSAgICpqc29uID0gUEdfR0VUQVJHX1RFWFRfUCgwKTsKKwljaGFyCSAgICpq c29uX3N0cjsKKworCWpzb25fc3RyID0gdGV4dF90b19jc3RyaW5nKGpzb24pOworCisJUEdfUkVU VVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHQoZGVwYXJzZV9kZGxfanNvbl90b19zdHJpbmcoanNv bl9zdHIpKSk7Cit9CisKKy8qCisgKiBFcnJvciBjb250ZXh0IGNhbGxiYWNrIGZvciBKU09OIGZv cm1hdCBzdHJpbmcgZXhwYW5zaW9uLgorICoKKyAqIFhYWDogaW5kaWNhdGUgd2hpY2ggZWxlbWVu dCB3ZSdyZSBleHBhbmRpbmcsIGlmIGFwcGxpY2FibGUuCisgKi8KK3N0YXRpYyB2b2lkCitmbXRz dHJfZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJnKQoreworCWVycmNvbnRleHQoIndoaWxlIGV4cGFu ZGluZyBmb3JtYXQgc3RyaW5nIFwiJXNcIiIsIChjaGFyICopIGFyZyk7Cit9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9ldmVudF90cmlnZ2VyLmMKaW5kZXggZDRiMDBkMWE4Mi4uNGQ0OGU0OTBlZCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCisrKyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9mdW5jLmgiCiAjaW5jbHVkZSAi cGdzdGF0LmgiCisjaW5jbHVkZSAidGNvcC9kZGxkZXBhcnNlLmgiCiAjaW5jbHVkZSAidGNvcC9k ZXBhcnNlX3V0aWxpdHkuaCIKICNpbmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIKICNpbmNsdWRlICJ1 dGlscy9hY2wuaCIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1aWxk IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWVzb24uYnVpbGQKaW5kZXggNDJjY2VkOWViZS4uOTUz OWU1M2JhYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWVzb24uYnVpbGQKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWVzb24uYnVpbGQKQEAgLTE3LDYgKzE3LDggQEAgYmFj a2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAnY29weXRvLmMnLAogICAnY3JlYXRlYXMuYycsCiAg ICdkYmNvbW1hbmRzLmMnLAorICAnZGRsZGVwYXJzZS5jJywKKyAgJ2RkbGpzb24uYycsCiAgICdk ZWZpbmUuYycsCiAgICdkaXNjYXJkLmMnLAogICAnZHJvcGNtZHMuYycsCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2Vx dWVuY2UuYwppbmRleCBlZjAxNDQ5Njc4Li40YmI3MzFkNWZmIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVl bmNlLmMKQEAgLTE3MDcsNiArMTcwNyw0OSBAQCBwcm9jZXNzX293bmVkX2J5KFJlbGF0aW9uIHNl cXJlbCwgTGlzdCAqb3duZWRfYnksIGJvb2wgZm9yX2lkZW50aXR5KQogCQlyZWxhdGlvbl9jbG9z ZSh0YWJsZXJlbCwgTm9Mb2NrKTsKIH0KIAorLyoKKyAqIFJldHVybiBzZXF1ZW5jZSBwYXJhbWV0 ZXJzLCBkZXRhaWxlZAorICovCitTZXF1ZW5jZV92YWx1ZXMgKgorZ2V0X3NlcXVlbmNlX3ZhbHVl cyhPaWQgc2VxdWVuY2VJZCkKK3sKKwlCdWZmZXIgICAgICBidWY7CisJU2VxVGFibGUgICAgZWxt OworCVJlbGF0aW9uICAgIHNlcXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVwbGU7CisJSGVhcFR1cGxl RGF0YSBzZXF0dXBsZWRhdGE7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCUZvcm1fcGdf c2VxdWVuY2VfZGF0YSBzZXE7CisJU2VxdWVuY2VfdmFsdWVzICpzZXF2YWx1ZXM7CisKKwlzZXF0 dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShTRVFSRUxJRCwgc2VxdWVuY2VJZCk7CisJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKHNlcXR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIHNlcXVlbmNlICV1Iiwgc2VxdWVuY2VJZCk7CisJc2VxZm9ybSA9IChGb3JtX3BnX3Nl cXVlbmNlKSBHRVRTVFJVQ1Qoc2VxdHVwbGUpOworCisJUmVsZWFzZVN5c0NhY2hlKHNlcXR1cGxl KTsKKworCS8qIE9wZW4gYW5kIGxvY2sgc2VxdWVuY2UgKi8KKwlpbml0X3NlcXVlbmNlKHNlcXVl bmNlSWQsICZlbG0sICZzZXFyZWwpOworCisJaWYgKHBnX2NsYXNzX2FjbGNoZWNrKHNlcXVlbmNl SWQsIEdldFVzZXJJZCgpLAorCQlBQ0xfU0VMRUNUIHwgQUNMX1VTQUdFKSAhPSBBQ0xDSEVDS19P SykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfSU5TVUZGSUNJRU5UX1BS SVZJTEVHRSksCisJCQkJZXJybXNnKCJwZXJtaXNzaW9uIGRlbmllZCBmb3Igc2VxdWVuY2UgJXMi LAorCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzZXFyZWwpKSk7CisKKwlzZXEgPSBy ZWFkX3NlcV90dXBsZShzZXFyZWwsICZidWYsICZzZXF0dXBsZWRhdGEpOworCisJc2VxdmFsdWVz ID0gKFNlcXVlbmNlX3ZhbHVlcyAqKSBwYWxsb2Moc2l6ZW9mKFNlcXVlbmNlX3ZhbHVlcykpOwor CXNlcXZhbHVlcy0+bGFzdF92YWx1ZSA9IHNlcS0+bGFzdF92YWx1ZTsKKwlzZXF2YWx1ZXMtPnNl cWZvcm0gPSBzZXFmb3JtOworCisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWYpOworCXJlbGF0aW9u X2Nsb3NlKHNlcXJlbCwgTm9Mb2NrKTsKKworCXJldHVybiBzZXF2YWx1ZXM7Cit9CiAKIC8qCiAg KiBSZXR1cm4gc2VxdWVuY2UgcGFyYW1ldGVycyBpbiBhIGxpc3Qgb2YgdGhlIGZvcm0gY3JlYXRl ZCBieSB0aGUgcGFyc2VyLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVj bWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwppbmRleCBkOTg1Mjc4YWM2 Li42MDRjMWRlNDc0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMu YworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtNjAwLDcgKzYwMCw2 IEBAIHN0YXRpYyBPYmplY3RBZGRyZXNzIEFURXhlY1NldENvbXByZXNzaW9uKFJlbGF0aW9uIHJl bCwKIAkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKmNvbHVtbiwgTm9kZSAqbmV3VmFsdWUsIExPQ0tN T0RFIGxvY2ttb2RlKTsKIAogc3RhdGljIHZvaWQgaW5kZXhfY29weV9kYXRhKFJlbGF0aW9uIHJl bCwgUmVsRmlsZUxvY2F0b3IgbmV3cmxvY2F0b3IpOwotc3RhdGljIGNvbnN0IGNoYXIgKnN0b3Jh Z2VfbmFtZShjaGFyIGMpOwogCiBzdGF0aWMgdm9pZCBSYW5nZVZhckNhbGxiYWNrRm9yRHJvcFJl bGF0aW9uKGNvbnN0IFJhbmdlVmFyICpyZWwsIE9pZCByZWxPaWQsCiAJCQkJCQkJCQkJCU9pZCBv bGRSZWxPaWQsIHZvaWQgKmFyZyk7CkBAIC0yMjY2LDcgKzIyNjUsNyBAQCB0cnVuY2F0ZV9jaGVj a19hY3Rpdml0eShSZWxhdGlvbiByZWwpCiAgKiBzdG9yYWdlX25hbWUKICAqCSAgcmV0dXJucyB0 aGUgbmFtZSBjb3JyZXNwb25kaW5nIHRvIGEgdHlwc3RvcmFnZS9hdHRzdG9yYWdlIGVudW0gdmFs dWUKICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKgorY2hhciAqCiBzdG9yYWdlX25hbWUoY2hhciBj KQogewogCXN3aXRjaCAoYykKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV91 dGlsY21kLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5jCmluZGV4IGQ2NzU4 MGZjNzcuLjc1MzQ1NmVjYmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV91 dGlsY21kLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYwpAQCAtMTM5 Myw2ICsxMzkzLDcgQEAgZXhwYW5kVGFibGVMaWtlQ2xhdXNlKFJhbmdlVmFyICpoZWFwUmVsLCBU YWJsZUxpa2VDbGF1c2UgKnRhYmxlX2xpa2VfY2xhdXNlKQogCQlhdGNtZC0+Y21kcyA9IGF0c3Vi Y21kczsKIAkJYXRjbWQtPm9ianR5cGUgPSBPQkpFQ1RfVEFCTEU7CiAJCWF0Y21kLT5taXNzaW5n X29rID0gZmFsc2U7CisJCWF0Y21kLT50YWJsZV9saWtlID0gdHJ1ZTsKIAkJcmVzdWx0ID0gbGNv bnMoYXRjbWQsIHJlc3VsdCk7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJ0aXRp b25pbmcvcGFydGJvdW5kcy5jIGIvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRib3VuZHMu YwppbmRleCA3YzVkOTExMGZiLi42N2MyMjhhNDI0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9w YXJ0aXRpb25pbmcvcGFydGJvdW5kcy5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9w YXJ0Ym91bmRzLmMKQEAgLTQ5NzgsMyArNDk3OCwzMSBAQCBzYXRpc2ZpZXNfaGFzaF9wYXJ0aXRp b24oUEdfRlVOQ1RJT05fQVJHUykKIAogCVBHX1JFVFVSTl9CT09MKHJvd0hhc2ggJSBtb2R1bHVz ID09IHJlbWFpbmRlcik7CiB9CisKKy8qCisgKiBPYnRhaW4gdGhlIGRlcGFyc2VkIHBhcnRpdGlv biBib3VuZCBleHByZXNzaW9uIGZvciB0aGUgZ2l2ZW4gdGFibGUuCisgKi8KK2NoYXIgKgorcmVs YXRpb25fZ2V0X3BhcnRfYm91bmQoT2lkIHJlbGlkKQoreworCURhdHVtCQlkZXBhcnNlZDsKKwlE YXR1bQkJYm91bmQ7CisJYm9vbAkJaXNudWxsOworCUhlYXBUdXBsZQl0dXBsZTsKKworCXR1cGxl ID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwgcmVsaWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZCh0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlv biB3aXRoIE9JRCAldSIsIHJlbGlkKTsKKworCWJvdW5kID0gU3lzQ2FjaGVHZXRBdHRyKFJFTE9J RCwgdHVwbGUsCisJCQkJCQkJQW51bV9wZ19jbGFzc19yZWxwYXJ0Ym91bmQsCisJCQkJCQkJJmlz bnVsbCk7CisKKwlkZXBhcnNlZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIsCisJ CQkJCQkJCSAgIENTdHJpbmdHZXRUZXh0RGF0dW0oVGV4dERhdHVtR2V0Q1N0cmluZyhib3VuZCkp LAorCQkJCQkJCQkgICByZWxpZCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworCisJcmV0 dXJuIFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9y bWF0X3R5cGUuYwppbmRleCAxMjQwMmEwNjM3Li40MzE4MTI5NTU4IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvZm9ybWF0X3R5cGUuYwpAQCAtMjcsOCArMjcsNiBAQAogI2luY2x1ZGUgInV0aWxzL251bWVy aWMuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgogCi1zdGF0aWMgY2hhciAqcHJpbnRU eXBtb2QoY29uc3QgY2hhciAqdHlwbmFtZSwgaW50MzIgdHlwbW9kLCBPaWQgdHlwbW9kb3V0KTsK LQogCiAvKgogICogU1FMIGZ1bmN0aW9uOiBmb3JtYXRfdHlwZSh0eXBlX29pZCwgdHlwZW1vZCkK QEAgLTMyOSw2ICszMjcsMTEwIEBAIGZvcm1hdF90eXBlX2V4dGVuZGVkKE9pZCB0eXBlX29pZCwg aW50MzIgdHlwZW1vZCwgYml0czE2IGZsYWdzKQogCXJldHVybiBidWY7CiB9CiAKKy8qCisgKiBT aW1pbGFyIHRvIGZvcm1hdF90eXBlX2V4dGVuZGVkLCBleGNlcHQgd2UgcmV0dXJuIGVhY2ggYml0 IG9mIGluZm9ybWF0aW9uCisgKiBzZXBhcmF0ZWx5OgorICoKKyAqIC0gbnNwaWQgaXMgdGhlIHNj aGVtYSBPSUQuICBGb3IgY2VydGFpbiBTUUwtc3RhbmRhcmQgdHlwZXMgd2hpY2ggaGF2ZSB3ZWly ZAorICogICB0eXBtb2QgcnVsZXMsIHdlIHJldHVybiBJbnZhbGlkT2lkOyB0aGUgY2FsbGVyIGlz IGV4cGVjdGVkIHRvIG5vdCBzY2hlbWEtCisgKiAgIHF1YWxpZnkgdGhlIG5hbWUgbm9yIGFkZCBx dW90ZXMgdG8gdGhlIHR5cGUgbmFtZSBpbiB0aGlzIGNhc2UuCisgKgorICogLSB0eXBuYW1lIGlz IHNldCB0byB0aGUgdHlwZSBuYW1lLCB3aXRob3V0IHF1b3RlcworICoKKyAqIC0gdHlwZW1vZHN0 ciBpcyBzZXQgdG8gdGhlIHR5cGVtb2QsIGlmIGFueSwgYXMgYSBzdHJpbmcgd2l0aCBwYXJlbnRo ZXNlcworICoKKyAqIC0gdHlwYXJyYXkgaW5kaWNhdGVzIHdoZXRoZXIgW11zIG11c3QgYmUgYWRk ZWQKKyAqCisgKiBXZSBkb24ndCB0cnkgdG8gZGVjb2RlIHR5cGUgbmFtZXMgdG8gdGhlaXIgc3Rh bmRhcmQtbWFuZGF0ZWQgbmFtZXMsIGV4Y2VwdAorICogaW4gdGhlIGNhc2VzIG9mIHR5cGVzIHdp dGggdW51c3VhbCB0eXBtb2QgcnVsZXMuCisgKi8KK3ZvaWQKK2Zvcm1hdF90eXBlX2RldGFpbGVk KE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCwKKwkJCQkJIE9pZCAqbnNwaWQsIGNoYXIgKip0 eXBuYW1lLCBjaGFyICoqdHlwZW1vZHN0ciwKKwkJCQkJIGJvb2wgKnR5cGVhcnJheSkKK3sKKwlI ZWFwVHVwbGUJdHVwbGU7CisJRm9ybV9wZ190eXBlIHR5cGVmb3JtOworCU9pZAkJCWFycmF5X2Jh c2VfdHlwZTsKKworCXR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0 RGF0dW0odHlwZV9vaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQorCQllbG9n KEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdHlwZSB3aXRoIE9JRCAldSIsIHR5cGVf b2lkKTsKKworCXR5cGVmb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR1cGxlKTsKKwor CS8qCisJICogV2Ugc3dpdGNoIG91ciBhdHRlbnRpb24gdG8gdGhlIGFycmF5IGVsZW1lbnQgdHlw ZSBmb3IgY2VydGFpbiBjYXNlcy4KKwkgKiBDaGVjayBpZiBpdCdzIGEgInRydWUiIGFycmF5IHR5 cGUuICBQc2V1ZG8tYXJyYXkgdHlwZXMgc3VjaCBhcyAibmFtZSIKKwkgKiBzaG91bGRuJ3QgZ2V0 IGRlY29uc3RydWN0ZWQuICBBbHNvIGNoZWNrIHRoZSB0b2FzdCBwcm9wZXJ0eSwgYW5kIGRvbid0 CisJICogZGVjb25zdHJ1Y3QgInBsYWluIHN0b3JhZ2UiIGFycmF5IHR5cGVzIC0tLSB0aGlzIGlz IGJlY2F1c2Ugd2UgZG9uJ3QKKwkgKiB3YW50IHRvIHNob3cgb2lkdmVjdG9yIGFzIG9pZFtdLgor CSAqLworCWFycmF5X2Jhc2VfdHlwZSA9IHR5cGVmb3JtLT50eXBlbGVtOworCisJKnR5cGVhcnJh eSA9IChJc1RydWVBcnJheVR5cGUodHlwZWZvcm0pICYmIHR5cGVmb3JtLT50eXBzdG9yYWdlICE9 IFRZUFNUT1JBR0VfUExBSU4pOworCisJaWYgKCp0eXBlYXJyYXkpCisJeworCQlSZWxlYXNlU3lz Q2FjaGUodHVwbGUpOworCQl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJ ZEdldERhdHVtKGFycmF5X2Jhc2VfdHlwZSkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVw bGUpKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgd2l0aCBP SUQgJXUiLCB0eXBlX29pZCk7CisKKwkJdHlwZWZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJV Q1QodHVwbGUpOworCQl0eXBlX29pZCA9IGFycmF5X2Jhc2VfdHlwZTsKKwl9CisKKwkvKgorCSAq IFNwZWNpYWwtY2FzZSBjcm9jayBmb3IgdHlwZXMgd2l0aCBzdHJhbmdlIHR5cG1vZCBydWxlcyB3 aGVyZSB3ZSBwdXQKKwkgKiB0eXBlbW9kIGF0IHRoZSBtaWRkbGUgb2YgbmFtZSAoZS5nLiBUSU1F KDYpIHdpdGggdGltZSB6b25lKS4gV2UgY2Fubm90CisJICogc2NoZW1hLXF1YWxpZnkgbm9yIGFk ZCBxdW90ZXMgdG8gdGhlIHR5cGUgbmFtZSBpbiB0aGVzZSBjYXNlcy4KKwkgKi8KKwkqbnNwaWQg PSBJbnZhbGlkT2lkOworCisJc3dpdGNoICh0eXBlX29pZCkKKwl7CisJCWNhc2UgVElNRU9JRDoK KwkJCSp0eXBuYW1lID0gcHN0cmR1cCgiVElNRSIpOworCQkJYnJlYWs7CisJCWNhc2UgVElNRVNU QU1QT0lEOgorCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1FU1RBTVAiKTsKKwkJCWJyZWFrOwor CQljYXNlIFRJTUVTVEFNUFRaT0lEOgorCQkJaWYgKHR5cGVtb2QgPCAwKQorCQkJCSp0eXBuYW1l ID0gcHN0cmR1cCgiVElNRVNUQU1QIFdJVEggVElNRSBaT05FIik7CisJCQllbHNlCisJCQkJLyog b3RoZXJ3aXNlLCBXSVRIIFRaIGlzIGFkZGVkIGJ5IHR5cG1vZC4gKi8KKwkJCQkqdHlwbmFtZSA9 IHBzdHJkdXAoIlRJTUVTVEFNUCIpOworCQkJYnJlYWs7CisJCWNhc2UgSU5URVJWQUxPSUQ6CisJ CQkqdHlwbmFtZSA9IHBzdHJkdXAoIklOVEVSVkFMIik7CisJCQlicmVhazsKKwkJY2FzZSBUSU1F VFpPSUQ6CisJCQlpZiAodHlwZW1vZCA8IDApCisJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1F IFdJVEggVElNRSBaT05FIik7CisJCQllbHNlCisJCQkJLyogb3RoZXJ3aXNlLCBXSVRIIFRaIGlz IGFkZGVkIGJ5IHR5cG1vZC4gKi8KKwkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJTUUiKTsKKwkJ CWJyZWFrOworCQlkZWZhdWx0OgorCisJCQkvKgorCQkJICogTm8gYWRkaXRpb25hbCBwcm9jZXNz aW5nIGlzIHJlcXVpcmVkIGZvciBvdGhlciB0eXBlcywgc28gZ2V0CisJCQkgKiB0aGUgdHlwZSBu YW1lIGFuZCBzY2hlbWEgZGlyZWN0bHkgZnJvbSB0aGUgY2F0YWxvZy4KKwkJCSAqLworCQkJKm5z cGlkID0gdHlwZWZvcm0tPnR5cG5hbWVzcGFjZTsKKwkJCSp0eXBuYW1lID0gcHN0cmR1cChOYW1l U3RyKHR5cGVmb3JtLT50eXBuYW1lKSk7CisJfQorCisJaWYgKHR5cGVtb2QgPj0gMCkKKwkJKnR5 cGVtb2RzdHIgPSBwcmludFR5cG1vZCgiIiwgdHlwZW1vZCwgdHlwZWZvcm0tPnR5cG1vZG91dCk7 CisJZWxzZQorCQkqdHlwZW1vZHN0ciA9IHBzdHJkdXAoIiIpOworCisJUmVsZWFzZVN5c0NhY2hl KHR1cGxlKTsKK30KKwogLyoKICAqIFRoaXMgdmVyc2lvbiBpcyBmb3IgdXNlIHdpdGhpbiB0aGUg YmFja2VuZCBpbiBlcnJvciBtZXNzYWdlcywgZXRjLgogICogT25lIGRpZmZlcmVuY2UgaXMgdGhh dCBpdCB3aWxsIGZhaWwgZm9yIGFuIGludmFsaWQgdHlwZS4KQEAgLTM2Myw3ICs0NjUsNyBAQCBm b3JtYXRfdHlwZV93aXRoX3R5cGVtb2QoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kKQogLyoK ICAqIEFkZCB0eXBtb2QgZGVjb3JhdGlvbiB0byB0aGUgYmFzaWMgdHlwZSBuYW1lCiAgKi8KLXN0 YXRpYyBjaGFyICoKK2NoYXIgKgogcHJpbnRUeXBtb2QoY29uc3QgY2hhciAqdHlwbmFtZSwgaW50 MzIgdHlwbW9kLCBPaWQgdHlwbW9kb3V0KQogewogCWNoYXIJICAgKnJlczsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9ydWxldXRpbHMuYwppbmRleCBkM2E5NzNkODZiLi4yZDE5NjFmMTJkIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3J1bGV1dGlscy5jCkBAIC01MSw3ICs1MSw2IEBACiAjaW5jbHVkZSAib3B0aW1pemVyL29w dGltaXplci5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9hZ2cuaCIKICNpbmNsdWRlICJwYXJz ZXIvcGFyc2VfZnVuYy5oIgotI2luY2x1ZGUgInBhcnNlci9wYXJzZV9ub2RlLmgiCiAjaW5jbHVk ZSAicGFyc2VyL3BhcnNlX29wZXIuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfcmVsYXRpb24u aCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VyLmgiCkBAIC01MDEsMjIgKzUwMCwxNSBAQCBzdGF0 aWMgdm9pZCBnZXRfZnJvbV9jbGF1c2VfY29sZGVmbGlzdChSYW5nZVRibEZ1bmN0aW9uICpydGZ1 bmMsCiAJCQkJCQkJCQkgICBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwogc3RhdGljIHZvaWQg Z2V0X3RhYmxlc2FtcGxlX2RlZihUYWJsZVNhbXBsZUNsYXVzZSAqdGFibGVzYW1wbGUsCiAJCQkJ CQkJCWRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7Ci1zdGF0aWMgdm9pZCBnZXRfb3BjbGFzc19u YW1lKE9pZCBvcGNsYXNzLCBPaWQgYWN0dWFsX2RhdGF0eXBlLAotCQkJCQkJCSBTdHJpbmdJbmZv IGJ1Zik7CiBzdGF0aWMgTm9kZSAqcHJvY2Vzc0luZGlyZWN0aW9uKE5vZGUgKm5vZGUsIGRlcGFy c2VfY29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgdm9pZCBwcmludFN1YnNjcmlwdHMoU3Vic2Ny aXB0aW5nUmVmICpzYnNyZWYsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgY2hh ciAqZ2V0X3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9y ZWxhdGlvbl9uYW1lKE9pZCByZWxpZCwgTGlzdCAqbmFtZXNwYWNlcyk7CiBzdGF0aWMgY2hhciAq Z2VuZXJhdGVfcXVhbGlmaWVkX3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKTsKLXN0YXRpYyBjaGFy ICpnZW5lcmF0ZV9mdW5jdGlvbl9uYW1lKE9pZCBmdW5jaWQsIGludCBuYXJncywKLQkJCQkJCQkJ CUxpc3QgKmFyZ25hbWVzLCBPaWQgKmFyZ3R5cGVzLAotCQkJCQkJCQkJYm9vbCBoYXNfdmFyaWFk aWMsIGJvb2wgKnVzZV92YXJpYWRpY19wLAotCQkJCQkJCQkJUGFyc2VFeHByS2luZCBzcGVjaWFs X2V4cHJraW5kKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9vcGVyYXRvcl9uYW1lKE9pZCBvcGVy aWQsIE9pZCBhcmcxLCBPaWQgYXJnMik7CiBzdGF0aWMgdm9pZCBhZGRfY2FzdF90byhTdHJpbmdJ bmZvIGJ1ZiwgT2lkIHR5cGlkKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9xdWFsaWZpZWRfdHlw ZV9uYW1lKE9pZCB0eXBpZCk7CiBzdGF0aWMgdGV4dCAqc3RyaW5nX3RvX3RleHQoY2hhciAqc3Ry KTsKLXN0YXRpYyBjaGFyICpmbGF0dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlkKTsKIHN0YXRpYyB2 b2lkIGdldF9yZWxvcHRpb25zKFN0cmluZ0luZm8gYnVmLCBEYXR1bSByZWxvcHRpb25zKTsKIAog I2RlZmluZSBvbmx5X21hcmtlcihydGUpICAoKHJ0ZSktPmluaCA/ICIiIDogIk9OTFkgIikKQEAg LTE5MDEsNiArMTg5MywxNCBAQCBwZ19nZXRfcGFydGtleWRlZl9jb2x1bW5zKE9pZCByZWxpZCwg Ym9vbCBwcmV0dHkpCiAJcmV0dXJuIHBnX2dldF9wYXJ0a2V5ZGVmX3dvcmtlcihyZWxpZCwgcHJl dHR5RmxhZ3MsIHRydWUsIGZhbHNlKTsKIH0KIAorLyogSW50ZXJuYWwgdmVyc2lvbiB0aGF0IHJl cG9ydHMgdGhlIGZ1bGwgcGFydGl0aW9uIGtleSBkZWZpbml0aW9uICovCitjaGFyICoKK3BnX2dl dF9wYXJ0a2V5ZGVmX3N0cmluZyhPaWQgcmVsaWQpCit7CisJcmV0dXJuIHBnX2dldF9wYXJ0a2V5 ZGVmX3dvcmtlcihyZWxpZCwgR0VUX1BSRVRUWV9GTEFHUyhmYWxzZSksIGZhbHNlLAorCQkJCQkJ CQkJZmFsc2UpOworfQorCiAvKgogICogSW50ZXJuYWwgd29ya2hvcnNlIHRvIGRlY29tcGlsZSBh IHBhcnRpdGlvbiBrZXkgZGVmaW5pdGlvbi4KICAqLwpAQCAtMjE0OCw2ICsyMTQ4LDE2IEBAIHBn X2dldF9jb25zdHJhaW50ZGVmX2V4dChQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9URVhU X1Aoc3RyaW5nX3RvX3RleHQocmVzKSk7CiB9CiAKKy8qCisgKiBJbnRlcm5hbCB2ZXJzaW9uIHRo YXQgcmV0dXJucyB0aGUgZGVmaW5pdGlvbiBvZiBhIENPTlNUUkFJTlQgY29tbWFuZAorICovCitj aGFyICoKK3BnX2dldF9jb25zdHJhaW50ZGVmX3N0cmluZyhPaWQgY29uc3RyYWludElkKQorewor CXJldHVybiBwZ19nZXRfY29uc3RyYWludGRlZl93b3JrZXIoY29uc3RyYWludElkLCBmYWxzZSwK KwkJCQkJCQkJCSAgIEdFVF9QUkVUVFlfRkxBR1MoZmFsc2UpLCBmYWxzZSk7Cit9CisKIC8qCiAg KiBJbnRlcm5hbCB2ZXJzaW9uIHRoYXQgcmV0dXJucyBhIGZ1bGwgQUxURVIgVEFCTEUgLi4uIEFE RCBDT05TVFJBSU5UIGNvbW1hbmQKICAqLwpAQCAtMTE3NTgsNyArMTE3NjgsNyBAQCBnZXRfdGFi bGVzYW1wbGVfZGVmKFRhYmxlU2FtcGxlQ2xhdXNlICp0YWJsZXNhbXBsZSwgZGVwYXJzZV9jb250 ZXh0ICpjb250ZXh0KQogICogYWN0dWFsX2RhdGF0eXBlLiAgKElmIHlvdSBkb24ndCB3YW50IHRo aXMgYmVoYXZpb3IsIGp1c3QgcGFzcwogICogSW52YWxpZE9pZCBmb3IgYWN0dWFsX2RhdGF0eXBl LikKICAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3Ms IE9pZCBhY3R1YWxfZGF0YXR5cGUsCiAJCQkJIFN0cmluZ0luZm8gYnVmKQogewpAQCAtMTIxNTIs NyArMTIxNjIsNyBAQCBnZW5lcmF0ZV9xdWFsaWZpZWRfcmVsYXRpb25fbmFtZShPaWQgcmVsaWQp CiAgKgogICogVGhlIHJlc3VsdCBpbmNsdWRlcyBhbGwgbmVjZXNzYXJ5IHF1b3RpbmcgYW5kIHNj aGVtYS1wcmVmaXhpbmcuCiAgKi8KLXN0YXRpYyBjaGFyICoKK2NoYXIgKgogZ2VuZXJhdGVfZnVu Y3Rpb25fbmFtZShPaWQgZnVuY2lkLCBpbnQgbmFyZ3MsIExpc3QgKmFyZ25hbWVzLCBPaWQgKmFy Z3R5cGVzLAogCQkJCQkgICBib29sIGhhc192YXJpYWRpYywgYm9vbCAqdXNlX3ZhcmlhZGljX3As CiAJCQkJCSAgIFBhcnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2luZCkKQEAgLTEyNTM4LDcgKzEy NTQ4LDcgQEAgZ2V0X3JlbG9wdGlvbnMoU3RyaW5nSW5mbyBidWYsIERhdHVtIHJlbG9wdGlvbnMp CiAvKgogICogR2VuZXJhdGUgYSBDIHN0cmluZyByZXByZXNlbnRpbmcgYSByZWxhdGlvbidzIHJl bG9wdGlvbnMsIG9yIE5VTEwgaWYgbm9uZS4KICAqLwotc3RhdGljIGNoYXIgKgorY2hhciAqCiBm bGF0dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlkKQogewogCWNoYXIJICAgKnJlc3VsdCA9IE5VTEw7 CkBAIC0xMjYwNiwzICsxMjYxNiwyMyBAQCBnZXRfcmFuZ2VfcGFydGJvdW5kX3N0cmluZyhMaXN0 ICpib3VuZF9kYXR1bXMpCiAKIAlyZXR1cm4gYnVmLT5kYXRhOwogfQorCisvKgorICogT2J0YWlu IHRoZSBkZXBhcnNlZCBkZWZhdWx0IHZhbHVlIGZvciB0aGUgZ2l2ZW4gY29sdW1uIG9mIHRoZSBn aXZlbiB0YWJsZS4KKyAqCisgKiBDYWxsZXIgbXVzdCBoYXZlIHNldCBhIGNvcnJlY3QgZGVwYXJz ZSBjb250ZXh0IGFuZCBtdXN0IGVuc3VyZSB0aGF0IHRoZQorICogcGFzc2VkIGF0dHJpYnV0ZSBo YXMgYSBkZWZhdWx0IHZhbHVlLgorICovCitjaGFyICoKK3JlbGF0aW9uX2dldF9jb2x1bW5fZGVm YXVsdChSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bm8sIExpc3QgKmRwY29udGV4dCkKK3sK KwlOb2RlCSAgICpkZWZ2YWw7CisJY2hhcgkgICAqZGVmc3RyOworCisJZGVmdmFsID0gYnVpbGRf Y29sdW1uX2RlZmF1bHQocmVsLCBhdHRubyk7CisJQXNzZXJ0KGRlZnZhbCAhPSBOVUxMKTsKKwor CWRlZnN0ciA9IGRlcGFyc2VfZXhwcmVzc2lvbihkZWZ2YWwsIGRwY29udGV4dCwgZmFsc2UsIGZh bHNlKTsKKworCXJldHVybiBkZWZzdHI7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX2luaGVyaXRzLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2luaGVyaXRzLmgKaW5k ZXggY2UxNTRhYjk0My4uOTk5MDlkMmMzNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19pbmhlcml0cy5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfaW5oZXJpdHMuaApA QCAtNjQsNCArNjQsNiBAQCBleHRlcm4gYm9vbCBEZWxldGVJbmhlcml0c1R1cGxlKE9pZCBpbmhy ZWxpZCwgT2lkIGluaHBhcmVudCwKIAkJCQkJCQkJY29uc3QgY2hhciAqY2hpbGRuYW1lKTsKIGV4 dGVybiBib29sIFBhcnRpdGlvbkhhc1BlbmRpbmdEZXRhY2goT2lkIHBhcnRvaWQpOwogCitleHRl cm4gTGlzdCAqcmVsYXRpb25fZ2V0X2luaF9wYXJlbnRzKE9pZCBvYmplY3RJZCk7CisKICNlbmRp ZgkJCQkJCQkvKiBQR19JTkhFUklUU19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCA2 OTk2MDczOTg5Li43NmZmMjNiNzc5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTEyMDQz LDQgKzEyMDQzLDExIEBACiAgIHByb25hbWUgPT4gJ2FueV92YWx1ZV90cmFuc2ZuJywgcHJvcmV0 dHlwZSA9PiAnYW55ZWxlbWVudCcsCiAgIHByb2FyZ3R5cGVzID0+ICdhbnllbGVtZW50IGFueWVs ZW1lbnQnLCBwcm9zcmMgPT4gJ2FueV92YWx1ZV90cmFuc2ZuJyB9LAogCit7IG9pZCA9PiAnNDY0 MicsIGRlc2NyID0+ICdkZXBhcnNlIHRoZSBEREwgY29tbWFuZCBpbnRvIGEgSlNPTiBmb3JtYXQg c3RyaW5nJywKKyAgcHJvbmFtZSA9PiAnZGRsX2RlcGFyc2VfdG9fanNvbicsIHByb3JldHR5cGUg PT4gJ3RleHQnLAorICBwcm9hcmd0eXBlcyA9PiAncGdfZGRsX2NvbW1hbmQnLCBwcm9zcmMgPT4g J2RkbF9kZXBhcnNlX3RvX2pzb24nIH0sCit7IG9pZCA9PiAnNDY0MycsIGRlc2NyID0+ICdleHBh bmQgSlNPTiBmb3JtYXQgRERMIHRvIGEgcGxhaW4gdGV4dCBEREwgY29tbWFuZCcsCisgIHByb25h bWUgPT4gJ2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kJywgcHJvcmV0dHlwZSA9PiAndGV4dCcs CisgIHByb2FyZ3R5cGVzID0+ICd0ZXh0JywgcHJvc3JjID0+ICdkZGxfZGVwYXJzZV9leHBhbmRf Y29tbWFuZCcgfSwKKwogXQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVu Y2UuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKaW5kZXggN2RiN2IzZGE3Yi4u YzBhMzk1OTZhYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaAor KysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCkBAIC0xNSw2ICsxNSw3IEBACiAK ICNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlYWRlci5oIgogI2luY2x1ZGUgImNhdGFsb2cvb2JqZWN0 YWRkcmVzcy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfc2VxdWVuY2UuaCIKICNpbmNsdWRlICJm bWdyLmgiCiAjaW5jbHVkZSAibGliL3N0cmluZ2luZm8uaCIKICNpbmNsdWRlICJub2Rlcy9wYXJz ZW5vZGVzLmgiCkBAIC01MSw5ICs1MiwxNyBAQCB0eXBlZGVmIHN0cnVjdCB4bF9zZXFfcmVjCiAJ LyogU0VRVUVOQ0UgVFVQTEUgREFUQSBGT0xMT1dTIEFUIFRIRSBFTkQgKi8KIH0geGxfc2VxX3Jl YzsKIAorLyogSW5mb3JtYXRpb24gbmVlZGVkIHRvIGRlZmluZSBhIHNlcXVlbmNlLiAqLwordHlw ZWRlZiBzdHJ1Y3QgU2VxdWVuY2VfdmFsdWVzCit7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3Jt OworCWludDY0CQlsYXN0X3ZhbHVlOworfSBTZXF1ZW5jZV92YWx1ZXM7CisKIGV4dGVybiBpbnQ2 NCBuZXh0dmFsX2ludGVybmFsKE9pZCByZWxpZCwgYm9vbCBjaGVja19wZXJtaXNzaW9ucyk7CiBl eHRlcm4gRGF0dW0gbmV4dHZhbChQR19GVU5DVElPTl9BUkdTKTsKIGV4dGVybiBMaXN0ICpzZXF1 ZW5jZV9vcHRpb25zKE9pZCByZWxpZCk7CitleHRlcm4gU2VxdWVuY2VfdmFsdWVzICpnZXRfc2Vx dWVuY2VfdmFsdWVzKE9pZCBzZXF1ZW5jZUlkKTsKIAogZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVm aW5lU2VxdWVuY2UoUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVTZXFTdG10ICpzZXEpOwogZXh0 ZXJuIE9iamVjdEFkZHJlc3MgQWx0ZXJTZXF1ZW5jZShQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVy U2VxU3RtdCAqc3RtdCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy90YWJsZWNt ZHMuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RhYmxlY21kcy5oCmluZGV4IDI1MGQ4OWZmODgu LmQyODc0YjkyNTUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RhYmxlY21kcy5o CisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RhYmxlY21kcy5oCkBAIC0xMDUsNCArMTA1LDYg QEAgZXh0ZXJuIHZvaWQgUmFuZ2VWYXJDYWxsYmFja093bnNSZWxhdGlvbihjb25zdCBSYW5nZVZh ciAqcmVsYXRpb24sCiBleHRlcm4gYm9vbCBQYXJ0Q29uc3RyYWludEltcGxpZWRCeVJlbENvbnN0 cmFpbnQoUmVsYXRpb24gc2NhbnJlbCwKIAkJCQkJCQkJCQkJCSBMaXN0ICpwYXJ0Q29uc3RyYWlu dCk7CiAKK2V4dGVybiBjaGFyICpzdG9yYWdlX25hbWUoY2hhciBjKTsKKwogI2VuZGlmCQkJCQkJ CS8qIFRBQkxFQ01EU19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5v ZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKaW5kZXggYjNiZWM5MGU1Mi4u YjhhYjhkYWU2YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCisr KyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaApAQCAtMjE2Nyw2ICsyMTY3LDcgQEAg dHlwZWRlZiBzdHJ1Y3QgQWx0ZXJUYWJsZVN0bXQKIAlMaXN0CSAgICpjbWRzOwkJCS8qIGxpc3Qg b2Ygc3ViY29tbWFuZHMgKi8KIAlPYmplY3RUeXBlCW9ianR5cGU7CQkvKiB0eXBlIG9mIG9iamVj dCAqLwogCWJvb2wJCW1pc3Npbmdfb2s7CQkvKiBza2lwIGVycm9yIGlmIHRhYmxlIG1pc3Npbmcg Ki8KKwlib29sCQl0YWJsZV9saWtlOwkJLyogaW50ZXJuYWxseSBnZW5lcmF0ZWQgZm9yIFRhYmxl TGlrZUNsYXVzZSAqLwogfSBBbHRlclRhYmxlU3RtdDsKIAogdHlwZWRlZiBlbnVtIEFsdGVyVGFi bGVUeXBlCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wYXJ0aXRpb25pbmcvcGFydGJvdW5kcy5o IGIvc3JjL2luY2x1ZGUvcGFydGl0aW9uaW5nL3BhcnRib3VuZHMuaAppbmRleCBkMmUwMWY5MmRm Li40NzZiMzhhODllIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wYXJ0aXRpb25pbmcvcGFydGJv dW5kcy5oCisrKyBiL3NyYy9pbmNsdWRlL3BhcnRpdGlvbmluZy9wYXJ0Ym91bmRzLmgKQEAgLTE0 Myw0ICsxNDMsNiBAQCBleHRlcm4gaW50CXBhcnRpdGlvbl9yYW5nZV9kYXR1bV9ic2VhcmNoKEZt Z3JJbmZvICpwYXJ0c3VwZnVuYywKIGV4dGVybiBpbnQJcGFydGl0aW9uX2hhc2hfYnNlYXJjaChQ YXJ0aXRpb25Cb3VuZEluZm8gYm91bmRpbmZvLAogCQkJCQkJCQkgICBpbnQgbW9kdWx1cywgaW50 IHJlbWFpbmRlcik7CiAKK2V4dGVybiBjaGFyICAgICpyZWxhdGlvbl9nZXRfcGFydF9ib3VuZChP aWQgcmVsaWQpOworCiAjZW5kaWYJCQkJCQkJLyogUEFSVEJPVU5EU19IICovCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS90Y29wL2RkbGRlcGFyc2UuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvZGRsZGVw YXJzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjBjY2I0ZDFlZGUK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS90Y29wL2RkbGRlcGFyc2UuaApAQCAtMCww ICsxLDIxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxkZXBhcnNlLmgKKyAqCisg KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBv ZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvdGNvcC9k ZGxkZXBhcnNlLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBERExfREVQ QVJTRV9ICisjZGVmaW5lIERETF9ERVBBUlNFX0gKKworI2luY2x1ZGUgInRjb3AvZGVwYXJzZV91 dGlsaXR5LmgiCisKK2V4dGVybiBjaGFyICpkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0 ZWRDb21tYW5kICpjbWQpOworZXh0ZXJuIGNoYXIgKmRlcGFyc2VfZGRsX2pzb25fdG9fc3RyaW5n KGNoYXIgKmpzb25iKTsKK2V4dGVybiBjaGFyICpkZXBhcnNlX2Ryb3BfdGFibGUoY29uc3QgY2hh ciAqb2JqaWRlbnRpdHksIE5vZGUgKnBhcnNldHJlZSk7CisKKyNlbmRpZgkJCQkJCQkvKiBERExf REVQQVJTRV9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oIGIv c3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaAppbmRleCAyZjhiNDZkNmRhLi5jZmRhMjk5ZGVl IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oCisrKyBiL3NyYy9pbmNs dWRlL3V0aWxzL2J1aWx0aW5zLmgKQEAgLTEyNCw5ICsxMjQsMTQgQEAgZXh0ZXJuIERhdHVtIG51 bWVyaWNfZmxvYXQ4X25vX292ZXJmbG93KFBHX0ZVTkNUSU9OX0FSR1MpOwogI2RlZmluZSBGT1JN QVRfVFlQRV9JTlZBTElEX0FTX05VTEwJMHgwOAkvKiBOVUxMIGlmIHVuZGVmaW5lZCAqLwogZXh0 ZXJuIGNoYXIgKmZvcm1hdF90eXBlX2V4dGVuZGVkKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1v ZCwgYml0czE2IGZsYWdzKTsKIAorZXh0ZXJuIHZvaWQgZm9ybWF0X3R5cGVfZGV0YWlsZWQoT2lk IHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kLAorCQkJCQkJCQkgIE9pZCAqbnNwaWQsIGNoYXIgKip0 eXBuYW1lLAorCQkJCQkJCQkgIGNoYXIgKip0eXBlbW9kc3RyLCBib29sICp0eXBlYXJyYXkpOwor CiBleHRlcm4gY2hhciAqZm9ybWF0X3R5cGVfYmUoT2lkIHR5cGVfb2lkKTsKIGV4dGVybiBjaGFy ICpmb3JtYXRfdHlwZV9iZV9xdWFsaWZpZWQoT2lkIHR5cGVfb2lkKTsKIGV4dGVybiBjaGFyICpm b3JtYXRfdHlwZV93aXRoX3R5cGVtb2QoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kKTsKK2V4 dGVybiBjaGFyICpwcmludFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQzMiB0eXBtb2Qs IE9pZCB0eXBtb2RvdXQpOwogCiBleHRlcm4gaW50MzIgdHlwZV9tYXhpbXVtX3NpemUoT2lkIHR5 cGVfb2lkLCBpbnQzMiB0eXBlbW9kKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMv cnVsZXV0aWxzLmggYi9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaAppbmRleCBiMDA2ZDlk NDc1Li41MGE4YTE0ZDExIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMu aAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaApAQCAtMTYsNiArMTYsNyBAQAog I2luY2x1ZGUgIm5vZGVzL25vZGVzLmgiCiAjaW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgog I2luY2x1ZGUgIm5vZGVzL3BnX2xpc3QuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2Vfbm9kZS5o IgogCiBzdHJ1Y3QgUGxhbjsJCQkJCS8qIGF2b2lkIGluY2x1ZGluZyBwbGFubm9kZXMuaCBoZXJl ICovCiBzdHJ1Y3QgUGxhbm5lZFN0bXQ7CkBAIC0zMSw5ICszMiwxMSBAQCBleHRlcm4gY2hhciAq cGdfZ2V0X2luZGV4ZGVmX2NvbHVtbnNfZXh0ZW5kZWQoT2lkIGluZGV4cmVsaWQsCiBleHRlcm4g Y2hhciAqcGdfZ2V0X3F1ZXJ5ZGVmKFF1ZXJ5ICpxdWVyeSwgYm9vbCBwcmV0dHkpOwogCiBleHRl cm4gY2hhciAqcGdfZ2V0X3BhcnRrZXlkZWZfY29sdW1ucyhPaWQgcmVsaWQsIGJvb2wgcHJldHR5 KTsKK2V4dGVybiBjaGFyICpwZ19nZXRfcGFydGtleWRlZl9zdHJpbmcoT2lkIHJlbGlkKTsKIGV4 dGVybiBjaGFyICpwZ19nZXRfcGFydGNvbnN0cmRlZl9zdHJpbmcoT2lkIHBhcnRpdGlvbklkLCBj aGFyICphbGlhc25hbWUpOwogCiBleHRlcm4gY2hhciAqcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29t bWFuZChPaWQgY29uc3RyYWludElkKTsKK2V4dGVybiBjaGFyICpwZ19nZXRfY29uc3RyYWludGRl Zl9zdHJpbmcoT2lkIGNvbnN0cmFpbnRJZCk7CiBleHRlcm4gY2hhciAqZGVwYXJzZV9leHByZXNz aW9uKE5vZGUgKmV4cHIsIExpc3QgKmRwY29udGV4dCwKIAkJCQkJCQkJYm9vbCBmb3JjZXByZWZp eCwgYm9vbCBzaG93aW1wbGljaXQpOwogZXh0ZXJuIExpc3QgKmRlcGFyc2VfY29udGV4dF9mb3Io Y29uc3QgY2hhciAqYWxpYXNuYW1lLCBPaWQgcmVsaWQpOwpAQCAtNDUsOCArNDgsMTggQEAgZXh0 ZXJuIExpc3QgKnNlbGVjdF9ydGFibGVfbmFtZXNfZm9yX2V4cGxhaW4oTGlzdCAqcnRhYmxlLAog CQkJCQkJCQkJCQkgQml0bWFwc2V0ICpyZWxzX3VzZWQpOwogZXh0ZXJuIGNoYXIgKmdlbmVyYXRl X2NvbGxhdGlvbl9uYW1lKE9pZCBjb2xsaWQpOwogZXh0ZXJuIGNoYXIgKmdlbmVyYXRlX29wY2xh c3NfbmFtZShPaWQgb3BjbGFzcyk7CitleHRlcm4gY2hhciAqZ2VuZXJhdGVfZnVuY3Rpb25fbmFt ZShPaWQgZnVuY2lkLCBpbnQgbmFyZ3MsIExpc3QgKmFyZ25hbWVzLAorCQkJCQkJCQkJT2lkICph cmd0eXBlcywgYm9vbCBoYXNfdmFyaWFkaWMsCisJCQkJCQkJCQlib29sICp1c2VfdmFyaWFkaWNf cCwKKwkJCQkJCQkJCVBhcnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2luZCk7CiBleHRlcm4gY2hh ciAqZ2V0X3JhbmdlX3BhcnRib3VuZF9zdHJpbmcoTGlzdCAqYm91bmRfZGF0dW1zKTsKK2V4dGVy biB2b2lkIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1YWxfZGF0YXR5cGUs CisJCQkJCQkJIFN0cmluZ0luZm8gYnVmKTsKK2V4dGVybiBjaGFyICpmbGF0dGVuX3JlbG9wdGlv bnMoT2lkIHJlbGlkKTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9zdGF0aXN0aWNzb2JqZGVmX3N0 cmluZyhPaWQgc3RhdGV4dGlkKTsKIAorZXh0ZXJuIGNoYXIgKnJlbGF0aW9uX2dldF9jb2x1bW5f ZGVmYXVsdChSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bm8sCisJCQkJCQkJCQkJIExpc3Qg KmRwY29udGV4dCk7CisKICNlbmRpZgkJCQkJCQkvKiBSVUxFVVRJTFNfSCAqLwpkaWZmIC0tZ2l0 IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdAppbmRleCAyNjA4NTQ3NDdiLi43YzhhZTdmZTdiIDEwMDY0NAotLS0gYS9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdApAQCAtMzIyMiw2ICszMjIyLDcgQEAgY29uZmlnX3Zhcl92YWx1ZQogY29u dGFpbl9hZ2dzX29mX2xldmVsX2NvbnRleHQKIGNvbnRhaW5fcGxhY2Vob2xkZXJfcmVmZXJlbmNl c19jb250ZXh0CiBjb252ZXJ0X3Rlc3RleHByX2NvbnRleHQKK2NvbnZTcGVjaWZpZXIKIGNvcHlf ZGF0YV9kZXN0X2NiCiBjb3B5X2RhdGFfc291cmNlX2NiCiBjb3JlX1lZU1RZUEUKQEAgLTM0MjUs NiArMzQyNiw3IEBAIGpzb25fbWFuaWZlc3RfcGVyd2FscmFuZ2VfY2FsbGJhY2sKIGpzb25fb2Zp ZWxkX2FjdGlvbgoganNvbl9zY2FsYXJfYWN0aW9uCiBqc29uX3N0cnVjdF9hY3Rpb24KK2pzb25f dHJpdmFsdWUKIGtleUVudHJ5RGF0YQoga2V5X3QKIGxjbENvbnRleHQKLS0gCjIuMzQuMQoK --_005_OS0PR01MB5716A47D23EFAF988475D4A99431AOS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="0002-Deparser-for-Alter-Table-DDL-commands-2023_06_30.patch" Content-Description: 0002-Deparser-for-Alter-Table-DDL-commands-2023_06_30.patch Content-Disposition: attachment; filename="0002-Deparser-for-Alter-Table-DDL-commands-2023_06_30.patch"; size=59991; creation-date="Tue, 11 Jul 2023 10:51:27 GMT"; modification-date="Tue, 11 Jul 2023 11:01:18 GMT" Content-Transfer-Encoding: base64 RnJvbSBhZjhkNGEzOGM0MTFkOGQ5MmM2YzVmZDI3NWZkZTdlMmE4NTIwOWZjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaHZldGEgTWFsaWsgPHNodmV0YS5tYWxpa0BnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMjggSnVuIDIwMjMgMTQ6Mzc6MDIgKzA1MzAKU3ViamVjdDogW1BBVENIIDIv NV0gRGVwYXJzZXIgZm9yIEFsdGVyIFRhYmxlIERETCBjb21tYW5kcy4KClRoaXMgcGF0Y2ggY29u c3RydWN0cyBKU09OIGJsb2JzIHJlcHJlc2VudGluZyB0aGUgQWx0ZXIgVGFibGUKRERMIGNvbW1h bmRzIHdoaWNoIGNhbiBsYXRlciBiZSByZS1wcm9jZXNzZWQgaW50byBwbGFpbiBzdHJpbmdzCmJ5 IHdlbGwtZGVmaW5lZCBzcHJpbnRmLWxpa2UgZXhwYW5zaW9uLgotLS0KIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL2RkbGRlcGFyc2UuYyB8IDE3MDUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0K IHNyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jICAgICAgICB8ICAgMTcgKwogc3JjL2luY2x1ZGUv dGNvcC91dGlsaXR5LmggICAgICAgIHwgICAgMiArCiAzIGZpbGVzIGNoYW5nZWQsIDE2ODMgaW5z ZXJ0aW9ucygrKSwgNDEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvZGRsZGVwYXJzZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsZGVwYXJzZS5jCmlu ZGV4IGM4ZTg4NWNhMWEuLmNiMDI0YjQ1YjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2RkbGRlcGFyc2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxkZXBhcnNlLmMK QEAgLTM2MywxMSArMzYzLDE2IEBAIGluc2VydF9pZGVudGl0eV9vYmplY3QoSnNvbmJQYXJzZVN0 YXRlICpzdGF0ZSwgT2lkIG5zcGlkLCBjaGFyICpyZWxuYW1lKQogICogQ0FDSEUgJXt2YWx1ZX0K ICAqLwogc3RhdGljIGlubGluZSB2b2lkCi1kZXBhcnNlX1NlcV9DYWNoZShKc29uYlBhcnNlU3Rh dGUgKnN0YXRlLCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEpCitkZXBhcnNlX1NlcV9DYWNoZShK c29uYlBhcnNlU3RhdGUgKnN0YXRlLCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsCisJCQkJICBi b29sIGFsdGVyX3RhYmxlKQogeworCWNoYXIJICAgKmZtdDsKKworCWZtdCA9IGFsdGVyX3RhYmxl ID8gIlNFVCBDQUNIRSAle3ZhbHVlfXMiIDogIkNBQ0hFICV7dmFsdWV9cyI7CisKIAlwdXNoSnNv bmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOwogCW5ld19qc29uYl9WQShz dGF0ZSwgMywKLQkJCQkgImZtdCIsIGpidlN0cmluZywgIkNBQ0hFICV7dmFsdWV9cyIsCisJCQkJ ICJmbXQiLCBqYnZTdHJpbmcsIGZtdCwKIAkJCQkgImNsYXVzZSIsIGpidlN0cmluZywgImNhY2hl IiwKIAkJCQkgInZhbHVlIiwgamJ2U3RyaW5nLAogCQkJCSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQs IHNlcWRhdGEtPnNlcWNhY2hlKSk7CkBAIC0zNzgsMTAgKzM4MywxMyBAQCBkZXBhcnNlX1NlcV9D YWNoZShKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEpCiAg KiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBDWUNMRSBvcHRpb24gdG8gSnNvbmIuCiAgKgogICogVmVy Ym9zZSBzeW50YXgKKyAqIFNFVCAle25vfXMgQ1lDTEUKKyAqIE9SCiAgKiAle25vfXMgQ1lDTEUK ICAqLwogc3RhdGljIGlubGluZSB2b2lkCi1kZXBhcnNlX1NlcV9DeWNsZShKc29uYlBhcnNlU3Rh dGUgKnN0YXRlLCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEpCitkZXBhcnNlX1NlcV9DeWNsZShK c29uYlBhcnNlU3RhdGUgKnN0YXRlLCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsCisJCQkJICBi b29sIGFsdGVyX3RhYmxlKQogewogCVN0cmluZ0luZm9EYXRhIGZtdFN0cjsKIApAQCAtMzg5LDYg KzM5Nyw5IEBAIGRlcGFyc2VfU2VxX0N5Y2xlKEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIEZvcm1f cGdfc2VxdWVuY2Ugc2VxZGF0YSkKIAogCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lO X09CSkVDVCwgTlVMTCk7CiAKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoJmZtdFN0ciwgIlNFVCAiKTsKKwogCWlmICghc2VxZGF0YS0+c2VxY3ljbGUpCiAJewog CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIsICIle25vfXMgIik7CkBAIC00MDgsMTQg KzQxOSwyMiBAQCBkZXBhcnNlX1NlcV9DeWNsZShKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBGb3Jt X3BnX3NlcXVlbmNlIHNlcWRhdGEpCiAgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBJTkNSRU1FTlQg Qlkgb3B0aW9uIHRvIEpzb25iCiAgKgogICogVmVyYm9zZSBzeW50YXgKKyAqIFNFVCBJTkNSRU1F TlQgQlkgJXt2YWx1ZX1zCisgKiBPUgogICogSU5DUkVNRU5UIEJZICV7dmFsdWV9cwogICovCiBz dGF0aWMgaW5saW5lIHZvaWQKLWRlcGFyc2VfU2VxX0luY3JlbWVudEJ5KEpzb25iUGFyc2VTdGF0 ZSAqc3RhdGUsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSkKK2RlcGFyc2VfU2VxX0luY3JlbWVu dEJ5KEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwKKwkJ CQkJCWJvb2wgYWx0ZXJfdGFibGUpCiB7CisJY2hhcgkgICAqZm10OworCisJZm10ID0gYWx0ZXJf dGFibGUgPyAiU0VUIElOQ1JFTUVOVCBCWSAle3ZhbHVlfXMiCisJCTogIklOQ1JFTUVOVCBCWSAl e3ZhbHVlfXMiOworCiAJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBO VUxMKTsKIAluZXdfanNvbmJfVkEoc3RhdGUsIDMsCi0JCQkJICJmbXQiLCBqYnZTdHJpbmcsICJJ TkNSRU1FTlQgQlkgJXt2YWx1ZX1zIiwKKwkJCQkgImZtdCIsIGpidlN0cmluZywgZm10LAogCQkJ CSAiY2xhdXNlIiwgamJ2U3RyaW5nLCAic2VxaW5jcmVtZW50IiwKIAkJCQkgInZhbHVlIiwgamJ2 U3RyaW5nLAogCQkJCSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcWluY3JlbWVu dCkpOwpAQCAtNDI2LDE0ICs0NDUsMjEgQEAgZGVwYXJzZV9TZXFfSW5jcmVtZW50QnkoSnNvbmJQ YXJzZVN0YXRlICpzdGF0ZSwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhKQogICogRGVwYXJzZSB0 aGUgc2VxdWVuY2UgTUFYVkFMVUUgb3B0aW9uIHRvIEpzb25iLgogICoKICAqIFZlcmJvc2Ugc3lu dGF4CisgKiBTRVQgTUFYVkFMVUUgJXt2YWx1ZX1zCisgKiBPUgogICogTUFYVkFMVUUgJXt2YWx1 ZX1zCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotZGVwYXJzZV9TZXFfTWF4dmFsdWUoSnNvbmJQ YXJzZVN0YXRlICpzdGF0ZSwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhKQorZGVwYXJzZV9TZXFf TWF4dmFsdWUoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRh LAorCQkJCQkgYm9vbCBhbHRlcl90YWJsZSkKIHsKKwljaGFyCSAgICpmbXQ7CisKKwlmbXQgPSBh bHRlcl90YWJsZSA/ICJTRVQgTUFYVkFMVUUgJXt2YWx1ZX1zIiA6ICJNQVhWQUxVRSAle3ZhbHVl fXMiOworCiAJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsK IAluZXdfanNvbmJfVkEoc3RhdGUsIDMsCi0JCQkJICJmbXQiLCBqYnZTdHJpbmcsICJNQVhWQUxV RSAle3ZhbHVlfXMiLAorCQkJCSAiZm10IiwgamJ2U3RyaW5nLCBmbXQsCiAJCQkJICJjbGF1c2Ui LCBqYnZTdHJpbmcsICJtYXh2YWx1ZSIsCiAJCQkJICJ2YWx1ZSIsIGpidlN0cmluZywKIAkJCQkg cHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFtYXgpKTsKQEAgLTQ0NCwxNCArNDcw LDIxIEBAIGRlcGFyc2VfU2VxX01heHZhbHVlKEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIEZvcm1f cGdfc2VxdWVuY2Ugc2VxZGF0YSkKICAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIE1JTlZBTFVFIG9w dGlvbiB0byBKc29uYgogICoKICAqIFZlcmJvc2Ugc3ludGF4CisgKiBTRVQgTUlOVkFMVUUgJXt2 YWx1ZX1zCisgKiBPUgogICogTUlOVkFMVUUgJXt2YWx1ZX1zCiAgKi8KIHN0YXRpYyBpbmxpbmUg dm9pZAotZGVwYXJzZV9TZXFfTWludmFsdWUoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgRm9ybV9w Z19zZXF1ZW5jZSBzZXFkYXRhKQorZGVwYXJzZV9TZXFfTWludmFsdWUoSnNvbmJQYXJzZVN0YXRl ICpzdGF0ZSwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLAorCQkJCQkgYm9vbCBhbHRlcl90YWJs ZSkKIHsKKwljaGFyCSAgICpmbXQ7CisKKwlmbXQgPSBhbHRlcl90YWJsZSA/ICJTRVQgTUlOVkFM VUUgJXt2YWx1ZX1zIiA6ICJNSU5WQUxVRSAle3ZhbHVlfXMiOworCiAJcHVzaEpzb25iVmFsdWUo JnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKIAluZXdfanNvbmJfVkEoc3RhdGUsIDMs Ci0JCQkJICJmbXQiLCBqYnZTdHJpbmcsICJNSU5WQUxVRSAle3ZhbHVlfXMiLAorCQkJCSAiZm10 IiwgamJ2U3RyaW5nLCBmbXQsCiAJCQkJICJjbGF1c2UiLCBqYnZTdHJpbmcsICJtaW52YWx1ZSIs CiAJCQkJICJ2YWx1ZSIsIGpidlN0cmluZywKIAkJCQkgcHNwcmludGYoSU5UNjRfRk9STUFULCBz ZXFkYXRhLT5zZXFtaW4pKTsKQEAgLTQ2NSw3ICs0OTgsOCBAQCBkZXBhcnNlX1NlcV9NaW52YWx1 ZShKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEpCiAgKiBP V05FRCBCWSAle293bmVyfUQKICAqLwogc3RhdGljIHZvaWQKLWRlcGFyc2VfU2VxX093bmVkQnko SnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgT2lkIHNlcXVlbmNlSWQpCitkZXBhcnNlX1NlcV9Pd25l ZEJ5KEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIE9pZCBzZXF1ZW5jZUlkLAorCQkJCQlib29sIGFs dGVyX3RhYmxlKQogewogCVJlbGF0aW9uCWRlcFJlbDsKIAlTeXNTY2FuRGVzYyBzY2FuOwpAQCAt NTUwLDE0ICs1ODQsMjEgQEAgZGVwYXJzZV9TZXFfT3duZWRCeShKc29uYlBhcnNlU3RhdGUgKnN0 YXRlLCBPaWQgc2VxdWVuY2VJZCkKICAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIFNUQVJUIFdJVEgg b3B0aW9uIHRvIEpzb25iLgogICoKICAqIFZlcmJvc2Ugc3ludGF4CisgKiBTRVQgU1RBUlQgV0lU SCAle3ZhbHVlfXMKKyAqIE9SCiAgKiBTVEFSVCBXSVRIICV7dmFsdWV9cwogICovCiBzdGF0aWMg aW5saW5lIHZvaWQKLWRlcGFyc2VfU2VxX1N0YXJ0d2l0aChKc29uYlBhcnNlU3RhdGUgKnN0YXRl LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEpCitkZXBhcnNlX1NlcV9TdGFydHdpdGgoSnNvbmJQ YXJzZVN0YXRlICpzdGF0ZSwKKwkJCQkJICBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wg YWx0ZXJfdGFibGUpCiB7CisJY2hhcgkgICAqZm10OworCisJZm10ID0gYWx0ZXJfdGFibGUgPyAi U0VUIFNUQVJUIFdJVEggJXt2YWx1ZX1zIiA6ICJTVEFSVCBXSVRIICV7dmFsdWV9cyI7CisKIAlw dXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOwogCW5ld19qc29u Yl9WQShzdGF0ZSwgMywKLQkJCQkgImZtdCIsIGpidlN0cmluZywgIlNUQVJUIFdJVEggJXt2YWx1 ZX1zIiwKKwkJCQkgImZtdCIsIGpidlN0cmluZywgZm10LAogCQkJCSAiY2xhdXNlIiwgamJ2U3Ry aW5nLCAic3RhcnQiLAogCQkJCSAidmFsdWUiLCBqYnZTdHJpbmcsCiAJCQkJIHBzcHJpbnRmKElO VDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2Vxc3RhcnQpKTsKQEAgLTYwMSwxNSArNjQyLDE3IEBAIGRl cGFyc2VfU2VxX0FzKEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIEZvcm1fcGdfc2VxdWVuY2Ugc2Vx ZGF0YSkKICAqIERlcGFyc2UgdGhlIGRlZmluaXRpb24gb2YgY29sdW1uIGlkZW50aXR5IHRvIEpz b25iLgogICoKICAqIFZlcmJvc2Ugc3ludGF4Ci0gKiAle2lkZW50aXR5X3R5cGV9cyAoICV7c2Vx X2RlZmluaXRpb246IH1zICkKLSAqIHdoZXJlIGlkZW50aXR5X3R5cGUgaXM6ICJHRU5FUkFURUQg JXtvcHRpb259cyBBUyBJREVOVElUWSIKKyAqIFNFVCBHRU5FUkFURUQgJXtvcHRpb259cyAle3Nl cV9kZWZpbml0aW9uOiB9cworICogT1IKKyAqIEdFTkVSQVRFRCAle29wdGlvbn1zIEFTIElERU5U SVRZICggJXtzZXFfZGVmaW5pdGlvbjogfXMgKQogICovCiBzdGF0aWMgdm9pZAogZGVwYXJzZV9D b2x1bW5JZGVudGl0eShKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBjaGFyICpwYXJlbnRLZXksCi0J CQkJCSAgIE9pZCBzZXFyZWxpZCwgY2hhciBpZGVudGl0eSkKKwkJCQkJICAgT2lkIHNlcXJlbGlk LCBjaGFyIGlkZW50aXR5LCBib29sIGFsdGVyX3RhYmxlKQogewogCUZvcm1fcGdfc2VxdWVuY2Ug c2VxZm9ybTsKIAlTZXF1ZW5jZV92YWx1ZXMgKnNlcXZhbHVlczsKKwljaGFyCSAgICppZGVudGZt dDsKIAlTdHJpbmdJbmZvRGF0YSBmbXRTdHI7CiAKIAlpbml0U3RyaW5nSW5mbygmZm10U3RyKTsK QEAgLTYzMSwxMCArNjc0LDExIEBAIGRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoSnNvbmJQYXJzZVN0 YXRlICpzdGF0ZSwgY2hhciAqcGFyZW50S2V5LAogCQlpbnNlcnRfanNvbmJfa2V5KHN0YXRlLCAi aWRlbnRpdHlfdHlwZSIpOwogCiAJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09C SkVDVCwgTlVMTCk7CisJCWlkZW50Zm10ID0gYWx0ZXJfdGFibGUgPyAiU0VUIEdFTkVSQVRFRCAl e29wdGlvbn1zIiA6CisJCQkiR0VORVJBVEVEICV7b3B0aW9ufXMgQVMgSURFTlRJVFkiOwogCiAJ CW5ld19qc29uYl9WQShzdGF0ZSwgMiwKLQkJCQkJICJmbXQiLCBqYnZTdHJpbmcsCi0JCQkJCSAi R0VORVJBVEVEICV7b3B0aW9ufXMgQVMgSURFTlRJVFkiLAorCQkJCQkgImZtdCIsIGpidlN0cmlu ZywgaWRlbnRmbXQsCiAJCQkJCSAib3B0aW9uIiwgamJ2U3RyaW5nLAogCQkJCQkgKGlkZW50aXR5 ID09IEFUVFJJQlVURV9JREVOVElUWV9BTFdBWVMgPwogCQkJCQkgICJBTFdBWVMiIDogIkJZIERF RkFVTFQiKSk7CkBAIC02NDQsNyArNjg4LDggQEAgZGVwYXJzZV9Db2x1bW5JZGVudGl0eShKc29u YlBhcnNlU3RhdGUgKnN0YXRlLCBjaGFyICpwYXJlbnRLZXksCiAJLyogc2VxX2RlZmluaXRpb24g YXJyYXkgb2JqZWN0IGNyZWF0aW9uICovCiAJaW5zZXJ0X2pzb25iX2tleShzdGF0ZSwgInNlcV9k ZWZpbml0aW9uIik7CiAKLQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIsICIgKCAle3Nl cV9kZWZpbml0aW9uOiB9cyApIik7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3RyLCBh bHRlcl90YWJsZSA/ICIgJXtzZXFfZGVmaW5pdGlvbjogfXMiIDoKKwkJCQkJCSAgICIgKCAle3Nl cV9kZWZpbml0aW9uOiB9cyApIik7CiAKIAlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJ Tl9BUlJBWSwgTlVMTCk7CiAKQEAgLTY1MiwxMiArNjk3LDEyIEBAIGRlcGFyc2VfQ29sdW1uSWRl bnRpdHkoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgY2hhciAqcGFyZW50S2V5LAogCXNlcWZvcm0g PSBzZXF2YWx1ZXMtPnNlcWZvcm07CiAKIAkvKiBEZWZpbml0aW9uIGVsZW1lbnRzICovCi0JZGVw YXJzZV9TZXFfQ2FjaGUoc3RhdGUsIHNlcWZvcm0pOwotCWRlcGFyc2VfU2VxX0N5Y2xlKHN0YXRl LCBzZXFmb3JtKTsKLQlkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShzdGF0ZSwgc2VxZm9ybSk7Ci0J ZGVwYXJzZV9TZXFfTWludmFsdWUoc3RhdGUsIHNlcWZvcm0pOwotCWRlcGFyc2VfU2VxX01heHZh bHVlKHN0YXRlLCBzZXFmb3JtKTsKLQlkZXBhcnNlX1NlcV9TdGFydHdpdGgoc3RhdGUsIHNlcWZv cm0pOworCWRlcGFyc2VfU2VxX0NhY2hlKHN0YXRlLCBzZXFmb3JtLCBhbHRlcl90YWJsZSk7CisJ ZGVwYXJzZV9TZXFfQ3ljbGUoc3RhdGUsIHNlcWZvcm0sIGFsdGVyX3RhYmxlKTsKKwlkZXBhcnNl X1NlcV9JbmNyZW1lbnRCeShzdGF0ZSwgc2VxZm9ybSwgYWx0ZXJfdGFibGUpOworCWRlcGFyc2Vf U2VxX01pbnZhbHVlKHN0YXRlLCBzZXFmb3JtLCBhbHRlcl90YWJsZSk7CisJZGVwYXJzZV9TZXFf TWF4dmFsdWUoc3RhdGUsIHNlcWZvcm0sIGFsdGVyX3RhYmxlKTsKKwlkZXBhcnNlX1NlcV9TdGFy dHdpdGgoc3RhdGUsIHNlcWZvcm0sIGFsdGVyX3RhYmxlKTsKIAlkZXBhcnNlX1NlcV9SZXN0YXJ0 KHN0YXRlLCBzZXF2YWx1ZXMtPmxhc3RfdmFsdWUpOwogCS8qIFdlIHB1cnBvc2VmdWxseSBkbyBu b3QgZW1pdCBPV05FRCBCWSBoZXJlICovCiAKQEAgLTY4NSw3ICs3MzAsOCBAQCBkZXBhcnNlX0Nv bHVtbklkZW50aXR5KEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIGNoYXIgKnBhcmVudEtleSwKICAq Lwogc3RhdGljIHZvaWQKIGRlcGFyc2VfQ29sdW1uRGVmKEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUs IFJlbGF0aW9uIHJlbGF0aW9uLAotCQkJCSAgTGlzdCAqZHBjb250ZXh0LCBib29sIGNvbXBvc2l0 ZSwgQ29sdW1uRGVmICpjb2xkZWYpCisJCQkJICBMaXN0ICpkcGNvbnRleHQsIGJvb2wgY29tcG9z aXRlLCBDb2x1bW5EZWYgKmNvbGRlZiwKKwkJCQkgIGJvb2wgaXNfYWx0ZXIpCiB7CiAJT2lkCQkJ cmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKIAlIZWFwVHVwbGUJYXR0clR1cDsK QEAgLTc5MCw2ICs4MzYsOSBAQCBkZXBhcnNlX0NvbHVtbkRlZihKc29uYlBhcnNlU3RhdGUgKnN0 YXRlLCBSZWxhdGlvbiByZWxhdGlvbiwKIAkJCX0KIAkJfQogCisJCWlmIChpc19hbHRlciAmJiBj b2xkZWYtPmlzX25vdF9udWxsKQorCQkJc2F3X25vdG51bGwgPSB0cnVlOworCiAJCS8qIE5PVCBO VUxMICovCiAJCWlmIChzYXdfbm90bnVsbCkKIAkJewpAQCAtODM2LDcgKzg4NSw3IEBAIGRlcGFy c2VfQ29sdW1uRGVmKEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIFJlbGF0aW9uIHJlbGF0aW9uLAog CQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmZtdFN0ciwgIiAle2lkZW50aXR5X2NvbHVtbn1z Iik7CiAJCQkJZGVwYXJzZV9Db2x1bW5JZGVudGl0eShzdGF0ZSwgImlkZW50aXR5X2NvbHVtbiIs CiAJCQkJCQkJCQkgICBzZXFyZWxpZCwKLQkJCQkJCQkJCSAgIGNvbGRlZi0+aWRlbnRpdHkpOwor CQkJCQkJCQkJICAgY29sZGVmLT5pZGVudGl0eSwgaXNfYWx0ZXIpOwogCQkJfQogCQl9CiAKQEAg LTEwMzYsNyArMTA4NSw3IEBAIGRlcGFyc2VfVGFibGVFbGVtcyhKc29uYlBhcnNlU3RhdGUgKnN0 YXRlLCBSZWxhdGlvbiByZWxhdGlvbiwKIAkJCQkJCQkJCQkJCShDb2x1bW5EZWYgKikgZWx0KTsK IAkJCQkJZWxzZQogCQkJCQkJZGVwYXJzZV9Db2x1bW5EZWYoc3RhdGUsIHJlbGF0aW9uLCBkcGNv bnRleHQsCi0JCQkJCQkJCQkJICBjb21wb3NpdGUsIChDb2x1bW5EZWYgKikgZWx0KTsKKwkJCQkJ CQkJCQkgIGNvbXBvc2l0ZSwgKENvbHVtbkRlZiAqKSBlbHQsIGZhbHNlKTsKIAkJCQl9CiAJCQkJ YnJlYWs7CiAJCQljYXNlIFRfQ29uc3RyYWludDoKQEAgLTEyNzUsNiArMTMyNCw5MyBAQCBkZXBh cnNlX0RlZkVsZW0oSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgRGVmRWxlbSAqZWxlbSwgYm9vbCBp c19yZXNldCkKIAlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsK IH0KIAorLyoKKyAqIERlcGFyc2UgU0VUL1JFU0VUIGFzIHVzZWQgYnkKKyAqIEFMVEVSIFRBQkxF IC4uLiBBTFRFUiBDT0xVTU4gLi4uIFNFVC9SRVNFVCAoLi4uKQorICoKKyAqIFZlcmJvc2Ugc3lu dGF4CisgKiBBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBSRVNFVHxTRVQgKCV7b3B0aW9uczosIH1z KQorICovCitzdGF0aWMgdm9pZAorZGVwYXJzZV9Db2x1bW5TZXRPcHRpb25zKEpzb25iUGFyc2VT dGF0ZSAqc3RhdGUsIEFsdGVyVGFibGVDbWQgKnN1YmNtZCkKK3sKKwlMaXN0Q2VsbCAgICpjZWxs OworCWJvb2wJCWlzX3Jlc2V0ID0gc3ViY21kLT5zdWJ0eXBlID09IEFUX1Jlc2V0T3B0aW9uczsK Kwlib29sCQllbGVtX2ZvdW5kIFBHX1VTRURfRk9SX0FTU0VSVFNfT05MWSA9IGZhbHNlOworCisJ cHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKworCW5ld19q c29uYl9WQShzdGF0ZSwgMywKKwkJCQkgImZtdCIsIGpidlN0cmluZywgIkFMVEVSIENPTFVNTiAl e2NvbHVtbn1JIgorCQkJCSAiICV7b3B0aW9ufXMgKCV7b3B0aW9uczosIH1zKSIsCisJCQkJICJj b2x1bW4iLCBqYnZTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkgIm9wdGlvbiIsIGpidlN0cmlu ZywgaXNfcmVzZXQgPyAiUkVTRVQiIDogIlNFVCIpOworCisJaW5zZXJ0X2pzb25iX2tleShzdGF0 ZSwgIm9wdGlvbnMiKTsKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9BUlJBWSwg TlVMTCk7CisKKwlmb3JlYWNoKGNlbGwsIChMaXN0ICopIHN1YmNtZC0+ZGVmKQorCXsKKwkJRGVm RWxlbSAgICAqZWxlbTsKKworCQllbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlk ZXBhcnNlX0RlZkVsZW0oc3RhdGUsIGVsZW0sIGlzX3Jlc2V0KTsKKworI2lmZGVmIFVTRV9BU1NF UlRfQ0hFQ0tJTkcKKwkJZWxlbV9mb3VuZCA9IHRydWU7CisjZW5kaWYKKwl9CisKKwlwdXNoSnNv bmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfQVJSQVksIE5VTEwpOworCisJQXNzZXJ0KGVsZW1fZm91 bmQpOworCisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7Cit9 CisKKy8qCisgKiBEZXBhcnNlIFNFVC9SRVNFVCBhcyB1c2VkIGJ5IEFMVEVSIFRBQkxFIC4uLiBT RVQvUkVTRVQgKC4uLikKKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogUkVTRVR8U0VUICgle29w dGlvbnM6LCB9cykKKyAqLworc3RhdGljIHZvaWQKK2RlcGFyc2VfUmVsU2V0T3B0aW9ucyhKc29u YlBhcnNlU3RhdGUgKnN0YXRlLCBBbHRlclRhYmxlQ21kICpzdWJjbWQpCit7CisJTGlzdENlbGwg ICAqY2VsbDsKKwlib29sCQlpc19yZXNldCA9IHN1YmNtZC0+c3VidHlwZSA9PSBBVF9SZXNldFJl bE9wdGlvbnM7CisJYm9vbAkJZWxlbV9mb3VuZCBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFkgPSBm YWxzZTsKKworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7 CisKKwluZXdfanNvbmJfVkEoc3RhdGUsIDIsCisJCQkJICJmbXQiLCBqYnZTdHJpbmcsICIle3Nl dF9yZXNldH1zICgle29wdGlvbnM6LCB9cykiLAorCQkJCSAic2V0X3Jlc2V0IiwgamJ2U3RyaW5n LCBpc19yZXNldCA/ICJSRVNFVCIgOiAiU0VUIik7CisKKwkvKiBpbnNlcnQgb3B0aW9ucyBhcnJh eSAqLworCWluc2VydF9qc29uYl9rZXkoc3RhdGUsICJvcHRpb25zIik7CisKKwlwdXNoSnNvbmJW YWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9BUlJBWSwgTlVMTCk7CisKKwlmb3JlYWNoKGNlbGwsIChM aXN0ICopIHN1YmNtZC0+ZGVmKQorCXsKKwkJRGVmRWxlbSAgICAqZWxlbTsKKworCQllbGVtID0g KERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlkZXBhcnNlX0RlZkVsZW0oc3RhdGUsIGVsZW0s IGlzX3Jlc2V0KTsKKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwkJZWxlbV9mb3VuZCA9 IHRydWU7CisjZW5kaWYKKwl9CisKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfQVJS QVksIE5VTEwpOworCisJQXNzZXJ0KGVsZW1fZm91bmQpOworCisJcHVzaEpzb25iVmFsdWUoJnN0 YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7Cit9CisKIC8qCiAgKiBEZXBhcnNlIFdJVEggY2xh dXNlLCBhcyB1c2VkIGJ5IENyZWF0ZSBUYWJsZS4KICAqCkBAIC0xNTc1LDYgKzE3MTEsMTI4MSBA QCBkZXBhcnNlX2Ryb3BfdGFibGUoY29uc3QgY2hhciAqb2JqaWRlbnRpdHksIE5vZGUgKnBhcnNl dHJlZSkKIAlyZXR1cm4gSnNvbmJUb0NTdHJpbmcoJnN0ciwgJmpzb25iLT5yb290LCBKU09OQl9F U1RJTUFURURfTEVOKTsKIH0KIAorLyoKKyAqIERlcGFyc2UgYWxsIHRoZSBjb2xsZWN0ZWQgc3Vi Y29tbWFuZHMgYW5kIHJldHVybiBqc29uYiBzdHJpbmcgcmVwcmVzZW50aW5nCisgKiB0aGUgYWx0 ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgVEFCTEUgJXtvbmx5 fXMgJXtpZGVudGl0eX1EICV7c3ViY21kczosIH1zCisgKi8KK3N0YXRpYyBKc29uYiAqCitkZXBh cnNlX0FsdGVyVGFibGVTdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlMaXN0CSAgICpk cGNvbnRleHQ7CisJUmVsYXRpb24JcmVsOworCUxpc3RDZWxsICAgKmNlbGw7CisJT2lkCQkJcmVs SWQgPSBjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZDsKKwlBbHRlclRhYmxlU3RtdCAqc3RtdCA9 IE5VTEw7CisJU3RyaW5nSW5mb0RhdGEgZm10U3RyOworCUpzb25iUGFyc2VTdGF0ZSAqc3RhdGUg PSBOVUxMOworCWJvb2wJCXN1YkNtZEFycmF5ID0gZmFsc2U7CisJSnNvbmJWYWx1ZSAqdmFsdWU7 CisKKwlBc3NlcnQoY21kLT50eXBlID09IFNDVF9BbHRlclRhYmxlKTsKKwlzdG10ID0gKEFsdGVy VGFibGVTdG10ICopIGNtZC0+cGFyc2V0cmVlOworCisJQXNzZXJ0KElzQShzdG10LCBBbHRlclRh YmxlU3RtdCkgfHwgSXNBKHN0bXQsIEFsdGVyVGFibGVNb3ZlQWxsU3RtdCkpOworCisJaW5pdFN0 cmluZ0luZm8oJmZtdFN0cik7CisKKwkvKgorCSAqIEFMVEVSIFRBQkxFIHN1YmNvbW1hbmRzIGdl bmVyYXRlZCBmb3IgVGFibGVMaWtlQ2xhdXNlIGlzIHByb2Nlc3NlZCBpbgorCSAqIHRoZSB0b3Ag bGV2ZWwgQ1JFQVRFIFRBQkxFIGNvbW1hbmQ7IHJldHVybiBlbXB0eSBoZXJlLgorCSAqLworCWlm IChJc0Eoc3RtdCwgQWx0ZXJUYWJsZVN0bXQpICYmIHN0bXQtPnRhYmxlX2xpa2UpCisJCXJldHVy biBOVUxMOworCisJcmVsID0gcmVsYXRpb25fb3BlbihyZWxJZCwgQWNjZXNzU2hhcmVMb2NrKTsK KworCWlmIChyZWwtPnJkX3JlbC0+cmVsa2luZCAhPSBSRUxLSU5EX1JFTEFUSU9OICYmCisJCXJl bC0+cmRfcmVsLT5yZWxraW5kICE9IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJeworCQkv KiB1bnN1cHBvcnRlZCByZWxraW5kICovCisJCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVM b2NrKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0 X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLCByZWxJZCk7CisKKwlwdXNoSnNvbmJW YWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCisJLyogU3RhcnQgY29uc3Ry dWN0aW5nIGZtdCBzdHJpbmcgKi8KKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIsICJB TFRFUiBUQUJMRSIpOworCisJaWYgKCFzdG10LT5yZWxhdGlvbi0+aW5oKQorCXsKKwkJYXBwZW5k U3RyaW5nSW5mb1N0cmluZygmZm10U3RyLCAiICV7b25seX1zIik7CisJCW5ld19qc29uYl9WQShz dGF0ZSwgMSwgIm9ubHkiLCBqYnZTdHJpbmcsICJPTkxZIik7CisJfQorCisJYXBwZW5kU3RyaW5n SW5mb1N0cmluZygmZm10U3RyLCAiICV7aWRlbnRpdHl9RCIpOworCWluc2VydF9pZGVudGl0eV9v YmplY3Qoc3RhdGUsIHJlbC0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkgICBSZWxhdGlv bkdldFJlbGF0aW9uTmFtZShyZWwpKTsKKworCWZvcmVhY2goY2VsbCwgY21kLT5kLmFsdGVyVGFi bGUuc3ViY21kcykKKwl7CisJCUNvbGxlY3RlZEFUU3ViY21kICpzdWIgPSAoQ29sbGVjdGVkQVRT dWJjbWQgKikgbGZpcnN0KGNlbGwpOworCQlBbHRlclRhYmxlQ21kICpzdWJjbWQgPSAoQWx0ZXJU YWJsZUNtZCAqKSBzdWItPnBhcnNldHJlZTsKKworCQlBc3NlcnQoSXNBKHN1YmNtZCwgQWx0ZXJU YWJsZUNtZCkpOworCisJCS8qCisJCSAqIFNraXAgZGVwYXJzZSBvZiB0aGUgc3ViY29tbWFuZCBp ZiB0aGUgb2JqZWN0SWQgZG9lc24ndCBtYXRjaCB0aGUKKwkJICogdGFyZ2V0IHJlbGF0aW9uIElE LiBJdCBjYW4gaGFwcGVuIGZvciBpbmhlcml0ZWQgdGFibGVzIHdoZW4KKwkJICogc3ViY29tbWFu ZHMgZm9yIGluaGVyaXRlZCB0YWJsZXMgYW5kIHRoZSBwYXJlbnQgdGFibGUgYXJlIGJvdGgKKwkJ ICogY29sbGVjdGVkIGluIHRoZSBBTFRFUiBUQUJMRSBjb21tYW5kIGZvciB0aGUgcGFyZW50IHRh YmxlLgorCQkgKi8KKwkJaWYgKHN1YmNtZC0+c3VidHlwZSAhPSBBVF9BdHRhY2hQYXJ0aXRpb24g JiYKKwkJCXN1Yi0+YWRkcmVzcy5vYmplY3RJZCAhPSByZWxJZCAmJgorCQkJaGFzX3N1cGVyY2xh c3Moc3ViLT5hZGRyZXNzLm9iamVjdElkKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIE1hcmsgdGhl IGJlZ2luIG9mIHN1YmNtZHMgYXJyYXkgKi8KKwkJaWYgKCFzdWJDbWRBcnJheSkKKwkJeworCQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3RyLCAiICV7c3ViY21kczosIH1zIik7CisJCQlp bnNlcnRfanNvbmJfa2V5KHN0YXRlLCAic3ViY21kcyIpOworCQkJcHVzaEpzb25iVmFsdWUoJnN0 YXRlLCBXSkJfQkVHSU5fQVJSQVksIE5VTEwpOworCQkJc3ViQ21kQXJyYXkgPSB0cnVlOworCQl9 CisKKwkJc3dpdGNoIChzdWJjbWQtPnN1YnR5cGUpCisJCXsKKwkJCWNhc2UgQVRfQWRkQ29sdW1u OgorCQkJCXsKKwkJCQkJU3RyaW5nSW5mb0RhdGEgZm10U3ViOworCisJCQkJCWluaXRTdHJpbmdJ bmZvKCZmbXRTdWIpOworCisJCQkJCS8qIFhYWCBuZWVkIHRvIHNldCB0aGUgInJlY3Vyc2UiIGJp dCBzb21ld2hlcmU/ICovCisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIENvbHVtbkRlZikp OworCisJCQkJCS8qCisJCQkJCSAqIFN5bnRheDogQUREIENPTFVNTiAle2lmX25vdF9leGlzdHN9 cyAle2RlZmluaXRpb259cyIKKwkJCQkJICogd2hlcmUgZGVmaW5pdGlvbjogIiV7bmFtZX1JICV7 Y29sdHlwZX1UIFNUT1JBR0UKKwkJCQkJICogJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1z ICV7Y29sbGF0aW9ufXMKKwkJCQkJICogJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7aWRlbnRp dHlfY29sdW1ufXMKKwkJCQkJICogJXtnZW5lcmF0ZWRfY29sdW1ufXMiCisJCQkJCSAqLworCQkJ CQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCisJCQkJ CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmZtdFN1YiwgIkFERCBDT0xVTU4iKTsKKwkJCQkJbmV3 X2pzb25iX1ZBKHN0YXRlLCAxLCAidHlwZSIsIGpidlN0cmluZywgImFkZCBjb2x1bW4iKTsKKwor CQkJCQlpZiAoc3ViY21kLT5taXNzaW5nX29rKQorCQkJCQl7CisJCQkJCQlhcHBlbmRTdHJpbmdJ bmZvU3RyaW5nKCZmbXRTdWIsICIgJXtpZl9ub3RfZXhpc3RzfXMiKTsKKwkJCQkJCW5ld19qc29u Yl9WQShzdGF0ZSwgMSwKKwkJCQkJCQkJCSAiaWZfbm90X2V4aXN0cyIsIGpidlN0cmluZywgIklG IE5PVCBFWElTVFMiKTsKKwkJCQkJfQorCisJCQkJCS8qIFB1c2ggZGVmaW5pdGlvbiBrZXktdmFs dWUgcGFpciAqLworCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdWIsICIgJXtkZWZp bml0aW9ufXMiKTsKKwkJCQkJaW5zZXJ0X2pzb25iX2tleShzdGF0ZSwgImRlZmluaXRpb24iKTsK KworCQkJCQlkZXBhcnNlX0NvbHVtbkRlZihzdGF0ZSwgcmVsLCBkcGNvbnRleHQsCisJCQkJCQkJ CQkgIGZhbHNlLCAoQ29sdW1uRGVmICopIHN1YmNtZC0+ZGVmLAorCQkJCQkJCQkJICB0cnVlKTsK KworCQkJCQkvKiBXZSBoYXZlIGZ1bGwgZm10IGJ5IG5vdywgc28gYWRkIGpzb25iIGVsZW1lbnQg Zm9yIHRoYXQgKi8KKwkJCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLCAiZm10IiwgamJ2U3RyaW5n LCBmbXRTdWIuZGF0YSk7CisJCQkJCXBmcmVlKGZtdFN1Yi5kYXRhKTsKKworCQkJCQlwdXNoSnNv bmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQkJYnJlYWs7CisJCQkJ fQorCisJCQljYXNlIEFUX0FkZEluZGV4Q29uc3RyYWludDoKKwkJCQl7CisJCQkJCUluZGV4U3Rt dCAgKmlzdG10OworCQkJCQlSZWxhdGlvbglpZHg7CisJCQkJCU9pZAkJCWNvbk9pZCA9IHN1Yi0+ YWRkcmVzcy5vYmplY3RJZDsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJbmRleFN0 bXQpKTsKKwkJCQkJaXN0bXQgPSAoSW5kZXhTdG10ICopIHN1YmNtZC0+ZGVmOworCisJCQkJCUFz c2VydChpc3RtdC0+aXNjb25zdHJhaW50ICYmIGlzdG10LT51bmlxdWUpOworCisJCQkJCWlkeCA9 IHJlbGF0aW9uX29wZW4oaXN0bXQtPmluZGV4T2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCQkJ CS8qCisJCQkJCSAqIFN5bnRheDogQUREIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtjb25zdHJhaW50 X3R5cGV9cworCQkJCQkgKiBVU0lORyBJTkRFWCAlaW5kZXhfbmFtZX1JICV7ZGVmZXJyYWJsZX1z CisJCQkJCSAqICV7aW5pdF9kZWZlcnJlZH1zCisJCQkJCSAqLworCQkJCQlwdXNoSnNvbmJWYWx1 ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCisJCQkJCW5ld19qc29uYl9WQShz dGF0ZSwgNywKKwkJCQkJCQkJICJmbXQiLCBqYnZTdHJpbmcsCisJCQkJCQkJCSAiQUREIENPTlNU UkFJTlQgJXtuYW1lfUkgJXtjb25zdHJhaW50X3R5cGV9cyIKKwkJCQkJCQkJICIgVVNJTkcgSU5E RVggJXtpbmRleF9uYW1lfUkgJXtkZWZlcnJhYmxlfXMiCisJCQkJCQkJCSAiICV7aW5pdF9kZWZl cnJlZH1zIiwKKwkJCQkJCQkJICJ0eXBlIiwgamJ2U3RyaW5nLCAiYWRkIGNvbnN0cmFpbnQgdXNp bmcgaW5kZXgiLAorCQkJCQkJCQkgIm5hbWUiLCBqYnZTdHJpbmcsIGdldF9jb25zdHJhaW50X25h bWUoY29uT2lkKSwKKwkJCQkJCQkJICJjb25zdHJhaW50X3R5cGUiLCBqYnZTdHJpbmcsCisJCQkJ CQkJCSBpc3RtdC0+cHJpbWFyeSA/ICJQUklNQVJZIEtFWSIgOiAiVU5JUVVFIiwKKwkJCQkJCQkJ ICJpbmRleF9uYW1lIiwgamJ2U3RyaW5nLAorCQkJCQkJCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5h bWUoaWR4KSwKKwkJCQkJCQkJICJkZWZlcnJhYmxlIiwgamJ2U3RyaW5nLAorCQkJCQkJCQkgaXN0 bXQtPmRlZmVycmFibGUgPyAiREVGRVJSQUJMRSIgOgorCQkJCQkJCQkgIk5PVCBERUZFUlJBQkxF IiwKKwkJCQkJCQkJICJpbml0X2RlZmVycmVkIiwgamJ2U3RyaW5nLAorCQkJCQkJCQkgaXN0bXQt PmluaXRkZWZlcnJlZCA/ICJJTklUSUFMTFkgREVGRVJSRUQiIDoKKwkJCQkJCQkJICJJTklUSUFM TFkgSU1NRURJQVRFIik7CisKKwkJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09C SkVDVCwgTlVMTCk7CisJCQkJCXJlbGF0aW9uX2Nsb3NlKGlkeCwgQWNjZXNzU2hhcmVMb2NrKTsK KwkJCQkJYnJlYWs7CisJCQkJfQorCQkJY2FzZSBBVF9SZUFkZEluZGV4OgorCQkJY2FzZSBBVF9S ZUFkZENvbnN0cmFpbnQ6CisJCQljYXNlIEFUX1JlQWRkRG9tYWluQ29uc3RyYWludDoKKwkJCWNh c2UgQVRfUmVBZGRDb21tZW50OgorCQkJY2FzZSBBVF9SZXBsYWNlUmVsT3B0aW9uczoKKwkJCWNh c2UgQVRfQ2hlY2tOb3ROdWxsOgorCQkJY2FzZSBBVF9SZUFkZFN0YXRpc3RpY3M6CisJCQkJLyog U3VidHlwZXMgdXNlZCBmb3IgaW50ZXJuYWwgb3BlcmF0aW9uczsgbm90aGluZyB0byBkbyBoZXJl ICovCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQ29sdW1uRGVmYXVsdDoKKwkJCQlpZiAoc3Vi Y21kLT5kZWYgPT0gTlVMTCkKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIFN5bnRheDogQUxURVIg Q09MVU1OICV7Y29sdW1ufUkgRFJPUCBERUZBVUxUCisJCQkJCSAqLworCQkJCQlwdXNoSnNvbmJW YWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCQkJCQluZXdfanNvbmJfVkEo c3RhdGUsIDMsCisJCQkJCQkJCSAiZm10IiwgamJ2U3RyaW5nLAorCQkJCQkJCQkgIkFMVEVSIENP TFVNTiAle2NvbHVtbn1JIERST1AgREVGQVVMVCIsCisJCQkJCQkJCSAidHlwZSIsIGpidlN0cmlu ZywgImRyb3AgZGVmYXVsdCIsCisJCQkJCQkJCSAiY29sdW1uIiwgamJ2U3RyaW5nLCBzdWJjbWQt Pm5hbWUpOworCQkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxM KTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJTGlzdAkgICAqZHBjb250ZXh0X3JlbDsK KwkJCQkJSGVhcFR1cGxlCWF0dHJ0dXA7CisJCQkJCUF0dHJOdW1iZXIJYXR0bm87CisKKwkJCQkJ ZHBjb250ZXh0X3JlbCA9IGRlcGFyc2VfY29udGV4dF9mb3IoCisJCQkJCQkJCQkJCQkJCVJlbGF0 aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksCisJCQkJCQkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsaWQo cmVsKSk7CisJCQkJCWF0dHJ0dXAgPSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUoUmVsYXRpb25HZXRS ZWxpZChyZWwpLAorCQkJCQkJCQkJCQkJCXN1YmNtZC0+bmFtZSk7CisJCQkJCWF0dG5vID0gKChG b3JtX3BnX2F0dHJpYnV0ZSkgR0VUU1RSVUNUKGF0dHJ0dXApKS0+YXR0bnVtOworCisJCQkJCS8q CisJCQkJCSAqIFN5bnRheDogQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIERFRkFVTFQKKwkJ CQkJICogJXtkZWZpbml0aW9ufXMKKwkJCQkJICovCisJCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0 ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisKKwkJCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCA0 LAorCQkJCQkJCQkgImZtdCIsIGpidlN0cmluZywKKwkJCQkJCQkJICJBTFRFUiBDT0xVTU4gJXtj b2x1bW59SSBTRVQgREVGQVVMVCIKKwkJCQkJCQkJICIgJXtkZWZpbml0aW9ufXMiLAorCQkJCQkJ CQkgInR5cGUiLCBqYnZTdHJpbmcsICJzZXQgZGVmYXVsdCIsCisJCQkJCQkJCSAiY29sdW1uIiwg amJ2U3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJCSAiZGVmaW5pdGlvbiIsIGpidlN0cmlu ZywKKwkJCQkJCQkJIHJlbGF0aW9uX2dldF9jb2x1bW5fZGVmYXVsdChyZWwsIGF0dG5vLAorCQkJ CQkJCQkJCQkJCQkJIGRwY29udGV4dF9yZWwpKTsKKworCQkJCQlwdXNoSnNvbmJWYWx1ZSgmc3Rh dGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQkJUmVsZWFzZVN5c0NhY2hlKGF0dHJ0dXAp OworCQkJCX0KKworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BOb3ROdWxsOgorCisJCQkJ LyoKKwkJCQkgKiBTeW50YXg6IEFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgTk9UIE5VTEwK KwkJCQkgKi8KKwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5V TEwpOworCQkJCW5ld19qc29uYl9WQShzdGF0ZSwgMywKKwkJCQkJCQkgImZtdCIsIGpidlN0cmlu ZywKKwkJCQkJCQkgIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgTk9UIE5VTEwiLAorCQkJ CQkJCSAidHlwZSIsIGpidlN0cmluZywgImRyb3Agbm90IG51bGwiLAorCQkJCQkJCSAiY29sdW1u IiwgamJ2U3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwg V0pCX0VORF9PQkpFQ1QsIE5VTEwpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0ZvcmNlUm93 U2VjdXJpdHk6CisKKwkJCQkvKgorCQkJCSAqIFN5bnRheDogRk9SQ0UgUk9XIExFVkVMIFNFQ1VS SVRZCisJCQkJICovCisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNU LCBOVUxMKTsKKwkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDEsICJmbXQiLCBqYnZTdHJpbmcsCisJ CQkJCQkJICJGT1JDRSBST1cgTEVWRUwgU0VDVVJJVFkiKTsKKwkJCQlwdXNoSnNvbmJWYWx1ZSgm c3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9O b0ZvcmNlUm93U2VjdXJpdHk6CisKKwkJCQkvKgorCQkJCSAqIFN5bnRheDogTk8gRk9SQ0UgUk9X IExFVkVMIFNFQ1VSSVRZCisJCQkJICovCisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJf QkVHSU5fT0JKRUNULCBOVUxMKTsKKwkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDEsICJmbXQiLCBq YnZTdHJpbmcsCisJCQkJCQkJICJOTyBGT1JDRSBST1cgTEVWRUwgU0VDVVJJVFkiKTsKKwkJCQlw dXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9TZXROb3ROdWxsOgorCisJCQkJLyoKKwkJCQkgKiBTeW50YXg6IEFMVEVS IENPTFVNTiAle2NvbHVtbn1JIFNFVCBOT1QgTlVMTAorCQkJCSAqLworCQkJCXB1c2hKc29uYlZh bHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJCQkJbmV3X2pzb25iX1ZBKHN0 YXRlLCAzLAorCQkJCQkJCSAiZm10IiwgamJ2U3RyaW5nLAorCQkJCQkJCSAiQUxURVIgQ09MVU1O ICV7Y29sdW1ufUkgU0VUIE5PVCBOVUxMIiwKKwkJCQkJCQkgInR5cGUiLCBqYnZTdHJpbmcsICJz ZXQgbm90IG51bGwiLAorCQkJCQkJCSAiY29sdW1uIiwgamJ2U3RyaW5nLCBzdWJjbWQtPm5hbWUp OworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworCQkJ CWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BFeHByZXNzaW9uOgorCQkJCXsKKwkJCQkJU3RyaW5n SW5mb0RhdGEgZm10U3ViOworCisJCQkJCWluaXRTdHJpbmdJbmZvKCZmbXRTdWIpOworCisJCQkJ CS8qCisJCQkJCSAqIFN5bnRheDogQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJPUCBFWFBSRVNT SU9OCisJCQkJCSAqICV7aWZfZXhpc3RzfXMKKwkJCQkJICovCisJCQkJCXB1c2hKc29uYlZhbHVl KCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJCQkJCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoJmZtdFN1YiwgIkFMVEVSIENPTFVNTiIKKwkJCQkJCQkJCQkgICAiICV7Y29sdW1ufUkg RFJPUCBFWFBSRVNTSU9OIik7CisJCQkJCW5ld19qc29uYl9WQShzdGF0ZSwgMiwKKwkJCQkJCQkJ ICJ0eXBlIiwgamJ2U3RyaW5nLCAiZHJvcCBleHByZXNzaW9uIiwKKwkJCQkJCQkJICJjb2x1bW4i LCBqYnZTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJaWYgKHN1YmNtZC0+bWlzc2luZ19v aykKKwkJCQkJeworCQkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3ViLCAiICV7aWZf ZXhpc3RzfXMiKTsKKwkJCQkJCW5ld19qc29uYl9WQShzdGF0ZSwgMSwKKwkJCQkJCQkJCSAiaWZf ZXhpc3RzIiwgamJ2U3RyaW5nLCAiSUYgRVhJU1RTIik7CisJCQkJCX0KKworCQkJCQkvKiBXZSBo YXZlIGZ1bGwgZm10IGJ5IG5vdywgc28gYWRkIGpzb25iIGVsZW1lbnQgZm9yIHRoYXQgKi8KKwkJ CQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLCAiZm10IiwgamJ2U3RyaW5nLCBmbXRTdWIuZGF0YSk7 CisJCQkJCXBmcmVlKGZtdFN1Yi5kYXRhKTsKKworCQkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUs IFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQljYXNlIEFU X1NldFN0YXRpc3RpY3M6CisJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgSW50ZWdlcikpOwor CisJCQkJLyoKKwkJCQkgKiBTeW50YXg6IEFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBTVEFU SVNUSUNTCisJCQkJICogJXtzdGF0aXN0aWNzfW4KKwkJCQkgKi8KKwkJCQlwdXNoSnNvbmJWYWx1 ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCQkJCW5ld19qc29uYl9WQShzdGF0 ZSwgNCwKKwkJCQkJCQkgImZtdCIsIGpidlN0cmluZywKKwkJCQkJCQkgIkFMVEVSIENPTFVNTiAl e2NvbHVtbn1JIFNFVCBTVEFUSVNUSUNTIgorCQkJCQkJCSAiICV7c3RhdGlzdGljc31uIiwKKwkJ CQkJCQkgInR5cGUiLCBqYnZTdHJpbmcsICJzZXQgc3RhdGlzdGljcyIsCisJCQkJCQkJICJjb2x1 bW4iLCBqYnZTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkgInN0YXRpc3RpY3MiLCBqYnZO dW1lcmljLAorCQkJCQkJCSBpbnRWYWwoKEludGVnZXIgKikgc3ViY21kLT5kZWYpKTsKKwkJCQlw dXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9TZXRPcHRpb25zOgorCQkJY2FzZSBBVF9SZXNldE9wdGlvbnM6CisKKwkJ CQkvKgorCQkJCSAqIFN5bnRheDogQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgUkVTRVR8U0VUICgl e29wdGlvbnM6LCB9cykKKwkJCQkgKi8KKwkJCQlkZXBhcnNlX0NvbHVtblNldE9wdGlvbnMoc3Rh dGUsIHN1YmNtZCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0U3RvcmFnZToKKwkJCQlB c3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBTdHJpbmcpKTsKKworCQkJCS8qCisJCQkJICogU3ludGF4 OiBBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgU1RPUkFHRSAle3N0b3JhZ2V9cworCQkJCSAq LworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJ CQkJbmV3X2pzb25iX1ZBKHN0YXRlLCA0LAorCQkJCQkJCSAiZm10IiwgamJ2U3RyaW5nLAorCQkJ CQkJCSAiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIFNUT1JBR0UiCisJCQkJCQkJICIgJXtz dG9yYWdlfXMiLAorCQkJCQkJCSAidHlwZSIsIGpidlN0cmluZywgInNldCBzdG9yYWdlIiwKKwkJ CQkJCQkgImNvbHVtbiIsIGpidlN0cmluZywgc3ViY21kLT5uYW1lLAorCQkJCQkJCSAic3RvcmFn ZSIsIGpidlN0cmluZywKKwkJCQkJCQkgc3RyVmFsKChTdHJpbmcgKikgc3ViY21kLT5kZWYpKTsK KwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQli cmVhazsKKworCQkJY2FzZSBBVF9TZXRDb21wcmVzc2lvbjoKKwkJCQlBc3NlcnQoSXNBKHN1YmNt ZC0+ZGVmLCBTdHJpbmcpKTsKKworCQkJCS8qCisJCQkJICogU3ludGF4OiBBTFRFUiBDT0xVTU4g JXtjb2x1bW59SSBTRVQgQ09NUFJFU1NJT04KKwkJCQkgKiAle2NvbXByZXNzaW9uX21ldGhvZH1z CisJCQkJICovCisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBO VUxMKTsKKwkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDQsCisJCQkJCQkJICJmbXQiLCBqYnZTdHJp bmcsCisJCQkJCQkJICJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgQ09NUFJFU1NJT04iCisJ CQkJCQkJICIgJXtjb21wcmVzc2lvbl9tZXRob2R9cyIsCisJCQkJCQkJICJ0eXBlIiwgamJ2U3Ry aW5nLCAic2V0IGNvbXByZXNzaW9uIiwKKwkJCQkJCQkgImNvbHVtbiIsIGpidlN0cmluZywgc3Vi Y21kLT5uYW1lLAorCQkJCQkJCSAiY29tcHJlc3Npb25fbWV0aG9kIiwgamJ2U3RyaW5nLAorCQkJ CQkJCSBzdHJWYWwoKFN0cmluZyAqKSBzdWJjbWQtPmRlZikpOworCQkJCXB1c2hKc29uYlZhbHVl KCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X0Ryb3BDb2x1bW46CisJCQkJeworCQkJCQlTdHJpbmdJbmZvRGF0YSBmbXRTdWI7CisKKwkJCQkJ aW5pdFN0cmluZ0luZm8oJmZtdFN1Yik7CisKKwkJCQkJLyoKKwkJCQkJICogU3ludGF4OiBEUk9Q IENPTFVNTiAle2lmX2V4aXN0c31zICV7Y29sdW1ufUkKKwkJCQkJICogJXtjYXNjYWRlfXMKKwkJ CQkJICovCisJCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVM TCk7CisKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3ViLCAiRFJPUCBDT0xVTU4i KTsKKwkJCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLCAidHlwZSIsIGpidlN0cmluZywgImRyb3Ag Y29sdW1uIik7CisKKwkJCQkJaWYgKHN1YmNtZC0+bWlzc2luZ19vaykKKwkJCQkJeworCQkJCQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3ViLCAiICV7aWZfZXhpc3RzfXMiKTsKKwkJCQkJ CW5ld19qc29uYl9WQShzdGF0ZSwgMSwKKwkJCQkJCQkJCSAiaWZfZXhpc3RzIiwgamJ2U3RyaW5n LCAiSUYgRVhJU1RTIik7CisJCQkJCX0KKworCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZm bXRTdWIsICIgJXtjb2x1bW59SSIpOworCQkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDEsICJjb2x1 bW4iLCBqYnZTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJaWYgKHN1YmNtZC0+YmVoYXZp b3IgPT0gRFJPUF9DQVNDQURFKQorCQkJCQl7CisJCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KCZmbXRTdWIsICIgJXtjYXNjYWRlfXMiKTsKKwkJCQkJCW5ld19qc29uYl9WQShzdGF0ZSwgMSwK KwkJCQkJCQkJCSAiY2FzY2FkZSIsIGpidlN0cmluZywgIkNBU0NBREUiKTsKKwkJCQkJfQorCisJ CQkJCS8qIFdlIGhhdmUgZnVsbCBmbXQgYnkgbm93LCBzbyBhZGQganNvbmIgZWxlbWVudCBmb3Ig dGhhdCAqLworCQkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDEsICJmbXQiLCBqYnZTdHJpbmcsIGZt dFN1Yi5kYXRhKTsKKwkJCQkJcGZyZWUoZm10U3ViLmRhdGEpOworCisJCQkJCXB1c2hKc29uYlZh bHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworCisJCQkJCWJyZWFrOworCQkJCX0K KwkJCWNhc2UgQVRfQWRkSW5kZXg6CisJCQkJeworCQkJCQlPaWQJCQlpZHhPaWQgPSBzdWItPmFk ZHJlc3Mub2JqZWN0SWQ7CisJCQkJCUluZGV4U3RtdCAgKmlzdG10IFBHX1VTRURfRk9SX0FTU0VS VFNfT05MWSA9CisJCQkJCQkoSW5kZXhTdG10ICopIHN1YmNtZC0+ZGVmOworCQkJCQlSZWxhdGlv bglpZHg7CisJCQkJCWNvbnN0IGNoYXIgKmlkeG5hbWU7CisJCQkJCU9pZAkJCWNvbnN0ck9pZDsK KworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJbmRleFN0bXQpKTsKKwkJCQkJQXNzZXJ0 KGlzdG10LT5pc2NvbnN0cmFpbnQpOworCisJCQkJCWlkeCA9IHJlbGF0aW9uX29wZW4oaWR4T2lk LCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCQlpZHhuYW1lID0gUmVsYXRpb25HZXRSZWxhdGlvbk5h bWUoaWR4KTsKKworCQkJCQljb25zdHJPaWQgPSBnZXRfcmVsYXRpb25fY29uc3RyYWludF9vaWQo CisJCQkJCQkJCQkJCQkJCQljbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCwKKwkJCQkJCQkJCQkJ CQkJCWlkeG5hbWUsIGZhbHNlKTsKKworCQkJCQkvKgorCQkJCQkgKiBTeW50YXg6IEFERCBDT05T VFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zCisJCQkJCSAqLworCQkJCQlwdXNoSnNvbmJW YWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCisJCQkJCW5ld19qc29uYl9W QShzdGF0ZSwgNCwKKwkJCQkJCQkJICJmbXQiLCBqYnZTdHJpbmcsCisJCQkJCQkJCSAiQUREIENP TlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLAorCQkJCQkJCQkgInR5cGUiLCBqYnZT dHJpbmcsICJhZGQgY29uc3RyYWludCIsCisJCQkJCQkJCSAibmFtZSIsIGpidlN0cmluZywgaWR4 bmFtZSwKKwkJCQkJCQkJICJkZWZpbml0aW9uIiwgamJ2U3RyaW5nLAorCQkJCQkJCQkgcGdfZ2V0 X2NvbnN0cmFpbnRkZWZfc3RyaW5nKGNvbnN0ck9pZCkpOworCisJCQkJCXB1c2hKc29uYlZhbHVl KCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworCisJCQkJCXJlbGF0aW9uX2Nsb3NlKGlk eCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX0FkZENv bnN0cmFpbnQ6CisJCQkJeworCQkJCQkvKiBYWFggbmVlZCB0byBzZXQgdGhlICJyZWN1cnNlIiBi aXQgc29tZXdoZXJlPyAqLworCQkJCQlPaWQJCQljb25zdHJPaWQgPSBzdWItPmFkZHJlc3Mub2Jq ZWN0SWQ7CisKKwkJCQkJLyogU2tpcCBhZGRpbmcgY29uc3RyYWludCBmb3IgaW5oZXJpdHMgdGFi bGUgc3ViIGNvbW1hbmQgKi8KKwkJCQkJaWYgKCFPaWRJc1ZhbGlkKGNvbnN0ck9pZCkpCisJCQkJ CQljb250aW51ZTsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBDb25zdHJhaW50KSk7 CisKKwkJCQkJLyoKKwkJCQkJICogU3ludGF4OiBBREQgQ09OU1RSQUlOVCAle25hbWV9SSAle2Rl ZmluaXRpb259cworCQkJCQkgKi8KKwkJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVH SU5fT0JKRUNULCBOVUxMKTsKKwkJCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCA0LAorCQkJCQkJCQkg ImZtdCIsIGpidlN0cmluZywKKwkJCQkJCQkJICJBREQgQ09OU1RSQUlOVCAle25hbWV9SSAle2Rl ZmluaXRpb259cyIsCisJCQkJCQkJCSAidHlwZSIsIGpidlN0cmluZywgImFkZCBjb25zdHJhaW50 IiwKKwkJCQkJCQkJICJuYW1lIiwgamJ2U3RyaW5nLCBnZXRfY29uc3RyYWludF9uYW1lKGNvbnN0 ck9pZCksCisJCQkJCQkJCSAiZGVmaW5pdGlvbiIsIGpidlN0cmluZywKKwkJCQkJCQkJIHBnX2dl dF9jb25zdHJhaW50ZGVmX3N0cmluZyhjb25zdHJPaWQpKTsKKwkJCQkJcHVzaEpzb25iVmFsdWUo JnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJ CQljYXNlIEFUX0FsdGVyQ29uc3RyYWludDoKKwkJCQl7CisJCQkJCU9pZAkJCWNvbk9pZCA9IHN1 Yi0+YWRkcmVzcy5vYmplY3RJZDsKKwkJCQkJQ29uc3RyYWludCAqYyA9IChDb25zdHJhaW50ICop IHN1YmNtZC0+ZGVmOworCisJCQkJCS8qIElmIG5vIGNvbnN0cmFpbnQgd2FzIGFsdGVyZWQsIHNp bGVudGx5IHNraXAgaXQgKi8KKwkJCQkJaWYgKCFPaWRJc1ZhbGlkKGNvbk9pZCkpCisJCQkJCQli cmVhazsKKworCQkJCQlBc3NlcnQoSXNBKGMsIENvbnN0cmFpbnQpKTsKKworCQkJCQkvKgorCQkJ CQkgKiBTeW50YXg6IEFMVEVSIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZlcnJhYmxlfXMKKwkJ CQkJICogJXtpbml0X2RlZmVycmVkfXMKKwkJCQkJICovCisJCQkJCXB1c2hKc29uYlZhbHVlKCZz dGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJCQkJCW5ld19qc29uYl9WQShzdGF0ZSwg NSwKKwkJCQkJCQkJICJmbXQiLCBqYnZTdHJpbmcsCisJCQkJCQkJCSAiQUxURVIgQ09OU1RSQUlO VCAle25hbWV9SSAle2RlZmVycmFibGV9cyIKKwkJCQkJCQkJICIgJXtpbml0X2RlZmVycmVkfXMi LAorCQkJCQkJCQkgInR5cGUiLCBqYnZTdHJpbmcsICJhbHRlciBjb25zdHJhaW50IiwKKwkJCQkJ CQkJICJuYW1lIiwgamJ2U3RyaW5nLCBnZXRfY29uc3RyYWludF9uYW1lKGNvbk9pZCksCisJCQkJ CQkJCSAiZGVmZXJyYWJsZSIsIGpidlN0cmluZywKKwkJCQkJCQkJIGMtPmRlZmVycmFibGUgPyAi REVGRVJSQUJMRSIgOiAiTk9UIERFRkVSUkFCTEUiLAorCQkJCQkJCQkgImluaXRfZGVmZXJyZWQi LCBqYnZTdHJpbmcsCisJCQkJCQkJCSBjLT5pbml0ZGVmZXJyZWQgPyAiSU5JVElBTExZIERFRkVS UkVEIiA6CisJCQkJCQkJCSAiSU5JVElBTExZIElNTUVESUFURSIpOworCQkJCQlwdXNoSnNvbmJW YWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQl9CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfVmFsaWRhdGVDb25zdHJhaW50OgorCisJCQkJLyoKKwkJCQkgKiBTeW50YXg6 IFZBTElEQVRFIENPTlNUUkFJTlQgJXtjb25zdHJhaW50fUkKKwkJCQkgKi8KKwkJCQlwdXNoSnNv bmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCQkJCW5ld19qc29uYl9W QShzdGF0ZSwgMywKKwkJCQkJCQkgImZtdCIsIGpidlN0cmluZywKKwkJCQkJCQkgIlZBTElEQVRF IENPTlNUUkFJTlQgJXtjb25zdHJhaW50fUkiLAorCQkJCQkJCSAidHlwZSIsIGpidlN0cmluZywg InZhbGlkYXRlIGNvbnN0cmFpbnQiLAorCQkJCQkJCSAiY29uc3RyYWludCIsIGpidlN0cmluZywg c3ViY21kLT5uYW1lKTsKKwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNU LCBOVUxMKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wQ29uc3RyYWludDoKKwkJCQl7 CisJCQkJCVN0cmluZ0luZm9EYXRhIGZtdFN1YjsKKworCQkJCQlpbml0U3RyaW5nSW5mbygmZm10 U3ViKTsKKworCQkJCQkvKgorCQkJCQkgKiBTeW50YXg6IERST1AgQ09OU1RSQUlOVCAle2lmX2V4 aXN0c31zICV7Y29uc3RyYWludH1JCisJCQkJCSAqICV7Y2FzY2FkZX1zCisJCQkJCSAqLworCQkJ CQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCQkJCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdWIsICJEUk9QIENPTlNUUkFJTlQiKTsKKwkJCQkJ bmV3X2pzb25iX1ZBKHN0YXRlLCAxLCAidHlwZSIsIGpidlN0cmluZywgImRyb3AgY29uc3RyYWlu dCIpOworCisJCQkJCWlmIChzdWJjbWQtPm1pc3Npbmdfb2spCisJCQkJCXsKKwkJCQkJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoJmZtdFN1YiwgIiAle2lmX2V4aXN0c31zIik7CisJCQkJCQluZXdf anNvbmJfVkEoc3RhdGUsIDEsCisJCQkJCQkJCQkgImlmX2V4aXN0cyIsIGpidlN0cmluZywgIklG IEVYSVNUUyIpOworCQkJCQl9CisKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3Vi LCAiICV7Y29uc3RyYWludH1JIik7CisJCQkJCW5ld19qc29uYl9WQShzdGF0ZSwgMSwKKwkJCQkJ CQkJICJjb25zdHJhaW50IiwgamJ2U3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJCQkJCWlmIChz dWJjbWQtPmJlaGF2aW9yID09IERST1BfQ0FTQ0FERSkKKwkJCQkJeworCQkJCQkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmZm10U3ViLCAiICV7Y2FzY2FkZX1zIik7CisJCQkJCQluZXdfanNvbmJf VkEoc3RhdGUsIDEsICJjYXNjYWRlIiwgamJ2U3RyaW5nLCAiQ0FTQ0FERSIpOworCQkJCQl9CisK KwkJCQkJLyogV2UgaGF2ZSBmdWxsIGZtdCBieSBub3csIHNvIGFkZCBqc29uYiBlbGVtZW50IGZv ciB0aGF0ICovCisJCQkJCW5ld19qc29uYl9WQShzdGF0ZSwgMSwgImZtdCIsIGpidlN0cmluZywg Zm10U3ViLmRhdGEpOworCQkJCQlwZnJlZShmbXRTdWIuZGF0YSk7CisKKwkJCQkJcHVzaEpzb25i VmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisJCQkJfQorCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX0FsdGVyQ29sdW1uVHlwZToKKwkJCQl7CisJCQkJCVR1cGxlRGVzYwl0dXBk ZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOworCQkJCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQ7 CisJCQkJCUNvbHVtbkRlZiAgKmRlZjsKKwkJCQkJU3RyaW5nSW5mb0RhdGEgZm10U3ViOworCisJ CQkJCWluaXRTdHJpbmdJbmZvKCZmbXRTdWIpOworCisJCQkJCWF0dCA9ICYodHVwZGVzYy0+YXR0 cnNbc3ViLT5hZGRyZXNzLm9iamVjdFN1YklkIC0gMV0pOworCQkJCQlkZWYgPSAoQ29sdW1uRGVm ICopIHN1YmNtZC0+ZGVmOworCQkJCQlBc3NlcnQoSXNBKGRlZiwgQ29sdW1uRGVmKSk7CisKKwkJ CQkJLyoKKwkJCQkJICogU3ludGF4OiBBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgREFUQSBU WVBFCisJCQkJCSAqICV7ZGF0YXR5cGV9VCAle2NvbGxhdGlvbn1zICV7dXNpbmd9cyB3aGVyZSB1 c2luZzogVVNJTkcKKwkJCQkJICogJXtleHByZXNzaW9ufXMKKwkJCQkJICovCisJCQkJCXB1c2hK c29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJCQkJCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoJmZtdFN1YiwgIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIgorCQkJCQkJ CQkJCSAgICIgU0VUIERBVEEgVFlQRSAle2RhdGF0eXBlfVQiKTsKKwkJCQkJbmV3X2pzb25iX1ZB KHN0YXRlLCAyLAorCQkJCQkJCQkgInR5cGUiLCBqYnZTdHJpbmcsICJhbHRlciBjb2x1bW4gdHlw ZSIsCisJCQkJCQkJCSAiY29sdW1uIiwgamJ2U3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJCQkJ CW5ld19qc29uYl9mb3JfdHlwZShzdGF0ZSwgImRhdGF0eXBlIiwKKwkJCQkJCQkJCSAgIGF0dC0+ YXR0dHlwaWQsIGF0dC0+YXR0dHlwbW9kKTsKKworCQkJCQkvKiBBZGQgYSBDT0xMQVRFIGNsYXVz ZSwgaWYgbmVlZGVkICovCisJCQkJCWlmIChPaWRJc1ZhbGlkKGF0dC0+YXR0Y29sbGF0aW9uKSkK KwkJCQkJeworCQkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3ViLCAiICV7Y29sbGF0 aW9ufXMiKTsKKwkJCQkJCWluc2VydF9jb2xsYXRlX29iamVjdChzdGF0ZSwgImNvbGxhdGlvbiIs CisJCQkJCQkJCQkJCSAgIkNPTExBVEUgJXtuYW1lfUQiLAorCQkJCQkJCQkJCQkgIENvbGxhdGlv blJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCSAgYXR0LT5hdHRjb2xsYXRpb24sICJuYW1lIik7CisJ CQkJCX0KKworCQkJCQkvKgorCQkJCQkgKiBJZiB0aGVyZSdzIGEgVVNJTkcgY2xhdXNlLCB0cmFu c2Zvcm1BbHRlclRhYmxlU3RtdCByYW4KKwkJCQkJICogaXQgdGhyb3VnaCB0cmFuc2Zvcm1FeHBy IGFuZCBzdG9yZWQgdGhlIHJlc3VsdGluZyBub2RlCisJCQkJCSAqIGluIGNvb2tlZF9kZWZhdWx0 LCB3aGljaCB3ZSBjYW4gdXNlIGhlcmUuCisJCQkJCSAqLworCQkJCQlpZiAoZGVmLT5yYXdfZGVm YXVsdCkKKwkJCQkJeworCQkJCQkJRGF0dW0JCWRlcGFyc2VkOworCQkJCQkJY2hhcgkgICAqZGVm ZXhwcjsKKwkJCQkJCUxpc3QJICAgKmV4cHJzID0gTklMOworCisJCQkJCQlleHBycyA9IGxhcHBl bmQoZXhwcnMsIGRlZi0+Y29va2VkX2RlZmF1bHQpOworCQkJCQkJZGVmZXhwciA9IG5vZGVUb1N0 cmluZyhkZWYtPmNvb2tlZF9kZWZhdWx0KTsKKwkJCQkJCWRlcGFyc2VkID0gRGlyZWN0RnVuY3Rp b25DYWxsMihwZ19nZXRfZXhwciwKKwkJCQkJCQkJCQkJCQkgICBDU3RyaW5nR2V0VGV4dERhdHVt KGRlZmV4cHIpLAorCQkJCQkJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsaWQocmVsKSk7CisJCQkJ CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdWIsICIgJXt1c2luZ31zIik7CisJCQkJCQlp bnNlcnRfanNvbmJfa2V5KHN0YXRlLCAidXNpbmciKTsKKwkJCQkJCXB1c2hKc29uYlZhbHVlKCZz dGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJCQkJCQluZXdfanNvbmJfVkEoc3RhdGUs IDIsCisJCQkJCQkJCQkgImZtdCIsIGpidlN0cmluZywgIlVTSU5HICV7ZXhwcmVzc2lvbn1zIiwK KwkJCQkJCQkJCSAiZXhwcmVzc2lvbiIsIGpidlN0cmluZywKKwkJCQkJCQkJCSBUZXh0RGF0dW1H ZXRDU3RyaW5nKGRlcGFyc2VkKSk7CisJCQkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9F TkRfT0JKRUNULCBOVUxMKTsKKwkJCQkJfQorCisJCQkJCS8qIFdlIGhhdmUgZnVsbCBmbXQgYnkg bm93LCBzbyBhZGQganNvbmIgZWxlbWVudCBmb3IgdGhhdCAqLworCQkJCQluZXdfanNvbmJfVkEo c3RhdGUsIDEsICJmbXQiLCBqYnZTdHJpbmcsIGZtdFN1Yi5kYXRhKTsKKworCQkJCQlwZnJlZShm bXRTdWIuZGF0YSk7CisJCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1Qs IE5VTEwpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9DaGFuZ2VPd25lcjoKKwor CQkJCS8qCisJCQkJICogU3ludGF4OiBPV05FUiBUTyAle293bmVyfUkKKwkJCQkgKi8KKwkJCQlw dXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCQkJCW5ld19q c29uYl9WQShzdGF0ZSwgMywKKwkJCQkJCQkgImZtdCIsIGpidlN0cmluZywgIk9XTkVSIFRPICV7 b3duZXJ9SSIsCisJCQkJCQkJICJ0eXBlIiwgamJ2U3RyaW5nLCAiY2hhbmdlIG93bmVyIiwKKwkJ CQkJCQkgIm93bmVyIiwgamJ2U3RyaW5nLAorCQkJCQkJCSBnZXRfcm9sZXNwZWNfbmFtZShzdWJj bWQtPm5ld293bmVyKSk7CisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVD VCwgTlVMTCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQ2x1c3Rlck9uOgorCisJCQkJLyoK KwkJCQkgKiBTeW50YXg6IENMVVNURVIgT04gJXtpbmRleH1JCisJCQkJICovCisJCQkJcHVzaEpz b25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKwkJCQluZXdfanNvbmJf VkEoc3RhdGUsIDMsCisJCQkJCQkJICJmbXQiLCBqYnZTdHJpbmcsICJDTFVTVEVSIE9OICV7aW5k ZXh9SSIsCisJCQkJCQkJICJ0eXBlIiwgamJ2U3RyaW5nLCAiY2x1c3RlciBvbiIsCisJCQkJCQkJ ICJpbmRleCIsIGpidlN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlwdXNoSnNvbmJWYWx1ZSgm c3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQlicmVhazsKKworCisJCQljYXNlIEFU X0Ryb3BDbHVzdGVyOgorCisJCQkJLyoKKwkJCQkgKiBTeW50YXg6IFNFVCBXSVRIT1VUIENMVVNU RVIKKwkJCQkgKi8KKwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1Qs IE5VTEwpOworCQkJCW5ld19qc29uYl9WQShzdGF0ZSwgMiwKKwkJCQkJCQkgImZtdCIsIGpidlN0 cmluZywgIlNFVCBXSVRIT1VUIENMVVNURVIiLAorCQkJCQkJCSAidHlwZSIsIGpidlN0cmluZywg InNldCB3aXRob3V0IGNsdXN0ZXIiKTsKKwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9F TkRfT0JKRUNULCBOVUxMKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRMb2dnZWQ6CisK KwkJCQkvKgorCQkJCSAqIFN5bnRheDogU0VUIExPR0dFRAorCQkJCSAqLworCQkJCXB1c2hKc29u YlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJCQkJbmV3X2pzb25iX1ZB KHN0YXRlLCAyLAorCQkJCQkJCSAiZm10IiwgamJ2U3RyaW5nLCAiU0VUIExPR0dFRCIsCisJCQkJ CQkJICJ0eXBlIiwgamJ2U3RyaW5nLCAic2V0IGxvZ2dlZCIpOworCQkJCXB1c2hKc29uYlZhbHVl KCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X1NldFVuTG9nZ2VkOgorCisJCQkJLyoKKwkJCQkgKiBTeW50YXg6IFNFVCBVTkxPR0dFRAorCQkJ CSAqLworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7 CisJCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAyLAorCQkJCQkJCSAiZm10IiwgamJ2U3RyaW5nLCAi U0VUIFVOTE9HR0VEIiwKKwkJCQkJCQkgInR5cGUiLCBqYnZTdHJpbmcsICJzZXQgdW5sb2dnZWQi KTsKKwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJ CQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wT2lkczoKKworCQkJCS8qCisJCQkJICogU3ludGF4 OiBTRVQgV0lUSE9VVCBPSURTCisJCQkJICovCisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBX SkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKwkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDIsCisJCQkJ CQkJICJmbXQiLCBqYnZTdHJpbmcsICJTRVQgV0lUSE9VVCBPSURTIiwKKwkJCQkJCQkgInR5cGUi LCBqYnZTdHJpbmcsICJzZXQgd2l0aG91dCBvaWRzIik7CisJCQkJcHVzaEpzb25iVmFsdWUoJnN0 YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0 QWNjZXNzTWV0aG9kOgorCisJCQkJLyoKKwkJCQkgKiBTeW50YXg6IFNFVCBBQ0NFU1MgTUVUSE9E ICV7YWNjZXNzX21ldGhvZH1JCisJCQkJICovCisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBX SkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKwkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDMsCisJCQkJ CQkJICJmbXQiLCBqYnZTdHJpbmcsCisJCQkJCQkJICJTRVQgQUNDRVNTIE1FVEhPRCAle2FjY2Vz c19tZXRob2R9SSIsCisJCQkJCQkJICJ0eXBlIiwgamJ2U3RyaW5nLCAic2V0IGFjY2VzcyBtZXRo b2QiLAorCQkJCQkJCSAiYWNjZXNzX21ldGhvZCIsIGpidlN0cmluZywgc3ViY21kLT5uYW1lKTsK KwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQli cmVhazsKKworCQkJY2FzZSBBVF9TZXRUYWJsZVNwYWNlOgorCisJCQkJLyoKKwkJCQkgKiBTeW50 YXg6IFNFVCBUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JCisJCQkJICovCisJCQkJcHVzaEpzb25i VmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKwkJCQluZXdfanNvbmJfVkEo c3RhdGUsIDMsCisJCQkJCQkJICJmbXQiLCBqYnZTdHJpbmcsICJTRVQgVEFCTEVTUEFDRSAle3Rh Ymxlc3BhY2V9SSIsCisJCQkJCQkJICJ0eXBlIiwgamJ2U3RyaW5nLCAic2V0IHRhYmxlc3BhY2Ui LAorCQkJCQkJCSAidGFibGVzcGFjZSIsIGpidlN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlw dXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9TZXRSZWxPcHRpb25zOgorCQkJY2FzZSBBVF9SZXNldFJlbE9wdGlvbnM6 CisKKwkJCQkvKgorCQkJCSAqIFN5bnRheDogU0VUfFJFU0VUICgle29wdGlvbnM6LCB9cykKKwkJ CQkgKi8KKwkJCQlkZXBhcnNlX1JlbFNldE9wdGlvbnMoc3RhdGUsIHN1YmNtZCk7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlVHJpZzoKKworCQkJCS8qCisJCQkJICogU3ludGF4OiBF TkFCTEUgVFJJR0dFUiAle3RyaWdnZXJ9SQorCQkJCSAqLworCQkJCXB1c2hKc29uYlZhbHVlKCZz dGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAz LAorCQkJCQkJCSAiZm10IiwgamJ2U3RyaW5nLCAiRU5BQkxFIFRSSUdHRVIgJXt0cmlnZ2VyfUki LAorCQkJCQkJCSAidHlwZSIsIGpidlN0cmluZywgImVuYWJsZSB0cmlnZ2VyIiwKKwkJCQkJCQkg InRyaWdnZXIiLCBqYnZTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJcHVzaEpzb25iVmFsdWUo JnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf RW5hYmxlQWx3YXlzVHJpZzoKKworCQkJCS8qCisJCQkJICogU3ludGF4OiBFTkFCTEUgQUxXQVlT IFRSSUdHRVIgJXt0cmlnZ2VyfUkKKwkJCQkgKi8KKwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUs IFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCQkJCW5ld19qc29uYl9WQShzdGF0ZSwgMywKKwkJ CQkJCQkgImZtdCIsIGpidlN0cmluZywKKwkJCQkJCQkgIkVOQUJMRSBBTFdBWVMgVFJJR0dFUiAl e3RyaWdnZXJ9SSIsCisJCQkJCQkJICJ0eXBlIiwgamJ2U3RyaW5nLCAiZW5hYmxlIGFsd2F5cyB0 cmlnZ2VyIiwKKwkJCQkJCQkgInRyaWdnZXIiLCBqYnZTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJ CQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUmVwbGljYVRyaWc6CisKKwkJCQkvKgorCQkJCSAqIFN5 bnRheDogRU5BQkxFIFJFUExJQ0EgVFJJR0dFUiAle3RyaWdnZXJ9SQorCQkJCSAqLworCQkJCXB1 c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJCQkJbmV3X2pz b25iX1ZBKHN0YXRlLCAzLAorCQkJCQkJCSAiZm10IiwgamJ2U3RyaW5nLAorCQkJCQkJCSAiRU5B QkxFIFJFUExJQ0EgVFJJR0dFUiAle3RyaWdnZXJ9SSIsCisJCQkJCQkJICJ0eXBlIiwgamJ2U3Ry aW5nLCAiZW5hYmxlIHJlcGxpY2EgdHJpZ2dlciIsCisJCQkJCQkJICJ0cmlnZ2VyIiwgamJ2U3Ry aW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9P QkpFQ1QsIE5VTEwpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVUcmlnOgorCisJ CQkJLyoKKwkJCQkgKiBTeW50YXg6IERJU0FCTEUgVFJJR0dFUiAle3RyaWdnZXJ9SQorCQkJCSAq LworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJ CQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAzLAorCQkJCQkJCSAiZm10IiwgamJ2U3RyaW5nLCAiRElT QUJMRSBUUklHR0VSICV7dHJpZ2dlcn1JIiwKKwkJCQkJCQkgInR5cGUiLCBqYnZTdHJpbmcsICJk aXNhYmxlIHRyaWdnZXIiLAorCQkJCQkJCSAidHJpZ2dlciIsIGpidlN0cmluZywgc3ViY21kLT5u YW1lKTsKKwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVUcmlnQWxsOgorCisJCQkJLyoKKwkJCQkg KiBTeW50YXg6IEVOQUJMRSBUUklHR0VSIEFMTAorCQkJCSAqLworCQkJCXB1c2hKc29uYlZhbHVl KCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJCQkJbmV3X2pzb25iX1ZBKHN0YXRl LCAyLAorCQkJCQkJCSAiZm10IiwgamJ2U3RyaW5nLCAiRU5BQkxFIFRSSUdHRVIgQUxMIiwKKwkJ CQkJCQkgInR5cGUiLCBqYnZTdHJpbmcsICJlbmFibGUgdHJpZ2dlciBhbGwiKTsKKwkJCQlwdXNo SnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQlicmVhazsKKwor CQkJY2FzZSBBVF9EaXNhYmxlVHJpZ0FsbDoKKworCQkJCS8qCisJCQkJICogU3ludGF4OiBESVNB QkxFIFRSSUdHRVIgQUxMCisJCQkJICovCisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJf QkVHSU5fT0JKRUNULCBOVUxMKTsKKwkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDIsCisJCQkJCQkJ ICJmbXQiLCBqYnZTdHJpbmcsICJESVNBQkxFIFRSSUdHRVIgQUxMIiwKKwkJCQkJCQkgInR5cGUi LCBqYnZTdHJpbmcsICJkaXNhYmxlIHRyaWdnZXIgYWxsIik7CisJCQkJcHVzaEpzb25iVmFsdWUo JnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf RW5hYmxlVHJpZ1VzZXI6CisKKwkJCQkvKgorCQkJCSAqIFN5bnRheDogRU5BQkxFIFRSSUdHRVIg VVNFUgorCQkJCSAqLworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVD VCwgTlVMTCk7CisJCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAyLAorCQkJCQkJCSAiZm10IiwgamJ2 U3RyaW5nLCAiRU5BQkxFIFRSSUdHRVIgVVNFUiIsCisJCQkJCQkJICJ0eXBlIiwgamJ2U3RyaW5n LCAiZW5hYmxlIHRyaWdnZXIgdXNlciIpOworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pC X0VORF9PQkpFQ1QsIE5VTEwpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVUcmln VXNlcjoKKworCQkJCS8qCisJCQkJICogU3ludGF4OiBESVNBQkxFIFRSSUdHRVIgVVNFUgorCQkJ CSAqLworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7 CisJCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAyLAorCQkJCQkJCSAiZm10IiwgamJ2U3RyaW5nLCAi RElTQUJMRSBUUklHR0VSIFVTRVIiLAorCQkJCQkJCSAidHlwZSIsIGpidlN0cmluZywgImRpc2Fi bGUgdHJpZ2dlciB1c2VyIik7CisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09C SkVDVCwgTlVMTCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUnVsZToKKworCQkJ CS8qCisJCQkJICogU3ludGF4OiBFTkFCTEUgUlVMRSAle3J1bGV9SQorCQkJCSAqLworCQkJCXB1 c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJCQkJbmV3X2pz b25iX1ZBKHN0YXRlLCAzLAorCQkJCQkJCSAiZm10IiwgamJ2U3RyaW5nLCAiRU5BQkxFIFJVTEUg JXtydWxlfUkiLAorCQkJCQkJCSAidHlwZSIsIGpidlN0cmluZywgImVuYWJsZSBydWxlIiwKKwkJ CQkJCQkgInJ1bGUiLCBqYnZTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJcHVzaEpzb25iVmFs dWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug QVRfRW5hYmxlQWx3YXlzUnVsZToKKworCQkJCS8qCisJCQkJICogU3ludGF4OiBFTkFCTEUgQUxX QVlTIFJVTEUgJXtydWxlfUkKKwkJCQkgKi8KKwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdK Ql9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCQkJCW5ld19qc29uYl9WQShzdGF0ZSwgMywKKwkJCQkJ CQkgImZtdCIsIGpidlN0cmluZywgIkVOQUJMRSBBTFdBWVMgUlVMRSAle3J1bGV9SSIsCisJCQkJ CQkJICJ0eXBlIiwgamJ2U3RyaW5nLCAiZW5hYmxlIGFsd2F5cyBydWxlIiwKKwkJCQkJCQkgInJ1 bGUiLCBqYnZTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRl LCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxl UmVwbGljYVJ1bGU6CisKKwkJCQkvKgorCQkJCSAqIFN5bnRheDogRU5BQkxFIFJFUExJQ0EgUlVM RSAle3J1bGV9SQorCQkJCSAqLworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lO X09CSkVDVCwgTlVMTCk7CisJCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAzLAorCQkJCQkJCSAiZm10 IiwgamJ2U3RyaW5nLCAiRU5BQkxFIFJFUExJQ0EgUlVMRSAle3J1bGV9SSIsCisJCQkJCQkJICJ0 eXBlIiwgamJ2U3RyaW5nLCAiZW5hYmxlIHJlcGxpY2EgcnVsZSIsCisJCQkJCQkJICJydWxlIiwg amJ2U3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pC X0VORF9PQkpFQ1QsIE5VTEwpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVSdWxl OgorCisJCQkJLyoKKwkJCQkgKiBTeW50YXg6IERJU0FCTEUgUlVMRSAle3J1bGV9SQorCQkJCSAq LworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJ CQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAzLAorCQkJCQkJCSAiZm10IiwgamJ2U3RyaW5nLCAiRElT QUJMRSBSVUxFICV7cnVsZX1JIiwKKwkJCQkJCQkgInR5cGUiLCBqYnZTdHJpbmcsICJkaXNhYmxl IHJ1bGUiLAorCQkJCQkJCSAicnVsZSIsIGpidlN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlw dXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9BZGRJbmhlcml0OgorCisJCQkJLyoKKwkJCQkgKiBTeW50YXg6IElOSEVS SVQgJXtwYXJlbnR9RAorCQkJCSAqLworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JF R0lOX09CSkVDVCwgTlVMTCk7CisJCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAyLAorCQkJCQkJCSAi Zm10IiwgamJ2U3RyaW5nLCAiSU5IRVJJVCAle3BhcmVudH1EIiwKKwkJCQkJCQkgInR5cGUiLCBq YnZTdHJpbmcsICJpbmhlcml0Iik7CisJCQkJbmV3X2pzb25iX2Zvcl9xdWFsbmFtZV9pZChzdGF0 ZSwgUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCSAgc3ViLT5hZGRyZXNzLm9iamVjdElk LCAicGFyZW50IiwgdHJ1ZSk7CisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09C SkVDVCwgTlVMTCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcEluaGVyaXQ6CisKKwkJ CQkvKgorCQkJCSAqIFN5bnRheDogTk8gSU5IRVJJVCAle3BhcmVudH1ECisJCQkJICovCisJCQkJ cHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKwkJCQluZXdf anNvbmJfVkEoc3RhdGUsIDIsCisJCQkJCQkJICJmbXQiLCBqYnZTdHJpbmcsICJOTyBJTkhFUklU ICV7cGFyZW50fUQiLAorCQkJCQkJCSAidHlwZSIsIGpidlN0cmluZywgImRyb3AgaW5oZXJpdCIp OworCQkJCW5ld19qc29uYl9mb3JfcXVhbG5hbWVfaWQoc3RhdGUsIFJlbGF0aW9uUmVsYXRpb25J ZCwKKwkJCQkJCQkJCQkgIHN1Yi0+YWRkcmVzcy5vYmplY3RJZCwgInBhcmVudCIsIHRydWUpOwor CQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX0FkZE9mOgorCisJCQkJLyoKKwkJCQkgKiBTeW50YXg6IE9GICV7 dHlwZV9vZn1UCisJCQkJICovCisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5f T0JKRUNULCBOVUxMKTsKKwkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDIsCisJCQkJCQkJICJmbXQi LCBqYnZTdHJpbmcsICJPRiAle3R5cGVfb2Z9VCIsCisJCQkJCQkJICJ0eXBlIiwgamJ2U3RyaW5n LCAiYWRkIG9mIik7CisJCQkJbmV3X2pzb25iX2Zvcl90eXBlKHN0YXRlLCAidHlwZV9vZiIsIHN1 Yi0+YWRkcmVzcy5vYmplY3RJZCwgLTEpOworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pC X0VORF9PQkpFQ1QsIE5VTEwpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BPZjoKKwor CQkJCS8qCisJCQkJICogU3ludGF4OiBOT1QgT0YKKwkJCQkgKi8KKwkJCQlwdXNoSnNvbmJWYWx1 ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCQkJCW5ld19qc29uYl9WQShzdGF0 ZSwgMiwKKwkJCQkJCQkgImZtdCIsIGpidlN0cmluZywgIk5PVCBPRiIsCisJCQkJCQkJICJ0eXBl IiwgamJ2U3RyaW5nLCAibm90IG9mIik7CisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJf RU5EX09CSkVDVCwgTlVMTCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfUmVwbGljYUlkZW50 aXR5OgorCisJCQkJLyoKKwkJCQkgKiBTeW50YXg6IFJFUExJQ0EgSURFTlRJVFkgJXtpZGVudH1z CisJCQkJICovCisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBO VUxMKTsKKwkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDIsCisJCQkJCQkJICJmbXQiLCBqYnZTdHJp bmcsCisJCQkJCQkJICJSRVBMSUNBIElERU5USVRZICV7aWRlbnR9cyIsCisJCQkJCQkJICJ0eXBl IiwgamJ2U3RyaW5nLCAicmVwbGljYSBpZGVudGl0eSIpOworCQkJCXN3aXRjaCAoKChSZXBsaWNh SWRlbnRpdHlTdG10ICopIHN1YmNtZC0+ZGVmKS0+aWRlbnRpdHlfdHlwZSkKKwkJCQl7CisJCQkJ CWNhc2UgUkVQTElDQV9JREVOVElUWV9ERUZBVUxUOgorCQkJCQkJbmV3X2pzb25iX1ZBKHN0YXRl LCAxLCAiaWRlbnQiLCBqYnZTdHJpbmcsICJERUZBVUxUIik7CisJCQkJCQlicmVhazsKKwkJCQkJ Y2FzZSBSRVBMSUNBX0lERU5USVRZX0ZVTEw6CisJCQkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDEs ICJpZGVudCIsIGpidlN0cmluZywgIkZVTEwiKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFJF UExJQ0FfSURFTlRJVFlfTk9USElORzoKKwkJCQkJCW5ld19qc29uYl9WQShzdGF0ZSwgMSwgImlk ZW50IiwgamJ2U3RyaW5nLCAiTk9USElORyIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgUkVQ TElDQV9JREVOVElUWV9JTkRFWDoKKwkJCQkJCWluc2VydF9qc29uYl9rZXkoc3RhdGUsICJpZGVu dCIpOworCQkJCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAyLAorCQkJCQkJCQkJICJmbXQiLCBqYnZT dHJpbmcsICJVU0lORyBJTkRFWCAle2luZGV4fUkiLAorCQkJCQkJCQkJICJpbmRleCIsIGpidlN0 cmluZywKKwkJCQkJCQkJCSAoKFJlcGxpY2FJZGVudGl0eVN0bXQgKikgc3ViY21kLT5kZWYpLT5u YW1lKTsKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdK Ql9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVSb3dT ZWN1cml0eToKKworCQkJCS8qCisJCQkJICogU3ludGF4OiBFTkFCTEUgUk9XIExFVkVMIFNFQ1VS SVRZCisJCQkJICovCisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNU LCBOVUxMKTsKKwkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDIsCisJCQkJCQkJICJmbXQiLCBqYnZT dHJpbmcsCisJCQkJCQkJICJFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZIiwKKwkJCQkJCQkgInR5 cGUiLCBqYnZTdHJpbmcsICJlbmFibGUgcm93IHNlY3VyaXR5Iik7CisJCQkJcHVzaEpzb25iVmFs dWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug QVRfRGlzYWJsZVJvd1NlY3VyaXR5OgorCisJCQkJLyoKKwkJCQkgKiBTeW50YXg6IERJU0FCTEUg Uk9XIExFVkVMIFNFQ1VSSVRZCisJCQkJICovCisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBX SkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKwkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDIsCisJCQkJ CQkJICJmbXQiLCBqYnZTdHJpbmcsCisJCQkJCQkJICJESVNBQkxFIFJPVyBMRVZFTCBTRUNVUklU WSIsCisJCQkJCQkJICJ0eXBlIiwgamJ2U3RyaW5nLCAiZGlzYWJsZSByb3cgc2VjdXJpdHkiKTsK KwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQli cmVhazsKKworCQkJY2FzZSBBVF9BdHRhY2hQYXJ0aXRpb246CisJCQkJeworCQkJCQlTdHJpbmdJ bmZvRGF0YSBmbXRTdWI7CisKKwkJCQkJaW5pdFN0cmluZ0luZm8oJmZtdFN1Yik7CisKKwkJCQkJ LyoKKwkJCQkJICogU3ludGF4OiBBVFRBQ0ggUEFSVElUSU9OICV7cGFydGl0aW9uX2lkZW50aXR5 fUQKKwkJCQkJICogJXtwYXJ0aXRpb25fYm91bmR9cworCQkJCQkgKi8KKwkJCQkJcHVzaEpzb25i VmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKwkJCQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZygmZm10U3ViLCAiQVRUQUNIIFBBUlRJVElPTiIKKwkJCQkJCQkJCQkgICAiICV7 cGFydGl0aW9uX2lkZW50aXR5fUQiKTsKKworCQkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDEsICJ0 eXBlIiwgamJ2U3RyaW5nLAorCQkJCQkJCQkgImF0dGFjaCBwYXJ0aXRpb24iKTsKKwkJCQkJbmV3 X2pzb25iX2Zvcl9xdWFsbmFtZV9pZChzdGF0ZSwgUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkgIHN1Yi0+YWRkcmVzcy5vYmplY3RJZCwKKwkJCQkJCQkJCQkJICAicGFydGl0aW9uX2lk ZW50aXR5IiwgdHJ1ZSk7CisKKwkJCQkJaWYgKHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJ TkRfUEFSVElUSU9ORURfVEFCTEUpCisJCQkJCXsKKwkJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoJmZtdFN1YiwgIiAle3BhcnRpdGlvbl9ib3VuZH1zIik7CisJCQkJCQluZXdfanNvbmJfVkEo c3RhdGUsIDEsCisJCQkJCQkJCQkgInBhcnRpdGlvbl9ib3VuZCIsIGpidlN0cmluZywKKwkJCQkJ CQkJCSByZWxhdGlvbl9nZXRfcGFydF9ib3VuZChzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJ CQkJfQorCisJCQkJCS8qIFdlIGhhdmUgZnVsbCBmbXQgYnkgbm93LCBzbyBhZGQganNvbmIgZWxl bWVudCBmb3IgdGhhdCAqLworCQkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDEsICJmbXQiLCBqYnZT dHJpbmcsIGZtdFN1Yi5kYXRhKTsKKwkJCQkJcGZyZWUoZm10U3ViLmRhdGEpOworCisJCQkJCXB1 c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworCisJCQkJCWJyZWFr OworCQkJCX0KKwkJCWNhc2UgQVRfRGV0YWNoUGFydGl0aW9uOgorCQkJCXsKKwkJCQkJUGFydGl0 aW9uQ21kICpjbWQ7CisJCQkJCVN0cmluZ0luZm9EYXRhIGZtdFN1YjsKKworCQkJCQlpbml0U3Ry aW5nSW5mbygmZm10U3ViKTsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBQYXJ0aXRp b25DbWQpKTsKKwkJCQkJY21kID0gKFBhcnRpdGlvbkNtZCAqKSBzdWJjbWQtPmRlZjsKKworCQkJ CQkvKgorCQkJCQkgKiBTeW50YXg6IERFVEFDSCBQQVJUSVRJT04gJXtwYXJ0aXRpb25faWRlbnRp dHl9RAorCQkJCQkgKiAle2NvbmN1cnJlbnR9cworCQkJCQkgKi8KKwkJCQkJcHVzaEpzb25iVmFs dWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKwkJCQkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZygmZm10U3ViLCAiREVUQUNIIFBBUlRJVElPTiIKKwkJCQkJCQkJCQkgICAiICV7cGFy dGl0aW9uX2lkZW50aXR5fUQiKTsKKworCQkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDEsICJ0eXBl IiwgamJ2U3RyaW5nLCAiZGV0YWNoIHBhcnRpdGlvbiIpOworCQkJCQluZXdfanNvbmJfZm9yX3F1 YWxuYW1lX2lkKHN0YXRlLCBSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCSAgc3ViLT5h ZGRyZXNzLm9iamVjdElkLAorCQkJCQkJCQkJCQkgICJwYXJ0aXRpb25faWRlbnRpdHkiLCB0cnVl KTsKKwkJCQkJaWYgKGNtZC0+Y29uY3VycmVudCkKKwkJCQkJeworCQkJCQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZygmZm10U3ViLCAiICV7Y29uY3VycmVudH1zIik7CisJCQkJCQluZXdfanNvbmJf VkEoc3RhdGUsIDEsCisJCQkJCQkJCQkgImNvbmN1cnJlbnQiLCBqYnZTdHJpbmcsICJDT05DVVJS RU5UTFkiKTsKKwkJCQkJfQorCisJCQkJCS8qIFdlIGhhdmUgZnVsbCBmbXQgYnkgbm93LCBzbyBh ZGQganNvbmIgZWxlbWVudCBmb3IgdGhhdCAqLworCQkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDEs ICJmbXQiLCBqYnZTdHJpbmcsIGZtdFN1Yi5kYXRhKTsKKwkJCQkJcGZyZWUoZm10U3ViLmRhdGEp OworCisJCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOwor CQkJCQlicmVhazsKKwkJCQl9CisJCQljYXNlIEFUX0RldGFjaFBhcnRpdGlvbkZpbmFsaXplOgor CisJCQkJLyoKKwkJCQkgKiBTeW50YXg6IERFVEFDSCBQQVJUSVRJT04gJXtwYXJ0aXRpb25faWRl bnRpdHl9RCBGSU5BTElaRQorCQkJCSAqLworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pC X0JFR0lOX09CSkVDVCwgTlVMTCk7CisJCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAyLAorCQkJCQkJ CSAiZm10IiwgamJ2U3RyaW5nLCAiREVUQUNIIFBBUlRJVElPTiIKKwkJCQkJCQkgIiAle3BhcnRp dGlvbl9pZGVudGl0eX1EIEZJTkFMSVpFIiwKKwkJCQkJCQkgInR5cGUiLCBqYnZTdHJpbmcsICJk ZXRhY2ggcGFydGl0aW9uIGZpbmFsaXplIik7CisKKwkJCQluZXdfanNvbmJfZm9yX3F1YWxuYW1l X2lkKHN0YXRlLCBSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJICBzdWItPmFkZHJlc3Mu b2JqZWN0SWQsCisJCQkJCQkJCQkJICAicGFydGl0aW9uX2lkZW50aXR5IiwgdHJ1ZSk7CisJCQkJ cHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisJCQkJYnJlYWs7 CisJCQljYXNlIEFUX0FkZElkZW50aXR5OgorCQkJCXsKKwkJCQkJQXR0ck51bWJlcglhdHRudW07 CisJCQkJCU9pZAkJCXNlcV9yZWxpZDsKKwkJCQkJQ29sdW1uRGVmICAqY29sZGVmID0gKENvbHVt bkRlZiAqKSBzdWJjbWQtPmRlZjsKKwkJCQkJU3RyaW5nSW5mb0RhdGEgZm10U3ViOworCisJCQkJ CWluaXRTdHJpbmdJbmZvKCZmbXRTdWIpOworCisJCQkJCS8qCisJCQkJCSAqIFN5bnRheDogQUxU RVIgQ09MVU1OICV7Y29sdW1ufUkgJXtkZWZpbml0aW9ufXMgd2hlcmUKKwkJCQkJICogZGVmaW5p dGlvbiA6IEFERCAle2lkZW50aXR5X2NvbHVtbn1zIHdoZXJlCisJCQkJCSAqIGlkZW50aXR5X2Nv bHVtbjogJXtpZGVudGl0eV90eXBlfXMgKCAle3NlcV9kZWZpbml0aW9uOgorCQkJCQkgKiB9cyAp CisJCQkJCSAqLworCQkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1Qs IE5VTEwpOworCisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmZtdFN1YiwgIkFMVEVSIENP TFVNTiAle2NvbHVtbn1JIik7CisJCQkJCW5ld19qc29uYl9WQShzdGF0ZSwgMiwKKwkJCQkJCQkJ ICJ0eXBlIiwgamJ2U3RyaW5nLCAiYWRkIGlkZW50aXR5IiwKKwkJCQkJCQkJICJjb2x1bW4iLCBq YnZTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJYXR0bnVtID0gZ2V0X2F0dG51bShSZWxh dGlvbkdldFJlbGlkKHJlbCksIHN1YmNtZC0+bmFtZSk7CisJCQkJCXNlcV9yZWxpZCA9IGdldElk ZW50aXR5U2VxdWVuY2UoUmVsYXRpb25HZXRSZWxpZChyZWwpLAorCQkJCQkJCQkJCQkJCWF0dG51 bSwgdHJ1ZSk7CisKKwkJCQkJaWYgKE9pZElzVmFsaWQoc2VxX3JlbGlkKSkKKwkJCQkJeworCisJ CQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdWIsICIgJXtkZWZpbml0aW9ufXMiKTsK KwkJCQkJCWluc2VydF9qc29uYl9rZXkoc3RhdGUsICJkZWZpbml0aW9uIik7CisKKwkJCQkJCS8q IGluc2VydCBkZWZpbml0aW9uJ3MgdmFsdWUgbm93ICovCisJCQkJCQlwdXNoSnNvbmJWYWx1ZSgm c3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCQkJCQkJbmV3X2pzb25iX1ZBKHN0YXRl LCAxLAorCQkJCQkJCQkJICJmbXQiLCBqYnZTdHJpbmcsICJBREQgJXtpZGVudGl0eV9jb2x1bW59 cyIpOworCisJCQkJCQkvKiBpbnNlcnQgaWRlbnRpdHlfY29sdW1uICovCisJCQkJCQlkZXBhcnNl X0NvbHVtbklkZW50aXR5KHN0YXRlLCAiaWRlbnRpdHlfY29sdW1uIiwKKwkJCQkJCQkJCQkJICAg c2VxX3JlbGlkLAorCQkJCQkJCQkJCQkgICBjb2xkZWYtPmlkZW50aXR5LCBmYWxzZSk7CisKKwkJ CQkJCS8qIG1hcmsgZGVmaW5pdGlvbidzIHZhbHVlIGVuZCAqLworCQkJCQkJcHVzaEpzb25iVmFs dWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisJCQkJCX0KKworCQkJCQkvKiBXZSBo YXZlIGZ1bGwgZm10IGJ5IG5vdywgc28gYWRkIGpzb25iIGVsZW1lbnQgZm9yIHRoYXQgKi8KKwkJ CQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLCAiZm10IiwgamJ2U3RyaW5nLCBmbXRTdWIuZGF0YSk7 CisKKwkJCQkJcGZyZWUoZm10U3ViLmRhdGEpOworCisJCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0 ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgQVRf U2V0SWRlbnRpdHk6CisJCQkJeworCQkJCQlEZWZFbGVtICAgICpkZWZlbDsKKwkJCQkJY2hhcgkJ aWRlbnRpdHkgPSAwOworCQkJCQlBdHRyTnVtYmVyCWF0dG51bTsKKwkJCQkJT2lkCQkJc2VxX3Jl bGlkOworCQkJCQlTdHJpbmdJbmZvRGF0YSBmbXRTdWI7CisKKwkJCQkJaW5pdFN0cmluZ0luZm8o JmZtdFN1Yik7CisKKwkJCQkJLyoKKwkJCQkJICogU3ludGF4OiBBTFRFUiBDT0xVTU4gJXtjb2x1 bW59SSAle2RlZmluaXRpb259cyB3aGVyZQorCQkJCQkgKiBkZWZpbml0aW9uIDogJXtpZGVudGl0 eV90eXBlfXMgKCAle3NlcV9kZWZpbml0aW9uOiB9cyApCisJCQkJCSAqLworCQkJCQlwdXNoSnNv bmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCisJCQkJCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoJmZtdFN1YiwgIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIik7CisJCQkJ CW5ld19qc29uYl9WQShzdGF0ZSwgMiwKKwkJCQkJCQkJICJ0eXBlIiwgamJ2U3RyaW5nLCAic2V0 IGlkZW50aXR5IiwKKwkJCQkJCQkJICJjb2x1bW4iLCBqYnZTdHJpbmcsIHN1YmNtZC0+bmFtZSk7 CisKKwkJCQkJaWYgKHN1YmNtZC0+ZGVmKQorCQkJCQl7CisJCQkJCQlMaXN0CSAgICpkZWYgPSAo TGlzdCAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgTGlz dCkpOworCisJCQkJCQlkZWZlbCA9IGxpbml0aWFsX25vZGUoRGVmRWxlbSwgZGVmKTsKKwkJCQkJ CWlkZW50aXR5ID0gZGVmR2V0SW50MzIoZGVmZWwpOworCQkJCQl9CisKKwkJCQkJYXR0bnVtID0g Z2V0X2F0dG51bShSZWxhdGlvbkdldFJlbGlkKHJlbCksIHN1YmNtZC0+bmFtZSk7CisJCQkJCXNl cV9yZWxpZCA9IGdldElkZW50aXR5U2VxdWVuY2UoUmVsYXRpb25HZXRSZWxpZChyZWwpLAorCQkJ CQkJCQkJCQkJCWF0dG51bSwgdHJ1ZSk7CisKKwkJCQkJaWYgKE9pZElzVmFsaWQoc2VxX3JlbGlk KSkKKwkJCQkJeworCQkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3ViLCAiICV7ZGVm aW5pdGlvbn1zIik7CisJCQkJCQlkZXBhcnNlX0NvbHVtbklkZW50aXR5KHN0YXRlLCAiZGVmaW5p dGlvbiIsCisJCQkJCQkJCQkJCSAgIHNlcV9yZWxpZCwgaWRlbnRpdHksCisJCQkJCQkJCQkJCSAg IHRydWUpOworCQkJCQl9CisKKwkJCQkJLyogV2UgaGF2ZSBmdWxsIGZtdCBieSBub3csIHNvIGFk ZCBqc29uYiBlbGVtZW50IGZvciB0aGF0ICovCisJCQkJCW5ld19qc29uYl9WQShzdGF0ZSwgMSwg ImZtdCIsIGpidlN0cmluZywgZm10U3ViLmRhdGEpOworCisJCQkJCXBmcmVlKGZtdFN1Yi5kYXRh KTsKKwkJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisK KwkJCQkJYnJlYWs7CisJCQkJfQorCQkJY2FzZSBBVF9Ecm9wSWRlbnRpdHk6CisJCQkJeworCQkJ CQlTdHJpbmdJbmZvRGF0YSBmbXRTdWI7CisKKwkJCQkJaW5pdFN0cmluZ0luZm8oJmZtdFN1Yik7 CisKKwkJCQkJLyoKKwkJCQkJICogU3ludGF4OiBBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBEUk9Q IElERU5USVRZCisJCQkJCSAqICV7aWZfZXhpc3RzfXMKKwkJCQkJICovCisJCQkJCXB1c2hKc29u YlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJCQkJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoJmZtdFN1YiwgIkFMVEVSIENPTFVNTiIKKwkJCQkJCQkJCQkgICAiICV7Y29s dW1ufUkgRFJPUCBJREVOVElUWSIpOworCQkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDIsCisJCQkJ CQkJCSAidHlwZSIsIGpidlN0cmluZywgImRyb3AgaWRlbnRpdHkiLAorCQkJCQkJCQkgImNvbHVt biIsIGpidlN0cmluZywgc3ViY21kLT5uYW1lKTsKKworCQkJCQlpZiAoc3ViY21kLT5taXNzaW5n X29rKQorCQkJCQl7CisJCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdWIsICIgJXtp Zl9leGlzdHN9cyIpOworCQkJCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLAorCQkJCQkJCQkJICJp Zl9leGlzdHMiLCBqYnZTdHJpbmcsICJJRiBFWElTVFMiKTsKKwkJCQkJfQorCisJCQkJCS8qIFdl IGhhdmUgZnVsbCBmbXQgYnkgbm93LCBzbyBhZGQganNvbmIgZWxlbWVudCBmb3IgdGhhdCAqLwor CQkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDEsICJmbXQiLCBqYnZTdHJpbmcsIGZtdFN1Yi5kYXRh KTsKKwkJCQkJcGZyZWUoZm10U3ViLmRhdGEpOworCisJCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0 ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQlkZWZhdWx0 OgorCQkJCWVsb2coV0FSTklORywgInVuc3VwcG9ydGVkIGFsdGVyIHRhYmxlIHN1YnR5cGUgJWQi LAorCQkJCQkgc3ViY21kLT5zdWJ0eXBlKTsKKwkJCQlicmVhazsKKwkJfQorCX0KKworCXRhYmxl X2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCS8qIGlmIHN1YmNtZHMgYXJyYXkgaXMg bm90IGV2ZW4gY3JlYXRlZCBvciBoYXMgMCBlbGVtZW50cywgcmV0dXJuIE5VTEwgKi8KKwlpZiAo IXN1YkNtZEFycmF5IHx8CisJCSgoc3RhdGUtPmNvbnRWYWwudHlwZSA9PSBqYnZBcnJheSkgJiYK KwkJIChzdGF0ZS0+Y29udFZhbC52YWwuYXJyYXkubkVsZW1zID09IDApKSkKKwl7CisJCXBmcmVl KGZtdFN0ci5kYXRhKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogTWFyayB0aGUgZW5kIG9m IHN1YmNtZHMgYXJyYXkgKi8KKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfQVJSQVks IE5VTEwpOworCisJLyogV2UgaGF2ZSBmdWxsIGZtdCBieSBub3csIHNvIGFkZCBqc29uYiBlbGVt ZW50IGZvciB0aGF0ICovCisJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLCAiZm10IiwgamJ2U3RyaW5n LCBmbXRTdHIuZGF0YSk7CisKKwlwZnJlZShmbXRTdHIuZGF0YSk7CisKKwkvKiBNYXJrIHRoZSBl bmQgb2YgUk9PVCBvYmplY3QgKi8KKwl2YWx1ZSA9IHB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pC X0VORF9PQkpFQ1QsIE5VTEwpOworCisJcmV0dXJuIEpzb25iVmFsdWVUb0pzb25iKHZhbHVlKTsK K30KKwogLyoKICAqIERlcGFyc2UgYSBDcmVhdGVTZXFTdG10LgogICoKQEAgLTE1ODksNyArMzAw MCw4IEBAIGRlcGFyc2VfZHJvcF90YWJsZShjb25zdCBjaGFyICpvYmppZGVudGl0eSwgTm9kZSAq cGFyc2V0cmVlKQogICogdGhlIGNvbHVtbiBkZWZhdWx0IHZhbHVlIGFuZCBzZXF1ZW5jZXMgY3Jl YXRpb24gd2hpbGUgcGFyc2luZy4KICAqCiAgKiBWZXJib3NlIHN5bnRheAotICogQ1JFQVRFICV7 cGVyc2lzdGVuY2V9cyBTRVFVRU5DRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgJXtk ZWZpbml0aW9uOiB9cworICogQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBTRVFVRU5DRSAle2lmX25v dF9leGlzdHN9cyAle2lkZW50aXR5fUQKKyAqICV7ZGVmaW5pdGlvbjogfXMKICAqLwogc3RhdGlj IEpzb25iICoKIGRlcGFyc2VfQ3JlYXRlU2VxU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNl dHJlZSkKQEAgLTE2NTMsMTIgKzMwNjUsMTIgQEAgZGVwYXJzZV9DcmVhdGVTZXFTdG10KE9pZCBv YmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQogCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JF R0lOX0FSUkFZLCBOVUxMKTsKIAogCS8qIERlZmluaXRpb24gZWxlbWVudHMgKi8KLQlkZXBhcnNl X1NlcV9DYWNoZShzdGF0ZSwgc2VxZm9ybSk7Ci0JZGVwYXJzZV9TZXFfQ3ljbGUoc3RhdGUsIHNl cWZvcm0pOwotCWRlcGFyc2VfU2VxX0luY3JlbWVudEJ5KHN0YXRlLCBzZXFmb3JtKTsKLQlkZXBh cnNlX1NlcV9NaW52YWx1ZShzdGF0ZSwgc2VxZm9ybSk7Ci0JZGVwYXJzZV9TZXFfTWF4dmFsdWUo c3RhdGUsIHNlcWZvcm0pOwotCWRlcGFyc2VfU2VxX1N0YXJ0d2l0aChzdGF0ZSwgc2VxZm9ybSk7 CisJZGVwYXJzZV9TZXFfQ2FjaGUoc3RhdGUsIHNlcWZvcm0sIGZhbHNlKTsKKwlkZXBhcnNlX1Nl cV9DeWNsZShzdGF0ZSwgc2VxZm9ybSwgZmFsc2UpOworCWRlcGFyc2VfU2VxX0luY3JlbWVudEJ5 KHN0YXRlLCBzZXFmb3JtLCBmYWxzZSk7CisJZGVwYXJzZV9TZXFfTWludmFsdWUoc3RhdGUsIHNl cWZvcm0sIGZhbHNlKTsKKwlkZXBhcnNlX1NlcV9NYXh2YWx1ZShzdGF0ZSwgc2VxZm9ybSwgZmFs c2UpOworCWRlcGFyc2VfU2VxX1N0YXJ0d2l0aChzdGF0ZSwgc2VxZm9ybSwgZmFsc2UpOwogCWRl cGFyc2VfU2VxX1Jlc3RhcnQoc3RhdGUsIHNlcXZhbHVlcy0+bGFzdF92YWx1ZSk7CiAJZGVwYXJz ZV9TZXFfQXMoc3RhdGUsIHNlcWZvcm0pOwogCS8qIFdlIHB1cnBvc2VmdWxseSBkbyBub3QgZW1p dCBPV05FRCBCWSBoZXJlICovCkBAIC0xNzM3LDIxICszMTQ5LDIxIEBAIGRlcGFyc2VfQWx0ZXJT ZXFTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQogCQlEZWZFbGVtICAgICplbGVt ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOwogCiAJCWlmIChzdHJjbXAoZWxlbS0+ZGVmbmFt ZSwgImNhY2hlIikgPT0gMCkKLQkJCWRlcGFyc2VfU2VxX0NhY2hlKHN0YXRlLCBzZXFmb3JtKTsK KwkJCWRlcGFyc2VfU2VxX0NhY2hlKHN0YXRlLCBzZXFmb3JtLCBmYWxzZSk7CiAJCWVsc2UgaWYg KHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiY3ljbGUiKSA9PSAwKQotCQkJZGVwYXJzZV9TZXFfQ3lj bGUoc3RhdGUsIHNlcWZvcm0pOworCQkJZGVwYXJzZV9TZXFfQ3ljbGUoc3RhdGUsIHNlcWZvcm0s IGZhbHNlKTsKIAkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJpbmNyZW1lbnQiKSA9 PSAwKQotCQkJZGVwYXJzZV9TZXFfSW5jcmVtZW50Qnkoc3RhdGUsIHNlcWZvcm0pOworCQkJZGVw YXJzZV9TZXFfSW5jcmVtZW50Qnkoc3RhdGUsIHNlcWZvcm0sIGZhbHNlKTsKIAkJZWxzZSBpZiAo c3RyY21wKGVsZW0tPmRlZm5hbWUsICJtaW52YWx1ZSIpID09IDApCi0JCQlkZXBhcnNlX1NlcV9N aW52YWx1ZShzdGF0ZSwgc2VxZm9ybSk7CisJCQlkZXBhcnNlX1NlcV9NaW52YWx1ZShzdGF0ZSwg c2VxZm9ybSwgZmFsc2UpOwogCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgIm1heHZh bHVlIikgPT0gMCkKLQkJCWRlcGFyc2VfU2VxX01heHZhbHVlKHN0YXRlLCBzZXFmb3JtKTsKKwkJ CWRlcGFyc2VfU2VxX01heHZhbHVlKHN0YXRlLCBzZXFmb3JtLCBmYWxzZSk7CiAJCWVsc2UgaWYg KHN0cmNtcChlbGVtLT5kZWZuYW1lLCAic3RhcnQiKSA9PSAwKQotCQkJZGVwYXJzZV9TZXFfU3Rh cnR3aXRoKHN0YXRlLCBzZXFmb3JtKTsKKwkJCWRlcGFyc2VfU2VxX1N0YXJ0d2l0aChzdGF0ZSwg c2VxZm9ybSwgZmFsc2UpOwogCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInJlc3Rh cnQiKSA9PSAwKQogCQkJZGVwYXJzZV9TZXFfUmVzdGFydChzdGF0ZSwgc2VxdmFsdWVzLT5sYXN0 X3ZhbHVlKTsKIAkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJvd25lZF9ieSIpID09 IDApCi0JCQlkZXBhcnNlX1NlcV9Pd25lZEJ5KHN0YXRlLCBvYmplY3RJZCk7CisJCQlkZXBhcnNl X1NlcV9Pd25lZEJ5KHN0YXRlLCBvYmplY3RJZCwgZmFsc2UpOwogCQllbHNlIGlmIChzdHJjbXAo ZWxlbS0+ZGVmbmFtZSwgImFzIikgPT0gMCkKIAkJCWRlcGFyc2VfU2VxX0FzKHN0YXRlLCBzZXFm b3JtKTsKIAkJZWxzZQpAQCAtMTc2Nyw2ICszMTc5LDIwNyBAQCBkZXBhcnNlX0FsdGVyU2VxU3Rt dChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKIAlyZXR1cm4gSnNvbmJWYWx1ZVRvSnNv bmIodmFsdWUpOwogfQogCisvKgorICogRGVwYXJzZSBhIFJlbmFtZVN0bXQuCisgKgorICogVmVy Ym9zZSBzeW50YXgKKyAqIEFMVEVSIFRBQkxFICV7aWZfZXhpc3RzfXMgJXtpZGVudGl0eX1EIFJF TkFNRSBUTyAle25ld25hbWV9SQorICogT1IKKyAqIEFMVEVSIFRBQkxFICV7b25seX1zICV7aWRl bnRpdHl9RCBSRU5BTUUgQ09OU1RSQUlOVCAle29sZG5hbWV9SQorICogVE8gJXtuZXduYW1lfUkK KyAqIE9SCisgKiBBTFRFUiAle29ianR5cGV9cyAle2lmX2V4aXN0c31zICV7b25seX1zICV7aWRl bnRpdHl9RCBSRU5BTUUgQ09MVU1OCisgKiAle2NvbG5hbWV9SSBUTyAle25ld25hbWV9SSAle2Nh c2NhZGV9cworICovCisKK3N0YXRpYyBKc29uYiAqCitkZXBhcnNlX1JlbmFtZVN0bXQoT2JqZWN0 QWRkcmVzcyBhZGRyZXNzLCBOb2RlICpwYXJzZXRyZWUpCit7CisJUmVuYW1lU3RtdCAqbm9kZSA9 IChSZW5hbWVTdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbglyZWxhdGlvbjsKKwlPaWQJCQlz Y2hlbWFJZDsKKwlKc29uYlBhcnNlU3RhdGUgKnN0YXRlID0gTlVMTDsKKwlKc29uYlZhbHVlICp2 YWx1ZTsKKworCS8qCisJICogSW4gYW4gQUxURVIgLi4gUkVOQU1FIGNvbW1hbmQsIHdlIGRvbid0 IGhhdmUgdGhlIG9yaWdpbmFsIG5hbWUgb2YgdGhlCisJICogb2JqZWN0IGluIHN5c3RlbSBjYXRh bG9nczogc2luY2Ugd2UgaW5zcGVjdCB0aGVtIGFmdGVyIHRoZSBjb21tYW5kIGhhcworCSAqIGV4 ZWN1dGVkLCB0aGUgb2xkIG5hbWUgaXMgYWxyZWFkeSBnb25lLiAgVGhlcmVmb3JlLCB3ZSBleHRy YWN0IGl0IGZyb20KKwkgKiB0aGUgcGFyc2Ugbm9kZS4gIE5vdGUgd2Ugc3RpbGwgZXh0cmFjdCB0 aGUgc2NoZW1hIG5hbWUgZnJvbSB0aGUgY2F0YWxvZworCSAqIChpdCBtaWdodCBub3QgYmUgcHJl c2VudCBpbiB0aGUgcGFyc2Ugbm9kZSk7IGl0IGNhbm5vdCBwb3NzaWJseSBoYXZlCisJICogY2hh bmdlZCBhbnl3YXkuCisJICovCisJc3dpdGNoIChub2RlLT5yZW5hbWVUeXBlKQorCXsKKwkJY2Fz ZSBPQkpFQ1RfVEFCTEU6CisJCQlyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4oYWRkcmVzcy5vYmpl Y3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCXNjaGVtYUlkID0gUmVsYXRpb25HZXROYW1lc3Bh Y2UocmVsYXRpb24pOworCisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpF Q1QsIE5VTEwpOworCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAzLAorCQkJCQkJICJmbXQiLCBqYnZT dHJpbmcsCisJCQkJCQkgIkFMVEVSIFRBQkxFICV7aWZfZXhpc3RzfXMgJXtpZGVudGl0eX1EIgor CQkJCQkJICIgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwKKwkJCQkJCSAiaWZfZXhpc3RzIiwgamJ2 U3RyaW5nLAorCQkJCQkJIG5vZGUtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIiA6ICIiLAorCQkJ CQkJICJuZXduYW1lIiwgamJ2U3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKworCQkJaW5zZXJ0X2lk ZW50aXR5X29iamVjdChzdGF0ZSwgc2NoZW1hSWQsIG5vZGUtPnJlbGF0aW9uLT5yZWxuYW1lKTsK KwkJCXZhbHVlID0gcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7 CisKKwkJCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJYnJl YWs7CisKKwkJY2FzZSBPQkpFQ1RfVEFCQ09OU1RSQUlOVDoKKwkJCXsKKwkJCQlIZWFwVHVwbGUJ Y29uc3RydHVwOworCQkJCUZvcm1fcGdfY29uc3RyYWludCBjb25zdGZvcm07CisKKwkJCQljb25z dHJ0dXAgPSBTZWFyY2hTeXNDYWNoZTEoQ09OU1RST0lELAorCQkJCQkJCQkJCQlPYmplY3RJZEdl dERhdHVtKGFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY29u c3RydHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNvbnN0 cmFpbnQgd2l0aCBPSUQgJXUiLAorCQkJCQkJIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCWNvbnN0 Zm9ybSA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVDVChjb25zdHJ0dXApOworCisJCQkJ cHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKwkJCQluZXdf anNvbmJfVkEoc3RhdGUsIDQsCisJCQkJCQkJICJmbXQiLCBqYnZTdHJpbmcsCisJCQkJCQkJICJB TFRFUiBUQUJMRSAle29ubHl9cyAle2lkZW50aXR5fUQgUkVOQU1FIgorCQkJCQkJCSAiIENPTlNU UkFJTlQgJXtvbGRuYW1lfUkgVE8gJXtuZXduYW1lfUkiLAorCQkJCQkJCSAib25seSIsIGpidlN0 cmluZywKKwkJCQkJCQkgbm9kZS0+cmVsYXRpb24tPmluaCA/ICIiIDogIk9OTFkiLAorCQkJCQkJ CSAib2xkbmFtZSIsIGpidlN0cmluZywgbm9kZS0+c3VibmFtZSwKKwkJCQkJCQkgIm5ld25hbWUi LCBqYnZTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCisJCQkJbmV3X2pzb25iX2Zvcl9xdWFsbmFt ZV9pZChzdGF0ZSwgUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCSAgY29uc3Rmb3JtLT5j b25yZWxpZCwgImlkZW50aXR5IiwgdHJ1ZSk7CisJCQkJdmFsdWUgPSBwdXNoSnNvbmJWYWx1ZSgm c3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKworCQkJCVJlbGVhc2VTeXNDYWNoZShjb25z dHJ0dXApOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfQ09MVU1OOgorCQkJewor CQkJCVN0cmluZ0luZm9EYXRhIGZtdFN0cjsKKworCQkJCWluaXRTdHJpbmdJbmZvKCZmbXRTdHIp OworCisJCQkJcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKGFkZHJlc3Mub2JqZWN0SWQsIEFjY2Vz c1NoYXJlTG9jayk7CisJCQkJc2NoZW1hSWQgPSBSZWxhdGlvbkdldE5hbWVzcGFjZShyZWxhdGlv bik7CisKKwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwp OworCisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3RyLCAiQUxURVIgJXtvYmp0eXBl fXMiKTsKKworCQkJCW5ld19qc29uYl9WQShzdGF0ZSwgMSwKKwkJCQkJCQkgIm9ianR5cGUiLCBq YnZTdHJpbmcsCisJCQkJCQkJIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbGF0aW9uVHlwZSkp OworCisJCQkJLyogQ29tcG9zaXRlIHR5cGVzIGRvIG5vdCBzdXBwb3J0IElGIEVYSVNUUyAqLwor CQkJCWlmIChub2RlLT5yZW5hbWVUeXBlID09IE9CSkVDVF9DT0xVTU4pCisJCQkJeworCQkJCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIsICIgJXtpZl9leGlzdHN9cyIpOworCQkJCQlu ZXdfanNvbmJfVkEoc3RhdGUsIDEsCisJCQkJCQkJCSAiaWZfZXhpc3RzIiwgamJ2U3RyaW5nLAor CQkJCQkJCQkgbm9kZS0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIpOworCQkJCX0KKwor CQkJCWlmICghbm9kZS0+cmVsYXRpb24tPmluaCkKKwkJCQl7CisJCQkJCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoJmZtdFN0ciwgIiAle29ubHl9cyIpOworCQkJCQluZXdfanNvbmJfVkEoc3RhdGUs IDEsICJvbmx5IiwgamJ2U3RyaW5nLCAiT05MWSIpOworCQkJCX0KKworCQkJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoJmZtdFN0ciwgIiAle2lkZW50aXR5fUQgUkVOQU1FIENPTFVNTiIKKwkJCQkJ CQkJCSAgICIgJXtjb2xuYW1lfUkgVE8gJXtuZXduYW1lfUkiKTsKKwkJCQlpbnNlcnRfaWRlbnRp dHlfb2JqZWN0KHN0YXRlLCBzY2hlbWFJZCwgbm9kZS0+cmVsYXRpb24tPnJlbG5hbWUpOworCQkJ CW5ld19qc29uYl9WQShzdGF0ZSwgMiwKKwkJCQkJCQkgImNvbG5hbWUiLCBqYnZTdHJpbmcsIG5v ZGUtPnN1Ym5hbWUsCisJCQkJCQkJICJuZXduYW1lIiwgamJ2U3RyaW5nLCBub2RlLT5uZXduYW1l KTsKKworCQkJCWlmIChub2RlLT5yZW5hbWVUeXBlID09IE9CSkVDVF9BVFRSSUJVVEUpCisJCQkJ eworCisJCQkJCWlmIChub2RlLT5iZWhhdmlvciA9PSBEUk9QX0NBU0NBREUpCisJCQkJCXsKKwkJ CQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmZtdFN0ciwgIiAle2Nhc2NhZGV9cyIpOworCQkJ CQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLCAiY2FzY2FkZSIsIGpidlN0cmluZywgIkNBU0NBREUi KTsKKwkJCQkJfQorCQkJCX0KKworCQkJCS8qIFdlIGhhdmUgZnVsbCBmbXQgYnkgbm93LCBzbyBh ZGQganNvbmIgZWxlbWVudCBmb3IgdGhhdCAqLworCQkJCW5ld19qc29uYl9WQShzdGF0ZSwgMSwg ImZtdCIsIGpidlN0cmluZywgZm10U3RyLmRhdGEpOworCisJCQkJcGZyZWUoZm10U3RyLmRhdGEp OworCisJCQkJdmFsdWUgPSBwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBO VUxMKTsKKworCQkJCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOwor CQkJCWJyZWFrOworCQkJfQorCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0 ZWQgb2JqZWN0IHR5cGUgJWQiLCBub2RlLT5yZW5hbWVUeXBlKTsKKwl9CisKKwlyZXR1cm4gSnNv bmJWYWx1ZVRvSnNvbmIodmFsdWUpOworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlck9iamVj dFNjaGVtYVN0bXQgKEFMVEVSIFRBQkxFLi4uIFNFVCBTQ0hFTUEgY29tbWFuZCkKKyAqCisgKiBH aXZlbiB0aGUgb2JqZWN0KHRhYmxlKSBhZGRyZXNzIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNy ZWF0ZWQgaXQsIHJldHVybgorICogSnNvbmIgcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5k LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiAle29ianR5cGV9cyAle2lkZW50aXR5 fXMgU0VUIFNDSEVNQSAle25ld3NjaGVtYX1JCisgKi8KK3N0YXRpYyBKc29uYiAqCitkZXBhcnNl X0FsdGVyT2JqZWN0U2NoZW1hU3RtdChPYmplY3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNl dHJlZSwKKwkJCQkJCQkgIE9iamVjdEFkZHJlc3Mgb2xkX3NjaGVtYSkKK3sKKwlBbHRlck9iamVj dFNjaGVtYVN0bXQgKm5vZGUgPSAoQWx0ZXJPYmplY3RTY2hlbWFTdG10ICopIHBhcnNldHJlZTsK KwljaGFyCSAgICppZGVudGl0eTsKKwljaGFyCSAgICpuZXdfc2NoZW1hID0gbm9kZS0+bmV3c2No ZW1hOworCWNoYXIJICAgKm9sZF9zY2huYW1lOworCWNoYXIJICAgKmlkZW50OworCUpzb25iUGFy c2VTdGF0ZSAqc3RhdGUgPSBOVUxMOworCUpzb25iVmFsdWUgKnZhbHVlOworCisJLyoKKwkgKiBT aW5jZSB0aGUgY29tbWFuZCBoYXMgYWxyZWFkeSB0YWtlbiBwbGFjZSBmcm9tIHRoZSBwb2ludCBv ZiB2aWV3IG9mCisJICogY2F0YWxvZ3MsIGdldE9iamVjdElkZW50aXR5IHJldHVybnMgdGhlIG9i amVjdCBuYW1lIHdpdGggdGhlIGFscmVhZHkKKwkgKiBjaGFuZ2VkIHNjaGVtYS4gIFRoZSBvdXRw dXQgb2Ygb3VyIGRlcGFyc2luZyBtdXN0IHJldHVybiB0aGUgb3JpZ2luYWwKKwkgKiBzY2hlbWEg bmFtZSwgaG93ZXZlciwgc28gd2UgY2hvcCB0aGUgc2NoZW1hIG5hbWUgb2ZmIHRoZSBpZGVudGl0 eQorCSAqIHN0cmluZyBhbmQgdGhlbiBwcmVwZW5kIHRoZSBxdW90ZWQgc2NoZW1hIG5hbWUuCisJ ICoKKwkgKiBYWFggVGhpcyBpcyBwcmV0dHkgY2x1bmt5LiBDYW4gd2UgZG8gYmV0dGVyPworCSAq LworCWlkZW50aXR5ID0gZ2V0T2JqZWN0SWRlbnRpdHkoJmFkZHJlc3MsIGZhbHNlKTsKKwlvbGRf c2NobmFtZSA9IGdldF9uYW1lc3BhY2VfbmFtZShvbGRfc2NoZW1hLm9iamVjdElkKTsKKwlpZiAo IW9sZF9zY2huYW1lKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2No ZW1hIHdpdGggT0lEICV1IiwKKwkJCSBvbGRfc2NoZW1hLm9iamVjdElkKTsKKworCWlkZW50ID0g cHNwcmludGYoIiVzJXMiLCBxdW90ZV9pZGVudGlmaWVyKG9sZF9zY2huYW1lKSwKKwkJCQkJIGlk ZW50aXR5ICsgc3RybGVuKHF1b3RlX2lkZW50aWZpZXIobmV3X3NjaGVtYSkpKTsKKworCXB1c2hK c29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJbmV3X2pzb25iX1ZB KHN0YXRlLCA0LAorCQkJCSAiZm10IiwgamJ2U3RyaW5nLAorCQkJCSAiQUxURVIgJXtvYmp0eXBl fXMgJXtpZGVudGl0eX1zIFNFVCBTQ0hFTUEiCisJCQkJICIgJXtuZXdzY2hlbWF9SSIsCisJCQkJ ICJvYmp0eXBlIiwgamJ2U3RyaW5nLAorCQkJCSBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5vYmpl Y3RUeXBlKSwKKwkJCQkgImlkZW50aXR5IiwgamJ2U3RyaW5nLCBpZGVudCwKKwkJCQkgIm5ld3Nj aGVtYSIsIGpidlN0cmluZywgbmV3X3NjaGVtYSk7CisJdmFsdWUgPSBwdXNoSnNvbmJWYWx1ZSgm c3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKworCXJldHVybiBKc29uYlZhbHVlVG9Kc29u Yih2YWx1ZSk7Cit9CisKIC8qCiAgKiBIYW5kbGUgZGVwYXJzaW5nIG9mIHNpbXBsZSBjb21tYW5k cy4KICAqCkBAIC0xNzg5LDYgKzM0MDIsMTEgQEAgZGVwYXJzZV9zaW1wbGVfY29tbWFuZChDb2xs ZWN0ZWRDb21tYW5kICpjbWQpCiAJLyogVGhpcyBzd2l0Y2ggbmVlZHMgdG8gaGFuZGxlIGV2ZXJ5 dGhpbmcgdGhhdCBQcm9jZXNzVXRpbGl0eVNsb3cgZG9lcyAqLwogCXN3aXRjaCAobm9kZVRhZyhw YXJzZXRyZWUpKQogCXsKKwkJY2FzZSBUX0FsdGVyT2JqZWN0U2NoZW1hU3RtdDoKKwkJCXJldHVy biBkZXBhcnNlX0FsdGVyT2JqZWN0U2NoZW1hU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsCisJ CQkJCQkJCQkJCQkgcGFyc2V0cmVlLAorCQkJCQkJCQkJCQkJIGNtZC0+ZC5zaW1wbGUuc2Vjb25k YXJ5T2JqZWN0KTsKKwogCQljYXNlIFRfQWx0ZXJTZXFTdG10OgogCQkJcmV0dXJuIGRlcGFyc2Vf QWx0ZXJTZXFTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOwogCkBAIC0xNzk3LDYgKzM0MTUsOCBA QCBkZXBhcnNlX3NpbXBsZV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCkKIAogCQljYXNl IFRfQ3JlYXRlU3RtdDoKIAkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBh cnNldHJlZSk7CisJCWNhc2UgVF9SZW5hbWVTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfUmVuYW1l U3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsIHBhcnNldHJlZSk7CiAKIAkJZGVmYXVsdDoKIAkJ CWVsb2coTE9HLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZSBpbiBkZXBhcnNlIGNvbW1hbmQ6ICVk IiwKQEAgLTE4NTEsNiArMzQ3MSw5IEBAIGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKENvbGxlY3Rl ZENvbW1hbmQgKmNtZCkKIAkJY2FzZSBTQ1RfU2ltcGxlOgogCQkJanNvbmIgPSBkZXBhcnNlX3Np bXBsZV9jb21tYW5kKGNtZCk7CiAJCQlicmVhazsKKwkJY2FzZSBTQ1RfQWx0ZXJUYWJsZToKKwkJ CWpzb25iID0gZGVwYXJzZV9BbHRlclRhYmxlU3RtdChjbWQpOworCQkJYnJlYWs7CiAJCWRlZmF1 bHQ6CiAJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBkZXBhcnNlIG5vZGUgdHlwZSAlZCIsIGNt ZC0+dHlwZSk7CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMgYi9z cmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwppbmRleCAzMGI1MWJmNGQzLi5jMGY3ZjI5NzQ3IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYworKysgYi9zcmMvYmFja2VuZC90 Y29wL3V0aWxpdHkuYwpAQCAtMjIwNiw2ICsyMjA2LDIzIEBAIFV0aWxpdHlDb250YWluc1F1ZXJ5 KE5vZGUgKnBhcnNldHJlZSkKIAl9CiB9CiAKKy8qCisgKiBzdHJpbmdpZnlfb2JqdHlwZQorICog CQlSZXR1cm4gdGhlIGdpdmVuIG9iamVjdCB0eXBlIGFzIGEgc3RyaW5nLgorICovCitjb25zdCBj aGFyICoKK3N0cmluZ2lmeV9vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlwZSkKK3sKKwlzd2l0Y2gg KG9ianR5cGUpCisJeworCQljYXNlIE9CSkVDVF9UQUJMRToKKwkJCXJldHVybiAiVEFCTEUiOwor CQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9iamVjdCB0eXBlICVkIiwg b2JqdHlwZSk7CisJfQorCisJcmV0dXJuICI/Pz8iOwkJCQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0 ICovCit9CiAKIC8qCiAgKiBBbHRlck9iamVjdFR5cGVDb21tYW5kVGFnCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS90Y29wL3V0aWxpdHkuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvdXRpbGl0eS5oCmlu ZGV4IDU5ZTY0YWVhMDcuLjIyY2UzZTFiNmYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3Av dXRpbGl0eS5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvdXRpbGl0eS5oCkBAIC05OSw2ICs5OSw4 IEBAIGV4dGVybiBRdWVyeSAqVXRpbGl0eUNvbnRhaW5zUXVlcnkoTm9kZSAqcGFyc2V0cmVlKTsK IAogZXh0ZXJuIENvbW1hbmRUYWcgQ3JlYXRlQ29tbWFuZFRhZyhOb2RlICpwYXJzZXRyZWUpOwog CitleHRlcm4gY29uc3QgY2hhciAqc3RyaW5naWZ5X29ianR5cGUoT2JqZWN0VHlwZSBvYmp0eXBl KTsKKwogc3RhdGljIGlubGluZSBjb25zdCBjaGFyICoKIENyZWF0ZUNvbW1hbmROYW1lKE5vZGUg KnBhcnNldHJlZSkKIHsKLS0gCjIuMzQuMQoK --_005_OS0PR01MB5716A47D23EFAF988475D4A99431AOS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="0003-Enhance-the-event-trigger-to-support-DDL--2023_06_30.patch" Content-Description: 0003-Enhance-the-event-trigger-to-support-DDL--2023_06_30.patch Content-Disposition: attachment; filename="0003-Enhance-the-event-trigger-to-support-DDL--2023_06_30.patch"; size=13844; creation-date="Tue, 11 Jul 2023 10:51:27 GMT"; modification-date="Tue, 11 Jul 2023 11:01:18 GMT" Content-Transfer-Encoding: base64 RnJvbSBlNzMzOThjNjVkZjljYjM5MDc2YjIwOTIzNWFkMWI5MGZjN2JjOTMxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaHZldGEgTWFsaWsgPHNodmV0YS5tYWxpa0BnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMjEgSnVuIDIwMjMgMDk6MTg6NDkgKzA1MzAKU3ViamVjdDogW1BBVENIIDMv NV0gRW5oYW5jZSB0aGUgZXZlbnQgdHJpZ2dlciB0byBzdXBwb3J0IERETCBkZXBhcnNpbmcKCkFM VEVSIFRBQkxFIGNhbiBoYXZlIG11bHRpcGxlIHN1YmNvbW1hbmRzIHdoaWNoIG1pZ2h0IGluY2x1 ZGUgRFJPUCBDT0xVTU4KY29tbWFuZCBhbmQgQUxURVIgVFlQRSByZWZlcnJpbmcgdGhlIGRyb3Ag Y29sdW1uIGluIFVTSU5HIGV4cHJlc3Npb24uIEFzIHRoZQpkcm9wcGVkIGNvbHVtbiBjYW5ub3Qg YmUgYWNjZXNzZWQgYWZ0ZXIgdGhlIGV4ZWN1dGlvbiBvZiBEUk9QIENPTFVNTiwgYSBzcGVjaWFs CnRyaWdnZXIgaXMgYWRkZWQgdG8gaGFuZGxlIHRoaXMgY2FzZSBiZWZvcmUgdGhlIGRyb3AgY29s dW1uIGlzIGV4ZWN1dGVkLgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbGRlcGFyc2UuYyAg ICB8ICAxMSArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jIHwgMTg4ICsr KysrKysrKysrKysrKysrKysrKy0tLS0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRz LmMgICAgIHwgIDEwICstCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmggfCAg NDYgKysrKysrLQogc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCAgIHwgICAyICsK IDUgZmlsZXMgY2hhbmdlZCwgMjA0IGluc2VydGlvbnMoKyksIDUzIGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbGRlcGFyc2UuYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2RkbGRlcGFyc2UuYwppbmRleCBjYjAyNGI0NWI4Li42NWMyNTUwYWU1IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxkZXBhcnNlLmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvZGRsZGVwYXJzZS5jCkBAIC0yMzI2LDIyICsyMzI2LDEzIEBAIGRlcGFyc2Vf QWx0ZXJUYWJsZVN0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQogCQkJCQkgKi8KIAkJCQkJaWYg KGRlZi0+cmF3X2RlZmF1bHQpCiAJCQkJCXsKLQkJCQkJCURhdHVtCQlkZXBhcnNlZDsKLQkJCQkJ CWNoYXIJICAgKmRlZmV4cHI7Ci0JCQkJCQlMaXN0CSAgICpleHBycyA9IE5JTDsKLQotCQkJCQkJ ZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCBkZWYtPmNvb2tlZF9kZWZhdWx0KTsKLQkJCQkJCWRlZmV4 cHIgPSBub2RlVG9TdHJpbmcoZGVmLT5jb29rZWRfZGVmYXVsdCk7Ci0JCQkJCQlkZXBhcnNlZCA9 IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIsCi0JCQkJCQkJCQkJCQkJICAgQ1N0cmlu Z0dldFRleHREYXR1bShkZWZleHByKSwKLQkJCQkJCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGlk KHJlbCkpOwogCQkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3ViLCAiICV7dXNpbmd9 cyIpOwogCQkJCQkJaW5zZXJ0X2pzb25iX2tleShzdGF0ZSwgInVzaW5nIik7CiAJCQkJCQlwdXNo SnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOwogCQkJCQkJbmV3X2pz b25iX1ZBKHN0YXRlLCAyLAogCQkJCQkJCQkJICJmbXQiLCBqYnZTdHJpbmcsICJVU0lORyAle2V4 cHJlc3Npb259cyIsCiAJCQkJCQkJCQkgImV4cHJlc3Npb24iLCBqYnZTdHJpbmcsCi0JCQkJCQkJ CQkgVGV4dERhdHVtR2V0Q1N0cmluZyhkZXBhcnNlZCkpOworCQkJCQkJCQkJIHN1Yi0+dXNpbmdl eHByKTsKIAkJCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwp OwogCQkJCQl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdn ZXIuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwppbmRleCA0ZDQ4ZTQ5 MGVkLi44YzJhNDk0ZGNiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90 cmlnZ2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCkBAIC0z Niw2ICszNiw3IEBACiAjaW5jbHVkZSAibGliL2lsaXN0LmgiCiAjaW5jbHVkZSAibWlzY2FkbWlu LmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2Z1bmMuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFy c2VyLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAidGNvcC9kZGxkZXBhcnNlLmgi CiAjaW5jbHVkZSAidGNvcC9kZXBhcnNlX3V0aWxpdHkuaCIKQEAgLTQ5LDQ1ICs1MCw3IEBACiAj aW5jbHVkZSAidXRpbHMvcmVsLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKIAotdHlw ZWRlZiBzdHJ1Y3QgRXZlbnRUcmlnZ2VyUXVlcnlTdGF0ZQotewotCS8qIG1lbW9yeSBjb250ZXh0 IGZvciB0aGlzIHN0YXRlJ3Mgb2JqZWN0cyAqLwotCU1lbW9yeUNvbnRleHQgY3h0OwotCi0JLyog c3FsX2Ryb3AgKi8KLQlzbGlzdF9oZWFkCVNRTERyb3BMaXN0OwotCWJvb2wJCWluX3NxbF9kcm9w OwotCi0JLyogdGFibGVfcmV3cml0ZSAqLwotCU9pZAkJCXRhYmxlX3Jld3JpdGVfb2lkOwkvKiBJ bnZhbGlkT2lkLCBvciBzZXQgZm9yIHRhYmxlX3Jld3JpdGUKLQkJCQkJCQkJCSAqIGV2ZW50ICov Ci0JaW50CQkJdGFibGVfcmV3cml0ZV9yZWFzb247CS8qIEFUX1JFV1JJVEUgcmVhc29uICovCi0K LQkvKiBTdXBwb3J0IGZvciBjb21tYW5kIGNvbGxlY3Rpb24gKi8KLQlib29sCQljb21tYW5kQ29s bGVjdGlvbkluaGliaXRlZDsKLQlDb2xsZWN0ZWRDb21tYW5kICpjdXJyZW50Q29tbWFuZDsKLQlM aXN0CSAgICpjb21tYW5kTGlzdDsJLyogbGlzdCBvZiBDb2xsZWN0ZWRDb21tYW5kOyBzZWUKLQkJ CQkJCQkJICogZGVwYXJzZV91dGlsaXR5LmggKi8KLQlzdHJ1Y3QgRXZlbnRUcmlnZ2VyUXVlcnlT dGF0ZSAqcHJldmlvdXM7Ci19IEV2ZW50VHJpZ2dlclF1ZXJ5U3RhdGU7Ci0KLXN0YXRpYyBFdmVu dFRyaWdnZXJRdWVyeVN0YXRlICpjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUgPSBOVUxMOwotCi0v KiBTdXBwb3J0IGZvciBkcm9wcGVkIG9iamVjdHMgKi8KLXR5cGVkZWYgc3RydWN0IFNRTERyb3BP YmplY3QKLXsKLQlPYmplY3RBZGRyZXNzIGFkZHJlc3M7Ci0JY29uc3QgY2hhciAqc2NoZW1hbmFt ZTsKLQljb25zdCBjaGFyICpvYmpuYW1lOwotCWNvbnN0IGNoYXIgKm9iamlkZW50aXR5OwotCWNv bnN0IGNoYXIgKm9iamVjdHR5cGU7Ci0JTGlzdAkgICAqYWRkcm5hbWVzOwotCUxpc3QJICAgKmFk ZHJhcmdzOwotCWJvb2wJCW9yaWdpbmFsOwotCWJvb2wJCW5vcm1hbDsKLQlib29sCQlpc3RlbXA7 Ci0Jc2xpc3Rfbm9kZQluZXh0OwotfSBTUUxEcm9wT2JqZWN0OworRXZlbnRUcmlnZ2VyUXVlcnlT dGF0ZSAqY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlID0gTlVMTDsKIAogc3RhdGljIHZvaWQgQWx0 ZXJFdmVudFRyaWdnZXJPd25lcl9pbnRlcm5hbChSZWxhdGlvbiByZWwsCiAJCQkJCQkJCQkJCUhl YXBUdXBsZSB0dXAsCkBAIC0xNTM4LDYgKzE1MDEsNyBAQCBFdmVudFRyaWdnZXJBbHRlclRhYmxl U3RhcnQoTm9kZSAqcGFyc2V0cmVlKQogCiAJY29tbWFuZC0+ZC5hbHRlclRhYmxlLmNsYXNzSWQg PSBSZWxhdGlvblJlbGF0aW9uSWQ7CiAJY29tbWFuZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkID0g SW52YWxpZE9pZDsKKwljb21tYW5kLT5kLmFsdGVyVGFibGUucmV3cml0ZSA9IGZhbHNlOwogCWNv bW1hbmQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzID0gTklMOwogCWNvbW1hbmQtPnBhcnNldHJlZSA9 IGNvcHlPYmplY3QocGFyc2V0cmVlKTsKIApAQCAtMTU3MSw3ICsxNTM1LDcgQEAgRXZlbnRUcmln Z2VyQWx0ZXJUYWJsZVJlbGlkKE9pZCBvYmplY3RJZCkKICAqIGludGVybmFsbHksIHNvIHRoYXQn cyBhbGwgdGhhdCB0aGlzIGNvZGUgbmVlZHMgdG8gaGFuZGxlIGF0IHRoZSBtb21lbnQuCiAgKi8K IHZvaWQKLUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKE5vZGUgKnN1YmNtZCwg T2JqZWN0QWRkcmVzcyBhZGRyZXNzKQorRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJj bWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MsIGJvb2wgcmV3cml0ZSkKIHsK IAlNZW1vcnlDb250ZXh0IG9sZGN4dDsKIAlDb2xsZWN0ZWRBVFN1YmNtZCAqbmV3c3ViOwpAQCAt MTU5MSwxMiArMTU1NSwxNTYgQEAgRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQo Tm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MpCiAJbmV3c3ViLT5hZGRyZXNzID0g YWRkcmVzczsKIAluZXdzdWItPnBhcnNldHJlZSA9IGNvcHlPYmplY3Qoc3ViY21kKTsKIAorCWN1 cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJsZS5yZXdy aXRlIHw9IHJld3JpdGU7CiAJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFu ZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMgPQogCQlsYXBwZW5kKGN1cnJlbnRFdmVudFRyaWdnZXJT dGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzLCBuZXdzdWIpOwogCiAJ TWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CiB9CiAKKy8qCisgKiBFdmVudFRyaWdnZXJB bHRlclR5cGVTdGFydAorICoJCVNhdmUgZGF0YSBhYm91dCBhIHNpbmdsZSBwYXJ0IG9mIGFuIEFM VEVSIFRZUEUuCisgKgorICogQUxURVIgVEFCTEUgY2FuIGhhdmUgbXVsdGlwbGUgc3ViY29tbWFu ZHMgd2hpY2ggbWlnaHQgaW5jbHVkZSBEUk9QIENPTFVNTgorICogY29tbWFuZCBhbmQgQUxURVIg VFlQRSByZWZlcnJpbmcgdGhlIGRyb3AgY29sdW1uIGluIFVTSU5HIGV4cHJlc3Npb24uCisgKiBB cyB0aGUgZHJvcHBlZCBjb2x1bW4gY2Fubm90IGJlIGFjY2Vzc2VkIGFmdGVyIHRoZSBleGVjdXRp b24gb2YgRFJPUCBDT0xVTU4sCisgKiBhIHNwZWNpYWwgdHJpZ2dlciBpcyByZXF1aXJlZCB0byBo YW5kbGUgdGhpcyBjYXNlIGJlZm9yZSB0aGUgZHJvcCBjb2x1bW4gaXMKKyAqIGV4ZWN1dGVkLgor ICovCit2b2lkCitFdmVudFRyaWdnZXJBbHRlclR5cGVTdGFydChBbHRlclRhYmxlQ21kICpzdWJj bWQsIFJlbGF0aW9uIHJlbCkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwlDb2xsZWN0ZWRB VFN1YmNtZCAqbmV3c3ViOworCUNvbHVtbkRlZiAgKmRlZjsKKwlSZWxhdGlvbglhdHRyZWxhdGlv bjsKKwlIZWFwVHVwbGUJaGVhcFR1cDsKKwlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRUdXA7CisJQXR0 ck51bWJlcglhdHRudW07CisJT2JqZWN0QWRkcmVzcyBhZGRyZXNzOworCisJLyogaWdub3JlIGlm IGV2ZW50IHRyaWdnZXIgY29udGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICov CisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dl clN0YXRlLT5jb21tYW5kQ29sbGVjdGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJQXNzZXJ0 KElzQShzdWJjbWQsIEFsdGVyVGFibGVDbWQpKTsKKwlBc3NlcnQoc3ViY21kLT5zdWJ0eXBlID09 IEFUX0FsdGVyQ29sdW1uVHlwZSk7CisJQXNzZXJ0KGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+ Y3VycmVudENvbW1hbmQgIT0gTlVMTCk7CisJQXNzZXJ0KE9pZElzVmFsaWQoY3VycmVudEV2ZW50 VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkKSk7CisK KwlkZWYgPSAoQ29sdW1uRGVmICopIHN1YmNtZC0+ZGVmOworCUFzc2VydChJc0EoZGVmLCBDb2x1 bW5EZWYpKTsKKworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjdXJyZW50RXZlbnRU cmlnZ2VyU3RhdGUtPmN4dCk7CisKKwluZXdzdWIgPSBwYWxsb2Moc2l6ZW9mKENvbGxlY3RlZEFU U3ViY21kKSk7CisJbmV3c3ViLT5wYXJzZXRyZWUgPSAoTm9kZSAqKWNvcHlPYmplY3Qoc3ViY21k KTsKKworCWF0dHJlbGF0aW9uID0gdGFibGVfb3BlbihBdHRyaWJ1dGVSZWxhdGlvbklkLCBSb3dF eGNsdXNpdmVMb2NrKTsKKworCS8qIExvb2sgdXAgdGhlIHRhcmdldCBjb2x1bW4gKi8KKwloZWFw VHVwID0gU2VhcmNoU3lzQ2FjaGVDb3B5QXR0TmFtZShSZWxhdGlvbkdldFJlbGlkKHJlbCksIHN1 YmNtZC0+bmFtZSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGhlYXBUdXApKSAvKiBzaG91bGRu J3QgaGFwcGVuICovCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX1VOREVG SU5FRF9DT0xVTU4pLAorCQkJCWVycm1zZygiY29sdW1uIFwiJXNcIiBvZiByZWxhdGlvbiBcIiVz XCIgZG9lcyBub3QgZXhpc3QiLAorCQkJCQkgICBzdWJjbWQtPm5hbWUsIFJlbGF0aW9uR2V0UmVs YXRpb25OYW1lKHJlbCkpKTsKKwlhdHRUdXAgPSAoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVD VChoZWFwVHVwKTsKKwlhdHRudW0gPSBhdHRUdXAtPmF0dG51bTsKKworCU9iamVjdEFkZHJlc3NT dWJTZXQoYWRkcmVzcywgUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJUmVsYXRpb25HZXRSZWxp ZChyZWwpLCBhdHRudW0pOworCWhlYXBfZnJlZXR1cGxlKGhlYXBUdXApOworCXRhYmxlX2Nsb3Nl KGF0dHJlbGF0aW9uLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwluZXdzdWItPmFkZHJlc3MgPSBhZGRy ZXNzOworCisJaWYgKGRlZi0+cmF3X2RlZmF1bHQpCisJeworCQlPdmVycmlkZVNlYXJjaFBhdGgg Km92ZXJyaWRlUGF0aDsKKwkJY2hhcgkgICAqZGVmZXhwcjsKKworCQkvKgorCQkgKiBXZSB3YW50 IGFsbCBvYmplY3QgbmFtZXMgdG8gYmUgcXVhbGlmaWVkIHdoZW4gZGVwYXJzaW5nIHRoZQorCQkg KiBleHByZXNzaW9uLCBzbyB0aGF0IHJlc3VsdHMgYXJlICJwb3J0YWJsZSIgdG8gZW52aXJvbm1l bnRzIHdpdGgKKwkJICogZGlmZmVyZW50IHNlYXJjaF9wYXRoIHNldHRpbmdzLiBSYXRoZXIgdGhh biBpbmplY3Qgd2hhdCB3b3VsZCBiZQorCQkgKiByZXBldGl0aXZlIGNhbGxzIHRvIG92ZXJyaWRl IHNlYXJjaCBwYXRoIGFsbCBvdmVyIHRoZSBwbGFjZSwgd2UgZG8KKwkJICogaXQgY2VudHJhbGx5 IGhlcmUuCisJCSAqLworCQlvdmVycmlkZVBhdGggPSBHZXRPdmVycmlkZVNlYXJjaFBhdGgoQ3Vy cmVudE1lbW9yeUNvbnRleHQpOworCQlvdmVycmlkZVBhdGgtPnNjaGVtYXMgPSBOSUw7CisJCW92 ZXJyaWRlUGF0aC0+YWRkQ2F0YWxvZyA9IGZhbHNlOworCQlvdmVycmlkZVBhdGgtPmFkZFRlbXAg PSB0cnVlOworCQlQdXNoT3ZlcnJpZGVTZWFyY2hQYXRoKG92ZXJyaWRlUGF0aCk7CisKKwkJZGVm ZXhwciA9IG5vZGVUb1N0cmluZyhkZWYtPmNvb2tlZF9kZWZhdWx0KTsKKwkJbmV3c3ViLT51c2lu Z2V4cHIgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4 cHIsCisJCQkJCQkJCQkJCQkJCQkJCUNTdHJpbmdHZXRUZXh0RGF0dW0oZGVmZXhwciksCisJCQkJ CQkJCQkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsaWQocmVsKSkpOworCisJCVBvcE92ZXJyaWRlU2Vh cmNoUGF0aCgpOworCX0KKwllbHNlCisJCW5ld3N1Yi0+dXNpbmdleHByID0gTlVMTDsKKworCWN1 cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJsZS5zdWJj bWRzID0KKwkJbGFwcGVuZChjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5k LT5kLmFsdGVyVGFibGUuc3ViY21kcywgbmV3c3ViKTsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hU byhvbGRjeHQpOworfQorCisvKgorICogRXZlbnRUcmlnZ2VyQWx0ZXJUeXBlRW5kCisgKgkJRmlu aXNoIHVwIHNhdmluZyBhbiBBTFRFUiBUWVBFIGNvbW1hbmQsIGFuZCBhZGQgaXQgdG8gY29tbWFu ZCBsaXN0LgorICovCit2b2lkCitFdmVudFRyaWdnZXJBbHRlclR5cGVFbmQoTm9kZSAqc3ViY21k LCBPYmplY3RBZGRyZXNzIGFkZHJlc3MsIGJvb2wgcmV3cml0ZSkKK3sKKwlNZW1vcnlDb250ZXh0 IG9sZGN4dDsKKwlDb2xsZWN0ZWRBVFN1YmNtZCAqbmV3c3ViOworCUxpc3RDZWxsICAgKmNlbGw7 CisJQ29sbGVjdGVkQ29tbWFuZCAqY21kOworCUFsdGVyVGFibGVDbWQgKmFsdHN1YmNtZCA9IChB bHRlclRhYmxlQ21kICopc3ViY21kOworCisJLyogaWdub3JlIGlmIGV2ZW50IHRyaWdnZXIgY29u dGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICovCisJaWYgKCFjdXJyZW50RXZl bnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kQ29s bGVjdGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJY21kID0gY3VycmVudEV2ZW50VHJpZ2dl clN0YXRlLT5jdXJyZW50Q29tbWFuZDsKKworCUFzc2VydChJc0Eoc3ViY21kLCBBbHRlclRhYmxl Q21kKSk7CisJQXNzZXJ0KGNtZCAhPSBOVUxMKTsKKwlBc3NlcnQoT2lkSXNWYWxpZChjbWQtPmQu YWx0ZXJUYWJsZS5vYmplY3RJZCkpOworCisJZm9yZWFjaChjZWxsLCBjbWQtPmQuYWx0ZXJUYWJs ZS5zdWJjbWRzKQorCXsKKwkJQ29sbGVjdGVkQVRTdWJjbWQgKnN1YiA9IChDb2xsZWN0ZWRBVFN1 YmNtZCAqKSBsZmlyc3QoY2VsbCk7CisJCUFsdGVyVGFibGVDbWQgKmNvbGxjbWQgPSAoQWx0ZXJU YWJsZUNtZCAqKSBzdWItPnBhcnNldHJlZTsKKworCQlpZiAoY29sbGNtZC0+c3VidHlwZSA9PSBh bHRzdWJjbWQtPnN1YnR5cGUgJiYKKwkJCWFkZHJlc3MuY2xhc3NJZCA9PSBzdWItPmFkZHJlc3Mu Y2xhc3NJZCAmJgorCQkJYWRkcmVzcy5vYmplY3RJZCA9PSBzdWItPmFkZHJlc3Mub2JqZWN0SWQg JiYKKwkJCWFkZHJlc3Mub2JqZWN0U3ViSWQgPT0gc3ViLT5hZGRyZXNzLm9iamVjdFN1YklkKQor CQl7CisJCQljbWQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlIHw9IHJld3JpdGU7CisJCQlyZXR1cm47 CisJCX0KKwl9CisKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY3VycmVudEV2ZW50 VHJpZ2dlclN0YXRlLT5jeHQpOworCisJbmV3c3ViID0gcGFsbG9jKHNpemVvZihDb2xsZWN0ZWRB VFN1YmNtZCkpOworCW5ld3N1Yi0+YWRkcmVzcyA9IGFkZHJlc3M7CisJbmV3c3ViLT5wYXJzZXRy ZWUgPSBjb3B5T2JqZWN0KHN1YmNtZCk7CisKKwljbWQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlIHw9 IHJld3JpdGU7CisJY21kLT5kLmFsdGVyVGFibGUuc3ViY21kcyA9IGxhcHBlbmQoY21kLT5kLmFs dGVyVGFibGUuc3ViY21kcywgbmV3c3ViKTsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRj eHQpOworfQorCiAvKgogICogRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZUVuZAogICoJCUZpbmlzaCB1 cCBzYXZpbmcgYW4gQUxURVIgVEFCTEUgY29tbWFuZCwgYW5kIGFkZCBpdCB0byBjb21tYW5kIGxp c3QuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IDYwNGMxZGU0NzQuLjY3NWNhNzNmZGEg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC00NzQyLDYgKzQ3NDIsOSBAQCBBVFByZXBD bWQoTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVsLCBBbHRlclRhYmxlQ21kICpjbWQsCiAJCQlj bWQgPSBBVFBhcnNlVHJhbnNmb3JtQ21kKHdxdWV1ZSwgdGFiLCByZWwsIGNtZCwgcmVjdXJzZSwg bG9ja21vZGUsCiAJCQkJCQkJCQkgIEFUX1BBU1NfVU5TRVQsIGNvbnRleHQpOwogCQkJQXNzZXJ0 KGNtZCAhPSBOVUxMKTsKKworCQkJRXZlbnRUcmlnZ2VyQWx0ZXJUeXBlU3RhcnQoY21kLCByZWwp OworCiAJCQkvKiBQZXJmb3JtcyBvd24gcmVjdXJzaW9uICovCiAJCQlBVFByZXBBbHRlckNvbHVt blR5cGUod3F1ZXVlLCB0YWIsIHJlbCwgcmVjdXJzZSwgcmVjdXJzaW5nLCBjbWQsCiAJCQkJCQkJ CSAgbG9ja21vZGUsIGNvbnRleHQpOwpAQCAtNTAxMyw2ICs1MDE2LDcgQEAgQVRFeGVjQ21kKExp c3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUluZm8gKnRhYiwKIHsKIAlPYmplY3RBZGRyZXNzIGFk ZHJlc3MgPSBJbnZhbGlkT2JqZWN0QWRkcmVzczsKIAlSZWxhdGlvbglyZWwgPSB0YWItPnJlbDsK Kwlib29sCQljb21tYW5kQ29sbGVjdGVkID0gZmFsc2U7CiAKIAlzd2l0Y2ggKGNtZC0+c3VidHlw ZSkKIAl7CkBAIC01MTM2LDYgKzUxNDAsOCBAQCBBVEV4ZWNDbWQoTGlzdCAqKndxdWV1ZSwgQWx0 ZXJlZFRhYmxlSW5mbyAqdGFiLAogCQljYXNlIEFUX0FsdGVyQ29sdW1uVHlwZToJLyogQUxURVIg Q09MVU1OIFRZUEUgKi8KIAkJCS8qIHBhcnNlIHRyYW5zZm9ybWF0aW9uIHdhcyBkb25lIGVhcmxp ZXIgKi8KIAkJCWFkZHJlc3MgPSBBVEV4ZWNBbHRlckNvbHVtblR5cGUodGFiLCByZWwsIGNtZCwg bG9ja21vZGUpOworCQkJRXZlbnRUcmlnZ2VyQWx0ZXJUeXBlRW5kKChOb2RlICopIGNtZCwgYWRk cmVzcywgdGFiLT5yZXdyaXRlKTsKKwkJCWNvbW1hbmRDb2xsZWN0ZWQgPSB0cnVlOwogCQkJYnJl YWs7CiAJCWNhc2UgQVRfQWx0ZXJDb2x1bW5HZW5lcmljT3B0aW9uczoJLyogQUxURVIgQ09MVU1O IE9QVElPTlMgKi8KIAkJCWFkZHJlc3MgPQpAQCAtNTMwOCw4ICs1MzE0LDggQEAgQVRFeGVjQ21k KExpc3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUluZm8gKnRhYiwKIAkvKgogCSAqIFJlcG9ydCB0 aGUgc3ViY29tbWFuZCB0byBpbnRlcmVzdGVkIGV2ZW50IHRyaWdnZXJzLgogCSAqLwotCWlmIChj bWQpCi0JCUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKChOb2RlICopIGNtZCwg YWRkcmVzcyk7CisJaWYgKGNtZCAmJiAhY29tbWFuZENvbGxlY3RlZCkKKwkJRXZlbnRUcmlnZ2Vy Q29sbGVjdEFsdGVyVGFibGVTdWJjbWQoKE5vZGUgKikgY21kLCBhZGRyZXNzLCB0YWItPnJld3Jp dGUpOwogCiAJLyoKIAkgKiBCdW1wIHRoZSBjb21tYW5kIGNvdW50ZXIgdG8gZW5zdXJlIHRoZSBu ZXh0IHN1YmNvbW1hbmQgaW4gdGhlIHNlcXVlbmNlCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9j b21tYW5kcy9ldmVudF90cmlnZ2VyLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmln Z2VyLmgKaW5kZXggNWVkNmVjZTU1NS4uMjhiMzQ4NmI5ZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2 ZW50X3RyaWdnZXIuaApAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvZGVwZW5k ZW5jeS5oIgogI2luY2x1ZGUgImNhdGFsb2cvb2JqZWN0YWRkcmVzcy5oIgogI2luY2x1ZGUgImNh dGFsb2cvcGdfZXZlbnRfdHJpZ2dlci5oIgorI2luY2x1ZGUgImxpYi9pbGlzdC5oIgogI2luY2x1 ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKICNpbmNsdWRlICJ0Y29wL2NtZHRhZy5oIgogI2luY2x1 ZGUgInRjb3AvZGVwYXJzZV91dGlsaXR5LmgiCkBAIC0yOSw2ICszMCw0NCBAQCB0eXBlZGVmIHN0 cnVjdCBFdmVudFRyaWdnZXJEYXRhCiAJQ29tbWFuZFRhZwl0YWc7CiB9IEV2ZW50VHJpZ2dlckRh dGE7CiAKK3R5cGVkZWYgc3RydWN0IEV2ZW50VHJpZ2dlclF1ZXJ5U3RhdGUKK3sKKwkvKiBtZW1v cnkgY29udGV4dCBmb3IgdGhpcyBzdGF0ZSdzIG9iamVjdHMgKi8KKwlNZW1vcnlDb250ZXh0IGN4 dDsKKworCS8qIHNxbF9kcm9wICovCisJc2xpc3RfaGVhZAlTUUxEcm9wTGlzdDsKKwlib29sCQlp bl9zcWxfZHJvcDsKKworCS8qIHRhYmxlX3Jld3JpdGUgKi8KKwlPaWQJCQl0YWJsZV9yZXdyaXRl X29pZDsJLyogSW52YWxpZE9pZCwgb3Igc2V0IGZvciB0YWJsZV9yZXdyaXRlCisJCQkJCQkJCQkg KiBldmVudCAqLworCWludAkJCXRhYmxlX3Jld3JpdGVfcmVhc29uOwkvKiBBVF9SRVdSSVRFIHJl YXNvbiAqLworCisJLyogU3VwcG9ydCBmb3IgY29tbWFuZCBjb2xsZWN0aW9uICovCisJYm9vbAkJ Y29tbWFuZENvbGxlY3Rpb25JbmhpYml0ZWQ7CisJQ29sbGVjdGVkQ29tbWFuZCAqY3VycmVudENv bW1hbmQ7CisJTGlzdAkgICAqY29tbWFuZExpc3Q7CS8qIGxpc3Qgb2YgQ29sbGVjdGVkQ29tbWFu ZDsgc2VlCisJCQkJCQkJCSAqIGRlcGFyc2VfdXRpbGl0eS5oICovCisJc3RydWN0IEV2ZW50VHJp Z2dlclF1ZXJ5U3RhdGUgKnByZXZpb3VzOworfSBFdmVudFRyaWdnZXJRdWVyeVN0YXRlOworCisv KiBTdXBwb3J0IGZvciBkcm9wcGVkIG9iamVjdHMgKi8KK3R5cGVkZWYgc3RydWN0IFNRTERyb3BP YmplY3QKK3sKKwlPYmplY3RBZGRyZXNzIGFkZHJlc3M7CisJY29uc3QgY2hhciAqc2NoZW1hbmFt ZTsKKwljb25zdCBjaGFyICpvYmpuYW1lOworCWNvbnN0IGNoYXIgKm9iamlkZW50aXR5OworCWNv bnN0IGNoYXIgKm9iamVjdHR5cGU7CisJTGlzdAkgICAqYWRkcm5hbWVzOworCUxpc3QJICAgKmFk ZHJhcmdzOworCWJvb2wJCW9yaWdpbmFsOworCWJvb2wJCW5vcm1hbDsKKwlib29sCQlpc3RlbXA7 CisJc2xpc3Rfbm9kZQluZXh0OworfSBTUUxEcm9wT2JqZWN0OworCiAjZGVmaW5lIEFUX1JFV1JJ VEVfQUxURVJfUEVSU0lTVEVOQ0UJMHgwMQogI2RlZmluZSBBVF9SRVdSSVRFX0RFRkFVTFRfVkFM CQkJMHgwMgogI2RlZmluZSBBVF9SRVdSSVRFX0NPTFVNTl9SRVdSSVRFCQkweDA0CkBAIC03MSw3 ICsxMTAsMTIgQEAgZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVjdFNpbXBsZUNvbW1hbmQo T2JqZWN0QWRkcmVzcyBhZGRyZXNzLAogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJs ZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclRh YmxlUmVsaWQoT2lkIG9iamVjdElkKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RB bHRlclRhYmxlU3ViY21kKE5vZGUgKnN1YmNtZCwKLQkJCQkJCQkJCQkJCU9iamVjdEFkZHJlc3Mg YWRkcmVzcyk7CisJCQkJCQkJCQkJCQlPYmplY3RBZGRyZXNzIGFkZHJlc3MsCisJCQkJCQkJCQkJ CQlib29sIHJld3JpdGUpOworCitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclR5cGVTdGFy dChBbHRlclRhYmxlQ21kICpzdWJjbWQsIFJlbGF0aW9uIHJlbCk7CitleHRlcm4gdm9pZCBFdmVu dFRyaWdnZXJBbHRlclR5cGVFbmQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJlc3Ms CisJCQkJCQkJCQkgYm9vbCByZXdyaXRlKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVy VGFibGVFbmQodm9pZCk7CiAKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RHcmFudChJ bnRlcm5hbEdyYW50ICppc3RtdCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFy c2VfdXRpbGl0eS5oIGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaAppbmRleCBi NTg1ODEwYjlhLi4xODMxZWM5YWFlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFy c2VfdXRpbGl0eS5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKQEAg LTM5LDYgKzM5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQ29sbGVjdGVkQVRTdWJjbWQKIHsKIAlPYmpl Y3RBZGRyZXNzIGFkZHJlc3M7CQkvKiBhZmZlY3RlZCBjb2x1bW4sIGNvbnN0cmFpbnQsIGluZGV4 LCAuLi4gKi8KIAlOb2RlCSAgICpwYXJzZXRyZWU7CisJY2hhcgkgICAqdXNpbmdleHByOwogfSBD b2xsZWN0ZWRBVFN1YmNtZDsKIAogdHlwZWRlZiBzdHJ1Y3QgQ29sbGVjdGVkQ29tbWFuZApAQCAt NjIsNiArNjMsNyBAQCB0eXBlZGVmIHN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kCiAJCXsKIAkJCU9p ZAkJCW9iamVjdElkOwogCQkJT2lkCQkJY2xhc3NJZDsKKwkJCWJvb2wJCXJld3JpdGU7CiAJCQlM aXN0CSAgICpzdWJjbWRzOwogCQl9CQkJYWx0ZXJUYWJsZTsKIAotLSAKMi4zNC4xCgo= --_005_OS0PR01MB5716A47D23EFAF988475D4A99431AOS0PR01MB5716jpnp_--