Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nXtrM-0002lE-4Z for pgsql-hackers@arkaria.postgresql.org; Sat, 26 Mar 2022 00:00:49 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nXtrJ-0004AD-Mp for pgsql-hackers@arkaria.postgresql.org; Sat, 26 Mar 2022 00:00:45 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nXtrI-0004A3-20 for pgsql-hackers@lists.postgresql.org; Sat, 26 Mar 2022 00:00:45 +0000 Received: from mail-dm6nam10on2059.outbound.protection.outlook.com ([40.107.93.59] helo=NAM10-DM6-obe.outbound.protection.outlook.com) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nXtr3-0006Ae-CF for pgsql-hackers@postgresql.org; Sat, 26 Mar 2022 00:00:42 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=B2dwhQ2jEwvQ7jR0KiFOmrLeBrS3pplHx5aFpJbEvMkCcTmENyfXYX+u/KzX+5Zxm4mLUEi+B1Gks29CGrw704RC5uzum3H7b9gd4OoJuKleNvHdA0GlEEYy1yy2/FPWwyDZ97ClepFwlvpVd8yF8HZsfz1O8RHwcKjx+mMU+9VbLfP4EC7MwYZBy7XJdbep86xm0sV9aqJvKsB1sXWPiSUYgv/NcMk5KQ2EqJbCYi/G/oiQ5TvBnuHV1m/rqwqTov2as3LMjS5dNngRXAMKMah75ychwEXWsYESClZm9QznJY5vcoCrPLxKA9hXN1JQoAnRs9sVjtUAdxusV6ndQQ== 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=j6Lz/ilV2rtXH+t3RFrA1MK7M9Bv2jZ8qBT1/awQyNw=; b=ETAs08KvpcAmWyhWhLBySfqhlNJbH3HGWiLoGQ6G70h7q2ufBtlNjCEkRGW167MXTqbCQA8pwEp67494vGqXxQAIH9R8j2B4K1RcOfbZLOeGT1/CSCBGDDg9LycImBLgoHYB0AkGfJo5prQCmSlMvdQCSnpTGi0rZ+LZxe2CavcTvfA8zVlwR8kTvCahr7JiPjzJuiG+UoFsDETcyq6rxfbN6Dqx9giWLfdT5x3iHZJf8RLlhZOtYp2hErsi7QO+pJsHT//Diojg9xEAQ5lcF7bKwzMkNI0xa9EhnPZGyEKs1DrJx8Nm7YOEQrvSz4kYAc7rOJmKOdyKrbe+XnXFFQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=vmware.com; dmarc=pass action=none header.from=vmware.com; dkim=pass header.d=vmware.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vmware.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=j6Lz/ilV2rtXH+t3RFrA1MK7M9Bv2jZ8qBT1/awQyNw=; b=XLqqbJbKPZGi3bpSk1tfeuFrEfbkl9RAYTW7q3tBZQI49JZVhDPizc6lW0xOH703Uc1Ch/qHZ2O5DrcVoy4fUv6Ud9fS/jm00YNVtiaiyoxbFCccMl+9/VAJQVyyTgcDJeNqNmVlVD+K2xa3HDbza40W5qn5T9mOaWMNQo3kgA4= Received: from CO1PR05MB8087.namprd05.prod.outlook.com (2603:10b6:303:db::16) by DM6PR05MB4089.namprd05.prod.outlook.com (2603:10b6:5:92::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5123.8; Sat, 26 Mar 2022 00:00:23 +0000 Received: from CO1PR05MB8087.namprd05.prod.outlook.com ([fe80::318f:4d91:823:8e1a]) by CO1PR05MB8087.namprd05.prod.outlook.com ([fe80::318f:4d91:823:8e1a%8]) with mapi id 15.20.5123.010; Sat, 26 Mar 2022 00:00:23 +0000 From: Jacob Champion To: "pgsql-hackers@postgresql.org" CC: "hlinnaka@iki.fi" , "michael@paquier.xyz" , "smilingsamay@gmail.com" Subject: Re: [PoC] Federated Authn/z with OAUTHBEARER Thread-Topic: [PoC] Federated Authn/z with OAUTHBEARER Thread-Index: AQHXXISc0BUwpEo1NUi6cD0VutaLHasZf38AgAdCaoCAZEa6AIEsNj6AgCFRDoA= Date: Sat, 26 Mar 2022 00:00:22 +0000 Message-ID: <4db7d3ea061f47a15fc6d865f53dd327ea2975fb.camel@vmware.com> References: <2f06a4aef1d5defe4b7aaec01478572e5557d32a.camel@vmware.com> <8a5a35b31c3f25f6b047e77def0445a60399981d.camel@vmware.com> <0e86fe7e3534fb05db02379fed404a2010eb1d62.camel@vmware.com> In-Reply-To: <0e86fe7e3534fb05db02379fed404a2010eb1d62.camel@vmware.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: user-agent: Evolution 3.36.5-0ubuntu1 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=vmware.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 7a4d4555-b284-479f-aab4-08da0ebb9fea x-ms-traffictypediagnostic: DM6PR05MB4089:EE_ x-ms-exchange-atpmessageproperties: SA|SL x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: zhGnqK4bYxjT6NuFuF64o9rtSGzW7lR4qOOzPTF328mQR9V65FrW/muIoMLy6krtMJ5PNhbUK54W+1Zu0g2rW6kuCAyuZZDWUtq2IkfBP2Klp6f0YbzvvYRwsDIMiG15+yRYS6NncHAdi0U0RsfUTkbaAVIeB7Zf+29wQRNJkE6zt09Gca1SDkMNcY2igx5maPSOrbb0EyP1RtcpUNxO7NtwcnycC32mALL6iYv4Wvkgm6tGR36e9dvYPkTuhn2ZayReAsovbrGawlhmMRFZgF/6Bielk/yPwiEVL+BhnlRPu2aWosmWIHOCLlza4MZvp94+ch/ECidCbU41bR8cL0SN4qJ/dOF3aLvacdDIYO+a24IlHYITm4fBzLOUNj/R52Fyh9L36/oSAkbaqkwkca+VBCnoVRH5MPnIYoYuiPMEQHN4ubnUWynxBp517CNYdKeWkr6+xQyoHiWpXm+0vsmCDVshKPzQ1D6K8XNmEbaD4S9Cb1e2aQanGP3ELAd1tpucoRqeM/FAEV+/j8bUiINA3yvODziFpY2XUY012FQnleH6BIzV8HRPB63zoAs3sQ5XY3Z2lqxjmc042Nmaw5t0ut9oTfNJ4mLNcpB9ibs/U0xi81A64getDjTL5Gugb32vwfU/Oj0rynHj8h6bzfVXW/FUC8V5B8cOvBa8JxVphUoYw415fIK0l77lt/UyymWaYwdUJCOeBU7ay+fG20dlmRREj+jFlJdAV8b9fAu8piMoJouWcd/UYFw9/vXF x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CO1PR05MB8087.namprd05.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(4636009)(366004)(71200400001)(66446008)(66476007)(316002)(6512007)(2906002)(6486002)(66556008)(66946007)(64756008)(38100700002)(83380400001)(4744005)(508600001)(76116006)(36756003)(8676002)(4326008)(6506007)(86362001)(99936003)(5660300002)(8936002)(38070700005)(2616005)(186003)(26005)(6916009)(122000001)(54906003);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?TTZldzdkcENwZk9mNXZIb3l2ZjNhN2JwYXg5WFl3ZkowQXRUZWRJSktTRDlw?= =?utf-8?B?aUQ2RVBNaVNvRDI4endUc0g2c3lETU1LMnE4UkppaXIxTURZS2pidTVISFVS?= =?utf-8?B?ZmYwV05pMVd0c3VnN2M5VjExSWpXMUZOTUdnNk5Ua2NSbXFZbVRWbG0va3ht?= =?utf-8?B?SHBHRm5lQkZWSkpwcmgvMmphRWpnM0hPMmk2STVwK0phdVFRbjFEZGZyNzFs?= =?utf-8?B?aG44eUg1UUFualIxMm0wK1RLWnlqbFZwcjI5YzhXb2p4d1hDS3htM29FeVNz?= =?utf-8?B?alBMR25hejdVL01kVHNKYlpGdHIrNUZ2Q1R6S0NqL1lHeEl4ZWkyZGpBdk5l?= =?utf-8?B?UVo3ZUtRV0JRRTJieitWTDZWazdLMzZQOTZDTGlkd1BSeWFsQWFaMktlZUZu?= =?utf-8?B?SVAxZ0ZvY0tvdE96N1dDRmc3M2NUVXdsanpLQWV4UU1EY3hRRW5jdHBsb1Vr?= =?utf-8?B?UGwwV0lZRU93NkJuSERPUi8vOXJZY0hRWGdxdUswUWRzekRGRGRFTm52bWRV?= =?utf-8?B?UVpKU3VOQ0xEd3NIZjJydTd4K3VFR2N4VUFFWFhVMTF1ME9DbTlvRXhXTmov?= =?utf-8?B?d0tCeERlNmM0bndHSjgzcWJpVy9GeEphMmdDV3BsZ25FQlhpeEFzT2czWG9H?= =?utf-8?B?cFgyRzd2MTJMSVRjRGtiVjB2U3dYNVJQZUovSnhkcGI5aWIvRUV0VmlTdXpZ?= =?utf-8?B?dGh4M3ZDbUVEaEh0alkySWxGS0h3Qzl5UkhaT0JyemZOVGFuSVRrMXJFcmdU?= =?utf-8?B?cXpYUldicGJLTEZHeDErMUtRR25FL21FTklHd2VFNmh3T2pBVUZGYWhCVnJp?= =?utf-8?B?eXZVV0QzcmdXb0tlNXFsNmo0NmxhRkkwRG00QUtiOFBVek5RWEdUTGxmejBh?= =?utf-8?B?M3liTkM2d2RNbW00VmlBMHErY2YwdWhPTDhDeVZiUFUwNFo2MjQvT3c0VnFa?= =?utf-8?B?UUxxSy83UE82QU1wN0VEVXZMWURWZkVtbXFrUEN1MEVpL0NtaTdmZFlTUzlq?= =?utf-8?B?V2JaT01STldQZm9vV0dIclQwTnAxVWI3aEVzeUVWYnlMR2RTTzJrS2FIL0NJ?= =?utf-8?B?ck1neDkxdXR2ZVYzWVNiSkJtS3Y4c3h5RGpZMFA1VC9ySitxQ2phNm1GMEVu?= =?utf-8?B?amdqRUVWaXRLWEJ6aUphbVN0M2RoaUF5OHVVSWpoN2VjeGFmeEJ3Z1I3Szdy?= =?utf-8?B?b2w0UCt5RzlBem5NVGErU3JKbUFuNjFWWFpmTjlvY2tod2lnSGN4Qi9DZExF?= =?utf-8?B?cStnUmlYbXozbERVaENvc0NWeFRGdXNpOVhDcTNpeGh4RjVZYzBIbnVnVVdv?= =?utf-8?B?eHU5QW1zZ2dqeEo2aTFuNVNibVkzZW5XTFNUdEs5N1ZmYUpvZTdwcWl1bUcr?= =?utf-8?B?TWdnWVJtU29GMlhYLzFkT3dnQUZYVzBHMlRubjdZaWpKYitUMDlHWWJYdE5J?= =?utf-8?B?YVlDTW42Y2xmY1c0N2VYWVFwRXVzd0ZYQzUxVFBCRXhFVmo2V01Vc01ScXZv?= =?utf-8?B?OWN5bThJcEhHU1N0MWxlQTVScGVTZVlxY002b3RnUHpQcmNtWjI0cGRuT0pY?= =?utf-8?B?b0RZOEFBa29rUWJqY0thMCtNdGR0N1dkN2tvSzdYK1R2MVY2dFU0SWM3VUY4?= =?utf-8?B?TUxWNjhKOFV2TFVBREF2citYT0VYb3pENHlxK1oxUEVpUE9oa2t3dmxlc3Qw?= =?utf-8?B?MTlQOWpsclI3VkdibFFvdDUwQTZ3Y05SQzZqVHVuS2ZHWjFhUTdFU0s5ZW1P?= =?utf-8?B?a2tFN2F6NlVKbEZzOGdQU2EzZ1EwNk5URW5yOVczSVJ6QXlveGZXbVBwMnl5?= =?utf-8?B?M3NDZnRWaStUNjI4bFJHcWg3QTNhcmFwUnhGeFZ0eHc2RGFLZnR4NEMwRTFo?= =?utf-8?B?VGt6RllVWTlmQzgycWdCWlhmdHpaWG5OOEJJZWtZN2wxbVBWSmtlNU9OMUlV?= =?utf-8?B?SXJsOHZUdVV2MjNVZnlhMDFpRkJyYUxXNzNpSURLQ3FEeTZiRXFpaENoU05y?= =?utf-8?B?UG5mWTZlTHhSL29nVU5XaEl0cWhXL0RUaWx5UWtOL1F6eVJJc3hKZkNqT3ZQ?= =?utf-8?B?YWhuMzNUdGxaVHRDblJTdFM0NGJMK0wzYWIrUHVaUmZpcS9mU3VnMVV2ZVRH?= =?utf-8?B?Z3Y2NTFFS3hNbkJQM0pGeDljS0ZnTTFxRGQ2WUdaL0habmZ4Rm5pVWJ0ekhR?= =?utf-8?B?YytzdDIvWlRyZHFyT0ZBMHFWOXA1ZFdBUDFIK2dHTDVCVnE5b214b1F3bGF6?= =?utf-8?B?azRhNVFZeXZXbzRPQ0NnVVhzMTFtdnZDa1cvaDQ0aExlV0t3MTNTK0hKcUFC?= =?utf-8?B?aW1XMnNyTnZxZk1uK2FPSXNuRFpyWDBKRmVuaTJYbkFuWVNJTGVtS2tRRHlE?= =?utf-8?Q?3N+bpaGxzDbh/mPM=3D?= Content-Type: multipart/mixed; boundary="_011_4db7d3ea061f47a15fc6d865f53dd327ea2975fbcamelvmwarecom_" MIME-Version: 1.0 X-OriginatorOrg: vmware.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO1PR05MB8087.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7a4d4555-b284-479f-aab4-08da0ebb9fea X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Mar 2022 00:00:22.9570 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b39138ca-3cee-4b4a-a4d6-cd83d9dd62f0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: s+/UeXKPpHl9BoJTg4W8HmHjZIeB8w3bqpHINTQ3rb5SWAiSdXRlFDvMWWu/s46JE/rOq4tbiAdBcYyvCbL5vA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR05MB4089 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_011_4db7d3ea061f47a15fc6d865f53dd327ea2975fbcamelvmwarecom_ Content-Type: text/plain; charset="utf-8" Content-ID: <37489DD770BBEB449D6B6AE587D79D2E@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 T24gRnJpLCAyMDIyLTAzLTA0IGF0IDE5OjEzICswMDAwLCBKYWNvYiBDaGFtcGlvbiB3cm90ZToN Cj4gdjMgcmViYXNlcyB0aGlzIHBhdGNoc2V0IG92ZXIgdGhlIHRvcCBvZiBTYW1heSdzIHBsdWdn YWJsZSBhdXRoDQo+IHByb3ZpZGVyIEFQSSBbMV0sIGluY2x1ZGVkIGhlcmUgYXMgcGF0Y2hlcyAw MDAxLTMuDQoNCnY0IHJlYmFzZXMgb3ZlciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIHBsdWdn YWJsZSBhdXRoIHBhdGNoc2V0DQooaW5jbHVkZWQgYXMgMDAwMS00KS4gTm90ZSB0aGF0IHRoZXJl J3MgYSByZWNlbnQgY29uZmxpY3QgYXMNCm9mIGQ0NzgxZDg4NzsgdXNlIGFuIG9sZGVyIGNvbW1p dCBhcyB0aGUgYmFzZSAob3Igd2FpdCBmb3IgdGhlIG90aGVyDQp0aHJlYWQgdG8gYmUgdXBkYXRl ZCkuDQoNCi0tSmFjb2INCg== --_011_4db7d3ea061f47a15fc6d865f53dd327ea2975fbcamelvmwarecom_ Content-Type: text/x-patch; name="v4-0001-Add-support-for-custom-authentication-methods.patch" Content-Description: v4-0001-Add-support-for-custom-authentication-methods.patch Content-Disposition: attachment; filename="v4-0001-Add-support-for-custom-authentication-methods.patch"; size=11866; creation-date="Sat, 26 Mar 2022 00:00:22 GMT"; modification-date="Sat, 26 Mar 2022 00:00:22 GMT" Content-ID: <93211C929F1ED94CA8E4CB0CEA5E8A57@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 RnJvbSA1NzU0MzFiNGUwMzVjMjY2YjU1YTI1NDE0ZjgwMmZiZjhiYTE2Yjk3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1heSBTaGFybWEgPHNtaWxpbmdzYW1heUBnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgMTUgRmViIDIwMjIgMjI6MjM6MjkgLTA4MDAKU3ViamVjdDogW1BBVENIIHY0 IDAxLzEwXSBBZGQgc3VwcG9ydCBmb3IgY3VzdG9tIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMKCkN1 cnJlbnRseSwgUG9zdGdyZVNRTCBzdXBwb3J0cyBvbmx5IGEgc2V0IG9mIHByZS1kZWZpbmVkIGF1 dGhlbnRpY2F0aW9uCm1ldGhvZHMuIFRoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciAyIGhvb2tz IHdoaWNoIGFsbG93IHVzZXJzIHRvIGFkZAp0aGVpciBjdXN0b20gYXV0aGVudGljYXRpb24gbWV0 aG9kcyBieSBkZWZpbmluZyBhIGNoZWNrIGZ1bmN0aW9uIGFuZCBhbgplcnJvciBmdW5jdGlvbi4g VXNlcnMgY2FuIHRoZW4gdXNlIHRoZXNlIG1ldGhvZHMgYnkgdXNpbmcgYSBuZXcgImN1c3RvbSIK a2V5d29yZCBpbiBwZ19oYmEuY29uZiBhbmQgc3BlY2lmeWluZyB0aGUgYXV0aGVudGljYXRpb24g cHJvdmlkZXIgdGhleQp3YW50IHRvIHVzZS4KLS0tCiBzcmMvYmFja2VuZC9saWJwcS9hdXRoLmMg fCAxMDggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tCiBzcmMvYmFja2Vu ZC9saWJwcS9oYmEuYyAgfCAgNDQgKysrKysrKysrKysrKysrKwogc3JjL2luY2x1ZGUvbGlicHEv YXV0aC5oIHwgIDM3ICsrKysrKysrKysrKysrCiBzcmMvaW5jbHVkZS9saWJwcS9oYmEuaCAgfCAg IDIgKwogNCBmaWxlcyBjaGFuZ2VkLCAxNzIgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbGlicHEvYXV0aC5jIGIvc3JjL2JhY2tlbmQvbGli cHEvYXV0aC5jCmluZGV4IGVmYzUzZjMxMzUuLjM3NWVlMzM4OTIgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2xpYnBxL2F1dGguYworKysgYi9zcmMvYmFja2VuZC9saWJwcS9hdXRoLmMKQEAgLTQ3 LDggKzQ3LDYgQEAKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiBzdGF0aWMgdm9pZCBhdXRoX2ZhaWxlZChQb3J0 ICpwb3J0LCBpbnQgc3RhdHVzLCBjb25zdCBjaGFyICpsb2dkZXRhaWwpOwotc3RhdGljIGNoYXIg KnJlY3ZfcGFzc3dvcmRfcGFja2V0KFBvcnQgKnBvcnQpOwotc3RhdGljIHZvaWQgc2V0X2F1dGhu X2lkKFBvcnQgKnBvcnQsIGNvbnN0IGNoYXIgKmlkKTsKIAogCiAvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIwNiwy MiArMjA0LDExIEBAIHN0YXRpYyBpbnQJcGdfU1NQSV9tYWtlX3VwbihjaGFyICphY2NvdW50bmFt ZSwKIHN0YXRpYyBpbnQJQ2hlY2tSQURJVVNBdXRoKFBvcnQgKnBvcnQpOwogc3RhdGljIGludAlQ ZXJmb3JtUmFkaXVzVHJhbnNhY3Rpb24oY29uc3QgY2hhciAqc2VydmVyLCBjb25zdCBjaGFyICpz ZWNyZXQsIGNvbnN0IGNoYXIgKnBvcnRzdHIsIGNvbnN0IGNoYXIgKmlkZW50aWZpZXIsIGNvbnN0 IGNoYXIgKnVzZXJfbmFtZSwgY29uc3QgY2hhciAqcGFzc3dkKTsKIAotCi0vKgotICogTWF4aW11 bSBhY2NlcHRlZCBzaXplIG9mIEdTUyBhbmQgU1NQSSBhdXRoZW50aWNhdGlvbiB0b2tlbnMuCi0g KiBXZSBhbHNvIHVzZSB0aGlzIGFzIGEgbGltaXQgb24gb3JkaW5hcnkgcGFzc3dvcmQgcGFja2V0 IGxlbmd0aHMuCi0gKgotICogS2VyYmVyb3MgdGlja2V0cyBhcmUgdXN1YWxseSBxdWl0ZSBzbWFs bCwgYnV0IHRoZSBUR1RzIGlzc3VlZCBieSBXaW5kb3dzCi0gKiBkb21haW4gY29udHJvbGxlcnMg aW5jbHVkZSBhbiBhdXRob3JpemF0aW9uIGZpZWxkIGtub3duIGFzIHRoZSBQcml2aWxlZ2UKLSAq IEF0dHJpYnV0ZSBDZXJ0aWZpY2F0ZSAoUEFDKSwgd2hpY2ggY29udGFpbnMgdGhlIHVzZXIncyBX aW5kb3dzIHBlcm1pc3Npb25zCi0gKiAoZ3JvdXAgbWVtYmVyc2hpcHMgZXRjLikuIFRoZSBQQUMg aXMgY29waWVkIGludG8gYWxsIHRpY2tldHMgb2J0YWluZWQgb24KLSAqIHRoZSBiYXNpcyBvZiB0 aGlzIFRHVCAoZXZlbiB0aG9zZSBpc3N1ZWQgYnkgVW5peCByZWFsbXMgd2hpY2ggdGhlIFdpbmRv d3MKLSAqIHJlYWxtIHRydXN0cyksIGFuZCBjYW4gYmUgc2V2ZXJhbCBrQiBpbiBzaXplLiBUaGUg bWF4aW11bSB0b2tlbiBzaXplCi0gKiBhY2NlcHRlZCBieSBXaW5kb3dzIHN5c3RlbXMgaXMgZGV0 ZXJtaW5lZCBieSB0aGUgTWF4QXV0aFRva2VuIFdpbmRvd3MKLSAqIHJlZ2lzdHJ5IHNldHRpbmcu IE1pY3Jvc29mdCByZWNvbW1lbmRzIHRoYXQgaXQgaXMgbm90IHNldCBoaWdoZXIgdGhhbgotICog NjU1MzUgYnl0ZXMsIHNvIHRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgbGltaXQgZm9yIHVz IGFzIHdlbGwuCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEN1c3RvbSBBdXRoZW50aWNhdGlvbgorICotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAgKi8KLSNkZWZpbmUgUEdfTUFYX0FVVEhfVE9LRU5fTEVOR1RICTY1NTM1CitzdGF0aWMgTGlz dCAqY3VzdG9tX2F1dGhfcHJvdmlkZXJzID0gTklMOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEdsb2JhbCBh dXRoZW50aWNhdGlvbiBmdW5jdGlvbnMKQEAgLTMxMSw2ICsyOTgsMTUgQEAgYXV0aF9mYWlsZWQo UG9ydCAqcG9ydCwgaW50IHN0YXR1cywgY29uc3QgY2hhciAqbG9nZGV0YWlsKQogCQljYXNlIHVh UkFESVVTOgogCQkJZXJyc3RyID0gZ2V0dGV4dF9ub29wKCJSQURJVVMgYXV0aGVudGljYXRpb24g ZmFpbGVkIGZvciB1c2VyIFwiJXNcIiIpOwogCQkJYnJlYWs7CisJCWNhc2UgdWFDdXN0b206CisJ CQl7CisJCQkJQ3VzdG9tQXV0aFByb3ZpZGVyICpwcm92aWRlciA9IGdldF9wcm92aWRlcl9ieV9u YW1lKHBvcnQtPmhiYS0+Y3VzdG9tX3Byb3ZpZGVyKTsKKwkJCQlpZiAocHJvdmlkZXItPmF1dGhf ZXJyb3JfaG9vaykKKwkJCQkJZXJyc3RyID0gcHJvdmlkZXItPmF1dGhfZXJyb3JfaG9vayhwb3J0 KTsKKwkJCQllbHNlCisJCQkJCWVycnN0ciA9IGdldHRleHRfbm9vcCgiQ3VzdG9tIGF1dGhlbnRp Y2F0aW9uIGZhaWxlZCBmb3IgdXNlciBcIiVzXCIiKTsKKwkJCQlicmVhazsKKwkJCX0KIAkJZGVm YXVsdDoKIAkJCWVycnN0ciA9IGdldHRleHRfbm9vcCgiYXV0aGVudGljYXRpb24gZmFpbGVkIGZv ciB1c2VyIFwiJXNcIjogaW52YWxpZCBhdXRoZW50aWNhdGlvbiBtZXRob2QiKTsKIAkJCWJyZWFr OwpAQCAtMzQ1LDcgKzM0MSw3IEBAIGF1dGhfZmFpbGVkKFBvcnQgKnBvcnQsIGludCBzdGF0dXMs IGNvbnN0IGNoYXIgKmxvZ2RldGFpbCkKICAqIGxpZmV0aW1lIG9mIHRoZSBQb3J0LCBzbyBpdCBp cyBzYWZlIHRvIHBhc3MgYSBzdHJpbmcgdGhhdCBpcyBtYW5hZ2VkIGJ5IGFuCiAgKiBleHRlcm5h bCBsaWJyYXJ5LgogICovCi1zdGF0aWMgdm9pZAordm9pZAogc2V0X2F1dGhuX2lkKFBvcnQgKnBv cnQsIGNvbnN0IGNoYXIgKmlkKQogewogCUFzc2VydChpZCk7CkBAIC02MzAsNiArNjI2LDEzIEBA IENsaWVudEF1dGhlbnRpY2F0aW9uKFBvcnQgKnBvcnQpCiAJCWNhc2UgdWFUcnVzdDoKIAkJCXN0 YXR1cyA9IFNUQVRVU19PSzsKIAkJCWJyZWFrOworCQljYXNlIHVhQ3VzdG9tOgorCQkJeworCQkJ CUN1c3RvbUF1dGhQcm92aWRlciAqcHJvdmlkZXIgPSBnZXRfcHJvdmlkZXJfYnlfbmFtZShwb3J0 LT5oYmEtPmN1c3RvbV9wcm92aWRlcik7CisJCQkJaWYgKHByb3ZpZGVyLT5hdXRoX2NoZWNrX2hv b2spCisJCQkJCXN0YXR1cyA9IHByb3ZpZGVyLT5hdXRoX2NoZWNrX2hvb2socG9ydCk7CisJCQkJ YnJlYWs7CisJCQl9CiAJfQogCiAJaWYgKChzdGF0dXMgPT0gU1RBVFVTX09LICYmIHBvcnQtPmhi YS0+Y2xpZW50Y2VydCA9PSBjbGllbnRDZXJ0RnVsbCkKQEAgLTY4OSw3ICs2OTIsNyBAQCBzZW5k QXV0aFJlcXVlc3QoUG9ydCAqcG9ydCwgQXV0aFJlcXVlc3QgYXJlcSwgY29uc3QgY2hhciAqZXh0 cmFkYXRhLCBpbnQgZXh0cmFsZQogICoKICAqIFJldHVybnMgTlVMTCBpZiBjb3VsZG4ndCBnZXQg cGFzc3dvcmQsIGVsc2UgcGFsbG9jJ2Qgc3RyaW5nLgogICovCi1zdGF0aWMgY2hhciAqCitjaGFy ICoKIHJlY3ZfcGFzc3dvcmRfcGFja2V0KFBvcnQgKnBvcnQpCiB7CiAJU3RyaW5nSW5mb0RhdGEg YnVmOwpAQCAtMzM0MywzICszMzQ2LDcwIEBAIFBlcmZvcm1SYWRpdXNUcmFuc2FjdGlvbihjb25z dCBjaGFyICpzZXJ2ZXIsIGNvbnN0IGNoYXIgKnNlY3JldCwgY29uc3QgY2hhciAqcG9yCiAJCX0K IAl9CQkJCQkJCS8qIHdoaWxlICh0cnVlKSAqLwogfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEN1c3RvbSBh dXRoZW50aWNhdGlvbgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIFJlZ2lzdGVyQXV0aFByb3Zp ZGVyIHJlZ2lzdGVycyBhIGN1c3RvbSBhdXRoZW50aWNhdGlvbiBwcm92aWRlciB0byBiZQorICog dXNlZCBmb3IgYXV0aGVudGljYXRpb24uIEl0IHZhbGlkYXRlcyB0aGUgaW5wdXRzIGFuZCBhZGRz IHRoZSBwcm92aWRlcgorICogbmFtZSBhbmQgaXQncyBob29rcyB0byBhIGxpc3Qgb2YgbG9hZGVk IHByb3ZpZGVycy4gVGhlIHJpZ2h0IHByb3ZpZGVyJ3MKKyAqIGhvb2tzIGNhbiB0aGVuIGJlIGNh bGxlZCBiYXNlZCBvbiB0aGUgcHJvdmlkZXIgbmFtZSBzcGVjaWZpZWQgaW4KKyAqIHBnX2hiYS5j b25mLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBpbiBfUEdfaW5pdCgp IGJ5IGFueSBleHRlbnNpb24gbG9va2luZyB0bworICogYWRkIGEgY3VzdG9tIGF1dGhlbnRpY2F0 aW9uIG1ldGhvZC4KKyAqLwordm9pZCBSZWdpc3RlckF1dGhQcm92aWRlcihjb25zdCBjaGFyICpw cm92aWRlcl9uYW1lLAorCQlDdXN0b21BdXRoZW50aWNhdGlvbkNoZWNrX2hvb2tfdHlwZSBBdXRo ZW50aWNhdGlvbkNoZWNrRnVuY3Rpb24sCisJCUN1c3RvbUF1dGhlbnRpY2F0aW9uRXJyb3JfaG9v a190eXBlIEF1dGhlbnRpY2F0aW9uRXJyb3JGdW5jdGlvbikKK3sKKwlDdXN0b21BdXRoUHJvdmlk ZXIgKnByb3ZpZGVyID0gTlVMTDsKKwlNZW1vcnlDb250ZXh0IG9sZF9jb250ZXh0OworCisJaWYg KHByb3ZpZGVyX25hbWUgPT0gTlVMTCkKKwl7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycm1z ZygiY2Fubm90IHJlZ2lzdGVyIGF1dGhlbnRpY2F0aW9uIHByb3ZpZGVyIHdpdGhvdXQgbmFtZSIp KSk7CisJfQorCisJaWYgKEF1dGhlbnRpY2F0aW9uQ2hlY2tGdW5jdGlvbiA9PSBOVUxMKQorCXsK KwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJybXNnKCJjYW5ub3QgcmVnaXN0ZXIgYXV0aGVudGlj YXRpb24gcHJvdmlkZXIgd2l0aG91dCBhIGNoZWNrIGZ1bmN0aW9uIikpKTsKKwl9CisKKwkvKgor CSAqIEFsbG9jYXRlIGluIHRvcCBtZW1vcnkgY29udGV4dCBhcyB3ZSBuZWVkIHRvIHJlYWQgdGhp cyB3aGVuZXZlcgorCSAqIHdlIHBhcnNlIHBnX2hiYS5jb25mCisJICovCisJb2xkX2NvbnRleHQg PSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7CisJcHJvdmlkZXIgPSBw YWxsb2Moc2l6ZW9mKEN1c3RvbUF1dGhQcm92aWRlcikpOworCXByb3ZpZGVyLT5uYW1lID0gTWVt b3J5Q29udGV4dFN0cmR1cChUb3BNZW1vcnlDb250ZXh0LHByb3ZpZGVyX25hbWUpOworCXByb3Zp ZGVyLT5hdXRoX2NoZWNrX2hvb2sgPSBBdXRoZW50aWNhdGlvbkNoZWNrRnVuY3Rpb247CisJcHJv dmlkZXItPmF1dGhfZXJyb3JfaG9vayA9IEF1dGhlbnRpY2F0aW9uRXJyb3JGdW5jdGlvbjsKKwlj dXN0b21fYXV0aF9wcm92aWRlcnMgPSBsYXBwZW5kKGN1c3RvbV9hdXRoX3Byb3ZpZGVycywgcHJv dmlkZXIpOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRfY29udGV4dCk7Cit9CisKKy8qCisg KiBSZXR1cm5zIHRoZSBhdXRoZW50aWNhdGlvbiBwcm92aWRlciAod2hpY2ggaW5jbHVkZXMgaXQn cworICogY2FsbGJhY2sgZnVuY3Rpb25zKSBiYXNlZCBvbiBuYW1lIHNwZWNpZmllZC4KKyAqLwor Q3VzdG9tQXV0aFByb3ZpZGVyICpnZXRfcHJvdmlkZXJfYnlfbmFtZShjb25zdCBjaGFyICpuYW1l KQoreworCUxpc3RDZWxsICpsYzsKKworCWZvcmVhY2gobGMsIGN1c3RvbV9hdXRoX3Byb3ZpZGVy cykKKwl7CisJCUN1c3RvbUF1dGhQcm92aWRlciAqcHJvdmlkZXIgPSAoQ3VzdG9tQXV0aFByb3Zp ZGVyICopIGxmaXJzdChsYyk7CisJCWlmIChzdHJjbXAocHJvdmlkZXItPm5hbWUsbmFtZSkgPT0g MCkKKwkJeworCQkJcmV0dXJuIHByb3ZpZGVyOworCQl9CisJfQorCisJcmV0dXJuIE5VTEw7Cit9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9saWJwcS9oYmEuYyBiL3NyYy9iYWNrZW5kL2xpYnBx L2hiYS5jCmluZGV4IDkwOTUzYzM4ZjMuLjlmMTUyNTI3ODkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2xpYnBxL2hiYS5jCisrKyBiL3NyYy9iYWNrZW5kL2xpYnBxL2hiYS5jCkBAIC0zMSw2ICsz MSw3IEBACiAjaW5jbHVkZSAiY29tbW9uL2lwLmgiCiAjaW5jbHVkZSAiY29tbW9uL3N0cmluZy5o IgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJsaWJwcS9hdXRoLmgiCiAjaW5jbHVk ZSAibGlicHEvaWZhZGRyLmgiCiAjaW5jbHVkZSAibGlicHEvbGlicHEuaCIKICNpbmNsdWRlICJt aXNjYWRtaW4uaCIKQEAgLTEzNCw2ICsxMzUsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qg VXNlckF1dGhOYW1lW10gPQogCSJsZGFwIiwKIAkiY2VydCIsCiAJInJhZGl1cyIsCisJImN1c3Rv bSIsCiAJInBlZXIiCiB9OwogCkBAIC0xMzk5LDYgKzE0MDEsOCBAQCBwYXJzZV9oYmFfbGluZShU b2tlbml6ZWRMaW5lICp0b2tfbGluZSwgaW50IGVsZXZlbCkKICNlbmRpZgogCWVsc2UgaWYgKHN0 cmNtcCh0b2tlbi0+c3RyaW5nLCAicmFkaXVzIikgPT0gMCkKIAkJcGFyc2VkbGluZS0+YXV0aF9t ZXRob2QgPSB1YVJBRElVUzsKKwllbHNlIGlmIChzdHJjbXAodG9rZW4tPnN0cmluZywgImN1c3Rv bSIpID09IDApCisJCXBhcnNlZGxpbmUtPmF1dGhfbWV0aG9kID0gdWFDdXN0b207CiAJZWxzZQog CXsKIAkJZXJlcG9ydChlbGV2ZWwsCkBAIC0xNjkxLDYgKzE2OTUsMTQgQEAgcGFyc2VfaGJhX2xp bmUoVG9rZW5pemVkTGluZSAqdG9rX2xpbmUsIGludCBlbGV2ZWwpCiAJCXBhcnNlZGxpbmUtPmNs aWVudGNlcnQgPSBjbGllbnRDZXJ0RnVsbDsKIAl9CiAKKwkvKgorCSAqIEVuc3VyZSB0aGF0IHRo ZSBwcm92aWRlciBuYW1lIGlzIHNwZWNpZmllZCBmb3IgY3VzdG9tIGF1dGhlbnRpY2F0aW9uIG1l dGhvZC4KKwkgKi8KKwlpZiAocGFyc2VkbGluZS0+YXV0aF9tZXRob2QgPT0gdWFDdXN0b20pCisJ eworCQlNQU5EQVRPUllfQVVUSF9BUkcocGFyc2VkbGluZS0+Y3VzdG9tX3Byb3ZpZGVyLCAicHJv dmlkZXIiLCAiY3VzdG9tIik7CisJfQorCiAJcmV0dXJuIHBhcnNlZGxpbmU7CiB9CiAKQEAgLTIx MDIsNiArMjExNCwzMSBAQCBwYXJzZV9oYmFfYXV0aF9vcHQoY2hhciAqbmFtZSwgY2hhciAqdmFs LCBIYmFMaW5lICpoYmFsaW5lLAogCQloYmFsaW5lLT5yYWRpdXNpZGVudGlmaWVycyA9IHBhcnNl ZF9pZGVudGlmaWVyczsKIAkJaGJhbGluZS0+cmFkaXVzaWRlbnRpZmllcnNfcyA9IHBzdHJkdXAo dmFsKTsKIAl9CisJZWxzZSBpZiAoc3RyY21wKG5hbWUsICJwcm92aWRlciIpID09IDApCisJewor CQlSRVFVSVJFX0FVVEhfT1BUSU9OKHVhQ3VzdG9tLCAicHJvdmlkZXIiLCAiY3VzdG9tIik7CisK KwkJLyoKKwkJICogVmVyaWZ5IHRoYXQgdGhlIHByb3ZpZGVyIG1lbnRpb25lZCBpcyBsb2FkZWQg dmlhIHNoYXJlZF9wcmVsb2FkX2xpYnJhcmllcy4KKwkJICovCisKKwkJaWYgKGdldF9wcm92aWRl cl9ieV9uYW1lKHZhbCkgPT0gTlVMTCkKKwkJeworCQkJZXJlcG9ydChlbGV2ZWwsCisJCQkJCShl cnJjb2RlKEVSUkNPREVfQ09ORklHX0ZJTEVfRVJST1IpLAorCQkJCQkgZXJybXNnKCJjYW5ub3Qg dXNlIGF1dGhlbnRpY2F0aW9uIHByb3ZpZGVyICVzIix2YWwpLAorCQkJCQkgZXJyaGludCgiTG9h ZCBhdXRoZW50aWNhdGlvbiBwcm92aWRlciB2aWEgc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzLiIp LAorCQkJCQkgZXJyY29udGV4dCgibGluZSAlZCBvZiBjb25maWd1cmF0aW9uIGZpbGUgXCIlc1wi IiwKKwkJCQkJCQlsaW5lX251bSwgSGJhRmlsZU5hbWUpKSk7CisJCQkqZXJyX21zZyA9IHBzcHJp bnRmKCJjYW5ub3QgdXNlIGF1dGhlbnRpY2F0aW9uIHByb3ZpZGVyICVzIiwgdmFsKTsKKworCQkJ cmV0dXJuIGZhbHNlOworCQl9CisJCWVsc2UKKwkJeworCQkJaGJhbGluZS0+Y3VzdG9tX3Byb3Zp ZGVyID0gcHN0cmR1cCh2YWwpOworCQl9CisJfQogCWVsc2UKIAl7CiAJCWVyZXBvcnQoZWxldmVs LApAQCAtMjQ0Miw2ICsyNDc5LDEzIEBAIGdldGhiYV9vcHRpb25zKEhiYUxpbmUgKmhiYSkKIAkJ CQlDU3RyaW5nR2V0VGV4dERhdHVtKHBzcHJpbnRmKCJyYWRpdXNwb3J0cz0lcyIsIGhiYS0+cmFk aXVzcG9ydHNfcykpOwogCX0KIAorCWlmIChoYmEtPmF1dGhfbWV0aG9kID09IHVhQ3VzdG9tKQor CXsKKwkJaWYgKGhiYS0+Y3VzdG9tX3Byb3ZpZGVyKQorCQkJb3B0aW9uc1tub3B0aW9ucysrXSA9 CisJCQkJQ1N0cmluZ0dldFRleHREYXR1bShwc3ByaW50ZigicHJvdmlkZXI9JXMiLGhiYS0+Y3Vz dG9tX3Byb3ZpZGVyKSk7CisJfQorCiAJLyogSWYgeW91IGFkZCBtb3JlIG9wdGlvbnMsIGNvbnNp ZGVyIGluY3JlYXNpbmcgTUFYX0hCQV9PUFRJT05TLiAqLwogCUFzc2VydChub3B0aW9ucyA8PSBN QVhfSEJBX09QVElPTlMpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9saWJwcS9hdXRoLmgg Yi9zcmMvaW5jbHVkZS9saWJwcS9hdXRoLmgKaW5kZXggNmQ3ZWUxYWNiOS4uN2FmZjk4ZDkxOSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbGlicHEvYXV0aC5oCisrKyBiL3NyYy9pbmNsdWRlL2xp YnBxL2F1dGguaApAQCAtMjMsOSArMjMsNDYgQEAgZXh0ZXJuIGNoYXIgKnBnX2tyYl9yZWFsbTsK IGV4dGVybiB2b2lkIENsaWVudEF1dGhlbnRpY2F0aW9uKFBvcnQgKnBvcnQpOwogZXh0ZXJuIHZv aWQgc2VuZEF1dGhSZXF1ZXN0KFBvcnQgKnBvcnQsIEF1dGhSZXF1ZXN0IGFyZXEsIGNvbnN0IGNo YXIgKmV4dHJhZGF0YSwKIAkJCQkJCQlpbnQgZXh0cmFsZW4pOworZXh0ZXJuIHZvaWQgc2V0X2F1 dGhuX2lkKFBvcnQgKnBvcnQsIGNvbnN0IGNoYXIgKmlkKTsKK2V4dGVybiBjaGFyICpyZWN2X3Bh c3N3b3JkX3BhY2tldChQb3J0ICpwb3J0KTsKIAogLyogSG9vayBmb3IgcGx1Z2lucyB0byBnZXQg Y29udHJvbCBpbiBDbGllbnRBdXRoZW50aWNhdGlvbigpICovCit0eXBlZGVmIGludCAoKkN1c3Rv bUF1dGhlbnRpY2F0aW9uQ2hlY2tfaG9va190eXBlKSAoUG9ydCAqKTsKIHR5cGVkZWYgdm9pZCAo KkNsaWVudEF1dGhlbnRpY2F0aW9uX2hvb2tfdHlwZSkgKFBvcnQgKiwgaW50KTsKIGV4dGVybiBQ R0RMTElNUE9SVCBDbGllbnRBdXRoZW50aWNhdGlvbl9ob29rX3R5cGUgQ2xpZW50QXV0aGVudGlj YXRpb25faG9vazsKIAorLyogSG9vayBmb3IgcGx1Z2lucyB0byByZXBvcnQgZXJyb3IgbWVzc2Fn ZXMgaW4gYXV0aF9mYWlsZWQoKSAqLwordHlwZWRlZiBjb25zdCBjaGFyICogKCpDdXN0b21BdXRo ZW50aWNhdGlvbkVycm9yX2hvb2tfdHlwZSkgKFBvcnQgKik7CisKK2V4dGVybiB2b2lkIFJlZ2lz dGVyQXV0aFByb3ZpZGVyCisJCShjb25zdCBjaGFyICpwcm92aWRlcl9uYW1lLAorCQkgQ3VzdG9t QXV0aGVudGljYXRpb25DaGVja19ob29rX3R5cGUgQ3VzdG9tQXV0aGVudGljYXRpb25DaGVja19o b29rLAorCQkgQ3VzdG9tQXV0aGVudGljYXRpb25FcnJvcl9ob29rX3R5cGUgQ3VzdG9tQXV0aGVu dGljYXRpb25FcnJvcl9ob29rKTsKKworLyogRGVjbGFyYXRpb25zIGZvciBjdXN0b20gYXV0aGVu dGljYXRpb24gcHJvdmlkZXJzICovCit0eXBlZGVmIHN0cnVjdCBDdXN0b21BdXRoUHJvdmlkZXIK K3sKKwljb25zdCBjaGFyICpuYW1lOworCUN1c3RvbUF1dGhlbnRpY2F0aW9uQ2hlY2tfaG9va190 eXBlIGF1dGhfY2hlY2tfaG9vazsKKwlDdXN0b21BdXRoZW50aWNhdGlvbkVycm9yX2hvb2tfdHlw ZSBhdXRoX2Vycm9yX2hvb2s7Cit9IEN1c3RvbUF1dGhQcm92aWRlcjsKKworZXh0ZXJuIEN1c3Rv bUF1dGhQcm92aWRlciAqZ2V0X3Byb3ZpZGVyX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSk7CisK Ky8qCisgKiBNYXhpbXVtIGFjY2VwdGVkIHNpemUgb2YgR1NTIGFuZCBTU1BJIGF1dGhlbnRpY2F0 aW9uIHRva2Vucy4KKyAqIFdlIGFsc28gdXNlIHRoaXMgYXMgYSBsaW1pdCBvbiBvcmRpbmFyeSBw YXNzd29yZCBwYWNrZXQgbGVuZ3Rocy4KKyAqCisgKiBLZXJiZXJvcyB0aWNrZXRzIGFyZSB1c3Vh bGx5IHF1aXRlIHNtYWxsLCBidXQgdGhlIFRHVHMgaXNzdWVkIGJ5IFdpbmRvd3MKKyAqIGRvbWFp biBjb250cm9sbGVycyBpbmNsdWRlIGFuIGF1dGhvcml6YXRpb24gZmllbGQga25vd24gYXMgdGhl IFByaXZpbGVnZQorICogQXR0cmlidXRlIENlcnRpZmljYXRlIChQQUMpLCB3aGljaCBjb250YWlu cyB0aGUgdXNlcidzIFdpbmRvd3MgcGVybWlzc2lvbnMKKyAqIChncm91cCBtZW1iZXJzaGlwcyBl dGMuKS4gVGhlIFBBQyBpcyBjb3BpZWQgaW50byBhbGwgdGlja2V0cyBvYnRhaW5lZCBvbgorICog dGhlIGJhc2lzIG9mIHRoaXMgVEdUIChldmVuIHRob3NlIGlzc3VlZCBieSBVbml4IHJlYWxtcyB3 aGljaCB0aGUgV2luZG93cworICogcmVhbG0gdHJ1c3RzKSwgYW5kIGNhbiBiZSBzZXZlcmFsIGtC IGluIHNpemUuIFRoZSBtYXhpbXVtIHRva2VuIHNpemUKKyAqIGFjY2VwdGVkIGJ5IFdpbmRvd3Mg c3lzdGVtcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBNYXhBdXRoVG9rZW4gV2luZG93cworICogcmVn aXN0cnkgc2V0dGluZy4gTWljcm9zb2Z0IHJlY29tbWVuZHMgdGhhdCBpdCBpcyBub3Qgc2V0IGhp Z2hlciB0aGFuCisgKiA2NTUzNSBieXRlcywgc28gdGhhdCBzZWVtcyBsaWtlIGEgcmVhc29uYWJs ZSBsaW1pdCBmb3IgdXMgYXMgd2VsbC4KKyAqLworI2RlZmluZSBQR19NQVhfQVVUSF9UT0tFTl9M RU5HVEgJNjU1MzUKKwogI2VuZGlmCQkJCQkJCS8qIEFVVEhfSCAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvbGlicHEvaGJhLmggYi9zcmMvaW5jbHVkZS9saWJwcS9oYmEuaAppbmRleCA4ZDlm MzgyMWIxLi40ODQ5MGM0NGVkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9saWJwcS9oYmEuaAor KysgYi9zcmMvaW5jbHVkZS9saWJwcS9oYmEuaApAQCAtMzgsNiArMzgsNyBAQCB0eXBlZGVmIGVu dW0gVXNlckF1dGgKIAl1YUxEQVAsCiAJdWFDZXJ0LAogCXVhUkFESVVTLAorCXVhQ3VzdG9tLAog CXVhUGVlcgogI2RlZmluZSBVU0VSX0FVVEhfTEFTVCB1YVBlZXIJLyogTXVzdCBiZSBsYXN0IHZh bHVlIG9mIHRoaXMgZW51bSAqLwogfSBVc2VyQXV0aDsKQEAgLTEyMCw2ICsxMjEsNyBAQCB0eXBl ZGVmIHN0cnVjdCBIYmFMaW5lCiAJY2hhcgkgICAqcmFkaXVzaWRlbnRpZmllcnNfczsKIAlMaXN0 CSAgICpyYWRpdXNwb3J0czsKIAljaGFyCSAgICpyYWRpdXNwb3J0c19zOworCWNoYXIJICAgKmN1 c3RvbV9wcm92aWRlcjsKIH0gSGJhTGluZTsKIAogdHlwZWRlZiBzdHJ1Y3QgSWRlbnRMaW5lCi0t IAoyLjI1LjEKCg== --_011_4db7d3ea061f47a15fc6d865f53dd327ea2975fbcamelvmwarecom_ Content-Type: text/x-patch; name="v4-0002-Add-sample-extension-to-test-custom-auth-provider.patch" Content-Description: v4-0002-Add-sample-extension-to-test-custom-auth-provider.patch Content-Disposition: attachment; filename="v4-0002-Add-sample-extension-to-test-custom-auth-provider.patch"; size=4480; creation-date="Sat, 26 Mar 2022 00:00:22 GMT"; modification-date="Sat, 26 Mar 2022 00:00:22 GMT" Content-ID: <3CE43F61DFF6594B9E29709B2FE46E51@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 RnJvbSBjYjQxMzFkODQyNDg2MTgyNmU0NDM3MDhiYzBmNGU2YmFhNzZjODcxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1heSBTaGFybWEgPHNtaWxpbmdzYW1heUBnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgMTUgRmViIDIwMjIgMjI6Mjg6NDAgLTA4MDAKU3ViamVjdDogW1BBVENIIHY0 IDAyLzEwXSBBZGQgc2FtcGxlIGV4dGVuc2lvbiB0byB0ZXN0IGN1c3RvbSBhdXRoIHByb3ZpZGVy CiBob29rcwoKVGhpcyBjaGFuZ2UgYWRkcyBhIG5ldyBleHRlbnNpb24gdG8gc3JjL3Rlc3QvbW9k dWxlcyB0bwp0ZXN0IHRoZSBjdXN0b20gYXV0aGVudGljYXRpb24gcHJvdmlkZXIgaG9va3MuIElu IHRoaXMKZXh0ZW5zaW9uLCB3ZSB1c2UgYW4gYXJyYXkgdG8gZGVmaW5lIHdoaWNoIHVzZXJzIHRv CmF1dGhlbnRpY2F0ZSBhbmQgd2hhdCBwYXNzd29yZHMgdG8gdXNlLiBXZSB0aGVuIGdldAplbmNy eXB0ZWQgcGFzc3dvcmRzIGZyb20gdGhlIGNsaWVudCBhbmQgbWF0Y2ggdGhlbSB3aXRoCnRoZSBl bmNyeXB0ZWQgdmVyc2lvbiBvZiB0aGUgcGFzc3dvcmQgaW4gdGhlIGFycmF5LgotLS0KIHNyYy9p bmNsdWRlL2xpYnBxL3NjcmFtLmggICAgICAgICAgICAgICAgICAgICB8ICAyICstCiBzcmMvdGVz dC9tb2R1bGVzL3Rlc3RfYXV0aF9wcm92aWRlci9NYWtlZmlsZSAgfCAxNiArKysrCiAuLi4vdGVz dF9hdXRoX3Byb3ZpZGVyL3Rlc3RfYXV0aF9wcm92aWRlci5jICAgfCA4NiArKysrKysrKysrKysr KysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDEwMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0p CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2F1dGhfcHJvdmlkZXIv TWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYXV0aF9w cm92aWRlci90ZXN0X2F1dGhfcHJvdmlkZXIuYwoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2xp YnBxL3NjcmFtLmggYi9zcmMvaW5jbHVkZS9saWJwcS9zY3JhbS5oCmluZGV4IGU2MDk5MmEwZDIu LmM1MWU4NDhjMjQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2xpYnBxL3NjcmFtLmgKKysrIGIv c3JjL2luY2x1ZGUvbGlicHEvc2NyYW0uaApAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgImxp YnBxL3Nhc2wuaCIKIAogLyogU0FTTCBpbXBsZW1lbnRhdGlvbiBjYWxsYmFja3MgKi8KLWV4dGVy biBjb25zdCBwZ19iZV9zYXNsX21lY2ggcGdfYmVfc2NyYW1fbWVjaDsKK2V4dGVybiBQR0RMTElN UE9SVCBjb25zdCBwZ19iZV9zYXNsX21lY2ggcGdfYmVfc2NyYW1fbWVjaDsKIAogLyogUm91dGlu ZXMgdG8gaGFuZGxlIGFuZCBjaGVjayBTQ1JBTS1TSEEtMjU2IHNlY3JldCAqLwogZXh0ZXJuIGNo YXIgKnBnX2JlX3NjcmFtX2J1aWxkX3NlY3JldChjb25zdCBjaGFyICpwYXNzd29yZCk7CmRpZmYg LS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYXV0aF9wcm92aWRlci9NYWtlZmlsZSBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9hdXRoX3Byb3ZpZGVyL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjE3OTcxYTVjN2EKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfYXV0aF9wcm92aWRlci9NYWtlZmlsZQpAQCAtMCwwICsxLDE2 IEBACisjIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9hdXRoX3Byb3ZpZGVyL01ha2VmaWxlCisKK01P RFVMRV9iaWcgPSB0ZXN0X2F1dGhfcHJvdmlkZXIKK09CSlMgPSB0ZXN0X2F1dGhfcHJvdmlkZXIu bworUEdGSUxFREVTQyA9ICJ0ZXN0X2F1dGhfcHJvdmlkZXIgLSBwcm92aWRlciB0byB0ZXN0IGF1 dGggaG9va3MiCisKK2lmZGVmIFVTRV9QR1hTCitQR19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMg Oj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQoraW5jbHVkZSAkKFBHWFMpCitlbHNlCitz dWJkaXIgPSBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYXV0aF9wcm92aWRlcgordG9wX2J1aWxkZGly ID0gLi4vLi4vLi4vLi4KK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9i YWwKK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb250cmliL2NvbnRyaWItZ2xvYmFsLm1rCitlbmRp ZgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2F1dGhfcHJvdmlkZXIvdGVzdF9h dXRoX3Byb3ZpZGVyLmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYXV0aF9wcm92aWRlci90ZXN0 X2F1dGhfcHJvdmlkZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi43 YzRiMWYzNTAwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2F1dGhf cHJvdmlkZXIvdGVzdF9hdXRoX3Byb3ZpZGVyLmMKQEAgLTAsMCArMSw4NiBAQAorLyogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICoKKyAqIHRlc3RfYXV0aF9wcm92aWRlci5jCisgKgkJCWV4YW1wbGUgYXV0 aGVudGljYXRpb24gcHJvdmlkZXIgcGx1Z2luCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIyLCBQ b3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9O CisgKgkJY29udHJpYi90ZXN0X2F1dGhfcHJvdmlkZXIvdGVzdF9hdXRoX3Byb3ZpZGVyLmMKKyAq CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisjaW5j bHVkZSAiZm1nci5oIgorI2luY2x1ZGUgImxpYnBxL2F1dGguaCIKKyNpbmNsdWRlICJsaWJwcS9s aWJwcS5oIgorI2luY2x1ZGUgImxpYnBxL3NjcmFtLmgiCisKK1BHX01PRFVMRV9NQUdJQzsKKwor dm9pZCBfUEdfaW5pdCh2b2lkKTsKKworc3RhdGljIGNoYXIgKmdldF9lbmNyeXB0ZWRfcGFzc3dv cmRfZm9yX3VzZXIoY2hhciAqdXNlcl9uYW1lKTsKKworLyoKKyAqIExpc3Qgb2YgdXNlcm5hbWVz IC8gcGFzc3dvcmRzIHRvIGFwcHJvdmUuIEhlcmUgd2UgYXJlIG5vdAorICogZ2V0dGluZyBwYXNz d29yZHMgZnJvbSBQb3N0Z3JlcyBidXQgZnJvbSB0aGlzIGxpc3QuIEluIGEgbW9yZSByZWFsLWxp ZmUKKyAqIGV4dGVuc2lvbiwgeW91IGNhbiBmZXRjaCB2YWxpZCBjcmVkZW50aWFscyBhbmQgYXV0 aGVudGljYXRpb24gdG9rZW5zIC8KKyAqIHBhc3N3b3JkcyBmcm9tIGFuIGV4dGVybmFsIGF1dGhl bnRpY2F0aW9uIHByb3ZpZGVyLgorICovCitjaGFyIGNyZWRlbnRpYWxzWzNdWzNdWzUwXSA9IHsK Kwl7ImJvYiIsImFsaWNlIiwiY2Fyb2wifSwKKwl7ImJvYjEyMyIsImFsaWNlMTIzIiwiY2Fyb2wx MjMifQorfTsKKworc3RhdGljIGludCBUZXN0QXV0aGVudGljYXRpb25DaGVjayhQb3J0ICpwb3J0 KQoreworCWludCByZXN1bHQgPSBTVEFUVVNfRVJST1I7CisJY2hhciAqcmVhbF9wYXNzOworCWNv bnN0IGNoYXIgKmxvZ2RldGFpbCA9IE5VTEw7CisKKwlyZWFsX3Bhc3MgPSBnZXRfZW5jcnlwdGVk X3Bhc3N3b3JkX2Zvcl91c2VyKHBvcnQtPnVzZXJfbmFtZSk7CisJaWYgKHJlYWxfcGFzcykKKwl7 CisJCXJlc3VsdCA9IENoZWNrU0FTTEF1dGgoJnBnX2JlX3NjcmFtX21lY2gsIHBvcnQsIHJlYWxf cGFzcywgJmxvZ2RldGFpbCk7CisJCXBmcmVlKHJlYWxfcGFzcyk7CisJfQorCisJaWYgKHJlc3Vs dCA9PSBTVEFUVVNfT0spCisJCXNldF9hdXRobl9pZChwb3J0LCBwb3J0LT51c2VyX25hbWUpOwor CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEdldCBTQ1JBTSBlbmNyeXB0ZWQgdmVyc2lv biBvZiB0aGUgcGFzc3dvcmQgZm9yIHVzZXIuCisgKi8KK3N0YXRpYyBjaGFyICoKK2dldF9lbmNy eXB0ZWRfcGFzc3dvcmRfZm9yX3VzZXIoY2hhciAqdXNlcl9uYW1lKQoreworCWNoYXIgKnBhc3N3 b3JkID0gTlVMTDsKKwlpbnQgaTsKKwlmb3IgKGk9MDsgaTwzOyBpKyspCisJeworCQlpZiAoc3Ry Y21wKHVzZXJfbmFtZSwgY3JlZGVudGlhbHNbMF1baV0pID09IDApCisJCXsKKwkJCXBhc3N3b3Jk ID0gcHN0cmR1cChwZ19iZV9zY3JhbV9idWlsZF9zZWNyZXQoY3JlZGVudGlhbHNbMV1baV0pKTsK KwkJfQorCX0KKworCXJldHVybiBwYXNzd29yZDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKlRl c3RBdXRoZW50aWNhdGlvbkVycm9yKFBvcnQgKnBvcnQpCit7CisJY2hhciAqZXJyb3JfbWVzc2Fn ZSA9IChjaGFyICopcGFsbG9jICgxMDApOworCXNwcmludGYoZXJyb3JfbWVzc2FnZSwgIlRlc3Qg YXV0aGVudGljYXRpb24gZmFpbGVkIGZvciB1c2VyICVzIiwgcG9ydC0+dXNlcl9uYW1lKTsKKwly ZXR1cm4gZXJyb3JfbWVzc2FnZTsKK30KKwordm9pZAorX1BHX2luaXQodm9pZCkKK3sKKwlSZWdp c3RlckF1dGhQcm92aWRlcigidGVzdCIsIFRlc3RBdXRoZW50aWNhdGlvbkNoZWNrLCBUZXN0QXV0 aGVudGljYXRpb25FcnJvcik7Cit9Ci0tIAoyLjI1LjEKCg== --_011_4db7d3ea061f47a15fc6d865f53dd327ea2975fbcamelvmwarecom_ Content-Type: text/x-patch; name="v4-0003-Add-tests-for-test_auth_provider-extension.patch" Content-Description: v4-0003-Add-tests-for-test_auth_provider-extension.patch Content-Disposition: attachment; filename="v4-0003-Add-tests-for-test_auth_provider-extension.patch"; size=6266; creation-date="Sat, 26 Mar 2022 00:00:22 GMT"; modification-date="Sat, 26 Mar 2022 00:00:22 GMT" Content-ID: <66DD5421108F0346A8A8E6675083872B@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 RnJvbSAyNDcwMjQ4NmJmYWNhNjkxZDZjYTkzODg1NDRmYjIzZTZkNzY1MDU1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1heSBTaGFybWEgPHNtaWxpbmdzYW1heUBnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMTYgRmViIDIwMjIgMTI6Mjg6MzYgLTA4MDAKU3ViamVjdDogW1BBVENIIHY0 IDAzLzEwXSBBZGQgdGVzdHMgZm9yIHRlc3RfYXV0aF9wcm92aWRlciBleHRlbnNpb24KCkFkZCB0 YXAgdGVzdHMgZm9yIHRlc3RfYXV0aF9wcm92aWRlciBleHRlbnNpb24gYWxsb3cgbWFrZSBjaGVj ayBpbgpzcmMvdGVzdC9tb2R1bGVzIHRvIHJ1biB0aGVtLgotLS0KIHNyYy90ZXN0L21vZHVsZXMv TWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9tb2R1bGVzL3Rl c3RfYXV0aF9wcm92aWRlci9NYWtlZmlsZSAgfCAgIDIgKwogLi4uL3Rlc3RfYXV0aF9wcm92aWRl ci90LzAwMV9jdXN0b21fYXV0aC5wbCAgIHwgMTI1ICsrKysrKysrKysrKysrKysrKwogMyBmaWxl cyBjaGFuZ2VkLCAxMjggaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L21vZHVsZXMvdGVzdF9hdXRoX3Byb3ZpZGVyL3QvMDAxX2N1c3RvbV9hdXRoLnBsCgpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZp bGUKaW5kZXggOTA5MDIyNmRhYS4uZDBkNDYxZWY5ZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9k dWxlcy9NYWtlZmlsZQorKysgYi9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCkBAIC0xNCw2ICsx NCw3IEBAIFNVQkRJUlMgPSBcCiAJCSAgcGxzYW1wbGUgXAogCQkgIHNuYXBzaG90X3Rvb19vbGQg XAogCQkgIHNwZ2lzdF9uYW1lX29wcyBcCisJCSAgdGVzdF9hdXRoX3Byb3ZpZGVyIFwKIAkJICB0 ZXN0X2Jsb29tZmlsdGVyIFwKIAkJICB0ZXN0X2RkbF9kZXBhcnNlIFwKIAkJICB0ZXN0X2V4dGVu c2lvbnMgXApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2F1dGhfcHJvdmlkZXIv TWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYXV0aF9wcm92aWRlci9NYWtlZmlsZQpp bmRleCAxNzk3MWE1YzdhLi43ZDYwMWNmN2Q1IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYXV0aF9wcm92aWRlci9NYWtlZmlsZQorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf YXV0aF9wcm92aWRlci9NYWtlZmlsZQpAQCAtNCw2ICs0LDggQEAgTU9EVUxFX2JpZyA9IHRlc3Rf YXV0aF9wcm92aWRlcgogT0JKUyA9IHRlc3RfYXV0aF9wcm92aWRlci5vCiBQR0ZJTEVERVNDID0g InRlc3RfYXV0aF9wcm92aWRlciAtIHByb3ZpZGVyIHRvIHRlc3QgYXV0aCBob29rcyIKIAorVEFQ X1RFU1RTID0gMQorCiBpZmRlZiBVU0VfUEdYUwogUEdfQ09ORklHID0gcGdfY29uZmlnCiBQR1hT IDo9ICQoc2hlbGwgJChQR19DT05GSUcpIC0tcGd4cykKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9hdXRoX3Byb3ZpZGVyL3QvMDAxX2N1c3RvbV9hdXRoLnBsIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2F1dGhfcHJvdmlkZXIvdC8wMDFfY3VzdG9tX2F1dGgucGwKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uM2I3NDcyZGM3ZgotLS0gL2Rldi9udWxsCisr KyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9hdXRoX3Byb3ZpZGVyL3QvMDAxX2N1c3RvbV9hdXRo LnBsCkBAIC0wLDAgKzEsMTI1IEBACisKKyMgQ29weXJpZ2h0IChjKSAyMDIxLTIwMjIsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKyMgU2V0IG9mIHRlc3RzIGZvciB0ZXN0 aW5nIGN1c3RvbSBhdXRoZW50aWNhdGlvbiBob29rcy4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJu aW5nczsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRl c3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKKyMgRGVsZXRlIHBnX2hiYS5jb25mIGZyb20g dGhlIGdpdmVuIG5vZGUsIGFkZCBhIG5ldyBlbnRyeSB0byBpdAorIyBhbmQgdGhlbiBleGVjdXRl IGEgcmVsb2FkIHRvIHJlZnJlc2ggaXQuCitzdWIgcmVzZXRfcGdfaGJhCit7CisJbXkgJG5vZGUg ICAgICAgPSBzaGlmdDsKKwlteSAkaGJhX21ldGhvZCA9IHNoaWZ0OworCisJdW5saW5rKCRub2Rl LT5kYXRhX2RpciAuICcvcGdfaGJhLmNvbmYnKTsKKwkjIGp1c3QgZm9yIHRlc3RpbmcgcHVycG9z ZXMsIHVzZSBhIGNvbnRpbnVhdGlvbiBsaW5lCisJJG5vZGUtPmFwcGVuZF9jb25mKCdwZ19oYmEu Y29uZicsICJsb2NhbCBhbGwgYWxsXFxcbiAkaGJhX21ldGhvZCIpOworCSRub2RlLT5yZWxvYWQ7 CisJcmV0dXJuOworfQorCisjIFRlc3QgaWYgeW91IGdldCBleHBlY3RlZCByZXN1bHRzIGluIHBn X2hiYV9maWxlX3J1bGVzIGVycm9yIGNvbHVtbiBhZnRlcgorIyBjaGFuZ2luZyBwZ19oYmEuY29u ZiBhbmQgcmVsb2FkaW5nIGl0Lgorc3ViIHRlc3RfaGJhX3JlbG9hZAoreworCW15ICgkbm9kZSwg JG1ldGhvZCwgJGV4cGVjdGVkX3JlcykgPSBAXzsKKwlteSAkc3RhdHVzX3N0cmluZyA9ICdmYWls ZWQnOworCSRzdGF0dXNfc3RyaW5nID0gJ3N1Y2Nlc3MnIGlmICgkZXhwZWN0ZWRfcmVzIGVxIDAp OworCW15ICR0ZXN0bmFtZSA9ICJwZ19oYmEuY29uZiByZWxvYWQgJHN0YXR1c19zdHJpbmcgZm9y IG1ldGhvZCAkbWV0aG9kIjsKKworCXJlc2V0X3BnX2hiYSgkbm9kZSwgJG1ldGhvZCk7CisKKwlt eSAoJGNtZHJldCwgJHN0ZG91dCwgJHN0ZGVycikgPSAkbm9kZS0+cHNxbCgicG9zdGdyZXMiLAor CQkic2VsZWN0IGNvdW50KCopIGZyb20gcGdfaGJhX2ZpbGVfcnVsZXMgd2hlcmUgZXJyb3IgaXMg bm90IG51bGwiLGV4dHJhX3BhcmFtcyA9PiBbJy1VJywnYm9iJ10pOworCisJaXMoJHN0ZG91dCwg JGV4cGVjdGVkX3JlcywgJHRlc3RuYW1lKTsKK30KKworIyBUZXN0IGFjY2VzcyBmb3IgYSBzaW5n bGUgcm9sZSwgdXNlZnVsIHRvIHdyYXAgYWxsIHRlc3RzIGludG8gb25lLiAgRXh0cmEKKyMgbmFt ZWQgcGFyYW1ldGVycyBhcmUgcGFzc2VkIHRvIGNvbm5lY3Rfb2svZmFpbHMgYXMtaXMuCitzdWIg dGVzdF9yb2xlCit7CisJbG9jYWwgJFRlc3Q6OkJ1aWxkZXI6OkxldmVsID0gJFRlc3Q6OkJ1aWxk ZXI6OkxldmVsICsgMTsKKworCW15ICgkbm9kZSwgJHJvbGUsICRtZXRob2QsICRleHBlY3RlZF9y ZXMsICVwYXJhbXMpID0gQF87CisJbXkgJHN0YXR1c19zdHJpbmcgPSAnZmFpbGVkJzsKKwkkc3Rh dHVzX3N0cmluZyA9ICdzdWNjZXNzJyBpZiAoJGV4cGVjdGVkX3JlcyBlcSAwKTsKKworCW15ICRj b25uc3RyID0gInVzZXI9JHJvbGUiOworCW15ICR0ZXN0bmFtZSA9CisJICAiYXV0aGVudGljYXRp b24gJHN0YXR1c19zdHJpbmcgZm9yIG1ldGhvZCAkbWV0aG9kLCByb2xlICRyb2xlIjsKKworCWlm ICgkZXhwZWN0ZWRfcmVzIGVxIDApCisJeworCQkkbm9kZS0+Y29ubmVjdF9vaygkY29ubnN0ciwg JHRlc3RuYW1lLCAlcGFyYW1zKTsKKwl9CisJZWxzZQorCXsKKwkJIyBObyBjaGVja3Mgb2YgdGhl IGVycm9yIG1lc3NhZ2UsIG9ubHkgdGhlIHN0YXR1cyBjb2RlLgorCQkkbm9kZS0+Y29ubmVjdF9m YWlscygkY29ubnN0ciwgJHRlc3RuYW1lLCAlcGFyYW1zKTsKKwl9Cit9CisKKyMgSW5pdGlhbGl6 ZSBzZXJ2ZXIgbm9kZQorbXkgJG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXco J3NlcnZlcicpOworJG5vZGUtPmluaXQ7Ciskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwu Y29uZicsICJsb2dfY29ubmVjdGlvbnMgPSBvblxuIik7Ciskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bv c3RncmVzcWwuY29uZicsICJzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMgPSAndGVzdF9hdXRoX3By b3ZpZGVyLnNvJ1xuIik7Ciskbm9kZS0+c3RhcnQ7CisKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkNSRUFURSBST0xFIGJvYiBTVVBFUlVTRVIgTE9HSU47Iik7Ciskbm9kZS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgUk9MRSBhbGljZSBMT0dJTjsiKTsKKyRub2RlLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBST0xFIHRlc3QgTE9HSU47Iik7CisKKyMgQWRkIGN1 c3RvbSBhdXRoIG1ldGhvZCB0byBwZ19oYmEuY29uZgorcmVzZXRfcGdfaGJhKCRub2RlLCAnY3Vz dG9tIHByb3ZpZGVyPXRlc3QnKTsKKworIyBUZXN0IHRoYXQgdXNlcnMgYXJlIGFibGUgdG8gbG9n aW4gd2l0aCBjb3JyZWN0IHBhc3N3b3Jkcy4KKyRFTlZ7IlBHUEFTU1dPUkQifSA9ICdib2IxMjMn OwordGVzdF9yb2xlKCRub2RlLCAnYm9iJywgJ2N1c3RvbScsIDAsIGxvZ19saWtlID0+IFtxci9j b25uZWN0aW9uIGF1dGhvcml6ZWQ6IHVzZXI9Ym9iL10pOworJEVOVnsiUEdQQVNTV09SRCJ9ID0g J2FsaWNlMTIzJzsKK3Rlc3Rfcm9sZSgkbm9kZSwgJ2FsaWNlJywgJ2N1c3RvbScsIDAsIGxvZ19s aWtlID0+IFtxci9jb25uZWN0aW9uIGF1dGhvcml6ZWQ6IHVzZXI9YWxpY2UvXSk7CisKKyMgVGVz dCB0aGF0IGJhZCBwYXNzd29yZHMgYXJlIHJlamVjdGVkLgorJEVOVnsiUEdQQVNTV09SRCJ9ID0g J2JhZHBhc3N3b3JkJzsKK3Rlc3Rfcm9sZSgkbm9kZSwgJ2JvYicsICdjdXN0b20nLCAyLCBsb2df dW5saWtlID0+IFtxci9jb25uZWN0aW9uIGF1dGhvcml6ZWQ6L10pOwordGVzdF9yb2xlKCRub2Rl LCAnYWxpY2UnLCAnY3VzdG9tJywgMiwgbG9nX3VubGlrZSA9PiBbcXIvY29ubmVjdGlvbiBhdXRo b3JpemVkOi9dKTsKKworIyBUZXN0IHRoYXQgdXNlcnMgbm90IGluIGF1dGhlbnRpY2F0aW9uIGxp c3QgYXJlIHJlamVjdGVkLgordGVzdF9yb2xlKCRub2RlLCAndGVzdCcsICdjdXN0b20nLCAyLCBs b2dfdW5saWtlID0+IFtxci9jb25uZWN0aW9uIGF1dGhvcml6ZWQ6L10pOworCiskRU5WeyJQR1BB U1NXT1JEIn0gPSAnYm9iMTIzJzsKKworIyBUZXN0cyBmb3IgaW52YWxpZCBhdXRoIG9wdGlvbnMK KworIyBUZXN0IHRoYXQgYW4gaW5jb3JyZWN0IHByb3ZpZGVyIG5hbWUgaXMgbm90IGFjY2VwdGVk LgordGVzdF9oYmFfcmVsb2FkKCRub2RlLCAnY3VzdG9tIHByb3ZpZGVyPXdyb25nJywgMSk7CisK KyMgVGVzdCB0aGF0IHNwZWNpZnlpbmcgcHJvdmlkZXIgb3B0aW9uIHdpdGggZGlmZmVyZW50IGF1 dGggbWV0aG9kIGlzIG5vdCBhbGxvd2VkLgordGVzdF9oYmFfcmVsb2FkKCRub2RlLCAndHJ1c3Qg cHJvdmlkZXI9dGVzdCcsIDEpOworCisjIFRlc3QgdGhhdCBwcm92aWRlciBuYW1lIGlzIGEgbWFu ZGF0b3J5IG9wdGlvbiBmb3IgY3VzdG9tIGF1dGguCit0ZXN0X2hiYV9yZWxvYWQoJG5vZGUsICdj dXN0b20nLCAxKTsKKworIyBUZXN0IHRoYXQgY29ycmVjdCBwcm92aWRlciBuYW1lIGFsbG93cyBy ZWxvYWQgdG8gc3VjY2VlZC4KK3Rlc3RfaGJhX3JlbG9hZCgkbm9kZSwgJ2N1c3RvbSBwcm92aWRl cj10ZXN0JywgMCk7CisKKyMgQ3VzdG9tIGF1dGggbW9kdWxlcyByZXF1aXJlIG1lbnRpb25pbmcg ZXh0ZW5zaW9uIGluIHNoYXJlZF9wcmVsb2FkX2xpYnJhcmllcy4KKworIyBSZW1vdmUgZXh0ZW5z aW9uIGZyb20gc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzIGFuZCB0cnkgdG8gcmVzdGFydC4KKyRu b2RlLT5hZGp1c3RfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ3NoYXJlZF9wcmVsb2FkX2xpYnJh cmllcycsICInJyIpOworY29tbWFuZF9mYWlscyhbJ3BnX2N0bCcsICctdycsICctRCcsICRub2Rl LT5kYXRhX2RpciwgJy1sJywgJG5vZGUtPmxvZ2ZpbGUsICdyZXN0YXJ0J10sJ3Jlc3RhcnQgd2l0 aCBlbXB0eSBzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMgZmFpbGVkJyk7CisKKyMgRml4IHNoYXJl ZF9wcmVsb2FkX2xpYnJhcmllcyBhbmQgY29uZmlybSB0aGF0IHlvdSBjYW4gbm93IHJlc3RhcnQu Ciskbm9kZS0+YWRqdXN0X2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICdzaGFyZWRfcHJlbG9hZF9s aWJyYXJpZXMnLCAiJ3Rlc3RfYXV0aF9wcm92aWRlci5zbyciKTsKK2NvbW1hbmRfb2soWydwZ19j dGwnLCAnLXcnLCAnLUQnLCAkbm9kZS0+ZGF0YV9kaXIsICctbCcsICRub2RlLT5sb2dmaWxlLCdz dGFydCddLCdyZXN0YXJ0IHdpdGggY29ycmVjdCBzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMgc3Vj Y2VlZGVkJyk7CisKKyMgVGVzdCB0aGF0IHdlIGNhbiBjb25uZWN0IGFnYWluCit0ZXN0X3JvbGUo JG5vZGUsICdib2InLCAnY3VzdG9tJywgMCwgbG9nX2xpa2UgPT4gW3FyL2Nvbm5lY3Rpb24gYXV0 aG9yaXplZDogdXNlcj1ib2IvXSk7CisKK2RvbmVfdGVzdGluZygpOwotLSAKMi4yNS4xCgo= --_011_4db7d3ea061f47a15fc6d865f53dd327ea2975fbcamelvmwarecom_ Content-Type: text/x-patch; name="v4-0004-Add-support-for-map-and-custom-auth-options.patch" Content-Description: v4-0004-Add-support-for-map-and-custom-auth-options.patch Content-Disposition: attachment; filename="v4-0004-Add-support-for-map-and-custom-auth-options.patch"; size=11976; creation-date="Sat, 26 Mar 2022 00:00:22 GMT"; modification-date="Sat, 26 Mar 2022 00:00:22 GMT" Content-ID: <14CF79AB53494D46BA9E9E23C742DE55@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 RnJvbSBjMzA5NzBhMzU0YjIzZjI2ZWFmM2UxZGI3YzdkNzc1OWYyZjgyOGIzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1heSBTaGFybWEgPHNtaWxpbmdzYW1heUBnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMTQgTWFyIDIwMjIgMTQ6NTQ6MDggLTA3MDAKU3ViamVjdDogW1BBVENIIHY0 IDA0LzEwXSBBZGQgc3VwcG9ydCBmb3IgIm1hcCIgYW5kIGN1c3RvbSBhdXRoIG9wdGlvbnMKClRo aXMgY29tbWl0IGFsbG93cyBleHRlbnNpb25zIHRvIG5vdyBzcGVjaWZ5LCB2YWxpZGF0ZSBhbmQg dXNlCmN1c3RvbSBvcHRpb25zIGZvciB0aGVpciBjdXN0b20gYXV0aCBtZXRob2RzLiBUaGlzIGlz IGRvbmUgYnkKZXhwb3NpbmcgYSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGhvb2sgd2hpY2ggY2FuIGJl IGRlZmluZWQgYnkKZXh0ZW5zaW9ucy4gVGhlIHZhbGlkIG9wdGlvbnMgYXJlIHRoZW4gc3RvcmVk IGFzIGtleSAvIHZhbHVlCnBhaXJzIHdoaWNoIGNhbiBiZSB1c2VkIHdoaWxlIGNoZWNraW5nIGF1 dGhlbnRpY2F0aW9uLiBXZSBhbHNvCmFsbG93IGN1c3RvbSBhdXRoIHByb3ZpZGVycyB0byB1c2Ug dGhlICJtYXAiIG9wdGlvbiB0byB1c2UKdXNlcm1hcHMuCgpUaGUgdGVzdCBtb2R1bGUgd2FzIHVw ZGF0ZWQgdG8gdXNlIGN1c3RvbSBvcHRpb25zIGFuZCBuZXcgdGVzdHMKd2VyZSBhZGRlZC4KLS0t CiBzcmMvYmFja2VuZC9saWJwcS9hdXRoLmMgICAgICAgICAgICAgICAgICAgICAgfCAgNCArLQog c3JjL2JhY2tlbmQvbGlicHEvaGJhLmMgICAgICAgICAgICAgICAgICAgICAgIHwgNzYgKysrKysr KysrKysrKysrLS0tLQogc3JjL2luY2x1ZGUvbGlicHEvYXV0aC5oICAgICAgICAgICAgICAgICAg ICAgIHwgMTcgKysrLS0KIHNyYy9pbmNsdWRlL2xpYnBxL2hiYS5oICAgICAgICAgICAgICAgICAg ICAgICB8ICA4ICsrCiAuLi4vdGVzdF9hdXRoX3Byb3ZpZGVyL3QvMDAxX2N1c3RvbV9hdXRoLnBs ICAgfCAyMiArKysrKysKIC4uLi90ZXN0X2F1dGhfcHJvdmlkZXIvdGVzdF9hdXRoX3Byb3ZpZGVy LmMgICB8IDUwICsrKysrKysrKysrLQogNiBmaWxlcyBjaGFuZ2VkLCAxNTcgaW5zZXJ0aW9ucygr KSwgMjAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbGlicHEvYXV0aC5j IGIvc3JjL2JhY2tlbmQvbGlicHEvYXV0aC5jCmluZGV4IDM3NWVlMzM4OTIuLjRhOGE2MzkyMmEg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGguYworKysgYi9zcmMvYmFja2VuZC9s aWJwcS9hdXRoLmMKQEAgLTMzNjQsNyArMzM2NCw4IEBAIFBlcmZvcm1SYWRpdXNUcmFuc2FjdGlv bihjb25zdCBjaGFyICpzZXJ2ZXIsIGNvbnN0IGNoYXIgKnNlY3JldCwgY29uc3QgY2hhciAqcG9y CiAgKi8KIHZvaWQgUmVnaXN0ZXJBdXRoUHJvdmlkZXIoY29uc3QgY2hhciAqcHJvdmlkZXJfbmFt ZSwKIAkJQ3VzdG9tQXV0aGVudGljYXRpb25DaGVja19ob29rX3R5cGUgQXV0aGVudGljYXRpb25D aGVja0Z1bmN0aW9uLAotCQlDdXN0b21BdXRoZW50aWNhdGlvbkVycm9yX2hvb2tfdHlwZSBBdXRo ZW50aWNhdGlvbkVycm9yRnVuY3Rpb24pCisJCUN1c3RvbUF1dGhlbnRpY2F0aW9uRXJyb3JfaG9v a190eXBlIEF1dGhlbnRpY2F0aW9uRXJyb3JGdW5jdGlvbiwKKwkJQ3VzdG9tQXV0aGVudGljYXRp b25WYWxpZGF0ZU9wdGlvbnNfaG9va190eXBlIEF1dGhlbnRpY2F0aW9uT3B0aW9uc0Z1bmN0aW9u KQogewogCUN1c3RvbUF1dGhQcm92aWRlciAqcHJvdmlkZXIgPSBOVUxMOwogCU1lbW9yeUNvbnRl eHQgb2xkX2NvbnRleHQ7CkBAIC0zMzkwLDYgKzMzOTEsNyBAQCB2b2lkIFJlZ2lzdGVyQXV0aFBy b3ZpZGVyKGNvbnN0IGNoYXIgKnByb3ZpZGVyX25hbWUsCiAJcHJvdmlkZXItPm5hbWUgPSBNZW1v cnlDb250ZXh0U3RyZHVwKFRvcE1lbW9yeUNvbnRleHQscHJvdmlkZXJfbmFtZSk7CiAJcHJvdmlk ZXItPmF1dGhfY2hlY2tfaG9vayA9IEF1dGhlbnRpY2F0aW9uQ2hlY2tGdW5jdGlvbjsKIAlwcm92 aWRlci0+YXV0aF9lcnJvcl9ob29rID0gQXV0aGVudGljYXRpb25FcnJvckZ1bmN0aW9uOworCXBy b3ZpZGVyLT5hdXRoX29wdGlvbnNfaG9vayA9IEF1dGhlbnRpY2F0aW9uT3B0aW9uc0Z1bmN0aW9u OwogCWN1c3RvbV9hdXRoX3Byb3ZpZGVycyA9IGxhcHBlbmQoY3VzdG9tX2F1dGhfcHJvdmlkZXJz LCBwcm92aWRlcik7CiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZF9jb250ZXh0KTsKIH0KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYnBxL2hiYS5jIGIvc3JjL2JhY2tlbmQvbGlicHEvaGJh LmMKaW5kZXggOWYxNTI1Mjc4OS4uNDJjYjFjZTUxZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv bGlicHEvaGJhLmMKKysrIGIvc3JjL2JhY2tlbmQvbGlicHEvaGJhLmMKQEAgLTE3MjksOCArMTcy OSw5IEBAIHBhcnNlX2hiYV9hdXRoX29wdChjaGFyICpuYW1lLCBjaGFyICp2YWwsIEhiYUxpbmUg KmhiYWxpbmUsCiAJCQloYmFsaW5lLT5hdXRoX21ldGhvZCAhPSB1YVBlZXIgJiYKIAkJCWhiYWxp bmUtPmF1dGhfbWV0aG9kICE9IHVhR1NTICYmCiAJCQloYmFsaW5lLT5hdXRoX21ldGhvZCAhPSB1 YVNTUEkgJiYKLQkJCWhiYWxpbmUtPmF1dGhfbWV0aG9kICE9IHVhQ2VydCkKLQkJCUlOVkFMSURf QVVUSF9PUFRJT04oIm1hcCIsIGdldHRleHRfbm9vcCgiaWRlbnQsIHBlZXIsIGdzc2FwaSwgc3Nw aSwgYW5kIGNlcnQiKSk7CisJCQloYmFsaW5lLT5hdXRoX21ldGhvZCAhPSB1YUNlcnQgJiYKKwkJ CWhiYWxpbmUtPmF1dGhfbWV0aG9kICE9IHVhQ3VzdG9tKQorCQkJSU5WQUxJRF9BVVRIX09QVElP TigibWFwIiwgZ2V0dGV4dF9ub29wKCJpZGVudCwgcGVlciwgZ3NzYXBpLCBzc3BpLCBjZXJ0IGFu ZCBjdXN0b20iKSk7CiAJCWhiYWxpbmUtPnVzZXJtYXAgPSBwc3RyZHVwKHZhbCk7CiAJfQogCWVs c2UgaWYgKHN0cmNtcChuYW1lLCAiY2xpZW50Y2VydCIpID09IDApCkBAIC0yMTIxLDcgKzIxMjIs NiBAQCBwYXJzZV9oYmFfYXV0aF9vcHQoY2hhciAqbmFtZSwgY2hhciAqdmFsLCBIYmFMaW5lICpo YmFsaW5lLAogCQkvKgogCQkgKiBWZXJpZnkgdGhhdCB0aGUgcHJvdmlkZXIgbWVudGlvbmVkIGlz IGxvYWRlZCB2aWEgc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzLgogCQkgKi8KLQogCQlpZiAoZ2V0 X3Byb3ZpZGVyX2J5X25hbWUodmFsKSA9PSBOVUxMKQogCQl7CiAJCQllcmVwb3J0KGVsZXZlbCwK QEAgLTIxMjksNyArMjEyOSw3IEBAIHBhcnNlX2hiYV9hdXRoX29wdChjaGFyICpuYW1lLCBjaGFy ICp2YWwsIEhiYUxpbmUgKmhiYWxpbmUsCiAJCQkJCSBlcnJtc2coImNhbm5vdCB1c2UgYXV0aGVu dGljYXRpb24gcHJvdmlkZXIgJXMiLHZhbCksCiAJCQkJCSBlcnJoaW50KCJMb2FkIGF1dGhlbnRp Y2F0aW9uIHByb3ZpZGVyIHZpYSBzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMuIiksCiAJCQkJCSBl cnJjb250ZXh0KCJsaW5lICVkIG9mIGNvbmZpZ3VyYXRpb24gZmlsZSBcIiVzXCIiLAotCQkJCQkJ CWxpbmVfbnVtLCBIYmFGaWxlTmFtZSkpKTsKKwkJCQkJCQkJbGluZV9udW0sIEhiYUZpbGVOYW1l KSkpOwogCQkJKmVycl9tc2cgPSBwc3ByaW50ZigiY2Fubm90IHVzZSBhdXRoZW50aWNhdGlvbiBw cm92aWRlciAlcyIsIHZhbCk7CiAKIAkJCXJldHVybiBmYWxzZTsKQEAgLTIxNDEsMTUgKzIxNDEs NTUgQEAgcGFyc2VfaGJhX2F1dGhfb3B0KGNoYXIgKm5hbWUsIGNoYXIgKnZhbCwgSGJhTGluZSAq aGJhbGluZSwKIAl9CiAJZWxzZQogCXsKLQkJZXJlcG9ydChlbGV2ZWwsCi0JCQkJKGVycmNvZGUo RVJSQ09ERV9DT05GSUdfRklMRV9FUlJPUiksCi0JCQkJIGVycm1zZygidW5yZWNvZ25pemVkIGF1 dGhlbnRpY2F0aW9uIG9wdGlvbiBuYW1lOiBcIiVzXCIiLAotCQkJCQkJbmFtZSksCi0JCQkJIGVy cmNvbnRleHQoImxpbmUgJWQgb2YgY29uZmlndXJhdGlvbiBmaWxlIFwiJXNcIiIsCi0JCQkJCQkJ bGluZV9udW0sIEhiYUZpbGVOYW1lKSkpOwotCQkqZXJyX21zZyA9IHBzcHJpbnRmKCJ1bnJlY29n bml6ZWQgYXV0aGVudGljYXRpb24gb3B0aW9uIG5hbWU6IFwiJXNcIiIsCi0JCQkJCQkJbmFtZSk7 Ci0JCXJldHVybiBmYWxzZTsKKwkJLyoKKwkJICogQWxsb3cgY3VzdG9tIHByb3ZpZGVycyB0byB2 YWxpZGF0ZSB0aGVpciBvcHRpb25zIGlmIHRoZXkgaGF2ZSBhbgorCQkgKiBvcHRpb24gdmFsaWRh dGlvbiBmdW5jdGlvbiBkZWZpbmVkLgorCQkgKi8KKwkJaWYgKGhiYWxpbmUtPmF1dGhfbWV0aG9k ID09IHVhQ3VzdG9tICYmIChoYmFsaW5lLT5jdXN0b21fcHJvdmlkZXIgIT0gTlVMTCkpCisJCXsK KwkJCWJvb2wgdmFsaWRfb3B0aW9uID0gZmFsc2U7CisJCQlDdXN0b21BdXRoUHJvdmlkZXIgKnBy b3ZpZGVyID0gZ2V0X3Byb3ZpZGVyX2J5X25hbWUoaGJhbGluZS0+Y3VzdG9tX3Byb3ZpZGVyKTsK KwkJCWlmIChwcm92aWRlci0+YXV0aF9vcHRpb25zX2hvb2spCisJCQl7CisJCQkJdmFsaWRfb3B0 aW9uID0gcHJvdmlkZXItPmF1dGhfb3B0aW9uc19ob29rKG5hbWUsIHZhbCwgaGJhbGluZSwgZXJy X21zZyk7CisJCQkJaWYgKHZhbGlkX29wdGlvbikKKwkJCQl7CisJCQkJCUN1c3RvbU9wdGlvbiAq b3B0aW9uID0gcGFsbG9jKHNpemVvZihDdXN0b21PcHRpb24pKTsKKwkJCQkJb3B0aW9uLT5uYW1l ID0gcHN0cmR1cChuYW1lKTsKKwkJCQkJb3B0aW9uLT52YWx1ZSA9IHBzdHJkdXAodmFsKTsKKwkJ CQkJaGJhbGluZS0+Y3VzdG9tX2F1dGhfb3B0aW9ucyA9IGxhcHBlbmQoaGJhbGluZS0+Y3VzdG9t X2F1dGhfb3B0aW9ucywKKwkJCQkJCQkJCQkJCQkJICAgb3B0aW9uKTsKKwkJCQl9CisJCQl9CisJ CQllbHNlCisJCQl7CisJCQkJKmVycl9tc2cgPSBwc3ByaW50ZigidW5yZWNvZ25pemVkIGF1dGhl bnRpY2F0aW9uIG9wdGlvbiBuYW1lOiBcIiVzXCIiLAorCQkJCQkJCQkJbmFtZSk7CisJCQl9CisK KwkJCS8qIFJlcG9ydCB0aGUgZXJyb3IgcmV0dXJuZWQgYnkgdGhlIHByb3ZpZGVyIGFzIGl0IGlz ICovCisJCQlpZiAoIXZhbGlkX29wdGlvbikKKwkJCXsKKwkJCQllcmVwb3J0KGVsZXZlbCwKKwkJ CQkJCShlcnJjb2RlKEVSUkNPREVfQ09ORklHX0ZJTEVfRVJST1IpLAorCQkJCQkJIGVycm1zZygi JXMiLCAqZXJyX21zZyksCisJCQkJCQkgZXJyY29udGV4dCgibGluZSAlZCBvZiBjb25maWd1cmF0 aW9uIGZpbGUgXCIlc1wiIiwKKwkJCQkJCQkJCWxpbmVfbnVtLCBIYmFGaWxlTmFtZSkpKTsKKwkJ CQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQllcmVwb3J0KGVsZXZl bCwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9DT05GSUdfRklMRV9FUlJPUiksCisJCQkJCSBlcnJt c2coInVucmVjb2duaXplZCBhdXRoZW50aWNhdGlvbiBvcHRpb24gbmFtZTogXCIlc1wiIiwKKwkJ CQkJCQluYW1lKSwKKwkJCQkJIGVycmNvbnRleHQoImxpbmUgJWQgb2YgY29uZmlndXJhdGlvbiBm aWxlIFwiJXNcIiIsCisJCQkJCQkJCWxpbmVfbnVtLCBIYmFGaWxlTmFtZSkpKTsKKwkJCSplcnJf bXNnID0gcHNwcmludGYoInVucmVjb2duaXplZCBhdXRoZW50aWNhdGlvbiBvcHRpb24gbmFtZTog XCIlc1wiIiwKKwkJCQkJCQkJbmFtZSk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KIAl9CiAJcmV0 dXJuIHRydWU7CiB9CkBAIC0yNDg0LDYgKzI1MjQsMTYgQEAgZ2V0aGJhX29wdGlvbnMoSGJhTGlu ZSAqaGJhKQogCQlpZiAoaGJhLT5jdXN0b21fcHJvdmlkZXIpCiAJCQlvcHRpb25zW25vcHRpb25z KytdID0KIAkJCQlDU3RyaW5nR2V0VGV4dERhdHVtKHBzcHJpbnRmKCJwcm92aWRlcj0lcyIsaGJh LT5jdXN0b21fcHJvdmlkZXIpKTsKKwkJaWYgKGhiYS0+Y3VzdG9tX2F1dGhfb3B0aW9ucykKKwkJ eworCQkJTGlzdENlbGwgKmxjOworCQkJZm9yZWFjaChsYywgaGJhLT5jdXN0b21fYXV0aF9vcHRp b25zKQorCQkJeworCQkJCUN1c3RvbU9wdGlvbiAqb3B0aW9uID0gKEN1c3RvbU9wdGlvbiAqKWxm aXJzdChsYyk7CisJCQkJb3B0aW9uc1tub3B0aW9ucysrXSA9CisJCQkJCUNTdHJpbmdHZXRUZXh0 RGF0dW0ocHNwcmludGYoIiVzPSVzIixvcHRpb24tPm5hbWUsIG9wdGlvbi0+dmFsdWUpKTsKKwkJ CX0KKwkJfQogCX0KIAogCS8qIElmIHlvdSBhZGQgbW9yZSBvcHRpb25zLCBjb25zaWRlciBpbmNy ZWFzaW5nIE1BWF9IQkFfT1BUSU9OUy4gKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2xpYnBx L2F1dGguaCBiL3NyYy9pbmNsdWRlL2xpYnBxL2F1dGguaAppbmRleCA3YWZmOThkOTE5Li5jYmRj NjNiNGRmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9saWJwcS9hdXRoLmgKKysrIGIvc3JjL2lu Y2x1ZGUvbGlicHEvYXV0aC5oCkBAIC0zMSwyMiArMzEsMjkgQEAgdHlwZWRlZiBpbnQgKCpDdXN0 b21BdXRoZW50aWNhdGlvbkNoZWNrX2hvb2tfdHlwZSkgKFBvcnQgKik7CiB0eXBlZGVmIHZvaWQg KCpDbGllbnRBdXRoZW50aWNhdGlvbl9ob29rX3R5cGUpIChQb3J0ICosIGludCk7CiBleHRlcm4g UEdETExJTVBPUlQgQ2xpZW50QXV0aGVudGljYXRpb25faG9va190eXBlIENsaWVudEF1dGhlbnRp Y2F0aW9uX2hvb2s7CiAKKy8qIERlY2xhcmF0aW9ucyBmb3IgY3VzdG9tIGF1dGhlbnRpY2F0aW9u IHByb3ZpZGVycyAqLworCiAvKiBIb29rIGZvciBwbHVnaW5zIHRvIHJlcG9ydCBlcnJvciBtZXNz YWdlcyBpbiBhdXRoX2ZhaWxlZCgpICovCiB0eXBlZGVmIGNvbnN0IGNoYXIgKiAoKkN1c3RvbUF1 dGhlbnRpY2F0aW9uRXJyb3JfaG9va190eXBlKSAoUG9ydCAqKTsKIAotZXh0ZXJuIHZvaWQgUmVn aXN0ZXJBdXRoUHJvdmlkZXIKLQkJKGNvbnN0IGNoYXIgKnByb3ZpZGVyX25hbWUsCi0JCSBDdXN0 b21BdXRoZW50aWNhdGlvbkNoZWNrX2hvb2tfdHlwZSBDdXN0b21BdXRoZW50aWNhdGlvbkNoZWNr X2hvb2ssCi0JCSBDdXN0b21BdXRoZW50aWNhdGlvbkVycm9yX2hvb2tfdHlwZSBDdXN0b21BdXRo ZW50aWNhdGlvbkVycm9yX2hvb2spOworLyogSG9vayBmb3IgcGx1Z2lucyB0byB2YWxpZGF0ZSBj dXN0b20gYXV0aGVudGljYXRpb24gb3B0aW9ucyAqLwordHlwZWRlZiBib29sICgqQ3VzdG9tQXV0 aGVudGljYXRpb25WYWxpZGF0ZU9wdGlvbnNfaG9va190eXBlKQorCQkJIChjaGFyICosIGNoYXIg KiwgSGJhTGluZSAqLCBjaGFyICoqKTsKIAotLyogRGVjbGFyYXRpb25zIGZvciBjdXN0b20gYXV0 aGVudGljYXRpb24gcHJvdmlkZXJzICovCiB0eXBlZGVmIHN0cnVjdCBDdXN0b21BdXRoUHJvdmlk ZXIKIHsKIAljb25zdCBjaGFyICpuYW1lOwogCUN1c3RvbUF1dGhlbnRpY2F0aW9uQ2hlY2tfaG9v a190eXBlIGF1dGhfY2hlY2tfaG9vazsKIAlDdXN0b21BdXRoZW50aWNhdGlvbkVycm9yX2hvb2tf dHlwZSBhdXRoX2Vycm9yX2hvb2s7CisJQ3VzdG9tQXV0aGVudGljYXRpb25WYWxpZGF0ZU9wdGlv bnNfaG9va190eXBlIGF1dGhfb3B0aW9uc19ob29rOwogfSBDdXN0b21BdXRoUHJvdmlkZXI7CiAK K2V4dGVybiB2b2lkIFJlZ2lzdGVyQXV0aFByb3ZpZGVyCisJCShjb25zdCBjaGFyICpwcm92aWRl cl9uYW1lLAorCQkgQ3VzdG9tQXV0aGVudGljYXRpb25DaGVja19ob29rX3R5cGUgQ3VzdG9tQXV0 aGVudGljYXRpb25DaGVja19ob29rLAorCQkgQ3VzdG9tQXV0aGVudGljYXRpb25FcnJvcl9ob29r X3R5cGUgQ3VzdG9tQXV0aGVudGljYXRpb25FcnJvcl9ob29rLAorCQkgQ3VzdG9tQXV0aGVudGlj YXRpb25WYWxpZGF0ZU9wdGlvbnNfaG9va190eXBlIEN1c3RvbUF1dGhlbnRpY2F0aW9uT3B0aW9u c19ob29rKTsKKwogZXh0ZXJuIEN1c3RvbUF1dGhQcm92aWRlciAqZ2V0X3Byb3ZpZGVyX2J5X25h bWUoY29uc3QgY2hhciAqbmFtZSk7CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9saWJw cS9oYmEuaCBiL3NyYy9pbmNsdWRlL2xpYnBxL2hiYS5oCmluZGV4IDQ4NDkwYzQ0ZWQuLjMxYTAw YzRiNzEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2xpYnBxL2hiYS5oCisrKyBiL3NyYy9pbmNs dWRlL2xpYnBxL2hiYS5oCkBAIC03OCw2ICs3OCwxMyBAQCB0eXBlZGVmIGVudW0gQ2xpZW50Q2Vy dE5hbWUKIAljbGllbnRDZXJ0RE4KIH0gQ2xpZW50Q2VydE5hbWU7CiAKKy8qIFN0cnVjdCBmb3Ig Y3VzdG9tIG9wdGlvbnMgZGVmaW5lZCBieSBjdXN0b20gYXV0aCBwbHVnaW5zICovCit0eXBlZGVm IHN0cnVjdCBDdXN0b21PcHRpb24KK3sKKwljaGFyCSpuYW1lOworCWNoYXIJKnZhbHVlOworfUN1 c3RvbU9wdGlvbjsKKwogdHlwZWRlZiBzdHJ1Y3QgSGJhTGluZQogewogCWludAkJCWxpbmVudW1i ZXI7CkBAIC0xMjIsNiArMTI5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSGJhTGluZQogCUxpc3QJICAg KnJhZGl1c3BvcnRzOwogCWNoYXIJICAgKnJhZGl1c3BvcnRzX3M7CiAJY2hhcgkgICAqY3VzdG9t X3Byb3ZpZGVyOworCUxpc3QJICAgKmN1c3RvbV9hdXRoX29wdGlvbnM7CiB9IEhiYUxpbmU7CiAK IHR5cGVkZWYgc3RydWN0IElkZW50TGluZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2F1dGhfcHJvdmlkZXIvdC8wMDFfY3VzdG9tX2F1dGgucGwgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYXV0aF9wcm92aWRlci90LzAwMV9jdXN0b21fYXV0aC5wbAppbmRleCAzYjc0NzJkYzdm Li5lOTY0YzJmNzIzIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYXV0aF9wcm92 aWRlci90LzAwMV9jdXN0b21fYXV0aC5wbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYXV0 aF9wcm92aWRlci90LzAwMV9jdXN0b21fYXV0aC5wbApAQCAtMTA5LDYgKzEwOSwyOCBAQCB0ZXN0 X2hiYV9yZWxvYWQoJG5vZGUsICdjdXN0b20nLCAxKTsKICMgVGVzdCB0aGF0IGNvcnJlY3QgcHJv dmlkZXIgbmFtZSBhbGxvd3MgcmVsb2FkIHRvIHN1Y2NlZWQuCiB0ZXN0X2hiYV9yZWxvYWQoJG5v ZGUsICdjdXN0b20gcHJvdmlkZXI9dGVzdCcsIDApOwogCisjIFRlc3RzIGZvciBjdXN0b20gYXV0 aCBvcHRpb25zCisKKyMgVGVzdCB0aGF0IGEgY3VzdG9tIG9wdGlvbiBkb2Vzbid0IHdvcmsgd2l0 aG91dCBhIHByb3ZpZGVyLgordGVzdF9oYmFfcmVsb2FkKCRub2RlLCAnY3VzdG9tIGFsbG93PWJv YicsIDEpOworCisjIFRlc3QgdGhhdCBvcHRpb25zIG90aGVyIHRoYW4gYWxsb3dlZCBvbmVzIGFy ZSBub3QgYWNjZXB0ZWQuCit0ZXN0X2hiYV9yZWxvYWQoJG5vZGUsICdjdXN0b20gcHJvdmlkZXI9 dGVzdCB3cm9uZz10cnVlJywgMSk7CisKKyMgVGVzdCB0aGF0IG9ubHkgdmFsaWQgdmFsdWVzIGFy ZSBhY2NlcHRlZCBmb3IgYWxsb3dlZCBvcHRpb25zLgordGVzdF9oYmFfcmVsb2FkKCRub2RlLCAn Y3VzdG9tIHByb3ZpZGVyPXRlc3QgYWxsb3c9d3JvbmcnLCAxKTsKKworIyBUZXN0IHRoYXQgc2V0 dGluZyBhbGxvdyBvcHRpb24gZm9yIGEgdXNlciBkb2Vzbid0IGxvb2sgYXQgdGhlIHBhc3N3b3Jk LgordGVzdF9oYmFfcmVsb2FkKCRub2RlLCAnY3VzdG9tIHByb3ZpZGVyPXRlc3QgYWxsb3c9Ym9i JywgMCk7CiskRU5WeyJQR1BBU1NXT1JEIn0gPSAnYmFkMTIzJzsKK3Rlc3Rfcm9sZSgkbm9kZSwg J2JvYicsICdjdXN0b20nLCAwLCBsb2dfbGlrZSA9PiBbcXIvY29ubmVjdGlvbiBhdXRob3JpemVk OiB1c2VyPWJvYi9dKTsKKworIyBQYXNzd29yZCBpcyBzdGlsbCBjaGVja2VkIGZvciBvdGhlciB1 c2Vycy4KK3Rlc3Rfcm9sZSgkbm9kZSwgJ2FsaWNlJywgJ2N1c3RvbScsIDIsIGxvZ191bmxpa2Ug PT4gW3FyL2Nvbm5lY3Rpb24gYXV0aG9yaXplZDovXSk7CisKKyMgUmVzZXQgdGhlIHBhc3N3b3Jk IGZvciBmdXR1cmUgdGVzdHMuCiskRU5WeyJQR1BBU1NXT1JEIn0gPSAnYm9iMTIzJzsKKwogIyBD dXN0b20gYXV0aCBtb2R1bGVzIHJlcXVpcmUgbWVudGlvbmluZyBleHRlbnNpb24gaW4gc2hhcmVk X3ByZWxvYWRfbGlicmFyaWVzLgogCiAjIFJlbW92ZSBleHRlbnNpb24gZnJvbSBzaGFyZWRfcHJl bG9hZF9saWJyYXJpZXMgYW5kIHRyeSB0byByZXN0YXJ0LgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2F1dGhfcHJvdmlkZXIvdGVzdF9hdXRoX3Byb3ZpZGVyLmMgYi9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfYXV0aF9wcm92aWRlci90ZXN0X2F1dGhfcHJvdmlkZXIuYwppbmRleCA3 YzRiMWYzNTAwLi41YWM0MjVmNWI2IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf YXV0aF9wcm92aWRlci90ZXN0X2F1dGhfcHJvdmlkZXIuYworKysgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYXV0aF9wcm92aWRlci90ZXN0X2F1dGhfcHJvdmlkZXIuYwpAQCAtMzksNyArMzksMjcg QEAgc3RhdGljIGludCBUZXN0QXV0aGVudGljYXRpb25DaGVjayhQb3J0ICpwb3J0KQogCWludCBy ZXN1bHQgPSBTVEFUVVNfRVJST1I7CiAJY2hhciAqcmVhbF9wYXNzOwogCWNvbnN0IGNoYXIgKmxv Z2RldGFpbCA9IE5VTEw7CisJTGlzdENlbGwgKmxjOwogCisJLyoKKwkgKiBJZiB1c2VyJ3MgbmFt ZSBpcyBpbiB0aGUgdGhlICJhbGxvdyIgbGlzdCwgZG8gbm90IHJlcXVlc3QgcGFzc3dvcmQKKwkg KiBmb3IgdGhlbSBhbmQgYWxsb3cgdGhlbSB0byBhdXRoZW50aWNhdGUuCisJICovCisJZm9yZWFj aChsYyxwb3J0LT5oYmEtPmN1c3RvbV9hdXRoX29wdGlvbnMpCisJeworCQlDdXN0b21PcHRpb24g Km9wdGlvbiA9IChDdXN0b21PcHRpb24gKikgbGZpcnN0KGxjKTsKKwkJaWYgKHN0cmNtcChvcHRp b24tPm5hbWUsICJhbGxvdyIpID09IDAgJiYKKwkJCXN0cmNtcChvcHRpb24tPnZhbHVlLCBwb3J0 LT51c2VyX25hbWUpID09IDApCisJCXsKKwkJCXNldF9hdXRobl9pZChwb3J0LCBwb3J0LT51c2Vy X25hbWUpOworCQkJcmV0dXJuIFNUQVRVU19PSzsKKwkJfQorCX0KKworCS8qCisJICogRW5jcnlw dCB0aGUgcGFzc3dvcmQgYW5kIHZhbGlkYXRlIHRoYXQgaXQncyB0aGUgc2FtZSBhcyB0aGUgb25l CisJICogcmV0dXJuZWQgYnkgdGhlIGNsaWVudC4KKwkgKi8KIAlyZWFsX3Bhc3MgPSBnZXRfZW5j cnlwdGVkX3Bhc3N3b3JkX2Zvcl91c2VyKHBvcnQtPnVzZXJfbmFtZSk7CiAJaWYgKHJlYWxfcGFz cykKIAl7CkBAIC03OSw4ICs5OSwzNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqVGVzdEF1dGhlbnRp Y2F0aW9uRXJyb3IoUG9ydCAqcG9ydCkKIAlyZXR1cm4gZXJyb3JfbWVzc2FnZTsKIH0KIAorLyoK KyAqIFJldHVybnMgaWYgdGhlIG9wdGlvbnMgcGFzc2VkIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGV4 dGVuc2lvbgorICogYW5kIGFyZSB2YWxpZC4gQ3VycmVudGx5IG9ubHkgImFsbG93IiBpcyBzdXBw b3J0ZWQuCisgKi8KK3N0YXRpYyBib29sIFRlc3RBdXRoZW50aWNhdGlvbk9wdGlvbnMoY2hhciAq bmFtZSwgY2hhciAqdmFsLCBIYmFMaW5lICpoYmFsaW5lLCBjaGFyICoqZXJyX21zZykKK3sKKwkv KiBWYWxpZGF0ZSB0aGF0IGFuIGFjdHVhbCB1c2VyIGlzIGluIHRoZSAiYWxsb3ciIGxpc3QuICov CisJaWYgKHN0cmNtcChuYW1lLCJhbGxvdyIpID09IDApCisJeworCQlmb3IgKGludCBpPTA7aTwz O2krKykKKwkJeworCQkJaWYgKHN0cmNtcCh2YWwsY3JlZGVudGlhbHNbMF1baV0pID09IDApCisJ CQl7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCX0KKworCQkqZXJyX21zZyA9IHBzcHJpbnRm KCJcIiVzXCIgaXMgbm90IHZhbGlkIHZhbHVlIGZvciBvcHRpb24gXCIlc1wiIiwgdmFsLCBuYW1l KTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwllbHNlCisJeworCQkqZXJyX21zZyA9IHBzcHJpbnRm KCJvcHRpb24gXCIlc1wiIG5vdCByZWNvZ25pemVkIGJ5IFwiJXNcIiBwcm92aWRlciIsIHZhbCwg aGJhbGluZS0+Y3VzdG9tX3Byb3ZpZGVyKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKwogdm9p ZAogX1BHX2luaXQodm9pZCkKIHsKLQlSZWdpc3RlckF1dGhQcm92aWRlcigidGVzdCIsIFRlc3RB dXRoZW50aWNhdGlvbkNoZWNrLCBUZXN0QXV0aGVudGljYXRpb25FcnJvcik7CisJUmVnaXN0ZXJB dXRoUHJvdmlkZXIoInRlc3QiLCBUZXN0QXV0aGVudGljYXRpb25DaGVjaywKKwkJCQkJCSBUZXN0 QXV0aGVudGljYXRpb25FcnJvcixUZXN0QXV0aGVudGljYXRpb25PcHRpb25zKTsKIH0KLS0gCjIu MjUuMQoK --_011_4db7d3ea061f47a15fc6d865f53dd327ea2975fbcamelvmwarecom_ Content-Type: text/x-patch; name="v4-0005-common-jsonapi-support-FRONTEND-clients.patch" Content-Description: v4-0005-common-jsonapi-support-FRONTEND-clients.patch Content-Disposition: attachment; filename="v4-0005-common-jsonapi-support-FRONTEND-clients.patch"; size=20886; creation-date="Sat, 26 Mar 2022 00:00:22 GMT"; modification-date="Sat, 26 Mar 2022 00:00:22 GMT" Content-ID: <44CC7B554AD38D419DA80B1736CCCF2C@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 RnJvbSAwY2EzMjRiNTJjOTQ3NjBlNzk5OTc0ZTU2NjFmZTI5YzM5MTJkMmQ4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8cGNoYW1waW9uQHZtd2FyZS5jb20+ CkRhdGU6IE1vbiwgMyBNYXkgMjAyMSAxNTozODoyNiAtMDcwMApTdWJqZWN0OiBbUEFUQ0ggdjQg MDUvMTBdIGNvbW1vbi9qc29uYXBpOiBzdXBwb3J0IEZST05URU5EIGNsaWVudHMKCkJhc2VkIG9u IGEgcGF0Y2ggYnkgTWljaGFlbCBQYXF1aWVyLgoKRm9yIGZyb250ZW5kIGNvZGUsIHVzZSBQUUV4 cEJ1ZmZlciBpbnN0ZWFkIG9mIFN0cmluZ0luZm8uIFRoaXMgcmVxdWlyZXMKdXMgdG8gdHJhY2sg YWxsb2NhdGlvbiBmYWlsdXJlcyBzbyB0aGF0IHdlIGNhbiByZXR1cm4gSlNPTl9PVVRfT0ZfTUVN T1JZCmFzIG5lZWRlZC4ganNvbl9lcnJkZXRhaWwoKSBub3cgYWxsb2NhdGVzIGl0cyBlcnJvciBt ZXNzYWdlIGluc2lkZQptZW1vcnkgb3duZWQgYnkgdGhlIEpzb25MZXhDb250ZXh0LCBzbyBjbGll bnRzIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQKZnJlZWluZyBpdC4KCkZvciBjb252ZW5pZW5j ZSwgdGhlIGJhY2tlbmQgbm93IGhhcyBkZXN0cm95SnNvbkxleENvbnRleHQoKSB0byBtaXJyb3IK b3RoZXIgY3JlYXRlL2Rlc3Ryb3kgQVBJcy4gVGhlIGZyb250ZW5kIGhhcyBpbml0L3Rlcm0gdmVy c2lvbnMgb2YgdGhlCkFQSSB0byBoYW5kbGUgc3RhY2stYWxsb2NhdGVkIEpzb25MZXhDb250ZXh0 cy4KCldlIGNhbiBub3cgcGFydGlhbGx5IHJldmVydCBiNDQ2NjliMmNhLCBub3cgdGhhdCBqc29u X2VycmRldGFpbCgpIHdvcmtzCmNvcnJlY3RseS4KLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQv anNvbmZ1bmNzLmMgICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iaW4vcGdfdmVyaWZ5YmFja3Vw L3BhcnNlX21hbmlmZXN0LmMgICAgICB8ICAxMyArLQogc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAv dC8wMDVfYmFkX21hbmlmZXN0LnBsIHwgICAyICstCiBzcmMvY29tbW9uL01ha2VmaWxlICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9jb21tb24vanNvbmFwaS5jICAgICAg ICAgICAgICAgICAgICAgICAgICB8IDI5MCArKysrKysrKysrKysrLS0tLS0KIHNyYy9pbmNsdWRl L2NvbW1vbi9qc29uYXBpLmggICAgICAgICAgICAgICAgICB8ICA0NyArKy0KIDYgZmlsZXMgY2hh bmdlZCwgMjcwIGluc2VydGlvbnMoKyksIDg4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9q c29uZnVuY3MuYwppbmRleCAyOTY2NGFhNmU0Li43ZDMyYTk5ZDhjIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2pzb25mdW5jcy5jCkBAIC03MjMsOSArNzIzLDcgQEAganNvbl9vYmplY3Rfa2V5cyhQR19GVU5D VElPTl9BUkdTKQogCQlwZ19wYXJzZV9qc29uX29yX2VyZXBvcnQobGV4LCBzZW0pOwogCQkvKiBr ZXlzIGFyZSBub3cgaW4gc3RhdGUtPnJlc3VsdCAqLwogCi0JCXBmcmVlKGxleC0+c3RydmFsLT5k YXRhKTsKLQkJcGZyZWUobGV4LT5zdHJ2YWwpOwotCQlwZnJlZShsZXgpOworCQlkZXN0cm95SnNv bkxleENvbnRleHQobGV4KTsKIAkJcGZyZWUoc2VtKTsKIAogCQlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkY29udGV4dCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3ZlcmlmeWJhY2t1cC9wYXJz ZV9tYW5pZmVzdC5jIGIvc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvcGFyc2VfbWFuaWZlc3QuYwpp bmRleCA2MzY0YjAxMjgyLi40YjM4ZmQzOTYzIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3Zlcmlm eWJhY2t1cC9wYXJzZV9tYW5pZmVzdC5jCisrKyBiL3NyYy9iaW4vcGdfdmVyaWZ5YmFja3VwL3Bh cnNlX21hbmlmZXN0LmMKQEAgLTExOSw3ICsxMTksNyBAQCB2b2lkCiBqc29uX3BhcnNlX21hbmlm ZXN0KEpzb25NYW5pZmVzdFBhcnNlQ29udGV4dCAqY29udGV4dCwgY2hhciAqYnVmZmVyLAogCQkJ CQlzaXplX3Qgc2l6ZSkKIHsKLQlKc29uTGV4Q29udGV4dCAqbGV4OworCUpzb25MZXhDb250ZXh0 IGxleCA9IHswfTsKIAlKc29uUGFyc2VFcnJvclR5cGUganNvbl9lcnJvcjsKIAlKc29uU2VtQWN0 aW9uIHNlbTsKIAlKc29uTWFuaWZlc3RQYXJzZVN0YXRlIHBhcnNlOwpAQCAtMTI5LDggKzEyOSw4 IEBAIGpzb25fcGFyc2VfbWFuaWZlc3QoSnNvbk1hbmlmZXN0UGFyc2VDb250ZXh0ICpjb250ZXh0 LCBjaGFyICpidWZmZXIsCiAJcGFyc2Uuc3RhdGUgPSBKTV9FWFBFQ1RfVE9QTEVWRUxfU1RBUlQ7 CiAJcGFyc2Uuc2F3X3ZlcnNpb25fZmllbGQgPSBmYWxzZTsKIAotCS8qIENyZWF0ZSBhIEpTT04g bGV4aW5nIGNvbnRleHQuICovCi0JbGV4ID0gbWFrZUpzb25MZXhDb250ZXh0Q3N0cmluZ0xlbihi dWZmZXIsIHNpemUsIFBHX1VURjgsIHRydWUpOworCS8qIEluaXRpYWxpemUgYSBKU09OIGxleGlu ZyBjb250ZXh0LiAqLworCWluaXRKc29uTGV4Q29udGV4dENzdHJpbmdMZW4oJmxleCwgYnVmZmVy LCBzaXplLCBQR19VVEY4LCB0cnVlKTsKIAogCS8qIFNldCB1cCBzZW1hbnRpYyBhY3Rpb25zLiAq LwogCXNlbS5zZW1zdGF0ZSA9ICZwYXJzZTsKQEAgLTE0NSwxNCArMTQ1LDE3IEBAIGpzb25fcGFy c2VfbWFuaWZlc3QoSnNvbk1hbmlmZXN0UGFyc2VDb250ZXh0ICpjb250ZXh0LCBjaGFyICpidWZm ZXIsCiAJc2VtLnNjYWxhciA9IGpzb25fbWFuaWZlc3Rfc2NhbGFyOwogCiAJLyogUnVuIHRoZSBh Y3R1YWwgSlNPTiBwYXJzZXIuICovCi0JanNvbl9lcnJvciA9IHBnX3BhcnNlX2pzb24obGV4LCAm c2VtKTsKKwlqc29uX2Vycm9yID0gcGdfcGFyc2VfanNvbigmbGV4LCAmc2VtKTsKIAlpZiAoanNv bl9lcnJvciAhPSBKU09OX1NVQ0NFU1MpCi0JCWpzb25fbWFuaWZlc3RfcGFyc2VfZmFpbHVyZShj b250ZXh0LCAicGFyc2luZyBmYWlsZWQiKTsKKwkJanNvbl9tYW5pZmVzdF9wYXJzZV9mYWlsdXJl KGNvbnRleHQsIGpzb25fZXJyZGV0YWlsKGpzb25fZXJyb3IsICZsZXgpKTsKIAlpZiAocGFyc2Uu c3RhdGUgIT0gSk1fRVhQRUNUX0VPRikKIAkJanNvbl9tYW5pZmVzdF9wYXJzZV9mYWlsdXJlKGNv bnRleHQsICJtYW5pZmVzdCBlbmRlZCB1bmV4cGVjdGVkbHkiKTsKIAogCS8qIFZlcmlmeSB0aGUg bWFuaWZlc3QgY2hlY2tzdW0uICovCiAJdmVyaWZ5X21hbmlmZXN0X2NoZWNrc3VtKCZwYXJzZSwg YnVmZmVyLCBzaXplKTsKKworCS8qIENsZWFuIHVwLiAqLworCXRlcm1Kc29uTGV4Q29udGV4dCgm bGV4KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdmVyaWZ5YmFja3VwL3QvMDA1 X2JhZF9tYW5pZmVzdC5wbCBiL3NyYy9iaW4vcGdfdmVyaWZ5YmFja3VwL3QvMDA1X2JhZF9tYW5p ZmVzdC5wbAppbmRleCAxMThiZWI1M2Q3Li5mMjY5Mjk3MmZlIDEwMDY0NAotLS0gYS9zcmMvYmlu L3BnX3ZlcmlmeWJhY2t1cC90LzAwNV9iYWRfbWFuaWZlc3QucGwKKysrIGIvc3JjL2Jpbi9wZ192 ZXJpZnliYWNrdXAvdC8wMDVfYmFkX21hbmlmZXN0LnBsCkBAIC0xNiw3ICsxNiw3IEBAIG15ICR0 ZW1wZGlyID0gUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRlbXBkaXI7CiAKIHRlc3RfYmFkX21h bmlmZXN0KAogCSdpbnB1dCBzdHJpbmcgZW5kZWQgdW5leHBlY3RlZGx5JywKLQlxci9jb3VsZCBu b3QgcGFyc2UgYmFja3VwIG1hbmlmZXN0OiBwYXJzaW5nIGZhaWxlZC8sCisJcXIvY291bGQgbm90 IHBhcnNlIGJhY2t1cCBtYW5pZmVzdDogVGhlIGlucHV0IHN0cmluZyBlbmRlZCB1bmV4cGVjdGVk bHkvLAogCTw8RU9NKTsKIHsKIEVPTQpkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi9NYWtlZmlsZSBi L3NyYy9jb21tb24vTWFrZWZpbGUKaW5kZXggZjYyNzM0OTgzNS4uNjk0ZGEwMzY1OCAxMDA2NDQK LS0tIGEvc3JjL2NvbW1vbi9NYWtlZmlsZQorKysgYi9zcmMvY29tbW9uL01ha2VmaWxlCkBAIC00 MCw3ICs0MCw3IEBAIG92ZXJyaWRlIENQUEZMQUdTICs9IC1EVkFMX0xERkxBR1NfRVg9IlwiJChM REZMQUdTX0VYKVwiIgogb3ZlcnJpZGUgQ1BQRkxBR1MgKz0gLURWQUxfTERGTEFHU19TTD0iXCIk KExERkxBR1NfU0wpXCIiCiBvdmVycmlkZSBDUFBGTEFHUyArPSAtRFZBTF9MSUJTPSJcIiQoTElC UylcIiIKIAotb3ZlcnJpZGUgQ1BQRkxBR1MgOj0gLURGUk9OVEVORCAtSS4gLUkkKHRvcF9zcmNk aXIpL3NyYy9jb21tb24gJChDUFBGTEFHUykKK292ZXJyaWRlIENQUEZMQUdTIDo9IC1ERlJPTlRF TkQgLUkuIC1JJCh0b3Bfc3JjZGlyKS9zcmMvY29tbW9uIC1JJChsaWJwcV9zcmNkaXIpICQoQ1BQ RkxBR1MpCiBMSUJTICs9ICQoUFRIUkVBRF9MSUJTKQogCiAjIElmIHlvdSBhZGQgb2JqZWN0cyBo ZXJlLCBzZWUgYWxzbyBzcmMvdG9vbHMvbXN2Yy9Na3ZjYnVpbGQucG0KZGlmZiAtLWdpdCBhL3Ny Yy9jb21tb24vanNvbmFwaS5jIGIvc3JjL2NvbW1vbi9qc29uYXBpLmMKaW5kZXggNjY2NjA3N2E5 My4uN2ZjNWVhZjQ2MCAxMDA2NDQKLS0tIGEvc3JjL2NvbW1vbi9qc29uYXBpLmMKKysrIGIvc3Jj L2NvbW1vbi9qc29uYXBpLmMKQEAgLTIwLDEwICsyMCwzOSBAQAogI2luY2x1ZGUgImNvbW1vbi9q c29uYXBpLmgiCiAjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKIAotI2lmbmRlZiBGUk9OVEVORAor I2lmZGVmIEZST05URU5ECisjaW5jbHVkZSAicHFleHBidWZmZXIuaCIKKyNlbHNlCisjaW5jbHVk ZSAibGliL3N0cmluZ2luZm8uaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNlbmRpZgogCisv KgorICogSW4gYmFja2VuZCwgd2Ugd2lsbCB1c2UgcGFsbG9jL3BmcmVlIGFsb25nIHdpdGggU3Ry aW5nSW5mby4gIEluIGZyb250ZW5kLCB1c2UKKyAqIG1hbGxvYyBhbmQgUFFFeHBCdWZmZXIsIGFu ZCByZXR1cm4gSlNPTl9PVVRfT0ZfTUVNT1JZIG9uIG91dC1vZi1tZW1vcnkuCisgKi8KKyNpZmRl ZiBGUk9OVEVORAorCisjZGVmaW5lIFNUUkRVUChzKSBzdHJkdXAocykKKyNkZWZpbmUgQUxMT0Mo c2l6ZSkgbWFsbG9jKHNpemUpCisKKyNkZWZpbmUgYXBwZW5kU3RyVmFsCQlhcHBlbmRQUUV4cEJ1 ZmZlcgorI2RlZmluZSBhcHBlbmRTdHJWYWxDaGFyCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcgorI2Rl ZmluZSBjcmVhdGVTdHJWYWwJCWNyZWF0ZVBRRXhwQnVmZmVyCisjZGVmaW5lIHJlc2V0U3RyVmFs CQkJcmVzZXRQUUV4cEJ1ZmZlcgorCisjZWxzZSAvKiAhRlJPTlRFTkQgKi8KKworI2RlZmluZSBT VFJEVVAocykgcHN0cmR1cChzKQorI2RlZmluZSBBTExPQyhzaXplKSBwYWxsb2Moc2l6ZSkKKwor I2RlZmluZSBhcHBlbmRTdHJWYWwJCWFwcGVuZFN0cmluZ0luZm8KKyNkZWZpbmUgYXBwZW5kU3Ry VmFsQ2hhcglhcHBlbmRTdHJpbmdJbmZvQ2hhcgorI2RlZmluZSBjcmVhdGVTdHJWYWwJCW1ha2VT dHJpbmdJbmZvCisjZGVmaW5lIHJlc2V0U3RyVmFsCQkJcmVzZXRTdHJpbmdJbmZvCisKKyNlbmRp ZgorCiAvKgogICogVGhlIGNvbnRleHQgb2YgdGhlIHBhcnNlciBpcyBtYWludGFpbmVkIGJ5IHRo ZSByZWN1cnNpdmUgZGVzY2VudAogICogbWVjaGFuaXNtLCBidXQgaXMgcGFzc2VkIGV4cGxpY2l0 bHkgdG8gdGhlIGVycm9yIHJlcG9ydGluZyByb3V0aW5lCkBAIC0xMzIsMTAgKzE2MSwxMiBAQCBJ c1ZhbGlkSnNvbk51bWJlcihjb25zdCBjaGFyICpzdHIsIGludCBsZW4pCiAJcmV0dXJuICghbnVt ZXJpY19lcnJvcikgJiYgKHRvdGFsX2xlbiA9PSBkdW1teV9sZXguaW5wdXRfbGVuZ3RoKTsKIH0K IAorI2lmbmRlZiBGUk9OVEVORAorCiAvKgogICogbWFrZUpzb25MZXhDb250ZXh0Q3N0cmluZ0xl bgogICoKLSAqIGxleCBjb25zdHJ1Y3Rvciwgd2l0aCBvciB3aXRob3V0IFN0cmluZ0luZm8gb2Jq ZWN0IGZvciBkZS1lc2NhcGVkIGxleGVtZXMuCisgKiBsZXggY29uc3RydWN0b3IsIHdpdGggb3Ig d2l0aG91dCBhIHN0cmluZyBvYmplY3QgZm9yIGRlLWVzY2FwZWQgbGV4ZW1lcy4KICAqCiAgKiBX aXRob3V0IGlzIGJldHRlciBhcyBpdCBtYWtlcyB0aGUgcHJvY2Vzc2luZyBmYXN0ZXIsIHNvIG9u bHkgbWFrZSBvbmUKICAqIGlmIHJlYWxseSByZXF1aXJlZC4KQEAgLTE0NSwxMyArMTc2LDY2IEBA IG1ha2VKc29uTGV4Q29udGV4dENzdHJpbmdMZW4oY2hhciAqanNvbiwgaW50IGxlbiwgaW50IGVu Y29kaW5nLCBib29sIG5lZWRfZXNjYXBlCiB7CiAJSnNvbkxleENvbnRleHQgKmxleCA9IHBhbGxv YzAoc2l6ZW9mKEpzb25MZXhDb250ZXh0KSk7CiAKKwlpbml0SnNvbkxleENvbnRleHRDc3RyaW5n TGVuKGxleCwganNvbiwgbGVuLCBlbmNvZGluZywgbmVlZF9lc2NhcGVzKTsKKworCXJldHVybiBs ZXg7Cit9CisKK3ZvaWQKK2Rlc3Ryb3lKc29uTGV4Q29udGV4dChKc29uTGV4Q29udGV4dCAqbGV4 KQoreworCXRlcm1Kc29uTGV4Q29udGV4dChsZXgpOworCXBmcmVlKGxleCk7Cit9CisKKyNlbmRp ZiAvKiAhRlJPTlRFTkQgKi8KKwordm9pZAoraW5pdEpzb25MZXhDb250ZXh0Q3N0cmluZ0xlbihK c29uTGV4Q29udGV4dCAqbGV4LCBjaGFyICpqc29uLCBpbnQgbGVuLCBpbnQgZW5jb2RpbmcsIGJv b2wgbmVlZF9lc2NhcGVzKQorewogCWxleC0+aW5wdXQgPSBsZXgtPnRva2VuX3Rlcm1pbmF0b3Ig PSBsZXgtPmxpbmVfc3RhcnQgPSBqc29uOwogCWxleC0+bGluZV9udW1iZXIgPSAxOwogCWxleC0+ aW5wdXRfbGVuZ3RoID0gbGVuOwogCWxleC0+aW5wdXRfZW5jb2RpbmcgPSBlbmNvZGluZzsKLQlp ZiAobmVlZF9lc2NhcGVzKQotCQlsZXgtPnN0cnZhbCA9IG1ha2VTdHJpbmdJbmZvKCk7Ci0JcmV0 dXJuIGxleDsKKwlsZXgtPnBhcnNlX3N0cnZhbCA9IG5lZWRfZXNjYXBlczsKKwlpZiAobGV4LT5w YXJzZV9zdHJ2YWwpCisJeworCQkvKgorCQkgKiBUaGlzIGNhbGwgY2FuIGZhaWwgaW4gRlJPTlRF TkQgY29kZS4gV2UgZGVmZXIgZXJyb3IgaGFuZGxpbmcgdG8gdGltZQorCQkgKiBvZiB1c2UgKGpz b25fbGV4X3N0cmluZygpKSBzaW5jZSB0aGVyZSdzIG5vIHdheSB0byBzaWduYWwgZmFpbHVyZQor CQkgKiBoZXJlLCBhbmQgd2UgbWlnaHQgbm90IG5lZWQgdG8gcGFyc2UgYW55IHN0cmluZ3MgYW55 d2F5LgorCQkgKi8KKwkJbGV4LT5zdHJ2YWwgPSBjcmVhdGVTdHJWYWwoKTsKKwl9CisJbGV4LT5l cnJvcm1zZyA9IE5VTEw7Cit9CisKK3ZvaWQKK3Rlcm1Kc29uTGV4Q29udGV4dChKc29uTGV4Q29u dGV4dCAqbGV4KQoreworCXN0YXRpYyBjb25zdCBKc29uTGV4Q29udGV4dCBlbXB0eSA9IHswfTsK KworCWlmIChsZXgtPnN0cnZhbCkKKwl7CisjaWZkZWYgRlJPTlRFTkQKKwkJZGVzdHJveVBRRXhw QnVmZmVyKGxleC0+c3RydmFsKTsKKyNlbHNlCisJCXBmcmVlKGxleC0+c3RydmFsLT5kYXRhKTsK KwkJcGZyZWUobGV4LT5zdHJ2YWwpOworI2VuZGlmCisJfQorCisJaWYgKGxleC0+ZXJyb3Jtc2cp CisJeworI2lmZGVmIEZST05URU5ECisJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihsZXgtPmVycm9ybXNn KTsKKyNlbHNlCisJCXBmcmVlKGxleC0+ZXJyb3Jtc2ctPmRhdGEpOworCQlwZnJlZShsZXgtPmVy cm9ybXNnKTsKKyNlbmRpZgorCX0KKworCSpsZXggPSBlbXB0eTsKIH0KIAogLyoKQEAgLTIxNyw3 ICszMDEsNyBAQCBqc29uX2NvdW50X2FycmF5X2VsZW1lbnRzKEpzb25MZXhDb250ZXh0ICpsZXgs IGludCAqZWxlbWVudHMpCiAJICogZXRjLCBzbyBkb2luZyB0aGlzIHdpdGggYSBjb3B5IG1ha2Vz IHRoYXQgc2FmZS4KIAkgKi8KIAltZW1jcHkoJmNvcHlsZXgsIGxleCwgc2l6ZW9mKEpzb25MZXhD b250ZXh0KSk7Ci0JY29weWxleC5zdHJ2YWwgPSBOVUxMOwkJLyogbm90IGludGVyZXN0ZWQgaW4g dmFsdWVzIGhlcmUgKi8KKwljb3B5bGV4LnBhcnNlX3N0cnZhbCA9IGZhbHNlOwkJLyogbm90IGlu dGVyZXN0ZWQgaW4gdmFsdWVzIGhlcmUgKi8KIAljb3B5bGV4LmxleF9sZXZlbCsrOwogCiAJY291 bnQgPSAwOwpAQCAtMjc5LDE0ICszNjMsMjEgQEAgcGFyc2Vfc2NhbGFyKEpzb25MZXhDb250ZXh0 ICpsZXgsIEpzb25TZW1BY3Rpb24gKnNlbSkKIAkvKiBleHRyYWN0IHRoZSBkZS1lc2NhcGVkIHN0 cmluZyB2YWx1ZSwgb3IgdGhlIHJhdyBsZXhlbWUgKi8KIAlpZiAobGV4X3BlZWsobGV4KSA9PSBK U09OX1RPS0VOX1NUUklORykKIAl7Ci0JCWlmIChsZXgtPnN0cnZhbCAhPSBOVUxMKQotCQkJdmFs ID0gcHN0cmR1cChsZXgtPnN0cnZhbC0+ZGF0YSk7CisJCWlmIChsZXgtPnBhcnNlX3N0cnZhbCkK KwkJeworCQkJdmFsID0gU1RSRFVQKGxleC0+c3RydmFsLT5kYXRhKTsKKwkJCWlmICh2YWwgPT0g TlVMTCkKKwkJCQlyZXR1cm4gSlNPTl9PVVRfT0ZfTUVNT1JZOworCQl9CiAJfQogCWVsc2UKIAl7 CiAJCWludAkJCWxlbiA9IChsZXgtPnRva2VuX3Rlcm1pbmF0b3IgLSBsZXgtPnRva2VuX3N0YXJ0 KTsKIAotCQl2YWwgPSBwYWxsb2MobGVuICsgMSk7CisJCXZhbCA9IEFMTE9DKGxlbiArIDEpOwor CQlpZiAodmFsID09IE5VTEwpCisJCQlyZXR1cm4gSlNPTl9PVVRfT0ZfTUVNT1JZOworCiAJCW1l bWNweSh2YWwsIGxleC0+dG9rZW5fc3RhcnQsIGxlbik7CiAJCXZhbFtsZW5dID0gJ1wwJzsKIAl9 CkBAIC0zMjAsOCArNDExLDEyIEBAIHBhcnNlX29iamVjdF9maWVsZChKc29uTGV4Q29udGV4dCAq bGV4LCBKc29uU2VtQWN0aW9uICpzZW0pCiAKIAlpZiAobGV4X3BlZWsobGV4KSAhPSBKU09OX1RP S0VOX1NUUklORykKIAkJcmV0dXJuIHJlcG9ydF9wYXJzZV9lcnJvcihKU09OX1BBUlNFX1NUUklO RywgbGV4KTsKLQlpZiAoKG9zdGFydCAhPSBOVUxMIHx8IG9lbmQgIT0gTlVMTCkgJiYgbGV4LT5z dHJ2YWwgIT0gTlVMTCkKLQkJZm5hbWUgPSBwc3RyZHVwKGxleC0+c3RydmFsLT5kYXRhKTsKKwlp ZiAoKG9zdGFydCAhPSBOVUxMIHx8IG9lbmQgIT0gTlVMTCkgJiYgbGV4LT5wYXJzZV9zdHJ2YWwp CisJeworCQlmbmFtZSA9IFNUUkRVUChsZXgtPnN0cnZhbC0+ZGF0YSk7CisJCWlmIChmbmFtZSA9 PSBOVUxMKQorCQkJcmV0dXJuIEpTT05fT1VUX09GX01FTU9SWTsKKwl9CiAJcmVzdWx0ID0ganNv bl9sZXgobGV4KTsKIAlpZiAocmVzdWx0ICE9IEpTT05fU1VDQ0VTUykKIAkJcmV0dXJuIHJlc3Vs dDsKQEAgLTM2OCw2ICs0NjMsMTAgQEAgcGFyc2Vfb2JqZWN0KEpzb25MZXhDb250ZXh0ICpsZXgs IEpzb25TZW1BY3Rpb24gKnNlbSkKIAlKc29uUGFyc2VFcnJvclR5cGUgcmVzdWx0OwogCiAjaWZu ZGVmIEZST05URU5ECisJLyoKKwkgKiBUT0RPOiBjbGllbnRzIG5lZWQgc29tZSB3YXkgdG8gcHV0 IGEgYm91bmQgb24gc3RhY2sgZ3Jvd3RoLiBQYXJzZSBsZXZlbAorCSAqIGxpbWl0cyBtYXliZT8K KwkgKi8KIAljaGVja19zdGFja19kZXB0aCgpOwogI2VuZGlmCiAKQEAgLTY3Niw4ICs3NzUsMTUg QEAganNvbl9sZXhfc3RyaW5nKEpzb25MZXhDb250ZXh0ICpsZXgpCiAJaW50CQkJbGVuOwogCWlu dAkJCWhpX3N1cnJvZ2F0ZSA9IC0xOwogCi0JaWYgKGxleC0+c3RydmFsICE9IE5VTEwpCi0JCXJl c2V0U3RyaW5nSW5mbyhsZXgtPnN0cnZhbCk7CisJaWYgKGxleC0+cGFyc2Vfc3RydmFsKQorCXsK KyNpZmRlZiBGUk9OVEVORAorCQkvKiBtYWtlIHN1cmUgaW5pdGlhbGl6YXRpb24gc3VjY2VlZGVk ICovCisJCWlmIChsZXgtPnN0cnZhbCA9PSBOVUxMKQorCQkJcmV0dXJuIEpTT05fT1VUX09GX01F TU9SWTsKKyNlbmRpZgorCQlyZXNldFN0clZhbChsZXgtPnN0cnZhbCk7CisJfQogCiAJQXNzZXJ0 KGxleC0+aW5wdXRfbGVuZ3RoID4gMCk7CiAJcyA9IGxleC0+dG9rZW5fc3RhcnQ7CkBAIC03Mzcs NyArODQzLDcgQEAganNvbl9sZXhfc3RyaW5nKEpzb25MZXhDb250ZXh0ICpsZXgpCiAJCQkJCQly ZXR1cm4gSlNPTl9VTklDT0RFX0VTQ0FQRV9GT1JNQVQ7CiAJCQkJCX0KIAkJCQl9Ci0JCQkJaWYg KGxleC0+c3RydmFsICE9IE5VTEwpCisJCQkJaWYgKGxleC0+cGFyc2Vfc3RydmFsKQogCQkJCXsK IAkJCQkJLyoKIAkJCQkJICogQ29tYmluZSBzdXJyb2dhdGUgcGFpcnMuCkBAIC03OTcsMTkgKzkw MywxOSBAQCBqc29uX2xleF9zdHJpbmcoSnNvbkxleENvbnRleHQgKmxleCkKIAogCQkJCQkJdW5p Y29kZV90b191dGY4KGNoLCAodW5zaWduZWQgY2hhciAqKSB1dGY4c3RyKTsKIAkJCQkJCXV0Zjhs ZW4gPSBwZ191dGZfbWJsZW4oKHVuc2lnbmVkIGNoYXIgKikgdXRmOHN0cik7Ci0JCQkJCQlhcHBl bmRCaW5hcnlTdHJpbmdJbmZvKGxleC0+c3RydmFsLCB1dGY4c3RyLCB1dGY4bGVuKTsKKwkJCQkJ CWFwcGVuZEJpbmFyeVBRRXhwQnVmZmVyKGxleC0+c3RydmFsLCB1dGY4c3RyLCB1dGY4bGVuKTsK IAkJCQkJfQogCQkJCQllbHNlIGlmIChjaCA8PSAweDAwN2YpCiAJCQkJCXsKIAkJCQkJCS8qIFRo ZSBBU0NJSSByYW5nZSBpcyB0aGUgc2FtZSBpbiBhbGwgZW5jb2RpbmdzICovCi0JCQkJCQlhcHBl bmRTdHJpbmdJbmZvQ2hhcihsZXgtPnN0cnZhbCwgKGNoYXIpIGNoKTsKKwkJCQkJCWFwcGVuZFBR RXhwQnVmZmVyQ2hhcihsZXgtPnN0cnZhbCwgKGNoYXIpIGNoKTsKIAkJCQkJfQogCQkJCQllbHNl CiAJCQkJCQlyZXR1cm4gSlNPTl9VTklDT0RFX0hJR0hfRVNDQVBFOwogI2VuZGlmCQkJCQkJCS8q IEZST05URU5EICovCiAJCQkJfQogCQkJfQotCQkJZWxzZSBpZiAobGV4LT5zdHJ2YWwgIT0gTlVM TCkKKwkJCWVsc2UgaWYgKGxleC0+cGFyc2Vfc3RydmFsKQogCQkJewogCQkJCWlmIChoaV9zdXJy b2dhdGUgIT0gLTEpCiAJCQkJCXJldHVybiBKU09OX1VOSUNPREVfTE9XX1NVUlJPR0FURTsKQEAg LTgxOSwyMiArOTI1LDIyIEBAIGpzb25fbGV4X3N0cmluZyhKc29uTGV4Q29udGV4dCAqbGV4KQog CQkJCQljYXNlICciJzoKIAkJCQkJY2FzZSAnXFwnOgogCQkJCQljYXNlICcvJzoKLQkJCQkJCWFw cGVuZFN0cmluZ0luZm9DaGFyKGxleC0+c3RydmFsLCAqcyk7CisJCQkJCQlhcHBlbmRTdHJWYWxD aGFyKGxleC0+c3RydmFsLCAqcyk7CiAJCQkJCQlicmVhazsKIAkJCQkJY2FzZSAnYic6Ci0JCQkJ CQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihsZXgtPnN0cnZhbCwgJ1xiJyk7CisJCQkJCQlhcHBlbmRT dHJWYWxDaGFyKGxleC0+c3RydmFsLCAnXGInKTsKIAkJCQkJCWJyZWFrOwogCQkJCQljYXNlICdm JzoKLQkJCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGxleC0+c3RydmFsLCAnXGYnKTsKKwkJCQkJ CWFwcGVuZFN0clZhbENoYXIobGV4LT5zdHJ2YWwsICdcZicpOwogCQkJCQkJYnJlYWs7CiAJCQkJ CWNhc2UgJ24nOgotCQkJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIobGV4LT5zdHJ2YWwsICdcbicp OworCQkJCQkJYXBwZW5kU3RyVmFsQ2hhcihsZXgtPnN0cnZhbCwgJ1xuJyk7CiAJCQkJCQlicmVh azsKIAkJCQkJY2FzZSAncic6Ci0JCQkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihsZXgtPnN0cnZh bCwgJ1xyJyk7CisJCQkJCQlhcHBlbmRTdHJWYWxDaGFyKGxleC0+c3RydmFsLCAnXHInKTsKIAkJ CQkJCWJyZWFrOwogCQkJCQljYXNlICd0JzoKLQkJCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGxl eC0+c3RydmFsLCAnXHQnKTsKKwkJCQkJCWFwcGVuZFN0clZhbENoYXIobGV4LT5zdHJ2YWwsICdc dCcpOwogCQkJCQkJYnJlYWs7CiAJCQkJCWRlZmF1bHQ6CiAJCQkJCQkvKiBOb3QgYSB2YWxpZCBz dHJpbmcgZXNjYXBlLCBzbyBzaWduYWwgZXJyb3IuICovCkBAIC04NTgsMTIgKzk2NCwxMiBAQCBq c29uX2xleF9zdHJpbmcoSnNvbkxleENvbnRleHQgKmxleCkKIAkJCX0KIAogCQl9Ci0JCWVsc2Ug aWYgKGxleC0+c3RydmFsICE9IE5VTEwpCisJCWVsc2UgaWYgKGxleC0+cGFyc2Vfc3RydmFsKQog CQl7CiAJCQlpZiAoaGlfc3Vycm9nYXRlICE9IC0xKQogCQkJCXJldHVybiBKU09OX1VOSUNPREVf TE9XX1NVUlJPR0FURTsKIAotCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIobGV4LT5zdHJ2YWwsICpz KTsKKwkJCWFwcGVuZFN0clZhbENoYXIobGV4LT5zdHJ2YWwsICpzKTsKIAkJfQogCiAJfQpAQCAt ODcxLDYgKzk3NywxMSBAQCBqc29uX2xleF9zdHJpbmcoSnNvbkxleENvbnRleHQgKmxleCkKIAlp ZiAoaGlfc3Vycm9nYXRlICE9IC0xKQogCQlyZXR1cm4gSlNPTl9VTklDT0RFX0xPV19TVVJST0dB VEU7CiAKKyNpZmRlZiBGUk9OVEVORAorCWlmIChsZXgtPnBhcnNlX3N0cnZhbCAmJiBQUUV4cEJ1 ZmZlckJyb2tlbihsZXgtPnN0cnZhbCkpCisJCXJldHVybiBKU09OX09VVF9PRl9NRU1PUlk7Cisj ZW5kaWYKKwogCS8qIEhvb3JheSwgd2UgZm91bmQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nISAqLwog CWxleC0+cHJldl90b2tlbl90ZXJtaW5hdG9yID0gbGV4LT50b2tlbl90ZXJtaW5hdG9yOwogCWxl eC0+dG9rZW5fdGVybWluYXRvciA9IHMgKyAxOwpAQCAtMTA0Myw3MiArMTE1NCw5MyBAQCByZXBv cnRfcGFyc2VfZXJyb3IoSnNvblBhcnNlQ29udGV4dCBjdHgsIEpzb25MZXhDb250ZXh0ICpsZXgp CiAJcmV0dXJuIEpTT05fU1VDQ0VTUzsJCS8qIHNpbGVuY2Ugc3R1cGlkZXIgY29tcGlsZXJzICov CiB9CiAKLQotI2lmbmRlZiBGUk9OVEVORAotLyoKLSAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdG9r ZW4gZnJvbSBhIGxleGluZyBjb250ZXh0LCBmb3IgZXJyb3IgcmVwb3J0aW5nLgotICovCi1zdGF0 aWMgY2hhciAqCi1leHRyYWN0X3Rva2VuKEpzb25MZXhDb250ZXh0ICpsZXgpCi17Ci0JaW50CQkJ dG9rbGVuID0gbGV4LT50b2tlbl90ZXJtaW5hdG9yIC0gbGV4LT50b2tlbl9zdGFydDsKLQljaGFy CSAgICp0b2tlbiA9IHBhbGxvYyh0b2tsZW4gKyAxKTsKLQotCW1lbWNweSh0b2tlbiwgbGV4LT50 b2tlbl9zdGFydCwgdG9rbGVuKTsKLQl0b2tlblt0b2tsZW5dID0gJ1wwJzsKLQlyZXR1cm4gdG9r ZW47Ci19Ci0KIC8qCiAgKiBDb25zdHJ1Y3QgYSBkZXRhaWwgbWVzc2FnZSBmb3IgYSBKU09OIGVy cm9yLgogICoKLSAqIE5vdGUgdGhhdCB0aGUgZXJyb3IgbWVzc2FnZSBnZW5lcmF0ZWQgYnkgdGhp cyByb3V0aW5lIG1heSBub3QgYmUKLSAqIHBhbGxvYydkLCBtYWtpbmcgaXQgdW5zYWZlIGZvciBm cm9udGVuZCBjb2RlIGFzIHRoZXJlIGlzIG5vIHdheSB0bwotICoga25vdyBpZiB0aGlzIGNhbiBi ZSBzYWZlcnkgcGZyZWUnZCBvciBub3QuCisgKiBUaGUgcmV0dXJuZWQgYWxsb2NhdGlvbiBpcyBl aXRoZXIgc3RhdGljIG9yIG93bmVkIGJ5IHRoZSBKc29uTGV4Q29udGV4dCBhbmQKKyAqIHNob3Vs ZCBub3QgYmUgZnJlZWQuCiAgKi8KIGNoYXIgKgoganNvbl9lcnJkZXRhaWwoSnNvblBhcnNlRXJy b3JUeXBlIGVycm9yLCBKc29uTGV4Q29udGV4dCAqbGV4KQogeworCWludAkJdG9rbGVuID0gbGV4 LT50b2tlbl90ZXJtaW5hdG9yIC0gbGV4LT50b2tlbl9zdGFydDsKKworCWlmIChlcnJvciA9PSBK U09OX09VVF9PRl9NRU1PUlkpCisJeworCQkvKiBTaG9ydCBjaXJjdWl0LiBBbGxvY2F0aW5nIGFu eXRoaW5nIGZvciB0aGlzIGNhc2UgaXMgdW5oZWxwZnVsLiAqLworCQlyZXR1cm4gXygib3V0IG9m IG1lbW9yeSIpOworCX0KKworCWlmIChsZXgtPmVycm9ybXNnKQorCQlyZXNldFN0clZhbChsZXgt PmVycm9ybXNnKTsKKwllbHNlCisJCWxleC0+ZXJyb3Jtc2cgPSBjcmVhdGVTdHJWYWwoKTsKKwog CXN3aXRjaCAoZXJyb3IpCiAJewogCQljYXNlIEpTT05fU1VDQ0VTUzoKIAkJCS8qIGZhbGwgdGhy b3VnaCB0byB0aGUgZXJyb3IgY29kZSBhZnRlciBzd2l0Y2ggKi8KIAkJCWJyZWFrOwogCQljYXNl IEpTT05fRVNDQVBJTkdfSU5WQUxJRDoKLQkJCXJldHVybiBwc3ByaW50ZihfKCJFc2NhcGUgc2Vx dWVuY2UgXCJcXCVzXCIgaXMgaW52YWxpZC4iKSwKLQkJCQkJCQlleHRyYWN0X3Rva2VuKGxleCkp OworCQkJYXBwZW5kU3RyVmFsKGxleC0+ZXJyb3Jtc2csCisJCQkJCQkgXygiRXNjYXBlIHNlcXVl bmNlIFwiXFwlLipzXCIgaXMgaW52YWxpZC4iKSwKKwkJCQkJCSB0b2tsZW4sIGxleC0+dG9rZW5f c3RhcnQpOworCQkJYnJlYWs7CiAJCWNhc2UgSlNPTl9FU0NBUElOR19SRVFVSVJFRDoKLQkJCXJl dHVybiBwc3ByaW50ZihfKCJDaGFyYWN0ZXIgd2l0aCB2YWx1ZSAweCUwMnggbXVzdCBiZSBlc2Nh cGVkLiIpLAotCQkJCQkJCSh1bnNpZ25lZCBjaGFyKSAqKGxleC0+dG9rZW5fdGVybWluYXRvcikp OworCQkJYXBwZW5kU3RyVmFsKGxleC0+ZXJyb3Jtc2csCisJCQkJCQkgXygiQ2hhcmFjdGVyIHdp dGggdmFsdWUgMHglMDJ4IG11c3QgYmUgZXNjYXBlZC4iKSwKKwkJCQkJCSAodW5zaWduZWQgY2hh cikgKihsZXgtPnRva2VuX3Rlcm1pbmF0b3IpKTsKKwkJCWJyZWFrOwogCQljYXNlIEpTT05fRVhQ RUNURURfRU5EOgotCQkJcmV0dXJuIHBzcHJpbnRmKF8oIkV4cGVjdGVkIGVuZCBvZiBpbnB1dCwg YnV0IGZvdW5kIFwiJXNcIi4iKSwKLQkJCQkJCQlleHRyYWN0X3Rva2VuKGxleCkpOworCQkJYXBw ZW5kU3RyVmFsKGxleC0+ZXJyb3Jtc2csCisJCQkJCQkgXygiRXhwZWN0ZWQgZW5kIG9mIGlucHV0 LCBidXQgZm91bmQgXCIlLipzXCIuIiksCisJCQkJCQkgdG9rbGVuLCBsZXgtPnRva2VuX3N0YXJ0 KTsKKwkJCWJyZWFrOwogCQljYXNlIEpTT05fRVhQRUNURURfQVJSQVlfRklSU1Q6Ci0JCQlyZXR1 cm4gcHNwcmludGYoXygiRXhwZWN0ZWQgYXJyYXkgZWxlbWVudCBvciBcIl1cIiwgYnV0IGZvdW5k IFwiJXNcIi4iKSwKLQkJCQkJCQlleHRyYWN0X3Rva2VuKGxleCkpOworCQkJYXBwZW5kU3RyVmFs KGxleC0+ZXJyb3Jtc2csCisJCQkJCQkgXygiRXhwZWN0ZWQgYXJyYXkgZWxlbWVudCBvciBcIl1c IiwgYnV0IGZvdW5kIFwiJS4qc1wiLiIpLAorCQkJCQkJIHRva2xlbiwgbGV4LT50b2tlbl9zdGFy dCk7CisJCQlicmVhazsKIAkJY2FzZSBKU09OX0VYUEVDVEVEX0FSUkFZX05FWFQ6Ci0JCQlyZXR1 cm4gcHNwcmludGYoXygiRXhwZWN0ZWQgXCIsXCIgb3IgXCJdXCIsIGJ1dCBmb3VuZCBcIiVzXCIu IiksCi0JCQkJCQkJZXh0cmFjdF90b2tlbihsZXgpKTsKKwkJCWFwcGVuZFN0clZhbChsZXgtPmVy cm9ybXNnLAorCQkJCQkJIF8oIkV4cGVjdGVkIFwiLFwiIG9yIFwiXVwiLCBidXQgZm91bmQgXCIl LipzXCIuIiksCisJCQkJCQkgdG9rbGVuLCBsZXgtPnRva2VuX3N0YXJ0KTsKKwkJCWJyZWFrOwog CQljYXNlIEpTT05fRVhQRUNURURfQ09MT046Ci0JCQlyZXR1cm4gcHNwcmludGYoXygiRXhwZWN0 ZWQgXCI6XCIsIGJ1dCBmb3VuZCBcIiVzXCIuIiksCi0JCQkJCQkJZXh0cmFjdF90b2tlbihsZXgp KTsKKwkJCWFwcGVuZFN0clZhbChsZXgtPmVycm9ybXNnLAorCQkJCQkJIF8oIkV4cGVjdGVkIFwi OlwiLCBidXQgZm91bmQgXCIlLipzXCIuIiksCisJCQkJCQkgdG9rbGVuLCBsZXgtPnRva2VuX3N0 YXJ0KTsKKwkJCWJyZWFrOwogCQljYXNlIEpTT05fRVhQRUNURURfSlNPTjoKLQkJCXJldHVybiBw c3ByaW50ZihfKCJFeHBlY3RlZCBKU09OIHZhbHVlLCBidXQgZm91bmQgXCIlc1wiLiIpLAotCQkJ CQkJCWV4dHJhY3RfdG9rZW4obGV4KSk7CisJCQlhcHBlbmRTdHJWYWwobGV4LT5lcnJvcm1zZywK KwkJCQkJCSBfKCJFeHBlY3RlZCBKU09OIHZhbHVlLCBidXQgZm91bmQgXCIlLipzXCIuIiksCisJ CQkJCQkgdG9rbGVuLCBsZXgtPnRva2VuX3N0YXJ0KTsKKwkJCWJyZWFrOwogCQljYXNlIEpTT05f RVhQRUNURURfTU9SRToKIAkJCXJldHVybiBfKCJUaGUgaW5wdXQgc3RyaW5nIGVuZGVkIHVuZXhw ZWN0ZWRseS4iKTsKIAkJY2FzZSBKU09OX0VYUEVDVEVEX09CSkVDVF9GSVJTVDoKLQkJCXJldHVy biBwc3ByaW50ZihfKCJFeHBlY3RlZCBzdHJpbmcgb3IgXCJ9XCIsIGJ1dCBmb3VuZCBcIiVzXCIu IiksCi0JCQkJCQkJZXh0cmFjdF90b2tlbihsZXgpKTsKKwkJCWFwcGVuZFN0clZhbChsZXgtPmVy cm9ybXNnLAorCQkJCQkJIF8oIkV4cGVjdGVkIHN0cmluZyBvciBcIn1cIiwgYnV0IGZvdW5kIFwi JS4qc1wiLiIpLAorCQkJCQkJIHRva2xlbiwgbGV4LT50b2tlbl9zdGFydCk7CisJCQlicmVhazsK IAkJY2FzZSBKU09OX0VYUEVDVEVEX09CSkVDVF9ORVhUOgotCQkJcmV0dXJuIHBzcHJpbnRmKF8o IkV4cGVjdGVkIFwiLFwiIG9yIFwifVwiLCBidXQgZm91bmQgXCIlc1wiLiIpLAotCQkJCQkJCWV4 dHJhY3RfdG9rZW4obGV4KSk7CisJCQlhcHBlbmRTdHJWYWwobGV4LT5lcnJvcm1zZywKKwkJCQkJ CSBfKCJFeHBlY3RlZCBcIixcIiBvciBcIn1cIiwgYnV0IGZvdW5kIFwiJS4qc1wiLiIpLAorCQkJ CQkJIHRva2xlbiwgbGV4LT50b2tlbl9zdGFydCk7CisJCQlicmVhazsKIAkJY2FzZSBKU09OX0VY UEVDVEVEX1NUUklORzoKLQkJCXJldHVybiBwc3ByaW50ZihfKCJFeHBlY3RlZCBzdHJpbmcsIGJ1 dCBmb3VuZCBcIiVzXCIuIiksCi0JCQkJCQkJZXh0cmFjdF90b2tlbihsZXgpKTsKKwkJCWFwcGVu ZFN0clZhbChsZXgtPmVycm9ybXNnLAorCQkJCQkJIF8oIkV4cGVjdGVkIHN0cmluZywgYnV0IGZv dW5kIFwiJS4qc1wiLiIpLAorCQkJCQkJIHRva2xlbiwgbGV4LT50b2tlbl9zdGFydCk7CisJCQli cmVhazsKIAkJY2FzZSBKU09OX0lOVkFMSURfVE9LRU46Ci0JCQlyZXR1cm4gcHNwcmludGYoXygi VG9rZW4gXCIlc1wiIGlzIGludmFsaWQuIiksCi0JCQkJCQkJZXh0cmFjdF90b2tlbihsZXgpKTsK KwkJCWFwcGVuZFN0clZhbChsZXgtPmVycm9ybXNnLAorCQkJCQkJIF8oIlRva2VuIFwiJS4qc1wi IGlzIGludmFsaWQuIiksCisJCQkJCQkgdG9rbGVuLCBsZXgtPnRva2VuX3N0YXJ0KTsKKwkJCWJy ZWFrOworCQljYXNlIEpTT05fT1VUX09GX01FTU9SWToKKwkJCS8qIHNob3VsZCBoYXZlIGJlZW4g aGFuZGxlZCBhYm92ZTsgdXNlIHRoZSBlcnJvciBwYXRoICovCisJCQlicmVhazsKIAkJY2FzZSBK U09OX1VOSUNPREVfQ09ERV9QT0lOVF9aRVJPOgogCQkJcmV0dXJuIF8oIlxcdTAwMDAgY2Fubm90 IGJlIGNvbnZlcnRlZCB0byB0ZXh0LiIpOwogCQljYXNlIEpTT05fVU5JQ09ERV9FU0NBUEVfRk9S TUFUOgpAQCAtMTEyMiwxMiArMTI1NCwyMiBAQCBqc29uX2VycmRldGFpbChKc29uUGFyc2VFcnJv clR5cGUgZXJyb3IsIEpzb25MZXhDb250ZXh0ICpsZXgpCiAJCQlyZXR1cm4gXygiVW5pY29kZSBs b3cgc3Vycm9nYXRlIG11c3QgZm9sbG93IGEgaGlnaCBzdXJyb2dhdGUuIik7CiAJfQogCi0JLyoK LQkgKiBXZSBkb24ndCB1c2UgYSBkZWZhdWx0OiBjYXNlLCBzbyB0aGF0IHRoZSBjb21waWxlciB3 aWxsIHdhcm4gYWJvdXQKLQkgKiB1bmhhbmRsZWQgZW51bSB2YWx1ZXMuICBCdXQgdGhpcyBuZWVk cyB0byBiZSBoZXJlIGFueXdheSB0byBjb3ZlciB0aGUKLQkgKiBwb3NzaWJpbGl0eSBvZiBhbiBp bmNvcnJlY3QgaW5wdXQuCi0JICovCi0JZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQganNvbiBwYXJz ZSBlcnJvciB0eXBlOiAlZCIsIChpbnQpIGVycm9yKTsKLQlyZXR1cm4gTlVMTDsKLX0KKwkvKiBO b3RlIHRoYXQgbGV4LT5lcnJvcm1zZyBjYW4gYmUgTlVMTCBpbiBGUk9OVEVORCBjb2RlLiAqLwor CWlmIChsZXgtPmVycm9ybXNnICYmICFsZXgtPmVycm9ybXNnLT5kYXRhWzBdKQorCXsKKwkJLyoK KwkJICogV2UgZG9uJ3QgdXNlIGEgZGVmYXVsdDogY2FzZSwgc28gdGhhdCB0aGUgY29tcGlsZXIg d2lsbCB3YXJuIGFib3V0CisJCSAqIHVuaGFuZGxlZCBlbnVtIHZhbHVlcy4gIEJ1dCB0aGlzIG5l ZWRzIHRvIGJlIGhlcmUgYW55d2F5IHRvIGNvdmVyIHRoZQorCQkgKiBwb3NzaWJpbGl0eSBvZiBh biBpbmNvcnJlY3QgaW5wdXQuCisJCSAqLworCQlhcHBlbmRTdHJWYWwobGV4LT5lcnJvcm1zZywK KwkJCQkJICJ1bmV4cGVjdGVkIGpzb24gcGFyc2UgZXJyb3IgdHlwZTogJWQiLCAoaW50KSBlcnJv cik7CisJfQorCisjaWZkZWYgRlJPTlRFTkQKKwlpZiAoUFFFeHBCdWZmZXJCcm9rZW4obGV4LT5l cnJvcm1zZykpCisJCXJldHVybiBfKCJvdXQgb2YgbWVtb3J5IHdoaWxlIGNvbnN0cnVjdGluZyBl cnJvciBkZXNjcmlwdGlvbiIpOwogI2VuZGlmCisKKwlyZXR1cm4gbGV4LT5lcnJvcm1zZy0+ZGF0 YTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1vbi9qc29uYXBpLmggYi9zcmMvaW5j bHVkZS9jb21tb24vanNvbmFwaS5oCmluZGV4IDUyY2I0YTkzMzkuLmQ3Y2FmYzg0ZmUgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1vbi9qc29uYXBpLmgKKysrIGIvc3JjL2luY2x1ZGUvY29t bW9uL2pzb25hcGkuaApAQCAtMTQsOCArMTQsNiBAQAogI2lmbmRlZiBKU09OQVBJX0gKICNkZWZp bmUgSlNPTkFQSV9ICiAKLSNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgotCiB0eXBlZGVmIGVu dW0KIHsKIAlKU09OX1RPS0VOX0lOVkFMSUQsCkBAIC00OCw2ICs0Niw3IEBAIHR5cGVkZWYgZW51 bQogCUpTT05fRVhQRUNURURfT0JKRUNUX05FWFQsCiAJSlNPTl9FWFBFQ1RFRF9TVFJJTkcsCiAJ SlNPTl9JTlZBTElEX1RPS0VOLAorCUpTT05fT1VUX09GX01FTU9SWSwKIAlKU09OX1VOSUNPREVf Q09ERV9QT0lOVF9aRVJPLAogCUpTT05fVU5JQ09ERV9FU0NBUEVfRk9STUFULAogCUpTT05fVU5J Q09ERV9ISUdIX0VTQ0FQRSwKQEAgLTU1LDYgKzU0LDE3IEBAIHR5cGVkZWYgZW51bQogCUpTT05f VU5JQ09ERV9MT1dfU1VSUk9HQVRFCiB9IEpzb25QYXJzZUVycm9yVHlwZTsKIAorLyoKKyAqIERv bid0IGRlcGVuZCBvbiB0aGUgaW50ZXJuYWwgdHlwZSBoZWFkZXIgZm9yIHN0cnZhbDsgaWYgY2Fs bGVycyBuZWVkIGFjY2VzcworICogdGhlbiB0aGV5IGNhbiBpbmNsdWRlIHRoZSBhcHByb3ByaWF0 ZSBoZWFkZXIgdGhlbXNlbHZlcy4KKyAqLworI2lmZGVmIEZST05URU5ECisjZGVmaW5lIFN0clZh bFR5cGUgUFFFeHBCdWZmZXJEYXRhCisjZWxzZQorI2RlZmluZSBTdHJWYWxUeXBlIFN0cmluZ0lu Zm9EYXRhCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgU3RyVmFsVHlwZSBTdHJWYWxUeXBlOwog CiAvKgogICogQWxsIHRoZSBmaWVsZHMgaW4gdGhpcyBzdHJ1Y3R1cmUgc2hvdWxkIGJlIHRyZWF0 ZWQgYXMgcmVhZC1vbmx5LgpAQCAtODEsNyArOTEsOSBAQCB0eXBlZGVmIHN0cnVjdCBKc29uTGV4 Q29udGV4dAogCWludAkJCWxleF9sZXZlbDsKIAlpbnQJCQlsaW5lX251bWJlcjsJLyogbGluZSBu dW1iZXIsIHN0YXJ0aW5nIGZyb20gMSAqLwogCWNoYXIJICAgKmxpbmVfc3RhcnQ7CQkvKiB3aGVy ZSB0aGF0IGxpbmUgc3RhcnRzIHdpdGhpbiBpbnB1dCAqLwotCVN0cmluZ0luZm8Jc3RydmFsOwor CWJvb2wJCXBhcnNlX3N0cnZhbDsKKwlTdHJWYWxUeXBlICpzdHJ2YWw7CQkJLyogb25seSB1c2Vk IGlmIHBhcnNlX3N0cnZhbCA9PSB0cnVlICovCisJU3RyVmFsVHlwZSAqZXJyb3Jtc2c7CiB9IEpz b25MZXhDb250ZXh0OwogCiB0eXBlZGVmIHZvaWQgKCpqc29uX3N0cnVjdF9hY3Rpb24pICh2b2lk ICpzdGF0ZSk7CkBAIC0xNDEsOSArMTUzLDEwIEBAIGV4dGVybiBKc29uU2VtQWN0aW9uIG51bGxT ZW1BY3Rpb247CiAgKi8KIGV4dGVybiBKc29uUGFyc2VFcnJvclR5cGUganNvbl9jb3VudF9hcnJh eV9lbGVtZW50cyhKc29uTGV4Q29udGV4dCAqbGV4LAogCQkJCQkJCQkJCQkJCWludCAqZWxlbWVu dHMpOworI2lmbmRlZiBGUk9OVEVORAogCiAvKgotICogY29uc3RydWN0b3IgZm9yIEpzb25MZXhD b250ZXh0LCB3aXRoIG9yIHdpdGhvdXQgc3RydmFsIGVsZW1lbnQuCisgKiBhbGxvY2F0aW5nIGNv bnN0cnVjdG9yIGZvciBKc29uTGV4Q29udGV4dCwgd2l0aCBvciB3aXRob3V0IHN0cnZhbCBlbGVt ZW50LgogICogSWYgc3VwcGxpZWQsIHRoZSBzdHJ2YWwgZWxlbWVudCB3aWxsIGNvbnRhaW4gYSBk ZS1lc2NhcGVkIHZlcnNpb24gb2YKICAqIHRoZSBsZXhlbWUuIEhvd2V2ZXIsIGRvaW5nIHRoaXMg aW1wb3NlcyBhIHBlcmZvcm1hbmNlIHBlbmFsdHksIHNvCiAgKiBpdCBzaG91bGQgYmUgYXZvaWRl ZCBpZiB0aGUgZGUtZXNjYXBlZCBsZXhlbWUgaXMgbm90IHJlcXVpcmVkLgpAQCAtMTUzLDYgKzE2 NiwzMiBAQCBleHRlcm4gSnNvbkxleENvbnRleHQgKm1ha2VKc29uTGV4Q29udGV4dENzdHJpbmdM ZW4oY2hhciAqanNvbiwKIAkJCQkJCQkJCQkJCQlpbnQgZW5jb2RpbmcsCiAJCQkJCQkJCQkJCQkJ Ym9vbCBuZWVkX2VzY2FwZXMpOwogCisvKgorICogQ291bnRlcnBhcnQgdG8gbWFrZUpzb25MZXhD b250ZXh0Q3N0cmluZ0xlbigpOiBjbGVhcnMgYW5kIGRlYWxsb2NhdGVzIGxleC4KKyAqIFRoZSBj b250ZXh0IHBvaW50ZXIgc2hvdWxkIG5vdCBiZSB1c2VkIGFmdGVyIHRoaXMgY2FsbC4KKyAqLwor ZXh0ZXJuIHZvaWQgZGVzdHJveUpzb25MZXhDb250ZXh0KEpzb25MZXhDb250ZXh0ICpsZXgpOwor CisjZW5kaWYgLyogIUZST05URU5EICovCisKKy8qCisgKiBzdGFjayBjb25zdHJ1Y3RvciBmb3Ig SnNvbkxleENvbnRleHQsIHdpdGggb3Igd2l0aG91dCBzdHJ2YWwgZWxlbWVudC4KKyAqIElmIHN1 cHBsaWVkLCB0aGUgc3RydmFsIGVsZW1lbnQgd2lsbCBjb250YWluIGEgZGUtZXNjYXBlZCB2ZXJz aW9uIG9mCisgKiB0aGUgbGV4ZW1lLiBIb3dldmVyLCBkb2luZyB0aGlzIGltcG9zZXMgYSBwZXJm b3JtYW5jZSBwZW5hbHR5LCBzbworICogaXQgc2hvdWxkIGJlIGF2b2lkZWQgaWYgdGhlIGRlLWVz Y2FwZWQgbGV4ZW1lIGlzIG5vdCByZXF1aXJlZC4KKyAqLworZXh0ZXJuIHZvaWQgaW5pdEpzb25M ZXhDb250ZXh0Q3N0cmluZ0xlbihKc29uTGV4Q29udGV4dCAqbGV4LAorCQkJCQkJCQkJCSBjaGFy ICpqc29uLAorCQkJCQkJCQkJCSBpbnQgbGVuLAorCQkJCQkJCQkJCSBpbnQgZW5jb2RpbmcsCisJ CQkJCQkJCQkJIGJvb2wgbmVlZF9lc2NhcGVzKTsKKworLyoKKyAqIENvdW50ZXJwYXJ0IHRvIGlu aXRKc29uTGV4Q29udGV4dENzdHJpbmdMZW4oKTogY2xlYXJzIHRoZSBjb250ZW50cyBvZiBsZXgs CisgKiBidXQgZG9lcyBub3QgZGVhbGxvY2F0ZSBsZXggaXRzZWxmLgorICovCitleHRlcm4gdm9p ZCB0ZXJtSnNvbkxleENvbnRleHQoSnNvbkxleENvbnRleHQgKmxleCk7CisKIC8qIGxleCBvbmUg dG9rZW4gKi8KIGV4dGVybiBKc29uUGFyc2VFcnJvclR5cGUganNvbl9sZXgoSnNvbkxleENvbnRl eHQgKmxleCk7CiAKLS0gCjIuMjUuMQoK --_011_4db7d3ea061f47a15fc6d865f53dd327ea2975fbcamelvmwarecom_ Content-Type: text/x-patch; name="v4-0006-libpq-add-OAUTHBEARER-SASL-mechanism.patch" Content-Description: v4-0006-libpq-add-OAUTHBEARER-SASL-mechanism.patch Content-Disposition: attachment; filename="v4-0006-libpq-add-OAUTHBEARER-SASL-mechanism.patch"; size=36487; creation-date="Sat, 26 Mar 2022 00:00:22 GMT"; modification-date="Sat, 26 Mar 2022 00:00:22 GMT" Content-ID: Content-Transfer-Encoding: base64 RnJvbSBmNDc1MmI2ZGFlYTliNTE5ZmYzNDgyMDk0YTFmNDQ1YTQ3MzFjYzE1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8cGNoYW1waW9uQHZtd2FyZS5jb20+ CkRhdGU6IFR1ZSwgMTMgQXByIDIwMjEgMTA6Mjc6MjcgLTA3MDAKU3ViamVjdDogW1BBVENIIHY0 IDA2LzEwXSBsaWJwcTogYWRkIE9BVVRIQkVBUkVSIFNBU0wgbWVjaGFuaXNtCgpETyBOT1QgVVNF IFRISVMgUFJPT0YgT0YgQ09OQ0VQVCBJTiBQUk9EVUNUSU9OLgoKSW1wbGVtZW50IE9BVVRIQkVB UkVSIChSRkMgNzYyOCkgYW5kIE9BdXRoIDIuMCBEZXZpY2UgQXV0aG9yaXphdGlvbgpHcmFudHMg KFJGQyA4NjI4KSBvbiB0aGUgY2xpZW50IHNpZGUuIFdoZW4gc3BlYWtpbmcgdG8gYSBPQXV0aC1l bmFibGVkCnNlcnZlciwgaXQgbG9va3MgYSBiaXQgbGlrZSB0aGlzOgoKICAgICQgcHNxbCAnaG9z dD1leGFtcGxlLm9yZyBvYXV0aF9jbGllbnRfaWQ9ZjAyYzYzNjEtMDYzNS0uLi4nCiAgICBWaXNp dCBodHRwczovL29hdXRoLmV4YW1wbGUub3JnL2xvZ2luIGFuZCBlbnRlciB0aGUgY29kZTogRlBR Mi1NNEJHCgpUaGUgT0F1dGggaXNzdWVyIG11c3Qgc3VwcG9ydCBkZXZpY2UgYXV0aG9yaXphdGlv bi4gTm8gb3RoZXIgT0F1dGggZmxvd3MKYXJlIGN1cnJlbnRseSBpbXBsZW1lbnRlZC4KClRoZSBj bGllbnQgaW1wbGVtZW50YXRpb24gcmVxdWlyZXMgbGliaWRkYXdjIGFuZCBpdHMgZGV2ZWxvcG1l bnQKaGVhZGVycy4gQ29uZmlndXJlIC0td2l0aC1vYXV0aCAoYW5kIC0td2l0aC1pbmNsdWRlcy8t LXdpdGgtbGlicmFyaWVzIHRvCnBvaW50IGF0IHRoZSBpZGRhd2MgaW5zdGFsbGF0aW9uLCBpZiBp dCdzIGluIGEgY3VzdG9tIGxvY2F0aW9uKS4KClNldmVyYWwgVE9ET3M6Ci0gZG9uJ3QgcmV0cnkg Zm9yZXZlciBpZiB0aGUgc2VydmVyIHdvbid0IGFjY2VwdCBvdXIgdG9rZW4KLSBwZXJmb3JtIHNl dmVyYWwgc2FuaXR5IGNoZWNrcyBvbiB0aGUgT0F1dGggaXNzdWVyJ3MgcmVzcG9uc2VzCi0gaGFu ZGxlIGNhc2VzIHdoZXJlIHRoZSBjbGllbnQgaGFzIGJlZW4gc2V0IHVwIHdpdGggYW4gaXNzdWVy IGFuZAogIHNjb3BlLCBidXQgdGhlIFBvc3RncmVzIHNlcnZlciB3YW50cyB0byB1c2Ugc29tZXRo aW5nIGRpZmZlcmVudAotIGltcHJvdmUgZXJyb3IgZGVidWdnYWJpbGl0eSBkdXJpbmcgdGhlIE9B dXRoIGhhbmRzaGFrZQotIC4uLmFuZCBtb3JlLgotLS0KIGNvbmZpZ3VyZSAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8IDEwMCArKysrCiBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgMTkgKwogc3JjL01ha2VmaWxlLmdsb2JhbC5pbiAgICAgICAgICAgICAgIHwgICAx ICsKIHNyYy9pbmNsdWRlL2NvbW1vbi9vYXV0aC1jb21tb24uaCAgICB8ICAxOSArCiBzcmMvaW5j bHVkZS9wZ19jb25maWcuaC5pbiAgICAgICAgICAgfCAgIDYgKwogc3JjL2ludGVyZmFjZXMvbGli cHEvTWFrZWZpbGUgICAgICAgIHwgICA3ICstCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRo LW9hdXRoLmMgfCA3NDQgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvaW50ZXJmYWNl cy9saWJwcS9mZS1hdXRoLXNhc2wuaCAgfCAgIDUgKy0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2Zl LWF1dGgtc2NyYW0uYyB8ICAgNiArLQogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC5jICAg ICAgIHwgIDQyICstCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLmggICAgICAgfCAgIDMg Kwogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY29ubmVjdC5jICAgIHwgIDM4ICsrCiBzcmMvaW50 ZXJmYWNlcy9saWJwcS9saWJwcS1pbnQuaCAgICAgfCAgIDggKwogMTMgZmlsZXMgY2hhbmdlZCwg OTc5IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy9pbmNsdWRlL2NvbW1vbi9vYXV0aC1jb21tb24uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9p bnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguYwoKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBi L2NvbmZpZ3VyZQppbmRleCBlMDY2Y2JlMmM4Li40MmEzMzA0NjgxIDEwMDc1NQotLS0gYS9jb25m aWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC03MTgsNiArNzE4LDcgQEAgd2l0aF91dWlkCiB3aXRo X3JlYWRsaW5lCiB3aXRoX3N5c3RlbWQKIHdpdGhfc2VsaW51eAord2l0aF9vYXV0aAogd2l0aF9s ZGFwCiB3aXRoX2tyYl9zcnZuYW0KIGtyYl9zcnZ0YWIKQEAgLTg2MSw2ICs4NjIsNyBAQCB3aXRo X2tyYl9zcnZuYW0KIHdpdGhfcGFtCiB3aXRoX2JzZF9hdXRoCiB3aXRoX2xkYXAKK3dpdGhfb2F1 dGgKIHdpdGhfYm9uam91cgogd2l0aF9zZWxpbnV4CiB3aXRoX3N5c3RlbWQKQEAgLTE1NzAsNiAr MTU3Miw3IEBAIE9wdGlvbmFsIFBhY2thZ2VzOgogICAtLXdpdGgtcGFtICAgICAgICAgICAgICBi dWlsZCB3aXRoIFBBTSBzdXBwb3J0CiAgIC0td2l0aC1ic2QtYXV0aCAgICAgICAgIGJ1aWxkIHdp dGggQlNEIEF1dGhlbnRpY2F0aW9uIHN1cHBvcnQKICAgLS13aXRoLWxkYXAgICAgICAgICAgICAg YnVpbGQgd2l0aCBMREFQIHN1cHBvcnQKKyAgLS13aXRoLW9hdXRoICAgICAgICAgICAgYnVpbGQg d2l0aCBPQXV0aCAyLjAgc3VwcG9ydAogICAtLXdpdGgtYm9uam91ciAgICAgICAgICBidWlsZCB3 aXRoIEJvbmpvdXIgc3VwcG9ydAogICAtLXdpdGgtc2VsaW51eCAgICAgICAgICBidWlsZCB3aXRo IFNFTGludXggc3VwcG9ydAogICAtLXdpdGgtc3lzdGVtZCAgICAgICAgICBidWlsZCB3aXRoIHN5 c3RlbWQgc3VwcG9ydApAQCAtODM3Nyw2ICs4MzgwLDQyIEBAICRhc19lY2hvICIkd2l0aF9sZGFw IiA+JjY7IH0KIAogCiAKKyMKKyMgT0F1dGggMi4wCisjCit7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgd2l0aCBPQXV0aCBz dXBwb3J0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgd2l0aCBP QXV0aCBzdXBwb3J0Li4uICIgPiY2OyB9CisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW9h dXRoIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9vYXV0aCtzZXR9IiA9IHNldDsgdGhlbiA6 CisgIHdpdGh2YWw9JHdpdGhfb2F1dGg7CisgIGNhc2UgJHdpdGh2YWwgaW4KKyAgICB5ZXMpCisK KyRhc19lY2hvICIjZGVmaW5lIFVTRV9PQVVUSCAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgOzsK KyAgICBubykKKyAgICAgIDoKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ ICJubyBhcmd1bWVudCBleHBlY3RlZCBmb3IgLS13aXRoLW9hdXRoIG9wdGlvbiIgIiRMSU5FTk8i IDUKKyAgICAgIDs7CisgIGVzYWMKKworZWxzZQorICB3aXRoX29hdXRoPW5vCisKK2ZpCisKKwor eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR3aXRoX29h dXRoIiA+JjUKKyRhc19lY2hvICIkd2l0aF9vYXV0aCIgPiY2OyB9CisKKworCiAjCiAjIEJvbmpv dXIKICMKQEAgLTEzNTAzLDYgKzEzNTQyLDU2IEBAIGZpCiAKIAogCitpZiB0ZXN0ICIkd2l0aF9v YXV0aCIgPSB5ZXMgOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogY2hlY2tpbmcgZm9yIGlfaW5pdF9zZXNzaW9uIGluIC1saWRkYXdjIiA+JjUKKyRhc19l Y2hvX24gImNoZWNraW5nIGZvciBpX2luaXRfc2Vzc2lvbiBpbiAtbGlkZGF3Yy4uLiAiID4mNjsg fQoraWYgJHthY19jdl9saWJfaWRkYXdjX2lfaW5pdF9zZXNzaW9uKzp9IGZhbHNlOyB0aGVuIDoK KyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVf TElCUz0kTElCUworTElCUz0iLWxpZGRhd2MgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9B Q0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVy cmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVz ZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwor ICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFw cGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGlf aW5pdF9zZXNzaW9uICgpOworaW50CittYWluICgpCit7CityZXR1cm4gaV9pbml0X3Nlc3Npb24g KCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRM SU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2lkZGF3Y19pX2luaXRfc2Vzc2lvbj15ZXMKK2Vs c2UKKyAgYWNfY3ZfbGliX2lkZGF3Y19pX2luaXRfc2Vzc2lvbj1ubworZmkKK3JtIC1mIGNvcmUg Y29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4 dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJf aWRkYXdjX2lfaW5pdF9zZXNzaW9uIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2lkZGF3Y19p X2luaXRfc2Vzc2lvbiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9pZGRhd2NfaV9pbml0 X3Nlc3Npb24iID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNk ZWZpbmUgSEFWRV9MSUJJRERBV0MgMQorX0FDRU9GCisKKyAgTElCUz0iLWxpZGRhd2MgJExJQlMi CisKK2Vsc2UKKyAgYXNfZm5fZXJyb3IgJD8gImxpYnJhcnkgJ2lkZGF3YycgaXMgcmVxdWlyZWQg Zm9yIE9BdXRoIHN1cHBvcnQiICIkTElORU5PIiA1CitmaQorCitmaQorCiAjIGZvciBjb250cmli L3NlcGdzcWwKIGlmIHRlc3QgIiR3aXRoX3NlbGludXgiID0geWVzOyB0aGVuCiAgIHsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNlY3VyaXR5X2Nv bXB1dGVfY3JlYXRlX25hbWUgaW4gLWxzZWxpbnV4IiA+JjUKQEAgLTE0NTE2LDYgKzE0NjA1LDE3 IEBAIGZpCiAKIGRvbmUKIAorZmkKKworaWYgdGVzdCAiJHdpdGhfb2F1dGgiICE9IG5vOyB0aGVu CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJpZGRhd2MuaCIgImFj X2N2X2hlYWRlcl9pZGRhd2NfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRh Y19jdl9oZWFkZXJfaWRkYXdjX2giID0geHllczsgdGhlbiA6CisKK2Vsc2UKKyAgYXNfZm5fZXJy b3IgJD8gImhlYWRlciBmaWxlIDxpZGRhd2MuaD4gaXMgcmVxdWlyZWQgZm9yIE9BdXRoIiAiJExJ TkVOTyIgNQorZmkKKworCiBmaQogCiBpZiB0ZXN0ICIkUE9SVE5BTUUiID0gIndpbjMyIiA7IHRo ZW4KZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCAwNzgzODFl NTY4Li40MDUwZjkxZGJkIDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJl LmFjCkBAIC04ODcsNiArODg3LDE3IEBAIEFDX01TR19SRVNVTFQoWyR3aXRoX2xkYXBdKQogQUNf U1VCU1Qod2l0aF9sZGFwKQogCiAKKyMKKyMgT0F1dGggMi4wCisjCitBQ19NU0dfQ0hFQ0tJTkco W3doZXRoZXIgdG8gYnVpbGQgd2l0aCBPQXV0aCBzdXBwb3J0XSkKK1BHQUNfQVJHX0JPT0wod2l0 aCwgb2F1dGgsIG5vLAorICAgICAgICAgICAgICBbYnVpbGQgd2l0aCBPQXV0aCAyLjAgc3VwcG9y dF0sCisgICAgICAgICAgICAgIFtBQ19ERUZJTkUoW1VTRV9PQVVUSF0sIDEsIFtEZWZpbmUgdG8g MSB0byBidWlsZCB3aXRoIE9BdXRoIDIuMCBzdXBwb3J0LiAoLS13aXRoLW9hdXRoKV0pXSkKK0FD X01TR19SRVNVTFQoWyR3aXRoX29hdXRoXSkKK0FDX1NVQlNUKHdpdGhfb2F1dGgpCisKKwogIwog IyBCb25qb3VyCiAjCkBAIC0xMzg4LDYgKzEzOTksMTAgQEAgZmkKIEFDX1NVQlNUKExEQVBfTElC U19GRSkKIEFDX1NVQlNUKExEQVBfTElCU19CRSkKIAoraWYgdGVzdCAiJHdpdGhfb2F1dGgiID0g eWVzIDsgdGhlbgorICBBQ19DSEVDS19MSUIoaWRkYXdjLCBpX2luaXRfc2Vzc2lvbiwgW10sIFtB Q19NU0dfRVJST1IoW2xpYnJhcnkgJ2lkZGF3YycgaXMgcmVxdWlyZWQgZm9yIE9BdXRoIHN1cHBv cnRdKV0pCitmaQorCiAjIGZvciBjb250cmliL3NlcGdzcWwKIGlmIHRlc3QgIiR3aXRoX3NlbGlu dXgiID0geWVzOyB0aGVuCiAgIEFDX0NIRUNLX0xJQihzZWxpbnV4LCBzZWN1cml0eV9jb21wdXRl X2NyZWF0ZV9uYW1lLCBbXSwKQEAgLTE2MDYsNiArMTYyMSwxMCBAQCBlbGlmIHRlc3QgIiR3aXRo X3V1aWQiID0gb3NzcCA7IHRoZW4KICAgICAgIFtBQ19NU0dfRVJST1IoW2hlYWRlciBmaWxlIDxv c3NwL3V1aWQuaD4gb3IgPHV1aWQuaD4gaXMgcmVxdWlyZWQgZm9yIE9TU1AgVVVJRF0pXSldKQog ZmkKIAoraWYgdGVzdCAiJHdpdGhfb2F1dGgiICE9IG5vOyB0aGVuCisgIEFDX0NIRUNLX0hFQURF UihpZGRhd2MuaCwgW10sIFtBQ19NU0dfRVJST1IoW2hlYWRlciBmaWxlIDxpZGRhd2MuaD4gaXMg cmVxdWlyZWQgZm9yIE9BdXRoXSldKQorZmkKKwogaWYgdGVzdCAiJFBPUlROQU1FIiA9ICJ3aW4z MiIgOyB0aGVuCiAgICBBQ19DSEVDS19IRUFERVJTKGNydGRlZnMuaCkKIGZpCmRpZmYgLS1naXQg YS9zcmMvTWFrZWZpbGUuZ2xvYmFsLmluIGIvc3JjL01ha2VmaWxlLmdsb2JhbC5pbgppbmRleCBi YmRjMWM0YmRhLi5jOWM2MWE5Yzk5IDEwMDY0NAotLS0gYS9zcmMvTWFrZWZpbGUuZ2xvYmFsLmlu CisrKyBiL3NyYy9NYWtlZmlsZS5nbG9iYWwuaW4KQEAgLTE5Myw2ICsxOTMsNyBAQCB3aXRoX2xk YXAJPSBAd2l0aF9sZGFwQAogd2l0aF9saWJ4bWwJPSBAd2l0aF9saWJ4bWxACiB3aXRoX2xpYnhz bHQJPSBAd2l0aF9saWJ4c2x0QAogd2l0aF9sbHZtCT0gQHdpdGhfbGx2bUAKK3dpdGhfb2F1dGgJ PSBAd2l0aF9vYXV0aEAKIHdpdGhfc3lzdGVtX3R6ZGF0YSA9IEB3aXRoX3N5c3RlbV90emRhdGFA CiB3aXRoX3V1aWQJPSBAd2l0aF91dWlkQAogd2l0aF96bGliCT0gQHdpdGhfemxpYkAKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1vbi9vYXV0aC1jb21tb24uaCBiL3NyYy9pbmNsdWRlL2Nv bW1vbi9vYXV0aC1jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li4zZmE5NWFjN2U4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvY29tbW9uL29hdXRo LWNvbW1vbi5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIG9h dXRoLWNvbW1vbi5oCisgKgkJRGVjbGFyYXRpb25zIGZvciBoZWxwZXIgZnVuY3Rpb25zIHVzZWQg Zm9yIE9BdXRoL09JREMgYXV0aGVudGljYXRpb24KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDE5OTYtMjAyMSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBv cnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBD YWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvY29tbW9uL29hdXRoLWNvbW1vbi5oCisgKgor ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgT0FVVEhfQ09NTU9OX0gKKyNkZWZpbmUg T0FVVEhfQ09NTU9OX0gKKworLyogTmFtZSBvZiBTQVNMIG1lY2hhbmlzbSBwZXIgSUFOQSAqLwor I2RlZmluZSBPQVVUSEJFQVJFUl9OQU1FICJPQVVUSEJFQVJFUiIKKworI2VuZGlmIC8qIE9BVVRI X0NPTU1PTl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wZ19jb25maWcuaC5pbiBiL3Ny Yy9pbmNsdWRlL3BnX2NvbmZpZy5oLmluCmluZGV4IDYzNWZiYjIxODEuLjFiMzMzMjYwMWUgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3BnX2NvbmZpZy5oLmluCisrKyBiL3NyYy9pbmNsdWRlL3Bn X2NvbmZpZy5oLmluCkBAIC0zMTksNiArMzE5LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBo YXZlIHRoZSBgY3J5cHRvJyBsaWJyYXJ5ICgtbGNyeXB0bykuICovCiAjdW5kZWYgSEFWRV9MSUJD UllQVE8KIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpZGRhd2MnIGxpYnJhcnkg KC1saWRkYXdjKS4gKi8KKyN1bmRlZiBIQVZFX0xJQklEREFXQworCiAvKiBEZWZpbmUgdG8gMSBp ZiB5b3UgaGF2ZSB0aGUgYGxkYXAnIGxpYnJhcnkgKC1sbGRhcCkuICovCiAjdW5kZWYgSEFWRV9M SUJMREFQCiAKQEAgLTkyMiw2ICs5MjUsOSBAQAogLyogRGVmaW5lIHRvIHNlbGVjdCBuYW1lZCBQ T1NJWCBzZW1hcGhvcmVzLiAqLwogI3VuZGVmIFVTRV9OQU1FRF9QT1NJWF9TRU1BUEhPUkVTCiAK Ky8qIERlZmluZSB0byAxIHRvIGJ1aWxkIHdpdGggT0F1dGggMi4wIHN1cHBvcnQuICgtLXdpdGgt b2F1dGgpICovCisjdW5kZWYgVVNFX09BVVRICisKIC8qIERlZmluZSB0byAxIHRvIGJ1aWxkIHdp dGggT3BlblNTTCBzdXBwb3J0LiAoLS13aXRoLXNzbD1vcGVuc3NsKSAqLwogI3VuZGVmIFVTRV9P UEVOU1NMCiAKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL01ha2VmaWxlIGIvc3Jj L2ludGVyZmFjZXMvbGlicHEvTWFrZWZpbGUKaW5kZXggM2M1MzM5M2ZhNC4uNzI3MzA1YzU3OCAx MDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvTWFrZWZpbGUKKysrIGIvc3JjL2ludGVy ZmFjZXMvbGlicHEvTWFrZWZpbGUKQEAgLTYyLDYgKzYyLDExIEBAIE9CSlMgKz0gXAogCWZlLXNl Y3VyZS1nc3NhcGkubwogZW5kaWYKIAoraWZlcSAoJCh3aXRoX29hdXRoKSx5ZXMpCitPQkpTICs9 IFwKKwlmZS1hdXRoLW9hdXRoLm8KK2VuZGlmCisKIGlmZXEgKCQoUE9SVE5BTUUpLCBjeWd3aW4p CiBvdmVycmlkZSBzaGxpYiA9IGN5ZyQoTkFNRSkkKERMU1VGRklYKQogZW5kaWYKQEAgLTgzLDcg Kzg4LDcgQEAgZW5kaWYKICMgdGhhdCBhcmUgYnVpbHQgY29ycmVjdGx5IGZvciB1c2UgaW4gYSBz aGxpYi4KIFNITElCX0xJTktfSU5URVJOQUwgPSAtbHBnY29tbW9uX3NobGliIC1scGdwb3J0X3No bGliCiBpZm5lcSAoJChQT1JUTkFNRSksIHdpbjMyKQotU0hMSUJfTElOSyArPSAkKGZpbHRlciAt bGNyeXB0IC1sZGVzIC1sY29tX2VyciAtbGNyeXB0byAtbGs1Y3J5cHRvIC1sa3JiNSAtbGdzc2Fw aV9rcmI1IC1sZ3NzIC1sZ3NzYXBpIC1sc3NsIC1sc29ja2V0IC1sbnNsIC1scmVzb2x2IC1saW50 bCAtbG0sICQoTElCUykpICQoTERBUF9MSUJTX0ZFKSAkKFBUSFJFQURfTElCUykKK1NITElCX0xJ TksgKz0gJChmaWx0ZXIgLWxjcnlwdCAtbGRlcyAtbGNvbV9lcnIgLWxjcnlwdG8gLWxrNWNyeXB0 byAtbGtyYjUgLWxnc3NhcGlfa3JiNSAtbGdzcyAtbGdzc2FwaSAtbHNzbCAtbGlkZGF3YyAtbHNv Y2tldCAtbG5zbCAtbHJlc29sdiAtbGludGwgLWxtLCAkKExJQlMpKSAkKExEQVBfTElCU19GRSkg JChQVEhSRUFEX0xJQlMpCiBlbHNlCiBTSExJQl9MSU5LICs9ICQoZmlsdGVyIC1sY3J5cHQgLWxk ZXMgLWxjb21fZXJyIC1sY3J5cHRvIC1sazVjcnlwdG8gLWxrcmI1IC1sZ3NzYXBpMzIgLWxzc2wg LWxzb2NrZXQgLWxuc2wgLWxyZXNvbHYgLWxpbnRsIC1sbSAkKFBUSFJFQURfTElCUyksICQoTElC UykpICQoTERBUF9MSUJTX0ZFKQogZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xp YnBxL2ZlLWF1dGgtb2F1dGguYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGgu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4zODNjOWQ0YmRiCi0tLSAv ZGV2L251bGwKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1vYXV0aC5jCkBAIC0w LDAgKzEsNzQ0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBmZS1hdXRoLW9hdXRoLmMK KyAqCSAgIFRoZSBmcm9udC1lbmQgKGNsaWVudCkgaW1wbGVtZW50YXRpb24gb2YgT0F1dGgvT0lE QyBhdXRoZW50aWNhdGlvbi4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAy MSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHly aWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisg KgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1v YXV0aC5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgPGlkZGF3Yy5o PgorCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKworI2luY2x1ZGUgImNvbW1vbi9iYXNlNjQu aCIKKyNpbmNsdWRlICJjb21tb24vaG1hYy5oIgorI2luY2x1ZGUgImNvbW1vbi9qc29uYXBpLmgi CisjaW5jbHVkZSAiY29tbW9uL29hdXRoLWNvbW1vbi5oIgorI2luY2x1ZGUgImZlLWF1dGguaCIK KyNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgorCisvKiBUaGUgZXhwb3J0ZWQgT0F1dGggY2FsbGJh Y2sgbWVjaGFuaXNtLiAqLworc3RhdGljIHZvaWQgKm9hdXRoX2luaXQoUEdjb25uICpjb25uLCBj b25zdCBjaGFyICpwYXNzd29yZCwKKwkJCQkJCWNvbnN0IGNoYXIgKnNhc2xfbWVjaGFuaXNtKTsK K3N0YXRpYyB2b2lkIG9hdXRoX2V4Y2hhbmdlKHZvaWQgKm9wYXEsIGJvb2wgZmluYWwsCisJCQkJ CQkgICBjaGFyICppbnB1dCwgaW50IGlucHV0bGVuLAorCQkJCQkJICAgY2hhciAqKm91dHB1dCwg aW50ICpvdXRwdXRsZW4sCisJCQkJCQkgICBib29sICpkb25lLCBib29sICpzdWNjZXNzKTsKK3N0 YXRpYyBib29sIG9hdXRoX2NoYW5uZWxfYm91bmQodm9pZCAqb3BhcSk7CitzdGF0aWMgdm9pZCBv YXV0aF9mcmVlKHZvaWQgKm9wYXEpOworCitjb25zdCBwZ19mZV9zYXNsX21lY2ggcGdfb2F1dGhf bWVjaCA9IHsKKwlvYXV0aF9pbml0LAorCW9hdXRoX2V4Y2hhbmdlLAorCW9hdXRoX2NoYW5uZWxf Ym91bmQsCisJb2F1dGhfZnJlZSwKK307CisKK3R5cGVkZWYgZW51bQoreworCUZFX09BVVRIX0lO SVQsCisJRkVfT0FVVEhfQkVBUkVSX1NFTlQsCisJRkVfT0FVVEhfU0VSVkVSX0VSUk9SLAorfSBm ZV9vYXV0aF9zdGF0ZV9lbnVtOworCit0eXBlZGVmIHN0cnVjdAoreworCWZlX29hdXRoX3N0YXRl X2VudW0gc3RhdGU7CisKKwlQR2Nvbm4JICAgKmNvbm47Cit9IGZlX29hdXRoX3N0YXRlOworCitz dGF0aWMgdm9pZCAqCitvYXV0aF9pbml0KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcGFzc3dv cmQsCisJCSAgIGNvbnN0IGNoYXIgKnNhc2xfbWVjaGFuaXNtKQoreworCWZlX29hdXRoX3N0YXRl ICpzdGF0ZTsKKworCS8qCisJICogV2Ugb25seSBzdXBwb3J0IG9uZSBTQVNMIG1lY2hhbmlzbSBo ZXJlOyBhbnl0aGluZyBlbHNlIGlzIHByb2dyYW1tZXIKKwkgKiBlcnJvci4KKwkgKi8KKwlBc3Nl cnQoc2FzbF9tZWNoYW5pc20gIT0gTlVMTCk7CisJQXNzZXJ0KCFzdHJjbXAoc2FzbF9tZWNoYW5p c20sIE9BVVRIQkVBUkVSX05BTUUpKTsKKworCXN0YXRlID0gbWFsbG9jKHNpemVvZigqc3RhdGUp KTsKKwlpZiAoIXN0YXRlKQorCQlyZXR1cm4gTlVMTDsKKworCXN0YXRlLT5zdGF0ZSA9IEZFX09B VVRIX0lOSVQ7CisJc3RhdGUtPmNvbm4gPSBjb25uOworCisJcmV0dXJuIHN0YXRlOworfQorCitz dGF0aWMgY29uc3QgY2hhciAqCitpZGRhd2NfZXJyb3Jfc3RyaW5nKGludCBlcnJjb2RlKQorewor CXN3aXRjaCAoZXJyY29kZSkKKwl7CisJCWNhc2UgSV9PSzoKKwkJCXJldHVybiAiSV9PSyI7CisK KwkJY2FzZSBJX0VSUk9SOgorCQkJcmV0dXJuICJJX0VSUk9SIjsKKworCQljYXNlIElfRVJST1Jf UEFSQU06CisJCQlyZXR1cm4gIklfRVJST1JfUEFSQU0iOworCisJCWNhc2UgSV9FUlJPUl9NRU1P Ulk6CisJCQlyZXR1cm4gIklfRVJST1JfTUVNT1JZIjsKKworCQljYXNlIElfRVJST1JfVU5BVVRI T1JJWkVEOgorCQkJcmV0dXJuICJJX0VSUk9SX1VOQVVUSE9SSVpFRCI7CisKKwkJY2FzZSBJX0VS Uk9SX1NFUlZFUjoKKwkJCXJldHVybiAiSV9FUlJPUl9TRVJWRVIiOworCX0KKworCXJldHVybiAi PHVua25vd24+IjsKK30KKworc3RhdGljIHZvaWQKK2lkZGF3Y19lcnJvcihQR2Nvbm4gKmNvbm4s IGludCBlcnJjb2RlLCBjb25zdCBjaGFyICptc2cpCit7CisJYXBwZW5kUFFFeHBCdWZmZXJTdHIo JmNvbm4tPmVycm9yTWVzc2FnZSwgbGlicHFfZ2V0dGV4dChtc2cpKTsKKwlhcHBlbmRQUUV4cEJ1 ZmZlcigmY29ubi0+ZXJyb3JNZXNzYWdlLAorCQkJCQkgIGxpYnBxX2dldHRleHQoIiAoaWRkYXdj IGVycm9yICVzKVxuIiksCisJCQkJCSAgaWRkYXdjX2Vycm9yX3N0cmluZyhlcnJjb2RlKSk7Cit9 CisKK3N0YXRpYyB2b2lkCitpZGRhd2NfcmVxdWVzdF9lcnJvcihQR2Nvbm4gKmNvbm4sIHN0cnVj dCBfaV9zZXNzaW9uICppLCBpbnQgZXJyLCBjb25zdCBjaGFyICptc2cpCit7CisJY29uc3QgY2hh ciAqZXJyb3JfY29kZTsKKwljb25zdCBjaGFyICpkZXNjOworCisJYXBwZW5kUFFFeHBCdWZmZXIo JmNvbm4tPmVycm9yTWVzc2FnZSwgIiVzOiAiLCBsaWJwcV9nZXR0ZXh0KG1zZykpOworCisJZXJy b3JfY29kZSA9IGlfZ2V0X3N0cl9wYXJhbWV0ZXIoaSwgSV9PUFRfRVJST1IpOworCWlmICghZXJy b3JfY29kZSkKKwl7CisJCS8qCisJCSAqIFRoZSBzZXJ2ZXIgZGlkbid0IGdpdmUgdXMgYW55IHVz ZWZ1bCBpbmZvcm1hdGlvbiwgc28ganVzdCBwcmludCB0aGUKKwkJICogZXJyb3IgY29kZS4KKwkJ ICovCisJCWFwcGVuZFBRRXhwQnVmZmVyKCZjb25uLT5lcnJvck1lc3NhZ2UsCisJCQkJCQkgIGxp YnBxX2dldHRleHQoIihpZGRhd2MgZXJyb3IgJXMpXG4iKSwKKwkJCQkJCSAgaWRkYXdjX2Vycm9y X3N0cmluZyhlcnIpKTsKKwkJcmV0dXJuOworCX0KKworCS8qIElmIHRoZSBzZXJ2ZXIgZ2F2ZSBh IHN0cmluZyBkZXNjcmlwdGlvbiwgcHJpbnQgdGhhdCB0b28uICovCisJZGVzYyA9IGlfZ2V0X3N0 cl9wYXJhbWV0ZXIoaSwgSV9PUFRfRVJST1JfREVTQ1JJUFRJT04pOworCWlmIChkZXNjKQorCQlh cHBlbmRQUUV4cEJ1ZmZlcigmY29ubi0+ZXJyb3JNZXNzYWdlLCAiJXMgIiwgZGVzYyk7CisKKwlh cHBlbmRQUUV4cEJ1ZmZlcigmY29ubi0+ZXJyb3JNZXNzYWdlLCAiKCVzKVxuIiwgZXJyb3JfY29k ZSk7Cit9CisKK3N0YXRpYyBjaGFyICoKK2dldF9hdXRoX3Rva2VuKFBHY29ubiAqY29ubikKK3sK KwlQUUV4cEJ1ZmZlcgl0b2tlbl9idWYgPSBOVUxMOworCXN0cnVjdCBfaV9zZXNzaW9uIHNlc3Np b247CisJaW50CQkJZXJyOworCWludAkJCWF1dGhfbWV0aG9kOworCWJvb2wJCXVzZXJfcHJvbXB0 ZWQgPSBmYWxzZTsKKwljb25zdCBjaGFyICp2ZXJpZmljYXRpb25fdXJpOworCWNvbnN0IGNoYXIg KnVzZXJfY29kZTsKKwljb25zdCBjaGFyICphY2Nlc3NfdG9rZW47CisJY29uc3QgY2hhciAqdG9r ZW5fdHlwZTsKKwljaGFyCSAgICp0b2tlbiA9IE5VTEw7CisKKwlpZiAoIWNvbm4tPm9hdXRoX2Rp c2NvdmVyeV91cmkpCisJCXJldHVybiBzdHJkdXAoIiIpOyAvKiBhc2sgdGhlIHNlcnZlciBmb3Ig b25lICovCisKKwlpZiAoIWNvbm4tPm9hdXRoX2NsaWVudF9pZCkKKwl7CisJCS8qIFdlIGNhbid0 IHRhbGsgdG8gYSBzZXJ2ZXIgd2l0aG91dCBhIGNsaWVudCBpZGVudGlmaWVyLiAqLworCQlhcHBl bmRQUUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNzYWdlLAorCQkJCQkJCSBsaWJwcV9nZXR0 ZXh0KCJubyBvYXV0aF9jbGllbnRfaWQgaXMgc2V0IGZvciB0aGUgY29ubmVjdGlvbiIpKTsKKwkJ cmV0dXJuIE5VTEw7CisJfQorCisJaV9pbml0X3Nlc3Npb24oJnNlc3Npb24pOworCisJdG9rZW5f YnVmID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwlpZiAoIXRva2VuX2J1ZikKKwkJZ290byBjbGVh bnVwOworCisJZXJyID0gaV9zZXRfc3RyX3BhcmFtZXRlcigmc2Vzc2lvbiwgSV9PUFRfT1BFTklE X0NPTkZJR19FTkRQT0lOVCwgY29ubi0+b2F1dGhfZGlzY292ZXJ5X3VyaSk7CisJaWYgKGVycikK Kwl7CisJCWlkZGF3Y19lcnJvcihjb25uLCBlcnIsICJmYWlsZWQgdG8gc2V0IE9wZW5JRCBjb25m aWcgZW5kcG9pbnQiKTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCWVyciA9IGlfZ2V0X29wZW5p ZF9jb25maWcoJnNlc3Npb24pOworCWlmIChlcnIpCisJeworCQlpZGRhd2NfZXJyb3IoY29ubiwg ZXJyLCAiZmFpbGVkIHRvIGZldGNoIE9wZW5JRCBkaXNjb3ZlcnkgZG9jdW1lbnQiKTsKKwkJZ290 byBjbGVhbnVwOworCX0KKworCWlmICghaV9nZXRfc3RyX3BhcmFtZXRlcigmc2Vzc2lvbiwgSV9P UFRfVE9LRU5fRU5EUE9JTlQpKQorCXsKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVy cm9yTWVzc2FnZSwKKwkJCQkJCQkgbGlicHFfZ2V0dGV4dCgiaXNzdWVyIGhhcyBubyB0b2tlbiBl bmRwb2ludCIpKTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCWlmICghaV9nZXRfc3RyX3BhcmFt ZXRlcigmc2Vzc2lvbiwgSV9PUFRfREVWSUNFX0FVVEhPUklaQVRJT05fRU5EUE9JTlQpKQorCXsK KwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVzc2FnZSwKKwkJCQkJCQkgbGli cHFfZ2V0dGV4dCgiaXNzdWVyIGRvZXMgbm90IHN1cHBvcnQgZGV2aWNlIGF1dGhvcml6YXRpb24i KSk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwllcnIgPSBpX3NldF9yZXNwb25zZV90eXBlKCZz ZXNzaW9uLCBJX1JFU1BPTlNFX1RZUEVfREVWSUNFX0NPREUpOworCWlmIChlcnIpCisJeworCQlp ZGRhd2NfZXJyb3IoY29ubiwgZXJyLCAiZmFpbGVkIHRvIHNldCBkZXZpY2UgY29kZSByZXNwb25z ZSB0eXBlIik7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlhdXRoX21ldGhvZCA9IElfVE9LRU5f QVVUSF9NRVRIT0RfTk9ORTsKKwlpZiAoY29ubi0+b2F1dGhfY2xpZW50X3NlY3JldCAmJiAqY29u bi0+b2F1dGhfY2xpZW50X3NlY3JldCkKKwkJYXV0aF9tZXRob2QgPSBJX1RPS0VOX0FVVEhfTUVU SE9EX1NFQ1JFVF9CQVNJQzsKKworCWVyciA9IGlfc2V0X3BhcmFtZXRlcl9saXN0KCZzZXNzaW9u LAorCQlJX09QVF9DTElFTlRfSUQsIGNvbm4tPm9hdXRoX2NsaWVudF9pZCwKKwkJSV9PUFRfQ0xJ RU5UX1NFQ1JFVCwgY29ubi0+b2F1dGhfY2xpZW50X3NlY3JldCwKKwkJSV9PUFRfVE9LRU5fTUVU SE9ELCBhdXRoX21ldGhvZCwKKwkJSV9PUFRfU0NPUEUsIGNvbm4tPm9hdXRoX3Njb3BlLAorCQlJ X09QVF9OT05FCisJKTsKKwlpZiAoZXJyKQorCXsKKwkJaWRkYXdjX2Vycm9yKGNvbm4sIGVyciwg ImZhaWxlZCB0byBzZXQgY2xpZW50IGlkZW50aWZpZXIiKTsKKwkJZ290byBjbGVhbnVwOworCX0K KworCWVyciA9IGlfcnVuX2RldmljZV9hdXRoX3JlcXVlc3QoJnNlc3Npb24pOworCWlmIChlcnIp CisJeworCQlpZGRhd2NfcmVxdWVzdF9lcnJvcihjb25uLCAmc2Vzc2lvbiwgZXJyLAorCQkJCQkJ CSJmYWlsZWQgdG8gb2J0YWluIGRldmljZSBhdXRob3JpemF0aW9uIik7CisJCWdvdG8gY2xlYW51 cDsKKwl9CisKKwl2ZXJpZmljYXRpb25fdXJpID0gaV9nZXRfc3RyX3BhcmFtZXRlcigmc2Vzc2lv biwgSV9PUFRfREVWSUNFX0FVVEhfVkVSSUZJQ0FUSU9OX1VSSSk7CisJaWYgKCF2ZXJpZmljYXRp b25fdXJpKQorCXsKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVzc2FnZSwK KwkJCQkJCQkgbGlicHFfZ2V0dGV4dCgiaXNzdWVyIGRpZCBub3QgcHJvdmlkZSBhIHZlcmlmaWNh dGlvbiBVUkkiKSk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwl1c2VyX2NvZGUgPSBpX2dldF9z dHJfcGFyYW1ldGVyKCZzZXNzaW9uLCBJX09QVF9ERVZJQ0VfQVVUSF9VU0VSX0NPREUpOworCWlm ICghdXNlcl9jb2RlKQorCXsKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVz c2FnZSwKKwkJCQkJCQkgbGlicHFfZ2V0dGV4dCgiaXNzdWVyIGRpZCBub3QgcHJvdmlkZSBhIHVz ZXIgY29kZSIpKTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCS8qCisJICogUG9sbCB0aGUgdG9r ZW4gZW5kcG9pbnQgdW50aWwgZWl0aGVyIHRoZSB1c2VyIGxvZ3MgaW4gYW5kIGF1dGhvcml6ZXMg dGhlCisJICogdXNlIG9mIGEgdG9rZW4sIG9yIGEgaGFyZCBmYWlsdXJlIG9jY3Vycy4gV2UgcGVy Zm9ybSBvbmUgcGluZyBfYmVmb3JlXworCSAqIHByb21wdGluZyB0aGUgdXNlciwgc28gdGhhdCB3 ZSBkb24ndCBtYWtlIHRoZW0gZG8gdGhlIHdvcmsgb2YgbG9nZ2luZyBpbgorCSAqIG9ubHkgdG8g ZmluZCB0aGF0IHRoZSB0b2tlbiBlbmRwb2ludCBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlLgor CSAqLworCWVyciA9IGlfcnVuX3Rva2VuX3JlcXVlc3QoJnNlc3Npb24pOworCXdoaWxlIChlcnIp CisJeworCQljb25zdCBjaGFyICplcnJvcl9jb2RlOworCQl1aW50CQlpbnRlcnZhbDsKKworCQll cnJvcl9jb2RlID0gaV9nZXRfc3RyX3BhcmFtZXRlcigmc2Vzc2lvbiwgSV9PUFRfRVJST1IpOwor CisJCS8qCisJCSAqIGF1dGhvcml6YXRpb25fcGVuZGluZyBhbmQgc2xvd19kb3duIGFyZSB0aGUg b25seSBhY2NlcHRhYmxlIGVycm9yczsKKwkJICogYW55dGhpbmcgZWxzZSBhbmQgd2UgYmFpbC4K KwkJICovCisJCWlmICghZXJyb3JfY29kZSB8fCAoc3RyY21wKGVycm9yX2NvZGUsICJhdXRob3Jp emF0aW9uX3BlbmRpbmciKQorCQkJCQkJCSYmIHN0cmNtcChlcnJvcl9jb2RlLCAic2xvd19kb3du IikpKQorCQl7CisJCQlpZGRhd2NfcmVxdWVzdF9lcnJvcihjb25uLCAmc2Vzc2lvbiwgZXJyLAor CQkJCQkJCQkiT0F1dGggdG9rZW4gcmV0cmlldmFsIGZhaWxlZCIpOworCQkJZ290byBjbGVhbnVw OworCQl9CisKKwkJaWYgKCF1c2VyX3Byb21wdGVkKQorCQl7CisJCQkvKgorCQkJICogTm93IHRo YXQgd2Uga25vdyB0aGUgdG9rZW4gZW5kcG9pbnQgaXNuJ3QgYnJva2VuLCBnaXZlIHRoZSB1c2Vy CisJCQkgKiB0aGUgbG9naW4gaW5zdHJ1Y3Rpb25zLgorCQkJICovCisJCQlwcUludGVybmFsTm90 aWNlKCZjb25uLT5ub3RpY2VIb29rcywKKwkJCQkJCQkgIlZpc2l0ICVzIGFuZCBlbnRlciB0aGUg Y29kZTogJXMiLAorCQkJCQkJCSB2ZXJpZmljYXRpb25fdXJpLCB1c2VyX2NvZGUpOworCisJCQl1 c2VyX3Byb21wdGVkID0gdHJ1ZTsKKwkJfQorCisJCS8qCisJCSAqIFdlIGFyZSByZXF1aXJlZCB0 byB3YWl0IGJldHdlZW4gcG9sbHM7IHRoZSBzZXJ2ZXIgdGVsbHMgdXMgaG93IGxvbmcuCisJCSAq IFRPRE86IGlmIGludGVydmFsJ3Mgbm90IHNldCwgd2UgbmVlZCB0byBkZWZhdWx0IHRvIGZpdmUg c2Vjb25kcworCQkgKiBUT0RPOiBzYW5pdHkgY2hlY2sgdGhlIGludGVydmFsCisJCSAqLworCQlp bnRlcnZhbCA9IGlfZ2V0X2ludF9wYXJhbWV0ZXIoJnNlc3Npb24sIElfT1BUX0RFVklDRV9BVVRI X0lOVEVSVkFMKTsKKworCQkvKgorCQkgKiBBIHNsb3dfZG93biBlcnJvciByZXF1aXJlcyB1cyB0 byBwZXJtYW5lbnRseSBpbmNyZWFzZSBvdXIgcmV0cnkKKwkJICogaW50ZXJ2YWwgYnkgZml2ZSBz ZWNvbmRzLiBSRkMgODYyOCwgU2VjLiAzLjUuCisJCSAqLworCQlpZiAoIXN0cmNtcChlcnJvcl9j b2RlLCAic2xvd19kb3duIikpCisJCXsKKwkJCWludGVydmFsICs9IDU7CisJCQlpX3NldF9pbnRf cGFyYW1ldGVyKCZzZXNzaW9uLCBJX09QVF9ERVZJQ0VfQVVUSF9JTlRFUlZBTCwgaW50ZXJ2YWwp OworCQl9CisKKwkJc2xlZXAoaW50ZXJ2YWwpOworCisJCS8qCisJCSAqIFhYWCBSZXNldCB0aGUg ZXJyb3IgY29kZSBiZWZvcmUgZXZlcnkgY2FsbCwgYmVjYXVzZSBpZGRhd2Mgd29uJ3QgZG8KKwkJ ICogdGhhdCBmb3IgdXMuIFRoaXMgbWF0dGVycyBpZiB0aGUgc2VydmVyIGZpcnN0IHNlbmRzIGEg InBlbmRpbmciIGVycm9yCisJCSAqIGNvZGUsIHRoZW4gbGF0ZXIgaGFyZC1mYWlscyB3aXRob3V0 IHNlbmRpbmcgYW4gZXJyb3IgY29kZSB0bworCQkgKiBvdmVyd3JpdGUgdGhlIGZpcnN0IG9uZS4K KwkJICoKKwkJICogVGhhdCB3ZSBoYXZlIHRvIGRvIHRoaXMgYXQgYWxsIHNlZW1zIGxpa2UgYSBi dWcgaW4gaWRkYXdjLgorCQkgKi8KKwkJaV9zZXRfc3RyX3BhcmFtZXRlcigmc2Vzc2lvbiwgSV9P UFRfRVJST1IsIE5VTEwpOworCisJCWVyciA9IGlfcnVuX3Rva2VuX3JlcXVlc3QoJnNlc3Npb24p OworCX0KKworCWFjY2Vzc190b2tlbiA9IGlfZ2V0X3N0cl9wYXJhbWV0ZXIoJnNlc3Npb24sIElf T1BUX0FDQ0VTU19UT0tFTik7CisJdG9rZW5fdHlwZSA9IGlfZ2V0X3N0cl9wYXJhbWV0ZXIoJnNl c3Npb24sIElfT1BUX1RPS0VOX1RZUEUpOworCisJaWYgKCFhY2Nlc3NfdG9rZW4gfHwgIXRva2Vu X3R5cGUgfHwgc3RyY2FzZWNtcCh0b2tlbl90eXBlLCAiQmVhcmVyIikpCisJeworCQlhcHBlbmRQ UUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNzYWdlLAorCQkJCQkJCSBsaWJwcV9nZXR0ZXh0 KCJpc3N1ZXIgZGlkIG5vdCBwcm92aWRlIGEgYmVhcmVyIHRva2VuIikpOworCQlnb3RvIGNsZWFu dXA7CisJfQorCisJYXBwZW5kUFFFeHBCdWZmZXJTdHIodG9rZW5fYnVmLCAiQmVhcmVyICIpOwor CWFwcGVuZFBRRXhwQnVmZmVyU3RyKHRva2VuX2J1ZiwgYWNjZXNzX3Rva2VuKTsKKworCWlmIChQ UUV4cEJ1ZmZlckJyb2tlbih0b2tlbl9idWYpKQorCQlnb3RvIGNsZWFudXA7CisKKwl0b2tlbiA9 IHN0cmR1cCh0b2tlbl9idWYtPmRhdGEpOworCitjbGVhbnVwOgorCWlmICh0b2tlbl9idWYpCisJ CWRlc3Ryb3lQUUV4cEJ1ZmZlcih0b2tlbl9idWYpOworCWlfY2xlYW5fc2Vzc2lvbigmc2Vzc2lv bik7CisKKwlyZXR1cm4gdG9rZW47Cit9CisKKyNkZWZpbmUga3ZzZXAgIlx4MDEiCisKK3N0YXRp YyBjaGFyICoKK2NsaWVudF9pbml0aWFsX3Jlc3BvbnNlKFBHY29ubiAqY29ubikKK3sKKwlzdGF0 aWMgY29uc3QgY2hhciAqIGNvbnN0IHJlc3BfZm9ybWF0ID0gIm4sLCIga3ZzZXAgImF1dGg9JXMi IGt2c2VwIGt2c2VwOworCisJUFFFeHBCdWZmZXIJdG9rZW5fYnVmOworCVBRRXhwQnVmZmVyCWRp c2NvdmVyeV9idWYgPSBOVUxMOworCWNoYXIJICAgKnRva2VuID0gTlVMTDsKKwljaGFyCSAgICpy ZXNwb25zZSA9IE5VTEw7CisKKwl0b2tlbl9idWYgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCWlm ICghdG9rZW5fYnVmKQorCQlnb3RvIGNsZWFudXA7CisKKwkvKgorCSAqIElmIHdlIGRvbid0IHll dCBoYXZlIGEgZGlzY292ZXJ5IFVSSSwgYnV0IHRoZSB1c2VyIGdhdmUgdXMgYW4gZXhwbGljaXQK KwkgKiBpc3N1ZXIsIHVzZSB0aGUgLndlbGwta25vd24gZGlzY292ZXJ5IFVSSSBmb3IgdGhhdCBp c3N1ZXIuCisJICovCisJaWYgKCFjb25uLT5vYXV0aF9kaXNjb3ZlcnlfdXJpICYmIGNvbm4tPm9h dXRoX2lzc3VlcikKKwl7CisJCWRpc2NvdmVyeV9idWYgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwor CQlpZiAoIWRpc2NvdmVyeV9idWYpCisJCQlnb3RvIGNsZWFudXA7CisKKwkJYXBwZW5kUFFFeHBC dWZmZXJTdHIoZGlzY292ZXJ5X2J1ZiwgY29ubi0+b2F1dGhfaXNzdWVyKTsKKwkJYXBwZW5kUFFF eHBCdWZmZXJTdHIoZGlzY292ZXJ5X2J1ZiwgIi8ud2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJh dGlvbiIpOworCisJCWlmIChQUUV4cEJ1ZmZlckJyb2tlbihkaXNjb3ZlcnlfYnVmKSkKKwkJCWdv dG8gY2xlYW51cDsKKworCQljb25uLT5vYXV0aF9kaXNjb3ZlcnlfdXJpID0gc3RyZHVwKGRpc2Nv dmVyeV9idWYtPmRhdGEpOworCX0KKworCXRva2VuID0gZ2V0X2F1dGhfdG9rZW4oY29ubik7CisJ aWYgKCF0b2tlbikKKwkJZ290byBjbGVhbnVwOworCisJYXBwZW5kUFFFeHBCdWZmZXIodG9rZW5f YnVmLCByZXNwX2Zvcm1hdCwgdG9rZW4pOworCWlmIChQUUV4cEJ1ZmZlckJyb2tlbih0b2tlbl9i dWYpKQorCQlnb3RvIGNsZWFudXA7CisKKwlyZXNwb25zZSA9IHN0cmR1cCh0b2tlbl9idWYtPmRh dGEpOworCitjbGVhbnVwOgorCWlmICh0b2tlbikKKwkJZnJlZSh0b2tlbik7CisJaWYgKGRpc2Nv dmVyeV9idWYpCisJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihkaXNjb3ZlcnlfYnVmKTsKKwlpZiAodG9r ZW5fYnVmKQorCQlkZXN0cm95UFFFeHBCdWZmZXIodG9rZW5fYnVmKTsKKworCXJldHVybiByZXNw b25zZTsKK30KKworI2RlZmluZSBFUlJPUl9TVEFUVVNfRklFTEQgInN0YXR1cyIKKyNkZWZpbmUg RVJST1JfU0NPUEVfRklFTEQgInNjb3BlIgorI2RlZmluZSBFUlJPUl9PUEVOSURfQ09ORklHVVJB VElPTl9GSUVMRCAib3BlbmlkLWNvbmZpZ3VyYXRpb24iCisKK3N0cnVjdCBqc29uX2N0eAorewor CWNoYXIJCSAgICplcnJtc2c7IC8qIGFueSBub24tTlVMTCB2YWx1ZSBzdG9wcyBhbGwgcHJvY2Vz c2luZyAqLworCVBRRXhwQnVmZmVyRGF0YSBlcnJidWY7IC8qIGJhY2tpbmcgbWVtb3J5IGZvciBl cnJtc2cgKi8KKwlpbnQJCQkJbmVzdGVkOyAvKiBuZXN0aW5nIGxldmVsICh6ZXJvIGlzIHRoZSB0 b3ApICovCisKKwljb25zdCBjaGFyCSAgICp0YXJnZXRfZmllbGRfbmFtZTsgLyogcG9pbnRzIHRv IGEgc3RhdGljIGFsbG9jYXRpb24gKi8KKwljaGFyCQkgICoqdGFyZ2V0X2ZpZWxkOyAgICAgIC8q IHNlZSBiZWxvdyAqLworCisJLyogdGFyZ2V0X2ZpZWxkLCBpZiBzZXQsIHBvaW50cyB0byBvbmUg b2YgdGhlIGZvbGxvd2luZzogKi8KKwljaGFyCQkgICAqc3RhdHVzOworCWNoYXIJCSAgICpzY29w ZTsKKwljaGFyCQkgICAqZGlzY292ZXJ5X3VyaTsKK307CisKKyNkZWZpbmUgb2F1dGhfanNvbl9o YXNfZXJyb3IoY3R4KSBcCisJKFBRRXhwQnVmZmVyRGF0YUJyb2tlbigoY3R4KS0+ZXJyYnVmKSB8 fCAoY3R4KS0+ZXJybXNnKQorCisjZGVmaW5lIG9hdXRoX2pzb25fc2V0X2Vycm9yKGN0eCwgLi4u KSBcCisJZG8geyBcCisJCWFwcGVuZFBRRXhwQnVmZmVyKCYoY3R4KS0+ZXJyYnVmLCBfX1ZBX0FS R1NfXyk7IFwKKwkJKGN0eCktPmVycm1zZyA9IChjdHgpLT5lcnJidWYuZGF0YTsgXAorCX0gd2hp bGUgKDApCisKK3N0YXRpYyB2b2lkCitvYXV0aF9qc29uX29iamVjdF9zdGFydCh2b2lkICpzdGF0 ZSkKK3sKKwlzdHJ1Y3QganNvbl9jdHgJICAgKmN0eCA9IHN0YXRlOworCisJaWYgKG9hdXRoX2pz b25faGFzX2Vycm9yKGN0eCkpCisJCXJldHVybjsgLyogc2hvcnQtY2lyY3VpdCAqLworCisJaWYg KGN0eC0+dGFyZ2V0X2ZpZWxkKQorCXsKKwkJQXNzZXJ0KGN0eC0+bmVzdGVkID09IDEpOworCisJ CW9hdXRoX2pzb25fc2V0X2Vycm9yKGN0eCwKKwkJCQkJCQkgbGlicHFfZ2V0dGV4dCgiZmllbGQg XCIlc1wiIG11c3QgYmUgYSBzdHJpbmciKSwKKwkJCQkJCQkgY3R4LT50YXJnZXRfZmllbGRfbmFt ZSk7CisJfQorCisJKytjdHgtPm5lc3RlZDsKK30KKworc3RhdGljIHZvaWQKK29hdXRoX2pzb25f b2JqZWN0X2VuZCh2b2lkICpzdGF0ZSkKK3sKKwlzdHJ1Y3QganNvbl9jdHgJICAgKmN0eCA9IHN0 YXRlOworCisJaWYgKG9hdXRoX2pzb25faGFzX2Vycm9yKGN0eCkpCisJCXJldHVybjsgLyogc2hv cnQtY2lyY3VpdCAqLworCisJLS1jdHgtPm5lc3RlZDsKK30KKworc3RhdGljIHZvaWQKK29hdXRo X2pzb25fb2JqZWN0X2ZpZWxkX3N0YXJ0KHZvaWQgKnN0YXRlLCBjaGFyICpuYW1lLCBib29sIGlz bnVsbCkKK3sKKwlzdHJ1Y3QganNvbl9jdHgJICAgKmN0eCA9IHN0YXRlOworCisJaWYgKG9hdXRo X2pzb25faGFzX2Vycm9yKGN0eCkpCisJeworCQkvKiBzaG9ydC1jaXJjdWl0ICovCisJCWZyZWUo bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoY3R4LT5uZXN0ZWQgPT0gMSkKKwl7CisJCWlm ICghc3RyY21wKG5hbWUsIEVSUk9SX1NUQVRVU19GSUVMRCkpCisJCXsKKwkJCWN0eC0+dGFyZ2V0 X2ZpZWxkX25hbWUgPSBFUlJPUl9TVEFUVVNfRklFTEQ7CisJCQljdHgtPnRhcmdldF9maWVsZCA9 ICZjdHgtPnN0YXR1czsKKwkJfQorCQllbHNlIGlmICghc3RyY21wKG5hbWUsIEVSUk9SX1NDT1BF X0ZJRUxEKSkKKwkJeworCQkJY3R4LT50YXJnZXRfZmllbGRfbmFtZSA9IEVSUk9SX1NDT1BFX0ZJ RUxEOworCQkJY3R4LT50YXJnZXRfZmllbGQgPSAmY3R4LT5zY29wZTsKKwkJfQorCQllbHNlIGlm ICghc3RyY21wKG5hbWUsIEVSUk9SX09QRU5JRF9DT05GSUdVUkFUSU9OX0ZJRUxEKSkKKwkJewor CQkJY3R4LT50YXJnZXRfZmllbGRfbmFtZSA9IEVSUk9SX09QRU5JRF9DT05GSUdVUkFUSU9OX0ZJ RUxEOworCQkJY3R4LT50YXJnZXRfZmllbGQgPSAmY3R4LT5kaXNjb3ZlcnlfdXJpOworCQl9CisJ fQorCisJZnJlZShuYW1lKTsKK30KKworc3RhdGljIHZvaWQKK29hdXRoX2pzb25fYXJyYXlfc3Rh cnQodm9pZCAqc3RhdGUpCit7CisJc3RydWN0IGpzb25fY3R4CSAgICpjdHggPSBzdGF0ZTsKKwor CWlmIChvYXV0aF9qc29uX2hhc19lcnJvcihjdHgpKQorCQlyZXR1cm47IC8qIHNob3J0LWNpcmN1 aXQgKi8KKworCWlmICghY3R4LT5uZXN0ZWQpCisJeworCQljdHgtPmVycm1zZyA9IGxpYnBxX2dl dHRleHQoInRvcC1sZXZlbCBlbGVtZW50IG11c3QgYmUgYW4gb2JqZWN0Iik7CisJfQorCWVsc2Ug aWYgKGN0eC0+dGFyZ2V0X2ZpZWxkKQorCXsKKwkJQXNzZXJ0KGN0eC0+bmVzdGVkID09IDEpOwor CisJCW9hdXRoX2pzb25fc2V0X2Vycm9yKGN0eCwKKwkJCQkJCQkgbGlicHFfZ2V0dGV4dCgiZmll bGQgXCIlc1wiIG11c3QgYmUgYSBzdHJpbmciKSwKKwkJCQkJCQkgY3R4LT50YXJnZXRfZmllbGRf bmFtZSk7CisJfQorfQorCitzdGF0aWMgdm9pZAorb2F1dGhfanNvbl9zY2FsYXIodm9pZCAqc3Rh dGUsIGNoYXIgKnRva2VuLCBKc29uVG9rZW5UeXBlIHR5cGUpCit7CisJc3RydWN0IGpzb25fY3R4 CSAgICpjdHggPSBzdGF0ZTsKKworCWlmIChvYXV0aF9qc29uX2hhc19lcnJvcihjdHgpKQorCXsK KwkJLyogc2hvcnQtY2lyY3VpdCAqLworCQlmcmVlKHRva2VuKTsKKwkJcmV0dXJuOworCX0KKwor CWlmICghY3R4LT5uZXN0ZWQpCisJeworCQljdHgtPmVycm1zZyA9IGxpYnBxX2dldHRleHQoInRv cC1sZXZlbCBlbGVtZW50IG11c3QgYmUgYW4gb2JqZWN0Iik7CisJfQorCWVsc2UgaWYgKGN0eC0+ dGFyZ2V0X2ZpZWxkKQorCXsKKwkJQXNzZXJ0KGN0eC0+bmVzdGVkID09IDEpOworCisJCWlmICh0 eXBlID09IEpTT05fVE9LRU5fU1RSSU5HKQorCQl7CisJCQkqY3R4LT50YXJnZXRfZmllbGQgPSB0 b2tlbjsKKworCQkJY3R4LT50YXJnZXRfZmllbGQgPSBOVUxMOworCQkJY3R4LT50YXJnZXRfZmll bGRfbmFtZSA9IE5VTEw7CisKKwkJCXJldHVybjsgLyogZG9uJ3QgZnJlZSB0aGUgdG9rZW4gd2Un cmUgdXNpbmcgKi8KKwkJfQorCisJCW9hdXRoX2pzb25fc2V0X2Vycm9yKGN0eCwKKwkJCQkJCQkg bGlicHFfZ2V0dGV4dCgiZmllbGQgXCIlc1wiIG11c3QgYmUgYSBzdHJpbmciKSwKKwkJCQkJCQkg Y3R4LT50YXJnZXRfZmllbGRfbmFtZSk7CisJfQorCisJZnJlZSh0b2tlbik7Cit9CisKK3N0YXRp YyBib29sCitoYW5kbGVfb2F1dGhfc2FzbF9lcnJvcihQR2Nvbm4gKmNvbm4sIGNoYXIgKm1zZywg aW50IG1zZ2xlbikKK3sKKwlKc29uTGV4Q29udGV4dAkJbGV4ID0gezB9OworCUpzb25TZW1BY3Rp b24JCXNlbSA9IHswfTsKKwlKc29uUGFyc2VFcnJvclR5cGUJZXJyOworCXN0cnVjdCBqc29uX2N0 eAkJY3R4ID0gezB9OworCWNoYXIJCQkgICAqZXJybXNnID0gTlVMTDsKKworCS8qIFNhbml0eSBj aGVjay4gKi8KKwlpZiAoc3RybGVuKG1zZykgIT0gbXNnbGVuKQorCXsKKwkJYXBwZW5kUFFFeHBC dWZmZXJTdHIoJmNvbm4tPmVycm9yTWVzc2FnZSwKKwkJCQkJCQkgbGlicHFfZ2V0dGV4dCgic2Vy dmVyJ3MgZXJyb3IgbWVzc2FnZSBjb250YWluZWQgYW4gZW1iZWRkZWQgTlVMTCIpKTsKKwkJcmV0 dXJuIGZhbHNlOworCX0KKworCWluaXRKc29uTGV4Q29udGV4dENzdHJpbmdMZW4oJmxleCwgbXNn LCBtc2dsZW4sIFBHX1VURjgsIHRydWUpOworCisJaW5pdFBRRXhwQnVmZmVyKCZjdHguZXJyYnVm KTsKKwlzZW0uc2Vtc3RhdGUgPSAmY3R4OworCisJc2VtLm9iamVjdF9zdGFydCA9IG9hdXRoX2pz b25fb2JqZWN0X3N0YXJ0OworCXNlbS5vYmplY3RfZW5kID0gb2F1dGhfanNvbl9vYmplY3RfZW5k OworCXNlbS5vYmplY3RfZmllbGRfc3RhcnQgPSBvYXV0aF9qc29uX29iamVjdF9maWVsZF9zdGFy dDsKKwlzZW0uYXJyYXlfc3RhcnQgPSBvYXV0aF9qc29uX2FycmF5X3N0YXJ0OworCXNlbS5zY2Fs YXIgPSBvYXV0aF9qc29uX3NjYWxhcjsKKworCWVyciA9IHBnX3BhcnNlX2pzb24oJmxleCwgJnNl bSk7CisKKwlpZiAoZXJyICE9IEpTT05fU1VDQ0VTUykKKwl7CisJCWVycm1zZyA9IGpzb25fZXJy ZGV0YWlsKGVyciwgJmxleCk7CisJfQorCWVsc2UgaWYgKFBRRXhwQnVmZmVyRGF0YUJyb2tlbihj dHguZXJyYnVmKSkKKwl7CisJCWVycm1zZyA9IGxpYnBxX2dldHRleHQoIm91dCBvZiBtZW1vcnki KTsKKwl9CisJZWxzZSBpZiAoY3R4LmVycm1zZykKKwl7CisJCWVycm1zZyA9IGN0eC5lcnJtc2c7 CisJfQorCisJaWYgKGVycm1zZykKKwkJYXBwZW5kUFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVz c2FnZSwKKwkJCQkJCSAgbGlicHFfZ2V0dGV4dCgiZmFpbGVkIHRvIHBhcnNlIHNlcnZlcidzIGVy cm9yIHJlc3BvbnNlOiAlcyIpLAorCQkJCQkJICBlcnJtc2cpOworCisJLyogRG9uJ3QgbmVlZCB0 aGUgZXJyb3IgYnVmZmVyIG9yIHRoZSBKU09OIGxleGVyIGFueW1vcmUuICovCisJdGVybVBRRXhw QnVmZmVyKCZjdHguZXJyYnVmKTsKKwl0ZXJtSnNvbkxleENvbnRleHQoJmxleCk7CisKKwlpZiAo ZXJybXNnKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBUT0RPOiB3aGF0IGlmIHRoZXNlIG92ZXJy aWRlIHdoYXQgdGhlIHVzZXIgYWxyZWFkeSBzcGVjaWZpZWQ/ICovCisJaWYgKGN0eC5kaXNjb3Zl cnlfdXJpKQorCXsKKwkJaWYgKGNvbm4tPm9hdXRoX2Rpc2NvdmVyeV91cmkpCisJCQlmcmVlKGNv bm4tPm9hdXRoX2Rpc2NvdmVyeV91cmkpOworCisJCWNvbm4tPm9hdXRoX2Rpc2NvdmVyeV91cmkg PSBjdHguZGlzY292ZXJ5X3VyaTsKKwl9CisKKwlpZiAoY3R4LnNjb3BlKQorCXsKKwkJaWYgKGNv bm4tPm9hdXRoX3Njb3BlKQorCQkJZnJlZShjb25uLT5vYXV0aF9zY29wZSk7CisKKwkJY29ubi0+ b2F1dGhfc2NvcGUgPSBjdHguc2NvcGU7CisJfQorCS8qIFRPRE86IG1pc3NpbmcgZXJyb3Igc2Nv cGUgc2hvdWxkIGNsZWFyIGFueSBleGlzdGluZyBjb25uZWN0aW9uIHNjb3BlICovCisKKwlpZiAo IWN0eC5zdGF0dXMpCisJeworCQlhcHBlbmRQUUV4cEJ1ZmZlcigmY29ubi0+ZXJyb3JNZXNzYWdl LAorCQkJCQkJICBsaWJwcV9nZXR0ZXh0KCJzZXJ2ZXIgc2VudCBlcnJvciByZXNwb25zZSB3aXRo b3V0IGEgc3RhdHVzIikpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKCFzdHJjbXAoY3R4 LnN0YXR1cywgImludmFsaWRfdG9rZW4iKSkKKwl7CisJCS8qCisJCSAqIGludmFsaWRfdG9rZW4g aXMgdGhlIG9ubHkgZXJyb3IgY29kZSB3ZSdsbCBhdXRvbWF0aWNhbGx5IHJldHJ5IGZvciwKKwkJ ICogYnV0IG9ubHkgaWYgd2UgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZG8gc28uCisJCSAq LworCQlpZiAoY29ubi0+b2F1dGhfZGlzY292ZXJ5X3VyaSkKKwkJCWNvbm4tPm9hdXRoX3dhbnRf cmV0cnkgPSB0cnVlOworCX0KKwkvKiBUT0RPOiBpbmNsdWRlIHN0YXR1cyBpbiBoYXJkIGZhaWx1 cmUgbWVzc2FnZSAqLworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkCitvYXV0aF9l eGNoYW5nZSh2b2lkICpvcGFxLCBib29sIGZpbmFsLAorCQkJICAgY2hhciAqaW5wdXQsIGludCBp bnB1dGxlbiwKKwkJCSAgIGNoYXIgKipvdXRwdXQsIGludCAqb3V0cHV0bGVuLAorCQkJICAgYm9v bCAqZG9uZSwgYm9vbCAqc3VjY2VzcykKK3sKKwlmZV9vYXV0aF9zdGF0ZSAqc3RhdGUgPSBvcGFx OworCVBHY29ubgkgICAqY29ubiA9IHN0YXRlLT5jb25uOworCisJKmRvbmUgPSBmYWxzZTsKKwkq c3VjY2VzcyA9IGZhbHNlOworCSpvdXRwdXQgPSBOVUxMOworCSpvdXRwdXRsZW4gPSAwOworCisJ c3dpdGNoIChzdGF0ZS0+c3RhdGUpCisJeworCQljYXNlIEZFX09BVVRIX0lOSVQ6CisJCQlBc3Nl cnQoaW5wdXRsZW4gPT0gLTEpOworCisJCQkqb3V0cHV0ID0gY2xpZW50X2luaXRpYWxfcmVzcG9u c2UoY29ubik7CisJCQlpZiAoISpvdXRwdXQpCisJCQkJZ290byBlcnJvcjsKKworCQkJKm91dHB1 dGxlbiA9IHN0cmxlbigqb3V0cHV0KTsKKwkJCXN0YXRlLT5zdGF0ZSA9IEZFX09BVVRIX0JFQVJF Ul9TRU5UOworCisJCQlicmVhazsKKworCQljYXNlIEZFX09BVVRIX0JFQVJFUl9TRU5UOgorCQkJ aWYgKGZpbmFsKQorCQkJeworCQkJCS8qIFRPRE86IGVuc3VyZSB0aGVyZSBpcyBubyBtZXNzYWdl IGNvbnRlbnQgaGVyZS4gKi8KKwkJCQkqZG9uZSA9IHRydWU7CisJCQkJKnN1Y2Nlc3MgPSB0cnVl OworCisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qCisJCQkgKiBFcnJvciBtZXNzYWdlIHNlbnQg YnkgdGhlIHNlcnZlci4KKwkJCSAqLworCQkJaWYgKCFoYW5kbGVfb2F1dGhfc2FzbF9lcnJvcihj b25uLCBpbnB1dCwgaW5wdXRsZW4pKQorCQkJCWdvdG8gZXJyb3I7CisKKwkJCS8qCisJCQkgKiBS ZXNwb25kIHdpdGggdGhlIHJlcXVpcmVkIGR1bW15IG1lc3NhZ2UgKFJGQyA3NjI4LCBzZWMuIDMu Mi4zKS4KKwkJCSAqLworCQkJKm91dHB1dCA9IHN0cmR1cChrdnNlcCk7CisJCQkqb3V0cHV0bGVu ID0gc3RybGVuKCpvdXRwdXQpOyAvKiA9PSAxICovCisKKwkJCXN0YXRlLT5zdGF0ZSA9IEZFX09B VVRIX1NFUlZFUl9FUlJPUjsKKwkJCWJyZWFrOworCisJCWNhc2UgRkVfT0FVVEhfU0VSVkVSX0VS Uk9SOgorCQkJLyoKKwkJCSAqIEFmdGVyIGFuIGVycm9yLCB0aGUgc2VydmVyIHNob3VsZCBzZW5k IGFuIGVycm9yIHJlc3BvbnNlIHRvIGZhaWwKKwkJCSAqIHRoZSBTQVNMIGhhbmRzaGFrZSwgd2hp Y2ggaXMgaGFuZGxlZCBpbiBoaWdoZXIgbGF5ZXJzLgorCQkJICoKKwkJCSAqIElmIHdlIGdldCBo ZXJlLCB0aGUgc2VydmVyIGVpdGhlciBzZW50ICphbm90aGVyKiBjaGFsbGVuZ2Ugd2hpY2gKKwkJ CSAqIGlzbid0IGRlZmluZWQgaW4gdGhlIFJGQywgb3IgY29tcGxldGVkIHRoZSBoYW5kc2hha2Ug c3VjY2Vzc2Z1bGx5CisJCQkgKiBhZnRlciB0ZWxsaW5nIHVzIGl0IHdhcyBnb2luZyB0byBmYWls LiBOZWl0aGVyIGlzIGFjY2VwdGFibGUuCisJCQkgKi8KKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KCZjb25uLT5lcnJvck1lc3NhZ2UsCisJCQkJCQkJCSBsaWJwcV9nZXR0ZXh0KCJzZXJ2ZXIgc2Vu dCBhZGRpdGlvbmFsIE9BdXRoIGRhdGEgYWZ0ZXIgZXJyb3JcbiIpKTsKKwkJCWdvdG8gZXJyb3I7 CisKKwkJZGVmYXVsdDoKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjb25uLT5lcnJvck1lc3Nh Z2UsCisJCQkJCQkJCSBsaWJwcV9nZXR0ZXh0KCJpbnZhbGlkIE9BdXRoIGV4Y2hhbmdlIHN0YXRl XG4iKSk7CisJCQlnb3RvIGVycm9yOworCX0KKworCXJldHVybjsKKworZXJyb3I6CisJKmRvbmUg PSB0cnVlOworCSpzdWNjZXNzID0gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sCitvYXV0aF9jaGFu bmVsX2JvdW5kKHZvaWQgKm9wYXEpCit7CisJLyogVGhpcyBtZWNoYW5pc20gZG9lcyBub3Qgc3Vw cG9ydCBjaGFubmVsIGJpbmRpbmcuICovCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9p ZAorb2F1dGhfZnJlZSh2b2lkICpvcGFxKQoreworCWZlX29hdXRoX3N0YXRlICpzdGF0ZSA9IG9w YXE7CisKKwlmcmVlKHN0YXRlKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBx L2ZlLWF1dGgtc2FzbC5oIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1zYXNsLmgKaW5k ZXggZGEzYzMwYjg3Yi4uYjFiYjM4MmY3MCAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGli cHEvZmUtYXV0aC1zYXNsLmgKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1zYXNs LmgKQEAgLTY1LDYgKzY1LDggQEAgdHlwZWRlZiBzdHJ1Y3QgcGdfZmVfc2FzbF9tZWNoCiAJICoK IAkgKglzdGF0ZToJICAgVGhlIG9wYXF1ZSBtZWNoYW5pc20gc3RhdGUgcmV0dXJuZWQgYnkgaW5p dCgpCiAJICoKKwkgKglmaW5hbDoJICAgdHJ1ZSBpZiB0aGUgc2VydmVyIGhhcyBzZW50IGEgZmlu YWwgZXhjaGFuZ2Ugb3V0Y29tZQorCSAqCiAJICoJaW5wdXQ6CSAgIFRoZSBjaGFsbGVuZ2UgZGF0 YSBzZW50IGJ5IHRoZSBzZXJ2ZXIsIG9yIE5VTEwgd2hlbgogCSAqCQkJICAgZ2VuZXJhdGluZyBh IGNsaWVudC1maXJzdCBpbml0aWFsIHJlc3BvbnNlICh0aGF0IGlzLCB3aGVuCiAJICoJCQkgICB0 aGUgc2VydmVyIGV4cGVjdHMgdGhlIGNsaWVudCB0byBzZW5kIGEgbWVzc2FnZSB0byBzdGFydApA QCAtOTIsNyArOTQsOCBAQCB0eXBlZGVmIHN0cnVjdCBwZ19mZV9zYXNsX21lY2gKIAkgKgkJCSAg IElnbm9yZWQgaWYgKmRvbmUgaXMgZmFsc2UuCiAJICotLS0tLS0tLQogCSAqLwotCXZvaWQJCSgq ZXhjaGFuZ2UpICh2b2lkICpzdGF0ZSwgY2hhciAqaW5wdXQsIGludCBpbnB1dGxlbiwKKwl2b2lk CQkoKmV4Y2hhbmdlKSAodm9pZCAqc3RhdGUsIGJvb2wgZmluYWwsCisJCQkJCQkJIGNoYXIgKmlu cHV0LCBpbnQgaW5wdXRsZW4sCiAJCQkJCQkJIGNoYXIgKipvdXRwdXQsIGludCAqb3V0cHV0bGVu LAogCQkJCQkJCSBib29sICpkb25lLCBib29sICpzdWNjZXNzKTsKIApkaWZmIC0tZ2l0IGEvc3Jj L2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1zY3JhbS5jIGIvc3JjL2ludGVyZmFjZXMvbGlicHEv ZmUtYXV0aC1zY3JhbS5jCmluZGV4IGU2MTYyMDA3MDQuLjY4MWI3NmFkYmUgMTAwNjQ0Ci0tLSBh L3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtc2NyYW0uYworKysgYi9zcmMvaW50ZXJmYWNl cy9saWJwcS9mZS1hdXRoLXNjcmFtLmMKQEAgLTI0LDcgKzI0LDggQEAKIC8qIFRoZSBleHBvcnRl ZCBTQ1JBTSBjYWxsYmFjayBtZWNoYW5pc20uICovCiBzdGF0aWMgdm9pZCAqc2NyYW1faW5pdChQ R2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnBhc3N3b3JkLAogCQkJCQkJY29uc3QgY2hhciAqc2Fz bF9tZWNoYW5pc20pOwotc3RhdGljIHZvaWQgc2NyYW1fZXhjaGFuZ2Uodm9pZCAqb3BhcSwgY2hh ciAqaW5wdXQsIGludCBpbnB1dGxlbiwKK3N0YXRpYyB2b2lkIHNjcmFtX2V4Y2hhbmdlKHZvaWQg Km9wYXEsIGJvb2wgZmluYWwsCisJCQkJCQkgICBjaGFyICppbnB1dCwgaW50IGlucHV0bGVuLAog CQkJCQkJICAgY2hhciAqKm91dHB1dCwgaW50ICpvdXRwdXRsZW4sCiAJCQkJCQkgICBib29sICpk b25lLCBib29sICpzdWNjZXNzKTsKIHN0YXRpYyBib29sIHNjcmFtX2NoYW5uZWxfYm91bmQodm9p ZCAqb3BhcSk7CkBAIC0yMDYsNyArMjA3LDggQEAgc2NyYW1fZnJlZSh2b2lkICpvcGFxKQogICog RXhjaGFuZ2UgYSBTQ1JBTSBtZXNzYWdlIHdpdGggYmFja2VuZC4KICAqLwogc3RhdGljIHZvaWQK LXNjcmFtX2V4Y2hhbmdlKHZvaWQgKm9wYXEsIGNoYXIgKmlucHV0LCBpbnQgaW5wdXRsZW4sCitz Y3JhbV9leGNoYW5nZSh2b2lkICpvcGFxLCBib29sIGZpbmFsLAorCQkJICAgY2hhciAqaW5wdXQs IGludCBpbnB1dGxlbiwKIAkJCSAgIGNoYXIgKipvdXRwdXQsIGludCAqb3V0cHV0bGVuLAogCQkJ ICAgYm9vbCAqZG9uZSwgYm9vbCAqc3VjY2VzcykKIHsKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZh Y2VzL2xpYnBxL2ZlLWF1dGguYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGguYwppbmRl eCA2ZmNlZmY1NjFiLi4yNTY3YTM0MDIzIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJw cS9mZS1hdXRoLmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC5jCkBAIC0zOCw2 ICszOCw3IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgImNvbW1vbi9tZDUuaCIKKyNpbmNsdWRlICJj b21tb24vb2F1dGgtY29tbW9uLmgiCiAjaW5jbHVkZSAiY29tbW9uL3NjcmFtLWNvbW1vbi5oIgog I2luY2x1ZGUgImZlLWF1dGguaCIKICNpbmNsdWRlICJmZS1hdXRoLXNhc2wuaCIKQEAgLTQyMiw3 ICs0MjMsNyBAQCBwZ19TQVNMX2luaXQoUEdjb25uICpjb25uLCBpbnQgcGF5bG9hZGxlbikKIAli b29sCQlzdWNjZXNzOwogCWNvbnN0IGNoYXIgKnNlbGVjdGVkX21lY2hhbmlzbTsKIAlQUUV4cEJ1 ZmZlckRhdGEgbWVjaGFuaXNtX2J1ZjsKLQljaGFyCSAgICpwYXNzd29yZDsKKwljaGFyCSAgICpw YXNzd29yZCA9IE5VTEw7CiAKIAlpbml0UFFFeHBCdWZmZXIoJm1lY2hhbmlzbV9idWYpOwogCkBA IC00NDQsOCArNDQ1LDcgQEAgcGdfU0FTTF9pbml0KFBHY29ubiAqY29ubiwgaW50IHBheWxvYWRs ZW4pCiAJLyoKIAkgKiBQYXJzZSB0aGUgbGlzdCBvZiBTQVNMIGF1dGhlbnRpY2F0aW9uIG1lY2hh bmlzbXMgaW4gdGhlCiAJICogQXV0aGVudGljYXRpb25TQVNMIG1lc3NhZ2UsIGFuZCBzZWxlY3Qg dGhlIGJlc3QgbWVjaGFuaXNtIHRoYXQgd2UKLQkgKiBzdXBwb3J0LiAgU0NSQU0tU0hBLTI1Ni1Q TFVTIGFuZCBTQ1JBTS1TSEEtMjU2IGFyZSB0aGUgb25seSBvbmVzCi0JICogc3VwcG9ydGVkIGF0 IHRoZSBtb21lbnQsIGxpc3RlZCBieSBvcmRlciBvZiBkZWNyZWFzaW5nIGltcG9ydGFuY2UuCisJ ICogc3VwcG9ydC4gIE1lY2hhbmlzbXMgYXJlIGxpc3RlZCBieSBvcmRlciBvZiBkZWNyZWFzaW5n IGltcG9ydGFuY2UuCiAJICovCiAJc2VsZWN0ZWRfbWVjaGFuaXNtID0gTlVMTDsKIAlmb3IgKDs7 KQpAQCAtNDg1LDYgKzQ4NSw3IEBAIHBnX1NBU0xfaW5pdChQR2Nvbm4gKmNvbm4sIGludCBwYXls b2FkbGVuKQogCQkJCXsKIAkJCQkJc2VsZWN0ZWRfbWVjaGFuaXNtID0gU0NSQU1fU0hBXzI1Nl9Q TFVTX05BTUU7CiAJCQkJCWNvbm4tPnNhc2wgPSAmcGdfc2NyYW1fbWVjaDsKKwkJCQkJY29ubi0+ cGFzc3dvcmRfbmVlZGVkID0gdHJ1ZTsKIAkJCQl9CiAjZWxzZQogCQkJCS8qCkBAIC01MjIsNyAr NTIzLDE3IEBAIHBnX1NBU0xfaW5pdChQR2Nvbm4gKmNvbm4sIGludCBwYXlsb2FkbGVuKQogCQl7 CiAJCQlzZWxlY3RlZF9tZWNoYW5pc20gPSBTQ1JBTV9TSEFfMjU2X05BTUU7CiAJCQljb25uLT5z YXNsID0gJnBnX3NjcmFtX21lY2g7CisJCQljb25uLT5wYXNzd29yZF9uZWVkZWQgPSB0cnVlOwog CQl9CisjaWZkZWYgVVNFX09BVVRICisJCWVsc2UgaWYgKHN0cmNtcChtZWNoYW5pc21fYnVmLmRh dGEsIE9BVVRIQkVBUkVSX05BTUUpID09IDAgJiYKKwkJCQkhc2VsZWN0ZWRfbWVjaGFuaXNtKQor CQl7CisJCQlzZWxlY3RlZF9tZWNoYW5pc20gPSBPQVVUSEJFQVJFUl9OQU1FOworCQkJY29ubi0+ c2FzbCA9ICZwZ19vYXV0aF9tZWNoOworCQkJY29ubi0+cGFzc3dvcmRfbmVlZGVkID0gZmFsc2U7 CisJCX0KKyNlbmRpZgogCX0KIAogCWlmICghc2VsZWN0ZWRfbWVjaGFuaXNtKQpAQCAtNTQ3LDE4 ICs1NTgsMTkgQEAgcGdfU0FTTF9pbml0KFBHY29ubiAqY29ubiwgaW50IHBheWxvYWRsZW4pCiAK IAkvKgogCSAqIEZpcnN0LCBzZWxlY3QgdGhlIHBhc3N3b3JkIHRvIHVzZSBmb3IgdGhlIGV4Y2hh bmdlLCBjb21wbGFpbmluZyBpZgotCSAqIHRoZXJlIGlzbid0IG9uZS4gIEN1cnJlbnRseSwgYWxs IHN1cHBvcnRlZCBTQVNMIG1lY2hhbmlzbXMgcmVxdWlyZSBhCi0JICogcGFzc3dvcmQsIHNvIHdl IGNhbiBqdXN0IGdvIGFoZWFkIGhlcmUgd2l0aG91dCBmdXJ0aGVyIGRpc3RpbmN0aW9uLgorCSAq IHRoZXJlIGlzbid0IG9uZSBhbmQgdGhlIFNBU0wgbWVjaGFuaXNtIG5lZWRzIGl0LgogCSAqLwot CWNvbm4tPnBhc3N3b3JkX25lZWRlZCA9IHRydWU7Ci0JcGFzc3dvcmQgPSBjb25uLT5jb25uaG9z dFtjb25uLT53aGljaGhvc3RdLnBhc3N3b3JkOwotCWlmIChwYXNzd29yZCA9PSBOVUxMKQotCQlw YXNzd29yZCA9IGNvbm4tPnBncGFzczsKLQlpZiAocGFzc3dvcmQgPT0gTlVMTCB8fCBwYXNzd29y ZFswXSA9PSAnXDAnKQorCWlmIChjb25uLT5wYXNzd29yZF9uZWVkZWQpCiAJewotCQlhcHBlbmRQ UUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNzYWdlLAotCQkJCQkJCSBQUW5vUGFzc3dvcmRT dXBwbGllZCk7Ci0JCWdvdG8gZXJyb3I7CisJCXBhc3N3b3JkID0gY29ubi0+Y29ubmhvc3RbY29u bi0+d2hpY2hob3N0XS5wYXNzd29yZDsKKwkJaWYgKHBhc3N3b3JkID09IE5VTEwpCisJCQlwYXNz d29yZCA9IGNvbm4tPnBncGFzczsKKwkJaWYgKHBhc3N3b3JkID09IE5VTEwgfHwgcGFzc3dvcmRb MF0gPT0gJ1wwJykKKwkJeworCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVz c2FnZSwKKwkJCQkJCQkJIFBRbm9QYXNzd29yZFN1cHBsaWVkKTsKKwkJCWdvdG8gZXJyb3I7CisJ CX0KIAl9CiAKIAlBc3NlcnQoY29ubi0+c2FzbCk7CkBAIC01NzYsNyArNTg4LDcgQEAgcGdfU0FT TF9pbml0KFBHY29ubiAqY29ubiwgaW50IHBheWxvYWRsZW4pCiAJCWdvdG8gb29tX2Vycm9yOwog CiAJLyogR2V0IHRoZSBtZWNoYW5pc20tc3BlY2lmaWMgSW5pdGlhbCBDbGllbnQgUmVzcG9uc2Us IGlmIGFueSAqLwotCWNvbm4tPnNhc2wtPmV4Y2hhbmdlKGNvbm4tPnNhc2xfc3RhdGUsCisJY29u bi0+c2FzbC0+ZXhjaGFuZ2UoY29ubi0+c2FzbF9zdGF0ZSwgZmFsc2UsCiAJCQkJCQkgTlVMTCwg LTEsCiAJCQkJCQkgJmluaXRpYWxyZXNwb25zZSwgJmluaXRpYWxyZXNwb25zZWxlbiwKIAkJCQkJ CSAmZG9uZSwgJnN1Y2Nlc3MpOwpAQCAtNjU3LDcgKzY2OSw3IEBAIHBnX1NBU0xfY29udGludWUo UEdjb25uICpjb25uLCBpbnQgcGF5bG9hZGxlbiwgYm9vbCBmaW5hbCkKIAkvKiBGb3Igc2FmZXR5 IGFuZCBjb252ZW5pZW5jZSwgZW5zdXJlIHRoZSBidWZmZXIgaXMgTlVMTC10ZXJtaW5hdGVkLiAq LwogCWNoYWxsZW5nZVtwYXlsb2FkbGVuXSA9ICdcMCc7CiAKLQljb25uLT5zYXNsLT5leGNoYW5n ZShjb25uLT5zYXNsX3N0YXRlLAorCWNvbm4tPnNhc2wtPmV4Y2hhbmdlKGNvbm4tPnNhc2xfc3Rh dGUsIGZpbmFsLAogCQkJCQkJIGNoYWxsZW5nZSwgcGF5bG9hZGxlbiwKIAkJCQkJCSAmb3V0cHV0 LCAmb3V0cHV0bGVuLAogCQkJCQkJICZkb25lLCAmc3VjY2Vzcyk7CmRpZmYgLS1naXQgYS9zcmMv aW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLmggYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRo LmgKaW5kZXggMDQ5YThiYjFhMS4uMmE1Njc3NDAxOSAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFj ZXMvbGlicHEvZmUtYXV0aC5oCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGguaApA QCAtMjgsNCArMjgsNyBAQCBleHRlcm4gY29uc3QgcGdfZmVfc2FzbF9tZWNoIHBnX3NjcmFtX21l Y2g7CiBleHRlcm4gY2hhciAqcGdfZmVfc2NyYW1fYnVpbGRfc2VjcmV0KGNvbnN0IGNoYXIgKnBh c3N3b3JkLAogCQkJCQkJCQkJICBjb25zdCBjaGFyICoqZXJyc3RyKTsKIAorLyogTWVjaGFuaXNt cyBpbiBmZS1hdXRoLW9hdXRoLmMgKi8KK2V4dGVybiBjb25zdCBwZ19mZV9zYXNsX21lY2ggcGdf b2F1dGhfbWVjaDsKKwogI2VuZGlmCQkJCQkJCS8qIEZFX0FVVEhfSCAqLwpkaWZmIC0tZ2l0IGEv c3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY29ubmVjdC5jIGIvc3JjL2ludGVyZmFjZXMvbGlicHEv ZmUtY29ubmVjdC5jCmluZGV4IGNmNTU0ZDM4OWYuLmZkZDMwZDcxZGUgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3QuYworKysgYi9zcmMvaW50ZXJmYWNlcy9saWJw cS9mZS1jb25uZWN0LmMKQEAgLTM0NCw2ICszNDQsMjMgQEAgc3RhdGljIGNvbnN0IGludGVybmFs UFFjb25uaW5mb09wdGlvbiBQUWNvbm5pbmZvT3B0aW9uc1tdID0gewogCQkiVGFyZ2V0LVNlc3Np b24tQXR0cnMiLCAiIiwgMTUsIC8qIHNpemVvZigicHJlZmVyLXN0YW5kYnkiKSA9IDE1ICovCiAJ b2Zmc2V0b2Yoc3RydWN0IHBnX2Nvbm4sIHRhcmdldF9zZXNzaW9uX2F0dHJzKX0sCiAKKwkvKiBP QXV0aCB2MiAqLworCXsib2F1dGhfaXNzdWVyIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJIk9BdXRo LUlzc3VlciIsICIiLCA0MCwKKwlvZmZzZXRvZihzdHJ1Y3QgcGdfY29ubiwgb2F1dGhfaXNzdWVy KX0sCisKKwl7Im9hdXRoX2NsaWVudF9pZCIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJPQXV0aC1D bGllbnQtSUQiLCAiIiwgNDAsCisJb2Zmc2V0b2Yoc3RydWN0IHBnX2Nvbm4sIG9hdXRoX2NsaWVu dF9pZCl9LAorCisJeyJvYXV0aF9jbGllbnRfc2VjcmV0IiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJ Ik9BdXRoLUNsaWVudC1TZWNyZXQiLCAiIiwgNDAsCisJb2Zmc2V0b2Yoc3RydWN0IHBnX2Nvbm4s IG9hdXRoX2NsaWVudF9zZWNyZXQpfSwKKworCXsib2F1dGhfc2NvcGUiLCBOVUxMLCBOVUxMLCBO VUxMLAorCQkiT0F1dGgtU2NvcGUiLCAiIiwgMTUsCisJb2Zmc2V0b2Yoc3RydWN0IHBnX2Nvbm4s IG9hdXRoX3Njb3BlKX0sCisKIAkvKiBUZXJtaW5hdGluZyBlbnRyeSAtLS0gTVVTVCBCRSBMQVNU ICovCiAJe05VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCiAJTlVMTCwgTlVMTCwgMH0KQEAgLTYwNiw2 ICs2MjMsNyBAQCBwcURyb3BTZXJ2ZXJEYXRhKFBHY29ubiAqY29ubikKIAljb25uLT53cml0ZV9l cnJfbXNnID0gTlVMTDsKIAljb25uLT5iZV9waWQgPSAwOwogCWNvbm4tPmJlX2tleSA9IDA7CisJ LyogY29ubi0+b2F1dGhfd2FudF9yZXRyeSA9IGZhbHNlOyBUT0RPICovCiB9CiAKIApAQCAtMzM4 Niw2ICszNDA0LDE2IEBAIGtlZXBfZ29pbmc6CQkJCQkJLyogV2Ugd2lsbCBjb21lIGJhY2sgdG8g aGVyZSB1bnRpbCB0aGVyZSBpcwogCQkJCQkvKiBDaGVjayB0byBzZWUgaWYgd2Ugc2hvdWxkIG1l bnRpb24gcGdwYXNzZmlsZSAqLwogCQkJCQlwZ3Bhc3NmaWxlV2FybmluZyhjb25uKTsKIAorI2lm ZGVmIFVTRV9PQVVUSAorCQkJCQlpZiAoY29ubi0+c2FzbCA9PSAmcGdfb2F1dGhfbWVjaAorCQkJ CQkJJiYgY29ubi0+b2F1dGhfd2FudF9yZXRyeSkKKwkJCQkJeworCQkJCQkJLyogVE9ETzogb25s eSBhbGxvdyByZXRyeSBvbmNlICovCisJCQkJCQluZWVkX25ld19jb25uZWN0aW9uID0gdHJ1ZTsK KwkJCQkJCWdvdG8ga2VlcF9nb2luZzsKKwkJCQkJfQorI2VuZGlmCisKICNpZmRlZiBFTkFCTEVf R1NTCiAKIAkJCQkJLyoKQEAgLTQxNjYsNiArNDE5NCwxNiBAQCBmcmVlUEdjb25uKFBHY29ubiAq Y29ubikKIAkJZnJlZShjb25uLT5yb3dCdWYpOwogCWlmIChjb25uLT50YXJnZXRfc2Vzc2lvbl9h dHRycykKIAkJZnJlZShjb25uLT50YXJnZXRfc2Vzc2lvbl9hdHRycyk7CisJaWYgKGNvbm4tPm9h dXRoX2lzc3VlcikKKwkJZnJlZShjb25uLT5vYXV0aF9pc3N1ZXIpOworCWlmIChjb25uLT5vYXV0 aF9kaXNjb3ZlcnlfdXJpKQorCQlmcmVlKGNvbm4tPm9hdXRoX2Rpc2NvdmVyeV91cmkpOworCWlm IChjb25uLT5vYXV0aF9jbGllbnRfaWQpCisJCWZyZWUoY29ubi0+b2F1dGhfY2xpZW50X2lkKTsK KwlpZiAoY29ubi0+b2F1dGhfY2xpZW50X3NlY3JldCkKKwkJZnJlZShjb25uLT5vYXV0aF9jbGll bnRfc2VjcmV0KTsKKwlpZiAoY29ubi0+b2F1dGhfc2NvcGUpCisJCWZyZWUoY29ubi0+b2F1dGhf c2NvcGUpOwogCXRlcm1QUUV4cEJ1ZmZlcigmY29ubi0+ZXJyb3JNZXNzYWdlKTsKIAl0ZXJtUFFF eHBCdWZmZXIoJmNvbm4tPndvcmtCdWZmZXIpOwogCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNl cy9saWJwcS9saWJwcS1pbnQuaCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWludC5oCmlu ZGV4IGUwY2VlNGIxNDIuLjBkZmYxMzUwNWEgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xp YnBxL2xpYnBxLWludC5oCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWludC5oCkBA IC0zOTQsNiArMzk0LDE0IEBAIHN0cnVjdCBwZ19jb25uCiAJY2hhcgkgICAqc3NsX21heF9wcm90 b2NvbF92ZXJzaW9uOwkvKiBtYXhpbXVtIFRMUyBwcm90b2NvbCB2ZXJzaW9uICovCiAJY2hhcgkg ICAqdGFyZ2V0X3Nlc3Npb25fYXR0cnM7CS8qIGRlc2lyZWQgc2Vzc2lvbiBwcm9wZXJ0aWVzICov CiAKKwkvKiBPQXV0aCB2MiAqLworCWNoYXIJICAgKm9hdXRoX2lzc3VlcjsJCQkvKiB0b2tlbiBp c3N1ZXIgVVJMICovCisJY2hhcgkgICAqb2F1dGhfZGlzY292ZXJ5X3VyaTsJLyogVVJJIG9mIHRo ZSBpc3N1ZXIncyBkaXNjb3ZlcnkgZG9jdW1lbnQgKi8KKwljaGFyCSAgICpvYXV0aF9jbGllbnRf aWQ7CQkvKiBjbGllbnQgaWRlbnRpZmllciAqLworCWNoYXIJICAgKm9hdXRoX2NsaWVudF9zZWNy ZXQ7CS8qIGNsaWVudCBzZWNyZXQgKi8KKwljaGFyCSAgICpvYXV0aF9zY29wZTsJCQkvKiBhY2Nl c3MgdG9rZW4gc2NvcGUgKi8KKwlib29sCQlvYXV0aF93YW50X3JldHJ5OwkJLyogc2hvdWxkIHdl IHJldHJ5IG9uIGZhaWx1cmU/ICovCisKIAkvKiBPcHRpb25hbCBmaWxlIHRvIHdyaXRlIHRyYWNl IGluZm8gdG8gKi8KIAlGSUxFCSAgICpQZmRlYnVnOwogCWludAkJCXRyYWNlRmxhZ3M7Ci0tIAoy LjI1LjEKCg== --_011_4db7d3ea061f47a15fc6d865f53dd327ea2975fbcamelvmwarecom_ Content-Type: text/x-patch; name="v4-0007-backend-add-OAUTHBEARER-SASL-mechanism.patch" Content-Description: v4-0007-backend-add-OAUTHBEARER-SASL-mechanism.patch Content-Disposition: attachment; filename="v4-0007-backend-add-OAUTHBEARER-SASL-mechanism.patch"; size=36420; creation-date="Sat, 26 Mar 2022 00:00:22 GMT"; modification-date="Sat, 26 Mar 2022 00:00:22 GMT" Content-ID: Content-Transfer-Encoding: base64 RnJvbSBiM2NlZGE2MmU5Y2M2Y2JiYzI0YzYzYzA1YzVjZTA3MmFlNzcxYzFiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8cGNoYW1waW9uQHZtd2FyZS5jb20+ CkRhdGU6IFR1ZSwgNCBNYXkgMjAyMSAxNjoyMToxMSAtMDcwMApTdWJqZWN0OiBbUEFUQ0ggdjQg MDcvMTBdIGJhY2tlbmQ6IGFkZCBPQVVUSEJFQVJFUiBTQVNMIG1lY2hhbmlzbQoKRE8gTk9UIFVT RSBUSElTIFBST09GIE9GIENPTkNFUFQgSU4gUFJPRFVDVElPTi4KCkltcGxlbWVudCBPQVVUSEJF QVJFUiAoUkZDIDc2MjgpIG9uIHRoZSBzZXJ2ZXIgc2lkZS4gVGhpcyBhZGRzIGEgbmV3CmF1dGgg bWV0aG9kLCBvYXV0aCwgdG8gcGdfaGJhLgoKQmVjYXVzZSBPQXV0aCBpbXBsZW1lbnRhdGlvbnMg dmFyeSBzbyB3aWxkbHksIGFuZCBiZWFyZXIgdG9rZW4KdmFsaWRhdGlvbiBpcyBoZWF2aWx5IGRl cGVuZGVudCBvbiB0aGUgaXNzdWluZyBwYXJ0eSwgYXV0aG4veiBpcyBkb25lIGJ5CmNvbW11bmlj YXRpbmcgd2l0aCBhbiBleHRlcm5hbCBwcm9ncmFtOiB0aGUgb2F1dGhfdmFsaWRhdG9yX2NvbW1h bmQuClRoaXMgY29tbWFuZCBtdXN0IGRvIHRoZSBmb2xsb3dpbmc6CgoxLiBSZWNlaXZlIHRoZSBi ZWFyZXIgdG9rZW4gYnkgcmVhZGluZyBpdHMgY29udGVudHMgZnJvbSBhIGZpbGUKICAgZGVzY3Jp cHRvciBwYXNzZWQgZnJvbSB0aGUgc2VydmVyLiAoVGhlIG51bWVyaWMgdmFsdWUgb2YgdGhpcwog ICBkZXNjcmlwdG9yIG1heSBiZSBpbnNlcnRlZCBpbnRvIHRoZSBvYXV0aF92YWxpZGF0b3JfY29t bWFuZCB1c2luZyB0aGUKICAgJWYgc3BlY2lmaWVyLikKCiAgIFRoaXMgTVVTVCBiZSB0aGUgZmly c3QgYWN0aW9uIHRoZSBjb21tYW5kIHBlcmZvcm1zLiBUaGUgc2VydmVyIHdpbGwKICAgbm90IGJl Z2luIHJlYWRpbmcgc3Rkb3V0IGZyb20gdGhlIGNvbW1hbmQgdW50aWwgdGhlIHRva2VuIGhhcyBi ZWVuCiAgIHJlYWQgaW4gZnVsbCwgc28gaWYgdGhlIGNvbW1hbmQgdHJpZXMgdG8gcHJpbnQgYW55 dGhpbmcgYW5kIGhpdHMgYQogICBidWZmZXIgbGltaXQsIHRoZSBiYWNrZW5kIHdpbGwgZGVhZGxv Y2sgYW5kIHRpbWUgb3V0LgoKMi4gVmFsaWRhdGUgdGhlIGJlYXJlciB0b2tlbi4gVGhlIGNvcnJl Y3Qgd2F5IHRvIGRvIHRoaXMgZGVwZW5kcyBvbiB0aGUKICAgaXNzdWVyLCBidXQgaXQgZ2VuZXJh bGx5IGludm9sdmVzIGVpdGhlciBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbnMgdG8KICAgcHJvdmUg dGhhdCB0aGUgdG9rZW4gd2FzIGlzc3VlZCBieSBhIHRydXN0ZWQgcGFydHksIG9yIHRoZQogICBw cmVzZW50YXRpb24gb2YgdGhlIGJlYXJlciB0b2tlbiB0byBzb21lIG90aGVyIHBhcnR5IHNvIHRo YXQgX2l0XyBjYW4KICAgcGVyZm9ybSB2YWxpZGF0aW9uLgoKICAgVGhlIGNvbW1hbmQgTVVTVCBt YWludGFpbiBjb25maWRlbnRpYWxpdHkgb2YgdGhlIGJlYXJlciB0b2tlbiwgc2luY2UKICAgaW4g bW9zdCBjYXNlcyBpdCBjYW4gYmUgdXNlZCBqdXN0IGxpa2UgYSBwYXNzd29yZC4gKFRoZXJlIGFy ZSB3YXlzIHRvCiAgIGNyeXB0b2dyYXBoaWNhbGx5IGJpbmQgdG9rZW5zIHRvIGNsaWVudCBjZXJ0 aWZpY2F0ZXMsIGJ1dCB0aGV5IGFyZQogICB3YXkgYmV5b25kIHRoZSBzY29wZSBvZiB0aGlzIGNv bW1pdCBtZXNzYWdlLikKCiAgIElmIHRoZSB0b2tlbiBjYW5ub3QgYmUgdmFsaWRhdGVkLCB0aGUg Y29tbWFuZCBtdXN0IGV4aXQgd2l0aCBhCiAgIG5vbi16ZXJvIHN0YXR1cy4gRnVydGhlciBhdXRo ZW50aWNhdGlvbi9hdXRob3JpemF0aW9uIGlzIHBvaW50bGVzcyBpZgogICB0aGUgYmVhcmVyIHRv a2VuIHdhc24ndCBpc3N1ZWQgYnkgc29tZW9uZSB5b3UgdHJ1c3QuCgozLiBBdXRoZW50aWNhdGUg dGhlIHVzZXIsIGF1dGhvcml6ZSB0aGUgdXNlciwgb3IgYm90aDoKCiAgIGEuIFRvIGF1dGhlbnRp Y2F0ZSB0aGUgdXNlciwgdXNlIHRoZSBiZWFyZXIgdG9rZW4gdG8gcmV0cmlldmUgc29tZQogICAg ICB0cnVzdGVkIGlkZW50aWZpZXIgc3RyaW5nIGZvciB0aGUgZW5kIHVzZXIuIFRoZSBleGFjdCBw cm9jZXNzIGZvcgogICAgICB0aGlzIGlzLCBhZ2FpbiwgaXNzdWVyLWRlcGVuZGVudC4gVGhlIGNv bW1hbmQgc2hvdWxkIHByaW50IHRoZQogICAgICBhdXRoZW50aWNhdGVkIGlkZW50aXR5IHN0cmlu ZyB0byBzdGRvdXQsIGZvbGxvd2VkIGJ5IGEgbmV3bGluZS4KCiAgICAgIElmIHRoZSB1c2VyIGNh bm5vdCBiZSBhdXRoZW50aWNhdGVkLCB0aGUgdmFsaWRhdG9yIHNob3VsZCBub3QKICAgICAgcHJp bnQgYW55dGhpbmcgdG8gc3Rkb3V0LiBJdCBzaG91bGQgYWxzbyBleGl0IHdpdGggYSBub24temVy bwogICAgICBzdGF0dXMsIHVubGVzcyB0aGUgdG9rZW4gbWF5IGJlIHVzZWQgdG8gYXV0aG9yaXpl IHRoZSBjb25uZWN0aW9uCiAgICAgIHRocm91Z2ggc29tZSBvdGhlciBtZWFucyAoc2VlIGJlbG93 KS4KCiAgICAgIE9uIGEgc3VjY2VzcywgdGhlIGNvbW1hbmQgbWF5IHRoZW4gZXhpdCB3aXRoIGEg emVybyBzdWNjZXNzIGNvZGUuCiAgICAgIEJ5IGRlZmF1bHQsIHRoZSBzZXJ2ZXIgd2lsbCB0aGVu IGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgaWRlbnRpdHkKICAgICAgc3RyaW5nIG1hdGNoZXMgdGhl IHJvbGUgdGhhdCBpcyBiZWluZyB1c2VkIChvciBtYXRjaGVzIGEgdXNlcm1hcAogICAgICBlbnRy eSwgaWYgb25lIGlzIGluIHVzZSkuCgogICBiLiBUbyBvcHRpb25hbGx5IGF1dGhvcml6ZSB0aGUg dXNlciwgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgSEJBCiAgICAgIG9wdGlvbiB0cnVzdF92YWxp ZGF0b3JfYXV0aHo9MSAoc2VlIGJlbG93KSwgdGhlIHZhbGlkYXRvciBzaW1wbHkKICAgICAgcmV0 dXJucyBhIHplcm8gZXhpdCBjb2RlIGlmIHRoZSBjbGllbnQgc2hvdWxkIGJlIGFsbG93ZWQgdG8K ICAgICAgY29ubmVjdCB3aXRoIGl0cyBwcmVzZW50ZWQgcm9sZSAod2hpY2ggY2FuIGJlIHBhc3Nl ZCB0byB0aGUKICAgICAgY29tbWFuZCB1c2luZyB0aGUgJXIgc3BlY2lmaWVyKSwgb3IgYSBub24t emVybyBjb2RlIG90aGVyd2lzZS4KCiAgICAgIFRoZSBoYXJkIHBhcnQgaXMgaW4gZGV0ZXJtaW5p bmcgd2hldGhlciB0aGUgZ2l2ZW4gdG9rZW4gdHJ1bHkKICAgICAgYXV0aG9yaXplcyB0aGUgY2xp ZW50IHRvIHVzZSB0aGUgZ2l2ZW4gcm9sZSwgd2hpY2ggbXVzdAogICAgICB1bmZvcnR1bmF0ZWx5 IGJlIGxlZnQgYXMgYW4gZXhlcmNpc2UgdG8gdGhlIHJlYWRlci4KCiAgICAgIFRoaXMgb2J2aW91 c2x5IHJlcXVpcmVzIHNvbWUgY2FyZSwgYXMgYSBwb29ybHkgaW1wbGVtZW50ZWQgdG9rZW4KICAg ICAgdmFsaWRhdG9yIG1heSBzaWxlbnRseSBvcGVuIHRoZSBlbnRpcmUgZGF0YWJhc2UgdG8gYW55 b25lIHdpdGggYQogICAgICBiZWFyZXIgdG9rZW4uIEJ1dCBpdCBtYXkgYmUgYSBtb3JlIHBvcnRh YmxlIGFwcHJvYWNoLCBzaW5jZSBPQXV0aAogICAgICBpcyBkZXNpZ25lZCBhcyBhbiBhdXRob3Jp emF0aW9uIGZyYW1ld29yaywgbm90IGFuIGF1dGhlbnRpY2F0aW9uCiAgICAgIGZyYW1ld29yay4g Rm9yIGV4YW1wbGUsIHRoZSB1c2VyJ3MgYmVhcmVyIHRva2VuIGNvdWxkIGNhcnJ5IGFuCiAgICAg ICJhbGxvd19zdXBlcnVzZXJfYWNjZXNzIiBjbGFpbSwgd2hpY2ggd291bGQgYXV0aG9yaXplIHBz ZXVkb255bW91cwogICAgICBkYXRhYmFzZSBhY2Nlc3MgYXMgYW55IHJvbGUuIEl0J3MgdGhlbiB1 cCB0byB0aGUgT0F1dGggc3lzdGVtCiAgICAgIGFkbWluaXN0cmF0b3JzIHRvIGVuc3VyZSB0aGF0 IGFsbG93X3N1cGVydXNlcl9hY2Nlc3MgaXMgZG9sZWQgb3V0CiAgICAgIG9ubHkgdG8gdGhlIHBy b3BlciB1c2Vycy4KCiAgIGMuIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgdXNlciBjYW4gYmUgc3Vj Y2Vzc2Z1bGx5IGF1dGhlbnRpY2F0ZWQgYnV0CiAgICAgIGlzbid0IGF1dGhvcml6ZWQgdG8gY29u bmVjdC4gSW4gdGhpcyBjYXNlLCB0aGUgY29tbWFuZCBtYXkgcHJpbnQKICAgICAgdGhlIGF1dGhl bnRpY2F0ZWQgSUQgYW5kIHRoZW4gZmFpbCB3aXRoIGEgbm9uLXplcm8gZXhpdCBjb2RlLgogICAg ICAoVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gc2VlIHdoYXQncyBnb2luZyBvbiBpbiB0aGUgUG9z dGdyZXMKICAgICAgbG9ncy4pCgo0LiBUb2tlbiB2YWxpZGF0b3JzIG1heSBvcHRpb25hbGx5IGxv ZyB0byBzdGRlcnIuIFRoaXMgd2lsbCBiZSBwcmludGVkCiAgIHZlcmJhdGltIGludG8gdGhlIFBv c3RncmVzIHNlcnZlciBsb2dzLgoKVGhlIG9hdXRoIG1ldGhvZCBzdXBwb3J0cyB0aGUgZm9sbG93 aW5nIEhCQSBvcHRpb25zIChidXQgbm90ZSB0aGF0IHR3bwpvZiB0aGVtIGFyZSBub3Qgb3B0aW9u YWwsIHNpbmNlIHdlIGhhdmUgbm8gd2F5IG9mIGNob29zaW5nIHNlbnNpYmxlCmRlZmF1bHRzKToK CiAgaXNzdWVyOiBSZXF1aXJlZC4gVGhlIFVSTCBvZiB0aGUgT0F1dGggaXNzdWluZyBwYXJ0eSwg d2hpY2ggdGhlIGNsaWVudAogICAgICAgICAgbXVzdCBjb250YWN0IHRvIHJlY2VpdmUgYSBiZWFy ZXIgdG9rZW4uCgogICAgICAgICAgU29tZSByZWFsLXdvcmxkIGV4YW1wbGVzIGFzIG9mIHRpbWUg b2Ygd3JpdGluZzoKICAgICAgICAgIC0gaHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tCiAgICAg ICAgICAtIGh0dHBzOi8vbG9naW4ubWljcm9zb2Z0LmNvbS9bdGVuYW50LWlkXS92Mi4wCgogIHNj b3BlOiAgUmVxdWlyZWQuIFRoZSBPQXV0aCBzY29wZShzKSByZXF1aXJlZCBmb3IgdGhlIHNlcnZl ciB0bwogICAgICAgICAgYXV0aGVudGljYXRlIGFuZC9vciBhdXRob3JpemUgdGhlIHVzZXIuIFRo aXMgaXMgaGVhdmlseQogICAgICAgICAgZGVwbG95bWVudC1zcGVjaWZpYywgYnV0IGEgc2ltcGxl IGV4YW1wbGUgaXMgIm9wZW5pZCBlbWFpbCIuCgogIG1hcDogICAgT3B0aW9uYWwuIFNwZWNpZnkg YSBzdGFuZGFyZCBQb3N0Z3JlU1FMIHVzZXIgbWFwOyB0aGlzIHdvcmtzCiAgICAgICAgICB0aGUg c2FtZSBhcyB3aXRoIG90aGVyIGF1dGggbWV0aG9kcyBzdWNoIGFzIHBlZXIuIElmIGEgbWFwIGlz CiAgICAgICAgICBub3Qgc3BlY2lmaWVkLCB0aGUgdXNlciBJRCByZXR1cm5lZCBieSB0aGUgdG9r ZW4gdmFsaWRhdG9yCiAgICAgICAgICBtdXN0IGV4YWN0bHkgbWF0Y2ggdGhlIHJvbGUgdGhhdCdz IGJlaW5nIHJlcXVlc3RlZCAoYnV0IHNlZQogICAgICAgICAgdHJ1c3RfdmFsaWRhdG9yX2F1dGh6 LCBiZWxvdykuCgogIHRydXN0X3ZhbGlkYXRvcl9hdXRoejoKICAgICAgICAgIE9wdGlvbmFsLiBX aGVuIHNldCB0byAxLCB0aGlzIGFsbG93cyB0aGUgdG9rZW4gdmFsaWRhdG9yIHRvCiAgICAgICAg ICB0YWtlIGZ1bGwgY29udHJvbCBvZiB0aGUgYXV0aG9yaXphdGlvbiBwcm9jZXNzLiBTdGFuZGFy ZCB1c2VyCiAgICAgICAgICBtYXBwaW5nIGlzIHNraXBwZWQ6IGlmIHRoZSB2YWxpZGF0b3IgY29t bWFuZCBzdWNjZWVkcywgdGhlCiAgICAgICAgICBjbGllbnQgaXMgYWxsb3dlZCB0byBjb25uZWN0 IHVuZGVyIGl0cyBkZXNpcmVkIHJvbGUgYW5kIG5vCiAgICAgICAgICBmdXJ0aGVyIGNoZWNrcyBh cmUgZG9uZS4KClVubGlrZSB0aGUgY2xpZW50LCBzZXJ2ZXJzIHN1cHBvcnQgT0F1dGggd2l0aG91 dCBuZWVkaW5nIHRvIGJlIGJ1aWx0CmFnYWluc3QgbGliaWRkYXdjIChzaW5jZSB0aGUgcmVzcG9u c2liaWxpdHkgZm9yICJzcGVha2luZyIgT0F1dGgvT0lEQwpjb3JyZWN0bHkgaXMgZGVsZWdhdGVk IGVudGlyZWx5IHRvIHRoZSBvYXV0aF92YWxpZGF0b3JfY29tbWFuZCkuCgpTZXZlcmFsIFRPRE9z OgotIHBvcnQgdG8gcGxhdGZvcm1zIG90aGVyIHRoYW4gIm1vZGVybiBMaW51eCIKLSBvdmVyaGF1 bCB0aGUgY29tbXVuaWNhdGlvbiB3aXRoIG9hdXRoX3ZhbGlkYXRvcl9jb21tYW5kLCB3aGljaCBp cwogIGN1cnJlbnRseSBhIGJhZCBoYWNrIG9uIE9wZW5QaXBlU3RyZWFtKCkKLSBpbXBsZW1lbnQg bW9yZSBzYW5pdHkgY2hlY2tzIG9uIHRoZSBPQVVUSEJFQVJFUiBtZXNzYWdlIGZvcm1hdCBhbmQK ICB0b2tlbnMgc2VudCBieSB0aGUgY2xpZW50Ci0gaW1wbGVtZW50IG1vcmUgaGVscGZ1bCBoYW5k bGluZyBvZiBIQkEgbWlzY29uZmlndXJhdGlvbnMKLSBwcm9wZXJseSBpbnRlcnBvbGF0ZSBKU09O IHdoZW4gZ2VuZXJhdGluZyBlcnJvciByZXNwb25zZXMKLSB1c2UgbG9nZGV0YWlsIGR1cmluZyBh dXRoIGZhaWx1cmVzCi0gZGVhbCB3aXRoIHJvbGUgbmFtZXMgdGhhdCBjYW4ndCBiZSBzYWZlbHkg cGFzc2VkIHRvIHN5c3RlbSgpIHdpdGhvdXQKICBzaGVsbC1lc2NhcGluZwotIGFsbG93IHBhc3Np bmcgdGhlIGNvbmZpZ3VyZWQgaXNzdWVyIHRvIHRoZSBvYXV0aF92YWxpZGF0b3JfY29tbWFuZCwg dG8KICBkZWFsIHdpdGggbXVsdGktaXNzdWVyIHNldHVwcwotIC4uLmFuZCBtb3JlLgotLS0KIHNy Yy9iYWNrZW5kL2xpYnBxL01ha2VmaWxlICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9saWJwcS9h dXRoLW9hdXRoLmMgfCA3OTcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMv YmFja2VuZC9saWJwcS9hdXRoLXNhc2wuYyAgfCAgMTAgKy0KIHNyYy9iYWNrZW5kL2xpYnBxL2F1 dGgtc2NyYW0uYyB8ICAgNCArLQogc3JjL2JhY2tlbmQvbGlicHEvYXV0aC5jICAgICAgIHwgICA3 ICsKIHNyYy9iYWNrZW5kL2xpYnBxL2hiYS5jICAgICAgICB8ICAyOSArLQogc3JjL2JhY2tlbmQv dXRpbHMvbWlzYy9ndWMuYyAgIHwgIDEyICsKIHNyYy9pbmNsdWRlL2xpYnBxL2hiYS5oICAgICAg ICB8ICAgOCArLQogc3JjL2luY2x1ZGUvbGlicHEvb2F1dGguaCAgICAgIHwgIDI0ICsKIHNyYy9p bmNsdWRlL2xpYnBxL3Nhc2wuaCAgICAgICB8ICAxMSArCiAxMCBmaWxlcyBjaGFuZ2VkLCA4ODkg aW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jh Y2tlbmQvbGlicHEvYXV0aC1vYXV0aC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUv bGlicHEvb2F1dGguaAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYnBxL01ha2VmaWxlIGIv c3JjL2JhY2tlbmQvbGlicHEvTWFrZWZpbGUKaW5kZXggNmQzODVmZDZhNC4uOThlYjJhODI0MiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbGlicHEvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQv bGlicHEvTWFrZWZpbGUKQEAgLTE1LDYgKzE1LDcgQEAgaW5jbHVkZSAkKHRvcF9idWlsZGRpcikv c3JjL01ha2VmaWxlLmdsb2JhbAogIyBiZS1mc3N0dWJzIGlzIGhlcmUgZm9yIGhpc3RvcmljYWwg cmVhc29ucywgcHJvYmFibHkgYmVsb25ncyBlbHNld2hlcmUKIAogT0JKUyA9IFwKKwlhdXRoLW9h dXRoLm8gXAogCWF1dGgtc2FzbC5vIFwKIAlhdXRoLXNjcmFtLm8gXAogCWF1dGgubyBcCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9saWJwcS9hdXRoLW9hdXRoLmMgYi9zcmMvYmFja2VuZC9saWJw cS9hdXRoLW9hdXRoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYzEy MzJhMzFhMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGgtb2F1dGgu YwpAQCAtMCwwICsxLDc5NyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogYXV0aC1vYXV0 aC5jCisgKgkgIFNlcnZlci1zaWRlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTQVNMIE9BVVRIQkVB UkVSIG1lY2hhbmlzbS4KKyAqCisgKiBTZWUgdGhlIGZvbGxvd2luZyBSRkMgZm9yIG1vcmUgZGV0 YWlsczoKKyAqIC0gUkZDIDc2Mjg6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NjI4 CisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjEsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJl Z2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9iYWNrZW5k L2xpYnBxL2F1dGgtb2F1dGguYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVk ZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+ CisKKyNpbmNsdWRlICJjb21tb24vb2F1dGgtY29tbW9uLmgiCisjaW5jbHVkZSAibGliL3N0cmlu Z2luZm8uaCIKKyNpbmNsdWRlICJsaWJwcS9hdXRoLmgiCisjaW5jbHVkZSAibGlicHEvaGJhLmgi CisjaW5jbHVkZSAibGlicHEvb2F1dGguaCIKKyNpbmNsdWRlICJsaWJwcS9zYXNsLmgiCisjaW5j bHVkZSAic3RvcmFnZS9mZC5oIgorCisvKiBHVUMgKi8KK2NoYXIgKm9hdXRoX3ZhbGlkYXRvcl9j b21tYW5kOworCitzdGF0aWMgdm9pZCAgb2F1dGhfZ2V0X21lY2hhbmlzbXMoUG9ydCAqcG9ydCwg U3RyaW5nSW5mbyBidWYpOworc3RhdGljIHZvaWQgKm9hdXRoX2luaXQoUG9ydCAqcG9ydCwgY29u c3QgY2hhciAqc2VsZWN0ZWRfbWVjaCwgY29uc3QgY2hhciAqc2hhZG93X3Bhc3MpOworc3RhdGlj IGludCAgIG9hdXRoX2V4Y2hhbmdlKHZvaWQgKm9wYXEsIGNvbnN0IGNoYXIgKmlucHV0LCBpbnQg aW5wdXRsZW4sCisJCQkJCQkJY2hhciAqKm91dHB1dCwgaW50ICpvdXRwdXRsZW4sIGNvbnN0IGNo YXIgKipsb2dkZXRhaWwpOworCisvKiBNZWNoYW5pc20gZGVjbGFyYXRpb24gKi8KK2NvbnN0IHBn X2JlX3Nhc2xfbWVjaCBwZ19iZV9vYXV0aF9tZWNoID0geworCW9hdXRoX2dldF9tZWNoYW5pc21z LAorCW9hdXRoX2luaXQsCisJb2F1dGhfZXhjaGFuZ2UsCisKKwlQR19NQVhfQVVUSF9UT0tFTl9M RU5HVEgsCit9OworCisKK3R5cGVkZWYgZW51bQoreworCU9BVVRIX1NUQVRFX0lOSVQgPSAwLAor CU9BVVRIX1NUQVRFX0VSUk9SLAorCU9BVVRIX1NUQVRFX0ZJTklTSEVELAorfSBvYXV0aF9zdGF0 ZTsKKworc3RydWN0IG9hdXRoX2N0eAoreworCW9hdXRoX3N0YXRlCXN0YXRlOworCVBvcnQJICAg KnBvcnQ7CisJY29uc3QgY2hhciAqaXNzdWVyOworCWNvbnN0IGNoYXIgKnNjb3BlOworfTsKKwor c3RhdGljIGNoYXIgKnNhbml0aXplX2NoYXIoY2hhciBjKTsKK3N0YXRpYyBjaGFyICpwYXJzZV9r dnBhaXJzX2Zvcl9hdXRoKGNoYXIgKippbnB1dCk7CitzdGF0aWMgdm9pZCBnZW5lcmF0ZV9lcnJv cl9yZXNwb25zZShzdHJ1Y3Qgb2F1dGhfY3R4ICpjdHgsIGNoYXIgKipvdXRwdXQsIGludCAqb3V0 cHV0bGVuKTsKK3N0YXRpYyBib29sIHZhbGlkYXRlKFBvcnQgKnBvcnQsIGNvbnN0IGNoYXIgKmF1 dGgsIGNvbnN0IGNoYXIgKipsb2dkZXRhaWwpOworc3RhdGljIGJvb2wgcnVuX3ZhbGlkYXRvcl9j b21tYW5kKFBvcnQgKnBvcnQsIGNvbnN0IGNoYXIgKnRva2VuKTsKK3N0YXRpYyBib29sIGNoZWNr X2V4aXQoRklMRSAqKmZoLCBjb25zdCBjaGFyICpjb21tYW5kKTsKK3N0YXRpYyBib29sIHVuc2V0 X2Nsb2V4ZWMoaW50IGZkKTsKK3N0YXRpYyBib29sIHVzZXJuYW1lX29rX2Zvcl9zaGVsbChjb25z dCBjaGFyICp1c2VybmFtZSk7CisKKyNkZWZpbmUgS1ZTRVAgMHgwMQorI2RlZmluZSBBVVRIX0tF WSAiYXV0aCIKKyNkZWZpbmUgQkVBUkVSX1NDSEVNRSAiQmVhcmVyICIKKworc3RhdGljIHZvaWQK K29hdXRoX2dldF9tZWNoYW5pc21zKFBvcnQgKnBvcnQsIFN0cmluZ0luZm8gYnVmKQoreworCS8q IE9ubHkgT0FVVEhCRUFSRVIgaXMgc3VwcG9ydGVkLiAqLworCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoYnVmLCBPQVVUSEJFQVJFUl9OQU1FKTsKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICdc MCcpOworfQorCitzdGF0aWMgdm9pZCAqCitvYXV0aF9pbml0KFBvcnQgKnBvcnQsIGNvbnN0IGNo YXIgKnNlbGVjdGVkX21lY2gsIGNvbnN0IGNoYXIgKnNoYWRvd19wYXNzKQoreworCXN0cnVjdCBv YXV0aF9jdHggKmN0eDsKKworCWlmIChzdHJjbXAoc2VsZWN0ZWRfbWVjaCwgT0FVVEhCRUFSRVJf TkFNRSkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9W SU9MQVRJT04pLAorCQkJCSBlcnJtc2coImNsaWVudCBzZWxlY3RlZCBhbiBpbnZhbGlkIFNBU0wg YXV0aGVudGljYXRpb24gbWVjaGFuaXNtIikpKTsKKworCWN0eCA9IHBhbGxvYzAoc2l6ZW9mKCpj dHgpKTsKKworCWN0eC0+c3RhdGUgPSBPQVVUSF9TVEFURV9JTklUOworCWN0eC0+cG9ydCA9IHBv cnQ7CisKKwlBc3NlcnQocG9ydC0+aGJhKTsKKwljdHgtPmlzc3VlciA9IHBvcnQtPmhiYS0+b2F1 dGhfaXNzdWVyOworCWN0eC0+c2NvcGUgPSBwb3J0LT5oYmEtPm9hdXRoX3Njb3BlOworCisJcmV0 dXJuIGN0eDsKK30KKworc3RhdGljIGludAorb2F1dGhfZXhjaGFuZ2Uodm9pZCAqb3BhcSwgY29u c3QgY2hhciAqaW5wdXQsIGludCBpbnB1dGxlbiwKKwkJCSAgIGNoYXIgKipvdXRwdXQsIGludCAq b3V0cHV0bGVuLCBjb25zdCBjaGFyICoqbG9nZGV0YWlsKQoreworCWNoYXIgICAqcDsKKwljaGFy CWNiaW5kX2ZsYWc7CisJY2hhciAgICphdXRoOworCisJc3RydWN0IG9hdXRoX2N0eCAqY3R4ID0g b3BhcTsKKworCSpvdXRwdXQgPSBOVUxMOworCSpvdXRwdXRsZW4gPSAtMTsKKworCS8qCisJICog SWYgdGhlIGNsaWVudCBkaWRuJ3QgaW5jbHVkZSBhbiAiSW5pdGlhbCBDbGllbnQgUmVzcG9uc2Ui IGluIHRoZQorCSAqIFNBU0xJbml0aWFsUmVzcG9uc2UgbWVzc2FnZSwgc2VuZCBhbiBlbXB0eSBj aGFsbGVuZ2UsIHRvIHdoaWNoIHRoZQorCSAqIGNsaWVudCB3aWxsIHJlc3BvbmQgd2l0aCB0aGUg c2FtZSBkYXRhIHRoYXQgdXN1YWxseSBjb21lcyBpbiB0aGUKKwkgKiBJbml0aWFsIENsaWVudCBS ZXNwb25zZS4KKwkgKi8KKwlpZiAoaW5wdXQgPT0gTlVMTCkKKwl7CisJCUFzc2VydChjdHgtPnN0 YXRlID09IE9BVVRIX1NUQVRFX0lOSVQpOworCisJCSpvdXRwdXQgPSBwc3RyZHVwKCIiKTsKKwkJ Km91dHB1dGxlbiA9IDA7CisJCXJldHVybiBQR19TQVNMX0VYQ0hBTkdFX0NPTlRJTlVFOworCX0K KworCS8qCisJICogQ2hlY2sgdGhhdCB0aGUgaW5wdXQgbGVuZ3RoIGFncmVlcyB3aXRoIHRoZSBz dHJpbmcgbGVuZ3RoIG9mIHRoZSBpbnB1dC4KKwkgKi8KKwlpZiAoaW5wdXRsZW4gPT0gMCkKKwkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiks CisJCQkJIGVycm1zZygibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiKSwKKwkJCQkgZXJy ZGV0YWlsKCJUaGUgbWVzc2FnZSBpcyBlbXB0eS4iKSkpOworCWlmIChpbnB1dGxlbiAhPSBzdHJs ZW4oaW5wdXQpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9D T0xfVklPTEFUSU9OKSwKKwkJCQkgZXJybXNnKCJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2Fn ZSIpLAorCQkJCSBlcnJkZXRhaWwoIk1lc3NhZ2UgbGVuZ3RoIGRvZXMgbm90IG1hdGNoIGlucHV0 IGxlbmd0aC4iKSkpOworCisJc3dpdGNoIChjdHgtPnN0YXRlKQorCXsKKwkJY2FzZSBPQVVUSF9T VEFURV9JTklUOgorCQkJLyogSGFuZGxlIHRoaXMgY2FzZSBiZWxvdy4gKi8KKwkJCWJyZWFrOwor CisJCWNhc2UgT0FVVEhfU1RBVEVfRVJST1I6CisJCQkvKgorCQkJICogT25seSBvbmUgcmVzcG9u c2UgaXMgdmFsaWQgZm9yIHRoZSBjbGllbnQgZHVyaW5nIGF1dGhlbnRpY2F0aW9uCisJCQkgKiBm YWlsdXJlOiBhIHNpbmdsZSBrdnNlcC4KKwkJCSAqLworCQkJaWYgKGlucHV0bGVuICE9IDEgfHwg KmlucHV0ICE9IEtWU0VQKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJD T0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCisJCQkJCQkgZXJybXNnKCJtYWxmb3JtZWQgT0FVVEhC RUFSRVIgbWVzc2FnZSIpLAorCQkJCQkJIGVycmRldGFpbCgiQ2xpZW50IGRpZCBub3Qgc2VuZCBh IGt2c2VwIHJlc3BvbnNlLiIpKSk7CisKKwkJCS8qIFRoZSAoZmFpbGVkKSBoYW5kc2hha2UgaXMg bm93IGNvbXBsZXRlLiAqLworCQkJY3R4LT5zdGF0ZSA9IE9BVVRIX1NUQVRFX0ZJTklTSEVEOwor CQkJcmV0dXJuIFBHX1NBU0xfRVhDSEFOR0VfRkFJTFVSRTsKKworCQlkZWZhdWx0OgorCQkJZWxv ZyhFUlJPUiwgImludmFsaWQgT0FVVEhCRUFSRVIgZXhjaGFuZ2Ugc3RhdGUiKTsKKwkJCXJldHVy biBQR19TQVNMX0VYQ0hBTkdFX0ZBSUxVUkU7CisJfQorCisJLyogSGFuZGxlIHRoZSBjbGllbnQn cyBpbml0aWFsIG1lc3NhZ2UuICovCisJcCA9IHBzdHJkdXAoaW5wdXQpOworCisJLyoKKwkgKiBP QVVUSEJFQVJFUiBkb2VzIG5vdCBjdXJyZW50bHkgZGVmaW5lIGEgY2hhbm5lbCBiaW5kaW5nIChz byB0aGVyZSBpcyBubworCSAqIE9BVVRIQkVBUkVSLVBMVVMsIGFuZCB3ZSBkbyBub3QgYWNjZXB0 IGEgJ3AnIHNwZWNpZmllcikuIFdlIGFjY2VwdCBhICd5JworCSAqIHNwZWNpZmllciBwdXJlbHkg Zm9yIHRoZSByZW1vdGUgY2hhbmNlIHRoYXQgYSBmdXR1cmUgc3BlY2lmaWNhdGlvbiBjb3VsZAor CSAqIGRlZmluZSBvbmU7IHRoZW4gZnV0dXJlIGNsaWVudHMgY2FuIHN0aWxsIGludGVyb3BlcmF0 ZSB3aXRoIHRoaXMgc2VydmVyCisJICogaW1wbGVtZW50YXRpb24uICduJyBpcyB0aGUgZXhwZWN0 ZWQgY2FzZS4KKwkgKi8KKwljYmluZF9mbGFnID0gKnA7CisJc3dpdGNoIChjYmluZF9mbGFnKQor CXsKKwkJY2FzZSAncCc6CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RF X1BST1RPQ09MX1ZJT0xBVElPTiksCisJCQkJCSBlcnJtc2coIm1hbGZvcm1lZCBPQVVUSEJFQVJF UiBtZXNzYWdlIiksCisJCQkJCSBlcnJkZXRhaWwoIlRoZSBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9y dCBjaGFubmVsIGJpbmRpbmcgZm9yIE9BdXRoLCBidXQgdGhlIGNsaWVudCBtZXNzYWdlIGluY2x1 ZGVzIGNoYW5uZWwgYmluZGluZyBkYXRhLiIpKSk7CisJCQlicmVhazsKKworCQljYXNlICd5Jzog LyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgJ24nOgorCQkJcCsrOworCQkJaWYgKCpwICE9ICcs JykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9W SU9MQVRJT04pLAorCQkJCQkJIGVycm1zZygibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2Ui KSwKKwkJCQkJCSBlcnJkZXRhaWwoIkNvbW1hIGV4cGVjdGVkLCBidXQgZm91bmQgY2hhcmFjdGVy ICVzLiIsCisJCQkJCQkJCSAgIHNhbml0aXplX2NoYXIoKnApKSkpOworCQkJcCsrOworCQkJYnJl YWs7CisKKwkJZGVmYXVsdDoKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNP REVfUFJPVE9DT0xfVklPTEFUSU9OKSwKKwkJCQkJIGVycm1zZygibWFsZm9ybWVkIE9BVVRIQkVB UkVSIG1lc3NhZ2UiKSwKKwkJCQkJIGVycmRldGFpbCgiVW5leHBlY3RlZCBjaGFubmVsLWJpbmRp bmcgZmxhZyAlcy4iLAorCQkJCQkJCSAgIHNhbml0aXplX2NoYXIoY2JpbmRfZmxhZykpKSk7CisJ fQorCisJLyoKKwkgKiBGb3JiaWQgb3B0aW9uYWwgYXV0aHppZCAoYXV0aG9yaXphdGlvbiBpZGVu dGl0eSkuICBXZSBkb24ndCBzdXBwb3J0IGl0LgorCSAqLworCWlmICgqcCA9PSAnYScpCisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQp LAorCQkJCSBlcnJtc2coImNsaWVudCB1c2VzIGF1dGhvcml6YXRpb24gaWRlbnRpdHksIGJ1dCBp dCBpcyBub3Qgc3VwcG9ydGVkIikpKTsKKwlpZiAoKnAgIT0gJywnKQorCQllcmVwb3J0KEVSUk9S LAorCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKKwkJCQkgZXJybXNn KCJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIpLAorCQkJCSBlcnJkZXRhaWwoIlVuZXhw ZWN0ZWQgYXR0cmlidXRlICVzIGluIGNsaWVudC1maXJzdC1tZXNzYWdlLiIsCisJCQkJCQkgICBz YW5pdGl6ZV9jaGFyKCpwKSkpKTsKKwlwKys7CisKKwkvKiBBbGwgcmVtYWluaW5nIGZpZWxkcyBh cmUgc2VwYXJhdGVkIGJ5IHRoZSBSRkMncyBrdnNlcCAoXHgwMSkuICovCisJaWYgKCpwICE9IEtW U0VQKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklP TEFUSU9OKSwKKwkJCQkgZXJybXNnKCJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIpLAor CQkJCSBlcnJkZXRhaWwoIktleS12YWx1ZSBzZXBhcmF0b3IgZXhwZWN0ZWQsIGJ1dCBmb3VuZCBj aGFyYWN0ZXIgJXMuIiwKKwkJCQkJCSAgIHNhbml0aXplX2NoYXIoKnApKSkpOworCXArKzsKKwor CWF1dGggPSBwYXJzZV9rdnBhaXJzX2Zvcl9hdXRoKCZwKTsKKwlpZiAoIWF1dGgpCisJCWVyZXBv cnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAorCQkJ CSBlcnJtc2coIm1hbGZvcm1lZCBPQVVUSEJFQVJFUiBtZXNzYWdlIiksCisJCQkJIGVycmRldGFp bCgiTWVzc2FnZSBkb2VzIG5vdCBjb250YWluIGFuIGF1dGggdmFsdWUuIikpKTsKKworCS8qIFdl IHNob3VsZCBiZSBhdCB0aGUgZW5kIG9mIG91ciBtZXNzYWdlLiAqLworCWlmICgqcCkKKwkJZXJl cG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCisJ CQkJIGVycm1zZygibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiKSwKKwkJCQkgZXJyZGV0 YWlsKCJNZXNzYWdlIGNvbnRhaW5zIGFkZGl0aW9uYWwgZGF0YSBhZnRlciB0aGUgZmluYWwgdGVy bWluYXRvci4iKSkpOworCisJaWYgKCF2YWxpZGF0ZShjdHgtPnBvcnQsIGF1dGgsIGxvZ2RldGFp bCkpCisJeworCQlnZW5lcmF0ZV9lcnJvcl9yZXNwb25zZShjdHgsIG91dHB1dCwgb3V0cHV0bGVu KTsKKworCQljdHgtPnN0YXRlID0gT0FVVEhfU1RBVEVfRVJST1I7CisJCXJldHVybiBQR19TQVNM X0VYQ0hBTkdFX0NPTlRJTlVFOworCX0KKworCWN0eC0+c3RhdGUgPSBPQVVUSF9TVEFURV9GSU5J U0hFRDsKKwlyZXR1cm4gUEdfU0FTTF9FWENIQU5HRV9TVUNDRVNTOworfQorCisvKgorICogQ29u dmVydCBhbiBhcmJpdHJhcnkgYnl0ZSB0byBwcmludGFibGUgZm9ybS4gIEZvciBlcnJvciBtZXNz YWdlcy4KKyAqCisgKiBJZiBpdCdzIGEgcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlciwgcHJpbnQg aXQgYXMgYSBzaW5nbGUgY2hhcmFjdGVyLgorICogb3RoZXJ3aXNlLCBwcmludCBpdCBpbiBoZXgu CisgKgorICogVGhlIHJldHVybmVkIHBvaW50ZXIgcG9pbnRzIHRvIGEgc3RhdGljIGJ1ZmZlci4K KyAqLworc3RhdGljIGNoYXIgKgorc2FuaXRpemVfY2hhcihjaGFyIGMpCit7CisJc3RhdGljIGNo YXIgYnVmWzVdOworCisJaWYgKGMgPj0gMHgyMSAmJiBjIDw9IDB4N0UpCisJCXNucHJpbnRmKGJ1 Ziwgc2l6ZW9mKGJ1ZiksICInJWMnIiwgYyk7CisJZWxzZQorCQlzbnByaW50ZihidWYsIHNpemVv ZihidWYpLCAiMHglMDJ4IiwgKHVuc2lnbmVkIGNoYXIpIGMpOworCXJldHVybiBidWY7Cit9CisK Ky8qCisgKiBDb25zdW1lcyBhbGwga3ZwYWlycyBpbiBhbiBPQVVUSEJFQVJFUiBleGNoYW5nZSBt ZXNzYWdlLiBJZiB0aGUgImF1dGgiIGtleSBpcworICogZm91bmQsIGl0cyB2YWx1ZSBpcyByZXR1 cm5lZC4KKyAqLworc3RhdGljIGNoYXIgKgorcGFyc2Vfa3ZwYWlyc19mb3JfYXV0aChjaGFyICoq aW5wdXQpCit7CisJY2hhciAgICpwb3MgPSAqaW5wdXQ7CisJY2hhciAgICphdXRoID0gTlVMTDsK KworCS8qCisJICogVGhlIHJlbGV2YW50IEFCTkYsIGZyb20gU2VjLiAzLjE6CisJICoKKwkgKiAg ICAga3ZzZXAgICAgICAgICAgPSAleDAxCisJICogICAgIGtleSAgICAgICAgICAgID0gMSooQUxQ SEEpCisJICogICAgIHZhbHVlICAgICAgICAgID0gKihWQ0hBUiAvIFNQIC8gSFRBQiAvIENSIC8g TEYgKQorCSAqICAgICBrdnBhaXIgICAgICAgICA9IGtleSAiPSIgdmFsdWUga3ZzZXAKKwkgKiAg IDs7Z3MyLWhlYWRlciAgICAgPSBTZWUgUkZDIDU4MDEKKwkgKiAgICAgY2xpZW50LXJlc3AgICAg PSAoZ3MyLWhlYWRlciBrdnNlcCAqa3ZwYWlyIGt2c2VwKSAvIGt2c2VwCisJICoKKwkgKiBCeSB0 aGUgdGltZSB3ZSByZWFjaCB0aGlzIGNvZGUsIHRoZSBnczItaGVhZGVyIGFuZCBpbml0aWFsIGt2 c2VwIGhhdmUKKwkgKiBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkLiBXZSBzdGFydCBhdCB0aGUgYmVn aW5uaW5nIG9mIHRoZSBmaXJzdCBrdnBhaXIuCisJICovCisKKwl3aGlsZSAoKnBvcykKKwl7CisJ CWNoYXIgICAqZW5kOworCQljaGFyICAgKnNlcDsKKwkJY2hhciAgICprZXk7CisJCWNoYXIgICAq dmFsdWU7CisKKwkJLyoKKwkJICogRmluZCB0aGUgZW5kIG9mIHRoaXMga3ZwYWlyLiBOb3RlIHRo YXQgaW5wdXQgaXMgbnVsbC10ZXJtaW5hdGVkIGJ5CisJCSAqIHRoZSBTQVNMIGNvZGUsIHNvIHRo ZSBzdHJjaHIoKSBpcyBib3VuZGVkLgorCQkgKi8KKwkJZW5kID0gc3RyY2hyKHBvcywgS1ZTRVAp OworCQlpZiAoIWVuZCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVf UFJPVE9DT0xfVklPTEFUSU9OKSwKKwkJCQkJIGVycm1zZygibWFsZm9ybWVkIE9BVVRIQkVBUkVS IG1lc3NhZ2UiKSwKKwkJCQkJIGVycmRldGFpbCgiTWVzc2FnZSBjb250YWlucyBhbiB1bnRlcm1p bmF0ZWQga2V5L3ZhbHVlIHBhaXIuIikpKTsKKwkJKmVuZCA9ICdcMCc7CisKKwkJaWYgKHBvcyA9 PSBlbmQpCisJCXsKKwkJCS8qIEVtcHR5IGt2cGFpciwgc2lnbmlmeWluZyB0aGUgZW5kIG9mIHRo ZSBsaXN0LiAqLworCQkJKmlucHV0ID0gcG9zICsgMTsKKwkJCXJldHVybiBhdXRoOworCQl9CisK KwkJLyoKKwkJICogRmluZCB0aGUgZW5kIG9mIHRoZSBrZXkgbmFtZS4KKwkJICoKKwkJICogVE9E TyBmdXJ0aGVyIHZhbGlkYXRlIHRoZSBrZXkvdmFsdWUgZ3JhbW1hcj8gZW1wdHkga2V5cywgYmFk IGNoYXJzLi4uCisJCSAqLworCQlzZXAgPSBzdHJjaHIocG9zLCAnPScpOworCQlpZiAoIXNlcCkK KwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFU SU9OKSwKKwkJCQkJIGVycm1zZygibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiKSwKKwkJ CQkJIGVycmRldGFpbCgiTWVzc2FnZSBjb250YWlucyBhIGtleSB3aXRob3V0IGEgdmFsdWUuIikp KTsKKwkJKnNlcCA9ICdcMCc7CisKKwkJLyogQm90aCBrZXkgYW5kIHZhbHVlIGFyZSBub3cgc2Fm ZWx5IHRlcm1pbmF0ZWQuICovCisJCWtleSA9IHBvczsKKwkJdmFsdWUgPSBzZXAgKyAxOworCisJ CWlmICghc3RyY21wKGtleSwgQVVUSF9LRVkpKQorCQl7CisJCQlpZiAoYXV0aCkKKwkJCQllcmVw b3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAor CQkJCQkJIGVycm1zZygibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiKSwKKwkJCQkJCSBl cnJkZXRhaWwoIk1lc3NhZ2UgY29udGFpbnMgbXVsdGlwbGUgYXV0aCB2YWx1ZXMuIikpKTsKKwor CQkJYXV0aCA9IHZhbHVlOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIFRoZSBSRkMg YWxzbyBkZWZpbmVzIHRoZSBob3N0IGFuZCBwb3J0IGtleXMsIGJ1dCB0aGV5IGFyZSBub3QKKwkJ CSAqIHJlcXVpcmVkIGZvciBPQVVUSEJFQVJFUiBhbmQgd2UgZG8gbm90IHVzZSB0aGVtLiBBbHNv LCBwZXIKKwkJCSAqIFNlYy4gMy4xLCBhbnkga2V5L3ZhbHVlIHBhaXJzIHdlIGRvbid0IHJlY29n bml6ZSBtdXN0IGJlIGlnbm9yZWQuCisJCQkgKi8KKwkJfQorCisJCS8qIE1vdmUgdG8gdGhlIG5l eHQgcGFpci4gKi8KKwkJcG9zID0gZW5kICsgMTsKKwl9CisKKwllcmVwb3J0KEVSUk9SLAorCQkJ KGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAorCQkJIGVycm1zZygibWFsZm9y bWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiKSwKKwkJCSBlcnJkZXRhaWwoIk1lc3NhZ2UgZGlkIG5v dCBjb250YWluIGEgZmluYWwgdGVybWluYXRvci4iKSkpOworCisJcmV0dXJuIE5VTEw7IC8qIHVu cmVhY2hhYmxlICovCit9CisKK3N0YXRpYyB2b2lkCitnZW5lcmF0ZV9lcnJvcl9yZXNwb25zZShz dHJ1Y3Qgb2F1dGhfY3R4ICpjdHgsIGNoYXIgKipvdXRwdXQsIGludCAqb3V0cHV0bGVuKQorewor CVN0cmluZ0luZm9EYXRhCWJ1ZjsKKworCS8qCisJICogVGhlIGFkbWluIG5lZWRzIHRvIHNldCBh biBpc3N1ZXIgYW5kIHNjb3BlIGZvciBPQXV0aCB0byB3b3JrLiBUaGVyZSdzIG5vdAorCSAqIHJl YWxseSBhIHdheSB0byBoaWRlIHRoaXMgZnJvbSB0aGUgdXNlciwgZWl0aGVyLCBiZWNhdXNlIHdl IGNhbid0IGNob29zZQorCSAqIGEgImRlZmF1bHQiIGlzc3Vlciwgc28gYmUgaG9uZXN0IGluIHRo ZSBmYWlsdXJlIG1lc3NhZ2UuCisJICoKKwkgKiBUT0RPOiBzZWUgaWYgdGhlcmUncyBhIGJldHRl ciBwbGFjZSB0byBmYWlsLCBlYXJsaWVyIHRoYW4gdGhpcy4KKwkgKi8KKwlpZiAoIWN0eC0+aXNz dWVyIHx8ICFjdHgtPnNjb3BlKQorCQllcmVwb3J0KEZBVEFMLAorCQkJCShlcnJjb2RlKEVSUkNP REVfSU5URVJOQUxfRVJST1IpLAorCQkJCSBlcnJtc2coIk9BdXRoIGlzIG5vdCBwcm9wZXJseSBj b25maWd1cmVkIGZvciB0aGlzIHVzZXIiKSwKKwkJCQkgZXJyZGV0YWlsX2xvZygiVGhlIGlzc3Vl ciBhbmQgc2NvcGUgcGFyYW1ldGVycyBtdXN0IGJlIHNldCBpbiBwZ19oYmEuY29uZi4iKSkpOwor CisKKwlpbml0U3RyaW5nSW5mbygmYnVmKTsKKworCS8qCisJICogVE9ETzogSlNPTiBlc2NhcGlu ZworCSAqLworCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwKKwkJInsgIgorCQkJIlwic3RhdHVzXCI6 IFwiaW52YWxpZF90b2tlblwiLCAiCisJCQkiXCJvcGVuaWQtY29uZmlndXJhdGlvblwiOiBcIiVz Ly53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uXCIsIgorCQkJIlwic2NvcGVcIjogXCIl c1wiICIKKwkJIn0iLAorCQljdHgtPmlzc3VlciwgY3R4LT5zY29wZSk7CisKKwkqb3V0cHV0ID0g YnVmLmRhdGE7CisJKm91dHB1dGxlbiA9IGJ1Zi5sZW47Cit9CisKK3N0YXRpYyBib29sCit2YWxp ZGF0ZShQb3J0ICpwb3J0LCBjb25zdCBjaGFyICphdXRoLCBjb25zdCBjaGFyICoqbG9nZGV0YWls KQoreworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYjY0X3NldCA9ICJhYmNkZWZnaGlqa2xt bm9wcXJzdHV2d3h5eiIKKwkJCQkJCQkJCQkiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCisJ CQkJCQkJCQkJIjAxMjM0NTY3ODktLl9+Ky8iOworCisJY29uc3QgY2hhciAqdG9rZW47CisJc2l6 ZV90CQlzcGFuOworCWludAkJCXJldDsKKworCS8qIFRPRE86IGhhbmRsZSBsb2dkZXRhaWwgd2hl biB0aGUgdGVzdCBmcmFtZXdvcmsgY2FuIGNoZWNrIGl0ICovCisKKwkvKgorCSAqIE9ubHkgQmVh cmVyIHRva2VucyBhcmUgYWNjZXB0ZWQuIFRoZSBBQk5GIGlzIGRlZmluZWQgaW4gUkZDIDY3NTAs IFNlYy4KKwkgKiAyLjE6CisJICoKKwkgKiAgICAgIGI2NHRva2VuICAgID0gMSooIEFMUEhBIC8g RElHSVQgLworCSAqICAgICAgICAgICAgICAgICAgICAgICAgIi0iIC8gIi4iIC8gIl8iIC8gIn4i IC8gIisiIC8gIi8iICkgKiI9IgorCSAqICAgICAgY3JlZGVudGlhbHMgPSAiQmVhcmVyIiAxKlNQ IGI2NHRva2VuCisJICoKKwkgKiBUaGUgImNyZWRlbnRpYWxzIiBjb25zdHJ1Y3Rpb24gaXMgd2hh dCB3ZSByZWNlaXZlIGluIG91ciBhdXRoIHZhbHVlLgorCSAqCisJICogU2luY2UgdGhhdCBzcGVj IGlzIHN1Ym9yZGluYXRlIHRvIEhUVFAgKGkuZS4gdGhlIEhUVFAgQXV0aG9yaXphdGlvbgorCSAq IGhlYWRlciBmb3JtYXQ7IFJGQyA3MjM1IFNlYy4gMiksIHRoZSAiQmVhcmVyIiBzY2hlbWUgc3Ry aW5nIG11c3QgYmUKKwkgKiBjb21wYXJlZCBjYXNlLWluc2Vuc2l0aXZlbHkuIChUaGlzIGlzIG5v dCBtZW50aW9uZWQgaW4gUkZDIDY3NTAsIGJ1dCBpdCdzCisJICogcG9pbnRlZCBvdXQgaW4gUkZD IDc2MjggU2VjLiA0LikKKwkgKgorCSAqIFRPRE86IGhhbmRsZSB0aGUgQXV0aG9yaXphdGlvbiBz cGVjLCBSRkMgNzIzNSBTZWMuIDIuMS4KKwkgKi8KKwlpZiAoc3RybmNhc2VjbXAoYXV0aCwgQkVB UkVSX1NDSEVNRSwgc3RybGVuKEJFQVJFUl9TQ0hFTUUpKSkKKwkJcmV0dXJuIGZhbHNlOworCisJ LyogUHVsbCB0aGUgYmVhcmVyIHRva2VuIG91dCBvZiB0aGUgYXV0aCB2YWx1ZS4gKi8KKwl0b2tl biA9IGF1dGggKyBzdHJsZW4oQkVBUkVSX1NDSEVNRSk7CisKKwkvKiBTd2FsbG93IGFueSBhZGRp dGlvbmFsIHNwYWNlcy4gKi8KKwl3aGlsZSAoKnRva2VuID09ICcgJykKKwkJdG9rZW4rKzsKKwor CS8qCisJICogQmVmb3JlIGludm9raW5nIHRoZSB2YWxpZGF0b3IgY29tbWFuZCwgc2FuaXR5LWNo ZWNrIHRoZSB0b2tlbiBmb3JtYXQgdG8KKwkgKiBhdm9pZCBhbnkgaW5qZWN0aW9uIGF0dGFja3Mg bGF0ZXIgaW4gdGhlIGNoYWluLiBJbnZhbGlkIGZvcm1hdHMgYXJlCisJICogdGVjaG5pY2FsbHkg YSBwcm90b2NvbCB2aW9sYXRpb24sIGJ1dCBkb24ndCByZWZsZWN0IGFueSBpbmZvcm1hdGlvbiBh Ym91dAorCSAqIHRoZSBzZW5zaXRpdmUgQmVhcmVyIHRva2VuIGJhY2sgdG8gdGhlIGNsaWVudDsg bG9nIGF0IENPTU1FUlJPUiBpbnN0ZWFkLgorCSAqLworCisJLyogVG9rZW5zIG11c3Qgbm90IGJl IGVtcHR5LiAqLworCWlmICghKnRva2VuKQorCXsKKwkJZXJlcG9ydChDT01NRVJST1IsCisJCQkJ KGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAorCQkJCSBlcnJtc2coIm1hbGZv cm1lZCBPQVVUSEJFQVJFUiBtZXNzYWdlIiksCisJCQkJIGVycmRldGFpbCgiQmVhcmVyIHRva2Vu IGlzIGVtcHR5LiIpKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKgorCSAqIE1ha2Ugc3Vy ZSB0aGUgdG9rZW4gY29udGFpbnMgb25seSBhbGxvd2VkIGNoYXJhY3RlcnMuIFRva2VucyBtYXkg ZW5kIHdpdGgKKwkgKiBhbnkgbnVtYmVyIG9mICc9JyBjaGFyYWN0ZXJzLgorCSAqLworCXNwYW4g PSBzdHJzcG4odG9rZW4sIGI2NF9zZXQpOworCXdoaWxlICh0b2tlbltzcGFuXSA9PSAnPScpCisJ CXNwYW4rKzsKKworCWlmICh0b2tlbltzcGFuXSAhPSAnXDAnKQorCXsKKwkJLyoKKwkJICogVGhp cyBlcnJvciBtZXNzYWdlIGNvdWxkIGJlIG1vcmUgaGVscGZ1bCBieSBwcmludGluZyB0aGUgcHJv YmxlbWF0aWMKKwkJICogY2hhcmFjdGVyKHMpLCBidXQgdGhhdCdkIGJlIGEgYml0IGxpa2UgcHJp bnRpbmcgYSBwaWVjZSBvZiBzb21lb25lJ3MKKwkJICogcGFzc3dvcmQgaW50byB0aGUgbG9ncy4K KwkJICovCisJCWVyZXBvcnQoQ09NTUVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9D T0xfVklPTEFUSU9OKSwKKwkJCQkgZXJybXNnKCJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2Fn ZSIpLAorCQkJCSBlcnJkZXRhaWwoIkJlYXJlciB0b2tlbiBpcyBub3QgaW4gdGhlIGNvcnJlY3Qg Zm9ybWF0LiIpKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBIYXZlIHRoZSB2YWxpZGF0 b3IgY2hlY2sgdGhlIHRva2VuLiAqLworCWlmICghcnVuX3ZhbGlkYXRvcl9jb21tYW5kKHBvcnQs IHRva2VuKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHBvcnQtPmhiYS0+b2F1dGhfc2tpcF91 c2VybWFwKQorCXsKKwkJLyoKKwkJICogSWYgdGhlIHZhbGlkYXRvciBpcyBvdXIgYXV0aG9yaXph dGlvbiBhdXRob3JpdHksIHdlJ3JlIGRvbmUuCisJCSAqIEF1dGhlbnRpY2F0aW9uIG1heSBvciBt YXkgbm90IGhhdmUgYmVlbiBwZXJmb3JtZWQgZGVwZW5kaW5nIG9uIHRoZQorCQkgKiB2YWxpZGF0 b3IgaW1wbGVtZW50YXRpb247IGFsbCB0aGF0IG1hdHRlcnMgaXMgdGhhdCB0aGUgdmFsaWRhdG9y IHNheXMKKwkJICogdGhlIHVzZXIgY2FuIGxvZyBpbiB3aXRoIHRoZSB0YXJnZXQgcm9sZS4KKwkJ ICovCisJCXJldHVybiB0cnVlOworCX0KKworCS8qIE1ha2Ugc3VyZSB0aGUgdmFsaWRhdG9yIGF1 dGhlbnRpY2F0ZWQgdGhlIHVzZXIuICovCisJaWYgKCFwb3J0LT5hdXRobl9pZCkKKwl7CisJCS8q IFRPRE86IHVzZSBsb2dkZXRhaWw7IHJlZHVjZSBtZXNzYWdlIGR1cGxpY2F0aW9uICovCisJCWVy ZXBvcnQoTE9HLAorCQkJCShlcnJtc2coIk9BdXRoIGJlYXJlciBhdXRoZW50aWNhdGlvbiBmYWls ZWQgZm9yIHVzZXIgXCIlc1wiOiB2YWxpZGF0b3IgcHJvdmlkZWQgbm8gaWRlbnRpdHkiLAorCQkJ CQkJcG9ydC0+dXNlcl9uYW1lKSkpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogRmluYWxs eSwgY2hlY2sgdGhlIHVzZXIgbWFwLiAqLworCXJldCA9IGNoZWNrX3VzZXJtYXAocG9ydC0+aGJh LT51c2VybWFwLCBwb3J0LT51c2VyX25hbWUsIHBvcnQtPmF1dGhuX2lkLAorCQkJCQkJZmFsc2Up OworCXJldHVybiAocmV0ID09IFNUQVRVU19PSyk7Cit9CisKK3N0YXRpYyBib29sCitydW5fdmFs aWRhdG9yX2NvbW1hbmQoUG9ydCAqcG9ydCwgY29uc3QgY2hhciAqdG9rZW4pCit7CisJYm9vbAkJ c3VjY2VzcyA9IGZhbHNlOworCWludAkJCXJjOworCWludAkJCXBpcGVmZFsyXTsKKwlpbnQJCQly ZmQgPSAtMTsKKwlpbnQJCQl3ZmQgPSAtMTsKKworCVN0cmluZ0luZm9EYXRhIGNvbW1hbmQgPSB7 IDAgfTsKKwljaGFyCSAgICpwOworCUZJTEUJICAgKmZoID0gTlVMTDsKKworCXNzaXplX3QJCXdy aXR0ZW47CisJY2hhcgkgICAqbGluZSA9IE5VTEw7CisJc2l6ZV90CQlzaXplID0gMDsKKwlzc2l6 ZV90CQlsZW47CisKKwlBc3NlcnQob2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQpOworCisJaWYgKCFv YXV0aF92YWxpZGF0b3JfY29tbWFuZFswXSkKKwl7CisJCWVyZXBvcnQoQ09NTUVSUk9SLAorCQkJ CShlcnJtc2coIm9hdXRoX3ZhbGlkYXRvcl9jb21tYW5kIGlzIG5vdCBzZXQiKSwKKwkJCQkgZXJy aGludCgiVG8gYWxsb3cgT0F1dGggYXV0aGVudGljYXRlZCBjb25uZWN0aW9ucywgc2V0ICIKKwkJ CQkJCSAib2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQgaW4gcG9zdGdyZXNxbC5jb25mLiIpKSk7CisJ CXJldHVybiBmYWxzZTsKKwl9CisKKwkvKgorCSAqIFNpbmNlIHBvcGVuKCkgaXMgdW5pZGlyZWN0 aW9uYWwsIG9wZW4gdXAgYSBwaXBlIGZvciB0aGUgb3RoZXIgZGlyZWN0aW9uLgorCSAqIFVzZSBD TE9FWEVDIHRvIGVuc3VyZSB0aGF0IG91ciB3cml0ZSBlbmQgZG9lc24ndCBhY2NpZGVudGFsbHkg Z2V0IGNvcGllZAorCSAqIGludG8gY2hpbGQgcHJvY2Vzc2VzLCB3aGljaCB3b3VsZCBwcmV2ZW50 IHVzIGZyb20gY2xvc2luZyBpdCBjbGVhbmx5LgorCSAqCisJICogWFhYIHRoaXMgaXMgdWdseS4g V2Ugc2hvdWxkIGp1c3QgcmVhZCBmcm9tIHRoZSBjaGlsZCBwcm9jZXNzJ3Mgc3Rkb3V0LAorCSAq IGJ1dCB0aGF0J3MgYSBsb3QgbW9yZSBjb2RlLgorCSAqIFhYWCBieSBieXBhc3NpbmcgdGhlIHBv cGVuIEFQSSwgd2Ugb3BlbiB0aGUgcG90ZW50aWFsIG9mIHByb2Nlc3MKKwkgKiBkZWFkbG9jay4g Q2xlYXJseSBkb2N1bWVudCBjaGlsZCBwcm9jZXNzIHJlcXVpcmVtZW50cyAoaS5lLiB0aGUgY2hp bGQKKwkgKiBNVVNUIHJlYWQgYWxsIGRhdGEgb2ZmIG9mIHRoZSBwaXBlIGJlZm9yZSB3cml0aW5n IGFueXRoaW5nKS4KKwkgKiBUT0RPOiBwb3J0IHRvIFdpbmRvd3MgdXNpbmcgX3BpcGUoKS4KKwkg Ki8KKwlyYyA9IHBpcGUyKHBpcGVmZCwgT19DTE9FWEVDKTsKKwlpZiAocmMgPCAwKQorCXsKKwkJ ZXJlcG9ydChDT01NRVJST1IsCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJ IGVycm1zZygiY291bGQgbm90IGNyZWF0ZSBjaGlsZCBwaXBlOiAlbSIpKSk7CisJCXJldHVybiBm YWxzZTsKKwl9CisKKwlyZmQgPSBwaXBlZmRbMF07CisJd2ZkID0gcGlwZWZkWzFdOworCisJLyog QWxsb3cgdGhlIHJlYWQgcGlwZSBiZSBwYXNzZWQgdG8gdGhlIGNoaWxkLiAqLworCWlmICghdW5z ZXRfY2xvZXhlYyhyZmQpKQorCXsKKwkJLyogZXJyb3IgbWVzc2FnZSB3YXMgYWxyZWFkeSBsb2dn ZWQgKi8KKwkJZ290byBjbGVhbnVwOworCX0KKworCS8qCisJICogQ29uc3RydWN0IHRoZSBjb21t YW5kLCBzdWJzdGl0dXRpbmcgYW55IHJlY29nbml6ZWQgJS1zcGVjaWZpZXJzOgorCSAqCisJICog ICAlZjogdGhlIGZpbGUgZGVzY3JpcHRvciBvZiB0aGUgaW5wdXQgcGlwZQorCSAqICAgJXI6IHRo ZSByb2xlIHRoYXQgdGhlIGNsaWVudCB3YW50cyB0byBhc3N1bWUgKHBvcnQtPnVzZXJfbmFtZSkK KwkgKiAgICUlOiBhIGxpdGVyYWwgJyUnCisJICovCisJaW5pdFN0cmluZ0luZm8oJmNvbW1hbmQp OworCisJZm9yIChwID0gb2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQ7ICpwOyBwKyspCisJeworCQlp ZiAocFswXSA9PSAnJScpCisJCXsKKwkJCXN3aXRjaCAocFsxXSkKKwkJCXsKKwkJCQljYXNlICdm JzoKKwkJCQkJYXBwZW5kU3RyaW5nSW5mbygmY29tbWFuZCwgIiVkIiwgcmZkKTsKKwkJCQkJcCsr OworCQkJCQlicmVhazsKKwkJCQljYXNlICdyJzoKKwkJCQkJLyoKKwkJCQkJICogVE9ETzogZGVj aWRlIGhvdyB0aGlzIHN0cmluZyBzaG91bGQgYmUgZXNjYXBlZC4gVGhlIHJvbGUKKwkJCQkJICog aXMgY29udHJvbGxlZCBieSB0aGUgY2xpZW50LCBzbyBpZiB3ZSBkb24ndCBlc2NhcGUgaXQsCisJ CQkJCSAqIGNvbW1hbmQgaW5qZWN0aW9ucyBhcmUgaW5ldml0YWJsZS4KKwkJCQkJICoKKwkJCQkJ ICogVGhpcyBpcyBwcm9iYWJseSBhbiBpbmRpY2F0aW9uIHRoYXQgdGhlIHJvbGUgbmFtZSBuZWVk cworCQkJCQkgKiB0byBiZSBjb21tdW5pY2F0ZWQgdG8gdGhlIHZhbGlkYXRvciBwcm9jZXNzIGlu IHNvbWUgb3RoZXIKKwkJCQkJICogd2F5LiBGb3IgdGhpcyBwcm9vZiBvZiBjb25jZXB0LCBqdXN0 IGJlIGluY3JlZGlibHkgc3RyaWN0CisJCQkJCSAqIGFib3V0IHRoZSBjaGFyYWN0ZXJzIHRoYXQg YXJlIGFsbG93ZWQgaW4gdXNlciBuYW1lcy4KKwkJCQkJICovCisJCQkJCWlmICghdXNlcm5hbWVf b2tfZm9yX3NoZWxsKHBvcnQtPnVzZXJfbmFtZSkpCisJCQkJCQlnb3RvIGNsZWFudXA7CisKKwkJ CQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY29tbWFuZCwgcG9ydC0+dXNlcl9uYW1lKTsKKwkJ CQkJcCsrOworCQkJCQlicmVhazsKKwkJCQljYXNlICclJzoKKwkJCQkJYXBwZW5kU3RyaW5nSW5m b0NoYXIoJmNvbW1hbmQsICclJyk7CisJCQkJCXArKzsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVs dDoKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmNvbW1hbmQsIHBbMF0pOworCQkJfQorCQl9 CisJCWVsc2UKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZjb21tYW5kLCBwWzBdKTsKKwl9CisK KwkvKiBFeGVjdXRlIHRoZSBjb21tYW5kLiAqLworCWZoID0gT3BlblBpcGVTdHJlYW0oY29tbWFu ZC5kYXRhLCAicmUiKTsKKwkvKiBUT0RPOiBoYW5kbGUgZmFpbHVyZXMgKi8KKworCS8qIFdlIGRv bid0IG5lZWQgdGhlIHJlYWQgZW5kIG9mIHRoZSBwaXBlIGFueW1vcmUuICovCisJY2xvc2UocmZk KTsKKwlyZmQgPSAtMTsKKworCS8qIEdpdmUgdGhlIGNvbW1hbmQgdGhlIHRva2VuIHRvIHZhbGlk YXRlLiAqLworCXdyaXR0ZW4gPSB3cml0ZSh3ZmQsIHRva2VuLCBzdHJsZW4odG9rZW4pKTsKKwlp ZiAod3JpdHRlbiAhPSBzdHJsZW4odG9rZW4pKQorCXsKKwkJLyogVE9ETyBtdXN0IGxvb3AgZm9y IHNob3J0IHdyaXRlcywgRUlOVFIgZXQgYWwgKi8KKwkJZXJlcG9ydChDT01NRVJST1IsCisJCQkJ KGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJIGVycm1zZygiY291bGQgbm90IHdyaXRl IHRva2VuIHRvIGNoaWxkIHBpcGU6ICVtIikpKTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCWNs b3NlKHdmZCk7CisJd2ZkID0gLTE7CisKKwkvKgorCSAqIFJlYWQgdGhlIGNvbW1hbmQncyByZXNw b25zZS4KKwkgKgorCSAqIFRPRE86IGdldGxpbmUoKSBpcyBwcm9iYWJseSB0b28gbmV3IHRvIHVz ZSwgdW5mb3J0dW5hdGVseS4KKwkgKiBUT0RPOiBsb29wIG92ZXIgYWxsIGxpbmVzCisJICovCisJ aWYgKChsZW4gPSBnZXRsaW5lKCZsaW5lLCAmc2l6ZSwgZmgpKSA+PSAwKQorCXsKKwkJLyogVE9E TzogZmFpbCBpZiB0aGUgYXV0aG5faWQgZG9lc24ndCBlbmQgd2l0aCBhIG5ld2xpbmUgKi8KKwkJ aWYgKGxlbiA+IDApCisJCQlsaW5lW2xlbiAtIDFdID0gJ1wwJzsKKworCQlzZXRfYXV0aG5faWQo cG9ydCwgbGluZSk7CisJfQorCWVsc2UgaWYgKGZlcnJvcihmaCkpCisJeworCQllcmVwb3J0KENP TU1FUlJPUiwKKwkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkgZXJybXNnKCJj b3VsZCBub3QgcmVhZCBmcm9tIGNvbW1hbmQgXCIlc1wiOiAlbSIsCisJCQkJCQljb21tYW5kLmRh dGEpKSk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKiBNYWtlIHN1cmUgdGhlIGNvbW1hbmQg ZXhpdHMgY2xlYW5seS4gKi8KKwlpZiAoIWNoZWNrX2V4aXQoJmZoLCBjb21tYW5kLmRhdGEpKQor CXsKKwkJLyogZXJyb3IgbWVzc2FnZSBhbHJlYWR5IGxvZ2dlZCAqLworCQlnb3RvIGNsZWFudXA7 CisJfQorCisJLyogRG9uZS4gKi8KKwlzdWNjZXNzID0gdHJ1ZTsKKworY2xlYW51cDoKKwlpZiAo bGluZSkKKwkJZnJlZShsaW5lKTsKKworCS8qCisJICogSW4gdGhlIHN1Y2Nlc3NmdWwgY2FzZSwg dGhlIHBpcGUgZmRzIGFyZSBhbHJlYWR5IGNsb3NlZC4gRm9yIHRoZSBlcnJvcgorCSAqIGNhc2Us IGFsd2F5cyBjbG9zZSBvdXQgdGhlIHBpcGUgYmVmb3JlIHdhaXRpbmcgZm9yIHRoZSBjb21tYW5k LCB0bworCSAqIHByZXZlbnQgZGVhZGxvY2suCisJICovCisJaWYgKHJmZCA+PSAwKQorCQljbG9z ZShyZmQpOworCWlmICh3ZmQgPj0gMCkKKwkJY2xvc2Uod2ZkKTsKKworCWlmIChmaCkKKwl7CisJ CUFzc2VydCghc3VjY2Vzcyk7CisJCWNoZWNrX2V4aXQoJmZoLCBjb21tYW5kLmRhdGEpOworCX0K KworCWlmIChjb21tYW5kLmRhdGEpCisJCXBmcmVlKGNvbW1hbmQuZGF0YSk7CisKKwlyZXR1cm4g c3VjY2VzczsKK30KKworc3RhdGljIGJvb2wKK2NoZWNrX2V4aXQoRklMRSAqKmZoLCBjb25zdCBj aGFyICpjb21tYW5kKQoreworCWludCByYzsKKworCXJjID0gQ2xvc2VQaXBlU3RyZWFtKCpmaCk7 CisJKmZoID0gTlVMTDsKKworCWlmIChyYyA9PSAtMSkKKwl7CisJCS8qIHBjbG9zZSgpIGl0c2Vs ZiBmYWlsZWQuICovCisJCWVyZXBvcnQoQ09NTUVSUk9SLAorCQkJCShlcnJjb2RlX2Zvcl9maWxl X2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCBjbG9zZSBwaXBlIHRvIGNvbW1hbmQg XCIlc1wiOiAlbSIsCisJCQkJCQljb21tYW5kKSkpOworCX0KKwllbHNlIGlmIChyYyAhPSAwKQor CXsKKwkJY2hhciAqcmVhc29uID0gd2FpdF9yZXN1bHRfdG9fc3RyKHJjKTsKKworCQllcmVwb3J0 KENPTU1FUlJPUiwKKwkJCQkoZXJybXNnKCJmYWlsZWQgdG8gZXhlY3V0ZSBjb21tYW5kIFwiJXNc IjogJXMiLAorCQkJCQkJY29tbWFuZCwgcmVhc29uKSkpOworCisJCXBmcmVlKHJlYXNvbik7CisJ fQorCisJcmV0dXJuIChyYyA9PSAwKTsKK30KKworc3RhdGljIGJvb2wKK3Vuc2V0X2Nsb2V4ZWMo aW50IGZkKQoreworCWludAkJCWZsYWdzOworCWludAkJCXJjOworCisJZmxhZ3MgPSBmY250bChm ZCwgRl9HRVRGRCk7CisJaWYgKGZsYWdzID09IC0xKQorCXsKKwkJZXJlcG9ydChDT01NRVJST1Is CisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJIGVycm1zZygiY291bGQgbm90 IGdldCBmZCBmbGFncyBmb3IgY2hpbGQgcGlwZTogJW0iKSkpOworCQlyZXR1cm4gZmFsc2U7CisJ fQorCisJcmMgPSBmY250bChmZCwgRl9TRVRGRCwgZmxhZ3MgJiB+RkRfQ0xPRVhFQyk7CisJaWYg KHJjIDwgMCkKKwl7CisJCWVyZXBvcnQoQ09NTUVSUk9SLAorCQkJCShlcnJjb2RlX2Zvcl9maWxl X2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCB1bnNldCBGRF9DTE9FWEVDIGZvciBj aGlsZCBwaXBlOiAlbSIpKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsK K30KKworLyoKKyAqIFhYWCBUaGlzIHNob3VsZCBnbyBhd2F5IGV2ZW50dWFsbHkgYW5kIGJlIHJl cGxhY2VkIHdpdGggZWl0aGVyIGEgcHJvcGVyCisgKiBlc2NhcGUgb3IgYSBkaWZmZXJlbnQgc3Ry YXRlZ3kgZm9yIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdmFsaWRhdG9yIGNvbW1hbmQuCisgKi8K K3N0YXRpYyBib29sCit1c2VybmFtZV9va19mb3Jfc2hlbGwoY29uc3QgY2hhciAqdXNlcm5hbWUp Cit7CisJLyogVGhpcyBzZXQgaXMgYm9ycm93ZWQgZnJvbSBmZV91dGlscycgYXBwZW5kU2hlbGxT dHJpbmdOb0Vycm9yKCkuICovCisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhbGxvd2VkID0g ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgorCQkJCQkJCQkJCSJBQkNERUZHSElKS0xNTk9Q UVJTVFVWV1hZWiIKKwkJCQkJCQkJCQkiMDEyMzQ1Njc4OS1fLi86IjsKKwlzaXplX3QJc3BhbjsK KworCUFzc2VydCh1c2VybmFtZSAmJiB1c2VybmFtZVswXSk7IC8qIHNob3VsZCBoYXZlIGFscmVh ZHkgYmVlbiBjaGVja2VkICovCisKKwlzcGFuID0gc3Ryc3BuKHVzZXJuYW1lLCBhbGxvd2VkKTsK KwlpZiAodXNlcm5hbWVbc3Bhbl0gIT0gJ1wwJykKKwl7CisJCWVyZXBvcnQoQ09NTUVSUk9SLAor CQkJCShlcnJtc2coIlBvc3RncmVTUUwgdXNlciBuYW1lIGNvbnRhaW5zIHVuc2FmZSBjaGFyYWN0 ZXJzIGFuZCBjYW5ub3QgYmUgcGFzc2VkIHRvIHRoZSBPQXV0aCB2YWxpZGF0b3IiKSkpOworCQly ZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9saWJwcS9hdXRoLXNhc2wuYyBiL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGgtc2FzbC5jCmlu ZGV4IGExZDdkYmI2ZDUuLjBmNDYxYTY2OTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2xpYnBx L2F1dGgtc2FzbC5jCisrKyBiL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGgtc2FzbC5jCkBAIC0yMCwx NCArMjAsNiBAQAogI2luY2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCiAjaW5jbHVkZSAibGlicHEv c2FzbC5oIgogCi0vKgotICogTWF4aW11bSBhY2NlcHRlZCBzaXplIG9mIFNBU0wgbWVzc2FnZXMu Ci0gKgotICogVGhlIG1lc3NhZ2VzIHRoYXQgdGhlIHNlcnZlciBvciBsaWJwcSBnZW5lcmF0ZSBh cmUgbXVjaCBzbWFsbGVyIHRoYW4gdGhpcywKLSAqIGJ1dCBoYXZlIHNvbWUgaGVhZHJvb20uCi0g Ki8KLSNkZWZpbmUgUEdfTUFYX1NBU0xfTUVTU0FHRV9MRU5HVEgJMTAyNAotCiAvKgogICogUGVy Zm9ybSBhIFNBU0wgZXhjaGFuZ2Ugd2l0aCBhIGxpYnBxIGNsaWVudCwgdXNpbmcgYSBzcGVjaWZp YyBtZWNoYW5pc20KICAqIGltcGxlbWVudGF0aW9uLgpAQCAtMTAzLDcgKzk1LDcgQEAgQ2hlY2tT QVNMQXV0aChjb25zdCBwZ19iZV9zYXNsX21lY2ggKm1lY2gsIFBvcnQgKnBvcnQsIGNoYXIgKnNo YWRvd19wYXNzLAogCiAJCS8qIEdldCB0aGUgYWN0dWFsIFNBU0wgbWVzc2FnZSAqLwogCQlpbml0 U3RyaW5nSW5mbygmYnVmKTsKLQkJaWYgKHBxX2dldG1lc3NhZ2UoJmJ1ZiwgUEdfTUFYX1NBU0xf TUVTU0FHRV9MRU5HVEgpKQorCQlpZiAocHFfZ2V0bWVzc2FnZSgmYnVmLCBtZWNoLT5tYXhfbWVz c2FnZV9sZW5ndGgpKQogCQl7CiAJCQkvKiBFT0YgLSBwcV9nZXRtZXNzYWdlIGFscmVhZHkgbG9n Z2VkIGVycm9yICovCiAJCQlwZnJlZShidWYuZGF0YSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9saWJwcS9hdXRoLXNjcmFtLmMgYi9zcmMvYmFja2VuZC9saWJwcS9hdXRoLXNjcmFtLmMKaW5k ZXggZWU3ZjUyMjE4YS4uNDA0OWFjZTQ3MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbGlicHEv YXV0aC1zY3JhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGgtc2NyYW0uYwpAQCAtMTE4 LDcgKzExOCw5IEBAIHN0YXRpYyBpbnQJc2NyYW1fZXhjaGFuZ2Uodm9pZCAqb3BhcSwgY29uc3Qg Y2hhciAqaW5wdXQsIGludCBpbnB1dGxlbiwKIGNvbnN0IHBnX2JlX3Nhc2xfbWVjaCBwZ19iZV9z Y3JhbV9tZWNoID0gewogCXNjcmFtX2dldF9tZWNoYW5pc21zLAogCXNjcmFtX2luaXQsCi0Jc2Ny YW1fZXhjaGFuZ2UKKwlzY3JhbV9leGNoYW5nZSwKKworCVBHX01BWF9TQVNMX01FU1NBR0VfTEVO R1RICiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbGlicHEvYXV0aC5jIGIvc3Jj L2JhY2tlbmQvbGlicHEvYXV0aC5jCmluZGV4IDRhOGE2MzkyMmEuLjE3MDQyZDg0YWQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGguYworKysgYi9zcmMvYmFja2VuZC9saWJwcS9h dXRoLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJsaWJwcS9hdXRoLmgiCiAjaW5jbHVk ZSAibGlicHEvY3J5cHQuaCIKICNpbmNsdWRlICJsaWJwcS9saWJwcS5oIgorI2luY2x1ZGUgImxp YnBxL29hdXRoLmgiCiAjaW5jbHVkZSAibGlicHEvcHFmb3JtYXQuaCIKICNpbmNsdWRlICJsaWJw cS9zYXNsLmgiCiAjaW5jbHVkZSAibGlicHEvc2NyYW0uaCIKQEAgLTI5OCw2ICsyOTksOSBAQCBh dXRoX2ZhaWxlZChQb3J0ICpwb3J0LCBpbnQgc3RhdHVzLCBjb25zdCBjaGFyICpsb2dkZXRhaWwp CiAJCWNhc2UgdWFSQURJVVM6CiAJCQllcnJzdHIgPSBnZXR0ZXh0X25vb3AoIlJBRElVUyBhdXRo ZW50aWNhdGlvbiBmYWlsZWQgZm9yIHVzZXIgXCIlc1wiIik7CiAJCQlicmVhazsKKwkJY2FzZSB1 YU9BdXRoOgorCQkJZXJyc3RyID0gZ2V0dGV4dF9ub29wKCJPQXV0aCBiZWFyZXIgYXV0aGVudGlj YXRpb24gZmFpbGVkIGZvciB1c2VyIFwiJXNcIiIpOworCQkJYnJlYWs7CiAJCWNhc2UgdWFDdXN0 b206CiAJCQl7CiAJCQkJQ3VzdG9tQXV0aFByb3ZpZGVyICpwcm92aWRlciA9IGdldF9wcm92aWRl cl9ieV9uYW1lKHBvcnQtPmhiYS0+Y3VzdG9tX3Byb3ZpZGVyKTsKQEAgLTYyNiw2ICs2MzAsOSBA QCBDbGllbnRBdXRoZW50aWNhdGlvbihQb3J0ICpwb3J0KQogCQljYXNlIHVhVHJ1c3Q6CiAJCQlz dGF0dXMgPSBTVEFUVVNfT0s7CiAJCQlicmVhazsKKwkJY2FzZSB1YU9BdXRoOgorCQkJc3RhdHVz ID0gQ2hlY2tTQVNMQXV0aCgmcGdfYmVfb2F1dGhfbWVjaCwgcG9ydCwgTlVMTCwgTlVMTCk7CisJ CQlicmVhazsKIAkJY2FzZSB1YUN1c3RvbToKIAkJCXsKIAkJCQlDdXN0b21BdXRoUHJvdmlkZXIg KnByb3ZpZGVyID0gZ2V0X3Byb3ZpZGVyX2J5X25hbWUocG9ydC0+aGJhLT5jdXN0b21fcHJvdmlk ZXIpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbGlicHEvaGJhLmMgYi9zcmMvYmFja2VuZC9s aWJwcS9oYmEuYwppbmRleCA0MmNiMWNlNTFkLi5jZDNiMWNjMTQwIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9saWJwcS9oYmEuYworKysgYi9zcmMvYmFja2VuZC9saWJwcS9oYmEuYwpAQCAtMTM2 LDcgKzEzNiw4IEBAIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBVc2VyQXV0aE5hbWVbXSA9CiAJ ImNlcnQiLAogCSJyYWRpdXMiLAogCSJjdXN0b20iLAotCSJwZWVyIgorCSJwZWVyIiwKKwkib2F1 dGgiLAogfTsKIAogCkBAIC0xNDAxLDYgKzE0MDIsOCBAQCBwYXJzZV9oYmFfbGluZShUb2tlbml6 ZWRMaW5lICp0b2tfbGluZSwgaW50IGVsZXZlbCkKICNlbmRpZgogCWVsc2UgaWYgKHN0cmNtcCh0 b2tlbi0+c3RyaW5nLCAicmFkaXVzIikgPT0gMCkKIAkJcGFyc2VkbGluZS0+YXV0aF9tZXRob2Qg PSB1YVJBRElVUzsKKwllbHNlIGlmIChzdHJjbXAodG9rZW4tPnN0cmluZywgIm9hdXRoIikgPT0g MCkKKwkJcGFyc2VkbGluZS0+YXV0aF9tZXRob2QgPSB1YU9BdXRoOwogCWVsc2UgaWYgKHN0cmNt cCh0b2tlbi0+c3RyaW5nLCAiY3VzdG9tIikgPT0gMCkKIAkJcGFyc2VkbGluZS0+YXV0aF9tZXRo b2QgPSB1YUN1c3RvbTsKIAllbHNlCkBAIC0xNzMwLDggKzE3MzMsOSBAQCBwYXJzZV9oYmFfYXV0 aF9vcHQoY2hhciAqbmFtZSwgY2hhciAqdmFsLCBIYmFMaW5lICpoYmFsaW5lLAogCQkJaGJhbGlu ZS0+YXV0aF9tZXRob2QgIT0gdWFHU1MgJiYKIAkJCWhiYWxpbmUtPmF1dGhfbWV0aG9kICE9IHVh U1NQSSAmJgogCQkJaGJhbGluZS0+YXV0aF9tZXRob2QgIT0gdWFDZXJ0ICYmCisJCQloYmFsaW5l LT5hdXRoX21ldGhvZCAhPSB1YU9BdXRoICYmCiAJCQloYmFsaW5lLT5hdXRoX21ldGhvZCAhPSB1 YUN1c3RvbSkKLQkJCUlOVkFMSURfQVVUSF9PUFRJT04oIm1hcCIsIGdldHRleHRfbm9vcCgiaWRl bnQsIHBlZXIsIGdzc2FwaSwgc3NwaSwgY2VydCBhbmQgY3VzdG9tIikpOworCQkJSU5WQUxJRF9B VVRIX09QVElPTigibWFwIiwgZ2V0dGV4dF9ub29wKCJpZGVudCwgcGVlciwgZ3NzYXBpLCBzc3Bp LCBjZXJ0LCBvYXV0aCwgYW5kIGN1c3RvbSIpKTsKIAkJaGJhbGluZS0+dXNlcm1hcCA9IHBzdHJk dXAodmFsKTsKIAl9CiAJZWxzZSBpZiAoc3RyY21wKG5hbWUsICJjbGllbnRjZXJ0IikgPT0gMCkK QEAgLTIxMTUsNiArMjExOSwyNyBAQCBwYXJzZV9oYmFfYXV0aF9vcHQoY2hhciAqbmFtZSwgY2hh ciAqdmFsLCBIYmFMaW5lICpoYmFsaW5lLAogCQloYmFsaW5lLT5yYWRpdXNpZGVudGlmaWVycyA9 IHBhcnNlZF9pZGVudGlmaWVyczsKIAkJaGJhbGluZS0+cmFkaXVzaWRlbnRpZmllcnNfcyA9IHBz dHJkdXAodmFsKTsKIAl9CisJZWxzZSBpZiAoc3RyY21wKG5hbWUsICJpc3N1ZXIiKSA9PSAwKQor CXsKKwkJaWYgKGhiYWxpbmUtPmF1dGhfbWV0aG9kICE9IHVhT0F1dGgpCisJCQlJTlZBTElEX0FV VEhfT1BUSU9OKCJpc3N1ZXIiLCBnZXR0ZXh0X25vb3AoIm9hdXRoIikpOworCQloYmFsaW5lLT5v YXV0aF9pc3N1ZXIgPSBwc3RyZHVwKHZhbCk7CisJfQorCWVsc2UgaWYgKHN0cmNtcChuYW1lLCAi c2NvcGUiKSA9PSAwKQorCXsKKwkJaWYgKGhiYWxpbmUtPmF1dGhfbWV0aG9kICE9IHVhT0F1dGgp CisJCQlJTlZBTElEX0FVVEhfT1BUSU9OKCJzY29wZSIsIGdldHRleHRfbm9vcCgib2F1dGgiKSk7 CisJCWhiYWxpbmUtPm9hdXRoX3Njb3BlID0gcHN0cmR1cCh2YWwpOworCX0KKwllbHNlIGlmIChz dHJjbXAobmFtZSwgInRydXN0X3ZhbGlkYXRvcl9hdXRoeiIpID09IDApCisJeworCQlpZiAoaGJh bGluZS0+YXV0aF9tZXRob2QgIT0gdWFPQXV0aCkKKwkJCUlOVkFMSURfQVVUSF9PUFRJT04oInRy dXN0X3ZhbGlkYXRvcl9hdXRoeiIsIGdldHRleHRfbm9vcCgib2F1dGgiKSk7CisJCWlmIChzdHJj bXAodmFsLCAiMSIpID09IDApCisJCQloYmFsaW5lLT5vYXV0aF9za2lwX3VzZXJtYXAgPSB0cnVl OworCQllbHNlCisJCQloYmFsaW5lLT5vYXV0aF9za2lwX3VzZXJtYXAgPSBmYWxzZTsKKwl9CiAJ ZWxzZSBpZiAoc3RyY21wKG5hbWUsICJwcm92aWRlciIpID09IDApCiAJewogCQlSRVFVSVJFX0FV VEhfT1BUSU9OKHVhQ3VzdG9tLCAicHJvdmlkZXIiLCAiY3VzdG9tIik7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMu YwppbmRleCBmNzBmN2Y1YzAxLi45YTViMmFhNDk2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9taXNjL2d1Yy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMKQEAgLTU5 LDYgKzU5LDcgQEAKICNpbmNsdWRlICJsaWJwcS9hdXRoLmgiCiAjaW5jbHVkZSAibGlicHEvbGli cHEuaCIKICNpbmNsdWRlICJsaWJwcS9wcWZvcm1hdC5oIgorI2luY2x1ZGUgImxpYnBxL29hdXRo LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL2Nvc3QuaCIK ICNpbmNsdWRlICJvcHRpbWl6ZXIvZ2Vxby5oIgpAQCAtNDY2Niw2ICs0NjY3LDE3IEBAIHN0YXRp YyBzdHJ1Y3QgY29uZmlnX3N0cmluZyBDb25maWd1cmVOYW1lc1N0cmluZ1tdID0KIAkJY2hlY2tf YmFja3RyYWNlX2Z1bmN0aW9ucywgYXNzaWduX2JhY2t0cmFjZV9mdW5jdGlvbnMsIE5VTEwKIAl9 LAogCisJeworCQl7Im9hdXRoX3ZhbGlkYXRvcl9jb21tYW5kIiwgUEdDX1NJR0hVUCwgQ09OTl9B VVRIX0FVVEgsCisJCQlnZXR0ZXh0X25vb3AoIkNvbW1hbmQgdG8gdmFsaWRhdGUgT0F1dGggdjIg YmVhcmVyIHRva2Vucy4iKSwKKwkJCU5VTEwsCisJCQlHVUNfU1VQRVJVU0VSX09OTFkKKwkJfSwK KwkJJm9hdXRoX3ZhbGlkYXRvcl9jb21tYW5kLAorCQkiIiwKKwkJTlVMTCwgTlVMTCwgTlVMTAor CX0sCisKIAkvKiBFbmQtb2YtbGlzdCBtYXJrZXIgKi8KIAl7CiAJCXtOVUxMLCAwLCAwLCBOVUxM LCBOVUxMfSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvbGlicHEvaGJhLmggYi9zcmMvaW5jbHVkZS9saWJwcS9oYmEuaAppbmRleCAzMWEwMGM0 YjcxLi5lNDA1MTAzYTJlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9saWJwcS9oYmEuaAorKysg Yi9zcmMvaW5jbHVkZS9saWJwcS9oYmEuaApAQCAtMzksOCArMzksOSBAQCB0eXBlZGVmIGVudW0g VXNlckF1dGgKIAl1YUNlcnQsCiAJdWFSQURJVVMsCiAJdWFDdXN0b20sCi0JdWFQZWVyCi0jZGVm aW5lIFVTRVJfQVVUSF9MQVNUIHVhUGVlcgkvKiBNdXN0IGJlIGxhc3QgdmFsdWUgb2YgdGhpcyBl bnVtICovCisJdWFQZWVyLAorCXVhT0F1dGgKKyNkZWZpbmUgVVNFUl9BVVRIX0xBU1QgdWFPQXV0 aAkvKiBNdXN0IGJlIGxhc3QgdmFsdWUgb2YgdGhpcyBlbnVtICovCiB9IFVzZXJBdXRoOwogCiAv KgpAQCAtMTI4LDYgKzEyOSw5IEBAIHR5cGVkZWYgc3RydWN0IEhiYUxpbmUKIAljaGFyCSAgICpy YWRpdXNpZGVudGlmaWVyc19zOwogCUxpc3QJICAgKnJhZGl1c3BvcnRzOwogCWNoYXIJICAgKnJh ZGl1c3BvcnRzX3M7CisJY2hhcgkgICAqb2F1dGhfaXNzdWVyOworCWNoYXIJICAgKm9hdXRoX3Nj b3BlOworCWJvb2wJCW9hdXRoX3NraXBfdXNlcm1hcDsKIAljaGFyCSAgICpjdXN0b21fcHJvdmlk ZXI7CiAJTGlzdAkgICAqY3VzdG9tX2F1dGhfb3B0aW9uczsKIH0gSGJhTGluZTsKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2xpYnBxL29hdXRoLmggYi9zcmMvaW5jbHVkZS9saWJwcS9vYXV0aC5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjg3MGU0MjZhZjEKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9saWJwcS9vYXV0aC5oCkBAIC0wLDAgKzEsMjQgQEAK Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIG9hdXRoLmgKKyAqCSAgSW50ZXJmYWNlIHRvIGxp YnBxL2F1dGgtb2F1dGguYworICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIx LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJp Z2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAq CisgKiBzcmMvaW5jbHVkZS9saWJwcS9vYXV0aC5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Ki8KKyNpZm5kZWYgUEdfT0FVVEhfSAorI2RlZmluZSBQR19PQVVUSF9ICisKKyNpbmNsdWRlICJs aWJwcS9saWJwcS1iZS5oIgorI2luY2x1ZGUgImxpYnBxL3Nhc2wuaCIKKworZXh0ZXJuIGNoYXIg Km9hdXRoX3ZhbGlkYXRvcl9jb21tYW5kOworCisvKiBJbXBsZW1lbnRhdGlvbiAqLworZXh0ZXJu IGNvbnN0IHBnX2JlX3Nhc2xfbWVjaCBwZ19iZV9vYXV0aF9tZWNoOworCisjZW5kaWYgLyogUEdf T0FVVEhfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGlicHEvc2FzbC5oIGIvc3JjL2lu Y2x1ZGUvbGlicHEvc2FzbC5oCmluZGV4IDM5Y2NmOGYwZTMuLmY3ZDkwNTU5MWEgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2xpYnBxL3Nhc2wuaAorKysgYi9zcmMvaW5jbHVkZS9saWJwcS9zYXNs LmgKQEAgLTI2LDYgKzI2LDE0IEBACiAjZGVmaW5lIFBHX1NBU0xfRVhDSEFOR0VfU1VDQ0VTUwkJ MQogI2RlZmluZSBQR19TQVNMX0VYQ0hBTkdFX0ZBSUxVUkUJCTIKIAorLyoKKyAqIE1heGltdW0g YWNjZXB0ZWQgc2l6ZSBvZiBTQVNMIG1lc3NhZ2VzLgorICoKKyAqIFRoZSBtZXNzYWdlcyB0aGF0 IHRoZSBzZXJ2ZXIgb3IgbGlicHEgZ2VuZXJhdGUgYXJlIG11Y2ggc21hbGxlciB0aGFuIHRoaXMs CisgKiBidXQgaGF2ZSBzb21lIGhlYWRyb29tLgorICovCisjZGVmaW5lIFBHX01BWF9TQVNMX01F U1NBR0VfTEVOR1RICTEwMjQKKwogLyoKICAqIEJhY2tlbmQgU0FTTCBtZWNoYW5pc20gY2FsbGJh Y2tzLgogICoKQEAgLTEyNyw2ICsxMzUsOSBAQCB0eXBlZGVmIHN0cnVjdCBwZ19iZV9zYXNsX21l Y2gKIAkJCQkJCQkgY29uc3QgY2hhciAqaW5wdXQsIGludCBpbnB1dGxlbiwKIAkJCQkJCQkgY2hh ciAqKm91dHB1dCwgaW50ICpvdXRwdXRsZW4sCiAJCQkJCQkJIGNvbnN0IGNoYXIgKipsb2dkZXRh aWwpOworCisJLyogVGhlIG1heGltdW0gc2l6ZSBhbGxvd2VkIGZvciBjbGllbnQgU0FTTFJlc3Bv bnNlcy4gKi8KKwlpbnQJCQltYXhfbWVzc2FnZV9sZW5ndGg7CiB9IHBnX2JlX3Nhc2xfbWVjaDsK IAogLyogQ29tbW9uIGltcGxlbWVudGF0aW9uIGZvciBhdXRoLmMgKi8KLS0gCjIuMjUuMQoK --_011_4db7d3ea061f47a15fc6d865f53dd327ea2975fbcamelvmwarecom_ Content-Type: text/x-patch; name="v4-0008-Add-a-very-simple-authn_id-extension.patch" Content-Description: v4-0008-Add-a-very-simple-authn_id-extension.patch Content-Disposition: attachment; filename="v4-0008-Add-a-very-simple-authn_id-extension.patch"; size=2897; creation-date="Sat, 26 Mar 2022 00:00:22 GMT"; modification-date="Sat, 26 Mar 2022 00:00:22 GMT" Content-ID: <5D837DAC8A9FFE4488D428917765581E@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 RnJvbSA5ZGQ4ZTAyNGZkZTI5MjM5ODI5ZTgyMmI4ZjJiODIwMjgwNDRjZDhiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8cGNoYW1waW9uQHZtd2FyZS5jb20+ CkRhdGU6IFR1ZSwgMTggTWF5IDIwMjEgMTU6MDE6MjkgLTA3MDAKU3ViamVjdDogW1BBVENIIHY0 IDA4LzEwXSBBZGQgYSB2ZXJ5IHNpbXBsZSBhdXRobl9pZCBleHRlbnNpb24KCi4uLmZvciByZXRy aWV2aW5nIHRoZSBhdXRobl9pZCBmcm9tIHRoZSBzZXJ2ZXIgaW4gdGVzdHMuCi0tLQogY29udHJp Yi9hdXRobl9pZC9NYWtlZmlsZSAgICAgICAgICB8IDE5ICsrKysrKysrKysrKysrKysrKysKIGNv bnRyaWIvYXV0aG5faWQvYXV0aG5faWQtLTEuMC5zcWwgfCAgOCArKysrKysrKwogY29udHJpYi9h dXRobl9pZC9hdXRobl9pZC5jICAgICAgICB8IDI4ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysKIGNvbnRyaWIvYXV0aG5faWQvYXV0aG5faWQuY29udHJvbCAgfCAgNSArKysrKwogNCBmaWxl cyBjaGFuZ2VkLCA2MCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9h dXRobl9pZC9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvYXV0aG5faWQvYXV0 aG5faWQtLTEuMC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL2F1dGhuX2lkL2F1dGhu X2lkLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL2F1dGhuX2lkL2F1dGhuX2lkLmNvbnRy b2wKCmRpZmYgLS1naXQgYS9jb250cmliL2F1dGhuX2lkL01ha2VmaWxlIGIvY29udHJpYi9hdXRo bl9pZC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi40NjAy NjM1OGUwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9hdXRobl9pZC9NYWtlZmlsZQpAQCAt MCwwICsxLDE5IEBACisjIGNvbnRyaWIvYXV0aG5faWQvTWFrZWZpbGUKKworTU9EVUxFX2JpZyA9 IGF1dGhuX2lkCitPQkpTID0gYXV0aG5faWQubworCitFWFRFTlNJT04gPSBhdXRobl9pZAorREFU QSA9IGF1dGhuX2lkLS0xLjAuc3FsCitQR0ZJTEVERVNDID0gImF1dGhuX2lkIC0gaW5mb3JtYXRp b24gYWJvdXQgdGhlIGF1dGhlbnRpY2F0ZWQgdXNlciIKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NP TkZJRyA9IHBnX2NvbmZpZworUEdYUyA6PSAkKHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitp bmNsdWRlICQoUEdYUykKK2Vsc2UKK3N1YmRpciA9IGNvbnRyaWIvYXV0aG5faWQKK3RvcF9idWls ZGRpciA9IC4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFs CitpbmNsdWRlICQodG9wX3NyY2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5taworZW5kaWYK ZGlmZiAtLWdpdCBhL2NvbnRyaWIvYXV0aG5faWQvYXV0aG5faWQtLTEuMC5zcWwgYi9jb250cmli L2F1dGhuX2lkL2F1dGhuX2lkLS0xLjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAuLmFmMmE0ZDM5OTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2F1dGhuX2lk L2F1dGhuX2lkLS0xLjAuc3FsCkBAIC0wLDAgKzEsOCBAQAorLyogY29udHJpYi9hdXRobl9pZC9h dXRobl9pZC0tMS4wLnNxbCAqLworCistLSBjb21wbGFpbiBpZiBzY3JpcHQgaXMgc291cmNlZCBp biBwc3FsLCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRFIEVYVEVOU0lPTgorXGVjaG8gVXNlICJDUkVB VEUgRVhURU5TSU9OIGF1dGhuX2lkIiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1aXQKKworQ1JFQVRF IEZVTkNUSU9OIGF1dGhuX2lkKCkgUkVUVVJOUyB0ZXh0CitBUyAnTU9EVUxFX1BBVEhOQU1FJywg J2F1dGhuX2lkJworTEFOR1VBR0UgQyBJTU1VVEFCTEU7CmRpZmYgLS1naXQgYS9jb250cmliL2F1 dGhuX2lkL2F1dGhuX2lkLmMgYi9jb250cmliL2F1dGhuX2lkL2F1dGhuX2lkLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMGZlY2FjMzZhOAotLS0gL2Rldi9udWxsCisr KyBiL2NvbnRyaWIvYXV0aG5faWQvYXV0aG5faWQuYwpAQCAtMCwwICsxLDI4IEBACisvKgorICog RXh0ZW5zaW9uIHRvIGV4cG9zZSB0aGUgY3VycmVudCB1c2VyJ3MgYXV0aG5faWQuCisgKgorICog Y29udHJpYi9hdXRobl9pZC9hdXRobl9pZC5jCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgi CisKKyNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAibGlicHEvbGlicHEtYmUuaCIKKyNpbmNs dWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorCitQR19NT0RV TEVfTUFHSUM7CisKK1BHX0ZVTkNUSU9OX0lORk9fVjEoYXV0aG5faWQpOworCisvKgorICogUmV0 dXJucyB0aGUgY3VycmVudCB1c2VyJ3MgYXV0aGVudGljYXRlZCBpZGVudGl0eS4KKyAqLworRGF0 dW0KK2F1dGhuX2lkKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJaWYgKCFNeVByb2NQb3J0LT5hdXRo bl9pZCkKKwkJUEdfUkVUVVJOX05VTEwoKTsKKworCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190 b190ZXh0KE15UHJvY1BvcnQtPmF1dGhuX2lkKSk7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL2F1 dGhuX2lkL2F1dGhuX2lkLmNvbnRyb2wgYi9jb250cmliL2F1dGhuX2lkL2F1dGhuX2lkLmNvbnRy b2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZTBmOWUwNmJlZAotLS0g L2Rldi9udWxsCisrKyBiL2NvbnRyaWIvYXV0aG5faWQvYXV0aG5faWQuY29udHJvbApAQCAtMCww ICsxLDUgQEAKKyMgYXV0aG5faWQgZXh0ZW5zaW9uCitjb21tZW50ID0gJ2N1cnJlbnQgdXNlciBp ZGVudGl0eScKK2RlZmF1bHRfdmVyc2lvbiA9ICcxLjAnCittb2R1bGVfcGF0aG5hbWUgPSAnJGxp YmRpci9hdXRobl9pZCcKK3JlbG9jYXRhYmxlID0gdHJ1ZQotLSAKMi4yNS4xCgo= --_011_4db7d3ea061f47a15fc6d865f53dd327ea2975fbcamelvmwarecom_ Content-Type: text/x-patch; name="v4-0009-Add-pytest-suite-for-OAuth.patch" Content-Description: v4-0009-Add-pytest-suite-for-OAuth.patch Content-Disposition: attachment; filename="v4-0009-Add-pytest-suite-for-OAuth.patch"; size=134783; creation-date="Sat, 26 Mar 2022 00:00:22 GMT"; modification-date="Sat, 26 Mar 2022 00:00:22 GMT" Content-ID: Content-Transfer-Encoding: base64 RnJvbSA2ZDhmZDllNWIzNTJmZDA4NDdjOTQ1NGNlZDJiNzYzYTZiMTFlNzNmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8cGNoYW1waW9uQHZtd2FyZS5jb20+ CkRhdGU6IEZyaSwgNCBKdW4gMjAyMSAwOTowNjozOCAtMDcwMApTdWJqZWN0OiBbUEFUQ0ggdjQg MDkvMTBdIEFkZCBweXRlc3Qgc3VpdGUgZm9yIE9BdXRoCgpSZXF1aXJlcyBQeXRob24gMzsgb24g dGhlIGZpcnN0IHJ1biBvZiBgbWFrZSBpbnN0YWxsY2hlY2tgIHRoZQpkZXBlbmRlbmNpZXMgd2ls bCBiZSBpbnN0YWxsZWQgaW50byAuL3ZlbnYgZm9yIHlvdS4gU2VlIHRoZSBSRUFETUUgZm9yCm1v cmUgZGV0YWlscy4KLS0tCiBzcmMvdGVzdC9weXRob24vLmdpdGlnbm9yZSAgICAgICAgICAgICAg ICAgfCAgICAyICsKIHNyYy90ZXN0L3B5dGhvbi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICB8 ICAgMzggKwogc3JjL3Rlc3QvcHl0aG9uL1JFQURNRSAgICAgICAgICAgICAgICAgICAgIHwgICA1 NCArKwogc3JjL3Rlc3QvcHl0aG9uL2NsaWVudC9fX2luaXRfXy5weSAgICAgICAgIHwgICAgMAog c3JjL3Rlc3QvcHl0aG9uL2NsaWVudC9jb25mdGVzdC5weSAgICAgICAgIHwgIDEyNiArKysKIHNy Yy90ZXN0L3B5dGhvbi9jbGllbnQvdGVzdF9jbGllbnQucHkgICAgICB8ICAxODAgKysrKwogc3Jj L3Rlc3QvcHl0aG9uL2NsaWVudC90ZXN0X29hdXRoLnB5ICAgICAgIHwgIDkzNiArKysrKysrKysr KysrKysrKysKIHNyYy90ZXN0L3B5dGhvbi9wcTMucHkgICAgICAgICAgICAgICAgICAgICB8ICA3 MjcgKysrKysrKysrKysrKysKIHNyYy90ZXN0L3B5dGhvbi9weXRlc3QuaW5pICAgICAgICAgICAg ICAgICB8ICAgIDQgKwogc3JjL3Rlc3QvcHl0aG9uL3JlcXVpcmVtZW50cy50eHQgICAgICAgICAg IHwgICAgNyArCiBzcmMvdGVzdC9weXRob24vc2VydmVyL19faW5pdF9fLnB5ICAgICAgICAgfCAg ICAwCiBzcmMvdGVzdC9weXRob24vc2VydmVyL2NvbmZ0ZXN0LnB5ICAgICAgICAgfCAgIDQ1ICsK IHNyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIvdGVzdF9vYXV0aC5weSAgICAgICB8IDEwMTIgKysrKysr KysrKysrKysrKysrKysKIHNyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIvdGVzdF9zZXJ2ZXIucHkgICAg ICB8ICAgMjEgKwogc3JjL3Rlc3QvcHl0aG9uL3NlcnZlci92YWxpZGF0ZV9iZWFyZXIucHkgIHwg IDEwMSArKwogc3JjL3Rlc3QvcHl0aG9uL3NlcnZlci92YWxpZGF0ZV9yZWZsZWN0LnB5IHwgICAz NCArCiBzcmMvdGVzdC9weXRob24vdGVzdF9pbnRlcm5hbHMucHkgICAgICAgICAgfCAgMTM4ICsr Kwogc3JjL3Rlc3QvcHl0aG9uL3Rlc3RfcHEzLnB5ICAgICAgICAgICAgICAgIHwgIDU1OCArKysr KysrKysrKwogc3JjL3Rlc3QvcHl0aG9uL3Rscy5weSAgICAgICAgICAgICAgICAgICAgIHwgIDE5 NSArKysrCiAxOSBmaWxlcyBjaGFuZ2VkLCA0MTc4IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9weXRob24vLmdpdGlnbm9yZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy90ZXN0L3B5dGhvbi9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3B5dGhv bi9SRUFETUUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9weXRob24vY2xpZW50L19faW5p dF9fLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcHl0aG9uL2NsaWVudC9jb25mdGVz dC5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3B5dGhvbi9jbGllbnQvdGVzdF9jbGll bnQucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9weXRob24vY2xpZW50L3Rlc3Rfb2F1 dGgucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9weXRob24vcHEzLnB5CiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL3Rlc3QvcHl0aG9uL3B5dGVzdC5pbmkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvdGVzdC9weXRob24vcmVxdWlyZW1lbnRzLnR4dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy90ZXN0L3B5dGhvbi9zZXJ2ZXIvX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv dGVzdC9weXRob24vc2VydmVyL2NvbmZ0ZXN0LnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rl c3QvcHl0aG9uL3NlcnZlci90ZXN0X29hdXRoLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rl c3QvcHl0aG9uL3NlcnZlci90ZXN0X3NlcnZlci5weQogY3JlYXRlIG1vZGUgMTAwNzU1IHNyYy90 ZXN0L3B5dGhvbi9zZXJ2ZXIvdmFsaWRhdGVfYmVhcmVyLnB5CiBjcmVhdGUgbW9kZSAxMDA3NTUg c3JjL3Rlc3QvcHl0aG9uL3NlcnZlci92YWxpZGF0ZV9yZWZsZWN0LnB5CiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL3Rlc3QvcHl0aG9uL3Rlc3RfaW50ZXJuYWxzLnB5CiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL3Rlc3QvcHl0aG9uL3Rlc3RfcHEzLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rl c3QvcHl0aG9uL3Rscy5weQoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3B5dGhvbi8uZ2l0aWdub3Jl IGIvc3JjL3Rlc3QvcHl0aG9uLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uMGU4ZjAyN2IyZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5dGhv bi8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMiBAQAorX19weWNhY2hlX18vCisvdmVudi8KZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3B5dGhvbi9NYWtlZmlsZSBiL3NyYy90ZXN0L3B5dGhvbi9NYWtlZmls ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5iMDY5NWI2Mjg3Ci0tLSAv ZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcHl0aG9uL01ha2VmaWxlCkBAIC0wLDAgKzEsMzggQEAK KyMKKyMgQ29weXJpZ2h0IDIwMjEgVk13YXJlLCBJbmMuCisjIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBQb3N0Z3JlU1FMCisjCisKKyMgT25seSBQeXRob24gMyBpcyBzdXBwb3J0ZWQsIGJ1dCBp ZiBpdCdzIG5hbWVkIHNvbWV0aGluZyBkaWZmZXJlbnQgb24geW91cgorIyBzeXN0ZW0geW91IGNh biBvdmVycmlkZSBpdCB3aXRoIHRoZSBQWVRIT04zIHZhcmlhYmxlLgorUFlUSE9OMyA6PSBweXRo b24zCisKKyMgQWxsIGRlcGVuZGVuY2llcyBhcmUgcGxhY2VkIGludG8gdGhpcyBkaXJlY3Rvcnku IFRoZSBkZWZhdWx0IGlzIC5naXRpZ25vcmVkCisjIGZvciB5b3UsIGJ1dCB5b3UgY2FuIG92ZXJy aWRlIGl0IGlmIHlvdSdkIGxpa2UuCitWRU5WIDo9IC4vdmVudgorCitvdmVycmlkZSBWQklOICAg Oj0gJChWRU5WKS9iaW4KK292ZXJyaWRlIFBJUCAgICA6PSAkKFZCSU4pL3BpcAorb3ZlcnJpZGUg UFlURVNUIDo9ICQoVkJJTikvcHkudGVzdAorb3ZlcnJpZGUgSVNPUlQgIDo9ICQoVkJJTikvaXNv cnQKK292ZXJyaWRlIEJMQUNLICA6PSAkKFZCSU4pL2JsYWNrCisKKy5QSE9OWTogaW5zdGFsbGNo ZWNrIGluZGVudAorCitpbnN0YWxsY2hlY2s6ICQoUFlURVNUKQorCSQoUFlURVNUKSAtdiAtcnMK KworaW5kZW50OiAkKElTT1JUKSAkKEJMQUNLKQorCSQoSVNPUlQpIC0tcHJvZmlsZSBibGFjayAq LnB5IGNsaWVudC8qLnB5IHNlcnZlci8qLnB5CisJJChCTEFDSykgKi5weSBjbGllbnQvKi5weSBz ZXJ2ZXIvKi5weQorCiskKFBZVEVTVCkgJChJU09SVCkgJChCTEFDSykgJjogcmVxdWlyZW1lbnRz LnR4dCB8ICQoUElQKQorCSQoUElQKSBpbnN0YWxsIC0tZm9yY2UtcmVpbnN0YWxsIC1yICQ8CisK KyQoUElQKToKKwkkKFBZVEhPTjMpIC1tIHZlbnYgJChWRU5WKQorCisjIEEgY29udmVuaWVuY2Ug cmVjaXBlIHRvIHJlYnVpbGQgcHN5Y29wZzIgYWdhaW5zdCB0aGUgbG9jYWwgbGlicHEuCisuUEhP Tlk6IHJlYnVpbGQtcHN5Y29wZzIKK3JlYnVpbGQtcHN5Y29wZzI6IHwgJChQSVApCisJJChQSVAp IGluc3RhbGwgLS1mb3JjZS1yZWluc3RhbGwgLS1uby1iaW5hcnkgOmFsbDogJChzaGVsbCBncmVw IHBzeWNvcGcyIHJlcXVpcmVtZW50cy50eHQpCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9weXRob24v UkVBRE1FIGIvc3JjL3Rlc3QvcHl0aG9uL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwLi4wYmRhNTgyYzRiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcHl0 aG9uL1JFQURNRQpAQCAtMCwwICsxLDU0IEBACitBIHRlc3Qgc3VpdGUgZm9yIGV4ZXJjaXNpbmcg Ym90aCB0aGUgbGlicHEgY2xpZW50IGFuZCB0aGUgc2VydmVyIGJhY2tlbmQgYXQgdGhlCitwcm90 b2NvbCBsZXZlbCwgYmFzZWQgb24gcHl0ZXN0IGFuZCBDb25zdHJ1Y3QuCisKK1RoZSB0ZXN0IHN1 aXRlIGN1cnJlbnRseSBhc3N1bWVzIHRoYXQgdGhlIHN0YW5kYXJkIFBHKiBlbnZpcm9ubWVudCB2 YXJpYWJsZXMKK3BvaW50IHRvIHRoZSBkYXRhYmFzZSB1bmRlciB0ZXN0IGFuZCBhcmUgc3VmZmlj aWVudCB0byBsb2cgaW4gYSBzdXBlcnVzZXIgb24KK3RoYXQgc3lzdGVtLiBJbiBvdGhlciB3b3Jk cywgYSBiYXJlIGBwc3FsYCBuZWVkcyB0byBKdXN0IFdvcmsgYmVmb3JlIHRoZSB0ZXN0CitzdWl0 ZSBjYW4gZG8gaXRzIHRoaW5nLiBGb3IgYSBuZXdseSBidWlsdCBkZXYgY2x1c3RlciwgdHlwaWNh bGx5IGFsbCB0aGF0IEkgbmVlZAordG8gZG8gaXMgYQorCisgICAgZXhwb3J0IFBHREFUQUJBU0U9 cG9zdGdyZXMKKworYnV0IHlvdSBjYW4gYWRqdXN0IGFzIG5lZWRlZCBmb3IgeW91ciBzZXR1cC4K KworIyMgUmVxdWlyZW1lbnRzCisKK0Egc3VwcG9ydGVkIHZlcnNpb24gKDMuNispIG9mIFB5dGhv bi4KKworVGhlIGZpcnN0IHJ1biBvZgorCisgICAgbWFrZSBpbnN0YWxsY2hlY2sKKword2lsbCBp bnN0YWxsIGEgbG9jYWwgdmlydHVhbCBlbnZpcm9ubWVudCBhbmQgYWxsIG5lZWRlZCBkZXBlbmRl bmNpZXMuIER1cmluZworZGV2ZWxvcG1lbnQsIGlmIGxpYnBxIGNoYW5nZXMgaW5jb21wYXRpYmx5 LCB5b3UgY2FuIGlzc3VlCisKKyAgICAkIG1ha2UgcmVidWlsZC1wc3ljb3BnMgorCit0byBmb3Jj ZSBhIHJlYnVpbGQgb2YgdGhlIGNsaWVudCBsaWJyYXJ5LgorCisjIyBIYWNraW5nCisKK1RoZSBj b2RlIHN0eWxlIGlzIGVuZm9yY2VkIGJ5IGEgX3ZlcnlfIG9waW5pb25hdGVkIGF1dG9mb3JtYXR0 ZXIuIFJ1bm5pbmcgdGhlCisKKyAgICBtYWtlIGluZGVudAorCityZWNpcGUgd2lsbCBpbnZva2Ug aXQgZm9yIHlvdSBhdXRvbWF0aWNhbGx5LiBEb24ndCBmaWdodCB0aGUgdG9vbDsgcGFydCBvZiB0 aGUKK3plbiBpcyBpbiBrbm93aW5nIHRoYXQgaWYgdGhlIGZvcm1hdHRlciBtYWtlcyB5b3VyIGNv ZGUgdWdseSwgdGhlcmUncyBwcm9iYWJseSBhCitjbGVhbmVyIHdheSB0byB3cml0ZSB5b3VyIGNv ZGUuCisKKyMjIEFkdmFuY2VkIFVzYWdlCisKK1RoZSBNYWtlZmlsZSBpcyB0aGVyZSBmb3IgY29u dmVuaWVuY2UsIGJ1dCB5b3UgZG9uJ3QgaGF2ZSB0byB1c2UgaXQuIEFjdGl2YXRlCit0aGUgdmly dHVhbGVudiB0byBiZSBhYmxlIHRvIHVzZSBweXRlc3QgZGlyZWN0bHk6CisKKyAgICAkIHNvdXJj ZSB2ZW52L2Jpbi9hY3RpdmF0ZQorICAgICQgcHkudGVzdCAtayBvYXV0aAorICAgIC4uLgorICAg ICQgcHkudGVzdCAuL3NlcnZlci90ZXN0X3NlcnZlci5weQorICAgIC4uLgorICAgICQgZGVhY3Rp dmF0ZSAgIyBwdXRzIHRoZSBQQVRIIGV0IGFsIGJhY2sgdGhlIHdheSBpdCB3YXMgYmVmb3JlCisK K1RvIG1ha2UgcXVpY2sgc21va2UgdGVzdHMgcG9zc2libGUsIHNsb3cgdGVzdHMgaGF2ZSBiZWVu IG1hcmtlZCBleHBsaWNpdGx5LiBZb3UKK2NhbiBza2lwIHRoZW0gYnkgc2F5aW5nIGUuZy4KKwor ICAgICQgcHkudGVzdCAtbSAnbm90IHNsb3cnCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9weXRob24v Y2xpZW50L19faW5pdF9fLnB5IGIvc3JjL3Rlc3QvcHl0aG9uL2NsaWVudC9fX2luaXRfXy5weQpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5lNjlkZTI5YmIyCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9weXRob24vY2xpZW50L2NvbmZ0ZXN0LnB5IGIvc3JjL3Rlc3QvcHl0aG9u L2NsaWVudC9jb25mdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li5mMzhkYTdhMTM4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcHl0aG9uL2NsaWVudC9j b25mdGVzdC5weQpAQCAtMCwwICsxLDEyNiBAQAorIworIyBDb3B5cmlnaHQgMjAyMSBWTXdhcmUs IEluYy4KKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IFBvc3RncmVTUUwKKyMKKworaW1wb3J0 IHNvY2tldAoraW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworCitpbXBvcnQgcHN5Y29wZzIK K2ltcG9ydCBweXRlc3QKKworaW1wb3J0IHBxMworCitCTE9DS0lOR19USU1FT1VUID0gMiAgIyB0 aGUgbnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdCBmb3IgYmxvY2tpbmcgY2FsbHMKKworCitAcHl0 ZXN0LmZpeHR1cmUKK2RlZiBzZXJ2ZXJfc29ja2V0KHVudXNlZF90Y3BfcG9ydF9mYWN0b3J5KToK KyAgICAiIiIKKyAgICBSZXR1cm5zIGEgbGlzdGVuaW5nIHNvY2tldCBib3VuZCB0byBhbiBlcGhl bWVyYWwgcG9ydC4KKyAgICAiIiIKKyAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lO RVQsIHNvY2tldC5TT0NLX1NUUkVBTSkgYXMgczoKKyAgICAgICAgcy5iaW5kKCgiMTI3LjAuMC4x IiwgdW51c2VkX3RjcF9wb3J0X2ZhY3RvcnkoKSkpCisgICAgICAgIHMubGlzdGVuKDEpCisgICAg ICAgIHMuc2V0dGltZW91dChCTE9DS0lOR19USU1FT1VUKQorICAgICAgICB5aWVsZCBzCisKKwor Y2xhc3MgQ2xpZW50SGFuZHNoYWtlKHRocmVhZGluZy5UaHJlYWQpOgorICAgICIiIgorICAgIEEg dGhyZWFkIHRoYXQgY29ubmVjdHMgdG8gYSBsb2NhbCBQb3N0Z3JlcyBzZXJ2ZXIgdXNpbmcgcHN5 Y29wZzIuIE9uY2UgdGhlCisgICAgb3BlbmluZyBoYW5kc2hha2UgY29tcGxldGVzLCB0aGUgY29u bmVjdGlvbiB3aWxsIGJlIGltbWVkaWF0ZWx5IGNsb3NlZC4KKyAgICAiIiIKKworICAgIGRlZiBf X2luaXRfXyhzZWxmLCAqLCBwb3J0LCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKCkuX19pbml0 X18oKQorCisgICAgICAgIGt3YXJnc1sicG9ydCJdID0gcG9ydAorICAgICAgICBzZWxmLl9rd2Fy Z3MgPSBrd2FyZ3MKKworICAgICAgICBzZWxmLmV4Y2VwdGlvbiA9IE5vbmUKKworICAgIGRlZiBy dW4oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbm4gPSBwc3ljb3BnMi5jb25u ZWN0KGhvc3Q9IjEyNy4wLjAuMSIsICoqc2VsZi5fa3dhcmdzKQorICAgICAgICAgICAgY29ubi5j bG9zZSgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHNlbGYu ZXhjZXB0aW9uID0gZQorCisgICAgZGVmIGNoZWNrX2NvbXBsZXRlZChzZWxmLCB0aW1lb3V0PUJM T0NLSU5HX1RJTUVPVVQpOgorICAgICAgICAiIiIKKyAgICAgICAgSm9pbnMgdGhlIGNsaWVudCB0 aHJlYWQuIFJhaXNlcyBhbiBleGNlcHRpb24gaWYgdGhlIHRocmVhZCBjb3VsZCBub3QgYmUKKyAg ICAgICAgam9pbmVkLCBvciBpZiBpdCB0aHJldyBhbiBleGNlcHRpb24gaXRzZWxmLiAoVGhlIGV4 Y2VwdGlvbiB3aWxsIGJlCisgICAgICAgIGNsZWFyZWQsIHNvIGZ1dHVyZSBjYWxscyB0byBjaGVj a19jb21wbGV0ZWQgd2lsbCBzdWNjZWVkLikKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuam9p bih0aW1lb3V0KQorCisgICAgICAgIGlmIHNlbGYuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHJh aXNlIFRpbWVvdXRFcnJvcigiY2xpZW50IHRocmVhZCBkaWQgbm90IGhhbmRzaGFrZSB3aXRoaW4g dGhlIHRpbWVvdXQiKQorICAgICAgICBlbGlmIHNlbGYuZXhjZXB0aW9uOgorICAgICAgICAgICAg ZSA9IHNlbGYuZXhjZXB0aW9uCisgICAgICAgICAgICBzZWxmLmV4Y2VwdGlvbiA9IE5vbmUKKyAg ICAgICAgICAgIHJhaXNlIGUKKworCitAcHl0ZXN0LmZpeHR1cmUKK2RlZiBhY2NlcHQoc2VydmVy X3NvY2tldCk6CisgICAgIiIiCisgICAgUmV0dXJucyBhIGZhY3RvcnkgZnVuY3Rpb24gdGhhdCwg d2hlbiBjYWxsZWQsIHJldHVybnMgYSBwYWlyIChzb2NrLCBjbGllbnQpCisgICAgd2hlcmUgc29j ayBpcyBhIHNlcnZlciBzb2NrZXQgdGhhdCBoYXMgYWNjZXB0ZWQgYSBjb25uZWN0aW9uIGZyb20g Y2xpZW50LAorICAgIGFuZCBjbGllbnQgaXMgYW4gaW5zdGFuY2Ugb2YgQ2xpZW50SGFuZHNoYWtl LiBDbGllbnRzIHdpbGwgY29tcGxldGUgdGhlaXIKKyAgICBoYW5kc2hha2VzIGFuZCBjbGVhbmx5 IGRpc2Nvbm5lY3QuCisKKyAgICBUaGUgZGVmYXVsdCBjb25uc3RyaW5nIG9wdGlvbnMgbWF5IGJl IGV4dGVuZGVkIG9yIG92ZXJyaWRkZW4gYnkgcGFzc2luZworICAgIGFyYml0cmFyeSBrZXl3b3Jk IGFyZ3VtZW50cy4gS2VlcCBpbiBtaW5kIHRoYXQgeW91IGdlbmVyYWxseSBzaG91bGQgbm90Cisg ICAgb3ZlcnJpZGUgdGhlIGhvc3Qgb3IgcG9ydCwgc2luY2UgdGhleSBwb2ludCB0byB0aGUgbG9j YWwgdGVzdCBzZXJ2ZXIuCisKKyAgICBGb3Igc2l0dWF0aW9ucyB3aGVyZSBhIGNsaWVudCBuZWVk cyB0byBjb25uZWN0IG1vcmUgdGhhbiBvbmNlIHRvIGNvbXBsZXRlIGEKKyAgICBoYW5kc2hha2Us IHRoZSBhY2NlcHQgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZS4gKFRoZSBj bGllbnQKKyAgICByZXR1cm5lZCBmb3Igc3Vic2VxdWVudCBjYWxscyB3aWxsIGFsd2F5cyBiZSB0 aGUgc2FtZSBjbGllbnQgdGhhdCB3YXMKKyAgICByZXR1cm5lZCBmb3IgdGhlIGZpcnN0IGNhbGwu KQorCisgICAgVGVzdHMgbXVzdCBlaXRoZXIgY29tcGxldGUgdGhlIGhhbmRzaGFrZSBzbyB0aGF0 IHRoZSBjbGllbnQgdGhyZWFkIGNhbiBiZQorICAgIGF1dG9tYXRpY2FsbHkgam9pbmVkIGR1cmlu ZyB0ZWFyZG93biwgb3IgZWxzZSBjYWxsIGNsaWVudC5jaGVja19jb21wbGV0ZWQoKQorICAgIGFu ZCBtYW51YWxseSBoYW5kbGUgYW55IGV4cGVjdGVkIGVycm9ycy4KKyAgICAiIiIKKyAgICBfLCBw b3J0ID0gc2VydmVyX3NvY2tldC5nZXRzb2NrbmFtZSgpCisKKyAgICBjbGllbnQgPSBOb25lCisg ICAgZGVmYXVsdF9vcHRzID0gZGljdCgKKyAgICAgICAgcG9ydD1wb3J0LAorICAgICAgICB1c2Vy PXBxMy5wZ3VzZXIoKSwKKyAgICAgICAgc3NsbW9kZT0iZGlzYWJsZSIsCisgICAgKQorCisgICAg ZGVmIGZhY3RvcnkoKiprd2FyZ3MpOgorICAgICAgICBub25sb2NhbCBjbGllbnQKKworICAgICAg ICBpZiBjbGllbnQgaXMgTm9uZToKKyAgICAgICAgICAgIG9wdHMgPSBkaWN0KGRlZmF1bHRfb3B0 cykKKyAgICAgICAgICAgIG9wdHMudXBkYXRlKGt3YXJncykKKworICAgICAgICAgICAgIyBUaGUg c2VydmVyX3NvY2tldCBpcyBhbHJlYWR5IGxpc3RlbmluZywgc28gdGhlIGNsaWVudCB0aHJlYWQg Y2FuCisgICAgICAgICAgICAjIGJlIHNhZmVseSBzdGFydGVkOyBpdCdsbCBibG9jayBvbiB0aGUg Y29ubmVjdGlvbiB1bnRpbCB3ZSBhY2NlcHQuCisgICAgICAgICAgICBjbGllbnQgPSBDbGllbnRI YW5kc2hha2UoKipvcHRzKQorICAgICAgICAgICAgY2xpZW50LnN0YXJ0KCkKKworICAgICAgICBz b2NrLCBfID0gc2VydmVyX3NvY2tldC5hY2NlcHQoKQorICAgICAgICByZXR1cm4gc29jaywgY2xp ZW50CisKKyAgICB5aWVsZCBmYWN0b3J5CisgICAgY2xpZW50LmNoZWNrX2NvbXBsZXRlZCgpCisK KworQHB5dGVzdC5maXh0dXJlCitkZWYgY29ubihhY2NlcHQpOgorICAgICIiIgorICAgIFJldHVy bnMgYW4gYWNjZXB0ZWQsIHdyYXBwZWQgcHEzIGNvbm5lY3Rpb24gdG8gYSBwc3ljb3BnMiBjbGll bnQuIFRoZSBzb2NrZXQKKyAgICB3aWxsIGJlIGNsb3NlZCB3aGVuIHRoZSB0ZXN0IGZpbmlzaGVz LCBhbmQgdGhlIGNsaWVudCB3aWxsIGJlIGNoZWNrZWQgZm9yIGEKKyAgICBjbGVhbmx5IGNvbXBs ZXRlZCBoYW5kc2hha2UuCisgICAgIiIiCisgICAgc29jaywgY2xpZW50ID0gYWNjZXB0KCkKKyAg ICB3aXRoIHNvY2s6CisgICAgICAgIHdpdGggcHEzLndyYXAoc29jaywgZGVidWdfc3RyZWFtPXN5 cy5zdGRvdXQpIGFzIGNvbm46CisgICAgICAgICAgICB5aWVsZCBjb25uCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9weXRob24vY2xpZW50L3Rlc3RfY2xpZW50LnB5IGIvc3JjL3Rlc3QvcHl0aG9uL2Ns aWVudC90ZXN0X2NsaWVudC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li5jNGM5NDZmZGE0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcHl0aG9uL2NsaWVudC90 ZXN0X2NsaWVudC5weQpAQCAtMCwwICsxLDE4MCBAQAorIworIyBDb3B5cmlnaHQgMjAyMSBWTXdh cmUsIEluYy4KKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IFBvc3RncmVTUUwKKyMKKworaW1w b3J0IGJhc2U2NAoraW1wb3J0IHN5cworCitpbXBvcnQgcHN5Y29wZzIKK2ltcG9ydCBweXRlc3QK K2Zyb20gY3J5cHRvZ3JhcGh5Lmhhem1hdC5wcmltaXRpdmVzIGltcG9ydCBoYXNoZXMsIGhtYWMK KworaW1wb3J0IHBxMworCisKK2RlZiBmaW5pc2hfaGFuZHNoYWtlKGNvbm4pOgorICAgICIiIgor ICAgIFNlbmRzIHRoZSBBdXRoZW50aWNhdGlvbk9LIG1lc3NhZ2UgYW5kIHRoZSBzdGFuZGFyZCBv cGVuaW5nIHNhbHZvIG9mIHNlcnZlcgorICAgIG1lc3NhZ2VzLCB0aGVuIGFzc2VydHMgdGhhdCB0 aGUgY2xpZW50IGltbWVkaWF0ZWx5IHNlbmRzIGEgVGVybWluYXRlIG1lc3NhZ2UKKyAgICB0byBj bG9zZSB0aGUgY29ubmVjdGlvbiBjbGVhbmx5LgorICAgICIiIgorICAgIHBxMy5zZW5kKGNvbm4s IHBxMy50eXBlcy5BdXRoblJlcXVlc3QsIHR5cGU9cHEzLmF1dGhuLk9LKQorICAgIHBxMy5zZW5k KGNvbm4sIHBxMy50eXBlcy5QYXJhbWV0ZXJTdGF0dXMsIG5hbWU9YiJjbGllbnRfZW5jb2Rpbmci LCB2YWx1ZT1iIlVURi04IikKKyAgICBwcTMuc2VuZChjb25uLCBwcTMudHlwZXMuUGFyYW1ldGVy U3RhdHVzLCBuYW1lPWIiRGF0ZVN0eWxlIiwgdmFsdWU9YiJJU08sIE1EWSIpCisgICAgcHEzLnNl bmQoY29ubiwgcHEzLnR5cGVzLlJlYWR5Rm9yUXVlcnksIHN0YXR1cz1iIkkiKQorCisgICAgcGt0 ID0gcHEzLnJlY3YxKGNvbm4pCisgICAgYXNzZXJ0IHBrdC50eXBlID09IHBxMy50eXBlcy5UZXJt aW5hdGUKKworCitkZWYgdGVzdF9oYW5kc2hha2UoY29ubik6CisgICAgc3RhcnR1cCA9IHBxMy5y ZWN2MShjb25uLCBjbHM9cHEzLlN0YXJ0dXApCisgICAgYXNzZXJ0IHN0YXJ0dXAucHJvdG8gPT0g cHEzLnByb3RvY29sKDMsIDApCisKKyAgICBmaW5pc2hfaGFuZHNoYWtlKGNvbm4pCisKKworZGVm IHRlc3RfYWJvcnRlZF9jb25uZWN0aW9uKGFjY2VwdCk6CisgICAgIiIiCisgICAgTWFrZSBzdXJl IHRoZSBjbGllbnQgY29ycmVjdGx5IHJlcG9ydHMgYW4gZWFybHkgY2xvc2UgZHVyaW5nIGhhbmRz aGFrZXMuCisgICAgIiIiCisgICAgc29jaywgY2xpZW50ID0gYWNjZXB0KCkKKyAgICBzb2NrLmNs b3NlKCkKKworICAgIGV4cGVjdGVkID0gInNlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gdW5l eHBlY3RlZGx5IgorICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhwc3ljb3BnMi5PcGVyYXRpb25hbEVy cm9yLCBtYXRjaD1leHBlY3RlZCk6CisgICAgICAgIGNsaWVudC5jaGVja19jb21wbGV0ZWQoKQor CisKKyMKKyMgU0NSQU0tU0hBLTI1NiAoc2VlIFJGQyA1ODAyOiBodHRwczovL3Rvb2xzLmlldGYu b3JnL2h0bWwvcmZjNTgwMikKKyMKKworCitAcHl0ZXN0LmZpeHR1cmUKK2RlZiBwYXNzd29yZCgp OgorICAgICIiIgorICAgIFJldHVybnMgYSBwYXNzd29yZCBmb3IgdXNlIGJ5IGJvdGggY2xpZW50 IGFuZCBzZXJ2ZXIuCisgICAgIiIiCisgICAgIyBUT0RPOiBwYXJhbWV0ZXJpemUgdGhpcyB3aXRo IHBhc3N3b3JkcyB0aGF0IHJlcXVpcmUgU0FTTHByZXAuCisgICAgcmV0dXJuICJzZWNyZXQiCisK KworQHB5dGVzdC5maXh0dXJlCitkZWYgcHdjb25uKGFjY2VwdCwgcGFzc3dvcmQpOgorICAgICIi IgorICAgIExpa2UgdGhlIGNvbm4gZml4dHVyZSwgYnV0IHVzZXMgYSBwYXNzd29yZCBpbiB0aGUg Y29ubmVjdGlvbi4KKyAgICAiIiIKKyAgICBzb2NrLCBjbGllbnQgPSBhY2NlcHQocGFzc3dvcmQ9 cGFzc3dvcmQpCisgICAgd2l0aCBzb2NrOgorICAgICAgICB3aXRoIHBxMy53cmFwKHNvY2ssIGRl YnVnX3N0cmVhbT1zeXMuc3Rkb3V0KSBhcyBjb25uOgorICAgICAgICAgICAgeWllbGQgY29ubgor CisKK2RlZiBzaGEyNTYoZGF0YSk6CisgICAgIiIiVGhlIEgoc3RyKSBmdW5jdGlvbiBmcm9tIFNl Y3Rpb24gMi4yLiIiIgorICAgIGRpZ2VzdCA9IGhhc2hlcy5IYXNoKGhhc2hlcy5TSEEyNTYoKSkK KyAgICBkaWdlc3QudXBkYXRlKGRhdGEpCisgICAgcmV0dXJuIGRpZ2VzdC5maW5hbGl6ZSgpCisK KworZGVmIGhtYWNfMjU2KGtleSwgZGF0YSk6CisgICAgIiIiVGhlIEhNQUMoa2V5LCBzdHIpIGZ1 bmN0aW9uIGZyb20gU2VjdGlvbiAyLjIuIiIiCisgICAgaCA9IGhtYWMuSE1BQyhrZXksIGhhc2hl cy5TSEEyNTYoKSkKKyAgICBoLnVwZGF0ZShkYXRhKQorICAgIHJldHVybiBoLmZpbmFsaXplKCkK KworCitkZWYgeG9yKGEsIGIpOgorICAgICIiIlRoZSBYT1Igb3BlcmF0aW9uIGZyb20gU2VjdGlv biAyLjIuIiIiCisgICAgcmVzID0gYnl0ZWFycmF5KGEpCisgICAgZm9yIGksIGJ5dGUgaW4gZW51 bWVyYXRlKGIpOgorICAgICAgICByZXNbaV0gXj0gYnl0ZQorICAgIHJldHVybiBieXRlcyhyZXMp CisKKworZGVmIGhfaShkYXRhLCBzYWx0LCBpKToKKyAgICAiIiJUaGUgSGkoc3RyLCBzYWx0LCBp KSBmdW5jdGlvbiBmcm9tIFNlY3Rpb24gMi4yLiIiIgorICAgIGFzc2VydCBpID4gMAorCisgICAg YWNjID0gaG1hY18yNTYoZGF0YSwgc2FsdCArIGIiXHgwMFx4MDBceDAwXHgwMSIpCisgICAgbGFz dCA9IGFjYworICAgIGkgLT0gMQorCisgICAgd2hpbGUgaToKKyAgICAgICAgdSA9IGhtYWNfMjU2 KGRhdGEsIGxhc3QpCisgICAgICAgIGFjYyA9IHhvcihhY2MsIHUpCisKKyAgICAgICAgbGFzdCA9 IHUKKyAgICAgICAgaSAtPSAxCisKKyAgICByZXR1cm4gYWNjCisKKworZGVmIHRlc3Rfc2NyYW0o cHdjb25uLCBwYXNzd29yZCk6CisgICAgc3RhcnR1cCA9IHBxMy5yZWN2MShwd2Nvbm4sIGNscz1w cTMuU3RhcnR1cCkKKyAgICBhc3NlcnQgc3RhcnR1cC5wcm90byA9PSBwcTMucHJvdG9jb2woMywg MCkKKworICAgIHBxMy5zZW5kKAorICAgICAgICBwd2Nvbm4sCisgICAgICAgIHBxMy50eXBlcy5B dXRoblJlcXVlc3QsCisgICAgICAgIHR5cGU9cHEzLmF1dGhuLlNBU0wsCisgICAgICAgIGJvZHk9 W2IiU0NSQU0tU0hBLTI1NiIsIGIiIl0sCisgICAgKQorCisgICAgIyBHZXQgdGhlIGNsaWVudC1m aXJzdC1tZXNzYWdlLgorICAgIHBrdCA9IHBxMy5yZWN2MShwd2Nvbm4pCisgICAgYXNzZXJ0IHBr dC50eXBlID09IHBxMy50eXBlcy5QYXNzd29yZE1lc3NhZ2UKKworICAgIGluaXRpYWwgPSBwcTMu U0FTTEluaXRpYWxSZXNwb25zZS5wYXJzZShwa3QucGF5bG9hZCkKKyAgICBhc3NlcnQgaW5pdGlh bC5uYW1lID09IGIiU0NSQU0tU0hBLTI1NiIKKworICAgIGNfYmluZCwgYXV0aHppZCwgY19uYW1l LCBjX25vbmNlID0gaW5pdGlhbC5kYXRhLnNwbGl0KGIiLCIpCisgICAgYXNzZXJ0IGNfYmluZCA9 PSBiIm4iICAjIG5vIGNoYW5uZWwgYmluZGluZ3Mgb24gYSBwbGFpbnRleHQgY29ubmVjdGlvbgor ICAgIGFzc2VydCBhdXRoemlkID09IGIiIiAgIyB3ZSBkb24ndCBzdXBwb3J0IGF1dGh6aWQgY3Vy cmVudGx5CisgICAgYXNzZXJ0IGNfbmFtZSA9PSBiIm49IiAgIyBsaWJwcSBkb2Vzbid0IGhvbm9y IHRoZSBHUzIgdXNlcm5hbWUKKyAgICBhc3NlcnQgY19ub25jZS5zdGFydHN3aXRoKGIicj0iKQor CisgICAgIyBTZW5kIHRoZSBzZXJ2ZXItZmlyc3QtbWVzc2FnZS4KKyAgICBzYWx0ID0gYiIxMjM0 NSIKKyAgICBpdGVyYXRpb25zID0gMgorCisgICAgc19ub25jZSA9IGNfbm9uY2UgKyBiInNvbWVu b25jZSIKKyAgICBzX3NhbHQgPSBiInM9IiArIGJhc2U2NC5iNjRlbmNvZGUoc2FsdCkKKyAgICBz X2l0ZXJhdGlvbnMgPSBiImk9JWQiICUgaXRlcmF0aW9ucworCisgICAgbXNnID0gYiIsIi5qb2lu KFtzX25vbmNlLCBzX3NhbHQsIHNfaXRlcmF0aW9uc10pCisgICAgcHEzLnNlbmQocHdjb25uLCBw cTMudHlwZXMuQXV0aG5SZXF1ZXN0LCB0eXBlPXBxMy5hdXRobi5TQVNMQ29udGludWUsIGJvZHk9 bXNnKQorCisgICAgIyBHZXQgdGhlIGNsaWVudC1maW5hbC1tZXNzYWdlLgorICAgIHBrdCA9IHBx My5yZWN2MShwd2Nvbm4pCisgICAgYXNzZXJ0IHBrdC50eXBlID09IHBxMy50eXBlcy5QYXNzd29y ZE1lc3NhZ2UKKworICAgIGNfYmluZF9maW5hbCwgY19ub25jZV9maW5hbCwgY19wcm9vZiA9IHBr dC5wYXlsb2FkLnNwbGl0KGIiLCIpCisgICAgYXNzZXJ0IGNfYmluZF9maW5hbCA9PSBiImM9IiAr IGJhc2U2NC5iNjRlbmNvZGUoY19iaW5kICsgYiIsIiArIGF1dGh6aWQgKyBiIiwiKQorICAgIGFz c2VydCBjX25vbmNlX2ZpbmFsID09IHNfbm9uY2UKKworICAgICMgQ2FsY3VsYXRlIHdoYXQgdGhl IGNsaWVudCBwcm9vZiBzaG91bGQgYmUuCisgICAgc2FsdGVkX3Bhc3N3b3JkID0gaF9pKHBhc3N3 b3JkLmVuY29kZSgiYXNjaWkiKSwgc2FsdCwgaXRlcmF0aW9ucykKKyAgICBjbGllbnRfa2V5ID0g aG1hY18yNTYoc2FsdGVkX3Bhc3N3b3JkLCBiIkNsaWVudCBLZXkiKQorICAgIHN0b3JlZF9rZXkg PSBzaGEyNTYoY2xpZW50X2tleSkKKworICAgIGF1dGhfbWVzc2FnZSA9IGIiLCIuam9pbigKKyAg ICAgICAgW2NfbmFtZSwgY19ub25jZSwgc19ub25jZSwgc19zYWx0LCBzX2l0ZXJhdGlvbnMsIGNf YmluZF9maW5hbCwgY19ub25jZV9maW5hbF0KKyAgICApCisgICAgY2xpZW50X3NpZ25hdHVyZSA9 IGhtYWNfMjU2KHN0b3JlZF9rZXksIGF1dGhfbWVzc2FnZSkKKyAgICBjbGllbnRfcHJvb2YgPSB4 b3IoY2xpZW50X2tleSwgY2xpZW50X3NpZ25hdHVyZSkKKworICAgIGV4cGVjdGVkID0gYiJwPSIg KyBiYXNlNjQuYjY0ZW5jb2RlKGNsaWVudF9wcm9vZikKKyAgICBhc3NlcnQgY19wcm9vZiA9PSBl eHBlY3RlZAorCisgICAgIyBTZW5kIHRoZSBjb3JyZWN0IHNlcnZlciBzaWduYXR1cmUuCisgICAg c2VydmVyX2tleSA9IGhtYWNfMjU2KHNhbHRlZF9wYXNzd29yZCwgYiJTZXJ2ZXIgS2V5IikKKyAg ICBzZXJ2ZXJfc2lnbmF0dXJlID0gaG1hY18yNTYoc2VydmVyX2tleSwgYXV0aF9tZXNzYWdlKQor CisgICAgc192ZXJpZnkgPSBiInY9IiArIGJhc2U2NC5iNjRlbmNvZGUoc2VydmVyX3NpZ25hdHVy ZSkKKyAgICBwcTMuc2VuZChwd2Nvbm4sIHBxMy50eXBlcy5BdXRoblJlcXVlc3QsIHR5cGU9cHEz LmF1dGhuLlNBU0xGaW5hbCwgYm9keT1zX3ZlcmlmeSkKKworICAgICMgRG9uZSEKKyAgICBmaW5p c2hfaGFuZHNoYWtlKHB3Y29ubikKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3B5dGhvbi9jbGllbnQv dGVzdF9vYXV0aC5weSBiL3NyYy90ZXN0L3B5dGhvbi9jbGllbnQvdGVzdF9vYXV0aC5weQpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5hNzU0YTljMGI2Ci0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3Rlc3QvcHl0aG9uL2NsaWVudC90ZXN0X29hdXRoLnB5CkBAIC0wLDAgKzEs OTM2IEBACisjCisjIENvcHlyaWdodCAyMDIxIFZNd2FyZSwgSW5jLgorIyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogUG9zdGdyZVNRTAorIworCitpbXBvcnQgYmFzZTY0CitpbXBvcnQgaHR0cC5z ZXJ2ZXIKK2ltcG9ydCBqc29uCitpbXBvcnQgc2VjcmV0cworaW1wb3J0IHN5cworaW1wb3J0IHRo cmVhZGluZworaW1wb3J0IHRpbWUKK2ltcG9ydCB1cmxsaWIucGFyc2UKKworaW1wb3J0IHBzeWNv cGcyCitpbXBvcnQgcHl0ZXN0CisKK2ltcG9ydCBwcTMKKworZnJvbSAuY29uZnRlc3QgaW1wb3J0 IEJMT0NLSU5HX1RJTUVPVVQKKworCitkZWYgZmluaXNoX2hhbmRzaGFrZShjb25uKToKKyAgICAi IiIKKyAgICBTZW5kcyB0aGUgQXV0aGVudGljYXRpb25PSyBtZXNzYWdlIGFuZCB0aGUgc3RhbmRh cmQgb3BlbmluZyBzYWx2byBvZiBzZXJ2ZXIKKyAgICBtZXNzYWdlcywgdGhlbiBhc3NlcnRzIHRo YXQgdGhlIGNsaWVudCBpbW1lZGlhdGVseSBzZW5kcyBhIFRlcm1pbmF0ZSBtZXNzYWdlCisgICAg dG8gY2xvc2UgdGhlIGNvbm5lY3Rpb24gY2xlYW5seS4KKyAgICAiIiIKKyAgICBwcTMuc2VuZChj b25uLCBwcTMudHlwZXMuQXV0aG5SZXF1ZXN0LCB0eXBlPXBxMy5hdXRobi5PSykKKyAgICBwcTMu c2VuZChjb25uLCBwcTMudHlwZXMuUGFyYW1ldGVyU3RhdHVzLCBuYW1lPWIiY2xpZW50X2VuY29k aW5nIiwgdmFsdWU9YiJVVEYtOCIpCisgICAgcHEzLnNlbmQoY29ubiwgcHEzLnR5cGVzLlBhcmFt ZXRlclN0YXR1cywgbmFtZT1iIkRhdGVTdHlsZSIsIHZhbHVlPWIiSVNPLCBNRFkiKQorICAgIHBx My5zZW5kKGNvbm4sIHBxMy50eXBlcy5SZWFkeUZvclF1ZXJ5LCBzdGF0dXM9YiJJIikKKworICAg IHBrdCA9IHBxMy5yZWN2MShjb25uKQorICAgIGFzc2VydCBwa3QudHlwZSA9PSBwcTMudHlwZXMu VGVybWluYXRlCisKKworIworIyBPQVVUSEJFQVJFUiAoc2VlIFJGQyA3NjI4OiBodHRwczovL3Rv b2xzLmlldGYub3JnL2h0bWwvcmZjNzYyOCkKKyMKKworCitkZWYgc3RhcnRfb2F1dGhfaGFuZHNo YWtlKGNvbm4pOgorICAgICIiIgorICAgIE5lZ290aWF0ZXMgYW4gT0FVVEhCRUFSRVIgU0FTTCBj aGFsbGVuZ2UuIFJldHVybnMgdGhlIGNsaWVudCdzIGluaXRpYWwKKyAgICByZXNwb25zZSBkYXRh LgorICAgICIiIgorICAgIHN0YXJ0dXAgPSBwcTMucmVjdjEoY29ubiwgY2xzPXBxMy5TdGFydHVw KQorICAgIGFzc2VydCBzdGFydHVwLnByb3RvID09IHBxMy5wcm90b2NvbCgzLCAwKQorCisgICAg cHEzLnNlbmQoCisgICAgICAgIGNvbm4sIHBxMy50eXBlcy5BdXRoblJlcXVlc3QsIHR5cGU9cHEz LmF1dGhuLlNBU0wsIGJvZHk9W2IiT0FVVEhCRUFSRVIiLCBiIiJdCisgICAgKQorCisgICAgcGt0 ID0gcHEzLnJlY3YxKGNvbm4pCisgICAgYXNzZXJ0IHBrdC50eXBlID09IHBxMy50eXBlcy5QYXNz d29yZE1lc3NhZ2UKKworICAgIGluaXRpYWwgPSBwcTMuU0FTTEluaXRpYWxSZXNwb25zZS5wYXJz ZShwa3QucGF5bG9hZCkKKyAgICBhc3NlcnQgaW5pdGlhbC5uYW1lID09IGIiT0FVVEhCRUFSRVIi CisKKyAgICByZXR1cm4gaW5pdGlhbC5kYXRhCisKKworZGVmIGdldF9hdXRoX3ZhbHVlKGluaXRp YWwpOgorICAgICIiIgorICAgIEZpbmRzIHRoZSBhdXRoIHZhbHVlIChlLmcuICJCZWFyZXIgc29t ZWRhdGEuLi4iIGluIHRoZSBjbGllbnQncyBpbml0aWFsIFNBU0wKKyAgICByZXNwb25zZS4KKyAg ICAiIiIKKyAgICBrdnBhaXJzID0gaW5pdGlhbC5zcGxpdChiIlx4MDEiKQorICAgIGFzc2VydCBr dnBhaXJzWzBdID09IGIibiwsIiAgIyBubyBjaGFubmVsIGJpbmRpbmcgb3IgYXV0aHppZAorICAg IGFzc2VydCBrdnBhaXJzWzJdID09IGIiIiAgIyBlbmRzIHdpdGggYW4gZW1wdHkga3ZwYWlyCisg ICAgYXNzZXJ0IGt2cGFpcnNbM10gPT0gYiIiICAjIC4uLmFuZCB0aGVyZSdzIG5vdGhpbmcgYWZ0 ZXIgaXQKKyAgICBhc3NlcnQgbGVuKGt2cGFpcnMpID09IDQKKworICAgIGtleSwgdmFsdWUgPSBr dnBhaXJzWzFdLnNwbGl0KGIiPSIsIDIpCisgICAgYXNzZXJ0IGtleSA9PSBiImF1dGgiCisKKyAg ICByZXR1cm4gdmFsdWUKKworCitkZWYgeHRlc3Rfb2F1dGhfc3VjY2Vzcyhjb25uKTogICMgVE9E TworICAgIGluaXRpYWwgPSBzdGFydF9vYXV0aF9oYW5kc2hha2UoY29ubikKKworICAgIGF1dGgg PSBnZXRfYXV0aF92YWx1ZShpbml0aWFsKQorICAgIGFzc2VydCBhdXRoLnN0YXJ0c3dpdGgoYiJC ZWFyZXIgIikKKworICAgICMgQWNjZXB0IHRoZSB0b2tlbi4gVE9ETyBhY3R1YWxseSB2YWxpZGF0 ZQorICAgIHBxMy5zZW5kKGNvbm4sIHBxMy50eXBlcy5BdXRoblJlcXVlc3QsIHR5cGU9cHEzLmF1 dGhuLlNBU0xGaW5hbCkKKyAgICBmaW5pc2hfaGFuZHNoYWtlKGNvbm4pCisKKworY2xhc3MgT3Bl bklEUHJvdmlkZXIodGhyZWFkaW5nLlRocmVhZCk6CisgICAgIiIiCisgICAgQSB0aHJlYWQgdGhh dCBydW5zIGEgbW9jayBPcGVuSUQgcHJvdmlkZXIgc2VydmVyLgorICAgICIiIgorCisgICAgZGVm IF9faW5pdF9fKHNlbGYsICosIHBvcnQpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKwor ICAgICAgICBzZWxmLmV4Y2VwdGlvbiA9IE5vbmUKKworICAgICAgICBhZGRyID0gKCIiLCBwb3J0 KQorICAgICAgICBzZWxmLnNlcnZlciA9IHNlbGYuX1NlcnZlcihhZGRyLCBzZWxmLl9IYW5kbGVy KQorCisgICAgICAgICMgVE9ETzogYWxsb3cgSFRUUFMgb25seSwgc29tZWhvdworICAgICAgICBv YXV0aCA9IHNlbGYuX09BdXRoU3RhdGUoKQorICAgICAgICBvYXV0aC5ob3N0ID0gZiJsb2NhbGhv c3Q6e3BvcnR9IgorICAgICAgICBvYXV0aC5pc3N1ZXIgPSBmImh0dHA6Ly9sb2NhbGhvc3Q6e3Bv cnR9IgorCisgICAgICAgICMgVGhlIGZvbGxvd2luZyBlbmRwb2ludHMgYXJlIHJlcXVpcmVkIHRv IGJlIGFkdmVydGlzZWQgYnkgcHJvdmlkZXJzLAorICAgICAgICAjIGV2ZW4gdGhvdWdoIG91ciBj aG9zZW4gY2xpZW50IGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGFjdHVhbGx5IG1ha2UKKyAgICAg ICAgIyB1c2Ugb2YgdGhlbS4KKyAgICAgICAgb2F1dGgucmVnaXN0ZXJfZW5kcG9pbnQoCisgICAg ICAgICAgICAiYXV0aG9yaXphdGlvbl9lbmRwb2ludCIsICJQT1NUIiwgIi9hdXRob3JpemUiLCBz ZWxmLl9hdXRob3JpemF0aW9uX2hhbmRsZXIKKyAgICAgICAgKQorICAgICAgICBvYXV0aC5yZWdp c3Rlcl9lbmRwb2ludCgiandrc191cmkiLCAiR0VUIiwgIi9rZXlzIiwgc2VsZi5fandrc19oYW5k bGVyKQorCisgICAgICAgIHNlbGYuc2VydmVyLm9hdXRoID0gb2F1dGgKKworICAgIGRlZiBydW4o c2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuc2VydmVyLnNlcnZlX2ZvcmV2 ZXIoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBzZWxmLmV4 Y2VwdGlvbiA9IGUKKworICAgIGRlZiBzdG9wKHNlbGYsIHRpbWVvdXQ9QkxPQ0tJTkdfVElNRU9V VCk6CisgICAgICAgICIiIgorICAgICAgICBTaHV0cyBkb3duIHRoZSBzZXJ2ZXIgYW5kIGpvaW5z IGl0cyB0aHJlYWQuIFJhaXNlcyBhbiBleGNlcHRpb24gaWYgdGhlCisgICAgICAgIHRocmVhZCBj b3VsZCBub3QgYmUgam9pbmVkLCBvciBpZiBpdCB0aHJldyBhbiBleGNlcHRpb24gaXRzZWxmLiBN dXN0CisgICAgICAgIG9ubHkgYmUgY2FsbGVkIG9uY2UsIGFmdGVyIHN0YXJ0KCkuCisgICAgICAg ICIiIgorICAgICAgICBzZWxmLnNlcnZlci5zaHV0ZG93bigpCisgICAgICAgIHNlbGYuam9pbih0 aW1lb3V0KQorCisgICAgICAgIGlmIHNlbGYuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHJhaXNl IFRpbWVvdXRFcnJvcigiY2xpZW50IHRocmVhZCBkaWQgbm90IGhhbmRzaGFrZSB3aXRoaW4gdGhl IHRpbWVvdXQiKQorICAgICAgICBlbGlmIHNlbGYuZXhjZXB0aW9uOgorICAgICAgICAgICAgZSA9 IHNlbGYuZXhjZXB0aW9uCisgICAgICAgICAgICByYWlzZSBlCisKKyAgICBjbGFzcyBfT0F1dGhT dGF0ZShvYmplY3QpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBz ZWxmLmVuZHBvaW50X3BhdGhzID0ge30KKyAgICAgICAgICAgIHNlbGYuX2VuZHBvaW50cyA9IHt9 CisKKyAgICAgICAgZGVmIHJlZ2lzdGVyX2VuZHBvaW50KHNlbGYsIG5hbWUsIG1ldGhvZCwgcGF0 aCwgZnVuYyk6CisgICAgICAgICAgICBpZiBtZXRob2Qgbm90IGluIHNlbGYuX2VuZHBvaW50czoK KyAgICAgICAgICAgICAgICBzZWxmLl9lbmRwb2ludHNbbWV0aG9kXSA9IHt9CisKKyAgICAgICAg ICAgIHNlbGYuX2VuZHBvaW50c1ttZXRob2RdW3BhdGhdID0gZnVuYworICAgICAgICAgICAgc2Vs Zi5lbmRwb2ludF9wYXRoc1tuYW1lXSA9IHBhdGgKKworICAgICAgICBkZWYgZW5kcG9pbnQoc2Vs ZiwgbWV0aG9kLCBwYXRoKToKKyAgICAgICAgICAgIGlmIG1ldGhvZCBub3QgaW4gc2VsZi5fZW5k cG9pbnRzOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgIHJldHVy biBzZWxmLl9lbmRwb2ludHNbbWV0aG9kXS5nZXQocGF0aCkKKworICAgIGNsYXNzIF9TZXJ2ZXIo aHR0cC5zZXJ2ZXIuSFRUUFNlcnZlcik6CisgICAgICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZiwg cmVxdWVzdCwgYWRkcik6CisgICAgICAgICAgICBzZWxmLnNodXRkb3duX3JlcXVlc3QocmVxdWVz dCkKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9qd2tz X2hhbmRsZXIoaGVhZGVycywgcGFyYW1zKToKKyAgICAgICAgcmV0dXJuIDIwMCwgeyJrZXlzIjog W119CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9hdXRob3JpemF0aW9uX2hhbmRsZXIo aGVhZGVycywgcGFyYW1zKToKKyAgICAgICAgIyBXZSBkb24ndCBhY3R1YWxseSB3YW50IHRoaXMg dG8gYmUgY2FsbGVkIGR1cmluZyB0aGVzZSB0ZXN0cyAtLSB3ZQorICAgICAgICAjIHNob3VsZCBi ZSB1c2luZyB0aGUgZGV2aWNlIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgaW5zdGVhZC4KKyAgICAg ICAgYXNzZXJ0ICgKKyAgICAgICAgICAgIEZhbHNlCisgICAgICAgICksICJhdXRob3JpemF0aW9u IGhhbmRsZXIgY2FsbGVkIGluc3RlYWQgb2YgZGV2aWNlIGF1dGhvcml6YXRpb24gaGFuZGxlciIK KworICAgIGNsYXNzIF9IYW5kbGVyKGh0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIp OgorICAgICAgICB0aW1lb3V0ID0gQkxPQ0tJTkdfVElNRU9VVAorCisgICAgICAgIGRlZiBfZGlz Y292ZXJ5X2hhbmRsZXIoc2VsZiwgaGVhZGVycywgcGFyYW1zKToKKyAgICAgICAgICAgIG9hdXRo ID0gc2VsZi5zZXJ2ZXIub2F1dGgKKworICAgICAgICAgICAgZG9jID0geworICAgICAgICAgICAg ICAgICJpc3N1ZXIiOiBvYXV0aC5pc3N1ZXIsCisgICAgICAgICAgICAgICAgInJlc3BvbnNlX3R5 cGVzX3N1cHBvcnRlZCI6IFsidG9rZW4iXSwKKyAgICAgICAgICAgICAgICAic3ViamVjdF90eXBl c19zdXBwb3J0ZWQiOiBbInB1YmxpYyJdLAorICAgICAgICAgICAgICAgICJpZF90b2tlbl9zaWdu aW5nX2FsZ192YWx1ZXNfc3VwcG9ydGVkIjogWyJSUzI1NiJdLAorICAgICAgICAgICAgfQorCisg ICAgICAgICAgICBmb3IgbmFtZSwgcGF0aCBpbiBvYXV0aC5lbmRwb2ludF9wYXRocy5pdGVtcygp OgorICAgICAgICAgICAgICAgIGRvY1tuYW1lXSA9IG9hdXRoLmlzc3VlciArIHBhdGgKKworICAg ICAgICAgICAgcmV0dXJuIDIwMCwgZG9jCisKKyAgICAgICAgZGVmIF9oYW5kbGUoc2VsZiwgKiwg cGFyYW1zPU5vbmUsIGhhbmRsZXI9Tm9uZSk6CisgICAgICAgICAgICBvYXV0aCA9IHNlbGYuc2Vy dmVyLm9hdXRoCisgICAgICAgICAgICBhc3NlcnQgc2VsZi5oZWFkZXJzWyJIb3N0Il0gPT0gb2F1 dGguaG9zdAorCisgICAgICAgICAgICBpZiBoYW5kbGVyIGlzIE5vbmU6CisgICAgICAgICAgICAg ICAgaGFuZGxlciA9IG9hdXRoLmVuZHBvaW50KHNlbGYuY29tbWFuZCwgc2VsZi5wYXRoKQorICAg ICAgICAgICAgICAgIGFzc2VydCAoCisgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgaXMgbm90 IE5vbmUKKyAgICAgICAgICAgICAgICApLCBmIm5vIHJlZ2lzdGVyZWQgZW5kcG9pbnQgZm9yIHtz ZWxmLmNvbW1hbmR9IHtzZWxmLnBhdGh9IgorCisgICAgICAgICAgICBjb2RlLCByZXNwID0gaGFu ZGxlcihzZWxmLmhlYWRlcnMsIHBhcmFtcykKKworICAgICAgICAgICAgc2VsZi5zZW5kX3Jlc3Bv bnNlKGNvZGUpCisgICAgICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LVR5cGUiLCAi YXBwbGljYXRpb24vanNvbiIpCisgICAgICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKKworICAg ICAgICAgICAgcmVzcCA9IGpzb24uZHVtcHMocmVzcCkKKyAgICAgICAgICAgIHJlc3AgPSByZXNw LmVuY29kZSgidXRmLTgiKQorICAgICAgICAgICAgc2VsZi53ZmlsZS53cml0ZShyZXNwKQorCisg ICAgICAgICAgICBzZWxmLmNsb3NlX2Nvbm5lY3Rpb24gPSBUcnVlCisKKyAgICAgICAgZGVmIGRv X0dFVChzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYucGF0aCA9PSAiLy53ZWxsLWtub3duL29w ZW5pZC1jb25maWd1cmF0aW9uIjoKKyAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGUoaGFuZGxl cj1zZWxmLl9kaXNjb3ZlcnlfaGFuZGxlcikKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAg ICAgICAgICAgc2VsZi5faGFuZGxlKCkKKworICAgICAgICBkZWYgX3JlcXVlc3RfYm9keShzZWxm KToKKyAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYuaGVhZGVyc1siQ29udGVudC1MZW5ndGgiXQor CisgICAgICAgICAgICAjIEhhbmRsZSBvbmx5IGFuIGV4cGxpY2l0IGNvbnRlbnQtbGVuZ3RoLgor ICAgICAgICAgICAgYXNzZXJ0IGxlbmd0aCBpcyBub3QgTm9uZQorICAgICAgICAgICAgbGVuZ3Ro ID0gaW50KGxlbmd0aCkKKworICAgICAgICAgICAgcmV0dXJuIHNlbGYucmZpbGUucmVhZChsZW5n dGgpLmRlY29kZSgidXRmLTgiKQorCisgICAgICAgIGRlZiBkb19QT1NUKHNlbGYpOgorICAgICAg ICAgICAgYXNzZXJ0IHNlbGYuaGVhZGVyc1siQ29udGVudC1UeXBlIl0gPT0gImFwcGxpY2F0aW9u L3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIKKworICAgICAgICAgICAgYm9keSA9IHNlbGYuX3JlcXVl c3RfYm9keSgpCisgICAgICAgICAgICBwYXJhbXMgPSB1cmxsaWIucGFyc2UucGFyc2VfcXMoYm9k eSkKKworICAgICAgICAgICAgc2VsZi5faGFuZGxlKHBhcmFtcz1wYXJhbXMpCisKKworQHB5dGVz dC5maXh0dXJlCitkZWYgb3BlbmlkX3Byb3ZpZGVyKHVudXNlZF90Y3BfcG9ydF9mYWN0b3J5KToK KyAgICAiIiIKKyAgICBBIGZpeHR1cmUgdGhhdCByZXR1cm5zIHRoZSBPQXV0aCBzdGF0ZSBvZiBh IHJ1bm5pbmcgT3BlbklEIHByb3ZpZGVyIHNlcnZlci4gVGhlCisgICAgc2VydmVyIHdpbGwgYmUg c3RvcHBlZCB3aGVuIHRoZSBmaXh0dXJlIGlzIHRvcm4gZG93bi4KKyAgICAiIiIKKyAgICB0aHJl YWQgPSBPcGVuSURQcm92aWRlcihwb3J0PXVudXNlZF90Y3BfcG9ydF9mYWN0b3J5KCkpCisgICAg dGhyZWFkLnN0YXJ0KCkKKworICAgIHRyeToKKyAgICAgICAgeWllbGQgdGhyZWFkLnNlcnZlci5v YXV0aAorICAgIGZpbmFsbHk6CisgICAgICAgIHRocmVhZC5zdG9wKCkKKworCitAcHl0ZXN0Lm1h cmsucGFyYW1ldHJpemUoInNlY3JldCIsIFtOb25lLCAiIiwgImh1bnRlcjIiXSkKK0BweXRlc3Qu bWFyay5wYXJhbWV0cml6ZSgic2NvcGUiLCBbTm9uZSwgIiIsICJvcGVuaWQgZW1haWwiXSkKK0Bw eXRlc3QubWFyay5wYXJhbWV0cml6ZSgicmV0cmllcyIsIFswLCAxXSkKK2RlZiB0ZXN0X29hdXRo X3dpdGhfZXhwbGljaXRfaXNzdWVyKAorICAgIGNhcGZkLCBhY2NlcHQsIG9wZW5pZF9wcm92aWRl ciwgcmV0cmllcywgc2NvcGUsIHNlY3JldAorKToKKyAgICBjbGllbnRfaWQgPSBzZWNyZXRzLnRv a2VuX2hleCgpCisKKyAgICBzb2NrLCBjbGllbnQgPSBhY2NlcHQoCisgICAgICAgIG9hdXRoX2lz c3Vlcj1vcGVuaWRfcHJvdmlkZXIuaXNzdWVyLAorICAgICAgICBvYXV0aF9jbGllbnRfaWQ9Y2xp ZW50X2lkLAorICAgICAgICBvYXV0aF9jbGllbnRfc2VjcmV0PXNlY3JldCwKKyAgICAgICAgb2F1 dGhfc2NvcGU9c2NvcGUsCisgICAgKQorCisgICAgZGV2aWNlX2NvZGUgPSBzZWNyZXRzLnRva2Vu X2hleCgpCisgICAgdXNlcl9jb2RlID0gZiJ7c2VjcmV0cy50b2tlbl9oZXgoMil9LXtzZWNyZXRz LnRva2VuX2hleCgyKX0iCisgICAgdmVyaWZpY2F0aW9uX3VybCA9ICJodHRwczovL2V4YW1wbGUu Y29tL2RldmljZSIKKworICAgIGFjY2Vzc190b2tlbiA9IHNlY3JldHMudG9rZW5fdXJsc2FmZSgp CisKKyAgICBkZWYgY2hlY2tfY2xpZW50X2F1dGhuKGhlYWRlcnMsIHBhcmFtcyk6CisgICAgICAg IGlmIG5vdCBzZWNyZXQ6CisgICAgICAgICAgICBhc3NlcnQgcGFyYW1zWyJjbGllbnRfaWQiXSA9 PSBbY2xpZW50X2lkXQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBSZXF1aXJlIHRo ZSBjbGllbnQgdG8gdXNlIEJhc2ljIGF1dGhuOyByZXF1ZXN0LWJvZHkgY3JlZGVudGlhbHMgYXJl CisgICAgICAgICMgTk9UIFJFQ09NTUVOREVEIChSRkMgNjc0OSwgU2VjLiAyLjMuMSkuCisgICAg ICAgIGFzc2VydCAiQXV0aG9yaXphdGlvbiIgaW4gaGVhZGVycworCisgICAgICAgIG1ldGhvZCwg Y3JlZHMgPSBoZWFkZXJzWyJBdXRob3JpemF0aW9uIl0uc3BsaXQoKQorICAgICAgICBhc3NlcnQg bWV0aG9kID09ICJCYXNpYyIKKworICAgICAgICBleHBlY3RlZCA9IGYie2NsaWVudF9pZH06e3Nl Y3JldH0iCisgICAgICAgIGFzc2VydCBiYXNlNjQuYjY0ZGVjb2RlKGNyZWRzKSA9PSBleHBlY3Rl ZC5lbmNvZGUoImFzY2lpIikKKworICAgICMgU2V0IHVwIG91ciBwcm92aWRlciBjYWxsYmFja3Mu CisgICAgIyBOT1RFIHRoYXQgdGhlc2UgY2FsbGJhY2tzIHdpbGwgYmUgY2FsbGVkIG9uIGEgYmFj a2dyb3VuZCB0aHJlYWQuIERvbid0IGRvCisgICAgIyBhbnkgdW5wcm90ZWN0ZWQgc3RhdGUgbXV0 YXRpb24gaGVyZS4KKworICAgIGRlZiBhdXRob3JpemF0aW9uX2VuZHBvaW50KGhlYWRlcnMsIHBh cmFtcyk6CisgICAgICAgIGNoZWNrX2NsaWVudF9hdXRobihoZWFkZXJzLCBwYXJhbXMpCisKKyAg ICAgICAgaWYgc2NvcGU6CisgICAgICAgICAgICBhc3NlcnQgcGFyYW1zWyJzY29wZSJdID09IFtz Y29wZV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFzc2VydCAic2NvcGUiIG5vdCBpbiBw YXJhbXMKKworICAgICAgICByZXNwID0geworICAgICAgICAgICAgImRldmljZV9jb2RlIjogZGV2 aWNlX2NvZGUsCisgICAgICAgICAgICAidXNlcl9jb2RlIjogdXNlcl9jb2RlLAorICAgICAgICAg ICAgImludGVydmFsIjogMCwKKyAgICAgICAgICAgICJ2ZXJpZmljYXRpb25fdXJpIjogdmVyaWZp Y2F0aW9uX3VybCwKKyAgICAgICAgICAgICJleHBpcmVzX2luIjogNSwKKyAgICAgICAgfQorCisg ICAgICAgIHJldHVybiAyMDAsIHJlc3AKKworICAgIG9wZW5pZF9wcm92aWRlci5yZWdpc3Rlcl9l bmRwb2ludCgKKyAgICAgICAgImRldmljZV9hdXRob3JpemF0aW9uX2VuZHBvaW50IiwgIlBPU1Qi LCAiL2RldmljZSIsIGF1dGhvcml6YXRpb25fZW5kcG9pbnQKKyAgICApCisKKyAgICBhdHRlbXB0 cyA9IDAKKyAgICByZXRyeV9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorCisgICAgZGVmIHRva2Vu X2VuZHBvaW50KGhlYWRlcnMsIHBhcmFtcyk6CisgICAgICAgIGNoZWNrX2NsaWVudF9hdXRobiho ZWFkZXJzLCBwYXJhbXMpCisKKyAgICAgICAgYXNzZXJ0IHBhcmFtc1siZ3JhbnRfdHlwZSJdID09 IFsidXJuOmlldGY6cGFyYW1zOm9hdXRoOmdyYW50LXR5cGU6ZGV2aWNlX2NvZGUiXQorICAgICAg ICBhc3NlcnQgcGFyYW1zWyJkZXZpY2VfY29kZSJdID09IFtkZXZpY2VfY29kZV0KKworICAgICAg ICBub3cgPSB0aW1lLm1vbm90b25pYygpCisKKyAgICAgICAgd2l0aCByZXRyeV9sb2NrOgorICAg ICAgICAgICAgbm9ubG9jYWwgYXR0ZW1wdHMKKworICAgICAgICAgICAgIyBJZiB0aGUgdGVzdCB3 YW50cyB0byBmb3JjZSB0aGUgY2xpZW50IHRvIHJldHJ5LCByZXR1cm4gYW4KKyAgICAgICAgICAg ICMgYXV0aG9yaXphdGlvbl9wZW5kaW5nIHJlc3BvbnNlIGFuZCBkZWNyZW1lbnQgdGhlIHJldHJ5 IGNvdW50LgorICAgICAgICAgICAgaWYgYXR0ZW1wdHMgPCByZXRyaWVzOgorICAgICAgICAgICAg ICAgIGF0dGVtcHRzICs9IDEKKyAgICAgICAgICAgICAgICByZXR1cm4gNDAwLCB7ImVycm9yIjog ImF1dGhvcml6YXRpb25fcGVuZGluZyJ9CisKKyAgICAgICAgIyBTdWNjZXNzZnVsbHkgZmluaXNo IHRoZSByZXF1ZXN0IGJ5IHNlbmRpbmcgdGhlIGFjY2VzcyBiZWFyZXIgdG9rZW4uCisgICAgICAg IHJlc3AgPSB7CisgICAgICAgICAgICAiYWNjZXNzX3Rva2VuIjogYWNjZXNzX3Rva2VuLAorICAg ICAgICAgICAgInRva2VuX3R5cGUiOiAiYmVhcmVyIiwKKyAgICAgICAgfQorCisgICAgICAgIHJl dHVybiAyMDAsIHJlc3AKKworICAgIG9wZW5pZF9wcm92aWRlci5yZWdpc3Rlcl9lbmRwb2ludCgK KyAgICAgICAgInRva2VuX2VuZHBvaW50IiwgIlBPU1QiLCAiL3Rva2VuIiwgdG9rZW5fZW5kcG9p bnQKKyAgICApCisKKyAgICB3aXRoIHNvY2s6CisgICAgICAgIHdpdGggcHEzLndyYXAoc29jaywg ZGVidWdfc3RyZWFtPXN5cy5zdGRvdXQpIGFzIGNvbm46CisgICAgICAgICAgICAjIEluaXRpYXRl IGEgaGFuZHNoYWtlLCB3aGljaCBzaG91bGQgcmVzdWx0IGluIHRoZSBhYm92ZSBlbmRwb2ludHMK KyAgICAgICAgICAgICMgYmVpbmcgY2FsbGVkLgorICAgICAgICAgICAgaW5pdGlhbCA9IHN0YXJ0 X29hdXRoX2hhbmRzaGFrZShjb25uKQorCisgICAgICAgICAgICAjIFZhbGlkYXRlIGFuZCBhY2Nl cHQgdGhlIHRva2VuLgorICAgICAgICAgICAgYXV0aCA9IGdldF9hdXRoX3ZhbHVlKGluaXRpYWwp CisgICAgICAgICAgICBhc3NlcnQgYXV0aCA9PSBmIkJlYXJlciB7YWNjZXNzX3Rva2VufSIuZW5j b2RlKCJhc2NpaSIpCisKKyAgICAgICAgICAgIHBxMy5zZW5kKGNvbm4sIHBxMy50eXBlcy5BdXRo blJlcXVlc3QsIHR5cGU9cHEzLmF1dGhuLlNBU0xGaW5hbCkKKyAgICAgICAgICAgIGZpbmlzaF9o YW5kc2hha2UoY29ubikKKworICAgIGlmIHJldHJpZXM6CisgICAgICAgICMgRmluYWxseSwgbWFr ZSBzdXJlIHRoYXQgdGhlIGNsaWVudCBwcm9tcHRlZCB0aGUgdXNlciB3aXRoIHRoZSBleHBlY3Rl ZAorICAgICAgICAjIGF1dGhvcml6YXRpb24gVVJMIGFuZCB1c2VyIGNvZGUuCisgICAgICAgIGV4 cGVjdGVkID0gZiJWaXNpdCB7dmVyaWZpY2F0aW9uX3VybH0gYW5kIGVudGVyIHRoZSBjb2RlOiB7 dXNlcl9jb2RlfSIKKyAgICAgICAgXywgc3RkZXJyID0gY2FwZmQucmVhZG91dGVycigpCisgICAg ICAgIGFzc2VydCBleHBlY3RlZCBpbiBzdGRlcnIKKworCitkZWYgdGVzdF9vYXV0aF9yZXF1aXJl c19jbGllbnRfaWQoYWNjZXB0LCBvcGVuaWRfcHJvdmlkZXIpOgorICAgIHNvY2ssIGNsaWVudCA9 IGFjY2VwdCgKKyAgICAgICAgb2F1dGhfaXNzdWVyPW9wZW5pZF9wcm92aWRlci5pc3N1ZXIsCisg ICAgICAgICMgRG8gbm90IHNldCBhIGNsaWVudCBJRDsgdGhpcyBzaG91bGQgY2F1c2UgYSBjbGll bnQgZXJyb3IgYWZ0ZXIgdGhlCisgICAgICAgICMgc2VydmVyIGFza3MgZm9yIE9BVVRIQkVBUkVS IGFuZCB0aGUgY2xpZW50IHRyaWVzIHRvIGNvbnRhY3QgdGhlCisgICAgICAgICMgaXNzdWVyLgor ICAgICkKKworICAgIHdpdGggc29jazoKKyAgICAgICAgd2l0aCBwcTMud3JhcChzb2NrLCBkZWJ1 Z19zdHJlYW09c3lzLnN0ZG91dCkgYXMgY29ubjoKKyAgICAgICAgICAgICMgSW5pdGlhdGUgYSBo YW5kc2hha2UuCisgICAgICAgICAgICBzdGFydHVwID0gcHEzLnJlY3YxKGNvbm4sIGNscz1wcTMu U3RhcnR1cCkKKyAgICAgICAgICAgIGFzc2VydCBzdGFydHVwLnByb3RvID09IHBxMy5wcm90b2Nv bCgzLCAwKQorCisgICAgICAgICAgICBwcTMuc2VuZCgKKyAgICAgICAgICAgICAgICBjb25uLAor ICAgICAgICAgICAgICAgIHBxMy50eXBlcy5BdXRoblJlcXVlc3QsCisgICAgICAgICAgICAgICAg dHlwZT1wcTMuYXV0aG4uU0FTTCwKKyAgICAgICAgICAgICAgICBib2R5PVtiIk9BVVRIQkVBUkVS IiwgYiIiXSwKKyAgICAgICAgICAgICkKKworICAgICAgICAgICAgIyBUaGUgY2xpZW50IHNob3Vs ZCBkaXNjb25uZWN0IGF0IHRoaXMgcG9pbnQuCisgICAgICAgICAgICBhc3NlcnQgbm90IGNvbm4u cmVhZCgpCisKKyAgICBleHBlY3RlZF9lcnJvciA9ICJubyBvYXV0aF9jbGllbnRfaWQgaXMgc2V0 IgorICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhwc3ljb3BnMi5PcGVyYXRpb25hbEVycm9yLCBtYXRj aD1leHBlY3RlZF9lcnJvcik6CisgICAgICAgIGNsaWVudC5jaGVja19jb21wbGV0ZWQoKQorCisK K0BweXRlc3QubWFyay5zbG93CitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoImVycm9yX2NvZGUi LCBbImF1dGhvcml6YXRpb25fcGVuZGluZyIsICJzbG93X2Rvd24iXSkKK0BweXRlc3QubWFyay5w YXJhbWV0cml6ZSgicmV0cmllcyIsIFsxLCAyXSkKK2RlZiB0ZXN0X29hdXRoX3JldHJ5X2ludGVy dmFsKGFjY2VwdCwgb3BlbmlkX3Byb3ZpZGVyLCByZXRyaWVzLCBlcnJvcl9jb2RlKToKKyAgICBz b2NrLCBjbGllbnQgPSBhY2NlcHQoCisgICAgICAgIG9hdXRoX2lzc3Vlcj1vcGVuaWRfcHJvdmlk ZXIuaXNzdWVyLAorICAgICAgICBvYXV0aF9jbGllbnRfaWQ9InNvbWUtaWQiLAorICAgICkKKwor ICAgIGV4cGVjdGVkX3JldHJ5X2ludGVydmFsID0gMQorICAgIGFjY2Vzc190b2tlbiA9IHNlY3Jl dHMudG9rZW5fdXJsc2FmZSgpCisKKyAgICAjIFNldCB1cCBvdXIgcHJvdmlkZXIgY2FsbGJhY2tz LgorICAgICMgTk9URSB0aGF0IHRoZXNlIGNhbGxiYWNrcyB3aWxsIGJlIGNhbGxlZCBvbiBhIGJh Y2tncm91bmQgdGhyZWFkLiBEb24ndCBkbworICAgICMgYW55IHVucHJvdGVjdGVkIHN0YXRlIG11 dGF0aW9uIGhlcmUuCisKKyAgICBkZWYgYXV0aG9yaXphdGlvbl9lbmRwb2ludChoZWFkZXJzLCBw YXJhbXMpOgorICAgICAgICByZXNwID0geworICAgICAgICAgICAgImRldmljZV9jb2RlIjogIm15 LWRldmljZS1jb2RlIiwKKyAgICAgICAgICAgICJ1c2VyX2NvZGUiOiAibXktdXNlci1jb2RlIiwK KyAgICAgICAgICAgICJpbnRlcnZhbCI6IGV4cGVjdGVkX3JldHJ5X2ludGVydmFsLAorICAgICAg ICAgICAgInZlcmlmaWNhdGlvbl91cmkiOiAiaHR0cHM6Ly9leGFtcGxlLmNvbSIsCisgICAgICAg ICAgICAiZXhwaXJlc19pbiI6IDUsCisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gMjAwLCBy ZXNwCisKKyAgICBvcGVuaWRfcHJvdmlkZXIucmVnaXN0ZXJfZW5kcG9pbnQoCisgICAgICAgICJk ZXZpY2VfYXV0aG9yaXphdGlvbl9lbmRwb2ludCIsICJQT1NUIiwgIi9kZXZpY2UiLCBhdXRob3Jp emF0aW9uX2VuZHBvaW50CisgICAgKQorCisgICAgYXR0ZW1wdHMgPSAwCisgICAgbGFzdF9yZXRy eSA9IE5vbmUKKyAgICByZXRyeV9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorCisgICAgZGVmIHRv a2VuX2VuZHBvaW50KGhlYWRlcnMsIHBhcmFtcyk6CisgICAgICAgIG5vdyA9IHRpbWUubW9ub3Rv bmljKCkKKworICAgICAgICB3aXRoIHJldHJ5X2xvY2s6CisgICAgICAgICAgICBub25sb2NhbCBh dHRlbXB0cywgbGFzdF9yZXRyeSwgZXhwZWN0ZWRfcmV0cnlfaW50ZXJ2YWwKKworICAgICAgICAg ICAgIyBNYWtlIHN1cmUgdGhlIHJldHJ5IGludGVydmFsIGlzIGJlaW5nIHJlc3BlY3RlZCBieSB0 aGUgY2xpZW50LgorICAgICAgICAgICAgaWYgbGFzdF9yZXRyeSBpcyBub3QgTm9uZToKKyAgICAg ICAgICAgICAgICBpbnRlcnZhbCA9IG5vdyAtIGxhc3RfcmV0cnkKKyAgICAgICAgICAgICAgICBh c3NlcnQgaW50ZXJ2YWwgPj0gZXhwZWN0ZWRfcmV0cnlfaW50ZXJ2YWwKKworICAgICAgICAgICAg bGFzdF9yZXRyeSA9IG5vdworCisgICAgICAgICAgICAjIElmIHRoZSB0ZXN0IHdhbnRzIHRvIGZv cmNlIHRoZSBjbGllbnQgdG8gcmV0cnksIHJldHVybiB0aGUgZGVzaXJlZAorICAgICAgICAgICAg IyBlcnJvciByZXNwb25zZSBhbmQgZGVjcmVtZW50IHRoZSByZXRyeSBjb3VudC4KKyAgICAgICAg ICAgIGlmIGF0dGVtcHRzIDwgcmV0cmllczoKKyAgICAgICAgICAgICAgICBhdHRlbXB0cyArPSAx CisKKyAgICAgICAgICAgICAgICAjIEEgc2xvd19kb3duIGNvZGUgcmVxdWlyZXMgdGhlIGNsaWVu dCB0byBhZGRpdGlvbmFsbHkgaW5jcmVhc2UKKyAgICAgICAgICAgICAgICAjIGl0cyBpbnRlcnZh bCBieSBmaXZlIHNlY29uZHMuCisgICAgICAgICAgICAgICAgaWYgZXJyb3JfY29kZSA9PSAic2xv d19kb3duIjoKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfcmV0cnlfaW50ZXJ2YWwgKz0g NQorCisgICAgICAgICAgICAgICAgcmV0dXJuIDQwMCwgeyJlcnJvciI6IGVycm9yX2NvZGV9CisK KyAgICAgICAgIyBTdWNjZXNzZnVsbHkgZmluaXNoIHRoZSByZXF1ZXN0IGJ5IHNlbmRpbmcgdGhl IGFjY2VzcyBiZWFyZXIgdG9rZW4uCisgICAgICAgIHJlc3AgPSB7CisgICAgICAgICAgICAiYWNj ZXNzX3Rva2VuIjogYWNjZXNzX3Rva2VuLAorICAgICAgICAgICAgInRva2VuX3R5cGUiOiAiYmVh cmVyIiwKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAyMDAsIHJlc3AKKworICAgIG9wZW5p ZF9wcm92aWRlci5yZWdpc3Rlcl9lbmRwb2ludCgKKyAgICAgICAgInRva2VuX2VuZHBvaW50Iiwg IlBPU1QiLCAiL3Rva2VuIiwgdG9rZW5fZW5kcG9pbnQKKyAgICApCisKKyAgICB3aXRoIHNvY2s6 CisgICAgICAgIHdpdGggcHEzLndyYXAoc29jaywgZGVidWdfc3RyZWFtPXN5cy5zdGRvdXQpIGFz IGNvbm46CisgICAgICAgICAgICAjIEluaXRpYXRlIGEgaGFuZHNoYWtlLCB3aGljaCBzaG91bGQg cmVzdWx0IGluIHRoZSBhYm92ZSBlbmRwb2ludHMKKyAgICAgICAgICAgICMgYmVpbmcgY2FsbGVk LgorICAgICAgICAgICAgaW5pdGlhbCA9IHN0YXJ0X29hdXRoX2hhbmRzaGFrZShjb25uKQorCisg ICAgICAgICAgICAjIFZhbGlkYXRlIGFuZCBhY2NlcHQgdGhlIHRva2VuLgorICAgICAgICAgICAg YXV0aCA9IGdldF9hdXRoX3ZhbHVlKGluaXRpYWwpCisgICAgICAgICAgICBhc3NlcnQgYXV0aCA9 PSBmIkJlYXJlciB7YWNjZXNzX3Rva2VufSIuZW5jb2RlKCJhc2NpaSIpCisKKyAgICAgICAgICAg IHBxMy5zZW5kKGNvbm4sIHBxMy50eXBlcy5BdXRoblJlcXVlc3QsIHR5cGU9cHEzLmF1dGhuLlNB U0xGaW5hbCkKKyAgICAgICAgICAgIGZpbmlzaF9oYW5kc2hha2UoY29ubikKKworCitAcHl0ZXN0 Lm1hcmsucGFyYW1ldHJpemUoCisgICAgImZhaWx1cmVfbW9kZSwgZXJyb3JfcGF0dGVybiIsCisg ICAgWworICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgImVycm9yIjogImludmFsaWRfY2xpZW50IiwKKyAgICAgICAgICAgICAgICAiZXJyb3JfZGVz Y3JpcHRpb24iOiAiY2xpZW50IGF1dGhlbnRpY2F0aW9uIGZhaWxlZCIsCisgICAgICAgICAgICB9 LAorICAgICAgICAgICAgciJjbGllbnQgYXV0aGVudGljYXRpb24gZmFpbGVkIFwoaW52YWxpZF9j bGllbnRcKSIsCisgICAgICAgICAgICBpZD0iYXV0aGVudGljYXRpb24gZmFpbHVyZSB3aXRoIGRl c2NyaXB0aW9uIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAg ICAgeyJlcnJvciI6ICJpbnZhbGlkX3JlcXVlc3QifSwKKyAgICAgICAgICAgIHIiXChpbnZhbGlk X3JlcXVlc3RcKSIsCisgICAgICAgICAgICBpZD0iaW52YWxpZCByZXF1ZXN0IHdpdGhvdXQgZGVz Y3JpcHRpb24iLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAg ICB7fSwKKyAgICAgICAgICAgIHIiZmFpbGVkIHRvIG9idGFpbiBkZXZpY2UgYXV0aG9yaXphdGlv biIsCisgICAgICAgICAgICBpZD0iYnJva2VuIGVycm9yIHJlc3BvbnNlIiwKKyAgICAgICAgKSwK KyAgICBdLAorKQorZGVmIHRlc3Rfb2F1dGhfZGV2aWNlX2F1dGhvcml6YXRpb25fZmFpbHVyZXMo CisgICAgYWNjZXB0LCBvcGVuaWRfcHJvdmlkZXIsIGZhaWx1cmVfbW9kZSwgZXJyb3JfcGF0dGVy bgorKToKKyAgICBjbGllbnRfaWQgPSBzZWNyZXRzLnRva2VuX2hleCgpCisKKyAgICBzb2NrLCBj bGllbnQgPSBhY2NlcHQoCisgICAgICAgIG9hdXRoX2lzc3Vlcj1vcGVuaWRfcHJvdmlkZXIuaXNz dWVyLAorICAgICAgICBvYXV0aF9jbGllbnRfaWQ9Y2xpZW50X2lkLAorICAgICkKKworICAgICMg U2V0IHVwIG91ciBwcm92aWRlciBjYWxsYmFja3MuCisgICAgIyBOT1RFIHRoYXQgdGhlc2UgY2Fs bGJhY2tzIHdpbGwgYmUgY2FsbGVkIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQuIERvbid0IGRvCisg ICAgIyBhbnkgdW5wcm90ZWN0ZWQgc3RhdGUgbXV0YXRpb24gaGVyZS4KKworICAgIGRlZiBhdXRo b3JpemF0aW9uX2VuZHBvaW50KGhlYWRlcnMsIHBhcmFtcyk6CisgICAgICAgIHJldHVybiA0MDAs IGZhaWx1cmVfbW9kZQorCisgICAgb3BlbmlkX3Byb3ZpZGVyLnJlZ2lzdGVyX2VuZHBvaW50KAor ICAgICAgICAiZGV2aWNlX2F1dGhvcml6YXRpb25fZW5kcG9pbnQiLCAiUE9TVCIsICIvZGV2aWNl IiwgYXV0aG9yaXphdGlvbl9lbmRwb2ludAorICAgICkKKworICAgIGRlZiB0b2tlbl9lbmRwb2lu dChoZWFkZXJzLCBwYXJhbXMpOgorICAgICAgICBhc3NlcnQgRmFsc2UsICJ0b2tlbiBlbmRwb2lu dCB3YXMgaW52b2tlZCB1bmV4cGVjdGVkbHkiCisKKyAgICBvcGVuaWRfcHJvdmlkZXIucmVnaXN0 ZXJfZW5kcG9pbnQoCisgICAgICAgICJ0b2tlbl9lbmRwb2ludCIsICJQT1NUIiwgIi90b2tlbiIs IHRva2VuX2VuZHBvaW50CisgICAgKQorCisgICAgd2l0aCBzb2NrOgorICAgICAgICB3aXRoIHBx My53cmFwKHNvY2ssIGRlYnVnX3N0cmVhbT1zeXMuc3Rkb3V0KSBhcyBjb25uOgorICAgICAgICAg ICAgIyBJbml0aWF0ZSBhIGhhbmRzaGFrZSwgd2hpY2ggc2hvdWxkIHJlc3VsdCBpbiB0aGUgYWJv dmUgZW5kcG9pbnRzCisgICAgICAgICAgICAjIGJlaW5nIGNhbGxlZC4KKyAgICAgICAgICAgIHN0 YXJ0dXAgPSBwcTMucmVjdjEoY29ubiwgY2xzPXBxMy5TdGFydHVwKQorICAgICAgICAgICAgYXNz ZXJ0IHN0YXJ0dXAucHJvdG8gPT0gcHEzLnByb3RvY29sKDMsIDApCisKKyAgICAgICAgICAgIHBx My5zZW5kKAorICAgICAgICAgICAgICAgIGNvbm4sCisgICAgICAgICAgICAgICAgcHEzLnR5cGVz LkF1dGhuUmVxdWVzdCwKKyAgICAgICAgICAgICAgICB0eXBlPXBxMy5hdXRobi5TQVNMLAorICAg ICAgICAgICAgICAgIGJvZHk9W2IiT0FVVEhCRUFSRVIiLCBiIiJdLAorICAgICAgICAgICAgKQor CisgICAgICAgICAgICAjIFRoZSBjbGllbnQgc2hvdWxkIG5vdCBjb250aW51ZSB0aGUgY29ubmVj dGlvbiBkdWUgdG8gdGhlIGhhcmRjb2RlZAorICAgICAgICAgICAgIyBwcm92aWRlciBmYWlsdXJl OyB3ZSBkaXNjb25uZWN0IGhlcmUuCisKKyAgICAjIE5vdyBtYWtlIHN1cmUgdGhlIGNsaWVudCBj b3JyZWN0bHkgZmFpbGVkLgorICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhwc3ljb3BnMi5PcGVyYXRp b25hbEVycm9yLCBtYXRjaD1lcnJvcl9wYXR0ZXJuKToKKyAgICAgICAgY2xpZW50LmNoZWNrX2Nv bXBsZXRlZCgpCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKAorICAgICJmYWlsdXJlX21v ZGUsIGVycm9yX3BhdHRlcm4iLAorICAgIFsKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgICJlcnJvciI6ICJleHBpcmVkX3Rva2VuIiwKKyAgICAg ICAgICAgICAgICAiZXJyb3JfZGVzY3JpcHRpb24iOiAidGhlIGRldmljZSBjb2RlIGhhcyBleHBp cmVkIiwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICByInRoZSBkZXZpY2UgY29kZSBoYXMg ZXhwaXJlZCBcKGV4cGlyZWRfdG9rZW5cKSIsCisgICAgICAgICAgICBpZD0iZXhwaXJlZCB0b2tl biB3aXRoIGRlc2NyaXB0aW9uIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAor ICAgICAgICAgICAgeyJlcnJvciI6ICJhY2Nlc3NfZGVuaWVkIn0sCisgICAgICAgICAgICByIlwo YWNjZXNzX2RlbmllZFwpIiwKKyAgICAgICAgICAgIGlkPSJhY2Nlc3MgZGVuaWVkIHdpdGhvdXQg ZGVzY3JpcHRpb24iLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAg ICAgICB7fSwKKyAgICAgICAgICAgIHIiT0F1dGggdG9rZW4gcmV0cmlldmFsIGZhaWxlZCIsCisg ICAgICAgICAgICBpZD0iYnJva2VuIGVycm9yIHJlc3BvbnNlIiwKKyAgICAgICAgKSwKKyAgICBd LAorKQorQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJyZXRyaWVzIiwgWzAsIDFdKQorZGVmIHRl c3Rfb2F1dGhfdG9rZW5fZmFpbHVyZXMoCisgICAgYWNjZXB0LCBvcGVuaWRfcHJvdmlkZXIsIHJl dHJpZXMsIGZhaWx1cmVfbW9kZSwgZXJyb3JfcGF0dGVybgorKToKKyAgICBjbGllbnRfaWQgPSBz ZWNyZXRzLnRva2VuX2hleCgpCisKKyAgICBzb2NrLCBjbGllbnQgPSBhY2NlcHQoCisgICAgICAg IG9hdXRoX2lzc3Vlcj1vcGVuaWRfcHJvdmlkZXIuaXNzdWVyLAorICAgICAgICBvYXV0aF9jbGll bnRfaWQ9Y2xpZW50X2lkLAorICAgICkKKworICAgIGRldmljZV9jb2RlID0gc2VjcmV0cy50b2tl bl9oZXgoKQorICAgIHVzZXJfY29kZSA9IGYie3NlY3JldHMudG9rZW5faGV4KDIpfS17c2VjcmV0 cy50b2tlbl9oZXgoMil9IgorCisgICAgIyBTZXQgdXAgb3VyIHByb3ZpZGVyIGNhbGxiYWNrcy4K KyAgICAjIE5PVEUgdGhhdCB0aGVzZSBjYWxsYmFja3Mgd2lsbCBiZSBjYWxsZWQgb24gYSBiYWNr Z3JvdW5kIHRocmVhZC4gRG9uJ3QgZG8KKyAgICAjIGFueSB1bnByb3RlY3RlZCBzdGF0ZSBtdXRh dGlvbiBoZXJlLgorCisgICAgZGVmIGF1dGhvcml6YXRpb25fZW5kcG9pbnQoaGVhZGVycywgcGFy YW1zKToKKyAgICAgICAgYXNzZXJ0IHBhcmFtc1siY2xpZW50X2lkIl0gPT0gW2NsaWVudF9pZF0K KworICAgICAgICByZXNwID0geworICAgICAgICAgICAgImRldmljZV9jb2RlIjogZGV2aWNlX2Nv ZGUsCisgICAgICAgICAgICAidXNlcl9jb2RlIjogdXNlcl9jb2RlLAorICAgICAgICAgICAgImlu dGVydmFsIjogMCwKKyAgICAgICAgICAgICJ2ZXJpZmljYXRpb25fdXJpIjogImh0dHBzOi8vZXhh bXBsZS5jb20vZGV2aWNlIiwKKyAgICAgICAgICAgICJleHBpcmVzX2luIjogNSwKKyAgICAgICAg fQorCisgICAgICAgIHJldHVybiAyMDAsIHJlc3AKKworICAgIG9wZW5pZF9wcm92aWRlci5yZWdp c3Rlcl9lbmRwb2ludCgKKyAgICAgICAgImRldmljZV9hdXRob3JpemF0aW9uX2VuZHBvaW50Iiwg IlBPU1QiLCAiL2RldmljZSIsIGF1dGhvcml6YXRpb25fZW5kcG9pbnQKKyAgICApCisKKyAgICBy ZXRyeV9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorCisgICAgZGVmIHRva2VuX2VuZHBvaW50KGhl YWRlcnMsIHBhcmFtcyk6CisgICAgICAgIHdpdGggcmV0cnlfbG9jazoKKyAgICAgICAgICAgIG5v bmxvY2FsIHJldHJpZXMKKworICAgICAgICAgICAgIyBJZiB0aGUgdGVzdCB3YW50cyB0byBmb3Jj ZSB0aGUgY2xpZW50IHRvIHJldHJ5LCByZXR1cm4gYW4KKyAgICAgICAgICAgICMgYXV0aG9yaXph dGlvbl9wZW5kaW5nIHJlc3BvbnNlIGFuZCBkZWNyZW1lbnQgdGhlIHJldHJ5IGNvdW50LgorICAg ICAgICAgICAgaWYgcmV0cmllcyA+IDA6CisgICAgICAgICAgICAgICAgcmV0cmllcyAtPSAxCisg ICAgICAgICAgICAgICAgcmV0dXJuIDQwMCwgeyJlcnJvciI6ICJhdXRob3JpemF0aW9uX3BlbmRp bmcifQorCisgICAgICAgIHJldHVybiA0MDAsIGZhaWx1cmVfbW9kZQorCisgICAgb3BlbmlkX3By b3ZpZGVyLnJlZ2lzdGVyX2VuZHBvaW50KAorICAgICAgICAidG9rZW5fZW5kcG9pbnQiLCAiUE9T VCIsICIvdG9rZW4iLCB0b2tlbl9lbmRwb2ludAorICAgICkKKworICAgIHdpdGggc29jazoKKyAg ICAgICAgd2l0aCBwcTMud3JhcChzb2NrLCBkZWJ1Z19zdHJlYW09c3lzLnN0ZG91dCkgYXMgY29u bjoKKyAgICAgICAgICAgICMgSW5pdGlhdGUgYSBoYW5kc2hha2UsIHdoaWNoIHNob3VsZCByZXN1 bHQgaW4gdGhlIGFib3ZlIGVuZHBvaW50cworICAgICAgICAgICAgIyBiZWluZyBjYWxsZWQuCisg ICAgICAgICAgICBzdGFydHVwID0gcHEzLnJlY3YxKGNvbm4sIGNscz1wcTMuU3RhcnR1cCkKKyAg ICAgICAgICAgIGFzc2VydCBzdGFydHVwLnByb3RvID09IHBxMy5wcm90b2NvbCgzLCAwKQorCisg ICAgICAgICAgICBwcTMuc2VuZCgKKyAgICAgICAgICAgICAgICBjb25uLAorICAgICAgICAgICAg ICAgIHBxMy50eXBlcy5BdXRoblJlcXVlc3QsCisgICAgICAgICAgICAgICAgdHlwZT1wcTMuYXV0 aG4uU0FTTCwKKyAgICAgICAgICAgICAgICBib2R5PVtiIk9BVVRIQkVBUkVSIiwgYiIiXSwKKyAg ICAgICAgICAgICkKKworICAgICAgICAgICAgIyBUaGUgY2xpZW50IHNob3VsZCBub3QgY29udGlu dWUgdGhlIGNvbm5lY3Rpb24gZHVlIHRvIHRoZSBoYXJkY29kZWQKKyAgICAgICAgICAgICMgcHJv dmlkZXIgZmFpbHVyZTsgd2UgZGlzY29ubmVjdCBoZXJlLgorCisgICAgIyBOb3cgbWFrZSBzdXJl IHRoZSBjbGllbnQgY29ycmVjdGx5IGZhaWxlZC4KKyAgICB3aXRoIHB5dGVzdC5yYWlzZXMocHN5 Y29wZzIuT3BlcmF0aW9uYWxFcnJvciwgbWF0Y2g9ZXJyb3JfcGF0dGVybik6CisgICAgICAgIGNs aWVudC5jaGVja19jb21wbGV0ZWQoKQorCisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgic2Nv cGUiLCBbTm9uZSwgIm9wZW5pZCBlbWFpbCJdKQorQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKAor ICAgICJiYXNlX3Jlc3BvbnNlIiwKKyAgICBbCisgICAgICAgIHsic3RhdHVzIjogImludmFsaWRf dG9rZW4ifSwKKyAgICAgICAgeyJleHRyYV9vYmplY3QiOiB7ImtleSI6ICJ2YWx1ZSJ9LCAic3Rh dHVzIjogImludmFsaWRfdG9rZW4ifSwKKyAgICAgICAgeyJleHRyYV9vYmplY3QiOiB7InN0YXR1 cyI6IDF9LCAic3RhdHVzIjogImludmFsaWRfdG9rZW4ifSwKKyAgICBdLAorKQorZGVmIHRlc3Rf b2F1dGhfZGlzY292ZXJ5KGFjY2VwdCwgb3BlbmlkX3Byb3ZpZGVyLCBiYXNlX3Jlc3BvbnNlLCBz Y29wZSk6CisgICAgc29jaywgY2xpZW50ID0gYWNjZXB0KG9hdXRoX2NsaWVudF9pZD1zZWNyZXRz LnRva2VuX2hleCgpKQorCisgICAgZGV2aWNlX2NvZGUgPSBzZWNyZXRzLnRva2VuX2hleCgpCisg ICAgdXNlcl9jb2RlID0gZiJ7c2VjcmV0cy50b2tlbl9oZXgoMil9LXtzZWNyZXRzLnRva2VuX2hl eCgyKX0iCisgICAgdmVyaWZpY2F0aW9uX3VybCA9ICJodHRwczovL2V4YW1wbGUuY29tL2Rldmlj ZSIKKworICAgIGFjY2Vzc190b2tlbiA9IHNlY3JldHMudG9rZW5fdXJsc2FmZSgpCisKKyAgICAj IFNldCB1cCBvdXIgcHJvdmlkZXIgY2FsbGJhY2tzLgorICAgICMgTk9URSB0aGF0IHRoZXNlIGNh bGxiYWNrcyB3aWxsIGJlIGNhbGxlZCBvbiBhIGJhY2tncm91bmQgdGhyZWFkLiBEb24ndCBkbwor ICAgICMgYW55IHVucHJvdGVjdGVkIHN0YXRlIG11dGF0aW9uIGhlcmUuCisKKyAgICBkZWYgYXV0 aG9yaXphdGlvbl9lbmRwb2ludChoZWFkZXJzLCBwYXJhbXMpOgorICAgICAgICBpZiBzY29wZToK KyAgICAgICAgICAgIGFzc2VydCBwYXJhbXNbInNjb3BlIl0gPT0gW3Njb3BlXQorICAgICAgICBl bHNlOgorICAgICAgICAgICAgYXNzZXJ0ICJzY29wZSIgbm90IGluIHBhcmFtcworCisgICAgICAg IHJlc3AgPSB7CisgICAgICAgICAgICAiZGV2aWNlX2NvZGUiOiBkZXZpY2VfY29kZSwKKyAgICAg ICAgICAgICJ1c2VyX2NvZGUiOiB1c2VyX2NvZGUsCisgICAgICAgICAgICAiaW50ZXJ2YWwiOiAw LAorICAgICAgICAgICAgInZlcmlmaWNhdGlvbl91cmkiOiB2ZXJpZmljYXRpb25fdXJsLAorICAg ICAgICAgICAgImV4cGlyZXNfaW4iOiA1LAorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIDIw MCwgcmVzcAorCisgICAgb3BlbmlkX3Byb3ZpZGVyLnJlZ2lzdGVyX2VuZHBvaW50KAorICAgICAg ICAiZGV2aWNlX2F1dGhvcml6YXRpb25fZW5kcG9pbnQiLCAiUE9TVCIsICIvZGV2aWNlIiwgYXV0 aG9yaXphdGlvbl9lbmRwb2ludAorICAgICkKKworICAgIGRlZiB0b2tlbl9lbmRwb2ludChoZWFk ZXJzLCBwYXJhbXMpOgorICAgICAgICBhc3NlcnQgcGFyYW1zWyJncmFudF90eXBlIl0gPT0gWyJ1 cm46aWV0ZjpwYXJhbXM6b2F1dGg6Z3JhbnQtdHlwZTpkZXZpY2VfY29kZSJdCisgICAgICAgIGFz c2VydCBwYXJhbXNbImRldmljZV9jb2RlIl0gPT0gW2RldmljZV9jb2RlXQorCisgICAgICAgICMg U3VjY2Vzc2Z1bGx5IGZpbmlzaCB0aGUgcmVxdWVzdCBieSBzZW5kaW5nIHRoZSBhY2Nlc3MgYmVh cmVyIHRva2VuLgorICAgICAgICByZXNwID0geworICAgICAgICAgICAgImFjY2Vzc190b2tlbiI6 IGFjY2Vzc190b2tlbiwKKyAgICAgICAgICAgICJ0b2tlbl90eXBlIjogImJlYXJlciIsCisgICAg ICAgIH0KKworICAgICAgICByZXR1cm4gMjAwLCByZXNwCisKKyAgICBvcGVuaWRfcHJvdmlkZXIu cmVnaXN0ZXJfZW5kcG9pbnQoCisgICAgICAgICJ0b2tlbl9lbmRwb2ludCIsICJQT1NUIiwgIi90 b2tlbiIsIHRva2VuX2VuZHBvaW50CisgICAgKQorCisgICAgd2l0aCBzb2NrOgorICAgICAgICB3 aXRoIHBxMy53cmFwKHNvY2ssIGRlYnVnX3N0cmVhbT1zeXMuc3Rkb3V0KSBhcyBjb25uOgorICAg ICAgICAgICAgaW5pdGlhbCA9IHN0YXJ0X29hdXRoX2hhbmRzaGFrZShjb25uKQorCisgICAgICAg ICAgICAjIEZvciBkaXNjb3ZlcnksIHRoZSBjbGllbnQgc2hvdWxkIHNlbmQgYW4gZW1wdHkgYXV0 aCBoZWFkZXIuIFNlZQorICAgICAgICAgICAgIyBSRkMgNzYyOCwgU2VjLiA0LjMuCisgICAgICAg ICAgICBhdXRoID0gZ2V0X2F1dGhfdmFsdWUoaW5pdGlhbCkKKyAgICAgICAgICAgIGFzc2VydCBh dXRoID09IGIiIgorCisgICAgICAgICAgICAjIFdlIHdpbGwgZmFpbCB0aGUgZmlyc3QgU0FTTCBl eGNoYW5nZS4gRmlyc3QgcmV0dXJuIGEgbGluayB0byB0aGUKKyAgICAgICAgICAgICMgZGlzY292 ZXJ5IGRvY3VtZW50LCBwb2ludGluZyB0byB0aGUgdGVzdCBwcm92aWRlciBzZXJ2ZXIuCisgICAg ICAgICAgICByZXNwID0gZGljdChiYXNlX3Jlc3BvbnNlKQorCisgICAgICAgICAgICBkaXNjb3Zl cnlfdXJpID0gZiJ7b3BlbmlkX3Byb3ZpZGVyLmlzc3Vlcn0vLndlbGwta25vd24vb3BlbmlkLWNv bmZpZ3VyYXRpb24iCisgICAgICAgICAgICByZXNwWyJvcGVuaWQtY29uZmlndXJhdGlvbiJdID0g ZGlzY292ZXJ5X3VyaQorCisgICAgICAgICAgICBpZiBzY29wZToKKyAgICAgICAgICAgICAgICBy ZXNwWyJzY29wZSJdID0gc2NvcGUKKworICAgICAgICAgICAgcmVzcCA9IGpzb24uZHVtcHMocmVz cCkKKworICAgICAgICAgICAgcHEzLnNlbmQoCisgICAgICAgICAgICAgICAgY29ubiwKKyAgICAg ICAgICAgICAgICBwcTMudHlwZXMuQXV0aG5SZXF1ZXN0LAorICAgICAgICAgICAgICAgIHR5cGU9 cHEzLmF1dGhuLlNBU0xDb250aW51ZSwKKyAgICAgICAgICAgICAgICBib2R5PXJlc3AuZW5jb2Rl KCJhc2NpaSIpLAorICAgICAgICAgICAgKQorCisgICAgICAgICAgICAjIFBlciBSRkMsIHRoZSBj bGllbnQgaXMgcmVxdWlyZWQgdG8gc2VuZCBhIGR1bW15IF5BIHJlc3BvbnNlLgorICAgICAgICAg ICAgcGt0ID0gcHEzLnJlY3YxKGNvbm4pCisgICAgICAgICAgICBhc3NlcnQgcGt0LnR5cGUgPT0g cHEzLnR5cGVzLlBhc3N3b3JkTWVzc2FnZQorICAgICAgICAgICAgYXNzZXJ0IHBrdC5wYXlsb2Fk ID09IGIiXHgwMSIKKworICAgICAgICAgICAgIyBOb3cgZmFpbCB0aGUgU0FTTCBleGNoYW5nZS4K KyAgICAgICAgICAgIHBxMy5zZW5kKAorICAgICAgICAgICAgICAgIGNvbm4sCisgICAgICAgICAg ICAgICAgcHEzLnR5cGVzLkVycm9yUmVzcG9uc2UsCisgICAgICAgICAgICAgICAgZmllbGRzPVsK KyAgICAgICAgICAgICAgICAgICAgYiJTRkFUQUwiLAorICAgICAgICAgICAgICAgICAgICBiIkMy ODAwMCIsCisgICAgICAgICAgICAgICAgICAgIGIiTWRvZXNuJ3QgbWF0dGVyIiwKKyAgICAgICAg ICAgICAgICAgICAgYiIiLAorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICApCisKKyAg ICAjIFRoZSBjbGllbnQgd2lsbCBjb25uZWN0IHRvIHVzIGEgc2Vjb25kIHRpbWUsIHVzaW5nIHRo ZSBwYXJhbWV0ZXJzIHdlIHNlbnQKKyAgICAjIGl0LgorICAgIHNvY2ssIF8gPSBhY2NlcHQoKQor CisgICAgd2l0aCBzb2NrOgorICAgICAgICB3aXRoIHBxMy53cmFwKHNvY2ssIGRlYnVnX3N0cmVh bT1zeXMuc3Rkb3V0KSBhcyBjb25uOgorICAgICAgICAgICAgaW5pdGlhbCA9IHN0YXJ0X29hdXRo X2hhbmRzaGFrZShjb25uKQorCisgICAgICAgICAgICAjIFZhbGlkYXRlIGFuZCBhY2NlcHQgdGhl IHRva2VuLgorICAgICAgICAgICAgYXV0aCA9IGdldF9hdXRoX3ZhbHVlKGluaXRpYWwpCisgICAg ICAgICAgICBhc3NlcnQgYXV0aCA9PSBmIkJlYXJlciB7YWNjZXNzX3Rva2VufSIuZW5jb2RlKCJh c2NpaSIpCisKKyAgICAgICAgICAgIHBxMy5zZW5kKGNvbm4sIHBxMy50eXBlcy5BdXRoblJlcXVl c3QsIHR5cGU9cHEzLmF1dGhuLlNBU0xGaW5hbCkKKyAgICAgICAgICAgIGZpbmlzaF9oYW5kc2hh a2UoY29ubikKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoCisgICAgInJlc3BvbnNlLGV4 cGVjdGVkX2Vycm9yIiwKKyAgICBbCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAg ICJhYmNkZSIsCisgICAgICAgICAgICAnVG9rZW4gImFiY2RlIiBpcyBpbnZhbGlkJywKKyAgICAg ICAgICAgIGlkPSJiYWQgSlNPTjogaW52YWxpZCBzeW50YXgiLAorICAgICAgICApLAorICAgICAg ICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICAnImFiY2RlIicsCisgICAgICAgICAgICAidG9w LWxldmVsIGVsZW1lbnQgbXVzdCBiZSBhbiBvYmplY3QiLAorICAgICAgICAgICAgaWQ9ImJhZCBK U09OOiB0b3AtbGV2ZWwgZWxlbWVudCBpcyBhIHN0cmluZyIsCisgICAgICAgICksCisgICAgICAg IHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgICJbXSIsCisgICAgICAgICAgICAidG9wLWxldmVs IGVsZW1lbnQgbXVzdCBiZSBhbiBvYmplY3QiLAorICAgICAgICAgICAgaWQ9ImJhZCBKU09OOiB0 b3AtbGV2ZWwgZWxlbWVudCBpcyBhbiBhcnJheSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVz dC5wYXJhbSgKKyAgICAgICAgICAgICJ7fSIsCisgICAgICAgICAgICAic2VydmVyIHNlbnQgZXJy b3IgcmVzcG9uc2Ugd2l0aG91dCBhIHN0YXR1cyIsCisgICAgICAgICAgICBpZD0iYmFkIEpTT046 IG5vIHN0YXR1cyBtZW1iZXIiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisg ICAgICAgICAgICAneyAic3RhdHVzIjogbnVsbCB9JywKKyAgICAgICAgICAgICdmaWVsZCAic3Rh dHVzIiBtdXN0IGJlIGEgc3RyaW5nJywKKyAgICAgICAgICAgIGlkPSJiYWQgSlNPTjogbnVsbCBz dGF0dXMgbWVtYmVyIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAg ICAgICAgJ3sgInN0YXR1cyI6IDAgfScsCisgICAgICAgICAgICAnZmllbGQgInN0YXR1cyIgbXVz dCBiZSBhIHN0cmluZycsCisgICAgICAgICAgICBpZD0iYmFkIEpTT046IGludCBzdGF0dXMgbWVt YmVyIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgJ3sg InN0YXR1cyI6IFsgImJhZCIgXSB9JywKKyAgICAgICAgICAgICdmaWVsZCAic3RhdHVzIiBtdXN0 IGJlIGEgc3RyaW5nJywKKyAgICAgICAgICAgIGlkPSJiYWQgSlNPTjogYXJyYXkgc3RhdHVzIG1l bWJlciIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgICd7 ICJzdGF0dXMiOiB7ICJiYWQiOiAiYmFkIiB9IH0nLAorICAgICAgICAgICAgJ2ZpZWxkICJzdGF0 dXMiIG11c3QgYmUgYSBzdHJpbmcnLAorICAgICAgICAgICAgaWQ9ImJhZCBKU09OOiBvYmplY3Qg c3RhdHVzIG1lbWJlciIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAg ICAgICAgICd7ICJuZXN0ZWQiOiB7ICJzdGF0dXMiOiAiYmFkIiB9IH0nLAorICAgICAgICAgICAg InNlcnZlciBzZW50IGVycm9yIHJlc3BvbnNlIHdpdGhvdXQgYSBzdGF0dXMiLAorICAgICAgICAg ICAgaWQ9ImJhZCBKU09OOiBuZXN0ZWQgc3RhdHVzIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0 ZXN0LnBhcmFtKAorICAgICAgICAgICAgJ3sgInN0YXR1cyI6ICJpbnZhbGlkX3Rva2VuIiAnLAor ICAgICAgICAgICAgIlRoZSBpbnB1dCBzdHJpbmcgZW5kZWQgdW5leHBlY3RlZGx5IiwKKyAgICAg ICAgICAgIGlkPSJiYWQgSlNPTjogdW50ZXJtaW5hdGVkIG9iamVjdCIsCisgICAgICAgICksCisg ICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgICd7ICJzdGF0dXMiOiAiaW52YWxpZF90 b2tlbiIgfSB7IH0nLAorICAgICAgICAgICAgJ0V4cGVjdGVkIGVuZCBvZiBpbnB1dCwgYnV0IGZv dW5kICJ7IicsCisgICAgICAgICAgICBpZD0iYmFkIEpTT046IHRyYWlsaW5nIGRhdGEiLAorICAg ICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICAneyAic3RhdHVzIjog ImludmFsaWRfdG9rZW4iLCAib3BlbmlkLWNvbmZpZ3VyYXRpb24iOiAxIH0nLAorICAgICAgICAg ICAgJ2ZpZWxkICJvcGVuaWQtY29uZmlndXJhdGlvbiIgbXVzdCBiZSBhIHN0cmluZycsCisgICAg ICAgICAgICBpZD0iYmFkIEpTT046IGludCBvcGVuaWQtY29uZmlndXJhdGlvbiBtZW1iZXIiLAor ICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICAneyAic3RhdHVz IjogImludmFsaWRfdG9rZW4iLCAib3BlbmlkLWNvbmZpZ3VyYXRpb24iOiAxIH0nLAorICAgICAg ICAgICAgJ2ZpZWxkICJvcGVuaWQtY29uZmlndXJhdGlvbiIgbXVzdCBiZSBhIHN0cmluZycsCisg ICAgICAgICAgICBpZD0iYmFkIEpTT046IGludCBvcGVuaWQtY29uZmlndXJhdGlvbiBtZW1iZXIi LAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICAneyAic3Rh dHVzIjogImludmFsaWRfdG9rZW4iLCAic2NvcGUiOiAxIH0nLAorICAgICAgICAgICAgJ2ZpZWxk ICJzY29wZSIgbXVzdCBiZSBhIHN0cmluZycsCisgICAgICAgICAgICBpZD0iYmFkIEpTT046IGlu dCBzY29wZSBtZW1iZXIiLAorICAgICAgICApLAorICAgIF0sCispCitkZWYgdGVzdF9vYXV0aF9k aXNjb3Zlcnlfc2VydmVyX2Vycm9yKGFjY2VwdCwgcmVzcG9uc2UsIGV4cGVjdGVkX2Vycm9yKToK KyAgICBzb2NrLCBjbGllbnQgPSBhY2NlcHQob2F1dGhfY2xpZW50X2lkPXNlY3JldHMudG9rZW5f aGV4KCkpCisKKyAgICB3aXRoIHNvY2s6CisgICAgICAgIHdpdGggcHEzLndyYXAoc29jaywgZGVi dWdfc3RyZWFtPXN5cy5zdGRvdXQpIGFzIGNvbm46CisgICAgICAgICAgICBpbml0aWFsID0gc3Rh cnRfb2F1dGhfaGFuZHNoYWtlKGNvbm4pCisKKyAgICAgICAgICAgICMgRmFpbCB0aGUgU0FTTCBl eGNoYW5nZSB3aXRoIGFuIGludmFsaWQgSlNPTiByZXNwb25zZS4KKyAgICAgICAgICAgIHBxMy5z ZW5kKAorICAgICAgICAgICAgICAgIGNvbm4sCisgICAgICAgICAgICAgICAgcHEzLnR5cGVzLkF1 dGhuUmVxdWVzdCwKKyAgICAgICAgICAgICAgICB0eXBlPXBxMy5hdXRobi5TQVNMQ29udGludWUs CisgICAgICAgICAgICAgICAgYm9keT1yZXNwb25zZS5lbmNvZGUoInV0Zi04IiksCisgICAgICAg ICAgICApCisKKyAgICAgICAgICAgICMgVGhlIGNsaWVudCBzaG91bGQgZGlzY29ubmVjdCwgc28g dGhlIHNvY2tldCBpcyBjbG9zZWQgaGVyZS4gKElmCisgICAgICAgICAgICAjIHRoZSBjbGllbnQg ZG9lc24ndCBkaXNjb25uZWN0LCBpdCB3aWxsIHJlcG9ydCBhIGRpZmZlcmVudCBlcnJvcgorICAg ICAgICAgICAgIyBiZWxvdyBhbmQgdGhlIHRlc3Qgd2lsbCBmYWlsLikKKworICAgIHdpdGggcHl0 ZXN0LnJhaXNlcyhwc3ljb3BnMi5PcGVyYXRpb25hbEVycm9yLCBtYXRjaD1leHBlY3RlZF9lcnJv cik6CisgICAgICAgIGNsaWVudC5jaGVja19jb21wbGV0ZWQoKQorCisKK0BweXRlc3QubWFyay5w YXJhbWV0cml6ZSgKKyAgICAic2FzbF9lcnIscmVzcF90eXBlLHJlc3BfcGF5bG9hZCxleHBlY3Rl ZF9lcnJvciIsCisgICAgWworICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICB7InN0 YXR1cyI6ICJpbnZhbGlkX3JlcXVlc3QifSwKKyAgICAgICAgICAgIHBxMy50eXBlcy5FcnJvclJl c3BvbnNlLAorICAgICAgICAgICAgZGljdCgKKyAgICAgICAgICAgICAgICBmaWVsZHM9W2IiU0ZB VEFMIiwgYiJDMjgwMDAiLCBiIk1leHBlY3RlZCBlcnJvciBtZXNzYWdlIiwgYiIiXSwKKyAgICAg ICAgICAgICksCisgICAgICAgICAgICAiZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZSIsCisgICAgICAg ICAgICBpZD0ic3RhbmRhcmQgc2VydmVyIGVycm9yOiBpbnZhbGlkX3JlcXVlc3QiLAorICAgICAg ICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICB7InN0YXR1cyI6ICJpbnZh bGlkX3Rva2VuIn0sCisgICAgICAgICAgICBwcTMudHlwZXMuRXJyb3JSZXNwb25zZSwKKyAgICAg ICAgICAgIGRpY3QoCisgICAgICAgICAgICAgICAgZmllbGRzPVtiIlNGQVRBTCIsIGIiQzI4MDAw IiwgYiJNZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZSIsIGIiIl0sCisgICAgICAgICAgICApLAorICAg ICAgICAgICAgImV4cGVjdGVkIGVycm9yIG1lc3NhZ2UiLAorICAgICAgICAgICAgaWQ9InN0YW5k YXJkIHNlcnZlciBlcnJvcjogaW52YWxpZF90b2tlbiB3aXRob3V0IGRpc2NvdmVyeSBVUkkiLAor ICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICB7InN0YXR1cyI6 ICJpbnZhbGlkX3JlcXVlc3QifSwKKyAgICAgICAgICAgIHBxMy50eXBlcy5BdXRoblJlcXVlc3Qs CisgICAgICAgICAgICBkaWN0KHR5cGU9cHEzLmF1dGhuLlNBU0xDb250aW51ZSwgYm9keT1iIiIp LAorICAgICAgICAgICAgInNlcnZlciBzZW50IGFkZGl0aW9uYWwgT0F1dGggZGF0YSIsCisgICAg ICAgICAgICBpZD0iYnJva2VuIHNlcnZlcjogYWRkaXRpb25hbCBjaGFsbGVuZ2UgYWZ0ZXIgZXJy b3IiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICB7InN0 YXR1cyI6ICJpbnZhbGlkX3JlcXVlc3QifSwKKyAgICAgICAgICAgIHBxMy50eXBlcy5BdXRoblJl cXVlc3QsCisgICAgICAgICAgICBkaWN0KHR5cGU9cHEzLmF1dGhuLlNBU0xGaW5hbCksCisgICAg ICAgICAgICAic2VydmVyIHNlbnQgYWRkaXRpb25hbCBPQXV0aCBkYXRhIiwKKyAgICAgICAgICAg IGlkPSJicm9rZW4gc2VydmVyOiBTQVNMIHN1Y2Nlc3MgYWZ0ZXIgZXJyb3IiLAorICAgICAgICAp LAorICAgIF0sCispCitkZWYgdGVzdF9vYXV0aF9zZXJ2ZXJfZXJyb3IoYWNjZXB0LCBzYXNsX2Vy ciwgcmVzcF90eXBlLCByZXNwX3BheWxvYWQsIGV4cGVjdGVkX2Vycm9yKToKKyAgICBzb2NrLCBj bGllbnQgPSBhY2NlcHQoKQorCisgICAgd2l0aCBzb2NrOgorICAgICAgICB3aXRoIHBxMy53cmFw KHNvY2ssIGRlYnVnX3N0cmVhbT1zeXMuc3Rkb3V0KSBhcyBjb25uOgorICAgICAgICAgICAgc3Rh cnRfb2F1dGhfaGFuZHNoYWtlKGNvbm4pCisKKyAgICAgICAgICAgICMgSWdub3JlIHRoZSBjbGll bnQgZGF0YS4gUmV0dXJuIGFuIGVycm9yICJjaGFsbGVuZ2UiLgorICAgICAgICAgICAgcmVzcCA9 IGpzb24uZHVtcHMoc2FzbF9lcnIpCisgICAgICAgICAgICByZXNwID0gcmVzcC5lbmNvZGUoInV0 Zi04IikKKworICAgICAgICAgICAgcHEzLnNlbmQoCisgICAgICAgICAgICAgICAgY29ubiwgcHEz LnR5cGVzLkF1dGhuUmVxdWVzdCwgdHlwZT1wcTMuYXV0aG4uU0FTTENvbnRpbnVlLCBib2R5PXJl c3AKKyAgICAgICAgICAgICkKKworICAgICAgICAgICAgIyBQZXIgUkZDLCB0aGUgY2xpZW50IGlz IHJlcXVpcmVkIHRvIHNlbmQgYSBkdW1teSBeQSByZXNwb25zZS4KKyAgICAgICAgICAgIHBrdCA9 IHBxMy5yZWN2MShjb25uKQorICAgICAgICAgICAgYXNzZXJ0IHBrdC50eXBlID09IHBxMy50eXBl cy5QYXNzd29yZE1lc3NhZ2UKKyAgICAgICAgICAgIGFzc2VydCBwa3QucGF5bG9hZCA9PSBiIlx4 MDEiCisKKyAgICAgICAgICAgICMgTm93IGZhaWwgdGhlIFNBU0wgZXhjaGFuZ2UgKGluIGVpdGhl ciBhIHZhbGlkIHdheSwgb3IgYW4gaW52YWxpZAorICAgICAgICAgICAgIyBvbmUsIGRlcGVuZGlu ZyBvbiB0aGUgdGVzdCkuCisgICAgICAgICAgICBwcTMuc2VuZChjb25uLCByZXNwX3R5cGUsICoq cmVzcF9wYXlsb2FkKQorCisgICAgd2l0aCBweXRlc3QucmFpc2VzKHBzeWNvcGcyLk9wZXJhdGlv bmFsRXJyb3IsIG1hdGNoPWV4cGVjdGVkX2Vycm9yKToKKyAgICAgICAgY2xpZW50LmNoZWNrX2Nv bXBsZXRlZCgpCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9weXRob24vcHEzLnB5IGIvc3JjL3Rlc3Qv cHl0aG9uL3BxMy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4zYTIy ZGFkMGI2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcHl0aG9uL3BxMy5weQpAQCAtMCww ICsxLDcyNyBAQAorIworIyBDb3B5cmlnaHQgMjAyMSBWTXdhcmUsIEluYy4KKyMgU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IFBvc3RncmVTUUwKKyMKKworaW1wb3J0IGNvbnRleHRsaWIKK2ltcG9y dCBnZXRwYXNzCitpbXBvcnQgaW8KK2ltcG9ydCBvcworaW1wb3J0IHNzbAoraW1wb3J0IHN5cwor aW1wb3J0IHRleHR3cmFwCisKK2Zyb20gY29uc3RydWN0IGltcG9ydCAqCisKK2ltcG9ydCB0bHMK KworCitkZWYgcHJvdG9jb2wobWFqb3IsIG1pbm9yKToKKyAgICAiIiIKKyAgICBSZXR1cm5zIHRo ZSBwcm90b2NvbCB2ZXJzaW9uLCBpbiBpbnRlZ2VyIGZvcm1hdCwgY29ycmVzcG9uZGluZyB0byB0 aGUgZ2l2ZW4KKyAgICBtYWpvciBhbmQgbWlub3IgdmVyc2lvbiBudW1iZXJzLgorICAgICIiIgor ICAgIHJldHVybiAobWFqb3IgPDwgMTYpIHwgbWlub3IKKworCisjIFN0YXJ0dXAKKworU3RyaW5n TGlzdCA9IEdyZWVkeVJhbmdlKE51bGxUZXJtaW5hdGVkKEdyZWVkeUJ5dGVzKSkKKworCitjbGFz cyBLZXlWYWx1ZUFkYXB0ZXIoQWRhcHRlcik6CisgICAgIiIiCisgICAgVHVybnMgYSBrZXktdmFs dWUgc3RvcmUgaW50byBhIG51bGwtdGVybWluYXRlZCBsaXN0IG9mIG51bGwtdGVybWluYXRlZAor ICAgIHN0cmluZ3MsIGFzIHByZXNlbnRlZCBvbiB0aGUgd2lyZSBpbiB0aGUgc3RhcnR1cCBwYWNr ZXQuCisgICAgIiIiCisKKyAgICBkZWYgX2VuY29kZShzZWxmLCBvYmosIGNvbnRleHQsIHBhdGgp OgorICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgbGlzdCk6CisgICAgICAgICAgICByZXR1cm4g b2JqCisKKyAgICAgICAgbCA9IFtdCisKKyAgICAgICAgZm9yIGssIHYgaW4gb2JqLml0ZW1zKCk6 CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGssIHN0cik6CisgICAgICAgICAgICAgICAgayA9 IGsuZW5jb2RlKCJ1dGYtOCIpCisgICAgICAgICAgICBsLmFwcGVuZChrKQorCisgICAgICAgICAg ICBpZiBpc2luc3RhbmNlKHYsIHN0cik6CisgICAgICAgICAgICAgICAgdiA9IHYuZW5jb2RlKCJ1 dGYtOCIpCisgICAgICAgICAgICBsLmFwcGVuZCh2KQorCisgICAgICAgIGwuYXBwZW5kKGIiIikK KyAgICAgICAgcmV0dXJuIGwKKworICAgIGRlZiBfZGVjb2RlKHNlbGYsIG9iaiwgY29udGV4dCwg cGF0aCk6CisgICAgICAgICMgVE9ETzogdHVybiBhIGxpc3QgYmFjayBpbnRvIGEgZGljdAorICAg ICAgICByZXR1cm4gb2JqCisKKworS2V5VmFsdWVzID0gS2V5VmFsdWVBZGFwdGVyKFN0cmluZ0xp c3QpCisKK19zdGFydHVwX3BheWxvYWQgPSBTd2l0Y2goCisgICAgdGhpcy5wcm90bywKKyAgICB7 CisgICAgICAgIHByb3RvY29sKDMsIDApOiBLZXlWYWx1ZXMsCisgICAgfSwKKyAgICBkZWZhdWx0 PUdyZWVkeUJ5dGVzLAorKQorCisKK2RlZiBfZGVmYXVsdF9wcm90b2NvbCh0aGlzKToKKyAgICB0 cnk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UodGhpcy5wYXlsb2FkLCAobGlzdCwgZGljdCkpOgor ICAgICAgICAgICAgcmV0dXJuIHByb3RvY29sKDMsIDApCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVy cm9yOgorICAgICAgICBwYXNzICAjIG5vIHBheWxvYWQgcGFzc2VkIGR1cmluZyBidWlsZAorCisg ICAgcmV0dXJuIDAKKworCitkZWYgX3N0YXJ0dXBfcGF5bG9hZF9sZW4odGhpcyk6CisgICAgIiIi CisgICAgVGhlIHBheWxvYWQgZmllbGQgaGFzIGEgZml4ZWQgc2l6ZSBiYXNlZCBvbiB0aGUgbGVu Z3RoIG9mIHRoZSBwYWNrZXQuIEJ1dAorICAgIGlmIHRoZSBjYWxsZXIgaGFzbid0IHN1cHBsaWVk IGFuIGV4cGxpY2l0IGxlbmd0aCBhdCBidWlsZCB0aW1lLCB3ZSBoYXZlIHRvCisgICAgYnVpbGQg dGhlIHBheWxvYWQgdG8gZmlndXJlIG91dCBob3cgbG9uZyBpdCBpcywgd2hpY2ggcmVxdWlyZXMg dXMgdG8ga25vdworICAgIHRoZSBsZW5ndGggZmlyc3QuLi4gVGhpcyBmdW5jdGlvbiBleGlzdHMg c29sZWx5IHRvIGJyZWFrIHRoZSBjeWNsZS4KKyAgICAiIiIKKyAgICBhc3NlcnQgdGhpcy5fYnVp bGRpbmcsICJfc3RhcnR1cF9wYXlsb2FkX2xlbigpIGNhbm5vdCBiZSBjYWxsZWQgZHVyaW5nIHBh cnNpbmciCisKKyAgICB0cnk6CisgICAgICAgIHBheWxvYWQgPSB0aGlzLnBheWxvYWQKKyAgICBl eGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHJldHVybiAwICAjIG5vIHBheWxvYWQKKwor ICAgIGlmIGlzaW5zdGFuY2UocGF5bG9hZCwgYnl0ZXMpOgorICAgICAgICAjIGFscmVhZHkgc2Vy aWFsaXplZDsganVzdCB1c2UgdGhlIGdpdmVuIGxlbmd0aAorICAgICAgICByZXR1cm4gbGVuKHBh eWxvYWQpCisKKyAgICB0cnk6CisgICAgICAgIHByb3RvID0gdGhpcy5wcm90bworICAgIGV4Y2Vw dCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcHJvdG8gPSBfZGVmYXVsdF9wcm90b2NvbCh0aGlz KQorCisgICAgZGF0YSA9IF9zdGFydHVwX3BheWxvYWQuYnVpbGQocGF5bG9hZCwgcHJvdG89cHJv dG8pCisgICAgcmV0dXJuIGxlbihkYXRhKQorCisKK1N0YXJ0dXAgPSBTdHJ1Y3QoCisgICAgImxl biIgLyBEZWZhdWx0KEludDMyc2IsIGxhbWJkYSB0aGlzOiBfc3RhcnR1cF9wYXlsb2FkX2xlbih0 aGlzKSArIDgpLAorICAgICJwcm90byIgLyBEZWZhdWx0KEhleChJbnQzMnNiKSwgX2RlZmF1bHRf cHJvdG9jb2wpLAorICAgICJwYXlsb2FkIiAvIEZpeGVkU2l6ZWQodGhpcy5sZW4gLSA4LCBEZWZh dWx0KF9zdGFydHVwX3BheWxvYWQsIGIiIikpLAorKQorCisjIFBxMworCisjIEFkYXB0ZWQgZnJv bSBjb25zdHJ1Y3QuY29yZS5FbnVtSW50ZWdlclN0cmluZworY2xhc3MgRW51bU5hbWVkQnl0ZToK KyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsLCBuYW1lKToKKyAgICAgICAgc2VsZi5fdmFsID0g dmFsCisgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCisKKyAgICBkZWYgX19pbnRfXyhzZWxmKToK KyAgICAgICAgcmV0dXJuIG9yZChzZWxmLl92YWwpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToK KyAgICAgICAgcmV0dXJuICIoZW51bSkgJXMgJXIiICUgKHNlbGYuX25hbWUsIHNlbGYuX3ZhbCkK KworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJFbnVtTmFtZWRCeXRl KCVyKSIgJSBzZWxmLl92YWwKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAg ICBpZiBpc2luc3RhbmNlKG90aGVyLCBFbnVtTmFtZWRCeXRlKToKKyAgICAgICAgICAgIG90aGVy ID0gb3RoZXIuX3ZhbAorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgYnl0ZXMpOgor ICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICAgICAgcmV0dXJuIHNlbGYu X3ZhbCA9PSBvdGhlcgorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4g aGFzaChzZWxmLl92YWwpCisKKworIyBBZGFwdGVkIGZyb20gY29uc3RydWN0LmNvcmUuRW51bQor Y2xhc3MgQnl0ZUVudW0oQWRhcHRlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsICoqbWFwcGlu Zyk6CisgICAgICAgIHN1cGVyKEJ5dGVFbnVtLCBzZWxmKS5fX2luaXRfXyhCeXRlKQorICAgICAg ICBzZWxmLm5hbWVtYXBwaW5nID0ge2s6IEVudW1OYW1lZEJ5dGUodiwgaykgZm9yIGssIHYgaW4g bWFwcGluZy5pdGVtcygpfQorICAgICAgICBzZWxmLmRlY21hcHBpbmcgPSB7djogRW51bU5hbWVk Qnl0ZSh2LCBrKSBmb3IgaywgdiBpbiBtYXBwaW5nLml0ZW1zKCl9CisKKyAgICBkZWYgX19nZXRh dHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgIGlmIG5hbWUgaW4gc2VsZi5uYW1lbWFwcGluZzoK KyAgICAgICAgICAgIHJldHVybiBzZWxmLmRlY21hcHBpbmdbc2VsZi5uYW1lbWFwcGluZ1tuYW1l XV0KKyAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IKKworICAgIGRlZiBfZGVjb2RlKHNlbGYs IG9iaiwgY29udGV4dCwgcGF0aCk6CisgICAgICAgIGIgPSBieXRlcyhbb2JqXSkKKyAgICAgICAg dHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGVjbWFwcGluZ1tiXQorICAgICAgICBleGNl cHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRW51bU5hbWVkQnl0ZShiLCAiKHVua25v d24pIikKKworICAgIGRlZiBfZW5jb2RlKHNlbGYsIG9iaiwgY29udGV4dCwgcGF0aCk6CisgICAg ICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBpbnQpOgorICAgICAgICAgICAgcmV0dXJuIG9iagorICAg ICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBieXRlcyk6CisgICAgICAgICAgICByZXR1cm4gb3Jk KG9iaikKKyAgICAgICAgcmV0dXJuIGludChvYmopCisKKwordHlwZXMgPSBCeXRlRW51bSgKKyAg ICBFcnJvclJlc3BvbnNlPWIiRSIsCisgICAgUmVhZHlGb3JRdWVyeT1iIloiLAorICAgIFF1ZXJ5 PWIiUSIsCisgICAgRW1wdHlRdWVyeVJlc3BvbnNlPWIiSSIsCisgICAgQXV0aG5SZXF1ZXN0PWIi UiIsCisgICAgUGFzc3dvcmRNZXNzYWdlPWIicCIsCisgICAgQmFja2VuZEtleURhdGE9YiJLIiwK KyAgICBDb21tYW5kQ29tcGxldGU9YiJDIiwKKyAgICBQYXJhbWV0ZXJTdGF0dXM9YiJTIiwKKyAg ICBEYXRhUm93PWIiRCIsCisgICAgVGVybWluYXRlPWIiWCIsCispCisKKworYXV0aG4gPSBFbnVt KAorICAgIEludDMydWIsCisgICAgT0s9MCwKKyAgICBTQVNMPTEwLAorICAgIFNBU0xDb250aW51 ZT0xMSwKKyAgICBTQVNMRmluYWw9MTIsCispCisKKworX2F1dGhuX2JvZHkgPSBTd2l0Y2goCisg ICAgdGhpcy50eXBlLAorICAgIHsKKyAgICAgICAgYXV0aG4uT0s6IFRlcm1pbmF0ZWQsCisgICAg ICAgIGF1dGhuLlNBU0w6IFN0cmluZ0xpc3QsCisgICAgfSwKKyAgICBkZWZhdWx0PUdyZWVkeUJ5 dGVzLAorKQorCisKK2RlZiBfZGF0YV9sZW4odGhpcyk6CisgICAgYXNzZXJ0IHRoaXMuX2J1aWxk aW5nLCAiX2RhdGFfbGVuKCkgY2Fubm90IGJlIGNhbGxlZCBkdXJpbmcgcGFyc2luZyIKKworICAg IGlmIG5vdCBoYXNhdHRyKHRoaXMsICJkYXRhIikgb3IgdGhpcy5kYXRhIGlzIE5vbmU6CisgICAg ICAgIHJldHVybiAtMQorCisgICAgcmV0dXJuIGxlbih0aGlzLmRhdGEpCisKKworIyBUaGUgcHJv dG9jb2wgcmV1c2VzIHRoZSBQYXNzd29yZE1lc3NhZ2UgZm9yIHNldmVyYWwgYXV0aGVudGljYXRp b24gcmVzcG9uc2UKKyMgdHlwZXMsIGFuZCB0aGVyZSdzIG5vIGdvb2Qgd2F5IHRvIGZpZ3VyZSBv dXQgd2hpY2ggaXMgd2hpY2ggd2l0aG91dCBrZWVwaW5nCisjIHN0YXRlIGZvciB0aGUgZW50aXJl IHN0cmVhbS4gU28gdGhpcyBpcyBhIHNlcGFyYXRlIENvbnN0cnVjdCB0aGF0IGNhbiBiZQorIyBl eHBsaWNpdGx5IHBhcnNlZC9idWlsdCBieSBjb2RlIHRoYXQga25vd3MgaXQncyBuZWVkZWQuCitT QVNMSW5pdGlhbFJlc3BvbnNlID0gU3RydWN0KAorICAgICJuYW1lIiAvIE51bGxUZXJtaW5hdGVk KEdyZWVkeUJ5dGVzKSwKKyAgICAibGVuIiAvIERlZmF1bHQoSW50MzJzYiwgbGFtYmRhIHRoaXM6 IF9kYXRhX2xlbih0aGlzKSksCisgICAgImRhdGEiCisgICAgLyBJZlRoZW5FbHNlKAorICAgICAg ICAjIEFsbG93IHRlc3RzIHRvIGV4cGxpY2l0bHkgcGFzcyBhbiBpbmNvcnJlY3QgbGVuZ3RoIGR1 cmluZyB0ZXN0aW5nLCBieQorICAgICAgICAjIG5vdCBlbmZvcmNpbmcgYSBGaXhlZFNpemVkIGR1 cmluZyBidWlsZC4gKFRoZSBsZW4gY2FsY3VsYXRpb24gYWJvdmUKKyAgICAgICAgIyBkZWZhdWx0 cyB0byB0aGUgY29ycmVjdCBzaXplLikKKyAgICAgICAgdGhpcy5fYnVpbGRpbmcsCisgICAgICAg IE9wdGlvbmFsKEdyZWVkeUJ5dGVzKSwKKyAgICAgICAgSWYodGhpcy5sZW4gIT0gLTEsIERlZmF1 bHQoRml4ZWRTaXplZCh0aGlzLmxlbiwgR3JlZWR5Qnl0ZXMpLCBiIiIpKSwKKyAgICApLAorICAg IFRlcm1pbmF0ZWQsICAjIG1ha2Ugc3VyZSB0aGUgZW50aXJlIHJlc3BvbnNlIGlzIGNvbnN1bWVk CispCisKKworX2NvbHVtbiA9IEZvY3VzZWRTZXEoCisgICAgImRhdGEiLAorICAgICJsZW4iIC8g RGVmYXVsdChJbnQzMnNiLCBsYW1iZGEgdGhpczogX2RhdGFfbGVuKHRoaXMpKSwKKyAgICAiZGF0 YSIgLyBJZih0aGlzLmxlbiAhPSAtMSwgRml4ZWRTaXplZCh0aGlzLmxlbiwgR3JlZWR5Qnl0ZXMp KSwKKykKKworCitfcGF5bG9hZF9tYXAgPSB7CisgICAgdHlwZXMuRXJyb3JSZXNwb25zZTogU3Ry dWN0KCJmaWVsZHMiIC8gU3RyaW5nTGlzdCksCisgICAgdHlwZXMuUmVhZHlGb3JRdWVyeTogU3Ry dWN0KCJzdGF0dXMiIC8gQnl0ZXMoMSkpLAorICAgIHR5cGVzLlF1ZXJ5OiBTdHJ1Y3QoInF1ZXJ5 IiAvIE51bGxUZXJtaW5hdGVkKEdyZWVkeUJ5dGVzKSksCisgICAgdHlwZXMuRW1wdHlRdWVyeVJl c3BvbnNlOiBUZXJtaW5hdGVkLAorICAgIHR5cGVzLkF1dGhuUmVxdWVzdDogU3RydWN0KCJ0eXBl IiAvIGF1dGhuLCAiYm9keSIgLyBEZWZhdWx0KF9hdXRobl9ib2R5LCBiIiIpKSwKKyAgICB0eXBl cy5CYWNrZW5kS2V5RGF0YTogU3RydWN0KCJwaWQiIC8gSW50MzJ1YiwgImtleSIgLyBIZXgoSW50 MzJ1YikpLAorICAgIHR5cGVzLkNvbW1hbmRDb21wbGV0ZTogU3RydWN0KCJ0YWciIC8gTnVsbFRl cm1pbmF0ZWQoR3JlZWR5Qnl0ZXMpKSwKKyAgICB0eXBlcy5QYXJhbWV0ZXJTdGF0dXM6IFN0cnVj dCgKKyAgICAgICAgIm5hbWUiIC8gTnVsbFRlcm1pbmF0ZWQoR3JlZWR5Qnl0ZXMpLCAidmFsdWUi IC8gTnVsbFRlcm1pbmF0ZWQoR3JlZWR5Qnl0ZXMpCisgICAgKSwKKyAgICB0eXBlcy5EYXRhUm93 OiBTdHJ1Y3QoImNvbHVtbnMiIC8gRGVmYXVsdChQcmVmaXhlZEFycmF5KEludDE2c2IsIF9jb2x1 bW4pLCBiIiIpKSwKKyAgICB0eXBlcy5UZXJtaW5hdGU6IFRlcm1pbmF0ZWQsCit9CisKKworX3Bh eWxvYWQgPSBGb2N1c2VkU2VxKAorICAgICJfcGF5bG9hZCIsCisgICAgIl9wYXlsb2FkIgorICAg IC8gU3dpdGNoKAorICAgICAgICB0aGlzLl8udHlwZSwKKyAgICAgICAgX3BheWxvYWRfbWFwLAor ICAgICAgICBkZWZhdWx0PUdyZWVkeUJ5dGVzLAorICAgICksCisgICAgVGVybWluYXRlZCwgICMg bWFrZSBzdXJlIGV2ZXJ5IHBheWxvYWQgY29uc3VtZXMgdGhlIGVudGlyZSBwYWNrZXQKKykKKwor CitkZWYgX3BheWxvYWRfbGVuKHRoaXMpOgorICAgICIiIgorICAgIFNlZSBfc3RhcnR1cF9wYXls b2FkX2xlbigpIGZvciBhbiBleHBsYW5hdGlvbi4KKyAgICAiIiIKKyAgICBhc3NlcnQgdGhpcy5f YnVpbGRpbmcsICJfcGF5bG9hZF9sZW4oKSBjYW5ub3QgYmUgY2FsbGVkIGR1cmluZyBwYXJzaW5n IgorCisgICAgdHJ5OgorICAgICAgICBwYXlsb2FkID0gdGhpcy5wYXlsb2FkCisgICAgZXhjZXB0 IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICByZXR1cm4gMCAgIyBubyBwYXlsb2FkCisKKyAgICBp ZiBpc2luc3RhbmNlKHBheWxvYWQsIGJ5dGVzKToKKyAgICAgICAgIyBhbHJlYWR5IHNlcmlhbGl6 ZWQ7IGp1c3QgdXNlIHRoZSBnaXZlbiBsZW5ndGgKKyAgICAgICAgcmV0dXJuIGxlbihwYXlsb2Fk KQorCisgICAgZGF0YSA9IF9wYXlsb2FkLmJ1aWxkKHBheWxvYWQsIHR5cGU9dGhpcy50eXBlKQor ICAgIHJldHVybiBsZW4oZGF0YSkKKworCitQcTMgPSBTdHJ1Y3QoCisgICAgInR5cGUiIC8gdHlw ZXMsCisgICAgImxlbiIgLyBEZWZhdWx0KEludDMydWIsIGxhbWJkYSB0aGlzOiBfcGF5bG9hZF9s ZW4odGhpcykgKyA0KSwKKyAgICAicGF5bG9hZCIgLyBGaXhlZFNpemVkKHRoaXMubGVuIC0gNCwg RGVmYXVsdChfcGF5bG9hZCwgYiIiKSksCispCisKKworIyBFbnZpcm9ubWVudAorCisKK2RlZiBw Z2hvc3QoKToKKyAgICByZXR1cm4gb3MuZW52aXJvbi5nZXQoIlBHSE9TVCIsIGRlZmF1bHQ9Imxv Y2FsaG9zdCIpCisKKworZGVmIHBncG9ydCgpOgorICAgIHJldHVybiBpbnQob3MuZW52aXJvbi5n ZXQoIlBHUE9SVCIsIGRlZmF1bHQ9NTQzMikpCisKKworZGVmIHBndXNlcigpOgorICAgIHRyeToK KyAgICAgICAgcmV0dXJuIG9zLmVudmlyb25bIlBHVVNFUiJdCisgICAgZXhjZXB0IEtleUVycm9y OgorICAgICAgICByZXR1cm4gZ2V0cGFzcy5nZXR1c2VyKCkKKworCitkZWYgcGdkYXRhYmFzZSgp OgorICAgIHJldHVybiBvcy5lbnZpcm9uLmdldCgiUEdEQVRBQkFTRSIsIGRlZmF1bHQ9InBvc3Rn cmVzIikKKworCisjIENvbm5lY3Rpb25zCisKKworZGVmIF9oZXhkdW1wX3RyYW5zbGF0aW9uX21h cCgpOgorICAgICIiIgorICAgIEZvciBoZXhkdW1wcy4gVHJhbnNsYXRlcyBhbnkgdW5wcmludGFi bGUgb3Igbm9uLUFTQ0lJIGJ5dGVzIGludG8gJy4nLgorICAgICIiIgorICAgIGlucHV0ID0gYnl0 ZWFycmF5KCkKKworICAgIGZvciBpIGluIHJhbmdlKDEyOCk6CisgICAgICAgIGMgPSBjaHIoaSkK KworICAgICAgICBpZiBub3QgYy5pc3ByaW50YWJsZSgpOgorICAgICAgICAgICAgaW5wdXQgKz0g Ynl0ZXMoW2ldKQorCisgICAgaW5wdXQgKz0gYnl0ZXMocmFuZ2UoMTI4LCAyNTYpKQorCisgICAg cmV0dXJuIGJ5dGVzLm1ha2V0cmFucyhpbnB1dCwgYiIuIiAqIGxlbihpbnB1dCkpCisKKworY2xh c3MgX0RlYnVnU3RyZWFtKG9iamVjdCk6CisgICAgIiIiCisgICAgV3JhcHMgYSBmaWxlLWxpa2Ug b2JqZWN0IGFuZCBhZGRzIGhleGR1bXBzIG9mIHRoZSByZWFkIGFuZCB3cml0ZSBkYXRhLiBDYWxs CisgICAgZW5kX3BhY2tldCgpIG9uIGEgX0RlYnVnU3RyZWFtIHRvIHdyaXRlIHRoZSBhY2N1bXVs YXRlZCBoZXhkdW1wcyB0byB0aGUKKyAgICBvdXRwdXQgc3RyZWFtLCBhbG9uZyB3aXRoIHRoZSBw YWNrZXQgdGhhdCB3YXMgc2VudC4KKyAgICAiIiIKKworICAgIF90cmFuc2xhdGlvbl9tYXAgPSBf aGV4ZHVtcF90cmFuc2xhdGlvbl9tYXAoKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVh bSwgb3V0PXN5cy5zdGRvdXQpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlcyBhIG5ldyBf RGVidWdTdHJlYW0gd3JhcHBpbmcgdGhlIGdpdmVuIHN0cmVhbSAod2hpY2ggbXVzdCBoYXZlCisg ICAgICAgIGJlZW4gY3JlYXRlZCBieSB3cmFwKCkpLiBBbGwgYXR0cmlidXRlcyBub3QgcHJvdmlk ZWQgYnkgdGhlIF9EZWJ1Z1N0cmVhbQorICAgICAgICBhcmUgZGVsZWdhdGVkIHRvIHRoZSB3cmFw cGVkIHN0cmVhbS4gb3V0IGlzIHRoZSB0ZXh0IHN0cmVhbSB0byB3aGljaAorICAgICAgICBoZXhk dW1wcyBhcmUgd3JpdHRlbi4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYucmF3ID0gc3RyZWFt CisgICAgICAgIHNlbGYuX291dCA9IG91dAorICAgICAgICBzZWxmLl9yYnVmID0gaW8uQnl0ZXNJ TygpCisgICAgICAgIHNlbGYuX3didWYgPSBpby5CeXRlc0lPKCkKKworICAgIGRlZiBfX2dldGF0 dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5yYXcsIG5hbWUp CisKKyAgICBkZWYgX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpOgorICAgICAgICBpZiBu YW1lIGluICgicmF3IiwgIl9vdXQiLCAiX3JidWYiLCAiX3didWYiKToKKyAgICAgICAgICAgIHJl dHVybiBvYmplY3QuX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpCisKKyAgICAgICAgc2V0 YXR0cihzZWxmLnJhdywgbmFtZSwgdmFsdWUpCisKKyAgICBkZWYgcmVhZChzZWxmLCAqYXJncywg Kiprd2FyZ3MpOgorICAgICAgICBidWYgPSBzZWxmLnJhdy5yZWFkKCphcmdzLCAqKmt3YXJncykK KworICAgICAgICBzZWxmLl9yYnVmLndyaXRlKGJ1ZikKKyAgICAgICAgcmV0dXJuIGJ1ZgorCisg ICAgZGVmIHdyaXRlKHNlbGYsIGIpOgorICAgICAgICBzZWxmLl93YnVmLndyaXRlKGIpCisgICAg ICAgIHJldHVybiBzZWxmLnJhdy53cml0ZShiKQorCisgICAgZGVmIHJlY3Yoc2VsZiwgKmFyZ3Mp OgorICAgICAgICBidWYgPSBzZWxmLnJhdy5yZWN2KCphcmdzKQorCisgICAgICAgIHNlbGYuX3Ji dWYud3JpdGUoYnVmKQorICAgICAgICByZXR1cm4gYnVmCisKKyAgICBkZWYgX2ZsdXNoKHNlbGYs IGJ1ZiwgcHJlZml4KToKKyAgICAgICAgd2lkdGggPSAxNgorICAgICAgICBoZXh3aWR0aCA9IHdp ZHRoICogMyAtIDEKKworICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgYnVmLnNlZWsoMCkKKwor ICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgbGluZSA9IGJ1Zi5yZWFkKDE2KQorCisg ICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICBpZiBjb3VudDoKKyAgICAg ICAgICAgICAgICAgICAgc2VsZi5fb3V0LndyaXRlKCJcbiIpICAjIHNlcGFyYXRlIHRoZSBvdXRw dXQgYmxvY2sgd2l0aCBhIG5ld2xpbmUKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAg ICAgICAgc2VsZi5fb3V0LndyaXRlKCIlcyAlMDRYOlx0IiAlIChwcmVmaXgsIGNvdW50KSkKKyAg ICAgICAgICAgIHNlbGYuX291dC53cml0ZSgiJSpzXHQiICUgKC1oZXh3aWR0aCwgbGluZS5oZXgo IiAiKSkpCisgICAgICAgICAgICBzZWxmLl9vdXQud3JpdGUobGluZS50cmFuc2xhdGUoc2VsZi5f dHJhbnNsYXRpb25fbWFwKS5kZWNvZGUoImFzY2lpIikpCisgICAgICAgICAgICBzZWxmLl9vdXQu d3JpdGUoIlxuIikKKworICAgICAgICAgICAgY291bnQgKz0gMTYKKworICAgIGRlZiBwcmludF9k ZWJ1ZyhzZWxmLCBvYmosICosIHByZWZpeD0iIik6CisgICAgICAgIGNvbnRlbnRzID0gIiIKKyAg ICAgICAgaWYgb2JqIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY29udGVudHMgPSBzdHIob2Jq KQorCisgICAgICAgIGZvciBsaW5lIGluIGNvbnRlbnRzLnNwbGl0bGluZXMoKToKKyAgICAgICAg ICAgIHNlbGYuX291dC53cml0ZSgiJXMlc1xuIiAlIChwcmVmaXgsIGxpbmUpKQorCisgICAgICAg IHNlbGYuX291dC53cml0ZSgiXG4iKQorCisgICAgZGVmIGZsdXNoX2RlYnVnKHNlbGYsICosIHBy ZWZpeD0iIik6CisgICAgICAgIHNlbGYuX2ZsdXNoKHNlbGYuX3JidWYsIHByZWZpeCArICI8IikK KyAgICAgICAgc2VsZi5fcmJ1ZiA9IGlvLkJ5dGVzSU8oKQorCisgICAgICAgIHNlbGYuX2ZsdXNo KHNlbGYuX3didWYsIHByZWZpeCArICI+IikKKyAgICAgICAgc2VsZi5fd2J1ZiA9IGlvLkJ5dGVz SU8oKQorCisgICAgZGVmIGVuZF9wYWNrZXQoc2VsZiwgcGt0LCAqLCByZWFkPUZhbHNlLCBwcmVm aXg9IiIsIGluZGVudD0iICAiKToKKyAgICAgICAgIiIiCisgICAgICAgIE1hcmtzIHRoZSBlbmQg b2YgYSBsb2dpY2FsICJwYWNrZXQiIG9mIGRhdGEuIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9m CisgICAgICAgIHBrdCB3aWxsIGJlIHByaW50ZWQsIGFuZCB0aGUgZGVidWcgYnVmZmVycyB3aWxs IGJlIGZsdXNoZWQgd2l0aCBhbgorICAgICAgICBpbmRlbnQuIEFsbCBsaW5lcyBjYW4gYmUgb3B0 aW9uYWxseSBwcmVmaXhlZC4KKworICAgICAgICBJZiByZWFkIGlzIFRydWUsIHRoZSBwYWNrZXQg cmVwcmVzZW50YXRpb24gaXMgd3JpdHRlbiBhZnRlciB0aGUgZGVidWcKKyAgICAgICAgYnVmZmVy czsgb3RoZXJ3aXNlIHRoZSBkZWZhdWx0IG9mIEZhbHNlIChtZWFuaW5nIHdyaXRlKSBjYXVzZXMg dGhlCisgICAgICAgIHBhY2tldCByZXByZXNlbnRhdGlvbiB0byBiZSBkdW1wZWQgZmlyc3QuIFRo aXMgaXMgbWVhbnQgdG8gY2FwdHVyZSB0aGUKKyAgICAgICAgbG9naWNhbCBmbG93IG9mIGxheWVy IHRyYW5zbGF0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgd3JpdGUgPSBub3QgcmVhZAorCisg ICAgICAgIGlmIHdyaXRlOgorICAgICAgICAgICAgc2VsZi5wcmludF9kZWJ1Zyhwa3QsIHByZWZp eD1wcmVmaXggKyAiPiAiKQorCisgICAgICAgIHNlbGYuZmx1c2hfZGVidWcocHJlZml4PXByZWZp eCArIGluZGVudCkKKworICAgICAgICBpZiByZWFkOgorICAgICAgICAgICAgc2VsZi5wcmludF9k ZWJ1Zyhwa3QsIHByZWZpeD1wcmVmaXggKyAiPCAiKQorCisKK0Bjb250ZXh0bGliLmNvbnRleHRt YW5hZ2VyCitkZWYgd3JhcChzb2NrZXQsICosIGRlYnVnX3N0cmVhbT1Ob25lKToKKyAgICAiIiIK KyAgICBUcmFuc2Zvcm1zIGEgcmF3IHNvY2tldCBpbnRvIGEgY29ubmVjdGlvbiB0aGF0IGNhbiBi ZSB1c2VkIGZvciBDb25zdHJ1Y3QKKyAgICBidWlsZGluZyBhbmQgcGFyc2luZy4gVGhlIHJldHVy biB2YWx1ZSBpcyBhIGNvbnRleHQgbWFuYWdlciBhbmQgY2FuIGJlIHVzZWQKKyAgICBpbiBhIHdp dGggc3RhdGVtZW50LgorICAgICIiIgorICAgICMgSXQgaXMgY3JpdGljYWwgdGhhdCBidWZmZXJp bmcgYmUgZGlzYWJsZWQgaGVyZSwgc28gdGhhdCB3ZSBjYW4gc3RpbGwKKyAgICAjIG1hbmlwdWxh dGUgdGhlIHJhdyBzb2NrZXQgd2l0aG91dCBkZXN5bmNpbmcgdGhlIHN0cmVhbS4KKyAgICB3aXRo IHNvY2tldC5tYWtlZmlsZSgicndiIiwgYnVmZmVyaW5nPTApIGFzIHNmaWxlOgorICAgICAgICAj IEV4cG9zZSB0aGUgb3JpZ2luYWwgc29ja2V0J3MgcmVjdigpIG9uIHRoZSBTb2NrZXRJTyBvYmpl Y3Qgd2UgcmV0dXJuLgorICAgICAgICBkZWYgcmVjdihzZWxmLCAqYXJncyk6CisgICAgICAgICAg ICByZXR1cm4gc29ja2V0LnJlY3YoKmFyZ3MpCisKKyAgICAgICAgc2ZpbGUucmVjdiA9IHJlY3Yu X19nZXRfXyhzZmlsZSkKKworICAgICAgICBjb25uID0gc2ZpbGUKKyAgICAgICAgaWYgZGVidWdf c3RyZWFtOgorICAgICAgICAgICAgY29ubiA9IF9EZWJ1Z1N0cmVhbShjb25uLCBkZWJ1Z19zdHJl YW0pCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeWllbGQgY29ubgorICAgICAgICBmaW5h bGx5OgorICAgICAgICAgICAgaWYgZGVidWdfc3RyZWFtOgorICAgICAgICAgICAgICAgIGNvbm4u Zmx1c2hfZGVidWcocHJlZml4PSI/ICIpCisKKworZGVmIF9zZW5kKHN0cmVhbSwgY2xzLCBvYmop OgorICAgIGRlYnVnZ2luZyA9IGhhc2F0dHIoc3RyZWFtLCAiZmx1c2hfZGVidWciKQorICAgIG91 dCA9IGlvLkJ5dGVzSU8oKQorCisgICAgIyBJZGVhbGx5IHdlIHdvdWxkIGJ1aWxkIGRpcmVjdGx5 IHRvIHRoZSBwYXNzZWQgc3RyZWFtLCBidXQgYmVjYXVzZSB3ZSBuZWVkCisgICAgIyB0byByZXBh cnNlIHRoZSBnZW5lcmF0ZWQgb3V0cHV0IGZvciB0aGUgZGVidWdnaW5nIGNhc2UsIGJ1aWxkIHRv IGFuCisgICAgIyBpbnRlcm1lZGlhdGUgQnl0ZXNJTyBhbmQgc2VuZCBpdCBpbnN0ZWFkLgorICAg IGNscy5idWlsZF9zdHJlYW0ob2JqLCBvdXQpCisgICAgYnVmID0gb3V0LmdldHZhbHVlKCkKKwor ICAgIHN0cmVhbS53cml0ZShidWYpCisgICAgaWYgZGVidWdnaW5nOgorICAgICAgICBwa3QgPSBj bHMucGFyc2UoYnVmKQorICAgICAgICBzdHJlYW0uZW5kX3BhY2tldChwa3QpCisKKyAgICBzdHJl YW0uZmx1c2goKQorCisKK2RlZiBzZW5kKHN0cmVhbSwgcGFja2V0X3R5cGUsIHBheWxvYWRfZGF0 YT1Ob25lLCAqKnBheWxvYWRrdyk6CisgICAgIiIiCisgICAgU2VuZHMgYSBwYWNrZXQgb24gdGhl IGdpdmVuIHBxMyBjb25uZWN0aW9uLiB0eXBlIGlzIHRoZSBwcTMudHlwZXMgbWVtYmVyCisgICAg dGhhdCBzaG91bGQgYmUgYXNzaWduZWQgdG8gdGhlIHBhY2tldC4gSWYgcGF5bG9hZF9kYXRhIGlz IGdpdmVuLCBpdCB3aWxsIGJlCisgICAgdXNlZCBhcyB0aGUgcGFja2V0IHBheWxvYWQ7IG90aGVy d2lzZSB0aGUga2V5L3ZhbHVlIHBhaXJzIGluIHBheWxvYWRrdyB3aWxsCisgICAgYmUgdGhlIHBh eWxvYWQgY29udGVudHMuCisgICAgIiIiCisgICAgZGF0YSA9IHBheWxvYWRrdworCisgICAgaWYg cGF5bG9hZF9kYXRhIGlzIG5vdCBOb25lOgorICAgICAgICBpZiBwYXlsb2Fka3c6CisgICAgICAg ICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICJwYXlsb2FkX2RhdGEgYW5k IHBheWxvYWQga2V5d29yZHMgbWF5IG5vdCBiZSB1c2VkIHNpbXVsdGFuZW91c2x5IgorICAgICAg ICAgICAgKQorCisgICAgICAgIGRhdGEgPSBwYXlsb2FkX2RhdGEKKworICAgIF9zZW5kKHN0cmVh bSwgUHEzLCBkaWN0KHR5cGU9cGFja2V0X3R5cGUsIHBheWxvYWQ9ZGF0YSkpCisKKworZGVmIHNl bmRfc3RhcnR1cChzdHJlYW0sIHByb3RvPU5vbmUsICoqa3dhcmdzKToKKyAgICAiIiIKKyAgICBT ZW5kcyBhIHN0YXJ0dXAgcGFja2V0IG9uIHRoZSBnaXZlbiBwcTMgY29ubmVjdGlvbi4gSW4gbW9z dCBjYXNlcyB5b3Ugc2hvdWxkCisgICAgdXNlIHRoZSBoYW5kc2hha2UgZnVuY3Rpb25zIGluc3Rl YWQsIHdoaWNoIHdpbGwgZG8gdGhpcyBmb3IgeW91LgorCisgICAgQnkgZGVmYXVsdCwgYSBwcm90 b2NvbCB2ZXJzaW9uIDMgcGFja2V0IHdpbGwgYmUgc2VudC4gVGhpcyBjYW4gYmUgb3ZlcnJpZGRl bgorICAgIHdpdGggdGhlIHByb3RvIHBhcmFtZXRlci4KKyAgICAiIiIKKyAgICBwa3QgPSB7fQor CisgICAgaWYgcHJvdG8gaXMgbm90IE5vbmU6CisgICAgICAgIHBrdFsicHJvdG8iXSA9IHByb3Rv CisgICAgaWYga3dhcmdzOgorICAgICAgICBwa3RbInBheWxvYWQiXSA9IGt3YXJncworCisgICAg X3NlbmQoc3RyZWFtLCBTdGFydHVwLCBwa3QpCisKKworZGVmIHJlY3YxKHN0cmVhbSwgKiwgY2xz PVBxMyk6CisgICAgIiIiCisgICAgUmVjZWl2ZXMgYSBzaW5nbGUgcHEzIHBhY2tldCBmcm9tIHRo ZSBnaXZlbiBzdHJlYW0gYW5kIHJldHVybnMgaXQuCisgICAgIiIiCisgICAgcmVzcCA9IGNscy5w YXJzZV9zdHJlYW0oc3RyZWFtKQorCisgICAgZGVidWdnaW5nID0gaGFzYXR0cihzdHJlYW0sICJm bHVzaF9kZWJ1ZyIpCisgICAgaWYgZGVidWdnaW5nOgorICAgICAgICBzdHJlYW0uZW5kX3BhY2tl dChyZXNwLCByZWFkPVRydWUpCisKKyAgICByZXR1cm4gcmVzcAorCisKK2RlZiBoYW5kc2hha2Uo c3RyZWFtLCAqKmt3YXJncyk6CisgICAgIiIiCisgICAgUGVyZm9ybXMgYSBsaWJwcSB2MyBzdGFy dHVwIGhhbmRzaGFrZS4ga3dhcmdzIHNob3VsZCBjb250YWluIHRoZSBrZXkvdmFsdWUKKyAgICBw YXJhbWV0ZXJzIHRvIHNlbmQgdG8gdGhlIHNlcnZlciBpbiB0aGUgc3RhcnR1cCBwYWNrZXQuCisg ICAgIiIiCisgICAgIyBTZW5kIG91ciBzdGFydHVwIHBhcmFtZXRlcnMuCisgICAgc2VuZF9zdGFy dHVwKHN0cmVhbSwgKiprd2FyZ3MpCisKKyAgICAjIFJlY2VpdmUgYW5kIGR1bXAgcGFja2V0cyB1 bnRpbCB0aGUgc2VydmVyIGluZGljYXRlcyBpdCdzIHJlYWR5IGZvciBvdXIKKyAgICAjIGZpcnN0 IHF1ZXJ5LgorICAgIHdoaWxlIFRydWU6CisgICAgICAgIHJlc3AgPSByZWN2MShzdHJlYW0pCisg ICAgICAgIGlmIHJlc3AgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigi c2VydmVyIGNsb3NlZCBjb25uZWN0aW9uIGR1cmluZyBoYW5kc2hha2UiKQorCisgICAgICAgIGlm IHJlc3AudHlwZSA9PSB0eXBlcy5SZWFkeUZvclF1ZXJ5OgorICAgICAgICAgICAgcmV0dXJuCisg ICAgICAgIGVsaWYgcmVzcC50eXBlID09IHR5cGVzLkVycm9yUmVzcG9uc2U6CisgICAgICAgICAg ICByYWlzZSBSdW50aW1lRXJyb3IoCisgICAgICAgICAgICAgICAgZiJyZWNlaXZlZCBlcnJvciBy ZXNwb25zZSBmcm9tIHBlZXI6IHtyZXNwLnBheWxvYWQuZmllbGRzIXJ9IgorICAgICAgICAgICAg KQorCisKKyMgVExTCisKKworY2xhc3MgX1RMU1N0cmVhbShvYmplY3QpOgorICAgICIiIgorICAg IEEgZmlsZS1saWtlIG9iamVjdCB0aGF0IHBlcmZvcm1zIFRMUyBlbmNyeXB0aW9uL2RlY3J5cHRp b24gb24gYSB3cmFwcGVkCisgICAgc3RyZWFtLiBEaWZmZXJzIGZyb20gc3NsLlNTTFNvY2tldCBp biB0aGF0IHdlIGhhdmUgZnVsbCB2aXNpYmlsaXR5IGFuZAorICAgIGNvbnRyb2wgb3ZlciB0aGUg VExTIGxheWVyLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbSwgY29u dGV4dCk6CisgICAgICAgIHNlbGYuX3N0cmVhbSA9IHN0cmVhbQorICAgICAgICBzZWxmLl9kZWJ1 Z2dpbmcgPSBoYXNhdHRyKHN0cmVhbSwgImZsdXNoX2RlYnVnIikKKworICAgICAgICBzZWxmLl9p biA9IHNzbC5NZW1vcnlCSU8oKQorICAgICAgICBzZWxmLl9vdXQgPSBzc2wuTWVtb3J5QklPKCkK KyAgICAgICAgc2VsZi5fc3NsID0gY29udGV4dC53cmFwX2JpbyhzZWxmLl9pbiwgc2VsZi5fb3V0 KQorCisgICAgZGVmIGhhbmRzaGFrZShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg c2VsZi5fcHVtcChsYW1iZGE6IHNlbGYuX3NzbC5kb19oYW5kc2hha2UoKSkKKyAgICAgICAgZmlu YWxseToKKyAgICAgICAgICAgIHNlbGYuX2ZsdXNoX2RlYnVnKHByZWZpeD0iPyAiKQorCisgICAg ZGVmIHJlYWQoc2VsZiwgKmFyZ3MpOgorICAgICAgICByZXR1cm4gc2VsZi5fcHVtcChsYW1iZGE6 IHNlbGYuX3NzbC5yZWFkKCphcmdzKSkKKworICAgIGRlZiB3cml0ZShzZWxmLCAqYXJncyk6Cisg ICAgICAgIHJldHVybiBzZWxmLl9wdW1wKGxhbWJkYTogc2VsZi5fc3NsLndyaXRlKCphcmdzKSkK KworICAgIGRlZiBfZGVjb2RlKHNlbGYsIGJ1Zik6CisgICAgICAgICIiIgorICAgICAgICBBdHRl bXB0cyB0byBkZWNvZGUgYSBidWZmZXIgb2YgVExTIGRhdGEgaW50byBhIHBhY2tldCByZXByZXNl bnRhdGlvbgorICAgICAgICB0aGF0IGNhbiBiZSBwcmludGVkLgorCisgICAgICAgIFRPRE86IGhh bmRsZSBidWZmZXJzIChhbmQgcmVjb3JkIGZyYWdtZW50cykgdGhhdCBkb24ndCBhbGlnbiB3aXRo IHBhY2tldAorICAgICAgICBib3VuZGFyaWVzLgorICAgICAgICAiIiIKKyAgICAgICAgZW5kID0g bGVuKGJ1ZikKKyAgICAgICAgYmlvID0gaW8uQnl0ZXNJTyhidWYpCisKKyAgICAgICAgcmV0ID0g aW8uU3RyaW5nSU8oKQorCisgICAgICAgIHdoaWxlIGJpby50ZWxsKCkgPCBlbmQ6CisgICAgICAg ICAgICByZWNvcmQgPSB0bHMuUGxhaW50ZXh0LnBhcnNlX3N0cmVhbShiaW8pCisKKyAgICAgICAg ICAgIGlmIHJldC50ZWxsKCkgPiAwOgorICAgICAgICAgICAgICAgIHJldC53cml0ZSgiXG4iKQor ICAgICAgICAgICAgcmV0LndyaXRlKCJbUmVjb3JkXSAiKQorICAgICAgICAgICAgcmV0LndyaXRl KHN0cihyZWNvcmQpKQorICAgICAgICAgICAgcmV0LndyaXRlKCJcbiIpCisKKyAgICAgICAgICAg IGlmIHJlY29yZC50eXBlID09IHRscy5Db250ZW50VHlwZS5oYW5kc2hha2U6CisgICAgICAgICAg ICAgICAgcmVjb3JkX2NscyA9IHRscy5IYW5kc2hha2UKKyAgICAgICAgICAgIGVsc2U6CisgICAg ICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaW5uZXJsZW4gPSBsZW4ocmVjb3Jk LmZyYWdtZW50KQorICAgICAgICAgICAgaW5uZXIgPSBpby5CeXRlc0lPKHJlY29yZC5mcmFnbWVu dCkKKworICAgICAgICAgICAgd2hpbGUgaW5uZXIudGVsbCgpIDwgaW5uZXJsZW46CisgICAgICAg ICAgICAgICAgbXNnID0gcmVjb3JkX2Nscy5wYXJzZV9zdHJlYW0oaW5uZXIpCisKKyAgICAgICAg ICAgICAgICBpbmRlbnRlZCA9ICJbTWVzc2FnZV0gIiArIHN0cihtc2cpCisgICAgICAgICAgICAg ICAgaW5kZW50ZWQgPSB0ZXh0d3JhcC5pbmRlbnQoaW5kZW50ZWQsICIgICAgIikKKworICAgICAg ICAgICAgICAgIHJldC53cml0ZSgiXG4iKQorICAgICAgICAgICAgICAgIHJldC53cml0ZShpbmRl bnRlZCkKKyAgICAgICAgICAgICAgICByZXQud3JpdGUoIlxuIikKKworICAgICAgICByZXR1cm4g cmV0LmdldHZhbHVlKCkKKworICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAgaWYgbm90IHNl bGYuX291dC5wZW5kaW5nOgorICAgICAgICAgICAgc2VsZi5fc3RyZWFtLmZsdXNoKCkKKyAgICAg ICAgICAgIHJldHVybgorCisgICAgICAgIGJ1ZiA9IHNlbGYuX291dC5yZWFkKCkKKyAgICAgICAg c2VsZi5fc3RyZWFtLndyaXRlKGJ1ZikKKworICAgICAgICBpZiBzZWxmLl9kZWJ1Z2dpbmc6Cisg ICAgICAgICAgICBwa3QgPSBzZWxmLl9kZWNvZGUoYnVmKQorICAgICAgICAgICAgc2VsZi5fc3Ry ZWFtLmVuZF9wYWNrZXQocGt0LCBwcmVmaXg9IiAgIikKKworICAgICAgICBzZWxmLl9zdHJlYW0u Zmx1c2goKQorCisgICAgZGVmIF9wdW1wKHNlbGYsIG9wZXJhdGlvbik6CisgICAgICAgIHdoaWxl IFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv bigpCisgICAgICAgICAgICBleGNlcHQgKHNzbC5TU0xXYW50UmVhZEVycm9yLCBzc2wuU1NMV2Fu dFdyaXRlRXJyb3IpIGFzIGU6CisgICAgICAgICAgICAgICAgd2FudCA9IGUKKyAgICAgICAgICAg IHNlbGYuX3JlYWRfd3JpdGUod2FudCkKKworICAgIGRlZiBfcmVjdihzZWxmLCBtYXhzaXplKToK KyAgICAgICAgYnVmID0gc2VsZi5fc3RyZWFtLnJlY3YoNDA5NikKKyAgICAgICAgaWYgbm90IGJ1 ZjoKKyAgICAgICAgICAgIHNlbGYuX2luLndyaXRlX2VvZigpCisgICAgICAgICAgICByZXR1cm4K KworICAgICAgICBzZWxmLl9pbi53cml0ZShidWYpCisKKyAgICAgICAgaWYgbm90IHNlbGYuX2Rl YnVnZ2luZzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHBrdCA9IHNlbGYuX2RlY29k ZShidWYpCisgICAgICAgIHNlbGYuX3N0cmVhbS5lbmRfcGFja2V0KHBrdCwgcmVhZD1UcnVlLCBw cmVmaXg9IiAgIikKKworICAgIGRlZiBfcmVhZF93cml0ZShzZWxmLCB3YW50KToKKyAgICAgICAg IyBYWFggVGhpcyBuZWVkcyB3b3JrLiBTbyBtYW55IGNvcm5lciBjYXNlcyB5ZXQgdG8gaGFuZGxl LiBGb3Igb25lLAorICAgICAgICAjIGRvaW5nIGJsb2NraW5nIHdyaXRlcyBpbiBmbHVzaCBtYXkg bGVhZCB0byBkaXN0cmlidXRlZCBkZWFkbG9jayBpZiB0aGUKKyAgICAgICAgIyBwZWVyIGlzIGFs cmVhZHkgYmxvY2tpbmcgb24gaXRzIHdyaXRlcy4KKworICAgICAgICBpZiBpc2luc3RhbmNlKHdh bnQsIHNzbC5TU0xXYW50V3JpdGVFcnJvcik6CisgICAgICAgICAgICBhc3NlcnQgc2VsZi5fb3V0 LnBlbmRpbmcsICJTU0wgYmFja2VuZCB3YW50cyB3cml0ZSB3aXRob3V0IGRhdGEiCisKKyAgICAg ICAgc2VsZi5mbHVzaCgpCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh3YW50LCBzc2wuU1NMV2Fu dFJlYWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLl9yZWN2KDQwOTYpCisKKyAgICBkZWYgX2Zs dXNoX2RlYnVnKHNlbGYsIHByZWZpeCk6CisgICAgICAgIGlmIG5vdCBzZWxmLl9kZWJ1Z2dpbmc6 CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLl9zdHJlYW0uZmx1c2hfZGVidWco cHJlZml4PXByZWZpeCkKKworCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIHRsc19o YW5kc2hha2Uoc3RyZWFtLCBjb250ZXh0KToKKyAgICAiIiIKKyAgICBQZXJmb3JtcyBhIFRMUyBo YW5kc2hha2Ugb3ZlciB0aGUgZ2l2ZW4gc3RyZWFtICh3aGljaCBtdXN0IGhhdmUgYmVlbiBjcmVh dGVkCisgICAgdmlhIGEgY2FsbCB0byB3cmFwKCkpLCBhbmQgcmV0dXJucyBhIG5ldyBzdHJlYW0g d2hpY2ggdHJhbnNwYXJlbnRseSB0dW5uZWxzCisgICAgZGF0YSBvdmVyIHRoZSBUTFMgY29ubmVj dGlvbi4KKworICAgIElmIHRoZSBwYXNzZWQgc3RyZWFtIGhhcyBkZWJ1Z2dpbmcgZW5hYmxlZCwg dGhlIHJldHVybmVkIHN0cmVhbSB3aWxsIGFsc28KKyAgICBoYXZlIGRlYnVnZ2luZywgdXNpbmcg dGhlIHNhbWUgb3V0cHV0IElPLgorICAgICIiIgorICAgIGRlYnVnZ2luZyA9IGhhc2F0dHIoc3Ry ZWFtLCAiZmx1c2hfZGVidWciKQorCisgICAgIyBTZW5kIG91ciBzdGFydHVwIHBhcmFtZXRlcnMu CisgICAgc2VuZF9zdGFydHVwKHN0cmVhbSwgcHJvdG89cHJvdG9jb2woMTIzNCwgNTY3OSkpCisK KyAgICAjIExvb2sgYXQgdGhlIFNTTCByZXNwb25zZS4KKyAgICByZXNwID0gc3RyZWFtLnJlYWQo MSkKKyAgICBpZiBkZWJ1Z2dpbmc6CisgICAgICAgIHN0cmVhbS5mbHVzaF9kZWJ1ZyhwcmVmaXg9 IiAgIikKKworICAgIGlmIHJlc3AgPT0gYiJOIjoKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9y KCJzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBTU0xSZXF1ZXN0IikKKyAgICBpZiByZXNwICE9IGIi UyI6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihmInVuZXhwZWN0ZWQgcmVzcG9uc2Ugb2Yg dHlwZSB7cmVzcCFyfSBkdXJpbmcgVExTIHN0YXJ0dXAiKQorCisgICAgdGxzID0gX1RMU1N0cmVh bShzdHJlYW0sIGNvbnRleHQpCisgICAgdGxzLmhhbmRzaGFrZSgpCisKKyAgICBpZiBkZWJ1Z2dp bmc6CisgICAgICAgIHRscyA9IF9EZWJ1Z1N0cmVhbSh0bHMsIHN0cmVhbS5fb3V0KQorCisgICAg dHJ5OgorICAgICAgICB5aWVsZCB0bHMKKyAgICAgICAgIyBUT0RPOiB0ZWFyZG93bi91bndyYXAg dGhlIGNvbm5lY3Rpb24/CisgICAgZmluYWxseToKKyAgICAgICAgaWYgZGVidWdnaW5nOgorICAg ICAgICAgICAgdGxzLmZsdXNoX2RlYnVnKHByZWZpeD0iPyAiKQpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcHl0aG9uL3B5dGVzdC5pbmkgYi9zcmMvdGVzdC9weXRob24vcHl0ZXN0LmluaQpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5hYjdhNmU3ZmI5Ci0tLSAvZGV2L251bGwK KysrIGIvc3JjL3Rlc3QvcHl0aG9uL3B5dGVzdC5pbmkKQEAgLTAsMCArMSw0IEBACitbcHl0ZXN0 XQorCittYXJrZXJzID0KKyAgICBzbG93OiBtYXJrIHRlc3QgYXMgc2xvdwpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcHl0aG9uL3JlcXVpcmVtZW50cy50eHQgYi9zcmMvdGVzdC9weXRob24vcmVxdWly ZW1lbnRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4zMmYxMDVl YTg0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcHl0aG9uL3JlcXVpcmVtZW50cy50eHQK QEAgLTAsMCArMSw3IEBACitibGFjaworY3J5cHRvZ3JhcGh5fj0zLjQuNgorY29uc3RydWN0fj0y LjEwLjYxCitpc29ydH49NS42Citwc3ljb3BnMn49Mi44LjYKK3B5dGVzdH49Ni4xCitweXRlc3Qt YXN5bmNpb349MC4xNC4wCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9weXRob24vc2VydmVyL19faW5p dF9fLnB5IGIvc3JjL3Rlc3QvcHl0aG9uL3NlcnZlci9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5lNjlkZTI5YmIyCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9weXRob24vc2VydmVyL2NvbmZ0ZXN0LnB5IGIvc3JjL3Rlc3QvcHl0aG9uL3NlcnZlci9jb25m dGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5iYTczNDJhNDUz Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcHl0aG9uL3NlcnZlci9jb25mdGVzdC5weQpA QCAtMCwwICsxLDQ1IEBACisjCisjIENvcHlyaWdodCAyMDIxIFZNd2FyZSwgSW5jLgorIyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogUG9zdGdyZVNRTAorIworCitpbXBvcnQgY29udGV4dGxpYgor aW1wb3J0IHNvY2tldAoraW1wb3J0IHN5cworCitpbXBvcnQgcHl0ZXN0CisKK2ltcG9ydCBwcTMK KworCitAcHl0ZXN0LmZpeHR1cmUKK2RlZiBjb25uZWN0KCk6CisgICAgIiIiCisgICAgQSBmYWN0 b3J5IGZpeHR1cmUgdGhhdCwgd2hlbiBjYWxsZWQsIHJldHVybnMgYSBzb2NrZXQgY29ubmVjdGVk IHRvIGEKKyAgICBQb3N0Z3JlcyBzZXJ2ZXIsIHdyYXBwZWQgaW4gYSBwcTMgY29ubmVjdGlvbi4g VGhlIGNhbGxpbmcgdGVzdCB3aWxsIGJlCisgICAgc2tpcHBlZCBhdXRvbWF0aWNhbGx5IGlmIGEg c2VydmVyIGlzIG5vdCBydW5uaW5nIGF0IFBHSE9TVDpQR1BPUlQsIHNvIGl0J3MKKyAgICBiZXN0 IHRvIGNvbm5lY3QgYXMgc29vbiBhcyBwb3NzaWJsZSBhZnRlciB0aGUgdGVzdCBjYXNlIGJlZ2lu cywgdG8gYXZvaWQKKyAgICBkb2luZyB1bm5lY2Vzc2FyeSB3b3JrLgorICAgICIiIgorICAgICMg U2V0IHVwIGFuIEV4aXRTdGFjayB0byBoYW5kbGUgc2FmZSBjbGVhbnVwIG9mIGFsbCBvZiB0aGUg bW92aW5nIHBpZWNlcy4KKyAgICB3aXRoIGNvbnRleHRsaWIuRXhpdFN0YWNrKCkgYXMgc3RhY2s6 CisKKyAgICAgICAgZGVmIGNvbm5fZmFjdG9yeSgpOgorICAgICAgICAgICAgYWRkciA9IChwcTMu cGdob3N0KCksIHBxMy5wZ3BvcnQoKSkKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAg ICAgIHNvY2sgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oYWRkciwgdGltZW91dD0yKQorICAg ICAgICAgICAgZXhjZXB0IENvbm5lY3Rpb25FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHB5 dGVzdC5za2lwKGYidW5hYmxlIHRvIGNvbm5lY3QgdG8ge2FkZHJ9OiB7ZX0iKQorCisgICAgICAg ICAgICAjIEhhdmUgRXhpdFN0YWNrIGNsb3NlIG91ciBzb2NrZXQuCisgICAgICAgICAgICBzdGFj ay5lbnRlcl9jb250ZXh0KHNvY2spCisKKyAgICAgICAgICAgICMgV3JhcCB0aGUgY29ubmVjdGlv biBpbiBhIHBxMyBsYXllciBhbmQgaGF2ZSBFeGl0U3RhY2sgY2xlYW4gaXQgdXAKKyAgICAgICAg ICAgICMgdG9vLgorICAgICAgICAgICAgd3JhcF9jdHggPSBwcTMud3JhcChzb2NrLCBkZWJ1Z19z dHJlYW09c3lzLnN0ZG91dCkKKyAgICAgICAgICAgIGNvbm4gPSBzdGFjay5lbnRlcl9jb250ZXh0 KHdyYXBfY3R4KQorCisgICAgICAgICAgICByZXR1cm4gY29ubgorCisgICAgICAgIHlpZWxkIGNv bm5fZmFjdG9yeQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcHl0aG9uL3NlcnZlci90ZXN0X29hdXRo LnB5IGIvc3JjL3Rlc3QvcHl0aG9uL3NlcnZlci90ZXN0X29hdXRoLnB5Cm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmNiNWNhN2ZhMjMKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvdGVzdC9weXRob24vc2VydmVyL3Rlc3Rfb2F1dGgucHkKQEAgLTAsMCArMSwxMDEyIEBACisj CisjIENvcHlyaWdodCAyMDIxIFZNd2FyZSwgSW5jLgorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogUG9zdGdyZVNRTAorIworCitpbXBvcnQgYmFzZTY0CitpbXBvcnQgY29udGV4dGxpYgoraW1w b3J0IGpzb24KK2ltcG9ydCBvcworaW1wb3J0IHBhdGhsaWIKK2ltcG9ydCBzZWNyZXRzCitpbXBv cnQgc2hsZXgKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzdHJ1Y3QKK2Zy b20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBzaGFyZWRfbWVtb3J5CisKK2ltcG9ydCBwc3ljb3Bn MgoraW1wb3J0IHB5dGVzdAorZnJvbSBwc3ljb3BnMiBpbXBvcnQgc3FsCisKK2ltcG9ydCBwcTMK KworTUFYX1NBU0xfTUVTU0FHRV9MRU5HVEggPSA2NTUzNQorCitJTlZBTElEX0FVVEhPUklaQVRJ T05fRVJSQ09ERSA9IGIiMjgwMDAiCitQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSA9IGIiMDhQ MDEiCitGRUFUVVJFX05PVF9TVVBQT1JURURfRVJSQ09ERSA9IGIiMEEwMDAiCisKK1NIQVJFRF9N RU1fTkFNRSA9ICJvYXV0aC1weXRlc3QiCitNQVhfVE9LRU5fU0laRSA9IDQwOTYKK01BWF9VSU5U MTYgPSAyICoqIDE2IC0gMQorCisKK2RlZiBza2lwX2lmX25vX3Bvc3RncmVzKCk6CisgICAgIiIi CisgICAgVXNlZCBieSB0aGUgb2F1dGhfY3R4IGZpeHR1cmUgdG8gc2tpcCB0aGlzIHRlc3QgbW9k dWxlIGlmIG5vIFBvc3RncmVzIHNlcnZlcgorICAgIGlzIHJ1bm5pbmcuCisKKyAgICBUaGlzIGxv Z2ljIGlzIG5lYXJseSBkdXBsaWNhdGVkIHdpdGggdGhlIGNvbm4gZml4dHVyZS4gSWRlYWxseSBv YXV0aF9jdHgKKyAgICB3b3VsZCBkZXBlbmQgb24gdGhhdCwgYnV0IGEgbW9kdWxlLXNjb3BlIGZp eHR1cmUgY2FuJ3QgZGVwZW5kIG9uIGEKKyAgICB0ZXN0LXNjb3BlIGZpeHR1cmUsIGFuZCB3ZSBo YXZlbid0IHJlYWNoZWQgdGhlIHJ1bGUgb2YgdGhyZWUgeWV0LgorICAgICIiIgorICAgIGFkZHIg PSAocHEzLnBnaG9zdCgpLCBwcTMucGdwb3J0KCkpCisKKyAgICB0cnk6CisgICAgICAgIHdpdGgg c29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKGFkZHIsIHRpbWVvdXQ9Mik6CisgICAgICAgICAgICBw YXNzCisgICAgZXhjZXB0IENvbm5lY3Rpb25FcnJvciBhcyBlOgorICAgICAgICBweXRlc3Quc2tp cChmInVuYWJsZSB0byBjb25uZWN0IHRvIHthZGRyfToge2V9IikKKworCitAY29udGV4dGxpYi5j b250ZXh0bWFuYWdlcgorZGVmIHByZXBlbmRfZmlsZShwYXRoLCBsaW5lcyk6CisgICAgIiIiCisg ICAgQSBjb250ZXh0IG1hbmFnZXIgdGhhdCBwcmVwZW5kcyBhIGZpbGUgb24gZGlzayB3aXRoIHRo ZSBkZXNpcmVkIGxpbmVzIG9mCisgICAgdGV4dC4gV2hlbiB0aGUgY29udGV4dCBtYW5hZ2VyIGlz IGV4aXRlZCwgdGhlIGZpbGUgd2lsbCBiZSByZXN0b3JlZCB0byBpdHMKKyAgICBvcmlnaW5hbCBj b250ZW50cy4KKyAgICAiIiIKKyAgICAjIEZpcnN0IG1ha2UgYSBiYWNrdXAgb2YgdGhlIG9yaWdp bmFsIGZpbGUuCisgICAgYmFrID0gcGF0aCArICIuYmFrIgorICAgIHNodXRpbC5jb3B5MihwYXRo LCBiYWspCisKKyAgICB0cnk6CisgICAgICAgICMgV3JpdGUgdGhlIG5ldyBsaW5lcywgZm9sbG93 ZWQgYnkgdGhlIG9yaWdpbmFsIGZpbGUgY29udGVudC4KKyAgICAgICAgd2l0aCBvcGVuKHBhdGgs ICJ3IikgYXMgbmV3LCBvcGVuKGJhaywgInIiKSBhcyBvcmlnOgorICAgICAgICAgICAgbmV3Lndy aXRlbGluZXMobGluZXMpCisgICAgICAgICAgICBzaHV0aWwuY29weWZpbGVvYmoob3JpZywgbmV3 KQorCisgICAgICAgICMgUmV0dXJuIGNvbnRyb2wgdG8gdGhlIGNhbGxpbmcgY29kZS4KKyAgICAg ICAgeWllbGQKKworICAgIGZpbmFsbHk6CisgICAgICAgICMgUHV0IHRoZSBiYWNrdXAgYmFjayBp bnRvIHBsYWNlLgorICAgICAgICBvcy5yZXBsYWNlKGJhaywgcGF0aCkKKworCitAcHl0ZXN0LmZp eHR1cmUoc2NvcGU9Im1vZHVsZSIpCitkZWYgb2F1dGhfY3R4KCk6CisgICAgIiIiCisgICAgQ3Jl YXRlcyBhIGRhdGFiYXNlIGFuZCB1c2VyIHRoYXQgdXNlIHRoZSBvYXV0aCBhdXRoIG1ldGhvZC4g VGhlIGNvbnRleHQKKyAgICBvYmplY3QgY29udGFpbnMgdGhlIGRibmFtZSBhbmQgdXNlciBhdHRy aWJ1dGVzIGFzIHN0cmluZ3MgdG8gYmUgdXNlZCBkdXJpbmcKKyAgICBjb25uZWN0aW9uLCBhcyB3 ZWxsIGFzIHRoZSBpc3N1ZXIgYW5kIHNjb3BlIHRoYXQgaGF2ZSBiZWVuIHNldCBpbiB0aGUgSEJB CisgICAgY29uZmlndXJhdGlvbi4KKworICAgIFRoaXMgZml4dHVyZSBhc3N1bWVzIHRoYXQgdGhl IHN0YW5kYXJkIFBHKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgcG9pbnQgdG8gYQorICAgIHNlcnZl ciBydW5uaW5nIG9uIGEgbG9jYWwgbWFjaGluZSwgYW5kIHRoYXQgdGhlIFBHVVNFUiBoYXMgcmln aHRzIHRvIGNyZWF0ZQorICAgIGRhdGFiYXNlcyBhbmQgcm9sZXMuCisgICAgIiIiCisgICAgc2tp cF9pZl9ub19wb3N0Z3JlcygpICAjIGRvbid0IGJvdGhlciBydW5uaW5nIHRoZXNlIHRlc3RzIHdp dGhvdXQgYSBzZXJ2ZXIKKworICAgIGlkID0gc2VjcmV0cy50b2tlbl9oZXgoNCkKKworICAgIGNs YXNzIENvbnRleHQ6CisgICAgICAgIGRibmFtZSA9ICJvYXV0aF90ZXN0XyIgKyBpZAorCisgICAg ICAgIHVzZXIgPSAib2F1dGhfdXNlcl8iICsgaWQKKyAgICAgICAgbWFwX3VzZXIgPSAib2F1dGhf bWFwX3VzZXJfIiArIGlkCisgICAgICAgIGF1dGh6X3VzZXIgPSAib2F1dGhfYXV0aHpfdXNlcl8i ICsgaWQKKworICAgICAgICBpc3N1ZXIgPSAiaHR0cHM6Ly9leGFtcGxlLmNvbS8iICsgaWQKKyAg ICAgICAgc2NvcGUgPSAib3BlbmlkICIgKyBpZAorCisgICAgY3R4ID0gQ29udGV4dCgpCisgICAg aGJhX2xpbmVzID0gKAorICAgICAgICBmJ2hvc3Qge2N0eC5kYm5hbWV9IHtjdHgubWFwX3VzZXJ9 ICAgc2FtZWhvc3Qgb2F1dGggaXNzdWVyPSJ7Y3R4Lmlzc3Vlcn0iIHNjb3BlPSJ7Y3R4LnNjb3Bl fSIgbWFwPW9hdXRoXG4nLAorICAgICAgICBmJ2hvc3Qge2N0eC5kYm5hbWV9IHtjdHguYXV0aHpf dXNlcn0gc2FtZWhvc3Qgb2F1dGggaXNzdWVyPSJ7Y3R4Lmlzc3Vlcn0iIHNjb3BlPSJ7Y3R4LnNj b3BlfSIgdHJ1c3RfdmFsaWRhdG9yX2F1dGh6PTFcbicsCisgICAgICAgIGYnaG9zdCB7Y3R4LmRi bmFtZX0gYWxsICAgICAgICAgICAgICBzYW1laG9zdCBvYXV0aCBpc3N1ZXI9IntjdHguaXNzdWVy fSIgc2NvcGU9IntjdHguc2NvcGV9IlxuJywKKyAgICApCisgICAgaWRlbnRfbGluZXMgPSAociJv YXV0aCAvXiguKilAZXhhbXBsZVwuY29tJCBcMSIsKQorCisgICAgY29ubiA9IHBzeWNvcGcyLmNv bm5lY3QoIiIpCisgICAgY29ubi5hdXRvY29tbWl0ID0gVHJ1ZQorCisgICAgd2l0aCBjb250ZXh0 bGliLmNsb3NpbmcoY29ubik6CisgICAgICAgIGMgPSBjb25uLmN1cnNvcigpCisKKyAgICAgICAg IyBDcmVhdGUgb3VyIHJvbGVzIGFuZCBkYXRhYmFzZS4KKyAgICAgICAgdXNlciA9IHNxbC5JZGVu dGlmaWVyKGN0eC51c2VyKQorICAgICAgICBtYXBfdXNlciA9IHNxbC5JZGVudGlmaWVyKGN0eC5t YXBfdXNlcikKKyAgICAgICAgYXV0aHpfdXNlciA9IHNxbC5JZGVudGlmaWVyKGN0eC5hdXRoel91 c2VyKQorICAgICAgICBkYm5hbWUgPSBzcWwuSWRlbnRpZmllcihjdHguZGJuYW1lKQorCisgICAg ICAgIGMuZXhlY3V0ZShzcWwuU1FMKCJDUkVBVEUgUk9MRSB7fSBMT0dJTjsiKS5mb3JtYXQodXNl cikpCisgICAgICAgIGMuZXhlY3V0ZShzcWwuU1FMKCJDUkVBVEUgUk9MRSB7fSBMT0dJTjsiKS5m b3JtYXQobWFwX3VzZXIpKQorICAgICAgICBjLmV4ZWN1dGUoc3FsLlNRTCgiQ1JFQVRFIFJPTEUg e30gTE9HSU47IikuZm9ybWF0KGF1dGh6X3VzZXIpKQorICAgICAgICBjLmV4ZWN1dGUoc3FsLlNR TCgiQ1JFQVRFIERBVEFCQVNFIHt9OyIpLmZvcm1hdChkYm5hbWUpKQorCisgICAgICAgICMgTWFr ZSB0aGlzIHRlc3Qgc2NyaXB0IHRoZSBzZXJ2ZXIncyBvYXV0aF92YWxpZGF0b3IuCisgICAgICAg IHBhdGggPSBwYXRobGliLlBhdGgoX19maWxlX18pLnBhcmVudCAvICJ2YWxpZGF0ZV9iZWFyZXIu cHkiCisgICAgICAgIHBhdGggPSBzdHIocGF0aC5hYnNvbHV0ZSgpKQorCisgICAgICAgIGNtZCA9 IGYie3NobGV4LnF1b3RlKHBhdGgpfSB7U0hBUkVEX01FTV9OQU1FfSA8JiVmIgorICAgICAgICBj LmV4ZWN1dGUoIkFMVEVSIFNZU1RFTSBTRVQgb2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQgVE8gJXM7 IiwgKGNtZCwpKQorCisgICAgICAgICMgUmVwbGFjZSBwZ19oYmEgYW5kIHBnX2lkZW50LgorICAg ICAgICBjLmV4ZWN1dGUoIlNIT1cgaGJhX2ZpbGU7IikKKyAgICAgICAgaGJhID0gYy5mZXRjaG9u ZSgpWzBdCisKKyAgICAgICAgYy5leGVjdXRlKCJTSE9XIGlkZW50X2ZpbGU7IikKKyAgICAgICAg aWRlbnQgPSBjLmZldGNob25lKClbMF0KKworICAgICAgICB3aXRoIHByZXBlbmRfZmlsZShoYmEs IGhiYV9saW5lcyksIHByZXBlbmRfZmlsZShpZGVudCwgaWRlbnRfbGluZXMpOgorICAgICAgICAg ICAgYy5leGVjdXRlKCJTRUxFQ1QgcGdfcmVsb2FkX2NvbmYoKTsiKQorCisgICAgICAgICAgICAj IFVzZSB0aGUgbmV3IGRhdGFiYXNlIGFuZCB1c2VyLgorICAgICAgICAgICAgeWllbGQgY3R4CisK KyAgICAgICAgIyBQdXQgdGhpbmdzIGJhY2sgdGhlIHdheSB0aGV5IHdlcmUuCisgICAgICAgIGMu ZXhlY3V0ZSgiU0VMRUNUIHBnX3JlbG9hZF9jb25mKCk7IikKKworICAgICAgICBjLmV4ZWN1dGUo IkFMVEVSIFNZU1RFTSBSRVNFVCBvYXV0aF92YWxpZGF0b3JfY29tbWFuZDsiKQorICAgICAgICBj LmV4ZWN1dGUoc3FsLlNRTCgiRFJPUCBEQVRBQkFTRSB7fTsiKS5mb3JtYXQoZGJuYW1lKSkKKyAg ICAgICAgYy5leGVjdXRlKHNxbC5TUUwoIkRST1AgUk9MRSB7fTsiKS5mb3JtYXQoYXV0aHpfdXNl cikpCisgICAgICAgIGMuZXhlY3V0ZShzcWwuU1FMKCJEUk9QIFJPTEUge307IikuZm9ybWF0KG1h cF91c2VyKSkKKyAgICAgICAgYy5leGVjdXRlKHNxbC5TUUwoIkRST1AgUk9MRSB7fTsiKS5mb3Jt YXQodXNlcikpCisKKworQHB5dGVzdC5maXh0dXJlKCkKK2RlZiBjb25uKG9hdXRoX2N0eCwgY29u bmVjdCk6CisgICAgIiIiCisgICAgQSBjb252ZW5pZW5jZSB3cmFwcGVyIGZvciBjb25uZWN0KCku IFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyBmaXh0dXJlIGlzIHRvCisgICAgbWFrZSBzdXJlIG9h dXRoX2N0eCBydW5zIGl0cyBzZXR1cCBjb2RlIGJlZm9yZSB0aGUgY29ubmVjdGlvbiBpcyBtYWRl LgorICAgICIiIgorICAgIHJldHVybiBjb25uZWN0KCkKKworCitAcHl0ZXN0LmZpeHR1cmUoc2Nv cGU9Im1vZHVsZSIsIGF1dG91c2U9VHJ1ZSkKK2RlZiBhdXRobl9pZF9leHRlbnNpb24ob2F1dGhf Y3R4KToKKyAgICAiIiIKKyAgICBQZXJmb3JtcyBhIGBDUkVBVEUgRVhURU5TSU9OIGF1dGhuX2lk YCBpbiB0aGUgdGVzdCBkYXRhYmFzZS4gVGhpcyBmaXh0dXJlIGlzCisgICAgYXV0b3VzZWQsIHNv IHRlc3RzIGRvbid0IG5lZWQgdG8gcmVseSBvbiBpdC4KKyAgICAiIiIKKyAgICBjb25uID0gcHN5 Y29wZzIuY29ubmVjdChkYXRhYmFzZT1vYXV0aF9jdHguZGJuYW1lKQorICAgIGNvbm4uYXV0b2Nv bW1pdCA9IFRydWUKKworICAgIHdpdGggY29udGV4dGxpYi5jbG9zaW5nKGNvbm4pOgorICAgICAg ICBjID0gY29ubi5jdXJzb3IoKQorICAgICAgICBjLmV4ZWN1dGUoIkNSRUFURSBFWFRFTlNJT04g YXV0aG5faWQ7IikKKworCitAcHl0ZXN0LmZpeHR1cmUoc2NvcGU9InNlc3Npb24iKQorZGVmIHNo YXJlZF9tZW0oKToKKyAgICAiIiIKKyAgICBZaWVsZHMgYSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQg dGhhdCBjYW4gYmUgdXNlZCBmb3IgY29tbXVuaWNhdGlvbiBiZXR3ZWVuCisgICAgdGhlIGJlYXJl cl90b2tlbiBmaXh0dXJlIGFuZCAuL3ZhbGlkYXRlX2JlYXJlci5weS4KKyAgICAiIiIKKyAgICBz aXplID0gTUFYX1RPS0VOX1NJWkUgKyAyICAjIHR3byBieXRlIGxlbmd0aCBwcmVmaXgKKyAgICBt ZW0gPSBzaGFyZWRfbWVtb3J5LlNoYXJlZE1lbW9yeShTSEFSRURfTUVNX05BTUUsIGNyZWF0ZT1U cnVlLCBzaXplPXNpemUpCisKKyAgICB0cnk6CisgICAgICAgIHdpdGggY29udGV4dGxpYi5jbG9z aW5nKG1lbSk6CisgICAgICAgICAgICB5aWVsZCBtZW0KKyAgICBmaW5hbGx5OgorICAgICAgICBt ZW0udW5saW5rKCkKKworCitAcHl0ZXN0LmZpeHR1cmUoKQorZGVmIGJlYXJlcl90b2tlbihzaGFy ZWRfbWVtKToKKyAgICAiIiIKKyAgICBSZXR1cm5zIGEgZmFjdG9yeSBmdW5jdGlvbiB0aGF0LCB3 aGVuIGNhbGxlZCwgd2lsbCBzdG9yZSBhIEJlYXJlciB0b2tlbiBpbgorICAgIHNoYXJlZF9tZW0u IElmIHRva2VuIGlzIE5vbmUgKHRoZSBkZWZhdWx0KSwgYSBuZXcgdG9rZW4gd2lsbCBiZSBnZW5l cmF0ZWQKKyAgICB1c2luZyBzZWNyZXRzLnRva2VuX3VybHNhZmUoKSBhbmQgcmV0dXJuZWQ7IG90 aGVyd2lzZSB0aGUgcGFzc2VkIHRva2VuIHdpbGwKKyAgICBiZSB1c2VkIGFzLWlzLgorCisgICAg V2hlbiB0b2tlbiBpcyBOb25lLCB0aGUgZ2VuZXJhdGVkIHRva2VuIHNpemUgaW4gYnl0ZXMgbWF5 IGJlIHNwZWNpZmllZCBhcyBhbgorICAgIGFyZ3VtZW50OyBpZiB1bnNldCwgYSBzbWFsbCAxNi1i eXRlIHRva2VuIHdpbGwgYmUgZ2VuZXJhdGVkLiBUaGUgdG9rZW4gc2l6ZQorICAgIG1heSBub3Qg ZXhjZWVkIE1BWF9UT0tFTl9TSVpFIGluIGFueSBjYXNlLgorCisgICAgVGhlIHJldHVybiB2YWx1 ZSBpcyB0aGUgdG9rZW4sIGNvbnZlcnRlZCB0byBhIGJ5dGVzIG9iamVjdC4KKworICAgIEFzIGEg c3BlY2lhbCBjYXNlIGZvciB0ZXN0aW5nIGZhaWx1cmUgbW9kZXMsIGFjY2VwdF9hbnkgbWF5IGJl IHNldCB0byBUcnVlLgorICAgIFRoaXMgc2lnbmFscyB0byB0aGUgdmFsaWRhdG9yIGNvbW1hbmQg dGhhdCBhbnkgYmVhcmVyIHRva2VuIHNob3VsZCBiZQorICAgIGFjY2VwdGVkLiBUaGUgcmV0dXJu ZWQgdG9rZW4gaW4gdGhpcyBjYXNlIG1heSBiZSB1c2VkIG9yIGRpc2NhcmRlZCBhcyBuZWVkZWQK KyAgICBieSB0aGUgdGVzdC4KKyAgICAiIiIKKworICAgIGRlZiBzZXRfdG9rZW4odG9rZW49Tm9u ZSwgKiwgc2l6ZT0xNiwgYWNjZXB0X2FueT1GYWxzZSk6CisgICAgICAgIGlmIHRva2VuIGlzIG5v dCBOb25lOgorICAgICAgICAgICAgc2l6ZSA9IGxlbih0b2tlbikKKworICAgICAgICBpZiBzaXpl ID4gTUFYX1RPS0VOX1NJWkU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGYidG9rZW4g c2l6ZSB7c2l6ZX0gZXhjZWVkcyBtYXhpbXVtIHNpemUge01BWF9UT0tFTl9TSVpFfSIpCisKKyAg ICAgICAgaWYgdG9rZW4gaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHNpemUgJSA0OgorICAgICAg ICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZiJyZXF1ZXN0ZWQgdG9rZW4gc2l6ZSB7c2l6ZX0g aXMgbm90IGEgbXVsdGlwbGUgb2YgNCIpCisKKyAgICAgICAgICAgIHRva2VuID0gc2VjcmV0cy50 b2tlbl91cmxzYWZlKHNpemUgLy8gNCAqIDMpCisgICAgICAgICAgICBhc3NlcnQgbGVuKHRva2Vu KSA9PSBzaXplCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdG9rZW4gPSB0b2tlbi5lbmNv ZGUoImFzY2lpIikKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAg cGFzcyAgIyBhbHJlYWR5IGVuY29kZWQKKworICAgICAgICBpZiBhY2NlcHRfYW55OgorICAgICAg ICAgICAgIyBUd28tYnl0ZSBtYWdpYyB2YWx1ZS4KKyAgICAgICAgICAgIHNoYXJlZF9tZW0uYnVm WzoyXSA9IHN0cnVjdC5wYWNrKCJIIiwgTUFYX1VJTlQxNikKKyAgICAgICAgZWxzZToKKyAgICAg ICAgICAgICMgVHdvLWJ5dGUgbGVuZ3RoIHByZWZpeCwgdGhlbiB0aGUgdG9rZW4gZGF0YS4KKyAg ICAgICAgICAgIHNoYXJlZF9tZW0uYnVmWzoyXSA9IHN0cnVjdC5wYWNrKCJIIiwgbGVuKHRva2Vu KSkKKyAgICAgICAgICAgIHNoYXJlZF9tZW0uYnVmWzIgOiBzaXplICsgMl0gPSB0b2tlbgorCisg ICAgICAgIHJldHVybiB0b2tlbgorCisgICAgcmV0dXJuIHNldF90b2tlbgorCisKK2RlZiBiZWdp bl9vYXV0aF9oYW5kc2hha2UoY29ubiwgb2F1dGhfY3R4LCAqLCB1c2VyPU5vbmUpOgorICAgIGlm IHVzZXIgaXMgTm9uZToKKyAgICAgICAgdXNlciA9IG9hdXRoX2N0eC5hdXRoel91c2VyCisKKyAg ICBwcTMuc2VuZF9zdGFydHVwKGNvbm4sIHVzZXI9dXNlciwgZGF0YWJhc2U9b2F1dGhfY3R4LmRi bmFtZSkKKworICAgIHJlc3AgPSBwcTMucmVjdjEoY29ubikKKyAgICBhc3NlcnQgcmVzcC50eXBl ID09IHBxMy50eXBlcy5BdXRoblJlcXVlc3QKKworICAgICMgVGhlIHNlcnZlciBzaG91bGQgYWR2 ZXJ0aXNlIGV4YWN0bHkgb25lIG1lY2hhbmlzbS4KKyAgICBhc3NlcnQgcmVzcC5wYXlsb2FkLnR5 cGUgPT0gcHEzLmF1dGhuLlNBU0wKKyAgICBhc3NlcnQgcmVzcC5wYXlsb2FkLmJvZHkgPT0gW2Ii T0FVVEhCRUFSRVIiLCBiIiJdCisKKworZGVmIHNlbmRfaW5pdGlhbF9yZXNwb25zZShjb25uLCAq LCBhdXRoPU5vbmUsIGJlYXJlcj1Ob25lKToKKyAgICAiIiIKKyAgICBTZW5kcyB0aGUgT0FVVEhC RUFSRVIgaW5pdGlhbCByZXNwb25zZSBvbiB0aGUgY29ubmVjdGlvbiwgdXNpbmcgdGhlIGdpdmVu CisgICAgYmVhcmVyIHRva2VuLiBBbHRlcm5hdGl2ZWx5IHRvIGEgYmVhcmVyIHRva2VuLCB0aGUg aW5pdGlhbCByZXNwb25zZSdzIGF1dGgKKyAgICBmaWVsZCBtYXkgYmUgZXhwbGljaXRseSBzcGVj aWZpZWQgdG8gdGVzdCBjb3JuZXIgY2FzZXMuCisgICAgIiIiCisgICAgaWYgYmVhcmVyIGlzIG5v dCBOb25lIGFuZCBhdXRoIGlzIG5vdCBOb25lOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJl eGFjdGx5IG9uZSBvZiB0aGUgYXV0aCBhbmQgYmVhcmVyIGt3YXJncyBtdXN0IGJlIHNldCIpCisK KyAgICBpZiBiZWFyZXIgaXMgbm90IE5vbmU6CisgICAgICAgIGF1dGggPSBiIkJlYXJlciAiICsg YmVhcmVyCisKKyAgICBpZiBhdXRoIGlzIE5vbmU6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3Io ImV4YWN0bHkgb25lIG9mIHRoZSBhdXRoIGFuZCBiZWFyZXIga3dhcmdzIG11c3QgYmUgc2V0IikK KworICAgIGluaXRpYWwgPSBwcTMuU0FTTEluaXRpYWxSZXNwb25zZS5idWlsZCgKKyAgICAgICAg ZGljdCgKKyAgICAgICAgICAgIG5hbWU9YiJPQVVUSEJFQVJFUiIsCisgICAgICAgICAgICBkYXRh PWIibiwsXHgwMWF1dGg9IiArIGF1dGggKyBiIlx4MDFceDAxIiwKKyAgICAgICAgKQorICAgICkK KyAgICBwcTMuc2VuZChjb25uLCBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlLCBpbml0aWFsKQor CisKK2RlZiBleHBlY3RfaGFuZHNoYWtlX3N1Y2Nlc3MoY29ubik6CisgICAgIiIiCisgICAgVmFs aWRhdGVzIHRoYXQgdGhlIHNlcnZlciByZXNwb25kcyB3aXRoIGFuIEF1dGhuT0sgbWVzc2FnZSwg YW5kIHRoZW4gZHJhaW5zCisgICAgdGhlIGNvbm5lY3Rpb24gdW50aWwgYSBSZWFkeUZvclF1ZXJ5 IG1lc3NhZ2UgaXMgcmVjZWl2ZWQuCisgICAgIiIiCisgICAgcmVzcCA9IHBxMy5yZWN2MShjb25u KQorCisgICAgYXNzZXJ0IHJlc3AudHlwZSA9PSBwcTMudHlwZXMuQXV0aG5SZXF1ZXN0CisgICAg YXNzZXJ0IHJlc3AucGF5bG9hZC50eXBlID09IHBxMy5hdXRobi5PSworICAgIGFzc2VydCBub3Qg cmVzcC5wYXlsb2FkLmJvZHkKKworICAgIHJlY2VpdmVfdW50aWwoY29ubiwgcHEzLnR5cGVzLlJl YWR5Rm9yUXVlcnkpCisKKworZGVmIGV4cGVjdF9oYW5kc2hha2VfZmFpbHVyZShjb25uLCBvYXV0 aF9jdHgpOgorICAgICIiIgorICAgIFBlcmZvcm1zIHRoZSBPQVVUSEJFQVJFUiBTQVNMIGZhaWx1 cmUgImhhbmRzaGFrZSIgYW5kIHZhbGlkYXRlcyB0aGUgc2VydmVyJ3MKKyAgICBzaWRlIG9mIHRo ZSBjb252ZXJzYXRpb24sIGluY2x1ZGluZyB0aGUgZmluYWwgRXJyb3JSZXNwb25zZS4KKyAgICAi IiIKKworICAgICMgV2UgZXhwZWN0IGEgZGlzY292ZXJ5ICJjaGFsbGVuZ2UiIGJhY2sgZnJvbSB0 aGUgc2VydmVyIGJlZm9yZSB0aGUgYXV0aG4KKyAgICAjIGZhaWx1cmUgbWVzc2FnZS4KKyAgICBy ZXNwID0gcHEzLnJlY3YxKGNvbm4pCisgICAgYXNzZXJ0IHJlc3AudHlwZSA9PSBwcTMudHlwZXMu QXV0aG5SZXF1ZXN0CisKKyAgICByZXEgPSByZXNwLnBheWxvYWQKKyAgICBhc3NlcnQgcmVxLnR5 cGUgPT0gcHEzLmF1dGhuLlNBU0xDb250aW51ZQorCisgICAgYm9keSA9IGpzb24ubG9hZHMocmVx LmJvZHkpCisgICAgYXNzZXJ0IGJvZHlbInN0YXR1cyJdID09ICJpbnZhbGlkX3Rva2VuIgorICAg IGFzc2VydCBib2R5WyJzY29wZSJdID09IG9hdXRoX2N0eC5zY29wZQorCisgICAgZXhwZWN0ZWRf Y29uZmlnID0gb2F1dGhfY3R4Lmlzc3VlciArICIvLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3Vy YXRpb24iCisgICAgYXNzZXJ0IGJvZHlbIm9wZW5pZC1jb25maWd1cmF0aW9uIl0gPT0gZXhwZWN0 ZWRfY29uZmlnCisKKyAgICAjIFNlbmQgdGhlIGR1bW15IHJlc3BvbnNlIHRvIGNvbXBsZXRlIHRo ZSBmYWlsZWQgaGFuZHNoYWtlLgorICAgIHBxMy5zZW5kKGNvbm4sIHBxMy50eXBlcy5QYXNzd29y ZE1lc3NhZ2UsIGIiXHgwMSIpCisgICAgcmVzcCA9IHBxMy5yZWN2MShjb25uKQorCisgICAgZXJy ID0gRXhwZWN0ZWRFcnJvcihJTlZBTElEX0FVVEhPUklaQVRJT05fRVJSQ09ERSwgImJlYXJlciBh dXRoZW50aWNhdGlvbiBmYWlsZWQiKQorICAgIGVyci5tYXRjaChyZXNwKQorCisKK2RlZiByZWNl aXZlX3VudGlsKGNvbm4sIHR5cGUpOgorICAgICIiIgorICAgIHJlY2VpdmVfdW50aWwgcHVsbHMg cGFja2V0cyBvZmYgdGhlIHBxMyBjb25uZWN0aW9uIHVudGlsIGEgcGFja2V0IHdpdGggdGhlCisg ICAgZGVzaXJlZCB0eXBlIGlzIGZvdW5kLCBvciBhbiBlcnJvciByZXNwb25zZSBpcyByZWNlaXZl ZC4KKyAgICAiIiIKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBwa3QgPSBwcTMucmVjdjEoY29u bikKKworICAgICAgICBpZiBwa3QudHlwZSA9PSB0eXBlOgorICAgICAgICAgICAgcmV0dXJuIHBr dAorICAgICAgICBlbGlmIHBrdC50eXBlID09IHBxMy50eXBlcy5FcnJvclJlc3BvbnNlOgorICAg ICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAorICAgICAgICAgICAgICAgIGYicmVjZWl2ZWQg ZXJyb3IgcmVzcG9uc2UgZnJvbSBwZWVyOiB7cGt0LnBheWxvYWQuZmllbGRzIXJ9IgorICAgICAg ICAgICAgKQorCisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgidG9rZW5fbGVuIiwgWzE2LCAx MDI0LCA0MDk2XSkKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgKKyAgICAiYXV0aF9wcmVmaXgi LAorICAgIFsKKyAgICAgICAgYiJCZWFyZXIgIiwKKyAgICAgICAgYiJiZWFyZXIgIiwKKyAgICAg ICAgYiJCZWFyZXIgICAgIiwKKyAgICBdLAorKQorZGVmIHRlc3Rfb2F1dGgoY29ubiwgb2F1dGhf Y3R4LCBiZWFyZXJfdG9rZW4sIGF1dGhfcHJlZml4LCB0b2tlbl9sZW4pOgorICAgIGJlZ2luX29h dXRoX2hhbmRzaGFrZShjb25uLCBvYXV0aF9jdHgpCisKKyAgICAjIEdlbmVyYXRlIG91ciBiZWFy ZXIgdG9rZW4gd2l0aCB0aGUgZGVzaXJlZCBsZW5ndGguCisgICAgdG9rZW4gPSBiZWFyZXJfdG9r ZW4oc2l6ZT10b2tlbl9sZW4pCisgICAgYXV0aCA9IGF1dGhfcHJlZml4ICsgdG9rZW4KKworICAg IHNlbmRfaW5pdGlhbF9yZXNwb25zZShjb25uLCBhdXRoPWF1dGgpCisgICAgZXhwZWN0X2hhbmRz aGFrZV9zdWNjZXNzKGNvbm4pCisKKyAgICAjIE1ha2Ugc3VyZSB0aGF0IHRoZSBzZXJ2ZXIgaGFz IG5vdCBzZXQgYW4gYXV0aGVudGljYXRlZCBJRC4KKyAgICBwcTMuc2VuZChjb25uLCBwcTMudHlw ZXMuUXVlcnksIHF1ZXJ5PWIiU0VMRUNUIGF1dGhuX2lkKCk7IikKKyAgICByZXNwID0gcmVjZWl2 ZV91bnRpbChjb25uLCBwcTMudHlwZXMuRGF0YVJvdykKKworICAgIHJvdyA9IHJlc3AucGF5bG9h ZAorICAgIGFzc2VydCByb3cuY29sdW1ucyA9PSBbTm9uZV0KKworCitAcHl0ZXN0Lm1hcmsucGFy YW1ldHJpemUoCisgICAgInRva2VuX3ZhbHVlIiwKKyAgICBbCisgICAgICAgICJhYmNkekE9PSIs CisgICAgICAgICIxMjM0NTZNPSIsCisgICAgICAgICJ4LS5ffisveCIsCisgICAgXSwKKykKK2Rl ZiB0ZXN0X29hdXRoX2JlYXJlcl9jb3JuZXJfY2FzZXMoY29ubiwgb2F1dGhfY3R4LCBiZWFyZXJf dG9rZW4sIHRva2VuX3ZhbHVlKToKKyAgICBiZWdpbl9vYXV0aF9oYW5kc2hha2UoY29ubiwgb2F1 dGhfY3R4KQorCisgICAgc2VuZF9pbml0aWFsX3Jlc3BvbnNlKGNvbm4sIGJlYXJlcj1iZWFyZXJf dG9rZW4odG9rZW5fdmFsdWUpKQorCisgICAgZXhwZWN0X2hhbmRzaGFrZV9zdWNjZXNzKGNvbm4p CisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKAorICAgICJ1c2VyLGF1dGhuX2lkLHNob3Vs ZF9zdWNjZWVkIiwKKyAgICBbCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGxh bWJkYSBjdHg6IGN0eC51c2VyLAorICAgICAgICAgICAgbGFtYmRhIGN0eDogY3R4LnVzZXIsCisg ICAgICAgICAgICBUcnVlLAorICAgICAgICAgICAgaWQ9InZhbGlkYXRvciBhdXRobjogc3VjY2Vl ZHMgd2hlbiBhdXRobl9pZCA9PSB1c2VybmFtZSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVz dC5wYXJhbSgKKyAgICAgICAgICAgIGxhbWJkYSBjdHg6IGN0eC51c2VyLAorICAgICAgICAgICAg bGFtYmRhIGN0eDogTm9uZSwKKyAgICAgICAgICAgIEZhbHNlLAorICAgICAgICAgICAgaWQ9InZh bGlkYXRvciBhdXRobjogZmFpbHMgd2hlbiBhdXRobl9pZCBpcyBub3Qgc2V0IiwKKyAgICAgICAg KSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgbGFtYmRhIGN0eDogY3R4LnVz ZXIsCisgICAgICAgICAgICBsYW1iZGEgY3R4OiBjdHguYXV0aHpfdXNlciwKKyAgICAgICAgICAg IEZhbHNlLAorICAgICAgICAgICAgaWQ9InZhbGlkYXRvciBhdXRobjogZmFpbHMgd2hlbiBhdXRo bl9pZCAhPSB1c2VybmFtZSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAg ICAgICAgICAgIGxhbWJkYSBjdHg6IGN0eC5tYXBfdXNlciwKKyAgICAgICAgICAgIGxhbWJkYSBj dHg6IGN0eC5tYXBfdXNlciArICJAZXhhbXBsZS5jb20iLAorICAgICAgICAgICAgVHJ1ZSwKKyAg ICAgICAgICAgIGlkPSJ2YWxpZGF0b3Igd2l0aCBtYXA6IHN1Y2NlZWRzIHdoZW4gYXV0aG5faWQg bWF0Y2hlcyBtYXAiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAg ICAgICBsYW1iZGEgY3R4OiBjdHgubWFwX3VzZXIsCisgICAgICAgICAgICBsYW1iZGEgY3R4OiBO b25lLAorICAgICAgICAgICAgRmFsc2UsCisgICAgICAgICAgICBpZD0idmFsaWRhdG9yIHdpdGgg bWFwOiBmYWlscyB3aGVuIGF1dGhuX2lkIGlzIG5vdCBzZXQiLAorICAgICAgICApLAorICAgICAg ICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBsYW1iZGEgY3R4OiBjdHgubWFwX3VzZXIsCisg ICAgICAgICAgICBsYW1iZGEgY3R4OiBjdHgubWFwX3VzZXIgKyAiQGV4YW1wbGUubmV0IiwKKyAg ICAgICAgICAgIEZhbHNlLAorICAgICAgICAgICAgaWQ9InZhbGlkYXRvciB3aXRoIG1hcDogZmFp bHMgd2hlbiBhdXRobl9pZCBkb2Vzbid0IG1hdGNoIG1hcCIsCisgICAgICAgICksCisgICAgICAg IHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGxhbWJkYSBjdHg6IGN0eC5hdXRoel91c2VyLAor ICAgICAgICAgICAgbGFtYmRhIGN0eDogTm9uZSwKKyAgICAgICAgICAgIFRydWUsCisgICAgICAg ICAgICBpZD0idmFsaWRhdG9yIGF1dGh6OiBzdWNjZWVkcyB3aXRoIG5vIGF1dGhuX2lkIiwKKyAg ICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgbGFtYmRhIGN0eDog Y3R4LmF1dGh6X3VzZXIsCisgICAgICAgICAgICBsYW1iZGEgY3R4OiAiIiwKKyAgICAgICAgICAg IFRydWUsCisgICAgICAgICAgICBpZD0idmFsaWRhdG9yIGF1dGh6OiBzdWNjZWVkcyB3aXRoIGVt cHR5IGF1dGhuX2lkIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAg ICAgICAgbGFtYmRhIGN0eDogY3R4LmF1dGh6X3VzZXIsCisgICAgICAgICAgICBsYW1iZGEgY3R4 OiAicG9zdGdyZXMiLAorICAgICAgICAgICAgVHJ1ZSwKKyAgICAgICAgICAgIGlkPSJ2YWxpZGF0 b3IgYXV0aHo6IHN1Y2NlZWRzIHdpdGggYmFzaWMgdXNlcm5hbWUiLAorICAgICAgICApLAorICAg ICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBsYW1iZGEgY3R4OiBjdHguYXV0aHpfdXNl ciwKKyAgICAgICAgICAgIGxhbWJkYSBjdHg6ICJtZUBleGFtcGxlLmNvbSIsCisgICAgICAgICAg ICBUcnVlLAorICAgICAgICAgICAgaWQ9InZhbGlkYXRvciBhdXRoejogc3VjY2VlZHMgd2l0aCBl bWFpbCBhZGRyZXNzIiwKKyAgICAgICAgKSwKKyAgICBdLAorKQorZGVmIHRlc3Rfb2F1dGhfYXV0 aG5faWQoY29ubiwgb2F1dGhfY3R4LCBiZWFyZXJfdG9rZW4sIHVzZXIsIGF1dGhuX2lkLCBzaG91 bGRfc3VjY2VlZCk6CisgICAgdG9rZW4gPSBOb25lCisKKyAgICBhdXRobl9pZCA9IGF1dGhuX2lk KG9hdXRoX2N0eCkKKyAgICBpZiBhdXRobl9pZCBpcyBub3QgTm9uZToKKyAgICAgICAgYXV0aG5f aWQgPSBhdXRobl9pZC5lbmNvZGUoImFzY2lpIikKKworICAgICAgICAjIEFzIGEgaGFjayB0byBn ZXQgdGhlIHZhbGlkYXRvciB0byByZWZsZWN0IGFyYml0cmFyeSBvdXRwdXQgZnJvbSB0aGlzCisg ICAgICAgICMgdGVzdCwgZW5jb2RlIHRoZSBkZXNpcmVkIG91dHB1dCBhcyBhIGJhc2U2NCB0b2tl bi4gVGhlIHZhbGlkYXRvciB3aWxsCisgICAgICAgICMga2V5IG9uIHRoZSBsZWFkaW5nICJvdXRw dXQ9IiB0byBkaWZmZXJlbnRpYXRlIHRoaXMgZnJvbSB0aGUgcmFuZG9tCisgICAgICAgICMgdG9r ZW5zIGdlbmVyYXRlZCBieSBzZWNyZXRzLnRva2VuX3VybHNhZmUoKS4KKyAgICAgICAgb3V0cHV0 ID0gYiJvdXRwdXQ9IiArIGF1dGhuX2lkICsgYiJcbiIKKyAgICAgICAgdG9rZW4gPSBiYXNlNjQu dXJsc2FmZV9iNjRlbmNvZGUob3V0cHV0KQorCisgICAgdG9rZW4gPSBiZWFyZXJfdG9rZW4odG9r ZW4pCisgICAgdXNlcm5hbWUgPSB1c2VyKG9hdXRoX2N0eCkKKworICAgIGJlZ2luX29hdXRoX2hh bmRzaGFrZShjb25uLCBvYXV0aF9jdHgsIHVzZXI9dXNlcm5hbWUpCisgICAgc2VuZF9pbml0aWFs X3Jlc3BvbnNlKGNvbm4sIGJlYXJlcj10b2tlbikKKworICAgIGlmIG5vdCBzaG91bGRfc3VjY2Vl ZDoKKyAgICAgICAgZXhwZWN0X2hhbmRzaGFrZV9mYWlsdXJlKGNvbm4sIG9hdXRoX2N0eCkKKyAg ICAgICAgcmV0dXJuCisKKyAgICBleHBlY3RfaGFuZHNoYWtlX3N1Y2Nlc3MoY29ubikKKworICAg ICMgQ2hlY2sgdGhlIHJlcG9ydGVkIGF1dGhuX2lkLgorICAgIHBxMy5zZW5kKGNvbm4sIHBxMy50 eXBlcy5RdWVyeSwgcXVlcnk9YiJTRUxFQ1QgYXV0aG5faWQoKTsiKQorICAgIHJlc3AgPSByZWNl aXZlX3VudGlsKGNvbm4sIHBxMy50eXBlcy5EYXRhUm93KQorCisgICAgcm93ID0gcmVzcC5wYXls b2FkCisgICAgYXNzZXJ0IHJvdy5jb2x1bW5zID09IFthdXRobl9pZF0KKworCitjbGFzcyBFeHBl Y3RlZEVycm9yKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvZGUsIG1zZz1Ob25l LCBkZXRhaWw9Tm9uZSk6CisgICAgICAgIHNlbGYuY29kZSA9IGNvZGUKKyAgICAgICAgc2VsZi5t c2cgPSBtc2cKKyAgICAgICAgc2VsZi5kZXRhaWwgPSBkZXRhaWwKKworICAgICAgICAjIFByb3Rl Y3QgYWdhaW5zdCB0aGUgZm9vdGd1biBvZiBhbiBhY2NpZGVudGFsIGVtcHR5IHN0cmluZywgd2hp Y2ggd2lsbAorICAgICAgICAjICJtYXRjaCIgYW55dGhpbmcuIElmIHlvdSBkb24ndCB3YW50IHRv IG1hdGNoIG1lc3NhZ2Ugb3IgZGV0YWlsLCBqdXN0CisgICAgICAgICMgZG9uJ3QgcGFzcyB0aGVt LgorICAgICAgICBpZiBzZWxmLm1zZyA9PSAiIjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJy b3IoIm1zZyBtdXN0IGJlIG5vbi1lbXB0eSBvciBOb25lIikKKyAgICAgICAgaWYgc2VsZi5kZXRh aWwgPT0gIiI6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJkZXRhaWwgbXVzdCBiZSBu b24tZW1wdHkgb3IgTm9uZSIpCisKKyAgICBkZWYgX2dldGZpZWxkKHNlbGYsIHJlc3AsIHR5cGUp OgorICAgICAgICAiIiIKKyAgICAgICAgU2VhcmNoZXMgYW4gRXJyb3JSZXNwb25zZSBmb3IgYSBz aW5nbGUgZmllbGQgb2YgdGhlIGdpdmVuIHR5cGUgKGUuZy4KKyAgICAgICAgIk0iLCAiQyIsICJE IikgYW5kIHJldHVybnMgaXRzIHZhbHVlLiBBc3NlcnRzIGlmIGl0IGRvZXNuJ3QgZmluZCBleGFj dGx5CisgICAgICAgIG9uZSBmaWVsZC4KKyAgICAgICAgIiIiCisgICAgICAgIHByZWZpeCA9IHR5 cGUuZW5jb2RlKCJhc2NpaSIpCisgICAgICAgIGZpZWxkcyA9IFtmIGZvciBmIGluIHJlc3AucGF5 bG9hZC5maWVsZHMgaWYgZi5zdGFydHN3aXRoKHByZWZpeCldCisKKyAgICAgICAgYXNzZXJ0IGxl bihmaWVsZHMpID09IDEKKyAgICAgICAgcmV0dXJuIGZpZWxkc1swXVsxOl0gICMgc3RyaXAgb2Zm IHRoZSB0eXBlIGJ5dGUKKworICAgIGRlZiBtYXRjaChzZWxmLCByZXNwKToKKyAgICAgICAgIiIi CisgICAgICAgIENoZWNrcyB0aGF0IHRoZSBnaXZlbiByZXNwb25zZSBtYXRjaGVzIHRoZSBleHBl Y3RlZCBjb2RlLCBtZXNzYWdlLCBhbmQKKyAgICAgICAgZGV0YWlsIChpZiBnaXZlbikuIFRoZSBl cnJvciBjb2RlIG11c3QgbWF0Y2ggZXhhY3RseS4gVGhlIGV4cGVjdGVkCisgICAgICAgIG1lc3Nh Z2UgYW5kIGRldGFpbCBtdXN0IGJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGFjdHVhbCBzdHJpbmdz LgorICAgICAgICAiIiIKKyAgICAgICAgYXNzZXJ0IHJlc3AudHlwZSA9PSBwcTMudHlwZXMuRXJy b3JSZXNwb25zZQorCisgICAgICAgIGNvZGUgPSBzZWxmLl9nZXRmaWVsZChyZXNwLCAiQyIpCisg ICAgICAgIGFzc2VydCBjb2RlID09IHNlbGYuY29kZQorCisgICAgICAgIGlmIHNlbGYubXNnOgor ICAgICAgICAgICAgbXNnID0gc2VsZi5fZ2V0ZmllbGQocmVzcCwgIk0iKQorICAgICAgICAgICAg ZXhwZWN0ZWQgPSBzZWxmLm1zZy5lbmNvZGUoInV0Zi04IikKKyAgICAgICAgICAgIGFzc2VydCBl eHBlY3RlZCBpbiBtc2cKKworICAgICAgICBpZiBzZWxmLmRldGFpbDoKKyAgICAgICAgICAgIGRl dGFpbCA9IHNlbGYuX2dldGZpZWxkKHJlc3AsICJEIikKKyAgICAgICAgICAgIGV4cGVjdGVkID0g c2VsZi5kZXRhaWwuZW5jb2RlKCJ1dGYtOCIpCisgICAgICAgICAgICBhc3NlcnQgZXhwZWN0ZWQg aW4gZGV0YWlsCisKKworZGVmIHRlc3Rfb2F1dGhfcmVqZWN0ZWRfYmVhcmVyKGNvbm4sIG9hdXRo X2N0eCwgYmVhcmVyX3Rva2VuKToKKyAgICAjIEdlbmVyYXRlIGEgbmV3IGJlYXJlciB0b2tlbiwg d2hpY2ggd2Ugd2lsbCBwcm9jZWVkIG5vdCB0byB1c2UuCisgICAgXyA9IGJlYXJlcl90b2tlbigp CisKKyAgICBiZWdpbl9vYXV0aF9oYW5kc2hha2UoY29ubiwgb2F1dGhfY3R4KQorCisgICAgIyBT ZW5kIGEgYmVhcmVyIHRva2VuIHRoYXQgZG9lc24ndCBtYXRjaCB3aGF0IHRoZSB2YWxpZGF0b3Ig ZXhwZWN0cy4gSXQKKyAgICAjIHNob3VsZCBmYWlsIHRoZSBjb25uZWN0aW9uLgorICAgIHNlbmRf aW5pdGlhbF9yZXNwb25zZShjb25uLCBiZWFyZXI9YiJ4eHh4eHgiKQorCisgICAgZXhwZWN0X2hh bmRzaGFrZV9mYWlsdXJlKGNvbm4sIG9hdXRoX2N0eCkKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1l dHJpemUoCisgICAgImJhZF9iZWFyZXIiLAorICAgIFsKKyAgICAgICAgYiJCZWFyZXIgICAgIiwK KyAgICAgICAgYiJCZWFyZXIgYT09PWIiLAorICAgICAgICBiIkJlYXJlciBoZWxsbyEiLAorICAg ICAgICBiIkJlYXJlciBtZUBleGFtcGxlLmNvbSIsCisgICAgICAgIGInT0F1dGggcmVhbG09IkV4 YW1wbGUiJywKKyAgICAgICAgYiIiLAorICAgIF0sCispCitkZWYgdGVzdF9vYXV0aF9pbnZhbGlk X2JlYXJlcihjb25uLCBvYXV0aF9jdHgsIGJlYXJlcl90b2tlbiwgYmFkX2JlYXJlcik6CisgICAg IyBUZWxsIHRoZSB2YWxpZGF0b3IgdG8gYWNjZXB0IGFueSB0b2tlbi4gVGhpcyBlbnN1cmVzIHRo YXQgdGhlIGludmFsaWQKKyAgICAjIGJlYXJlciB0b2tlbnMgYXJlIHJlamVjdGVkIGJlZm9yZSB0 aGUgdmFsaWRhdGlvbiBzdGVwLgorICAgIF8gPSBiZWFyZXJfdG9rZW4oYWNjZXB0X2FueT1UcnVl KQorCisgICAgYmVnaW5fb2F1dGhfaGFuZHNoYWtlKGNvbm4sIG9hdXRoX2N0eCkKKyAgICBzZW5k X2luaXRpYWxfcmVzcG9uc2UoY29ubiwgYXV0aD1iYWRfYmVhcmVyKQorCisgICAgZXhwZWN0X2hh bmRzaGFrZV9mYWlsdXJlKGNvbm4sIG9hdXRoX2N0eCkKKworCitAcHl0ZXN0Lm1hcmsuc2xvdwor QHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKAorICAgICJyZXNwX3R5cGUscmVzcCxlcnIiLAorICAg IFsKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAg IE5vbmUsCisgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgbWFya3M9cHl0ZXN0Lm1hcmsu c2xvdywKKyAgICAgICAgICAgIGlkPSJubyByZXNwb25zZSAoZXhwZWN0IHRpbWVvdXQpIiwKKyAg ICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgcHEzLnR5cGVzLlBh c3N3b3JkTWVzc2FnZSwKKyAgICAgICAgICAgIGIiaGVsbG8iLAorICAgICAgICAgICAgRXhwZWN0 ZWRFcnJvcigKKyAgICAgICAgICAgICAgICBQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwKKyAg ICAgICAgICAgICAgICAibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiLAorICAgICAgICAg ICAgICAgICJkaWQgbm90IHNlbmQgYSBrdnNlcCByZXNwb25zZSIsCisgICAgICAgICAgICApLAor ICAgICAgICAgICAgaWQ9ImJhZCBkdW1teSByZXNwb25zZSIsCisgICAgICAgICksCisgICAgICAg IHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIHBxMy50eXBlcy5QYXNzd29yZE1lc3NhZ2UsCisg ICAgICAgICAgICBiIlx4MDFceDAxIiwKKyAgICAgICAgICAgIEV4cGVjdGVkRXJyb3IoCisgICAg ICAgICAgICAgICAgUFJPVE9DT0xfVklPTEFUSU9OX0VSUkNPREUsCisgICAgICAgICAgICAgICAg Im1hbGZvcm1lZCBPQVVUSEJFQVJFUiBtZXNzYWdlIiwKKyAgICAgICAgICAgICAgICAiZGlkIG5v dCBzZW5kIGEga3ZzZXAgcmVzcG9uc2UiLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIGlk PSJtdWx0aXBsZSBrdnNlcHMiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisg ICAgICAgICAgICBwcTMudHlwZXMuUXVlcnksCisgICAgICAgICAgICBkaWN0KHF1ZXJ5PWIiIiks CisgICAgICAgICAgICBFeHBlY3RlZEVycm9yKFBST1RPQ09MX1ZJT0xBVElPTl9FUlJDT0RFLCAi ZXhwZWN0ZWQgU0FTTCByZXNwb25zZSIpLAorICAgICAgICAgICAgaWQ9ImJhZCByZXNwb25zZSBt ZXNzYWdlIHR5cGUiLAorICAgICAgICApLAorICAgIF0sCispCitkZWYgdGVzdF9vYXV0aF9iYWRf cmVzcG9uc2VfdG9fZXJyb3JfY2hhbGxlbmdlKGNvbm4sIG9hdXRoX2N0eCwgcmVzcF90eXBlLCBy ZXNwLCBlcnIpOgorICAgIGJlZ2luX29hdXRoX2hhbmRzaGFrZShjb25uLCBvYXV0aF9jdHgpCisK KyAgICAjIFNlbmQgYW4gZW1wdHkgYXV0aCBpbml0aWFsIHJlc3BvbnNlLCB3aGljaCB3aWxsIGZv cmNlIGFuIGF1dGhuIGZhaWx1cmUuCisgICAgc2VuZF9pbml0aWFsX3Jlc3BvbnNlKGNvbm4sIGF1 dGg9YiIiKQorCisgICAgIyBXZSBleHBlY3QgYSBkaXNjb3ZlcnkgImNoYWxsZW5nZSIgYmFjayBm cm9tIHRoZSBzZXJ2ZXIgYmVmb3JlIHRoZSBhdXRobgorICAgICMgZmFpbHVyZSBtZXNzYWdlLgor ICAgIHBrdCA9IHBxMy5yZWN2MShjb25uKQorICAgIGFzc2VydCBwa3QudHlwZSA9PSBwcTMudHlw ZXMuQXV0aG5SZXF1ZXN0CisKKyAgICByZXEgPSBwa3QucGF5bG9hZAorICAgIGFzc2VydCByZXEu dHlwZSA9PSBwcTMuYXV0aG4uU0FTTENvbnRpbnVlCisKKyAgICBib2R5ID0ganNvbi5sb2Fkcyhy ZXEuYm9keSkKKyAgICBhc3NlcnQgYm9keVsic3RhdHVzIl0gPT0gImludmFsaWRfdG9rZW4iCisK KyAgICBpZiByZXNwX3R5cGUgaXMgTm9uZToKKyAgICAgICAgIyBEbyBub3Qgc2VuZCB0aGUgZHVt bXkgcmVzcG9uc2UuIFdlIHNob3VsZCB0aW1lIG91dCBhbmQgbm90IGdldCBhCisgICAgICAgICMg cmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLgorICAgICAgICB3aXRoIHB5dGVzdC5yYWlzZXMoc29j a2V0LnRpbWVvdXQpOgorICAgICAgICAgICAgY29ubi5yZWFkKDEpCisKKyAgICAgICAgIyBEb25l IHdpdGggdGhlIHRlc3QuCisgICAgICAgIHJldHVybgorCisgICAgIyBTZW5kIHRoZSBiYWQgcmVz cG9uc2UuCisgICAgcHEzLnNlbmQoY29ubiwgcmVzcF90eXBlLCByZXNwKQorCisgICAgIyBNYWtl IHN1cmUgdGhlIHNlcnZlciBmYWlscyB0aGUgY29ubmVjdGlvbiBjb3JyZWN0bHkuCisgICAgcGt0 ID0gcHEzLnJlY3YxKGNvbm4pCisgICAgZXJyLm1hdGNoKHBrdCkKKworCitAcHl0ZXN0Lm1hcmsu cGFyYW1ldHJpemUoCisgICAgInR5cGUscGF5bG9hZCxlcnIiLAorICAgIFsKKyAgICAgICAgcHl0 ZXN0LnBhcmFtKAorICAgICAgICAgICAgcHEzLnR5cGVzLkVycm9yUmVzcG9uc2UsCisgICAgICAg ICAgICBkaWN0KGZpZWxkcz1bYiIiXSksCisgICAgICAgICAgICBFeHBlY3RlZEVycm9yKFBST1RP Q09MX1ZJT0xBVElPTl9FUlJDT0RFLCAiZXhwZWN0ZWQgU0FTTCByZXNwb25zZSIpLAorICAgICAg ICAgICAgaWQ9ImVycm9yIHJlc3BvbnNlIGluIGluaXRpYWwgbWVzc2FnZSIsCisgICAgICAgICks CisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIHBxMy50eXBlcy5QYXNzd29yZE1l c3NhZ2UsCisgICAgICAgICAgICBiIngiICogKE1BWF9TQVNMX01FU1NBR0VfTEVOR1RIICsgMSks CisgICAgICAgICAgICBFeHBlY3RlZEVycm9yKAorICAgICAgICAgICAgICAgIElOVkFMSURfQVVU SE9SSVpBVElPTl9FUlJDT0RFLCAiYmVhcmVyIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCIKKyAgICAg ICAgICAgICksCisgICAgICAgICAgICBpZD0ib3ZlcmxvbmcgaW5pdGlhbCByZXNwb25zZSBkYXRh IiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgcHEzLnR5 cGVzLlBhc3N3b3JkTWVzc2FnZSwKKyAgICAgICAgICAgIHBxMy5TQVNMSW5pdGlhbFJlc3BvbnNl LmJ1aWxkKGRpY3QobmFtZT1iIlNDUkFNLVNIQS0yNTYiKSksCisgICAgICAgICAgICBFeHBlY3Rl ZEVycm9yKAorICAgICAgICAgICAgICAgIFBST1RPQ09MX1ZJT0xBVElPTl9FUlJDT0RFLCAiaW52 YWxpZCBTQVNMIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSIKKyAgICAgICAgICAgICksCisgICAg ICAgICAgICBpZD0iYmFkIFNBU0wgbWVjaGFuaXNtIHNlbGVjdGlvbiIsCisgICAgICAgICksCisg ICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIHBxMy50eXBlcy5QYXNzd29yZE1lc3Nh Z2UsCisgICAgICAgICAgICBwcTMuU0FTTEluaXRpYWxSZXNwb25zZS5idWlsZChkaWN0KG5hbWU9 YiJPQVVUSEJFQVJFUiIsIGxlbj0yLCBkYXRhPWIieCIpKSwKKyAgICAgICAgICAgIEV4cGVjdGVk RXJyb3IoUFJPVE9DT0xfVklPTEFUSU9OX0VSUkNPREUsICJpbnN1ZmZpY2llbnQgZGF0YSIpLAor ICAgICAgICAgICAgaWQ9IlNBU0wgZGF0YSB1bmRlcmZsb3ciLAorICAgICAgICApLAorICAgICAg ICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlLAor ICAgICAgICAgICAgcHEzLlNBU0xJbml0aWFsUmVzcG9uc2UuYnVpbGQoZGljdChuYW1lPWIiT0FV VEhCRUFSRVIiLCBsZW49MCwgZGF0YT1iIngiKSksCisgICAgICAgICAgICBFeHBlY3RlZEVycm9y KFBST1RPQ09MX1ZJT0xBVElPTl9FUlJDT0RFLCAiaW52YWxpZCBtZXNzYWdlIGZvcm1hdCIpLAor ICAgICAgICAgICAgaWQ9IlNBU0wgZGF0YSBvdmVyZmxvdyIsCisgICAgICAgICksCisgICAgICAg IHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIHBxMy50eXBlcy5QYXNzd29yZE1lc3NhZ2UsCisg ICAgICAgICAgICBwcTMuU0FTTEluaXRpYWxSZXNwb25zZS5idWlsZChkaWN0KG5hbWU9YiJPQVVU SEJFQVJFUiIsIGRhdGE9YiIiKSksCisgICAgICAgICAgICBFeHBlY3RlZEVycm9yKAorICAgICAg ICAgICAgICAgIFBST1RPQ09MX1ZJT0xBVElPTl9FUlJDT0RFLAorICAgICAgICAgICAgICAgICJt YWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIsCisgICAgICAgICAgICAgICAgIm1lc3NhZ2Ug aXMgZW1wdHkiLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIGlkPSJlbXB0eSIsCisgICAg ICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIHBxMy50eXBlcy5QYXNz d29yZE1lc3NhZ2UsCisgICAgICAgICAgICBwcTMuU0FTTEluaXRpYWxSZXNwb25zZS5idWlsZCgK KyAgICAgICAgICAgICAgICBkaWN0KG5hbWU9YiJPQVVUSEJFQVJFUiIsIGRhdGE9YiJuLCxceDAx YXV0aD1ceDAxXHgwMVwwIikKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBFeHBlY3RlZEVy cm9yKAorICAgICAgICAgICAgICAgIFBST1RPQ09MX1ZJT0xBVElPTl9FUlJDT0RFLAorICAgICAg ICAgICAgICAgICJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIsCisgICAgICAgICAgICAg ICAgImxlbmd0aCBkb2VzIG5vdCBtYXRjaCBpbnB1dCBsZW5ndGgiLAorICAgICAgICAgICAgKSwK KyAgICAgICAgICAgIGlkPSJjb250YWlucyBudWxsIGJ5dGUiLAorICAgICAgICApLAorICAgICAg ICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlLAor ICAgICAgICAgICAgcHEzLlNBU0xJbml0aWFsUmVzcG9uc2UuYnVpbGQoZGljdChuYW1lPWIiT0FV VEhCRUFSRVIiLCBkYXRhPWIiXHgwMSIpKSwKKyAgICAgICAgICAgIEV4cGVjdGVkRXJyb3IoCisg ICAgICAgICAgICAgICAgUFJPVE9DT0xfVklPTEFUSU9OX0VSUkNPREUsCisgICAgICAgICAgICAg ICAgIm1hbGZvcm1lZCBPQVVUSEJFQVJFUiBtZXNzYWdlIiwKKyAgICAgICAgICAgICAgICAiVW5l eHBlY3RlZCBjaGFubmVsLWJpbmRpbmcgZmxhZyIsICAjIFhYWCB0aGlzIGlzIGEgYml0IHN0cmFu Z2UKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBpZD0iaW5pdGlhbCBlcnJvciByZXNwb25z ZSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIHBxMy50 eXBlcy5QYXNzd29yZE1lc3NhZ2UsCisgICAgICAgICAgICBwcTMuU0FTTEluaXRpYWxSZXNwb25z ZS5idWlsZCgKKyAgICAgICAgICAgICAgICBkaWN0KG5hbWU9YiJPQVVUSEJFQVJFUiIsIGRhdGE9 YiJwPXRscy1zZXJ2ZXItZW5kLXBvaW50LCxceDAxIikKKyAgICAgICAgICAgICksCisgICAgICAg ICAgICBFeHBlY3RlZEVycm9yKAorICAgICAgICAgICAgICAgIFBST1RPQ09MX1ZJT0xBVElPTl9F UlJDT0RFLAorICAgICAgICAgICAgICAgICJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIs CisgICAgICAgICAgICAgICAgInNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IGNoYW5uZWwgYmluZGlu ZyIsCisgICAgICAgICAgICApLAorICAgICAgICAgICAgaWQ9InVzZXMgY2hhbm5lbCBiaW5kaW5n IiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgcHEzLnR5 cGVzLlBhc3N3b3JkTWVzc2FnZSwKKyAgICAgICAgICAgIHBxMy5TQVNMSW5pdGlhbFJlc3BvbnNl LmJ1aWxkKGRpY3QobmFtZT1iIk9BVVRIQkVBUkVSIiwgZGF0YT1iIngsLFx4MDEiKSksCisgICAg ICAgICAgICBFeHBlY3RlZEVycm9yKAorICAgICAgICAgICAgICAgIFBST1RPQ09MX1ZJT0xBVElP Tl9FUlJDT0RFLAorICAgICAgICAgICAgICAgICJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2Fn ZSIsCisgICAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgY2hhbm5lbC1iaW5kaW5nIGZsYWciLAor ICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIGlkPSJpbnZhbGlkIGNoYW5uZWwgYmluZGluZyBz cGVjaWZpZXIiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAg ICBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlLAorICAgICAgICAgICAgcHEzLlNBU0xJbml0aWFs UmVzcG9uc2UuYnVpbGQoZGljdChuYW1lPWIiT0FVVEhCRUFSRVIiLCBkYXRhPWIieSIpKSwKKyAg ICAgICAgICAgIEV4cGVjdGVkRXJyb3IoCisgICAgICAgICAgICAgICAgUFJPVE9DT0xfVklPTEFU SU9OX0VSUkNPREUsCisgICAgICAgICAgICAgICAgIm1hbGZvcm1lZCBPQVVUSEJFQVJFUiBtZXNz YWdlIiwKKyAgICAgICAgICAgICAgICAiQ29tbWEgZXhwZWN0ZWQiLAorICAgICAgICAgICAgKSwK KyAgICAgICAgICAgIGlkPSJiYWQgR1MyIGhlYWRlcjogbWlzc2luZyBjaGFubmVsIGJpbmRpbmcg dGVybWluYXRvciIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAg ICAgIHBxMy50eXBlcy5QYXNzd29yZE1lc3NhZ2UsCisgICAgICAgICAgICBwcTMuU0FTTEluaXRp YWxSZXNwb25zZS5idWlsZChkaWN0KG5hbWU9YiJPQVVUSEJFQVJFUiIsIGRhdGE9YiJ5LGEiKSks CisgICAgICAgICAgICBFeHBlY3RlZEVycm9yKAorICAgICAgICAgICAgICAgIEZFQVRVUkVfTk9U X1NVUFBPUlRFRF9FUlJDT0RFLAorICAgICAgICAgICAgICAgICJjbGllbnQgdXNlcyBhdXRob3Jp emF0aW9uIGlkZW50aXR5IiwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBpZD0iYmFkIEdT MiBoZWFkZXI6IGF1dGh6aWQgaW4gdXNlIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBh cmFtKAorICAgICAgICAgICAgcHEzLnR5cGVzLlBhc3N3b3JkTWVzc2FnZSwKKyAgICAgICAgICAg IHBxMy5TQVNMSW5pdGlhbFJlc3BvbnNlLmJ1aWxkKGRpY3QobmFtZT1iIk9BVVRIQkVBUkVSIiwg ZGF0YT1iInksYiwiKSksCisgICAgICAgICAgICBFeHBlY3RlZEVycm9yKAorICAgICAgICAgICAg ICAgIFBST1RPQ09MX1ZJT0xBVElPTl9FUlJDT0RFLAorICAgICAgICAgICAgICAgICJtYWxmb3Jt ZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIsCisgICAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgYXR0 cmlidXRlIiwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBpZD0iYmFkIEdTMiBoZWFkZXI6 IGV4dHJhIGF0dHJpYnV0ZSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAg ICAgICAgICAgIHBxMy50eXBlcy5QYXNzd29yZE1lc3NhZ2UsCisgICAgICAgICAgICBwcTMuU0FT TEluaXRpYWxSZXNwb25zZS5idWlsZChkaWN0KG5hbWU9YiJPQVVUSEJFQVJFUiIsIGRhdGE9YiJ5 LCIpKSwKKyAgICAgICAgICAgIEV4cGVjdGVkRXJyb3IoCisgICAgICAgICAgICAgICAgUFJPVE9D T0xfVklPTEFUSU9OX0VSUkNPREUsCisgICAgICAgICAgICAgICAgIm1hbGZvcm1lZCBPQVVUSEJF QVJFUiBtZXNzYWdlIiwKKyAgICAgICAgICAgICAgICAiVW5leHBlY3RlZCBhdHRyaWJ1dGUgMHgw MCIsICAjIFhYWCB0aGlzIGlzIGEgYml0IHN0cmFuZ2UKKyAgICAgICAgICAgICksCisgICAgICAg ICAgICBpZD0iYmFkIEdTMiBoZWFkZXI6IG1pc3NpbmcgYXV0aHppZCB0ZXJtaW5hdG9yIiwKKyAg ICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgcHEzLnR5cGVzLlBh c3N3b3JkTWVzc2FnZSwKKyAgICAgICAgICAgIHBxMy5TQVNMSW5pdGlhbFJlc3BvbnNlLmJ1aWxk KGRpY3QobmFtZT1iIk9BVVRIQkVBUkVSIiwgZGF0YT1iInksLCIpKSwKKyAgICAgICAgICAgIEV4 cGVjdGVkRXJyb3IoCisgICAgICAgICAgICAgICAgUFJPVE9DT0xfVklPTEFUSU9OX0VSUkNPREUs CisgICAgICAgICAgICAgICAgIm1hbGZvcm1lZCBPQVVUSEJFQVJFUiBtZXNzYWdlIiwKKyAgICAg ICAgICAgICAgICAiS2V5LXZhbHVlIHNlcGFyYXRvciBleHBlY3RlZCIsCisgICAgICAgICAgICAp LAorICAgICAgICAgICAgaWQ9Im1pc3NpbmcgaW5pdGlhbCBrdnNlcCIsCisgICAgICAgICksCisg ICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIHBxMy50eXBlcy5QYXNzd29yZE1lc3Nh Z2UsCisgICAgICAgICAgICBwcTMuU0FTTEluaXRpYWxSZXNwb25zZS5idWlsZChkaWN0KG5hbWU9 YiJPQVVUSEJFQVJFUiIsIGRhdGE9YiJ5LCwiKSksCisgICAgICAgICAgICBFeHBlY3RlZEVycm9y KAorICAgICAgICAgICAgICAgIFBST1RPQ09MX1ZJT0xBVElPTl9FUlJDT0RFLAorICAgICAgICAg ICAgICAgICJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIsCisgICAgICAgICAgICAgICAg IktleS12YWx1ZSBzZXBhcmF0b3IgZXhwZWN0ZWQiLAorICAgICAgICAgICAgKSwKKyAgICAgICAg ICAgIGlkPSJtaXNzaW5nIGluaXRpYWwga3ZzZXAiLAorICAgICAgICApLAorICAgICAgICBweXRl c3QucGFyYW0oCisgICAgICAgICAgICBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlLAorICAgICAg ICAgICAgcHEzLlNBU0xJbml0aWFsUmVzcG9uc2UuYnVpbGQoCisgICAgICAgICAgICAgICAgZGlj dChuYW1lPWIiT0FVVEhCRUFSRVIiLCBkYXRhPWIieSwsXHgwMVx4MDEiKQorICAgICAgICAgICAg KSwKKyAgICAgICAgICAgIEV4cGVjdGVkRXJyb3IoCisgICAgICAgICAgICAgICAgUFJPVE9DT0xf VklPTEFUSU9OX0VSUkNPREUsCisgICAgICAgICAgICAgICAgIm1hbGZvcm1lZCBPQVVUSEJFQVJF UiBtZXNzYWdlIiwKKyAgICAgICAgICAgICAgICAiZG9lcyBub3QgY29udGFpbiBhbiBhdXRoIHZh bHVlIiwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBpZD0ibWlzc2luZyBhdXRoIHZhbHVl OiBlbXB0eSBrZXktdmFsdWUgbGlzdCIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJh bSgKKyAgICAgICAgICAgIHBxMy50eXBlcy5QYXNzd29yZE1lc3NhZ2UsCisgICAgICAgICAgICBw cTMuU0FTTEluaXRpYWxSZXNwb25zZS5idWlsZCgKKyAgICAgICAgICAgICAgICBkaWN0KG5hbWU9 YiJPQVVUSEJFQVJFUiIsIGRhdGE9YiJ5LCxceDAxaG9zdD1leGFtcGxlLmNvbVx4MDFceDAxIikK KyAgICAgICAgICAgICksCisgICAgICAgICAgICBFeHBlY3RlZEVycm9yKAorICAgICAgICAgICAg ICAgIFBST1RPQ09MX1ZJT0xBVElPTl9FUlJDT0RFLAorICAgICAgICAgICAgICAgICJtYWxmb3Jt ZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIsCisgICAgICAgICAgICAgICAgImRvZXMgbm90IGNvbnRh aW4gYW4gYXV0aCB2YWx1ZSIsCisgICAgICAgICAgICApLAorICAgICAgICAgICAgaWQ9Im1pc3Np bmcgYXV0aCB2YWx1ZTogb3RoZXIga2V5cyBwcmVzZW50IiwKKyAgICAgICAgKSwKKyAgICAgICAg cHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgcHEzLnR5cGVzLlBhc3N3b3JkTWVzc2FnZSwKKyAg ICAgICAgICAgIHBxMy5TQVNMSW5pdGlhbFJlc3BvbnNlLmJ1aWxkKAorICAgICAgICAgICAgICAg IGRpY3QobmFtZT1iIk9BVVRIQkVBUkVSIiwgZGF0YT1iInksLFx4MDFob3N0PWV4YW1wbGUuY29t IikKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBFeHBlY3RlZEVycm9yKAorICAgICAgICAg ICAgICAgIFBST1RPQ09MX1ZJT0xBVElPTl9FUlJDT0RFLAorICAgICAgICAgICAgICAgICJtYWxm b3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIsCisgICAgICAgICAgICAgICAgInVudGVybWluYXRl ZCBrZXkvdmFsdWUgcGFpciIsCisgICAgICAgICAgICApLAorICAgICAgICAgICAgaWQ9Im1pc3Np bmcgdmFsdWUgdGVybWluYXRvciIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgK KyAgICAgICAgICAgIHBxMy50eXBlcy5QYXNzd29yZE1lc3NhZ2UsCisgICAgICAgICAgICBwcTMu U0FTTEluaXRpYWxSZXNwb25zZS5idWlsZChkaWN0KG5hbWU9YiJPQVVUSEJFQVJFUiIsIGRhdGE9 YiJ5LCxceDAxIikpLAorICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcigKKyAgICAgICAgICAgICAg ICBQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwKKyAgICAgICAgICAgICAgICAibWFsZm9ybWVk IE9BVVRIQkVBUkVSIG1lc3NhZ2UiLAorICAgICAgICAgICAgICAgICJkaWQgbm90IGNvbnRhaW4g YSBmaW5hbCB0ZXJtaW5hdG9yIiwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBpZD0ibWlz c2luZyBsaXN0IHRlcm1pbmF0b3I6IGVtcHR5IGxpc3QiLAorICAgICAgICApLAorICAgICAgICBw eXRlc3QucGFyYW0oCisgICAgICAgICAgICBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlLAorICAg ICAgICAgICAgcHEzLlNBU0xJbml0aWFsUmVzcG9uc2UuYnVpbGQoCisgICAgICAgICAgICAgICAg ZGljdChuYW1lPWIiT0FVVEhCRUFSRVIiLCBkYXRhPWIieSwsXHgwMWF1dGg9QmVhcmVyIDBceDAx IikKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBFeHBlY3RlZEVycm9yKAorICAgICAgICAg ICAgICAgIFBST1RPQ09MX1ZJT0xBVElPTl9FUlJDT0RFLAorICAgICAgICAgICAgICAgICJtYWxm b3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIsCisgICAgICAgICAgICAgICAgImRpZCBub3QgY29u dGFpbiBhIGZpbmFsIHRlcm1pbmF0b3IiLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIGlk PSJtaXNzaW5nIGxpc3QgdGVybWluYXRvcjogd2l0aCBhdXRoIHZhbHVlIiwKKyAgICAgICAgKSwK KyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgcHEzLnR5cGVzLlBhc3N3b3JkTWVz c2FnZSwKKyAgICAgICAgICAgIHBxMy5TQVNMSW5pdGlhbFJlc3BvbnNlLmJ1aWxkKAorICAgICAg ICAgICAgICAgIGRpY3QobmFtZT1iIk9BVVRIQkVBUkVSIiwgZGF0YT1iInksLFx4MDFhdXRoPUJl YXJlciAwXHgwMVx4MDFibGFoIikKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBFeHBlY3Rl ZEVycm9yKAorICAgICAgICAgICAgICAgIFBST1RPQ09MX1ZJT0xBVElPTl9FUlJDT0RFLAorICAg ICAgICAgICAgICAgICJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIsCisgICAgICAgICAg ICAgICAgImFkZGl0aW9uYWwgZGF0YSBhZnRlciB0aGUgZmluYWwgdGVybWluYXRvciIsCisgICAg ICAgICAgICApLAorICAgICAgICAgICAgaWQ9ImFkZGl0aW9uYWwga2V5IGFmdGVyIHRlcm1pbmF0 b3IiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBwcTMu dHlwZXMuUGFzc3dvcmRNZXNzYWdlLAorICAgICAgICAgICAgcHEzLlNBU0xJbml0aWFsUmVzcG9u c2UuYnVpbGQoCisgICAgICAgICAgICAgICAgZGljdChuYW1lPWIiT0FVVEhCRUFSRVIiLCBkYXRh PWIieSwsXHgwMWtleVx4MDFceDAxIikKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBFeHBl Y3RlZEVycm9yKAorICAgICAgICAgICAgICAgIFBST1RPQ09MX1ZJT0xBVElPTl9FUlJDT0RFLAor ICAgICAgICAgICAgICAgICJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIsCisgICAgICAg ICAgICAgICAgImtleSB3aXRob3V0IGEgdmFsdWUiLAorICAgICAgICAgICAgKSwKKyAgICAgICAg ICAgIGlkPSJrZXkgd2l0aG91dCB2YWx1ZSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5w YXJhbSgKKyAgICAgICAgICAgIHBxMy50eXBlcy5QYXNzd29yZE1lc3NhZ2UsCisgICAgICAgICAg ICBwcTMuU0FTTEluaXRpYWxSZXNwb25zZS5idWlsZCgKKyAgICAgICAgICAgICAgICBkaWN0KAor ICAgICAgICAgICAgICAgICAgICBuYW1lPWIiT0FVVEhCRUFSRVIiLAorICAgICAgICAgICAgICAg ICAgICBkYXRhPWIieSwsXHgwMWF1dGg9QmVhcmVyIDBceDAxYXV0aD1CZWFyZXIgMVx4MDFceDAx IiwKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICApLAorICAgICAgICAgICAgRXhwZWN0 ZWRFcnJvcigKKyAgICAgICAgICAgICAgICBQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwKKyAg ICAgICAgICAgICAgICAibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiLAorICAgICAgICAg ICAgICAgICJjb250YWlucyBtdWx0aXBsZSBhdXRoIHZhbHVlcyIsCisgICAgICAgICAgICApLAor ICAgICAgICAgICAgaWQ9Im11bHRpcGxlIGF1dGggdmFsdWVzIiwKKyAgICAgICAgKSwKKyAgICBd LAorKQorZGVmIHRlc3Rfb2F1dGhfYmFkX2luaXRpYWxfcmVzcG9uc2UoY29ubiwgb2F1dGhfY3R4 LCB0eXBlLCBwYXlsb2FkLCBlcnIpOgorICAgIGJlZ2luX29hdXRoX2hhbmRzaGFrZShjb25uLCBv YXV0aF9jdHgpCisKKyAgICAjIFRoZSBzZXJ2ZXIgZXhwZWN0cyBhIFNBU0wgcmVzcG9uc2U7IGdp dmUgaXQgc29tZXRoaW5nIGVsc2UgaW5zdGVhZC4KKyAgICBpZiBub3QgaXNpbnN0YW5jZShwYXls b2FkLCBkaWN0KToKKyAgICAgICAgcGF5bG9hZCA9IGRpY3QocGF5bG9hZF9kYXRhPXBheWxvYWQp CisgICAgcHEzLnNlbmQoY29ubiwgdHlwZSwgKipwYXlsb2FkKQorCisgICAgcmVzcCA9IHBxMy5y ZWN2MShjb25uKQorICAgIGVyci5tYXRjaChyZXNwKQorCisKK2RlZiB0ZXN0X29hdXRoX2VtcHR5 X2luaXRpYWxfcmVzcG9uc2UoY29ubiwgb2F1dGhfY3R4LCBiZWFyZXJfdG9rZW4pOgorICAgIGJl Z2luX29hdXRoX2hhbmRzaGFrZShjb25uLCBvYXV0aF9jdHgpCisKKyAgICAjIFNlbmQgYW4gaW5p dGlhbCByZXNwb25zZSB3aXRob3V0IGRhdGEuCisgICAgaW5pdGlhbCA9IHBxMy5TQVNMSW5pdGlh bFJlc3BvbnNlLmJ1aWxkKGRpY3QobmFtZT1iIk9BVVRIQkVBUkVSIikpCisgICAgcHEzLnNlbmQo Y29ubiwgcHEzLnR5cGVzLlBhc3N3b3JkTWVzc2FnZSwgaW5pdGlhbCkKKworICAgICMgVGhlIHNl cnZlciBzaG91bGQgcmVzcG9uZCB3aXRoIGFuIGVtcHR5IGNoYWxsZW5nZSBzbyB3ZSBjYW4gc2Vu ZCB0aGUgZGF0YQorICAgICMgaXQgd2FudHMuCisgICAgcGt0ID0gcHEzLnJlY3YxKGNvbm4pCisK KyAgICBhc3NlcnQgcGt0LnR5cGUgPT0gcHEzLnR5cGVzLkF1dGhuUmVxdWVzdAorICAgIGFzc2Vy dCBwa3QucGF5bG9hZC50eXBlID09IHBxMy5hdXRobi5TQVNMQ29udGludWUKKyAgICBhc3NlcnQg bm90IHBrdC5wYXlsb2FkLmJvZHkKKworICAgICMgTm93IHNlbmQgdGhlIGluaXRpYWwgZGF0YS4K KyAgICBkYXRhID0gYiJuLCxceDAxYXV0aD1CZWFyZXIgIiArIGJlYXJlcl90b2tlbigpICsgYiJc eDAxXHgwMSIKKyAgICBwcTMuc2VuZChjb25uLCBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlLCBk YXRhKQorCisgICAgIyBTZXJ2ZXIgc2hvdWxkIG5vdyBjb21wbGV0ZSB0aGUgaGFuZHNoYWtlLgor ICAgIGV4cGVjdF9oYW5kc2hha2Vfc3VjY2Vzcyhjb25uKQorCisKK0BweXRlc3QuZml4dHVyZSgp CitkZWYgc2V0X3ZhbGlkYXRvcigpOgorICAgICIiIgorICAgIEEgcGVyLXRlc3QgZml4dHVyZSB0 aGF0IGFsbG93cyBhIHRlc3QgdG8gb3ZlcnJpZGUgdGhlIHNldHRpbmcgb2YKKyAgICBvYXV0aF92 YWxpZGF0b3JfY29tbWFuZCBmb3IgdGhlIGNsdXN0ZXIuIFRoZSBzZXR0aW5nIHdpbGwgYmUgcmV2 ZXJ0ZWQgZHVyaW5nCisgICAgdGVhcmRvd24uCisKKyAgICBQYXNzaW5nIE5vbmUgd2lsbCBwZXJm b3JtIGFuIEFMVEVSIFNZU1RFTSBSRVNFVC4KKyAgICAiIiIKKyAgICBjb25uID0gcHN5Y29wZzIu Y29ubmVjdCgiIikKKyAgICBjb25uLmF1dG9jb21taXQgPSBUcnVlCisKKyAgICB3aXRoIGNvbnRl eHRsaWIuY2xvc2luZyhjb25uKToKKyAgICAgICAgYyA9IGNvbm4uY3Vyc29yKCkKKworICAgICAg ICAjIFNhdmUgdGhlIHByZXZpb3VzIHZhbHVlLgorICAgICAgICBjLmV4ZWN1dGUoIlNIT1cgb2F1 dGhfdmFsaWRhdG9yX2NvbW1hbmQ7IikKKyAgICAgICAgcHJldl9jbWQgPSBjLmZldGNob25lKClb MF0KKworICAgICAgICBkZWYgc2V0dGVyKGNtZCk6CisgICAgICAgICAgICBjLmV4ZWN1dGUoIkFM VEVSIFNZU1RFTSBTRVQgb2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQgVE8gJXM7IiwgKGNtZCwpKQor ICAgICAgICAgICAgYy5leGVjdXRlKCJTRUxFQ1QgcGdfcmVsb2FkX2NvbmYoKTsiKQorCisgICAg ICAgIHlpZWxkIHNldHRlcgorCisgICAgICAgICMgUmVzdG9yZSB0aGUgcHJldmlvdXMgdmFsdWUu CisgICAgICAgIGMuZXhlY3V0ZSgiQUxURVIgU1lTVEVNIFNFVCBvYXV0aF92YWxpZGF0b3JfY29t bWFuZCBUTyAlczsiLCAocHJldl9jbWQsKSkKKyAgICAgICAgYy5leGVjdXRlKCJTRUxFQ1QgcGdf cmVsb2FkX2NvbmYoKTsiKQorCisKK2RlZiB0ZXN0X29hdXRoX25vX3ZhbGlkYXRvcihvYXV0aF9j dHgsIHNldF92YWxpZGF0b3IsIGNvbm5lY3QsIGJlYXJlcl90b2tlbik6CisgICAgIyBDbGVhciBv dXQgb3VyIHZhbGlkYXRvciBjb21tYW5kLCB0aGVuIGVzdGFibGlzaCBhIG5ldyBjb25uZWN0aW9u LgorICAgIHNldF92YWxpZGF0b3IoIiIpCisgICAgY29ubiA9IGNvbm5lY3QoKQorCisgICAgYmVn aW5fb2F1dGhfaGFuZHNoYWtlKGNvbm4sIG9hdXRoX2N0eCkKKyAgICBzZW5kX2luaXRpYWxfcmVz cG9uc2UoY29ubiwgYmVhcmVyPWJlYXJlcl90b2tlbigpKQorCisgICAgIyBUaGUgc2VydmVyIHNo b3VsZCBmYWlsIHRoZSBjb25uZWN0aW9uLgorICAgIGV4cGVjdF9oYW5kc2hha2VfZmFpbHVyZShj b25uLCBvYXV0aF9jdHgpCisKKworZGVmIHRlc3Rfb2F1dGhfdmFsaWRhdG9yX3JvbGUob2F1dGhf Y3R4LCBzZXRfdmFsaWRhdG9yLCBjb25uZWN0KToKKyAgICAjIFN3aXRjaCB0aGUgdmFsaWRhdG9y IGltcGxlbWVudGF0aW9uLiBUaGlzIHZhbGlkYXRvciB3aWxsIHJlZmxlY3QgdGhlCisgICAgIyBQ R1VTRVIgYXMgdGhlIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHkuCisgICAgcGF0aCA9IHBhdGhsaWIu UGF0aChfX2ZpbGVfXykucGFyZW50IC8gInZhbGlkYXRlX3JlZmxlY3QucHkiCisgICAgcGF0aCA9 IHN0cihwYXRoLmFic29sdXRlKCkpCisKKyAgICBzZXRfdmFsaWRhdG9yKGYie3NobGV4LnF1b3Rl KHBhdGgpfSAnJXInIDwmJWYiKQorICAgIGNvbm4gPSBjb25uZWN0KCkKKworICAgICMgTG9nIGlu LiBOb3RlIHRoYXQgdGhlIHJlZmxlY3Rpb24gdmFsaWRhdG9yIGlnbm9yZXMgdGhlIGJlYXJlciB0 b2tlbi4KKyAgICBiZWdpbl9vYXV0aF9oYW5kc2hha2UoY29ubiwgb2F1dGhfY3R4LCB1c2VyPW9h dXRoX2N0eC51c2VyKQorICAgIHNlbmRfaW5pdGlhbF9yZXNwb25zZShjb25uLCBiZWFyZXI9YiJk b250Y2FyZSIpCisgICAgZXhwZWN0X2hhbmRzaGFrZV9zdWNjZXNzKGNvbm4pCisKKyAgICAjIENo ZWNrIHRoZSB1c2VyIGlkZW50aXR5LgorICAgIHBxMy5zZW5kKGNvbm4sIHBxMy50eXBlcy5RdWVy eSwgcXVlcnk9YiJTRUxFQ1QgYXV0aG5faWQoKTsiKQorICAgIHJlc3AgPSByZWNlaXZlX3VudGls KGNvbm4sIHBxMy50eXBlcy5EYXRhUm93KQorCisgICAgcm93ID0gcmVzcC5wYXlsb2FkCisgICAg ZXhwZWN0ZWQgPSBvYXV0aF9jdHgudXNlci5lbmNvZGUoInV0Zi04IikKKyAgICBhc3NlcnQgcm93 LmNvbHVtbnMgPT0gW2V4cGVjdGVkXQorCisKK2RlZiB0ZXN0X29hdXRoX3JvbGVfd2l0aF9zaGVs bF91bnNhZmVfY2hhcmFjdGVycyhvYXV0aF9jdHgsIHNldF92YWxpZGF0b3IsIGNvbm5lY3QpOgor ICAgICIiIgorICAgIFhYWCBUaGlzIHRlc3QgcGlucyB1bmRlc2lyYWJsZSBiZWhhdmlvci4gV2Ug c2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIGFueQorICAgIHZhbGlkIFBvc3RncmVzIHJvbGUgbmFt ZS4KKyAgICAiIiIKKyAgICAjIFN3aXRjaCB0aGUgdmFsaWRhdG9yIGltcGxlbWVudGF0aW9uLiBU aGlzIHZhbGlkYXRvciB3aWxsIHJlZmxlY3QgdGhlCisgICAgIyBQR1VTRVIgYXMgdGhlIGF1dGhl bnRpY2F0ZWQgaWRlbnRpdHkuCisgICAgcGF0aCA9IHBhdGhsaWIuUGF0aChfX2ZpbGVfXykucGFy ZW50IC8gInZhbGlkYXRlX3JlZmxlY3QucHkiCisgICAgcGF0aCA9IHN0cihwYXRoLmFic29sdXRl KCkpCisKKyAgICBzZXRfdmFsaWRhdG9yKGYie3NobGV4LnF1b3RlKHBhdGgpfSAnJXInIDwmJWYi KQorICAgIGNvbm4gPSBjb25uZWN0KCkKKworICAgIHVuc2FmZV91c2VybmFtZSA9ICJoZWxsbyd0 aGVyZSIKKyAgICBiZWdpbl9vYXV0aF9oYW5kc2hha2UoY29ubiwgb2F1dGhfY3R4LCB1c2VyPXVu c2FmZV91c2VybmFtZSkKKworICAgICMgVGhlIHNlcnZlciBzaG91bGQgcmVqZWN0IHRoZSBoYW5k c2hha2UuCisgICAgc2VuZF9pbml0aWFsX3Jlc3BvbnNlKGNvbm4sIGJlYXJlcj1iImRvbnRjYXJl IikKKyAgICBleHBlY3RfaGFuZHNoYWtlX2ZhaWx1cmUoY29ubiwgb2F1dGhfY3R4KQpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcHl0aG9uL3NlcnZlci90ZXN0X3NlcnZlci5weSBiL3NyYy90ZXN0L3B5 dGhvbi9zZXJ2ZXIvdGVzdF9zZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uMDIxMjZkYmE3OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5dGhvbi9z ZXJ2ZXIvdGVzdF9zZXJ2ZXIucHkKQEAgLTAsMCArMSwyMSBAQAorIworIyBDb3B5cmlnaHQgMjAy MSBWTXdhcmUsIEluYy4KKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IFBvc3RncmVTUUwKKyMK KworaW1wb3J0IHBxMworCisKK2RlZiB0ZXN0X2hhbmRzaGFrZShjb25uZWN0KToKKyAgICAiIiJC YXNpYyBzYW5pdHkgY2hlY2suIiIiCisgICAgY29ubiA9IGNvbm5lY3QoKQorCisgICAgcHEzLmhh bmRzaGFrZShjb25uLCB1c2VyPXBxMy5wZ3VzZXIoKSwgZGF0YWJhc2U9cHEzLnBnZGF0YWJhc2Uo KSkKKworICAgIHBxMy5zZW5kKGNvbm4sIHBxMy50eXBlcy5RdWVyeSwgcXVlcnk9YiIiKQorCisg ICAgcmVzcCA9IHBxMy5yZWN2MShjb25uKQorICAgIGFzc2VydCByZXNwLnR5cGUgPT0gcHEzLnR5 cGVzLkVtcHR5UXVlcnlSZXNwb25zZQorCisgICAgcmVzcCA9IHBxMy5yZWN2MShjb25uKQorICAg IGFzc2VydCByZXNwLnR5cGUgPT0gcHEzLnR5cGVzLlJlYWR5Rm9yUXVlcnkKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIvdmFsaWRhdGVfYmVhcmVyLnB5IGIvc3JjL3Rlc3QvcHl0 aG9uL3NlcnZlci92YWxpZGF0ZV9iZWFyZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg MDAwMDAwMDAwMC4uMmNjNzNmZjE1NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5dGhv bi9zZXJ2ZXIvdmFsaWRhdGVfYmVhcmVyLnB5CkBAIC0wLDAgKzEsMTAxIEBACisjISAvdXNyL2Jp bi9lbnYgcHl0aG9uMworIworIyBDb3B5cmlnaHQgMjAyMSBWTXdhcmUsIEluYy4KKyMgU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IFBvc3RncmVTUUwKKyMKKyMgRE8gTk9UIFVTRSBUSElTIE9BVVRI IFZBTElEQVRPUiBJTiBQUk9EVUNUSU9OLiBJdCBkb2Vzbid0IGFjdHVhbGx5IHZhbGlkYXRlCisj IGFueXRoaW5nLCBhbmQgaXQgbG9ncyB0aGUgYmVhcmVyIHRva2VuIGRhdGEsIHdoaWNoIGlzIHNl bnNpdGl2ZS4KKyMKKyMgVGhpcyBleGVjdXRhYmxlIGlzIHVzZWQgYXMgYW4gb2F1dGhfdmFsaWRh dG9yX2NvbW1hbmQgaW4gY29uY2VydCB3aXRoCisjIHRlc3Rfb2F1dGgucHkuIE1lbW9yeSBpcyBz aGFyZWQgYW5kIGNvbW11bmljYXRlZCBmcm9tIHRoYXQgdGVzdCBtb2R1bGUncworIyBiZWFyZXJf dG9rZW4oKSBmaXh0dXJlLgorIworIyBUaGlzIHNjcmlwdCBtdXN0IHJ1biB1bmRlciB0aGUgUG9z dGdyZXMgc2VydmVyIGVudmlyb25tZW50OyBrZWVwIHRoZQorIyBkZXBlbmRlbmN5IGxpc3QgZmFp cmx5IHN0YW5kYXJkLgorCitpbXBvcnQgYmFzZTY0CitpbXBvcnQgYmluYXNjaWkKK2ltcG9ydCBj b250ZXh0bGliCitpbXBvcnQgc3RydWN0CitpbXBvcnQgc3lzCitmcm9tIG11bHRpcHJvY2Vzc2lu ZyBpbXBvcnQgc2hhcmVkX21lbW9yeQorCitNQVhfVUlOVDE2ID0gMiAqKiAxNiAtIDEKKworCitk ZWYgcmVtb3ZlX3NobV9mcm9tX3Jlc291cmNlX3RyYWNrZXIoKToKKyAgICAiIiIKKyAgICBNb25r ZXktcGF0Y2ggbXVsdGlwcm9jZXNzaW5nLnJlc291cmNlX3RyYWNrZXIgc28gU2hhcmVkTWVtb3J5 IHdvbid0IGJlCisgICAgdHJhY2tlZC4gUHVsbGVkIGZyb20gdGhpcyB0aHJlYWQsIHdoZXJlIHRo ZXJlIGFyZSBtb3JlIGRldGFpbHM6CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLnB5dGhvbi5vcmcv aXNzdWUzODExOQorCisgICAgVEw7RFI6IGFsbCBjbGllbnRzIG9mIHNoYXJlZCBtZW1vcnkgc2Vn bWVudHMgYXV0b21hdGljYWxseSBkZXN0cm95IHRoZW0gb24KKyAgICBwcm9jZXNzIGV4aXQsIHdo aWNoIG1ha2VzIHNoYXJlZCBtZW1vcnkgc2VnbWVudHMgbXVjaCBsZXNzIHVzZWZ1bC4gVGhpcwor ICAgIG1vbmtleXBhdGNoIHJlbW92ZXMgdGhhdCBiZWhhdmlvciBzbyB0aGF0IHdlIGNhbiBkZWZl ciB0byB0aGUgdGVzdCB0byBtYW5hZ2UKKyAgICB0aGUgc2VnbWVudCBsaWZldGltZS4KKworICAg IElkZWFsbHkgYSBmdXR1cmUgUHl0aG9uIHBhdGNoIHdpbGwgcHVsbCBpbiB0aGlzIGZpeCBhbmQg dGhlbiB0aGUgZW50aXJlCisgICAgZnVuY3Rpb24gY2FuIGdvIGF3YXkuCisgICAgIiIiCisgICAg ZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IHJlc291cmNlX3RyYWNrZXIKKworICAgIGRlZiBm aXhfcmVnaXN0ZXIobmFtZSwgcnR5cGUpOgorICAgICAgICBpZiBydHlwZSA9PSAic2hhcmVkX21l bW9yeSI6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgcmV0dXJuIHJlc291cmNlX3RyYWNr ZXIuX3Jlc291cmNlX3RyYWNrZXIucmVnaXN0ZXIoc2VsZiwgbmFtZSwgcnR5cGUpCisKKyAgICBy ZXNvdXJjZV90cmFja2VyLnJlZ2lzdGVyID0gZml4X3JlZ2lzdGVyCisKKyAgICBkZWYgZml4X3Vu cmVnaXN0ZXIobmFtZSwgcnR5cGUpOgorICAgICAgICBpZiBydHlwZSA9PSAic2hhcmVkX21lbW9y eSI6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgcmV0dXJuIHJlc291cmNlX3RyYWNrZXIu X3Jlc291cmNlX3RyYWNrZXIudW5yZWdpc3RlcihzZWxmLCBuYW1lLCBydHlwZSkKKworICAgIHJl c291cmNlX3RyYWNrZXIudW5yZWdpc3RlciA9IGZpeF91bnJlZ2lzdGVyCisKKyAgICBpZiAic2hh cmVkX21lbW9yeSIgaW4gcmVzb3VyY2VfdHJhY2tlci5fQ0xFQU5VUF9GVU5DUzoKKyAgICAgICAg ZGVsIHJlc291cmNlX3RyYWNrZXIuX0NMRUFOVVBfRlVOQ1NbInNoYXJlZF9tZW1vcnkiXQorCisK K2RlZiBtYWluKGFyZ3MpOgorICAgIHJlbW92ZV9zaG1fZnJvbV9yZXNvdXJjZV90cmFja2VyKCkg ICMgWFhYIHJlbW92ZSBzb21lIGRheQorCisgICAgIyBHZXQgdGhlIGV4cGVjdGVkIHRva2VuIGZy b20gdGhlIGN1cnJlbnRseSBydW5uaW5nIHRlc3QuCisgICAgc2hhcmVkX21lbV9uYW1lID0gYXJn c1swXQorCisgICAgbWVtID0gc2hhcmVkX21lbW9yeS5TaGFyZWRNZW1vcnkoc2hhcmVkX21lbV9u YW1lKQorICAgIHdpdGggY29udGV4dGxpYi5jbG9zaW5nKG1lbSk6CisgICAgICAgICMgRmlyc3Qg dHdvIGJ5dGVzIGFyZSB0aGUgdG9rZW4gbGVuZ3RoLgorICAgICAgICBzaXplID0gc3RydWN0LnVu cGFjaygiSCIsIG1lbS5idWZbOjJdKVswXQorCisgICAgICAgIGlmIHNpemUgPT0gTUFYX1VJTlQx NjoKKyAgICAgICAgICAgICMgU3BlY2lhbCBjYXNlOiB0aGUgdGVzdCB3YW50cyB1cyB0byBhY2Nl cHQgYW55IHRva2VuLgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiYWNjZXB0aW5nIHRv a2VuIHdpdGhvdXQgdmFsaWRhdGlvblxuIikKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAg ICMgVGhlIHJlbWFpbmRlciBvZiB0aGUgYnVmZmVyIGNvbnRhaW5zIHRoZSBleHBlY3RlZCB0b2tl bi4KKyAgICAgICAgYXNzZXJ0IHNpemUgPD0gKG1lbS5zaXplIC0gMikKKyAgICAgICAgZXhwZWN0 ZWRfdG9rZW4gPSBtZW0uYnVmWzIgOiBzaXplICsgMl0udG9ieXRlcygpCisKKyAgICAgICAgbWVt LmJ1Zls6XSA9IGIiXDAiICogbWVtLnNpemUgICMgc2NyaWJibGUgb3ZlciB0aGUgdG9rZW4KKwor ICAgIHRva2VuID0gc3lzLnN0ZGluLmJ1ZmZlci5yZWFkKCkKKyAgICBpZiB0b2tlbiAhPSBleHBl Y3RlZF90b2tlbjoKKyAgICAgICAgc3lzLmV4aXQoZiJmYWlsZWQgdG8gbWF0Y2ggQmVhcmVyIHRv a2VuICh7dG9rZW4hcn0gIT0ge2V4cGVjdGVkX3Rva2VuIXJ9KSIpCisKKyAgICAjIFNlZSBpZiB0 aGUgdGVzdCB3YW50cyB1cyB0byBwcmludCBhbnl0aGluZy4gSWYgc28sIGl0IHdpbGwgaGF2ZSBl bmNvZGVkCisgICAgIyB0aGUgZGVzaXJlZCBvdXRwdXQgaW4gdGhlIHRva2VuIHdpdGggYW4gIm91 dHB1dD0iIHByZWZpeC4KKyAgICB0cnk6CisgICAgICAgICMgYWx0Y2hhcnM9Ii1fIiBjb3JyZXNw b25kcyB0byB0aGUgdXJsc2FmZSBhbHBoYWJldC4KKyAgICAgICAgZGF0YSA9IGJhc2U2NC5iNjRk ZWNvZGUodG9rZW4sIGFsdGNoYXJzPSItXyIsIHZhbGlkYXRlPVRydWUpCisKKyAgICAgICAgaWYg ZGF0YS5zdGFydHN3aXRoKGIib3V0cHV0PSIpOgorICAgICAgICAgICAgc3lzLnN0ZG91dC5idWZm ZXIud3JpdGUoZGF0YVs3Ol0pCisKKyAgICBleGNlcHQgYmluYXNjaWkuRXJyb3I6CisgICAgICAg IHBhc3MKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oc3lzLmFyZ3Zb MTpdKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcHl0aG9uL3NlcnZlci92YWxpZGF0ZV9yZWZsZWN0 LnB5IGIvc3JjL3Rlc3QvcHl0aG9uL3NlcnZlci92YWxpZGF0ZV9yZWZsZWN0LnB5Cm5ldyBmaWxl IG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAuLjI0YzNhN2U3MTUKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvdGVzdC9weXRob24vc2VydmVyL3ZhbGlkYXRlX3JlZmxlY3QucHkKQEAgLTAsMCAr MSwzNCBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKKyMKKyMgQ29weXJpZ2h0IDIwMjEgVk13 YXJlLCBJbmMuCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBQb3N0Z3JlU1FMCisjCisjIERP IE5PVCBVU0UgVEhJUyBPQVVUSCBWQUxJREFUT1IgSU4gUFJPRFVDVElPTi4gSXQgaWdub3JlcyB0 aGUgYmVhcmVyIHRva2VuCisjIGVudGlyZWx5IGFuZCBhdXRvbWF0aWNhbGx5IGxvZ3MgdGhlIHVz ZXIgaW4uCisjCisjIFRoaXMgZXhlY3V0YWJsZSBpcyB1c2VkIGFzIGFuIG9hdXRoX3ZhbGlkYXRv cl9jb21tYW5kIGluIGNvbmNlcnQgd2l0aAorIyB0ZXN0X29hdXRoLnB5LiBJdCBleHBlY3RzIHRo ZSB1c2VyJ3MgZGVzaXJlZCByb2xlIG5hbWUgYXMgYW4gYXJndW1lbnQ7IHRoZQorIyBhY3R1YWwg dG9rZW4gd2lsbCBiZSBkaXNjYXJkZWQgYW5kIHRoZSB1c2VyIHdpbGwgYmUgbG9nZ2VkIGluIHdp dGggdGhlIHJvbGUKKyMgbmFtZSBhcyB0aGUgYXV0aGVudGljYXRlZCBpZGVudGl0eS4KKyMKKyMg VGhpcyBzY3JpcHQgbXVzdCBydW4gdW5kZXIgdGhlIFBvc3RncmVzIHNlcnZlciBlbnZpcm9ubWVu dDsga2VlcCB0aGUKKyMgZGVwZW5kZW5jeSBsaXN0IGZhaXJseSBzdGFuZGFyZC4KKworaW1wb3J0 IHN5cworCisKK2RlZiBtYWluKGFyZ3MpOgorICAgICMgV2UgaGF2ZSB0byByZWFkIHRoZSBlbnRp cmUgdG9rZW4gYXMgb3VyIGZpcnN0IGFjdGlvbiB0byB1bmJsb2NrIHRoZQorICAgICMgc2VydmVy LCBidXQgd2Ugd29uJ3QgYWN0dWFsbHkgdXNlIGl0LgorICAgIF8gPSBzeXMuc3RkaW4uYnVmZmVy LnJlYWQoKQorCisgICAgaWYgbGVuKGFyZ3MpICE9IDE6CisgICAgICAgIHN5cy5leGl0KCJ1c2Fn ZTogLi92YWxpZGF0ZV9yZWZsZWN0LnB5IFJPTEUiKQorCisgICAgIyBMb2cgdGhlIHVzZXIgaW4g YXMgdGhlIHByb3ZpZGVkIHJvbGUuCisgICAgcm9sZSA9IGFyZ3NbMF0KKyAgICBwcmludChyb2xl KQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbihzeXMuYXJndlsxOl0p CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9weXRob24vdGVzdF9pbnRlcm5hbHMucHkgYi9zcmMvdGVz dC9weXRob24vdGVzdF9pbnRlcm5hbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uZGVlNDg1NWZjMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5dGhvbi90 ZXN0X2ludGVybmFscy5weQpAQCAtMCwwICsxLDEzOCBAQAorIworIyBDb3B5cmlnaHQgMjAyMSBW TXdhcmUsIEluYy4KKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IFBvc3RncmVTUUwKKyMKKwor aW1wb3J0IGlvCisKK2Zyb20gcHEzIGltcG9ydCBfRGVidWdTdHJlYW0KKworCitkZWYgdGVzdF9E ZWJ1Z1N0cmVhbV9yZWFkKCk6CisgICAgdW5kZXIgPSBpby5CeXRlc0lPKGIiYWJjZGVmZ2hpamts bW5vcHFyc3R1dnd4eXoiKQorICAgIG91dCA9IGlvLlN0cmluZ0lPKCkKKworICAgIHN0cmVhbSA9 IF9EZWJ1Z1N0cmVhbSh1bmRlciwgb3V0KQorCisgICAgcmVzID0gc3RyZWFtLnJlYWQoNSkKKyAg ICBhc3NlcnQgcmVzID09IGIiYWJjZGUiCisKKyAgICByZXMgPSBzdHJlYW0ucmVhZCgxNikKKyAg ICBhc3NlcnQgcmVzID09IGIiZmdoaWprbG1ub3BxcnN0dSIKKworICAgIHN0cmVhbS5mbHVzaF9k ZWJ1ZygpCisKKyAgICByZXMgPSBzdHJlYW0ucmVhZCgpCisgICAgYXNzZXJ0IHJlcyA9PSBiInZ3 eHl6IgorCisgICAgc3RyZWFtLmZsdXNoX2RlYnVnKCkKKworICAgIGV4cGVjdGVkID0gKAorICAg ICAgICAiPCAwMDAwOlx0NjEgNjIgNjMgNjQgNjUgNjYgNjcgNjggNjkgNmEgNmIgNmMgNmQgNmUg NmYgNzBcdGFiY2RlZmdoaWprbG1ub3BcbiIKKyAgICAgICAgIjwgMDAxMDpcdDcxIDcyIDczIDc0 IDc1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHRxcnN0dVxuIgorICAgICAgICAi XG4iCisgICAgICAgICI8IDAwMDA6XHQ3NiA3NyA3OCA3OSA3YSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFx0dnd4eXpcbiIKKyAgICAgICAgIlxuIgorICAgICkKKyAgICBhc3NlcnQg b3V0LmdldHZhbHVlKCkgPT0gZXhwZWN0ZWQKKworCitkZWYgdGVzdF9EZWJ1Z1N0cmVhbV93cml0 ZSgpOgorICAgIHVuZGVyID0gaW8uQnl0ZXNJTygpCisgICAgb3V0ID0gaW8uU3RyaW5nSU8oKQor CisgICAgc3RyZWFtID0gX0RlYnVnU3RyZWFtKHVuZGVyLCBvdXQpCisKKyAgICBzdHJlYW0ud3Jp dGUoYiJceDAwXHgwMVx4MDIiKQorICAgIHN0cmVhbS5mbHVzaCgpCisKKyAgICBhc3NlcnQgdW5k ZXIuZ2V0dmFsdWUoKSA9PSBiIlx4MDBceDAxXHgwMiIKKworICAgIHN0cmVhbS53cml0ZShiIlx4 YzBceGMxXHhjMiIpCisgICAgc3RyZWFtLmZsdXNoKCkKKworICAgIGFzc2VydCB1bmRlci5nZXR2 YWx1ZSgpID09IGIiXHgwMFx4MDFceDAyXHhjMFx4YzFceGMyIgorCisgICAgc3RyZWFtLmZsdXNo X2RlYnVnKCkKKworICAgIGV4cGVjdGVkID0gIj4gMDAwMDpcdDAwIDAxIDAyIGMwIGMxIGMyICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXHQuLi4uLi5cblxuIgorICAgIGFzc2VydCBvdXQu Z2V0dmFsdWUoKSA9PSBleHBlY3RlZAorCisKK2RlZiB0ZXN0X0RlYnVnU3RyZWFtX3JlYWRfd3Jp dGUoKToKKyAgICB1bmRlciA9IGlvLkJ5dGVzSU8oYiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5 eiIpCisgICAgb3V0ID0gaW8uU3RyaW5nSU8oKQorICAgIHN0cmVhbSA9IF9EZWJ1Z1N0cmVhbSh1 bmRlciwgb3V0KQorCisgICAgcmVzID0gc3RyZWFtLnJlYWQoNSkKKyAgICBhc3NlcnQgcmVzID09 IGIiYWJjZGUiCisKKyAgICBzdHJlYW0ud3JpdGUoYiJ4eHh4eCIpCisgICAgc3RyZWFtLmZsdXNo KCkKKworICAgIGFzc2VydCB1bmRlci5nZXR2YWx1ZSgpID09IGIiYWJjZGV4eHh4eGtsbW5vcHFy c3R1dnd4eXoiCisKKyAgICByZXMgPSBzdHJlYW0ucmVhZCg1KQorICAgIGFzc2VydCByZXMgPT0g YiJrbG1ubyIKKworICAgIHN0cmVhbS53cml0ZShiInh4eHh4IikKKyAgICBzdHJlYW0uZmx1c2go KQorCisgICAgYXNzZXJ0IHVuZGVyLmdldHZhbHVlKCkgPT0gYiJhYmNkZXh4eHh4a2xtbm94eHh4 eHV2d3h5eiIKKworICAgIHN0cmVhbS5mbHVzaF9kZWJ1ZygpCisKKyAgICBleHBlY3RlZCA9ICgK KyAgICAgICAgIjwgMDAwMDpcdDYxIDYyIDYzIDY0IDY1IDZiIDZjIDZkIDZlIDZmICAgICAgICAg ICAgICAgICAgXHRhYmNkZWtsbW5vXG4iCisgICAgICAgICJcbiIKKyAgICAgICAgIj4gMDAwMDpc dDc4IDc4IDc4IDc4IDc4IDc4IDc4IDc4IDc4IDc4ICAgICAgICAgICAgICAgICAgXHR4eHh4eHh4 eHh4XG4iCisgICAgICAgICJcbiIKKyAgICApCisgICAgYXNzZXJ0IG91dC5nZXR2YWx1ZSgpID09 IGV4cGVjdGVkCisKKworZGVmIHRlc3RfRGVidWdTdHJlYW1fZW5kX3BhY2tldCgpOgorICAgIHVu ZGVyID0gaW8uQnl0ZXNJTyhiImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IikKKyAgICBvdXQg PSBpby5TdHJpbmdJTygpCisgICAgc3RyZWFtID0gX0RlYnVnU3RyZWFtKHVuZGVyLCBvdXQpCisK KyAgICBzdHJlYW0ucmVhZCg1KQorICAgIHN0cmVhbS5lbmRfcGFja2V0KCJyZWFkIGRlc2NyaXB0 aW9uIiwgcmVhZD1UcnVlLCBpbmRlbnQ9IiAiKQorCisgICAgc3RyZWFtLndyaXRlKGIieHh4eHgi KQorICAgIHN0cmVhbS5mbHVzaCgpCisgICAgc3RyZWFtLmVuZF9wYWNrZXQoIndyaXRlIGRlc2Ny aXB0aW9uIiwgaW5kZW50PSIgIikKKworICAgIHN0cmVhbS5yZWFkKDUpCisgICAgc3RyZWFtLndy aXRlKGIieHh4eHgiKQorICAgIHN0cmVhbS5mbHVzaCgpCisgICAgc3RyZWFtLmVuZF9wYWNrZXQo InJlYWQvd3JpdGUgY29tYm8gZm9yIHJlYWQiLCByZWFkPVRydWUsIGluZGVudD0iICIpCisKKyAg ICBzdHJlYW0ucmVhZCg1KQorICAgIHN0cmVhbS53cml0ZShiInh4eHh4IikKKyAgICBzdHJlYW0u Zmx1c2goKQorICAgIHN0cmVhbS5lbmRfcGFja2V0KCJyZWFkL3dyaXRlIGNvbWJvIGZvciB3cml0 ZSIsIGluZGVudD0iICIpCisKKyAgICBleHBlY3RlZCA9ICgKKyAgICAgICAgIiA8IDAwMDA6XHQ2 MSA2MiA2MyA2NCA2NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0YWJjZGVcbiIK KyAgICAgICAgIlxuIgorICAgICAgICAiPCByZWFkIGRlc2NyaXB0aW9uXG4iCisgICAgICAgICJc biIKKyAgICAgICAgIj4gd3JpdGUgZGVzY3JpcHRpb25cbiIKKyAgICAgICAgIlxuIgorICAgICAg ICAiID4gMDAwMDpcdDc4IDc4IDc4IDc4IDc4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXHR4eHh4eFxuIgorICAgICAgICAiXG4iCisgICAgICAgICIgPCAwMDAwOlx0NmIgNmMgNmQg NmUgNmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdGtsbW5vXG4iCisgICAgICAg ICJcbiIKKyAgICAgICAgIiA+IDAwMDA6XHQ3OCA3OCA3OCA3OCA3OCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFx0eHh4eHhcbiIKKyAgICAgICAgIlxuIgorICAgICAgICAiPCByZWFk L3dyaXRlIGNvbWJvIGZvciByZWFkXG4iCisgICAgICAgICJcbiIKKyAgICAgICAgIj4gcmVhZC93 cml0ZSBjb21ibyBmb3Igd3JpdGVcbiIKKyAgICAgICAgIlxuIgorICAgICAgICAiIDwgMDAwMDpc dDc1IDc2IDc3IDc4IDc5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR1dnd4eVxu IgorICAgICAgICAiXG4iCisgICAgICAgICIgPiAwMDAwOlx0NzggNzggNzggNzggNzggICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcdHh4eHh4XG4iCisgICAgICAgICJcbiIKKyAgICAp CisgICAgYXNzZXJ0IG91dC5nZXR2YWx1ZSgpID09IGV4cGVjdGVkCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9weXRob24vdGVzdF9wcTMucHkgYi9zcmMvdGVzdC9weXRob24vdGVzdF9wcTMucHkKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZTBjMGUwNTY4ZAotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy90ZXN0L3B5dGhvbi90ZXN0X3BxMy5weQpAQCAtMCwwICsxLDU1OCBAQAor IworIyBDb3B5cmlnaHQgMjAyMSBWTXdhcmUsIEluYy4KKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IFBvc3RncmVTUUwKKyMKKworaW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBnZXRwYXNzCitp bXBvcnQgaW8KK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBzeXMKKworaW1wb3J0IHB5dGVzdAorZnJv bSBjb25zdHJ1Y3QgaW1wb3J0IENvbnRhaW5lciwgUGFkZGluZ0Vycm9yLCBTdHJlYW1FcnJvciwg VGVybWluYXRlZEVycm9yCisKK2ltcG9ydCBwcTMKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJp emUoCisgICAgInJhdyxleHBlY3RlZCxleHRyYSIsCisgICAgWworICAgICAgICBweXRlc3QucGFy YW0oCisgICAgICAgICAgICBiIlx4MDBceDAwXHgwMFx4MTBceDAwXHgwNFx4MDBceDAwYWJjZGVm Z2giLAorICAgICAgICAgICAgQ29udGFpbmVyKGxlbj0xNiwgcHJvdG89MHg0MDAwMCwgcGF5bG9h ZD1iImFiY2RlZmdoIiksCisgICAgICAgICAgICBiIiIsCisgICAgICAgICAgICBpZD0iOC1ieXRl IHBheWxvYWQiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAg ICBiIlx4MDBceDAwXHgwMFx4MDhceDAwXHgwNFx4MDBceDAwIiwKKyAgICAgICAgICAgIENvbnRh aW5lcihsZW49OCwgcHJvdG89MHg0MDAwMCwgcGF5bG9hZD1iIiIpLAorICAgICAgICAgICAgYiIi LAorICAgICAgICAgICAgaWQ9Im5vIHBheWxvYWQiLAorICAgICAgICApLAorICAgICAgICBweXRl c3QucGFyYW0oCisgICAgICAgICAgICBiIlx4MDBceDAwXHgwMFx4MDlceDAwXHgwNFx4MDBceDAw YWJjZGUiLAorICAgICAgICAgICAgQ29udGFpbmVyKGxlbj05LCBwcm90bz0weDQwMDAwLCBwYXls b2FkPWIiYSIpLAorICAgICAgICAgICAgYiJiY2RlIiwKKyAgICAgICAgICAgIGlkPSIxLWJ5dGUg cGF5bG9hZCBhbmQgZXh0cmEgcGFkZGluZyIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5w YXJhbSgKKyAgICAgICAgICAgIGIiXHgwMFx4MDBceDAwXHgwQlx4MDBceDAzXHgwMFx4MDBoaVx4 MDAiLAorICAgICAgICAgICAgQ29udGFpbmVyKGxlbj0xMSwgcHJvdG89cHEzLnByb3RvY29sKDMs IDApLCBwYXlsb2FkPVtiImhpIl0pLAorICAgICAgICAgICAgYiIiLAorICAgICAgICAgICAgaWQ9 ImltcGxpZWQgcGFyYW1ldGVyIGxpc3Qgd2hlbiB1c2luZyBwcm90byB2ZXJzaW9uIDMuMCIsCisg ICAgICAgICksCisgICAgXSwKKykKK2RlZiB0ZXN0X1N0YXJ0dXBfcGFyc2UocmF3LCBleHBlY3Rl ZCwgZXh0cmEpOgorICAgIHdpdGggaW8uQnl0ZXNJTyhyYXcpIGFzIHN0cmVhbToKKyAgICAgICAg YWN0dWFsID0gcHEzLlN0YXJ0dXAucGFyc2Vfc3RyZWFtKHN0cmVhbSkKKworICAgICAgICBhc3Nl cnQgYWN0dWFsID09IGV4cGVjdGVkCisgICAgICAgIGFzc2VydCBzdHJlYW0ucmVhZCgpID09IGV4 dHJhCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKAorICAgICJwYWNrZXQsZXhwZWN0ZWRf Ynl0ZXMiLAorICAgIFsKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgZGljdCgp LAorICAgICAgICAgICAgYiJceDAwXHgwMFx4MDBceDA4XHgwMFx4MDBceDAwXHgwMCIsCisgICAg ICAgICAgICBpZD0ibm90aGluZyBzZXQiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFy YW0oCisgICAgICAgICAgICBkaWN0KGxlbj0xMCwgcHJvdG89MHgxMjM0NTY3OCksCisgICAgICAg ICAgICBiIlx4MDBceDAwXHgwMFx4MEFceDEyXHgzNFx4NTZceDc4XHgwMFx4MDAiLAorICAgICAg ICAgICAgaWQ9ImxlbiBhbmQgcHJvdG8gc2V0IGV4cGxpY2l0bHkiLAorICAgICAgICApLAorICAg ICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBkaWN0KHByb3RvPTB4MTIzNDU2NzgpLAor ICAgICAgICAgICAgYiJceDAwXHgwMFx4MDBceDA4XHgxMlx4MzRceDU2XHg3OCIsCisgICAgICAg ICAgICBpZD0iaW1wbGllZCBsZW4gd2l0aCBubyBwYXlsb2FkIiwKKyAgICAgICAgKSwKKyAgICAg ICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgZGljdChwcm90bz0weDEyMzQ1Njc4LCBwYXls b2FkPWIiYWJjZCIpLAorICAgICAgICAgICAgYiJceDAwXHgwMFx4MDBceDBDXHgxMlx4MzRceDU2 XHg3OGFiY2QiLAorICAgICAgICAgICAgaWQ9ImltcGxpZWQgbGVuIHdpdGggcGF5bG9hZCIsCisg ICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGRpY3QocGF5bG9h ZD1bYiIiXSksCisgICAgICAgICAgICBiIlx4MDBceDAwXHgwMFx4MDlceDAwXHgwM1x4MDBceDAw XHgwMCIsCisgICAgICAgICAgICBpZD0iaW1wbGllZCBwcm90byB2ZXJzaW9uIDMgd2hlbiBzZW5k aW5nIHBhcmFtZXRlcnMiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAg ICAgICAgICBkaWN0KHBheWxvYWQ9W2IiaGkiLCBiIiJdKSwKKyAgICAgICAgICAgIGIiXHgwMFx4 MDBceDAwXHgwQ1x4MDBceDAzXHgwMFx4MDBoaVx4MDBceDAwIiwKKyAgICAgICAgICAgIGlkPSJp bXBsaWVkIHByb3RvIHZlcnNpb24gMyBhbmQgbGVuIHdoZW4gc2VuZGluZyBtb3JlIHRoYW4gb25l IHBhcmFtZXRlciIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAg ICAgIGRpY3QocGF5bG9hZD1kaWN0KHVzZXI9ImpzbWl0aCIsIGRhdGFiYXNlPSJwb3N0Z3JlcyIp KSwKKyAgICAgICAgICAgIGIiXHgwMFx4MDBceDAwXHgyN1x4MDBceDAzXHgwMFx4MDB1c2VyXHgw MGpzbWl0aFx4MDBkYXRhYmFzZVx4MDBwb3N0Z3Jlc1x4MDBceDAwIiwKKyAgICAgICAgICAgIGlk PSJhdXRvLXNlcmlhbGl6YXRpb24gb2YgZGljdCBwYXJhbWV0ZXJzIiwKKyAgICAgICAgKSwKKyAg ICBdLAorKQorZGVmIHRlc3RfU3RhcnR1cF9idWlsZChwYWNrZXQsIGV4cGVjdGVkX2J5dGVzKToK KyAgICBhY3R1YWwgPSBwcTMuU3RhcnR1cC5idWlsZChwYWNrZXQpCisgICAgYXNzZXJ0IGFjdHVh bCA9PSBleHBlY3RlZF9ieXRlcworCisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgKKyAgICAi cmF3LGV4cGVjdGVkLGV4dHJhIiwKKyAgICBbCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAg ICAgICAgIGIiKlx4MDBceDAwXHgwMFx4MDhhYmNkIiwKKyAgICAgICAgICAgIGRpY3QodHlwZT1i IioiLCBsZW49OCwgcGF5bG9hZD1iImFiY2QiKSwKKyAgICAgICAgICAgIGIiIiwKKyAgICAgICAg ICAgIGlkPSI0LWJ5dGUgcGF5bG9hZCIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJh bSgKKyAgICAgICAgICAgIGIiKlx4MDBceDAwXHgwMFx4MDQiLAorICAgICAgICAgICAgZGljdCh0 eXBlPWIiKiIsIGxlbj00LCBwYXlsb2FkPWIiIiksCisgICAgICAgICAgICBiIiIsCisgICAgICAg ICAgICBpZD0ibm8gcGF5bG9hZCIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgK KyAgICAgICAgICAgIGIiKlx4MDBceDAwXHgwMFx4MDV4YWJjZCIsCisgICAgICAgICAgICBkaWN0 KHR5cGU9YiIqIiwgbGVuPTUsIHBheWxvYWQ9YiJ4IiksCisgICAgICAgICAgICBiImFiY2QiLAor ICAgICAgICAgICAgaWQ9IjEtYnl0ZSBwYXlsb2FkIHdpdGggZXh0cmEgcGFkZGluZyIsCisgICAg ICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGIiUlx4MDBceDAwXHgw MFx4MDhceDAwXHgwMFx4MDBceDAwIiwKKyAgICAgICAgICAgIGRpY3QoCisgICAgICAgICAgICAg ICAgdHlwZT1wcTMudHlwZXMuQXV0aG5SZXF1ZXN0LAorICAgICAgICAgICAgICAgIGxlbj04LAor ICAgICAgICAgICAgICAgIHBheWxvYWQ9ZGljdCh0eXBlPXBxMy5hdXRobi5PSywgYm9keT1Ob25l KSwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBiIiIsCisgICAgICAgICAgICBpZD0iQXV0 aGVudGljYXRpb25PayIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAg ICAgICAgIGIiUlx4MDBceDAwXHgwMFx4MTJceDAwXHgwMFx4MDBceDBBRVhURVJOQUxceDAwXHgw MCIsCisgICAgICAgICAgICBkaWN0KAorICAgICAgICAgICAgICAgIHR5cGU9cHEzLnR5cGVzLkF1 dGhuUmVxdWVzdCwKKyAgICAgICAgICAgICAgICBsZW49MTgsCisgICAgICAgICAgICAgICAgcGF5 bG9hZD1kaWN0KHR5cGU9cHEzLmF1dGhuLlNBU0wsIGJvZHk9W2IiRVhURVJOQUwiLCBiIiJdKSwK KyAgICAgICAgICAgICksCisgICAgICAgICAgICBiIiIsCisgICAgICAgICAgICBpZD0iQXV0aGVu dGljYXRpb25TQVNMIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAg ICAgICAgYiJSXHgwMFx4MDBceDAwXHgwRFx4MDBceDAwXHgwMFx4MEIxMjM0NSIsCisgICAgICAg ICAgICBkaWN0KAorICAgICAgICAgICAgICAgIHR5cGU9cHEzLnR5cGVzLkF1dGhuUmVxdWVzdCwK KyAgICAgICAgICAgICAgICBsZW49MTMsCisgICAgICAgICAgICAgICAgcGF5bG9hZD1kaWN0KHR5 cGU9cHEzLmF1dGhuLlNBU0xDb250aW51ZSwgYm9keT1iIjEyMzQ1IiksCisgICAgICAgICAgICAp LAorICAgICAgICAgICAgYiIiLAorICAgICAgICAgICAgaWQ9IkF1dGhlbnRpY2F0aW9uU0FTTENv bnRpbnVlIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAg YiJSXHgwMFx4MDBceDAwXHgwRFx4MDBceDAwXHgwMFx4MEMxMjM0NSIsCisgICAgICAgICAgICBk aWN0KAorICAgICAgICAgICAgICAgIHR5cGU9cHEzLnR5cGVzLkF1dGhuUmVxdWVzdCwKKyAgICAg ICAgICAgICAgICBsZW49MTMsCisgICAgICAgICAgICAgICAgcGF5bG9hZD1kaWN0KHR5cGU9cHEz LmF1dGhuLlNBU0xGaW5hbCwgYm9keT1iIjEyMzQ1IiksCisgICAgICAgICAgICApLAorICAgICAg ICAgICAgYiIiLAorICAgICAgICAgICAgaWQ9IkF1dGhlbnRpY2F0aW9uU0FTTEZpbmFsIiwKKyAg ICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgYiJwXHgwMFx4MDBc eDAwXHgwQmh1bnRlcjIiLAorICAgICAgICAgICAgZGljdCgKKyAgICAgICAgICAgICAgICB0eXBl PXBxMy50eXBlcy5QYXNzd29yZE1lc3NhZ2UsCisgICAgICAgICAgICAgICAgbGVuPTExLAorICAg ICAgICAgICAgICAgIHBheWxvYWQ9YiJodW50ZXIyIiwKKyAgICAgICAgICAgICksCisgICAgICAg ICAgICBiIiIsCisgICAgICAgICAgICBpZD0iUGFzc3dvcmRNZXNzYWdlIiwKKyAgICAgICAgKSwK KyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgYiJLXHgwMFx4MDBceDAwXHgwQ1x4 MDBceDAwXHgwMFx4MDBceDEyXHgzNFx4NTZceDc4IiwKKyAgICAgICAgICAgIGRpY3QoCisgICAg ICAgICAgICAgICAgdHlwZT1wcTMudHlwZXMuQmFja2VuZEtleURhdGEsCisgICAgICAgICAgICAg ICAgbGVuPTEyLAorICAgICAgICAgICAgICAgIHBheWxvYWQ9ZGljdChwaWQ9MCwga2V5PTB4MTIz NDU2NzgpLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIGIiIiwKKyAgICAgICAgICAgIGlk PSJCYWNrZW5kS2V5RGF0YSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAg ICAgICAgICAgIGIiQ1x4MDBceDAwXHgwMFx4MDhTRVRceDAwIiwKKyAgICAgICAgICAgIGRpY3Qo CisgICAgICAgICAgICAgICAgdHlwZT1wcTMudHlwZXMuQ29tbWFuZENvbXBsZXRlLAorICAgICAg ICAgICAgICAgIGxlbj04LAorICAgICAgICAgICAgICAgIHBheWxvYWQ9ZGljdCh0YWc9YiJTRVQi KSwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBiIiIsCisgICAgICAgICAgICBpZD0iQ29t bWFuZENvbXBsZXRlIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAg ICAgICAgYiJFXHgwMFx4MDBceDAwXHgxMU1iYWQhXHgwME1kb2chXHgwMFx4MDAiLAorICAgICAg ICAgICAgZGljdCh0eXBlPWIiRSIsIGxlbj0xNywgcGF5bG9hZD1kaWN0KGZpZWxkcz1bYiJNYmFk ISIsIGIiTWRvZyEiLCBiIiJdKSksCisgICAgICAgICAgICBiIiIsCisgICAgICAgICAgICBpZD0i RXJyb3JSZXNwb25zZSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAg ICAgICAgIGIiU1x4MDBceDAwXHgwMFx4MDhhXHgwMGJceDAwIiwKKyAgICAgICAgICAgIGRpY3Qo CisgICAgICAgICAgICAgICAgdHlwZT1wcTMudHlwZXMuUGFyYW1ldGVyU3RhdHVzLAorICAgICAg ICAgICAgICAgIGxlbj04LAorICAgICAgICAgICAgICAgIHBheWxvYWQ9ZGljdChuYW1lPWIiYSIs IHZhbHVlPWIiYiIpLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIGIiIiwKKyAgICAgICAg ICAgIGlkPSJQYXJhbWV0ZXJTdGF0dXMiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFy YW0oCisgICAgICAgICAgICBiIlpceDAwXHgwMFx4MDBceDA1eCIsCisgICAgICAgICAgICBkaWN0 KHR5cGU9YiJaIiwgbGVuPTUsIHBheWxvYWQ9ZGljdChzdGF0dXM9YiJ4IikpLAorICAgICAgICAg ICAgYiIiLAorICAgICAgICAgICAgaWQ9IlJlYWR5Rm9yUXVlcnkiLAorICAgICAgICApLAorICAg ICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBiIlFceDAwXHgwMFx4MDBceDA2IVx4MDAi LAorICAgICAgICAgICAgZGljdCh0eXBlPXBxMy50eXBlcy5RdWVyeSwgbGVuPTYsIHBheWxvYWQ9 ZGljdChxdWVyeT1iIiEiKSksCisgICAgICAgICAgICBiIiIsCisgICAgICAgICAgICBpZD0iUXVl cnkiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBiIkRc eDAwXHgwMFx4MDBceDBCXHgwMFx4MDFceDAwXHgwMFx4MDBceDAxISIsCisgICAgICAgICAgICBk aWN0KHR5cGU9cHEzLnR5cGVzLkRhdGFSb3csIGxlbj0xMSwgcGF5bG9hZD1kaWN0KGNvbHVtbnM9 W2IiISJdKSksCisgICAgICAgICAgICBiIiIsCisgICAgICAgICAgICBpZD0iRGF0YVJvdyIsCisg ICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGIiRFx4MDBceDAw XHgwMFx4MDZceDAwXHgwMGV4dHJhIiwKKyAgICAgICAgICAgIGRpY3QodHlwZT1wcTMudHlwZXMu RGF0YVJvdywgbGVuPTYsIHBheWxvYWQ9ZGljdChjb2x1bW5zPVtdKSksCisgICAgICAgICAgICBi ImV4dHJhIiwKKyAgICAgICAgICAgIGlkPSJEYXRhUm93IHdpdGggZXh0cmEgZGF0YSIsCisgICAg ICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGIiSVx4MDBceDAwXHgw MFx4MDQiLAorICAgICAgICAgICAgZGljdCh0eXBlPXBxMy50eXBlcy5FbXB0eVF1ZXJ5UmVzcG9u c2UsIGxlbj00LCBwYXlsb2FkPU5vbmUpLAorICAgICAgICAgICAgYiIiLAorICAgICAgICAgICAg aWQ9IkVtcHR5UXVlcnlSZXNwb25zZSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJh bSgKKyAgICAgICAgICAgIGIiSVx4MDBceDAwXHgwMFx4MDRceEZGIiwKKyAgICAgICAgICAgIGRp Y3QodHlwZT1iIkkiLCBsZW49NCwgcGF5bG9hZD1Ob25lKSwKKyAgICAgICAgICAgIGIiXHhGRiIs CisgICAgICAgICAgICBpZD0iRW1wdHlRdWVyeVJlc3BvbnNlIHdpdGggZXh0cmEgYnl0ZXMiLAor ICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBiIlhceDAwXHgw MFx4MDBceDA0IiwKKyAgICAgICAgICAgIGRpY3QodHlwZT1wcTMudHlwZXMuVGVybWluYXRlLCBs ZW49NCwgcGF5bG9hZD1Ob25lKSwKKyAgICAgICAgICAgIGIiIiwKKyAgICAgICAgICAgIGlkPSJU ZXJtaW5hdGUiLAorICAgICAgICApLAorICAgIF0sCispCitkZWYgdGVzdF9QcTNfcGFyc2UocmF3 LCBleHBlY3RlZCwgZXh0cmEpOgorICAgIHdpdGggaW8uQnl0ZXNJTyhyYXcpIGFzIHN0cmVhbToK KyAgICAgICAgYWN0dWFsID0gcHEzLlBxMy5wYXJzZV9zdHJlYW0oc3RyZWFtKQorCisgICAgICAg IGFzc2VydCBhY3R1YWwgPT0gZXhwZWN0ZWQKKyAgICAgICAgYXNzZXJ0IHN0cmVhbS5yZWFkKCkg PT0gZXh0cmEKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoCisgICAgImZpZWxkcyxleHBl Y3RlZCIsCisgICAgWworICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBkaWN0KHR5 cGU9YiIqIiwgbGVuPTUpLAorICAgICAgICAgICAgYiIqXHgwMFx4MDBceDAwXHgwNVx4MDAiLAor ICAgICAgICAgICAgaWQ9InR5cGUgYW5kIGxlbiBzZXQgZXhwbGljaXRseSIsCisgICAgICAgICks CisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGRpY3QodHlwZT1iIioiKSwKKyAg ICAgICAgICAgIGIiKlx4MDBceDAwXHgwMFx4MDQiLAorICAgICAgICAgICAgaWQ9ImltcGxpZWQg bGVuIHdpdGggbm8gcGF5bG9hZCIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgK KyAgICAgICAgICAgIGRpY3QodHlwZT1iIioiLCBwYXlsb2FkPWIiMTIzNCIpLAorICAgICAgICAg ICAgYiIqXHgwMFx4MDBceDAwXHgwODEyMzQiLAorICAgICAgICAgICAgaWQ9ImltcGxpZWQgbGVu IHdpdGggcGF5bG9hZCIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAg ICAgICAgIGRpY3QodHlwZT1wcTMudHlwZXMuQXV0aG5SZXF1ZXN0LCBwYXlsb2FkPWRpY3QodHlw ZT1wcTMuYXV0aG4uT0spKSwKKyAgICAgICAgICAgIGIiUlx4MDBceDAwXHgwMFx4MDhceDAwXHgw MFx4MDBceDAwIiwKKyAgICAgICAgICAgIGlkPSJpbXBsaWVkIGxlbi90eXBlIGZvciBBdXRoZW50 aWNhdGlvbk9LIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAg ICAgZGljdCgKKyAgICAgICAgICAgICAgICB0eXBlPXBxMy50eXBlcy5BdXRoblJlcXVlc3QsCisg ICAgICAgICAgICAgICAgcGF5bG9hZD1kaWN0KAorICAgICAgICAgICAgICAgICAgICB0eXBlPXBx My5hdXRobi5TQVNMLAorICAgICAgICAgICAgICAgICAgICBib2R5PVtiIlNDUkFNLVNIQS0yNTYt UExVUyIsIGIiU0NSQU0tU0hBLTI1NiIsIGIiIl0sCisgICAgICAgICAgICAgICAgKSwKKyAgICAg ICAgICAgICksCisgICAgICAgICAgICBiIlJceDAwXHgwMFx4MDBceDJBXHgwMFx4MDBceDAwXHgw QVNDUkFNLVNIQS0yNTYtUExVU1x4MDBTQ1JBTS1TSEEtMjU2XHgwMFx4MDAiLAorICAgICAgICAg ICAgaWQ9ImltcGxpZWQgbGVuL3R5cGUgZm9yIEF1dGhlbnRpY2F0aW9uU0FTTCIsCisgICAgICAg ICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGRpY3QoCisgICAgICAgICAg ICAgICAgdHlwZT1wcTMudHlwZXMuQXV0aG5SZXF1ZXN0LAorICAgICAgICAgICAgICAgIHBheWxv YWQ9ZGljdCh0eXBlPXBxMy5hdXRobi5TQVNMQ29udGludWUsIGJvZHk9YiIxMjM0NSIpLAorICAg ICAgICAgICAgKSwKKyAgICAgICAgICAgIGIiUlx4MDBceDAwXHgwMFx4MERceDAwXHgwMFx4MDBc eDBCMTIzNDUiLAorICAgICAgICAgICAgaWQ9ImltcGxpZWQgbGVuL3R5cGUgZm9yIEF1dGhlbnRp Y2F0aW9uU0FTTENvbnRpbnVlIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAor ICAgICAgICAgICAgZGljdCgKKyAgICAgICAgICAgICAgICB0eXBlPXBxMy50eXBlcy5BdXRoblJl cXVlc3QsCisgICAgICAgICAgICAgICAgcGF5bG9hZD1kaWN0KHR5cGU9cHEzLmF1dGhuLlNBU0xG aW5hbCwgYm9keT1iIjEyMzQ1IiksCisgICAgICAgICAgICApLAorICAgICAgICAgICAgYiJSXHgw MFx4MDBceDAwXHgwRFx4MDBceDAwXHgwMFx4MEMxMjM0NSIsCisgICAgICAgICAgICBpZD0iaW1w bGllZCBsZW4vdHlwZSBmb3IgQXV0aGVudGljYXRpb25TQVNMRmluYWwiLAorICAgICAgICApLAor ICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBkaWN0KAorICAgICAgICAgICAgICAg IHR5cGU9cHEzLnR5cGVzLlBhc3N3b3JkTWVzc2FnZSwKKyAgICAgICAgICAgICAgICBwYXlsb2Fk PWIiaHVudGVyMiIsCisgICAgICAgICAgICApLAorICAgICAgICAgICAgYiJwXHgwMFx4MDBceDAw XHgwQmh1bnRlcjIiLAorICAgICAgICAgICAgaWQ9ImltcGxpZWQgbGVuL3R5cGUgZm9yIFBhc3N3 b3JkTWVzc2FnZSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAg ICAgIGRpY3QodHlwZT1wcTMudHlwZXMuQmFja2VuZEtleURhdGEsIHBheWxvYWQ9ZGljdChwaWQ9 MSwga2V5PTcpKSwKKyAgICAgICAgICAgIGIiS1x4MDBceDAwXHgwMFx4MENceDAwXHgwMFx4MDBc eDAxXHgwMFx4MDBceDAwXHgwNyIsCisgICAgICAgICAgICBpZD0iaW1wbGllZCBsZW4vdHlwZSBm b3IgQmFja2VuZEtleURhdGEiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisg ICAgICAgICAgICBkaWN0KHR5cGU9cHEzLnR5cGVzLkNvbW1hbmRDb21wbGV0ZSwgcGF5bG9hZD1k aWN0KHRhZz1iIlNFVCIpKSwKKyAgICAgICAgICAgIGIiQ1x4MDBceDAwXHgwMFx4MDhTRVRceDAw IiwKKyAgICAgICAgICAgIGlkPSJpbXBsaWVkIGxlbi90eXBlIGZvciBDb21tYW5kQ29tcGxldGUi LAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBkaWN0KHR5 cGU9cHEzLnR5cGVzLkVycm9yUmVzcG9uc2UsIHBheWxvYWQ9ZGljdChmaWVsZHM9W2IiZXJyb3Ii LCBiIiJdKSksCisgICAgICAgICAgICBiIkVceDAwXHgwMFx4MDBceDBCZXJyb3JceDAwXHgwMCIs CisgICAgICAgICAgICBpZD0iaW1wbGllZCBsZW4vdHlwZSBmb3IgRXJyb3JSZXNwb25zZSIsCisg ICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGRpY3QodHlwZT1w cTMudHlwZXMuUGFyYW1ldGVyU3RhdHVzLCBwYXlsb2FkPWRpY3QobmFtZT1iImEiLCB2YWx1ZT1i ImIiKSksCisgICAgICAgICAgICBiIlNceDAwXHgwMFx4MDBceDA4YVx4MDBiXHgwMCIsCisgICAg ICAgICAgICBpZD0iaW1wbGllZCBsZW4vdHlwZSBmb3IgUGFyYW1ldGVyU3RhdHVzIiwKKyAgICAg ICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgZGljdCh0eXBlPXBxMy50 eXBlcy5SZWFkeUZvclF1ZXJ5LCBwYXlsb2FkPWRpY3Qoc3RhdHVzPWIiSSIpKSwKKyAgICAgICAg ICAgIGIiWlx4MDBceDAwXHgwMFx4MDVJIiwKKyAgICAgICAgICAgIGlkPSJpbXBsaWVkIGxlbi90 eXBlIGZvciBSZWFkeUZvclF1ZXJ5IiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFt KAorICAgICAgICAgICAgZGljdCh0eXBlPXBxMy50eXBlcy5RdWVyeSwgcGF5bG9hZD1kaWN0KHF1 ZXJ5PWIiU0VMRUNUIDE7IikpLAorICAgICAgICAgICAgYiJRXHgwMFx4MDBceDAwXHgwZVNFTEVD VCAxO1x4MDAiLAorICAgICAgICAgICAgaWQ9ImltcGxpZWQgbGVuL3R5cGUgZm9yIFF1ZXJ5IiwK KyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgZGljdCh0eXBl PXBxMy50eXBlcy5EYXRhUm93LCBwYXlsb2FkPWRpY3QoY29sdW1ucz1bYiJhYmNkIl0pKSwKKyAg ICAgICAgICAgIGIiRFx4MDBceDAwXHgwMFx4MEVceDAwXHgwMVx4MDBceDAwXHgwMFx4MDRhYmNk IiwKKyAgICAgICAgICAgIGlkPSJpbXBsaWVkIGxlbi90eXBlIGZvciBEYXRhUm93IiwKKyAgICAg ICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgZGljdCh0eXBlPXBxMy50 eXBlcy5FbXB0eVF1ZXJ5UmVzcG9uc2UpLAorICAgICAgICAgICAgYiJJXHgwMFx4MDBceDAwXHgw NCIsCisgICAgICAgICAgICBpZD0iaW1wbGllZCBsZW4gZm9yIEVtcHR5UXVlcnlSZXNwb25zZSIs CisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGRpY3QodHlw ZT1wcTMudHlwZXMuVGVybWluYXRlKSwKKyAgICAgICAgICAgIGIiWFx4MDBceDAwXHgwMFx4MDQi LAorICAgICAgICAgICAgaWQ9ImltcGxpZWQgbGVuIGZvciBUZXJtaW5hdGUiLAorICAgICAgICAp LAorICAgIF0sCispCitkZWYgdGVzdF9QcTNfYnVpbGQoZmllbGRzLCBleHBlY3RlZCk6CisgICAg YWN0dWFsID0gcHEzLlBxMy5idWlsZChmaWVsZHMpCisgICAgYXNzZXJ0IGFjdHVhbCA9PSBleHBl Y3RlZAorCisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgKKyAgICAicmF3LGV4cGVjdGVkLGV4 dHJhIiwKKyAgICBbCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGIiXHgwMFx4 MDAiLAorICAgICAgICAgICAgZGljdChjb2x1bW5zPVtdKSwKKyAgICAgICAgICAgIGIiIiwKKyAg ICAgICAgICAgIGlkPSJubyBjb2x1bW5zIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBh cmFtKAorICAgICAgICAgICAgYiJceDAwXHgwMVx4MDBceDAwXHgwMFx4MDRhYmNkIiwKKyAgICAg ICAgICAgIGRpY3QoY29sdW1ucz1bYiJhYmNkIl0pLAorICAgICAgICAgICAgYiIiLAorICAgICAg ICAgICAgaWQ9Im9uZSBjb2x1bW4iLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0o CisgICAgICAgICAgICBiIlx4MDBceDAyXHgwMFx4MDBceDAwXHgwNGFiY2RceDAwXHgwMFx4MDBc eDAxeCIsCisgICAgICAgICAgICBkaWN0KGNvbHVtbnM9W2IiYWJjZCIsIGIieCJdKSwKKyAgICAg ICAgICAgIGIiIiwKKyAgICAgICAgICAgIGlkPSJtdWx0aXBsZSBjb2x1bW5zIiwKKyAgICAgICAg KSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgYiJceDAwXHgwMlx4MDBceDAw XHgwMFx4MDBceDAwXHgwMFx4MDBceDAxeCIsCisgICAgICAgICAgICBkaWN0KGNvbHVtbnM9W2Ii IiwgYiJ4Il0pLAorICAgICAgICAgICAgYiIiLAorICAgICAgICAgICAgaWQ9ImVtcHR5IGNvbHVt biB2YWx1ZSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAg IGIiXHgwMFx4MDJceEZGXHhGRlx4RkZceEZGXHhGRlx4RkZceEZGXHhGRiIsCisgICAgICAgICAg ICBkaWN0KGNvbHVtbnM9W05vbmUsIE5vbmVdKSwKKyAgICAgICAgICAgIGIiIiwKKyAgICAgICAg ICAgIGlkPSJudWxsIGNvbHVtbnMiLAorICAgICAgICApLAorICAgIF0sCispCitkZWYgdGVzdF9E YXRhUm93X3BhcnNlKHJhdywgZXhwZWN0ZWQsIGV4dHJhKToKKyAgICBwa3QgPSBiIkQiICsgc3Ry dWN0LnBhY2soIiFpIiwgbGVuKHJhdykgKyA0KSArIHJhdworICAgIHdpdGggaW8uQnl0ZXNJTyhw a3QpIGFzIHN0cmVhbToKKyAgICAgICAgYWN0dWFsID0gcHEzLlBxMy5wYXJzZV9zdHJlYW0oc3Ry ZWFtKQorCisgICAgICAgIGFzc2VydCBhY3R1YWwudHlwZSA9PSBwcTMudHlwZXMuRGF0YVJvdwor ICAgICAgICBhc3NlcnQgYWN0dWFsLnBheWxvYWQgPT0gZXhwZWN0ZWQKKyAgICAgICAgYXNzZXJ0 IHN0cmVhbS5yZWFkKCkgPT0gZXh0cmEKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoCisg ICAgImZpZWxkcyxleHBlY3RlZCIsCisgICAgWworICAgICAgICBweXRlc3QucGFyYW0oCisgICAg ICAgICAgICBkaWN0KCksCisgICAgICAgICAgICBiIlx4MDBceDAwIiwKKyAgICAgICAgICAgIGlk PSJubyBjb2x1bW5zIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAg ICAgICAgZGljdChjb2x1bW5zPVtOb25lLCBOb25lXSksCisgICAgICAgICAgICBiIlx4MDBceDAy XHhGRlx4RkZceEZGXHhGRlx4RkZceEZGXHhGRlx4RkYiLAorICAgICAgICAgICAgaWQ9Im51bGwg Y29sdW1ucyIsCisgICAgICAgICksCisgICAgXSwKKykKK2RlZiB0ZXN0X0RhdGFSb3dfYnVpbGQo ZmllbGRzLCBleHBlY3RlZCk6CisgICAgYWN0dWFsID0gcHEzLlBxMy5idWlsZChkaWN0KHR5cGU9 cHEzLnR5cGVzLkRhdGFSb3csIHBheWxvYWQ9ZmllbGRzKSkKKworICAgIGV4cGVjdGVkID0gYiJE IiArIHN0cnVjdC5wYWNrKCIhaSIsIGxlbihleHBlY3RlZCkgKyA0KSArIGV4cGVjdGVkCisgICAg YXNzZXJ0IGFjdHVhbCA9PSBleHBlY3RlZAorCisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgK KyAgICAicmF3LGV4cGVjdGVkLGV4Y2VwdGlvbiIsCisgICAgWworICAgICAgICBweXRlc3QucGFy YW0oCisgICAgICAgICAgICBiIkVYVEVSTkFMXHgwMFx4RkZceEZGXHhGRlx4RkYiLAorICAgICAg ICAgICAgZGljdChuYW1lPWIiRVhURVJOQUwiLCBsZW49LTEsIGRhdGE9Tm9uZSksCisgICAgICAg ICAgICBOb25lLAorICAgICAgICAgICAgaWQ9Im5vIGluaXRpYWwgcmVzcG9uc2UiLAorICAgICAg ICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBiIkVYVEVSTkFMXHgwMFx4 MDBceDAwXHgwMFx4MDJtZSIsCisgICAgICAgICAgICBkaWN0KG5hbWU9YiJFWFRFUk5BTCIsIGxl bj0yLCBkYXRhPWIibWUiKSwKKyAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICBpZD0iaW5p dGlhbCByZXNwb25zZSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAg ICAgICAgIGIiRVhURVJOQUxceDAwXHgwMFx4MDBceDAwXHgwMm1lZXh0cmEiLAorICAgICAgICAg ICAgTm9uZSwKKyAgICAgICAgICAgIFRlcm1pbmF0ZWRFcnJvciwKKyAgICAgICAgICAgIGlkPSJl eHRyYSBkYXRhIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAg ICAgYiJFWFRFUk5BTFx4MDBceDAwXHgwMFx4MDBceEZGbWUiLAorICAgICAgICAgICAgTm9uZSwK KyAgICAgICAgICAgIFN0cmVhbUVycm9yLAorICAgICAgICAgICAgaWQ9InVuZGVyZmxvdyIsCisg ICAgICAgICksCisgICAgXSwKKykKK2RlZiB0ZXN0X1NBU0xJbml0aWFsUmVzcG9uc2VfcGFyc2Uo cmF3LCBleHBlY3RlZCwgZXhjZXB0aW9uKToKKyAgICBjdHggPSBjb250ZXh0bGliLm51bGxjb250 ZXh0KCkKKyAgICBpZiBleGNlcHRpb246CisgICAgICAgIGN0eCA9IHB5dGVzdC5yYWlzZXMoZXhj ZXB0aW9uKQorCisgICAgd2l0aCBjdHg6CisgICAgICAgIGFjdHVhbCA9IHBxMy5TQVNMSW5pdGlh bFJlc3BvbnNlLnBhcnNlKHJhdykKKyAgICAgICAgYXNzZXJ0IGFjdHVhbCA9PSBleHBlY3RlZAor CisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgKKyAgICAiZmllbGRzLGV4cGVjdGVkIiwKKyAg ICBbCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGRpY3QobmFtZT1iIkVYVEVS TkFMIiksCisgICAgICAgICAgICBiIkVYVEVSTkFMXHgwMFx4RkZceEZGXHhGRlx4RkYiLAorICAg ICAgICAgICAgaWQ9Im5vIGluaXRpYWwgcmVzcG9uc2UiLAorICAgICAgICApLAorICAgICAgICBw eXRlc3QucGFyYW0oCisgICAgICAgICAgICBkaWN0KG5hbWU9YiJFWFRFUk5BTCIsIGRhdGE9Tm9u ZSksCisgICAgICAgICAgICBiIkVYVEVSTkFMXHgwMFx4RkZceEZGXHhGRlx4RkYiLAorICAgICAg ICAgICAgaWQ9Im5vIGluaXRpYWwgcmVzcG9uc2UgKGV4cGxpY2l0IE5vbmUpIiwKKyAgICAgICAg KSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgZGljdChuYW1lPWIiRVhURVJO QUwiLCBkYXRhPWIiIiksCisgICAgICAgICAgICBiIkVYVEVSTkFMXHgwMFx4MDBceDAwXHgwMFx4 MDAiLAorICAgICAgICAgICAgaWQ9ImVtcHR5IHJlc3BvbnNlIiwKKyAgICAgICAgKSwKKyAgICAg ICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgZGljdChuYW1lPWIiRVhURVJOQUwiLCBkYXRh PWIibWVAZXhhbXBsZS5jb20iKSwKKyAgICAgICAgICAgIGIiRVhURVJOQUxceDAwXHgwMFx4MDBc eDAwXHgwRW1lQGV4YW1wbGUuY29tIiwKKyAgICAgICAgICAgIGlkPSJpbml0aWFsIHJlc3BvbnNl IiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgZGljdChu YW1lPWIiRVhURVJOQUwiLCBsZW49MiwgZGF0YT1iIm1lQGV4YW1wbGUuY29tIiksCisgICAgICAg ICAgICBiIkVYVEVSTkFMXHgwMFx4MDBceDAwXHgwMFx4MDJtZUBleGFtcGxlLmNvbSIsCisgICAg ICAgICAgICBpZD0iZGF0YSBvdmVyZmxvdyIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5w YXJhbSgKKyAgICAgICAgICAgIGRpY3QobmFtZT1iIkVYVEVSTkFMIiwgbGVuPTE0LCBkYXRhPWIi bWUiKSwKKyAgICAgICAgICAgIGIiRVhURVJOQUxceDAwXHgwMFx4MDBceDAwXHgwRW1lIiwKKyAg ICAgICAgICAgIGlkPSJkYXRhIHVuZGVyZmxvdyIsCisgICAgICAgICksCisgICAgXSwKKykKK2Rl ZiB0ZXN0X1NBU0xJbml0aWFsUmVzcG9uc2VfYnVpbGQoZmllbGRzLCBleHBlY3RlZCk6CisgICAg YWN0dWFsID0gcHEzLlNBU0xJbml0aWFsUmVzcG9uc2UuYnVpbGQoZmllbGRzKQorICAgIGFzc2Vy dCBhY3R1YWwgPT0gZXhwZWN0ZWQKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoCisgICAg InZlcnNpb24sZXhwZWN0ZWRfYnl0ZXMiLAorICAgIFsKKyAgICAgICAgcHl0ZXN0LnBhcmFtKCgz LCAwKSwgYiJceDAwXHgwM1x4MDBceDAwIiwgaWQ9InZlcnNpb24gMyIpLAorICAgICAgICBweXRl c3QucGFyYW0oKDEyMzQsIDU2NzkpLCBiIlx4MDRceGQyXHgxNlx4MmYiLCBpZD0iU1NMUmVxdWVz dCIpLAorICAgIF0sCispCitkZWYgdGVzdF9wcm90b2NvbCh2ZXJzaW9uLCBleHBlY3RlZF9ieXRl cyk6CisgICAgIyBNYWtlIHN1cmUgdGhlIGludGVnZXIgcmV0dXJuZWQgYnkgcHJvdG9jb2wgaXMg Y29ycmVjdGx5IHNlcmlhbGl6ZWQgb24gdGhlCisgICAgIyB3aXJlLgorICAgIGFzc2VydCBzdHJ1 Y3QucGFjaygiIWkiLCBwcTMucHJvdG9jb2woKnZlcnNpb24pKSA9PSBleHBlY3RlZF9ieXRlcwor CisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgKKyAgICAiZW52dmFyLGZ1bmMsZXhwZWN0ZWQi LAorICAgIFsKKyAgICAgICAgKCJQR0hPU1QiLCBwcTMucGdob3N0LCAibG9jYWxob3N0IiksCisg ICAgICAgICgiUEdQT1JUIiwgcHEzLnBncG9ydCwgNTQzMiksCisgICAgICAgICgiUEdVU0VSIiwg cHEzLnBndXNlciwgZ2V0cGFzcy5nZXR1c2VyKCkpLAorICAgICAgICAoIlBHREFUQUJBU0UiLCBw cTMucGdkYXRhYmFzZSwgInBvc3RncmVzIiksCisgICAgXSwKKykKK2RlZiB0ZXN0X2Vudl9kZWZh dWx0cyhtb25rZXlwYXRjaCwgZW52dmFyLCBmdW5jLCBleHBlY3RlZCk6CisgICAgbW9ua2V5cGF0 Y2guZGVsZW52KGVudnZhciwgcmFpc2luZz1GYWxzZSkKKworICAgIGFjdHVhbCA9IGZ1bmMoKQor ICAgIGFzc2VydCBhY3R1YWwgPT0gZXhwZWN0ZWQKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJp emUoCisgICAgImVudnZhcnMsZnVuYyxleHBlY3RlZCIsCisgICAgWworICAgICAgICAoZGljdChQ R0hPU1Q9Im90aGVyaG9zdCIpLCBwcTMucGdob3N0LCAib3RoZXJob3N0IiksCisgICAgICAgIChk aWN0KFBHUE9SVD0iNjc4OSIpLCBwcTMucGdwb3J0LCA2Nzg5KSwKKyAgICAgICAgKGRpY3QoUEdV U0VSPSJwb3N0Z3JlcyIpLCBwcTMucGd1c2VyLCAicG9zdGdyZXMiKSwKKyAgICAgICAgKGRpY3Qo UEdEQVRBQkFTRT0idGVtcGxhdGUxIiksIHBxMy5wZ2RhdGFiYXNlLCAidGVtcGxhdGUxIiksCisg ICAgXSwKKykKK2RlZiB0ZXN0X2Vudihtb25rZXlwYXRjaCwgZW52dmFycywgZnVuYywgZXhwZWN0 ZWQpOgorICAgIGZvciBrLCB2IGluIGVudnZhcnMuaXRlbXMoKToKKyAgICAgICAgbW9ua2V5cGF0 Y2guc2V0ZW52KGssIHYpCisKKyAgICBhY3R1YWwgPSBmdW5jKCkKKyAgICBhc3NlcnQgYWN0dWFs ID09IGV4cGVjdGVkCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9weXRob24vdGxzLnB5IGIvc3JjL3Rl c3QvcHl0aG9uL3Rscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4w NzVjMDJjMWNhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcHl0aG9uL3Rscy5weQpAQCAt MCwwICsxLDE5NSBAQAorIworIyBDb3B5cmlnaHQgMjAyMSBWTXdhcmUsIEluYy4KKyMgU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IFBvc3RncmVTUUwKKyMKKworZnJvbSBjb25zdHJ1Y3QgaW1wb3J0 ICoKKworIworIyBUTFMgMS4zCisjCisjIE1vc3Qgb2YgdGhlIHR5cGVzIGJlbG93IGFyZSB0cmFu c2NyaWJlZCBmcm9tIFJGQyA4NDQ2OgorIworIyAgICAgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9o dG1sL3JmYzg0NDYKKyMKKworCitkZWYgX1ZlY3RvcihzaXplX2ZpZWxkLCBlbGVtZW50KToKKyAg ICByZXR1cm4gUHJlZml4ZWQoc2l6ZV9maWVsZCwgR3JlZWR5UmFuZ2UoZWxlbWVudCkpCisKKwor IyBBbGVydHMKKworQWxlcnRMZXZlbCA9IEVudW0oCisgICAgQnl0ZSwKKyAgICB3YXJuaW5nPTEs CisgICAgZmF0YWw9MiwKKykKKworQWxlcnREZXNjcmlwdGlvbiA9IEVudW0oCisgICAgQnl0ZSwK KyAgICBjbG9zZV9ub3RpZnk9MCwKKyAgICB1bmV4cGVjdGVkX21lc3NhZ2U9MTAsCisgICAgYmFk X3JlY29yZF9tYWM9MjAsCisgICAgZGVjcnlwdGlvbl9mYWlsZWRfUkVTRVJWRUQ9MjEsCisgICAg cmVjb3JkX292ZXJmbG93PTIyLAorICAgIGRlY29tcHJlc3Npb25fZmFpbHVyZT0zMCwKKyAgICBo YW5kc2hha2VfZmFpbHVyZT00MCwKKyAgICBub19jZXJ0aWZpY2F0ZV9SRVNFUlZFRD00MSwKKyAg ICBiYWRfY2VydGlmaWNhdGU9NDIsCisgICAgdW5zdXBwb3J0ZWRfY2VydGlmaWNhdGU9NDMsCisg ICAgY2VydGlmaWNhdGVfcmV2b2tlZD00NCwKKyAgICBjZXJ0aWZpY2F0ZV9leHBpcmVkPTQ1LAor ICAgIGNlcnRpZmljYXRlX3Vua25vd249NDYsCisgICAgaWxsZWdhbF9wYXJhbWV0ZXI9NDcsCisg ICAgdW5rbm93bl9jYT00OCwKKyAgICBhY2Nlc3NfZGVuaWVkPTQ5LAorICAgIGRlY29kZV9lcnJv cj01MCwKKyAgICBkZWNyeXB0X2Vycm9yPTUxLAorICAgIGV4cG9ydF9yZXN0cmljdGlvbl9SRVNF UlZFRD02MCwKKyAgICBwcm90b2NvbF92ZXJzaW9uPTcwLAorICAgIGluc3VmZmljaWVudF9zZWN1 cml0eT03MSwKKyAgICBpbnRlcm5hbF9lcnJvcj04MCwKKyAgICB1c2VyX2NhbmNlbGVkPTkwLAor ICAgIG5vX3JlbmVnb3RpYXRpb249MTAwLAorICAgIHVuc3VwcG9ydGVkX2V4dGVuc2lvbj0xMTAs CispCisKK0FsZXJ0ID0gU3RydWN0KAorICAgICJsZXZlbCIgLyBBbGVydExldmVsLAorICAgICJk ZXNjcmlwdGlvbiIgLyBBbGVydERlc2NyaXB0aW9uLAorKQorCisKKyMgRXh0ZW5zaW9ucworCitF eHRlbnNpb25UeXBlID0gRW51bSgKKyAgICBJbnQxNnViLAorICAgIHNlcnZlcl9uYW1lPTAsCisg ICAgbWF4X2ZyYWdtZW50X2xlbmd0aD0xLAorICAgIHN0YXR1c19yZXF1ZXN0PTUsCisgICAgc3Vw cG9ydGVkX2dyb3Vwcz0xMCwKKyAgICBzaWduYXR1cmVfYWxnb3JpdGhtcz0xMywKKyAgICB1c2Vf c3J0cD0xNCwKKyAgICBoZWFydGJlYXQ9MTUsCisgICAgYXBwbGljYXRpb25fbGF5ZXJfcHJvdG9j b2xfbmVnb3RpYXRpb249MTYsCisgICAgc2lnbmVkX2NlcnRpZmljYXRlX3RpbWVzdGFtcD0xOCwK KyAgICBjbGllbnRfY2VydGlmaWNhdGVfdHlwZT0xOSwKKyAgICBzZXJ2ZXJfY2VydGlmaWNhdGVf dHlwZT0yMCwKKyAgICBwYWRkaW5nPTIxLAorICAgIHByZV9zaGFyZWRfa2V5PTQxLAorICAgIGVh cmx5X2RhdGE9NDIsCisgICAgc3VwcG9ydGVkX3ZlcnNpb25zPTQzLAorICAgIGNvb2tpZT00NCwK KyAgICBwc2tfa2V5X2V4Y2hhbmdlX21vZGVzPTQ1LAorICAgIGNlcnRpZmljYXRlX2F1dGhvcml0 aWVzPTQ3LAorICAgIG9pZF9maWx0ZXJzPTQ4LAorICAgIHBvc3RfaGFuZHNoYWtlX2F1dGg9NDks CisgICAgc2lnbmF0dXJlX2FsZ29yaXRobXNfY2VydD01MCwKKyAgICBrZXlfc2hhcmU9NTEsCisp CisKK0V4dGVuc2lvbiA9IFN0cnVjdCgKKyAgICAiZXh0ZW5zaW9uX3R5cGUiIC8gRXh0ZW5zaW9u VHlwZSwKKyAgICAiZXh0ZW5zaW9uX2RhdGEiIC8gUHJlZml4ZWQoSW50MTZ1YiwgR3JlZWR5Qnl0 ZXMpLAorKQorCisKKyMgQ2xpZW50SGVsbG8KKworCitjbGFzcyBfQ2lwaGVyU3VpdGVBZGFwdGVy KEFkYXB0ZXIpOgorICAgIGNsYXNzIF9oZXh0dXBsZSh0dXBsZSk6CisgICAgICAgIGRlZiBfX3Jl cHJfXyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBmIigweHtzZWxmWzBdOjAyWH0sIDB4e3Nl bGZbMV06MDJYfSkiCisKKyAgICBkZWYgX2VuY29kZShzZWxmLCBvYmosIGNvbnRleHQsIHBhdGgp OgorICAgICAgICByZXR1cm4gYnl0ZXMob2JqKQorCisgICAgZGVmIF9kZWNvZGUoc2VsZiwgb2Jq LCBjb250ZXh0LCBwYXRoKToKKyAgICAgICAgYXNzZXJ0IGxlbihvYmopID09IDIKKyAgICAgICAg cmV0dXJuIHNlbGYuX2hleHR1cGxlKG9iaikKKworCitQcm90b2NvbFZlcnNpb24gPSBIZXgoSW50 MTZ1YikKKworUmFuZG9tID0gSGV4KEJ5dGVzKDMyKSkKKworQ2lwaGVyU3VpdGUgPSBfQ2lwaGVy U3VpdGVBZGFwdGVyKEJ5dGVbMl0pCisKK0NsaWVudEhlbGxvID0gU3RydWN0KAorICAgICJsZWdh Y3lfdmVyc2lvbiIgLyBQcm90b2NvbFZlcnNpb24sCisgICAgInJhbmRvbSIgLyBSYW5kb20sCisg ICAgImxlZ2FjeV9zZXNzaW9uX2lkIiAvIFByZWZpeGVkKEJ5dGUsIEhleChHcmVlZHlCeXRlcykp LAorICAgICJjaXBoZXJfc3VpdGVzIiAvIF9WZWN0b3IoSW50MTZ1YiwgQ2lwaGVyU3VpdGUpLAor ICAgICJsZWdhY3lfY29tcHJlc3Npb25fbWV0aG9kcyIgLyBQcmVmaXhlZChCeXRlLCBHcmVlZHlC eXRlcyksCisgICAgImV4dGVuc2lvbnMiIC8gX1ZlY3RvcihJbnQxNnViLCBFeHRlbnNpb24pLAor KQorCisjIFNlcnZlckhlbGxvCisKK1NlcnZlckhlbGxvID0gU3RydWN0KAorICAgICJsZWdhY3lf dmVyc2lvbiIgLyBQcm90b2NvbFZlcnNpb24sCisgICAgInJhbmRvbSIgLyBSYW5kb20sCisgICAg ImxlZ2FjeV9zZXNzaW9uX2lkX2VjaG8iIC8gUHJlZml4ZWQoQnl0ZSwgSGV4KEdyZWVkeUJ5dGVz KSksCisgICAgImNpcGhlcl9zdWl0ZSIgLyBDaXBoZXJTdWl0ZSwKKyAgICAibGVnYWN5X2NvbXBy ZXNzaW9uX21ldGhvZCIgLyBIZXgoQnl0ZSksCisgICAgImV4dGVuc2lvbnMiIC8gX1ZlY3RvcihJ bnQxNnViLCBFeHRlbnNpb24pLAorKQorCisjIEhhbmRzaGFrZQorCitIYW5kc2hha2VUeXBlID0g RW51bSgKKyAgICBCeXRlLAorICAgIGNsaWVudF9oZWxsbz0xLAorICAgIHNlcnZlcl9oZWxsbz0y LAorICAgIG5ld19zZXNzaW9uX3RpY2tldD00LAorICAgIGVuZF9vZl9lYXJseV9kYXRhPTUsCisg ICAgZW5jcnlwdGVkX2V4dGVuc2lvbnM9OCwKKyAgICBjZXJ0aWZpY2F0ZT0xMSwKKyAgICBjZXJ0 aWZpY2F0ZV9yZXF1ZXN0PTEzLAorICAgIGNlcnRpZmljYXRlX3ZlcmlmeT0xNSwKKyAgICBmaW5p c2hlZD0yMCwKKyAgICBrZXlfdXBkYXRlPTI0LAorICAgIG1lc3NhZ2VfaGFzaD0yNTQsCispCisK K0hhbmRzaGFrZSA9IFN0cnVjdCgKKyAgICAibXNnX3R5cGUiIC8gSGFuZHNoYWtlVHlwZSwKKyAg ICAibGVuZ3RoIiAvIEludDI0dWIsCisgICAgInBheWxvYWQiCisgICAgLyBTd2l0Y2goCisgICAg ICAgIHRoaXMubXNnX3R5cGUsCisgICAgICAgIHsKKyAgICAgICAgICAgIEhhbmRzaGFrZVR5cGUu Y2xpZW50X2hlbGxvOiBDbGllbnRIZWxsbywKKyAgICAgICAgICAgIEhhbmRzaGFrZVR5cGUuc2Vy dmVyX2hlbGxvOiBTZXJ2ZXJIZWxsbywKKyAgICAgICAgICAgICMgSGFuZHNoYWtlVHlwZS5lbmRf b2ZfZWFybHlfZGF0YTogRW5kT2ZFYXJseURhdGEsCisgICAgICAgICAgICAjIEhhbmRzaGFrZVR5 cGUuZW5jcnlwdGVkX2V4dGVuc2lvbnM6IEVuY3J5cHRlZEV4dGVuc2lvbnMsCisgICAgICAgICAg ICAjIEhhbmRzaGFrZVR5cGUuY2VydGlmaWNhdGVfcmVxdWVzdDogQ2VydGlmaWNhdGVSZXF1ZXN0 LAorICAgICAgICAgICAgIyBIYW5kc2hha2VUeXBlLmNlcnRpZmljYXRlOiBDZXJ0aWZpY2F0ZSwK KyAgICAgICAgICAgICMgSGFuZHNoYWtlVHlwZS5jZXJ0aWZpY2F0ZV92ZXJpZnk6IENlcnRpZmlj YXRlVmVyaWZ5LAorICAgICAgICAgICAgIyBIYW5kc2hha2VUeXBlLmZpbmlzaGVkOiBGaW5pc2hl ZCwKKyAgICAgICAgICAgICMgSGFuZHNoYWtlVHlwZS5uZXdfc2Vzc2lvbl90aWNrZXQ6IE5ld1Nl c3Npb25UaWNrZXQsCisgICAgICAgICAgICAjIEhhbmRzaGFrZVR5cGUua2V5X3VwZGF0ZTogS2V5 VXBkYXRlLAorICAgICAgICB9LAorICAgICAgICBkZWZhdWx0PUZpeGVkU2l6ZWQodGhpcy5sZW5n dGgsIEdyZWVkeUJ5dGVzKSwKKyAgICApLAorKQorCisjIFJlY29yZHMKKworQ29udGVudFR5cGUg PSBFbnVtKAorICAgIEJ5dGUsCisgICAgaW52YWxpZD0wLAorICAgIGNoYW5nZV9jaXBoZXJfc3Bl Yz0yMCwKKyAgICBhbGVydD0yMSwKKyAgICBoYW5kc2hha2U9MjIsCisgICAgYXBwbGljYXRpb25f ZGF0YT0yMywKKykKKworUGxhaW50ZXh0ID0gU3RydWN0KAorICAgICJ0eXBlIiAvIENvbnRlbnRU eXBlLAorICAgICJsZWdhY3lfcmVjb3JkX3ZlcnNpb24iIC8gUHJvdG9jb2xWZXJzaW9uLAorICAg ICJsZW5ndGgiIC8gSW50MTZ1YiwKKyAgICAiZnJhZ21lbnQiIC8gRml4ZWRTaXplZCh0aGlzLmxl bmd0aCwgR3JlZWR5Qnl0ZXMpLAorKQotLSAKMi4yNS4xCgo= --_011_4db7d3ea061f47a15fc6d865f53dd327ea2975fbcamelvmwarecom_ Content-Type: text/x-patch; name="v4-0010-contrib-oauth-switch-to-pluggable-auth-API.patch" Content-Description: v4-0010-contrib-oauth-switch-to-pluggable-auth-API.patch Content-Disposition: attachment; filename="v4-0010-contrib-oauth-switch-to-pluggable-auth-API.patch"; size=17490; creation-date="Sat, 26 Mar 2022 00:00:22 GMT"; modification-date="Sat, 26 Mar 2022 00:00:22 GMT" Content-ID: Content-Transfer-Encoding: base64 RnJvbSBmNTIwYzA4ZTFhZWU1MjM5MDUxZTMwNGM4YThmYWY1Y2IyNWJkYmYyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8cGNoYW1waW9uQHZtd2FyZS5jb20+ CkRhdGU6IEZyaSwgMjUgTWFyIDIwMjIgMTY6MzU6MzAgLTA3MDAKU3ViamVjdDogW1BBVENIIHY0 IDEwLzEwXSBjb250cmliL29hdXRoOiBzd2l0Y2ggdG8gcGx1Z2dhYmxlIGF1dGggQVBJCgpNb3Zl IHRoZSBjb3JlIHNlcnZlciBpbXBsZW1lbnRhdGlvbiB0byBjb250cmliL29hdXRoIGFzIGEgcGx1 Z2dhYmxlCnByb3ZpZGVyLCB1c2luZyB0aGUgUmVnaXN0ZXJBdXRoUHJvdmlkZXIoKSBBUEkuIG9h dXRoX3ZhbGlkYXRvcl9jb21tYW5kCmhhcyBiZWVuIG1vdmVkIGZyb20gY29yZSB0byBhIGN1c3Rv bSBHVUMuIEhCQSBvcHRpb25zIGFyZSBoYW5kbGVkCnVzaW5nIHRoZSBuZXcgaG9vay4gVGVzdHMg aGF2ZSBiZWVuIHVwZGF0ZWQgdG8gaGFuZGxlIHRoZSBuZXcKaW1wbGVtZW50YXRpb25zLgoKT25l IHNlcnZlciBtb2RpZmljYXRpb24gcmVtYWluczogYWxsb3dpbmcgY3VzdG9tIFNBU0wgbWVjaGFu aXNtcyB0bwpkZWNsYXJlIHRoZWlyIG93biBtYXhpbXVtIG1lc3NhZ2UgbGVuZ3RoLgoKVGhpcyBw YXRjaCBpcyBvcHRpb25hbDsgeW91IGNhbiBhcHBseS9yZXZlcnQgaXQgdG8gY29tcGFyZSB0aGUg dHdvCmFwcHJvYWNoZXMuCi0tLQogY29udHJpYi9vYXV0aC9NYWtlZmlsZSAgICAgICAgICAgICAg ICAgICAgICAgIHwgMTYgKysrKwogLi4uL2F1dGgtb2F1dGguYyA9PiBjb250cmliL29hdXRoL29h dXRoLmMgICAgIHwgODggKysrKysrKysrKysrKysrKy0tLQogc3JjL2JhY2tlbmQvbGlicHEvTWFr ZWZpbGUgICAgICAgICAgICAgICAgICAgIHwgIDEgLQogc3JjL2JhY2tlbmQvbGlicHEvYXV0aC5j ICAgICAgICAgICAgICAgICAgICAgIHwgIDcgLS0KIHNyYy9iYWNrZW5kL2xpYnBxL2hiYS5jICAg ICAgICAgICAgICAgICAgICAgICB8IDI3ICstLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9n dWMuYyAgICAgICAgICAgICAgICAgIHwgMTIgLS0tCiBzcmMvaW5jbHVkZS9saWJwcS9oYmEuaCAg ICAgICAgICAgICAgICAgICAgICAgfCAgNiArLQogc3JjL2luY2x1ZGUvbGlicHEvb2F1dGguaCAg ICAgICAgICAgICAgICAgICAgIHwgMjQgLS0tLS0KIHNyYy90ZXN0L3B5dGhvbi9SRUFETUUgICAg ICAgICAgICAgICAgICAgICAgICB8ICAzICstCiBzcmMvdGVzdC9weXRob24vc2VydmVyL3Rlc3Rf b2F1dGgucHkgICAgICAgICAgfCAyMCArKy0tLQogMTAgZmlsZXMgY2hhbmdlZCwgMTA0IGluc2Vy dGlvbnMoKyksIDEwMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL29h dXRoL01ha2VmaWxlCiByZW5hbWUgc3JjL2JhY2tlbmQvbGlicHEvYXV0aC1vYXV0aC5jID0+IGNv bnRyaWIvb2F1dGgvb2F1dGguYyAoOTAlKQogZGVsZXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRl L2xpYnBxL29hdXRoLmgKCmRpZmYgLS1naXQgYS9jb250cmliL29hdXRoL01ha2VmaWxlIGIvY29u dHJpYi9vYXV0aC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li44ODBiYzFmZWYzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9vYXV0aC9NYWtlZmlsZQpA QCAtMCwwICsxLDE2IEBACisjIGNvbnRyaWIvb2F1dGgvTWFrZWZpbGUKKworTU9EVUxFX2JpZyA9 IG9hdXRoCitPQkpTID0gb2F1dGgubworUEdGSUxFREVTQyA9ICJvYXV0aCAtIGF1dGggcHJvdmlk ZXIgc3VwcG9ydGluZyBPQXV0aCAyLjAvT0lEQyIKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NPTkZJ RyA9IHBnX2NvbmZpZworUEdYUyA6PSAkKHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitpbmNs dWRlICQoUEdYUykKK2Vsc2UKK3N1YmRpciA9IGNvbnRyaWIvb2F1dGgKK3RvcF9idWlsZGRpciA9 IC4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitpbmNs dWRlICQodG9wX3NyY2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5taworZW5kaWYKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGgtb2F1dGguYyBiL2NvbnRyaWIvb2F1dGgvb2F1 dGguYwpzaW1pbGFyaXR5IGluZGV4IDkwJQpyZW5hbWUgZnJvbSBzcmMvYmFja2VuZC9saWJwcS9h dXRoLW9hdXRoLmMKcmVuYW1lIHRvIGNvbnRyaWIvb2F1dGgvb2F1dGguYwppbmRleCBjMTIzMmEz MWEwLi5lODNmM2M1ZDk5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9saWJwcS9hdXRoLW9hdXRo LmMKKysrIGIvY29udHJpYi9vYXV0aC9vYXV0aC5jCkBAIC0xLDMzICsxLDM5IEBACi0vKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCi0gKiBhdXRoLW9hdXRoLmMKKyAq IG9hdXRoLmMKICAqCSAgU2VydmVyLXNpZGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNBU0wgT0FV VEhCRUFSRVIgbWVjaGFuaXNtLgogICoKICAqIFNlZSB0aGUgZm9sbG93aW5nIFJGQyBmb3IgbW9y ZSBkZXRhaWxzOgogICogLSBSRkMgNzYyODogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3Jm Yzc2MjgKICAqCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMSwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5 Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAogICogUG9ydGlvbnMg Q29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3Ju aWEKICAqCi0gKiBzcmMvYmFja2VuZC9saWJwcS9hdXRoLW9hdXRoLmMKKyAqIGNvbnRyaWIvb2F1 dGgvb2F1dGguYwogICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog ICovCisKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5j bHVkZSA8ZmNudGwuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9vYXV0aC1jb21tb24uaCIKKyNpbmNs dWRlICJmbWdyLmgiCiAjaW5jbHVkZSAibGliL3N0cmluZ2luZm8uaCIKICNpbmNsdWRlICJsaWJw cS9hdXRoLmgiCiAjaW5jbHVkZSAibGlicHEvaGJhLmgiCi0jaW5jbHVkZSAibGlicHEvb2F1dGgu aCIKICNpbmNsdWRlICJsaWJwcS9zYXNsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgorI2lu Y2x1ZGUgInV0aWxzL2d1Yy5oIgorCitQR19NT0RVTEVfTUFHSUM7CisKK3ZvaWQgX1BHX2luaXQo dm9pZCk7CiAKIC8qIEdVQyAqLwotY2hhciAqb2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQ7CitzdGF0 aWMgY2hhciAqb2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQ7CiAKIHN0YXRpYyB2b2lkICBvYXV0aF9n ZXRfbWVjaGFuaXNtcyhQb3J0ICpwb3J0LCBTdHJpbmdJbmZvIGJ1Zik7CiBzdGF0aWMgdm9pZCAq b2F1dGhfaW5pdChQb3J0ICpwb3J0LCBjb25zdCBjaGFyICpzZWxlY3RlZF9tZWNoLCBjb25zdCBj aGFyICpzaGFkb3dfcGFzcyk7CkBAIC0zNSw3ICs0MSw3IEBAIHN0YXRpYyBpbnQgICBvYXV0aF9l eGNoYW5nZSh2b2lkICpvcGFxLCBjb25zdCBjaGFyICppbnB1dCwgaW50IGlucHV0bGVuLAogCQkJ CQkJCWNoYXIgKipvdXRwdXQsIGludCAqb3V0cHV0bGVuLCBjb25zdCBjaGFyICoqbG9nZGV0YWls KTsKIAogLyogTWVjaGFuaXNtIGRlY2xhcmF0aW9uICovCi1jb25zdCBwZ19iZV9zYXNsX21lY2gg cGdfYmVfb2F1dGhfbWVjaCA9IHsKK3N0YXRpYyBjb25zdCBwZ19iZV9zYXNsX21lY2ggb2F1dGhf bWVjaCA9IHsKIAlvYXV0aF9nZXRfbWVjaGFuaXNtcywKIAlvYXV0aF9pbml0LAogCW9hdXRoX2V4 Y2hhbmdlLApAQCAtNTcsMTIgKzYzLDEzIEBAIHN0cnVjdCBvYXV0aF9jdHgKIAlQb3J0CSAgICpw b3J0OwogCWNvbnN0IGNoYXIgKmlzc3VlcjsKIAljb25zdCBjaGFyICpzY29wZTsKKwlib29sCQlz a2lwX3VzZXJtYXA7CiB9OwogCiBzdGF0aWMgY2hhciAqc2FuaXRpemVfY2hhcihjaGFyIGMpOwog c3RhdGljIGNoYXIgKnBhcnNlX2t2cGFpcnNfZm9yX2F1dGgoY2hhciAqKmlucHV0KTsKIHN0YXRp YyB2b2lkIGdlbmVyYXRlX2Vycm9yX3Jlc3BvbnNlKHN0cnVjdCBvYXV0aF9jdHggKmN0eCwgY2hh ciAqKm91dHB1dCwgaW50ICpvdXRwdXRsZW4pOwotc3RhdGljIGJvb2wgdmFsaWRhdGUoUG9ydCAq cG9ydCwgY29uc3QgY2hhciAqYXV0aCwgY29uc3QgY2hhciAqKmxvZ2RldGFpbCk7CitzdGF0aWMg Ym9vbCB2YWxpZGF0ZShzdHJ1Y3Qgb2F1dGhfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKmF1dGgsIGNv bnN0IGNoYXIgKipsb2dkZXRhaWwpOwogc3RhdGljIGJvb2wgcnVuX3ZhbGlkYXRvcl9jb21tYW5k KFBvcnQgKnBvcnQsIGNvbnN0IGNoYXIgKnRva2VuKTsKIHN0YXRpYyBib29sIGNoZWNrX2V4aXQo RklMRSAqKmZoLCBjb25zdCBjaGFyICpjb21tYW5kKTsKIHN0YXRpYyBib29sIHVuc2V0X2Nsb2V4 ZWMoaW50IGZkKTsKQEAgLTg0LDYgKzkxLDcgQEAgc3RhdGljIHZvaWQgKgogb2F1dGhfaW5pdChQ b3J0ICpwb3J0LCBjb25zdCBjaGFyICpzZWxlY3RlZF9tZWNoLCBjb25zdCBjaGFyICpzaGFkb3df cGFzcykKIHsKIAlzdHJ1Y3Qgb2F1dGhfY3R4ICpjdHg7CisJTGlzdENlbGwJICAgKmxjOwogCiAJ aWYgKHN0cmNtcChzZWxlY3RlZF9tZWNoLCBPQVVUSEJFQVJFUl9OQU1FKSkKIAkJZXJlcG9ydChF UlJPUiwKQEAgLTk2LDggKzEwNCwyMSBAQCBvYXV0aF9pbml0KFBvcnQgKnBvcnQsIGNvbnN0IGNo YXIgKnNlbGVjdGVkX21lY2gsIGNvbnN0IGNoYXIgKnNoYWRvd19wYXNzKQogCWN0eC0+cG9ydCA9 IHBvcnQ7CiAKIAlBc3NlcnQocG9ydC0+aGJhKTsKLQljdHgtPmlzc3VlciA9IHBvcnQtPmhiYS0+ b2F1dGhfaXNzdWVyOwotCWN0eC0+c2NvcGUgPSBwb3J0LT5oYmEtPm9hdXRoX3Njb3BlOworCisJ Zm9yZWFjaCAobGMsIHBvcnQtPmhiYS0+Y3VzdG9tX2F1dGhfb3B0aW9ucykKKwl7CisJCUN1c3Rv bU9wdGlvbiAqb3B0aW9uID0gbGZpcnN0KGxjKTsKKworCQlpZiAoc3RyY21wKG9wdGlvbi0+bmFt ZSwgImlzc3VlciIpID09IDApCisJCQljdHgtPmlzc3VlciA9IG9wdGlvbi0+dmFsdWU7CisJCWVs c2UgaWYgKHN0cmNtcChvcHRpb24tPm5hbWUsICJzY29wZSIpID09IDApCisJCQljdHgtPnNjb3Bl ID0gb3B0aW9uLT52YWx1ZTsKKwkJZWxzZSBpZiAoc3RyY21wKG9wdGlvbi0+bmFtZSwgInRydXN0 X3ZhbGlkYXRvcl9hdXRoeiIpID09IDApCisJCXsKKwkJCWlmIChzdHJjbXAob3B0aW9uLT52YWx1 ZSwgIjEiKSA9PSAwKQorCQkJCWN0eC0+c2tpcF91c2VybWFwID0gdHJ1ZTsKKwkJfQorCX0KIAog CXJldHVybiBjdHg7CiB9CkBAIC0yNDgsNyArMjY5LDcgQEAgb2F1dGhfZXhjaGFuZ2Uodm9pZCAq b3BhcSwgY29uc3QgY2hhciAqaW5wdXQsIGludCBpbnB1dGxlbiwKIAkJCQkgZXJybXNnKCJtYWxm b3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIpLAogCQkJCSBlcnJkZXRhaWwoIk1lc3NhZ2UgY29u dGFpbnMgYWRkaXRpb25hbCBkYXRhIGFmdGVyIHRoZSBmaW5hbCB0ZXJtaW5hdG9yLiIpKSk7CiAK LQlpZiAoIXZhbGlkYXRlKGN0eC0+cG9ydCwgYXV0aCwgbG9nZGV0YWlsKSkKKwlpZiAoIXZhbGlk YXRlKGN0eCwgYXV0aCwgbG9nZGV0YWlsKSkKIAl7CiAJCWdlbmVyYXRlX2Vycm9yX3Jlc3BvbnNl KGN0eCwgb3V0cHV0LCBvdXRwdXRsZW4pOwogCkBAIC00MTUsMTIgKzQzNiwxMyBAQCBnZW5lcmF0 ZV9lcnJvcl9yZXNwb25zZShzdHJ1Y3Qgb2F1dGhfY3R4ICpjdHgsIGNoYXIgKipvdXRwdXQsIGlu dCAqb3V0cHV0bGVuKQogfQogCiBzdGF0aWMgYm9vbAotdmFsaWRhdGUoUG9ydCAqcG9ydCwgY29u c3QgY2hhciAqYXV0aCwgY29uc3QgY2hhciAqKmxvZ2RldGFpbCkKK3ZhbGlkYXRlKHN0cnVjdCBv YXV0aF9jdHggKmN0eCwgY29uc3QgY2hhciAqYXV0aCwgY29uc3QgY2hhciAqKmxvZ2RldGFpbCkK IHsKIAlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGI2NF9zZXQgPSAiYWJjZGVmZ2hpamtsbW5v cHFyc3R1dnd4eXoiCiAJCQkJCQkJCQkJIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgogCQkJ CQkJCQkJCSIwMTIzNDU2Nzg5LS5ffisvIjsKIAorCVBvcnQJICAgKnBvcnQgPSBjdHgtPnBvcnQ7 CiAJY29uc3QgY2hhciAqdG9rZW47CiAJc2l6ZV90CQlzcGFuOwogCWludAkJCXJldDsKQEAgLTQ5 Nyw3ICs1MTksNyBAQCB2YWxpZGF0ZShQb3J0ICpwb3J0LCBjb25zdCBjaGFyICphdXRoLCBjb25z dCBjaGFyICoqbG9nZGV0YWlsKQogCWlmICghcnVuX3ZhbGlkYXRvcl9jb21tYW5kKHBvcnQsIHRv a2VuKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKHBvcnQtPmhiYS0+b2F1dGhfc2tpcF91c2Vy bWFwKQorCWlmIChjdHgtPnNraXBfdXNlcm1hcCkKIAl7CiAJCS8qCiAJCSAqIElmIHRoZSB2YWxp ZGF0b3IgaXMgb3VyIGF1dGhvcml6YXRpb24gYXV0aG9yaXR5LCB3ZSdyZSBkb25lLgpAQCAtNzk1 LDMgKzgxNyw0MSBAQCB1c2VybmFtZV9va19mb3Jfc2hlbGwoY29uc3QgY2hhciAqdXNlcm5hbWUp CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KKworc3RhdGljIGludCBDaGVja09BdXRoKFBvcnQgKnBvcnQp Cit7CisJcmV0dXJuIENoZWNrU0FTTEF1dGgoJm9hdXRoX21lY2gsIHBvcnQsIE5VTEwsIE5VTEwp OworfQorCitzdGF0aWMgY29uc3QgY2hhciAqT0F1dGhFcnJvcihQb3J0ICpwb3J0KQoreworCXJl dHVybiBwc3ByaW50ZigiT0F1dGggYmVhcmVyIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCBmb3IgdXNl ciBcIiVzXCIiLAorCQkJCQlwb3J0LT51c2VyX25hbWUpOworfQorCitzdGF0aWMgYm9vbCBPQXV0 aENoZWNrT3B0aW9uKGNoYXIgKm5hbWUsIGNoYXIgKnZhbCwKKwkJCQkJCQkgc3RydWN0IEhiYUxp bmUgKmhiYWxpbmUsIGNoYXIgKiplcnJtc2cpCit7CisJaWYgKCFzdHJjbXAobmFtZSwgImlzc3Vl ciIpKQorCQlyZXR1cm4gdHJ1ZTsKKwlpZiAoIXN0cmNtcChuYW1lLCAic2NvcGUiKSkKKwkJcmV0 dXJuIHRydWU7CisJaWYgKCFzdHJjbXAobmFtZSwgInRydXN0X3ZhbGlkYXRvcl9hdXRoeiIpKQor CQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKwordm9pZAorX1BHX2luaXQodm9p ZCkKK3sKKwlSZWdpc3RlckF1dGhQcm92aWRlcigib2F1dGgiLCBDaGVja09BdXRoLCBPQXV0aEVy cm9yLCBPQXV0aENoZWNrT3B0aW9uKTsKKworCURlZmluZUN1c3RvbVN0cmluZ1ZhcmlhYmxlKCJv YXV0aC52YWxpZGF0b3JfY29tbWFuZCIsCisJCQkJCQkJICAgZ2V0dGV4dF9ub29wKCJDb21tYW5k IHRvIHZhbGlkYXRlIE9BdXRoIHYyIGJlYXJlciB0b2tlbnMuIiksCisJCQkJCQkJICAgTlVMTCwK KwkJCQkJCQkgICAmb2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQsCisJCQkJCQkJICAgIiIsCisJCQkJ CQkJICAgUEdDX1NJR0hVUCwgR1VDX1NVUEVSVVNFUl9PTkxZLAorCQkJCQkJCSAgIE5VTEwsIE5V TEwsIE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbGlicHEvTWFrZWZpbGUgYi9z cmMvYmFja2VuZC9saWJwcS9NYWtlZmlsZQppbmRleCA5OGViMmE4MjQyLi42ZDM4NWZkNmE0IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9saWJwcS9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9s aWJwcS9NYWtlZmlsZQpAQCAtMTUsNyArMTUsNiBAQCBpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9z cmMvTWFrZWZpbGUuZ2xvYmFsCiAjIGJlLWZzc3R1YnMgaXMgaGVyZSBmb3IgaGlzdG9yaWNhbCBy ZWFzb25zLCBwcm9iYWJseSBiZWxvbmdzIGVsc2V3aGVyZQogCiBPQkpTID0gXAotCWF1dGgtb2F1 dGgubyBcCiAJYXV0aC1zYXNsLm8gXAogCWF1dGgtc2NyYW0ubyBcCiAJYXV0aC5vIFwKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGguYyBiL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGgu YwppbmRleCAxNzA0MmQ4NGFkLi40YThhNjM5MjJhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9s aWJwcS9hdXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvbGlicHEvYXV0aC5jCkBAIC0zMCw3ICszMCw2 IEBACiAjaW5jbHVkZSAibGlicHEvYXV0aC5oIgogI2luY2x1ZGUgImxpYnBxL2NyeXB0LmgiCiAj aW5jbHVkZSAibGlicHEvbGlicHEuaCIKLSNpbmNsdWRlICJsaWJwcS9vYXV0aC5oIgogI2luY2x1 ZGUgImxpYnBxL3BxZm9ybWF0LmgiCiAjaW5jbHVkZSAibGlicHEvc2FzbC5oIgogI2luY2x1ZGUg ImxpYnBxL3NjcmFtLmgiCkBAIC0yOTksOSArMjk4LDYgQEAgYXV0aF9mYWlsZWQoUG9ydCAqcG9y dCwgaW50IHN0YXR1cywgY29uc3QgY2hhciAqbG9nZGV0YWlsKQogCQljYXNlIHVhUkFESVVTOgog CQkJZXJyc3RyID0gZ2V0dGV4dF9ub29wKCJSQURJVVMgYXV0aGVudGljYXRpb24gZmFpbGVkIGZv ciB1c2VyIFwiJXNcIiIpOwogCQkJYnJlYWs7Ci0JCWNhc2UgdWFPQXV0aDoKLQkJCWVycnN0ciA9 IGdldHRleHRfbm9vcCgiT0F1dGggYmVhcmVyIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCBmb3IgdXNl ciBcIiVzXCIiKTsKLQkJCWJyZWFrOwogCQljYXNlIHVhQ3VzdG9tOgogCQkJewogCQkJCUN1c3Rv bUF1dGhQcm92aWRlciAqcHJvdmlkZXIgPSBnZXRfcHJvdmlkZXJfYnlfbmFtZShwb3J0LT5oYmEt PmN1c3RvbV9wcm92aWRlcik7CkBAIC02MzAsOSArNjI2LDYgQEAgQ2xpZW50QXV0aGVudGljYXRp b24oUG9ydCAqcG9ydCkKIAkJY2FzZSB1YVRydXN0OgogCQkJc3RhdHVzID0gU1RBVFVTX09LOwog CQkJYnJlYWs7Ci0JCWNhc2UgdWFPQXV0aDoKLQkJCXN0YXR1cyA9IENoZWNrU0FTTEF1dGgoJnBn X2JlX29hdXRoX21lY2gsIHBvcnQsIE5VTEwsIE5VTEwpOwotCQkJYnJlYWs7CiAJCWNhc2UgdWFD dXN0b206CiAJCQl7CiAJCQkJQ3VzdG9tQXV0aFByb3ZpZGVyICpwcm92aWRlciA9IGdldF9wcm92 aWRlcl9ieV9uYW1lKHBvcnQtPmhiYS0+Y3VzdG9tX3Byb3ZpZGVyKTsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2xpYnBxL2hiYS5jIGIvc3JjL2JhY2tlbmQvbGlicHEvaGJhLmMKaW5kZXggY2Qz YjFjYzE0MC4uNmJmOTg2ZDViMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbGlicHEvaGJhLmMK KysrIGIvc3JjL2JhY2tlbmQvbGlicHEvaGJhLmMKQEAgLTEzNyw3ICsxMzcsNiBAQCBzdGF0aWMg Y29uc3QgY2hhciAqY29uc3QgVXNlckF1dGhOYW1lW10gPQogCSJyYWRpdXMiLAogCSJjdXN0b20i LAogCSJwZWVyIiwKLQkib2F1dGgiLAogfTsKIAogCkBAIC0xNDAyLDggKzE0MDEsNiBAQCBwYXJz ZV9oYmFfbGluZShUb2tlbml6ZWRMaW5lICp0b2tfbGluZSwgaW50IGVsZXZlbCkKICNlbmRpZgog CWVsc2UgaWYgKHN0cmNtcCh0b2tlbi0+c3RyaW5nLCAicmFkaXVzIikgPT0gMCkKIAkJcGFyc2Vk bGluZS0+YXV0aF9tZXRob2QgPSB1YVJBRElVUzsKLQllbHNlIGlmIChzdHJjbXAodG9rZW4tPnN0 cmluZywgIm9hdXRoIikgPT0gMCkKLQkJcGFyc2VkbGluZS0+YXV0aF9tZXRob2QgPSB1YU9BdXRo OwogCWVsc2UgaWYgKHN0cmNtcCh0b2tlbi0+c3RyaW5nLCAiY3VzdG9tIikgPT0gMCkKIAkJcGFy c2VkbGluZS0+YXV0aF9tZXRob2QgPSB1YUN1c3RvbTsKIAllbHNlCkBAIC0xNzMzLDkgKzE3MzAs OCBAQCBwYXJzZV9oYmFfYXV0aF9vcHQoY2hhciAqbmFtZSwgY2hhciAqdmFsLCBIYmFMaW5lICpo YmFsaW5lLAogCQkJaGJhbGluZS0+YXV0aF9tZXRob2QgIT0gdWFHU1MgJiYKIAkJCWhiYWxpbmUt PmF1dGhfbWV0aG9kICE9IHVhU1NQSSAmJgogCQkJaGJhbGluZS0+YXV0aF9tZXRob2QgIT0gdWFD ZXJ0ICYmCi0JCQloYmFsaW5lLT5hdXRoX21ldGhvZCAhPSB1YU9BdXRoICYmCiAJCQloYmFsaW5l LT5hdXRoX21ldGhvZCAhPSB1YUN1c3RvbSkKLQkJCUlOVkFMSURfQVVUSF9PUFRJT04oIm1hcCIs IGdldHRleHRfbm9vcCgiaWRlbnQsIHBlZXIsIGdzc2FwaSwgc3NwaSwgY2VydCwgb2F1dGgsIGFu ZCBjdXN0b20iKSk7CisJCQlJTlZBTElEX0FVVEhfT1BUSU9OKCJtYXAiLCBnZXR0ZXh0X25vb3Ao ImlkZW50LCBwZWVyLCBnc3NhcGksIHNzcGksIGNlcnQsIGFuZCBjdXN0b20iKSk7CiAJCWhiYWxp bmUtPnVzZXJtYXAgPSBwc3RyZHVwKHZhbCk7CiAJfQogCWVsc2UgaWYgKHN0cmNtcChuYW1lLCAi Y2xpZW50Y2VydCIpID09IDApCkBAIC0yMTE5LDI3ICsyMTE1LDYgQEAgcGFyc2VfaGJhX2F1dGhf b3B0KGNoYXIgKm5hbWUsIGNoYXIgKnZhbCwgSGJhTGluZSAqaGJhbGluZSwKIAkJaGJhbGluZS0+ cmFkaXVzaWRlbnRpZmllcnMgPSBwYXJzZWRfaWRlbnRpZmllcnM7CiAJCWhiYWxpbmUtPnJhZGl1 c2lkZW50aWZpZXJzX3MgPSBwc3RyZHVwKHZhbCk7CiAJfQotCWVsc2UgaWYgKHN0cmNtcChuYW1l LCAiaXNzdWVyIikgPT0gMCkKLQl7Ci0JCWlmIChoYmFsaW5lLT5hdXRoX21ldGhvZCAhPSB1YU9B dXRoKQotCQkJSU5WQUxJRF9BVVRIX09QVElPTigiaXNzdWVyIiwgZ2V0dGV4dF9ub29wKCJvYXV0 aCIpKTsKLQkJaGJhbGluZS0+b2F1dGhfaXNzdWVyID0gcHN0cmR1cCh2YWwpOwotCX0KLQllbHNl IGlmIChzdHJjbXAobmFtZSwgInNjb3BlIikgPT0gMCkKLQl7Ci0JCWlmIChoYmFsaW5lLT5hdXRo X21ldGhvZCAhPSB1YU9BdXRoKQotCQkJSU5WQUxJRF9BVVRIX09QVElPTigic2NvcGUiLCBnZXR0 ZXh0X25vb3AoIm9hdXRoIikpOwotCQloYmFsaW5lLT5vYXV0aF9zY29wZSA9IHBzdHJkdXAodmFs KTsKLQl9Ci0JZWxzZSBpZiAoc3RyY21wKG5hbWUsICJ0cnVzdF92YWxpZGF0b3JfYXV0aHoiKSA9 PSAwKQotCXsKLQkJaWYgKGhiYWxpbmUtPmF1dGhfbWV0aG9kICE9IHVhT0F1dGgpCi0JCQlJTlZB TElEX0FVVEhfT1BUSU9OKCJ0cnVzdF92YWxpZGF0b3JfYXV0aHoiLCBnZXR0ZXh0X25vb3AoIm9h dXRoIikpOwotCQlpZiAoc3RyY21wKHZhbCwgIjEiKSA9PSAwKQotCQkJaGJhbGluZS0+b2F1dGhf c2tpcF91c2VybWFwID0gdHJ1ZTsKLQkJZWxzZQotCQkJaGJhbGluZS0+b2F1dGhfc2tpcF91c2Vy bWFwID0gZmFsc2U7Ci0JfQogCWVsc2UgaWYgKHN0cmNtcChuYW1lLCAicHJvdmlkZXIiKSA9PSAw KQogCXsKIAkJUkVRVUlSRV9BVVRIX09QVElPTih1YUN1c3RvbSwgInByb3ZpZGVyIiwgImN1c3Rv bSIpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvZ3VjLmMKaW5kZXggOWE1YjJhYTQ5Ni4uZjcwZjdmNWMwMSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYworKysgYi9zcmMvYmFja2VuZC91dGls cy9taXNjL2d1Yy5jCkBAIC01OSw3ICs1OSw2IEBACiAjaW5jbHVkZSAibGlicHEvYXV0aC5oIgog I2luY2x1ZGUgImxpYnBxL2xpYnBxLmgiCiAjaW5jbHVkZSAibGlicHEvcHFmb3JtYXQuaCIKLSNp bmNsdWRlICJsaWJwcS9vYXV0aC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUg Im9wdGltaXplci9jb3N0LmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL2dlcW8uaCIKQEAgLTQ2Njcs MTcgKzQ2NjYsNiBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ19zdHJpbmcgQ29uZmlndXJlTmFtZXNT dHJpbmdbXSA9CiAJCWNoZWNrX2JhY2t0cmFjZV9mdW5jdGlvbnMsIGFzc2lnbl9iYWNrdHJhY2Vf ZnVuY3Rpb25zLCBOVUxMCiAJfSwKIAotCXsKLQkJeyJvYXV0aF92YWxpZGF0b3JfY29tbWFuZCIs IFBHQ19TSUdIVVAsIENPTk5fQVVUSF9BVVRILAotCQkJZ2V0dGV4dF9ub29wKCJDb21tYW5kIHRv IHZhbGlkYXRlIE9BdXRoIHYyIGJlYXJlciB0b2tlbnMuIiksCi0JCQlOVUxMLAotCQkJR1VDX1NV UEVSVVNFUl9PTkxZCi0JCX0sCi0JCSZvYXV0aF92YWxpZGF0b3JfY29tbWFuZCwKLQkJIiIsCi0J CU5VTEwsIE5VTEwsIE5VTEwKLQl9LAotCiAJLyogRW5kLW9mLWxpc3QgbWFya2VyICovCiAJewog CQl7TlVMTCwgMCwgMCwgTlVMTCwgTlVMTH0sIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2xpYnBxL2hiYS5oIGIvc3JjL2luY2x1ZGUvbGlicHEv aGJhLmgKaW5kZXggZTQwNTEwM2EyZS4uYmJjOTQzNjNjYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvbGlicHEvaGJhLmgKKysrIGIvc3JjL2luY2x1ZGUvbGlicHEvaGJhLmgKQEAgLTQwLDggKzQw LDcgQEAgdHlwZWRlZiBlbnVtIFVzZXJBdXRoCiAJdWFSQURJVVMsCiAJdWFDdXN0b20sCiAJdWFQ ZWVyLAotCXVhT0F1dGgKLSNkZWZpbmUgVVNFUl9BVVRIX0xBU1QgdWFPQXV0aAkvKiBNdXN0IGJl IGxhc3QgdmFsdWUgb2YgdGhpcyBlbnVtICovCisjZGVmaW5lIFVTRVJfQVVUSF9MQVNUIHVhUGVl cgkvKiBNdXN0IGJlIGxhc3QgdmFsdWUgb2YgdGhpcyBlbnVtICovCiB9IFVzZXJBdXRoOwogCiAv KgpAQCAtMTI5LDkgKzEyOCw2IEBAIHR5cGVkZWYgc3RydWN0IEhiYUxpbmUKIAljaGFyCSAgICpy YWRpdXNpZGVudGlmaWVyc19zOwogCUxpc3QJICAgKnJhZGl1c3BvcnRzOwogCWNoYXIJICAgKnJh ZGl1c3BvcnRzX3M7Ci0JY2hhcgkgICAqb2F1dGhfaXNzdWVyOwotCWNoYXIJICAgKm9hdXRoX3Nj b3BlOwotCWJvb2wJCW9hdXRoX3NraXBfdXNlcm1hcDsKIAljaGFyCSAgICpjdXN0b21fcHJvdmlk ZXI7CiAJTGlzdAkgICAqY3VzdG9tX2F1dGhfb3B0aW9uczsKIH0gSGJhTGluZTsKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2xpYnBxL29hdXRoLmggYi9zcmMvaW5jbHVkZS9saWJwcS9vYXV0aC5o CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzBlNDI2YWYxLi4wMDAwMDAwMDAwCi0t LSBhL3NyYy9pbmNsdWRlL2xpYnBxL29hdXRoLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCww IEBACi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKiBvYXV0aC5oCi0gKgkgIEludGVyZmFjZSB0 byBsaWJwcS9hdXRoLW9hdXRoLmMKLSAqCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYt MjAyMSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKLSAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlh Ci0gKgotICogc3JjL2luY2x1ZGUvbGlicHEvb2F1dGguaAotICoKLSAqLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQotICovCi0jaWZuZGVmIFBHX09BVVRIX0gKLSNkZWZpbmUgUEdfT0FVVEhfSAotCi0jaW5jbHVk ZSAibGlicHEvbGlicHEtYmUuaCIKLSNpbmNsdWRlICJsaWJwcS9zYXNsLmgiCi0KLWV4dGVybiBj aGFyICpvYXV0aF92YWxpZGF0b3JfY29tbWFuZDsKLQotLyogSW1wbGVtZW50YXRpb24gKi8KLWV4 dGVybiBjb25zdCBwZ19iZV9zYXNsX21lY2ggcGdfYmVfb2F1dGhfbWVjaDsKLQotI2VuZGlmIC8q IFBHX09BVVRIX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3B5dGhvbi9SRUFETUUgYi9zcmMv dGVzdC9weXRob24vUkVBRE1FCmluZGV4IDBiZGE1ODJjNGIuLjBmYmMxMDQ2Y2YgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3B5dGhvbi9SRUFETUUKKysrIGIvc3JjL3Rlc3QvcHl0aG9uL1JFQURNRQpA QCAtMTMsNyArMTMsOCBAQCBidXQgeW91IGNhbiBhZGp1c3QgYXMgbmVlZGVkIGZvciB5b3VyIHNl dHVwLgogCiAjIyBSZXF1aXJlbWVudHMKIAotQSBzdXBwb3J0ZWQgdmVyc2lvbiAoMy42Kykgb2Yg UHl0aG9uLgorLSBBIHN1cHBvcnRlZCB2ZXJzaW9uICgzLjYrKSBvZiBQeXRob24uCistIFRoZSBv YXV0aCBleHRlbnNpb24gbXVzdCBiZSBpbnN0YWxsZWQgYW5kIGxvYWRlZCB2aWEgc2hhcmVkX3By ZWxvYWRfbGlicmFyaWVzLgogCiBUaGUgZmlyc3QgcnVuIG9mCiAKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3B5dGhvbi9zZXJ2ZXIvdGVzdF9vYXV0aC5weSBiL3NyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIv dGVzdF9vYXV0aC5weQppbmRleCBjYjVjYTdmYTIzLi4wN2ZjMjVlZGMyIDEwMDY0NAotLS0gYS9z cmMvdGVzdC9weXRob24vc2VydmVyL3Rlc3Rfb2F1dGgucHkKKysrIGIvc3JjL3Rlc3QvcHl0aG9u L3NlcnZlci90ZXN0X29hdXRoLnB5CkBAIC0xMDMsOSArMTAzLDkgQEAgZGVmIG9hdXRoX2N0eCgp OgogCiAgICAgY3R4ID0gQ29udGV4dCgpCiAgICAgaGJhX2xpbmVzID0gKAotICAgICAgICBmJ2hv c3Qge2N0eC5kYm5hbWV9IHtjdHgubWFwX3VzZXJ9ICAgc2FtZWhvc3Qgb2F1dGggaXNzdWVyPSJ7 Y3R4Lmlzc3Vlcn0iIHNjb3BlPSJ7Y3R4LnNjb3BlfSIgbWFwPW9hdXRoXG4nLAotICAgICAgICBm J2hvc3Qge2N0eC5kYm5hbWV9IHtjdHguYXV0aHpfdXNlcn0gc2FtZWhvc3Qgb2F1dGggaXNzdWVy PSJ7Y3R4Lmlzc3Vlcn0iIHNjb3BlPSJ7Y3R4LnNjb3BlfSIgdHJ1c3RfdmFsaWRhdG9yX2F1dGh6 PTFcbicsCi0gICAgICAgIGYnaG9zdCB7Y3R4LmRibmFtZX0gYWxsICAgICAgICAgICAgICBzYW1l aG9zdCBvYXV0aCBpc3N1ZXI9IntjdHguaXNzdWVyfSIgc2NvcGU9IntjdHguc2NvcGV9IlxuJywK KyAgICAgICAgZidob3N0IHtjdHguZGJuYW1lfSB7Y3R4Lm1hcF91c2VyfSAgIHNhbWVob3N0IGN1 c3RvbSBwcm92aWRlcj1vYXV0aCBpc3N1ZXI9IntjdHguaXNzdWVyfSIgc2NvcGU9IntjdHguc2Nv cGV9IiBtYXA9b2F1dGhcbicsCisgICAgICAgIGYnaG9zdCB7Y3R4LmRibmFtZX0ge2N0eC5hdXRo el91c2VyfSBzYW1laG9zdCBjdXN0b20gcHJvdmlkZXI9b2F1dGggaXNzdWVyPSJ7Y3R4Lmlzc3Vl cn0iIHNjb3BlPSJ7Y3R4LnNjb3BlfSIgdHJ1c3RfdmFsaWRhdG9yX2F1dGh6PTFcbicsCisgICAg ICAgIGYnaG9zdCB7Y3R4LmRibmFtZX0gYWxsICAgICAgICAgICAgICBzYW1laG9zdCBjdXN0b20g cHJvdmlkZXI9b2F1dGggaXNzdWVyPSJ7Y3R4Lmlzc3Vlcn0iIHNjb3BlPSJ7Y3R4LnNjb3BlfSJc bicsCiAgICAgKQogICAgIGlkZW50X2xpbmVzID0gKHIib2F1dGggL14oLiopQGV4YW1wbGVcLmNv bSQgXDEiLCkKIApAQCAtMTI2LDEyICsxMjYsMTIgQEAgZGVmIG9hdXRoX2N0eCgpOgogICAgICAg ICBjLmV4ZWN1dGUoc3FsLlNRTCgiQ1JFQVRFIFJPTEUge30gTE9HSU47IikuZm9ybWF0KGF1dGh6 X3VzZXIpKQogICAgICAgICBjLmV4ZWN1dGUoc3FsLlNRTCgiQ1JFQVRFIERBVEFCQVNFIHt9OyIp LmZvcm1hdChkYm5hbWUpKQogCi0gICAgICAgICMgTWFrZSB0aGlzIHRlc3Qgc2NyaXB0IHRoZSBz ZXJ2ZXIncyBvYXV0aF92YWxpZGF0b3IuCisgICAgICAgICMgTWFrZSB0aGlzIHRlc3Qgc2NyaXB0 IHRoZSBzZXJ2ZXIncyBvYXV0aCB2YWxpZGF0b3IuCiAgICAgICAgIHBhdGggPSBwYXRobGliLlBh dGgoX19maWxlX18pLnBhcmVudCAvICJ2YWxpZGF0ZV9iZWFyZXIucHkiCiAgICAgICAgIHBhdGgg PSBzdHIocGF0aC5hYnNvbHV0ZSgpKQogCiAgICAgICAgIGNtZCA9IGYie3NobGV4LnF1b3RlKHBh dGgpfSB7U0hBUkVEX01FTV9OQU1FfSA8JiVmIgotICAgICAgICBjLmV4ZWN1dGUoIkFMVEVSIFNZ U1RFTSBTRVQgb2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQgVE8gJXM7IiwgKGNtZCwpKQorICAgICAg ICBjLmV4ZWN1dGUoIkFMVEVSIFNZU1RFTSBTRVQgb2F1dGgudmFsaWRhdG9yX2NvbW1hbmQgVE8g JXM7IiwgKGNtZCwpKQogCiAgICAgICAgICMgUmVwbGFjZSBwZ19oYmEgYW5kIHBnX2lkZW50Lgog ICAgICAgICBjLmV4ZWN1dGUoIlNIT1cgaGJhX2ZpbGU7IikKQEAgLTE0OSw3ICsxNDksNyBAQCBk ZWYgb2F1dGhfY3R4KCk6CiAgICAgICAgICMgUHV0IHRoaW5ncyBiYWNrIHRoZSB3YXkgdGhleSB3 ZXJlLgogICAgICAgICBjLmV4ZWN1dGUoIlNFTEVDVCBwZ19yZWxvYWRfY29uZigpOyIpCiAKLSAg ICAgICAgYy5leGVjdXRlKCJBTFRFUiBTWVNURU0gUkVTRVQgb2F1dGhfdmFsaWRhdG9yX2NvbW1h bmQ7IikKKyAgICAgICAgYy5leGVjdXRlKCJBTFRFUiBTWVNURU0gUkVTRVQgb2F1dGgudmFsaWRh dG9yX2NvbW1hbmQ7IikKICAgICAgICAgYy5leGVjdXRlKHNxbC5TUUwoIkRST1AgREFUQUJBU0Ug e307IikuZm9ybWF0KGRibmFtZSkpCiAgICAgICAgIGMuZXhlY3V0ZShzcWwuU1FMKCJEUk9QIFJP TEUge307IikuZm9ybWF0KGF1dGh6X3VzZXIpKQogICAgICAgICBjLmV4ZWN1dGUoc3FsLlNRTCgi RFJPUCBST0xFIHt9OyIpLmZvcm1hdChtYXBfdXNlcikpCkBAIC05MzAsNyArOTMwLDcgQEAgZGVm IHRlc3Rfb2F1dGhfZW1wdHlfaW5pdGlhbF9yZXNwb25zZShjb25uLCBvYXV0aF9jdHgsIGJlYXJl cl90b2tlbik6CiBkZWYgc2V0X3ZhbGlkYXRvcigpOgogICAgICIiIgogICAgIEEgcGVyLXRlc3Qg Zml4dHVyZSB0aGF0IGFsbG93cyBhIHRlc3QgdG8gb3ZlcnJpZGUgdGhlIHNldHRpbmcgb2YKLSAg ICBvYXV0aF92YWxpZGF0b3JfY29tbWFuZCBmb3IgdGhlIGNsdXN0ZXIuIFRoZSBzZXR0aW5nIHdp bGwgYmUgcmV2ZXJ0ZWQgZHVyaW5nCisgICAgb2F1dGgudmFsaWRhdG9yX2NvbW1hbmQgZm9yIHRo ZSBjbHVzdGVyLiBUaGUgc2V0dGluZyB3aWxsIGJlIHJldmVydGVkIGR1cmluZwogICAgIHRlYXJk b3duLgogCiAgICAgUGFzc2luZyBOb25lIHdpbGwgcGVyZm9ybSBhbiBBTFRFUiBTWVNURU0gUkVT RVQuCkBAIC05NDIsMTcgKzk0MiwxNyBAQCBkZWYgc2V0X3ZhbGlkYXRvcigpOgogICAgICAgICBj ID0gY29ubi5jdXJzb3IoKQogCiAgICAgICAgICMgU2F2ZSB0aGUgcHJldmlvdXMgdmFsdWUuCi0g ICAgICAgIGMuZXhlY3V0ZSgiU0hPVyBvYXV0aF92YWxpZGF0b3JfY29tbWFuZDsiKQorICAgICAg ICBjLmV4ZWN1dGUoIlNIT1cgb2F1dGgudmFsaWRhdG9yX2NvbW1hbmQ7IikKICAgICAgICAgcHJl dl9jbWQgPSBjLmZldGNob25lKClbMF0KIAogICAgICAgICBkZWYgc2V0dGVyKGNtZCk6Ci0gICAg ICAgICAgICBjLmV4ZWN1dGUoIkFMVEVSIFNZU1RFTSBTRVQgb2F1dGhfdmFsaWRhdG9yX2NvbW1h bmQgVE8gJXM7IiwgKGNtZCwpKQorICAgICAgICAgICAgYy5leGVjdXRlKCJBTFRFUiBTWVNURU0g U0VUIG9hdXRoLnZhbGlkYXRvcl9jb21tYW5kIFRPICVzOyIsIChjbWQsKSkKICAgICAgICAgICAg IGMuZXhlY3V0ZSgiU0VMRUNUIHBnX3JlbG9hZF9jb25mKCk7IikKIAogICAgICAgICB5aWVsZCBz ZXR0ZXIKIAogICAgICAgICAjIFJlc3RvcmUgdGhlIHByZXZpb3VzIHZhbHVlLgotICAgICAgICBj LmV4ZWN1dGUoIkFMVEVSIFNZU1RFTSBTRVQgb2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQgVE8gJXM7 IiwgKHByZXZfY21kLCkpCisgICAgICAgIGMuZXhlY3V0ZSgiQUxURVIgU1lTVEVNIFNFVCBvYXV0 aC52YWxpZGF0b3JfY29tbWFuZCBUTyAlczsiLCAocHJldl9jbWQsKSkKICAgICAgICAgYy5leGVj dXRlKCJTRUxFQ1QgcGdfcmVsb2FkX2NvbmYoKTsiKQogCiAKLS0gCjIuMjUuMQoK --_011_4db7d3ea061f47a15fc6d865f53dd327ea2975fbcamelvmwarecom_--