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 1oNvCU-0008Hs-HP for pgsql-hackers@arkaria.postgresql.org; Tue, 16 Aug 2022 11:57: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 1oNvCS-0006Nr-Lv for pgsql-hackers@arkaria.postgresql.org; Tue, 16 Aug 2022 11:57:36 +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 1oNvCR-0006Nh-9F for pgsql-hackers@lists.postgresql.org; Tue, 16 Aug 2022 11:57:36 +0000 Received: from esa18.fujitsucc.c3s2.iphmx.com ([216.71.158.38]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oNvCL-0000oV-39 for pgsql-hackers@lists.postgresql.org; Tue, 16 Aug 2022 11:57:34 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=fujitsu.com; i=@fujitsu.com; q=dns/txt; s=fj1; t=1660651050; x=1692187050; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=NC9NUGeiIHvGEW5/UxsCwcKQ7yX/J10u/Dn2r/ow0E0=; b=H9dKeEEK0x28P1dwUt/8xyQlpiojUaDFjjB389WYVfTaMQ9y3CcbCuJb wJxlgfRv28n0fOgMszdLemmjz/EQSa6mVhqMhRitqWAviuCA1EYKev0fv 4Udtb2poU8wrZJb3xeA6qzAQVnsawkRvrE8h5JOt2wUs8PaYZnjnFeRRc K+d+wf34JDQwtK4s9qE948FVXI2dutRLtxq8E3lh2iVIY+KV5Zl1mf5Vw 3IcDqPnStNucK7wuksBQWgCBuiGaFsYw9GHHFtcSaC2K8RU8L3Rc9G50F yF+NF7L4TPMV9VnIeLzPdPHIyQ2W09/0SNjGC6ZHFhlD7CHNua1cHmXgr w==; X-IronPort-AV: E=McAfee;i="6400,9594,10440"; a="64382755" X-IronPort-AV: E=Sophos;i="5.93,240,1654527600"; d="scan'208,223";a="64382755" Received: from mail-tycjpn01lp2168.outbound.protection.outlook.com (HELO JPN01-TYC-obe.outbound.protection.outlook.com) ([104.47.23.168]) by ob1.fujitsucc.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Aug 2022 20:57:22 +0900 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fUrhfl8KVPFXVLqd+uqw0oydUts+mHzgUAni7EWiSH6LGib3Fi97MOXieHbZE+z+1nMsyZplUHknFdoVnaR/IzDAKUXhKLB745AEZo7r6yd/l7Mu9SbQY73uaH1B1yvWpNyD1LSK0UtgFDqQ1x4lTEOda6pwKsUerHe8a3rpgfnJBe88Rccji3RNWStn76ZHAKBHaExT0nHsbh0I3yIgrT/cMGztjh2sXH1Zj0Bp4xolStuweFvetXgUoBO9JbVF7t+BScMQq2Gh3ZNfQyp8G1Duc8IBg42bKMPI3W69LzzUMFtYyz8ejr7n9ubiM18J16457FxyInnz92b7bAh4fA== 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=Oj04FLeuYhKLvMbgv9vlLVXrBT6S6GguBsxQhKFcBhg=; b=RgAYFm+WrzGTI80XDVNXAczdT8g4NNVat5panODtu1wxdb0ZBjnVxX24EOHEDzspqyBCIXxO1K3fFLxUxEvOfECyGsFmjwtWl0fCJFy2v9bDGeEyPYfB+TXhYP77pxbiRbbhjtO+S/S+Zzo2wG8mQpNYAZ13uXsCW3qpLVFsw8AgtPF2nX7ALCpW1gka2pDkB7ifIjMErpE1dD/UOjemVvlIes88XdsXwYyWus/teau1ZQx3yh7i9fV4BCu7nVsOD3SUGDtGnlx0tRmt3IfMnAPb0P6m6gfY6hMsOwIqnYFoxtXNNVPuNo8lEvWMZ5zZQiyjv04Gb8lzFV3T4YWbsQ== 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 OSZPR01MB6568.jpnprd01.prod.outlook.com (2603:1096:604:fc::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5525.10; Tue, 16 Aug 2022 11:57:17 +0000 Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::558e:85ac:20d8:d8c4]) by OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::558e:85ac:20d8:d8c4%5]) with mapi id 15.20.5504.028; Tue, 16 Aug 2022 11:57:17 +0000 From: "houzj.fnst@fujitsu.com" To: Ajin Cherian , Peter Smith CC: Amit Kapila , Masahiko Sawada , Japin Li , Alvaro Herrera , Dilip Kumar , rajesh singarapu , PostgreSQL Hackers , Zheng Li Subject: RE: Support logical replication of DDLs Thread-Topic: Support logical replication of DDLs Thread-Index: AQHYJz33Pggarn88u0G0lS13R7uLfKy9TlgAgAVZmgCAAA2xAIABMlkAgACE3QCAAKgDAIAAduOAgABm6oCABIs+AIACG98AgBfo2QCABsLLgIAyhVqAgBOd9QCAAOYWgIAAPoOAgAUH2oCABQvawIAPYMWAgAHJ99CAAn9yAIAAPzmAgAQqm4CAA6XiQIACJNSQgAsCywCAAPmNAIAAalXwgAAWjQCACT8UwIAEWbkAgAam+gCADNiE8IAMBWyAgAZSRYCAAW8VgIAE96WAgA0v9QCABHneQA== Date: Tue, 16 Aug 2022 11:57:17 +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?NTBfQWN0aW9uSWQ9YmY5YTMyM2MtNmRlOS00YmY0LTkwNzUtZmVhMGJlY2My?= =?utf-8?B?YTdlO01TSVBfTGFiZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRm?= =?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?ZWNlMDUwX1NldERhdGU9MjAyMi0wOC0xNlQxMTo0Nzo0Mlo7TVNJUF9MYWJl?= =?utf-8?B?bF9hNzI5NWNjMS1kMjc5LTQyYWMtYWI0ZC0zYjBmNGZlY2UwNTBfU2l0ZUlk?= =?utf-8?Q?=3Da19f121d-81e1-4858-a9d8-736e267fd4c7;?= authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=fujitsu.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: c366f5a2-ae8f-4a30-7b5c-08da7f7e775e x-ms-traffictypediagnostic: OSZPR01MB6568:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: QEMd0IqUE0Y59eZuJihB6i2M0RqU7kc9R7Gb/TPxx08H7x4J7+FOXivrX0+CuHqnpsGFkEmg0N3j7y9BSB5z/41aUqkmCe/hJvrrbqumP2gUZGLRp2ibvfNWAyJ1mZE9oJvzwADua4+QBC+mBQURmNBT39dBGwM1TOtRFUQzOjzR8VbjDxGl7FD+N7LOFstomw96wg4Jo/Lc12GN2H+xD9+BtTuXt61yN5DN/THLokaTSiF95NTcvi49qv8t4HDT30y3l4flqGhnFk3fG8L9tVzlurMhVCzgzSL6geI9sJBmkVOJMsHtWpQRXRpToW1GPA34d7tvplaQBz2Hw5jlqnm1eSOKEZYqVp6MQQoC+OCY4FSi8HPOV+Fa1VjF/MhDlcpafvpqAsFonwztOPdIyAejGjZISepuQW1s7R3RThQWzWqL1FKdqlQ1RVtBWLi5vcPu62IeU4A4YPS+Lv/DkHNPiE8NOBnircys7OkFaywSRaKZVC6qN0PXEQLW+Y92FX7syDMUjeLknL3QX8DDu5apI/jQmq+xTsJXv8I+On8TZSynKhFRMPDJqYg/4RDiOhhDBDTOcJcn+g5vmgPyfq/xXpmZ2hKa8Lh5VwHz97UqdFBVOJt4mj2yLCfSBjeDjOjPZTKq2Fq5DOWKlmzYs3dDn3vbMjn5c2Vbfb1OuzPlsfnZFv40i95F4LXseRWGmk/SKfWZz2JKS1khRFuTo5Bktu3mhJRUzwliKNQy+jcKR9pP4ThV8catThOEY5XltLBPcIalvQwnUTlrShLYbJHlxnWSZSEBBHiFMgKnHMZ4znz9AMFSmy3Vr9MCgw5PX9MLBqMzVtqXks/ztyF88Q== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:OS0PR01MB5716.jpnprd01.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(366004)(346002)(136003)(396003)(39860400002)(376002)(85182001)(76116006)(2906002)(38100700002)(4744005)(55016003)(7416002)(186003)(122000001)(4326008)(33656002)(26005)(9686003)(86362001)(41300700001)(8936002)(82960400001)(5660300002)(6506007)(7696005)(53546011)(52536014)(54906003)(478600001)(8676002)(110136005)(66476007)(66556008)(1580799003)(316002)(64756008)(66446008)(66946007)(71200400001)(38070700005)(99936003);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?VVdUMVFWSmlBZGY4SUl2TFpvY20zM0xLZDRQQlBLWWlCd3EvcjBxWjZWU0x5?= =?utf-8?B?M0NPc2xpTVpDcHMrTXRUakdrVmhSNG81TjZTSHJ5b0ZITzh3dmd0ZFcwTTF3?= =?utf-8?B?Vm54QUpnbGlwN3BtTkFZcWJia3FRRm1TZTV1SDBGelhPNS9nNU9uRzZDZFRz?= =?utf-8?B?M2tFWWFGeGhRTGxiWFVLMTdRcGQvRmJ4MmpvOFdDeHhMQW90QVN4L0F4WTFD?= =?utf-8?B?UlRjY3Q2YWNHWVozOVNja0dxRnlMMys1Y3JqSzZMQlBWMGUxSGdhSFdkL2Yr?= =?utf-8?B?bzJiM09lR3FxYVovVmgrQlpJUmdJK3h6cmU0c0tpdzZBbjhoVmRyLzdnaGYr?= =?utf-8?B?cDRJR20rMzFXQUxFOHJxK3o5eWxaRjhVK0JOM2FJWG5iczNpVDN0alhxdjQv?= =?utf-8?B?dmQrejQxL0I3Y3hEbnJBK2dMZFdsOEI4MHdra3docEY2TU03dVlkRXIweE5Z?= =?utf-8?B?Tm1aZU1jeEIrT2NodFNPdk82eEV1WUlOdm5PVnpuamtESll6RHZHcmE1T3d4?= =?utf-8?B?ZC94L3pFMXFCcWc1dTBZaDZkY2htR01JVWdVN0dVTzQ3c3dxK1Q1dWEyT1VK?= =?utf-8?B?dmVZMHNKMlliOVdMYjVYWnd4VWNMWm9MeUhGck9pZWEySHFXWnpBUjZrZ0s3?= =?utf-8?B?NXAvallaOXBUTjlUa1k0MjQ5dmM2a2pzcm0yT2kvSGFGazdFZjNnUUt2Zkxj?= =?utf-8?B?eW9yU2t2ZUp3NGJDY1NsSHpKYW5peDlRWGQ4ZnUvR2psUExZSnJMOHY3UERn?= =?utf-8?B?dFZIRzR6VTA3RnNBK2tqSUxWZmZvV0U4SzJndEJVVHZ4VjZDazlaYXAzVUda?= =?utf-8?B?NzFkazU5MEFTcjljbXc2RWlsQittd1ZSOG5FTHEzSTVFa3lWeTB5VUUvM21q?= =?utf-8?B?dnFFRXNLZHMvWUdJQ3J4ZmtKSUo2a2V2ajY4OE10SWFqQzROeEdLQU0wWkRY?= =?utf-8?B?alJjck9qdmZrbjc1dWg4SVgvSk1CVys4N2x3SzIxa2YwM3h2SW9IdWE1M2pB?= =?utf-8?B?OHlGNUVFVUl5YlZxdDFzSHZUdXd0V2Q4OC9TdkhpWUE2M1MzZm1DMkNDSndU?= =?utf-8?B?WUhsQWlPZGhzc1QrckdFc0s0R0xYczlLTVZ3RGJoSE5EL1NXTnhDQWhXWmIv?= =?utf-8?B?aTlrODE5YlpSZkxXYTdMMUhmV0E5S2U1clZjbk90TWhpbWNFU3NhbUt2YXlB?= =?utf-8?B?NlRTcFBKR2RScjVDOFhpc0ViNmZFSGRKcUdXcDJ2b2RDbWIvN1ZjdUk0TkIr?= =?utf-8?B?NkhUR0VPakJ6MXp6dkxLQzJwZnRqWFBJOE12NlVTYTc2TnRFeDdJanVpaS9D?= =?utf-8?B?bFhDR1EwUk5oc3BLMlJwZndFM1B4YlZqQTI4WGh3QzNtZ1cvbHprRFI5UXcr?= =?utf-8?B?RklINWVRR1l1dzkxenhFTjYyc3FmZFpEZ3d6S0xaZGliYy9kMTFaSm1UeFda?= =?utf-8?B?eHg1OHhKK2I1UDFIS1dMME0rSi9aMTNYdnU3a09OWE4ybURqZTQrdW8wd3V5?= =?utf-8?B?RDU5dlllT0w3OFhGR1JHcWRUYkVybjdGZGptc0dXWHhwejQ5cS8ramowb3Bq?= =?utf-8?B?N0wzOVFQNjVmNFdweUFhZnJ4MzVsT1pxWThYcWhTWStsazVhVXdVRnF4NzdG?= =?utf-8?B?WGhJWk9zTUxUYVlyRHBycVpITTA0byttOUJyNnZmOFp0QnFMSmR1VEwxZGpr?= =?utf-8?B?WTh3dW12VzQzVkdnQStjaXp2RWpqWlNOL2dzcXFNek9SaGNXejhORnRvNmVm?= =?utf-8?B?NE52ZklBdm5NZnZoeHdFRzBnZ05GOTVEbmxacDhJVk1TRlUwUEU4VTlTQXJ1?= =?utf-8?B?bFBpYnA1VDRtcGpxbS9xR2Y1NzNqZk1SNnRXVDB4VklkeHBqRnRZeXpWcDg3?= =?utf-8?B?cHJ3ZldRVS9uUVZxMFJaNjFaZmVmUFF3UXpnbkh1Nmp0ejRtcTlGTjY3VWdk?= =?utf-8?B?Y2tDcnVHYlFkck44SzRCMFB0c2JYaGtqUFkvZ3NXVVVjWHFWNXJjRnFwRGlT?= =?utf-8?B?Q1BwcER2YmJvckx5LzRITUN6QzdyMHRUVGt1eVJReDJ2TXpsWXFYdU8vZ0NV?= =?utf-8?B?c3RWU1hvV3ZtK053K3hxR1g3aWN1OXl1eksza0gzYS84QzJkNzViZVUvVHhX?= =?utf-8?Q?IRSvCG/hpY1hye9yRJhg1yqPi?= Content-Type: multipart/mixed; boundary="_005_OS0PR01MB5716052AD854FBD52316C6BE946B9OS0PR01MB5716jpnp_" MIME-Version: 1.0 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: =?utf-8?B?TjJJVHM4czNsTW9xdnpUTDlZVUNTbXZTSnc5cXZuUUxHc0Rxa0ZUU21lNlZS?= =?utf-8?B?RzVpYTdrVGxUQ3BCTlNKYjlndmNjVTRjekhKRHphN1FNWUdDNWFuc0Zjc2RS?= =?utf-8?B?ZXBRekxNQmxHVkxMdzdNMEhWbzNhdUxwNlU5MWxQOFM3SVFPVnJlb3NlOTNB?= =?utf-8?B?MGUrNXhGa0dzWFhrWnd1RWNYWTQzbHZjQnhjZGxqK1l4NzN6QUxRMkt4RnZJ?= =?utf-8?B?ZG81U1RYdThKZmdQV1NWOHc5cXJhT2JZVllYMUNkcHEvejh0UzVzTUFzYVZK?= =?utf-8?B?YVNpVHZXQm1sbFd5SGRscTV5dHhFdGtIc0hzSFpuNkpYN0pxblBsYndYTDNH?= =?utf-8?B?dWFDZTlBOWVVV3NqS2Z4TlcwL1Q1ZTNxSmZrTEZPSDNUVzl4MUJJYW5saXlj?= =?utf-8?B?V3kvWmM4MjIrVlZTVytpVEtPTFlCSlBDYi82ZlE3K0s5MkFicTlYNVZYdUFH?= =?utf-8?B?dm1TQStVWWpQNVF1Z1NlVk5FSWVHSHFienVkWGFUZFV3d0syNlVxM0hOcnh0?= =?utf-8?B?Y3FmYytPc21DYjFUNzBvSXpsRCswWm9OQjl3emsrbVE1cGVrM0tCbnZWdlFn?= =?utf-8?B?emlrb3FuUkZZb2d6SkpJTUlNRVE1cUlPMVJ6UXJac3V2enF0cEZVYkRmSDI4?= =?utf-8?B?OVYrQmJZYVM4WGFtVFpkUUR1OEJtbWlJMXhqMkhuMFN4a1V1NjNwcTVjUlNT?= =?utf-8?B?N0pDNUN2elFyTUtiSmc0Uy9HRjA1TnU3UG9IaXh3eThSTUpMVkNyTjRyNnky?= =?utf-8?B?RlozVURpQ0daUWN4ek5ENHZwMXoya3E2c1RxT0QvKzYrNHY5VjhkZEU5b1Ar?= =?utf-8?B?cm82cVhNZmxVbklJSWNOUXRMMVp4YjZCTHAwWkVzVjlDZm9SY0tLN0NpcFli?= =?utf-8?B?M2lOemMxZnVoODJ0K3ZqMlZGdlZSVHkyN29QU2tjZkpyVmtOK1VNdWd2KzNQ?= =?utf-8?B?M2ZlWmR1LytiL3pxVUJNalpuWEg4cll3NFN4ZWR4QVB5MzJMSmpuUEpna2pL?= =?utf-8?B?UTllWGFxeStLSVhSRVFsdHk5T2dKcGIyY3I0OHVyMkFqM09QR0dHWktqS1or?= =?utf-8?B?Yno1Qkh4dXR2bnZRUVlrVWloRERWcEtuUDduK2h2WDRNTmplVHRFamJCdHpW?= =?utf-8?B?ZmZLY3lnNGlVc1ludGFXeExSUzBBcWVqUmtiL2VEbm5hL1p5SytNQzJxWFU4?= =?utf-8?B?WDNqcFByck1OQ2ljajdySkNNb3NZNVJEd29HajdOMEo4WC82ajhxVk8wRVFJ?= =?utf-8?B?RVZINGtpdTdVdEpMTTM3ZlFvaWx6T20zVlNjSElPQm5HL05xZ2h0b25wdzFD?= =?utf-8?B?NUxLcjJFdUVNMU1mS3JPVGpMWUpvNlplNjFlZzl1ZU5oUldxcENJcnZxd2p3?= =?utf-8?B?SEdadUJHdmFndWNJZXdmY0RQcUZrVzYvR1B5U0hVbCtvWFdWbEgvQkUrOFBs?= =?utf-8?B?QU83MVBodU50VkZuYitOK0Z0N25uZVVBQ0VJTXlhTlIrL1kza3VDWmRTWEU0?= =?utf-8?B?ZlNkSHg4bkl2TGFnMzg0R1AvYk1GUGZ6a005VFlnYnZ2Y0lHVDVVb3d0YkYv?= =?utf-8?B?eUFxNDNzWkRkUE5ZMEsxMks1T1FGcGNBUWdwQ3Y5NTlNYW9laVVNRFFRWWw5?= =?utf-8?B?SVRxNm02S2JxOUpOS2NiMzkzWXVBNElGNlcxbVhTQXVlWFY3Tzg0WTJSVTlk?= =?utf-8?B?b0tQTWxBbEJwdldSTDNrUTN6Mlk1ZnJPejRITGw2eFdnYTd2WDVQSVdBPT0=?= 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: c366f5a2-ae8f-4a30-7b5c-08da7f7e775e X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Aug 2022 11:57:17.1321 (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: k3GPTEYwX7CIXrcky9a7cq8DfJlXYmkvq70sDba9ClxE6LzKoqY+w3i1sQnQWk5ZSzYYnAAH2aVnYPHfBAw/7g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OSZPR01MB6568 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_005_OS0PR01MB5716052AD854FBD52316C6BE946B9OS0PR01MB5716jpnp_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T24gU2F0dXJkYXksIEF1Z3VzdCAxMywgMjAyMiAxMToyNyBQTSBBamluIENoZXJpYW4gPGl0c2Fq aW5AZ21haWwuY29tPiB3cm90ZToNCj4gDQo+IE9uIEZyaSwgQXVnIDUsIDIwMjIgYXQgNDowMyBQ TSBQZXRlciBTbWl0aCA8c21pdGhwYjIyNTBAZ21haWwuY29tPiB3cm90ZToNCj4gPg0KPiA+IEhp IEhvdS1zYW4sIGhlcmUgYXJlIG15IHJldmlldyBjb21tZW50cyBmb3IgdGhlIHBhdGNoIHYxNS0w MDAxOg0KPiA+IC4uLg0KPiBmaXhlZCB0aGVzZS4NCg0KQXR0YWNoIHRoZSBuZXcgdmVyc2lvbiBw YXRjaCBzZXQgd2hpY2ggYWRkZWQgc3VwcG9ydCBmb3INCkNSQUVURS9BTFRFUi9EUk9QIERPTUFJ TiBhbmQNCkNSRUFURS9BTFRFUi9EUk9QIFRZUEUuDQoNClRoYW5rcyB0byBWaWduZXNoIGFuZCBB amluIGZvciBoZWxwaW5nIHRvIHdyaXRlDQp0aGUgbmV3IHZlcnNpb24gcGF0Y2ggc2V0Lg0KDQpC ZXN0IHJlZ2FyZHMsDQpIb3UgemoNCg== --_005_OS0PR01MB5716052AD854FBD52316C6BE946B9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v18-0001-Functions-to-deparse-DDL-commands.patch" Content-Description: v18-0001-Functions-to-deparse-DDL-commands.patch Content-Disposition: attachment; filename="v18-0001-Functions-to-deparse-DDL-commands.patch"; size=229048; creation-date="Tue, 16 Aug 2022 11:56:00 GMT"; modification-date="Tue, 16 Aug 2022 11:57:13 GMT" Content-Transfer-Encoding: base64 RnJvbSA3MTY1MjI0ZDYyZTEyODc5Yjg2MDgwZGE2YTYwYzQyZTY1N2FmOWE0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IEZyaSwgMTIgQXVnIDIwMjIgMDk6NTM6NDYgLTA0MDAKU3ViamVjdDogW1BBVENI IHYxOCAxLzRdIEZ1bmN0aW9ucyB0byBkZXBhcnNlIERETCBjb21tYW5kcy4KClRoaXMgcGF0Y2gg cHJvdmlkZXMgSlNPTiBibG9icyByZXByZXNlbnRpbmcgRERMIGNvbW1hbmRzLCB3aGljaCBjYW4K bGF0ZXIgYmUgcmUtcHJvY2Vzc2VkIGludG8gcGxhaW4gc3RyaW5ncyBieSB3ZWxsLWRlZmluZWQg c3ByaW50Zi1saWtlCmV4cGFuc2lvbi4gVGhlc2UgSlNPTiBvYmplY3RzIGFyZSBpbnRlbmRlZCB0 byBhbGxvdyBmb3IgbWFjaGluZS1lZGl0aW5nIG9mCnRoZSBjb21tYW5kcywgYnkgcmVwbGFjaW5n IGNlcnRhaW4gbm9kZXMgd2l0aGluIHRoZSBvYmplY3RzLgoKTXVjaCBvZiB0aGUgaW5mb3JtYXRp b24gaW4gdGhlIG91dHB1dCBibG9iIGFjdHVhbGx5IGNvbWVzIGZyb20gc3lzdGVtCmNhdGFsb2dz LCBub3QgZnJvbSB0aGUgY29tbWFuZCBwYXJzZSBub2RlLCBhcyBpdCBpcyBpbXBvc3NpYmxlIHRv IHJlbGlhYmx5CmNvbnN0cnVjdCBhIGZ1bGx5LXNwZWNpZmllZCBjb21tYW5kIChpLmUuIG9uZSBu b3QgZGVwZW5kZW50IG9uIHNlYXJjaF9wYXRoCmV0YykgbG9va2luZyBvbmx5IGF0IHRoZSBwYXJz ZSBub2RlLgoKVGhpcyBwcm92aWRlcyBhIGJhc2UgZm9yIGxvZ2ljYWwgcmVwbGljYXRpb24gb2Yg RERMIHN0YXRlbWVudHMuIEN1cnJlbnRseSwKdGhlIHBhdGNoIGhhcyBzdXBwb3J0IGZvcjoKCkNS RUFURS9BTFRFUi9EUk9QIFRBQkxFIC0tIE5vdGUgIzEsIE5vdGUgIzIKQ1JFQVRFL0FMVEVSL0RS T1AgU0VRVUVOQ0UKQ1JFQVRFL0FMVEVSL0RST1AgU0NIRU1BCkNSRUFURS9BTFRFUiBGVU5DVElP Ti9QUk9DRURVUkUKQ1JFQVRFL0FMVEVSIFRSSUdHRVIKQ1JFQVRFL0RST1AgSU5ERVgKQ1JFQVRF L0RST1AgT1BFUkFUT1IgW0NMQVNTL0ZBTUlMWV0KQ1JFQVRFL0FMVEVSL0RST1AgQ0FTVApDUkVB VEUvQUxURVIvRFJPUCBET01BSU4KQ1JFQVRFL0FMVEVSL0RST1AgVFlQRQoKKE5vdGUgIzEpIE5v dGUgdGhhdCBzb21lIHJlY2VudGx5IGludHJvZHVjZWQgRERMcyhlLmcuIERETHMgcmVsYXRlZCB0 bwpQQVJUSVRJT05FRCBUQUJMRSkgYXJlIHVuc3VwcG9ydGVkLiBXZSBjYW4gZXh0ZW5kIGl0IGFz IHdlIG5lZWQgbW9yZQpmdW5jdGlvbmFsaXR5IGZvciBEREwgcmVwbGljYXRpb24uCgooTm90ZSAj MikgTm90ZSB0aGF0LCBmb3IgQVRUQUNIL0RFVEFDSCBQQVJUSVRJT04sIHdlIGhhdmVuJ3QgYWRk ZWQgZXh0cmEgbG9naWMgb24Kc3Vic2NyaWJlciB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhl IHRhYmxlIG9uIHB1Ymxpc2hlciBpcyBhIFBBUlRJVElPTkVEClRBQkxFIHdoaWxlIHRoZSB0YXJn ZXQgdGFibGUgb24gc3ViY3JpYmVyIHNpZGUgaXMgTk9STUFMIHRhYmxlLiBXZSB3aWxsCnJlc2Vh cmNoIHRoaXMgbW9yZSBhbmQgaW1wcm92ZSB0aGlzIGxhdGVyLgotLS0KIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL01ha2VmaWxlICAgICAgIHwgICAgMiArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxf ZGVwYXJzZS5jICB8IDY0NDEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNy Yy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMgICAgIHwgIDc2MyArKysrKwogc3JjL2JhY2tl bmQvY29tbWFuZHMvc2VxdWVuY2UuYyAgICAgfCAgIDMzICsKIHNyYy9iYWNrZW5kL3V0aWxzL2Fk dC9mb3JtYXRfdHlwZS5jIHwgICAgMyArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ3Byb2Mu YyAgICAgfCAgIDUyICsKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyAgIHwgIDE0 OSArLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgfCAgICA2ICsKIHNyYy9p bmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmggICAgIHwgICAgMSArCiBzcmMvaW5jbHVkZS90Y29w L2RkbF9kZXBhcnNlLmggICAgICB8ICAgMjMgKwogc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0 aWxpdHkuaCAgfCAgICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmggICAgICAgIHwg ICAgMiArCiBzcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaCAgICAgICB8ICAgMTMgKwogc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgfCAgICA0ICsKIDE0IGZpbGVzIGNoYW5n ZWQsIDc0MjMgaW5zZXJ0aW9ucygrKSwgNzAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA3 NTUgc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv aW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmgKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCmluZGV4IDQ4Zjcz NDguLjE3MWRmYjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCkBAIC0yOSw2ICsyOSw4IEBAIE9CSlMg PSBcCiAJY29weXRvLm8gXAogCWNyZWF0ZWFzLm8gXAogCWRiY29tbWFuZHMubyBcCisJZGRsX2Rl cGFyc2UubyBcCisJZGRsX2pzb24ubyBcCiAJZGVmaW5lLm8gXAogCWRpc2NhcmQubyBcCiAJZHJv cGNtZHMubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDc1 NQppbmRleCAwMDAwMDAwLi4wZGJlMWM5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvZGRsX2RlcGFyc2UuYwpAQCAtMCwwICsxLDY0NDEgQEAKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICoKKyAqIGRkbF9kZXBhcnNlLmMKKyAqCSAgRnVuY3Rpb25zIHRvIGNvbnZlcnQgdXRp bGl0eSBjb21tYW5kcyB0byBtYWNoaW5lLXBhcnNlYWJsZQorICoJICByZXByZXNlbnRhdGlvbgor ICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdl bnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBOT1RFUworICoKKyAq IFRoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBKU09OIGJsb2JzIHJlcHJlc2VudGluZyBEREwg Y29tbWFuZHMsIHdoaWNoIGNhbgorICogbGF0ZXIgYmUgcmUtcHJvY2Vzc2VkIGludG8gcGxhaW4g c3RyaW5ncyBieSB3ZWxsLWRlZmluZWQgc3ByaW50Zi1saWtlCisgKiBleHBhbnNpb24uICBUaGVz ZSBKU09OIG9iamVjdHMgYXJlIGludGVuZGVkIHRvIGFsbG93IGZvciBtYWNoaW5lLWVkaXRpbmcg b2YKKyAqIHRoZSBjb21tYW5kcywgYnkgcmVwbGFjaW5nIGNlcnRhaW4gbm9kZXMgd2l0aGluIHRo ZSBvYmplY3RzLgorICoKKyAqIE11Y2ggb2YgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBvdXRwdXQg YmxvYiBhY3R1YWxseSBjb21lcyBmcm9tIHN5c3RlbQorICogY2F0YWxvZ3MsIG5vdCBmcm9tIHRo ZSBjb21tYW5kIHBhcnNlIG5vZGUsIGFzIGl0IGlzIGltcG9zc2libGUgdG8gcmVsaWFibHkKKyAq IGNvbnN0cnVjdCBhIGZ1bGx5LXNwZWNpZmllZCBjb21tYW5kIChpLmUuIG9uZSBub3QgZGVwZW5k ZW50IG9uIHNlYXJjaF9wYXRoCisgKiBldGMpIGxvb2tpbmcgb25seSBhdCB0aGUgcGFyc2Ugbm9k ZS4KKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxf ZGVwYXJzZS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jl cy5oIgorI2luY2x1ZGUgInRjb3AvZGRsX2RlcGFyc2UuaCIKKyNpbmNsdWRlICJhY2Nlc3MvYW1h cGkuaCIKKyNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKKyNpbmNsdWRlICJhY2Nlc3MvcmVsYXRp b24uaCIKKyNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5oIgorI2luY2x1ZGUgImNhdGFsb2cv cGdfYW0uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2F0dHJpYnV0ZS5oIgorI2luY2x1ZGUgImNh dGFsb2cvcGdfY2FzdC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY2xhc3MuaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29uc3RyYWlu dC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfZGVwZW5kLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9w Z19pbmhlcml0cy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfbGFuZ3VhZ2UuaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX25hbWVzcGFjZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BjbGFzcy5o IgorI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BlcmF0b3IuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3Bn X29wZmFtaWx5LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wcm9jLmgiCisjaW5jbHVkZSAiY2F0 YWxvZy9wZ19yYW5nZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfc2VxdWVuY2UuaCIKKyNpbmNs dWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKKyNp bmNsdWRlICJjb21tYW5kcy9zZXF1ZW5jZS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlc3Bh Y2UuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAibGliL2lsaXN0LmgiCisjaW5j bHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCisj aW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgorI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6 ZXIuaCIKKyNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmgiCisjaW5jbHVkZSAidXRp bHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgorI2luY2x1ZGUgInV0 aWxzL2d1Yy5oIgorI2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5 c2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9y ZWwuaCIKKyNpbmNsdWRlICJ1dGlscy9ydWxldXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9zeXNj YWNoZS5oIgorCisvKiBFc3RpbWF0ZWQgbGVuZ3RoIG9mIHRoZSBnZW5lcmF0ZWQganNvbmIgc3Ry aW5nICovCisjZGVmaW5lIEpTT05CX0VTVElNQVRFRF9MRU4gMTI4CisKKy8qCisgKiBCZWZvcmUg dGhleSBhcmUgdHVybmVkIGludG8gSlNPTkIgcmVwcmVzZW50YXRpb24sIGVhY2ggY29tbWFuZCBp cworICogcmVwcmVzZW50ZWQgYXMgYW4gb2JqZWN0IHRyZWUsIHVzaW5nIHRoZSBzdHJ1Y3RzIGJl bG93LgorICovCit0eXBlZGVmIGVudW0KK3sKKwlPYmpUeXBlTnVsbCwKKwlPYmpUeXBlQm9vbCwK KwlPYmpUeXBlU3RyaW5nLAorCU9ialR5cGVBcnJheSwKKwlPYmpUeXBlSW50ZWdlciwKKwlPYmpU eXBlRmxvYXQsCisJT2JqVHlwZU9iamVjdAorfSBPYmpUeXBlOworCit0eXBlZGVmIHN0cnVjdCBP YmpUcmVlCit7CisJc2xpc3RfaGVhZAlwYXJhbXM7CisJaW50CQkJbnVtUGFyYW1zOworCVN0cmlu Z0luZm8JZm10aW5mbzsKKwlib29sCQlwcmVzZW50OworfSBPYmpUcmVlOworCit0eXBlZGVmIHN0 cnVjdCBPYmpFbGVtCit7CisJY2hhcgkgICAqbmFtZTsKKwlPYmpUeXBlCQlvYmp0eXBlOworCisJ dW5pb24KKwl7CisJCWJvb2wJCWJvb2xlYW47CisJCWNoYXIJICAgKnN0cmluZzsKKwkJaW50NjQJ CWludGVnZXI7CisJCWZsb2F0OAkJZmx0OworCQlPYmpUcmVlCSAgICpvYmplY3Q7CisJCUxpc3QJ ICAgKmFycmF5OworCX0gdmFsdWU7CisJc2xpc3Rfbm9kZQlub2RlOworfSBPYmpFbGVtOworCiti b29sIHZlcmJvc2UgPSB0cnVlOworCitzdGF0aWMgdm9pZCBhcHBlbmRfYXJyYXlfb2JqZWN0KE9i alRyZWUgKnRyZWUsIGNoYXIgKm5hbWUsIExpc3QgKmFycmF5KTsKK3N0YXRpYyB2b2lkIGFwcGVu ZF9ib29sX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpuYW1lLCBib29sIHZhbHVlKTsKK3N0 YXRpYyB2b2lkIGFwcGVuZF9mbG9hdF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqbmFtZSwg ZmxvYXQ4IHZhbHVlKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9udWxsX29iamVjdChPYmpUcmVlICp0 cmVlLCBjaGFyICpuYW1lKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9vYmplY3Rfb2JqZWN0KE9ialRy ZWUgKnRyZWUsIGNoYXIgKm5hbWUsIE9ialRyZWUgKnZhbHVlKTsKK3N0YXRpYyBjaGFyICphcHBl bmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCk7 CitzdGF0aWMgdm9pZCBhcHBlbmRfcHJlbWFkZV9vYmplY3QoT2JqVHJlZSAqdHJlZSwgT2JqRWxl bSAqZWxlbSk7CitzdGF0aWMgdm9pZCBhcHBlbmRfc3RyaW5nX29iamVjdChPYmpUcmVlICp0cmVl LCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSk7CitzdGF0aWMgdm9pZCBmb3JtYXRfdHlwZV9kZXRh aWxlZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QsCisJCQkJCQkJCSBPaWQgKm5zcGlkLCBj aGFyICoqdHlwbmFtZSwgY2hhciAqKnR5cGVtb2RzdHIsCisJCQkJCQkJCSBib29sICp0eXBhcnJh eSk7CitzdGF0aWMgTGlzdCAqRnVuY3Rpb25HZXREZWZhdWx0cyh0ZXh0ICpwcm9hcmdkZWZhdWx0 cyk7CitzdGF0aWMgT2JqRWxlbSAqbmV3X29iamVjdChPYmpUeXBlIHR5cGUsIGNoYXIgKm5hbWUp Oworc3RhdGljIE9iakVsZW0gKm5ld19vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnZhbHVlKTsKK3N0 YXRpYyBPYmpUcmVlICpuZXdfb2JqdHJlZV9WQShjaGFyICpmbXQsIGludCBudW1vYmpzLC4uLik7 CitzdGF0aWMgT2JqRWxlbSAqbmV3X3N0cmluZ19vYmplY3QoY2hhciAqdmFsdWUpOworc3RhdGlj IEpzb25iVmFsdWUgKm9ianRyZWVfdG9fanNvbmJfcmVjKE9ialRyZWUgKnRyZWUsIEpzb25iUGFy c2VTdGF0ZSAqc3RhdGUpOworc3RhdGljIHZvaWQgcGdfZ2V0X2luZGV4ZGVmX2RldGFpbGVkKE9p ZCBpbmRleHJlbGlkLAorCQkJCQkJCQkJIGNoYXIgKippbmRleF9hbSwKKwkJCQkJCQkJCSBjaGFy ICoqZGVmaW5pdGlvbiwKKwkJCQkJCQkJCSBjaGFyICoqcmVsb3B0aW9ucywKKwkJCQkJCQkJCSBj aGFyICoqdGFibGVzcGFjZSwKKwkJCQkJCQkJCSBjaGFyICoqd2hlcmVDbGF1c2UpOworc3RhdGlj IGNoYXIgKlJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIg YXR0bm8sCisJCQkJCQkJCQkgIExpc3QgKmRwY29udGV4dCwgTGlzdCAqKmV4cHJzKTsKK3N0YXRp YyBjb25zdCBjaGFyICpzdHJpbmdpZnlfb2JqdHlwZShPYmplY3RUeXBlIG9ianR5cGUpOworCitz dGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9Db2x1bW5EZWYoUmVsYXRpb24gcmVsYXRpb24sIExpc3Qg KmRwY29udGV4dCwgYm9vbCBjb21wb3NpdGUsCisJCQkJCQkJCSAgQ29sdW1uRGVmICpjb2xkZWYs IGJvb2wgaXNfYWx0ZXIsIExpc3QgKipleHBycyk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9D b2x1bW5JZGVudGl0eShPaWQgc2VxcmVsaWQsIGNoYXIgaWRlbnRpdHksIGJvb2wgYWx0ZXJfdGFi bGUpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfQ29sdW1uU2V0T3B0aW9ucyhBbHRlclRhYmxl Q21kICpzdWJjbWQpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9PcGVyYXRv cihPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVw YXJzZV9EZWZpbmVTdG10X1R5cGUoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpOwor CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZFbGVtKERlZkVsZW0gKmVsZW0sIGJvb2wgaXNf cmVzZXQpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRnVuY3Rpb25TZXQoVmFyaWFibGVTZXRL aW5kIGtpbmQsIGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBh cnNlX09uQ29tbWl0Q2xhdXNlKE9uQ29tbWl0QWN0aW9uIG9wdGlvbik7CitzdGF0aWMgT2JqVHJl ZSAqZGVwYXJzZV9SZWxTZXRPcHRpb25zKEFsdGVyVGFibGVDbWQgKnN1YmNtZCk7CisKK3N0YXRp YyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfQ2FjaGUoT2JqVHJlZSAqcGFyZW50LCBGb3Jt X3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBP YmpFbGVtICpkZXBhcnNlX1NlcV9DeWNsZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVu Y2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRl cGFyc2VfU2VxX0luY3JlbWVudEJ5KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBz ZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJz ZV9TZXFfTWludmFsdWUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEs IGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9N YXh2YWx1ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBh bHRlcl90YWJsZSk7CitzdGF0aWMgT2JqRWxlbSAqZGVwYXJzZV9TZXFfT3duZWRCeShPYmpUcmVl ICpwYXJlbnQsIE9pZCBzZXF1ZW5jZUlkLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxp bmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfUmVzdGFydChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdf c2VxdWVuY2VfZGF0YSBzZXFkYXRhKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9T ZXFfU3RhcnR3aXRoKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBi b29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX1N0 b3JhZ2UoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5s aW5lIE9iakVsZW0gKmRlcGFyc2VfVHlwZV9SZWNlaXZlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9w Z190eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfU2Vu ZChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUg T2JqRWxlbSAqZGVwYXJzZV9UeXBlX1R5cG1vZF9JbihPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdf dHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX1R5cG1v ZF9PdXQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5s aW5lIE9iakVsZW0gKmRlcGFyc2VfVHlwZV9BbmFseXplKE9ialRyZWUgKnBhcmVudCwgRm9ybV9w Z190eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfU3Vi c2NyaXB0KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pOworCitzdGF0aWMg TGlzdCAqZGVwYXJzZV9JbmhSZWxhdGlvbnMoT2lkIG9iamVjdElkKTsKK3N0YXRpYyBMaXN0ICpk ZXBhcnNlX1RhYmxlRWxlbWVudHMoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKnRhYmxlRWxlbWVu dHMsIExpc3QgKmRwY29udGV4dCwKKwkJCQkJCQkJICAgYm9vbCB0eXBlZCwgYm9vbCBjb21wb3Np dGUpOworCisvKiBBcHBlbmQgYW4gYXJyYXkgcGFyYW1ldGVyIHRvIGEgdHJlZSAqLworc3RhdGlj IHZvaWQKK2FwcGVuZF9hcnJheV9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwg TGlzdCAqYXJyYXkpCit7CisJT2JqRWxlbQkqcGFyYW07CisJY2hhciAqb2JqZWN0X25hbWU7CisK KwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlpZiAobGlzdF9sZW5ndGgoYXJyYXkpID09IDApCisJCXJl dHVybjsKKworCWlmICghdmVyYm9zZSkKKwl7CisJCUxpc3RDZWxsICpsYzsKKworCQkvKiBFeHRy YWN0IHRoZSBPYmpFbGVtcyB3aG9zZSBwcmVzZW50IGZsYWcgaXMgdHJ1ZSAqLworCQlmb3JlYWNo KGxjLCBhcnJheSkKKwkJeworCQkJT2JqRWxlbSAqZWxlbSA9IChPYmpFbGVtICopIGxmaXJzdChs Yyk7CisKKwkJCUFzc2VydChlbGVtLT5vYmp0eXBlID09IE9ialR5cGVPYmplY3QgfHwKKwkJCQkg ICBlbGVtLT5vYmp0eXBlID09IE9ialR5cGVTdHJpbmcpOworCisJCQlpZiAoIWVsZW0tPnZhbHVl Lm9iamVjdC0+cHJlc2VudCAmJgorCQkJCWVsZW0tPm9ianR5cGUgPT0gT2JqVHlwZU9iamVjdCkK KwkJCQlhcnJheSA9IGZvcmVhY2hfZGVsZXRlX2N1cnJlbnQoYXJyYXksIGxjKTsKKwkJfQorCisJ fQorCisJb2JqZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwg c3ViX2ZtdCk7CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZUFycmF5LCBvYmplY3RfbmFt ZSk7CisJcGFyYW0tPnZhbHVlLmFycmF5ID0gYXJyYXk7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0 KHRyZWUsIHBhcmFtKTsKK30KKworLyogQXBwZW5kIGEgYm9vbGVhbiBwYXJhbWV0ZXIgdG8gYSB0 cmVlICovCitzdGF0aWMgdm9pZAorYXBwZW5kX2Jvb2xfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNo YXIgKnN1Yl9mbXQsIGJvb2wgdmFsdWUpCit7CisJT2JqRWxlbSAgKnBhcmFtOworCWNoYXIJICpv YmplY3RfbmFtZSA9IHN1Yl9mbXQ7CisJYm9vbAkgIGlzX3ByZXNlbnRfZmxhZyA9IGZhbHNlOwor CisJQXNzZXJ0KHN1Yl9mbXQpOworCisJLyogQ2hlY2sgaWYgdGhlIHByZXNlbnQgaXMgcGFydCBv ZiB0aGUgZm9ybWF0IHN0cmluZyBhbmQgc3RvcmUgdGhlIGJvb2xlYW4gdmFsdWUqLworCWlmIChz dHJjbXAoc3ViX2ZtdCwgInByZXNlbnQiKSA9PSAwKQorCXsKKwkJaXNfcHJlc2VudF9mbGFnID0g dHJ1ZTsKKwkJdHJlZS0+cHJlc2VudCA9IHZhbHVlOworCX0KKworCWlmICghdmVyYm9zZSAmJiAh dHJlZS0+cHJlc2VudCkKKwkJcmV0dXJuOworCisJaWYgKCFpc19wcmVzZW50X2ZsYWcpCisJCW9i amVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQp OworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVCb29sLCBvYmplY3RfbmFtZSk7CisJcGFy YW0tPnZhbHVlLmJvb2xlYW4gPSB2YWx1ZTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwg cGFyYW0pOworfQorCisvKgorICogQXBwZW5kIGEgZmxvYXQ4IHBhcmFtZXRlciB0byBhIHRyZWUu CisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfZmxvYXRfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNo YXIgKnN1Yl9mbXQsIGZsb2F0OCB2YWx1ZSkKK3sKKwlPYmpFbGVtCSAgICpwYXJhbTsKKwljaGFy CSAgICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCW9iamVjdF9uYW1lID0g YXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJcGFyYW0g PSBuZXdfb2JqZWN0KE9ialR5cGVGbG9hdCwgb2JqZWN0X25hbWUpOworCXBhcmFtLT52YWx1ZS5m bHQgPSB2YWx1ZTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgcGFyYW0pOworfQorCisv KgorICogQXBwZW5kIHRoZSBpbnB1dCBmb3JtYXQgc3RyaW5nIHRvIHRoZSBPYmpUcmVlLgorICov CitzdGF0aWMgdm9pZAorYXBwZW5kX2Zvcm1hdF9zdHJpbmcoT2JqVHJlZSAqdHJlZSwgY2hhciAq c3ViX2ZtdCkKK3sKKwlpbnQJCQkJbGVuOworCWNoYXIJCSAgICpmbXQ7CisKKwlpZiAodHJlZS0+ Zm10aW5mbyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlmbXQgPSB0cmVlLT5mbXRpbmZvLT5kYXRh OworCWxlbiA9IHRyZWUtPmZtdGluZm8tPmxlbjsKKworCS8qIEFkZCBhIHNlcGFyYXRvciBpZiBu ZWNlc3NhcnkgKi8KKwlpZiAobGVuID4gMCAmJiBmbXRbbGVuIC0gMV0gIT0gJyAnKQorCQlhcHBl bmRTdHJpbmdJbmZvU3BhY2VzKHRyZWUtPmZtdGluZm8sIDEpOworCisJYXBwZW5kU3RyaW5nSW5m b1N0cmluZyh0cmVlLT5mbXRpbmZvLCBzdWJfZm10KTsKK30KKworLyogQXBwZW5kIGEgTlVMTCBv YmplY3QgdG8gYSB0cmVlICovCitzdGF0aWMgdm9pZAorYXBwZW5kX251bGxfb2JqZWN0KE9ialRy ZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQpCit7CisJY2hhciAqb2JqZWN0X25hbWU7CisKKwlBc3Nl cnQoc3ViX2ZtdCk7CisKKwlpZiAoIXZlcmJvc2UpCisJCXJldHVybjsKKworCW9iamVjdF9uYW1l ID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJYXBw ZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIG5ld19vYmplY3QoT2JqVHlwZU51bGwsIG9iamVjdF9u YW1lKSk7Cit9CisKKy8qIEFwcGVuZCBhbiBvYmplY3QgcGFyYW1ldGVyIHRvIGEgdHJlZSAqLwor c3RhdGljIHZvaWQKK2FwcGVuZF9vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1 Yl9mbXQsIE9ialRyZWUgKnZhbHVlKQoreworCU9iakVsZW0JKnBhcmFtOworCWNoYXIgICAqb2Jq ZWN0X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlpZiAoIXZlcmJvc2UgJiYgIXZhbHVl LT5wcmVzZW50KQorCQlyZXR1cm47CisKKwlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9f Zm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpU eXBlT2JqZWN0LCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLm9iamVjdCA9IHZhbHVlOwor CWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qCisgKiBSZXR1cm4g dGhlIG9iamVjdCBuYW1lIHdoaWNoIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSBpbnB1dCAiKiV7bmFt ZVs6Ll19KiIKKyAqIHN0eWxlIHN0cmluZy4gQW5kIGFwcGVuZCB0aGUgaW5wdXQgZm9ybWF0IHN0 cmluZyB0byB0aGUgT2JqVHJlZS4KKyAqLworc3RhdGljIGNoYXIgKgorYXBwZW5kX29iamVjdF90 b19mb3JtYXRfc3RyaW5nKE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQpCit7CisJU3RyaW5n SW5mb0RhdGEJb2JqZWN0X25hbWU7CisJY29uc3QgY2hhcgkgICAqZW5kX3B0cjsKKwljb25zdCBj aGFyCSAgICpjcDsKKwlib29sCQkJc3RhcnRfY29weSA9IGZhbHNlOworCisJaWYgKHN1Yl9mbXQg PT0gTlVMTCB8fCB0cmVlLT5mbXRpbmZvID09IE5VTEwpCisJCXJldHVybiBzdWJfZm10OworCisJ aW5pdFN0cmluZ0luZm8oJm9iamVjdF9uYW1lKTsKKwllbmRfcHRyID0gc3ViX2ZtdCArIHN0cmxl bihzdWJfZm10KTsKKworCWZvciAoY3AgPSBzdWJfZm10OyBjcCA8IGVuZF9wdHI7IGNwKyspCisJ eworCQlpZiAoKmNwID09ICd7JykKKwkJeworCQkJc3RhcnRfY29weSA9IHRydWU7CisJCQljb250 aW51ZTsKKwkJfQorCisJCWlmICghc3RhcnRfY29weSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgq Y3AgPT0gJzonIHx8ICpjcCA9PSAnfScpCisJCQlicmVhazsKKworCQlhcHBlbmRTdHJpbmdJbmZv Q2hhck1hY3JvKCZvYmplY3RfbmFtZSwgKmNwKTsKKwl9CisKKwlpZiAob2JqZWN0X25hbWUubGVu ID09IDApCisJCWVsb2coRVJST1IsICJvYmplY3QgbmFtZSBub3QgZm91bmQiKTsKKworCWFwcGVu ZF9mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJcmV0dXJuIG9iamVjdF9uYW1lLmRh dGE7Cit9CisKKy8qIEFwcGVuZCBhIHByZWFsbG9jYXRlZCBwYXJhbWV0ZXIgdG8gYSB0cmVlICov CitzdGF0aWMgaW5saW5lIHZvaWQKK2FwcGVuZF9wcmVtYWRlX29iamVjdChPYmpUcmVlICp0cmVl LCBPYmpFbGVtICplbGVtKQoreworCXNsaXN0X3B1c2hfaGVhZCgmdHJlZS0+cGFyYW1zLCAmZWxl bS0+bm9kZSk7CisJdHJlZS0+bnVtUGFyYW1zKys7Cit9CisKKy8qIEFwcGVuZCBhIHN0cmluZyBw YXJhbWV0ZXIgdG8gYSB0cmVlICovCitzdGF0aWMgdm9pZAorYXBwZW5kX3N0cmluZ19vYmplY3Qo T2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgY2hhciAqdmFsdWUpCit7CisJT2JqRWxlbQkg ICAqcGFyYW07CisJY2hhcgkgICAqb2JqZWN0X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisK KwlpZiAoIXZlcmJvc2UgJiYgKHZhbHVlID09IE5VTEwgfHwgdmFsdWVbMF0gPT0gJ1wwJykpCisJ CXJldHVybjsKKworCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5n KHRyZWUsIHN1Yl9mbXQpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVTdHJpbmcsIG9i amVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUuc3RyaW5nID0gdmFsdWU7CisJYXBwZW5kX3ByZW1h ZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIFNpbWlsYXIgdG8gZm9ybWF0X3R5 cGVfZXh0ZW5kZWQsIGV4Y2VwdCB3ZSByZXR1cm4gZWFjaCBiaXQgb2YgaW5mb3JtYXRpb24KKyAq IHNlcGFyYXRlbHk6CisgKgorICogLSBuc3BpZCBpcyB0aGUgc2NoZW1hIE9JRC4gIEZvciBjZXJ0 YWluIFNRTC1zdGFuZGFyZCB0eXBlcyB3aGljaCBoYXZlIHdlaXJkCisgKiAgIHR5cG1vZCBydWxl cywgd2UgcmV0dXJuIEludmFsaWRPaWQ7IGNhbGxlciBpcyBleHBlY3RlZCB0byBub3Qgc2NoZW1h LQorICogICBxdWFsaWZ5IHRoZSBuYW1lIG5vciBhZGQgcXVvdGVzIHRvIHRoZSB0eXBlIG5hbWUg aW4gdGhpcyBjYXNlLgorICoKKyAqIC0gdHlwbmFtZSBpcyBzZXQgdG8gdGhlIHR5cGUgbmFtZSwg d2l0aG91dCBxdW90ZXMKKyAqCisgKiAtIHR5cGVtb2RzdHIgaXMgc2V0IHRvIHRoZSB0eXBlbW9k LCBpZiBhbnksIGFzIGEgc3RyaW5nIHdpdGggcGFyZW5zCisgKgorICogLSB0eXBhcnJheSBpbmRp Y2F0ZXMgd2hldGhlciBbXXMgbXVzdCBiZSBhZGRlZAorICoKKyAqIFdlIGRvbid0IHRyeSB0byBk ZWNvZGUgdHlwZSBuYW1lcyB0byB0aGVpciBzdGFuZGFyZC1tYW5kYXRlZCBuYW1lcywgZXhjZXB0 CisgKiBpbiB0aGUgY2FzZXMgb2YgdHlwZXMgd2l0aCB1bnVzdWFsIHR5cG1vZCBydWxlcy4KKyAq Lworc3RhdGljIHZvaWQKK2Zvcm1hdF90eXBlX2RldGFpbGVkKE9pZCB0eXBlX29pZCwgaW50MzIg dHlwZW1vZCwKKwkJCQkJIE9pZCAqbnNwaWQsIGNoYXIgKip0eXBuYW1lLCBjaGFyICoqdHlwZW1v ZHN0ciwKKwkJCQkJIGJvb2wgKnR5cGFycmF5KQoreworCUhlYXBUdXBsZQkJdHVwbGU7CisJRm9y bV9wZ190eXBlCXR5cGVmb3JtOworCU9pZAkJCQlhcnJheV9iYXNlX3R5cGU7CisKKwl0dXBsZSA9 IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKHR5cGVfb2lkKSk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIHR5cGUgJXUiLCB0eXBlX29pZCk7CisKKwl0eXBlZm9ybSA9IChGb3JtX3Bn X3R5cGUpIEdFVFNUUlVDVCh0dXBsZSk7CisKKwkvKgorCSAqIENoZWNrIGlmIGl0J3MgYSByZWd1 bGFyICh2YXJpYWJsZSBsZW5ndGgpIGFycmF5IHR5cGUuICBBcyBhYm92ZSwKKwkgKiBmaXhlZC1s ZW5ndGggYXJyYXkgdHlwZXMgc3VjaCBhcyAibmFtZSIgc2hvdWxkbid0IGdldCBkZWNvbnN0cnVj dGVkLgorCSAqLworCWFycmF5X2Jhc2VfdHlwZSA9IHR5cGVmb3JtLT50eXBlbGVtOworCisJKnR5 cGFycmF5ID0gKElzVHJ1ZUFycmF5VHlwZSh0eXBlZm9ybSkgJiYgdHlwZWZvcm0tPnR5cHN0b3Jh Z2UgIT0gVFlQU1RPUkFHRV9QTEFJTik7CisKKwlpZiAoKnR5cGFycmF5KQorCXsKKwkJLyogU3dp dGNoIG91ciBhdHRlbnRpb24gdG8gdGhlIGFycmF5IGVsZW1lbnQgdHlwZSAqLworCQlSZWxlYXNl U3lzQ2FjaGUodHVwbGUpOworCQl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmpl Y3RJZEdldERhdHVtKGFycmF5X2Jhc2VfdHlwZSkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo dHVwbGUpKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgJXUi LCB0eXBlX29pZCk7CisKKwkJdHlwZWZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHVw bGUpOworCQl0eXBlX29pZCA9IGFycmF5X2Jhc2VfdHlwZTsKKwl9CisKKwkvKgorCSAqIFNwZWNp YWwtY2FzZSBjcm9jayBmb3IgdHlwZXMgd2l0aCBzdHJhbmdlIHR5cG1vZCBydWxlcyB3aGVyZSB3 ZSBwdXQKKwkgKiB0eXBtb2QgYXQgdGhlIG1pZGRsZSBvZiBuYW1lKGUuZy4gVElNRSg2KSB3aXRo IHRpbWUgem9uZSApLiBXZSBjYW5ub3QKKwkgKiBzY2hlbWEtcXVhbGlmeSBub3IgYWRkIHF1b3Rl cyB0byB0aGUgdHlwZSBuYW1lIGluIHRoZXNlIGNhc2VzLgorCSAqLworCWlmICh0eXBlX29pZCA9 PSBJTlRFUlZBTE9JRCB8fAorCQl0eXBlX29pZCA9PSBUSU1FU1RBTVBPSUQgfHwKKwkJdHlwZV9v aWQgPT0gVElNRVNUQU1QVFpPSUQgfHwKKwkJdHlwZV9vaWQgPT0gVElNRU9JRCB8fAorCQl0eXBl X29pZCA9PSBUSU1FVFpPSUQpCisJeworCQlzd2l0Y2ggKHR5cGVfb2lkKQorCQl7CisJCQljYXNl IElOVEVSVkFMT0lEOgorCQkJCSp0eXBuYW1lID0gcHN0cmR1cCgiSU5URVJWQUwiKTsKKwkJCQli cmVhazsKKwkJCWNhc2UgVElNRVNUQU1QVFpPSUQ6CisJCQkJaWYgKHR5cGVtb2QgPCAwKQorCQkJ CQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJTUVTVEFNUCBXSVRIIFRJTUUgWk9ORSIpOworCQkJCWVs c2UKKwkJCQkJLyogb3RoZXJ3aXNlLCBXSVRIIFRaIGlzIGFkZGVkIGJ5IHR5cG1vZC4gKi8KKwkJ CQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1FU1RBTVAiKTsKKwkJCQlicmVhazsKKwkJCWNhc2Ug VElNRVNUQU1QT0lEOgorCQkJCSp0eXBuYW1lID0gcHN0cmR1cCgiVElNRVNUQU1QIik7CisJCQkJ YnJlYWs7CisJCQljYXNlIFRJTUVUWk9JRDoKKwkJCQlpZiAodHlwZW1vZCA8IDApCisJCQkJCSp0 eXBuYW1lID0gcHN0cmR1cCgiVElNRSBXSVRIIFRJTUUgWk9ORSIpOworCQkJCWVsc2UKKwkJCQkJ Lyogb3RoZXJ3aXNlLCBXSVRIIFRaIGlzIGFkZGVkIGJ5IHR5cG1vZGUuICovCisJCQkJCSp0eXBu YW1lID0gcHN0cmR1cCgiVElNRSIpOworCQkJCWJyZWFrOworCQkJY2FzZSBUSU1FT0lEOgorCQkJ CSp0eXBuYW1lID0gcHN0cmR1cCgiVElNRSIpOworCQkJCWJyZWFrOworCQl9CisJCSpuc3BpZCA9 IEludmFsaWRPaWQ7CisJfQorCWVsc2UKKwl7CisJCS8qCisJCSAqIE5vIGFkZGl0aW9uYWwgcHJv Y2Vzc2luZyBpcyByZXF1aXJlZCBmb3Igb3RoZXIgdHlwZXMsIHNvIGdldCB0aGUgdHlwZQorCQkg KiBuYW1lIGFuZCBzY2hlbWEgZGlyZWN0bHkgZnJvbSB0aGUgY2F0YWxvZy4KKwkJICovCisJCSpu c3BpZCA9IHR5cGVmb3JtLT50eXBuYW1lc3BhY2U7CisJCSp0eXBuYW1lID0gcHN0cmR1cChOYW1l U3RyKHR5cGVmb3JtLT50eXBuYW1lKSk7CisJfQorCisJaWYgKHR5cGVtb2QgPj0gMCkKKwkJKnR5 cGVtb2RzdHIgPSBwcmludFR5cG1vZCgiIiwgdHlwZW1vZCwgdHlwZWZvcm0tPnR5cG1vZG91dCk7 CisJZWxzZQorCQkqdHlwZW1vZHN0ciA9IHBzdHJkdXAoIiIpOworCisJUmVsZWFzZVN5c0NhY2hl KHR1cGxlKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgZGVmYXVsdHMgdmFsdWVzIG9mIGFyZ3Vt ZW50cyB0byBhIGZ1bmN0aW9uLCBhcyBhIGxpc3Qgb2YKKyAqIGRlcGFyc2VkIGV4cHJlc3Npb25z LgorICovCitzdGF0aWMgTGlzdCAqCitGdW5jdGlvbkdldERlZmF1bHRzKHRleHQgKnByb2FyZ2Rl ZmF1bHRzKQoreworCUxpc3QgICAqbm9kZWRlZnM7CisJTGlzdCAgICpzdHJkZWZzID0gTklMOwor CUxpc3RDZWxsICpjZWxsOworCisJbm9kZWRlZnMgPSAoTGlzdCAqKSBzdHJpbmdUb05vZGUoVGV4 dERhdHVtR2V0Q1N0cmluZyhwcm9hcmdkZWZhdWx0cykpOworCWlmICghSXNBKG5vZGVkZWZzLCBM aXN0KSkKKwkJZWxvZyhFUlJPUiwgInByb2FyZ2RlZmF1bHRzIGlzIG5vdCBhIGxpc3QiKTsKKwor CWZvcmVhY2goY2VsbCwgbm9kZWRlZnMpCisJeworCQlOb2RlICAgKm9uZWRlZiA9IGxmaXJzdChj ZWxsKTsKKworCQlzdHJkZWZzID0gbGFwcGVuZChzdHJkZWZzLCBkZXBhcnNlX2V4cHJlc3Npb24o b25lZGVmLCBOSUwsIGZhbHNlLCBmYWxzZSkpOworCX0KKworCXJldHVybiBzdHJkZWZzOworfQor CisvKgorICogUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFJF TFBFUlNJU1RFTkNFIHZhbHVlLgorICovCitzdGF0aWMgY2hhciAqCitnZXRfcGVyc2lzdGVuY2Vf c3RyKGNoYXIgcGVyc2lzdGVuY2UpCit7CisJc3dpdGNoIChwZXJzaXN0ZW5jZSkKKwl7CisJCWNh c2UgUkVMUEVSU0lTVEVOQ0VfVEVNUDoKKwkJCXJldHVybiAiVEVNUE9SQVJZIjsKKwkJY2FzZSBS RUxQRVJTSVNURU5DRV9VTkxPR0dFRDoKKwkJCXJldHVybiAiVU5MT0dHRUQiOworCQljYXNlIFJF TFBFUlNJU1RFTkNFX1BFUk1BTkVOVDoKKwkJCXJldHVybiAiIjsKKwkJZGVmYXVsdDoKKwkJCWVs b2coRVJST1IsICJ1bmV4cGVjdGVkIHBlcnNpc3RlbmNlIG1hcmtpbmcgJWMiLCBwZXJzaXN0ZW5j ZSk7CisJCQlyZXR1cm4gIiI7CQkvKiBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisJfQorfQorCisv KiBBbGxvY2F0ZSBhIG5ldyBwYXJhbWV0ZXIgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25ld19vYmpl Y3QoT2JqVHlwZSB0eXBlLCBjaGFyICpuYW1lKQoreworCU9iakVsZW0JKnBhcmFtOworCisJcGFy YW0gPSBwYWxsb2MwKHNpemVvZihPYmpFbGVtKSk7CisJcGFyYW0tPm5hbWUgPSBuYW1lOworCXBh cmFtLT5vYmp0eXBlID0gdHlwZTsKKworCXJldHVybiBwYXJhbTsKK30KKworLyogQWxsb2NhdGUg YSBuZXcgb2JqZWN0IHBhcmFtZXRlciAqLworc3RhdGljIE9iakVsZW0gKgorbmV3X29iamVjdF9v YmplY3QoT2JqVHJlZSAqdmFsdWUpCit7CisJT2JqRWxlbQkqcGFyYW07CisKKwlwYXJhbSA9IG5l d19vYmplY3QoT2JqVHlwZU9iamVjdCwgTlVMTCk7CisJcGFyYW0tPnZhbHVlLm9iamVjdCA9IHZh bHVlOworCisJcmV0dXJuIHBhcmFtOworfQorCisvKgorICogQWxsb2NhdGUgYSBuZXcgb2JqZWN0 IHRyZWUgdG8gc3RvcmUgcGFyYW1ldGVyIHZhbHVlcy4KKyAqLworc3RhdGljIE9ialRyZWUgKgor bmV3X29ianRyZWUoY2hhciAqZm10KQoreworCU9ialRyZWUJKnBhcmFtczsKKworCXBhcmFtcyA9 IHBhbGxvYzAoc2l6ZW9mKE9ialRyZWUpKTsKKwlwYXJhbXMtPnByZXNlbnQgPSB0cnVlOworCXNs aXN0X2luaXQoJnBhcmFtcy0+cGFyYW1zKTsKKworCWlmIChmbXQpCisJeworCQlwYXJhbXMtPmZt dGluZm8gPSBtYWtlU3RyaW5nSW5mbygpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHBhcmFt cy0+Zm10aW5mbywgZm10KTsKKwl9CisKKwlyZXR1cm4gcGFyYW1zOworfQorCisvKgorICogQSBo ZWxwZXIgcm91dGluZSB0byBzZXR1cCAle31EIGFuZCAle31PIGVsZW1lbnRzLgorICoKKyAqIEVs ZW1lbnRzICJzY2hlbWFuYW1lIiBhbmQgIm9iam5hbWUiIGFyZSBzZXQuICBJZiB0aGUgbmFtZXNw YWNlIE9JRAorICogY29ycmVzcG9uZHMgdG8gYSB0ZW1wIHNjaGVtYSwgdGhhdCdzIHNldCB0byAi cGdfdGVtcCIuCisgKgorICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aG9zZSB0d28gZWxlbWVu dCB0eXBlcyBpcyB3aGV0aGVyIHRoZSBvYmpuYW1lIHdpbGwKKyAqIGJlIHF1b3RlZCBhcyBhbiBp ZGVudGlmaWVyIG9yIG5vdCwgd2hpY2ggaXMgbm90IHNvbWV0aGluZyB0aGF0IHRoaXMgcm91dGlu ZQorICogY29uY2VybnMgaXRzZWxmIHdpdGg7IHRoYXQgd2lsbCBiZSB1cCB0byB0aGUgZXhwYW5k IGZ1bmN0aW9uLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWUoT2lkIG5zcGlkLCBjaGFyICpuYW1lKQoreworCU9ialRyZWUJKnF1YWxpZmllZDsKKwljaGFy CSAgICpuYW1lc3BhY2U7CisKKwlpZiAoaXNBbnlUZW1wTmFtZXNwYWNlKG5zcGlkKSkKKwkJbmFt ZXNwYWNlID0gcHN0cmR1cCgicGdfdGVtcCIpOworCWVsc2UKKwkJbmFtZXNwYWNlID0gZ2V0X25h bWVzcGFjZV9uYW1lKG5zcGlkKTsKKworCXF1YWxpZmllZCA9IG5ld19vYmp0cmVlX1ZBKE5VTEws IDIsCisJCQkJCQkJICAic2NoZW1hbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5hbWVzcGFjZSwKKwkJ CQkJCQkgICJvYmpuYW1lIiwgT2JqVHlwZVN0cmluZywgcHN0cmR1cChuYW1lKSk7CisKKwlyZXR1 cm4gcXVhbGlmaWVkOworfQorCisvKgorICogQSBoZWxwZXIgcm91dGluZSB0byBzZXR1cCAle31E IGFuZCAle31PIGVsZW1lbnRzLCB3aXRoIHRoZSBvYmplY3Qgc3BlY2lmaWVkCisgKiBieSBjbGFz c0lkL29iaklkLgorICoKKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKE9pZCBjbGFzc0lkLCBPaWQgb2JqZWN0SWQpCit7CisJT2JqVHJlZQkqcXVhbGlm aWVkOworCVJlbGF0aW9uCWNhdGFsb2c7CisJSGVhcFR1cGxlCWNhdG9iajsKKwlEYXR1bQkJb2Jq bnNwOworCURhdHVtCQlvYmpuYW1lOworCUF0dHJOdW1iZXIJQW51bV9uYW1lOworCUF0dHJOdW1i ZXIJQW51bV9uYW1lc3BhY2U7CisJQXR0ck51bWJlcglBbnVtX29pZCA9IGdldF9vYmplY3RfYXR0 bnVtX29pZChjbGFzc0lkKTsKKwlib29sCQlpc251bGw7CisKKwljYXRhbG9nID0gdGFibGVfb3Bl bihjbGFzc0lkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJY2F0b2JqID0gZ2V0X2NhdGFsb2dfb2Jq ZWN0X2J5X29pZChjYXRhbG9nLCBBbnVtX29pZCwgb2JqZWN0SWQpOworCWlmICghY2F0b2JqKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb2JqZWN0ICV1IG9mIGNhdGFs b2cgXCIlc1wiIiwKKwkJCSBvYmplY3RJZCwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoY2F0YWxv ZykpOworCUFudW1fbmFtZSA9IGdldF9vYmplY3RfYXR0bnVtX25hbWUoY2xhc3NJZCk7CisJQW51 bV9uYW1lc3BhY2UgPSBnZXRfb2JqZWN0X2F0dG51bV9uYW1lc3BhY2UoY2xhc3NJZCk7CisKKwlv Ympuc3AgPSBoZWFwX2dldGF0dHIoY2F0b2JqLCBBbnVtX25hbWVzcGFjZSwgUmVsYXRpb25HZXRE ZXNjcihjYXRhbG9nKSwKKwkJCQkJCSAgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhF UlJPUiwgInVuZXhwZWN0ZWQgTlVMTCBuYW1lc3BhY2UiKTsKKworCW9iam5hbWUgPSBoZWFwX2dl dGF0dHIoY2F0b2JqLCBBbnVtX25hbWUsIFJlbGF0aW9uR2V0RGVzY3IoY2F0YWxvZyksCisJCQkJ CQkgICAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBO VUxMIG5hbWUiKTsKKworCXF1YWxpZmllZCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShEYXR1 bUdldE9iamVjdElkKG9iam5zcCksCisJCQkJCQkJCQkJIE5hbWVTdHIoKkRhdHVtR2V0TmFtZShv YmpuYW1lKSkpOworCXRhYmxlX2Nsb3NlKGNhdGFsb2csIEFjY2Vzc1NoYXJlTG9jayk7CisKKwly ZXR1cm4gcXVhbGlmaWVkOworfQorCisvKgorICogQSBoZWxwZXIgcm91dGluZSB0byBzZXR1cCAl e31UIGVsZW1lbnRzLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3JfdHlw ZShPaWQgdHlwZUlkLCBpbnQzMiB0eXBtb2QpCit7CisJT2JqVHJlZQkqdHlwZVBhcmFtOworCU9p ZAkJCXR5cG5zcGlkOworCWNoYXIJICAgKnR5cG5zcDsKKwljaGFyCSAgICp0eXBlbmFtZSA9IE5V TEw7CisJY2hhcgkgICAqdHlwbW9kc3RyOworCWJvb2wJCXR5cGFycmF5OworCisJZm9ybWF0X3R5 cGVfZGV0YWlsZWQodHlwZUlkLCB0eXBtb2QsCisJCQkJCQkgJnR5cG5zcGlkLCAmdHlwZW5hbWUs ICZ0eXBtb2RzdHIsICZ0eXBhcnJheSk7CisKKwlpZiAoT2lkSXNWYWxpZCh0eXBuc3BpZCkpCisJ CXR5cG5zcCA9IGdldF9uYW1lc3BhY2VfbmFtZV9vcl90ZW1wKHR5cG5zcGlkKTsKKwllbHNlCisJ CXR5cG5zcCA9IHBzdHJkdXAoIiIpOworCisJdHlwZVBhcmFtID0gbmV3X29ianRyZWVfVkEoTlVM TCwgNCwKKwkJCQkJCQkgICAic2NoZW1hbmFtZSIsIE9ialR5cGVTdHJpbmcsIHR5cG5zcCwKKwkJ CQkJCQkgICAidHlwZW5hbWUiLCBPYmpUeXBlU3RyaW5nLCB0eXBlbmFtZSwKKwkJCQkJCQkgICAi dHlwbW9kIiwgT2JqVHlwZVN0cmluZywgdHlwbW9kc3RyLAorCQkJCQkJCSAgICJ0eXBhcnJheSIs IE9ialR5cGVCb29sLCB0eXBhcnJheSk7CisKKwlyZXR1cm4gdHlwZVBhcmFtOworfQorCisvKgor ICogQWxsb2NhdGUgYSBuZXcgb2JqZWN0IHRyZWUgdG8gc3RvcmUgcGFyYW1ldGVyIHZhbHVlcyAt LSB2YXJhcmdzIHZlcnNpb24uCisgKgorICogVGhlICJmbXQiIGFyZ3VtZW50IGlzIHVzZWQgdG8g YXBwZW5kIGFzIGEgImZtdCIgZWxlbWVudCBpbiB0aGUgb3V0cHV0IGJsb2IuCisgKiBudW1vYmpz IGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGV4dHJhIGVsZW1lbnRzIHRvIGFwcGVuZDsgZm9yIGVh Y2ggb25lLCBhCisgKiBuYW1lIChzdHJpbmcpLCB0eXBlIChmcm9tIHRoZSBPYmpUeXBlIGVudW0p IGFuZCB2YWx1ZSBtdXN0IGJlIHN1cHBsaWVkLiAgVGhlCisgKiB2YWx1ZSBtdXN0IG1hdGNoIHRo ZSB0eXBlIGdpdmVuOyBmb3IgaW5zdGFuY2UsIE9ialR5cGVJbnRlZ2VyIHJlcXVpcmVzIGFuCisg KiBpbnQ2NCwgT2JqVHlwZVN0cmluZyByZXF1aXJlcyBhIGNoYXIgKiwgT2JqVHlwZUFycmF5IHJl cXVpcmVzIGEgbGlzdCAob2YKKyAqIE9iakVsZW0pLCBPYmpUeXBlT2JqZWN0IHJlcXVpcmVzIGFu IE9ialRyZWUsIGFuZCBzbyBvbi4gIEVhY2ggZWxlbWVudCB0eXBlICoKKyAqIG11c3QgbWF0Y2gg dGhlIGNvbnZlcnNpb24gc3BlY2lmaWVyIGdpdmVuIGluIHRoZSBmb3JtYXQgc3RyaW5nLCBhcyBk ZXNjcmliZWQKKyAqIGluIGRkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kLCBxLnYuCisgKgorICog Tm90ZSB3ZSBkb24ndCBoYXZlIHRoZSBsdXh1cnkgb2Ygc3ByaW50Zi1saWtlIGNvbXBpbGVyIHdh cm5pbmdzIGZvcgorICogbWFsZm9ybWVkIGFyZ3VtZW50IGxpc3RzLgorICovCitzdGF0aWMgT2Jq VHJlZSAqCituZXdfb2JqdHJlZV9WQShjaGFyICpmbXQsIGludCBudW1vYmpzLC4uLikKK3sKKwlP YmpUcmVlCSAgICp0cmVlOworCXZhX2xpc3QJCWFyZ3M7CisJaW50CQkJaTsKKworCS8qIFNldCB1 cCB0aGUgdG9wbGV2ZWwgb2JqZWN0IGFuZCBpdHMgImZtdCIgKi8KKwl0cmVlID0gbmV3X29ianRy ZWUoZm10KTsKKworCS8qIEFuZCBwcm9jZXNzIHRoZSBnaXZlbiB2YXJhcmdzICovCisJdmFfc3Rh cnQoYXJncywgbnVtb2Jqcyk7CisJZm9yIChpID0gMDsgaSA8IG51bW9ianM7IGkrKykKKwl7CisJ CWNoYXIJICAgKm5hbWU7CisJCU9ialR5cGUJCXR5cGU7CisJCU9iakVsZW0JICAgKmVsZW07CisK KwkJbmFtZSA9IHZhX2FyZyhhcmdzLCBjaGFyICopOworCQl0eXBlID0gdmFfYXJnKGFyZ3MsIE9i alR5cGUpOworCQllbGVtID0gbmV3X29iamVjdCh0eXBlLCBOVUxMKTsKKworCQkvKgorCQkgKiBG b3IgYWxsIG90aGVyIHBhcmFtIHR5cGVzIHRoZXJlIG11c3QgYmUgYSB2YWx1ZSBpbiB0aGUgdmFy YXJncy4KKwkJICogRmV0Y2ggaXQgYW5kIGFkZCB0aGUgZnVsbHkgZm9ybWVkIHN1Ym9iamVjdCBp bnRvIHRoZSBtYWluIG9iamVjdC4KKwkJICovCisJCXN3aXRjaCAodHlwZSkKKwkJeworCQkJY2Fz ZSBPYmpUeXBlTnVsbDoKKwkJCQkvKiBOdWxsIHBhcmFtcyBkb24ndCBoYXZlIGEgdmFsdWUgKG9i dmlvdXNseSkgKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZUJvb2w6CisJCQkJZWxlbS0+ dmFsdWUuYm9vbGVhbiA9IHZhX2FyZyhhcmdzLCBpbnQpOworCQkJCWJyZWFrOworCQkJY2FzZSBP YmpUeXBlU3RyaW5nOgorCQkJCWVsZW0tPnZhbHVlLnN0cmluZyA9IHZhX2FyZyhhcmdzLCBjaGFy ICopOworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlQXJyYXk6CisJCQkJZWxlbS0+dmFsdWUu YXJyYXkgPSB2YV9hcmcoYXJncywgTGlzdCAqKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlw ZUludGVnZXI6CisJCQkJZWxlbS0+dmFsdWUuaW50ZWdlciA9IHZhX2FyZyhhcmdzLCBpbnQ2NCk7 CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVGbG9hdDoKKwkJCQllbGVtLT52YWx1ZS5mbHQg PSB2YV9hcmcoYXJncywgZG91YmxlKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZU9iamVj dDoKKwkJCQllbGVtLT52YWx1ZS5vYmplY3QgPSB2YV9hcmcoYXJncywgT2JqVHJlZSAqKTsKKwkJ CQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgT2JqVHJlZSBl bGVtZW50IHR5cGUgJWQiLCB0eXBlKTsKKwkJfQorCisJCWVsZW0tPm5hbWUgPSBuYW1lOworCQlh cHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgZWxlbSk7CisJfQorCisJdmFfZW5kKGFyZ3MpOwor CXJldHVybiB0cmVlOworfQorCisvKiBBbGxvY2F0ZSBhIG5ldyBzdHJpbmcgb2JqZWN0ICovCitz dGF0aWMgT2JqRWxlbSAqCituZXdfc3RyaW5nX29iamVjdChjaGFyICp2YWx1ZSkKK3sKKwlPYmpF bGVtICAgICpwYXJhbTsKKworCUFzc2VydCh2YWx1ZSk7CisKKwlwYXJhbSA9IG5ld19vYmplY3Qo T2JqVHlwZVN0cmluZywgTlVMTCk7CisJcGFyYW0tPnZhbHVlLnN0cmluZyA9IHZhbHVlOworCisJ cmV0dXJuIHBhcmFtOworfQorCisvKgorICogUHJvY2VzcyB0aGUgcHJlLWJ1aWx0IGZvcm1hdCBz dHJpbmcgZnJvbSB0aGUgT2JqVHJlZSBpbnRvIHRoZSBvdXRwdXQgcGFyc2UKKyAqIHN0YXRlLgor ICovCitzdGF0aWMgdm9pZAorb2JqdHJlZV9mbXRfdG9fanNvbmJfZWxlbWVudChKc29uYlBhcnNl U3RhdGUgKnN0YXRlLCBPYmpUcmVlICp0cmVlKQoreworCUpzb25iVmFsdWUJa2V5OworCUpzb25i VmFsdWUJdmFsOworCisJaWYgKHRyZWUtPmZtdGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuOworCisJ LyogUHVzaCB0aGUga2V5IGZpcnN0ICovCisJa2V5LnR5cGUgPSBqYnZTdHJpbmc7CisJa2V5LnZh bC5zdHJpbmcudmFsID0gImZtdCI7CisJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKGtleS52 YWwuc3RyaW5nLnZhbCk7CisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfS0VZLCAma2V5KTsK KworCS8qIFRoZW4gcHJvY2VzcyB0aGUgcHJlLWJ1aWx0IGZvcm1hdCBzdHJpbmcgKi8KKwl2YWwu dHlwZSA9IGpidlN0cmluZzsKKwl2YWwudmFsLnN0cmluZy5sZW4gPSB0cmVlLT5mbXRpbmZvLT5s ZW47CisJdmFsLnZhbC5zdHJpbmcudmFsID0gdHJlZS0+Zm10aW5mby0+ZGF0YTsKKwlwdXNoSnNv bmJWYWx1ZSgmc3RhdGUsIFdKQl9WQUxVRSwgJnZhbCk7Cit9CisKKy8qCisgKiBDcmVhdGUgYSBK U09OQiByZXByZXNlbnRhdGlvbiBmcm9tIGFuIE9ialRyZWUuCisgKi8KK3N0YXRpYyBKc29uYiAq CitvYmp0cmVlX3RvX2pzb25iKE9ialRyZWUgKnRyZWUpCit7CisJSnNvbmJWYWx1ZSAqdmFsdWU7 CisKKwl2YWx1ZSA9IG9ianRyZWVfdG9fanNvbmJfcmVjKHRyZWUsIE5VTEwpOworCXJldHVybiBK c29uYlZhbHVlVG9Kc29uYih2YWx1ZSk7Cit9CisKKy8qCisgKiBIZWxwZXIgZm9yIG9ianRyZWVf dG9fanNvbmI6IHByb2Nlc3MgYW4gaW5kaXZpZHVhbCBlbGVtZW50IGZyb20gYW4gb2JqZWN0IG9y CisgKiBhbiBhcnJheSBpbnRvIHRoZSBvdXRwdXQgcGFyc2Ugc3RhdGUuCisgKi8KK3N0YXRpYyB2 b2lkCitvYmp0cmVlX3RvX2pzb25iX2VsZW1lbnQoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgT2Jq RWxlbSAqb2JqZWN0LAorCQkJCQkJIEpzb25iSXRlcmF0b3JUb2tlbiBlbGVtX3Rva2VuKQorewor CUxpc3RDZWxsICAgKmNlbGw7CisJSnNvbmJWYWx1ZQl2YWw7CisKKwlzd2l0Y2ggKG9iamVjdC0+ b2JqdHlwZSkKKwl7CisJCWNhc2UgT2JqVHlwZU51bGw6CisJCQl2YWwudHlwZSA9IGpidk51bGw7 CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwpOworCQkJYnJlYWs7 CisKKwkJY2FzZSBPYmpUeXBlU3RyaW5nOgorCQkJdmFsLnR5cGUgPSBqYnZTdHJpbmc7CisJCQl2 YWwudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4ob2JqZWN0LT52YWx1ZS5zdHJpbmcpOworCQkJdmFs LnZhbC5zdHJpbmcudmFsID0gb2JqZWN0LT52YWx1ZS5zdHJpbmc7CisJCQlwdXNoSnNvbmJWYWx1 ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBl SW50ZWdlcjoKKwkJCXZhbC50eXBlID0gamJ2TnVtZXJpYzsKKwkJCXZhbC52YWwubnVtZXJpYyA9 IChOdW1lcmljKQorCQkJCURhdHVtR2V0TnVtZXJpYyhEaXJlY3RGdW5jdGlvbkNhbGwxKGludDhf bnVtZXJpYywKKwkJCQkJCQkJCQkJCQlvYmplY3QtPnZhbHVlLmludGVnZXIpKTsKKwkJCXB1c2hK c29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNl IE9ialR5cGVGbG9hdDoKKwkJCXZhbC50eXBlID0gamJ2TnVtZXJpYzsKKwkJCXZhbC52YWwubnVt ZXJpYyA9IChOdW1lcmljKQorCQkJCURhdHVtR2V0TnVtZXJpYyhEaXJlY3RGdW5jdGlvbkNhbGwx KGZsb2F0OF9udW1lcmljLAorCQkJCQkJCQkJCQkJCW9iamVjdC0+dmFsdWUuaW50ZWdlcikpOwor CQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rva2VuLCAmdmFsKTsKKwkJCWJyZWFrOwor CisJCWNhc2UgT2JqVHlwZUJvb2w6CisJCQl2YWwudHlwZSA9IGpidkJvb2w7CisJCQl2YWwudmFs LmJvb2xlYW4gPSBvYmplY3QtPnZhbHVlLmJvb2xlYW47CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3Rh dGUsIGVsZW1fdG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlT2JqZWN0 OgorCQkJLyogUmVjdXJzaXZlbHkgYWRkIHRoZSBvYmplY3QgaW50byB0aGUgZXhpc3RpbmcgcGFy c2Ugc3RhdGUgKi8KKwkJCW9ianRyZWVfdG9fanNvbmJfcmVjKG9iamVjdC0+dmFsdWUub2JqZWN0 LCBzdGF0ZSk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVBcnJheToKKwkJCXB1c2hKc29u YlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX0FSUkFZLCBOVUxMKTsKKwkJCWZvcmVhY2goY2VsbCwg b2JqZWN0LT52YWx1ZS5hcnJheSkKKwkJCXsKKwkJCQlPYmpFbGVtICAgKmVsZW0gPSBsZmlyc3Qo Y2VsbCk7CisKKwkJCQlvYmp0cmVlX3RvX2pzb25iX2VsZW1lbnQoc3RhdGUsIGVsZW0sIFdKQl9F TEVNKTsKKwkJCX0KKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9BUlJBWSwgTlVM TCk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXpl ZCBvYmplY3QgdHlwZSAlZCIsIG9iamVjdC0+b2JqdHlwZSk7CisJCQlicmVhazsKKwl9Cit9CisK Ky8qCisgKiBSZWN1cnNpdmUgaGVscGVyIGZvciBvYmp0cmVlX3RvX2pzb25iLgorICovCitzdGF0 aWMgSnNvbmJWYWx1ZSAqCitvYmp0cmVlX3RvX2pzb25iX3JlYyhPYmpUcmVlICp0cmVlLCBKc29u YlBhcnNlU3RhdGUgKnN0YXRlKQoreworCXNsaXN0X2l0ZXIJaXRlcjsKKworCXB1c2hKc29uYlZh bHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisKKwlvYmp0cmVlX2ZtdF90b19q c29uYl9lbGVtZW50KHN0YXRlLCB0cmVlKTsKKworCXNsaXN0X2ZvcmVhY2goaXRlciwgJnRyZWUt PnBhcmFtcykKKwl7CisJCU9iakVsZW0JKm9iamVjdCA9IHNsaXN0X2NvbnRhaW5lcihPYmpFbGVt LCBub2RlLCBpdGVyLmN1cik7CisJCUpzb25iVmFsdWUJa2V5OworCisJCS8qIFB1c2ggdGhlIGtl eSBmaXJzdCAqLworCQlrZXkudHlwZSA9IGpidlN0cmluZzsKKwkJa2V5LnZhbC5zdHJpbmcubGVu ID0gc3RybGVuKG9iamVjdC0+bmFtZSk7CisJCWtleS52YWwuc3RyaW5nLnZhbCA9IG9iamVjdC0+ bmFtZTsKKwkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfS0VZLCAma2V5KTsKKworCQkvKiBU aGVuIHByb2Nlc3MgdGhlIHZhbHVlIGFjY29yZGluZyB0byBpdHMgdHlwZSAqLworCQlvYmp0cmVl X3RvX2pzb25iX2VsZW1lbnQoc3RhdGUsIG9iamVjdCwgV0pCX1ZBTFVFKTsKKwl9CisKKwlyZXR1 cm4gcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7Cit9CisKKy8q CisgKiBTdWJyb3V0aW5lIGZvciBDUkVBVEUgVEFCTEUvQ1JFQVRFIERPTUFJTiBkZXBhcnNpbmcu CisgKgorICogR2l2ZW4gYSB0YWJsZSBPSUQgb3IgZG9tYWluIE9JRCwgb2J0YWluIGl0cyBjb25z dHJhaW50cyBhbmQgYXBwZW5kIHRoZW0gdG8KKyAqIHRoZSBnaXZlbiBlbGVtZW50cyBsaXN0LiAg VGhlIHVwZGF0ZWQgbGlzdCBpcyByZXR1cm5lZC4KKyAqCisgKiBUaGlzIHdvcmtzIGZvciB0eXBl ZCB0YWJsZXMsIHJlZ3VsYXIgdGFibGVzLCBhbmQgZG9tYWlucy4KKyAqCisgKiBOb3RlIHRoYXQg Q09OU1RSQUlOVF9GT1JFSUdOIGNvbnN0cmFpbnRzIGFyZSBhbHdheXMgaWdub3JlZC4KKyAqLwor c3RhdGljIExpc3QgKgorb2J0YWluQ29uc3RyYWludHMoTGlzdCAqZWxlbWVudHMsIE9pZCByZWxh dGlvbklkLCBPaWQgZG9tYWluSWQpCit7CisJUmVsYXRpb24JY29uUmVsOworCVNjYW5LZXlEYXRh IGtleTsKKwlTeXNTY2FuRGVzYyBzY2FuOworCUhlYXBUdXBsZQl0dXBsZTsKKwlPYmpUcmVlCSpj b25zdHI7CisKKwkvKiBPbmx5IG9uZSBtYXkgYmUgdmFsaWQgKi8KKwlBc3NlcnQoT2lkSXNWYWxp ZChyZWxhdGlvbklkKSBeIE9pZElzVmFsaWQoZG9tYWluSWQpKTsKKworCS8qCisJICogU2NhbiBw Z19jb25zdHJhaW50IHRvIGZldGNoIGFsbCBjb25zdHJhaW50cyBsaW5rZWQgdG8gdGhlIGdpdmVu CisJICogcmVsYXRpb24uCisJICovCisJY29uUmVsID0gdGFibGVfb3BlbihDb25zdHJhaW50UmVs YXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlpZiAoT2lkSXNWYWxpZChyZWxhdGlvbklkKSkK Kwl7CisJCVNjYW5LZXlJbml0KCZrZXksCisJCQkJCUFudW1fcGdfY29uc3RyYWludF9jb25yZWxp ZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJZEdl dERhdHVtKHJlbGF0aW9uSWQpKTsKKwkJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihjb25SZWws IENvbnN0cmFpbnRSZWxpZFR5cGlkTmFtZUluZGV4SWQsCisJCQkJCQkJCSAgdHJ1ZSwgTlVMTCwg MSwgJmtleSk7CisJfQorCWVsc2UKKwl7CisJCUFzc2VydChPaWRJc1ZhbGlkKGRvbWFpbklkKSk7 CisJCVNjYW5LZXlJbml0KCZrZXksCisJCQkJCUFudW1fcGdfY29uc3RyYWludF9jb250eXBpZCwK KwkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJZEdldERh dHVtKGRvbWFpbklkKSk7CisJCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25z dHJhaW50VHlwaWRJbmRleElkLAorCQkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCX0K KworCS8qCisJICogRm9yIGVhY2ggY29uc3RyYWludCwgYWRkIGEgbm9kZSB0byB0aGUgbGlzdCBv ZiB0YWJsZSBlbGVtZW50cy4gIEluCisJICogdGhlc2Ugbm9kZXMgd2UgaW5jbHVkZSBub3Qgb25s eSB0aGUgcHJpbnRhYmxlIGluZm9ybWF0aW9uICgiZm10IiksIGJ1dAorCSAqIGFsc28gc2VwYXJh dGUgYXR0cmlidXRlcyB0byBpbmRpY2F0ZSB0aGUgdHlwZSBvZiBjb25zdHJhaW50LCBmb3IKKwkg KiBhdXRvbWF0aWMgcHJvY2Vzc2luZy4KKwkgKi8KKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0 dXBsZSA9IHN5c3RhYmxlX2dldG5leHQoc2NhbikpKQorCXsKKwkJRm9ybV9wZ19jb25zdHJhaW50 IGNvbnN0ckZvcm07CisJCWNoYXIJICAgKmNvbnR5cGU7CisKKwkJY29uc3RyRm9ybSA9IChGb3Jt X3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVDVCh0dXBsZSk7CisKKwkJc3dpdGNoIChjb25zdHJGb3Jt LT5jb250eXBlKQorCQl7CisJCQljYXNlIENPTlNUUkFJTlRfQ0hFQ0s6CisJCQkJY29udHlwZSA9 ICJjaGVjayI7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTlNUUkFJTlRfRk9SRUlHTjoKKwkJCQlj b250aW51ZTsJLyogbm90IGhlcmUgKi8KKwkJCWNhc2UgQ09OU1RSQUlOVF9QUklNQVJZOgorCQkJ CWNvbnR5cGUgPSAicHJpbWFyeSBrZXkiOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5U X1VOSVFVRToKKwkJCQljb250eXBlID0gInVuaXF1ZSI7CisJCQkJYnJlYWs7CisJCQljYXNlIENP TlNUUkFJTlRfVFJJR0dFUjoKKwkJCQljb250eXBlID0gInRyaWdnZXIiOworCQkJCWJyZWFrOwor CQkJY2FzZSBDT05TVFJBSU5UX0VYQ0xVU0lPTjoKKwkJCQljb250eXBlID0gImV4Y2x1c2lvbiI7 CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQg Y29uc3RyYWludCB0eXBlIik7CisJCX0KKworCQkvKgorCQkgKiAidHlwZSIgYW5kICJjb250eXBl IiBhcmUgbm90IHBhcnQgb2YgdGhlIHByaW50YWJsZSBvdXRwdXQsIGJ1dCBhcmUKKwkJICogdXNl ZnVsIHRvIHByb2dyYW1tYXRpY2FsbHkgZGlzdGluZ3Vpc2ggdGhlc2UgZnJvbSBjb2x1bW5zIGFu ZCBhbW9uZworCQkgKiBkaWZmZXJlbnQgY29uc3RyYWludCB0eXBlcy4KKwkJICoKKwkJICogWFhY IGl0IG1pZ2h0IGJlIHVzZWZ1bCB0byBhbHNvIGxpc3QgdGhlIGNvbHVtbiBuYW1lcyBpbiBhIFBL LCBldGMuCisJCSAqLworCQljb25zdHIgPSBuZXdfb2JqdHJlZV9WQSgiQ09OU1RSQUlOVCAle25h bWV9SSAle2RlZmluaXRpb259cyIsCisJCQkJCQkJCTQsCisJCQkJCQkJCSJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgImNvbnN0cmFpbnQiLAorCQkJCQkJCQkiY29udHlwZSIsIE9ialR5cGVTdHJpbmcs IGNvbnR5cGUsCisJCQkJCQkJCSJuYW1lIiwgT2JqVHlwZVN0cmluZywgTmFtZVN0cihjb25zdHJG b3JtLT5jb25uYW1lKSwKKwkJCQkJCQkJImRlZmluaXRpb24iLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJCQkgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoY29uc3RyRm9ybS0+b2lk KSk7CisJCWVsZW1lbnRzID0gbGFwcGVuZChlbGVtZW50cywgbmV3X29iamVjdF9vYmplY3QoY29u c3RyKSk7CisJfQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShjb25S ZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gZWxlbWVudHM7Cit9CisKKy8qCisgKiBS ZXR1cm4gYW4gaW5kZXggZGVmaW5pdGlvbiwgc3BsaXQgaW4gc2V2ZXJhbCBwaWVjZXMuCisgKgor ICogQSBsYXJnZSBhbW91bnQgb2YgY29kZSBpcyBkdXBsaWNhdGVkIGZyb20gIHBnX2dldF9pbmRl eGRlZl93b3JrZXIsIGJ1dAorICogY29udHJvbCBmbG93IGlzIGRpZmZlcmVudCBlbm91Z2ggdGhh dCBpdCBkb2Vzbid0IHNlZW0gd29ydGgga2VlcGluZyB0aGVtCisgKiB0b2dldGhlci4KKyAqLwor c3RhdGljIHZvaWQKK3BnX2dldF9pbmRleGRlZl9kZXRhaWxlZChPaWQgaW5kZXhyZWxpZCwKKwkJ CQkJCSBjaGFyICoqaW5kZXhfYW0sCisJCQkJCQkgY2hhciAqKmRlZmluaXRpb24sCisJCQkJCQkg Y2hhciAqKnJlbG9wdGlvbnMsCisJCQkJCQkgY2hhciAqKnRhYmxlc3BhY2UsCisJCQkJCQkgY2hh ciAqKndoZXJlQ2xhdXNlKQoreworCUhlYXBUdXBsZQlodF9pZHg7CisJSGVhcFR1cGxlCWh0X2lk eHJlbDsKKwlIZWFwVHVwbGUJaHRfYW07CisJRm9ybV9wZ19pbmRleCBpZHhyZWM7CisJRm9ybV9w Z19jbGFzcyBpZHhyZWxyZWM7CisJRm9ybV9wZ19hbQlhbXJlYzsKKwlJbmRleEFtUm91dGluZSAq YW1yb3V0aW5lOworCUxpc3QJICAgKmluZGV4cHJzOworCUxpc3RDZWxsICAgKmluZGV4cHJfaXRl bTsKKwlMaXN0CSAgICpjb250ZXh0OworCU9pZAkJCWluZHJlbGlkOworCWludAkJCWtleW5vOwor CURhdHVtCQlpbmRjb2xsRGF0dW07CisJRGF0dW0JCWluZGNsYXNzRGF0dW07CisJRGF0dW0JCWlu ZG9wdGlvbkRhdHVtOworCWJvb2wJCWlzbnVsbDsKKwlvaWR2ZWN0b3IgICppbmRjb2xsYXRpb247 CisJb2lkdmVjdG9yICAqaW5kY2xhc3M7CisJaW50MnZlY3RvciAqaW5kb3B0aW9uOworCVN0cmlu Z0luZm9EYXRhIGRlZmluaXRpb25CdWY7CisKKwkvKgorCSAqIEZldGNoIHRoZSBwZ19pbmRleCB0 dXBsZSBieSB0aGUgT2lkIG9mIHRoZSBpbmRleAorCSAqLworCWh0X2lkeCA9IFNlYXJjaFN5c0Nh Y2hlMShJTkRFWFJFTElELCBPYmplY3RJZEdldERhdHVtKGluZGV4cmVsaWQpKTsKKwlpZiAoIUhl YXBUdXBsZUlzVmFsaWQoaHRfaWR4KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIGluZGV4ICV1IiwgaW5kZXhyZWxpZCk7CisJaWR4cmVjID0gKEZvcm1fcGdfaW5kZXgp IEdFVFNUUlVDVChodF9pZHgpOworCisJaW5kcmVsaWQgPSBpZHhyZWMtPmluZHJlbGlkOworCUFz c2VydChpbmRleHJlbGlkID09IGlkeHJlYy0+aW5kZXhyZWxpZCk7CisKKwkvKiBNdXN0IGdldCBp bmRjb2xsYXRpb24sIGluZGNsYXNzLCBhbmQgaW5kb3B0aW9uIHRoZSBoYXJkIHdheSAqLworCWlu ZGNvbGxEYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJ CSAgIEFudW1fcGdfaW5kZXhfaW5kY29sbGF0aW9uLCAmaXNudWxsKTsKKwlBc3NlcnQoIWlzbnVs bCk7CisJaW5kY29sbGF0aW9uID0gKG9pZHZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5kY29s bERhdHVtKTsKKworCWluZGNsYXNzRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwg aHRfaWR4LAorCQkJCQkJCQkJQW51bV9wZ19pbmRleF9pbmRjbGFzcywgJmlzbnVsbCk7CisJQXNz ZXJ0KCFpc251bGwpOworCWluZGNsYXNzID0gKG9pZHZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIo aW5kY2xhc3NEYXR1bSk7CisKKwlpbmRvcHRpb25EYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRF WFJFTElELCBodF9pZHgsCisJCQkJCQkJCQkgQW51bV9wZ19pbmRleF9pbmRvcHRpb24sICZpc251 bGwpOworCUFzc2VydCghaXNudWxsKTsKKwlpbmRvcHRpb24gPSAoaW50MnZlY3RvciAqKSBEYXR1 bUdldFBvaW50ZXIoaW5kb3B0aW9uRGF0dW0pOworCisJLyoKKwkgKiBGZXRjaCB0aGUgcGdfY2xh c3MgdHVwbGUgb2YgdGhlIGluZGV4IHJlbGF0aW9uCisJICovCisJaHRfaWR4cmVsID0gU2VhcmNo U3lzQ2FjaGUxKFJFTE9JRCwgT2JqZWN0SWRHZXREYXR1bShpbmRleHJlbGlkKSk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKGh0X2lkeHJlbCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAg ZmFpbGVkIGZvciByZWxhdGlvbiAldSIsIGluZGV4cmVsaWQpOworCWlkeHJlbHJlYyA9IChGb3Jt X3BnX2NsYXNzKSBHRVRTVFJVQ1QoaHRfaWR4cmVsKTsKKworCS8qCisJICogRmV0Y2ggdGhlIHBn X2FtIHR1cGxlIG9mIHRoZSBpbmRleCcgYWNjZXNzIG1ldGhvZAorCSAqLworCWh0X2FtID0gU2Vh cmNoU3lzQ2FjaGUxKEFNT0lELCBPYmplY3RJZEdldERhdHVtKGlkeHJlbHJlYy0+cmVsYW0pKTsK KwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoaHRfYW0pKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3IgYWNjZXNzIG1ldGhvZCAldSIsCisJCQkgaWR4cmVscmVjLT5yZWxhbSk7 CisJYW1yZWMgPSAoRm9ybV9wZ19hbSkgR0VUU1RSVUNUKGh0X2FtKTsKKworCS8qCisJICogR2V0 IHRoZSBpbmRleCBleHByZXNzaW9ucywgaWYgYW55LiAgKE5PVEU6IHdlIGRvIG5vdCB1c2UgdGhl IHJlbGNhY2hlCisJICogdmVyc2lvbnMgb2YgdGhlIGV4cHJlc3Npb25zIGFuZCBwcmVkaWNhdGUs IGJlY2F1c2Ugd2Ugd2FudCB0byBkaXNwbGF5CisJICogbm9uLWNvbnN0LWZvbGRlZCBleHByZXNz aW9ucy4pCisJICovCisJaWYgKCFoZWFwX2F0dGlzbnVsbChodF9pZHgsIEFudW1fcGdfaW5kZXhf aW5kZXhwcnMsIE5VTEwpKQorCXsKKwkJRGF0dW0JCWV4cHJzRGF0dW07CisJCWJvb2wJCWlzbnVs bDsKKwkJY2hhcgkgICAqZXhwcnNTdHJpbmc7CisKKwkJZXhwcnNEYXR1bSA9IFN5c0NhY2hlR2V0 QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCQkgQW51bV9wZ19pbmRleF9pbmRleHBy cywgJmlzbnVsbCk7CisJCUFzc2VydCghaXNudWxsKTsKKwkJZXhwcnNTdHJpbmcgPSBUZXh0RGF0 dW1HZXRDU3RyaW5nKGV4cHJzRGF0dW0pOworCQlpbmRleHBycyA9IChMaXN0ICopIHN0cmluZ1Rv Tm9kZShleHByc1N0cmluZyk7CisJCXBmcmVlKGV4cHJzU3RyaW5nKTsKKwl9CisJZWxzZQorCQlp bmRleHBycyA9IE5JTDsKKworCWluZGV4cHJfaXRlbSA9IGxpc3RfaGVhZChpbmRleHBycyk7CisK Kwljb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihnZXRfcmVsX25hbWUoaW5kcmVsaWQpLCBp bmRyZWxpZCk7CisKKwlpbml0U3RyaW5nSW5mbygmZGVmaW5pdGlvbkJ1Zik7CisKKwkvKiBPdXRw dXQgaW5kZXggQU0gKi8KKwkqaW5kZXhfYW0gPSBwc3RyZHVwKHF1b3RlX2lkZW50aWZpZXIoTmFt ZVN0cihhbXJlYy0+YW1uYW1lKSkpOworCisJLyogRmV0Y2ggdGhlIGluZGV4IEFNJ3MgQVBJIHN0 cnVjdCAqLworCWFtcm91dGluZSA9IEdldEluZGV4QW1Sb3V0aW5lKGFtcmVjLT5hbWhhbmRsZXIp OworCisJLyoKKwkgKiBPdXRwdXQgaW5kZXggZGVmaW5pdGlvbi4gIE5vdGUgdGhlIG91dGVyIHBh cmVucyBtdXN0IGJlIHN1cHBsaWVkIGJ5CisJICogY2FsbGVyLgorCSAqLworCWZvciAoa2V5bm8g PSAwOyBrZXlubyA8IGlkeHJlYy0+aW5kbmF0dHM7IGtleW5vKyspCisJeworCQlBdHRyTnVtYmVy CWF0dG51bSA9IGlkeHJlYy0+aW5ka2V5LnZhbHVlc1trZXlub107CisJCWludDE2CQlvcHQgPSBp bmRvcHRpb24tPnZhbHVlc1trZXlub107CisJCU9pZAkJCWtleWNvbHR5cGU7CisJCU9pZAkJCWtl eWNvbGNvbGxhdGlvbjsKKwkJT2lkCQkJaW5kY29sbDsKKworCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKCZkZWZpbml0aW9uQnVmLCBrZXlubyA9PSAwID8gIiIgOiAiLCAiKTsKKworCQlpZiAoYXR0 bnVtICE9IDApCisJCXsKKwkJCS8qIFNpbXBsZSBpbmRleCBjb2x1bW4gKi8KKwkJCWNoYXIJICAg KmF0dG5hbWU7CisJCQlpbnQzMgkJa2V5Y29sdHlwbW9kOworCisJCQlhdHRuYW1lID0gZ2V0X2F0 dG5hbWUoaW5kcmVsaWQsIGF0dG51bSwgZmFsc2UpOworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZygmZGVmaW5pdGlvbkJ1ZiwgcXVvdGVfaWRlbnRpZmllcihhdHRuYW1lKSk7CisJCQlnZXRfYXR0 dHlwZXR5cG1vZGNvbGwoaW5kcmVsaWQsIGF0dG51bSwKKwkJCQkJCQkJICAma2V5Y29sdHlwZSwg JmtleWNvbHR5cG1vZCwKKwkJCQkJCQkJICAma2V5Y29sY29sbGF0aW9uKTsKKwkJfQorCQllbHNl CisJCXsKKwkJCS8qIEV4cHJlc3Npb25hbCBpbmRleCAqLworCQkJTm9kZQkgICAqaW5kZXhrZXk7 CisJCQljaGFyCSAgICpzdHI7CisKKwkJCWlmIChpbmRleHByX2l0ZW0gPT0gTlVMTCkKKwkJCQll bG9nKEVSUk9SLCAidG9vIGZldyBlbnRyaWVzIGluIGluZGV4cHJzIGxpc3QiKTsKKwkJCWluZGV4 a2V5ID0gKE5vZGUgKikgbGZpcnN0KGluZGV4cHJfaXRlbSk7CisJCQlpbmRleHByX2l0ZW0gPSBs bmV4dChpbmRleHBycywgaW5kZXhwcl9pdGVtKTsKKwkJCS8qIERlcGFyc2UgKi8KKwkJCXN0ciA9 IGRlcGFyc2VfZXhwcmVzc2lvbihpbmRleGtleSwgY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKwor CQkJLyogTmVlZCBwYXJlbnMgaWYgaXQncyBub3QgYSBiYXJlIGZ1bmN0aW9uIGNhbGwgKi8KKwkJ CWlmIChpbmRleGtleSAmJiBJc0EoaW5kZXhrZXksIEZ1bmNFeHByKSAmJgorCQkJCSgoRnVuY0V4 cHIgKikgaW5kZXhrZXkpLT5mdW5jZm9ybWF0ID09IENPRVJDRV9FWFBMSUNJVF9DQUxMKQorCQkJ CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsIHN0cik7CisJCQllbHNlCisJ CQkJYXBwZW5kU3RyaW5nSW5mbygmZGVmaW5pdGlvbkJ1ZiwgIiglcykiLCBzdHIpOworCisJCQlr ZXljb2x0eXBlID0gZXhwclR5cGUoaW5kZXhrZXkpOworCQkJa2V5Y29sY29sbGF0aW9uID0gZXhw ckNvbGxhdGlvbihpbmRleGtleSk7CisJCX0KKworCQkvKiBBZGQgY29sbGF0aW9uLCBldmVuIGlm IGRlZmF1bHQgKi8KKwkJaW5kY29sbCA9IGluZGNvbGxhdGlvbi0+dmFsdWVzW2tleW5vXTsKKwkJ aWYgKE9pZElzVmFsaWQoaW5kY29sbCkpCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZkZWZpbml0aW9u QnVmLCAiIENPTExBVEUgJXMiLAorCQkJCQkJCSBnZW5lcmF0ZV9jb2xsYXRpb25fbmFtZSgoaW5k Y29sbCkpKTsKKworCQkvKiBBZGQgdGhlIG9wZXJhdG9yIGNsYXNzIG5hbWUsIGV2ZW4gaWYgZGVm YXVsdCAqLworCQlnZXRfb3BjbGFzc19uYW1lKGluZGNsYXNzLT52YWx1ZXNba2V5bm9dLCBJbnZh bGlkT2lkLCAmZGVmaW5pdGlvbkJ1Zik7CisKKwkJLyogQWRkIG9wdGlvbnMgaWYgcmVsZXZhbnQg Ki8KKwkJaWYgKGFtcm91dGluZS0+YW1jYW5vcmRlcikKKwkJeworCQkJLyogSWYgaXQgc3VwcG9y dHMgc29ydCBvcmRlcmluZywgcmVwb3J0IERFU0MgYW5kIE5VTExTIG9wdHMgKi8KKwkJCWlmIChv cHQgJiBJTkRPUFRJT05fREVTQykKKwkJCXsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZk ZWZpbml0aW9uQnVmLCAiIERFU0MiKTsKKwkJCQkvKiBOVUxMUyBGSVJTVCBpcyB0aGUgZGVmYXVs dCBpbiB0aGlzIGNhc2UgKi8KKwkJCQlpZiAoIShvcHQgJiBJTkRPUFRJT05fTlVMTFNfRklSU1Qp KQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCAiIE5VTExTIExB U1QiKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiAob3B0ICYgSU5ET1BUSU9OX05VTExT X0ZJUlNUKQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCAiIE5V TExTIEZJUlNUIik7CisJCQl9CisJCX0KKworCQkvKiBYWFggZXhjbHVkZU9wcyB0aGluZ3kgd2Fz IGhlcmU7IGRvIHdlIG5lZWQgYW55dGhpbmc/ICovCisJfQorCSpkZWZpbml0aW9uID0gZGVmaW5p dGlvbkJ1Zi5kYXRhOworCisJLyogT3V0cHV0IHJlbG9wdGlvbnMgKi8KKwkqcmVsb3B0aW9ucyA9 IGZsYXR0ZW5fcmVsb3B0aW9ucyhpbmRleHJlbGlkKTsKKworCS8qIE91dHB1dCB0YWJsZXNwYWNl ICovCisJeworCQlPaWQJCQl0YmxzcGM7CisKKwkJdGJsc3BjID0gZ2V0X3JlbF90YWJsZXNwYWNl KGluZGV4cmVsaWQpOworCQlpZiAoT2lkSXNWYWxpZCh0YmxzcGMpKQorCQkJKnRhYmxlc3BhY2Ug PSBwc3RyZHVwKHF1b3RlX2lkZW50aWZpZXIoZ2V0X3RhYmxlc3BhY2VfbmFtZSh0YmxzcGMpKSk7 CisJCWVsc2UKKwkJCSp0YWJsZXNwYWNlID0gTlVMTDsKKwl9CisKKwkvKiBSZXBvcnQgaW5kZXgg cHJlZGljYXRlLCBpZiBhbnkgKi8KKwlpZiAoIWhlYXBfYXR0aXNudWxsKGh0X2lkeCwgQW51bV9w Z19pbmRleF9pbmRwcmVkLCBOVUxMKSkKKwl7CisJCU5vZGUJICAgKm5vZGU7CisJCURhdHVtCQlw cmVkRGF0dW07CisJCWJvb2wJCWlzbnVsbDsKKwkJY2hhcgkgICAqcHJlZFN0cmluZzsKKworCQkv KiBDb252ZXJ0IHRleHQgc3RyaW5nIHRvIG5vZGUgdHJlZSAqLworCQlwcmVkRGF0dW0gPSBTeXND YWNoZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJCQkJCQkJQW51bV9wZ19pbmRleF9p bmRwcmVkLCAmaXNudWxsKTsKKwkJQXNzZXJ0KCFpc251bGwpOworCQlwcmVkU3RyaW5nID0gVGV4 dERhdHVtR2V0Q1N0cmluZyhwcmVkRGF0dW0pOworCQlub2RlID0gKE5vZGUgKikgc3RyaW5nVG9O b2RlKHByZWRTdHJpbmcpOworCQlwZnJlZShwcmVkU3RyaW5nKTsKKworCQkvKiBEZXBhcnNlICov CisJCSp3aGVyZUNsYXVzZSA9CisJCQlkZXBhcnNlX2V4cHJlc3Npb24obm9kZSwgY29udGV4dCwg ZmFsc2UsIGZhbHNlKTsKKwl9CisJZWxzZQorCQkqd2hlcmVDbGF1c2UgPSBOVUxMOworCisJLyog Q2xlYW4gdXAgKi8KKwlSZWxlYXNlU3lzQ2FjaGUoaHRfaWR4KTsKKwlSZWxlYXNlU3lzQ2FjaGUo aHRfaWR4cmVsKTsKKwlSZWxlYXNlU3lzQ2FjaGUoaHRfYW0pOworfQorCisvKgorICogT2J0YWlu IHRoZSBkZXBhcnNlZCBkZWZhdWx0IHZhbHVlIGZvciB0aGUgZ2l2ZW4gY29sdW1uIG9mIHRoZSBn aXZlbiB0YWJsZS4KKyAqCisgKiBDYWxsZXIgbXVzdCBoYXZlIHNldCBhIGNvcnJlY3QgZGVwYXJz ZSBjb250ZXh0LgorICovCitzdGF0aWMgY2hhciAqCitSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQo UmVsYXRpb24gcmVsLCBBdHRyTnVtYmVyIGF0dG5vLCBMaXN0ICpkcGNvbnRleHQsCisJCQkJCQkg TGlzdCAqKmV4cHJzKQoreworCU5vZGUgKmRlZnZhbDsKKwljaGFyICpkZWZzdHI7CisKKwlkZWZ2 YWwgPSBidWlsZF9jb2x1bW5fZGVmYXVsdChyZWwsIGF0dG5vKTsKKwlkZWZzdHIgPSBkZXBhcnNl X2V4cHJlc3Npb24oZGVmdmFsLCBkcGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisKKwkvKiBDb2xs ZWN0IHRoZSBleHByZXNzaW9uIGZvciBsYXRlciByZXBsaWNhdGlvbiBzYWZldHkgY2hlY2tzICov CisJaWYgKGV4cHJzKQorCQkqZXhwcnMgPSBsYXBwZW5kKCpleHBycywgZGVmdmFsKTsKKworCXJl dHVybiBkZWZzdHI7Cit9CisKKy8qCisgKiBPYnRhaW4gdGhlIGRlcGFyc2VkIHBhcnRpdGlvbiBi b3VuZCBleHByZXNzaW9uIGZvciB0aGUgZ2l2ZW4gdGFibGUuCisgKi8KK3N0YXRpYyBjaGFyICoK K1JlbGF0aW9uR2V0UGFydGl0aW9uQm91bmQoT2lkIHJlbGlkKQoreworCURhdHVtCQlkZXBhcnNl ZDsKKwlEYXR1bQkJYm91bmREYXR1bTsKKwlib29sCQlpc251bGw7CisJSGVhcFR1cGxlCXR1cGxl OworCisJdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoUkVMT0lELCByZWxpZCk7CisJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKHR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQg Zm9yIHJlbGF0aW9uICV1IiwKKwkJCSByZWxpZCk7CisKKwlib3VuZERhdHVtID0gU3lzQ2FjaGVH ZXRBdHRyKFJFTE9JRCwgdHVwbGUsCisJCQkJCQkJCSBBbnVtX3BnX2NsYXNzX3JlbHBhcnRib3Vu ZCwKKwkJCQkJCQkJICZpc251bGwpOworCisJZGVwYXJzZWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwy KHBnX2dldF9leHByLAorCQkJCQkJCQkgICBDU3RyaW5nR2V0VGV4dERhdHVtKFRleHREYXR1bUdl dENTdHJpbmcoYm91bmREYXR1bSkpLAorCQkJCQkJCQkgICByZWxpZCk7CisKKwlSZWxlYXNlU3lz Q2FjaGUodHVwbGUpOworCisJcmV0dXJuIFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQpOwor fQorCisvKgorICogUmV0dXJuIHRoZSBnaXZlbiBvYmplY3QgdHlwZSBhcyBhIHN0cmluZy4KKyAq Lworc3RhdGljIGNvbnN0IGNoYXIgKgorc3RyaW5naWZ5X29ianR5cGUoT2JqZWN0VHlwZSBvYmp0 eXBlKQoreworCXN3aXRjaCAob2JqdHlwZSkKKwl7CisJCWNhc2UgT0JKRUNUX0FHR1JFR0FURToK KwkJCXJldHVybiAiQUdHUkVHQVRFIjsKKwkJY2FzZSBPQkpFQ1RfQ0FTVDoKKwkJCXJldHVybiAi Q0FTVCI7CisJCWNhc2UgT0JKRUNUX0NPTFVNTjoKKwkJCXJldHVybiAiQ09MVU1OIjsKKwkJY2Fz ZSBPQkpFQ1RfQ09MTEFUSU9OOgorCQkJcmV0dXJuICJDT0xMQVRJT04iOworCQljYXNlIE9CSkVD VF9DT05WRVJTSU9OOgorCQkJcmV0dXJuICJDT05WRVJTSU9OIjsKKwkJY2FzZSBPQkpFQ1RfREFU QUJBU0U6CisJCQlyZXR1cm4gIkRBVEFCQVNFIjsKKwkJY2FzZSBPQkpFQ1RfRE9NQUlOOgorCQkJ cmV0dXJuICJET01BSU4iOworCQljYXNlIE9CSkVDVF9FVkVOVF9UUklHR0VSOgorCQkJcmV0dXJu ICJFVkVOVCBUUklHR0VSIjsKKwkJY2FzZSBPQkpFQ1RfRVhURU5TSU9OOgorCQkJcmV0dXJuICJF WFRFTlNJT04iOworCQljYXNlIE9CSkVDVF9GRFc6CisJCQlyZXR1cm4gIkZPUkVJR04gREFUQSBX UkFQUEVSIjsKKwkJY2FzZSBPQkpFQ1RfRk9SRUlHTl9TRVJWRVI6CisJCQlyZXR1cm4gIlNFUlZF UiI7CisJCWNhc2UgT0JKRUNUX0ZPUkVJR05fVEFCTEU6CisJCQlyZXR1cm4gIkZPUkVJR04gVEFC TEUiOworCQljYXNlIE9CSkVDVF9GVU5DVElPTjoKKwkJCXJldHVybiAiRlVOQ1RJT04iOworCQlj YXNlIE9CSkVDVF9JTkRFWDoKKwkJCXJldHVybiAiSU5ERVgiOworCQljYXNlIE9CSkVDVF9MQU5H VUFHRToKKwkJCXJldHVybiAiTEFOR1VBR0UiOworCQljYXNlIE9CSkVDVF9MQVJHRU9CSkVDVDoK KwkJCXJldHVybiAiTEFSR0UgT0JKRUNUIjsKKwkJY2FzZSBPQkpFQ1RfTUFUVklFVzoKKwkJCXJl dHVybiAiTUFURVJJQUxJWkVEIFZJRVciOworCQljYXNlIE9CSkVDVF9PUENMQVNTOgorCQkJcmV0 dXJuICJPUEVSQVRPUiBDTEFTUyI7CisJCWNhc2UgT0JKRUNUX09QRVJBVE9SOgorCQkJcmV0dXJu ICJPUEVSQVRPUiI7CisJCWNhc2UgT0JKRUNUX09QRkFNSUxZOgorCQkJcmV0dXJuICJPUEVSQVRP UiBGQU1JTFkiOworCQljYXNlIE9CSkVDVF9ST0xFOgorCQkJcmV0dXJuICJST0xFIjsKKwkJY2Fz ZSBPQkpFQ1RfUlVMRToKKwkJCXJldHVybiAiUlVMRSI7CisJCWNhc2UgT0JKRUNUX1NDSEVNQToK KwkJCXJldHVybiAiU0NIRU1BIjsKKwkJY2FzZSBPQkpFQ1RfU0VRVUVOQ0U6CisJCQlyZXR1cm4g IlNFUVVFTkNFIjsKKwkJY2FzZSBPQkpFQ1RfVEFCTEU6CisJCQlyZXR1cm4gIlRBQkxFIjsKKwkJ Y2FzZSBPQkpFQ1RfVEFCTEVTUEFDRToKKwkJCXJldHVybiAiVEFCTEVTUEFDRSI7CisJCWNhc2Ug T0JKRUNUX1RSSUdHRVI6CisJCQlyZXR1cm4gIlRSSUdHRVIiOworCQljYXNlIE9CSkVDVF9UU0NP TkZJR1VSQVRJT046CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04iOworCQkv KgorCQljYXNlIE9CSkVDVF9UU0NPTkZJR19NQVBQSU5HOgorCQkJcmV0dXJuICJURVhUIFNFQVJD SCBDT05GSUdVUkFUSU9OIE1BUFBJTkciOworCQkqLworCQljYXNlIE9CSkVDVF9UU0RJQ1RJT05B Ulk6CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIERJQ1RJT05BUlkiOworCQljYXNlIE9CSkVDVF9U U1BBUlNFUjoKKwkJCXJldHVybiAiVEVYVCBTRUFSQ0ggUEFSU0VSIjsKKwkJY2FzZSBPQkpFQ1Rf VFNURU1QTEFURToKKwkJCXJldHVybiAiVEVYVCBTRUFSQ0ggVEVNUExBVEUiOworCQljYXNlIE9C SkVDVF9UWVBFOgorCQkJcmV0dXJuICJUWVBFIjsKKwkJY2FzZSBPQkpFQ1RfVVNFUl9NQVBQSU5H OgorCQkJcmV0dXJuICJVU0VSIE1BUFBJTkciOworCQljYXNlIE9CSkVDVF9WSUVXOgorCQkJcmV0 dXJuICJWSUVXIjsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9i amVjdCB0eXBlICVkIiwgb2JqdHlwZSk7CisJfQorfQorCisvKgorICogR2l2ZW4gYSBDb2xsZWN0 ZWRDb21tYW5kLCByZXR1cm4gYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGl0LgorICoKKyAqIFRo ZSBjb21tYW5kIGlzIGV4cGFuZGVkIGZ1bGx5LCBzbyB0aGF0IHRoZXJlIGFyZSBubyBhbWJpZ3Vp dGllcyBldmVuIGluIHRoZQorICogZmFjZSBvZiBzZWFyY2hfcGF0aCBjaGFuZ2VzLgorICovCitE YXR1bQorZGRsX2RlcGFyc2VfdG9fanNvbihQR19GVU5DVElPTl9BUkdTKQoreworCUNvbGxlY3Rl ZENvbW1hbmQgKmNtZCA9IChDb2xsZWN0ZWRDb21tYW5kICopIFBHX0dFVEFSR19QT0lOVEVSKDAp OworCWNoYXIJCSAgICpjb21tYW5kOworCisJY29tbWFuZCA9IGRlcGFyc2VfdXRpbGl0eV9jb21t YW5kKGNtZCwgdHJ1ZSk7CisKKwlpZiAoY29tbWFuZCkKKwkJUEdfUkVUVVJOX1RFWFRfUChDU3Ry aW5nR2V0VGV4dERhdHVtKGNvbW1hbmQpKTsKKworCVBHX1JFVFVSTl9OVUxMKCk7Cit9CisKKy8q CisgKiBEZXBhcnNlIGFuIEFsdGVyRnVuY3Rpb25TdG10IChBTFRFUiBGVU5DVElPTikKKyAqCisg KiBHaXZlbiBhIGZ1bmN0aW9uIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQs IHJldHVybiB0aGUgSlNPTgorICogYmxvYiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQu CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJGdW5jdGlvbihPaWQgb2JqZWN0 SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlckZ1bmN0aW9uU3RtdCAqbm9kZSA9IChBbHRl ckZ1bmN0aW9uU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqYWx0ZXJGdW5jOworCU9i alRyZWUJICAgKnNpZ247CisJSGVhcFR1cGxlCXByb2NUdXA7CisJRm9ybV9wZ19wcm9jIHByb2NG b3JtOworCUxpc3QJICAgKnBhcmFtcyA9IE5JTDsKKwlMaXN0CSAgICplbGVtcyA9IE5JTDsKKwlM aXN0Q2VsbCAgICpjZWxsOworCWludAkJCWk7CisKKwkvKiBHZXQgdGhlIHBnX3Byb2MgdHVwbGUg Ki8KKwlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIG9iamVjdElkKTsKKwlpZiAo IUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAg ZmFpbHVyZSBmb3IgZnVuY3Rpb24gd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwlwcm9j Rm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jVHVwKTsKKworCS8qCisJICogVmVy Ym9zZSBzeW50YXgKKwkgKgorCSAqIEFMVEVSIEZVTkNUSU9OICV7c2lnbmF0dXJlfXMgJXtkZWZp bml0aW9uOiB9cworCSAqLworCWFsdGVyRnVuYyA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBGVU5D VElPTiIsIDApOworCisJLyoKKwkgKiBBTFRFUiBGVU5DVElPTiBkb2VzIG5vdCBjaGFuZ2Ugc2ln bmF0dXJlIHNvIHdlIGNhbiB1c2UgY2F0YWxvZworCSAqIHRvIGdldCBpbnB1dCB0eXBlIE9pZHMu CisJICovCisJZm9yIChpID0gMDsgaSA8IHByb2NGb3JtLT5wcm9uYXJnczsgaSsrKQorCXsKKwkJ T2JqVHJlZQkgICAqdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIiV7dHlwZX1UIiwgMCk7CisKKwkJ YXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAidHlwZSIsCisJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl90eXBlKHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV0sIC0xKSk7CisJCXBhcmFt cyA9IGxhcHBlbmQocGFyYW1zLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwl9CisKKwlz aWduID0gbmV3X29ianRyZWUoIiIpOworCisJYXBwZW5kX29iamVjdF9vYmplY3Qoc2lnbiwgIiV7 aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVy ZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElkKSk7CisJYXBwZW5kX2FycmF5X29i amVjdChzaWduLCAiKCV7YXJndW1lbnRzOiwgfXMpIiwgcGFyYW1zKTsKKworCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KGFsdGVyRnVuYywgIiV7c2lnbmF0dXJlfXMiLCBzaWduKTsKKworCWZvcmVhY2go Y2VsbCwgbm9kZS0+YWN0aW9ucykKKwl7CisJCURlZkVsZW0JKmRlZmVsID0gKERlZkVsZW0gKikg bGZpcnN0KGNlbGwpOworCQlPYmpUcmVlCSAgICp0bXBvYmogPSBOVUxMOworCisJCWlmIChzdHJj bXAoZGVmZWwtPmRlZm5hbWUsICJ2b2xhdGlsaXR5IikgPT0gMCkKKwkJeworCQkJdG1wb2JqID0g bmV3X29ianRyZWVfVkEoc3RyVmFsKGRlZmVsLT5hcmcpLCAwKTsKKwkJfQorCQllbHNlIGlmIChz dHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzdHJpY3QiKSA9PSAwKQorCQl7CisJCQl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQShpbnRWYWwoZGVmZWwtPmFyZykgPworCQkJCQkJCQkgIlJFVFVSTlMgTlVM TCBPTiBOVUxMIElOUFVUIiA6CisJCQkJCQkJCSAiQ0FMTEVEIE9OIE5VTEwgSU5QVVQiLCAwKTsK KwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzZWN1cml0eSIpID09IDAp CisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKGludFZhbChkZWZlbC0+YXJnKSA/CisJ CQkJCQkJCSAiU0VDVVJJVFkgREVGSU5FUiIgOiAiU0VDVVJJVFkgSU5WT0tFUiIsIDApOworCQl9 CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgImxlYWtwcm9vZiIpID09IDApCisJ CXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKGludFZhbChkZWZlbC0+YXJnKSA/CisJCQkJ CQkJCSAiTEVBS1BST09GIiA6ICJOT1QgTEVBS1BST09GIiwgMCk7CisJCX0KKwkJZWxzZSBpZiAo c3RyY21wKGRlZmVsLT5kZWZuYW1lLCAiY29zdCIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5l d19vYmp0cmVlX1ZBKCJDT1NUICV7Y29zdH1uIiwgMSwKKwkJCQkJCQkJICJjb3N0IiwgT2JqVHlw ZUZsb2F0LAorCQkJCQkJCQkgZGVmR2V0TnVtZXJpYyhkZWZlbCkpOworCQl9CisJCWVsc2UgaWYg KHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInJvd3MiKSA9PSAwKQorCQl7CisJCQl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiUk9XUyIsIDApOworCQkJaWYgKGRlZkdldE51bWVyaWMoZGVmZWwpID09 IDApCisJCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJ CQllbHNlCisJCQkJYXBwZW5kX2Zsb2F0X29iamVjdCh0bXBvYmosICIle3Jvd3N9biIsCisJCQkJ CQkJCQlkZWZHZXROdW1lcmljKGRlZmVsKSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVs LT5kZWZuYW1lLCAic2V0IikgPT0gMCkKKwkJeworCQkJVmFyaWFibGVTZXRTdG10ICpzc3RtdCA9 IChWYXJpYWJsZVNldFN0bXQgKikgZGVmZWwtPmFyZzsKKwkJCWNoYXIgKnZhbHVlID0gRXh0cmFj dFNldFZhcmlhYmxlQXJncyhzc3RtdCk7CisKKwkJCXRtcG9iaiA9IGRlcGFyc2VfRnVuY3Rpb25T ZXQoc3N0bXQtPmtpbmQsIHNzdG10LT5uYW1lLCB2YWx1ZSk7CisJCX0KKwkJZWxzZSBpZiAoc3Ry Y21wKGRlZmVsLT5kZWZuYW1lLCAic3VwcG9ydCIpID09IDApCisJCXsKKwkJCU9pZAkJCWFyZ3R5 cGVzWzFdOworCisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZSgiU1VQUE9SVCIpOworCisJCQlBc3Nl cnQocHJvY0Zvcm0tPnByb3N1cHBvcnQpOworCisJCQkvKgorCQkJICogV2Ugc2hvdWxkIHF1YWxp ZnkgdGhlIHN1cHBvcnQgZnVuY3Rpb24ncyBuYW1lIGlmIGl0IHdvdWxkbid0IGJlCisJCQkgKiBy ZXNvbHZlZCBieSBsb29rdXAgaW4gdGhlIGN1cnJlbnQgc2VhcmNoIHBhdGguCisJCQkgKi8KKwkJ CWFyZ3R5cGVzWzBdID0gSU5URVJOQUxPSUQ7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBv YmosICIle25hbWV9cyIsCisJCQkJCQkJCSBnZW5lcmF0ZV9mdW5jdGlvbl9uYW1lKHByb2NGb3Jt LT5wcm9zdXBwb3J0LCAxLAorCQkJCQkJCQkJCQkJCQlOSUwsIGFyZ3R5cGVzLAorCQkJCQkJCQkJ CQkJCQlmYWxzZSwgTlVMTCwKKwkJCQkJCQkJCQkJCQkJRVhQUl9LSU5EX05PTkUpKTsKKwkJfQor CQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJwYXJhbGxlbCIpID09IDApCisJCXsK KwkJCWNoYXIgKmZtdCA9IHBzcHJpbnRmKCJQQVJBTExFTCAlcyIsIHN0clZhbChkZWZlbC0+YXJn KSk7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZShmbXQpOworCQl9CisKKwkJZWxlbXMgPSBsYXBw ZW5kKGVsZW1zLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwl9CisKKwlhcHBlbmRfYXJy YXlfb2JqZWN0KGFsdGVyRnVuYywgIiV7ZGVmaW5pdGlvbjogfXMiLCBlbGVtcyk7CisKKwlSZWxl YXNlU3lzQ2FjaGUocHJvY1R1cCk7CisKKwlyZXR1cm4gYWx0ZXJGdW5jOworfQorCisvKgorICog ZGVwYXJzZSBhbiBBTFRFUiAuLi4gU0VUIFNDSEVNQSBjb21tYW5kLgorICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0FsdGVyT2JqZWN0U2NoZW1hU3RtdChPYmplY3RBZGRyZXNzIGFkZHJl c3MsIE5vZGUgKnBhcnNldHJlZSwKKwkJCQkJCQkgIE9iamVjdEFkZHJlc3Mgb2xkc2NoZW1hKQor eworCUFsdGVyT2JqZWN0U2NoZW1hU3RtdCAqbm9kZSA9IChBbHRlck9iamVjdFNjaGVtYVN0bXQg KikgcGFyc2V0cmVlOworCU9ialRyZWUJICAgKmFsdGVyU3RtdDsKKwljaGFyCSAgICpmbXQ7CisJ Y2hhcgkgICAqaWRlbnRpdHk7CisJY2hhcgkgICAqbmV3c2NoZW1hOworCWNoYXIJICAgKm9sZHNj aG5hbWU7CisJY2hhcgkgICAqaWRlbnQ7CisKKwluZXdzY2hlbWEgPSBub2RlLT5uZXdzY2hlbWE7 CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRFUiAlcyAle2lkZW50aXR5 fXMgU0VUIFNDSEVNQSAle25ld3NjaGVtYX1JCisJICovCisJZm10ID0gcHNwcmludGYoIkFMVEVS ICVzIiwgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+b2JqZWN0VHlwZSkpOworCWFsdGVyU3RtdCA9 IG5ld19vYmp0cmVlKGZtdCk7CisKKwkvKgorCSAqIFNpbmNlIHRoZSBjb21tYW5kIGhhcyBhbHJl YWR5IHRha2VuIHBsYWNlIGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YKKwkgKiBjYXRhbG9ncywg Z2V0T2JqZWN0SWRlbnRpdHkgcmV0dXJucyB0aGUgb2JqZWN0IG5hbWUgd2l0aCB0aGUgYWxyZWFk eQorCSAqIGNoYW5nZWQgc2NoZW1hLiAgVGhlIG91dHB1dCBvZiBvdXIgZGVwYXJzaW5nIG11c3Qg cmV0dXJuIHRoZSBvcmlnaW5hbAorCSAqIHNjaGVtYSBuYW1lIGhvd2V2ZXIsIHNvIHdlIGNob3Ag dGhlIHNjaGVtYSBuYW1lIG9mZiB0aGUgaWRlbnRpdHkgc3RyaW5nCisJICogYW5kIHRoZW4gcHJl cGVuZCB0aGUgcXVvdGVkIHNjaGVtYSBuYW1lLgorCSAqCisJICogWFhYIFRoaXMgaXMgcHJldHR5 IGNsdW5reS4gQ2FuIHdlIGRvIGJldHRlcj8KKwkgKi8KKwlpZGVudGl0eSA9IGdldE9iamVjdElk ZW50aXR5KCZhZGRyZXNzLCBmYWxzZSk7CisJb2xkc2NobmFtZSA9IGdldF9uYW1lc3BhY2VfbmFt ZShvbGRzY2hlbWEub2JqZWN0SWQpOworCWlmICghb2xkc2NobmFtZSkKKwkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNjaGVtYSB3aXRoIE9JRCAldSIsCisJCQkgb2xkc2No ZW1hLm9iamVjdElkKTsKKworCWlkZW50ID0gcHNwcmludGYoIiVzJXMiLCBxdW90ZV9pZGVudGlm aWVyKG9sZHNjaG5hbWUpLAorCQkJCQkgaWRlbnRpdHkgKyBzdHJsZW4ocXVvdGVfaWRlbnRpZmll cihuZXdzY2hlbWEpKSk7CisJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJTdG10LCAiJXtpZGVu dGl0eX1zIiwgaWRlbnQpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJTdG10LCAiU0VU IFNDSEVNQSAle25ld3NjaGVtYX1JIiwgbmV3c2NoZW1hKTsKKworCXJldHVybiBhbHRlclN0bXQ7 Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyT3BlcmF0b3JTdG10IChBTFRFUiBPUEVSQVRP UiAuLi4gU0VUIC4uLikuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJPcGVy YXRvclN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJSGVhcFR1cGxlICAg CW9wclR1cDsKKwlBbHRlck9wZXJhdG9yU3RtdCAqbm9kZSA9IChBbHRlck9wZXJhdG9yU3RtdCAq KSBwYXJzZXRyZWU7CisJT2JqVHJlZQkJICAgKmFsdGVyb3A7CisJRm9ybV9wZ19vcGVyYXRvciBv cHJGb3JtOworCUxpc3RDZWxsCSAgICpjZWxsOworCUxpc3QJCSAgICpsaXN0ID0gTklMOworCisJ b3ByVHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRVJPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0 SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3ByVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOwor CW9wckZvcm0gPSAoRm9ybV9wZ19vcGVyYXRvcikgR0VUU1RSVUNUKG9wclR1cCk7CisKKwkvKgor CSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRFUiBPUEVSQVRPUiAle2lkZW50aXR5fU8g KCV7bGVmdF90eXBlfVQsICV7cmlnaHRfdHlwZX1UKSBTRVQKKwkgKiAoJXtlbGVtczosIH1zKQor CSAqLworCWFsdGVyb3AgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgT1BFUkFUT1IgJXtpZGVudGl0 eX1PIiwgMSwKKwkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wckZvcm0tPm9wcm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJ CQkgIE5hbWVTdHIob3ByRm9ybS0+b3BybmFtZSkpKTsKKworCS8qIExFRlRBUkcgKi8KKwlpZiAo T2lkSXNWYWxpZChvcHJGb3JtLT5vcHJsZWZ0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0 ZXJvcCwgIigle2xlZnRfdHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3By Rm9ybS0+b3BybGVmdCwgLTEpKTsKKwllbHNlCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVy b3AsICIoJXtsZWZ0X3R5cGV9cyIsICJOT05FIik7CisKKwkvKiBSSUdIVEFSRyAqLworCUFzc2Vy dChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmxlZnQpKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChh bHRlcm9wLCAiLCAle3JpZ2h0X3R5cGV9VCkiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBl KG9wckZvcm0tPm9wcnJpZ2h0LCAtMSkpOworCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRpb25z KQorCXsKKwkJRGVmRWxlbSAqZWxlbSA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJT2Jq VHJlZSAqdG1wb2JqID0gTlVMTDsKKworCQlpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJyZXN0 cmljdCIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJSRVNUUklDVD0i LCAxLAorCQkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJyZXN0cmljdCIpOworCQkJ aWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BycmVzdCkpCisJCQkJYXBwZW5kX29iamVjdF9vYmpl Y3QodG1wb2JqLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIG9wckZvcm0t Pm9wcnJlc3QpKTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIl e3Byb2NlZHVyZX1zIiwgIk5PTkUiKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVm bmFtZSwgImpvaW4iKSA9PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiSk9J Tj0iLCAxLAorCQkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJqb2luIik7CisJCQlp ZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJqb2luKSkKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVj dCh0bXBvYmosICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+ b3Byam9pbikpOworCQkJZWxzZQorCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7 cHJvY2VkdXJlfXMiLCAiTk9ORSIpOworCQl9CisKKwkJQXNzZXJ0KHRtcG9iaik7CisJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCX0KKworCWFwcGVu ZF9hcnJheV9vYmplY3QoYWx0ZXJvcCwgIlNFVCAoJXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJ UmVsZWFzZVN5c0NhY2hlKG9wclR1cCk7CisKKwlyZXR1cm4gYWx0ZXJvcDsKK30KKworLyoKKyAq IERlcGFyc2UgYW4gQUxURVIgT1BFUkFUT1IgRkFNSUxZIEFERC9EUk9QIGNvbW1hbmQuCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJPcEZhbWlseShDb2xsZWN0ZWRDb21tYW5k ICpjbWQpCit7CisJT2JqVHJlZQkgICAqYWx0ZXJPcEZhbTsKKwlBbHRlck9wRmFtaWx5U3RtdCAq c3RtdCA9IChBbHRlck9wRmFtaWx5U3RtdCAqKSBjbWQtPnBhcnNldHJlZTsKKwlIZWFwVHVwbGUJ ZnRwOworCUZvcm1fcGdfb3BmYW1pbHkgb3BmRm9ybTsKKwlMaXN0CSAgICpsaXN0OworCUxpc3RD ZWxsICAgKmNlbGw7CisKKwlmdHAgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQsCisJCQkJ CQkgIE9iamVjdElkR2V0RGF0dW0oY21kLT5kLm9wZmFtLmFkZHJlc3Mub2JqZWN0SWQpKTsKKwlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQoZnRwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBm YWlsZWQgZm9yIG9wZXJhdG9yIGZhbWlseSAldSIsCisJCQkgY21kLT5kLm9wZmFtLmFkZHJlc3Mu b2JqZWN0SWQpOworCW9wZkZvcm0gPSAoRm9ybV9wZ19vcGZhbWlseSkgR0VUU1RSVUNUKGZ0cCk7 CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRFUiBPUEVSQVRPUiBGQU1J TFkgJXtpZGVudGl0eX1EIFVTSU5HICV7YW1uYW1lfUkgQUREL0RST1AKKwkgKiAle2l0ZW1zOiwg fXMKKwkgKi8KKwlhbHRlck9wRmFtID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIE9QRVJBVE9SIEZB TUlMWSAle2lkZW50aXR5fUQgIgorCQkJCQkJCQkiVVNJTkcgJXthbW5hbWV9SSIsIDIsCisJCQkJ CQkJCSJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZShvcGZGb3JtLT5vcGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCSBOYW1lU3RyKG9w ZkZvcm0tPm9wZm5hbWUpKSwKKwkJCQkJCQkJImFtbmFtZSIsIE9ialR5cGVTdHJpbmcsIHN0bXQt PmFtbmFtZSk7CisKKwlsaXN0ID0gTklMOworCWZvcmVhY2goY2VsbCwgY21kLT5kLm9wZmFtLm9w ZXJhdG9ycykKKwl7CisJCU9wRmFtaWx5TWVtYmVyICpvcGVyID0gbGZpcnN0KGNlbGwpOworCQlP YmpUcmVlCSAgICp0bXBvYmo7CisKKwkJLyoKKwkJICogVmVyYm9zZSBzeW50YXgKKwkJICoKKwkJ ICogT1BFUkFUT1IgJXtudW19biAle29wZXJhdG9yfU8oJXtsdHlwZX1ULCAle3J0eXBlfVQpICV7 cHVycG9zZX1zCisJCSAqLworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiT1BFUkFUT1IgJXtu dW19biIsIDEsCisJCQkJCQkJICJudW0iLCBPYmpUeXBlSW50ZWdlciwgb3Blci0+bnVtYmVyKTsK KworCQkvKiBBZGQgdGhlIG9wZXJhdG9yIG5hbWU7IHRoZSBEUk9QIGNhc2UgZG9lc24ndCBoYXZl IHRoaXMgKi8KKwkJaWYgKCFzdG10LT5pc0Ryb3ApCisJCXsKKwkJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHRtcG9iaiwgIiV7b3BlcmF0b3J9TyIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoT3BlcmF0b3JSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJIG9wZXItPm9iamVj dCkpOworCQl9CisKKwkJLyogQWRkIHRoZSB0eXBlcyAqLworCQlhcHBlbmRfb2JqZWN0X29iamVj dCh0bXBvYmosICIoJXtsdHlwZX1ULCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9w ZXItPmxlZnR0eXBlLCAtMSkpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3J0 eXBlfVQpIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3Blci0+cmlnaHR0eXBlLCAt MSkpOworCisJCS8qIEFkZCB0aGUgRk9SIFNFQVJDSCAvIEZPUiBPUkRFUiBCWSBjbGF1c2U7IG5v dCBpbiB0aGUgRFJPUCBjYXNlICovCisJCWlmICghc3RtdC0+aXNEcm9wKQorCQl7CisJCQlpZiAo b3Blci0+c29ydGZhbWlseSA9PSBJbnZhbGlkT2lkKQorCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcG9iaiwgIiV7cHVycG9zZX1zIiwgIkZPUiBTRUFSQ0giKTsKKwkJCWVsc2UKKwkJCXsKKwkJ CQlPYmpUcmVlCSAgICp0bXBvYmoyOworCisJCQkJdG1wb2JqMiA9IG5ld19vYmp0cmVlX1ZBKCJG T1IgT1JERVIgQlkiLCAwKTsKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmoyLCAiJXtv cGZhbWlseX1EIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0 b3JGYW1pbHlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBvcGVyLT5zb3J0ZmFtaWx5KSk7 CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtwdXJwb3NlfXMiLCB0bXBvYmoy KTsKKwkJCX0KKwkJfQorCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcG9iaikpOworCX0KKworCWZvcmVhY2goY2VsbCwgY21kLT5kLm9wZmFtLnByb2NlZHVyZXMp CisJeworCQlPcEZhbWlseU1lbWJlciAqcHJvYyA9IGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZQkg ICAqdG1wb2JqOworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJGVU5DVElPTiAle251bX1u ICgle2x0eXBlfVQsICV7cnR5cGV9VCkiLCAzLAorCQkJCQkJCSAibnVtIiwgT2JqVHlwZUludGVn ZXIsIHByb2MtPm51bWJlciwKKwkJCQkJCQkgImx0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+bGVmdHR5cGUsIC0xKSwKKwkJCQkJCQkgInJ0 eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+ cmlnaHR0eXBlLCAtMSkpOworCisJCS8qIEFkZCB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgYXJnIHR5 cGVzOyB0aGUgRFJPUCBjYXNlIGRvZXNuJ3QgaGF2ZSB0aGlzICovCisJCWlmICghc3RtdC0+aXNE cm9wKQorCQl7CisJCQlIZWFwVHVwbGUJcHJvY1R1cDsKKwkJCUZvcm1fcGdfcHJvYyBwcm9jRm9y bTsKKwkJCU9pZAkJICAgKnByb2FyZ3R5cGVzOworCQkJTGlzdAkgICAqYXJnbGlzdCA9IE5JTDsK KwkJCWludAkJCWk7CisKKwkJCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgT2Jq ZWN0SWRHZXREYXR1bShwcm9jLT5vYmplY3QpKTsKKwkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChw cm9jVHVwKSkKKwkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHJvY2Vk dXJlICV1IiwgcHJvYy0+b2JqZWN0KTsKKwkJCXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VU U1RSVUNUKHByb2NUdXApOworCisJCQlwcm9hcmd0eXBlcyA9IHByb2NGb3JtLT5wcm9hcmd0eXBl cy52YWx1ZXM7CisJCQlmb3IgKGkgPSAwOyBpIDwgcHJvY0Zvcm0tPnByb25hcmdzOyBpKyspCisJ CQl7CisJCQkJT2JqVHJlZQkgICAqYXJnOworCisJCQkJYXJnID0gbmV3X29ianRyZWVfZm9yX3R5 cGUocHJvYXJndHlwZXNbaV0sIC0xKTsKKwkJCQlhcmdsaXN0ID0gbGFwcGVuZChhcmdsaXN0LCBu ZXdfb2JqZWN0X29iamVjdChhcmcpKTsKKwkJCX0KKworCQkJYXBwZW5kX29iamVjdF9vYmplY3Qo dG1wb2JqLCAiJXtmdW5jdGlvbn1EIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIocHJvY0Zv cm0tPnByb25hbWUpKSk7CisKKwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwgIigiKTsK KwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiJXthcmd0eXBlczosIH1UIiwgYXJnbGlz dCk7CisJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBvYmosICIpIik7CisKKwkJCVJlbGVhc2VT eXNDYWNoZShwcm9jVHVwKTsKKwkJfQorCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcG9iaikpOworCX0KKworCWlmIChzdG10LT5pc0Ryb3ApCisJCWFwcGVuZF9m b3JtYXRfc3RyaW5nKGFsdGVyT3BGYW0sICJEUk9QIik7CisJZWxzZQorCQlhcHBlbmRfZm9ybWF0 X3N0cmluZyhhbHRlck9wRmFtLCAiQUREIik7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVy T3BGYW0sICIle2l0ZW1zOiwgfXMiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZShmdHApOwor CisJcmV0dXJuIGFsdGVyT3BGYW07Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQWx0ZXJPd25lclN0 bXQgKEFMVEVSIC4uLiBPV05FUiBUTyAuLi4pLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0FsdGVyT3duZXJTdG10KE9iamVjdEFkZHJlc3MgYWRkcmVzcywgTm9kZSAqcGFyc2V0cmVl KQoreworCUFsdGVyT3duZXJTdG10ICpub2RlID0gKEFsdGVyT3duZXJTdG10ICopIHBhcnNldHJl ZTsKKwlPYmpUcmVlCQkgICAqb3duZXJTdG10OworCWNoYXIJCSAgICpmbXQ7CisKKwlmbXQgPSBw c3ByaW50ZigiQUxURVIgJXMgJSV7aWRlbnRpdHl9cyBPV05FUiBUTyAlJXtuZXdvd25lcn1JIiwK KwkJCQkgICBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5vYmplY3RUeXBlKSk7CisKKwlvd25lclN0 bXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkJICAgImlkZW50aXR5IiwgT2JqVHlw ZVN0cmluZywKKwkJCQkJCQkgICBnZXRPYmplY3RJZGVudGl0eSgmYWRkcmVzcywgZmFsc2UpLAor CQkJCQkJCSAgICJuZXdvd25lciIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJICAgZ2V0X3JvbGVz cGVjX25hbWUobm9kZS0+bmV3b3duZXIpKTsKKworCXJldHVybiBvd25lclN0bXQ7Cit9CisKKy8q CisgKiBEZXBhcnNlIGFuIEFsdGVyU2VxU3RtdC4KKyAqCisgKiBHaXZlbiBhIHNlcXVlbmNlIE9J RCBhbmQgYSBwYXJzZXRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAq IHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgor ZGVwYXJzZV9BbHRlclNlcVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJ T2JqVHJlZQkJKmFsdGVyU2VxOworCU9ialRyZWUJCSp0bXBvYmo7CisJUmVsYXRpb24JIHJlbGF0 aW9uOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhOworCUxpc3QJICAgKmVsZW1zID0g TklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCVJl bGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVwbGU7CisJQWx0ZXJTZXFTdG10ICphbHRlclNl cVN0bXQgPSAoQWx0ZXJTZXFTdG10ICopIHBhcnNldHJlZTsKKworCS8qCisJICogU2VxdWVuY2Ug Zm9yIElERU5USVRZIENPTFVNTiBvdXRwdXQgc2VwYXJhdGVseSh2aWEgQ1JFQVRFIFRBQkxFIG9y CisJICogQUxURVIgVEFCTEUpOyByZXR1cm4gZW1wdHkgaGVyZS4KKwkgKi8KKwlpZiAoYWx0ZXJT ZXFTdG10LT5mb3JfaWRlbnRpdHkpCisJCXJldHVybiBOVUxMOworCisJc2VxZGF0YSA9IGdldF9z ZXF1ZW5jZV92YWx1ZXMob2JqZWN0SWQpOworCisJcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9i amVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCXJlbCA9IHRhYmxlX29wZW4oU2VxdWVuY2VSZWxh dGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlzZXF0dXBsZSA9IFNlYXJjaFN5c0NhY2hlQ29w eTEoU0VRUkVMSUQsCisJCQkJCQkJCSAgIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQoc2VxdHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3Igc2VxdWVuY2UgJXUiLAorCQkJIG9iamVjdElkKTsKKworCXNlcWZvcm0g PSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNUKHNlcXR1cGxlKTsKKworCWFsdGVyU2VxID0g bmV3X29ianRyZWUoIkFMVEVSIFNFUVVFTkNFIik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkgICBS ZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbikpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KGFsdGVyU2VxLCAiJXtpZGVudGl0eX1EIiwgdG1wb2JqKTsKKworCWZvcmVhY2goY2VsbCwgKChB bHRlclNlcVN0bXQgKikgcGFyc2V0cmVlKS0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gKmVsZW0g PSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCU9iakVsZW0gKm5ld2VsbTsKKworCQlpZiAo c3RyY21wKGVsZW0tPmRlZm5hbWUsICJjYWNoZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNl X1NlcV9DYWNoZShhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2UpOworCQllbHNlIGlmIChzdHJjbXAo ZWxlbS0+ZGVmbmFtZSwgImN5Y2xlIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX0N5 Y2xlKGFsdGVyU2VxLCBzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5k ZWZuYW1lLCAiaW5jcmVtZW50IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX0luY3Jl bWVudEJ5KGFsdGVyU2VxLCBzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVt LT5kZWZuYW1lLCAibWludmFsdWUiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfTWlu dmFsdWUoYWx0ZXJTZXEsIHNlcWZvcm0sIGZhbHNlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0t PmRlZm5hbWUsICJtYXh2YWx1ZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9NYXh2 YWx1ZShhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ ZGVmbmFtZSwgInN0YXJ0IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX1N0YXJ0d2l0 aChhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVm bmFtZSwgInJlc3RhcnQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfUmVzdGFydChh bHRlclNlcSwgc2VxZGF0YSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAib3du ZWRfYnkiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfT3duZWRCeShhbHRlclNlcSwg b2JqZWN0SWQsIGZhbHNlKTsKKwkJZWxzZQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgc2VxdWVu Y2Ugb3B0aW9uICVzIiwgZWxlbS0+ZGVmbmFtZSk7CisKKwkJZWxlbXMgPSBsYXBwZW5kKGVsZW1z LCBuZXdlbG0pOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJTZXEsICIle2RlZmlu aXRpb246IH1zIiwgZWxlbXMpOworCisJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2Nr KTsKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVy biBhbHRlclNlcTsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJUeXBlU3RtdC4KKyAqCisg KiBHaXZlbiBhIHR5cGUgT0lEIGFuZCBhIHBhcnNldHJlZSB0aGF0IG1vZGlmaWVkIGl0LCByZXR1 cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciB0eXBlLgorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyVHlwZVNldFN0bXQoT2lkIG9iamVjdElkLCBOb2Rl ICpjbWQpCit7CisJQWx0ZXJUeXBlU3RtdCAqYWx0ZXJUeXBlU2V0U3RtdCA9IChBbHRlclR5cGVT dG10ICopY21kOworCU9ialRyZWUJCSphbHRlclR5cGU7CisJTGlzdENlbGwgICAqcGw7CisJTGlz dAkgICAqZWxlbXMgPSBOSUw7CisJSGVhcFR1cGxlICAgdHlwVHVwOworCUZvcm1fcGdfdHlwZSB0 eXBGb3JtOworCisJdHlwVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0 RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHlwVHVwKSkKKwkJZWxv ZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgd2l0aCBPSUQgJXUiLCBvYmpl Y3RJZCk7CisJdHlwRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0eXBUdXApOworCisJ YWx0ZXJUeXBlID0gbmV3X29ianRyZWUoIkFMVEVSIFRZUEUiKTsKKwlhcHBlbmRfb2JqZWN0X29i amVjdChhbHRlclR5cGUsICIle2lkZW50aXR5fUQgU0VUIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElkKSk7 CisKKwlmb3JlYWNoKHBsLCBhbHRlclR5cGVTZXRTdG10LT5vcHRpb25zKQorCXsKKwkJRGVmRWxl bSAgICAqZGVmZWwgPSAoRGVmRWxlbSAqKSBsZmlyc3QocGwpOworCQlPYmpFbGVtICpuZXdlbG07 CisKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInN0b3JhZ2UiKSA9PSAwKQorCQkJbmV3 ZWxtID0gZGVwYXJzZV9UeXBlX1N0b3JhZ2UoYWx0ZXJUeXBlLCB0eXBGb3JtKTsKKwkJaWYgKHN0 cmNtcChkZWZlbC0+ZGVmbmFtZSwgInJlY2VpdmUiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJz ZV9UeXBlX1JlY2VpdmUoYWx0ZXJUeXBlLCB0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ ZGVmbmFtZSwgInNlbmQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1NlbmQoYWx0 ZXJUeXBlLCB0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInR5cG1vZF9p biIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfVHlwbW9kX0luKGFsdGVyVHlwZSwg dHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJ0eXBtb2Rfb3V0IikgPT0g MCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9UeXBtb2RfT3V0KGFsdGVyVHlwZSwgdHlwRm9y bSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJhbmFseXplIikgPT0gMCkKKwkJCW5l d2VsbSA9IGRlcGFyc2VfVHlwZV9BbmFseXplKGFsdGVyVHlwZSwgdHlwRm9ybSk7CisJCWlmIChz dHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzdWJzY3JpcHQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVw YXJzZV9UeXBlX1N1YnNjcmlwdChhbHRlclR5cGUsIHR5cEZvcm0pOworCQllbHNlCisJCQllbG9n KEVSUk9SLCAiaW52YWxpZCB0eXBlIG9wdGlvbiAlcyIsIGRlZmVsLT5kZWZuYW1lKTsKKworCQll bGVtcyA9IGxhcHBlbmQoZWxlbXMsIG5ld2VsbSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVj dChhbHRlclR5cGUsICIoJXtkZWZpbml0aW9uOiB9cykiLCBlbGVtcyk7CisKKwlSZWxlYXNlU3lz Q2FjaGUodHlwVHVwKTsKKworCXJldHVybiBhbHRlclR5cGU7Cit9CisKKy8qCisgKiBEZXBhcnNl IGEgQ29tcG9zaXRlVHlwZVN0bXQgKENSRUFURSBUWVBFIEFTKQorICoKKyAqIEdpdmVuIGEgdHlw ZSBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJl ZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0NvbXBvc2l0ZVR5cGVTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFy c2V0cmVlKQoreworCUNvbXBvc2l0ZVR5cGVTdG10ICpub2RlID0gKENvbXBvc2l0ZVR5cGVTdG10 ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpjb21wb3NpdGU7CisJSGVhcFR1cGxlCXR5cHR1 cDsKKwlGb3JtX3BnX3R5cGUgdHlwZm9ybTsKKwlSZWxhdGlvbgl0eXBlcmVsOworCUxpc3QJICAg KmRwY29udGV4dDsKKwlMaXN0CSAgICp0YWJsZWVsdHMgPSBOSUw7CisKKwkvKiBGaW5kIHRoZSBw Z190eXBlIGVudHJ5IGFuZCBvcGVuIHRoZSBjb3JyZXNwb25kaW5nIHJlbGF0aW9uICovCisJdHlw dHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQp KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHlwdHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgJXUiLCBvYmplY3RJZCk7CisJdHlwZm9ybSA9IChGb3Jt X3BnX3R5cGUpIEdFVFNUUlVDVCh0eXB0dXApOworCXR5cGVyZWwgPSByZWxhdGlvbl9vcGVuKHR5 cGZvcm0tPnR5cHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJZHBjb250ZXh0ID0gZGVwYXJz ZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZSh0eXBlcmVsKSwKKwkJCQkJCQkJ CVJlbGF0aW9uR2V0UmVsaWQodHlwZXJlbCkpOworCisJY29tcG9zaXRlID0gbmV3X29ianRyZWVf VkEoIkNSRUFURSBUWVBFIiwgMCk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY29tcG9zaXRlLCAi JXtpZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElkKSk7CisKKwl0YWJsZWVsdHMgPSBkZXBh cnNlX1RhYmxlRWxlbWVudHModHlwZXJlbCwgbm9kZS0+Y29sZGVmbGlzdCwgZHBjb250ZXh0LAor CQkJCQkJCQkJICBmYWxzZSwJCS8qIG5vdCB0eXBlZCAqLworCQkJCQkJCQkJICB0cnVlKTsJCS8q IGNvbXBvc2l0ZSB0eXBlICovCisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGNvbXBvc2l0ZSwgIkFT ICgle2NvbHVtbnM6LCB9cykiLCB0YWJsZWVsdHMpOworCisJdGFibGVfY2xvc2UodHlwZXJlbCwg QWNjZXNzU2hhcmVMb2NrKTsKKwlSZWxlYXNlU3lzQ2FjaGUodHlwdHVwKTsKKworCXJldHVybiBj b21wb3NpdGU7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlRW51bVN0bXQgKENSRUFURSBU WVBFIEFTIEVOVU0pCisgKgorICogR2l2ZW4gYSB0eXBlIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0 aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNy ZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRW51 bVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlRW51bVN0bXQg Km5vZGUgPSAoQ3JlYXRlRW51bVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAgKmVudW10 eXBlOworCUxpc3QJICAgKnZhbHVlczsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJZW51bXR5cGUg PSBuZXdfb2JqdHJlZSgiQ1JFQVRFIFRZUEUiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChlbnVt dHlwZSwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJZCkpOworCisJdmFsdWVzID0g TklMOworCWZvcmVhY2goY2VsbCwgbm9kZS0+dmFscykKKwl7CisJCVN0cmluZyAgICp2YWwgPSBs Zmlyc3Rfbm9kZShTdHJpbmcsIGNlbGwpOworCisJCXZhbHVlcyA9IGxhcHBlbmQodmFsdWVzLCBu ZXdfc3RyaW5nX29iamVjdChzdHJWYWwodmFsKSkpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmpl Y3QoZW51bXR5cGUsICJBUyBFTlVNICgle3ZhbHVlczosIH1MKSIsIHZhbHVlcyk7CisJcmV0dXJu IGVudW10eXBlOworfQorCisvKgorICogRGVwYXJzZSBhIENSRUFURSBUWVBFIEFTIFJBTkdFIHN0 YXRlbWVudAorICoKKyAqIEdpdmVuIGEgdHlwZSBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBj cmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlv biBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVJhbmdlU3Rt dChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlCSAgICpyYW5nZTsK KwlPYmpUcmVlCSAgICp0bXA7CisJTGlzdAkgICAqZGVmaW5pdGlvbiA9IE5JTDsKKwlSZWxhdGlv bglwZ19yYW5nZTsKKwlIZWFwVHVwbGUJcmFuZ2VUdXA7CisJRm9ybV9wZ19yYW5nZSByYW5nZUZv cm07CisJU2NhbktleURhdGEga2V5WzFdOworCVN5c1NjYW5EZXNjIHNjYW47CisKKwlwZ19yYW5n ZSA9IHRhYmxlX29wZW4oUmFuZ2VSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCVNj YW5LZXlJbml0KCZrZXlbMF0sCisJCQkJQW51bV9wZ19yYW5nZV9ybmd0eXBpZCwKKwkJCQlCVEVx dWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShvYmplY3RJ ZCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihwZ19yYW5nZSwgUmFuZ2VUeXBpZElu ZGV4SWQsIHRydWUsCisJCQkJCQkJICBOVUxMLCAxLCBrZXkpOworCisJcmFuZ2VUdXAgPSBzeXN0 YWJsZV9nZXRuZXh0KHNjYW4pOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChyYW5nZVR1cCkpCisJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByYW5nZSB3aXRoIHR5cGUgb2lk ICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlyYW5nZUZvcm0gPSAoRm9ybV9wZ19yYW5nZSkgR0VU U1RSVUNUKHJhbmdlVHVwKTsKKworCXJhbmdlID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBUWVBF IiwgMCk7CisJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklk LCBvYmplY3RJZCk7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmFuZ2UsICIle2lkZW50aXR5fUQg QVMgUkFOR0UiLCB0bXApOworCisJLyogU1VCVFlQRSAqLworCXRtcCA9IG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwKKwkJCQkJCQkJCSAgcmFuZ2VGb3JtLT5ybmdz dWJ0eXBlKTsKKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1VCVFlQRSA9ICV7dHlwZX1EIiwKKwkJ CQkJCSAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3VidHlwZSIsCisJCQkJ CQkgInR5cGUiLCBPYmpUeXBlT2JqZWN0LCB0bXApOworCWRlZmluaXRpb24gPSBsYXBwZW5kKGRl ZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogU1VCVFlQRV9PUENMQVNT ICovCisJaWYgKE9pZElzVmFsaWQocmFuZ2VGb3JtLT5ybmdzdWJvcGMpKQorCXsKKwkJdG1wID0g bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yQ2xhc3NSZWxhdGlvbklkLAorCQkJ CQkJCQkJCSAgcmFuZ2VGb3JtLT5ybmdzdWJvcGMpOworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgi U1VCVFlQRV9PUENMQVNTID0gJXtvcGNsYXNzfUQiLAorCQkJCQkJCSAyLAorCQkJCQkJCSAiY2xh dXNlIiwgT2JqVHlwZVN0cmluZywgIm9wY2xhc3MiLAorCQkJCQkJCSAib3BjbGFzcyIsIE9ialR5 cGVPYmplY3QsIHRtcCk7CisJCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIENPTExBVElPTiAqLworCWlmIChPaWRJc1Zh bGlkKHJhbmdlRm9ybS0+cm5nY29sbGF0aW9uKSkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCSAgcmFuZ2VGb3Jt LT5ybmdjb2xsYXRpb24pOworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQ09MTEFUSU9OID0gJXtj b2xsYXRpb259RCIsCisJCQkJCQkJIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAiY29sbGF0aW9uIiwKKwkJCQkJCQkgImNvbGxhdGlvbiIsIE9ialR5cGVPYmplY3QsIHRtcCk7 CisJCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCX0KKworCS8qIENBTk9OSUNBTCAqLworCWlmIChPaWRJc1ZhbGlkKHJhbmdlRm9ybS0+ cm5nY2Fub25pY2FsKSkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQ cm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCSAgcmFuZ2VGb3JtLT5ybmdjYW5vbmljYWwp OworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQ0FOT05JQ0FMID0gJXtjYW5vbmljYWx9RCIsCisJ CQkJCQkJIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY2Fub25pY2FsIiwK KwkJCQkJCQkgImNhbm9uaWNhbCIsIE9ialR5cGVPYmplY3QsIHRtcCk7CisJCWRlZmluaXRpb24g PSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8q IFNVQlRZUEVfRElGRiAqLworCWlmIChPaWRJc1ZhbGlkKHJhbmdlRm9ybS0+cm5nc3ViZGlmZikp CisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRp b25JZCwKKwkJCQkJCQkJCQkgIHJhbmdlRm9ybS0+cm5nc3ViZGlmZik7CisJCXRtcCA9IG5ld19v Ymp0cmVlX1ZBKCJTVUJUWVBFX0RJRkYgPSAle3N1YnR5cGVfZGlmZn1EIiwKKwkJCQkJCQkgMiwK KwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdWJ0eXBlX2RpZmYiLAorCQkJCQkJ CSAic3VidHlwZV9kaWZmIiwgT2JqVHlwZU9iamVjdCwgdG1wKTsKKwkJZGVmaW5pdGlvbiA9IGxh cHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJYXBwZW5k X2FycmF5X29iamVjdChyYW5nZSwgIigle2RlZmluaXRpb246LCB9cykiLCBkZWZpbml0aW9uKTsK KworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xvc2UocGdfcmFuZ2UsIFJvd0V4 Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIHJhbmdlOworfQorCisvKgorICogRGVwYXJzZSBhbiBB bHRlckVudW1TdG10LgorICoKKyAqIEdpdmVuIGEgdHlwZSBPSUQgYW5kIGEgcGFyc2V0cmVlIHRo YXQgbW9kaWZpZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFs dGVyIHR5cGUuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJFbnVtU3RtdChP aWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlckVudW1TdG10ICpub2RlID0g KEFsdGVyRW51bVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAgKmFsdGVyRW51bTsKKwor CWFsdGVyRW51bSA9CW5ld19vYmp0cmVlX1ZBKCJBTFRFUiBUWVBFIiwgMCk7CisJYXBwZW5kX29i amVjdF9vYmplY3QoYWx0ZXJFbnVtLCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElk KSk7CisKKwlpZiAoIW5vZGUtPm9sZFZhbCkKKwl7CisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGFs dGVyRW51bSwgIkFERCBWQUxVRSIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckVudW0s ICIle2lmX25vdF9leGlzdHN9cyIsCisJCQkJCQkJbm9kZS0+c2tpcElmTmV3VmFsRXhpc3RzID8g IklGIE5PVCBFWElTVFMiIDogIiIpOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRW51 bSwgIiV7dmFsdWV9TCIsIG5vZGUtPm5ld1ZhbCk7CisKKwkJaWYgKG5vZGUtPm5ld1ZhbE5laWdo Ym9yKQorCQl7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckVudW0sICIle2FmdGVyX29y X2JlZm9yZX1zIiwKKwkJCQkJCQkJbm9kZS0+bmV3VmFsSXNBZnRlciA/ICJBRlRFUiIgOiAiQkVG T1JFIik7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckVudW0sICIle25laWdoYm91cn1M Iiwgbm9kZS0+bmV3VmFsTmVpZ2hib3IpOworCQl9CisJfQorCWVsc2UKKwl7CisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KGFsdGVyRW51bSwgIlJFTkFNRSBWQUxVRSAle3ZhbHVlfUwgVE8iLAorCQkJ CQkJCSBub2RlLT5vbGRWYWwpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckVudW0sICIl e25ld3ZhbHVlfUwiLAorCQkJCQkJCSBub2RlLT5uZXdWYWwpOworCX0KKworCXJldHVybiBhbHRl ckVudW07Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIENyZWF0ZUNhc3RTdG10LgorICoKKyAqIEdp dmVuIGEgc2VxdWVuY2UgT0lEIGFuZCBhIHBhcnNldHJlZSB0aGF0IG1vZGlmaWVkIGl0LCByZXR1 cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUNhc3RTdG10KE9pZCBvYmplY3RJZCwg Tm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUNhc3RTdG10ICpub2RlID0gKENyZWF0ZUNhc3RT dG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbgljYXN0cmVsOworCUhlYXBUdXBsZQljYXN0VHVw OworCUZvcm1fcGdfY2FzdCBjYXN0Rm9ybTsKKwlPYmpUcmVlCSAgICpjcmVhdGVDYXN0OworCWNo YXIJICAgKmNvbnRleHQ7CisKKwljYXN0cmVsID0gdGFibGVfb3BlbihDYXN0UmVsYXRpb25JZCwg QWNjZXNzU2hhcmVMb2NrKTsKKwljYXN0VHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChj YXN0cmVsLCBBbnVtX3BnX2Nhc3Rfb2lkLCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKGNhc3RUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY2Fz dCB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwljYXN0Rm9ybSA9IChGb3JtX3BnX2Nhc3QpIEdF VFNUUlVDVChjYXN0VHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENS RUFURSBDQVNUICgle3NvdXJjZXR5cGV9VCBBUyAle3RhcmdldHR5cGV9VCkgJXttZWNoYW5pc219 cyAle2NvbnRleHR9cworCSAqLworCWNyZWF0ZUNhc3QgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRF IENBU1QgKCV7c291cmNldHlwZX1UIEFTICV7dGFyZ2V0dHlwZX1UKSIsCisJCQkJCQkJCTIsICJz b3VyY2V0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUo Y2FzdEZvcm0tPmNhc3Rzb3VyY2UsIC0xKSwKKwkJCQkJCQkJInRhcmdldHR5cGUiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShjYXN0Rm9ybS0+Y2FzdHRhcmdl dCwgLTEpKTsKKworCWlmIChub2RlLT5pbm91dCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3Jl YXRlQ2FzdCwgIiV7bWVjaGFuaXNtfXMiLCAiV0lUSCBJTk9VVCIpOworCWVsc2UgaWYgKG5vZGUt PmZ1bmMgPT0gTlVMTCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlQ2FzdCwgIiV7bWVj aGFuaXNtfXMiLCAiV0lUSE9VVCBGVU5DVElPTiIpOworCWVsc2UKKwl7CisJCU9ialRyZWUJICAg KnRtcG9iajsKKwkJU3RyaW5nSW5mb0RhdGEgZnVuYzsKKwkJSGVhcFR1cGxlCWZ1bmNUdXA7CisJ CUZvcm1fcGdfcHJvYyBmdW5jRm9ybTsKKwkJaW50CQkJaTsKKworCQlmdW5jVHVwID0gU2VhcmNo U3lzQ2FjaGUxKFBST0NPSUQsIGNhc3RGb3JtLT5jYXN0ZnVuYyk7CisJCWZ1bmNGb3JtID0gKEZv cm1fcGdfcHJvYykgR0VUU1RSVUNUKGZ1bmNUdXApOworCisJCWluaXRTdHJpbmdJbmZvKCZmdW5j KTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmZnVuYywgIiVzKCIsCisJCQkJCQlxdW90ZV9xdWFsaWZp ZWRfaWRlbnRpZmllcihnZXRfbmFtZXNwYWNlX25hbWUoZnVuY0Zvcm0tPnByb25hbWVzcGFjZSks CisJCQkJCQkJCQkJCQkgICBOYW1lU3RyKGZ1bmNGb3JtLT5wcm9uYW1lKSkpOworCQlmb3IgKGkg PSAwOyBpIDwgZnVuY0Zvcm0tPnByb25hcmdzOyBpKyspCisJCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKCZmdW5jLAorCQkJCQkJCQkgICBmb3JtYXRfdHlwZV9iZV9xdWFsaWZpZWQoZnVuY0Zvcm0t PnByb2FyZ3R5cGVzLnZhbHVlc1tpXSkpOworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmZnVuYywg JyknKTsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiV0lUSCBGVU5DVElPTiAle2Nhc3Rm dW5jdGlvbn1zIiwgMSwKKwkJCQkJCQkgImNhc3RmdW5jdGlvbiIsIE9ialR5cGVTdHJpbmcsIGZ1 bmMuZGF0YSk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUNhc3QsICIle21lY2hhbmlz bX1zIiwgdG1wb2JqKTsKKworCQlSZWxlYXNlU3lzQ2FjaGUoZnVuY1R1cCk7CisJfQorCisJc3dp dGNoIChub2RlLT5jb250ZXh0KQorCXsKKwkJY2FzZSBDT0VSQ0lPTl9JTVBMSUNJVDoKKwkJCWNv bnRleHQgPSAiQVMgSU1QTElDSVQiOworCQkJYnJlYWs7CisJCWNhc2UgQ09FUkNJT05fQVNTSUdO TUVOVDoKKwkJCWNvbnRleHQgPSAiQVMgQVNTSUdOTUVOVCI7CisJCQlicmVhazsKKwkJY2FzZSBD T0VSQ0lPTl9FWFBMSUNJVDoKKwkJCWNvbnRleHQgPSAiIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0 OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgY29lcmNpb24gY29kZSAlYyIsIG5vZGUtPmNvbnRl eHQpOworCQkJcmV0dXJuIE5VTEw7CS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KKwl9CisJYXBw ZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlQ2FzdCwgIiV7Y29udGV4dH1zIiwgY29udGV4dCk7CisK Kwl0YWJsZV9jbG9zZShjYXN0cmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIGNyZWF0 ZUNhc3Q7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFsbCB0aGUgY29sbGVjdGVkIHN1YmNvbW1hbmRz IGFuZCByZXR1cm4gYW4gT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlCisgKiBhbHRlciBjb21tYW5k LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyVGFibGVTdG10KENvbGxlY3Rl ZENvbW1hbmQgKmNtZCkKK3sKKwlPYmpUcmVlCSAgICphbHRlclRhYmxlU3RtdDsKKwlPYmpUcmVl CSAgICp0bXBvYmo7CisJT2JqVHJlZQkgICAqdG1wb2JqMjsKKwlMaXN0CSAgICpkcGNvbnRleHQ7 CisJUmVsYXRpb24JcmVsOworCUxpc3QJICAgKnN1YmNtZHMgPSBOSUw7CisJTGlzdENlbGwgICAq Y2VsbDsKKwljaGFyCSAgICpmbXRzdHI7CisJY29uc3QgY2hhciAqcmVsdHlwZTsKKwlib29sCQlp c3R5cGUgPSBmYWxzZTsKKwlMaXN0CSAgICpleHBycyA9IE5JTDsKKworCUFzc2VydChjbWQtPnR5 cGUgPT0gU0NUX0FsdGVyVGFibGUpOworCisJcmVsID0gcmVsYXRpb25fb3BlbihjbWQtPmQuYWx0 ZXJUYWJsZS5vYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlkcGNvbnRleHQgPSBkZXBhcnNl X2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksCisJCQkJCQkJCQljbWQt PmQuYWx0ZXJUYWJsZS5vYmplY3RJZCk7CisKKwlzd2l0Y2ggKHJlbC0+cmRfcmVsLT5yZWxraW5k KQorCXsKKwkJY2FzZSBSRUxLSU5EX1JFTEFUSU9OOgorCQljYXNlIFJFTEtJTkRfUEFSVElUSU9O RURfVEFCTEU6CisJCQlyZWx0eXBlID0gIlRBQkxFIjsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJ TkRfSU5ERVg6CisJCWNhc2UgUkVMS0lORF9QQVJUSVRJT05FRF9JTkRFWDoKKwkJCXJlbHR5cGUg PSAiSU5ERVgiOworCQkJYnJlYWs7CisJCWNhc2UgUkVMS0lORF9WSUVXOgorCQkJcmVsdHlwZSA9 ICJWSUVXIjsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfQ09NUE9TSVRFX1RZUEU6CisJCQly ZWx0eXBlID0gIlRZUEUiOworCQkJaXN0eXBlID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIFJF TEtJTkRfRk9SRUlHTl9UQUJMRToKKwkJCXJlbHR5cGUgPSAiRk9SRUlHTiBUQUJMRSI7CisJCQli cmVhazsKKworCQkvKiBUT0RPIHN1cHBvcnQgZm9yIHBhcnRpdGlvbmVkIHRhYmxlICovCisKKwkJ ZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIHJlbGtpbmQgJWQiLCByZWwtPnJk X3JlbC0+cmVsa2luZCk7CisJfQorCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICog QUxURVIgcmVsdHlwZSAle2lkZW50aXR5fUQgJXtzdWJjbWRzOiwgfXMKKwkgKi8KKwlmbXRzdHIg PSBwc3ByaW50ZigiQUxURVIgJXMiLCByZWx0eXBlKTsKKwlhbHRlclRhYmxlU3RtdCA9IG5ld19v Ymp0cmVlKGZtdHN0cik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVs LT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5h bWUocmVsKSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJUYWJsZVN0bXQsICIle2lkZW50 aXR5fUQiLCB0bXBvYmopOworCisJZm9yZWFjaChjZWxsLCBjbWQtPmQuYWx0ZXJUYWJsZS5zdWJj bWRzKQorCXsKKwkJQ29sbGVjdGVkQVRTdWJjbWQgKnN1YiA9IChDb2xsZWN0ZWRBVFN1YmNtZCAq KSBsZmlyc3QoY2VsbCk7CisJCUFsdGVyVGFibGVDbWQJKnN1YmNtZCA9IChBbHRlclRhYmxlQ21k ICopIHN1Yi0+cGFyc2V0cmVlOworCQlPYmpUcmVlCSAgICp0cmVlOworCisJCUFzc2VydChJc0Eo c3ViY21kLCBBbHRlclRhYmxlQ21kKSk7CisKKwkJc3dpdGNoIChzdWJjbWQtPnN1YnR5cGUpCisJ CXsKKwkJCWNhc2UgQVRfQWRkQ29sdW1uOgorCQkJY2FzZSBBVF9BZGRDb2x1bW5SZWN1cnNlOgor CQkJCS8qIFhYWCBuZWVkIHRvIHNldCB0aGUgInJlY3Vyc2UiIGJpdCBzb21ld2hlcmU/ICovCisJ CQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgQ29sdW1uRGVmKSk7CisJCQkJdHJlZSA9IGRlcGFy c2VfQ29sdW1uRGVmKHJlbCwgZHBjb250ZXh0LCBmYWxzZSwKKwkJCQkJCQkJCQkgKENvbHVtbkRl ZiAqKSBzdWJjbWQtPmRlZiwgdHJ1ZSwgJmV4cHJzKTsKKwkJCQlmbXRzdHIgPSBwc3ByaW50Zigi QUREICVzICUle2RlZmluaXRpb259cyIsCisJCQkJCQkJCSAgaXN0eXBlID8gIkFUVFJJQlVURSIg OiAiQ09MVU1OIik7CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoZm10c3RyLCAyLAorCQkJ CQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBjb2x1bW4iLAorCQkJCQkJCQkJICJk ZWZpbml0aW9uIiwgT2JqVHlwZU9iamVjdCwgdHJlZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgQVRfQWRkSW5kZXhDb25zdHJhaW50OgorCQkJCXsKKwkJCQkJSW5kZXhTdG10ICAqaXN0bXQ7 CisJCQkJCVJlbGF0aW9uCWlkeDsKKwkJCQkJT2lkCQkJY29uc3RyT2lkID0gc3ViLT5hZGRyZXNz Lm9iamVjdElkOworCisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIEluZGV4U3RtdCkpOwor CQkJCQlpc3RtdCA9IChJbmRleFN0bXQgKikgc3ViY21kLT5kZWY7CisKKwkJCQkJQXNzZXJ0KGlz dG10LT5pc2NvbnN0cmFpbnQgJiYgaXN0bXQtPnVuaXF1ZSk7CisKKwkJCQkJaWR4ID0gcmVsYXRp b25fb3Blbihpc3RtdC0+aW5kZXhPaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJCQkJLyoKKwkJ CQkJICogVmVyYm9zZSBzeW50YXgKKwkJCQkJICoKKwkJCQkJICogQUREIENPTlNUUkFJTlQgJXtu YW1lfUkgJXtjb25zdHJhaW50X3R5cGV9cyBVU0lORyBJTkRFWAorCQkJCQkgKiAlaW5kZXhfbmFt ZX1JICV7ZGVmZXJyYWJsZX1zICV7aW5pdF9kZWZlcnJlZH1zCisJCQkJCSAqLworCQkJCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiQUREIENPTlNUUkFJTlQgJXtuYW1lfUkiLCAyLAorCQkJCQkJ CQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgY29uc3RyYWludCB1c2luZyBpbmRleCIs CisJCQkJCQkJCQkJICJuYW1lIiwgT2JqVHlwZVN0cmluZywgZ2V0X2NvbnN0cmFpbnRfbmFtZShj b25zdHJPaWQpKTsKKworCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2NvbnN0 cmFpbnRfdHlwZX1zIiwgaXN0bXQtPmRlZmVycmFibGUgPworCQkJCQkJCQkJCSAiREVGRVJSQUJM RSIgOiAiTk9UIERFRkVSUkFCTEUiKTsKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2Jq LCAiVVNJTkcgSU5ERVggJXtpbmRleF9uYW1lfUkiLAorCQkJCQkJCQkJCSBSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShpZHgpKTsKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtk ZWZlcnJhYmxlfXMiLCBpc3RtdC0+ZGVmZXJyYWJsZSA/CisJCQkJCQkJCQkJICJERUZFUlJBQkxF IiA6ICJOT1QgREVGRVJSQUJMRSIpOworCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmos ICIle2luaXRfZGVmZXJyZWR9cyIsIGlzdG10LT5pbml0ZGVmZXJyZWQgPworCQkJCQkJCQkJCSAi SU5JVElBTExZIERFRkVSUkVEIiA6ICJJTklUSUFMTFkgSU1NRURJQVRFIik7CisKKwkJCQkJc3Vi Y21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkJ CQkJcmVsYXRpb25fY2xvc2UoaWR4LCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCX0KKwkJCQlicmVh azsKKworCQkJY2FzZSBBVF9SZUFkZEluZGV4OgorCQkJY2FzZSBBVF9SZUFkZENvbnN0cmFpbnQ6 CisJCQljYXNlIEFUX1JlQWRkQ29tbWVudDoKKwkJCWNhc2UgQVRfUmVwbGFjZVJlbE9wdGlvbnM6 CisJCQkJLyogU3VidHlwZXMgdXNlZCBmb3IgaW50ZXJuYWwgb3BlcmF0aW9uczsgbm90aGluZyB0 byBkbyBoZXJlICovCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkQ29sdW1uVG9WaWV3Ogor CQkJCS8qIENSRUFURSBPUiBSRVBMQUNFIFZJRVcgLS0gbm90aGluZyB0byBkbyBoZXJlICovCisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQ29sdW1uRGVmYXVsdDoKKwkJCQlpZiAoc3ViY21kLT5k ZWYgPT0gTlVMTCkKKwkJCQl7CisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBD T0xVTU4gJXtjb2x1bW59SSBEUk9QIERFRkFVTFQiLCAyLAorCQkJCQkJCQkJCSAidHlwZSIsIE9i alR5cGVTdHJpbmcsICJkcm9wIGRlZmF1bHQiLAorCQkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlw ZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJTGlz dAkgICAqZHBjb250ZXh0OworCQkJCQlIZWFwVHVwbGUJYXR0cnR1cDsKKwkJCQkJQXR0ck51bWJl cglhdHRubzsKKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7 Y29sdW1ufUkgU0VUIERFRkFVTFQiLCAyLAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJzZXQgZGVmYXVsdCIsCisJCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBz dWJjbWQtPm5hbWUpOworCisJCQkJCWRwY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVs YXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwKKwkJCQkJCQkJCQkJCQlSZWxhdGlvbkdldFJlbGlk KHJlbCkpOworCQkJCQlhdHRydHVwID0gU2VhcmNoU3lzQ2FjaGVBdHROYW1lKFJlbGF0aW9uR2V0 UmVsaWQocmVsKSwgc3ViY21kLT5uYW1lKTsKKwkJCQkJYXR0bm8gPSAoKEZvcm1fcGdfYXR0cmli dXRlKSBHRVRTVFJVQ1QoYXR0cnR1cCkpLT5hdHRudW07CisJCQkJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRtcG9iaiwgIiV7ZGVmaW5pdGlvbn1zIiwKKwkJCQkJCQkJCQkgUmVsYXRpb25HZXRDb2x1 bW5EZWZhdWx0KHJlbCwgYXR0bm8sIGRwY29udGV4dCwgTlVMTCkpOworCQkJCQlSZWxlYXNlU3lz Q2FjaGUoYXR0cnR1cCk7CisJCQkJfQorCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJv cE5vdE51bGw6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2Nv bHVtbn1JIERST1AgTk9UIE5VTEwiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgImRyb3Agbm90IG51bGwiLAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBz dWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldE5vdE51bGw6CisJ CQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBO T1QgTlVMTCIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IG5vdCBu dWxsIiwKKwkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmop KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wRXhwcmVzc2lvbjoKKwkJCQl0bXBvYmog PSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJPUCBFWFBSRVNTSU9O IiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGV4cHJlc3Npb24i LAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7aWZfbm90X2V4aXN0c31zIiwKKwkJCQkJ CQkJCSBzdWJjbWQtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIjogIiIpOworCQkJCXN1YmNtZHMg PSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFr OworCisJCQljYXNlIEFUX1NldFN0YXRpc3RpY3M6CisJCQkJeworCQkJCQlBc3NlcnQoSXNBKHN1 YmNtZC0+ZGVmLCBJbnRlZ2VyKSk7CisJCQkJCWlmIChzdWJjbWQtPm5hbWUpCisJCQkJCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIFNUQVRJU1RJ Q1MgJXtzdGF0aXN0aWNzfW4iLAorCQkJCQkJCQkJCQkgMywKKwkJCQkJCQkJCQkJICJ0eXBlIiwg T2JqVHlwZVN0cmluZywgInNldCBzdGF0aXN0aWNzIiwKKwkJCQkJCQkJCQkJICJjb2x1bW4iLCBP YmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJCQkJCSAic3RhdGlzdGljcyIsIE9i alR5cGVJbnRlZ2VyLAorCQkJCQkJCQkJCQkgaW50VmFsKChJbnRlZ2VyICopIHN1YmNtZC0+ZGVm KSk7CisJCQkJCWVsc2UKKwkJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xV TU4gJXtjb2x1bW59biBTRVQgU1RBVElTVElDUyAle3N0YXRpc3RpY3N9biIsCisJCQkJCQkJCQkJ CSAzLAorCQkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHN0YXRpc3RpY3Mi LAorCQkJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVJbnRlZ2VyLCBzdWJjbWQtPm51bSwKKwkJ CQkJCQkJCQkJICJzdGF0aXN0aWNzIiwgT2JqVHlwZUludGVnZXIsCisJCQkJCQkJCQkJCSBpbnRW YWwoKEludGVnZXIgKikgc3ViY21kLT5kZWYpKTsKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3Vi Y21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX1NldE9wdGlvbnM6CisJCQljYXNlIEFUX1Jlc2V0T3B0aW9uczoKKwkJCQlzdWJj bWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCgKKwkJCQkJCQkJCSAgZGVw YXJzZV9Db2x1bW5TZXRPcHRpb25zKHN1YmNtZCkpKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9TZXRTdG9yYWdlOgorCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIFN0cmluZykpOworCQkJ CXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgU1RP UkFHRSAle3N0b3JhZ2V9cyIsIDMsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi c2V0IHN0b3JhZ2UiLAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQt Pm5hbWUsCisJCQkJCQkJCQkgInN0b3JhZ2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIHN0 clZhbCgoU3RyaW5nICopIHN1YmNtZC0+ZGVmKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3Vi Y21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug QVRfU2V0Q29tcHJlc3Npb246CisJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgU3RyaW5nKSk7 CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNF VCBDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1zIiwKKwkJCQkJCQkJCSAzLAorCQkJ CQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBjb21wcmVzc2lvbiIsCisJCQkJCQkJ CQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCSAiY29t cHJlc3Npb25fbWV0aG9kIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBzdHJWYWwoKFN0cmlu ZyAqKSBzdWJjbWQtPmRlZikpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BDb2x1 bW5SZWN1cnNlOgorCQkJY2FzZSBBVF9Ecm9wQ29sdW1uOgorCQkJCWZtdHN0ciA9IHBzcHJpbnRm KCJEUk9QICVzICUle2NvbHVtbn1JIiwKKwkJCQkJCQkJICBpc3R5cGUgPyAiQVRUUklCVVRFIiA6 ICJDT0xVTU4iKTsKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShmbXRzdHIsIDIsCisJCQkJ CQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBjb2x1bW4iLAorCQkJCQkJCQkJICJj b2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXRtcG9iajIgPSBuZXdf b2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDEsCisJCQkJCQkJCQkgICJwcmVzZW50IiwgT2JqVHlwZUJv b2wsIHN1YmNtZC0+YmVoYXZpb3IpOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwg IiV7Y2FzY2FkZX1zIiwgdG1wb2JqMik7CisKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRz LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9B ZGRJbmRleDoKKwkJCQl7CisJCQkJCU9pZAkJCWlkeE9pZCA9IHN1Yi0+YWRkcmVzcy5vYmplY3RJ ZDsKKwkJCQkJSW5kZXhTdG10ICAqaXN0bXQ7CisJCQkJCVJlbGF0aW9uCWlkeDsKKwkJCQkJY29u c3QgY2hhciAqaWR4bmFtZTsKKwkJCQkJT2lkCQkJY29uc3RyT2lkOworCisJCQkJCUFzc2VydChJ c0Eoc3ViY21kLT5kZWYsIEluZGV4U3RtdCkpOworCQkJCQlpc3RtdCA9IChJbmRleFN0bXQgKikg c3ViY21kLT5kZWY7CisKKwkJCQkJaWYgKCFpc3RtdC0+aXNjb25zdHJhaW50KQorCQkJCQkJYnJl YWs7CisKKwkJCQkJaWR4ID0gcmVsYXRpb25fb3BlbihpZHhPaWQsIEFjY2Vzc1NoYXJlTG9jayk7 CisJCQkJCWlkeG5hbWUgPSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpZHgpOworCisJCQkJCWNv bnN0ck9pZCA9IGdldF9yZWxhdGlvbl9jb25zdHJhaW50X29pZCgKKwkJCQkJCWNtZC0+ZC5hbHRl clRhYmxlLm9iamVjdElkLCBpZHhuYW1lLCBmYWxzZSk7CisKKwkJCQkJdG1wb2JqID0gbmV3X29i anRyZWVfVkEoIkFERCBDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgMywKKwkJ CQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0cmFpbnQiLAorCQkJCQkJ CQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIGlkeG5hbWUsCisJCQkJCQkJCQkJICJkZWZpbml0 aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29t bWFuZF9zaW1wbGUoY29uc3RyT2lkKSk7CisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJCQkJCXJlbGF0aW9uX2Nsb3NlKGlkeCwg QWNjZXNzU2hhcmVMb2NrKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkQ29u c3RyYWludDoKKwkJCWNhc2UgQVRfQWRkQ29uc3RyYWludFJlY3Vyc2U6CisJCQkJeworCQkJCQkv KiBYWFggbmVlZCB0byBzZXQgdGhlICJyZWN1cnNlIiBiaXQgc29tZXdoZXJlPyAqLworCQkJCQlP aWQJCQljb25zdHJPaWQgPSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7CisJCQkJCWJvb2wJCWlzbnVs bDsKKwkJCQkJSGVhcFR1cGxlCXR1cDsKKwkJCQkJRGF0dW0JCXZhbDsKKwkJCQkJQ29uc3RyYWlu dCAqY29uc3RyOworCisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIENvbnN0cmFpbnQpKTsK KwkJCQkJY29uc3RyID0gIGNhc3ROb2RlKENvbnN0cmFpbnQsIHN1YmNtZC0+ZGVmKTsKKworCQkJ CQlpZiAoIWNvbnN0ci0+c2tpcF92YWxpZGF0aW9uKQorCQkJCQl7CisJCQkJCQl0dXAgPSBTZWFy Y2hTeXNDYWNoZTEoQ09OU1RST0lELCBPYmplY3RJZEdldERhdHVtKGNvbnN0ck9pZCkpOworCisJ CQkJCQlpZiAoSGVhcFR1cGxlSXNWYWxpZCh0dXApKQorCQkJCQkJeworCQkJCQkJCWNoYXIJICAg KmNvbmJpbjsKKworCQkJCQkJCS8qIEZldGNoIGNvbnN0cmFpbnQgZXhwcmVzc2lvbiBpbiBwYXJz ZXRyZWUgZm9ybSAqLworCQkJCQkJCXZhbCA9IFN5c0NhY2hlR2V0QXR0cihDT05TVFJPSUQsIHR1 cCwKKwkJCQkJCQkJCQkJCSAgQW51bV9wZ19jb25zdHJhaW50X2NvbmJpbiwgJmlzbnVsbCk7CisK KwkJCQkJCQlpZiAoIWlzbnVsbCkKKwkJCQkJCQl7CisJCQkJCQkJCWNvbmJpbiA9IFRleHREYXR1 bUdldENTdHJpbmcodmFsKTsKKwkJCQkJCQkJZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCBzdHJpbmdU b05vZGUoY29uYmluKSk7CisJCQkJCQkJfQorCisJCQkJCQkJUmVsZWFzZVN5c0NhY2hlKHR1cCk7 CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUREIENP TlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCAzLAorCQkJCQkJCQkJCSAidHlwZSIs IE9ialR5cGVTdHJpbmcsICJhZGQgY29uc3RyYWludCIsCisJCQkJCQkJCQkJICJuYW1lIiwgT2Jq VHlwZVN0cmluZywgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25zdHJPaWQpLAorCQkJCQkJCQkJCSAi ZGVmaW5pdGlvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIHBnX2dldF9jb25zdHJhaW50 ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0ck9pZCkpOworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfQWx0ZXJDb25zdHJhaW50OgorCQkJCXsKKwkJCQkJT2lkCQljb25zdHJPaWQg PSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7CisJCQkJCUNvbnN0cmFpbnQgKmMgPSAoQ29uc3RyYWlu dCAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQkvKiBJZiBubyBjb25zdHJhaW50IHdhcyBhbHRlcmVk LCBzaWxlbnRseSBza2lwIGl0ICovCisJCQkJCWlmICghT2lkSXNWYWxpZChjb25zdHJPaWQpKQor CQkJCQkJYnJlYWs7CisKKwkJCQkJQXNzZXJ0KElzQShjLCBDb25zdHJhaW50KSk7CisJCQkJCXRt cG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmZXJy YWJsZX1zICV7aW5pdF9kZWZlcnJlZH1zIiwKKwkJCQkJCQkJCQkgNCwKKwkJCQkJCQkJCQkgInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWx0ZXIgY29uc3RyYWludCIsCisJCQkJCQkJCQkJICJuYW1l IiwgT2JqVHlwZVN0cmluZywgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25zdHJPaWQpLAorCQkJCQkJ CQkJCSAiZGVmZXJyYWJsZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIGMtPmRlZmVycmFi bGUgPyAiREVGRVJSQUJMRSIgOiAiTk9UIERFRkVSUkFCTEUiLAorCQkJCQkJCQkJCSAiaW5pdF9k ZWZlcnJlZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIGMtPmluaXRkZWZlcnJlZCA/ICJJ TklUSUFMTFkgREVGRVJSRUQiIDogIklOSVRJQUxMWSBJTU1FRElBVEUiKTsKKworCQkJCQlzdWJj bWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9 CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfVmFsaWRhdGVDb25zdHJhaW50UmVjdXJzZToKKwkJ CWNhc2UgQVRfVmFsaWRhdGVDb25zdHJhaW50OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZB KCJWQUxJREFURSBDT05TVFJBSU5UICV7Y29uc3RyYWludH1JIiwgMiwKKwkJCQkJCQkJCSAidHlw ZSIsIE9ialR5cGVTdHJpbmcsICJ2YWxpZGF0ZSBjb25zdHJhaW50IiwKKwkJCQkJCQkJCSAiY29u c3RyYWludCIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxh cHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfRHJvcENvbnN0cmFpbnRSZWN1cnNlOgorCQkJY2FzZSBBVF9Ecm9wQ29uc3Ry YWludDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRFJPUCBDT05TVFJBSU5UICV7Y29u c3RyYWludH1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGNv bnN0cmFpbnQiLAorCQkJCQkJCQkJICJjb25zdHJhaW50IiwgT2JqVHlwZVN0cmluZywgc3ViY21k LT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BbHRlckNvbHVtblR5cGU6CisJ CQkJeworCQkJCQlUdXBsZURlc2MgdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKKwkJ CQkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0OworCQkJCQlDb2x1bW5EZWYJICAgKmRlZjsKKworCQkJ CQlhdHQgPSAmKHR1cGRlc2MtPmF0dHJzW3N1Yi0+YWRkcmVzcy5vYmplY3RTdWJJZCAtIDFdKTsK KwkJCQkJZGVmID0gKENvbHVtbkRlZiAqKSBzdWJjbWQtPmRlZjsKKwkJCQkJQXNzZXJ0KElzQShk ZWYsIENvbHVtbkRlZikpOworCisJCQkJCS8qCisJCQkJCSAqIFZlcmJvc2Ugc3ludGF4CisJCQkJ CSAqCisJCQkJCSAqIENvbXBvc2l0ZSB0eXBlczogQUxURVIgcmVsdHlwZSAle2NvbHVtbn1JIFNF VCBEQVRBIFRZUEUKKwkJCQkJICogJXtkYXRhdHlwZX1UICV7Y29sbGF0aW9ufXMgQVRUUklCVVRF ICV7Y2FzY2FkZX1zCisJCQkJCSAqCisJCQkJCSAqIE5vcm1hbCB0eXBlczogQUxURVIgcmVsdHlw ZSAle2NvbHVtbn1JIFNFVCBEQVRBIFRZUEUKKwkJCQkJICogJXtkYXRhdHlwZX1UICV7Y29sbGF0 aW9ufXMgQ09MVU1OICV7dXNpbmd9cworCQkJCQkgKi8KKwkJCQkJZm10c3RyID0gcHNwcmludGYo IkFMVEVSICVzICUle2NvbHVtbn1JIFNFVCBEQVRBIFRZUEUiLAorCQkJCQkJCQkJICBpc3R5cGUg PyAiQVRUUklCVVRFIiA6ICJDT0xVTU4iKTsKKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QShmbXRzdHIsIDIsCisJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFsdGVyIGNv bHVtbiB0eXBlIiwKKwkJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+ bmFtZSk7CisJCQkJCS8qIEFkZCB0aGUgVFlQRSBjbGF1c2UgKi8KKwkJCQkJYXBwZW5kX29iamVj dF9vYmplY3QodG1wb2JqLCAiJXtkYXRhdHlwZX1UIiwKKwkJCQkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3R5cGUoYXR0LT5hdHR0eXBpZCwKKwkJCQkJCQkJCQkJCQkJCSAgYXR0LT5hdHR0eXBtb2Qp KTsKKworCQkJCQkvKiBBZGQgYSBDT0xMQVRFIGNsYXVzZSwgaWYgbmVlZGVkICovCisJCQkJCXRt cG9iajIgPSBuZXdfb2JqdHJlZSgiQ09MTEFURSIpOworCQkJCQlpZiAoT2lkSXNWYWxpZChhdHQt PmF0dGNvbGxhdGlvbikpCisJCQkJCXsKKwkJCQkJCU9ialRyZWUgKmNvbGxuYW1lOworCisJCQkJ CQljb2xsbmFtZSA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCQkJICAgYXR0LT5hdHRjb2xsYXRpb24pOworCQkJCQkJYXBwZW5k X29iamVjdF9vYmplY3QodG1wb2JqMiwgIiV7bmFtZX1EIiwgY29sbG5hbWUpOworCQkJCQl9CisJ CQkJCWVsc2UKKwkJCQkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmoyLCAicHJlc2VudCIsIGZh bHNlKTsKKwkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtjb2xsYXRpb259cyIs IHRtcG9iajIpOworCisJCQkJCS8qIElmIG5vdCBhIGNvbXBvc2l0ZSB0eXBlLCBhZGQgdGhlIFVT SU5HIGNsYXVzZSAqLworCQkJCQlpZiAoIWlzdHlwZSkKKwkJCQkJeworCQkJCQkJLyoKKwkJCQkJ CSAqIElmIHRoZXJlJ3MgYSBVU0lORyBjbGF1c2UsIHRyYW5zZm9ybUFsdGVyVGFibGVTdG10CisJ CQkJCQkgKiByYW4gaXQgdGhyb3VnaCB0cmFuc2Zvcm1FeHByIGFuZCBzdG9yZWQgdGhlCisJCQkJ CQkgKiByZXN1bHRpbmcgbm9kZSBpbiBjb29rZWRfZGVmYXVsdCwgd2hpY2ggd2UgY2FuIHVzZQor CQkJCQkJICogaGVyZS4KKwkJCQkJCSAqLworCQkJCQkJdG1wb2JqMiA9IG5ld19vYmp0cmVlKCJV U0lORyIpOworCQkJCQkJaWYgKGRlZi0+cmF3X2RlZmF1bHQpCisJCQkJCQl7CisJCQkJCQkJRGF0 dW0JZGVwYXJzZWQ7CisJCQkJCQkJY2hhciAgICpkZWZleHByOworCisJCQkJCQkJZXhwcnMgPSBs YXBwZW5kKGV4cHJzLCBkZWYtPmNvb2tlZF9kZWZhdWx0KTsKKwkJCQkJCQlkZWZleHByID0gbm9k ZVRvU3RyaW5nKGRlZi0+Y29va2VkX2RlZmF1bHQpOworCQkJCQkJCWRlcGFyc2VkID0gRGlyZWN0 RnVuY3Rpb25DYWxsMihwZ19nZXRfZXhwciwKKwkJCQkJCQkJCQkJCQkJICAgQ1N0cmluZ0dldFRl eHREYXR1bShkZWZleHByKSwKKwkJCQkJCQkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxpZChyZWwp KTsKKwkJCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmoyLCAiJXtleHByZXNzaW9ufXMi LAorCQkJCQkJCQkJCQkJIFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQpKTsKKwkJCQkJCX0K KwkJCQkJCWVsc2UKKwkJCQkJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqMiwgInByZXNlbnQi LCBmYWxzZSk7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3VzaW5nfXMi LCB0bXBvYmoyKTsKKwkJCQkJfQorCisJCQkJCS8qIElmIGl0J3MgYSBjb21wb3NpdGUgdHlwZSwg YWRkIHRoZSBDQVNDQURFIGNsYXVzZSAqLworCQkJCQlpZiAoaXN0eXBlKQorCQkJCQl7CisJCQkJ CQl0bXBvYmoyID0gbmV3X29ianRyZWUoIkNBU0NBREUiKTsKKwkJCQkJCWlmIChzdWJjbWQtPmJl aGF2aW9yICE9IERST1BfQ0FTQ0FERSkKKwkJCQkJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2Jq MiwgInByZXNlbnQiLCBmYWxzZSk7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmos ICIle2Nhc2NhZGV9cyIsIHRtcG9iajIpOworCQkJCQl9CisKKwkJCQkJc3ViY21kcyA9IGxhcHBl bmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJfQorCQkJCWJyZWFr OworCisjaWZkZWYgVE9ET0xJU1QKKwkJCWNhc2UgQVRfQWx0ZXJDb2x1bW5HZW5lcmljT3B0aW9u czoKKwkJCQl0bXBvYmogPSBkZXBhcnNlX0Zkd09wdGlvbnMoKExpc3QgKikgc3ViY21kLT5kZWYs CisJCQkJCQkJCQkJIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWNh c2UgQVRfQ2hhbmdlT3duZXI6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk9XTkVSIFRP ICV7b3duZXJ9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY2hhbmdl IG93bmVyIiwKKwkJCQkJCQkJCSAib3duZXIiLCAgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBn ZXRfcm9sZXNwZWNfbmFtZShzdWJjbWQtPm5ld293bmVyKSk7CisJCQkJc3ViY21kcyA9IGxhcHBl bmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJ CWNhc2UgQVRfQ2x1c3Rlck9uOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJDTFVTVEVS IE9OICV7aW5kZXh9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY2x1 c3RlciBvbiIsCisJCQkJCQkJCQkgImluZGV4IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1l KTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBv YmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wQ2x1c3RlcjoKKwkJCQl0bXBvYmog PSBuZXdfb2JqdHJlZV9WQSgiU0VUIFdJVEhPVVQgQ0xVU1RFUiIsIDEsCisJCQkJCQkJCQkgInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHdpdGhvdXQgY2x1c3RlciIpOworCQkJCXN1YmNtZHMg PSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFr OworCisJCQljYXNlIEFUX1NldExvZ2dlZDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgi U0VUIExPR0dFRCIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGxv Z2dlZCIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldFVuTG9nZ2VkOgorCQkJCXRt cG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgVU5MT0dHRUQiLCAxLAorCQkJCQkJCQkJICJ0eXBl IiwgT2JqVHlwZVN0cmluZywgInNldCB1bmxvZ2dlZCIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5k KHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQlj YXNlIEFUX0Ryb3BPaWRzOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgV0lUSE9V VCBPSURTIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgd2l0aG91 dCBvaWRzIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX1NldEFjY2Vzc01ldGhvZDoKKwkJ CQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIEFDQ0VTUyBNRVRIT0QgJXthY2Nlc3NfbWV0 aG9kfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBhY2Nlc3Mg bWV0aG9kIiwKKwkJCQkJCQkJCSAiYWNjZXNzX21ldGhvZCIsIE9ialR5cGVTdHJpbmcsIHN1YmNt ZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX1NldFRhYmxlU3BhY2U6CisJCQkJ dG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIiwg MiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgdGFibGVzcGFjZSIsCisJ CQkJCQkJCQkgInRhYmxlc3BhY2UiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOwor CQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldFJlbE9wdGlvbnM6CisJCQljYXNlIEFUX1Jlc2V0 UmVsT3B0aW9uczoKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCgKKwkJCQkJCQkJCSAgZGVwYXJzZV9SZWxTZXRPcHRpb25zKHN1YmNtZCkpKTsKKwkJCQli cmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVUcmlnOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJFTkFCTEUgVFJJR0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAiZW5hYmxlIHRyaWdnZXIiLAorCQkJCQkJCQkJICJ0cmlnZ2VyIiwgT2Jq VHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRz LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9F bmFibGVBbHdheXNUcmlnOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgQUxX QVlTIFRSSUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgImVuYWJsZSBhbHdheXMgdHJpZ2dlciIsCisJCQkJCQkJCQkgInRyaWdnZXIiLCBPYmpU eXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Vu YWJsZVJlcGxpY2FUcmlnOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUkVQ TElDQSBUUklHR0VSICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVT dHJpbmcsICJlbmFibGUgcmVwbGljYSB0cmlnZ2VyIiwKKwkJCQkJCQkJCSAidHJpZ2dlciIsIE9i alR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf RGlzYWJsZVRyaWc6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgVFJJR0dF UiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlz YWJsZSB0cmlnZ2VyIiwKKwkJCQkJCQkJCSAidHJpZ2dlciIsIE9ialR5cGVTdHJpbmcsIHN1YmNt ZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlVHJpZ0FsbDoKKwkJ CQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFRSSUdHRVIgQUxMIiwgMSwKKwkJCQkJ CQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgdHJpZ2dlciBhbGwiKTsKKwkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJ CQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlVHJpZ0FsbDoKKwkJCQl0bXBvYmogPSBuZXdf b2JqdHJlZV9WQSgiRElTQUJMRSBUUklHR0VSIEFMTCIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAiZGlzYWJsZSB0cmlnZ2VyIGFsbCIpOworCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX0VuYWJsZVRyaWdVc2VyOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJF TkFCTEUgVFJJR0dFUiBVU0VSIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJlbmFibGUgdHJpZ2dlciB1c2VyIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlz YWJsZVRyaWdVc2VyOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFRSSUdH RVIgVVNFUiIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSB0 cmlnZ2VyIHVzZXIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVSdWxlOgor CQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUlVMRSAle3J1bGV9SSIsIDIsCisJ CQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHJ1bGUiLAorCQkJCQkJCQkJ ICJydWxlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFw cGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKwor CQkJY2FzZSBBVF9FbmFibGVBbHdheXNSdWxlOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZB KCJFTkFCTEUgQUxXQVlTIFJVTEUgJXtydWxlfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgImVuYWJsZSBhbHdheXMgcnVsZSIsCisJCQkJCQkJCQkgInJ1bGUiLCBPYmpU eXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Vu YWJsZVJlcGxpY2FSdWxlOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUkVQ TElDQSBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJlbmFibGUgcmVwbGljYSBydWxlIiwKKwkJCQkJCQkJCSAicnVsZSIsIE9ialR5cGVTdHJpbmcs IHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVJ1bGU6 CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgUlVMRSAle3J1bGV9SSIsIDIs CisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSBydWxlIiwKKwkJCQkJ CQkJCSAicnVsZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfQWRkSW5oZXJpdDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgi SU5IRVJJVCAle3BhcmVudH1EIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJpbmhlcml0IiwKKwkJCQkJCQkJCSAicGFyZW50IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCQkJCSBzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJ Y2FzZSBBVF9Ecm9wSW5oZXJpdDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiTk8gSU5I RVJJVCAle3BhcmVudH1EIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJk cm9wIGluaGVyaXQiLAorCQkJCQkJCQkJICJwYXJlbnQiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCQkJCQkJIHN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX0FkZE9mOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJPRiAle3R5cGVf b2Z9VCIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIG9mIiwKKwkJ CQkJCQkJCSAidHlwZV9vZiIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3R5cGUoc3ViLT5hZGRyZXNzLm9iamVjdElkLCAtMSkpOworCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX0Ryb3BPZjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiTk9UIE9GIiwg MSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJub3Qgb2YiKTsKKwkJCQlzdWJj bWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQli cmVhazsKKworCQkJY2FzZSBBVF9SZXBsaWNhSWRlbnRpdHk6CisJCQkJdG1wb2JqID0gbmV3X29i anRyZWVfVkEoIlJFUExJQ0EgSURFTlRJVFkiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgInJlcGxpY2EgaWRlbnRpdHkiKTsKKwkJCQlzd2l0Y2ggKCgoUmVwbGljYUlkZW50 aXR5U3RtdCAqKSBzdWJjbWQtPmRlZiktPmlkZW50aXR5X3R5cGUpCisJCQkJeworCQkJCQljYXNl IFJFUExJQ0FfSURFTlRJVFlfREVGQVVMVDoKKwkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRt cG9iaiwgIiV7aWRlbnR9cyIsICJERUZBVUxUIik7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBS RVBMSUNBX0lERU5USVRZX0ZVTEw6CisJCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmos ICIle2lkZW50fXMiLCAiRlVMTCIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgUkVQTElDQV9J REVOVElUWV9OT1RISU5HOgorCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtp ZGVudH1zIiwgIk5PVEhJTkciKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFJFUExJQ0FfSURF TlRJVFlfSU5ERVg6CisJCQkJCQl0bXBvYmoyID0gbmV3X29ianRyZWVfVkEoIlVTSU5HIElOREVY ICV7aW5kZXh9SSIsIDEsCisJCQkJCQkJCQkJCSAgImluZGV4IiwgT2JqVHlwZVN0cmluZywKKwkJ CQkJCQkJCQkJICAoKFJlcGxpY2FJZGVudGl0eVN0bXQgKikgc3ViY21kLT5kZWYpLT5uYW1lKTsK KwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7aWRlbnR9cyIsIHRtcG9iajIp OworCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJs ZVJvd1NlY3VyaXR5OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUk9XIExF VkVMIFNFQ1VSSVRZIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFi bGUgcm93IHNlY3VyaXR5Iik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVJv d1NlY3VyaXR5OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFJPVyBMRVZF TCBTRUNVUklUWSIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJs ZSByb3cgc2VjdXJpdHkiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKyNpZmRlZiBUT0RPTElTVAorCQkJY2Fz ZSBBVF9HZW5lcmljT3B0aW9uczoKKwkJCQl0bXBvYmogPSBkZXBhcnNlX0Zkd09wdGlvbnMoKExp c3QgKikgc3ViY21kLT5kZWYsIE5VTEwpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworI2VuZGlmCisJCQljYXNl IEFUX0F0dGFjaFBhcnRpdGlvbjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQVRUQUNI IFBBUlRJVElPTiAle3BhcnRpdGlvbl9pZGVudGl0eX1EIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIs IE9ialR5cGVTdHJpbmcsICJhdHRhY2ggcGFydGl0aW9uIiwKKwkJCQkJCQkJCSAicGFydGl0aW9u X2lkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBzdWItPmFkZHJl c3Mub2JqZWN0SWQpKTsKKworCQkJCWlmIChyZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5E X1BBUlRJVElPTkVEX1RBQkxFKQorCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIl e3BhcnRpdGlvbl9ib3VuZH1zIiwKKwkJCQkJCQkJCQkgUmVsYXRpb25HZXRQYXJ0aXRpb25Cb3Vu ZChzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsKKworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9E ZXRhY2hQYXJ0aXRpb246CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRFVEFDSCBQQVJU SVRJT04gJXtwYXJ0aXRpb25faWRlbnRpdHl9RCIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAiZGV0YWNoIHBhcnRpdGlvbiIsCisJCQkJCQkJCQkgInBhcnRpdGlvbl9pZGVu dGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgc3ViLT5hZGRyZXNzLm9i amVjdElkKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX0RldGFjaFBhcnRpdGlvbkZpbmFs aXplOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJERVRBQ0ggUEFSVElUSU9OICV7cGFy dGl0aW9uX2lkZW50aXR5fUQgRklOQUxJWkUiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgImRldGFjaCBwYXJ0aXRpb24gZmluYWxpemUiLAorCQkJCQkJCQkJICJwYXJ0aXRp b25faWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIHN1Yi0+YWRk cmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9BZGRJZGVudGl0eToK KwkJCQl7CisJCQkJCUF0dHJOdW1iZXIJYXR0bnVtOworCQkJCQlPaWQJCQlzZXFfcmVsaWQ7CisJ CQkJCU9ialRyZWUJKnNlcWRlZjsKKwkJCQkJQ29sdW1uRGVmICAqY29sZGVmID0gKENvbHVtbkRl ZiAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIg Q09MVU1OICV7Y29sdW1ufUkgQUREICV7aWRlbnRpdHlfY29sdW1ufXMiLCAyLAorCQkJCQkJCQkJ CSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgaWRlbnRpdHkiLAorCQkJCQkJCQkJCSAiY29s dW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKworCQkJCQlhdHRudW0gPSBnZXRf YXR0bnVtKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgc3ViY21kLT5uYW1lKTsKKwkJCQkJc2VxX3Jl bGlkID0gZ2V0SWRlbnRpdHlTZXF1ZW5jZShSZWxhdGlvbkdldFJlbGlkKHJlbCksIGF0dG51bSwg dHJ1ZSk7CisJCQkJCXNlcWRlZiA9IGRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoc2VxX3JlbGlkLCBj b2xkZWYtPmlkZW50aXR5LCBmYWxzZSk7CisKKwkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1w b2JqLCAiaWRlbnRpdHlfY29sdW1uIiwgc2VxZGVmKTsKKworCQkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7 CisJCQljYXNlIEFUX1NldElkZW50aXR5OgorCQkJCXsKKwkJCQkJRGVmRWxlbQkqZGVmZWw7CisJ CQkJCWNoYXIJCWlkZW50aXR5ID0gMDsKKwkJCQkJT2JqVHJlZQkgICAqc2VxZGVmOworCQkJCQlB dHRyTnVtYmVyCWF0dG51bTsKKwkJCQkJT2lkCQkJc2VxX3JlbGlkOworCisKKwkJCQkJdG1wb2Jq ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIiwgMiwKKwkJCQkJCQkJ CQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGlkZW50aXR5IiwKKwkJCQkJCQkJCQkgImNv bHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJaWYgKHN1YmNtZC0+ ZGVmKQorCQkJCQl7CisJCQkJCQlMaXN0CSAgICpkZWYgPSAoTGlzdCAqKSBzdWJjbWQtPmRlZjsK KworCQkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgTGlzdCkpOworCisJCQkJCQlkZWZlbCA9 IGxpbml0aWFsX25vZGUoRGVmRWxlbSwgZGVmKTsKKwkJCQkJCWlkZW50aXR5ID0gZGVmR2V0SW50 MzIoZGVmZWwpOworCQkJCQl9CisKKwkJCQkJYXR0bnVtID0gZ2V0X2F0dG51bShSZWxhdGlvbkdl dFJlbGlkKHJlbCksIHN1YmNtZC0+bmFtZSk7CisJCQkJCXNlcV9yZWxpZCA9IGdldElkZW50aXR5 U2VxdWVuY2UoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBhdHRudW0sIHRydWUpOworCQkJCQlzZXFk ZWYgPSBkZXBhcnNlX0NvbHVtbklkZW50aXR5KHNlcV9yZWxpZCwgaWRlbnRpdHksIHRydWUpOwor CisJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7ZGVmaW5pdGlvbn1zIiwgc2Vx ZGVmKTsKKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXBvYmopKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJY2FzZSBBVF9Ecm9wSWRlbnRpdHk6 CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERS T1AgSURFTlRJVFkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3Ag aWRlbnRpdHkiLAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5h bWUpOworCisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtpZl9ub3RfZXhpc3Rz fXMiLAorCQkJCQkJCQkJIHN1YmNtZC0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIpOwor CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2Jq KSk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2coV0FSTklORywgInVuc3VwcG9y dGVkIGFsdGVyIHRhYmxlIHN1YnR5cGUgJWQiLAorCQkJCQkgc3ViY21kLT5zdWJ0eXBlKTsKKwkJ CQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFdlIGRvbid0IHN1cHBvcnQgcmVwbGljYXRpbmcg QUxURVIgVEFCTEUgd2hpY2ggY29udGFpbnMgdm9sYXRpbGUKKwkJICogZnVuY3Rpb25zIGJlY2F1 c2UgSXQncyBwb3NzaWJsZSB0aGUgZnVuY3Rpb25zIGNvbnRhaW4gRERML0RNTCBpbgorCQkgKiB3 aGljaCBjYXNlIHRoZXNlIG9wZXJ0aW9ucyB3aWxsIGJlIGV4ZWN1dGVkIHR3aWNlIGFuZCBjYXVz ZQorCQkgKiBkdXBsaWNhdGUgZGF0YS4gSW4gYWRkaXRpb24sIHdlIGRvbid0IGtub3cgd2hldGhl ciB0aGUgdGFibGVzIGJlaW5nCisJCSAqIGFjY2Vzc2VkIGJ5IHRoZXNlIERETC9ETUwgYXJlIHB1 Ymxpc2hlZCBvciBub3QuIFNvIGJsaW5kbHkgYWxsb3dpbmcKKwkJICogc3VjaCBmdW5jdGlvbnMg Y2FuIGFsbG93IHVuaW50ZW5kZWQgY2xhdXNlcyBsaWtlIHRoZSB0YWJsZXMgYWNjZXNzZWQKKwkJ ICogaW4gdGhvc2UgZnVuY3Rpb25zIG1heSBub3QgZXZlbiBleGlzdCBvbiB0aGUgc3Vic2NyaWJl ci1zaWRlLgorCQkgKi8KKwkJaWYgKGNvbnRhaW5fdm9sYXRpbGVfZnVuY3Rpb25zKChOb2RlICop IGV4cHJzKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVS RV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJIGVycm1zZygiQUxURVIgVEFCTEUgY29tbWFuZCB1c2lu ZyB2b2xhdGlsZSBmdW5jdGlvbiBjYW5ub3QgYmUgcmVwbGljYXRlZCIpKSk7CisKKwkJLyoKKwkJ ICogQ2xlYW4gdGhlIGxpc3QgYXMgd2UgYWxyZWFkeSBjb25maXJtZWQgdGhlcmUgaXMgbm8gdm9s YXRpbGUKKwkJICogZnVuY3Rpb24uCisJCSAqLworCQlsaXN0X2ZyZWUoZXhwcnMpOworCQlleHBy cyA9IE5JTDsKKwl9CisKKwl0YWJsZV9jbG9zZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlp ZiAobGlzdF9sZW5ndGgoc3ViY21kcykgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlhcHBlbmRf YXJyYXlfb2JqZWN0KGFsdGVyVGFibGVTdG10LCAiJXtzdWJjbWRzOiwgfXMiLCBzdWJjbWRzKTsK KworCXJldHVybiBhbHRlclRhYmxlU3RtdDsKK30KKworLyoKKyAqIFN1YnJvdXRpbmUgZm9yIENS RUFURSBUQUJMRSBkZXBhcnNpbmcuCisgKgorICogRGVwYXJzZSBhIENvbHVtbkRlZiBub2RlIHdp dGhpbiBhIHJlZ3VsYXIgKG5vbiB0eXBlZCkgdGFibGUgY3JlYXRpb24uCisgKgorICogTk9UIE5V TEwgY29uc3RyYWludHMgaW4gdGhlIGNvbHVtbiBkZWZpbml0aW9uIGFyZSBlbWl0dGVkIGRpcmVj dGx5IGluIHRoZQorICogY29sdW1uIGRlZmluaXRpb24gYnkgdGhpcyByb3V0aW5lOyBvdGhlciBj b25zdHJhaW50cyBtdXN0IGJlIGVtaXR0ZWQKKyAqIGVsc2V3aGVyZSAodGhlIGluZm8gaW4gdGhl IHBhcnNlIG5vZGUgaXMgaW5jb21wbGV0ZSBhbnl3YXkuKS4KKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9Db2x1bW5EZWYoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmRwY29udGV4dCwg Ym9vbCBjb21wb3NpdGUsCisJCQkJICBDb2x1bW5EZWYgKmNvbGRlZiwgYm9vbCBpc19hbHRlciwg TGlzdCAqKmV4cHJzKQoreworCU9ialRyZWUJICAgKmNvbHVtbjsKKwlPYmpUcmVlCSAgICp0bXBv Ymo7CisJT2lkCQkJcmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKwlIZWFwVHVw bGUJYXR0clR1cDsKKwlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyRm9ybTsKKwlPaWQJCQl0eXBpZDsK KwlpbnQzMgkJdHlwbW9kOworCU9pZAkJCXR5cGNvbGxhdGlvbjsKKwlib29sCQlzYXdfbm90bnVs bDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJLyoKKwkgKiBJbmhlcml0ZWQgY29sdW1ucyB3aXRo b3V0IGxvY2FsIGRlZmluaXRpb25zIG11c3Qgbm90IGJlIGVtaXR0ZWQuCisJICoKKwkgKiBYWFgg bWF5YmUgaXQgaXMgdXNlZnVsIHRvIGhhdmUgdGhlbSB3aXRoICJwcmVzZW50ID0gZmFsc2UiIG9y IHNvbWUgc3VjaD8KKwkgKi8KKwlpZiAoIWNvbGRlZi0+aXNfbG9jYWwpCisJCXJldHVybiBOVUxM OworCisJYXR0clR1cCA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShyZWxpZCwgY29sZGVmLT5jb2xu YW1lKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYXR0clR1cCkpCisJCWVsb2coRVJST1IsICJj b3VsZCBub3QgZmluZCBjYWNoZSBlbnRyeSBmb3IgY29sdW1uIFwiJXNcIiBvZiByZWxhdGlvbiAl dSIsCisJCQkgY29sZGVmLT5jb2xuYW1lLCByZWxpZCk7CisJYXR0ckZvcm0gPSAoRm9ybV9wZ19h dHRyaWJ1dGUpIEdFVFNUUlVDVChhdHRyVHVwKTsKKworCWdldF9hdHR0eXBldHlwbW9kY29sbChy ZWxpZCwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCSAgJnR5cGlkLCAmdHlwbW9kLCAmdHlwY29s bGF0aW9uKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqICV7bmFtZX1JICV7 Y29sdHlwZX1UICV7Y29tcHJlc3Npb259cyAle2RlZmF1bHR9cyAle25vdF9udWxsfXMKKwkgKiAl e2NvbGxhdGlvbn1zCisJICovCisJY29sdW1uID0gbmV3X29ianRyZWVfVkEoIiV7bmFtZX1JICV7 Y29sdHlwZX1UIiwgMywKKwkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjb2x1bW4iLAor CQkJCQkJCSJuYW1lIiwgT2JqVHlwZVN0cmluZywgY29sZGVmLT5jb2xuYW1lLAorCQkJCQkJCSJj b2x0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBp ZCwgdHlwbW9kKSk7CisKKwkvKiBVU0lORyBjbGF1c2UgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJl ZSgiQ09NUFJFU1NJT04iKTsKKwlpZiAoY29sZGVmLT5jb21wcmVzc2lvbikKKwkJYXBwZW5kX3N0 cmluZ19vYmplY3QodG1wb2JqLCAiJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsIGNvbGRlZi0+Y29t cHJlc3Npb24pOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXBvYmosICIle2Nv bXByZXNzaW9uX21ldGhvZH1JIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVz ZW50IiwgZmFsc2UpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIle2NvbXBy ZXNzaW9ufXMiLCB0bXBvYmopOworCisJdG1wb2JqID0gbmV3X29ianRyZWUoIkNPTExBVEUiKTsK KwlpZiAoT2lkSXNWYWxpZCh0eXBjb2xsYXRpb24pKQorCXsKKwkJT2JqVHJlZSAqY29sbG5hbWU7 CisKKwkJY29sbG5hbWUgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoQ29sbGF0aW9uUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJICAgdHlwY29sbGF0aW9uKTsKKwkJYXBwZW5kX29iamVjdF9v YmplY3QodG1wb2JqLCAiJXtuYW1lfUQiLCBjb2xsbmFtZSk7CisJfQorCWVsc2UKKwkJYXBwZW5k X2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9v YmplY3QoY29sdW1uLCAiJXtjb2xsYXRpb259cyIsIHRtcG9iaik7CisKKwlpZiAoIWNvbXBvc2l0 ZSkKKwl7CisJCU9pZAlzZXFyZWxpZCA9IEludmFsaWRPaWQ7CisKKwkJLyoKKwkJICogRW1pdCBh IE5PVCBOVUxMIGRlY2xhcmF0aW9uIGlmIG5lY2Vzc2FyeS4gIE5vdGUgdGhhdCB3ZSBjYW5ub3Qg dHJ1c3QKKwkJICogcGdfYXR0cmlidXRlLmF0dG5vdG51bGwgaGVyZSwgYmVjYXVzZSB0aGF0IGJp dCBpcyBhbHNvIHNldCB3aGVuCisJCSAqIHByaW1hcnkga2V5cyBhcmUgc3BlY2lmaWVkOyBhbmQg d2UgbXVzdCBub3QgZW1pdCBhIE5PVCBOVUxMCisJCSAqIGNvbnN0cmFpbnQgaW4gdGhhdCBjYXNl LCB1bmxlc3MgZXhwbGljaXRlbHkgc3BlY2lmaWVkLiAgVGhlcmVmb3JlLAorCQkgKiB3ZSBzY2Fu IHRoZSBsaXN0IG9mIGNvbnN0cmFpbnRzIGF0dGFjaGVkIHRvIHRoaXMgY29sdW1uIHRvIGRldGVy bWluZQorCQkgKiB3aGV0aGVyIHdlIG5lZWQgdG8gZW1pdCBhbnl0aGluZy4KKwkJICogKEZvcnR1 bmF0ZWx5LCBOT1QgTlVMTCBjb25zdHJhaW50cyBjYW5ub3QgYmUgdGFibGUgY29uc3RyYWludHMu KQorCQkgKgorCQkgKiBJbiB0aGUgQUxURVIgVEFCTEUgY2FzZXMsIHdlIGFsc28gYWRkIGEgTk9U IE5VTEwgaWYgdGhlIGNvbERlZiBpcworCQkgKiBtYXJrZWQgaXNfbm90X251bGwuCisJCSAqLwor CQlzYXdfbm90bnVsbCA9IGZhbHNlOworCQlmb3JlYWNoKGNlbGwsIGNvbGRlZi0+Y29uc3RyYWlu dHMpCisJCXsKKwkJCUNvbnN0cmFpbnQgKmNvbnN0ciA9IChDb25zdHJhaW50ICopIGxmaXJzdChj ZWxsKTsKKworCQkJaWYgKGNvbnN0ci0+Y29udHlwZSA9PSBDT05TVFJfTk9UTlVMTCkKKwkJCQlz YXdfbm90bnVsbCA9IHRydWU7CisJCX0KKwkJaWYgKGlzX2FsdGVyICYmIGNvbGRlZi0+aXNfbm90 X251bGwpCisJCQlzYXdfbm90bnVsbCA9IHRydWU7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo Y29sdW1uLCAiJXtub3RfbnVsbH1zIiwKKwkJCQkJCQkgc2F3X25vdG51bGwgPyAiTk9UIE5VTEwi IDogIiIpOworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJERUZBVUxUIik7CisJCWlmIChhdHRy Rm9ybS0+YXR0aGFzZGVmKQorCQl7CisJCQljaGFyICpkZWZzdHI7CisKKwkJCWRlZnN0ciA9IFJl bGF0aW9uR2V0Q29sdW1uRGVmYXVsdChyZWxhdGlvbiwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJ CQkJCQkJICBkcGNvbnRleHQsIGV4cHJzKTsKKworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1w b2JqLCAiJXtkZWZhdWx0fXMiLCBkZWZzdHIpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ib29s X29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCQlhcHBlbmRfb2JqZWN0X29iamVj dChjb2x1bW4sICIle2RlZmF1bHR9cyIsIHRtcG9iaik7CisKKwkJLyogSURFTlRJVFkgQ09MVU1O ICovCisJCWlmIChjb2xkZWYtPmlkZW50aXR5KQorCQl7CisJCQlPaWQJYXR0bm8gPSBnZXRfYXR0 bnVtKHJlbGlkLCBjb2xkZWYtPmNvbG5hbWUpOworCQkJc2VxcmVsaWQgPSBnZXRJZGVudGl0eVNl cXVlbmNlKHJlbGlkLCBhdHRubywgZmFsc2UpOworCQl9CisKKwkJdG1wb2JqID0gZGVwYXJzZV9D b2x1bW5JZGVudGl0eShzZXFyZWxpZCwgY29sZGVmLT5pZGVudGl0eSwgaXNfYWx0ZXIpOworCQlh cHBlbmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIle2lkZW50aXR5X2NvbHVtbn1zIiwgdG1wb2Jq KTsKKworCQkvKiBHRU5FUkFURUQgQ09MVU1OIEVYUFJFU1NJT04gKi8KKwkJdG1wb2JqID0gbmV3 X29ianRyZWUoIkdFTkVSQVRFRCBBTFdBWVMgQVMiKTsKKwkJaWYgKGNvbGRlZi0+Z2VuZXJhdGVk ID09IEFUVFJJQlVURV9HRU5FUkFURURfU1RPUkVEKQorCQl7CisJCQljaGFyICpkZWZzdHI7CisK KwkJCWRlZnN0ciA9IFJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChyZWxhdGlvbiwgYXR0ckZvcm0t PmF0dG51bSwKKwkJCQkJCQkJCQkJICBkcGNvbnRleHQsIGV4cHJzKTsKKwkJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHRtcG9iaiwgIiV7Z2VuZXJhdGlvbl9leHByfXMgU1RPUkVEIiwgZGVmc3RyKTsK KwkJfQorCQllbHNlCisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZh bHNlKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIle2dlbmVyYXRlZF9jb2x1 bW59cyIsIHRtcG9iaik7CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKGF0dHJUdXApOworCisJcmV0 dXJuIGNvbHVtbjsKK30KKworLyoKKyAqIFN1YnJvdXRpbmUgZm9yIENSRUFURSBUQUJMRSBPRiBk ZXBhcnNpbmcuCisgKgorICogRGVwYXJzZSBhIENvbHVtbkRlZiBub2RlIHdpdGhpbiBhIHR5cGVk IHRhYmxlIGNyZWF0aW9uLglUaGlzIGlzIHNpbXBsZXIKKyAqIHRoYW4gdGhlIHJlZ3VsYXIgY2Fz ZSwgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHRvIGVtaXQgdGhlIHR5cGUgZGVjbGFyYXRpb24sCisg KiBjb2xsYXRpb24sIG9yIGRlZmF1bHQuICBIZXJlIHdlIG9ubHkgcmV0dXJuIHNvbWV0aGluZyBp ZiB0aGUgY29sdW1uIGlzIGJlaW5nCisgKiBkZWNsYXJlZCBOT1QgTlVMTC4KKyAqCisgKiBBcyBp biBkZXBhcnNlX0NvbHVtbkRlZiwgYW55IG90aGVyIGNvbnN0cmFpbnQgaXMgcHJvY2Vzc2VkIGVs c2V3aGVyZS4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db2x1bW5EZWZfdHlwZWQo UmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmRwY29udGV4dCwgQ29sdW1uRGVmICpjb2xkZWYpCit7 CisJT2JqVHJlZQkqY29sdW1uID0gTlVMTDsKKwlPYmpUcmVlCSp0bXBvYmo7CisJT2lkCQkJcmVs aWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKwlIZWFwVHVwbGUJYXR0clR1cDsKKwlG b3JtX3BnX2F0dHJpYnV0ZSBhdHRyRm9ybTsKKwlPaWQJCQl0eXBpZDsKKwlpbnQzMgkJdHlwbW9k OworCU9pZAkJCXR5cGNvbGxhdGlvbjsKKwlib29sCQlzYXdfbm90bnVsbDsKKwlMaXN0Q2VsbCAg ICpjZWxsOworCisJYXR0clR1cCA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShyZWxpZCwgY29sZGVm LT5jb2xuYW1lKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYXR0clR1cCkpCisJCWVsb2coRVJS T1IsICJjb3VsZCBub3QgZmluZCBjYWNoZSBlbnRyeSBmb3IgY29sdW1uIFwiJXNcIiBvZiByZWxh dGlvbiAldSIsCisJCQkgY29sZGVmLT5jb2xuYW1lLCByZWxpZCk7CisJYXR0ckZvcm0gPSAoRm9y bV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVChhdHRyVHVwKTsKKworCWdldF9hdHR0eXBldHlwbW9k Y29sbChyZWxpZCwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCSAgJnR5cGlkLCAmdHlwbW9kLCAm dHlwY29sbGF0aW9uKTsKKworCS8qCisJICogU2VhcmNoIGZvciBhIE5PVCBOVUxMIGRlY2xhcmF0 aW9uLiAgQXMgaW4gZGVwYXJzZV9Db2x1bW5EZWYsIHdlIHJlbHkgb24KKwkgKiBmaW5kaW5nIGEg Y29uc3RyYWludCBvbiB0aGUgY29sdW1uIHJhdGhlciB0aGFuIGNvbGRlZi0+aXNfbm90X251bGwu CisJICogKFRoaXMgcm91dGluZSBpcyBuZXZlciB1c2VkIGZvciBBTFRFUiBjYXNlcy4pCisJICov CisJc2F3X25vdG51bGwgPSBmYWxzZTsKKwlmb3JlYWNoKGNlbGwsIGNvbGRlZi0+Y29uc3RyYWlu dHMpCisJeworCQlDb25zdHJhaW50ICpjb25zdHIgPSAoQ29uc3RyYWludCAqKSBsZmlyc3QoY2Vs bCk7CisKKwkJaWYgKGNvbnN0ci0+Y29udHlwZSA9PSBDT05TVFJfTk9UTlVMTCkKKwkJeworCQkJ c2F3X25vdG51bGwgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXNhd19ub3Ru dWxsICYmICFhdHRyRm9ybS0+YXR0aGFzZGVmKQorCXsKKwkJUmVsZWFzZVN5c0NhY2hlKGF0dHJU dXApOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoK KwkgKiAle25hbWV9SSBXSVRIIE9QVElPTlMgJXtkZWZhdWx0fXMgJXtub3RfbnVsbH1zLgorCSAq LworCWNvbHVtbiA9IG5ld19vYmp0cmVlX1ZBKCIle25hbWV9SSBXSVRIIE9QVElPTlMiLCAyLAor CQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNvbHVtbiIsCisJCQkJCQkJIm5hbWUiLCBP YmpUeXBlU3RyaW5nLCBjb2xkZWYtPmNvbG5hbWUpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3Qo Y29sdW1uLCAiJXtub3RfbnVsbH1zIiwKKwkJCQkJCSBzYXdfbm90bnVsbCA/ICJOT1QgTlVMTCIg OiAiIik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiREVGQVVMVCIpOworCWlmIChhdHRyRm9y bS0+YXR0aGFzZGVmKQorCXsKKwkJY2hhciAqZGVmc3RyOworCisJCWRlZnN0ciA9IFJlbGF0aW9u R2V0Q29sdW1uRGVmYXVsdChyZWxhdGlvbiwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCQkJCQkg IGRwY29udGV4dCwgTlVMTCk7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtk ZWZhdWx0fXMiLCBkZWZzdHIpOworCX0KKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBv YmosICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwgIiV7 ZGVmYXVsdH1zIiwgdG1wb2JqKTsKKworCS8qCisJICogR2VuZXJhdGVkIGNvbHVtbnMgYXJlIG5v dCBzdXBwb3J0ZWQgb24gdHlwZWQgdGFibGVzLCBzbyB3ZSBhcmUgZG9uZS4KKwkgKi8KKworCVJl bGVhc2VTeXNDYWNoZShhdHRyVHVwKTsKKworCXJldHVybiBjb2x1bW47Cit9CisKKy8qCisgKiBE ZXBhcnNlIHRoZSBkZWZpbml0aW9uIG9mIGNvbHVtbiBpZGVudGl0eS4KKyAqLworc3RhdGljIE9i alRyZWUgKgorZGVwYXJzZV9Db2x1bW5JZGVudGl0eShPaWQgc2VxcmVsaWQsIGNoYXIgaWRlbnRp dHksIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZQkgICAqY29sdW1uOworCU9ialRyZWUJ ICAgKmlkZW50b2JqOworCUxpc3QJICAgKmVsZW1zID0gTklMOworCVJlbGF0aW9uCXJlbDsKKwlI ZWFwVHVwbGUJc2VxdHVwbGU7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCUZvcm1fcGdf c2VxdWVuY2VfZGF0YSBzZXFkYXRhOworCWNoYXIJICAgKmlkZW50Zm10OworCWNoYXIJICAgKm9i amZtdDsKKworCWNvbHVtbiA9IG5ld19vYmp0cmVlKCIiKTsKKworCWlmICghT2lkSXNWYWxpZChz ZXFyZWxpZCkpCisJeworCQlhcHBlbmRfYm9vbF9vYmplY3QoY29sdW1uLCAicHJlc2VudCIsIGZh bHNlKTsKKwkJcmV0dXJuIGNvbHVtbjsKKwl9CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJeworCQlp ZGVudGZtdCA9ICJTRVQgR0VORVJBVEVEICI7CisJCW9iamZtdCA9ICIle29wdGlvbn1zIjsKKwl9 CisJZWxzZQorCXsKKwkJaWRlbnRmbXQgPSAiR0VORVJBVEVEICI7CisJCW9iamZtdCA9ICIle29w dGlvbn1zIEFTIElERU5USVRZIjsKKwl9CisKKwlpZGVudG9iaiA9IG5ld19vYmp0cmVlKGlkZW50 Zm10KTsKKworCWlmIChpZGVudGl0eSA9PSBBVFRSSUJVVEVfSURFTlRJVFlfQUxXQVlTKQorCQlh cHBlbmRfc3RyaW5nX29iamVjdChpZGVudG9iaiwgb2JqZm10LCAiQUxXQVlTIik7CisJZWxzZSBp ZiAoaWRlbnRpdHkgPT0gIEFUVFJJQlVURV9JREVOVElUWV9CWV9ERUZBVUxUKQorCQlhcHBlbmRf c3RyaW5nX29iamVjdChpZGVudG9iaiwgb2JqZm10LCAiQlkgREVGQVVMVCIpOworCWVsc2UKKwkJ YXBwZW5kX2Jvb2xfb2JqZWN0KGlkZW50b2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKworCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwgIiV7aWRlbnRpdHlfdHlwZX1zIiwgaWRlbnRvYmopOwor CisJcmVsID0gdGFibGVfb3BlbihTZXF1ZW5jZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2sp OworCXNlcXR1cGxlID0gU2VhcmNoU3lzQ2FjaGVDb3B5MShTRVFSRUxJRCwgc2VxcmVsaWQpOwor CWlmICghSGVhcFR1cGxlSXNWYWxpZChzZXF0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciBzZXF1ZW5jZSAldSIsCisJCQkgc2VxcmVsaWQpOworCisJc2VxZm9y bSA9IChGb3JtX3BnX3NlcXVlbmNlKSBHRVRTVFJVQ1Qoc2VxdHVwbGUpOworCXNlcWRhdGEgPSBn ZXRfc2VxdWVuY2VfdmFsdWVzKHNlcXJlbGlkKTsKKworCS8qIERlZmluaXRpb24gZWxlbWVudHMg Ki8KKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0NhY2hlKE5VTEwsIHNlcWZv cm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9D eWNsZShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVt cywgZGVwYXJzZV9TZXFfSW5jcmVtZW50QnkoTlVMTCwgc2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsK KwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX01pbnZhbHVlKE5VTEwsIHNlcWZv cm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9N YXh2YWx1ZShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChl bGVtcywgZGVwYXJzZV9TZXFfU3RhcnR3aXRoKE5VTEwsIHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7 CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9SZXN0YXJ0KE5VTEwsIHNlcWRh dGEpKTsKKwkvKiBXZSBwdXJwb3NlZnVsbHkgZG8gbm90IGVtaXQgT1dORUQgQlkgaGVyZSAqLwor CisJaWYgKGFsdGVyX3RhYmxlKQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGNvbHVtbiwgIiV7c2Vx X2RlZmluaXRpb246IH1zIiwgZWxlbXMpOworCWVsc2UKKwkJYXBwZW5kX2FycmF5X29iamVjdChj b2x1bW4sICIoICV7c2VxX2RlZmluaXRpb246IH1zICkiLCBlbGVtcyk7CisKKwl0YWJsZV9jbG9z ZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIGNvbHVtbjsKK30KKworLyoKKyAq IC4uLiBBTFRFUiBDT0xVTU4gLi4uIFNFVC9SRVNFVCAoLi4uKQorICovCitzdGF0aWMgT2JqVHJl ZSAqCitkZXBhcnNlX0NvbHVtblNldE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKQorewor CUxpc3QJICAgKnNldHMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlPYmpUcmVlCSAgICpj b2xzZXQ7CisJY2hhcgkgICAqZm10OworCWJvb2wJCWlzX3Jlc2V0ID0gc3ViY21kLT5zdWJ0eXBl ID09IEFUX1Jlc2V0T3B0aW9uczsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAq IEFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFJFU0VUfFNFVCAoJXtvcHRpb25zOiwgfXMpCisJICov CisJaWYgKGlzX3Jlc2V0KQorCQlmbXQgPSAiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgUkVTRVQg IjsKKwllbHNlCisJCWZtdCA9ICJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgIjsKKworCWNv bHNldCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1 YmNtZC0+bmFtZSk7CisKKwlmb3JlYWNoKGNlbGwsIChMaXN0ICopIHN1YmNtZC0+ZGVmKQorCXsK KwkJRGVmRWxlbQkgICAqZWxlbTsKKwkJT2JqVHJlZQkgICAqc2V0OworCisJCWVsZW0gPSAoRGVm RWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCXNldCA9IGRlcGFyc2VfRGVmRWxlbShlbGVtLCBpc19y ZXNldCk7CisJCXNldHMgPSBsYXBwZW5kKHNldHMsIG5ld19vYmplY3Rfb2JqZWN0KHNldCkpOwor CX0KKworCUFzc2VydChzZXRzKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGNvbHNldCwgIigle29w dGlvbnM6LCB9cykiLCBzZXRzKTsKKworCXJldHVybiBjb2xzZXQ7Cit9CisKKy8qCisgKiBEZXBh cnNlIHRoZSBDUkVBVEUgRE9NQUlOCisgKgorICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5kIHRo ZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gdGhlIEpTT04KKyAqIGJsb2IgcmVw cmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0NyZWF0ZURvbWFpbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlP YmpUcmVlCSAgICpjcmVhdGVEb21haW47CisJT2JqVHJlZQkgICAqdG1wb2JqOworCUhlYXBUdXBs ZQl0eXBUdXA7CisJRm9ybV9wZ190eXBlIHR5cEZvcm07CisJTGlzdAkgICAqY29uc3RyYWludHM7 CisKKwl0eXBUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgb2JqZWN0SWQpOworCWlmICgh SGVhcFR1cGxlSXNWYWxpZCh0eXBUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3IgZG9tYWluIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXR5cEZvcm0gPSAoRm9y bV9wZ190eXBlKSBHRVRTVFJVQ1QodHlwVHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgK KwkgKgorCSAqIENSRUFURSBET01BSU4gJXtpZGVudGl0eX1EIEFTICV7dHlwZX1UICV7bm90X251 bGx9cyAle2NvbnN0cmFpbnRzfXMKKwkgKiAle2NvbGxhdGlvbn1zCisJICovCisJY3JlYXRlRG9t YWluID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QoY3Jl YXRlRG9tYWluLAorCQkJCQkJICJET01BSU4gJXtpZGVudGl0eX1EIEFTIiwKKwkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9i amVjdElkKSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRG9tYWluLAorCQkJCQkJICIl e3R5cGV9VCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwRm9ybS0+dHlwYmFzZXR5 cGUsIHR5cEZvcm0tPnR5cHR5cG1vZCkpOworCisJaWYgKHR5cEZvcm0tPnR5cG5vdG51bGwpCisJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZURvbWFpbiwgIiV7bm90X251bGx9cyIsICJOT1Qg TlVMTCIpOworCWVsc2UKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRG9tYWluLCAiJXtu b3RfbnVsbH1zIiwgIiIpOworCisJY29uc3RyYWludHMgPSBvYnRhaW5Db25zdHJhaW50cyhOSUws IEludmFsaWRPaWQsIG9iamVjdElkKTsKKwlpZiAoY29uc3RyYWludHMgPT0gTklMKQorCXsKKwkJ dG1wb2JqID0gbmV3X29ianRyZWUoIiIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAi cHJlc2VudCIsIGZhbHNlKTsKKwl9CisJZWxzZQorCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgi JXtlbGVtZW50czosIH1zIiwgMSwKKwkJCQkJCQkgImVsZW1lbnRzIiwgT2JqVHlwZUFycmF5LCBj b25zdHJhaW50cyk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRG9tYWluLCAiJXtjb25z dHJhaW50c31zIiwgdG1wb2JqKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJDT0xMQVRFIik7 CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwY29sbGF0aW9uKSkKKwl7CisJCU9ialRyZWUg KmNvbGxuYW1lOworCisJCWNvbGxuYW1lID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKENv bGxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCSAgIHR5cEZvcm0tPnR5cGNvbGxhdGlvbik7 CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7bmFtZX1EIiwgY29sbG5hbWUpOwor CX0KKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2Up OworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZURvbWFpbiwgIiV7Y29sbGF0aW9ufXMiLCB0 bXBvYmopOworCisJUmVsZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisKKwlyZXR1cm4gY3JlYXRlRG9t YWluOworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZUZ1bmN0aW9uU3RtdCAoQ1JFQVRFIEZV TkNUSU9OKQorICoKKyAqIEdpdmVuIGEgZnVuY3Rpb24gT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRo YXQgY3JlYXRlZCBpdCwgcmV0dXJuIHRoZSBKU09OCisgKiBibG9iIHJlcHJlc2VudGluZyB0aGUg Y3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVG dW5jdGlvbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVGdW5jdGlv blN0bXQgKm5vZGUgPSAoQ3JlYXRlRnVuY3Rpb25TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVl CSAgICpjcmVhdGVGdW5jOworCU9ialRyZWUJICAgKnRtcG9iajsKKwlEYXR1bQkJdG1wZGF0dW07 CisJY2hhcgkgICAqc291cmNlOworCWNoYXIJICAgKnByb2JpbjsKKwlMaXN0CSAgICpwYXJhbXM7 CisJTGlzdAkgICAqZGVmYXVsdHM7CisJTGlzdAkgICAqc2V0cyA9IE5JTDsKKwlMaXN0CSAgICp0 eXBlcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCUxpc3RDZWxsICAgKmN1cmRlZjsKKwlM aXN0Q2VsbCAgICp0YWJsZV9wYXJhbXMgPSBOVUxMOworCUhlYXBUdXBsZQlwcm9jVHVwOworCUZv cm1fcGdfcHJvYyBwcm9jRm9ybTsKKwlIZWFwVHVwbGUJbGFuZ1R1cDsKKwlPaWQJCSAgICp0eXBh cnJheTsKKwlPaWQJCSAgICp0cmZ0eXBlczsKKwlGb3JtX3BnX2xhbmd1YWdlIGxhbmdGb3JtOwor CWludAkJCWk7CisJaW50CQkJdHlwbnVtOworCWludAkJCW50eXBlczsKKwlib29sCQlpc251bGw7 CisJYm9vbAkJaXNmdW5jdGlvbjsKKworCS8qIEdldCB0aGUgcGdfcHJvYyB0dXBsZSAqLworCXBy b2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1 cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsdXJl IGZvciBmdW5jdGlvbiB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXByb2NGb3JtID0g KEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJLyogR2V0IHRoZSBjb3JyZXNw b25kaW5nIHBnX2xhbmd1YWdlIHR1cGxlICovCisJbGFuZ1R1cCA9IFNlYXJjaFN5c0NhY2hlMShM QU5HT0lELCBwcm9jRm9ybS0+cHJvbGFuZyk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGxhbmdU dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWx1cmUgZm9yIGxhbmd1YWdlIHdp dGggT0lEICV1IiwKKwkJCSBwcm9jRm9ybS0+cHJvbGFuZyk7CisJbGFuZ0Zvcm0gPSAoRm9ybV9w Z19sYW5ndWFnZSkgR0VUU1RSVUNUKGxhbmdUdXApOworCisJLyoKKwkgKiBEZXRlcm1pbmUgdXNl ZnVsIHZhbHVlcyBmb3IgcHJvc3JjIGFuZCBwcm9iaW4uICBXZSBjb3BlIHdpdGggcHJvYmluCisJ ICogYmVpbmcgZWl0aGVyIE5VTEwgb3IgIi0iLCBidXQgcHJvc3JjIG11c3QgaGF2ZSBhIHZhbGlk IHZhbHVlLgorCSAqLworCXRtcGRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NU dXAsCisJCQkJCQkJICAgQW51bV9wZ19wcm9jX3Byb3NyYywgJmlzbnVsbCk7CisJaWYgKGlzbnVs bCkKKwkJZWxvZyhFUlJPUiwgIm51bGwgcHJvc3JjIGluIGZ1bmN0aW9uIHdpdGggT0lEICV1Iiwg b2JqZWN0SWQpOworCXNvdXJjZSA9IFRleHREYXR1bUdldENTdHJpbmcodG1wZGF0dW0pOworCisJ LyogRGV0ZXJtaW5lIGEgdXNlZnVsIHZhbHVlIGZvciBwcm9iaW4gKi8KKwl0bXBkYXR1bSA9IFN5 c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9jVHVwLAorCQkJCQkJCSAgIEFudW1fcGdfcHJvY19w cm9iaW4sICZpc251bGwpOworCWlmIChpc251bGwpCisJCXByb2JpbiA9IE5VTEw7CisJZWxzZQor CXsKKwkJcHJvYmluID0gVGV4dERhdHVtR2V0Q1N0cmluZyh0bXBkYXR1bSk7CisJCWlmIChwcm9i aW5bMF0gPT0gJ1wwJyB8fCBzdHJjbXAocHJvYmluLCAiLSIpID09IDApCisJCQlwcm9iaW4gPSBO VUxMOworCX0KKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSAle29y X3JlcGxhY2V9cyBGVU5DVElPTiAle3NpZ25hdHVyZX1zIFJFVFVSTlMgJXtyZXR1cm5fdHlwZX1z CisJICogTEFOR1VBR0UgJXt0cmFuc2Zvcm1fdHlwZX1zICV7bGFuZ3VhZ2V9SSAle3dpbmRvd31z ICV7dm9sYXRpbGl0eX1zCisJICogJXtwYXJhbGxlbF9zYWZldHl9cyAle2xlYWtwcm9vZn1zICV7 c3RyaWN0fXMgJXtzZWN1cml0eV9kZWZpbmVyfXMKKwkgKiAle2Nvc3R9cyAle3Jvd3N9cyAle3N1 cHBvcnR9cyAle3NldF9vcHRpb25zOiB9cyBBUyAle29iamZpbGV9TCwKKwkgKiAle3N5bWJvbH1M CisJICovCisJY3JlYXRlRnVuYyA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsKKworCWFwcGVuZF9z dHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle29yX3JlcGxhY2V9cyIsCisJCQkJCQkgbm9kZS0+ cmVwbGFjZSA/ICJPUiBSRVBMQUNFIiA6ICIiKTsKKworCS8qCisJICogVG8gY29uc3RydWN0IHRo ZSBhcmd1bWVudHMgYXJyYXksIGV4dHJhY3QgdGhlIHR5cGUgT0lEcyBmcm9tIHRoZQorCSAqIGZ1 bmN0aW9uJ3MgcGdfcHJvYyBlbnRyeS4gIElmIHByb25hcmdzIGVxdWFscyB0aGUgcGFyYW1ldGVy IGxpc3QgbGVuZ3RoLAorCSAqIHRoZXJlIGFyZSBubyBPVVQgcGFyYW1ldGVycyBhbmQgdGh1cyB3 ZSBjYW4gZXh0cmFjdCB0aGUgdHlwZSBPSUQgZnJvbQorCSAqIHByb2FyZ3R5cGVzOyBvdGhlcndp c2Ugd2UgbmVlZCB0byBkZWNvZGUgcHJvYWxsYXJndHlwZXMsIHdoaWNoIGlzCisJICogYSBiaXQg bW9yZSBpbnZvbHZlZC4KKwkgKi8KKwl0eXBhcnJheSA9IHBhbGxvYyhsaXN0X2xlbmd0aChub2Rl LT5wYXJhbWV0ZXJzKSAqIHNpemVvZihPaWQpKTsKKwlpZiAobGlzdF9sZW5ndGgobm9kZS0+cGFy YW1ldGVycykgPiBwcm9jRm9ybS0+cHJvbmFyZ3MpCisJeworCQlib29sCWlzbnVsbDsKKwkJRGF0 dW0JYWxsdHlwZXM7CisJCURhdHVtICAqdmFsdWVzOworCQlib29sICAgKm51bGxzOworCQlpbnQJ CW5lbGVtczsKKworCQlhbGx0eXBlcyA9IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9jVHVw LAorCQkJCQkJCQkgICBBbnVtX3BnX3Byb2NfcHJvYWxsYXJndHlwZXMsICZpc251bGwpOworCQlp ZiAoaXNudWxsKQorCQkJZWxvZyhFUlJPUiwgIk5VTEwgcHJvYWxsYXJndHlwZXMsIGJ1dCBtb3Jl IHBhcmFtZXRlcnMgdGhhbiBhcmdzIik7CisJCWRlY29uc3RydWN0X2FycmF5KERhdHVtR2V0QXJy YXlUeXBlUChhbGx0eXBlcyksCisJCQkJCQkgIE9JRE9JRCwgNCwgJ3QnLCAnaScsCisJCQkJCQkg ICZ2YWx1ZXMsICZudWxscywgJm5lbGVtcyk7CisJCWlmIChuZWxlbXMgIT0gbGlzdF9sZW5ndGgo bm9kZS0+cGFyYW1ldGVycykpCisJCQllbG9nKEVSUk9SLCAibWlzbWF0Y2hlZCBwcm9hbGxhcmdh dHlwZXMiKTsKKwkJZm9yIChpID0gMDsgaSA8IGxpc3RfbGVuZ3RoKG5vZGUtPnBhcmFtZXRlcnMp OyBpKyspCisJCQl0eXBhcnJheVtpXSA9IHZhbHVlc1tpXTsKKwl9CisJZWxzZQorCXsKKwkJZm9y IChpID0gMDsgaSA8IGxpc3RfbGVuZ3RoKG5vZGUtPnBhcmFtZXRlcnMpOyBpKyspCisJCQkgdHlw YXJyYXlbaV0gPSBwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldOworCX0KKworCS8qCisJ ICogSWYgdGhlcmUgYXJlIGFueSBkZWZhdWx0IGV4cHJlc3Npb25zLCB3ZSByZWFkIHRoZSBkZXBh cnNlZCBleHByZXNzaW9uIGFzCisJICogYSBsaXN0IHNvIHRoYXQgd2UgY2FuIGF0dGFjaCB0aGVt IHRvIGVhY2ggYXJndW1lbnQuCisJICovCisJdG1wZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUFJP Q09JRCwgcHJvY1R1cCwKKwkJCQkJCQkgICBBbnVtX3BnX3Byb2NfcHJvYXJnZGVmYXVsdHMsICZp c251bGwpOworCWlmICghaXNudWxsKQorCXsKKwkJZGVmYXVsdHMgPSBGdW5jdGlvbkdldERlZmF1 bHRzKERhdHVtR2V0VGV4dFAodG1wZGF0dW0pKTsKKwkJY3VyZGVmID0gbGlzdF9oZWFkKGRlZmF1 bHRzKTsKKwl9CisJZWxzZQorCXsKKwkJZGVmYXVsdHMgPSBOSUw7CisJCWN1cmRlZiA9IE5VTEw7 CisJfQorCisJLyoKKwkgKiBOb3cgaXRlcmF0ZSBvdmVyIGVhY2ggcGFyYW1ldGVyIGluIHRoZSBw YXJzZXRyZWUgdG8gY3JlYXRlIHRoZQorCSAqIHBhcmFtZXRlcnMgYXJyYXkuCisJICovCisJcGFy YW1zID0gTklMOworCXR5cG51bSA9IDA7CisJZm9yZWFjaChjZWxsLCBub2RlLT5wYXJhbWV0ZXJz KQorCXsKKwkJRnVuY3Rpb25QYXJhbWV0ZXIgKnBhcmFtID0gKEZ1bmN0aW9uUGFyYW1ldGVyICop IGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZQkgICAqcGFyYW1vYmo7CisJCU9ialRyZWUJICAgKmRl ZmF1bHR2YWw7CisJCU9ialRyZWUJICAgKm5hbWU7CisKKwkJLyoKKwkJICogQSBQQVJBTV9UQUJM RSBwYXJhbWV0ZXIgaW5kaWNhdGVzIGVuZCBvZiBpbnB1dCBhcmd1bWVudHM7IHRoZQorCQkgKiBm b2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgcGFydCBvZiB0aGUgcmV0dXJuIHR5cGUuICBXZSBpZ25v cmUgdGhlbQorCQkgKiBoZXJlLCBidXQga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBwb3NpdGlv biBpbiB0aGUgbGlzdCBzbyB0aGF0CisJCSAqIHdlIGNhbiBlYXNpbHkgcHJvZHVjZSB0aGUgcmV0 dXJuIHR5cGUgYmVsb3cuCisJCSAqLworCQlpZiAocGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9U QUJMRSkKKwkJeworCQkJdGFibGVfcGFyYW1zID0gY2VsbDsKKwkJCWJyZWFrOworCQl9CisKKwkJ LyoKKwkJICogVmVyYm9zZSBzeW50YXggZm9yIHBhcmFtYXRlcjogJXttb2RlfXMgJXtuYW1lfXMg JXt0eXBlfVQgJXtkZWZhdWx0fXMKKwkJICoKKwkJICogTm90ZSB0aGF0ICV7bmFtZX1zIGlzIGEg c3RyaW5nIGhlcmUsIG5vdCBhbiBpZGVudGlmaWVyOyB0aGUgcmVhc29uCisJCSAqIGZvciB0aGlz IGlzIHRoYXQgYW4gYWJzZW50IHBhcmFtZXRlciBuYW1lIG11c3QgcHJvZHVjZSBhbiBlbXB0eQor CQkgKiBzdHJpbmcsIG5vdCAiIiwgd2hpY2ggaXMgd2hhdCB3b3VsZCBoYXBwZW4gaWYgd2Ugd2Vy ZSB0byB1c2UKKwkJICogJXtuYW1lfUkgaGVyZS4gIFNvIHdlIGFkZCBhbm90aGVyIGxldmVsIG9m IGluZGlyZWN0aW9uIHRvIGFsbG93IHVzCisJCSAqIHRvIGluamVjdCBhICJwcmVzZW50IiBwYXJh bWV0ZXIuCisJCSAqLworCQlwYXJhbW9iaiA9IG5ld19vYmp0cmVlKCIiKTsKKwkJYXBwZW5kX3N0 cmluZ19vYmplY3QocGFyYW1vYmosICIle21vZGV9cyIsCisJCQkJCQkJIHBhcmFtLT5tb2RlID09 IEZVTkNfUEFSQU1fSU4gPyAiSU4iIDoKKwkJCQkJCQkgcGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJB TV9PVVQgPyAiT1VUIiA6CisJCQkJCQkJIHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1fSU5PVVQg PyAiSU5PVVQiIDoKKwkJCQkJCQkgcGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9WQVJJQURJQyA/ ICJWQVJJQURJQyIgOgorCQkJCQkJCSAiSU4iKTsKKworCQkvKiBPcHRpb25hbCB3aG9sZXNhbGUg c3VwcHJlc3Npb24gb2YgIm5hbWUiIG9jY3VycyBoZXJlICovCisKKwkJbmFtZSA9IG5ld19vYmp0 cmVlKCIiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QobmFtZSwgIiV7bmFtZX1JIiwKKwkJCQkJ CQkgcGFyYW0tPm5hbWUgPyBwYXJhbS0+bmFtZSA6ICJOVUxMIik7CisKKwkJYXBwZW5kX2Jvb2xf b2JqZWN0KG5hbWUsICJwcmVzZW50IiwKKwkJCQkJCSAgIHBhcmFtLT5uYW1lID8gdHJ1ZSA6IGZh bHNlKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChwYXJhbW9iaiwgIiV7bmFtZX1zIiwgbmFt ZSk7CisKKwkJZGVmYXVsdHZhbCA9IG5ld19vYmp0cmVlKCJERUZBVUxUIik7CisJCWlmIChQb2lu dGVySXNWYWxpZChwYXJhbS0+ZGVmZXhwcikpCisJCXsKKwkJCWNoYXIgKmV4cHI7CisKKwkJCWlm IChjdXJkZWYgPT0gTlVMTCkKKwkJCQllbG9nKEVSUk9SLCAicHJvYXJnZGVmYXVsdHMgbGlzdCB0 b28gc2hvcnQiKTsKKwkJCWV4cHIgPSBsZmlyc3QoY3VyZGVmKTsKKworCQkJYXBwZW5kX3N0cmlu Z19vYmplY3QoZGVmYXVsdHZhbCwgIiV7dmFsdWV9cyIsIGV4cHIpOworCQkJY3VyZGVmID0gbG5l eHQoZGVmYXVsdHMsIGN1cmRlZik7CisJCX0KKwkJZWxzZQorCQkJYXBwZW5kX2Jvb2xfb2JqZWN0 KGRlZmF1bHR2YWwsICJwcmVzZW50IiwgZmFsc2UpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHBhcmFtb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBh cnJheVt0eXBudW0rK10sIC0xKSk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocGFyYW1vYmos ICIle2RlZmF1bHR9cyIsIGRlZmF1bHR2YWwpOworCisJCXBhcmFtcyA9IGxhcHBlbmQocGFyYW1z LCBuZXdfb2JqZWN0X29iamVjdChwYXJhbW9iaikpOworCX0KKworCXRtcG9iaiA9IG5ld19vYmp0 cmVlX1ZBKCIle2lkZW50aXR5fUQiLCAxLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRp b25JZCwKKwkJCQkJCQkJCQkJCQkgIG9iamVjdElkKSk7CisKKwlhcHBlbmRfZm9ybWF0X3N0cmlu Zyh0bXBvYmosICIoIik7CisJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIle2FyZ3VtZW50 czosIH1zIiwgcGFyYW1zKTsKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBvYmosICIpIik7CisK Kwlpc2Z1bmN0aW9uID0gKHByb2NGb3JtLT5wcm9raW5kICE9IFBST0tJTkRfUFJPQ0VEVVJFKTsK KworCWlmIChpc2Z1bmN0aW9uKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVGdW5jLCAi RlVOQ1RJT04gJXtzaWduYXR1cmV9cyIsIHRtcG9iaik7CisJZWxzZQorCQlhcHBlbmRfb2JqZWN0 X29iamVjdChjcmVhdGVGdW5jLCAiUFJPQ0VEVVJFICV7c2lnbmF0dXJlfXMiLCB0bXBvYmopOwor CisJLyoKKwkgKiBBIHJldHVybiB0eXBlIGNhbiBhZG9wdCBvbmUgb2YgdHdvIGZvcm1zOiBlaXRo ZXIgYSBbU0VUT0ZdIHNvbWVfdHlwZSwgb3IKKwkgKiBhIFRBQkxFKGxpc3Qtb2YtdHlwZXMpLiAg V2UgY2FuIHRlbGwgdGhlIHNlY29uZCBmb3JtIGJlY2F1c2Ugd2Ugc2F3IGEKKwkgKiB0YWJsZSBw YXJhbSBhYm92ZSB3aGlsZSBzY2FubmluZyB0aGUgYXJndW1lbnQgbGlzdC4KKwkgKi8KKwlpZiAo dGFibGVfcGFyYW1zID09IE5VTEwpCisJeworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiIiwg MSwKKwkJCQkJCQkgInJldHVybl9mb3JtIiwgT2JqVHlwZVN0cmluZywgInBsYWluIik7CisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7c2V0b2Z9cyIsCisJCQkJCQkJIHByb2NGb3Jt LT5wcm9yZXRzZXQgPyAiU0VUT0YiIDogIiIpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBv YmosICIle3JldHR5cGV9VCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2NGb3Jt LT5wcm9yZXR0eXBlLCAtMSkpOworCX0KKwllbHNlCisJeworCQlMaXN0CSAgICpyZXR0eXBlcyA9 IE5JTDsKKwkJT2JqVHJlZQkgICAqcGFyYW1vYmo7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWVf VkEoIlRBQkxFIiwgMSwKKwkJCQkJCQkgInJldHVybl9mb3JtIiwgT2JqVHlwZVN0cmluZywgInRh YmxlIik7CisJCWZvciAoOyB0YWJsZV9wYXJhbXMgIT0gTlVMTDsgdGFibGVfcGFyYW1zID0gbG5l eHQobm9kZS0+cGFyYW1ldGVycywgdGFibGVfcGFyYW1zKSkKKwkJeworCQkJRnVuY3Rpb25QYXJh bWV0ZXIgKnBhcmFtID0gbGZpcnN0KHRhYmxlX3BhcmFtcyk7CisKKwkJCXBhcmFtb2JqID0gbmV3 X29ianRyZWUoIiIpOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocGFyYW1vYmosICIle25hbWV9 SSIsIHBhcmFtLT5uYW1lKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtb2JqLCAiJXt0 eXBlfVQiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwYXJyYXlbdHlwbnVtKytd LCAtMSkpOworCQkJcmV0dHlwZXMgPSBsYXBwZW5kKHJldHR5cGVzLCBuZXdfb2JqZWN0X29iamVj dChwYXJhbW9iaikpOworCQl9CisKKwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIoJXty ZXR0eXBlczosIH1zKSIsIHJldHR5cGVzKTsKKwl9CisKKwlpZiAoaXNmdW5jdGlvbikKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRnVuYywgIlJFVFVSTlMgJXtyZXR1cm5fdHlwZX1zIiwg dG1wb2JqKTsKKworCS8qIFRSQU5TRk9STSBGT1IgVFlQRSAqLworCXRtcG9iaiA9IG5ld19vYmp0 cmVlKCJUUkFOU0ZPUk0iKTsKKworCW50eXBlcyA9IGdldF9mdW5jX3RyZnR5cGVzKHByb2NUdXAs ICZ0cmZ0eXBlcyk7CisJZm9yIChpID0gMDsgaSA8IG50eXBlczsgaSsrKQorCXsKKwkJdG1wb2Jq ID0gbmV3X29ianRyZWVfVkEoIkZPUiBUWVBFICV7dHlwZX1UIiwgMSwKKwkJCQkJCQkgInR5cGUi LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0cmZ0eXBlc1tp XSwgLTEpKTsKKwkJdHlwZXMgPSBsYXBwZW5kKHR5cGVzLCB0bXBvYmopOworCX0KKworCWlmICh0 eXBlcykKKwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIle2Zvcl90eXBlOiwgfXMiLCB0 eXBlcyk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZh bHNlKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3RyYW5zZm9ybV90 eXBlfXMiLCB0bXBvYmopOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIkxB TkdVQUdFICV7bGFuZ3VhZ2V9SSIsCisJCQkJCQkgTmFtZVN0cihsYW5nRm9ybS0+bGFubmFtZSkp OworCisJaWYgKGlzZnVuY3Rpb24pCisJeworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVG dW5jLCAiJXt3aW5kb3d9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9raW5kID09IFBST0tJTkRf V0lORE9XID8gIldJTkRPVyIgOiAiIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1 bmMsICIle3ZvbGF0aWxpdHl9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm92b2xhdGlsZSA9PSBQ Uk9WT0xBVElMRV9WT0xBVElMRSA/CisJCQkJCQkJICJWT0xBVElMRSIgOgorCQkJCQkJCSBwcm9j Rm9ybS0+cHJvdm9sYXRpbGUgPT0gUFJPVk9MQVRJTEVfU1RBQkxFID8KKwkJCQkJCQkgIlNUQUJM RSIgOiAiSU1NVVRBQkxFIik7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywg IiV7cGFyYWxsZWxfc2FmZXR5fXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvcGFyYWxsZWwgPT0g UFJPUEFSQUxMRUxfU0FGRSA/CisJCQkJCQkJICJQQVJBTExFTCBTQUZFIiA6CisJCQkJCQkJIHBy b2NGb3JtLT5wcm9wYXJhbGxlbCA9PSBQUk9QQVJBTExFTF9SRVNUUklDVEVEID8KKwkJCQkJCQkg IlBBUkFMTEVMIFJFU1RSSUNURUQiIDogIlBBUkFMTEVMIFVOU0FGRSIpOworCisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle2xlYWtwcm9vZn1zIiwKKwkJCQkJCQkgcHJvY0Zv cm0tPnByb2xlYWtwcm9vZiA/ICJMRUFLUFJPT0YiIDogIiIpOworCQlhcHBlbmRfc3RyaW5nX29i amVjdChjcmVhdGVGdW5jLCAiJXtzdHJpY3R9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9pc3N0 cmljdCA/CisJCQkJCQkJICJSRVRVUk5TIE5VTEwgT04gTlVMTCBJTlBVVCIgOgorCQkJCQkJCSAi Q0FMTEVEIE9OIE5VTEwgSU5QVVQiKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVG dW5jLCAiJXtzZWN1cml0eV9kZWZpbmVyfXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvc2VjZGVm ID8KKwkJCQkJCQkgIlNFQ1VSSVRZIERFRklORVIiIDogIlNFQ1VSSVRZIElOVk9LRVIiKTsKKwor CQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVGdW5jLCAiJXtjb3N0fXMiLAorCQkJCQkJCSBu ZXdfb2JqdHJlZV9WQSgiQ09TVCAle2Nvc3R9biIsIDEsCisJCQkJCQkJCQkJCSJjb3N0IiwgT2Jq VHlwZUZsb2F0LAorCQkJCQkJCQkJCQlwcm9jRm9ybS0+cHJvY29zdCkpOworCisJCXRtcG9iaiA9 IG5ld19vYmp0cmVlKCJST1dTIik7CisJCWlmIChwcm9jRm9ybS0+cHJvcm93cyA9PSAwKQorCQkJ YXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJCWVsc2UKKwkJ CWFwcGVuZF9mbG9hdF9vYmplY3QodG1wb2JqLCAiJXtyb3dzfW4iLCBwcm9jRm9ybS0+cHJvcm93 cyk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3Jvd3N9cyIsIHRtcG9i aik7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWUoIlNVUFBPUlQgJXtuYW1lfXMiKTsKKwkJaWYg KHByb2NGb3JtLT5wcm9zdXBwb3J0KQorCQl7CisJCQlPaWQJCQlhcmd0eXBlc1sxXTsKKworCQkJ LyoKKwkJCSAqIFdlIHNob3VsZCBxdWFsaWZ5IHRoZSBzdXBwb3J0IGZ1bmN0aW9uJ3MgbmFtZSBp ZiBpdCB3b3VsZG4ndCBiZQorCQkJICogcmVzb2x2ZWQgYnkgbG9va3VwIGluIHRoZSBjdXJyZW50 IHNlYXJjaCBwYXRoLgorCQkJICovCisJCQlhcmd0eXBlc1swXSA9IElOVEVSTkFMT0lEOworCQkJ YXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtuYW1lfXMiLAorCQkJCQkJCQkgZ2VuZXJh dGVfZnVuY3Rpb25fbmFtZShwcm9jRm9ybS0+cHJvc3VwcG9ydCwgMSwKKwkJCQkJCQkJCQkJCQkJ TklMLCBhcmd0eXBlcywKKwkJCQkJCQkJCQkJCQkJZmFsc2UsIE5VTEwsCisJCQkJCQkJCQkJCQkJ CUVYUFJfS0lORF9OT05FKSk7CisJCX0KKwkJZWxzZQorCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRt cG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRl RnVuYywgIiV7c3VwcG9ydH1zIiwgdG1wb2JqKTsKKwl9CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUt Pm9wdGlvbnMpCisJeworCQlEZWZFbGVtCSpkZWZlbCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxs KTsKKwkJT2JqVHJlZQkgICAqdG1wb2JqOworCisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUs ICJzZXQiKSA9PSAwKQorCQl7CisJCQlWYXJpYWJsZVNldFN0bXQgKnNzdG10ID0gKFZhcmlhYmxl U2V0U3RtdCAqKSBkZWZlbC0+YXJnOworCQkJY2hhciAqdmFsdWUgPSBFeHRyYWN0U2V0VmFyaWFi bGVBcmdzKHNzdG10KTsKKworCQkJdG1wb2JqID0gZGVwYXJzZV9GdW5jdGlvblNldChzc3RtdC0+ a2luZCwgc3N0bXQtPm5hbWUsIHZhbHVlKTsKKwkJCXNldHMgPSBsYXBwZW5kKHNldHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQl9CisJfQorCWFwcGVuZF9hcnJheV9vYmplY3QoY3Jl YXRlRnVuYywgIiV7c2V0X29wdGlvbnM6IH1zIiwgc2V0cyk7CisKKwkvKiBBZGQgdGhlIGZ1bmN0 aW9uIGRlZmluaXRpb24gKi8KKwkodm9pZCkgU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NU dXAsIEFudW1fcGdfcHJvY19wcm9zcWxib2R5LCAmaXNudWxsKTsKKwlpZiAocHJvY0Zvcm0tPnBy b2xhbmcgPT0gU1FMbGFuZ3VhZ2VJZCAmJiAhaXNudWxsKQorCXsKKwkJU3RyaW5nSW5mb0RhdGEg YnVmOworCisJCWluaXRTdHJpbmdJbmZvKCZidWYpOworCQlwcmludF9mdW5jdGlvbl9zcWxib2R5 KCZidWYsIHByb2NUdXApOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIl e2RlZmluaXRpb259cyIsIGJ1Zi5kYXRhKTsKKwl9CisJZWxzZSBpZiAocHJvYmluID09IE5VTEwp CisJeworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiQVMgJXtkZWZpbml0aW9u fUwiLAorCQkJCQkJCSBzb3VyY2UpOworCX0KKwllbHNlCisJeworCQlhcHBlbmRfc3RyaW5nX29i amVjdChjcmVhdGVGdW5jLCAiQVMgJXtvYmpmaWxlfUwiLCBwcm9iaW4pOworCQlhcHBlbmRfc3Ry aW5nX29iamVjdChjcmVhdGVGdW5jLCAiLCAle3N5bWJvbH1MIiwgc291cmNlKTsKKwl9CisKKwlS ZWxlYXNlU3lzQ2FjaGUobGFuZ1R1cCk7CisJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCisJ cmV0dXJuIGNyZWF0ZUZ1bmM7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ1JFQVRFIE9QRVJBVE9S IENMQVNTIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlT3BD bGFzc1N0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9pZAkJCW9wY29pZCA9IGNtZC0+ ZC5jcmVhdGVvcGMuYWRkcmVzcy5vYmplY3RJZDsKKwlIZWFwVHVwbGUgICBvcGNUdXA7CisJSGVh cFR1cGxlICAgb3BmVHVwOworCUZvcm1fcGdfb3BmYW1pbHkgb3BmRm9ybTsKKwlGb3JtX3BnX29w Y2xhc3Mgb3BjRm9ybTsKKwlPYmpUcmVlCSAgICpzdG10OworCU9ialRyZWUJICAgKnRtcG9iajsK KwlMaXN0CSAgICpsaXN0OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlvcGNUdXAgPSBTZWFyY2hT eXNDYWNoZTEoQ0xBT0lELCBPYmplY3RJZEdldERhdHVtKG9wY29pZCkpOworCWlmICghSGVhcFR1 cGxlSXNWYWxpZChvcGNUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBm b3Igb3BjbGFzcyB3aXRoIE9JRCAldSIsIG9wY29pZCk7CisJb3BjRm9ybSA9IChGb3JtX3BnX29w Y2xhc3MpIEdFVFNUUlVDVChvcGNUdXApOworCisJb3BmVHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9Q RkFNSUxZT0lELCBvcGNGb3JtLT5vcGNmYW1pbHkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChv cGZUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3Ig ZmFtaWx5IHdpdGggT0lEICV1Iiwgb3BjRm9ybS0+b3BjZmFtaWx5KTsKKwlvcGZGb3JtID0gKEZv cm1fcGdfb3BmYW1pbHkpIEdFVFNUUlVDVChvcGZUdXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5 bnRheAorCSAqCisJICogQ1JFQVRFIE9QRVJBVE9SIENMQVNTICV7aWRlbnRpdHl9RCAle2RlZmF1 bHR9cyBGT1IgVFlQRSAle3R5cGV9VCBVU0lORworCSAqICV7YW1uYW1lfUkgJXtvcGZhbWlseX1z IEFTICV7aXRlbXM6LCB9cworCSAqLworCisJc3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUg T1BFUkFUT1IgQ0xBU1MgJXtpZGVudGl0eX1EIiwgMSwKKwkJCQkJCSAgImlkZW50aXR5IiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wY0Zvcm0tPm9w Y25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgIE5hbWVTdHIob3BjRm9ybS0+b3BjbmFtZSkpKTsK KworCS8qIEFkZCB0aGUgREVGQVVMVCBjbGF1c2UgKi8KKwlhcHBlbmRfc3RyaW5nX29iamVjdChz dG10LCAiJXtkZWZhdWx0fXMiLAorCQkJCQkJIG9wY0Zvcm0tPm9wY2RlZmF1bHQgPyAiREVGQVVM VCIgOiAiIik7CisKKwkvKiBBZGQgdGhlIEZPUiBUWVBFIGNsYXVzZSAqLworCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHN0bXQsICJGT1IgVFlQRSAle3R5cGV9VCIsCisJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3R5cGUob3BjRm9ybS0+b3BjaW50eXBlLCAtMSkpOworCisJLyogQWRkIHRoZSBVU0lORyBj bGF1c2UgKi8KKwlhcHBlbmRfc3RyaW5nX29iamVjdChzdG10LCAiVVNJTkcgJXthbW5hbWV9SSIs IGdldF9hbV9uYW1lKG9wY0Zvcm0tPm9wY21ldGhvZCkpOworCisJLyoKKwkgKiBBZGQgdGhlIEZB TUlMWSBjbGF1c2U7IGJ1dCBpZiBpdCBoYXMgdGhlIHNhbWUgbmFtZSBhbmQgbmFtZXNwYWNlIGFz IHRoZQorCSAqIG9wY2xhc3MsIHRoZW4gaGF2ZSBpdCBleHBhbmQgdG8gZW1wdHksIGJlY2F1c2Ug aXQgd291bGQgY2F1c2UgYSBmYWlsdXJlCisJICogaWYgdGhlIG9wZmFtaWx5IHdhcyBjcmVhdGVk IGludGVybmFsbHkuCisJICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkZBTUlMWSAle29w ZmFtaWx5fUQiLCAxLAorCQkJCQkJICJvcGZhbWlseSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wZkZvcm0tPm9wZm5hbWVzcGFjZSwKKwkJCQkJCQkJ CQkJCSAgTmFtZVN0cihvcGZGb3JtLT5vcGZuYW1lKSkpOworCisJaWYgKHN0cmNtcChOYW1lU3Ry KG9wZkZvcm0tPm9wZm5hbWUpLCBOYW1lU3RyKG9wY0Zvcm0tPm9wY25hbWUpKSA9PSAwICYmCisJ CW9wZkZvcm0tPm9wZm5hbWVzcGFjZSA9PSBvcGNGb3JtLT5vcGNuYW1lc3BhY2UpCisJCWFwcGVu ZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCisJYXBwZW5kX29iamVj dF9vYmplY3Qoc3RtdCwgIiV7b3BmYW1pbHl9cyIsICB0bXBvYmopOworCisJLyoKKwkgKiBBZGQg dGhlIGluaXRpYWwgaXRlbSBsaXN0LiAgTm90ZSB3ZSBhbHdheXMgYWRkIHRoZSBTVE9SQUdFIGNs YXVzZSwgZXZlbgorCSAqIHdoZW4gaXQgaXMgaW1wbGljaXQgaW4gdGhlIG9yaWdpbmFsIGNvbW1h bmQuCisJICovCisJdG1wb2JqID0gbmV3X29ianRyZWUoIlNUT1JBR0UiKTsKKwlhcHBlbmRfb2Jq ZWN0X29iamVjdCh0bXBvYmosICIle3R5cGV9VCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5 cGUob3BjRm9ybS0+b3Bja2V5dHlwZSAhPSBJbnZhbGlkT2lkID8KKwkJCQkJCQkJCQkJICBvcGNG b3JtLT5vcGNrZXl0eXBlIDogb3BjRm9ybS0+b3BjaW50eXBlLAorCQkJCQkJCQkJCQkgIC0xKSk7 CisJbGlzdCA9IGxpc3RfbWFrZTEobmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkvKiBB ZGQgdGhlIGRlY2xhcmVkIG9wZXJhdG9ycyAqLworCWZvcmVhY2goY2VsbCwgY21kLT5kLmNyZWF0 ZW9wYy5vcGVyYXRvcnMpCisJeworCQlPcEZhbWlseU1lbWJlciAqb3BlciA9IGxmaXJzdChjZWxs KTsKKwkJT2JqVHJlZQkgICAqdG1wb2JqOworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJP UEVSQVRPUiAle251bX1uICV7b3BlcmF0b3J9Tygle2x0eXBlfVQsICV7cnR5cGV9VCkiLAorCQkJ CQkJCSA0LAorCQkJCQkJCSAibnVtIiwgT2JqVHlwZUludGVnZXIsIG9wZXItPm51bWJlciwKKwkJ CQkJCQkgIm9wZXJhdG9yIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIG9wZXItPm9i amVjdCksCisJCQkJCQkJImx0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQluZXdfb2JqdHJl ZV9mb3JfdHlwZShvcGVyLT5sZWZ0dHlwZSwgLTEpLAorCQkJCQkJCSJydHlwZSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUob3Blci0+cmlnaHR0eXBlLCAtMSkp OworCisJCS8qIEFkZCB0aGUgRk9SIFNFQVJDSCAvIEZPUiBPUkRFUiBCWSBjbGF1c2UgKi8KKwkJ aWYgKG9wZXItPnNvcnRmYW1pbHkgPT0gSW52YWxpZE9pZCkKKwkJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRtcG9iaiwgIiV7cHVycG9zZX1zIiwgIkZPUiBTRUFSQ0giKTsKKwkJZWxzZQorCQl7CisJ CQlPYmpUcmVlCSAgICp0bXBvYmoyOworCisJCQl0bXBvYmoyID0gbmV3X29ianRyZWVfVkEoIkZP UiBPUkRFUiBCWSAle29wZmFtaWx5fUQiLCAwKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRt cG9iajIsICJvcGZhbWlseSIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo T3BlcmF0b3JGYW1pbHlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJIG9wZXItPnNvcnRmYW1p bHkpKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cHVycG9zZX1zIiwgdG1w b2JqMik7CisJCX0KKworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0 bXBvYmopKTsKKwl9CisKKwkvKiBBZGQgdGhlIGRlY2xhcmVkIHN1cHBvcnQgZnVuY3Rpb25zICov CisJZm9yZWFjaChjZWxsLCBjbWQtPmQuY3JlYXRlb3BjLnByb2NlZHVyZXMpCisJeworCQlPcEZh bWlseU1lbWJlciAqcHJvYyA9IGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZQkgICAqdG1wb2JqOwor CQlIZWFwVHVwbGUJcHJvY1R1cDsKKwkJRm9ybV9wZ19wcm9jIHByb2NGb3JtOworCQlPaWQJCSAg ICpwcm9hcmd0eXBlczsKKwkJTGlzdAkgICAqYXJnbGlzdCA9IE5JTDsKKwkJaW50CQkJaTsKKwor CQlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0ocHJv Yy0+b2JqZWN0KSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwcm9jZWR1cmUgJXUiLCBwcm9jLT5vYmpl Y3QpOworCQlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jVHVwKTsKKwor CQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRlVOQ1RJT04gJXtudW19biAoJXtsdHlwZX1ULCAl e3J0eXBlfVQpICV7ZnVuY3Rpb259RCIsCisJCQkJCQkJIDQsCisJCQkJCQkJICJudW0iLCBPYmpU eXBlSW50ZWdlciwgcHJvYy0+bnVtYmVyLAorCQkJCQkJCSAibHR5cGUiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jLT5sZWZ0dHlwZSwgLTEpLAorCQkJ CQkJCSAicnR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlw ZShwcm9jLT5yaWdodHR5cGUsIC0xKSwKKwkJCQkJCQkgImZ1bmN0aW9uIiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHByb2NGb3JtLT5wcm9uYW1lc3Bh Y2UsCisJCQkJCQkJCQkJCQkJICBOYW1lU3RyKHByb2NGb3JtLT5wcm9uYW1lKSkpOworCisJCXBy b2FyZ3R5cGVzID0gcHJvY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlczsKKwkJZm9yIChpID0gMDsg aSA8IHByb2NGb3JtLT5wcm9uYXJnczsgaSsrKQorCQl7CisJCQlPYmpUcmVlCSAgICphcmc7CisK KwkJCWFyZyA9IG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2FyZ3R5cGVzW2ldLCAtMSk7CisJCQlh cmdsaXN0ID0gbGFwcGVuZChhcmdsaXN0LCBuZXdfb2JqZWN0X29iamVjdChhcmcpKTsKKwkJfQor CisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwgIigiKTsKKwkJYXBwZW5kX2FycmF5X29i amVjdCh0bXBvYmosICIle2FyZ3R5cGVzOiwgfVQiLCBhcmdsaXN0KTsKKwkJYXBwZW5kX2Zvcm1h dF9zdHJpbmcodG1wb2JqLCAiKSIpOworCisJCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKwor CQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwl9CisK KwlhcHBlbmRfYXJyYXlfb2JqZWN0KHN0bXQsICJBUyAle2l0ZW1zOiwgfXMiLCBsaXN0KTsKKwor CVJlbGVhc2VTeXNDYWNoZShvcGZUdXApOworCVJlbGVhc2VTeXNDYWNoZShvcGNUdXApOworCisJ cmV0dXJuIHN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlVHJpZ1N0bXQgKENSRUFU RSBPUEVSQVRPUiBGQU1JTFkpCisgKgorICogR2l2ZW4gYSB0cmlnZ2VyIE9JRCBhbmQgdGhlIHBh cnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRp bmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf Q3JlYXRlT3BGYW1pbHkoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJSGVhcFR1 cGxlICAgb3BmVHVwOworCUhlYXBUdXBsZSAgIGFtVHVwOworCUZvcm1fcGdfb3BmYW1pbHkgb3Bm Rm9ybTsKKwlGb3JtX3BnX2FtICBhbUZvcm07CisJT2JqVHJlZQkgICAqY29wZlN0bXQ7CisKKwlv cGZUdXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQsIE9iamVjdElkR2V0RGF0dW0ob2Jq ZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BmVHVwKSkKKwkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZhbWlseSB3aXRoIE9JRCAldSIsIG9i amVjdElkKTsKKwlvcGZGb3JtID0gKEZvcm1fcGdfb3BmYW1pbHkpIEdFVFNUUlVDVChvcGZUdXAp OworCisJYW1UdXAgPSBTZWFyY2hTeXNDYWNoZTEoQU1PSUQsIE9iamVjdElkR2V0RGF0dW0ob3Bm Rm9ybS0+b3BmbWV0aG9kKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGFtVHVwKSkKKwkJZWxv ZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGFjY2VzcyBtZXRob2QgJXUiLAorCQkJ IG9wZkZvcm0tPm9wZm1ldGhvZCk7CisJYW1Gb3JtID0gKEZvcm1fcGdfYW0pIEdFVFNUUlVDVChh bVR1cCk7CisKKwljb3BmU3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgT1BFUkFUT1IgRkFN SUxZICV7aWRlbnRpdHl9RCBVU0lORyAle2FtbmFtZX1JIiwKKwkJCQkJCQkgIDIsCisJCQkJCQkJ ICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lKG9wZkZvcm0tPm9wZm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkgICBOYW1lU3RyKG9w ZkZvcm0tPm9wZm5hbWUpKSwKKwkJCQkJCQkgICJhbW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBOYW1l U3RyKGFtRm9ybS0+YW1uYW1lKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoYW1UdXApOworCVJlbGVh c2VTeXNDYWNoZShvcGZUdXApOworCisJcmV0dXJuIGNvcGZTdG10OworfQorCisvKgorICogRGVw YXJzZSBhIENyZWF0ZVNjaGVtYVN0bXQuCisgKgorICogR2l2ZW4gYSBzY2hlbWEgT0lEIGFuZCB0 aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJl c2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfQ3JlYXRlU2NoZW1hU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkK K3sKKwlDcmVhdGVTY2hlbWFTdG10ICpub2RlID0gKENyZWF0ZVNjaGVtYVN0bXQgKikgcGFyc2V0 cmVlOworCU9ialRyZWUJCQkgKmNyZWF0ZVNjaGVtYTsKKwlPYmpUcmVlCQkJICphdXRoOworCisJ LyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFIFNDSEVNQSAle2lmX25vdF9l eGlzdHN9cyAle25hbWV9SSAle2F1dGhvcml6YXRpb259cworCSAqLworCWNyZWF0ZVNjaGVtYSA9 IG5ld19vYmp0cmVlKCJDUkVBVEUgU0NIRU1BIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChj cmVhdGVTY2hlbWEsICIle2lmX25vdF9leGlzdHN9cyIsCisJCQkJCQkgbm9kZS0+aWZfbm90X2V4 aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNy ZWF0ZVNjaGVtYSwgIiV7bmFtZX1JIiwgbm9kZS0+c2NoZW1hbmFtZSk7CisKKwlhdXRoID0gbmV3 X29ianRyZWUoIkFVVEhPUklaQVRJT04iKTsKKwlpZiAobm9kZS0+YXV0aHJvbGUpCisJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KGF1dGgsICIle2F1dGhvcml6YXRpb25fcm9sZX1JIiwKKwkJCQkJCQkg Z2V0X3JvbGVzcGVjX25hbWUobm9kZS0+YXV0aHJvbGUpKTsKKwllbHNlCisJeworCQlhcHBlbmRf bnVsbF9vYmplY3QoYXV0aCwgIiV7YXV0aG9yaXphdGlvbl9yb2xlfUkgIik7CisJCWFwcGVuZF9i b29sX29iamVjdChhdXRoLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisJYXBwZW5kX29iamVjdF9v YmplY3QoY3JlYXRlU2NoZW1hLCAiJXthdXRob3JpemF0aW9ufXMiLCBhdXRoKTsKKworCXJldHVy biBjcmVhdGVTY2hlbWE7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWUgb2Yg YSBkb21haW4uCisgKi8KK3N0YXRpYyBjaGFyICoKK0RvbWFpbkdldERlZmF1bHQoSGVhcFR1cGxl IGRvbVR1cCkKK3sKKwlEYXR1bQlkZWY7CisJTm9kZSAgICpkZWZ2YWw7CisJY2hhciAgICpkZWZz dHI7CisJYm9vbAlpc251bGw7CisKKwlkZWYgPSBTeXNDYWNoZUdldEF0dHIoVFlQRU9JRCwgZG9t VHVwLCBBbnVtX3BnX3R5cGVfdHlwZGVmYXVsdGJpbiwKKwkJCQkJCQkgJmlzbnVsbCk7CisJaWYg KGlzbnVsbCkKKwkJZWxvZyhFUlJPUiwgImRvbWFpbiBcIiVzXCIgZG9lcyBub3QgaGF2ZSBhIGRl ZmF1bHQgdmFsdWUiLAorCQkJIE5hbWVTdHIoKChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVChkb21U dXApKS0+dHlwbmFtZSkpOworCWRlZnZhbCA9IHN0cmluZ1RvTm9kZShUZXh0RGF0dW1HZXRDU3Ry aW5nKGRlZikpOworCWRlZnN0ciA9IGRlcGFyc2VfZXhwcmVzc2lvbihkZWZ2YWwsIE5VTEwgLyog ZHBjb250ZXh0PyAqLywKKwkJCQkJCQkJCSAgIGZhbHNlLCBmYWxzZSk7CisKKwlyZXR1cm4gZGVm c3RyOworfQorCisvKgorICogRGVwYXJzZSBhIEFsdGVyRG9tYWluU3RtdC4KKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckRvbWFpblN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpw YXJzZXRyZWUsCisJCQkJCQlPYmplY3RBZGRyZXNzIGNvbnN0cmFpbnRBZGRyKQoreworCUFsdGVy RG9tYWluU3RtdCAqbm9kZSA9IChBbHRlckRvbWFpblN0bXQgKikgcGFyc2V0cmVlOworCUhlYXBU dXBsZQlkb21UdXA7CisJRm9ybV9wZ190eXBlIGRvbUZvcm07CisJT2JqVHJlZQkgICAqYWx0ZXJE b207CisJY2hhcgkgICAqZm10OworCWNvbnN0IGNoYXIgKnR5cGU7CisKKwkvKiBBTFRFUiBET01B SU4gRFJPUCBDT05TVFJBSU5UIGlzIGhhbmRsZWQgYnkgdGhlIERST1Agc3VwcG9ydCBjb2RlICov CisJaWYgKG5vZGUtPnN1YnR5cGUgPT0gJ1gnKQorCQlyZXR1cm4gTlVMTDsKKworCWRvbVR1cCA9 IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKGRvbVR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBkb21h aW4gd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwlkb21Gb3JtID0gKEZvcm1fcGdfdHlw ZSkgR0VUU1RSVUNUKGRvbVR1cCk7CisKKwlzd2l0Y2ggKG5vZGUtPnN1YnR5cGUpCisJeworCQlj YXNlICdUJzoKKwkJCS8qIFNFVCBERUZBVUxUIC8gRFJPUCBERUZBVUxUICovCisJCQlpZiAobm9k ZS0+ZGVmID09IE5VTEwpCisJCQl7CisJCQkJZm10ID0gIkFMVEVSIERPTUFJTiI7CisJCQkJdHlw ZSA9ICJkcm9wIGRlZmF1bHQiOworCQkJCWFsdGVyRG9tID0gbmV3X29ianRyZWVfVkEoZm10LCAx LCAidHlwZSIsIE9ialR5cGVTdHJpbmcsIHR5cGUpOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KGFsdGVyRG9tLCAiJXtpZGVudGl0eX1EIERST1AgREVGQVVMVCIsCisJCQkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJ CSAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSkpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJ CWZtdCA9ICJBTFRFUiBET01BSU4iOworCQkJCXR5cGUgPSAic2V0IGRlZmF1bHQiOworCQkJCWFs dGVyRG9tID0gbmV3X29ianRyZWVfVkEoZm10LCAxLCAidHlwZSIsIE9ialR5cGVTdHJpbmcsIHR5 cGUpOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRG9tLCAiJXtpZGVudGl0eX1EIFNF VCBERUZBVUxUIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+ dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUp KSk7CisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJEb20sICIle2RlZmF1bHR9cyIsIERv bWFpbkdldERlZmF1bHQoZG9tVHVwKSk7CisJCQl9CisKKwkJCWJyZWFrOworCQljYXNlICdOJzoK KwkJCS8qIERST1AgTk9UIE5VTEwgKi8KKwkJCWZtdCA9ICJBTFRFUiBET01BSU4iOworCQkJdHlw ZSA9ICJkcm9wIG5vdCBudWxsIjsKKwkJCWFsdGVyRG9tID0gbmV3X29ianRyZWVfVkEoZm10LCAx LCAidHlwZSIsIE9ialR5cGVTdHJpbmcsIHR5cGUpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3Qo YWx0ZXJEb20sICIle2lkZW50aXR5fUQgRFJPUCBOT1QgTlVMTCIsCisJCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkg IE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCWJyZWFrOworCQljYXNlICdPJzoKKwkJ CS8qIFNFVCBOT1QgTlVMTCAqLworCQkJZm10ID0gIkFMVEVSIERPTUFJTiI7CisJCQl0eXBlID0g InNldCBub3QgbnVsbCI7CisJCQlhbHRlckRvbSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCB0eXBlKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVy RG9tLCAiJXtpZGVudGl0eX1EIFNFVCBOT1QgTlVMTCIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkgIE5hbWVT dHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCWJyZWFrOworCQljYXNlICdDJzoKKwkJCS8qIEFE RCBDT05TVFJBSU5ULiAgT25seSBDSEVDSyBjb25zdHJhaW50cyBhcmUgc3VwcG9ydGVkIGJ5IGRv bWFpbnMgKi8KKwkJCWZtdCA9ICJBTFRFUiBET01BSU4iOworCQkJdHlwZSA9ICJhZGQgY29uc3Ry YWludCI7CisJCQlhbHRlckRvbSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgInR5cGUiLCBPYmpU eXBlU3RyaW5nLCB0eXBlKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRG9tLCAiJXtp ZGVudGl0eX1EIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShkb21Gb3JtLT50 eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSkp OworCQkJLyogYSBuZXcgY29uc3RyYWludCBoYXMgYSBuYW1lIGFuZCBkZWZpbml0aW9uICovCisJ CQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckRvbSwgIkFERCBDT05TVFJBSU5UICV7Y29uc3Ry YWludF9uYW1lfXMiLAorCQkJCQkJCQkgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25zdHJhaW50QWRk ci5vYmplY3RJZCkpOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJEb20sICIle2RlZmlu aXRpb259cyIsCisJCQkJCQkJCSBwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBsZShj b25zdHJhaW50QWRkci5vYmplY3RJZCkpOworCQkJYnJlYWs7CisJCWNhc2UgJ1YnOgorCQkJLyog VkFMSURBVEUgQ09OU1RSQUlOVCAqLworCQkJZm10ID0gIkFMVEVSIERPTUFJTiI7CisJCQl0eXBl ID0gInZhbGlkYXRlIGNvbnN0cmFpbnQiOworCisJCQkvKgorCQkJICogUHJvY2VzcyBzdWJ0eXBl PXNwZWNpZmljIG9wdGlvbnMuIFZhbGlkYXRpb24gYSBjb25zdHJhaW50CisJCQkgKiByZXF1aXJl cyBpdHMgbmFtZS4KKwkJCSAqLworCQkJYWx0ZXJEb20gPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEs ICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgdHlwZSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChh bHRlckRvbSwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9y bS0+dHlwbmFtZSkpKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRG9tLCAiVkFMSURB VEUgQ09OU1RSQUlOVCAle2NvbnN0cmFpbnRfbmFtZX1zIiwgbm9kZS0+bmFtZSk7CisKKwkJCWJy ZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgc3VidHlwZSAlYyIsIG5v ZGUtPnN1YnR5cGUpOworCX0KKworCS8qIGRvbmUgKi8KKwlSZWxlYXNlU3lzQ2FjaGUoZG9tVHVw KTsKKworCXJldHVybiBhbHRlckRvbTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVTZXFT dG10LgorICoKKyAqIEdpdmVuIGEgc2VxdWVuY2UgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQg Y3JlYXRlIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlv biBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVNlcVN0bXQo T2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2JqVHJlZQkqY3JlYXRlU2VxOwor CU9ialRyZWUJKnRtcG9iajsKKwlSZWxhdGlvbglyZWxhdGlvbjsKKwlGb3JtX3BnX3NlcXVlbmNl X2RhdGEgc2VxZGF0YTsKKwlMaXN0CSAgICplbGVtcyA9IE5JTDsKKwlGb3JtX3BnX3NlcXVlbmNl IHNlcWZvcm07CisJUmVsYXRpb24JcmVsOworCUhlYXBUdXBsZQlzZXF0dXBsZTsKKwlDcmVhdGVT ZXFTdG10ICpjcmVhdGVTZXFTdG10ID0gKENyZWF0ZVNlcVN0bXQgKikgcGFyc2V0cmVlOworCisJ LyoKKwkgKiBTZXF1ZW5jZSBmb3IgSURFTlRJVFkgQ09MVU1OIG91dHB1dCBzZXBhcmF0ZWx5KHZp YSBDUkVBVEUgVEFCTEUgb3IKKwkgKiBBTFRFUiBUQUJMRSk7IHJldHVybiBlbXB0eSBoZXJlLgor CSAqLworCWlmIChjcmVhdGVTZXFTdG10LT5mb3JfaWRlbnRpdHkpCisJCXJldHVybiBOVUxMOwor CisJc2VxZGF0YSA9IGdldF9zZXF1ZW5jZV92YWx1ZXMob2JqZWN0SWQpOworCisJcmVsYXRpb24g PSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCXJlbCA9IHRhYmxl X29wZW4oU2VxdWVuY2VSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlzZXF0dXBsZSA9 IFNlYXJjaFN5c0NhY2hlQ29weTEoU0VRUkVMSUQsCisJCQkJCQkJCSAgIE9iamVjdElkR2V0RGF0 dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoc2VxdHVwbGUpKQorCQllbG9n KEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2VxdWVuY2UgJXUiLAorCQkJIG9iamVj dElkKTsKKworCXNlcWZvcm0gPSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNUKHNlcXR1cGxl KTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSAle3BlcnNpc3Rl bmNlfXMgU0VRVUVOQ0UgJXtpZGVudGl0eX1ECisJICovCisJY3JlYXRlU2VxID0gbmV3X29ianRy ZWUoIkNSRUFURSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU2VxLCAiJXtwZXJz aXN0ZW5jZX1zIiwKKwkJCQkJCSBnZXRfcGVyc2lzdGVuY2Vfc3RyKHJlbGF0aW9uLT5yZF9yZWwt PnJlbHBlcnNpc3RlbmNlKSk7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUo cmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkgICBSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShyZWxhdGlvbikpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVNlcSwg IlNFUVVFTkNFICV7aWRlbnRpdHl9RCIsIHRtcG9iaik7CisKKwkvKiBEZWZpbml0aW9uIGVsZW1l bnRzICovCisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9DYWNoZShjcmVhdGVT ZXEsIHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1Nl cV9DeWNsZShjcmVhdGVTZXEsIHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVs ZW1zLCBkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShjcmVhdGVTZXEsIHNlcWZvcm0sIGZhbHNlKSk7 CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9NaW52YWx1ZShjcmVhdGVTZXEs IHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9N YXh2YWx1ZShjcmVhdGVTZXEsIHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVs ZW1zLCBkZXBhcnNlX1NlcV9TdGFydHdpdGgoY3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOwor CWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfUmVzdGFydChjcmVhdGVTZXEsIHNl cWRhdGEpKTsKKworCS8qIFdlIHB1cnBvc2VmdWxseSBkbyBub3QgZW1pdCBPV05FRCBCWSBoZXJl ICovCisJYXBwZW5kX2FycmF5X29iamVjdChjcmVhdGVTZXEsICIle2RlZmluaXRpb246IH1zIiwg ZWxlbXMpOworCisJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlyZWxhdGlv bl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBjcmVhdGVTZXE7 Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlU3RtdCAoQ1JFQVRFIFRBQkxFKS4KKyAqCisg KiBHaXZlbiBhIHRhYmxlIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJl dHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisg Ki8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlU3RtdChPaWQgb2JqZWN0SWQsIE5v ZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVTdG10ICpub2RlID0gKENyZWF0ZVN0bXQgKikgcGFy c2V0cmVlOworCVJlbGF0aW9uCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNj ZXNzU2hhcmVMb2NrKTsKKwlMaXN0CSAgICpkcGNvbnRleHQ7CisJT2JqVHJlZQkqY3JlYXRlU3Rt dDsKKwlPYmpUcmVlCSp0bXBvYmo7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlMaXN0Q2VsbCAg ICpjZWxsOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFICV7cGVy c2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgW09GCisJICog JXtvZl90eXBlfVQgfCBQQVJUSVRJT04gT0YgJXtwYXJlbnRfaWRlbnRpdHl9RF0gJXt0YWJsZV9l bGVtZW50c31zCisJICogJXtpbmhlcml0c31zICV7cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0 aG9kfXMgJXt3aXRoX2NsYXVzZX1zCisJICogJXtvbl9jb21taXR9cyAle3RhYmxlc3BhY2V9cwor CSAqLworCWNyZWF0ZVN0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7CisKKwlhcHBlbmRfc3Ry aW5nX29iamVjdChjcmVhdGVTdG10LCAiJXtwZXJzaXN0ZW5jZX1zIiwKKwkJCQkJCSBnZXRfcGVy c2lzdGVuY2Vfc3RyKHJlbGF0aW9uLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlKSk7CisKKwlhcHBl bmRfZm9ybWF0X3N0cmluZyhjcmVhdGVTdG10LCAiVEFCTEUiKTsKKworCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGNyZWF0ZVN0bXQsICIle2lmX25vdF9leGlzdHN9cyIsCisJCQkJCQkgbm9kZS0+aWZf bm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiKTsKKworCXRtcG9iaiA9IG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJ CSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSk7CisJYXBwZW5kX29iamVjdF9v YmplY3QoY3JlYXRlU3RtdCwgIiV7aWRlbnRpdHl9RCIsIHRtcG9iaik7CisKKwlkcGNvbnRleHQg PSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSwK KwkJCQkJCQkJCW9iamVjdElkKTsKKworCS8qCisJICogVHlwZWQgdGFibGVzIGFuZCBwYXJ0aXRp b25zIHVzZSBhIHNsaWdodGx5IGRpZmZlcmVudCBmb3JtYXQgc3RyaW5nOiB3ZQorCSAqIG11c3Qg bm90IHB1dCB0YWJsZV9lbGVtZW50cyB3aXRoIHBhcmVudHMgZGlyZWN0bHkgaW4gdGhlIGZtdCBz dHJpbmcsCisJICogYmVjYXVzZSBpZiB0aGVyZSBhcmUgbm8gb3B0aW9ucyB0aGUgcGFyZW5zIG11 c3Qgbm90IGJlIGVtaXR0ZWQ7IGFuZAorCSAqIGFsc28sIHR5cGVkIHRhYmxlcyBkbyBub3QgYWxs b3cgZm9yIGluaGVyaXRhbmNlLgorCSAqLworCWlmIChub2RlLT5vZlR5cGVuYW1lIHx8IG5vZGUt PnBhcnRib3VuZCkKKwl7CisJCUxpc3QgICAgICAgKnRhYmxlZWx0cyA9IE5JTDsKKworCQkvKgor CQkgKiBXZSBjYW4ndCBwdXQgdGFibGUgZWxlbWVudHMgZGlyZWN0bHkgaW4gdGhlIGZtdCBzdHJp bmcgYXMgYW4gYXJyYXkKKwkJICogc3Vycm91bmRlZCBieSBwYXJlbnMgaGVyZSwgYmVjYXVzZSBh biBlbXB0eSBjbGF1c2Ugd291bGQgY2F1c2UgYQorCQkgKiBzeW50YXggZXJyb3IuICBUaGVyZWZv cmUsIHdlIHVzZSBhbiBpbmRpcmVjdGlvbiBlbGVtZW50IGFuZCBzZXQKKwkJICogcHJlc2VudD1m YWxzZSB3aGVuIHRoZXJlIGFyZSBubyBlbGVtZW50cy4KKwkJICovCisJCWlmIChub2RlLT5vZlR5 cGVuYW1lKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfdHlwZShyZWxhdGlvbi0+ cmRfcmVsLT5yZWxvZnR5cGUsIC0xKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0 bXQsICJPRiAle29mX3R5cGV9VCIsIHRtcG9iaik7CisJCX0KKwkJZWxzZQorCQl7CisJCQlMaXN0 ICAgICAqcGFyZW50czsKKwkJCU9iakVsZW0gICplbGVtOworCisJCQlwYXJlbnRzID0gZGVwYXJz ZV9JbmhSZWxhdGlvbnMob2JqZWN0SWQpOworCQkJZWxlbSA9IChPYmpFbGVtICopIGxpbml0aWFs KHBhcmVudHMpOworCisJCQlBc3NlcnQobGlzdF9sZW5ndGgocGFyZW50cykgPT0gMSk7CisKKwkJ CWFwcGVuZF9mb3JtYXRfc3RyaW5nKGNyZWF0ZVN0bXQsICJQQVJUSVRJT04gT0YiKTsKKworCQkJ YXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7cGFyZW50X2lkZW50aXR5fUQiLAor CQkJCQkJCQkgZWxlbS0+dmFsdWUub2JqZWN0KTsKKwkJfQorCisJCXRhYmxlZWx0cyA9IGRlcGFy c2VfVGFibGVFbGVtZW50cyhyZWxhdGlvbiwgbm9kZS0+dGFibGVFbHRzLCBkcGNvbnRleHQsCisJ CQkJCQkJCQkJICB0cnVlLCAgICAgIC8qIHR5cGVkIHRhYmxlICovCisJCQkJCQkJCQkJICBmYWxz ZSk7ICAgIC8qIG5vdCBjb21wb3NpdGUgKi8KKwkJdGFibGVlbHRzID0gb2J0YWluQ29uc3RyYWlu dHModGFibGVlbHRzLCBvYmplY3RJZCwgSW52YWxpZE9pZCk7CisKKwkJaWYgKHRhYmxlZWx0cyA9 PSBOSUwpCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCIiKTsKKwkJCWFwcGVuZF9ib29s X29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCQl9CisJCWVsc2UKKwkJCXRtcG9i aiA9IG5ld19vYmp0cmVlX1ZBKCIoJXtlbGVtZW50czosIH1zKSIsIDEsCisJCQkJCQkJCSAiZWxl bWVudHMiLCBPYmpUeXBlQXJyYXksIHRhYmxlZWx0cyk7CisKKwkJYXBwZW5kX29iamVjdF9vYmpl Y3QoY3JlYXRlU3RtdCwgIiV7dGFibGVfZWxlbWVudHN9cyIsIHRtcG9iaik7CisJfQorCWVsc2UK Kwl7CisJCUxpc3QgICAgICAgKnRhYmxlZWx0cyA9IE5JTDsKKworCQkvKgorCQkgKiBUaGVyZSBp cyBubyBuZWVkIHRvIHByb2Nlc3MgTElLRSBjbGF1c2VzIHNlcGFyYXRlbHk7IHRoZXkgaGF2ZQor CQkgKiBhbHJlYWR5IGJlZW4gdHJhbnNmb3JtZWQgaW50byBjb2x1bW5zIGFuZCBjb25zdHJhaW50 cy4KKwkJICovCisKKwkJLyoKKwkJICogUHJvY2VzcyB0YWJsZSBlbGVtZW50czogY29sdW1uIGRl ZmluaXRpb25zIGFuZCBjb25zdHJhaW50cy4gIE9ubHkKKwkJICogdGhlIGNvbHVtbiBkZWZpbml0 aW9ucyBhcmUgb2J0YWluZWQgZnJvbSB0aGUgcGFyc2Ugbm9kZSBpdHNlbGYuICBUbworCQkgKiBn ZXQgY29uc3RyYWludHMgd2UgcmVseSBvbiBwZ19jb25zdHJhaW50LCBiZWNhdXNlIHRoZSBwYXJz ZSBub2RlCisJCSAqIG1pZ2h0IGJlIG1pc3Npbmcgc29tZSB0aGluZ3Mgc3VjaCBhcyB0aGUgbmFt ZSBvZiB0aGUgY29uc3RyYWludHMuCisJCSAqLworCQl0YWJsZWVsdHMgPSBkZXBhcnNlX1RhYmxl RWxlbWVudHMocmVsYXRpb24sIG5vZGUtPnRhYmxlRWx0cywgZHBjb250ZXh0LAorCQkJCQkJCQkJ CSAgZmFsc2UsICAgICAvKiBub3QgdHlwZWQgdGFibGUgKi8KKwkJCQkJCQkJCQkgIGZhbHNlKTsg ICAgLyogbm90IGNvbXBvc2l0ZSAqLworCQl0YWJsZWVsdHMgPSBvYnRhaW5Db25zdHJhaW50cyh0 YWJsZWVsdHMsIG9iamVjdElkLCBJbnZhbGlkT2lkKTsKKworCQlhcHBlbmRfYXJyYXlfb2JqZWN0 KGNyZWF0ZVN0bXQsICIoJXt0YWJsZV9lbGVtZW50czosIH1zKSIsIHRhYmxlZWx0cyk7CisKKwkJ LyoKKwkJICogQWRkIGluaGVyaXRhbmNlIHNwZWNpZmljYXRpb24uICBXZSBjYW5ub3Qgc2ltcGx5 IHNjYW4gdGhlIGxpc3Qgb2YKKwkJICogcGFyZW50cyBmcm9tIHRoZSBwYXJzZXIgbm9kZSwgYmVj YXVzZSB0aGF0IG1heSBsYWNrIHRoZSBhY3R1YWwKKwkJICogcXVhbGlmaWVkIG5hbWVzIG9mIHRo ZSBwYXJlbnQgcmVsYXRpb25zLiAgUmF0aGVyIHRoYW4gdHJ5aW5nIHRvCisJCSAqIHJlLXJlc29s dmUgdGhlbSBmcm9tIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgcGFyc2Ugbm9kZSwgaXQgc2VlbXMK KwkJICogbW9yZSBhY2N1cmF0ZSBhbmQgY29udmVuaWVudCB0byBncmFiIGl0IGZyb20gcGdfaW5o ZXJpdHMuCisJCSAqLworCQl0bXBvYmogPSBuZXdfb2JqdHJlZSgiSU5IRVJJVFMiKTsKKwkJaWYg KGxpc3RfbGVuZ3RoKG5vZGUtPmluaFJlbGF0aW9ucykgPiAwKQorCQkJYXBwZW5kX2FycmF5X29i amVjdCh0bXBvYmosICIoJXtwYXJlbnRzOiwgfUQpIiwgZGVwYXJzZV9JbmhSZWxhdGlvbnMob2Jq ZWN0SWQpKTsKKwkJZWxzZQorCQl7CisJCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wb2JqLCAiKCV7 cGFyZW50czosIH1EKSIpOworCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQi LCBmYWxzZSk7CisJCX0KKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7aW5o ZXJpdHN9cyIsIHRtcG9iaik7CisJfQorCisJdG1wb2JqID0gbmV3X29ianRyZWUoIlRBQkxFU1BB Q0UiKTsKKwlpZiAobm9kZS0+dGFibGVzcGFjZW5hbWUpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcG9iaiwgIiV7dGFibGVzcGFjZX1JIiwgbm9kZS0+dGFibGVzcGFjZW5hbWUpOworCWVsc2UK Kwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXBvYmosICIle3RhYmxlc3BhY2V9SSIpOworCQlh cHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisJYXBwZW5k X29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7dGFibGVzcGFjZX1zIiwgdG1wb2JqKTsKKwlh cHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtvbl9jb21taXR9cyIsCisJCQkJCQkg IGRlcGFyc2VfT25Db21taXRDbGF1c2Uobm9kZS0+b25jb21taXQpKTsKKworCS8qIEZPUiBWQUxV RVMgY2xhdXNlICovCisJaWYgKG5vZGUtPnBhcnRib3VuZCkKKwl7CisJCS8qCisJCSAqIEdldCBw Z19jbGFzcy5yZWxwYXJ0Ym91bmQuIFdlIGNhbm5vdCB1c2UgcGFydGJvdW5kIGluIHRoZQorCQkg KiBwYXJzZXRyZWUgZGlyZWN0bHkgYXMgaXQncyB0aGUgb3JpZ2luYWwgcGFydGJvdW5kIGV4cHJl c3Npb24KKwkJICogd2hpY2ggaGF2ZW4ndCBiZWVuIHRyYW5zZm9ybWVkLgorCQkgKi8KKwkJYXBw ZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU3RtdCwgIiV7cGFydGl0aW9uX2JvdW5kfXMiLAorCQkJ CQkJCSBSZWxhdGlvbkdldFBhcnRpdGlvbkJvdW5kKG9iamVjdElkKSk7CisJfQorCisJLyogUEFS VElUSU9OIEJZIGNsYXVzZSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJQQVJUSVRJT04gQlki KTsKKwlpZiAocmVsYXRpb24tPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVE X1RBQkxFKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2RlZmluaXRpb259cyIs IHBnX2dldF9wYXJ0a2V5ZGVmX3NpbXBsZShvYmplY3RJZCkpOworCWVsc2UKKwl7CisJCWFwcGVu ZF9udWxsX29iamVjdCh0bXBvYmosICIle2RlZmluaXRpb259cyIpOworCQlhcHBlbmRfYm9vbF9v YmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmpl Y3QoY3JlYXRlU3RtdCwgIiV7cGFydGl0aW9uX2J5fXMiLCB0bXBvYmopOworCisJLyogVVNJTkcg Y2xhdXNlICovCisJdG1wb2JqID0gbmV3X29ianRyZWUoIlVTSU5HIik7CisJaWYgKG5vZGUtPmFj Y2Vzc01ldGhvZCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXthY2Nlc3NfbWV0 aG9kfUkiLCBub2RlLT5hY2Nlc3NNZXRob2QpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29i amVjdCh0bXBvYmosICIle2FjY2Vzc19tZXRob2R9SSIpOworCQlhcHBlbmRfYm9vbF9vYmplY3Qo dG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3Jl YXRlU3RtdCwgIiV7YWNjZXNzX21ldGhvZH1zIiwgdG1wb2JqKTsKKworCS8qIFdJVEggY2xhdXNl ICovCisJdG1wb2JqID0gbmV3X29ianRyZWUoIldJVEgiKTsKKworCWZvcmVhY2goY2VsbCwgbm9k ZS0+b3B0aW9ucykKKwl7CisJCU9ialRyZWUgICAgKnRtcG9iajI7CisJCURlZkVsZW0gKm9wdCA9 IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKworCQl0bXBvYmoyID0gZGVwYXJzZV9EZWZFbGVt KG9wdCwgZmFsc2UpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0 bXBvYmoyKSk7CisJfQorCisJaWYgKGxpc3QpCisJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2Jq LCAiKCV7d2l0aDosIH1zKSIsIGxpc3QpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRt cG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVT dG10LCAiJXt3aXRoX2NsYXVzZX1zIiwgdG1wb2JqKTsKKworCXJlbGF0aW9uX2Nsb3NlKHJlbGF0 aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIGNyZWF0ZVN0bXQ7Cit9CisKKy8qCisg KiBEZXBhcnNlIGEgRGVmaW5lU3RtdC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9E ZWZpbmVTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlLCBPYmplY3RBZGRyZXNzIHNl Y29uZGFyeU9iaikKK3sKKwlEZWZpbmVTdG10ICpkZWZpbmUgPSAoRGVmaW5lU3RtdCAqKSBwYXJz ZXRyZWU7CisJT2JqVHJlZQkgICAqZGVmU3RtdCA9IE5VTEw7CisKKwlzd2l0Y2ggKGRlZmluZS0+ a2luZCkKKwl7CisJCWNhc2UgT0JKRUNUX09QRVJBVE9SOgorCQkJZGVmU3RtdCA9IGRlcGFyc2Vf RGVmaW5lU3RtdF9PcGVyYXRvcihvYmplY3RJZCwgZGVmaW5lKTsKKwkJCWJyZWFrOworCisJCWNh c2UgT0JKRUNUX1RZUEU6CisJCQlkZWZTdG10ID0gZGVwYXJzZV9EZWZpbmVTdG10X1R5cGUob2Jq ZWN0SWQsIGRlZmluZSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwg InVuc3VwcG9ydGVkIG9iamVjdCBraW5kIik7CisJfQorCisJcmV0dXJuIGRlZlN0bXQ7Cit9CisK Ky8qCisgKiBEZXBhcnNlIGEgRGVmaW5lU3RtdCAoQ1JFQVRFIE9QRVJBVE9SKQorICoKKyAqIEdp dmVuIGEgdHJpZ2dlciBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1 cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfT3BlcmF0b3IoT2lkIG9iamVj dElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxlICAgb3ByVHVwOworCU9ialRy ZWUJICAgKnN0bXQ7CisJT2JqVHJlZQkgICAqdG1wb2JqOworCUxpc3QJICAgKmxpc3QgPSBOSUw7 CisJRm9ybV9wZ19vcGVyYXRvciBvcHJGb3JtOworCisJb3ByVHVwID0gU2VhcmNoU3lzQ2FjaGUx KE9QRVJPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlz VmFsaWQob3ByVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9w ZXJhdG9yIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCW9wckZvcm0gPSAoRm9ybV9wZ19vcGVy YXRvcikgR0VUU1RSVUNUKG9wclR1cCk7CisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEoIkNSRUFU RSBPUEVSQVRPUiAle2lkZW50aXR5fU8iLCAxLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3ByRm9ybS0+b3BybmFt ZXNwYWNlLAorCQkJCQkJCQkJCQkJICAgTmFtZVN0cihvcHJGb3JtLT5vcHJuYW1lKSkpOworCisJ LyogUFJPQ0VEVVJFICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlBST0NFRFVSRT0le3By b2NlZHVyZX1EIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInByb2NlZHVy ZSIsCisJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9w ckZvcm0tPm9wcmNvZGUpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXBvYmopKTsKKworCS8qIExFRlRBUkcgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgi TEVGVEFSRz0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibGVmdGFyZyIp OworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmxlZnQpKQorCQlhcHBlbmRfb2JqZWN0X29i amVjdCh0bXBvYmosICIle3R5cGV9VCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9w ckZvcm0tPm9wcmxlZnQsIC0xKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2Jq LCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKworCS8qIFJJR0hUQVJHICovCisJdG1wb2JqID0gbmV3X29ianRyZWVf VkEoIlJJR0hUQVJHPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJyaWdo dGFyZyIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcnJpZ2h0KSkKKwkJYXBwZW5kX29i amVjdF9vYmplY3QodG1wb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf dHlwZShvcHJGb3JtLT5vcHJyaWdodCwgLTEpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVj dCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19v YmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyogQ09NTVVUQVRPUiAqLworCXRtcG9iaiA9IG5l d19vYmp0cmVlX1ZBKCJDT01NVVRBVE9SPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJjb21tdXRhdG9yIik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3ByY29tKSkK KwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtvcGVyfUQiLAorCQkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJ CQkgb3ByRm9ybS0+b3ByY29tKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2Jq LCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKworCS8qIE5FR0FUT1IgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiTkVHQVRPUj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibmVnYXRv ciIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcm5lZ2F0ZSkpCisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHRtcG9iaiwgIiV7b3Blcn1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9w cm5lZ2F0ZSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQi LCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2Jq KSk7CisKKwkvKiBSRVNUUklDVCAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJSRVNUUklD VD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVzdHJpY3QiKTsKKwlp ZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJyZXN0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo dG1wb2JqLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3BycmVz dCkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxz ZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisK KwkvKiBKT0lOICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkpPSU49IiwgMSwKKwkJCQkJ CSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImpvaW4iKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJG b3JtLT5vcHJqb2luKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtwcm9jZWR1 cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3Byam9pbikpOworCWVsc2UKKwkJYXBw ZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkvKiBNRVJHRVMgKi8KKwl0 bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiTUVSR0VTIiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgIm1lcmdlcyIpOworCWlmICghb3ByRm9ybS0+b3ByY2FubWVyZ2UpCisJCWFw cGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyogSEFTSEVTICovCisJ dG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkhBU0hFUyIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJoYXNoZXMiKTsKKwlpZiAoIW9wckZvcm0tPm9wcmNhbmhhc2gpCisJCWFw cGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJYXBwZW5kX2FycmF5X29i amVjdChzdG10LCAiKCV7ZWxlbXM6LCB9cykiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZShv cHJUdXApOworCisJcmV0dXJuIHN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ1JFQVRFIFRZ UEUgc3RhdGVtZW50LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRf VHlwZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSkKK3sKKwlIZWFwVHVwbGUgICB0 eXBUdXA7CisJT2JqVHJlZQkgICAqc3RtdDsKKwlPYmpUcmVlCSAgICp0bXA7CisJTGlzdAkgICAq bGlzdDsKKwljaGFyCSAgICpzdHI7CisJRGF0dW0JCWRmbHQ7CisJYm9vbAkJaXNudWxsOworCUZv cm1fcGdfdHlwZSB0eXBGb3JtOworCisJdHlwVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQs IE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHlw VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgd2l0aCBP SUQgJXUiLCBvYmplY3RJZCk7CisJdHlwRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0 eXBUdXApOworCisJLyogU2hvcnRjdXQgcHJvY2Vzc2luZyBmb3Igc2hlbGwgdHlwZXMuICovCisJ aWYgKCF0eXBGb3JtLT50eXBpc2RlZmluZWQpCisJeworCQlzdG10ID0gbmV3X29ianRyZWVfVkEo IkNSRUFURSBUWVBFIiwgMCk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICIle2lkZW50 aXR5fUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHlwRm9ybS0+dHlwbmFt ZXNwYWNlLAorCQkJCQkJCQkJCQkJCSAgTmFtZVN0cih0eXBGb3JtLT50eXBuYW1lKSkpOworCQlh cHBlbmRfYm9vbF9vYmplY3Qoc3RtdCwgInByZXNlbnQiLCB0cnVlKTsKKwkJUmVsZWFzZVN5c0Nh Y2hlKHR5cFR1cCk7CisJCXJldHVybiBzdG10OworCX0KKworCXN0bXQgPSBuZXdfb2JqdHJlZV9W QSgiQ1JFQVRFIFRZUEUiLCAwKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiJXtpZGVu dGl0eX1EIiwKKwkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHlwRm9ybS0+dHlwbmFt ZXNwYWNlLAorCQkJCQkJCQkJCQkJCU5hbWVTdHIodHlwRm9ybS0+dHlwbmFtZSkpKTsKKwlhcHBl bmRfYm9vbF9vYmplY3Qoc3RtdCwgInByZXNlbnQiLCB0cnVlKTsKKworCS8qIEFkZCB0aGUgZGVm aW5pdGlvbiBjbGF1c2UgKi8KKwlsaXN0ID0gTklMOworCisJLyogSU5QVVQgKi8KKwl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiKElOUFVUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJpbnB1dCIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQi LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBpbnB1dCkpOworCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogT1VUUFVUICovCisJdG1wID0gbmV3 X29ianRyZWVfVkEoIk9VVFBVVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAib3V0cHV0Iik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIs CisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cG91dHB1dCkpOworCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogUkVDRUlWRSAqLworCXRtcCA9IG5l d19vYmp0cmVlX1ZBKCJSRUNFSVZFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJyZWNlaXZlIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwcmVjZWl2ZSkpCisJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJ CQkJIHR5cEZvcm0tPnR5cHJlY2VpdmUpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0 bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCisJLyogU0VORCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTRU5E PSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzZW5kIik7CisJaWYgKE9p ZElzVmFsaWQodHlwRm9ybS0+dHlwc2VuZCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwg IiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJv Y2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cHNlbmQpKTsKKwll bHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogVFlQTU9EX0lO ICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlRZUE1PRF9JTj0iLCAxLAorCQkJCQkJICJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAidHlwbW9kX2luIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9y bS0+dHlwbW9kaW4pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1E IiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBtb2RpbikpOworCWVsc2UKKwkJYXBwZW5k X2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBUWVBNT0RfT1VUICovCisJdG1wID0g bmV3X29ianRyZWVfVkEoIlRZUE1PRF9PVVQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgInR5cG1vZF9vdXQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBtb2Rv dXQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCQkJCSB0eXBGb3JtLT50eXBtb2RvdXQpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29i amVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogQU5BTFlaRSAqLworCXRtcCA9IG5ld19vYmp0cmVl X1ZBKCJBTkFMWVpFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJhbmFs eXplIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwYW5hbHl6ZSkpCisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZv cm0tPnR5cGFuYWx5emUpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVz ZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCisJLyogSU5URVJOQUxMRU5HVEggKi8KKwlpZiAodHlwRm9ybS0+dHlwbGVuID09IC0x KQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIklOVEVSTkFMTEVOR1RIPVZBUklBQkxFIiwg MCk7CisJfQorCWVsc2UKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJJTlRFUk5BTExFTkdU SD0le3R5cGxlbn1uIiwgMSwKKwkJCQkJCQkgInR5cGxlbiIsIE9ialR5cGVJbnRlZ2VyLCB0eXBG b3JtLT50eXBsZW4pOworCX0KKworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCisJLyogUEFTU0VEQllWQUxVRSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJQQVNTRURCWVZBTFVFIiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInBh c3NlZGJ5dmFsdWUiKTsKKwlpZiAoIXR5cEZvcm0tPnR5cGJ5dmFsKQorCQlhcHBlbmRfYm9vbF9v YmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEFMSUdOTUVOVCAqLworCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJBTElHTk1FTlQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywg ImFsaWdubWVudCIpOworCS8qIFhYWCBpdCdzIG9kZCB0byByZXByZXNlbnQgYWxpZ25tZW50IHdp dGggc2NoZW1hLXF1YWxpZmllZCB0eXBlIG5hbWVzICovCisJc3dpdGNoICh0eXBGb3JtLT50eXBh bGlnbikKKwl7CisJCWNhc2UgJ2QnOgorCQkJc3RyID0gInBnX2NhdGFsb2cuZmxvYXQ4IjsKKwkJ CWJyZWFrOworCQljYXNlICdpJzoKKwkJCXN0ciA9ICJwZ19jYXRhbG9nLmludDQiOworCQkJYnJl YWs7CisJCWNhc2UgJ3MnOgorCQkJc3RyID0gInBnX2NhdGFsb2cuaW50MiI7CisJCQlicmVhazsK KwkJY2FzZSAnYyc6CisJCQlzdHIgPSAicGdfY2F0YWxvZy5icGNoYXIiOworCQkJYnJlYWs7CisJ CWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBhbGlnbm1lbnQgJWMiLCB0eXBGb3Jt LT50eXBhbGlnbik7CisJfQorCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7YWxpZ259cyIs IHN0cik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisK Kwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1RPUkFHRT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAic3RvcmFnZSIpOworCXN3aXRjaCAodHlwRm9ybS0+dHlwc3RvcmFnZSkK Kwl7CisJCWNhc2UgJ3AnOgorCQkJc3RyID0gInBsYWluIjsKKwkJCWJyZWFrOworCQljYXNlICdl JzoKKwkJCXN0ciA9ICJleHRlcm5hbCI7CisJCQlicmVhazsKKwkJY2FzZSAneCc6CisJCQlzdHIg PSAiZXh0ZW5kZWQiOworCQkJYnJlYWs7CisJCWNhc2UgJ20nOgorCQkJc3RyID0gIm1haW4iOwor CQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBzdG9yYWdlIHNw ZWNpZmllciAlYyIsIHR5cEZvcm0tPnR5cHN0b3JhZ2UpOworCX0KKwlhcHBlbmRfc3RyaW5nX29i amVjdCh0bXAsICIle3N0b3JhZ2V9cyIsIHN0cik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3 X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBDQVRFR09SWSAqLworCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJDQVRFR09SWT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi Y2F0ZWdvcnkiKTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle2NhdGVnb3J5fXMiLAor CQkJCQkJIHBzcHJpbnRmKCIlYyIsIHR5cEZvcm0tPnR5cGNhdGVnb3J5KSk7CisJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBQUkVGRVJSRUQgKi8K Kwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUFJFRkVSUkVEPSIsIDEsCisJCQkJCQkgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJwcmVmZXJyZWQiKTsKKwlpZiAoIXR5cEZvcm0tPnR5cGlzcHJlZmVy cmVkKQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIERFRkFVTFQg Ki8KKwlkZmx0ID0gU3lzQ2FjaGVHZXRBdHRyKFRZUEVPSUQsIHR5cFR1cCwKKwkJCQkJCSAgIEFu dW1fcGdfdHlwZV90eXBkZWZhdWx0LAorCQkJCQkJICAgJmlzbnVsbCk7CisJdG1wID0gbmV3X29i anRyZWVfVkEoIkRFRkFVTFQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywg ImRlZmF1bHQiKTsKKwlpZiAoIWlzbnVsbCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAi JXtkZWZhdWx0fXMiLCBUZXh0RGF0dW1HZXRDU3RyaW5nKGRmbHQpKTsKKwllbHNlCisJCWFwcGVu ZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogRUxFTUVOVCAqLworCXRtcCA9IG5l d19vYmp0cmVlX1ZBKCJFTEVNRU5UPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJlbGVtZW50Iik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwZWxlbSkpCisJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgImVsZW0iLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf dHlwZSh0eXBGb3JtLT50eXBlbGVtLCAtMSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0 KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisKKwkvKiBERUxJTUlURVIgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiREVMSU1JVEVSPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJkZWxp bWl0ZXIiKTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle2RlbGltfUwiLAorCQkJCQkJ IHBzcHJpbnRmKCIlYyIsIHR5cEZvcm0tPnR5cGRlbGltKSk7CisJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBDT0xMQVRBQkxFICovCisJdG1wID0g bmV3X29ianRyZWVfVkEoIkNPTExBVEFCTEU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgImNvbGxhdGFibGUiKTsKKwlpZiAoIU9pZElzVmFsaWQodHlwRm9ybS0+dHlwY29s bGF0aW9uKSkKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwlhcHBlbmRf YXJyYXlfb2JqZWN0KHN0bXQsICIle2VsZW1zOiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lz Q2FjaGUodHlwVHVwKTsKKworCXJldHVybiBzdG10OworfQorCisvKgorICogLi4uIEFMVEVSIENP TFVNTiAuLi4gU0VUL1JFU0VUICguLi4pCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf UmVsU2V0T3B0aW9ucyhBbHRlclRhYmxlQ21kICpzdWJjbWQpCit7CisJTGlzdAkgICAqc2V0cyA9 IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCU9ialRyZWUJICAgKnJlbHNldDsKKwljaGFyCSAg ICpmbXQ7CisJYm9vbAkJaXNfcmVzZXQgPSBzdWJjbWQtPnN1YnR5cGUgPT0gQVRfUmVzZXRSZWxP cHRpb25zOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogUkVTRVR8U0VUICgl e29wdGlvbnM6LCB9cykKKwkgKi8KKwlpZiAoaXNfcmVzZXQpCisJCWZtdCA9ICJSRVNFVCAiOwor CWVsc2UKKwkJZm10ID0gIlNFVCAiOworCisJcmVsc2V0ID0gbmV3X29ianRyZWUoZm10KTsKKwor CWZvcmVhY2goY2VsbCwgKExpc3QgKikgc3ViY21kLT5kZWYpCisJeworCQlEZWZFbGVtCSAgICpl bGVtOworCQlPYmpUcmVlCSAgICpzZXQ7CisKKwkJZWxlbSA9IChEZWZFbGVtICopIGxmaXJzdChj ZWxsKTsKKwkJc2V0ID0gZGVwYXJzZV9EZWZFbGVtKGVsZW0sIGlzX3Jlc2V0KTsKKwkJc2V0cyA9 IGxhcHBlbmQoc2V0cywgbmV3X29iamVjdF9vYmplY3Qoc2V0KSk7CisJfQorCisJQXNzZXJ0KHNl dHMpOworCWFwcGVuZF9hcnJheV9vYmplY3QocmVsc2V0LCAiKCV7b3B0aW9uczosIH1zKSIsIHNl dHMpOworCisJcmV0dXJuIHJlbHNldDsKK30KKworCisKKworCisKKworCisKKworCisKKworCisK KworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKwor CisKKworCisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlVHJpZ1N0bXQgKENSRUFURSBUUklHR0VS KQorICoKKyAqIEdpdmVuIGEgdHJpZ2dlciBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVh dGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBj b21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVRyaWdTdG10KE9p ZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVRyaWdTdG10ICpub2RlID0g KENyZWF0ZVRyaWdTdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbglwZ190cmlnZ2VyOworCUhl YXBUdXBsZQl0cmlnVHVwOworCUZvcm1fcGdfdHJpZ2dlciB0cmlnRm9ybTsKKwlPYmpUcmVlCSAg ICp0cmlnZ2VyOworCU9ialRyZWUJICAgKnRtcG9iajsKKwlpbnQJCQl0Z25hcmdzOworCUxpc3QJ ICAgKmxpc3Q7CisJTGlzdAkgICAqZXZlbnRzOworCisJcGdfdHJpZ2dlciA9IHRhYmxlX29wZW4o VHJpZ2dlclJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwl0cmlnVHVwID0gZ2V0X2Nh dGFsb2dfb2JqZWN0X2J5X29pZChwZ190cmlnZ2VyLCBBbnVtX3BnX3RyaWdnZXJfb2lkLCBvYmpl Y3RJZCk7CisJdHJpZ0Zvcm0gPSAoRm9ybV9wZ190cmlnZ2VyKSBHRVRTVFJVQ1QodHJpZ1R1cCk7 CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgJXtjb25zdHJhaW50 fXMgVFJJR0dFUiAle25hbWV9SSAle3RpbWV9cyAle2V2ZW50czogT1IgfXMKKwkgKiBPTiAle3Jl bGF0aW9ufUQgJXtmcm9tX3RhYmxlfXMgJXtjb25zdHJhaW50X2F0dHJzOiB9cworCSAqIEZPUiBF QUNIICV7Zm9yX2VhY2h9cyAle3doZW59cyBFWEVDVVRFIFBST0NFRFVSRSAle2Z1bmN0aW9ufXMK KwkgKi8KKwl0cmlnZ2VyID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5kX3N0cmlu Z19vYmplY3QodHJpZ2dlciwgIiV7Y29uc3RyYWludH1zIiwKKwkJCQkJCSBub2RlLT5pc2NvbnN0 cmFpbnQgPyAiQ09OU1RSQUlOVCIgOiAiIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdCh0cmln Z2VyLCAiVFJJR0dFUiAle25hbWV9SSIsIG5vZGUtPnRyaWduYW1lKTsKKworCWlmIChub2RlLT50 aW1pbmcgPT0gVFJJR0dFUl9UWVBFX0JFRk9SRSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodHJp Z2dlciwgIiV7dGltZX1zIiwgIkJFRk9SRSIpOworCWVsc2UgaWYgKG5vZGUtPnRpbWluZyA9PSBU UklHR0VSX1RZUEVfQUZURVIpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRyaWdnZXIsICIle3Rp bWV9cyIsICJBRlRFUiIpOworCWVsc2UgaWYgKG5vZGUtPnRpbWluZyA9PSBUUklHR0VSX1RZUEVf SU5TVEVBRCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodHJpZ2dlciwgIiV7dGltZX1zIiwgIklO U1RFQUQgT0YiKTsKKwllbHNlCisJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgdHJpZ2dlciB0 aW1pbmcgdHlwZSAlZCIsIG5vZGUtPnRpbWluZyk7CisKKwkvKgorCSAqIERlY29kZSB0aGUgZXZl bnRzIHRoYXQgdGhlIHRyaWdnZXIgZmlyZXMgZm9yLiAgVGhlIG91dHB1dCBpcyBhIGxpc3Q7CisJ ICogaW4gbW9zdCBjYXNlcyBpdCB3aWxsIGp1c3QgYmUgYSBzdHJpbmcgd2l0aCB0aGUgZXZlbnQg bmFtZSwgYnV0IHdoZW4KKwkgKiB0aGVyZSdzIGFuIFVQREFURSB3aXRoIGEgbGlzdCBvZiBjb2x1 bW5zLCB3ZSByZXR1cm4gYSBKU09OIG9iamVjdC4KKwkgKi8KKwlldmVudHMgPSBOSUw7CisJaWYg KG5vZGUtPmV2ZW50cyAmIFRSSUdHRVJfVFlQRV9JTlNFUlQpCisJCWV2ZW50cyA9IGxhcHBlbmQo ZXZlbnRzLCBuZXdfc3RyaW5nX29iamVjdCgiSU5TRVJUIikpOworCWlmIChub2RlLT5ldmVudHMg JiBUUklHR0VSX1RZUEVfREVMRVRFKQorCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0 cmluZ19vYmplY3QoIkRFTEVURSIpKTsKKwlpZiAobm9kZS0+ZXZlbnRzICYgVFJJR0dFUl9UWVBF X1RSVU5DQVRFKQorCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3Qo IlRSVU5DQVRFIikpOworCWlmIChub2RlLT5ldmVudHMgJiBUUklHR0VSX1RZUEVfVVBEQVRFKQor CXsKKwkJaWYgKG5vZGUtPmNvbHVtbnMgPT0gTklMKQorCQl7CisJCQlldmVudHMgPSBsYXBwZW5k KGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIlVQREFURSIpKTsKKwkJfQorCQllbHNlCisJCXsK KwkJCU9ialRyZWUJICAgKnVwZGF0ZTsKKwkJCUxpc3RDZWxsICAgKmNlbGw7CisJCQlMaXN0CSAg ICpjb2xzID0gTklMOworCisJCQkvKgorCQkJICogQ3VycmVudGx5IG9ubHkgVVBEQVRFIE9GIGNh biBiZSBvYmplY3RzIGluIHRoZSBvdXRwdXQgSlNPTiwgYnV0CisJCQkgKiB3ZSBhZGQgYSAia2lu ZCIgZWxlbWVudCBzbyB0aGF0IHVzZXIgY29kZSBjYW4gZGlzdGluZ3Vpc2gKKwkJCSAqIHBvc3Np YmxlIGZ1dHVyZSBuZXcgZXZlbnQgdHlwZXMuCisJCQkgKi8KKwkJCXVwZGF0ZSA9IG5ld19vYmp0 cmVlX1ZBKCJVUERBVEUgT0YiLCAxLAorCQkJCQkJCQkJImtpbmQiLCBPYmpUeXBlU3RyaW5nLCAi dXBkYXRlX29mIik7CisKKwkJCWZvcmVhY2goY2VsbCwgbm9kZS0+Y29sdW1ucykKKwkJCXsKKwkJ CQljaGFyICAgKmNvbG5hbWUgPSBzdHJWYWwobGZpcnN0KGNlbGwpKTsKKworCQkJCWNvbHMgPSBs YXBwZW5kKGNvbHMsIG5ld19zdHJpbmdfb2JqZWN0KGNvbG5hbWUpKTsKKwkJCX0KKworCQkJYXBw ZW5kX2FycmF5X29iamVjdCh1cGRhdGUsICIle2NvbHVtbnM6LCB9SSIsIGNvbHMpOworCisJCQll dmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X29iamVjdF9vYmplY3QodXBkYXRlKSk7CisJCX0K Kwl9CisJYXBwZW5kX2FycmF5X29iamVjdCh0cmlnZ2VyLCAiJXtldmVudHM6IE9SIH1zIiwgZXZl bnRzKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJl bGF0aW9uSWQsCisJCQkJCQkJCQkgIHRyaWdGb3JtLT50Z3JlbGlkKTsKKwlhcHBlbmRfb2JqZWN0 X29iamVjdCh0cmlnZ2VyLCAiT04gJXtyZWxhdGlvbn1EIiwgdG1wb2JqKTsKKworCXRtcG9iaiA9 IG5ld19vYmp0cmVlX1ZBKCJGUk9NIiwgMCk7CisJaWYgKHRyaWdGb3JtLT50Z2NvbnN0cnJlbGlk KQorCXsKKwkJT2JqVHJlZQkgICAqcmVsOworCisJCXJlbCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJICB0cmlnRm9ybS0+dGdjb25z dHJyZWxpZCk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cmVsYXRpb259RCIs IHJlbCk7CisJfQorCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQi LCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QodHJpZ2dlciwgIiV7ZnJvbV90YWJsZX1z IiwgdG1wb2JqKTsKKworCWxpc3QgPSBOSUw7CisJaWYgKG5vZGUtPmRlZmVycmFibGUpCisJCWxp c3QgPSBsYXBwZW5kKGxpc3QsCisJCQkJCSAgIG5ld19zdHJpbmdfb2JqZWN0KCJERUZFUlJBQkxF IikpOworCWlmIChub2RlLT5pbml0ZGVmZXJyZWQpCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsCisJ CQkJCSAgIG5ld19zdHJpbmdfb2JqZWN0KCJJTklUSUFMTFkgREVGRVJSRUQiKSk7CisJYXBwZW5k X2FycmF5X29iamVjdCh0cmlnZ2VyLCAiJXtjb25zdHJhaW50X2F0dHJzOiB9cyIsIGxpc3QpOwor CisJYXBwZW5kX3N0cmluZ19vYmplY3QodHJpZ2dlciwgIkZPUiBFQUNIICV7Zm9yX2VhY2h9cyIs CisJCQkJCQkgbm9kZS0+cm93ID8gIlJPVyIgOiAiU1RBVEVNRU5UIik7CisKKwl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiV0hFTiIsIDApOworCWlmIChub2RlLT53aGVuQ2xhdXNlKQorCXsKKwkJ Tm9kZQkgICAqd2hlbkNsYXVzZTsKKwkJRGF0dW0JCXZhbHVlOworCQlib29sCQlpc251bGw7CisK KwkJdmFsdWUgPSBmYXN0Z2V0YXR0cih0cmlnVHVwLCBBbnVtX3BnX3RyaWdnZXJfdGdxdWFsLAor CQkJCQkJCVJlbGF0aW9uR2V0RGVzY3IocGdfdHJpZ2dlciksICZpc251bGwpOworCQlpZiAoaXNu dWxsKQorCQkJZWxvZyhFUlJPUiwgImJvZ3VzIE5VTEwgdGdxdWFsIik7CisKKwkJd2hlbkNsYXVz ZSA9IHN0cmluZ1RvTm9kZShUZXh0RGF0dW1HZXRDU3RyaW5nKHZhbHVlKSk7CisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcG9iaiwgIigle2NsYXVzZX1zKSIsCisJCQkJCQkJIHBnX2dldF90cmln Z2VyX3doZW5jbGF1c2UodHJpZ0Zvcm0sCisJCQkJCQkJCQkJCQkJICAgd2hlbkNsYXVzZSwKKwkJ CQkJCQkJCQkJCQkgICBmYWxzZSkpOworCX0KKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0 bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRyaWdnZXIs ICIle3doZW59cyIsIHRtcG9iaik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiJXtmdW5j bmFtZX1EIiwgMSwKKwkJCQkJCSAiZnVuY25hbWUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJ CQkJCSB0cmlnRm9ybS0+dGdmb2lkKSk7CisJbGlzdCA9IE5JTDsKKwl0Z25hcmdzID0gdHJpZ0Zv cm0tPnRnbmFyZ3M7CisJaWYgKHRnbmFyZ3MgPiAwKQorCXsKKwkJYnl0ZWEgICp0Z2FyZ3M7CisJ CWNoYXIgICAqYXJnc3RyOworCQlib29sCWlzbnVsbDsKKwkJaW50CQlmaW5keDsKKwkJaW50CQls ZW50Z2FyZ3M7CisJCWNoYXIgICAqcDsKKworCQl0Z2FyZ3MgPSBEYXR1bUdldEJ5dGVhUChmYXN0 Z2V0YXR0cih0cmlnVHVwLAorCQkJCQkJCQkJCQlBbnVtX3BnX3RyaWdnZXJfdGdhcmdzLAorCQkJ CQkJCQkJCQlSZWxhdGlvbkdldERlc2NyKHBnX3RyaWdnZXIpLAorCQkJCQkJCQkJCQkmaXNudWxs KSk7CisJCWlmIChpc251bGwpCisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBOVUxMIHRnYXJncyIp OworCQlhcmdzdHIgPSAoY2hhciAqKSBWQVJEQVRBKHRnYXJncyk7CisJCWxlbnRnYXJncyA9IFZB UlNJWkVfQU5ZX0VYSERSKHRnYXJncyk7CisKKwkJcCA9IGFyZ3N0cjsKKwkJZm9yIChmaW5keCA9 IDA7IGZpbmR4IDwgdGduYXJnczsgZmluZHgrKykKKwkJeworCQkJc2l6ZV90CXRsZW47CisKKwkJ CS8qIFZlcmlmeSB0aGF0IHRoZSBhcmd1bWVudCBlbmNvZGluZyBpcyBjb3JyZWN0ICovCisJCQl0 bGVuID0gc3RybGVuKHApOworCQkJaWYgKHAgKyB0bGVuID49IGFyZ3N0ciArIGxlbnRnYXJncykK KwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFN RVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJpbnZhbGlkIGFyZ3VtZW50IHN0cmluZyAoJXMp IGZvciB0cmlnZ2VyIFwiJXNcIiIsCisJCQkJCQkJCWFyZ3N0ciwgTmFtZVN0cih0cmlnRm9ybS0+ dGduYW1lKSkpKTsKKworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3Qo cCkpOworCisJCQlwICs9IHRsZW4gKyAxOworCQl9CisJfQorCisJYXBwZW5kX2Zvcm1hdF9zdHJp bmcodG1wb2JqLCAiKCIpOworCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiJXthcmdzOiwg fUwiLCBsaXN0KTsJCS8qIG1pZ2h0IGJlIE5JTCAqLworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRt cG9iaiwgIikiKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRyaWdnZXIsICJFWEVDVVRFIFBS T0NFRFVSRSAle2Z1bmN0aW9ufXMiLCB0bXBvYmopOworCisJdGFibGVfY2xvc2UocGdfdHJpZ2dl ciwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiB0cmlnZ2VyOworfQorCisvKgorICogRGVw YXJzZSBEZWZFbGVtcywgYXMgdXNlZCBlLmcuIGJ5IEFMVEVSIENPTFVNTiAuLi4gU0VULCBpbnRv IGEgbGlzdCBvZiBTRVQKKyAqICguLi4pICBvciBSRVNFVCAoLi4uKSBjb250ZW50cy4KKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZFbGVtKERlZkVsZW0gKmVsZW0sIGJvb2wgaXNf cmVzZXQpCit7CisJT2JqVHJlZQkgICAqc2V0OworCU9ialRyZWUJICAgKm9wdG5hbWU7CisKKwlz ZXQgPSBuZXdfb2JqdHJlZSgiIik7CisJb3B0bmFtZSA9IG5ld19vYmp0cmVlKCIiKTsKKworCWlm IChlbGVtLT5kZWZuYW1lc3BhY2UgIT0gTlVMTCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qob3B0 bmFtZSwgIiV7c2NoZW1hfUkuIiwgZWxlbS0+ZGVmbmFtZXNwYWNlKTsKKworCWFwcGVuZF9zdHJp bmdfb2JqZWN0KG9wdG5hbWUsICIle2xhYmVsfUkiLCBlbGVtLT5kZWZuYW1lKTsKKworCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHNldCwgIiV7bGFiZWx9cyIsIG9wdG5hbWUpOworCisJaWYgKCFpc19y ZXNldCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qoc2V0LCAiID0gJXt2YWx1ZX1MIiwKKwkJCQkJ CQkgZWxlbS0+YXJnID8gZGVmR2V0U3RyaW5nKGVsZW0pIDoKKwkJCQkJCQkgZGVmR2V0Qm9vbGVh bihlbGVtKSA/ICJUUlVFIiA6ICJGQUxTRSIpOworCisJcmV0dXJuIHNldDsKK30KKworLyoKKyAq IEhhbmRsZSBkZXBhcnNpbmcgb2YgRFJPUCBjb21tYW5kcy4KKyAqLworY2hhciAqCitkZXBhcnNl X2Ryb3BfY29tbWFuZChjb25zdCBjaGFyICpvYmppZGVudGl0eSwgY29uc3QgY2hhciAqb2JqZWN0 dHlwZSwKKwkJCQkJIERyb3BCZWhhdmlvciBiZWhhdmlvcikKK3sKKwlTdHJpbmdJbmZvRGF0YSAg c3RyOworCWNoYXIJCSAgICpjb21tYW5kOworCWNoYXIJCSAgICppZGVudGl0eSA9IChjaGFyICop IG9iamlkZW50aXR5OworCWNoYXIJCSAgICpmbXQ7CisJT2JqVHJlZQkJKnN0bXQsICpzdG10MjsK KwlKc29uYgkJICAqanNvbmI7CisKKwlpbml0U3RyaW5nSW5mbygmc3RyKTsKKworCWZtdCA9IHBz cHJpbnRmKCJEUk9QICVzIElGIEVYSVNUUyAlJXtvYmppZGVudGl0eX1zIiwgb2JqZWN0dHlwZSk7 CisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEoZm10LCAxLCAib2JqaWRlbnRpdHkiLCBPYmpUeXBl U3RyaW5nLCBpZGVudGl0eSk7CisJc3RtdDIgPSBuZXdfb2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDEs CisJCQkJCQkgICAicHJlc2VudCIsIE9ialR5cGVCb29sLCBiZWhhdmlvciA9PSBEUk9QX0NBU0NB REUpOworCisJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIiV7Y2FzY2FkZX1zIiwgc3RtdDIp OworCisJanNvbmIgPSBvYmp0cmVlX3RvX2pzb25iKHN0bXQpOworCWNvbW1hbmQgPSBKc29uYlRv Q1N0cmluZygmc3RyLCAmanNvbmItPnJvb3QsIEpTT05CX0VTVElNQVRFRF9MRU4pOworCisJcmV0 dXJuIGNvbW1hbmQ7Cit9CisKKy8qCisgKiBIYW5kbGUgZGVwYXJzaW5nIHNldHRpbmcgb2YgRnVu Y3Rpb24KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9GdW5jdGlvblNldChWYXJpYWJs ZVNldEtpbmQga2luZCwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpCit7CisJT2JqVHJlZQkgICAq b2JqOworCisJaWYgKGtpbmQgPT0gVkFSX1JFU0VUX0FMTCkKKwl7CisJCW9iaiA9IG5ld19vYmp0 cmVlKCJSRVNFVCBBTEwiKTsKKwl9CisJZWxzZSBpZiAodmFsdWUgIT0gTlVMTCkKKwl7CisJCW9i aiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgJXtzZXRfbmFtZX1JIiwgMSwKKwkJCQkJCSAgICJzZXRf bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5hbWUpOworCisJCS8qCisJCSAqIFNvbWUgR1VDIHZhcmlh YmxlIG5hbWVzIGFyZSAnTElTVCcgdHlwZSBhbmQgaGVuY2UgbXVzdCBub3QgYmUKKwkJICogcXVv dGVkLgorCQkgKi8KKwkJaWYgKEdldENvbmZpZ09wdGlvbkZsYWdzKG5hbWUsIHRydWUpICYgR1VD X0xJU1RfUVVPVEUpCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChvYmosICJUTyAle3NldF92YWx1 ZX1zIiwgdmFsdWUpOworCQllbHNlCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChvYmosICJUTyAl e3NldF92YWx1ZX1MIiwgdmFsdWUpOworCX0KKwllbHNlCisJeworCQlvYmogPSBuZXdfb2JqdHJl ZSgiUkVTRVQiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qob2JqLCAiJXtzZXRfbmFtZX1JIiwg bmFtZSk7CisJfQorCisJcmV0dXJuIG9iajsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gSW5kZXhT dG10LgorICoKKyAqIEdpdmVuIGFuIGluZGV4IE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNy ZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9u IGNvbW1hbmQuCisgKgorICogSWYgdGhlIGluZGV4IGNvcnJlc3BvbmRzIHRvIGEgY29uc3RyYWlu dCwgTlVMTCBpcyByZXR1cm5lZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9JbmRl eFN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJSW5kZXhTdG10ICAqbm9k ZSA9IChJbmRleFN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAgKmluZGV4U3RtdDsKKwlP YmpUcmVlCSAgICp0bXBvYmo7CisJUmVsYXRpb24JaWR4cmVsOworCVJlbGF0aW9uCWhlYXByZWw7 CisJY2hhcgkgICAqaW5kZXhfYW07CisJY2hhcgkgICAqZGVmaW5pdGlvbjsKKwljaGFyCSAgICpy ZWxvcHRpb25zOworCWNoYXIJICAgKnRhYmxlc3BhY2U7CisJY2hhcgkgICAqd2hlcmVDbGF1c2U7 CisKKwlpZiAobm9kZS0+cHJpbWFyeSB8fCBub2RlLT5pc2NvbnN0cmFpbnQpCisJeworCQkvKgor CQkgKiBJbmRleGVzIGZvciBQUklNQVJZIEtFWSBhbmQgb3RoZXIgY29uc3RyYWludHMgYXJlIG91 dHB1dAorCQkgKiBzZXBhcmF0ZWx5OyByZXR1cm4gZW1wdHkgaGVyZS4KKwkJICovCisJCXJldHVy biBOVUxMOworCX0KKworCWlkeHJlbCA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1No YXJlTG9jayk7CisJaGVhcHJlbCA9IHJlbGF0aW9uX29wZW4oaWR4cmVsLT5yZF9pbmRleC0+aW5k cmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlwZ19nZXRfaW5kZXhkZWZfZGV0YWlsZWQob2Jq ZWN0SWQsCisJCQkJCQkJICZpbmRleF9hbSwgJmRlZmluaXRpb24sICZyZWxvcHRpb25zLAorCQkJ CQkJCSAmdGFibGVzcGFjZSwgJndoZXJlQ2xhdXNlKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50 YXgKKwkgKgorCSAqIENSRUFURSAle3VuaXF1ZX1zIElOREVYICV7Y29uY3VycmVudGx5fXMgJXtp Zl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgT04KKwkgKiAle3RhYmxlfUQgVVNJTkcgJXtpbmRleF9h bX1zICgle2RlZmluaXRpb259cykgJXt3aXRofXMgJXt0YWJsZXNwYWNlfXMKKwkgKiAle3doZXJl X2NsYXVzZX1zCisJICovCisJaW5kZXhTdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJ YXBwZW5kX3N0cmluZ19vYmplY3QoaW5kZXhTdG10LCAiJXt1bmlxdWV9cyIsCisJCQkJCQkgbm9k ZS0+dW5pcXVlID8gIlVOSVFVRSIgOiAiIik7CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyhpbmRl eFN0bXQsICJJTkRFWCIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoaW5kZXhTdG10LCAiJXtj b25jdXJyZW50bHl9cyIsCisJCQkJCQkgbm9kZS0+Y29uY3VycmVudCA/ICJDT05DVVJSRU5UTFki IDogIiIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoaW5kZXhTdG10LCAiJXtpZl9ub3RfZXhp c3RzfXMiLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAi Iik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChpbmRleFN0bXQsICIle25hbWV9SSIsCisJCQkJ CQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaWR4cmVsKSk7CisKKwlhcHBlbmRfb2JqZWN0X29i amVjdChpbmRleFN0bXQsICJPTiAle3RhYmxlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZShoZWFwcmVsLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCSBSZWxhdGlvbkdl dFJlbGF0aW9uTmFtZShoZWFwcmVsKSkpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoaW5kZXhT dG10LCAiVVNJTkcgJXtpbmRleF9hbX1zIiwgaW5kZXhfYW0pOworCisJYXBwZW5kX3N0cmluZ19v YmplY3QoaW5kZXhTdG10LCAiKCV7ZGVmaW5pdGlvbn1zKSIsIGRlZmluaXRpb24pOworCisJLyog cmVsb3B0aW9ucyAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJXSVRIIik7CisJaWYgKHJlbG9w dGlvbnMpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIigle29wdHN9cykiLCByZWxv cHRpb25zKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50Iiwg ZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGluZGV4U3RtdCwgIiV7d2l0aH1zIiwgdG1w b2JqKTsKKworCS8qIHRhYmxlc3BhY2UgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiVEFCTEVT UEFDRSIpOworCWlmICh0YWJsZXNwYWNlKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmos ICIle3RhYmxlc3BhY2V9cyIsIHRhYmxlc3BhY2UpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2Jq ZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoaW5k ZXhTdG10LCAiJXt0YWJsZXNwYWNlfXMiLCB0bXBvYmopOworCisJLyogV0hFUkUgY2xhdXNlICov CisJdG1wb2JqID0gbmV3X29ianRyZWUoIldIRVJFIik7CisJaWYgKHdoZXJlQ2xhdXNlKQorCQlh cHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3doZXJlfXMiLCB3aGVyZUNsYXVzZSk7CisJ ZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlh cHBlbmRfb2JqZWN0X29iamVjdChpbmRleFN0bXQsICIle3doZXJlX2NsYXVzZX1zIiwgdG1wb2Jq KTsKKworCXRhYmxlX2Nsb3NlKGlkeHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwl0YWJsZV9jbG9z ZShoZWFwcmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIGluZGV4U3RtdDsKK30KKwor LyoKKyAqIERlcGFyc2UgdGhlIElOSEVSSVRTIHJlbGF0aW9ucy4KKyAqCisgKiBHaXZlbiBhIHRh YmxlIE9JRCwgcmV0dXJuIGEgc2NoZW1hIHF1YWxpZmllZCB0YWJsZSBsaXN0IHJlcHJlc2VudGlu ZworICogdGhlIHBhcmVudCB0YWJsZXMuCisgKi8KK3N0YXRpYyBMaXN0ICoKK2RlcGFyc2VfSW5o UmVsYXRpb25zKE9pZCBvYmplY3RJZCkKK3sKKwlMaXN0CSAgICpwYXJlbnRzID0gTklMOworCVJl bGF0aW9uCWluaFJlbDsKKwlTeXNTY2FuRGVzYyBzY2FuOworCVNjYW5LZXlEYXRhIGtleTsKKwlI ZWFwVHVwbGUJdHVwbGU7CisKKwlpbmhSZWwgPSB0YWJsZV9vcGVuKEluaGVyaXRzUmVsYXRpb25J ZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlTY2FuS2V5SW5pdCgma2V5LAorCQkJCUFudW1fcGdf aW5oZXJpdHNfaW5ocmVsaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAor CQkJCU9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKworCXNjYW4gPSBzeXN0YWJsZV9iZWdp bnNjYW4oaW5oUmVsLCBJbmhlcml0c1JlbGlkU2Vxbm9JbmRleElkLAorCQkJCQkJCSAgdHJ1ZSwg TlVMTCwgMSwgJmtleSk7CisKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSA9IHN5c3Rh YmxlX2dldG5leHQoc2NhbikpKQorCXsKKwkJT2JqVHJlZQkqcGFyZW50OworCQlGb3JtX3BnX2lu aGVyaXRzIGZvcm1JbmggPSAoRm9ybV9wZ19pbmhlcml0cykgR0VUU1RSVUNUKHR1cGxlKTsKKwor CQlwYXJlbnQgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklk LAorCQkJCQkJCQkJCQkgZm9ybUluaC0+aW5ocGFyZW50KTsKKwkJcGFyZW50cyA9IGxhcHBlbmQo cGFyZW50cywgbmV3X29iamVjdF9vYmplY3QocGFyZW50KSk7CisJfQorCisJc3lzdGFibGVfZW5k c2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShpbmhSZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJ cmV0dXJuIHBhcmVudHM7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBPTiBDT01NTUlUIC4uLiBj bGF1c2UgZm9yIENSRUFURSAuLi4gVEVNUE9SQVJZIC4uLgorICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX09uQ29tbWl0Q2xhdXNlKE9uQ29tbWl0QWN0aW9uIG9wdGlvbikKK3sKKwlPYmpU cmVlCSAgICpvbmNvbW1pdDsKKworCW9uY29tbWl0ID0gbmV3X29ianRyZWUoIk9OIENPTU1JVCIp OworCXN3aXRjaCAob3B0aW9uKQorCXsKKwkJY2FzZSBPTkNPTU1JVF9EUk9QOgorCQkJYXBwZW5k X3N0cmluZ19vYmplY3Qob25jb21taXQsICIle29uX2NvbW1pdF92YWx1ZX1zIiwgIkRST1AiKTsK KwkJCWJyZWFrOworCisJCWNhc2UgT05DT01NSVRfREVMRVRFX1JPV1M6CisJCQlhcHBlbmRfc3Ry aW5nX29iamVjdChvbmNvbW1pdCwgIiV7b25fY29tbWl0X3ZhbHVlfXMiLCAiREVMRVRFIFJPV1Mi KTsKKwkJCWJyZWFrOworCisJCWNhc2UgT05DT01NSVRfUFJFU0VSVkVfUk9XUzoKKwkJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KG9uY29tbWl0LCAiJXtvbl9jb21taXRfdmFsdWV9cyIsICJQUkVTRVJW RSBST1dTIik7CisJCQlicmVhazsKKworCQljYXNlIE9OQ09NTUlUX05PT1A6CisJCQlhcHBlbmRf bnVsbF9vYmplY3Qob25jb21taXQsICIle29uX2NvbW1pdF92YWx1ZX1zIik7CisJCQlhcHBlbmRf Ym9vbF9vYmplY3Qob25jb21taXQsICJwcmVzZW50IiwgZmFsc2UpOworCQkJYnJlYWs7CisJfQor CisJcmV0dXJuIG9uY29tbWl0OworfQorCisvKgorICogRGVwYXJzZSBhIFJlbmFtZVN0bXQuCisg Ki8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfUmVuYW1lU3RtdChPYmplY3RBZGRyZXNzIGFk ZHJlc3MsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlSZW5hbWVTdG10ICpub2RlID0gKFJlbmFtZVN0 bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAgKnJlbmFtZVN0bXQ7CisJY2hhcgkgICAqZm10 c3RyOworCWNvbnN0IGNoYXIgKm9ianR5cGU7CisJUmVsYXRpb24JcmVsYXRpb247CisJT2lkCQkJ c2NoZW1hSWQ7CisKKwkvKgorCSAqIEluIGFuIEFMVEVSIC4uIFJFTkFNRSBjb21tYW5kLCB3ZSBk b24ndCBoYXZlIHRoZSBvcmlnaW5hbCBuYW1lIG9mIHRoZQorCSAqIG9iamVjdCBpbiBzeXN0ZW0g Y2F0YWxvZ3M6IHNpbmNlIHdlIGluc3BlY3QgdGhlbSBhZnRlciB0aGUgY29tbWFuZCBoYXMKKwkg KiBleGVjdXRlZCwgdGhlIG9sZCBuYW1lIGlzIGFscmVhZHkgZ29uZS4gIFRoZXJlZm9yZSwgd2Ug ZXh0cmFjdCBpdCBmcm9tCisJICogdGhlIHBhcnNlIG5vZGUuICBOb3RlIHdlIHN0aWxsIGV4dHJh Y3QgdGhlIHNjaGVtYSBuYW1lIGZyb20gdGhlIGNhdGFsb2cKKwkgKiAoaXQgbWlnaHQgbm90IGJl IHByZXNlbnQgaW4gdGhlIHBhcnNlIG5vZGUpOyBpdCBjYW5ub3QgcG9zc2libHkgaGF2ZQorCSAq IGNoYW5nZWQgYW55d2F5LgorCSAqLworCXN3aXRjaCAobm9kZS0+cmVuYW1lVHlwZSkKKwl7CisJ CWNhc2UgT0JKRUNUX1RBQkxFOgorCQljYXNlIE9CSkVDVF9JTkRFWDoKKwkJY2FzZSBPQkpFQ1Rf U0VRVUVOQ0U6CisKKwkJCS8qCisJCQkgKiBWZXJib3NlIHN5bnRheAorCQkJICoKKwkJCSAqIEFM VEVSICVzICV7aWZfZXhpc3RzfXMgJXtpZGVudGl0eX1EIFJFTkFNRSBUTyAle25ld25hbWV9SQor CQkJICovCisJCQlvYmp0eXBlID0gc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSk7 CisJCQlmbXRzdHIgPSBwc3ByaW50ZigiQUxURVIgJXMiLCBvYmp0eXBlKTsKKwkJCXJlbGF0aW9u ID0gcmVsYXRpb25fb3BlbihhZGRyZXNzLm9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJ c2NoZW1hSWQgPSBSZWxhdGlvbkdldE5hbWVzcGFjZShyZWxhdGlvbik7CisJCQlyZW5hbWVTdG10 ID0gbmV3X29ianRyZWVfVkEoZm10c3RyLCAwKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJl bmFtZVN0bXQsICIle2lmX2V4aXN0c31zIiwKKwkJCQkJCQkJIG5vZGUtPm1pc3Npbmdfb2sgPyAi SUYgRVhJU1RTIiA6ICIiKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJlbmFtZVN0bXQsICIl e2lkZW50aXR5fUQiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHNjaGVtYUlk LAorCQkJCQkJCQkJCQkJCQkgIG5vZGUtPnJlbGF0aW9uLT5yZWxuYW1lKSk7CisJCQlhcHBlbmRf c3RyaW5nX29iamVjdChyZW5hbWVTdG10LCAiUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwKKwkJCQkJ CQkJIG5vZGUtPm5ld25hbWUpOworCQkJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1No YXJlTG9jayk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9BVFRSSUJVVEU6CisJCWNhc2Ug T0JKRUNUX0NPTFVNTjoKKwkJCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihhZGRyZXNzLm9iamVj dElkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJc2NoZW1hSWQgPSBSZWxhdGlvbkdldE5hbWVzcGFj ZShyZWxhdGlvbik7CisKKwkJCS8qCisJCQkgKiBWZXJib3NlIHN5bnRheAorCQkJICoKKwkJCSAq IENvbXBvc2l0ZSB0eXBlczogQUxURVIgb2JqdHlwZSAle2lkZW50aXR5fUQgUkVOQU1FIEFUVFJJ QlVURQorCQkJICogJXtjb2xuYW1lfUkgVE8gJXtuZXduYW1lfUkgJXtjYXNjYWRlfXMKKwkJCSAq CisJCQkgKiBOb3JtYWwgdHlwZXM6IEFMVEVSIG9ianR5cGUgJXtpZl9leGlzdHN9cyAlJXtpZGVu dGl0eX1EIFJFTkFNRQorCQkJICogQ09MVU1OICV7Y29sbmFtZX1JIFRPICV7bmV3bmFtZX1JCisJ CQkgKi8KKworCQkJaWYgKG5vZGUtPnJlbmFtZVR5cGUgPT0gT0JKRUNUX0FUVFJJQlVURSkKKwkJ CXsKKwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWUoIkFMVEVSIFRZUEUiKTsKKwkJCQkJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHJlbmFtZVN0bXQsICIle2lkZW50aXR5fUQiLAorCQkJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHNjaGVtYUlkLAorCQkJCQkJCQkJCQkJCQkgIG5vZGUt PnJlbGF0aW9uLT5yZWxuYW1lKSk7CisJCQkJZm10c3RyID0gcHNwcmludGYoIlJFTkFNRSBBVFRS SUJVVEUgJSV7Y29sbmFtZX1JIik7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJb2JqdHlwZSA9 IHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbGF0aW9uVHlwZSk7CisJCQkJZm10c3RyID0gcHNw cmludGYoIkFMVEVSICVzIiwgb2JqdHlwZSk7CisJCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVl KGZtdHN0cik7CisKKwkJCQkvKiBDb21wb3NpdGUgdHlwZXMgZG8gbm90IHN1cHBvcnQgSUYgRVhJ U1RTICovCisJCQkJaWYgKG5vZGUtPnJlbmFtZVR5cGUgPT0gT0JKRUNUX0NPTFVNTikKKwkJCQkJ YXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwgIiV7aWZfZXhpc3RzfXMiLAorCQkJCQkJ CQkJCW5vZGUtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIiA6ICIiKTsKKworCQkJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHJlbmFtZVN0bXQsICIle2lkZW50aXR5fUQiLAorCQkJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZShzY2hlbWFJZCwKKwkJCQkJCQkJCQkJCQkJCSAgbm9kZS0+cmVs YXRpb24tPnJlbG5hbWUpKTsKKwkJCQlmbXRzdHIgPSBwc3ByaW50ZigiUkVOQU1FIENPTFVNTiAl JXtjb2xuYW1lfUkiKTsKKwkJCX0KKworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3Rt dCwgZm10c3RyLCBub2RlLT5zdWJuYW1lKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFt ZVN0bXQsICJUTyAle25ld25hbWV9SSIsIG5vZGUtPm5ld25hbWUpOworCisJCQlpZiAobm9kZS0+ cmVuYW1lVHlwZSA9PSBPQkpFQ1RfQVRUUklCVVRFKQorCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHJlbmFtZVN0bXQsICIle2Nhc2NhZGV9cyIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfVkEoIkNB U0NBREUiLCAxLAorCQkJCQkJCQkJCQkJCSJwcmVzZW50IiwgT2JqVHlwZUJvb2wsCisJCQkJCQkJ CQkJCQkJbm9kZS0+YmVoYXZpb3IgPT0gRFJPUF9DQVNDQURFKSk7CisKKwkJCXJlbGF0aW9uX2Ns b3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCQlicmVhazsKKwkJY2FzZSBPQkpF Q1RfRlVOQ1RJT046CisJCQl7CisJCQkJY2hhcgkqaWRlbnQ7CisJCQkJSGVhcFR1cGxlIHByb2N0 dXA7CisJCQkJRm9ybV9wZ19wcm9jIHByb2Nmb3JtOworCQkJCUxpc3QJICAgKmlkZW50aXR5Owor CisJCQkJQXNzZXJ0KElzQShub2RlLT5vYmplY3QsIE9iamVjdFdpdGhBcmdzKSk7CisJCQkJaWRl bnRpdHkgPSAoKE9iamVjdFdpdGhBcmdzICopIG5vZGUtPm9iamVjdCktPm9iam5hbWU7CisKKwkJ CQlwcm9jdHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsCisJCQkJCQkJCQkJICBPYmplY3RJ ZEdldERhdHVtKGFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo cHJvY3R1cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwcm9j ZWR1cmUgJXUiLAorCQkJCQkJIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCXByb2Nmb3JtID0gKEZv cm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2N0dXApOworCisJCQkJLyogWFhYIGRvZXMgdGhpcyB3 b3JrIGZvciBvcmRlcmVkLXNldCBhZ2dyZWdhdGVzPyAqLworCQkJCWlkZW50ID0gcHNwcmludGYo IiVzJXMiLAorCQkJCQkJCQkgcXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIoZ2V0X25hbWVzcGFj ZV9uYW1lKHByb2Nmb3JtLT5wcm9uYW1lc3BhY2UpLAorCQkJCQkJCQkJCQkJCQkJc3RyVmFsKGxs YXN0KGlkZW50aXR5KSkpLAorCQkJCQkJCQkgZm9ybWF0X3Byb2NlZHVyZV9hcmdzKGFkZHJlc3Mu b2JqZWN0SWQsIHRydWUpKTsKKworCQkJCWZtdHN0ciA9IHBzcHJpbnRmKCJBTFRFUiAlcyAlJXtp ZGVudGl0eX1zIFJFTkFNRSBUTyAlJXtuZXduYW1lfUkiLAorCQkJCQkJCQkgIHN0cmluZ2lmeV9v Ymp0eXBlKG5vZGUtPnJlbmFtZVR5cGUpKTsKKwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWVf VkEoZm10c3RyLCAyLAorCQkJCQkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBpZGVu dCwKKwkJCQkJCQkJCQkJIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsK KworCQkJCVJlbGVhc2VTeXNDYWNoZShwcm9jdHVwKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNh c2UgT0JKRUNUX09QQ0xBU1M6CisJCQl7CisJCQkJSGVhcFR1cGxlICAgb3BjVHVwOworCQkJCUZv cm1fcGdfb3BjbGFzcyBvcGNGb3JtOworCQkJCUxpc3QJICAgKm9sZG5hbWVzOworCQkJCWNoYXIJ ICAgKnNjaGVtYW5hbWU7CisJCQkJY2hhcgkgICAqb3BjbmFtZTsKKwkJCQljaGFyCSAgICpmbXQ7 CisKKwkJCQlmbXQgPSBwc3ByaW50ZigiQUxURVIgJXMgJSV7aWRlbnRpdHl9RCBVU0lORyAlJXtp bmRleF9tZXRob2R9cyBSRU5BTUUgVE8gJSV7bmV3bmFtZX1JIiwKKwkJCQkJCQkgICBzdHJpbmdp Znlfb2JqdHlwZShub2RlLT5yZW5hbWVUeXBlKSk7CisKKwkJCQlvcGNUdXAgPSBTZWFyY2hTeXND YWNoZTEoQ0xBT0lELCBPYmplY3RJZEdldERhdHVtKGFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BjVHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxv b2t1cCBmYWlsZWQgZm9yIG9wY2xhc3Mgd2l0aCBPSUQgJXUiLAorCQkJCQkJIGFkZHJlc3Mub2Jq ZWN0SWQpOworCisJCQkJb3BjRm9ybSA9IChGb3JtX3BnX29wY2xhc3MpIEdFVFNUUlVDVChvcGNU dXApOworCisJCQkJb2xkbmFtZXMgPSBsaXN0X2NvcHlfdGFpbCgoTGlzdCAqKSBub2RlLT5vYmpl Y3QsIDEpOworCisJCQkJLyogZGVjb25zdHJ1Y3QgdGhlIG5hbWUgbGlzdCAqLworCQkJCURlY29u c3RydWN0UXVhbGlmaWVkTmFtZShvbGRuYW1lcywgJnNjaGVtYW5hbWUsICZvcGNuYW1lKTsKKwor CQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDMsCisJCQkJCQkJCQkJCSJpZGVu dGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZShvcGNGb3JtLT5vcGNuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQkJCSBvcGNuYW1lKSwKKwkJ CQkJCQkJCQkJImluZGV4X21ldGhvZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCWdldF9h bV9uYW1lKG9wY0Zvcm0tPm9wY21ldGhvZCksCisJCQkJCQkJCQkJCSJuZXduYW1lIiwgT2JqVHlw ZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisKKwkJCQlSZWxlYXNlU3lzQ2FjaGUob3BjVHVwKTsK KwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX09QRkFNSUxZOgorCQkJeworCQkJCUhl YXBUdXBsZSAgIG9wZlR1cDsKKwkJCQlIZWFwVHVwbGUgICBhbVR1cDsKKwkJCQlGb3JtX3BnX29w ZmFtaWx5IG9wZkZvcm07CisJCQkJRm9ybV9wZ19hbSAgYW1Gb3JtOworCQkJCUxpc3QJICAgKm9s ZG5hbWVzOworCQkJCWNoYXIJICAgKnNjaGVtYW5hbWU7CisJCQkJY2hhcgkgICAqb3BmbmFtZTsK KwkJCQljaGFyCSAgICpmbXQ7CisKKwkJCQlmbXQgPSBwc3ByaW50ZigiQUxURVIgJXMgJSV7aWRl bnRpdHl9RCBVU0lORyAlJXtpbmRleF9tZXRob2R9cyBSRU5BTUUgVE8gJSV7bmV3bmFtZX1JIiwK KwkJCQkJCQkgICBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZW5hbWVUeXBlKSk7CisKKwkJCQlv cGZUdXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQsIGFkZHJlc3Mub2JqZWN0SWQpOwor CQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChvcGZUdXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3IgZmFtaWx5IHdpdGggT0lEICV1IiwKKwkJCQkJ CSBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQlvcGZGb3JtID0gKEZvcm1fcGdfb3BmYW1pbHkpIEdF VFNUUlVDVChvcGZUdXApOworCisJCQkJYW1UdXAgPSBTZWFyY2hTeXNDYWNoZTEoQU1PSUQsIE9i amVjdElkR2V0RGF0dW0ob3BmRm9ybS0+b3BmbWV0aG9kKSk7CisJCQkJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKGFtVHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IGFjY2VzcyBtZXRob2QgJXUiLAorCQkJCQkJIG9wZkZvcm0tPm9wZm1ldGhvZCk7CisKKwkJCQlh bUZvcm0gPSAoRm9ybV9wZ19hbSkgR0VUU1RSVUNUKGFtVHVwKTsKKworCQkJCW9sZG5hbWVzID0g bGlzdF9jb3B5X3RhaWwoKExpc3QgKikgbm9kZS0+b2JqZWN0LCAxKTsKKworCQkJCS8qIGRlY29u c3RydWN0IHRoZSBuYW1lIGxpc3QgKi8KKwkJCQlEZWNvbnN0cnVjdFF1YWxpZmllZE5hbWUob2xk bmFtZXMsICZzY2hlbWFuYW1lLCAmb3BmbmFtZSk7CisKKwkJCQlyZW5hbWVTdG10ID0gbmV3X29i anRyZWVfVkEoZm10LCAzLAorCQkJCQkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BmRm9ybS0+b3BmbmFtZXNwYWNl LAorCQkJCQkJCQkJCQkJCQkJCQkgb3BmbmFtZSksCisJCQkJCQkJCQkJCSJpbmRleF9tZXRob2Qi LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQlOYW1lU3RyKGFtRm9ybS0+YW1uYW1lKSwKKwkJ CQkJCQkJCQkJIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKworCQkJ CVJlbGVhc2VTeXNDYWNoZShhbVR1cCk7CisJCQkJUmVsZWFzZVN5c0NhY2hlKG9wZlR1cCk7CisJ CQl9CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9TQ0hFTUE6CisJCQlyZW5hbWVTdG10ID0K KwkJCQluZXdfb2JqdHJlZV9WQSgiQUxURVIgU0NIRU1BICV7aWRlbnRpdHl9SSBSRU5BTUUgVE8g JXtuZXduYW1lfUkiLAorCQkJCQkJCSAgIDEsCisJCQkJCQkJICAgImlkZW50aXR5IiwgT2JqVHlw ZVN0cmluZywgbm9kZS0+c3VibmFtZSwKKwkJCQkJCQkgICAibmV3bmFtZSIsIE9ialR5cGVTdHJp bmcsIG5vZGUtPm5ld25hbWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfVFJJR0dFUjoK KwkJCXsKKwkJCQlIZWFwVHVwbGUJdHJpZ1R1cDsKKwkJCQlGb3JtX3BnX3RyaWdnZXIgdHJpZ0Zv cm07CisJCQkJUmVsYXRpb24JcGdfdHJpZ2dlcjsKKworCQkJCXBnX3RyaWdnZXIgPSByZWxhdGlv bl9vcGVuKFRyaWdnZXJSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCXRyaWdUdXAg PSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKHBnX3RyaWdnZXIsIGdldF9vYmplY3RfYXR0bnVt X29pZChhZGRyZXNzLmNsYXNzSWQpLCBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQl0cmlnRm9ybSA9 IChGb3JtX3BnX3RyaWdnZXIpIEdFVFNUUlVDVCh0cmlnVHVwKTsKKworCQkJCXJlbmFtZVN0bXQg PSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgVFJJR0dFUiAle3RyaWdnZXJuYW1lfUkgT04gJXtpZGVu dGl0eX1EIFJFTkFNRSBUTyAle25ld25hbWV9SSIsCisJCQkJCQkJCQkJCTMsCisJCQkJCQkJCQkJ CSJ0cmlnZ2VybmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnN1Ym5hbWUsCisJCQkJCQkJCQkJ CSJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJCQl0cmlnRm9y bS0+dGdyZWxpZCksCisJCQkJCQkJCQkJCSJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+ bmV3bmFtZSk7CisKKwkJCQlyZWxhdGlvbl9jbG9zZShwZ190cmlnZ2VyLCBBY2Nlc3NTaGFyZUxv Y2spOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfVFlQRToKKwkJCXsKKwkJCQlI ZWFwVHVwbGUJb2JqVHVwOworCQkJCVJlbGF0aW9uCWNhdGFsb2c7CisJCQkJRGF0dW0JCW9iam5z cDsKKwkJCQlib29sCQlpc251bGw7CisJCQkJQXR0ck51bWJlcglBbnVtX25hbWVzcGFjZTsKKwkJ CQlMaXN0CSAgICppZGVudGl0eSA9IGNhc3ROb2RlKExpc3QsIG5vZGUtPm9iamVjdCk7CisKKwkJ CQkvKiBvYnRhaW4gb2JqZWN0IHR1cGxlICovCisJCQkJY2F0YWxvZyA9IHJlbGF0aW9uX29wZW4o YWRkcmVzcy5jbGFzc0lkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCW9ialR1cCA9IGdldF9jYXRh bG9nX29iamVjdF9ieV9vaWQoY2F0YWxvZywgZ2V0X29iamVjdF9hdHRudW1fb2lkKGFkZHJlc3Mu Y2xhc3NJZCksIGFkZHJlc3Mub2JqZWN0SWQpOworCisJCQkJLyogb2J0YWluIG5hbWVzcGFjZSAq LworCQkJCUFudW1fbmFtZXNwYWNlID0gZ2V0X29iamVjdF9hdHRudW1fbmFtZXNwYWNlKGFkZHJl c3MuY2xhc3NJZCk7CisJCQkJb2JqbnNwID0gaGVhcF9nZXRhdHRyKG9ialR1cCwgQW51bV9uYW1l c3BhY2UsCisJCQkJCQkJCQkgIFJlbGF0aW9uR2V0RGVzY3IoY2F0YWxvZyksICZpc251bGwpOwor CQkJCWlmIChpc251bGwpCisJCQkJCWVsb2coRVJST1IsICJpbnZhbGlkIE5VTEwgbmFtZXNwYWNl Iik7CisKKwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFRZUEUiLAorCQkJ CQkJCQkJCTApOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJlbmFtZVN0bXQsICIle2lkZW50 aXR5fUQiLAorCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKERhdHVtR2V0T2JqZWN0 SWQob2JqbnNwKSwKKwkJCQkJCQkJCQkJCQkJCSAgc3RyVmFsKGxsYXN0KGlkZW50aXR5KSkpKTsK KworCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQsICJSRU5BTUUgVE8gJXtuZXdu YW1lfUkiLAorCQkJCQkJCQkJIG5vZGUtPm5ld25hbWUpOworCQkJCXJlbGF0aW9uX2Nsb3NlKGNh dGFsb2csIEFjY2Vzc1NoYXJlTG9jayk7CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0Ogor CQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9iamVjdCB0eXBlICVkIiwgbm9kZS0+cmVuYW1l VHlwZSk7CisJfQorCisJcmV0dXJuIHJlbmFtZVN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEg QWx0ZXJPYmplY3REZXBlbmRzU3RtdCAoQUxURVIgLi4uIERFUEVORFMgT04gLi4uKS4KKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckRlcGVuZFN0bXQoT2lkIG9iamVjdElkLCBO b2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJPYmplY3REZXBlbmRzU3RtdCAqbm9kZSA9IChBbHRl ck9iamVjdERlcGVuZHNTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCQkgICAqYWx0ZXJEZXBl bmRlU3RtdCA9IE5VTEw7CisKKworCWlmIChub2RlLT5vYmplY3RUeXBlID09IE9CSkVDVF9JTkRF WCkKKwl7CisJCVJlbGF0aW9uICAgICAgICByZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0 SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCU9ialRyZWUgKnF1YWxpZmllZDsKKworCQlhbHRlckRl cGVuZGVTdG10ID0gbmV3X29ianRyZWUoIkFMVEVSIElOREVYIik7CisKKwkJcXVhbGlmaWVkID0g bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwK KwkJCQkJCQkJCQkJIG5vZGUtPnJlbGF0aW9uLT5yZWxuYW1lKTsKKwkJYXBwZW5kX29iamVjdF9v YmplY3QoYWx0ZXJEZXBlbmRlU3RtdCwgIiV7aWRlbnRpdHl9RCIsIHF1YWxpZmllZCk7CisJCXJl bGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KGFsdGVyRGVwZW5kZVN0bXQsICIle05PfXMiLAorCQkJCQkJIG5vZGUtPnJlbW92 ZSA/ICJOTyIgOiAiIik7CisKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoYWx0ZXJEZXBlbmRlU3Rt dCwgIkRFUEVORFMgT04gRVhURU5TSU9OIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVy RGVwZW5kZVN0bXQsICIle25ld25hbWV9SSIsIHN0clZhbChub2RlLT5leHRuYW1lKSk7CisJfQor CWVsc2UKKwkJZWxvZyhMT0csICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlIGluIGRlcGFyc2UgY29t bWFuZDogJWQiLAorCQkJIChpbnQpIG5vZGVUYWcocGFyc2V0cmVlKSk7CisKKwlyZXR1cm4gYWx0 ZXJEZXBlbmRlU3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIENBQ0hFIG9w dGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX0NhY2hlKE9i alRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxl KQoreworCU9ialRyZWUJICAgKmNhY2hlOworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpm bXQ7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcWNhY2hl KTsKKworCWlmIChhbHRlcl90YWJsZSkKKwkJZm10ID0gIlNFVCBDQUNIRSAle3ZhbHVlfXMiOwor CWVsc2UKKwkJZm10ID0gIkNBQ0hFICV7dmFsdWV9cyI7CisKKwljYWNoZSA9IG5ld19vYmp0cmVl X1ZBKGZtdCwgMiwKKwkJCQkJCSAgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjYWNoZSIsCisJ CQkJCQkgICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisKKwlyZXR1cm4gbmV3X29i amVjdF9vYmplY3QoY2FjaGUpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgQ1lD TEUgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfQ3lj bGUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJf dGFibGUpCit7CisJT2JqVHJlZQkgICAqY3ljbGU7CisJY2hhcgkgICAqZm10OworCisJaWYgKGFs dGVyX3RhYmxlKQorCQlmbXQgPSAiU0VUICV7bm99cyBDWUNMRSI7CisJZWxzZQorCQlmbXQgPSAi JXtub31zIENZQ0xFIjsKKworCWN5Y2xlID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJ ICAgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjeWNsZSIsCisJCQkJCQkgICAibm8iLCBPYmpU eXBlU3RyaW5nLAorCQkJCQkJICAgc2VxZGF0YS0+c2VxY3ljbGUgPyAiIiA6ICJOTyIpOworCXJl dHVybiBuZXdfb2JqZWN0X29iamVjdChjeWNsZSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBz ZXF1ZW5jZSBJTkNSRU1FTlQgQlkgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0g KgorZGVwYXJzZV9TZXFfSW5jcmVtZW50QnkoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVl bmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZQkgICAqaW5jcmVtZW50 YWxieTsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10OworCisJaWYgKGFsdGVyX3Rh YmxlKQorCQlmbXQgPSAiU0VUIElOQ1JFTUVOVCBCWSAle3ZhbHVlfXMiOworCWVsc2UKKwkJZm10 ID0gIklOQ1JFTUVOVCBCWSAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRf Rk9STUFULCBzZXFkYXRhLT5zZXFpbmNyZW1lbnQpOworCWluY3JlbWVudGFsYnkgPSBuZXdfb2Jq dHJlZV9WQShmbXQsIDIsCisJCQkJCQkJCSAgICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic2Vx aW5jcmVtZW50IiwKKwkJCQkJCQkJICAgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsK KwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QoaW5jcmVtZW50YWxieSk7Cit9CisKKy8qCisgKiBE ZXBhcnNlIHRoZSBzZXF1ZW5jZSBNQVhWQUxVRSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUg T2JqRWxlbSAqCitkZXBhcnNlX1NlcV9NYXh2YWx1ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdf c2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlCSAgICptYXh2 YWx1ZTsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10OworCisJaWYgKGFsdGVyX3Rh YmxlKQorCQlmbXQgPSAiU0VUIE1BWFZBTFVFICV7dmFsdWV9cyI7CisJZWxzZQorCQlmbXQgPSAi TUFYVkFMVUUgJXt2YWx1ZX1zIjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwg c2VxZGF0YS0+c2VxbWF4KTsKKwltYXh2YWx1ZSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJ CQkJCQkgICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibWF4dmFsdWUiLAorCQkJCQkJCSAgInZh bHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3Qo bWF4dmFsdWUpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgTUlOVkFMVUUgb3B0 aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfTWludmFsdWUo T2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFi bGUpCit7CisJT2JqVHJlZQkgICAqbWludmFsdWU7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJ ICAgKmZtdDsKKworCWlmIChhbHRlcl90YWJsZSkKKwkJZm10ID0gIlNFVCBNSU5WQUxVRSAle3Zh bHVlfXMiOworCWVsc2UKKwkJZm10ID0gIk1JTlZBTFVFICV7dmFsdWV9cyI7CisKKwl0bXBzdHIg PSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcW1pbik7CisJbWludmFsdWUgPSBu ZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkJICAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywg Im1pbnZhbHVlIiwKKwkJCQkJCQkgICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisJ cmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KG1pbnZhbHVlKTsKK30KKworLyoKKyAqIERlcGFyc2Ug dGhlIHNlcXVlbmNlIE9XTkVEIEJZIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpFbGVtICoKK2Rl cGFyc2VfU2VxX093bmVkQnkoT2JqVHJlZSAqcGFyZW50LCBPaWQgc2VxdWVuY2VJZCwgYm9vbCBh bHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlCSAgICpvd25lZGJ5ID0gTlVMTDsKKwlSZWxhdGlvbglk ZXBSZWw7CisJU3lzU2NhbkRlc2Mgc2NhbjsKKwlTY2FuS2V5RGF0YSBrZXlzWzNdOworCUhlYXBU dXBsZSAgIHR1cGxlOworCisJZGVwUmVsID0gdGFibGVfb3BlbihEZXBlbmRSZWxhdGlvbklkLCBB Y2Nlc3NTaGFyZUxvY2spOworCVNjYW5LZXlJbml0KCZrZXlzWzBdLAorCQkJCUFudW1fcGdfZGVw ZW5kX2NsYXNzaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9i amVjdElkR2V0RGF0dW0oUmVsYXRpb25SZWxhdGlvbklkKSk7CisJU2NhbktleUluaXQoJmtleXNb MV0sCisJCQkJQW51bV9wZ19kZXBlbmRfb2JqaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVy LCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0oc2VxdWVuY2VJZCkpOworCVNjYW5LZXlJ bml0KCZrZXlzWzJdLAorCQkJCUFudW1fcGdfZGVwZW5kX29ianN1YmlkLAorCQkJCUJURXF1YWxT dHJhdGVneU51bWJlciwgRl9JTlQ0RVEsCisJCQkJSW50MzJHZXREYXR1bSgwKSk7CisKKwlzY2Fu ID0gc3lzdGFibGVfYmVnaW5zY2FuKGRlcFJlbCwgRGVwZW5kRGVwZW5kZXJJbmRleElkLCB0cnVl LAorCQkJCQkJCSAgTlVMTCwgMywga2V5cyk7CisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVw bGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkKKwl7CisJCU9pZAkJIG93bmVySWQ7CisJCUZv cm1fcGdfZGVwZW5kIGRlcGZvcm07CisJCU9ialRyZWUJKnRtcG9iajsKKwkJY2hhcgkgICAqY29s bmFtZTsKKworCQlkZXBmb3JtID0gKEZvcm1fcGdfZGVwZW5kKSBHRVRTVFJVQ1QodHVwbGUpOwor CisJCS8qIE9ubHkgY29uc2lkZXIgQVVUTyBkZXBlbmRlbmNpZXMgb24gcGdfY2xhc3MgKi8KKwkJ aWYgKGRlcGZvcm0tPmRlcHR5cGUgIT0gREVQRU5ERU5DWV9BVVRPKQorCQkJY29udGludWU7CisJ CWlmIChkZXBmb3JtLT5yZWZjbGFzc2lkICE9IFJlbGF0aW9uUmVsYXRpb25JZCkKKwkJCWNvbnRp bnVlOworCQlpZiAoZGVwZm9ybS0+cmVmb2Jqc3ViaWQgPD0gMCkKKwkJCWNvbnRpbnVlOworCisJ CW93bmVySWQgPSBkZXBmb3JtLT5yZWZvYmppZDsKKwkJY29sbmFtZSA9IGdldF9hdHRuYW1lKG93 bmVySWQsIGRlcGZvcm0tPnJlZm9ianN1YmlkLCBmYWxzZSk7CisJCWlmIChjb2xuYW1lID09IE5V TEwpCisJCQljb250aW51ZTsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoUmVsYXRpb25SZWxhdGlvbklkLCBvd25lcklkKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wb2JqLCAiYXR0cm5hbWUiLCBjb2xuYW1lKTsKKwkJb3duZWRieSA9IG5ld19vYmp0cmVlX1ZB KCJPV05FRCBCWSAle293bmVyfUQiLAorCQkJCQkJCQkgMiwKKwkJCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAib3duZWQiLAorCQkJCQkJCQkgIm93bmVyIiwgT2JqVHlwZU9iamVjdCwg dG1wb2JqKTsKKwl9CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCXJlbGF0aW9uX2Nsb3Nl KGRlcFJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCS8qCisJICogSWYgdGhlcmUncyBubyBvd25l ciBjb2x1bW4sIGVtaXQgYW4gZW1wdHkgT1dORUQgQlkgZWxlbWVudCwgc2V0IHVwIHNvCisJICog dGhhdCBpdCB3b24ndCBwcmludCBhbnl0aGluZy4KKwkgKi8KKwlpZiAoIW93bmVkYnkpCisJCS8q IFhYWCB0aGlzIHNob3VsZG4ndCBoYXBwZW4gLi4uICovCisJCW93bmVkYnkgPSBuZXdfb2JqdHJl ZV9WQSgiT1dORUQgQlkgJXtvd25lcn1EIiwKKwkJCQkJCQkJIDMsCisJCQkJCQkJCSAiY2xhdXNl IiwgT2JqVHlwZVN0cmluZywgIm93bmVkIiwKKwkJCQkJCQkJICJvd25lciIsIE9ialR5cGVOdWxs LAorCQkJCQkJCQkgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwgZmFsc2UpOworCisJcmV0dXJuIG5l d19vYmplY3Rfb2JqZWN0KG93bmVkYnkpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVu Y2UgUkVTVEFSVCBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNl X1NlcV9SZXN0YXJ0KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRh dGEpCit7CisJT2JqVHJlZQkgICAqcmVzdGFydDsKKwljaGFyCSAgICp0bXBzdHI7CisKKwl0bXBz dHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPmxhc3RfdmFsdWUpOworCXJlc3Rh cnQgPSBuZXdfb2JqdHJlZV9WQSgiUkVTVEFSVCAle3ZhbHVlfXMiLCAyLAorCQkJCQkJCSAiY2xh dXNlIiwgT2JqVHlwZVN0cmluZywgInJlc3RhcnQiLAorCQkJCQkJCSAidmFsdWUiLCBPYmpUeXBl U3RyaW5nLCB0bXBzdHIpOworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXN0YXJ0KTsKK30K KworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIFNUQVJUIFdJVEggb3B0aW9uLgorICovCitz dGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfU3RhcnR3aXRoKE9ialRyZWUgKnBh cmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9i alRyZWUJICAgKnN0YXJ0d2l0aDsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10Owor CisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAiU0VUIFNUQVJUIFdJVEggJXt2YWx1ZX1zIjsK KwllbHNlCisJCWZtdCA9ICJTVEFSVCBXSVRIICV7dmFsdWV9cyI7CisKKwl0bXBzdHIgPSBwc3By aW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcXN0YXJ0KTsKKwlzdGFydHdpdGggPSBuZXdf b2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkJICAgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJz dGFydCIsCisJCQkJCQkJICAgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKwlyZXR1 cm4gbmV3X29iamVjdF9vYmplY3Qoc3RhcnR3aXRoKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhl IHR5cGUgU1RPUkFHRSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBh cnNlX1R5cGVfU3RvcmFnZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKQor eworCU9ialRyZWUJICAgKnN0b3JhZ2U7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZt dDsKKwljaGFyCSAgICpzdHI7CisKKwlzd2l0Y2ggKHR5cEZvcm0tPnR5cHN0b3JhZ2UpCisJewor CQljYXNlICdwJzoKKwkJCXN0ciA9ICJwbGFpbiI7CisJCQlicmVhazsKKwkJY2FzZSAnZSc6CisJ CQlzdHIgPSAiZXh0ZXJuYWwiOworCQkJYnJlYWs7CisJCWNhc2UgJ3gnOgorCQkJc3RyID0gImV4 dGVuZGVkIjsKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCXN0ciA9ICJtYWluIjsKKwkJCWJy ZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgc3RvcmFnZSBzcGVjaWZp ZXIgJWMiLCB0eXBGb3JtLT50eXBzdG9yYWdlKTsKKwl9CisKKwl0bXBzdHIgPSBwc3ByaW50Zigi JXMiLCBzdHIpOworCisJZm10ID0gIlNUT1JBR0UgPSAle3ZhbHVlfXMiOworCisJc3RvcmFnZSA9 IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcs ICJzdG9yYWdlIiwKKwkJCQkJCSAgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKwor CXJldHVybiBuZXdfb2JqZWN0X29iamVjdChzdG9yYWdlKTsKK30KKworLyoKKyAqIERlcGFyc2Ug dGhlIHR5cGUgUkVDRUlWRSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitk ZXBhcnNlX1R5cGVfUmVjZWl2ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3Jt KQoreworCU9ialRyZWUJICAgKnJlY2VpdmU7CisKKwlyZWNlaXZlID0gbmV3X29ianRyZWVfVkEo IlJFQ0VJVkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJlY2VpdmUi KTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXByZWNlaXZlKSkKKwkJYXBwZW5kX29iamVj dF9vYmplY3QocmVjZWl2ZSwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZv cm0tPnR5cHJlY2VpdmUpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdChyZWNlaXZlLCAi cHJlc2VudCIsIGZhbHNlKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZWNlaXZlKTsK K30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgU0VORCBvcHRpb24uCisgKi8KK3N0YXRpYyBp bmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfU2VuZChPYmpUcmVlICpwYXJlbnQsIEZvcm1f cGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUJICAgKnNlbmQ7CisKKwlzZW5kID0gbmV3X29i anRyZWVfVkEoIlNFTkQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInNl bmQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBzZW5kKSkKKwkJYXBwZW5kX29iamVj dF9vYmplY3Qoc2VuZCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0t PnR5cHNlbmQpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdChzZW5kLCAicHJlc2VudCIs IGZhbHNlKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChzZW5kKTsKK30KKworLyoKKyAq IERlcGFyc2UgdGhlIHR5cGUgdHlwbW9kX2luIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBP YmpFbGVtICoKK2RlcGFyc2VfVHlwZV9UeXBtb2RfSW4oT2JqVHJlZSAqcGFyZW50LCBGb3JtX3Bn X3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVlCSAgICp0eXBtb2RpbjsKKworCXR5cG1vZGluID0g bmV3X29ianRyZWVfVkEoIlRZUE1PRF9JTj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBl U3RyaW5nLCAidHlwbW9kX2luIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwbW9kaW4p KQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0eXBtb2RpbiwgIiV7cHJvY2VkdXJlfUQiLAorCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cG1vZGluKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9v YmplY3QodHlwbW9kaW4sICJwcmVzZW50IiwgZmFsc2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rf b2JqZWN0KHR5cG1vZGluKTsKK30KKworCisvKgorICogRGVwYXJzZSB0aGUgdHlwZSB0eXBtb2Rf b3V0IG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9U eXBtb2RfT3V0KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2Jq VHJlZQkgICAqdHlwbW9kb3V0OworCisJdHlwbW9kb3V0ID0gbmV3X29ianRyZWVfVkEoIlRZUE1P RF9PVVQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInR5cG1vZF9vdXQi KTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBtb2RvdXQpKQorCQlhcHBlbmRfb2JqZWN0 X29iamVjdCh0eXBtb2RvdXQsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBG b3JtLT50eXBtb2RvdXQpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0eXBtb2RvdXQs ICJwcmVzZW50IiwgZmFsc2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHR5cG1vZG91 dCk7Cit9CisKKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgYW5hbHl6ZSBvcHRpb24uCisgKi8K K3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfQW5hbHl6ZShPYmpUcmVlICpw YXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUJICAgKnR5cGFuYWx5emU7 CisKKwl0eXBhbmFseXplID0gbmV3X29ianRyZWVfVkEoIkFOQUxZWkU9IiwgMSwKKwkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImFuYWx5emUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBG b3JtLT50eXBhbmFseXplKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodHlwYW5hbHl6ZSwgIiV7 cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2Vk dXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cGFuYWx5emUpKTsKKwll bHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0eXBhbmFseXplLCAicHJlc2VudCIsIGZhbHNlKTsK KworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdCh0eXBhbmFseXplKTsKK30KKworLyoKKyAqIERl cGFyc2UgdGhlIHR5cGUgc3Vic2NyaXB0IG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpF bGVtICoKK2RlcGFyc2VfVHlwZV9TdWJzY3JpcHQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5 cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVlCSAgICp0eXBzdWJzY3JpcHQ7CisKKwl0eXBzdWJzY3Jp cHQgPSBuZXdfb2JqdHJlZV9WQSgiU1VCU0NSSVBUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJzdWJzY3JpcHQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBz dWJzY3JpcHQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0eXBzdWJzY3JpcHQsICIle3Byb2Nl ZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBzdWJzY3JpcHQpKTsKKwllbHNl CisJCWFwcGVuZF9ib29sX29iamVjdCh0eXBzdWJzY3JpcHQsICJwcmVzZW50IiwgZmFsc2UpOwor CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHR5cHN1YnNjcmlwdCk7Cit9CisKKy8qCisgKiBI YW5kbGUgZGVwYXJzaW5nIG9mIHNpbXBsZSBjb21tYW5kcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9u IHNob3VsZCBjb3ZlciBhbGwgY2FzZXMgaGFuZGxlZCBpbiBQcm9jZXNzVXRpbGl0eVNsb3cuCisg Ki8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vfc2ltcGxlX2NvbW1hbmQoQ29sbGVjdGVkQ29t bWFuZCAqY21kKQoreworCU9pZAkJCW9iamVjdElkOworCU5vZGUJICAgKnBhcnNldHJlZTsKKwlP YmpUcmVlCSAgICpjb21tYW5kOworCisJQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1RfU2ltcGxlKTsK KworCXBhcnNldHJlZSA9IGNtZC0+cGFyc2V0cmVlOworCW9iamVjdElkID0gY21kLT5kLnNpbXBs ZS5hZGRyZXNzLm9iamVjdElkOworCisJLyogVGhpcyBzd2l0Y2ggbmVlZHMgdG8gaGFuZGxlIGV2 ZXJ5dGhpbmcgdGhhdCBQcm9jZXNzVXRpbGl0eVNsb3cgZG9lcyAqLworCXN3aXRjaCAobm9kZVRh ZyhwYXJzZXRyZWUpKQorCXsKKwkJY2FzZSBUX0NyZWF0ZVNjaGVtYVN0bXQ6CisJCQljb21tYW5k ID0gZGVwYXJzZV9DcmVhdGVTY2hlbWFTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJl YWs7CisKKwkJY2FzZSBUX0FsdGVyRG9tYWluU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0Fs dGVyRG9tYWluU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlLAorCQkJCQkJCQkJCQkgIGNtZC0+ZC5z aW1wbGUuc2Vjb25kYXJ5T2JqZWN0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVTdG10 OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsK KwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVUcmlnU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBh cnNlX0NyZWF0ZVRyaWdTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJ Y2FzZSBUX0NyZWF0ZVNlcVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVTZXFTdG10 KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyU2VxU3Rt dDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyU2VxU3RtdChvYmplY3RJZCwgcGFyc2V0cmVl KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9EZWZpbmVTdG10OgorCQkJY29tbWFuZCA9IGRlcGFy c2VfRGVmaW5lU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlLAorCQkJCQkJCQkJCSBjbWQtPmQuc2lt cGxlLnNlY29uZGFyeU9iamVjdCk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlRG9tYWlu U3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZURvbWFpbihvYmplY3RJZCwgcGFyc2V0 cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVPcEZhbWlseVN0bXQ6CisJCQljb21t YW5kID0gZGVwYXJzZV9DcmVhdGVPcEZhbWlseShvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgVF9JbmRleFN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9JbmRleFN0 bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlRnVu Y3Rpb25TdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlRnVuY3Rpb24ob2JqZWN0SWQs IHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJGdW5jdGlvblN0bXQ6CisJ CQljb21tYW5kID0gZGVwYXJzZV9BbHRlckZ1bmN0aW9uKG9iamVjdElkLCBwYXJzZXRyZWUpOwor CQkJYnJlYWs7CisKKwkJY2FzZSBUX1JlbmFtZVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9S ZW5hbWVTdG10KGNtZC0+ZC5zaW1wbGUuYWRkcmVzcywgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOwor CisJCWNhc2UgVF9BbHRlck9iamVjdERlcGVuZHNTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2Vf QWx0ZXJEZXBlbmRTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2Fz ZSBUX0FsdGVyT2JqZWN0U2NoZW1hU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyT2Jq ZWN0U2NoZW1hU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsCisJCQkJCQkJCQkJCQkJcGFyc2V0 cmVlLAorCQkJCQkJCQkJCQkJCWNtZC0+ZC5zaW1wbGUuc2Vjb25kYXJ5T2JqZWN0KTsKKwkJCWJy ZWFrOworCisJCWNhc2UgVF9BbHRlck93bmVyU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0Fs dGVyT3duZXJTdG10KGNtZC0+ZC5zaW1wbGUuYWRkcmVzcywgcGFyc2V0cmVlKTsKKwkJCWJyZWFr OworCisJCWNhc2UgVF9BbHRlck9wZXJhdG9yU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0Fs dGVyT3BlcmF0b3JTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2Fz ZSBUX0FsdGVyVHlwZVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlclR5cGVTZXRTdG10 KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NvbXBvc2l0ZVR5 cGVTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ29tcG9zaXRlVHlwZVN0bXQob2JqZWN0SWQs IHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlRW51bVN0bXQ6CS8qIENS RUFURSBUWVBFIEFTIEVOVU0gKi8KKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZUVudW1TdG10 KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZVJhbmdl U3RtdDoJLyogQ1JFQVRFIFRZUEUgQVMgUkFOR0UgKi8KKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0Ny ZWF0ZVJhbmdlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug VF9BbHRlckVudW1TdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJFbnVtU3RtdChvYmpl Y3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVDYXN0U3RtdDoK KwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZUNhc3RTdG10KG9iamVjdElkLCBwYXJzZXRyZWUp OworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWNvbW1hbmQgPSBOVUxMOworCQkJZWxvZyhM T0csICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlIGluIGRlcGFyc2UgY29tbWFuZDogJWQiLAorCQkJ CSAoaW50KSBub2RlVGFnKHBhcnNldHJlZSkpOworCX0KKworCXJldHVybiBjb21tYW5kOworfQor CisvKgorICogU3Vicm91dGluZSBmb3IgQ1JFQVRFIFRBQkxFIGRlcGFyc2luZy4KKyAqCisgKiBE ZWFsIHdpdGggYWxsIHRoZSB0YWJsZSBlbGVtZW50cyAoY29sdW1ucyBhbmQgY29uc3RyYWludHMp LgorICoKKyAqIE5vdGUgd2UgaWdub3JlIGNvbnN0cmFpbnRzIGluIHRoZSBwYXJzZSBub2RlIGhl cmU7IHRoZXkgYXJlIGV4dHJhY3RlZCBmcm9tCisgKiBzeXN0ZW0gY2F0YWxvZ3MgaW5zdGVhZC4K KyAqLworc3RhdGljIExpc3QgKgorZGVwYXJzZV9UYWJsZUVsZW1lbnRzKFJlbGF0aW9uIHJlbGF0 aW9uLCBMaXN0ICp0YWJsZUVsZW1lbnRzLCBMaXN0ICpkcGNvbnRleHQsCisJCQkJCSAgYm9vbCB0 eXBlZCwgYm9vbCBjb21wb3NpdGUpCit7CisJTGlzdAkgICAqZWxlbWVudHMgPSBOSUw7CisJTGlz dENlbGwgICAqbGM7CisKKwlmb3JlYWNoKGxjLCB0YWJsZUVsZW1lbnRzKQorCXsKKwkJTm9kZQkg ICAqZWx0ID0gKE5vZGUgKikgbGZpcnN0KGxjKTsKKworCQlzd2l0Y2ggKG5vZGVUYWcoZWx0KSkK KwkJeworCQkJY2FzZSBUX0NvbHVtbkRlZjoKKwkJCQl7CisJCQkJCU9ialRyZWUJICAgKnRyZWU7 CisKKwkJCQkJdHJlZSA9IHR5cGVkID8KKwkJCQkJCWRlcGFyc2VfQ29sdW1uRGVmX3R5cGVkKHJl bGF0aW9uLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJCQkoQ29sdW1uRGVmICopIGVsdCkgOgorCQkJ CQkJZGVwYXJzZV9Db2x1bW5EZWYocmVsYXRpb24sIGRwY29udGV4dCwKKwkJCQkJCQkJCQkJICBj b21wb3NpdGUsIChDb2x1bW5EZWYgKikgZWx0LAorCQkJCQkJCQkJCQkgIGZhbHNlLCBOVUxMKTsK KwkJCQkJaWYgKHRyZWUgIT0gTlVMTCkKKwkJCQkJeworCQkJCQkJT2JqRWxlbQkqY29sdW1uOwor CisJCQkJCQljb2x1bW4gPSBuZXdfb2JqZWN0X29iamVjdCh0cmVlKTsKKwkJCQkJCWVsZW1lbnRz ID0gbGFwcGVuZChlbGVtZW50cywgY29sdW1uKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlicmVhazsK KwkJCWNhc2UgVF9Db25zdHJhaW50OgorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllbG9n KEVSUk9SLCAiaW52YWxpZCBub2RlIHR5cGUgJWQiLCBub2RlVGFnKGVsdCkpOworCQl9CisJfQor CisJcmV0dXJuIGVsZW1lbnRzOworfQorCisvKgorICogV29ya2hvcnNlIHRvIGRlcGFyc2UgYSBD b2xsZWN0ZWRDb21tYW5kLgorICovCitjaGFyICoKK2RlcGFyc2VfdXRpbGl0eV9jb21tYW5kKENv bGxlY3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpCit7CisJT3ZlcnJpZGVTZWFy Y2hQYXRoICpvdmVycmlkZVBhdGg7CisJTWVtb3J5Q29udGV4dAlvbGRjeHQ7CisJTWVtb3J5Q29u dGV4dAl0bXBjeHQ7CisJT2JqVHJlZQkJICAgKnRyZWU7CisJY2hhcgkJICAgKmNvbW1hbmQ7CisJ U3RyaW5nSW5mb0RhdGEgIHN0cjsKKworCS8qCisJICogQWxsb2NhdGUgZXZlcnl0aGluZyBkb25l IGJ5IHRoZSBkZXBhcnNpbmcgcm91dGluZXMgaW50byBhIHRlbXAgY29udGV4dCwKKwkgKiB0byBh dm9pZCBoYXZpbmcgdG8gc3ByaW5rbGUgdGhlbSB3aXRoIG1lbW9yeSBoYW5kbGluZyBjb2RlOyBi dXQgYWxsb2NhdGUKKwkgKiB0aGUgb3V0cHV0IFN0cmluZ0luZm8gYmVmb3JlIHN3aXRjaGluZy4K KwkgKi8KKwlpbml0U3RyaW5nSW5mbygmc3RyKTsKKwl0bXBjeHQgPSBBbGxvY1NldENvbnRleHRD cmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCSAgICJkZXBhcnNlIGN0eCIsCisJ CQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfTUlOU0laRSwKKwkJCQkJCQkJICAgQUxMT0NTRVRf REVGQVVMVF9JTklUU0laRSwKKwkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9NQVhTSVpFKTsK KwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8odG1wY3h0KTsKKworCS8qCisJICogTWFu eSByb3V0aW5lcyB1bmRlcmx5aW5nIHRoaXMgb25lIHdpbGwgaW52b2tlIHJ1bGV1dGlscy5jIGZ1 bmN0aW9uYWxpdHkKKwkgKiBpbiBvcmRlciB0byBvYnRhaW4gZGVwYXJzZWQgdmVyc2lvbnMgb2Yg ZXhwcmVzc2lvbnMuICBJbiBzdWNoIHJlc3VsdHMsCisJICogd2Ugd2FudCBhbGwgb2JqZWN0IG5h bWVzIHRvIGJlIHF1YWxpZmllZCwgc28gdGhhdCByZXN1bHRzIGFyZSAicG9ydGFibGUiCisJICog dG8gZW52aXJvbm1lbnRzIHdpdGggZGlmZmVyZW50IHNlYXJjaF9wYXRoIHNldHRpbmdzLiAgUmF0 aGVyIHRoYW4gaW5qZWN0CisJICogd2hhdCB3b3VsZCBiZSByZXBldGl0aXZlIGNhbGxzIHRvIG92 ZXJyaWRlIHNlYXJjaCBwYXRoIGFsbCBvdmVyIHRoZQorCSAqIHBsYWNlLCB3ZSBkbyBpdCBjZW50 cmFsbHkgaGVyZS4KKwkgKi8KKwlvdmVycmlkZVBhdGggPSBHZXRPdmVycmlkZVNlYXJjaFBhdGgo Q3VycmVudE1lbW9yeUNvbnRleHQpOworCW92ZXJyaWRlUGF0aC0+c2NoZW1hcyA9IE5JTDsKKwlv dmVycmlkZVBhdGgtPmFkZENhdGFsb2cgPSBmYWxzZTsKKwlvdmVycmlkZVBhdGgtPmFkZFRlbXAg PSB0cnVlOworCVB1c2hPdmVycmlkZVNlYXJjaFBhdGgob3ZlcnJpZGVQYXRoKTsKKworCXZlcmJv c2UgPSB2ZXJib3NlX21vZGU7CisKKwlzd2l0Y2ggKGNtZC0+dHlwZSkKKwl7CisJCWNhc2UgU0NU X1NpbXBsZToKKwkJCXRyZWUgPSBkZXBhcnNlX3NpbXBsZV9jb21tYW5kKGNtZCk7CisJCQlicmVh azsKKwkJY2FzZSBTQ1RfQWx0ZXJUYWJsZToKKwkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyVGFibGVT dG10KGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfQWx0ZXJPcEZhbWlseToKKwkJCXRyZWUg PSBkZXBhcnNlX0FsdGVyT3BGYW1pbHkoY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9DcmVh dGVPcENsYXNzOgorCQkJdHJlZSA9IGRlcGFyc2VfQ3JlYXRlT3BDbGFzc1N0bXQoY21kKTsKKwkJ CWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgZGVwYXJzZSBu b2RlIHR5cGUgJWQiLCBjbWQtPnR5cGUpOworCX0KKworCVBvcE92ZXJyaWRlU2VhcmNoUGF0aCgp OworCisJaWYgKHRyZWUpCisJeworCQlKc29uYiAqanNvbmI7CisKKwkJanNvbmIgPSBvYmp0cmVl X3RvX2pzb25iKHRyZWUpOworCQljb21tYW5kID0gSnNvbmJUb0NTdHJpbmcoJnN0ciwgJmpzb25i LT5yb290LCBKU09OQl9FU1RJTUFURURfTEVOKTsKKwl9CisJZWxzZQorCQljb21tYW5kID0gTlVM TDsKKworCS8qCisJICogQ2xlYW4gdXAuICBOb3RlIHRoYXQgc2luY2Ugd2UgY3JlYXRlZCB0aGUg U3RyaW5nSW5mbyBpbiB0aGUgY2FsbGVyJ3MKKwkgKiBjb250ZXh0LCB0aGUgb3V0cHV0IHN0cmlu ZyBpcyBub3QgZGVsZXRlZCBoZXJlLgorCSAqLworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRj eHQpOworCU1lbW9yeUNvbnRleHREZWxldGUodG1wY3h0KTsKKworCXJldHVybiBjb21tYW5kOwor fQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24uYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uNzgyZWIwNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9q c29uLmMKQEAgLTAsMCArMSw3NjMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbF9q c29uLmMKKyAqCSAgSlNPTiBjb2RlIHJlbGF0ZWQgdG8gRERMIGNvbW1hbmQgZGVwYXJzaW5nCisg KgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2Vu dHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9O CisgKgkgIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMKKyAqCisgKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJsaWIvc3RyaW5n aW5mby5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvanNv bmIuaCIKKworCisvKgorICogQ29udmVyc2lvbiBzcGVjaWZpZXIsIGl0IGRldGVybWluZXMgaG93 IHdlIGV4cGFuZCB0aGUganNvbiBlbGVtZW50IGludG8KKyAqIHN0cmluZy4KKyAqLwordHlwZWRl ZiBlbnVtCit7CisJU3BlY1R5cGVuYW1lLAorCVNwZWNPcGVyYXRvcm5hbWUsCisJU3BlY0RvdHRl ZE5hbWUsCisJU3BlY1N0cmluZywKKwlTcGVjTnVtYmVyLAorCVNwZWNTdHJpbmdMaXRlcmFsLAor CVNwZWNJZGVudGlmaWVyLAorCVNwZWNSb2xlCit9IGNvbnZTcGVjaWZpZXI7CisKKy8qCisgKiBB IHRlcm5hcnkgdmFsdWUgd2hpY2ggcmVwcmVzZW50cyBhIGJvb2xlYW4gdHlwZSBKc29uYlZhbHVl LgorICovCit0eXBlZGVmIGVudW0KK3sKKwl0dl9hYnNlbnQsCisJdHZfdHJ1ZSwKKwl0dl9mYWxz ZQorfSBqc29uX3RyaXZhbHVlOworCitzdGF0aWMgYm9vbCBleHBhbmRfb25lX2pzb25iX2VsZW1l bnQoU3RyaW5nSW5mbyBidWYsIGNoYXIgKnBhcmFtLAorCQkJCQkJIEpzb25iVmFsdWUgKmpzb252 YWwsIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLAorCQkJCQkJIGNvbnN0IGNoYXIgKmZtdCk7Citz dGF0aWMgdm9pZCBleHBhbmRfanNvbmJfYXJyYXkoU3RyaW5nSW5mbyBidWYsIGNoYXIgKnBhcmFt LAorCQkJCSAgIEpzb25iVmFsdWUgKmpzb25hcnIsIGNoYXIgKmFycmF5c2VwLAorCQkJCSAgIGNv bnZTcGVjaWZpZXIgc3BlY2lmaWVyLCBjb25zdCBjaGFyICpmbXQpOworc3RhdGljIHZvaWQgZm10 c3RyX2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZyk7CitjaGFyICpkZGxfZGVwYXJzZV9qc29uX3Rv X3N0cmluZyhjaGFyICpqc29uYik7CisKKy8qCisgKiBHaXZlbiBhIEpzb25iQ29udGFpbmVyLCBm aW5kIHRoZSBKc29uYlZhbHVlIHdpdGggdGhlIGdpdmVuIGtleSBuYW1lIGluIGl0LgorICogSWYg aXQncyBvZiBhIHR5cGUgb3RoZXIgdGhhbiBqYnZCb29sLCBhbiBlcnJvciBpcyByYWlzZWQuIElm IGl0IGRvZXNuJ3QKKyAqIGV4aXN0LCB0dl9hYnNlbnQgaXMgcmV0dXJuZWQ7IG90aGVyd2lzZSBy ZXR1cm4gdGhlIGFjdHVhbCBqc29uX3RyaXZhbHVlLgorICovCitzdGF0aWMganNvbl90cml2YWx1 ZQorZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKEpzb25iQ29udGFpbmVyICpjb250YWluZXIs IGNoYXIgKmtleW5hbWUpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNvbmJWYWx1ZSAqdmFsdWU7 CisJanNvbl90cml2YWx1ZQlyZXN1bHQ7CisKKwlrZXkudHlwZSA9IGpidlN0cmluZzsKKwlrZXku dmFsLnN0cmluZy52YWwgPSBrZXluYW1lOworCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihr ZXluYW1lKTsKKwl2YWx1ZSA9IGZpbmRKc29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250YWluZXIs CisJCQkJCQkJCQkJSkJfRk9CSkVDVCwgJmtleSk7CisJaWYgKHZhbHVlID09IE5VTEwpCisJCXJl dHVybiB0dl9hYnNlbnQ7CisJaWYgKHZhbHVlLT50eXBlICE9IGpidkJvb2wpCisJCWVyZXBvcnQo RVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJ CQkJIGVycm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90IG9mIHR5cGUgYm9vbGVhbiIsCisJCQkJ CQlrZXluYW1lKSkpOworCXJlc3VsdCA9IHZhbHVlLT52YWwuYm9vbGVhbiA/IHR2X3RydWUgOiB0 dl9mYWxzZTsKKwlwZnJlZSh2YWx1ZSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICog R2l2ZW4gYSBKc29uYkNvbnRhaW5lciwgZmluZCB0aGUgSnNvbmJWYWx1ZSB3aXRoIHRoZSBnaXZl biBrZXkgbmFtZSBpbiBpdC4KKyAqIElmIGl0J3Mgb2YgYSB0eXBlIG90aGVyIHRoYW4gamJ2U3Ry aW5nLCBhbiBlcnJvciBpcyByYWlzZWQuICBJZiBpdCBkb2Vzbid0CisgKiBleGlzdCwgYW4gZXJy b3IgaXMgcmFpc2VkIHVubGVzcyBtaXNzaW5nX29rOyBvdGhlcndpc2UgcmV0dXJuIE5VTEwuCisg KgorICogSWYgaXQgZXhpc3RzIGFuZCBpcyBhIHN0cmluZywgYSBmcmVzaGx5IHBhbGxvYydlZCBj b3B5IGlzIHJldHVybmVkLgorICoKKyAqIElmICpsZW5ndGggaXMgbm90IE5VTEwsIGl0IGlzIHNl dCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcuCisgKi8KK3N0YXRpYyBjaGFyICoKK2ZpbmRf c3RyaW5nX2luX2pzb25iY29udGFpbmVyKEpzb25iQ29udGFpbmVyICpjb250YWluZXIsIGNoYXIg KmtleW5hbWUsCisJCQkJCQkJICBib29sIG1pc3Npbmdfb2ssIGludCAqbGVuZ3RoKQoreworCUpz b25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUgKnZhbHVlOworCWNoYXIJICAgKnN0cjsKKworCS8q IFhYWCB2ZXJpZnkgdGhhdCB0aGlzIGlzIGFuIG9iamVjdCwgbm90IGFuIGFycmF5ICovCisKKwlr ZXkudHlwZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwgPSBrZXluYW1lOworCWtl eS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihrZXluYW1lKTsKKwl2YWx1ZSA9IGZpbmRKc29uYlZh bHVlRnJvbUNvbnRhaW5lcihjb250YWluZXIsCisJCQkJCQkJCQkJSkJfRk9CSkVDVCwgJmtleSk7 CisJaWYgKHZhbHVlID09IE5VTEwpCisJeworCQlpZiAobWlzc2luZ19vaykKKwkJCXJldHVybiBO VUxMOworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJB TUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coIm1pc3NpbmcgZWxlbWVudCBcIiVzXCIgaW4ganNv biBvYmplY3QiLCBrZXluYW1lKSkpOworCX0KKworCXN0ciA9IHBuc3RyZHVwKHZhbHVlLT52YWwu c3RyaW5nLnZhbCwgdmFsdWUtPnZhbC5zdHJpbmcubGVuKTsKKwlpZiAobGVuZ3RoKQorCQkqbGVu Z3RoID0gdmFsdWUtPnZhbC5zdHJpbmcubGVuOworCXBmcmVlKHZhbHVlKTsKKwlyZXR1cm4gc3Ry OworfQorCisjZGVmaW5lIEFEVkFOQ0VfUEFSU0VfUE9JTlRFUihwdHIsZW5kX3B0cikgXAorCWRv IHsgXAorCQlpZiAoKysocHRyKSA+PSAoZW5kX3B0cikpIFwKKwkJCWVyZXBvcnQoRVJST1IsIFwK KwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksIFwKKwkJCQkJ IGVycm1zZygidW50ZXJtaW5hdGVkIGZvcm1hdCBzcGVjaWZpZXIiKSkpOyBcCisJfSB3aGlsZSAo MCkKKworLyoKKyAqIFJlY3Vyc2l2ZSBoZWxwZXIgZm9yIHBnX2V2ZW50X3RyaWdnZXJfZXhwYW5k X2NvbW1hbmQKKyAqCisgKiBGaW5kIHRoZSAiZm10IiBlbGVtZW50IGluIHRoZSBnaXZlbiBjb250 YWluZXIsIGFuZCBleHBhbmQgaXQgaW50byB0aGUKKyAqIHByb3ZpZGVkIFN0cmluZ0luZm8uCisg Ki8KK3N0YXRpYyB2b2lkCitleHBhbmRfZm10X3JlY3Vyc2l2ZShKc29uYkNvbnRhaW5lciAqY29u dGFpbmVyLCBTdHJpbmdJbmZvIGJ1ZikKK3sKKwlKc29uYlZhbHVlCWtleTsKKwlKc29uYlZhbHVl ICp2YWx1ZTsKKwljb25zdCBjaGFyICpjcDsKKwljb25zdCBjaGFyICpzdGFydF9wdHI7CisJY29u c3QgY2hhciAqZW5kX3B0cjsKKwlpbnQJCQlsZW47CisKKwlzdGFydF9wdHIgPSBmaW5kX3N0cmlu Z19pbl9qc29uYmNvbnRhaW5lcihjb250YWluZXIsICJmbXQiLCBmYWxzZSwgJmxlbik7CisJZW5k X3B0ciA9IHN0YXJ0X3B0ciArIGxlbjsKKworCWZvciAoY3AgPSBzdGFydF9wdHI7IGNwIDwgZW5k X3B0cjsgY3ArKykKKwl7CisJCWNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyOworCQlib29sCQlpc19h cnJheSA9IGZhbHNlOworCQljaGFyCSAgICpwYXJhbSA9IE5VTEw7CisJCWNoYXIJICAgKmFycmF5 c2VwID0gTlVMTDsKKworCQlpZiAoKmNwICE9ICclJykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5m b0NoYXJNYWNybyhidWYsICpjcCk7CisJCQljb250aW51ZTsKKwkJfQorCisKKwkJQURWQU5DRV9Q QVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKworCQkvKiBFYXN5IGNhc2U6ICUlIG91dHB1dHMg YSBzaW5nbGUgJSAqLworCQlpZiAoKmNwID09ICclJykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5m b0NoYXJNYWNybyhidWYsICpjcCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIFNj YW4gdGhlIG1hbmRhdG9yeSBlbGVtZW50IG5hbWUuICBBbGxvdyBmb3IgYW4gYXJyYXkgc2VwYXJh dG9yCisJCSAqICh3aGljaCBtYXkgYmUgdGhlIGVtcHR5IHN0cmluZykgdG8gYmUgc3BlY2lmaWVk IGFmdGVyIGNvbG9uLgorCQkgKi8KKwkJaWYgKCpjcCA9PSAneycpCisJCXsKKwkJCVN0cmluZ0lu Zm9EYXRhIHBhcmJ1ZjsKKwkJCVN0cmluZ0luZm9EYXRhIGFycmF5c2VwYnVmOworCQkJU3RyaW5n SW5mbwlhcHBlbmRUbzsKKworCQkJaW5pdFN0cmluZ0luZm8oJnBhcmJ1Zik7CisJCQlhcHBlbmRU byA9ICZwYXJidWY7CisKKwkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJ CQlmb3IgKDsgY3AgPCBlbmRfcHRyOykKKwkJCXsKKwkJCQlpZiAoKmNwID09ICc6JykKKwkJCQl7 CisJCQkJCS8qCisJCQkJCSAqIEZvdW5kIGFycmF5IHNlcGFyYXRvciBkZWxpbWl0ZXI7IGVsZW1l bnQgbmFtZSBpcyBub3cKKwkJCQkJICogY29tcGxldGUsIHN0YXJ0IGZpbGxpbmcgdGhlIHNlcGFy YXRvci4KKwkJCQkJICovCisJCQkJCWluaXRTdHJpbmdJbmZvKCZhcnJheXNlcGJ1Zik7CisJCQkJ CWFwcGVuZFRvID0gJmFycmF5c2VwYnVmOworCQkJCQlpc19hcnJheSA9IHRydWU7CisJCQkJCUFE VkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQkJCWNvbnRpbnVlOworCQkJCX0K KworCQkJCWlmICgqY3AgPT0gJ30nKQorCQkJCXsKKwkJCQkJQURWQU5DRV9QQVJTRV9QT0lOVEVS KGNwLCBlbmRfcHRyKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWFwcGVuZFN0cmluZ0luZm9D aGFyTWFjcm8oYXBwZW5kVG8sICpjcCk7CisJCQkJQURWQU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBl bmRfcHRyKTsKKwkJCX0KKwkJCXBhcmFtID0gcGFyYnVmLmRhdGE7CisJCQlpZiAoaXNfYXJyYXkp CisJCQkJYXJyYXlzZXAgPSBhcnJheXNlcGJ1Zi5kYXRhOworCQl9CisJCWlmIChwYXJhbSA9PSBO VUxMKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BB UkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygibWlzc2luZyBjb252ZXJzaW9uIG5hbWUgaW4g Y29udmVyc2lvbiBzcGVjaWZpZXIiKSkpOworCisJCXN3aXRjaCAoKmNwKQorCQl7CisJCQljYXNl ICdJJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjSWRlbnRpZmllcjsKKwkJCQlicmVhazsKKwkJCWNh c2UgJ0QnOgorCQkJCXNwZWNpZmllciA9IFNwZWNEb3R0ZWROYW1lOworCQkJCWJyZWFrOworCQkJ Y2FzZSAncyc6CisJCQkJc3BlY2lmaWVyID0gU3BlY1N0cmluZzsKKwkJCQlicmVhazsKKwkJCWNh c2UgJ0wnOgorCQkJCXNwZWNpZmllciA9IFNwZWNTdHJpbmdMaXRlcmFsOworCQkJCWJyZWFrOwor CQkJY2FzZSAnVCc6CisJCQkJc3BlY2lmaWVyID0gU3BlY1R5cGVuYW1lOworCQkJCWJyZWFrOwor CQkJY2FzZSAnTyc6CisJCQkJc3BlY2lmaWVyID0gU3BlY09wZXJhdG9ybmFtZTsKKwkJCQlicmVh azsKKwkJCWNhc2UgJ24nOgorCQkJCXNwZWNpZmllciA9IFNwZWNOdW1iZXI7CisJCQkJYnJlYWs7 CisJCQljYXNlICdSJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjUm9sZTsKKwkJCQlicmVhazsKKwkJ CWRlZmF1bHQ6CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5W QUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiaW52YWxpZCBjb252ZXJzaW9u IHNwZWNpZmllciBcIiVjXCIiLCAqY3ApKSk7CisJCX0KKworCQkvKgorCQkgKiBPYnRhaW4gdGhl IGVsZW1lbnQgdG8gYmUgZXhwYW5kZWQuCisJCSAqLworCQlrZXkudHlwZSA9IGpidlN0cmluZzsK KwkJa2V5LnZhbC5zdHJpbmcudmFsID0gcGFyYW07CisJCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0 cmxlbihwYXJhbSk7CisKKwkJdmFsdWUgPSBmaW5kSnNvbmJWYWx1ZUZyb21Db250YWluZXIoY29u dGFpbmVyLCBKQl9GT0JKRUNULCAma2V5KTsKKworCQkvKgorCQkgKiBFeHBhbmQgdGhlIGRhdGEg KHBvc3NpYmx5IGFuIGFycmF5KSBpbnRvIHRoZSBvdXRwdXQgU3RyaW5nSW5mby4KKwkJICovCisJ CWlmIChpc19hcnJheSkKKwkJCWV4cGFuZF9qc29uYl9hcnJheShidWYsIHBhcmFtLCB2YWx1ZSwg YXJyYXlzZXAsIHNwZWNpZmllciwgc3RhcnRfcHRyKTsKKwkJZWxzZQorCQkJZXhwYW5kX29uZV9q c29uYl9lbGVtZW50KGJ1ZiwgcGFyYW0sIHZhbHVlLCBzcGVjaWZpZXIsIHN0YXJ0X3B0cik7CisJ fQorfQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhIHF1b3RlZCBpZGVudGlmaWVy LiAgVGhlIHZhbHVlIG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitl eHBhbmRfanNvbnZhbF9pZGVudGlmaWVyKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29u dmFsKQoreworCWNoYXIJICAgKnN0cjsKKworCUFzc2VydChqc29udmFsLT50eXBlID09IGpidlN0 cmluZyk7CisKKwlzdHIgPSBwbnN0cmR1cChqc29udmFsLT52YWwuc3RyaW5nLnZhbCwganNvbnZh bC0+dmFsLnN0cmluZy5sZW4pOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBxdW90ZV9p ZGVudGlmaWVyKHN0cikpOworCXBmcmVlKHN0cik7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29u IHZhbHVlIGFzIGEgZG90LXNlcGFyYXRlZC1uYW1lLiAgVGhlIHZhbHVlIG11c3QgYmUgb2YgdHlw ZQorICogb2JqZWN0IGFuZCBtYXkgY29udGFpbiBlbGVtZW50cyAic2NoZW1hbmFtZSIgKG9wdGlv bmFsKSwgIm9iam5hbWUiCisgKiAobWFuZGF0b3J5KSwgImF0dHJuYW1lIiAob3B0aW9uYWwpLiAg RG91YmxlIHF1b3RlcyBhcmUgYWRkZWQgdG8gZWFjaCBlbGVtZW50CisgKiBhcyBuZWNlc3Nhcnks IGFuZCBkb3Qgc2VwYXJhdG9ycyB3aGVyZSBuZWVkZWQuCisgKgorICogT25lIGRheSB3ZSBtaWdo dCBuZWVkIGEgImNhdGFsb2ciIGVsZW1lbnQgYXMgd2VsbCwgYnV0IG5vIGN1cnJlbnQgdXNlIGNh c2UKKyAqIG5lZWRzIHRoYXQuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9kb3R0 ZWRuYW1lKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAg KnN0cjsKKworCXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZh bC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkic2NoZW1hbmFtZSIsIHRydWUsIE5VTEwpOworCWlm IChzdHIpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzLiIsIHF1b3RlX2lkZW50aWZp ZXIoc3RyKSk7CisJCXBmcmVlKHN0cik7CisJfQorCisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNv bmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSJvYmpuYW1l IiwgZmFsc2UsIE5VTEwpOworCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMiLCBxdW90ZV9pZGVu dGlmaWVyKHN0cikpOworCXBmcmVlKHN0cik7CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29u YmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJImF0dHJuYW1l IiwgdHJ1ZSwgTlVMTCk7CisJaWYgKHN0cikKKwl7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAi LiVzIiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwkJcGZyZWUoc3RyKTsKKwl9Cit9CisKKy8q CisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgdHlwZSBuYW1lLgorICovCitzdGF0aWMgdm9p ZAorZXhwYW5kX2pzb252YWxfdHlwZW5hbWUoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpz b252YWwpCit7CisJY2hhcgkgICAqc2NoZW1hID0gTlVMTDsKKwljaGFyCSAgICp0eXBlbmFtZTsK KwljaGFyCSAgICp0eXBtb2RzdHI7CisJanNvbl90cml2YWx1ZQlpc19hcnJheTsKKwljaGFyCSAg ICphcnJheV9kZWNvcjsKKworCS8qCisJICogV2Ugb21pdCBzY2hlbWEtcXVhbGlmeWluZyB0aGUg b3V0cHV0IG5hbWUgaWYgdGhlIHNjaGVtYSBlbGVtZW50IGlzCisJICogZWl0aGVyIHRoZSBlbXB0 eSBzdHJpbmcgb3IgTlVMTDsgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aG9zZSB0d28gY2FzZXMK KwkgKiBpcyB0aGF0IGluIHRoZSBsYXR0ZXIgd2UgcXVvdGUgdGhlIHR5cGUgbmFtZSwgaW4gdGhl IGZvcm1lciB3ZSBkb24ndC4KKwkgKiBUaGlzIGFsbG93cyBmb3IgdHlwZXMgd2l0aCBzcGVjaWFs IHR5cG1vZCBuZWVkcywgc3VjaCBhcyBpbnRlcnZhbCBhbmQKKwkgKiB0aW1lc3RhbXAgKHNlZSBm b3JtYXRfdHlwZV9kZXRhaWxlZCksIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgYWxsb3dpbmcKKwkg KiBmb3IgdGhlIHNjaGVtYSBuYW1lIHRvIGJlIG9taXR0ZWQgZnJvbSB0eXBlIG5hbWVzIHRoYXQg cmVxdWlyZSBxdW90ZXMKKwkgKiBidXQgYXJlIHRvIGJlIG9idGFpbmVkIGZyb20gYSB1c2VyIHNj aGVtYS4KKwkgKi8KKworCXNjaGVtYSA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpz b252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkgICAic2NoZW1hbmFtZSIsIHRydWUs IE5VTEwpOworCXR5cGVuYW1lID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZh bC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkgInR5cGVuYW1lIiwgZmFsc2UsIE5VTEwp OworCXR5cG1vZHN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZh bC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJICAidHlwbW9kIiwgdHJ1ZSwgTlVMTCk7CisJaXNf YXJyYXkgPSBmaW5kX2Jvb2xfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5k YXRhLAorCQkJCQkJCQkJCSAgICJ0eXBhcnJheSIpOworCXN3aXRjaCAoaXNfYXJyYXkpCisJewor CQljYXNlIHR2X3RydWU6CisJCQlhcnJheV9kZWNvciA9ICJbXSI7CisJCQlicmVhazsKKworCQlj YXNlIHR2X2ZhbHNlOgorCQkJYXJyYXlfZGVjb3IgPSAiIjsKKwkJCWJyZWFrOworCisJCWNhc2Ug dHZfYWJzZW50OgorCQlkZWZhdWx0OgorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUo RVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coIm1pc3Npbmcg dHlwYXJyYXkgZWxlbWVudCIpKSk7CisJfQorCisJaWYgKHNjaGVtYSA9PSBOVUxMKQorCQlhcHBl bmRTdHJpbmdJbmZvKGJ1ZiwgIiVzIiwgcXVvdGVfaWRlbnRpZmllcih0eXBlbmFtZSkpOworCWVs c2UgaWYgKHNjaGVtYVswXSA9PSAnXDAnKQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzIiwg dHlwZW5hbWUpOyAvKiBTcGVjaWFsIHR5cG1vZCBuZWVkcyAqLworCWVsc2UKKwkJYXBwZW5kU3Ry aW5nSW5mbyhidWYsICIlcy4lcyIsIHF1b3RlX2lkZW50aWZpZXIoc2NoZW1hKSwKKwkJCQkJCSBx dW90ZV9pZGVudGlmaWVyKHR5cGVuYW1lKSk7CisKKwlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVz JXMiLCB0eXBtb2RzdHIgPyB0eXBtb2RzdHIgOiAiIiwgYXJyYXlfZGVjb3IpOworfQorCisvKgor ICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhbiBvcGVyYXRvciBuYW1lCisgKi8KK3N0YXRpYyB2 b2lkCitleHBhbmRfanNvbnZhbF9vcGVyYXRvcihTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAq anNvbnZhbCkKK3sKKwljaGFyCSAgICpzdHI7CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29u YmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJInNjaGVtYW5h bWUiLCB0cnVlLCBOVUxMKTsKKwkvKiBTY2hlbWEgbWlnaHQgYmUgTlVMTCBvciBlbXB0eSAqLwor CWlmIChzdHIgIT0gTlVMTCAmJiBzdHJbMF0gIT0gJ1wwJykKKwl7CisJCWFwcGVuZFN0cmluZ0lu Zm8oYnVmLCAiJXMuIiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwkJcGZyZWUoc3RyKTsKKwl9 CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmlu YXJ5LmRhdGEsCisJCQkJCQkJCQkJIm9iam5hbWUiLCBmYWxzZSwgTlVMTCk7CisKKwlpZiAoc3Ry KQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHN0cik7CisJCXBmcmVlKHN0cik7 CisJfQorfQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhIHN0cmluZy4gIFRoZSB2 YWx1ZSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIG9mCisgKiB0eXBlIG9iamVjdC4gIEluIHRo ZSBsYXR0ZXIgY2FzZSBpdCBtdXN0IGNvbnRhaW4gYSAiZm10IiBlbGVtZW50IHdoaWNoIHdpbGwK KyAqIGJlIHJlY3Vyc2l2ZWx5IGV4cGFuZGVkOyBhbHNvLCBpZiB0aGUgb2JqZWN0IGNvbnRhaW5z IGFuIGVsZW1lbnQgInByZXNlbnQiCisgKiBhbmQgaXQgaXMgc2V0IHRvIGZhbHNlLCB0aGUgZXhw YW5zaW9uIGlzIHRoZSBlbXB0eSBzdHJpbmcuCisgKgorICogUmV0dXJucyBmYWxzZSBpZiBubyBh Y3R1YWwgZXhwYW5zaW9uIHdhcyBtYWRlIGR1ZSB0byB0aGUgInByZXNlbnQiIGZsYWcKKyAqIGJl aW5nIHNldCB0byAiZmFsc2UiLgorICovCitzdGF0aWMgYm9vbAorZXhwYW5kX2pzb252YWxfc3Ry aW5nKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWlmIChqc29udmFs LT50eXBlID09IGpidlN0cmluZykKKwl7CisJCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oYnVmLCBq c29udmFsLT52YWwuc3RyaW5nLnZhbCwKKwkJCQkJCQkgICBqc29udmFsLT52YWwuc3RyaW5nLmxl bik7CisJfQorCWVsc2UgaWYgKGpzb252YWwtPnR5cGUgPT0gamJ2QmluYXJ5KQorCXsKKwkJanNv bl90cml2YWx1ZQlwcmVzZW50OworCisJCXByZXNlbnQgPSBmaW5kX2Jvb2xfaW5fanNvbmJjb250 YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkgICJwcmVzZW50Iik7 CisJCS8qCisJCSAqIElmICJwcmVzZW50IiBpcyBzZXQgdG8gZmFsc2UsIHRoaXMgZWxlbWVudCBl eHBhbmRzIHRvIGVtcHR5OworCQkgKiBvdGhlcndpc2UgKGVpdGhlciB0cnVlIG9yIGFic2VudCks IGZhbGwgdGhyb3VnaCB0byBleHBhbmQgImZtdCIuCisJCSAqLworCQlpZiAocHJlc2VudCA9PSB0 dl9mYWxzZSkKKwkJCXJldHVybiBmYWxzZTsKKworCQlleHBhbmRfZm10X3JlY3Vyc2l2ZShqc29u dmFsLT52YWwuYmluYXJ5LmRhdGEsIGJ1Zik7CisJfQorCWVsc2UKKwkJcmV0dXJuIGZhbHNlOwor CisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgc3Ry aW5nIGxpdGVyYWwuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9zdHJsaXQoU3Ry aW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhciAgICpzdHI7CisJU3Ry aW5nSW5mb0RhdGEgZHFkZWxpbTsKKwlzdGF0aWMgY29uc3QgY2hhciBkcXN1ZmZpeGVzW10gPSAi X1hZWlpZWF8iOworCWludCAgICAgICAgIGRxbmV4dGNoYXIgPSAwOworCisJc3RyID0gcG5zdHJk dXAoanNvbnZhbC0+dmFsLnN0cmluZy52YWwsIGpzb252YWwtPnZhbC5zdHJpbmcubGVuKTsKKwor CS8qIEVhc3kgY2FzZTogaWYgdGhlcmUgYXJlIG5vICcgYW5kIG5vIFwsIGp1c3QgdXNlIGEgc2lu Z2xlIHF1b3RlICovCisJaWYgKHN0cmNocihzdHIsICdcJycpID09IE5VTEwgJiYKKwkJc3RyY2hy KHN0ciwgJ1xcJykgPT0gTlVMTCkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJyVzJyIs IHN0cik7CisJCXBmcmVlKHN0cik7CisJCXJldHVybjsKKwl9CisKKwkvKiBPdGhlcndpc2UgbmVl ZCB0byBmaW5kIGEgdXNlZnVsIGRvbGxhci1xdW90ZSBkZWxpbWl0ZXIgKi8KKwlpbml0U3RyaW5n SW5mbygmZHFkZWxpbSk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZHFkZWxpbSwgIiQiKTsK Kwl3aGlsZSAoc3Ryc3RyKHN0ciwgZHFkZWxpbS5kYXRhKSAhPSBOVUxMKQorCXsKKwkJYXBwZW5k U3RyaW5nSW5mb0NoYXIoJmRxZGVsaW0sIGRxc3VmZml4ZXNbZHFuZXh0Y2hhcisrXSk7CisJCWRx bmV4dGNoYXIgPSBkcW5leHRjaGFyICUgKHNpemVvZihkcXN1ZmZpeGVzKSAtIDEpOworCX0KKwkv KiBBZGQgdHJhaWxpbmcgJCAqLworCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZkcWRlbGltLCAnJCcp OworCisJLyogQW5kIGZpbmFsbHkgcHJvZHVjZSB0aGUgcXVvdGVkIGxpdGVyYWwgaW50byB0aGUg b3V0cHV0IFN0cmluZ0luZm8gKi8KKwlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzJXMlcyIsIGRx ZGVsaW0uZGF0YSwgc3RyLCBkcWRlbGltLmRhdGEpOworCXBmcmVlKGRxZGVsaW0uZGF0YSk7CisJ cGZyZWUoc3RyKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYW4gaW50ZWdl ciBxdWFudGl0eS4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX251bWJlcihTdHJp bmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyICpzdHJkYXR1bTsKKwor CXN0cmRhdHVtID0gRGF0dW1HZXRDU3RyaW5nKERpcmVjdEZ1bmN0aW9uQ2FsbDEobnVtZXJpY19v dXQsCisJCQkJCQkJCQkJCQkgICBOdW1lcmljR2V0RGF0dW0oanNvbnZhbC0+dmFsLm51bWVyaWMp KSk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHN0cmRhdHVtKTsKK30KKworLyoKKyAq IEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYSByb2xlIG5hbWUuICBJZiB0aGUgaXNfcHVibGljIGVs ZW1lbnQgaXMgc2V0IHRvCisgKiB0cnVlLCBQVUJMSUMgaXMgZXhwYW5kZWQgKG5vIHF1b3Rlcyk7 IG90aGVyd2lzZSwgZXhwYW5kIHRoZSBnaXZlbiByb2xlIG5hbWUsCisgKiBxdW90aW5nIGFzIGFu IGlkZW50aWZpZXIuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9yb2xlKFN0cmlu Z0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWpzb25fdHJpdmFsdWUJaXNfcHVi bGljOworCisJaXNfcHVibGljID0gZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKGpzb252YWwt PnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJImlzX3B1YmxpYyIpOworCWlmIChpc19wdWJs aWMgPT0gdHZfdHJ1ZSkKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJQVUJMSUMiKTsK KwllbHNlCisJeworCQljaGFyICpyb2xlbmFtZTsKKworCQlyb2xlbmFtZSA9IGZpbmRfc3RyaW5n X2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJ CSAicm9sZW5hbWUiLCBmYWxzZSwgTlVMTCk7CisJCWlmIChyb2xlbmFtZSkKKwkJeworCQkJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHF1b3RlX2lkZW50aWZpZXIocm9sZW5hbWUpKTsKKwkJ CXBmcmVlKHJvbGVuYW1lKTsKKwkJfQorCX0KK30KKworLyoKKyAqIEV4cGFuZCBvbmUganNvbiBl bGVtZW50IGludG8gdGhlIG91dHB1dCBTdHJpbmdJbmZvIGFjY29yZGluZyB0byB0aGUKKyAqIGNv bnZlcnNpb24gc3BlY2lmaWVyLiAgVGhlIGVsZW1lbnQgdHlwZSBpcyB2YWxpZGF0ZWQsIGFuZCBh biBlcnJvciBpcyByYWlzZWQKKyAqIGlmIGl0IGRvZXNuJ3QgbWF0Y2ggd2hhdCB3ZSBleHBlY3Qg Zm9yIHRoZSBjb252ZXJzaW9uIHNwZWNpZmllci4KKyAqCisgKiBSZXR1cm5zIGZhbHNlIGlmIG5v IGFjdHVhbCBleHBhbnNpb24gd2FzIG1hZGUgKGR1ZSB0byB0aGUgInByZXNlbnQiIGZsYWcKKyAq IGJlaW5nIHNldCB0byAiZmFsc2UiIGluIGZvcm1hdHRlZCBzdHJpbmcgZXhwYW5zaW9uKS4KKyAq Lworc3RhdGljIGJvb2wKK2V4cGFuZF9vbmVfanNvbmJfZWxlbWVudChTdHJpbmdJbmZvIGJ1Ziwg Y2hhciAqcGFyYW0sIEpzb25iVmFsdWUgKmpzb252YWwsCisJCQkJCQkgY29udlNwZWNpZmllciBz cGVjaWZpZXIsIGNvbnN0IGNoYXIgKmZtdCkKK3sKKwlib29sIHJlc3VsdCA9IHRydWU7CisJRXJy b3JDb250ZXh0Q2FsbGJhY2sgc3FsZXJyY29udGV4dDsKKworCS8qIElmIHdlIHdlcmUgZ2l2ZW4g YSBmb3JtYXQgc3RyaW5nLCBzZXR1cCBhbiBlcmVwb3J0KCkgY29udGV4dCBjYWxsYmFjayAqLwor CWlmIChmbXQpCisJeworCQlzcWxlcnJjb250ZXh0LmNhbGxiYWNrID0gZm10c3RyX2Vycm9yX2Nh bGxiYWNrOworCQlzcWxlcnJjb250ZXh0LmFyZyA9ICh2b2lkICopIGZtdDsKKwkJc3FsZXJyY29u dGV4dC5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJCWVycm9yX2NvbnRleHRfc3Rh Y2sgPSAmc3FsZXJyY29udGV4dDsKKwl9CisKKwlpZiAoIWpzb252YWwpCisJCWVyZXBvcnQoRVJS T1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJ IGVycm1zZygiZWxlbWVudCBcIiVzXCIgbm90IGZvdW5kIiwgcGFyYW0pKSk7CisKKwlzd2l0Y2gg KHNwZWNpZmllcikKKwl7CisJCWNhc2UgU3BlY0lkZW50aWZpZXI6CisJCQlpZiAoanNvbnZhbC0+ dHlwZSAhPSBqYnZTdHJpbmcpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQg SlNPTiBzdHJpbmcgZm9yICUlSSBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFy YW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9pZGVudGlmaWVyKGJ1Ziwg anNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNEb3R0ZWROYW1lOgorCQkJaWYgKGpz b252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4 cGVjdGVkIEpTT04gb2JqZWN0IGZvciAlJUQgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJ CQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfZG90dGVkbmFt ZShidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjU3RyaW5nOgorCQkJaWYg KGpzb252YWwtPnR5cGUgIT0gamJ2U3RyaW5nICYmCisJCQkJanNvbnZhbC0+dHlwZSAhPSBqYnZC aW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBzdHJpbmcg b3Igb2JqZWN0IGZvciAlJXMgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFt LCBqc29udmFsLT50eXBlKSkpOworCQkJcmVzdWx0ID0gZXhwYW5kX2pzb252YWxfc3RyaW5nKGJ1 ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNTdHJpbmdMaXRlcmFsOgorCQkJ aWYgKGpzb252YWwtPnR5cGUgIT0gamJ2U3RyaW5nKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJt c2coImV4cGVjdGVkIEpTT04gc3RyaW5nIGZvciAlJUwgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIs CisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfc3Ry bGl0KGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNUeXBlbmFtZToKKwkJ CWlmIChqc29udmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJy bXNnKCJleHBlY3RlZCBKU09OIG9iamVjdCBmb3IgJSVUIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQi LAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX3R5 cGVuYW1lKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNPcGVyYXRvcm5h bWU6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJ CQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBvYmplY3QgZm9yICUlTyBlbGVtZW50IFwiJXNcIiwg Z290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNv bnZhbF9vcGVyYXRvcihidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjTnVt YmVyOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2TnVtZXJpYykKKwkJCQllcmVwb3J0KEVS Uk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJ CQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIG51bWVyaWMgZm9yICUlbiBlbGVtZW50IFwiJXNc IiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRf anNvbnZhbF9udW1iZXIoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY1Jv bGU6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJ CQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBvYmplY3QgZm9yICUlUiBlbGVtZW50IFwiJXNcIiwg Z290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNv bnZhbF9yb2xlKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKwl9CisKKwlpZiAoZm10KQorCQll cnJvcl9jb250ZXh0X3N0YWNrID0gc3FsZXJyY29udGV4dC5wcmV2aW91czsKKworCXJldHVybiBy ZXN1bHQ7Cit9CisKKy8qCisgKiBJdGVyYXRlIG9uIHRoZSBlbGVtZW50cyBvZiBhIEpTT04gYXJy YXksIGV4cGFuZGluZyBlYWNoIG9uZSBpbnRvIHRoZSBvdXRwdXQKKyAqIFN0cmluZ0luZm8gcGVy IHRoZSBnaXZlbiBjb252ZXJzaW9uIHNwZWNpZmllciwgc2VwYXJhdGVkIGJ5IHRoZSBnaXZlbgor ICogc2VwYXJhdG9yLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb25iX2FycmF5KFN0cmlu Z0luZm8gYnVmLCBjaGFyICpwYXJhbSwKKwkJCQkgICBKc29uYlZhbHVlICpqc29uYXJyLCBjaGFy ICphcnJheXNlcCwgY29udlNwZWNpZmllciBzcGVjaWZpZXIsCisJCQkJICAgY29uc3QgY2hhciAq Zm10KQoreworCUVycm9yQ29udGV4dENhbGxiYWNrIHNxbGVycmNvbnRleHQ7CisJSnNvbmJDb250 YWluZXIgKmNvbnRhaW5lcjsKKwlKc29uYkl0ZXJhdG9yICAqaXQ7CisJSnNvbmJWYWx1ZQl2Owor CWludAkJCXR5cGU7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCVN0cmluZ0luZm9EYXRhIGFycmF5 ZWxlbTsKKworCS8qIElmIHdlIHdlcmUgZ2l2ZW4gYSBmb3JtYXQgc3RyaW5nLCBzZXR1cCBhbiBl cmVwb3J0KCkgY29udGV4dCBjYWxsYmFjayAqLworCWlmIChmbXQpCisJeworCQlzcWxlcnJjb250 ZXh0LmNhbGxiYWNrID0gZm10c3RyX2Vycm9yX2NhbGxiYWNrOworCQlzcWxlcnJjb250ZXh0LmFy ZyA9ICh2b2lkICopIGZtdDsKKwkJc3FsZXJyY29udGV4dC5wcmV2aW91cyA9IGVycm9yX2NvbnRl eHRfc3RhY2s7CisJCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmc3FsZXJyY29udGV4dDsKKwl9CisK KwlpZiAoanNvbmFyci0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJ KGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygi ZWxlbWVudCBcIiVzXCIgaXMgbm90IGEgSlNPTiBhcnJheSIsIHBhcmFtKSkpOworCisJY29udGFp bmVyID0ganNvbmFyci0+dmFsLmJpbmFyeS5kYXRhOworCWlmICghSnNvbkNvbnRhaW5lcklzQXJy YXkoY29udGFpbmVyKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lO VkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJlbGVtZW50IFwiJXNcIiBpcyBu b3QgYSBKU09OIGFycmF5IiwgcGFyYW0pKSk7CisKKwlpbml0U3RyaW5nSW5mbygmYXJyYXllbGVt KTsKKworCWl0ID0gSnNvbmJJdGVyYXRvckluaXQoY29udGFpbmVyKTsKKwl3aGlsZSAoKHR5cGUg PSBKc29uYkl0ZXJhdG9yTmV4dCgmaXQsICZ2LCB0cnVlKSkgIT0gV0pCX0RPTkUpCisJeworCQlp ZiAodHlwZSA9PSBXSkJfRUxFTSkKKwkJeworCQkJcmVzZXRTdHJpbmdJbmZvKCZhcnJheWVsZW0p OworCisJCQlpZiAoZXhwYW5kX29uZV9qc29uYl9lbGVtZW50KCZhcnJheWVsZW0sIHBhcmFtLCAm diwgc3BlY2lmaWVyLCBOVUxMKSkKKwkJCXsKKwkJCQlpZiAoIWZpcnN0KQorCQkJCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKGJ1ZiwgYXJyYXlzZXApOworCisJCQkJYXBwZW5kQmluYXJ5U3RyaW5n SW5mbyhidWYsIGFycmF5ZWxlbS5kYXRhLCBhcnJheWVsZW0ubGVuKTsKKwkJCQlmaXJzdCA9IGZh bHNlOworCQkJfQorCQl9CisJfQorCisJaWYgKGZtdCkKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9 IHNxbGVycmNvbnRleHQucHJldmlvdXM7Cit9CisKKy8qCisgKiBXb3JraG9yc2UgZm9yIGRkbF9k ZXBhcnNlX2V4cGFuZF9jb21tYW5kLgorICovCitjaGFyICoKK2RkbF9kZXBhcnNlX2pzb25fdG9f c3RyaW5nKGNoYXIgKmpzb25fc3RyKQoreworCURhdHVtCQlkOworCUpzb25iCSAgICpqc29uYjsK KwlTdHJpbmdJbmZvIGJ1ZiA9IChTdHJpbmdJbmZvKSBwYWxsb2MwKHNpemVvZihTdHJpbmdJbmZv RGF0YSkpOworCisJaW5pdFN0cmluZ0luZm8oYnVmKTsKKworCWQgPSBEaXJlY3RGdW5jdGlvbkNh bGwxKGpzb25iX2luLCBQb2ludGVyR2V0RGF0dW0oanNvbl9zdHIpKTsKKwlqc29uYiA9IChKc29u YiAqKSBEYXR1bUdldFBvaW50ZXIoZCk7CisKKwlleHBhbmRfZm10X3JlY3Vyc2l2ZSgmanNvbmIt PnJvb3QsIGJ1Zik7CisKKwlyZXR1cm4gYnVmLT5kYXRhOworfQorCisvKi0tLS0tLQorICogUmV0 dXJucyBhIGZvcm1hdHRlZCBzdHJpbmcgZnJvbSBhIEpTT04gb2JqZWN0LgorICoKKyAqIFRoZSBz dGFydGluZyBwb2ludCBpcyB0aGUgZWxlbWVudCBuYW1lZCAiZm10IiAod2hpY2ggbXVzdCBiZSBh IHN0cmluZykuCisgKiBUaGlzIGZvcm1hdCBzdHJpbmcgbWF5IGNvbnRhaW4gemVybyBvciBtb3Jl ICUtZXNjYXBlcywgd2hpY2ggY29uc2lzdCBvZiBhbgorICogZWxlbWVudCBuYW1lIGVuY2xvc2Vk IGluIHsgfSwgcG9zc2libHkgZm9sbG93ZWQgYnkgYSBjb252ZXJzaW9uIG1vZGlmaWVyLAorICog Zm9sbG93ZWQgYnkgYSBjb252ZXJzaW9uIHNwZWNpZmllci4gIFBvc3NpYmxlIGNvbnZlcnNpb24g c3BlY2lmaWVycyBhcmU6CisgKgorICogJQkJZXhwYW5kIHRvIGEgbGl0ZXJhbCAlLgorICogSQkJ ZXhwYW5kIGFzIGEgc2luZ2xlLCBub24tcXVhbGlmaWVkIGlkZW50aWZpZXIKKyAqIEQJCWV4cGFu ZCBhcyBhIHBvc3NpYmx5LXF1YWxpZmllZCBpZGVudGlmaWVyCisgKiBUCQlleHBhbmQgYXMgYSB0 eXBlIG5hbWUKKyAqIE8JCWV4cGFuZCBhcyBhbiBvcGVyYXRvciBuYW1lCisgKiBMCQlleHBhbmQg YXMgYSBzdHJpbmcgbGl0ZXJhbCAocXVvdGUgdXNpbmcgc2luZ2xlIHF1b3RlcykKKyAqIHMJCWV4 cGFuZCBhcyBhIHNpbXBsZSBzdHJpbmcgKG5vIHF1b3RpbmcpCisgKiBuCQlleHBhbmQgYXMgYSBz aW1wbGUgbnVtYmVyIChubyBxdW90aW5nKQorICogUgkJZXhwYW5kIGFzIGEgcm9sZSBuYW1lIChw b3NzaWJseSBxdW90ZWQgbmFtZSwgb3IgUFVCTElDKQorICoKKyAqIFRoZSBlbGVtZW50IG5hbWUg bWF5IGhhdmUgYW4gb3B0aW9uYWwgc2VwYXJhdG9yIHNwZWNpZmljYXRpb24gcHJlY2VkZWQKKyAq IGJ5IGEgY29sb24uICBJdHMgcHJlc2VuY2UgaW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgaXMg ZXhwZWN0ZWQgdG8gYmUKKyAqIGFuIGFycmF5OyB0aGUgc3BlY2lmaWVkIHNlcGFyYXRvciBpcyB1 c2VkIHRvIGpvaW4gdGhlIGFycmF5IGVsZW1lbnRzLgorICotLS0tLS0KKyAqLworRGF0dW0KK2Rk bF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJdGV4dAkgICAq anNvbiA9IFBHX0dFVEFSR19URVhUX1AoMCk7CisJY2hhcgkgICAqanNvbl9zdHI7CisKKwlqc29u X3N0ciA9IFRleHREYXR1bUdldENTdHJpbmcoanNvbik7CisKKwlQR19SRVRVUk5fVEVYVF9QKENT dHJpbmdHZXRUZXh0RGF0dW0oZGRsX2RlcGFyc2VfanNvbl90b19zdHJpbmcoanNvbl9zdHIpKSk7 Cit9CisKKy8qCisgKiBFcnJvciBjb250ZXh0IGNhbGxiYWNrIGZvciBKU09OIGZvcm1hdCBzdHJp bmcgZXhwYW5zaW9uLgorICoKKyAqIFhYWDogaW5kaWNhdGUgd2hpY2ggZWxlbWVudCB3ZSdyZSBl eHBhbmRpbmcsIGlmIGFwcGxpY2FibGUuCisgKi8KK3N0YXRpYyB2b2lkCitmbXRzdHJfZXJyb3Jf Y2FsbGJhY2sodm9pZCAqYXJnKQoreworCWVycmNvbnRleHQoIndoaWxlIGV4cGFuZGluZyBmb3Jt YXQgc3RyaW5nIFwiJXNcIiIsIChjaGFyICopIGFyZyk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2Uu YwppbmRleCA5OWM5ZjkxLi40MjA1ZGRhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5k cy9zZXF1ZW5jZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMKQEAgLTE3 MDgsNiArMTcwOCwzOSBAQCBwcm9jZXNzX293bmVkX2J5KFJlbGF0aW9uIHNlcXJlbCwgTGlzdCAq b3duZWRfYnksIGJvb2wgZm9yX2lkZW50aXR5KQogCQlyZWxhdGlvbl9jbG9zZSh0YWJsZXJlbCwg Tm9Mb2NrKTsKIH0KIAorLyoKKyAqIFJldHVybiBzZXF1ZW5jZSBwYXJhbWV0ZXJzLCBkZXRhaWxl ZAorICovCitGb3JtX3BnX3NlcXVlbmNlX2RhdGEKK2dldF9zZXF1ZW5jZV92YWx1ZXMoT2lkIHNl cXVlbmNlSWQpCit7CisJQnVmZmVyICAgICAgYnVmOworCVNlcVRhYmxlICAgIGVsbTsKKwlSZWxh dGlvbiAgICBzZXFyZWw7CisJSGVhcFR1cGxlRGF0YSBzZXF0dXBsZTsKKwlGb3JtX3BnX3NlcXVl bmNlX2RhdGEgc2VxOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSByZXRTZXE7CisKKwkvKiBPcGVu IGFuZCBBY2Nlc3NTaGFyZUxvY2sgc2VxdWVuY2UgKi8KKwlpbml0X3NlcXVlbmNlKHNlcXVlbmNl SWQsICZlbG0sICZzZXFyZWwpOworCisJaWYgKHBnX2NsYXNzX2FjbGNoZWNrKHNlcXVlbmNlSWQs IEdldFVzZXJJZCgpLAorCQkJQUNMX1NFTEVDVCB8IEFDTF9VUERBVEUgfCBBQ0xfVVNBR0UpICE9 IEFDTENIRUNLX09LKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lO U1VGRklDSUVOVF9QUklWSUxFR0UpLAorCQkJCQkgZXJybXNnKCJwZXJtaXNzaW9uIGRlbmllZCBm b3Igc2VxdWVuY2UgJXMiLAorCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHNlcXJlbCkp KSk7CisKKwlzZXEgPSByZWFkX3NlcV90dXBsZShzZXFyZWwsICZidWYsICZzZXF0dXBsZSk7CisJ cmV0U2VxID0gcGFsbG9jKHNpemVvZihGb3JtRGF0YV9wZ19zZXF1ZW5jZV9kYXRhKSk7CisKKwlt ZW1jcHkocmV0U2VxLCBzZXEsIHNpemVvZihGb3JtRGF0YV9wZ19zZXF1ZW5jZV9kYXRhKSk7CisK KwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1Zik7CisJcmVsYXRpb25fY2xvc2Uoc2VxcmVsLCBOb0xv Y2spOworCisJcmV0dXJuIHJldFNlcTsKK30KIAogLyoKICAqIFJldHVybiBzZXF1ZW5jZSBwYXJh bWV0ZXJzIGluIGEgbGlzdCBvZiB0aGUgZm9ybSBjcmVhdGVkIGJ5IHRoZSBwYXJzZXIuCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jCmluZGV4IDA2MGZkN2UuLjZhZjIyNTcgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAidXRp bHMvbnVtZXJpYy5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAKLXN0YXRpYyBjaGFy ICpwcmludFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQzMiB0eXBtb2QsIE9pZCB0eXBt b2RvdXQpOwogCiAKIC8qCkBAIC0zNjcsNyArMzY2LDcgQEAgZm9ybWF0X3R5cGVfd2l0aF90eXBl bW9kKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCkKIC8qCiAgKiBBZGQgdHlwbW9kIGRlY29y YXRpb24gdG8gdGhlIGJhc2ljIHR5cGUgbmFtZQogICovCi1zdGF0aWMgY2hhciAqCitjaGFyICoK IHByaW50VHlwbW9kKGNvbnN0IGNoYXIgKnR5cG5hbWUsIGludDMyIHR5cG1vZCwgT2lkIHR5cG1v ZG91dCkKIHsKIAljaGFyCSAgICpyZXM7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9h ZHQvcmVncHJvYy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ3Byb2MuYwppbmRleCA2ZDRj MWMyLi42YjIzNmU1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMKQEAgLTQ0LDYgKzQ0LDggQEAK IHN0YXRpYyB2b2lkIHBhcnNlTmFtZUFuZEFyZ1R5cGVzKGNvbnN0IGNoYXIgKnN0cmluZywgYm9v bCBhbGxvd05vbmUsCiAJCQkJCQkJCSBMaXN0ICoqbmFtZXMsIGludCAqbmFyZ3MsIE9pZCAqYXJn dHlwZXMpOwogCitzdGF0aWMgdm9pZCBmb3JtYXRfcHJvY2VkdXJlX2FyZ3NfaW50ZXJuYWwoRm9y bV9wZ19wcm9jIHByb2Nmb3JtLAorCQkJCQkJCQkJCSAgIFN0cmluZ0luZm8gYnVmLCBib29sIGZv cmNlX3F1YWxpZnkpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCSBVU0VSIEkvTyBST1VU SU5FUwkJCQkJCQkJCQkJCQkJICoKQEAgLTMzMiw2ICszMzQsMjkgQEAgZm9ybWF0X3Byb2NlZHVy ZV9xdWFsaWZpZWQoT2lkIHByb2NlZHVyZV9vaWQpCiB9CiAKIC8qCisgKiBmb3JtYXRfcHJvY2Vk dXJlX2FyZ3MgICAtIGNvbnZlcnRzIHByb2MgT0lEIHRvICIoYXJncykiCisgKi8KK2NoYXIgKgor Zm9ybWF0X3Byb2NlZHVyZV9hcmdzKE9pZCBwcm9jZWR1cmVfb2lkLCBib29sIGZvcmNlX3F1YWxp ZnkpCit7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCUhlYXBUdXBsZSAgIHByb2N0dXA7CisJRm9y bV9wZ19wcm9jIHByb2Nmb3JtOworCisJcHJvY3R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lE LCBPYmplY3RJZEdldERhdHVtKHByb2NlZHVyZV9vaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQocHJvY3R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwcm9j ZWR1cmUgJXUiLCBwcm9jZWR1cmVfb2lkKTsKKwlwcm9jZm9ybSA9IChGb3JtX3BnX3Byb2MpIEdF VFNUUlVDVChwcm9jdHVwKTsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCWZvcm1hdF9wcm9j ZWR1cmVfYXJnc19pbnRlcm5hbChwcm9jZm9ybSwgJmJ1ZiwgZm9yY2VfcXVhbGlmeSk7CisKKwlS ZWxlYXNlU3lzQ2FjaGUocHJvY3R1cCk7CisKKwlyZXR1cm4gYnVmLmRhdGE7Cit9CisKKy8qCiAg KiBmb3JtYXRfcHJvY2VkdXJlX2V4dGVuZGVkIC0gY29udmVydHMgcHJvY2VkdXJlIE9JRCB0byAi cHJvX25hbWUoYXJncykiCiAgKgogICogVGhpcyBleHBvcnRzIHRoZSB1c2VmdWwgZnVuY3Rpb25h bGl0eSBvZiByZWdwcm9jZWR1cmVvdXQgZm9yIHVzZQpAQCAtMjA2MCwzICsyMDg1LDMwIEBAIHBh cnNlTmFtZUFuZEFyZ1R5cGVzKGNvbnN0IGNoYXIgKnN0cmluZywgYm9vbCBhbGxvd05vbmUsIExp c3QgKipuYW1lcywKIAogCXBmcmVlKHJhd25hbWUpOwogfQorCisvKgorICogQXBwZW5kIHRoZSBw YXJlbnRoaXNlZCBhcmd1bWVudHMgb2YgdGhlIGdpdmVuIHBnX3Byb2Mgcm93IGludG8gdGhlIG91 dHB1dAorICogYnVmZmVyLiAgZm9yY2VfcXVhbGlmeSBpbmRpY2F0ZXMgd2hldGhlciB0byBzY2hl bWEtcXVhbGlmeSB0eXBlIG5hbWVzCisgKiByZWdhcmRsZXNzIG9mIHZpc2liaWxpdHkuCisgKi8K K3N0YXRpYyB2b2lkCitmb3JtYXRfcHJvY2VkdXJlX2FyZ3NfaW50ZXJuYWwoRm9ybV9wZ19wcm9j IHByb2Nmb3JtLCBTdHJpbmdJbmZvIGJ1ZiwKKwkJCQkJCQkgICBib29sIGZvcmNlX3F1YWxpZnkp Cit7CisJaW50CQkJaTsKKwlpbnQJCQluYXJncyA9IHByb2Nmb3JtLT5wcm9uYXJnczsKKworCWFw cGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJygnKTsKKwlmb3IgKGkgPSAwOyBpIDwgbmFyZ3M7IGkr KykKKwl7CisJCU9pZAkJCXRoaXNhcmd0eXBlID0gcHJvY2Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVl c1tpXTsKKworCQlpZiAoaSA+IDApCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcsJyk7 CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLAorCQkJCQkJCSAgIGZvcmNlX3F1YWxpZnkg PworCQkJCQkJCSAgIGZvcm1hdF90eXBlX2JlX3F1YWxpZmllZCh0aGlzYXJndHlwZSkgOgorCQkJ CQkJCSAgIGZvcm1hdF90eXBlX2JlKHRoaXNhcmd0eXBlKSk7CisJfQorCWFwcGVuZFN0cmluZ0lu Zm9DaGFyKGJ1ZiwgJyknKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9y dWxldXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwppbmRleCBkNTc1 YWEwLi45NWU2NzgwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxz LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCkBAIC0zNTgsNyArMzU4 LDYgQEAgc3RhdGljIGludAlwcmludF9mdW5jdGlvbl9hcmd1bWVudHMoU3RyaW5nSW5mbyBidWYs IEhlYXBUdXBsZSBwcm9jdHVwLAogCQkJCQkJCQkJIGJvb2wgcHJpbnRfdGFibGVfYXJncywgYm9v bCBwcmludF9kZWZhdWx0cyk7CiBzdGF0aWMgdm9pZCBwcmludF9mdW5jdGlvbl9yZXR0eXBlKFN0 cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7CiBzdGF0aWMgdm9pZCBwcmludF9mdW5j dGlvbl90cmZ0eXBlcyhTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXApOwotc3RhdGlj IHZvaWQgcHJpbnRfZnVuY3Rpb25fc3FsYm9keShTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHBy b2N0dXApOwogc3RhdGljIHZvaWQgc2V0X3J0YWJsZV9uYW1lcyhkZXBhcnNlX25hbWVzcGFjZSAq ZHBucywgTGlzdCAqcGFyZW50X25hbWVzcGFjZXMsCiAJCQkJCQkJIEJpdG1hcHNldCAqcmVsc191 c2VkKTsKIHN0YXRpYyB2b2lkIHNldF9kZXBhcnNlX2Zvcl9xdWVyeShkZXBhcnNlX25hbWVzcGFj ZSAqZHBucywgUXVlcnkgKnF1ZXJ5LApAQCAtNDg4LDIyICs0ODcsMTUgQEAgc3RhdGljIHZvaWQg Z2V0X2Zyb21fY2xhdXNlX2NvbGRlZmxpc3QoUmFuZ2VUYmxGdW5jdGlvbiAqcnRmdW5jLAogCQkJ CQkJCQkJICAgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKIHN0YXRpYyB2b2lkIGdldF90YWJs ZXNhbXBsZV9kZWYoVGFibGVTYW1wbGVDbGF1c2UgKnRhYmxlc2FtcGxlLAogCQkJCQkJCQlkZXBh cnNlX2NvbnRleHQgKmNvbnRleHQpOwotc3RhdGljIHZvaWQgZ2V0X29wY2xhc3NfbmFtZShPaWQg b3BjbGFzcywgT2lkIGFjdHVhbF9kYXRhdHlwZSwKLQkJCQkJCQkgU3RyaW5nSW5mbyBidWYpOwog c3RhdGljIE5vZGUgKnByb2Nlc3NJbmRpcmVjdGlvbihOb2RlICpub2RlLCBkZXBhcnNlX2NvbnRl eHQgKmNvbnRleHQpOwogc3RhdGljIHZvaWQgcHJpbnRTdWJzY3JpcHRzKFN1YnNjcmlwdGluZ1Jl ZiAqc2JzcmVmLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwogc3RhdGljIGNoYXIgKmdldF9y ZWxhdGlvbl9uYW1lKE9pZCByZWxpZCk7CiBzdGF0aWMgY2hhciAqZ2VuZXJhdGVfcmVsYXRpb25f bmFtZShPaWQgcmVsaWQsIExpc3QgKm5hbWVzcGFjZXMpOwogc3RhdGljIGNoYXIgKmdlbmVyYXRl X3F1YWxpZmllZF9yZWxhdGlvbl9uYW1lKE9pZCByZWxpZCk7Ci1zdGF0aWMgY2hhciAqZ2VuZXJh dGVfZnVuY3Rpb25fbmFtZShPaWQgZnVuY2lkLCBpbnQgbmFyZ3MsCi0JCQkJCQkJCQlMaXN0ICph cmduYW1lcywgT2lkICphcmd0eXBlcywKLQkJCQkJCQkJCWJvb2wgaGFzX3ZhcmlhZGljLCBib29s ICp1c2VfdmFyaWFkaWNfcCwKLQkJCQkJCQkJCVBhcnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2lu ZCk7CiBzdGF0aWMgY2hhciAqZ2VuZXJhdGVfb3BlcmF0b3JfbmFtZShPaWQgb3BlcmlkLCBPaWQg YXJnMSwgT2lkIGFyZzIpOwogc3RhdGljIHZvaWQgYWRkX2Nhc3RfdG8oU3RyaW5nSW5mbyBidWYs IE9pZCB0eXBpZCk7CiBzdGF0aWMgY2hhciAqZ2VuZXJhdGVfcXVhbGlmaWVkX3R5cGVfbmFtZShP aWQgdHlwaWQpOwogc3RhdGljIHRleHQgKnN0cmluZ190b190ZXh0KGNoYXIgKnN0cik7Ci1zdGF0 aWMgY2hhciAqZmxhdHRlbl9yZWxvcHRpb25zKE9pZCByZWxpZCk7CiBzdGF0aWMgdm9pZCBnZXRf cmVsb3B0aW9ucyhTdHJpbmdJbmZvIGJ1ZiwgRGF0dW0gcmVsb3B0aW9ucyk7CiBzdGF0aWMgdm9p ZCBnZXRfanNvbl9wYXRoX3NwZWMoTm9kZSAqcGF0aF9zcGVjLCBkZXBhcnNlX2NvbnRleHQgKmNv bnRleHQsCiAJCQkJCQkJICAgYm9vbCBzaG93aW1wbGljaXQpOwpAQCAtMTAyNSw2NSArMTAxNywx MiBAQCBwZ19nZXRfdHJpZ2dlcmRlZl93b3JrZXIoT2lkIHRyaWdpZCwgYm9vbCBwcmV0dHkpCiAJ aWYgKCFpc251bGwpCiAJewogCQlOb2RlCSAgICpxdWFsOwotCQljaGFyCQlyZWxraW5kOwotCQlk ZXBhcnNlX2NvbnRleHQgY29udGV4dDsKLQkJZGVwYXJzZV9uYW1lc3BhY2UgZHBuczsKLQkJUmFu Z2VUYmxFbnRyeSAqb2xkcnRlOwotCQlSYW5nZVRibEVudHJ5ICpuZXdydGU7Ci0KLQkJYXBwZW5k U3RyaW5nSW5mb1N0cmluZygmYnVmLCAiV0hFTiAoIik7CisJCWNoYXIgICAgICAgKnF1YWxzdHI7 CiAKIAkJcXVhbCA9IHN0cmluZ1RvTm9kZShUZXh0RGF0dW1HZXRDU3RyaW5nKHZhbHVlKSk7CisJ CXF1YWxzdHIgPSBwZ19nZXRfdHJpZ2dlcl93aGVuY2xhdXNlKHRyaWdyZWMsIHF1YWwsIHByZXR0 eSk7CiAKLQkJcmVsa2luZCA9IGdldF9yZWxfcmVsa2luZCh0cmlncmVjLT50Z3JlbGlkKTsKLQot CQkvKiBCdWlsZCBtaW5pbWFsIE9MRCBhbmQgTkVXIFJURXMgZm9yIHRoZSByZWwgKi8KLQkJb2xk cnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7Ci0JCW9sZHJ0ZS0+cnRla2luZCA9IFJURV9S RUxBVElPTjsKLQkJb2xkcnRlLT5yZWxpZCA9IHRyaWdyZWMtPnRncmVsaWQ7Ci0JCW9sZHJ0ZS0+ cmVsa2luZCA9IHJlbGtpbmQ7Ci0JCW9sZHJ0ZS0+cmVsbG9ja21vZGUgPSBBY2Nlc3NTaGFyZUxv Y2s7Ci0JCW9sZHJ0ZS0+YWxpYXMgPSBtYWtlQWxpYXMoIm9sZCIsIE5JTCk7Ci0JCW9sZHJ0ZS0+ ZXJlZiA9IG9sZHJ0ZS0+YWxpYXM7Ci0JCW9sZHJ0ZS0+bGF0ZXJhbCA9IGZhbHNlOwotCQlvbGRy dGUtPmluaCA9IGZhbHNlOwotCQlvbGRydGUtPmluRnJvbUNsID0gdHJ1ZTsKLQotCQluZXdydGUg PSBtYWtlTm9kZShSYW5nZVRibEVudHJ5KTsKLQkJbmV3cnRlLT5ydGVraW5kID0gUlRFX1JFTEFU SU9OOwotCQluZXdydGUtPnJlbGlkID0gdHJpZ3JlYy0+dGdyZWxpZDsKLQkJbmV3cnRlLT5yZWxr aW5kID0gcmVsa2luZDsKLQkJbmV3cnRlLT5yZWxsb2NrbW9kZSA9IEFjY2Vzc1NoYXJlTG9jazsK LQkJbmV3cnRlLT5hbGlhcyA9IG1ha2VBbGlhcygibmV3IiwgTklMKTsKLQkJbmV3cnRlLT5lcmVm ID0gbmV3cnRlLT5hbGlhczsKLQkJbmV3cnRlLT5sYXRlcmFsID0gZmFsc2U7Ci0JCW5ld3J0ZS0+ aW5oID0gZmFsc2U7Ci0JCW5ld3J0ZS0+aW5Gcm9tQ2wgPSB0cnVlOwotCi0JCS8qIEJ1aWxkIHR3 by1lbGVtZW50IHJ0YWJsZSAqLwotCQltZW1zZXQoJmRwbnMsIDAsIHNpemVvZihkcG5zKSk7Ci0J CWRwbnMucnRhYmxlID0gbGlzdF9tYWtlMihvbGRydGUsIG5ld3J0ZSk7Ci0JCWRwbnMuc3VicGxh bnMgPSBOSUw7Ci0JCWRwbnMuY3RlcyA9IE5JTDsKLQkJZHBucy5hcHBlbmRyZWxzID0gTlVMTDsK LQkJc2V0X3J0YWJsZV9uYW1lcygmZHBucywgTklMLCBOVUxMKTsKLQkJc2V0X3NpbXBsZV9jb2x1 bW5fbmFtZXMoJmRwbnMpOwotCi0JCS8qIFNldCB1cCBjb250ZXh0IHdpdGggb25lLWRlZXAgbmFt ZXNwYWNlIHN0YWNrICovCi0JCWNvbnRleHQuYnVmID0gJmJ1ZjsKLQkJY29udGV4dC5uYW1lc3Bh Y2VzID0gbGlzdF9tYWtlMSgmZHBucyk7Ci0JCWNvbnRleHQud2luZG93Q2xhdXNlID0gTklMOwot CQljb250ZXh0LndpbmRvd1RMaXN0ID0gTklMOwotCQljb250ZXh0LnZhcnByZWZpeCA9IHRydWU7 Ci0JCWNvbnRleHQucHJldHR5RmxhZ3MgPSBHRVRfUFJFVFRZX0ZMQUdTKHByZXR0eSk7Ci0JCWNv bnRleHQud3JhcENvbHVtbiA9IFdSQVBfQ09MVU1OX0RFRkFVTFQ7Ci0JCWNvbnRleHQuaW5kZW50 TGV2ZWwgPSBQUkVUVFlJTkRFTlRfU1REOwotCQljb250ZXh0LnNwZWNpYWxfZXhwcmtpbmQgPSBF WFBSX0tJTkRfTk9ORTsKLQkJY29udGV4dC5hcHBlbmRwYXJlbnRzID0gTlVMTDsKLQotCQlnZXRf cnVsZV9leHByKHF1YWwsICZjb250ZXh0LCBmYWxzZSk7Ci0KLQkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZygmYnVmLCAiKSAiKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiV0hFTiAoJXMpICIs IHF1YWxzdHIpOwogCX0KIAogCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIkVYRUNVVEUgRlVOQ1RJ T04gJXMoIiwKQEAgLTExMjQsNiArMTA2Myw2NCBAQCBwZ19nZXRfdHJpZ2dlcmRlZl93b3JrZXIo T2lkIHRyaWdpZCwgYm9vbCBwcmV0dHkpCiAJcmV0dXJuIGJ1Zi5kYXRhOwogfQogCitjaGFyICoK K3BnX2dldF90cmlnZ2VyX3doZW5jbGF1c2UoRm9ybV9wZ190cmlnZ2VyIHRyaWdyZWMsIE5vZGUg KndoZW5DbGF1c2UsIGJvb2wgcHJldHR5KQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwljaGFy ICAgICAgICByZWxraW5kOworCWRlcGFyc2VfY29udGV4dCBjb250ZXh0OworCWRlcGFyc2VfbmFt ZXNwYWNlIGRwbnM7CisJUmFuZ2VUYmxFbnRyeSAqb2xkcnRlOworCVJhbmdlVGJsRW50cnkgKm5l d3J0ZTsKKworICAgaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisKKyAgIHJlbGtpbmQgPSBnZXRfcmVs X3JlbGtpbmQodHJpZ3JlYy0+dGdyZWxpZCk7CisKKyAgIC8qIEJ1aWxkIG1pbmltYWwgT0xEIGFu ZCBORVcgUlRFcyBmb3IgdGhlIHJlbCAqLworICAgb2xkcnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxF bnRyeSk7CisgICBvbGRydGUtPnJ0ZWtpbmQgPSBSVEVfUkVMQVRJT047CisgICBvbGRydGUtPnJl bGlkID0gdHJpZ3JlYy0+dGdyZWxpZDsKKyAgIG9sZHJ0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7Cisg ICBvbGRydGUtPmFsaWFzID0gbWFrZUFsaWFzKCJvbGQiLCBOSUwpOworICAgb2xkcnRlLT5lcmVm ID0gb2xkcnRlLT5hbGlhczsKKyAgIG9sZHJ0ZS0+bGF0ZXJhbCA9IGZhbHNlOworICAgb2xkcnRl LT5pbmggPSBmYWxzZTsKKyAgIG9sZHJ0ZS0+aW5Gcm9tQ2wgPSB0cnVlOworCisgICBuZXdydGUg PSBtYWtlTm9kZShSYW5nZVRibEVudHJ5KTsKKyAgIG5ld3J0ZS0+cnRla2luZCA9IFJURV9SRUxB VElPTjsKKyAgIG5ld3J0ZS0+cmVsaWQgPSB0cmlncmVjLT50Z3JlbGlkOworICAgbmV3cnRlLT5y ZWxraW5kID0gcmVsa2luZDsKKyAgIG5ld3J0ZS0+YWxpYXMgPSBtYWtlQWxpYXMoIm5ldyIsIE5J TCk7CisgICBuZXdydGUtPmVyZWYgPSBuZXdydGUtPmFsaWFzOworICAgbmV3cnRlLT5sYXRlcmFs ID0gZmFsc2U7CisgICBuZXdydGUtPmluaCA9IGZhbHNlOworICAgbmV3cnRlLT5pbkZyb21DbCA9 IHRydWU7CisKKyAgIC8qIEJ1aWxkIHR3by1lbGVtZW50IHJ0YWJsZSAqLworICAgbWVtc2V0KCZk cG5zLCAwLCBzaXplb2YoZHBucykpOworICAgZHBucy5ydGFibGUgPSBsaXN0X21ha2UyKG9sZHJ0 ZSwgbmV3cnRlKTsKKyAgIGRwbnMuY3RlcyA9IE5JTDsKKyAgIHNldF9ydGFibGVfbmFtZXMoJmRw bnMsIE5JTCwgTlVMTCk7CisgICBzZXRfc2ltcGxlX2NvbHVtbl9uYW1lcygmZHBucyk7CisKKyAg IC8qIFNldCB1cCBjb250ZXh0IHdpdGggb25lLWRlZXAgbmFtZXNwYWNlIHN0YWNrICovCisgICBj b250ZXh0LmJ1ZiA9ICZidWY7CisgICBjb250ZXh0Lm5hbWVzcGFjZXMgPSBsaXN0X21ha2UxKCZk cG5zKTsKKyAgIGNvbnRleHQud2luZG93Q2xhdXNlID0gTklMOworICAgY29udGV4dC53aW5kb3dU TGlzdCA9IE5JTDsKKyAgIGNvbnRleHQudmFycHJlZml4ID0gdHJ1ZTsKKyAgIGNvbnRleHQucHJl dHR5RmxhZ3MgPSBwcmV0dHkgPyBQUkVUVFlGTEFHX1BBUkVOIHwgUFJFVFRZRkxBR19JTkRFTlQg OiBQUkVUVFlGTEFHX0lOREVOVDsKKyAgIGNvbnRleHQud3JhcENvbHVtbiA9IFdSQVBfQ09MVU1O X0RFRkFVTFQ7CisgICBjb250ZXh0LmluZGVudExldmVsID0gUFJFVFRZSU5ERU5UX1NURDsKKyAg IGNvbnRleHQuc3BlY2lhbF9leHBya2luZCA9IEVYUFJfS0lORF9OT05FOworCisgICBnZXRfcnVs ZV9leHByKHdoZW5DbGF1c2UsICZjb250ZXh0LCBmYWxzZSk7CisKKyAgIHJldHVybiBidWYuZGF0 YTsKK30KKwogLyogLS0tLS0tLS0tLQogICogcGdfZ2V0X2luZGV4ZGVmCQkJLSBHZXQgdGhlIGRl ZmluaXRpb24gb2YgYW4gaW5kZXgKICAqCkBAIC0xODkxLDYgKzE4ODgsMTMgQEAgcGdfZ2V0X3Bh cnRrZXlkZWZfY29sdW1ucyhPaWQgcmVsaWQsIGJvb2wgcHJldHR5KQogCXJldHVybiBwZ19nZXRf cGFydGtleWRlZl93b3JrZXIocmVsaWQsIHByZXR0eUZsYWdzLCB0cnVlLCBmYWxzZSk7CiB9CiAK Ky8qIEludGVybmFsIHZlcnNpb24gdGhhdCByZXBvcnRzIHRoZSBmdWxsIHBhcnRpdGlvbiBrZXkg ZGVmaW5pdGlvbiAqLworY2hhciAqCitwZ19nZXRfcGFydGtleWRlZl9zaW1wbGUoT2lkIHJlbGlk KQoreworCXJldHVybiBwZ19nZXRfcGFydGtleWRlZl93b3JrZXIocmVsaWQsIDAsIGZhbHNlLCBm YWxzZSk7Cit9CisKIC8qCiAgKiBJbnRlcm5hbCB3b3JraG9yc2UgdG8gZGVjb21waWxlIGEgcGFy dGl0aW9uIGtleSBkZWZpbml0aW9uLgogICovCkBAIC0yMTQ0LDYgKzIxNDgsMTUgQEAgcGdfZ2V0 X2NvbnN0cmFpbnRkZWZfZXh0KFBHX0ZVTkNUSU9OX0FSR1MpCiB9CiAKIC8qCisgKiBJbnRlcm5h bCB2ZXJzaW9uIHRoYXQgcmV0dXJucyBkZWZpbml0aW9uIG9mIGEgQ09OU1RSQUlOVCBjb21tYW5k CisgKi8KK2NoYXIgKgorcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoT2lkIGNv bnN0cmFpbnRJZCkKK3sKKwlyZXR1cm4gcGdfZ2V0X2NvbnN0cmFpbnRkZWZfd29ya2VyKGNvbnN0 cmFpbnRJZCwgZmFsc2UsIDAsIGZhbHNlKTsKK30KKworLyoKICAqIEludGVybmFsIHZlcnNpb24g dGhhdCByZXR1cm5zIGEgZnVsbCBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQgY29tbWFu ZAogICovCiBjaGFyICoKQEAgLTM1MTMsNyArMzUyNiw3IEBAIHBnX2dldF9mdW5jdGlvbl9hcmdf ZGVmYXVsdChQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9URVhUX1Aoc3RyaW5nX3RvX3Rl eHQoc3RyKSk7CiB9CiAKLXN0YXRpYyB2b2lkCit2b2lkCiBwcmludF9mdW5jdGlvbl9zcWxib2R5 KFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCkKIHsKIAlpbnQJCQludW1hcmdzOwpA QCAtMTIwNTMsNyArMTIwNjYsNyBAQCBnZXRfdGFibGVzYW1wbGVfZGVmKFRhYmxlU2FtcGxlQ2xh dXNlICp0YWJsZXNhbXBsZSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KQogICogYWN0dWFsX2Rh dGF0eXBlLiAgKElmIHlvdSBkb24ndCB3YW50IHRoaXMgYmVoYXZpb3IsIGp1c3QgcGFzcwogICog SW52YWxpZE9pZCBmb3IgYWN0dWFsX2RhdGF0eXBlLikKICAqLwotc3RhdGljIHZvaWQKK3ZvaWQK IGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1YWxfZGF0YXR5cGUsCiAJCQkJ IFN0cmluZ0luZm8gYnVmKQogewpAQCAtMTI0NDcsNyArMTI0NjAsNyBAQCBnZW5lcmF0ZV9xdWFs aWZpZWRfcmVsYXRpb25fbmFtZShPaWQgcmVsaWQpCiAgKgogICogVGhlIHJlc3VsdCBpbmNsdWRl cyBhbGwgbmVjZXNzYXJ5IHF1b3RpbmcgYW5kIHNjaGVtYS1wcmVmaXhpbmcuCiAgKi8KLXN0YXRp YyBjaGFyICoKK2NoYXIgKgogZ2VuZXJhdGVfZnVuY3Rpb25fbmFtZShPaWQgZnVuY2lkLCBpbnQg bmFyZ3MsIExpc3QgKmFyZ25hbWVzLCBPaWQgKmFyZ3R5cGVzLAogCQkJCQkgICBib29sIGhhc192 YXJpYWRpYywgYm9vbCAqdXNlX3ZhcmlhZGljX3AsCiAJCQkJCSAgIFBhcnNlRXhwcktpbmQgc3Bl Y2lhbF9leHBya2luZCkKQEAgLTEyODMzLDcgKzEyODQ2LDcgQEAgZ2V0X3JlbG9wdGlvbnMoU3Ry aW5nSW5mbyBidWYsIERhdHVtIHJlbG9wdGlvbnMpCiAvKgogICogR2VuZXJhdGUgYSBDIHN0cmlu ZyByZXByZXNlbnRpbmcgYSByZWxhdGlvbidzIHJlbG9wdGlvbnMsIG9yIE5VTEwgaWYgbm9uZS4K ICAqLwotc3RhdGljIGNoYXIgKgorY2hhciAqCiBmbGF0dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlk KQogewogCWNoYXIJICAgKnJlc3VsdCA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRl eCBiZTQ3NTgzLi4zZTdmMzY0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTExODk0LDQg KzExODk0LDEwIEBACiAgIHByb3JldHR5cGUgPT4gJ2J5dGVhJywgcHJvYXJndHlwZXMgPT4gJ3Bn X2JyaW5fbWlubWF4X211bHRpX3N1bW1hcnknLAogICBwcm9zcmMgPT4gJ2JyaW5fbWlubWF4X211 bHRpX3N1bW1hcnlfc2VuZCcgfSwKIAoreyBvaWQgPT4gJzQ2NDInLCBkZXNjciA9PiAnZGVwYXJz ZSB0aGUgRERMIGNvbW1hbmQgaW50byBqc29uIGZvcm1hdCBzdHJpbmcnLAorICBwcm9uYW1lID0+ ICdkZGxfZGVwYXJzZV90b19qc29uJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCisgIHByb2FyZ3R5 cGVzID0+ICdwZ19kZGxfY29tbWFuZCcsIHByb3NyYyA9PiAnZGRsX2RlcGFyc2VfdG9fanNvbicg fSwKK3sgb2lkID0+ICc0NjQzJywgZGVzY3IgPT4gJ2V4cGFuZCBqc29uIGZvcm1hdCBEREwgdG8g YSBwbGFpbiBEREwgY29tbWFuZCcsCisgIHByb25hbWUgPT4gJ2RkbF9kZXBhcnNlX2V4cGFuZF9j b21tYW5kJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCisgIHByb2FyZ3R5cGVzID0+ICd0ZXh0Jywg cHJvc3JjID0+ICdkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZCcgfSwKIF0KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9z ZXF1ZW5jZS5oCmluZGV4IGQzOGMwZTIuLjRjYTg0YjIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2NvbW1hbmRzL3NlcXVlbmNlLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2Uu aApAQCAtNTQsNiArNTQsNyBAQCB0eXBlZGVmIHN0cnVjdCB4bF9zZXFfcmVjCiBleHRlcm4gaW50 NjQgbmV4dHZhbF9pbnRlcm5hbChPaWQgcmVsaWQsIGJvb2wgY2hlY2tfcGVybWlzc2lvbnMpOwog ZXh0ZXJuIERhdHVtIG5leHR2YWwoUEdfRlVOQ1RJT05fQVJHUyk7CiBleHRlcm4gTGlzdCAqc2Vx dWVuY2Vfb3B0aW9ucyhPaWQgcmVsaWQpOworZXh0ZXJuIEZvcm1fcGdfc2VxdWVuY2VfZGF0YSBn ZXRfc2VxdWVuY2VfdmFsdWVzKE9pZCBzZXF1ZW5jZUlkKTsKIAogZXh0ZXJuIE9iamVjdEFkZHJl c3MgRGVmaW5lU2VxdWVuY2UoUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVTZXFTdG10ICpzdG10 KTsKIGV4dGVybiBPYmplY3RBZGRyZXNzIEFsdGVyU2VxdWVuY2UoUGFyc2VTdGF0ZSAqcHN0YXRl LCBBbHRlclNlcVN0bXQgKnN0bXQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdGNvcC9kZGxf ZGVwYXJzZS5oIGIvc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZmRmNDcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5j bHVkZS90Y29wL2RkbF9kZXBhcnNlLmgKQEAgLTAsMCArMSwyMyBAQAorLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKgorICogZGRsX2RlcGFyc2UuaAorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykg MTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlv bnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlm b3JuaWEKKyAqCisgKiBzcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmgKKyAqCisgKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBERExfREVQQVJTRV9ICisjZGVmaW5lIERETF9ERVBB UlNFX0gKKworI2luY2x1ZGUgInRjb3AvZGVwYXJzZV91dGlsaXR5LmgiCisKK2V4dGVybiBjaGFy ICpkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQsIGJvb2wgdmVy Ym9zZV9tb2RlKTsKK2V4dGVybiBjaGFyICpkZGxfZGVwYXJzZV9qc29uX3RvX3N0cmluZyhjaGFy ICpqc29uYik7CitleHRlcm4gY2hhciAqZGVwYXJzZV9kcm9wX2NvbW1hbmQoY29uc3QgY2hhciAq b2JqaWRlbnRpdHksIGNvbnN0IGNoYXIgKm9iamVjdHR5cGUsCisJCQkJCQkJCSAgRHJvcEJlaGF2 aW9yIGJlaGF2aW9yKTsKKworCisjZW5kaWYJCS8qIERETF9ERVBBUlNFX0ggKi8KZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmggYi9zcmMvaW5jbHVkZS90Y29w L2RlcGFyc2VfdXRpbGl0eS5oCmluZGV4IDk0ZGUxM2QuLmI1MzI5NGIgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9k ZXBhcnNlX3V0aWxpdHkuaApAQCAtNjIsNiArNjIsNyBAQCB0eXBlZGVmIHN0cnVjdCBDb2xsZWN0 ZWRDb21tYW5kCiAJCXsKIAkJCU9pZAkJCW9iamVjdElkOwogCQkJT2lkCQkJY2xhc3NJZDsKKwkJ CWJvb2wJCXJld3JpdGU7CiAJCQlMaXN0CSAgICpzdWJjbWRzOwogCQl9CQkJYWx0ZXJUYWJsZTsK IApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaCBiL3NyYy9pbmNsdWRl L3V0aWxzL2J1aWx0aW5zLmgKaW5kZXggMjIxYzNlNi4uODEzZWFmZCAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlu cy5oCkBAIC0xMTQsMTAgKzExNCwxMiBAQCBleHRlcm4gRGF0dW0gbnVtZXJpY19mbG9hdDhfbm9f b3ZlcmZsb3coUEdfRlVOQ1RJT05fQVJHUyk7CiAjZGVmaW5lIEZPUk1BVF9UWVBFX0ZPUkNFX1FV QUxJRlkJMHgwNAkvKiBmb3JjZSBxdWFsaWZpY2F0aW9uIG9mIHR5cGUgKi8KICNkZWZpbmUgRk9S TUFUX1RZUEVfSU5WQUxJRF9BU19OVUxMCTB4MDgJLyogTlVMTCBpZiB1bmRlZmluZWQgKi8KIGV4 dGVybiBjaGFyICpmb3JtYXRfdHlwZV9leHRlbmRlZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVt b2QsIGJpdHMxNiBmbGFncyk7CitleHRlcm4gY2hhciAqZm9ybWF0X3Byb2NlZHVyZV9hcmdzKE9p ZCBwcm9jZWR1cmVfb2lkLCBib29sIGZvcmNlX3F1YWxpZnkpOwogCiBleHRlcm4gY2hhciAqZm9y bWF0X3R5cGVfYmUoT2lkIHR5cGVfb2lkKTsKIGV4dGVybiBjaGFyICpmb3JtYXRfdHlwZV9iZV9x dWFsaWZpZWQoT2lkIHR5cGVfb2lkKTsKIGV4dGVybiBjaGFyICpmb3JtYXRfdHlwZV93aXRoX3R5 cGVtb2QoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kKTsKK2V4dGVybiBjaGFyICpwcmludFR5 cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQzMiB0eXBtb2QsIE9pZCB0eXBtb2RvdXQpOwog CiBleHRlcm4gaW50MzIgdHlwZV9tYXhpbXVtX3NpemUoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBl bW9kKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0aWxzLmggYi9zcmMv aW5jbHVkZS91dGlscy9ydWxldXRpbHMuaAppbmRleCA3ZDQ4OTcxLi4zZDY5YTYwIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaAorKysgYi9zcmMvaW5jbHVkZS91dGls cy9ydWxldXRpbHMuaApAQCAtMTMsNiArMTMsNyBAQAogI2lmbmRlZiBSVUxFVVRJTFNfSAogI2Rl ZmluZSBSVUxFVVRJTFNfSAogCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190cmlnZ2VyLmgiCiAjaW5j bHVkZSAibm9kZXMvbm9kZXMuaCIKICNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVzLmgiCiAjaW5j bHVkZSAibm9kZXMvcGdfbGlzdC5oIgpAQCAtMjMsMTIgKzI0LDE2IEBAIHN0cnVjdCBQbGFubmVk U3RtdDsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9pbmRleGRlZl9zdHJpbmcoT2lkIGluZGV4cmVs aWQpOwogZXh0ZXJuIGNoYXIgKnBnX2dldF9pbmRleGRlZl9jb2x1bW5zKE9pZCBpbmRleHJlbGlk LCBib29sIHByZXR0eSk7CitleHRlcm4gY2hhciAqcGdfZ2V0X3RyaWdnZXJfd2hlbmNsYXVzZShG b3JtX3BnX3RyaWdnZXIgdHJpZ3JlYywKKwkJCQkJCQkJCSAgIE5vZGUgKndoZW5DbGF1c2UsIGJv b2wgcHJldHR5KTsKIGV4dGVybiBjaGFyICpwZ19nZXRfcXVlcnlkZWYoUXVlcnkgKnF1ZXJ5LCBi b29sIHByZXR0eSk7CiAKIGV4dGVybiBjaGFyICpwZ19nZXRfcGFydGtleWRlZl9jb2x1bW5zKE9p ZCByZWxpZCwgYm9vbCBwcmV0dHkpOworZXh0ZXJuIGNoYXIgKnBnX2dldF9wYXJ0a2V5ZGVmX3Np bXBsZShPaWQgcmVsaWQpOwogZXh0ZXJuIGNoYXIgKnBnX2dldF9wYXJ0Y29uc3RyZGVmX3N0cmlu ZyhPaWQgcGFydGl0aW9uSWQsIGNoYXIgKmFsaWFzbmFtZSk7CiAKIGV4dGVybiBjaGFyICpwZ19n ZXRfY29uc3RyYWludGRlZl9jb21tYW5kKE9pZCBjb25zdHJhaW50SWQpOworZXh0ZXJuIGNoYXIg KnBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKE9pZCBjb25zdHJhaW50SWQpOwog ZXh0ZXJuIGNoYXIgKmRlcGFyc2VfZXhwcmVzc2lvbihOb2RlICpleHByLCBMaXN0ICpkcGNvbnRl eHQsCiAJCQkJCQkJCWJvb2wgZm9yY2VwcmVmaXgsIGJvb2wgc2hvd2ltcGxpY2l0KTsKIGV4dGVy biBMaXN0ICpkZXBhcnNlX2NvbnRleHRfZm9yKGNvbnN0IGNoYXIgKmFsaWFzbmFtZSwgT2lkIHJl bGlkKTsKQEAgLTQwLDggKzQ1LDE2IEBAIGV4dGVybiBMaXN0ICpzZWxlY3RfcnRhYmxlX25hbWVz X2Zvcl9leHBsYWluKExpc3QgKnJ0YWJsZSwKIAkJCQkJCQkJCQkJIEJpdG1hcHNldCAqcmVsc191 c2VkKTsKIGV4dGVybiBjaGFyICpnZW5lcmF0ZV9jb2xsYXRpb25fbmFtZShPaWQgY29sbGlkKTsK IGV4dGVybiBjaGFyICpnZW5lcmF0ZV9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MpOworZXh0ZXJu IGNoYXIgKmdlbmVyYXRlX2Z1bmN0aW9uX25hbWUoT2lkIGZ1bmNpZCwgaW50IG5hcmdzLCBMaXN0 ICphcmduYW1lcywKKwkJCQkJCQkJCU9pZCAqYXJndHlwZXMsIGJvb2wgaGFzX3ZhcmlhZGljLAor CQkJCQkJCQkJYm9vbCAqdXNlX3ZhcmlhZGljX3AsCisJCQkJCQkJCQlQYXJzZUV4cHJLaW5kIHNw ZWNpYWxfZXhwcmtpbmQpOwogZXh0ZXJuIGNoYXIgKmdldF9yYW5nZV9wYXJ0Ym91bmRfc3RyaW5n KExpc3QgKmJvdW5kX2RhdHVtcyk7CitleHRlcm4gdm9pZCBnZXRfb3BjbGFzc19uYW1lKE9pZCBv cGNsYXNzLCBPaWQgYWN0dWFsX2RhdGF0eXBlLAorCQkJCQkJCSAgU3RyaW5nSW5mbyBidWYpOwor ZXh0ZXJuIGNoYXIgKmZsYXR0ZW5fcmVsb3B0aW9ucyhPaWQgcmVsaWQpOwogCiBleHRlcm4gY2hh ciAqcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfc3RyaW5nKE9pZCBzdGF0ZXh0aWQpOworZXh0ZXJu IHZvaWQgcHJpbnRfZnVuY3Rpb25fc3FsYm9keShTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHBy b2N0dXApOwogCiAjZW5kaWYJCQkJCQkJLyogUlVMRVVUSUxTX0ggKi8KZGlmZiAtLWdpdCBhL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKaW5kZXggMzVjOWYxZS4uY2Q5ZGFkMSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKQEAgLTE2MjEsNiArMTYyMSw5IEBAIE9TSW5mbwogT1NTTENpcGhlcgogT1NTTERpZ2VzdAog T1ZFUkxBUFBFRAorT2JqRWxlbQorT2JqVHJlZQorT2JqVHlwZQogT2JqZWN0QWNjZXNzRHJvcAog T2JqZWN0QWNjZXNzTmFtZXNwYWNlU2VhcmNoCiBPYmplY3RBY2Nlc3NQb3N0QWx0ZXIKQEAgLTMx ODgsNiArMzE5MSw3IEBAIGNvbG9ybWFwcmFuZ2UKIGNvbXBhcmVfY29udGV4dAogY29uZmlnX3Zh cl92YWx1ZQogY29udGFpbl9hZ2dzX29mX2xldmVsX2NvbnRleHQKK2NvbnZTcGVjaWZpZXIKIGNv bnZlcnRfdGVzdGV4cHJfY29udGV4dAogY29weV9kYXRhX3NvdXJjZV9jYgogY29yZV9ZWVNUWVBF Ci0tIAoyLjcuMi53aW5kb3dzLjEKCg== --_005_OS0PR01MB5716052AD854FBD52316C6BE946B9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v18-0002-Support-DDL-replication.patch" Content-Description: v18-0002-Support-DDL-replication.patch Content-Disposition: attachment; filename="v18-0002-Support-DDL-replication.patch"; size=128047; creation-date="Tue, 16 Aug 2022 11:56:00 GMT"; modification-date="Tue, 16 Aug 2022 11:57:15 GMT" Content-Transfer-Encoding: base64 RnJvbSBhNzY4MTU2ZWQxMmFmMjBlZmIzYzZlZWM0YjNkNjAzOWVkNDBhZTkxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFNhdCwgMTMgQXVnIDIwMjIgMDg6MjU6MjggLTA0MDAKU3ViamVjdDogW1BBVENI IHYxOCAyLzRdIFN1cHBvcnQgRERMIHJlcGxpY2F0aW9uLgoKVG8gc3VwcG9ydCBEREwgcmVwbGlj YXRpb24sIHdlIHVzZSBldmVudCB0cmlnZ2VyIGFuZCBEREwgZGVwYXJzaW5nCmZhY2lsaXRpZXMu IFdoaWxlIGNyZWF0aW5nIGEgcHVibGljYXRpb24sIHdlIHJlZ2lzdGVyIGEgY29tbWFuZCBlbmQK dHJpZ2dlciB0aGF0IGRlcGFyc2VzIHRoZSBEREwgYXMgYSBKU09OIGJsb2IsIGFuZCBXQUwgbG9n cyBpdC4gVGhlIGV2ZW50CnRyaWdnZXIgaXMgYXV0b21hdGljYWxseSByZW1vdmVkIGF0IHRoZSB0 aW1lIG9mIGRyb3AgcHVibGljYXRpb24uIFRoZQpXQUxTZW5kZXIgZGVjb2RlcyB0aGUgV0FMIGFu ZCBzZW5kcyBpdCBkb3duc3RyZWFtIHNpbWlsYXIgdG8gb3RoZXIgRE1MCmNvbW1hbmRzLiBUaGUg c3Vic2NyaWJlciB0aGVuIGNvbnZlcnRzIEpTT04gYmFjayB0byB0aGUgRERMIGNvbW1hbmQgc3Ry aW5nCmFuZCBleGVjdXRlcyBpdC4gSW4gdGhlIHN1YnNjcmliZXIsIHdlIGFsc28gYWRkIHRoZSBu ZXdseSBhZGRlZCByZWwgdG8KcGdfc3Vic2NyaXB0aW9uX3JlbCBzbyB0aGF0IHRoZSBETUwgY2hh bmdlcyBvbiB0aGUgbmV3IHRhYmxlIGNhbiBiZQpyZXBsaWNhdGVkIHdpdGhvdXQgaGF2aW5nIHRv IG1hbnVhbGx5IHJ1bgoiQUxURVIgU1VCU0NSSVBUSU9OIC4uLiBSRUZSRVNIIFBVQkxJQ0FUSU9O Ii4KClRoaXMgaXMgYSBQT0MgcGF0Y2ggdG8gc2hvdyBob3cgdXNpbmcgZXZlbnQgdHJpZ2dlcnMg YW5kIERETCBkZXBhcnNpbmcKZmFjaWxpdGllcyB3ZSBjYW4gaW1wbGVtZW50IERETCByZXBsaWNh dGlvbi4gU28sIHRoZSBpbXBsZW1lbnRhdGlvbiBpcwpyZXN0cmljdGVkIHRvIENSRUFURSBUQUJM RS9BTFRFUiBUQUJMRS9EUk9QIFRBQkxFIGNvbW1hbmRzLgoKLSBGb3Igbm9uLXJld3JpdGUgQUxU RVIgb2JqZWN0IGNvbW1hbmQgYW5kCi0gICAgIENSRUFURSBvYmplY3QgY29tbWFuZDoKd2UgZGVw YXJzZSB0aGUgY29tbWFuZCBhdCBkZGxfY29tbWFuZF9lbmQgZXZlbnQgdHJpZ2dlciBhbmQgV0FM IGxvZyB0aGUKZGVwYXJzZWQganNvbiBzdHJpbmcuIFRoZSBXQUxTZW5kZXIgZGVjb2RlcyB0aGUg V0FMIGFuZCBzZW5kcyBpdCB0bwpzdWJzY3JpYmVyIGlmIHRoZSBjcmVhdGVkL2FsdGVyZWQgdGFi bGUgaXMgcHVibGlzaGVkLiBJdCBzdXBwb3J0cyBtb3N0IG9mCkFMVEVSIFRBQkxFIGNvbW1hbmQg ZXhjZXB0IHNvbWUgY29tbWFuZHMoRERMIHJlbGF0ZWQgdG8gUEFSVElUSU9ORUQgVEFCTEUKLi4u KSB0aGF0IGludHJvZHVjZWQgcmVjZW50bHkgd2hpY2ggaGF2ZW4ndCBiZWVuIHN1cHBvcnRlZCBi eSB0aGUgY3VycmVudApkZGxfZGVwYXJzZXIsIHdlIHdpbGwgc3VwcG9ydCB0aGF0IGxhdGVyLgoK Tm90ZSB0aGF0IHRoZSByZXBsaWNhdGlvbiBmb3IgQUxURVIgSU5ERVggY29tbWFuZCBpcyBzdGls bCB1bmRlcgpwcm9ncmVzcy4KCi0gRm9yIERST1Agb2JqZWN0OgpUaGUgJ2NvbW1hbmQgc3RhcnQn IGV2ZW50IGhhbmRsZXIgbG9ncyBhIGRkbCBtZXNzYWdlIHdpdGggdGhlIHJlbGlkcyBvZgp0aGUg dGFibGVzIHRoYXQgYXJlIGRyb3BwZWQgd2hpY2ggdGhlIG91dHB1dCBwbHVnaW4gKHBnb3V0cHV0 KSBzdG9yZXMgaW4KaXRzIGludGVybmFsIGRhdGEgc3RydWN0dXJlIGFmdGVyIHZlcmlmeWluZyB0 aGF0IGl0IGlzIGZvciBhIHRhYmxlIHRoYXQgaXMKcGFydCBvZiB0aGUgcHVibGljYXRpb24uIExh dGVyIHRoZSAnY29tbWFuZCBlbmQnIGV2ZW50IGhhbmRsZXIgc2VuZHMgdGhlCmFjdHVhbCBkcm9w IG1lc3NhZ2UuIFBnb3V0cHV0IG9uIHJlY2VpdmluZyB0aGUgY29tbWFuZCBlbmQsIG9ubHkgc2Vu ZHMgb3V0CnRoZSBkcm9wIGNvbW1hbmQgb25seSBpZiBpdCBpcyBmb3Igb25lIG9mIHRoZSByZWxp ZHMgbWFya2VkIGZvciBkZWxldGluZy4KVGhlIHJlYXNvbiB3ZSBoYXZlIHRvIGRvIHRoaXMgaXMg YmVjYXVzZSwgb25jZSB0aGUgbG9naWNhbCBkZWNvZGVyCnJlY2VpdmVzIHRoZSAnY29tbWFuZCBl bmQnIG1lc3NhZ2UsICB0aGUgcmVsaWQgb2YgdGhlIHRhYmxlIGlzIG5vIGxvbmdlcgp2YWxpZCBh cyBpdCBoYXMgYmVlbiBkZWxldGVkIGFzIHBhcnQgb2YgaW52YWxpZGF0aW9ucyByZWNlaXZlZCBm b3IgdGhlCmRyb3AgdGFibGUgY29tbWFuZC4gSXQgaXMgbm8gbG9uZ2VyIHBvc3NpYmxlIHRvIHZl cmlmeSBpZiB0aGUgdGFibGUgaXMKcGFydCBvZiB0aGUgcHVibGljYXRpb24gbGlzdCBvciBub3Qu IFRvIG1ha2UgdGhpcyBwb3NzaWJsZSwgSSBoYXZlIGFkZGVkCnR3byBtb3JlIGVsZW1lbnRzIHRv IHRoZSBkZGwgeGxvZyBhbmQgZGRsIG1lc3NhZ2UsIChyZWxpZCBhbmQgY21kdHlwZSkuCgpXZSBj b3VsZCBoYXZlIGFsc28gaGFuZGxlZCBhbGwgdGhpcyBvbiB0aGUgc3Vic2NyaWJlciBzaWRlIGFz IHdlbGwsIGJ1dAp0aGF0IHdvdWxkIG1lYW4gc2VuZGluZyBzcHVyaW91cyBkZGwgbWVzc2FnZXMg Zm9yIHRhYmxlcyB0aGF0IGFyZSBub3QgcGFydApvZiB0aGUgcHVibGljYXRpb24uCgotIEZvciB0 YWJsZV9yZXdyaXRlIEFMVEVSIFRBQkxFIGNvbW1hbmQ6CihBTFRFUiBDT0xVTU4gVFlQRSwgQURE IENPTFVNTiBERUZBVUxULCBTRVQgTE9HR0VELCBTRVQgQUNDRVNTIE1FVEhPRCkKCndlIGRlcGFy c2UgdGhlIGNvbW1hbmQgYW5kIFdBTCBsb2cgdGhlIGRlcGFyc2VkIGpzb24gc3RyaW5nIGF0CnRh YmxlX3Jld3JpdGUgZXZlbnQgdHJpZ2dlci4gVGhlIFdBTFNlbmRlciBkZWNvZGVzIHRoZSBXQUwg YW5kIHNlbmRzIGl0IHRvCnN1YnNjcmliZXIgaWYgdGhlIGFsdGVyZWQgdGFibGUgaXMgcHVibGlz aGVkLiBUaGVuLCB0aGUgV0FMU2VuZGVyIHdpbGwKY29udmVydCB0aGUgdXBjb21pbmcgcmV3cml0 ZSBJTlNFUlRzIHRvIFVQREFURXMgYW5kIHNlbmQgdGhlbSB0bwpzdWJzY3JpYmVyIHNvIHRoYXQg dGhlIGRhdGEgYmV0d2VlbiBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgY2FuIGFsd2F5cyBiZQpj b25zaXN0ZW50LiBOb3RlIHRoYXQgdGhlIHRhYmxlcyB0aGF0IHB1Ymxpc2ggcmV3cml0ZSBkZGwg bXVzdCBoYXZlIGEKcmVwbGljYSBpZGVudGl0eSBjb25maWd1cmVkIGluIG9yZGVyIHRvIGJlIGFi bGUgdG8gcmVwbGljYXRlIHRoZSB1cGNvbWluZwpyZXdyaXRlIFVQREFURXMuCgpXZSBkbyB0aGlz IHdheSBiZWNhdXNlIG9mIHR3byByZWFzb246CigxKSBUaGUgZGF0YSBiZWZvcmUgdGhlIHJld3Jp dGUgZGRsIGNvdWxkIGFscmVhZHkgYmUgZGlmZmVyZW50IGFtb25nCnB1Ymxpc2hlciBhbmQgc3Vi c2NyaWJlci4gVG8gbWFrZSBzdXJlIHRoZSBleHRyYSBkYXRhIGluIHN1YnNjcmliZXIgd2hpY2gK ZG9lc24ndCBleGlzdCBpbiBwdWJsaXNoZXIgYWxzbyBnZXQgcmV3cml0dGVuLCB3ZSBuZWVkIHRv IGxldCB0aGUKc3Vic2NyaWJlciBleGVjdXRlIHRoZSBvcmlnaW5hbCByZXdyaXRlIGRkbCB0byBy ZXdyaXRlIGFsbCB0aGUgZGF0YSBhdApmaXJzdC4KCigyKSB0aGUgZGF0YSBhZnRlciBleGVjdXRp bmcgcmV3cml0ZSBkZGwgY291bGQgYmUgZGlmZmVyZW50IGFtb25nCnB1Ymxpc2hlciBhbmQgc3Vi c2NyaWJlcihkdWUgdG8gZGlmZmVyZW50IGZ1bmN0aW9ucy9vcGVyYXRvcnMgdXNlZCBkdXJpbmcK cmV3cml0ZSksIHNvIHdlIG5lZWQgdG8gcmVwbGljYXRlIHRoZSByZXdyaXRlIFVQREFURXMgdG8g a2VlcCB0aGUgZGF0YQpjb25zaXN0ZW50LgoKVE8gSU1QUk9WRToKVGhpcyBhcHByb2FjaCBjb3Vs ZCBiZSBpbXByb3ZlZCBieSBsZXR0aW5nIHRoZSBzdWJzY3JpYmVyIHRyeSB0byB1cGRhdGUKdGhl IGV4dHJhIGRhdGEgaXRzZWxmIGluc3RlYWQgb2YgZG9pbmcgZnVsbHkgcmV3cml0ZSBkZGwgYW5k IHVzZSB0aGUKdXBjb21pbmcgcmV3cml0ZSBVUERBVEVzIHRvIHJld3JpdGUgdGhlIHJlc3QgZGF0 YS4gVG8gYWNoaWV2ZSB0aGlzLCB3ZQpjb3VsZCBtb2RpZnkgdGhlIGRlcGFyc2VkIGpzb24gc3Ry aW5nIHRvIHRlbXBvcmFyaWx5IHJlbW92ZSB0aGUgcmV3cml0ZQpwYXJ0IGFuZCBhZGQgc29tZSBs b2dpYyBpbiBzdWJzY3JpYmVyIHRvIHVwZGF0ZSB0aGUgZXh0cmEgZGF0YS4KQmVzaWRlcywgd2Ug bWF5IG5vdCBuZWVkIHRvIHNlbmQgcmV3cml0ZSBjaGFuZ2VzIGZvciBhbGwgdHlwZSBvZiByZXdy aXRlCmRkbCwgZm9yIGV4YW1wbGUsIGl0IHNlZW1zIGZpbmUgdG8gc2tpcCBzZW5kaW5nIHJld3Jp dGUgY2hhbmdlcyBmb3IgQUxURVIKVEFCTEUgU0VUIExPR0dFRCBhcyB0aGUgZGF0YSBpbiB0aGUg dGFibGUgZG9lc24ndCBhY3R1YWxseSBiZSBjaGFuZ2VkLiBXZQpjb3VsZCB1c2UgdGhlIGRlcGFy c2VyIGFuZCBldmVudCB0cmlnZ2VyIHRvIGZpbHRlciB0aGVzZSBkZGxzIGFuZCBza2lwCnNlbmRp bmcgcmV3cml0ZSBjaGFuZ2VzIGZvciB0aGVtLgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdy ZGVzYy9NYWtlZmlsZSAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdy ZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jIHwgIDUyICsrKysKIHNyYy9iYWNrZW5kL2NhdGFsb2cv cGdfcHVibGljYXRpb24uYyAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRz L2V2ZW50X3RyaWdnZXIuYyAgICAgICAgICAgIHwgMjI5ICsrKysrKysrKysrKystCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyAgICAgICAgICB8IDEyNyArKysrKysrKwog c3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgICAgICAgfCAgIDIgKy0K IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUgICAgICAgIHwgICAxICsK IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jICAgIHwgIDg2ICsr KysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYyAgICAgICAgfCAg NDEgKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYyAgICAgICB8 ICA5MyArKysrKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyAgICAg ICAgIHwgIDQ4ICsrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVm ZmVyLmMgfCAxMzYgKysrKysrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dv cmtlci5jICAgICAgICB8IDIzMiArKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vcGdvdXRwdXQvcGdvdXRwdXQuYyAgICAgfCAxOTIgKysrKysrKysrKystCiBzcmMvYmFja2Vu ZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgICAgICAgICAgICB8ICAyNyArLQogc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuaCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9w Z193YWxkdW1wL2xvZ2ljYWxkZGxtc2dkZXNjLmMgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9w Z193YWxkdW1wL3JtZ3JkZXNjLmMgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9w c3FsL2Rlc2NyaWJlLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTcgKy0KIHNyYy9pbmNs dWRlL2FjY2Vzcy9ybWdybGlzdC5oICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAgICAgIHwgICA5ICsKIHNyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaCAgICAgICAgICAgIHwgICA0ICsKIHNyYy9pbmNs dWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCAgICAgICAgICAgIHwgICAzICstCiBzcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmggICAgICAgICAgICB8ICA2MCArKysrCiBzcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaCAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaCAgICAgICAgICB8ICAgNyArLQogc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oICAgICAgICAgfCAgMjcgKysKIHNy Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmggICAgICAgICAgICAgIHwgICAxICsKIHNy Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCAgICAgICAgIHwgIDM5ICsrKwog c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dCAgICAgICAgICAgICAgfCAgIDYgKy0K IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0ICAgICAgIHwgMzg4ICsr KysrKysrKysrKy0tLS0tLS0tLS0tLQogMzIgZmlsZXMgY2hhbmdlZCwgMTYyMiBpbnNlcnRpb25z KCspLCAyMTMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNj ZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYwogY3JlYXRlIG1vZGUgMTIw MDAwIHNyYy9iaW4vcGdfd2FsZHVtcC9sb2dpY2FsZGRsbXNnZGVzYy5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5oCgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3JtZ3JkZXNjL01ha2VmaWxlCmluZGV4IGY4OGQ3MmYuLmI4ZTI5ZTggMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9hY2Nl c3Mvcm1ncmRlc2MvTWFrZWZpbGUKQEAgLTE5LDYgKzE5LDcgQEAgT0JKUyA9IFwKIAloYXNoZGVz Yy5vIFwKIAloZWFwZGVzYy5vIFwKIAlsb2dpY2FsbXNnZGVzYy5vIFwKKwlsb2dpY2FsZGRsbXNn ZGVzYy5vIFwKIAlteGFjdGRlc2MubyBcCiAJbmJ0ZGVzYy5vIFwKIAlyZWxtYXBkZXNjLm8gXApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNj LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRkbG1zZ2Rlc2MuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWRlZTUyCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKQEAgLTAs MCArMSw1MiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogbG9naWNhbGRkbG1zZ2Rlc2Mu YworICoJICBybWdyIGRlc2NyaXB0b3Igcm91dGluZXMgZm9yIHJlcGxpY2F0aW9uL2xvZ2ljYWwv ZGRsbWVzc2FnZS5jCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDE1LTIwMjIsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoKKyAqIElERU5USUZJQ0FU SU9OCisgKgkgIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5j CisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisj aW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgorCit2b2lkCitsb2dpY2FsZGRsbXNn X2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQoreworCWNoYXIJ ICAgKnJlYyA9IFhMb2dSZWNHZXREYXRhKHJlY29yZCk7CisJdWludDgJCWluZm8gPSBYTG9nUmVj R2V0SW5mbyhyZWNvcmQpICYgflhMUl9JTkZPX01BU0s7CisKKwlpZiAoaW5mbyA9PSBYTE9HX0xP R0lDQUxfRERMX01FU1NBR0UpCisJeworCQl4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICp4bHJlYyA9 ICh4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICopIHJlYzsKKwkJY2hhcgkgICAqcHJlZml4ID0geGxy ZWMtPm1lc3NhZ2U7CisJCWNoYXIJICAgKm1lc3NhZ2UgPSB4bHJlYy0+bWVzc2FnZSArIHhscmVj LT5wcmVmaXhfc2l6ZTsKKwkJY2hhcgkgICAqc2VwID0gIiI7CisKKwkJQXNzZXJ0KHByZWZpeFt4 bHJlYy0+cHJlZml4X3NpemVdICE9ICdcMCcpOworCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAi cHJlZml4IFwiJXNcIjsgcGF5bG9hZCAoJXp1IGJ5dGVzKTogIiwKKwkJCQkJCSBwcmVmaXgsIHhs cmVjLT5tZXNzYWdlX3NpemUpOworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgInJlbGlkICV1IGNt ZHR5cGUgJXUiLCB4bHJlYy0+cmVsaWQsIHhscmVjLT5jbWR0eXBlKTsKKwkJLyogV3JpdGUgbWVz c2FnZSBwYXlsb2FkIGFzIGEgc2VyaWVzIG9mIGhleCBieXRlcyAqLworCQlmb3IgKGludCBjbnQg PSAwOyBjbnQgPCB4bHJlYy0+bWVzc2FnZV9zaXplOyBjbnQrKykKKwkJeworCQkJYXBwZW5kU3Ry aW5nSW5mbyhidWYsICIlcyUwMlgiLCBzZXAsICh1bnNpZ25lZCBjaGFyKSBtZXNzYWdlW2NudF0p OworCQkJc2VwID0gIiAiOworCQl9CisJfQorfQorCitjb25zdCBjaGFyICoKK2xvZ2ljYWxkZGxt c2dfaWRlbnRpZnkodWludDggaW5mbykKK3sKKwlpZiAoKGluZm8gJiB+WExSX0lORk9fTUFTSykg PT0gWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKQorCQlyZXR1cm4gIkRETCBNRVNTQUdFIjsKKwor CXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJs aWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCmluZGV4IDZh ZjM1NzAuLmJkZjQyYTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGlj YXRpb24uYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKQEAgLTEw MDUsNiArMTAwNSw3IEBAIEdldFB1YmxpY2F0aW9uKE9pZCBwdWJpZCkKIAlwdWItPnB1YmFjdGlv bnMucHVidXBkYXRlID0gcHViZm9ybS0+cHVidXBkYXRlOwogCXB1Yi0+cHViYWN0aW9ucy5wdWJk ZWxldGUgPSBwdWJmb3JtLT5wdWJkZWxldGU7CiAJcHViLT5wdWJhY3Rpb25zLnB1YnRydW5jYXRl ID0gcHViZm9ybS0+cHVidHJ1bmNhdGU7CisJcHViLT5wdWJhY3Rpb25zLnB1YmRkbCA9IHB1YmZv cm0tPnB1YmRkbDsKIAlwdWItPnB1YnZpYXJvb3QgPSBwdWJmb3JtLT5wdWJ2aWFyb290OwogCiAJ UmVsZWFzZVN5c0NhY2hlKHR1cCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9l dmVudF90cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKaW5k ZXggZWVmM2U1ZC4uNDRlYTA2ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZl bnRfdHJpZ2dlci5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwpA QCAtMzcsOCArMzcsMTEgQEAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwYXJz ZXIvcGFyc2VfZnVuYy5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInJlcGxpY2F0 aW9uL2RkbG1lc3NhZ2UuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9tZXNzYWdlLmgiCiAjaW5j bHVkZSAidGNvcC9kZXBhcnNlX3V0aWxpdHkuaCIKICNpbmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIK KyNpbmNsdWRlICJ0Y29wL2RkbF9kZXBhcnNlLmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCiAj aW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9ldnRjYWNoZS5oIgpA QCAtMTUzNiw2ICsxNTM5LDcgQEAgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVN0YXJ0KE5vZGUgKnBh cnNldHJlZSkKIAogCWNvbW1hbmQtPmQuYWx0ZXJUYWJsZS5jbGFzc0lkID0gUmVsYXRpb25SZWxh dGlvbklkOwogCWNvbW1hbmQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCA9IEludmFsaWRPaWQ7CisJ Y29tbWFuZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUgPSBmYWxzZTsKIAljb21tYW5kLT5kLmFsdGVy VGFibGUuc3ViY21kcyA9IE5JTDsKIAljb21tYW5kLT5wYXJzZXRyZWUgPSBjb3B5T2JqZWN0KHBh cnNldHJlZSk7CiAKQEAgLTE1NjksNyArMTU3Myw3IEBAIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVS ZWxpZChPaWQgb2JqZWN0SWQpCiAgKiBpbnRlcm5hbGx5LCBzbyB0aGF0J3MgYWxsIHRoYXQgdGhp cyBjb2RlIG5lZWRzIHRvIGhhbmRsZSBhdCB0aGUgbW9tZW50LgogICovCiB2b2lkCi1FdmVudFRy aWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQsIE9iamVjdEFkZHJlc3Mg YWRkcmVzcykKK0V2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKE5vZGUgKnN1YmNt ZCwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBib29sIHJld3JpdGUpCiB7CiAJTWVtb3J5Q29udGV4 dCBvbGRjeHQ7CiAJQ29sbGVjdGVkQVRTdWJjbWQgKm5ld3N1YjsKQEAgLTE1ODksNiArMTU5Myw3 IEBAIEV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKE5vZGUgKnN1YmNtZCwgT2Jq ZWN0QWRkcmVzcyBhZGRyZXNzKQogCW5ld3N1Yi0+YWRkcmVzcyA9IGFkZHJlc3M7CiAJbmV3c3Vi LT5wYXJzZXRyZWUgPSBjb3B5T2JqZWN0KHN1YmNtZCk7CiAKKwljdXJyZW50RXZlbnRUcmlnZ2Vy U3RhdGUtPmN1cnJlbnRDb21tYW5kLT5kLmFsdGVyVGFibGUucmV3cml0ZSB8PSByZXdyaXRlOwog CWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJsZS5z dWJjbWRzID0KIAkJbGFwcGVuZChjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21t YW5kLT5kLmFsdGVyVGFibGUuc3ViY21kcywgbmV3c3ViKTsKIApAQCAtMjE3NCwzICsyMTc5LDIy NSBAQCBzdHJpbmdpZnlfYWRlZnByaXZzX29ianR5cGUoT2JqZWN0VHlwZSBvYmp0eXBlKQogCiAJ cmV0dXJuICI/Pz8iOwkJCQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCiB9CisKKy8qCisgKiBw dWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX3N0YXJ0CisgKgorICogRGVwYXJzZSB0aGUg ZGRsIGNvbW1hbmQgYW5kIGxvZyBpdC4KKyAqLworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2Vf ZGRsX2NvbW1hbmRfc3RhcnQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlFdmVudFRyaWdnZXJEYXRh ICp0cmlnZGF0YTsKKwljaGFyCQkqY29tbWFuZCA9IHBzcHJpbnRmKCJEcm9wIHRhYmxlIGNvbW1h bmQgc3RhcnQiKTsKKwlEcm9wU3RtdAkqc3RtdDsKKwlMaXN0Q2VsbAkqY2VsbDE7CisKKwlpZiAo IUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykpCisJCWVsb2coRVJST1IsICJub3QgZmly ZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwl0cmlnZGF0YSA9IChFdmVudFRyaWdn ZXJEYXRhICopIGZjaW5mby0+Y29udGV4dDsKKwlzdG10CSA9IChEcm9wU3RtdCAqKSB0cmlnZGF0 YS0+cGFyc2V0cmVlOworCisJLyogZXh0cmFjdCB0aGUgcmVsaWQgZnJvbSB0aGUgcGFyc2UgdHJl ZSAqLworCWZvcmVhY2goY2VsbDEsIHN0bXQtPm9iamVjdHMpCisJeworCQljaGFyCXJlbHBlcnNp c3Q7CisJCU5vZGUJKm9iamVjdCA9IGxmaXJzdChjZWxsMSk7CisJCU9iamVjdEFkZHJlc3MgYWRk cmVzczsKKwkJUmVsYXRpb24gcmVsYXRpb24gPSBOVUxMOworCisJCWFkZHJlc3MgPSBnZXRfb2Jq ZWN0X2FkZHJlc3Moc3RtdC0+cmVtb3ZlVHlwZSwKKwkJCQkJCQkJCSBvYmplY3QsCisJCQkJCQkJ CQkgJnJlbGF0aW9uLAorCQkJCQkJCQkJIEFjY2Vzc0V4Y2x1c2l2ZUxvY2ssCisJCQkJCQkJCQkg dHJ1ZSk7CisKKwkJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoYWRkcmVzcy5vYmpl Y3RJZCk7CisKKwkJLyoKKwkJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9yIGNvbW1hbmRz IHdob3NlIHRhcmdldCB0YWJsZSBpcyBhCisJCSAqIHRlbXBvcmFyeSB0YWJsZS4KKwkJICoKKwkJ ICogV2Ugd2lsbCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNvIHRoYXQg dW5sb2dnZWQKKwkJICogdGFibGVzIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVyZWQgb24g dGhlIHN1YnNjcmliZXIgc2lkZS4gVGhpcworCQkgKiBtYWtlcyBpdCBwb3NzaWJsZSB0byBkaXJl Y3RseSByZXBsYXkgdGhlIFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlCisJCSAqIGluY29taW5n IHJld3JpdGUgbWVzc2FnZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCQkgKi8KKwkJ aWYgKHJlbHBlcnNpc3QgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJeworCQkJdGFibGVfY2xv c2UocmVsYXRpb24sIE5vTG9jayk7CisJCQljb250aW51ZTsKKwkJfQorCisJCUxvZ0xvZ2ljYWxE RExNZXNzYWdlKCJkZXBhcnNlIiwgYWRkcmVzcy5vYmplY3RJZCwgRENUX1RhYmxlRHJvcFN0YXJ0 LAorCQkJCQkJCSBjb21tYW5kLCBzdHJsZW4oY29tbWFuZCkgKyAxKTsKKworCQlpZiAocmVsYXRp b24pCisJCQl0YWJsZV9jbG9zZShyZWxhdGlvbiwgTm9Mb2NrKTsKKwl9CisJcmV0dXJuIFBvaW50 ZXJHZXREYXR1bShOVUxMKTsKK30KKworLyoKKyAqIHB1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVf cmV3cml0ZQorICoKKyAqIERlcGFyc2UgdGhlIGRkbCB0YWJsZSByZXdyaXRlIGNvbW1hbmQgYW5k IGxvZyBpdC4KKyAqLworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZShQ R19GVU5DVElPTl9BUkdTKQoreworCWNoYXIJCQkJcmVscGVyc2lzdDsKKwlDb2xsZWN0ZWRDb21t YW5kICAgKmNtZDsKKwljaGFyCQkJICAgKmpzb25fc3RyaW5nOworCisJaWYgKCFDQUxMRURfQVNf RVZFTlRfVFJJR0dFUihmY2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5IGV2ZW50 IHRyaWdnZXIgbWFuYWdlciIpOworCisJY21kID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5j dXJyZW50Q29tbWFuZDsKKworCUFzc2VydChjbWQgJiYgY21kLT5kLmFsdGVyVGFibGUucmV3cml0 ZSk7CisKKwlyZWxwZXJzaXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShjbWQtPmQuYWx0ZXJUYWJs ZS5vYmplY3RJZCk7CisKKwkvKgorCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21t YW5kcyB3aG9zZSB0YXJnZXQgdGFibGUgaXMgYSB0ZW1wb3JhcnkKKwkgKiB0YWJsZS4KKwkgKgor CSAqIFdlIHdpbGwgZ2VuZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0 IHVubG9nZ2VkIHRhYmxlcworCSAqIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVyZWQgb24g dGhlIHN1YnNjcmliZXIgc2lkZS4gVGhpcyBtYWtlcyBpdAorCSAqIHBvc3NpYmxlIHRvIGRpcmVj dGx5IHJlcGxheSB0aGUgU0VUIExPR0dFRCBjb21tYW5kIGFuZCB0aGUgaW5jb21pbmcKKwkgKiBy ZXdyaXRlIG1lc3NhZ2Ugd2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkgKi8KKwlpZiAo cmVscGVyc2lzdCA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQorCQlyZXR1cm4gUG9pbnRlckdldERh dHVtKE5VTEwpOworCisJLyogRGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQg dG8gYWxsb3cgZGVjb2Rpbmcgb2YgdGhlIHNhbWUuICovCisJanNvbl9zdHJpbmcgPSBkZXBhcnNl X3V0aWxpdHlfY29tbWFuZChjbWQsIGZhbHNlKTsKKworCWlmIChqc29uX3N0cmluZyAhPSBOVUxM KQorCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIGNtZC0+ZC5hbHRlclRhYmxlLm9i amVjdElkLCBEQ1RfVGFibGVBbHRlciwKKwkJCQkJCQkganNvbl9zdHJpbmcsIHN0cmxlbihqc29u X3N0cmluZykgKyAxKTsKKworCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7Cit9CisKKy8q CisgKiBwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX2VuZAorICoKKyAqIERlcGFyc2Ug dGhlIGRkbCBjb21tYW5kIGFuZCBsb2cgaXQuCisgKi8KK0RhdHVtCitwdWJsaWNhdGlvbl9kZXBh cnNlX2RkbF9jb21tYW5kX2VuZChQR19GVU5DVElPTl9BUkdTKQoreworCUxpc3RDZWxsICAgKmxj OworCXNsaXN0X2l0ZXIgIGl0ZXI7CisJRGVwYXJzZWRDb21tYW5kVHlwZSB0eXBlOworCU9pZCBy ZWxpZDsKKworCWlmICghQ0FMTEVEX0FTX0VWRU5UX1RSSUdHRVIoZmNpbmZvKSkKKwkJZWxvZyhF UlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0cmlnZ2VyIG1hbmFnZXIiKTsKKworCWZvcmVhY2go bGMsIGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFuZExpc3QpCisJeworCQljaGFyCQkJ CXJlbHBlcnNpc3QgPSBSRUxQRVJTSVNURU5DRV9QRVJNQU5FTlQ7CisJCUNvbGxlY3RlZENvbW1h bmQgICAqY21kID0gbGZpcnN0KGxjKTsKKwkJY2hhcgkJCSAgICpqc29uX3N0cmluZzsKKworCQkv KiBSZXdyaXRlIERETCBoYXMgYmVlbiBoYW5kbGVkIGluIHRhYmxlX3Jld3JpdGUgdHJpZ2dlciAq LworCQlpZiAoY21kLT5kLmFsdGVyVGFibGUucmV3cml0ZSkKKwkJeworCQkJUmVuYW1lU3RtdCAq cmVuYW1lU3RtdCA9IChSZW5hbWVTdG10ICopY21kLT5wYXJzZXRyZWU7CisKKwkJCWlmIChyZW5h bWVTdG10LT5yZWxhdGlvblR5cGUgIT0gT0JKRUNUX1RZUEUgJiYKKwkJCQlyZW5hbWVTdG10LT5y ZWxhdGlvblR5cGUgIT0gT0JKRUNUX1RBQkxFKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYg KGNtZC0+dHlwZSA9PSBTQ1RfU2ltcGxlICYmCisJCQkhT2lkSXNWYWxpZChjbWQtPmQuc2ltcGxl LmFkZHJlc3Mub2JqZWN0SWQpKQorCQkJY29udGludWU7CisKKwkJaWYgKGNtZC0+dHlwZSA9PSBT Q1RfQWx0ZXJUYWJsZSkKKwkJeworCQkJcmVsaWQgPSBjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJ ZDsKKwkJCXR5cGUgPSBEQ1RfVGFibGVBbHRlcjsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIE9u bHkgU0NUX1NpbXBsZSBmb3Igbm93ICovCisJCQlyZWxpZCA9IGNtZC0+ZC5zaW1wbGUuYWRkcmVz cy5vYmplY3RJZDsKKwkJCXR5cGUgPSBEQ1RfU2ltcGxlQ21kOworCQl9CisKKwkJaWYgKGdldF9y ZWxfcmVsa2luZChyZWxpZCkpCisJCQlyZWxwZXJzaXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShy ZWxpZCk7CisKKwkJLyoKKwkJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9yIGNvbW1hbmRz IHdob3NlIHRhcmdldCB0YWJsZSBpcyBhCisJCSAqIHRlbXBvcmFyeSB0YWJsZS4KKwkJICoKKwkJ ICogV2Ugd2lsbCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNvIHRoYXQg dW5sb2dnZWQgdGFibGVzCisJCSAqIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVyZWQgb24g dGhlIHN1YnNjcmliZXIgc2lkZS4gVGhpcyBtYWtlcyBpdAorCQkgKiBwb3NzaWJsZSB0byBkaXJl Y3RseSByZXBsYXkgdGhlIFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlIGluY29taW5nCisJCSAq IHJld3JpdGUgbWVzc2FnZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCQkgKi8KKwkJ aWYgKHJlbHBlcnNpc3QgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJCWNvbnRpbnVlOworCisJ CS8qCisJCSAqIERlcGFyc2UgdGhlIERETCBjb21tYW5kIGFuZCBXQUwgbG9nIGl0IHRvIGFsbG93 IGRlY29kaW5nIG9mIHRoZQorCQkgKiBzYW1lLgorCQkgKi8KKwkJanNvbl9zdHJpbmcgPSBkZXBh cnNlX3V0aWxpdHlfY29tbWFuZChjbWQsIGZhbHNlKTsKKworCQlpZiAoanNvbl9zdHJpbmcgPT0g TlVMTCkKKwkJCWNvbnRpbnVlOworCisJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwg cmVsaWQsIHR5cGUsIGpzb25fc3RyaW5nLAorCQkJCQkJCSBzdHJsZW4oanNvbl9zdHJpbmcpICsg MSk7CisJfQorCisJc2xpc3RfZm9yZWFjaChpdGVyLCAmKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0 ZS0+U1FMRHJvcExpc3QpKQorCXsKKwkJdm9sYXRpbGUgU1FMRHJvcE9iamVjdCAqb2JqOworCQlE cm9wU3RtdAkJCSAgICpzdG10OworCQlFdmVudFRyaWdnZXJEYXRhIAkgICAqdHJpZ2RhdGE7CisJ CWNoYXIJCQkJICAgKmNvbW1hbmQ7CisJCURlcGFyc2VkQ29tbWFuZFR5cGUJCWNtZHR5cGU7CisK KwkJdHJpZ2RhdGEgPSAoRXZlbnRUcmlnZ2VyRGF0YSAqKSBmY2luZm8tPmNvbnRleHQ7CisJCXN0 bXQJID0gKERyb3BTdG10ICopIHRyaWdkYXRhLT5wYXJzZXRyZWU7CisKKwkJb2JqID0gc2xpc3Rf Y29udGFpbmVyKFNRTERyb3BPYmplY3QsIG5leHQsIGl0ZXIuY3VyKTsKKworCQlpZiAoc3RyY21w KG9iai0+b2JqZWN0dHlwZSwgInRhYmxlIikgPT0gMCkKKwkJCWNtZHR5cGUgPSBEQ1RfVGFibGVE cm9wRW5kOworCQllbHNlIGlmIChzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAic2VxdWVuY2UiKSA9 PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJzY2hlbWEiKSA9PSAwIHx8CisJ CQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJpbmRleCIpID09IDAgfHwKKwkJCQkgc3RyY21w KG9iai0+b2JqZWN0dHlwZSwgImZ1bmN0aW9uIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5v YmplY3R0eXBlLCAicHJvY2VkdXJlIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0 eXBlLCAib3BlcmF0b3IiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJv cGVyYXRvciBjbGFzcyIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgIm9w ZXJhdG9yIGZhbWlseSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImNh c3QiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ0eXBlIikgPT0gMCB8 fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiZG9tYWluIikgPT0gMCB8fAorCQkJCSBz dHJjbXAob2JqLT5vYmplY3R0eXBlLCAidHJpZ2dlciIpID09IDApCisJCQljbWR0eXBlID0gRENU X09iamVjdERyb3A7CisJCWVsc2UKKwkJCWNvbnRpbnVlOworCisJCWNvbW1hbmQgPSBkZXBhcnNl X2Ryb3BfY29tbWFuZChvYmotPm9iamlkZW50aXR5LCBvYmotPm9iamVjdHR5cGUsCisJCQkJCQkJ CQkgICBzdG10LT5iZWhhdmlvcik7CisKKwkJaWYgKGNvbW1hbmQgPT0gTlVMTCkKKwkJCWNvbnRp bnVlOworCisJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgb2JqLT5hZGRyZXNzLm9i amVjdElkLCBjbWR0eXBlLAorCQkJCQkJCSBjb21tYW5kLCBzdHJsZW4oY29tbWFuZCkgKyAxKTsK Kwl9CisKKwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9wdWJsaWNhdGlvbmNtZHMuYwppbmRleCA4OWEwMDU1Li4zZmQxM2M4IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwpAQCAtMzcsMTAgKzM3LDEyIEBACiAjaW5jbHVkZSAi Y29tbWFuZHMvcHVibGljYXRpb25jbWRzLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgogI2luY2x1 ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUg Im5vZGVzL25vZGVGdW5jcy5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9jbGF1c2UuaCIKICNp bmNsdWRlICJwYXJzZXIvcGFyc2VfY29sbGF0ZS5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9y ZWxhdGlvbi5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZXIuaCIKICNpbmNsdWRlICJzdG9yYWdl L2xtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9hcnJheS5o IgpAQCAtOTUsNiArOTcsNyBAQCBwYXJzZV9wdWJsaWNhdGlvbl9vcHRpb25zKFBhcnNlU3RhdGUg KnBzdGF0ZSwKIAlwdWJhY3Rpb25zLT5wdWJ1cGRhdGUgPSB0cnVlOwogCXB1YmFjdGlvbnMtPnB1 YmRlbGV0ZSA9IHRydWU7CiAJcHViYWN0aW9ucy0+cHVidHJ1bmNhdGUgPSB0cnVlOworCXB1YmFj dGlvbnMtPnB1YmRkbCA9IGZhbHNlOwogCSpwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZh bHNlOwogCiAJLyogUGFyc2Ugb3B0aW9ucyAqLwpAQCAtMTQxLDYgKzE0NCw4IEBAIHBhcnNlX3B1 YmxpY2F0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQlwdWJhY3Rpb25zLT5w dWJkZWxldGUgPSB0cnVlOwogCQkJCWVsc2UgaWYgKHN0cmNtcChwdWJsaXNoX29wdCwgInRydW5j YXRlIikgPT0gMCkKIAkJCQkJcHViYWN0aW9ucy0+cHVidHJ1bmNhdGUgPSB0cnVlOworCQkJCWVs c2UgaWYgKHN0cmNtcChwdWJsaXNoX29wdCwgImRkbCIpID09IDApCisJCQkJCXB1YmFjdGlvbnMt PnB1YmRkbCA9IHRydWU7CiAJCQkJZWxzZQogCQkJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkJCShl cnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKQEAgLTc0OSw2ICs3NTQsNTMgQEAgQ2hlY2tQ dWJSZWxhdGlvbkNvbHVtbkxpc3QoTGlzdCAqdGFibGVzLCBjb25zdCBjaGFyICpxdWVyeVN0cmlu ZywKIH0KIAogLyoKKyAqIENyZWF0ZSBldmVudCB0cmlnZ2VyIHdoaWNoIGlzIHVzZWQgZm9yIERE TCByZXBsaWNhdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK0NyZWF0ZURETFJlcGxpY2FFdmVudFRy aWdnZXIoY2hhciAqZXZlbnRuYW1lLCBDb21tYW5kVGFnICpjb21tYW5kcywKKwkJCQkJCQkgaW50 IG5jb21tYW5kcywgT2JqZWN0QWRkcmVzcyBwdWJhZGRyZXNzLAorCQkJCQkJCSBPaWQgcHVib2lk KQoreworCWludAkJCQkJaTsKKwlMaXN0CQkJICAgKnRhZ3MgPSBOSUw7CisJT2lkCQkJCQl0cmln Z2VyX2lkOworCU9iamVjdEFkZHJlc3MJCXJlZmVyZW5jZWQ7CisJQ3JlYXRlRXZlbnRUcmlnU3Rt dCAqZGRsX3RyaWdnZXI7CisJY2hhcgkJCQl0cmlnZ2VyX25hbWVbTkFNRURBVEFMRU5dOworCWNo YXIJCQkJdHJpZ2dlcl9mdW5jX25hbWVbTkFNRURBVEFMRU5dOworCXN0YXRpYyBjb25zdCBjaGFy ICAgKnRyaWdnZXJfbmFtZV9wcmVmaXggPSAicGdfZGVwYXJzZV90cmlnXyVzXyV1IjsKKwlzdGF0 aWMgY29uc3QgY2hhciAgICp0cmlnZ2VyX2Z1bmNfcHJlZml4ID0gInB1YmxpY2F0aW9uX2RlcGFy c2VfJXMiOworCisJZGRsX3RyaWdnZXIgPSBtYWtlTm9kZShDcmVhdGVFdmVudFRyaWdTdG10KTsK KworCXNucHJpbnRmKHRyaWdnZXJfbmFtZSwgc2l6ZW9mKHRyaWdnZXJfbmFtZSksIHRyaWdnZXJf bmFtZV9wcmVmaXgsCisJCQkgZXZlbnRuYW1lLCBwdWJvaWQpOworCXNucHJpbnRmKHRyaWdnZXJf ZnVuY19uYW1lLCBzaXplb2YodHJpZ2dlcl9mdW5jX25hbWUpLCB0cmlnZ2VyX2Z1bmNfcHJlZml4 LAorCQkJIGV2ZW50bmFtZSk7CisKKwlkZGxfdHJpZ2dlci0+dHJpZ25hbWUgPSBwc3RyZHVwKHRy aWdnZXJfbmFtZSk7CisJZGRsX3RyaWdnZXItPmV2ZW50bmFtZSA9IGV2ZW50bmFtZTsKKwlkZGxf dHJpZ2dlci0+ZnVuY25hbWUgPSBTeXN0ZW1GdW5jTmFtZSh0cmlnZ2VyX2Z1bmNfbmFtZSk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgbmNvbW1hbmRzOyBpKyspCisJeworCQlTdHJpbmcgKnRhZyA9IG1h a2VTdHJpbmcocHN0cmR1cChHZXRDb21tYW5kVGFnTmFtZShjb21tYW5kc1tpXSkpKTsKKwkJdGFn cyA9IGxhcHBlbmQodGFncywgdGFnKTsKKwl9CisKKwlkZGxfdHJpZ2dlci0+d2hlbmNsYXVzZSA9 IGxpc3RfbWFrZTEobWFrZURlZkVsZW0oInRhZyIsIChOb2RlICopIHRhZ3MsIC0xKSk7CisKKwl0 cmlnZ2VyX2lkID0gQ3JlYXRlRXZlbnRUcmlnZ2VyKGRkbF90cmlnZ2VyKTsKKworCS8qCisJICog UmVnaXN0ZXIgdGhlIGV2ZW50IHRyaWdnZXJzIGFzIGludGVybmFsbHkgZGVwZW5kZW50IG9uIHRo ZQorCSAqIHB1YmxpY2F0aW9uLgorCSAqLworCU9iamVjdEFkZHJlc3NTZXQocmVmZXJlbmNlZCwg RXZlbnRUcmlnZ2VyUmVsYXRpb25JZCwgdHJpZ2dlcl9pZCk7CisJcmVjb3JkRGVwZW5kZW5jeU9u KCZyZWZlcmVuY2VkLCAmcHViYWRkcmVzcywgREVQRU5ERU5DWV9JTlRFUk5BTCk7Cit9CisKKy8q CiAgKiBDcmVhdGUgbmV3IHB1YmxpY2F0aW9uLgogICovCiBPYmplY3RBZGRyZXNzCkBAIC04MjAs NiArODcyLDggQEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQ dWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJCUJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YmRlbGV0 ZSk7CiAJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHVidHJ1bmNhdGUgLSAxXSA9CiAJCUJv b2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YnRydW5jYXRlKTsKKwl2YWx1ZXNbQW51bV9wZ19wdWJs aWNhdGlvbl9wdWJkZGwgLSAxXSA9CisJCUJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YmRkbCk7 CiAJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHVidmlhcm9vdCAtIDFdID0KIAkJQm9vbEdl dERhdHVtKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKIApAQCAtODgyLDYgKzkzNiw3NiBA QCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9u U3RtdCAqc3RtdCkKIAkJfQogCX0KIAorCS8qCisJICogQ3JlYXRlIGFuIGV2ZW50IHRyaWdnZXIg dG8gYWxsb3cgbG9nZ2luZyBvZiBEREwgc3RhdGVtZW50cy4KKwkgKgorCSAqIFRPRE86IFdlIG5l ZWQgdG8gZmluZCBhIGJldHRlciBzeW50YXggdG8gYWxsb3cgcmVwbGljYXRpb24gb2YgRERMCisJ ICogc3RhdGVtZW50cy4KKwkgKgorCSAqIFhYWDogVGhpcyBjb2RlIGlzIGp1c3QgdG8gc2hvdyB0 aGUgcmVwbGljYXRpb24gb2YgQ1JFQVRFL0FMVEVSL0RST1AKKwkgKiBUQUJMRSB3b3Jrcy4gV2Ug bmVlZCB0byBlbmhhbmNlIHRoaXMgb25jZSB0aGUgYXBwcm9hY2ggZm9yIERETAorCSAqIHJlcGxp Y2F0aW9uIGlzIGZpbmFsaXplZC4KKwkgKi8KKwlpZiAocHViYWN0aW9ucy5wdWJkZGwpCisJewor CQlDb21tYW5kVGFnCXN0YXJ0X2NvbW1hbmRzW10gPSB7Q01EVEFHX0RST1BfVEFCTEV9OworCQlD b21tYW5kVGFnCXJld3JpdGVfY29tbWFuZHNbXSA9IHtDTURUQUdfQUxURVJfVEFCTEV9OworCisJ CUNvbW1hbmRUYWcJZW5kX2NvbW1hbmRzW10gPSB7CisJCQlDTURUQUdfQ1JFQVRFX0RPTUFJTiwK KwkJCUNNRFRBR19BTFRFUl9ET01BSU4sCisJCQlDTURUQUdfRFJPUF9ET01BSU4sCisJCQlDTURU QUdfQUxURVJfSU5ERVgsCisJCQlDTURUQUdfQ1JFQVRFX1RZUEUsCisJCQlDTURUQUdfRFJPUF9U WVBFLAorCQkJQ01EVEFHX0FMVEVSX1RZUEUsCisJCQlDTURUQUdfQ1JFQVRFX0NBU1QsCisJCQlD TURUQUdfQUxURVJfQ0FTVCwKKwkJCUNNRFRBR19EUk9QX0NBU1QsCisJCQlDTURUQUdfQ1JFQVRF X09QRVJBVE9SLAorCQkJQ01EVEFHX0NSRUFURV9PUEVSQVRPUl9DTEFTUywKKwkJCUNNRFRBR19D UkVBVEVfT1BFUkFUT1JfRkFNSUxZLAorCQkJQ01EVEFHX0FMVEVSX09QRVJBVE9SX0ZBTUlMWSwK KwkJCUNNRFRBR19BTFRFUl9PUEVSQVRPUl9DTEFTUywKKwkJCUNNRFRBR19BTFRFUl9PUEVSQVRP UiwKKwkJCUNNRFRBR19EUk9QX09QRVJBVE9SLAorCQkJQ01EVEFHX0RST1BfT1BFUkFUT1JfQ0xB U1MsCisJCQlDTURUQUdfRFJPUF9PUEVSQVRPUl9GQU1JTFksCisJCQlDTURUQUdfQ1JFQVRFX1BS T0NFRFVSRSwKKwkJCUNNRFRBR19BTFRFUl9QUk9DRURVUkUsCisJCQlDTURUQUdfRFJPUF9QUk9D RURVUkUsCisJCQlDTURUQUdfQ1JFQVRFX0ZVTkNUSU9OLAorCQkJQ01EVEFHX0FMVEVSX0ZVTkNU SU9OLAorCQkJQ01EVEFHX0RST1BfRlVOQ1RJT04sCisJCQlDTURUQUdfQ1JFQVRFX1RSSUdHRVIs CisJCQlDTURUQUdfQUxURVJfVFJJR0dFUiwKKwkJCUNNRFRBR19EUk9QX1RBQkxFLAorCQkJQ01E VEFHX0NSRUFURV9UQUJMRSwKKwkJCUNNRFRBR19BTFRFUl9UQUJMRSwKKwkJCUNNRFRBR19DUkVB VEVfU0VRVUVOQ0UsCisJCQlDTURUQUdfQUxURVJfU0VRVUVOQ0UsCisJCQlDTURUQUdfRFJPUF9T RVFVRU5DRSwKKwkJCUNNRFRBR19DUkVBVEVfU0NIRU1BLAorCQkJQ01EVEFHX0FMVEVSX1NDSEVN QSwKKwkJCUNNRFRBR19EUk9QX1NDSEVNQSwKKwkJCUNNRFRBR19DUkVBVEVfSU5ERVgsCisJCQlD TURUQUdfRFJPUF9JTkRFWCwKKwkJCUNNRFRBR19BTFRFUl9JTkRFWAorCQl9OworCisJCS8qIENy ZWF0ZSB0aGUgZGRsX2NvbW1hbmRfZW5kIGV2ZW50IHRyaWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVw bGljYUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRfZW5kIiwgZW5kX2NvbW1hbmRzLAorCQkJCQkJ CQkJIGxlbmd0aG9mKGVuZF9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBDcmVh dGUgdGhlIGRkbF9jb21tYW5kX3N0YXJ0IGV2ZW50IHRyaWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVw bGljYUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRfc3RhcnQiLCBzdGFydF9jb21tYW5kcywKKwkJ CQkJCQkJCSBsZW5ndGhvZihzdGFydF9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKworCQkv KiBDcmVhdGUgdGhlIHRhYmxlX3Jld3JpdGUgZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExS ZXBsaWNhRXZlbnRUcmlnZ2VyKCJ0YWJsZV9yZXdyaXRlIiwgcmV3cml0ZV9jb21tYW5kcywKKwkJ CQkJCQkJCSBsZW5ndGhvZihyZXdyaXRlX2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOworCX0K KwogCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CiAKIAlJbnZva2VPYmplY3RQ b3N0Q3JlYXRlSG9vayhQdWJsaWNhdGlvblJlbGF0aW9uSWQsIHB1Ym9pZCwgMCk7CkBAIC0xMDIy LDYgKzExNDYsOSBAQCBBbHRlclB1YmxpY2F0aW9uT3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUs IEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LAogCiAJCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0 aW9uX3B1YnRydW5jYXRlIC0gMV0gPSBCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJ0cnVuY2F0 ZSk7CiAJCXJlcGxhY2VzW0FudW1fcGdfcHVibGljYXRpb25fcHVidHJ1bmNhdGUgLSAxXSA9IHRy dWU7CisKKwkJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHViZGRsIC0gMV0gPSBCb29sR2V0 RGF0dW0ocHViYWN0aW9ucy5wdWJkZGwpOworCQlyZXBsYWNlc1tBbnVtX3BnX3B1YmxpY2F0aW9u X3B1YmRkbCAtIDFdID0gdHJ1ZTsKIAl9CiAKIAlpZiAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jv b3RfZ2l2ZW4pCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IDcwYjk0YmIuLjRkZTA1MWIg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC01MjUzLDcgKzUyNTMsNyBAQCBBVEV4ZWND bWQoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLAogCSAqIFJlcG9ydCB0aGUg c3ViY29tbWFuZCB0byBpbnRlcmVzdGVkIGV2ZW50IHRyaWdnZXJzLgogCSAqLwogCWlmIChjbWQp Ci0JCUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKChOb2RlICopIGNtZCwgYWRk cmVzcyk7CisJCUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKChOb2RlICopIGNt ZCwgYWRkcmVzcywgdGFiLT5yZXdyaXRlKTsKIAogCS8qCiAJICogQnVtcCB0aGUgY29tbWFuZCBj b3VudGVyIHRvIGVuc3VyZSB0aGUgbmV4dCBzdWJjb21tYW5kIGluIHRoZSBzZXF1ZW5jZQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKaW5kZXggYzRlMmZkZS4uZjNlZWI2 NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQor KysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCkBAIC0xNiw2ICsx Niw3IEBAIG92ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChzcmNkaXIpICQoQ1BQRkxBR1MpCiAKIE9C SlMgPSBcCiAJZGVjb2RlLm8gXAorCWRkbG1lc3NhZ2Uub1wKIAlsYXVuY2hlci5vIFwKIAlsb2dp Y2FsLm8gXAogCWxvZ2ljYWxmdW5jcy5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9kZGxtZXNzYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA5 MzUyMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv ZGRsbWVzc2FnZS5jCkBAIC0wLDAgKzEsODYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAq IGRkbG1lc3NhZ2UuYworICoJICBMb2dpY2FsIERETCBtZXNzYWdlcy4KKyAqCisgKiBDb3B5cmln aHQgKGMpIDIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICog SURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxt ZXNzYWdlLmMKKyAqCisgKiBOT1RFUworICoKKyAqIExvZ2ljYWwgRERMIG1lc3NhZ2VzIGFsbG93 IFhMT0cgbG9nZ2luZyBvZiBEREwgY29tbWFuZCBzdHJpbmdzIHRoYXQKKyAqIGdldCBwYXNzZWQg dG8gdGhlIGxvZ2ljYWwgZGVjb2RpbmcgcGx1Z2luLiBJbiBub3JtYWwgWExPRyBwcm9jZXNzaW5n IHRoZXkKKyAqIGFyZSBzYW1lIGFzIE5PT1AuCisgKgorICogVW5saWtlIGdlbmVyaWMgbG9naWNh bCBtZXNzYWdlcywgdGhlc2UgRERMIG1lc3NhZ2VzIGhhdmUgb25seSB0cmFuc2FjdGlvbmFsCisg KiBtb2RlLk5vdGUgYnkgZGVmYXVsdCBERExzIGluIFBvc3RncmVTUUwgYXJlIHRyYW5zYWN0aW9u YWwuCisgKgorICogVGhlc2UgbWVzc2FnZXMgYXJlIHBhcnQgb2YgY3VycmVudCB0cmFuc2FjdGlv biBhbmQgd2lsbCBiZSBzZW50IHRvCisgKiBkZWNvZGluZyBwbHVnaW4gdXNpbmcgaW4gYSBzYW1l IHdheSBhcyBETUwgb3BlcmF0aW9ucy4KKyAqCisgKiBFdmVyeSBtZXNzYWdlIGNhcnJpZXMgcHJl Zml4IHRvIGF2b2lkIGNvbmZsaWN0cyBiZXR3ZWVuIGRpZmZlcmVudCBkZWNvZGluZworICogcGx1 Z2lucy4gVGhlIHBsdWdpbiBhdXRob3JzIG11c3QgdGFrZSBleHRyYSBjYXJlIHRvIHVzZSB1bmlx dWUgcHJlZml4LAorICogZ29vZCBvcHRpb25zIHNlZW1zIHRvIGJlIGZvciBleGFtcGxlIHRvIHVz ZSB0aGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uLgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIK KyNpbmNsdWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgorI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNw YWNlLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMvZXhlY25vZGVz LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgorI2luY2x1ZGUgInJlcGxpY2F0 aW9uL2RkbG1lc3NhZ2UuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorCisvKgorICog V3JpdGUgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZSBpbnRvIFhMb2cuCisgKi8KK1hMb2dS ZWNQdHIKK0xvZ0xvZ2ljYWxERExNZXNzYWdlKGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlk LCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCSBjb25zdCBjaGFyICptZXNzYWdl LCBzaXplX3Qgc2l6ZSkKK3sKKwl4bF9sb2dpY2FsX2RkbF9tZXNzYWdlIHhscmVjOworCisJLyoK KwkgKiBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHRyYW5zYWN0aW9uIGlkLgorCSAqLworCUFzc2Vy dChJc1RyYW5zYWN0aW9uU3RhdGUoKSk7CisJR2V0Q3VycmVudFRyYW5zYWN0aW9uSWQoKTsKKwor CXhscmVjLmRiSWQgPSBNeURhdGFiYXNlSWQ7CisJLyogdHJhaWxpbmcgemVybyBpcyBjcml0aWNh bDsgc2VlIGxvZ2ljYWxkZGxtc2dfZGVzYyAqLworCXhscmVjLnByZWZpeF9zaXplID0gc3RybGVu KHByZWZpeCkgKyAxOworCXhscmVjLm1lc3NhZ2Vfc2l6ZSA9IHNpemU7CisJeGxyZWMucmVsaWQg PSByZWxpZDsKKwl4bHJlYy5jbWR0eXBlID0gY21kdHlwZTsKKworCVhMb2dCZWdpbkluc2VydCgp OworCVhMb2dSZWdpc3RlckRhdGEoKGNoYXIgKikgJnhscmVjLCBTaXplT2ZMb2dpY2FsRERMTWVz c2FnZSk7CisJWExvZ1JlZ2lzdGVyRGF0YSh1bmNvbnN0aWZ5KGNoYXIgKiwgcHJlZml4KSwgeGxy ZWMucHJlZml4X3NpemUpOworCVhMb2dSZWdpc3RlckRhdGEodW5jb25zdGlmeShjaGFyICosIG1l c3NhZ2UpLCBzaXplKTsKKworCS8qIGFsbG93IG9yaWdpbiBmaWx0ZXJpbmcgKi8KKwlYTG9nU2V0 UmVjb3JkRmxhZ3MoWExPR19JTkNMVURFX09SSUdJTik7CisKKwlyZXR1cm4gWExvZ0luc2VydChS TV9MT0dJQ0FMRERMTVNHX0lELCBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpOworfQorCisvKgor ICogUmVkbyBpcyBiYXNpY2FsbHkganVzdCBub29wIGZvciBsb2dpY2FsIGRlY29kaW5nIGRkbCBt ZXNzYWdlcy4KKyAqLwordm9pZAorbG9naWNhbGRkbG1zZ19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAq cmVjb3JkKQoreworCXVpbnQ4CQlpbmZvID0gWExvZ1JlY0dldEluZm8ocmVjb3JkKSAmIH5YTFJf SU5GT19NQVNLOworCisJaWYgKGluZm8gIT0gWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKQorCQll bG9nKFBBTklDLCAibG9naWNhbGRkbG1zZ19yZWRvOiB1bmtub3duIG9wIGNvZGUgJXUiLCBpbmZv KTsKKworCS8qIFRoaXMgaXMgb25seSBpbnRlcmVzdGluZyBmb3IgbG9naWNhbCBkZWNvZGluZywg c2VlIGRlY29kZS5jLiAqLworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9kZWNvZGUuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2Rl LmMKaW5kZXggMTY2N2Q3Mi4uNjY2NmQ1NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9kZWNvZGUuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2RlY29kZS5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hsb2d1dGls cy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29udHJvbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0 aW9uL2RlY29kZS5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNs dWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2Fn ZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgpAQCAtNjA0LDYgKzYwNSw0NiBA QCBsb2dpY2FsbXNnX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNv cmRCdWZmZXIgKmJ1ZikKIH0KIAogLyoKKyAqIEhhbmRsZSBybWdyIExPR0lDQUxERExNU0dfSUQg cmVjb3JkcyBmb3IgRGVjb2RlUmVjb3JkSW50b1Jlb3JkZXJCdWZmZXIoKS4KKyAqLwordm9pZAor bG9naWNhbGRkbG1zZ19kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVj b3JkQnVmZmVyICpidWYpCit7CisJU25hcEJ1aWxkICAqYnVpbGRlciA9IGN0eC0+c25hcHNob3Rf YnVpbGRlcjsKKwlYTG9nUmVhZGVyU3RhdGUgKnIgPSBidWYtPnJlY29yZDsKKwlUcmFuc2FjdGlv bklkIHhpZCA9IFhMb2dSZWNHZXRYaWQocik7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5m byhyKSAmIH5YTFJfSU5GT19NQVNLOworCVJlcE9yaWdpbklkIG9yaWdpbl9pZCA9IFhMb2dSZWNH ZXRPcmlnaW4ocik7CisJeGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqbWVzc2FnZTsKKworCWlmIChp bmZvICE9IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwkJZWxvZyhFUlJPUiwgInVuZXhwZWN0 ZWQgUk1fTE9HSUNBTERETE1TR19JRCByZWNvcmQgdHlwZTogJXUiLCBpbmZvKTsKKworCVJlb3Jk ZXJCdWZmZXJQcm9jZXNzWGlkKGN0eC0+cmVvcmRlciwgWExvZ1JlY0dldFhpZChyKSwgYnVmLT5v cmlncHRyKTsKKworCS8qCisJICogSWYgd2UgZG9uJ3QgaGF2ZSBzbmFwc2hvdCBvciB3ZSBhcmUg anVzdCBmYXN0LWZvcndhcmRpbmcsIHRoZXJlIGlzIG5vCisJICogcG9pbnQgaW4gZGVjb2Rpbmcg ZGRsIG1lc3NhZ2VzLgorCSAqLworCWlmIChTbmFwQnVpbGRDdXJyZW50U3RhdGUoYnVpbGRlcikg PCBTTkFQQlVJTERfRlVMTF9TTkFQU0hPVCB8fAorCQljdHgtPmZhc3RfZm9yd2FyZCkKKwkJcmV0 dXJuOworCisJbWVzc2FnZSA9ICh4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICopIFhMb2dSZWNHZXRE YXRhKHIpOworCisJaWYgKG1lc3NhZ2UtPmRiSWQgIT0gY3R4LT5zbG90LT5kYXRhLmRhdGFiYXNl IHx8CisJCUZpbHRlckJ5T3JpZ2luKGN0eCwgb3JpZ2luX2lkKSkKKwkJcmV0dXJuOworCisJaWYg KFNuYXBCdWlsZFByb2Nlc3NDaGFuZ2UoYnVpbGRlciwgeGlkLCBidWYtPm9yaWdwdHIpKQorCQlS ZW9yZGVyQnVmZmVyUXVldWVERExNZXNzYWdlKGN0eC0+cmVvcmRlciwgeGlkLCBidWYtPmVuZHB0 ciwKKwkJCQkJCQkJCSBtZXNzYWdlLT5tZXNzYWdlLCAvKiBmaXJzdCBwYXJ0IG9mIG1lc3NhZ2Ug aXMgcHJlZml4ICovCisJCQkJCQkJCQkgbWVzc2FnZS0+bWVzc2FnZV9zaXplLAorCQkJCQkJCQkJ IG1lc3NhZ2UtPm1lc3NhZ2UgKyBtZXNzYWdlLT5wcmVmaXhfc2l6ZSwKKwkJCQkJCQkJCSBtZXNz YWdlLT5yZWxpZCwgbWVzc2FnZS0+Y21kdHlwZSk7Cit9CisKKy8qCiAgKiBDb25zb2xpZGF0ZWQg Y29tbWl0IHJlY29yZCBoYW5kbGluZyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgZm9ybSBvZiBjb21t aXQKICAqIHJlY29yZHMuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9sb2dpY2FsLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2lj YWwuYwppbmRleCA2MjVhN2Y0Li45ODk2OWM3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL2xvZ2ljYWwuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgImZtZ3IuaCIKICNp bmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBs aWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vZGVjb2RlLmgiCiAj aW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29y aWdpbi5oIgpAQCAtNzMsNiArNzQsMTAgQEAgc3RhdGljIHZvaWQgdHJ1bmNhdGVfY2Jfd3JhcHBl cihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogc3RhdGljIHZv aWQgbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVy VFhOICp0eG4sCiAJCQkJCQkJICAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgYm9vbCB0cmFuc2Fj dGlvbmFsLAogCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBtZXNzYWdlX3NpemUs IGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworc3RhdGljIHZvaWQgZGRsbWVzc2FnZV9jYl93cmFwcGVy KFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCSAg WExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkgIE9p ZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkgIFNpemUgbWVz c2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKIAogLyogc3RyZWFtaW5nIGNhbGxiYWNr cyAqLwogc3RhdGljIHZvaWQgc3RyZWFtX3N0YXJ0X2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAq Y2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKQEAgLTkwLDYgKzk1LDExIEBAIHN0YXRpYyB2 b2lkIHN0cmVhbV9jaGFuZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRl ckJ1ZmZlclRYTiAqdHhuCiBzdGF0aWMgdm9pZCBzdHJlYW1fbWVzc2FnZV9jYl93cmFwcGVyKFJl b3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQkJCQkgIFhM b2dSZWNQdHIgbWVzc2FnZV9sc24sIGJvb2wgdHJhbnNhY3Rpb25hbCwKIAkJCQkJCQkJCSAgY29u c3QgY2hhciAqcHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7 CitzdGF0aWMgdm9pZCBzdHJlYW1fZGRsbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIg KmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJIFhMb2dSZWNQdHIgbWVz c2FnZV9sc24sCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkgT2lk IHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJIFNpemUgbWVz c2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKIHN0YXRpYyB2b2lkIHN0cmVhbV90cnVu Y2F0ZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0 eG4sCiAJCQkJCQkJCQkgICBpbnQgbnJlbGF0aW9ucywgUmVsYXRpb24gcmVsYXRpb25zW10sIFJl b3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSk7CiAKQEAgLTIxOCw2ICsyMjgsNyBAQCBTdGFydHVw RGVjb2RpbmdDb250ZXh0KExpc3QgKm91dHB1dF9wbHVnaW5fb3B0aW9ucywKIAljdHgtPnJlb3Jk ZXItPmFwcGx5X3RydW5jYXRlID0gdHJ1bmNhdGVfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXIt PmNvbW1pdCA9IGNvbW1pdF9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+bWVzc2FnZSA9IG1l c3NhZ2VfY2Jfd3JhcHBlcjsKKwljdHgtPnJlb3JkZXItPmRkbG1lc3NhZ2UgPSBkZGxtZXNzYWdl X2NiX3dyYXBwZXI7CiAKIAkvKgogCSAqIFRvIHN1cHBvcnQgc3RyZWFtaW5nLCB3ZSByZXF1aXJl IHN0YXJ0L3N0b3AvYWJvcnQvY29tbWl0L2NoYW5nZQpAQCAtMjM0LDYgKzI0NSw3IEBAIFN0YXJ0 dXBEZWNvZGluZ0NvbnRleHQoTGlzdCAqb3V0cHV0X3BsdWdpbl9vcHRpb25zLAogCQkoY3R4LT5j YWxsYmFja3Muc3RyZWFtX2NvbW1pdF9jYiAhPSBOVUxMKSB8fAogCQkoY3R4LT5jYWxsYmFja3Mu c3RyZWFtX2NoYW5nZV9jYiAhPSBOVUxMKSB8fAogCQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX21l c3NhZ2VfY2IgIT0gTlVMTCkgfHwKKwkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9kZGxtZXNzYWdl X2NiICE9IE5VTEwpIHx8CiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fdHJ1bmNhdGVfY2IgIT0g TlVMTCk7CiAKIAkvKgpAQCAtMjUxLDYgKzI2Myw3IEBAIFN0YXJ0dXBEZWNvZGluZ0NvbnRleHQo TGlzdCAqb3V0cHV0X3BsdWdpbl9vcHRpb25zLAogCWN0eC0+cmVvcmRlci0+c3RyZWFtX2NvbW1p dCA9IHN0cmVhbV9jb21taXRfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPnN0cmVhbV9jaGFu Z2UgPSBzdHJlYW1fY2hhbmdlX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5zdHJlYW1fbWVz c2FnZSA9IHN0cmVhbV9tZXNzYWdlX2NiX3dyYXBwZXI7CisJY3R4LT5yZW9yZGVyLT5zdHJlYW1f ZGRsbWVzc2FnZSA9IHN0cmVhbV9kZGxtZXNzYWdlX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVy LT5zdHJlYW1fdHJ1bmNhdGUgPSBzdHJlYW1fdHJ1bmNhdGVfY2Jfd3JhcHBlcjsKIAogCkBAIC0x MjIxLDYgKzEyMzQsNDQgQEAgbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hl LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiB9CiAKIHN0YXRpYyB2b2lkCitkZGxtZXNzYWdlX2Ni X3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJ CQkJICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwg T2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCSAgU2l6ZSBtZXNz YWdlX3NpemUsCisJCQkJCSAgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlMb2dpY2FsRGVjb2Rp bmdDb250ZXh0ICpjdHggPSBjYWNoZS0+cHJpdmF0ZV9kYXRhOworCUxvZ2ljYWxFcnJvckNhbGxi YWNrU3RhdGUgc3RhdGU7CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CisKKwlB c3NlcnQoIWN0eC0+ZmFzdF9mb3J3YXJkKTsKKworCWlmIChjdHgtPmNhbGxiYWNrcy5kZGxtZXNz YWdlX2NiID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFB1c2ggY2FsbGJhY2sgKyBpbmZvIG9u IHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJc3RhdGUuY3R4ID0gY3R4OworCXN0YXRlLmNh bGxiYWNrX25hbWUgPSAiZGRsbWVzc2FnZSI7CisJc3RhdGUucmVwb3J0X2xvY2F0aW9uID0gbWVz c2FnZV9sc247CisJZXJyY2FsbGJhY2suY2FsbGJhY2sgPSBvdXRwdXRfcGx1Z2luX2Vycm9yX2Nh bGxiYWNrOworCWVycmNhbGxiYWNrLmFyZyA9ICh2b2lkICopICZzdGF0ZTsKKwllcnJjYWxsYmFj ay5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJZXJyb3JfY29udGV4dF9zdGFjayA9 ICZlcnJjYWxsYmFjazsKKworCS8qIHNldCBvdXRwdXQgc3RhdGUgKi8KKwljdHgtPmFjY2VwdF93 cml0ZXMgPSB0cnVlOworCWN0eC0+d3JpdGVfeGlkID0gdHhuICE9IE5VTEwgPyB0eG4tPnhpZCA6 IEludmFsaWRUcmFuc2FjdGlvbklkOworCWN0eC0+d3JpdGVfbG9jYXRpb24gPSBtZXNzYWdlX2xz bjsKKworCS8qIGRvIHRoZSBhY3R1YWwgd29yazogY2FsbCBjYWxsYmFjayAqLworCWN0eC0+Y2Fs bGJhY2tzLmRkbG1lc3NhZ2VfY2IoY3R4LCB0eG4sIG1lc3NhZ2VfbHNuLCBwcmVmaXgsIHJlbGlk LCBjbWR0eXBlLAorCQkJCQkJCQkgbWVzc2FnZV9zaXplLCBtZXNzYWdlKTsKKworCS8qIFBvcCB0 aGUgZXJyb3IgY29udGV4dCBzdGFjayAqLworCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxs YmFjay5wcmV2aW91czsKK30KKworc3RhdGljIHZvaWQKIHN0cmVhbV9zdGFydF9jYl93cmFwcGVy KFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQlYTG9n UmVjUHRyIGZpcnN0X2xzbikKIHsKQEAgLTE1MzYsNiArMTU4Nyw0OCBAQCBzdHJlYW1fbWVzc2Fn ZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4s CiB9CiAKIHN0YXRpYyB2b2lkCitzdHJlYW1fZGRsbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJC dWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJIFhMb2dSZWNQdHIg bWVzc2FnZV9sc24sCisJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBh cnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJIFNpemUgbWVzc2FnZV9zaXplLAorCQkJ CQkJCSBjb25zdCBjaGFyICptZXNzYWdlKQoreworCUxvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0 eCA9IGNhY2hlLT5wcml2YXRlX2RhdGE7CisJTG9naWNhbEVycm9yQ2FsbGJhY2tTdGF0ZSBzdGF0 ZTsKKwlFcnJvckNvbnRleHRDYWxsYmFjayBlcnJjYWxsYmFjazsKKworCUFzc2VydCghY3R4LT5m YXN0X2ZvcndhcmQpOworCisJLyogV2UncmUgb25seSBzdXBwb3NlZCB0byBjYWxsIHRoaXMgd2hl biBzdHJlYW1pbmcgaXMgc3VwcG9ydGVkLiAqLworCUFzc2VydChjdHgtPnN0cmVhbWluZyk7CisK KwkvKiB0aGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsICovCisJaWYgKGN0eC0+Y2FsbGJhY2tzLnN0 cmVhbV9kZGxtZXNzYWdlX2NiID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFB1c2ggY2FsbGJh Y2sgKyBpbmZvIG9uIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJc3RhdGUuY3R4ID0gY3R4 OworCXN0YXRlLmNhbGxiYWNrX25hbWUgPSAic3RyZWFtX2RkbG1lc3NhZ2UiOworCXN0YXRlLnJl cG9ydF9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCWVycmNhbGxiYWNrLmNhbGxiYWNrID0gb3V0 cHV0X3BsdWdpbl9lcnJvcl9jYWxsYmFjazsKKwllcnJjYWxsYmFjay5hcmcgPSAodm9pZCAqKSAm c3RhdGU7CisJZXJyY2FsbGJhY2sucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOworCWVy cm9yX2NvbnRleHRfc3RhY2sgPSAmZXJyY2FsbGJhY2s7CisKKwkvKiBzZXQgb3V0cHV0IHN0YXRl ICovCisJY3R4LT5hY2NlcHRfd3JpdGVzID0gdHJ1ZTsKKwljdHgtPndyaXRlX3hpZCA9IHR4biAh PSBOVUxMID8gdHhuLT54aWQgOiBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwljdHgtPndyaXRlX2xv Y2F0aW9uID0gbWVzc2FnZV9sc247CisKKwkvKiBkbyB0aGUgYWN0dWFsIHdvcms6IGNhbGwgY2Fs bGJhY2sgKi8KKwljdHgtPmNhbGxiYWNrcy5zdHJlYW1fZGRsbWVzc2FnZV9jYihjdHgsIHR4biwg bWVzc2FnZV9sc24sIHByZWZpeCwgcmVsaWQsCisJCQkJCQkJCQkJY21kdHlwZSwgbWVzc2FnZV9z aXplLCBtZXNzYWdlKTsKKworCS8qIFBvcCB0aGUgZXJyb3IgY29udGV4dCBzdGFjayAqLworCWVy cm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKK30KKworc3RhdGljIHZv aWQKIHN0cmVhbV90cnVuY2F0ZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9y ZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQkgICBpbnQgbnJlbGF0aW9ucywgUmVsYXRpb24gcmVs YXRpb25zW10sCiAJCQkJCQkgICBSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2UpCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKaW5kZXggZmY4NTEzZS4uZjM1NDA2MiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCisrKyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwpAQCAtNjYzLDYgKzY2Myw1MiBA QCBsb2dpY2FscmVwX3dyaXRlX21lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQg eGlkLCBYTG9nUmVjUHRyIGxzbiwKIH0KIAogLyoKKyAqIFJlYWQgRERMIE1FU1NBR0UgZnJvbSBz dHJlYW0KKyAqLworY2hhciAqCitsb2dpY2FscmVwX3JlYWRfZGRsbWVzc2FnZShTdHJpbmdJbmZv IGluLCBYTG9nUmVjUHRyICpsc24sCisJCQkJCQkgICBjb25zdCBjaGFyICoqcHJlZml4LAorCQkJ CQkJICAgU2l6ZSAqc3opCit7CisJdWludDggZmxhZ3M7CisJY2hhciAqbXNnOworCisJLy9UT0RP IGRvdWJsZSBjaGVjayB3aGVuIGRvIHdlIG5lZWQgdG8gZ2V0IFRyYW5zYWN0aW9uSWQuCisKKwlm bGFncyA9IHBxX2dldG1zZ2ludChpbiwgMSk7CisJaWYgKGZsYWdzICE9IDApCisJCWVsb2coRVJS T1IsICJ1bnJlY29nbml6ZWQgZmxhZ3MgJXUgaW4gZGRsIG1lc3NhZ2UiLCBmbGFncyk7CisJKmxz biA9IHBxX2dldG1zZ2ludDY0KGluKTsKKwkqcHJlZml4ID0gcHFfZ2V0bXNnc3RyaW5nKGluKTsK Kwkqc3ogPSBwcV9nZXRtc2dpbnQoaW4sIDQpOworCW1zZyA9IChjaGFyICopIHBxX2dldG1zZ2J5 dGVzKGluLCAqc3opOworCisJcmV0dXJuIG1zZzsKK30KKworLyoKKyAqIFdyaXRlIERETCBNRVNT QUdFIHRvIHN0cmVhbQorICovCit2b2lkCitsb2dpY2FscmVwX3dyaXRlX2RkbG1lc3NhZ2UoU3Ry aW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkJCQlj b25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJdWlu dDgJCWZsYWdzID0gMDsKKworCXBxX3NlbmRieXRlKG91dCwgTE9HSUNBTF9SRVBfTVNHX0RETE1F U1NBR0UpOworCisJLyogdHJhbnNhY3Rpb24gSUQgKGlmIG5vdCB2YWxpZCwgd2UncmUgbm90IHN0 cmVhbWluZykgKi8KKwlpZiAoVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSkKKwkJcHFfc2VuZGlu dDMyKG91dCwgeGlkKTsKKworCXBxX3NlbmRpbnQ4KG91dCwgZmxhZ3MpOworCXBxX3NlbmRpbnQ2 NChvdXQsIGxzbik7CisJcHFfc2VuZHN0cmluZyhvdXQsIHByZWZpeCk7CisJcHFfc2VuZGludDMy KG91dCwgc3opOworCXBxX3NlbmRieXRlcyhvdXQsIG1lc3NhZ2UsIHN6KTsKK30KKworLyoKICAq IFdyaXRlIHJlbGF0aW9uIGRlc2NyaXB0aW9uIHRvIHRoZSBvdXRwdXQgc3RyZWFtLgogICovCiB2 b2lkCkBAIC0xMjE4LDYgKzEyNjQsOCBAQCBsb2dpY2FscmVwX21lc3NhZ2VfdHlwZShMb2dpY2Fs UmVwTXNnVHlwZSBhY3Rpb24pCiAJCQlyZXR1cm4gIlRZUEUiOwogCQljYXNlIExPR0lDQUxfUkVQ X01TR19NRVNTQUdFOgogCQkJcmV0dXJuICJNRVNTQUdFIjsKKwkJY2FzZSBMT0dJQ0FMX1JFUF9N U0dfRERMTUVTU0FHRToKKwkJCXJldHVybiAiRERMIjsKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0df QkVHSU5fUFJFUEFSRToKIAkJCXJldHVybiAiQkVHSU4gUFJFUEFSRSI7CiAJCWNhc2UgTE9HSUNB TF9SRVBfTVNHX1BSRVBBUkU6CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL3Jlb3JkZXJidWZmZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv cmVvcmRlcmJ1ZmZlci5jCmluZGV4IDFjMjFhMWQuLjNlZGZjN2YgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCisrKyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCkBAIC05NCw2ICs5NCw3IEBA CiAjaW5jbHVkZSAibGliL2JpbmFyeWhlYXAuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNp bmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAj aW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Jl b3JkZXJidWZmZXIuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9zbG90LmgiCkBAIC01MTUsNiAr NTE2LDE0IEBAIFJlb3JkZXJCdWZmZXJSZXR1cm5DaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJl b3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSwKIAkJCQlwZnJlZShjaGFuZ2UtPmRhdGEubXNnLm1l c3NhZ2UpOwogCQkJY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlID0gTlVMTDsKIAkJCWJyZWFrOwor CQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOgorCQkJaWYgKGNoYW5nZS0+ ZGF0YS5kZGxtc2cucHJlZml4ICE9IE5VTEwpCisJCQkJcGZyZWUoY2hhbmdlLT5kYXRhLmRkbG1z Zy5wcmVmaXgpOworCQkJY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXggPSBOVUxMOworCQkJaWYg KGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSAhPSBOVUxMKQorCQkJCXBmcmVlKGNoYW5nZS0+ ZGF0YS5kZGxtc2cubWVzc2FnZSk7CisJCQljaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UgPSBO VUxMOworCQkJYnJlYWs7CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElP TjoKIAkJCWlmIChjaGFuZ2UtPmRhdGEuaW52YWwuaW52YWxpZGF0aW9ucykKIAkJCQlwZnJlZShj aGFuZ2UtPmRhdGEuaW52YWwuaW52YWxpZGF0aW9ucyk7CkBAIC04NzAsNiArODc5LDM2IEBAIFJl b3JkZXJCdWZmZXJRdWV1ZU1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQg eGlkLAogfQogCiAvKgorICogQSB0cmFuc2FjdGlvbmFsIERETCBtZXNzYWdlIGlzIHF1ZXVlZCB0 byBiZSBwcm9jZXNzZWQgdXBvbiBjb21taXQuCisgKi8KK3ZvaWQKK1Jlb3JkZXJCdWZmZXJRdWV1 ZURETE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAorCQkJCQkJ CSBYTG9nUmVjUHRyIGxzbiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCSBTaXplIG1lc3Nh Z2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSwKKwkJCQkJCQkgT2lkIHJlbGlkLCBEZXBhcnNl ZENvbW1hbmRUeXBlIGNtZHR5cGUpCit7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCVJl b3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZTsKKworCUFzc2VydCh4aWQgIT0gSW52YWxpZFRyYW5z YWN0aW9uSWQpOworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhyYi0+Y29u dGV4dCk7CisKKwljaGFuZ2UgPSBSZW9yZGVyQnVmZmVyR2V0Q2hhbmdlKHJiKTsKKwljaGFuZ2Ut PmFjdGlvbiA9IFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOworCWNoYW5nZS0+ZGF0 YS5kZGxtc2cucHJlZml4ID0gcHN0cmR1cChwcmVmaXgpOworCWNoYW5nZS0+ZGF0YS5kZGxtc2cu cmVsaWQgPSByZWxpZDsKKwljaGFuZ2UtPmRhdGEuZGRsbXNnLmNtZHR5cGUgPSBjbWR0eXBlOwor CWNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplID0gbWVzc2FnZV9zaXplOworCWNoYW5n ZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSA9IHBhbGxvYyhtZXNzYWdlX3NpemUpOworCW1lbWNweShj aGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UsIG1lc3NhZ2UsIG1lc3NhZ2Vfc2l6ZSk7CisKKwlS ZW9yZGVyQnVmZmVyUXVldWVDaGFuZ2UocmIsIHhpZCwgbHNuLCBjaGFuZ2UsIGZhbHNlKTsKKwor CU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKK30KKworLyoKICAqIEFzc2VydFRY Tkxzbk9yZGVyCiAgKgkJVmVyaWZ5IExTTiBvcmRlcmluZyBvZiB0cmFuc2FjdGlvbiBsaXN0cyBp biB0aGUgcmVvcmRlcmJ1ZmZlcgogICoKQEAgLTE5NjksNiArMjAwOCwyOSBAQCBSZW9yZGVyQnVm ZmVyQXBwbHlNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4s CiB9CiAKIC8qCisgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIFJlb3JkZXJCdWZmZXJQcm9jZXNzVFhO IGZvciBhcHBseWluZyB0aGUgRERMIG1lc3NhZ2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAor UmVvcmRlckJ1ZmZlckFwcGx5RERMTWVzc2FnZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1 ZmZlclRYTiAqdHhuLAorCQkJCQkJCSBSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2UsIGJvb2wg c3RyZWFtaW5nKQoreworCWlmIChzdHJlYW1pbmcpCisJCXJiLT5zdHJlYW1fZGRsbWVzc2FnZShy YiwgdHhuLCBjaGFuZ2UtPmxzbiwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4 LAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwKKwkJCQkJCQkgIGNoYW5nZS0+ ZGF0YS5kZGxtc2cuY21kdHlwZSwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2Fn ZV9zaXplLAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlKTsKKwllbHNlCisJ CXJiLT5kZGxtZXNzYWdlKHJiLCB0eG4sIGNoYW5nZS0+bHNuLAorCQkJCQkgICBjaGFuZ2UtPmRh dGEuZGRsbXNnLnByZWZpeCwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwKKwkJ CQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5jbWR0eXBlLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEu ZGRsbXNnLm1lc3NhZ2Vfc2l6ZSwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdl KTsKK30KKworLyoKICAqIEZ1bmN0aW9uIHRvIHN0b3JlIHRoZSBjb21tYW5kIGlkIGFuZCBzbmFw c2hvdCBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50CiAgKiBzdHJlYW0gc28gdGhhdCB3ZSBjYW4g cmV1c2UgdGhlIHNhbWUgd2hpbGUgc2VuZGluZyB0aGUgbmV4dCBzdHJlYW0uCiAgKi8KQEAgLTIz NDYsNiArMjQwOCwxMCBAQCBSZW9yZGVyQnVmZmVyUHJvY2Vzc1RYTihSZW9yZGVyQnVmZmVyICpy YiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQlSZW9yZGVyQnVmZmVyQXBwbHlNZXNzYWdl KHJiLCB0eG4sIGNoYW5nZSwgc3RyZWFtaW5nKTsKIAkJCQkJYnJlYWs7CiAKKwkJCQljYXNlIFJF T1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOgorCQkJCQlSZW9yZGVyQnVmZmVyQXBwbHlE RExNZXNzYWdlKHJiLCB0eG4sIGNoYW5nZSwgc3RyZWFtaW5nKTsKKwkJCQkJYnJlYWs7CisKIAkJ CQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CiAJCQkJCS8qIEV4ZWN1 dGUgdGhlIGludmFsaWRhdGlvbiBtZXNzYWdlcyBsb2NhbGx5ICovCiAJCQkJCVJlb3JkZXJCdWZm ZXJFeGVjdXRlSW52YWxpZGF0aW9ucyhjaGFuZ2UtPmRhdGEuaW52YWwubmludmFsaWRhdGlvbnMs CkBAIC0zNzcxLDYgKzM4MzcsNDAgQEAgUmVvcmRlckJ1ZmZlclNlcmlhbGl6ZUNoYW5nZShSZW9y ZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCiAJCQkJYnJlYWs7CiAJCQl9 CisJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1FU1NBR0U6CisJCQl7CisJCQkJY2hh cgkgICAqZGF0YTsKKwkJCQlTaXplCQlwcmVmaXhfc2l6ZSA9IHN0cmxlbihjaGFuZ2UtPmRhdGEu ZGRsbXNnLnByZWZpeCkgKyAxOworCisJCQkJc3ogKz0gcHJlZml4X3NpemUgKyBjaGFuZ2UtPmRh dGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSArCisJCQkJCXNpemVvZihTaXplKSArIHNpemVvZihPaWQp ICsgc2l6ZW9mKGludCkgKyBzaXplb2YoU2l6ZSk7CisJCQkJUmVvcmRlckJ1ZmZlclNlcmlhbGl6 ZVJlc2VydmUocmIsIHN6KTsKKworCQkJCWRhdGEgPSAoKGNoYXIgKikgcmItPm91dGJ1ZikgKyBz aXplb2YoUmVvcmRlckJ1ZmZlckRpc2tDaGFuZ2UpOworCisJCQkJLyogbWlnaHQgaGF2ZSBiZWVu IHJlYWxsb2NhdGVkIGFib3ZlICovCisJCQkJb25kaXNrID0gKFJlb3JkZXJCdWZmZXJEaXNrQ2hh bmdlICopIHJiLT5vdXRidWY7CisKKwkJCQkvKiB3cml0ZSB0aGUgcHJlZml4LCByZWxpZCBhbmQg Y21kdHlwZSBpbmNsdWRpbmcgdGhlIHNpemUgKi8KKwkJCQltZW1jcHkoZGF0YSwgJnByZWZpeF9z aXplLCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNw eShkYXRhLCAmY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwgc2l6ZW9mKE9pZCkpOworCQkJCWRh dGEgKz0gc2l6ZW9mKE9pZCk7CisJCQkJbWVtY3B5KGRhdGEsICZjaGFuZ2UtPmRhdGEuZGRsbXNn LmNtZHR5cGUsIHNpemVvZihpbnQpKTsKKwkJCQlkYXRhICs9IHNpemVvZihpbnQpOworCQkJCW1l bWNweShkYXRhLCBjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCwKKwkJCQkJICAgcHJlZml4X3Np emUpOworCQkJCWRhdGEgKz0gcHJlZml4X3NpemU7CisKKwkJCQkvKiB3cml0ZSB0aGUgbWVzc2Fn ZSBpbmNsdWRpbmcgdGhlIHNpemUgKi8KKwkJCQltZW1jcHkoZGF0YSwgJmNoYW5nZS0+ZGF0YS5k ZGxtc2cubWVzc2FnZV9zaXplLCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNp emUpOworCQkJCW1lbWNweShkYXRhLCBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UsCisJCQkJ CSAgIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplKTsKKwkJCQlkYXRhICs9IGNoYW5n ZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplOworCisJCQkJYnJlYWs7CisJCQl9CiAJCWNhc2Ug UkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKIAkJCXsKIAkJCQljaGFyCSAgICpk YXRhOwpAQCAtNDA4NSw2ICs0MTg1LDE1IEBAIFJlb3JkZXJCdWZmZXJDaGFuZ2VTaXplKFJlb3Jk ZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSkKIAogCQkJCWJyZWFrOwogCQkJfQorCQljYXNlIFJFT1JE RVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOgorCQkJeworCQkJCVNpemUJCXByZWZpeF9zaXpl ID0gc3RybGVuKGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4KSArIDE7CisKKwkJCQlzeiArPSBw cmVmaXhfc2l6ZSArIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplICsKKwkJCQkJc2l6 ZW9mKFNpemUpICsgc2l6ZW9mKFNpemUpICsgc2l6ZW9mKE9pZCkgKyBzaXplb2YoaW50KTsKKwor CQkJCWJyZWFrOworCQkJfQogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJ T046CiAJCQl7CiAJCQkJc3ogKz0gc2l6ZW9mKFNoYXJlZEludmFsaWRhdGlvbk1lc3NhZ2UpICoK QEAgLTQzNjAsNiArNDQ2OSwzMyBAQCBSZW9yZGVyQnVmZmVyUmVzdG9yZUNoYW5nZShSZW9yZGVy QnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCiAJCQkJYnJlYWs7CiAJCQl9CisJ CWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1FU1NBR0U6CisJCQl7CisJCQkJU2l6ZQkJ cHJlZml4X3NpemU7CisKKwkJCQkvKiByZWFkIHByZWZpeCAqLworCQkJCW1lbWNweSgmcHJlZml4 X3NpemUsIGRhdGEsIHNpemVvZihTaXplKSk7CisJCQkJZGF0YSArPSBzaXplb2YoU2l6ZSk7CisJ CQkJbWVtY3B5KCZjaGFuZ2UtPmRhdGEuZGRsbXNnLnJlbGlkLCBkYXRhLCBzaXplb2YoT2lkKSk7 CisJCQkJZGF0YSArPSBzaXplb2YoT2lkKTsKKwkJCQltZW1jcHkoJmNoYW5nZS0+ZGF0YS5kZGxt c2cuY21kdHlwZSwgZGF0YSwgc2l6ZW9mKGludCkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKGludCk7 CisJCQkJY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXggPSBNZW1vcnlDb250ZXh0QWxsb2MocmIt PmNvbnRleHQsIHByZWZpeF9zaXplKTsKKwkJCQltZW1jcHkoY2hhbmdlLT5kYXRhLmRkbG1zZy5w cmVmaXgsIGRhdGEsIHByZWZpeF9zaXplKTsKKwkJCQlBc3NlcnQoY2hhbmdlLT5kYXRhLmRkbG1z Zy5wcmVmaXhbcHJlZml4X3NpemUgLSAxXSA9PSAnXDAnKTsKKwkJCQlkYXRhICs9IHByZWZpeF9z aXplOworCisJCQkJLyogcmVhZCB0aGUgbWVzc2FnZSAqLworCQkJCW1lbWNweSgmY2hhbmdlLT5k YXRhLm1zZy5tZXNzYWdlX3NpemUsIGRhdGEsIHNpemVvZihTaXplKSk7CisJCQkJZGF0YSArPSBz aXplb2YoU2l6ZSk7CisJCQkJY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlID0gTWVtb3J5Q29udGV4 dEFsbG9jKHJiLT5jb250ZXh0LAorCQkJCQkJCQkJCQkJCQkJICBjaGFuZ2UtPmRhdGEubXNnLm1l c3NhZ2Vfc2l6ZSk7CisJCQkJbWVtY3B5KGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZSwgZGF0YSwK KwkJCQkJICAgY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUpOworCQkJCWRhdGEgKz0gY2hh bmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemU7CisKKwkJCQlicmVhazsKKwkJCX0KIAkJY2FzZSBS RU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgogCQkJewogCQkJCVNpemUJCWludmFs X3NpemUgPSBzaXplb2YoU2hhcmVkSW52YWxpZGF0aW9uTWVzc2FnZSkgKgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKaW5kZXggNWY4YzU0MS4uNDQzYTNjMiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYworKysgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCkBAIC0xNTYsNiArMTU2LDcgQEAK ICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKICNp bmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCisjaW5jbHVkZSAicGFyc2VyL2FuYWx5emUu aCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd29ya2VyLmgi CiAjaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKQEAgLTE3OSw3ICsxODAsMTAgQEAK ICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNp bmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgorI2luY2x1ZGUgInRjb3AvZGRsX2RlcGFyc2Uu aCIKKyNpbmNsdWRlICJ0Y29wL3BxdWVyeS5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIK KyNpbmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNs dWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2NhdGNhY2hlLmgiCkBAIC0y NDYzLDYgKzI0NjcsMjMwIEBAIGFwcGx5X2hhbmRsZV90cnVuY2F0ZShTdHJpbmdJbmZvIHMpCiAJ ZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKIH0KIAorLyogUmVtb3ZlIHRoZSBkYXRhIHBvcHVsYXRp b24gZnJvbSB0aGUgY29tbWFuZCAqLworc3RhdGljIHZvaWQKK3ByZXByb2Nlc3NfY3JlYXRlX3Rh YmxlKFJhd1N0bXQgKmNvbW1hbmQpCit7CisJQ29tbWFuZFRhZwljb21tYW5kVGFnOworCisJY29t bWFuZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWcoKE5vZGUgKiljb21tYW5kKTsKKworCXN3aXRjaCAo Y29tbWFuZFRhZykKKwl7CisJCWNhc2UgQ01EVEFHX0NSRUFURV9UQUJMRV9BUzoKKwkJY2FzZSBD TURUQUdfU0VMRUNUX0lOVE86CisJCQl7CisJCQkJQ3JlYXRlVGFibGVBc1N0bXQgKmNhc3RtdCA9 IChDcmVhdGVUYWJsZUFzU3RtdCAqKSBjb21tYW5kLT5zdG10OworCQkJCWlmIChjYXN0bXQtPm9i anR5cGUgPT0gT0JKRUNUX1RBQkxFKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogRm9yY2Ugc2tp cHBpbmcgZGF0YSBwb3B1bGF0aW9uIHRvIGF2b2lkIGRhdGEKKwkJCQkJICogaW5jb25zaXN0ZW5j eS4gRGF0YSBzaG91bGQgYmUgcmVwbGljYXRlZCBmcm9tIHRoZQorCQkJCQkgKiBwdWJsaXNoZXIg aW5zdGVhZC4KKwkJCQkJICovCisJCQkJCWNhc3RtdC0+aW50by0+c2tpcERhdGEgPSB0cnVlOwor CQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENNRFRBR19TRUxFQ1Q6CisJCQl7CisJCQkJ U2VsZWN0U3RtdCAqc3N0bXQgPSAoU2VsZWN0U3RtdCAqKSBjb21tYW5kLT5zdG10OworCisJCQkJ aWYgKHNzdG10LT5pbnRvQ2xhdXNlICE9IE5VTEwpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBG b3JjZSBza2lwcGluZyBkYXRhIHBvcHVsYXRpb24gdG8gYXZvaWQgZGF0YQorCQkJCQkgKiBpbmNv bnNpc3RlbmN5LiBEYXRhIHNob3VsZCBiZSByZXBsaWNhdGVkIGZyb20gdGhlCisJCQkJCSAqIHB1 Ymxpc2hlciBpbnN0ZWFkLgorCQkJCQkgKi8KKwkJCQkJc3N0bXQtPmludG9DbGF1c2UtPnNraXBE YXRhID0gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsK Kwl9Cit9CisKKy8qCisgKiBIYW5kbGUgQ1JFQVRFIFRBQkxFIGNvbW1hbmQKKyAqCisgKiBDYWxs IEFkZFN1YnNjcmlwdGlvblJlbFN0YXRlIGZvciBDUkVBVEUgVEFCRUwgY29tbWFuZCB0byBzZXQg dGhlIHJlbHN0YXRlIHRvCisgKiBTVUJSRUxfU1RBVEVfUkVBRFkgc28gRE1MIGNoYW5nZXMgb24g dGhpcyBuZXcgdGFibGUgY2FuIGJlIHJlcGxpY2F0ZWQgd2l0aG91dAorICogaGF2aW5nIHRvIG1h bnVhbGx5IHJ1biAiYWx0ZXIgc3Vic2NyaXB0aW9uIC4uLiByZWZyZXNoIHB1YmxpY2F0aW9uIgor ICovCitzdGF0aWMgdm9pZAoraGFuZGxlX2NyZWF0ZV90YWJsZShSYXdTdG10ICpjb21tYW5kKQor eworCUNvbW1hbmRUYWcJY29tbWFuZFRhZzsKKwlSYW5nZVZhcgkgKnJ2ID0gTlVMTDsKKwlPaWQJ CQlyZWxpZDsKKwlPaWQJCQlyZWxuYW1lc3BhY2UgPSBJbnZhbGlkT2lkOworCWNoYXIgCQkgKnNj aGVtYW5hbWUgPSBOVUxMOworCWNoYXIJCSAqcmVsbmFtZSA9IE5VTEw7CisKKwljb21tYW5kVGFn ID0gQ3JlYXRlQ29tbWFuZFRhZygoTm9kZSAqKSBjb21tYW5kKTsKKworCXN3aXRjaCAoY29tbWFu ZFRhZykKKwl7CisJCWNhc2UgQ01EVEFHX0NSRUFURV9UQUJMRToKKwkJCXsKKwkJCQlDcmVhdGVT dG10ICpjc3RtdCA9IChDcmVhdGVTdG10ICopIGNvbW1hbmQtPnN0bXQ7CisJCQkJcnYgPSBjc3Rt dC0+cmVsYXRpb247CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0K KworCWlmICghcnYpCisJCXJldHVybjsKKworCXNjaGVtYW5hbWUgPSBydi0+c2NoZW1hbmFtZTsK KwlyZWxuYW1lID0gcnYtPnJlbG5hbWU7CisKKwlpZiAoc2NoZW1hbmFtZSAhPSBOVUxMKQorCQly ZWxuYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX29pZChzY2hlbWFuYW1lLCBmYWxzZSk7CisKKwlp ZiAocmVsbmFtZXNwYWNlICE9IEludmFsaWRPaWQpCisJCXJlbGlkID0gZ2V0X3JlbG5hbWVfcmVs aWQocmVsbmFtZSwgcmVsbmFtZXNwYWNlKTsKKwllbHNlCisJCXJlbGlkID0gUmVsbmFtZUdldFJl bGlkKHJlbG5hbWUpOworCisJaWYgKHJlbGlkICE9IEludmFsaWRPaWQpCisJeworCQlBZGRTdWJz Y3JpcHRpb25SZWxTdGF0ZShNeVN1YnNjcmlwdGlvbi0+b2lkLCByZWxpZCwKKwkJCQkJCQkJU1VC UkVMX1NUQVRFX1JFQURZLAorCQkJCQkJCQlJbnZhbGlkWExvZ1JlY1B0cik7CisJCWVyZXBvcnQo REVCVUcxLAorCQkJCShlcnJtc2dfaW50ZXJuYWwoInRhYmxlIFwiJXNcIiBhZGRlZCB0byBzdWJz Y3JpcHRpb24gXCIlc1wiIiwKKwkJCQkJCQkJIHJlbG5hbWUsIE15U3Vic2NyaXB0aW9uLT5uYW1l KSkpOworCX0KK30KKworc3RhdGljIHZvaWQKK2FwcGx5X2hhbmRsZV9kZGwoU3RyaW5nSW5mbyBz KQoreworCVhMb2dSZWNQdHIgbHNuOworCWNvbnN0IGNoYXIgKnByZWZpeCA9IE5VTEw7CisJY2hh ciAqbWVzc2FnZSA9IE5VTEw7CisJY2hhcgkgICAqZGRsX2NvbW1hbmQ7CisJU2l6ZQkJc3o7CisJ TGlzdAkgICAqcGFyc2V0cmVlX2xpc3Q7CisJTGlzdENlbGwgICAqcGFyc2V0cmVlX2l0ZW07CisJ RGVzdFJlY2VpdmVyICpyZWNlaXZlcjsKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJY29u c3QgY2hhciAqc2F2ZV9kZWJ1Z19xdWVyeV9zdHJpbmcgPSBkZWJ1Z19xdWVyeV9zdHJpbmc7CisK KwltZXNzYWdlID0gbG9naWNhbHJlcF9yZWFkX2RkbG1lc3NhZ2UocywgJmxzbiwgJnByZWZpeCwg JnN6KTsKKworCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgaW4gYSB0cmFuc2FjdGlvbiBjb21tYW5kICov CisJYmVnaW5fcmVwbGljYXRpb25fc3RlcCgpOworCisJZGRsX2NvbW1hbmQgPSBkZGxfZGVwYXJz ZV9qc29uX3RvX3N0cmluZyhtZXNzYWdlKTsKKwlkZWJ1Z19xdWVyeV9zdHJpbmcgPSBkZGxfY29t bWFuZDsKKworCS8qIERlc3ROb25lIGZvciBsb2dpY2FsIHJlcGxpY2F0aW9uICovCisJcmVjZWl2 ZXIgPSBDcmVhdGVEZXN0UmVjZWl2ZXIoRGVzdE5vbmUpOworCXBhcnNldHJlZV9saXN0ID0gcGdf cGFyc2VfcXVlcnkoZGRsX2NvbW1hbmQpOworCisJZm9yZWFjaChwYXJzZXRyZWVfaXRlbSwgcGFy c2V0cmVlX2xpc3QpCisJeworCQlMaXN0CSAgICpwbGFudHJlZV9saXN0OworCQlMaXN0CSAgICpx dWVyeXRyZWVfbGlzdDsKKwkJUmF3U3RtdAkgICAqY29tbWFuZCA9IChSYXdTdG10ICopIGxmaXJz dChwYXJzZXRyZWVfaXRlbSk7CisJCUNvbW1hbmRUYWcJY29tbWFuZFRhZzsKKwkJTWVtb3J5Q29u dGV4dCBwZXJfcGFyc2V0cmVlX2NvbnRleHQgPSBOVUxMOworCQlQb3J0YWwJCXBvcnRhbDsKKwkJ Ym9vbAkJIHNuYXBzaG90X3NldCA9IGZhbHNlOworCisJCWNvbW1hbmRUYWcgPSBDcmVhdGVDb21t YW5kVGFnKChOb2RlICopIGNvbW1hbmQpOworCisJCS8qIElmIHdlIGdvdCBhIGNhbmNlbCBzaWdu YWwgaW4gcGFyc2luZyBvciBwcmlvciBjb21tYW5kLCBxdWl0ICovCisJCUNIRUNLX0ZPUl9JTlRF UlJVUFRTKCk7CisKKwkJLyogUmVtb3ZlIGRhdGEgcG9wdWxhdGlvbiBmcm9tIHRoZSBjb21tYW5k ICovCisJCXByZXByb2Nlc3NfY3JlYXRlX3RhYmxlKGNvbW1hbmQpOworCisJCS8qCisJCSAqIFNl dCB1cCBhIHNuYXBzaG90IGlmIHBhcnNlIGFuYWx5c2lzL3BsYW5uaW5nIHdpbGwgbmVlZCBvbmUu CisJCSAqLworCQlpZiAoYW5hbHl6ZV9yZXF1aXJlc19zbmFwc2hvdChjb21tYW5kKSkKKwkJewor CQkJUHVzaEFjdGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CisJCQlzbmFw c2hvdF9zZXQgPSB0cnVlOworCQl9CisKKwkJLyoKKwkJICogV2UgZG8gdGhlIHdvcmsgZm9yIGVh Y2ggcGFyc2V0cmVlIGluIGEgc2hvcnQtbGl2ZWQgY29udGV4dCwgdG8KKwkJICogbGltaXQgdGhl IG1lbW9yeSB1c2VkIHdoZW4gdGhlcmUgYXJlIG1hbnkgY29tbWFuZHMgaW4gdGhlIHN0cmluZy4K KwkJICovCisJCXBlcl9wYXJzZXRyZWVfY29udGV4dCA9CisJCQlBbGxvY1NldENvbnRleHRDcmVh dGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCSAgImV4ZWN1dGVfc3FsX3N0cmluZyBw ZXItc3RhdGVtZW50IGNvbnRleHQiLAorCQkJCQkJCQkgIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMp OworCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBlcl9wYXJzZXRyZWVfY29u dGV4dCk7CisKKwkJcXVlcnl0cmVlX2xpc3QgPSBwZ19hbmFseXplX2FuZF9yZXdyaXRlX2ZpeGVk cGFyYW1zKGNvbW1hbmQsCisJCQkJCQkJCQkJCQkJCQlkZGxfY29tbWFuZCwKKwkJCQkJCQkJCQkJ CQkJCU5VTEwsIDAsIE5VTEwpOworCisJCXBsYW50cmVlX2xpc3QgPSBwZ19wbGFuX3F1ZXJpZXMo cXVlcnl0cmVlX2xpc3QsIGRkbF9jb21tYW5kLCAwLCBOVUxMKTsKKworCQkvKiBEb25lIHdpdGgg dGhlIHNuYXBzaG90IHVzZWQgZm9yIHBhcnNpbmcvcGxhbm5pbmcgKi8KKwkJaWYgKHNuYXBzaG90 X3NldCkKKwkJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisKKwkJcG9ydGFsID0gQ3JlYXRlUG9ydGFs KCJsb2dpY2FsIHJlcGxpY2F0aW9uIiwgdHJ1ZSwgdHJ1ZSk7CisKKwkJLyoKKwkJICogV2UgZG9u J3QgaGF2ZSB0byBjb3B5IGFueXRoaW5nIGludG8gdGhlIHBvcnRhbCwgYmVjYXVzZSBldmVyeXRo aW5nCisJCSAqIHdlIGFyZSBwYXNzaW5nIGhlcmUgaXMgaW4gQXBwbHlNZXNzYWdlQ29udGV4dCBv ciB0aGUKKwkJICogcGVyX3BhcnNldHJlZV9jb250ZXh0LCBhbmQgc28gd2lsbCBvdXRsaXZlIHRo ZSBwb3J0YWwgYW55d2F5LgorCQkgKi8KKwkJUG9ydGFsRGVmaW5lUXVlcnkocG9ydGFsLAorCQkJ CQkJICBOVUxMLAorCQkJCQkJICBkZGxfY29tbWFuZCwKKwkJCQkJCSAgY29tbWFuZFRhZywKKwkJ CQkJCSAgcGxhbnRyZWVfbGlzdCwKKwkJCQkJCSAgTlVMTCk7CisKKwkJLyoKKwkJICogU3RhcnQg dGhlIHBvcnRhbC4gIE5vIHBhcmFtZXRlcnMgaGVyZS4KKwkJICovCisJCVBvcnRhbFN0YXJ0KHBv cnRhbCwgTlVMTCwgMCwgSW52YWxpZFNuYXBzaG90KTsKKworCQkvKgorCQkgKiBTd2l0Y2ggYmFj ayB0byB0cmFuc2FjdGlvbiBjb250ZXh0IGZvciBleGVjdXRpb24uCisJCSAqLworCQlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwkJKHZvaWQpIFBvcnRhbFJ1bihwb3J0YWws CisJCQkJCQkgRkVUQ0hfQUxMLAorCQkJCQkJIHRydWUsCisJCQkJCQkgdHJ1ZSwKKwkJCQkJCSBy ZWNlaXZlciwKKwkJCQkJCSByZWNlaXZlciwKKwkJCQkJCSBOVUxMKTsKKworCQlQb3J0YWxEcm9w KHBvcnRhbCwgZmFsc2UpOworCisJCUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7CisKKwkJLyoK KwkJICogVGFibGUgY3JlYXRlZCBieSBEREwgcmVwbGljYXRpb24gKGRhdGFiYXNlIGxldmVsKSBp cyBhdXRvbWF0aWNhbGx5CisJCSAqIGFkZGVkIHRvIHRoZSBzdWJzY3JpcHRpb24gaGVyZS4KKwkJ ICovCisJCWhhbmRsZV9jcmVhdGVfdGFibGUoY29tbWFuZCk7CisKKwkJLyogTm93IHdlIG1heSBk cm9wIHRoZSBwZXItcGFyc2V0cmVlIGNvbnRleHQsIGlmIG9uZSB3YXMgY3JlYXRlZC4gKi8KKwkJ TWVtb3J5Q29udGV4dERlbGV0ZShwZXJfcGFyc2V0cmVlX2NvbnRleHQpOworCX0KKworCWRlYnVn X3F1ZXJ5X3N0cmluZyA9IHNhdmVfZGVidWdfcXVlcnlfc3RyaW5nOworCWVuZF9yZXBsaWNhdGlv bl9zdGVwKCk7Cit9CisKIAogLyoKICAqIExvZ2ljYWwgcmVwbGljYXRpb24gcHJvdG9jb2wgbWVz c2FnZSBkaXNwYXRjaGVyLgpAQCAtMjUyOCw2ICsyNzU2LDEwIEBAIGFwcGx5X2Rpc3BhdGNoKFN0 cmluZ0luZm8gcykKIAkJCSAqLwogCQkJYnJlYWs7CiAKKwkJY2FzZSBMT0dJQ0FMX1JFUF9NU0df RERMTUVTU0FHRToKKwkJCWFwcGx5X2hhbmRsZV9kZGwocyk7CisJCQlicmVhazsKKwogCQljYXNl IExPR0lDQUxfUkVQX01TR19TVFJFQU1fU1RBUlQ6CiAJCQlhcHBseV9oYW5kbGVfc3RyZWFtX3N0 YXJ0KHMpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9w Z291dHB1dC9wZ291dHB1dC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdv dXRwdXQuYwppbmRleCBhM2MxYmE4Li43YmY2M2RjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKQEAgLTUzLDYgKzUzLDExIEBAIHN0YXRpYyB2b2lkIHBn b3V0cHV0X21lc3NhZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkJCSBSZW9y ZGVyQnVmZmVyVFhOICp0eG4sIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCiAJCQkJCQkJIGJvb2wg dHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4LAogCQkJCQkJCSBTaXplIHN6LCBjb25z dCBjaGFyICptZXNzYWdlKTsKK3N0YXRpYyB2b2lkIHBnb3V0cHV0X2RkbG1lc3NhZ2UoTG9naWNh bERlY29kaW5nQ29udGV4dCAqY3R4LAorCQkJCQkJCQlSZW9yZGVyQnVmZmVyVFhOICp0eG4sIFhM b2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJl bGlkLAorCQkJCQkJCQlEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCVNpemUg c3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogc3RhdGljIGJvb2wgcGdvdXRwdXRfb3JpZ2luX2Zp bHRlcihMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJCSAgIFJlcE9yaWdpbklk IG9yaWdpbl9pZCk7CiBzdGF0aWMgdm9pZCBwZ291dHB1dF9iZWdpbl9wcmVwYXJlX3R4bihMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCkBAIC0yNTYsNiArMjYxLDcgQEAgX1BHX291dHB1dF9w bHVnaW5faW5pdChPdXRwdXRQbHVnaW5DYWxsYmFja3MgKmNiKQogCWNiLT5jaGFuZ2VfY2IgPSBw Z291dHB1dF9jaGFuZ2U7CiAJY2ItPnRydW5jYXRlX2NiID0gcGdvdXRwdXRfdHJ1bmNhdGU7CiAJ Y2ItPm1lc3NhZ2VfY2IgPSBwZ291dHB1dF9tZXNzYWdlOworCWNiLT5kZGxtZXNzYWdlX2NiID0g cGdvdXRwdXRfZGRsbWVzc2FnZTsKIAljYi0+Y29tbWl0X2NiID0gcGdvdXRwdXRfY29tbWl0X3R4 bjsKIAogCWNiLT5iZWdpbl9wcmVwYXJlX2NiID0gcGdvdXRwdXRfYmVnaW5fcHJlcGFyZV90eG47 CkBAIC0yNzIsNiArMjc4LDcgQEAgX1BHX291dHB1dF9wbHVnaW5faW5pdChPdXRwdXRQbHVnaW5D YWxsYmFja3MgKmNiKQogCWNiLT5zdHJlYW1fY29tbWl0X2NiID0gcGdvdXRwdXRfc3RyZWFtX2Nv bW1pdDsKIAljYi0+c3RyZWFtX2NoYW5nZV9jYiA9IHBnb3V0cHV0X2NoYW5nZTsKIAljYi0+c3Ry ZWFtX21lc3NhZ2VfY2IgPSBwZ291dHB1dF9tZXNzYWdlOworCWNiLT5zdHJlYW1fZGRsbWVzc2Fn ZV9jYiA9IHBnb3V0cHV0X2RkbG1lc3NhZ2U7CiAJY2ItPnN0cmVhbV90cnVuY2F0ZV9jYiA9IHBn b3V0cHV0X3RydW5jYXRlOwogCS8qIHRyYW5zYWN0aW9uIHN0cmVhbWluZyAtIHR3by1waGFzZSBj b21taXQgKi8KIAljYi0+c3RyZWFtX3ByZXBhcmVfY2IgPSBwZ291dHB1dF9zdHJlYW1fcHJlcGFy ZV90eG47CkBAIC00MjYsNiArNDMzLDcgQEAgcGdvdXRwdXRfc3RhcnR1cChMb2dpY2FsRGVjb2Rp bmdDb250ZXh0ICpjdHgsIE91dHB1dFBsdWdpbk9wdGlvbnMgKm9wdCwKIAogCS8qIFRoaXMgcGx1 Z2luIHVzZXMgYmluYXJ5IHByb3RvY29sLiAqLwogCW9wdC0+b3V0cHV0X3R5cGUgPSBPVVRQVVRf UExVR0lOX0JJTkFSWV9PVVRQVVQ7CisJb3B0LT5yZWNlaXZlX3Jld3JpdGVzID0gdHJ1ZTsKIAog CS8qCiAJICogVGhpcyBpcyByZXBsaWNhdGlvbiBzdGFydCBhbmQgbm90IHNsb3QgaW5pdGlhbGl6 YXRpb24uCkBAIC00OTksNiArNTA3LDcgQEAgcGdvdXRwdXRfc3RhcnR1cChMb2dpY2FsRGVjb2Rp bmdDb250ZXh0ICpjdHgsIE91dHB1dFBsdWdpbk9wdGlvbnMgKm9wdCwKIAogCQkvKiBJbml0IHB1 YmxpY2F0aW9uIHN0YXRlLiAqLwogCQlkYXRhLT5wdWJsaWNhdGlvbnMgPSBOSUw7CisJCWRhdGEt PmRlbGV0ZWRfcmVsaWRzID0gTklMOwogCQlwdWJsaWNhdGlvbnNfdmFsaWQgPSBmYWxzZTsKIAkJ Q2FjaGVSZWdpc3RlclN5c2NhY2hlQ2FsbGJhY2soUFVCTElDQVRJT05PSUQsCiAJCQkJCQkJCQkg IHB1YmxpY2F0aW9uX2ludmFsaWRhdGlvbl9jYiwKQEAgLTEzODEsOSArMTM5MCwyMiBAQCBwZ291 dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhO ICp0eG4sCiAJUmVvcmRlckJ1ZmZlckNoYW5nZVR5cGUgYWN0aW9uID0gY2hhbmdlLT5hY3Rpb247 CiAJVHVwbGVUYWJsZVNsb3QgKm9sZF9zbG90ID0gTlVMTDsKIAlUdXBsZVRhYmxlU2xvdCAqbmV3 X3Nsb3QgPSBOVUxMOworCWJvb2wJCQl0YWJsZV9yZXdyaXRlID0gZmFsc2U7CiAKIAl1cGRhdGVf cmVwbGljYXRpb25fcHJvZ3Jlc3MoY3R4LCBmYWxzZSk7CiAKKwkvKgorCSAqIEZvciBoZWFwIHJl d3JpdGVzLCB3ZSBtaWdodCBuZWVkIHRvIHJlcGxpY2F0ZSB0aGVtIGlmIHRoZSByZXdyaXR0ZW4K KwkgKiB0YWJsZSBwdWJsaXNoZXMgcmV3cml0ZSBkZGwgbWVzc2FnZS4gU28gZ2V0IHRoZSBhY3R1 YWwgcmVsYXRpb24gaGVyZSBhbmQKKwkgKiBjaGVjayB0aGUgcHViYWN0aW9uIGxhdGVyLgorCSAq LworCWlmIChyZWxhdGlvbi0+cmRfcmVsLT5yZWxyZXdyaXRlKQorCXsKKwkJdGFibGVfcmV3cml0 ZSA9IHRydWU7CisJCXJlbGF0aW9uID0gUmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGF0aW9uLT5y ZF9yZWwtPnJlbHJld3JpdGUpOworCQl0YXJnZXRyZWwgPSByZWxhdGlvbjsKKwl9CisKIAlpZiAo IWlzX3B1Ymxpc2hhYmxlX3JlbGF0aW9uKHJlbGF0aW9uKSkKIAkJcmV0dXJuOwogCkBAIC0xNDE3 LDYgKzE0MzksMTMgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0 eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJQXNzZXJ0KGZhbHNlKTsKIAl9CiAKKwkvKgor CSAqIFdlIGRvbid0IHB1Ymxpc2ggdGFibGUgcmV3cml0ZSBjaGFuZ2UgdW5sZXNzIHdlIHB1Ymxp c2ggdGhlIHJld3JpdGUgZGRsCisJICogbWVzc2FnZS4KKwkgKi8KKwlpZiAodGFibGVfcmV3cml0 ZSAmJiAhcmVsZW50cnktPnB1YmFjdGlvbnMucHViZGRsKQorCQlyZXR1cm47CisKIAkvKiBBdm9p ZCBsZWFraW5nIG1lbW9yeSBieSB1c2luZyBhbmQgcmVzZXR0aW5nIG91ciBvd24gY29udGV4dCAq LwogCW9sZCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhkYXRhLT5jb250ZXh0KTsKIApAQCAtMTQ0 Niw4ICsxNDc1LDggQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0 eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJfQogCiAJCQkvKiBDaGVjayByb3cgZmlsdGVy ICovCi0JCQlpZiAoIXBnb3V0cHV0X3Jvd19maWx0ZXIodGFyZ2V0cmVsLCBOVUxMLCAmbmV3X3Ns b3QsIHJlbGVudHJ5LAotCQkJCQkJCQkJICZhY3Rpb24pKQorCQkJaWYgKCF0YWJsZV9yZXdyaXRl ICYmCisJCQkJIXBnb3V0cHV0X3Jvd19maWx0ZXIodGFyZ2V0cmVsLCBOVUxMLCAmbmV3X3Nsb3Qs IHJlbGVudHJ5LCAmYWN0aW9uKSkKIAkJCQlicmVhazsKIAogCQkJLyoKQEAgLTE0NjcsOCArMTQ5 NiwxOSBAQCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9y ZGVyQnVmZmVyVFhOICp0eG4sCiAJCQltYXliZV9zZW5kX3NjaGVtYShjdHgsIGNoYW5nZSwgcmVs YXRpb24sIHJlbGVudHJ5KTsKIAogCQkJT3V0cHV0UGx1Z2luUHJlcGFyZVdyaXRlKGN0eCwgdHJ1 ZSk7Ci0JCQlsb2dpY2FscmVwX3dyaXRlX2luc2VydChjdHgtPm91dCwgeGlkLCB0YXJnZXRyZWws IG5ld19zbG90LAotCQkJCQkJCQkJZGF0YS0+YmluYXJ5LCByZWxlbnRyeS0+Y29sdW1ucyk7CisK KwkJCS8qCisJCQkgKiBDb252ZXJ0IHRoZSByZXdyaXRlIGluc2VydHMgdG8gdXBkYXRlcyBzbyB0 aGF0IHRoZSBzdWJzY3JpYmVyCisJCQkgKiBjYW4gcmVwbGF5IGl0LiBUaGlzIGlzIG5lZWRlZCB0 byBtYWtlIHN1cmUgdGhlIGRhdGEgYmV0d2VlbgorCQkJICogcHVibGlzaGVyIGFuZCBzdWJzY3Jp YmVyIGlzIGNvbnNpc3RlbnQuCisJCQkgKi8KKwkJCWlmICh0YWJsZV9yZXdyaXRlKQorCQkJCWxv Z2ljYWxyZXBfd3JpdGVfdXBkYXRlKGN0eC0+b3V0LCB4aWQsIHRhcmdldHJlbCwKKwkJCQkJCQkJ CQlOVUxMLCBuZXdfc2xvdCwgZGF0YS0+YmluYXJ5LAorCQkJCQkJCQkJCXJlbGVudHJ5LT5jb2x1 bW5zKTsKKwkJCWVsc2UKKwkJCQlsb2dpY2FscmVwX3dyaXRlX2luc2VydChjdHgtPm91dCwgeGlk LCB0YXJnZXRyZWwsIG5ld19zbG90LAorCQkJCQkJCQkJCWRhdGEtPmJpbmFyeSwgcmVsZW50cnkt PmNvbHVtbnMpOwogCQkJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKIAkJCWJyZWFrOwog CQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9VUERBVEU6CkBAIC0xNTk4LDYgKzE2MzgsOSBA QCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCiAJCWFuY2VzdG9yID0gTlVMTDsKIAl9CiAKKwlpZiAodGFibGVfcmV3cml0 ZSkKKwkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7CisKIAkvKiBDbGVhbnVwICovCiAJTWVtb3J5 Q29udGV4dFN3aXRjaFRvKG9sZCk7CiAJTWVtb3J5Q29udGV4dFJlc2V0KGRhdGEtPmNvbnRleHQp OwpAQCAtMTY3NSw4ICsxNzE4LDggQEAgcGdvdXRwdXRfdHJ1bmNhdGUoTG9naWNhbERlY29kaW5n Q29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAKIHN0YXRpYyB2b2lkCiBwZ291 dHB1dF9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRY TiAqdHhuLAotCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLCBib29sIHRyYW5zYWN0aW9uYWws IGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwKLQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSkK KwkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgYm9vbCB0cmFuc2FjdGlvbmFsLAorCQkJCSBj b25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7CiAJUEdP dXRwdXREYXRhICpkYXRhID0gKFBHT3V0cHV0RGF0YSAqKSBjdHgtPm91dHB1dF9wbHVnaW5fcHJp dmF0ZTsKIAlUcmFuc2FjdGlvbklkIHhpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOwpAQCAtMTcx Niw2ICsxNzU5LDEzNyBAQCBwZ291dHB1dF9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQg KmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCU91dHB1dFBsdWdpbldyaXRlKGN0eCwgdHJ1 ZSk7CiB9CiAKK3N0YXRpYyB2b2lkCitwZ291dHB1dF9kZGxtZXNzYWdlKExvZ2ljYWxEZWNvZGlu Z0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQlYTG9nUmVjUHRyIG1l c3NhZ2VfbHNuLAorCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRD b21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQlTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKQor eworCVBHT3V0cHV0RGF0YSAqZGF0YSA9IChQR091dHB1dERhdGEgKikgY3R4LT5vdXRwdXRfcGx1 Z2luX3ByaXZhdGU7CisJUEdPdXRwdXRUeG5EYXRhICp0eG5kYXRhID0gKFBHT3V0cHV0VHhuRGF0 YSAqKSB0eG4tPm91dHB1dF9wbHVnaW5fcHJpdmF0ZTsKKwlSZWxhdGlvbglyZWxhdGlvbiA9IE5V TEw7CisJVHJhbnNhY3Rpb25JZCB4aWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwlSZWxhdGlv blN5bmNFbnRyeSAqcmVsZW50cnk7CisKKwkvKgorCSAqIFJlbWVtYmVyIHRoZSB4aWQgZm9yIHRo ZSBtZXNzYWdlIGluIHN0cmVhbWluZyBtb2RlLiBTZWUKKwkgKiBwZ291dHB1dF9jaGFuZ2UuCisJ ICovCisJaWYgKGluX3N0cmVhbWluZykKKwkJeGlkID0gdHhuLT54aWQ7CisKKwlzd2l0Y2ggKGNt ZHR5cGUpCisJeworCQljYXNlIERDVF9UYWJsZURyb3BTdGFydDoKKwkJCS8qCisJCQkgKiBPbiBE Uk9QIHN0YXJ0LCBhZGQgdGhlIHJlbGlkIHRvIGEgZGVsZXRlZF9yZWxpZCBsaXN0IGlmIHRoZQor CQkJICogcmVsaWQgaXMgcGFydCBvZiBhIHB1YmxpY2F0aW9uIHRoYXQgc3VwcG9ydHMgZGRsIHB1 YmxpY2F0aW9uLiBXZQorCQkJICogbmVlZCB0aGlzIGJlY2F1c2Ugb24gRFJPUCBlbmQsIHRoZSBy ZWxpZCB3aWxsIG5vIGxvbmdlciBiZQorCQkJICogdmFsaWQuIExhdGVyIG9uIERyb3AgZW5kLCB2 ZXJpZnkgdGhhdCB0aGUgZHJvcCBpcyBmb3IgYSByZWxpZAorCQkJICogdGhhdCBpcyBvbiB0aGUg ZGVsZXRlZF9yaWQgbGlzdCwgYW5kIG9ubHkgdGhlbiBzZW5kIHRoZSBkZGwKKwkJCSAqIG1lc3Nh Z2UuCisJCQkgKi8KKwkJCXJlbGF0aW9uID0gUmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGlkKTsK KworCQkJQXNzZXJ0KHJlbGF0aW9uKTsKKwkJCXJlbGVudHJ5ID0gZ2V0X3JlbF9zeW5jX2VudHJ5 KGRhdGEsIHJlbGF0aW9uKTsKKworCQkJaWYgKHJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCkK KwkJCQlkYXRhLT5kZWxldGVkX3JlbGlkcyA9IGxhcHBlbmRfb2lkKGRhdGEtPmRlbGV0ZWRfcmVs aWRzLCByZWxpZCk7CisKKwkJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworCQkJcmV0dXJuOwor CQljYXNlIERDVF9UYWJsZURyb3BFbmQ6CisJCQlpZiAoIWxpc3RfbWVtYmVyX29pZChkYXRhLT5k ZWxldGVkX3JlbGlkcywgcmVsaWQpKQorCQkJCXJldHVybjsKKwkJCWVsc2UKKwkJCQlkYXRhLT5k ZWxldGVkX3JlbGlkcyA9IGxpc3RfZGVsZXRlX29pZChkYXRhLT5kZWxldGVkX3JlbGlkcywgcmVs aWQpOworCQkJYnJlYWs7CisJCWNhc2UgRENUX1RhYmxlQWx0ZXI6CisJCQkvKgorCQkJICogRm9y IHRhYmxlIHJld3JpdGUgZGRsLCB3ZSBmaXJzdCBzZW5kIHRoZSBvcmlnaW5hbCBkZGwgbWVzc2Fn ZSB0bworCQkJICogc3Vic2NyaWJlciwgdGhlbiBjb252ZXJ0IHRoZSB1cGNvbWluZyByZXdyaXRl IElOU0VSVCB0byBVUERBVEUgYW5kCisJCQkgKiBzZW5kIHRoZW0gdG8gc3Vic2NyaWJlciBzbyB0 aGF0IHRoZSBkYXRhIGJldHdlZW4gcHVibGlzaGVyIGFuZAorCQkJICogc3Vic2NyaWJlciBjYW4g YWx3YXlzIGJlIGNvbnNpc3RlbnQuCisJCQkgKgorCQkJICogV2UgZG8gdGhpcyB3YXkgYmVjYXVz ZSBvZiB0d28gcmVhc29uOgorCQkJICoKKwkJCSAqICgxKSBUaGUgZGF0YSBiZWZvcmUgdGhlIHJl d3JpdGUgZGRsIGNvdWxkIGFscmVhZHkgYmUgZGlmZmVyZW50IGFtb25nCisJCQkgKiBwdWJsaXNo ZXIgYW5kIHN1YnNjcmliZXIuIFRvIG1ha2Ugc3VyZSB0aGUgZXh0cmEgZGF0YSBpbiBzdWJzY3Jp YmVyCisJCQkgKiB3aGljaCBkb2Vzbid0IGV4aXN0IGluIHB1Ymxpc2hlciBhbHNvIGdldCByZXdy aXR0ZW4sIHdlIG5lZWQgdG8gbGV0CisJCQkgKiB0aGUgc3Vic2NyaWJlciBleGVjdXRlIHRoZSBv cmlnaW5hbCByZXdyaXRlIGRkbCB0byByZXdyaXRlIGFsbCB0aGUKKwkJCSAqIGRhdGEgYXQgZmly c3QuCisJCQkgKgorCQkJICogKDIpIHRoZSBkYXRhIGFmdGVyIGV4ZWN1dGluZyByZXdyaXRlIGRk bCBjb3VsZCBiZSBkaWZmZXJlbnQgYW1vbmcKKwkJCSAqIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJl cihkdWUgdG8gZGlmZmVyZW50IGZ1bmN0aW9ucy9vcGVyYXRvcnMgdXNlZAorCQkJICogZHVyaW5n IHJld3JpdGUpLCBzbyB3ZSBuZWVkIHRvIHJlcGxpY2F0ZSB0aGUgcmV3cml0ZSBVUERBVEVzIHRv IGtlZXAKKwkJCSAqIHRoZSBkYXRhIGNvbnNpc3RlbnQuCisJCQkgKgorCQkJICogVE8gSU1QUk9W RTogV2UgY291bGQgaW1wcm92ZSB0aGlzIGJ5IGxldHRpbmcgdGhlIHN1YnNjcmliZXIgb25seQor CQkJICogcmV3cml0ZSB0aGUgZXh0cmEgZGF0YSBpbnN0ZWFkIG9mIGRvaW5nIGZ1bGx5IHJld3Jp dGUgYW5kIHVzZSB0aGUKKwkJCSAqIHVwY29taW5nIHJld3JpdGUgVVBEQVRFcyB0byByZXdyaXRl IHRoZSByZXN0IGRhdGEuIEJlc2lkZXMsIHdlIG1heQorCQkJICogbm90IG5lZWQgdG8gc2VuZCBy ZXdyaXRlIGNoYW5nZXMgZm9yIGFsbCB0eXBlIG9mIHJld3JpdGUgZGRsLCBmb3IKKwkJCSAqIGV4 YW1wbGUsIGl0IHNlZW1zIGZpbmUgdG8gc2tpcCBzZW5kaW5nIHJld3JpdGUgY2hhbmdlcyBmb3Ig QUxURVIKKwkJCSAqIFRBQkxFIFNFVCBMT0dHRUQgYXMgdGhlIGRhdGEgaW4gdGhlIHRhYmxlIGRv ZXNuJ3QgYWN0dWFsbHkgYmUKKwkJCSAqIGNoYW5nZWQuCisJCQkgKi8KKwkJCXJlbGF0aW9uID0g UmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGlkKTsKKwkJCUFzc2VydChyZWxhdGlvbik7CisKKwkJ CXJlbGVudHJ5ID0gZ2V0X3JlbF9zeW5jX2VudHJ5KGRhdGEsIHJlbGF0aW9uKTsKKworCQkJLyoK KwkJCSAqIFNraXAgc2VuZGluZyB0aGlzIGRkbCBpZiB3ZSBkb24ndCBwdWJsaXNoIGRkbCBtZXNz YWdlIG9yIHRoZSBkZGwKKwkJCSAqIG5lZWQgdG8gYmUgcHVibGlzaGVkIHZpYSBpdHMgcm9vdCBy ZWxhdGlvbi4KKwkJCSAqLworCQkJaWYgKCFyZWxlbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwgfHwK KwkJCQlyZWxlbnRyeS0+cHVibGlzaF9hc19yZWxpZCAhPSByZWxpZCkKKwkJCXsKKwkJCQlSZWxh dGlvbkNsb3NlKHJlbGF0aW9uKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCWJyZWFrOworCQlj YXNlIERDVF9TaW1wbGVDbWQ6CisJCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihy ZWxpZCk7CisKKwkJCWlmIChyZWxhdGlvbiA9PSBOVUxMKQorCQkJCWJyZWFrOworCisJCQlyZWxl bnRyeSA9IGdldF9yZWxfc3luY19lbnRyeShkYXRhLCByZWxhdGlvbik7CisKKwkJCWlmICghcmVs ZW50cnktPnB1YmFjdGlvbnMucHViZGRsKQorCQkJeworCQkJCVJlbGF0aW9uQ2xvc2UocmVsYXRp b24pOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJYnJlYWs7CisJCWNhc2UgRENUX09iamVjdERy b3A6CisJCQkvKiBkbyBub3RoaW5nICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2co RVJST1IsICJ1bnN1cHBvcnRlZCB0eXBlICVkIiwgY21kdHlwZSk7CisJCQlicmVhazsKKwl9CisK KwkvKiBTZW5kIEJFR0lOIGlmIHdlIGhhdmVuJ3QgeWV0ICovCisJaWYgKHR4bmRhdGEgJiYgIXR4 bmRhdGEtPnNlbnRfYmVnaW5fdHhuKQorCQlwZ291dHB1dF9zZW5kX2JlZ2luKGN0eCwgdHhuKTsK KworCU91dHB1dFBsdWdpblByZXBhcmVXcml0ZShjdHgsIHRydWUpOworCWxvZ2ljYWxyZXBfd3Jp dGVfZGRsbWVzc2FnZShjdHgtPm91dCwKKwkJCQkJCQkJeGlkLAorCQkJCQkJCQltZXNzYWdlX2xz biwKKwkJCQkJCQkJcHJlZml4LAorCQkJCQkJCQlzeiwKKwkJCQkJCQkJbWVzc2FnZSk7CisJT3V0 cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKKworCWlmIChyZWxhdGlvbikKKwkJUmVsYXRpb25D bG9zZShyZWxhdGlvbik7Cit9CisKIC8qCiAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZGF0YSBpcyBh c3NvY2lhdGVkIHdpdGggYW4gb3JpZ2luIGFuZCB0aGUgdXNlciBoYXMKICAqIHJlcXVlc3RlZCB0 aGUgY2hhbmdlcyB0aGF0IGRvbid0IGhhdmUgYW4gb3JpZ2luLCBmYWxzZSBvdGhlcndpc2UuCkBA IC0xOTk3LDcgKzIxNzEsOCBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRh LCBSZWxhdGlvbiByZWxhdGlvbikKIAkJZW50cnktPnNjaGVtYV9zZW50ID0gZmFsc2U7CiAJCWVu dHJ5LT5zdHJlYW1lZF90eG5zID0gTklMOwogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJpbnNlcnQg PSBlbnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgPQotCQkJZW50cnktPnB1YmFjdGlvbnMucHVi ZGVsZXRlID0gZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPSBmYWxzZTsKKwkJCWVudHJ5 LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0K KwkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCA9IGZhbHNlOwogCQllbnRyeS0+bmV3X3Nsb3Qg PSBOVUxMOwogCQllbnRyeS0+b2xkX3Nsb3QgPSBOVUxMOwogCQltZW1zZXQoZW50cnktPmV4cHJz dGF0ZSwgMCwgc2l6ZW9mKGVudHJ5LT5leHByc3RhdGUpKTsKQEAgLTIwNTUsNiArMjIzMCw3IEBA IGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9u KQogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgPSBmYWxzZTsKIAkJZW50cnktPnB1YmFj dGlvbnMucHViZGVsZXRlID0gZmFsc2U7CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRl ID0gZmFsc2U7CisJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCA9IGZhbHNlOwogCiAJCS8qCiAJ CSAqIFR1cGxlIHNsb3RzIGNsZWFudXBzLiAoV2lsbCBiZSByZWJ1aWx0IGxhdGVyIGlmIG5lZWRl ZCkuCkBAIC0yMTY4LDYgKzIzNDQsNyBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRh ICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRh dGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1YnVwZGF0ZTsKIAkJCQllbnRyeS0+cHViYWN0aW9ucy5w dWJkZWxldGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1YmRlbGV0ZTsKIAkJCQllbnRyeS0+cHViYWN0 aW9ucy5wdWJ0cnVuY2F0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHVidHJ1bmNhdGU7CisJCQkJZW50 cnktPnB1YmFjdGlvbnMucHViZGRsIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJkZGw7CiAKIAkJCQkv KgogCQkJCSAqIFdlIHdhbnQgdG8gcHVibGlzaCB0aGUgY2hhbmdlcyBhcyB0aGUgdG9wLW1vc3Qg YW5jZXN0b3IKQEAgLTIzNTMsNiArMjUzMCw3IEBAIHJlbF9zeW5jX2NhY2hlX3B1YmxpY2F0aW9u X2NiKERhdHVtIGFyZywgaW50IGNhY2hlaWQsIHVpbnQzMiBoYXNodmFsdWUpCiAJewogCQllbnRy eS0+cmVwbGljYXRlX3ZhbGlkID0gZmFsc2U7CiAJfQorCiB9CiAKIC8qIFNlbmQgUmVwbGljYXRp b24gb3JpZ2luICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNo ZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwppbmRleCAwMGRjMGYyLi5m MWI0ZDA5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKQEAgLTU2ODMsNiArNTY4Myw3 IEBAIFJlbGF0aW9uQnVpbGRQdWJsaWNhdGlvbkRlc2MoUmVsYXRpb24gcmVsYXRpb24sIFB1Ymxp Y2F0aW9uRGVzYyAqcHViZGVzYykKIAkJcHViZGVzYy0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgfD0g cHViZm9ybS0+cHVidXBkYXRlOwogCQlwdWJkZXNjLT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSB8PSBw dWJmb3JtLT5wdWJkZWxldGU7CiAJCXB1YmRlc2MtPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgfD0g cHViZm9ybS0+cHVidHJ1bmNhdGU7CisJCXB1YmRlc2MtPnB1YmFjdGlvbnMucHViZGRsIHw9IHB1 YmZvcm0tPnB1YmRkbDsKIAogCQkvKgogCQkgKiBDaGVjayBpZiBhbGwgY29sdW1ucyByZWZlcmVu Y2VkIGluIHRoZSBmaWx0ZXIgZXhwcmVzc2lvbiBhcmUgcGFydApkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5kZXggZGE2 NjA1MS4uZTU0OGUzYyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYworKysg Yi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCkBAIC0zODk2LDYgKzM4OTYsNyBAQCBnZXRQdWJs aWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMpCiAJaW50CQkJaV9w dWJ1cGRhdGU7CiAJaW50CQkJaV9wdWJkZWxldGU7CiAJaW50CQkJaV9wdWJ0cnVuY2F0ZTsKKwlp bnQJCQlpX3B1YmRkbDsKIAlpbnQJCQlpX3B1YnZpYXJvb3Q7CiAJaW50CQkJaSwKIAkJCQludHVw czsKQEAgLTM5MTEsMjMgKzM5MTIsMjkgQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZvdXQs IGludCAqbnVtUHVibGljYXRpb25zKQogCXJlc2V0UFFFeHBCdWZmZXIocXVlcnkpOwogCiAJLyog R2V0IHRoZSBwdWJsaWNhdGlvbnMuICovCi0JaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTMw MDAwKQorCWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDE1MDAwMCkKIAkJYXBwZW5kUFFFeHBC dWZmZXIocXVlcnksCiAJCQkJCQkgICJTRUxFQ1QgcC50YWJsZW9pZCwgcC5vaWQsIHAucHVibmFt ZSwgIgogCQkJCQkJICAicC5wdWJvd25lciwgIgotCQkJCQkJICAicC5wdWJhbGx0YWJsZXMsIHAu cHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIHAucHVi dmlhcm9vdCAiCisJCQkJCQkgICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBk YXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwgcC5wdWJkZGwsIHAucHVidmlhcm9vdCAi CisJCQkJCQkgICJGUk9NIHBnX3B1YmxpY2F0aW9uIHAiKTsKKwllbHNlIGlmIChmb3V0LT5yZW1v dGVWZXJzaW9uID49IDEzMDAwMCkKKwkJYXBwZW5kUFFFeHBCdWZmZXIocXVlcnksCisJCQkJCQkg ICJTRUxFQ1QgcC50YWJsZW9pZCwgcC5vaWQsIHAucHVibmFtZSwgIgorCQkJCQkJICAicC5wdWJv d25lciwgIgorCQkJCQkJICAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0 ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIGZhbHNlIGFzIHAucHViZGRsLCBwLnB1YnZp YXJvb3QgIgogCQkJCQkJICAiRlJPTSBwZ19wdWJsaWNhdGlvbiBwIik7CiAJZWxzZSBpZiAoZm91 dC0+cmVtb3RlVmVyc2lvbiA+PSAxMTAwMDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyKHF1ZXJ5LAog CQkJCQkJICAiU0VMRUNUIHAudGFibGVvaWQsIHAub2lkLCBwLnB1Ym5hbWUsICIKIAkJCQkJCSAg InAucHVib3duZXIsICIKLQkJCQkJCSAgInAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5w dWJ1cGRhdGUsIHAucHViZGVsZXRlLCBwLnB1YnRydW5jYXRlLCBmYWxzZSBBUyBwdWJ2aWFyb290 ICIKKwkJCQkJCSAgInAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAu cHViZGVsZXRlLCBwLnB1YnRydW5jYXRlLCBmYWxzZSBhcyBwLnB1YmRkbCwgZmFsc2UgQVMgcHVi dmlhcm9vdCAiCiAJCQkJCQkgICJGUk9NIHBnX3B1YmxpY2F0aW9uIHAiKTsKIAllbHNlCiAJCWFw cGVuZFBRRXhwQnVmZmVyKHF1ZXJ5LAogCQkJCQkJICAiU0VMRUNUIHAudGFibGVvaWQsIHAub2lk LCBwLnB1Ym5hbWUsICIKIAkJCQkJCSAgInAucHVib3duZXIsICIKLQkJCQkJCSAgInAucHViYWxs dGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBmYWxzZSBBUyBw dWJ0cnVuY2F0ZSwgZmFsc2UgQVMgcHVidmlhcm9vdCAiCisJCQkJCQkgICJwLnB1YmFsbHRhYmxl cywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgZmFsc2UgQVMgcHVidHJ1 bmNhdGUsIGZhbHNlIGFzIHAucHViZGRsLCBmYWxzZSBBUyBwdWJ2aWFyb290ICIKIAkJCQkJCSAg IkZST00gcGdfcHVibGljYXRpb24gcCIpOwogCiAJcmVzID0gRXhlY3V0ZVNxbFF1ZXJ5KGZvdXQs IHF1ZXJ5LT5kYXRhLCBQR1JFU19UVVBMRVNfT0spOwpAQCAtMzk0Myw2ICszOTUwLDcgQEAgZ2V0 UHVibGljYXRpb25zKEFyY2hpdmUgKmZvdXQsIGludCAqbnVtUHVibGljYXRpb25zKQogCWlfcHVi dXBkYXRlID0gUFFmbnVtYmVyKHJlcywgInB1YnVwZGF0ZSIpOwogCWlfcHViZGVsZXRlID0gUFFm bnVtYmVyKHJlcywgInB1YmRlbGV0ZSIpOwogCWlfcHVidHJ1bmNhdGUgPSBQUWZudW1iZXIocmVz LCAicHVidHJ1bmNhdGUiKTsKKwlpX3B1YmRkbCA9IFBRZm51bWJlcihyZXMsICJwdWJkZGwiKTsK IAlpX3B1YnZpYXJvb3QgPSBQUWZudW1iZXIocmVzLCAicHVidmlhcm9vdCIpOwogCiAJcHViaW5m byA9IHBnX21hbGxvYyhudHVwcyAqIHNpemVvZihQdWJsaWNhdGlvbkluZm8pKTsKQEAgLTM5NjYs NiArMzk3NCw4IEBAIGdldFB1YmxpY2F0aW9ucyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVB1Ymxp Y2F0aW9ucykKIAkJCShzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHViZGVsZXRlKSwgInQi KSA9PSAwKTsKIAkJcHViaW5mb1tpXS5wdWJ0cnVuY2F0ZSA9CiAJCQkoc3RyY21wKFBRZ2V0dmFs dWUocmVzLCBpLCBpX3B1YnRydW5jYXRlKSwgInQiKSA9PSAwKTsKKwkJcHViaW5mb1tpXS5wdWJk ZGwgPQorCQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJkZGwpLCAidCIpID09IDAp OwogCQlwdWJpbmZvW2ldLnB1YnZpYXJvb3QgPQogCQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywg aSwgaV9wdWJ2aWFyb290KSwgInQiKSA9PSAwKTsKIApAQCAtNDA0NSw2ICs0MDU1LDE1IEBAIGR1 bXBQdWJsaWNhdGlvbihBcmNoaXZlICpmb3V0LCBjb25zdCBQdWJsaWNhdGlvbkluZm8gKnB1Ymlu Zm8pCiAJCWZpcnN0ID0gZmFsc2U7CiAJfQogCisJaWYgKHB1YmluZm8tPnB1YmRkbCkKKwl7CisJ CWlmICghZmlyc3QpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiwgIik7CisKKwkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICJkZGwiKTsKKwkJZmlyc3QgPSBmYWxzZTsKKwl9 CisKIAlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiciKTsKIAogCWlmIChwdWJpbmZvLT5w dWJ2aWFyb290KQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaCBiL3NyYy9i aW4vcGdfZHVtcC9wZ19kdW1wLmgKaW5kZXggNjllZTkzOS4uNmM1NWRlMyAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5o CkBAIC02MjAsNiArNjIwLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX1B1YmxpY2F0aW9uSW5mbwogCWJv b2wJCXB1YmRlbGV0ZTsKIAlib29sCQlwdWJ0cnVuY2F0ZTsKIAlib29sCQlwdWJ2aWFyb290Owor CWJvb2wJCXB1YmRkbDsKIH0gUHVibGljYXRpb25JbmZvOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ193YWxkdW1wL2xvZ2ljYWxkZGxtc2dkZXNjLmMgYi9zcmMvYmluL3BnX3dhbGR1bXAv bG9naWNhbGRkbG1zZ2Rlc2MuYwpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi45 YjYyN2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ193YWxkdW1wL2xvZ2ljYWxkZGxt c2dkZXNjLmMKQEAgLTAsMCArMSBAQAorLi4vLi4vLi4vc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3Jk ZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYg LS1naXQgYS9zcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYyBiL3NyYy9iaW4vcGdfd2FsZHVt cC9ybWdyZGVzYy5jCmluZGV4IDZiOGMxN2IuLjc5MmY0MzggMTAwNjQ0Ci0tLSBhL3NyYy9iaW4v cGdfd2FsZHVtcC9ybWdyZGVzYy5jCisrKyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5j CkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvc2VxdWVuY2UuaCIKICNpbmNs dWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2Fn ZS5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBs aWNhdGlvbi9vcmlnaW4uaCIKICNpbmNsdWRlICJybWdyZGVzYy5oIgogI2luY2x1ZGUgInN0b3Jh Z2Uvc3RhbmRieWRlZnMuaCIKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jIGIv c3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKaW5kZXggMzI3YTY5NC4uNzdjNDcxMSAxMDA2NDQKLS0t IGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMK QEAgLTYxNTksNyArNjE1OSw3IEBAIGxpc3RQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVy bikKIAlQUUV4cEJ1ZmZlckRhdGEgYnVmOwogCVBHcmVzdWx0ICAgKnJlczsKIAlwcmludFF1ZXJ5 T3B0IG15b3B0ID0gcHNldC5wb3B0OwotCXN0YXRpYyBjb25zdCBib29sIHRyYW5zbGF0ZV9jb2x1 bW5zW10gPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2Us IGZhbHNlfTsKKwlzdGF0aWMgY29uc3QgYm9vbCB0cmFuc2xhdGVfY29sdW1uc1tdID0ge2ZhbHNl LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2V9 OwogCiAJaWYgKHBzZXQuc3ZlcnNpb24gPCAxMDAwMDApCiAJewpAQCAtNjE5NCw2ICs2MTk0LDEw IEBAIGxpc3RQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJYXBwZW5kUFFFeHBC dWZmZXIoJmJ1ZiwKIAkJCQkJCSAgIixcbiAgcHVidmlhcm9vdCBBUyBcIiVzXCIiLAogCQkJCQkJ ICBnZXR0ZXh0X25vb3AoIlZpYSByb290IikpOworCWlmIChwc2V0LnN2ZXJzaW9uID49IDE0MDAw MCkKKwkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJCSAgIixcbiAgcHViZGRsIEFTIFwi JXNcIiIsCisJCQkJCQkgIGdldHRleHRfbm9vcCgiRERMcyIpKTsKIAogCWFwcGVuZFBRRXhwQnVm ZmVyU3RyKCZidWYsCiAJCQkJCQkgIlxuRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uXG4i KTsKQEAgLTYyODQsNiArNjI4OCw3IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIg KnBhdHRlcm4pCiAJUEdyZXN1bHQgICAqcmVzOwogCWJvb2wJCWhhc19wdWJ0cnVuY2F0ZTsKIAli b29sCQloYXNfcHVidmlhcm9vdDsKKwlib29sCQloYXNfcHViZGRsOwogCiAJUFFFeHBCdWZmZXJE YXRhIHRpdGxlOwogCXByaW50VGFibGVDb250ZW50IGNvbnQ7CkBAIC02MzAwLDYgKzYzMDUsNyBA QCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCiAJaGFzX3B1YnRy dW5jYXRlID0gKHBzZXQuc3ZlcnNpb24gPj0gMTEwMDAwKTsKIAloYXNfcHVidmlhcm9vdCA9IChw c2V0LnN2ZXJzaW9uID49IDEzMDAwMCk7CisJaGFzX3B1YmRkbCA9ICAocHNldC5zdmVyc2lvbiA+ PSAxNTAwMDApOwogCiAJaW5pdFBRRXhwQnVmZmVyKCZidWYpOwogCkBAIC02MzEzLDYgKzYzMTks OSBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCWlmIChoYXNf cHVidmlhcm9vdCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKIAkJCQkJCQkgIiwgcHVi dmlhcm9vdCIpOworCWlmIChoYXNfcHViZGRsKQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVm LAorCQkJCQkJCSAiLCBwdWJkZGwiKTsKIAlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAogCQkJ CQkJICJcbkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvblxuIik7CiAKQEAgLTYzNjQsNiAr NjM3Myw4IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCQlu Y29scysrOwogCQlpZiAoaGFzX3B1YnZpYXJvb3QpCiAJCQluY29scysrOworCQlpZiAoaGFzX3B1 YmRkbCkKKwkJCW5jb2xzKys7CiAKIAkJaW5pdFBRRXhwQnVmZmVyKCZ0aXRsZSk7CiAJCXByaW50 ZlBRRXhwQnVmZmVyKCZ0aXRsZSwgXygiUHVibGljYXRpb24gJXMiKSwgcHVibmFtZSk7CkBAIC02 Mzc4LDYgKzYzODksOCBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJu KQogCQkJcHJpbnRUYWJsZUFkZEhlYWRlcigmY29udCwgZ2V0dGV4dF9ub29wKCJUcnVuY2F0ZXMi KSwgdHJ1ZSwgYWxpZ24pOwogCQlpZiAoaGFzX3B1YnZpYXJvb3QpCiAJCQlwcmludFRhYmxlQWRk SGVhZGVyKCZjb250LCBnZXR0ZXh0X25vb3AoIlZpYSByb290IiksIHRydWUsIGFsaWduKTsKKwkJ aWYgKGhhc19wdWJkZGwpCisJCQlwcmludFRhYmxlQWRkSGVhZGVyKCZjb250LCBnZXR0ZXh0X25v b3AoIkRETHMiKSwgdHJ1ZSwgYWxpZ24pOwogCiAJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQ UWdldHZhbHVlKHJlcywgaSwgMiksIGZhbHNlLCBmYWxzZSk7CiAJCXByaW50VGFibGVBZGRDZWxs KCZjb250LCBQUWdldHZhbHVlKHJlcywgaSwgMyksIGZhbHNlLCBmYWxzZSk7CkBAIC02Mzg4LDYg KzY0MDEsOCBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQkJ cHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCA3KSwgZmFsc2UsIGZh bHNlKTsKIAkJaWYgKGhhc19wdWJ2aWFyb290KQogCQkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQs IFBRZ2V0dmFsdWUocmVzLCBpLCA4KSwgZmFsc2UsIGZhbHNlKTsKKwkJaWYgKGhhc19wdWJkZGwp CisJCQlwcmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDkpLCBmYWxz ZSwgZmFsc2UpOwogCiAJCWlmICghcHViYWxsdGFibGVzKQogCQl7CmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5o CmluZGV4IDlhNzQ3MjEuLjlkZTNiOGYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9y bWdybGlzdC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5oCkBAIC00NywzICs0 Nyw0IEBAIFBHX1JNR1IoUk1fQ09NTUlUX1RTX0lELCAiQ29tbWl0VHMiLCBjb21taXRfdHNfcmVk bywgY29tbWl0X3RzX2Rlc2MsIGNvbW1pdF90c19pCiBQR19STUdSKFJNX1JFUExPUklHSU5fSUQs ICJSZXBsaWNhdGlvbk9yaWdpbiIsIHJlcGxvcmlnaW5fcmVkbywgcmVwbG9yaWdpbl9kZXNjLCBy ZXBsb3JpZ2luX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQogUEdfUk1HUihSTV9H RU5FUklDX0lELCAiR2VuZXJpYyIsIGdlbmVyaWNfcmVkbywgZ2VuZXJpY19kZXNjLCBnZW5lcmlj X2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBnZW5lcmljX21hc2ssIE5VTEwpCiBQR19STUdSKFJNX0xP R0lDQUxNU0dfSUQsICJMb2dpY2FsTWVzc2FnZSIsIGxvZ2ljYWxtc2dfcmVkbywgbG9naWNhbG1z Z19kZXNjLCBsb2dpY2FsbXNnX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBsb2dpY2FsbXNn X2RlY29kZSkKK1BHX1JNR1IoUk1fTE9HSUNBTERETE1TR19JRCwgIkxvZ2ljYWxERExNZXNzYWdl IiwgbG9naWNhbGRkbG1zZ19yZWRvLCBsb2dpY2FsZGRsbXNnX2Rlc2MsIGxvZ2ljYWxkZGxtc2df aWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEwsIGxvZ2ljYWxkZGxtc2dfZGVjb2RlKQpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQKaW5kZXggM2U3ZjM2NC4uYWIyOTBkZCAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0CkBAIC0xMTkwMCw0ICsxMTkwMCwxMyBAQAogeyBvaWQgPT4gJzQ2NDMnLCBkZXNjciA9 PiAnZXhwYW5kIGpzb24gZm9ybWF0IERETCB0byBhIHBsYWluIERETCBjb21tYW5kJywKICAgcHJv bmFtZSA9PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnLCBwcm9yZXR0eXBlID0+ICd0ZXh0 JywKICAgcHJvYXJndHlwZXMgPT4gJ3RleHQnLCBwcm9zcmMgPT4gJ2RkbF9kZXBhcnNlX2V4cGFu ZF9jb21tYW5kJyB9LAoreyBvaWQgPT4gJzQ2NDQnLCBkZXNjciA9PiAndHJpZ2dlciBmb3IgZGRs IGNvbW1hbmQgZGVwYXJzZScsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRs X2NvbW1hbmRfZW5kJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcicsCisgIHByb2FyZ3R5 cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfZW5k JyB9LAoreyBvaWQgPT4gJzQ2NDUnLCBkZXNjciA9PiAndHJpZ2dlciBmb3IgZGRsIGNvbW1hbmQg ZGVwYXJzZSBzdGFydCcsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2Nv bW1hbmRfc3RhcnQnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2VyJywKKyAgcHJvYXJndHlw ZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9zdGFy dCcgfSwKK3sgb2lkID0+ICc0NjQ2JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRkbCBjb21tYW5k IGRlcGFyc2UgdGFibGUgcmV3cml0ZScsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFy c2VfdGFibGVfcmV3cml0ZScsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXInLAorICBwcm9h cmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3Jp dGUnIH0sCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9u LmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKaW5kZXggYzI5ODMyNy4u YWEyYjBjNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5o CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaApAQCAtNTQsNiArNTQs OSBAQCBDQVRBTE9HKHBnX3B1YmxpY2F0aW9uLDYxMDQsUHVibGljYXRpb25SZWxhdGlvbklkKQog CiAJLyogdHJ1ZSBpZiBwYXJ0aXRpb24gY2hhbmdlcyBhcmUgcHVibGlzaGVkIHVzaW5nIHJvb3Qg c2NoZW1hICovCiAJYm9vbAkJcHVidmlhcm9vdDsKKworCS8qIHRydWUgaWYgdGFibGUgY3JlYXRp b25zIGFyZSBwdWJsaXNoZWQgKi8KKwlib29sCQlwdWJkZGw7CiB9IEZvcm1EYXRhX3BnX3B1Ymxp Y2F0aW9uOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC03Miw2ICs3NSw3IEBAIHR5cGVkZWYg c3RydWN0IFB1YmxpY2F0aW9uQWN0aW9ucwogCWJvb2wJCXB1YnVwZGF0ZTsKIAlib29sCQlwdWJk ZWxldGU7CiAJYm9vbAkJcHVidHJ1bmNhdGU7CisJYm9vbAkJcHViZGRsOwogfSBQdWJsaWNhdGlv bkFjdGlvbnM7CiAKIHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uRGVzYwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIGIvc3JjL2luY2x1ZGUvY29tbWFu ZHMvZXZlbnRfdHJpZ2dlci5oCmluZGV4IDEwMDkxYzMuLmZkMmVlN2YgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAorKysgYi9zcmMvaW5jbHVkZS9jb21t YW5kcy9ldmVudF90cmlnZ2VyLmgKQEAgLTcxLDcgKzcxLDggQEAgZXh0ZXJuIHZvaWQgRXZlbnRU cmlnZ2VyQ29sbGVjdFNpbXBsZUNvbW1hbmQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzLAogZXh0ZXJu IHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSk7CiBleHRl cm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclRhYmxlUmVsaWQoT2lkIG9iamVjdElkKTsKIGV4dGVy biB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKE5vZGUgKnN1YmNtZCwK LQkJCQkJCQkJCQkJCU9iamVjdEFkZHJlc3MgYWRkcmVzcyk7CisJCQkJCQkJCQkJCQlPYmplY3RB ZGRyZXNzIGFkZHJlc3MsCisJCQkJCQkJCQkJCQlib29sIHJld3JpdGUpOwogZXh0ZXJuIHZvaWQg RXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZUVuZCh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgRXZlbnRUcmln Z2VyQ29sbGVjdEdyYW50KEludGVybmFsR3JhbnQgKmlzdG10KTsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L2RkbG1lc3NhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGRjYTg2 Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5o CkBAIC0wLDAgKzEsNjAgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogZGRsbWVzc2FnZS5oCisg KgkgICBFeHBvcnRzIGZyb20gcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKKyAqCisg KiBDb3B5cmlnaHQgKGMpIDIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKgorICogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5oCisgKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR19MT0dJQ0FMX0RETF9NRVNTQUdFX0gKKyNkZWZpbmUg UEdfTE9HSUNBTF9ERExfTUVTU0FHRV9ICisKKyNpbmNsdWRlICJhY2Nlc3MveGxvZy5oIgorI2lu Y2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9ncmVhZGVyLmgi CisjaW5jbHVkZSAibm9kZXMvbm9kZXMuaCIKKworCisvKgorICogU3VwcG9ydCBmb3Iga2VlcGlu ZyB0cmFjayBvZiBkZXBhcnNlZCBjb21tYW5kcy4KKyAqLwordHlwZWRlZiBlbnVtIERlcGFyc2Vk Q29tbWFuZFR5cGUKK3sKKwlEQ1RfU2ltcGxlQ21kLAorCURDVF9UYWJsZURyb3BTdGFydCwKKwlE Q1RfVGFibGVEcm9wRW5kLAorCURDVF9UYWJsZUFsdGVyLAorCURDVF9PYmplY3RDcmVhdGUsCisJ RENUX09iamVjdERyb3AKK30gRGVwYXJzZWRDb21tYW5kVHlwZTsKKworLyoKKyAqIEdlbmVyaWMg bG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZSB3YWwgcmVjb3JkLgorICovCit0eXBlZGVmIHN0 cnVjdCB4bF9sb2dpY2FsX2RkbF9tZXNzYWdlCit7CisJT2lkCQkJCQkJZGJJZDsJCQkvKiBkYXRh YmFzZSBPaWQgZW1pdHRlZCBmcm9tICovCisJU2l6ZQkJCQkJcHJlZml4X3NpemU7CS8qIGxlbmd0 aCBvZiBwcmVmaXggKi8KKwlPaWQJCQkJCQlyZWxpZDsJCQkvKiBpZCBvZiB0aGUgdGFibGUgKi8K KwlEZXBhcnNlZENvbW1hbmRUeXBlCQljbWR0eXBlOwkJLyogdHlwZSBvZiBzcWwgY29tbWFuZCAq LworCVNpemUJCQkJCW1lc3NhZ2Vfc2l6ZTsJICAvKiBzaXplIG9mIHRoZSBtZXNzYWdlICovCisK KwkvKgorCSAqIHBheWxvYWQsIGluY2x1ZGluZyBudWxsLXRlcm1pbmF0ZWQgcHJlZml4IG9mIGxl bmd0aCBwcmVmaXhfc2l6ZQorCSAqLworCWNoYXIJCW1lc3NhZ2VbRkxFWElCTEVfQVJSQVlfTUVN QkVSXTsKK30geGxfbG9naWNhbF9kZGxfbWVzc2FnZTsKKworI2RlZmluZSBTaXplT2ZMb2dpY2Fs RERMTWVzc2FnZQkob2Zmc2V0b2YoeGxfbG9naWNhbF9kZGxfbWVzc2FnZSwgbWVzc2FnZSkpCisK K2V4dGVybiBYTG9nUmVjUHRyIExvZ0xvZ2ljYWxERExNZXNzYWdlKGNvbnN0IGNoYXIgKnByZWZp eCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkgICBj b25zdCBjaGFyICpkZGxfbWVzc2FnZSwgc2l6ZV90IHNpemUpOworCisvKiBSTUdSIEFQSSovCisj ZGVmaW5lIFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRQkweDAwCit2b2lkCQlsb2dpY2FsZGRsbXNn X3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOwordm9pZAkJbG9naWNhbGRkbG1zZ19kZXNj KFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7Citjb25zdCBjaGFyICps b2dpY2FsZGRsbXNnX2lkZW50aWZ5KHVpbnQ4IGluZm8pOworCisjZW5kaWYKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vZGVjb2RlLmgKaW5kZXggNzQxYmY2NS4uNDI3YTdiOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vZGVjb2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVj b2RlLmgKQEAgLTI3LDYgKzI3LDcgQEAgZXh0ZXJuIHZvaWQgaGVhcDJfZGVjb2RlKExvZ2ljYWxE ZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIGV4dGVybiB2b2lk IHhhY3RfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZl ciAqYnVmKTsKIGV4dGVybiB2b2lkIHN0YW5kYnlfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxtc2df ZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVm KTsKK2V4dGVybiB2b2lkIGxvZ2ljYWxkZGxtc2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIAogZXh0ZXJuIHZvaWQgTG9naWNhbERl Y29kaW5nUHJvY2Vzc1JlY29yZChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJ CQkJIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNh bHByb3RvLmgKaW5kZXggYTc3MWFiOC4uMmFiY2NiOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v bG9naWNhbHByb3RvLmgKQEAgLTYxLDYgKzYxLDcgQEAgdHlwZWRlZiBlbnVtIExvZ2ljYWxSZXBN c2dUeXBlCiAJTE9HSUNBTF9SRVBfTVNHX1JFTEFUSU9OID0gJ1InLAogCUxPR0lDQUxfUkVQX01T R19UWVBFID0gJ1knLAogCUxPR0lDQUxfUkVQX01TR19NRVNTQUdFID0gJ00nLAorCUxPR0lDQUxf UkVQX01TR19ERExNRVNTQUdFID0gJ0wnLAogCUxPR0lDQUxfUkVQX01TR19CRUdJTl9QUkVQQVJF ID0gJ2InLAogCUxPR0lDQUxfUkVQX01TR19QUkVQQVJFID0gJ1AnLAogCUxPR0lDQUxfUkVQX01T R19DT01NSVRfUFJFUEFSRUQgPSAnSycsCkBAIC0yMjksNyArMjMwLDExIEBAIGV4dGVybiB2b2lk IGxvZ2ljYWxyZXBfd3JpdGVfdHJ1bmNhdGUoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQg eGlkLAogZXh0ZXJuIExpc3QgKmxvZ2ljYWxyZXBfcmVhZF90cnVuY2F0ZShTdHJpbmdJbmZvIGlu LAogCQkJCQkJCQkJICBib29sICpjYXNjYWRlLCBib29sICpyZXN0YXJ0X3NlcXMpOwogZXh0ZXJu IHZvaWQgbG9naWNhbHJlcF93cml0ZV9tZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlv bklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCi0JCQkJCQkJCQkgYm9vbCB0cmFuc2FjdGlvbmFsLCBj b25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCQkJCQkJ CQkJIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJIFNp emUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0 ZV9kZGxtZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0 ciBsc24sCisJCQkJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LCBjb25zdCBjaGFy ICptZXNzYWdlKTsKK2V4dGVybiBjaGFyICpsb2dpY2FscmVwX3JlYWRfZGRsbWVzc2FnZShTdHJp bmdJbmZvIGluLCBYTG9nUmVjUHRyICpsc24sIGNvbnN0IGNoYXIgKipwcmVmaXgsIFNpemUgKnN6 KTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfcmVsKFN0cmluZ0luZm8gb3V0LCBUcmFu c2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJIFJlbGF0aW9uIHJlbCwgQml0bWFwc2V0ICpjb2x1bW5z KTsKIGV4dGVybiBMb2dpY2FsUmVwUmVsYXRpb24gKmxvZ2ljYWxyZXBfcmVhZF9yZWwoU3RyaW5n SW5mbyBpbik7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1 Z2luLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmgKaW5kZXggYjdk MjhkNy4uNzYzZTQzZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0 X3BsdWdpbi5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaApA QCAtOTEsNiArOTEsMTggQEAgdHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29kZU1lc3NhZ2VDQikg KHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJCQkJY29uc3QgY2hh ciAqbWVzc2FnZSk7CiAKIC8qCisgKiBDYWxsZWQgZm9yIHRoZSBsb2dpY2FsIGRlY29kaW5nIERE TCBtZXNzYWdlcy4KKyAqLwordHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29kZURETE1lc3NhZ2VD QikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkJCQkJICAgUmVv cmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCSAgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24s CisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJCSAgIE9pZCByZWxp ZCwKKwkJCQkJCQkJCQkgICBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJ ICAgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqbWVzc2FnZSk7 CisKKy8qCiAgKiBGaWx0ZXIgY2hhbmdlcyBieSBvcmlnaW4uCiAgKi8KIHR5cGVkZWYgYm9vbCAo KkxvZ2ljYWxEZWNvZGVGaWx0ZXJCeU9yaWdpbkNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0Nv bnRleHQgKmN0eCwKQEAgLTIwMiw2ICsyMTQsMTkgQEAgdHlwZWRlZiB2b2lkICgqTG9naWNhbERl Y29kZVN0cmVhbU1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgK IAkJCQkJCQkJCQkJICBjb25zdCBjaGFyICptZXNzYWdlKTsKIAogLyoKKyAqIENhbGxiYWNrIGZv ciBzdHJlYW1pbmcgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZXMgZnJvbSBpbi1wcm9ncmVz cworICogdHJhbnNhY3Rpb25zLgorICovCit0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlU3Ry ZWFtRERMTWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJ CQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJCQkgWExvZ1JlY1B0 ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJ CQkJCQkgT2lkIHJlbGlkLAorCQkJCQkJCQkJCQkJIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlw ZSwKKwkJCQkJCQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJCQkJCSBjb25zdCBj aGFyICptZXNzYWdlKTsKKworLyoKICAqIENhbGxiYWNrIGZvciBzdHJlYW1pbmcgdHJ1bmNhdGVz IGZyb20gaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zLgogICovCiB0eXBlZGVmIHZvaWQgKCpMb2dp Y2FsRGVjb2RlU3RyZWFtVHJ1bmNhdGVDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0 ICpjdHgsCkBAIC0yMjEsNiArMjQ2LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgT3V0cHV0UGx1Z2luQ2Fs bGJhY2tzCiAJTG9naWNhbERlY29kZVRydW5jYXRlQ0IgdHJ1bmNhdGVfY2I7CiAJTG9naWNhbERl Y29kZUNvbW1pdENCIGNvbW1pdF9jYjsKIAlMb2dpY2FsRGVjb2RlTWVzc2FnZUNCIG1lc3NhZ2Vf Y2I7CisJTG9naWNhbERlY29kZURETE1lc3NhZ2VDQiBkZGxtZXNzYWdlX2NiOwogCUxvZ2ljYWxE ZWNvZGVGaWx0ZXJCeU9yaWdpbkNCIGZpbHRlcl9ieV9vcmlnaW5fY2I7CiAJTG9naWNhbERlY29k ZVNodXRkb3duQ0Igc2h1dGRvd25fY2I7CiAKQEAgLTIzOSw2ICsyNjUsNyBAQCB0eXBlZGVmIHN0 cnVjdCBPdXRwdXRQbHVnaW5DYWxsYmFja3MKIAlMb2dpY2FsRGVjb2RlU3RyZWFtQ29tbWl0Q0Ig c3RyZWFtX2NvbW1pdF9jYjsKIAlMb2dpY2FsRGVjb2RlU3RyZWFtQ2hhbmdlQ0Igc3RyZWFtX2No YW5nZV9jYjsKIAlMb2dpY2FsRGVjb2RlU3RyZWFtTWVzc2FnZUNCIHN0cmVhbV9tZXNzYWdlX2Ni OworCUxvZ2ljYWxEZWNvZGVTdHJlYW1ERExNZXNzYWdlQ0Igc3RyZWFtX2RkbG1lc3NhZ2VfY2I7 CiAJTG9naWNhbERlY29kZVN0cmVhbVRydW5jYXRlQ0Igc3RyZWFtX3RydW5jYXRlX2NiOwogfSBP dXRwdXRQbHVnaW5DYWxsYmFja3M7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL3Bnb3V0cHV0LmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCmluZGV4 IDAyMDI3NTUuLjgzZTBiMWUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bn b3V0cHV0LmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaApAQCAtMjUs NiArMjUsNyBAQCB0eXBlZGVmIHN0cnVjdCBQR091dHB1dERhdGEKIAl1aW50MzIJCXByb3RvY29s X3ZlcnNpb247CiAJTGlzdAkgICAqcHVibGljYXRpb25fbmFtZXM7CiAJTGlzdAkgICAqcHVibGlj YXRpb25zOworCUxpc3QJICAgKmRlbGV0ZWRfcmVsaWRzOwogCWJvb2wJCWJpbmFyeTsKIAlib29s CQlzdHJlYW1pbmc7CiAJYm9vbAkJbWVzc2FnZXM7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9y ZGVyYnVmZmVyLmgKaW5kZXggODY5NTkwMS4uMmM0ZWY5YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL3Jlb3JkZXJidWZmZXIuaApAQCAtMTEsNiArMTEsOCBAQAogCiAjaW5jbHVkZSAiYWNjZXNz L2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImxpYi9pbGlzdC5oIgorI2luY2x1ZGUgIm5vZGVz L25vZGVzLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUg InN0b3JhZ2Uvc2ludmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvaHNlYXJjaC5oIgogI2luY2x1ZGUg InV0aWxzL3JlbGNhY2hlLmgiCkBAIC01Niw2ICs1OCw3IEBAIHR5cGVkZWYgZW51bSBSZW9yZGVy QnVmZmVyQ2hhbmdlVHlwZQogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlNFUlQsCiAJUkVPUkRF Ul9CVUZGRVJfQ0hBTkdFX1VQREFURSwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfREVMRVRFLAor CVJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFLAogCVJFT1JERVJfQlVGRkVSX0NIQU5H RV9NRVNTQUdFLAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT04sCiAJUkVPUkRF Ul9CVUZGRVJfQ0hBTkdFX0lOVEVSTkFMX1NOQVBTSE9ULApAQCAtMTMwLDYgKzEzMywxNiBAQCB0 eXBlZGVmIHN0cnVjdCBSZW9yZGVyQnVmZmVyQ2hhbmdlCiAJCQljaGFyCSAgICptZXNzYWdlOwog CQl9CQkJbXNnOwogCisJCS8qIERETCBNZXNzYWdlLiAqLworCQlzdHJ1Y3QKKwkJeworCQkJY2hh cgkgICAqcHJlZml4OworCQkJU2l6ZQkJbWVzc2FnZV9zaXplOworCQkJY2hhcgkgICAqbWVzc2Fn ZTsKKwkJCU9pZAkJCXJlbGlkOworCQkJRGVwYXJzZWRDb21tYW5kVHlwZQljbWR0eXBlOworCQl9 CQkJZGRsbXNnOworCiAJCS8qIE5ldyBzbmFwc2hvdCwgc2V0IHdoZW4gYWN0aW9uID09ICpfSU5U RVJOQUxfU05BUFNIT1QgKi8KIAkJU25hcHNob3QJc25hcHNob3Q7CiAKQEAgLTQzNSw2ICs0NDgs MTYgQEAgdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlck1lc3NhZ2VDQikgKFJlb3JkZXJCdWZm ZXIgKnJiLAogCQkJCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwKIAkJCQkJCQkJ CQljb25zdCBjaGFyICptZXNzYWdlKTsKIAorLyogRERMIG1lc3NhZ2UgY2FsbGJhY2sgc2lnbmF0 dXJlICovCit0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyRERMTWVzc2FnZUNCKSAoUmVvcmRl ckJ1ZmZlciAqcmIsCisJCQkJCQkJCQkJICAgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJ CQkJCSAgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAq cHJlZml4LAorCQkJCQkJCQkJCSAgIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkgICBEZXBhcnNlZENv bW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJICAgU2l6ZSBzeiwKKwkJCQkJCQkJCQkgICBj b25zdCBjaGFyICptZXNzYWdlKTsKKwogLyogYmVnaW4gcHJlcGFyZSBjYWxsYmFjayBzaWduYXR1 cmUgKi8KIHR5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJCZWdpblByZXBhcmVDQikgKFJlb3Jk ZXJCdWZmZXIgKnJiLAogCQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuKTsKQEAgLTUw MSw2ICs1MjQsMTcgQEAgdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0cmVhbU1lc3NhZ2VD QikgKAogCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwKIAkJCQkJCQkJ CQkJICBjb25zdCBjaGFyICptZXNzYWdlKTsKIAorLyogc3RyZWFtIERETCBtZXNzYWdlIGNhbGxi YWNrIHNpZ25hdHVyZSAqLwordHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0cmVhbURETE1l c3NhZ2VDQikgKAorCQkJCQkJCQkJCQkJIFJlb3JkZXJCdWZmZXIgKnJiLAorCQkJCQkJCQkJCQkJ IFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2Vf bHNuLAorCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkJCSBPaWQg cmVsaWQsCisJCQkJCQkJCQkJCQkgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJ CQkJCQkJIFNpemUgc3osCisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSk7CisKIC8q IHN0cmVhbSB0cnVuY2F0ZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KIHR5cGVkZWYgdm9pZCAoKlJl b3JkZXJCdWZmZXJTdHJlYW1UcnVuY2F0ZUNCKSAoCiAJCQkJCQkJCQkJCSAgIFJlb3JkZXJCdWZm ZXIgKnJiLApAQCAtNTUyLDYgKzU4Niw3IEBAIHN0cnVjdCBSZW9yZGVyQnVmZmVyCiAJUmVvcmRl ckJ1ZmZlckFwcGx5VHJ1bmNhdGVDQiBhcHBseV90cnVuY2F0ZTsKIAlSZW9yZGVyQnVmZmVyQ29t bWl0Q0IgY29tbWl0OwogCVJlb3JkZXJCdWZmZXJNZXNzYWdlQ0IgbWVzc2FnZTsKKwlSZW9yZGVy QnVmZmVyRERMTWVzc2FnZUNCIGRkbG1lc3NhZ2U7CiAKIAkvKgogCSAqIENhbGxiYWNrcyB0byBi ZSBjYWxsZWQgd2hlbiBzdHJlYW1pbmcgYSB0cmFuc2FjdGlvbiBhdCBwcmVwYXJlIHRpbWUuCkBA IC01NzEsNiArNjA2LDcgQEAgc3RydWN0IFJlb3JkZXJCdWZmZXIKIAlSZW9yZGVyQnVmZmVyU3Ry ZWFtQ29tbWl0Q0Igc3RyZWFtX2NvbW1pdDsKIAlSZW9yZGVyQnVmZmVyU3RyZWFtQ2hhbmdlQ0Ig c3RyZWFtX2NoYW5nZTsKIAlSZW9yZGVyQnVmZmVyU3RyZWFtTWVzc2FnZUNCIHN0cmVhbV9tZXNz YWdlOworCVJlb3JkZXJCdWZmZXJTdHJlYW1ERExNZXNzYWdlQ0Igc3RyZWFtX2RkbG1lc3NhZ2U7 CiAJUmVvcmRlckJ1ZmZlclN0cmVhbVRydW5jYXRlQ0Igc3RyZWFtX3RydW5jYXRlOwogCiAJLyoK QEAgLTY0Niw2ICs2ODIsOSBAQCBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyUXVldWVDaGFuZ2Uo UmVvcmRlckJ1ZmZlciAqLCBUcmFuc2FjdGlvbklkLAogZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZl clF1ZXVlTWVzc2FnZShSZW9yZGVyQnVmZmVyICosIFRyYW5zYWN0aW9uSWQsIFNuYXBzaG90IHNu YXBzaG90LCBYTG9nUmVjUHRyIGxzbiwKIAkJCQkJCQkJCSAgYm9vbCB0cmFuc2FjdGlvbmFsLCBj b25zdCBjaGFyICpwcmVmaXgsCiAJCQkJCQkJCQkgIFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBj aGFyICptZXNzYWdlKTsKK2V4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJRdWV1ZURETE1lc3NhZ2Uo UmVvcmRlckJ1ZmZlciAqLCBUcmFuc2FjdGlvbklkLCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkJCQkJ CQkgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJCQkgY29u c3QgY2hhciAqbWVzc2FnZSwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUp OwogZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckNvbW1pdChSZW9yZGVyQnVmZmVyICosIFRyYW5z YWN0aW9uSWQsCiAJCQkJCQkJCVhMb2dSZWNQdHIgY29tbWl0X2xzbiwgWExvZ1JlY1B0ciBlbmRf bHNuLAogCQkJCQkJCQlUaW1lc3RhbXBUeiBjb21taXRfdGltZSwgUmVwT3JpZ2luSWQgb3JpZ2lu X2lkLCBYTG9nUmVjUHRyIG9yaWdpbl9sc24pOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9wc3FsLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQK aW5kZXggYTdmNTcwMC4uYmZjNzNjMiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9wc3FsLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0CkBA IC01OTcwLDkgKzU5NzAsOSBAQCBMaXN0IG9mIHNjaGVtYXMKICgwIHJvd3MpCiAKIFxkUnAgIm5v LnN1Y2gucHVibGljYXRpb24iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9m IHB1YmxpY2F0aW9ucwotIE5hbWUgfCBPd25lciB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLSstLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0 aW9ucworIE5hbWUgfCBPd25lciB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0rLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0KICgwIHJvd3MpCiAKIFxkUnMgIm5vLnN1Y2guc3Vic2NyaXB0aW9uIgpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dAppbmRleCA0MjhjMWYxLi4xZGY1 OTUxIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91 dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dApAQCAtMzAs MjAgKzMwLDIwIEBAIEVSUk9SOiAgY29uZmxpY3Rpbmcgb3IgcmVkdW5kYW50IG9wdGlvbnMKIExJ TkUgMTogLi4udWJfeHh4IFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gJ3RydWUn LCBwdWJsaXNoX3ZpLi4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXgogXGRScAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCi0gICAgICAgIE5hbWUgICAg ICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSB0ZXN0cGliX2luc190 cnVuY3QgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgotIHRlc3RwdWJfZGVmYXVsdCAgICB8 IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgIHwgdCAgICAg ICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCisgICAgICAgIE5hbWUg ICAgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LQorIHRlc3RwaWJfaW5zX3RydW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAg ICB8IGYKKyB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgZiAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAg ICAgICAgfCBmCiAoMiByb3dzKQogCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2RlZmF1bHQg U0VUIChwdWJsaXNoID0gJ2luc2VydCwgdXBkYXRlLCBkZWxldGUnKTsKIFxkUnAKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9u cwotICAgICAgICBOYW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCi0gdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKLSB0 ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0 aW9ucworICAgICAgICBOYW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0KKyB0ZXN0cGliX2luc190cnVuY3QgfCByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwg ZiAgICAgICAgIHwgZiAgICAgICAgfCBmCisgdGVzdHB1Yl9kZWZhdWx0ICAgIHwgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDIgcm93cykKIAogLS0tIGFkZGluZyB0YWJs ZXMKQEAgLTg3LDEwICs4NywxMCBAQCBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogLS0gc2hv dWxkIGJlIGFibGUgdG8gYWRkIHNjaGVtYSB0byAnRk9SIFRBQkxFJyBwdWJsaWNhdGlvbgogQUxU RVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBBREQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEg cHViX3Rlc3Q7CiBcZFJwKyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVz OgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgogVGFibGVzIGZyb20gc2NoZW1hczoKQEAgLTk5 LDIwICs5OSwyMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gc2hvdWxkIGJlIGFibGUgdG8g ZHJvcCBzY2hlbWEgZnJvbSAnRk9SIFRBQkxFJyBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1Yl9mb3J0YWJsZSBEUk9QIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0Owog XGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVi bGljLnRlc3RwdWJfdGJsMSIKIAogLS0gc2hvdWxkIGJlIGFibGUgdG8gc2V0IHNjaGVtYSB0byAn Rk9SIFRBQkxFJyBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJs ZSBTRVQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Q7CiBcZFJwKyB0ZXN0cHViX2ZvcnRh YmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJf Zm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9y dGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3Qi CiAKQEAgLTEzNCwxMCArMTM0LDEwIEBAIEVSUk9SOiAgcmVsYXRpb24gInRlc3RwdWJfbm9wayIg aXMgbm90IHBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uCiAtLSBzaG91bGQgYmUgYWJsZSB0byBzZXQg dGFibGUgdG8gc2NoZW1hIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2Zv cnNjaGVtYSBTRVQgVEFCTEUgcHViX3Rlc3QudGVzdHB1Yl9ub3BrOwogXGRScCsgdGVzdHB1Yl9m b3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 Yl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdC50ZXN0cHVi X25vcGsiCiAKQEAgLTE1OSwxMCArMTU5LDEwIEBAIFB1YmxpY2F0aW9uczoKICAgICAidGVzdHB1 Yl9mb3JhbGx0YWJsZXMiCiAKIFxkUnArIHRlc3RwdWJfZm9yYWxsdGFibGVzCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcmFsbHRhYmxlcwotICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgdCAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yYWxsdGFibGVzCisgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IHQg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAg ICAgICB8IGYKICgxIHJvdykKIAogRFJPUCBUQUJMRSB0ZXN0cHViX3RibDI7CkBAIC0xNzQsMTkg KzE3NCwxOSBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjMgRk9SIFRBQkxFIHRlc3RwdWJf dGJsMzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNCBGT1IgVEFCTEUgT05MWSB0ZXN0cHVi X3RibDM7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjMKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzCi0gICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjMKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwg ZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwzIgogICAgICJwdWJsaWMudGVzdHB1 Yl90YmwzYSIKIAogXGRScCsgdGVzdHB1YjQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI0Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjQKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg fCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMu dGVzdHB1Yl90YmwzIgogCkBAIC0yMDcsMTAgKzIwNywxMCBAQCBVUERBVEUgdGVzdHB1Yl9wYXJ0 ZWQxIFNFVCBhID0gMTsKIC0tIG9ubHkgcGFyZW50IGlzIGxpc3RlZCBhcyBiZWluZyBpbiBwdWJs aWNhdGlvbiwgbm90IHRoZSBwYXJ0aXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9y cGFydGVkIEFERCBUQUJMRSB0ZXN0cHViX3BhcnRlZDsKIFxkUnArIHRlc3RwdWJfZm9ycGFydGVk Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3Jw YXJ0ZWQKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFy dGVkCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcGFydGVkIgog CkBAIC0yMjMsMTAgKzIyMywxMCBAQCBBTFRFUiBUQUJMRSB0ZXN0cHViX3BhcnRlZCBERVRBQ0gg UEFSVElUSU9OIHRlc3RwdWJfcGFydGVkMTsKIFVQREFURSB0ZXN0cHViX3BhcnRlZDEgU0VUIGEg PSAxOwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JwYXJ0ZWQgU0VUIChwdWJsaXNoX3Zp YV9wYXJ0aXRpb25fcm9vdCA9IHRydWUpOwogXGRScCsgdGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnBhcnRlZAot ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IHQKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JwYXJ0ZWQKKyAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IHQg ICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9wYXJ0ZWQiCiAKQEAgLTI1 NSwxMCArMjU1LDEwIEBAIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFU RSBQVUJMSUNBVElPTiB0ZXN0cHViNSBGT1IgVEFCTEUgdGVzdHB1Yl9yZl90YmwxLCB0ZXN0cHVi X3JmX3RibDIgV0hFUkUgKGMgPD4gJ3Rlc3QnIEFORCBkIDwgNSkgV0lUSCAocHVibGlzaCA9ICdp bnNlcnQnKTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViNQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAg fCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInB1YmxpYy50 ZXN0cHViX3JmX3RibDIiIFdIRVJFICgoYyA8PiAndGVzdCc6OnRleHQpIEFORCAoZCA8IDUpKQpA QCAtMjcxLDEwICsyNzEsMTAgQEAgVGFibGVzOgogCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi NSBBREQgVEFCTEUgdGVzdHB1Yl9yZl90YmwzIFdIRVJFIChlID4gMTAwMCBBTkQgZSA8IDIwMDAp OwogXGRScCsgdGVzdHB1YjUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWI1Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8 IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9y Zl90YmwxIgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwyIiBXSEVSRSAoKGMgPD4gJ3Rlc3Qn Ojp0ZXh0KSBBTkQgKGQgPCA1KSkKQEAgLTI5MCwxMCArMjkwLDEwIEBAIFB1YmxpY2F0aW9uczoK IAogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgRFJPUCBUQUJMRSB0ZXN0cHViX3JmX3RibDI7 CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwg ZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3Jm X3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDMiIFdIRVJFICgoZSA+IDEwMDApIEFO RCAoZSA8IDIwMDApKQpAQCAtMzAxLDEwICszMDEsMTAgQEAgVGFibGVzOgogLS0gcmVtb3ZlIHRl c3RwdWJfcmZfdGJsMSBhbmQgYWRkIHRlc3RwdWJfcmZfdGJsMyBhZ2FpbiAoYW5vdGhlciBXSEVS RSBleHByZXNzaW9uKQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgU0VUIFRBQkxFIHRlc3Rw dWJfcmZfdGJsMyBXSEVSRSAoZSA+IDMwMCBBTkQgZSA8IDUwMCk7CiBcZFJwKyB0ZXN0cHViNQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAg ICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDMiIFdIRVJFICgoZSA+ IDMwMCkgQU5EIChlIDwgNTAwKSkKIApAQCAtMzM3LDEwICszMzcsMTAgQEAgU0VUIGNsaWVudF9t aW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfc3ludGF4 MSBGT1IgVEFCTEUgdGVzdHB1Yl9yZl90YmwxLCBPTkxZIHRlc3RwdWJfcmZfdGJsMyBXSEVSRSAo ZSA8IDk5OSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQnKTsKIFJFU0VUIGNsaWVudF9taW5fbWVz c2FnZXM7CiBcZFJwKyB0ZXN0cHViX3N5bnRheDEKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgxCi0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBm ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgxCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg ZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAg ICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMyIg V0hFUkUgKGUgPCA5OTkpCkBAIC0zNTAsMTAgKzM1MCwxMCBAQCBTRVQgY2xpZW50X21pbl9tZXNz YWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9zeW50YXgyIEZPUiBU QUJMRSB0ZXN0cHViX3JmX3RibDEsIHRlc3RwdWJfcmZfc2NoZW1hMS50ZXN0cHViX3JmX3RibDUg V0hFUkUgKGggPCA5OTkpIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7CiBSRVNFVCBjbGllbnRf bWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1Yl9zeW50YXgyCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4MgotICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAg ICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4MgorICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJs ZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInRlc3RwdWJfcmZfc2NoZW1h MS50ZXN0cHViX3JmX3RibDUiIFdIRVJFIChoIDwgOTk5KQpAQCAtNjc2LDEwICs2NzYsMTAgQEAg Q1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfdGFibGVfaW5zIFdJVEggKHB1Ymxpc2ggPSAnaW5z ZXJ0LCB0cnVuY2F0ZScpOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIEFMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWJfdGFibGVfaW5zIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGEpOwkJLS0g b2sKIFxkUnArIHRlc3RwdWJfdGFibGVfaW5zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1Yl90YWJsZV9pbnMKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYg ICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWJfdGFibGVfaW5zCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg ZiAgICAgICB8IGYgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAg ICAicHVibGljLnRlc3RwdWJfdGJsNSIgKGEpCiAKQEAgLTgyMSwxMCArODIxLDEwIEBAIENSRUFU RSBUQUJMRSB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMgKGEgaW50LCBiIGludCwgYyBpbnQsIFBS SU1BUlkgS0VZIChhLGMpKTsKIEFMVEVSIFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyBS RVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVyc19wa2V5 OwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMgQUREIFRBQkxFIHRlc3Rw dWJfdGJsX2JvdGhfZmlsdGVycyAoYSxjKSBXSEVSRSAoYyAhPSAxKTsKIFxkUnArIHRlc3RwdWJf Ym90aF9maWx0ZXJzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViX2JvdGhfZmlsdGVycwotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWJfYm90aF9maWx0ZXJzCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwg RERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRl c3RwdWJfdGJsX2JvdGhfZmlsdGVycyIgKGEsIGMpIFdIRVJFIChjIDw+IDEpCiAKQEAgLTEwMjks MTAgKzEwMjksMTAgQEAgRVJST1I6ICByZWxhdGlvbiAidGVzdHB1Yl90YmwxIiBpcyBhbHJlYWR5 IG1lbWJlciBvZiBwdWJsaWNhdGlvbiAidGVzdHB1Yl9mb3J0YmwKIENSRUFURSBQVUJMSUNBVElP TiB0ZXN0cHViX2ZvcnRibCBGT1IgVEFCTEUgdGVzdHB1Yl90YmwxOwogRVJST1I6ICBwdWJsaWNh dGlvbiAidGVzdHB1Yl9mb3J0YmwiIGFscmVhZHkgZXhpc3RzCiBcZFJwKyB0ZXN0cHViX2ZvcnRi bAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9m b3J0YmwKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRi bAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKICAg ICAicHVibGljLnRlc3RwdWJfdGJsMSIKQEAgLTEwNzAsMTAgKzEwNzAsMTAgQEAgUHVibGljYXRp b25zOgogICAgICJ0ZXN0cHViX2ZvcnRibCIKIAogXGRScCsgdGVzdHB1Yl9kZWZhdWx0Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAot ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZiAg ICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKICAgICAicHVi bGljLnRlc3RwdWJfdGJsMSIKQEAgLTExNTEsMTAgKzExNTEsMTAgQEAgUkVWT0tFIENSRUFURSBP TiBEQVRBQkFTRSByZWdyZXNzaW9uIEZST00gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMjsKIERS T1AgVEFCTEUgdGVzdHB1Yl9wYXJ0ZWQ7CiBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsMTsKIFxkUnAr IHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViX2RlZmF1bHQKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBE RExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQogCiAtLSBmYWlsIC0gbXVz dCBiZSBvd25lciBvZiBwdWJsaWNhdGlvbgpAQCAtMTE2NCwyMCArMTE2NCwyMCBAQCBFUlJPUjog IG11c3QgYmUgb3duZXIgb2YgcHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0CiBSRVNFVCBST0xF OwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9kZWZhdWx0IFJFTkFNRSBUTyB0ZXN0cHViX2Zv bzsKIFxkUnAgdGVzdHB1Yl9mb28KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotICAgIE5hbWUgICAgIHwgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHRlc3RwdWJfZm9vIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9m IHB1YmxpY2F0aW9ucworICAgIE5hbWUgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0tCisgdGVzdHB1Yl9mb28gfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwg ZiAgICAgICAgfCBmCiAoMSByb3cpCiAKIC0tIHJlbmFtZSBiYWNrIHRvIGtlZXAgdGhlIHJlc3Qg c2ltcGxlCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvbyBSRU5BTUUgVE8gdGVzdHB1Yl9k ZWZhdWx0OwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9kZWZhdWx0IE9XTkVSIFRPIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlcjI7CiBcZFJwIHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAg ICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gdGVz dHB1Yl9kZWZhdWx0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMiB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMK KyAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwg RERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0KKyB0ZXN0cHViX2RlZmF1bHQgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8 IGYgICAgICAgIHwgZgogKDEgcm93KQogCiAtLSBhZGRpbmcgc2NoZW1hcyBhbmQgdGFibGVzCkBA IC0xMTkzLDE5ICsxMTkzLDE5IEBAIENSRUFURSBUQUJMRSAiQ1VSUkVOVF9TQ0hFTUEiLiJDVVJS RU5UX1NDSEVNQSIoaWQgaW50KTsKIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsK IENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRk9SIEFMTCBUQUJMRVMgSU4g U0NIRU1BIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAg IHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCiBDUkVBVEUgUFVC TElDQVRJT04gdGVzdHB1YjJfZm9yc2NoZW1hIEZPUiBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJf dGVzdDEsIHB1Yl90ZXN0MiwgcHViX3Rlc3QzOwogXGRScCsgdGVzdHB1YjJfZm9yc2NoZW1hCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2No ZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVt YQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAg ICAgInB1Yl90ZXN0MiIKQEAgLTEyMTksNDQgKzEyMTksNDQgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9O IHRlc3RwdWI2X2ZvcnNjaGVtYSBGT1IgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgIkNVUlJFTlRfU0NI RU1BIiwKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEZPUiBUQUJMRSAiQ1VS UkVOVF9TQ0hFTUEiLiJDVVJSRU5UX1NDSEVNQSI7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2Vz OwogXGRScCsgdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJv bSBzY2hlbWFzOgogICAgICJwdWJsaWMiCiAKIFxkUnArIHRlc3RwdWI0X2ZvcnNjaGVtYQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI0X2ZvcnNjaGVt YQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNF9mb3JzY2hlbWEK KyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAiQ1VSUkVOVF9TQ0hFTUEi CiAKIFxkUnArIHRlc3RwdWI1X2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViNV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZy b20gc2NoZW1hczoKICAgICAiQ1VSUkVOVF9TQ0hFTUEiCiAgICAgInB1YmxpYyIKIAogXGRScCsg dGVzdHB1YjZfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjZfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWI2X2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFz OgogICAgICJDVVJSRU5UX1NDSEVNQSIKICAgICAicHVibGljIgogCiBcZFJwKyB0ZXN0cHViX2Zv cnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWJfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJf Zm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJDVVJSRU5UX1NDSEVNQS5DVVJS RU5UX1NDSEVNQSIKIApAQCAtMTI5MCwxMCArMTI5MCwxMCBAQCBFUlJPUjogIHNjaGVtYSAidGVz dHB1Yl92aWV3IiBkb2VzIG5vdCBleGlzdAogLS0gZHJvcHBpbmcgdGhlIHNjaGVtYSBzaG91bGQg cmVmbGVjdCB0aGUgY2hhbmdlIGluIHB1YmxpY2F0aW9uCiBEUk9QIFNDSEVNQSBwdWJfdGVzdDM7 CiBcZFJwKyB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9t IHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTMwMSwyMCAr MTMwMSwyMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gcmVuYW1pbmcgdGhlIHNjaGVtYSBz aG91bGQgcmVmbGVjdCB0aGUgY2hhbmdlIGluIHB1YmxpY2F0aW9uCiBBTFRFUiBTQ0hFTUEgcHVi X3Rlc3QxIFJFTkFNRSB0byBwdWJfdGVzdDFfcmVuYW1lZDsKIFxkUnArIHRlc3RwdWIyX2ZvcnNj aGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIy X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9m b3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rl c3QxX3JlbmFtZWQiCiAgICAgInB1Yl90ZXN0MiIKIAogQUxURVIgU0NIRU1BIHB1Yl90ZXN0MV9y ZW5hbWVkIFJFTkFNRSB0byBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMl9mb3JzY2hlbWEKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hl bWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1h CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAg ICAicHViX3Rlc3QyIgpAQCAtMTMyMiwxMCArMTMyMiwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFz OgogLS0gYWx0ZXIgcHVibGljYXRpb24gYWRkIHNjaGVtYQogQUxURVIgUFVCTElDQVRJT04gdGVz dHB1YjFfZm9yc2NoZW1hIEFERCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDI7CiBcZFJw KyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTMzNCwxMCArMTMzNCwx MCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9y c2NoZW1hIEFERCBBTEwgVEFCTEVTIElOIFNDSEVNQSBub25fZXhpc3RlbnRfc2NoZW1hOwogRVJS T1I6ICBzY2hlbWEgIm5vbl9leGlzdGVudF9zY2hlbWEiIGRvZXMgbm90IGV4aXN0CiBcZFJwKyB0 ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTM0NiwxMCArMTM0NiwxMCBA QCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2No ZW1hIEFERCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBFUlJPUjogIHNjaGVtYSAi cHViX3Rlc3QxIiBpcyBhbHJlYWR5IG1lbWJlciBvZiBwdWJsaWNhdGlvbiAidGVzdHB1YjFfZm9y c2NoZW1hIgogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K LSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJs ZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTEz NTcsMTAgKzEzNTcsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIGFsdGVyIHB1YmxpY2F0 aW9uIGRyb3Agc2NoZW1hCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJP UCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDI7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hl bWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9m b3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9y c2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0 MSIKIApAQCAtMTM2OCwxMCArMTM2OCwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIg UFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIERST1AgQUxMIFRBQkxFUyBJTiBTQ0hFTUEg cHViX3Rlc3QyOwogRVJST1I6ICB0YWJsZXMgZnJvbSBzY2hlbWEgInB1Yl90ZXN0MiIgYXJlIG5v dCBwYXJ0IG9mIHRoZSBwdWJsaWNhdGlvbgogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1h Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKQEAg LTEzNzksMjkgKzEzNzksMjkgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBEUk9QIEFMTCBUQUJMRVMgSU4gU0NIRU1BIG5vbl9leGlz dGVudF9zY2hlbWE7CiBFUlJPUjogIHNjaGVtYSAibm9uX2V4aXN0ZW50X3NjaGVtYSIgZG9lcyBu b3QgZXhpc3QKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFi bGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCiAtLSBkcm9wIGFsbCBzY2hlbWFz CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJPUCBBTEwgVEFCTEVTIElO IFNDSEVNQSBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAg ICB8IGYKICgxIHJvdykKIAogLS0gYWx0ZXIgcHVibGljYXRpb24gc2V0IG11bHRpcGxlIHNjaGVt YQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIFNFVCBBTEwgVEFCTEVTIElO IFNDSEVNQSBwdWJfdGVzdDEsIHB1Yl90ZXN0MjsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNj aGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hl bWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgog ICAgICJwdWJfdGVzdDIiCkBAIC0xNDEwLDEwICsxNDEwLDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VUIEFMTCBUQUJMRVMg SU4gU0NIRU1BIG5vbl9leGlzdGVudF9zY2hlbWE7CiBFUlJPUjogIHNjaGVtYSAibm9uX2V4aXN0 ZW50X3NjaGVtYSIgZG9lcyBub3QgZXhpc3QKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVt YQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEK KyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAg ICJwdWJfdGVzdDIiCkBAIC0xNDIyLDEwICsxNDIyLDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiAtLSByZW1vdmluZyB0aGUgZHVwbGljYXRlIHNjaGVtYXMKIEFMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWIxX2ZvcnNjaGVtYSBTRVQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxLCBwdWJf dGVzdDE7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxl cyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIApAQCAtMTUwNCwxOCArMTUwNCwxOCBA QCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04g dGVzdHB1YjNfZm9yc2NoZW1hOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRl c3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViM19mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg fCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQogCiBBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViM19mb3JzY2hlbWEgU0VUIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90 ZXN0MTsKIFxkUnArIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVz IGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCkBAIC0xNTI1LDIwICsxNTI1LDIwIEBA IENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYV9mb3J0YWJsZSBGT1IgQUxMIFRB QkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxCiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0 YWJsZV9mb3JzY2hlbWEgRk9SIFRBQkxFIHB1Yl90ZXN0Mi50YmwxLCBBTEwgVEFCTEVTIElOIFND SEVNQSBwdWJfdGVzdDE7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1 Yl9mb3JzY2hlbWFfZm9ydGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1Yl9mb3JzY2hlbWFfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgog ICAgICJwdWJfdGVzdDIudGJsMSIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0 MSIKIAogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGVfZm9yc2NoZW1hCi0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEKKyAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAg ICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdDIudGJsMSIKIFRhYmxlcyBmcm9tIHNjaGVt YXM6Ci0tIAoyLjcuMi53aW5kb3dzLjEKCg== --_005_OS0PR01MB5716052AD854FBD52316C6BE946B9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v18-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Description: v18-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch Content-Disposition: attachment; filename="v18-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch"; size=15428; creation-date="Tue, 16 Aug 2022 11:56:00 GMT"; modification-date="Tue, 16 Aug 2022 11:57:15 GMT" Content-Transfer-Encoding: base64 RnJvbSA0NjYxMjU1ZjRmYmFhZmY2NjZiNjg4MzEzZWFkZWVkNWRhYzRmZjNiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFNhdCwgMTMgQXVnIDIwMjIgMDg6MzE6MjggLTA0MDAKU3ViamVjdDogW1BBVENI IHYxOCAzLzRdIFN1cHBvcnQgQ1JFQVRFIFRBQkxFIEFTIFNFTEVDVCBJTlRPCgpUaGUgbWFpbiBp ZGVhIG9mIHJlcGxpY2F0aW5nIHRoZSBDUkVBVEUgVEFCTEUgQVMgaXMgdGhhdCB3ZSBkZXByYXNl IHRoZSBDUkVBVEUKVEFCTEUgQVMgaW50byBhIHNpbXBsZSBDUkVBVEUgVEFCTEUod2l0aG91dCBz dWJxdWVyeSkgY29tbWFuZCBhbmQgV0FMIGxvZyBpdAphZnRlciBjcmVhdGluZyB0aGUgdGFibGUg YW5kIGJlZm9yZSB3cml0aW5nIGRhdGEgaW50byB0aGUgdGFibGUgYW5kIHJlcGxpY2F0ZQp0aGUg aW5jb21pbmcgd3JpdGVzIGxhdGVyIGFzIG5vcm1hbCBJTlNFUlRzLiBJbiB0aGlzIGFwcG9yYWNo LCB3ZSBkb24ndCBleGVjdXRlCnRoZSBzdWJxdWVyeSBvbiBzdWJzY3JpYmVyIHNvIHRoYXQgZG9u J3QgbmVlZCB0byBtYWtlIHN1cmUgYWxsIHRoZSBvYmplY3RzCnJlZmVyZW5jZWQgaW4gdGhlIHN1 YnF1ZXJ5IGFsc28gZXhpc3RzIGluIHN1YnNjcmliZXIuIEFuZCBUaGlzIGFwcHJvYWNoIHdvcmtz CmZvciBhbGwga2luZCBvZiBjb21tYW5kcyhlLmcuIENSQUVURSBUQUJMRSBBUyBbU0VMRUNUXVtF WEVDVVRFXVtWQUxVRVNdKQoKSW50cm9kdWNpbmcgYSBuZXcgdHlwZSBvZiBldmVudCB0cmlnZ2Vy ICJ0YWJsZV9pbml0X3dyaXRlIi4gd2hpY2ggd291bGQgYmUgZmlyZWQKZm9yIENSRUFURSBUQUJM RSBBUy9TRUxFQ1QgSU5UTyBhZnRlciBjcmVhdGluZyB0aGUgdGFibGUgYW5kCmJlZm9yZSBhbnkg b3RoZXIgbW9kaWZpY2F0aW9uLiB3ZSBkZXBhcnNlIHRoZSBjb21tYW5kIGluIHRoZSB0YWJsZV9p bml0X3dyaXRlIGV2ZW50CnRyaWdnZXIgYW5kIFdBTCBsb2cgdGhlIGRlcGFyc2VkIGpzb24gc3Ry aW5nLiBUaGUgd2Fsc2VuZGVyIHdpbGwgc2VuZCB0aGUKc3RyaW5nIHRvIHN1YnNjcmliZXIuIEFu ZCBpbmNvbWluZyBJTlNFUlRzIHdpbGwgYWxzbyBiZSByZXBsaWNhdGVkLgotLS0KIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMgICAgICAgIHwgIDEwICsrCiBzcmMvYmFja2VuZC9jb21t YW5kcy9kZGxfZGVwYXJzZS5jICAgICB8ICAyNCArKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5jICAgfCAxNzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst CiBzcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyB8ICAgOSArKwogc3JjL2Jh Y2tlbmQvdGNvcC91dGlsaXR5LmMgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvdXRp bHMvY2FjaGUvZXZ0Y2FjaGUuYyAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmRhdCAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dl ci5oICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCAgICAgfCAg IDkgKy0KIHNyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmggICAgICAgICAgIHwgICAzICstCiAx MCBmaWxlcyBjaGFuZ2VkLCAyMzIgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvY3JlYXRlYXMuYwppbmRleCAxNTJjMjliLi4wZDgwYzZjIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Ny ZWF0ZWFzLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5o IgogI2luY2x1ZGUgImNhdGFsb2cvdG9hc3RpbmcuaCIKICNpbmNsdWRlICJjb21tYW5kcy9jcmVh dGVhcy5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCIKICNpbmNsdWRlICJj b21tYW5kcy9tYXR2aWV3LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJlcGFyZS5oIgogI2luY2x1 ZGUgImNvbW1hbmRzL3RhYmxlY21kcy5oIgpAQCAtMTQzLDYgKzE0NCwxNSBAQCBjcmVhdGVfY3Rh c19pbnRlcm5hbChMaXN0ICphdHRyTGlzdCwgSW50b0NsYXVzZSAqaW50bykKIAkJU3RvcmVWaWV3 UXVlcnkoaW50b1JlbGF0aW9uQWRkci5vYmplY3RJZCwgcXVlcnksIGZhbHNlKTsKIAkJQ29tbWFu ZENvdW50ZXJJbmNyZW1lbnQoKTsKIAl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogRmlyZSB0aGUg dHJpZ2dlciBmb3IgdGFibGVfaW5pdF93cml0ZSBhZnRlciBjcmVhdGluZyB0aGUgdGFibGUgc28K KwkJICogdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZSBjYXRhbG9nIGluZm8gYWJvdXQgdGhlIG5ld2x5 IGNyZWF0ZWQgdGFibGUgaW4KKwkJICogdGhlIHRyaWdnZXIgZnVuY3Rpb24uCisJCSAqLworCQlF dmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZSgoTm9kZSAqKSBjcmVhdGUsIGludG9SZWxhdGlvbkFk ZHIpOworCX0KIAogCXJldHVybiBpbnRvUmVsYXRpb25BZGRyOwogfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Rk bF9kZXBhcnNlLmMKaW5kZXggMGRiZTFjOS4uYjliNTliMSAxMDA3NTUKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxf ZGVwYXJzZS5jCkBAIC02MTg0LDYgKzYxODQsMjcgQEAgZGVwYXJzZV9UeXBlX1N1YnNjcmlwdChP YmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKQogfQogCiAvKgorICogRGVwYXJz ZSBDUkVBVEUgVEFCTEUgQVMgY29tbWFuZC4KKyAqCisgKiBkZXBhcnNlX0NyZWF0ZVN0bXQgZG8g dGhlIGFjdHVhbCB3b3JrIGFzIHdlIGRlcGFyc2UgdGhlIGZpbmFsIENyZWF0ZVN0bXQgZm9yCisg KiBDUkVBVEUgVEFCTEUgQVMgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9DcmVhdGVUYWJsZUFzU3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2lkCQkJb2Jq ZWN0SWQ7CisJTm9kZQkgICAqcGFyc2V0cmVlOworCisJQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1Rf Q3JlYXRlVGFibGVBcyk7CisKKwlwYXJzZXRyZWUgPSBjbWQtPmQuY3Rhcy5yZWFsX2NyZWF0ZTsK KwlvYmplY3RJZCA9IGNtZC0+ZC5jdGFzLmFkZHJlc3Mub2JqZWN0SWQ7CisKKwlyZXR1cm4gZGVw YXJzZV9DcmVhdGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworfQorCisKKy8qCiAgKiBIYW5k bGUgZGVwYXJzaW5nIG9mIHNpbXBsZSBjb21tYW5kcy4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHNo b3VsZCBjb3ZlciBhbGwgY2FzZXMgaGFuZGxlZCBpbiBQcm9jZXNzVXRpbGl0eVNsb3cuCkBAIC02 NDA4LDYgKzY0MjksOSBAQCBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5k ICpjbWQsIGJvb2wgdmVyYm9zZV9tb2RlKQogCQljYXNlIFNDVF9BbHRlclRhYmxlOgogCQkJdHJl ZSA9IGRlcGFyc2VfQWx0ZXJUYWJsZVN0bXQoY21kKTsKIAkJCWJyZWFrOworCQljYXNlIFNDVF9D cmVhdGVUYWJsZUFzOgorCQkJdHJlZSA9IGRlcGFyc2VfQ3JlYXRlVGFibGVBc1N0bXQoY21kKTsK KwkJCWJyZWFrOwogCQljYXNlIFNDVF9BbHRlck9wRmFtaWx5OgogCQkJdHJlZSA9IGRlcGFyc2Vf QWx0ZXJPcEZhbWlseShjbWQpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j b21tYW5kcy9ldmVudF90cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmln Z2VyLmMKaW5kZXggNDRlYTA2ZS4uOGJiZTg3OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvZXZlbnRfdHJpZ2dlci5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3Ry aWdnZXIuYwpAQCAtMTMzLDcgKzEzMyw4IEBAIENyZWF0ZUV2ZW50VHJpZ2dlcihDcmVhdGVFdmVu dFRyaWdTdG10ICpzdG10KQogCWlmIChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1h bmRfc3RhcnQiKSAhPSAwICYmCiAJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFu ZF9lbmQiKSAhPSAwICYmCiAJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJvcCIpICE9 IDAgJiYKLQkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSAhPSAwKQor CQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfcmV3cml0ZSIpICE9IDAgJiYKKwkJc3Ry Y21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX2luaXRfd3JpdGUiKSAhPSAwKQogCQllcmVwb3J0 KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKIAkJCQkgZXJybXNn KCJ1bnJlY29nbml6ZWQgZXZlbnQgbmFtZSBcIiVzXCIiLApAQCAtMTU5LDcgKzE2MCw4IEBAIENy ZWF0ZUV2ZW50VHJpZ2dlcihDcmVhdGVFdmVudFRyaWdTdG10ICpzdG10KQogCS8qIFZhbGlkYXRl IHRhZyBsaXN0LCBpZiBhbnkuICovCiAJaWYgKChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRs X2NvbW1hbmRfc3RhcnQiKSA9PSAwIHx8CiAJCSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRs X2NvbW1hbmRfZW5kIikgPT0gMCB8fAotCQkgc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInNxbF9k cm9wIikgPT0gMCkKKwkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJvcCIpID09IDAg fHwKKwkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9pbml0X3dyaXRlIikgPT0gMCkK IAkJJiYgdGFncyAhPSBOVUxMKQogCQl2YWxpZGF0ZV9kZGxfdGFncygidGFnIiwgdGFncyk7CiAJ ZWxzZSBpZiAoc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSA9PSAwCkBA IC01ODUsNyArNTg3LDggQEAgRXZlbnRUcmlnZ2VyQ29tbW9uU2V0dXAoTm9kZSAqcGFyc2V0cmVl LAogCQlkYmd0YWcgPSBDcmVhdGVDb21tYW5kVGFnKHBhcnNldHJlZSk7CiAJCWlmIChldmVudCA9 PSBFVlRfRERMQ29tbWFuZFN0YXJ0IHx8CiAJCQlldmVudCA9PSBFVlRfRERMQ29tbWFuZEVuZCB8 fAotCQkJZXZlbnQgPT0gRVZUX1NRTERyb3ApCisJCQlldmVudCA9PSBFVlRfU1FMRHJvcCB8fAor CQkJZXZlbnQgPT0gRVZUX1RhYmxlSW5pdFdyaXRlKQogCQl7CiAJCQlpZiAoIWNvbW1hbmRfdGFn X2V2ZW50X3RyaWdnZXJfb2soZGJndGFnKSkKIAkJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBj b21tYW5kIHRhZyBcIiVzXCIiLCBHZXRDb21tYW5kVGFnTmFtZShkYmd0YWcpKTsKQEAgLTg2OCw2 ICs4NzEsMTYzIEBAIEV2ZW50VHJpZ2dlclRhYmxlUmV3cml0ZShOb2RlICpwYXJzZXRyZWUsIE9p ZCB0YWJsZU9pZCwgaW50IHJlYXNvbikKIAlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOwogfQog CisKKy8qCisgKiBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0CisgKiAgICAgUHJlcGFy ZSB0byByZWNlaXZlIGRhdGEgb24gYW4gQ1JFQVRFIFRBQkxFIEFTL1NFTEVUIElOVE8gY29tbWFu ZCBhYm91dAorICogICAgIHRvIGJlIGV4ZWN1dGVkLgorICovCit2b2lkCitFdmVudFRyaWdnZXJU YWJsZUluaXRXcml0ZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSkKK3sKKwlNZW1vcnlDb250ZXh0IG9s ZGN4dDsKKwlDb2xsZWN0ZWRDb21tYW5kICpjb21tYW5kOworCisJLyogaWdub3JlIGlmIGV2ZW50 IHRyaWdnZXIgY29udGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICovCisJaWYg KCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRl LT5jb21tYW5kQ29sbGVjdGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJb2xkY3h0ID0gTWVt b3J5Q29udGV4dFN3aXRjaFRvKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3h0KTsKKworCWNv bW1hbmQgPSBwYWxsb2Moc2l6ZW9mKENvbGxlY3RlZENvbW1hbmQpKTsKKworCWNvbW1hbmQtPnR5 cGUgPSBTQ1RfQ3JlYXRlVGFibGVBczsKKwljb21tYW5kLT5pbl9leHRlbnNpb24gPSBjcmVhdGlu Z19leHRlbnNpb247CisJY29tbWFuZC0+ZC5jdGFzLmFkZHJlc3MgPSBJbnZhbGlkT2JqZWN0QWRk cmVzczsKKwljb21tYW5kLT5kLmN0YXMucmVhbF9jcmVhdGUgPSBOVUxMOworCWNvbW1hbmQtPnBh cnNldHJlZSA9IGNvcHlPYmplY3QocGFyc2V0cmVlKTsKKworCWNvbW1hbmQtPnBhcmVudCA9IGN1 cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisJY3VycmVudEV2ZW50VHJp Z2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCA9IGNvbW1hbmQ7CisKKwlNZW1vcnlDb250ZXh0U3dp dGNoVG8ob2xkY3h0KTsKK30KKworLyoKKyAqIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5k CisgKgkJRmluaXNoIHVwIHNhdmluZyBhbiBDUkVBVEUgVEFCTEUgQVMvU0VMRUNUIElOVE8gY29t bWFuZC4KKyAqCisgKiBGSVhNRSB0aGlzIEFQSSBpc24ndCBjb25zaWRlcmluZyB0aGUgcG9zc2li aWxpdHkgdGhhdCBhbiB4YWN0L3N1YnhhY3QgaXMKKyAqIGFib3J0ZWQgcGFydHdheSB0aHJvdWdo LiAgUHJvYmFibHkgaXQncyBiZXN0IHRvIGFkZCBhbgorICogQXRFT1N1YlhhY3RfRXZlbnRUcmln Z2VycygpIHRvIGZpeCB0aGlzLgorICovCit2b2lkCitFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0 ZUVuZCh2b2lkKQoreworCUNvbGxlY3RlZENvbW1hbmQgKnBhcmVudDsKKworCS8qIGlnbm9yZSBp ZiBldmVudCB0cmlnZ2VyIGNvbnRleHQgbm90IHNldCwgb3IgY29sbGVjdGlvbiBkaXNhYmxlZCAq LworCWlmICghY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJlbnRFdmVudFRyaWdn ZXJTdGF0ZS0+Y29tbWFuZENvbGxlY3Rpb25JbmhpYml0ZWQpCisJCXJldHVybjsKKworCXBhcmVu dCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPnBhcmVudDsKKwor CXBmcmVlKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQpOworCisJY3Vy cmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCA9IHBhcmVudDsKK30KKworLyoK KyAqIHB1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZQorICoKKyAqIERlcGFyc2Ug dGhlIGRkbCB0YWJsZSBjcmVhdGUgY29tbWFuZCBhbmQgbG9nIGl0LgorICovCitEYXR1bQorcHVi bGljYXRpb25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJ Y2hhcgkJCQlyZWxwZXJzaXN0OworCUNvbGxlY3RlZENvbW1hbmQgICAqY21kOworCWNoYXIgICAJ CQkgICAqanNvbl9zdHJpbmc7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5m bykpCisJCWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7 CisKKwljbWQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOworCUFz c2VydChjbWQpOworCisJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoY21kLT5kLnNp bXBsZS5hZGRyZXNzLm9iamVjdElkKTsKKworCS8qCisJICogRG8gbm90IGdlbmVyYXRlIHdhbCBs b2cgZm9yIGNvbW1hbmRzIHdob3NlIHRhcmdldCB0YWJsZSBpcyBhIHRlbXBvcmFyeQorCSAqIHRh YmxlLgorCSAqCisJICogV2Ugd2lsbCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFi bGVzIHNvIHRoYXQgdW5sb2dnZWQgdGFibGVzCisJICogY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQg YWx0ZXJlZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRlLiBUaGlzIG1ha2VzIGl0CisJICogcG9zc2li bGUgdG8gZGlyZWN0bHkgcmVwbGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZSBpbmNv bWluZworCSAqIHJld3JpdGUgbWVzc2FnZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgor CSAqLworCWlmIChyZWxwZXJzaXN0ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCXJldHVybiBQ b2ludGVyR2V0RGF0dW0oTlVMTCk7CisKKwkvKiBEZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQg V0FMIGxvZyBpdCB0byBhbGxvdyBkZWNvZGluZyBvZiB0aGUgc2FtZS4gKi8KKwlqc29uX3N0cmlu ZyA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgZmFsc2UpOworCisJaWYgKGpzb25fc3Ry aW5nICE9IE5VTEwpCisJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgY21kLT5kLnNp bXBsZS5hZGRyZXNzLm9iamVjdElkLCBEQ1RfU2ltcGxlQ21kLAorCQkJCQkJCSBqc29uX3N0cmlu Zywgc3RybGVuKGpzb25fc3RyaW5nKSArIDEpOworCisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShO VUxMKTsKK30KKworLyoKKyAqIEZpcmUgdGFibGVfaW5pdF9yZXdyaXRlIHRyaWdnZXJzLgorICov Cit2b2lkCitFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZShOb2RlICpyZWFsX2NyZWF0ZSwgT2Jq ZWN0QWRkcmVzcyBhZGRyZXNzKQoreworCUxpc3QJICAgKnJ1bmxpc3Q7CisJRXZlbnRUcmlnZ2Vy RGF0YSB0cmlnZGF0YTsKKwlDb2xsZWN0ZWRDb21tYW5kICpjb21tYW5kOworCisJLyoKKwkgKiBT ZWUgRXZlbnRUcmlnZ2VyRERMQ29tbWFuZFN0YXJ0IGZvciBhIGRpc2N1c3Npb24gYWJvdXQgd2h5 IGV2ZW50CisJICogdHJpZ2dlcnMgYXJlIGRpc2FibGVkIGluIHNpbmdsZSB1c2VyIG1vZGUuCisJ ICovCisJaWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKKwkJcmV0dXJuOworCisJLyoKKwkgKiBBbHNv IGRvIG5vdGhpbmcgaWYgb3VyIHN0YXRlIGlzbid0IHNldCB1cCwgd2hpY2ggaXQgd29uJ3QgYmUg aWYgdGhlcmUKKwkgKiB3ZXJlbid0IGFueSByZWxldmFudCBldmVudCB0cmlnZ2VycyBhdCB0aGUg c3RhcnQgb2YgdGhlIGN1cnJlbnQgRERMCisJICogY29tbWFuZC4gIFRoaXMgdGVzdCBtaWdodCB0 aGVyZWZvcmUgc2VlbSBvcHRpb25hbCwgYnV0IGl0J3MKKwkgKiAqbmVjZXNzYXJ5KiwgYmVjYXVz ZSBFdmVudFRyaWdnZXJDb21tb25TZXR1cCBtaWdodCBmaW5kIHRyaWdnZXJzIHRoYXQKKwkgKiBk aWRuJ3QgZXhpc3QgYXQgdGhlIHRpbWUgdGhlIGNvbW1hbmQgc3RhcnRlZC4KKwkgKi8KKwlpZiAo IWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSkKKwkJcmV0dXJuOworCisJLyogRG8gbm90aGluZyBp ZiBubyBjb21tYW5kIHdhcyBjb2xsZWN0ZWQuICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2Vy U3RhdGUtPmN1cnJlbnRDb21tYW5kKQorCQlyZXR1cm47CisKKwljb21tYW5kID0gY3VycmVudEV2 ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsKKworCXJ1bmxpc3QgPSBFdmVudFRyaWdn ZXJDb21tb25TZXR1cChjb21tYW5kLT5wYXJzZXRyZWUsCisJCQkJCQkJCQkgIEVWVF9UYWJsZUlu aXRXcml0ZSwKKwkJCQkJCQkJCSAgInRhYmxlX2luaXRfd3JpdGUiLAorCQkJCQkJCQkJICAmdHJp Z2RhdGEpOworCWlmIChydW5saXN0ID09IE5JTCkKKwkJcmV0dXJuOworCisJLyogU2V0IHRoZSBy ZWFsIENyZWF0ZVRhYmxlIHN0YXRtZW50IGFuZCBvYmplY3QgYWRkcmVzcyAqLworCWNvbW1hbmQt PmQuY3Rhcy5yZWFsX2NyZWF0ZSA9IHJlYWxfY3JlYXRlOworCWNvbW1hbmQtPmQuY3Rhcy5hZGRy ZXNzID0gYWRkcmVzczsKKworCS8qIFJ1biB0aGUgdHJpZ2dlcnMuICovCisJRXZlbnRUcmlnZ2Vy SW52b2tlKHJ1bmxpc3QsICZ0cmlnZGF0YSk7CisKKwkvKiBDbGVhbnVwLiAqLworCWxpc3RfZnJl ZShydW5saXN0KTsKKworCS8qCisJICogTWFrZSBzdXJlIGFueXRoaW5nIHRoZSBldmVudCB0cmln Z2VycyBkaWQgd2lsbCBiZSB2aXNpYmxlIHRvIHRoZSBtYWluCisJICogY29tbWFuZC4KKwkgKi8K KwlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOworfQorCiAvKgogICogSW52b2tlIGVhY2ggZXZl bnQgdHJpZ2dlciBpbiBhIGxpc3Qgb2YgZXZlbnQgdHJpZ2dlcnMuCiAgKi8KQEAgLTExNDgsNyAr MTMwOCw4IEBAIHRyYWNrRHJvcHBlZE9iamVjdHNOZWVkZWQodm9pZCkKIAkgKi8KIAlyZXR1cm4g bGlzdF9sZW5ndGgoRXZlbnRDYWNoZUxvb2t1cChFVlRfU1FMRHJvcCkpID4gMCB8fAogCQlsaXN0 X2xlbmd0aChFdmVudENhY2hlTG9va3VwKEVWVF9UYWJsZVJld3JpdGUpKSA+IDAgfHwKLQkJbGlz dF9sZW5ndGgoRXZlbnRDYWNoZUxvb2t1cChFVlRfRERMQ29tbWFuZEVuZCkpID4gMDsKKwkJbGlz dF9sZW5ndGgoRXZlbnRDYWNoZUxvb2t1cChFVlRfRERMQ29tbWFuZEVuZCkpID4gMCB8fAorCQls aXN0X2xlbmd0aChFdmVudENhY2hlTG9va3VwKEVWVF9UYWJsZUluaXRXcml0ZSkpID4gMDsKIH0K IAogLyoKQEAgLTE4NjcsNiArMjAyOCw3IEBAIHBnX2V2ZW50X3RyaWdnZXJfZGRsX2NvbW1hbmRz KFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQljYXNlIFNDVF9BbHRlck9wRmFtaWx5OgogCQkJY2FzZSBT Q1RfQ3JlYXRlT3BDbGFzczoKIAkJCWNhc2UgU0NUX0FsdGVyVFNDb25maWc6CisJCQljYXNlIFND VF9DcmVhdGVUYWJsZUFzOgogCQkJCXsKIAkJCQkJY2hhcgkgICAqaWRlbnRpdHk7CiAJCQkJCWNo YXIJICAgKnR5cGU7CkBAIC0xODg0LDYgKzIwNDYsOCBAQCBwZ19ldmVudF90cmlnZ2VyX2RkbF9j b21tYW5kcyhQR19GVU5DVElPTl9BUkdTKQogCQkJCQkJYWRkciA9IGNtZC0+ZC5jcmVhdGVvcGMu YWRkcmVzczsKIAkJCQkJZWxzZSBpZiAoY21kLT50eXBlID09IFNDVF9BbHRlclRTQ29uZmlnKQog CQkJCQkJYWRkciA9IGNtZC0+ZC5hdHNjZmcuYWRkcmVzczsKKwkJCQkJZWxzZSBpZiAoY21kLT50 eXBlID09IFNDVF9BbHRlclRTQ29uZmlnKQorCQkJCQkJYWRkciA9IGNtZC0+ZC5jdGFzLmFkZHJl c3M7CiAKIAkJCQkJLyoKIAkJCQkJICogSWYgYW4gb2JqZWN0IHdhcyBkcm9wcGVkIGluIHRoZSBz YW1lIGNvbW1hbmQgd2UgbWF5IGVuZApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv cHVibGljYXRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMu YwppbmRleCAzZmQxM2M4Li5kMDAzMTRhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5k cy9wdWJsaWNhdGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlv bmNtZHMuYwpAQCAtOTkzLDYgKzk5MywxMSBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRl ICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJCUNNRFRBR19BTFRFUl9J TkRFWAogCQl9OwogCisJCUNvbW1hbmRUYWcJaW5pdF9jb21tYW5kc1tdID0geworCQkJQ01EVEFH X0NSRUFURV9UQUJMRV9BUywKKwkJCUNNRFRBR19TRUxFQ1RfSU5UTworCQl9OworCiAJCS8qIENy ZWF0ZSB0aGUgZGRsX2NvbW1hbmRfZW5kIGV2ZW50IHRyaWdnZXIgKi8KIAkJQ3JlYXRlRERMUmVw bGljYUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRfZW5kIiwgZW5kX2NvbW1hbmRzLAogCQkJCQkJ CQkJIGxlbmd0aG9mKGVuZF9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKQEAgLTEwMDQsNiAr MTAwOSwxMCBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1 YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJLyogQ3JlYXRlIHRoZSB0YWJsZV9yZXdyaXRlIGV2ZW50 IHRyaWdnZXIgKi8KIAkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigidGFibGVfcmV3cml0 ZSIsIHJld3JpdGVfY29tbWFuZHMsCiAJCQkJCQkJCQkgbGVuZ3Rob2YocmV3cml0ZV9jb21tYW5k cyksIG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBDcmVhdGUgdGhlIHRhYmxlX2luaXRfd3JpdGUg ZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJ0YWJsZV9p bml0X3dyaXRlIiwgaW5pdF9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihpbml0X2NvbW1h bmRzKSwgbXlzZWxmLCBwdWJvaWQpOwogCX0KIAogCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVz aXZlTG9jayk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYyBiL3NyYy9i YWNrZW5kL3Rjb3AvdXRpbGl0eS5jCmluZGV4IDZiMGE4NjUuLjQ5MGI3M2IgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0 eS5jCkBAIC0xNjY1LDggKzE2NjUsMTAgQEAgUHJvY2Vzc1V0aWxpdHlTbG93KFBhcnNlU3RhdGUg KnBzdGF0ZSwKIAkJCQlicmVhazsKIAogCQkJY2FzZSBUX0NyZWF0ZVRhYmxlQXNTdG10OgorCQkJ CUV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3RhcnQocGFyc2V0cmVlKTsKIAkJCQlhZGRyZXNz ID0gRXhlY0NyZWF0ZVRhYmxlQXMocHN0YXRlLCAoQ3JlYXRlVGFibGVBc1N0bXQgKikgcGFyc2V0 cmVlLAogCQkJCQkJCQkJCQlwYXJhbXMsIHF1ZXJ5RW52LCBxYyk7CisJCQkJRXZlbnRUcmlnZ2Vy VGFibGVJbml0V3JpdGVFbmQoKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBUX1JlZnJlc2hNYXRW aWV3U3RtdDoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2V2dGNhY2hlLmMg Yi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRjYWNoZS5jCmluZGV4IGY3ZjcxNjUuLjdmYjhj YjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2V2dGNhY2hlLmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYwpAQCAtMTY3LDYgKzE2Nyw4IEBAIEJ1 aWxkRXZlbnRUcmlnZ2VyQ2FjaGUodm9pZCkKIAkJCWV2ZW50ID0gRVZUX1NRTERyb3A7CiAJCWVs c2UgaWYgKHN0cmNtcChldnRldmVudCwgInRhYmxlX3Jld3JpdGUiKSA9PSAwKQogCQkJZXZlbnQg PSBFVlRfVGFibGVSZXdyaXRlOworCQllbHNlIGlmIChzdHJjbXAoZXZ0ZXZlbnQsICJ0YWJsZV9p bml0X3dyaXRlIikgPT0gMCkKKwkJCWV2ZW50ID0gRVZUX1RhYmxlSW5pdFdyaXRlOwogCQllbHNl CiAJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9j LmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggYWIyOTBkZC4uMTM2 NzM3MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0xMTkwOSw0ICsxMTkwOSw3IEBACiB7 IG9pZCA9PiAnNDY0NicsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNl IHRhYmxlIHJld3JpdGUnLAogICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxl X3Jld3JpdGUnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2VyJywKICAgcHJvYXJndHlwZXMg PT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlJyB9LAor eyBvaWQgPT4gJzQ2NDcnLCBkZXNjciA9PiAndHJpZ2dlciBmb3IgZGRsIGNvbW1hbmQgZGVwYXJz ZSB0YWJsZSBpbml0JywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9p bml0X3dyaXRlJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcicsCisgIHByb2FyZ3R5cGVz ID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZScg fSwKIF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCBi L3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAppbmRleCBmZDJlZTdmLi5hOWUw ZjcxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKKysr IGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCkBAIC01NSw2ICs1NSwxMCBA QCBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJERExDb21tYW5kRW5kKE5vZGUgKnBhcnNldHJlZSk7 CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJTUUxEcm9wKE5vZGUgKnBhcnNldHJlZSk7CiBleHRl cm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZVJld3JpdGUoTm9kZSAqcGFyc2V0cmVlLCBPaWQgdGFi bGVPaWQsIGludCByZWFzb24pOwogCitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZUluaXRX cml0ZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSk7CitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJs ZUluaXRXcml0ZShOb2RlICpwYXJzZXRyZWUsIE9iamVjdEFkZHJlc3MgYWRkcmVzcyk7CitleHRl cm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZUVuZCh2b2lkKTsKKwogZXh0ZXJuIGJv b2wgRXZlbnRUcmlnZ2VyQmVnaW5Db21wbGV0ZVF1ZXJ5KHZvaWQpOwogZXh0ZXJuIHZvaWQgRXZl bnRUcmlnZ2VyRW5kQ29tcGxldGVRdWVyeSh2b2lkKTsKIGV4dGVybiBib29sIHRyYWNrRHJvcHBl ZE9iamVjdHNOZWVkZWQodm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFy c2VfdXRpbGl0eS5oIGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaAppbmRleCBi NTMyOTRiLi4zZDI5NGEwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRp bGl0eS5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKQEAgLTI5LDcg KzI5LDggQEAgdHlwZWRlZiBlbnVtIENvbGxlY3RlZENvbW1hbmRUeXBlCiAJU0NUX0FsdGVyT3BG YW1pbHksCiAJU0NUX0FsdGVyRGVmYXVsdFByaXZpbGVnZXMsCiAJU0NUX0NyZWF0ZU9wQ2xhc3Ms Ci0JU0NUX0FsdGVyVFNDb25maWcKKwlTQ1RfQWx0ZXJUU0NvbmZpZywKKwlTQ1RfQ3JlYXRlVGFi bGVBcwogfSBDb2xsZWN0ZWRDb21tYW5kVHlwZTsKIAogLyoKQEAgLTEwMSw2ICsxMDIsMTIgQEAg dHlwZWRlZiBzdHJ1Y3QgQ29sbGVjdGVkQ29tbWFuZAogCQl7CiAJCQlPYmplY3RUeXBlCW9ianR5 cGU7CiAJCX0JCQlkZWZwcml2czsKKworCQlzdHJ1Y3QKKwkJeworCQkJT2JqZWN0QWRkcmVzcyBh ZGRyZXNzOworCQkJTm9kZQkJICpyZWFsX2NyZWF0ZTsKKwkJfQkJCWN0YXM7CiAJfQkJCWQ7CiAK IAlzdHJ1Y3QgQ29sbGVjdGVkQ29tbWFuZCAqcGFyZW50OwkvKiB3aGVuIG5lc3RlZCAqLwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxz L2V2dGNhY2hlLmgKaW5kZXggZGRiNjdhNi4uMWU2NDgzMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvdXRpbHMvZXZ0Y2FjaGUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oCkBA IC0yMiw3ICsyMiw4IEBAIHR5cGVkZWYgZW51bQogCUVWVF9ERExDb21tYW5kU3RhcnQsCiAJRVZU X0RETENvbW1hbmRFbmQsCiAJRVZUX1NRTERyb3AsCi0JRVZUX1RhYmxlUmV3cml0ZQorCUVWVF9U YWJsZVJld3JpdGUsCisJRVZUX1RhYmxlSW5pdFdyaXRlCiB9IEV2ZW50VHJpZ2dlckV2ZW50Owog CiB0eXBlZGVmIHN0cnVjdAotLSAKMi43LjIud2luZG93cy4xCgo= --_005_OS0PR01MB5716052AD854FBD52316C6BE946B9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v18-0004-Test-cases-for-DDL-replication.patch" Content-Description: v18-0004-Test-cases-for-DDL-replication.patch Content-Disposition: attachment; filename="v18-0004-Test-cases-for-DDL-replication.patch"; size=25199; creation-date="Tue, 16 Aug 2022 11:56:00 GMT"; modification-date="Tue, 16 Aug 2022 11:57:16 GMT" Content-Transfer-Encoding: base64 RnJvbSBjOGI0OWNhNGZmY2VhNmRiNGJmZTExYmRhMWYxODI3MTAyYzg0MGEwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFNhdCwgMTMgQXVnIDIwMjIgMDk6NDk6NDcgLTA0MDAKU3ViamVjdDogW1BBVENI IHYxOCA0LzRdIFRlc3QgY2FzZXMgZm9yIERETCByZXBsaWNhdGlvbgoKQXV0aG9yOiBUYWthbWlj aGkgT3N1bWkKLS0tCiBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfZGRsX3JlcGxpY2F0aW9u LnBsIHwgNDY1ICsrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA0NjUg aW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90 LzAzMl9kZGxfcmVwbGljYXRpb24ucGwKCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRp b24vdC8wMzJfZGRsX3JlcGxpY2F0aW9uLnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMy X2RkbF9yZXBsaWNhdGlvbi5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42 NmRjYjAxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX2Rk bF9yZXBsaWNhdGlvbi5wbApAQCAtMCwwICsxLDQ2NSBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjIs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisjIFJlZ3Jlc3Npb24gdGVzdHMg Zm9yIGxvZ2ljYWwgcmVwbGljYXRpb24gb2YgRERMcworIwordXNlIHN0cmljdDsKK3VzZSB3YXJu aW5nczsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRl c3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKK215ICRub2RlX3B1Ymxpc2hlciA9IFBvc3Rn cmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHVibGlzaGVyJyk7Ciskbm9kZV9wdWJsaXNoZXIt PmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOworJG5vZGVfcHVibGlzaGVyLT5z dGFydDsKKworbXkgJG5vZGVfc3Vic2NyaWJlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXIt Pm5ldygnc3Vic2NyaWJlcicpOworJG5vZGVfc3Vic2NyaWJlci0+aW5pdChhbGxvd3Nfc3RyZWFt aW5nID0+ICdsb2dpY2FsJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zdGFydDsKKworbXkgJGRkbCA9 ICJDUkVBVEUgVEFCTEUgdGVzdF9yZXAoaWQgaW50IHByaW1hcnkga2V5LCBuYW1lIHZhcmNoYXIs IHZhbHVlIGludGVnZXIpOyI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAkZGRsKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDEsICdkYXRhMScsIDEpOyIpOworJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICRkZGwpOworCitteSAkcHVibGlzaGVyX2Nvbm5zdHIg PSAkbm9kZV9wdWJsaXNoZXItPmNvbm5zdHIgLiAnIGRibmFtZT1wb3N0Z3Jlcyc7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgUFVCTElDQVRJT04gbXlw dWIgRk9SIEFMTCBUQUJMRVMgd2l0aCAocHVibGlzaCA9ICdpbnNlcnQsIHVwZGF0ZSwgZGVsZXRl LCBkZGwnKTsiKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJD UkVBVEUgU1VCU0NSSVBUSU9OIG15c3ViIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0cicg UFVCTElDQVRJT04gbXlwdWI7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7CisKKyMgTWFrZSBzdXJlIHdlIGhhdmUgZnVsbHkgc3luY2hyb25pemVkIHRoZSB0 YWJsZS4KKyMgVGhpcyBwcmV2ZW50cyBBTFRFUiBUQUJMRSBjb21tYW5kIGJlbG93IGZyb20gYmVp bmcgZXhlY3V0ZWQgZHVyaW5nIHRhYmxlIHN5bmNocm9uaXphdGlvbi4KKyRub2RlX3N1YnNjcmli ZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKyAgICJTRUxFQ1QgQ09VTlQoMSkgPSAw IEZST00gcGdfc3Vic2NyaXB0aW9uX3JlbCBzciBXSEVSRSBzci5zcnN1YnN0YXRlIE5PVCBJTiAo J3MnLCAncicpIEFORCBzci5zcnJlbGlkID0gJ3Rlc3RfcmVwJzo6cmVnY2xhc3MiCispOworCisj IFRlc3QgQUxURVIgVEFCTEUgQURECiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgQUREIGM0IGludDsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDIs ICdkYXRhMicsIDIsIDIpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworbXkgJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF9yZXAgV0hFUkUgYzQgPSAyOyIpOworaXMo JHJlc3VsdCwgcXEoMSksICdBTFRFUiB0ZXN0X3JlcCBBREQgcmVwbGljYXRlZCcpOworCisjIFRl c3QgQUxURVIgVEFCTEUgRFJPUAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIERST1AgYzQ7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiREVMRVRFIEZST00gdGVzdF9yZXAgd2hlcmUgaWQgPSAyOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCop IGZyb20gdGVzdF9yZXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIERS T1AgcmVwbGljYXRlZCcpOworCisjIFRlc3QgQUxURVIgVEFCTEUgQUxURVIgVFlQRQorJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFM VEVSIHZhbHVlIFRZUEUgdmFyY2hhciIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoMywgJ2RhdGEzJywgJzMnKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBGUk9NIHRlc3RfcmVwIFdIRVJFIHZhbHVlID0gJzMnOyIpOworaXMoJHJlc3VsdCwgcXEoMSks ICdBTFRFUiB0ZXN0X3JlcCBBTFRFUiBDT0xVTU4gVFlQRSByZXBsaWNhdGVkJyk7CisKKyMgVGVz dCBBTFRFUiBUQUJMRSBBTFRFUiBTRVQgREVGQVVMVAorIyBDaGVjayBpZiB3ZSBoYXZlIHRoZSBk ZWZhdWx0IHZhbHVlIGFmdGVyIHRoZSBkaXJlY3QgaW5zZXJ0IHRvIHN1YnNjcmliZXIgbm9kZS4K KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0 X3JlcCBBTFRFUiBDT0xVTU4gdmFsdWUgU0VUIERFRkFVTFQgJ2ZvbyciKTsKKyRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICg0LCAnZGF0YTQn KTsiKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlNFTEVDVCB2YWx1ZSBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNDsiKTsKK2lzKCRyZXN1bHQs ICdmb28nLCAnQUxURVIgdGVzdF9yZXAgQUxURVIgU0VUIERFRkFVTFQgcmVwbGljYXRlZCcpOwor CisjIFRlc3QgQUxURVIgVEFCTEUgQUxURVIgRFJPUCBERUZBVUxUCisjIENoZWNrIGlmIHdlIGRv bid0IGhhdmUgdGhlIGRlZmF1bHQgdmFsdWUgcHJldmlvdXNseSBkZWZpbmVkLgorJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFMVEVS IENPTFVNTiB2YWx1ZSBEUk9QIERFRkFVTFQ7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9y X2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNSwgJ2RhdGE1Jyk7Iik7CiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgdmFsdWUg SVMgTlVMTCBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNTsiKTsKK2lzKCRyZXN1bHQsIHEodCks ICdBTFRFUiB0ZXN0X3JlcCBBTFRFUiBEUk9QIERFRkFVTFQgcmVwbGljYXRlZCcpOworCisjIFRl c3QgQUxURVIgVEFCTEUgQUxURVIgU0VUIE5PVCBOVUxMCisjIFJlbW92ZSB0aGUgZXhpc3Rpbmcg cmVjb3JkIHRoYXQgY29udGFpbnMgbnVsbCB2YWx1ZSBmaXJzdC4KK215ICgkc3Rkb3V0LCAkc3Rk ZXJyKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiREVMRVRFIEZS T00gdGVzdF9yZXAgV0hFUkUgaWQgPSA1OyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFMVEVSIHZhbHVlIFNFVCBOT1QgTlVM TDsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2Rl X3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVF UyAoNiwgJ2RhdGE2Jyk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBz dGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJy ID1+IC9FUlJPUjogIG51bGwgdmFsdWUgaW4gY29sdW1uIFwidmFsdWVcIiBvZiByZWxhdGlvbiBc InRlc3RfcmVwXCIgdmlvbGF0ZXMgbm90LW51bGwgY29uc3RyYWludC8KKyAgb3IgZGllICJmYWls ZWQgdG8gcmVwbGljYXRlIEFMVEVSIFRBQkxFIEFMVEVSIFNFVCBOT1QgTlVMTCI7CisKKyMgVGVz dCBBTFRFUiBUQUJMRSBBTFRFUiBEUk9QIE5PVCBOVUxMCiskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgQUxURVIgdmFsdWUgRFJPUCBO T1QgTlVMTDsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsK KyMgSW5zZXJ0IHNhbWUgZGF0YSB0aGF0IGhhcyBOVUxMIHZhbHVlLiBUaGlzIGZhaWxlZCBiZWZv cmUgYnV0IG5vdyBzaG91bGQgc3VjY2VlZC4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICg2LCAnZGF0YTYnKTsiKTsK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCB2YWx1ZSBJUyBOVUxMIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA2OyIpOworaXMoJHJlc3Vs dCwgcSh0KSwgIkFMVEVSIHRlc3RfcmVwIEFMVEVSIERST1AgTk9UIE5VTEwgcmVwbGljYXRlZCIp OworCisjIFRlc3QgQUxURVIgVEFCTEUgU0VUIFVOTE9HR0VECiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAnQUxURVIgVEFCTEUgdGVzdF9yZXAgU0VUIFVOTE9HR0VEOycp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVF UyAoNywgJ2RhdGE3JywgJzcnKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNzsiKTsKK2lz KCRyZXN1bHQsIHFxKDApLCAnQUxURVIgdGVzdF9yZXAgU0VUIFVOTE9HR0VEIHJlcGxpY2F0ZWQn KTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIFNFVCBMT0dHRUQKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICdBTFRFUiBUQUJMRSB0ZXN0X3JlcCBTRVQgTE9HR0VEOycpOwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAo OCwgJ2RhdGE4JywgJzgnKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgn bXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gODsiKTsKK2lzKCRy ZXN1bHQsIHFxKDEpLCAnQUxURVIgdGVzdF9yZXAgU0VUIExPR0dFRCByZXBsaWNhdGVkJyk7CisK KyMgVGVzdCBDUkVBVEUgVEFCTEUgYW5kIERNTCBjaGFuZ2VzCiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoYSBpbnQsIGIgdmFyY2hhcik7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQo KikgZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0 LCBxcSgxKSwgJ0NSRUFURSB0bXAgaXMgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCB2YWx1ZXMgKDEsICdhJykiKTsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAg dmFsdWVzICgyLCAnYicpIik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215 c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgyKSwgJ0RNTCBD aGFuZ2VzIHRvIHRtcCBhcmUgcmVwbGljYXRlZCcpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIElO SEVSSVRTCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRB QkxFIHRtcDIgKGMzIGludCkgSU5IRVJJVFMgKHRtcCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wMiBWQUxVRVMgKDEsICdhJywgMSk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQo KikgZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcDInOyIpOworaXMoJHJlc3Vs dCwgcXEoMSksICdDUkVBVEUgVEFCTEUgSU5IRVJJVFMgaXMgcmVwbGljYXRlZCcpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50 KCopIGZyb20gdG1wMjsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0aW5nIHNvbWUgZGF0 YSB0byBpbmhlcml0ZWQgdGFibGUgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wMiIpOworCisjIFRlc3QgQ1JFQVRFIFRB QkxFIExJS0UKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUg VEFCTEUgdG1wMyAoYzMgaW50LCBMSUtFIHRtcCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wMyBWQUxVRVMgKDEsIDEsICdhJyk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikg ZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcDMnOyIpOworaXMoJHJlc3VsdCwg cXEoMSksICdDUkVBVEUgVEFCTEUgTElLRSByZXBsaWNhdGVkJyk7CiskcmVzdWx0ID0gJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0 bXAzOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdpbnNlcnQgc29tZSBkYXRhIHRvIGEgdGFibGUg ZGVmaW5lZCB3aXRoIExJS0UgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wMyIpOworCisjIFRlc3QgRFJPUCBUQUJMRQor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCop IGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwg cXEoMCksICdUQUJMRSB0bXAgaXMgZHJvcHBlZCcpOworCisjIFRlc3QgQ1JFQVRFIFVOTE9HR0VE IFRBQkxFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFVO TE9HR0VEIFRBQkxFIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHBnX3RhYmxl cyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQ1JFQVRF IFVOTE9HR0VEIFRBQkxFIGlzIHJlcGxpY2F0ZWQgY29ycmVjdGx5Jyk7CiskcmVzdWx0ID0gJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJv bSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgwKSwgJ2luc2VydGluZyBkYXRhIHRvIHVubG9nZ2Vk IHRhYmxlIGlzIG5vdCByZXBsaWNhdGVkIGNvcnJlY3RseScpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVBVEUg VEFCTEUgSUYgTk9UIEVYSVNUUworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgx KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3Vu dCgqKSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1 bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcmVwbGljYXRlZCcpOworJHJl c3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNv dW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdpbnNlcnRpbmcgZGF0YSB0 byBhIHRhYmxlIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIElGIE5PVCBF WElTVFMgKGNoZWNrIGlmIHdlIHNraXAgdG8gY3JlYXRlIGEgdGFibGUKKyMgd2hlbiB3ZSBoYXZl IHRoZSB0YWJsZSBvbiB0aGUgc3Vic2NyaWJlciBpbiBhZHZhbmNlLCBhbmQgaWYgd2Ugc3VjY2Vl ZAorIyBpbiByZXBsaWNhdGluZyBjaGFuZ2VzLikKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0 bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9y X2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBx cSgxKSwgJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRl c3QgQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgKGNoZWNrIGlmIHdlIHNraXAgdG8gY3JlYXRl IGEgdGFibGUKKyMgd2hlbiB3ZSBoYXZlIHRoZSB0YWJsZSBvbiB0aGUgcHVibGlzaGVyLCBidXQg bm90IG9uIHRoZSBzdWJzY3JpYmVyLikKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHRtcCAoaWQg aW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAn Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVB VEUgVEFCTEUgd2l0aCBjb2xsYXRlCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAobmFtZSB0ZXh0IENPTExBVEUgXCJDXCIpOyIpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxV RVMgKCdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWIn KTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNF TEVDVCBjb2xsYXRpb25fbmFtZSBGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS5jb2x1bW5zIFdIRVJF IHRhYmxlX25hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQsIHFxKEMpLCAnQ1JFQVRFIFRBQkxF IHdpdGggY29sbGF0ZSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSB3aXRo IG5hbWVkIGNvbnN0cmFpbnQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQgQ09OU1RSQUlOVCBcIm11c3QgYmUgYmlnZ2VyIHRo YW4gMTBcIiBDSEVDSyAoaWQgPiAxMCkpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9j YXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5T RVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAor CQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7 Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJ0bXAiIHZpb2xhdGVz IGNoZWNrIGNvbnN0cmFpbnQgIm11c3QgYmUgYmlnZ2VyIHRoYW4gMTAiLworICBvciBkaWUgImZh aWxlZCB0byByZXBsaWNhdGUgbmFtZWQgY29uc3RyYWludCBhdCBjcmVhdGluZyB0YWJsZSI7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7 CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgd2l0aCB2YXJpb3VzIHR5cGVzIG9mIGNvbnN0cmFpbnRz LgorIyBOT1QgTlVMTCBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50LCBuYW1lIHRleHQgTk9UIE5VTEwpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vi c2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7IiwK KwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIs CisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG51bGwg dmFsdWUgaW4gY29sdW1uICJuYW1lIiBvZiByZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBub3QtbnVs bCBjb25zdHJhaW50LworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgbm9uIG51bGwgY29u c3RyYWludCBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgTlVMTCBjb25zdHJhaW50Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQg aW50LCBuYW1lIHRleHQgTlVMTCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIG5hbWUgSVMgTlVMTCBGUk9NIHRtcDsiKTsK K2lzKCRyZXN1bHQsIHFxKHQpLCAiQ1JFQVRFIFRBQkxFIHdpdGggTlVMTCBjb25zdHJhaW50IHJl cGxpY2F0ZWQiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9Q IFRBQkxFIHRtcCIpOworCisjIENIRUNLIGNvbnN0cmFpbnQKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQsIHByb2R1Y3RfYW1l IHRleHQsIHByaWNlIGludCBDSEVDSyAocHJpY2UgPiAwKSk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0 Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnZm9vJywgLTEwMCk7IiwKKwkJCQkJ ICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJ CSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cgZm9y IHJlbGF0aW9uICJ0bXAiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRtcF9wcmljZV9jaGVj ayIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBDSEVDSyBjb25zdHJhaW50IjsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsK KworIyBERUZBVUxUCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JF QVRFIFRBQkxFIHRtcCAoaWQgaW50LCBuYW1lIHRleHQgREVGQVVMVCAnZm9vJyk7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOwor JHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNU IG5hbWUgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcShmb28pLCAiQ1JFQVRFIFRBQkxFIHdp dGggZGVmYXVsdCB2YWx1ZSByZXBsaWNhdGVkIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBVTklRVUUgY29uc3RyYWludAor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAg KGlkIGludCBVTklRVUUpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0 X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9 PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0 ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIGR1cGxpY2F0ZSBrZXkgdmFsdWUgdmlvbGF0ZXMg dW5pcXVlIGNvbnN0cmFpbnQgInRtcF9pZF9rZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBs aWNhdGUgY29uc3RyYWludCBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgUFJJTUFSWSBLRVkK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1w IChpZCBpbnQgUFJJTUFSWSBLRVksIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vi c2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2Jh cicpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwk c3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6 ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25zdHJhaW50ICJ0bXBfcGtl eSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBwcmltYXJ5IGtleSBhdCBjcmVhdGlu ZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBU QUJMRSB0bXA7Iik7CisKKyMgRVhDTFVERQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSBjaXJjbGVzIChjIGNpcmNsZSwgRVhDTFVERSBVU0lORyBn aXN0IChjIFdJVEggJiYpKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyBjaXJjbGVzIFZBTFVFUyAoJzwoMSwgMSksIDE+Jzo6Y2lyY2xlKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1 YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIGNpcmNsZXMgVkFMVUVTICgn PCgxLCAxKSwgMT4nOjpjaXJjbGUpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJ CQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOwor JHN0ZGVyciA9fiAvRVJST1I6ICBjb25mbGljdGluZyBrZXkgdmFsdWUgdmlvbGF0ZXMgZXhjbHVz aW9uIGNvbnN0cmFpbnQgImNpcmNsZXNfY19leGNsIi8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVw bGljYXRlIEVYQ0xVREUgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgY2lyY2xlcyIpOworCisjIFJFRkVSRU5DRVMK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgcHJv ZHVjdCAoaWQgaW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHByb2R1Y3QgVkFMVUVTICgxLCAn Zm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJU IElOVE8gcHJvZHVjdCBWQUxVRVMgKDIsICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgb3JkZXJzIChvcmRlcl9pZCBpbnQgUFJJ TUFSWSBLRVksIHByb2R1Y3RfaWQgaW50IFJFRkVSRU5DRVMgcHJvZHVjdCAoaWQpKSIpOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJl ci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gb3JkZXJzIFZBTFVFUyAoMSwgMTApIiwK KwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIs CisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIGluc2Vy dCBvciB1cGRhdGUgb24gdGFibGUgIm9yZGVycyIgdmlvbGF0ZXMgZm9yZWlnbiBrZXkgY29uc3Ry YWludCAib3JkZXJzX3Byb2R1Y3RfaWRfZmtleSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxp Y2F0ZSBSRUZFUkVOQ0VTIGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIG9yZGVycyIpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgcHJvZHVjdCIpOworCisjIERFRkVS UkFCTEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFC TEUgdG1wIChpZCBpbnQgUFJJTUFSWSBLRVkgREVGRVJSQUJMRSwgbmFtZSB0ZXh0KTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFM VUVTICgxLCAnZm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMiwgJ2JhcicpOyIpOworJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworIyBRdWljayBjaGVjayBvZiBkZWZlcnJhYmxl IGNsYXVzZQorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJVUERBVEUg dG1wIFNFVCBpZCA9IGlkICsgMTsiKTsKKyMgQWxzbywgZXhlY3V0ZSBhIHRlc3QgdGhhdCBzaG91 bGQgZmFpbCBmb3IgSU5JVElBTExZIElNTUVESUFURSh0aGUgZGVmYXVsdCkKKyRub2RlX3N1YnNj cmliZXItPnBzcWwoJ3Bvc3RncmVzJywgcXEoCitCRUdJTjsKK1VQREFURSB0bXAgU0VUIGlkID0g aWQgKyAxOworSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMywgJ2Zvb2JhcicpOworREVMRVRFIEZS T00gdG1wIFdIRVJFIGlkID0gMzsKK0NPTU1JVDsKKyksIG9uX2Vycm9yX3N0b3AgPT4gMCwgc3Rk ZXJyID0+IFwkc3RkZXJyLCBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6 ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25zdHJhaW50ICJ0bXBfcGtl eSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBERUZFUlJBQkxFIGF0IGNyZWF0aW5n IHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRB QkxFIHRtcDsiKTsKKworIyBOT1QgREVGRVJSQUJMRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCBQUklNQVJZIEtFWSBOT1Qg REVGRVJSQUJMRSwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnZm9vJyk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAo MiwgJ2JhcicpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1Yicp OworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiVVBEQVRFIHRtcCBTRVQgaWQg PSBpZCArIDE7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIg PT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9F UlJPUjogIGR1cGxpY2F0ZSBrZXkgdmFsdWUgdmlvbGF0ZXMgdW5pcXVlIGNvbnN0cmFpbnQgInRt cF9wa2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIE5PVCBERUZFUlJBQkxFIGF0 IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBERUZFUlJBQkxFIGFuZCBJTklUSUFMTFkgREVGRVJS RUQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUg dG1wIChpZCBpbnQgUFJJTUFSWSBLRVkgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQsIG5h bWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5T RVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDIsICdiYXInKTsiKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyMgUXVpY2sgY2hl Y2sgb2YgZGVmZXJyYWJsZSBjbGF1c2UKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiVVBEQVRFIHRtcCBTRVQgaWQgPSBpZCArIDE7Iik7CisjIEFsc28sIGV4ZWN1dGUg YSB0ZXN0IHRoYXQgc2hvdWxkIHN1Y2NlZWQgZm9yIElOSVRJQUxMWSBERUZFUlJFRAorJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorQkVHSU47CitVUERBVEUgdG1w IFNFVCBpZCA9IGlkICsgMTsKK0lOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDMsICdmb29iYXInKTsK K0RFTEVURSBGUk9NIHRtcCBXSEVSRSBpZCA9IDM7CitDT01NSVQ7CispKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBUZXN0 IENSRUFURSBUQUJMRSB3aXRoIHRhYmxlIGNvbnN0cmFpbnQKKyMgV2Ugd2lsbCBzZXQgdHdvIGNo ZWNrcyBhbmQgY29uZHVjdCB0d28gaW5zZXJ0cyB0aGF0IHNob3VsZCBmYWlsIHJlc3BlY3RpdmVs eS4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJM RSB0bXAgKHByaWNlIGludCwgZGlzY291bnRlZF9wcmljZSBpbnQsIENIRUNLIChkaXNjb3VudGVk X3ByaWNlID4gMCBBTkQgcHJpY2UgPiBkaXNjb3VudGVkX3ByaWNlKSk7Iik7Ciskbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3Fs KCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxMDAsIDApOyIsCisJCQkJCSAg IG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkg ICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciBy ZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0bXBfY2hlY2siLworICBv ciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgdGFibGUgY29uc3RyYWludCAoZmlyc3QgY29uZGl0 aW9uKSBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICg1MCwgMTAwKTsiLAorCQkJCQkgICBvbl9lcnJv cl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0 ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRpb24g InRtcCIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidG1wX2NoZWNrIi8KKyAgb3IgZGllICJm YWlsZWQgdG8gcmVwbGljYXRlIHRhYmxlIGNvbnN0cmFpbnQgKHNlY29uZCBjb25kaXRpb24pIGF0 IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBXSVRIIHN0cm9yYWdl X3BhcmFtZXRlcgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFU RSBUQUJMRSB0bXAgKGlkIGludCkgV0lUSCAoZmlsbGZhY3RvciA9IDgwKTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgx KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2Rl X3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCByZWxvcHRpb25zIEZST00gcGdf Y2xhc3MgV0hFUkUgcmVsbmFtZSA9ICd0bXAnOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4g MCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRv dXQpOworJHN0ZG91dCA9fiAve2ZpbGxmYWN0b3I9ODB9LworICBvciBkaWUgImZhaWxlZCB0byBy ZXBsaWNhdGUgc3RvcmFnZSBvcHRpb24iOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJl c3VsdCwgcXEoMSksICdDUkVBVEUgVEFCTEUgd2l0aCBzdG9yYWdlX3BhcmFtZXRlciByZXBsaWNh dGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJM RSB0bXA7Iik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgVEFCTEVTUEFDRSAoY3JlYXRpbmcgYSB0 YWJsZXNwYWNlIGlzIG5vdCByZXBsaWNhdGVkKQorIyBQcmVwYXJlIHRoZSBkaXJlY3RvcmllcyBm b3IgdGhlIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBmaXJzdC4KK215ICgkYmFzZWRpciwgJHRh Ymxlc3BhY2VfZGlyKTsKKworJGJhc2VkaXIgPSAkbm9kZV9wdWJsaXNoZXItPmJhc2VkaXI7Cisk dGFibGVzcGFjZV9kaXIgPSAiJGJhc2VkaXIvdGJsc3BjX3B1YiI7Citta2RpcigkdGFibGVzcGFj ZV9kaXIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU QUJMRVNQQUNFIG15dGJsc3BjIExPQ0FUSU9OICckdGFibGVzcGFjZV9kaXInOyIpOworJGJhc2Vk aXIgPSAkbm9kZV9zdWJzY3JpYmVyLT5iYXNlZGlyOworJHRhYmxlc3BhY2VfZGlyID0gIiRiYXNl ZGlyL3RibHNwY19zdWIiOworbWtkaXIgKCR0YWJsZXNwYWNlX2Rpcik7Ciskbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRVNQQUNFIG15dGJsc3BjIExP Q0FUSU9OICckdGFibGVzcGFjZV9kaXInOyIpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50KSBUQUJMRVNQQUNFIG15dGJs c3BjOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdD UkVBVEUgVEFCTEUgVEFCTEVTUEFDRSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgVGVzdCBDUkVBVEUg VFlQRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUWVBF IG15dHlwZSBBUyAoaWQgaW50LCBuYW1lIHRleHQsIGFnZSBpbnQpOyIpOworJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgT0YgbXl0eXBlOyIpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEs ICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxF IE9GIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFRBQkxFIHRtcCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkRST1AgVFlQRSBteXR5cGUiKTsKKworIyBUZXN0IENSRUFURSBFTlVNIFRZUEUKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVFlQRSBteWVudW10eXBl IEFTIEVOVU0gKCduZXcnLCAnb3BlbicsICdjbG9zZWQnKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChzdGF0dXMgbXllbnVtdHlwZSk7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVF UyAoJ25ldycpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1Yicp OworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VM RUNUICogZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcShuZXcpLCAnQ1JFQVRFIFRBQkxFIE9G IHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJE Uk9QIFRBQkxFIHRtcCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkRST1AgVFlQRSBteWVudW10eXBlIik7CisKKyMgVGVzdCBDUkVBVEUgUkFOR0UgVFlQRQorJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUWVBFIGZsb2F0OF9y YW5nZSBBUyBSQU5HRSAoc3VidHlwZSA9IGZsb2F0OCwgc3VidHlwZV9kaWZmID0gZmxvYXQ4bWkp OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKHZhbCBm bG9hdDhfcmFuZ2UpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg Imluc2VydCBpbnRvIHRtcCB2YWx1ZXMoZmxvYXQ4X3JhbmdlKC0xMi4zNCwgJzEuMTExMTEzZTMn KSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBm cm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKFstMTIuMzQsMTExMS4xMTNcKSksICdDUkVBVEUg VEFCTEUgT0YgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRST1AgVEFCTEUgdG1wIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiRFJPUCBUWVBFIGZsb2F0OF9yYW5nZSIpOworCisjIFRlc3QgQ1JFQVRFIEJBU0Ug REFUQSBUWVBFIGFuZCB1c2UgaXQgaW4gdGFibGUgZGVmaW5pdGlvbgorJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIgorQ1JFQVRFIFRZUEUgaW50NDI7CitDUkVBVEUgRlVO Q1RJT04gaW50NDJfaW4oY3N0cmluZykKKyAgIFJFVFVSTlMgaW50NDIKKyAgIEFTICdpbnQ0aW4n CisgICBMQU5HVUFHRSBpbnRlcm5hbCBTVFJJQ1QgSU1NVVRBQkxFOworQ1JFQVRFIEZVTkNUSU9O IGludDQyX291dChpbnQ0MikKKyAgIFJFVFVSTlMgY3N0cmluZworICAgQVMgJ2ludDRvdXQnCisg ICBMQU5HVUFHRSBpbnRlcm5hbCBTVFJJQ1QgSU1NVVRBQkxFOworQ1JFQVRFIFRZUEUgaW50NDIg KAorICAgaW50ZXJuYWxsZW5ndGggPSA0LAorICAgaW5wdXQgPSBpbnQ0Ml9pbiwKKyAgIG91dHB1 dCA9IGludDQyX291dCwKKyAgIGFsaWdubWVudCA9IGludDQsCisgICBkZWZhdWx0ID0gNDIsCisg ICBwYXNzZWRieXZhbHVlCispOworQ1JFQVRFIFRBQkxFIHRtcCAoZjEgaW50NDIpOworSU5TRVJU IElOVE8gdG1wIERFRkFVTFQgVkFMVUVTOworIik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9y X2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDQyKSwg J0NSRUFURSBUQUJMRSBPRiByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJEUk9QIFRZUEUgaW50NDIgY2FzY2FkZSIpOworCitwYXNzICJEREwg cmVwbGljYXRpb24gdGVzdHMgcGFzc2VkOiI7CisKKyRub2RlX3N1YnNjcmliZXItPnN0b3A7Cisk bm9kZV9wdWJsaXNoZXItPnN0b3A7CisKK2RvbmVfdGVzdGluZygpOwotLSAKMi43LjIud2luZG93 cy4xCgo= --_005_OS0PR01MB5716052AD854FBD52316C6BE946B9OS0PR01MB5716jpnp_--