Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qLeq5-000MsL-O1 for pgsql-hackers@arkaria.postgresql.org; Tue, 18 Jul 2023 07:09:42 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1qLeq3-005EeV-PQ for pgsql-hackers@arkaria.postgresql.org; Tue, 18 Jul 2023 07:09:39 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qLeq3-005EeN-1z for pgsql-hackers@lists.postgresql.org; Tue, 18 Jul 2023 07:09:39 +0000 Received: from esa8.fujitsucc.c3s2.iphmx.com ([68.232.159.88]) by magus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qLepy-0005Jq-QQ for pgsql-hackers@lists.postgresql.org; Tue, 18 Jul 2023 07:09:38 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=fujitsu.com; i=@fujitsu.com; q=dns/txt; s=fj1; t=1689664175; x=1721200175; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=1NXpu3Xidb0TGAJy4j6qbDb29QaWy4h0hNXVqg9txr0=; b=WYvlTXWFwypP70pMVBdwQBOFyIRxG9k0B5aHVuPD2M9wokIpFWtLyf4c J7TAy0W/+kP+eaeONRMDaPZbyqkgmMYqc8bv82L1U0ghqLaqTfek+Dt7O cbpNLbGpzXEGbqoHusjqRkTbofJR7qeN+c02WwZh28vZXrGhdxZX4maTd l/HTTBzXcRyscPmb4Gm2h96R3+J+nF2xTu5+DQ/kqibdEPoBdRa5mdrMB IKlaTgZ4rxPPi5ei3P2CWRLD9m8sv4wvKKjEwMFdyP3RoGG7t7gci12Tm FGIyZc9ohuWUfsktioNHwpWyKGfGyCOuA2x/SikROtlOgA/s8ll1svAYv Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10774"; a="89971769" X-IronPort-AV: E=Sophos;i="6.01,213,1684767600"; d="scan'208,223";a="89971769" Received: from mail-os0jpn01lp2105.outbound.protection.outlook.com (HELO JPN01-OS0-obe.outbound.protection.outlook.com) ([104.47.23.105]) by ob1.fujitsucc.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Jul 2023 16:09:29 +0900 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SU7ukP3gFAoh6LG9QqeXIHTQDEo+Pj0fBgyN7uZBpkTbpGdDdO0obMZO9kS5JFN4BTWwYSveSvT8d3fTAqWJGdH559ntJI/i2qnQ6uy9Id9MwSRRYFjhPtm+oRU5kjBiy3sMtw+tdcKwSHn/0m6otHh0AO+8sPTc+BnplitohDvW13b5cf94hJqh+J5RzMAy4oDKKCNF/SWMZGpNkMa8EKpFdo0Lx/OSVBLneODYZN2Bqk7hUPtQ7bXikBgSxr8uZiPdCjLI9NQ5BTjCI2WM8D022ul8rt2aQOQ5Hd2RKkogcOdy5f2eFD2NfDKAEm9gbVoQacSeq8DcrTqeQzLo8w== 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=mzS67XEyqmQmyhSNusT3gOoJA/UOoJRY0zP6rt+eIBo=; b=UFK4bTKSocsk9MCwGs1ytjXYPX47B0ooykLKzKvUM3J/Vx9iJ5RV7cHOto5YdQWICXfpSKznXEVospFnC8dh4paDobssII1RaTQCtUnrAzEEnU6W2ZtcwcE8USDX4hJlRl75hvFXj/gQ2UbeA1h8S3wXGeaXd3NcUxlWJPpAIzzczrZT3Yys4SwUw3qM6x0bMv0FGLBXcvhiTM9HCdlDuSf7j7khGxmGvNKlBtHTxTJ5stM+fllpcoPYUUSDS4czAkT6ktvbSe5CPiLSnXXtqSKFcKUDF0WjYYaOhSXAWBqa2vaWbwMv5FT74oxWRQc0uzB8akgl9+t5epQFtB6BIQ== 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 TYCPR01MB8471.jpnprd01.prod.outlook.com (2603:1096:400:15d::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6588.33; Tue, 18 Jul 2023 07:09:24 +0000 Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::333:9ed5:3a44:40c9]) by OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::333:9ed5:3a44:40c9%7]) with mapi id 15.20.6588.031; Tue, 18 Jul 2023 07:09:24 +0000 From: "Zhijie Hou (Fujitsu)" To: Masahiko Sawada CC: shveta malik , Amit Kapila , Michael Paquier , "Wei Wang (Fujitsu)" , "Yu Shi (Fujitsu)" , vignesh C , Ajin Cherian , Runqi Tian , Peter Smith , Tom Lane , li jie , Dilip Kumar , Alvaro Herrera , Japin Li , rajesh singarapu , PostgreSQL Hackers , Zheng Li Subject: RE: Support logical replication of DDLs Thread-Topic: Support logical replication of DDLs Thread-Index: AQHZa550vJuN3I2iPEORe4eokT+s7a8uzU1ggATPdwCAAFiUAIAAPa2AgAcrybCABVaUgIAFt/uAgAnrLACAAAkQAIABkB4AgARuagCACBiUgIAAEc4AgAeCpACACwWJAIADXfcAgAFwm4CABmgbgIABqnmAgALCugCAAHQ1gIAFnY8AgAH3/gCAAFveAIAAkHMAgAP3lYCABKbugIAEXEwAgAzD/4CAEYiUAIAKpgMAgAAYkZA= Date: Tue, 18 Jul 2023 07:09:23 +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?NTBfQWN0aW9uSWQ9Mjg3YzYyYjItMTNhMi00MWE1LTg3MmMtNDc5N2U1YzI2?= =?utf-8?B?NDM2O01TSVBfTGFiZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRm?= =?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?ZWNlMDUwX1NldERhdGU9MjAyMy0wNy0xOFQwNjo1NjowM1o7TVNJUF9MYWJl?= =?utf-8?B?bF9hNzI5NWNjMS1kMjc5LTQyYWMtYWI0ZC0zYjBmNGZlY2UwNTBfU2l0ZUlk?= =?utf-8?Q?=3Da19f121d-81e1-4858-a9d8-736e267fd4c7;?= authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=fujitsu.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: OS0PR01MB5716:EE_|TYCPR01MB8471:EE_ x-ms-office365-filtering-correlation-id: f98154a9-6f56-4183-a7b7-08db875dea8a x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: S64CzPm2LjVWa2jqNfg3oiH2iZUfh2cD9vho7Ud79HSFcp/bVy6lduesoOdg8Cq42MSaJMyLoUS10pX+3EOBblWpPzt8tn7XPEK2Upg6DbULos+ZyTkzHxgC6nkkTNHDKTJ+mbZySEDiZkEfCjH34W1UvemnVFYTQqYfPWommxJ77RWKKMQVRNT48tzr8kePwvKpv1IOOFfsjAEElNO6CcTxwRtJLhGM8xCzP/tpkw9AwLLsCjuIxOO/LRay1bZ+ATy2anlF68qxVSwr33oPUnxNqsj2+XKL4J0dAeUkODNsdlg/SaSf/Z0F7zKos83EE3AxXbY4A1KR0BqM9auc7sSwu+TZoCAm8IPjNq7r+EHS5JpOo0uYAMPTa90TTqsZeUbfcdWc/JtW2kvrM948BGYDM/3NhFZwAjsF9Oija0ZABZ52x7PJb+7Jf3iv/xXOStjHQ6HSP+T84Y484ZpfoWUkWQ3uwrVzs1PHvQFKPqxHT9FsGIjCjbXWT03FaGMOCi7m5ASrpqHZdrnh9RsHSO8l6hwqIRl6gEvj3NN43uIeFeMx3W66zDgFiMjql1rcx7a1ElRwX+k0ajvvNLYrskOc72vidYKwvtLx2AN/eVLh4Q7zPmYg6L1apiEZhm1lAfD6JvFfVGITKdD1r9a+s05p+d9TvCxUYABHTJ+Au98= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:OS0PR01MB5716.jpnprd01.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(346002)(136003)(39860400002)(376002)(396003)(366004)(451199021)(1590799018)(38070700005)(38100700002)(8936002)(8676002)(85182001)(33656002)(83380400001)(2906002)(52536014)(6506007)(26005)(5660300002)(55016003)(53546011)(99936003)(82960400001)(122000001)(186003)(64756008)(7416002)(86362001)(66946007)(76116006)(6916009)(4326008)(66556008)(54906003)(66446008)(66476007)(7696005)(71200400001)(1580799015)(41300700001)(478600001)(316002)(9686003)(21314003);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?WElpY0J5WkdZeG9mZ1VCOWJSb1pLb2dkRzBTZUNDbGxTNFBWTWl1WE5ObXVz?= =?utf-8?B?bUp5SExJZE5IU09xclRDOGVsYjFRdDFFNFZzYThtWlZtZTNoM3FYamozbS8v?= =?utf-8?B?WVhDNWxJV3U5TFZKTUhPbUczYkNsRERZdlloQjQ4N2NXa1NNcDJYRnZHMnZh?= =?utf-8?B?d1VEb04wSmdiVzllUFUwdlUxZTgxNnFuS3UyNjduZGRFai8rSW9Ja29hVEg5?= =?utf-8?B?VVJLWmdJak4xZTA5dVg5SWc5azFacGwwbGVMbkVyU0JqYjlZTWo1THYxejUv?= =?utf-8?B?d3ZVaml6YzVLOXBSL1FZblNpaDJGc3ppRVBvMVBtWkpNSHU5M2YzOTNqKzdu?= =?utf-8?B?eGM2OFhWR1J4UEF4SmlPaVZoNklwcGNRakxNVWhtdjh4ZmFpOVVlYUdqdXNq?= =?utf-8?B?V255aFJDWmVpMUZlSmdNV3pXUHVMOHgwRTBPYmxUYnR0aTFzU2tNZWxlQ08r?= =?utf-8?B?ZGFTb3N2U3RLNmZDRFc0MTVwOXR0MU9NN0pValNmTkZNek5kaEZCcjJPdVhT?= =?utf-8?B?bmh5S3dlRGx3VTlLcGdncEVQYU5KcmpPeFRKKzBPU3N5bGYwT21vZUxFcWpQ?= =?utf-8?B?SWEzN0NOMWlBQTgvTlhaTnQzSVhwSzZGVXQ2U29rU1V3OVJsOWZHZS96Ym83?= =?utf-8?B?bjl6dGx4TnV3a0lhWkRiRDBBN2xPdVNhbzE1YWNhcGlKcTNGNi9LWHhubnlt?= =?utf-8?B?SVBRMzVMbHFmM1d2Mm1qcFRVZHgwalY2Z2p0RlVyMStnK2Urb3ZsOVdaa0ty?= =?utf-8?B?bHJMSkcrUFIvMERiTTlKMEtGcVVkcXh0Vm5NYjZQSkQ4a1NTeFM5akt3Q0pv?= =?utf-8?B?MU5hSGNuOVNaS0ZjYkZNN0xxZlRJQXZKQnB6VFY3Q2JDbnJPRjBxQjZ0SHlS?= =?utf-8?B?S0ZJSXhwcE9YTkJBcEpxZGNYTXBmcmpZMnRuMDBySUtSRnNLYkRsUi9DdnZH?= =?utf-8?B?V3UwcHBjREpQNklaWmFhNkUvVzZTZFdWczMxMVhPRG1RaEtMU2VqNWQrM0R5?= =?utf-8?B?YmtocHFHOGl5T1lBQ25SUzdFTllBQzY2WTJaYXlvc25hWnc5R2dQM3B0dTBh?= =?utf-8?B?dVFCMXY5YzdqcmlwaWVhUHMwVSszSjhKdGRZNGdycHg3dU0zU0VRNkI1bURa?= =?utf-8?B?Yk9maDhIcVIrSnhOelRuWFNaK0xoT0xZbGFHTkI2VE9OLzBGdWR3RTk4S2VU?= =?utf-8?B?NW90ZkcrQ0pYcUZsN0tIdE51QzVIdjErRWc2d0JjR0lOdDdVTm1aYXBCekNk?= =?utf-8?B?OTkvemZ5V2tTTEpSLzlaYUg4OUpRU3cwSEsvQ05taE1mcC9EckREcG00cFZV?= =?utf-8?B?YlN2YmcweUxIdThGdXFxTEpyQ3phNmNIZlJma1luRkQvdXhYUUpKWVprTGwr?= =?utf-8?B?UjlDMnEyY0QxbW8xdWVkRlNkL1pZNmRkYnBHMWRyUGVwOHlyMklhUGdLVHor?= =?utf-8?B?TlpON3Q0b1U5Q0U5R1g0aDhyM1NqbW53Z3N3VGxLd1dwYk1xcjhmZmVmd1M2?= =?utf-8?B?M1I4eUs2SGMvV3dMMjhVWVNMd1hwb0sxSHgzTEdDc1hRUktDMHM2MTM5N2I2?= =?utf-8?B?MTJvYlpBZFhXYWd3cEtwT05YNk5ncFZCTU9zRmREdDd4a0lrSUlwQzVkSGZY?= =?utf-8?B?bmVvVjZNMlU2VS9QTlV0UzFSbDYyQXNzSUpLMm12M1lCckxNWUhUWkRIOEtN?= =?utf-8?B?RjYrV0JxTWhRUnU2UFVsU1dvNHV0aXhDL0hTSkVNTEw2YVBwWCtMc1ZCL2lP?= =?utf-8?B?OEIzVkgwUE83SVY4YVV2S1lpaXdtS0kyWWx6ZmZCVmo3WTVTRTYvMnJHTUcx?= =?utf-8?B?eDJNeStZbWNTa3o5NkJVNnlRWk1RZUpTSVFNdzdSZlJpc1I2NU5iaXhMTllU?= =?utf-8?B?RTdpNCtEaUlhcDE2cUF4QkF6a0EzbHJ5SmlkTDZqek95QjN1M1g2Um9aRWN5?= =?utf-8?B?Z0JLQVZDU1NHYitMaSt1WUMrTVlVSWloL1duT2k3NXlJN3RQV2YwRTgwWHNW?= =?utf-8?B?OWd0cDF6SldhWjFQZFlMVExoZHFlTkVnbTczWXQ3VWNXSC9WV0dHNFVHbmZI?= =?utf-8?B?VHg4OUMyeFEyT0srcXdYbU1yYjFwVmhPQmlSVzJjczhsZXZER294TzJCOHJ5?= =?utf-8?Q?bH8hRA4za0afWgMyAezgJerqJ?= Content-Type: multipart/mixed; boundary="_005_OS0PR01MB57163E6487EFF7378CB8E17C9438AOS0PR01MB5716jpnp_" MIME-Version: 1.0 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: =?utf-8?B?YmVnTHZaejU4YVBNY0l4R01sYkFzUExrZnVabVJ5YnN5QjNKekUraWU5Qi83?= =?utf-8?B?K0Rjc0RBU0c5TXZMTzR3WnhSdDNEaWs1aVJPOEdac1VrNmNjK2Y0R0p1aFJq?= =?utf-8?B?NzFZWXlJVlY4SEVJUjNjWW8zWC9tS1FXcHI0d0hvNUFZTjZSUnVidU9PNjBo?= =?utf-8?B?U25pL1AyZVFtVWNQMFR4cDRQVG9RRFFreWcvT0ZYNnZjc2Rrc2l4TEtrbmNz?= =?utf-8?B?V1RqUm9WSEVXYmt0aWY4UHJMT2JnTVZMNUo2TTFyRGF3aVBqajRCV1kzNXNB?= =?utf-8?B?dnllcGU2NjFrcTNWQm5GZHI1MEd0Nm9hV1JOQnZuamN0TDhZeCtXb280U1lG?= =?utf-8?B?OTRIL0JQTFFtL24yUUZsVFJBY0p5clVtWTMxSU5MU3JLcXRWTi9sZ0c4S3d2?= =?utf-8?B?ZzhDeFRxcXJBZlJHaTlKZUtmcVVWUWhhbFVhbWxpZ1BzTWlyRlNHRXdOVHRF?= =?utf-8?B?NVVVTmRFcVBrb3lIME1zcGZ0QTNDNjRtYWsxdnhkaG92L2prYWJLcTVrMkZM?= =?utf-8?B?ZDRMS2tNWFErMmo0M2RINzhVajBXNEp0MEp1d0V2dTZWOVNIcnRaUXgvWlNo?= =?utf-8?B?MDJqZE1rN0hkRVhVb0NrNEovSHFaZG1Ra0ZwcHgydmI2c2FKTXc1Vk9TcFN1?= =?utf-8?B?d3FMYjFCMzl1dENUekxTRkZuYnVQUEx0bEU4ODZSMm9zTnJUdFBjckkya3g0?= =?utf-8?B?U2ZGRHBtMnhCRnFZbjU2N2hGamsxK2h2eGtjWDJNd1Z0RUxnKzBTdzYwSjlt?= =?utf-8?B?cGNwRnFMV0YySGRoVFpFZnJQZC8vNUtqTmZKNUk5QmxFTnNETVM5OWg2OEQ4?= =?utf-8?B?V3UyUTF5VGU4aE5YaENtaFhDNGRKYzlsUnJMRXMwclhlQXlIa1VJWm9DK3U3?= =?utf-8?B?OEsvLzlsNFNiMlJFQXBkaEZGdFIydzFxeFJzU0YzNEYybWdlWTY1N0Y1Rmdp?= =?utf-8?B?Y1UwUGpHeXBJUm13NXZTYkZ0SnN6WElhNnI1ZkhPTHA4MnR4T2lrZmhJWHZj?= =?utf-8?B?QldiWlNReXhsWVlpalhVMW1nOVZqcnlGOXdKd2NNRC9wZUk0Zm9zQzFIei8z?= =?utf-8?B?YTBUZUJhY08wbnRFS3dqbUMrNzVFWEM3b1Q3b2xuN1FoUHprM1pyR1luUzU1?= =?utf-8?B?OTNLRTRlMDQ1eHNQRENoVys5UndyWEdSckFXWkZ3MlNZd0M4Q3R0Y2JqUzhz?= =?utf-8?B?MlpHNjVlVXZpbmZtVncrakR1VVZlcEpyaC9DWnMrc2RCUEp4QmRySVgzNDNw?= =?utf-8?B?bzFTZk92OVA2OGdUaGVneC91Q2R1clVpUmsvSkRtRkRCaHo4UT09?= 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: f98154a9-6f56-4183-a7b7-08db875dea8a X-MS-Exchange-CrossTenant-originalarrivaltime: 18 Jul 2023 07:09:23.9459 (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: Qqhd0nqTJD5HPA5G590RTYjVzUKI49quyKodps9pBMhm0Z2TWAKACOJuyWi1XhGwIsz9hhqr/f4V9rSlJjnEdg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCPR01MB8471 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_005_OS0PR01MB57163E6487EFF7378CB8E17C9438AOS0PR01MB5716jpnp_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T24gVHVlc2RheSwgSnVseSAxOCwgMjAyMyAxOjI4IFBNIE1hc2FoaWtvIFNhd2FkYSA8c2F3YWRh Lm1zaGtAZ21haWwuY29tPiB3cm90ZToNCj4gDQo+IE9uIFR1ZSwgSnVsIDExLCAyMDIzIGF0IDg6 MDHigK9QTSBaaGlqaWUgSG91IChGdWppdHN1KSA8aG91emouZm5zdEBmdWppdHN1LmNvbT4NCj4g d3JvdGU6DQo+ID4NCj4gPiBIaSwNCj4gPg0KPiA+IFdlIGhhdmUgYmVlbiByZXNlYXJjaGluZyBo b3cgdG8gY3JlYXRlIGEgdGVzdCB0aGF0IGRldGVjdHMgZmFpbHVyZXMNCj4gPiByZXN1bHRpbmcg ZnJvbSBmdXR1cmUgc3ludGF4IGNoYW5nZXMsIHdoZXJlIHRoZSBkZXBhcnNlciBmYWlscyB0byB1 cGRhdGUNCj4gcHJvcGVybHkuDQo+ID4NCj4gPiBUaGUgYmFzaWMgaWRlYSBjb21lcyBmcm9tIHdo YXQgUm9iZXJ0IEhhYXMgc3VnZ2VzdGVkIGluIFsxXTogd2hlbg0KPiA+IHJ1bm5pbmcgdGhlIHJl Z3Jlc3Npb24gdGVzdCh0ZXN0cyBpbiBwYXJhbGxlbF9zY2hlZHVsZSksIHdlIHJlcGxhY2UNCj4g PiB0aGUgZXhlY3V0aW5nIGRkbCBzdGF0ZW1lbnQgd2l0aCB0aGUgaXRzIGRlcGFyc2VkIHZlcnNp b24gYW5kIGV4ZWN1dGUNCj4gPiB0aGUgZGVwYXJzZWQgc3RhdGVtZW50LCBzbyB0aGF0IHdlIGNh biBydW4gYWxsIHRoZSByZWdyZXNzaW9uIHdpdGggdGhlDQo+ID4gZGVwYXJzZWQgc3RhdGVtZW50 IGFuZCBjYW4gZXhwZWN0IHRoZSBvdXRwdXQgdG8gYmUgdGhlIHNhbWUgYXMgdGhlDQo+ID4gZXhp c3RpbmcgZXhwZWN0ZWQvKi5vdXQuIEFzIGRldmVsb3BlcnMgdHlwaWNhbGx5IGFkZCBuZXcgcmVn cmVzc2lvbg0KPiA+IHRlc3RzIHRvIHRlc3QgbmV3IHN5bnRheCwgc28gd2UgZXhwZWN0IHRoaXMg dGVzdCBjYW4gYXV0b21hdGljYWxseSBpZGVudGlmeQ0KPiBtb3N0IG9mIHRoZSBuZXcgc3ludGF4 IGNoYW5nZXMuDQo+ID4NCj4gPiBPbmUgdGhpbmcgdG8gbm90ZSBpcyB0aGF0IHdoZW4gZW50ZXJp bmcgdGhlIGV2ZW50IHRyaWdnZXIod2hlcmUgdGhlDQo+ID4gZGVwYXJzaW5nIGhhcHBlbiksIHRo ZSBkZGwgaGF2ZSBhbHJlYWR5IGJlZW4gZXhlY3V0ZWQuIFNvIHdlIG5lZWQgdG8NCj4gPiBnZXQg dGhlIGRlcGFyc2VkIHN0YXRlbWVudCBiZWZvcmUgdGhlIGV4ZWN1dGlvbiBhbmQgcmVwbGFjZSB0 aGUNCj4gPiBjdXJyZW50IHN0YXRlbWVudCB3aXRoIGl0LiBUbyBhY2hpZXZlIHRoaXMsIHRoZSBj dXJyZW50IGFwcHJvYWNoIGlzIHRvDQo+ID4gY3JlYXRlIGFub3RoZXIgZGF0YWJhc2Ugd2l0aCBk ZXBhcnNlciB0cmlnZ2VyIGFuZCBpbiB0aGUNCj4gPiBQcm9jZXNzVXRpbGl0eSBob29rKGUuZy4g dGRlcGFyc2VyX1Byb2Nlc3NVdGlsaXR5IGluIHRoZQ0KPiA+IHBhdGNoKSB3ZSByZWRpcmVjdCB0 aGUgbG9jYWwgc3RhdGVtZW50IHRvIHRoYXQgcmVtb3RlIGRhdGFiYXNlLCB0aGVuDQo+ID4gdGhl IHN0YXRtZW50IHdpbGwgYmUgZGVwYXJzZWQgYW5kIHN0b3JlZCBzb21ld2hlcmUsIHdlIGNhbiBx dWVyeSB0aGUNCj4gPiByZW1vdGUgZGF0YWJhc2UgdG8gZ2V0IHRoZSBkZXBhcnNlZCBzdGF0ZW1l bnQgYW5kIHVzZSBpdCB0byByZXBsYWNlDQo+ID4gdGhlIG9yaWdpbmFsIHN0YXRtZW50Lg0KPiA+ DQo+ID4gVGhlIHByb2Nlc3MgbG9va3MgbGlrZToNCj4gPiAxKSBjcmVhdGUgYW5vdGhlciBkYXRh YmFzZSBhbmQgZGVwYXJzZXIgZXZlbnQgdHJpZ2dlciBpbiBpdCBiZWZvcmUgcnVubmluZw0KPiB0 aGUgcmVncmVzc2lvbiB0ZXN0Lg0KPiA+IDIpIHJ1biB0aGUgcmVncmVzc2lvbiB0ZXN0ICh0aGUg c3RhdGVtZW50IHdpbGwgYmUgcmVkaXJlY3QgdG8gdGhlDQo+ID4gcmVtb3RlIGRhdGFiYXNlIGFu ZCBnZXQgdGhlIGRlcGFyc2VkIHN0YXRlbWVudCkNCj4gPiAzKSBjb21wYXJlIHRoZSBvdXRwdXQg ZmlsZSB3aXRoIHRoZSBleHBlY3RlZCBvbmVzLg0KPiA+DQo+ID4gQXR0YWNoIHRoZSBQT0MgcGF0 Y2goMDAwNCkgZm9yIHRoaXMgYXBwcm9hY2guIE5vdGUgdGhhdCwgdGhlIG5ldyB0ZXN0DQo+ID4g bW9kdWxlIG9ubHkgdGVzdCB0ZXN0X3NldHVwLnNxbCwgY3JlYXRlX2luZGV4LnNxbCwgY3JlYXRl X3RhYmxlLnNxbA0KPiA+IGFuZCBhbHRlcl90YWJsZS5zcWwgYXMgd2Ugb25seSBzdXBwb3J0IGRl cGFyc2luZyBUQUJMRSByZWxhdGVkIGNvbW1hbmQNCj4gPiBmb3Igbm93LiBBbmQgdGhlIGN1cnJl bnQgdGVzdCBjYW5ub3QgcGFzcyBiZWNhdXNlIG9mIHNvbWUgYnVncyBpbiBkZXBhcnNlciwNCj4g d2Ugd2lsbCBmaXggdGhlc2UgYnVncyBzb29uLg0KPiA+DQo+ID4NCj4gPiBUTyBJTVBST1ZFOg0K PiA+DQo+ID4gMS4gVGhlIGN1cnJlbnQgYXBwcm9hY2ggbmVlZHMgdG8gaGFuZGxlIHRoZSBFUlJP UnMsIFdBUk5JTkdzLCBhbmQNCj4gPiBOT1RJQ0VzIGZyb20gdGhlIHJlbW90ZSBkYXRhYmFzZS4g Q3VycmVudGx5IGl0IHdpbGwgZGlyZWN0bHkgcmV0aHJvdw0KPiA+IGFueSBFUlJPUnMgZW5jb3Vu dGVyZWQgaW4gdGhlIHJlbW90ZSBkYXRhYmFzZS4gSG93ZXZlciwgZm9yIFdBUk5JTkdzDQo+ID4g YW5kIE5PVElDRXMsIHdlIHdpbGwgb25seSByZXRocm93IHRoZW0gYWxvbmcgd2l0aCB0aGUgRVJS T1JzLiBUaGlzIGlzDQo+ID4gZG9uZSB0byBwcmV2ZW50IGR1cGxpY2F0ZSBtZXNzYWdlcyBpbiB0 aGUgb3V0cHV0IGZpbGUgZHVyaW5nIGxvY2FsDQo+ID4gc3RhdGVtZW50IGV4ZWN1dGlvbiwgd2hp Y2ggd291bGQgYmUgaW5jb25zaXN0ZW50IHdpdGggdGhlIGV4aXN0aW5nDQo+ID4gZXhwZWN0ZWQg b3V0cHV0LiBOb3RlIHRoYXQgdGhpcyBhcHByb2FjaCBtYXkgcG90ZW50aWFsbHkgbWlzcyBzb21l DQo+ID4gYnVncywgYXMgdGhlcmUgY291bGQgYmUgYWRkaXRpb25hbCBXQVJOSU5HcyBvciBOT1RJ Q0VzIGNhdXNlZCBieSB0aGUNCj4gZGVwYXJzZXIgaW4gdGhlIHJlbW90ZSBkYXRhYmFzZS4NCj4g Pg0KPiA+IDIuIFRoZSB2YXJpYWJsZSByZWZlcmVuY2UgYW5kIGFzc2lnbm1lbnQgKHh4eCAvZ3Nl dCBhbmQgc2VsZWN0DQo+ID4gOnZhcl9uYW1lKSB3aWxsIG5vdCBiZSBzZW50IHRvIHRoZSBzZXJ2 ZXIob25seSB0aGUgcXVhbGlmaWVkIHZhbHVlDQo+ID4gd2lsbCBiZSBzZW50KSwgYnV0IGl0J3Mg cG9zc2libGUgdGhlIHZhcmlhYmxlIGluIGFub3RoZXIgc2Vzc2lvbg0KPiA+IHNob3VsZCBiZSBz ZXQgdG8gYSBkaWZmZXJlbnQgdmFsdWUsIHNvIHRoaXMgY2FuIGNhdXNlIGluY29uc2lzdGVudCBv dXRwdXQuDQo+ID4NCj4gPiAzIC5DUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIHdpbGwgY3JlYXRl IGFuIGludmFsaWQgaW5kZXggaW50ZXJuYWxseQ0KPiA+IGV2ZW4gaWYgaXQgcmVwb3J0cyBhbiBF UlJPUiBsYXRlci4gQnV0IHNpbmNlIHdlIHdpbGwgZGlyZWN0bHkgcmV0aHJvdw0KPiA+IHRoZSBy ZW1vdGUgRVJST1IgaW4gdGhlIG1haW4gZGF0YWJhc2UsIHdlIHdvbid0IGV4ZWN1dGUgdGhlICJD UkVBVEUNCj4gPiBJTkRFWCBDT05DVVJSRU5UTFkiIGluIHRoZSBtYWluIGRhdGFiYXNlLiBUaGlz IG1lYW5zIHRoYXQgd2UgY2Fubm90IHNlZQ0KPiB0aGUgaW52YWxpZCBpbmRleCBpbiB0aGUgbWFp biBkYXRhYmFzZS4NCj4gPg0KPiA+IFRvIGltcHJvdmUgdGhlIGFib3ZlIHBvaW50cywgYW5vdGhl ciB2YXJpZXR5IGlzOiBydW4gdGhlIHJlZ3Jlc3Npb24gdGVzdCB0d2ljZS4NCj4gPiBUaGUgZmly c3QgcnVuIGlzIHNvbGVseSBpbnRlbmRlZCB0byBjb2xsZWN0IGFsbCB0aGUgZGVwYXJzZWQNCj4g PiBzdGF0ZW1lbnRzLiBXZSBjYW4gZHVtcCB0aGVzZSBzdGF0ZW1lbnRzIGZyb20gdGhlIGRhdGFi YXNlIGFuZCB0aGVuDQo+ID4gcmVsb2FkIHRoZW0gaW4gdGhlIHNlY29uZCByZWdyZXNzaW9uIHJ1 bi4gVGhpcyBhbGxvd3MgdXMgdG8gdXRpbGl6ZQ0KPiA+IHRoZSBkZXBhcnNlZCBzdGF0ZW1lbnRz IHRvIHJlcGxhY2UgdGhlIGxvY2FsIHN0YXRlbWVudHMgaW4gdGhlIHNlY29uZA0KPiA+IHJlZ3Jl c3Npb24gcnVuLiBUaGlzIGFwcHJvYWNoIGRvZXMgbm90IG5lZWQgdG8gaGFuZGxlIGFueSByZW1v dGUNCj4gPiBtZXNzYWdlcyBhbmQgY2xpZW50IHZhcmlhYmxlIHN0dWZmIGR1cmluZyBleGVjdXRp b24sIGFsdGhvdWdoIGl0IGNvdWxkIHRha2UNCj4gbW9yZSB0aW1lIHRvIGZpbnNoIHRoZSB0ZXN0 Lg0KPiA+DQo+IA0KPiBJJ3ZlIGNvbnNpZGVyZWQgc29tZSBhbHRlcm5hdGl2ZSBhcHByb2FjaGVz IGJ1dCBJIHByZWZlciB0aGUgc2Vjb25kIGFwcHJvYWNoLg0KPiBBIGxvbmcgdGVzdCB0aW1lIGNv dWxkIG5vdCBiZSBhIGJpZyBwcm9ibGVtIHVubGVzcyB3ZSBydW4gaXQgYnkgZGVmYXVsdC4gV2Ug Y2FuDQo+IHByZXBhcmUgYSBidWlsZGZhcm0gYW5pbWFsIHRoYXQgaXMgY29uZmlndXJlZCB0byBy dW4gdGhlIERETCBkZXBhcnNlIHRlc3RzLg0KDQpUaGFua3MgZm9yIHRoZSBhbmFseXNpcy4NCg0K SGVyZSBpcyB0aGUgUE9DIHBhdGNoKDAwMDQpIGZvciB0aGUgc2Vjb25kIGFwcHJvYWNoLCBJbiB0 aGUgdGVzdCBkZXBhcnNlciBtb2R1bGUNCmZvbGRlciwgIk1ha2UgY2hlY2siIHdpbGwgcnVuIHdo b2xlIHJlZ3Jlc3Npb24gdGVzdCB1c2luZyB0aGUgbmV3IHN0cmF0ZWd5KHJlcGxhY2UNCmRkbCBz dGF0ZW1lbnQgd2l0aCBkZXBhcnNlZCBvbmUpLiBUaGUgdGVzdCBoYXNuJ3Qgc3VwcG9ydCBtZXNv biBtb2RlIHlldCwgd2lsbA0KYWRkIGl0IGxhdGVyLiBTb21lIHRlc3RzIGFyZSBmYWlsaW5nIGJl Y2F1c2Ugb2YgYnVncyBpbiBkZXBhcnNlciwgd2Ugd2lsbCBmaXggdGhlbS4NCg0KSSBjaGVja2Vk IHRoZSB0ZXN0aW5nIHRpbWUgb2YgcnVubmluZyB0ZXN0X3NldHVwLnNxbCwgY3JlYXRlX2luZGV4 LnNxbCwNCmNyZWF0ZV90YWJsZS5zcWwgYW5kIGFsdGVyX3RhYmxlLnNxbCBmb3IgdGhlIHR3byBh cHByb2FjaGVzLg0KVGhlIHRpbWUgdXNlZCBpbiBERUJVRyBtb2RlIGZvciB0aGUgdHdvIGFwcHJv YWNoZXMgYXJlIGFsbW9zdCB0aGUgc2FtZSBvbiBteQ0KbWFjaGluZSwgdGhlIHJlZ3Jlc3MgdHdp Y2UgYXBwb3JhY2ggdGFrZXMgYSBiaXQgbW9yZSB0aW1lIGluIFJFTEVBU0UgYnVpbGQsDQp3aGlj aCBzZWVtcyBvayB0byBtZS4NCg0Kfn5+ZGVidWd+fn5+DQpyZWdyZXNzIHR3aWNlIGFwcHJvYWNo IC0gMTVzDQpyZW1vdGUgZGF0YWJhc2UgYXBwcm9hY2ggLSAxNXMNCg0Kfn5+fnJlbGVhc2UgYnVp bGR+fn5+DQpyZWdyZXNzIHR3aWNlIGFwcHJvYWNoIC0gNy41IHMNCnJlbW90ZSBkYXRhYmFzZSBh cHByb2FjaCAtIDZzDQoNCkJlc3QgUmVnYXJkcywNCkhvdSB6ag0KDQoNCg0KDQo= --_005_OS0PR01MB57163E6487EFF7378CB8E17C9438AOS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="0004-test-deparser-module-regress-twice.patch" Content-Description: 0004-test-deparser-module-regress-twice.patch Content-Disposition: attachment; filename="0004-test-deparser-module-regress-twice.patch"; size=22209; creation-date="Tue, 18 Jul 2023 07:04:19 GMT"; modification-date="Tue, 18 Jul 2023 07:09:20 GMT" Content-Transfer-Encoding: base64 RnJvbSBjYTFjODgxNGExMDI2ZDAxOGJkYWU1NGU2NGQ2ODJlMzJlODI3NThlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIb3UgWmhpamllIDxob3V6ai5mbnN0QGZ1aml0c3UuY29tPgpE YXRlOiBUdWUsIDExIEp1bCAyMDIzIDE5OjU1OjU1ICswODAwClN1YmplY3Q6IFtQQVRDSF0gdGVz dCBkZXBhcnNlciBtb2R1bGUgcmVncmVzcyB0d2ljZQoKV2hlbiBydW5uaW5nIHRoZSByZWdyZXNz aW9uIHRlc3QodGVzdHMgaW4gcGFyYWxsZWxfc2NoZWR1bGUpLCB3ZSByZXBsYWNlIHRoZQpleGVj dXRpbmcgZGRsIHN0YXRlbWVudCB3aXRoIHRoZSBpdHMgZGVwYXJzZWQgdmVyc2lvbiBhbmQgZXhl Y3V0ZSB0aGUKZGVwYXJzZWQgc3RhdGVtZW50LCBzbyB0aGF0IHdlIGNhbiBydW4gYWxsIHRoZSBy ZWdyZXNzaW9uIHdpdGggdGhlIGRlcGFyc2VkCnN0YXRlbWVudCBhbmQgY2FuIGV4cGVjdCB0aGUg b3V0cHV0IHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBleGlzdGluZwpleHBlY3RlZC8qLm91dC4gQXMg ZGV2ZWxvcGVycyB0eXBpY2FsbHkgYWRkIG5ldyByZWdyZXNzaW9uIHRlc3RzIHRvIHRlc3QgbmV3 CnN5bnRheCwgc28gd2UgZXhwZWN0IHRoaXMgdGVzdCBjYW4gYXV0b21hdGljYWxseSBpZGVudGlm eSBhbnkgbmV3IHN5bnRheApjaGFuZ2VzLgoKVG8gYWNoaWV2ZSB0aGlzLCB0aGUgc3RyYXRlZ3kg aXMgdG8gcnVuIHRoZSByZWdyZXNzaW9uIHRlc3QgdHdpY2UuIFRoZSBmaXJzdApydW4gd2lsbCBj cmVhdGUgZXZlbnQgdHJpZ2dlcnMgdG8gZGVwYXJzZSBkZGwgc3RhdGVtZW50cywgaXQgaXMgaW50 ZW5kZWQgdG8KY29sbGVjdCBhbGwgdGhlIGRlcGFyc2VkIHN0YXRlbWVudHMgYW5kIGNhbiBjYXRj aCBFUlJPUnMvV0FSTklOR3MgY2F1c2VkIGJ5CnRoZSBkZXBhcnNlci4gV2UgY2FuIGR1bXAgdGhl c2Ugc3RhdGVtZW50cyBmcm9tIHRoZSBkYXRhYmFzZSBhbmQgdGhlbiByZWxvYWQKdGhlbSBpbiB0 aGUgc2Vjb25kIHJlZ3Jlc3Npb24gcnVuLiBUaGlzIGFsbG93cyB1cyB0byB1dGlsaXplIHRoZSBk ZXBhcnNlZCBzdGF0ZW1lbnRzCnRvIHJlcGxhY2UgdGhlIGxvY2FsIHN0YXRlbWVudHMgaW4gdGhl IHNlY29uZCByZWdyZXNzaW9uIHJ1bi4gVGhpcyBhcHByb2FjaApkb2VzIG5vdCBuZWVkIHRvIGhh bmRsZSBhbnkgcmVtb3RlIG1lc3NhZ2VzIGFuZCBjbGllbnQgdmFyaWFibGUgc3R1ZmYgZHVyaW5n CmV4ZWN1dGlvbiwgYWx0aG91Z2ggaXQgY291bGQgdGFrZSBtb3JlIHRpbWUgdG8gZmluc2ggdGhl IHRlc3QuCi0tLQogc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAg IHwgICAxICsKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZXBhcnNlci9NYWtlZmlsZSAgICAgICB8 ICA1NyArKysrCiAuLi4vbW9kdWxlcy90ZXN0X2RlcGFyc2VyL2V4Y2x1c2lvbl9zY2hlZHVsZSAg fCAgIDcgKwogLi4uL3Rlc3RfZGVwYXJzZXIvZXhwZWN0ZWQvY29weV9jbWQub3V0ICAgICAgIHwg ICAzICsKIC4uLi9leHBlY3RlZC90ZXN0X2RlcGFyc2VyXzEub3V0ICAgICAgICAgICAgICB8ICAz NCArKwogLi4uL2V4cGVjdGVkL3Rlc3RfZGVwYXJzZXJfMi5vdXQgICAgICAgICAgICAgIHwgIDE4 ICsKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZXBhcnNlci9tZXNvbi5idWlsZCAgICB8ICAyNCAr KwogLi4uL21vZHVsZXMvdGVzdF9kZXBhcnNlci9zcWwvY29weV9jbWQuc3FsICAgIHwgICAzICsK IC4uLi90ZXN0X2RlcGFyc2VyL3NxbC90ZXN0X2RlcGFyc2VyXzEuc3FsICAgICB8ICA0MCArKysK IC4uLi90ZXN0X2RlcGFyc2VyL3NxbC90ZXN0X2RlcGFyc2VyXzIuc3FsICAgICB8ICAxNiArCiAu Li4vdGVzdF9kZXBhcnNlci90ZXN0X2RlcGFyc2VyLS0xLjAuc3FsICAgICAgfCAgIDkgKwogLi4u L21vZHVsZXMvdGVzdF9kZXBhcnNlci90ZXN0X2RlcGFyc2VyLmMgICAgIHwgMzEwICsrKysrKysr KysrKysrKysrKwogLi4uL21vZHVsZXMvdGVzdF9kZXBhcnNlci90ZXN0X2RlcGFyc2VyLmNvbmYg IHwgICAxICsKIC4uLi90ZXN0X2RlcGFyc2VyL3Rlc3RfZGVwYXJzZXIuY29udHJvbCAgICAgICB8 ICAgNCArCiAxNCBmaWxlcyBjaGFuZ2VkLCA1MjcgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZXBhcnNlci9NYWtlZmlsZQogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZXBhcnNlci9leGNsdXNpb25fc2NoZWR1 bGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGVwYXJzZXIvZXhw ZWN0ZWQvY29weV9jbWQub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2RlcGFyc2VyL2V4cGVjdGVkL3Rlc3RfZGVwYXJzZXJfMS5vdXQKIGNyZWF0ZSBtb2RlIDEw MDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGVwYXJzZXIvZXhwZWN0ZWQvdGVzdF9kZXBhcnNl cl8yLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZXBhcnNl ci9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9k ZXBhcnNlci9zcWwvY29weV9jbWQuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2RlcGFyc2VyL3NxbC90ZXN0X2RlcGFyc2VyXzEuc3FsCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RlcGFyc2VyL3NxbC90ZXN0X2RlcGFyc2VyXzIu c3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RlcGFyc2VyL3Rl c3RfZGVwYXJzZXItLTEuMC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVz L3Rlc3RfZGVwYXJzZXIvdGVzdF9kZXBhcnNlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2RlcGFyc2VyL3Rlc3RfZGVwYXJzZXIuY29uZgogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZXBhcnNlci90ZXN0X2RlcGFyc2VyLmNvbnRy b2wKCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9k dWxlcy9NYWtlZmlsZQppbmRleCA2MzMxYzk3NmRjLi5jYWQ2OGE1OWJjIDEwMDY0NAotLS0gYS9z cmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUK QEAgLTE3LDYgKzE3LDcgQEAgU1VCRElSUyA9IFwKIAkJICB0ZXN0X2Jsb29tZmlsdGVyIFwKIAkJ ICB0ZXN0X2NvcHlfY2FsbGJhY2tzIFwKIAkJICB0ZXN0X2N1c3RvbV9ybWdycyBcCisJCSAgdGVz dF9kZXBhcnNlciBcCiAJCSAgdGVzdF9kZGxfZGVwYXJzZSBcCiAJCSAgdGVzdF9leHRlbnNpb25z IFwKIAkJICB0ZXN0X2dpbnBvc3RpbmdsaXN0IFwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9kZXBhcnNlci9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZXBhcnNl ci9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi43OGEzZWEw MTUwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RlcGFyc2VyL01h a2VmaWxlCkBAIC0wLDAgKzEsNTcgQEAKKyMgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RlcGFyc2Vy L01ha2VmaWxlCisKK01PRFVMRVMgPSB0ZXN0X2RlcGFyc2VyCitQR0ZJTEVERVNDID0gInRlc3Rf ZGVwYXJzZXIgLSByZWdyZXNzaW9uIHRlc3RpbmcgZm9yIERETCBkZXBhcnNpbmciCisKK0VYVEVO U0lPTiA9IHRlc3RfZGVwYXJzZXIKK0RBVEEgPSB0ZXN0X2RlcGFyc2VyLS0xLjAuc3FsCisKK0VY VFJBX0NMRUFOID0gJChwZ19yZWdyZXNzX2NsZWFuX2ZpbGVzKSBkZXBhcnNlX2luaXRfc2NoZWR1 bGUgZGVwYXJzZV9yZWdyZXNzX3NjaGVkdWxlCisKK01PRFVMRV9iaWcgPSB0ZXN0X2RlcGFyc2Vy CitPQkpTID0gXAorCSQoV0lOMzJSRVMpIFwKKwl0ZXN0X2RlcGFyc2VyLm8KKworaWZkZWYgVVNF X1BHWFMKK1BHX0NPTkZJRyA9IHBnX2NvbmZpZworUEdYUyA6PSAkKHNoZWxsICQoUEdfQ09ORklH KSAtLXBneHMpCitpbmNsdWRlICQoUEdYUykKK2Vsc2UKK3N1YmRpciA9IHNyYy90ZXN0L21vZHVs ZXMvdGVzdF9kZXBhcnNlcgordG9wX2J1aWxkZGlyID0gLi4vLi4vLi4vLi4KK2luY2x1ZGUgJCh0 b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS9j b250cmliL2NvbnRyaWItZ2xvYmFsLm1rCitlbmRpZgorCitNSU5JTUFMX1JFR1JFU1MgPSB0ZXN0 X3NldHVwIFwKKwkJICBjcmVhdGVfaW5kZXggXAorCQkgIGNyZWF0ZV90YWJsZSBcCisJCSAgYWx0 ZXJfdGFibGUKKworUkVHUkVTU19PUFRTICs9IC0tbG9hZC1leHRlbnNpb249dGVzdF9kZXBhcnNl ciAtLWRscGF0aD0kKHRvcF9idWlsZGRpcikvc3JjL3Rlc3QvcmVncmVzcyBcCisJCS0tdGVtcC1j b25maWcgJCh0b3Bfc3JjZGlyKS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGVwYXJzZXIvdGVzdF9k ZXBhcnNlci5jb25mIFwKKwkJLS1pbnB1dGRpcj0kKHRvcF9zcmNkaXIpL3NyYy90ZXN0L3JlZ3Jl c3MKKworZGVwYXJzZV9pbml0OiBhbGwgZGVwYXJzZV9pbml0X3NjaGVkdWxlCisJJChwZ19yZWdy ZXNzX2NoZWNrKSAkKFJFR1JFU1NfT1BUUykgLS1zY2hlZHVsZT1kZXBhcnNlX2luaXRfc2NoZWR1 bGUKKworZGVwYXJzZV9yZWdyZXNzOiBhbGwgZGVwYXJzZV9yZWdyZXNzX3NjaGVkdWxlCisJJChw Z19yZWdyZXNzX2NoZWNrKSAkKFJFR1JFU1NfT1BUUykgLS1zY2hlZHVsZT1kZXBhcnNlX3JlZ3Jl c3Nfc2NoZWR1bGUKKworY2hlY2s6IGFsbCBkZXBhcnNlX2luaXQgZGVwYXJzZV9yZWdyZXNzCisK K2NoZWNrbWluaW1hbDogYWxsCisJJChwZ19yZWdyZXNzX2NoZWNrKSAkKFJFR1JFU1NfT1BUUykg dGVzdF9kZXBhcnNlcl8xICQoTUlOSU1BTF9SRUdSRVNTKSBjb3B5X2NtZAorCSQocGdfcmVncmVz c19jaGVjaykgJChSRUdSRVNTX09QVFMpIHRlc3RfZGVwYXJzZXJfMiAkKE1JTklNQUxfUkVHUkVT UykKKworZGVwYXJzZV9pbml0X3NjaGVkdWxlOgorCWVjaG8gInRlc3Q6IHRlc3RfZGVwYXJzZXJf MSIgPiAkQAorCWNhdCAkKHRvcF9zcmNkaXIpL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2No ZWR1bGUgPj4gJEAKKwllY2hvICJ0ZXN0OiBjb3B5X2NtZCIgPj4gJEAKKwlzZWQgJ3MvXCguKlwp L3NcL1xcYlwxXFxiXC9cL2cvJyBleGNsdXNpb25fc2NoZWR1bGUgfCBzZWQgLWYgLSAtaSAkQAor CitkZXBhcnNlX3JlZ3Jlc3Nfc2NoZWR1bGU6CisJZWNobyAidGVzdDogdGVzdF9kZXBhcnNlcl8y IiA+ICRACisJY2F0ICQodG9wX3NyY2Rpcikvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hl ZHVsZSA+PiAkQAorCXNlZCAncy9cKC4qXCkvc1wvXFxiXDFcXGJcL1wvZy8nIGV4Y2x1c2lvbl9z Y2hlZHVsZSB8IHNlZCAtZiAtIC1pICRACmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfZGVwYXJzZXIvZXhjbHVzaW9uX3NjaGVkdWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Rl cGFyc2VyL2V4Y2x1c2lvbl9zY2hlZHVsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi4yNDNiYjY2ZDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2RlcGFyc2VyL2V4Y2x1c2lvbl9zY2hlZHVsZQpAQCAtMCwwICsxLDcgQEAKKworIyBGb3Ig dGVzdHMgdGhhdCBkb24ndCBpbmNsdWRlIGFueSBEREwgc3RhdGVtZW50IG9yIGNhbgorIyBnaXZl IHVuZXhwZWN0ZWQgb3V0cHV0IGJlY2F1c2Ugb2YgdGhlIGV4dHJhIGV2ZW50IHRyaWdnZXIgZnVu Y3Rpb25zIGFuZCB0YWJsZQorIyBjcmVhdGVkIGluIHRoaXMgdGVzdCwgd2Ugc2tpcHBpbmcgcnVu bmluZyB0aGVzZSB0ZXN0cy4KK29wcl9zYW5pdHkKK21pc2Nfc2FuaXR5CitldmVudF90cmlnZ2Vy CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGVwYXJzZXIvZXhwZWN0ZWQvY29w eV9jbWQub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RlcGFyc2VyL2V4cGVjdGVkL2NvcHlf Y21kLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5jZWZjNjBiYTRi Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RlcGFyc2VyL2V4cGVj dGVkL2NvcHlfY21kLm91dApAQCAtMCwwICsxLDMgQEAKK1xnZXRlbnYgYWJzX2J1aWxkZGlyIFBH X0FCU19CVUlMRERJUgorXHNldCBmaWxlbmFtZSA6YWJzX2J1aWxkZGlyICcvcmVzdWx0cy9kZXBh cnNlX3Rlc3RfY29tbWFuZHMuZGF0YScKK0NPUFkgZGVwYXJzZV90ZXN0X2NvbW1hbmRzIFRPIDon ZmlsZW5hbWUnOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RlcGFyc2VyL2V4 cGVjdGVkL3Rlc3RfZGVwYXJzZXJfMS5vdXQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGVwYXJz ZXIvZXhwZWN0ZWQvdGVzdF9kZXBhcnNlcl8xLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwLi4xNThmZjU1MzY2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2RlcGFyc2VyL2V4cGVjdGVkL3Rlc3RfZGVwYXJzZXJfMS5vdXQKQEAgLTAsMCAr MSwzNCBAQAorQ1JFQVRFIFJPTEUgZGVwYXJzZV9yb2xlIFNVUEVSVVNFUjsKK0NSRUFURSBPUiBS RVBMQUNFIEZVTkNUSU9OIHB1YmxpYy5kZXBhcnNlX3Rlc3RfZGRsX2NvbW1hbmRfZW5kKCkKKyAg UkVUVVJOUyBldmVudF90cmlnZ2VyCisgIFNFQ1VSSVRZIERFRklORVIKKyAgTEFOR1VBR0UgcGxw Z3NxbAorQVMgJGZuJAorQkVHSU4KKwlCRUdJTgorCQlJTlNFUlQgSU5UTyBwZ19jYXRhbG9nLmRl cGFyc2VfdGVzdF9jb21tYW5kcworCQkgICAgICAgICAgICAoaWQsIHRlc3RfbmFtZSwgZGVwYXJz ZV90aW1lLCBvcmlnaW5hbF9jb21tYW5kLCBjb21tYW5kKQorCQlTRUxFQ1QgcHVibGljLnRkcGFy c2VyX2dldF9jbWRjb3VudCgpLAorCQljdXJyZW50X3NldHRpbmcoJ2FwcGxpY2F0aW9uX25hbWUn KSwgY2xvY2tfdGltZXN0YW1wKCksIGN1cnJlbnRfcXVlcnkoKSwKKwkJcGdfY2F0YWxvZy5kZGxf ZGVwYXJzZV9leHBhbmRfY29tbWFuZChwZ19jYXRhbG9nLmRkbF9kZXBhcnNlX3RvX2pzb24oY29t bWFuZCkpCisJCUZST00gcGdfZXZlbnRfdHJpZ2dlcl9kZGxfY29tbWFuZHMoKSBXSVRIIE9SRElO QUxJVFk7CisKKwlFWENFUFRJT04gV0hFTiBPVEhFUlMgVEhFTgorCQkJUkFJU0UgRVhDRVBUSU9O ICdzdGF0ZTogJSBlcnJtOiAlJywgc3Fsc3RhdGUsIHNxbGVycm07CisJRU5EOworRU5EOworJGZu JDsKK1NFVCBhbGxvd19zeXN0ZW1fdGFibGVfbW9kcyA9IG9uOworQ1JFQVRFIFVOTE9HR0VEIFRB QkxFIHBnX2NhdGFsb2cuZGVwYXJzZV90ZXN0X2NvbW1hbmRzICgKKyAgaWQgaW50LAorICB0ZXN0 X25hbWUgdGV4dCwKKyAgZGVwYXJzZV90aW1lIHRpbWVzdGFtcHR6LAorICBvcmlnaW5hbF9jb21t YW5kIFRFWFQgTk9UIE5VTEwsCisgIGNvbW1hbmQgVEVYVAorKTsKK0NSRUFURSBFVkVOVCBUUklH R0VSIGRlcGFyc2VfdGVzdF90cmdfc3FsX2Ryb3AKKyAgT04gc3FsX2Ryb3AKKyAgRVhFQ1VURSBQ Uk9DRURVUkUgdGVzdF9kZXBhcnNlcl9kcm9wX2NvbW1hbmQoKTsKK0NSRUFURSBFVkVOVCBUUklH R0VSIGRlcGFyc2VfdGVzdF90cmdfZGRsX2NvbW1hbmRfZW5kCisgIE9OIGRkbF9jb21tYW5kX2Vu ZCBXSEVOIFRBRyBJTiAoJ0NSRUFURSBUQUJMRScsICdBTFRFUiBUQUJMRScpCisgIEVYRUNVVEUg UFJPQ0VEVVJFIGRlcGFyc2VfdGVzdF9kZGxfY29tbWFuZF9lbmQoKTsKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9kZXBhcnNlci9leHBlY3RlZC90ZXN0X2RlcGFyc2VyXzIub3V0 IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RlcGFyc2VyL2V4cGVjdGVkL3Rlc3RfZGVwYXJzZXJf Mi5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNWYwNjkzMzdjNQot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZXBhcnNlci9leHBlY3Rl ZC90ZXN0X2RlcGFyc2VyXzIub3V0CkBAIC0wLDAgKzEsMTggQEAKK1xnZXRlbnYgYWJzX2J1aWxk ZGlyIFBHX0FCU19CVUlMRERJUgorXHNldCBmaWxlbmFtZSA6YWJzX2J1aWxkZGlyICcvcmVzdWx0 cy9kZXBhcnNlX3Rlc3RfY29tbWFuZHMuZGF0YScKK1NFVCBhbGxvd19zeXN0ZW1fdGFibGVfbW9k cyA9IG9uOworQ1JFQVRFIFRBQkxFIHBnX2NhdGFsb2cuZGVwYXJzZV90ZXN0X2NvbW1hbmRzICgK KyAgaWQgaW50LAorICB0ZXN0X25hbWUgdGV4dCwKKyAgZGVwYXJzZV90aW1lIHRpbWVzdGFtcHR6 LAorICBvcmlnaW5hbF9jb21tYW5kIFRFWFQsCisgIGNvbW1hbmQgVEVYVAorKTsKK0NPUFkgcGdf Y2F0YWxvZy5kZXBhcnNlX3Rlc3RfY29tbWFuZHMgRlJPTSA6J2ZpbGVuYW1lJzsKK0FMVEVSIFNZ U1RFTSBTRVQgdGVzdF9kZXBhcnNlci5kZXBhcnNlX21vZGUgPSBvbjsKK1NFTEVDVCBwZ19yZWxv YWRfY29uZigpOworIHBnX3JlbG9hZF9jb25mIAorLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJv dykKKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RlcGFyc2VyL21lc29uLmJ1 aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RlcGFyc2VyL21lc29uLmJ1aWxkCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmI1NzU1M2ZhNWEKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGVwYXJzZXIvbWVzb24uYnVpbGQKQEAgLTAsMCAr MSwyNCBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjItMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKwordGVzdF9kZXBhcnNlcl9zb3VyY2VzID0gZmlsZXMoCisgICd0ZXN0 X2RlcGFyc2VyLmMnLAorKQorCitpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKKyAgdGVzdF9k ZXBhcnNlcl9zb3VyY2VzICs9IHJjX2xpYl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFf YXJnczogWworICAgICctLU5BTUUnLCAndGVzdF9kZXBhcnNlcicsCisgICAgJy0tRklMRURFU0Mn LCAndGVzdF9kZXBhcnNlciAtIGFsbG93IGRlbGF5IGJldHdlZW4gcGFyc2luZyBhbmQgZXhlY3V0 aW9uJyxdKQorZW5kaWYKKwordGVzdF9kZXBhcnNlciA9IHNoYXJlZF9tb2R1bGUoJ3Rlc3RfZGVw YXJzZXInLAorICB0ZXN0X2RlcGFyc2VyX3NvdXJjZXMsCisgIGt3YXJnczogcGdfdGVzdF9tb2Rf YXJncywKKykKK3Rlc3RfaW5zdGFsbF9saWJzICs9IHRlc3RfZGVwYXJzZXIKKwordGVzdF9pbnN0 YWxsX2RhdGEgKz0gZmlsZXMoCisgICd0ZXN0X2RlcGFyc2VyLmNvbnRyb2wnLAorICAndGVzdF9k ZXBhcnNlci0tMS4wLnNxbCcsCispCisKKyMgVE9ETyByZWdyZXNzaW9uIHRlc3RzCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGVwYXJzZXIvc3FsL2NvcHlfY21kLnNxbCBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9kZXBhcnNlci9zcWwvY29weV9jbWQuc3FsCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmNlZmM2MGJhNGIKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGVwYXJzZXIvc3FsL2NvcHlfY21kLnNxbApAQCAtMCww ICsxLDMgQEAKK1xnZXRlbnYgYWJzX2J1aWxkZGlyIFBHX0FCU19CVUlMRERJUgorXHNldCBmaWxl bmFtZSA6YWJzX2J1aWxkZGlyICcvcmVzdWx0cy9kZXBhcnNlX3Rlc3RfY29tbWFuZHMuZGF0YScK K0NPUFkgZGVwYXJzZV90ZXN0X2NvbW1hbmRzIFRPIDonZmlsZW5hbWUnOwpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RlcGFyc2VyL3NxbC90ZXN0X2RlcGFyc2VyXzEuc3FsIGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RlcGFyc2VyL3NxbC90ZXN0X2RlcGFyc2VyXzEuc3FsCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjFkMjg5YjVmOTIKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGVwYXJzZXIvc3FsL3Rlc3RfZGVwYXJz ZXJfMS5zcWwKQEAgLTAsMCArMSw0MCBAQAorCitDUkVBVEUgUk9MRSBkZXBhcnNlX3JvbGUgU1VQ RVJVU0VSOworCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBwdWJsaWMuZGVwYXJzZV90ZXN0 X2RkbF9jb21tYW5kX2VuZCgpCisgIFJFVFVSTlMgZXZlbnRfdHJpZ2dlcgorICBTRUNVUklUWSBE RUZJTkVSCisgIExBTkdVQUdFIHBscGdzcWwKK0FTICRmbiQKK0JFR0lOCisJQkVHSU4KKwkJSU5T RVJUIElOVE8gcGdfY2F0YWxvZy5kZXBhcnNlX3Rlc3RfY29tbWFuZHMKKwkJICAgICAgICAgICAg KGlkLCB0ZXN0X25hbWUsIGRlcGFyc2VfdGltZSwgb3JpZ2luYWxfY29tbWFuZCwgY29tbWFuZCkK KwkJU0VMRUNUIHB1YmxpYy50ZHBhcnNlcl9nZXRfY21kY291bnQoKSwKKwkJY3VycmVudF9zZXR0 aW5nKCdhcHBsaWNhdGlvbl9uYW1lJyksIGNsb2NrX3RpbWVzdGFtcCgpLCBjdXJyZW50X3F1ZXJ5 KCksCisJCXBnX2NhdGFsb2cuZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQocGdfY2F0YWxvZy5k ZGxfZGVwYXJzZV90b19qc29uKGNvbW1hbmQpKQorCQlGUk9NIHBnX2V2ZW50X3RyaWdnZXJfZGRs X2NvbW1hbmRzKCkgV0lUSCBPUkRJTkFMSVRZOworCisJRVhDRVBUSU9OIFdIRU4gT1RIRVJTIFRI RU4KKwkJCVJBSVNFIEVYQ0VQVElPTiAnc3RhdGU6ICUgZXJybTogJScsIHNxbHN0YXRlLCBzcWxl cnJtOworCUVORDsKK0VORDsKKyRmbiQ7CisKK1NFVCBhbGxvd19zeXN0ZW1fdGFibGVfbW9kcyA9 IG9uOworCitDUkVBVEUgVU5MT0dHRUQgVEFCTEUgcGdfY2F0YWxvZy5kZXBhcnNlX3Rlc3RfY29t bWFuZHMgKAorICBpZCBpbnQsCisgIHRlc3RfbmFtZSB0ZXh0LAorICBkZXBhcnNlX3RpbWUgdGlt ZXN0YW1wdHosCisgIG9yaWdpbmFsX2NvbW1hbmQgVEVYVCBOT1QgTlVMTCwKKyAgY29tbWFuZCBU RVhUCispOworCitDUkVBVEUgRVZFTlQgVFJJR0dFUiBkZXBhcnNlX3Rlc3RfdHJnX3NxbF9kcm9w CisgIE9OIHNxbF9kcm9wCisgIEVYRUNVVEUgUFJPQ0VEVVJFIHRlc3RfZGVwYXJzZXJfZHJvcF9j b21tYW5kKCk7CisKK0NSRUFURSBFVkVOVCBUUklHR0VSIGRlcGFyc2VfdGVzdF90cmdfZGRsX2Nv bW1hbmRfZW5kCisgIE9OIGRkbF9jb21tYW5kX2VuZCBXSEVOIFRBRyBJTiAoJ0NSRUFURSBUQUJM RScsICdBTFRFUiBUQUJMRScpCisgIEVYRUNVVEUgUFJPQ0VEVVJFIGRlcGFyc2VfdGVzdF9kZGxf Y29tbWFuZF9lbmQoKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZXBhcnNl ci9zcWwvdGVzdF9kZXBhcnNlcl8yLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZXBhcnNl ci9zcWwvdGVzdF9kZXBhcnNlcl8yLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi4zYmMzNDAwYjRmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2RlcGFyc2VyL3NxbC90ZXN0X2RlcGFyc2VyXzIuc3FsCkBAIC0wLDAgKzEsMTYgQEAKKwor XGdldGVudiBhYnNfYnVpbGRkaXIgUEdfQUJTX0JVSUxERElSCitcc2V0IGZpbGVuYW1lIDphYnNf YnVpbGRkaXIgJy9yZXN1bHRzL2RlcGFyc2VfdGVzdF9jb21tYW5kcy5kYXRhJworCitTRVQgYWxs b3dfc3lzdGVtX3RhYmxlX21vZHMgPSBvbjsKK0NSRUFURSBUQUJMRSBwZ19jYXRhbG9nLmRlcGFy c2VfdGVzdF9jb21tYW5kcyAoCisgIGlkIGludCwKKyAgdGVzdF9uYW1lIHRleHQsCisgIGRlcGFy c2VfdGltZSB0aW1lc3RhbXB0eiwKKyAgb3JpZ2luYWxfY29tbWFuZCBURVhULAorICBjb21tYW5k IFRFWFQKKyk7CisKK0NPUFkgcGdfY2F0YWxvZy5kZXBhcnNlX3Rlc3RfY29tbWFuZHMgRlJPTSA6 J2ZpbGVuYW1lJzsKK0FMVEVSIFNZU1RFTSBTRVQgdGVzdF9kZXBhcnNlci5kZXBhcnNlX21vZGUg PSBvbjsKK1NFTEVDVCBwZ19yZWxvYWRfY29uZigpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2RlcGFyc2VyL3Rlc3RfZGVwYXJzZXItLTEuMC5zcWwgYi9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfZGVwYXJzZXIvdGVzdF9kZXBhcnNlci0tMS4wLnNxbApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwLi5iNDJmMjU1OWU2Ci0tLSAvZGV2L251bGwKKysrIGIvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2RlcGFyc2VyL3Rlc3RfZGVwYXJzZXItLTEuMC5zcWwKQEAgLTAs MCArMSw5IEBACitcZWNobyBVc2UgIkNSRUFURSBFWFRFTlNJT04gdGVzdF9kZXBhcnNlciIgdG8g bG9hZCB0aGlzIGZpbGUuIFxxdWl0CisKK0NSRUFURSBGVU5DVElPTiB0ZHBhcnNlcl9nZXRfY21k Y291bnQoKQorICBSRVRVUk5TIGludCBTVFJJQ1QKKyAgQVMgJ01PRFVMRV9QQVRITkFNRScgTEFO R1VBR0UgQzsKKworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfZGVwYXJzZXJfZHJvcF9jb21tYW5kKCkK K1JFVFVSTlMgZXZlbnRfdHJpZ2dlciBTVFJJQ1QgU0VDVVJJVFkgREVGSU5FUgorQVMgJ01PRFVM RV9QQVRITkFNRScgTEFOR1VBR0UgQzsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9kZXBhcnNlci90ZXN0X2RlcGFyc2VyLmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGVwYXJz ZXIvdGVzdF9kZXBhcnNlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LmVlNTVlNGU0ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGVw YXJzZXIvdGVzdF9kZXBhcnNlci5jCkBAIC0wLDAgKzEsMzEwIEBACisvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqCisgKiB0ZXN0X2RlcGFyc2VyLmMKKyAqCQlUZXN0IERETCBkZXBhcnNlcgorICoKKyAq IENvcHlyaWdodCAoYykgMjAyMC0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9k ZXBhcnNlci90ZXN0X2RlcGFyc2VyLmMKKyAqCisgKiBXaGVuIHJ1bm5pbmcgdGhlIHJlZ3Jlc3Np b24gdGVzdCh0ZXN0cyBpbiBwYXJhbGxlbF9zY2hlZHVsZSksIHdlIHJlcGxhY2UgdGhlCisgKiBl eGVjdXRpbmcgZGRsIHN0YXRlbWVudCB3aXRoIHRoZSBpdHMgZGVwYXJzZWQgdmVyc2lvbiBhbmQg ZXhlY3V0ZSB0aGUKKyAqIGRlcGFyc2VkIHN0YXRlbWVudCwgc28gdGhhdCB3ZSBjYW4gcnVuIGFs bCB0aGUgcmVncmVzc2lvbiB3aXRoIHRoZSBkZXBhcnNlZAorICogc3RhdGVtZW50IGFuZCBjYW4g ZXhwZWN0IHRoZSBvdXRwdXQgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIGV4aXN0aW5nCisgKiBleHBl Y3RlZCAqLm91dC4gQXMgZGV2ZWxvcGVycyB0eXBpY2FsbHkgYWRkIG5ldyByZWdyZXNzaW9uIHRl c3RzIHRvIHRlc3QgbmV3CisgKiBzeW50YXgsIHNvIHdlIGV4cGVjdCB0aGlzIHRlc3QgY2FuIGF1 dG9tYXRpY2FsbHkgaWRlbnRpZnkgYW55IG5ldyBzeW50YXgKKyAqIGNoYW5nZXMuCisgKgorICog VGhlIHN0cmF0ZWd5IGlzIHRvIHJ1biB0aGUgcmVncmVzc2lvbiB0ZXN0IHR3aWNlLiBUaGUgZmly c3QgcnVuIHdpbGwgY3JlYXRlCisgKiBldmVudCB0cmlnZ2VycyB0byBkZXBhcnNlIGRkbCBzdGF0 ZW1lbnRzLCBpdCBpcyBpbnRlbmRlZCB0byBjb2xsZWN0IGFsbCB0aGUKKyAqIGRlcGFyc2VkIHN0 YXRlbWVudHMgYW5kIGNhbiBjYXRjaCBFUlJPUnMvV0FSTklOR3MgY2F1c2VkIGJ5IHRoZSBkZXBh cnNlci4gV2UKKyAqIGNhbiBkdW1wIHRoZXNlIHN0YXRlbWVudHMgZnJvbSB0aGUgZGF0YWJhc2Ug YW5kIHRoZW4gcmVsb2FkIHRoZW0gaW4gdGhlCisgKiBzZWNvbmQgcmVncmVzc2lvbiBydW4uIFRo aXMgYWxsb3dzIHVzIHRvIHV0aWxpemUgdGhlIGRlcGFyc2VkIHN0YXRlbWVudHMgdG8KKyAqIHJl cGxhY2UgdGhlIGxvY2FsIHN0YXRlbWVudHMgaW4gdGhlIHNlY29uZCByZWdyZXNzaW9uIHJ1bi4g VGhpcyBhcHByb2FjaAorICogZG9lcyBub3QgbmVlZCB0byBoYW5kbGUgYW55IHJlbW90ZSBtZXNz YWdlcyBhbmQgY2xpZW50IHZhcmlhYmxlIHN0dWZmIGR1cmluZworICogZXhlY3V0aW9uLCBhbHRo b3VnaCBpdCBjb3VsZCB0YWtlIG1vcmUgdGltZSB0byBmaW5zaCB0aGUgdGVzdC4KKyAqCisgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUg ImNhdGFsb2cvZGVwZW5kZW5jeS5oIgorI2luY2x1ZGUgImNhdGFsb2cvb2JqZWN0YWNjZXNzLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoaWQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2Ns YXNzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19kYXRhYmFzZS5oIgorI2luY2x1ZGUgImNhdGFs b2cvcGdfbmFtZXNwYWNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wcm9jLmgiCisjaW5jbHVk ZSAiY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3NlY2xhYmVs LmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKKyNpbmNsdWRlICJleGVjdXRvci9z cGkuaCIKKyNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVk ZSAidGNvcC9kZGxkZXBhcnNlLmgiCisjaW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCisjaW5jbHVk ZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKyNpbmNsdWRlICJ1 dGlscy9wb3J0YWwuaCIKKyNpbmNsdWRlICJ1dGlscy9xdWVyeWVudmlyb25tZW50LmgiCisKK1BH X01PRFVMRV9NQUdJQzsKKworc3RhdGljIFByb2Nlc3NVdGlsaXR5X2hvb2tfdHlwZSBwcmV2X1By b2Nlc3NVdGlsaXR5ID0gTlVMTDsKK3N0YXRpYyBFeGVjdXRvclJ1bl9ob29rX3R5cGUgcHJldl9F eGVjdXRvclJ1biA9IE5VTEw7CitleHRlcm4gRXZlbnRUcmlnZ2VyUXVlcnlTdGF0ZSAqY3VycmVu dEV2ZW50VHJpZ2dlclN0YXRlOworCitzdGF0aWMgdm9pZCB0ZGVwYXJzZXJfUHJvY2Vzc1V0aWxp dHkoUGxhbm5lZFN0bXQgKnBzdG10LCBjb25zdCBjaGFyICpxdWVyeVN0cmluZywKKwkJCQkJCQkJ CSBib29sIHJlYWRPbmx5VHJlZSwKKwkJCQkJCQkJCSBQcm9jZXNzVXRpbGl0eUNvbnRleHQgY29u dGV4dCwgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCisJCQkJCQkJCQkgUXVlcnlFbnZpcm9ubWVudCAq cXVlcnlFbnYsCisJCQkJCQkJCQkgRGVzdFJlY2VpdmVyICpkZXN0LCBRdWVyeUNvbXBsZXRpb24g KnFjKTsKKworc3RhdGljIHZvaWQgdGRlcGFyc2VyX0V4ZWN1dG9yUnVuKFF1ZXJ5RGVzYyAqcXVl cnlEZXNjLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwgdWludDY0IGNvdW50LAorCQlib29sIGV4 ZWN1dGVfb25jZSk7CisKK3N0YXRpYyBpbnQJbmVzdGluZ19sZXZlbCA9IDA7CitzdGF0aWMgaW50 CWNtZF9jb3VudCA9IDA7CitzdGF0aWMgYm9vbAlkZXBhcnNlX21vZGUgPSBmYWxzZTsKKworCitz dGF0aWMgTGlzdCAqCitjaGFuZ2VfZGVwYXJzZWRfc3RtdChQbGFubmVkU3RtdCAqcHN0bXQsIGNv bnN0IGNoYXIgKnF1ZXJ5U3RyaW5nKQoreworCUxpc3QJCSAgICpuc3RtdF9saXN0ID0gTklMOwor CUxpc3QJCSAgICpwYXJzZXRyZWVfbGlzdDsKKwlMaXN0Q2VsbAkgICAqbGM7CisJT2lkCQkJCXNh dmVfdXNlcmlkID0gMDsKKwljb25zdCBjaGFyCSAgICpkZXBhcnNlZF9jbWQgPSBxdWVyeVN0cmlu ZzsKKwlpbnQJCQkJc2F2ZV9zZWNfY29udGV4dCA9IDA7CisJaW50CQkJCWk7CisJU1BJVHVwbGVU YWJsZSAgKnR1cHRhYmxlOworCVN0cmluZ0luZm9EYXRhCWNtZDsKKworCWlmICghZGVwYXJzZV9t b2RlKQorCQlyZXR1cm4gbGlzdF9tYWtlMShwc3RtdCk7CisKKwlpbml0U3RyaW5nSW5mbygmY21k KTsKKwlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsICJTRUxFQ1QgY29tbWFuZCwgaWQsIGRlcGFyc2Vf dGltZSBmcm9tIHBnX2NhdGFsb2cuZGVwYXJzZV90ZXN0X2NvbW1hbmRzICIKKwkJCQkiV0hFUkUg aWQgPSAlZCBBTkQgdGVzdF9uYW1lID0gJyVzJyBBTkQgb3JpZ2luYWxfY29tbWFuZCA9IGN1cnJl bnRfcXVlcnkoKSBvcmRlciBieSBkZXBhcnNlX3RpbWUiLAorCQkJCWNtZF9jb3VudCwgYXBwbGlj YXRpb25fbmFtZSk7CisJZWxvZyhMT0csICJJRDogJWQiLCBjbWRfY291bnQpOworCisJLyogQ2hh bmdlIHRvIHN1cGVydXNlciB0byBhdm9pZCBhY2Nlc3MgZGVueS4gKi8KKwlHZXRVc2VySWRBbmRT ZWNDb250ZXh0KCZzYXZlX3VzZXJpZCwgJnNhdmVfc2VjX2NvbnRleHQpOworCVNldFVzZXJJZEFu ZFNlY0NvbnRleHQoQk9PVFNUUkFQX1NVUEVSVVNFUklELAorCQkJc2F2ZV9zZWNfY29udGV4dCB8 IFNFQ1VSSVRZX0xPQ0FMX1VTRVJJRF9DSEFOR0UpOworCisJU1BJX2Nvbm5lY3QoKTsKKworCS8q IFF1ZXJ5IHRoZSBkZXBhcnNlZCBzdGF0ZW1lbnQuICovCisJaWYgKFNQSV9leGVjKGNtZC5kYXRh LCAxMDI0KSAhPSBTUElfT0tfU0VMRUNUKQorCQllbG9nKEVSUk9SLCAiU1BJX2V4ZWMgZmFpbGVk OiAlcyIsIGNtZC5kYXRhKTsKKworCWlmIChTUElfdHVwdGFibGUgPT0gTlVMTCkKKwkJZWxvZyhF UlJPUiwgImNvdWxkIG5vdCBmaW5kIGRlcGFyc2VkIHN0YXRlbWVudCIpOworCisJdHVwdGFibGUg PSBTUElfdHVwdGFibGU7CisKKwkvKgorCSAqIFJldHVybiBpZiB0aGUgc3RhdGVtZW50IHdhcyBu b3QgZGVwYXJzZWQgd2hpY2ggbWVhbnMgdGhpcyBzdGF0ZW1lbnQgaXMKKwkgKiBleHBlY3RlZCB0 byBmYWlsLgorCSAqLworCWlmICh0dXB0YWJsZS0+bnVtdmFscyA9PSAwKQorCXsKKwkJU2V0VXNl cklkQW5kU2VjQ29udGV4dChzYXZlX3VzZXJpZCwgc2F2ZV9zZWNfY29udGV4dCk7CisJCWVsb2co TE9HLCAibm8gZGVwYXJzZWQgc3RhdGVtZW50Iik7CisJCVNQSV9maW5pc2goKTsKKwkJcmV0dXJu IGxpc3RfbWFrZTEocHN0bXQpOworCX0KKworCXJlc2V0U3RyaW5nSW5mbygmY21kKTsKKworCWZv ciAoaSA9IDAgOyBpIDwgdHVwdGFibGUtPm51bXZhbHM7IGkrKykKKwl7CisJCWNoYXIgKnZhbHVl ICA9IFNQSV9nZXR2YWx1ZSh0dXB0YWJsZS0+dmFsc1tpXSwgdHVwdGFibGUtPnR1cGRlc2MsIDEp OworCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsICIlczsiLCB2YWx1ZSA/IHZhbHVlIDogIiAiKTsK Kwl9CisKKwllbG9nKExPRywgIkVYRUNROiAlcyIsIGNtZC5kYXRhKTsKKworCWRlcGFyc2VkX2Nt ZCA9IGNtZC5kYXRhOworCisJU1BJX2ZpbmlzaCgpOworCisJU2V0VXNlcklkQW5kU2VjQ29udGV4 dChzYXZlX3VzZXJpZCwgc2F2ZV9zZWNfY29udGV4dCk7CisKKwlwYXJzZXRyZWVfbGlzdCA9IHBn X3BhcnNlX3F1ZXJ5KGRlcGFyc2VkX2NtZCk7CisKKwkvKgorCSAqIE9uZSBzdGF0bWVudCBjb3Vs ZCBiZSBkZXBhcnNlZCBpbnRvIG11bGl0aXBsZSBzdGF0ZW1lbnRzLCBmb3IgZXhhbXBsZToKKwkg KiAiRFJPUCBUQUJMRSB0MSx0MiIgd2lsbCBiZSBkZXBhcnNlZCBpbnRvICJEUk9QIFRBQkxFIHQx IiBBTkQgIkRST1AgVEFCTEUKKwkgKiB0MiIuIFNvIHdlIG5lZWQgdG8gbWFpbnRhaW4gdGhlbSBp biBhIGxpc3QuCisJICovCisJZm9yZWFjaChsYywgcGFyc2V0cmVlX2xpc3QpCisJeworCQlMaXN0 CSAgICpwbGFuczsKKwkJUmF3U3RtdCAgICAqcnMgPSBsZmlyc3Rfbm9kZShSYXdTdG10LCBsYyk7 CisJCUxpc3QJICAgKnF1ZXJ5dHJlZV9saXN0ID0gcGdfYW5hbHl6ZV9hbmRfcmV3cml0ZV9maXhl ZHBhcmFtcyhycywgZGVwYXJzZWRfY21kLAorCQkJCQkJCQkJCQkJCQkJCQkJTlVMTCwgMCwgTlVM TCk7CisKKwkJQXNzZXJ0KGxpc3RfbGVuZ3RoKHF1ZXJ5dHJlZV9saXN0KSA9PSAxKTsKKworCQlw bGFucyA9IHBnX3BsYW5fcXVlcmllcyhxdWVyeXRyZWVfbGlzdCwgZGVwYXJzZWRfY21kLAorCQkJ CQkJCQlDVVJTT1JfT1BUX1BBUkFMTEVMX09LLCBOVUxMKTsKKworCQlBc3NlcnQobGlzdF9sZW5n dGgocGxhbnMpID09IDEpOworCisJCW5zdG10X2xpc3QgPSBsYXBwZW5kKG5zdG10X2xpc3QsIGxp bml0aWFsKHBsYW5zKSk7CisJfQorCisJcmV0dXJuIG5zdG10X2xpc3Q7Cit9CisKKy8qCisgKiBQ cm9jZXNzVXRpbGl0eSBob29rCisgKi8KK3N0YXRpYyB2b2lkCit0ZGVwYXJzZXJfUHJvY2Vzc1V0 aWxpdHkoUGxhbm5lZFN0bXQgKnBzdG10LCBjb25zdCBjaGFyICpxdWVyeVN0cmluZywKKwkJCQkJ CSBib29sIHJlYWRPbmx5VHJlZSwKKwkJCQkJCSBQcm9jZXNzVXRpbGl0eUNvbnRleHQgY29udGV4 dCwKKwkJCQkJCSBQYXJhbUxpc3RJbmZvIHBhcmFtcywgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlF bnYsCisJCQkJCQkgRGVzdFJlY2VpdmVyICpkZXN0LCBRdWVyeUNvbXBsZXRpb24gKnFjKQorewor CUxpc3QgKm5wbGFuX2xpc3Q7CisJTGlzdENlbGwgKmxjOworCUNvbW1hbmRUYWcgdGFnID0gQ3Jl YXRlQ29tbWFuZFRhZyhwc3RtdC0+dXRpbGl0eVN0bXQpOworCisJbmVzdGluZ19sZXZlbCsrOwor CVBHX1RSWSgpOworCXsKKwkJaWYgKG5lc3RpbmdfbGV2ZWwgPT0gMSAmJiBjb21tYW5kX3RhZ19l dmVudF90cmlnZ2VyX29rKHRhZykpCisJCQlucGxhbl9saXN0ID0gY2hhbmdlX2RlcGFyc2VkX3N0 bXQocHN0bXQsIHF1ZXJ5U3RyaW5nKTsKKwkJZWxzZQorCQkJbnBsYW5fbGlzdCA9IGxpc3RfbWFr ZTEocHN0bXQpOworCisJCWZvcmVhY2gobGMsIG5wbGFuX2xpc3QpCisJCXsKKwkJCVBsYW5uZWRT dG10ICpwbGFuID0gKFBsYW5uZWRTdG10ICopIGxmaXJzdChsYyk7CisJCQlpZiAocHJldl9Qcm9j ZXNzVXRpbGl0eSkKKwkJCQlwcmV2X1Byb2Nlc3NVdGlsaXR5KHBsYW4sIHF1ZXJ5U3RyaW5nLCBy ZWFkT25seVRyZWUsCisJCQkJCQkJCQljb250ZXh0LCBwYXJhbXMsIHF1ZXJ5RW52LAorCQkJCQkJ CQkJZGVzdCwgcWMpOworCQkJZWxzZQorCQkJCXN0YW5kYXJkX1Byb2Nlc3NVdGlsaXR5KHBsYW4s IHF1ZXJ5U3RyaW5nLCByZWFkT25seVRyZWUsCisJCQkJCQkJCQkJY29udGV4dCwgcGFyYW1zLCBx dWVyeUVudiwKKwkJCQkJCQkJCQlkZXN0LCBxYyk7CisJCX0KKwl9CisJUEdfRklOQUxMWSgpOwor CXsKKwkJaWYgKG5lc3RpbmdfbGV2ZWwgPT0gMSkKKwkJCWNtZF9jb3VudCsrOworCisJCW5lc3Rp bmdfbGV2ZWwtLTsKKwl9CisJUEdfRU5EX1RSWSgpOworfQorCisvKgorICogRXhlY3V0b3JSdW4g aG9vazogYWxsIHdlIG5lZWQgZG8gaXMgdHJhY2sgbmVzdGluZyBkZXB0aAorICovCitzdGF0aWMg dm9pZAordGRlcGFyc2VyX0V4ZWN1dG9yUnVuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbiwgdWludDY0IGNvdW50LAorCQkJYm9vbCBleGVjdXRlX29uY2UpCit7 CisJbmVzdGluZ19sZXZlbCsrOworCVBHX1RSWSgpOworCXsKKwkJaWYgKHByZXZfRXhlY3V0b3JS dW4pCisJCQlwcmV2X0V4ZWN1dG9yUnVuKHF1ZXJ5RGVzYywgZGlyZWN0aW9uLCBjb3VudCwgZXhl Y3V0ZV9vbmNlKTsKKwkJZWxzZQorCQkJc3RhbmRhcmRfRXhlY3V0b3JSdW4ocXVlcnlEZXNjLCBk aXJlY3Rpb24sIGNvdW50LCBleGVjdXRlX29uY2UpOworCX0KKwlQR19GSU5BTExZKCk7CisJewor CQluZXN0aW5nX2xldmVsLS07CisJfQorCVBHX0VORF9UUlkoKTsKK30KKworUEdfRlVOQ1RJT05f SU5GT19WMSh0ZHBhcnNlcl9nZXRfY21kY291bnQpOworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0 X2RlcGFyc2VyX2Ryb3BfY29tbWFuZCk7CisKK0RhdHVtCit0ZHBhcnNlcl9nZXRfY21kY291bnQo UEdfRlVOQ1RJT05fQVJHUykKK3sKKwlQR19SRVRVUk5fSU5UMzIoY21kX2NvdW50KTsKK30KKwor RGF0dW0KK3Rlc3RfZGVwYXJzZXJfZHJvcF9jb21tYW5kKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJ c2xpc3RfaXRlcglpdGVyOworCisJLyogRHJvcCBjb21tYW5kcyBhcmUgbm90IHBhcnQgY29tbWFu ZGxpc3QgYnV0IGhhbmRsZWQgaGVyZSBhcyBwYXJ0IG9mIFNRTERyb3BMaXN0ICovCisJc2xpc3Rf Zm9yZWFjaChpdGVyLCAmKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+U1FMRHJvcExpc3QpKQor CXsKKwkJU1FMRHJvcE9iamVjdCAqb2JqOworCQlFdmVudFRyaWdnZXJEYXRhICp0cmlnZGF0YTsK KworCQl0cmlnZGF0YSA9IChFdmVudFRyaWdnZXJEYXRhICopIGZjaW5mby0+Y29udGV4dDsKKwor CQlvYmogPSBzbGlzdF9jb250YWluZXIoU1FMRHJvcE9iamVjdCwgbmV4dCwgaXRlci5jdXIpOwor CisJCWlmICghb2JqLT5vcmlnaW5hbCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChzdHJjbXAob2Jq LT5vYmplY3R0eXBlLCAidGFibGUiKSA9PSAwKQorCQl7CisJCQljaGFyCSpjb21tYW5kOworCisJ CQljb21tYW5kID0gZGVwYXJzZV9kcm9wX3RhYmxlKG9iai0+b2JqaWRlbnRpdHksIHRyaWdkYXRh LT5wYXJzZXRyZWUpOworCQkJaWYgKGNvbW1hbmQpCisJCQl7CisJCQkJU3RyaW5nSW5mb0RhdGEg Y21kOworCisJCQkJY29tbWFuZCA9IGRlcGFyc2VfZGRsX2pzb25fdG9fc3RyaW5nKGNvbW1hbmQp OworCQkJCWluaXRTdHJpbmdJbmZvKCZjbWQpOworCisJCQkJYXBwZW5kU3RyaW5nSW5mbygmY21k LCAiSU5TRVJUIElOVE8gcGdfY2F0YWxvZy5kZXBhcnNlX3Rlc3RfY29tbWFuZHMgIgorCQkJCQkJ IihpZCwgdGVzdF9uYW1lLCBkZXBhcnNlX3RpbWUsIG9yaWdpbmFsX2NvbW1hbmQsIGNvbW1hbmQp ICIKKwkJCQkJCSJTRUxFQ1QgcHVibGljLnRkcGFyc2VyX2dldF9jbWRjb3VudCgpLCAiCisJCQkJ CQkiY3VycmVudF9zZXR0aW5nKCdhcHBsaWNhdGlvbl9uYW1lJyksICIKKwkJCQkJCSJjbG9ja190 aW1lc3RhbXAoKSwgY3VycmVudF9xdWVyeSgpLCAnJXMnIiwgY29tbWFuZCk7CisKKwkJCQkvKiBp bnNlcnQgZGVwYXJzZWQgc3RhdGVtZW50IGludG8gdGFibGUgKi8KKwkJCQlTUElfY29ubmVjdCgp OworCQkJCWlmIChTUElfZXhlYyhjbWQuZGF0YSwgOCkgIT0gU1BJX09LX0lOU0VSVCkKKwkJCQkJ ZWxvZyhFUlJPUiwgIlNQSV9leGVjIGZhaWxlZDogJXMiLCBjbWQuZGF0YSk7CisJCQkJU1BJX2Zp bmlzaCgpOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsK K30KKworLyogTW9kdWxlIGxvYWQgZnVuY3Rpb24gKi8KK3ZvaWQKK19QR19pbml0KHZvaWQpCit7 CisJRGVmaW5lQ3VzdG9tQm9vbFZhcmlhYmxlKCJ0ZXN0X2RlcGFyc2VyLmRlcGFyc2VfbW9kZSIs CisJCQkiQ2hhbmdlIHRoZSBzdGF0ZW1lbnQgdG8gZGVwYXJzZWQgb25lIiwKKwkJCU5VTEwsCisJ CQkmZGVwYXJzZV9tb2RlLAorCQkJZmFsc2UsCisJCQlQR0NfU1VTRVQsCisJCQkwLAorCQkJTlVM TCwKKwkJCU5VTEwsCisJCQlOVUxMKTsKKworCXByZXZfUHJvY2Vzc1V0aWxpdHkgPSBQcm9jZXNz VXRpbGl0eV9ob29rOworCVByb2Nlc3NVdGlsaXR5X2hvb2sgPSB0ZGVwYXJzZXJfUHJvY2Vzc1V0 aWxpdHk7CisKKwlwcmV2X0V4ZWN1dG9yUnVuID0gRXhlY3V0b3JSdW5faG9vazsKKwlFeGVjdXRv clJ1bl9ob29rID0gdGRlcGFyc2VyX0V4ZWN1dG9yUnVuOworfQpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2RlcGFyc2VyL3Rlc3RfZGVwYXJzZXIuY29uZiBiL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9kZXBhcnNlci90ZXN0X2RlcGFyc2VyLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMC4uMzU4NjViNWM1YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9kZXBhcnNlci90ZXN0X2RlcGFyc2VyLmNvbmYKQEAgLTAsMCArMSBA QAorc2Vzc2lvbl9wcmVsb2FkX2xpYnJhcmllcyA9ICd0ZXN0X2RlcGFyc2VyJwpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RlcGFyc2VyL3Rlc3RfZGVwYXJzZXIuY29udHJvbCBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZXBhcnNlci90ZXN0X2RlcGFyc2VyLmNvbnRyb2wKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYzNlOWVhZjA2NAotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZXBhcnNlci90ZXN0X2RlcGFyc2VyLmNv bnRyb2wKQEAgLTAsMCArMSw0IEBACitjb21tZW50ID0gJ1Rlc3QgY29kZSBmb3IgRERMIGRlcGFy c2UgZmVhdHVyZScKK2RlZmF1bHRfdmVyc2lvbiA9ICcxLjAnCittb2R1bGVfcGF0aG5hbWUgPSAn JGxpYmRpci90ZXN0X2RlcGFyc2VyJworcmVsb2NhdGFibGUgPSB0cnVlClwgTm8gbmV3bGluZSBh dCBlbmQgb2YgZmlsZQotLSAKMi4zMC4wLndpbmRvd3MuMgoK --_005_OS0PR01MB57163E6487EFF7378CB8E17C9438AOS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="0001-Deparser-for-Create-And-Drop-Table-DDL-co-2023_06_30.patch" Content-Description: 0001-Deparser-for-Create-And-Drop-Table-DDL-co-2023_06_30.patch Content-Disposition: attachment; filename="0001-Deparser-for-Create-And-Drop-Table-DDL-co-2023_06_30.patch"; size=100431; creation-date="Tue, 18 Jul 2023 07:04:19 GMT"; modification-date="Tue, 18 Jul 2023 07:09:21 GMT" Content-Transfer-Encoding: base64 RnJvbSBiNGVjNzNkNDI1OThlNzIxODI1MWQzNWRhMjljOGFhYzc3ODFhMzgxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaHZldGEgTWFsaWsgPHNodmV0YS5tYWxpa0BnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMjIgTWF5IDIwMjMgMDg6MzY6NDkgKzA1MzAKU3ViamVjdDogW1BBVENIIDEv NV0gRGVwYXJzZXIgZm9yIENyZWF0ZSBBbmQgRHJvcCBUYWJsZSBEREwgY29tbWFuZHMuCgpUaGlz IHBhdGNoIGNvbnN0cnVjdHMgSlNPTiBibG9icyByZXByZXNlbnRpbmcgRERMIGNvbW1hbmRzLCB3 aGljaCBjYW4KbGF0ZXIgYmUgcmUtcHJvY2Vzc2VkIGludG8gcGxhaW4gc3RyaW5ncyBieSB3ZWxs LWRlZmluZWQgc3ByaW50Zi1saWtlCmV4cGFuc2lvbi4gVGhlc2UgSlNPTiBvYmplY3RzIGFyZSBp bnRlbmRlZCB0byBhbGxvdyBmb3IgbWFjaGluZS1lZGl0aW5nIG9mCnRoZSBjb21tYW5kcywgYnkg cmVwbGFjaW5nIGNlcnRhaW4gbm9kZXMgd2l0aGluIHRoZSBvYmplY3RzLgoKTXVjaCBvZiB0aGUg aW5mb3JtYXRpb24gaW4gdGhlIG91dHB1dCBibG9iIGFjdHVhbGx5IGNvbWVzIGZyb20gc3lzdGVt CmNhdGFsb2dzLCBub3QgZnJvbSB0aGUgY29tbWFuZCBwYXJzZSBub2RlLCBhcyBpdCBpcyBpbXBv c3NpYmxlIHRvIHJlbGlhYmx5CmNvbnN0cnVjdCBhIGZ1bGx5LXNwZWNpZmllZCBjb21tYW5kIChp LmUuIG9uZSBub3QgZGVwZW5kZW50IG9uIHNlYXJjaF9wYXRoCmV0YykgbG9va2luZyBvbmx5IGF0 IHRoZSBwYXJzZSBub2RlLgoKVGhpcyBwcm92aWRlcyBhIGJhc2UgZm9yIGxvZ2ljYWwgcmVwbGlj YXRpb24gb2YgRERMIHN0YXRlbWVudHMuIEN1cnJlbnRseSwKdGhlIHBhdGNoIGhhcyBzdXBwb3J0 IGZvciBDUkVBVEUgYW5kIERST1AgVEFCTEUKLS0tCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX2lu aGVyaXRzLmMgICAgIHwgICAzNiArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZSAgICAg ICAgIHwgICAgMiArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxkZXBhcnNlLmMgICAgIHwgMTg5 MSArKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxqc29u LmMgICAgICAgIHwgIDc1OSArKysrKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90 cmlnZ2VyLmMgIHwgICAgMSArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9tZXNvbi5idWlsZCAgICAg IHwgICAgMiArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jICAgICAgIHwgICA0MyAr CiBzcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyAgICAgIHwgICAgMyArLQogc3JjL2Jh Y2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYyAgICB8ICAgIDEgKwogc3JjL2JhY2tlbmQvcGFy dGl0aW9uaW5nL3BhcnRib3VuZHMuYyB8ICAgMjggKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zv cm1hdF90eXBlLmMgICB8ICAxMDggKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMu YyAgICAgfCAgIDUyICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2luaGVyaXRzLmggICAgIHwg ICAgMiArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgIHwgICAgNyArCiBz cmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oICAgICAgIHwgICAgOSArCiBzcmMvaW5jbHVk ZS9jb21tYW5kcy90YWJsZWNtZHMuaCAgICAgIHwgICAgMiArCiBzcmMvaW5jbHVkZS9ub2Rlcy9w YXJzZW5vZGVzLmggICAgICAgIHwgICAgMSArCiBzcmMvaW5jbHVkZS9wYXJ0aXRpb25pbmcvcGFy dGJvdW5kcy5oIHwgICAgMiArCiBzcmMvaW5jbHVkZS90Y29wL2RkbGRlcGFyc2UuaCAgICAgICAg IHwgICAyMSArCiBzcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oICAgICAgICAgIHwgICAgNSAr CiBzcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaCAgICAgICAgIHwgICAxMyArCiBzcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgIHwgICAgMiArCiAyMiBmaWxlcyBjaGFuZ2Vk LCAyOTc0IGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbGRlcGFyc2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy9iYWNrZW5kL2NvbW1hbmRzL2RkbGpzb24uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNs dWRlL3Rjb3AvZGRsZGVwYXJzZS5oCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9w Z19pbmhlcml0cy5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19pbmhlcml0cy5jCmluZGV4IGRh OTY5YmQyZjkuLjM2YjE2NDU3NWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdf aW5oZXJpdHMuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMKQEAgLTY1 NSwzICs2NTUsMzkgQEAgUGFydGl0aW9uSGFzUGVuZGluZ0RldGFjaChPaWQgcGFydG9pZCkKIAll bG9nKEVSUk9SLCAicmVsYXRpb24gJXUgaXMgbm90IGEgcGFydGl0aW9uIiwgcGFydG9pZCk7CiAJ cmV0dXJuIGZhbHNlOwkJCQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCiB9CisKKy8qCisgKiBH aXZlbiBhIHRhYmxlIE9JRCwgcmV0dXJuIGEgc2NoZW1hLXF1YWxpZmllZCB0YWJsZSBsaXN0IHJl cHJlc2VudGluZworICogdGhlIHBhcmVudCB0YWJsZXMuCisgKi8KK0xpc3QgKgorcmVsYXRpb25f Z2V0X2luaF9wYXJlbnRzKE9pZCBvYmplY3RJZCkKK3sKKwlMaXN0CSAgICpwYXJlbnRzID0gTklM OworCVJlbGF0aW9uCWluaFJlbDsKKwlTeXNTY2FuRGVzYyBzY2FuOworCVNjYW5LZXlEYXRhIGtl eTsKKwlIZWFwVHVwbGUJdHVwbGU7CisKKwlpbmhSZWwgPSB0YWJsZV9vcGVuKEluaGVyaXRzUmVs YXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlTY2FuS2V5SW5pdCgma2V5LAorCQkJCUFu dW1fcGdfaW5oZXJpdHNfaW5ocmVsaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09J REVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKworCXNjYW4gPSBzeXN0YWJs ZV9iZWdpbnNjYW4oaW5oUmVsLCBJbmhlcml0c1JlbGlkU2Vxbm9JbmRleElkLAorCQkJCQkJCSAg dHJ1ZSwgTlVMTCwgMSwgJmtleSk7CisKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSA9 IHN5c3RhYmxlX2dldG5leHQoc2NhbikpKQorCXsKKwkJRm9ybV9wZ19pbmhlcml0cyBmb3JtSW5o ID0gKEZvcm1fcGdfaW5oZXJpdHMpIEdFVFNUUlVDVCh0dXBsZSk7CisKKwkJcGFyZW50cyA9IGxh cHBlbmRfb2lkKHBhcmVudHMsIGZvcm1JbmgtPmluaHBhcmVudCk7CisJfQorCisJc3lzdGFibGVf ZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShpbmhSZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOwor CisJcmV0dXJuIHBhcmVudHM7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9N YWtlZmlsZSBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCmluZGV4IDQ4ZjczNDhmOTEu LjA3NmFjNGViMzEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCkBAIC0yOSw2ICsyOSw4IEBAIE9CSlMg PSBcCiAJY29weXRvLm8gXAogCWNyZWF0ZWFzLm8gXAogCWRiY29tbWFuZHMubyBcCisJZGRsZGVw YXJzZS5vIFwKKwlkZGxqc29uLm8gXAogCWRlZmluZS5vIFwKIAlkaXNjYXJkLm8gXAogCWRyb3Bj bWRzLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsZGVwYXJzZS5jIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsZGVwYXJzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAuLmM4ZTg4NWNhMWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9kZGxkZXBhcnNlLmMKQEAgLTAsMCArMSwxODkxIEBACisvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqCisgKiBkZGxkZXBhcnNlLmMKKyAqCSAgRnVuY3Rpb25zIHRvIGNvbnZlcnQgdXRp bGl0eSBjb21tYW5kcyB0byBtYWNoaW5lLXBhcnNlYWJsZQorICoJICByZXByZXNlbnRhdGlvbgor ICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIzLCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdl bnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBOT1RFUworICoKKyAq IFRoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBKU09OIGJsb2JzIHJlcHJlc2VudGluZyBEREwg Y29tbWFuZHMsIHdoaWNoIGNhbgorICogbGF0ZXIgYmUgcmUtcHJvY2Vzc2VkIGludG8gcGxhaW4g c3RyaW5ncyBieSB3ZWxsLWRlZmluZWQgc3ByaW50Zi1saWtlCisgKiBleHBhbnNpb24uICBUaGVz ZSBKU09OIG9iamVjdHMgYXJlIGludGVuZGVkIHRvIGFsbG93IGZvciBtYWNoaW5lLWVkaXRpbmcg b2YKKyAqIHRoZSBjb21tYW5kcywgYnkgcmVwbGFjaW5nIGNlcnRhaW4gbm9kZXMgd2l0aGluIHRo ZSBvYmplY3RzLgorICoKKyAqIE11Y2ggb2YgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBvdXRwdXQg YmxvYiBhY3R1YWxseSBjb21lcyBmcm9tIHN5c3RlbQorICogY2F0YWxvZ3MsIG5vdCBmcm9tIHRo ZSBjb21tYW5kIHBhcnNlIG5vZGUsIGFzIGl0IGlzIGltcG9zc2libGUgdG8gcmVsaWFibHkKKyAq IGNvbnN0cnVjdCBhIGZ1bGx5LXNwZWNpZmllZCBjb21tYW5kIChpLmUuIG9uZSBub3QgZGVwZW5k ZW50IG9uIHNlYXJjaF9wYXRoCisgKiBldGMpIGxvb2tpbmcgb25seSBhdCB0aGUgcGFyc2Ugbm9k ZS4KKyAqCisgKiBEZXBhcnNlZCBKc29uYlZhbHVlIGlzIGNyZWF0ZWQgYnkgdXNpbmc6CisgKiAJ bmV3X2pzb25iX1ZBIHdoZXJlIHRoZSBrZXktdmFsdWUgcGFpcnMgY29tcG9zaW5nIGFuIGpzb25i IG9iamVjdCBjYW4gYmUKKyAqIAlkZXJpdmVkIHVzaW5nIHRoZSBwYXNzZWQgdmFyaWFibGUgYXJn dW1lbnRzLiBJbiBvcmRlciB0byBzdWNjZXNzZnVsbHkKKyAqICBjb25zdHJ1Y3Qgb25lIGtleTp2 YWx1ZSBwYWlyLCBhIHNldCBvZiB0aHJlZSBhcmd1bWVudHMgY29uc2lzdGluZyBvZiBhIG5hbWUK KyAqIAkoc3RyaW5nKSwgdHlwZSAoZnJvbSB0aGUgamJ2VHlwZSBlbnVtKSBhbmQgdmFsdWUgbXVz dCBiZSBzdXBwbGllZC4gSXQgY2FuCisgKiAgdGFrZSBtdWx0aXBsZSBzdWNoIHNldHMgYW5kIGNv bnN0cnVjdCBtdWx0aXBsZSBrZXktdmFsdWUgcGFpcnMgYW5kIGFwcGVuZAorICogIHRob3NlIHRv IG91dHB1dCBwYXJzZS1zdGF0ZS4KKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFj a2VuZC9jb21tYW5kcy9kZGxkZXBhcnNlLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor I2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvYW1hcGkuaCIKKyNpbmNs dWRlICJhY2Nlc3MvcmVsYXRpb24uaCIKKyNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKKyNpbmNs dWRlICJjYXRhbG9nL25hbWVzcGFjZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9u LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb25zdHJhaW50LmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ19kZXBlbmQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2luaGVyaXRzLmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wZ19uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3Byb2MuaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0u aCIKKyNpbmNsdWRlICJjb21tYW5kcy9zZXF1ZW5jZS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3Rh Ymxlc3BhY2UuaCIKKyNpbmNsdWRlICJjb21tYW5kcy90YWJsZWNtZHMuaCIKKyNpbmNsdWRlICJm dW5jYXBpLmgiCisjaW5jbHVkZSAicGFydGl0aW9uaW5nL3BhcnRib3VuZHMuaCIKKyNpbmNsdWRl ICJ0Y29wL2RkbGRlcGFyc2UuaCIKKyNpbmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIKKyNpbmNsdWRl ICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCisjaW5jbHVk ZSAidXRpbHMvanNvbmIuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRl ICJ1dGlscy9yZWwuaCIKKyNpbmNsdWRlICJ1dGlscy9ydWxldXRpbHMuaCIKKyNpbmNsdWRlICJ1 dGlscy9zeXNjYWNoZS5oIgorCisvKiBFc3RpbWF0ZWQgbGVuZ3RoIG9mIHRoZSBnZW5lcmF0ZWQg anNvbmIgc3RyaW5nICovCisjZGVmaW5lIEpTT05CX0VTVElNQVRFRF9MRU4gMTI4CisKKy8qCisg KiBSZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gUkVMUEVSU0lT VEVOQ0UgdmFsdWUuCisgKi8KK3N0YXRpYyBjaGFyICoKK2dldF9wZXJzaXN0ZW5jZV9zdHIoY2hh ciBwZXJzaXN0ZW5jZSkKK3sKKwlzd2l0Y2ggKHBlcnNpc3RlbmNlKQorCXsKKwkJY2FzZSBSRUxQ RVJTSVNURU5DRV9URU1QOgorCQkJcmV0dXJuICJURU1QT1JBUlkiOworCQljYXNlIFJFTFBFUlNJ U1RFTkNFX1VOTE9HR0VEOgorCQkJcmV0dXJuICJVTkxPR0dFRCI7CisJCWNhc2UgUkVMUEVSU0lT VEVOQ0VfUEVSTUFORU5UOgorCQkJcmV0dXJuIE5VTEw7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVS Uk9SLCAidW5leHBlY3RlZCBwZXJzaXN0ZW5jZSBtYXJraW5nICVjIiwKKwkJCQkgcGVyc2lzdGVu Y2UpOworCQkJcmV0dXJuIE5VTEw7CQkvKiBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisJfQorfQor CisvKgorICogSW5zZXJ0IEpzb25iVmFsdWUga2V5IHRvIHRoZSBvdXRwdXQgcGFyc2Ugc3RhdGUu CisgKi8KK3N0YXRpYyB2b2lkCitpbnNlcnRfanNvbmJfa2V5KEpzb25iUGFyc2VTdGF0ZSAqc3Rh dGUsIGNoYXIgKm5hbWUpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisKKwkvKiBQdXNoIHRoZSBrZXkg Ki8KKwlrZXkudHlwZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwgPSBuYW1lOwor CWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihuYW1lKTsKKwlwdXNoSnNvbmJWYWx1ZSgmc3Rh dGUsIFdKQl9LRVksICZrZXkpOworfQorCisvKgorICogQXBwZW5kIG5ldyBqc29uYiBrZXk6dmFs dWUgcGFpcnMgdG8gdGhlIG91dHB1dCBwYXJzZSBzdGF0ZSAtLSB2YXJhcmdzCisgKiBmdW5jdGlv bgorICoKKyAqIEFyZ3VtZW50czoKKyAqICJzdGF0ZSI6IHRoZSBvdXRwdXQganNvbmIgc3RhdGUg d2hlcmUgZWFjaCBrZXktdmFsdWUgcGFpciBpcyBwdXNoZWQuCisgKgorICogIm51bW9ianMiOiB0 aGUgbnVtYmVyIG9mIGtleTp2YWx1ZSBwYWlycyB0byBiZSBwdXNoZWQgdG8gSnNvbmJQYXJzZVN0 YXRlOworICogZm9yIGVhY2ggb25lLCBhIG5hbWUgKHN0cmluZyksIHR5cGUgKGZyb20gdGhlIGpi dlR5cGUgZW51bSkgYW5kIHZhbHVlIG11c3QKKyAqIGJlIHN1cHBsaWVkLiAgVGhlIHZhbHVlIG11 c3QgbWF0Y2ggdGhlIHR5cGUgZ2l2ZW47IGZvciBpbnN0YW5jZSwgamJ2Qm9vbAorICogcmVxdWly ZXMgYW4gYm9vbCwgamJ2U3RyaW5nIHJlcXVpcmVzIGEgY2hhciAqIGFuZCBzbyBvbi4KKyAqIEVh Y2ggZWxlbWVudCB0eXBlIG11c3QgbWF0Y2ggdGhlIGNvbnZlcnNpb24gc3BlY2lmaWVyIGdpdmVu IGluIHRoZSBmb3JtYXQKKyAqIHN0cmluZywgYXMgZGVzY3JpYmVkIGluIGRkbF9kZXBhcnNlX2V4 cGFuZF9jb21tYW5kLgorICoKKyAqIE5vdGVzOgorICogYSkgVGhlIGNhbGxlciBjYW4gcGFzcyAi Zm10IjoiZm10c3RyIiBhcyBhIHJlZ3VsYXIga2V5OnZhbHVlIHBhaXIgdG8gdGhpcywKKyAqIG5v IHNwZWNpYWwgaGFuZGxpbmcgbmVlZGVkIGZvciB0aGF0LgorICogYikgVGhlIGNhbGxlciBuZWVk IHRvIGNhcmVmdWxseSBwYXNzIHNldHMgb2YgYXJndW1lbnRzLCB3ZSBkb24ndCBoYXZlIHRoZQor ICogbHV4dXJ5IG9mIHNwcmludGYtbGlrZSBjb21waWxlciB3YXJuaW5ncyBmb3IgbWFsZm9ybWVk IGFyZ3VtZW50IGxpc3RzLgorICovCitzdGF0aWMgdm9pZAorbmV3X2pzb25iX1ZBKEpzb25iUGFy c2VTdGF0ZSAqc3RhdGUsIGludCBudW1vYmpzLC4uLikKK3sKKwl2YV9saXN0CQlhcmdzOworCWlu dAkJCWk7CisJSnNvbmJWYWx1ZQl2YWw7CisKKwkvKiBQcm9jZXNzIHRoZSBnaXZlbiB2YXJhcmdz ICovCisJdmFfc3RhcnQoYXJncywgbnVtb2Jqcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtb2Jq czsgaSsrKQorCXsKKwkJY2hhcgkgICAqbmFtZTsKKwkJZW51bSBqYnZUeXBlIHR5cGU7CisKKwkJ bmFtZSA9IHZhX2FyZyhhcmdzLCBjaGFyICopOworCQl0eXBlID0gdmFfYXJnKGFyZ3MsIGVudW0g amJ2VHlwZSk7CisKKwkJLyogUHVzaCB0aGUga2V5IGZpcnN0ICovCisJCWluc2VydF9qc29uYl9r ZXkoc3RhdGUsIG5hbWUpOworCisJCS8qCisJCSAqIEZvciBhbGwgcGFyYW0gdHlwZXMgb3RoZXIg dGhhbiBqYnZOdWxsLCB0aGVyZSBtdXN0IGJlIGEgdmFsdWUgaW4KKwkJICogdGhlIHZhcmFyZ3Mu IEZldGNoIGl0IGFuZCBhZGQgdGhlIGZ1bGx5IGZvcm1lZCBzdWJvYmplY3QgaW50byB0aGUKKwkJ ICogbWFpbiBvYmplY3QuCisJCSAqLworCQlzd2l0Y2ggKHR5cGUpCisJCXsKKwkJCWNhc2UgamJ2 TnVsbDoKKwkJCQkvKiBOdWxsIHBhcmFtcyBkb24ndCBoYXZlIGEgdmFsdWUgKG9idmlvdXNseSkg Ki8KKwkJCQl2YWwudHlwZSA9IGpidk51bGw7CisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBX SkJfVkFMVUUsICZ2YWwpOworCQkJCWJyZWFrOworCisJCQljYXNlIGpidkJvb2w6CisJCQkJLyog UHVzaCB0aGUgYm9vbCB2YWx1ZSAqLworCQkJCXZhbC50eXBlID0gamJ2Qm9vbDsKKwkJCQl2YWwu dmFsLmJvb2xlYW4gPSB2YV9hcmcoYXJncywgaW50KTsKKwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3Rh dGUsIFdKQl9WQUxVRSwgJnZhbCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgamJ2U3RyaW5nOgor CQkJCS8qIFB1c2ggdGhlIHN0cmluZyB2YWx1ZSAqLworCQkJCXZhbC50eXBlID0gamJ2U3RyaW5n OworCQkJCXZhbC52YWwuc3RyaW5nLnZhbCA9IHBzdHJkdXAodmFfYXJnKGFyZ3MsIGNoYXIgKikp OworCQkJCXZhbC52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbih2YWwudmFsLnN0cmluZy52YWwpOwor CQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX1ZBTFVFLCAmdmFsKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBqYnZOdW1lcmljOgorCQkJCS8qIFB1c2ggdGhlIG51bWVyaWMgdmFsdWUgKi8K KwkJCQl2YWwudHlwZSA9IGpidk51bWVyaWM7CisJCQkJdmFsLnZhbC5udW1lcmljID0gKE51bWVy aWMpCisJCQkJCURhdHVtR2V0TnVtZXJpYyhEaXJlY3RGdW5jdGlvbkNhbGwxKAorCQkJCQkJCQkJ CQkJCQlpbnQ4X251bWVyaWMsCisJCQkJCQkJCQkJCQkJCXZhX2FyZyhhcmdzLCBpbnQpKSk7CisK KwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9WQUxVRSwgJnZhbCk7CisJCQkJYnJlYWs7 CisKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBqYnZUeXBlICVk IiwgdHlwZSk7CisJCX0KKwl9CisKKwl2YV9lbmQoYXJncyk7Cit9CisKKy8qCisgKiBBIGhlbHBl ciByb3V0aW5lIHRvIGluc2VydCBqc29uYiBmb3IgdHlwSWQgdG8gdGhlIG91dHB1dCBwYXJzZSBz dGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK25ld19qc29uYl9mb3JfdHlwZShKc29uYlBhcnNlU3Rh dGUgKnN0YXRlLCBjaGFyICpwYXJlbnRLZXksCisJCQkJICAgT2lkIHR5cElkLCBpbnQzMiB0eXBt b2QpCit7CisJT2lkCQkJdHlwbnNwaWQ7CisJY2hhcgkgICAqdHlwZV9uc3A7CisJY2hhcgkgICAq dHlwZV9uYW1lID0gTlVMTDsKKwljaGFyCSAgICp0eXBtb2RzdHI7CisJYm9vbAkJdHlwZV9hcnJh eTsKKworCUFzc2VydChwYXJlbnRLZXkpOworCisJZm9ybWF0X3R5cGVfZGV0YWlsZWQodHlwSWQs IHR5cG1vZCwgJnR5cG5zcGlkLCAmdHlwZV9uYW1lLCAmdHlwbW9kc3RyLAorCQkJCQkJICZ0eXBl X2FycmF5KTsKKworCWlmIChPaWRJc1ZhbGlkKHR5cG5zcGlkKSkKKwkJdHlwZV9uc3AgPSBnZXRf bmFtZXNwYWNlX25hbWVfb3JfdGVtcCh0eXBuc3BpZCk7CisJZWxzZQorCQl0eXBlX25zcCA9IHBz dHJkdXAoIiIpOworCisJaW5zZXJ0X2pzb25iX2tleShzdGF0ZSwgcGFyZW50S2V5KTsKKwlwdXNo SnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCW5ld19qc29uYl9W QShzdGF0ZSwgNCwKKwkJCQkgInNjaGVtYW5hbWUiLCBqYnZTdHJpbmcsIHR5cGVfbnNwLAorCQkJ CSAidHlwZW5hbWUiLCBqYnZTdHJpbmcsIHR5cGVfbmFtZSwKKwkJCQkgInR5cG1vZCIsIGpidlN0 cmluZywgdHlwbW9kc3RyLAorCQkJCSAidHlwYXJyYXkiLCBqYnZCb29sLCB0eXBlX2FycmF5KTsK KwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKK30KKworLyoK KyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0IHVwIG5hbWU6IHNjaGVtYW5hbWUsIG9iam5hbWUK KyAqCisgKiBFbGVtZW50cyAic2NoZW1hX25hbWUiIGFuZCAib2JqX25hbWUiIGFyZSBzZXQuICBJ ZiB0aGUgbmFtZXNwYWNlIE9JRAorICogY29ycmVzcG9uZHMgdG8gYSB0ZW1wIHNjaGVtYSwgdGhh dCdzIHNldCB0byAicGdfdGVtcCIuCisgKgorICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aG9z ZSB0d28gZWxlbWVudCB0eXBlcyBpcyB3aGV0aGVyIHRoZSBvYmpfbmFtZSB3aWxsCisgKiBiZSBx dW90ZWQgYXMgYW4gaWRlbnRpZmllciBvciBub3QsIHdoaWNoIGlzIG5vdCBzb21ldGhpbmcgdGhh dCB0aGlzIHJvdXRpbmUKKyAqIGNvbmNlcm5zIGl0c2VsZiB3aXRoOyB0aGF0IHdpbGwgYmUgdXAg dG8gdGhlIGV4cGFuZCBmdW5jdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK25ld19qc29uYl9mb3Jf cXVhbG5hbWUoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgT2lkIG5zcGlkLCBjaGFyICpvYmpOYW1l LAorCQkJCQkgICBjaGFyICprZXlOYW1lLCBib29sIGNyZWF0ZU9iamVjdCkKK3sKKwljaGFyCSAg ICpuYW1lc3BhY2U7CisKKwlpZiAoaXNBbnlUZW1wTmFtZXNwYWNlKG5zcGlkKSkKKwkJbmFtZXNw YWNlID0gcHN0cmR1cCgicGdfdGVtcCIpOworCWVsc2UKKwkJbmFtZXNwYWNlID0gZ2V0X25hbWVz cGFjZV9uYW1lKG5zcGlkKTsKKworCS8qIFB1c2ggdGhlIGtleSBmaXJzdCAqLworCWlmIChrZXlO YW1lKQorCQlpbnNlcnRfanNvbmJfa2V5KHN0YXRlLCBrZXlOYW1lKTsKKworCWlmIChjcmVhdGVP YmplY3QpCisJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7 CisKKwluZXdfanNvbmJfVkEoc3RhdGUsIDIsCisJCQkJICJzY2hlbWFuYW1lIiwgamJ2U3RyaW5n LCBuYW1lc3BhY2UsCisJCQkJICJvYmpuYW1lIiwgamJ2U3RyaW5nLCBvYmpOYW1lKTsKKworCWlm IChjcmVhdGVPYmplY3QpCisJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1Qs IE5VTEwpOworfQorCisvKgorICogQSBoZWxwZXIgcm91dGluZSB0byBzZXQgdXAgbmFtZTogJ3Nj aGVtYW5hbWUsIG9iam5hbWUnIHdoZXJlIHRoZSBvYmplY3QgaXMKKyAqIHNwZWNpZmllZCBieSBj bGFzc0lkIGFuZCBvYmpJZC4KKyAqLworc3RhdGljIHZvaWQKK25ld19qc29uYl9mb3JfcXVhbG5h bWVfaWQoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgT2lkIGNsYXNzSWQsIE9pZCBvYmplY3RJZCwK KwkJCQkJCSAgY2hhciAqa2V5TmFtZSwgYm9vbCBjcmVhdGVPYmplY3QpCit7CisJUmVsYXRpb24J Y2F0YWxvZzsKKwlIZWFwVHVwbGUJY2F0b2JqOworCURhdHVtCQlvYmpfbnNwOworCURhdHVtCQlv YmpfbmFtZTsKKwlBdHRyTnVtYmVyCUFudW1fbmFtZTsKKwlBdHRyTnVtYmVyCUFudW1fbmFtZXNw YWNlOworCUF0dHJOdW1iZXIJQW51bV9vaWQgPSBnZXRfb2JqZWN0X2F0dG51bV9vaWQoY2xhc3NJ ZCk7CisJYm9vbAkJaXNudWxsOworCisJY2F0YWxvZyA9IHRhYmxlX29wZW4oY2xhc3NJZCwgQWNj ZXNzU2hhcmVMb2NrKTsKKworCWNhdG9iaiA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQoY2F0 YWxvZywgQW51bV9vaWQsIG9iamVjdElkKTsKKwlpZiAoIWNhdG9iaikKKwkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9iamVjdCB3aXRoIE9JRCAldSBvZiBjYXRhbG9nIFwi JXNcIiIsCisJCQkgb2JqZWN0SWQsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGNhdGFsb2cpKTsK KwlBbnVtX25hbWUgPSBnZXRfb2JqZWN0X2F0dG51bV9uYW1lKGNsYXNzSWQpOworCUFudW1fbmFt ZXNwYWNlID0gZ2V0X29iamVjdF9hdHRudW1fbmFtZXNwYWNlKGNsYXNzSWQpOworCisJb2JqX25z cCA9IGhlYXBfZ2V0YXR0cihjYXRvYmosIEFudW1fbmFtZXNwYWNlLCBSZWxhdGlvbkdldERlc2Ny KGNhdGFsb2cpLAorCQkJCQkJICAgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJP UiwgIm51bGwgbmFtZXNwYWNlIGZvciBvYmplY3QgJXUiLCBvYmplY3RJZCk7CisKKwlvYmpfbmFt ZSA9IGhlYXBfZ2V0YXR0cihjYXRvYmosIEFudW1fbmFtZSwgUmVsYXRpb25HZXREZXNjcihjYXRh bG9nKSwKKwkJCQkJCQkmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCQllbG9nKEVSUk9SLCAibnVs bCBhdHRyaWJ1dGUgbmFtZSBmb3Igb2JqZWN0ICV1Iiwgb2JqZWN0SWQpOworCisJbmV3X2pzb25i X2Zvcl9xdWFsbmFtZShzdGF0ZSwgRGF0dW1HZXRPYmplY3RJZChvYmpfbnNwKSwKKwkJCQkJCSAg IE5hbWVTdHIoKkRhdHVtR2V0TmFtZShvYmpfbmFtZSkpLAorCQkJCQkJICAga2V5TmFtZSwgY3Jl YXRlT2JqZWN0KTsKKwl0YWJsZV9jbG9zZShjYXRhbG9nLCBBY2Nlc3NTaGFyZUxvY2spOworfQor CisvKgorICogQSBoZWxwZXIgcm91dGluZSB0byBpbnNlcnQga2V5OnZhbHVlIHdoZXJlIHZhbHVl IGlzIGFycmF5IG9mIHF1YWxuYW1lIHRvCisgKiB0aGUgb3V0cHV0IHBhcnNlIHN0YXRlLgorICov CitzdGF0aWMgdm9pZAorbmV3X2pzb25iQXJyYXlfZm9yX3F1YWxuYW1lX2lkKEpzb25iUGFyc2VT dGF0ZSAqc3RhdGUsCisJCQkJCQkJICAgY2hhciAqa2V5bmFtZSwgTGlzdCAqYXJyYXkpCit7CisJ TGlzdENlbGwgICAqbGM7CisKKwkvKiBQdXNoIHRoZSBrZXkgZmlyc3QgKi8KKwlpbnNlcnRfanNv bmJfa2V5KHN0YXRlLCBrZXluYW1lKTsKKworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JF R0lOX0FSUkFZLCBOVUxMKTsKKworCS8qIFB1c2ggdGhlIGFycmF5IGVsZW1lbnRzIG5vdyAqLwor CWZvcmVhY2gobGMsIGFycmF5KQorCQluZXdfanNvbmJfZm9yX3F1YWxuYW1lX2lkKHN0YXRlLCBS ZWxhdGlvblJlbGF0aW9uSWQsIGxmaXJzdF9vaWQobGMpLAorCQkJCQkJCQkgIE5VTEwsIHRydWUp OworCisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX0FSUkFZLCBOVUxMKTsKK30KKwor LyoKKyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gaW5zZXJ0IGNvbGxhdGUgb2JqZWN0IGZvciBjb2x1 bW4KKyAqIGRlZmluaXRpb24gdG8gdGhlIG91dHB1dCBwYXJzZSBzdGF0ZS4KKyAqLworc3RhdGlj IHZvaWQKK2luc2VydF9jb2xsYXRlX29iamVjdChKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBjaGFy ICpwYXJlbnRLZXksIGNoYXIgKmZtdCwKKwkJCQkJICBPaWQgY2xhc3NJZCwgT2lkIG9iamVjdElk LCBjaGFyICprZXkpCit7CisJLyoKKwkgKiBJbnNlcnQgcGFyZW50IGtleSBmb3Igd2hpY2ggd2Ug YXJlIGdvaW5nIHRvIGNyZWF0ZSB2YWx1ZSBvYmplY3QgaGVyZS4KKwkgKi8KKwlpZiAocGFyZW50 S2V5KQorCQlpbnNlcnRfanNvbmJfa2V5KHN0YXRlLCBwYXJlbnRLZXkpOworCisJcHVzaEpzb25i VmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKworCW5ld19qc29uYl9WQShz dGF0ZSwgMSwgImZtdCIsIGpidlN0cmluZywgZm10KTsKKworCS8qIHB1c2ggb2JqZWN0IG5vdyAq LworCW5ld19qc29uYl9mb3JfcXVhbG5hbWVfaWQoc3RhdGUsIGNsYXNzSWQsIG9iamVjdElkLCBr ZXksIHRydWUpOworCisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVM TCk7Cit9CisKKy8qCisgKiBBIGhlbHBlciByb3V0aW5lIHRvIGluc2VydCBpZGVudGl0eSBvYmpl Y3QgZm9yIHRoZSB0YWJsZSBkZWZpbml0aW9uCisgKiB0byB0aGUgb3V0cHV0IHBhcnNlIHN0YXRl LgorICovCitzdGF0aWMgdm9pZAoraW5zZXJ0X2lkZW50aXR5X29iamVjdChKc29uYlBhcnNlU3Rh dGUgKnN0YXRlLCBPaWQgbnNwaWQsIGNoYXIgKnJlbG5hbWUpCit7CisJbmV3X2pzb25iX2Zvcl9x dWFsbmFtZShzdGF0ZSwgbnNwaWQsIHJlbG5hbWUsICJpZGVudGl0eSIsIHRydWUpOworfQorCisv KgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgQ0FDSEUgb3B0aW9uIHRvIEpzb25iCisgKgorICog VmVyYm9zZSBzeW50YXgKKyAqIENBQ0hFICV7dmFsdWV9CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9p ZAorZGVwYXJzZV9TZXFfQ2FjaGUoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgRm9ybV9wZ19zZXF1 ZW5jZSBzZXFkYXRhKQoreworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVD VCwgTlVMTCk7CisJbmV3X2pzb25iX1ZBKHN0YXRlLCAzLAorCQkJCSAiZm10IiwgamJ2U3RyaW5n LCAiQ0FDSEUgJXt2YWx1ZX1zIiwKKwkJCQkgImNsYXVzZSIsIGpidlN0cmluZywgImNhY2hlIiwK KwkJCQkgInZhbHVlIiwgamJ2U3RyaW5nLAorCQkJCSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNl cWRhdGEtPnNlcWNhY2hlKSk7CisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVD VCwgTlVMTCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBDWUNMRSBvcHRpb24g dG8gSnNvbmIuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqICV7bm99cyBDWUNMRQorICovCitz dGF0aWMgaW5saW5lIHZvaWQKK2RlcGFyc2VfU2VxX0N5Y2xlKEpzb25iUGFyc2VTdGF0ZSAqc3Rh dGUsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSkKK3sKKwlTdHJpbmdJbmZvRGF0YSBmbXRTdHI7 CisKKwlpbml0U3RyaW5nSW5mbygmZm10U3RyKTsKKworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwg V0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisKKwlpZiAoIXNlcWRhdGEtPnNlcWN5Y2xlKQorCXsK KwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3RyLCAiJXtub31zICIpOworCQluZXdfanNv bmJfVkEoc3RhdGUsIDEsICJubyIsIGpidlN0cmluZywgIk5PIik7CisJfQorCisJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmZm10U3RyLCAiQ1lDTEUiKTsKKwluZXdfanNvbmJfVkEoc3RhdGUsIDIs CisJCQkJICJmbXQiLCBqYnZTdHJpbmcsIGZtdFN0ci5kYXRhLAorCQkJCSAiY2xhdXNlIiwgamJ2 U3RyaW5nLCAiY3ljbGUiKTsKKworCXBmcmVlKGZtdFN0ci5kYXRhKTsKKwlwdXNoSnNvbmJWYWx1 ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhl IHNlcXVlbmNlIElOQ1JFTUVOVCBCWSBvcHRpb24gdG8gSnNvbmIKKyAqCisgKiBWZXJib3NlIHN5 bnRheAorICogSU5DUkVNRU5UIEJZICV7dmFsdWV9cworICovCitzdGF0aWMgaW5saW5lIHZvaWQK K2RlcGFyc2VfU2VxX0luY3JlbWVudEJ5KEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIEZvcm1fcGdf c2VxdWVuY2Ugc2VxZGF0YSkKK3sKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9P QkpFQ1QsIE5VTEwpOworCW5ld19qc29uYl9WQShzdGF0ZSwgMywKKwkJCQkgImZtdCIsIGpidlN0 cmluZywgIklOQ1JFTUVOVCBCWSAle3ZhbHVlfXMiLAorCQkJCSAiY2xhdXNlIiwgamJ2U3RyaW5n LCAic2VxaW5jcmVtZW50IiwKKwkJCQkgInZhbHVlIiwgamJ2U3RyaW5nLAorCQkJCSBwc3ByaW50 ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcWluY3JlbWVudCkpOworCXB1c2hKc29uYlZhbHVl KCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworfQorCisvKgorICogRGVwYXJzZSB0aGUg c2VxdWVuY2UgTUFYVkFMVUUgb3B0aW9uIHRvIEpzb25iLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4 CisgKiBNQVhWQUxVRSAle3ZhbHVlfXMKKyAqLworc3RhdGljIGlubGluZSB2b2lkCitkZXBhcnNl X1NlcV9NYXh2YWx1ZShKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBGb3JtX3BnX3NlcXVlbmNlIHNl cWRhdGEpCit7CisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxM KTsKKwluZXdfanNvbmJfVkEoc3RhdGUsIDMsCisJCQkJICJmbXQiLCBqYnZTdHJpbmcsICJNQVhW QUxVRSAle3ZhbHVlfXMiLAorCQkJCSAiY2xhdXNlIiwgamJ2U3RyaW5nLCAibWF4dmFsdWUiLAor CQkJCSAidmFsdWUiLCBqYnZTdHJpbmcsCisJCQkJIHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2Vx ZGF0YS0+c2VxbWF4KSk7CisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwg TlVMTCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBNSU5WQUxVRSBvcHRpb24g dG8gSnNvbmIKKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogTUlOVkFMVUUgJXt2YWx1ZX1zCisg Ki8KK3N0YXRpYyBpbmxpbmUgdm9pZAorZGVwYXJzZV9TZXFfTWludmFsdWUoSnNvbmJQYXJzZVN0 YXRlICpzdGF0ZSwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhKQoreworCXB1c2hKc29uYlZhbHVl KCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJbmV3X2pzb25iX1ZBKHN0YXRlLCAz LAorCQkJCSAiZm10IiwgamJ2U3RyaW5nLCAiTUlOVkFMVUUgJXt2YWx1ZX1zIiwKKwkJCQkgImNs YXVzZSIsIGpidlN0cmluZywgIm1pbnZhbHVlIiwKKwkJCQkgInZhbHVlIiwgamJ2U3RyaW5nLAor CQkJCSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcW1pbikpOworCXB1c2hKc29u YlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworfQorCisvKgorICogRGVwYXJz ZSB0aGUgc2VxdWVuY2UgT1dORUQgQlkgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAor ICogT1dORUQgQlkgJXtvd25lcn1ECisgKi8KK3N0YXRpYyB2b2lkCitkZXBhcnNlX1NlcV9Pd25l ZEJ5KEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIE9pZCBzZXF1ZW5jZUlkKQoreworCVJlbGF0aW9u CWRlcFJlbDsKKwlTeXNTY2FuRGVzYyBzY2FuOworCVNjYW5LZXlEYXRhIGtleXNbM107CisJSGVh cFR1cGxlCXR1cGxlOworCWJvb2wJCWVsZW1fZm91bmQgUEdfVVNFRF9GT1JfQVNTRVJUU19PTkxZ ID0gZmFsc2U7CisKKwlkZXBSZWwgPSB0YWJsZV9vcGVuKERlcGVuZFJlbGF0aW9uSWQsIEFjY2Vz c1NoYXJlTG9jayk7CisJU2NhbktleUluaXQoJmtleXNbMF0sCisJCQkJQW51bV9wZ19kZXBlbmRf Y2xhc3NpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0 SWRHZXREYXR1bShSZWxhdGlvblJlbGF0aW9uSWQpKTsKKwlTY2FuS2V5SW5pdCgma2V5c1sxXSwK KwkJCQlBbnVtX3BnX2RlcGVuZF9vYmppZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZf T0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShzZXF1ZW5jZUlkKSk7CisJU2NhbktleUluaXQo JmtleXNbMl0sCisJCQkJQW51bV9wZ19kZXBlbmRfb2Jqc3ViaWQsCisJCQkJQlRFcXVhbFN0cmF0 ZWd5TnVtYmVyLCBGX0lOVDRFUSwKKwkJCQlJbnQzMkdldERhdHVtKDApKTsKKworCXNjYW4gPSBz eXN0YWJsZV9iZWdpbnNjYW4oZGVwUmVsLCBEZXBlbmREZXBlbmRlckluZGV4SWQsIHRydWUsCisJ CQkJCQkJICBOVUxMLCAzLCBrZXlzKTsKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSA9 IHN5c3RhYmxlX2dldG5leHQoc2NhbikpKQorCXsKKwkJT2lkCQkJb3duZXJJZDsKKwkJRm9ybV9w Z19kZXBlbmQgZGVwZm9ybTsKKwkJY2hhcgkgICAqY29sbmFtZTsKKworCQlkZXBmb3JtID0gKEZv cm1fcGdfZGVwZW5kKSBHRVRTVFJVQ1QodHVwbGUpOworCisJCS8qIE9ubHkgY29uc2lkZXIgQVVU TyBkZXBlbmRlbmNpZXMgb24gcGdfY2xhc3MgKi8KKwkJaWYgKGRlcGZvcm0tPmRlcHR5cGUgIT0g REVQRU5ERU5DWV9BVVRPKQorCQkJY29udGludWU7CisJCWlmIChkZXBmb3JtLT5yZWZjbGFzc2lk ICE9IFJlbGF0aW9uUmVsYXRpb25JZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoZGVwZm9ybS0+cmVm b2Jqc3ViaWQgPD0gMCkKKwkJCWNvbnRpbnVlOworCisJCW93bmVySWQgPSBkZXBmb3JtLT5yZWZv YmppZDsKKwkJY29sbmFtZSA9IGdldF9hdHRuYW1lKG93bmVySWQsIGRlcGZvcm0tPnJlZm9ianN1 YmlkLCBmYWxzZSk7CisKKwkJLyogbWFyayB0aGUgYmVnaW4gb2Ygb3duZXIncyBkZWZpbml0aW9u IG9iamVjdCAqLworCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5V TEwpOworCisJCW5ld19qc29uYl9WQShzdGF0ZSwgMiwKKwkJCQkJICJmbXQiLCBqYnZTdHJpbmcs ICJPV05FRCBCWSAle293bmVyfUQiLAorCQkJCQkgImNsYXVzZSIsIGpidlN0cmluZywgIm93bmVk Iik7CisKKwkJLyogb3duZXIga2V5ICovCisJCWluc2VydF9qc29uYl9rZXkoc3RhdGUsICJvd25l ciIpOworCisJCS8qIG93bmVyIHZhbHVlIGJlZ2luICovCisJCXB1c2hKc29uYlZhbHVlKCZzdGF0 ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisKKwkJbmV3X2pzb25iX2Zvcl9xdWFsbmFtZV9p ZChzdGF0ZSwgUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkgIG93bmVySWQsIE5VTEwsIGZh bHNlKTsKKwkJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLCAiYXR0cm5hbWUiLCBqYnZTdHJpbmcsIGNv bG5hbWUpOworCisJCS8qIG93bmVyIHZhbHVlIGVuZCAqLworCQlwdXNoSnNvbmJWYWx1ZSgmc3Rh dGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKworCQkvKiBtYXJrIHRoZSBlbmQgb2Ygb3duZXIn cyBkZWZpbml0aW9uIG9iamVjdCAqLworCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRf T0JKRUNULCBOVUxMKTsKKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwkJZWxlbV9mb3Vu ZCA9IHRydWU7CisjZW5kaWYKKwl9CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCXJlbGF0 aW9uX2Nsb3NlKGRlcFJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCS8qCisJICogSWYgdGhlcmUn cyBubyBvd25lciBjb2x1bW4sIGFzc2VydC4gVGhlIGNhbGxlciBtdXN0IGhhdmUgY2hlY2tlZAor CSAqIHByZXNlbmNlIG9mIG93bmVkX2J5IGVsZW1lbnQgYmVmb3JlIGludm9raW5nIHRoaXMuCisJ ICovCisJQXNzZXJ0KGVsZW1fZm91bmQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVu Y2UgU1RBUlQgV0lUSCBvcHRpb24gdG8gSnNvbmIuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAq IFNUQVJUIFdJVEggJXt2YWx1ZX1zCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorZGVwYXJzZV9T ZXFfU3RhcnR3aXRoKEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIEZvcm1fcGdfc2VxdWVuY2Ugc2Vx ZGF0YSkKK3sKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwp OworCW5ld19qc29uYl9WQShzdGF0ZSwgMywKKwkJCQkgImZtdCIsIGpidlN0cmluZywgIlNUQVJU IFdJVEggJXt2YWx1ZX1zIiwKKwkJCQkgImNsYXVzZSIsIGpidlN0cmluZywgInN0YXJ0IiwKKwkJ CQkgInZhbHVlIiwgamJ2U3RyaW5nLAorCQkJCSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRh dGEtPnNlcXN0YXJ0KSk7CisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwg TlVMTCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBSRVNUQVJUIG9wdGlvbiB0 byBKc29uYgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBSRVNUQVJUICV7dmFsdWV9cworICov CitzdGF0aWMgaW5saW5lIHZvaWQKK2RlcGFyc2VfU2VxX1Jlc3RhcnQoSnNvbmJQYXJzZVN0YXRl ICpzdGF0ZSwgaW50NjQgbGFzdF92YWx1ZSkKK3sKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdK Ql9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCW5ld19qc29uYl9WQShzdGF0ZSwgMywKKwkJCQkgImZt dCIsIGpidlN0cmluZywgIlJFU1RBUlQgJXt2YWx1ZX1zIiwKKwkJCQkgImNsYXVzZSIsIGpidlN0 cmluZywgInJlc3RhcnQiLAorCQkJCSAidmFsdWUiLCBqYnZTdHJpbmcsCisJCQkJIHBzcHJpbnRm KElOVDY0X0ZPUk1BVCwgbGFzdF92YWx1ZSkpOworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pC X0VORF9PQkpFQ1QsIE5VTEwpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgQVMg b3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBUyAle3NlcXR5cGV9VAorICovCitz dGF0aWMgaW5saW5lIHZvaWQKK2RlcGFyc2VfU2VxX0FzKEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUs IEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSkKK3sKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdK Ql9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCW5ld19qc29uYl9WQShzdGF0ZSwgMSwgImZtdCIsIGpi dlN0cmluZywgIkFTICV7c2VxdHlwZX1UIik7CisJbmV3X2pzb25iX2Zvcl90eXBlKHN0YXRlLCAi c2VxdHlwZSIsIHNlcWRhdGEtPnNlcXR5cGlkLCAtMSk7CisJcHVzaEpzb25iVmFsdWUoJnN0YXRl LCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBkZWZpbml0 aW9uIG9mIGNvbHVtbiBpZGVudGl0eSB0byBKc29uYi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAor ICogJXtpZGVudGl0eV90eXBlfXMgKCAle3NlcV9kZWZpbml0aW9uOiB9cyApCisgKiB3aGVyZSBp ZGVudGl0eV90eXBlIGlzOiAiR0VORVJBVEVEICV7b3B0aW9ufXMgQVMgSURFTlRJVFkiCisgKi8K K3N0YXRpYyB2b2lkCitkZXBhcnNlX0NvbHVtbklkZW50aXR5KEpzb25iUGFyc2VTdGF0ZSAqc3Rh dGUsIGNoYXIgKnBhcmVudEtleSwKKwkJCQkJICAgT2lkIHNlcXJlbGlkLCBjaGFyIGlkZW50aXR5 KQoreworCUZvcm1fcGdfc2VxdWVuY2Ugc2VxZm9ybTsKKwlTZXF1ZW5jZV92YWx1ZXMgKnNlcXZh bHVlczsKKwlTdHJpbmdJbmZvRGF0YSBmbXRTdHI7CisKKwlpbml0U3RyaW5nSW5mbygmZm10U3Ry KTsKKworCS8qCisJICogSW5zZXJ0IHBhcmVudCBrZXkgZm9yIHdoaWNoIHdlIGFyZSBnb2luZyB0 byBjcmVhdGUgdmFsdWUgb2JqZWN0IGhlcmUuCisJICovCisJaWYgKHBhcmVudEtleSkKKwkJaW5z ZXJ0X2pzb25iX2tleShzdGF0ZSwgcGFyZW50S2V5KTsKKworCS8qIGNyZWF0ZSBvYmplY3Qgbm93 IGZvciB2YWx1ZSBvZiBpZGVudGl0eV9jb2x1bW4gKi8KKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUs IFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCisJLyogaWRlbnRpdHlfdHlwZSBvYmplY3QgY3Jl YXRpb24gKi8KKwlpZiAoaWRlbnRpdHkgPT0gQVRUUklCVVRFX0lERU5USVRZX0FMV0FZUyB8fAor CQlpZGVudGl0eSA9PSBBVFRSSUJVVEVfSURFTlRJVFlfQllfREVGQVVMVCkKKwl7CisJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoJmZtdFN0ciwgIiV7aWRlbnRpdHlfdHlwZX1zIik7CisJCWluc2Vy dF9qc29uYl9rZXkoc3RhdGUsICJpZGVudGl0eV90eXBlIik7CisKKwkJcHVzaEpzb25iVmFsdWUo JnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKworCQluZXdfanNvbmJfVkEoc3RhdGUs IDIsCisJCQkJCSAiZm10IiwgamJ2U3RyaW5nLAorCQkJCQkgIkdFTkVSQVRFRCAle29wdGlvbn1z IEFTIElERU5USVRZIiwKKwkJCQkJICJvcHRpb24iLCBqYnZTdHJpbmcsCisJCQkJCSAoaWRlbnRp dHkgPT0gQVRUUklCVVRFX0lERU5USVRZX0FMV0FZUyA/CisJCQkJCSAgIkFMV0FZUyIgOiAiQlkg REVGQVVMVCIpKTsKKwkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVM TCk7CisJfQorCisJLyogc2VxX2RlZmluaXRpb24gYXJyYXkgb2JqZWN0IGNyZWF0aW9uICovCisJ aW5zZXJ0X2pzb25iX2tleShzdGF0ZSwgInNlcV9kZWZpbml0aW9uIik7CisKKwlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZmbXRTdHIsICIgKCAle3NlcV9kZWZpbml0aW9uOiB9cyApIik7CisKKwlw dXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9BUlJBWSwgTlVMTCk7CisKKwlzZXF2YWx1 ZXMgPSBnZXRfc2VxdWVuY2VfdmFsdWVzKHNlcXJlbGlkKTsKKwlzZXFmb3JtID0gc2VxdmFsdWVz LT5zZXFmb3JtOworCisJLyogRGVmaW5pdGlvbiBlbGVtZW50cyAqLworCWRlcGFyc2VfU2VxX0Nh Y2hlKHN0YXRlLCBzZXFmb3JtKTsKKwlkZXBhcnNlX1NlcV9DeWNsZShzdGF0ZSwgc2VxZm9ybSk7 CisJZGVwYXJzZV9TZXFfSW5jcmVtZW50Qnkoc3RhdGUsIHNlcWZvcm0pOworCWRlcGFyc2VfU2Vx X01pbnZhbHVlKHN0YXRlLCBzZXFmb3JtKTsKKwlkZXBhcnNlX1NlcV9NYXh2YWx1ZShzdGF0ZSwg c2VxZm9ybSk7CisJZGVwYXJzZV9TZXFfU3RhcnR3aXRoKHN0YXRlLCBzZXFmb3JtKTsKKwlkZXBh cnNlX1NlcV9SZXN0YXJ0KHN0YXRlLCBzZXF2YWx1ZXMtPmxhc3RfdmFsdWUpOworCS8qIFdlIHB1 cnBvc2VmdWxseSBkbyBub3QgZW1pdCBPV05FRCBCWSBoZXJlICovCisKKwlwdXNoSnNvbmJWYWx1 ZSgmc3RhdGUsIFdKQl9FTkRfQVJSQVksIE5VTEwpOworCisJLyogV2UgaGF2ZSBmdWxsIGZtdCBi eSBub3csIHNvIGFkZCBqc29uYiBlbGVtZW50IGZvciB0aGF0ICovCisJbmV3X2pzb25iX1ZBKHN0 YXRlLCAxLCAiZm10IiwgamJ2U3RyaW5nLCBmbXRTdHIuZGF0YSk7CisKKwlwZnJlZShmbXRTdHIu ZGF0YSk7CisKKwkvKiBlbmQgb2YgaWRlbmRpdHlfY29sdW1uIG9iamVjdCAqLworCXB1c2hKc29u YlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworfQorCisvKgorICogRGVwYXJz ZSBhIENvbHVtbkRlZiBub2RlIHdpdGhpbiBhIHJlZ3VsYXIgKG5vbi10eXBlZCkgdGFibGUgY3Jl YXRpb24uCisgKgorICogTk9UIE5VTEwgY29uc3RyYWludHMgaW4gdGhlIGNvbHVtbiBkZWZpbml0 aW9uIGFyZSBlbWl0dGVkIGRpcmVjdGx5IGluIHRoZQorICogY29sdW1uIGRlZmluaXRpb24gYnkg dGhpcyByb3V0aW5lOyBvdGhlciBjb25zdHJhaW50cyBtdXN0IGJlIGVtaXR0ZWQKKyAqIGVsc2V3 aGVyZSAodGhlIGluZm8gaW4gdGhlIHBhcnNlIG5vZGUgaXMgaW5jb21wbGV0ZSBhbnl3YXkpLgor ICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAl e2NvbHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cworICogICV7bm90X251 bGx9cyAle2RlZmF1bHR9cyAle2lkZW50aXR5X2NvbHVtbn1zICV7Z2VuZXJhdGVkX2NvbHVtbn1z IgorICovCitzdGF0aWMgdm9pZAorZGVwYXJzZV9Db2x1bW5EZWYoSnNvbmJQYXJzZVN0YXRlICpz dGF0ZSwgUmVsYXRpb24gcmVsYXRpb24sCisJCQkJICBMaXN0ICpkcGNvbnRleHQsIGJvb2wgY29t cG9zaXRlLCBDb2x1bW5EZWYgKmNvbGRlZikKK3sKKwlPaWQJCQlyZWxpZCA9IFJlbGF0aW9uR2V0 UmVsaWQocmVsYXRpb24pOworCUhlYXBUdXBsZQlhdHRyVHVwOworCUZvcm1fcGdfYXR0cmlidXRl IGF0dHJGb3JtOworCU9pZAkJCXR5cGlkOworCWludDMyCQl0eXBtb2Q7CisJT2lkCQkJdHlwY29s bGF0aW9uOworCWJvb2wJCXNhd19ub3RudWxsOworCUxpc3RDZWxsICAgKmNlbGw7CisJU3RyaW5n SW5mb0RhdGEgZm10U3RyOworCisJaW5pdFN0cmluZ0luZm8oJmZtdFN0cik7CisKKwkvKgorCSAq IEluaGVyaXRlZCBjb2x1bW5zIHdpdGhvdXQgbG9jYWwgZGVmaW5pdGlvbnMgc2hvdWxkIGJlIHNr aXBwZWQuIFdlIGRvbid0CisJICogd2FudCB0aG9zZSB0byBiZSBwYXJ0IG9mIGZpbmFsIHN0cmlu Zy4KKwkgKi8KKwlpZiAoIWNvbGRlZi0+aXNfbG9jYWwpCisJCXJldHVybjsKKworCWF0dHJUdXAg PSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUocmVsaWQsIGNvbGRlZi0+Y29sbmFtZSk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKGF0dHJUdXApKQorCQllbG9nKEVSUk9SLCAiY291bGQgbm90IGZpbmQg Y2FjaGUgZW50cnkgZm9yIGNvbHVtbiBcIiVzXCIgb2YgcmVsYXRpb24gJXUiLAorCQkJIGNvbGRl Zi0+Y29sbmFtZSwgcmVsaWQpOworCWF0dHJGb3JtID0gKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRT VFJVQ1QoYXR0clR1cCk7CisKKwlnZXRfYXR0dHlwZXR5cG1vZGNvbGwocmVsaWQsIGF0dHJGb3Jt LT5hdHRudW0sCisJCQkJCQkgICZ0eXBpZCwgJnR5cG1vZCwgJnR5cGNvbGxhdGlvbik7CisKKwkv KiBzdGFydCBtYWtpbmcgY29sdW1uIG9iamVjdCAqLworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwg V0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisKKwkvKiBjcmVhdGUgbmFtZSBhbmQgdHlwZSBlbGVt ZW50cyBmb3IgY29sdW1uICovCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3RyLCAiJXtu YW1lfUkiKTsKKwluZXdfanNvbmJfVkEoc3RhdGUsIDIsCisJCQkJICJuYW1lIiwgamJ2U3RyaW5n LCBjb2xkZWYtPmNvbG5hbWUsCisJCQkJICJ0eXBlIiwgamJ2U3RyaW5nLCAiY29sdW1uIik7CisK KwkvKgorCSAqIGNyZWF0ZSBjb2x0eXBlIG9iamVjdCBoYXZpbmcgNCBlbGVtZW50czogc2NoZW1h bmFtZSwgdHlwZW5hbWUsIHR5cGVtb2QsCisJICogdHlwZWFycmF5CisJICovCisJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmZm10U3RyLCAiICV7Y29sdHlwZX1UIik7CisJbmV3X2pzb25iX2Zvcl90 eXBlKHN0YXRlLCAiY29sdHlwZSIsIHR5cGlkLCB0eXBtb2QpOworCisJLyogU1RPUkFHRSBjbGF1 c2UgKi8KKwlpZiAoIWNvbXBvc2l0ZSkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmZt dFN0ciwgIiBTVE9SQUdFICV7Y29sc3RvcmFnZX1zIik7CisJCW5ld19qc29uYl9WQShzdGF0ZSwg MSwKKwkJCQkJICJjb2xzdG9yYWdlIiwgamJ2U3RyaW5nLAorCQkJCQkgc3RvcmFnZV9uYW1lKGF0 dHJGb3JtLT5hdHRzdG9yYWdlKSk7CisJfQorCisJLyogQ09NUFJFU1NJT04gY2xhdXNlICovCisJ aWYgKGNvbGRlZi0+Y29tcHJlc3Npb24pCisJeworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZm bXRTdHIsICIgJXtjb21wcmVzc2lvbn1zIik7CisJCWluc2VydF9qc29uYl9rZXkoc3RhdGUsICJj b21wcmVzc2lvbiIpOworCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1Qs IE5VTEwpOworCQluZXdfanNvbmJfVkEoc3RhdGUsIDIsCisJCQkJCSAiZm10IiwgamJ2U3RyaW5n LCAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsCisJCQkJCSAiY29tcHJlc3Np b25fbWV0aG9kIiwgamJ2U3RyaW5nLCBjb2xkZWYtPmNvbXByZXNzaW9uKTsKKwkJcHVzaEpzb25i VmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisJfQorCisJLyogQ09MTEFURSBj bGF1c2UgKi8KKwlpZiAoT2lkSXNWYWxpZCh0eXBjb2xsYXRpb24pKQorCXsKKwkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmZm10U3RyLCAiICV7Y29sbGF0aW9ufXMiKTsKKwkJaW5zZXJ0X2NvbGxh dGVfb2JqZWN0KHN0YXRlLCAiY29sbGF0aW9uIiwKKwkJCQkJCQkgICJDT0xMQVRFICV7Y29sbGF0 aW9uX25hbWV9RCIsCisJCQkJCQkJICBDb2xsYXRpb25SZWxhdGlvbklkLCB0eXBjb2xsYXRpb24s CisJCQkJCQkJICAiY29sbGF0aW9uX25hbWUiKTsKKwl9CisKKwlpZiAoIWNvbXBvc2l0ZSkKKwl7 CisJCU9pZAkJCXNlcXJlbGlkID0gSW52YWxpZE9pZDsKKworCQkvKgorCQkgKiBFbWl0IGEgTk9U IE5VTEwgZGVjbGFyYXRpb24gaWYgbmVjZXNzYXJ5LiAgTm90ZSB0aGF0IHdlIGNhbm5vdAorCQkg KiB0cnVzdCBwZ19hdHRyaWJ1dGUuYXR0bm90bnVsbCBoZXJlLCBiZWNhdXNlIHRoYXQgYml0IGlz IGFsc28gc2V0CisJCSAqIHdoZW4gcHJpbWFyeSBrZXlzIGFyZSBzcGVjaWZpZWQ7IHdlIG11c3Qg bm90IGVtaXQgYSBOT1QgTlVMTAorCQkgKiBjb25zdHJhaW50IGluIHRoYXQgY2FzZSwgdW5sZXNz IGV4cGxpY2l0bHkgc3BlY2lmaWVkLiAgVGhlcmVmb3JlLAorCQkgKiB3ZSBzY2FuIHRoZSBsaXN0 IG9mIGNvbnN0cmFpbnRzIGF0dGFjaGVkIHRvIHRoaXMgY29sdW1uIHRvCisJCSAqIGRldGVybWlu ZSB3aGV0aGVyIHdlIG5lZWQgdG8gZW1pdCBhbnl0aGluZy4gKEZvcnR1bmF0ZWx5LCBOT1QgTlVM TAorCQkgKiBjb25zdHJhaW50cyBjYW5ub3QgYmUgdGFibGUgY29uc3RyYWludHMuKQorCQkgKgor CQkgKiBJbiB0aGUgQUxURVIgVEFCTEUgY2FzZXMsIHdlIGFsc28gYWRkIGEgTk9UIE5VTEwgaWYg dGhlIGNvbERlZiBpcworCQkgKiBtYXJrZWQgaXNfbm90X251bGwuCisJCSAqLworCQlzYXdfbm90 bnVsbCA9IGZhbHNlOworCQlmb3JlYWNoKGNlbGwsIGNvbGRlZi0+Y29uc3RyYWludHMpCisJCXsK KwkJCUNvbnN0cmFpbnQgKmNvbnN0ciA9IChDb25zdHJhaW50ICopIGxmaXJzdChjZWxsKTsKKwor CQkJaWYgKGNvbnN0ci0+Y29udHlwZSA9PSBDT05TVFJfTk9UTlVMTCkKKwkJCXsKKwkJCQlzYXdf bm90bnVsbCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkvKiBOT1QgTlVMTCAq LworCQlpZiAoc2F3X25vdG51bGwpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmZt dFN0ciwgIiAle25vdF9udWxsfXMiKTsKKwkJCW5ld19qc29uYl9WQShzdGF0ZSwgMSwKKwkJCQkJ CSAibm90X251bGwiLCBqYnZTdHJpbmcsICJOT1QgTlVMTCIpOworCQl9CisKKworCQkvKiBERUZB VUxUICovCisJCWlmIChhdHRyRm9ybS0+YXR0aGFzZGVmICYmCisJCQljb2xkZWYtPmdlbmVyYXRl ZCAhPSBBVFRSSUJVVEVfR0VORVJBVEVEX1NUT1JFRCkKKwkJeworCQkJY2hhcgkgICAqZGVmc3Ry OworCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIsICIgJXtkZWZhdWx0fXMiKTsK KworCQkJZGVmc3RyID0gcmVsYXRpb25fZ2V0X2NvbHVtbl9kZWZhdWx0KHJlbGF0aW9uLCBhdHRy Rm9ybS0+YXR0bnVtLAorCQkJCQkJCQkJCQkJIGRwY29udGV4dCk7CisKKwkJCWluc2VydF9qc29u Yl9rZXkoc3RhdGUsICJkZWZhdWx0Iik7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9C RUdJTl9PQkpFQ1QsIE5VTEwpOworCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAyLAorCQkJCQkJICJm bXQiLCBqYnZTdHJpbmcsICJERUZBVUxUICV7ZGVmYXVsdH1zIiwKKwkJCQkJCSAiZGVmYXVsdCIs IGpidlN0cmluZywgZGVmc3RyKTsKKworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5E X09CSkVDVCwgTlVMTCk7CisJCX0KKworCQkvKiBJREVOVElUWSBDT0xVTU4gKi8KKwkJaWYgKGNv bGRlZi0+aWRlbnRpdHkpCisJCXsKKwkJCS8qCisJCQkgKiBGb3IgaWRlbnRpdHkgY29sdW1uLCBm aW5kIHRoZSBzZXF1ZW5jZSBvd25lZCBieSBjb2x1bW4gaW4gb3JkZXIKKwkJCSAqIHRvIGRlcGFy c2UgdGhlIGNvbHVtbiBkZWZpbml0aW9uLgorCQkJICovCisJCQlzZXFyZWxpZCA9IGdldElkZW50 aXR5U2VxdWVuY2UocmVsaWQsIGF0dHJGb3JtLT5hdHRudW0sIHRydWUpOworCQkJaWYgKE9pZElz VmFsaWQoc2VxcmVsaWQpICYmIGNvbGRlZi0+aWRlbnRpdHlTZXF1ZW5jZSkKKwkJCQlzZXFyZWxp ZCA9IFJhbmdlVmFyR2V0UmVsaWQoY29sZGVmLT5pZGVudGl0eVNlcXVlbmNlLAorCQkJCQkJCQkJ CQlOb0xvY2ssIGZhbHNlKTsKKworCQkJaWYgKE9pZElzVmFsaWQoc2VxcmVsaWQpKQorCQkJewor CQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmZtdFN0ciwgIiAle2lkZW50aXR5X2NvbHVtbn1z Iik7CisJCQkJZGVwYXJzZV9Db2x1bW5JZGVudGl0eShzdGF0ZSwgImlkZW50aXR5X2NvbHVtbiIs CisJCQkJCQkJCQkgICBzZXFyZWxpZCwKKwkJCQkJCQkJCSAgIGNvbGRlZi0+aWRlbnRpdHkpOwor CQkJfQorCQl9CisKKworCQkvKiBHRU5FUkFURUQgQ09MVU1OIEVYUFJFU1NJT04gKi8KKwkJaWYg KGNvbGRlZi0+Z2VuZXJhdGVkID09IEFUVFJJQlVURV9HRU5FUkFURURfU1RPUkVEKQorCQl7CisJ CQljaGFyCSAgICpkZWZzdHI7CisKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmZtdFN0ciwg IiAle2dlbmVyYXRlZF9jb2x1bW59cyIpOworCQkJZGVmc3RyID0gcmVsYXRpb25fZ2V0X2NvbHVt bl9kZWZhdWx0KHJlbGF0aW9uLCBhdHRyRm9ybS0+YXR0bnVtLAorCQkJCQkJCQkJCQkJIGRwY29u dGV4dCk7CisKKwkJCWluc2VydF9qc29uYl9rZXkoc3RhdGUsICJnZW5lcmF0ZWRfY29sdW1uIik7 CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCQkJ bmV3X2pzb25iX1ZBKHN0YXRlLCAyLAorCQkJCQkJICJmbXQiLCBqYnZTdHJpbmcsICJHRU5FUkFU RUQgQUxXQVlTIEFTIgorCQkJCQkJICIgKCV7Z2VuZXJhdGlvbl9leHByfXMpIFNUT1JFRCIsCisJ CQkJCQkgImdlbmVyYXRpb25fZXhwciIsIGpidlN0cmluZywgZGVmc3RyKTsKKworCQkJcHVzaEpz b25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisJCX0KKwl9CisKKwlSZWxl YXNlU3lzQ2FjaGUoYXR0clR1cCk7CisKKwkvKiBXZSBoYXZlIGZ1bGwgZm10IGJ5IG5vdywgc28g YWRkIGpzb25iIGVsZW1lbnQgZm9yIHRoYXQgKi8KKwluZXdfanNvbmJfVkEoc3RhdGUsIDEsICJm bXQiLCBqYnZTdHJpbmcsIGZtdFN0ci5kYXRhKTsKKworCXBmcmVlKGZtdFN0ci5kYXRhKTsKKwor CS8qIG1hcmsgdGhlIGVuZCBvZiBvbmUgY29sdW1uIG9iamVjdCAqLworCXB1c2hKc29uYlZhbHVl KCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworfQorCisvKgorICogSGVscGVyIGZvciBk ZXBhcnNlX0NvbHVtbkRlZl90eXBlZCgpCisgKgorICogUmV0dXJucyB0cnVlIGlmIHdlIG5lZWQg dG8gZGVwYXJzZSBhIENvbHVtbkRlZiBub2RlIHdpdGhpbiBhIHR5cGVkCisgKiB0YWJsZSBjcmVh dGlvbi4KKyAqLworc3RhdGljIGJvb2wKK2RlcGFyc2VfQ29sRGVmX3R5cGVkX25lZWRlZChSZWxh dGlvbiByZWxhdGlvbiwgQ29sdW1uRGVmICpjb2xkZWYsCisJCQkJCQkJRm9ybV9wZ19hdHRyaWJ1 dGUgKmF0Rm9ybU91dCwgYm9vbCAqbm90bnVsbCkKK3sKKwlPaWQJCQlyZWxpZCA9IFJlbGF0aW9u R2V0UmVsaWQocmVsYXRpb24pOworCUhlYXBUdXBsZQlhdHRyVHVwOworCUZvcm1fcGdfYXR0cmli dXRlIGF0dHJGb3JtOworCU9pZAkJCXR5cGlkOworCWludDMyCQl0eXBtb2Q7CisJT2lkCQkJdHlw Y29sbGF0aW9uOworCWJvb2wJCXNhd19ub3RudWxsOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlh dHRyVHVwID0gU2VhcmNoU3lzQ2FjaGVBdHROYW1lKHJlbGlkLCBjb2xkZWYtPmNvbG5hbWUpOwor CWlmICghSGVhcFR1cGxlSXNWYWxpZChhdHRyVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNvdWxkIG5v dCBmaW5kIGNhY2hlIGVudHJ5IGZvciBjb2x1bW4gXCIlc1wiIG9mIHJlbGF0aW9uICV1IiwKKwkJ CSBjb2xkZWYtPmNvbG5hbWUsIHJlbGlkKTsKKworCWF0dHJGb3JtID0gKEZvcm1fcGdfYXR0cmli dXRlKSBHRVRTVFJVQ1QoYXR0clR1cCk7CisKKwlpZiAoYXRGb3JtT3V0KQorCQkqYXRGb3JtT3V0 ID0gYXR0ckZvcm07CisKKwlnZXRfYXR0dHlwZXR5cG1vZGNvbGwocmVsaWQsIGF0dHJGb3JtLT5h dHRudW0sCisJCQkJCQkgICZ0eXBpZCwgJnR5cG1vZCwgJnR5cGNvbGxhdGlvbik7CisKKwkvKgor CSAqIFNlYXJjaCBmb3IgYSBOT1QgTlVMTCBkZWNsYXJhdGlvbi4gQXMgaW4gZGVwYXJzZV9Db2x1 bW5EZWYsIHdlIHJlbHkgb24KKwkgKiBmaW5kaW5nIGEgY29uc3RyYWludCBvbiB0aGUgY29sdW1u IHJhdGhlciB0aGFuIGNvbGRlZi0+aXNfbm90X251bGwuCisJICogKFRoaXMgcm91dGluZSBpcyBu ZXZlciB1c2VkIGZvciBBTFRFUiBjYXNlcy4pCisJICovCisJc2F3X25vdG51bGwgPSBmYWxzZTsK Kwlmb3JlYWNoKGNlbGwsIGNvbGRlZi0+Y29uc3RyYWludHMpCisJeworCQlDb25zdHJhaW50ICpj b25zdHIgPSAoQ29uc3RyYWludCAqKSBsZmlyc3QoY2VsbCk7CisKKwkJaWYgKGNvbnN0ci0+Y29u dHlwZSA9PSBDT05TVFJfTk9UTlVMTCkKKwkJeworCQkJc2F3X25vdG51bGwgPSB0cnVlOworCQkJ YnJlYWs7CisJCX0KKwl9CisKKwlpZiAobm90bnVsbCkKKwkJKm5vdG51bGwgPSBzYXdfbm90bnVs bDsKKworCWlmICghc2F3X25vdG51bGwgJiYgIWF0dHJGb3JtLT5hdHRoYXNkZWYpCisJeworCQlS ZWxlYXNlU3lzQ2FjaGUoYXR0clR1cCk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlSZWxlYXNl U3lzQ2FjaGUoYXR0clR1cCk7CisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEg Q29sdW1uRGVmIG5vZGUgd2l0aGluIGEgdHlwZWQgdGFibGUgY3JlYXRpb24uIFRoaXMgaXMgc2lt cGxlcgorICogdGhhbiB0aGUgcmVndWxhciBjYXNlLCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdG8g ZW1pdCB0aGUgdHlwZSBkZWNsYXJhdGlvbiwKKyAqIGNvbGxhdGlvbiwgb3IgZGVmYXVsdC4gSGVy ZSB3ZSBvbmx5IHJldHVybiBzb21ldGhpbmcgaWYgdGhlIGNvbHVtbiBpcyBiZWluZworICogZGVj bGFyZWQgTk9UIE5VTEwuCisgKgorICogQXMgaW4gZGVwYXJzZV9Db2x1bW5EZWYsIGFueSBvdGhl ciBjb25zdHJhaW50IGlzIHByb2Nlc3NlZCBlbHNld2hlcmUuCisgKgorICogVmVyYm9zZSBzeW50 YXgKKyAqICV7bmFtZX1JIFdJVEggT1BUSU9OUyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMuCisg Ki8KK3N0YXRpYyB2b2lkCitkZXBhcnNlX0NvbHVtbkRlZl90eXBlZChKc29uYlBhcnNlU3RhdGUg KnN0YXRlLCBSZWxhdGlvbiByZWxhdGlvbiwKKwkJCQkJCUxpc3QgKmRwY29udGV4dCwgQ29sdW1u RGVmICpjb2xkZWYpCit7CisJYm9vbAkJbmVlZGVkOworCUZvcm1fcGdfYXR0cmlidXRlIGF0dHJG b3JtOworCWJvb2wJCXNhd19ub3RudWxsOworCVN0cmluZ0luZm9EYXRhIGZtdFN0cjsKKworCWlu aXRTdHJpbmdJbmZvKCZmbXRTdHIpOworCisJbmVlZGVkID0gZGVwYXJzZV9Db2xEZWZfdHlwZWRf bmVlZGVkKHJlbGF0aW9uLCBjb2xkZWYsCisJCQkJCQkJCQkJICZhdHRyRm9ybSwgJnNhd19ub3Ru dWxsKTsKKwlpZiAoIW5lZWRlZCkKKwkJcmV0dXJuOworCisJLyogc3RhcnQgbWFraW5nIGNvbHVt biBvYmplY3QgKi8KKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5V TEwpOworCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3RyLCAiJXtuYW1lfUkgV0lUSCBP UFRJT05TIik7CisKKwkvKiBUWVBFIGFuZCBOQU1FICovCisJbmV3X2pzb25iX1ZBKHN0YXRlLCAy LAorCQkJCSAidHlwZSIsIGpidlN0cmluZywgImNvbHVtbiIsCisJCQkJICJuYW1lIiwgamJ2U3Ry aW5nLCBjb2xkZWYtPmNvbG5hbWUpOworCisJLyogTk9UIE5VTEwgKi8KKwlpZiAoc2F3X25vdG51 bGwpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIsICIgJXtub3RfbnVsbH1z Iik7CisJCW5ld19qc29uYl9WQShzdGF0ZSwgMSwgIm5vdF9udWxsIiwgamJ2U3RyaW5nLCAiTk9U IE5VTEwiKTsKKwl9CisKKwkvKiBERUZBVUxUICovCisJaWYgKGF0dHJGb3JtLT5hdHRoYXNkZWYp CisJeworCQljaGFyCSAgICpkZWZzdHI7CisKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10 U3RyLCAiICV7ZGVmYXVsdH1zIik7CisJCWRlZnN0ciA9IHJlbGF0aW9uX2dldF9jb2x1bW5fZGVm YXVsdChyZWxhdGlvbiwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCQkJCQkJIGRwY29udGV4dCk7 CisKKwkJaW5zZXJ0X2pzb25iX2tleShzdGF0ZSwgImRlZmF1bHQiKTsKKwkJcHVzaEpzb25iVmFs dWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKwkJbmV3X2pzb25iX1ZBKHN0YXRl LCAyLAorCQkJCQkgImZtdCIsIGpidlN0cmluZywgIkRFRkFVTFQgJXtkZWZhdWx0fXMiLAorCQkJ CQkgImRlZmF1bHQiLCBqYnZTdHJpbmcsIGRlZnN0cik7CisKKwkJcHVzaEpzb25iVmFsdWUoJnN0 YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisJfQorCisJLyogV2UgaGF2ZSBmdWxsIGZtdCBi eSBub3csIHNvIGFkZCBqc29uYiBlbGVtZW50IGZvciB0aGF0ICovCisJbmV3X2pzb25iX1ZBKHN0 YXRlLCAxLCAiZm10IiwgamJ2U3RyaW5nLCBmbXRTdHIuZGF0YSk7CisKKwlwZnJlZShmbXRTdHIu ZGF0YSk7CisKKwkvKiBtYXJrIHRoZSBlbmQgb2YgY29sdW1uIG9iamVjdCAqLworCXB1c2hKc29u YlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworCisJLyogR2VuZXJhdGVkIGNv bHVtbnMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gdHlwZWQgdGFibGVzLCBzbyB3ZSBhcmUgZG9uZSAq LworfQorCisvKgorICogU3Vicm91dGluZSBmb3IgQ1JFQVRFIFRBQkxFIGRlcGFyc2luZy4KKyAq CisgKiBEZWFsIHdpdGggYWxsIHRoZSB0YWJsZSBlbGVtZW50cyAoY29sdW1ucyBhbmQgY29uc3Ry YWludHMpLgorICoKKyAqIE5vdGUgd2UgaWdub3JlIGNvbnN0cmFpbnRzIGluIHRoZSBwYXJzZSBu b2RlIGhlcmU7IHRoZXkgYXJlIGV4dHJhY3RlZCBmcm9tCisgKiBzeXN0ZW0gY2F0YWxvZ3MgaW5z dGVhZC4KKyAqLworc3RhdGljIHZvaWQKK2RlcGFyc2VfVGFibGVFbGVtcyhKc29uYlBhcnNlU3Rh dGUgKnN0YXRlLCBSZWxhdGlvbiByZWxhdGlvbiwKKwkJCQkgICBMaXN0ICp0YWJsZUVsZW1lbnRz LCBMaXN0ICpkcGNvbnRleHQsCisJCQkJICAgYm9vbCB0eXBlZCwgYm9vbCBjb21wb3NpdGUpCit7 CisJTGlzdENlbGwgICAqbGM7CisKKwlmb3JlYWNoKGxjLCB0YWJsZUVsZW1lbnRzKQorCXsKKwkJ Tm9kZQkgICAqZWx0ID0gKE5vZGUgKikgbGZpcnN0KGxjKTsKKworCQlzd2l0Y2ggKG5vZGVUYWco ZWx0KSkKKwkJeworCQkJY2FzZSBUX0NvbHVtbkRlZjoKKwkJCQl7CisJCQkJCWlmICh0eXBlZCkK KwkJCQkJCWRlcGFyc2VfQ29sdW1uRGVmX3R5cGVkKHN0YXRlLCByZWxhdGlvbiwKKwkJCQkJCQkJ CQkJCWRwY29udGV4dCwKKwkJCQkJCQkJCQkJCShDb2x1bW5EZWYgKikgZWx0KTsKKwkJCQkJZWxz ZQorCQkJCQkJZGVwYXJzZV9Db2x1bW5EZWYoc3RhdGUsIHJlbGF0aW9uLCBkcGNvbnRleHQsCisJ CQkJCQkJCQkJICBjb21wb3NpdGUsIChDb2x1bW5EZWYgKikgZWx0KTsKKwkJCQl9CisJCQkJYnJl YWs7CisJCQljYXNlIFRfQ29uc3RyYWludDoKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJ ZWxvZyhFUlJPUiwgImludmFsaWQgbm9kZSB0eXBlICVkIiwgbm9kZVRhZyhlbHQpKTsKKwkJfQor CX0KK30KKworLyoKKyAqIFN1YnJvdXRpbmUgZm9yIENSRUFURSBUQUJMRSBkZXBhcnNpbmcuCisg KgorICogR2l2ZW4gYSB0YWJsZSBPSUQsIG9idGFpbiBpdHMgY29uc3RyYWludHMgYW5kIGFwcGVu ZCB0aGVtIHRvIHRoZSBnaXZlbgorICogSnNvbmJQYXJzZVN0YXRlLgorICoKKyAqIFRoaXMgd29y a3MgZm9yIHR5cGVkIHRhYmxlcywgcmVndWxhciB0YWJsZXMuCisgKgorICogTm90ZSB0aGF0IENP TlNUUkFJTlRfRk9SRUlHTiBjb25zdHJhaW50cyBhcmUgYWx3YXlzIGlnbm9yZWQuCisgKi8KK3N0 YXRpYyB2b2lkCitkZXBhcnNlX0NvbnN0cmFpbnRzKEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIE9p ZCByZWxhdGlvbklkKQoreworCVJlbGF0aW9uCWNvblJlbDsKKwlTY2FuS2V5RGF0YSBrZXk7CisJ U3lzU2NhbkRlc2Mgc2NhbjsKKwlIZWFwVHVwbGUJdHVwbGU7CisKKwlBc3NlcnQoT2lkSXNWYWxp ZChyZWxhdGlvbklkKSk7CisKKwkvKgorCSAqIFNjYW4gcGdfY29uc3RyYWludCB0byBmZXRjaCBh bGwgY29uc3RyYWludHMgbGlua2VkIHRvIHRoZSBnaXZlbgorCSAqIHJlbGF0aW9uLgorCSAqLwor CWNvblJlbCA9IHRhYmxlX29wZW4oQ29uc3RyYWludFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisJU2NhbktleUluaXQoJmtleSwgQW51bV9wZ19jb25zdHJhaW50X2NvbnJlbGlkLCBCVEVx dWFsU3RyYXRlZ3lOdW1iZXIsCisJCQkJRl9PSURFUSwgT2JqZWN0SWRHZXREYXR1bShyZWxhdGlv bklkKSk7CisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihjb25SZWwsIENvbnN0cmFpbnRSZWxp ZFR5cGlkTmFtZUluZGV4SWQsIHRydWUsCisJCQkJCQkJICBOVUxMLCAxLCAma2V5KTsKKworCS8q CisJICogRm9yIGVhY2ggY29uc3RyYWludCwgYWRkIGEgbm9kZSB0byB0aGUgbGlzdCBvZiB0YWJs ZSBlbGVtZW50cy4gIEluCisJICogdGhlc2Ugbm9kZXMgd2UgaW5jbHVkZSBub3Qgb25seSB0aGUg cHJpbnRhYmxlIGluZm9ybWF0aW9uICgiZm10IiksIGJ1dAorCSAqIGFsc28gc2VwYXJhdGUgYXR0 cmlidXRlcyB0byBpbmRpY2F0ZSB0aGUgdHlwZSBvZiBjb25zdHJhaW50LCBmb3IKKwkgKiBhdXRv bWF0aWMgcHJvY2Vzc2luZy4KKwkgKi8KKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSA9 IHN5c3RhYmxlX2dldG5leHQoc2NhbikpKQorCXsKKwkJRm9ybV9wZ19jb25zdHJhaW50IGNvbnN0 ckZvcm07CisJCWNoYXIJICAgKmNvbnR5cGU7CisJCVN0cmluZ0luZm9EYXRhIGZtdFN0cjsKKwor CQljb25zdHJGb3JtID0gKEZvcm1fcGdfY29uc3RyYWludCkgR0VUU1RSVUNUKHR1cGxlKTsKKwor CQlzd2l0Y2ggKGNvbnN0ckZvcm0tPmNvbnR5cGUpCisJCXsKKwkJCWNhc2UgQ09OU1RSQUlOVF9D SEVDSzoKKwkJCQljb250eXBlID0gImNoZWNrIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RS QUlOVF9GT1JFSUdOOgorCQkJCWNvbnRpbnVlOwkJLyogbm90IGhlcmUgKi8KKwkJCWNhc2UgQ09O U1RSQUlOVF9QUklNQVJZOgorCQkJCWNvbnR5cGUgPSAicHJpbWFyeSBrZXkiOworCQkJCWJyZWFr OworCQkJY2FzZSBDT05TVFJBSU5UX1VOSVFVRToKKwkJCQljb250eXBlID0gInVuaXF1ZSI7CisJ CQkJYnJlYWs7CisJCQljYXNlIENPTlNUUkFJTlRfRVhDTFVTSU9OOgorCQkJCWNvbnR5cGUgPSAi ZXhjbHVzaW9uIjsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhFUlJPUiwgInVu cmVjb2duaXplZCBjb25zdHJhaW50IHR5cGUiKTsKKwkJfQorCisJCS8qIE5vIG5lZWQgdG8gZGVw YXJzZSBjb25zdHJhaW50cyBpbmhlcml0ZWQgZnJvbSBwYXJlbnQgdGFibGUuICovCisJCWlmIChP aWRJc1ZhbGlkKGNvbnN0ckZvcm0tPmNvbnBhcmVudGlkKSkKKwkJCWNvbnRpbnVlOworCisJCS8q CisJCSAqICJ0eXBlIiBhbmQgImNvbnR5cGUiIGFyZSBub3QgcGFydCBvZiB0aGUgcHJpbnRhYmxl IG91dHB1dCwgYnV0IGFyZQorCQkgKiB1c2VmdWwgdG8gcHJvZ3JhbW1hdGljYWxseSBkaXN0aW5n dWlzaCB0aGVzZSBmcm9tIGNvbHVtbnMgYW5kIGFtb25nCisJCSAqIGRpZmZlcmVudCBjb25zdHJh aW50IHR5cGVzLgorCQkgKgorCQkgKiBYWFggaXQgbWlnaHQgYmUgdXNlZnVsIHRvIGFsc28gbGlz dCB0aGUgY29sdW1uIG5hbWVzIGluIGEgUEssIGV0Yy4KKwkJICovCisJCWluaXRTdHJpbmdJbmZv KCZmbXRTdHIpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIsICJDT05TVFJBSU5U ICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIik7CisJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pC X0JFR0lOX09CSkVDVCwgTlVMTCk7CisKKwkJbmV3X2pzb25iX1ZBKHN0YXRlLCA0LAorCQkJCQkg InR5cGUiLCBqYnZTdHJpbmcsICJjb25zdHJhaW50IiwKKwkJCQkJICJjb250eXBlIiwgamJ2U3Ry aW5nLCBjb250eXBlLAorCQkJCQkgIm5hbWUiLCBqYnZTdHJpbmcsIE5hbWVTdHIoY29uc3RyRm9y bS0+Y29ubmFtZSksCisJCQkJCSAiZGVmaW5pdGlvbiIsIGpidlN0cmluZywKKwkJCQkJIHBnX2dl dF9jb25zdHJhaW50ZGVmX3N0cmluZyhjb25zdHJGb3JtLT5vaWQpKTsKKworCQlpZiAoY29uc3Ry Rm9ybS0+Y29uaW5kaWQgJiYKKwkJCShjb25zdHJGb3JtLT5jb250eXBlID09IENPTlNUUkFJTlRf UFJJTUFSWSB8fAorCQkJIGNvbnN0ckZvcm0tPmNvbnR5cGUgPT0gQ09OU1RSQUlOVF9VTklRVUUg fHwKKwkJCSBjb25zdHJGb3JtLT5jb250eXBlID09IENPTlNUUkFJTlRfRVhDTFVTSU9OKSkKKwkJ eworCQkJT2lkCQkJdGJsc3BjID0gZ2V0X3JlbF90YWJsZXNwYWNlKGNvbnN0ckZvcm0tPmNvbmlu ZGlkKTsKKworCQkJaWYgKE9pZElzVmFsaWQodGJsc3BjKSkKKwkJCXsKKwkJCQljaGFyCSAgICp0 YmxzcGNuYW1lID0gZ2V0X3RhYmxlc3BhY2VfbmFtZSh0YmxzcGMpOworCisJCQkJaWYgKCF0Ymxz cGNuYW1lKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdGFibGVz cGFjZSAldSIsCisJCQkJCQkgdGJsc3BjKTsKKworCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco JmZtdFN0ciwKKwkJCQkJCQkJCSAgICIgVVNJTkcgSU5ERVggVEFCTEVTUEFDRSAle3RibHNwY31z Iik7CisJCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLAorCQkJCQkJCSAidGJsc3BjIiwgamJ2U3Ry aW5nLCB0YmxzcGNuYW1lKTsKKwkJCX0KKwkJfQorCisJCS8qIFdlIGhhdmUgZnVsbCBmbXQgYnkg bm93LCBzbyBhZGQganNvbmIgZWxlbWVudCBmb3IgdGhhdCAqLworCQluZXdfanNvbmJfVkEoc3Rh dGUsIDEsICJmbXQiLCBqYnZTdHJpbmcsIGZtdFN0ci5kYXRhKTsKKworCQlwZnJlZShmbXRTdHIu ZGF0YSk7CisKKwkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7 CisJfQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShjb25SZWwsIEFj Y2Vzc1NoYXJlTG9jayk7Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZvciBDUkVBVEUgVEFCTEUg ZGVwYXJzaW5nLgorICoKKyAqIEluc2VydCBjb2x1bW5zIGFuZCBjb25zdHJhaW50cyBlbGVtZW50 cyhpZiBhbnkpIGluIG91dHB1dCBKc29uYlBhcnNlU3RhdGUKKyAqLworc3RhdGljIHZvaWQKK2Fk ZF90YWJsZV9lbGVtcyhKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBTdHJpbmdJbmZvIGZtdFN0ciwK KwkJCQkJICAgUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKnRhYmxlRWx0cywgTGlzdCAqZHBjb250 ZXh0LAorCQkJCQkgICBPaWQgb2JqZWN0SWQsIGJvb2wgaW5oZXJpdCwgYm9vbCB0eXBlZCwgYm9v bCBjb21wb3NpdGUpCit7CisJaW5zZXJ0X2pzb25iX2tleShzdGF0ZSwgInRhYmxlX2VsZW1lbnRz Iik7CisKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9BUlJBWSwgTlVMTCk7CisK KwkvKgorCSAqIFByb2Nlc3MgdGFibGUgZWxlbWVudHM6IGNvbHVtbiBkZWZpbml0aW9ucyBhbmQg Y29uc3RyYWludHMuIE9ubHkgdGhlCisJICogY29sdW1uIGRlZmluaXRpb25zIGFyZSBvYnRhaW5l ZCBmcm9tIHRoZSBwYXJzZSBub2RlIGl0c2VsZi4gVG8gZ2V0CisJICogY29uc3RyYWludHMgd2Ug cmVseSBvbiBwZ19jb25zdHJhaW50LCBiZWNhdXNlIHRoZSBwYXJzZSBub2RlIG1pZ2h0IGJlCisJ ICogbWlzc2luZyBzb21lIHRoaW5ncyBzdWNoIGFzIHRoZSBuYW1lIG9mIHRoZSBjb25zdHJhaW50 cy4KKwkgKi8KKwlkZXBhcnNlX1RhYmxlRWxlbXMoc3RhdGUsIHJlbGF0aW9uLCB0YWJsZUVsdHMs IGRwY29udGV4dCwKKwkJCQkJICAgdHlwZWQsCS8qIHR5cGVkIHRhYmxlICovCisJCQkJCSAgIGNv bXBvc2l0ZSk7CS8qIG5vdCBjb21wb3NpdGUgKi8KKworCWRlcGFyc2VfQ29uc3RyYWludHMoc3Rh dGUsIG9iamVjdElkKTsKKworCS8qCisJICogRGVjaWRlIGlmIHdlIG5lZWQgdG8gcHV0ICcoKScg YXJvdW5kIHRhYmxlX2VsZW1lbnRzLiBJdCBpcyBuZWVkZWQgZm9yCisJICogYmVsb3cgY2FzZXM6 CisJICoKKwkgKiBhKSB3aGVyZSBhY3R1YWwgdGFibGUtZWxlbWVudHMgYXJlIHByZXNlbnQsIGVn OiBjcmVhdGUgdGFibGUgdDEgKGEgaW50KQorCSAqCisJICogYSkgaW5oZXJpdCBjYXNlIHdpdGgg bm8gbG9jYWwgdGFibGUtZWxlbWVudHMgcHJlc2VudCwgZWc6IGNyZWF0ZSB0YWJsZQorCSAqIHQx ICgpIGluaGVyaXRzICh0MikKKwkgKgorCSAqIE9UT0gsICcoKScgaXMgbm90IG5lZWRlZCBmb3Ig YmVsb3cgY2FzZXMgd2hlbiBubyB0YWJsZS1lbGVtZW50cyBhcmUKKwkgKiBwcmVzZW50OgorCSAq CisJICogYSkgJ3BhcnRpdGlvbiBvZicgY2FzZSwgZWc6IGNyZWF0ZSB0YWJsZSB0MiBwYXJ0aXRp b24gb2YgdDEKKwkgKgorCSAqIGIpICdvZiB0eXBlJyBjYXNlLCBlZzogY3JlYXRlIHRhYmxlIHQx IG9mIHR5cGUxOworCSAqLworCWlmICgoc3RhdGUtPmNvbnRWYWwudHlwZSA9PSBqYnZBcnJheSkg JiYKKwkJKGluaGVyaXQgfHwgKHN0YXRlLT5jb250VmFsLnZhbC5hcnJheS5uRWxlbXMgPiAwKSkp CisJeworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGZtdFN0ciwgIiAoJXt0YWJsZV9lbGVtZW50 czosIH1zKSIpOworCX0KKwllbHNlCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoZm10U3RyLCAi ICV7dGFibGVfZWxlbWVudHM6LCB9cyIpOworCisJLyogZW5kIG9mIHRhYmxlX2VsZW1lbnRzIGFy cmF5ICovCisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX0FSUkFZLCBOVUxMKTsKK30K KworLyoKKyAqIERlcGFyc2UgRGVmRWxlbXMsIGFzIHVzZWQgYnkgQ3JlYXRlIFRhYmxlCisgKgor ICogVmVyYm9zZSBzeW50YXgKKyAqICV7bGFiZWx9cyA9ICV7dmFsdWV9TAorICogd2hlcmUgbGFi ZWwgaXM6ICV7c2NoZW1hfUkgJXtsYWJlbH1JCisgKi8KK3N0YXRpYyB2b2lkCitkZXBhcnNlX0Rl ZkVsZW0oSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgRGVmRWxlbSAqZWxlbSwgYm9vbCBpc19yZXNl dCkKK3sKKwlTdHJpbmdJbmZvRGF0YSBmbXRTdHI7CisJU3RyaW5nSW5mb0RhdGEgbGFiZWxmbXQ7 CisKKwlpbml0U3RyaW5nSW5mbygmZm10U3RyKTsKKworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco JmZtdFN0ciwgIiV7bGFiZWx9cyIpOworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lO X09CSkVDVCwgTlVMTCk7CisKKwkvKiBMQUJFTCAqLworCWluaXRTdHJpbmdJbmZvKCZsYWJlbGZt dCk7CisKKwlpbnNlcnRfanNvbmJfa2V5KHN0YXRlLCAibGFiZWwiKTsKKwlwdXNoSnNvbmJWYWx1 ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCisJaWYgKGVsZW0tPmRlZm5hbWVz cGFjZSAhPSBOVUxMKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmbGFiZWxmbXQsICIl e3NjaGVtYX1JLiIpOworCQluZXdfanNvbmJfVkEoc3RhdGUsIDEsCisJCQkJCSAic2NoZW1hIiwg amJ2U3RyaW5nLCBlbGVtLT5kZWZuYW1lc3BhY2UpOworCX0KKworCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoJmxhYmVsZm10LCAiJXtsYWJlbH1JIik7CisJbmV3X2pzb25iX1ZBKHN0YXRlLCAyLAor CQkJCSAibGFiZWwiLCBqYnZTdHJpbmcsIGVsZW0tPmRlZm5hbWUsCisJCQkJICJmbXQiLCBqYnZT dHJpbmcsIGxhYmVsZm10LmRhdGEpOworCXBmcmVlKGxhYmVsZm10LmRhdGEpOworCisJcHVzaEpz b25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisKKwkvKiBWQUxVRSAqLwor CWlmICghaXNfcmVzZXQpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIsICIg PSAle3ZhbHVlfUwiKTsKKwkJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLCAidmFsdWUiLCBqYnZTdHJp bmcsCisJCQkJCSBlbGVtLT5hcmcgPyBkZWZHZXRTdHJpbmcoZWxlbSkgOgorCQkJCQkgZGVmR2V0 Qm9vbGVhbihlbGVtKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCX0KKworCW5ld19qc29uYl9WQShz dGF0ZSwgMSwgImZtdCIsIGpidlN0cmluZywgZm10U3RyLmRhdGEpOworCXBmcmVlKGZtdFN0ci5k YXRhKTsKKworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOwor fQorCisvKgorICogRGVwYXJzZSBXSVRIIGNsYXVzZSwgYXMgdXNlZCBieSBDcmVhdGUgVGFibGUu CisgKgorICogVmVyYm9zZSBzeW50YXggKGZvcm11bGF0ZWQgaW4gaGVscGVyIGZ1bmN0aW9uIGRl cGFyc2VfRGVmRWxlbSkKKyAqICV7bGFiZWx9cyA9ICV7dmFsdWV9TAorICovCitzdGF0aWMgdm9p ZAorZGVwYXJzZV93aXRoT2JqKEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIENyZWF0ZVN0bXQgKm5v ZGUpCit7CisJTGlzdENlbGwgICAqY2VsbDsKKworCS8qIFdJVEggKi8KKwlpbnNlcnRfanNvbmJf a2V5KHN0YXRlLCAid2l0aCIpOworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX0FS UkFZLCBOVUxMKTsKKworCS8qIGFkZCBlbGVtZW50cyB0byBhcnJheSAqLworCWZvcmVhY2goY2Vs bCwgbm9kZS0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAgKm9wdCA9IChEZWZFbGVtICopIGxm aXJzdChjZWxsKTsKKworCQlkZXBhcnNlX0RlZkVsZW0oc3RhdGUsIG9wdCwgZmFsc2UpOworCX0K KworCS8qIHdpdGgncyBhcnJheSBlbmQgKi8KKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9F TkRfQVJSQVksIE5VTEwpOworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVN0bXQgKENSRUFU RSBUQUJMRSkuCisgKgorICogR2l2ZW4gYSB0YWJsZSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRo YXQgY3JlYXRlZCBpdCwgcmV0dXJuIEpzb25iVmFsdWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3Jl YXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFICV7cGVyc2lz dGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgW09GCisgKiAle29m X3R5cGV9VCB8IFBBUlRJVElPTiBPRiAle3BhcmVudF9pZGVudGl0eX1EXSAle3RhYmxlX2VsZW1l bnRzfXMKKyAqICV7aW5oZXJpdHN9cyAle3BhcnRpdGlvbl9ib3VuZH1zICV7cGFydGl0aW9uX2J5 fXMgJXthY2Nlc3NfbWV0aG9kfXMKKyAqICV7d2l0aF9jbGF1c2V9cyAle3RhYmxlc3BhY2V9cwor ICovCitzdGF0aWMgSnNvbmIgKgorZGVwYXJzZV9DcmVhdGVTdG10KE9pZCBvYmplY3RJZCwgTm9k ZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVN0bXQgKm5vZGUgPSAoQ3JlYXRlU3RtdCAqKSBwYXJz ZXRyZWU7CisJUmVsYXRpb24JcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nl c3NTaGFyZUxvY2spOworCU9pZAkJCW5zcGlkID0gcmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNw YWNlOworCWNoYXIJICAgKnJlbG5hbWUgPSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlv bik7CisJTGlzdAkgICAqZHBjb250ZXh0OworCWNoYXIJICAgKnBlcnN0cjsKKwlTdHJpbmdJbmZv RGF0YSBmbXRTdHI7CisJSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSA9IE5VTEw7CisJSnNvbmJWYWx1 ZSAqdmFsdWU7CisKKwlpbml0U3RyaW5nSW5mbygmZm10U3RyKTsKKworCS8qIG1hcmsgdGhlIGJl Z2luIG9mIFJPT1Qgb2JqZWN0IGFuZCBzdGFydCBhZGRpbmcgZWxlbWVudHMgdG8gaXQuICovCisJ cHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKworCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoJmZtdFN0ciwgIkNSRUFURSIpOworCisJLyogUEVSU0lTVEVOQ0Ug Ki8KKwlwZXJzdHIgPSBnZXRfcGVyc2lzdGVuY2Vfc3RyKHJlbGF0aW9uLT5yZF9yZWwtPnJlbHBl cnNpc3RlbmNlKTsKKwlpZiAocGVyc3RyKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygm Zm10U3RyLCAiICV7cGVyc2lzdGVuY2V9cyIpOworCQluZXdfanNvbmJfVkEoc3RhdGUsIDEsCisJ CQkJCSAicGVyc2lzdGVuY2UiLCBqYnZTdHJpbmcsIHBlcnN0cik7CisJfQorCisJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmZm10U3RyLCAiIFRBQkxFIik7CisKKwkvKiBJRiBOT1QgRVhJU1RTICov CisJaWYgKG5vZGUtPmlmX25vdF9leGlzdHMpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KCZmbXRTdHIsICIgJXtpZl9ub3RfZXhpc3RzfXMiKTsKKwkJbmV3X2pzb25iX1ZBKHN0YXRlLCAx LAorCQkJCQkgImlmX25vdF9leGlzdHMiLCBqYnZTdHJpbmcsICJJRiBOT1QgRVhJU1RTIik7CisJ fQorCisJLyogSURFTlRJVFkgKi8KKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIsICIg JXtpZGVudGl0eX1EIik7CisJaW5zZXJ0X2lkZW50aXR5X29iamVjdChzdGF0ZSwgbnNwaWQsIHJl bG5hbWUpOworCisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShyZWxhdGlvbiksCisJCQkJCQkJCQlvYmplY3RJZCk7CisKKwkvKgorCSAqIFRB QkxFLUVMRU1FTlRTIGFycmF5IGNyZWF0aW9uCisJICovCisJaWYgKG5vZGUtPm9mVHlwZW5hbWUg fHwgbm9kZS0+cGFydGJvdW5kKQorCXsKKwkJLyogSW5zZXJ0IHRoZSAib2YgdHlwZSIgb3IgInBh cnRpdGlvbiBvZiIgY2xhdXNlIHdoaWNoZXZlciBwcmVzZW50ICovCisJCWlmIChub2RlLT5vZlR5 cGVuYW1lKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIsICIgT0YgJXtv Zl90eXBlfVQiKTsKKwkJCW5ld19qc29uYl9mb3JfdHlwZShzdGF0ZSwgIm9mX3R5cGUiLAorCQkJ CQkJCSAgIHJlbGF0aW9uLT5yZF9yZWwtPnJlbG9mdHlwZSwgLTEpOworCQl9CisJCWVsc2UKKwkJ eworCQkJTGlzdAkgICAqcGFyZW50czsKKwkJCU9pZAkJCW9iamlkOworCisJCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZmbXRTdHIsICIgUEFSVElUSU9OIE9GICV7cGFyZW50X2lkZW50aXR5fUQi KTsKKwkJCXBhcmVudHMgPSByZWxhdGlvbl9nZXRfaW5oX3BhcmVudHMob2JqZWN0SWQpOworCQkJ b2JqaWQgPSBsaW5pdGlhbF9vaWQocGFyZW50cyk7CisJCQlBc3NlcnQobGlzdF9sZW5ndGgocGFy ZW50cykgPT0gMSk7CisJCQluZXdfanNvbmJfZm9yX3F1YWxuYW1lX2lkKHN0YXRlLCBSZWxhdGlv blJlbGF0aW9uSWQsCisJCQkJCQkJCQkgIG9iamlkLCAicGFyZW50X2lkZW50aXR5IiwgdHJ1ZSk7 CisJCX0KKworCQlhZGRfdGFibGVfZWxlbXMoc3RhdGUsICZmbXRTdHIsIHJlbGF0aW9uLAorCQkJ CQkJCSAgIG5vZGUtPnRhYmxlRWx0cywgZHBjb250ZXh0LCBvYmplY3RJZCwKKwkJCQkJCQkgICBm YWxzZSwJLyogbm90IGluaGVyaXQgKi8KKwkJCQkJCQkgICB0cnVlLAkvKiB0eXBlZCB0YWJsZSAq LworCQkJCQkJCSAgIGZhbHNlKTsJLyogbm90IGNvbXBvc2l0ZSAqLworCX0KKwllbHNlCisJewor CQlMaXN0CSAgICppbmhyZWxhdGlvbnM7CisKKwkJLyoKKwkJICogVGhlcmUgaXMgbm8gbmVlZCB0 byBwcm9jZXNzIExJS0UgY2xhdXNlcyBzZXBhcmF0ZWx5OyB0aGV5IGhhdmUKKwkJICogYWxyZWFk eSBiZWVuIHRyYW5zZm9ybWVkIGludG8gY29sdW1ucyBhbmQgY29uc3RyYWludHMuCisJCSAqLwor CisJCWFkZF90YWJsZV9lbGVtcyhzdGF0ZSwgJmZtdFN0ciwgcmVsYXRpb24sCisJCQkJCQkJICAg bm9kZS0+dGFibGVFbHRzLCBkcGNvbnRleHQsIG9iamVjdElkLAorCQkJCQkJCSAgIHRydWUsCS8q IGluaGVyaXQgKi8KKwkJCQkJCQkgICBmYWxzZSwJLyogbm90IHR5cGVkIHRhYmxlICovCisJCQkJ CQkJICAgZmFsc2UpOwkvKiBub3QgY29tcG9zaXRlICovCisKKwkJLyoKKwkJICogQWRkIGluaGVy aXRhbmNlIHNwZWNpZmljYXRpb24uICBXZSBjYW5ub3Qgc2ltcGx5IHNjYW4gdGhlIGxpc3Qgb2YK KwkJICogcGFyZW50cyBmcm9tIHRoZSBwYXJzZXIgbm9kZSwgYmVjYXVzZSB0aGF0IG1heSBsYWNr IHRoZSBhY3R1YWwKKwkJICogcXVhbGlmaWVkIG5hbWVzIG9mIHRoZSBwYXJlbnQgcmVsYXRpb25z LiAgUmF0aGVyIHRoYW4gdHJ5aW5nIHRvCisJCSAqIHJlLXJlc29sdmUgdGhlbSBmcm9tIHRoZSBp bmZvcm1hdGlvbiBpbiB0aGUgcGFyc2Ugbm9kZSwgaXQgc2VlbXMKKwkJICogbW9yZSBhY2N1cmF0 ZSBhbmQgY29udmVuaWVudCB0byBncmFiIGl0IGZyb20gcGdfaW5oZXJpdHMuCisJCSAqLworCQlp ZiAobm9kZS0+aW5oUmVsYXRpb25zICE9IE5JTCkKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZygmZm10U3RyLCAiICV7aW5oZXJpdHN9cyIpOworCQkJaW5zZXJ0X2pzb25iX2tleShzdGF0 ZSwgImluaGVyaXRzIik7CisKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09C SkVDVCwgTlVMTCk7CisKKwkJCW5ld19qc29uYl9WQShzdGF0ZSwgMSwgImZtdCIsIGpidlN0cmlu ZywgIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiKTsKKwkJCWluaHJlbGF0aW9ucyA9IHJlbGF0 aW9uX2dldF9pbmhfcGFyZW50cyhvYmplY3RJZCk7CisKKwkJCW5ld19qc29uYkFycmF5X2Zvcl9x dWFsbmFtZV9pZChzdGF0ZSwgInBhcmVudHMiLCBpbmhyZWxhdGlvbnMpOworCQkJcHVzaEpzb25i VmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisJCX0KKwl9CisKKwkvKiBGT1Ig VkFMVUVTIGNsYXVzZSAqLworCWlmIChub2RlLT5wYXJ0Ym91bmQpCisJeworCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZmbXRTdHIsICIgJXtwYXJ0aXRpb25fYm91bmR9cyIpOworCisJCS8qCisJ CSAqIEdldCBwZ19jbGFzcy5yZWxwYXJ0Ym91bmQuIFdlIGNhbm5vdCB1c2UgcGFydGJvdW5kIGlu IHRoZSBwYXJzZXRyZWUKKwkJICogZGlyZWN0bHkgYXMgaXQncyB0aGUgb3JpZ2luYWwgcGFydGJv dW5kIGV4cHJlc3Npb24gd2hpY2ggaGF2ZW4ndAorCQkgKiBiZWVuIHRyYW5zZm9ybWVkLgorCQkg Ki8KKwkJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLAorCQkJCQkgInBhcnRpdGlvbl9ib3VuZCIsIGpi dlN0cmluZywKKwkJCQkJIHJlbGF0aW9uX2dldF9wYXJ0X2JvdW5kKG9iamVjdElkKSk7CisJfQor CisJLyogUEFSVElUSU9OIEJZIGNsYXVzZSAqLworCWlmIChyZWxhdGlvbi0+cmRfcmVsLT5yZWxr aW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJeworCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKCZmbXRTdHIsICIgJXtwYXJ0aXRpb25fYnl9cyIpOworCQlpbnNlcnRfanNvbmJfa2V5 KHN0YXRlLCAicGFydGl0aW9uX2J5Iik7CisJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JF R0lOX09CSkVDVCwgTlVMTCk7CisKKwkJbmV3X2pzb25iX1ZBKHN0YXRlLCAyLAorCQkJCQkgImZt dCIsIGpidlN0cmluZywgIlBBUlRJVElPTiBCWSAle2RlZmluaXRpb259cyIsCisJCQkJCSAiZGVm aW5pdGlvbiIsIGpidlN0cmluZywKKwkJCQkJIHBnX2dldF9wYXJ0a2V5ZGVmX3N0cmluZyhvYmpl Y3RJZCkpOworCisJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwp OworCX0KKworCS8qIFVTSU5HIGNsYXVzZSAqLworCWlmIChub2RlLT5hY2Nlc3NNZXRob2QpCisJ eworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIsICIgJXthY2Nlc3NfbWV0aG9kfXMi KTsKKwkJaW5zZXJ0X2pzb25iX2tleShzdGF0ZSwgImFjY2Vzc19tZXRob2QiKTsKKwkJcHVzaEpz b25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKworCQluZXdfanNvbmJf VkEoc3RhdGUsIDIsCisJCQkJCSAiZm10IiwgamJ2U3RyaW5nLCAiVVNJTkcgJXthY2Nlc3NfbWV0 aG9kfUkiLAorCQkJCQkgImFjY2Vzc19tZXRob2QiLCBqYnZTdHJpbmcsIG5vZGUtPmFjY2Vzc01l dGhvZCk7CisJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOwor CX0KKworCS8qIFdJVEggY2xhdXNlICovCisJaWYgKG5vZGUtPm9wdGlvbnMpCisJeworCQlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIsICIgJXt3aXRoX2NsYXVzZX1zIik7CisJCWluc2Vy dF9qc29uYl9rZXkoc3RhdGUsICJ3aXRoX2NsYXVzZSIpOworCQlwdXNoSnNvbmJWYWx1ZSgmc3Rh dGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCQluZXdfanNvbmJfVkEoc3RhdGUsIDEsCisJ CQkJCSAiZm10IiwgamJ2U3RyaW5nLCAiV0lUSCAoJXt3aXRoOiwgfXMpIik7CisKKwkJZGVwYXJz ZV93aXRoT2JqKHN0YXRlLCBub2RlKTsKKworCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9F TkRfT0JKRUNULCBOVUxMKTsKKworCX0KKworCS8qIFRBQkxFU1BBQ0UgKi8KKwlpZiAobm9kZS0+ dGFibGVzcGFjZW5hbWUpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIsICIg JXt0YWJsZXNwYWNlfXMiKTsKKwkJaW5zZXJ0X2pzb25iX2tleShzdGF0ZSwgInRhYmxlc3BhY2Ui KTsKKwkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKwkJ bmV3X2pzb25iX1ZBKHN0YXRlLCAyLAorCQkJCQkgImZtdCIsIGpidlN0cmluZywgIlRBQkxFU1BB Q0UgJXt0YWJsZXNwYWNlfUkiLAorCQkJCQkgInRhYmxlc3BhY2UiLCBqYnZTdHJpbmcsIG5vZGUt PnRhYmxlc3BhY2VuYW1lKTsKKwkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVD VCwgTlVMTCk7CisJfQorCisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9j ayk7CisKKwkvKiBXZSBoYXZlIGZ1bGwgZm10IGJ5IG5vdywgc28gYWRkIGpzb25iIGVsZW1lbnQg Zm9yIHRoYXQgKi8KKwluZXdfanNvbmJfVkEoc3RhdGUsIDEsICJmbXQiLCBqYnZTdHJpbmcsIGZt dFN0ci5kYXRhKTsKKworCXBmcmVlKGZtdFN0ci5kYXRhKTsKKworCS8qIE1hcmsgdGhlIGVuZCBv ZiBST09UIG9iamVjdCAqLworCXZhbHVlID0gcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5E X09CSkVDVCwgTlVMTCk7CisKKwlyZXR1cm4gSnNvbmJWYWx1ZVRvSnNvbmIodmFsdWUpOworfQor CisvKgorICogRGVwYXJzZSBhIERyb3BTdG10IChEUk9QIFRBQkxFKS4KKyAqCisgKiBHaXZlbiBh biBvYmplY3QgaWRlbnRpdHkgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0 dXJuCisgKiBqc29uYiBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBkcm9wIGNvbW1hbmQuCisgKgor ICogVmVyYm9zZSBzeW50YXgKKyAqIERST1AgVEFCTEUgJXtjb25jdXJyZW50bHl9cyAle2lmX2V4 aXN0c31zICV7b2JqaWRlbnRpdHl9cyAle2Nhc2NhZGV9cworICovCitjaGFyICoKK2RlcGFyc2Vf ZHJvcF90YWJsZShjb25zdCBjaGFyICpvYmppZGVudGl0eSwgTm9kZSAqcGFyc2V0cmVlKQorewor CURyb3BTdG10ICAgKm5vZGUgPSAoRHJvcFN0bXQgKikgcGFyc2V0cmVlOworCVN0cmluZ0luZm9E YXRhIGZtdFN0cjsKKwlKc29uYlZhbHVlICpqc29uYnZhbDsKKwlKc29uYgkgICAqanNvbmI7CisJ U3RyaW5nSW5mb0RhdGEgc3RyOworCUpzb25iUGFyc2VTdGF0ZSAqc3RhdGUgPSBOVUxMOworCisJ aW5pdFN0cmluZ0luZm8oJnN0cik7CisJaW5pdFN0cmluZ0luZm8oJmZtdFN0cik7CisKKwkvKiBt YXJrIHRoZSBiZWdpbiBvZiBST09UIG9iamVjdCBhbmQgc3RhcnQgYWRkaW5nIGVsZW1lbnRzIHRv IGl0LiAqLworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7 CisKKwkvKiBTdGFydCBjb25zdHJ1Y3RpbmcgZm10IHN0cmluZyAqLworCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoJmZtdFN0ciwgIkRST1AgVEFCTEUiKTsKKworCS8qIENPTkNVUlJFTlRMWSAqLwor CWlmIChub2RlLT5jb25jdXJyZW50KQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10 U3RyLCAiICV7Y29uY3VycmVudGx5fXMiKTsKKwkJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLAorCQkJ CQkgImNvbmN1cnJlbnRseSIsIGpidlN0cmluZywgIkNPTkNVUlJFTlRMWSIpOworCX0KKworCS8q IElGIEVYSVNUUyAqLworCWlmIChub2RlLT5taXNzaW5nX29rKQorCXsKKwkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZygmZm10U3RyLCAiICV7aWZfZXhpc3RzfXMiKTsKKwkJbmV3X2pzb25iX1ZBKHN0 YXRlLCAxLCAiaWZfZXhpc3RzIiwgamJ2U3RyaW5nLCAiSUYgRVhJU1RTIik7CisJfQorCisJLyog SURFTlRJVFkgKi8KKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIsICIgJXtvYmppZGVu dGl0eX1zIik7CisJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLCAib2JqaWRlbnRpdHkiLCBqYnZTdHJp bmcsIG9iamlkZW50aXR5KTsKKworCS8qIENBU0NBREUgKi8KKwlpZiAobm9kZS0+YmVoYXZpb3Ig PT0gRFJPUF9DQVNDQURFKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3RyLCAi ICV7Y2FzY2FkZX1zIik7CisJCW5ld19qc29uYl9WQShzdGF0ZSwgMSwgImNhc2NhZGUiLCBqYnZT dHJpbmcsICJDQVNDQURFIik7CisJfQorCisJLyogV2UgaGF2ZSBmdWxsIGZtdCBieSBub3csIHNv IGFkZCBqc29uYiBlbGVtZW50IGZvciB0aGF0ICovCisJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLCAi Zm10IiwgamJ2U3RyaW5nLCBmbXRTdHIuZGF0YSk7CisJcGZyZWUoZm10U3RyLmRhdGEpOworCisJ anNvbmJ2YWwgPSBwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsK KworCWpzb25iID0gSnNvbmJWYWx1ZVRvSnNvbmIoanNvbmJ2YWwpOworCXJldHVybiBKc29uYlRv Q1N0cmluZygmc3RyLCAmanNvbmItPnJvb3QsIEpTT05CX0VTVElNQVRFRF9MRU4pOworfQorCisv KgorICogRGVwYXJzZSBhIENyZWF0ZVNlcVN0bXQuCisgKgorICogR2l2ZW4gYSBzZXF1ZW5jZSBP SUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIEpzb25iCisgKiBy ZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogTm90ZTogV2UgbmVlZCB0 byBkZXBhcnNlIHRoZSBDUkVBVEUgU0VRVUVOQ0UgY29tbWFuZCBmb3IgdGhlIFRBQkxFCisgKiBj b21tYW5kcy4gRm9yIGV4YW1wbGUsIFdoZW4gY3JlYXRpbmcgYSB0YWJsZSwgaWYgd2Ugc3BlY2lm eSBhIGNvbHVtbiBhcyBhCisgKiBzZXJpYWwgdHlwZSwgdGhlbiB3ZSB3aWxsIGNyZWF0ZSBhIHNl cXVlbmNlIGZvciB0aGF0IGNvbHVtbiBhbmQgc2V0IHRoYXQKKyAqIHNlcXVlbmNlIE9XTkVEIEJZ IHRoZSB0YWJsZS4gVGhlIHNlcmlhbCBjb2x1bW4gdHlwZSBpbmZvcm1hdGlvbiBpcyBub3QKKyAq IGF2YWlsYWJsZSBkdXJpbmcgZGVwYXJzaW5nIHBoYXNlIGFzIHRoYXQgaGFzIGFscmVhZHkgYmVl biBjb252ZXJ0ZWQgdG8KKyAqIHRoZSBjb2x1bW4gZGVmYXVsdCB2YWx1ZSBhbmQgc2VxdWVuY2Vz IGNyZWF0aW9uIHdoaWxlIHBhcnNpbmcuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFU RSAle3BlcnNpc3RlbmNlfXMgU0VRVUVOQ0UgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1E ICV7ZGVmaW5pdGlvbjogfXMKKyAqLworc3RhdGljIEpzb25iICoKK2RlcGFyc2VfQ3JlYXRlU2Vx U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlSZWxhdGlvbglyZWxhdGlv bjsKKwlGb3JtX3BnX3NlcXVlbmNlIHNlcWZvcm07CisJU2VxdWVuY2VfdmFsdWVzICpzZXF2YWx1 ZXM7CisJQ3JlYXRlU2VxU3RtdCAqY3JlYXRlU2VxU3RtdCA9IChDcmVhdGVTZXFTdG10ICopIHBh cnNldHJlZTsKKwlKc29uYlBhcnNlU3RhdGUgKnN0YXRlID0gTlVMTDsKKwlKc29uYlZhbHVlICp2 YWx1ZTsKKwlTdHJpbmdJbmZvRGF0YSBmbXRTdHI7CisJY2hhcgkgICAqcGVyc3RyOworCisJLyoK KwkgKiBPbmx5IHN1cHBvcnQgc2VxdWVuY2UgZm9yIElERU5USVRZIENPTFVNTiBvdXRwdXQgc2Vw YXJhdGVseSAodmlhIENSRUFURQorCSAqIFRBQkxFIG9yIEFMVEVSIFRBQkxFKS4gT3RoZXJ3aXNl LCByZXR1cm4gZW1wdHkgaGVyZS4KKwkgKi8KKwlpZiAoY3JlYXRlU2VxU3RtdC0+Zm9yX2lkZW50 aXR5KQorCQlyZXR1cm4gTlVMTDsKKworCWluaXRTdHJpbmdJbmZvKCZmbXRTdHIpOworCXJlbGF0 aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCS8qIG1h cmsgdGhlIHN0YXJ0IG9mIFJPT1Qgb2JqZWN0ICovCisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBX SkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIs ICJDUkVBVEUiKTsKKworCS8qIFBFUlNJU1RFTkNFICovCisJcGVyc3RyID0gZ2V0X3BlcnNpc3Rl bmNlX3N0cihyZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSk7CisJaWYgKHBlcnN0cikK Kwl7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmZtdFN0ciwgIiAle3BlcnNpc3RlbmNlfXMi KTsKKwkJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLAorCQkJCQkgInBlcnNpc3RlbmNlIiwgamJ2U3Ry aW5nLCBwZXJzdHIpOworCX0KKworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmZtdFN0ciwgIiBT RVFVRU5DRSIpOworCisJLyogSUYgTk9UIEVYSVNUUyAqLworCWlmIChjcmVhdGVTZXFTdG10LT5p Zl9ub3RfZXhpc3RzKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3RyLCAiICV7 aWZfbm90X2V4aXN0c31zIik7CisJCW5ld19qc29uYl9WQShzdGF0ZSwgMSwKKwkJCQkJICJpZl9u b3RfZXhpc3RzIiwgamJ2U3RyaW5nLCAiSUYgTk9UIEVYSVNUUyIpOworCX0KKworCS8qIElERU5U SVRZICovCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3RyLCAiICV7aWRlbnRpdHl9RCIp OworCWluc2VydF9pZGVudGl0eV9vYmplY3Qoc3RhdGUsIHJlbGF0aW9uLT5yZF9yZWwtPnJlbG5h bWVzcGFjZSwKKwkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSk7CisK KwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXNlcXZhbHVl cyA9IGdldF9zZXF1ZW5jZV92YWx1ZXMob2JqZWN0SWQpOworCXNlcWZvcm0gPSBzZXF2YWx1ZXMt PnNlcWZvcm07CisKKwkvKiBzZXF1ZW5jZSBkZWZpbml0aW9uIGFycmF5IG9iamVjdCBjcmVhdGlv biwgcHVzaCB0aGUga2V5IGZpcnN0ICovCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3Ry LCAiICV7ZGVmaW5pdGlvbjogfXMiKTsKKwlpbnNlcnRfanNvbmJfa2V5KHN0YXRlLCAiZGVmaW5p dGlvbiIpOworCisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fQVJSQVksIE5VTEwp OworCisJLyogRGVmaW5pdGlvbiBlbGVtZW50cyAqLworCWRlcGFyc2VfU2VxX0NhY2hlKHN0YXRl LCBzZXFmb3JtKTsKKwlkZXBhcnNlX1NlcV9DeWNsZShzdGF0ZSwgc2VxZm9ybSk7CisJZGVwYXJz ZV9TZXFfSW5jcmVtZW50Qnkoc3RhdGUsIHNlcWZvcm0pOworCWRlcGFyc2VfU2VxX01pbnZhbHVl KHN0YXRlLCBzZXFmb3JtKTsKKwlkZXBhcnNlX1NlcV9NYXh2YWx1ZShzdGF0ZSwgc2VxZm9ybSk7 CisJZGVwYXJzZV9TZXFfU3RhcnR3aXRoKHN0YXRlLCBzZXFmb3JtKTsKKwlkZXBhcnNlX1NlcV9S ZXN0YXJ0KHN0YXRlLCBzZXF2YWx1ZXMtPmxhc3RfdmFsdWUpOworCWRlcGFyc2VfU2VxX0FzKHN0 YXRlLCBzZXFmb3JtKTsKKwkvKiBXZSBwdXJwb3NlZnVsbHkgZG8gbm90IGVtaXQgT1dORUQgQlkg aGVyZSAqLworCisJLyogbWFyayB0aGUgZW5kIG9mIHNlcXVlbmNlIGRlZmluaXRpb24gYXJyYXkg Ki8KKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfQVJSQVksIE5VTEwpOworCisJLyog V2UgaGF2ZSBmdWxsIGZtdCBieSBub3csIHNvIGFkZCBqc29uYiBlbGVtZW50IGZvciB0aGF0ICov CisJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLCAiZm10IiwgamJ2U3RyaW5nLCBmbXRTdHIuZGF0YSk7 CisKKwlwZnJlZShmbXRTdHIuZGF0YSk7CisKKwkvKiBtYXJrIHRoZSBlbmQgb2YgUk9PVCBvYmpl Y3QgKi8KKwl2YWx1ZSA9IHB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5V TEwpOworCisJcmV0dXJuIEpzb25iVmFsdWVUb0pzb25iKHZhbHVlKTsKK30KKworLyoKKyAqIERl cGFyc2UgYW4gQWx0ZXJTZXFTdG10LgorICoKKyAqIEdpdmVuIGEgc2VxdWVuY2UgT0lEIGFuZCBh IHBhcnNlIHRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJuIEpzb25iCisgKiByZXByZXNlbnRp bmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogTm90ZTogV2UgbmVlZCB0byBkZXBhcnNlIHRo ZSBBTFRFUiBTRVFVRU5DRSBjb21tYW5kIGZvciB0aGUgVEFCTEUgY29tbWFuZHMuCisgKiBGb3Ig ZXhhbXBsZSwgV2hlbiBjcmVhdGluZyBhIHRhYmxlLCBpZiB3ZSBzcGVjaWZ5IGEgY29sdW1uIGFz IGEgc2VyaWFsCisgKiB0eXBlLCB0aGVuIHdlIHdpbGwgY3JlYXRlIGEgc2VxdWVuY2UgZm9yIHRo YXQgY29sdW1uIGFuZCBzZXQgdGhhdCBzZXF1ZW5jZQorICogT1dORUQgQlkgdGhlIHRhYmxlLiBU aGUgc2VyaWFsIGNvbHVtbiB0eXBlIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUKKyAqIGR1 cmluZyBkZXBhcnNpbmcgcGhhc2UgYXMgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNvbnZlcnRlZCB0 byB0aGUgY29sdW1uCisgKiBkZWZhdWx0IHZhbHVlIGFuZCBzZXF1ZW5jZXMgY3JlYXRpb24gd2hp bGUgcGFyc2luZy4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgU0VRVUVOQ0UgJXtp ZGVudGl0eX1EICV7ZGVmaW5pdGlvbjogfXMKKyAqLworc3RhdGljIEpzb25iICoKK2RlcGFyc2Vf QWx0ZXJTZXFTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCVJlbGF0aW9u CXJlbGF0aW9uOworCUxpc3RDZWxsICAgKmNlbGw7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3Jt OworCVNlcXVlbmNlX3ZhbHVlcyAqc2VxdmFsdWVzOworCUFsdGVyU2VxU3RtdCAqYWx0ZXJTZXFT dG10ID0gKEFsdGVyU2VxU3RtdCAqKSBwYXJzZXRyZWU7CisJSnNvbmJQYXJzZVN0YXRlICpzdGF0 ZSA9IE5VTEw7CisJSnNvbmJWYWx1ZSAqdmFsdWU7CisKKwkvKgorCSAqIFNlcXVlbmNlIGZvciBJ REVOVElUWSBDT0xVTU4gb3V0cHV0IHNlcGFyYXRlbHkgKHZpYSBDUkVBVEUgVEFCTEUgb3IKKwkg KiBBTFRFUiBUQUJMRSk7IHJldHVybiBlbXB0eSBoZXJlLgorCSAqLworCWlmIChhbHRlclNlcVN0 bXQtPmZvcl9pZGVudGl0eSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZWxhdGlvbiA9IHJlbGF0aW9u X29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkvKiBtYXJrIHRoZSBzdGFydCBv ZiBST09UIG9iamVjdCAqLworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVD VCwgTlVMTCk7CisKKwluZXdfanNvbmJfVkEoc3RhdGUsIDEsCisJCQkJICJmbXQiLCBqYnZTdHJp bmcsICJBTFRFUiBTRVFVRU5DRSAle2lkZW50aXR5fUQgJXtkZWZpbml0aW9uOiB9cyIpOworCisJ aW5zZXJ0X2lkZW50aXR5X29iamVjdChzdGF0ZSwgcmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNw YWNlLAorCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pKTsKKwlyZWxh dGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXNlcXZhbHVlcyA9IGdl dF9zZXF1ZW5jZV92YWx1ZXMob2JqZWN0SWQpOworCXNlcWZvcm0gPSBzZXF2YWx1ZXMtPnNlcWZv cm07CisKKwkvKiBzZXF1ZW5jZSBkZWZpbml0aW9uIGFycmF5IG9iamVjdCBjcmVhdGlvbiwgcHVz aCB0aGUga2V5IGZpcnN0ICovCisJaW5zZXJ0X2pzb25iX2tleShzdGF0ZSwgImRlZmluaXRpb24i KTsKKworCS8qIG1hcmsgdGhlIHN0YXJ0IG9mIHNlcXVlbmNlIGRlZmluaXRpb24gYXJyYXkgKi8K KwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9BUlJBWSwgTlVMTCk7CisKKwlmb3Jl YWNoKGNlbGwsICgoQWx0ZXJTZXFTdG10ICopIHBhcnNldHJlZSktPm9wdGlvbnMpCisJeworCQlE ZWZFbGVtICAgICplbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCisJCWlmIChzdHJj bXAoZWxlbS0+ZGVmbmFtZSwgImNhY2hlIikgPT0gMCkKKwkJCWRlcGFyc2VfU2VxX0NhY2hlKHN0 YXRlLCBzZXFmb3JtKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJjeWNsZSIp ID09IDApCisJCQlkZXBhcnNlX1NlcV9DeWNsZShzdGF0ZSwgc2VxZm9ybSk7CisJCWVsc2UgaWYg KHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiaW5jcmVtZW50IikgPT0gMCkKKwkJCWRlcGFyc2VfU2Vx X0luY3JlbWVudEJ5KHN0YXRlLCBzZXFmb3JtKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRl Zm5hbWUsICJtaW52YWx1ZSIpID09IDApCisJCQlkZXBhcnNlX1NlcV9NaW52YWx1ZShzdGF0ZSwg c2VxZm9ybSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAibWF4dmFsdWUiKSA9 PSAwKQorCQkJZGVwYXJzZV9TZXFfTWF4dmFsdWUoc3RhdGUsIHNlcWZvcm0pOworCQllbHNlIGlm IChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInN0YXJ0IikgPT0gMCkKKwkJCWRlcGFyc2VfU2VxX1N0 YXJ0d2l0aChzdGF0ZSwgc2VxZm9ybSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1l LCAicmVzdGFydCIpID09IDApCisJCQlkZXBhcnNlX1NlcV9SZXN0YXJ0KHN0YXRlLCBzZXF2YWx1 ZXMtPmxhc3RfdmFsdWUpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgIm93bmVk X2J5IikgPT0gMCkKKwkJCWRlcGFyc2VfU2VxX093bmVkQnkoc3RhdGUsIG9iamVjdElkKTsKKwkJ ZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJhcyIpID09IDApCisJCQlkZXBhcnNlX1Nl cV9BcyhzdGF0ZSwgc2VxZm9ybSk7CisJCWVsc2UKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHNl cXVlbmNlIG9wdGlvbiAlcyIsIGVsZW0tPmRlZm5hbWUpOworCX0KKworCS8qIG1hcmsgdGhlIGVu ZCBvZiBzZXF1ZW5jZSBkZWZpbml0aW9uIGFycmF5ICovCisJcHVzaEpzb25iVmFsdWUoJnN0YXRl LCBXSkJfRU5EX0FSUkFZLCBOVUxMKTsKKworCS8qIG1hcmsgdGhlIGVuZCBvZiBST09UIG9iamVj dCAqLworCXZhbHVlID0gcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVM TCk7CisKKwlyZXR1cm4gSnNvbmJWYWx1ZVRvSnNvbmIodmFsdWUpOworfQorCisvKgorICogSGFu ZGxlIGRlcGFyc2luZyBvZiBzaW1wbGUgY29tbWFuZHMuCisgKgorICogVGhpcyBmdW5jdGlvbiBz aG91bGQgY292ZXIgYWxsIGNhc2VzIGhhbmRsZWQgaW4gUHJvY2Vzc1V0aWxpdHlTbG93LgorICov CitzdGF0aWMgSnNvbmIgKgorZGVwYXJzZV9zaW1wbGVfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5k ICpjbWQpCit7CisJT2lkCQkJb2JqZWN0SWQ7CisJTm9kZQkgICAqcGFyc2V0cmVlOworCisJQXNz ZXJ0KGNtZC0+dHlwZSA9PSBTQ1RfU2ltcGxlKTsKKworCXBhcnNldHJlZSA9IGNtZC0+cGFyc2V0 cmVlOworCW9iamVjdElkID0gY21kLT5kLnNpbXBsZS5hZGRyZXNzLm9iamVjdElkOworCisJaWYg KGNtZC0+aW5fZXh0ZW5zaW9uICYmIChub2RlVGFnKHBhcnNldHJlZSkgIT0gVF9DcmVhdGVFeHRl bnNpb25TdG10KSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBUaGlzIHN3aXRjaCBuZWVkcyB0byBo YW5kbGUgZXZlcnl0aGluZyB0aGF0IFByb2Nlc3NVdGlsaXR5U2xvdyBkb2VzICovCisJc3dpdGNo IChub2RlVGFnKHBhcnNldHJlZSkpCisJeworCQljYXNlIFRfQWx0ZXJTZXFTdG10OgorCQkJcmV0 dXJuIGRlcGFyc2VfQWx0ZXJTZXFTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2Ug VF9DcmVhdGVTZXFTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlU2VxU3RtdChvYmplY3RJ ZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlU3RtdDoKKwkJCXJldHVybiBkZXBhcnNl X0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2co TE9HLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZSBpbiBkZXBhcnNlIGNvbW1hbmQ6ICVkIiwKKwkJ CQkgKGludCkgbm9kZVRhZyhwYXJzZXRyZWUpKTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKwor LyoKKyAqIFdvcmtob3JzZSB0byBkZXBhcnNlIGEgQ29sbGVjdGVkQ29tbWFuZC4KKyAqLworY2hh ciAqCitkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJ T3ZlcnJpZGVTZWFyY2hQYXRoICpvdmVycmlkZVBhdGg7CisJTWVtb3J5Q29udGV4dCBvbGRjeHQ7 CisJTWVtb3J5Q29udGV4dCB0bXBjeHQ7CisJY2hhcgkgICAqY29tbWFuZCA9IE5VTEw7CisJU3Ry aW5nSW5mb0RhdGEgc3RyOworCUpzb25iCSAgICpqc29uYjsKKworCS8qCisJICogQWxsb2NhdGUg ZXZlcnl0aGluZyBkb25lIGJ5IHRoZSBkZXBhcnNpbmcgcm91dGluZXMgaW50byBhIHRlbXAgY29u dGV4dCwKKwkgKiB0byBhdm9pZCBoYXZpbmcgdG8gc3ByaW5rbGUgdGhlbSB3aXRoIG1lbW9yeSBo YW5kbGluZyBjb2RlLCBidXQKKwkgKiBhbGxvY2F0ZSB0aGUgb3V0cHV0IFN0cmluZ0luZm8gYmVm b3JlIHN3aXRjaGluZy4KKwkgKi8KKwlpbml0U3RyaW5nSW5mbygmc3RyKTsKKwl0bXBjeHQgPSBB bGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCSAgICJk ZXBhcnNlIGN0eCIsCisJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfTUlOU0laRSwKKwkJCQkJ CQkJICAgQUxMT0NTRVRfREVGQVVMVF9JTklUU0laRSwKKwkJCQkJCQkJICAgQUxMT0NTRVRfREVG QVVMVF9NQVhTSVpFKTsKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8odG1wY3h0KTsK KworCS8qCisJICogTWFueSByb3V0aW5lcyB1bmRlcmx5aW5nIHRoaXMgb25lIHdpbGwgaW52b2tl IHJ1bGV1dGlscy5jIGZ1bmN0aW9uYWxpdHkKKwkgKiB0byBvYnRhaW4gZGVwYXJzZWQgdmVyc2lv bnMgb2YgZXhwcmVzc2lvbnMuICBJbiBzdWNoIHJlc3VsdHMsIHdlIHdhbnQKKwkgKiBhbGwgb2Jq ZWN0IG5hbWVzIHRvIGJlIHF1YWxpZmllZCwgc28gdGhhdCByZXN1bHRzIGFyZSAicG9ydGFibGUi IHRvCisJICogZW52aXJvbm1lbnRzIHdpdGggZGlmZmVyZW50IHNlYXJjaF9wYXRoIHNldHRpbmdz LiAgUmF0aGVyIHRoYW4KKwkgKiBpbmplY3Rpbmcgd2hhdCB3b3VsZCBiZSByZXBldGl0aXZlIGNh bGxzIHRvIG92ZXJyaWRlIHNlYXJjaCBwYXRoIGFsbAorCSAqIG92ZXIgdGhlIHBsYWNlLCB3ZSBk byBpdCBjZW50cmFsbHkgaGVyZS4KKwkgKi8KKwlvdmVycmlkZVBhdGggPSBHZXRPdmVycmlkZVNl YXJjaFBhdGgoQ3VycmVudE1lbW9yeUNvbnRleHQpOworCW92ZXJyaWRlUGF0aC0+c2NoZW1hcyA9 IE5JTDsKKwlvdmVycmlkZVBhdGgtPmFkZENhdGFsb2cgPSBmYWxzZTsKKwlvdmVycmlkZVBhdGgt PmFkZFRlbXAgPSB0cnVlOworCVB1c2hPdmVycmlkZVNlYXJjaFBhdGgob3ZlcnJpZGVQYXRoKTsK KworCXN3aXRjaCAoY21kLT50eXBlKQorCXsKKwkJY2FzZSBTQ1RfU2ltcGxlOgorCQkJanNvbmIg PSBkZXBhcnNlX3NpbXBsZV9jb21tYW5kKGNtZCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJ CWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGRlcGFyc2Ugbm9kZSB0eXBlICVkIiwgY21kLT50eXBl KTsKKwl9CisKKwlQb3BPdmVycmlkZVNlYXJjaFBhdGgoKTsKKworCWlmIChqc29uYikKKwkJY29t bWFuZCA9IEpzb25iVG9DU3RyaW5nKCZzdHIsICZqc29uYi0+cm9vdCwgSlNPTkJfRVNUSU1BVEVE X0xFTik7CisKKwkvKgorCSAqIENsZWFuIHVwLiAgTm90ZSB0aGF0IHNpbmNlIHdlIGNyZWF0ZWQg dGhlIFN0cmluZ0luZm8gaW4gdGhlIGNhbGxlcidzCisJICogY29udGV4dCwgdGhlIG91dHB1dCBz dHJpbmcgaXMgbm90IGRlbGV0ZWQgaGVyZS4KKwkgKi8KKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8o b2xkY3h0KTsKKwlNZW1vcnlDb250ZXh0RGVsZXRlKHRtcGN4dCk7CisKKwlyZXR1cm4gY29tbWFu ZDsKK30KKworLyoKKyAqIEdpdmVuIGEgQ29sbGVjdGVkQ29tbWFuZCwgcmV0dXJuIGEgSlNPTiBy ZXByZXNlbnRhdGlvbiBvZiBpdC4KKyAqCisgKiBUaGUgY29tbWFuZCBpcyBleHBhbmRlZCBmdWxs eSBzbyB0aGF0IHRoZXJlIGFyZSBubyBhbWJpZ3VpdGllcyBldmVuIGluIHRoZQorICogZmFjZSBv ZiBzZWFyY2hfcGF0aCBjaGFuZ2VzLgorICovCitEYXR1bQorZGRsX2RlcGFyc2VfdG9fanNvbihQ R19GVU5DVElPTl9BUkdTKQoreworCUNvbGxlY3RlZENvbW1hbmQgKmNtZCA9IChDb2xsZWN0ZWRD b21tYW5kICopIFBHX0dFVEFSR19QT0lOVEVSKDApOworCWNoYXIJICAgKmNvbW1hbmQ7CisKKwlj b21tYW5kID0gZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoY21kKTsKKworCWlmIChjb21tYW5kKQor CQlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4dChjb21tYW5kKSk7CisKKwlQR19SRVRV Uk5fTlVMTCgpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsanNvbi5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsanNvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAuLmQ1Yzk2OGI3YzEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9kZGxqc29uLmMKQEAgLTAsMCArMSw3NTkgQEAKKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICoKKyAqIGRkbGpzb24uYworICoJICBKU09OIGNvZGUgcmVsYXRlZCB0byBEREwgY29tbWFu ZCBkZXBhcnNpbmcKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMywgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAo YykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICog Tk9URVMKKyAqCisgKiBFYWNoIEpTT05CIG9iamVjdCBpcyBzdXBwb3NlZCB0byBoYXZlIGEgImZt dCIgd2hpY2ggd2lsbCB0ZWxsIGV4cGFuc2lvbgorICogcm91dGluZXMgaG93IEpTT05CIGNhbiBi ZSBleHBhbmRlZCB0byBjb25zdHJ1Y3QgZGRsIGNvbW1hbmQuIE9uZSBleGFtcGxlCisgKiBzbmlw cGV0IGZyb20gSlNPTkIgb2JqZWN0IGZvciAnQUxURVIgVEFCTEUgc2FsZXMgQUREIGNvbDEgaW50 JzoKKyAqCisgKiB7ICoxLWxldmVsKgorICogICAiZm10IjogIkFMVEVSICV7b2JqdHlwZX1zICV7 b25seX1zICV7aWRlbnRpdHl9RCAle3N1YmNtZHM6LCB9cyIsCisgKiAgICJvbmx5IjogIiIsCisg KiAgIm9ianR5cGUiOiAiVEFCTEUiLAorICogICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJzYWxl cyIsICJzY2hlbWFuYW1lIjogInB1YmxpYyJ9CisgKiAgInN1YmNtZHMiOiBbCisgKiAgICAgIHsg KjItbGV2ZWwqCisgKiAgICAgICAgICAiZm10IjogIkFERCAle29ianR5cGV9cyAle2lmX25vdF9l eGlzdHN9cyAle2RlZmluaXRpb259cyIsCisgKiAgICAgICAgICAidHlwZSI6ICJhZGQgY29sdW1u IiwKKyAqICAgICAgICAgICJvYmp0eXBlIjogIkNPTFVNTiIsCisgKiAgICAgICAgICAiZGVmaW5p dGlvbiI6IHt9CisgKiAgICAgICAgICAgLi4uCisgKiAgICAgIH0KKyAqICAgICAgLi4uCisgKiB9 CisgKgorICogRnJvbSBhYm92ZSwgd2UgY2FuIHNlZSBkaWZmZXJlbnQga2V5LXZhbHVlIHBhaXJz LgorICogbGV2ZWwtMSByZXByZXNlbnRzIFJPT1Qgb2JqZWN0IHdpdGggJ2ZtdCcsICdvbmx5Jywg J29ianR5cGUnLCdpZGVudGl0eScsCisgKiAnc3ViY21kcycgYXMgdGhlIGtleXMgd2l0aCB0aGUg dmFsdWVzIGFwcGVuZGVkIGFmdGVyICI6IiB3aXRoIGVhY2gga2V5LgorICogVmFsdWUgY2FuIGJl IHN0cmluZywgYm9vbCwgbnVtZXJpYywgYXJyYXkgb3IgYW55IG5lc3RlZCBvYmplY3QuICBBcyBh bgorICogZXhhbXBsZSwgIm9ianR5cGUiIGhhcyBzdHJpbmcgdmFsdWUgd2hpbGUgInN1YmNtZHMi IGhhcyBuZXN0ZWQtb2JqZWN0CisgKiBhcyBpdHMgdmFsdWUgd2hpY2ggY2FuIGZ1cnRoZXIgaGF2 ZSBtdWx0aXBsZSBrZXktdmFsdWUgcGFpcnMuCisgKgorICogVGhlIHZhbHVlIG9mICJmbXQiIHRl bGxzIHVzIGhvdyB0aGUgZXhwYW5zaW9uIHdpbGwgYmUgY2FycmllZCBvbi4gVGhlCisgKiB2YWx1 ZSBvZiAiZm10IiAgbWF5IGNvbnRhaW4gemVybyBvciBtb3JlICUtZXNjYXBlcywgd2hpY2ggY29u c2lzdCBvZiBrZXkKKyAqIG5hbWUgZW5jbG9zZWQgaW4geyB9LCBmb2xsb3dlZCBieSBhIGNvbnZl cnNpb24gc3BlY2lmaWVyIHdoaWNoIHRlbGxzIHVzCisgKiBob3cgdGhlIHZhbHVlIGZvciB0aGF0 IHBhcnRpY3VsYXIga2V5IHNob3VsZCBiZSBleHBhbmRlZC4KKyAqIFBvc3NpYmxlIGNvbnZlcnNp b24gc3BlY2lmaWVycyBhcmU6CisgKiAlICAgICAgICAgICAgZXhwYW5kIHRvIGEgbGl0ZXJhbCAl CisgKiBJICAgICAgICAgICAgZXhwYW5kIGFzIGEgc2luZ2xlLCBub24tcXVhbGlmaWVkIGlkZW50 aWZpZXIKKyAqIEQgICAgICAgICAgICBleHBhbmQgYXMgYSBwb3NzaWJseS1xdWFsaWZpZWQgaWRl bnRpZmllcgorICogVCAgICAgICAgICAgIGV4cGFuZCBhcyBhIHR5cGUgbmFtZQorICogTCAgICAg ICAgICAgIGV4cGFuZCBhcyBhIHN0cmluZyBsaXRlcmFsIChxdW90ZSB1c2luZyBzaW5nbGUgcXVv dGVzKQorICogcyAgICAgICAgICAgIGV4cGFuZCBhcyBhIHNpbXBsZSBzdHJpbmcgKG5vIHF1b3Rp bmcpCisgKiBuICAgICAgICAgICAgZXhwYW5kIGFzIGEgc2ltcGxlIG51bWJlciAobm8gcXVvdGlu ZykKKyAqCisgKiBJbiBvcmRlciB0byBidWlsZCBhIERETCBjb21tYW5kLCBpdCB3aWxsIGZpcnN0 IGV4dHJhY3QgImZtdCIgbm9kZSBpbgorICoganNvbmIgc3RyaW5nIGFuZCB3aWxsIHJlYWQgZWFj aCBrZXkgbmFtZSBlbmNsb3NlZCBpbiB7IH0gaW4gZm10LXN0cmluZworICogYW5kIHdpbGwgcmVw bGFjZSBpdCB3aXRoIGl0cyB2YWx1ZS4gRm9yIGVhY2ggbmFtZSBtZW50aW9uZWQgaW4geyB9IGlu CisgKiBmbXQgc3RyaW5nLCB0aGVyZSBtdXN0IGJlIGEga2V5LXZhbHVlIHBhaXIsIGluIGFic2Vu Y2Ugb2Ygd2hpY2gsIHRoZQorICogZXhwYW5zaW9uIHdpbGwgZXJyb3Igb3V0LiBXaGlsZSBkb2lu ZyB0aGlzIGV4cGFuc2lvbiwgaXQgd2lsbCBjb25zaWRlcgorICogdGhlIGNvbnZlcnNpb24tc3Bl Y2lmaWVyIG1haW50YWluZWQgd2l0aCBlYWNoIGtleSBpbiBmbXQgc3RyaW5nIHRvIGZpZ3VyZQor ICogb3V0IGhvdyB2YWx1ZSBzaG91bGQgYWN0dWFsbHkgYmUgcmVwcmVzZW50ZWQuIFRoaXMgaXMg aG93IERETCBjb21tYW5kIGNhbgorICogYmUgY29uc3RydWN0ZWQgYmFjayBmcm9tIHRoZSBqc29u Yi1zdHJpbmcuCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvY29tbWFu ZHMvZGRsanNvbi5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0 Z3Jlcy5oIgorCisjaW5jbHVkZSAidGNvcC9kZGxkZXBhcnNlLmgiCisjaW5jbHVkZSAidXRpbHMv YnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9qc29uYi5oIgorCisKKyNkZWZpbmUgQURWQU5D RV9QQVJTRV9QT0lOVEVSKHB0cixlbmRfcHRyKSBcCisJZG8geyBcCisJCWlmICgrKyhwdHIpID49 IChlbmRfcHRyKSkgXAorCQkJZXJlcG9ydChFUlJPUiwgXAorCQkJCQllcnJjb2RlKEVSUkNPREVf SU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLCBcCisJCQkJCWVycm1zZygidW50ZXJtaW5hdGVkIGZv cm1hdCBzcGVjaWZpZXIiKSk7IFwKKwl9IHdoaWxlICgwKQorCisvKgorICogQ29udmVyc2lvbiBz cGVjaWZpZXIgd2hpY2ggZGV0ZXJtaW5lcyBob3cgdG8gZXhwYW5kIHRoZSBKU09OIGVsZW1lbnQK KyAqIGludG8gYSBzdHJpbmcuCisgKi8KK3R5cGVkZWYgZW51bQoreworCVNwZWNEb3R0ZWROYW1l LAorCVNwZWNJZGVudGlmaWVyLAorCVNwZWNOdW1iZXIsCisJU3BlY1N0cmluZywKKwlTcGVjU3Ry aW5nTGl0ZXJhbCwKKwlTcGVjVHlwZU5hbWUKK30gY29udlNwZWNpZmllcjsKKworLyoKKyAqIEEg dGVybmFyeSB2YWx1ZSB0aGF0IHJlcHJlc2VudHMgYSBib29sZWFuIHR5cGUgSnNvbmJWYWx1ZS4K KyAqLwordHlwZWRlZiBlbnVtCit7CisJdHZfYWJzZW50LAorCXR2X3RydWUsCisJdHZfZmFsc2UK K30JCQlqc29uX3RyaXZhbHVlOworCitzdGF0aWMgYm9vbCBleHBhbmRfb25lX2pzb25iX2VsZW1l bnQoU3RyaW5nSW5mbyBidWYsIGNoYXIgKnBhcmFtLAorCQkJCQkJCQkJIEpzb25iVmFsdWUgKmpz b252YWwsIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLAorCQkJCQkJCQkJIGNvbnN0IGNoYXIgKmZt dCk7CitzdGF0aWMgdm9pZCBleHBhbmRfanNvbmJfYXJyYXkoU3RyaW5nSW5mbyBidWYsIGNoYXIg KnBhcmFtLAorCQkJCQkJCSAgIEpzb25iVmFsdWUgKmpzb25hcnIsIGNoYXIgKmFycmF5c2VwLAor CQkJCQkJCSAgIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLCBjb25zdCBjaGFyICpmbXQpOworc3Rh dGljIHZvaWQgZm10c3RyX2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZyk7CisKKy8qCisgKiBHaXZl biBhIEpzb25iQ29udGFpbmVyLCBmaW5kIHRoZSBKc29uYlZhbHVlIHdpdGggdGhlIGdpdmVuIGtl eSBuYW1lIGluIGl0LgorICogSWYgaXQncyBvZiBhIHR5cGUgb3RoZXIgdGhhbiBqYnZCb29sLCBh biBlcnJvciBpcyByYWlzZWQuIElmIGl0IGRvZXNuJ3QKKyAqIGV4aXN0LCB0dl9hYnNlbnQgaXMg cmV0dXJuZWQ7IG90aGVyd2lzZSByZXR1cm4gdGhlIGFjdHVhbCBqc29uX3RyaXZhbHVlLgorICov CitzdGF0aWMganNvbl90cml2YWx1ZQorZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKEpzb25i Q29udGFpbmVyICpjb250YWluZXIsIGNoYXIgKmtleW5hbWUpCit7CisJSnNvbmJWYWx1ZQlrZXk7 CisJSnNvbmJWYWx1ZSAqdmFsdWU7CisJanNvbl90cml2YWx1ZSByZXN1bHQ7CisKKwlrZXkudHlw ZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwgPSBrZXluYW1lOworCWtleS52YWwu c3RyaW5nLmxlbiA9IHN0cmxlbihrZXluYW1lKTsKKwl2YWx1ZSA9IGZpbmRKc29uYlZhbHVlRnJv bUNvbnRhaW5lcihjb250YWluZXIsCisJCQkJCQkJCQkJSkJfRk9CSkVDVCwgJmtleSk7CisJaWYg KHZhbHVlID09IE5VTEwpCisJCXJldHVybiB0dl9hYnNlbnQ7CisJaWYgKHZhbHVlLT50eXBlICE9 IGpidkJvb2wpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURf UEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQllcnJtc2coImVsZW1lbnQgXCIlc1wiIGlzIG5vdCBvZiB0 eXBlIGJvb2xlYW4iLCBrZXluYW1lKSk7CisJcmVzdWx0ID0gdmFsdWUtPnZhbC5ib29sZWFuID8g dHZfdHJ1ZSA6IHR2X2ZhbHNlOworCXBmcmVlKHZhbHVlKTsKKworCXJldHVybiByZXN1bHQ7Cit9 CisKKy8qCisgKiBHaXZlbiBhIEpzb25iQ29udGFpbmVyLCBmaW5kIHRoZSBKc29uYlZhbHVlIHdp dGggdGhlIGdpdmVuIGtleSBuYW1lIGluIGl0LgorICogSWYgaXQncyBvZiBhIHR5cGUgb3RoZXIg dGhhbiBqYnZTdHJpbmcsIGFuIGVycm9yIGlzIHJhaXNlZC4gIElmIGl0IGRvZXNuJ3QKKyAqIGV4 aXN0LCBhbiBlcnJvciBpcyByYWlzZWQgdW5sZXNzIG1pc3Npbmdfb2s7IG90aGVyd2lzZSByZXR1 cm4gTlVMTC4KKyAqCisgKiBJZiBpdCBleGlzdHMgYW5kIGlzIGEgc3RyaW5nLCBhIGZyZXNobHkg cGFsbG9jJ2VkIGNvcHkgaXMgcmV0dXJuZWQuCisgKgorICogSWYgKmxlbmd0aCBpcyBub3QgTlVM TCwgaXQgaXMgc2V0IHRvIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZy4KKyAqLworc3RhdGljIGNo YXIgKgorZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoSnNvbmJDb250YWluZXIgKmNvbnRh aW5lciwgY2hhciAqa2V5bmFtZSwKKwkJCQkJCQkgIGJvb2wgbWlzc2luZ19vaywgaW50ICpsZW5n dGgpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNvbmJWYWx1ZSAqdmFsdWU7CisJY2hhcgkgICAq c3RyOworCisJLyogWFhYIHZlcmlmeSB0aGF0IHRoaXMgaXMgYW4gb2JqZWN0LCBub3QgYW4gYXJy YXkgKi8KKworCWtleS50eXBlID0gamJ2U3RyaW5nOworCWtleS52YWwuc3RyaW5nLnZhbCA9IGtl eW5hbWU7CisJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKGtleW5hbWUpOworCXZhbHVlID0g ZmluZEpzb25iVmFsdWVGcm9tQ29udGFpbmVyKGNvbnRhaW5lciwKKwkJCQkJCQkJCQlKQl9GT0JK RUNULCAma2V5KTsKKwlpZiAodmFsdWUgPT0gTlVMTCkKKwl7CisJCWlmIChtaXNzaW5nX29rKQor CQkJcmV0dXJuIE5VTEw7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX0lO VkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQllcnJtc2coIm1pc3NpbmcgZWxlbWVudCBcIiVz XCIgaW4gSlNPTiBvYmplY3QiLCBrZXluYW1lKSk7CisJfQorCisJaWYgKHZhbHVlLT50eXBlICE9 IGpidlN0cmluZykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCWVycm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90IG9m IHR5cGUgc3RyaW5nIiwga2V5bmFtZSkpOworCisJc3RyID0gcG5zdHJkdXAodmFsdWUtPnZhbC5z dHJpbmcudmFsLCB2YWx1ZS0+dmFsLnN0cmluZy5sZW4pOworCWlmIChsZW5ndGgpCisJCSpsZW5n dGggPSB2YWx1ZS0+dmFsLnN0cmluZy5sZW47CisJcGZyZWUodmFsdWUpOworCXJldHVybiBzdHI7 Cit9CisKKy8qCisgKiBSZWN1cnNpdmUgaGVscGVyIGZvciBkZXBhcnNlX2RkbF9qc29uX3RvX3N0 cmluZy4KKyAqCisgKiBGaW5kIHRoZSAiZm10IiBlbGVtZW50IGluIHRoZSBnaXZlbiBjb250YWlu ZXIsIGFuZCBleHBhbmQgaXQgaW50byB0aGUKKyAqIHByb3ZpZGVkIFN0cmluZ0luZm8uCisgKi8K K3N0YXRpYyB2b2lkCitleHBhbmRfZm10X3JlY3Vyc2l2ZShTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJD b250YWluZXIgKmNvbnRhaW5lcikKK3sKKwlKc29uYlZhbHVlCWtleTsKKwlKc29uYlZhbHVlICp2 YWx1ZTsKKwljb25zdCBjaGFyICpjcDsKKwljb25zdCBjaGFyICpzdGFydF9wdHI7CisJY29uc3Qg Y2hhciAqZW5kX3B0cjsKKwlpbnQJCQlsZW47CisKKwlzdGFydF9wdHIgPSBmaW5kX3N0cmluZ19p bl9qc29uYmNvbnRhaW5lcihjb250YWluZXIsICJmbXQiLCBmYWxzZSwgJmxlbik7CisJZW5kX3B0 ciA9IHN0YXJ0X3B0ciArIGxlbjsKKworCWZvciAoY3AgPSBzdGFydF9wdHI7IGNwIDwgZW5kX3B0 cjsgY3ArKykKKwl7CisJCWNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyOworCQlib29sCQlpc19hcnJh eSA9IGZhbHNlOworCQljaGFyCSAgICpwYXJhbSA9IE5VTEw7CisJCWNoYXIJICAgKmFycmF5c2Vw ID0gTlVMTDsKKworCQlpZiAoKmNwICE9ICclJykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0No YXJNYWNybyhidWYsICpjcCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCUFEVkFOQ0VfUEFSU0Vf UE9JTlRFUihjcCwgZW5kX3B0cik7CisKKwkJLyogRWFzeSBjYXNlOiAlJSBvdXRwdXRzIGEgc2lu Z2xlICUgKi8KKwkJaWYgKCpjcCA9PSAnJScpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFy TWFjcm8oYnVmLCAqY3ApOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBTY2FuIHRo ZSBtYW5kYXRvcnkgZWxlbWVudCBuYW1lLiAgQWxsb3cgZm9yIGFuIGFycmF5IHNlcGFyYXRvcgor CQkgKiAod2hpY2ggbWF5IGJlIHRoZSBlbXB0eSBzdHJpbmcpIHRvIGJlIHNwZWNpZmllZCBhZnRl ciBhIGNvbG9uLgorCQkgKi8KKwkJaWYgKCpjcCA9PSAneycpCisJCXsKKwkJCVN0cmluZ0luZm9E YXRhIHBhcmJ1ZjsKKwkJCVN0cmluZ0luZm9EYXRhIGFycmF5c2VwYnVmOworCQkJU3RyaW5nSW5m bwlhcHBlbmRUbzsKKworCQkJaW5pdFN0cmluZ0luZm8oJnBhcmJ1Zik7CisJCQlhcHBlbmRUbyA9 ICZwYXJidWY7CisKKwkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQl3 aGlsZSAoY3AgPCBlbmRfcHRyKQorCQkJeworCQkJCWlmICgqY3AgPT0gJzonKQorCQkJCXsKKwkJ CQkJLyoKKwkJCQkJICogRm91bmQgYXJyYXkgc2VwYXJhdG9yIGRlbGltaXRlcjsgZWxlbWVudCBu YW1lIGlzIG5vdworCQkJCQkgKiBjb21wbGV0ZSwgc3RhcnQgZmlsbGluZyB0aGUgc2VwYXJhdG9y LgorCQkJCQkgKi8KKwkJCQkJaW5pdFN0cmluZ0luZm8oJmFycmF5c2VwYnVmKTsKKwkJCQkJYXBw ZW5kVG8gPSAmYXJyYXlzZXBidWY7CisJCQkJCWlzX2FycmF5ID0gdHJ1ZTsKKwkJCQkJQURWQU5D RV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJ CQkJaWYgKCpjcCA9PSAnfScpCisJCQkJeworCQkJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3As IGVuZF9wdHIpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJN YWNybyhhcHBlbmRUbywgKmNwKTsKKwkJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9w dHIpOworCQkJfQorCQkJcGFyYW0gPSBwYXJidWYuZGF0YTsKKwkJCWlmIChpc19hcnJheSkKKwkJ CQlhcnJheXNlcCA9IGFycmF5c2VwYnVmLmRhdGE7CisJCX0KKwkJaWYgKHBhcmFtID09IE5VTEwp CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVU RVJfVkFMVUUpLAorCQkJCQllcnJtc2coIm1pc3NpbmcgY29udmVyc2lvbiBuYW1lIGluIGNvbnZl cnNpb24gc3BlY2lmaWVyIikpOworCisJCXN3aXRjaCAoKmNwKQorCQl7CisJCQljYXNlICdJJzoK KwkJCQlzcGVjaWZpZXIgPSBTcGVjSWRlbnRpZmllcjsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ0Qn OgorCQkJCXNwZWNpZmllciA9IFNwZWNEb3R0ZWROYW1lOworCQkJCWJyZWFrOworCQkJY2FzZSAn cyc6CisJCQkJc3BlY2lmaWVyID0gU3BlY1N0cmluZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ0wn OgorCQkJCXNwZWNpZmllciA9IFNwZWNTdHJpbmdMaXRlcmFsOworCQkJCWJyZWFrOworCQkJY2Fz ZSAnVCc6CisJCQkJc3BlY2lmaWVyID0gU3BlY1R5cGVOYW1lOworCQkJCWJyZWFrOworCQkJY2Fz ZSAnbic6CisJCQkJc3BlY2lmaWVyID0gU3BlY051bWJlcjsKKwkJCQlicmVhazsKKwkJCWRlZmF1 bHQ6CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BB UkFNRVRFUl9WQUxVRSksCisJCQkJCQllcnJtc2coImludmFsaWQgY29udmVyc2lvbiBzcGVjaWZp ZXIgXCIlY1wiIiwgKmNwKSk7CisJCX0KKworCQkvKgorCQkgKiBPYnRhaW4gdGhlIGVsZW1lbnQg dG8gYmUgZXhwYW5kZWQuCisJCSAqLworCQlrZXkudHlwZSA9IGpidlN0cmluZzsKKwkJa2V5LnZh bC5zdHJpbmcudmFsID0gcGFyYW07CisJCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihwYXJh bSk7CisKKwkJdmFsdWUgPSBmaW5kSnNvbmJWYWx1ZUZyb21Db250YWluZXIoY29udGFpbmVyLCBK Ql9GT0JKRUNULCAma2V5KTsKKwkJQXNzZXJ0KHZhbHVlICE9IE5VTEwpOworCisJCS8qCisJCSAq IEV4cGFuZCB0aGUgZGF0YSAocG9zc2libHkgYW4gYXJyYXkpIGludG8gdGhlIG91dHB1dCBTdHJp bmdJbmZvLgorCQkgKi8KKwkJaWYgKGlzX2FycmF5KQorCQkJZXhwYW5kX2pzb25iX2FycmF5KGJ1 ZiwgcGFyYW0sIHZhbHVlLCBhcnJheXNlcCwgc3BlY2lmaWVyLCBzdGFydF9wdHIpOworCQllbHNl CisJCQlleHBhbmRfb25lX2pzb25iX2VsZW1lbnQoYnVmLCBwYXJhbSwgdmFsdWUsIHNwZWNpZmll ciwgc3RhcnRfcHRyKTsKKworCQlwZnJlZSh2YWx1ZSk7CisJfQorfQorCisvKgorICogRXhwYW5k IGEganNvbiB2YWx1ZSBhcyBhIHF1b3RlZCBpZGVudGlmaWVyLiAgVGhlIHZhbHVlIG11c3QgYmUg b2YgdHlwZSBzdHJpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9pZGVudGlm aWVyKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAgKnN0 cjsKKworCUFzc2VydChqc29udmFsLT50eXBlID09IGpidlN0cmluZyk7CisKKwlzdHIgPSBwbnN0 cmR1cChqc29udmFsLT52YWwuc3RyaW5nLnZhbCwganNvbnZhbC0+dmFsLnN0cmluZy5sZW4pOwor CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBxdW90ZV9pZGVudGlmaWVyKHN0cikpOworCXBm cmVlKHN0cik7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgZG90LXNlcGFy YXRlZC1uYW1lLiAgVGhlIHZhbHVlIG11c3QgYmUgb2YgdHlwZQorICogYmluYXJ5IGFuZCBtYXkg Y29udGFpbiBlbGVtZW50cyAic2NoZW1hbmFtZSIgKG9wdGlvbmFsKSwgIm9iam5hbWUiCisgKiAo bWFuZGF0b3J5KSwgImF0dHJuYW1lIiAob3B0aW9uYWwpLiAgRG91YmxlIHF1b3RlcyBhcmUgYWRk ZWQgdG8gZWFjaCBlbGVtZW50CisgKiBhcyBuZWNlc3NhcnksIGFuZCBkb3Qgc2VwYXJhdG9ycyB3 aGVyZSBuZWVkZWQuCisgKgorICogT25lIGRheSB3ZSBtaWdodCBuZWVkIGEgImNhdGFsb2ciIGVs ZW1lbnQgYXMgd2VsbCwgYnV0IG5vIGN1cnJlbnQgdXNlIGNhc2UKKyAqIG5lZWRzIHRoYXQuCisg Ki8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9kb3R0ZWRuYW1lKFN0cmluZ0luZm8gYnVm LCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAgKnN0cjsKKwlKc29uYkNvbnRhaW5l ciAqZGF0YSA9IGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YTsKKworCUFzc2VydChqc29udmFsLT50 eXBlID09IGpidkJpbmFyeSk7CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5l cihkYXRhLCAic2NoZW1hbmFtZSIsIHRydWUsIE5VTEwpOworCWlmIChzdHIpCisJeworCQlhcHBl bmRTdHJpbmdJbmZvKGJ1ZiwgIiVzLiIsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJCXBmcmVl KHN0cik7CisJfQorCisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoZGF0YSwg Im9iam5hbWUiLCBmYWxzZSwgTlVMTCk7CisJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyIsIHF1 b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJcGZyZWUoc3RyKTsKKworCXN0ciA9IGZpbmRfc3RyaW5n X2luX2pzb25iY29udGFpbmVyKGRhdGEsICJhdHRybmFtZSIsIHRydWUsIE5VTEwpOworCWlmIChz dHIpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIi4lcyIsIHF1b3RlX2lkZW50aWZpZXIo c3RyKSk7CisJCXBmcmVlKHN0cik7CisJfQorfQorCisvKgorICogRXhwYW5kIGEgSlNPTiB2YWx1 ZSBhcyBhIHR5cGUgbmFtZS4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX3R5cGVu YW1lKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAgKnNj aGVtYSA9IE5VTEw7CisJY2hhcgkgICAqdHlwZW5hbWUgPSBOVUxMOworCWNoYXIJICAgKnR5cG1v ZHN0ciA9IE5VTEw7CisJanNvbl90cml2YWx1ZSBpc19hcnJheTsKKwljaGFyCSAgICphcnJheV9k ZWNvcjsKKwlKc29uYkNvbnRhaW5lciAqZGF0YSA9IGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YTsK KworCS8qCisJICogV2Ugb21pdCBzY2hlbWEtcXVhbGlmeWluZyB0aGUgb3V0cHV0IG5hbWUgaWYg dGhlIHNjaGVtYSBlbGVtZW50IGlzCisJICogZWl0aGVyIHRoZSBlbXB0eSBzdHJpbmcgb3IgTlVM TDsgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aG9zZSB0d28gY2FzZXMKKwkgKiBpcyB0aGF0IGlu IHRoZSBsYXR0ZXIgd2UgcXVvdGUgdGhlIHR5cGUgbmFtZSwgaW4gdGhlIGZvcm1lciB3ZSBkb24n dC4KKwkgKiBUaGlzIGFsbG93cyBmb3IgdHlwZXMgd2l0aCBzcGVjaWFsIHR5cG1vZCBuZWVkcywg c3VjaCBhcyBpbnRlcnZhbCBhbmQKKwkgKiB0aW1lc3RhbXAgKHNlZSBmb3JtYXRfdHlwZV9kZXRh aWxlZCksIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgYWxsb3dpbmcKKwkgKiBmb3IgdGhlIHNjaGVt YSBuYW1lIHRvIGJlIG9taXR0ZWQgZnJvbSB0eXBlIG5hbWVzIHRoYXQgcmVxdWlyZSBxdW90ZXMK KwkgKiBidXQgYXJlIHRvIGJlIG9idGFpbmVkIGZyb20gYSB1c2VyIHNjaGVtYS4KKwkgKi8KKwor CXNjaGVtYSA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGRhdGEsICJzY2hlbWFuYW1l IiwgdHJ1ZSwgTlVMTCk7CisJdHlwZW5hbWUgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5l cihkYXRhLCAidHlwZW5hbWUiLCBmYWxzZSwgTlVMTCk7CisJdHlwbW9kc3RyID0gZmluZF9zdHJp bmdfaW5fanNvbmJjb250YWluZXIoZGF0YSwgInR5cG1vZCIsIHRydWUsIE5VTEwpOworCWlzX2Fy cmF5ID0gZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKGRhdGEsICJ0eXBhcnJheSIpOworCXN3 aXRjaCAoaXNfYXJyYXkpCisJeworCQljYXNlIHR2X3RydWU6CisJCQlhcnJheV9kZWNvciA9ICJb XSI7CisJCQlicmVhazsKKworCQljYXNlIHR2X2ZhbHNlOgorCQkJYXJyYXlfZGVjb3IgPSAiIjsK KwkJCWJyZWFrOworCisJCWNhc2UgdHZfYWJzZW50OgorCQlkZWZhdWx0OgorCQkJZXJlcG9ydChF UlJPUiwKKwkJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJ CQkJZXJybXNnKCJtaXNzaW5nIHR5cGFycmF5IGVsZW1lbnQiKSk7CisJfQorCisJaWYgKHNjaGVt YSA9PSBOVUxMKQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzIiwgcXVvdGVfaWRlbnRpZmll cih0eXBlbmFtZSkpOworCWVsc2UgaWYgKHNjaGVtYVswXSA9PSAnXDAnKQorCQlhcHBlbmRTdHJp bmdJbmZvKGJ1ZiwgIiVzIiwgdHlwZW5hbWUpOwkvKiBTcGVjaWFsIHR5cG1vZCBuZWVkcyAqLwor CWVsc2UKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcy4lcyIsIHF1b3RlX2lkZW50aWZpZXIo c2NoZW1hKSwKKwkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKHR5cGVuYW1lKSk7CisKKwlhcHBlbmRT dHJpbmdJbmZvKGJ1ZiwgIiVzJXMiLCB0eXBtb2RzdHIgPyB0eXBtb2RzdHIgOiAiIiwgYXJyYXlf ZGVjb3IpOworCisJaWYgKHNjaGVtYSkKKwkJcGZyZWUoc2NoZW1hKTsKKwlpZiAodHlwZW5hbWUp CisJCXBmcmVlKHR5cGVuYW1lKTsKKwlpZiAodHlwbW9kc3RyKQorCQlwZnJlZSh0eXBtb2RzdHIp OworfQorCisvKgorICogRXhwYW5kIGEgSlNPTiB2YWx1ZSBhcyBhIHN0cmluZy4gIFRoZSB2YWx1 ZSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIG9mCisgKiB0eXBlIEJpbmFyeS4gIEluIHRoZSBs YXR0ZXIgY2FzZSwgaXQgbXVzdCBjb250YWluIGEgImZtdCIgZWxlbWVudCB3aGljaCB3aWxsCisg KiBiZSByZWN1cnNpdmVseSBleHBhbmRlZDsgYWxzbywgaWYgdGhlIG9iamVjdCBjb250YWlucyBh biBlbGVtZW50ICJwcmVzZW50IgorICogYW5kIGl0IGlzIHNldCB0byBmYWxzZSwgdGhlIGV4cGFu c2lvbiBpcyB0aGUgZW1wdHkgc3RyaW5nLgorICoKKyAqIFJldHVybnMgZmFsc2UgaWYgbm8gYWN0 dWFsIGV4cGFuc2lvbiB3YXMgbWFkZSBkdWUgdG8gdGhlICJwcmVzZW50IiBmbGFnCisgKiBiZWlu ZyBzZXQgdG8gImZhbHNlIi4KKyAqCisgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIHRvIGNo ZWNrIGpzb252YWwgaXMgb2YgdHlwZSBqYnZTdHJpbmcgb3IgamJ2QmluYXJ5LgorICovCitzdGF0 aWMgYm9vbAorZXhwYW5kX2pzb252YWxfc3RyaW5nKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVl ICpqc29udmFsKQoreworCWJvb2wgZXhwYW5kZWQgPSBmYWxzZTsKKworCUFzc2VydCgoanNvbnZh bC0+dHlwZSA9PSBqYnZTdHJpbmcpIHx8IChqc29udmFsLT50eXBlID09IGpidkJpbmFyeSkpOwor CisJaWYgKGpzb252YWwtPnR5cGUgPT0gamJ2U3RyaW5nKQorCXsKKwkJYXBwZW5kQmluYXJ5U3Ry aW5nSW5mbyhidWYsIGpzb252YWwtPnZhbC5zdHJpbmcudmFsLAorCQkJCQkJCSAgIGpzb252YWwt PnZhbC5zdHJpbmcubGVuKTsKKwkJZXhwYW5kZWQgPSB0cnVlOworCX0KKwllbHNlIGlmIChqc29u dmFsLT50eXBlID09IGpidkJpbmFyeSkKKwl7CisJCWpzb25fdHJpdmFsdWUgcHJlc2VudDsKKwor CQlwcmVzZW50ID0gZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5h cnkuZGF0YSwKKwkJCQkJCQkJCQkJICAicHJlc2VudCIpOworCisJCS8qCisJCSAqIElmICJwcmVz ZW50IiBpcyBzZXQgdG8gZmFsc2UsIHRoaXMgZWxlbWVudCBleHBhbmRzIHRvIGVtcHR5OworCQkg KiBvdGhlcndpc2UgKGVpdGhlciB0cnVlIG9yIGFic2VudCksIGV4cGFuZCAiZm10Ii4KKwkJICov CisJCWlmIChwcmVzZW50ICE9IHR2X2ZhbHNlKQorCQl7CisJCQlleHBhbmRfZm10X3JlY3Vyc2l2 ZShidWYsIGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSk7CisJCQlleHBhbmRlZCA9IHRydWU7CisJ CX0KKwl9CisKKwlyZXR1cm4gZXhwYW5kZWQ7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBKU09OIHZh bHVlIGFzIGEgc3RyaW5nIGxpdGVyYWwuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZh bF9zdHJsaXQoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkg ICAqc3RyOworCVN0cmluZ0luZm9EYXRhIGRxZGVsaW07CisJc3RhdGljIGNvbnN0IGNoYXIgZHFz dWZmaXhlc1tdID0gIl9YWVpaWVhfIjsKKwlpbnQJCQlkcW5leHRjaGFyID0gMDsKKworCUFzc2Vy dChqc29udmFsLT50eXBlID09IGpidlN0cmluZyk7CisKKwlzdHIgPSBwbnN0cmR1cChqc29udmFs LT52YWwuc3RyaW5nLnZhbCwganNvbnZhbC0+dmFsLnN0cmluZy5sZW4pOworCisJLyogRWFzeSBj YXNlOiBpZiB0aGVyZSBhcmUgbm8gJyBhbmQgbm8gXCwganVzdCB1c2UgYSBzaW5nbGUgcXVvdGUg Ki8KKwlpZiAoc3RycGJyayhzdHIsICJcJ1xcIikgPT0gTlVMTCkKKwl7CisJCWFwcGVuZFN0cmlu Z0luZm8oYnVmLCAiJyVzJyIsIHN0cik7CisJCXBmcmVlKHN0cik7CisJCXJldHVybjsKKwl9CisK KwkvKiBPdGhlcndpc2UgbmVlZCB0byBmaW5kIGEgdXNlZnVsIGRvbGxhci1xdW90ZSBkZWxpbWl0 ZXIgKi8KKwlpbml0U3RyaW5nSW5mbygmZHFkZWxpbSk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZygmZHFkZWxpbSwgIiQiKTsKKwl3aGlsZSAoc3Ryc3RyKHN0ciwgZHFkZWxpbS5kYXRhKSAhPSBO VUxMKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmRxZGVsaW0sIGRxc3VmZml4ZXNbZHFu ZXh0Y2hhcisrXSk7CisJCWRxbmV4dGNoYXIgPSBkcW5leHRjaGFyICUgKHNpemVvZihkcXN1ZmZp eGVzKSAtIDEpOworCX0KKwkvKiBBZGQgdHJhaWxpbmcgJCAqLworCWFwcGVuZFN0cmluZ0luZm9D aGFyKCZkcWRlbGltLCAnJCcpOworCisJLyogQW5kIGZpbmFsbHkgcHJvZHVjZSB0aGUgcXVvdGVk IGxpdGVyYWwgaW50byB0aGUgb3V0cHV0IFN0cmluZ0luZm8gKi8KKwlhcHBlbmRTdHJpbmdJbmZv KGJ1ZiwgIiVzJXMlcyIsIGRxZGVsaW0uZGF0YSwgc3RyLCBkcWRlbGltLmRhdGEpOworCXBmcmVl KGRxZGVsaW0uZGF0YSk7CisJcGZyZWUoc3RyKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIEpTT04g dmFsdWUgYXMgYW4gaW50ZWdlciBxdWFudGl0eS4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9q c29udmFsX251bWJlcihTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwlj aGFyCSAgICpzdHJkYXR1bTsKKworCUFzc2VydChqc29udmFsLT50eXBlID09IGpidk51bWVyaWMp OworCisJc3RyZGF0dW0gPSBEYXR1bUdldENTdHJpbmcoRGlyZWN0RnVuY3Rpb25DYWxsMShudW1l cmljX291dCwKKwkJCQkJCQkJCQkJCSAgIE51bWVyaWNHZXREYXR1bShqc29udmFsLT52YWwubnVt ZXJpYykpKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwgc3RyZGF0dW0pOworCXBmcmVl KHN0cmRhdHVtKTsKK30KKworLyoKKyAqIEV4cGFuZCBvbmUgSlNPTiBlbGVtZW50IGludG8gdGhl IG91dHB1dCBTdHJpbmdJbmZvIGFjY29yZGluZyB0byB0aGUKKyAqIGNvbnZlcnNpb24gc3BlY2lm aWVyLiAgVGhlIGVsZW1lbnQgdHlwZSBpcyB2YWxpZGF0ZWQsIGFuZCBhbiBlcnJvciBpcyByYWlz ZWQKKyAqIGlmIGl0IGRvZXNuJ3QgbWF0Y2ggd2hhdCB3ZSBleHBlY3QgZm9yIHRoZSBjb252ZXJz aW9uIHNwZWNpZmllci4KKyAqCisgKiBSZXR1cm5zIHRydWUsIGV4Y2VwdCBmb3IgdGhlIGZvcm1h dHRlZCBzdHJpbmcgY2FzZSBpZiBubyBhY3R1YWwgZXhwYW5zaW9uCisgKiB3YXMgbWFkZSAoZHVl IHRvIHRoZSAicHJlc2VudCIgZmxhZyBiZWluZyBzZXQgdG8gImZhbHNlIikuCisgKi8KK3N0YXRp YyBib29sCitleHBhbmRfb25lX2pzb25iX2VsZW1lbnQoU3RyaW5nSW5mbyBidWYsIGNoYXIgKnBh cmFtLCBKc29uYlZhbHVlICpqc29udmFsLAorCQkJCQkJIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVy LCBjb25zdCBjaGFyICpmbXQpCit7CisJYm9vbAkJc3RyaW5nX2V4cGFuZGVkID0gdHJ1ZTsKKwlF cnJvckNvbnRleHRDYWxsYmFjayBzcWxlcnJjb250ZXh0OworCisJLyogSWYgd2Ugd2VyZSBnaXZl biBhIGZvcm1hdCBzdHJpbmcsIHNldHVwIGFuIGVyZXBvcnQoKSBjb250ZXh0IGNhbGxiYWNrICov CisJaWYgKGZtdCkKKwl7CisJCXNxbGVycmNvbnRleHQuY2FsbGJhY2sgPSBmbXRzdHJfZXJyb3Jf Y2FsbGJhY2s7CisJCXNxbGVycmNvbnRleHQuYXJnID0gKHZvaWQgKikgZm10OworCQlzcWxlcnJj b250ZXh0LnByZXZpb3VzID0gZXJyb3JfY29udGV4dF9zdGFjazsKKwkJZXJyb3JfY29udGV4dF9z dGFjayA9ICZzcWxlcnJjb250ZXh0OworCX0KKworCWlmICghanNvbnZhbCkKKwkJZXJlcG9ydChF UlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJ CWVycm1zZygiZWxlbWVudCBcIiVzXCIgbm90IGZvdW5kIiwgcGFyYW0pKTsKKworCXN3aXRjaCAo c3BlY2lmaWVyKQorCXsKKwkJY2FzZSBTcGVjSWRlbnRpZmllcjoKKwkJCWlmIChqc29udmFsLT50 eXBlICE9IGpidlN0cmluZykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCWVycm1zZygiZXhwZWN0ZWQgSlNP TiBzdHJpbmcgZm9yICUlSSBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkgICBwYXJh bSwganNvbnZhbC0+dHlwZSkpOworCQkJZXhwYW5kX2pzb252YWxfaWRlbnRpZmllcihidWYsIGpz b252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjRG90dGVkTmFtZToKKwkJCWlmIChqc29u dmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJZXJyY29k ZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCWVycm1zZygiZXhwZWN0 ZWQgSlNPTiBzdHJ1Y3QgZm9yICUlRCBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkg ICBwYXJhbSwganNvbnZhbC0+dHlwZSkpOworCQkJZXhwYW5kX2pzb252YWxfZG90dGVkbmFtZShi dWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjU3RyaW5nOgorCQkJaWYgKGpz b252YWwtPnR5cGUgIT0gamJ2U3RyaW5nICYmCisJCQkJanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5h cnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BB UkFNRVRFUl9WQUxVRSksCisJCQkJCQllcnJtc2coImV4cGVjdGVkIEpTT04gc3RyaW5nIG9yIHN0 cnVjdCBmb3IgJSVzIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCSAgIHBhcmFtLCBq c29udmFsLT50eXBlKSk7CisJCQlzdHJpbmdfZXhwYW5kZWQgPSBleHBhbmRfanNvbnZhbF9zdHJp bmcoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY1N0cmluZ0xpdGVyYWw6 CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZTdHJpbmcpCisJCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQll cnJtc2coImV4cGVjdGVkIEpTT04gc3RyaW5nIGZvciAlJUwgZWxlbWVudCBcIiVzXCIsIGdvdCAl ZCIsCisJCQkJCQkJICAgcGFyYW0sIGpzb252YWwtPnR5cGUpKTsKKwkJCWV4cGFuZF9qc29udmFs X3N0cmxpdChidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjVHlwZU5hbWU6 CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQll cnJtc2coImV4cGVjdGVkIEpTT04gc3RydWN0IGZvciAlJVQgZWxlbWVudCBcIiVzXCIsIGdvdCAl ZCIsCisJCQkJCQkJICAgcGFyYW0sIGpzb252YWwtPnR5cGUpKTsKKwkJCWV4cGFuZF9qc29udmFs X3R5cGVuYW1lKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNOdW1iZXI6 CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZOdW1lcmljKQorCQkJCWVyZXBvcnQoRVJST1Is CisJCQkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJ ZXJybXNnKCJleHBlY3RlZCBKU09OIG51bWVyaWMgZm9yICUlbiBlbGVtZW50IFwiJXNcIiwgZ290 ICVkIiwKKwkJCQkJCQkgICBwYXJhbSwganNvbnZhbC0+dHlwZSkpOworCQkJZXhwYW5kX2pzb252 YWxfbnVtYmVyKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKwl9CisKKwlpZiAoZm10KQorCQll cnJvcl9jb250ZXh0X3N0YWNrID0gc3FsZXJyY29udGV4dC5wcmV2aW91czsKKworCXJldHVybiBz dHJpbmdfZXhwYW5kZWQ7Cit9CisKKy8qCisgKiBJdGVyYXRlIG9uIHRoZSBlbGVtZW50cyBvZiBh IEpTT04gYXJyYXksIGV4cGFuZGluZyBlYWNoIG9uZSBpbnRvIHRoZSBvdXRwdXQKKyAqIFN0cmlu Z0luZm8gcGVyIHRoZSBnaXZlbiBjb252ZXJzaW9uIHNwZWNpZmllciwgc2VwYXJhdGVkIGJ5IHRo ZSBnaXZlbgorICogc2VwYXJhdG9yLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb25iX2Fy cmF5KFN0cmluZ0luZm8gYnVmLCBjaGFyICpwYXJhbSwKKwkJCQkgICBKc29uYlZhbHVlICpqc29u YXJyLCBjaGFyICphcnJheXNlcCwgY29udlNwZWNpZmllciBzcGVjaWZpZXIsCisJCQkJICAgY29u c3QgY2hhciAqZm10KQoreworCUVycm9yQ29udGV4dENhbGxiYWNrIHNxbGVycmNvbnRleHQ7CisJ SnNvbmJDb250YWluZXIgKmNvbnRhaW5lcjsKKwlKc29uYkl0ZXJhdG9yICppdDsKKwlKc29uYlZh bHVlCXY7CisJaW50CQkJdHlwZTsKKwlib29sCQlmaXJzdCA9IHRydWU7CisJU3RyaW5nSW5mb0Rh dGEgYXJyYXllbGVtOworCisJLyogSWYgd2Ugd2VyZSBnaXZlbiBhIGZvcm1hdCBzdHJpbmcsIHNl dHVwIGFuIGVyZXBvcnQoKSBjb250ZXh0IGNhbGxiYWNrICovCisJaWYgKGZtdCkKKwl7CisJCXNx bGVycmNvbnRleHQuY2FsbGJhY2sgPSBmbXRzdHJfZXJyb3JfY2FsbGJhY2s7CisJCXNxbGVycmNv bnRleHQuYXJnID0gKHZvaWQgKikgZm10OworCQlzcWxlcnJjb250ZXh0LnByZXZpb3VzID0gZXJy b3JfY29udGV4dF9zdGFjazsKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9ICZzcWxlcnJjb250ZXh0 OworCX0KKworCWlmICghanNvbmFycikKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCWVycm1zZygiZWxlbWVudCBcIiVz XCIgbm90IGZvdW5kIiwgcGFyYW0pKTsKKworCWlmIChqc29uYXJyLT50eXBlICE9IGpidkJpbmFy eSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVU RVJfVkFMVUUpLAorCQkJCWVycm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90IGEgSlNPTiBhcnJh eSIsIHBhcmFtKSk7CisKKwljb250YWluZXIgPSBqc29uYXJyLT52YWwuYmluYXJ5LmRhdGE7CisJ aWYgKCFKc29uQ29udGFpbmVySXNBcnJheShjb250YWluZXIpKQorCQllcmVwb3J0KEVSUk9SLAor CQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJZXJybXNn KCJlbGVtZW50IFwiJXNcIiBpcyBub3QgYSBKU09OIGFycmF5IiwgcGFyYW0pKTsKKworCWluaXRT dHJpbmdJbmZvKCZhcnJheWVsZW0pOworCisJaXQgPSBKc29uYkl0ZXJhdG9ySW5pdChjb250YWlu ZXIpOworCXdoaWxlICgodHlwZSA9IEpzb25iSXRlcmF0b3JOZXh0KCZpdCwgJnYsIHRydWUpKSAh PSBXSkJfRE9ORSkKKwl7CisJCWlmICh0eXBlID09IFdKQl9FTEVNKQorCQl7CisJCQlyZXNldFN0 cmluZ0luZm8oJmFycmF5ZWxlbSk7CisKKwkJCWlmIChleHBhbmRfb25lX2pzb25iX2VsZW1lbnQo JmFycmF5ZWxlbSwgcGFyYW0sICZ2LCBzcGVjaWZpZXIsIE5VTEwpKQorCQkJeworCQkJCWlmICgh Zmlyc3QpCisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBhcnJheXNlcCk7CisKKwkJ CQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKGJ1ZiwgYXJyYXllbGVtLmRhdGEsIGFycmF5ZWxlbS5s ZW4pOworCQkJCWZpcnN0ID0gZmFsc2U7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZm10KQorCQll cnJvcl9jb250ZXh0X3N0YWNrID0gc3FsZXJyY29udGV4dC5wcmV2aW91czsKK30KKworLyoKKyAq IFdvcmtob3JzZSBmb3IgZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQuCisgKi8KK2NoYXIgKgor ZGVwYXJzZV9kZGxfanNvbl90b19zdHJpbmcoY2hhciAqanNvbl9zdHIpCit7CisJRGF0dW0JCWQ7 CisJSnNvbmIJICAgKmpzb25iOworCVN0cmluZ0luZm8JYnVmID0gKFN0cmluZ0luZm8pIHBhbGxv YzAoc2l6ZW9mKFN0cmluZ0luZm9EYXRhKSk7CisKKwlpbml0U3RyaW5nSW5mbyhidWYpOworCisJ ZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDEoanNvbmJfaW4sIFBvaW50ZXJHZXREYXR1bShqc29uX3N0 cikpOworCWpzb25iID0gKEpzb25iICopIERhdHVtR2V0UG9pbnRlcihkKTsKKworCWV4cGFuZF9m bXRfcmVjdXJzaXZlKGJ1ZiwgJmpzb25iLT5yb290KTsKKworCXJldHVybiBidWYtPmRhdGE7Cit9 CisKKy8qLS0tLS0tCisgKiBSZXR1cm5zIGEgZm9ybWF0dGVkIHN0cmluZyBmcm9tIGEgSlNPTiBv YmplY3QuCisgKgorICogVGhlIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBlbGVtZW50IG5hbWVkICJm bXQiICh3aGljaCBtdXN0IGJlIGEgc3RyaW5nKS4KKyAqIFRoaXMgZm9ybWF0IHN0cmluZyBtYXkg Y29udGFpbiB6ZXJvIG9yIG1vcmUgJS1lc2NhcGVzLCB3aGljaCBjb25zaXN0IG9mIGFuCisgKiBl bGVtZW50IG5hbWUgZW5jbG9zZWQgaW4geyB9LCBwb3NzaWJseSBmb2xsb3dlZCBieSBhIGNvbnZl cnNpb24gbW9kaWZpZXIsCisgKiBmb2xsb3dlZCBieSBhIGNvbnZlcnNpb24gc3BlY2lmaWVyLiAg UG9zc2libGUgY29udmVyc2lvbiBzcGVjaWZpZXJzIGFyZToKKyAqCisgKiAlCQlleHBhbmQgdG8g YSBsaXRlcmFsICUKKyAqIEkJCWV4cGFuZCBhcyBhIHNpbmdsZSwgbm9uLXF1YWxpZmllZCBpZGVu dGlmaWVyCisgKiBECQlleHBhbmQgYXMgYSBwb3NzaWJseS1xdWFsaWZpZWQgaWRlbnRpZmllcgor ICogVAkJZXhwYW5kIGFzIGEgdHlwZSBuYW1lCisgKiBMCQlleHBhbmQgYXMgYSBzdHJpbmcgbGl0 ZXJhbCAocXVvdGUgdXNpbmcgc2luZ2xlIHF1b3RlcykKKyAqIHMJCWV4cGFuZCBhcyBhIHNpbXBs ZSBzdHJpbmcgKG5vIHF1b3RpbmcpCisgKiBuCQlleHBhbmQgYXMgYSBzaW1wbGUgbnVtYmVyIChu byBxdW90aW5nKQorICoKKyAqIFRoZSBlbGVtZW50IG5hbWUgbWF5IGhhdmUgYW4gb3B0aW9uYWwg c2VwYXJhdG9yIHNwZWNpZmljYXRpb24gcHJlY2VkZWQKKyAqIGJ5IGEgY29sb24uICBJdHMgcHJl c2VuY2UgaW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgaXMgZXhwZWN0ZWQgdG8gYmUKKyAqIGFu IGFycmF5OyB0aGUgc3BlY2lmaWVkIHNlcGFyYXRvciBpcyB1c2VkIHRvIGpvaW4gdGhlIGFycmF5 IGVsZW1lbnRzLgorICoKKyAqIFRoZSBhY3R1YWwgY29udmVyc2lvbiBvZiBzaW5nbGUgSlNPTiBl bGVtZW50IGludG8gc3RyaW5nIGFjY29yZGluZyB0bworICogYWJvdmUgY29udmVyc2lvbiBzcGVj aWZpZXJzIHRha2VzIHBsYWNlIGluIGV4cGFuZF9vbmVfanNvbmJfZWxlbWVudCgpCisgKi0tLS0t LQorICovCitEYXR1bQorZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQoUEdfRlVOQ1RJT05fQVJH UykKK3sKKwl0ZXh0CSAgICpqc29uID0gUEdfR0VUQVJHX1RFWFRfUCgwKTsKKwljaGFyCSAgICpq c29uX3N0cjsKKworCWpzb25fc3RyID0gdGV4dF90b19jc3RyaW5nKGpzb24pOworCisJUEdfUkVU VVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHQoZGVwYXJzZV9kZGxfanNvbl90b19zdHJpbmcoanNv bl9zdHIpKSk7Cit9CisKKy8qCisgKiBFcnJvciBjb250ZXh0IGNhbGxiYWNrIGZvciBKU09OIGZv cm1hdCBzdHJpbmcgZXhwYW5zaW9uLgorICoKKyAqIFhYWDogaW5kaWNhdGUgd2hpY2ggZWxlbWVu dCB3ZSdyZSBleHBhbmRpbmcsIGlmIGFwcGxpY2FibGUuCisgKi8KK3N0YXRpYyB2b2lkCitmbXRz dHJfZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJnKQoreworCWVycmNvbnRleHQoIndoaWxlIGV4cGFu ZGluZyBmb3JtYXQgc3RyaW5nIFwiJXNcIiIsIChjaGFyICopIGFyZyk7Cit9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9ldmVudF90cmlnZ2VyLmMKaW5kZXggZDRiMDBkMWE4Mi4uNGQ0OGU0OTBlZCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCisrKyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9mdW5jLmgiCiAjaW5jbHVkZSAi cGdzdGF0LmgiCisjaW5jbHVkZSAidGNvcC9kZGxkZXBhcnNlLmgiCiAjaW5jbHVkZSAidGNvcC9k ZXBhcnNlX3V0aWxpdHkuaCIKICNpbmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIKICNpbmNsdWRlICJ1 dGlscy9hY2wuaCIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1aWxk IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWVzb24uYnVpbGQKaW5kZXggNDJjY2VkOWViZS4uOTUz OWU1M2JhYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWVzb24uYnVpbGQKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWVzb24uYnVpbGQKQEAgLTE3LDYgKzE3LDggQEAgYmFj a2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAnY29weXRvLmMnLAogICAnY3JlYXRlYXMuYycsCiAg ICdkYmNvbW1hbmRzLmMnLAorICAnZGRsZGVwYXJzZS5jJywKKyAgJ2RkbGpzb24uYycsCiAgICdk ZWZpbmUuYycsCiAgICdkaXNjYXJkLmMnLAogICAnZHJvcGNtZHMuYycsCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2Vx dWVuY2UuYwppbmRleCBlZjAxNDQ5Njc4Li40YmI3MzFkNWZmIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVl bmNlLmMKQEAgLTE3MDcsNiArMTcwNyw0OSBAQCBwcm9jZXNzX293bmVkX2J5KFJlbGF0aW9uIHNl cXJlbCwgTGlzdCAqb3duZWRfYnksIGJvb2wgZm9yX2lkZW50aXR5KQogCQlyZWxhdGlvbl9jbG9z ZSh0YWJsZXJlbCwgTm9Mb2NrKTsKIH0KIAorLyoKKyAqIFJldHVybiBzZXF1ZW5jZSBwYXJhbWV0 ZXJzLCBkZXRhaWxlZAorICovCitTZXF1ZW5jZV92YWx1ZXMgKgorZ2V0X3NlcXVlbmNlX3ZhbHVl cyhPaWQgc2VxdWVuY2VJZCkKK3sKKwlCdWZmZXIgICAgICBidWY7CisJU2VxVGFibGUgICAgZWxt OworCVJlbGF0aW9uICAgIHNlcXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVwbGU7CisJSGVhcFR1cGxl RGF0YSBzZXF0dXBsZWRhdGE7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCUZvcm1fcGdf c2VxdWVuY2VfZGF0YSBzZXE7CisJU2VxdWVuY2VfdmFsdWVzICpzZXF2YWx1ZXM7CisKKwlzZXF0 dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShTRVFSRUxJRCwgc2VxdWVuY2VJZCk7CisJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKHNlcXR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIHNlcXVlbmNlICV1Iiwgc2VxdWVuY2VJZCk7CisJc2VxZm9ybSA9IChGb3JtX3BnX3Nl cXVlbmNlKSBHRVRTVFJVQ1Qoc2VxdHVwbGUpOworCisJUmVsZWFzZVN5c0NhY2hlKHNlcXR1cGxl KTsKKworCS8qIE9wZW4gYW5kIGxvY2sgc2VxdWVuY2UgKi8KKwlpbml0X3NlcXVlbmNlKHNlcXVl bmNlSWQsICZlbG0sICZzZXFyZWwpOworCisJaWYgKHBnX2NsYXNzX2FjbGNoZWNrKHNlcXVlbmNl SWQsIEdldFVzZXJJZCgpLAorCQlBQ0xfU0VMRUNUIHwgQUNMX1VTQUdFKSAhPSBBQ0xDSEVDS19P SykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfSU5TVUZGSUNJRU5UX1BS SVZJTEVHRSksCisJCQkJZXJybXNnKCJwZXJtaXNzaW9uIGRlbmllZCBmb3Igc2VxdWVuY2UgJXMi LAorCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzZXFyZWwpKSk7CisKKwlzZXEgPSBy ZWFkX3NlcV90dXBsZShzZXFyZWwsICZidWYsICZzZXF0dXBsZWRhdGEpOworCisJc2VxdmFsdWVz ID0gKFNlcXVlbmNlX3ZhbHVlcyAqKSBwYWxsb2Moc2l6ZW9mKFNlcXVlbmNlX3ZhbHVlcykpOwor CXNlcXZhbHVlcy0+bGFzdF92YWx1ZSA9IHNlcS0+bGFzdF92YWx1ZTsKKwlzZXF2YWx1ZXMtPnNl cWZvcm0gPSBzZXFmb3JtOworCisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWYpOworCXJlbGF0aW9u X2Nsb3NlKHNlcXJlbCwgTm9Mb2NrKTsKKworCXJldHVybiBzZXF2YWx1ZXM7Cit9CiAKIC8qCiAg KiBSZXR1cm4gc2VxdWVuY2UgcGFyYW1ldGVycyBpbiBhIGxpc3Qgb2YgdGhlIGZvcm0gY3JlYXRl ZCBieSB0aGUgcGFyc2VyLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVj bWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwppbmRleCBkOTg1Mjc4YWM2 Li42MDRjMWRlNDc0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMu YworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtNjAwLDcgKzYwMCw2 IEBAIHN0YXRpYyBPYmplY3RBZGRyZXNzIEFURXhlY1NldENvbXByZXNzaW9uKFJlbGF0aW9uIHJl bCwKIAkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKmNvbHVtbiwgTm9kZSAqbmV3VmFsdWUsIExPQ0tN T0RFIGxvY2ttb2RlKTsKIAogc3RhdGljIHZvaWQgaW5kZXhfY29weV9kYXRhKFJlbGF0aW9uIHJl bCwgUmVsRmlsZUxvY2F0b3IgbmV3cmxvY2F0b3IpOwotc3RhdGljIGNvbnN0IGNoYXIgKnN0b3Jh Z2VfbmFtZShjaGFyIGMpOwogCiBzdGF0aWMgdm9pZCBSYW5nZVZhckNhbGxiYWNrRm9yRHJvcFJl bGF0aW9uKGNvbnN0IFJhbmdlVmFyICpyZWwsIE9pZCByZWxPaWQsCiAJCQkJCQkJCQkJCU9pZCBv bGRSZWxPaWQsIHZvaWQgKmFyZyk7CkBAIC0yMjY2LDcgKzIyNjUsNyBAQCB0cnVuY2F0ZV9jaGVj a19hY3Rpdml0eShSZWxhdGlvbiByZWwpCiAgKiBzdG9yYWdlX25hbWUKICAqCSAgcmV0dXJucyB0 aGUgbmFtZSBjb3JyZXNwb25kaW5nIHRvIGEgdHlwc3RvcmFnZS9hdHRzdG9yYWdlIGVudW0gdmFs dWUKICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKgorY2hhciAqCiBzdG9yYWdlX25hbWUoY2hhciBj KQogewogCXN3aXRjaCAoYykKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV91 dGlsY21kLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5jCmluZGV4IGQ2NzU4 MGZjNzcuLjc1MzQ1NmVjYmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV91 dGlsY21kLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYwpAQCAtMTM5 Myw2ICsxMzkzLDcgQEAgZXhwYW5kVGFibGVMaWtlQ2xhdXNlKFJhbmdlVmFyICpoZWFwUmVsLCBU YWJsZUxpa2VDbGF1c2UgKnRhYmxlX2xpa2VfY2xhdXNlKQogCQlhdGNtZC0+Y21kcyA9IGF0c3Vi Y21kczsKIAkJYXRjbWQtPm9ianR5cGUgPSBPQkpFQ1RfVEFCTEU7CiAJCWF0Y21kLT5taXNzaW5n X29rID0gZmFsc2U7CisJCWF0Y21kLT50YWJsZV9saWtlID0gdHJ1ZTsKIAkJcmVzdWx0ID0gbGNv bnMoYXRjbWQsIHJlc3VsdCk7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJ0aXRp b25pbmcvcGFydGJvdW5kcy5jIGIvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRib3VuZHMu YwppbmRleCA3YzVkOTExMGZiLi42N2MyMjhhNDI0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9w YXJ0aXRpb25pbmcvcGFydGJvdW5kcy5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9w YXJ0Ym91bmRzLmMKQEAgLTQ5NzgsMyArNDk3OCwzMSBAQCBzYXRpc2ZpZXNfaGFzaF9wYXJ0aXRp b24oUEdfRlVOQ1RJT05fQVJHUykKIAogCVBHX1JFVFVSTl9CT09MKHJvd0hhc2ggJSBtb2R1bHVz ID09IHJlbWFpbmRlcik7CiB9CisKKy8qCisgKiBPYnRhaW4gdGhlIGRlcGFyc2VkIHBhcnRpdGlv biBib3VuZCBleHByZXNzaW9uIGZvciB0aGUgZ2l2ZW4gdGFibGUuCisgKi8KK2NoYXIgKgorcmVs YXRpb25fZ2V0X3BhcnRfYm91bmQoT2lkIHJlbGlkKQoreworCURhdHVtCQlkZXBhcnNlZDsKKwlE YXR1bQkJYm91bmQ7CisJYm9vbAkJaXNudWxsOworCUhlYXBUdXBsZQl0dXBsZTsKKworCXR1cGxl ID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwgcmVsaWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZCh0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlv biB3aXRoIE9JRCAldSIsIHJlbGlkKTsKKworCWJvdW5kID0gU3lzQ2FjaGVHZXRBdHRyKFJFTE9J RCwgdHVwbGUsCisJCQkJCQkJQW51bV9wZ19jbGFzc19yZWxwYXJ0Ym91bmQsCisJCQkJCQkJJmlz bnVsbCk7CisKKwlkZXBhcnNlZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIsCisJ CQkJCQkJCSAgIENTdHJpbmdHZXRUZXh0RGF0dW0oVGV4dERhdHVtR2V0Q1N0cmluZyhib3VuZCkp LAorCQkJCQkJCQkgICByZWxpZCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworCisJcmV0 dXJuIFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9y bWF0X3R5cGUuYwppbmRleCAxMjQwMmEwNjM3Li40MzE4MTI5NTU4IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvZm9ybWF0X3R5cGUuYwpAQCAtMjcsOCArMjcsNiBAQAogI2luY2x1ZGUgInV0aWxzL251bWVy aWMuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgogCi1zdGF0aWMgY2hhciAqcHJpbnRU eXBtb2QoY29uc3QgY2hhciAqdHlwbmFtZSwgaW50MzIgdHlwbW9kLCBPaWQgdHlwbW9kb3V0KTsK LQogCiAvKgogICogU1FMIGZ1bmN0aW9uOiBmb3JtYXRfdHlwZSh0eXBlX29pZCwgdHlwZW1vZCkK QEAgLTMyOSw2ICszMjcsMTEwIEBAIGZvcm1hdF90eXBlX2V4dGVuZGVkKE9pZCB0eXBlX29pZCwg aW50MzIgdHlwZW1vZCwgYml0czE2IGZsYWdzKQogCXJldHVybiBidWY7CiB9CiAKKy8qCisgKiBT aW1pbGFyIHRvIGZvcm1hdF90eXBlX2V4dGVuZGVkLCBleGNlcHQgd2UgcmV0dXJuIGVhY2ggYml0 IG9mIGluZm9ybWF0aW9uCisgKiBzZXBhcmF0ZWx5OgorICoKKyAqIC0gbnNwaWQgaXMgdGhlIHNj aGVtYSBPSUQuICBGb3IgY2VydGFpbiBTUUwtc3RhbmRhcmQgdHlwZXMgd2hpY2ggaGF2ZSB3ZWly ZAorICogICB0eXBtb2QgcnVsZXMsIHdlIHJldHVybiBJbnZhbGlkT2lkOyB0aGUgY2FsbGVyIGlz IGV4cGVjdGVkIHRvIG5vdCBzY2hlbWEtCisgKiAgIHF1YWxpZnkgdGhlIG5hbWUgbm9yIGFkZCBx dW90ZXMgdG8gdGhlIHR5cGUgbmFtZSBpbiB0aGlzIGNhc2UuCisgKgorICogLSB0eXBuYW1lIGlz IHNldCB0byB0aGUgdHlwZSBuYW1lLCB3aXRob3V0IHF1b3RlcworICoKKyAqIC0gdHlwZW1vZHN0 ciBpcyBzZXQgdG8gdGhlIHR5cGVtb2QsIGlmIGFueSwgYXMgYSBzdHJpbmcgd2l0aCBwYXJlbnRo ZXNlcworICoKKyAqIC0gdHlwYXJyYXkgaW5kaWNhdGVzIHdoZXRoZXIgW11zIG11c3QgYmUgYWRk ZWQKKyAqCisgKiBXZSBkb24ndCB0cnkgdG8gZGVjb2RlIHR5cGUgbmFtZXMgdG8gdGhlaXIgc3Rh bmRhcmQtbWFuZGF0ZWQgbmFtZXMsIGV4Y2VwdAorICogaW4gdGhlIGNhc2VzIG9mIHR5cGVzIHdp dGggdW51c3VhbCB0eXBtb2QgcnVsZXMuCisgKi8KK3ZvaWQKK2Zvcm1hdF90eXBlX2RldGFpbGVk KE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCwKKwkJCQkJIE9pZCAqbnNwaWQsIGNoYXIgKip0 eXBuYW1lLCBjaGFyICoqdHlwZW1vZHN0ciwKKwkJCQkJIGJvb2wgKnR5cGVhcnJheSkKK3sKKwlI ZWFwVHVwbGUJdHVwbGU7CisJRm9ybV9wZ190eXBlIHR5cGVmb3JtOworCU9pZAkJCWFycmF5X2Jh c2VfdHlwZTsKKworCXR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0 RGF0dW0odHlwZV9vaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQorCQllbG9n KEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdHlwZSB3aXRoIE9JRCAldSIsIHR5cGVf b2lkKTsKKworCXR5cGVmb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR1cGxlKTsKKwor CS8qCisJICogV2Ugc3dpdGNoIG91ciBhdHRlbnRpb24gdG8gdGhlIGFycmF5IGVsZW1lbnQgdHlw ZSBmb3IgY2VydGFpbiBjYXNlcy4KKwkgKiBDaGVjayBpZiBpdCdzIGEgInRydWUiIGFycmF5IHR5 cGUuICBQc2V1ZG8tYXJyYXkgdHlwZXMgc3VjaCBhcyAibmFtZSIKKwkgKiBzaG91bGRuJ3QgZ2V0 IGRlY29uc3RydWN0ZWQuICBBbHNvIGNoZWNrIHRoZSB0b2FzdCBwcm9wZXJ0eSwgYW5kIGRvbid0 CisJICogZGVjb25zdHJ1Y3QgInBsYWluIHN0b3JhZ2UiIGFycmF5IHR5cGVzIC0tLSB0aGlzIGlz IGJlY2F1c2Ugd2UgZG9uJ3QKKwkgKiB3YW50IHRvIHNob3cgb2lkdmVjdG9yIGFzIG9pZFtdLgor CSAqLworCWFycmF5X2Jhc2VfdHlwZSA9IHR5cGVmb3JtLT50eXBlbGVtOworCisJKnR5cGVhcnJh eSA9IChJc1RydWVBcnJheVR5cGUodHlwZWZvcm0pICYmIHR5cGVmb3JtLT50eXBzdG9yYWdlICE9 IFRZUFNUT1JBR0VfUExBSU4pOworCisJaWYgKCp0eXBlYXJyYXkpCisJeworCQlSZWxlYXNlU3lz Q2FjaGUodHVwbGUpOworCQl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJ ZEdldERhdHVtKGFycmF5X2Jhc2VfdHlwZSkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVw bGUpKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgd2l0aCBP SUQgJXUiLCB0eXBlX29pZCk7CisKKwkJdHlwZWZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJV Q1QodHVwbGUpOworCQl0eXBlX29pZCA9IGFycmF5X2Jhc2VfdHlwZTsKKwl9CisKKwkvKgorCSAq IFNwZWNpYWwtY2FzZSBjcm9jayBmb3IgdHlwZXMgd2l0aCBzdHJhbmdlIHR5cG1vZCBydWxlcyB3 aGVyZSB3ZSBwdXQKKwkgKiB0eXBlbW9kIGF0IHRoZSBtaWRkbGUgb2YgbmFtZSAoZS5nLiBUSU1F KDYpIHdpdGggdGltZSB6b25lKS4gV2UgY2Fubm90CisJICogc2NoZW1hLXF1YWxpZnkgbm9yIGFk ZCBxdW90ZXMgdG8gdGhlIHR5cGUgbmFtZSBpbiB0aGVzZSBjYXNlcy4KKwkgKi8KKwkqbnNwaWQg PSBJbnZhbGlkT2lkOworCisJc3dpdGNoICh0eXBlX29pZCkKKwl7CisJCWNhc2UgVElNRU9JRDoK KwkJCSp0eXBuYW1lID0gcHN0cmR1cCgiVElNRSIpOworCQkJYnJlYWs7CisJCWNhc2UgVElNRVNU QU1QT0lEOgorCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1FU1RBTVAiKTsKKwkJCWJyZWFrOwor CQljYXNlIFRJTUVTVEFNUFRaT0lEOgorCQkJaWYgKHR5cGVtb2QgPCAwKQorCQkJCSp0eXBuYW1l ID0gcHN0cmR1cCgiVElNRVNUQU1QIFdJVEggVElNRSBaT05FIik7CisJCQllbHNlCisJCQkJLyog b3RoZXJ3aXNlLCBXSVRIIFRaIGlzIGFkZGVkIGJ5IHR5cG1vZC4gKi8KKwkJCQkqdHlwbmFtZSA9 IHBzdHJkdXAoIlRJTUVTVEFNUCIpOworCQkJYnJlYWs7CisJCWNhc2UgSU5URVJWQUxPSUQ6CisJ CQkqdHlwbmFtZSA9IHBzdHJkdXAoIklOVEVSVkFMIik7CisJCQlicmVhazsKKwkJY2FzZSBUSU1F VFpPSUQ6CisJCQlpZiAodHlwZW1vZCA8IDApCisJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1F IFdJVEggVElNRSBaT05FIik7CisJCQllbHNlCisJCQkJLyogb3RoZXJ3aXNlLCBXSVRIIFRaIGlz IGFkZGVkIGJ5IHR5cG1vZC4gKi8KKwkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJTUUiKTsKKwkJ CWJyZWFrOworCQlkZWZhdWx0OgorCisJCQkvKgorCQkJICogTm8gYWRkaXRpb25hbCBwcm9jZXNz aW5nIGlzIHJlcXVpcmVkIGZvciBvdGhlciB0eXBlcywgc28gZ2V0CisJCQkgKiB0aGUgdHlwZSBu YW1lIGFuZCBzY2hlbWEgZGlyZWN0bHkgZnJvbSB0aGUgY2F0YWxvZy4KKwkJCSAqLworCQkJKm5z cGlkID0gdHlwZWZvcm0tPnR5cG5hbWVzcGFjZTsKKwkJCSp0eXBuYW1lID0gcHN0cmR1cChOYW1l U3RyKHR5cGVmb3JtLT50eXBuYW1lKSk7CisJfQorCisJaWYgKHR5cGVtb2QgPj0gMCkKKwkJKnR5 cGVtb2RzdHIgPSBwcmludFR5cG1vZCgiIiwgdHlwZW1vZCwgdHlwZWZvcm0tPnR5cG1vZG91dCk7 CisJZWxzZQorCQkqdHlwZW1vZHN0ciA9IHBzdHJkdXAoIiIpOworCisJUmVsZWFzZVN5c0NhY2hl KHR1cGxlKTsKK30KKwogLyoKICAqIFRoaXMgdmVyc2lvbiBpcyBmb3IgdXNlIHdpdGhpbiB0aGUg YmFja2VuZCBpbiBlcnJvciBtZXNzYWdlcywgZXRjLgogICogT25lIGRpZmZlcmVuY2UgaXMgdGhh dCBpdCB3aWxsIGZhaWwgZm9yIGFuIGludmFsaWQgdHlwZS4KQEAgLTM2Myw3ICs0NjUsNyBAQCBm b3JtYXRfdHlwZV93aXRoX3R5cGVtb2QoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kKQogLyoK ICAqIEFkZCB0eXBtb2QgZGVjb3JhdGlvbiB0byB0aGUgYmFzaWMgdHlwZSBuYW1lCiAgKi8KLXN0 YXRpYyBjaGFyICoKK2NoYXIgKgogcHJpbnRUeXBtb2QoY29uc3QgY2hhciAqdHlwbmFtZSwgaW50 MzIgdHlwbW9kLCBPaWQgdHlwbW9kb3V0KQogewogCWNoYXIJICAgKnJlczsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9ydWxldXRpbHMuYwppbmRleCBkM2E5NzNkODZiLi4yZDE5NjFmMTJkIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3J1bGV1dGlscy5jCkBAIC01MSw3ICs1MSw2IEBACiAjaW5jbHVkZSAib3B0aW1pemVyL29w dGltaXplci5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9hZ2cuaCIKICNpbmNsdWRlICJwYXJz ZXIvcGFyc2VfZnVuYy5oIgotI2luY2x1ZGUgInBhcnNlci9wYXJzZV9ub2RlLmgiCiAjaW5jbHVk ZSAicGFyc2VyL3BhcnNlX29wZXIuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfcmVsYXRpb24u aCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VyLmgiCkBAIC01MDEsMjIgKzUwMCwxNSBAQCBzdGF0 aWMgdm9pZCBnZXRfZnJvbV9jbGF1c2VfY29sZGVmbGlzdChSYW5nZVRibEZ1bmN0aW9uICpydGZ1 bmMsCiAJCQkJCQkJCQkgICBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwogc3RhdGljIHZvaWQg Z2V0X3RhYmxlc2FtcGxlX2RlZihUYWJsZVNhbXBsZUNsYXVzZSAqdGFibGVzYW1wbGUsCiAJCQkJ CQkJCWRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7Ci1zdGF0aWMgdm9pZCBnZXRfb3BjbGFzc19u YW1lKE9pZCBvcGNsYXNzLCBPaWQgYWN0dWFsX2RhdGF0eXBlLAotCQkJCQkJCSBTdHJpbmdJbmZv IGJ1Zik7CiBzdGF0aWMgTm9kZSAqcHJvY2Vzc0luZGlyZWN0aW9uKE5vZGUgKm5vZGUsIGRlcGFy c2VfY29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgdm9pZCBwcmludFN1YnNjcmlwdHMoU3Vic2Ny aXB0aW5nUmVmICpzYnNyZWYsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgY2hh ciAqZ2V0X3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9y ZWxhdGlvbl9uYW1lKE9pZCByZWxpZCwgTGlzdCAqbmFtZXNwYWNlcyk7CiBzdGF0aWMgY2hhciAq Z2VuZXJhdGVfcXVhbGlmaWVkX3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKTsKLXN0YXRpYyBjaGFy ICpnZW5lcmF0ZV9mdW5jdGlvbl9uYW1lKE9pZCBmdW5jaWQsIGludCBuYXJncywKLQkJCQkJCQkJ CUxpc3QgKmFyZ25hbWVzLCBPaWQgKmFyZ3R5cGVzLAotCQkJCQkJCQkJYm9vbCBoYXNfdmFyaWFk aWMsIGJvb2wgKnVzZV92YXJpYWRpY19wLAotCQkJCQkJCQkJUGFyc2VFeHByS2luZCBzcGVjaWFs X2V4cHJraW5kKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9vcGVyYXRvcl9uYW1lKE9pZCBvcGVy aWQsIE9pZCBhcmcxLCBPaWQgYXJnMik7CiBzdGF0aWMgdm9pZCBhZGRfY2FzdF90byhTdHJpbmdJ bmZvIGJ1ZiwgT2lkIHR5cGlkKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9xdWFsaWZpZWRfdHlw ZV9uYW1lKE9pZCB0eXBpZCk7CiBzdGF0aWMgdGV4dCAqc3RyaW5nX3RvX3RleHQoY2hhciAqc3Ry KTsKLXN0YXRpYyBjaGFyICpmbGF0dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlkKTsKIHN0YXRpYyB2 b2lkIGdldF9yZWxvcHRpb25zKFN0cmluZ0luZm8gYnVmLCBEYXR1bSByZWxvcHRpb25zKTsKIAog I2RlZmluZSBvbmx5X21hcmtlcihydGUpICAoKHJ0ZSktPmluaCA/ICIiIDogIk9OTFkgIikKQEAg LTE5MDEsNiArMTg5MywxNCBAQCBwZ19nZXRfcGFydGtleWRlZl9jb2x1bW5zKE9pZCByZWxpZCwg Ym9vbCBwcmV0dHkpCiAJcmV0dXJuIHBnX2dldF9wYXJ0a2V5ZGVmX3dvcmtlcihyZWxpZCwgcHJl dHR5RmxhZ3MsIHRydWUsIGZhbHNlKTsKIH0KIAorLyogSW50ZXJuYWwgdmVyc2lvbiB0aGF0IHJl cG9ydHMgdGhlIGZ1bGwgcGFydGl0aW9uIGtleSBkZWZpbml0aW9uICovCitjaGFyICoKK3BnX2dl dF9wYXJ0a2V5ZGVmX3N0cmluZyhPaWQgcmVsaWQpCit7CisJcmV0dXJuIHBnX2dldF9wYXJ0a2V5 ZGVmX3dvcmtlcihyZWxpZCwgR0VUX1BSRVRUWV9GTEFHUyhmYWxzZSksIGZhbHNlLAorCQkJCQkJ CQkJZmFsc2UpOworfQorCiAvKgogICogSW50ZXJuYWwgd29ya2hvcnNlIHRvIGRlY29tcGlsZSBh IHBhcnRpdGlvbiBrZXkgZGVmaW5pdGlvbi4KICAqLwpAQCAtMjE0OCw2ICsyMTQ4LDE2IEBAIHBn X2dldF9jb25zdHJhaW50ZGVmX2V4dChQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9URVhU X1Aoc3RyaW5nX3RvX3RleHQocmVzKSk7CiB9CiAKKy8qCisgKiBJbnRlcm5hbCB2ZXJzaW9uIHRo YXQgcmV0dXJucyB0aGUgZGVmaW5pdGlvbiBvZiBhIENPTlNUUkFJTlQgY29tbWFuZAorICovCitj aGFyICoKK3BnX2dldF9jb25zdHJhaW50ZGVmX3N0cmluZyhPaWQgY29uc3RyYWludElkKQorewor CXJldHVybiBwZ19nZXRfY29uc3RyYWludGRlZl93b3JrZXIoY29uc3RyYWludElkLCBmYWxzZSwK KwkJCQkJCQkJCSAgIEdFVF9QUkVUVFlfRkxBR1MoZmFsc2UpLCBmYWxzZSk7Cit9CisKIC8qCiAg KiBJbnRlcm5hbCB2ZXJzaW9uIHRoYXQgcmV0dXJucyBhIGZ1bGwgQUxURVIgVEFCTEUgLi4uIEFE RCBDT05TVFJBSU5UIGNvbW1hbmQKICAqLwpAQCAtMTE3NTgsNyArMTE3NjgsNyBAQCBnZXRfdGFi bGVzYW1wbGVfZGVmKFRhYmxlU2FtcGxlQ2xhdXNlICp0YWJsZXNhbXBsZSwgZGVwYXJzZV9jb250 ZXh0ICpjb250ZXh0KQogICogYWN0dWFsX2RhdGF0eXBlLiAgKElmIHlvdSBkb24ndCB3YW50IHRo aXMgYmVoYXZpb3IsIGp1c3QgcGFzcwogICogSW52YWxpZE9pZCBmb3IgYWN0dWFsX2RhdGF0eXBl LikKICAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3Ms IE9pZCBhY3R1YWxfZGF0YXR5cGUsCiAJCQkJIFN0cmluZ0luZm8gYnVmKQogewpAQCAtMTIxNTIs NyArMTIxNjIsNyBAQCBnZW5lcmF0ZV9xdWFsaWZpZWRfcmVsYXRpb25fbmFtZShPaWQgcmVsaWQp CiAgKgogICogVGhlIHJlc3VsdCBpbmNsdWRlcyBhbGwgbmVjZXNzYXJ5IHF1b3RpbmcgYW5kIHNj aGVtYS1wcmVmaXhpbmcuCiAgKi8KLXN0YXRpYyBjaGFyICoKK2NoYXIgKgogZ2VuZXJhdGVfZnVu Y3Rpb25fbmFtZShPaWQgZnVuY2lkLCBpbnQgbmFyZ3MsIExpc3QgKmFyZ25hbWVzLCBPaWQgKmFy Z3R5cGVzLAogCQkJCQkgICBib29sIGhhc192YXJpYWRpYywgYm9vbCAqdXNlX3ZhcmlhZGljX3As CiAJCQkJCSAgIFBhcnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2luZCkKQEAgLTEyNTM4LDcgKzEy NTQ4LDcgQEAgZ2V0X3JlbG9wdGlvbnMoU3RyaW5nSW5mbyBidWYsIERhdHVtIHJlbG9wdGlvbnMp CiAvKgogICogR2VuZXJhdGUgYSBDIHN0cmluZyByZXByZXNlbnRpbmcgYSByZWxhdGlvbidzIHJl bG9wdGlvbnMsIG9yIE5VTEwgaWYgbm9uZS4KICAqLwotc3RhdGljIGNoYXIgKgorY2hhciAqCiBm bGF0dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlkKQogewogCWNoYXIJICAgKnJlc3VsdCA9IE5VTEw7 CkBAIC0xMjYwNiwzICsxMjYxNiwyMyBAQCBnZXRfcmFuZ2VfcGFydGJvdW5kX3N0cmluZyhMaXN0 ICpib3VuZF9kYXR1bXMpCiAKIAlyZXR1cm4gYnVmLT5kYXRhOwogfQorCisvKgorICogT2J0YWlu IHRoZSBkZXBhcnNlZCBkZWZhdWx0IHZhbHVlIGZvciB0aGUgZ2l2ZW4gY29sdW1uIG9mIHRoZSBn aXZlbiB0YWJsZS4KKyAqCisgKiBDYWxsZXIgbXVzdCBoYXZlIHNldCBhIGNvcnJlY3QgZGVwYXJz ZSBjb250ZXh0IGFuZCBtdXN0IGVuc3VyZSB0aGF0IHRoZQorICogcGFzc2VkIGF0dHJpYnV0ZSBo YXMgYSBkZWZhdWx0IHZhbHVlLgorICovCitjaGFyICoKK3JlbGF0aW9uX2dldF9jb2x1bW5fZGVm YXVsdChSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bm8sIExpc3QgKmRwY29udGV4dCkKK3sK KwlOb2RlCSAgICpkZWZ2YWw7CisJY2hhcgkgICAqZGVmc3RyOworCisJZGVmdmFsID0gYnVpbGRf Y29sdW1uX2RlZmF1bHQocmVsLCBhdHRubyk7CisJQXNzZXJ0KGRlZnZhbCAhPSBOVUxMKTsKKwor CWRlZnN0ciA9IGRlcGFyc2VfZXhwcmVzc2lvbihkZWZ2YWwsIGRwY29udGV4dCwgZmFsc2UsIGZh bHNlKTsKKworCXJldHVybiBkZWZzdHI7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX2luaGVyaXRzLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2luaGVyaXRzLmgKaW5k ZXggY2UxNTRhYjk0My4uOTk5MDlkMmMzNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19pbmhlcml0cy5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfaW5oZXJpdHMuaApA QCAtNjQsNCArNjQsNiBAQCBleHRlcm4gYm9vbCBEZWxldGVJbmhlcml0c1R1cGxlKE9pZCBpbmhy ZWxpZCwgT2lkIGluaHBhcmVudCwKIAkJCQkJCQkJY29uc3QgY2hhciAqY2hpbGRuYW1lKTsKIGV4 dGVybiBib29sIFBhcnRpdGlvbkhhc1BlbmRpbmdEZXRhY2goT2lkIHBhcnRvaWQpOwogCitleHRl cm4gTGlzdCAqcmVsYXRpb25fZ2V0X2luaF9wYXJlbnRzKE9pZCBvYmplY3RJZCk7CisKICNlbmRp ZgkJCQkJCQkvKiBQR19JTkhFUklUU19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCA2 OTk2MDczOTg5Li43NmZmMjNiNzc5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTEyMDQz LDQgKzEyMDQzLDExIEBACiAgIHByb25hbWUgPT4gJ2FueV92YWx1ZV90cmFuc2ZuJywgcHJvcmV0 dHlwZSA9PiAnYW55ZWxlbWVudCcsCiAgIHByb2FyZ3R5cGVzID0+ICdhbnllbGVtZW50IGFueWVs ZW1lbnQnLCBwcm9zcmMgPT4gJ2FueV92YWx1ZV90cmFuc2ZuJyB9LAogCit7IG9pZCA9PiAnNDY0 MicsIGRlc2NyID0+ICdkZXBhcnNlIHRoZSBEREwgY29tbWFuZCBpbnRvIGEgSlNPTiBmb3JtYXQg c3RyaW5nJywKKyAgcHJvbmFtZSA9PiAnZGRsX2RlcGFyc2VfdG9fanNvbicsIHByb3JldHR5cGUg PT4gJ3RleHQnLAorICBwcm9hcmd0eXBlcyA9PiAncGdfZGRsX2NvbW1hbmQnLCBwcm9zcmMgPT4g J2RkbF9kZXBhcnNlX3RvX2pzb24nIH0sCit7IG9pZCA9PiAnNDY0MycsIGRlc2NyID0+ICdleHBh bmQgSlNPTiBmb3JtYXQgRERMIHRvIGEgcGxhaW4gdGV4dCBEREwgY29tbWFuZCcsCisgIHByb25h bWUgPT4gJ2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kJywgcHJvcmV0dHlwZSA9PiAndGV4dCcs CisgIHByb2FyZ3R5cGVzID0+ICd0ZXh0JywgcHJvc3JjID0+ICdkZGxfZGVwYXJzZV9leHBhbmRf Y29tbWFuZCcgfSwKKwogXQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVu Y2UuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKaW5kZXggN2RiN2IzZGE3Yi4u YzBhMzk1OTZhYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaAor KysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCkBAIC0xNSw2ICsxNSw3IEBACiAK ICNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlYWRlci5oIgogI2luY2x1ZGUgImNhdGFsb2cvb2JqZWN0 YWRkcmVzcy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfc2VxdWVuY2UuaCIKICNpbmNsdWRlICJm bWdyLmgiCiAjaW5jbHVkZSAibGliL3N0cmluZ2luZm8uaCIKICNpbmNsdWRlICJub2Rlcy9wYXJz ZW5vZGVzLmgiCkBAIC01MSw5ICs1MiwxNyBAQCB0eXBlZGVmIHN0cnVjdCB4bF9zZXFfcmVjCiAJ LyogU0VRVUVOQ0UgVFVQTEUgREFUQSBGT0xMT1dTIEFUIFRIRSBFTkQgKi8KIH0geGxfc2VxX3Jl YzsKIAorLyogSW5mb3JtYXRpb24gbmVlZGVkIHRvIGRlZmluZSBhIHNlcXVlbmNlLiAqLwordHlw ZWRlZiBzdHJ1Y3QgU2VxdWVuY2VfdmFsdWVzCit7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3Jt OworCWludDY0CQlsYXN0X3ZhbHVlOworfSBTZXF1ZW5jZV92YWx1ZXM7CisKIGV4dGVybiBpbnQ2 NCBuZXh0dmFsX2ludGVybmFsKE9pZCByZWxpZCwgYm9vbCBjaGVja19wZXJtaXNzaW9ucyk7CiBl eHRlcm4gRGF0dW0gbmV4dHZhbChQR19GVU5DVElPTl9BUkdTKTsKIGV4dGVybiBMaXN0ICpzZXF1 ZW5jZV9vcHRpb25zKE9pZCByZWxpZCk7CitleHRlcm4gU2VxdWVuY2VfdmFsdWVzICpnZXRfc2Vx dWVuY2VfdmFsdWVzKE9pZCBzZXF1ZW5jZUlkKTsKIAogZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVm aW5lU2VxdWVuY2UoUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVTZXFTdG10ICpzZXEpOwogZXh0 ZXJuIE9iamVjdEFkZHJlc3MgQWx0ZXJTZXF1ZW5jZShQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVy U2VxU3RtdCAqc3RtdCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy90YWJsZWNt ZHMuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RhYmxlY21kcy5oCmluZGV4IDI1MGQ4OWZmODgu LmQyODc0YjkyNTUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RhYmxlY21kcy5o CisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RhYmxlY21kcy5oCkBAIC0xMDUsNCArMTA1LDYg QEAgZXh0ZXJuIHZvaWQgUmFuZ2VWYXJDYWxsYmFja093bnNSZWxhdGlvbihjb25zdCBSYW5nZVZh ciAqcmVsYXRpb24sCiBleHRlcm4gYm9vbCBQYXJ0Q29uc3RyYWludEltcGxpZWRCeVJlbENvbnN0 cmFpbnQoUmVsYXRpb24gc2NhbnJlbCwKIAkJCQkJCQkJCQkJCSBMaXN0ICpwYXJ0Q29uc3RyYWlu dCk7CiAKK2V4dGVybiBjaGFyICpzdG9yYWdlX25hbWUoY2hhciBjKTsKKwogI2VuZGlmCQkJCQkJ CS8qIFRBQkxFQ01EU19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5v ZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKaW5kZXggYjNiZWM5MGU1Mi4u YjhhYjhkYWU2YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCisr KyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaApAQCAtMjE2Nyw2ICsyMTY3LDcgQEAg dHlwZWRlZiBzdHJ1Y3QgQWx0ZXJUYWJsZVN0bXQKIAlMaXN0CSAgICpjbWRzOwkJCS8qIGxpc3Qg b2Ygc3ViY29tbWFuZHMgKi8KIAlPYmplY3RUeXBlCW9ianR5cGU7CQkvKiB0eXBlIG9mIG9iamVj dCAqLwogCWJvb2wJCW1pc3Npbmdfb2s7CQkvKiBza2lwIGVycm9yIGlmIHRhYmxlIG1pc3Npbmcg Ki8KKwlib29sCQl0YWJsZV9saWtlOwkJLyogaW50ZXJuYWxseSBnZW5lcmF0ZWQgZm9yIFRhYmxl TGlrZUNsYXVzZSAqLwogfSBBbHRlclRhYmxlU3RtdDsKIAogdHlwZWRlZiBlbnVtIEFsdGVyVGFi bGVUeXBlCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wYXJ0aXRpb25pbmcvcGFydGJvdW5kcy5o IGIvc3JjL2luY2x1ZGUvcGFydGl0aW9uaW5nL3BhcnRib3VuZHMuaAppbmRleCBkMmUwMWY5MmRm Li40NzZiMzhhODllIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wYXJ0aXRpb25pbmcvcGFydGJv dW5kcy5oCisrKyBiL3NyYy9pbmNsdWRlL3BhcnRpdGlvbmluZy9wYXJ0Ym91bmRzLmgKQEAgLTE0 Myw0ICsxNDMsNiBAQCBleHRlcm4gaW50CXBhcnRpdGlvbl9yYW5nZV9kYXR1bV9ic2VhcmNoKEZt Z3JJbmZvICpwYXJ0c3VwZnVuYywKIGV4dGVybiBpbnQJcGFydGl0aW9uX2hhc2hfYnNlYXJjaChQ YXJ0aXRpb25Cb3VuZEluZm8gYm91bmRpbmZvLAogCQkJCQkJCQkgICBpbnQgbW9kdWx1cywgaW50 IHJlbWFpbmRlcik7CiAKK2V4dGVybiBjaGFyICAgICpyZWxhdGlvbl9nZXRfcGFydF9ib3VuZChP aWQgcmVsaWQpOworCiAjZW5kaWYJCQkJCQkJLyogUEFSVEJPVU5EU19IICovCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS90Y29wL2RkbGRlcGFyc2UuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvZGRsZGVw YXJzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjBjY2I0ZDFlZGUK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS90Y29wL2RkbGRlcGFyc2UuaApAQCAtMCww ICsxLDIxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxkZXBhcnNlLmgKKyAqCisg KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBv ZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvdGNvcC9k ZGxkZXBhcnNlLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBERExfREVQ QVJTRV9ICisjZGVmaW5lIERETF9ERVBBUlNFX0gKKworI2luY2x1ZGUgInRjb3AvZGVwYXJzZV91 dGlsaXR5LmgiCisKK2V4dGVybiBjaGFyICpkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0 ZWRDb21tYW5kICpjbWQpOworZXh0ZXJuIGNoYXIgKmRlcGFyc2VfZGRsX2pzb25fdG9fc3RyaW5n KGNoYXIgKmpzb25iKTsKK2V4dGVybiBjaGFyICpkZXBhcnNlX2Ryb3BfdGFibGUoY29uc3QgY2hh ciAqb2JqaWRlbnRpdHksIE5vZGUgKnBhcnNldHJlZSk7CisKKyNlbmRpZgkJCQkJCQkvKiBERExf REVQQVJTRV9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oIGIv c3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaAppbmRleCAyZjhiNDZkNmRhLi5jZmRhMjk5ZGVl IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oCisrKyBiL3NyYy9pbmNs dWRlL3V0aWxzL2J1aWx0aW5zLmgKQEAgLTEyNCw5ICsxMjQsMTQgQEAgZXh0ZXJuIERhdHVtIG51 bWVyaWNfZmxvYXQ4X25vX292ZXJmbG93KFBHX0ZVTkNUSU9OX0FSR1MpOwogI2RlZmluZSBGT1JN QVRfVFlQRV9JTlZBTElEX0FTX05VTEwJMHgwOAkvKiBOVUxMIGlmIHVuZGVmaW5lZCAqLwogZXh0 ZXJuIGNoYXIgKmZvcm1hdF90eXBlX2V4dGVuZGVkKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1v ZCwgYml0czE2IGZsYWdzKTsKIAorZXh0ZXJuIHZvaWQgZm9ybWF0X3R5cGVfZGV0YWlsZWQoT2lk IHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kLAorCQkJCQkJCQkgIE9pZCAqbnNwaWQsIGNoYXIgKip0 eXBuYW1lLAorCQkJCQkJCQkgIGNoYXIgKip0eXBlbW9kc3RyLCBib29sICp0eXBlYXJyYXkpOwor CiBleHRlcm4gY2hhciAqZm9ybWF0X3R5cGVfYmUoT2lkIHR5cGVfb2lkKTsKIGV4dGVybiBjaGFy ICpmb3JtYXRfdHlwZV9iZV9xdWFsaWZpZWQoT2lkIHR5cGVfb2lkKTsKIGV4dGVybiBjaGFyICpm b3JtYXRfdHlwZV93aXRoX3R5cGVtb2QoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kKTsKK2V4 dGVybiBjaGFyICpwcmludFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQzMiB0eXBtb2Qs IE9pZCB0eXBtb2RvdXQpOwogCiBleHRlcm4gaW50MzIgdHlwZV9tYXhpbXVtX3NpemUoT2lkIHR5 cGVfb2lkLCBpbnQzMiB0eXBlbW9kKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMv cnVsZXV0aWxzLmggYi9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaAppbmRleCBiMDA2ZDlk NDc1Li41MGE4YTE0ZDExIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMu aAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaApAQCAtMTYsNiArMTYsNyBAQAog I2luY2x1ZGUgIm5vZGVzL25vZGVzLmgiCiAjaW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgog I2luY2x1ZGUgIm5vZGVzL3BnX2xpc3QuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2Vfbm9kZS5o IgogCiBzdHJ1Y3QgUGxhbjsJCQkJCS8qIGF2b2lkIGluY2x1ZGluZyBwbGFubm9kZXMuaCBoZXJl ICovCiBzdHJ1Y3QgUGxhbm5lZFN0bXQ7CkBAIC0zMSw5ICszMiwxMSBAQCBleHRlcm4gY2hhciAq cGdfZ2V0X2luZGV4ZGVmX2NvbHVtbnNfZXh0ZW5kZWQoT2lkIGluZGV4cmVsaWQsCiBleHRlcm4g Y2hhciAqcGdfZ2V0X3F1ZXJ5ZGVmKFF1ZXJ5ICpxdWVyeSwgYm9vbCBwcmV0dHkpOwogCiBleHRl cm4gY2hhciAqcGdfZ2V0X3BhcnRrZXlkZWZfY29sdW1ucyhPaWQgcmVsaWQsIGJvb2wgcHJldHR5 KTsKK2V4dGVybiBjaGFyICpwZ19nZXRfcGFydGtleWRlZl9zdHJpbmcoT2lkIHJlbGlkKTsKIGV4 dGVybiBjaGFyICpwZ19nZXRfcGFydGNvbnN0cmRlZl9zdHJpbmcoT2lkIHBhcnRpdGlvbklkLCBj aGFyICphbGlhc25hbWUpOwogCiBleHRlcm4gY2hhciAqcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29t bWFuZChPaWQgY29uc3RyYWludElkKTsKK2V4dGVybiBjaGFyICpwZ19nZXRfY29uc3RyYWludGRl Zl9zdHJpbmcoT2lkIGNvbnN0cmFpbnRJZCk7CiBleHRlcm4gY2hhciAqZGVwYXJzZV9leHByZXNz aW9uKE5vZGUgKmV4cHIsIExpc3QgKmRwY29udGV4dCwKIAkJCQkJCQkJYm9vbCBmb3JjZXByZWZp eCwgYm9vbCBzaG93aW1wbGljaXQpOwogZXh0ZXJuIExpc3QgKmRlcGFyc2VfY29udGV4dF9mb3Io Y29uc3QgY2hhciAqYWxpYXNuYW1lLCBPaWQgcmVsaWQpOwpAQCAtNDUsOCArNDgsMTggQEAgZXh0 ZXJuIExpc3QgKnNlbGVjdF9ydGFibGVfbmFtZXNfZm9yX2V4cGxhaW4oTGlzdCAqcnRhYmxlLAog CQkJCQkJCQkJCQkgQml0bWFwc2V0ICpyZWxzX3VzZWQpOwogZXh0ZXJuIGNoYXIgKmdlbmVyYXRl X2NvbGxhdGlvbl9uYW1lKE9pZCBjb2xsaWQpOwogZXh0ZXJuIGNoYXIgKmdlbmVyYXRlX29wY2xh c3NfbmFtZShPaWQgb3BjbGFzcyk7CitleHRlcm4gY2hhciAqZ2VuZXJhdGVfZnVuY3Rpb25fbmFt ZShPaWQgZnVuY2lkLCBpbnQgbmFyZ3MsIExpc3QgKmFyZ25hbWVzLAorCQkJCQkJCQkJT2lkICph cmd0eXBlcywgYm9vbCBoYXNfdmFyaWFkaWMsCisJCQkJCQkJCQlib29sICp1c2VfdmFyaWFkaWNf cCwKKwkJCQkJCQkJCVBhcnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2luZCk7CiBleHRlcm4gY2hh ciAqZ2V0X3JhbmdlX3BhcnRib3VuZF9zdHJpbmcoTGlzdCAqYm91bmRfZGF0dW1zKTsKK2V4dGVy biB2b2lkIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1YWxfZGF0YXR5cGUs CisJCQkJCQkJIFN0cmluZ0luZm8gYnVmKTsKK2V4dGVybiBjaGFyICpmbGF0dGVuX3JlbG9wdGlv bnMoT2lkIHJlbGlkKTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9zdGF0aXN0aWNzb2JqZGVmX3N0 cmluZyhPaWQgc3RhdGV4dGlkKTsKIAorZXh0ZXJuIGNoYXIgKnJlbGF0aW9uX2dldF9jb2x1bW5f ZGVmYXVsdChSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bm8sCisJCQkJCQkJCQkJIExpc3Qg KmRwY29udGV4dCk7CisKICNlbmRpZgkJCQkJCQkvKiBSVUxFVVRJTFNfSCAqLwpkaWZmIC0tZ2l0 IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdAppbmRleCAyNjA4NTQ3NDdiLi43YzhhZTdmZTdiIDEwMDY0NAotLS0gYS9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdApAQCAtMzIyMiw2ICszMjIyLDcgQEAgY29uZmlnX3Zhcl92YWx1ZQogY29u dGFpbl9hZ2dzX29mX2xldmVsX2NvbnRleHQKIGNvbnRhaW5fcGxhY2Vob2xkZXJfcmVmZXJlbmNl c19jb250ZXh0CiBjb252ZXJ0X3Rlc3RleHByX2NvbnRleHQKK2NvbnZTcGVjaWZpZXIKIGNvcHlf ZGF0YV9kZXN0X2NiCiBjb3B5X2RhdGFfc291cmNlX2NiCiBjb3JlX1lZU1RZUEUKQEAgLTM0MjUs NiArMzQyNiw3IEBAIGpzb25fbWFuaWZlc3RfcGVyd2FscmFuZ2VfY2FsbGJhY2sKIGpzb25fb2Zp ZWxkX2FjdGlvbgoganNvbl9zY2FsYXJfYWN0aW9uCiBqc29uX3N0cnVjdF9hY3Rpb24KK2pzb25f dHJpdmFsdWUKIGtleUVudHJ5RGF0YQoga2V5X3QKIGxjbENvbnRleHQKLS0gCjIuMzQuMQoK --_005_OS0PR01MB57163E6487EFF7378CB8E17C9438AOS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="0002-Deparser-for-Alter-Table-DDL-commands-2023_06_30.patch" Content-Description: 0002-Deparser-for-Alter-Table-DDL-commands-2023_06_30.patch Content-Disposition: attachment; filename="0002-Deparser-for-Alter-Table-DDL-commands-2023_06_30.patch"; size=59991; creation-date="Tue, 18 Jul 2023 07:04:19 GMT"; modification-date="Tue, 18 Jul 2023 07:09:22 GMT" Content-Transfer-Encoding: base64 RnJvbSBhZjhkNGEzOGM0MTFkOGQ5MmM2YzVmZDI3NWZkZTdlMmE4NTIwOWZjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaHZldGEgTWFsaWsgPHNodmV0YS5tYWxpa0BnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMjggSnVuIDIwMjMgMTQ6Mzc6MDIgKzA1MzAKU3ViamVjdDogW1BBVENIIDIv NV0gRGVwYXJzZXIgZm9yIEFsdGVyIFRhYmxlIERETCBjb21tYW5kcy4KClRoaXMgcGF0Y2ggY29u c3RydWN0cyBKU09OIGJsb2JzIHJlcHJlc2VudGluZyB0aGUgQWx0ZXIgVGFibGUKRERMIGNvbW1h bmRzIHdoaWNoIGNhbiBsYXRlciBiZSByZS1wcm9jZXNzZWQgaW50byBwbGFpbiBzdHJpbmdzCmJ5 IHdlbGwtZGVmaW5lZCBzcHJpbnRmLWxpa2UgZXhwYW5zaW9uLgotLS0KIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL2RkbGRlcGFyc2UuYyB8IDE3MDUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0K IHNyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jICAgICAgICB8ICAgMTcgKwogc3JjL2luY2x1ZGUv dGNvcC91dGlsaXR5LmggICAgICAgIHwgICAgMiArCiAzIGZpbGVzIGNoYW5nZWQsIDE2ODMgaW5z ZXJ0aW9ucygrKSwgNDEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvZGRsZGVwYXJzZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsZGVwYXJzZS5jCmlu ZGV4IGM4ZTg4NWNhMWEuLmNiMDI0YjQ1YjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2RkbGRlcGFyc2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxkZXBhcnNlLmMK QEAgLTM2MywxMSArMzYzLDE2IEBAIGluc2VydF9pZGVudGl0eV9vYmplY3QoSnNvbmJQYXJzZVN0 YXRlICpzdGF0ZSwgT2lkIG5zcGlkLCBjaGFyICpyZWxuYW1lKQogICogQ0FDSEUgJXt2YWx1ZX0K ICAqLwogc3RhdGljIGlubGluZSB2b2lkCi1kZXBhcnNlX1NlcV9DYWNoZShKc29uYlBhcnNlU3Rh dGUgKnN0YXRlLCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEpCitkZXBhcnNlX1NlcV9DYWNoZShK c29uYlBhcnNlU3RhdGUgKnN0YXRlLCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsCisJCQkJICBi b29sIGFsdGVyX3RhYmxlKQogeworCWNoYXIJICAgKmZtdDsKKworCWZtdCA9IGFsdGVyX3RhYmxl ID8gIlNFVCBDQUNIRSAle3ZhbHVlfXMiIDogIkNBQ0hFICV7dmFsdWV9cyI7CisKIAlwdXNoSnNv bmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOwogCW5ld19qc29uYl9WQShz dGF0ZSwgMywKLQkJCQkgImZtdCIsIGpidlN0cmluZywgIkNBQ0hFICV7dmFsdWV9cyIsCisJCQkJ ICJmbXQiLCBqYnZTdHJpbmcsIGZtdCwKIAkJCQkgImNsYXVzZSIsIGpidlN0cmluZywgImNhY2hl IiwKIAkJCQkgInZhbHVlIiwgamJ2U3RyaW5nLAogCQkJCSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQs IHNlcWRhdGEtPnNlcWNhY2hlKSk7CkBAIC0zNzgsMTAgKzM4MywxMyBAQCBkZXBhcnNlX1NlcV9D YWNoZShKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEpCiAg KiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBDWUNMRSBvcHRpb24gdG8gSnNvbmIuCiAgKgogICogVmVy Ym9zZSBzeW50YXgKKyAqIFNFVCAle25vfXMgQ1lDTEUKKyAqIE9SCiAgKiAle25vfXMgQ1lDTEUK ICAqLwogc3RhdGljIGlubGluZSB2b2lkCi1kZXBhcnNlX1NlcV9DeWNsZShKc29uYlBhcnNlU3Rh dGUgKnN0YXRlLCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEpCitkZXBhcnNlX1NlcV9DeWNsZShK c29uYlBhcnNlU3RhdGUgKnN0YXRlLCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsCisJCQkJICBi b29sIGFsdGVyX3RhYmxlKQogewogCVN0cmluZ0luZm9EYXRhIGZtdFN0cjsKIApAQCAtMzg5LDYg KzM5Nyw5IEBAIGRlcGFyc2VfU2VxX0N5Y2xlKEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIEZvcm1f cGdfc2VxdWVuY2Ugc2VxZGF0YSkKIAogCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lO X09CSkVDVCwgTlVMTCk7CiAKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoJmZtdFN0ciwgIlNFVCAiKTsKKwogCWlmICghc2VxZGF0YS0+c2VxY3ljbGUpCiAJewog CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIsICIle25vfXMgIik7CkBAIC00MDgsMTQg KzQxOSwyMiBAQCBkZXBhcnNlX1NlcV9DeWNsZShKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBGb3Jt X3BnX3NlcXVlbmNlIHNlcWRhdGEpCiAgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBJTkNSRU1FTlQg Qlkgb3B0aW9uIHRvIEpzb25iCiAgKgogICogVmVyYm9zZSBzeW50YXgKKyAqIFNFVCBJTkNSRU1F TlQgQlkgJXt2YWx1ZX1zCisgKiBPUgogICogSU5DUkVNRU5UIEJZICV7dmFsdWV9cwogICovCiBz dGF0aWMgaW5saW5lIHZvaWQKLWRlcGFyc2VfU2VxX0luY3JlbWVudEJ5KEpzb25iUGFyc2VTdGF0 ZSAqc3RhdGUsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSkKK2RlcGFyc2VfU2VxX0luY3JlbWVu dEJ5KEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwKKwkJ CQkJCWJvb2wgYWx0ZXJfdGFibGUpCiB7CisJY2hhcgkgICAqZm10OworCisJZm10ID0gYWx0ZXJf dGFibGUgPyAiU0VUIElOQ1JFTUVOVCBCWSAle3ZhbHVlfXMiCisJCTogIklOQ1JFTUVOVCBCWSAl e3ZhbHVlfXMiOworCiAJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBO VUxMKTsKIAluZXdfanNvbmJfVkEoc3RhdGUsIDMsCi0JCQkJICJmbXQiLCBqYnZTdHJpbmcsICJJ TkNSRU1FTlQgQlkgJXt2YWx1ZX1zIiwKKwkJCQkgImZtdCIsIGpidlN0cmluZywgZm10LAogCQkJ CSAiY2xhdXNlIiwgamJ2U3RyaW5nLCAic2VxaW5jcmVtZW50IiwKIAkJCQkgInZhbHVlIiwgamJ2 U3RyaW5nLAogCQkJCSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcWluY3JlbWVu dCkpOwpAQCAtNDI2LDE0ICs0NDUsMjEgQEAgZGVwYXJzZV9TZXFfSW5jcmVtZW50QnkoSnNvbmJQ YXJzZVN0YXRlICpzdGF0ZSwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhKQogICogRGVwYXJzZSB0 aGUgc2VxdWVuY2UgTUFYVkFMVUUgb3B0aW9uIHRvIEpzb25iLgogICoKICAqIFZlcmJvc2Ugc3lu dGF4CisgKiBTRVQgTUFYVkFMVUUgJXt2YWx1ZX1zCisgKiBPUgogICogTUFYVkFMVUUgJXt2YWx1 ZX1zCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotZGVwYXJzZV9TZXFfTWF4dmFsdWUoSnNvbmJQ YXJzZVN0YXRlICpzdGF0ZSwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhKQorZGVwYXJzZV9TZXFf TWF4dmFsdWUoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRh LAorCQkJCQkgYm9vbCBhbHRlcl90YWJsZSkKIHsKKwljaGFyCSAgICpmbXQ7CisKKwlmbXQgPSBh bHRlcl90YWJsZSA/ICJTRVQgTUFYVkFMVUUgJXt2YWx1ZX1zIiA6ICJNQVhWQUxVRSAle3ZhbHVl fXMiOworCiAJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsK IAluZXdfanNvbmJfVkEoc3RhdGUsIDMsCi0JCQkJICJmbXQiLCBqYnZTdHJpbmcsICJNQVhWQUxV RSAle3ZhbHVlfXMiLAorCQkJCSAiZm10IiwgamJ2U3RyaW5nLCBmbXQsCiAJCQkJICJjbGF1c2Ui LCBqYnZTdHJpbmcsICJtYXh2YWx1ZSIsCiAJCQkJICJ2YWx1ZSIsIGpidlN0cmluZywKIAkJCQkg cHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFtYXgpKTsKQEAgLTQ0NCwxNCArNDcw LDIxIEBAIGRlcGFyc2VfU2VxX01heHZhbHVlKEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIEZvcm1f cGdfc2VxdWVuY2Ugc2VxZGF0YSkKICAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIE1JTlZBTFVFIG9w dGlvbiB0byBKc29uYgogICoKICAqIFZlcmJvc2Ugc3ludGF4CisgKiBTRVQgTUlOVkFMVUUgJXt2 YWx1ZX1zCisgKiBPUgogICogTUlOVkFMVUUgJXt2YWx1ZX1zCiAgKi8KIHN0YXRpYyBpbmxpbmUg dm9pZAotZGVwYXJzZV9TZXFfTWludmFsdWUoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgRm9ybV9w Z19zZXF1ZW5jZSBzZXFkYXRhKQorZGVwYXJzZV9TZXFfTWludmFsdWUoSnNvbmJQYXJzZVN0YXRl ICpzdGF0ZSwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLAorCQkJCQkgYm9vbCBhbHRlcl90YWJs ZSkKIHsKKwljaGFyCSAgICpmbXQ7CisKKwlmbXQgPSBhbHRlcl90YWJsZSA/ICJTRVQgTUlOVkFM VUUgJXt2YWx1ZX1zIiA6ICJNSU5WQUxVRSAle3ZhbHVlfXMiOworCiAJcHVzaEpzb25iVmFsdWUo JnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKIAluZXdfanNvbmJfVkEoc3RhdGUsIDMs Ci0JCQkJICJmbXQiLCBqYnZTdHJpbmcsICJNSU5WQUxVRSAle3ZhbHVlfXMiLAorCQkJCSAiZm10 IiwgamJ2U3RyaW5nLCBmbXQsCiAJCQkJICJjbGF1c2UiLCBqYnZTdHJpbmcsICJtaW52YWx1ZSIs CiAJCQkJICJ2YWx1ZSIsIGpidlN0cmluZywKIAkJCQkgcHNwcmludGYoSU5UNjRfRk9STUFULCBz ZXFkYXRhLT5zZXFtaW4pKTsKQEAgLTQ2NSw3ICs0OTgsOCBAQCBkZXBhcnNlX1NlcV9NaW52YWx1 ZShKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEpCiAgKiBP V05FRCBCWSAle293bmVyfUQKICAqLwogc3RhdGljIHZvaWQKLWRlcGFyc2VfU2VxX093bmVkQnko SnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgT2lkIHNlcXVlbmNlSWQpCitkZXBhcnNlX1NlcV9Pd25l ZEJ5KEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIE9pZCBzZXF1ZW5jZUlkLAorCQkJCQlib29sIGFs dGVyX3RhYmxlKQogewogCVJlbGF0aW9uCWRlcFJlbDsKIAlTeXNTY2FuRGVzYyBzY2FuOwpAQCAt NTUwLDE0ICs1ODQsMjEgQEAgZGVwYXJzZV9TZXFfT3duZWRCeShKc29uYlBhcnNlU3RhdGUgKnN0 YXRlLCBPaWQgc2VxdWVuY2VJZCkKICAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIFNUQVJUIFdJVEgg b3B0aW9uIHRvIEpzb25iLgogICoKICAqIFZlcmJvc2Ugc3ludGF4CisgKiBTRVQgU1RBUlQgV0lU SCAle3ZhbHVlfXMKKyAqIE9SCiAgKiBTVEFSVCBXSVRIICV7dmFsdWV9cwogICovCiBzdGF0aWMg aW5saW5lIHZvaWQKLWRlcGFyc2VfU2VxX1N0YXJ0d2l0aChKc29uYlBhcnNlU3RhdGUgKnN0YXRl LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEpCitkZXBhcnNlX1NlcV9TdGFydHdpdGgoSnNvbmJQ YXJzZVN0YXRlICpzdGF0ZSwKKwkJCQkJICBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wg YWx0ZXJfdGFibGUpCiB7CisJY2hhcgkgICAqZm10OworCisJZm10ID0gYWx0ZXJfdGFibGUgPyAi U0VUIFNUQVJUIFdJVEggJXt2YWx1ZX1zIiA6ICJTVEFSVCBXSVRIICV7dmFsdWV9cyI7CisKIAlw dXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOwogCW5ld19qc29u Yl9WQShzdGF0ZSwgMywKLQkJCQkgImZtdCIsIGpidlN0cmluZywgIlNUQVJUIFdJVEggJXt2YWx1 ZX1zIiwKKwkJCQkgImZtdCIsIGpidlN0cmluZywgZm10LAogCQkJCSAiY2xhdXNlIiwgamJ2U3Ry aW5nLCAic3RhcnQiLAogCQkJCSAidmFsdWUiLCBqYnZTdHJpbmcsCiAJCQkJIHBzcHJpbnRmKElO VDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2Vxc3RhcnQpKTsKQEAgLTYwMSwxNSArNjQyLDE3IEBAIGRl cGFyc2VfU2VxX0FzKEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIEZvcm1fcGdfc2VxdWVuY2Ugc2Vx ZGF0YSkKICAqIERlcGFyc2UgdGhlIGRlZmluaXRpb24gb2YgY29sdW1uIGlkZW50aXR5IHRvIEpz b25iLgogICoKICAqIFZlcmJvc2Ugc3ludGF4Ci0gKiAle2lkZW50aXR5X3R5cGV9cyAoICV7c2Vx X2RlZmluaXRpb246IH1zICkKLSAqIHdoZXJlIGlkZW50aXR5X3R5cGUgaXM6ICJHRU5FUkFURUQg JXtvcHRpb259cyBBUyBJREVOVElUWSIKKyAqIFNFVCBHRU5FUkFURUQgJXtvcHRpb259cyAle3Nl cV9kZWZpbml0aW9uOiB9cworICogT1IKKyAqIEdFTkVSQVRFRCAle29wdGlvbn1zIEFTIElERU5U SVRZICggJXtzZXFfZGVmaW5pdGlvbjogfXMgKQogICovCiBzdGF0aWMgdm9pZAogZGVwYXJzZV9D b2x1bW5JZGVudGl0eShKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBjaGFyICpwYXJlbnRLZXksCi0J CQkJCSAgIE9pZCBzZXFyZWxpZCwgY2hhciBpZGVudGl0eSkKKwkJCQkJICAgT2lkIHNlcXJlbGlk LCBjaGFyIGlkZW50aXR5LCBib29sIGFsdGVyX3RhYmxlKQogewogCUZvcm1fcGdfc2VxdWVuY2Ug c2VxZm9ybTsKIAlTZXF1ZW5jZV92YWx1ZXMgKnNlcXZhbHVlczsKKwljaGFyCSAgICppZGVudGZt dDsKIAlTdHJpbmdJbmZvRGF0YSBmbXRTdHI7CiAKIAlpbml0U3RyaW5nSW5mbygmZm10U3RyKTsK QEAgLTYzMSwxMCArNjc0LDExIEBAIGRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoSnNvbmJQYXJzZVN0 YXRlICpzdGF0ZSwgY2hhciAqcGFyZW50S2V5LAogCQlpbnNlcnRfanNvbmJfa2V5KHN0YXRlLCAi aWRlbnRpdHlfdHlwZSIpOwogCiAJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09C SkVDVCwgTlVMTCk7CisJCWlkZW50Zm10ID0gYWx0ZXJfdGFibGUgPyAiU0VUIEdFTkVSQVRFRCAl e29wdGlvbn1zIiA6CisJCQkiR0VORVJBVEVEICV7b3B0aW9ufXMgQVMgSURFTlRJVFkiOwogCiAJ CW5ld19qc29uYl9WQShzdGF0ZSwgMiwKLQkJCQkJICJmbXQiLCBqYnZTdHJpbmcsCi0JCQkJCSAi R0VORVJBVEVEICV7b3B0aW9ufXMgQVMgSURFTlRJVFkiLAorCQkJCQkgImZtdCIsIGpidlN0cmlu ZywgaWRlbnRmbXQsCiAJCQkJCSAib3B0aW9uIiwgamJ2U3RyaW5nLAogCQkJCQkgKGlkZW50aXR5 ID09IEFUVFJJQlVURV9JREVOVElUWV9BTFdBWVMgPwogCQkJCQkgICJBTFdBWVMiIDogIkJZIERF RkFVTFQiKSk7CkBAIC02NDQsNyArNjg4LDggQEAgZGVwYXJzZV9Db2x1bW5JZGVudGl0eShKc29u YlBhcnNlU3RhdGUgKnN0YXRlLCBjaGFyICpwYXJlbnRLZXksCiAJLyogc2VxX2RlZmluaXRpb24g YXJyYXkgb2JqZWN0IGNyZWF0aW9uICovCiAJaW5zZXJ0X2pzb25iX2tleShzdGF0ZSwgInNlcV9k ZWZpbml0aW9uIik7CiAKLQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIsICIgKCAle3Nl cV9kZWZpbml0aW9uOiB9cyApIik7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3RyLCBh bHRlcl90YWJsZSA/ICIgJXtzZXFfZGVmaW5pdGlvbjogfXMiIDoKKwkJCQkJCSAgICIgKCAle3Nl cV9kZWZpbml0aW9uOiB9cyApIik7CiAKIAlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJ Tl9BUlJBWSwgTlVMTCk7CiAKQEAgLTY1MiwxMiArNjk3LDEyIEBAIGRlcGFyc2VfQ29sdW1uSWRl bnRpdHkoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgY2hhciAqcGFyZW50S2V5LAogCXNlcWZvcm0g PSBzZXF2YWx1ZXMtPnNlcWZvcm07CiAKIAkvKiBEZWZpbml0aW9uIGVsZW1lbnRzICovCi0JZGVw YXJzZV9TZXFfQ2FjaGUoc3RhdGUsIHNlcWZvcm0pOwotCWRlcGFyc2VfU2VxX0N5Y2xlKHN0YXRl LCBzZXFmb3JtKTsKLQlkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShzdGF0ZSwgc2VxZm9ybSk7Ci0J ZGVwYXJzZV9TZXFfTWludmFsdWUoc3RhdGUsIHNlcWZvcm0pOwotCWRlcGFyc2VfU2VxX01heHZh bHVlKHN0YXRlLCBzZXFmb3JtKTsKLQlkZXBhcnNlX1NlcV9TdGFydHdpdGgoc3RhdGUsIHNlcWZv cm0pOworCWRlcGFyc2VfU2VxX0NhY2hlKHN0YXRlLCBzZXFmb3JtLCBhbHRlcl90YWJsZSk7CisJ ZGVwYXJzZV9TZXFfQ3ljbGUoc3RhdGUsIHNlcWZvcm0sIGFsdGVyX3RhYmxlKTsKKwlkZXBhcnNl X1NlcV9JbmNyZW1lbnRCeShzdGF0ZSwgc2VxZm9ybSwgYWx0ZXJfdGFibGUpOworCWRlcGFyc2Vf U2VxX01pbnZhbHVlKHN0YXRlLCBzZXFmb3JtLCBhbHRlcl90YWJsZSk7CisJZGVwYXJzZV9TZXFf TWF4dmFsdWUoc3RhdGUsIHNlcWZvcm0sIGFsdGVyX3RhYmxlKTsKKwlkZXBhcnNlX1NlcV9TdGFy dHdpdGgoc3RhdGUsIHNlcWZvcm0sIGFsdGVyX3RhYmxlKTsKIAlkZXBhcnNlX1NlcV9SZXN0YXJ0 KHN0YXRlLCBzZXF2YWx1ZXMtPmxhc3RfdmFsdWUpOwogCS8qIFdlIHB1cnBvc2VmdWxseSBkbyBu b3QgZW1pdCBPV05FRCBCWSBoZXJlICovCiAKQEAgLTY4NSw3ICs3MzAsOCBAQCBkZXBhcnNlX0Nv bHVtbklkZW50aXR5KEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIGNoYXIgKnBhcmVudEtleSwKICAq Lwogc3RhdGljIHZvaWQKIGRlcGFyc2VfQ29sdW1uRGVmKEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUs IFJlbGF0aW9uIHJlbGF0aW9uLAotCQkJCSAgTGlzdCAqZHBjb250ZXh0LCBib29sIGNvbXBvc2l0 ZSwgQ29sdW1uRGVmICpjb2xkZWYpCisJCQkJICBMaXN0ICpkcGNvbnRleHQsIGJvb2wgY29tcG9z aXRlLCBDb2x1bW5EZWYgKmNvbGRlZiwKKwkJCQkgIGJvb2wgaXNfYWx0ZXIpCiB7CiAJT2lkCQkJ cmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKIAlIZWFwVHVwbGUJYXR0clR1cDsK QEAgLTc5MCw2ICs4MzYsOSBAQCBkZXBhcnNlX0NvbHVtbkRlZihKc29uYlBhcnNlU3RhdGUgKnN0 YXRlLCBSZWxhdGlvbiByZWxhdGlvbiwKIAkJCX0KIAkJfQogCisJCWlmIChpc19hbHRlciAmJiBj b2xkZWYtPmlzX25vdF9udWxsKQorCQkJc2F3X25vdG51bGwgPSB0cnVlOworCiAJCS8qIE5PVCBO VUxMICovCiAJCWlmIChzYXdfbm90bnVsbCkKIAkJewpAQCAtODM2LDcgKzg4NSw3IEBAIGRlcGFy c2VfQ29sdW1uRGVmKEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIFJlbGF0aW9uIHJlbGF0aW9uLAog CQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmZtdFN0ciwgIiAle2lkZW50aXR5X2NvbHVtbn1z Iik7CiAJCQkJZGVwYXJzZV9Db2x1bW5JZGVudGl0eShzdGF0ZSwgImlkZW50aXR5X2NvbHVtbiIs CiAJCQkJCQkJCQkgICBzZXFyZWxpZCwKLQkJCQkJCQkJCSAgIGNvbGRlZi0+aWRlbnRpdHkpOwor CQkJCQkJCQkJICAgY29sZGVmLT5pZGVudGl0eSwgaXNfYWx0ZXIpOwogCQkJfQogCQl9CiAKQEAg LTEwMzYsNyArMTA4NSw3IEBAIGRlcGFyc2VfVGFibGVFbGVtcyhKc29uYlBhcnNlU3RhdGUgKnN0 YXRlLCBSZWxhdGlvbiByZWxhdGlvbiwKIAkJCQkJCQkJCQkJCShDb2x1bW5EZWYgKikgZWx0KTsK IAkJCQkJZWxzZQogCQkJCQkJZGVwYXJzZV9Db2x1bW5EZWYoc3RhdGUsIHJlbGF0aW9uLCBkcGNv bnRleHQsCi0JCQkJCQkJCQkJICBjb21wb3NpdGUsIChDb2x1bW5EZWYgKikgZWx0KTsKKwkJCQkJ CQkJCQkgIGNvbXBvc2l0ZSwgKENvbHVtbkRlZiAqKSBlbHQsIGZhbHNlKTsKIAkJCQl9CiAJCQkJ YnJlYWs7CiAJCQljYXNlIFRfQ29uc3RyYWludDoKQEAgLTEyNzUsNiArMTMyNCw5MyBAQCBkZXBh cnNlX0RlZkVsZW0oSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgRGVmRWxlbSAqZWxlbSwgYm9vbCBp c19yZXNldCkKIAlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsK IH0KIAorLyoKKyAqIERlcGFyc2UgU0VUL1JFU0VUIGFzIHVzZWQgYnkKKyAqIEFMVEVSIFRBQkxF IC4uLiBBTFRFUiBDT0xVTU4gLi4uIFNFVC9SRVNFVCAoLi4uKQorICoKKyAqIFZlcmJvc2Ugc3lu dGF4CisgKiBBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBSRVNFVHxTRVQgKCV7b3B0aW9uczosIH1z KQorICovCitzdGF0aWMgdm9pZAorZGVwYXJzZV9Db2x1bW5TZXRPcHRpb25zKEpzb25iUGFyc2VT dGF0ZSAqc3RhdGUsIEFsdGVyVGFibGVDbWQgKnN1YmNtZCkKK3sKKwlMaXN0Q2VsbCAgICpjZWxs OworCWJvb2wJCWlzX3Jlc2V0ID0gc3ViY21kLT5zdWJ0eXBlID09IEFUX1Jlc2V0T3B0aW9uczsK Kwlib29sCQllbGVtX2ZvdW5kIFBHX1VTRURfRk9SX0FTU0VSVFNfT05MWSA9IGZhbHNlOworCisJ cHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKworCW5ld19q c29uYl9WQShzdGF0ZSwgMywKKwkJCQkgImZtdCIsIGpidlN0cmluZywgIkFMVEVSIENPTFVNTiAl e2NvbHVtbn1JIgorCQkJCSAiICV7b3B0aW9ufXMgKCV7b3B0aW9uczosIH1zKSIsCisJCQkJICJj b2x1bW4iLCBqYnZTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkgIm9wdGlvbiIsIGpidlN0cmlu ZywgaXNfcmVzZXQgPyAiUkVTRVQiIDogIlNFVCIpOworCisJaW5zZXJ0X2pzb25iX2tleShzdGF0 ZSwgIm9wdGlvbnMiKTsKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9BUlJBWSwg TlVMTCk7CisKKwlmb3JlYWNoKGNlbGwsIChMaXN0ICopIHN1YmNtZC0+ZGVmKQorCXsKKwkJRGVm RWxlbSAgICAqZWxlbTsKKworCQllbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlk ZXBhcnNlX0RlZkVsZW0oc3RhdGUsIGVsZW0sIGlzX3Jlc2V0KTsKKworI2lmZGVmIFVTRV9BU1NF UlRfQ0hFQ0tJTkcKKwkJZWxlbV9mb3VuZCA9IHRydWU7CisjZW5kaWYKKwl9CisKKwlwdXNoSnNv bmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfQVJSQVksIE5VTEwpOworCisJQXNzZXJ0KGVsZW1fZm91 bmQpOworCisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7Cit9 CisKKy8qCisgKiBEZXBhcnNlIFNFVC9SRVNFVCBhcyB1c2VkIGJ5IEFMVEVSIFRBQkxFIC4uLiBT RVQvUkVTRVQgKC4uLikKKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogUkVTRVR8U0VUICgle29w dGlvbnM6LCB9cykKKyAqLworc3RhdGljIHZvaWQKK2RlcGFyc2VfUmVsU2V0T3B0aW9ucyhKc29u YlBhcnNlU3RhdGUgKnN0YXRlLCBBbHRlclRhYmxlQ21kICpzdWJjbWQpCit7CisJTGlzdENlbGwg ICAqY2VsbDsKKwlib29sCQlpc19yZXNldCA9IHN1YmNtZC0+c3VidHlwZSA9PSBBVF9SZXNldFJl bE9wdGlvbnM7CisJYm9vbAkJZWxlbV9mb3VuZCBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFkgPSBm YWxzZTsKKworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7 CisKKwluZXdfanNvbmJfVkEoc3RhdGUsIDIsCisJCQkJICJmbXQiLCBqYnZTdHJpbmcsICIle3Nl dF9yZXNldH1zICgle29wdGlvbnM6LCB9cykiLAorCQkJCSAic2V0X3Jlc2V0IiwgamJ2U3RyaW5n LCBpc19yZXNldCA/ICJSRVNFVCIgOiAiU0VUIik7CisKKwkvKiBpbnNlcnQgb3B0aW9ucyBhcnJh eSAqLworCWluc2VydF9qc29uYl9rZXkoc3RhdGUsICJvcHRpb25zIik7CisKKwlwdXNoSnNvbmJW YWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9BUlJBWSwgTlVMTCk7CisKKwlmb3JlYWNoKGNlbGwsIChM aXN0ICopIHN1YmNtZC0+ZGVmKQorCXsKKwkJRGVmRWxlbSAgICAqZWxlbTsKKworCQllbGVtID0g KERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlkZXBhcnNlX0RlZkVsZW0oc3RhdGUsIGVsZW0s IGlzX3Jlc2V0KTsKKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwkJZWxlbV9mb3VuZCA9 IHRydWU7CisjZW5kaWYKKwl9CisKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfQVJS QVksIE5VTEwpOworCisJQXNzZXJ0KGVsZW1fZm91bmQpOworCisJcHVzaEpzb25iVmFsdWUoJnN0 YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7Cit9CisKIC8qCiAgKiBEZXBhcnNlIFdJVEggY2xh dXNlLCBhcyB1c2VkIGJ5IENyZWF0ZSBUYWJsZS4KICAqCkBAIC0xNTc1LDYgKzE3MTEsMTI4MSBA QCBkZXBhcnNlX2Ryb3BfdGFibGUoY29uc3QgY2hhciAqb2JqaWRlbnRpdHksIE5vZGUgKnBhcnNl dHJlZSkKIAlyZXR1cm4gSnNvbmJUb0NTdHJpbmcoJnN0ciwgJmpzb25iLT5yb290LCBKU09OQl9F U1RJTUFURURfTEVOKTsKIH0KIAorLyoKKyAqIERlcGFyc2UgYWxsIHRoZSBjb2xsZWN0ZWQgc3Vi Y29tbWFuZHMgYW5kIHJldHVybiBqc29uYiBzdHJpbmcgcmVwcmVzZW50aW5nCisgKiB0aGUgYWx0 ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgVEFCTEUgJXtvbmx5 fXMgJXtpZGVudGl0eX1EICV7c3ViY21kczosIH1zCisgKi8KK3N0YXRpYyBKc29uYiAqCitkZXBh cnNlX0FsdGVyVGFibGVTdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlMaXN0CSAgICpk cGNvbnRleHQ7CisJUmVsYXRpb24JcmVsOworCUxpc3RDZWxsICAgKmNlbGw7CisJT2lkCQkJcmVs SWQgPSBjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZDsKKwlBbHRlclRhYmxlU3RtdCAqc3RtdCA9 IE5VTEw7CisJU3RyaW5nSW5mb0RhdGEgZm10U3RyOworCUpzb25iUGFyc2VTdGF0ZSAqc3RhdGUg PSBOVUxMOworCWJvb2wJCXN1YkNtZEFycmF5ID0gZmFsc2U7CisJSnNvbmJWYWx1ZSAqdmFsdWU7 CisKKwlBc3NlcnQoY21kLT50eXBlID09IFNDVF9BbHRlclRhYmxlKTsKKwlzdG10ID0gKEFsdGVy VGFibGVTdG10ICopIGNtZC0+cGFyc2V0cmVlOworCisJQXNzZXJ0KElzQShzdG10LCBBbHRlclRh YmxlU3RtdCkgfHwgSXNBKHN0bXQsIEFsdGVyVGFibGVNb3ZlQWxsU3RtdCkpOworCisJaW5pdFN0 cmluZ0luZm8oJmZtdFN0cik7CisKKwkvKgorCSAqIEFMVEVSIFRBQkxFIHN1YmNvbW1hbmRzIGdl bmVyYXRlZCBmb3IgVGFibGVMaWtlQ2xhdXNlIGlzIHByb2Nlc3NlZCBpbgorCSAqIHRoZSB0b3Ag bGV2ZWwgQ1JFQVRFIFRBQkxFIGNvbW1hbmQ7IHJldHVybiBlbXB0eSBoZXJlLgorCSAqLworCWlm IChJc0Eoc3RtdCwgQWx0ZXJUYWJsZVN0bXQpICYmIHN0bXQtPnRhYmxlX2xpa2UpCisJCXJldHVy biBOVUxMOworCisJcmVsID0gcmVsYXRpb25fb3BlbihyZWxJZCwgQWNjZXNzU2hhcmVMb2NrKTsK KworCWlmIChyZWwtPnJkX3JlbC0+cmVsa2luZCAhPSBSRUxLSU5EX1JFTEFUSU9OICYmCisJCXJl bC0+cmRfcmVsLT5yZWxraW5kICE9IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJeworCQkv KiB1bnN1cHBvcnRlZCByZWxraW5kICovCisJCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVM b2NrKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0 X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLCByZWxJZCk7CisKKwlwdXNoSnNvbmJW YWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCisJLyogU3RhcnQgY29uc3Ry dWN0aW5nIGZtdCBzdHJpbmcgKi8KKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIsICJB TFRFUiBUQUJMRSIpOworCisJaWYgKCFzdG10LT5yZWxhdGlvbi0+aW5oKQorCXsKKwkJYXBwZW5k U3RyaW5nSW5mb1N0cmluZygmZm10U3RyLCAiICV7b25seX1zIik7CisJCW5ld19qc29uYl9WQShz dGF0ZSwgMSwgIm9ubHkiLCBqYnZTdHJpbmcsICJPTkxZIik7CisJfQorCisJYXBwZW5kU3RyaW5n SW5mb1N0cmluZygmZm10U3RyLCAiICV7aWRlbnRpdHl9RCIpOworCWluc2VydF9pZGVudGl0eV9v YmplY3Qoc3RhdGUsIHJlbC0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkgICBSZWxhdGlv bkdldFJlbGF0aW9uTmFtZShyZWwpKTsKKworCWZvcmVhY2goY2VsbCwgY21kLT5kLmFsdGVyVGFi bGUuc3ViY21kcykKKwl7CisJCUNvbGxlY3RlZEFUU3ViY21kICpzdWIgPSAoQ29sbGVjdGVkQVRT dWJjbWQgKikgbGZpcnN0KGNlbGwpOworCQlBbHRlclRhYmxlQ21kICpzdWJjbWQgPSAoQWx0ZXJU YWJsZUNtZCAqKSBzdWItPnBhcnNldHJlZTsKKworCQlBc3NlcnQoSXNBKHN1YmNtZCwgQWx0ZXJU YWJsZUNtZCkpOworCisJCS8qCisJCSAqIFNraXAgZGVwYXJzZSBvZiB0aGUgc3ViY29tbWFuZCBp ZiB0aGUgb2JqZWN0SWQgZG9lc24ndCBtYXRjaCB0aGUKKwkJICogdGFyZ2V0IHJlbGF0aW9uIElE LiBJdCBjYW4gaGFwcGVuIGZvciBpbmhlcml0ZWQgdGFibGVzIHdoZW4KKwkJICogc3ViY29tbWFu ZHMgZm9yIGluaGVyaXRlZCB0YWJsZXMgYW5kIHRoZSBwYXJlbnQgdGFibGUgYXJlIGJvdGgKKwkJ ICogY29sbGVjdGVkIGluIHRoZSBBTFRFUiBUQUJMRSBjb21tYW5kIGZvciB0aGUgcGFyZW50IHRh YmxlLgorCQkgKi8KKwkJaWYgKHN1YmNtZC0+c3VidHlwZSAhPSBBVF9BdHRhY2hQYXJ0aXRpb24g JiYKKwkJCXN1Yi0+YWRkcmVzcy5vYmplY3RJZCAhPSByZWxJZCAmJgorCQkJaGFzX3N1cGVyY2xh c3Moc3ViLT5hZGRyZXNzLm9iamVjdElkKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIE1hcmsgdGhl IGJlZ2luIG9mIHN1YmNtZHMgYXJyYXkgKi8KKwkJaWYgKCFzdWJDbWRBcnJheSkKKwkJeworCQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3RyLCAiICV7c3ViY21kczosIH1zIik7CisJCQlp bnNlcnRfanNvbmJfa2V5KHN0YXRlLCAic3ViY21kcyIpOworCQkJcHVzaEpzb25iVmFsdWUoJnN0 YXRlLCBXSkJfQkVHSU5fQVJSQVksIE5VTEwpOworCQkJc3ViQ21kQXJyYXkgPSB0cnVlOworCQl9 CisKKwkJc3dpdGNoIChzdWJjbWQtPnN1YnR5cGUpCisJCXsKKwkJCWNhc2UgQVRfQWRkQ29sdW1u OgorCQkJCXsKKwkJCQkJU3RyaW5nSW5mb0RhdGEgZm10U3ViOworCisJCQkJCWluaXRTdHJpbmdJ bmZvKCZmbXRTdWIpOworCisJCQkJCS8qIFhYWCBuZWVkIHRvIHNldCB0aGUgInJlY3Vyc2UiIGJp dCBzb21ld2hlcmU/ICovCisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIENvbHVtbkRlZikp OworCisJCQkJCS8qCisJCQkJCSAqIFN5bnRheDogQUREIENPTFVNTiAle2lmX25vdF9leGlzdHN9 cyAle2RlZmluaXRpb259cyIKKwkJCQkJICogd2hlcmUgZGVmaW5pdGlvbjogIiV7bmFtZX1JICV7 Y29sdHlwZX1UIFNUT1JBR0UKKwkJCQkJICogJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1z ICV7Y29sbGF0aW9ufXMKKwkJCQkJICogJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7aWRlbnRp dHlfY29sdW1ufXMKKwkJCQkJICogJXtnZW5lcmF0ZWRfY29sdW1ufXMiCisJCQkJCSAqLworCQkJ CQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCisJCQkJ CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmZtdFN1YiwgIkFERCBDT0xVTU4iKTsKKwkJCQkJbmV3 X2pzb25iX1ZBKHN0YXRlLCAxLCAidHlwZSIsIGpidlN0cmluZywgImFkZCBjb2x1bW4iKTsKKwor CQkJCQlpZiAoc3ViY21kLT5taXNzaW5nX29rKQorCQkJCQl7CisJCQkJCQlhcHBlbmRTdHJpbmdJ bmZvU3RyaW5nKCZmbXRTdWIsICIgJXtpZl9ub3RfZXhpc3RzfXMiKTsKKwkJCQkJCW5ld19qc29u Yl9WQShzdGF0ZSwgMSwKKwkJCQkJCQkJCSAiaWZfbm90X2V4aXN0cyIsIGpidlN0cmluZywgIklG IE5PVCBFWElTVFMiKTsKKwkJCQkJfQorCisJCQkJCS8qIFB1c2ggZGVmaW5pdGlvbiBrZXktdmFs dWUgcGFpciAqLworCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdWIsICIgJXtkZWZp bml0aW9ufXMiKTsKKwkJCQkJaW5zZXJ0X2pzb25iX2tleShzdGF0ZSwgImRlZmluaXRpb24iKTsK KworCQkJCQlkZXBhcnNlX0NvbHVtbkRlZihzdGF0ZSwgcmVsLCBkcGNvbnRleHQsCisJCQkJCQkJ CQkgIGZhbHNlLCAoQ29sdW1uRGVmICopIHN1YmNtZC0+ZGVmLAorCQkJCQkJCQkJICB0cnVlKTsK KworCQkJCQkvKiBXZSBoYXZlIGZ1bGwgZm10IGJ5IG5vdywgc28gYWRkIGpzb25iIGVsZW1lbnQg Zm9yIHRoYXQgKi8KKwkJCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLCAiZm10IiwgamJ2U3RyaW5n LCBmbXRTdWIuZGF0YSk7CisJCQkJCXBmcmVlKGZtdFN1Yi5kYXRhKTsKKworCQkJCQlwdXNoSnNv bmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQkJYnJlYWs7CisJCQkJ fQorCisJCQljYXNlIEFUX0FkZEluZGV4Q29uc3RyYWludDoKKwkJCQl7CisJCQkJCUluZGV4U3Rt dCAgKmlzdG10OworCQkJCQlSZWxhdGlvbglpZHg7CisJCQkJCU9pZAkJCWNvbk9pZCA9IHN1Yi0+ YWRkcmVzcy5vYmplY3RJZDsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJbmRleFN0 bXQpKTsKKwkJCQkJaXN0bXQgPSAoSW5kZXhTdG10ICopIHN1YmNtZC0+ZGVmOworCisJCQkJCUFz c2VydChpc3RtdC0+aXNjb25zdHJhaW50ICYmIGlzdG10LT51bmlxdWUpOworCisJCQkJCWlkeCA9 IHJlbGF0aW9uX29wZW4oaXN0bXQtPmluZGV4T2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCQkJ CS8qCisJCQkJCSAqIFN5bnRheDogQUREIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtjb25zdHJhaW50 X3R5cGV9cworCQkJCQkgKiBVU0lORyBJTkRFWCAlaW5kZXhfbmFtZX1JICV7ZGVmZXJyYWJsZX1z CisJCQkJCSAqICV7aW5pdF9kZWZlcnJlZH1zCisJCQkJCSAqLworCQkJCQlwdXNoSnNvbmJWYWx1 ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCisJCQkJCW5ld19qc29uYl9WQShz dGF0ZSwgNywKKwkJCQkJCQkJICJmbXQiLCBqYnZTdHJpbmcsCisJCQkJCQkJCSAiQUREIENPTlNU UkFJTlQgJXtuYW1lfUkgJXtjb25zdHJhaW50X3R5cGV9cyIKKwkJCQkJCQkJICIgVVNJTkcgSU5E RVggJXtpbmRleF9uYW1lfUkgJXtkZWZlcnJhYmxlfXMiCisJCQkJCQkJCSAiICV7aW5pdF9kZWZl cnJlZH1zIiwKKwkJCQkJCQkJICJ0eXBlIiwgamJ2U3RyaW5nLCAiYWRkIGNvbnN0cmFpbnQgdXNp bmcgaW5kZXgiLAorCQkJCQkJCQkgIm5hbWUiLCBqYnZTdHJpbmcsIGdldF9jb25zdHJhaW50X25h bWUoY29uT2lkKSwKKwkJCQkJCQkJICJjb25zdHJhaW50X3R5cGUiLCBqYnZTdHJpbmcsCisJCQkJ CQkJCSBpc3RtdC0+cHJpbWFyeSA/ICJQUklNQVJZIEtFWSIgOiAiVU5JUVVFIiwKKwkJCQkJCQkJ ICJpbmRleF9uYW1lIiwgamJ2U3RyaW5nLAorCQkJCQkJCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5h bWUoaWR4KSwKKwkJCQkJCQkJICJkZWZlcnJhYmxlIiwgamJ2U3RyaW5nLAorCQkJCQkJCQkgaXN0 bXQtPmRlZmVycmFibGUgPyAiREVGRVJSQUJMRSIgOgorCQkJCQkJCQkgIk5PVCBERUZFUlJBQkxF IiwKKwkJCQkJCQkJICJpbml0X2RlZmVycmVkIiwgamJ2U3RyaW5nLAorCQkJCQkJCQkgaXN0bXQt PmluaXRkZWZlcnJlZCA/ICJJTklUSUFMTFkgREVGRVJSRUQiIDoKKwkJCQkJCQkJICJJTklUSUFM TFkgSU1NRURJQVRFIik7CisKKwkJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09C SkVDVCwgTlVMTCk7CisJCQkJCXJlbGF0aW9uX2Nsb3NlKGlkeCwgQWNjZXNzU2hhcmVMb2NrKTsK KwkJCQkJYnJlYWs7CisJCQkJfQorCQkJY2FzZSBBVF9SZUFkZEluZGV4OgorCQkJY2FzZSBBVF9S ZUFkZENvbnN0cmFpbnQ6CisJCQljYXNlIEFUX1JlQWRkRG9tYWluQ29uc3RyYWludDoKKwkJCWNh c2UgQVRfUmVBZGRDb21tZW50OgorCQkJY2FzZSBBVF9SZXBsYWNlUmVsT3B0aW9uczoKKwkJCWNh c2UgQVRfQ2hlY2tOb3ROdWxsOgorCQkJY2FzZSBBVF9SZUFkZFN0YXRpc3RpY3M6CisJCQkJLyog U3VidHlwZXMgdXNlZCBmb3IgaW50ZXJuYWwgb3BlcmF0aW9uczsgbm90aGluZyB0byBkbyBoZXJl ICovCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQ29sdW1uRGVmYXVsdDoKKwkJCQlpZiAoc3Vi Y21kLT5kZWYgPT0gTlVMTCkKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIFN5bnRheDogQUxURVIg Q09MVU1OICV7Y29sdW1ufUkgRFJPUCBERUZBVUxUCisJCQkJCSAqLworCQkJCQlwdXNoSnNvbmJW YWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCQkJCQluZXdfanNvbmJfVkEo c3RhdGUsIDMsCisJCQkJCQkJCSAiZm10IiwgamJ2U3RyaW5nLAorCQkJCQkJCQkgIkFMVEVSIENP TFVNTiAle2NvbHVtbn1JIERST1AgREVGQVVMVCIsCisJCQkJCQkJCSAidHlwZSIsIGpidlN0cmlu ZywgImRyb3AgZGVmYXVsdCIsCisJCQkJCQkJCSAiY29sdW1uIiwgamJ2U3RyaW5nLCBzdWJjbWQt Pm5hbWUpOworCQkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxM KTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJTGlzdAkgICAqZHBjb250ZXh0X3JlbDsK KwkJCQkJSGVhcFR1cGxlCWF0dHJ0dXA7CisJCQkJCUF0dHJOdW1iZXIJYXR0bm87CisKKwkJCQkJ ZHBjb250ZXh0X3JlbCA9IGRlcGFyc2VfY29udGV4dF9mb3IoCisJCQkJCQkJCQkJCQkJCVJlbGF0 aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksCisJCQkJCQkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsaWQo cmVsKSk7CisJCQkJCWF0dHJ0dXAgPSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUoUmVsYXRpb25HZXRS ZWxpZChyZWwpLAorCQkJCQkJCQkJCQkJCXN1YmNtZC0+bmFtZSk7CisJCQkJCWF0dG5vID0gKChG b3JtX3BnX2F0dHJpYnV0ZSkgR0VUU1RSVUNUKGF0dHJ0dXApKS0+YXR0bnVtOworCisJCQkJCS8q CisJCQkJCSAqIFN5bnRheDogQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIERFRkFVTFQKKwkJ CQkJICogJXtkZWZpbml0aW9ufXMKKwkJCQkJICovCisJCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0 ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisKKwkJCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCA0 LAorCQkJCQkJCQkgImZtdCIsIGpidlN0cmluZywKKwkJCQkJCQkJICJBTFRFUiBDT0xVTU4gJXtj b2x1bW59SSBTRVQgREVGQVVMVCIKKwkJCQkJCQkJICIgJXtkZWZpbml0aW9ufXMiLAorCQkJCQkJ CQkgInR5cGUiLCBqYnZTdHJpbmcsICJzZXQgZGVmYXVsdCIsCisJCQkJCQkJCSAiY29sdW1uIiwg amJ2U3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJCSAiZGVmaW5pdGlvbiIsIGpidlN0cmlu ZywKKwkJCQkJCQkJIHJlbGF0aW9uX2dldF9jb2x1bW5fZGVmYXVsdChyZWwsIGF0dG5vLAorCQkJ CQkJCQkJCQkJCQkJIGRwY29udGV4dF9yZWwpKTsKKworCQkJCQlwdXNoSnNvbmJWYWx1ZSgmc3Rh dGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQkJUmVsZWFzZVN5c0NhY2hlKGF0dHJ0dXAp OworCQkJCX0KKworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BOb3ROdWxsOgorCisJCQkJ LyoKKwkJCQkgKiBTeW50YXg6IEFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgTk9UIE5VTEwK KwkJCQkgKi8KKwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5V TEwpOworCQkJCW5ld19qc29uYl9WQShzdGF0ZSwgMywKKwkJCQkJCQkgImZtdCIsIGpidlN0cmlu ZywKKwkJCQkJCQkgIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgTk9UIE5VTEwiLAorCQkJ CQkJCSAidHlwZSIsIGpidlN0cmluZywgImRyb3Agbm90IG51bGwiLAorCQkJCQkJCSAiY29sdW1u IiwgamJ2U3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwg V0pCX0VORF9PQkpFQ1QsIE5VTEwpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0ZvcmNlUm93 U2VjdXJpdHk6CisKKwkJCQkvKgorCQkJCSAqIFN5bnRheDogRk9SQ0UgUk9XIExFVkVMIFNFQ1VS SVRZCisJCQkJICovCisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNU LCBOVUxMKTsKKwkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDEsICJmbXQiLCBqYnZTdHJpbmcsCisJ CQkJCQkJICJGT1JDRSBST1cgTEVWRUwgU0VDVVJJVFkiKTsKKwkJCQlwdXNoSnNvbmJWYWx1ZSgm c3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9O b0ZvcmNlUm93U2VjdXJpdHk6CisKKwkJCQkvKgorCQkJCSAqIFN5bnRheDogTk8gRk9SQ0UgUk9X IExFVkVMIFNFQ1VSSVRZCisJCQkJICovCisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJf QkVHSU5fT0JKRUNULCBOVUxMKTsKKwkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDEsICJmbXQiLCBq YnZTdHJpbmcsCisJCQkJCQkJICJOTyBGT1JDRSBST1cgTEVWRUwgU0VDVVJJVFkiKTsKKwkJCQlw dXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9TZXROb3ROdWxsOgorCisJCQkJLyoKKwkJCQkgKiBTeW50YXg6IEFMVEVS IENPTFVNTiAle2NvbHVtbn1JIFNFVCBOT1QgTlVMTAorCQkJCSAqLworCQkJCXB1c2hKc29uYlZh bHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJCQkJbmV3X2pzb25iX1ZBKHN0 YXRlLCAzLAorCQkJCQkJCSAiZm10IiwgamJ2U3RyaW5nLAorCQkJCQkJCSAiQUxURVIgQ09MVU1O ICV7Y29sdW1ufUkgU0VUIE5PVCBOVUxMIiwKKwkJCQkJCQkgInR5cGUiLCBqYnZTdHJpbmcsICJz ZXQgbm90IG51bGwiLAorCQkJCQkJCSAiY29sdW1uIiwgamJ2U3RyaW5nLCBzdWJjbWQtPm5hbWUp OworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworCQkJ CWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BFeHByZXNzaW9uOgorCQkJCXsKKwkJCQkJU3RyaW5n SW5mb0RhdGEgZm10U3ViOworCisJCQkJCWluaXRTdHJpbmdJbmZvKCZmbXRTdWIpOworCisJCQkJ CS8qCisJCQkJCSAqIFN5bnRheDogQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJPUCBFWFBSRVNT SU9OCisJCQkJCSAqICV7aWZfZXhpc3RzfXMKKwkJCQkJICovCisJCQkJCXB1c2hKc29uYlZhbHVl KCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJCQkJCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoJmZtdFN1YiwgIkFMVEVSIENPTFVNTiIKKwkJCQkJCQkJCQkgICAiICV7Y29sdW1ufUkg RFJPUCBFWFBSRVNTSU9OIik7CisJCQkJCW5ld19qc29uYl9WQShzdGF0ZSwgMiwKKwkJCQkJCQkJ ICJ0eXBlIiwgamJ2U3RyaW5nLCAiZHJvcCBleHByZXNzaW9uIiwKKwkJCQkJCQkJICJjb2x1bW4i LCBqYnZTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJaWYgKHN1YmNtZC0+bWlzc2luZ19v aykKKwkJCQkJeworCQkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3ViLCAiICV7aWZf ZXhpc3RzfXMiKTsKKwkJCQkJCW5ld19qc29uYl9WQShzdGF0ZSwgMSwKKwkJCQkJCQkJCSAiaWZf ZXhpc3RzIiwgamJ2U3RyaW5nLCAiSUYgRVhJU1RTIik7CisJCQkJCX0KKworCQkJCQkvKiBXZSBo YXZlIGZ1bGwgZm10IGJ5IG5vdywgc28gYWRkIGpzb25iIGVsZW1lbnQgZm9yIHRoYXQgKi8KKwkJ CQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLCAiZm10IiwgamJ2U3RyaW5nLCBmbXRTdWIuZGF0YSk7 CisJCQkJCXBmcmVlKGZtdFN1Yi5kYXRhKTsKKworCQkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUs IFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQljYXNlIEFU X1NldFN0YXRpc3RpY3M6CisJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgSW50ZWdlcikpOwor CisJCQkJLyoKKwkJCQkgKiBTeW50YXg6IEFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBTVEFU SVNUSUNTCisJCQkJICogJXtzdGF0aXN0aWNzfW4KKwkJCQkgKi8KKwkJCQlwdXNoSnNvbmJWYWx1 ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCQkJCW5ld19qc29uYl9WQShzdGF0 ZSwgNCwKKwkJCQkJCQkgImZtdCIsIGpidlN0cmluZywKKwkJCQkJCQkgIkFMVEVSIENPTFVNTiAl e2NvbHVtbn1JIFNFVCBTVEFUSVNUSUNTIgorCQkJCQkJCSAiICV7c3RhdGlzdGljc31uIiwKKwkJ CQkJCQkgInR5cGUiLCBqYnZTdHJpbmcsICJzZXQgc3RhdGlzdGljcyIsCisJCQkJCQkJICJjb2x1 bW4iLCBqYnZTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkgInN0YXRpc3RpY3MiLCBqYnZO dW1lcmljLAorCQkJCQkJCSBpbnRWYWwoKEludGVnZXIgKikgc3ViY21kLT5kZWYpKTsKKwkJCQlw dXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9TZXRPcHRpb25zOgorCQkJY2FzZSBBVF9SZXNldE9wdGlvbnM6CisKKwkJ CQkvKgorCQkJCSAqIFN5bnRheDogQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgUkVTRVR8U0VUICgl e29wdGlvbnM6LCB9cykKKwkJCQkgKi8KKwkJCQlkZXBhcnNlX0NvbHVtblNldE9wdGlvbnMoc3Rh dGUsIHN1YmNtZCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0U3RvcmFnZToKKwkJCQlB c3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBTdHJpbmcpKTsKKworCQkJCS8qCisJCQkJICogU3ludGF4 OiBBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgU1RPUkFHRSAle3N0b3JhZ2V9cworCQkJCSAq LworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJ CQkJbmV3X2pzb25iX1ZBKHN0YXRlLCA0LAorCQkJCQkJCSAiZm10IiwgamJ2U3RyaW5nLAorCQkJ CQkJCSAiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIFNUT1JBR0UiCisJCQkJCQkJICIgJXtz dG9yYWdlfXMiLAorCQkJCQkJCSAidHlwZSIsIGpidlN0cmluZywgInNldCBzdG9yYWdlIiwKKwkJ CQkJCQkgImNvbHVtbiIsIGpidlN0cmluZywgc3ViY21kLT5uYW1lLAorCQkJCQkJCSAic3RvcmFn ZSIsIGpidlN0cmluZywKKwkJCQkJCQkgc3RyVmFsKChTdHJpbmcgKikgc3ViY21kLT5kZWYpKTsK KwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQli cmVhazsKKworCQkJY2FzZSBBVF9TZXRDb21wcmVzc2lvbjoKKwkJCQlBc3NlcnQoSXNBKHN1YmNt ZC0+ZGVmLCBTdHJpbmcpKTsKKworCQkJCS8qCisJCQkJICogU3ludGF4OiBBTFRFUiBDT0xVTU4g JXtjb2x1bW59SSBTRVQgQ09NUFJFU1NJT04KKwkJCQkgKiAle2NvbXByZXNzaW9uX21ldGhvZH1z CisJCQkJICovCisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBO VUxMKTsKKwkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDQsCisJCQkJCQkJICJmbXQiLCBqYnZTdHJp bmcsCisJCQkJCQkJICJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgQ09NUFJFU1NJT04iCisJ CQkJCQkJICIgJXtjb21wcmVzc2lvbl9tZXRob2R9cyIsCisJCQkJCQkJICJ0eXBlIiwgamJ2U3Ry aW5nLCAic2V0IGNvbXByZXNzaW9uIiwKKwkJCQkJCQkgImNvbHVtbiIsIGpidlN0cmluZywgc3Vi Y21kLT5uYW1lLAorCQkJCQkJCSAiY29tcHJlc3Npb25fbWV0aG9kIiwgamJ2U3RyaW5nLAorCQkJ CQkJCSBzdHJWYWwoKFN0cmluZyAqKSBzdWJjbWQtPmRlZikpOworCQkJCXB1c2hKc29uYlZhbHVl KCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X0Ryb3BDb2x1bW46CisJCQkJeworCQkJCQlTdHJpbmdJbmZvRGF0YSBmbXRTdWI7CisKKwkJCQkJ aW5pdFN0cmluZ0luZm8oJmZtdFN1Yik7CisKKwkJCQkJLyoKKwkJCQkJICogU3ludGF4OiBEUk9Q IENPTFVNTiAle2lmX2V4aXN0c31zICV7Y29sdW1ufUkKKwkJCQkJICogJXtjYXNjYWRlfXMKKwkJ CQkJICovCisJCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVM TCk7CisKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3ViLCAiRFJPUCBDT0xVTU4i KTsKKwkJCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLCAidHlwZSIsIGpidlN0cmluZywgImRyb3Ag Y29sdW1uIik7CisKKwkJCQkJaWYgKHN1YmNtZC0+bWlzc2luZ19vaykKKwkJCQkJeworCQkJCQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3ViLCAiICV7aWZfZXhpc3RzfXMiKTsKKwkJCQkJ CW5ld19qc29uYl9WQShzdGF0ZSwgMSwKKwkJCQkJCQkJCSAiaWZfZXhpc3RzIiwgamJ2U3RyaW5n LCAiSUYgRVhJU1RTIik7CisJCQkJCX0KKworCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZm bXRTdWIsICIgJXtjb2x1bW59SSIpOworCQkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDEsICJjb2x1 bW4iLCBqYnZTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJaWYgKHN1YmNtZC0+YmVoYXZp b3IgPT0gRFJPUF9DQVNDQURFKQorCQkJCQl7CisJCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KCZmbXRTdWIsICIgJXtjYXNjYWRlfXMiKTsKKwkJCQkJCW5ld19qc29uYl9WQShzdGF0ZSwgMSwK KwkJCQkJCQkJCSAiY2FzY2FkZSIsIGpidlN0cmluZywgIkNBU0NBREUiKTsKKwkJCQkJfQorCisJ CQkJCS8qIFdlIGhhdmUgZnVsbCBmbXQgYnkgbm93LCBzbyBhZGQganNvbmIgZWxlbWVudCBmb3Ig dGhhdCAqLworCQkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDEsICJmbXQiLCBqYnZTdHJpbmcsIGZt dFN1Yi5kYXRhKTsKKwkJCQkJcGZyZWUoZm10U3ViLmRhdGEpOworCisJCQkJCXB1c2hKc29uYlZh bHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworCisJCQkJCWJyZWFrOworCQkJCX0K KwkJCWNhc2UgQVRfQWRkSW5kZXg6CisJCQkJeworCQkJCQlPaWQJCQlpZHhPaWQgPSBzdWItPmFk ZHJlc3Mub2JqZWN0SWQ7CisJCQkJCUluZGV4U3RtdCAgKmlzdG10IFBHX1VTRURfRk9SX0FTU0VS VFNfT05MWSA9CisJCQkJCQkoSW5kZXhTdG10ICopIHN1YmNtZC0+ZGVmOworCQkJCQlSZWxhdGlv bglpZHg7CisJCQkJCWNvbnN0IGNoYXIgKmlkeG5hbWU7CisJCQkJCU9pZAkJCWNvbnN0ck9pZDsK KworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJbmRleFN0bXQpKTsKKwkJCQkJQXNzZXJ0 KGlzdG10LT5pc2NvbnN0cmFpbnQpOworCisJCQkJCWlkeCA9IHJlbGF0aW9uX29wZW4oaWR4T2lk LCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCQlpZHhuYW1lID0gUmVsYXRpb25HZXRSZWxhdGlvbk5h bWUoaWR4KTsKKworCQkJCQljb25zdHJPaWQgPSBnZXRfcmVsYXRpb25fY29uc3RyYWludF9vaWQo CisJCQkJCQkJCQkJCQkJCQljbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCwKKwkJCQkJCQkJCQkJ CQkJCWlkeG5hbWUsIGZhbHNlKTsKKworCQkJCQkvKgorCQkJCQkgKiBTeW50YXg6IEFERCBDT05T VFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zCisJCQkJCSAqLworCQkJCQlwdXNoSnNvbmJW YWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCisJCQkJCW5ld19qc29uYl9W QShzdGF0ZSwgNCwKKwkJCQkJCQkJICJmbXQiLCBqYnZTdHJpbmcsCisJCQkJCQkJCSAiQUREIENP TlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLAorCQkJCQkJCQkgInR5cGUiLCBqYnZT dHJpbmcsICJhZGQgY29uc3RyYWludCIsCisJCQkJCQkJCSAibmFtZSIsIGpidlN0cmluZywgaWR4 bmFtZSwKKwkJCQkJCQkJICJkZWZpbml0aW9uIiwgamJ2U3RyaW5nLAorCQkJCQkJCQkgcGdfZ2V0 X2NvbnN0cmFpbnRkZWZfc3RyaW5nKGNvbnN0ck9pZCkpOworCisJCQkJCXB1c2hKc29uYlZhbHVl KCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworCisJCQkJCXJlbGF0aW9uX2Nsb3NlKGlk eCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX0FkZENv bnN0cmFpbnQ6CisJCQkJeworCQkJCQkvKiBYWFggbmVlZCB0byBzZXQgdGhlICJyZWN1cnNlIiBi aXQgc29tZXdoZXJlPyAqLworCQkJCQlPaWQJCQljb25zdHJPaWQgPSBzdWItPmFkZHJlc3Mub2Jq ZWN0SWQ7CisKKwkJCQkJLyogU2tpcCBhZGRpbmcgY29uc3RyYWludCBmb3IgaW5oZXJpdHMgdGFi bGUgc3ViIGNvbW1hbmQgKi8KKwkJCQkJaWYgKCFPaWRJc1ZhbGlkKGNvbnN0ck9pZCkpCisJCQkJ CQljb250aW51ZTsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBDb25zdHJhaW50KSk7 CisKKwkJCQkJLyoKKwkJCQkJICogU3ludGF4OiBBREQgQ09OU1RSQUlOVCAle25hbWV9SSAle2Rl ZmluaXRpb259cworCQkJCQkgKi8KKwkJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVH SU5fT0JKRUNULCBOVUxMKTsKKwkJCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCA0LAorCQkJCQkJCQkg ImZtdCIsIGpidlN0cmluZywKKwkJCQkJCQkJICJBREQgQ09OU1RSQUlOVCAle25hbWV9SSAle2Rl ZmluaXRpb259cyIsCisJCQkJCQkJCSAidHlwZSIsIGpidlN0cmluZywgImFkZCBjb25zdHJhaW50 IiwKKwkJCQkJCQkJICJuYW1lIiwgamJ2U3RyaW5nLCBnZXRfY29uc3RyYWludF9uYW1lKGNvbnN0 ck9pZCksCisJCQkJCQkJCSAiZGVmaW5pdGlvbiIsIGpidlN0cmluZywKKwkJCQkJCQkJIHBnX2dl dF9jb25zdHJhaW50ZGVmX3N0cmluZyhjb25zdHJPaWQpKTsKKwkJCQkJcHVzaEpzb25iVmFsdWUo JnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJ CQljYXNlIEFUX0FsdGVyQ29uc3RyYWludDoKKwkJCQl7CisJCQkJCU9pZAkJCWNvbk9pZCA9IHN1 Yi0+YWRkcmVzcy5vYmplY3RJZDsKKwkJCQkJQ29uc3RyYWludCAqYyA9IChDb25zdHJhaW50ICop IHN1YmNtZC0+ZGVmOworCisJCQkJCS8qIElmIG5vIGNvbnN0cmFpbnQgd2FzIGFsdGVyZWQsIHNp bGVudGx5IHNraXAgaXQgKi8KKwkJCQkJaWYgKCFPaWRJc1ZhbGlkKGNvbk9pZCkpCisJCQkJCQli cmVhazsKKworCQkJCQlBc3NlcnQoSXNBKGMsIENvbnN0cmFpbnQpKTsKKworCQkJCQkvKgorCQkJ CQkgKiBTeW50YXg6IEFMVEVSIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZlcnJhYmxlfXMKKwkJ CQkJICogJXtpbml0X2RlZmVycmVkfXMKKwkJCQkJICovCisJCQkJCXB1c2hKc29uYlZhbHVlKCZz dGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJCQkJCW5ld19qc29uYl9WQShzdGF0ZSwg NSwKKwkJCQkJCQkJICJmbXQiLCBqYnZTdHJpbmcsCisJCQkJCQkJCSAiQUxURVIgQ09OU1RSQUlO VCAle25hbWV9SSAle2RlZmVycmFibGV9cyIKKwkJCQkJCQkJICIgJXtpbml0X2RlZmVycmVkfXMi LAorCQkJCQkJCQkgInR5cGUiLCBqYnZTdHJpbmcsICJhbHRlciBjb25zdHJhaW50IiwKKwkJCQkJ CQkJICJuYW1lIiwgamJ2U3RyaW5nLCBnZXRfY29uc3RyYWludF9uYW1lKGNvbk9pZCksCisJCQkJ CQkJCSAiZGVmZXJyYWJsZSIsIGpidlN0cmluZywKKwkJCQkJCQkJIGMtPmRlZmVycmFibGUgPyAi REVGRVJSQUJMRSIgOiAiTk9UIERFRkVSUkFCTEUiLAorCQkJCQkJCQkgImluaXRfZGVmZXJyZWQi LCBqYnZTdHJpbmcsCisJCQkJCQkJCSBjLT5pbml0ZGVmZXJyZWQgPyAiSU5JVElBTExZIERFRkVS UkVEIiA6CisJCQkJCQkJCSAiSU5JVElBTExZIElNTUVESUFURSIpOworCQkJCQlwdXNoSnNvbmJW YWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQl9CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfVmFsaWRhdGVDb25zdHJhaW50OgorCisJCQkJLyoKKwkJCQkgKiBTeW50YXg6 IFZBTElEQVRFIENPTlNUUkFJTlQgJXtjb25zdHJhaW50fUkKKwkJCQkgKi8KKwkJCQlwdXNoSnNv bmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCQkJCW5ld19qc29uYl9W QShzdGF0ZSwgMywKKwkJCQkJCQkgImZtdCIsIGpidlN0cmluZywKKwkJCQkJCQkgIlZBTElEQVRF IENPTlNUUkFJTlQgJXtjb25zdHJhaW50fUkiLAorCQkJCQkJCSAidHlwZSIsIGpidlN0cmluZywg InZhbGlkYXRlIGNvbnN0cmFpbnQiLAorCQkJCQkJCSAiY29uc3RyYWludCIsIGpidlN0cmluZywg c3ViY21kLT5uYW1lKTsKKwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNU LCBOVUxMKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wQ29uc3RyYWludDoKKwkJCQl7 CisJCQkJCVN0cmluZ0luZm9EYXRhIGZtdFN1YjsKKworCQkJCQlpbml0U3RyaW5nSW5mbygmZm10 U3ViKTsKKworCQkJCQkvKgorCQkJCQkgKiBTeW50YXg6IERST1AgQ09OU1RSQUlOVCAle2lmX2V4 aXN0c31zICV7Y29uc3RyYWludH1JCisJCQkJCSAqICV7Y2FzY2FkZX1zCisJCQkJCSAqLworCQkJ CQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCQkJCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdWIsICJEUk9QIENPTlNUUkFJTlQiKTsKKwkJCQkJ bmV3X2pzb25iX1ZBKHN0YXRlLCAxLCAidHlwZSIsIGpidlN0cmluZywgImRyb3AgY29uc3RyYWlu dCIpOworCisJCQkJCWlmIChzdWJjbWQtPm1pc3Npbmdfb2spCisJCQkJCXsKKwkJCQkJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoJmZtdFN1YiwgIiAle2lmX2V4aXN0c31zIik7CisJCQkJCQluZXdf anNvbmJfVkEoc3RhdGUsIDEsCisJCQkJCQkJCQkgImlmX2V4aXN0cyIsIGpidlN0cmluZywgIklG IEVYSVNUUyIpOworCQkJCQl9CisKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3Vi LCAiICV7Y29uc3RyYWludH1JIik7CisJCQkJCW5ld19qc29uYl9WQShzdGF0ZSwgMSwKKwkJCQkJ CQkJICJjb25zdHJhaW50IiwgamJ2U3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJCQkJCWlmIChz dWJjbWQtPmJlaGF2aW9yID09IERST1BfQ0FTQ0FERSkKKwkJCQkJeworCQkJCQkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmZm10U3ViLCAiICV7Y2FzY2FkZX1zIik7CisJCQkJCQluZXdfanNvbmJf VkEoc3RhdGUsIDEsICJjYXNjYWRlIiwgamJ2U3RyaW5nLCAiQ0FTQ0FERSIpOworCQkJCQl9CisK KwkJCQkJLyogV2UgaGF2ZSBmdWxsIGZtdCBieSBub3csIHNvIGFkZCBqc29uYiBlbGVtZW50IGZv ciB0aGF0ICovCisJCQkJCW5ld19qc29uYl9WQShzdGF0ZSwgMSwgImZtdCIsIGpidlN0cmluZywg Zm10U3ViLmRhdGEpOworCQkJCQlwZnJlZShmbXRTdWIuZGF0YSk7CisKKwkJCQkJcHVzaEpzb25i VmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisJCQkJfQorCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX0FsdGVyQ29sdW1uVHlwZToKKwkJCQl7CisJCQkJCVR1cGxlRGVzYwl0dXBk ZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOworCQkJCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQ7 CisJCQkJCUNvbHVtbkRlZiAgKmRlZjsKKwkJCQkJU3RyaW5nSW5mb0RhdGEgZm10U3ViOworCisJ CQkJCWluaXRTdHJpbmdJbmZvKCZmbXRTdWIpOworCisJCQkJCWF0dCA9ICYodHVwZGVzYy0+YXR0 cnNbc3ViLT5hZGRyZXNzLm9iamVjdFN1YklkIC0gMV0pOworCQkJCQlkZWYgPSAoQ29sdW1uRGVm ICopIHN1YmNtZC0+ZGVmOworCQkJCQlBc3NlcnQoSXNBKGRlZiwgQ29sdW1uRGVmKSk7CisKKwkJ CQkJLyoKKwkJCQkJICogU3ludGF4OiBBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgREFUQSBU WVBFCisJCQkJCSAqICV7ZGF0YXR5cGV9VCAle2NvbGxhdGlvbn1zICV7dXNpbmd9cyB3aGVyZSB1 c2luZzogVVNJTkcKKwkJCQkJICogJXtleHByZXNzaW9ufXMKKwkJCQkJICovCisJCQkJCXB1c2hK c29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJCQkJCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoJmZtdFN1YiwgIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIgorCQkJCQkJ CQkJCSAgICIgU0VUIERBVEEgVFlQRSAle2RhdGF0eXBlfVQiKTsKKwkJCQkJbmV3X2pzb25iX1ZB KHN0YXRlLCAyLAorCQkJCQkJCQkgInR5cGUiLCBqYnZTdHJpbmcsICJhbHRlciBjb2x1bW4gdHlw ZSIsCisJCQkJCQkJCSAiY29sdW1uIiwgamJ2U3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJCQkJ CW5ld19qc29uYl9mb3JfdHlwZShzdGF0ZSwgImRhdGF0eXBlIiwKKwkJCQkJCQkJCSAgIGF0dC0+ YXR0dHlwaWQsIGF0dC0+YXR0dHlwbW9kKTsKKworCQkJCQkvKiBBZGQgYSBDT0xMQVRFIGNsYXVz ZSwgaWYgbmVlZGVkICovCisJCQkJCWlmIChPaWRJc1ZhbGlkKGF0dC0+YXR0Y29sbGF0aW9uKSkK KwkJCQkJeworCQkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3ViLCAiICV7Y29sbGF0 aW9ufXMiKTsKKwkJCQkJCWluc2VydF9jb2xsYXRlX29iamVjdChzdGF0ZSwgImNvbGxhdGlvbiIs CisJCQkJCQkJCQkJCSAgIkNPTExBVEUgJXtuYW1lfUQiLAorCQkJCQkJCQkJCQkgIENvbGxhdGlv blJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCSAgYXR0LT5hdHRjb2xsYXRpb24sICJuYW1lIik7CisJ CQkJCX0KKworCQkJCQkvKgorCQkJCQkgKiBJZiB0aGVyZSdzIGEgVVNJTkcgY2xhdXNlLCB0cmFu c2Zvcm1BbHRlclRhYmxlU3RtdCByYW4KKwkJCQkJICogaXQgdGhyb3VnaCB0cmFuc2Zvcm1FeHBy IGFuZCBzdG9yZWQgdGhlIHJlc3VsdGluZyBub2RlCisJCQkJCSAqIGluIGNvb2tlZF9kZWZhdWx0 LCB3aGljaCB3ZSBjYW4gdXNlIGhlcmUuCisJCQkJCSAqLworCQkJCQlpZiAoZGVmLT5yYXdfZGVm YXVsdCkKKwkJCQkJeworCQkJCQkJRGF0dW0JCWRlcGFyc2VkOworCQkJCQkJY2hhcgkgICAqZGVm ZXhwcjsKKwkJCQkJCUxpc3QJICAgKmV4cHJzID0gTklMOworCisJCQkJCQlleHBycyA9IGxhcHBl bmQoZXhwcnMsIGRlZi0+Y29va2VkX2RlZmF1bHQpOworCQkJCQkJZGVmZXhwciA9IG5vZGVUb1N0 cmluZyhkZWYtPmNvb2tlZF9kZWZhdWx0KTsKKwkJCQkJCWRlcGFyc2VkID0gRGlyZWN0RnVuY3Rp b25DYWxsMihwZ19nZXRfZXhwciwKKwkJCQkJCQkJCQkJCQkgICBDU3RyaW5nR2V0VGV4dERhdHVt KGRlZmV4cHIpLAorCQkJCQkJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsaWQocmVsKSk7CisJCQkJ CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdWIsICIgJXt1c2luZ31zIik7CisJCQkJCQlp bnNlcnRfanNvbmJfa2V5KHN0YXRlLCAidXNpbmciKTsKKwkJCQkJCXB1c2hKc29uYlZhbHVlKCZz dGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJCQkJCQluZXdfanNvbmJfVkEoc3RhdGUs IDIsCisJCQkJCQkJCQkgImZtdCIsIGpidlN0cmluZywgIlVTSU5HICV7ZXhwcmVzc2lvbn1zIiwK KwkJCQkJCQkJCSAiZXhwcmVzc2lvbiIsIGpidlN0cmluZywKKwkJCQkJCQkJCSBUZXh0RGF0dW1H ZXRDU3RyaW5nKGRlcGFyc2VkKSk7CisJCQkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9F TkRfT0JKRUNULCBOVUxMKTsKKwkJCQkJfQorCisJCQkJCS8qIFdlIGhhdmUgZnVsbCBmbXQgYnkg bm93LCBzbyBhZGQganNvbmIgZWxlbWVudCBmb3IgdGhhdCAqLworCQkJCQluZXdfanNvbmJfVkEo c3RhdGUsIDEsICJmbXQiLCBqYnZTdHJpbmcsIGZtdFN1Yi5kYXRhKTsKKworCQkJCQlwZnJlZShm bXRTdWIuZGF0YSk7CisJCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1Qs IE5VTEwpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9DaGFuZ2VPd25lcjoKKwor CQkJCS8qCisJCQkJICogU3ludGF4OiBPV05FUiBUTyAle293bmVyfUkKKwkJCQkgKi8KKwkJCQlw dXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCQkJCW5ld19q c29uYl9WQShzdGF0ZSwgMywKKwkJCQkJCQkgImZtdCIsIGpidlN0cmluZywgIk9XTkVSIFRPICV7 b3duZXJ9SSIsCisJCQkJCQkJICJ0eXBlIiwgamJ2U3RyaW5nLCAiY2hhbmdlIG93bmVyIiwKKwkJ CQkJCQkgIm93bmVyIiwgamJ2U3RyaW5nLAorCQkJCQkJCSBnZXRfcm9sZXNwZWNfbmFtZShzdWJj bWQtPm5ld293bmVyKSk7CisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVD VCwgTlVMTCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQ2x1c3Rlck9uOgorCisJCQkJLyoK KwkJCQkgKiBTeW50YXg6IENMVVNURVIgT04gJXtpbmRleH1JCisJCQkJICovCisJCQkJcHVzaEpz b25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKwkJCQluZXdfanNvbmJf VkEoc3RhdGUsIDMsCisJCQkJCQkJICJmbXQiLCBqYnZTdHJpbmcsICJDTFVTVEVSIE9OICV7aW5k ZXh9SSIsCisJCQkJCQkJICJ0eXBlIiwgamJ2U3RyaW5nLCAiY2x1c3RlciBvbiIsCisJCQkJCQkJ ICJpbmRleCIsIGpidlN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlwdXNoSnNvbmJWYWx1ZSgm c3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQlicmVhazsKKworCisJCQljYXNlIEFU X0Ryb3BDbHVzdGVyOgorCisJCQkJLyoKKwkJCQkgKiBTeW50YXg6IFNFVCBXSVRIT1VUIENMVVNU RVIKKwkJCQkgKi8KKwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1Qs IE5VTEwpOworCQkJCW5ld19qc29uYl9WQShzdGF0ZSwgMiwKKwkJCQkJCQkgImZtdCIsIGpidlN0 cmluZywgIlNFVCBXSVRIT1VUIENMVVNURVIiLAorCQkJCQkJCSAidHlwZSIsIGpidlN0cmluZywg InNldCB3aXRob3V0IGNsdXN0ZXIiKTsKKwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9F TkRfT0JKRUNULCBOVUxMKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRMb2dnZWQ6CisK KwkJCQkvKgorCQkJCSAqIFN5bnRheDogU0VUIExPR0dFRAorCQkJCSAqLworCQkJCXB1c2hKc29u YlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJCQkJbmV3X2pzb25iX1ZB KHN0YXRlLCAyLAorCQkJCQkJCSAiZm10IiwgamJ2U3RyaW5nLCAiU0VUIExPR0dFRCIsCisJCQkJ CQkJICJ0eXBlIiwgamJ2U3RyaW5nLCAic2V0IGxvZ2dlZCIpOworCQkJCXB1c2hKc29uYlZhbHVl KCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X1NldFVuTG9nZ2VkOgorCisJCQkJLyoKKwkJCQkgKiBTeW50YXg6IFNFVCBVTkxPR0dFRAorCQkJ CSAqLworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7 CisJCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAyLAorCQkJCQkJCSAiZm10IiwgamJ2U3RyaW5nLCAi U0VUIFVOTE9HR0VEIiwKKwkJCQkJCQkgInR5cGUiLCBqYnZTdHJpbmcsICJzZXQgdW5sb2dnZWQi KTsKKwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJ CQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wT2lkczoKKworCQkJCS8qCisJCQkJICogU3ludGF4 OiBTRVQgV0lUSE9VVCBPSURTCisJCQkJICovCisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBX SkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKwkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDIsCisJCQkJ CQkJICJmbXQiLCBqYnZTdHJpbmcsICJTRVQgV0lUSE9VVCBPSURTIiwKKwkJCQkJCQkgInR5cGUi LCBqYnZTdHJpbmcsICJzZXQgd2l0aG91dCBvaWRzIik7CisJCQkJcHVzaEpzb25iVmFsdWUoJnN0 YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0 QWNjZXNzTWV0aG9kOgorCisJCQkJLyoKKwkJCQkgKiBTeW50YXg6IFNFVCBBQ0NFU1MgTUVUSE9E ICV7YWNjZXNzX21ldGhvZH1JCisJCQkJICovCisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBX SkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKwkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDMsCisJCQkJ CQkJICJmbXQiLCBqYnZTdHJpbmcsCisJCQkJCQkJICJTRVQgQUNDRVNTIE1FVEhPRCAle2FjY2Vz c19tZXRob2R9SSIsCisJCQkJCQkJICJ0eXBlIiwgamJ2U3RyaW5nLCAic2V0IGFjY2VzcyBtZXRo b2QiLAorCQkJCQkJCSAiYWNjZXNzX21ldGhvZCIsIGpidlN0cmluZywgc3ViY21kLT5uYW1lKTsK KwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQli cmVhazsKKworCQkJY2FzZSBBVF9TZXRUYWJsZVNwYWNlOgorCisJCQkJLyoKKwkJCQkgKiBTeW50 YXg6IFNFVCBUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JCisJCQkJICovCisJCQkJcHVzaEpzb25i VmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKwkJCQluZXdfanNvbmJfVkEo c3RhdGUsIDMsCisJCQkJCQkJICJmbXQiLCBqYnZTdHJpbmcsICJTRVQgVEFCTEVTUEFDRSAle3Rh Ymxlc3BhY2V9SSIsCisJCQkJCQkJICJ0eXBlIiwgamJ2U3RyaW5nLCAic2V0IHRhYmxlc3BhY2Ui LAorCQkJCQkJCSAidGFibGVzcGFjZSIsIGpidlN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlw dXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9TZXRSZWxPcHRpb25zOgorCQkJY2FzZSBBVF9SZXNldFJlbE9wdGlvbnM6 CisKKwkJCQkvKgorCQkJCSAqIFN5bnRheDogU0VUfFJFU0VUICgle29wdGlvbnM6LCB9cykKKwkJ CQkgKi8KKwkJCQlkZXBhcnNlX1JlbFNldE9wdGlvbnMoc3RhdGUsIHN1YmNtZCk7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlVHJpZzoKKworCQkJCS8qCisJCQkJICogU3ludGF4OiBF TkFCTEUgVFJJR0dFUiAle3RyaWdnZXJ9SQorCQkJCSAqLworCQkJCXB1c2hKc29uYlZhbHVlKCZz dGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAz LAorCQkJCQkJCSAiZm10IiwgamJ2U3RyaW5nLCAiRU5BQkxFIFRSSUdHRVIgJXt0cmlnZ2VyfUki LAorCQkJCQkJCSAidHlwZSIsIGpidlN0cmluZywgImVuYWJsZSB0cmlnZ2VyIiwKKwkJCQkJCQkg InRyaWdnZXIiLCBqYnZTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJcHVzaEpzb25iVmFsdWUo JnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf RW5hYmxlQWx3YXlzVHJpZzoKKworCQkJCS8qCisJCQkJICogU3ludGF4OiBFTkFCTEUgQUxXQVlT IFRSSUdHRVIgJXt0cmlnZ2VyfUkKKwkJCQkgKi8KKwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUs IFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCQkJCW5ld19qc29uYl9WQShzdGF0ZSwgMywKKwkJ CQkJCQkgImZtdCIsIGpidlN0cmluZywKKwkJCQkJCQkgIkVOQUJMRSBBTFdBWVMgVFJJR0dFUiAl e3RyaWdnZXJ9SSIsCisJCQkJCQkJICJ0eXBlIiwgamJ2U3RyaW5nLCAiZW5hYmxlIGFsd2F5cyB0 cmlnZ2VyIiwKKwkJCQkJCQkgInRyaWdnZXIiLCBqYnZTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJ CQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUmVwbGljYVRyaWc6CisKKwkJCQkvKgorCQkJCSAqIFN5 bnRheDogRU5BQkxFIFJFUExJQ0EgVFJJR0dFUiAle3RyaWdnZXJ9SQorCQkJCSAqLworCQkJCXB1 c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJCQkJbmV3X2pz b25iX1ZBKHN0YXRlLCAzLAorCQkJCQkJCSAiZm10IiwgamJ2U3RyaW5nLAorCQkJCQkJCSAiRU5B QkxFIFJFUExJQ0EgVFJJR0dFUiAle3RyaWdnZXJ9SSIsCisJCQkJCQkJICJ0eXBlIiwgamJ2U3Ry aW5nLCAiZW5hYmxlIHJlcGxpY2EgdHJpZ2dlciIsCisJCQkJCQkJICJ0cmlnZ2VyIiwgamJ2U3Ry aW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9P QkpFQ1QsIE5VTEwpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVUcmlnOgorCisJ CQkJLyoKKwkJCQkgKiBTeW50YXg6IERJU0FCTEUgVFJJR0dFUiAle3RyaWdnZXJ9SQorCQkJCSAq LworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJ CQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAzLAorCQkJCQkJCSAiZm10IiwgamJ2U3RyaW5nLCAiRElT QUJMRSBUUklHR0VSICV7dHJpZ2dlcn1JIiwKKwkJCQkJCQkgInR5cGUiLCBqYnZTdHJpbmcsICJk aXNhYmxlIHRyaWdnZXIiLAorCQkJCQkJCSAidHJpZ2dlciIsIGpidlN0cmluZywgc3ViY21kLT5u YW1lKTsKKwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVUcmlnQWxsOgorCisJCQkJLyoKKwkJCQkg KiBTeW50YXg6IEVOQUJMRSBUUklHR0VSIEFMTAorCQkJCSAqLworCQkJCXB1c2hKc29uYlZhbHVl KCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJCQkJbmV3X2pzb25iX1ZBKHN0YXRl LCAyLAorCQkJCQkJCSAiZm10IiwgamJ2U3RyaW5nLCAiRU5BQkxFIFRSSUdHRVIgQUxMIiwKKwkJ CQkJCQkgInR5cGUiLCBqYnZTdHJpbmcsICJlbmFibGUgdHJpZ2dlciBhbGwiKTsKKwkJCQlwdXNo SnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQlicmVhazsKKwor CQkJY2FzZSBBVF9EaXNhYmxlVHJpZ0FsbDoKKworCQkJCS8qCisJCQkJICogU3ludGF4OiBESVNB QkxFIFRSSUdHRVIgQUxMCisJCQkJICovCisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJf QkVHSU5fT0JKRUNULCBOVUxMKTsKKwkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDIsCisJCQkJCQkJ ICJmbXQiLCBqYnZTdHJpbmcsICJESVNBQkxFIFRSSUdHRVIgQUxMIiwKKwkJCQkJCQkgInR5cGUi LCBqYnZTdHJpbmcsICJkaXNhYmxlIHRyaWdnZXIgYWxsIik7CisJCQkJcHVzaEpzb25iVmFsdWUo JnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf RW5hYmxlVHJpZ1VzZXI6CisKKwkJCQkvKgorCQkJCSAqIFN5bnRheDogRU5BQkxFIFRSSUdHRVIg VVNFUgorCQkJCSAqLworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVD VCwgTlVMTCk7CisJCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAyLAorCQkJCQkJCSAiZm10IiwgamJ2 U3RyaW5nLCAiRU5BQkxFIFRSSUdHRVIgVVNFUiIsCisJCQkJCQkJICJ0eXBlIiwgamJ2U3RyaW5n LCAiZW5hYmxlIHRyaWdnZXIgdXNlciIpOworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pC X0VORF9PQkpFQ1QsIE5VTEwpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVUcmln VXNlcjoKKworCQkJCS8qCisJCQkJICogU3ludGF4OiBESVNBQkxFIFRSSUdHRVIgVVNFUgorCQkJ CSAqLworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7 CisJCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAyLAorCQkJCQkJCSAiZm10IiwgamJ2U3RyaW5nLCAi RElTQUJMRSBUUklHR0VSIFVTRVIiLAorCQkJCQkJCSAidHlwZSIsIGpidlN0cmluZywgImRpc2Fi bGUgdHJpZ2dlciB1c2VyIik7CisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09C SkVDVCwgTlVMTCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUnVsZToKKworCQkJ CS8qCisJCQkJICogU3ludGF4OiBFTkFCTEUgUlVMRSAle3J1bGV9SQorCQkJCSAqLworCQkJCXB1 c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJCQkJbmV3X2pz b25iX1ZBKHN0YXRlLCAzLAorCQkJCQkJCSAiZm10IiwgamJ2U3RyaW5nLCAiRU5BQkxFIFJVTEUg JXtydWxlfUkiLAorCQkJCQkJCSAidHlwZSIsIGpidlN0cmluZywgImVuYWJsZSBydWxlIiwKKwkJ CQkJCQkgInJ1bGUiLCBqYnZTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJcHVzaEpzb25iVmFs dWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug QVRfRW5hYmxlQWx3YXlzUnVsZToKKworCQkJCS8qCisJCQkJICogU3ludGF4OiBFTkFCTEUgQUxX QVlTIFJVTEUgJXtydWxlfUkKKwkJCQkgKi8KKwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdK Ql9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCQkJCW5ld19qc29uYl9WQShzdGF0ZSwgMywKKwkJCQkJ CQkgImZtdCIsIGpidlN0cmluZywgIkVOQUJMRSBBTFdBWVMgUlVMRSAle3J1bGV9SSIsCisJCQkJ CQkJICJ0eXBlIiwgamJ2U3RyaW5nLCAiZW5hYmxlIGFsd2F5cyBydWxlIiwKKwkJCQkJCQkgInJ1 bGUiLCBqYnZTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRl LCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxl UmVwbGljYVJ1bGU6CisKKwkJCQkvKgorCQkJCSAqIFN5bnRheDogRU5BQkxFIFJFUExJQ0EgUlVM RSAle3J1bGV9SQorCQkJCSAqLworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lO X09CSkVDVCwgTlVMTCk7CisJCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAzLAorCQkJCQkJCSAiZm10 IiwgamJ2U3RyaW5nLCAiRU5BQkxFIFJFUExJQ0EgUlVMRSAle3J1bGV9SSIsCisJCQkJCQkJICJ0 eXBlIiwgamJ2U3RyaW5nLCAiZW5hYmxlIHJlcGxpY2EgcnVsZSIsCisJCQkJCQkJICJydWxlIiwg amJ2U3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pC X0VORF9PQkpFQ1QsIE5VTEwpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVSdWxl OgorCisJCQkJLyoKKwkJCQkgKiBTeW50YXg6IERJU0FCTEUgUlVMRSAle3J1bGV9SQorCQkJCSAq LworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJ CQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAzLAorCQkJCQkJCSAiZm10IiwgamJ2U3RyaW5nLCAiRElT QUJMRSBSVUxFICV7cnVsZX1JIiwKKwkJCQkJCQkgInR5cGUiLCBqYnZTdHJpbmcsICJkaXNhYmxl IHJ1bGUiLAorCQkJCQkJCSAicnVsZSIsIGpidlN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlw dXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9BZGRJbmhlcml0OgorCisJCQkJLyoKKwkJCQkgKiBTeW50YXg6IElOSEVS SVQgJXtwYXJlbnR9RAorCQkJCSAqLworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JF R0lOX09CSkVDVCwgTlVMTCk7CisJCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAyLAorCQkJCQkJCSAi Zm10IiwgamJ2U3RyaW5nLCAiSU5IRVJJVCAle3BhcmVudH1EIiwKKwkJCQkJCQkgInR5cGUiLCBq YnZTdHJpbmcsICJpbmhlcml0Iik7CisJCQkJbmV3X2pzb25iX2Zvcl9xdWFsbmFtZV9pZChzdGF0 ZSwgUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCSAgc3ViLT5hZGRyZXNzLm9iamVjdElk LCAicGFyZW50IiwgdHJ1ZSk7CisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09C SkVDVCwgTlVMTCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcEluaGVyaXQ6CisKKwkJ CQkvKgorCQkJCSAqIFN5bnRheDogTk8gSU5IRVJJVCAle3BhcmVudH1ECisJCQkJICovCisJCQkJ cHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKwkJCQluZXdf anNvbmJfVkEoc3RhdGUsIDIsCisJCQkJCQkJICJmbXQiLCBqYnZTdHJpbmcsICJOTyBJTkhFUklU ICV7cGFyZW50fUQiLAorCQkJCQkJCSAidHlwZSIsIGpidlN0cmluZywgImRyb3AgaW5oZXJpdCIp OworCQkJCW5ld19qc29uYl9mb3JfcXVhbG5hbWVfaWQoc3RhdGUsIFJlbGF0aW9uUmVsYXRpb25J ZCwKKwkJCQkJCQkJCQkgIHN1Yi0+YWRkcmVzcy5vYmplY3RJZCwgInBhcmVudCIsIHRydWUpOwor CQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX0FkZE9mOgorCisJCQkJLyoKKwkJCQkgKiBTeW50YXg6IE9GICV7 dHlwZV9vZn1UCisJCQkJICovCisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5f T0JKRUNULCBOVUxMKTsKKwkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDIsCisJCQkJCQkJICJmbXQi LCBqYnZTdHJpbmcsICJPRiAle3R5cGVfb2Z9VCIsCisJCQkJCQkJICJ0eXBlIiwgamJ2U3RyaW5n LCAiYWRkIG9mIik7CisJCQkJbmV3X2pzb25iX2Zvcl90eXBlKHN0YXRlLCAidHlwZV9vZiIsIHN1 Yi0+YWRkcmVzcy5vYmplY3RJZCwgLTEpOworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pC X0VORF9PQkpFQ1QsIE5VTEwpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BPZjoKKwor CQkJCS8qCisJCQkJICogU3ludGF4OiBOT1QgT0YKKwkJCQkgKi8KKwkJCQlwdXNoSnNvbmJWYWx1 ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCQkJCW5ld19qc29uYl9WQShzdGF0 ZSwgMiwKKwkJCQkJCQkgImZtdCIsIGpidlN0cmluZywgIk5PVCBPRiIsCisJCQkJCQkJICJ0eXBl IiwgamJ2U3RyaW5nLCAibm90IG9mIik7CisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJf RU5EX09CSkVDVCwgTlVMTCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfUmVwbGljYUlkZW50 aXR5OgorCisJCQkJLyoKKwkJCQkgKiBTeW50YXg6IFJFUExJQ0EgSURFTlRJVFkgJXtpZGVudH1z CisJCQkJICovCisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBO VUxMKTsKKwkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDIsCisJCQkJCQkJICJmbXQiLCBqYnZTdHJp bmcsCisJCQkJCQkJICJSRVBMSUNBIElERU5USVRZICV7aWRlbnR9cyIsCisJCQkJCQkJICJ0eXBl IiwgamJ2U3RyaW5nLCAicmVwbGljYSBpZGVudGl0eSIpOworCQkJCXN3aXRjaCAoKChSZXBsaWNh SWRlbnRpdHlTdG10ICopIHN1YmNtZC0+ZGVmKS0+aWRlbnRpdHlfdHlwZSkKKwkJCQl7CisJCQkJ CWNhc2UgUkVQTElDQV9JREVOVElUWV9ERUZBVUxUOgorCQkJCQkJbmV3X2pzb25iX1ZBKHN0YXRl LCAxLCAiaWRlbnQiLCBqYnZTdHJpbmcsICJERUZBVUxUIik7CisJCQkJCQlicmVhazsKKwkJCQkJ Y2FzZSBSRVBMSUNBX0lERU5USVRZX0ZVTEw6CisJCQkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDEs ICJpZGVudCIsIGpidlN0cmluZywgIkZVTEwiKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFJF UExJQ0FfSURFTlRJVFlfTk9USElORzoKKwkJCQkJCW5ld19qc29uYl9WQShzdGF0ZSwgMSwgImlk ZW50IiwgamJ2U3RyaW5nLCAiTk9USElORyIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgUkVQ TElDQV9JREVOVElUWV9JTkRFWDoKKwkJCQkJCWluc2VydF9qc29uYl9rZXkoc3RhdGUsICJpZGVu dCIpOworCQkJCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAyLAorCQkJCQkJCQkJICJmbXQiLCBqYnZT dHJpbmcsICJVU0lORyBJTkRFWCAle2luZGV4fUkiLAorCQkJCQkJCQkJICJpbmRleCIsIGpidlN0 cmluZywKKwkJCQkJCQkJCSAoKFJlcGxpY2FJZGVudGl0eVN0bXQgKikgc3ViY21kLT5kZWYpLT5u YW1lKTsKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdK Ql9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVSb3dT ZWN1cml0eToKKworCQkJCS8qCisJCQkJICogU3ludGF4OiBFTkFCTEUgUk9XIExFVkVMIFNFQ1VS SVRZCisJCQkJICovCisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNU LCBOVUxMKTsKKwkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDIsCisJCQkJCQkJICJmbXQiLCBqYnZT dHJpbmcsCisJCQkJCQkJICJFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZIiwKKwkJCQkJCQkgInR5 cGUiLCBqYnZTdHJpbmcsICJlbmFibGUgcm93IHNlY3VyaXR5Iik7CisJCQkJcHVzaEpzb25iVmFs dWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug QVRfRGlzYWJsZVJvd1NlY3VyaXR5OgorCisJCQkJLyoKKwkJCQkgKiBTeW50YXg6IERJU0FCTEUg Uk9XIExFVkVMIFNFQ1VSSVRZCisJCQkJICovCisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBX SkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKwkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDIsCisJCQkJ CQkJICJmbXQiLCBqYnZTdHJpbmcsCisJCQkJCQkJICJESVNBQkxFIFJPVyBMRVZFTCBTRUNVUklU WSIsCisJCQkJCQkJICJ0eXBlIiwgamJ2U3RyaW5nLCAiZGlzYWJsZSByb3cgc2VjdXJpdHkiKTsK KwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKwkJCQli cmVhazsKKworCQkJY2FzZSBBVF9BdHRhY2hQYXJ0aXRpb246CisJCQkJeworCQkJCQlTdHJpbmdJ bmZvRGF0YSBmbXRTdWI7CisKKwkJCQkJaW5pdFN0cmluZ0luZm8oJmZtdFN1Yik7CisKKwkJCQkJ LyoKKwkJCQkJICogU3ludGF4OiBBVFRBQ0ggUEFSVElUSU9OICV7cGFydGl0aW9uX2lkZW50aXR5 fUQKKwkJCQkJICogJXtwYXJ0aXRpb25fYm91bmR9cworCQkJCQkgKi8KKwkJCQkJcHVzaEpzb25i VmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKwkJCQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZygmZm10U3ViLCAiQVRUQUNIIFBBUlRJVElPTiIKKwkJCQkJCQkJCQkgICAiICV7 cGFydGl0aW9uX2lkZW50aXR5fUQiKTsKKworCQkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDEsICJ0 eXBlIiwgamJ2U3RyaW5nLAorCQkJCQkJCQkgImF0dGFjaCBwYXJ0aXRpb24iKTsKKwkJCQkJbmV3 X2pzb25iX2Zvcl9xdWFsbmFtZV9pZChzdGF0ZSwgUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkgIHN1Yi0+YWRkcmVzcy5vYmplY3RJZCwKKwkJCQkJCQkJCQkJICAicGFydGl0aW9uX2lk ZW50aXR5IiwgdHJ1ZSk7CisKKwkJCQkJaWYgKHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJ TkRfUEFSVElUSU9ORURfVEFCTEUpCisJCQkJCXsKKwkJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoJmZtdFN1YiwgIiAle3BhcnRpdGlvbl9ib3VuZH1zIik7CisJCQkJCQluZXdfanNvbmJfVkEo c3RhdGUsIDEsCisJCQkJCQkJCQkgInBhcnRpdGlvbl9ib3VuZCIsIGpidlN0cmluZywKKwkJCQkJ CQkJCSByZWxhdGlvbl9nZXRfcGFydF9ib3VuZChzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJ CQkJfQorCisJCQkJCS8qIFdlIGhhdmUgZnVsbCBmbXQgYnkgbm93LCBzbyBhZGQganNvbmIgZWxl bWVudCBmb3IgdGhhdCAqLworCQkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDEsICJmbXQiLCBqYnZT dHJpbmcsIGZtdFN1Yi5kYXRhKTsKKwkJCQkJcGZyZWUoZm10U3ViLmRhdGEpOworCisJCQkJCXB1 c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworCisJCQkJCWJyZWFr OworCQkJCX0KKwkJCWNhc2UgQVRfRGV0YWNoUGFydGl0aW9uOgorCQkJCXsKKwkJCQkJUGFydGl0 aW9uQ21kICpjbWQ7CisJCQkJCVN0cmluZ0luZm9EYXRhIGZtdFN1YjsKKworCQkJCQlpbml0U3Ry aW5nSW5mbygmZm10U3ViKTsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBQYXJ0aXRp b25DbWQpKTsKKwkJCQkJY21kID0gKFBhcnRpdGlvbkNtZCAqKSBzdWJjbWQtPmRlZjsKKworCQkJ CQkvKgorCQkJCQkgKiBTeW50YXg6IERFVEFDSCBQQVJUSVRJT04gJXtwYXJ0aXRpb25faWRlbnRp dHl9RAorCQkJCQkgKiAle2NvbmN1cnJlbnR9cworCQkJCQkgKi8KKwkJCQkJcHVzaEpzb25iVmFs dWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKwkJCQkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZygmZm10U3ViLCAiREVUQUNIIFBBUlRJVElPTiIKKwkJCQkJCQkJCQkgICAiICV7cGFy dGl0aW9uX2lkZW50aXR5fUQiKTsKKworCQkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDEsICJ0eXBl IiwgamJ2U3RyaW5nLCAiZGV0YWNoIHBhcnRpdGlvbiIpOworCQkJCQluZXdfanNvbmJfZm9yX3F1 YWxuYW1lX2lkKHN0YXRlLCBSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCSAgc3ViLT5h ZGRyZXNzLm9iamVjdElkLAorCQkJCQkJCQkJCQkgICJwYXJ0aXRpb25faWRlbnRpdHkiLCB0cnVl KTsKKwkJCQkJaWYgKGNtZC0+Y29uY3VycmVudCkKKwkJCQkJeworCQkJCQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZygmZm10U3ViLCAiICV7Y29uY3VycmVudH1zIik7CisJCQkJCQluZXdfanNvbmJf VkEoc3RhdGUsIDEsCisJCQkJCQkJCQkgImNvbmN1cnJlbnQiLCBqYnZTdHJpbmcsICJDT05DVVJS RU5UTFkiKTsKKwkJCQkJfQorCisJCQkJCS8qIFdlIGhhdmUgZnVsbCBmbXQgYnkgbm93LCBzbyBh ZGQganNvbmIgZWxlbWVudCBmb3IgdGhhdCAqLworCQkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDEs ICJmbXQiLCBqYnZTdHJpbmcsIGZtdFN1Yi5kYXRhKTsKKwkJCQkJcGZyZWUoZm10U3ViLmRhdGEp OworCisJCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOwor CQkJCQlicmVhazsKKwkJCQl9CisJCQljYXNlIEFUX0RldGFjaFBhcnRpdGlvbkZpbmFsaXplOgor CisJCQkJLyoKKwkJCQkgKiBTeW50YXg6IERFVEFDSCBQQVJUSVRJT04gJXtwYXJ0aXRpb25faWRl bnRpdHl9RCBGSU5BTElaRQorCQkJCSAqLworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pC X0JFR0lOX09CSkVDVCwgTlVMTCk7CisJCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAyLAorCQkJCQkJ CSAiZm10IiwgamJ2U3RyaW5nLCAiREVUQUNIIFBBUlRJVElPTiIKKwkJCQkJCQkgIiAle3BhcnRp dGlvbl9pZGVudGl0eX1EIEZJTkFMSVpFIiwKKwkJCQkJCQkgInR5cGUiLCBqYnZTdHJpbmcsICJk ZXRhY2ggcGFydGl0aW9uIGZpbmFsaXplIik7CisKKwkJCQluZXdfanNvbmJfZm9yX3F1YWxuYW1l X2lkKHN0YXRlLCBSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJICBzdWItPmFkZHJlc3Mu b2JqZWN0SWQsCisJCQkJCQkJCQkJICAicGFydGl0aW9uX2lkZW50aXR5IiwgdHJ1ZSk7CisJCQkJ cHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisJCQkJYnJlYWs7 CisJCQljYXNlIEFUX0FkZElkZW50aXR5OgorCQkJCXsKKwkJCQkJQXR0ck51bWJlcglhdHRudW07 CisJCQkJCU9pZAkJCXNlcV9yZWxpZDsKKwkJCQkJQ29sdW1uRGVmICAqY29sZGVmID0gKENvbHVt bkRlZiAqKSBzdWJjbWQtPmRlZjsKKwkJCQkJU3RyaW5nSW5mb0RhdGEgZm10U3ViOworCisJCQkJ CWluaXRTdHJpbmdJbmZvKCZmbXRTdWIpOworCisJCQkJCS8qCisJCQkJCSAqIFN5bnRheDogQUxU RVIgQ09MVU1OICV7Y29sdW1ufUkgJXtkZWZpbml0aW9ufXMgd2hlcmUKKwkJCQkJICogZGVmaW5p dGlvbiA6IEFERCAle2lkZW50aXR5X2NvbHVtbn1zIHdoZXJlCisJCQkJCSAqIGlkZW50aXR5X2Nv bHVtbjogJXtpZGVudGl0eV90eXBlfXMgKCAle3NlcV9kZWZpbml0aW9uOgorCQkJCQkgKiB9cyAp CisJCQkJCSAqLworCQkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1Qs IE5VTEwpOworCisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmZtdFN1YiwgIkFMVEVSIENP TFVNTiAle2NvbHVtbn1JIik7CisJCQkJCW5ld19qc29uYl9WQShzdGF0ZSwgMiwKKwkJCQkJCQkJ ICJ0eXBlIiwgamJ2U3RyaW5nLCAiYWRkIGlkZW50aXR5IiwKKwkJCQkJCQkJICJjb2x1bW4iLCBq YnZTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJYXR0bnVtID0gZ2V0X2F0dG51bShSZWxh dGlvbkdldFJlbGlkKHJlbCksIHN1YmNtZC0+bmFtZSk7CisJCQkJCXNlcV9yZWxpZCA9IGdldElk ZW50aXR5U2VxdWVuY2UoUmVsYXRpb25HZXRSZWxpZChyZWwpLAorCQkJCQkJCQkJCQkJCWF0dG51 bSwgdHJ1ZSk7CisKKwkJCQkJaWYgKE9pZElzVmFsaWQoc2VxX3JlbGlkKSkKKwkJCQkJeworCisJ CQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdWIsICIgJXtkZWZpbml0aW9ufXMiKTsK KwkJCQkJCWluc2VydF9qc29uYl9rZXkoc3RhdGUsICJkZWZpbml0aW9uIik7CisKKwkJCQkJCS8q IGluc2VydCBkZWZpbml0aW9uJ3MgdmFsdWUgbm93ICovCisJCQkJCQlwdXNoSnNvbmJWYWx1ZSgm c3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCQkJCQkJbmV3X2pzb25iX1ZBKHN0YXRl LCAxLAorCQkJCQkJCQkJICJmbXQiLCBqYnZTdHJpbmcsICJBREQgJXtpZGVudGl0eV9jb2x1bW59 cyIpOworCisJCQkJCQkvKiBpbnNlcnQgaWRlbnRpdHlfY29sdW1uICovCisJCQkJCQlkZXBhcnNl X0NvbHVtbklkZW50aXR5KHN0YXRlLCAiaWRlbnRpdHlfY29sdW1uIiwKKwkJCQkJCQkJCQkJICAg c2VxX3JlbGlkLAorCQkJCQkJCQkJCQkgICBjb2xkZWYtPmlkZW50aXR5LCBmYWxzZSk7CisKKwkJ CQkJCS8qIG1hcmsgZGVmaW5pdGlvbidzIHZhbHVlIGVuZCAqLworCQkJCQkJcHVzaEpzb25iVmFs dWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisJCQkJCX0KKworCQkJCQkvKiBXZSBo YXZlIGZ1bGwgZm10IGJ5IG5vdywgc28gYWRkIGpzb25iIGVsZW1lbnQgZm9yIHRoYXQgKi8KKwkJ CQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLCAiZm10IiwgamJ2U3RyaW5nLCBmbXRTdWIuZGF0YSk7 CisKKwkJCQkJcGZyZWUoZm10U3ViLmRhdGEpOworCisJCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0 ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgQVRf U2V0SWRlbnRpdHk6CisJCQkJeworCQkJCQlEZWZFbGVtICAgICpkZWZlbDsKKwkJCQkJY2hhcgkJ aWRlbnRpdHkgPSAwOworCQkJCQlBdHRyTnVtYmVyCWF0dG51bTsKKwkJCQkJT2lkCQkJc2VxX3Jl bGlkOworCQkJCQlTdHJpbmdJbmZvRGF0YSBmbXRTdWI7CisKKwkJCQkJaW5pdFN0cmluZ0luZm8o JmZtdFN1Yik7CisKKwkJCQkJLyoKKwkJCQkJICogU3ludGF4OiBBTFRFUiBDT0xVTU4gJXtjb2x1 bW59SSAle2RlZmluaXRpb259cyB3aGVyZQorCQkJCQkgKiBkZWZpbml0aW9uIDogJXtpZGVudGl0 eV90eXBlfXMgKCAle3NlcV9kZWZpbml0aW9uOiB9cyApCisJCQkJCSAqLworCQkJCQlwdXNoSnNv bmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCisJCQkJCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoJmZtdFN1YiwgIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIik7CisJCQkJ CW5ld19qc29uYl9WQShzdGF0ZSwgMiwKKwkJCQkJCQkJICJ0eXBlIiwgamJ2U3RyaW5nLCAic2V0 IGlkZW50aXR5IiwKKwkJCQkJCQkJICJjb2x1bW4iLCBqYnZTdHJpbmcsIHN1YmNtZC0+bmFtZSk7 CisKKwkJCQkJaWYgKHN1YmNtZC0+ZGVmKQorCQkJCQl7CisJCQkJCQlMaXN0CSAgICpkZWYgPSAo TGlzdCAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgTGlz dCkpOworCisJCQkJCQlkZWZlbCA9IGxpbml0aWFsX25vZGUoRGVmRWxlbSwgZGVmKTsKKwkJCQkJ CWlkZW50aXR5ID0gZGVmR2V0SW50MzIoZGVmZWwpOworCQkJCQl9CisKKwkJCQkJYXR0bnVtID0g Z2V0X2F0dG51bShSZWxhdGlvbkdldFJlbGlkKHJlbCksIHN1YmNtZC0+bmFtZSk7CisJCQkJCXNl cV9yZWxpZCA9IGdldElkZW50aXR5U2VxdWVuY2UoUmVsYXRpb25HZXRSZWxpZChyZWwpLAorCQkJ CQkJCQkJCQkJCWF0dG51bSwgdHJ1ZSk7CisKKwkJCQkJaWYgKE9pZElzVmFsaWQoc2VxX3JlbGlk KSkKKwkJCQkJeworCQkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3ViLCAiICV7ZGVm aW5pdGlvbn1zIik7CisJCQkJCQlkZXBhcnNlX0NvbHVtbklkZW50aXR5KHN0YXRlLCAiZGVmaW5p dGlvbiIsCisJCQkJCQkJCQkJCSAgIHNlcV9yZWxpZCwgaWRlbnRpdHksCisJCQkJCQkJCQkJCSAg IHRydWUpOworCQkJCQl9CisKKwkJCQkJLyogV2UgaGF2ZSBmdWxsIGZtdCBieSBub3csIHNvIGFk ZCBqc29uYiBlbGVtZW50IGZvciB0aGF0ICovCisJCQkJCW5ld19qc29uYl9WQShzdGF0ZSwgMSwg ImZtdCIsIGpidlN0cmluZywgZm10U3ViLmRhdGEpOworCisJCQkJCXBmcmVlKGZtdFN1Yi5kYXRh KTsKKwkJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7CisK KwkJCQkJYnJlYWs7CisJCQkJfQorCQkJY2FzZSBBVF9Ecm9wSWRlbnRpdHk6CisJCQkJeworCQkJ CQlTdHJpbmdJbmZvRGF0YSBmbXRTdWI7CisKKwkJCQkJaW5pdFN0cmluZ0luZm8oJmZtdFN1Yik7 CisKKwkJCQkJLyoKKwkJCQkJICogU3ludGF4OiBBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBEUk9Q IElERU5USVRZCisJCQkJCSAqICV7aWZfZXhpc3RzfXMKKwkJCQkJICovCisJCQkJCXB1c2hKc29u YlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJCQkJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoJmZtdFN1YiwgIkFMVEVSIENPTFVNTiIKKwkJCQkJCQkJCQkgICAiICV7Y29s dW1ufUkgRFJPUCBJREVOVElUWSIpOworCQkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDIsCisJCQkJ CQkJCSAidHlwZSIsIGpidlN0cmluZywgImRyb3AgaWRlbnRpdHkiLAorCQkJCQkJCQkgImNvbHVt biIsIGpidlN0cmluZywgc3ViY21kLT5uYW1lKTsKKworCQkJCQlpZiAoc3ViY21kLT5taXNzaW5n X29rKQorCQkJCQl7CisJCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdWIsICIgJXtp Zl9leGlzdHN9cyIpOworCQkJCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLAorCQkJCQkJCQkJICJp Zl9leGlzdHMiLCBqYnZTdHJpbmcsICJJRiBFWElTVFMiKTsKKwkJCQkJfQorCisJCQkJCS8qIFdl IGhhdmUgZnVsbCBmbXQgYnkgbm93LCBzbyBhZGQganNvbmIgZWxlbWVudCBmb3IgdGhhdCAqLwor CQkJCQluZXdfanNvbmJfVkEoc3RhdGUsIDEsICJmbXQiLCBqYnZTdHJpbmcsIGZtdFN1Yi5kYXRh KTsKKwkJCQkJcGZyZWUoZm10U3ViLmRhdGEpOworCisJCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0 ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQlkZWZhdWx0 OgorCQkJCWVsb2coV0FSTklORywgInVuc3VwcG9ydGVkIGFsdGVyIHRhYmxlIHN1YnR5cGUgJWQi LAorCQkJCQkgc3ViY21kLT5zdWJ0eXBlKTsKKwkJCQlicmVhazsKKwkJfQorCX0KKworCXRhYmxl X2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCS8qIGlmIHN1YmNtZHMgYXJyYXkgaXMg bm90IGV2ZW4gY3JlYXRlZCBvciBoYXMgMCBlbGVtZW50cywgcmV0dXJuIE5VTEwgKi8KKwlpZiAo IXN1YkNtZEFycmF5IHx8CisJCSgoc3RhdGUtPmNvbnRWYWwudHlwZSA9PSBqYnZBcnJheSkgJiYK KwkJIChzdGF0ZS0+Y29udFZhbC52YWwuYXJyYXkubkVsZW1zID09IDApKSkKKwl7CisJCXBmcmVl KGZtdFN0ci5kYXRhKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogTWFyayB0aGUgZW5kIG9m IHN1YmNtZHMgYXJyYXkgKi8KKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfQVJSQVks IE5VTEwpOworCisJLyogV2UgaGF2ZSBmdWxsIGZtdCBieSBub3csIHNvIGFkZCBqc29uYiBlbGVt ZW50IGZvciB0aGF0ICovCisJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLCAiZm10IiwgamJ2U3RyaW5n LCBmbXRTdHIuZGF0YSk7CisKKwlwZnJlZShmbXRTdHIuZGF0YSk7CisKKwkvKiBNYXJrIHRoZSBl bmQgb2YgUk9PVCBvYmplY3QgKi8KKwl2YWx1ZSA9IHB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pC X0VORF9PQkpFQ1QsIE5VTEwpOworCisJcmV0dXJuIEpzb25iVmFsdWVUb0pzb25iKHZhbHVlKTsK K30KKwogLyoKICAqIERlcGFyc2UgYSBDcmVhdGVTZXFTdG10LgogICoKQEAgLTE1ODksNyArMzAw MCw4IEBAIGRlcGFyc2VfZHJvcF90YWJsZShjb25zdCBjaGFyICpvYmppZGVudGl0eSwgTm9kZSAq cGFyc2V0cmVlKQogICogdGhlIGNvbHVtbiBkZWZhdWx0IHZhbHVlIGFuZCBzZXF1ZW5jZXMgY3Jl YXRpb24gd2hpbGUgcGFyc2luZy4KICAqCiAgKiBWZXJib3NlIHN5bnRheAotICogQ1JFQVRFICV7 cGVyc2lzdGVuY2V9cyBTRVFVRU5DRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgJXtk ZWZpbml0aW9uOiB9cworICogQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBTRVFVRU5DRSAle2lmX25v dF9leGlzdHN9cyAle2lkZW50aXR5fUQKKyAqICV7ZGVmaW5pdGlvbjogfXMKICAqLwogc3RhdGlj IEpzb25iICoKIGRlcGFyc2VfQ3JlYXRlU2VxU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNl dHJlZSkKQEAgLTE2NTMsMTIgKzMwNjUsMTIgQEAgZGVwYXJzZV9DcmVhdGVTZXFTdG10KE9pZCBv YmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQogCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JF R0lOX0FSUkFZLCBOVUxMKTsKIAogCS8qIERlZmluaXRpb24gZWxlbWVudHMgKi8KLQlkZXBhcnNl X1NlcV9DYWNoZShzdGF0ZSwgc2VxZm9ybSk7Ci0JZGVwYXJzZV9TZXFfQ3ljbGUoc3RhdGUsIHNl cWZvcm0pOwotCWRlcGFyc2VfU2VxX0luY3JlbWVudEJ5KHN0YXRlLCBzZXFmb3JtKTsKLQlkZXBh cnNlX1NlcV9NaW52YWx1ZShzdGF0ZSwgc2VxZm9ybSk7Ci0JZGVwYXJzZV9TZXFfTWF4dmFsdWUo c3RhdGUsIHNlcWZvcm0pOwotCWRlcGFyc2VfU2VxX1N0YXJ0d2l0aChzdGF0ZSwgc2VxZm9ybSk7 CisJZGVwYXJzZV9TZXFfQ2FjaGUoc3RhdGUsIHNlcWZvcm0sIGZhbHNlKTsKKwlkZXBhcnNlX1Nl cV9DeWNsZShzdGF0ZSwgc2VxZm9ybSwgZmFsc2UpOworCWRlcGFyc2VfU2VxX0luY3JlbWVudEJ5 KHN0YXRlLCBzZXFmb3JtLCBmYWxzZSk7CisJZGVwYXJzZV9TZXFfTWludmFsdWUoc3RhdGUsIHNl cWZvcm0sIGZhbHNlKTsKKwlkZXBhcnNlX1NlcV9NYXh2YWx1ZShzdGF0ZSwgc2VxZm9ybSwgZmFs c2UpOworCWRlcGFyc2VfU2VxX1N0YXJ0d2l0aChzdGF0ZSwgc2VxZm9ybSwgZmFsc2UpOwogCWRl cGFyc2VfU2VxX1Jlc3RhcnQoc3RhdGUsIHNlcXZhbHVlcy0+bGFzdF92YWx1ZSk7CiAJZGVwYXJz ZV9TZXFfQXMoc3RhdGUsIHNlcWZvcm0pOwogCS8qIFdlIHB1cnBvc2VmdWxseSBkbyBub3QgZW1p dCBPV05FRCBCWSBoZXJlICovCkBAIC0xNzM3LDIxICszMTQ5LDIxIEBAIGRlcGFyc2VfQWx0ZXJT ZXFTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQogCQlEZWZFbGVtICAgICplbGVt ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOwogCiAJCWlmIChzdHJjbXAoZWxlbS0+ZGVmbmFt ZSwgImNhY2hlIikgPT0gMCkKLQkJCWRlcGFyc2VfU2VxX0NhY2hlKHN0YXRlLCBzZXFmb3JtKTsK KwkJCWRlcGFyc2VfU2VxX0NhY2hlKHN0YXRlLCBzZXFmb3JtLCBmYWxzZSk7CiAJCWVsc2UgaWYg KHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiY3ljbGUiKSA9PSAwKQotCQkJZGVwYXJzZV9TZXFfQ3lj bGUoc3RhdGUsIHNlcWZvcm0pOworCQkJZGVwYXJzZV9TZXFfQ3ljbGUoc3RhdGUsIHNlcWZvcm0s IGZhbHNlKTsKIAkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJpbmNyZW1lbnQiKSA9 PSAwKQotCQkJZGVwYXJzZV9TZXFfSW5jcmVtZW50Qnkoc3RhdGUsIHNlcWZvcm0pOworCQkJZGVw YXJzZV9TZXFfSW5jcmVtZW50Qnkoc3RhdGUsIHNlcWZvcm0sIGZhbHNlKTsKIAkJZWxzZSBpZiAo c3RyY21wKGVsZW0tPmRlZm5hbWUsICJtaW52YWx1ZSIpID09IDApCi0JCQlkZXBhcnNlX1NlcV9N aW52YWx1ZShzdGF0ZSwgc2VxZm9ybSk7CisJCQlkZXBhcnNlX1NlcV9NaW52YWx1ZShzdGF0ZSwg c2VxZm9ybSwgZmFsc2UpOwogCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgIm1heHZh bHVlIikgPT0gMCkKLQkJCWRlcGFyc2VfU2VxX01heHZhbHVlKHN0YXRlLCBzZXFmb3JtKTsKKwkJ CWRlcGFyc2VfU2VxX01heHZhbHVlKHN0YXRlLCBzZXFmb3JtLCBmYWxzZSk7CiAJCWVsc2UgaWYg KHN0cmNtcChlbGVtLT5kZWZuYW1lLCAic3RhcnQiKSA9PSAwKQotCQkJZGVwYXJzZV9TZXFfU3Rh cnR3aXRoKHN0YXRlLCBzZXFmb3JtKTsKKwkJCWRlcGFyc2VfU2VxX1N0YXJ0d2l0aChzdGF0ZSwg c2VxZm9ybSwgZmFsc2UpOwogCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInJlc3Rh cnQiKSA9PSAwKQogCQkJZGVwYXJzZV9TZXFfUmVzdGFydChzdGF0ZSwgc2VxdmFsdWVzLT5sYXN0 X3ZhbHVlKTsKIAkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJvd25lZF9ieSIpID09 IDApCi0JCQlkZXBhcnNlX1NlcV9Pd25lZEJ5KHN0YXRlLCBvYmplY3RJZCk7CisJCQlkZXBhcnNl X1NlcV9Pd25lZEJ5KHN0YXRlLCBvYmplY3RJZCwgZmFsc2UpOwogCQllbHNlIGlmIChzdHJjbXAo ZWxlbS0+ZGVmbmFtZSwgImFzIikgPT0gMCkKIAkJCWRlcGFyc2VfU2VxX0FzKHN0YXRlLCBzZXFm b3JtKTsKIAkJZWxzZQpAQCAtMTc2Nyw2ICszMTc5LDIwNyBAQCBkZXBhcnNlX0FsdGVyU2VxU3Rt dChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKIAlyZXR1cm4gSnNvbmJWYWx1ZVRvSnNv bmIodmFsdWUpOwogfQogCisvKgorICogRGVwYXJzZSBhIFJlbmFtZVN0bXQuCisgKgorICogVmVy Ym9zZSBzeW50YXgKKyAqIEFMVEVSIFRBQkxFICV7aWZfZXhpc3RzfXMgJXtpZGVudGl0eX1EIFJF TkFNRSBUTyAle25ld25hbWV9SQorICogT1IKKyAqIEFMVEVSIFRBQkxFICV7b25seX1zICV7aWRl bnRpdHl9RCBSRU5BTUUgQ09OU1RSQUlOVCAle29sZG5hbWV9SQorICogVE8gJXtuZXduYW1lfUkK KyAqIE9SCisgKiBBTFRFUiAle29ianR5cGV9cyAle2lmX2V4aXN0c31zICV7b25seX1zICV7aWRl bnRpdHl9RCBSRU5BTUUgQ09MVU1OCisgKiAle2NvbG5hbWV9SSBUTyAle25ld25hbWV9SSAle2Nh c2NhZGV9cworICovCisKK3N0YXRpYyBKc29uYiAqCitkZXBhcnNlX1JlbmFtZVN0bXQoT2JqZWN0 QWRkcmVzcyBhZGRyZXNzLCBOb2RlICpwYXJzZXRyZWUpCit7CisJUmVuYW1lU3RtdCAqbm9kZSA9 IChSZW5hbWVTdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbglyZWxhdGlvbjsKKwlPaWQJCQlz Y2hlbWFJZDsKKwlKc29uYlBhcnNlU3RhdGUgKnN0YXRlID0gTlVMTDsKKwlKc29uYlZhbHVlICp2 YWx1ZTsKKworCS8qCisJICogSW4gYW4gQUxURVIgLi4gUkVOQU1FIGNvbW1hbmQsIHdlIGRvbid0 IGhhdmUgdGhlIG9yaWdpbmFsIG5hbWUgb2YgdGhlCisJICogb2JqZWN0IGluIHN5c3RlbSBjYXRh bG9nczogc2luY2Ugd2UgaW5zcGVjdCB0aGVtIGFmdGVyIHRoZSBjb21tYW5kIGhhcworCSAqIGV4 ZWN1dGVkLCB0aGUgb2xkIG5hbWUgaXMgYWxyZWFkeSBnb25lLiAgVGhlcmVmb3JlLCB3ZSBleHRy YWN0IGl0IGZyb20KKwkgKiB0aGUgcGFyc2Ugbm9kZS4gIE5vdGUgd2Ugc3RpbGwgZXh0cmFjdCB0 aGUgc2NoZW1hIG5hbWUgZnJvbSB0aGUgY2F0YWxvZworCSAqIChpdCBtaWdodCBub3QgYmUgcHJl c2VudCBpbiB0aGUgcGFyc2Ugbm9kZSk7IGl0IGNhbm5vdCBwb3NzaWJseSBoYXZlCisJICogY2hh bmdlZCBhbnl3YXkuCisJICovCisJc3dpdGNoIChub2RlLT5yZW5hbWVUeXBlKQorCXsKKwkJY2Fz ZSBPQkpFQ1RfVEFCTEU6CisJCQlyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4oYWRkcmVzcy5vYmpl Y3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCXNjaGVtYUlkID0gUmVsYXRpb25HZXROYW1lc3Bh Y2UocmVsYXRpb24pOworCisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpF Q1QsIE5VTEwpOworCQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAzLAorCQkJCQkJICJmbXQiLCBqYnZT dHJpbmcsCisJCQkJCQkgIkFMVEVSIFRBQkxFICV7aWZfZXhpc3RzfXMgJXtpZGVudGl0eX1EIgor CQkJCQkJICIgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwKKwkJCQkJCSAiaWZfZXhpc3RzIiwgamJ2 U3RyaW5nLAorCQkJCQkJIG5vZGUtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIiA6ICIiLAorCQkJ CQkJICJuZXduYW1lIiwgamJ2U3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKworCQkJaW5zZXJ0X2lk ZW50aXR5X29iamVjdChzdGF0ZSwgc2NoZW1hSWQsIG5vZGUtPnJlbGF0aW9uLT5yZWxuYW1lKTsK KwkJCXZhbHVlID0gcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7 CisKKwkJCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJYnJl YWs7CisKKwkJY2FzZSBPQkpFQ1RfVEFCQ09OU1RSQUlOVDoKKwkJCXsKKwkJCQlIZWFwVHVwbGUJ Y29uc3RydHVwOworCQkJCUZvcm1fcGdfY29uc3RyYWludCBjb25zdGZvcm07CisKKwkJCQljb25z dHJ0dXAgPSBTZWFyY2hTeXNDYWNoZTEoQ09OU1RST0lELAorCQkJCQkJCQkJCQlPYmplY3RJZEdl dERhdHVtKGFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY29u c3RydHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNvbnN0 cmFpbnQgd2l0aCBPSUQgJXUiLAorCQkJCQkJIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCWNvbnN0 Zm9ybSA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVDVChjb25zdHJ0dXApOworCisJCQkJ cHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKwkJCQluZXdf anNvbmJfVkEoc3RhdGUsIDQsCisJCQkJCQkJICJmbXQiLCBqYnZTdHJpbmcsCisJCQkJCQkJICJB TFRFUiBUQUJMRSAle29ubHl9cyAle2lkZW50aXR5fUQgUkVOQU1FIgorCQkJCQkJCSAiIENPTlNU UkFJTlQgJXtvbGRuYW1lfUkgVE8gJXtuZXduYW1lfUkiLAorCQkJCQkJCSAib25seSIsIGpidlN0 cmluZywKKwkJCQkJCQkgbm9kZS0+cmVsYXRpb24tPmluaCA/ICIiIDogIk9OTFkiLAorCQkJCQkJ CSAib2xkbmFtZSIsIGpidlN0cmluZywgbm9kZS0+c3VibmFtZSwKKwkJCQkJCQkgIm5ld25hbWUi LCBqYnZTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCisJCQkJbmV3X2pzb25iX2Zvcl9xdWFsbmFt ZV9pZChzdGF0ZSwgUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCSAgY29uc3Rmb3JtLT5j b25yZWxpZCwgImlkZW50aXR5IiwgdHJ1ZSk7CisJCQkJdmFsdWUgPSBwdXNoSnNvbmJWYWx1ZSgm c3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKworCQkJCVJlbGVhc2VTeXNDYWNoZShjb25z dHJ0dXApOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfQ09MVU1OOgorCQkJewor CQkJCVN0cmluZ0luZm9EYXRhIGZtdFN0cjsKKworCQkJCWluaXRTdHJpbmdJbmZvKCZmbXRTdHIp OworCisJCQkJcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKGFkZHJlc3Mub2JqZWN0SWQsIEFjY2Vz c1NoYXJlTG9jayk7CisJCQkJc2NoZW1hSWQgPSBSZWxhdGlvbkdldE5hbWVzcGFjZShyZWxhdGlv bik7CisKKwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwp OworCisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3RyLCAiQUxURVIgJXtvYmp0eXBl fXMiKTsKKworCQkJCW5ld19qc29uYl9WQShzdGF0ZSwgMSwKKwkJCQkJCQkgIm9ianR5cGUiLCBq YnZTdHJpbmcsCisJCQkJCQkJIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbGF0aW9uVHlwZSkp OworCisJCQkJLyogQ29tcG9zaXRlIHR5cGVzIGRvIG5vdCBzdXBwb3J0IElGIEVYSVNUUyAqLwor CQkJCWlmIChub2RlLT5yZW5hbWVUeXBlID09IE9CSkVDVF9DT0xVTU4pCisJCQkJeworCQkJCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmbXRTdHIsICIgJXtpZl9leGlzdHN9cyIpOworCQkJCQlu ZXdfanNvbmJfVkEoc3RhdGUsIDEsCisJCQkJCQkJCSAiaWZfZXhpc3RzIiwgamJ2U3RyaW5nLAor CQkJCQkJCQkgbm9kZS0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIpOworCQkJCX0KKwor CQkJCWlmICghbm9kZS0+cmVsYXRpb24tPmluaCkKKwkJCQl7CisJCQkJCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoJmZtdFN0ciwgIiAle29ubHl9cyIpOworCQkJCQluZXdfanNvbmJfVkEoc3RhdGUs IDEsICJvbmx5IiwgamJ2U3RyaW5nLCAiT05MWSIpOworCQkJCX0KKworCQkJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoJmZtdFN0ciwgIiAle2lkZW50aXR5fUQgUkVOQU1FIENPTFVNTiIKKwkJCQkJ CQkJCSAgICIgJXtjb2xuYW1lfUkgVE8gJXtuZXduYW1lfUkiKTsKKwkJCQlpbnNlcnRfaWRlbnRp dHlfb2JqZWN0KHN0YXRlLCBzY2hlbWFJZCwgbm9kZS0+cmVsYXRpb24tPnJlbG5hbWUpOworCQkJ CW5ld19qc29uYl9WQShzdGF0ZSwgMiwKKwkJCQkJCQkgImNvbG5hbWUiLCBqYnZTdHJpbmcsIG5v ZGUtPnN1Ym5hbWUsCisJCQkJCQkJICJuZXduYW1lIiwgamJ2U3RyaW5nLCBub2RlLT5uZXduYW1l KTsKKworCQkJCWlmIChub2RlLT5yZW5hbWVUeXBlID09IE9CSkVDVF9BVFRSSUJVVEUpCisJCQkJ eworCisJCQkJCWlmIChub2RlLT5iZWhhdmlvciA9PSBEUk9QX0NBU0NBREUpCisJCQkJCXsKKwkJ CQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmZtdFN0ciwgIiAle2Nhc2NhZGV9cyIpOworCQkJ CQkJbmV3X2pzb25iX1ZBKHN0YXRlLCAxLCAiY2FzY2FkZSIsIGpidlN0cmluZywgIkNBU0NBREUi KTsKKwkJCQkJfQorCQkJCX0KKworCQkJCS8qIFdlIGhhdmUgZnVsbCBmbXQgYnkgbm93LCBzbyBh ZGQganNvbmIgZWxlbWVudCBmb3IgdGhhdCAqLworCQkJCW5ld19qc29uYl9WQShzdGF0ZSwgMSwg ImZtdCIsIGpidlN0cmluZywgZm10U3RyLmRhdGEpOworCisJCQkJcGZyZWUoZm10U3RyLmRhdGEp OworCisJCQkJdmFsdWUgPSBwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBO VUxMKTsKKworCQkJCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOwor CQkJCWJyZWFrOworCQkJfQorCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0 ZWQgb2JqZWN0IHR5cGUgJWQiLCBub2RlLT5yZW5hbWVUeXBlKTsKKwl9CisKKwlyZXR1cm4gSnNv bmJWYWx1ZVRvSnNvbmIodmFsdWUpOworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlck9iamVj dFNjaGVtYVN0bXQgKEFMVEVSIFRBQkxFLi4uIFNFVCBTQ0hFTUEgY29tbWFuZCkKKyAqCisgKiBH aXZlbiB0aGUgb2JqZWN0KHRhYmxlKSBhZGRyZXNzIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNy ZWF0ZWQgaXQsIHJldHVybgorICogSnNvbmIgcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5k LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiAle29ianR5cGV9cyAle2lkZW50aXR5 fXMgU0VUIFNDSEVNQSAle25ld3NjaGVtYX1JCisgKi8KK3N0YXRpYyBKc29uYiAqCitkZXBhcnNl X0FsdGVyT2JqZWN0U2NoZW1hU3RtdChPYmplY3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNl dHJlZSwKKwkJCQkJCQkgIE9iamVjdEFkZHJlc3Mgb2xkX3NjaGVtYSkKK3sKKwlBbHRlck9iamVj dFNjaGVtYVN0bXQgKm5vZGUgPSAoQWx0ZXJPYmplY3RTY2hlbWFTdG10ICopIHBhcnNldHJlZTsK KwljaGFyCSAgICppZGVudGl0eTsKKwljaGFyCSAgICpuZXdfc2NoZW1hID0gbm9kZS0+bmV3c2No ZW1hOworCWNoYXIJICAgKm9sZF9zY2huYW1lOworCWNoYXIJICAgKmlkZW50OworCUpzb25iUGFy c2VTdGF0ZSAqc3RhdGUgPSBOVUxMOworCUpzb25iVmFsdWUgKnZhbHVlOworCisJLyoKKwkgKiBT aW5jZSB0aGUgY29tbWFuZCBoYXMgYWxyZWFkeSB0YWtlbiBwbGFjZSBmcm9tIHRoZSBwb2ludCBv ZiB2aWV3IG9mCisJICogY2F0YWxvZ3MsIGdldE9iamVjdElkZW50aXR5IHJldHVybnMgdGhlIG9i amVjdCBuYW1lIHdpdGggdGhlIGFscmVhZHkKKwkgKiBjaGFuZ2VkIHNjaGVtYS4gIFRoZSBvdXRw dXQgb2Ygb3VyIGRlcGFyc2luZyBtdXN0IHJldHVybiB0aGUgb3JpZ2luYWwKKwkgKiBzY2hlbWEg bmFtZSwgaG93ZXZlciwgc28gd2UgY2hvcCB0aGUgc2NoZW1hIG5hbWUgb2ZmIHRoZSBpZGVudGl0 eQorCSAqIHN0cmluZyBhbmQgdGhlbiBwcmVwZW5kIHRoZSBxdW90ZWQgc2NoZW1hIG5hbWUuCisJ ICoKKwkgKiBYWFggVGhpcyBpcyBwcmV0dHkgY2x1bmt5LiBDYW4gd2UgZG8gYmV0dGVyPworCSAq LworCWlkZW50aXR5ID0gZ2V0T2JqZWN0SWRlbnRpdHkoJmFkZHJlc3MsIGZhbHNlKTsKKwlvbGRf c2NobmFtZSA9IGdldF9uYW1lc3BhY2VfbmFtZShvbGRfc2NoZW1hLm9iamVjdElkKTsKKwlpZiAo IW9sZF9zY2huYW1lKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2No ZW1hIHdpdGggT0lEICV1IiwKKwkJCSBvbGRfc2NoZW1hLm9iamVjdElkKTsKKworCWlkZW50ID0g cHNwcmludGYoIiVzJXMiLCBxdW90ZV9pZGVudGlmaWVyKG9sZF9zY2huYW1lKSwKKwkJCQkJIGlk ZW50aXR5ICsgc3RybGVuKHF1b3RlX2lkZW50aWZpZXIobmV3X3NjaGVtYSkpKTsKKworCXB1c2hK c29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisJbmV3X2pzb25iX1ZB KHN0YXRlLCA0LAorCQkJCSAiZm10IiwgamJ2U3RyaW5nLAorCQkJCSAiQUxURVIgJXtvYmp0eXBl fXMgJXtpZGVudGl0eX1zIFNFVCBTQ0hFTUEiCisJCQkJICIgJXtuZXdzY2hlbWF9SSIsCisJCQkJ ICJvYmp0eXBlIiwgamJ2U3RyaW5nLAorCQkJCSBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5vYmpl Y3RUeXBlKSwKKwkJCQkgImlkZW50aXR5IiwgamJ2U3RyaW5nLCBpZGVudCwKKwkJCQkgIm5ld3Nj aGVtYSIsIGpidlN0cmluZywgbmV3X3NjaGVtYSk7CisJdmFsdWUgPSBwdXNoSnNvbmJWYWx1ZSgm c3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKworCXJldHVybiBKc29uYlZhbHVlVG9Kc29u Yih2YWx1ZSk7Cit9CisKIC8qCiAgKiBIYW5kbGUgZGVwYXJzaW5nIG9mIHNpbXBsZSBjb21tYW5k cy4KICAqCkBAIC0xNzg5LDYgKzM0MDIsMTEgQEAgZGVwYXJzZV9zaW1wbGVfY29tbWFuZChDb2xs ZWN0ZWRDb21tYW5kICpjbWQpCiAJLyogVGhpcyBzd2l0Y2ggbmVlZHMgdG8gaGFuZGxlIGV2ZXJ5 dGhpbmcgdGhhdCBQcm9jZXNzVXRpbGl0eVNsb3cgZG9lcyAqLwogCXN3aXRjaCAobm9kZVRhZyhw YXJzZXRyZWUpKQogCXsKKwkJY2FzZSBUX0FsdGVyT2JqZWN0U2NoZW1hU3RtdDoKKwkJCXJldHVy biBkZXBhcnNlX0FsdGVyT2JqZWN0U2NoZW1hU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsCisJ CQkJCQkJCQkJCQkgcGFyc2V0cmVlLAorCQkJCQkJCQkJCQkJIGNtZC0+ZC5zaW1wbGUuc2Vjb25k YXJ5T2JqZWN0KTsKKwogCQljYXNlIFRfQWx0ZXJTZXFTdG10OgogCQkJcmV0dXJuIGRlcGFyc2Vf QWx0ZXJTZXFTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOwogCkBAIC0xNzk3LDYgKzM0MTUsOCBA QCBkZXBhcnNlX3NpbXBsZV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCkKIAogCQljYXNl IFRfQ3JlYXRlU3RtdDoKIAkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBh cnNldHJlZSk7CisJCWNhc2UgVF9SZW5hbWVTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfUmVuYW1l U3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsIHBhcnNldHJlZSk7CiAKIAkJZGVmYXVsdDoKIAkJ CWVsb2coTE9HLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZSBpbiBkZXBhcnNlIGNvbW1hbmQ6ICVk IiwKQEAgLTE4NTEsNiArMzQ3MSw5IEBAIGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKENvbGxlY3Rl ZENvbW1hbmQgKmNtZCkKIAkJY2FzZSBTQ1RfU2ltcGxlOgogCQkJanNvbmIgPSBkZXBhcnNlX3Np bXBsZV9jb21tYW5kKGNtZCk7CiAJCQlicmVhazsKKwkJY2FzZSBTQ1RfQWx0ZXJUYWJsZToKKwkJ CWpzb25iID0gZGVwYXJzZV9BbHRlclRhYmxlU3RtdChjbWQpOworCQkJYnJlYWs7CiAJCWRlZmF1 bHQ6CiAJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBkZXBhcnNlIG5vZGUgdHlwZSAlZCIsIGNt ZC0+dHlwZSk7CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMgYi9z cmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwppbmRleCAzMGI1MWJmNGQzLi5jMGY3ZjI5NzQ3IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYworKysgYi9zcmMvYmFja2VuZC90 Y29wL3V0aWxpdHkuYwpAQCAtMjIwNiw2ICsyMjA2LDIzIEBAIFV0aWxpdHlDb250YWluc1F1ZXJ5 KE5vZGUgKnBhcnNldHJlZSkKIAl9CiB9CiAKKy8qCisgKiBzdHJpbmdpZnlfb2JqdHlwZQorICog CQlSZXR1cm4gdGhlIGdpdmVuIG9iamVjdCB0eXBlIGFzIGEgc3RyaW5nLgorICovCitjb25zdCBj aGFyICoKK3N0cmluZ2lmeV9vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlwZSkKK3sKKwlzd2l0Y2gg KG9ianR5cGUpCisJeworCQljYXNlIE9CSkVDVF9UQUJMRToKKwkJCXJldHVybiAiVEFCTEUiOwor CQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9iamVjdCB0eXBlICVkIiwg b2JqdHlwZSk7CisJfQorCisJcmV0dXJuICI/Pz8iOwkJCQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0 ICovCit9CiAKIC8qCiAgKiBBbHRlck9iamVjdFR5cGVDb21tYW5kVGFnCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS90Y29wL3V0aWxpdHkuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvdXRpbGl0eS5oCmlu ZGV4IDU5ZTY0YWVhMDcuLjIyY2UzZTFiNmYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3Av dXRpbGl0eS5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvdXRpbGl0eS5oCkBAIC05OSw2ICs5OSw4 IEBAIGV4dGVybiBRdWVyeSAqVXRpbGl0eUNvbnRhaW5zUXVlcnkoTm9kZSAqcGFyc2V0cmVlKTsK IAogZXh0ZXJuIENvbW1hbmRUYWcgQ3JlYXRlQ29tbWFuZFRhZyhOb2RlICpwYXJzZXRyZWUpOwog CitleHRlcm4gY29uc3QgY2hhciAqc3RyaW5naWZ5X29ianR5cGUoT2JqZWN0VHlwZSBvYmp0eXBl KTsKKwogc3RhdGljIGlubGluZSBjb25zdCBjaGFyICoKIENyZWF0ZUNvbW1hbmROYW1lKE5vZGUg KnBhcnNldHJlZSkKIHsKLS0gCjIuMzQuMQoK --_005_OS0PR01MB57163E6487EFF7378CB8E17C9438AOS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="0003-Enhance-the-event-trigger-to-support-DDL--2023_06_30.patch" Content-Description: 0003-Enhance-the-event-trigger-to-support-DDL--2023_06_30.patch Content-Disposition: attachment; filename="0003-Enhance-the-event-trigger-to-support-DDL--2023_06_30.patch"; size=13844; creation-date="Tue, 18 Jul 2023 07:04:19 GMT"; modification-date="Tue, 18 Jul 2023 07:09:22 GMT" Content-Transfer-Encoding: base64 RnJvbSBlNzMzOThjNjVkZjljYjM5MDc2YjIwOTIzNWFkMWI5MGZjN2JjOTMxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaHZldGEgTWFsaWsgPHNodmV0YS5tYWxpa0BnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMjEgSnVuIDIwMjMgMDk6MTg6NDkgKzA1MzAKU3ViamVjdDogW1BBVENIIDMv NV0gRW5oYW5jZSB0aGUgZXZlbnQgdHJpZ2dlciB0byBzdXBwb3J0IERETCBkZXBhcnNpbmcKCkFM VEVSIFRBQkxFIGNhbiBoYXZlIG11bHRpcGxlIHN1YmNvbW1hbmRzIHdoaWNoIG1pZ2h0IGluY2x1 ZGUgRFJPUCBDT0xVTU4KY29tbWFuZCBhbmQgQUxURVIgVFlQRSByZWZlcnJpbmcgdGhlIGRyb3Ag Y29sdW1uIGluIFVTSU5HIGV4cHJlc3Npb24uIEFzIHRoZQpkcm9wcGVkIGNvbHVtbiBjYW5ub3Qg YmUgYWNjZXNzZWQgYWZ0ZXIgdGhlIGV4ZWN1dGlvbiBvZiBEUk9QIENPTFVNTiwgYSBzcGVjaWFs CnRyaWdnZXIgaXMgYWRkZWQgdG8gaGFuZGxlIHRoaXMgY2FzZSBiZWZvcmUgdGhlIGRyb3AgY29s dW1uIGlzIGV4ZWN1dGVkLgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbGRlcGFyc2UuYyAg ICB8ICAxMSArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jIHwgMTg4ICsr KysrKysrKysrKysrKysrKysrKy0tLS0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRz LmMgICAgIHwgIDEwICstCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmggfCAg NDYgKysrKysrLQogc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCAgIHwgICAyICsK IDUgZmlsZXMgY2hhbmdlZCwgMjA0IGluc2VydGlvbnMoKyksIDUzIGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbGRlcGFyc2UuYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2RkbGRlcGFyc2UuYwppbmRleCBjYjAyNGI0NWI4Li42NWMyNTUwYWU1IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxkZXBhcnNlLmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvZGRsZGVwYXJzZS5jCkBAIC0yMzI2LDIyICsyMzI2LDEzIEBAIGRlcGFyc2Vf QWx0ZXJUYWJsZVN0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQogCQkJCQkgKi8KIAkJCQkJaWYg KGRlZi0+cmF3X2RlZmF1bHQpCiAJCQkJCXsKLQkJCQkJCURhdHVtCQlkZXBhcnNlZDsKLQkJCQkJ CWNoYXIJICAgKmRlZmV4cHI7Ci0JCQkJCQlMaXN0CSAgICpleHBycyA9IE5JTDsKLQotCQkJCQkJ ZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCBkZWYtPmNvb2tlZF9kZWZhdWx0KTsKLQkJCQkJCWRlZmV4 cHIgPSBub2RlVG9TdHJpbmcoZGVmLT5jb29rZWRfZGVmYXVsdCk7Ci0JCQkJCQlkZXBhcnNlZCA9 IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIsCi0JCQkJCQkJCQkJCQkJICAgQ1N0cmlu Z0dldFRleHREYXR1bShkZWZleHByKSwKLQkJCQkJCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGlk KHJlbCkpOwogCQkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm10U3ViLCAiICV7dXNpbmd9 cyIpOwogCQkJCQkJaW5zZXJ0X2pzb25iX2tleShzdGF0ZSwgInVzaW5nIik7CiAJCQkJCQlwdXNo SnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOwogCQkJCQkJbmV3X2pz b25iX1ZBKHN0YXRlLCAyLAogCQkJCQkJCQkJICJmbXQiLCBqYnZTdHJpbmcsICJVU0lORyAle2V4 cHJlc3Npb259cyIsCiAJCQkJCQkJCQkgImV4cHJlc3Npb24iLCBqYnZTdHJpbmcsCi0JCQkJCQkJ CQkgVGV4dERhdHVtR2V0Q1N0cmluZyhkZXBhcnNlZCkpOworCQkJCQkJCQkJIHN1Yi0+dXNpbmdl eHByKTsKIAkJCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwp OwogCQkJCQl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdn ZXIuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwppbmRleCA0ZDQ4ZTQ5 MGVkLi44YzJhNDk0ZGNiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90 cmlnZ2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCkBAIC0z Niw2ICszNiw3IEBACiAjaW5jbHVkZSAibGliL2lsaXN0LmgiCiAjaW5jbHVkZSAibWlzY2FkbWlu LmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2Z1bmMuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFy c2VyLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAidGNvcC9kZGxkZXBhcnNlLmgi CiAjaW5jbHVkZSAidGNvcC9kZXBhcnNlX3V0aWxpdHkuaCIKQEAgLTQ5LDQ1ICs1MCw3IEBACiAj aW5jbHVkZSAidXRpbHMvcmVsLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKIAotdHlw ZWRlZiBzdHJ1Y3QgRXZlbnRUcmlnZ2VyUXVlcnlTdGF0ZQotewotCS8qIG1lbW9yeSBjb250ZXh0 IGZvciB0aGlzIHN0YXRlJ3Mgb2JqZWN0cyAqLwotCU1lbW9yeUNvbnRleHQgY3h0OwotCi0JLyog c3FsX2Ryb3AgKi8KLQlzbGlzdF9oZWFkCVNRTERyb3BMaXN0OwotCWJvb2wJCWluX3NxbF9kcm9w OwotCi0JLyogdGFibGVfcmV3cml0ZSAqLwotCU9pZAkJCXRhYmxlX3Jld3JpdGVfb2lkOwkvKiBJ bnZhbGlkT2lkLCBvciBzZXQgZm9yIHRhYmxlX3Jld3JpdGUKLQkJCQkJCQkJCSAqIGV2ZW50ICov Ci0JaW50CQkJdGFibGVfcmV3cml0ZV9yZWFzb247CS8qIEFUX1JFV1JJVEUgcmVhc29uICovCi0K LQkvKiBTdXBwb3J0IGZvciBjb21tYW5kIGNvbGxlY3Rpb24gKi8KLQlib29sCQljb21tYW5kQ29s bGVjdGlvbkluaGliaXRlZDsKLQlDb2xsZWN0ZWRDb21tYW5kICpjdXJyZW50Q29tbWFuZDsKLQlM aXN0CSAgICpjb21tYW5kTGlzdDsJLyogbGlzdCBvZiBDb2xsZWN0ZWRDb21tYW5kOyBzZWUKLQkJ CQkJCQkJICogZGVwYXJzZV91dGlsaXR5LmggKi8KLQlzdHJ1Y3QgRXZlbnRUcmlnZ2VyUXVlcnlT dGF0ZSAqcHJldmlvdXM7Ci19IEV2ZW50VHJpZ2dlclF1ZXJ5U3RhdGU7Ci0KLXN0YXRpYyBFdmVu dFRyaWdnZXJRdWVyeVN0YXRlICpjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUgPSBOVUxMOwotCi0v KiBTdXBwb3J0IGZvciBkcm9wcGVkIG9iamVjdHMgKi8KLXR5cGVkZWYgc3RydWN0IFNRTERyb3BP YmplY3QKLXsKLQlPYmplY3RBZGRyZXNzIGFkZHJlc3M7Ci0JY29uc3QgY2hhciAqc2NoZW1hbmFt ZTsKLQljb25zdCBjaGFyICpvYmpuYW1lOwotCWNvbnN0IGNoYXIgKm9iamlkZW50aXR5OwotCWNv bnN0IGNoYXIgKm9iamVjdHR5cGU7Ci0JTGlzdAkgICAqYWRkcm5hbWVzOwotCUxpc3QJICAgKmFk ZHJhcmdzOwotCWJvb2wJCW9yaWdpbmFsOwotCWJvb2wJCW5vcm1hbDsKLQlib29sCQlpc3RlbXA7 Ci0Jc2xpc3Rfbm9kZQluZXh0OwotfSBTUUxEcm9wT2JqZWN0OworRXZlbnRUcmlnZ2VyUXVlcnlT dGF0ZSAqY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlID0gTlVMTDsKIAogc3RhdGljIHZvaWQgQWx0 ZXJFdmVudFRyaWdnZXJPd25lcl9pbnRlcm5hbChSZWxhdGlvbiByZWwsCiAJCQkJCQkJCQkJCUhl YXBUdXBsZSB0dXAsCkBAIC0xNTM4LDYgKzE1MDEsNyBAQCBFdmVudFRyaWdnZXJBbHRlclRhYmxl U3RhcnQoTm9kZSAqcGFyc2V0cmVlKQogCiAJY29tbWFuZC0+ZC5hbHRlclRhYmxlLmNsYXNzSWQg PSBSZWxhdGlvblJlbGF0aW9uSWQ7CiAJY29tbWFuZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkID0g SW52YWxpZE9pZDsKKwljb21tYW5kLT5kLmFsdGVyVGFibGUucmV3cml0ZSA9IGZhbHNlOwogCWNv bW1hbmQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzID0gTklMOwogCWNvbW1hbmQtPnBhcnNldHJlZSA9 IGNvcHlPYmplY3QocGFyc2V0cmVlKTsKIApAQCAtMTU3MSw3ICsxNTM1LDcgQEAgRXZlbnRUcmln Z2VyQWx0ZXJUYWJsZVJlbGlkKE9pZCBvYmplY3RJZCkKICAqIGludGVybmFsbHksIHNvIHRoYXQn cyBhbGwgdGhhdCB0aGlzIGNvZGUgbmVlZHMgdG8gaGFuZGxlIGF0IHRoZSBtb21lbnQuCiAgKi8K IHZvaWQKLUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKE5vZGUgKnN1YmNtZCwg T2JqZWN0QWRkcmVzcyBhZGRyZXNzKQorRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJj bWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MsIGJvb2wgcmV3cml0ZSkKIHsK IAlNZW1vcnlDb250ZXh0IG9sZGN4dDsKIAlDb2xsZWN0ZWRBVFN1YmNtZCAqbmV3c3ViOwpAQCAt MTU5MSwxMiArMTU1NSwxNTYgQEAgRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQo Tm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MpCiAJbmV3c3ViLT5hZGRyZXNzID0g YWRkcmVzczsKIAluZXdzdWItPnBhcnNldHJlZSA9IGNvcHlPYmplY3Qoc3ViY21kKTsKIAorCWN1 cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJsZS5yZXdy aXRlIHw9IHJld3JpdGU7CiAJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFu ZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMgPQogCQlsYXBwZW5kKGN1cnJlbnRFdmVudFRyaWdnZXJT dGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzLCBuZXdzdWIpOwogCiAJ TWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CiB9CiAKKy8qCisgKiBFdmVudFRyaWdnZXJB bHRlclR5cGVTdGFydAorICoJCVNhdmUgZGF0YSBhYm91dCBhIHNpbmdsZSBwYXJ0IG9mIGFuIEFM VEVSIFRZUEUuCisgKgorICogQUxURVIgVEFCTEUgY2FuIGhhdmUgbXVsdGlwbGUgc3ViY29tbWFu ZHMgd2hpY2ggbWlnaHQgaW5jbHVkZSBEUk9QIENPTFVNTgorICogY29tbWFuZCBhbmQgQUxURVIg VFlQRSByZWZlcnJpbmcgdGhlIGRyb3AgY29sdW1uIGluIFVTSU5HIGV4cHJlc3Npb24uCisgKiBB cyB0aGUgZHJvcHBlZCBjb2x1bW4gY2Fubm90IGJlIGFjY2Vzc2VkIGFmdGVyIHRoZSBleGVjdXRp b24gb2YgRFJPUCBDT0xVTU4sCisgKiBhIHNwZWNpYWwgdHJpZ2dlciBpcyByZXF1aXJlZCB0byBo YW5kbGUgdGhpcyBjYXNlIGJlZm9yZSB0aGUgZHJvcCBjb2x1bW4gaXMKKyAqIGV4ZWN1dGVkLgor ICovCit2b2lkCitFdmVudFRyaWdnZXJBbHRlclR5cGVTdGFydChBbHRlclRhYmxlQ21kICpzdWJj bWQsIFJlbGF0aW9uIHJlbCkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwlDb2xsZWN0ZWRB VFN1YmNtZCAqbmV3c3ViOworCUNvbHVtbkRlZiAgKmRlZjsKKwlSZWxhdGlvbglhdHRyZWxhdGlv bjsKKwlIZWFwVHVwbGUJaGVhcFR1cDsKKwlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRUdXA7CisJQXR0 ck51bWJlcglhdHRudW07CisJT2JqZWN0QWRkcmVzcyBhZGRyZXNzOworCisJLyogaWdub3JlIGlm IGV2ZW50IHRyaWdnZXIgY29udGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICov CisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dl clN0YXRlLT5jb21tYW5kQ29sbGVjdGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJQXNzZXJ0 KElzQShzdWJjbWQsIEFsdGVyVGFibGVDbWQpKTsKKwlBc3NlcnQoc3ViY21kLT5zdWJ0eXBlID09 IEFUX0FsdGVyQ29sdW1uVHlwZSk7CisJQXNzZXJ0KGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+ Y3VycmVudENvbW1hbmQgIT0gTlVMTCk7CisJQXNzZXJ0KE9pZElzVmFsaWQoY3VycmVudEV2ZW50 VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkKSk7CisK KwlkZWYgPSAoQ29sdW1uRGVmICopIHN1YmNtZC0+ZGVmOworCUFzc2VydChJc0EoZGVmLCBDb2x1 bW5EZWYpKTsKKworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjdXJyZW50RXZlbnRU cmlnZ2VyU3RhdGUtPmN4dCk7CisKKwluZXdzdWIgPSBwYWxsb2Moc2l6ZW9mKENvbGxlY3RlZEFU U3ViY21kKSk7CisJbmV3c3ViLT5wYXJzZXRyZWUgPSAoTm9kZSAqKWNvcHlPYmplY3Qoc3ViY21k KTsKKworCWF0dHJlbGF0aW9uID0gdGFibGVfb3BlbihBdHRyaWJ1dGVSZWxhdGlvbklkLCBSb3dF eGNsdXNpdmVMb2NrKTsKKworCS8qIExvb2sgdXAgdGhlIHRhcmdldCBjb2x1bW4gKi8KKwloZWFw VHVwID0gU2VhcmNoU3lzQ2FjaGVDb3B5QXR0TmFtZShSZWxhdGlvbkdldFJlbGlkKHJlbCksIHN1 YmNtZC0+bmFtZSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGhlYXBUdXApKSAvKiBzaG91bGRu J3QgaGFwcGVuICovCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX1VOREVG SU5FRF9DT0xVTU4pLAorCQkJCWVycm1zZygiY29sdW1uIFwiJXNcIiBvZiByZWxhdGlvbiBcIiVz XCIgZG9lcyBub3QgZXhpc3QiLAorCQkJCQkgICBzdWJjbWQtPm5hbWUsIFJlbGF0aW9uR2V0UmVs YXRpb25OYW1lKHJlbCkpKTsKKwlhdHRUdXAgPSAoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVD VChoZWFwVHVwKTsKKwlhdHRudW0gPSBhdHRUdXAtPmF0dG51bTsKKworCU9iamVjdEFkZHJlc3NT dWJTZXQoYWRkcmVzcywgUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJUmVsYXRpb25HZXRSZWxp ZChyZWwpLCBhdHRudW0pOworCWhlYXBfZnJlZXR1cGxlKGhlYXBUdXApOworCXRhYmxlX2Nsb3Nl KGF0dHJlbGF0aW9uLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwluZXdzdWItPmFkZHJlc3MgPSBhZGRy ZXNzOworCisJaWYgKGRlZi0+cmF3X2RlZmF1bHQpCisJeworCQlPdmVycmlkZVNlYXJjaFBhdGgg Km92ZXJyaWRlUGF0aDsKKwkJY2hhcgkgICAqZGVmZXhwcjsKKworCQkvKgorCQkgKiBXZSB3YW50 IGFsbCBvYmplY3QgbmFtZXMgdG8gYmUgcXVhbGlmaWVkIHdoZW4gZGVwYXJzaW5nIHRoZQorCQkg KiBleHByZXNzaW9uLCBzbyB0aGF0IHJlc3VsdHMgYXJlICJwb3J0YWJsZSIgdG8gZW52aXJvbm1l bnRzIHdpdGgKKwkJICogZGlmZmVyZW50IHNlYXJjaF9wYXRoIHNldHRpbmdzLiBSYXRoZXIgdGhh biBpbmplY3Qgd2hhdCB3b3VsZCBiZQorCQkgKiByZXBldGl0aXZlIGNhbGxzIHRvIG92ZXJyaWRl IHNlYXJjaCBwYXRoIGFsbCBvdmVyIHRoZSBwbGFjZSwgd2UgZG8KKwkJICogaXQgY2VudHJhbGx5 IGhlcmUuCisJCSAqLworCQlvdmVycmlkZVBhdGggPSBHZXRPdmVycmlkZVNlYXJjaFBhdGgoQ3Vy cmVudE1lbW9yeUNvbnRleHQpOworCQlvdmVycmlkZVBhdGgtPnNjaGVtYXMgPSBOSUw7CisJCW92 ZXJyaWRlUGF0aC0+YWRkQ2F0YWxvZyA9IGZhbHNlOworCQlvdmVycmlkZVBhdGgtPmFkZFRlbXAg PSB0cnVlOworCQlQdXNoT3ZlcnJpZGVTZWFyY2hQYXRoKG92ZXJyaWRlUGF0aCk7CisKKwkJZGVm ZXhwciA9IG5vZGVUb1N0cmluZyhkZWYtPmNvb2tlZF9kZWZhdWx0KTsKKwkJbmV3c3ViLT51c2lu Z2V4cHIgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4 cHIsCisJCQkJCQkJCQkJCQkJCQkJCUNTdHJpbmdHZXRUZXh0RGF0dW0oZGVmZXhwciksCisJCQkJ CQkJCQkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsaWQocmVsKSkpOworCisJCVBvcE92ZXJyaWRlU2Vh cmNoUGF0aCgpOworCX0KKwllbHNlCisJCW5ld3N1Yi0+dXNpbmdleHByID0gTlVMTDsKKworCWN1 cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJsZS5zdWJj bWRzID0KKwkJbGFwcGVuZChjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5k LT5kLmFsdGVyVGFibGUuc3ViY21kcywgbmV3c3ViKTsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hU byhvbGRjeHQpOworfQorCisvKgorICogRXZlbnRUcmlnZ2VyQWx0ZXJUeXBlRW5kCisgKgkJRmlu aXNoIHVwIHNhdmluZyBhbiBBTFRFUiBUWVBFIGNvbW1hbmQsIGFuZCBhZGQgaXQgdG8gY29tbWFu ZCBsaXN0LgorICovCit2b2lkCitFdmVudFRyaWdnZXJBbHRlclR5cGVFbmQoTm9kZSAqc3ViY21k LCBPYmplY3RBZGRyZXNzIGFkZHJlc3MsIGJvb2wgcmV3cml0ZSkKK3sKKwlNZW1vcnlDb250ZXh0 IG9sZGN4dDsKKwlDb2xsZWN0ZWRBVFN1YmNtZCAqbmV3c3ViOworCUxpc3RDZWxsICAgKmNlbGw7 CisJQ29sbGVjdGVkQ29tbWFuZCAqY21kOworCUFsdGVyVGFibGVDbWQgKmFsdHN1YmNtZCA9IChB bHRlclRhYmxlQ21kICopc3ViY21kOworCisJLyogaWdub3JlIGlmIGV2ZW50IHRyaWdnZXIgY29u dGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICovCisJaWYgKCFjdXJyZW50RXZl bnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kQ29s bGVjdGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJY21kID0gY3VycmVudEV2ZW50VHJpZ2dl clN0YXRlLT5jdXJyZW50Q29tbWFuZDsKKworCUFzc2VydChJc0Eoc3ViY21kLCBBbHRlclRhYmxl Q21kKSk7CisJQXNzZXJ0KGNtZCAhPSBOVUxMKTsKKwlBc3NlcnQoT2lkSXNWYWxpZChjbWQtPmQu YWx0ZXJUYWJsZS5vYmplY3RJZCkpOworCisJZm9yZWFjaChjZWxsLCBjbWQtPmQuYWx0ZXJUYWJs ZS5zdWJjbWRzKQorCXsKKwkJQ29sbGVjdGVkQVRTdWJjbWQgKnN1YiA9IChDb2xsZWN0ZWRBVFN1 YmNtZCAqKSBsZmlyc3QoY2VsbCk7CisJCUFsdGVyVGFibGVDbWQgKmNvbGxjbWQgPSAoQWx0ZXJU YWJsZUNtZCAqKSBzdWItPnBhcnNldHJlZTsKKworCQlpZiAoY29sbGNtZC0+c3VidHlwZSA9PSBh bHRzdWJjbWQtPnN1YnR5cGUgJiYKKwkJCWFkZHJlc3MuY2xhc3NJZCA9PSBzdWItPmFkZHJlc3Mu Y2xhc3NJZCAmJgorCQkJYWRkcmVzcy5vYmplY3RJZCA9PSBzdWItPmFkZHJlc3Mub2JqZWN0SWQg JiYKKwkJCWFkZHJlc3Mub2JqZWN0U3ViSWQgPT0gc3ViLT5hZGRyZXNzLm9iamVjdFN1YklkKQor CQl7CisJCQljbWQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlIHw9IHJld3JpdGU7CisJCQlyZXR1cm47 CisJCX0KKwl9CisKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY3VycmVudEV2ZW50 VHJpZ2dlclN0YXRlLT5jeHQpOworCisJbmV3c3ViID0gcGFsbG9jKHNpemVvZihDb2xsZWN0ZWRB VFN1YmNtZCkpOworCW5ld3N1Yi0+YWRkcmVzcyA9IGFkZHJlc3M7CisJbmV3c3ViLT5wYXJzZXRy ZWUgPSBjb3B5T2JqZWN0KHN1YmNtZCk7CisKKwljbWQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlIHw9 IHJld3JpdGU7CisJY21kLT5kLmFsdGVyVGFibGUuc3ViY21kcyA9IGxhcHBlbmQoY21kLT5kLmFs dGVyVGFibGUuc3ViY21kcywgbmV3c3ViKTsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRj eHQpOworfQorCiAvKgogICogRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZUVuZAogICoJCUZpbmlzaCB1 cCBzYXZpbmcgYW4gQUxURVIgVEFCTEUgY29tbWFuZCwgYW5kIGFkZCBpdCB0byBjb21tYW5kIGxp c3QuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IDYwNGMxZGU0NzQuLjY3NWNhNzNmZGEg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC00NzQyLDYgKzQ3NDIsOSBAQCBBVFByZXBD bWQoTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVsLCBBbHRlclRhYmxlQ21kICpjbWQsCiAJCQlj bWQgPSBBVFBhcnNlVHJhbnNmb3JtQ21kKHdxdWV1ZSwgdGFiLCByZWwsIGNtZCwgcmVjdXJzZSwg bG9ja21vZGUsCiAJCQkJCQkJCQkgIEFUX1BBU1NfVU5TRVQsIGNvbnRleHQpOwogCQkJQXNzZXJ0 KGNtZCAhPSBOVUxMKTsKKworCQkJRXZlbnRUcmlnZ2VyQWx0ZXJUeXBlU3RhcnQoY21kLCByZWwp OworCiAJCQkvKiBQZXJmb3JtcyBvd24gcmVjdXJzaW9uICovCiAJCQlBVFByZXBBbHRlckNvbHVt blR5cGUod3F1ZXVlLCB0YWIsIHJlbCwgcmVjdXJzZSwgcmVjdXJzaW5nLCBjbWQsCiAJCQkJCQkJ CSAgbG9ja21vZGUsIGNvbnRleHQpOwpAQCAtNTAxMyw2ICs1MDE2LDcgQEAgQVRFeGVjQ21kKExp c3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUluZm8gKnRhYiwKIHsKIAlPYmplY3RBZGRyZXNzIGFk ZHJlc3MgPSBJbnZhbGlkT2JqZWN0QWRkcmVzczsKIAlSZWxhdGlvbglyZWwgPSB0YWItPnJlbDsK Kwlib29sCQljb21tYW5kQ29sbGVjdGVkID0gZmFsc2U7CiAKIAlzd2l0Y2ggKGNtZC0+c3VidHlw ZSkKIAl7CkBAIC01MTM2LDYgKzUxNDAsOCBAQCBBVEV4ZWNDbWQoTGlzdCAqKndxdWV1ZSwgQWx0 ZXJlZFRhYmxlSW5mbyAqdGFiLAogCQljYXNlIEFUX0FsdGVyQ29sdW1uVHlwZToJLyogQUxURVIg Q09MVU1OIFRZUEUgKi8KIAkJCS8qIHBhcnNlIHRyYW5zZm9ybWF0aW9uIHdhcyBkb25lIGVhcmxp ZXIgKi8KIAkJCWFkZHJlc3MgPSBBVEV4ZWNBbHRlckNvbHVtblR5cGUodGFiLCByZWwsIGNtZCwg bG9ja21vZGUpOworCQkJRXZlbnRUcmlnZ2VyQWx0ZXJUeXBlRW5kKChOb2RlICopIGNtZCwgYWRk cmVzcywgdGFiLT5yZXdyaXRlKTsKKwkJCWNvbW1hbmRDb2xsZWN0ZWQgPSB0cnVlOwogCQkJYnJl YWs7CiAJCWNhc2UgQVRfQWx0ZXJDb2x1bW5HZW5lcmljT3B0aW9uczoJLyogQUxURVIgQ09MVU1O IE9QVElPTlMgKi8KIAkJCWFkZHJlc3MgPQpAQCAtNTMwOCw4ICs1MzE0LDggQEAgQVRFeGVjQ21k KExpc3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUluZm8gKnRhYiwKIAkvKgogCSAqIFJlcG9ydCB0 aGUgc3ViY29tbWFuZCB0byBpbnRlcmVzdGVkIGV2ZW50IHRyaWdnZXJzLgogCSAqLwotCWlmIChj bWQpCi0JCUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKChOb2RlICopIGNtZCwg YWRkcmVzcyk7CisJaWYgKGNtZCAmJiAhY29tbWFuZENvbGxlY3RlZCkKKwkJRXZlbnRUcmlnZ2Vy Q29sbGVjdEFsdGVyVGFibGVTdWJjbWQoKE5vZGUgKikgY21kLCBhZGRyZXNzLCB0YWItPnJld3Jp dGUpOwogCiAJLyoKIAkgKiBCdW1wIHRoZSBjb21tYW5kIGNvdW50ZXIgdG8gZW5zdXJlIHRoZSBu ZXh0IHN1YmNvbW1hbmQgaW4gdGhlIHNlcXVlbmNlCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9j b21tYW5kcy9ldmVudF90cmlnZ2VyLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmln Z2VyLmgKaW5kZXggNWVkNmVjZTU1NS4uMjhiMzQ4NmI5ZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2 ZW50X3RyaWdnZXIuaApAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvZGVwZW5k ZW5jeS5oIgogI2luY2x1ZGUgImNhdGFsb2cvb2JqZWN0YWRkcmVzcy5oIgogI2luY2x1ZGUgImNh dGFsb2cvcGdfZXZlbnRfdHJpZ2dlci5oIgorI2luY2x1ZGUgImxpYi9pbGlzdC5oIgogI2luY2x1 ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKICNpbmNsdWRlICJ0Y29wL2NtZHRhZy5oIgogI2luY2x1 ZGUgInRjb3AvZGVwYXJzZV91dGlsaXR5LmgiCkBAIC0yOSw2ICszMCw0NCBAQCB0eXBlZGVmIHN0 cnVjdCBFdmVudFRyaWdnZXJEYXRhCiAJQ29tbWFuZFRhZwl0YWc7CiB9IEV2ZW50VHJpZ2dlckRh dGE7CiAKK3R5cGVkZWYgc3RydWN0IEV2ZW50VHJpZ2dlclF1ZXJ5U3RhdGUKK3sKKwkvKiBtZW1v cnkgY29udGV4dCBmb3IgdGhpcyBzdGF0ZSdzIG9iamVjdHMgKi8KKwlNZW1vcnlDb250ZXh0IGN4 dDsKKworCS8qIHNxbF9kcm9wICovCisJc2xpc3RfaGVhZAlTUUxEcm9wTGlzdDsKKwlib29sCQlp bl9zcWxfZHJvcDsKKworCS8qIHRhYmxlX3Jld3JpdGUgKi8KKwlPaWQJCQl0YWJsZV9yZXdyaXRl X29pZDsJLyogSW52YWxpZE9pZCwgb3Igc2V0IGZvciB0YWJsZV9yZXdyaXRlCisJCQkJCQkJCQkg KiBldmVudCAqLworCWludAkJCXRhYmxlX3Jld3JpdGVfcmVhc29uOwkvKiBBVF9SRVdSSVRFIHJl YXNvbiAqLworCisJLyogU3VwcG9ydCBmb3IgY29tbWFuZCBjb2xsZWN0aW9uICovCisJYm9vbAkJ Y29tbWFuZENvbGxlY3Rpb25JbmhpYml0ZWQ7CisJQ29sbGVjdGVkQ29tbWFuZCAqY3VycmVudENv bW1hbmQ7CisJTGlzdAkgICAqY29tbWFuZExpc3Q7CS8qIGxpc3Qgb2YgQ29sbGVjdGVkQ29tbWFu ZDsgc2VlCisJCQkJCQkJCSAqIGRlcGFyc2VfdXRpbGl0eS5oICovCisJc3RydWN0IEV2ZW50VHJp Z2dlclF1ZXJ5U3RhdGUgKnByZXZpb3VzOworfSBFdmVudFRyaWdnZXJRdWVyeVN0YXRlOworCisv KiBTdXBwb3J0IGZvciBkcm9wcGVkIG9iamVjdHMgKi8KK3R5cGVkZWYgc3RydWN0IFNRTERyb3BP YmplY3QKK3sKKwlPYmplY3RBZGRyZXNzIGFkZHJlc3M7CisJY29uc3QgY2hhciAqc2NoZW1hbmFt ZTsKKwljb25zdCBjaGFyICpvYmpuYW1lOworCWNvbnN0IGNoYXIgKm9iamlkZW50aXR5OworCWNv bnN0IGNoYXIgKm9iamVjdHR5cGU7CisJTGlzdAkgICAqYWRkcm5hbWVzOworCUxpc3QJICAgKmFk ZHJhcmdzOworCWJvb2wJCW9yaWdpbmFsOworCWJvb2wJCW5vcm1hbDsKKwlib29sCQlpc3RlbXA7 CisJc2xpc3Rfbm9kZQluZXh0OworfSBTUUxEcm9wT2JqZWN0OworCiAjZGVmaW5lIEFUX1JFV1JJ VEVfQUxURVJfUEVSU0lTVEVOQ0UJMHgwMQogI2RlZmluZSBBVF9SRVdSSVRFX0RFRkFVTFRfVkFM CQkJMHgwMgogI2RlZmluZSBBVF9SRVdSSVRFX0NPTFVNTl9SRVdSSVRFCQkweDA0CkBAIC03MSw3 ICsxMTAsMTIgQEAgZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVjdFNpbXBsZUNvbW1hbmQo T2JqZWN0QWRkcmVzcyBhZGRyZXNzLAogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJs ZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclRh YmxlUmVsaWQoT2lkIG9iamVjdElkKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RB bHRlclRhYmxlU3ViY21kKE5vZGUgKnN1YmNtZCwKLQkJCQkJCQkJCQkJCU9iamVjdEFkZHJlc3Mg YWRkcmVzcyk7CisJCQkJCQkJCQkJCQlPYmplY3RBZGRyZXNzIGFkZHJlc3MsCisJCQkJCQkJCQkJ CQlib29sIHJld3JpdGUpOworCitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclR5cGVTdGFy dChBbHRlclRhYmxlQ21kICpzdWJjbWQsIFJlbGF0aW9uIHJlbCk7CitleHRlcm4gdm9pZCBFdmVu dFRyaWdnZXJBbHRlclR5cGVFbmQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJlc3Ms CisJCQkJCQkJCQkgYm9vbCByZXdyaXRlKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVy VGFibGVFbmQodm9pZCk7CiAKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RHcmFudChJ bnRlcm5hbEdyYW50ICppc3RtdCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFy c2VfdXRpbGl0eS5oIGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaAppbmRleCBi NTg1ODEwYjlhLi4xODMxZWM5YWFlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFy c2VfdXRpbGl0eS5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKQEAg LTM5LDYgKzM5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQ29sbGVjdGVkQVRTdWJjbWQKIHsKIAlPYmpl Y3RBZGRyZXNzIGFkZHJlc3M7CQkvKiBhZmZlY3RlZCBjb2x1bW4sIGNvbnN0cmFpbnQsIGluZGV4 LCAuLi4gKi8KIAlOb2RlCSAgICpwYXJzZXRyZWU7CisJY2hhcgkgICAqdXNpbmdleHByOwogfSBD b2xsZWN0ZWRBVFN1YmNtZDsKIAogdHlwZWRlZiBzdHJ1Y3QgQ29sbGVjdGVkQ29tbWFuZApAQCAt NjIsNiArNjMsNyBAQCB0eXBlZGVmIHN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kCiAJCXsKIAkJCU9p ZAkJCW9iamVjdElkOwogCQkJT2lkCQkJY2xhc3NJZDsKKwkJCWJvb2wJCXJld3JpdGU7CiAJCQlM aXN0CSAgICpzdWJjbWRzOwogCQl9CQkJYWx0ZXJUYWJsZTsKIAotLSAKMi4zNC4xCgo= --_005_OS0PR01MB57163E6487EFF7378CB8E17C9438AOS0PR01MB5716jpnp_--