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 1nQDNN-0004YC-TH for pgsql-hackers@arkaria.postgresql.org; Fri, 04 Mar 2022 19:14:06 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nQDNM-0007KQ-Lj for pgsql-hackers@arkaria.postgresql.org; Fri, 04 Mar 2022 19:14:04 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nQDNL-0007KG-So for pgsql-hackers@lists.postgresql.org; Fri, 04 Mar 2022 19:14:04 +0000 Received: from mail-bn8nam11on2043.outbound.protection.outlook.com ([40.107.236.43] helo=NAM11-BN8-obe.outbound.protection.outlook.com) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nQDN7-0003V2-9l for pgsql-hackers@postgresql.org; Fri, 04 Mar 2022 19:14:03 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=X9QebjzvTexD+kCg9KNkulzLeYgrlvTEMeaoGJbRU25OrMaesvIheIjdu8onLx3NwEiKSV7qpoWsPh+q1PLR9ZylNcRfDYUqr3YvTnnMpP3E5PAlyArRs7y0CahUTkmeYPy/94LwLbeA94OkpPQCZudb1V0KzVfg4wQsWUmADPEdslwVyzslUIzbfpJaWL+bklitWCUnjP2ChHUslgYKjVRozrfF1mcGRJMTswZC354zOOVqodL/1AkynYSp1UXUKwQwSYiIRgW37vQPs9nbHSsv42VYmcYqNXTDLuD1WdjT9WiTf0HaiatlF7qXehwzkhBxdcse2UIJOOy+koW7zg== 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=gf9gQjGTtAvRoxIoNCVyCo1IJ1LbBOc+gYhH6FhcZKM=; b=KYly4afTBFvWz1PYAe9kruZ0FNYmK/+Ej5KPuMzl/X5KYJngBkMyk0ye8Im/TP+m+UF+qNQnCBs3gZcX+el9v5aLdkEne+Q/I9YhgRXPjMAVOXkw1UmoNyeH+7Y6FozwNt8HlL0+7klIX8Xf2HqlcwlSx3/BqRZDSxkmyNIGLHkUIgGDOfFKp4XHOwkrDsgqRUWU0PVvn9ys9wIwXVwEQjGybgrsneMNAczBgitreWiBqvVq6oOr26iHKsHB2MhcMbifch3JJdklR79fuK1sGjCKmqOUH/tLJud8H+si9brHshL0vIYlIsFGxC49y77sKbzHKpOA07igdnXKcwcN/Q== 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=gf9gQjGTtAvRoxIoNCVyCo1IJ1LbBOc+gYhH6FhcZKM=; b=u2Ov/4fUegETR5NoYberV7yieA3WgyQoYurB2qld7KTil0x0m1vzJfIuTa2n4c82g2T/vQsI1AeK4itp+OukTv/ppq4rOjL2vF5heHiVMMoyBAHOQ7miJ5oMZvolO2JT8UYGEG3sVCjrbZGgIYkZf6sl2icHUF2aGm7BreA7PBY= Received: from CO1PR05MB8087.namprd05.prod.outlook.com (2603:10b6:303:db::16) by DM6PR05MB5594.namprd05.prod.outlook.com (2603:10b6:5:5b::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5061.7; Fri, 4 Mar 2022 19:13:42 +0000 Received: from CO1PR05MB8087.namprd05.prod.outlook.com ([fe80::615f:cd8c:40dd:8a99]) by CO1PR05MB8087.namprd05.prod.outlook.com ([fe80::615f:cd8c:40dd:8a99%3]) with mapi id 15.20.5061.006; Fri, 4 Mar 2022 19:13:42 +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: AQHXXISc0BUwpEo1NUi6cD0VutaLHasZf38AgAdCaoCAZEa6AIEsNj6A Date: Fri, 4 Mar 2022 19:13:42 +0000 Message-ID: <0e86fe7e3534fb05db02379fed404a2010eb1d62.camel@vmware.com> References: <2f06a4aef1d5defe4b7aaec01478572e5557d32a.camel@vmware.com> <8a5a35b31c3f25f6b047e77def0445a60399981d.camel@vmware.com> In-Reply-To: <8a5a35b31c3f25f6b047e77def0445a60399981d.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: 7ae30e40-ebf4-436d-6d1a-08d9fe1318f2 x-ms-traffictypediagnostic: DM6PR05MB5594: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: jtVoIcbgk24Y0fdvdtZAjO/WlGJsWXeEnapxPyIhbAmROvZOfv6xp1ZOlKWxD2R3dW/NizpXiUwlvnjdbXlAPjiaGngaoSuI8WJ4rz0I0OGcuIEL5rAQcgQ9a2AsxqMTGjkpl61nugeMZatCs9ozmxSeUJiRUe95l0B9vGsVM0wJuxflT/fh1nT5f4NzAq9w6mbsrL71E29kMNpBUr3wBdKCtmn2XICmc5kJzCH6zC/DOxCCZMyKo9k8PxR/wc6JvrbwuAYFSjtA6qDtaKL0zgezamCJzZXtAUWM25SBa+ZMY/xTd6PzX3NlfKVfzm9aagwc4Y8iE8qR1rEFf+J/0yDPZcsizAk/tneYEWSOh3MJ8e7PaQDtsgMztZ+KL8rj7vjha4NhlTcDl2M2wNlVA2lg1FKGqQcAnA9GaWdEYm2jKwwPD4kwRCRkMuyNVGEAvC3iEvaLYMxW+G2RJIKCLUyYBZH9zBlURoP9pxPx/IdY/VUzPM1H8gEfHdFFfRObLtB2bSgsAWcwvwfkzJJaDMGiGlbcSUsF1ogKPqntd/KpDmM1w7qLVN810pdI/tVYHJHXbTd6gVNXDhx/lOWFpBfA4iVGh1PHlwTxoBxH1oES1WIbTS6v5DgktEEN48WUPyU+nOMChbzJBXlON3XVtMLbbdE+47HvnsMttjKqVgFD1eekb/bfv4kLEPVz2g+3G95wbrDPaEoB3jzpMZ3aZ0b9kV3VUbgQ+Q4YqNpz0/jRgNprSVxj8UdQ2l0fqCCQfjH1oyveZ3S4ZzR3aDGWUc/zgXvqV3ubnFe/e0qFdI0= 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)(38070700005)(6506007)(86362001)(54906003)(38100700002)(122000001)(99936003)(64756008)(66446008)(66476007)(8676002)(36756003)(76116006)(66946007)(66556008)(5660300002)(4326008)(316002)(6916009)(4744005)(8936002)(2906002)(71200400001)(2616005)(186003)(26005)(83380400001)(6486002)(508600001)(966005)(6512007);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?ekVxK2JtNTF6SnVjV2tZdlhjMEU5MHE0blFFdjZ0K2g3VUxNcE5JemRxWGdY?= =?utf-8?B?VTF5NExGRkpHOW9hYmM0cGJHcUhYMnJmZndRbC90bUVGWmd1Q21jeHJGbm9m?= =?utf-8?B?VERKOGI1OU9UOW5ZaCtJNTRjZEdWS0IySXBJWUFKMTBldTRPdnBvUnFhRVo2?= =?utf-8?B?YTZSUVYwVkZNNEF5RFBlbVkrQWozOVZWVTdZZlRGYVhrSGZiTWRqTnhXTkcx?= =?utf-8?B?SWJTQjErUHBuQXN0TmlrNDREeExDOEpxUFcxSXlDNGE2cnhINnpaSTRudDNK?= =?utf-8?B?UjlmdFdkbkl6M2ZWeXdKTUtRL0o3V0N5b3o5Y09vaVluaWd3TlYrYWRUYThz?= =?utf-8?B?dGxpME5Vc2NBOXRjaHdZOUN2VVIvQXZBRU1nSnRFMkhvUXpKd2dZNS9TdlZZ?= =?utf-8?B?ZjlFNkI5cHYyOXBJUVRQZkxselpFYzB4OUhwa3MyQzczTldocUxQSHFrUzNv?= =?utf-8?B?dUJlVHJOS2hrWlkrYm5ndGtkcmRVUVZyVnVjSWlSaWlFSzhLdzk5ZFBQT3dL?= =?utf-8?B?azB5YjJ6cDZWV0xJa0RDVUlwTnA0R0xvRGh0UGlrZURCdmRhTkdPRGhsOUNj?= =?utf-8?B?TWRTeDZ3eVExbGNmSm1jeTRCTGVDVTUvUEVZRnQ4c2grbWdWQjhsc0c2K3BP?= =?utf-8?B?cDl1K0xYQTA0RFNXcENiTEdiS3pzeE1PUGJhdmVIY1BBOTlqeGs0ZEZOazZX?= =?utf-8?B?cXBQbDUyMHROc01kbXhYU1djN3M4NHNBSGlCZjF0ZWxVSm1vUXgyMWlxTXpF?= =?utf-8?B?T0kveklyT3JKZEZEbUxSWjVIcDRpM2tHcnpPTHBpL2xZOTVFZkpuUmk5bHRl?= =?utf-8?B?aHZtc3RGOUlBUVI1cGkrZ0dWelJzS0IwL1l3d0YzV2Z5UktHeW5ESk0wNHZK?= =?utf-8?B?VnJ3YnM4YjhmVmpPdWJZeHYxSzdHaXlJaU0xcFRaUzhDZk1sbkJzcnV4blUr?= =?utf-8?B?bVJvbXdVbnI2cTFSb0xVOXM0WTN1R3JDTUZIaDdwRFJMc3RTVDhvODdNV3VT?= =?utf-8?B?S2FRejBXOUZXU1ZZcVdMK2VTc0NwUG9saS82THRxK1pZc0g3Z3BCTWp2MHJ3?= =?utf-8?B?bit4MExQMEhsWUVEQmdDYWtla1R3S2NZVXFUdzRWMW05RlprcXVERHloNkI5?= =?utf-8?B?SUFXdkdmVzFzMU5CdWF2b1hTN0l0SGtoQS9FK1RUb0RXRFlWb0NOVmlnU2Yv?= =?utf-8?B?d2xOK3crWENTZVV2OGw2eit5bCtYY1lVbGpJbTVhUHV4dWU1M3puM09mZjdj?= =?utf-8?B?dlpDTjRXTVhJNFhNYUZjRkxoYS9HVCtUeGlScExpNEEyQzRLYmlQalJYVjBr?= =?utf-8?B?TG94bWhFSEcxdUkyNUdmTUdrTU43amhhcGNCWGRPN3dkZXlpcFhiZmRId0dx?= =?utf-8?B?QU9kSm01RnpRVFF0NUpLa2ZtTDA3NWwrNFZLclIwbEJMTmlEWEc4NGdobGlG?= =?utf-8?B?Z1k4V1cvaHF3b0ZxOEdVK3F1WnN6dHdHS0hYVytUMkE3SUtzN3hqQUN5VERF?= =?utf-8?B?TnRRS0thNXFiNzZoZnZvRjdZUFp2MmNzZkdFREpmZ0l6N0xlUDQ3bHJtMVRC?= =?utf-8?B?MlRwZ0luMzBqVjdZazFEZU1UWlYwcGxBQThFT0RDek9Lc3Z1UkFReUN6b2ZR?= =?utf-8?B?WGcrOGF3KzhtRU9ZSVpxV1g0UkNmaXhVWFJSNVVUQWdUbXRhemV2WUUxZ2d5?= =?utf-8?B?cmxSaVRkazZQR1MwS09FeWtpaHk5b0tqTjh4VS9RTStOTVNnYUhZSlFUZGN4?= =?utf-8?B?WDk2L2lTbGRUMEx6ejNIWm9uK3NQNkZsZTVVb09sZldMY1pRVU5wSDRoRGsy?= =?utf-8?B?U3RaMTUwaFFVVTYvb0pwMUxsdG9Hb2Y3bzBnV3lRRGlKT0pYR2MyM1B3Y3Ez?= =?utf-8?B?Z3dSTmRsV29qaU1vamNBVXJ3bERlR2RDcFBkZmxqYVhXWXB3S1VYTDYwRk5E?= =?utf-8?B?WnRheXhzNXhaSGsxOTJ5ZzMyUWpSWGh1ZmtqRUF5TkhyNklKY1kzbFkzY3lY?= =?utf-8?B?RnpYbERxbk5nPT0=?= Content-Type: multipart/mixed; boundary="_010_0e86fe7e3534fb05db02379fed404a2010eb1d62camelvmwarecom_" 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: 7ae30e40-ebf4-436d-6d1a-08d9fe1318f2 X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Mar 2022 19:13:42.5385 (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: DFDtUCe6PopvX4PakzdBXo2nrwq9d78mabk+fkfOLd0Tm7S/9ZrXBvp6sfkBRq7kE0zG+QMuGON1JZMBXbwCxQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR05MB5594 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_010_0e86fe7e3534fb05db02379fed404a2010eb1d62camelvmwarecom_ Content-Type: text/plain; charset="utf-8" Content-ID: <7DF450D094B56348851E99E0A9C33D99@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 SGkgYWxsLA0KDQp2MyByZWJhc2VzIHRoaXMgcGF0Y2hzZXQgb3ZlciB0aGUgdG9wIG9mIFNhbWF5 J3MgcGx1Z2dhYmxlIGF1dGgNCnByb3ZpZGVyIEFQSSBbMV0sIGluY2x1ZGVkIGhlcmUgYXMgcGF0 Y2hlcyAwMDAxLTMuIFRoZSBmaW5hbCBwYXRjaCBpbg0KdGhlIHNldCBwb3J0cyB0aGUgc2VydmVy IGltcGxlbWVudGF0aW9uIGZyb20gYSBjb3JlIGZlYXR1cmUgdG8gYQ0KY29udHJpYiBtb2R1bGU7 IHRvIHN3aXRjaCBiZXR3ZWVuIHRoZSB0d28gYXBwcm9hY2hlcywgc2ltcGx5IGxlYXZlIG91dA0K dGhhdCBmaW5hbCBwYXRjaC4NCg0KVGhlcmUgYXJlIHN0aWxsIHNvbWUgYmFja2VuZCBjaGFuZ2Vz IHRoYXQgbXVzdCBiZSBtYWRlIHRvIGdldCB0aGlzDQp3b3JraW5nLCBhcyBwb2ludGVkIG91dCBp biAwMDA5LCBhbmQgb2J2aW91c2x5IGxpYnBxIHN1cHBvcnQgc3RpbGwNCnJlcXVpcmVzIGNvZGUg Y2hhbmdlcy4NCg0KLS1KYWNvYg0KDQpbMV0gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVz c2FnZS1pZC9mbGF0L0NBSnhyYnl4VFJuNVA4Si1wJTJCd0hMd0ZhaEs1eTU2UGhLMjhWT2I1NWpx TU8wNVktREp3JTQwbWFpbC5nbWFpbC5jb20NCg== --_010_0e86fe7e3534fb05db02379fed404a2010eb1d62camelvmwarecom_ Content-Type: text/x-patch; name="v3-0001-Add-support-for-custom-authentication-methods.patch" Content-Description: v3-0001-Add-support-for-custom-authentication-methods.patch Content-Disposition: attachment; filename="v3-0001-Add-support-for-custom-authentication-methods.patch"; size=11536; creation-date="Fri, 04 Mar 2022 19:13:41 GMT"; modification-date="Fri, 04 Mar 2022 19:13:41 GMT" Content-ID: Content-Transfer-Encoding: base64 RnJvbSAyMDYwNjBlZDFiMzFmY2VjNDhmYjZlZTA1ZDYxYjEzNWVjOThjZWNmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1heSBTaGFybWEgPHNtaWxpbmdzYW1heUBnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgMTUgRmViIDIwMjIgMjI6MjM6MjkgLTA4MDAKU3ViamVjdDogW1BBVENIIHYz IDEvOV0gQWRkIHN1cHBvcnQgZm9yIGN1c3RvbSBhdXRoZW50aWNhdGlvbiBtZXRob2RzCgpDdXJy ZW50bHksIFBvc3RncmVTUUwgc3VwcG9ydHMgb25seSBhIHNldCBvZiBwcmUtZGVmaW5lZCBhdXRo ZW50aWNhdGlvbgptZXRob2RzLiBUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgMiBob29rcyB3 aGljaCBhbGxvdyB1c2VycyB0byBhZGQKdGhlaXIgY3VzdG9tIGF1dGhlbnRpY2F0aW9uIG1ldGhv ZHMgYnkgZGVmaW5pbmcgYSBjaGVjayBmdW5jdGlvbiBhbmQgYW4KZXJyb3IgZnVuY3Rpb24uIFVz ZXJzIGNhbiB0aGVuIHVzZSB0aGVzZSBtZXRob2RzIGJ5IHVzaW5nIGEgbmV3ICJjdXN0b20iCmtl eXdvcmQgaW4gcGdfaGJhLmNvbmYgYW5kIHNwZWNpZnlpbmcgdGhlIGF1dGhlbnRpY2F0aW9uIHBy b3ZpZGVyIHRoZXkKd2FudCB0byB1c2UuCi0tLQogc3JjL2JhY2tlbmQvbGlicHEvYXV0aC5jIHwg ODkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQv bGlicHEvaGJhLmMgIHwgNDQgKysrKysrKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL2xpYnBx L2F1dGguaCB8IDI3ICsrKysrKysrKysrKwogc3JjL2luY2x1ZGUvbGlicHEvaGJhLmggIHwgIDQg KysKIDQgZmlsZXMgY2hhbmdlZCwgMTQzIGluc2VydGlvbnMoKyksIDIxIGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGguYyBiL3NyYy9iYWNrZW5kL2xpYnBx L2F1dGguYwppbmRleCBlZmM1M2YzMTM1Li4zNTMzYjBiYzUwIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9saWJwcS9hdXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvbGlicHEvYXV0aC5jCkBAIC00Nyw4 ICs0Nyw2IEBACiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogc3RhdGljIHZvaWQgYXV0aF9mYWlsZWQoUG9ydCAq cG9ydCwgaW50IHN0YXR1cywgY29uc3QgY2hhciAqbG9nZGV0YWlsKTsKLXN0YXRpYyBjaGFyICpy ZWN2X3Bhc3N3b3JkX3BhY2tldChQb3J0ICpwb3J0KTsKLXN0YXRpYyB2b2lkIHNldF9hdXRobl9p ZChQb3J0ICpwb3J0LCBjb25zdCBjaGFyICppZCk7CiAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMDYsMjMg KzIwNCw2IEBAIHN0YXRpYyBpbnQJcGdfU1NQSV9tYWtlX3VwbihjaGFyICphY2NvdW50bmFtZSwK IHN0YXRpYyBpbnQJQ2hlY2tSQURJVVNBdXRoKFBvcnQgKnBvcnQpOwogc3RhdGljIGludAlQZXJm b3JtUmFkaXVzVHJhbnNhY3Rpb24oY29uc3QgY2hhciAqc2VydmVyLCBjb25zdCBjaGFyICpzZWNy ZXQsIGNvbnN0IGNoYXIgKnBvcnRzdHIsIGNvbnN0IGNoYXIgKmlkZW50aWZpZXIsIGNvbnN0IGNo YXIgKnVzZXJfbmFtZSwgY29uc3QgY2hhciAqcGFzc3dkKTsKIAotCi0vKgotICogTWF4aW11bSBh Y2NlcHRlZCBzaXplIG9mIEdTUyBhbmQgU1NQSSBhdXRoZW50aWNhdGlvbiB0b2tlbnMuCi0gKiBX ZSBhbHNvIHVzZSB0aGlzIGFzIGEgbGltaXQgb24gb3JkaW5hcnkgcGFzc3dvcmQgcGFja2V0IGxl bmd0aHMuCi0gKgotICogS2VyYmVyb3MgdGlja2V0cyBhcmUgdXN1YWxseSBxdWl0ZSBzbWFsbCwg YnV0IHRoZSBUR1RzIGlzc3VlZCBieSBXaW5kb3dzCi0gKiBkb21haW4gY29udHJvbGxlcnMgaW5j bHVkZSBhbiBhdXRob3JpemF0aW9uIGZpZWxkIGtub3duIGFzIHRoZSBQcml2aWxlZ2UKLSAqIEF0 dHJpYnV0ZSBDZXJ0aWZpY2F0ZSAoUEFDKSwgd2hpY2ggY29udGFpbnMgdGhlIHVzZXIncyBXaW5k b3dzIHBlcm1pc3Npb25zCi0gKiAoZ3JvdXAgbWVtYmVyc2hpcHMgZXRjLikuIFRoZSBQQUMgaXMg Y29waWVkIGludG8gYWxsIHRpY2tldHMgb2J0YWluZWQgb24KLSAqIHRoZSBiYXNpcyBvZiB0aGlz IFRHVCAoZXZlbiB0aG9zZSBpc3N1ZWQgYnkgVW5peCByZWFsbXMgd2hpY2ggdGhlIFdpbmRvd3MK LSAqIHJlYWxtIHRydXN0cyksIGFuZCBjYW4gYmUgc2V2ZXJhbCBrQiBpbiBzaXplLiBUaGUgbWF4 aW11bSB0b2tlbiBzaXplCi0gKiBhY2NlcHRlZCBieSBXaW5kb3dzIHN5c3RlbXMgaXMgZGV0ZXJt aW5lZCBieSB0aGUgTWF4QXV0aFRva2VuIFdpbmRvd3MKLSAqIHJlZ2lzdHJ5IHNldHRpbmcuIE1p Y3Jvc29mdCByZWNvbW1lbmRzIHRoYXQgaXQgaXMgbm90IHNldCBoaWdoZXIgdGhhbgotICogNjU1 MzUgYnl0ZXMsIHNvIHRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgbGltaXQgZm9yIHVzIGFz IHdlbGwuCi0gKi8KLSNkZWZpbmUgUEdfTUFYX0FVVEhfVE9LRU5fTEVOR1RICTY1NTM1Ci0KIC8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogICogR2xvYmFsIGF1dGhlbnRpY2F0aW9uIGZ1bmN0aW9ucwogICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBA IC0yMzUsNiArMjE2LDE2IEBAIHN0YXRpYyBpbnQJUGVyZm9ybVJhZGl1c1RyYW5zYWN0aW9uKGNv bnN0IGNoYXIgKnNlcnZlciwgY29uc3QgY2hhciAqc2VjcmV0LCBjb25zCiAgKi8KIENsaWVudEF1 dGhlbnRpY2F0aW9uX2hvb2tfdHlwZSBDbGllbnRBdXRoZW50aWNhdGlvbl9ob29rID0gTlVMTDsK IAorLyoKKyAqIFRoZXNlIGhvb2tzIGFsbG93IHBsdWdpbnMgdG8gZ2V0IGNvbnRyb2wgb2YgdGhl IGNsaWVudCBhdXRoZW50aWNhdGlvbiBjaGVjaworICogYW5kIGVycm9yIHJlcG9ydGluZyBsb2dp Yy4gVGhpcyBhbGxvd3MgdXNlcnMgdG8gd3JpdGUgZXh0ZW5zaW9ucyB0bworICogaW1wbGVtZW50 IGF1dGhlbnRpY2F0aW9uIHVzaW5nIGFueSBwcm90b2NvbCBvZiB0aGVpciBjaG9pY2UuIFRvIGFj cXVpcmUgdGhlc2UKKyAqIGhvb2tzLCBwbHVnaW5zIG5lZWQgdG8gY2FsbCB0aGUgUmVnaXN0ZXJB dXRoUHJvdmlkZXIoKSBmdW5jdGlvbi4KKyAqLworc3RhdGljIEN1c3RvbUF1dGhlbnRpY2F0aW9u Q2hlY2tfaG9va190eXBlIEN1c3RvbUF1dGhlbnRpY2F0aW9uQ2hlY2tfaG9vayA9IE5VTEw7Citz dGF0aWMgQ3VzdG9tQXV0aGVudGljYXRpb25FcnJvcl9ob29rX3R5cGUgQ3VzdG9tQXV0aGVudGlj YXRpb25FcnJvcl9ob29rID0gTlVMTDsKK2NoYXIgKmN1c3RvbV9wcm92aWRlcl9uYW1lID0gTlVM TDsKKwogLyoKICAqIFRlbGwgdGhlIHVzZXIgdGhlIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCwgYnV0 IG5vdCAobXVjaCBhYm91dCkgd2h5LgogICoKQEAgLTMxMSw2ICszMDIsMTIgQEAgYXV0aF9mYWls ZWQoUG9ydCAqcG9ydCwgaW50IHN0YXR1cywgY29uc3QgY2hhciAqbG9nZGV0YWlsKQogCQljYXNl IHVhUkFESVVTOgogCQkJZXJyc3RyID0gZ2V0dGV4dF9ub29wKCJSQURJVVMgYXV0aGVudGljYXRp b24gZmFpbGVkIGZvciB1c2VyIFwiJXNcIiIpOwogCQkJYnJlYWs7CisJCWNhc2UgdWFDdXN0b206 CisJCQlpZiAoQ3VzdG9tQXV0aGVudGljYXRpb25FcnJvcl9ob29rKQorCQkJCWVycnN0ciA9IEN1 c3RvbUF1dGhlbnRpY2F0aW9uRXJyb3JfaG9vayhwb3J0KTsKKwkJCWVsc2UKKwkJCQllcnJzdHIg PSBnZXR0ZXh0X25vb3AoIkN1c3RvbSBhdXRoZW50aWNhdGlvbiBmYWlsZWQgZm9yIHVzZXIgXCIl c1wiIik7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVycnN0ciA9IGdldHRleHRfbm9vcCgi YXV0aGVudGljYXRpb24gZmFpbGVkIGZvciB1c2VyIFwiJXNcIjogaW52YWxpZCBhdXRoZW50aWNh dGlvbiBtZXRob2QiKTsKIAkJCWJyZWFrOwpAQCAtMzQ1LDcgKzM0Miw3IEBAIGF1dGhfZmFpbGVk KFBvcnQgKnBvcnQsIGludCBzdGF0dXMsIGNvbnN0IGNoYXIgKmxvZ2RldGFpbCkKICAqIGxpZmV0 aW1lIG9mIHRoZSBQb3J0LCBzbyBpdCBpcyBzYWZlIHRvIHBhc3MgYSBzdHJpbmcgdGhhdCBpcyBt YW5hZ2VkIGJ5IGFuCiAgKiBleHRlcm5hbCBsaWJyYXJ5LgogICovCi1zdGF0aWMgdm9pZAordm9p ZAogc2V0X2F1dGhuX2lkKFBvcnQgKnBvcnQsIGNvbnN0IGNoYXIgKmlkKQogewogCUFzc2VydChp ZCk7CkBAIC02MzAsNiArNjI3LDEwIEBAIENsaWVudEF1dGhlbnRpY2F0aW9uKFBvcnQgKnBvcnQp CiAJCWNhc2UgdWFUcnVzdDoKIAkJCXN0YXR1cyA9IFNUQVRVU19PSzsKIAkJCWJyZWFrOworCQlj YXNlIHVhQ3VzdG9tOgorCQkJaWYgKEN1c3RvbUF1dGhlbnRpY2F0aW9uQ2hlY2tfaG9vaykKKwkJ CQlzdGF0dXMgPSBDdXN0b21BdXRoZW50aWNhdGlvbkNoZWNrX2hvb2socG9ydCk7CisJCQlicmVh azsKIAl9CiAKIAlpZiAoKHN0YXR1cyA9PSBTVEFUVVNfT0sgJiYgcG9ydC0+aGJhLT5jbGllbnRj ZXJ0ID09IGNsaWVudENlcnRGdWxsKQpAQCAtNjg5LDcgKzY5MCw3IEBAIHNlbmRBdXRoUmVxdWVz dChQb3J0ICpwb3J0LCBBdXRoUmVxdWVzdCBhcmVxLCBjb25zdCBjaGFyICpleHRyYWRhdGEsIGlu dCBleHRyYWxlCiAgKgogICogUmV0dXJucyBOVUxMIGlmIGNvdWxkbid0IGdldCBwYXNzd29yZCwg ZWxzZSBwYWxsb2MnZCBzdHJpbmcuCiAgKi8KLXN0YXRpYyBjaGFyICoKK2NoYXIgKgogcmVjdl9w YXNzd29yZF9wYWNrZXQoUG9ydCAqcG9ydCkKIHsKIAlTdHJpbmdJbmZvRGF0YSBidWY7CkBAIC0z MzQzLDMgKzMzNDQsNDkgQEAgUGVyZm9ybVJhZGl1c1RyYW5zYWN0aW9uKGNvbnN0IGNoYXIgKnNl cnZlciwgY29uc3QgY2hhciAqc2VjcmV0LCBjb25zdCBjaGFyICpwb3IKIAkJfQogCX0JCQkJCQkJ Lyogd2hpbGUgKHRydWUpICovCiB9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ3VzdG9tIGF1dGhlbnRpY2F0 aW9uCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogUmVnaXN0ZXJBdXRoUHJvdmlkZXIgcmVnaXN0 ZXJzIGEgY3VzdG9tIGF1dGhlbnRpY2F0aW9uIHByb3ZpZGVyIHRvIGJlCisgKiB1c2VkIGZvciBh dXRoZW50aWNhdGlvbi4gQ3VycmVudGx5LCB3ZSBhbGxvdyBvbmx5IG9uZSBhdXRoZW50aWNhdGlv bgorICogcHJvdmlkZXIgdG8gYmUgcmVnaXN0ZXJlZCBmb3IgdXNlIGF0IGEgdGltZS4KKyAqCisg KiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgaW4gX1BHX2luaXQoKSBieSBhbnkgZXh0 ZW5zaW9uIGxvb2tpbmcgdG8KKyAqIGFkZCBhIGN1c3RvbSBhdXRoZW50aWNhdGlvbiBtZXRob2Qu CisgKi8KK3ZvaWQgUmVnaXN0ZXJBdXRoUHJvdmlkZXIoY29uc3QgY2hhciAqcHJvdmlkZXJfbmFt ZSwKKwkJQ3VzdG9tQXV0aGVudGljYXRpb25DaGVja19ob29rX3R5cGUgQXV0aGVudGljYXRpb25D aGVja0Z1bmN0aW9uLAorCQlDdXN0b21BdXRoZW50aWNhdGlvbkVycm9yX2hvb2tfdHlwZSBBdXRo ZW50aWNhdGlvbkVycm9yRnVuY3Rpb24pCit7CisJaWYgKHByb3ZpZGVyX25hbWUgPT0gTlVMTCkK Kwl7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycm1zZygiY2Fubm90IHJlZ2lzdGVyIGF1dGhl bnRpY2F0aW9uIHByb3ZpZGVyIHdpdGhvdXQgbmFtZSIpKSk7CisJfQorCisJaWYgKEF1dGhlbnRp Y2F0aW9uQ2hlY2tGdW5jdGlvbiA9PSBOVUxMKQorCXsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQko ZXJybXNnKCJjYW5ub3QgcmVnaXN0ZXIgYXV0aGVudGljYXRpb24gcHJvdmlkZXIgd2l0aG91dCBh IGNoZWNrIGZ1bmN0aW9uIikpKTsKKwl9CisKKwlpZiAoY3VzdG9tX3Byb3ZpZGVyX25hbWUpCisJ eworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJtc2coImNhbm5vdCByZWdpc3RlciBhdXRoZW50 aWNhdGlvbiBwcm92aWRlciAlcyIsIHByb3ZpZGVyX25hbWUpLAorCQkJCSBlcnJkZXRhaWwoIk9u bHkgb25lIGF1dGhlbnRpY2F0aW9uIHByb3ZpZGVyIGFsbG93ZWQuICBQcm92aWRlciAlcyBpcyBh bHJlYWR5IHJlZ2lzdGVyZWQuIiwKKwkJCQkJCQljdXN0b21fcHJvdmlkZXJfbmFtZSkpKTsKKwl9 CisKKwkvKgorCSAqIEFsbG9jYXRlIGluIHRvcCBtZW1vcnkgY29udGV4dCBhcyB3ZSBuZWVkIHRv IHJlYWQgdGhpcyB3aGVuZXZlcgorCSAqIHdlIHBhcnNlIHBnX2hiYS5jb25mCisJICovCisJY3Vz dG9tX3Byb3ZpZGVyX25hbWUgPSBNZW1vcnlDb250ZXh0U3RyZHVwKFRvcE1lbW9yeUNvbnRleHQs cHJvdmlkZXJfbmFtZSk7CisJQ3VzdG9tQXV0aGVudGljYXRpb25DaGVja19ob29rID0gQXV0aGVu dGljYXRpb25DaGVja0Z1bmN0aW9uOworCUN1c3RvbUF1dGhlbnRpY2F0aW9uRXJyb3JfaG9vayA9 IEF1dGhlbnRpY2F0aW9uRXJyb3JGdW5jdGlvbjsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2xpYnBxL2hiYS5jIGIvc3JjL2JhY2tlbmQvbGlicHEvaGJhLmMKaW5kZXggZDg0YTQwYjcyNi4u ZWJhZTk5Mjk2NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbGlicHEvaGJhLmMKKysrIGIvc3Jj L2JhY2tlbmQvbGlicHEvaGJhLmMKQEAgLTEzNCw2ICsxMzQsNyBAQCBzdGF0aWMgY29uc3QgY2hh ciAqY29uc3QgVXNlckF1dGhOYW1lW10gPQogCSJsZGFwIiwKIAkiY2VydCIsCiAJInJhZGl1cyIs CisJImN1c3RvbSIsCiAJInBlZXIiCiB9OwogCkBAIC0xMzk5LDYgKzE0MDAsOCBAQCBwYXJzZV9o YmFfbGluZShUb2tlbml6ZWRMaW5lICp0b2tfbGluZSwgaW50IGVsZXZlbCkKICNlbmRpZgogCWVs c2UgaWYgKHN0cmNtcCh0b2tlbi0+c3RyaW5nLCAicmFkaXVzIikgPT0gMCkKIAkJcGFyc2VkbGlu ZS0+YXV0aF9tZXRob2QgPSB1YVJBRElVUzsKKwllbHNlIGlmIChzdHJjbXAodG9rZW4tPnN0cmlu ZywgImN1c3RvbSIpID09IDApCisJCXBhcnNlZGxpbmUtPmF1dGhfbWV0aG9kID0gdWFDdXN0b207 CiAJZWxzZQogCXsKIAkJZXJlcG9ydChlbGV2ZWwsCkBAIC0xNjkxLDYgKzE2OTQsMTQgQEAgcGFy c2VfaGJhX2xpbmUoVG9rZW5pemVkTGluZSAqdG9rX2xpbmUsIGludCBlbGV2ZWwpCiAJCXBhcnNl ZGxpbmUtPmNsaWVudGNlcnQgPSBjbGllbnRDZXJ0RnVsbDsKIAl9CiAKKwkvKgorCSAqIEVuc3Vy ZSB0aGF0IHRoZSBwcm92aWRlciBuYW1lIGlzIHNwZWNpZmllZCBmb3IgY3VzdG9tIGF1dGhlbnRp Y2F0aW9uIG1ldGhvZC4KKwkgKi8KKwlpZiAocGFyc2VkbGluZS0+YXV0aF9tZXRob2QgPT0gdWFD dXN0b20pCisJeworCQlNQU5EQVRPUllfQVVUSF9BUkcocGFyc2VkbGluZS0+Y3VzdG9tX3Byb3Zp ZGVyLCAicHJvdmlkZXIiLCAiY3VzdG9tIik7CisJfQorCiAJcmV0dXJuIHBhcnNlZGxpbmU7CiB9 CiAKQEAgLTIxMDIsNiArMjExMywzMiBAQCBwYXJzZV9oYmFfYXV0aF9vcHQoY2hhciAqbmFtZSwg Y2hhciAqdmFsLCBIYmFMaW5lICpoYmFsaW5lLAogCQloYmFsaW5lLT5yYWRpdXNpZGVudGlmaWVy cyA9IHBhcnNlZF9pZGVudGlmaWVyczsKIAkJaGJhbGluZS0+cmFkaXVzaWRlbnRpZmllcnNfcyA9 IHBzdHJkdXAodmFsKTsKIAl9CisJZWxzZSBpZiAoc3RyY21wKG5hbWUsICJwcm92aWRlciIpID09 IDApCisJeworCQlSRVFVSVJFX0FVVEhfT1BUSU9OKHVhQ3VzdG9tLCAicHJvdmlkZXIiLCAiY3Vz dG9tIik7CisKKwkJLyoKKwkJICogVmVyaWZ5IHRoYXQgdGhlIHByb3ZpZGVyIG1lbnRpb25lZCBp cyBzYW1lIGFzIHRoZSBvbmUgbG9hZGVkCisJCSAqIHZpYSBzaGFyZWRfcHJlbG9hZF9saWJyYXJp ZXMuCisJCSAqLworCisJCWlmIChjdXN0b21fcHJvdmlkZXJfbmFtZSA9PSBOVUxMIHx8IHN0cmNt cCh2YWwsY3VzdG9tX3Byb3ZpZGVyX25hbWUpICE9IDApCisJCXsKKwkJCWVyZXBvcnQoZWxldmVs LAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0NPTkZJR19GSUxFX0VSUk9SKSwKKwkJCQkJIGVycm1z ZygiY2Fubm90IHVzZSBhdXRoZW50aWNhdGlvbiBwcm92aWRlciAlcyIsdmFsKSwKKwkJCQkJIGVy cmhpbnQoIkxvYWQgYXV0aGVudGljYXRpb24gcHJvdmlkZXIgdmlhIHNoYXJlZF9wcmVsb2FkX2xp YnJhcmllcy4iKSwKKwkJCQkJIGVycmNvbnRleHQoImxpbmUgJWQgb2YgY29uZmlndXJhdGlvbiBm aWxlIFwiJXNcIiIsCisJCQkJCQkJbGluZV9udW0sIEhiYUZpbGVOYW1lKSkpOworCQkJKmVycl9t c2cgPSBwc3ByaW50ZigiY2Fubm90IHVzZSBhdXRoZW50aWNhdGlvbiBwcm92aWRlciAlcyIsIHZh bCk7CisKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWhiYWxpbmUtPmN1 c3RvbV9wcm92aWRlciA9IHBzdHJkdXAodmFsKTsKKwkJfQorCX0KIAllbHNlCiAJewogCQllcmVw b3J0KGVsZXZlbCwKQEAgLTI0NDIsNiArMjQ3OSwxMyBAQCBnZXRoYmFfb3B0aW9ucyhIYmFMaW5l ICpoYmEpCiAJCQkJQ1N0cmluZ0dldFRleHREYXR1bShwc3ByaW50ZigicmFkaXVzcG9ydHM9JXMi LCBoYmEtPnJhZGl1c3BvcnRzX3MpKTsKIAl9CiAKKwlpZiAoaGJhLT5hdXRoX21ldGhvZCA9PSB1 YUN1c3RvbSkKKwl7CisJCWlmIChoYmEtPmN1c3RvbV9wcm92aWRlcikKKwkJCW9wdGlvbnNbbm9w dGlvbnMrK10gPQorCQkJCUNTdHJpbmdHZXRUZXh0RGF0dW0ocHNwcmludGYoInByb3ZpZGVyPSVz IixoYmEtPmN1c3RvbV9wcm92aWRlcikpOworCX0KKwogCS8qIElmIHlvdSBhZGQgbW9yZSBvcHRp b25zLCBjb25zaWRlciBpbmNyZWFzaW5nIE1BWF9IQkFfT1BUSU9OUy4gKi8KIAlBc3NlcnQobm9w dGlvbnMgPD0gTUFYX0hCQV9PUFRJT05TKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGli cHEvYXV0aC5oIGIvc3JjL2luY2x1ZGUvbGlicHEvYXV0aC5oCmluZGV4IDZkN2VlMWFjYjkuLjFk MTBjY2NjMWIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2xpYnBxL2F1dGguaAorKysgYi9zcmMv aW5jbHVkZS9saWJwcS9hdXRoLmgKQEAgLTIzLDkgKzIzLDM2IEBAIGV4dGVybiBjaGFyICpwZ19r cmJfcmVhbG07CiBleHRlcm4gdm9pZCBDbGllbnRBdXRoZW50aWNhdGlvbihQb3J0ICpwb3J0KTsK IGV4dGVybiB2b2lkIHNlbmRBdXRoUmVxdWVzdChQb3J0ICpwb3J0LCBBdXRoUmVxdWVzdCBhcmVx LCBjb25zdCBjaGFyICpleHRyYWRhdGEsCiAJCQkJCQkJaW50IGV4dHJhbGVuKTsKK2V4dGVybiB2 b2lkIHNldF9hdXRobl9pZChQb3J0ICpwb3J0LCBjb25zdCBjaGFyICppZCk7CitleHRlcm4gY2hh ciAqcmVjdl9wYXNzd29yZF9wYWNrZXQoUG9ydCAqcG9ydCk7CiAKIC8qIEhvb2sgZm9yIHBsdWdp bnMgdG8gZ2V0IGNvbnRyb2wgaW4gQ2xpZW50QXV0aGVudGljYXRpb24oKSAqLwordHlwZWRlZiBp bnQgKCpDdXN0b21BdXRoZW50aWNhdGlvbkNoZWNrX2hvb2tfdHlwZSkgKFBvcnQgKik7CiB0eXBl ZGVmIHZvaWQgKCpDbGllbnRBdXRoZW50aWNhdGlvbl9ob29rX3R5cGUpIChQb3J0ICosIGludCk7 CiBleHRlcm4gUEdETExJTVBPUlQgQ2xpZW50QXV0aGVudGljYXRpb25faG9va190eXBlIENsaWVu dEF1dGhlbnRpY2F0aW9uX2hvb2s7CiAKKy8qIEhvb2sgZm9yIHBsdWdpbnMgdG8gcmVwb3J0IGVy cm9yIG1lc3NhZ2VzIGluIGF1dGhfZmFpbGVkKCkgKi8KK3R5cGVkZWYgY29uc3QgY2hhciAqICgq Q3VzdG9tQXV0aGVudGljYXRpb25FcnJvcl9ob29rX3R5cGUpIChQb3J0ICopOworCitleHRlcm4g dm9pZCBSZWdpc3RlckF1dGhQcm92aWRlcgorCQkoY29uc3QgY2hhciAqcHJvdmlkZXJfbmFtZSwK KwkJIEN1c3RvbUF1dGhlbnRpY2F0aW9uQ2hlY2tfaG9va190eXBlIEN1c3RvbUF1dGhlbnRpY2F0 aW9uQ2hlY2tfaG9vaywKKwkJIEN1c3RvbUF1dGhlbnRpY2F0aW9uRXJyb3JfaG9va190eXBlIEN1 c3RvbUF1dGhlbnRpY2F0aW9uRXJyb3JfaG9vayk7CisKKy8qCisgKiBNYXhpbXVtIGFjY2VwdGVk IHNpemUgb2YgR1NTIGFuZCBTU1BJIGF1dGhlbnRpY2F0aW9uIHRva2Vucy4KKyAqIFdlIGFsc28g dXNlIHRoaXMgYXMgYSBsaW1pdCBvbiBvcmRpbmFyeSBwYXNzd29yZCBwYWNrZXQgbGVuZ3Rocy4K KyAqCisgKiBLZXJiZXJvcyB0aWNrZXRzIGFyZSB1c3VhbGx5IHF1aXRlIHNtYWxsLCBidXQgdGhl IFRHVHMgaXNzdWVkIGJ5IFdpbmRvd3MKKyAqIGRvbWFpbiBjb250cm9sbGVycyBpbmNsdWRlIGFu IGF1dGhvcml6YXRpb24gZmllbGQga25vd24gYXMgdGhlIFByaXZpbGVnZQorICogQXR0cmlidXRl IENlcnRpZmljYXRlIChQQUMpLCB3aGljaCBjb250YWlucyB0aGUgdXNlcidzIFdpbmRvd3MgcGVy bWlzc2lvbnMKKyAqIChncm91cCBtZW1iZXJzaGlwcyBldGMuKS4gVGhlIFBBQyBpcyBjb3BpZWQg aW50byBhbGwgdGlja2V0cyBvYnRhaW5lZCBvbgorICogdGhlIGJhc2lzIG9mIHRoaXMgVEdUIChl dmVuIHRob3NlIGlzc3VlZCBieSBVbml4IHJlYWxtcyB3aGljaCB0aGUgV2luZG93cworICogcmVh bG0gdHJ1c3RzKSwgYW5kIGNhbiBiZSBzZXZlcmFsIGtCIGluIHNpemUuIFRoZSBtYXhpbXVtIHRv a2VuIHNpemUKKyAqIGFjY2VwdGVkIGJ5IFdpbmRvd3Mgc3lzdGVtcyBpcyBkZXRlcm1pbmVkIGJ5 IHRoZSBNYXhBdXRoVG9rZW4gV2luZG93cworICogcmVnaXN0cnkgc2V0dGluZy4gTWljcm9zb2Z0 IHJlY29tbWVuZHMgdGhhdCBpdCBpcyBub3Qgc2V0IGhpZ2hlciB0aGFuCisgKiA2NTUzNSBieXRl cywgc28gdGhhdCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBsaW1pdCBmb3IgdXMgYXMgd2VsbC4K KyAqLworI2RlZmluZSBQR19NQVhfQVVUSF9UT0tFTl9MRU5HVEgJNjU1MzUKKwogI2VuZGlmCQkJ CQkJCS8qIEFVVEhfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGlicHEvaGJhLmggYi9z cmMvaW5jbHVkZS9saWJwcS9oYmEuaAppbmRleCA4ZDlmMzgyMWIxLi5jNWFlZjY5OTRjIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9saWJwcS9oYmEuaAorKysgYi9zcmMvaW5jbHVkZS9saWJwcS9o YmEuaApAQCAtMzgsNiArMzgsNyBAQCB0eXBlZGVmIGVudW0gVXNlckF1dGgKIAl1YUxEQVAsCiAJ dWFDZXJ0LAogCXVhUkFESVVTLAorCXVhQ3VzdG9tLAogCXVhUGVlcgogI2RlZmluZSBVU0VSX0FV VEhfTEFTVCB1YVBlZXIJLyogTXVzdCBiZSBsYXN0IHZhbHVlIG9mIHRoaXMgZW51bSAqLwogfSBV c2VyQXV0aDsKQEAgLTEyMCw2ICsxMjEsNyBAQCB0eXBlZGVmIHN0cnVjdCBIYmFMaW5lCiAJY2hh cgkgICAqcmFkaXVzaWRlbnRpZmllcnNfczsKIAlMaXN0CSAgICpyYWRpdXNwb3J0czsKIAljaGFy CSAgICpyYWRpdXNwb3J0c19zOworCWNoYXIJICAgKmN1c3RvbV9wcm92aWRlcjsKIH0gSGJhTGlu ZTsKIAogdHlwZWRlZiBzdHJ1Y3QgSWRlbnRMaW5lCkBAIC0xNDQsNCArMTQ2LDYgQEAgZXh0ZXJu IGludAljaGVja191c2VybWFwKGNvbnN0IGNoYXIgKnVzZXJtYXBfbmFtZSwKIAkJCQkJCSAgYm9v bCBjYXNlX3NlbnNpdGl2ZSk7CiBleHRlcm4gYm9vbCBwZ19pc2JsYW5rKGNvbnN0IGNoYXIgYyk7 CiAKK2V4dGVybiBjaGFyICpjdXN0b21fcHJvdmlkZXJfbmFtZTsKKwogI2VuZGlmCQkJCQkJCS8q IEhCQV9IICovCi0tIAoyLjI1LjEKCg== --_010_0e86fe7e3534fb05db02379fed404a2010eb1d62camelvmwarecom_ Content-Type: text/x-patch; name="v3-0002-Add-sample-extension-to-test-custom-auth-provider.patch" Content-Description: v3-0002-Add-sample-extension-to-test-custom-auth-provider.patch Content-Disposition: attachment; filename="v3-0002-Add-sample-extension-to-test-custom-auth-provider.patch"; size=3736; creation-date="Fri, 04 Mar 2022 19:13:41 GMT"; modification-date="Fri, 04 Mar 2022 19:13:41 GMT" Content-ID: <5E93FD71D0DF3C4ABBFA18A76C58EC6A@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 RnJvbSA5M2IxMDgzMzRmYTlmY2MyZDVmNjhkNzVmYzMyMGNkMjcxNGViOWRhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1heSBTaGFybWEgPHNtaWxpbmdzYW1heUBnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgMTUgRmViIDIwMjIgMjI6Mjg6NDAgLTA4MDAKU3ViamVjdDogW1BBVENIIHYz IDIvOV0gQWRkIHNhbXBsZSBleHRlbnNpb24gdG8gdGVzdCBjdXN0b20gYXV0aCBwcm92aWRlcgog aG9va3MKClRoaXMgY2hhbmdlIGFkZHMgYSBuZXcgZXh0ZW5zaW9uIHRvIHNyYy90ZXN0L21vZHVs ZXMgdG8KdGVzdCB0aGUgY3VzdG9tIGF1dGhlbnRpY2F0aW9uIHByb3ZpZGVyIGhvb2tzLiBJbiB0 aGlzCmV4dGVuc2lvbiwgd2UgdXNlIGFuIGFycmF5IHRvIGRlZmluZSB3aGljaCB1c2VycyB0bwph dXRoZW50aWNhdGUgYW5kIHdoYXQgcGFzc3dvcmRzIHRvIHVzZS4KLS0tCiBzcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfYXV0aF9wcm92aWRlci9NYWtlZmlsZSAgfCAxNiArKysrCiAuLi4vdGVzdF9hdXRo X3Byb3ZpZGVyL3Rlc3RfYXV0aF9wcm92aWRlci5jICAgfCA5MCArKysrKysrKysrKysrKysrKysr CiAyIGZpbGVzIGNoYW5nZWQsIDEwNiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2F1dGhfcHJvdmlkZXIvTWFrZWZpbGUKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYXV0aF9wcm92aWRlci90ZXN0X2F1dGhfcHJv dmlkZXIuYwoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9hdXRoX3Byb3ZpZGVy L01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2F1dGhfcHJvdmlkZXIvTWFrZWZpbGUK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMTc5NzFhNWM3YQotLS0gL2Rl di9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9hdXRoX3Byb3ZpZGVyL01ha2VmaWxl CkBAIC0wLDAgKzEsMTYgQEAKKyMgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2F1dGhfcHJvdmlkZXIv TWFrZWZpbGUKKworTU9EVUxFX2JpZyA9IHRlc3RfYXV0aF9wcm92aWRlcgorT0JKUyA9IHRlc3Rf YXV0aF9wcm92aWRlci5vCitQR0ZJTEVERVNDID0gInRlc3RfYXV0aF9wcm92aWRlciAtIHByb3Zp ZGVyIHRvIHRlc3QgYXV0aCBob29rcyIKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NPTkZJRyA9IHBn X2NvbmZpZworUEdYUyA6PSAkKHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitpbmNsdWRlICQo UEdYUykKK2Vsc2UKK3N1YmRpciA9IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9hdXRoX3Byb3ZpZGVy Cit0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLi8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3Jj L01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbnRyaWIvY29udHJpYi1n bG9iYWwubWsKK2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYXV0aF9w cm92aWRlci90ZXN0X2F1dGhfcHJvdmlkZXIuYyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9hdXRo X3Byb3ZpZGVyL3Rlc3RfYXV0aF9wcm92aWRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAuLjQ3N2VmOGIyYzMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfYXV0aF9wcm92aWRlci90ZXN0X2F1dGhfcHJvdmlkZXIuYwpAQCAtMCwwICsxLDkw IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogdGVzdF9hdXRoX3Byb3ZpZGVyLmMKKyAq CQkJZXhhbXBsZSBhdXRoZW50aWNhdGlvbiBwcm92aWRlciBwbHVnaW4JCQorICoKKyAqIENvcHly aWdodCAoYykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisg KiBJREVOVElGSUNBVElPTgorICoJCWNvbnRyaWIvdGVzdF9hdXRoX3Byb3ZpZGVyL3Rlc3RfYXV0 aF9wcm92aWRlci5jCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJw b3N0Z3Jlcy5oIgorI2luY2x1ZGUgImZtZ3IuaCIKKyNpbmNsdWRlICJsaWJwcS9hdXRoLmgiCisj aW5jbHVkZSAibGlicHEvbGlicHEuaCIKKworUEdfTU9EVUxFX01BR0lDOworCit2b2lkIF9QR19p bml0KHZvaWQpOworCitzdGF0aWMgY2hhciAqZ2V0X3Bhc3N3b3JkX2Zvcl91c2VyKGNoYXIgKnVz ZXJfbmFtZSk7CisKKy8qCisgKiBMaXN0IG9mIHVzZXJuYW1lcyAvIHBhc3N3b3JkcyB0byBhcHBy b3ZlLiBIZXJlIHdlIGFyZSBub3QKKyAqIGdldHRpbmcgcGFzc3dvcmRzIGZyb20gUG9zdGdyZXMg YnV0IGZyb20gdGhpcyBsaXN0LiBJbiBhIG1vcmUgcmVhbC1saWZlCisgKiBleHRlbnNpb24sIHlv dSBjYW4gZmV0Y2ggdmFsaWQgY3JlZGVudGlhbHMgYW5kIGF1dGhlbnRpY2F0aW9uIHRva2VucyAv CisgKiBwYXNzd29yZHMgZnJvbSBhbiBleHRlcm5hbCBhdXRoZW50aWNhdGlvbiBwcm92aWRlci4K KyAqLworY2hhciBjcmVkZW50aWFsc1szXVszXVs1MF0gPSB7CisJeyJib2IiLCJhbGljZSIsImNh cm9sIn0sCisJeyJib2IxMjMiLCJhbGljZTEyMyIsImNhcm9sMTIzIn0KK307CisKK3N0YXRpYyBp bnQgVGVzdEF1dGhlbnRpY2F0aW9uQ2hlY2soUG9ydCAqcG9ydCkKK3sKKwljaGFyICpwYXNzd2Q7 CisJaW50IHJlc3VsdCA9IFNUQVRVU19FUlJPUjsKKwljaGFyICpyZWFsX3Bhc3M7CisKKwlzZW5k QXV0aFJlcXVlc3QocG9ydCwgQVVUSF9SRVFfUEFTU1dPUkQsIE5VTEwsIDApOworCisJcGFzc3dk ID0gcmVjdl9wYXNzd29yZF9wYWNrZXQocG9ydCk7CisJaWYgKHBhc3N3ZCA9PSBOVUxMKQorCQly ZXR1cm4gU1RBVFVTX0VPRjsKKwkJCisJcmVhbF9wYXNzID0gZ2V0X3Bhc3N3b3JkX2Zvcl91c2Vy KHBvcnQtPnVzZXJfbmFtZSk7CisJaWYgKHJlYWxfcGFzcykKKwl7CisJCWlmKHN0cmNtcChwYXNz d2QsIHJlYWxfcGFzcykgPT0gMCkKKwkJeworCQkJcmVzdWx0ID0gU1RBVFVTX09LOworCQl9CisJ CXBmcmVlKHJlYWxfcGFzcyk7CisJfQorCisJcGZyZWUocGFzc3dkKTsKKworCXJldHVybiByZXN1 bHQ7Cit9CisKK3N0YXRpYyBjaGFyICoKK2dldF9wYXNzd29yZF9mb3JfdXNlcihjaGFyICp1c2Vy X25hbWUpCit7CisJY2hhciAqcGFzc3dvcmQgPSBOVUxMOworCWludCBpOworCWZvciAoaT0wOyBp PDM7IGkrKykKKwl7CisJCWlmIChzdHJjbXAodXNlcl9uYW1lLCBjcmVkZW50aWFsc1swXVtpXSkg PT0gMCkKKwkJeworCQkJcGFzc3dvcmQgPSBwc3RyZHVwKGNyZWRlbnRpYWxzWzFdW2ldKTsKKwkJ fQorCX0KKworCXJldHVybiBwYXNzd29yZDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKlRlc3RB dXRoZW50aWNhdGlvbkVycm9yKFBvcnQgKnBvcnQpCit7CisJY2hhciAqZXJyb3JfbWVzc2FnZSA9 IChjaGFyICopcGFsbG9jICgxMDApOworCXNwcmludGYoZXJyb3JfbWVzc2FnZSwgIlRlc3QgYXV0 aGVudGljYXRpb24gZmFpbGVkIGZvciB1c2VyICVzIiwgcG9ydC0+dXNlcl9uYW1lKTsKKwlyZXR1 cm4gZXJyb3JfbWVzc2FnZTsKK30KKwordm9pZAorX1BHX2luaXQodm9pZCkKK3sKKwlSZWdpc3Rl ckF1dGhQcm92aWRlcigidGVzdCIsIFRlc3RBdXRoZW50aWNhdGlvbkNoZWNrLCBUZXN0QXV0aGVu dGljYXRpb25FcnJvcik7Cit9Ci0tIAoyLjI1LjEKCg== --_010_0e86fe7e3534fb05db02379fed404a2010eb1d62camelvmwarecom_ Content-Type: text/x-patch; name="v3-0003-Add-tests-for-test_auth_provider-extension.patch" Content-Description: v3-0003-Add-tests-for-test_auth_provider-extension.patch Content-Disposition: attachment; filename="v3-0003-Add-tests-for-test_auth_provider-extension.patch"; size=6264; creation-date="Fri, 04 Mar 2022 19:13:41 GMT"; modification-date="Fri, 04 Mar 2022 19:13:41 GMT" Content-ID: <6D21E1E7F48BE241B2F2F1722D14191E@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 RnJvbSAzYWEyNTM1ZmE0MmIxNDJiZWFiZGNlZjIzNGQxOTM5NzM4ZjM2YjlhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1heSBTaGFybWEgPHNtaWxpbmdzYW1heUBnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMTYgRmViIDIwMjIgMTI6Mjg6MzYgLTA4MDAKU3ViamVjdDogW1BBVENIIHYz IDMvOV0gQWRkIHRlc3RzIGZvciB0ZXN0X2F1dGhfcHJvdmlkZXIgZXh0ZW5zaW9uCgpBZGQgdGFw IHRlc3RzIGZvciB0ZXN0X2F1dGhfcHJvdmlkZXIgZXh0ZW5zaW9uIGFsbG93IG1ha2UgY2hlY2sg aW4Kc3JjL3Rlc3QvbW9kdWxlcyB0byBydW4gdGhlbS4KLS0tCiBzcmMvdGVzdC9tb2R1bGVzL01h a2VmaWxlICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2F1dGhfcHJvdmlkZXIvTWFrZWZpbGUgIHwgICAyICsKIC4uLi90ZXN0X2F1dGhfcHJvdmlkZXIv dC8wMDFfY3VzdG9tX2F1dGgucGwgICB8IDEyNSArKysrKysrKysrKysrKysrKysKIDMgZmlsZXMg Y2hhbmdlZCwgMTI4IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9t b2R1bGVzL3Rlc3RfYXV0aF9wcm92aWRlci90LzAwMV9jdXN0b21fYXV0aC5wbAoKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxl CmluZGV4IGRmZmM3OWIyZDkuLmY1NjUzM2VhMTMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVs ZXMvTWFrZWZpbGUKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQpAQCAtMTQsNiArMTQs NyBAQCBTVUJESVJTID0gXAogCQkgIHBsc2FtcGxlIFwKIAkJICBzbmFwc2hvdF90b29fb2xkIFwK IAkJICBzcGdpc3RfbmFtZV9vcHMgXAorCQkgIHRlc3RfYXV0aF9wcm92aWRlciBcCiAJCSAgdGVz dF9ibG9vbWZpbHRlciBcCiAJCSAgdGVzdF9kZGxfZGVwYXJzZSBcCiAJCSAgdGVzdF9leHRlbnNp b25zIFwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9hdXRoX3Byb3ZpZGVyL01h a2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2F1dGhfcHJvdmlkZXIvTWFrZWZpbGUKaW5k ZXggMTc5NzFhNWM3YS4uN2Q2MDFjZjdkNSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2F1dGhfcHJvdmlkZXIvTWFrZWZpbGUKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2F1 dGhfcHJvdmlkZXIvTWFrZWZpbGUKQEAgLTQsNiArNCw4IEBAIE1PRFVMRV9iaWcgPSB0ZXN0X2F1 dGhfcHJvdmlkZXIKIE9CSlMgPSB0ZXN0X2F1dGhfcHJvdmlkZXIubwogUEdGSUxFREVTQyA9ICJ0 ZXN0X2F1dGhfcHJvdmlkZXIgLSBwcm92aWRlciB0byB0ZXN0IGF1dGggaG9va3MiCiAKK1RBUF9U RVNUUyA9IDEKKwogaWZkZWYgVVNFX1BHWFMKIFBHX0NPTkZJRyA9IHBnX2NvbmZpZwogUEdYUyA6 PSAkKHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfYXV0aF9wcm92aWRlci90LzAwMV9jdXN0b21fYXV0aC5wbCBiL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9hdXRoX3Byb3ZpZGVyL3QvMDAxX2N1c3RvbV9hdXRoLnBsCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjNiNzQ3MmRjN2YKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYXV0aF9wcm92aWRlci90LzAwMV9jdXN0b21fYXV0aC5w bApAQCAtMCwwICsxLDEyNSBAQAorCisjIENvcHlyaWdodCAoYykgMjAyMS0yMDIyLCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjIFNldCBvZiB0ZXN0cyBmb3IgdGVzdGlu ZyBjdXN0b20gYXV0aGVudGljYXRpb24gaG9va3MuCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2Fybmlu Z3M7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0 OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCisjIERlbGV0ZSBwZ19oYmEuY29uZiBmcm9tIHRo ZSBnaXZlbiBub2RlLCBhZGQgYSBuZXcgZW50cnkgdG8gaXQKKyMgYW5kIHRoZW4gZXhlY3V0ZSBh IHJlbG9hZCB0byByZWZyZXNoIGl0Lgorc3ViIHJlc2V0X3BnX2hiYQoreworCW15ICRub2RlICAg ICAgID0gc2hpZnQ7CisJbXkgJGhiYV9tZXRob2QgPSBzaGlmdDsKKworCXVubGluaygkbm9kZS0+ ZGF0YV9kaXIgLiAnL3BnX2hiYS5jb25mJyk7CisJIyBqdXN0IGZvciB0ZXN0aW5nIHB1cnBvc2Vz LCB1c2UgYSBjb250aW51YXRpb24gbGluZQorCSRub2RlLT5hcHBlbmRfY29uZigncGdfaGJhLmNv bmYnLCAibG9jYWwgYWxsIGFsbFxcXG4gJGhiYV9tZXRob2QiKTsKKwkkbm9kZS0+cmVsb2FkOwor CXJldHVybjsKK30KKworIyBUZXN0IGlmIHlvdSBnZXQgZXhwZWN0ZWQgcmVzdWx0cyBpbiBwZ19o YmFfZmlsZV9ydWxlcyBlcnJvciBjb2x1bW4gYWZ0ZXIKKyMgY2hhbmdpbmcgcGdfaGJhLmNvbmYg YW5kIHJlbG9hZGluZyBpdC4KK3N1YiB0ZXN0X2hiYV9yZWxvYWQKK3sKKwlteSAoJG5vZGUsICRt ZXRob2QsICRleHBlY3RlZF9yZXMpID0gQF87CisJbXkgJHN0YXR1c19zdHJpbmcgPSAnZmFpbGVk JzsKKwkkc3RhdHVzX3N0cmluZyA9ICdzdWNjZXNzJyBpZiAoJGV4cGVjdGVkX3JlcyBlcSAwKTsK KwlteSAkdGVzdG5hbWUgPSAicGdfaGJhLmNvbmYgcmVsb2FkICRzdGF0dXNfc3RyaW5nIGZvciBt ZXRob2QgJG1ldGhvZCI7CisKKwlyZXNldF9wZ19oYmEoJG5vZGUsICRtZXRob2QpOworCisJbXkg KCRjbWRyZXQsICRzdGRvdXQsICRzdGRlcnIpID0gJG5vZGUtPnBzcWwoInBvc3RncmVzIiwKKwkJ InNlbGVjdCBjb3VudCgqKSBmcm9tIHBnX2hiYV9maWxlX3J1bGVzIHdoZXJlIGVycm9yIGlzIG5v dCBudWxsIixleHRyYV9wYXJhbXMgPT4gWyctVScsJ2JvYiddKTsKKworCWlzKCRzdGRvdXQsICRl eHBlY3RlZF9yZXMsICR0ZXN0bmFtZSk7Cit9CisKKyMgVGVzdCBhY2Nlc3MgZm9yIGEgc2luZ2xl IHJvbGUsIHVzZWZ1bCB0byB3cmFwIGFsbCB0ZXN0cyBpbnRvIG9uZS4gIEV4dHJhCisjIG5hbWVk IHBhcmFtZXRlcnMgYXJlIHBhc3NlZCB0byBjb25uZWN0X29rL2ZhaWxzIGFzLWlzLgorc3ViIHRl c3Rfcm9sZQoreworCWxvY2FsICRUZXN0OjpCdWlsZGVyOjpMZXZlbCA9ICRUZXN0OjpCdWlsZGVy OjpMZXZlbCArIDE7CisKKwlteSAoJG5vZGUsICRyb2xlLCAkbWV0aG9kLCAkZXhwZWN0ZWRfcmVz LCAlcGFyYW1zKSA9IEBfOworCW15ICRzdGF0dXNfc3RyaW5nID0gJ2ZhaWxlZCc7CisJJHN0YXR1 c19zdHJpbmcgPSAnc3VjY2VzcycgaWYgKCRleHBlY3RlZF9yZXMgZXEgMCk7CisKKwlteSAkY29u bnN0ciA9ICJ1c2VyPSRyb2xlIjsKKwlteSAkdGVzdG5hbWUgPQorCSAgImF1dGhlbnRpY2F0aW9u ICRzdGF0dXNfc3RyaW5nIGZvciBtZXRob2QgJG1ldGhvZCwgcm9sZSAkcm9sZSI7CisKKwlpZiAo JGV4cGVjdGVkX3JlcyBlcSAwKQorCXsKKwkJJG5vZGUtPmNvbm5lY3Rfb2soJGNvbm5zdHIsICR0 ZXN0bmFtZSwgJXBhcmFtcyk7CisJfQorCWVsc2UKKwl7CisJCSMgTm8gY2hlY2tzIG9mIHRoZSBl cnJvciBtZXNzYWdlLCBvbmx5IHRoZSBzdGF0dXMgY29kZS4KKwkJJG5vZGUtPmNvbm5lY3RfZmFp bHMoJGNvbm5zdHIsICR0ZXN0bmFtZSwgJXBhcmFtcyk7CisJfQorfQorCisjIEluaXRpYWxpemUg c2VydmVyIG5vZGUKK215ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdz ZXJ2ZXInKTsKKyRub2RlLT5pbml0OworJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNv bmYnLCAibG9nX2Nvbm5lY3Rpb25zID0gb25cbiIpOworJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0 Z3Jlc3FsLmNvbmYnLCAic2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzID0gJ3Rlc3RfYXV0aF9wcm92 aWRlci5zbydcbiIpOworJG5vZGUtPnN0YXJ0OworCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJDUkVBVEUgUk9MRSBib2IgU1VQRVJVU0VSIExPR0lOOyIpOworJG5vZGUtPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFJPTEUgYWxpY2UgTE9HSU47Iik7Ciskbm9kZS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgUk9MRSB0ZXN0IExPR0lOOyIpOworCisjIEFkZCBjdXN0 b20gYXV0aCBtZXRob2QgdG8gcGdfaGJhLmNvbmYKK3Jlc2V0X3BnX2hiYSgkbm9kZSwgJ2N1c3Rv bSBwcm92aWRlcj10ZXN0Jyk7CisKKyMgVGVzdCB0aGF0IHVzZXJzIGFyZSBhYmxlIHRvIGxvZ2lu IHdpdGggY29ycmVjdCBwYXNzd29yZHMuCiskRU5WeyJQR1BBU1NXT1JEIn0gPSAnYm9iMTIzJzsK K3Rlc3Rfcm9sZSgkbm9kZSwgJ2JvYicsICdjdXN0b20nLCAwLCBsb2dfbGlrZSA9PiBbcXIvY29u bmVjdGlvbiBhdXRob3JpemVkOiB1c2VyPWJvYi9dKTsKKyRFTlZ7IlBHUEFTU1dPUkQifSA9ICdh bGljZTEyMyc7Cit0ZXN0X3JvbGUoJG5vZGUsICdhbGljZScsICdjdXN0b20nLCAwLCBsb2dfbGlr ZSA9PiBbcXIvY29ubmVjdGlvbiBhdXRob3JpemVkOiB1c2VyPWFsaWNlL10pOworCisjIFRlc3Qg dGhhdCBiYWQgcGFzc3dvcmRzIGFyZSByZWplY3RlZC4KKyRFTlZ7IlBHUEFTU1dPUkQifSA9ICdi YWRwYXNzd29yZCc7Cit0ZXN0X3JvbGUoJG5vZGUsICdib2InLCAnY3VzdG9tJywgMiwgbG9nX3Vu bGlrZSA9PiBbcXIvY29ubmVjdGlvbiBhdXRob3JpemVkOi9dKTsKK3Rlc3Rfcm9sZSgkbm9kZSwg J2FsaWNlJywgJ2N1c3RvbScsIDIsIGxvZ191bmxpa2UgPT4gW3FyL2Nvbm5lY3Rpb24gYXV0aG9y aXplZDovXSk7CisKKyMgVGVzdCB0aGF0IHVzZXJzIG5vdCBpbiBhdXRoZW50aWNhdGlvbiBsaXN0 IGFyZSByZWplY3RlZC4KK3Rlc3Rfcm9sZSgkbm9kZSwgJ3Rlc3QnLCAnY3VzdG9tJywgMiwgbG9n X3VubGlrZSA9PiBbcXIvY29ubmVjdGlvbiBhdXRob3JpemVkOi9dKTsKKworJEVOVnsiUEdQQVNT V09SRCJ9ID0gJ2JvYjEyMyc7CisKKyMgVGVzdHMgZm9yIGludmFsaWQgYXV0aCBvcHRpb25zCisK KyMgVGVzdCB0aGF0IGFuIGluY29ycmVjdCBwcm92aWRlciBuYW1lIGlzIG5vdCBhY2NlcHRlZC4K K3Rlc3RfaGJhX3JlbG9hZCgkbm9kZSwgJ2N1c3RvbSBwcm92aWRlcj13cm9uZycsIDEpOworCisj IFRlc3QgdGhhdCBzcGVjaWZ5aW5nIHByb3ZpZGVyIG9wdGlvbiB3aXRoIGRpZmZlcmVudCBhdXRo IG1ldGhvZCBpcyBub3QgYWxsb3dlZC4KK3Rlc3RfaGJhX3JlbG9hZCgkbm9kZSwgJ3RydXN0IHBy b3ZpZGVyPXRlc3QnLCAxKTsKKworIyBUZXN0IHRoYXQgcHJvdmlkZXIgbmFtZSBpcyBhIG1hbmRh dG9yeSBvcHRpb24gZm9yIGN1c3RvbSBhdXRoLgordGVzdF9oYmFfcmVsb2FkKCRub2RlLCAnY3Vz dG9tJywgMSk7CisKKyMgVGVzdCB0aGF0IGNvcnJlY3QgcHJvdmlkZXIgbmFtZSBhbGxvd3MgcmVs b2FkIHRvIHN1Y2NlZWQuCit0ZXN0X2hiYV9yZWxvYWQoJG5vZGUsICdjdXN0b20gcHJvdmlkZXI9 dGVzdCcsIDApOworCisjIEN1c3RvbSBhdXRoIG1vZHVsZXMgcmVxdWlyZSBtZW50aW9uaW5nIGV4 dGVuc2lvbiBpbiBzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMuCisKKyMgUmVtb3ZlIGV4dGVuc2lv biBmcm9tIHNoYXJlZF9wcmVsb2FkX2xpYnJhcmllcyBhbmQgdHJ5IHRvIHJlc3RhcnQuCiskbm9k ZS0+YWRqdXN0X2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICdzaGFyZWRfcHJlbG9hZF9saWJyYXJp ZXMnLCAiJyciKTsKK2NvbW1hbmRfZmFpbHMoWydwZ19jdGwnLCAnLXcnLCAnLUQnLCAkbm9kZS0+ ZGF0YV9kaXIsICctbCcsICRub2RlLT5sb2dmaWxlLCAncmVzdGFydCddLCdyZXN0YXJ0IHdpdGgg ZW1wdHkgc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzIGZhaWxlZCcpOworCisjIEZpeCBzaGFyZWRf cHJlbG9hZF9saWJyYXJpZXMgYW5kIGNvbmZpcm0gdGhhdCB5b3UgY2FuIG5vdyByZXN0YXJ0Lgor JG5vZGUtPmFkanVzdF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAnc2hhcmVkX3ByZWxvYWRfbGli cmFyaWVzJywgIid0ZXN0X2F1dGhfcHJvdmlkZXIuc28nIik7Citjb21tYW5kX29rKFsncGdfY3Rs JywgJy13JywgJy1EJywgJG5vZGUtPmRhdGFfZGlyLCAnLWwnLCAkbm9kZS0+bG9nZmlsZSwnc3Rh cnQnXSwncmVzdGFydCB3aXRoIGNvcnJlY3Qgc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzIHN1Y2Nl ZWRlZCcpOworCisjIFRlc3QgdGhhdCB3ZSBjYW4gY29ubmVjdCBhZ2FpbgordGVzdF9yb2xlKCRu b2RlLCAnYm9iJywgJ2N1c3RvbScsIDAsIGxvZ19saWtlID0+IFtxci9jb25uZWN0aW9uIGF1dGhv cml6ZWQ6IHVzZXI9Ym9iL10pOworCitkb25lX3Rlc3RpbmcoKTsKLS0gCjIuMjUuMQoK --_010_0e86fe7e3534fb05db02379fed404a2010eb1d62camelvmwarecom_ Content-Type: text/x-patch; name="v3-0004-common-jsonapi-support-FRONTEND-clients.patch" Content-Description: v3-0004-common-jsonapi-support-FRONTEND-clients.patch Content-Disposition: attachment; filename="v3-0004-common-jsonapi-support-FRONTEND-clients.patch"; size=20884; creation-date="Fri, 04 Mar 2022 19:13:41 GMT"; modification-date="Fri, 04 Mar 2022 19:13:41 GMT" Content-ID: <2B941F7925702540A16ED4AEE2A6EDAE@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 RnJvbSAxM2JlZTQ5ZDhjNjc0ZTkyMTgwNGI0ZTZlZGMzNjNkY2YzMzIxMWNlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8cGNoYW1waW9uQHZtd2FyZS5jb20+ CkRhdGU6IE1vbiwgMyBNYXkgMjAyMSAxNTozODoyNiAtMDcwMApTdWJqZWN0OiBbUEFUQ0ggdjMg NC85XSBjb21tb24vanNvbmFwaTogc3VwcG9ydCBGUk9OVEVORCBjbGllbnRzCgpCYXNlZCBvbiBh IHBhdGNoIGJ5IE1pY2hhZWwgUGFxdWllci4KCkZvciBmcm9udGVuZCBjb2RlLCB1c2UgUFFFeHBC dWZmZXIgaW5zdGVhZCBvZiBTdHJpbmdJbmZvLiBUaGlzIHJlcXVpcmVzCnVzIHRvIHRyYWNrIGFs bG9jYXRpb24gZmFpbHVyZXMgc28gdGhhdCB3ZSBjYW4gcmV0dXJuIEpTT05fT1VUX09GX01FTU9S WQphcyBuZWVkZWQuIGpzb25fZXJyZGV0YWlsKCkgbm93IGFsbG9jYXRlcyBpdHMgZXJyb3IgbWVz c2FnZSBpbnNpZGUKbWVtb3J5IG93bmVkIGJ5IHRoZSBKc29uTGV4Q29udGV4dCwgc28gY2xpZW50 cyBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0CmZyZWVpbmcgaXQuCgpGb3IgY29udmVuaWVuY2Us IHRoZSBiYWNrZW5kIG5vdyBoYXMgZGVzdHJveUpzb25MZXhDb250ZXh0KCkgdG8gbWlycm9yCm90 aGVyIGNyZWF0ZS9kZXN0cm95IEFQSXMuIFRoZSBmcm9udGVuZCBoYXMgaW5pdC90ZXJtIHZlcnNp b25zIG9mIHRoZQpBUEkgdG8gaGFuZGxlIHN0YWNrLWFsbG9jYXRlZCBKc29uTGV4Q29udGV4dHMu CgpXZSBjYW4gbm93IHBhcnRpYWxseSByZXZlcnQgYjQ0NjY5YjJjYSwgbm93IHRoYXQganNvbl9l cnJkZXRhaWwoKSB3b3Jrcwpjb3JyZWN0bHkuCi0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pz b25mdW5jcy5jICAgICAgICAgICAgIHwgICA0ICstCiBzcmMvYmluL3BnX3ZlcmlmeWJhY2t1cC9w YXJzZV9tYW5pZmVzdC5jICAgICAgfCAgMTMgKy0KIHNyYy9iaW4vcGdfdmVyaWZ5YmFja3VwL3Qv MDA1X2JhZF9tYW5pZmVzdC5wbCB8ICAgMiArLQogc3JjL2NvbW1vbi9NYWtlZmlsZSAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvY29tbW9uL2pzb25hcGkuYyAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAyOTAgKysrKysrKysrKysrKy0tLS0tCiBzcmMvaW5jbHVkZS9j b21tb24vanNvbmFwaS5oICAgICAgICAgICAgICAgICAgfCAgNDcgKystCiA2IGZpbGVzIGNoYW5n ZWQsIDI3MCBpbnNlcnRpb25zKCspLCA4OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNv bmZ1bmNzLmMKaW5kZXggMjQ1NzA2MWY5Ny4uZjU4MjMzY2RhOSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2pzb25mdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9q c29uZnVuY3MuYwpAQCAtNzIzLDkgKzcyMyw3IEBAIGpzb25fb2JqZWN0X2tleXMoUEdfRlVOQ1RJ T05fQVJHUykKIAkJcGdfcGFyc2VfanNvbl9vcl9lcmVwb3J0KGxleCwgc2VtKTsKIAkJLyoga2V5 cyBhcmUgbm93IGluIHN0YXRlLT5yZXN1bHQgKi8KIAotCQlwZnJlZShsZXgtPnN0cnZhbC0+ZGF0 YSk7Ci0JCXBmcmVlKGxleC0+c3RydmFsKTsKLQkJcGZyZWUobGV4KTsKKwkJZGVzdHJveUpzb25M ZXhDb250ZXh0KGxleCk7CiAJCXBmcmVlKHNlbSk7CiAKIAkJTWVtb3J5Q29udGV4dFN3aXRjaFRv KG9sZGNvbnRleHQpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvcGFyc2Vf bWFuaWZlc3QuYyBiL3NyYy9iaW4vcGdfdmVyaWZ5YmFja3VwL3BhcnNlX21hbmlmZXN0LmMKaW5k ZXggNjM2NGIwMTI4Mi4uNGIzOGZkMzk2MyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ192ZXJpZnli YWNrdXAvcGFyc2VfbWFuaWZlc3QuYworKysgYi9zcmMvYmluL3BnX3ZlcmlmeWJhY2t1cC9wYXJz ZV9tYW5pZmVzdC5jCkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZAoganNvbl9wYXJzZV9tYW5pZmVz dChKc29uTWFuaWZlc3RQYXJzZUNvbnRleHQgKmNvbnRleHQsIGNoYXIgKmJ1ZmZlciwKIAkJCQkJ c2l6ZV90IHNpemUpCiB7Ci0JSnNvbkxleENvbnRleHQgKmxleDsKKwlKc29uTGV4Q29udGV4dCBs ZXggPSB7MH07CiAJSnNvblBhcnNlRXJyb3JUeXBlIGpzb25fZXJyb3I7CiAJSnNvblNlbUFjdGlv biBzZW07CiAJSnNvbk1hbmlmZXN0UGFyc2VTdGF0ZSBwYXJzZTsKQEAgLTEyOSw4ICsxMjksOCBA QCBqc29uX3BhcnNlX21hbmlmZXN0KEpzb25NYW5pZmVzdFBhcnNlQ29udGV4dCAqY29udGV4dCwg Y2hhciAqYnVmZmVyLAogCXBhcnNlLnN0YXRlID0gSk1fRVhQRUNUX1RPUExFVkVMX1NUQVJUOwog CXBhcnNlLnNhd192ZXJzaW9uX2ZpZWxkID0gZmFsc2U7CiAKLQkvKiBDcmVhdGUgYSBKU09OIGxl eGluZyBjb250ZXh0LiAqLwotCWxleCA9IG1ha2VKc29uTGV4Q29udGV4dENzdHJpbmdMZW4oYnVm ZmVyLCBzaXplLCBQR19VVEY4LCB0cnVlKTsKKwkvKiBJbml0aWFsaXplIGEgSlNPTiBsZXhpbmcg Y29udGV4dC4gKi8KKwlpbml0SnNvbkxleENvbnRleHRDc3RyaW5nTGVuKCZsZXgsIGJ1ZmZlciwg c2l6ZSwgUEdfVVRGOCwgdHJ1ZSk7CiAKIAkvKiBTZXQgdXAgc2VtYW50aWMgYWN0aW9ucy4gKi8K IAlzZW0uc2Vtc3RhdGUgPSAmcGFyc2U7CkBAIC0xNDUsMTQgKzE0NSwxNyBAQCBqc29uX3BhcnNl X21hbmlmZXN0KEpzb25NYW5pZmVzdFBhcnNlQ29udGV4dCAqY29udGV4dCwgY2hhciAqYnVmZmVy LAogCXNlbS5zY2FsYXIgPSBqc29uX21hbmlmZXN0X3NjYWxhcjsKIAogCS8qIFJ1biB0aGUgYWN0 dWFsIEpTT04gcGFyc2VyLiAqLwotCWpzb25fZXJyb3IgPSBwZ19wYXJzZV9qc29uKGxleCwgJnNl bSk7CisJanNvbl9lcnJvciA9IHBnX3BhcnNlX2pzb24oJmxleCwgJnNlbSk7CiAJaWYgKGpzb25f ZXJyb3IgIT0gSlNPTl9TVUNDRVNTKQotCQlqc29uX21hbmlmZXN0X3BhcnNlX2ZhaWx1cmUoY29u dGV4dCwgInBhcnNpbmcgZmFpbGVkIik7CisJCWpzb25fbWFuaWZlc3RfcGFyc2VfZmFpbHVyZShj b250ZXh0LCBqc29uX2VycmRldGFpbChqc29uX2Vycm9yLCAmbGV4KSk7CiAJaWYgKHBhcnNlLnN0 YXRlICE9IEpNX0VYUEVDVF9FT0YpCiAJCWpzb25fbWFuaWZlc3RfcGFyc2VfZmFpbHVyZShjb250 ZXh0LCAibWFuaWZlc3QgZW5kZWQgdW5leHBlY3RlZGx5Iik7CiAKIAkvKiBWZXJpZnkgdGhlIG1h bmlmZXN0IGNoZWNrc3VtLiAqLwogCXZlcmlmeV9tYW5pZmVzdF9jaGVja3N1bSgmcGFyc2UsIGJ1 ZmZlciwgc2l6ZSk7CisKKwkvKiBDbGVhbiB1cC4gKi8KKwl0ZXJtSnNvbkxleENvbnRleHQoJmxl eCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3ZlcmlmeWJhY2t1cC90LzAwNV9i YWRfbWFuaWZlc3QucGwgYi9zcmMvYmluL3BnX3ZlcmlmeWJhY2t1cC90LzAwNV9iYWRfbWFuaWZl c3QucGwKaW5kZXggMTE4YmViNTNkNy4uZjI2OTI5NzJmZSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w Z192ZXJpZnliYWNrdXAvdC8wMDVfYmFkX21hbmlmZXN0LnBsCisrKyBiL3NyYy9iaW4vcGdfdmVy aWZ5YmFja3VwL3QvMDA1X2JhZF9tYW5pZmVzdC5wbApAQCAtMTYsNyArMTYsNyBAQCBteSAkdGVt cGRpciA9IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0ZW1wZGlyOwogCiB0ZXN0X2JhZF9tYW5p ZmVzdCgKIAknaW5wdXQgc3RyaW5nIGVuZGVkIHVuZXhwZWN0ZWRseScsCi0JcXIvY291bGQgbm90 IHBhcnNlIGJhY2t1cCBtYW5pZmVzdDogcGFyc2luZyBmYWlsZWQvLAorCXFyL2NvdWxkIG5vdCBw YXJzZSBiYWNrdXAgbWFuaWZlc3Q6IFRoZSBpbnB1dCBzdHJpbmcgZW5kZWQgdW5leHBlY3RlZGx5 LywKIAk8PEVPTSk7CiB7CiBFT00KZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vTWFrZWZpbGUgYi9z cmMvY29tbW9uL01ha2VmaWxlCmluZGV4IDMxYzBkZDM2NmQuLjhlOGIyNzU0NmUgMTAwNjQ0Ci0t LSBhL3NyYy9jb21tb24vTWFrZWZpbGUKKysrIGIvc3JjL2NvbW1vbi9NYWtlZmlsZQpAQCAtNDAs NyArNDAsNyBAQCBvdmVycmlkZSBDUFBGTEFHUyArPSAtRFZBTF9MREZMQUdTX0VYPSJcIiQoTERG TEFHU19FWClcIiIKIG92ZXJyaWRlIENQUEZMQUdTICs9IC1EVkFMX0xERkxBR1NfU0w9IlwiJChM REZMQUdTX1NMKVwiIgogb3ZlcnJpZGUgQ1BQRkxBR1MgKz0gLURWQUxfTElCUz0iXCIkKExJQlMp XCIiCiAKLW92ZXJyaWRlIENQUEZMQUdTIDo9IC1ERlJPTlRFTkQgLUkuIC1JJCh0b3Bfc3JjZGly KS9zcmMvY29tbW9uICQoQ1BQRkxBR1MpCitvdmVycmlkZSBDUFBGTEFHUyA6PSAtREZST05URU5E IC1JLiAtSSQodG9wX3NyY2Rpcikvc3JjL2NvbW1vbiAtSSQobGlicHFfc3JjZGlyKSAkKENQUEZM QUdTKQogTElCUyArPSAkKFBUSFJFQURfTElCUykKIAogIyBJZiB5b3UgYWRkIG9iamVjdHMgaGVy ZSwgc2VlIGFsc28gc3JjL3Rvb2xzL21zdmMvTWt2Y2J1aWxkLnBtCmRpZmYgLS1naXQgYS9zcmMv Y29tbW9uL2pzb25hcGkuYyBiL3NyYy9jb21tb24vanNvbmFwaS5jCmluZGV4IDY2NjYwNzdhOTMu LjdmYzVlYWY0NjAgMTAwNjQ0Ci0tLSBhL3NyYy9jb21tb24vanNvbmFwaS5jCisrKyBiL3NyYy9j b21tb24vanNvbmFwaS5jCkBAIC0yMCwxMCArMjAsMzkgQEAKICNpbmNsdWRlICJjb21tb24vanNv bmFwaS5oIgogI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCiAKLSNpZm5kZWYgRlJPTlRFTkQKKyNp ZmRlZiBGUk9OVEVORAorI2luY2x1ZGUgInBxZXhwYnVmZmVyLmgiCisjZWxzZQorI2luY2x1ZGUg ImxpYi9zdHJpbmdpbmZvLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjZW5kaWYKIAorLyoK KyAqIEluIGJhY2tlbmQsIHdlIHdpbGwgdXNlIHBhbGxvYy9wZnJlZSBhbG9uZyB3aXRoIFN0cmlu Z0luZm8uICBJbiBmcm9udGVuZCwgdXNlCisgKiBtYWxsb2MgYW5kIFBRRXhwQnVmZmVyLCBhbmQg cmV0dXJuIEpTT05fT1VUX09GX01FTU9SWSBvbiBvdXQtb2YtbWVtb3J5LgorICovCisjaWZkZWYg RlJPTlRFTkQKKworI2RlZmluZSBTVFJEVVAocykgc3RyZHVwKHMpCisjZGVmaW5lIEFMTE9DKHNp emUpIG1hbGxvYyhzaXplKQorCisjZGVmaW5lIGFwcGVuZFN0clZhbAkJYXBwZW5kUFFFeHBCdWZm ZXIKKyNkZWZpbmUgYXBwZW5kU3RyVmFsQ2hhcglhcHBlbmRQUUV4cEJ1ZmZlckNoYXIKKyNkZWZp bmUgY3JlYXRlU3RyVmFsCQljcmVhdGVQUUV4cEJ1ZmZlcgorI2RlZmluZSByZXNldFN0clZhbAkJ CXJlc2V0UFFFeHBCdWZmZXIKKworI2Vsc2UgLyogIUZST05URU5EICovCisKKyNkZWZpbmUgU1RS RFVQKHMpIHBzdHJkdXAocykKKyNkZWZpbmUgQUxMT0Moc2l6ZSkgcGFsbG9jKHNpemUpCisKKyNk ZWZpbmUgYXBwZW5kU3RyVmFsCQlhcHBlbmRTdHJpbmdJbmZvCisjZGVmaW5lIGFwcGVuZFN0clZh bENoYXIJYXBwZW5kU3RyaW5nSW5mb0NoYXIKKyNkZWZpbmUgY3JlYXRlU3RyVmFsCQltYWtlU3Ry aW5nSW5mbworI2RlZmluZSByZXNldFN0clZhbAkJCXJlc2V0U3RyaW5nSW5mbworCisjZW5kaWYK KwogLyoKICAqIFRoZSBjb250ZXh0IG9mIHRoZSBwYXJzZXIgaXMgbWFpbnRhaW5lZCBieSB0aGUg cmVjdXJzaXZlIGRlc2NlbnQKICAqIG1lY2hhbmlzbSwgYnV0IGlzIHBhc3NlZCBleHBsaWNpdGx5 IHRvIHRoZSBlcnJvciByZXBvcnRpbmcgcm91dGluZQpAQCAtMTMyLDEwICsxNjEsMTIgQEAgSXNW YWxpZEpzb25OdW1iZXIoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKQogCXJldHVybiAoIW51bWVy aWNfZXJyb3IpICYmICh0b3RhbF9sZW4gPT0gZHVtbXlfbGV4LmlucHV0X2xlbmd0aCk7CiB9CiAK KyNpZm5kZWYgRlJPTlRFTkQKKwogLyoKICAqIG1ha2VKc29uTGV4Q29udGV4dENzdHJpbmdMZW4K ICAqCi0gKiBsZXggY29uc3RydWN0b3IsIHdpdGggb3Igd2l0aG91dCBTdHJpbmdJbmZvIG9iamVj dCBmb3IgZGUtZXNjYXBlZCBsZXhlbWVzLgorICogbGV4IGNvbnN0cnVjdG9yLCB3aXRoIG9yIHdp dGhvdXQgYSBzdHJpbmcgb2JqZWN0IGZvciBkZS1lc2NhcGVkIGxleGVtZXMuCiAgKgogICogV2l0 aG91dCBpcyBiZXR0ZXIgYXMgaXQgbWFrZXMgdGhlIHByb2Nlc3NpbmcgZmFzdGVyLCBzbyBvbmx5 IG1ha2Ugb25lCiAgKiBpZiByZWFsbHkgcmVxdWlyZWQuCkBAIC0xNDUsMTMgKzE3Niw2NiBAQCBt YWtlSnNvbkxleENvbnRleHRDc3RyaW5nTGVuKGNoYXIgKmpzb24sIGludCBsZW4sIGludCBlbmNv ZGluZywgYm9vbCBuZWVkX2VzY2FwZQogewogCUpzb25MZXhDb250ZXh0ICpsZXggPSBwYWxsb2Mw KHNpemVvZihKc29uTGV4Q29udGV4dCkpOwogCisJaW5pdEpzb25MZXhDb250ZXh0Q3N0cmluZ0xl bihsZXgsIGpzb24sIGxlbiwgZW5jb2RpbmcsIG5lZWRfZXNjYXBlcyk7CisKKwlyZXR1cm4gbGV4 OworfQorCit2b2lkCitkZXN0cm95SnNvbkxleENvbnRleHQoSnNvbkxleENvbnRleHQgKmxleCkK K3sKKwl0ZXJtSnNvbkxleENvbnRleHQobGV4KTsKKwlwZnJlZShsZXgpOworfQorCisjZW5kaWYg LyogIUZST05URU5EICovCisKK3ZvaWQKK2luaXRKc29uTGV4Q29udGV4dENzdHJpbmdMZW4oSnNv bkxleENvbnRleHQgKmxleCwgY2hhciAqanNvbiwgaW50IGxlbiwgaW50IGVuY29kaW5nLCBib29s IG5lZWRfZXNjYXBlcykKK3sKIAlsZXgtPmlucHV0ID0gbGV4LT50b2tlbl90ZXJtaW5hdG9yID0g bGV4LT5saW5lX3N0YXJ0ID0ganNvbjsKIAlsZXgtPmxpbmVfbnVtYmVyID0gMTsKIAlsZXgtPmlu cHV0X2xlbmd0aCA9IGxlbjsKIAlsZXgtPmlucHV0X2VuY29kaW5nID0gZW5jb2Rpbmc7Ci0JaWYg KG5lZWRfZXNjYXBlcykKLQkJbGV4LT5zdHJ2YWwgPSBtYWtlU3RyaW5nSW5mbygpOwotCXJldHVy biBsZXg7CisJbGV4LT5wYXJzZV9zdHJ2YWwgPSBuZWVkX2VzY2FwZXM7CisJaWYgKGxleC0+cGFy c2Vfc3RydmFsKQorCXsKKwkJLyoKKwkJICogVGhpcyBjYWxsIGNhbiBmYWlsIGluIEZST05URU5E IGNvZGUuIFdlIGRlZmVyIGVycm9yIGhhbmRsaW5nIHRvIHRpbWUKKwkJICogb2YgdXNlIChqc29u X2xleF9zdHJpbmcoKSkgc2luY2UgdGhlcmUncyBubyB3YXkgdG8gc2lnbmFsIGZhaWx1cmUKKwkJ ICogaGVyZSwgYW5kIHdlIG1pZ2h0IG5vdCBuZWVkIHRvIHBhcnNlIGFueSBzdHJpbmdzIGFueXdh eS4KKwkJICovCisJCWxleC0+c3RydmFsID0gY3JlYXRlU3RyVmFsKCk7CisJfQorCWxleC0+ZXJy b3Jtc2cgPSBOVUxMOworfQorCit2b2lkCit0ZXJtSnNvbkxleENvbnRleHQoSnNvbkxleENvbnRl eHQgKmxleCkKK3sKKwlzdGF0aWMgY29uc3QgSnNvbkxleENvbnRleHQgZW1wdHkgPSB7MH07CisK KwlpZiAobGV4LT5zdHJ2YWwpCisJeworI2lmZGVmIEZST05URU5ECisJCWRlc3Ryb3lQUUV4cEJ1 ZmZlcihsZXgtPnN0cnZhbCk7CisjZWxzZQorCQlwZnJlZShsZXgtPnN0cnZhbC0+ZGF0YSk7CisJ CXBmcmVlKGxleC0+c3RydmFsKTsKKyNlbmRpZgorCX0KKworCWlmIChsZXgtPmVycm9ybXNnKQor CXsKKyNpZmRlZiBGUk9OVEVORAorCQlkZXN0cm95UFFFeHBCdWZmZXIobGV4LT5lcnJvcm1zZyk7 CisjZWxzZQorCQlwZnJlZShsZXgtPmVycm9ybXNnLT5kYXRhKTsKKwkJcGZyZWUobGV4LT5lcnJv cm1zZyk7CisjZW5kaWYKKwl9CisKKwkqbGV4ID0gZW1wdHk7CiB9CiAKIC8qCkBAIC0yMTcsNyAr MzAxLDcgQEAganNvbl9jb3VudF9hcnJheV9lbGVtZW50cyhKc29uTGV4Q29udGV4dCAqbGV4LCBp bnQgKmVsZW1lbnRzKQogCSAqIGV0Yywgc28gZG9pbmcgdGhpcyB3aXRoIGEgY29weSBtYWtlcyB0 aGF0IHNhZmUuCiAJICovCiAJbWVtY3B5KCZjb3B5bGV4LCBsZXgsIHNpemVvZihKc29uTGV4Q29u dGV4dCkpOwotCWNvcHlsZXguc3RydmFsID0gTlVMTDsJCS8qIG5vdCBpbnRlcmVzdGVkIGluIHZh bHVlcyBoZXJlICovCisJY29weWxleC5wYXJzZV9zdHJ2YWwgPSBmYWxzZTsJCS8qIG5vdCBpbnRl cmVzdGVkIGluIHZhbHVlcyBoZXJlICovCiAJY29weWxleC5sZXhfbGV2ZWwrKzsKIAogCWNvdW50 ID0gMDsKQEAgLTI3OSwxNCArMzYzLDIxIEBAIHBhcnNlX3NjYWxhcihKc29uTGV4Q29udGV4dCAq bGV4LCBKc29uU2VtQWN0aW9uICpzZW0pCiAJLyogZXh0cmFjdCB0aGUgZGUtZXNjYXBlZCBzdHJp bmcgdmFsdWUsIG9yIHRoZSByYXcgbGV4ZW1lICovCiAJaWYgKGxleF9wZWVrKGxleCkgPT0gSlNP Tl9UT0tFTl9TVFJJTkcpCiAJewotCQlpZiAobGV4LT5zdHJ2YWwgIT0gTlVMTCkKLQkJCXZhbCA9 IHBzdHJkdXAobGV4LT5zdHJ2YWwtPmRhdGEpOworCQlpZiAobGV4LT5wYXJzZV9zdHJ2YWwpCisJ CXsKKwkJCXZhbCA9IFNUUkRVUChsZXgtPnN0cnZhbC0+ZGF0YSk7CisJCQlpZiAodmFsID09IE5V TEwpCisJCQkJcmV0dXJuIEpTT05fT1VUX09GX01FTU9SWTsKKwkJfQogCX0KIAllbHNlCiAJewog CQlpbnQJCQlsZW4gPSAobGV4LT50b2tlbl90ZXJtaW5hdG9yIC0gbGV4LT50b2tlbl9zdGFydCk7 CiAKLQkJdmFsID0gcGFsbG9jKGxlbiArIDEpOworCQl2YWwgPSBBTExPQyhsZW4gKyAxKTsKKwkJ aWYgKHZhbCA9PSBOVUxMKQorCQkJcmV0dXJuIEpTT05fT1VUX09GX01FTU9SWTsKKwogCQltZW1j cHkodmFsLCBsZXgtPnRva2VuX3N0YXJ0LCBsZW4pOwogCQl2YWxbbGVuXSA9ICdcMCc7CiAJfQpA QCAtMzIwLDggKzQxMSwxMiBAQCBwYXJzZV9vYmplY3RfZmllbGQoSnNvbkxleENvbnRleHQgKmxl eCwgSnNvblNlbUFjdGlvbiAqc2VtKQogCiAJaWYgKGxleF9wZWVrKGxleCkgIT0gSlNPTl9UT0tF Tl9TVFJJTkcpCiAJCXJldHVybiByZXBvcnRfcGFyc2VfZXJyb3IoSlNPTl9QQVJTRV9TVFJJTkcs IGxleCk7Ci0JaWYgKChvc3RhcnQgIT0gTlVMTCB8fCBvZW5kICE9IE5VTEwpICYmIGxleC0+c3Ry dmFsICE9IE5VTEwpCi0JCWZuYW1lID0gcHN0cmR1cChsZXgtPnN0cnZhbC0+ZGF0YSk7CisJaWYg KChvc3RhcnQgIT0gTlVMTCB8fCBvZW5kICE9IE5VTEwpICYmIGxleC0+cGFyc2Vfc3RydmFsKQor CXsKKwkJZm5hbWUgPSBTVFJEVVAobGV4LT5zdHJ2YWwtPmRhdGEpOworCQlpZiAoZm5hbWUgPT0g TlVMTCkKKwkJCXJldHVybiBKU09OX09VVF9PRl9NRU1PUlk7CisJfQogCXJlc3VsdCA9IGpzb25f bGV4KGxleCk7CiAJaWYgKHJlc3VsdCAhPSBKU09OX1NVQ0NFU1MpCiAJCXJldHVybiByZXN1bHQ7 CkBAIC0zNjgsNiArNDYzLDEwIEBAIHBhcnNlX29iamVjdChKc29uTGV4Q29udGV4dCAqbGV4LCBK c29uU2VtQWN0aW9uICpzZW0pCiAJSnNvblBhcnNlRXJyb3JUeXBlIHJlc3VsdDsKIAogI2lmbmRl ZiBGUk9OVEVORAorCS8qCisJICogVE9ETzogY2xpZW50cyBuZWVkIHNvbWUgd2F5IHRvIHB1dCBh IGJvdW5kIG9uIHN0YWNrIGdyb3d0aC4gUGFyc2UgbGV2ZWwKKwkgKiBsaW1pdHMgbWF5YmU/CisJ ICovCiAJY2hlY2tfc3RhY2tfZGVwdGgoKTsKICNlbmRpZgogCkBAIC02NzYsOCArNzc1LDE1IEBA IGpzb25fbGV4X3N0cmluZyhKc29uTGV4Q29udGV4dCAqbGV4KQogCWludAkJCWxlbjsKIAlpbnQJ CQloaV9zdXJyb2dhdGUgPSAtMTsKIAotCWlmIChsZXgtPnN0cnZhbCAhPSBOVUxMKQotCQlyZXNl dFN0cmluZ0luZm8obGV4LT5zdHJ2YWwpOworCWlmIChsZXgtPnBhcnNlX3N0cnZhbCkKKwl7Cisj aWZkZWYgRlJPTlRFTkQKKwkJLyogbWFrZSBzdXJlIGluaXRpYWxpemF0aW9uIHN1Y2NlZWRlZCAq LworCQlpZiAobGV4LT5zdHJ2YWwgPT0gTlVMTCkKKwkJCXJldHVybiBKU09OX09VVF9PRl9NRU1P Ulk7CisjZW5kaWYKKwkJcmVzZXRTdHJWYWwobGV4LT5zdHJ2YWwpOworCX0KIAogCUFzc2VydChs ZXgtPmlucHV0X2xlbmd0aCA+IDApOwogCXMgPSBsZXgtPnRva2VuX3N0YXJ0OwpAQCAtNzM3LDcg Kzg0Myw3IEBAIGpzb25fbGV4X3N0cmluZyhKc29uTGV4Q29udGV4dCAqbGV4KQogCQkJCQkJcmV0 dXJuIEpTT05fVU5JQ09ERV9FU0NBUEVfRk9STUFUOwogCQkJCQl9CiAJCQkJfQotCQkJCWlmIChs ZXgtPnN0cnZhbCAhPSBOVUxMKQorCQkJCWlmIChsZXgtPnBhcnNlX3N0cnZhbCkKIAkJCQl7CiAJ CQkJCS8qCiAJCQkJCSAqIENvbWJpbmUgc3Vycm9nYXRlIHBhaXJzLgpAQCAtNzk3LDE5ICs5MDMs MTkgQEAganNvbl9sZXhfc3RyaW5nKEpzb25MZXhDb250ZXh0ICpsZXgpCiAKIAkJCQkJCXVuaWNv ZGVfdG9fdXRmOChjaCwgKHVuc2lnbmVkIGNoYXIgKikgdXRmOHN0cik7CiAJCQkJCQl1dGY4bGVu ID0gcGdfdXRmX21ibGVuKCh1bnNpZ25lZCBjaGFyICopIHV0ZjhzdHIpOwotCQkJCQkJYXBwZW5k QmluYXJ5U3RyaW5nSW5mbyhsZXgtPnN0cnZhbCwgdXRmOHN0ciwgdXRmOGxlbik7CisJCQkJCQlh cHBlbmRCaW5hcnlQUUV4cEJ1ZmZlcihsZXgtPnN0cnZhbCwgdXRmOHN0ciwgdXRmOGxlbik7CiAJ CQkJCX0KIAkJCQkJZWxzZSBpZiAoY2ggPD0gMHgwMDdmKQogCQkJCQl7CiAJCQkJCQkvKiBUaGUg QVNDSUkgcmFuZ2UgaXMgdGhlIHNhbWUgaW4gYWxsIGVuY29kaW5ncyAqLwotCQkJCQkJYXBwZW5k U3RyaW5nSW5mb0NoYXIobGV4LT5zdHJ2YWwsIChjaGFyKSBjaCk7CisJCQkJCQlhcHBlbmRQUUV4 cEJ1ZmZlckNoYXIobGV4LT5zdHJ2YWwsIChjaGFyKSBjaCk7CiAJCQkJCX0KIAkJCQkJZWxzZQog CQkJCQkJcmV0dXJuIEpTT05fVU5JQ09ERV9ISUdIX0VTQ0FQRTsKICNlbmRpZgkJCQkJCQkvKiBG Uk9OVEVORCAqLwogCQkJCX0KIAkJCX0KLQkJCWVsc2UgaWYgKGxleC0+c3RydmFsICE9IE5VTEwp CisJCQllbHNlIGlmIChsZXgtPnBhcnNlX3N0cnZhbCkKIAkJCXsKIAkJCQlpZiAoaGlfc3Vycm9n YXRlICE9IC0xKQogCQkJCQlyZXR1cm4gSlNPTl9VTklDT0RFX0xPV19TVVJST0dBVEU7CkBAIC04 MTksMjIgKzkyNSwyMiBAQCBqc29uX2xleF9zdHJpbmcoSnNvbkxleENvbnRleHQgKmxleCkKIAkJ CQkJY2FzZSAnIic6CiAJCQkJCWNhc2UgJ1xcJzoKIAkJCQkJY2FzZSAnLyc6Ci0JCQkJCQlhcHBl bmRTdHJpbmdJbmZvQ2hhcihsZXgtPnN0cnZhbCwgKnMpOworCQkJCQkJYXBwZW5kU3RyVmFsQ2hh cihsZXgtPnN0cnZhbCwgKnMpOwogCQkJCQkJYnJlYWs7CiAJCQkJCWNhc2UgJ2InOgotCQkJCQkJ YXBwZW5kU3RyaW5nSW5mb0NoYXIobGV4LT5zdHJ2YWwsICdcYicpOworCQkJCQkJYXBwZW5kU3Ry VmFsQ2hhcihsZXgtPnN0cnZhbCwgJ1xiJyk7CiAJCQkJCQlicmVhazsKIAkJCQkJY2FzZSAnZic6 Ci0JCQkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihsZXgtPnN0cnZhbCwgJ1xmJyk7CisJCQkJCQlh cHBlbmRTdHJWYWxDaGFyKGxleC0+c3RydmFsLCAnXGYnKTsKIAkJCQkJCWJyZWFrOwogCQkJCQlj YXNlICduJzoKLQkJCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGxleC0+c3RydmFsLCAnXG4nKTsK KwkJCQkJCWFwcGVuZFN0clZhbENoYXIobGV4LT5zdHJ2YWwsICdcbicpOwogCQkJCQkJYnJlYWs7 CiAJCQkJCWNhc2UgJ3InOgotCQkJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIobGV4LT5zdHJ2YWws ICdccicpOworCQkJCQkJYXBwZW5kU3RyVmFsQ2hhcihsZXgtPnN0cnZhbCwgJ1xyJyk7CiAJCQkJ CQlicmVhazsKIAkJCQkJY2FzZSAndCc6Ci0JCQkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihsZXgt PnN0cnZhbCwgJ1x0Jyk7CisJCQkJCQlhcHBlbmRTdHJWYWxDaGFyKGxleC0+c3RydmFsLCAnXHQn KTsKIAkJCQkJCWJyZWFrOwogCQkJCQlkZWZhdWx0OgogCQkJCQkJLyogTm90IGEgdmFsaWQgc3Ry aW5nIGVzY2FwZSwgc28gc2lnbmFsIGVycm9yLiAqLwpAQCAtODU4LDEyICs5NjQsMTIgQEAganNv bl9sZXhfc3RyaW5nKEpzb25MZXhDb250ZXh0ICpsZXgpCiAJCQl9CiAKIAkJfQotCQllbHNlIGlm IChsZXgtPnN0cnZhbCAhPSBOVUxMKQorCQllbHNlIGlmIChsZXgtPnBhcnNlX3N0cnZhbCkKIAkJ ewogCQkJaWYgKGhpX3N1cnJvZ2F0ZSAhPSAtMSkKIAkJCQlyZXR1cm4gSlNPTl9VTklDT0RFX0xP V19TVVJST0dBVEU7CiAKLQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGxleC0+c3RydmFsLCAqcyk7 CisJCQlhcHBlbmRTdHJWYWxDaGFyKGxleC0+c3RydmFsLCAqcyk7CiAJCX0KIAogCX0KQEAgLTg3 MSw2ICs5NzcsMTEgQEAganNvbl9sZXhfc3RyaW5nKEpzb25MZXhDb250ZXh0ICpsZXgpCiAJaWYg KGhpX3N1cnJvZ2F0ZSAhPSAtMSkKIAkJcmV0dXJuIEpTT05fVU5JQ09ERV9MT1dfU1VSUk9HQVRF OwogCisjaWZkZWYgRlJPTlRFTkQKKwlpZiAobGV4LT5wYXJzZV9zdHJ2YWwgJiYgUFFFeHBCdWZm ZXJCcm9rZW4obGV4LT5zdHJ2YWwpKQorCQlyZXR1cm4gSlNPTl9PVVRfT0ZfTUVNT1JZOworI2Vu ZGlmCisKIAkvKiBIb29yYXksIHdlIGZvdW5kIHRoZSBlbmQgb2YgdGhlIHN0cmluZyEgKi8KIAls ZXgtPnByZXZfdG9rZW5fdGVybWluYXRvciA9IGxleC0+dG9rZW5fdGVybWluYXRvcjsKIAlsZXgt PnRva2VuX3Rlcm1pbmF0b3IgPSBzICsgMTsKQEAgLTEwNDMsNzIgKzExNTQsOTMgQEAgcmVwb3J0 X3BhcnNlX2Vycm9yKEpzb25QYXJzZUNvbnRleHQgY3R4LCBKc29uTGV4Q29udGV4dCAqbGV4KQog CXJldHVybiBKU09OX1NVQ0NFU1M7CQkvKiBzaWxlbmNlIHN0dXBpZGVyIGNvbXBpbGVycyAqLwog fQogCi0KLSNpZm5kZWYgRlJPTlRFTkQKLS8qCi0gKiBFeHRyYWN0IHRoZSBjdXJyZW50IHRva2Vu IGZyb20gYSBsZXhpbmcgY29udGV4dCwgZm9yIGVycm9yIHJlcG9ydGluZy4KLSAqLwotc3RhdGlj IGNoYXIgKgotZXh0cmFjdF90b2tlbihKc29uTGV4Q29udGV4dCAqbGV4KQotewotCWludAkJCXRv a2xlbiA9IGxleC0+dG9rZW5fdGVybWluYXRvciAtIGxleC0+dG9rZW5fc3RhcnQ7Ci0JY2hhcgkg ICAqdG9rZW4gPSBwYWxsb2ModG9rbGVuICsgMSk7Ci0KLQltZW1jcHkodG9rZW4sIGxleC0+dG9r ZW5fc3RhcnQsIHRva2xlbik7Ci0JdG9rZW5bdG9rbGVuXSA9ICdcMCc7Ci0JcmV0dXJuIHRva2Vu OwotfQotCiAvKgogICogQ29uc3RydWN0IGEgZGV0YWlsIG1lc3NhZ2UgZm9yIGEgSlNPTiBlcnJv ci4KICAqCi0gKiBOb3RlIHRoYXQgdGhlIGVycm9yIG1lc3NhZ2UgZ2VuZXJhdGVkIGJ5IHRoaXMg cm91dGluZSBtYXkgbm90IGJlCi0gKiBwYWxsb2MnZCwgbWFraW5nIGl0IHVuc2FmZSBmb3IgZnJv bnRlbmQgY29kZSBhcyB0aGVyZSBpcyBubyB3YXkgdG8KLSAqIGtub3cgaWYgdGhpcyBjYW4gYmUg c2FmZXJ5IHBmcmVlJ2Qgb3Igbm90LgorICogVGhlIHJldHVybmVkIGFsbG9jYXRpb24gaXMgZWl0 aGVyIHN0YXRpYyBvciBvd25lZCBieSB0aGUgSnNvbkxleENvbnRleHQgYW5kCisgKiBzaG91bGQg bm90IGJlIGZyZWVkLgogICovCiBjaGFyICoKIGpzb25fZXJyZGV0YWlsKEpzb25QYXJzZUVycm9y VHlwZSBlcnJvciwgSnNvbkxleENvbnRleHQgKmxleCkKIHsKKwlpbnQJCXRva2xlbiA9IGxleC0+ dG9rZW5fdGVybWluYXRvciAtIGxleC0+dG9rZW5fc3RhcnQ7CisKKwlpZiAoZXJyb3IgPT0gSlNP Tl9PVVRfT0ZfTUVNT1JZKQorCXsKKwkJLyogU2hvcnQgY2lyY3VpdC4gQWxsb2NhdGluZyBhbnl0 aGluZyBmb3IgdGhpcyBjYXNlIGlzIHVuaGVscGZ1bC4gKi8KKwkJcmV0dXJuIF8oIm91dCBvZiBt ZW1vcnkiKTsKKwl9CisKKwlpZiAobGV4LT5lcnJvcm1zZykKKwkJcmVzZXRTdHJWYWwobGV4LT5l cnJvcm1zZyk7CisJZWxzZQorCQlsZXgtPmVycm9ybXNnID0gY3JlYXRlU3RyVmFsKCk7CisKIAlz d2l0Y2ggKGVycm9yKQogCXsKIAkJY2FzZSBKU09OX1NVQ0NFU1M6CiAJCQkvKiBmYWxsIHRocm91 Z2ggdG8gdGhlIGVycm9yIGNvZGUgYWZ0ZXIgc3dpdGNoICovCiAJCQlicmVhazsKIAkJY2FzZSBK U09OX0VTQ0FQSU5HX0lOVkFMSUQ6Ci0JCQlyZXR1cm4gcHNwcmludGYoXygiRXNjYXBlIHNlcXVl bmNlIFwiXFwlc1wiIGlzIGludmFsaWQuIiksCi0JCQkJCQkJZXh0cmFjdF90b2tlbihsZXgpKTsK KwkJCWFwcGVuZFN0clZhbChsZXgtPmVycm9ybXNnLAorCQkJCQkJIF8oIkVzY2FwZSBzZXF1ZW5j ZSBcIlxcJS4qc1wiIGlzIGludmFsaWQuIiksCisJCQkJCQkgdG9rbGVuLCBsZXgtPnRva2VuX3N0 YXJ0KTsKKwkJCWJyZWFrOwogCQljYXNlIEpTT05fRVNDQVBJTkdfUkVRVUlSRUQ6Ci0JCQlyZXR1 cm4gcHNwcmludGYoXygiQ2hhcmFjdGVyIHdpdGggdmFsdWUgMHglMDJ4IG11c3QgYmUgZXNjYXBl ZC4iKSwKLQkJCQkJCQkodW5zaWduZWQgY2hhcikgKihsZXgtPnRva2VuX3Rlcm1pbmF0b3IpKTsK KwkJCWFwcGVuZFN0clZhbChsZXgtPmVycm9ybXNnLAorCQkJCQkJIF8oIkNoYXJhY3RlciB3aXRo IHZhbHVlIDB4JTAyeCBtdXN0IGJlIGVzY2FwZWQuIiksCisJCQkJCQkgKHVuc2lnbmVkIGNoYXIp ICoobGV4LT50b2tlbl90ZXJtaW5hdG9yKSk7CisJCQlicmVhazsKIAkJY2FzZSBKU09OX0VYUEVD VEVEX0VORDoKLQkJCXJldHVybiBwc3ByaW50ZihfKCJFeHBlY3RlZCBlbmQgb2YgaW5wdXQsIGJ1 dCBmb3VuZCBcIiVzXCIuIiksCi0JCQkJCQkJZXh0cmFjdF90b2tlbihsZXgpKTsKKwkJCWFwcGVu ZFN0clZhbChsZXgtPmVycm9ybXNnLAorCQkJCQkJIF8oIkV4cGVjdGVkIGVuZCBvZiBpbnB1dCwg YnV0IGZvdW5kIFwiJS4qc1wiLiIpLAorCQkJCQkJIHRva2xlbiwgbGV4LT50b2tlbl9zdGFydCk7 CisJCQlicmVhazsKIAkJY2FzZSBKU09OX0VYUEVDVEVEX0FSUkFZX0ZJUlNUOgotCQkJcmV0dXJu IHBzcHJpbnRmKF8oIkV4cGVjdGVkIGFycmF5IGVsZW1lbnQgb3IgXCJdXCIsIGJ1dCBmb3VuZCBc IiVzXCIuIiksCi0JCQkJCQkJZXh0cmFjdF90b2tlbihsZXgpKTsKKwkJCWFwcGVuZFN0clZhbChs ZXgtPmVycm9ybXNnLAorCQkJCQkJIF8oIkV4cGVjdGVkIGFycmF5IGVsZW1lbnQgb3IgXCJdXCIs IGJ1dCBmb3VuZCBcIiUuKnNcIi4iKSwKKwkJCQkJCSB0b2tsZW4sIGxleC0+dG9rZW5fc3RhcnQp OworCQkJYnJlYWs7CiAJCWNhc2UgSlNPTl9FWFBFQ1RFRF9BUlJBWV9ORVhUOgotCQkJcmV0dXJu IHBzcHJpbnRmKF8oIkV4cGVjdGVkIFwiLFwiIG9yIFwiXVwiLCBidXQgZm91bmQgXCIlc1wiLiIp LAotCQkJCQkJCWV4dHJhY3RfdG9rZW4obGV4KSk7CisJCQlhcHBlbmRTdHJWYWwobGV4LT5lcnJv cm1zZywKKwkJCQkJCSBfKCJFeHBlY3RlZCBcIixcIiBvciBcIl1cIiwgYnV0IGZvdW5kIFwiJS4q c1wiLiIpLAorCQkJCQkJIHRva2xlbiwgbGV4LT50b2tlbl9zdGFydCk7CisJCQlicmVhazsKIAkJ Y2FzZSBKU09OX0VYUEVDVEVEX0NPTE9OOgotCQkJcmV0dXJuIHBzcHJpbnRmKF8oIkV4cGVjdGVk IFwiOlwiLCBidXQgZm91bmQgXCIlc1wiLiIpLAotCQkJCQkJCWV4dHJhY3RfdG9rZW4obGV4KSk7 CisJCQlhcHBlbmRTdHJWYWwobGV4LT5lcnJvcm1zZywKKwkJCQkJCSBfKCJFeHBlY3RlZCBcIjpc IiwgYnV0IGZvdW5kIFwiJS4qc1wiLiIpLAorCQkJCQkJIHRva2xlbiwgbGV4LT50b2tlbl9zdGFy dCk7CisJCQlicmVhazsKIAkJY2FzZSBKU09OX0VYUEVDVEVEX0pTT046Ci0JCQlyZXR1cm4gcHNw cmludGYoXygiRXhwZWN0ZWQgSlNPTiB2YWx1ZSwgYnV0IGZvdW5kIFwiJXNcIi4iKSwKLQkJCQkJ CQlleHRyYWN0X3Rva2VuKGxleCkpOworCQkJYXBwZW5kU3RyVmFsKGxleC0+ZXJyb3Jtc2csCisJ CQkJCQkgXygiRXhwZWN0ZWQgSlNPTiB2YWx1ZSwgYnV0IGZvdW5kIFwiJS4qc1wiLiIpLAorCQkJ CQkJIHRva2xlbiwgbGV4LT50b2tlbl9zdGFydCk7CisJCQlicmVhazsKIAkJY2FzZSBKU09OX0VY UEVDVEVEX01PUkU6CiAJCQlyZXR1cm4gXygiVGhlIGlucHV0IHN0cmluZyBlbmRlZCB1bmV4cGVj dGVkbHkuIik7CiAJCWNhc2UgSlNPTl9FWFBFQ1RFRF9PQkpFQ1RfRklSU1Q6Ci0JCQlyZXR1cm4g cHNwcmludGYoXygiRXhwZWN0ZWQgc3RyaW5nIG9yIFwifVwiLCBidXQgZm91bmQgXCIlc1wiLiIp LAotCQkJCQkJCWV4dHJhY3RfdG9rZW4obGV4KSk7CisJCQlhcHBlbmRTdHJWYWwobGV4LT5lcnJv cm1zZywKKwkJCQkJCSBfKCJFeHBlY3RlZCBzdHJpbmcgb3IgXCJ9XCIsIGJ1dCBmb3VuZCBcIiUu KnNcIi4iKSwKKwkJCQkJCSB0b2tsZW4sIGxleC0+dG9rZW5fc3RhcnQpOworCQkJYnJlYWs7CiAJ CWNhc2UgSlNPTl9FWFBFQ1RFRF9PQkpFQ1RfTkVYVDoKLQkJCXJldHVybiBwc3ByaW50ZihfKCJF eHBlY3RlZCBcIixcIiBvciBcIn1cIiwgYnV0IGZvdW5kIFwiJXNcIi4iKSwKLQkJCQkJCQlleHRy YWN0X3Rva2VuKGxleCkpOworCQkJYXBwZW5kU3RyVmFsKGxleC0+ZXJyb3Jtc2csCisJCQkJCQkg XygiRXhwZWN0ZWQgXCIsXCIgb3IgXCJ9XCIsIGJ1dCBmb3VuZCBcIiUuKnNcIi4iKSwKKwkJCQkJ CSB0b2tsZW4sIGxleC0+dG9rZW5fc3RhcnQpOworCQkJYnJlYWs7CiAJCWNhc2UgSlNPTl9FWFBF Q1RFRF9TVFJJTkc6Ci0JCQlyZXR1cm4gcHNwcmludGYoXygiRXhwZWN0ZWQgc3RyaW5nLCBidXQg Zm91bmQgXCIlc1wiLiIpLAotCQkJCQkJCWV4dHJhY3RfdG9rZW4obGV4KSk7CisJCQlhcHBlbmRT dHJWYWwobGV4LT5lcnJvcm1zZywKKwkJCQkJCSBfKCJFeHBlY3RlZCBzdHJpbmcsIGJ1dCBmb3Vu ZCBcIiUuKnNcIi4iKSwKKwkJCQkJCSB0b2tsZW4sIGxleC0+dG9rZW5fc3RhcnQpOworCQkJYnJl YWs7CiAJCWNhc2UgSlNPTl9JTlZBTElEX1RPS0VOOgotCQkJcmV0dXJuIHBzcHJpbnRmKF8oIlRv a2VuIFwiJXNcIiBpcyBpbnZhbGlkLiIpLAotCQkJCQkJCWV4dHJhY3RfdG9rZW4obGV4KSk7CisJ CQlhcHBlbmRTdHJWYWwobGV4LT5lcnJvcm1zZywKKwkJCQkJCSBfKCJUb2tlbiBcIiUuKnNcIiBp cyBpbnZhbGlkLiIpLAorCQkJCQkJIHRva2xlbiwgbGV4LT50b2tlbl9zdGFydCk7CisJCQlicmVh azsKKwkJY2FzZSBKU09OX09VVF9PRl9NRU1PUlk6CisJCQkvKiBzaG91bGQgaGF2ZSBiZWVuIGhh bmRsZWQgYWJvdmU7IHVzZSB0aGUgZXJyb3IgcGF0aCAqLworCQkJYnJlYWs7CiAJCWNhc2UgSlNP Tl9VTklDT0RFX0NPREVfUE9JTlRfWkVSTzoKIAkJCXJldHVybiBfKCJcXHUwMDAwIGNhbm5vdCBi ZSBjb252ZXJ0ZWQgdG8gdGV4dC4iKTsKIAkJY2FzZSBKU09OX1VOSUNPREVfRVNDQVBFX0ZPUk1B VDoKQEAgLTExMjIsMTIgKzEyNTQsMjIgQEAganNvbl9lcnJkZXRhaWwoSnNvblBhcnNlRXJyb3JU eXBlIGVycm9yLCBKc29uTGV4Q29udGV4dCAqbGV4KQogCQkJcmV0dXJuIF8oIlVuaWNvZGUgbG93 IHN1cnJvZ2F0ZSBtdXN0IGZvbGxvdyBhIGhpZ2ggc3Vycm9nYXRlLiIpOwogCX0KIAotCS8qCi0J ICogV2UgZG9uJ3QgdXNlIGEgZGVmYXVsdDogY2FzZSwgc28gdGhhdCB0aGUgY29tcGlsZXIgd2ls bCB3YXJuIGFib3V0Ci0JICogdW5oYW5kbGVkIGVudW0gdmFsdWVzLiAgQnV0IHRoaXMgbmVlZHMg dG8gYmUgaGVyZSBhbnl3YXkgdG8gY292ZXIgdGhlCi0JICogcG9zc2liaWxpdHkgb2YgYW4gaW5j b3JyZWN0IGlucHV0LgotCSAqLwotCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGpzb24gcGFyc2Ug ZXJyb3IgdHlwZTogJWQiLCAoaW50KSBlcnJvcik7Ci0JcmV0dXJuIE5VTEw7Ci19CisJLyogTm90 ZSB0aGF0IGxleC0+ZXJyb3Jtc2cgY2FuIGJlIE5VTEwgaW4gRlJPTlRFTkQgY29kZS4gKi8KKwlp ZiAobGV4LT5lcnJvcm1zZyAmJiAhbGV4LT5lcnJvcm1zZy0+ZGF0YVswXSkKKwl7CisJCS8qCisJ CSAqIFdlIGRvbid0IHVzZSBhIGRlZmF1bHQ6IGNhc2UsIHNvIHRoYXQgdGhlIGNvbXBpbGVyIHdp bGwgd2FybiBhYm91dAorCQkgKiB1bmhhbmRsZWQgZW51bSB2YWx1ZXMuICBCdXQgdGhpcyBuZWVk cyB0byBiZSBoZXJlIGFueXdheSB0byBjb3ZlciB0aGUKKwkJICogcG9zc2liaWxpdHkgb2YgYW4g aW5jb3JyZWN0IGlucHV0LgorCQkgKi8KKwkJYXBwZW5kU3RyVmFsKGxleC0+ZXJyb3Jtc2csCisJ CQkJCSAidW5leHBlY3RlZCBqc29uIHBhcnNlIGVycm9yIHR5cGU6ICVkIiwgKGludCkgZXJyb3Ip OworCX0KKworI2lmZGVmIEZST05URU5ECisJaWYgKFBRRXhwQnVmZmVyQnJva2VuKGxleC0+ZXJy b3Jtc2cpKQorCQlyZXR1cm4gXygib3V0IG9mIG1lbW9yeSB3aGlsZSBjb25zdHJ1Y3RpbmcgZXJy b3IgZGVzY3JpcHRpb24iKTsKICNlbmRpZgorCisJcmV0dXJuIGxleC0+ZXJyb3Jtc2ctPmRhdGE7 Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tb24vanNvbmFwaS5oIGIvc3JjL2luY2x1 ZGUvY29tbW9uL2pzb25hcGkuaAppbmRleCA1MmNiNGE5MzM5Li5kN2NhZmM4NGZlIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9jb21tb24vanNvbmFwaS5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1v bi9qc29uYXBpLmgKQEAgLTE0LDggKzE0LDYgQEAKICNpZm5kZWYgSlNPTkFQSV9ICiAjZGVmaW5l IEpTT05BUElfSAogCi0jaW5jbHVkZSAibGliL3N0cmluZ2luZm8uaCIKLQogdHlwZWRlZiBlbnVt CiB7CiAJSlNPTl9UT0tFTl9JTlZBTElELApAQCAtNDgsNiArNDYsNyBAQCB0eXBlZGVmIGVudW0K IAlKU09OX0VYUEVDVEVEX09CSkVDVF9ORVhULAogCUpTT05fRVhQRUNURURfU1RSSU5HLAogCUpT T05fSU5WQUxJRF9UT0tFTiwKKwlKU09OX09VVF9PRl9NRU1PUlksCiAJSlNPTl9VTklDT0RFX0NP REVfUE9JTlRfWkVSTywKIAlKU09OX1VOSUNPREVfRVNDQVBFX0ZPUk1BVCwKIAlKU09OX1VOSUNP REVfSElHSF9FU0NBUEUsCkBAIC01NSw2ICs1NCwxNyBAQCB0eXBlZGVmIGVudW0KIAlKU09OX1VO SUNPREVfTE9XX1NVUlJPR0FURQogfSBKc29uUGFyc2VFcnJvclR5cGU7CiAKKy8qCisgKiBEb24n dCBkZXBlbmQgb24gdGhlIGludGVybmFsIHR5cGUgaGVhZGVyIGZvciBzdHJ2YWw7IGlmIGNhbGxl cnMgbmVlZCBhY2Nlc3MKKyAqIHRoZW4gdGhleSBjYW4gaW5jbHVkZSB0aGUgYXBwcm9wcmlhdGUg aGVhZGVyIHRoZW1zZWx2ZXMuCisgKi8KKyNpZmRlZiBGUk9OVEVORAorI2RlZmluZSBTdHJWYWxU eXBlIFBRRXhwQnVmZmVyRGF0YQorI2Vsc2UKKyNkZWZpbmUgU3RyVmFsVHlwZSBTdHJpbmdJbmZv RGF0YQorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IFN0clZhbFR5cGUgU3RyVmFsVHlwZTsKIAog LyoKICAqIEFsbCB0aGUgZmllbGRzIGluIHRoaXMgc3RydWN0dXJlIHNob3VsZCBiZSB0cmVhdGVk IGFzIHJlYWQtb25seS4KQEAgLTgxLDcgKzkxLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgSnNvbkxleENv bnRleHQKIAlpbnQJCQlsZXhfbGV2ZWw7CiAJaW50CQkJbGluZV9udW1iZXI7CS8qIGxpbmUgbnVt YmVyLCBzdGFydGluZyBmcm9tIDEgKi8KIAljaGFyCSAgICpsaW5lX3N0YXJ0OwkJLyogd2hlcmUg dGhhdCBsaW5lIHN0YXJ0cyB3aXRoaW4gaW5wdXQgKi8KLQlTdHJpbmdJbmZvCXN0cnZhbDsKKwli b29sCQlwYXJzZV9zdHJ2YWw7CisJU3RyVmFsVHlwZSAqc3RydmFsOwkJCS8qIG9ubHkgdXNlZCBp ZiBwYXJzZV9zdHJ2YWwgPT0gdHJ1ZSAqLworCVN0clZhbFR5cGUgKmVycm9ybXNnOwogfSBKc29u TGV4Q29udGV4dDsKIAogdHlwZWRlZiB2b2lkICgqanNvbl9zdHJ1Y3RfYWN0aW9uKSAodm9pZCAq c3RhdGUpOwpAQCAtMTQxLDkgKzE1MywxMCBAQCBleHRlcm4gSnNvblNlbUFjdGlvbiBudWxsU2Vt QWN0aW9uOwogICovCiBleHRlcm4gSnNvblBhcnNlRXJyb3JUeXBlIGpzb25fY291bnRfYXJyYXlf ZWxlbWVudHMoSnNvbkxleENvbnRleHQgKmxleCwKIAkJCQkJCQkJCQkJCQlpbnQgKmVsZW1lbnRz KTsKKyNpZm5kZWYgRlJPTlRFTkQKIAogLyoKLSAqIGNvbnN0cnVjdG9yIGZvciBKc29uTGV4Q29u dGV4dCwgd2l0aCBvciB3aXRob3V0IHN0cnZhbCBlbGVtZW50LgorICogYWxsb2NhdGluZyBjb25z dHJ1Y3RvciBmb3IgSnNvbkxleENvbnRleHQsIHdpdGggb3Igd2l0aG91dCBzdHJ2YWwgZWxlbWVu dC4KICAqIElmIHN1cHBsaWVkLCB0aGUgc3RydmFsIGVsZW1lbnQgd2lsbCBjb250YWluIGEgZGUt ZXNjYXBlZCB2ZXJzaW9uIG9mCiAgKiB0aGUgbGV4ZW1lLiBIb3dldmVyLCBkb2luZyB0aGlzIGlt cG9zZXMgYSBwZXJmb3JtYW5jZSBwZW5hbHR5LCBzbwogICogaXQgc2hvdWxkIGJlIGF2b2lkZWQg aWYgdGhlIGRlLWVzY2FwZWQgbGV4ZW1lIGlzIG5vdCByZXF1aXJlZC4KQEAgLTE1Myw2ICsxNjYs MzIgQEAgZXh0ZXJuIEpzb25MZXhDb250ZXh0ICptYWtlSnNvbkxleENvbnRleHRDc3RyaW5nTGVu KGNoYXIgKmpzb24sCiAJCQkJCQkJCQkJCQkJaW50IGVuY29kaW5nLAogCQkJCQkJCQkJCQkJCWJv b2wgbmVlZF9lc2NhcGVzKTsKIAorLyoKKyAqIENvdW50ZXJwYXJ0IHRvIG1ha2VKc29uTGV4Q29u dGV4dENzdHJpbmdMZW4oKTogY2xlYXJzIGFuZCBkZWFsbG9jYXRlcyBsZXguCisgKiBUaGUgY29u dGV4dCBwb2ludGVyIHNob3VsZCBub3QgYmUgdXNlZCBhZnRlciB0aGlzIGNhbGwuCisgKi8KK2V4 dGVybiB2b2lkIGRlc3Ryb3lKc29uTGV4Q29udGV4dChKc29uTGV4Q29udGV4dCAqbGV4KTsKKwor I2VuZGlmIC8qICFGUk9OVEVORCAqLworCisvKgorICogc3RhY2sgY29uc3RydWN0b3IgZm9yIEpz b25MZXhDb250ZXh0LCB3aXRoIG9yIHdpdGhvdXQgc3RydmFsIGVsZW1lbnQuCisgKiBJZiBzdXBw bGllZCwgdGhlIHN0cnZhbCBlbGVtZW50IHdpbGwgY29udGFpbiBhIGRlLWVzY2FwZWQgdmVyc2lv biBvZgorICogdGhlIGxleGVtZS4gSG93ZXZlciwgZG9pbmcgdGhpcyBpbXBvc2VzIGEgcGVyZm9y bWFuY2UgcGVuYWx0eSwgc28KKyAqIGl0IHNob3VsZCBiZSBhdm9pZGVkIGlmIHRoZSBkZS1lc2Nh cGVkIGxleGVtZSBpcyBub3QgcmVxdWlyZWQuCisgKi8KK2V4dGVybiB2b2lkIGluaXRKc29uTGV4 Q29udGV4dENzdHJpbmdMZW4oSnNvbkxleENvbnRleHQgKmxleCwKKwkJCQkJCQkJCQkgY2hhciAq anNvbiwKKwkJCQkJCQkJCQkgaW50IGxlbiwKKwkJCQkJCQkJCQkgaW50IGVuY29kaW5nLAorCQkJ CQkJCQkJCSBib29sIG5lZWRfZXNjYXBlcyk7CisKKy8qCisgKiBDb3VudGVycGFydCB0byBpbml0 SnNvbkxleENvbnRleHRDc3RyaW5nTGVuKCk6IGNsZWFycyB0aGUgY29udGVudHMgb2YgbGV4LAor ICogYnV0IGRvZXMgbm90IGRlYWxsb2NhdGUgbGV4IGl0c2VsZi4KKyAqLworZXh0ZXJuIHZvaWQg dGVybUpzb25MZXhDb250ZXh0KEpzb25MZXhDb250ZXh0ICpsZXgpOworCiAvKiBsZXggb25lIHRv a2VuICovCiBleHRlcm4gSnNvblBhcnNlRXJyb3JUeXBlIGpzb25fbGV4KEpzb25MZXhDb250ZXh0 ICpsZXgpOwogCi0tIAoyLjI1LjEKCg== --_010_0e86fe7e3534fb05db02379fed404a2010eb1d62camelvmwarecom_ Content-Type: text/x-patch; name="v3-0005-libpq-add-OAUTHBEARER-SASL-mechanism.patch" Content-Description: v3-0005-libpq-add-OAUTHBEARER-SASL-mechanism.patch Content-Disposition: attachment; filename="v3-0005-libpq-add-OAUTHBEARER-SASL-mechanism.patch"; size=36485; creation-date="Fri, 04 Mar 2022 19:13:41 GMT"; modification-date="Fri, 04 Mar 2022 19:13:41 GMT" Content-ID: <1A37034F2DEC4F43B595B85C7FCD6EFE@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 RnJvbSA3ZjZiMDI2NTJjZDc3MWE5M2NlNDI2OTYwN2Q0OThmNGFjNTc0ZTdmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8cGNoYW1waW9uQHZtd2FyZS5jb20+ CkRhdGU6IFR1ZSwgMTMgQXByIDIwMjEgMTA6Mjc6MjcgLTA3MDAKU3ViamVjdDogW1BBVENIIHYz IDUvOV0gbGlicHE6IGFkZCBPQVVUSEJFQVJFUiBTQVNMIG1lY2hhbmlzbQoKRE8gTk9UIFVTRSBU SElTIFBST09GIE9GIENPTkNFUFQgSU4gUFJPRFVDVElPTi4KCkltcGxlbWVudCBPQVVUSEJFQVJF UiAoUkZDIDc2MjgpIGFuZCBPQXV0aCAyLjAgRGV2aWNlIEF1dGhvcml6YXRpb24KR3JhbnRzIChS RkMgODYyOCkgb24gdGhlIGNsaWVudCBzaWRlLiBXaGVuIHNwZWFraW5nIHRvIGEgT0F1dGgtZW5h YmxlZApzZXJ2ZXIsIGl0IGxvb2tzIGEgYml0IGxpa2UgdGhpczoKCiAgICAkIHBzcWwgJ2hvc3Q9 ZXhhbXBsZS5vcmcgb2F1dGhfY2xpZW50X2lkPWYwMmM2MzYxLTA2MzUtLi4uJwogICAgVmlzaXQg aHR0cHM6Ly9vYXV0aC5leGFtcGxlLm9yZy9sb2dpbiBhbmQgZW50ZXIgdGhlIGNvZGU6IEZQUTIt TTRCRwoKVGhlIE9BdXRoIGlzc3VlciBtdXN0IHN1cHBvcnQgZGV2aWNlIGF1dGhvcml6YXRpb24u IE5vIG90aGVyIE9BdXRoIGZsb3dzCmFyZSBjdXJyZW50bHkgaW1wbGVtZW50ZWQuCgpUaGUgY2xp ZW50IGltcGxlbWVudGF0aW9uIHJlcXVpcmVzIGxpYmlkZGF3YyBhbmQgaXRzIGRldmVsb3BtZW50 CmhlYWRlcnMuIENvbmZpZ3VyZSAtLXdpdGgtb2F1dGggKGFuZCAtLXdpdGgtaW5jbHVkZXMvLS13 aXRoLWxpYnJhcmllcyB0bwpwb2ludCBhdCB0aGUgaWRkYXdjIGluc3RhbGxhdGlvbiwgaWYgaXQn cyBpbiBhIGN1c3RvbSBsb2NhdGlvbikuCgpTZXZlcmFsIFRPRE9zOgotIGRvbid0IHJldHJ5IGZv cmV2ZXIgaWYgdGhlIHNlcnZlciB3b24ndCBhY2NlcHQgb3VyIHRva2VuCi0gcGVyZm9ybSBzZXZl cmFsIHNhbml0eSBjaGVja3Mgb24gdGhlIE9BdXRoIGlzc3VlcidzIHJlc3BvbnNlcwotIGhhbmRs ZSBjYXNlcyB3aGVyZSB0aGUgY2xpZW50IGhhcyBiZWVuIHNldCB1cCB3aXRoIGFuIGlzc3VlciBh bmQKICBzY29wZSwgYnV0IHRoZSBQb3N0Z3JlcyBzZXJ2ZXIgd2FudHMgdG8gdXNlIHNvbWV0aGlu ZyBkaWZmZXJlbnQKLSBpbXByb3ZlIGVycm9yIGRlYnVnZ2FiaWxpdHkgZHVyaW5nIHRoZSBPQXV0 aCBoYW5kc2hha2UKLSAuLi5hbmQgbW9yZS4KLS0tCiBjb25maWd1cmUgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAxMDAgKysrKwogY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAg ICAgIHwgIDE5ICsKIHNyYy9NYWtlZmlsZS5nbG9iYWwuaW4gICAgICAgICAgICAgICB8ICAgMSAr CiBzcmMvaW5jbHVkZS9jb21tb24vb2F1dGgtY29tbW9uLmggICAgfCAgMTkgKwogc3JjL2luY2x1 ZGUvcGdfY29uZmlnLmguaW4gICAgICAgICAgIHwgICA2ICsKIHNyYy9pbnRlcmZhY2VzL2xpYnBx L01ha2VmaWxlICAgICAgICB8ICAgNyArLQogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1v YXV0aC5jIHwgNzQ0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2ludGVyZmFjZXMv bGlicHEvZmUtYXV0aC1zYXNsLmggIHwgICA1ICstCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1h dXRoLXNjcmFtLmMgfCAgIDYgKy0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGguYyAgICAg ICB8ICA0MiArLQogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC5oICAgICAgIHwgICAzICsK IHNyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3QuYyAgICB8ICAzOCArKwogc3JjL2ludGVy ZmFjZXMvbGlicHEvbGlicHEtaW50LmggICAgIHwgICA4ICsKIDEzIGZpbGVzIGNoYW5nZWQsIDk3 OSBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv aW5jbHVkZS9jb21tb24vb2F1dGgtY29tbW9uLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW50 ZXJmYWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmMKCmRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9j b25maWd1cmUKaW5kZXggZjNjYjVjMmI1MS4uY2QwYzUwYTk1MSAxMDA3NTUKLS0tIGEvY29uZmln dXJlCisrKyBiL2NvbmZpZ3VyZQpAQCAtNzE4LDYgKzcxOCw3IEBAIHdpdGhfdXVpZAogd2l0aF9y ZWFkbGluZQogd2l0aF9zeXN0ZW1kCiB3aXRoX3NlbGludXgKK3dpdGhfb2F1dGgKIHdpdGhfbGRh cAogd2l0aF9rcmJfc3J2bmFtCiBrcmJfc3J2dGFiCkBAIC04NjEsNiArODYyLDcgQEAgd2l0aF9r cmJfc3J2bmFtCiB3aXRoX3BhbQogd2l0aF9ic2RfYXV0aAogd2l0aF9sZGFwCit3aXRoX29hdXRo CiB3aXRoX2JvbmpvdXIKIHdpdGhfc2VsaW51eAogd2l0aF9zeXN0ZW1kCkBAIC0xNTcwLDYgKzE1 NzIsNyBAQCBPcHRpb25hbCBQYWNrYWdlczoKICAgLS13aXRoLXBhbSAgICAgICAgICAgICAgYnVp bGQgd2l0aCBQQU0gc3VwcG9ydAogICAtLXdpdGgtYnNkLWF1dGggICAgICAgICBidWlsZCB3aXRo IEJTRCBBdXRoZW50aWNhdGlvbiBzdXBwb3J0CiAgIC0td2l0aC1sZGFwICAgICAgICAgICAgIGJ1 aWxkIHdpdGggTERBUCBzdXBwb3J0CisgIC0td2l0aC1vYXV0aCAgICAgICAgICAgIGJ1aWxkIHdp dGggT0F1dGggMi4wIHN1cHBvcnQKICAgLS13aXRoLWJvbmpvdXIgICAgICAgICAgYnVpbGQgd2l0 aCBCb25qb3VyIHN1cHBvcnQKICAgLS13aXRoLXNlbGludXggICAgICAgICAgYnVpbGQgd2l0aCBT RUxpbnV4IHN1cHBvcnQKICAgLS13aXRoLXN5c3RlbWQgICAgICAgICAgYnVpbGQgd2l0aCBzeXN0 ZW1kIHN1cHBvcnQKQEAgLTgzNzcsNiArODM4MCw0MiBAQCAkYXNfZWNobyAiJHdpdGhfbGRhcCIg PiY2OyB9CiAKIAogCisjCisjIE9BdXRoIDIuMAorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHdpdGggT0F1dGggc3Vw cG9ydCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHdpdGggT0F1 dGggc3VwcG9ydC4uLiAiID4mNjsgfQorCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1vYXV0 aCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfb2F1dGgrc2V0fSIgPSBzZXQ7IHRoZW4gOgor ICB3aXRodmFsPSR3aXRoX29hdXRoOworICBjYXNlICR3aXRodmFsIGluCisgICAgeWVzKQorCisk YXNfZWNobyAiI2RlZmluZSBVU0VfT0FVVEggMSIgPj5jb25mZGVmcy5oCisKKyAgICAgIDs7Cisg ICAgbm8pCisgICAgICA6CisgICAgICA7OworICAgICopCisgICAgICBhc19mbl9lcnJvciAkPyAi bm8gYXJndW1lbnQgZXhwZWN0ZWQgZm9yIC0td2l0aC1vYXV0aCBvcHRpb24iICIkTElORU5PIiA1 CisgICAgICA7OworICBlc2FjCisKK2Vsc2UKKyAgd2l0aF9vYXV0aD1ubworCitmaQorCisKK3sg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkd2l0aF9vYXV0 aCIgPiY1CiskYXNfZWNobyAiJHdpdGhfb2F1dGgiID4mNjsgfQorCisKKwogIwogIyBCb25qb3Vy CiAjCkBAIC0xMzUwMCw2ICsxMzUzOSw1NiBAQCBmaQogCiAKIAoraWYgdGVzdCAiJHdpdGhfb2F1 dGgiID0geWVzIDsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IGNoZWNraW5nIGZvciBpX2luaXRfc2Vzc2lvbiBpbiAtbGlkZGF3YyIgPiY1CiskYXNfZWNo b19uICJjaGVja2luZyBmb3IgaV9pbml0X3Nlc3Npb24gaW4gLWxpZGRhd2MuLi4gIiA+JjY7IH0K K2lmICR7YWNfY3ZfbGliX2lkZGF3Y19pX2luaXRfc2Vzc2lvbis6fSBmYWxzZTsgdGhlbiA6Cisg ICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJ QlM9JExJQlMKK0xJQlM9Ii1saWRkYXdjICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNF T0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJp ZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2Ug Y2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAg IGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBs eS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBpX2lu aXRfc2Vzc2lvbiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGlfaW5pdF9zZXNzaW9uICgp OworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElO RU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9pZGRhd2NfaV9pbml0X3Nlc3Npb249eWVzCitlbHNl CisgIGFjX2N2X2xpYl9pZGRhd2NfaV9pbml0X3Nlc3Npb249bm8KK2ZpCitybSAtZiBjb3JlIGNv bmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQg Y29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2lk ZGF3Y19pX2luaXRfc2Vzc2lvbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9pZGRhd2NfaV9p bml0X3Nlc3Npb24iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfaWRkYXdjX2lfaW5pdF9z ZXNzaW9uIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVm aW5lIEhBVkVfTElCSUREQVdDIDEKK19BQ0VPRgorCisgIExJQlM9Ii1saWRkYXdjICRMSUJTIgor CitlbHNlCisgIGFzX2ZuX2Vycm9yICQ/ICJsaWJyYXJ5ICdpZGRhd2MnIGlzIHJlcXVpcmVkIGZv ciBPQXV0aCBzdXBwb3J0IiAiJExJTkVOTyIgNQorZmkKKworZmkKKwogIyBmb3IgY29udHJpYi9z ZXBnc3FsCiBpZiB0ZXN0ICIkd2l0aF9zZWxpbnV4IiA9IHllczsgdGhlbgogICB7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzZWN1cml0eV9jb21w dXRlX2NyZWF0ZV9uYW1lIGluIC1sc2VsaW51eCIgPiY1CkBAIC0xNDUxMyw2ICsxNDYwMiwxNyBA QCBmaQogCiBkb25lCiAKK2ZpCisKK2lmIHRlc3QgIiR3aXRoX29hdXRoIiAhPSBubzsgdGhlbgor ICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiaWRkYXdjLmgiICJhY19j dl9oZWFkZXJfaWRkYXdjX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNf Y3ZfaGVhZGVyX2lkZGF3Y19oIiA9IHh5ZXM7IHRoZW4gOgorCitlbHNlCisgIGFzX2ZuX2Vycm9y ICQ/ICJoZWFkZXIgZmlsZSA8aWRkYXdjLmg+IGlzIHJlcXVpcmVkIGZvciBPQXV0aCIgIiRMSU5F Tk8iIDUKK2ZpCisKKwogZmkKIAogaWYgdGVzdCAiJFBPUlROQU1FIiA9ICJ3aW4zMiIgOyB0aGVu CmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggMTlkMWE4MDM2 Ny4uOTIyNjA4MDY1ZiAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5h YwpAQCAtODg3LDYgKzg4NywxNyBAQCBBQ19NU0dfUkVTVUxUKFskd2l0aF9sZGFwXSkKIEFDX1NV QlNUKHdpdGhfbGRhcCkKIAogCisjCisjIE9BdXRoIDIuMAorIworQUNfTVNHX0NIRUNLSU5HKFt3 aGV0aGVyIHRvIGJ1aWxkIHdpdGggT0F1dGggc3VwcG9ydF0pCitQR0FDX0FSR19CT09MKHdpdGgs IG9hdXRoLCBubywKKyAgICAgICAgICAgICAgW2J1aWxkIHdpdGggT0F1dGggMi4wIHN1cHBvcnRd LAorICAgICAgICAgICAgICBbQUNfREVGSU5FKFtVU0VfT0FVVEhdLCAxLCBbRGVmaW5lIHRvIDEg dG8gYnVpbGQgd2l0aCBPQXV0aCAyLjAgc3VwcG9ydC4gKC0td2l0aC1vYXV0aCldKV0pCitBQ19N U0dfUkVTVUxUKFskd2l0aF9vYXV0aF0pCitBQ19TVUJTVCh3aXRoX29hdXRoKQorCisKICMKICMg Qm9uam91cgogIwpAQCAtMTM4NSw2ICsxMzk2LDEwIEBAIGZpCiBBQ19TVUJTVChMREFQX0xJQlNf RkUpCiBBQ19TVUJTVChMREFQX0xJQlNfQkUpCiAKK2lmIHRlc3QgIiR3aXRoX29hdXRoIiA9IHll cyA7IHRoZW4KKyAgQUNfQ0hFQ0tfTElCKGlkZGF3YywgaV9pbml0X3Nlc3Npb24sIFtdLCBbQUNf TVNHX0VSUk9SKFtsaWJyYXJ5ICdpZGRhd2MnIGlzIHJlcXVpcmVkIGZvciBPQXV0aCBzdXBwb3J0 XSldKQorZmkKKwogIyBmb3IgY29udHJpYi9zZXBnc3FsCiBpZiB0ZXN0ICIkd2l0aF9zZWxpbnV4 IiA9IHllczsgdGhlbgogICBBQ19DSEVDS19MSUIoc2VsaW51eCwgc2VjdXJpdHlfY29tcHV0ZV9j cmVhdGVfbmFtZSwgW10sCkBAIC0xNjAzLDYgKzE2MTgsMTAgQEAgZWxpZiB0ZXN0ICIkd2l0aF91 dWlkIiA9IG9zc3AgOyB0aGVuCiAgICAgICBbQUNfTVNHX0VSUk9SKFtoZWFkZXIgZmlsZSA8b3Nz cC91dWlkLmg+IG9yIDx1dWlkLmg+IGlzIHJlcXVpcmVkIGZvciBPU1NQIFVVSURdKV0pXSkKIGZp CiAKK2lmIHRlc3QgIiR3aXRoX29hdXRoIiAhPSBubzsgdGhlbgorICBBQ19DSEVDS19IRUFERVIo aWRkYXdjLmgsIFtdLCBbQUNfTVNHX0VSUk9SKFtoZWFkZXIgZmlsZSA8aWRkYXdjLmg+IGlzIHJl cXVpcmVkIGZvciBPQXV0aF0pXSkKK2ZpCisKIGlmIHRlc3QgIiRQT1JUTkFNRSIgPSAid2luMzIi IDsgdGhlbgogICAgQUNfQ0hFQ0tfSEVBREVSUyhjcnRkZWZzLmgpCiBmaQpkaWZmIC0tZ2l0IGEv c3JjL01ha2VmaWxlLmdsb2JhbC5pbiBiL3NyYy9NYWtlZmlsZS5nbG9iYWwuaW4KaW5kZXggYmJk YzFjNGJkYS4uYzljNjFhOWM5OSAxMDA2NDQKLS0tIGEvc3JjL01ha2VmaWxlLmdsb2JhbC5pbgor KysgYi9zcmMvTWFrZWZpbGUuZ2xvYmFsLmluCkBAIC0xOTMsNiArMTkzLDcgQEAgd2l0aF9sZGFw CT0gQHdpdGhfbGRhcEAKIHdpdGhfbGlieG1sCT0gQHdpdGhfbGlieG1sQAogd2l0aF9saWJ4c2x0 CT0gQHdpdGhfbGlieHNsdEAKIHdpdGhfbGx2bQk9IEB3aXRoX2xsdm1ACit3aXRoX29hdXRoCT0g QHdpdGhfb2F1dGhACiB3aXRoX3N5c3RlbV90emRhdGEgPSBAd2l0aF9zeXN0ZW1fdHpkYXRhQAog d2l0aF91dWlkCT0gQHdpdGhfdXVpZEAKIHdpdGhfemxpYgk9IEB3aXRoX3psaWJACmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9jb21tb24vb2F1dGgtY29tbW9uLmggYi9zcmMvaW5jbHVkZS9jb21t b24vb2F1dGgtY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u M2ZhOTVhYzdlOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1vbi9vYXV0aC1j b21tb24uaApAQCAtMCwwICsxLDE5IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBvYXV0 aC1jb21tb24uaAorICoJCURlY2xhcmF0aW9ucyBmb3IgaGVscGVyIGZ1bmN0aW9ucyB1c2VkIGZv ciBPQXV0aC9PSURDIGF1dGhlbnRpY2F0aW9uCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj KSAxOTk2LTIwMjEsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0 aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2Fs aWZvcm5pYQorICoKKyAqIHNyYy9pbmNsdWRlL2NvbW1vbi9vYXV0aC1jb21tb24uaAorICoKKyAq LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIE9BVVRIX0NPTU1PTl9ICisjZGVmaW5lIE9B VVRIX0NPTU1PTl9ICisKKy8qIE5hbWUgb2YgU0FTTCBtZWNoYW5pc20gcGVyIElBTkEgKi8KKyNk ZWZpbmUgT0FVVEhCRUFSRVJfTkFNRSAiT0FVVEhCRUFSRVIiCisKKyNlbmRpZiAvKiBPQVVUSF9D T01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcGdfY29uZmlnLmguaW4gYi9zcmMv aW5jbHVkZS9wZ19jb25maWcuaC5pbgppbmRleCA2MzVmYmIyMTgxLi4xYjMzMzI2MDFlIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9wZ19jb25maWcuaC5pbgorKysgYi9zcmMvaW5jbHVkZS9wZ19j b25maWcuaC5pbgpAQCAtMzE5LDYgKzMxOSw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2 ZSB0aGUgYGNyeXB0bycgbGlicmFyeSAoLWxjcnlwdG8pLiAqLwogI3VuZGVmIEhBVkVfTElCQ1JZ UFRPCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaWRkYXdjJyBsaWJyYXJ5ICgt bGlkZGF3YykuICovCisjdW5kZWYgSEFWRV9MSUJJRERBV0MKKwogLyogRGVmaW5lIHRvIDEgaWYg eW91IGhhdmUgdGhlIGBsZGFwJyBsaWJyYXJ5ICgtbGxkYXApLiAqLwogI3VuZGVmIEhBVkVfTElC TERBUAogCkBAIC05MjIsNiArOTI1LDkgQEAKIC8qIERlZmluZSB0byBzZWxlY3QgbmFtZWQgUE9T SVggc2VtYXBob3Jlcy4gKi8KICN1bmRlZiBVU0VfTkFNRURfUE9TSVhfU0VNQVBIT1JFUwogCisv KiBEZWZpbmUgdG8gMSB0byBidWlsZCB3aXRoIE9BdXRoIDIuMCBzdXBwb3J0LiAoLS13aXRoLW9h dXRoKSAqLworI3VuZGVmIFVTRV9PQVVUSAorCiAvKiBEZWZpbmUgdG8gMSB0byBidWlsZCB3aXRo IE9wZW5TU0wgc3VwcG9ydC4gKC0td2l0aC1zc2w9b3BlbnNzbCkgKi8KICN1bmRlZiBVU0VfT1BF TlNTTAogCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9NYWtlZmlsZSBiL3NyYy9p bnRlcmZhY2VzL2xpYnBxL01ha2VmaWxlCmluZGV4IDNjNTMzOTNmYTQuLjcyNzMwNWM1NzggMTAw NjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL01ha2VmaWxlCisrKyBiL3NyYy9pbnRlcmZh Y2VzL2xpYnBxL01ha2VmaWxlCkBAIC02Miw2ICs2MiwxMSBAQCBPQkpTICs9IFwKIAlmZS1zZWN1 cmUtZ3NzYXBpLm8KIGVuZGlmCiAKK2lmZXEgKCQod2l0aF9vYXV0aCkseWVzKQorT0JKUyArPSBc CisJZmUtYXV0aC1vYXV0aC5vCitlbmRpZgorCiBpZmVxICgkKFBPUlROQU1FKSwgY3lnd2luKQog b3ZlcnJpZGUgc2hsaWIgPSBjeWckKE5BTUUpJChETFNVRkZJWCkKIGVuZGlmCkBAIC04Myw3ICs4 OCw3IEBAIGVuZGlmCiAjIHRoYXQgYXJlIGJ1aWx0IGNvcnJlY3RseSBmb3IgdXNlIGluIGEgc2hs aWIuCiBTSExJQl9MSU5LX0lOVEVSTkFMID0gLWxwZ2NvbW1vbl9zaGxpYiAtbHBncG9ydF9zaGxp YgogaWZuZXEgKCQoUE9SVE5BTUUpLCB3aW4zMikKLVNITElCX0xJTksgKz0gJChmaWx0ZXIgLWxj cnlwdCAtbGRlcyAtbGNvbV9lcnIgLWxjcnlwdG8gLWxrNWNyeXB0byAtbGtyYjUgLWxnc3NhcGlf a3JiNSAtbGdzcyAtbGdzc2FwaSAtbHNzbCAtbHNvY2tldCAtbG5zbCAtbHJlc29sdiAtbGludGwg LWxtLCAkKExJQlMpKSAkKExEQVBfTElCU19GRSkgJChQVEhSRUFEX0xJQlMpCitTSExJQl9MSU5L ICs9ICQoZmlsdGVyIC1sY3J5cHQgLWxkZXMgLWxjb21fZXJyIC1sY3J5cHRvIC1sazVjcnlwdG8g LWxrcmI1IC1sZ3NzYXBpX2tyYjUgLWxnc3MgLWxnc3NhcGkgLWxzc2wgLWxpZGRhd2MgLWxzb2Nr ZXQgLWxuc2wgLWxyZXNvbHYgLWxpbnRsIC1sbSwgJChMSUJTKSkgJChMREFQX0xJQlNfRkUpICQo UFRIUkVBRF9MSUJTKQogZWxzZQogU0hMSUJfTElOSyArPSAkKGZpbHRlciAtbGNyeXB0IC1sZGVz IC1sY29tX2VyciAtbGNyeXB0byAtbGs1Y3J5cHRvIC1sa3JiNSAtbGdzc2FwaTMyIC1sc3NsIC1s c29ja2V0IC1sbnNsIC1scmVzb2x2IC1saW50bCAtbG0gJChQVEhSRUFEX0xJQlMpLCAkKExJQlMp KSAkKExEQVBfTElCU19GRSkKIGVuZGlmCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJw cS9mZS1hdXRoLW9hdXRoLmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMzgzYzlkNGJkYgotLS0gL2Rl di9udWxsCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguYwpAQCAtMCww ICsxLDc0NCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZmUtYXV0aC1vYXV0aC5jCisg KgkgICBUaGUgZnJvbnQtZW5kIChjbGllbnQpIGltcGxlbWVudGF0aW9uIG9mIE9BdXRoL09JREMg YXV0aGVudGljYXRpb24uCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjEs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmln aHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoK KyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1 dGguYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlIDxpZGRhd2MuaD4K KworI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCisKKyNpbmNsdWRlICJjb21tb24vYmFzZTY0Lmgi CisjaW5jbHVkZSAiY29tbW9uL2htYWMuaCIKKyNpbmNsdWRlICJjb21tb24vanNvbmFwaS5oIgor I2luY2x1ZGUgImNvbW1vbi9vYXV0aC1jb21tb24uaCIKKyNpbmNsdWRlICJmZS1hdXRoLmgiCisj aW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKKworLyogVGhlIGV4cG9ydGVkIE9BdXRoIGNhbGxiYWNr IG1lY2hhbmlzbS4gKi8KK3N0YXRpYyB2b2lkICpvYXV0aF9pbml0KFBHY29ubiAqY29ubiwgY29u c3QgY2hhciAqcGFzc3dvcmQsCisJCQkJCQljb25zdCBjaGFyICpzYXNsX21lY2hhbmlzbSk7Citz dGF0aWMgdm9pZCBvYXV0aF9leGNoYW5nZSh2b2lkICpvcGFxLCBib29sIGZpbmFsLAorCQkJCQkJ ICAgY2hhciAqaW5wdXQsIGludCBpbnB1dGxlbiwKKwkJCQkJCSAgIGNoYXIgKipvdXRwdXQsIGlu dCAqb3V0cHV0bGVuLAorCQkJCQkJICAgYm9vbCAqZG9uZSwgYm9vbCAqc3VjY2Vzcyk7CitzdGF0 aWMgYm9vbCBvYXV0aF9jaGFubmVsX2JvdW5kKHZvaWQgKm9wYXEpOworc3RhdGljIHZvaWQgb2F1 dGhfZnJlZSh2b2lkICpvcGFxKTsKKworY29uc3QgcGdfZmVfc2FzbF9tZWNoIHBnX29hdXRoX21l Y2ggPSB7CisJb2F1dGhfaW5pdCwKKwlvYXV0aF9leGNoYW5nZSwKKwlvYXV0aF9jaGFubmVsX2Jv dW5kLAorCW9hdXRoX2ZyZWUsCit9OworCit0eXBlZGVmIGVudW0KK3sKKwlGRV9PQVVUSF9JTklU LAorCUZFX09BVVRIX0JFQVJFUl9TRU5ULAorCUZFX09BVVRIX1NFUlZFUl9FUlJPUiwKK30gZmVf b2F1dGhfc3RhdGVfZW51bTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlmZV9vYXV0aF9zdGF0ZV9l bnVtIHN0YXRlOworCisJUEdjb25uCSAgICpjb25uOworfSBmZV9vYXV0aF9zdGF0ZTsKKworc3Rh dGljIHZvaWQgKgorb2F1dGhfaW5pdChQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnBhc3N3b3Jk LAorCQkgICBjb25zdCBjaGFyICpzYXNsX21lY2hhbmlzbSkKK3sKKwlmZV9vYXV0aF9zdGF0ZSAq c3RhdGU7CisKKwkvKgorCSAqIFdlIG9ubHkgc3VwcG9ydCBvbmUgU0FTTCBtZWNoYW5pc20gaGVy ZTsgYW55dGhpbmcgZWxzZSBpcyBwcm9ncmFtbWVyCisJICogZXJyb3IuCisJICovCisJQXNzZXJ0 KHNhc2xfbWVjaGFuaXNtICE9IE5VTEwpOworCUFzc2VydCghc3RyY21wKHNhc2xfbWVjaGFuaXNt LCBPQVVUSEJFQVJFUl9OQU1FKSk7CisKKwlzdGF0ZSA9IG1hbGxvYyhzaXplb2YoKnN0YXRlKSk7 CisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzdGF0ZS0+c3RhdGUgPSBGRV9PQVVU SF9JTklUOworCXN0YXRlLT5jb25uID0gY29ubjsKKworCXJldHVybiBzdGF0ZTsKK30KKworc3Rh dGljIGNvbnN0IGNoYXIgKgoraWRkYXdjX2Vycm9yX3N0cmluZyhpbnQgZXJyY29kZSkKK3sKKwlz d2l0Y2ggKGVycmNvZGUpCisJeworCQljYXNlIElfT0s6CisJCQlyZXR1cm4gIklfT0siOworCisJ CWNhc2UgSV9FUlJPUjoKKwkJCXJldHVybiAiSV9FUlJPUiI7CisKKwkJY2FzZSBJX0VSUk9SX1BB UkFNOgorCQkJcmV0dXJuICJJX0VSUk9SX1BBUkFNIjsKKworCQljYXNlIElfRVJST1JfTUVNT1JZ OgorCQkJcmV0dXJuICJJX0VSUk9SX01FTU9SWSI7CisKKwkJY2FzZSBJX0VSUk9SX1VOQVVUSE9S SVpFRDoKKwkJCXJldHVybiAiSV9FUlJPUl9VTkFVVEhPUklaRUQiOworCisJCWNhc2UgSV9FUlJP Ul9TRVJWRVI6CisJCQlyZXR1cm4gIklfRVJST1JfU0VSVkVSIjsKKwl9CisKKwlyZXR1cm4gIjx1 bmtub3duPiI7Cit9CisKK3N0YXRpYyB2b2lkCitpZGRhd2NfZXJyb3IoUEdjb25uICpjb25uLCBp bnQgZXJyY29kZSwgY29uc3QgY2hhciAqbXNnKQoreworCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZj b25uLT5lcnJvck1lc3NhZ2UsIGxpYnBxX2dldHRleHQobXNnKSk7CisJYXBwZW5kUFFFeHBCdWZm ZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwKKwkJCQkJICBsaWJwcV9nZXR0ZXh0KCIgKGlkZGF3YyBl cnJvciAlcylcbiIpLAorCQkJCQkgIGlkZGF3Y19lcnJvcl9zdHJpbmcoZXJyY29kZSkpOworfQor CitzdGF0aWMgdm9pZAoraWRkYXdjX3JlcXVlc3RfZXJyb3IoUEdjb25uICpjb25uLCBzdHJ1Y3Qg X2lfc2Vzc2lvbiAqaSwgaW50IGVyciwgY29uc3QgY2hhciAqbXNnKQoreworCWNvbnN0IGNoYXIg KmVycm9yX2NvZGU7CisJY29uc3QgY2hhciAqZGVzYzsKKworCWFwcGVuZFBRRXhwQnVmZmVyKCZj b25uLT5lcnJvck1lc3NhZ2UsICIlczogIiwgbGlicHFfZ2V0dGV4dChtc2cpKTsKKworCWVycm9y X2NvZGUgPSBpX2dldF9zdHJfcGFyYW1ldGVyKGksIElfT1BUX0VSUk9SKTsKKwlpZiAoIWVycm9y X2NvZGUpCisJeworCQkvKgorCQkgKiBUaGUgc2VydmVyIGRpZG4ndCBnaXZlIHVzIGFueSB1c2Vm dWwgaW5mb3JtYXRpb24sIHNvIGp1c3QgcHJpbnQgdGhlCisJCSAqIGVycm9yIGNvZGUuCisJCSAq LworCQlhcHBlbmRQUUV4cEJ1ZmZlcigmY29ubi0+ZXJyb3JNZXNzYWdlLAorCQkJCQkJICBsaWJw cV9nZXR0ZXh0KCIoaWRkYXdjIGVycm9yICVzKVxuIiksCisJCQkJCQkgIGlkZGF3Y19lcnJvcl9z dHJpbmcoZXJyKSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBJZiB0aGUgc2VydmVyIGdhdmUgYSBz dHJpbmcgZGVzY3JpcHRpb24sIHByaW50IHRoYXQgdG9vLiAqLworCWRlc2MgPSBpX2dldF9zdHJf cGFyYW1ldGVyKGksIElfT1BUX0VSUk9SX0RFU0NSSVBUSU9OKTsKKwlpZiAoZGVzYykKKwkJYXBw ZW5kUFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwgIiVzICIsIGRlc2MpOworCisJYXBw ZW5kUFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwgIiglcylcbiIsIGVycm9yX2NvZGUp OworfQorCitzdGF0aWMgY2hhciAqCitnZXRfYXV0aF90b2tlbihQR2Nvbm4gKmNvbm4pCit7CisJ UFFFeHBCdWZmZXIJdG9rZW5fYnVmID0gTlVMTDsKKwlzdHJ1Y3QgX2lfc2Vzc2lvbiBzZXNzaW9u OworCWludAkJCWVycjsKKwlpbnQJCQlhdXRoX21ldGhvZDsKKwlib29sCQl1c2VyX3Byb21wdGVk ID0gZmFsc2U7CisJY29uc3QgY2hhciAqdmVyaWZpY2F0aW9uX3VyaTsKKwljb25zdCBjaGFyICp1 c2VyX2NvZGU7CisJY29uc3QgY2hhciAqYWNjZXNzX3Rva2VuOworCWNvbnN0IGNoYXIgKnRva2Vu X3R5cGU7CisJY2hhcgkgICAqdG9rZW4gPSBOVUxMOworCisJaWYgKCFjb25uLT5vYXV0aF9kaXNj b3ZlcnlfdXJpKQorCQlyZXR1cm4gc3RyZHVwKCIiKTsgLyogYXNrIHRoZSBzZXJ2ZXIgZm9yIG9u ZSAqLworCisJaWYgKCFjb25uLT5vYXV0aF9jbGllbnRfaWQpCisJeworCQkvKiBXZSBjYW4ndCB0 YWxrIHRvIGEgc2VydmVyIHdpdGhvdXQgYSBjbGllbnQgaWRlbnRpZmllci4gKi8KKwkJYXBwZW5k UFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVzc2FnZSwKKwkJCQkJCQkgbGlicHFfZ2V0dGV4 dCgibm8gb2F1dGhfY2xpZW50X2lkIGlzIHNldCBmb3IgdGhlIGNvbm5lY3Rpb24iKSk7CisJCXJl dHVybiBOVUxMOworCX0KKworCWlfaW5pdF9zZXNzaW9uKCZzZXNzaW9uKTsKKworCXRva2VuX2J1 ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJaWYgKCF0b2tlbl9idWYpCisJCWdvdG8gY2xlYW51 cDsKKworCWVyciA9IGlfc2V0X3N0cl9wYXJhbWV0ZXIoJnNlc3Npb24sIElfT1BUX09QRU5JRF9D T05GSUdfRU5EUE9JTlQsIGNvbm4tPm9hdXRoX2Rpc2NvdmVyeV91cmkpOworCWlmIChlcnIpCisJ eworCQlpZGRhd2NfZXJyb3IoY29ubiwgZXJyLCAiZmFpbGVkIHRvIHNldCBPcGVuSUQgY29uZmln IGVuZHBvaW50Iik7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwllcnIgPSBpX2dldF9vcGVuaWRf Y29uZmlnKCZzZXNzaW9uKTsKKwlpZiAoZXJyKQorCXsKKwkJaWRkYXdjX2Vycm9yKGNvbm4sIGVy ciwgImZhaWxlZCB0byBmZXRjaCBPcGVuSUQgZGlzY292ZXJ5IGRvY3VtZW50Iik7CisJCWdvdG8g Y2xlYW51cDsKKwl9CisKKwlpZiAoIWlfZ2V0X3N0cl9wYXJhbWV0ZXIoJnNlc3Npb24sIElfT1BU X1RPS0VOX0VORFBPSU5UKSkKKwl7CisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjb25uLT5lcnJv ck1lc3NhZ2UsCisJCQkJCQkJIGxpYnBxX2dldHRleHQoImlzc3VlciBoYXMgbm8gdG9rZW4gZW5k cG9pbnQiKSk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlpZiAoIWlfZ2V0X3N0cl9wYXJhbWV0 ZXIoJnNlc3Npb24sIElfT1BUX0RFVklDRV9BVVRIT1JJWkFUSU9OX0VORFBPSU5UKSkKKwl7CisJ CWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjb25uLT5lcnJvck1lc3NhZ2UsCisJCQkJCQkJIGxpYnBx X2dldHRleHQoImlzc3VlciBkb2VzIG5vdCBzdXBwb3J0IGRldmljZSBhdXRob3JpemF0aW9uIikp OworCQlnb3RvIGNsZWFudXA7CisJfQorCisJZXJyID0gaV9zZXRfcmVzcG9uc2VfdHlwZSgmc2Vz c2lvbiwgSV9SRVNQT05TRV9UWVBFX0RFVklDRV9DT0RFKTsKKwlpZiAoZXJyKQorCXsKKwkJaWRk YXdjX2Vycm9yKGNvbm4sIGVyciwgImZhaWxlZCB0byBzZXQgZGV2aWNlIGNvZGUgcmVzcG9uc2Ug dHlwZSIpOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJYXV0aF9tZXRob2QgPSBJX1RPS0VOX0FV VEhfTUVUSE9EX05PTkU7CisJaWYgKGNvbm4tPm9hdXRoX2NsaWVudF9zZWNyZXQgJiYgKmNvbm4t Pm9hdXRoX2NsaWVudF9zZWNyZXQpCisJCWF1dGhfbWV0aG9kID0gSV9UT0tFTl9BVVRIX01FVEhP RF9TRUNSRVRfQkFTSUM7CisKKwllcnIgPSBpX3NldF9wYXJhbWV0ZXJfbGlzdCgmc2Vzc2lvbiwK KwkJSV9PUFRfQ0xJRU5UX0lELCBjb25uLT5vYXV0aF9jbGllbnRfaWQsCisJCUlfT1BUX0NMSUVO VF9TRUNSRVQsIGNvbm4tPm9hdXRoX2NsaWVudF9zZWNyZXQsCisJCUlfT1BUX1RPS0VOX01FVEhP RCwgYXV0aF9tZXRob2QsCisJCUlfT1BUX1NDT1BFLCBjb25uLT5vYXV0aF9zY29wZSwKKwkJSV9P UFRfTk9ORQorCSk7CisJaWYgKGVycikKKwl7CisJCWlkZGF3Y19lcnJvcihjb25uLCBlcnIsICJm YWlsZWQgdG8gc2V0IGNsaWVudCBpZGVudGlmaWVyIik7CisJCWdvdG8gY2xlYW51cDsKKwl9CisK KwllcnIgPSBpX3J1bl9kZXZpY2VfYXV0aF9yZXF1ZXN0KCZzZXNzaW9uKTsKKwlpZiAoZXJyKQor CXsKKwkJaWRkYXdjX3JlcXVlc3RfZXJyb3IoY29ubiwgJnNlc3Npb24sIGVyciwKKwkJCQkJCQki ZmFpbGVkIHRvIG9idGFpbiBkZXZpY2UgYXV0aG9yaXphdGlvbiIpOworCQlnb3RvIGNsZWFudXA7 CisJfQorCisJdmVyaWZpY2F0aW9uX3VyaSA9IGlfZ2V0X3N0cl9wYXJhbWV0ZXIoJnNlc3Npb24s IElfT1BUX0RFVklDRV9BVVRIX1ZFUklGSUNBVElPTl9VUkkpOworCWlmICghdmVyaWZpY2F0aW9u X3VyaSkKKwl7CisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjb25uLT5lcnJvck1lc3NhZ2UsCisJ CQkJCQkJIGxpYnBxX2dldHRleHQoImlzc3VlciBkaWQgbm90IHByb3ZpZGUgYSB2ZXJpZmljYXRp b24gVVJJIikpOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJdXNlcl9jb2RlID0gaV9nZXRfc3Ry X3BhcmFtZXRlcigmc2Vzc2lvbiwgSV9PUFRfREVWSUNFX0FVVEhfVVNFUl9DT0RFKTsKKwlpZiAo IXVzZXJfY29kZSkKKwl7CisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjb25uLT5lcnJvck1lc3Nh Z2UsCisJCQkJCQkJIGxpYnBxX2dldHRleHQoImlzc3VlciBkaWQgbm90IHByb3ZpZGUgYSB1c2Vy IGNvZGUiKSk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKgorCSAqIFBvbGwgdGhlIHRva2Vu IGVuZHBvaW50IHVudGlsIGVpdGhlciB0aGUgdXNlciBsb2dzIGluIGFuZCBhdXRob3JpemVzIHRo ZQorCSAqIHVzZSBvZiBhIHRva2VuLCBvciBhIGhhcmQgZmFpbHVyZSBvY2N1cnMuIFdlIHBlcmZv cm0gb25lIHBpbmcgX2JlZm9yZV8KKwkgKiBwcm9tcHRpbmcgdGhlIHVzZXIsIHNvIHRoYXQgd2Ug ZG9uJ3QgbWFrZSB0aGVtIGRvIHRoZSB3b3JrIG9mIGxvZ2dpbmcgaW4KKwkgKiBvbmx5IHRvIGZp bmQgdGhhdCB0aGUgdG9rZW4gZW5kcG9pbnQgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZS4KKwkg Ki8KKwllcnIgPSBpX3J1bl90b2tlbl9yZXF1ZXN0KCZzZXNzaW9uKTsKKwl3aGlsZSAoZXJyKQor CXsKKwkJY29uc3QgY2hhciAqZXJyb3JfY29kZTsKKwkJdWludAkJaW50ZXJ2YWw7CisKKwkJZXJy b3JfY29kZSA9IGlfZ2V0X3N0cl9wYXJhbWV0ZXIoJnNlc3Npb24sIElfT1BUX0VSUk9SKTsKKwor CQkvKgorCQkgKiBhdXRob3JpemF0aW9uX3BlbmRpbmcgYW5kIHNsb3dfZG93biBhcmUgdGhlIG9u bHkgYWNjZXB0YWJsZSBlcnJvcnM7CisJCSAqIGFueXRoaW5nIGVsc2UgYW5kIHdlIGJhaWwuCisJ CSAqLworCQlpZiAoIWVycm9yX2NvZGUgfHwgKHN0cmNtcChlcnJvcl9jb2RlLCAiYXV0aG9yaXph dGlvbl9wZW5kaW5nIikKKwkJCQkJCQkmJiBzdHJjbXAoZXJyb3JfY29kZSwgInNsb3dfZG93biIp KSkKKwkJeworCQkJaWRkYXdjX3JlcXVlc3RfZXJyb3IoY29ubiwgJnNlc3Npb24sIGVyciwKKwkJ CQkJCQkJIk9BdXRoIHRva2VuIHJldHJpZXZhbCBmYWlsZWQiKTsKKwkJCWdvdG8gY2xlYW51cDsK KwkJfQorCisJCWlmICghdXNlcl9wcm9tcHRlZCkKKwkJeworCQkJLyoKKwkJCSAqIE5vdyB0aGF0 IHdlIGtub3cgdGhlIHRva2VuIGVuZHBvaW50IGlzbid0IGJyb2tlbiwgZ2l2ZSB0aGUgdXNlcgor CQkJICogdGhlIGxvZ2luIGluc3RydWN0aW9ucy4KKwkJCSAqLworCQkJcHFJbnRlcm5hbE5vdGlj ZSgmY29ubi0+bm90aWNlSG9va3MsCisJCQkJCQkJICJWaXNpdCAlcyBhbmQgZW50ZXIgdGhlIGNv ZGU6ICVzIiwKKwkJCQkJCQkgdmVyaWZpY2F0aW9uX3VyaSwgdXNlcl9jb2RlKTsKKworCQkJdXNl cl9wcm9tcHRlZCA9IHRydWU7CisJCX0KKworCQkvKgorCQkgKiBXZSBhcmUgcmVxdWlyZWQgdG8g d2FpdCBiZXR3ZWVuIHBvbGxzOyB0aGUgc2VydmVyIHRlbGxzIHVzIGhvdyBsb25nLgorCQkgKiBU T0RPOiBpZiBpbnRlcnZhbCdzIG5vdCBzZXQsIHdlIG5lZWQgdG8gZGVmYXVsdCB0byBmaXZlIHNl Y29uZHMKKwkJICogVE9ETzogc2FuaXR5IGNoZWNrIHRoZSBpbnRlcnZhbAorCQkgKi8KKwkJaW50 ZXJ2YWwgPSBpX2dldF9pbnRfcGFyYW1ldGVyKCZzZXNzaW9uLCBJX09QVF9ERVZJQ0VfQVVUSF9J TlRFUlZBTCk7CisKKwkJLyoKKwkJICogQSBzbG93X2Rvd24gZXJyb3IgcmVxdWlyZXMgdXMgdG8g cGVybWFuZW50bHkgaW5jcmVhc2Ugb3VyIHJldHJ5CisJCSAqIGludGVydmFsIGJ5IGZpdmUgc2Vj b25kcy4gUkZDIDg2MjgsIFNlYy4gMy41LgorCQkgKi8KKwkJaWYgKCFzdHJjbXAoZXJyb3JfY29k ZSwgInNsb3dfZG93biIpKQorCQl7CisJCQlpbnRlcnZhbCArPSA1OworCQkJaV9zZXRfaW50X3Bh cmFtZXRlcigmc2Vzc2lvbiwgSV9PUFRfREVWSUNFX0FVVEhfSU5URVJWQUwsIGludGVydmFsKTsK KwkJfQorCisJCXNsZWVwKGludGVydmFsKTsKKworCQkvKgorCQkgKiBYWFggUmVzZXQgdGhlIGVy cm9yIGNvZGUgYmVmb3JlIGV2ZXJ5IGNhbGwsIGJlY2F1c2UgaWRkYXdjIHdvbid0IGRvCisJCSAq IHRoYXQgZm9yIHVzLiBUaGlzIG1hdHRlcnMgaWYgdGhlIHNlcnZlciBmaXJzdCBzZW5kcyBhICJw ZW5kaW5nIiBlcnJvcgorCQkgKiBjb2RlLCB0aGVuIGxhdGVyIGhhcmQtZmFpbHMgd2l0aG91dCBz ZW5kaW5nIGFuIGVycm9yIGNvZGUgdG8KKwkJICogb3ZlcndyaXRlIHRoZSBmaXJzdCBvbmUuCisJ CSAqCisJCSAqIFRoYXQgd2UgaGF2ZSB0byBkbyB0aGlzIGF0IGFsbCBzZWVtcyBsaWtlIGEgYnVn IGluIGlkZGF3Yy4KKwkJICovCisJCWlfc2V0X3N0cl9wYXJhbWV0ZXIoJnNlc3Npb24sIElfT1BU X0VSUk9SLCBOVUxMKTsKKworCQllcnIgPSBpX3J1bl90b2tlbl9yZXF1ZXN0KCZzZXNzaW9uKTsK Kwl9CisKKwlhY2Nlc3NfdG9rZW4gPSBpX2dldF9zdHJfcGFyYW1ldGVyKCZzZXNzaW9uLCBJX09Q VF9BQ0NFU1NfVE9LRU4pOworCXRva2VuX3R5cGUgPSBpX2dldF9zdHJfcGFyYW1ldGVyKCZzZXNz aW9uLCBJX09QVF9UT0tFTl9UWVBFKTsKKworCWlmICghYWNjZXNzX3Rva2VuIHx8ICF0b2tlbl90 eXBlIHx8IHN0cmNhc2VjbXAodG9rZW5fdHlwZSwgIkJlYXJlciIpKQorCXsKKwkJYXBwZW5kUFFF eHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVzc2FnZSwKKwkJCQkJCQkgbGlicHFfZ2V0dGV4dCgi aXNzdWVyIGRpZCBub3QgcHJvdmlkZSBhIGJlYXJlciB0b2tlbiIpKTsKKwkJZ290byBjbGVhbnVw OworCX0KKworCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHRva2VuX2J1ZiwgIkJlYXJlciAiKTsKKwlh cHBlbmRQUUV4cEJ1ZmZlclN0cih0b2tlbl9idWYsIGFjY2Vzc190b2tlbik7CisKKwlpZiAoUFFF eHBCdWZmZXJCcm9rZW4odG9rZW5fYnVmKSkKKwkJZ290byBjbGVhbnVwOworCisJdG9rZW4gPSBz dHJkdXAodG9rZW5fYnVmLT5kYXRhKTsKKworY2xlYW51cDoKKwlpZiAodG9rZW5fYnVmKQorCQlk ZXN0cm95UFFFeHBCdWZmZXIodG9rZW5fYnVmKTsKKwlpX2NsZWFuX3Nlc3Npb24oJnNlc3Npb24p OworCisJcmV0dXJuIHRva2VuOworfQorCisjZGVmaW5lIGt2c2VwICJceDAxIgorCitzdGF0aWMg Y2hhciAqCitjbGllbnRfaW5pdGlhbF9yZXNwb25zZShQR2Nvbm4gKmNvbm4pCit7CisJc3RhdGlj IGNvbnN0IGNoYXIgKiBjb25zdCByZXNwX2Zvcm1hdCA9ICJuLCwiIGt2c2VwICJhdXRoPSVzIiBr dnNlcCBrdnNlcDsKKworCVBRRXhwQnVmZmVyCXRva2VuX2J1ZjsKKwlQUUV4cEJ1ZmZlcglkaXNj b3ZlcnlfYnVmID0gTlVMTDsKKwljaGFyCSAgICp0b2tlbiA9IE5VTEw7CisJY2hhcgkgICAqcmVz cG9uc2UgPSBOVUxMOworCisJdG9rZW5fYnVmID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwlpZiAo IXRva2VuX2J1ZikKKwkJZ290byBjbGVhbnVwOworCisJLyoKKwkgKiBJZiB3ZSBkb24ndCB5ZXQg aGF2ZSBhIGRpc2NvdmVyeSBVUkksIGJ1dCB0aGUgdXNlciBnYXZlIHVzIGFuIGV4cGxpY2l0CisJ ICogaXNzdWVyLCB1c2UgdGhlIC53ZWxsLWtub3duIGRpc2NvdmVyeSBVUkkgZm9yIHRoYXQgaXNz dWVyLgorCSAqLworCWlmICghY29ubi0+b2F1dGhfZGlzY292ZXJ5X3VyaSAmJiBjb25uLT5vYXV0 aF9pc3N1ZXIpCisJeworCQlkaXNjb3ZlcnlfYnVmID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwkJ aWYgKCFkaXNjb3ZlcnlfYnVmKQorCQkJZ290byBjbGVhbnVwOworCisJCWFwcGVuZFBRRXhwQnVm ZmVyU3RyKGRpc2NvdmVyeV9idWYsIGNvbm4tPm9hdXRoX2lzc3Vlcik7CisJCWFwcGVuZFBRRXhw QnVmZmVyU3RyKGRpc2NvdmVyeV9idWYsICIvLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRp b24iKTsKKworCQlpZiAoUFFFeHBCdWZmZXJCcm9rZW4oZGlzY292ZXJ5X2J1ZikpCisJCQlnb3Rv IGNsZWFudXA7CisKKwkJY29ubi0+b2F1dGhfZGlzY292ZXJ5X3VyaSA9IHN0cmR1cChkaXNjb3Zl cnlfYnVmLT5kYXRhKTsKKwl9CisKKwl0b2tlbiA9IGdldF9hdXRoX3Rva2VuKGNvbm4pOworCWlm ICghdG9rZW4pCisJCWdvdG8gY2xlYW51cDsKKworCWFwcGVuZFBRRXhwQnVmZmVyKHRva2VuX2J1 ZiwgcmVzcF9mb3JtYXQsIHRva2VuKTsKKwlpZiAoUFFFeHBCdWZmZXJCcm9rZW4odG9rZW5fYnVm KSkKKwkJZ290byBjbGVhbnVwOworCisJcmVzcG9uc2UgPSBzdHJkdXAodG9rZW5fYnVmLT5kYXRh KTsKKworY2xlYW51cDoKKwlpZiAodG9rZW4pCisJCWZyZWUodG9rZW4pOworCWlmIChkaXNjb3Zl cnlfYnVmKQorCQlkZXN0cm95UFFFeHBCdWZmZXIoZGlzY292ZXJ5X2J1Zik7CisJaWYgKHRva2Vu X2J1ZikKKwkJZGVzdHJveVBRRXhwQnVmZmVyKHRva2VuX2J1Zik7CisKKwlyZXR1cm4gcmVzcG9u c2U7Cit9CisKKyNkZWZpbmUgRVJST1JfU1RBVFVTX0ZJRUxEICJzdGF0dXMiCisjZGVmaW5lIEVS Uk9SX1NDT1BFX0ZJRUxEICJzY29wZSIKKyNkZWZpbmUgRVJST1JfT1BFTklEX0NPTkZJR1VSQVRJ T05fRklFTEQgIm9wZW5pZC1jb25maWd1cmF0aW9uIgorCitzdHJ1Y3QganNvbl9jdHgKK3sKKwlj aGFyCQkgICAqZXJybXNnOyAvKiBhbnkgbm9uLU5VTEwgdmFsdWUgc3RvcHMgYWxsIHByb2Nlc3Np bmcgKi8KKwlQUUV4cEJ1ZmZlckRhdGEgZXJyYnVmOyAvKiBiYWNraW5nIG1lbW9yeSBmb3IgZXJy bXNnICovCisJaW50CQkJCW5lc3RlZDsgLyogbmVzdGluZyBsZXZlbCAoemVybyBpcyB0aGUgdG9w KSAqLworCisJY29uc3QgY2hhcgkgICAqdGFyZ2V0X2ZpZWxkX25hbWU7IC8qIHBvaW50cyB0byBh IHN0YXRpYyBhbGxvY2F0aW9uICovCisJY2hhcgkJICAqKnRhcmdldF9maWVsZDsgICAgICAvKiBz ZWUgYmVsb3cgKi8KKworCS8qIHRhcmdldF9maWVsZCwgaWYgc2V0LCBwb2ludHMgdG8gb25lIG9m IHRoZSBmb2xsb3dpbmc6ICovCisJY2hhcgkJICAgKnN0YXR1czsKKwljaGFyCQkgICAqc2NvcGU7 CisJY2hhcgkJICAgKmRpc2NvdmVyeV91cmk7Cit9OworCisjZGVmaW5lIG9hdXRoX2pzb25faGFz X2Vycm9yKGN0eCkgXAorCShQUUV4cEJ1ZmZlckRhdGFCcm9rZW4oKGN0eCktPmVycmJ1ZikgfHwg KGN0eCktPmVycm1zZykKKworI2RlZmluZSBvYXV0aF9qc29uX3NldF9lcnJvcihjdHgsIC4uLikg XAorCWRvIHsgXAorCQlhcHBlbmRQUUV4cEJ1ZmZlcigmKGN0eCktPmVycmJ1ZiwgX19WQV9BUkdT X18pOyBcCisJCShjdHgpLT5lcnJtc2cgPSAoY3R4KS0+ZXJyYnVmLmRhdGE7IFwKKwl9IHdoaWxl ICgwKQorCitzdGF0aWMgdm9pZAorb2F1dGhfanNvbl9vYmplY3Rfc3RhcnQodm9pZCAqc3RhdGUp Cit7CisJc3RydWN0IGpzb25fY3R4CSAgICpjdHggPSBzdGF0ZTsKKworCWlmIChvYXV0aF9qc29u X2hhc19lcnJvcihjdHgpKQorCQlyZXR1cm47IC8qIHNob3J0LWNpcmN1aXQgKi8KKworCWlmIChj dHgtPnRhcmdldF9maWVsZCkKKwl7CisJCUFzc2VydChjdHgtPm5lc3RlZCA9PSAxKTsKKworCQlv YXV0aF9qc29uX3NldF9lcnJvcihjdHgsCisJCQkJCQkJIGxpYnBxX2dldHRleHQoImZpZWxkIFwi JXNcIiBtdXN0IGJlIGEgc3RyaW5nIiksCisJCQkJCQkJIGN0eC0+dGFyZ2V0X2ZpZWxkX25hbWUp OworCX0KKworCSsrY3R4LT5uZXN0ZWQ7Cit9CisKK3N0YXRpYyB2b2lkCitvYXV0aF9qc29uX29i amVjdF9lbmQodm9pZCAqc3RhdGUpCit7CisJc3RydWN0IGpzb25fY3R4CSAgICpjdHggPSBzdGF0 ZTsKKworCWlmIChvYXV0aF9qc29uX2hhc19lcnJvcihjdHgpKQorCQlyZXR1cm47IC8qIHNob3J0 LWNpcmN1aXQgKi8KKworCS0tY3R4LT5uZXN0ZWQ7Cit9CisKK3N0YXRpYyB2b2lkCitvYXV0aF9q c29uX29iamVjdF9maWVsZF9zdGFydCh2b2lkICpzdGF0ZSwgY2hhciAqbmFtZSwgYm9vbCBpc251 bGwpCit7CisJc3RydWN0IGpzb25fY3R4CSAgICpjdHggPSBzdGF0ZTsKKworCWlmIChvYXV0aF9q c29uX2hhc19lcnJvcihjdHgpKQorCXsKKwkJLyogc2hvcnQtY2lyY3VpdCAqLworCQlmcmVlKG5h bWUpOworCQlyZXR1cm47CisJfQorCisJaWYgKGN0eC0+bmVzdGVkID09IDEpCisJeworCQlpZiAo IXN0cmNtcChuYW1lLCBFUlJPUl9TVEFUVVNfRklFTEQpKQorCQl7CisJCQljdHgtPnRhcmdldF9m aWVsZF9uYW1lID0gRVJST1JfU1RBVFVTX0ZJRUxEOworCQkJY3R4LT50YXJnZXRfZmllbGQgPSAm Y3R4LT5zdGF0dXM7CisJCX0KKwkJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCBFUlJPUl9TQ09QRV9G SUVMRCkpCisJCXsKKwkJCWN0eC0+dGFyZ2V0X2ZpZWxkX25hbWUgPSBFUlJPUl9TQ09QRV9GSUVM RDsKKwkJCWN0eC0+dGFyZ2V0X2ZpZWxkID0gJmN0eC0+c2NvcGU7CisJCX0KKwkJZWxzZSBpZiAo IXN0cmNtcChuYW1lLCBFUlJPUl9PUEVOSURfQ09ORklHVVJBVElPTl9GSUVMRCkpCisJCXsKKwkJ CWN0eC0+dGFyZ2V0X2ZpZWxkX25hbWUgPSBFUlJPUl9PUEVOSURfQ09ORklHVVJBVElPTl9GSUVM RDsKKwkJCWN0eC0+dGFyZ2V0X2ZpZWxkID0gJmN0eC0+ZGlzY292ZXJ5X3VyaTsKKwkJfQorCX0K KworCWZyZWUobmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkCitvYXV0aF9qc29uX2FycmF5X3N0YXJ0 KHZvaWQgKnN0YXRlKQoreworCXN0cnVjdCBqc29uX2N0eAkgICAqY3R4ID0gc3RhdGU7CisKKwlp ZiAob2F1dGhfanNvbl9oYXNfZXJyb3IoY3R4KSkKKwkJcmV0dXJuOyAvKiBzaG9ydC1jaXJjdWl0 ICovCisKKwlpZiAoIWN0eC0+bmVzdGVkKQorCXsKKwkJY3R4LT5lcnJtc2cgPSBsaWJwcV9nZXR0 ZXh0KCJ0b3AtbGV2ZWwgZWxlbWVudCBtdXN0IGJlIGFuIG9iamVjdCIpOworCX0KKwllbHNlIGlm IChjdHgtPnRhcmdldF9maWVsZCkKKwl7CisJCUFzc2VydChjdHgtPm5lc3RlZCA9PSAxKTsKKwor CQlvYXV0aF9qc29uX3NldF9lcnJvcihjdHgsCisJCQkJCQkJIGxpYnBxX2dldHRleHQoImZpZWxk IFwiJXNcIiBtdXN0IGJlIGEgc3RyaW5nIiksCisJCQkJCQkJIGN0eC0+dGFyZ2V0X2ZpZWxkX25h bWUpOworCX0KK30KKworc3RhdGljIHZvaWQKK29hdXRoX2pzb25fc2NhbGFyKHZvaWQgKnN0YXRl LCBjaGFyICp0b2tlbiwgSnNvblRva2VuVHlwZSB0eXBlKQoreworCXN0cnVjdCBqc29uX2N0eAkg ICAqY3R4ID0gc3RhdGU7CisKKwlpZiAob2F1dGhfanNvbl9oYXNfZXJyb3IoY3R4KSkKKwl7CisJ CS8qIHNob3J0LWNpcmN1aXQgKi8KKwkJZnJlZSh0b2tlbik7CisJCXJldHVybjsKKwl9CisKKwlp ZiAoIWN0eC0+bmVzdGVkKQorCXsKKwkJY3R4LT5lcnJtc2cgPSBsaWJwcV9nZXR0ZXh0KCJ0b3At bGV2ZWwgZWxlbWVudCBtdXN0IGJlIGFuIG9iamVjdCIpOworCX0KKwllbHNlIGlmIChjdHgtPnRh cmdldF9maWVsZCkKKwl7CisJCUFzc2VydChjdHgtPm5lc3RlZCA9PSAxKTsKKworCQlpZiAodHlw ZSA9PSBKU09OX1RPS0VOX1NUUklORykKKwkJeworCQkJKmN0eC0+dGFyZ2V0X2ZpZWxkID0gdG9r ZW47CisKKwkJCWN0eC0+dGFyZ2V0X2ZpZWxkID0gTlVMTDsKKwkJCWN0eC0+dGFyZ2V0X2ZpZWxk X25hbWUgPSBOVUxMOworCisJCQlyZXR1cm47IC8qIGRvbid0IGZyZWUgdGhlIHRva2VuIHdlJ3Jl IHVzaW5nICovCisJCX0KKworCQlvYXV0aF9qc29uX3NldF9lcnJvcihjdHgsCisJCQkJCQkJIGxp YnBxX2dldHRleHQoImZpZWxkIFwiJXNcIiBtdXN0IGJlIGEgc3RyaW5nIiksCisJCQkJCQkJIGN0 eC0+dGFyZ2V0X2ZpZWxkX25hbWUpOworCX0KKworCWZyZWUodG9rZW4pOworfQorCitzdGF0aWMg Ym9vbAoraGFuZGxlX29hdXRoX3Nhc2xfZXJyb3IoUEdjb25uICpjb25uLCBjaGFyICptc2csIGlu dCBtc2dsZW4pCit7CisJSnNvbkxleENvbnRleHQJCWxleCA9IHswfTsKKwlKc29uU2VtQWN0aW9u CQlzZW0gPSB7MH07CisJSnNvblBhcnNlRXJyb3JUeXBlCWVycjsKKwlzdHJ1Y3QganNvbl9jdHgJ CWN0eCA9IHswfTsKKwljaGFyCQkJICAgKmVycm1zZyA9IE5VTEw7CisKKwkvKiBTYW5pdHkgY2hl Y2suICovCisJaWYgKHN0cmxlbihtc2cpICE9IG1zZ2xlbikKKwl7CisJCWFwcGVuZFBRRXhwQnVm ZmVyU3RyKCZjb25uLT5lcnJvck1lc3NhZ2UsCisJCQkJCQkJIGxpYnBxX2dldHRleHQoInNlcnZl cidzIGVycm9yIG1lc3NhZ2UgY29udGFpbmVkIGFuIGVtYmVkZGVkIE5VTEwiKSk7CisJCXJldHVy biBmYWxzZTsKKwl9CisKKwlpbml0SnNvbkxleENvbnRleHRDc3RyaW5nTGVuKCZsZXgsIG1zZywg bXNnbGVuLCBQR19VVEY4LCB0cnVlKTsKKworCWluaXRQUUV4cEJ1ZmZlcigmY3R4LmVycmJ1Zik7 CisJc2VtLnNlbXN0YXRlID0gJmN0eDsKKworCXNlbS5vYmplY3Rfc3RhcnQgPSBvYXV0aF9qc29u X29iamVjdF9zdGFydDsKKwlzZW0ub2JqZWN0X2VuZCA9IG9hdXRoX2pzb25fb2JqZWN0X2VuZDsK KwlzZW0ub2JqZWN0X2ZpZWxkX3N0YXJ0ID0gb2F1dGhfanNvbl9vYmplY3RfZmllbGRfc3RhcnQ7 CisJc2VtLmFycmF5X3N0YXJ0ID0gb2F1dGhfanNvbl9hcnJheV9zdGFydDsKKwlzZW0uc2NhbGFy ID0gb2F1dGhfanNvbl9zY2FsYXI7CisKKwllcnIgPSBwZ19wYXJzZV9qc29uKCZsZXgsICZzZW0p OworCisJaWYgKGVyciAhPSBKU09OX1NVQ0NFU1MpCisJeworCQllcnJtc2cgPSBqc29uX2VycmRl dGFpbChlcnIsICZsZXgpOworCX0KKwllbHNlIGlmIChQUUV4cEJ1ZmZlckRhdGFCcm9rZW4oY3R4 LmVycmJ1ZikpCisJeworCQllcnJtc2cgPSBsaWJwcV9nZXR0ZXh0KCJvdXQgb2YgbWVtb3J5Iik7 CisJfQorCWVsc2UgaWYgKGN0eC5lcnJtc2cpCisJeworCQllcnJtc2cgPSBjdHguZXJybXNnOwor CX0KKworCWlmIChlcnJtc2cpCisJCWFwcGVuZFBRRXhwQnVmZmVyKCZjb25uLT5lcnJvck1lc3Nh Z2UsCisJCQkJCQkgIGxpYnBxX2dldHRleHQoImZhaWxlZCB0byBwYXJzZSBzZXJ2ZXIncyBlcnJv ciByZXNwb25zZTogJXMiKSwKKwkJCQkJCSAgZXJybXNnKTsKKworCS8qIERvbid0IG5lZWQgdGhl IGVycm9yIGJ1ZmZlciBvciB0aGUgSlNPTiBsZXhlciBhbnltb3JlLiAqLworCXRlcm1QUUV4cEJ1 ZmZlcigmY3R4LmVycmJ1Zik7CisJdGVybUpzb25MZXhDb250ZXh0KCZsZXgpOworCisJaWYgKGVy cm1zZykKKwkJcmV0dXJuIGZhbHNlOworCisJLyogVE9ETzogd2hhdCBpZiB0aGVzZSBvdmVycmlk ZSB3aGF0IHRoZSB1c2VyIGFscmVhZHkgc3BlY2lmaWVkPyAqLworCWlmIChjdHguZGlzY292ZXJ5 X3VyaSkKKwl7CisJCWlmIChjb25uLT5vYXV0aF9kaXNjb3ZlcnlfdXJpKQorCQkJZnJlZShjb25u LT5vYXV0aF9kaXNjb3ZlcnlfdXJpKTsKKworCQljb25uLT5vYXV0aF9kaXNjb3ZlcnlfdXJpID0g Y3R4LmRpc2NvdmVyeV91cmk7CisJfQorCisJaWYgKGN0eC5zY29wZSkKKwl7CisJCWlmIChjb25u LT5vYXV0aF9zY29wZSkKKwkJCWZyZWUoY29ubi0+b2F1dGhfc2NvcGUpOworCisJCWNvbm4tPm9h dXRoX3Njb3BlID0gY3R4LnNjb3BlOworCX0KKwkvKiBUT0RPOiBtaXNzaW5nIGVycm9yIHNjb3Bl IHNob3VsZCBjbGVhciBhbnkgZXhpc3RpbmcgY29ubmVjdGlvbiBzY29wZSAqLworCisJaWYgKCFj dHguc3RhdHVzKQorCXsKKwkJYXBwZW5kUFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwK KwkJCQkJCSAgbGlicHFfZ2V0dGV4dCgic2VydmVyIHNlbnQgZXJyb3IgcmVzcG9uc2Ugd2l0aG91 dCBhIHN0YXR1cyIpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmICghc3RyY21wKGN0eC5z dGF0dXMsICJpbnZhbGlkX3Rva2VuIikpCisJeworCQkvKgorCQkgKiBpbnZhbGlkX3Rva2VuIGlz IHRoZSBvbmx5IGVycm9yIGNvZGUgd2UnbGwgYXV0b21hdGljYWxseSByZXRyeSBmb3IsCisJCSAq IGJ1dCBvbmx5IGlmIHdlIGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGRvIHNvLgorCQkgKi8K KwkJaWYgKGNvbm4tPm9hdXRoX2Rpc2NvdmVyeV91cmkpCisJCQljb25uLT5vYXV0aF93YW50X3Jl dHJ5ID0gdHJ1ZTsKKwl9CisJLyogVE9ETzogaW5jbHVkZSBzdGF0dXMgaW4gaGFyZCBmYWlsdXJl IG1lc3NhZ2UgKi8KKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZAorb2F1dGhfZXhj aGFuZ2Uodm9pZCAqb3BhcSwgYm9vbCBmaW5hbCwKKwkJCSAgIGNoYXIgKmlucHV0LCBpbnQgaW5w dXRsZW4sCisJCQkgICBjaGFyICoqb3V0cHV0LCBpbnQgKm91dHB1dGxlbiwKKwkJCSAgIGJvb2wg KmRvbmUsIGJvb2wgKnN1Y2Nlc3MpCit7CisJZmVfb2F1dGhfc3RhdGUgKnN0YXRlID0gb3BhcTsK KwlQR2Nvbm4JICAgKmNvbm4gPSBzdGF0ZS0+Y29ubjsKKworCSpkb25lID0gZmFsc2U7CisJKnN1 Y2Nlc3MgPSBmYWxzZTsKKwkqb3V0cHV0ID0gTlVMTDsKKwkqb3V0cHV0bGVuID0gMDsKKworCXN3 aXRjaCAoc3RhdGUtPnN0YXRlKQorCXsKKwkJY2FzZSBGRV9PQVVUSF9JTklUOgorCQkJQXNzZXJ0 KGlucHV0bGVuID09IC0xKTsKKworCQkJKm91dHB1dCA9IGNsaWVudF9pbml0aWFsX3Jlc3BvbnNl KGNvbm4pOworCQkJaWYgKCEqb3V0cHV0KQorCQkJCWdvdG8gZXJyb3I7CisKKwkJCSpvdXRwdXRs ZW4gPSBzdHJsZW4oKm91dHB1dCk7CisJCQlzdGF0ZS0+c3RhdGUgPSBGRV9PQVVUSF9CRUFSRVJf U0VOVDsKKworCQkJYnJlYWs7CisKKwkJY2FzZSBGRV9PQVVUSF9CRUFSRVJfU0VOVDoKKwkJCWlm IChmaW5hbCkKKwkJCXsKKwkJCQkvKiBUT0RPOiBlbnN1cmUgdGhlcmUgaXMgbm8gbWVzc2FnZSBj b250ZW50IGhlcmUuICovCisJCQkJKmRvbmUgPSB0cnVlOworCQkJCSpzdWNjZXNzID0gdHJ1ZTsK KworCQkJCWJyZWFrOworCQkJfQorCisJCQkvKgorCQkJICogRXJyb3IgbWVzc2FnZSBzZW50IGJ5 IHRoZSBzZXJ2ZXIuCisJCQkgKi8KKwkJCWlmICghaGFuZGxlX29hdXRoX3Nhc2xfZXJyb3IoY29u biwgaW5wdXQsIGlucHV0bGVuKSkKKwkJCQlnb3RvIGVycm9yOworCisJCQkvKgorCQkJICogUmVz cG9uZCB3aXRoIHRoZSByZXF1aXJlZCBkdW1teSBtZXNzYWdlIChSRkMgNzYyOCwgc2VjLiAzLjIu MykuCisJCQkgKi8KKwkJCSpvdXRwdXQgPSBzdHJkdXAoa3ZzZXApOworCQkJKm91dHB1dGxlbiA9 IHN0cmxlbigqb3V0cHV0KTsgLyogPT0gMSAqLworCisJCQlzdGF0ZS0+c3RhdGUgPSBGRV9PQVVU SF9TRVJWRVJfRVJST1I7CisJCQlicmVhazsKKworCQljYXNlIEZFX09BVVRIX1NFUlZFUl9FUlJP UjoKKwkJCS8qCisJCQkgKiBBZnRlciBhbiBlcnJvciwgdGhlIHNlcnZlciBzaG91bGQgc2VuZCBh biBlcnJvciByZXNwb25zZSB0byBmYWlsCisJCQkgKiB0aGUgU0FTTCBoYW5kc2hha2UsIHdoaWNo IGlzIGhhbmRsZWQgaW4gaGlnaGVyIGxheWVycy4KKwkJCSAqCisJCQkgKiBJZiB3ZSBnZXQgaGVy ZSwgdGhlIHNlcnZlciBlaXRoZXIgc2VudCAqYW5vdGhlciogY2hhbGxlbmdlIHdoaWNoCisJCQkg KiBpc24ndCBkZWZpbmVkIGluIHRoZSBSRkMsIG9yIGNvbXBsZXRlZCB0aGUgaGFuZHNoYWtlIHN1 Y2Nlc3NmdWxseQorCQkJICogYWZ0ZXIgdGVsbGluZyB1cyBpdCB3YXMgZ29pbmcgdG8gZmFpbC4g TmVpdGhlciBpcyBhY2NlcHRhYmxlLgorCQkJICovCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigm Y29ubi0+ZXJyb3JNZXNzYWdlLAorCQkJCQkJCQkgbGlicHFfZ2V0dGV4dCgic2VydmVyIHNlbnQg YWRkaXRpb25hbCBPQXV0aCBkYXRhIGFmdGVyIGVycm9yXG4iKSk7CisJCQlnb3RvIGVycm9yOwor CisJCWRlZmF1bHQ6CisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNzYWdl LAorCQkJCQkJCQkgbGlicHFfZ2V0dGV4dCgiaW52YWxpZCBPQXV0aCBleGNoYW5nZSBzdGF0ZVxu IikpOworCQkJZ290byBlcnJvcjsKKwl9CisKKwlyZXR1cm47CisKK2Vycm9yOgorCSpkb25lID0g dHJ1ZTsKKwkqc3VjY2VzcyA9IGZhbHNlOworfQorCitzdGF0aWMgYm9vbAorb2F1dGhfY2hhbm5l bF9ib3VuZCh2b2lkICpvcGFxKQoreworCS8qIFRoaXMgbWVjaGFuaXNtIGRvZXMgbm90IHN1cHBv cnQgY2hhbm5lbCBiaW5kaW5nLiAqLworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQK K29hdXRoX2ZyZWUodm9pZCAqb3BhcSkKK3sKKwlmZV9vYXV0aF9zdGF0ZSAqc3RhdGUgPSBvcGFx OworCisJZnJlZShzdGF0ZSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9m ZS1hdXRoLXNhc2wuaCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtc2FzbC5oCmluZGV4 IGRhM2MzMGI4N2IuLmIxYmIzODJmNzAgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBx L2ZlLWF1dGgtc2FzbC5oCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtc2FzbC5o CkBAIC02NSw2ICs2NSw4IEBAIHR5cGVkZWYgc3RydWN0IHBnX2ZlX3Nhc2xfbWVjaAogCSAqCiAJ ICoJc3RhdGU6CSAgIFRoZSBvcGFxdWUgbWVjaGFuaXNtIHN0YXRlIHJldHVybmVkIGJ5IGluaXQo KQogCSAqCisJICoJZmluYWw6CSAgIHRydWUgaWYgdGhlIHNlcnZlciBoYXMgc2VudCBhIGZpbmFs IGV4Y2hhbmdlIG91dGNvbWUKKwkgKgogCSAqCWlucHV0OgkgICBUaGUgY2hhbGxlbmdlIGRhdGEg c2VudCBieSB0aGUgc2VydmVyLCBvciBOVUxMIHdoZW4KIAkgKgkJCSAgIGdlbmVyYXRpbmcgYSBj bGllbnQtZmlyc3QgaW5pdGlhbCByZXNwb25zZSAodGhhdCBpcywgd2hlbgogCSAqCQkJICAgdGhl IHNlcnZlciBleHBlY3RzIHRoZSBjbGllbnQgdG8gc2VuZCBhIG1lc3NhZ2UgdG8gc3RhcnQKQEAg LTkyLDcgKzk0LDggQEAgdHlwZWRlZiBzdHJ1Y3QgcGdfZmVfc2FzbF9tZWNoCiAJICoJCQkgICBJ Z25vcmVkIGlmICpkb25lIGlzIGZhbHNlLgogCSAqLS0tLS0tLS0KIAkgKi8KLQl2b2lkCQkoKmV4 Y2hhbmdlKSAodm9pZCAqc3RhdGUsIGNoYXIgKmlucHV0LCBpbnQgaW5wdXRsZW4sCisJdm9pZAkJ KCpleGNoYW5nZSkgKHZvaWQgKnN0YXRlLCBib29sIGZpbmFsLAorCQkJCQkJCSBjaGFyICppbnB1 dCwgaW50IGlucHV0bGVuLAogCQkJCQkJCSBjaGFyICoqb3V0cHV0LCBpbnQgKm91dHB1dGxlbiwK IAkJCQkJCQkgYm9vbCAqZG9uZSwgYm9vbCAqc3VjY2Vzcyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9p bnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtc2NyYW0uYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2Zl LWF1dGgtc2NyYW0uYwppbmRleCBlNjE2MjAwNzA0Li42ODFiNzZhZGJlIDEwMDY0NAotLS0gYS9z cmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLXNjcmFtLmMKKysrIGIvc3JjL2ludGVyZmFjZXMv bGlicHEvZmUtYXV0aC1zY3JhbS5jCkBAIC0yNCw3ICsyNCw4IEBACiAvKiBUaGUgZXhwb3J0ZWQg U0NSQU0gY2FsbGJhY2sgbWVjaGFuaXNtLiAqLwogc3RhdGljIHZvaWQgKnNjcmFtX2luaXQoUEdj b25uICpjb25uLCBjb25zdCBjaGFyICpwYXNzd29yZCwKIAkJCQkJCWNvbnN0IGNoYXIgKnNhc2xf bWVjaGFuaXNtKTsKLXN0YXRpYyB2b2lkIHNjcmFtX2V4Y2hhbmdlKHZvaWQgKm9wYXEsIGNoYXIg KmlucHV0LCBpbnQgaW5wdXRsZW4sCitzdGF0aWMgdm9pZCBzY3JhbV9leGNoYW5nZSh2b2lkICpv cGFxLCBib29sIGZpbmFsLAorCQkJCQkJICAgY2hhciAqaW5wdXQsIGludCBpbnB1dGxlbiwKIAkJ CQkJCSAgIGNoYXIgKipvdXRwdXQsIGludCAqb3V0cHV0bGVuLAogCQkJCQkJICAgYm9vbCAqZG9u ZSwgYm9vbCAqc3VjY2Vzcyk7CiBzdGF0aWMgYm9vbCBzY3JhbV9jaGFubmVsX2JvdW5kKHZvaWQg Km9wYXEpOwpAQCAtMjA2LDcgKzIwNyw4IEBAIHNjcmFtX2ZyZWUodm9pZCAqb3BhcSkKICAqIEV4 Y2hhbmdlIGEgU0NSQU0gbWVzc2FnZSB3aXRoIGJhY2tlbmQuCiAgKi8KIHN0YXRpYyB2b2lkCi1z Y3JhbV9leGNoYW5nZSh2b2lkICpvcGFxLCBjaGFyICppbnB1dCwgaW50IGlucHV0bGVuLAorc2Ny YW1fZXhjaGFuZ2Uodm9pZCAqb3BhcSwgYm9vbCBmaW5hbCwKKwkJCSAgIGNoYXIgKmlucHV0LCBp bnQgaW5wdXRsZW4sCiAJCQkgICBjaGFyICoqb3V0cHV0LCBpbnQgKm91dHB1dGxlbiwKIAkJCSAg IGJvb2wgKmRvbmUsIGJvb2wgKnN1Y2Nlc3MpCiB7CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNl cy9saWJwcS9mZS1hdXRoLmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLmMKaW5kZXgg NmZjZWZmNTYxYi4uMjU2N2EzNDAyMyAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEv ZmUtYXV0aC5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGguYwpAQCAtMzgsNiAr MzgsNyBAQAogI2VuZGlmCiAKICNpbmNsdWRlICJjb21tb24vbWQ1LmgiCisjaW5jbHVkZSAiY29t bW9uL29hdXRoLWNvbW1vbi5oIgogI2luY2x1ZGUgImNvbW1vbi9zY3JhbS1jb21tb24uaCIKICNp bmNsdWRlICJmZS1hdXRoLmgiCiAjaW5jbHVkZSAiZmUtYXV0aC1zYXNsLmgiCkBAIC00MjIsNyAr NDIzLDcgQEAgcGdfU0FTTF9pbml0KFBHY29ubiAqY29ubiwgaW50IHBheWxvYWRsZW4pCiAJYm9v bAkJc3VjY2VzczsKIAljb25zdCBjaGFyICpzZWxlY3RlZF9tZWNoYW5pc207CiAJUFFFeHBCdWZm ZXJEYXRhIG1lY2hhbmlzbV9idWY7Ci0JY2hhcgkgICAqcGFzc3dvcmQ7CisJY2hhcgkgICAqcGFz c3dvcmQgPSBOVUxMOwogCiAJaW5pdFBRRXhwQnVmZmVyKCZtZWNoYW5pc21fYnVmKTsKIApAQCAt NDQ0LDggKzQ0NSw3IEBAIHBnX1NBU0xfaW5pdChQR2Nvbm4gKmNvbm4sIGludCBwYXlsb2FkbGVu KQogCS8qCiAJICogUGFyc2UgdGhlIGxpc3Qgb2YgU0FTTCBhdXRoZW50aWNhdGlvbiBtZWNoYW5p c21zIGluIHRoZQogCSAqIEF1dGhlbnRpY2F0aW9uU0FTTCBtZXNzYWdlLCBhbmQgc2VsZWN0IHRo ZSBiZXN0IG1lY2hhbmlzbSB0aGF0IHdlCi0JICogc3VwcG9ydC4gIFNDUkFNLVNIQS0yNTYtUExV UyBhbmQgU0NSQU0tU0hBLTI1NiBhcmUgdGhlIG9ubHkgb25lcwotCSAqIHN1cHBvcnRlZCBhdCB0 aGUgbW9tZW50LCBsaXN0ZWQgYnkgb3JkZXIgb2YgZGVjcmVhc2luZyBpbXBvcnRhbmNlLgorCSAq IHN1cHBvcnQuICBNZWNoYW5pc21zIGFyZSBsaXN0ZWQgYnkgb3JkZXIgb2YgZGVjcmVhc2luZyBp bXBvcnRhbmNlLgogCSAqLwogCXNlbGVjdGVkX21lY2hhbmlzbSA9IE5VTEw7CiAJZm9yICg7OykK QEAgLTQ4NSw2ICs0ODUsNyBAQCBwZ19TQVNMX2luaXQoUEdjb25uICpjb25uLCBpbnQgcGF5bG9h ZGxlbikKIAkJCQl7CiAJCQkJCXNlbGVjdGVkX21lY2hhbmlzbSA9IFNDUkFNX1NIQV8yNTZfUExV U19OQU1FOwogCQkJCQljb25uLT5zYXNsID0gJnBnX3NjcmFtX21lY2g7CisJCQkJCWNvbm4tPnBh c3N3b3JkX25lZWRlZCA9IHRydWU7CiAJCQkJfQogI2Vsc2UKIAkJCQkvKgpAQCAtNTIyLDcgKzUy MywxNyBAQCBwZ19TQVNMX2luaXQoUEdjb25uICpjb25uLCBpbnQgcGF5bG9hZGxlbikKIAkJewog CQkJc2VsZWN0ZWRfbWVjaGFuaXNtID0gU0NSQU1fU0hBXzI1Nl9OQU1FOwogCQkJY29ubi0+c2Fz bCA9ICZwZ19zY3JhbV9tZWNoOworCQkJY29ubi0+cGFzc3dvcmRfbmVlZGVkID0gdHJ1ZTsKIAkJ fQorI2lmZGVmIFVTRV9PQVVUSAorCQllbHNlIGlmIChzdHJjbXAobWVjaGFuaXNtX2J1Zi5kYXRh LCBPQVVUSEJFQVJFUl9OQU1FKSA9PSAwICYmCisJCQkJIXNlbGVjdGVkX21lY2hhbmlzbSkKKwkJ eworCQkJc2VsZWN0ZWRfbWVjaGFuaXNtID0gT0FVVEhCRUFSRVJfTkFNRTsKKwkJCWNvbm4tPnNh c2wgPSAmcGdfb2F1dGhfbWVjaDsKKwkJCWNvbm4tPnBhc3N3b3JkX25lZWRlZCA9IGZhbHNlOwor CQl9CisjZW5kaWYKIAl9CiAKIAlpZiAoIXNlbGVjdGVkX21lY2hhbmlzbSkKQEAgLTU0NywxOCAr NTU4LDE5IEBAIHBnX1NBU0xfaW5pdChQR2Nvbm4gKmNvbm4sIGludCBwYXlsb2FkbGVuKQogCiAJ LyoKIAkgKiBGaXJzdCwgc2VsZWN0IHRoZSBwYXNzd29yZCB0byB1c2UgZm9yIHRoZSBleGNoYW5n ZSwgY29tcGxhaW5pbmcgaWYKLQkgKiB0aGVyZSBpc24ndCBvbmUuICBDdXJyZW50bHksIGFsbCBz dXBwb3J0ZWQgU0FTTCBtZWNoYW5pc21zIHJlcXVpcmUgYQotCSAqIHBhc3N3b3JkLCBzbyB3ZSBj YW4ganVzdCBnbyBhaGVhZCBoZXJlIHdpdGhvdXQgZnVydGhlciBkaXN0aW5jdGlvbi4KKwkgKiB0 aGVyZSBpc24ndCBvbmUgYW5kIHRoZSBTQVNMIG1lY2hhbmlzbSBuZWVkcyBpdC4KIAkgKi8KLQlj b25uLT5wYXNzd29yZF9uZWVkZWQgPSB0cnVlOwotCXBhc3N3b3JkID0gY29ubi0+Y29ubmhvc3Rb Y29ubi0+d2hpY2hob3N0XS5wYXNzd29yZDsKLQlpZiAocGFzc3dvcmQgPT0gTlVMTCkKLQkJcGFz c3dvcmQgPSBjb25uLT5wZ3Bhc3M7Ci0JaWYgKHBhc3N3b3JkID09IE5VTEwgfHwgcGFzc3dvcmRb MF0gPT0gJ1wwJykKKwlpZiAoY29ubi0+cGFzc3dvcmRfbmVlZGVkKQogCXsKLQkJYXBwZW5kUFFF eHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVzc2FnZSwKLQkJCQkJCQkgUFFub1Bhc3N3b3JkU3Vw cGxpZWQpOwotCQlnb3RvIGVycm9yOworCQlwYXNzd29yZCA9IGNvbm4tPmNvbm5ob3N0W2Nvbm4t PndoaWNoaG9zdF0ucGFzc3dvcmQ7CisJCWlmIChwYXNzd29yZCA9PSBOVUxMKQorCQkJcGFzc3dv cmQgPSBjb25uLT5wZ3Bhc3M7CisJCWlmIChwYXNzd29yZCA9PSBOVUxMIHx8IHBhc3N3b3JkWzBd ID09ICdcMCcpCisJCXsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjb25uLT5lcnJvck1lc3Nh Z2UsCisJCQkJCQkJCSBQUW5vUGFzc3dvcmRTdXBwbGllZCk7CisJCQlnb3RvIGVycm9yOworCQl9 CiAJfQogCiAJQXNzZXJ0KGNvbm4tPnNhc2wpOwpAQCAtNTc2LDcgKzU4OCw3IEBAIHBnX1NBU0xf aW5pdChQR2Nvbm4gKmNvbm4sIGludCBwYXlsb2FkbGVuKQogCQlnb3RvIG9vbV9lcnJvcjsKIAog CS8qIEdldCB0aGUgbWVjaGFuaXNtLXNwZWNpZmljIEluaXRpYWwgQ2xpZW50IFJlc3BvbnNlLCBp ZiBhbnkgKi8KLQljb25uLT5zYXNsLT5leGNoYW5nZShjb25uLT5zYXNsX3N0YXRlLAorCWNvbm4t PnNhc2wtPmV4Y2hhbmdlKGNvbm4tPnNhc2xfc3RhdGUsIGZhbHNlLAogCQkJCQkJIE5VTEwsIC0x LAogCQkJCQkJICZpbml0aWFscmVzcG9uc2UsICZpbml0aWFscmVzcG9uc2VsZW4sCiAJCQkJCQkg JmRvbmUsICZzdWNjZXNzKTsKQEAgLTY1Nyw3ICs2NjksNyBAQCBwZ19TQVNMX2NvbnRpbnVlKFBH Y29ubiAqY29ubiwgaW50IHBheWxvYWRsZW4sIGJvb2wgZmluYWwpCiAJLyogRm9yIHNhZmV0eSBh bmQgY29udmVuaWVuY2UsIGVuc3VyZSB0aGUgYnVmZmVyIGlzIE5VTEwtdGVybWluYXRlZC4gKi8K IAljaGFsbGVuZ2VbcGF5bG9hZGxlbl0gPSAnXDAnOwogCi0JY29ubi0+c2FzbC0+ZXhjaGFuZ2Uo Y29ubi0+c2FzbF9zdGF0ZSwKKwljb25uLT5zYXNsLT5leGNoYW5nZShjb25uLT5zYXNsX3N0YXRl LCBmaW5hbCwKIAkJCQkJCSBjaGFsbGVuZ2UsIHBheWxvYWRsZW4sCiAJCQkJCQkgJm91dHB1dCwg Jm91dHB1dGxlbiwKIAkJCQkJCSAmZG9uZSwgJnN1Y2Nlc3MpOwpkaWZmIC0tZ2l0IGEvc3JjL2lu dGVyZmFjZXMvbGlicHEvZmUtYXV0aC5oIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC5o CmluZGV4IDA0OWE4YmIxYTEuLjJhNTY3NzQwMTkgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2Vz L2xpYnBxL2ZlLWF1dGguaAorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLmgKQEAg LTI4LDQgKzI4LDcgQEAgZXh0ZXJuIGNvbnN0IHBnX2ZlX3Nhc2xfbWVjaCBwZ19zY3JhbV9tZWNo OwogZXh0ZXJuIGNoYXIgKnBnX2ZlX3NjcmFtX2J1aWxkX3NlY3JldChjb25zdCBjaGFyICpwYXNz d29yZCwKIAkJCQkJCQkJCSAgY29uc3QgY2hhciAqKmVycnN0cik7CiAKKy8qIE1lY2hhbmlzbXMg aW4gZmUtYXV0aC1vYXV0aC5jICovCitleHRlcm4gY29uc3QgcGdfZmVfc2FzbF9tZWNoIHBnX29h dXRoX21lY2g7CisKICNlbmRpZgkJCQkJCQkvKiBGRV9BVVRIX0ggKi8KZGlmZiAtLWdpdCBhL3Ny Yy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3QuYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2Zl LWNvbm5lY3QuYwppbmRleCAxYzVhMmI0M2U5Li41Zjc4NDM5NTg2IDEwMDY0NAotLS0gYS9zcmMv aW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEv ZmUtY29ubmVjdC5jCkBAIC0zNDQsNiArMzQ0LDIzIEBAIHN0YXRpYyBjb25zdCBpbnRlcm5hbFBR Y29ubmluZm9PcHRpb24gUFFjb25uaW5mb09wdGlvbnNbXSA9IHsKIAkJIlRhcmdldC1TZXNzaW9u LUF0dHJzIiwgIiIsIDE1LCAvKiBzaXplb2YoInByZWZlci1zdGFuZGJ5IikgPSAxNSAqLwogCW9m ZnNldG9mKHN0cnVjdCBwZ19jb25uLCB0YXJnZXRfc2Vzc2lvbl9hdHRycyl9LAogCisJLyogT0F1 dGggdjIgKi8KKwl7Im9hdXRoX2lzc3VlciIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJPQXV0aC1J c3N1ZXIiLCAiIiwgNDAsCisJb2Zmc2V0b2Yoc3RydWN0IHBnX2Nvbm4sIG9hdXRoX2lzc3Vlcil9 LAorCisJeyJvYXV0aF9jbGllbnRfaWQiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiT0F1dGgtQ2xp ZW50LUlEIiwgIiIsIDQwLAorCW9mZnNldG9mKHN0cnVjdCBwZ19jb25uLCBvYXV0aF9jbGllbnRf aWQpfSwKKworCXsib2F1dGhfY2xpZW50X3NlY3JldCIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJP QXV0aC1DbGllbnQtU2VjcmV0IiwgIiIsIDQwLAorCW9mZnNldG9mKHN0cnVjdCBwZ19jb25uLCBv YXV0aF9jbGllbnRfc2VjcmV0KX0sCisKKwl7Im9hdXRoX3Njb3BlIiwgTlVMTCwgTlVMTCwgTlVM TCwKKwkJIk9BdXRoLVNjb3BlIiwgIiIsIDE1LAorCW9mZnNldG9mKHN0cnVjdCBwZ19jb25uLCBv YXV0aF9zY29wZSl9LAorCiAJLyogVGVybWluYXRpbmcgZW50cnkgLS0tIE1VU1QgQkUgTEFTVCAq LwogCXtOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAogCU5VTEwsIE5VTEwsIDB9CkBAIC02MDYsNiAr NjIzLDcgQEAgcHFEcm9wU2VydmVyRGF0YShQR2Nvbm4gKmNvbm4pCiAJY29ubi0+d3JpdGVfZXJy X21zZyA9IE5VTEw7CiAJY29ubi0+YmVfcGlkID0gMDsKIAljb25uLT5iZV9rZXkgPSAwOworCS8q IGNvbm4tPm9hdXRoX3dhbnRfcmV0cnkgPSBmYWxzZTsgVE9ETyAqLwogfQogCiAKQEAgLTMzODEs NiArMzM5OSwxNiBAQCBrZWVwX2dvaW5nOgkJCQkJCS8qIFdlIHdpbGwgY29tZSBiYWNrIHRvIGhl cmUgdW50aWwgdGhlcmUgaXMKIAkJCQkJLyogQ2hlY2sgdG8gc2VlIGlmIHdlIHNob3VsZCBtZW50 aW9uIHBncGFzc2ZpbGUgKi8KIAkJCQkJcGdwYXNzZmlsZVdhcm5pbmcoY29ubik7CiAKKyNpZmRl ZiBVU0VfT0FVVEgKKwkJCQkJaWYgKGNvbm4tPnNhc2wgPT0gJnBnX29hdXRoX21lY2gKKwkJCQkJ CSYmIGNvbm4tPm9hdXRoX3dhbnRfcmV0cnkpCisJCQkJCXsKKwkJCQkJCS8qIFRPRE86IG9ubHkg YWxsb3cgcmV0cnkgb25jZSAqLworCQkJCQkJbmVlZF9uZXdfY29ubmVjdGlvbiA9IHRydWU7CisJ CQkJCQlnb3RvIGtlZXBfZ29pbmc7CisJCQkJCX0KKyNlbmRpZgorCiAjaWZkZWYgRU5BQkxFX0dT UwogCiAJCQkJCS8qCkBAIC00MTYxLDYgKzQxODksMTYgQEAgZnJlZVBHY29ubihQR2Nvbm4gKmNv bm4pCiAJCWZyZWUoY29ubi0+cm93QnVmKTsKIAlpZiAoY29ubi0+dGFyZ2V0X3Nlc3Npb25fYXR0 cnMpCiAJCWZyZWUoY29ubi0+dGFyZ2V0X3Nlc3Npb25fYXR0cnMpOworCWlmIChjb25uLT5vYXV0 aF9pc3N1ZXIpCisJCWZyZWUoY29ubi0+b2F1dGhfaXNzdWVyKTsKKwlpZiAoY29ubi0+b2F1dGhf ZGlzY292ZXJ5X3VyaSkKKwkJZnJlZShjb25uLT5vYXV0aF9kaXNjb3ZlcnlfdXJpKTsKKwlpZiAo Y29ubi0+b2F1dGhfY2xpZW50X2lkKQorCQlmcmVlKGNvbm4tPm9hdXRoX2NsaWVudF9pZCk7CisJ aWYgKGNvbm4tPm9hdXRoX2NsaWVudF9zZWNyZXQpCisJCWZyZWUoY29ubi0+b2F1dGhfY2xpZW50 X3NlY3JldCk7CisJaWYgKGNvbm4tPm9hdXRoX3Njb3BlKQorCQlmcmVlKGNvbm4tPm9hdXRoX3Nj b3BlKTsKIAl0ZXJtUFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVzc2FnZSk7CiAJdGVybVBRRXhw QnVmZmVyKCZjb25uLT53b3JrQnVmZmVyKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMv bGlicHEvbGlicHEtaW50LmggYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1pbnQuaAppbmRl eCBlMGNlZTRiMTQyLi4wZGZmMTM1MDVhIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJw cS9saWJwcS1pbnQuaAorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1pbnQuaApAQCAt Mzk0LDYgKzM5NCwxNCBAQCBzdHJ1Y3QgcGdfY29ubgogCWNoYXIJICAgKnNzbF9tYXhfcHJvdG9j b2xfdmVyc2lvbjsJLyogbWF4aW11bSBUTFMgcHJvdG9jb2wgdmVyc2lvbiAqLwogCWNoYXIJICAg KnRhcmdldF9zZXNzaW9uX2F0dHJzOwkvKiBkZXNpcmVkIHNlc3Npb24gcHJvcGVydGllcyAqLwog CisJLyogT0F1dGggdjIgKi8KKwljaGFyCSAgICpvYXV0aF9pc3N1ZXI7CQkJLyogdG9rZW4gaXNz dWVyIFVSTCAqLworCWNoYXIJICAgKm9hdXRoX2Rpc2NvdmVyeV91cmk7CS8qIFVSSSBvZiB0aGUg aXNzdWVyJ3MgZGlzY292ZXJ5IGRvY3VtZW50ICovCisJY2hhcgkgICAqb2F1dGhfY2xpZW50X2lk OwkJLyogY2xpZW50IGlkZW50aWZpZXIgKi8KKwljaGFyCSAgICpvYXV0aF9jbGllbnRfc2VjcmV0 OwkvKiBjbGllbnQgc2VjcmV0ICovCisJY2hhcgkgICAqb2F1dGhfc2NvcGU7CQkJLyogYWNjZXNz IHRva2VuIHNjb3BlICovCisJYm9vbAkJb2F1dGhfd2FudF9yZXRyeTsJCS8qIHNob3VsZCB3ZSBy ZXRyeSBvbiBmYWlsdXJlPyAqLworCiAJLyogT3B0aW9uYWwgZmlsZSB0byB3cml0ZSB0cmFjZSBp bmZvIHRvICovCiAJRklMRQkgICAqUGZkZWJ1ZzsKIAlpbnQJCQl0cmFjZUZsYWdzOwotLSAKMi4y NS4xCgo= --_010_0e86fe7e3534fb05db02379fed404a2010eb1d62camelvmwarecom_ Content-Type: text/x-patch; name="v3-0006-backend-add-OAUTHBEARER-SASL-mechanism.patch" Content-Description: v3-0006-backend-add-OAUTHBEARER-SASL-mechanism.patch Content-Disposition: attachment; filename="v3-0006-backend-add-OAUTHBEARER-SASL-mechanism.patch"; size=36371; creation-date="Fri, 04 Mar 2022 19:13:41 GMT"; modification-date="Fri, 04 Mar 2022 19:13:41 GMT" Content-ID: <80EF2B530F43E34D965FEDFA9A587D3F@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 RnJvbSA0M2FiMDMxMGNlOGVlMjZhNDY5MTY3YTJlNGVhZTRjNGJjMjk1NTE4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8cGNoYW1waW9uQHZtd2FyZS5jb20+ CkRhdGU6IFR1ZSwgNCBNYXkgMjAyMSAxNjoyMToxMSAtMDcwMApTdWJqZWN0OiBbUEFUQ0ggdjMg Ni85XSBiYWNrZW5kOiBhZGQgT0FVVEhCRUFSRVIgU0FTTCBtZWNoYW5pc20KCkRPIE5PVCBVU0Ug VEhJUyBQUk9PRiBPRiBDT05DRVBUIElOIFBST0RVQ1RJT04uCgpJbXBsZW1lbnQgT0FVVEhCRUFS RVIgKFJGQyA3NjI4KSBvbiB0aGUgc2VydmVyIHNpZGUuIFRoaXMgYWRkcyBhIG5ldwphdXRoIG1l dGhvZCwgb2F1dGgsIHRvIHBnX2hiYS4KCkJlY2F1c2UgT0F1dGggaW1wbGVtZW50YXRpb25zIHZh cnkgc28gd2lsZGx5LCBhbmQgYmVhcmVyIHRva2VuCnZhbGlkYXRpb24gaXMgaGVhdmlseSBkZXBl bmRlbnQgb24gdGhlIGlzc3VpbmcgcGFydHksIGF1dGhuL3ogaXMgZG9uZSBieQpjb21tdW5pY2F0 aW5nIHdpdGggYW4gZXh0ZXJuYWwgcHJvZ3JhbTogdGhlIG9hdXRoX3ZhbGlkYXRvcl9jb21tYW5k LgpUaGlzIGNvbW1hbmQgbXVzdCBkbyB0aGUgZm9sbG93aW5nOgoKMS4gUmVjZWl2ZSB0aGUgYmVh cmVyIHRva2VuIGJ5IHJlYWRpbmcgaXRzIGNvbnRlbnRzIGZyb20gYSBmaWxlCiAgIGRlc2NyaXB0 b3IgcGFzc2VkIGZyb20gdGhlIHNlcnZlci4gKFRoZSBudW1lcmljIHZhbHVlIG9mIHRoaXMKICAg ZGVzY3JpcHRvciBtYXkgYmUgaW5zZXJ0ZWQgaW50byB0aGUgb2F1dGhfdmFsaWRhdG9yX2NvbW1h bmQgdXNpbmcgdGhlCiAgICVmIHNwZWNpZmllci4pCgogICBUaGlzIE1VU1QgYmUgdGhlIGZpcnN0 IGFjdGlvbiB0aGUgY29tbWFuZCBwZXJmb3Jtcy4gVGhlIHNlcnZlciB3aWxsCiAgIG5vdCBiZWdp biByZWFkaW5nIHN0ZG91dCBmcm9tIHRoZSBjb21tYW5kIHVudGlsIHRoZSB0b2tlbiBoYXMgYmVl bgogICByZWFkIGluIGZ1bGwsIHNvIGlmIHRoZSBjb21tYW5kIHRyaWVzIHRvIHByaW50IGFueXRo aW5nIGFuZCBoaXRzIGEKICAgYnVmZmVyIGxpbWl0LCB0aGUgYmFja2VuZCB3aWxsIGRlYWRsb2Nr IGFuZCB0aW1lIG91dC4KCjIuIFZhbGlkYXRlIHRoZSBiZWFyZXIgdG9rZW4uIFRoZSBjb3JyZWN0 IHdheSB0byBkbyB0aGlzIGRlcGVuZHMgb24gdGhlCiAgIGlzc3VlciwgYnV0IGl0IGdlbmVyYWxs eSBpbnZvbHZlcyBlaXRoZXIgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zIHRvCiAgIHByb3ZlIHRo YXQgdGhlIHRva2VuIHdhcyBpc3N1ZWQgYnkgYSB0cnVzdGVkIHBhcnR5LCBvciB0aGUKICAgcHJl c2VudGF0aW9uIG9mIHRoZSBiZWFyZXIgdG9rZW4gdG8gc29tZSBvdGhlciBwYXJ0eSBzbyB0aGF0 IF9pdF8gY2FuCiAgIHBlcmZvcm0gdmFsaWRhdGlvbi4KCiAgIFRoZSBjb21tYW5kIE1VU1QgbWFp bnRhaW4gY29uZmlkZW50aWFsaXR5IG9mIHRoZSBiZWFyZXIgdG9rZW4sIHNpbmNlCiAgIGluIG1v c3QgY2FzZXMgaXQgY2FuIGJlIHVzZWQganVzdCBsaWtlIGEgcGFzc3dvcmQuIChUaGVyZSBhcmUg d2F5cyB0bwogICBjcnlwdG9ncmFwaGljYWxseSBiaW5kIHRva2VucyB0byBjbGllbnQgY2VydGlm aWNhdGVzLCBidXQgdGhleSBhcmUKICAgd2F5IGJleW9uZCB0aGUgc2NvcGUgb2YgdGhpcyBjb21t aXQgbWVzc2FnZS4pCgogICBJZiB0aGUgdG9rZW4gY2Fubm90IGJlIHZhbGlkYXRlZCwgdGhlIGNv bW1hbmQgbXVzdCBleGl0IHdpdGggYQogICBub24temVybyBzdGF0dXMuIEZ1cnRoZXIgYXV0aGVu dGljYXRpb24vYXV0aG9yaXphdGlvbiBpcyBwb2ludGxlc3MgaWYKICAgdGhlIGJlYXJlciB0b2tl biB3YXNuJ3QgaXNzdWVkIGJ5IHNvbWVvbmUgeW91IHRydXN0LgoKMy4gQXV0aGVudGljYXRlIHRo ZSB1c2VyLCBhdXRob3JpemUgdGhlIHVzZXIsIG9yIGJvdGg6CgogICBhLiBUbyBhdXRoZW50aWNh dGUgdGhlIHVzZXIsIHVzZSB0aGUgYmVhcmVyIHRva2VuIHRvIHJldHJpZXZlIHNvbWUKICAgICAg dHJ1c3RlZCBpZGVudGlmaWVyIHN0cmluZyBmb3IgdGhlIGVuZCB1c2VyLiBUaGUgZXhhY3QgcHJv Y2VzcyBmb3IKICAgICAgdGhpcyBpcywgYWdhaW4sIGlzc3Vlci1kZXBlbmRlbnQuIFRoZSBjb21t YW5kIHNob3VsZCBwcmludCB0aGUKICAgICAgYXV0aGVudGljYXRlZCBpZGVudGl0eSBzdHJpbmcg dG8gc3Rkb3V0LCBmb2xsb3dlZCBieSBhIG5ld2xpbmUuCgogICAgICBJZiB0aGUgdXNlciBjYW5u b3QgYmUgYXV0aGVudGljYXRlZCwgdGhlIHZhbGlkYXRvciBzaG91bGQgbm90CiAgICAgIHByaW50 IGFueXRoaW5nIHRvIHN0ZG91dC4gSXQgc2hvdWxkIGFsc28gZXhpdCB3aXRoIGEgbm9uLXplcm8K ICAgICAgc3RhdHVzLCB1bmxlc3MgdGhlIHRva2VuIG1heSBiZSB1c2VkIHRvIGF1dGhvcml6ZSB0 aGUgY29ubmVjdGlvbgogICAgICB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMgKHNlZSBiZWxvdyku CgogICAgICBPbiBhIHN1Y2Nlc3MsIHRoZSBjb21tYW5kIG1heSB0aGVuIGV4aXQgd2l0aCBhIHpl cm8gc3VjY2VzcyBjb2RlLgogICAgICBCeSBkZWZhdWx0LCB0aGUgc2VydmVyIHdpbGwgdGhlbiBj aGVjayB0byBtYWtlIHN1cmUgdGhlIGlkZW50aXR5CiAgICAgIHN0cmluZyBtYXRjaGVzIHRoZSBy b2xlIHRoYXQgaXMgYmVpbmcgdXNlZCAob3IgbWF0Y2hlcyBhIHVzZXJtYXAKICAgICAgZW50cnks IGlmIG9uZSBpcyBpbiB1c2UpLgoKICAgYi4gVG8gb3B0aW9uYWxseSBhdXRob3JpemUgdGhlIHVz ZXIsIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIEhCQQogICAgICBvcHRpb24gdHJ1c3RfdmFsaWRh dG9yX2F1dGh6PTEgKHNlZSBiZWxvdyksIHRoZSB2YWxpZGF0b3Igc2ltcGx5CiAgICAgIHJldHVy bnMgYSB6ZXJvIGV4aXQgY29kZSBpZiB0aGUgY2xpZW50IHNob3VsZCBiZSBhbGxvd2VkIHRvCiAg ICAgIGNvbm5lY3Qgd2l0aCBpdHMgcHJlc2VudGVkIHJvbGUgKHdoaWNoIGNhbiBiZSBwYXNzZWQg dG8gdGhlCiAgICAgIGNvbW1hbmQgdXNpbmcgdGhlICVyIHNwZWNpZmllciksIG9yIGEgbm9uLXpl cm8gY29kZSBvdGhlcndpc2UuCgogICAgICBUaGUgaGFyZCBwYXJ0IGlzIGluIGRldGVybWluaW5n IHdoZXRoZXIgdGhlIGdpdmVuIHRva2VuIHRydWx5CiAgICAgIGF1dGhvcml6ZXMgdGhlIGNsaWVu dCB0byB1c2UgdGhlIGdpdmVuIHJvbGUsIHdoaWNoIG11c3QKICAgICAgdW5mb3J0dW5hdGVseSBi ZSBsZWZ0IGFzIGFuIGV4ZXJjaXNlIHRvIHRoZSByZWFkZXIuCgogICAgICBUaGlzIG9idmlvdXNs eSByZXF1aXJlcyBzb21lIGNhcmUsIGFzIGEgcG9vcmx5IGltcGxlbWVudGVkIHRva2VuCiAgICAg IHZhbGlkYXRvciBtYXkgc2lsZW50bHkgb3BlbiB0aGUgZW50aXJlIGRhdGFiYXNlIHRvIGFueW9u ZSB3aXRoIGEKICAgICAgYmVhcmVyIHRva2VuLiBCdXQgaXQgbWF5IGJlIGEgbW9yZSBwb3J0YWJs ZSBhcHByb2FjaCwgc2luY2UgT0F1dGgKICAgICAgaXMgZGVzaWduZWQgYXMgYW4gYXV0aG9yaXph dGlvbiBmcmFtZXdvcmssIG5vdCBhbiBhdXRoZW50aWNhdGlvbgogICAgICBmcmFtZXdvcmsuIEZv ciBleGFtcGxlLCB0aGUgdXNlcidzIGJlYXJlciB0b2tlbiBjb3VsZCBjYXJyeSBhbgogICAgICAi YWxsb3dfc3VwZXJ1c2VyX2FjY2VzcyIgY2xhaW0sIHdoaWNoIHdvdWxkIGF1dGhvcml6ZSBwc2V1 ZG9ueW1vdXMKICAgICAgZGF0YWJhc2UgYWNjZXNzIGFzIGFueSByb2xlLiBJdCdzIHRoZW4gdXAg dG8gdGhlIE9BdXRoIHN5c3RlbQogICAgICBhZG1pbmlzdHJhdG9ycyB0byBlbnN1cmUgdGhhdCBh bGxvd19zdXBlcnVzZXJfYWNjZXNzIGlzIGRvbGVkIG91dAogICAgICBvbmx5IHRvIHRoZSBwcm9w ZXIgdXNlcnMuCgogICBjLiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHVzZXIgY2FuIGJlIHN1Y2Nl c3NmdWxseSBhdXRoZW50aWNhdGVkIGJ1dAogICAgICBpc24ndCBhdXRob3JpemVkIHRvIGNvbm5l Y3QuIEluIHRoaXMgY2FzZSwgdGhlIGNvbW1hbmQgbWF5IHByaW50CiAgICAgIHRoZSBhdXRoZW50 aWNhdGVkIElEIGFuZCB0aGVuIGZhaWwgd2l0aCBhIG5vbi16ZXJvIGV4aXQgY29kZS4KICAgICAg KFRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIHNlZSB3aGF0J3MgZ29pbmcgb24gaW4gdGhlIFBvc3Rn cmVzCiAgICAgIGxvZ3MuKQoKNC4gVG9rZW4gdmFsaWRhdG9ycyBtYXkgb3B0aW9uYWxseSBsb2cg dG8gc3RkZXJyLiBUaGlzIHdpbGwgYmUgcHJpbnRlZAogICB2ZXJiYXRpbSBpbnRvIHRoZSBQb3N0 Z3JlcyBzZXJ2ZXIgbG9ncy4KClRoZSBvYXV0aCBtZXRob2Qgc3VwcG9ydHMgdGhlIGZvbGxvd2lu ZyBIQkEgb3B0aW9ucyAoYnV0IG5vdGUgdGhhdCB0d28Kb2YgdGhlbSBhcmUgbm90IG9wdGlvbmFs LCBzaW5jZSB3ZSBoYXZlIG5vIHdheSBvZiBjaG9vc2luZyBzZW5zaWJsZQpkZWZhdWx0cyk6Cgog IGlzc3VlcjogUmVxdWlyZWQuIFRoZSBVUkwgb2YgdGhlIE9BdXRoIGlzc3VpbmcgcGFydHksIHdo aWNoIHRoZSBjbGllbnQKICAgICAgICAgIG11c3QgY29udGFjdCB0byByZWNlaXZlIGEgYmVhcmVy IHRva2VuLgoKICAgICAgICAgIFNvbWUgcmVhbC13b3JsZCBleGFtcGxlcyBhcyBvZiB0aW1lIG9m IHdyaXRpbmc6CiAgICAgICAgICAtIGh0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbQogICAgICAg ICAgLSBodHRwczovL2xvZ2luLm1pY3Jvc29mdC5jb20vW3RlbmFudC1pZF0vdjIuMAoKICBzY29w ZTogIFJlcXVpcmVkLiBUaGUgT0F1dGggc2NvcGUocykgcmVxdWlyZWQgZm9yIHRoZSBzZXJ2ZXIg dG8KICAgICAgICAgIGF1dGhlbnRpY2F0ZSBhbmQvb3IgYXV0aG9yaXplIHRoZSB1c2VyLiBUaGlz IGlzIGhlYXZpbHkKICAgICAgICAgIGRlcGxveW1lbnQtc3BlY2lmaWMsIGJ1dCBhIHNpbXBsZSBl eGFtcGxlIGlzICJvcGVuaWQgZW1haWwiLgoKICBtYXA6ICAgIE9wdGlvbmFsLiBTcGVjaWZ5IGEg c3RhbmRhcmQgUG9zdGdyZVNRTCB1c2VyIG1hcDsgdGhpcyB3b3JrcwogICAgICAgICAgdGhlIHNh bWUgYXMgd2l0aCBvdGhlciBhdXRoIG1ldGhvZHMgc3VjaCBhcyBwZWVyLiBJZiBhIG1hcCBpcwog ICAgICAgICAgbm90IHNwZWNpZmllZCwgdGhlIHVzZXIgSUQgcmV0dXJuZWQgYnkgdGhlIHRva2Vu IHZhbGlkYXRvcgogICAgICAgICAgbXVzdCBleGFjdGx5IG1hdGNoIHRoZSByb2xlIHRoYXQncyBi ZWluZyByZXF1ZXN0ZWQgKGJ1dCBzZWUKICAgICAgICAgIHRydXN0X3ZhbGlkYXRvcl9hdXRoeiwg YmVsb3cpLgoKICB0cnVzdF92YWxpZGF0b3JfYXV0aHo6CiAgICAgICAgICBPcHRpb25hbC4gV2hl biBzZXQgdG8gMSwgdGhpcyBhbGxvd3MgdGhlIHRva2VuIHZhbGlkYXRvciB0bwogICAgICAgICAg dGFrZSBmdWxsIGNvbnRyb2wgb2YgdGhlIGF1dGhvcml6YXRpb24gcHJvY2Vzcy4gU3RhbmRhcmQg dXNlcgogICAgICAgICAgbWFwcGluZyBpcyBza2lwcGVkOiBpZiB0aGUgdmFsaWRhdG9yIGNvbW1h bmQgc3VjY2VlZHMsIHRoZQogICAgICAgICAgY2xpZW50IGlzIGFsbG93ZWQgdG8gY29ubmVjdCB1 bmRlciBpdHMgZGVzaXJlZCByb2xlIGFuZCBubwogICAgICAgICAgZnVydGhlciBjaGVja3MgYXJl IGRvbmUuCgpVbmxpa2UgdGhlIGNsaWVudCwgc2VydmVycyBzdXBwb3J0IE9BdXRoIHdpdGhvdXQg bmVlZGluZyB0byBiZSBidWlsdAphZ2FpbnN0IGxpYmlkZGF3YyAoc2luY2UgdGhlIHJlc3BvbnNp YmlsaXR5IGZvciAic3BlYWtpbmciIE9BdXRoL09JREMKY29ycmVjdGx5IGlzIGRlbGVnYXRlZCBl bnRpcmVseSB0byB0aGUgb2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQpLgoKU2V2ZXJhbCBUT0RPczoK LSBwb3J0IHRvIHBsYXRmb3JtcyBvdGhlciB0aGFuICJtb2Rlcm4gTGludXgiCi0gb3ZlcmhhdWwg dGhlIGNvbW11bmljYXRpb24gd2l0aCBvYXV0aF92YWxpZGF0b3JfY29tbWFuZCwgd2hpY2ggaXMK ICBjdXJyZW50bHkgYSBiYWQgaGFjayBvbiBPcGVuUGlwZVN0cmVhbSgpCi0gaW1wbGVtZW50IG1v cmUgc2FuaXR5IGNoZWNrcyBvbiB0aGUgT0FVVEhCRUFSRVIgbWVzc2FnZSBmb3JtYXQgYW5kCiAg dG9rZW5zIHNlbnQgYnkgdGhlIGNsaWVudAotIGltcGxlbWVudCBtb3JlIGhlbHBmdWwgaGFuZGxp bmcgb2YgSEJBIG1pc2NvbmZpZ3VyYXRpb25zCi0gcHJvcGVybHkgaW50ZXJwb2xhdGUgSlNPTiB3 aGVuIGdlbmVyYXRpbmcgZXJyb3IgcmVzcG9uc2VzCi0gdXNlIGxvZ2RldGFpbCBkdXJpbmcgYXV0 aCBmYWlsdXJlcwotIGRlYWwgd2l0aCByb2xlIG5hbWVzIHRoYXQgY2FuJ3QgYmUgc2FmZWx5IHBh c3NlZCB0byBzeXN0ZW0oKSB3aXRob3V0CiAgc2hlbGwtZXNjYXBpbmcKLSBhbGxvdyBwYXNzaW5n IHRoZSBjb25maWd1cmVkIGlzc3VlciB0byB0aGUgb2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQsIHRv CiAgZGVhbCB3aXRoIG11bHRpLWlzc3VlciBzZXR1cHMKLSAuLi5hbmQgbW9yZS4KLS0tCiBzcmMv YmFja2VuZC9saWJwcS9NYWtlZmlsZSAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvbGlicHEvYXV0 aC1vYXV0aC5jIHwgNzk3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2Jh Y2tlbmQvbGlicHEvYXV0aC1zYXNsLmMgIHwgIDEwICstCiBzcmMvYmFja2VuZC9saWJwcS9hdXRo LXNjcmFtLmMgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL2xpYnBxL2F1dGguYyAgICAgICB8ICAgNyAr CiBzcmMvYmFja2VuZC9saWJwcS9oYmEuYyAgICAgICAgfCAgMjkgKy0KIHNyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjLmMgICB8ICAxMiArCiBzcmMvaW5jbHVkZS9saWJwcS9oYmEuaCAgICAgICAg fCAgIDggKy0KIHNyYy9pbmNsdWRlL2xpYnBxL29hdXRoLmggICAgICB8ICAyNCArCiBzcmMvaW5j bHVkZS9saWJwcS9zYXNsLmggICAgICAgfCAgMTEgKwogMTAgZmlsZXMgY2hhbmdlZCwgODg5IGlu c2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNr ZW5kL2xpYnBxL2F1dGgtb2F1dGguYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2xp YnBxL29hdXRoLmgKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9saWJwcS9NYWtlZmlsZSBiL3Ny Yy9iYWNrZW5kL2xpYnBxL01ha2VmaWxlCmluZGV4IDZkMzg1ZmQ2YTQuLjk4ZWIyYTgyNDIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2xpYnBxL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2xp YnBxL01ha2VmaWxlCkBAIC0xNSw2ICsxNSw3IEBAIGluY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3Ny Yy9NYWtlZmlsZS5nbG9iYWwKICMgYmUtZnNzdHVicyBpcyBoZXJlIGZvciBoaXN0b3JpY2FsIHJl YXNvbnMsIHByb2JhYmx5IGJlbG9uZ3MgZWxzZXdoZXJlCiAKIE9CSlMgPSBcCisJYXV0aC1vYXV0 aC5vIFwKIAlhdXRoLXNhc2wubyBcCiAJYXV0aC1zY3JhbS5vIFwKIAlhdXRoLm8gXApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvbGlicHEvYXV0aC1vYXV0aC5jIGIvc3JjL2JhY2tlbmQvbGlicHEv YXV0aC1vYXV0aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmMxMjMy YTMxYTAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9saWJwcS9hdXRoLW9hdXRoLmMK QEAgLTAsMCArMSw3OTcgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGF1dGgtb2F1dGgu YworICoJICBTZXJ2ZXItc2lkZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU0FTTCBPQVVUSEJFQVJF UiBtZWNoYW5pc20uCisgKgorICogU2VlIHRoZSBmb2xsb3dpbmcgUkZDIGZvciBtb3JlIGRldGFp bHM6CisgKiAtIFJGQyA3NjI4OiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzYyOAor ICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIxLCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdl bnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBzcmMvYmFja2VuZC9s aWJwcS9hdXRoLW9hdXRoLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUg InBvc3RncmVzLmgiCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgor CisjaW5jbHVkZSAiY29tbW9uL29hdXRoLWNvbW1vbi5oIgorI2luY2x1ZGUgImxpYi9zdHJpbmdp bmZvLmgiCisjaW5jbHVkZSAibGlicHEvYXV0aC5oIgorI2luY2x1ZGUgImxpYnBxL2hiYS5oIgor I2luY2x1ZGUgImxpYnBxL29hdXRoLmgiCisjaW5jbHVkZSAibGlicHEvc2FzbC5oIgorI2luY2x1 ZGUgInN0b3JhZ2UvZmQuaCIKKworLyogR1VDICovCitjaGFyICpvYXV0aF92YWxpZGF0b3JfY29t bWFuZDsKKworc3RhdGljIHZvaWQgIG9hdXRoX2dldF9tZWNoYW5pc21zKFBvcnQgKnBvcnQsIFN0 cmluZ0luZm8gYnVmKTsKK3N0YXRpYyB2b2lkICpvYXV0aF9pbml0KFBvcnQgKnBvcnQsIGNvbnN0 IGNoYXIgKnNlbGVjdGVkX21lY2gsIGNvbnN0IGNoYXIgKnNoYWRvd19wYXNzKTsKK3N0YXRpYyBp bnQgICBvYXV0aF9leGNoYW5nZSh2b2lkICpvcGFxLCBjb25zdCBjaGFyICppbnB1dCwgaW50IGlu cHV0bGVuLAorCQkJCQkJCWNoYXIgKipvdXRwdXQsIGludCAqb3V0cHV0bGVuLCBjb25zdCBjaGFy ICoqbG9nZGV0YWlsKTsKKworLyogTWVjaGFuaXNtIGRlY2xhcmF0aW9uICovCitjb25zdCBwZ19i ZV9zYXNsX21lY2ggcGdfYmVfb2F1dGhfbWVjaCA9IHsKKwlvYXV0aF9nZXRfbWVjaGFuaXNtcywK KwlvYXV0aF9pbml0LAorCW9hdXRoX2V4Y2hhbmdlLAorCisJUEdfTUFYX0FVVEhfVE9LRU5fTEVO R1RILAorfTsKKworCit0eXBlZGVmIGVudW0KK3sKKwlPQVVUSF9TVEFURV9JTklUID0gMCwKKwlP QVVUSF9TVEFURV9FUlJPUiwKKwlPQVVUSF9TVEFURV9GSU5JU0hFRCwKK30gb2F1dGhfc3RhdGU7 CisKK3N0cnVjdCBvYXV0aF9jdHgKK3sKKwlvYXV0aF9zdGF0ZQlzdGF0ZTsKKwlQb3J0CSAgICpw b3J0OworCWNvbnN0IGNoYXIgKmlzc3VlcjsKKwljb25zdCBjaGFyICpzY29wZTsKK307CisKK3N0 YXRpYyBjaGFyICpzYW5pdGl6ZV9jaGFyKGNoYXIgYyk7CitzdGF0aWMgY2hhciAqcGFyc2Vfa3Zw YWlyc19mb3JfYXV0aChjaGFyICoqaW5wdXQpOworc3RhdGljIHZvaWQgZ2VuZXJhdGVfZXJyb3Jf cmVzcG9uc2Uoc3RydWN0IG9hdXRoX2N0eCAqY3R4LCBjaGFyICoqb3V0cHV0LCBpbnQgKm91dHB1 dGxlbik7CitzdGF0aWMgYm9vbCB2YWxpZGF0ZShQb3J0ICpwb3J0LCBjb25zdCBjaGFyICphdXRo LCBjb25zdCBjaGFyICoqbG9nZGV0YWlsKTsKK3N0YXRpYyBib29sIHJ1bl92YWxpZGF0b3JfY29t bWFuZChQb3J0ICpwb3J0LCBjb25zdCBjaGFyICp0b2tlbik7CitzdGF0aWMgYm9vbCBjaGVja19l eGl0KEZJTEUgKipmaCwgY29uc3QgY2hhciAqY29tbWFuZCk7CitzdGF0aWMgYm9vbCB1bnNldF9j bG9leGVjKGludCBmZCk7CitzdGF0aWMgYm9vbCB1c2VybmFtZV9va19mb3Jfc2hlbGwoY29uc3Qg Y2hhciAqdXNlcm5hbWUpOworCisjZGVmaW5lIEtWU0VQIDB4MDEKKyNkZWZpbmUgQVVUSF9LRVkg ImF1dGgiCisjZGVmaW5lIEJFQVJFUl9TQ0hFTUUgIkJlYXJlciAiCisKK3N0YXRpYyB2b2lkCitv YXV0aF9nZXRfbWVjaGFuaXNtcyhQb3J0ICpwb3J0LCBTdHJpbmdJbmZvIGJ1ZikKK3sKKwkvKiBP bmx5IE9BVVRIQkVBUkVSIGlzIHN1cHBvcnRlZC4gKi8KKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KGJ1ZiwgT0FVVEhCRUFSRVJfTkFNRSk7CisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnXDAn KTsKK30KKworc3RhdGljIHZvaWQgKgorb2F1dGhfaW5pdChQb3J0ICpwb3J0LCBjb25zdCBjaGFy ICpzZWxlY3RlZF9tZWNoLCBjb25zdCBjaGFyICpzaGFkb3dfcGFzcykKK3sKKwlzdHJ1Y3Qgb2F1 dGhfY3R4ICpjdHg7CisKKwlpZiAoc3RyY21wKHNlbGVjdGVkX21lY2gsIE9BVVRIQkVBUkVSX05B TUUpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklP TEFUSU9OKSwKKwkJCQkgZXJybXNnKCJjbGllbnQgc2VsZWN0ZWQgYW4gaW52YWxpZCBTQVNMIGF1 dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSIpKSk7CisKKwljdHggPSBwYWxsb2MwKHNpemVvZigqY3R4 KSk7CisKKwljdHgtPnN0YXRlID0gT0FVVEhfU1RBVEVfSU5JVDsKKwljdHgtPnBvcnQgPSBwb3J0 OworCisJQXNzZXJ0KHBvcnQtPmhiYSk7CisJY3R4LT5pc3N1ZXIgPSBwb3J0LT5oYmEtPm9hdXRo X2lzc3VlcjsKKwljdHgtPnNjb3BlID0gcG9ydC0+aGJhLT5vYXV0aF9zY29wZTsKKworCXJldHVy biBjdHg7Cit9CisKK3N0YXRpYyBpbnQKK29hdXRoX2V4Y2hhbmdlKHZvaWQgKm9wYXEsIGNvbnN0 IGNoYXIgKmlucHV0LCBpbnQgaW5wdXRsZW4sCisJCQkgICBjaGFyICoqb3V0cHV0LCBpbnQgKm91 dHB1dGxlbiwgY29uc3QgY2hhciAqKmxvZ2RldGFpbCkKK3sKKwljaGFyICAgKnA7CisJY2hhcglj YmluZF9mbGFnOworCWNoYXIgICAqYXV0aDsKKworCXN0cnVjdCBvYXV0aF9jdHggKmN0eCA9IG9w YXE7CisKKwkqb3V0cHV0ID0gTlVMTDsKKwkqb3V0cHV0bGVuID0gLTE7CisKKwkvKgorCSAqIElm IHRoZSBjbGllbnQgZGlkbid0IGluY2x1ZGUgYW4gIkluaXRpYWwgQ2xpZW50IFJlc3BvbnNlIiBp biB0aGUKKwkgKiBTQVNMSW5pdGlhbFJlc3BvbnNlIG1lc3NhZ2UsIHNlbmQgYW4gZW1wdHkgY2hh bGxlbmdlLCB0byB3aGljaCB0aGUKKwkgKiBjbGllbnQgd2lsbCByZXNwb25kIHdpdGggdGhlIHNh bWUgZGF0YSB0aGF0IHVzdWFsbHkgY29tZXMgaW4gdGhlCisJICogSW5pdGlhbCBDbGllbnQgUmVz cG9uc2UuCisJICovCisJaWYgKGlucHV0ID09IE5VTEwpCisJeworCQlBc3NlcnQoY3R4LT5zdGF0 ZSA9PSBPQVVUSF9TVEFURV9JTklUKTsKKworCQkqb3V0cHV0ID0gcHN0cmR1cCgiIik7CisJCSpv dXRwdXRsZW4gPSAwOworCQlyZXR1cm4gUEdfU0FTTF9FWENIQU5HRV9DT05USU5VRTsKKwl9CisK KwkvKgorCSAqIENoZWNrIHRoYXQgdGhlIGlucHV0IGxlbmd0aCBhZ3JlZXMgd2l0aCB0aGUgc3Ry aW5nIGxlbmd0aCBvZiB0aGUgaW5wdXQuCisJICovCisJaWYgKGlucHV0bGVuID09IDApCisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAor CQkJCSBlcnJtc2coIm1hbGZvcm1lZCBPQVVUSEJFQVJFUiBtZXNzYWdlIiksCisJCQkJIGVycmRl dGFpbCgiVGhlIG1lc3NhZ2UgaXMgZW1wdHkuIikpKTsKKwlpZiAoaW5wdXRsZW4gIT0gc3RybGVu KGlucHV0KSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09M X1ZJT0xBVElPTiksCisJCQkJIGVycm1zZygibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2Ui KSwKKwkJCQkgZXJyZGV0YWlsKCJNZXNzYWdlIGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBpbnB1dCBs ZW5ndGguIikpKTsKKworCXN3aXRjaCAoY3R4LT5zdGF0ZSkKKwl7CisJCWNhc2UgT0FVVEhfU1RB VEVfSU5JVDoKKwkJCS8qIEhhbmRsZSB0aGlzIGNhc2UgYmVsb3cuICovCisJCQlicmVhazsKKwor CQljYXNlIE9BVVRIX1NUQVRFX0VSUk9SOgorCQkJLyoKKwkJCSAqIE9ubHkgb25lIHJlc3BvbnNl IGlzIHZhbGlkIGZvciB0aGUgY2xpZW50IGR1cmluZyBhdXRoZW50aWNhdGlvbgorCQkJICogZmFp bHVyZTogYSBzaW5nbGUga3ZzZXAuCisJCQkgKi8KKwkJCWlmIChpbnB1dGxlbiAhPSAxIHx8ICpp bnB1dCAhPSBLVlNFUCkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09E RV9QUk9UT0NPTF9WSU9MQVRJT04pLAorCQkJCQkJIGVycm1zZygibWFsZm9ybWVkIE9BVVRIQkVB UkVSIG1lc3NhZ2UiKSwKKwkJCQkJCSBlcnJkZXRhaWwoIkNsaWVudCBkaWQgbm90IHNlbmQgYSBr dnNlcCByZXNwb25zZS4iKSkpOworCisJCQkvKiBUaGUgKGZhaWxlZCkgaGFuZHNoYWtlIGlzIG5v dyBjb21wbGV0ZS4gKi8KKwkJCWN0eC0+c3RhdGUgPSBPQVVUSF9TVEFURV9GSU5JU0hFRDsKKwkJ CXJldHVybiBQR19TQVNMX0VYQ0hBTkdFX0ZBSUxVUkU7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2co RVJST1IsICJpbnZhbGlkIE9BVVRIQkVBUkVSIGV4Y2hhbmdlIHN0YXRlIik7CisJCQlyZXR1cm4g UEdfU0FTTF9FWENIQU5HRV9GQUlMVVJFOworCX0KKworCS8qIEhhbmRsZSB0aGUgY2xpZW50J3Mg aW5pdGlhbCBtZXNzYWdlLiAqLworCXAgPSBwc3RyZHVwKGlucHV0KTsKKworCS8qCisJICogT0FV VEhCRUFSRVIgZG9lcyBub3QgY3VycmVudGx5IGRlZmluZSBhIGNoYW5uZWwgYmluZGluZyAoc28g dGhlcmUgaXMgbm8KKwkgKiBPQVVUSEJFQVJFUi1QTFVTLCBhbmQgd2UgZG8gbm90IGFjY2VwdCBh ICdwJyBzcGVjaWZpZXIpLiBXZSBhY2NlcHQgYSAneScKKwkgKiBzcGVjaWZpZXIgcHVyZWx5IGZv ciB0aGUgcmVtb3RlIGNoYW5jZSB0aGF0IGEgZnV0dXJlIHNwZWNpZmljYXRpb24gY291bGQKKwkg KiBkZWZpbmUgb25lOyB0aGVuIGZ1dHVyZSBjbGllbnRzIGNhbiBzdGlsbCBpbnRlcm9wZXJhdGUg d2l0aCB0aGlzIHNlcnZlcgorCSAqIGltcGxlbWVudGF0aW9uLiAnbicgaXMgdGhlIGV4cGVjdGVk IGNhc2UuCisJICovCisJY2JpbmRfZmxhZyA9ICpwOworCXN3aXRjaCAoY2JpbmRfZmxhZykKKwl7 CisJCWNhc2UgJ3AnOgorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9Q Uk9UT0NPTF9WSU9MQVRJT04pLAorCQkJCQkgZXJybXNnKCJtYWxmb3JtZWQgT0FVVEhCRUFSRVIg bWVzc2FnZSIpLAorCQkJCQkgZXJyZGV0YWlsKCJUaGUgc2VydmVyIGRvZXMgbm90IHN1cHBvcnQg Y2hhbm5lbCBiaW5kaW5nIGZvciBPQXV0aCwgYnV0IHRoZSBjbGllbnQgbWVzc2FnZSBpbmNsdWRl cyBjaGFubmVsIGJpbmRpbmcgZGF0YS4iKSkpOworCQkJYnJlYWs7CisKKwkJY2FzZSAneSc6IC8q IGZhbGwgdGhyb3VnaCAqLworCQljYXNlICduJzoKKwkJCXArKzsKKwkJCWlmICgqcCAhPSAnLCcp CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklP TEFUSU9OKSwKKwkJCQkJCSBlcnJtc2coIm1hbGZvcm1lZCBPQVVUSEJFQVJFUiBtZXNzYWdlIiks CisJCQkJCQkgZXJyZGV0YWlsKCJDb21tYSBleHBlY3RlZCwgYnV0IGZvdW5kIGNoYXJhY3RlciAl cy4iLAorCQkJCQkJCQkgICBzYW5pdGl6ZV9jaGFyKCpwKSkpKTsKKwkJCXArKzsKKwkJCWJyZWFr OworCisJCWRlZmF1bHQ6CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RF X1BST1RPQ09MX1ZJT0xBVElPTiksCisJCQkJCSBlcnJtc2coIm1hbGZvcm1lZCBPQVVUSEJFQVJF UiBtZXNzYWdlIiksCisJCQkJCSBlcnJkZXRhaWwoIlVuZXhwZWN0ZWQgY2hhbm5lbC1iaW5kaW5n IGZsYWcgJXMuIiwKKwkJCQkJCQkgICBzYW5pdGl6ZV9jaGFyKGNiaW5kX2ZsYWcpKSkpOworCX0K KworCS8qCisJICogRm9yYmlkIG9wdGlvbmFsIGF1dGh6aWQgKGF1dGhvcml6YXRpb24gaWRlbnRp dHkpLiAgV2UgZG9uJ3Qgc3VwcG9ydCBpdC4KKwkgKi8KKwlpZiAoKnAgPT0gJ2EnKQorCQllcmVw b3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwK KwkJCQkgZXJybXNnKCJjbGllbnQgdXNlcyBhdXRob3JpemF0aW9uIGlkZW50aXR5LCBidXQgaXQg aXMgbm90IHN1cHBvcnRlZCIpKSk7CisJaWYgKCpwICE9ICcsJykKKwkJZXJlcG9ydChFUlJPUiwK KwkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCisJCQkJIGVycm1zZygi bWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiKSwKKwkJCQkgZXJyZGV0YWlsKCJVbmV4cGVj dGVkIGF0dHJpYnV0ZSAlcyBpbiBjbGllbnQtZmlyc3QtbWVzc2FnZS4iLAorCQkJCQkJICAgc2Fu aXRpemVfY2hhcigqcCkpKSk7CisJcCsrOworCisJLyogQWxsIHJlbWFpbmluZyBmaWVsZHMgYXJl IHNlcGFyYXRlZCBieSB0aGUgUkZDJ3Mga3ZzZXAgKFx4MDEpLiAqLworCWlmICgqcCAhPSBLVlNF UCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xB VElPTiksCisJCQkJIGVycm1zZygibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiKSwKKwkJ CQkgZXJyZGV0YWlsKCJLZXktdmFsdWUgc2VwYXJhdG9yIGV4cGVjdGVkLCBidXQgZm91bmQgY2hh cmFjdGVyICVzLiIsCisJCQkJCQkgICBzYW5pdGl6ZV9jaGFyKCpwKSkpKTsKKwlwKys7CisKKwlh dXRoID0gcGFyc2Vfa3ZwYWlyc19mb3JfYXV0aCgmcCk7CisJaWYgKCFhdXRoKQorCQllcmVwb3J0 KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKKwkJCQkg ZXJybXNnKCJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIpLAorCQkJCSBlcnJkZXRhaWwo Ik1lc3NhZ2UgZG9lcyBub3QgY29udGFpbiBhbiBhdXRoIHZhbHVlLiIpKSk7CisKKwkvKiBXZSBz aG91bGQgYmUgYXQgdGhlIGVuZCBvZiBvdXIgbWVzc2FnZS4gKi8KKwlpZiAoKnApCisJCWVyZXBv cnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAorCQkJ CSBlcnJtc2coIm1hbGZvcm1lZCBPQVVUSEJFQVJFUiBtZXNzYWdlIiksCisJCQkJIGVycmRldGFp bCgiTWVzc2FnZSBjb250YWlucyBhZGRpdGlvbmFsIGRhdGEgYWZ0ZXIgdGhlIGZpbmFsIHRlcm1p bmF0b3IuIikpKTsKKworCWlmICghdmFsaWRhdGUoY3R4LT5wb3J0LCBhdXRoLCBsb2dkZXRhaWwp KQorCXsKKwkJZ2VuZXJhdGVfZXJyb3JfcmVzcG9uc2UoY3R4LCBvdXRwdXQsIG91dHB1dGxlbik7 CisKKwkJY3R4LT5zdGF0ZSA9IE9BVVRIX1NUQVRFX0VSUk9SOworCQlyZXR1cm4gUEdfU0FTTF9F WENIQU5HRV9DT05USU5VRTsKKwl9CisKKwljdHgtPnN0YXRlID0gT0FVVEhfU1RBVEVfRklOSVNI RUQ7CisJcmV0dXJuIFBHX1NBU0xfRVhDSEFOR0VfU1VDQ0VTUzsKK30KKworLyoKKyAqIENvbnZl cnQgYW4gYXJiaXRyYXJ5IGJ5dGUgdG8gcHJpbnRhYmxlIGZvcm0uICBGb3IgZXJyb3IgbWVzc2Fn ZXMuCisgKgorICogSWYgaXQncyBhIHByaW50YWJsZSBBU0NJSSBjaGFyYWN0ZXIsIHByaW50IGl0 IGFzIGEgc2luZ2xlIGNoYXJhY3Rlci4KKyAqIG90aGVyd2lzZSwgcHJpbnQgaXQgaW4gaGV4Lgor ICoKKyAqIFRoZSByZXR1cm5lZCBwb2ludGVyIHBvaW50cyB0byBhIHN0YXRpYyBidWZmZXIuCisg Ki8KK3N0YXRpYyBjaGFyICoKK3Nhbml0aXplX2NoYXIoY2hhciBjKQoreworCXN0YXRpYyBjaGFy IGJ1Zls1XTsKKworCWlmIChjID49IDB4MjEgJiYgYyA8PSAweDdFKQorCQlzbnByaW50ZihidWYs IHNpemVvZihidWYpLCAiJyVjJyIsIGMpOworCWVsc2UKKwkJc25wcmludGYoYnVmLCBzaXplb2Yo YnVmKSwgIjB4JTAyeCIsICh1bnNpZ25lZCBjaGFyKSBjKTsKKwlyZXR1cm4gYnVmOworfQorCisv KgorICogQ29uc3VtZXMgYWxsIGt2cGFpcnMgaW4gYW4gT0FVVEhCRUFSRVIgZXhjaGFuZ2UgbWVz c2FnZS4gSWYgdGhlICJhdXRoIiBrZXkgaXMKKyAqIGZvdW5kLCBpdHMgdmFsdWUgaXMgcmV0dXJu ZWQuCisgKi8KK3N0YXRpYyBjaGFyICoKK3BhcnNlX2t2cGFpcnNfZm9yX2F1dGgoY2hhciAqKmlu cHV0KQoreworCWNoYXIgICAqcG9zID0gKmlucHV0OworCWNoYXIgICAqYXV0aCA9IE5VTEw7CisK KwkvKgorCSAqIFRoZSByZWxldmFudCBBQk5GLCBmcm9tIFNlYy4gMy4xOgorCSAqCisJICogICAg IGt2c2VwICAgICAgICAgID0gJXgwMQorCSAqICAgICBrZXkgICAgICAgICAgICA9IDEqKEFMUEhB KQorCSAqICAgICB2YWx1ZSAgICAgICAgICA9ICooVkNIQVIgLyBTUCAvIEhUQUIgLyBDUiAvIExG ICkKKwkgKiAgICAga3ZwYWlyICAgICAgICAgPSBrZXkgIj0iIHZhbHVlIGt2c2VwCisJICogICA7 O2dzMi1oZWFkZXIgICAgID0gU2VlIFJGQyA1ODAxCisJICogICAgIGNsaWVudC1yZXNwICAgID0g KGdzMi1oZWFkZXIga3ZzZXAgKmt2cGFpciBrdnNlcCkgLyBrdnNlcAorCSAqCisJICogQnkgdGhl IHRpbWUgd2UgcmVhY2ggdGhpcyBjb2RlLCB0aGUgZ3MyLWhlYWRlciBhbmQgaW5pdGlhbCBrdnNl cCBoYXZlCisJICogYWxyZWFkeSBiZWVuIHZhbGlkYXRlZC4gV2Ugc3RhcnQgYXQgdGhlIGJlZ2lu bmluZyBvZiB0aGUgZmlyc3Qga3ZwYWlyLgorCSAqLworCisJd2hpbGUgKCpwb3MpCisJeworCQlj aGFyICAgKmVuZDsKKwkJY2hhciAgICpzZXA7CisJCWNoYXIgICAqa2V5OworCQljaGFyICAgKnZh bHVlOworCisJCS8qCisJCSAqIEZpbmQgdGhlIGVuZCBvZiB0aGlzIGt2cGFpci4gTm90ZSB0aGF0 IGlucHV0IGlzIG51bGwtdGVybWluYXRlZCBieQorCQkgKiB0aGUgU0FTTCBjb2RlLCBzbyB0aGUg c3RyY2hyKCkgaXMgYm91bmRlZC4KKwkJICovCisJCWVuZCA9IHN0cmNocihwb3MsIEtWU0VQKTsK KwkJaWYgKCFlbmQpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX1BS T1RPQ09MX1ZJT0xBVElPTiksCisJCQkJCSBlcnJtc2coIm1hbGZvcm1lZCBPQVVUSEJFQVJFUiBt ZXNzYWdlIiksCisJCQkJCSBlcnJkZXRhaWwoIk1lc3NhZ2UgY29udGFpbnMgYW4gdW50ZXJtaW5h dGVkIGtleS92YWx1ZSBwYWlyLiIpKSk7CisJCSplbmQgPSAnXDAnOworCisJCWlmIChwb3MgPT0g ZW5kKQorCQl7CisJCQkvKiBFbXB0eSBrdnBhaXIsIHNpZ25pZnlpbmcgdGhlIGVuZCBvZiB0aGUg bGlzdC4gKi8KKwkJCSppbnB1dCA9IHBvcyArIDE7CisJCQlyZXR1cm4gYXV0aDsKKwkJfQorCisJ CS8qCisJCSAqIEZpbmQgdGhlIGVuZCBvZiB0aGUga2V5IG5hbWUuCisJCSAqCisJCSAqIFRPRE8g ZnVydGhlciB2YWxpZGF0ZSB0aGUga2V5L3ZhbHVlIGdyYW1tYXI/IGVtcHR5IGtleXMsIGJhZCBj aGFycy4uLgorCQkgKi8KKwkJc2VwID0gc3RyY2hyKHBvcywgJz0nKTsKKwkJaWYgKCFzZXApCisJ CQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElP TiksCisJCQkJCSBlcnJtc2coIm1hbGZvcm1lZCBPQVVUSEJFQVJFUiBtZXNzYWdlIiksCisJCQkJ CSBlcnJkZXRhaWwoIk1lc3NhZ2UgY29udGFpbnMgYSBrZXkgd2l0aG91dCBhIHZhbHVlLiIpKSk7 CisJCSpzZXAgPSAnXDAnOworCisJCS8qIEJvdGgga2V5IGFuZCB2YWx1ZSBhcmUgbm93IHNhZmVs eSB0ZXJtaW5hdGVkLiAqLworCQlrZXkgPSBwb3M7CisJCXZhbHVlID0gc2VwICsgMTsKKworCQlp ZiAoIXN0cmNtcChrZXksIEFVVEhfS0VZKSkKKwkJeworCQkJaWYgKGF1dGgpCisJCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKKwkJ CQkJCSBlcnJtc2coIm1hbGZvcm1lZCBPQVVUSEJFQVJFUiBtZXNzYWdlIiksCisJCQkJCQkgZXJy ZGV0YWlsKCJNZXNzYWdlIGNvbnRhaW5zIG11bHRpcGxlIGF1dGggdmFsdWVzLiIpKSk7CisKKwkJ CWF1dGggPSB2YWx1ZTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkgKiBUaGUgUkZDIGFs c28gZGVmaW5lcyB0aGUgaG9zdCBhbmQgcG9ydCBrZXlzLCBidXQgdGhleSBhcmUgbm90CisJCQkg KiByZXF1aXJlZCBmb3IgT0FVVEhCRUFSRVIgYW5kIHdlIGRvIG5vdCB1c2UgdGhlbS4gQWxzbywg cGVyCisJCQkgKiBTZWMuIDMuMSwgYW55IGtleS92YWx1ZSBwYWlycyB3ZSBkb24ndCByZWNvZ25p emUgbXVzdCBiZSBpZ25vcmVkLgorCQkJICovCisJCX0KKworCQkvKiBNb3ZlIHRvIHRoZSBuZXh0 IHBhaXIuICovCisJCXBvcyA9IGVuZCArIDE7CisJfQorCisJZXJlcG9ydChFUlJPUiwKKwkJCShl cnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKKwkJCSBlcnJtc2coIm1hbGZvcm1l ZCBPQVVUSEJFQVJFUiBtZXNzYWdlIiksCisJCQkgZXJyZGV0YWlsKCJNZXNzYWdlIGRpZCBub3Qg Y29udGFpbiBhIGZpbmFsIHRlcm1pbmF0b3IuIikpKTsKKworCXJldHVybiBOVUxMOyAvKiB1bnJl YWNoYWJsZSAqLworfQorCitzdGF0aWMgdm9pZAorZ2VuZXJhdGVfZXJyb3JfcmVzcG9uc2Uoc3Ry dWN0IG9hdXRoX2N0eCAqY3R4LCBjaGFyICoqb3V0cHV0LCBpbnQgKm91dHB1dGxlbikKK3sKKwlT dHJpbmdJbmZvRGF0YQlidWY7CisKKwkvKgorCSAqIFRoZSBhZG1pbiBuZWVkcyB0byBzZXQgYW4g aXNzdWVyIGFuZCBzY29wZSBmb3IgT0F1dGggdG8gd29yay4gVGhlcmUncyBub3QKKwkgKiByZWFs bHkgYSB3YXkgdG8gaGlkZSB0aGlzIGZyb20gdGhlIHVzZXIsIGVpdGhlciwgYmVjYXVzZSB3ZSBj YW4ndCBjaG9vc2UKKwkgKiBhICJkZWZhdWx0IiBpc3N1ZXIsIHNvIGJlIGhvbmVzdCBpbiB0aGUg ZmFpbHVyZSBtZXNzYWdlLgorCSAqCisJICogVE9ETzogc2VlIGlmIHRoZXJlJ3MgYSBiZXR0ZXIg cGxhY2UgdG8gZmFpbCwgZWFybGllciB0aGFuIHRoaXMuCisJICovCisJaWYgKCFjdHgtPmlzc3Vl ciB8fCAhY3R4LT5zY29wZSkKKwkJZXJlcG9ydChGQVRBTCwKKwkJCQkoZXJyY29kZShFUlJDT0RF X0lOVEVSTkFMX0VSUk9SKSwKKwkJCQkgZXJybXNnKCJPQXV0aCBpcyBub3QgcHJvcGVybHkgY29u ZmlndXJlZCBmb3IgdGhpcyB1c2VyIiksCisJCQkJIGVycmRldGFpbF9sb2coIlRoZSBpc3N1ZXIg YW5kIHNjb3BlIHBhcmFtZXRlcnMgbXVzdCBiZSBzZXQgaW4gcGdfaGJhLmNvbmYuIikpKTsKKwor CisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisKKwkvKgorCSAqIFRPRE86IEpTT04gZXNjYXBpbmcK KwkgKi8KKwlhcHBlbmRTdHJpbmdJbmZvKCZidWYsCisJCSJ7ICIKKwkJCSJcInN0YXR1c1wiOiBc ImludmFsaWRfdG9rZW5cIiwgIgorCQkJIlwib3BlbmlkLWNvbmZpZ3VyYXRpb25cIjogXCIlcy8u d2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJhdGlvblwiLCIKKwkJCSJcInNjb3BlXCI6IFwiJXNc IiAiCisJCSJ9IiwKKwkJY3R4LT5pc3N1ZXIsIGN0eC0+c2NvcGUpOworCisJKm91dHB1dCA9IGJ1 Zi5kYXRhOworCSpvdXRwdXRsZW4gPSBidWYubGVuOworfQorCitzdGF0aWMgYm9vbAordmFsaWRh dGUoUG9ydCAqcG9ydCwgY29uc3QgY2hhciAqYXV0aCwgY29uc3QgY2hhciAqKmxvZ2RldGFpbCkK K3sKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGI2NF9zZXQgPSAiYWJjZGVmZ2hpamtsbW5v cHFyc3R1dnd4eXoiCisJCQkJCQkJCQkJIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgorCQkJ CQkJCQkJCSIwMTIzNDU2Nzg5LS5ffisvIjsKKworCWNvbnN0IGNoYXIgKnRva2VuOworCXNpemVf dAkJc3BhbjsKKwlpbnQJCQlyZXQ7CisKKwkvKiBUT0RPOiBoYW5kbGUgbG9nZGV0YWlsIHdoZW4g dGhlIHRlc3QgZnJhbWV3b3JrIGNhbiBjaGVjayBpdCAqLworCisJLyoKKwkgKiBPbmx5IEJlYXJl ciB0b2tlbnMgYXJlIGFjY2VwdGVkLiBUaGUgQUJORiBpcyBkZWZpbmVkIGluIFJGQyA2NzUwLCBT ZWMuCisJICogMi4xOgorCSAqCisJICogICAgICBiNjR0b2tlbiAgICA9IDEqKCBBTFBIQSAvIERJ R0lUIC8KKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICItIiAvICIuIiAvICJfIiAvICJ+IiAv ICIrIiAvICIvIiApICoiPSIKKwkgKiAgICAgIGNyZWRlbnRpYWxzID0gIkJlYXJlciIgMSpTUCBi NjR0b2tlbgorCSAqCisJICogVGhlICJjcmVkZW50aWFscyIgY29uc3RydWN0aW9uIGlzIHdoYXQg d2UgcmVjZWl2ZSBpbiBvdXIgYXV0aCB2YWx1ZS4KKwkgKgorCSAqIFNpbmNlIHRoYXQgc3BlYyBp cyBzdWJvcmRpbmF0ZSB0byBIVFRQIChpLmUuIHRoZSBIVFRQIEF1dGhvcml6YXRpb24KKwkgKiBo ZWFkZXIgZm9ybWF0OyBSRkMgNzIzNSBTZWMuIDIpLCB0aGUgIkJlYXJlciIgc2NoZW1lIHN0cmlu ZyBtdXN0IGJlCisJICogY29tcGFyZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LiAoVGhpcyBpcyBub3Qg bWVudGlvbmVkIGluIFJGQyA2NzUwLCBidXQgaXQncworCSAqIHBvaW50ZWQgb3V0IGluIFJGQyA3 NjI4IFNlYy4gNC4pCisJICoKKwkgKiBUT0RPOiBoYW5kbGUgdGhlIEF1dGhvcml6YXRpb24gc3Bl YywgUkZDIDcyMzUgU2VjLiAyLjEuCisJICovCisJaWYgKHN0cm5jYXNlY21wKGF1dGgsIEJFQVJF Ul9TQ0hFTUUsIHN0cmxlbihCRUFSRVJfU0NIRU1FKSkpCisJCXJldHVybiBmYWxzZTsKKworCS8q IFB1bGwgdGhlIGJlYXJlciB0b2tlbiBvdXQgb2YgdGhlIGF1dGggdmFsdWUuICovCisJdG9rZW4g PSBhdXRoICsgc3RybGVuKEJFQVJFUl9TQ0hFTUUpOworCisJLyogU3dhbGxvdyBhbnkgYWRkaXRp b25hbCBzcGFjZXMuICovCisJd2hpbGUgKCp0b2tlbiA9PSAnICcpCisJCXRva2VuKys7CisKKwkv KgorCSAqIEJlZm9yZSBpbnZva2luZyB0aGUgdmFsaWRhdG9yIGNvbW1hbmQsIHNhbml0eS1jaGVj ayB0aGUgdG9rZW4gZm9ybWF0IHRvCisJICogYXZvaWQgYW55IGluamVjdGlvbiBhdHRhY2tzIGxh dGVyIGluIHRoZSBjaGFpbi4gSW52YWxpZCBmb3JtYXRzIGFyZQorCSAqIHRlY2huaWNhbGx5IGEg cHJvdG9jb2wgdmlvbGF0aW9uLCBidXQgZG9uJ3QgcmVmbGVjdCBhbnkgaW5mb3JtYXRpb24gYWJv dXQKKwkgKiB0aGUgc2Vuc2l0aXZlIEJlYXJlciB0b2tlbiBiYWNrIHRvIHRoZSBjbGllbnQ7IGxv ZyBhdCBDT01NRVJST1IgaW5zdGVhZC4KKwkgKi8KKworCS8qIFRva2VucyBtdXN0IG5vdCBiZSBl bXB0eS4gKi8KKwlpZiAoISp0b2tlbikKKwl7CisJCWVyZXBvcnQoQ09NTUVSUk9SLAorCQkJCShl cnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKKwkJCQkgZXJybXNnKCJtYWxmb3Jt ZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIpLAorCQkJCSBlcnJkZXRhaWwoIkJlYXJlciB0b2tlbiBp cyBlbXB0eS4iKSkpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoKKwkgKiBNYWtlIHN1cmUg dGhlIHRva2VuIGNvbnRhaW5zIG9ubHkgYWxsb3dlZCBjaGFyYWN0ZXJzLiBUb2tlbnMgbWF5IGVu ZCB3aXRoCisJICogYW55IG51bWJlciBvZiAnPScgY2hhcmFjdGVycy4KKwkgKi8KKwlzcGFuID0g c3Ryc3BuKHRva2VuLCBiNjRfc2V0KTsKKwl3aGlsZSAodG9rZW5bc3Bhbl0gPT0gJz0nKQorCQlz cGFuKys7CisKKwlpZiAodG9rZW5bc3Bhbl0gIT0gJ1wwJykKKwl7CisJCS8qCisJCSAqIFRoaXMg ZXJyb3IgbWVzc2FnZSBjb3VsZCBiZSBtb3JlIGhlbHBmdWwgYnkgcHJpbnRpbmcgdGhlIHByb2Js ZW1hdGljCisJCSAqIGNoYXJhY3RlcihzKSwgYnV0IHRoYXQnZCBiZSBhIGJpdCBsaWtlIHByaW50 aW5nIGEgcGllY2Ugb2Ygc29tZW9uZSdzCisJCSAqIHBhc3N3b3JkIGludG8gdGhlIGxvZ3MuCisJ CSAqLworCQllcmVwb3J0KENPTU1FUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09M X1ZJT0xBVElPTiksCisJCQkJIGVycm1zZygibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2Ui KSwKKwkJCQkgZXJyZGV0YWlsKCJCZWFyZXIgdG9rZW4gaXMgbm90IGluIHRoZSBjb3JyZWN0IGZv cm1hdC4iKSkpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogSGF2ZSB0aGUgdmFsaWRhdG9y IGNoZWNrIHRoZSB0b2tlbi4gKi8KKwlpZiAoIXJ1bl92YWxpZGF0b3JfY29tbWFuZChwb3J0LCB0 b2tlbikpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChwb3J0LT5oYmEtPm9hdXRoX3NraXBfdXNl cm1hcCkKKwl7CisJCS8qCisJCSAqIElmIHRoZSB2YWxpZGF0b3IgaXMgb3VyIGF1dGhvcml6YXRp b24gYXV0aG9yaXR5LCB3ZSdyZSBkb25lLgorCQkgKiBBdXRoZW50aWNhdGlvbiBtYXkgb3IgbWF5 IG5vdCBoYXZlIGJlZW4gcGVyZm9ybWVkIGRlcGVuZGluZyBvbiB0aGUKKwkJICogdmFsaWRhdG9y IGltcGxlbWVudGF0aW9uOyBhbGwgdGhhdCBtYXR0ZXJzIGlzIHRoYXQgdGhlIHZhbGlkYXRvciBz YXlzCisJCSAqIHRoZSB1c2VyIGNhbiBsb2cgaW4gd2l0aCB0aGUgdGFyZ2V0IHJvbGUuCisJCSAq LworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKiBNYWtlIHN1cmUgdGhlIHZhbGlkYXRvciBhdXRo ZW50aWNhdGVkIHRoZSB1c2VyLiAqLworCWlmICghcG9ydC0+YXV0aG5faWQpCisJeworCQkvKiBU T0RPOiB1c2UgbG9nZGV0YWlsOyByZWR1Y2UgbWVzc2FnZSBkdXBsaWNhdGlvbiAqLworCQllcmVw b3J0KExPRywKKwkJCQkoZXJybXNnKCJPQXV0aCBiZWFyZXIgYXV0aGVudGljYXRpb24gZmFpbGVk IGZvciB1c2VyIFwiJXNcIjogdmFsaWRhdG9yIHByb3ZpZGVkIG5vIGlkZW50aXR5IiwKKwkJCQkJ CXBvcnQtPnVzZXJfbmFtZSkpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIEZpbmFsbHks IGNoZWNrIHRoZSB1c2VyIG1hcC4gKi8KKwlyZXQgPSBjaGVja191c2VybWFwKHBvcnQtPmhiYS0+ dXNlcm1hcCwgcG9ydC0+dXNlcl9uYW1lLCBwb3J0LT5hdXRobl9pZCwKKwkJCQkJCWZhbHNlKTsK KwlyZXR1cm4gKHJldCA9PSBTVEFUVVNfT0spOworfQorCitzdGF0aWMgYm9vbAorcnVuX3ZhbGlk YXRvcl9jb21tYW5kKFBvcnQgKnBvcnQsIGNvbnN0IGNoYXIgKnRva2VuKQoreworCWJvb2wJCXN1 Y2Nlc3MgPSBmYWxzZTsKKwlpbnQJCQlyYzsKKwlpbnQJCQlwaXBlZmRbMl07CisJaW50CQkJcmZk ID0gLTE7CisJaW50CQkJd2ZkID0gLTE7CisKKwlTdHJpbmdJbmZvRGF0YSBjb21tYW5kID0geyAw IH07CisJY2hhcgkgICAqcDsKKwlGSUxFCSAgICpmaCA9IE5VTEw7CisKKwlzc2l6ZV90CQl3cml0 dGVuOworCWNoYXIJICAgKmxpbmUgPSBOVUxMOworCXNpemVfdAkJc2l6ZSA9IDA7CisJc3NpemVf dAkJbGVuOworCisJQXNzZXJ0KG9hdXRoX3ZhbGlkYXRvcl9jb21tYW5kKTsKKworCWlmICghb2F1 dGhfdmFsaWRhdG9yX2NvbW1hbmRbMF0pCisJeworCQllcmVwb3J0KENPTU1FUlJPUiwKKwkJCQko ZXJybXNnKCJvYXV0aF92YWxpZGF0b3JfY29tbWFuZCBpcyBub3Qgc2V0IiksCisJCQkJIGVycmhp bnQoIlRvIGFsbG93IE9BdXRoIGF1dGhlbnRpY2F0ZWQgY29ubmVjdGlvbnMsIHNldCAiCisJCQkJ CQkgIm9hdXRoX3ZhbGlkYXRvcl9jb21tYW5kIGluIHBvc3RncmVzcWwuY29uZi4iKSkpOworCQly ZXR1cm4gZmFsc2U7CisJfQorCisJLyoKKwkgKiBTaW5jZSBwb3BlbigpIGlzIHVuaWRpcmVjdGlv bmFsLCBvcGVuIHVwIGEgcGlwZSBmb3IgdGhlIG90aGVyIGRpcmVjdGlvbi4KKwkgKiBVc2UgQ0xP RVhFQyB0byBlbnN1cmUgdGhhdCBvdXIgd3JpdGUgZW5kIGRvZXNuJ3QgYWNjaWRlbnRhbGx5IGdl dCBjb3BpZWQKKwkgKiBpbnRvIGNoaWxkIHByb2Nlc3Nlcywgd2hpY2ggd291bGQgcHJldmVudCB1 cyBmcm9tIGNsb3NpbmcgaXQgY2xlYW5seS4KKwkgKgorCSAqIFhYWCB0aGlzIGlzIHVnbHkuIFdl IHNob3VsZCBqdXN0IHJlYWQgZnJvbSB0aGUgY2hpbGQgcHJvY2VzcydzIHN0ZG91dCwKKwkgKiBi dXQgdGhhdCdzIGEgbG90IG1vcmUgY29kZS4KKwkgKiBYWFggYnkgYnlwYXNzaW5nIHRoZSBwb3Bl biBBUEksIHdlIG9wZW4gdGhlIHBvdGVudGlhbCBvZiBwcm9jZXNzCisJICogZGVhZGxvY2suIENs ZWFybHkgZG9jdW1lbnQgY2hpbGQgcHJvY2VzcyByZXF1aXJlbWVudHMgKGkuZS4gdGhlIGNoaWxk CisJICogTVVTVCByZWFkIGFsbCBkYXRhIG9mZiBvZiB0aGUgcGlwZSBiZWZvcmUgd3JpdGluZyBh bnl0aGluZykuCisJICogVE9ETzogcG9ydCB0byBXaW5kb3dzIHVzaW5nIF9waXBlKCkuCisJICov CisJcmMgPSBwaXBlMihwaXBlZmQsIE9fQ0xPRVhFQyk7CisJaWYgKHJjIDwgMCkKKwl7CisJCWVy ZXBvcnQoQ09NTUVSUk9SLAorCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCSBl cnJtc2coImNvdWxkIG5vdCBjcmVhdGUgY2hpbGQgcGlwZTogJW0iKSkpOworCQlyZXR1cm4gZmFs c2U7CisJfQorCisJcmZkID0gcGlwZWZkWzBdOworCXdmZCA9IHBpcGVmZFsxXTsKKworCS8qIEFs bG93IHRoZSByZWFkIHBpcGUgYmUgcGFzc2VkIHRvIHRoZSBjaGlsZC4gKi8KKwlpZiAoIXVuc2V0 X2Nsb2V4ZWMocmZkKSkKKwl7CisJCS8qIGVycm9yIG1lc3NhZ2Ugd2FzIGFscmVhZHkgbG9nZ2Vk ICovCisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKgorCSAqIENvbnN0cnVjdCB0aGUgY29tbWFu ZCwgc3Vic3RpdHV0aW5nIGFueSByZWNvZ25pemVkICUtc3BlY2lmaWVyczoKKwkgKgorCSAqICAg JWY6IHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlIGlucHV0IHBpcGUKKwkgKiAgICVyOiB0aGUg cm9sZSB0aGF0IHRoZSBjbGllbnQgd2FudHMgdG8gYXNzdW1lIChwb3J0LT51c2VyX25hbWUpCisJ ICogICAlJTogYSBsaXRlcmFsICclJworCSAqLworCWluaXRTdHJpbmdJbmZvKCZjb21tYW5kKTsK KworCWZvciAocCA9IG9hdXRoX3ZhbGlkYXRvcl9jb21tYW5kOyAqcDsgcCsrKQorCXsKKwkJaWYg KHBbMF0gPT0gJyUnKQorCQl7CisJCQlzd2l0Y2ggKHBbMV0pCisJCQl7CisJCQkJY2FzZSAnZic6 CisJCQkJCWFwcGVuZFN0cmluZ0luZm8oJmNvbW1hbmQsICIlZCIsIHJmZCk7CisJCQkJCXArKzsK KwkJCQkJYnJlYWs7CisJCQkJY2FzZSAncic6CisJCQkJCS8qCisJCQkJCSAqIFRPRE86IGRlY2lk ZSBob3cgdGhpcyBzdHJpbmcgc2hvdWxkIGJlIGVzY2FwZWQuIFRoZSByb2xlCisJCQkJCSAqIGlz IGNvbnRyb2xsZWQgYnkgdGhlIGNsaWVudCwgc28gaWYgd2UgZG9uJ3QgZXNjYXBlIGl0LAorCQkJ CQkgKiBjb21tYW5kIGluamVjdGlvbnMgYXJlIGluZXZpdGFibGUuCisJCQkJCSAqCisJCQkJCSAq IFRoaXMgaXMgcHJvYmFibHkgYW4gaW5kaWNhdGlvbiB0aGF0IHRoZSByb2xlIG5hbWUgbmVlZHMK KwkJCQkJICogdG8gYmUgY29tbXVuaWNhdGVkIHRvIHRoZSB2YWxpZGF0b3IgcHJvY2VzcyBpbiBz b21lIG90aGVyCisJCQkJCSAqIHdheS4gRm9yIHRoaXMgcHJvb2Ygb2YgY29uY2VwdCwganVzdCBi ZSBpbmNyZWRpYmx5IHN0cmljdAorCQkJCQkgKiBhYm91dCB0aGUgY2hhcmFjdGVycyB0aGF0IGFy ZSBhbGxvd2VkIGluIHVzZXIgbmFtZXMuCisJCQkJCSAqLworCQkJCQlpZiAoIXVzZXJuYW1lX29r X2Zvcl9zaGVsbChwb3J0LT51c2VyX25hbWUpKQorCQkJCQkJZ290byBjbGVhbnVwOworCisJCQkJ CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNvbW1hbmQsIHBvcnQtPnVzZXJfbmFtZSk7CisJCQkJ CXArKzsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAnJSc6CisJCQkJCWFwcGVuZFN0cmluZ0luZm9D aGFyKCZjb21tYW5kLCAnJScpOworCQkJCQlwKys7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6 CisJCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZjb21tYW5kLCBwWzBdKTsKKwkJCX0KKwkJfQor CQllbHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmY29tbWFuZCwgcFswXSk7CisJfQorCisJ LyogRXhlY3V0ZSB0aGUgY29tbWFuZC4gKi8KKwlmaCA9IE9wZW5QaXBlU3RyZWFtKGNvbW1hbmQu ZGF0YSwgInJlIik7CisJLyogVE9ETzogaGFuZGxlIGZhaWx1cmVzICovCisKKwkvKiBXZSBkb24n dCBuZWVkIHRoZSByZWFkIGVuZCBvZiB0aGUgcGlwZSBhbnltb3JlLiAqLworCWNsb3NlKHJmZCk7 CisJcmZkID0gLTE7CisKKwkvKiBHaXZlIHRoZSBjb21tYW5kIHRoZSB0b2tlbiB0byB2YWxpZGF0 ZS4gKi8KKwl3cml0dGVuID0gd3JpdGUod2ZkLCB0b2tlbiwgc3RybGVuKHRva2VuKSk7CisJaWYg KHdyaXR0ZW4gIT0gc3RybGVuKHRva2VuKSkKKwl7CisJCS8qIFRPRE8gbXVzdCBsb29wIGZvciBz aG9ydCB3cml0ZXMsIEVJTlRSIGV0IGFsICovCisJCWVyZXBvcnQoQ09NTUVSUk9SLAorCQkJCShl cnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCB3cml0ZSB0 b2tlbiB0byBjaGlsZCBwaXBlOiAlbSIpKSk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwljbG9z ZSh3ZmQpOworCXdmZCA9IC0xOworCisJLyoKKwkgKiBSZWFkIHRoZSBjb21tYW5kJ3MgcmVzcG9u c2UuCisJICoKKwkgKiBUT0RPOiBnZXRsaW5lKCkgaXMgcHJvYmFibHkgdG9vIG5ldyB0byB1c2Us IHVuZm9ydHVuYXRlbHkuCisJICogVE9ETzogbG9vcCBvdmVyIGFsbCBsaW5lcworCSAqLworCWlm ICgobGVuID0gZ2V0bGluZSgmbGluZSwgJnNpemUsIGZoKSkgPj0gMCkKKwl7CisJCS8qIFRPRE86 IGZhaWwgaWYgdGhlIGF1dGhuX2lkIGRvZXNuJ3QgZW5kIHdpdGggYSBuZXdsaW5lICovCisJCWlm IChsZW4gPiAwKQorCQkJbGluZVtsZW4gLSAxXSA9ICdcMCc7CisKKwkJc2V0X2F1dGhuX2lkKHBv cnQsIGxpbmUpOworCX0KKwllbHNlIGlmIChmZXJyb3IoZmgpKQorCXsKKwkJZXJlcG9ydChDT01N RVJST1IsCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJIGVycm1zZygiY291 bGQgbm90IHJlYWQgZnJvbSBjb21tYW5kIFwiJXNcIjogJW0iLAorCQkJCQkJY29tbWFuZC5kYXRh KSkpOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyogTWFrZSBzdXJlIHRoZSBjb21tYW5kIGV4 aXRzIGNsZWFubHkuICovCisJaWYgKCFjaGVja19leGl0KCZmaCwgY29tbWFuZC5kYXRhKSkKKwl7 CisJCS8qIGVycm9yIG1lc3NhZ2UgYWxyZWFkeSBsb2dnZWQgKi8KKwkJZ290byBjbGVhbnVwOwor CX0KKworCS8qIERvbmUuICovCisJc3VjY2VzcyA9IHRydWU7CisKK2NsZWFudXA6CisJaWYgKGxp bmUpCisJCWZyZWUobGluZSk7CisKKwkvKgorCSAqIEluIHRoZSBzdWNjZXNzZnVsIGNhc2UsIHRo ZSBwaXBlIGZkcyBhcmUgYWxyZWFkeSBjbG9zZWQuIEZvciB0aGUgZXJyb3IKKwkgKiBjYXNlLCBh bHdheXMgY2xvc2Ugb3V0IHRoZSBwaXBlIGJlZm9yZSB3YWl0aW5nIGZvciB0aGUgY29tbWFuZCwg dG8KKwkgKiBwcmV2ZW50IGRlYWRsb2NrLgorCSAqLworCWlmIChyZmQgPj0gMCkKKwkJY2xvc2Uo cmZkKTsKKwlpZiAod2ZkID49IDApCisJCWNsb3NlKHdmZCk7CisKKwlpZiAoZmgpCisJeworCQlB c3NlcnQoIXN1Y2Nlc3MpOworCQljaGVja19leGl0KCZmaCwgY29tbWFuZC5kYXRhKTsKKwl9CisK KwlpZiAoY29tbWFuZC5kYXRhKQorCQlwZnJlZShjb21tYW5kLmRhdGEpOworCisJcmV0dXJuIHN1 Y2Nlc3M7Cit9CisKK3N0YXRpYyBib29sCitjaGVja19leGl0KEZJTEUgKipmaCwgY29uc3QgY2hh ciAqY29tbWFuZCkKK3sKKwlpbnQgcmM7CisKKwlyYyA9IENsb3NlUGlwZVN0cmVhbSgqZmgpOwor CSpmaCA9IE5VTEw7CisKKwlpZiAocmMgPT0gLTEpCisJeworCQkvKiBwY2xvc2UoKSBpdHNlbGYg ZmFpbGVkLiAqLworCQllcmVwb3J0KENPTU1FUlJPUiwKKwkJCQkoZXJyY29kZV9mb3JfZmlsZV9h Y2Nlc3MoKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3QgY2xvc2UgcGlwZSB0byBjb21tYW5kIFwi JXNcIjogJW0iLAorCQkJCQkJY29tbWFuZCkpKTsKKwl9CisJZWxzZSBpZiAocmMgIT0gMCkKKwl7 CisJCWNoYXIgKnJlYXNvbiA9IHdhaXRfcmVzdWx0X3RvX3N0cihyYyk7CisKKwkJZXJlcG9ydChD T01NRVJST1IsCisJCQkJKGVycm1zZygiZmFpbGVkIHRvIGV4ZWN1dGUgY29tbWFuZCBcIiVzXCI6 ICVzIiwKKwkJCQkJCWNvbW1hbmQsIHJlYXNvbikpKTsKKworCQlwZnJlZShyZWFzb24pOworCX0K KworCXJldHVybiAocmMgPT0gMCk7Cit9CisKK3N0YXRpYyBib29sCit1bnNldF9jbG9leGVjKGlu dCBmZCkKK3sKKwlpbnQJCQlmbGFnczsKKwlpbnQJCQlyYzsKKworCWZsYWdzID0gZmNudGwoZmQs IEZfR0VURkQpOworCWlmIChmbGFncyA9PSAtMSkKKwl7CisJCWVyZXBvcnQoQ09NTUVSUk9SLAor CQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCBn ZXQgZmQgZmxhZ3MgZm9yIGNoaWxkIHBpcGU6ICVtIikpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0K KworCXJjID0gZmNudGwoZmQsIEZfU0VURkQsIGZsYWdzICYgfkZEX0NMT0VYRUMpOworCWlmIChy YyA8IDApCisJeworCQllcmVwb3J0KENPTU1FUlJPUiwKKwkJCQkoZXJyY29kZV9mb3JfZmlsZV9h Y2Nlc3MoKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3QgdW5zZXQgRkRfQ0xPRVhFQyBmb3IgY2hp bGQgcGlwZTogJW0iKSkpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9 CisKKy8qCisgKiBYWFggVGhpcyBzaG91bGQgZ28gYXdheSBldmVudHVhbGx5IGFuZCBiZSByZXBs YWNlZCB3aXRoIGVpdGhlciBhIHByb3BlcgorICogZXNjYXBlIG9yIGEgZGlmZmVyZW50IHN0cmF0 ZWd5IGZvciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHZhbGlkYXRvciBjb21tYW5kLgorICovCitz dGF0aWMgYm9vbAordXNlcm5hbWVfb2tfZm9yX3NoZWxsKGNvbnN0IGNoYXIgKnVzZXJuYW1lKQor eworCS8qIFRoaXMgc2V0IGlzIGJvcnJvd2VkIGZyb20gZmVfdXRpbHMnIGFwcGVuZFNoZWxsU3Ry aW5nTm9FcnJvcigpLiAqLworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYWxsb3dlZCA9ICJh YmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIKKwkJCQkJCQkJCQkiQUJDREVGR0hJSktMTU5PUFFS U1RVVldYWVoiCisJCQkJCQkJCQkJIjAxMjM0NTY3ODktXy4vOiI7CisJc2l6ZV90CXNwYW47CisK KwlBc3NlcnQodXNlcm5hbWUgJiYgdXNlcm5hbWVbMF0pOyAvKiBzaG91bGQgaGF2ZSBhbHJlYWR5 IGJlZW4gY2hlY2tlZCAqLworCisJc3BhbiA9IHN0cnNwbih1c2VybmFtZSwgYWxsb3dlZCk7CisJ aWYgKHVzZXJuYW1lW3NwYW5dICE9ICdcMCcpCisJeworCQllcmVwb3J0KENPTU1FUlJPUiwKKwkJ CQkoZXJybXNnKCJQb3N0Z3JlU1FMIHVzZXIgbmFtZSBjb250YWlucyB1bnNhZmUgY2hhcmFjdGVy cyBhbmQgY2Fubm90IGJlIHBhc3NlZCB0byB0aGUgT0F1dGggdmFsaWRhdG9yIikpKTsKKwkJcmV0 dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvbGlicHEvYXV0aC1zYXNsLmMgYi9zcmMvYmFja2VuZC9saWJwcS9hdXRoLXNhc2wuYwppbmRl eCBhMWQ3ZGJiNmQ1Li4wZjQ2MWE2Njk2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9saWJwcS9h dXRoLXNhc2wuYworKysgYi9zcmMvYmFja2VuZC9saWJwcS9hdXRoLXNhc2wuYwpAQCAtMjAsMTQg KzIwLDYgQEAKICNpbmNsdWRlICJsaWJwcS9wcWZvcm1hdC5oIgogI2luY2x1ZGUgImxpYnBxL3Nh c2wuaCIKIAotLyoKLSAqIE1heGltdW0gYWNjZXB0ZWQgc2l6ZSBvZiBTQVNMIG1lc3NhZ2VzLgot ICoKLSAqIFRoZSBtZXNzYWdlcyB0aGF0IHRoZSBzZXJ2ZXIgb3IgbGlicHEgZ2VuZXJhdGUgYXJl IG11Y2ggc21hbGxlciB0aGFuIHRoaXMsCi0gKiBidXQgaGF2ZSBzb21lIGhlYWRyb29tLgotICov Ci0jZGVmaW5lIFBHX01BWF9TQVNMX01FU1NBR0VfTEVOR1RICTEwMjQKLQogLyoKICAqIFBlcmZv cm0gYSBTQVNMIGV4Y2hhbmdlIHdpdGggYSBsaWJwcSBjbGllbnQsIHVzaW5nIGEgc3BlY2lmaWMg bWVjaGFuaXNtCiAgKiBpbXBsZW1lbnRhdGlvbi4KQEAgLTEwMyw3ICs5NSw3IEBAIENoZWNrU0FT TEF1dGgoY29uc3QgcGdfYmVfc2FzbF9tZWNoICptZWNoLCBQb3J0ICpwb3J0LCBjaGFyICpzaGFk b3dfcGFzcywKIAogCQkvKiBHZXQgdGhlIGFjdHVhbCBTQVNMIG1lc3NhZ2UgKi8KIAkJaW5pdFN0 cmluZ0luZm8oJmJ1Zik7Ci0JCWlmIChwcV9nZXRtZXNzYWdlKCZidWYsIFBHX01BWF9TQVNMX01F U1NBR0VfTEVOR1RIKSkKKwkJaWYgKHBxX2dldG1lc3NhZ2UoJmJ1ZiwgbWVjaC0+bWF4X21lc3Nh Z2VfbGVuZ3RoKSkKIAkJewogCQkJLyogRU9GIC0gcHFfZ2V0bWVzc2FnZSBhbHJlYWR5IGxvZ2dl ZCBlcnJvciAqLwogCQkJcGZyZWUoYnVmLmRhdGEpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv bGlicHEvYXV0aC1zY3JhbS5jIGIvc3JjL2JhY2tlbmQvbGlicHEvYXV0aC1zY3JhbS5jCmluZGV4 IGVlN2Y1MjIxOGEuLjQwNDlhY2U0NzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2xpYnBxL2F1 dGgtc2NyYW0uYworKysgYi9zcmMvYmFja2VuZC9saWJwcS9hdXRoLXNjcmFtLmMKQEAgLTExOCw3 ICsxMTgsOSBAQCBzdGF0aWMgaW50CXNjcmFtX2V4Y2hhbmdlKHZvaWQgKm9wYXEsIGNvbnN0IGNo YXIgKmlucHV0LCBpbnQgaW5wdXRsZW4sCiBjb25zdCBwZ19iZV9zYXNsX21lY2ggcGdfYmVfc2Ny YW1fbWVjaCA9IHsKIAlzY3JhbV9nZXRfbWVjaGFuaXNtcywKIAlzY3JhbV9pbml0LAotCXNjcmFt X2V4Y2hhbmdlCisJc2NyYW1fZXhjaGFuZ2UsCisKKwlQR19NQVhfU0FTTF9NRVNTQUdFX0xFTkdU SAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGguYyBiL3NyYy9i YWNrZW5kL2xpYnBxL2F1dGguYwppbmRleCAzNTMzYjBiYzUwLi41YzMwOTA0ZTJiIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9saWJwcS9hdXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvbGlicHEvYXV0 aC5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAibGlicHEvYXV0aC5oIgogI2luY2x1ZGUg ImxpYnBxL2NyeXB0LmgiCiAjaW5jbHVkZSAibGlicHEvbGlicHEuaCIKKyNpbmNsdWRlICJsaWJw cS9vYXV0aC5oIgogI2luY2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCiAjaW5jbHVkZSAibGlicHEv c2FzbC5oIgogI2luY2x1ZGUgImxpYnBxL3NjcmFtLmgiCkBAIC0zMDIsNiArMzAzLDkgQEAgYXV0 aF9mYWlsZWQoUG9ydCAqcG9ydCwgaW50IHN0YXR1cywgY29uc3QgY2hhciAqbG9nZGV0YWlsKQog CQljYXNlIHVhUkFESVVTOgogCQkJZXJyc3RyID0gZ2V0dGV4dF9ub29wKCJSQURJVVMgYXV0aGVu dGljYXRpb24gZmFpbGVkIGZvciB1c2VyIFwiJXNcIiIpOwogCQkJYnJlYWs7CisJCWNhc2UgdWFP QXV0aDoKKwkJCWVycnN0ciA9IGdldHRleHRfbm9vcCgiT0F1dGggYmVhcmVyIGF1dGhlbnRpY2F0 aW9uIGZhaWxlZCBmb3IgdXNlciBcIiVzXCIiKTsKKwkJCWJyZWFrOwogCQljYXNlIHVhQ3VzdG9t OgogCQkJaWYgKEN1c3RvbUF1dGhlbnRpY2F0aW9uRXJyb3JfaG9vaykKIAkJCQllcnJzdHIgPSBD dXN0b21BdXRoZW50aWNhdGlvbkVycm9yX2hvb2socG9ydCk7CkBAIC02MjcsNiArNjMxLDkgQEAg Q2xpZW50QXV0aGVudGljYXRpb24oUG9ydCAqcG9ydCkKIAkJY2FzZSB1YVRydXN0OgogCQkJc3Rh dHVzID0gU1RBVFVTX09LOwogCQkJYnJlYWs7CisJCWNhc2UgdWFPQXV0aDoKKwkJCXN0YXR1cyA9 IENoZWNrU0FTTEF1dGgoJnBnX2JlX29hdXRoX21lY2gsIHBvcnQsIE5VTEwsIE5VTEwpOworCQkJ YnJlYWs7CiAJCWNhc2UgdWFDdXN0b206CiAJCQlpZiAoQ3VzdG9tQXV0aGVudGljYXRpb25DaGVj a19ob29rKQogCQkJCXN0YXR1cyA9IEN1c3RvbUF1dGhlbnRpY2F0aW9uQ2hlY2tfaG9vayhwb3J0 KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYnBxL2hiYS5jIGIvc3JjL2JhY2tlbmQvbGli cHEvaGJhLmMKaW5kZXggZWJhZTk5Mjk2NC4uZjdmMzA1OTkyNyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvbGlicHEvaGJhLmMKKysrIGIvc3JjL2JhY2tlbmQvbGlicHEvaGJhLmMKQEAgLTEzNSw3 ICsxMzUsOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgVXNlckF1dGhOYW1lW10gPQogCSJj ZXJ0IiwKIAkicmFkaXVzIiwKIAkiY3VzdG9tIiwKLQkicGVlciIKKwkicGVlciIsCisJIm9hdXRo IiwKIH07CiAKIApAQCAtMTQwMCw2ICsxNDAxLDggQEAgcGFyc2VfaGJhX2xpbmUoVG9rZW5pemVk TGluZSAqdG9rX2xpbmUsIGludCBlbGV2ZWwpCiAjZW5kaWYKIAllbHNlIGlmIChzdHJjbXAodG9r ZW4tPnN0cmluZywgInJhZGl1cyIpID09IDApCiAJCXBhcnNlZGxpbmUtPmF1dGhfbWV0aG9kID0g dWFSQURJVVM7CisJZWxzZSBpZiAoc3RyY21wKHRva2VuLT5zdHJpbmcsICJvYXV0aCIpID09IDAp CisJCXBhcnNlZGxpbmUtPmF1dGhfbWV0aG9kID0gdWFPQXV0aDsKIAllbHNlIGlmIChzdHJjbXAo dG9rZW4tPnN0cmluZywgImN1c3RvbSIpID09IDApCiAJCXBhcnNlZGxpbmUtPmF1dGhfbWV0aG9k ID0gdWFDdXN0b207CiAJZWxzZQpAQCAtMTcyOCw4ICsxNzMxLDkgQEAgcGFyc2VfaGJhX2F1dGhf b3B0KGNoYXIgKm5hbWUsIGNoYXIgKnZhbCwgSGJhTGluZSAqaGJhbGluZSwKIAkJCWhiYWxpbmUt PmF1dGhfbWV0aG9kICE9IHVhUGVlciAmJgogCQkJaGJhbGluZS0+YXV0aF9tZXRob2QgIT0gdWFH U1MgJiYKIAkJCWhiYWxpbmUtPmF1dGhfbWV0aG9kICE9IHVhU1NQSSAmJgorCQkJaGJhbGluZS0+ YXV0aF9tZXRob2QgIT0gdWFPQXV0aCAmJgogCQkJaGJhbGluZS0+YXV0aF9tZXRob2QgIT0gdWFD ZXJ0KQotCQkJSU5WQUxJRF9BVVRIX09QVElPTigibWFwIiwgZ2V0dGV4dF9ub29wKCJpZGVudCwg cGVlciwgZ3NzYXBpLCBzc3BpLCBhbmQgY2VydCIpKTsKKwkJCUlOVkFMSURfQVVUSF9PUFRJT04o Im1hcCIsIGdldHRleHRfbm9vcCgiaWRlbnQsIHBlZXIsIGdzc2FwaSwgc3NwaSwgb2F1dGgsIGFu ZCBjZXJ0IikpOwogCQloYmFsaW5lLT51c2VybWFwID0gcHN0cmR1cCh2YWwpOwogCX0KIAllbHNl IGlmIChzdHJjbXAobmFtZSwgImNsaWVudGNlcnQiKSA9PSAwKQpAQCAtMjExMyw2ICsyMTE3LDI3 IEBAIHBhcnNlX2hiYV9hdXRoX29wdChjaGFyICpuYW1lLCBjaGFyICp2YWwsIEhiYUxpbmUgKmhi YWxpbmUsCiAJCWhiYWxpbmUtPnJhZGl1c2lkZW50aWZpZXJzID0gcGFyc2VkX2lkZW50aWZpZXJz OwogCQloYmFsaW5lLT5yYWRpdXNpZGVudGlmaWVyc19zID0gcHN0cmR1cCh2YWwpOwogCX0KKwll bHNlIGlmIChzdHJjbXAobmFtZSwgImlzc3VlciIpID09IDApCisJeworCQlpZiAoaGJhbGluZS0+ YXV0aF9tZXRob2QgIT0gdWFPQXV0aCkKKwkJCUlOVkFMSURfQVVUSF9PUFRJT04oImlzc3VlciIs IGdldHRleHRfbm9vcCgib2F1dGgiKSk7CisJCWhiYWxpbmUtPm9hdXRoX2lzc3VlciA9IHBzdHJk dXAodmFsKTsKKwl9CisJZWxzZSBpZiAoc3RyY21wKG5hbWUsICJzY29wZSIpID09IDApCisJewor CQlpZiAoaGJhbGluZS0+YXV0aF9tZXRob2QgIT0gdWFPQXV0aCkKKwkJCUlOVkFMSURfQVVUSF9P UFRJT04oInNjb3BlIiwgZ2V0dGV4dF9ub29wKCJvYXV0aCIpKTsKKwkJaGJhbGluZS0+b2F1dGhf c2NvcGUgPSBwc3RyZHVwKHZhbCk7CisJfQorCWVsc2UgaWYgKHN0cmNtcChuYW1lLCAidHJ1c3Rf dmFsaWRhdG9yX2F1dGh6IikgPT0gMCkKKwl7CisJCWlmIChoYmFsaW5lLT5hdXRoX21ldGhvZCAh PSB1YU9BdXRoKQorCQkJSU5WQUxJRF9BVVRIX09QVElPTigidHJ1c3RfdmFsaWRhdG9yX2F1dGh6 IiwgZ2V0dGV4dF9ub29wKCJvYXV0aCIpKTsKKwkJaWYgKHN0cmNtcCh2YWwsICIxIikgPT0gMCkK KwkJCWhiYWxpbmUtPm9hdXRoX3NraXBfdXNlcm1hcCA9IHRydWU7CisJCWVsc2UKKwkJCWhiYWxp bmUtPm9hdXRoX3NraXBfdXNlcm1hcCA9IGZhbHNlOworCX0KIAllbHNlIGlmIChzdHJjbXAobmFt ZSwgInByb3ZpZGVyIikgPT0gMCkKIAl7CiAJCVJFUVVJUkVfQVVUSF9PUFRJT04odWFDdXN0b20s ICJwcm92aWRlciIsICJjdXN0b20iKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvZ3VjLmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jCmluZGV4IDFlMzY1MDE4NGIu Ljc5MWM3YzgzZGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYwpAQCAtNTgsNiArNTgsNyBAQAogI2luY2x1 ZGUgImxpYnBxL2F1dGguaCIKICNpbmNsdWRlICJsaWJwcS9saWJwcS5oIgogI2luY2x1ZGUgImxp YnBxL3BxZm9ybWF0LmgiCisjaW5jbHVkZSAibGlicHEvb2F1dGguaCIKICNpbmNsdWRlICJtaXNj YWRtaW4uaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvY29zdC5oIgogI2luY2x1ZGUgIm9wdGltaXpl ci9nZXFvLmgiCkBAIC00NjYyLDYgKzQ2NjMsMTcgQEAgc3RhdGljIHN0cnVjdCBjb25maWdfc3Ry aW5nIENvbmZpZ3VyZU5hbWVzU3RyaW5nW10gPQogCQljaGVja19iYWNrdHJhY2VfZnVuY3Rpb25z LCBhc3NpZ25fYmFja3RyYWNlX2Z1bmN0aW9ucywgTlVMTAogCX0sCiAKKwl7CisJCXsib2F1dGhf dmFsaWRhdG9yX2NvbW1hbmQiLCBQR0NfU0lHSFVQLCBDT05OX0FVVEhfQVVUSCwKKwkJCWdldHRl eHRfbm9vcCgiQ29tbWFuZCB0byB2YWxpZGF0ZSBPQXV0aCB2MiBiZWFyZXIgdG9rZW5zLiIpLAor CQkJTlVMTCwKKwkJCUdVQ19TVVBFUlVTRVJfT05MWQorCQl9LAorCQkmb2F1dGhfdmFsaWRhdG9y X2NvbW1hbmQsCisJCSIiLAorCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKKwogCS8qIEVuZC1vZi1s aXN0IG1hcmtlciAqLwogCXsKIAkJe05VTEwsIDAsIDAsIE5VTEwsIE5VTEx9LCBOVUxMLCBOVUxM LCBOVUxMLCBOVUxMLCBOVUxMCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9saWJwcS9oYmEuaCBi L3NyYy9pbmNsdWRlL2xpYnBxL2hiYS5oCmluZGV4IGM1YWVmNjk5NGMuLmQ0NmMyMTA4ZWIgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2xpYnBxL2hiYS5oCisrKyBiL3NyYy9pbmNsdWRlL2xpYnBx L2hiYS5oCkBAIC0zOSw4ICszOSw5IEBAIHR5cGVkZWYgZW51bSBVc2VyQXV0aAogCXVhQ2VydCwK IAl1YVJBRElVUywKIAl1YUN1c3RvbSwKLQl1YVBlZXIKLSNkZWZpbmUgVVNFUl9BVVRIX0xBU1Qg dWFQZWVyCS8qIE11c3QgYmUgbGFzdCB2YWx1ZSBvZiB0aGlzIGVudW0gKi8KKwl1YVBlZXIsCisJ dWFPQXV0aAorI2RlZmluZSBVU0VSX0FVVEhfTEFTVCB1YU9BdXRoCS8qIE11c3QgYmUgbGFzdCB2 YWx1ZSBvZiB0aGlzIGVudW0gKi8KIH0gVXNlckF1dGg7CiAKIC8qCkBAIC0xMjEsNiArMTIyLDkg QEAgdHlwZWRlZiBzdHJ1Y3QgSGJhTGluZQogCWNoYXIJICAgKnJhZGl1c2lkZW50aWZpZXJzX3M7 CiAJTGlzdAkgICAqcmFkaXVzcG9ydHM7CiAJY2hhcgkgICAqcmFkaXVzcG9ydHNfczsKKwljaGFy CSAgICpvYXV0aF9pc3N1ZXI7CisJY2hhcgkgICAqb2F1dGhfc2NvcGU7CisJYm9vbAkJb2F1dGhf c2tpcF91c2VybWFwOwogCWNoYXIJICAgKmN1c3RvbV9wcm92aWRlcjsKIH0gSGJhTGluZTsKIApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGlicHEvb2F1dGguaCBiL3NyYy9pbmNsdWRlL2xpYnBx L29hdXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uODcwZTQyNmFm MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2xpYnBxL29hdXRoLmgKQEAgLTAsMCAr MSwyNCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogb2F1dGguaAorICoJICBJbnRlcmZh Y2UgdG8gbGlicHEvYXV0aC1vYXV0aC5jCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAx OTk2LTIwMjEsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9u cyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZv cm5pYQorICoKKyAqIHNyYy9pbmNsdWRlL2xpYnBxL29hdXRoLmgKKyAqCisgKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqLworI2lmbmRlZiBQR19PQVVUSF9ICisjZGVmaW5lIFBHX09BVVRIX0gKKworI2lu Y2x1ZGUgImxpYnBxL2xpYnBxLWJlLmgiCisjaW5jbHVkZSAibGlicHEvc2FzbC5oIgorCitleHRl cm4gY2hhciAqb2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQ7CisKKy8qIEltcGxlbWVudGF0aW9uICov CitleHRlcm4gY29uc3QgcGdfYmVfc2FzbF9tZWNoIHBnX2JlX29hdXRoX21lY2g7CisKKyNlbmRp ZiAvKiBQR19PQVVUSF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9saWJwcS9zYXNsLmgg Yi9zcmMvaW5jbHVkZS9saWJwcS9zYXNsLmgKaW5kZXggNzFjYzBkYzI1MS4uM2Q0ODFjYzgwNyAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbGlicHEvc2FzbC5oCisrKyBiL3NyYy9pbmNsdWRlL2xp YnBxL3Nhc2wuaApAQCAtMjYsNiArMjYsMTQgQEAKICNkZWZpbmUgUEdfU0FTTF9FWENIQU5HRV9T VUNDRVNTCQkxCiAjZGVmaW5lIFBHX1NBU0xfRVhDSEFOR0VfRkFJTFVSRQkJMgogCisvKgorICog TWF4aW11bSBhY2NlcHRlZCBzaXplIG9mIFNBU0wgbWVzc2FnZXMuCisgKgorICogVGhlIG1lc3Nh Z2VzIHRoYXQgdGhlIHNlcnZlciBvciBsaWJwcSBnZW5lcmF0ZSBhcmUgbXVjaCBzbWFsbGVyIHRo YW4gdGhpcywKKyAqIGJ1dCBoYXZlIHNvbWUgaGVhZHJvb20uCisgKi8KKyNkZWZpbmUgUEdfTUFY X1NBU0xfTUVTU0FHRV9MRU5HVEgJMTAyNAorCiAvKgogICogQmFja2VuZCBTQVNMIG1lY2hhbmlz bSBjYWxsYmFja3MuCiAgKgpAQCAtMTI3LDYgKzEzNSw5IEBAIHR5cGVkZWYgc3RydWN0IHBnX2Jl X3Nhc2xfbWVjaAogCQkJCQkJCSBjb25zdCBjaGFyICppbnB1dCwgaW50IGlucHV0bGVuLAogCQkJ CQkJCSBjaGFyICoqb3V0cHV0LCBpbnQgKm91dHB1dGxlbiwKIAkJCQkJCQkgY29uc3QgY2hhciAq KmxvZ2RldGFpbCk7CisKKwkvKiBUaGUgbWF4aW11bSBzaXplIGFsbG93ZWQgZm9yIGNsaWVudCBT QVNMUmVzcG9uc2VzLiAqLworCWludAkJCW1heF9tZXNzYWdlX2xlbmd0aDsKIH0gcGdfYmVfc2Fz bF9tZWNoOwogCiAvKiBDb21tb24gaW1wbGVtZW50YXRpb24gZm9yIGF1dGguYyAqLwotLSAKMi4y NS4xCgo= --_010_0e86fe7e3534fb05db02379fed404a2010eb1d62camelvmwarecom_ Content-Type: text/x-patch; name="v3-0007-Add-a-very-simple-authn_id-extension.patch" Content-Description: v3-0007-Add-a-very-simple-authn_id-extension.patch Content-Disposition: attachment; filename="v3-0007-Add-a-very-simple-authn_id-extension.patch"; size=2895; creation-date="Fri, 04 Mar 2022 19:13:41 GMT"; modification-date="Fri, 04 Mar 2022 19:13:41 GMT" Content-ID: <81984BD360BD044487E1EFCC3D8011F0@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 RnJvbSA2NjdmYmQ3MDlmNjcyMzIxNTVjYmFhM2UwOWQxYTRiNGMwMmVlYjIyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8cGNoYW1waW9uQHZtd2FyZS5jb20+ CkRhdGU6IFR1ZSwgMTggTWF5IDIwMjEgMTU6MDE6MjkgLTA3MDAKU3ViamVjdDogW1BBVENIIHYz IDcvOV0gQWRkIGEgdmVyeSBzaW1wbGUgYXV0aG5faWQgZXh0ZW5zaW9uCgouLi5mb3IgcmV0cmll dmluZyB0aGUgYXV0aG5faWQgZnJvbSB0aGUgc2VydmVyIGluIHRlc3RzLgotLS0KIGNvbnRyaWIv YXV0aG5faWQvTWFrZWZpbGUgICAgICAgICAgfCAxOSArKysrKysrKysrKysrKysrKysrCiBjb250 cmliL2F1dGhuX2lkL2F1dGhuX2lkLS0xLjAuc3FsIHwgIDggKysrKysrKysKIGNvbnRyaWIvYXV0 aG5faWQvYXV0aG5faWQuYyAgICAgICAgfCAyOCArKysrKysrKysrKysrKysrKysrKysrKysrKysr CiBjb250cmliL2F1dGhuX2lkL2F1dGhuX2lkLmNvbnRyb2wgIHwgIDUgKysrKysKIDQgZmlsZXMg Y2hhbmdlZCwgNjAgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvYXV0 aG5faWQvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL2F1dGhuX2lkL2F1dGhu X2lkLS0xLjAuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9hdXRobl9pZC9hdXRobl9p ZC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9hdXRobl9pZC9hdXRobl9pZC5jb250cm9s CgpkaWZmIC0tZ2l0IGEvY29udHJpYi9hdXRobl9pZC9NYWtlZmlsZSBiL2NvbnRyaWIvYXV0aG5f aWQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNDYwMjYz NThlMAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvYXV0aG5faWQvTWFrZWZpbGUKQEAgLTAs MCArMSwxOSBAQAorIyBjb250cmliL2F1dGhuX2lkL01ha2VmaWxlCisKK01PRFVMRV9iaWcgPSBh dXRobl9pZAorT0JKUyA9IGF1dGhuX2lkLm8KKworRVhURU5TSU9OID0gYXV0aG5faWQKK0RBVEEg PSBhdXRobl9pZC0tMS4wLnNxbAorUEdGSUxFREVTQyA9ICJhdXRobl9pZCAtIGluZm9ybWF0aW9u IGFib3V0IHRoZSBhdXRoZW50aWNhdGVkIHVzZXIiCisKK2lmZGVmIFVTRV9QR1hTCitQR19DT05G SUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQoraW5j bHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBjb250cmliL2F1dGhuX2lkCit0b3BfYnVpbGRk aXIgPSAuLi8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAor aW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCmRp ZmYgLS1naXQgYS9jb250cmliL2F1dGhuX2lkL2F1dGhuX2lkLS0xLjAuc3FsIGIvY29udHJpYi9h dXRobl9pZC9hdXRobl9pZC0tMS4wLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi5hZjJhNGQzOTkxCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9hdXRobl9pZC9h dXRobl9pZC0tMS4wLnNxbApAQCAtMCwwICsxLDggQEAKKy8qIGNvbnRyaWIvYXV0aG5faWQvYXV0 aG5faWQtLTEuMC5zcWwgKi8KKworLS0gY29tcGxhaW4gaWYgc2NyaXB0IGlzIHNvdXJjZWQgaW4g cHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBFWFRFTlNJT04KK1xlY2hvIFVzZSAiQ1JFQVRF IEVYVEVOU0lPTiBhdXRobl9pZCIgdG8gbG9hZCB0aGlzIGZpbGUuIFxxdWl0CisKK0NSRUFURSBG VU5DVElPTiBhdXRobl9pZCgpIFJFVFVSTlMgdGV4dAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdh dXRobl9pZCcKK0xBTkdVQUdFIEMgSU1NVVRBQkxFOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9hdXRo bl9pZC9hdXRobl9pZC5jIGIvY29udHJpYi9hdXRobl9pZC9hdXRobl9pZC5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjBmZWNhYzM2YTgKLS0tIC9kZXYvbnVsbAorKysg Yi9jb250cmliL2F1dGhuX2lkL2F1dGhuX2lkLmMKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIEV4 dGVuc2lvbiB0byBleHBvc2UgdGhlIGN1cnJlbnQgdXNlcidzIGF1dGhuX2lkLgorICoKKyAqIGNv bnRyaWIvYXV0aG5faWQvYXV0aG5faWQuYworICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgor CisjaW5jbHVkZSAiZm1nci5oIgorI2luY2x1ZGUgImxpYnBxL2xpYnBxLWJlLmgiCisjaW5jbHVk ZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKworUEdfTU9EVUxF X01BR0lDOworCitQR19GVU5DVElPTl9JTkZPX1YxKGF1dGhuX2lkKTsKKworLyoKKyAqIFJldHVy bnMgdGhlIGN1cnJlbnQgdXNlcidzIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHkuCisgKi8KK0RhdHVt CithdXRobl9pZChQR19GVU5DVElPTl9BUkdTKQoreworCWlmICghTXlQcm9jUG9ydC0+YXV0aG5f aWQpCisJCVBHX1JFVFVSTl9OVUxMKCk7CisKKwlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9f dGV4dChNeVByb2NQb3J0LT5hdXRobl9pZCkpOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9hdXRo bl9pZC9hdXRobl9pZC5jb250cm9sIGIvY29udHJpYi9hdXRobl9pZC9hdXRobl9pZC5jb250cm9s Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmUwZjllMDZiZWQKLS0tIC9k ZXYvbnVsbAorKysgYi9jb250cmliL2F1dGhuX2lkL2F1dGhuX2lkLmNvbnRyb2wKQEAgLTAsMCAr MSw1IEBACisjIGF1dGhuX2lkIGV4dGVuc2lvbgorY29tbWVudCA9ICdjdXJyZW50IHVzZXIgaWRl bnRpdHknCitkZWZhdWx0X3ZlcnNpb24gPSAnMS4wJworbW9kdWxlX3BhdGhuYW1lID0gJyRsaWJk aXIvYXV0aG5faWQnCityZWxvY2F0YWJsZSA9IHRydWUKLS0gCjIuMjUuMQoK --_010_0e86fe7e3534fb05db02379fed404a2010eb1d62camelvmwarecom_ Content-Type: text/x-patch; name="v3-0008-Add-pytest-suite-for-OAuth.patch" Content-Description: v3-0008-Add-pytest-suite-for-OAuth.patch Content-Disposition: attachment; filename="v3-0008-Add-pytest-suite-for-OAuth.patch"; size=134781; creation-date="Fri, 04 Mar 2022 19:13:41 GMT"; modification-date="Fri, 04 Mar 2022 19:13:41 GMT" Content-ID: <81E562A2D589A64F9CD342E3592E5E3D@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 RnJvbSAxYzI0ODgxZDRiMWU4Nzc3Y2UxNzZkMmMyNzZmZTgxMjBiZDZlNjQ4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8cGNoYW1waW9uQHZtd2FyZS5jb20+ CkRhdGU6IEZyaSwgNCBKdW4gMjAyMSAwOTowNjozOCAtMDcwMApTdWJqZWN0OiBbUEFUQ0ggdjMg OC85XSBBZGQgcHl0ZXN0IHN1aXRlIGZvciBPQXV0aAoKUmVxdWlyZXMgUHl0aG9uIDM7IG9uIHRo ZSBmaXJzdCBydW4gb2YgYG1ha2UgaW5zdGFsbGNoZWNrYCB0aGUKZGVwZW5kZW5jaWVzIHdpbGwg YmUgaW5zdGFsbGVkIGludG8gLi92ZW52IGZvciB5b3UuIFNlZSB0aGUgUkVBRE1FIGZvcgptb3Jl IGRldGFpbHMuCi0tLQogc3JjL3Rlc3QvcHl0aG9uLy5naXRpZ25vcmUgICAgICAgICAgICAgICAg IHwgICAgMiArCiBzcmMvdGVzdC9weXRob24vTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgfCAg IDM4ICsKIHNyYy90ZXN0L3B5dGhvbi9SRUFETUUgICAgICAgICAgICAgICAgICAgICB8ICAgNTQg KysKIHNyYy90ZXN0L3B5dGhvbi9jbGllbnQvX19pbml0X18ucHkgICAgICAgICB8ICAgIDAKIHNy Yy90ZXN0L3B5dGhvbi9jbGllbnQvY29uZnRlc3QucHkgICAgICAgICB8ICAxMjYgKysrCiBzcmMv dGVzdC9weXRob24vY2xpZW50L3Rlc3RfY2xpZW50LnB5ICAgICAgfCAgMTgwICsrKysKIHNyYy90 ZXN0L3B5dGhvbi9jbGllbnQvdGVzdF9vYXV0aC5weSAgICAgICB8ICA5MzYgKysrKysrKysrKysr KysrKysrCiBzcmMvdGVzdC9weXRob24vcHEzLnB5ICAgICAgICAgICAgICAgICAgICAgfCAgNzI3 ICsrKysrKysrKysrKysrCiBzcmMvdGVzdC9weXRob24vcHl0ZXN0LmluaSAgICAgICAgICAgICAg ICAgfCAgICA0ICsKIHNyYy90ZXN0L3B5dGhvbi9yZXF1aXJlbWVudHMudHh0ICAgICAgICAgICB8 ICAgIDcgKwogc3JjL3Rlc3QvcHl0aG9uL3NlcnZlci9fX2luaXRfXy5weSAgICAgICAgIHwgICAg MAogc3JjL3Rlc3QvcHl0aG9uL3NlcnZlci9jb25mdGVzdC5weSAgICAgICAgIHwgICA0NSArCiBz cmMvdGVzdC9weXRob24vc2VydmVyL3Rlc3Rfb2F1dGgucHkgICAgICAgfCAxMDEyICsrKysrKysr KysrKysrKysrKysrCiBzcmMvdGVzdC9weXRob24vc2VydmVyL3Rlc3Rfc2VydmVyLnB5ICAgICAg fCAgIDIxICsKIHNyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIvdmFsaWRhdGVfYmVhcmVyLnB5ICB8ICAx MDEgKysKIHNyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIvdmFsaWRhdGVfcmVmbGVjdC5weSB8ICAgMzQg Kwogc3JjL3Rlc3QvcHl0aG9uL3Rlc3RfaW50ZXJuYWxzLnB5ICAgICAgICAgIHwgIDEzOCArKysK IHNyYy90ZXN0L3B5dGhvbi90ZXN0X3BxMy5weSAgICAgICAgICAgICAgICB8ICA1NTggKysrKysr KysrKysKIHNyYy90ZXN0L3B5dGhvbi90bHMucHkgICAgICAgICAgICAgICAgICAgICB8ICAxOTUg KysrKwogMTkgZmlsZXMgY2hhbmdlZCwgNDE3OCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL3Rlc3QvcHl0aG9uLy5naXRpZ25vcmUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv dGVzdC9weXRob24vTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9weXRob24v UkVBRE1FCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcHl0aG9uL2NsaWVudC9fX2luaXRf Xy5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3B5dGhvbi9jbGllbnQvY29uZnRlc3Qu cHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9weXRob24vY2xpZW50L3Rlc3RfY2xpZW50 LnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcHl0aG9uL2NsaWVudC90ZXN0X29hdXRo LnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcHl0aG9uL3BxMy5weQogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy90ZXN0L3B5dGhvbi9weXRlc3QuaW5pCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL3Rlc3QvcHl0aG9uL3JlcXVpcmVtZW50cy50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv dGVzdC9weXRob24vc2VydmVyL19faW5pdF9fLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rl c3QvcHl0aG9uL3NlcnZlci9jb25mdGVzdC5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L3B5dGhvbi9zZXJ2ZXIvdGVzdF9vYXV0aC5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L3B5dGhvbi9zZXJ2ZXIvdGVzdF9zZXJ2ZXIucHkKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzcmMvdGVz dC9weXRob24vc2VydmVyL3ZhbGlkYXRlX2JlYXJlci5weQogY3JlYXRlIG1vZGUgMTAwNzU1IHNy Yy90ZXN0L3B5dGhvbi9zZXJ2ZXIvdmFsaWRhdGVfcmVmbGVjdC5weQogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy90ZXN0L3B5dGhvbi90ZXN0X2ludGVybmFscy5weQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy90ZXN0L3B5dGhvbi90ZXN0X3BxMy5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L3B5dGhvbi90bHMucHkKCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9weXRob24vLmdpdGlnbm9yZSBi L3NyYy90ZXN0L3B5dGhvbi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAuLjBlOGYwMjdiMmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9weXRob24v LmdpdGlnbm9yZQpAQCAtMCwwICsxLDIgQEAKK19fcHljYWNoZV9fLworL3ZlbnYvCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9weXRob24vTWFrZWZpbGUgYi9zcmMvdGVzdC9weXRob24vTWFrZWZpbGUK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYjA2OTViNjI4NwotLS0gL2Rl di9udWxsCisrKyBiL3NyYy90ZXN0L3B5dGhvbi9NYWtlZmlsZQpAQCAtMCwwICsxLDM4IEBACisj CisjIENvcHlyaWdodCAyMDIxIFZNd2FyZSwgSW5jLgorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogUG9zdGdyZVNRTAorIworCisjIE9ubHkgUHl0aG9uIDMgaXMgc3VwcG9ydGVkLCBidXQgaWYg aXQncyBuYW1lZCBzb21ldGhpbmcgZGlmZmVyZW50IG9uIHlvdXIKKyMgc3lzdGVtIHlvdSBjYW4g b3ZlcnJpZGUgaXQgd2l0aCB0aGUgUFlUSE9OMyB2YXJpYWJsZS4KK1BZVEhPTjMgOj0gcHl0aG9u MworCisjIEFsbCBkZXBlbmRlbmNpZXMgYXJlIHBsYWNlZCBpbnRvIHRoaXMgZGlyZWN0b3J5LiBU aGUgZGVmYXVsdCBpcyAuZ2l0aWdub3JlZAorIyBmb3IgeW91LCBidXQgeW91IGNhbiBvdmVycmlk ZSBpdCBpZiB5b3UnZCBsaWtlLgorVkVOViA6PSAuL3ZlbnYKKworb3ZlcnJpZGUgVkJJTiAgIDo9 ICQoVkVOVikvYmluCitvdmVycmlkZSBQSVAgICAgOj0gJChWQklOKS9waXAKK292ZXJyaWRlIFBZ VEVTVCA6PSAkKFZCSU4pL3B5LnRlc3QKK292ZXJyaWRlIElTT1JUICA6PSAkKFZCSU4pL2lzb3J0 CitvdmVycmlkZSBCTEFDSyAgOj0gJChWQklOKS9ibGFjaworCisuUEhPTlk6IGluc3RhbGxjaGVj ayBpbmRlbnQKKworaW5zdGFsbGNoZWNrOiAkKFBZVEVTVCkKKwkkKFBZVEVTVCkgLXYgLXJzCisK K2luZGVudDogJChJU09SVCkgJChCTEFDSykKKwkkKElTT1JUKSAtLXByb2ZpbGUgYmxhY2sgKi5w eSBjbGllbnQvKi5weSBzZXJ2ZXIvKi5weQorCSQoQkxBQ0spICoucHkgY2xpZW50LyoucHkgc2Vy dmVyLyoucHkKKworJChQWVRFU1QpICQoSVNPUlQpICQoQkxBQ0spICY6IHJlcXVpcmVtZW50cy50 eHQgfCAkKFBJUCkKKwkkKFBJUCkgaW5zdGFsbCAtLWZvcmNlLXJlaW5zdGFsbCAtciAkPAorCisk KFBJUCk6CisJJChQWVRIT04zKSAtbSB2ZW52ICQoVkVOVikKKworIyBBIGNvbnZlbmllbmNlIHJl Y2lwZSB0byByZWJ1aWxkIHBzeWNvcGcyIGFnYWluc3QgdGhlIGxvY2FsIGxpYnBxLgorLlBIT05Z OiByZWJ1aWxkLXBzeWNvcGcyCityZWJ1aWxkLXBzeWNvcGcyOiB8ICQoUElQKQorCSQoUElQKSBp bnN0YWxsIC0tZm9yY2UtcmVpbnN0YWxsIC0tbm8tYmluYXJ5IDphbGw6ICQoc2hlbGwgZ3JlcCBw c3ljb3BnMiByZXF1aXJlbWVudHMudHh0KQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcHl0aG9uL1JF QURNRSBiL3NyYy90ZXN0L3B5dGhvbi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uMGJkYTU4MmM0YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5dGhv bi9SRUFETUUKQEAgLTAsMCArMSw1NCBAQAorQSB0ZXN0IHN1aXRlIGZvciBleGVyY2lzaW5nIGJv dGggdGhlIGxpYnBxIGNsaWVudCBhbmQgdGhlIHNlcnZlciBiYWNrZW5kIGF0IHRoZQorcHJvdG9j b2wgbGV2ZWwsIGJhc2VkIG9uIHB5dGVzdCBhbmQgQ29uc3RydWN0LgorCitUaGUgdGVzdCBzdWl0 ZSBjdXJyZW50bHkgYXNzdW1lcyB0aGF0IHRoZSBzdGFuZGFyZCBQRyogZW52aXJvbm1lbnQgdmFy aWFibGVzCitwb2ludCB0byB0aGUgZGF0YWJhc2UgdW5kZXIgdGVzdCBhbmQgYXJlIHN1ZmZpY2ll bnQgdG8gbG9nIGluIGEgc3VwZXJ1c2VyIG9uCit0aGF0IHN5c3RlbS4gSW4gb3RoZXIgd29yZHMs IGEgYmFyZSBgcHNxbGAgbmVlZHMgdG8gSnVzdCBXb3JrIGJlZm9yZSB0aGUgdGVzdAorc3VpdGUg Y2FuIGRvIGl0cyB0aGluZy4gRm9yIGEgbmV3bHkgYnVpbHQgZGV2IGNsdXN0ZXIsIHR5cGljYWxs eSBhbGwgdGhhdCBJIG5lZWQKK3RvIGRvIGlzIGEKKworICAgIGV4cG9ydCBQR0RBVEFCQVNFPXBv c3RncmVzCisKK2J1dCB5b3UgY2FuIGFkanVzdCBhcyBuZWVkZWQgZm9yIHlvdXIgc2V0dXAuCisK KyMjIFJlcXVpcmVtZW50cworCitBIHN1cHBvcnRlZCB2ZXJzaW9uICgzLjYrKSBvZiBQeXRob24u CisKK1RoZSBmaXJzdCBydW4gb2YKKworICAgIG1ha2UgaW5zdGFsbGNoZWNrCisKK3dpbGwgaW5z dGFsbCBhIGxvY2FsIHZpcnR1YWwgZW52aXJvbm1lbnQgYW5kIGFsbCBuZWVkZWQgZGVwZW5kZW5j aWVzLiBEdXJpbmcKK2RldmVsb3BtZW50LCBpZiBsaWJwcSBjaGFuZ2VzIGluY29tcGF0aWJseSwg eW91IGNhbiBpc3N1ZQorCisgICAgJCBtYWtlIHJlYnVpbGQtcHN5Y29wZzIKKwordG8gZm9yY2Ug YSByZWJ1aWxkIG9mIHRoZSBjbGllbnQgbGlicmFyeS4KKworIyMgSGFja2luZworCitUaGUgY29k ZSBzdHlsZSBpcyBlbmZvcmNlZCBieSBhIF92ZXJ5XyBvcGluaW9uYXRlZCBhdXRvZm9ybWF0dGVy LiBSdW5uaW5nIHRoZQorCisgICAgbWFrZSBpbmRlbnQKKworcmVjaXBlIHdpbGwgaW52b2tlIGl0 IGZvciB5b3UgYXV0b21hdGljYWxseS4gRG9uJ3QgZmlnaHQgdGhlIHRvb2w7IHBhcnQgb2YgdGhl Cit6ZW4gaXMgaW4ga25vd2luZyB0aGF0IGlmIHRoZSBmb3JtYXR0ZXIgbWFrZXMgeW91ciBjb2Rl IHVnbHksIHRoZXJlJ3MgcHJvYmFibHkgYQorY2xlYW5lciB3YXkgdG8gd3JpdGUgeW91ciBjb2Rl LgorCisjIyBBZHZhbmNlZCBVc2FnZQorCitUaGUgTWFrZWZpbGUgaXMgdGhlcmUgZm9yIGNvbnZl bmllbmNlLCBidXQgeW91IGRvbid0IGhhdmUgdG8gdXNlIGl0LiBBY3RpdmF0ZQordGhlIHZpcnR1 YWxlbnYgdG8gYmUgYWJsZSB0byB1c2UgcHl0ZXN0IGRpcmVjdGx5OgorCisgICAgJCBzb3VyY2Ug dmVudi9iaW4vYWN0aXZhdGUKKyAgICAkIHB5LnRlc3QgLWsgb2F1dGgKKyAgICAuLi4KKyAgICAk IHB5LnRlc3QgLi9zZXJ2ZXIvdGVzdF9zZXJ2ZXIucHkKKyAgICAuLi4KKyAgICAkIGRlYWN0aXZh dGUgICMgcHV0cyB0aGUgUEFUSCBldCBhbCBiYWNrIHRoZSB3YXkgaXQgd2FzIGJlZm9yZQorCitU byBtYWtlIHF1aWNrIHNtb2tlIHRlc3RzIHBvc3NpYmxlLCBzbG93IHRlc3RzIGhhdmUgYmVlbiBt YXJrZWQgZXhwbGljaXRseS4gWW91CitjYW4gc2tpcCB0aGVtIGJ5IHNheWluZyBlLmcuCisKKyAg ICAkIHB5LnRlc3QgLW0gJ25vdCBzbG93JwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcHl0aG9uL2Ns aWVudC9fX2luaXRfXy5weSBiL3NyYy90ZXN0L3B5dGhvbi9jbGllbnQvX19pbml0X18ucHkKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZTY5ZGUyOWJiMgpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvcHl0aG9uL2NsaWVudC9jb25mdGVzdC5weSBiL3NyYy90ZXN0L3B5dGhvbi9j bGllbnQvY29uZnRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u ZjM4ZGE3YTEzOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5dGhvbi9jbGllbnQvY29u ZnRlc3QucHkKQEAgLTAsMCArMSwxMjYgQEAKKyMKKyMgQ29weXJpZ2h0IDIwMjEgVk13YXJlLCBJ bmMuCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBQb3N0Z3JlU1FMCisjCisKK2ltcG9ydCBz b2NrZXQKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKKworaW1wb3J0IHBzeWNvcGcyCitp bXBvcnQgcHl0ZXN0CisKK2ltcG9ydCBwcTMKKworQkxPQ0tJTkdfVElNRU9VVCA9IDIgICMgdGhl IG51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgZm9yIGJsb2NraW5nIGNhbGxzCisKKworQHB5dGVz dC5maXh0dXJlCitkZWYgc2VydmVyX3NvY2tldCh1bnVzZWRfdGNwX3BvcnRfZmFjdG9yeSk6Cisg ICAgIiIiCisgICAgUmV0dXJucyBhIGxpc3RlbmluZyBzb2NrZXQgYm91bmQgdG8gYW4gZXBoZW1l cmFsIHBvcnQuCisgICAgIiIiCisgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVU LCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHM6CisgICAgICAgIHMuYmluZCgoIjEyNy4wLjAuMSIs IHVudXNlZF90Y3BfcG9ydF9mYWN0b3J5KCkpKQorICAgICAgICBzLmxpc3RlbigxKQorICAgICAg ICBzLnNldHRpbWVvdXQoQkxPQ0tJTkdfVElNRU9VVCkKKyAgICAgICAgeWllbGQgcworCisKK2Ns YXNzIENsaWVudEhhbmRzaGFrZSh0aHJlYWRpbmcuVGhyZWFkKToKKyAgICAiIiIKKyAgICBBIHRo cmVhZCB0aGF0IGNvbm5lY3RzIHRvIGEgbG9jYWwgUG9zdGdyZXMgc2VydmVyIHVzaW5nIHBzeWNv cGcyLiBPbmNlIHRoZQorICAgIG9wZW5pbmcgaGFuZHNoYWtlIGNvbXBsZXRlcywgdGhlIGNvbm5l Y3Rpb24gd2lsbCBiZSBpbW1lZGlhdGVseSBjbG9zZWQuCisgICAgIiIiCisKKyAgICBkZWYgX19p bml0X18oc2VsZiwgKiwgcG9ydCwgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9f KCkKKworICAgICAgICBrd2FyZ3NbInBvcnQiXSA9IHBvcnQKKyAgICAgICAgc2VsZi5fa3dhcmdz ID0ga3dhcmdzCisKKyAgICAgICAgc2VsZi5leGNlcHRpb24gPSBOb25lCisKKyAgICBkZWYgcnVu KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb25uID0gcHN5Y29wZzIuY29ubmVj dChob3N0PSIxMjcuMC4wLjEiLCAqKnNlbGYuX2t3YXJncykKKyAgICAgICAgICAgIGNvbm4uY2xv c2UoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBzZWxmLmV4 Y2VwdGlvbiA9IGUKKworICAgIGRlZiBjaGVja19jb21wbGV0ZWQoc2VsZiwgdGltZW91dD1CTE9D S0lOR19USU1FT1VUKToKKyAgICAgICAgIiIiCisgICAgICAgIEpvaW5zIHRoZSBjbGllbnQgdGhy ZWFkLiBSYWlzZXMgYW4gZXhjZXB0aW9uIGlmIHRoZSB0aHJlYWQgY291bGQgbm90IGJlCisgICAg ICAgIGpvaW5lZCwgb3IgaWYgaXQgdGhyZXcgYW4gZXhjZXB0aW9uIGl0c2VsZi4gKFRoZSBleGNl cHRpb24gd2lsbCBiZQorICAgICAgICBjbGVhcmVkLCBzbyBmdXR1cmUgY2FsbHMgdG8gY2hlY2tf Y29tcGxldGVkIHdpbGwgc3VjY2VlZC4pCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmpvaW4o dGltZW91dCkKKworICAgICAgICBpZiBzZWxmLmlzX2FsaXZlKCk6CisgICAgICAgICAgICByYWlz ZSBUaW1lb3V0RXJyb3IoImNsaWVudCB0aHJlYWQgZGlkIG5vdCBoYW5kc2hha2Ugd2l0aGluIHRo ZSB0aW1lb3V0IikKKyAgICAgICAgZWxpZiBzZWxmLmV4Y2VwdGlvbjoKKyAgICAgICAgICAgIGUg PSBzZWxmLmV4Y2VwdGlvbgorICAgICAgICAgICAgc2VsZi5leGNlcHRpb24gPSBOb25lCisgICAg ICAgICAgICByYWlzZSBlCisKKworQHB5dGVzdC5maXh0dXJlCitkZWYgYWNjZXB0KHNlcnZlcl9z b2NrZXQpOgorICAgICIiIgorICAgIFJldHVybnMgYSBmYWN0b3J5IGZ1bmN0aW9uIHRoYXQsIHdo ZW4gY2FsbGVkLCByZXR1cm5zIGEgcGFpciAoc29jaywgY2xpZW50KQorICAgIHdoZXJlIHNvY2sg aXMgYSBzZXJ2ZXIgc29ja2V0IHRoYXQgaGFzIGFjY2VwdGVkIGEgY29ubmVjdGlvbiBmcm9tIGNs aWVudCwKKyAgICBhbmQgY2xpZW50IGlzIGFuIGluc3RhbmNlIG9mIENsaWVudEhhbmRzaGFrZS4g Q2xpZW50cyB3aWxsIGNvbXBsZXRlIHRoZWlyCisgICAgaGFuZHNoYWtlcyBhbmQgY2xlYW5seSBk aXNjb25uZWN0LgorCisgICAgVGhlIGRlZmF1bHQgY29ubnN0cmluZyBvcHRpb25zIG1heSBiZSBl eHRlbmRlZCBvciBvdmVycmlkZGVuIGJ5IHBhc3NpbmcKKyAgICBhcmJpdHJhcnkga2V5d29yZCBh cmd1bWVudHMuIEtlZXAgaW4gbWluZCB0aGF0IHlvdSBnZW5lcmFsbHkgc2hvdWxkIG5vdAorICAg IG92ZXJyaWRlIHRoZSBob3N0IG9yIHBvcnQsIHNpbmNlIHRoZXkgcG9pbnQgdG8gdGhlIGxvY2Fs IHRlc3Qgc2VydmVyLgorCisgICAgRm9yIHNpdHVhdGlvbnMgd2hlcmUgYSBjbGllbnQgbmVlZHMg dG8gY29ubmVjdCBtb3JlIHRoYW4gb25jZSB0byBjb21wbGV0ZSBhCisgICAgaGFuZHNoYWtlLCB0 aGUgYWNjZXB0IGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UuIChUaGUgY2xp ZW50CisgICAgcmV0dXJuZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMgd2lsbCBhbHdheXMgYmUgdGhl IHNhbWUgY2xpZW50IHRoYXQgd2FzCisgICAgcmV0dXJuZWQgZm9yIHRoZSBmaXJzdCBjYWxsLikK KworICAgIFRlc3RzIG11c3QgZWl0aGVyIGNvbXBsZXRlIHRoZSBoYW5kc2hha2Ugc28gdGhhdCB0 aGUgY2xpZW50IHRocmVhZCBjYW4gYmUKKyAgICBhdXRvbWF0aWNhbGx5IGpvaW5lZCBkdXJpbmcg dGVhcmRvd24sIG9yIGVsc2UgY2FsbCBjbGllbnQuY2hlY2tfY29tcGxldGVkKCkKKyAgICBhbmQg bWFudWFsbHkgaGFuZGxlIGFueSBleHBlY3RlZCBlcnJvcnMuCisgICAgIiIiCisgICAgXywgcG9y dCA9IHNlcnZlcl9zb2NrZXQuZ2V0c29ja25hbWUoKQorCisgICAgY2xpZW50ID0gTm9uZQorICAg IGRlZmF1bHRfb3B0cyA9IGRpY3QoCisgICAgICAgIHBvcnQ9cG9ydCwKKyAgICAgICAgdXNlcj1w cTMucGd1c2VyKCksCisgICAgICAgIHNzbG1vZGU9ImRpc2FibGUiLAorICAgICkKKworICAgIGRl ZiBmYWN0b3J5KCoqa3dhcmdzKToKKyAgICAgICAgbm9ubG9jYWwgY2xpZW50CisKKyAgICAgICAg aWYgY2xpZW50IGlzIE5vbmU6CisgICAgICAgICAgICBvcHRzID0gZGljdChkZWZhdWx0X29wdHMp CisgICAgICAgICAgICBvcHRzLnVwZGF0ZShrd2FyZ3MpCisKKyAgICAgICAgICAgICMgVGhlIHNl cnZlcl9zb2NrZXQgaXMgYWxyZWFkeSBsaXN0ZW5pbmcsIHNvIHRoZSBjbGllbnQgdGhyZWFkIGNh bgorICAgICAgICAgICAgIyBiZSBzYWZlbHkgc3RhcnRlZDsgaXQnbGwgYmxvY2sgb24gdGhlIGNv bm5lY3Rpb24gdW50aWwgd2UgYWNjZXB0LgorICAgICAgICAgICAgY2xpZW50ID0gQ2xpZW50SGFu ZHNoYWtlKCoqb3B0cykKKyAgICAgICAgICAgIGNsaWVudC5zdGFydCgpCisKKyAgICAgICAgc29j aywgXyA9IHNlcnZlcl9zb2NrZXQuYWNjZXB0KCkKKyAgICAgICAgcmV0dXJuIHNvY2ssIGNsaWVu dAorCisgICAgeWllbGQgZmFjdG9yeQorICAgIGNsaWVudC5jaGVja19jb21wbGV0ZWQoKQorCisK K0BweXRlc3QuZml4dHVyZQorZGVmIGNvbm4oYWNjZXB0KToKKyAgICAiIiIKKyAgICBSZXR1cm5z IGFuIGFjY2VwdGVkLCB3cmFwcGVkIHBxMyBjb25uZWN0aW9uIHRvIGEgcHN5Y29wZzIgY2xpZW50 LiBUaGUgc29ja2V0CisgICAgd2lsbCBiZSBjbG9zZWQgd2hlbiB0aGUgdGVzdCBmaW5pc2hlcywg YW5kIHRoZSBjbGllbnQgd2lsbCBiZSBjaGVja2VkIGZvciBhCisgICAgY2xlYW5seSBjb21wbGV0 ZWQgaGFuZHNoYWtlLgorICAgICIiIgorICAgIHNvY2ssIGNsaWVudCA9IGFjY2VwdCgpCisgICAg d2l0aCBzb2NrOgorICAgICAgICB3aXRoIHBxMy53cmFwKHNvY2ssIGRlYnVnX3N0cmVhbT1zeXMu c3Rkb3V0KSBhcyBjb25uOgorICAgICAgICAgICAgeWllbGQgY29ubgpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcHl0aG9uL2NsaWVudC90ZXN0X2NsaWVudC5weSBiL3NyYy90ZXN0L3B5dGhvbi9jbGll bnQvdGVzdF9jbGllbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u YzRjOTQ2ZmRhNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5dGhvbi9jbGllbnQvdGVz dF9jbGllbnQucHkKQEAgLTAsMCArMSwxODAgQEAKKyMKKyMgQ29weXJpZ2h0IDIwMjEgVk13YXJl LCBJbmMuCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBQb3N0Z3JlU1FMCisjCisKK2ltcG9y dCBiYXNlNjQKK2ltcG9ydCBzeXMKKworaW1wb3J0IHBzeWNvcGcyCitpbXBvcnQgcHl0ZXN0Citm cm9tIGNyeXB0b2dyYXBoeS5oYXptYXQucHJpbWl0aXZlcyBpbXBvcnQgaGFzaGVzLCBobWFjCisK K2ltcG9ydCBwcTMKKworCitkZWYgZmluaXNoX2hhbmRzaGFrZShjb25uKToKKyAgICAiIiIKKyAg ICBTZW5kcyB0aGUgQXV0aGVudGljYXRpb25PSyBtZXNzYWdlIGFuZCB0aGUgc3RhbmRhcmQgb3Bl bmluZyBzYWx2byBvZiBzZXJ2ZXIKKyAgICBtZXNzYWdlcywgdGhlbiBhc3NlcnRzIHRoYXQgdGhl IGNsaWVudCBpbW1lZGlhdGVseSBzZW5kcyBhIFRlcm1pbmF0ZSBtZXNzYWdlCisgICAgdG8gY2xv c2UgdGhlIGNvbm5lY3Rpb24gY2xlYW5seS4KKyAgICAiIiIKKyAgICBwcTMuc2VuZChjb25uLCBw cTMudHlwZXMuQXV0aG5SZXF1ZXN0LCB0eXBlPXBxMy5hdXRobi5PSykKKyAgICBwcTMuc2VuZChj b25uLCBwcTMudHlwZXMuUGFyYW1ldGVyU3RhdHVzLCBuYW1lPWIiY2xpZW50X2VuY29kaW5nIiwg dmFsdWU9YiJVVEYtOCIpCisgICAgcHEzLnNlbmQoY29ubiwgcHEzLnR5cGVzLlBhcmFtZXRlclN0 YXR1cywgbmFtZT1iIkRhdGVTdHlsZSIsIHZhbHVlPWIiSVNPLCBNRFkiKQorICAgIHBxMy5zZW5k KGNvbm4sIHBxMy50eXBlcy5SZWFkeUZvclF1ZXJ5LCBzdGF0dXM9YiJJIikKKworICAgIHBrdCA9 IHBxMy5yZWN2MShjb25uKQorICAgIGFzc2VydCBwa3QudHlwZSA9PSBwcTMudHlwZXMuVGVybWlu YXRlCisKKworZGVmIHRlc3RfaGFuZHNoYWtlKGNvbm4pOgorICAgIHN0YXJ0dXAgPSBwcTMucmVj djEoY29ubiwgY2xzPXBxMy5TdGFydHVwKQorICAgIGFzc2VydCBzdGFydHVwLnByb3RvID09IHBx My5wcm90b2NvbCgzLCAwKQorCisgICAgZmluaXNoX2hhbmRzaGFrZShjb25uKQorCisKK2RlZiB0 ZXN0X2Fib3J0ZWRfY29ubmVjdGlvbihhY2NlcHQpOgorICAgICIiIgorICAgIE1ha2Ugc3VyZSB0 aGUgY2xpZW50IGNvcnJlY3RseSByZXBvcnRzIGFuIGVhcmx5IGNsb3NlIGR1cmluZyBoYW5kc2hh a2VzLgorICAgICIiIgorICAgIHNvY2ssIGNsaWVudCA9IGFjY2VwdCgpCisgICAgc29jay5jbG9z ZSgpCisKKyAgICBleHBlY3RlZCA9ICJzZXJ2ZXIgY2xvc2VkIHRoZSBjb25uZWN0aW9uIHVuZXhw ZWN0ZWRseSIKKyAgICB3aXRoIHB5dGVzdC5yYWlzZXMocHN5Y29wZzIuT3BlcmF0aW9uYWxFcnJv ciwgbWF0Y2g9ZXhwZWN0ZWQpOgorICAgICAgICBjbGllbnQuY2hlY2tfY29tcGxldGVkKCkKKwor CisjCisjIFNDUkFNLVNIQS0yNTYgKHNlZSBSRkMgNTgwMjogaHR0cHM6Ly90b29scy5pZXRmLm9y Zy9odG1sL3JmYzU4MDIpCisjCisKKworQHB5dGVzdC5maXh0dXJlCitkZWYgcGFzc3dvcmQoKToK KyAgICAiIiIKKyAgICBSZXR1cm5zIGEgcGFzc3dvcmQgZm9yIHVzZSBieSBib3RoIGNsaWVudCBh bmQgc2VydmVyLgorICAgICIiIgorICAgICMgVE9ETzogcGFyYW1ldGVyaXplIHRoaXMgd2l0aCBw YXNzd29yZHMgdGhhdCByZXF1aXJlIFNBU0xwcmVwLgorICAgIHJldHVybiAic2VjcmV0IgorCisK K0BweXRlc3QuZml4dHVyZQorZGVmIHB3Y29ubihhY2NlcHQsIHBhc3N3b3JkKToKKyAgICAiIiIK KyAgICBMaWtlIHRoZSBjb25uIGZpeHR1cmUsIGJ1dCB1c2VzIGEgcGFzc3dvcmQgaW4gdGhlIGNv bm5lY3Rpb24uCisgICAgIiIiCisgICAgc29jaywgY2xpZW50ID0gYWNjZXB0KHBhc3N3b3JkPXBh c3N3b3JkKQorICAgIHdpdGggc29jazoKKyAgICAgICAgd2l0aCBwcTMud3JhcChzb2NrLCBkZWJ1 Z19zdHJlYW09c3lzLnN0ZG91dCkgYXMgY29ubjoKKyAgICAgICAgICAgIHlpZWxkIGNvbm4KKwor CitkZWYgc2hhMjU2KGRhdGEpOgorICAgICIiIlRoZSBIKHN0cikgZnVuY3Rpb24gZnJvbSBTZWN0 aW9uIDIuMi4iIiIKKyAgICBkaWdlc3QgPSBoYXNoZXMuSGFzaChoYXNoZXMuU0hBMjU2KCkpCisg ICAgZGlnZXN0LnVwZGF0ZShkYXRhKQorICAgIHJldHVybiBkaWdlc3QuZmluYWxpemUoKQorCisK K2RlZiBobWFjXzI1NihrZXksIGRhdGEpOgorICAgICIiIlRoZSBITUFDKGtleSwgc3RyKSBmdW5j dGlvbiBmcm9tIFNlY3Rpb24gMi4yLiIiIgorICAgIGggPSBobWFjLkhNQUMoa2V5LCBoYXNoZXMu U0hBMjU2KCkpCisgICAgaC51cGRhdGUoZGF0YSkKKyAgICByZXR1cm4gaC5maW5hbGl6ZSgpCisK KworZGVmIHhvcihhLCBiKToKKyAgICAiIiJUaGUgWE9SIG9wZXJhdGlvbiBmcm9tIFNlY3Rpb24g Mi4yLiIiIgorICAgIHJlcyA9IGJ5dGVhcnJheShhKQorICAgIGZvciBpLCBieXRlIGluIGVudW1l cmF0ZShiKToKKyAgICAgICAgcmVzW2ldIF49IGJ5dGUKKyAgICByZXR1cm4gYnl0ZXMocmVzKQor CisKK2RlZiBoX2koZGF0YSwgc2FsdCwgaSk6CisgICAgIiIiVGhlIEhpKHN0ciwgc2FsdCwgaSkg ZnVuY3Rpb24gZnJvbSBTZWN0aW9uIDIuMi4iIiIKKyAgICBhc3NlcnQgaSA+IDAKKworICAgIGFj YyA9IGhtYWNfMjU2KGRhdGEsIHNhbHQgKyBiIlx4MDBceDAwXHgwMFx4MDEiKQorICAgIGxhc3Qg PSBhY2MKKyAgICBpIC09IDEKKworICAgIHdoaWxlIGk6CisgICAgICAgIHUgPSBobWFjXzI1Nihk YXRhLCBsYXN0KQorICAgICAgICBhY2MgPSB4b3IoYWNjLCB1KQorCisgICAgICAgIGxhc3QgPSB1 CisgICAgICAgIGkgLT0gMQorCisgICAgcmV0dXJuIGFjYworCisKK2RlZiB0ZXN0X3NjcmFtKHB3 Y29ubiwgcGFzc3dvcmQpOgorICAgIHN0YXJ0dXAgPSBwcTMucmVjdjEocHdjb25uLCBjbHM9cHEz LlN0YXJ0dXApCisgICAgYXNzZXJ0IHN0YXJ0dXAucHJvdG8gPT0gcHEzLnByb3RvY29sKDMsIDAp CisKKyAgICBwcTMuc2VuZCgKKyAgICAgICAgcHdjb25uLAorICAgICAgICBwcTMudHlwZXMuQXV0 aG5SZXF1ZXN0LAorICAgICAgICB0eXBlPXBxMy5hdXRobi5TQVNMLAorICAgICAgICBib2R5PVti IlNDUkFNLVNIQS0yNTYiLCBiIiJdLAorICAgICkKKworICAgICMgR2V0IHRoZSBjbGllbnQtZmly c3QtbWVzc2FnZS4KKyAgICBwa3QgPSBwcTMucmVjdjEocHdjb25uKQorICAgIGFzc2VydCBwa3Qu dHlwZSA9PSBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlCisKKyAgICBpbml0aWFsID0gcHEzLlNB U0xJbml0aWFsUmVzcG9uc2UucGFyc2UocGt0LnBheWxvYWQpCisgICAgYXNzZXJ0IGluaXRpYWwu bmFtZSA9PSBiIlNDUkFNLVNIQS0yNTYiCisKKyAgICBjX2JpbmQsIGF1dGh6aWQsIGNfbmFtZSwg Y19ub25jZSA9IGluaXRpYWwuZGF0YS5zcGxpdChiIiwiKQorICAgIGFzc2VydCBjX2JpbmQgPT0g YiJuIiAgIyBubyBjaGFubmVsIGJpbmRpbmdzIG9uIGEgcGxhaW50ZXh0IGNvbm5lY3Rpb24KKyAg ICBhc3NlcnQgYXV0aHppZCA9PSBiIiIgICMgd2UgZG9uJ3Qgc3VwcG9ydCBhdXRoemlkIGN1cnJl bnRseQorICAgIGFzc2VydCBjX25hbWUgPT0gYiJuPSIgICMgbGlicHEgZG9lc24ndCBob25vciB0 aGUgR1MyIHVzZXJuYW1lCisgICAgYXNzZXJ0IGNfbm9uY2Uuc3RhcnRzd2l0aChiInI9IikKKwor ICAgICMgU2VuZCB0aGUgc2VydmVyLWZpcnN0LW1lc3NhZ2UuCisgICAgc2FsdCA9IGIiMTIzNDUi CisgICAgaXRlcmF0aW9ucyA9IDIKKworICAgIHNfbm9uY2UgPSBjX25vbmNlICsgYiJzb21lbm9u Y2UiCisgICAgc19zYWx0ID0gYiJzPSIgKyBiYXNlNjQuYjY0ZW5jb2RlKHNhbHQpCisgICAgc19p dGVyYXRpb25zID0gYiJpPSVkIiAlIGl0ZXJhdGlvbnMKKworICAgIG1zZyA9IGIiLCIuam9pbihb c19ub25jZSwgc19zYWx0LCBzX2l0ZXJhdGlvbnNdKQorICAgIHBxMy5zZW5kKHB3Y29ubiwgcHEz LnR5cGVzLkF1dGhuUmVxdWVzdCwgdHlwZT1wcTMuYXV0aG4uU0FTTENvbnRpbnVlLCBib2R5PW1z ZykKKworICAgICMgR2V0IHRoZSBjbGllbnQtZmluYWwtbWVzc2FnZS4KKyAgICBwa3QgPSBwcTMu cmVjdjEocHdjb25uKQorICAgIGFzc2VydCBwa3QudHlwZSA9PSBwcTMudHlwZXMuUGFzc3dvcmRN ZXNzYWdlCisKKyAgICBjX2JpbmRfZmluYWwsIGNfbm9uY2VfZmluYWwsIGNfcHJvb2YgPSBwa3Qu cGF5bG9hZC5zcGxpdChiIiwiKQorICAgIGFzc2VydCBjX2JpbmRfZmluYWwgPT0gYiJjPSIgKyBi YXNlNjQuYjY0ZW5jb2RlKGNfYmluZCArIGIiLCIgKyBhdXRoemlkICsgYiIsIikKKyAgICBhc3Nl cnQgY19ub25jZV9maW5hbCA9PSBzX25vbmNlCisKKyAgICAjIENhbGN1bGF0ZSB3aGF0IHRoZSBj bGllbnQgcHJvb2Ygc2hvdWxkIGJlLgorICAgIHNhbHRlZF9wYXNzd29yZCA9IGhfaShwYXNzd29y ZC5lbmNvZGUoImFzY2lpIiksIHNhbHQsIGl0ZXJhdGlvbnMpCisgICAgY2xpZW50X2tleSA9IGht YWNfMjU2KHNhbHRlZF9wYXNzd29yZCwgYiJDbGllbnQgS2V5IikKKyAgICBzdG9yZWRfa2V5ID0g c2hhMjU2KGNsaWVudF9rZXkpCisKKyAgICBhdXRoX21lc3NhZ2UgPSBiIiwiLmpvaW4oCisgICAg ICAgIFtjX25hbWUsIGNfbm9uY2UsIHNfbm9uY2UsIHNfc2FsdCwgc19pdGVyYXRpb25zLCBjX2Jp bmRfZmluYWwsIGNfbm9uY2VfZmluYWxdCisgICAgKQorICAgIGNsaWVudF9zaWduYXR1cmUgPSBo bWFjXzI1NihzdG9yZWRfa2V5LCBhdXRoX21lc3NhZ2UpCisgICAgY2xpZW50X3Byb29mID0geG9y KGNsaWVudF9rZXksIGNsaWVudF9zaWduYXR1cmUpCisKKyAgICBleHBlY3RlZCA9IGIicD0iICsg YmFzZTY0LmI2NGVuY29kZShjbGllbnRfcHJvb2YpCisgICAgYXNzZXJ0IGNfcHJvb2YgPT0gZXhw ZWN0ZWQKKworICAgICMgU2VuZCB0aGUgY29ycmVjdCBzZXJ2ZXIgc2lnbmF0dXJlLgorICAgIHNl cnZlcl9rZXkgPSBobWFjXzI1NihzYWx0ZWRfcGFzc3dvcmQsIGIiU2VydmVyIEtleSIpCisgICAg c2VydmVyX3NpZ25hdHVyZSA9IGhtYWNfMjU2KHNlcnZlcl9rZXksIGF1dGhfbWVzc2FnZSkKKwor ICAgIHNfdmVyaWZ5ID0gYiJ2PSIgKyBiYXNlNjQuYjY0ZW5jb2RlKHNlcnZlcl9zaWduYXR1cmUp CisgICAgcHEzLnNlbmQocHdjb25uLCBwcTMudHlwZXMuQXV0aG5SZXF1ZXN0LCB0eXBlPXBxMy5h dXRobi5TQVNMRmluYWwsIGJvZHk9c192ZXJpZnkpCisKKyAgICAjIERvbmUhCisgICAgZmluaXNo X2hhbmRzaGFrZShwd2Nvbm4pCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9weXRob24vY2xpZW50L3Rl c3Rfb2F1dGgucHkgYi9zcmMvdGVzdC9weXRob24vY2xpZW50L3Rlc3Rfb2F1dGgucHkKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYTc1NGE5YzBiNgotLS0gL2Rldi9udWxs CisrKyBiL3NyYy90ZXN0L3B5dGhvbi9jbGllbnQvdGVzdF9vYXV0aC5weQpAQCAtMCwwICsxLDkz NiBAQAorIworIyBDb3B5cmlnaHQgMjAyMSBWTXdhcmUsIEluYy4KKyMgU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IFBvc3RncmVTUUwKKyMKKworaW1wb3J0IGJhc2U2NAoraW1wb3J0IGh0dHAuc2Vy dmVyCitpbXBvcnQganNvbgoraW1wb3J0IHNlY3JldHMKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJl YWRpbmcKK2ltcG9ydCB0aW1lCitpbXBvcnQgdXJsbGliLnBhcnNlCisKK2ltcG9ydCBwc3ljb3Bn MgoraW1wb3J0IHB5dGVzdAorCitpbXBvcnQgcHEzCisKK2Zyb20gLmNvbmZ0ZXN0IGltcG9ydCBC TE9DS0lOR19USU1FT1VUCisKKworZGVmIGZpbmlzaF9oYW5kc2hha2UoY29ubik6CisgICAgIiIi CisgICAgU2VuZHMgdGhlIEF1dGhlbnRpY2F0aW9uT0sgbWVzc2FnZSBhbmQgdGhlIHN0YW5kYXJk IG9wZW5pbmcgc2Fsdm8gb2Ygc2VydmVyCisgICAgbWVzc2FnZXMsIHRoZW4gYXNzZXJ0cyB0aGF0 IHRoZSBjbGllbnQgaW1tZWRpYXRlbHkgc2VuZHMgYSBUZXJtaW5hdGUgbWVzc2FnZQorICAgIHRv IGNsb3NlIHRoZSBjb25uZWN0aW9uIGNsZWFubHkuCisgICAgIiIiCisgICAgcHEzLnNlbmQoY29u biwgcHEzLnR5cGVzLkF1dGhuUmVxdWVzdCwgdHlwZT1wcTMuYXV0aG4uT0spCisgICAgcHEzLnNl bmQoY29ubiwgcHEzLnR5cGVzLlBhcmFtZXRlclN0YXR1cywgbmFtZT1iImNsaWVudF9lbmNvZGlu ZyIsIHZhbHVlPWIiVVRGLTgiKQorICAgIHBxMy5zZW5kKGNvbm4sIHBxMy50eXBlcy5QYXJhbWV0 ZXJTdGF0dXMsIG5hbWU9YiJEYXRlU3R5bGUiLCB2YWx1ZT1iIklTTywgTURZIikKKyAgICBwcTMu c2VuZChjb25uLCBwcTMudHlwZXMuUmVhZHlGb3JRdWVyeSwgc3RhdHVzPWIiSSIpCisKKyAgICBw a3QgPSBwcTMucmVjdjEoY29ubikKKyAgICBhc3NlcnQgcGt0LnR5cGUgPT0gcHEzLnR5cGVzLlRl cm1pbmF0ZQorCisKKyMKKyMgT0FVVEhCRUFSRVIgKHNlZSBSRkMgNzYyODogaHR0cHM6Ly90b29s cy5pZXRmLm9yZy9odG1sL3JmYzc2MjgpCisjCisKKworZGVmIHN0YXJ0X29hdXRoX2hhbmRzaGFr ZShjb25uKToKKyAgICAiIiIKKyAgICBOZWdvdGlhdGVzIGFuIE9BVVRIQkVBUkVSIFNBU0wgY2hh bGxlbmdlLiBSZXR1cm5zIHRoZSBjbGllbnQncyBpbml0aWFsCisgICAgcmVzcG9uc2UgZGF0YS4K KyAgICAiIiIKKyAgICBzdGFydHVwID0gcHEzLnJlY3YxKGNvbm4sIGNscz1wcTMuU3RhcnR1cCkK KyAgICBhc3NlcnQgc3RhcnR1cC5wcm90byA9PSBwcTMucHJvdG9jb2woMywgMCkKKworICAgIHBx My5zZW5kKAorICAgICAgICBjb25uLCBwcTMudHlwZXMuQXV0aG5SZXF1ZXN0LCB0eXBlPXBxMy5h dXRobi5TQVNMLCBib2R5PVtiIk9BVVRIQkVBUkVSIiwgYiIiXQorICAgICkKKworICAgIHBrdCA9 IHBxMy5yZWN2MShjb25uKQorICAgIGFzc2VydCBwa3QudHlwZSA9PSBwcTMudHlwZXMuUGFzc3dv cmRNZXNzYWdlCisKKyAgICBpbml0aWFsID0gcHEzLlNBU0xJbml0aWFsUmVzcG9uc2UucGFyc2Uo cGt0LnBheWxvYWQpCisgICAgYXNzZXJ0IGluaXRpYWwubmFtZSA9PSBiIk9BVVRIQkVBUkVSIgor CisgICAgcmV0dXJuIGluaXRpYWwuZGF0YQorCisKK2RlZiBnZXRfYXV0aF92YWx1ZShpbml0aWFs KToKKyAgICAiIiIKKyAgICBGaW5kcyB0aGUgYXV0aCB2YWx1ZSAoZS5nLiAiQmVhcmVyIHNvbWVk YXRhLi4uIiBpbiB0aGUgY2xpZW50J3MgaW5pdGlhbCBTQVNMCisgICAgcmVzcG9uc2UuCisgICAg IiIiCisgICAga3ZwYWlycyA9IGluaXRpYWwuc3BsaXQoYiJceDAxIikKKyAgICBhc3NlcnQga3Zw YWlyc1swXSA9PSBiIm4sLCIgICMgbm8gY2hhbm5lbCBiaW5kaW5nIG9yIGF1dGh6aWQKKyAgICBh c3NlcnQga3ZwYWlyc1syXSA9PSBiIiIgICMgZW5kcyB3aXRoIGFuIGVtcHR5IGt2cGFpcgorICAg IGFzc2VydCBrdnBhaXJzWzNdID09IGIiIiAgIyAuLi5hbmQgdGhlcmUncyBub3RoaW5nIGFmdGVy IGl0CisgICAgYXNzZXJ0IGxlbihrdnBhaXJzKSA9PSA0CisKKyAgICBrZXksIHZhbHVlID0ga3Zw YWlyc1sxXS5zcGxpdChiIj0iLCAyKQorICAgIGFzc2VydCBrZXkgPT0gYiJhdXRoIgorCisgICAg cmV0dXJuIHZhbHVlCisKKworZGVmIHh0ZXN0X29hdXRoX3N1Y2Nlc3MoY29ubik6ICAjIFRPRE8K KyAgICBpbml0aWFsID0gc3RhcnRfb2F1dGhfaGFuZHNoYWtlKGNvbm4pCisKKyAgICBhdXRoID0g Z2V0X2F1dGhfdmFsdWUoaW5pdGlhbCkKKyAgICBhc3NlcnQgYXV0aC5zdGFydHN3aXRoKGIiQmVh cmVyICIpCisKKyAgICAjIEFjY2VwdCB0aGUgdG9rZW4uIFRPRE8gYWN0dWFsbHkgdmFsaWRhdGUK KyAgICBwcTMuc2VuZChjb25uLCBwcTMudHlwZXMuQXV0aG5SZXF1ZXN0LCB0eXBlPXBxMy5hdXRo bi5TQVNMRmluYWwpCisgICAgZmluaXNoX2hhbmRzaGFrZShjb25uKQorCisKK2NsYXNzIE9wZW5J RFByb3ZpZGVyKHRocmVhZGluZy5UaHJlYWQpOgorICAgICIiIgorICAgIEEgdGhyZWFkIHRoYXQg cnVucyBhIG1vY2sgT3BlbklEIHByb3ZpZGVyIHNlcnZlci4KKyAgICAiIiIKKworICAgIGRlZiBf X2luaXRfXyhzZWxmLCAqLCBwb3J0KToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisKKyAg ICAgICAgc2VsZi5leGNlcHRpb24gPSBOb25lCisKKyAgICAgICAgYWRkciA9ICgiIiwgcG9ydCkK KyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZWxmLl9TZXJ2ZXIoYWRkciwgc2VsZi5fSGFuZGxlcikK KworICAgICAgICAjIFRPRE86IGFsbG93IEhUVFBTIG9ubHksIHNvbWVob3cKKyAgICAgICAgb2F1 dGggPSBzZWxmLl9PQXV0aFN0YXRlKCkKKyAgICAgICAgb2F1dGguaG9zdCA9IGYibG9jYWxob3N0 Ontwb3J0fSIKKyAgICAgICAgb2F1dGguaXNzdWVyID0gZiJodHRwOi8vbG9jYWxob3N0Ontwb3J0 fSIKKworICAgICAgICAjIFRoZSBmb2xsb3dpbmcgZW5kcG9pbnRzIGFyZSByZXF1aXJlZCB0byBi ZSBhZHZlcnRpc2VkIGJ5IHByb3ZpZGVycywKKyAgICAgICAgIyBldmVuIHRob3VnaCBvdXIgY2hv c2VuIGNsaWVudCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBhY3R1YWxseSBtYWtlCisgICAgICAg ICMgdXNlIG9mIHRoZW0uCisgICAgICAgIG9hdXRoLnJlZ2lzdGVyX2VuZHBvaW50KAorICAgICAg ICAgICAgImF1dGhvcml6YXRpb25fZW5kcG9pbnQiLCAiUE9TVCIsICIvYXV0aG9yaXplIiwgc2Vs Zi5fYXV0aG9yaXphdGlvbl9oYW5kbGVyCisgICAgICAgICkKKyAgICAgICAgb2F1dGgucmVnaXN0 ZXJfZW5kcG9pbnQoImp3a3NfdXJpIiwgIkdFVCIsICIva2V5cyIsIHNlbGYuX2p3a3NfaGFuZGxl cikKKworICAgICAgICBzZWxmLnNlcnZlci5vYXV0aCA9IG9hdXRoCisKKyAgICBkZWYgcnVuKHNl bGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnNlcnZlci5zZXJ2ZV9mb3JldmVy KCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgc2VsZi5leGNl cHRpb24gPSBlCisKKyAgICBkZWYgc3RvcChzZWxmLCB0aW1lb3V0PUJMT0NLSU5HX1RJTUVPVVQp OgorICAgICAgICAiIiIKKyAgICAgICAgU2h1dHMgZG93biB0aGUgc2VydmVyIGFuZCBqb2lucyBp dHMgdGhyZWFkLiBSYWlzZXMgYW4gZXhjZXB0aW9uIGlmIHRoZQorICAgICAgICB0aHJlYWQgY291 bGQgbm90IGJlIGpvaW5lZCwgb3IgaWYgaXQgdGhyZXcgYW4gZXhjZXB0aW9uIGl0c2VsZi4gTXVz dAorICAgICAgICBvbmx5IGJlIGNhbGxlZCBvbmNlLCBhZnRlciBzdGFydCgpLgorICAgICAgICAi IiIKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc2h1dGRvd24oKQorICAgICAgICBzZWxmLmpvaW4odGlt ZW91dCkKKworICAgICAgICBpZiBzZWxmLmlzX2FsaXZlKCk6CisgICAgICAgICAgICByYWlzZSBU aW1lb3V0RXJyb3IoImNsaWVudCB0aHJlYWQgZGlkIG5vdCBoYW5kc2hha2Ugd2l0aGluIHRoZSB0 aW1lb3V0IikKKyAgICAgICAgZWxpZiBzZWxmLmV4Y2VwdGlvbjoKKyAgICAgICAgICAgIGUgPSBz ZWxmLmV4Y2VwdGlvbgorICAgICAgICAgICAgcmFpc2UgZQorCisgICAgY2xhc3MgX09BdXRoU3Rh dGUob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc2Vs Zi5lbmRwb2ludF9wYXRocyA9IHt9CisgICAgICAgICAgICBzZWxmLl9lbmRwb2ludHMgPSB7fQor CisgICAgICAgIGRlZiByZWdpc3Rlcl9lbmRwb2ludChzZWxmLCBuYW1lLCBtZXRob2QsIHBhdGgs IGZ1bmMpOgorICAgICAgICAgICAgaWYgbWV0aG9kIG5vdCBpbiBzZWxmLl9lbmRwb2ludHM6Cisg ICAgICAgICAgICAgICAgc2VsZi5fZW5kcG9pbnRzW21ldGhvZF0gPSB7fQorCisgICAgICAgICAg ICBzZWxmLl9lbmRwb2ludHNbbWV0aG9kXVtwYXRoXSA9IGZ1bmMKKyAgICAgICAgICAgIHNlbGYu ZW5kcG9pbnRfcGF0aHNbbmFtZV0gPSBwYXRoCisKKyAgICAgICAgZGVmIGVuZHBvaW50KHNlbGYs IG1ldGhvZCwgcGF0aCk6CisgICAgICAgICAgICBpZiBtZXRob2Qgbm90IGluIHNlbGYuX2VuZHBv aW50czoKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICAgICByZXR1cm4g c2VsZi5fZW5kcG9pbnRzW21ldGhvZF0uZ2V0KHBhdGgpCisKKyAgICBjbGFzcyBfU2VydmVyKGh0 dHAuc2VydmVyLkhUVFBTZXJ2ZXIpOgorICAgICAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYsIHJl cXVlc3QsIGFkZHIpOgorICAgICAgICAgICAgc2VsZi5zaHV0ZG93bl9yZXF1ZXN0KHJlcXVlc3Qp CisgICAgICAgICAgICByYWlzZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfandrc19o YW5kbGVyKGhlYWRlcnMsIHBhcmFtcyk6CisgICAgICAgIHJldHVybiAyMDAsIHsia2V5cyI6IFtd fQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfYXV0aG9yaXphdGlvbl9oYW5kbGVyKGhl YWRlcnMsIHBhcmFtcyk6CisgICAgICAgICMgV2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0aGlzIHRv IGJlIGNhbGxlZCBkdXJpbmcgdGhlc2UgdGVzdHMgLS0gd2UKKyAgICAgICAgIyBzaG91bGQgYmUg dXNpbmcgdGhlIGRldmljZSBhdXRob3JpemF0aW9uIGVuZHBvaW50IGluc3RlYWQuCisgICAgICAg IGFzc2VydCAoCisgICAgICAgICAgICBGYWxzZQorICAgICAgICApLCAiYXV0aG9yaXphdGlvbiBo YW5kbGVyIGNhbGxlZCBpbnN0ZWFkIG9mIGRldmljZSBhdXRob3JpemF0aW9uIGhhbmRsZXIiCisK KyAgICBjbGFzcyBfSGFuZGxlcihodHRwLnNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyKToK KyAgICAgICAgdGltZW91dCA9IEJMT0NLSU5HX1RJTUVPVVQKKworICAgICAgICBkZWYgX2Rpc2Nv dmVyeV9oYW5kbGVyKHNlbGYsIGhlYWRlcnMsIHBhcmFtcyk6CisgICAgICAgICAgICBvYXV0aCA9 IHNlbGYuc2VydmVyLm9hdXRoCisKKyAgICAgICAgICAgIGRvYyA9IHsKKyAgICAgICAgICAgICAg ICAiaXNzdWVyIjogb2F1dGguaXNzdWVyLAorICAgICAgICAgICAgICAgICJyZXNwb25zZV90eXBl c19zdXBwb3J0ZWQiOiBbInRva2VuIl0sCisgICAgICAgICAgICAgICAgInN1YmplY3RfdHlwZXNf c3VwcG9ydGVkIjogWyJwdWJsaWMiXSwKKyAgICAgICAgICAgICAgICAiaWRfdG9rZW5fc2lnbmlu Z19hbGdfdmFsdWVzX3N1cHBvcnRlZCI6IFsiUlMyNTYiXSwKKyAgICAgICAgICAgIH0KKworICAg ICAgICAgICAgZm9yIG5hbWUsIHBhdGggaW4gb2F1dGguZW5kcG9pbnRfcGF0aHMuaXRlbXMoKToK KyAgICAgICAgICAgICAgICBkb2NbbmFtZV0gPSBvYXV0aC5pc3N1ZXIgKyBwYXRoCisKKyAgICAg ICAgICAgIHJldHVybiAyMDAsIGRvYworCisgICAgICAgIGRlZiBfaGFuZGxlKHNlbGYsICosIHBh cmFtcz1Ob25lLCBoYW5kbGVyPU5vbmUpOgorICAgICAgICAgICAgb2F1dGggPSBzZWxmLnNlcnZl ci5vYXV0aAorICAgICAgICAgICAgYXNzZXJ0IHNlbGYuaGVhZGVyc1siSG9zdCJdID09IG9hdXRo Lmhvc3QKKworICAgICAgICAgICAgaWYgaGFuZGxlciBpcyBOb25lOgorICAgICAgICAgICAgICAg IGhhbmRsZXIgPSBvYXV0aC5lbmRwb2ludChzZWxmLmNvbW1hbmQsIHNlbGYucGF0aCkKKyAgICAg ICAgICAgICAgICBhc3NlcnQgKAorICAgICAgICAgICAgICAgICAgICBoYW5kbGVyIGlzIG5vdCBO b25lCisgICAgICAgICAgICAgICAgKSwgZiJubyByZWdpc3RlcmVkIGVuZHBvaW50IGZvciB7c2Vs Zi5jb21tYW5kfSB7c2VsZi5wYXRofSIKKworICAgICAgICAgICAgY29kZSwgcmVzcCA9IGhhbmRs ZXIoc2VsZi5oZWFkZXJzLCBwYXJhbXMpCisKKyAgICAgICAgICAgIHNlbGYuc2VuZF9yZXNwb25z ZShjb2RlKQorICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiQ29udGVudC1UeXBlIiwgImFw cGxpY2F0aW9uL2pzb24iKQorICAgICAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCisKKyAgICAg ICAgICAgIHJlc3AgPSBqc29uLmR1bXBzKHJlc3ApCisgICAgICAgICAgICByZXNwID0gcmVzcC5l bmNvZGUoInV0Zi04IikKKyAgICAgICAgICAgIHNlbGYud2ZpbGUud3JpdGUocmVzcCkKKworICAg ICAgICAgICAgc2VsZi5jbG9zZV9jb25uZWN0aW9uID0gVHJ1ZQorCisgICAgICAgIGRlZiBkb19H RVQoc2VsZik6CisgICAgICAgICAgICBpZiBzZWxmLnBhdGggPT0gIi8ud2VsbC1rbm93bi9vcGVu aWQtY29uZmlndXJhdGlvbiI6CisgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlKGhhbmRsZXI9 c2VsZi5fZGlzY292ZXJ5X2hhbmRsZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAg ICAgICAgIHNlbGYuX2hhbmRsZSgpCisKKyAgICAgICAgZGVmIF9yZXF1ZXN0X2JvZHkoc2VsZik6 CisgICAgICAgICAgICBsZW5ndGggPSBzZWxmLmhlYWRlcnNbIkNvbnRlbnQtTGVuZ3RoIl0KKwor ICAgICAgICAgICAgIyBIYW5kbGUgb25seSBhbiBleHBsaWNpdCBjb250ZW50LWxlbmd0aC4KKyAg ICAgICAgICAgIGFzc2VydCBsZW5ndGggaXMgbm90IE5vbmUKKyAgICAgICAgICAgIGxlbmd0aCA9 IGludChsZW5ndGgpCisKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJmaWxlLnJlYWQobGVuZ3Ro KS5kZWNvZGUoInV0Zi04IikKKworICAgICAgICBkZWYgZG9fUE9TVChzZWxmKToKKyAgICAgICAg ICAgIGFzc2VydCBzZWxmLmhlYWRlcnNbIkNvbnRlbnQtVHlwZSJdID09ICJhcHBsaWNhdGlvbi94 LXd3dy1mb3JtLXVybGVuY29kZWQiCisKKyAgICAgICAgICAgIGJvZHkgPSBzZWxmLl9yZXF1ZXN0 X2JvZHkoKQorICAgICAgICAgICAgcGFyYW1zID0gdXJsbGliLnBhcnNlLnBhcnNlX3FzKGJvZHkp CisKKyAgICAgICAgICAgIHNlbGYuX2hhbmRsZShwYXJhbXM9cGFyYW1zKQorCisKK0BweXRlc3Qu Zml4dHVyZQorZGVmIG9wZW5pZF9wcm92aWRlcih1bnVzZWRfdGNwX3BvcnRfZmFjdG9yeSk6Cisg ICAgIiIiCisgICAgQSBmaXh0dXJlIHRoYXQgcmV0dXJucyB0aGUgT0F1dGggc3RhdGUgb2YgYSBy dW5uaW5nIE9wZW5JRCBwcm92aWRlciBzZXJ2ZXIuIFRoZQorICAgIHNlcnZlciB3aWxsIGJlIHN0 b3BwZWQgd2hlbiB0aGUgZml4dHVyZSBpcyB0b3JuIGRvd24uCisgICAgIiIiCisgICAgdGhyZWFk ID0gT3BlbklEUHJvdmlkZXIocG9ydD11bnVzZWRfdGNwX3BvcnRfZmFjdG9yeSgpKQorICAgIHRo cmVhZC5zdGFydCgpCisKKyAgICB0cnk6CisgICAgICAgIHlpZWxkIHRocmVhZC5zZXJ2ZXIub2F1 dGgKKyAgICBmaW5hbGx5OgorICAgICAgICB0aHJlYWQuc3RvcCgpCisKKworQHB5dGVzdC5tYXJr LnBhcmFtZXRyaXplKCJzZWNyZXQiLCBbTm9uZSwgIiIsICJodW50ZXIyIl0pCitAcHl0ZXN0Lm1h cmsucGFyYW1ldHJpemUoInNjb3BlIiwgW05vbmUsICIiLCAib3BlbmlkIGVtYWlsIl0pCitAcHl0 ZXN0Lm1hcmsucGFyYW1ldHJpemUoInJldHJpZXMiLCBbMCwgMV0pCitkZWYgdGVzdF9vYXV0aF93 aXRoX2V4cGxpY2l0X2lzc3VlcigKKyAgICBjYXBmZCwgYWNjZXB0LCBvcGVuaWRfcHJvdmlkZXIs IHJldHJpZXMsIHNjb3BlLCBzZWNyZXQKKyk6CisgICAgY2xpZW50X2lkID0gc2VjcmV0cy50b2tl bl9oZXgoKQorCisgICAgc29jaywgY2xpZW50ID0gYWNjZXB0KAorICAgICAgICBvYXV0aF9pc3N1 ZXI9b3BlbmlkX3Byb3ZpZGVyLmlzc3VlciwKKyAgICAgICAgb2F1dGhfY2xpZW50X2lkPWNsaWVu dF9pZCwKKyAgICAgICAgb2F1dGhfY2xpZW50X3NlY3JldD1zZWNyZXQsCisgICAgICAgIG9hdXRo X3Njb3BlPXNjb3BlLAorICAgICkKKworICAgIGRldmljZV9jb2RlID0gc2VjcmV0cy50b2tlbl9o ZXgoKQorICAgIHVzZXJfY29kZSA9IGYie3NlY3JldHMudG9rZW5faGV4KDIpfS17c2VjcmV0cy50 b2tlbl9oZXgoMil9IgorICAgIHZlcmlmaWNhdGlvbl91cmwgPSAiaHR0cHM6Ly9leGFtcGxlLmNv bS9kZXZpY2UiCisKKyAgICBhY2Nlc3NfdG9rZW4gPSBzZWNyZXRzLnRva2VuX3VybHNhZmUoKQor CisgICAgZGVmIGNoZWNrX2NsaWVudF9hdXRobihoZWFkZXJzLCBwYXJhbXMpOgorICAgICAgICBp ZiBub3Qgc2VjcmV0OgorICAgICAgICAgICAgYXNzZXJ0IHBhcmFtc1siY2xpZW50X2lkIl0gPT0g W2NsaWVudF9pZF0KKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgUmVxdWlyZSB0aGUg Y2xpZW50IHRvIHVzZSBCYXNpYyBhdXRobjsgcmVxdWVzdC1ib2R5IGNyZWRlbnRpYWxzIGFyZQor ICAgICAgICAjIE5PVCBSRUNPTU1FTkRFRCAoUkZDIDY3NDksIFNlYy4gMi4zLjEpLgorICAgICAg ICBhc3NlcnQgIkF1dGhvcml6YXRpb24iIGluIGhlYWRlcnMKKworICAgICAgICBtZXRob2QsIGNy ZWRzID0gaGVhZGVyc1siQXV0aG9yaXphdGlvbiJdLnNwbGl0KCkKKyAgICAgICAgYXNzZXJ0IG1l dGhvZCA9PSAiQmFzaWMiCisKKyAgICAgICAgZXhwZWN0ZWQgPSBmIntjbGllbnRfaWR9OntzZWNy ZXR9IgorICAgICAgICBhc3NlcnQgYmFzZTY0LmI2NGRlY29kZShjcmVkcykgPT0gZXhwZWN0ZWQu ZW5jb2RlKCJhc2NpaSIpCisKKyAgICAjIFNldCB1cCBvdXIgcHJvdmlkZXIgY2FsbGJhY2tzLgor ICAgICMgTk9URSB0aGF0IHRoZXNlIGNhbGxiYWNrcyB3aWxsIGJlIGNhbGxlZCBvbiBhIGJhY2tn cm91bmQgdGhyZWFkLiBEb24ndCBkbworICAgICMgYW55IHVucHJvdGVjdGVkIHN0YXRlIG11dGF0 aW9uIGhlcmUuCisKKyAgICBkZWYgYXV0aG9yaXphdGlvbl9lbmRwb2ludChoZWFkZXJzLCBwYXJh bXMpOgorICAgICAgICBjaGVja19jbGllbnRfYXV0aG4oaGVhZGVycywgcGFyYW1zKQorCisgICAg ICAgIGlmIHNjb3BlOgorICAgICAgICAgICAgYXNzZXJ0IHBhcmFtc1sic2NvcGUiXSA9PSBbc2Nv cGVdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgInNjb3BlIiBub3QgaW4gcGFy YW1zCisKKyAgICAgICAgcmVzcCA9IHsKKyAgICAgICAgICAgICJkZXZpY2VfY29kZSI6IGRldmlj ZV9jb2RlLAorICAgICAgICAgICAgInVzZXJfY29kZSI6IHVzZXJfY29kZSwKKyAgICAgICAgICAg ICJpbnRlcnZhbCI6IDAsCisgICAgICAgICAgICAidmVyaWZpY2F0aW9uX3VyaSI6IHZlcmlmaWNh dGlvbl91cmwsCisgICAgICAgICAgICAiZXhwaXJlc19pbiI6IDUsCisgICAgICAgIH0KKworICAg ICAgICByZXR1cm4gMjAwLCByZXNwCisKKyAgICBvcGVuaWRfcHJvdmlkZXIucmVnaXN0ZXJfZW5k cG9pbnQoCisgICAgICAgICJkZXZpY2VfYXV0aG9yaXphdGlvbl9lbmRwb2ludCIsICJQT1NUIiwg Ii9kZXZpY2UiLCBhdXRob3JpemF0aW9uX2VuZHBvaW50CisgICAgKQorCisgICAgYXR0ZW1wdHMg PSAwCisgICAgcmV0cnlfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKworICAgIGRlZiB0b2tlbl9l bmRwb2ludChoZWFkZXJzLCBwYXJhbXMpOgorICAgICAgICBjaGVja19jbGllbnRfYXV0aG4oaGVh ZGVycywgcGFyYW1zKQorCisgICAgICAgIGFzc2VydCBwYXJhbXNbImdyYW50X3R5cGUiXSA9PSBb InVybjppZXRmOnBhcmFtczpvYXV0aDpncmFudC10eXBlOmRldmljZV9jb2RlIl0KKyAgICAgICAg YXNzZXJ0IHBhcmFtc1siZGV2aWNlX2NvZGUiXSA9PSBbZGV2aWNlX2NvZGVdCisKKyAgICAgICAg bm93ID0gdGltZS5tb25vdG9uaWMoKQorCisgICAgICAgIHdpdGggcmV0cnlfbG9jazoKKyAgICAg ICAgICAgIG5vbmxvY2FsIGF0dGVtcHRzCisKKyAgICAgICAgICAgICMgSWYgdGhlIHRlc3Qgd2Fu dHMgdG8gZm9yY2UgdGhlIGNsaWVudCB0byByZXRyeSwgcmV0dXJuIGFuCisgICAgICAgICAgICAj IGF1dGhvcml6YXRpb25fcGVuZGluZyByZXNwb25zZSBhbmQgZGVjcmVtZW50IHRoZSByZXRyeSBj b3VudC4KKyAgICAgICAgICAgIGlmIGF0dGVtcHRzIDwgcmV0cmllczoKKyAgICAgICAgICAgICAg ICBhdHRlbXB0cyArPSAxCisgICAgICAgICAgICAgICAgcmV0dXJuIDQwMCwgeyJlcnJvciI6ICJh dXRob3JpemF0aW9uX3BlbmRpbmcifQorCisgICAgICAgICMgU3VjY2Vzc2Z1bGx5IGZpbmlzaCB0 aGUgcmVxdWVzdCBieSBzZW5kaW5nIHRoZSBhY2Nlc3MgYmVhcmVyIHRva2VuLgorICAgICAgICBy ZXNwID0geworICAgICAgICAgICAgImFjY2Vzc190b2tlbiI6IGFjY2Vzc190b2tlbiwKKyAgICAg ICAgICAgICJ0b2tlbl90eXBlIjogImJlYXJlciIsCisgICAgICAgIH0KKworICAgICAgICByZXR1 cm4gMjAwLCByZXNwCisKKyAgICBvcGVuaWRfcHJvdmlkZXIucmVnaXN0ZXJfZW5kcG9pbnQoCisg ICAgICAgICJ0b2tlbl9lbmRwb2ludCIsICJQT1NUIiwgIi90b2tlbiIsIHRva2VuX2VuZHBvaW50 CisgICAgKQorCisgICAgd2l0aCBzb2NrOgorICAgICAgICB3aXRoIHBxMy53cmFwKHNvY2ssIGRl YnVnX3N0cmVhbT1zeXMuc3Rkb3V0KSBhcyBjb25uOgorICAgICAgICAgICAgIyBJbml0aWF0ZSBh IGhhbmRzaGFrZSwgd2hpY2ggc2hvdWxkIHJlc3VsdCBpbiB0aGUgYWJvdmUgZW5kcG9pbnRzCisg ICAgICAgICAgICAjIGJlaW5nIGNhbGxlZC4KKyAgICAgICAgICAgIGluaXRpYWwgPSBzdGFydF9v YXV0aF9oYW5kc2hha2UoY29ubikKKworICAgICAgICAgICAgIyBWYWxpZGF0ZSBhbmQgYWNjZXB0 IHRoZSB0b2tlbi4KKyAgICAgICAgICAgIGF1dGggPSBnZXRfYXV0aF92YWx1ZShpbml0aWFsKQor ICAgICAgICAgICAgYXNzZXJ0IGF1dGggPT0gZiJCZWFyZXIge2FjY2Vzc190b2tlbn0iLmVuY29k ZSgiYXNjaWkiKQorCisgICAgICAgICAgICBwcTMuc2VuZChjb25uLCBwcTMudHlwZXMuQXV0aG5S ZXF1ZXN0LCB0eXBlPXBxMy5hdXRobi5TQVNMRmluYWwpCisgICAgICAgICAgICBmaW5pc2hfaGFu ZHNoYWtlKGNvbm4pCisKKyAgICBpZiByZXRyaWVzOgorICAgICAgICAjIEZpbmFsbHksIG1ha2Ug c3VyZSB0aGF0IHRoZSBjbGllbnQgcHJvbXB0ZWQgdGhlIHVzZXIgd2l0aCB0aGUgZXhwZWN0ZWQK KyAgICAgICAgIyBhdXRob3JpemF0aW9uIFVSTCBhbmQgdXNlciBjb2RlLgorICAgICAgICBleHBl Y3RlZCA9IGYiVmlzaXQge3ZlcmlmaWNhdGlvbl91cmx9IGFuZCBlbnRlciB0aGUgY29kZToge3Vz ZXJfY29kZX0iCisgICAgICAgIF8sIHN0ZGVyciA9IGNhcGZkLnJlYWRvdXRlcnIoKQorICAgICAg ICBhc3NlcnQgZXhwZWN0ZWQgaW4gc3RkZXJyCisKKworZGVmIHRlc3Rfb2F1dGhfcmVxdWlyZXNf Y2xpZW50X2lkKGFjY2VwdCwgb3BlbmlkX3Byb3ZpZGVyKToKKyAgICBzb2NrLCBjbGllbnQgPSBh Y2NlcHQoCisgICAgICAgIG9hdXRoX2lzc3Vlcj1vcGVuaWRfcHJvdmlkZXIuaXNzdWVyLAorICAg ICAgICAjIERvIG5vdCBzZXQgYSBjbGllbnQgSUQ7IHRoaXMgc2hvdWxkIGNhdXNlIGEgY2xpZW50 IGVycm9yIGFmdGVyIHRoZQorICAgICAgICAjIHNlcnZlciBhc2tzIGZvciBPQVVUSEJFQVJFUiBh bmQgdGhlIGNsaWVudCB0cmllcyB0byBjb250YWN0IHRoZQorICAgICAgICAjIGlzc3Vlci4KKyAg ICApCisKKyAgICB3aXRoIHNvY2s6CisgICAgICAgIHdpdGggcHEzLndyYXAoc29jaywgZGVidWdf c3RyZWFtPXN5cy5zdGRvdXQpIGFzIGNvbm46CisgICAgICAgICAgICAjIEluaXRpYXRlIGEgaGFu ZHNoYWtlLgorICAgICAgICAgICAgc3RhcnR1cCA9IHBxMy5yZWN2MShjb25uLCBjbHM9cHEzLlN0 YXJ0dXApCisgICAgICAgICAgICBhc3NlcnQgc3RhcnR1cC5wcm90byA9PSBwcTMucHJvdG9jb2wo MywgMCkKKworICAgICAgICAgICAgcHEzLnNlbmQoCisgICAgICAgICAgICAgICAgY29ubiwKKyAg ICAgICAgICAgICAgICBwcTMudHlwZXMuQXV0aG5SZXF1ZXN0LAorICAgICAgICAgICAgICAgIHR5 cGU9cHEzLmF1dGhuLlNBU0wsCisgICAgICAgICAgICAgICAgYm9keT1bYiJPQVVUSEJFQVJFUiIs IGIiIl0sCisgICAgICAgICAgICApCisKKyAgICAgICAgICAgICMgVGhlIGNsaWVudCBzaG91bGQg ZGlzY29ubmVjdCBhdCB0aGlzIHBvaW50LgorICAgICAgICAgICAgYXNzZXJ0IG5vdCBjb25uLnJl YWQoKQorCisgICAgZXhwZWN0ZWRfZXJyb3IgPSAibm8gb2F1dGhfY2xpZW50X2lkIGlzIHNldCIK KyAgICB3aXRoIHB5dGVzdC5yYWlzZXMocHN5Y29wZzIuT3BlcmF0aW9uYWxFcnJvciwgbWF0Y2g9 ZXhwZWN0ZWRfZXJyb3IpOgorICAgICAgICBjbGllbnQuY2hlY2tfY29tcGxldGVkKCkKKworCitA cHl0ZXN0Lm1hcmsuc2xvdworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJlcnJvcl9jb2RlIiwg WyJhdXRob3JpemF0aW9uX3BlbmRpbmciLCAic2xvd19kb3duIl0pCitAcHl0ZXN0Lm1hcmsucGFy YW1ldHJpemUoInJldHJpZXMiLCBbMSwgMl0pCitkZWYgdGVzdF9vYXV0aF9yZXRyeV9pbnRlcnZh bChhY2NlcHQsIG9wZW5pZF9wcm92aWRlciwgcmV0cmllcywgZXJyb3JfY29kZSk6CisgICAgc29j aywgY2xpZW50ID0gYWNjZXB0KAorICAgICAgICBvYXV0aF9pc3N1ZXI9b3BlbmlkX3Byb3ZpZGVy Lmlzc3VlciwKKyAgICAgICAgb2F1dGhfY2xpZW50X2lkPSJzb21lLWlkIiwKKyAgICApCisKKyAg ICBleHBlY3RlZF9yZXRyeV9pbnRlcnZhbCA9IDEKKyAgICBhY2Nlc3NfdG9rZW4gPSBzZWNyZXRz LnRva2VuX3VybHNhZmUoKQorCisgICAgIyBTZXQgdXAgb3VyIHByb3ZpZGVyIGNhbGxiYWNrcy4K KyAgICAjIE5PVEUgdGhhdCB0aGVzZSBjYWxsYmFja3Mgd2lsbCBiZSBjYWxsZWQgb24gYSBiYWNr Z3JvdW5kIHRocmVhZC4gRG9uJ3QgZG8KKyAgICAjIGFueSB1bnByb3RlY3RlZCBzdGF0ZSBtdXRh dGlvbiBoZXJlLgorCisgICAgZGVmIGF1dGhvcml6YXRpb25fZW5kcG9pbnQoaGVhZGVycywgcGFy YW1zKToKKyAgICAgICAgcmVzcCA9IHsKKyAgICAgICAgICAgICJkZXZpY2VfY29kZSI6ICJteS1k ZXZpY2UtY29kZSIsCisgICAgICAgICAgICAidXNlcl9jb2RlIjogIm15LXVzZXItY29kZSIsCisg ICAgICAgICAgICAiaW50ZXJ2YWwiOiBleHBlY3RlZF9yZXRyeV9pbnRlcnZhbCwKKyAgICAgICAg ICAgICJ2ZXJpZmljYXRpb25fdXJpIjogImh0dHBzOi8vZXhhbXBsZS5jb20iLAorICAgICAgICAg ICAgImV4cGlyZXNfaW4iOiA1LAorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIDIwMCwgcmVz cAorCisgICAgb3BlbmlkX3Byb3ZpZGVyLnJlZ2lzdGVyX2VuZHBvaW50KAorICAgICAgICAiZGV2 aWNlX2F1dGhvcml6YXRpb25fZW5kcG9pbnQiLCAiUE9TVCIsICIvZGV2aWNlIiwgYXV0aG9yaXph dGlvbl9lbmRwb2ludAorICAgICkKKworICAgIGF0dGVtcHRzID0gMAorICAgIGxhc3RfcmV0cnkg PSBOb25lCisgICAgcmV0cnlfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKworICAgIGRlZiB0b2tl bl9lbmRwb2ludChoZWFkZXJzLCBwYXJhbXMpOgorICAgICAgICBub3cgPSB0aW1lLm1vbm90b25p YygpCisKKyAgICAgICAgd2l0aCByZXRyeV9sb2NrOgorICAgICAgICAgICAgbm9ubG9jYWwgYXR0 ZW1wdHMsIGxhc3RfcmV0cnksIGV4cGVjdGVkX3JldHJ5X2ludGVydmFsCisKKyAgICAgICAgICAg ICMgTWFrZSBzdXJlIHRoZSByZXRyeSBpbnRlcnZhbCBpcyBiZWluZyByZXNwZWN0ZWQgYnkgdGhl IGNsaWVudC4KKyAgICAgICAgICAgIGlmIGxhc3RfcmV0cnkgaXMgbm90IE5vbmU6CisgICAgICAg ICAgICAgICAgaW50ZXJ2YWwgPSBub3cgLSBsYXN0X3JldHJ5CisgICAgICAgICAgICAgICAgYXNz ZXJ0IGludGVydmFsID49IGV4cGVjdGVkX3JldHJ5X2ludGVydmFsCisKKyAgICAgICAgICAgIGxh c3RfcmV0cnkgPSBub3cKKworICAgICAgICAgICAgIyBJZiB0aGUgdGVzdCB3YW50cyB0byBmb3Jj ZSB0aGUgY2xpZW50IHRvIHJldHJ5LCByZXR1cm4gdGhlIGRlc2lyZWQKKyAgICAgICAgICAgICMg ZXJyb3IgcmVzcG9uc2UgYW5kIGRlY3JlbWVudCB0aGUgcmV0cnkgY291bnQuCisgICAgICAgICAg ICBpZiBhdHRlbXB0cyA8IHJldHJpZXM6CisgICAgICAgICAgICAgICAgYXR0ZW1wdHMgKz0gMQor CisgICAgICAgICAgICAgICAgIyBBIHNsb3dfZG93biBjb2RlIHJlcXVpcmVzIHRoZSBjbGllbnQg dG8gYWRkaXRpb25hbGx5IGluY3JlYXNlCisgICAgICAgICAgICAgICAgIyBpdHMgaW50ZXJ2YWwg YnkgZml2ZSBzZWNvbmRzLgorICAgICAgICAgICAgICAgIGlmIGVycm9yX2NvZGUgPT0gInNsb3df ZG93biI6CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3JldHJ5X2ludGVydmFsICs9IDUK KworICAgICAgICAgICAgICAgIHJldHVybiA0MDAsIHsiZXJyb3IiOiBlcnJvcl9jb2RlfQorCisg ICAgICAgICMgU3VjY2Vzc2Z1bGx5IGZpbmlzaCB0aGUgcmVxdWVzdCBieSBzZW5kaW5nIHRoZSBh Y2Nlc3MgYmVhcmVyIHRva2VuLgorICAgICAgICByZXNwID0geworICAgICAgICAgICAgImFjY2Vz c190b2tlbiI6IGFjY2Vzc190b2tlbiwKKyAgICAgICAgICAgICJ0b2tlbl90eXBlIjogImJlYXJl ciIsCisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gMjAwLCByZXNwCisKKyAgICBvcGVuaWRf cHJvdmlkZXIucmVnaXN0ZXJfZW5kcG9pbnQoCisgICAgICAgICJ0b2tlbl9lbmRwb2ludCIsICJQ T1NUIiwgIi90b2tlbiIsIHRva2VuX2VuZHBvaW50CisgICAgKQorCisgICAgd2l0aCBzb2NrOgor ICAgICAgICB3aXRoIHBxMy53cmFwKHNvY2ssIGRlYnVnX3N0cmVhbT1zeXMuc3Rkb3V0KSBhcyBj b25uOgorICAgICAgICAgICAgIyBJbml0aWF0ZSBhIGhhbmRzaGFrZSwgd2hpY2ggc2hvdWxkIHJl c3VsdCBpbiB0aGUgYWJvdmUgZW5kcG9pbnRzCisgICAgICAgICAgICAjIGJlaW5nIGNhbGxlZC4K KyAgICAgICAgICAgIGluaXRpYWwgPSBzdGFydF9vYXV0aF9oYW5kc2hha2UoY29ubikKKworICAg ICAgICAgICAgIyBWYWxpZGF0ZSBhbmQgYWNjZXB0IHRoZSB0b2tlbi4KKyAgICAgICAgICAgIGF1 dGggPSBnZXRfYXV0aF92YWx1ZShpbml0aWFsKQorICAgICAgICAgICAgYXNzZXJ0IGF1dGggPT0g ZiJCZWFyZXIge2FjY2Vzc190b2tlbn0iLmVuY29kZSgiYXNjaWkiKQorCisgICAgICAgICAgICBw cTMuc2VuZChjb25uLCBwcTMudHlwZXMuQXV0aG5SZXF1ZXN0LCB0eXBlPXBxMy5hdXRobi5TQVNM RmluYWwpCisgICAgICAgICAgICBmaW5pc2hfaGFuZHNoYWtlKGNvbm4pCisKKworQHB5dGVzdC5t YXJrLnBhcmFtZXRyaXplKAorICAgICJmYWlsdXJlX21vZGUsIGVycm9yX3BhdHRlcm4iLAorICAg IFsKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg ICJlcnJvciI6ICJpbnZhbGlkX2NsaWVudCIsCisgICAgICAgICAgICAgICAgImVycm9yX2Rlc2Ny aXB0aW9uIjogImNsaWVudCBhdXRoZW50aWNhdGlvbiBmYWlsZWQiLAorICAgICAgICAgICAgfSwK KyAgICAgICAgICAgIHIiY2xpZW50IGF1dGhlbnRpY2F0aW9uIGZhaWxlZCBcKGludmFsaWRfY2xp ZW50XCkiLAorICAgICAgICAgICAgaWQ9ImF1dGhlbnRpY2F0aW9uIGZhaWx1cmUgd2l0aCBkZXNj cmlwdGlvbiIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAg IHsiZXJyb3IiOiAiaW52YWxpZF9yZXF1ZXN0In0sCisgICAgICAgICAgICByIlwoaW52YWxpZF9y ZXF1ZXN0XCkiLAorICAgICAgICAgICAgaWQ9ImludmFsaWQgcmVxdWVzdCB3aXRob3V0IGRlc2Ny aXB0aW9uIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAg e30sCisgICAgICAgICAgICByImZhaWxlZCB0byBvYnRhaW4gZGV2aWNlIGF1dGhvcml6YXRpb24i LAorICAgICAgICAgICAgaWQ9ImJyb2tlbiBlcnJvciByZXNwb25zZSIsCisgICAgICAgICksCisg ICAgXSwKKykKK2RlZiB0ZXN0X29hdXRoX2RldmljZV9hdXRob3JpemF0aW9uX2ZhaWx1cmVzKAor ICAgIGFjY2VwdCwgb3BlbmlkX3Byb3ZpZGVyLCBmYWlsdXJlX21vZGUsIGVycm9yX3BhdHRlcm4K Kyk6CisgICAgY2xpZW50X2lkID0gc2VjcmV0cy50b2tlbl9oZXgoKQorCisgICAgc29jaywgY2xp ZW50ID0gYWNjZXB0KAorICAgICAgICBvYXV0aF9pc3N1ZXI9b3BlbmlkX3Byb3ZpZGVyLmlzc3Vl ciwKKyAgICAgICAgb2F1dGhfY2xpZW50X2lkPWNsaWVudF9pZCwKKyAgICApCisKKyAgICAjIFNl dCB1cCBvdXIgcHJvdmlkZXIgY2FsbGJhY2tzLgorICAgICMgTk9URSB0aGF0IHRoZXNlIGNhbGxi YWNrcyB3aWxsIGJlIGNhbGxlZCBvbiBhIGJhY2tncm91bmQgdGhyZWFkLiBEb24ndCBkbworICAg ICMgYW55IHVucHJvdGVjdGVkIHN0YXRlIG11dGF0aW9uIGhlcmUuCisKKyAgICBkZWYgYXV0aG9y aXphdGlvbl9lbmRwb2ludChoZWFkZXJzLCBwYXJhbXMpOgorICAgICAgICByZXR1cm4gNDAwLCBm YWlsdXJlX21vZGUKKworICAgIG9wZW5pZF9wcm92aWRlci5yZWdpc3Rlcl9lbmRwb2ludCgKKyAg ICAgICAgImRldmljZV9hdXRob3JpemF0aW9uX2VuZHBvaW50IiwgIlBPU1QiLCAiL2RldmljZSIs IGF1dGhvcml6YXRpb25fZW5kcG9pbnQKKyAgICApCisKKyAgICBkZWYgdG9rZW5fZW5kcG9pbnQo aGVhZGVycywgcGFyYW1zKToKKyAgICAgICAgYXNzZXJ0IEZhbHNlLCAidG9rZW4gZW5kcG9pbnQg d2FzIGludm9rZWQgdW5leHBlY3RlZGx5IgorCisgICAgb3BlbmlkX3Byb3ZpZGVyLnJlZ2lzdGVy X2VuZHBvaW50KAorICAgICAgICAidG9rZW5fZW5kcG9pbnQiLCAiUE9TVCIsICIvdG9rZW4iLCB0 b2tlbl9lbmRwb2ludAorICAgICkKKworICAgIHdpdGggc29jazoKKyAgICAgICAgd2l0aCBwcTMu d3JhcChzb2NrLCBkZWJ1Z19zdHJlYW09c3lzLnN0ZG91dCkgYXMgY29ubjoKKyAgICAgICAgICAg ICMgSW5pdGlhdGUgYSBoYW5kc2hha2UsIHdoaWNoIHNob3VsZCByZXN1bHQgaW4gdGhlIGFib3Zl IGVuZHBvaW50cworICAgICAgICAgICAgIyBiZWluZyBjYWxsZWQuCisgICAgICAgICAgICBzdGFy dHVwID0gcHEzLnJlY3YxKGNvbm4sIGNscz1wcTMuU3RhcnR1cCkKKyAgICAgICAgICAgIGFzc2Vy dCBzdGFydHVwLnByb3RvID09IHBxMy5wcm90b2NvbCgzLCAwKQorCisgICAgICAgICAgICBwcTMu c2VuZCgKKyAgICAgICAgICAgICAgICBjb25uLAorICAgICAgICAgICAgICAgIHBxMy50eXBlcy5B dXRoblJlcXVlc3QsCisgICAgICAgICAgICAgICAgdHlwZT1wcTMuYXV0aG4uU0FTTCwKKyAgICAg ICAgICAgICAgICBib2R5PVtiIk9BVVRIQkVBUkVSIiwgYiIiXSwKKyAgICAgICAgICAgICkKKwor ICAgICAgICAgICAgIyBUaGUgY2xpZW50IHNob3VsZCBub3QgY29udGludWUgdGhlIGNvbm5lY3Rp b24gZHVlIHRvIHRoZSBoYXJkY29kZWQKKyAgICAgICAgICAgICMgcHJvdmlkZXIgZmFpbHVyZTsg d2UgZGlzY29ubmVjdCBoZXJlLgorCisgICAgIyBOb3cgbWFrZSBzdXJlIHRoZSBjbGllbnQgY29y cmVjdGx5IGZhaWxlZC4KKyAgICB3aXRoIHB5dGVzdC5yYWlzZXMocHN5Y29wZzIuT3BlcmF0aW9u YWxFcnJvciwgbWF0Y2g9ZXJyb3JfcGF0dGVybik6CisgICAgICAgIGNsaWVudC5jaGVja19jb21w bGV0ZWQoKQorCisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgKKyAgICAiZmFpbHVyZV9tb2Rl LCBlcnJvcl9wYXR0ZXJuIiwKKyAgICBbCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICAiZXJyb3IiOiAiZXhwaXJlZF90b2tlbiIsCisgICAgICAg ICAgICAgICAgImVycm9yX2Rlc2NyaXB0aW9uIjogInRoZSBkZXZpY2UgY29kZSBoYXMgZXhwaXJl ZCIsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgciJ0aGUgZGV2aWNlIGNvZGUgaGFzIGV4 cGlyZWQgXChleHBpcmVkX3Rva2VuXCkiLAorICAgICAgICAgICAgaWQ9ImV4cGlyZWQgdG9rZW4g d2l0aCBkZXNjcmlwdGlvbiIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAg ICAgICAgICAgIHsiZXJyb3IiOiAiYWNjZXNzX2RlbmllZCJ9LAorICAgICAgICAgICAgciJcKGFj Y2Vzc19kZW5pZWRcKSIsCisgICAgICAgICAgICBpZD0iYWNjZXNzIGRlbmllZCB3aXRob3V0IGRl c2NyaXB0aW9uIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAg ICAge30sCisgICAgICAgICAgICByIk9BdXRoIHRva2VuIHJldHJpZXZhbCBmYWlsZWQiLAorICAg ICAgICAgICAgaWQ9ImJyb2tlbiBlcnJvciByZXNwb25zZSIsCisgICAgICAgICksCisgICAgXSwK KykKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgicmV0cmllcyIsIFswLCAxXSkKK2RlZiB0ZXN0 X29hdXRoX3Rva2VuX2ZhaWx1cmVzKAorICAgIGFjY2VwdCwgb3BlbmlkX3Byb3ZpZGVyLCByZXRy aWVzLCBmYWlsdXJlX21vZGUsIGVycm9yX3BhdHRlcm4KKyk6CisgICAgY2xpZW50X2lkID0gc2Vj cmV0cy50b2tlbl9oZXgoKQorCisgICAgc29jaywgY2xpZW50ID0gYWNjZXB0KAorICAgICAgICBv YXV0aF9pc3N1ZXI9b3BlbmlkX3Byb3ZpZGVyLmlzc3VlciwKKyAgICAgICAgb2F1dGhfY2xpZW50 X2lkPWNsaWVudF9pZCwKKyAgICApCisKKyAgICBkZXZpY2VfY29kZSA9IHNlY3JldHMudG9rZW5f aGV4KCkKKyAgICB1c2VyX2NvZGUgPSBmIntzZWNyZXRzLnRva2VuX2hleCgyKX0te3NlY3JldHMu dG9rZW5faGV4KDIpfSIKKworICAgICMgU2V0IHVwIG91ciBwcm92aWRlciBjYWxsYmFja3MuCisg ICAgIyBOT1RFIHRoYXQgdGhlc2UgY2FsbGJhY2tzIHdpbGwgYmUgY2FsbGVkIG9uIGEgYmFja2dy b3VuZCB0aHJlYWQuIERvbid0IGRvCisgICAgIyBhbnkgdW5wcm90ZWN0ZWQgc3RhdGUgbXV0YXRp b24gaGVyZS4KKworICAgIGRlZiBhdXRob3JpemF0aW9uX2VuZHBvaW50KGhlYWRlcnMsIHBhcmFt cyk6CisgICAgICAgIGFzc2VydCBwYXJhbXNbImNsaWVudF9pZCJdID09IFtjbGllbnRfaWRdCisK KyAgICAgICAgcmVzcCA9IHsKKyAgICAgICAgICAgICJkZXZpY2VfY29kZSI6IGRldmljZV9jb2Rl LAorICAgICAgICAgICAgInVzZXJfY29kZSI6IHVzZXJfY29kZSwKKyAgICAgICAgICAgICJpbnRl cnZhbCI6IDAsCisgICAgICAgICAgICAidmVyaWZpY2F0aW9uX3VyaSI6ICJodHRwczovL2V4YW1w bGUuY29tL2RldmljZSIsCisgICAgICAgICAgICAiZXhwaXJlc19pbiI6IDUsCisgICAgICAgIH0K KworICAgICAgICByZXR1cm4gMjAwLCByZXNwCisKKyAgICBvcGVuaWRfcHJvdmlkZXIucmVnaXN0 ZXJfZW5kcG9pbnQoCisgICAgICAgICJkZXZpY2VfYXV0aG9yaXphdGlvbl9lbmRwb2ludCIsICJQ T1NUIiwgIi9kZXZpY2UiLCBhdXRob3JpemF0aW9uX2VuZHBvaW50CisgICAgKQorCisgICAgcmV0 cnlfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKworICAgIGRlZiB0b2tlbl9lbmRwb2ludChoZWFk ZXJzLCBwYXJhbXMpOgorICAgICAgICB3aXRoIHJldHJ5X2xvY2s6CisgICAgICAgICAgICBub25s b2NhbCByZXRyaWVzCisKKyAgICAgICAgICAgICMgSWYgdGhlIHRlc3Qgd2FudHMgdG8gZm9yY2Ug dGhlIGNsaWVudCB0byByZXRyeSwgcmV0dXJuIGFuCisgICAgICAgICAgICAjIGF1dGhvcml6YXRp b25fcGVuZGluZyByZXNwb25zZSBhbmQgZGVjcmVtZW50IHRoZSByZXRyeSBjb3VudC4KKyAgICAg ICAgICAgIGlmIHJldHJpZXMgPiAwOgorICAgICAgICAgICAgICAgIHJldHJpZXMgLT0gMQorICAg ICAgICAgICAgICAgIHJldHVybiA0MDAsIHsiZXJyb3IiOiAiYXV0aG9yaXphdGlvbl9wZW5kaW5n In0KKworICAgICAgICByZXR1cm4gNDAwLCBmYWlsdXJlX21vZGUKKworICAgIG9wZW5pZF9wcm92 aWRlci5yZWdpc3Rlcl9lbmRwb2ludCgKKyAgICAgICAgInRva2VuX2VuZHBvaW50IiwgIlBPU1Qi LCAiL3Rva2VuIiwgdG9rZW5fZW5kcG9pbnQKKyAgICApCisKKyAgICB3aXRoIHNvY2s6CisgICAg ICAgIHdpdGggcHEzLndyYXAoc29jaywgZGVidWdfc3RyZWFtPXN5cy5zdGRvdXQpIGFzIGNvbm46 CisgICAgICAgICAgICAjIEluaXRpYXRlIGEgaGFuZHNoYWtlLCB3aGljaCBzaG91bGQgcmVzdWx0 IGluIHRoZSBhYm92ZSBlbmRwb2ludHMKKyAgICAgICAgICAgICMgYmVpbmcgY2FsbGVkLgorICAg ICAgICAgICAgc3RhcnR1cCA9IHBxMy5yZWN2MShjb25uLCBjbHM9cHEzLlN0YXJ0dXApCisgICAg ICAgICAgICBhc3NlcnQgc3RhcnR1cC5wcm90byA9PSBwcTMucHJvdG9jb2woMywgMCkKKworICAg ICAgICAgICAgcHEzLnNlbmQoCisgICAgICAgICAgICAgICAgY29ubiwKKyAgICAgICAgICAgICAg ICBwcTMudHlwZXMuQXV0aG5SZXF1ZXN0LAorICAgICAgICAgICAgICAgIHR5cGU9cHEzLmF1dGhu LlNBU0wsCisgICAgICAgICAgICAgICAgYm9keT1bYiJPQVVUSEJFQVJFUiIsIGIiIl0sCisgICAg ICAgICAgICApCisKKyAgICAgICAgICAgICMgVGhlIGNsaWVudCBzaG91bGQgbm90IGNvbnRpbnVl IHRoZSBjb25uZWN0aW9uIGR1ZSB0byB0aGUgaGFyZGNvZGVkCisgICAgICAgICAgICAjIHByb3Zp ZGVyIGZhaWx1cmU7IHdlIGRpc2Nvbm5lY3QgaGVyZS4KKworICAgICMgTm93IG1ha2Ugc3VyZSB0 aGUgY2xpZW50IGNvcnJlY3RseSBmYWlsZWQuCisgICAgd2l0aCBweXRlc3QucmFpc2VzKHBzeWNv cGcyLk9wZXJhdGlvbmFsRXJyb3IsIG1hdGNoPWVycm9yX3BhdHRlcm4pOgorICAgICAgICBjbGll bnQuY2hlY2tfY29tcGxldGVkKCkKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoInNjb3Bl IiwgW05vbmUsICJvcGVuaWQgZW1haWwiXSkKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgKKyAg ICAiYmFzZV9yZXNwb25zZSIsCisgICAgWworICAgICAgICB7InN0YXR1cyI6ICJpbnZhbGlkX3Rv a2VuIn0sCisgICAgICAgIHsiZXh0cmFfb2JqZWN0IjogeyJrZXkiOiAidmFsdWUifSwgInN0YXR1 cyI6ICJpbnZhbGlkX3Rva2VuIn0sCisgICAgICAgIHsiZXh0cmFfb2JqZWN0IjogeyJzdGF0dXMi OiAxfSwgInN0YXR1cyI6ICJpbnZhbGlkX3Rva2VuIn0sCisgICAgXSwKKykKK2RlZiB0ZXN0X29h dXRoX2Rpc2NvdmVyeShhY2NlcHQsIG9wZW5pZF9wcm92aWRlciwgYmFzZV9yZXNwb25zZSwgc2Nv cGUpOgorICAgIHNvY2ssIGNsaWVudCA9IGFjY2VwdChvYXV0aF9jbGllbnRfaWQ9c2VjcmV0cy50 b2tlbl9oZXgoKSkKKworICAgIGRldmljZV9jb2RlID0gc2VjcmV0cy50b2tlbl9oZXgoKQorICAg IHVzZXJfY29kZSA9IGYie3NlY3JldHMudG9rZW5faGV4KDIpfS17c2VjcmV0cy50b2tlbl9oZXgo Mil9IgorICAgIHZlcmlmaWNhdGlvbl91cmwgPSAiaHR0cHM6Ly9leGFtcGxlLmNvbS9kZXZpY2Ui CisKKyAgICBhY2Nlc3NfdG9rZW4gPSBzZWNyZXRzLnRva2VuX3VybHNhZmUoKQorCisgICAgIyBT ZXQgdXAgb3VyIHByb3ZpZGVyIGNhbGxiYWNrcy4KKyAgICAjIE5PVEUgdGhhdCB0aGVzZSBjYWxs YmFja3Mgd2lsbCBiZSBjYWxsZWQgb24gYSBiYWNrZ3JvdW5kIHRocmVhZC4gRG9uJ3QgZG8KKyAg ICAjIGFueSB1bnByb3RlY3RlZCBzdGF0ZSBtdXRhdGlvbiBoZXJlLgorCisgICAgZGVmIGF1dGhv cml6YXRpb25fZW5kcG9pbnQoaGVhZGVycywgcGFyYW1zKToKKyAgICAgICAgaWYgc2NvcGU6Cisg ICAgICAgICAgICBhc3NlcnQgcGFyYW1zWyJzY29wZSJdID09IFtzY29wZV0KKyAgICAgICAgZWxz ZToKKyAgICAgICAgICAgIGFzc2VydCAic2NvcGUiIG5vdCBpbiBwYXJhbXMKKworICAgICAgICBy ZXNwID0geworICAgICAgICAgICAgImRldmljZV9jb2RlIjogZGV2aWNlX2NvZGUsCisgICAgICAg ICAgICAidXNlcl9jb2RlIjogdXNlcl9jb2RlLAorICAgICAgICAgICAgImludGVydmFsIjogMCwK KyAgICAgICAgICAgICJ2ZXJpZmljYXRpb25fdXJpIjogdmVyaWZpY2F0aW9uX3VybCwKKyAgICAg ICAgICAgICJleHBpcmVzX2luIjogNSwKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAyMDAs IHJlc3AKKworICAgIG9wZW5pZF9wcm92aWRlci5yZWdpc3Rlcl9lbmRwb2ludCgKKyAgICAgICAg ImRldmljZV9hdXRob3JpemF0aW9uX2VuZHBvaW50IiwgIlBPU1QiLCAiL2RldmljZSIsIGF1dGhv cml6YXRpb25fZW5kcG9pbnQKKyAgICApCisKKyAgICBkZWYgdG9rZW5fZW5kcG9pbnQoaGVhZGVy cywgcGFyYW1zKToKKyAgICAgICAgYXNzZXJ0IHBhcmFtc1siZ3JhbnRfdHlwZSJdID09IFsidXJu OmlldGY6cGFyYW1zOm9hdXRoOmdyYW50LXR5cGU6ZGV2aWNlX2NvZGUiXQorICAgICAgICBhc3Nl cnQgcGFyYW1zWyJkZXZpY2VfY29kZSJdID09IFtkZXZpY2VfY29kZV0KKworICAgICAgICAjIFN1 Y2Nlc3NmdWxseSBmaW5pc2ggdGhlIHJlcXVlc3QgYnkgc2VuZGluZyB0aGUgYWNjZXNzIGJlYXJl ciB0b2tlbi4KKyAgICAgICAgcmVzcCA9IHsKKyAgICAgICAgICAgICJhY2Nlc3NfdG9rZW4iOiBh Y2Nlc3NfdG9rZW4sCisgICAgICAgICAgICAidG9rZW5fdHlwZSI6ICJiZWFyZXIiLAorICAgICAg ICB9CisKKyAgICAgICAgcmV0dXJuIDIwMCwgcmVzcAorCisgICAgb3BlbmlkX3Byb3ZpZGVyLnJl Z2lzdGVyX2VuZHBvaW50KAorICAgICAgICAidG9rZW5fZW5kcG9pbnQiLCAiUE9TVCIsICIvdG9r ZW4iLCB0b2tlbl9lbmRwb2ludAorICAgICkKKworICAgIHdpdGggc29jazoKKyAgICAgICAgd2l0 aCBwcTMud3JhcChzb2NrLCBkZWJ1Z19zdHJlYW09c3lzLnN0ZG91dCkgYXMgY29ubjoKKyAgICAg ICAgICAgIGluaXRpYWwgPSBzdGFydF9vYXV0aF9oYW5kc2hha2UoY29ubikKKworICAgICAgICAg ICAgIyBGb3IgZGlzY292ZXJ5LCB0aGUgY2xpZW50IHNob3VsZCBzZW5kIGFuIGVtcHR5IGF1dGgg aGVhZGVyLiBTZWUKKyAgICAgICAgICAgICMgUkZDIDc2MjgsIFNlYy4gNC4zLgorICAgICAgICAg ICAgYXV0aCA9IGdldF9hdXRoX3ZhbHVlKGluaXRpYWwpCisgICAgICAgICAgICBhc3NlcnQgYXV0 aCA9PSBiIiIKKworICAgICAgICAgICAgIyBXZSB3aWxsIGZhaWwgdGhlIGZpcnN0IFNBU0wgZXhj aGFuZ2UuIEZpcnN0IHJldHVybiBhIGxpbmsgdG8gdGhlCisgICAgICAgICAgICAjIGRpc2NvdmVy eSBkb2N1bWVudCwgcG9pbnRpbmcgdG8gdGhlIHRlc3QgcHJvdmlkZXIgc2VydmVyLgorICAgICAg ICAgICAgcmVzcCA9IGRpY3QoYmFzZV9yZXNwb25zZSkKKworICAgICAgICAgICAgZGlzY292ZXJ5 X3VyaSA9IGYie29wZW5pZF9wcm92aWRlci5pc3N1ZXJ9Ly53ZWxsLWtub3duL29wZW5pZC1jb25m aWd1cmF0aW9uIgorICAgICAgICAgICAgcmVzcFsib3BlbmlkLWNvbmZpZ3VyYXRpb24iXSA9IGRp c2NvdmVyeV91cmkKKworICAgICAgICAgICAgaWYgc2NvcGU6CisgICAgICAgICAgICAgICAgcmVz cFsic2NvcGUiXSA9IHNjb3BlCisKKyAgICAgICAgICAgIHJlc3AgPSBqc29uLmR1bXBzKHJlc3Ap CisKKyAgICAgICAgICAgIHBxMy5zZW5kKAorICAgICAgICAgICAgICAgIGNvbm4sCisgICAgICAg ICAgICAgICAgcHEzLnR5cGVzLkF1dGhuUmVxdWVzdCwKKyAgICAgICAgICAgICAgICB0eXBlPXBx My5hdXRobi5TQVNMQ29udGludWUsCisgICAgICAgICAgICAgICAgYm9keT1yZXNwLmVuY29kZSgi YXNjaWkiKSwKKyAgICAgICAgICAgICkKKworICAgICAgICAgICAgIyBQZXIgUkZDLCB0aGUgY2xp ZW50IGlzIHJlcXVpcmVkIHRvIHNlbmQgYSBkdW1teSBeQSByZXNwb25zZS4KKyAgICAgICAgICAg IHBrdCA9IHBxMy5yZWN2MShjb25uKQorICAgICAgICAgICAgYXNzZXJ0IHBrdC50eXBlID09IHBx My50eXBlcy5QYXNzd29yZE1lc3NhZ2UKKyAgICAgICAgICAgIGFzc2VydCBwa3QucGF5bG9hZCA9 PSBiIlx4MDEiCisKKyAgICAgICAgICAgICMgTm93IGZhaWwgdGhlIFNBU0wgZXhjaGFuZ2UuCisg ICAgICAgICAgICBwcTMuc2VuZCgKKyAgICAgICAgICAgICAgICBjb25uLAorICAgICAgICAgICAg ICAgIHBxMy50eXBlcy5FcnJvclJlc3BvbnNlLAorICAgICAgICAgICAgICAgIGZpZWxkcz1bCisg ICAgICAgICAgICAgICAgICAgIGIiU0ZBVEFMIiwKKyAgICAgICAgICAgICAgICAgICAgYiJDMjgw MDAiLAorICAgICAgICAgICAgICAgICAgICBiIk1kb2Vzbid0IG1hdHRlciIsCisgICAgICAgICAg ICAgICAgICAgIGIiIiwKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgKQorCisgICAg IyBUaGUgY2xpZW50IHdpbGwgY29ubmVjdCB0byB1cyBhIHNlY29uZCB0aW1lLCB1c2luZyB0aGUg cGFyYW1ldGVycyB3ZSBzZW50CisgICAgIyBpdC4KKyAgICBzb2NrLCBfID0gYWNjZXB0KCkKKwor ICAgIHdpdGggc29jazoKKyAgICAgICAgd2l0aCBwcTMud3JhcChzb2NrLCBkZWJ1Z19zdHJlYW09 c3lzLnN0ZG91dCkgYXMgY29ubjoKKyAgICAgICAgICAgIGluaXRpYWwgPSBzdGFydF9vYXV0aF9o YW5kc2hha2UoY29ubikKKworICAgICAgICAgICAgIyBWYWxpZGF0ZSBhbmQgYWNjZXB0IHRoZSB0 b2tlbi4KKyAgICAgICAgICAgIGF1dGggPSBnZXRfYXV0aF92YWx1ZShpbml0aWFsKQorICAgICAg ICAgICAgYXNzZXJ0IGF1dGggPT0gZiJCZWFyZXIge2FjY2Vzc190b2tlbn0iLmVuY29kZSgiYXNj aWkiKQorCisgICAgICAgICAgICBwcTMuc2VuZChjb25uLCBwcTMudHlwZXMuQXV0aG5SZXF1ZXN0 LCB0eXBlPXBxMy5hdXRobi5TQVNMRmluYWwpCisgICAgICAgICAgICBmaW5pc2hfaGFuZHNoYWtl KGNvbm4pCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKAorICAgICJyZXNwb25zZSxleHBl Y3RlZF9lcnJvciIsCisgICAgWworICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICAi YWJjZGUiLAorICAgICAgICAgICAgJ1Rva2VuICJhYmNkZSIgaXMgaW52YWxpZCcsCisgICAgICAg ICAgICBpZD0iYmFkIEpTT046IGludmFsaWQgc3ludGF4IiwKKyAgICAgICAgKSwKKyAgICAgICAg cHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgJyJhYmNkZSInLAorICAgICAgICAgICAgInRvcC1s ZXZlbCBlbGVtZW50IG11c3QgYmUgYW4gb2JqZWN0IiwKKyAgICAgICAgICAgIGlkPSJiYWQgSlNP TjogdG9wLWxldmVsIGVsZW1lbnQgaXMgYSBzdHJpbmciLAorICAgICAgICApLAorICAgICAgICBw eXRlc3QucGFyYW0oCisgICAgICAgICAgICAiW10iLAorICAgICAgICAgICAgInRvcC1sZXZlbCBl bGVtZW50IG11c3QgYmUgYW4gb2JqZWN0IiwKKyAgICAgICAgICAgIGlkPSJiYWQgSlNPTjogdG9w LWxldmVsIGVsZW1lbnQgaXMgYW4gYXJyYXkiLAorICAgICAgICApLAorICAgICAgICBweXRlc3Qu cGFyYW0oCisgICAgICAgICAgICAie30iLAorICAgICAgICAgICAgInNlcnZlciBzZW50IGVycm9y IHJlc3BvbnNlIHdpdGhvdXQgYSBzdGF0dXMiLAorICAgICAgICAgICAgaWQ9ImJhZCBKU09OOiBu byBzdGF0dXMgbWVtYmVyIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAg ICAgICAgICAgJ3sgInN0YXR1cyI6IG51bGwgfScsCisgICAgICAgICAgICAnZmllbGQgInN0YXR1 cyIgbXVzdCBiZSBhIHN0cmluZycsCisgICAgICAgICAgICBpZD0iYmFkIEpTT046IG51bGwgc3Rh dHVzIG1lbWJlciIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAg ICAgICd7ICJzdGF0dXMiOiAwIH0nLAorICAgICAgICAgICAgJ2ZpZWxkICJzdGF0dXMiIG11c3Qg YmUgYSBzdHJpbmcnLAorICAgICAgICAgICAgaWQ9ImJhZCBKU09OOiBpbnQgc3RhdHVzIG1lbWJl ciIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgICd7ICJz dGF0dXMiOiBbICJiYWQiIF0gfScsCisgICAgICAgICAgICAnZmllbGQgInN0YXR1cyIgbXVzdCBi ZSBhIHN0cmluZycsCisgICAgICAgICAgICBpZD0iYmFkIEpTT046IGFycmF5IHN0YXR1cyBtZW1i ZXIiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICAneyAi c3RhdHVzIjogeyAiYmFkIjogImJhZCIgfSB9JywKKyAgICAgICAgICAgICdmaWVsZCAic3RhdHVz IiBtdXN0IGJlIGEgc3RyaW5nJywKKyAgICAgICAgICAgIGlkPSJiYWQgSlNPTjogb2JqZWN0IHN0 YXR1cyBtZW1iZXIiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAg ICAgICAneyAibmVzdGVkIjogeyAic3RhdHVzIjogImJhZCIgfSB9JywKKyAgICAgICAgICAgICJz ZXJ2ZXIgc2VudCBlcnJvciByZXNwb25zZSB3aXRob3V0IGEgc3RhdHVzIiwKKyAgICAgICAgICAg IGlkPSJiYWQgSlNPTjogbmVzdGVkIHN0YXR1cyIsCisgICAgICAgICksCisgICAgICAgIHB5dGVz dC5wYXJhbSgKKyAgICAgICAgICAgICd7ICJzdGF0dXMiOiAiaW52YWxpZF90b2tlbiIgJywKKyAg ICAgICAgICAgICJUaGUgaW5wdXQgc3RyaW5nIGVuZGVkIHVuZXhwZWN0ZWRseSIsCisgICAgICAg ICAgICBpZD0iYmFkIEpTT046IHVudGVybWluYXRlZCBvYmplY3QiLAorICAgICAgICApLAorICAg ICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICAneyAic3RhdHVzIjogImludmFsaWRfdG9r ZW4iIH0geyB9JywKKyAgICAgICAgICAgICdFeHBlY3RlZCBlbmQgb2YgaW5wdXQsIGJ1dCBmb3Vu ZCAieyInLAorICAgICAgICAgICAgaWQ9ImJhZCBKU09OOiB0cmFpbGluZyBkYXRhIiwKKyAgICAg ICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgJ3sgInN0YXR1cyI6ICJp bnZhbGlkX3Rva2VuIiwgIm9wZW5pZC1jb25maWd1cmF0aW9uIjogMSB9JywKKyAgICAgICAgICAg ICdmaWVsZCAib3BlbmlkLWNvbmZpZ3VyYXRpb24iIG11c3QgYmUgYSBzdHJpbmcnLAorICAgICAg ICAgICAgaWQ9ImJhZCBKU09OOiBpbnQgb3BlbmlkLWNvbmZpZ3VyYXRpb24gbWVtYmVyIiwKKyAg ICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgJ3sgInN0YXR1cyI6 ICJpbnZhbGlkX3Rva2VuIiwgIm9wZW5pZC1jb25maWd1cmF0aW9uIjogMSB9JywKKyAgICAgICAg ICAgICdmaWVsZCAib3BlbmlkLWNvbmZpZ3VyYXRpb24iIG11c3QgYmUgYSBzdHJpbmcnLAorICAg ICAgICAgICAgaWQ9ImJhZCBKU09OOiBpbnQgb3BlbmlkLWNvbmZpZ3VyYXRpb24gbWVtYmVyIiwK KyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgJ3sgInN0YXR1 cyI6ICJpbnZhbGlkX3Rva2VuIiwgInNjb3BlIjogMSB9JywKKyAgICAgICAgICAgICdmaWVsZCAi c2NvcGUiIG11c3QgYmUgYSBzdHJpbmcnLAorICAgICAgICAgICAgaWQ9ImJhZCBKU09OOiBpbnQg c2NvcGUgbWVtYmVyIiwKKyAgICAgICAgKSwKKyAgICBdLAorKQorZGVmIHRlc3Rfb2F1dGhfZGlz Y292ZXJ5X3NlcnZlcl9lcnJvcihhY2NlcHQsIHJlc3BvbnNlLCBleHBlY3RlZF9lcnJvcik6Cisg ICAgc29jaywgY2xpZW50ID0gYWNjZXB0KG9hdXRoX2NsaWVudF9pZD1zZWNyZXRzLnRva2VuX2hl eCgpKQorCisgICAgd2l0aCBzb2NrOgorICAgICAgICB3aXRoIHBxMy53cmFwKHNvY2ssIGRlYnVn X3N0cmVhbT1zeXMuc3Rkb3V0KSBhcyBjb25uOgorICAgICAgICAgICAgaW5pdGlhbCA9IHN0YXJ0 X29hdXRoX2hhbmRzaGFrZShjb25uKQorCisgICAgICAgICAgICAjIEZhaWwgdGhlIFNBU0wgZXhj aGFuZ2Ugd2l0aCBhbiBpbnZhbGlkIEpTT04gcmVzcG9uc2UuCisgICAgICAgICAgICBwcTMuc2Vu ZCgKKyAgICAgICAgICAgICAgICBjb25uLAorICAgICAgICAgICAgICAgIHBxMy50eXBlcy5BdXRo blJlcXVlc3QsCisgICAgICAgICAgICAgICAgdHlwZT1wcTMuYXV0aG4uU0FTTENvbnRpbnVlLAor ICAgICAgICAgICAgICAgIGJvZHk9cmVzcG9uc2UuZW5jb2RlKCJ1dGYtOCIpLAorICAgICAgICAg ICAgKQorCisgICAgICAgICAgICAjIFRoZSBjbGllbnQgc2hvdWxkIGRpc2Nvbm5lY3QsIHNvIHRo ZSBzb2NrZXQgaXMgY2xvc2VkIGhlcmUuIChJZgorICAgICAgICAgICAgIyB0aGUgY2xpZW50IGRv ZXNuJ3QgZGlzY29ubmVjdCwgaXQgd2lsbCByZXBvcnQgYSBkaWZmZXJlbnQgZXJyb3IKKyAgICAg ICAgICAgICMgYmVsb3cgYW5kIHRoZSB0ZXN0IHdpbGwgZmFpbC4pCisKKyAgICB3aXRoIHB5dGVz dC5yYWlzZXMocHN5Y29wZzIuT3BlcmF0aW9uYWxFcnJvciwgbWF0Y2g9ZXhwZWN0ZWRfZXJyb3Ip OgorICAgICAgICBjbGllbnQuY2hlY2tfY29tcGxldGVkKCkKKworCitAcHl0ZXN0Lm1hcmsucGFy YW1ldHJpemUoCisgICAgInNhc2xfZXJyLHJlc3BfdHlwZSxyZXNwX3BheWxvYWQsZXhwZWN0ZWRf ZXJyb3IiLAorICAgIFsKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgeyJzdGF0 dXMiOiAiaW52YWxpZF9yZXF1ZXN0In0sCisgICAgICAgICAgICBwcTMudHlwZXMuRXJyb3JSZXNw b25zZSwKKyAgICAgICAgICAgIGRpY3QoCisgICAgICAgICAgICAgICAgZmllbGRzPVtiIlNGQVRB TCIsIGIiQzI4MDAwIiwgYiJNZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZSIsIGIiIl0sCisgICAgICAg ICAgICApLAorICAgICAgICAgICAgImV4cGVjdGVkIGVycm9yIG1lc3NhZ2UiLAorICAgICAgICAg ICAgaWQ9InN0YW5kYXJkIHNlcnZlciBlcnJvcjogaW52YWxpZF9yZXF1ZXN0IiwKKyAgICAgICAg KSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgeyJzdGF0dXMiOiAiaW52YWxp ZF90b2tlbiJ9LAorICAgICAgICAgICAgcHEzLnR5cGVzLkVycm9yUmVzcG9uc2UsCisgICAgICAg ICAgICBkaWN0KAorICAgICAgICAgICAgICAgIGZpZWxkcz1bYiJTRkFUQUwiLCBiIkMyODAwMCIs IGIiTWV4cGVjdGVkIGVycm9yIG1lc3NhZ2UiLCBiIiJdLAorICAgICAgICAgICAgKSwKKyAgICAg ICAgICAgICJleHBlY3RlZCBlcnJvciBtZXNzYWdlIiwKKyAgICAgICAgICAgIGlkPSJzdGFuZGFy ZCBzZXJ2ZXIgZXJyb3I6IGludmFsaWRfdG9rZW4gd2l0aG91dCBkaXNjb3ZlcnkgVVJJIiwKKyAg ICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgeyJzdGF0dXMiOiAi aW52YWxpZF9yZXF1ZXN0In0sCisgICAgICAgICAgICBwcTMudHlwZXMuQXV0aG5SZXF1ZXN0LAor ICAgICAgICAgICAgZGljdCh0eXBlPXBxMy5hdXRobi5TQVNMQ29udGludWUsIGJvZHk9YiIiKSwK KyAgICAgICAgICAgICJzZXJ2ZXIgc2VudCBhZGRpdGlvbmFsIE9BdXRoIGRhdGEiLAorICAgICAg ICAgICAgaWQ9ImJyb2tlbiBzZXJ2ZXI6IGFkZGl0aW9uYWwgY2hhbGxlbmdlIGFmdGVyIGVycm9y IiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgeyJzdGF0 dXMiOiAiaW52YWxpZF9yZXF1ZXN0In0sCisgICAgICAgICAgICBwcTMudHlwZXMuQXV0aG5SZXF1 ZXN0LAorICAgICAgICAgICAgZGljdCh0eXBlPXBxMy5hdXRobi5TQVNMRmluYWwpLAorICAgICAg ICAgICAgInNlcnZlciBzZW50IGFkZGl0aW9uYWwgT0F1dGggZGF0YSIsCisgICAgICAgICAgICBp ZD0iYnJva2VuIHNlcnZlcjogU0FTTCBzdWNjZXNzIGFmdGVyIGVycm9yIiwKKyAgICAgICAgKSwK KyAgICBdLAorKQorZGVmIHRlc3Rfb2F1dGhfc2VydmVyX2Vycm9yKGFjY2VwdCwgc2FzbF9lcnIs IHJlc3BfdHlwZSwgcmVzcF9wYXlsb2FkLCBleHBlY3RlZF9lcnJvcik6CisgICAgc29jaywgY2xp ZW50ID0gYWNjZXB0KCkKKworICAgIHdpdGggc29jazoKKyAgICAgICAgd2l0aCBwcTMud3JhcChz b2NrLCBkZWJ1Z19zdHJlYW09c3lzLnN0ZG91dCkgYXMgY29ubjoKKyAgICAgICAgICAgIHN0YXJ0 X29hdXRoX2hhbmRzaGFrZShjb25uKQorCisgICAgICAgICAgICAjIElnbm9yZSB0aGUgY2xpZW50 IGRhdGEuIFJldHVybiBhbiBlcnJvciAiY2hhbGxlbmdlIi4KKyAgICAgICAgICAgIHJlc3AgPSBq c29uLmR1bXBzKHNhc2xfZXJyKQorICAgICAgICAgICAgcmVzcCA9IHJlc3AuZW5jb2RlKCJ1dGYt OCIpCisKKyAgICAgICAgICAgIHBxMy5zZW5kKAorICAgICAgICAgICAgICAgIGNvbm4sIHBxMy50 eXBlcy5BdXRoblJlcXVlc3QsIHR5cGU9cHEzLmF1dGhuLlNBU0xDb250aW51ZSwgYm9keT1yZXNw CisgICAgICAgICAgICApCisKKyAgICAgICAgICAgICMgUGVyIFJGQywgdGhlIGNsaWVudCBpcyBy ZXF1aXJlZCB0byBzZW5kIGEgZHVtbXkgXkEgcmVzcG9uc2UuCisgICAgICAgICAgICBwa3QgPSBw cTMucmVjdjEoY29ubikKKyAgICAgICAgICAgIGFzc2VydCBwa3QudHlwZSA9PSBwcTMudHlwZXMu UGFzc3dvcmRNZXNzYWdlCisgICAgICAgICAgICBhc3NlcnQgcGt0LnBheWxvYWQgPT0gYiJceDAx IgorCisgICAgICAgICAgICAjIE5vdyBmYWlsIHRoZSBTQVNMIGV4Y2hhbmdlIChpbiBlaXRoZXIg YSB2YWxpZCB3YXksIG9yIGFuIGludmFsaWQKKyAgICAgICAgICAgICMgb25lLCBkZXBlbmRpbmcg b24gdGhlIHRlc3QpLgorICAgICAgICAgICAgcHEzLnNlbmQoY29ubiwgcmVzcF90eXBlLCAqKnJl c3BfcGF5bG9hZCkKKworICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhwc3ljb3BnMi5PcGVyYXRpb25h bEVycm9yLCBtYXRjaD1leHBlY3RlZF9lcnJvcik6CisgICAgICAgIGNsaWVudC5jaGVja19jb21w bGV0ZWQoKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcHl0aG9uL3BxMy5weSBiL3NyYy90ZXN0L3B5 dGhvbi9wcTMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uM2EyMmRh ZDBiNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5dGhvbi9wcTMucHkKQEAgLTAsMCAr MSw3MjcgQEAKKyMKKyMgQ29weXJpZ2h0IDIwMjEgVk13YXJlLCBJbmMuCisjIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBQb3N0Z3JlU1FMCisjCisKK2ltcG9ydCBjb250ZXh0bGliCitpbXBvcnQg Z2V0cGFzcworaW1wb3J0IGlvCitpbXBvcnQgb3MKK2ltcG9ydCBzc2wKK2ltcG9ydCBzeXMKK2lt cG9ydCB0ZXh0d3JhcAorCitmcm9tIGNvbnN0cnVjdCBpbXBvcnQgKgorCitpbXBvcnQgdGxzCisK KworZGVmIHByb3RvY29sKG1ham9yLCBtaW5vcik6CisgICAgIiIiCisgICAgUmV0dXJucyB0aGUg cHJvdG9jb2wgdmVyc2lvbiwgaW4gaW50ZWdlciBmb3JtYXQsIGNvcnJlc3BvbmRpbmcgdG8gdGhl IGdpdmVuCisgICAgbWFqb3IgYW5kIG1pbm9yIHZlcnNpb24gbnVtYmVycy4KKyAgICAiIiIKKyAg ICByZXR1cm4gKG1ham9yIDw8IDE2KSB8IG1pbm9yCisKKworIyBTdGFydHVwCisKK1N0cmluZ0xp c3QgPSBHcmVlZHlSYW5nZShOdWxsVGVybWluYXRlZChHcmVlZHlCeXRlcykpCisKKworY2xhc3Mg S2V5VmFsdWVBZGFwdGVyKEFkYXB0ZXIpOgorICAgICIiIgorICAgIFR1cm5zIGEga2V5LXZhbHVl IHN0b3JlIGludG8gYSBudWxsLXRlcm1pbmF0ZWQgbGlzdCBvZiBudWxsLXRlcm1pbmF0ZWQKKyAg ICBzdHJpbmdzLCBhcyBwcmVzZW50ZWQgb24gdGhlIHdpcmUgaW4gdGhlIHN0YXJ0dXAgcGFja2V0 LgorICAgICIiIgorCisgICAgZGVmIF9lbmNvZGUoc2VsZiwgb2JqLCBjb250ZXh0LCBwYXRoKToK KyAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIGxpc3QpOgorICAgICAgICAgICAgcmV0dXJuIG9i agorCisgICAgICAgIGwgPSBbXQorCisgICAgICAgIGZvciBrLCB2IGluIG9iai5pdGVtcygpOgor ICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrLCBzdHIpOgorICAgICAgICAgICAgICAgIGsgPSBr LmVuY29kZSgidXRmLTgiKQorICAgICAgICAgICAgbC5hcHBlbmQoaykKKworICAgICAgICAgICAg aWYgaXNpbnN0YW5jZSh2LCBzdHIpOgorICAgICAgICAgICAgICAgIHYgPSB2LmVuY29kZSgidXRm LTgiKQorICAgICAgICAgICAgbC5hcHBlbmQodikKKworICAgICAgICBsLmFwcGVuZChiIiIpCisg ICAgICAgIHJldHVybiBsCisKKyAgICBkZWYgX2RlY29kZShzZWxmLCBvYmosIGNvbnRleHQsIHBh dGgpOgorICAgICAgICAjIFRPRE86IHR1cm4gYSBsaXN0IGJhY2sgaW50byBhIGRpY3QKKyAgICAg ICAgcmV0dXJuIG9iagorCisKK0tleVZhbHVlcyA9IEtleVZhbHVlQWRhcHRlcihTdHJpbmdMaXN0 KQorCitfc3RhcnR1cF9wYXlsb2FkID0gU3dpdGNoKAorICAgIHRoaXMucHJvdG8sCisgICAgewor ICAgICAgICBwcm90b2NvbCgzLCAwKTogS2V5VmFsdWVzLAorICAgIH0sCisgICAgZGVmYXVsdD1H cmVlZHlCeXRlcywKKykKKworCitkZWYgX2RlZmF1bHRfcHJvdG9jb2wodGhpcyk6CisgICAgdHJ5 OgorICAgICAgICBpZiBpc2luc3RhbmNlKHRoaXMucGF5bG9hZCwgKGxpc3QsIGRpY3QpKToKKyAg ICAgICAgICAgIHJldHVybiBwcm90b2NvbCgzLCAwKQorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJv cjoKKyAgICAgICAgcGFzcyAgIyBubyBwYXlsb2FkIHBhc3NlZCBkdXJpbmcgYnVpbGQKKworICAg IHJldHVybiAwCisKKworZGVmIF9zdGFydHVwX3BheWxvYWRfbGVuKHRoaXMpOgorICAgICIiIgor ICAgIFRoZSBwYXlsb2FkIGZpZWxkIGhhcyBhIGZpeGVkIHNpemUgYmFzZWQgb24gdGhlIGxlbmd0 aCBvZiB0aGUgcGFja2V0LiBCdXQKKyAgICBpZiB0aGUgY2FsbGVyIGhhc24ndCBzdXBwbGllZCBh biBleHBsaWNpdCBsZW5ndGggYXQgYnVpbGQgdGltZSwgd2UgaGF2ZSB0bworICAgIGJ1aWxkIHRo ZSBwYXlsb2FkIHRvIGZpZ3VyZSBvdXQgaG93IGxvbmcgaXQgaXMsIHdoaWNoIHJlcXVpcmVzIHVz IHRvIGtub3cKKyAgICB0aGUgbGVuZ3RoIGZpcnN0Li4uIFRoaXMgZnVuY3Rpb24gZXhpc3RzIHNv bGVseSB0byBicmVhayB0aGUgY3ljbGUuCisgICAgIiIiCisgICAgYXNzZXJ0IHRoaXMuX2J1aWxk aW5nLCAiX3N0YXJ0dXBfcGF5bG9hZF9sZW4oKSBjYW5ub3QgYmUgY2FsbGVkIGR1cmluZyBwYXJz aW5nIgorCisgICAgdHJ5OgorICAgICAgICBwYXlsb2FkID0gdGhpcy5wYXlsb2FkCisgICAgZXhj ZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICByZXR1cm4gMCAgIyBubyBwYXlsb2FkCisKKyAg ICBpZiBpc2luc3RhbmNlKHBheWxvYWQsIGJ5dGVzKToKKyAgICAgICAgIyBhbHJlYWR5IHNlcmlh bGl6ZWQ7IGp1c3QgdXNlIHRoZSBnaXZlbiBsZW5ndGgKKyAgICAgICAgcmV0dXJuIGxlbihwYXls b2FkKQorCisgICAgdHJ5OgorICAgICAgICBwcm90byA9IHRoaXMucHJvdG8KKyAgICBleGNlcHQg QXR0cmlidXRlRXJyb3I6CisgICAgICAgIHByb3RvID0gX2RlZmF1bHRfcHJvdG9jb2wodGhpcykK KworICAgIGRhdGEgPSBfc3RhcnR1cF9wYXlsb2FkLmJ1aWxkKHBheWxvYWQsIHByb3RvPXByb3Rv KQorICAgIHJldHVybiBsZW4oZGF0YSkKKworCitTdGFydHVwID0gU3RydWN0KAorICAgICJsZW4i IC8gRGVmYXVsdChJbnQzMnNiLCBsYW1iZGEgdGhpczogX3N0YXJ0dXBfcGF5bG9hZF9sZW4odGhp cykgKyA4KSwKKyAgICAicHJvdG8iIC8gRGVmYXVsdChIZXgoSW50MzJzYiksIF9kZWZhdWx0X3By b3RvY29sKSwKKyAgICAicGF5bG9hZCIgLyBGaXhlZFNpemVkKHRoaXMubGVuIC0gOCwgRGVmYXVs dChfc3RhcnR1cF9wYXlsb2FkLCBiIiIpKSwKKykKKworIyBQcTMKKworIyBBZGFwdGVkIGZyb20g Y29uc3RydWN0LmNvcmUuRW51bUludGVnZXJTdHJpbmcKK2NsYXNzIEVudW1OYW1lZEJ5dGU6Cisg ICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbCwgbmFtZSk6CisgICAgICAgIHNlbGYuX3ZhbCA9IHZh bAorICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQorCisgICAgZGVmIF9faW50X18oc2VsZik6Cisg ICAgICAgIHJldHVybiBvcmQoc2VsZi5fdmFsKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6Cisg ICAgICAgIHJldHVybiAiKGVudW0pICVzICVyIiAlIChzZWxmLl9uYW1lLCBzZWxmLl92YWwpCisK KyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiRW51bU5hbWVkQnl0ZSgl cikiICUgc2VsZi5fdmFsCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAg aWYgaXNpbnN0YW5jZShvdGhlciwgRW51bU5hbWVkQnl0ZSk6CisgICAgICAgICAgICBvdGhlciA9 IG90aGVyLl92YWwKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIGJ5dGVzKToKKyAg ICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgICAgIHJldHVybiBzZWxmLl92 YWwgPT0gb3RoZXIKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhh c2goc2VsZi5fdmFsKQorCisKKyMgQWRhcHRlZCBmcm9tIGNvbnN0cnVjdC5jb3JlLkVudW0KK2Ns YXNzIEJ5dGVFbnVtKEFkYXB0ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKm1hcHBpbmcp OgorICAgICAgICBzdXBlcihCeXRlRW51bSwgc2VsZikuX19pbml0X18oQnl0ZSkKKyAgICAgICAg c2VsZi5uYW1lbWFwcGluZyA9IHtrOiBFbnVtTmFtZWRCeXRlKHYsIGspIGZvciBrLCB2IGluIG1h cHBpbmcuaXRlbXMoKX0KKyAgICAgICAgc2VsZi5kZWNtYXBwaW5nID0ge3Y6IEVudW1OYW1lZEJ5 dGUodiwgaykgZm9yIGssIHYgaW4gbWFwcGluZy5pdGVtcygpfQorCisgICAgZGVmIF9fZ2V0YXR0 cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICBpZiBuYW1lIGluIHNlbGYubmFtZW1hcHBpbmc6Cisg ICAgICAgICAgICByZXR1cm4gc2VsZi5kZWNtYXBwaW5nW3NlbGYubmFtZW1hcHBpbmdbbmFtZV1d CisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yCisKKyAgICBkZWYgX2RlY29kZShzZWxmLCBv YmosIGNvbnRleHQsIHBhdGgpOgorICAgICAgICBiID0gYnl0ZXMoW29ial0pCisgICAgICAgIHRy eToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmRlY21hcHBpbmdbYl0KKyAgICAgICAgZXhjZXB0 IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEVudW1OYW1lZEJ5dGUoYiwgIih1bmtub3du KSIpCisKKyAgICBkZWYgX2VuY29kZShzZWxmLCBvYmosIGNvbnRleHQsIHBhdGgpOgorICAgICAg ICBpZiBpc2luc3RhbmNlKG9iaiwgaW50KToKKyAgICAgICAgICAgIHJldHVybiBvYmoKKyAgICAg ICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgYnl0ZXMpOgorICAgICAgICAgICAgcmV0dXJuIG9yZChv YmopCisgICAgICAgIHJldHVybiBpbnQob2JqKQorCisKK3R5cGVzID0gQnl0ZUVudW0oCisgICAg RXJyb3JSZXNwb25zZT1iIkUiLAorICAgIFJlYWR5Rm9yUXVlcnk9YiJaIiwKKyAgICBRdWVyeT1i IlEiLAorICAgIEVtcHR5UXVlcnlSZXNwb25zZT1iIkkiLAorICAgIEF1dGhuUmVxdWVzdD1iIlIi LAorICAgIFBhc3N3b3JkTWVzc2FnZT1iInAiLAorICAgIEJhY2tlbmRLZXlEYXRhPWIiSyIsCisg ICAgQ29tbWFuZENvbXBsZXRlPWIiQyIsCisgICAgUGFyYW1ldGVyU3RhdHVzPWIiUyIsCisgICAg RGF0YVJvdz1iIkQiLAorICAgIFRlcm1pbmF0ZT1iIlgiLAorKQorCisKK2F1dGhuID0gRW51bSgK KyAgICBJbnQzMnViLAorICAgIE9LPTAsCisgICAgU0FTTD0xMCwKKyAgICBTQVNMQ29udGludWU9 MTEsCisgICAgU0FTTEZpbmFsPTEyLAorKQorCisKK19hdXRobl9ib2R5ID0gU3dpdGNoKAorICAg IHRoaXMudHlwZSwKKyAgICB7CisgICAgICAgIGF1dGhuLk9LOiBUZXJtaW5hdGVkLAorICAgICAg ICBhdXRobi5TQVNMOiBTdHJpbmdMaXN0LAorICAgIH0sCisgICAgZGVmYXVsdD1HcmVlZHlCeXRl cywKKykKKworCitkZWYgX2RhdGFfbGVuKHRoaXMpOgorICAgIGFzc2VydCB0aGlzLl9idWlsZGlu ZywgIl9kYXRhX2xlbigpIGNhbm5vdCBiZSBjYWxsZWQgZHVyaW5nIHBhcnNpbmciCisKKyAgICBp ZiBub3QgaGFzYXR0cih0aGlzLCAiZGF0YSIpIG9yIHRoaXMuZGF0YSBpcyBOb25lOgorICAgICAg ICByZXR1cm4gLTEKKworICAgIHJldHVybiBsZW4odGhpcy5kYXRhKQorCisKKyMgVGhlIHByb3Rv Y29sIHJldXNlcyB0aGUgUGFzc3dvcmRNZXNzYWdlIGZvciBzZXZlcmFsIGF1dGhlbnRpY2F0aW9u IHJlc3BvbnNlCisjIHR5cGVzLCBhbmQgdGhlcmUncyBubyBnb29kIHdheSB0byBmaWd1cmUgb3V0 IHdoaWNoIGlzIHdoaWNoIHdpdGhvdXQga2VlcGluZworIyBzdGF0ZSBmb3IgdGhlIGVudGlyZSBz dHJlYW0uIFNvIHRoaXMgaXMgYSBzZXBhcmF0ZSBDb25zdHJ1Y3QgdGhhdCBjYW4gYmUKKyMgZXhw bGljaXRseSBwYXJzZWQvYnVpbHQgYnkgY29kZSB0aGF0IGtub3dzIGl0J3MgbmVlZGVkLgorU0FT TEluaXRpYWxSZXNwb25zZSA9IFN0cnVjdCgKKyAgICAibmFtZSIgLyBOdWxsVGVybWluYXRlZChH cmVlZHlCeXRlcyksCisgICAgImxlbiIgLyBEZWZhdWx0KEludDMyc2IsIGxhbWJkYSB0aGlzOiBf ZGF0YV9sZW4odGhpcykpLAorICAgICJkYXRhIgorICAgIC8gSWZUaGVuRWxzZSgKKyAgICAgICAg IyBBbGxvdyB0ZXN0cyB0byBleHBsaWNpdGx5IHBhc3MgYW4gaW5jb3JyZWN0IGxlbmd0aCBkdXJp bmcgdGVzdGluZywgYnkKKyAgICAgICAgIyBub3QgZW5mb3JjaW5nIGEgRml4ZWRTaXplZCBkdXJp bmcgYnVpbGQuIChUaGUgbGVuIGNhbGN1bGF0aW9uIGFib3ZlCisgICAgICAgICMgZGVmYXVsdHMg dG8gdGhlIGNvcnJlY3Qgc2l6ZS4pCisgICAgICAgIHRoaXMuX2J1aWxkaW5nLAorICAgICAgICBP cHRpb25hbChHcmVlZHlCeXRlcyksCisgICAgICAgIElmKHRoaXMubGVuICE9IC0xLCBEZWZhdWx0 KEZpeGVkU2l6ZWQodGhpcy5sZW4sIEdyZWVkeUJ5dGVzKSwgYiIiKSksCisgICAgKSwKKyAgICBU ZXJtaW5hdGVkLCAgIyBtYWtlIHN1cmUgdGhlIGVudGlyZSByZXNwb25zZSBpcyBjb25zdW1lZAor KQorCisKK19jb2x1bW4gPSBGb2N1c2VkU2VxKAorICAgICJkYXRhIiwKKyAgICAibGVuIiAvIERl ZmF1bHQoSW50MzJzYiwgbGFtYmRhIHRoaXM6IF9kYXRhX2xlbih0aGlzKSksCisgICAgImRhdGEi IC8gSWYodGhpcy5sZW4gIT0gLTEsIEZpeGVkU2l6ZWQodGhpcy5sZW4sIEdyZWVkeUJ5dGVzKSks CispCisKKworX3BheWxvYWRfbWFwID0geworICAgIHR5cGVzLkVycm9yUmVzcG9uc2U6IFN0cnVj dCgiZmllbGRzIiAvIFN0cmluZ0xpc3QpLAorICAgIHR5cGVzLlJlYWR5Rm9yUXVlcnk6IFN0cnVj dCgic3RhdHVzIiAvIEJ5dGVzKDEpKSwKKyAgICB0eXBlcy5RdWVyeTogU3RydWN0KCJxdWVyeSIg LyBOdWxsVGVybWluYXRlZChHcmVlZHlCeXRlcykpLAorICAgIHR5cGVzLkVtcHR5UXVlcnlSZXNw b25zZTogVGVybWluYXRlZCwKKyAgICB0eXBlcy5BdXRoblJlcXVlc3Q6IFN0cnVjdCgidHlwZSIg LyBhdXRobiwgImJvZHkiIC8gRGVmYXVsdChfYXV0aG5fYm9keSwgYiIiKSksCisgICAgdHlwZXMu QmFja2VuZEtleURhdGE6IFN0cnVjdCgicGlkIiAvIEludDMydWIsICJrZXkiIC8gSGV4KEludDMy dWIpKSwKKyAgICB0eXBlcy5Db21tYW5kQ29tcGxldGU6IFN0cnVjdCgidGFnIiAvIE51bGxUZXJt aW5hdGVkKEdyZWVkeUJ5dGVzKSksCisgICAgdHlwZXMuUGFyYW1ldGVyU3RhdHVzOiBTdHJ1Y3Qo CisgICAgICAgICJuYW1lIiAvIE51bGxUZXJtaW5hdGVkKEdyZWVkeUJ5dGVzKSwgInZhbHVlIiAv IE51bGxUZXJtaW5hdGVkKEdyZWVkeUJ5dGVzKQorICAgICksCisgICAgdHlwZXMuRGF0YVJvdzog U3RydWN0KCJjb2x1bW5zIiAvIERlZmF1bHQoUHJlZml4ZWRBcnJheShJbnQxNnNiLCBfY29sdW1u KSwgYiIiKSksCisgICAgdHlwZXMuVGVybWluYXRlOiBUZXJtaW5hdGVkLAorfQorCisKK19wYXls b2FkID0gRm9jdXNlZFNlcSgKKyAgICAiX3BheWxvYWQiLAorICAgICJfcGF5bG9hZCIKKyAgICAv IFN3aXRjaCgKKyAgICAgICAgdGhpcy5fLnR5cGUsCisgICAgICAgIF9wYXlsb2FkX21hcCwKKyAg ICAgICAgZGVmYXVsdD1HcmVlZHlCeXRlcywKKyAgICApLAorICAgIFRlcm1pbmF0ZWQsICAjIG1h a2Ugc3VyZSBldmVyeSBwYXlsb2FkIGNvbnN1bWVzIHRoZSBlbnRpcmUgcGFja2V0CispCisKKwor ZGVmIF9wYXlsb2FkX2xlbih0aGlzKToKKyAgICAiIiIKKyAgICBTZWUgX3N0YXJ0dXBfcGF5bG9h ZF9sZW4oKSBmb3IgYW4gZXhwbGFuYXRpb24uCisgICAgIiIiCisgICAgYXNzZXJ0IHRoaXMuX2J1 aWxkaW5nLCAiX3BheWxvYWRfbGVuKCkgY2Fubm90IGJlIGNhbGxlZCBkdXJpbmcgcGFyc2luZyIK KworICAgIHRyeToKKyAgICAgICAgcGF5bG9hZCA9IHRoaXMucGF5bG9hZAorICAgIGV4Y2VwdCBB dHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcmV0dXJuIDAgICMgbm8gcGF5bG9hZAorCisgICAgaWYg aXNpbnN0YW5jZShwYXlsb2FkLCBieXRlcyk6CisgICAgICAgICMgYWxyZWFkeSBzZXJpYWxpemVk OyBqdXN0IHVzZSB0aGUgZ2l2ZW4gbGVuZ3RoCisgICAgICAgIHJldHVybiBsZW4ocGF5bG9hZCkK KworICAgIGRhdGEgPSBfcGF5bG9hZC5idWlsZChwYXlsb2FkLCB0eXBlPXRoaXMudHlwZSkKKyAg ICByZXR1cm4gbGVuKGRhdGEpCisKKworUHEzID0gU3RydWN0KAorICAgICJ0eXBlIiAvIHR5cGVz LAorICAgICJsZW4iIC8gRGVmYXVsdChJbnQzMnViLCBsYW1iZGEgdGhpczogX3BheWxvYWRfbGVu KHRoaXMpICsgNCksCisgICAgInBheWxvYWQiIC8gRml4ZWRTaXplZCh0aGlzLmxlbiAtIDQsIERl ZmF1bHQoX3BheWxvYWQsIGIiIikpLAorKQorCisKKyMgRW52aXJvbm1lbnQKKworCitkZWYgcGdo b3N0KCk6CisgICAgcmV0dXJuIG9zLmVudmlyb24uZ2V0KCJQR0hPU1QiLCBkZWZhdWx0PSJsb2Nh bGhvc3QiKQorCisKK2RlZiBwZ3BvcnQoKToKKyAgICByZXR1cm4gaW50KG9zLmVudmlyb24uZ2V0 KCJQR1BPUlQiLCBkZWZhdWx0PTU0MzIpKQorCisKK2RlZiBwZ3VzZXIoKToKKyAgICB0cnk6Cisg ICAgICAgIHJldHVybiBvcy5lbnZpcm9uWyJQR1VTRVIiXQorICAgIGV4Y2VwdCBLZXlFcnJvcjoK KyAgICAgICAgcmV0dXJuIGdldHBhc3MuZ2V0dXNlcigpCisKKworZGVmIHBnZGF0YWJhc2UoKToK KyAgICByZXR1cm4gb3MuZW52aXJvbi5nZXQoIlBHREFUQUJBU0UiLCBkZWZhdWx0PSJwb3N0Z3Jl cyIpCisKKworIyBDb25uZWN0aW9ucworCisKK2RlZiBfaGV4ZHVtcF90cmFuc2xhdGlvbl9tYXAo KToKKyAgICAiIiIKKyAgICBGb3IgaGV4ZHVtcHMuIFRyYW5zbGF0ZXMgYW55IHVucHJpbnRhYmxl IG9yIG5vbi1BU0NJSSBieXRlcyBpbnRvICcuJy4KKyAgICAiIiIKKyAgICBpbnB1dCA9IGJ5dGVh cnJheSgpCisKKyAgICBmb3IgaSBpbiByYW5nZSgxMjgpOgorICAgICAgICBjID0gY2hyKGkpCisK KyAgICAgICAgaWYgbm90IGMuaXNwcmludGFibGUoKToKKyAgICAgICAgICAgIGlucHV0ICs9IGJ5 dGVzKFtpXSkKKworICAgIGlucHV0ICs9IGJ5dGVzKHJhbmdlKDEyOCwgMjU2KSkKKworICAgIHJl dHVybiBieXRlcy5tYWtldHJhbnMoaW5wdXQsIGIiLiIgKiBsZW4oaW5wdXQpKQorCisKK2NsYXNz IF9EZWJ1Z1N0cmVhbShvYmplY3QpOgorICAgICIiIgorICAgIFdyYXBzIGEgZmlsZS1saWtlIG9i amVjdCBhbmQgYWRkcyBoZXhkdW1wcyBvZiB0aGUgcmVhZCBhbmQgd3JpdGUgZGF0YS4gQ2FsbAor ICAgIGVuZF9wYWNrZXQoKSBvbiBhIF9EZWJ1Z1N0cmVhbSB0byB3cml0ZSB0aGUgYWNjdW11bGF0 ZWQgaGV4ZHVtcHMgdG8gdGhlCisgICAgb3V0cHV0IHN0cmVhbSwgYWxvbmcgd2l0aCB0aGUgcGFj a2V0IHRoYXQgd2FzIHNlbnQuCisgICAgIiIiCisKKyAgICBfdHJhbnNsYXRpb25fbWFwID0gX2hl eGR1bXBfdHJhbnNsYXRpb25fbWFwKCkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW0s IG91dD1zeXMuc3Rkb3V0KToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZXMgYSBuZXcgX0Rl YnVnU3RyZWFtIHdyYXBwaW5nIHRoZSBnaXZlbiBzdHJlYW0gKHdoaWNoIG11c3QgaGF2ZQorICAg ICAgICBiZWVuIGNyZWF0ZWQgYnkgd3JhcCgpKS4gQWxsIGF0dHJpYnV0ZXMgbm90IHByb3ZpZGVk IGJ5IHRoZSBfRGVidWdTdHJlYW0KKyAgICAgICAgYXJlIGRlbGVnYXRlZCB0byB0aGUgd3JhcHBl ZCBzdHJlYW0uIG91dCBpcyB0aGUgdGV4dCBzdHJlYW0gdG8gd2hpY2gKKyAgICAgICAgaGV4ZHVt cHMgYXJlIHdyaXR0ZW4uCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnJhdyA9IHN0cmVhbQor ICAgICAgICBzZWxmLl9vdXQgPSBvdXQKKyAgICAgICAgc2VsZi5fcmJ1ZiA9IGlvLkJ5dGVzSU8o KQorICAgICAgICBzZWxmLl93YnVmID0gaW8uQnl0ZXNJTygpCisKKyAgICBkZWYgX19nZXRhdHRy X18oc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYucmF3LCBuYW1lKQor CisgICAgZGVmIF9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKToKKyAgICAgICAgaWYgbmFt ZSBpbiAoInJhdyIsICJfb3V0IiwgIl9yYnVmIiwgIl93YnVmIik6CisgICAgICAgICAgICByZXR1 cm4gb2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKQorCisgICAgICAgIHNldGF0 dHIoc2VsZi5yYXcsIG5hbWUsIHZhbHVlKQorCisgICAgZGVmIHJlYWQoc2VsZiwgKmFyZ3MsICoq a3dhcmdzKToKKyAgICAgICAgYnVmID0gc2VsZi5yYXcucmVhZCgqYXJncywgKiprd2FyZ3MpCisK KyAgICAgICAgc2VsZi5fcmJ1Zi53cml0ZShidWYpCisgICAgICAgIHJldHVybiBidWYKKworICAg IGRlZiB3cml0ZShzZWxmLCBiKToKKyAgICAgICAgc2VsZi5fd2J1Zi53cml0ZShiKQorICAgICAg ICByZXR1cm4gc2VsZi5yYXcud3JpdGUoYikKKworICAgIGRlZiByZWN2KHNlbGYsICphcmdzKToK KyAgICAgICAgYnVmID0gc2VsZi5yYXcucmVjdigqYXJncykKKworICAgICAgICBzZWxmLl9yYnVm LndyaXRlKGJ1ZikKKyAgICAgICAgcmV0dXJuIGJ1ZgorCisgICAgZGVmIF9mbHVzaChzZWxmLCBi dWYsIHByZWZpeCk6CisgICAgICAgIHdpZHRoID0gMTYKKyAgICAgICAgaGV4d2lkdGggPSB3aWR0 aCAqIDMgLSAxCisKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIGJ1Zi5zZWVrKDApCisKKyAg ICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGxpbmUgPSBidWYucmVhZCgxNikKKworICAg ICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgaWYgY291bnQ6CisgICAgICAg ICAgICAgICAgICAgIHNlbGYuX291dC53cml0ZSgiXG4iKSAgIyBzZXBhcmF0ZSB0aGUgb3V0cHV0 IGJsb2NrIHdpdGggYSBuZXdsaW5lCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAg ICAgIHNlbGYuX291dC53cml0ZSgiJXMgJTA0WDpcdCIgJSAocHJlZml4LCBjb3VudCkpCisgICAg ICAgICAgICBzZWxmLl9vdXQud3JpdGUoIiUqc1x0IiAlICgtaGV4d2lkdGgsIGxpbmUuaGV4KCIg IikpKQorICAgICAgICAgICAgc2VsZi5fb3V0LndyaXRlKGxpbmUudHJhbnNsYXRlKHNlbGYuX3Ry YW5zbGF0aW9uX21hcCkuZGVjb2RlKCJhc2NpaSIpKQorICAgICAgICAgICAgc2VsZi5fb3V0Lndy aXRlKCJcbiIpCisKKyAgICAgICAgICAgIGNvdW50ICs9IDE2CisKKyAgICBkZWYgcHJpbnRfZGVi dWcoc2VsZiwgb2JqLCAqLCBwcmVmaXg9IiIpOgorICAgICAgICBjb250ZW50cyA9ICIiCisgICAg ICAgIGlmIG9iaiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGNvbnRlbnRzID0gc3RyKG9iaikK KworICAgICAgICBmb3IgbGluZSBpbiBjb250ZW50cy5zcGxpdGxpbmVzKCk6CisgICAgICAgICAg ICBzZWxmLl9vdXQud3JpdGUoIiVzJXNcbiIgJSAocHJlZml4LCBsaW5lKSkKKworICAgICAgICBz ZWxmLl9vdXQud3JpdGUoIlxuIikKKworICAgIGRlZiBmbHVzaF9kZWJ1ZyhzZWxmLCAqLCBwcmVm aXg9IiIpOgorICAgICAgICBzZWxmLl9mbHVzaChzZWxmLl9yYnVmLCBwcmVmaXggKyAiPCIpCisg ICAgICAgIHNlbGYuX3JidWYgPSBpby5CeXRlc0lPKCkKKworICAgICAgICBzZWxmLl9mbHVzaChz ZWxmLl93YnVmLCBwcmVmaXggKyAiPiIpCisgICAgICAgIHNlbGYuX3didWYgPSBpby5CeXRlc0lP KCkKKworICAgIGRlZiBlbmRfcGFja2V0KHNlbGYsIHBrdCwgKiwgcmVhZD1GYWxzZSwgcHJlZml4 PSIiLCBpbmRlbnQ9IiAgIik6CisgICAgICAgICIiIgorICAgICAgICBNYXJrcyB0aGUgZW5kIG9m IGEgbG9naWNhbCAicGFja2V0IiBvZiBkYXRhLiBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZgor ICAgICAgICBwa3Qgd2lsbCBiZSBwcmludGVkLCBhbmQgdGhlIGRlYnVnIGJ1ZmZlcnMgd2lsbCBi ZSBmbHVzaGVkIHdpdGggYW4KKyAgICAgICAgaW5kZW50LiBBbGwgbGluZXMgY2FuIGJlIG9wdGlv bmFsbHkgcHJlZml4ZWQuCisKKyAgICAgICAgSWYgcmVhZCBpcyBUcnVlLCB0aGUgcGFja2V0IHJl cHJlc2VudGF0aW9uIGlzIHdyaXR0ZW4gYWZ0ZXIgdGhlIGRlYnVnCisgICAgICAgIGJ1ZmZlcnM7 IG90aGVyd2lzZSB0aGUgZGVmYXVsdCBvZiBGYWxzZSAobWVhbmluZyB3cml0ZSkgY2F1c2VzIHRo ZQorICAgICAgICBwYWNrZXQgcmVwcmVzZW50YXRpb24gdG8gYmUgZHVtcGVkIGZpcnN0LiBUaGlz IGlzIG1lYW50IHRvIGNhcHR1cmUgdGhlCisgICAgICAgIGxvZ2ljYWwgZmxvdyBvZiBsYXllciB0 cmFuc2xhdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHdyaXRlID0gbm90IHJlYWQKKworICAg ICAgICBpZiB3cml0ZToKKyAgICAgICAgICAgIHNlbGYucHJpbnRfZGVidWcocGt0LCBwcmVmaXg9 cHJlZml4ICsgIj4gIikKKworICAgICAgICBzZWxmLmZsdXNoX2RlYnVnKHByZWZpeD1wcmVmaXgg KyBpbmRlbnQpCisKKyAgICAgICAgaWYgcmVhZDoKKyAgICAgICAgICAgIHNlbGYucHJpbnRfZGVi dWcocGt0LCBwcmVmaXg9cHJlZml4ICsgIjwgIikKKworCitAY29udGV4dGxpYi5jb250ZXh0bWFu YWdlcgorZGVmIHdyYXAoc29ja2V0LCAqLCBkZWJ1Z19zdHJlYW09Tm9uZSk6CisgICAgIiIiCisg ICAgVHJhbnNmb3JtcyBhIHJhdyBzb2NrZXQgaW50byBhIGNvbm5lY3Rpb24gdGhhdCBjYW4gYmUg dXNlZCBmb3IgQ29uc3RydWN0CisgICAgYnVpbGRpbmcgYW5kIHBhcnNpbmcuIFRoZSByZXR1cm4g dmFsdWUgaXMgYSBjb250ZXh0IG1hbmFnZXIgYW5kIGNhbiBiZSB1c2VkCisgICAgaW4gYSB3aXRo IHN0YXRlbWVudC4KKyAgICAiIiIKKyAgICAjIEl0IGlzIGNyaXRpY2FsIHRoYXQgYnVmZmVyaW5n IGJlIGRpc2FibGVkIGhlcmUsIHNvIHRoYXQgd2UgY2FuIHN0aWxsCisgICAgIyBtYW5pcHVsYXRl IHRoZSByYXcgc29ja2V0IHdpdGhvdXQgZGVzeW5jaW5nIHRoZSBzdHJlYW0uCisgICAgd2l0aCBz b2NrZXQubWFrZWZpbGUoInJ3YiIsIGJ1ZmZlcmluZz0wKSBhcyBzZmlsZToKKyAgICAgICAgIyBF eHBvc2UgdGhlIG9yaWdpbmFsIHNvY2tldCdzIHJlY3YoKSBvbiB0aGUgU29ja2V0SU8gb2JqZWN0 IHdlIHJldHVybi4KKyAgICAgICAgZGVmIHJlY3Yoc2VsZiwgKmFyZ3MpOgorICAgICAgICAgICAg cmV0dXJuIHNvY2tldC5yZWN2KCphcmdzKQorCisgICAgICAgIHNmaWxlLnJlY3YgPSByZWN2Ll9f Z2V0X18oc2ZpbGUpCisKKyAgICAgICAgY29ubiA9IHNmaWxlCisgICAgICAgIGlmIGRlYnVnX3N0 cmVhbToKKyAgICAgICAgICAgIGNvbm4gPSBfRGVidWdTdHJlYW0oY29ubiwgZGVidWdfc3RyZWFt KQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkIGNvbm4KKyAgICAgICAgZmluYWxs eToKKyAgICAgICAgICAgIGlmIGRlYnVnX3N0cmVhbToKKyAgICAgICAgICAgICAgICBjb25uLmZs dXNoX2RlYnVnKHByZWZpeD0iPyAiKQorCisKK2RlZiBfc2VuZChzdHJlYW0sIGNscywgb2JqKToK KyAgICBkZWJ1Z2dpbmcgPSBoYXNhdHRyKHN0cmVhbSwgImZsdXNoX2RlYnVnIikKKyAgICBvdXQg PSBpby5CeXRlc0lPKCkKKworICAgICMgSWRlYWxseSB3ZSB3b3VsZCBidWlsZCBkaXJlY3RseSB0 byB0aGUgcGFzc2VkIHN0cmVhbSwgYnV0IGJlY2F1c2Ugd2UgbmVlZAorICAgICMgdG8gcmVwYXJz ZSB0aGUgZ2VuZXJhdGVkIG91dHB1dCBmb3IgdGhlIGRlYnVnZ2luZyBjYXNlLCBidWlsZCB0byBh bgorICAgICMgaW50ZXJtZWRpYXRlIEJ5dGVzSU8gYW5kIHNlbmQgaXQgaW5zdGVhZC4KKyAgICBj bHMuYnVpbGRfc3RyZWFtKG9iaiwgb3V0KQorICAgIGJ1ZiA9IG91dC5nZXR2YWx1ZSgpCisKKyAg ICBzdHJlYW0ud3JpdGUoYnVmKQorICAgIGlmIGRlYnVnZ2luZzoKKyAgICAgICAgcGt0ID0gY2xz LnBhcnNlKGJ1ZikKKyAgICAgICAgc3RyZWFtLmVuZF9wYWNrZXQocGt0KQorCisgICAgc3RyZWFt LmZsdXNoKCkKKworCitkZWYgc2VuZChzdHJlYW0sIHBhY2tldF90eXBlLCBwYXlsb2FkX2RhdGE9 Tm9uZSwgKipwYXlsb2Fka3cpOgorICAgICIiIgorICAgIFNlbmRzIGEgcGFja2V0IG9uIHRoZSBn aXZlbiBwcTMgY29ubmVjdGlvbi4gdHlwZSBpcyB0aGUgcHEzLnR5cGVzIG1lbWJlcgorICAgIHRo YXQgc2hvdWxkIGJlIGFzc2lnbmVkIHRvIHRoZSBwYWNrZXQuIElmIHBheWxvYWRfZGF0YSBpcyBn aXZlbiwgaXQgd2lsbCBiZQorICAgIHVzZWQgYXMgdGhlIHBhY2tldCBwYXlsb2FkOyBvdGhlcndp c2UgdGhlIGtleS92YWx1ZSBwYWlycyBpbiBwYXlsb2Fka3cgd2lsbAorICAgIGJlIHRoZSBwYXls b2FkIGNvbnRlbnRzLgorICAgICIiIgorICAgIGRhdGEgPSBwYXlsb2Fka3cKKworICAgIGlmIHBh eWxvYWRfZGF0YSBpcyBub3QgTm9uZToKKyAgICAgICAgaWYgcGF5bG9hZGt3OgorICAgICAgICAg ICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAicGF5bG9hZF9kYXRhIGFuZCBw YXlsb2FkIGtleXdvcmRzIG1heSBub3QgYmUgdXNlZCBzaW11bHRhbmVvdXNseSIKKyAgICAgICAg ICAgICkKKworICAgICAgICBkYXRhID0gcGF5bG9hZF9kYXRhCisKKyAgICBfc2VuZChzdHJlYW0s IFBxMywgZGljdCh0eXBlPXBhY2tldF90eXBlLCBwYXlsb2FkPWRhdGEpKQorCisKK2RlZiBzZW5k X3N0YXJ0dXAoc3RyZWFtLCBwcm90bz1Ob25lLCAqKmt3YXJncyk6CisgICAgIiIiCisgICAgU2Vu ZHMgYSBzdGFydHVwIHBhY2tldCBvbiB0aGUgZ2l2ZW4gcHEzIGNvbm5lY3Rpb24uIEluIG1vc3Qg Y2FzZXMgeW91IHNob3VsZAorICAgIHVzZSB0aGUgaGFuZHNoYWtlIGZ1bmN0aW9ucyBpbnN0ZWFk LCB3aGljaCB3aWxsIGRvIHRoaXMgZm9yIHlvdS4KKworICAgIEJ5IGRlZmF1bHQsIGEgcHJvdG9j b2wgdmVyc2lvbiAzIHBhY2tldCB3aWxsIGJlIHNlbnQuIFRoaXMgY2FuIGJlIG92ZXJyaWRkZW4K KyAgICB3aXRoIHRoZSBwcm90byBwYXJhbWV0ZXIuCisgICAgIiIiCisgICAgcGt0ID0ge30KKwor ICAgIGlmIHByb3RvIGlzIG5vdCBOb25lOgorICAgICAgICBwa3RbInByb3RvIl0gPSBwcm90bwor ICAgIGlmIGt3YXJnczoKKyAgICAgICAgcGt0WyJwYXlsb2FkIl0gPSBrd2FyZ3MKKworICAgIF9z ZW5kKHN0cmVhbSwgU3RhcnR1cCwgcGt0KQorCisKK2RlZiByZWN2MShzdHJlYW0sICosIGNscz1Q cTMpOgorICAgICIiIgorICAgIFJlY2VpdmVzIGEgc2luZ2xlIHBxMyBwYWNrZXQgZnJvbSB0aGUg Z2l2ZW4gc3RyZWFtIGFuZCByZXR1cm5zIGl0LgorICAgICIiIgorICAgIHJlc3AgPSBjbHMucGFy c2Vfc3RyZWFtKHN0cmVhbSkKKworICAgIGRlYnVnZ2luZyA9IGhhc2F0dHIoc3RyZWFtLCAiZmx1 c2hfZGVidWciKQorICAgIGlmIGRlYnVnZ2luZzoKKyAgICAgICAgc3RyZWFtLmVuZF9wYWNrZXQo cmVzcCwgcmVhZD1UcnVlKQorCisgICAgcmV0dXJuIHJlc3AKKworCitkZWYgaGFuZHNoYWtlKHN0 cmVhbSwgKiprd2FyZ3MpOgorICAgICIiIgorICAgIFBlcmZvcm1zIGEgbGlicHEgdjMgc3RhcnR1 cCBoYW5kc2hha2UuIGt3YXJncyBzaG91bGQgY29udGFpbiB0aGUga2V5L3ZhbHVlCisgICAgcGFy YW1ldGVycyB0byBzZW5kIHRvIHRoZSBzZXJ2ZXIgaW4gdGhlIHN0YXJ0dXAgcGFja2V0LgorICAg ICIiIgorICAgICMgU2VuZCBvdXIgc3RhcnR1cCBwYXJhbWV0ZXJzLgorICAgIHNlbmRfc3RhcnR1 cChzdHJlYW0sICoqa3dhcmdzKQorCisgICAgIyBSZWNlaXZlIGFuZCBkdW1wIHBhY2tldHMgdW50 aWwgdGhlIHNlcnZlciBpbmRpY2F0ZXMgaXQncyByZWFkeSBmb3Igb3VyCisgICAgIyBmaXJzdCBx dWVyeS4KKyAgICB3aGlsZSBUcnVlOgorICAgICAgICByZXNwID0gcmVjdjEoc3RyZWFtKQorICAg ICAgICBpZiByZXNwIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoInNl cnZlciBjbG9zZWQgY29ubmVjdGlvbiBkdXJpbmcgaGFuZHNoYWtlIikKKworICAgICAgICBpZiBy ZXNwLnR5cGUgPT0gdHlwZXMuUmVhZHlGb3JRdWVyeToKKyAgICAgICAgICAgIHJldHVybgorICAg ICAgICBlbGlmIHJlc3AudHlwZSA9PSB0eXBlcy5FcnJvclJlc3BvbnNlOgorICAgICAgICAgICAg cmFpc2UgUnVudGltZUVycm9yKAorICAgICAgICAgICAgICAgIGYicmVjZWl2ZWQgZXJyb3IgcmVz cG9uc2UgZnJvbSBwZWVyOiB7cmVzcC5wYXlsb2FkLmZpZWxkcyFyfSIKKyAgICAgICAgICAgICkK KworCisjIFRMUworCisKK2NsYXNzIF9UTFNTdHJlYW0ob2JqZWN0KToKKyAgICAiIiIKKyAgICBB IGZpbGUtbGlrZSBvYmplY3QgdGhhdCBwZXJmb3JtcyBUTFMgZW5jcnlwdGlvbi9kZWNyeXB0aW9u IG9uIGEgd3JhcHBlZAorICAgIHN0cmVhbS4gRGlmZmVycyBmcm9tIHNzbC5TU0xTb2NrZXQgaW4g dGhhdCB3ZSBoYXZlIGZ1bGwgdmlzaWJpbGl0eSBhbmQKKyAgICBjb250cm9sIG92ZXIgdGhlIFRM UyBsYXllci4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW0sIGNvbnRl eHQpOgorICAgICAgICBzZWxmLl9zdHJlYW0gPSBzdHJlYW0KKyAgICAgICAgc2VsZi5fZGVidWdn aW5nID0gaGFzYXR0cihzdHJlYW0sICJmbHVzaF9kZWJ1ZyIpCisKKyAgICAgICAgc2VsZi5faW4g PSBzc2wuTWVtb3J5QklPKCkKKyAgICAgICAgc2VsZi5fb3V0ID0gc3NsLk1lbW9yeUJJTygpCisg ICAgICAgIHNlbGYuX3NzbCA9IGNvbnRleHQud3JhcF9iaW8oc2VsZi5faW4sIHNlbGYuX291dCkK KworICAgIGRlZiBoYW5kc2hha2Uoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNl bGYuX3B1bXAobGFtYmRhOiBzZWxmLl9zc2wuZG9faGFuZHNoYWtlKCkpCisgICAgICAgIGZpbmFs bHk6CisgICAgICAgICAgICBzZWxmLl9mbHVzaF9kZWJ1ZyhwcmVmaXg9Ij8gIikKKworICAgIGRl ZiByZWFkKHNlbGYsICphcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3B1bXAobGFtYmRhOiBz ZWxmLl9zc2wucmVhZCgqYXJncykpCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgKmFyZ3MpOgorICAg ICAgICByZXR1cm4gc2VsZi5fcHVtcChsYW1iZGE6IHNlbGYuX3NzbC53cml0ZSgqYXJncykpCisK KyAgICBkZWYgX2RlY29kZShzZWxmLCBidWYpOgorICAgICAgICAiIiIKKyAgICAgICAgQXR0ZW1w dHMgdG8gZGVjb2RlIGEgYnVmZmVyIG9mIFRMUyBkYXRhIGludG8gYSBwYWNrZXQgcmVwcmVzZW50 YXRpb24KKyAgICAgICAgdGhhdCBjYW4gYmUgcHJpbnRlZC4KKworICAgICAgICBUT0RPOiBoYW5k bGUgYnVmZmVycyAoYW5kIHJlY29yZCBmcmFnbWVudHMpIHRoYXQgZG9uJ3QgYWxpZ24gd2l0aCBw YWNrZXQKKyAgICAgICAgYm91bmRhcmllcy4KKyAgICAgICAgIiIiCisgICAgICAgIGVuZCA9IGxl bihidWYpCisgICAgICAgIGJpbyA9IGlvLkJ5dGVzSU8oYnVmKQorCisgICAgICAgIHJldCA9IGlv LlN0cmluZ0lPKCkKKworICAgICAgICB3aGlsZSBiaW8udGVsbCgpIDwgZW5kOgorICAgICAgICAg ICAgcmVjb3JkID0gdGxzLlBsYWludGV4dC5wYXJzZV9zdHJlYW0oYmlvKQorCisgICAgICAgICAg ICBpZiByZXQudGVsbCgpID4gMDoKKyAgICAgICAgICAgICAgICByZXQud3JpdGUoIlxuIikKKyAg ICAgICAgICAgIHJldC53cml0ZSgiW1JlY29yZF0gIikKKyAgICAgICAgICAgIHJldC53cml0ZShz dHIocmVjb3JkKSkKKyAgICAgICAgICAgIHJldC53cml0ZSgiXG4iKQorCisgICAgICAgICAgICBp ZiByZWNvcmQudHlwZSA9PSB0bHMuQ29udGVudFR5cGUuaGFuZHNoYWtlOgorICAgICAgICAgICAg ICAgIHJlY29yZF9jbHMgPSB0bHMuSGFuZHNoYWtlCisgICAgICAgICAgICBlbHNlOgorICAgICAg ICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlubmVybGVuID0gbGVuKHJlY29yZC5m cmFnbWVudCkKKyAgICAgICAgICAgIGlubmVyID0gaW8uQnl0ZXNJTyhyZWNvcmQuZnJhZ21lbnQp CisKKyAgICAgICAgICAgIHdoaWxlIGlubmVyLnRlbGwoKSA8IGlubmVybGVuOgorICAgICAgICAg ICAgICAgIG1zZyA9IHJlY29yZF9jbHMucGFyc2Vfc3RyZWFtKGlubmVyKQorCisgICAgICAgICAg ICAgICAgaW5kZW50ZWQgPSAiW01lc3NhZ2VdICIgKyBzdHIobXNnKQorICAgICAgICAgICAgICAg IGluZGVudGVkID0gdGV4dHdyYXAuaW5kZW50KGluZGVudGVkLCAiICAgICIpCisKKyAgICAgICAg ICAgICAgICByZXQud3JpdGUoIlxuIikKKyAgICAgICAgICAgICAgICByZXQud3JpdGUoaW5kZW50 ZWQpCisgICAgICAgICAgICAgICAgcmV0LndyaXRlKCJcbiIpCisKKyAgICAgICAgcmV0dXJuIHJl dC5nZXR2YWx1ZSgpCisKKyAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxm Ll9vdXQucGVuZGluZzoKKyAgICAgICAgICAgIHNlbGYuX3N0cmVhbS5mbHVzaCgpCisgICAgICAg ICAgICByZXR1cm4KKworICAgICAgICBidWYgPSBzZWxmLl9vdXQucmVhZCgpCisgICAgICAgIHNl bGYuX3N0cmVhbS53cml0ZShidWYpCisKKyAgICAgICAgaWYgc2VsZi5fZGVidWdnaW5nOgorICAg ICAgICAgICAgcGt0ID0gc2VsZi5fZGVjb2RlKGJ1ZikKKyAgICAgICAgICAgIHNlbGYuX3N0cmVh bS5lbmRfcGFja2V0KHBrdCwgcHJlZml4PSIgICIpCisKKyAgICAgICAgc2VsZi5fc3RyZWFtLmZs dXNoKCkKKworICAgIGRlZiBfcHVtcChzZWxmLCBvcGVyYXRpb24pOgorICAgICAgICB3aGlsZSBU cnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb24o KQorICAgICAgICAgICAgZXhjZXB0IChzc2wuU1NMV2FudFJlYWRFcnJvciwgc3NsLlNTTFdhbnRX cml0ZUVycm9yKSBhcyBlOgorICAgICAgICAgICAgICAgIHdhbnQgPSBlCisgICAgICAgICAgICBz ZWxmLl9yZWFkX3dyaXRlKHdhbnQpCisKKyAgICBkZWYgX3JlY3Yoc2VsZiwgbWF4c2l6ZSk6Cisg ICAgICAgIGJ1ZiA9IHNlbGYuX3N0cmVhbS5yZWN2KDQwOTYpCisgICAgICAgIGlmIG5vdCBidWY6 CisgICAgICAgICAgICBzZWxmLl9pbi53cml0ZV9lb2YoKQorICAgICAgICAgICAgcmV0dXJuCisK KyAgICAgICAgc2VsZi5faW4ud3JpdGUoYnVmKQorCisgICAgICAgIGlmIG5vdCBzZWxmLl9kZWJ1 Z2dpbmc6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBwa3QgPSBzZWxmLl9kZWNvZGUo YnVmKQorICAgICAgICBzZWxmLl9zdHJlYW0uZW5kX3BhY2tldChwa3QsIHJlYWQ9VHJ1ZSwgcHJl Zml4PSIgICIpCisKKyAgICBkZWYgX3JlYWRfd3JpdGUoc2VsZiwgd2FudCk6CisgICAgICAgICMg WFhYIFRoaXMgbmVlZHMgd29yay4gU28gbWFueSBjb3JuZXIgY2FzZXMgeWV0IHRvIGhhbmRsZS4g Rm9yIG9uZSwKKyAgICAgICAgIyBkb2luZyBibG9ja2luZyB3cml0ZXMgaW4gZmx1c2ggbWF5IGxl YWQgdG8gZGlzdHJpYnV0ZWQgZGVhZGxvY2sgaWYgdGhlCisgICAgICAgICMgcGVlciBpcyBhbHJl YWR5IGJsb2NraW5nIG9uIGl0cyB3cml0ZXMuCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh3YW50 LCBzc2wuU1NMV2FudFdyaXRlRXJyb3IpOgorICAgICAgICAgICAgYXNzZXJ0IHNlbGYuX291dC5w ZW5kaW5nLCAiU1NMIGJhY2tlbmQgd2FudHMgd3JpdGUgd2l0aG91dCBkYXRhIgorCisgICAgICAg IHNlbGYuZmx1c2goKQorCisgICAgICAgIGlmIGlzaW5zdGFuY2Uod2FudCwgc3NsLlNTTFdhbnRS ZWFkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5fcmVjdig0MDk2KQorCisgICAgZGVmIF9mbHVz aF9kZWJ1ZyhzZWxmLCBwcmVmaXgpOgorICAgICAgICBpZiBub3Qgc2VsZi5fZGVidWdnaW5nOgor ICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5fc3RyZWFtLmZsdXNoX2RlYnVnKHBy ZWZpeD1wcmVmaXgpCisKKworQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiB0bHNfaGFu ZHNoYWtlKHN0cmVhbSwgY29udGV4dCk6CisgICAgIiIiCisgICAgUGVyZm9ybXMgYSBUTFMgaGFu ZHNoYWtlIG92ZXIgdGhlIGdpdmVuIHN0cmVhbSAod2hpY2ggbXVzdCBoYXZlIGJlZW4gY3JlYXRl ZAorICAgIHZpYSBhIGNhbGwgdG8gd3JhcCgpKSwgYW5kIHJldHVybnMgYSBuZXcgc3RyZWFtIHdo aWNoIHRyYW5zcGFyZW50bHkgdHVubmVscworICAgIGRhdGEgb3ZlciB0aGUgVExTIGNvbm5lY3Rp b24uCisKKyAgICBJZiB0aGUgcGFzc2VkIHN0cmVhbSBoYXMgZGVidWdnaW5nIGVuYWJsZWQsIHRo ZSByZXR1cm5lZCBzdHJlYW0gd2lsbCBhbHNvCisgICAgaGF2ZSBkZWJ1Z2dpbmcsIHVzaW5nIHRo ZSBzYW1lIG91dHB1dCBJTy4KKyAgICAiIiIKKyAgICBkZWJ1Z2dpbmcgPSBoYXNhdHRyKHN0cmVh bSwgImZsdXNoX2RlYnVnIikKKworICAgICMgU2VuZCBvdXIgc3RhcnR1cCBwYXJhbWV0ZXJzLgor ICAgIHNlbmRfc3RhcnR1cChzdHJlYW0sIHByb3RvPXByb3RvY29sKDEyMzQsIDU2NzkpKQorCisg ICAgIyBMb29rIGF0IHRoZSBTU0wgcmVzcG9uc2UuCisgICAgcmVzcCA9IHN0cmVhbS5yZWFkKDEp CisgICAgaWYgZGVidWdnaW5nOgorICAgICAgICBzdHJlYW0uZmx1c2hfZGVidWcocHJlZml4PSIg ICIpCisKKyAgICBpZiByZXNwID09IGIiTiI6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigi c2VydmVyIGRvZXMgbm90IHN1cHBvcnQgU1NMUmVxdWVzdCIpCisgICAgaWYgcmVzcCAhPSBiIlMi OgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoZiJ1bmV4cGVjdGVkIHJlc3BvbnNlIG9mIHR5 cGUge3Jlc3Ahcn0gZHVyaW5nIFRMUyBzdGFydHVwIikKKworICAgIHRscyA9IF9UTFNTdHJlYW0o c3RyZWFtLCBjb250ZXh0KQorICAgIHRscy5oYW5kc2hha2UoKQorCisgICAgaWYgZGVidWdnaW5n OgorICAgICAgICB0bHMgPSBfRGVidWdTdHJlYW0odGxzLCBzdHJlYW0uX291dCkKKworICAgIHRy eToKKyAgICAgICAgeWllbGQgdGxzCisgICAgICAgICMgVE9ETzogdGVhcmRvd24vdW53cmFwIHRo ZSBjb25uZWN0aW9uPworICAgIGZpbmFsbHk6CisgICAgICAgIGlmIGRlYnVnZ2luZzoKKyAgICAg ICAgICAgIHRscy5mbHVzaF9kZWJ1ZyhwcmVmaXg9Ij8gIikKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3B5dGhvbi9weXRlc3QuaW5pIGIvc3JjL3Rlc3QvcHl0aG9uL3B5dGVzdC5pbmkKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYWI3YTZlN2ZiOQotLS0gL2Rldi9udWxsCisr KyBiL3NyYy90ZXN0L3B5dGhvbi9weXRlc3QuaW5pCkBAIC0wLDAgKzEsNCBAQAorW3B5dGVzdF0K KworbWFya2VycyA9CisgICAgc2xvdzogbWFyayB0ZXN0IGFzIHNsb3cKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3B5dGhvbi9yZXF1aXJlbWVudHMudHh0IGIvc3JjL3Rlc3QvcHl0aG9uL3JlcXVpcmVt ZW50cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMzJmMTA1ZWE4 NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5dGhvbi9yZXF1aXJlbWVudHMudHh0CkBA IC0wLDAgKzEsNyBAQAorYmxhY2sKK2NyeXB0b2dyYXBoeX49My40LjYKK2NvbnN0cnVjdH49Mi4x MC42MQoraXNvcnR+PTUuNgorcHN5Y29wZzJ+PTIuOC42CitweXRlc3R+PTYuMQorcHl0ZXN0LWFz eW5jaW9+PTAuMTQuMApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcHl0aG9uL3NlcnZlci9fX2luaXRf Xy5weSBiL3NyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZTY5ZGUyOWJiMgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cHl0aG9uL3NlcnZlci9jb25mdGVzdC5weSBiL3NyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIvY29uZnRl c3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYmE3MzQyYTQ1Mwot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIvY29uZnRlc3QucHkKQEAg LTAsMCArMSw0NSBAQAorIworIyBDb3B5cmlnaHQgMjAyMSBWTXdhcmUsIEluYy4KKyMgU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IFBvc3RncmVTUUwKKyMKKworaW1wb3J0IGNvbnRleHRsaWIKK2lt cG9ydCBzb2NrZXQKK2ltcG9ydCBzeXMKKworaW1wb3J0IHB5dGVzdAorCitpbXBvcnQgcHEzCisK KworQHB5dGVzdC5maXh0dXJlCitkZWYgY29ubmVjdCgpOgorICAgICIiIgorICAgIEEgZmFjdG9y eSBmaXh0dXJlIHRoYXQsIHdoZW4gY2FsbGVkLCByZXR1cm5zIGEgc29ja2V0IGNvbm5lY3RlZCB0 byBhCisgICAgUG9zdGdyZXMgc2VydmVyLCB3cmFwcGVkIGluIGEgcHEzIGNvbm5lY3Rpb24uIFRo ZSBjYWxsaW5nIHRlc3Qgd2lsbCBiZQorICAgIHNraXBwZWQgYXV0b21hdGljYWxseSBpZiBhIHNl cnZlciBpcyBub3QgcnVubmluZyBhdCBQR0hPU1Q6UEdQT1JULCBzbyBpdCdzCisgICAgYmVzdCB0 byBjb25uZWN0IGFzIHNvb24gYXMgcG9zc2libGUgYWZ0ZXIgdGhlIHRlc3QgY2FzZSBiZWdpbnMs IHRvIGF2b2lkCisgICAgZG9pbmcgdW5uZWNlc3Nhcnkgd29yay4KKyAgICAiIiIKKyAgICAjIFNl dCB1cCBhbiBFeGl0U3RhY2sgdG8gaGFuZGxlIHNhZmUgY2xlYW51cCBvZiBhbGwgb2YgdGhlIG1v dmluZyBwaWVjZXMuCisgICAgd2l0aCBjb250ZXh0bGliLkV4aXRTdGFjaygpIGFzIHN0YWNrOgor CisgICAgICAgIGRlZiBjb25uX2ZhY3RvcnkoKToKKyAgICAgICAgICAgIGFkZHIgPSAocHEzLnBn aG9zdCgpLCBwcTMucGdwb3J0KCkpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAg ICBzb2NrID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKGFkZHIsIHRpbWVvdXQ9MikKKyAgICAg ICAgICAgIGV4Y2VwdCBDb25uZWN0aW9uRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBweXRl c3Quc2tpcChmInVuYWJsZSB0byBjb25uZWN0IHRvIHthZGRyfToge2V9IikKKworICAgICAgICAg ICAgIyBIYXZlIEV4aXRTdGFjayBjbG9zZSBvdXIgc29ja2V0LgorICAgICAgICAgICAgc3RhY2su ZW50ZXJfY29udGV4dChzb2NrKQorCisgICAgICAgICAgICAjIFdyYXAgdGhlIGNvbm5lY3Rpb24g aW4gYSBwcTMgbGF5ZXIgYW5kIGhhdmUgRXhpdFN0YWNrIGNsZWFuIGl0IHVwCisgICAgICAgICAg ICAjIHRvby4KKyAgICAgICAgICAgIHdyYXBfY3R4ID0gcHEzLndyYXAoc29jaywgZGVidWdfc3Ry ZWFtPXN5cy5zdGRvdXQpCisgICAgICAgICAgICBjb25uID0gc3RhY2suZW50ZXJfY29udGV4dCh3 cmFwX2N0eCkKKworICAgICAgICAgICAgcmV0dXJuIGNvbm4KKworICAgICAgICB5aWVsZCBjb25u X2ZhY3RvcnkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIvdGVzdF9vYXV0aC5w eSBiL3NyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIvdGVzdF9vYXV0aC5weQpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwLi5jYjVjYTdmYTIzCi0tLSAvZGV2L251bGwKKysrIGIvc3Jj L3Rlc3QvcHl0aG9uL3NlcnZlci90ZXN0X29hdXRoLnB5CkBAIC0wLDAgKzEsMTAxMiBAQAorIwor IyBDb3B5cmlnaHQgMjAyMSBWTXdhcmUsIEluYy4KKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IFBvc3RncmVTUUwKKyMKKworaW1wb3J0IGJhc2U2NAoraW1wb3J0IGNvbnRleHRsaWIKK2ltcG9y dCBqc29uCitpbXBvcnQgb3MKK2ltcG9ydCBwYXRobGliCitpbXBvcnQgc2VjcmV0cworaW1wb3J0 IHNobGV4CitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3RydWN0Citmcm9t IG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgc2hhcmVkX21lbW9yeQorCitpbXBvcnQgcHN5Y29wZzIK K2ltcG9ydCBweXRlc3QKK2Zyb20gcHN5Y29wZzIgaW1wb3J0IHNxbAorCitpbXBvcnQgcHEzCisK K01BWF9TQVNMX01FU1NBR0VfTEVOR1RIID0gNjU1MzUKKworSU5WQUxJRF9BVVRIT1JJWkFUSU9O X0VSUkNPREUgPSBiIjI4MDAwIgorUFJPVE9DT0xfVklPTEFUSU9OX0VSUkNPREUgPSBiIjA4UDAx IgorRkVBVFVSRV9OT1RfU1VQUE9SVEVEX0VSUkNPREUgPSBiIjBBMDAwIgorCitTSEFSRURfTUVN X05BTUUgPSAib2F1dGgtcHl0ZXN0IgorTUFYX1RPS0VOX1NJWkUgPSA0MDk2CitNQVhfVUlOVDE2 ID0gMiAqKiAxNiAtIDEKKworCitkZWYgc2tpcF9pZl9ub19wb3N0Z3JlcygpOgorICAgICIiIgor ICAgIFVzZWQgYnkgdGhlIG9hdXRoX2N0eCBmaXh0dXJlIHRvIHNraXAgdGhpcyB0ZXN0IG1vZHVs ZSBpZiBubyBQb3N0Z3JlcyBzZXJ2ZXIKKyAgICBpcyBydW5uaW5nLgorCisgICAgVGhpcyBsb2dp YyBpcyBuZWFybHkgZHVwbGljYXRlZCB3aXRoIHRoZSBjb25uIGZpeHR1cmUuIElkZWFsbHkgb2F1 dGhfY3R4CisgICAgd291bGQgZGVwZW5kIG9uIHRoYXQsIGJ1dCBhIG1vZHVsZS1zY29wZSBmaXh0 dXJlIGNhbid0IGRlcGVuZCBvbiBhCisgICAgdGVzdC1zY29wZSBmaXh0dXJlLCBhbmQgd2UgaGF2 ZW4ndCByZWFjaGVkIHRoZSBydWxlIG9mIHRocmVlIHlldC4KKyAgICAiIiIKKyAgICBhZGRyID0g KHBxMy5wZ2hvc3QoKSwgcHEzLnBncG9ydCgpKQorCisgICAgdHJ5OgorICAgICAgICB3aXRoIHNv Y2tldC5jcmVhdGVfY29ubmVjdGlvbihhZGRyLCB0aW1lb3V0PTIpOgorICAgICAgICAgICAgcGFz cworICAgIGV4Y2VwdCBDb25uZWN0aW9uRXJyb3IgYXMgZToKKyAgICAgICAgcHl0ZXN0LnNraXAo ZiJ1bmFibGUgdG8gY29ubmVjdCB0byB7YWRkcn06IHtlfSIpCisKKworQGNvbnRleHRsaWIuY29u dGV4dG1hbmFnZXIKK2RlZiBwcmVwZW5kX2ZpbGUocGF0aCwgbGluZXMpOgorICAgICIiIgorICAg IEEgY29udGV4dCBtYW5hZ2VyIHRoYXQgcHJlcGVuZHMgYSBmaWxlIG9uIGRpc2sgd2l0aCB0aGUg ZGVzaXJlZCBsaW5lcyBvZgorICAgIHRleHQuIFdoZW4gdGhlIGNvbnRleHQgbWFuYWdlciBpcyBl eGl0ZWQsIHRoZSBmaWxlIHdpbGwgYmUgcmVzdG9yZWQgdG8gaXRzCisgICAgb3JpZ2luYWwgY29u dGVudHMuCisgICAgIiIiCisgICAgIyBGaXJzdCBtYWtlIGEgYmFja3VwIG9mIHRoZSBvcmlnaW5h bCBmaWxlLgorICAgIGJhayA9IHBhdGggKyAiLmJhayIKKyAgICBzaHV0aWwuY29weTIocGF0aCwg YmFrKQorCisgICAgdHJ5OgorICAgICAgICAjIFdyaXRlIHRoZSBuZXcgbGluZXMsIGZvbGxvd2Vk IGJ5IHRoZSBvcmlnaW5hbCBmaWxlIGNvbnRlbnQuCisgICAgICAgIHdpdGggb3BlbihwYXRoLCAi dyIpIGFzIG5ldywgb3BlbihiYWssICJyIikgYXMgb3JpZzoKKyAgICAgICAgICAgIG5ldy53cml0 ZWxpbmVzKGxpbmVzKQorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlb2JqKG9yaWcsIG5ldykK KworICAgICAgICAjIFJldHVybiBjb250cm9sIHRvIHRoZSBjYWxsaW5nIGNvZGUuCisgICAgICAg IHlpZWxkCisKKyAgICBmaW5hbGx5OgorICAgICAgICAjIFB1dCB0aGUgYmFja3VwIGJhY2sgaW50 byBwbGFjZS4KKyAgICAgICAgb3MucmVwbGFjZShiYWssIHBhdGgpCisKKworQHB5dGVzdC5maXh0 dXJlKHNjb3BlPSJtb2R1bGUiKQorZGVmIG9hdXRoX2N0eCgpOgorICAgICIiIgorICAgIENyZWF0 ZXMgYSBkYXRhYmFzZSBhbmQgdXNlciB0aGF0IHVzZSB0aGUgb2F1dGggYXV0aCBtZXRob2QuIFRo ZSBjb250ZXh0CisgICAgb2JqZWN0IGNvbnRhaW5zIHRoZSBkYm5hbWUgYW5kIHVzZXIgYXR0cmli dXRlcyBhcyBzdHJpbmdzIHRvIGJlIHVzZWQgZHVyaW5nCisgICAgY29ubmVjdGlvbiwgYXMgd2Vs bCBhcyB0aGUgaXNzdWVyIGFuZCBzY29wZSB0aGF0IGhhdmUgYmVlbiBzZXQgaW4gdGhlIEhCQQor ICAgIGNvbmZpZ3VyYXRpb24uCisKKyAgICBUaGlzIGZpeHR1cmUgYXNzdW1lcyB0aGF0IHRoZSBz dGFuZGFyZCBQRyogZW52aXJvbm1lbnQgdmFyaWFibGVzIHBvaW50IHRvIGEKKyAgICBzZXJ2ZXIg cnVubmluZyBvbiBhIGxvY2FsIG1hY2hpbmUsIGFuZCB0aGF0IHRoZSBQR1VTRVIgaGFzIHJpZ2h0 cyB0byBjcmVhdGUKKyAgICBkYXRhYmFzZXMgYW5kIHJvbGVzLgorICAgICIiIgorICAgIHNraXBf aWZfbm9fcG9zdGdyZXMoKSAgIyBkb24ndCBib3RoZXIgcnVubmluZyB0aGVzZSB0ZXN0cyB3aXRo b3V0IGEgc2VydmVyCisKKyAgICBpZCA9IHNlY3JldHMudG9rZW5faGV4KDQpCisKKyAgICBjbGFz cyBDb250ZXh0OgorICAgICAgICBkYm5hbWUgPSAib2F1dGhfdGVzdF8iICsgaWQKKworICAgICAg ICB1c2VyID0gIm9hdXRoX3VzZXJfIiArIGlkCisgICAgICAgIG1hcF91c2VyID0gIm9hdXRoX21h cF91c2VyXyIgKyBpZAorICAgICAgICBhdXRoel91c2VyID0gIm9hdXRoX2F1dGh6X3VzZXJfIiAr IGlkCisKKyAgICAgICAgaXNzdWVyID0gImh0dHBzOi8vZXhhbXBsZS5jb20vIiArIGlkCisgICAg ICAgIHNjb3BlID0gIm9wZW5pZCAiICsgaWQKKworICAgIGN0eCA9IENvbnRleHQoKQorICAgIGhi YV9saW5lcyA9ICgKKyAgICAgICAgZidob3N0IHtjdHguZGJuYW1lfSB7Y3R4Lm1hcF91c2VyfSAg IHNhbWVob3N0IG9hdXRoIGlzc3Vlcj0ie2N0eC5pc3N1ZXJ9IiBzY29wZT0ie2N0eC5zY29wZX0i IG1hcD1vYXV0aFxuJywKKyAgICAgICAgZidob3N0IHtjdHguZGJuYW1lfSB7Y3R4LmF1dGh6X3Vz ZXJ9IHNhbWVob3N0IG9hdXRoIGlzc3Vlcj0ie2N0eC5pc3N1ZXJ9IiBzY29wZT0ie2N0eC5zY29w ZX0iIHRydXN0X3ZhbGlkYXRvcl9hdXRoej0xXG4nLAorICAgICAgICBmJ2hvc3Qge2N0eC5kYm5h bWV9IGFsbCAgICAgICAgICAgICAgc2FtZWhvc3Qgb2F1dGggaXNzdWVyPSJ7Y3R4Lmlzc3Vlcn0i IHNjb3BlPSJ7Y3R4LnNjb3BlfSJcbicsCisgICAgKQorICAgIGlkZW50X2xpbmVzID0gKHIib2F1 dGggL14oLiopQGV4YW1wbGVcLmNvbSQgXDEiLCkKKworICAgIGNvbm4gPSBwc3ljb3BnMi5jb25u ZWN0KCIiKQorICAgIGNvbm4uYXV0b2NvbW1pdCA9IFRydWUKKworICAgIHdpdGggY29udGV4dGxp Yi5jbG9zaW5nKGNvbm4pOgorICAgICAgICBjID0gY29ubi5jdXJzb3IoKQorCisgICAgICAgICMg Q3JlYXRlIG91ciByb2xlcyBhbmQgZGF0YWJhc2UuCisgICAgICAgIHVzZXIgPSBzcWwuSWRlbnRp ZmllcihjdHgudXNlcikKKyAgICAgICAgbWFwX3VzZXIgPSBzcWwuSWRlbnRpZmllcihjdHgubWFw X3VzZXIpCisgICAgICAgIGF1dGh6X3VzZXIgPSBzcWwuSWRlbnRpZmllcihjdHguYXV0aHpfdXNl cikKKyAgICAgICAgZGJuYW1lID0gc3FsLklkZW50aWZpZXIoY3R4LmRibmFtZSkKKworICAgICAg ICBjLmV4ZWN1dGUoc3FsLlNRTCgiQ1JFQVRFIFJPTEUge30gTE9HSU47IikuZm9ybWF0KHVzZXIp KQorICAgICAgICBjLmV4ZWN1dGUoc3FsLlNRTCgiQ1JFQVRFIFJPTEUge30gTE9HSU47IikuZm9y bWF0KG1hcF91c2VyKSkKKyAgICAgICAgYy5leGVjdXRlKHNxbC5TUUwoIkNSRUFURSBST0xFIHt9 IExPR0lOOyIpLmZvcm1hdChhdXRoel91c2VyKSkKKyAgICAgICAgYy5leGVjdXRlKHNxbC5TUUwo IkNSRUFURSBEQVRBQkFTRSB7fTsiKS5mb3JtYXQoZGJuYW1lKSkKKworICAgICAgICAjIE1ha2Ug dGhpcyB0ZXN0IHNjcmlwdCB0aGUgc2VydmVyJ3Mgb2F1dGhfdmFsaWRhdG9yLgorICAgICAgICBw YXRoID0gcGF0aGxpYi5QYXRoKF9fZmlsZV9fKS5wYXJlbnQgLyAidmFsaWRhdGVfYmVhcmVyLnB5 IgorICAgICAgICBwYXRoID0gc3RyKHBhdGguYWJzb2x1dGUoKSkKKworICAgICAgICBjbWQgPSBm IntzaGxleC5xdW90ZShwYXRoKX0ge1NIQVJFRF9NRU1fTkFNRX0gPCYlZiIKKyAgICAgICAgYy5l eGVjdXRlKCJBTFRFUiBTWVNURU0gU0VUIG9hdXRoX3ZhbGlkYXRvcl9jb21tYW5kIFRPICVzOyIs IChjbWQsKSkKKworICAgICAgICAjIFJlcGxhY2UgcGdfaGJhIGFuZCBwZ19pZGVudC4KKyAgICAg ICAgYy5leGVjdXRlKCJTSE9XIGhiYV9maWxlOyIpCisgICAgICAgIGhiYSA9IGMuZmV0Y2hvbmUo KVswXQorCisgICAgICAgIGMuZXhlY3V0ZSgiU0hPVyBpZGVudF9maWxlOyIpCisgICAgICAgIGlk ZW50ID0gYy5mZXRjaG9uZSgpWzBdCisKKyAgICAgICAgd2l0aCBwcmVwZW5kX2ZpbGUoaGJhLCBo YmFfbGluZXMpLCBwcmVwZW5kX2ZpbGUoaWRlbnQsIGlkZW50X2xpbmVzKToKKyAgICAgICAgICAg IGMuZXhlY3V0ZSgiU0VMRUNUIHBnX3JlbG9hZF9jb25mKCk7IikKKworICAgICAgICAgICAgIyBV c2UgdGhlIG5ldyBkYXRhYmFzZSBhbmQgdXNlci4KKyAgICAgICAgICAgIHlpZWxkIGN0eAorCisg ICAgICAgICMgUHV0IHRoaW5ncyBiYWNrIHRoZSB3YXkgdGhleSB3ZXJlLgorICAgICAgICBjLmV4 ZWN1dGUoIlNFTEVDVCBwZ19yZWxvYWRfY29uZigpOyIpCisKKyAgICAgICAgYy5leGVjdXRlKCJB TFRFUiBTWVNURU0gUkVTRVQgb2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQ7IikKKyAgICAgICAgYy5l eGVjdXRlKHNxbC5TUUwoIkRST1AgREFUQUJBU0Uge307IikuZm9ybWF0KGRibmFtZSkpCisgICAg ICAgIGMuZXhlY3V0ZShzcWwuU1FMKCJEUk9QIFJPTEUge307IikuZm9ybWF0KGF1dGh6X3VzZXIp KQorICAgICAgICBjLmV4ZWN1dGUoc3FsLlNRTCgiRFJPUCBST0xFIHt9OyIpLmZvcm1hdChtYXBf dXNlcikpCisgICAgICAgIGMuZXhlY3V0ZShzcWwuU1FMKCJEUk9QIFJPTEUge307IikuZm9ybWF0 KHVzZXIpKQorCisKK0BweXRlc3QuZml4dHVyZSgpCitkZWYgY29ubihvYXV0aF9jdHgsIGNvbm5l Y3QpOgorICAgICIiIgorICAgIEEgY29udmVuaWVuY2Ugd3JhcHBlciBmb3IgY29ubmVjdCgpLiBU aGUgbWFpbiBwdXJwb3NlIG9mIHRoaXMgZml4dHVyZSBpcyB0bworICAgIG1ha2Ugc3VyZSBvYXV0 aF9jdHggcnVucyBpdHMgc2V0dXAgY29kZSBiZWZvcmUgdGhlIGNvbm5lY3Rpb24gaXMgbWFkZS4K KyAgICAiIiIKKyAgICByZXR1cm4gY29ubmVjdCgpCisKKworQHB5dGVzdC5maXh0dXJlKHNjb3Bl PSJtb2R1bGUiLCBhdXRvdXNlPVRydWUpCitkZWYgYXV0aG5faWRfZXh0ZW5zaW9uKG9hdXRoX2N0 eCk6CisgICAgIiIiCisgICAgUGVyZm9ybXMgYSBgQ1JFQVRFIEVYVEVOU0lPTiBhdXRobl9pZGAg aW4gdGhlIHRlc3QgZGF0YWJhc2UuIFRoaXMgZml4dHVyZSBpcworICAgIGF1dG91c2VkLCBzbyB0 ZXN0cyBkb24ndCBuZWVkIHRvIHJlbHkgb24gaXQuCisgICAgIiIiCisgICAgY29ubiA9IHBzeWNv cGcyLmNvbm5lY3QoZGF0YWJhc2U9b2F1dGhfY3R4LmRibmFtZSkKKyAgICBjb25uLmF1dG9jb21t aXQgPSBUcnVlCisKKyAgICB3aXRoIGNvbnRleHRsaWIuY2xvc2luZyhjb25uKToKKyAgICAgICAg YyA9IGNvbm4uY3Vyc29yKCkKKyAgICAgICAgYy5leGVjdXRlKCJDUkVBVEUgRVhURU5TSU9OIGF1 dGhuX2lkOyIpCisKKworQHB5dGVzdC5maXh0dXJlKHNjb3BlPSJzZXNzaW9uIikKK2RlZiBzaGFy ZWRfbWVtKCk6CisgICAgIiIiCisgICAgWWllbGRzIGEgc2hhcmVkIG1lbW9yeSBzZWdtZW50IHRo YXQgY2FuIGJlIHVzZWQgZm9yIGNvbW11bmljYXRpb24gYmV0d2VlbgorICAgIHRoZSBiZWFyZXJf dG9rZW4gZml4dHVyZSBhbmQgLi92YWxpZGF0ZV9iZWFyZXIucHkuCisgICAgIiIiCisgICAgc2l6 ZSA9IE1BWF9UT0tFTl9TSVpFICsgMiAgIyB0d28gYnl0ZSBsZW5ndGggcHJlZml4CisgICAgbWVt ID0gc2hhcmVkX21lbW9yeS5TaGFyZWRNZW1vcnkoU0hBUkVEX01FTV9OQU1FLCBjcmVhdGU9VHJ1 ZSwgc2l6ZT1zaXplKQorCisgICAgdHJ5OgorICAgICAgICB3aXRoIGNvbnRleHRsaWIuY2xvc2lu ZyhtZW0pOgorICAgICAgICAgICAgeWllbGQgbWVtCisgICAgZmluYWxseToKKyAgICAgICAgbWVt LnVubGluaygpCisKKworQHB5dGVzdC5maXh0dXJlKCkKK2RlZiBiZWFyZXJfdG9rZW4oc2hhcmVk X21lbSk6CisgICAgIiIiCisgICAgUmV0dXJucyBhIGZhY3RvcnkgZnVuY3Rpb24gdGhhdCwgd2hl biBjYWxsZWQsIHdpbGwgc3RvcmUgYSBCZWFyZXIgdG9rZW4gaW4KKyAgICBzaGFyZWRfbWVtLiBJ ZiB0b2tlbiBpcyBOb25lICh0aGUgZGVmYXVsdCksIGEgbmV3IHRva2VuIHdpbGwgYmUgZ2VuZXJh dGVkCisgICAgdXNpbmcgc2VjcmV0cy50b2tlbl91cmxzYWZlKCkgYW5kIHJldHVybmVkOyBvdGhl cndpc2UgdGhlIHBhc3NlZCB0b2tlbiB3aWxsCisgICAgYmUgdXNlZCBhcy1pcy4KKworICAgIFdo ZW4gdG9rZW4gaXMgTm9uZSwgdGhlIGdlbmVyYXRlZCB0b2tlbiBzaXplIGluIGJ5dGVzIG1heSBi ZSBzcGVjaWZpZWQgYXMgYW4KKyAgICBhcmd1bWVudDsgaWYgdW5zZXQsIGEgc21hbGwgMTYtYnl0 ZSB0b2tlbiB3aWxsIGJlIGdlbmVyYXRlZC4gVGhlIHRva2VuIHNpemUKKyAgICBtYXkgbm90IGV4 Y2VlZCBNQVhfVE9LRU5fU0laRSBpbiBhbnkgY2FzZS4KKworICAgIFRoZSByZXR1cm4gdmFsdWUg aXMgdGhlIHRva2VuLCBjb252ZXJ0ZWQgdG8gYSBieXRlcyBvYmplY3QuCisKKyAgICBBcyBhIHNw ZWNpYWwgY2FzZSBmb3IgdGVzdGluZyBmYWlsdXJlIG1vZGVzLCBhY2NlcHRfYW55IG1heSBiZSBz ZXQgdG8gVHJ1ZS4KKyAgICBUaGlzIHNpZ25hbHMgdG8gdGhlIHZhbGlkYXRvciBjb21tYW5kIHRo YXQgYW55IGJlYXJlciB0b2tlbiBzaG91bGQgYmUKKyAgICBhY2NlcHRlZC4gVGhlIHJldHVybmVk IHRva2VuIGluIHRoaXMgY2FzZSBtYXkgYmUgdXNlZCBvciBkaXNjYXJkZWQgYXMgbmVlZGVkCisg ICAgYnkgdGhlIHRlc3QuCisgICAgIiIiCisKKyAgICBkZWYgc2V0X3Rva2VuKHRva2VuPU5vbmUs ICosIHNpemU9MTYsIGFjY2VwdF9hbnk9RmFsc2UpOgorICAgICAgICBpZiB0b2tlbiBpcyBub3Qg Tm9uZToKKyAgICAgICAgICAgIHNpemUgPSBsZW4odG9rZW4pCisKKyAgICAgICAgaWYgc2l6ZSA+ IE1BWF9UT0tFTl9TSVpFOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihmInRva2VuIHNp emUge3NpemV9IGV4Y2VlZHMgbWF4aW11bSBzaXplIHtNQVhfVE9LRU5fU0laRX0iKQorCisgICAg ICAgIGlmIHRva2VuIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzaXplICUgNDoKKyAgICAgICAg ICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGYicmVxdWVzdGVkIHRva2VuIHNpemUge3NpemV9IGlz IG5vdCBhIG11bHRpcGxlIG9mIDQiKQorCisgICAgICAgICAgICB0b2tlbiA9IHNlY3JldHMudG9r ZW5fdXJsc2FmZShzaXplIC8vIDQgKiAzKQorICAgICAgICAgICAgYXNzZXJ0IGxlbih0b2tlbikg PT0gc2l6ZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRva2VuID0gdG9rZW4uZW5jb2Rl KCJhc2NpaSIpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBh c3MgICMgYWxyZWFkeSBlbmNvZGVkCisKKyAgICAgICAgaWYgYWNjZXB0X2FueToKKyAgICAgICAg ICAgICMgVHdvLWJ5dGUgbWFnaWMgdmFsdWUuCisgICAgICAgICAgICBzaGFyZWRfbWVtLmJ1Zls6 Ml0gPSBzdHJ1Y3QucGFjaygiSCIsIE1BWF9VSU5UMTYpCisgICAgICAgIGVsc2U6CisgICAgICAg ICAgICAjIFR3by1ieXRlIGxlbmd0aCBwcmVmaXgsIHRoZW4gdGhlIHRva2VuIGRhdGEuCisgICAg ICAgICAgICBzaGFyZWRfbWVtLmJ1Zls6Ml0gPSBzdHJ1Y3QucGFjaygiSCIsIGxlbih0b2tlbikp CisgICAgICAgICAgICBzaGFyZWRfbWVtLmJ1ZlsyIDogc2l6ZSArIDJdID0gdG9rZW4KKworICAg ICAgICByZXR1cm4gdG9rZW4KKworICAgIHJldHVybiBzZXRfdG9rZW4KKworCitkZWYgYmVnaW5f b2F1dGhfaGFuZHNoYWtlKGNvbm4sIG9hdXRoX2N0eCwgKiwgdXNlcj1Ob25lKToKKyAgICBpZiB1 c2VyIGlzIE5vbmU6CisgICAgICAgIHVzZXIgPSBvYXV0aF9jdHguYXV0aHpfdXNlcgorCisgICAg cHEzLnNlbmRfc3RhcnR1cChjb25uLCB1c2VyPXVzZXIsIGRhdGFiYXNlPW9hdXRoX2N0eC5kYm5h bWUpCisKKyAgICByZXNwID0gcHEzLnJlY3YxKGNvbm4pCisgICAgYXNzZXJ0IHJlc3AudHlwZSA9 PSBwcTMudHlwZXMuQXV0aG5SZXF1ZXN0CisKKyAgICAjIFRoZSBzZXJ2ZXIgc2hvdWxkIGFkdmVy dGlzZSBleGFjdGx5IG9uZSBtZWNoYW5pc20uCisgICAgYXNzZXJ0IHJlc3AucGF5bG9hZC50eXBl ID09IHBxMy5hdXRobi5TQVNMCisgICAgYXNzZXJ0IHJlc3AucGF5bG9hZC5ib2R5ID09IFtiIk9B VVRIQkVBUkVSIiwgYiIiXQorCisKK2RlZiBzZW5kX2luaXRpYWxfcmVzcG9uc2UoY29ubiwgKiwg YXV0aD1Ob25lLCBiZWFyZXI9Tm9uZSk6CisgICAgIiIiCisgICAgU2VuZHMgdGhlIE9BVVRIQkVB UkVSIGluaXRpYWwgcmVzcG9uc2Ugb24gdGhlIGNvbm5lY3Rpb24sIHVzaW5nIHRoZSBnaXZlbgor ICAgIGJlYXJlciB0b2tlbi4gQWx0ZXJuYXRpdmVseSB0byBhIGJlYXJlciB0b2tlbiwgdGhlIGlu aXRpYWwgcmVzcG9uc2UncyBhdXRoCisgICAgZmllbGQgbWF5IGJlIGV4cGxpY2l0bHkgc3BlY2lm aWVkIHRvIHRlc3QgY29ybmVyIGNhc2VzLgorICAgICIiIgorICAgIGlmIGJlYXJlciBpcyBub3Qg Tm9uZSBhbmQgYXV0aCBpcyBub3QgTm9uZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZXhh Y3RseSBvbmUgb2YgdGhlIGF1dGggYW5kIGJlYXJlciBrd2FyZ3MgbXVzdCBiZSBzZXQiKQorCisg ICAgaWYgYmVhcmVyIGlzIG5vdCBOb25lOgorICAgICAgICBhdXRoID0gYiJCZWFyZXIgIiArIGJl YXJlcgorCisgICAgaWYgYXV0aCBpcyBOb25lOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJl eGFjdGx5IG9uZSBvZiB0aGUgYXV0aCBhbmQgYmVhcmVyIGt3YXJncyBtdXN0IGJlIHNldCIpCisK KyAgICBpbml0aWFsID0gcHEzLlNBU0xJbml0aWFsUmVzcG9uc2UuYnVpbGQoCisgICAgICAgIGRp Y3QoCisgICAgICAgICAgICBuYW1lPWIiT0FVVEhCRUFSRVIiLAorICAgICAgICAgICAgZGF0YT1i Im4sLFx4MDFhdXRoPSIgKyBhdXRoICsgYiJceDAxXHgwMSIsCisgICAgICAgICkKKyAgICApCisg ICAgcHEzLnNlbmQoY29ubiwgcHEzLnR5cGVzLlBhc3N3b3JkTWVzc2FnZSwgaW5pdGlhbCkKKwor CitkZWYgZXhwZWN0X2hhbmRzaGFrZV9zdWNjZXNzKGNvbm4pOgorICAgICIiIgorICAgIFZhbGlk YXRlcyB0aGF0IHRoZSBzZXJ2ZXIgcmVzcG9uZHMgd2l0aCBhbiBBdXRobk9LIG1lc3NhZ2UsIGFu ZCB0aGVuIGRyYWlucworICAgIHRoZSBjb25uZWN0aW9uIHVudGlsIGEgUmVhZHlGb3JRdWVyeSBt ZXNzYWdlIGlzIHJlY2VpdmVkLgorICAgICIiIgorICAgIHJlc3AgPSBwcTMucmVjdjEoY29ubikK KworICAgIGFzc2VydCByZXNwLnR5cGUgPT0gcHEzLnR5cGVzLkF1dGhuUmVxdWVzdAorICAgIGFz c2VydCByZXNwLnBheWxvYWQudHlwZSA9PSBwcTMuYXV0aG4uT0sKKyAgICBhc3NlcnQgbm90IHJl c3AucGF5bG9hZC5ib2R5CisKKyAgICByZWNlaXZlX3VudGlsKGNvbm4sIHBxMy50eXBlcy5SZWFk eUZvclF1ZXJ5KQorCisKK2RlZiBleHBlY3RfaGFuZHNoYWtlX2ZhaWx1cmUoY29ubiwgb2F1dGhf Y3R4KToKKyAgICAiIiIKKyAgICBQZXJmb3JtcyB0aGUgT0FVVEhCRUFSRVIgU0FTTCBmYWlsdXJl ICJoYW5kc2hha2UiIGFuZCB2YWxpZGF0ZXMgdGhlIHNlcnZlcidzCisgICAgc2lkZSBvZiB0aGUg Y29udmVyc2F0aW9uLCBpbmNsdWRpbmcgdGhlIGZpbmFsIEVycm9yUmVzcG9uc2UuCisgICAgIiIi CisKKyAgICAjIFdlIGV4cGVjdCBhIGRpc2NvdmVyeSAiY2hhbGxlbmdlIiBiYWNrIGZyb20gdGhl IHNlcnZlciBiZWZvcmUgdGhlIGF1dGhuCisgICAgIyBmYWlsdXJlIG1lc3NhZ2UuCisgICAgcmVz cCA9IHBxMy5yZWN2MShjb25uKQorICAgIGFzc2VydCByZXNwLnR5cGUgPT0gcHEzLnR5cGVzLkF1 dGhuUmVxdWVzdAorCisgICAgcmVxID0gcmVzcC5wYXlsb2FkCisgICAgYXNzZXJ0IHJlcS50eXBl ID09IHBxMy5hdXRobi5TQVNMQ29udGludWUKKworICAgIGJvZHkgPSBqc29uLmxvYWRzKHJlcS5i b2R5KQorICAgIGFzc2VydCBib2R5WyJzdGF0dXMiXSA9PSAiaW52YWxpZF90b2tlbiIKKyAgICBh c3NlcnQgYm9keVsic2NvcGUiXSA9PSBvYXV0aF9jdHguc2NvcGUKKworICAgIGV4cGVjdGVkX2Nv bmZpZyA9IG9hdXRoX2N0eC5pc3N1ZXIgKyAiLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0 aW9uIgorICAgIGFzc2VydCBib2R5WyJvcGVuaWQtY29uZmlndXJhdGlvbiJdID09IGV4cGVjdGVk X2NvbmZpZworCisgICAgIyBTZW5kIHRoZSBkdW1teSByZXNwb25zZSB0byBjb21wbGV0ZSB0aGUg ZmFpbGVkIGhhbmRzaGFrZS4KKyAgICBwcTMuc2VuZChjb25uLCBwcTMudHlwZXMuUGFzc3dvcmRN ZXNzYWdlLCBiIlx4MDEiKQorICAgIHJlc3AgPSBwcTMucmVjdjEoY29ubikKKworICAgIGVyciA9 IEV4cGVjdGVkRXJyb3IoSU5WQUxJRF9BVVRIT1JJWkFUSU9OX0VSUkNPREUsICJiZWFyZXIgYXV0 aGVudGljYXRpb24gZmFpbGVkIikKKyAgICBlcnIubWF0Y2gocmVzcCkKKworCitkZWYgcmVjZWl2 ZV91bnRpbChjb25uLCB0eXBlKToKKyAgICAiIiIKKyAgICByZWNlaXZlX3VudGlsIHB1bGxzIHBh Y2tldHMgb2ZmIHRoZSBwcTMgY29ubmVjdGlvbiB1bnRpbCBhIHBhY2tldCB3aXRoIHRoZQorICAg IGRlc2lyZWQgdHlwZSBpcyBmb3VuZCwgb3IgYW4gZXJyb3IgcmVzcG9uc2UgaXMgcmVjZWl2ZWQu CisgICAgIiIiCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgcGt0ID0gcHEzLnJlY3YxKGNvbm4p CisKKyAgICAgICAgaWYgcGt0LnR5cGUgPT0gdHlwZToKKyAgICAgICAgICAgIHJldHVybiBwa3QK KyAgICAgICAgZWxpZiBwa3QudHlwZSA9PSBwcTMudHlwZXMuRXJyb3JSZXNwb25zZToKKyAgICAg ICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKKyAgICAgICAgICAgICAgICBmInJlY2VpdmVkIGVy cm9yIHJlc3BvbnNlIGZyb20gcGVlcjoge3BrdC5wYXlsb2FkLmZpZWxkcyFyfSIKKyAgICAgICAg ICAgICkKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoInRva2VuX2xlbiIsIFsxNiwgMTAy NCwgNDA5Nl0pCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoCisgICAgImF1dGhfcHJlZml4IiwK KyAgICBbCisgICAgICAgIGIiQmVhcmVyICIsCisgICAgICAgIGIiYmVhcmVyICIsCisgICAgICAg IGIiQmVhcmVyICAgICIsCisgICAgXSwKKykKK2RlZiB0ZXN0X29hdXRoKGNvbm4sIG9hdXRoX2N0 eCwgYmVhcmVyX3Rva2VuLCBhdXRoX3ByZWZpeCwgdG9rZW5fbGVuKToKKyAgICBiZWdpbl9vYXV0 aF9oYW5kc2hha2UoY29ubiwgb2F1dGhfY3R4KQorCisgICAgIyBHZW5lcmF0ZSBvdXIgYmVhcmVy IHRva2VuIHdpdGggdGhlIGRlc2lyZWQgbGVuZ3RoLgorICAgIHRva2VuID0gYmVhcmVyX3Rva2Vu KHNpemU9dG9rZW5fbGVuKQorICAgIGF1dGggPSBhdXRoX3ByZWZpeCArIHRva2VuCisKKyAgICBz ZW5kX2luaXRpYWxfcmVzcG9uc2UoY29ubiwgYXV0aD1hdXRoKQorICAgIGV4cGVjdF9oYW5kc2hh a2Vfc3VjY2Vzcyhjb25uKQorCisgICAgIyBNYWtlIHN1cmUgdGhhdCB0aGUgc2VydmVyIGhhcyBu b3Qgc2V0IGFuIGF1dGhlbnRpY2F0ZWQgSUQuCisgICAgcHEzLnNlbmQoY29ubiwgcHEzLnR5cGVz LlF1ZXJ5LCBxdWVyeT1iIlNFTEVDVCBhdXRobl9pZCgpOyIpCisgICAgcmVzcCA9IHJlY2VpdmVf dW50aWwoY29ubiwgcHEzLnR5cGVzLkRhdGFSb3cpCisKKyAgICByb3cgPSByZXNwLnBheWxvYWQK KyAgICBhc3NlcnQgcm93LmNvbHVtbnMgPT0gW05vbmVdCisKKworQHB5dGVzdC5tYXJrLnBhcmFt ZXRyaXplKAorICAgICJ0b2tlbl92YWx1ZSIsCisgICAgWworICAgICAgICAiYWJjZHpBPT0iLAor ICAgICAgICAiMTIzNDU2TT0iLAorICAgICAgICAieC0uX34rL3giLAorICAgIF0sCispCitkZWYg dGVzdF9vYXV0aF9iZWFyZXJfY29ybmVyX2Nhc2VzKGNvbm4sIG9hdXRoX2N0eCwgYmVhcmVyX3Rv a2VuLCB0b2tlbl92YWx1ZSk6CisgICAgYmVnaW5fb2F1dGhfaGFuZHNoYWtlKGNvbm4sIG9hdXRo X2N0eCkKKworICAgIHNlbmRfaW5pdGlhbF9yZXNwb25zZShjb25uLCBiZWFyZXI9YmVhcmVyX3Rv a2VuKHRva2VuX3ZhbHVlKSkKKworICAgIGV4cGVjdF9oYW5kc2hha2Vfc3VjY2Vzcyhjb25uKQor CisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgKKyAgICAidXNlcixhdXRobl9pZCxzaG91bGRf c3VjY2VlZCIsCisgICAgWworICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBsYW1i ZGEgY3R4OiBjdHgudXNlciwKKyAgICAgICAgICAgIGxhbWJkYSBjdHg6IGN0eC51c2VyLAorICAg ICAgICAgICAgVHJ1ZSwKKyAgICAgICAgICAgIGlkPSJ2YWxpZGF0b3IgYXV0aG46IHN1Y2NlZWRz IHdoZW4gYXV0aG5faWQgPT0gdXNlcm5hbWUiLAorICAgICAgICApLAorICAgICAgICBweXRlc3Qu cGFyYW0oCisgICAgICAgICAgICBsYW1iZGEgY3R4OiBjdHgudXNlciwKKyAgICAgICAgICAgIGxh bWJkYSBjdHg6IE5vbmUsCisgICAgICAgICAgICBGYWxzZSwKKyAgICAgICAgICAgIGlkPSJ2YWxp ZGF0b3IgYXV0aG46IGZhaWxzIHdoZW4gYXV0aG5faWQgaXMgbm90IHNldCIsCisgICAgICAgICks CisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGxhbWJkYSBjdHg6IGN0eC51c2Vy LAorICAgICAgICAgICAgbGFtYmRhIGN0eDogY3R4LmF1dGh6X3VzZXIsCisgICAgICAgICAgICBG YWxzZSwKKyAgICAgICAgICAgIGlkPSJ2YWxpZGF0b3IgYXV0aG46IGZhaWxzIHdoZW4gYXV0aG5f aWQgIT0gdXNlcm5hbWUiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAg ICAgICAgICBsYW1iZGEgY3R4OiBjdHgubWFwX3VzZXIsCisgICAgICAgICAgICBsYW1iZGEgY3R4 OiBjdHgubWFwX3VzZXIgKyAiQGV4YW1wbGUuY29tIiwKKyAgICAgICAgICAgIFRydWUsCisgICAg ICAgICAgICBpZD0idmFsaWRhdG9yIHdpdGggbWFwOiBzdWNjZWVkcyB3aGVuIGF1dGhuX2lkIG1h dGNoZXMgbWFwIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAg ICAgbGFtYmRhIGN0eDogY3R4Lm1hcF91c2VyLAorICAgICAgICAgICAgbGFtYmRhIGN0eDogTm9u ZSwKKyAgICAgICAgICAgIEZhbHNlLAorICAgICAgICAgICAgaWQ9InZhbGlkYXRvciB3aXRoIG1h cDogZmFpbHMgd2hlbiBhdXRobl9pZCBpcyBub3Qgc2V0IiwKKyAgICAgICAgKSwKKyAgICAgICAg cHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgbGFtYmRhIGN0eDogY3R4Lm1hcF91c2VyLAorICAg ICAgICAgICAgbGFtYmRhIGN0eDogY3R4Lm1hcF91c2VyICsgIkBleGFtcGxlLm5ldCIsCisgICAg ICAgICAgICBGYWxzZSwKKyAgICAgICAgICAgIGlkPSJ2YWxpZGF0b3Igd2l0aCBtYXA6IGZhaWxz IHdoZW4gYXV0aG5faWQgZG9lc24ndCBtYXRjaCBtYXAiLAorICAgICAgICApLAorICAgICAgICBw eXRlc3QucGFyYW0oCisgICAgICAgICAgICBsYW1iZGEgY3R4OiBjdHguYXV0aHpfdXNlciwKKyAg ICAgICAgICAgIGxhbWJkYSBjdHg6IE5vbmUsCisgICAgICAgICAgICBUcnVlLAorICAgICAgICAg ICAgaWQ9InZhbGlkYXRvciBhdXRoejogc3VjY2VlZHMgd2l0aCBubyBhdXRobl9pZCIsCisgICAg ICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGxhbWJkYSBjdHg6IGN0 eC5hdXRoel91c2VyLAorICAgICAgICAgICAgbGFtYmRhIGN0eDogIiIsCisgICAgICAgICAgICBU cnVlLAorICAgICAgICAgICAgaWQ9InZhbGlkYXRvciBhdXRoejogc3VjY2VlZHMgd2l0aCBlbXB0 eSBhdXRobl9pZCIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAg ICAgIGxhbWJkYSBjdHg6IGN0eC5hdXRoel91c2VyLAorICAgICAgICAgICAgbGFtYmRhIGN0eDog InBvc3RncmVzIiwKKyAgICAgICAgICAgIFRydWUsCisgICAgICAgICAgICBpZD0idmFsaWRhdG9y IGF1dGh6OiBzdWNjZWVkcyB3aXRoIGJhc2ljIHVzZXJuYW1lIiwKKyAgICAgICAgKSwKKyAgICAg ICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgbGFtYmRhIGN0eDogY3R4LmF1dGh6X3VzZXIs CisgICAgICAgICAgICBsYW1iZGEgY3R4OiAibWVAZXhhbXBsZS5jb20iLAorICAgICAgICAgICAg VHJ1ZSwKKyAgICAgICAgICAgIGlkPSJ2YWxpZGF0b3IgYXV0aHo6IHN1Y2NlZWRzIHdpdGggZW1h aWwgYWRkcmVzcyIsCisgICAgICAgICksCisgICAgXSwKKykKK2RlZiB0ZXN0X29hdXRoX2F1dGhu X2lkKGNvbm4sIG9hdXRoX2N0eCwgYmVhcmVyX3Rva2VuLCB1c2VyLCBhdXRobl9pZCwgc2hvdWxk X3N1Y2NlZWQpOgorICAgIHRva2VuID0gTm9uZQorCisgICAgYXV0aG5faWQgPSBhdXRobl9pZChv YXV0aF9jdHgpCisgICAgaWYgYXV0aG5faWQgaXMgbm90IE5vbmU6CisgICAgICAgIGF1dGhuX2lk ID0gYXV0aG5faWQuZW5jb2RlKCJhc2NpaSIpCisKKyAgICAgICAgIyBBcyBhIGhhY2sgdG8gZ2V0 IHRoZSB2YWxpZGF0b3IgdG8gcmVmbGVjdCBhcmJpdHJhcnkgb3V0cHV0IGZyb20gdGhpcworICAg ICAgICAjIHRlc3QsIGVuY29kZSB0aGUgZGVzaXJlZCBvdXRwdXQgYXMgYSBiYXNlNjQgdG9rZW4u IFRoZSB2YWxpZGF0b3Igd2lsbAorICAgICAgICAjIGtleSBvbiB0aGUgbGVhZGluZyAib3V0cHV0 PSIgdG8gZGlmZmVyZW50aWF0ZSB0aGlzIGZyb20gdGhlIHJhbmRvbQorICAgICAgICAjIHRva2Vu cyBnZW5lcmF0ZWQgYnkgc2VjcmV0cy50b2tlbl91cmxzYWZlKCkuCisgICAgICAgIG91dHB1dCA9 IGIib3V0cHV0PSIgKyBhdXRobl9pZCArIGIiXG4iCisgICAgICAgIHRva2VuID0gYmFzZTY0LnVy bHNhZmVfYjY0ZW5jb2RlKG91dHB1dCkKKworICAgIHRva2VuID0gYmVhcmVyX3Rva2VuKHRva2Vu KQorICAgIHVzZXJuYW1lID0gdXNlcihvYXV0aF9jdHgpCisKKyAgICBiZWdpbl9vYXV0aF9oYW5k c2hha2UoY29ubiwgb2F1dGhfY3R4LCB1c2VyPXVzZXJuYW1lKQorICAgIHNlbmRfaW5pdGlhbF9y ZXNwb25zZShjb25uLCBiZWFyZXI9dG9rZW4pCisKKyAgICBpZiBub3Qgc2hvdWxkX3N1Y2NlZWQ6 CisgICAgICAgIGV4cGVjdF9oYW5kc2hha2VfZmFpbHVyZShjb25uLCBvYXV0aF9jdHgpCisgICAg ICAgIHJldHVybgorCisgICAgZXhwZWN0X2hhbmRzaGFrZV9zdWNjZXNzKGNvbm4pCisKKyAgICAj IENoZWNrIHRoZSByZXBvcnRlZCBhdXRobl9pZC4KKyAgICBwcTMuc2VuZChjb25uLCBwcTMudHlw ZXMuUXVlcnksIHF1ZXJ5PWIiU0VMRUNUIGF1dGhuX2lkKCk7IikKKyAgICByZXNwID0gcmVjZWl2 ZV91bnRpbChjb25uLCBwcTMudHlwZXMuRGF0YVJvdykKKworICAgIHJvdyA9IHJlc3AucGF5bG9h ZAorICAgIGFzc2VydCByb3cuY29sdW1ucyA9PSBbYXV0aG5faWRdCisKKworY2xhc3MgRXhwZWN0 ZWRFcnJvcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb2RlLCBtc2c9Tm9uZSwg ZGV0YWlsPU5vbmUpOgorICAgICAgICBzZWxmLmNvZGUgPSBjb2RlCisgICAgICAgIHNlbGYubXNn ID0gbXNnCisgICAgICAgIHNlbGYuZGV0YWlsID0gZGV0YWlsCisKKyAgICAgICAgIyBQcm90ZWN0 IGFnYWluc3QgdGhlIGZvb3RndW4gb2YgYW4gYWNjaWRlbnRhbCBlbXB0eSBzdHJpbmcsIHdoaWNo IHdpbGwKKyAgICAgICAgIyAibWF0Y2giIGFueXRoaW5nLiBJZiB5b3UgZG9uJ3Qgd2FudCB0byBt YXRjaCBtZXNzYWdlIG9yIGRldGFpbCwganVzdAorICAgICAgICAjIGRvbid0IHBhc3MgdGhlbS4K KyAgICAgICAgaWYgc2VsZi5tc2cgPT0gIiI6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9y KCJtc2cgbXVzdCBiZSBub24tZW1wdHkgb3IgTm9uZSIpCisgICAgICAgIGlmIHNlbGYuZGV0YWls ID09ICIiOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZGV0YWlsIG11c3QgYmUgbm9u LWVtcHR5IG9yIE5vbmUiKQorCisgICAgZGVmIF9nZXRmaWVsZChzZWxmLCByZXNwLCB0eXBlKToK KyAgICAgICAgIiIiCisgICAgICAgIFNlYXJjaGVzIGFuIEVycm9yUmVzcG9uc2UgZm9yIGEgc2lu Z2xlIGZpZWxkIG9mIHRoZSBnaXZlbiB0eXBlIChlLmcuCisgICAgICAgICJNIiwgIkMiLCAiRCIp IGFuZCByZXR1cm5zIGl0cyB2YWx1ZS4gQXNzZXJ0cyBpZiBpdCBkb2Vzbid0IGZpbmQgZXhhY3Rs eQorICAgICAgICBvbmUgZmllbGQuCisgICAgICAgICIiIgorICAgICAgICBwcmVmaXggPSB0eXBl LmVuY29kZSgiYXNjaWkiKQorICAgICAgICBmaWVsZHMgPSBbZiBmb3IgZiBpbiByZXNwLnBheWxv YWQuZmllbGRzIGlmIGYuc3RhcnRzd2l0aChwcmVmaXgpXQorCisgICAgICAgIGFzc2VydCBsZW4o ZmllbGRzKSA9PSAxCisgICAgICAgIHJldHVybiBmaWVsZHNbMF1bMTpdICAjIHN0cmlwIG9mZiB0 aGUgdHlwZSBieXRlCisKKyAgICBkZWYgbWF0Y2goc2VsZiwgcmVzcCk6CisgICAgICAgICIiIgor ICAgICAgICBDaGVja3MgdGhhdCB0aGUgZ2l2ZW4gcmVzcG9uc2UgbWF0Y2hlcyB0aGUgZXhwZWN0 ZWQgY29kZSwgbWVzc2FnZSwgYW5kCisgICAgICAgIGRldGFpbCAoaWYgZ2l2ZW4pLiBUaGUgZXJy b3IgY29kZSBtdXN0IG1hdGNoIGV4YWN0bHkuIFRoZSBleHBlY3RlZAorICAgICAgICBtZXNzYWdl IGFuZCBkZXRhaWwgbXVzdCBiZSBjb250YWluZWQgd2l0aGluIHRoZSBhY3R1YWwgc3RyaW5ncy4K KyAgICAgICAgIiIiCisgICAgICAgIGFzc2VydCByZXNwLnR5cGUgPT0gcHEzLnR5cGVzLkVycm9y UmVzcG9uc2UKKworICAgICAgICBjb2RlID0gc2VsZi5fZ2V0ZmllbGQocmVzcCwgIkMiKQorICAg ICAgICBhc3NlcnQgY29kZSA9PSBzZWxmLmNvZGUKKworICAgICAgICBpZiBzZWxmLm1zZzoKKyAg ICAgICAgICAgIG1zZyA9IHNlbGYuX2dldGZpZWxkKHJlc3AsICJNIikKKyAgICAgICAgICAgIGV4 cGVjdGVkID0gc2VsZi5tc2cuZW5jb2RlKCJ1dGYtOCIpCisgICAgICAgICAgICBhc3NlcnQgZXhw ZWN0ZWQgaW4gbXNnCisKKyAgICAgICAgaWYgc2VsZi5kZXRhaWw6CisgICAgICAgICAgICBkZXRh aWwgPSBzZWxmLl9nZXRmaWVsZChyZXNwLCAiRCIpCisgICAgICAgICAgICBleHBlY3RlZCA9IHNl bGYuZGV0YWlsLmVuY29kZSgidXRmLTgiKQorICAgICAgICAgICAgYXNzZXJ0IGV4cGVjdGVkIGlu IGRldGFpbAorCisKK2RlZiB0ZXN0X29hdXRoX3JlamVjdGVkX2JlYXJlcihjb25uLCBvYXV0aF9j dHgsIGJlYXJlcl90b2tlbik6CisgICAgIyBHZW5lcmF0ZSBhIG5ldyBiZWFyZXIgdG9rZW4sIHdo aWNoIHdlIHdpbGwgcHJvY2VlZCBub3QgdG8gdXNlLgorICAgIF8gPSBiZWFyZXJfdG9rZW4oKQor CisgICAgYmVnaW5fb2F1dGhfaGFuZHNoYWtlKGNvbm4sIG9hdXRoX2N0eCkKKworICAgICMgU2Vu ZCBhIGJlYXJlciB0b2tlbiB0aGF0IGRvZXNuJ3QgbWF0Y2ggd2hhdCB0aGUgdmFsaWRhdG9yIGV4 cGVjdHMuIEl0CisgICAgIyBzaG91bGQgZmFpbCB0aGUgY29ubmVjdGlvbi4KKyAgICBzZW5kX2lu aXRpYWxfcmVzcG9uc2UoY29ubiwgYmVhcmVyPWIieHh4eHh4IikKKworICAgIGV4cGVjdF9oYW5k c2hha2VfZmFpbHVyZShjb25uLCBvYXV0aF9jdHgpCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRy aXplKAorICAgICJiYWRfYmVhcmVyIiwKKyAgICBbCisgICAgICAgIGIiQmVhcmVyICAgICIsCisg ICAgICAgIGIiQmVhcmVyIGE9PT1iIiwKKyAgICAgICAgYiJCZWFyZXIgaGVsbG8hIiwKKyAgICAg ICAgYiJCZWFyZXIgbWVAZXhhbXBsZS5jb20iLAorICAgICAgICBiJ09BdXRoIHJlYWxtPSJFeGFt cGxlIicsCisgICAgICAgIGIiIiwKKyAgICBdLAorKQorZGVmIHRlc3Rfb2F1dGhfaW52YWxpZF9i ZWFyZXIoY29ubiwgb2F1dGhfY3R4LCBiZWFyZXJfdG9rZW4sIGJhZF9iZWFyZXIpOgorICAgICMg VGVsbCB0aGUgdmFsaWRhdG9yIHRvIGFjY2VwdCBhbnkgdG9rZW4uIFRoaXMgZW5zdXJlcyB0aGF0 IHRoZSBpbnZhbGlkCisgICAgIyBiZWFyZXIgdG9rZW5zIGFyZSByZWplY3RlZCBiZWZvcmUgdGhl IHZhbGlkYXRpb24gc3RlcC4KKyAgICBfID0gYmVhcmVyX3Rva2VuKGFjY2VwdF9hbnk9VHJ1ZSkK KworICAgIGJlZ2luX29hdXRoX2hhbmRzaGFrZShjb25uLCBvYXV0aF9jdHgpCisgICAgc2VuZF9p bml0aWFsX3Jlc3BvbnNlKGNvbm4sIGF1dGg9YmFkX2JlYXJlcikKKworICAgIGV4cGVjdF9oYW5k c2hha2VfZmFpbHVyZShjb25uLCBvYXV0aF9jdHgpCisKKworQHB5dGVzdC5tYXJrLnNsb3cKK0Bw eXRlc3QubWFyay5wYXJhbWV0cml6ZSgKKyAgICAicmVzcF90eXBlLHJlc3AsZXJyIiwKKyAgICBb CisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICBO b25lLAorICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgIG1hcmtzPXB5dGVzdC5tYXJrLnNs b3csCisgICAgICAgICAgICBpZD0ibm8gcmVzcG9uc2UgKGV4cGVjdCB0aW1lb3V0KSIsCisgICAg ICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIHBxMy50eXBlcy5QYXNz d29yZE1lc3NhZ2UsCisgICAgICAgICAgICBiImhlbGxvIiwKKyAgICAgICAgICAgIEV4cGVjdGVk RXJyb3IoCisgICAgICAgICAgICAgICAgUFJPVE9DT0xfVklPTEFUSU9OX0VSUkNPREUsCisgICAg ICAgICAgICAgICAgIm1hbGZvcm1lZCBPQVVUSEJFQVJFUiBtZXNzYWdlIiwKKyAgICAgICAgICAg ICAgICAiZGlkIG5vdCBzZW5kIGEga3ZzZXAgcmVzcG9uc2UiLAorICAgICAgICAgICAgKSwKKyAg ICAgICAgICAgIGlkPSJiYWQgZHVtbXkgcmVzcG9uc2UiLAorICAgICAgICApLAorICAgICAgICBw eXRlc3QucGFyYW0oCisgICAgICAgICAgICBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlLAorICAg ICAgICAgICAgYiJceDAxXHgwMSIsCisgICAgICAgICAgICBFeHBlY3RlZEVycm9yKAorICAgICAg ICAgICAgICAgIFBST1RPQ09MX1ZJT0xBVElPTl9FUlJDT0RFLAorICAgICAgICAgICAgICAgICJt YWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIsCisgICAgICAgICAgICAgICAgImRpZCBub3Qg c2VuZCBhIGt2c2VwIHJlc3BvbnNlIiwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBpZD0i bXVsdGlwbGUga3ZzZXBzIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAg ICAgICAgICAgcHEzLnR5cGVzLlF1ZXJ5LAorICAgICAgICAgICAgZGljdChxdWVyeT1iIiIpLAor ICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcihQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwgImV4 cGVjdGVkIFNBU0wgcmVzcG9uc2UiKSwKKyAgICAgICAgICAgIGlkPSJiYWQgcmVzcG9uc2UgbWVz c2FnZSB0eXBlIiwKKyAgICAgICAgKSwKKyAgICBdLAorKQorZGVmIHRlc3Rfb2F1dGhfYmFkX3Jl c3BvbnNlX3RvX2Vycm9yX2NoYWxsZW5nZShjb25uLCBvYXV0aF9jdHgsIHJlc3BfdHlwZSwgcmVz cCwgZXJyKToKKyAgICBiZWdpbl9vYXV0aF9oYW5kc2hha2UoY29ubiwgb2F1dGhfY3R4KQorCisg ICAgIyBTZW5kIGFuIGVtcHR5IGF1dGggaW5pdGlhbCByZXNwb25zZSwgd2hpY2ggd2lsbCBmb3Jj ZSBhbiBhdXRobiBmYWlsdXJlLgorICAgIHNlbmRfaW5pdGlhbF9yZXNwb25zZShjb25uLCBhdXRo PWIiIikKKworICAgICMgV2UgZXhwZWN0IGEgZGlzY292ZXJ5ICJjaGFsbGVuZ2UiIGJhY2sgZnJv bSB0aGUgc2VydmVyIGJlZm9yZSB0aGUgYXV0aG4KKyAgICAjIGZhaWx1cmUgbWVzc2FnZS4KKyAg ICBwa3QgPSBwcTMucmVjdjEoY29ubikKKyAgICBhc3NlcnQgcGt0LnR5cGUgPT0gcHEzLnR5cGVz LkF1dGhuUmVxdWVzdAorCisgICAgcmVxID0gcGt0LnBheWxvYWQKKyAgICBhc3NlcnQgcmVxLnR5 cGUgPT0gcHEzLmF1dGhuLlNBU0xDb250aW51ZQorCisgICAgYm9keSA9IGpzb24ubG9hZHMocmVx LmJvZHkpCisgICAgYXNzZXJ0IGJvZHlbInN0YXR1cyJdID09ICJpbnZhbGlkX3Rva2VuIgorCisg ICAgaWYgcmVzcF90eXBlIGlzIE5vbmU6CisgICAgICAgICMgRG8gbm90IHNlbmQgdGhlIGR1bW15 IHJlc3BvbnNlLiBXZSBzaG91bGQgdGltZSBvdXQgYW5kIG5vdCBnZXQgYQorICAgICAgICAjIHJl c3BvbnNlIGZyb20gdGhlIHNlcnZlci4KKyAgICAgICAgd2l0aCBweXRlc3QucmFpc2VzKHNvY2tl dC50aW1lb3V0KToKKyAgICAgICAgICAgIGNvbm4ucmVhZCgxKQorCisgICAgICAgICMgRG9uZSB3 aXRoIHRoZSB0ZXN0LgorICAgICAgICByZXR1cm4KKworICAgICMgU2VuZCB0aGUgYmFkIHJlc3Bv bnNlLgorICAgIHBxMy5zZW5kKGNvbm4sIHJlc3BfdHlwZSwgcmVzcCkKKworICAgICMgTWFrZSBz dXJlIHRoZSBzZXJ2ZXIgZmFpbHMgdGhlIGNvbm5lY3Rpb24gY29ycmVjdGx5LgorICAgIHBrdCA9 IHBxMy5yZWN2MShjb25uKQorICAgIGVyci5tYXRjaChwa3QpCisKKworQHB5dGVzdC5tYXJrLnBh cmFtZXRyaXplKAorICAgICJ0eXBlLHBheWxvYWQsZXJyIiwKKyAgICBbCisgICAgICAgIHB5dGVz dC5wYXJhbSgKKyAgICAgICAgICAgIHBxMy50eXBlcy5FcnJvclJlc3BvbnNlLAorICAgICAgICAg ICAgZGljdChmaWVsZHM9W2IiIl0pLAorICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcihQUk9UT0NP TF9WSU9MQVRJT05fRVJSQ09ERSwgImV4cGVjdGVkIFNBU0wgcmVzcG9uc2UiKSwKKyAgICAgICAg ICAgIGlkPSJlcnJvciByZXNwb25zZSBpbiBpbml0aWFsIG1lc3NhZ2UiLAorICAgICAgICApLAor ICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBwcTMudHlwZXMuUGFzc3dvcmRNZXNz YWdlLAorICAgICAgICAgICAgYiJ4IiAqIChNQVhfU0FTTF9NRVNTQUdFX0xFTkdUSCArIDEpLAor ICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcigKKyAgICAgICAgICAgICAgICBJTlZBTElEX0FVVEhP UklaQVRJT05fRVJSQ09ERSwgImJlYXJlciBhdXRoZW50aWNhdGlvbiBmYWlsZWQiCisgICAgICAg ICAgICApLAorICAgICAgICAgICAgaWQ9Im92ZXJsb25nIGluaXRpYWwgcmVzcG9uc2UgZGF0YSIs CisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIHBxMy50eXBl cy5QYXNzd29yZE1lc3NhZ2UsCisgICAgICAgICAgICBwcTMuU0FTTEluaXRpYWxSZXNwb25zZS5i dWlsZChkaWN0KG5hbWU9YiJTQ1JBTS1TSEEtMjU2IikpLAorICAgICAgICAgICAgRXhwZWN0ZWRF cnJvcigKKyAgICAgICAgICAgICAgICBQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwgImludmFs aWQgU0FTTCBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc20iCisgICAgICAgICAgICApLAorICAgICAg ICAgICAgaWQ9ImJhZCBTQVNMIG1lY2hhbmlzbSBzZWxlY3Rpb24iLAorICAgICAgICApLAorICAg ICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdl LAorICAgICAgICAgICAgcHEzLlNBU0xJbml0aWFsUmVzcG9uc2UuYnVpbGQoZGljdChuYW1lPWIi T0FVVEhCRUFSRVIiLCBsZW49MiwgZGF0YT1iIngiKSksCisgICAgICAgICAgICBFeHBlY3RlZEVy cm9yKFBST1RPQ09MX1ZJT0xBVElPTl9FUlJDT0RFLCAiaW5zdWZmaWNpZW50IGRhdGEiKSwKKyAg ICAgICAgICAgIGlkPSJTQVNMIGRhdGEgdW5kZXJmbG93IiwKKyAgICAgICAgKSwKKyAgICAgICAg cHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgcHEzLnR5cGVzLlBhc3N3b3JkTWVzc2FnZSwKKyAg ICAgICAgICAgIHBxMy5TQVNMSW5pdGlhbFJlc3BvbnNlLmJ1aWxkKGRpY3QobmFtZT1iIk9BVVRI QkVBUkVSIiwgbGVuPTAsIGRhdGE9YiJ4IikpLAorICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcihQ Uk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwgImludmFsaWQgbWVzc2FnZSBmb3JtYXQiKSwKKyAg ICAgICAgICAgIGlkPSJTQVNMIGRhdGEgb3ZlcmZsb3ciLAorICAgICAgICApLAorICAgICAgICBw eXRlc3QucGFyYW0oCisgICAgICAgICAgICBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlLAorICAg ICAgICAgICAgcHEzLlNBU0xJbml0aWFsUmVzcG9uc2UuYnVpbGQoZGljdChuYW1lPWIiT0FVVEhC RUFSRVIiLCBkYXRhPWIiIikpLAorICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcigKKyAgICAgICAg ICAgICAgICBQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwKKyAgICAgICAgICAgICAgICAibWFs Zm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiLAorICAgICAgICAgICAgICAgICJtZXNzYWdlIGlz IGVtcHR5IiwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBpZD0iZW1wdHkiLAorICAgICAg ICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBwcTMudHlwZXMuUGFzc3dv cmRNZXNzYWdlLAorICAgICAgICAgICAgcHEzLlNBU0xJbml0aWFsUmVzcG9uc2UuYnVpbGQoCisg ICAgICAgICAgICAgICAgZGljdChuYW1lPWIiT0FVVEhCRUFSRVIiLCBkYXRhPWIibiwsXHgwMWF1 dGg9XHgwMVx4MDFcMCIpCisgICAgICAgICAgICApLAorICAgICAgICAgICAgRXhwZWN0ZWRFcnJv cigKKyAgICAgICAgICAgICAgICBQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwKKyAgICAgICAg ICAgICAgICAibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiLAorICAgICAgICAgICAgICAg ICJsZW5ndGggZG9lcyBub3QgbWF0Y2ggaW5wdXQgbGVuZ3RoIiwKKyAgICAgICAgICAgICksCisg ICAgICAgICAgICBpZD0iY29udGFpbnMgbnVsbCBieXRlIiwKKyAgICAgICAgKSwKKyAgICAgICAg cHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgcHEzLnR5cGVzLlBhc3N3b3JkTWVzc2FnZSwKKyAg ICAgICAgICAgIHBxMy5TQVNMSW5pdGlhbFJlc3BvbnNlLmJ1aWxkKGRpY3QobmFtZT1iIk9BVVRI QkVBUkVSIiwgZGF0YT1iIlx4MDEiKSksCisgICAgICAgICAgICBFeHBlY3RlZEVycm9yKAorICAg ICAgICAgICAgICAgIFBST1RPQ09MX1ZJT0xBVElPTl9FUlJDT0RFLAorICAgICAgICAgICAgICAg ICJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIsCisgICAgICAgICAgICAgICAgIlVuZXhw ZWN0ZWQgY2hhbm5lbC1iaW5kaW5nIGZsYWciLCAgIyBYWFggdGhpcyBpcyBhIGJpdCBzdHJhbmdl CisgICAgICAgICAgICApLAorICAgICAgICAgICAgaWQ9ImluaXRpYWwgZXJyb3IgcmVzcG9uc2Ui LAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBwcTMudHlw ZXMuUGFzc3dvcmRNZXNzYWdlLAorICAgICAgICAgICAgcHEzLlNBU0xJbml0aWFsUmVzcG9uc2Uu YnVpbGQoCisgICAgICAgICAgICAgICAgZGljdChuYW1lPWIiT0FVVEhCRUFSRVIiLCBkYXRhPWIi cD10bHMtc2VydmVyLWVuZC1wb2ludCwsXHgwMSIpCisgICAgICAgICAgICApLAorICAgICAgICAg ICAgRXhwZWN0ZWRFcnJvcigKKyAgICAgICAgICAgICAgICBQUk9UT0NPTF9WSU9MQVRJT05fRVJS Q09ERSwKKyAgICAgICAgICAgICAgICAibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiLAor ICAgICAgICAgICAgICAgICJzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBjaGFubmVsIGJpbmRpbmci LAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIGlkPSJ1c2VzIGNoYW5uZWwgYmluZGluZyIs CisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIHBxMy50eXBl cy5QYXNzd29yZE1lc3NhZ2UsCisgICAgICAgICAgICBwcTMuU0FTTEluaXRpYWxSZXNwb25zZS5i dWlsZChkaWN0KG5hbWU9YiJPQVVUSEJFQVJFUiIsIGRhdGE9YiJ4LCxceDAxIikpLAorICAgICAg ICAgICAgRXhwZWN0ZWRFcnJvcigKKyAgICAgICAgICAgICAgICBQUk9UT0NPTF9WSU9MQVRJT05f RVJSQ09ERSwKKyAgICAgICAgICAgICAgICAibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2Ui LAorICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkIGNoYW5uZWwtYmluZGluZyBmbGFnIiwKKyAg ICAgICAgICAgICksCisgICAgICAgICAgICBpZD0iaW52YWxpZCBjaGFubmVsIGJpbmRpbmcgc3Bl Y2lmaWVyIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAg cHEzLnR5cGVzLlBhc3N3b3JkTWVzc2FnZSwKKyAgICAgICAgICAgIHBxMy5TQVNMSW5pdGlhbFJl c3BvbnNlLmJ1aWxkKGRpY3QobmFtZT1iIk9BVVRIQkVBUkVSIiwgZGF0YT1iInkiKSksCisgICAg ICAgICAgICBFeHBlY3RlZEVycm9yKAorICAgICAgICAgICAgICAgIFBST1RPQ09MX1ZJT0xBVElP Tl9FUlJDT0RFLAorICAgICAgICAgICAgICAgICJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2Fn ZSIsCisgICAgICAgICAgICAgICAgIkNvbW1hIGV4cGVjdGVkIiwKKyAgICAgICAgICAgICksCisg ICAgICAgICAgICBpZD0iYmFkIEdTMiBoZWFkZXI6IG1pc3NpbmcgY2hhbm5lbCBiaW5kaW5nIHRl cm1pbmF0b3IiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAg ICBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlLAorICAgICAgICAgICAgcHEzLlNBU0xJbml0aWFs UmVzcG9uc2UuYnVpbGQoZGljdChuYW1lPWIiT0FVVEhCRUFSRVIiLCBkYXRhPWIieSxhIikpLAor ICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcigKKyAgICAgICAgICAgICAgICBGRUFUVVJFX05PVF9T VVBQT1JURURfRVJSQ09ERSwKKyAgICAgICAgICAgICAgICAiY2xpZW50IHVzZXMgYXV0aG9yaXph dGlvbiBpZGVudGl0eSIsCisgICAgICAgICAgICApLAorICAgICAgICAgICAgaWQ9ImJhZCBHUzIg aGVhZGVyOiBhdXRoemlkIGluIHVzZSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJh bSgKKyAgICAgICAgICAgIHBxMy50eXBlcy5QYXNzd29yZE1lc3NhZ2UsCisgICAgICAgICAgICBw cTMuU0FTTEluaXRpYWxSZXNwb25zZS5idWlsZChkaWN0KG5hbWU9YiJPQVVUSEJFQVJFUiIsIGRh dGE9YiJ5LGIsIikpLAorICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcigKKyAgICAgICAgICAgICAg ICBQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwKKyAgICAgICAgICAgICAgICAibWFsZm9ybWVk IE9BVVRIQkVBUkVSIG1lc3NhZ2UiLAorICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkIGF0dHJp YnV0ZSIsCisgICAgICAgICAgICApLAorICAgICAgICAgICAgaWQ9ImJhZCBHUzIgaGVhZGVyOiBl eHRyYSBhdHRyaWJ1dGUiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAg ICAgICAgICBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlLAorICAgICAgICAgICAgcHEzLlNBU0xJ bml0aWFsUmVzcG9uc2UuYnVpbGQoZGljdChuYW1lPWIiT0FVVEhCRUFSRVIiLCBkYXRhPWIieSwi KSksCisgICAgICAgICAgICBFeHBlY3RlZEVycm9yKAorICAgICAgICAgICAgICAgIFBST1RPQ09M X1ZJT0xBVElPTl9FUlJDT0RFLAorICAgICAgICAgICAgICAgICJtYWxmb3JtZWQgT0FVVEhCRUFS RVIgbWVzc2FnZSIsCisgICAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgYXR0cmlidXRlIDB4MDAi LCAgIyBYWFggdGhpcyBpcyBhIGJpdCBzdHJhbmdlCisgICAgICAgICAgICApLAorICAgICAgICAg ICAgaWQ9ImJhZCBHUzIgaGVhZGVyOiBtaXNzaW5nIGF1dGh6aWQgdGVybWluYXRvciIsCisgICAg ICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIHBxMy50eXBlcy5QYXNz d29yZE1lc3NhZ2UsCisgICAgICAgICAgICBwcTMuU0FTTEluaXRpYWxSZXNwb25zZS5idWlsZChk aWN0KG5hbWU9YiJPQVVUSEJFQVJFUiIsIGRhdGE9YiJ5LCwiKSksCisgICAgICAgICAgICBFeHBl Y3RlZEVycm9yKAorICAgICAgICAgICAgICAgIFBST1RPQ09MX1ZJT0xBVElPTl9FUlJDT0RFLAor ICAgICAgICAgICAgICAgICJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIsCisgICAgICAg ICAgICAgICAgIktleS12YWx1ZSBzZXBhcmF0b3IgZXhwZWN0ZWQiLAorICAgICAgICAgICAgKSwK KyAgICAgICAgICAgIGlkPSJtaXNzaW5nIGluaXRpYWwga3ZzZXAiLAorICAgICAgICApLAorICAg ICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdl LAorICAgICAgICAgICAgcHEzLlNBU0xJbml0aWFsUmVzcG9uc2UuYnVpbGQoZGljdChuYW1lPWIi T0FVVEhCRUFSRVIiLCBkYXRhPWIieSwsIikpLAorICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcigK KyAgICAgICAgICAgICAgICBQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwKKyAgICAgICAgICAg ICAgICAibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiLAorICAgICAgICAgICAgICAgICJL ZXktdmFsdWUgc2VwYXJhdG9yIGV4cGVjdGVkIiwKKyAgICAgICAgICAgICksCisgICAgICAgICAg ICBpZD0ibWlzc2luZyBpbml0aWFsIGt2c2VwIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0 LnBhcmFtKAorICAgICAgICAgICAgcHEzLnR5cGVzLlBhc3N3b3JkTWVzc2FnZSwKKyAgICAgICAg ICAgIHBxMy5TQVNMSW5pdGlhbFJlc3BvbnNlLmJ1aWxkKAorICAgICAgICAgICAgICAgIGRpY3Qo bmFtZT1iIk9BVVRIQkVBUkVSIiwgZGF0YT1iInksLFx4MDFceDAxIikKKyAgICAgICAgICAgICks CisgICAgICAgICAgICBFeHBlY3RlZEVycm9yKAorICAgICAgICAgICAgICAgIFBST1RPQ09MX1ZJ T0xBVElPTl9FUlJDT0RFLAorICAgICAgICAgICAgICAgICJtYWxmb3JtZWQgT0FVVEhCRUFSRVIg bWVzc2FnZSIsCisgICAgICAgICAgICAgICAgImRvZXMgbm90IGNvbnRhaW4gYW4gYXV0aCB2YWx1 ZSIsCisgICAgICAgICAgICApLAorICAgICAgICAgICAgaWQ9Im1pc3NpbmcgYXV0aCB2YWx1ZTog ZW1wdHkga2V5LXZhbHVlIGxpc3QiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0o CisgICAgICAgICAgICBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlLAorICAgICAgICAgICAgcHEz LlNBU0xJbml0aWFsUmVzcG9uc2UuYnVpbGQoCisgICAgICAgICAgICAgICAgZGljdChuYW1lPWIi T0FVVEhCRUFSRVIiLCBkYXRhPWIieSwsXHgwMWhvc3Q9ZXhhbXBsZS5jb21ceDAxXHgwMSIpCisg ICAgICAgICAgICApLAorICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcigKKyAgICAgICAgICAgICAg ICBQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwKKyAgICAgICAgICAgICAgICAibWFsZm9ybWVk IE9BVVRIQkVBUkVSIG1lc3NhZ2UiLAorICAgICAgICAgICAgICAgICJkb2VzIG5vdCBjb250YWlu IGFuIGF1dGggdmFsdWUiLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIGlkPSJtaXNzaW5n IGF1dGggdmFsdWU6IG90aGVyIGtleXMgcHJlc2VudCIsCisgICAgICAgICksCisgICAgICAgIHB5 dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIHBxMy50eXBlcy5QYXNzd29yZE1lc3NhZ2UsCisgICAg ICAgICAgICBwcTMuU0FTTEluaXRpYWxSZXNwb25zZS5idWlsZCgKKyAgICAgICAgICAgICAgICBk aWN0KG5hbWU9YiJPQVVUSEJFQVJFUiIsIGRhdGE9YiJ5LCxceDAxaG9zdD1leGFtcGxlLmNvbSIp CisgICAgICAgICAgICApLAorICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcigKKyAgICAgICAgICAg ICAgICBQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwKKyAgICAgICAgICAgICAgICAibWFsZm9y bWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiLAorICAgICAgICAgICAgICAgICJ1bnRlcm1pbmF0ZWQg a2V5L3ZhbHVlIHBhaXIiLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIGlkPSJtaXNzaW5n IHZhbHVlIHRlcm1pbmF0b3IiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisg ICAgICAgICAgICBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlLAorICAgICAgICAgICAgcHEzLlNB U0xJbml0aWFsUmVzcG9uc2UuYnVpbGQoZGljdChuYW1lPWIiT0FVVEhCRUFSRVIiLCBkYXRhPWIi eSwsXHgwMSIpKSwKKyAgICAgICAgICAgIEV4cGVjdGVkRXJyb3IoCisgICAgICAgICAgICAgICAg UFJPVE9DT0xfVklPTEFUSU9OX0VSUkNPREUsCisgICAgICAgICAgICAgICAgIm1hbGZvcm1lZCBP QVVUSEJFQVJFUiBtZXNzYWdlIiwKKyAgICAgICAgICAgICAgICAiZGlkIG5vdCBjb250YWluIGEg ZmluYWwgdGVybWluYXRvciIsCisgICAgICAgICAgICApLAorICAgICAgICAgICAgaWQ9Im1pc3Np bmcgbGlzdCB0ZXJtaW5hdG9yOiBlbXB0eSBsaXN0IiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0 ZXN0LnBhcmFtKAorICAgICAgICAgICAgcHEzLnR5cGVzLlBhc3N3b3JkTWVzc2FnZSwKKyAgICAg ICAgICAgIHBxMy5TQVNMSW5pdGlhbFJlc3BvbnNlLmJ1aWxkKAorICAgICAgICAgICAgICAgIGRp Y3QobmFtZT1iIk9BVVRIQkVBUkVSIiwgZGF0YT1iInksLFx4MDFhdXRoPUJlYXJlciAwXHgwMSIp CisgICAgICAgICAgICApLAorICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcigKKyAgICAgICAgICAg ICAgICBQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwKKyAgICAgICAgICAgICAgICAibWFsZm9y bWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiLAorICAgICAgICAgICAgICAgICJkaWQgbm90IGNvbnRh aW4gYSBmaW5hbCB0ZXJtaW5hdG9yIiwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBpZD0i bWlzc2luZyBsaXN0IHRlcm1pbmF0b3I6IHdpdGggYXV0aCB2YWx1ZSIsCisgICAgICAgICksCisg ICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIHBxMy50eXBlcy5QYXNzd29yZE1lc3Nh Z2UsCisgICAgICAgICAgICBwcTMuU0FTTEluaXRpYWxSZXNwb25zZS5idWlsZCgKKyAgICAgICAg ICAgICAgICBkaWN0KG5hbWU9YiJPQVVUSEJFQVJFUiIsIGRhdGE9YiJ5LCxceDAxYXV0aD1CZWFy ZXIgMFx4MDFceDAxYmxhaCIpCisgICAgICAgICAgICApLAorICAgICAgICAgICAgRXhwZWN0ZWRF cnJvcigKKyAgICAgICAgICAgICAgICBQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwKKyAgICAg ICAgICAgICAgICAibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiLAorICAgICAgICAgICAg ICAgICJhZGRpdGlvbmFsIGRhdGEgYWZ0ZXIgdGhlIGZpbmFsIHRlcm1pbmF0b3IiLAorICAgICAg ICAgICAgKSwKKyAgICAgICAgICAgIGlkPSJhZGRpdGlvbmFsIGtleSBhZnRlciB0ZXJtaW5hdG9y IiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgcHEzLnR5 cGVzLlBhc3N3b3JkTWVzc2FnZSwKKyAgICAgICAgICAgIHBxMy5TQVNMSW5pdGlhbFJlc3BvbnNl LmJ1aWxkKAorICAgICAgICAgICAgICAgIGRpY3QobmFtZT1iIk9BVVRIQkVBUkVSIiwgZGF0YT1i InksLFx4MDFrZXlceDAxXHgwMSIpCisgICAgICAgICAgICApLAorICAgICAgICAgICAgRXhwZWN0 ZWRFcnJvcigKKyAgICAgICAgICAgICAgICBQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwKKyAg ICAgICAgICAgICAgICAibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiLAorICAgICAgICAg ICAgICAgICJrZXkgd2l0aG91dCBhIHZhbHVlIiwKKyAgICAgICAgICAgICksCisgICAgICAgICAg ICBpZD0ia2V5IHdpdGhvdXQgdmFsdWUiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFy YW0oCisgICAgICAgICAgICBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlLAorICAgICAgICAgICAg cHEzLlNBU0xJbml0aWFsUmVzcG9uc2UuYnVpbGQoCisgICAgICAgICAgICAgICAgZGljdCgKKyAg ICAgICAgICAgICAgICAgICAgbmFtZT1iIk9BVVRIQkVBUkVSIiwKKyAgICAgICAgICAgICAgICAg ICAgZGF0YT1iInksLFx4MDFhdXRoPUJlYXJlciAwXHgwMWF1dGg9QmVhcmVyIDFceDAxXHgwMSIs CisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIEV4cGVjdGVk RXJyb3IoCisgICAgICAgICAgICAgICAgUFJPVE9DT0xfVklPTEFUSU9OX0VSUkNPREUsCisgICAg ICAgICAgICAgICAgIm1hbGZvcm1lZCBPQVVUSEJFQVJFUiBtZXNzYWdlIiwKKyAgICAgICAgICAg ICAgICAiY29udGFpbnMgbXVsdGlwbGUgYXV0aCB2YWx1ZXMiLAorICAgICAgICAgICAgKSwKKyAg ICAgICAgICAgIGlkPSJtdWx0aXBsZSBhdXRoIHZhbHVlcyIsCisgICAgICAgICksCisgICAgXSwK KykKK2RlZiB0ZXN0X29hdXRoX2JhZF9pbml0aWFsX3Jlc3BvbnNlKGNvbm4sIG9hdXRoX2N0eCwg dHlwZSwgcGF5bG9hZCwgZXJyKToKKyAgICBiZWdpbl9vYXV0aF9oYW5kc2hha2UoY29ubiwgb2F1 dGhfY3R4KQorCisgICAgIyBUaGUgc2VydmVyIGV4cGVjdHMgYSBTQVNMIHJlc3BvbnNlOyBnaXZl IGl0IHNvbWV0aGluZyBlbHNlIGluc3RlYWQuCisgICAgaWYgbm90IGlzaW5zdGFuY2UocGF5bG9h ZCwgZGljdCk6CisgICAgICAgIHBheWxvYWQgPSBkaWN0KHBheWxvYWRfZGF0YT1wYXlsb2FkKQor ICAgIHBxMy5zZW5kKGNvbm4sIHR5cGUsICoqcGF5bG9hZCkKKworICAgIHJlc3AgPSBwcTMucmVj djEoY29ubikKKyAgICBlcnIubWF0Y2gocmVzcCkKKworCitkZWYgdGVzdF9vYXV0aF9lbXB0eV9p bml0aWFsX3Jlc3BvbnNlKGNvbm4sIG9hdXRoX2N0eCwgYmVhcmVyX3Rva2VuKToKKyAgICBiZWdp bl9vYXV0aF9oYW5kc2hha2UoY29ubiwgb2F1dGhfY3R4KQorCisgICAgIyBTZW5kIGFuIGluaXRp YWwgcmVzcG9uc2Ugd2l0aG91dCBkYXRhLgorICAgIGluaXRpYWwgPSBwcTMuU0FTTEluaXRpYWxS ZXNwb25zZS5idWlsZChkaWN0KG5hbWU9YiJPQVVUSEJFQVJFUiIpKQorICAgIHBxMy5zZW5kKGNv bm4sIHBxMy50eXBlcy5QYXNzd29yZE1lc3NhZ2UsIGluaXRpYWwpCisKKyAgICAjIFRoZSBzZXJ2 ZXIgc2hvdWxkIHJlc3BvbmQgd2l0aCBhbiBlbXB0eSBjaGFsbGVuZ2Ugc28gd2UgY2FuIHNlbmQg dGhlIGRhdGEKKyAgICAjIGl0IHdhbnRzLgorICAgIHBrdCA9IHBxMy5yZWN2MShjb25uKQorCisg ICAgYXNzZXJ0IHBrdC50eXBlID09IHBxMy50eXBlcy5BdXRoblJlcXVlc3QKKyAgICBhc3NlcnQg cGt0LnBheWxvYWQudHlwZSA9PSBwcTMuYXV0aG4uU0FTTENvbnRpbnVlCisgICAgYXNzZXJ0IG5v dCBwa3QucGF5bG9hZC5ib2R5CisKKyAgICAjIE5vdyBzZW5kIHRoZSBpbml0aWFsIGRhdGEuCisg ICAgZGF0YSA9IGIibiwsXHgwMWF1dGg9QmVhcmVyICIgKyBiZWFyZXJfdG9rZW4oKSArIGIiXHgw MVx4MDEiCisgICAgcHEzLnNlbmQoY29ubiwgcHEzLnR5cGVzLlBhc3N3b3JkTWVzc2FnZSwgZGF0 YSkKKworICAgICMgU2VydmVyIHNob3VsZCBub3cgY29tcGxldGUgdGhlIGhhbmRzaGFrZS4KKyAg ICBleHBlY3RfaGFuZHNoYWtlX3N1Y2Nlc3MoY29ubikKKworCitAcHl0ZXN0LmZpeHR1cmUoKQor ZGVmIHNldF92YWxpZGF0b3IoKToKKyAgICAiIiIKKyAgICBBIHBlci10ZXN0IGZpeHR1cmUgdGhh dCBhbGxvd3MgYSB0ZXN0IHRvIG92ZXJyaWRlIHRoZSBzZXR0aW5nIG9mCisgICAgb2F1dGhfdmFs aWRhdG9yX2NvbW1hbmQgZm9yIHRoZSBjbHVzdGVyLiBUaGUgc2V0dGluZyB3aWxsIGJlIHJldmVy dGVkIGR1cmluZworICAgIHRlYXJkb3duLgorCisgICAgUGFzc2luZyBOb25lIHdpbGwgcGVyZm9y bSBhbiBBTFRFUiBTWVNURU0gUkVTRVQuCisgICAgIiIiCisgICAgY29ubiA9IHBzeWNvcGcyLmNv bm5lY3QoIiIpCisgICAgY29ubi5hdXRvY29tbWl0ID0gVHJ1ZQorCisgICAgd2l0aCBjb250ZXh0 bGliLmNsb3NpbmcoY29ubik6CisgICAgICAgIGMgPSBjb25uLmN1cnNvcigpCisKKyAgICAgICAg IyBTYXZlIHRoZSBwcmV2aW91cyB2YWx1ZS4KKyAgICAgICAgYy5leGVjdXRlKCJTSE9XIG9hdXRo X3ZhbGlkYXRvcl9jb21tYW5kOyIpCisgICAgICAgIHByZXZfY21kID0gYy5mZXRjaG9uZSgpWzBd CisKKyAgICAgICAgZGVmIHNldHRlcihjbWQpOgorICAgICAgICAgICAgYy5leGVjdXRlKCJBTFRF UiBTWVNURU0gU0VUIG9hdXRoX3ZhbGlkYXRvcl9jb21tYW5kIFRPICVzOyIsIChjbWQsKSkKKyAg ICAgICAgICAgIGMuZXhlY3V0ZSgiU0VMRUNUIHBnX3JlbG9hZF9jb25mKCk7IikKKworICAgICAg ICB5aWVsZCBzZXR0ZXIKKworICAgICAgICAjIFJlc3RvcmUgdGhlIHByZXZpb3VzIHZhbHVlLgor ICAgICAgICBjLmV4ZWN1dGUoIkFMVEVSIFNZU1RFTSBTRVQgb2F1dGhfdmFsaWRhdG9yX2NvbW1h bmQgVE8gJXM7IiwgKHByZXZfY21kLCkpCisgICAgICAgIGMuZXhlY3V0ZSgiU0VMRUNUIHBnX3Jl bG9hZF9jb25mKCk7IikKKworCitkZWYgdGVzdF9vYXV0aF9ub192YWxpZGF0b3Iob2F1dGhfY3R4 LCBzZXRfdmFsaWRhdG9yLCBjb25uZWN0LCBiZWFyZXJfdG9rZW4pOgorICAgICMgQ2xlYXIgb3V0 IG91ciB2YWxpZGF0b3IgY29tbWFuZCwgdGhlbiBlc3RhYmxpc2ggYSBuZXcgY29ubmVjdGlvbi4K KyAgICBzZXRfdmFsaWRhdG9yKCIiKQorICAgIGNvbm4gPSBjb25uZWN0KCkKKworICAgIGJlZ2lu X29hdXRoX2hhbmRzaGFrZShjb25uLCBvYXV0aF9jdHgpCisgICAgc2VuZF9pbml0aWFsX3Jlc3Bv bnNlKGNvbm4sIGJlYXJlcj1iZWFyZXJfdG9rZW4oKSkKKworICAgICMgVGhlIHNlcnZlciBzaG91 bGQgZmFpbCB0aGUgY29ubmVjdGlvbi4KKyAgICBleHBlY3RfaGFuZHNoYWtlX2ZhaWx1cmUoY29u biwgb2F1dGhfY3R4KQorCisKK2RlZiB0ZXN0X29hdXRoX3ZhbGlkYXRvcl9yb2xlKG9hdXRoX2N0 eCwgc2V0X3ZhbGlkYXRvciwgY29ubmVjdCk6CisgICAgIyBTd2l0Y2ggdGhlIHZhbGlkYXRvciBp bXBsZW1lbnRhdGlvbi4gVGhpcyB2YWxpZGF0b3Igd2lsbCByZWZsZWN0IHRoZQorICAgICMgUEdV U0VSIGFzIHRoZSBhdXRoZW50aWNhdGVkIGlkZW50aXR5LgorICAgIHBhdGggPSBwYXRobGliLlBh dGgoX19maWxlX18pLnBhcmVudCAvICJ2YWxpZGF0ZV9yZWZsZWN0LnB5IgorICAgIHBhdGggPSBz dHIocGF0aC5hYnNvbHV0ZSgpKQorCisgICAgc2V0X3ZhbGlkYXRvcihmIntzaGxleC5xdW90ZShw YXRoKX0gJyVyJyA8JiVmIikKKyAgICBjb25uID0gY29ubmVjdCgpCisKKyAgICAjIExvZyBpbi4g Tm90ZSB0aGF0IHRoZSByZWZsZWN0aW9uIHZhbGlkYXRvciBpZ25vcmVzIHRoZSBiZWFyZXIgdG9r ZW4uCisgICAgYmVnaW5fb2F1dGhfaGFuZHNoYWtlKGNvbm4sIG9hdXRoX2N0eCwgdXNlcj1vYXV0 aF9jdHgudXNlcikKKyAgICBzZW5kX2luaXRpYWxfcmVzcG9uc2UoY29ubiwgYmVhcmVyPWIiZG9u dGNhcmUiKQorICAgIGV4cGVjdF9oYW5kc2hha2Vfc3VjY2Vzcyhjb25uKQorCisgICAgIyBDaGVj ayB0aGUgdXNlciBpZGVudGl0eS4KKyAgICBwcTMuc2VuZChjb25uLCBwcTMudHlwZXMuUXVlcnks IHF1ZXJ5PWIiU0VMRUNUIGF1dGhuX2lkKCk7IikKKyAgICByZXNwID0gcmVjZWl2ZV91bnRpbChj b25uLCBwcTMudHlwZXMuRGF0YVJvdykKKworICAgIHJvdyA9IHJlc3AucGF5bG9hZAorICAgIGV4 cGVjdGVkID0gb2F1dGhfY3R4LnVzZXIuZW5jb2RlKCJ1dGYtOCIpCisgICAgYXNzZXJ0IHJvdy5j b2x1bW5zID09IFtleHBlY3RlZF0KKworCitkZWYgdGVzdF9vYXV0aF9yb2xlX3dpdGhfc2hlbGxf dW5zYWZlX2NoYXJhY3RlcnMob2F1dGhfY3R4LCBzZXRfdmFsaWRhdG9yLCBjb25uZWN0KToKKyAg ICAiIiIKKyAgICBYWFggVGhpcyB0ZXN0IHBpbnMgdW5kZXNpcmFibGUgYmVoYXZpb3IuIFdlIHNo b3VsZCBiZSBhYmxlIHRvIGhhbmRsZSBhbnkKKyAgICB2YWxpZCBQb3N0Z3JlcyByb2xlIG5hbWUu CisgICAgIiIiCisgICAgIyBTd2l0Y2ggdGhlIHZhbGlkYXRvciBpbXBsZW1lbnRhdGlvbi4gVGhp cyB2YWxpZGF0b3Igd2lsbCByZWZsZWN0IHRoZQorICAgICMgUEdVU0VSIGFzIHRoZSBhdXRoZW50 aWNhdGVkIGlkZW50aXR5LgorICAgIHBhdGggPSBwYXRobGliLlBhdGgoX19maWxlX18pLnBhcmVu dCAvICJ2YWxpZGF0ZV9yZWZsZWN0LnB5IgorICAgIHBhdGggPSBzdHIocGF0aC5hYnNvbHV0ZSgp KQorCisgICAgc2V0X3ZhbGlkYXRvcihmIntzaGxleC5xdW90ZShwYXRoKX0gJyVyJyA8JiVmIikK KyAgICBjb25uID0gY29ubmVjdCgpCisKKyAgICB1bnNhZmVfdXNlcm5hbWUgPSAiaGVsbG8ndGhl cmUiCisgICAgYmVnaW5fb2F1dGhfaGFuZHNoYWtlKGNvbm4sIG9hdXRoX2N0eCwgdXNlcj11bnNh ZmVfdXNlcm5hbWUpCisKKyAgICAjIFRoZSBzZXJ2ZXIgc2hvdWxkIHJlamVjdCB0aGUgaGFuZHNo YWtlLgorICAgIHNlbmRfaW5pdGlhbF9yZXNwb25zZShjb25uLCBiZWFyZXI9YiJkb250Y2FyZSIp CisgICAgZXhwZWN0X2hhbmRzaGFrZV9mYWlsdXJlKGNvbm4sIG9hdXRoX2N0eCkKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIvdGVzdF9zZXJ2ZXIucHkgYi9zcmMvdGVzdC9weXRo b24vc2VydmVyL3Rlc3Rfc2VydmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAuLjAyMTI2ZGJhNzkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9weXRob24vc2Vy dmVyL3Rlc3Rfc2VydmVyLnB5CkBAIC0wLDAgKzEsMjEgQEAKKyMKKyMgQ29weXJpZ2h0IDIwMjEg Vk13YXJlLCBJbmMuCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBQb3N0Z3JlU1FMCisjCisK K2ltcG9ydCBwcTMKKworCitkZWYgdGVzdF9oYW5kc2hha2UoY29ubmVjdCk6CisgICAgIiIiQmFz aWMgc2FuaXR5IGNoZWNrLiIiIgorICAgIGNvbm4gPSBjb25uZWN0KCkKKworICAgIHBxMy5oYW5k c2hha2UoY29ubiwgdXNlcj1wcTMucGd1c2VyKCksIGRhdGFiYXNlPXBxMy5wZ2RhdGFiYXNlKCkp CisKKyAgICBwcTMuc2VuZChjb25uLCBwcTMudHlwZXMuUXVlcnksIHF1ZXJ5PWIiIikKKworICAg IHJlc3AgPSBwcTMucmVjdjEoY29ubikKKyAgICBhc3NlcnQgcmVzcC50eXBlID09IHBxMy50eXBl cy5FbXB0eVF1ZXJ5UmVzcG9uc2UKKworICAgIHJlc3AgPSBwcTMucmVjdjEoY29ubikKKyAgICBh c3NlcnQgcmVzcC50eXBlID09IHBxMy50eXBlcy5SZWFkeUZvclF1ZXJ5CmRpZmYgLS1naXQgYS9z cmMvdGVzdC9weXRob24vc2VydmVyL3ZhbGlkYXRlX2JlYXJlci5weSBiL3NyYy90ZXN0L3B5dGhv bi9zZXJ2ZXIvdmFsaWRhdGVfYmVhcmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAw MDAwMDAwMDAuLjJjYzczZmYxNTQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9weXRob24v c2VydmVyL3ZhbGlkYXRlX2JlYXJlci5weQpAQCAtMCwwICsxLDEwMSBAQAorIyEgL3Vzci9iaW4v ZW52IHB5dGhvbjMKKyMKKyMgQ29weXJpZ2h0IDIwMjEgVk13YXJlLCBJbmMuCisjIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBQb3N0Z3JlU1FMCisjCisjIERPIE5PVCBVU0UgVEhJUyBPQVVUSCBW QUxJREFUT1IgSU4gUFJPRFVDVElPTi4gSXQgZG9lc24ndCBhY3R1YWxseSB2YWxpZGF0ZQorIyBh bnl0aGluZywgYW5kIGl0IGxvZ3MgdGhlIGJlYXJlciB0b2tlbiBkYXRhLCB3aGljaCBpcyBzZW5z aXRpdmUuCisjCisjIFRoaXMgZXhlY3V0YWJsZSBpcyB1c2VkIGFzIGFuIG9hdXRoX3ZhbGlkYXRv cl9jb21tYW5kIGluIGNvbmNlcnQgd2l0aAorIyB0ZXN0X29hdXRoLnB5LiBNZW1vcnkgaXMgc2hh cmVkIGFuZCBjb21tdW5pY2F0ZWQgZnJvbSB0aGF0IHRlc3QgbW9kdWxlJ3MKKyMgYmVhcmVyX3Rv a2VuKCkgZml4dHVyZS4KKyMKKyMgVGhpcyBzY3JpcHQgbXVzdCBydW4gdW5kZXIgdGhlIFBvc3Rn cmVzIHNlcnZlciBlbnZpcm9ubWVudDsga2VlcCB0aGUKKyMgZGVwZW5kZW5jeSBsaXN0IGZhaXJs eSBzdGFuZGFyZC4KKworaW1wb3J0IGJhc2U2NAoraW1wb3J0IGJpbmFzY2lpCitpbXBvcnQgY29u dGV4dGxpYgoraW1wb3J0IHN0cnVjdAoraW1wb3J0IHN5cworZnJvbSBtdWx0aXByb2Nlc3Npbmcg aW1wb3J0IHNoYXJlZF9tZW1vcnkKKworTUFYX1VJTlQxNiA9IDIgKiogMTYgLSAxCisKKworZGVm IHJlbW92ZV9zaG1fZnJvbV9yZXNvdXJjZV90cmFja2VyKCk6CisgICAgIiIiCisgICAgTW9ua2V5 LXBhdGNoIG11bHRpcHJvY2Vzc2luZy5yZXNvdXJjZV90cmFja2VyIHNvIFNoYXJlZE1lbW9yeSB3 b24ndCBiZQorICAgIHRyYWNrZWQuIFB1bGxlZCBmcm9tIHRoaXMgdGhyZWFkLCB3aGVyZSB0aGVy ZSBhcmUgbW9yZSBkZXRhaWxzOgorCisgICAgICAgIGh0dHBzOi8vYnVncy5weXRob24ub3JnL2lz c3VlMzgxMTkKKworICAgIFRMO0RSOiBhbGwgY2xpZW50cyBvZiBzaGFyZWQgbWVtb3J5IHNlZ21l bnRzIGF1dG9tYXRpY2FsbHkgZGVzdHJveSB0aGVtIG9uCisgICAgcHJvY2VzcyBleGl0LCB3aGlj aCBtYWtlcyBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzIG11Y2ggbGVzcyB1c2VmdWwuIFRoaXMKKyAg ICBtb25rZXlwYXRjaCByZW1vdmVzIHRoYXQgYmVoYXZpb3Igc28gdGhhdCB3ZSBjYW4gZGVmZXIg dG8gdGhlIHRlc3QgdG8gbWFuYWdlCisgICAgdGhlIHNlZ21lbnQgbGlmZXRpbWUuCisKKyAgICBJ ZGVhbGx5IGEgZnV0dXJlIFB5dGhvbiBwYXRjaCB3aWxsIHB1bGwgaW4gdGhpcyBmaXggYW5kIHRo ZW4gdGhlIGVudGlyZQorICAgIGZ1bmN0aW9uIGNhbiBnbyBhd2F5LgorICAgICIiIgorICAgIGZy b20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCByZXNvdXJjZV90cmFja2VyCisKKyAgICBkZWYgZml4 X3JlZ2lzdGVyKG5hbWUsIHJ0eXBlKToKKyAgICAgICAgaWYgcnR5cGUgPT0gInNoYXJlZF9tZW1v cnkiOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHJldHVybiByZXNvdXJjZV90cmFja2Vy Ll9yZXNvdXJjZV90cmFja2VyLnJlZ2lzdGVyKHNlbGYsIG5hbWUsIHJ0eXBlKQorCisgICAgcmVz b3VyY2VfdHJhY2tlci5yZWdpc3RlciA9IGZpeF9yZWdpc3RlcgorCisgICAgZGVmIGZpeF91bnJl Z2lzdGVyKG5hbWUsIHJ0eXBlKToKKyAgICAgICAgaWYgcnR5cGUgPT0gInNoYXJlZF9tZW1vcnki OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHJldHVybiByZXNvdXJjZV90cmFja2VyLl9y ZXNvdXJjZV90cmFja2VyLnVucmVnaXN0ZXIoc2VsZiwgbmFtZSwgcnR5cGUpCisKKyAgICByZXNv dXJjZV90cmFja2VyLnVucmVnaXN0ZXIgPSBmaXhfdW5yZWdpc3RlcgorCisgICAgaWYgInNoYXJl ZF9tZW1vcnkiIGluIHJlc291cmNlX3RyYWNrZXIuX0NMRUFOVVBfRlVOQ1M6CisgICAgICAgIGRl bCByZXNvdXJjZV90cmFja2VyLl9DTEVBTlVQX0ZVTkNTWyJzaGFyZWRfbWVtb3J5Il0KKworCitk ZWYgbWFpbihhcmdzKToKKyAgICByZW1vdmVfc2htX2Zyb21fcmVzb3VyY2VfdHJhY2tlcigpICAj IFhYWCByZW1vdmUgc29tZSBkYXkKKworICAgICMgR2V0IHRoZSBleHBlY3RlZCB0b2tlbiBmcm9t IHRoZSBjdXJyZW50bHkgcnVubmluZyB0ZXN0LgorICAgIHNoYXJlZF9tZW1fbmFtZSA9IGFyZ3Nb MF0KKworICAgIG1lbSA9IHNoYXJlZF9tZW1vcnkuU2hhcmVkTWVtb3J5KHNoYXJlZF9tZW1fbmFt ZSkKKyAgICB3aXRoIGNvbnRleHRsaWIuY2xvc2luZyhtZW0pOgorICAgICAgICAjIEZpcnN0IHR3 byBieXRlcyBhcmUgdGhlIHRva2VuIGxlbmd0aC4KKyAgICAgICAgc2l6ZSA9IHN0cnVjdC51bnBh Y2soIkgiLCBtZW0uYnVmWzoyXSlbMF0KKworICAgICAgICBpZiBzaXplID09IE1BWF9VSU5UMTY6 CisgICAgICAgICAgICAjIFNwZWNpYWwgY2FzZTogdGhlIHRlc3Qgd2FudHMgdXMgdG8gYWNjZXB0 IGFueSB0b2tlbi4KKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoImFjY2VwdGluZyB0b2tl biB3aXRob3V0IHZhbGlkYXRpb25cbiIpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAj IFRoZSByZW1haW5kZXIgb2YgdGhlIGJ1ZmZlciBjb250YWlucyB0aGUgZXhwZWN0ZWQgdG9rZW4u CisgICAgICAgIGFzc2VydCBzaXplIDw9IChtZW0uc2l6ZSAtIDIpCisgICAgICAgIGV4cGVjdGVk X3Rva2VuID0gbWVtLmJ1ZlsyIDogc2l6ZSArIDJdLnRvYnl0ZXMoKQorCisgICAgICAgIG1lbS5i dWZbOl0gPSBiIlwwIiAqIG1lbS5zaXplICAjIHNjcmliYmxlIG92ZXIgdGhlIHRva2VuCisKKyAg ICB0b2tlbiA9IHN5cy5zdGRpbi5idWZmZXIucmVhZCgpCisgICAgaWYgdG9rZW4gIT0gZXhwZWN0 ZWRfdG9rZW46CisgICAgICAgIHN5cy5leGl0KGYiZmFpbGVkIHRvIG1hdGNoIEJlYXJlciB0b2tl biAoe3Rva2VuIXJ9ICE9IHtleHBlY3RlZF90b2tlbiFyfSkiKQorCisgICAgIyBTZWUgaWYgdGhl IHRlc3Qgd2FudHMgdXMgdG8gcHJpbnQgYW55dGhpbmcuIElmIHNvLCBpdCB3aWxsIGhhdmUgZW5j b2RlZAorICAgICMgdGhlIGRlc2lyZWQgb3V0cHV0IGluIHRoZSB0b2tlbiB3aXRoIGFuICJvdXRw dXQ9IiBwcmVmaXguCisgICAgdHJ5OgorICAgICAgICAjIGFsdGNoYXJzPSItXyIgY29ycmVzcG9u ZHMgdG8gdGhlIHVybHNhZmUgYWxwaGFiZXQuCisgICAgICAgIGRhdGEgPSBiYXNlNjQuYjY0ZGVj b2RlKHRva2VuLCBhbHRjaGFycz0iLV8iLCB2YWxpZGF0ZT1UcnVlKQorCisgICAgICAgIGlmIGRh dGEuc3RhcnRzd2l0aChiIm91dHB1dD0iKToKKyAgICAgICAgICAgIHN5cy5zdGRvdXQuYnVmZmVy LndyaXRlKGRhdGFbNzpdKQorCisgICAgZXhjZXB0IGJpbmFzY2lpLkVycm9yOgorICAgICAgICBw YXNzCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKHN5cy5hcmd2WzE6 XSkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIvdmFsaWRhdGVfcmVmbGVjdC5w eSBiL3NyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIvdmFsaWRhdGVfcmVmbGVjdC5weQpuZXcgZmlsZSBt b2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwLi4yNGMzYTdlNzE1Ci0tLSAvZGV2L251bGwKKysr IGIvc3JjL3Rlc3QvcHl0aG9uL3NlcnZlci92YWxpZGF0ZV9yZWZsZWN0LnB5CkBAIC0wLDAgKzEs MzQgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24zCisjCisjIENvcHlyaWdodCAyMDIxIFZNd2Fy ZSwgSW5jLgorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogUG9zdGdyZVNRTAorIworIyBETyBO T1QgVVNFIFRISVMgT0FVVEggVkFMSURBVE9SIElOIFBST0RVQ1RJT04uIEl0IGlnbm9yZXMgdGhl IGJlYXJlciB0b2tlbgorIyBlbnRpcmVseSBhbmQgYXV0b21hdGljYWxseSBsb2dzIHRoZSB1c2Vy IGluLgorIworIyBUaGlzIGV4ZWN1dGFibGUgaXMgdXNlZCBhcyBhbiBvYXV0aF92YWxpZGF0b3Jf Y29tbWFuZCBpbiBjb25jZXJ0IHdpdGgKKyMgdGVzdF9vYXV0aC5weS4gSXQgZXhwZWN0cyB0aGUg dXNlcidzIGRlc2lyZWQgcm9sZSBuYW1lIGFzIGFuIGFyZ3VtZW50OyB0aGUKKyMgYWN0dWFsIHRv a2VuIHdpbGwgYmUgZGlzY2FyZGVkIGFuZCB0aGUgdXNlciB3aWxsIGJlIGxvZ2dlZCBpbiB3aXRo IHRoZSByb2xlCisjIG5hbWUgYXMgdGhlIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHkuCisjCisjIFRo aXMgc2NyaXB0IG11c3QgcnVuIHVuZGVyIHRoZSBQb3N0Z3JlcyBzZXJ2ZXIgZW52aXJvbm1lbnQ7 IGtlZXAgdGhlCisjIGRlcGVuZGVuY3kgbGlzdCBmYWlybHkgc3RhbmRhcmQuCisKK2ltcG9ydCBz eXMKKworCitkZWYgbWFpbihhcmdzKToKKyAgICAjIFdlIGhhdmUgdG8gcmVhZCB0aGUgZW50aXJl IHRva2VuIGFzIG91ciBmaXJzdCBhY3Rpb24gdG8gdW5ibG9jayB0aGUKKyAgICAjIHNlcnZlciwg YnV0IHdlIHdvbid0IGFjdHVhbGx5IHVzZSBpdC4KKyAgICBfID0gc3lzLnN0ZGluLmJ1ZmZlci5y ZWFkKCkKKworICAgIGlmIGxlbihhcmdzKSAhPSAxOgorICAgICAgICBzeXMuZXhpdCgidXNhZ2U6 IC4vdmFsaWRhdGVfcmVmbGVjdC5weSBST0xFIikKKworICAgICMgTG9nIHRoZSB1c2VyIGluIGFz IHRoZSBwcm92aWRlZCByb2xlLgorICAgIHJvbGUgPSBhcmdzWzBdCisgICAgcHJpbnQocm9sZSkK KworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oc3lzLmFyZ3ZbMTpdKQpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcHl0aG9uL3Rlc3RfaW50ZXJuYWxzLnB5IGIvc3JjL3Rlc3Qv cHl0aG9uL3Rlc3RfaW50ZXJuYWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAuLmRlZTQ4NTVmYzAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9weXRob24vdGVz dF9pbnRlcm5hbHMucHkKQEAgLTAsMCArMSwxMzggQEAKKyMKKyMgQ29weXJpZ2h0IDIwMjEgVk13 YXJlLCBJbmMuCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBQb3N0Z3JlU1FMCisjCisKK2lt cG9ydCBpbworCitmcm9tIHBxMyBpbXBvcnQgX0RlYnVnU3RyZWFtCisKKworZGVmIHRlc3RfRGVi dWdTdHJlYW1fcmVhZCgpOgorICAgIHVuZGVyID0gaW8uQnl0ZXNJTyhiImFiY2RlZmdoaWprbG1u b3BxcnN0dXZ3eHl6IikKKyAgICBvdXQgPSBpby5TdHJpbmdJTygpCisKKyAgICBzdHJlYW0gPSBf RGVidWdTdHJlYW0odW5kZXIsIG91dCkKKworICAgIHJlcyA9IHN0cmVhbS5yZWFkKDUpCisgICAg YXNzZXJ0IHJlcyA9PSBiImFiY2RlIgorCisgICAgcmVzID0gc3RyZWFtLnJlYWQoMTYpCisgICAg YXNzZXJ0IHJlcyA9PSBiImZnaGlqa2xtbm9wcXJzdHUiCisKKyAgICBzdHJlYW0uZmx1c2hfZGVi dWcoKQorCisgICAgcmVzID0gc3RyZWFtLnJlYWQoKQorICAgIGFzc2VydCByZXMgPT0gYiJ2d3h5 eiIKKworICAgIHN0cmVhbS5mbHVzaF9kZWJ1ZygpCisKKyAgICBleHBlY3RlZCA9ICgKKyAgICAg ICAgIjwgMDAwMDpcdDYxIDYyIDYzIDY0IDY1IDY2IDY3IDY4IDY5IDZhIDZiIDZjIDZkIDZlIDZm IDcwXHRhYmNkZWZnaGlqa2xtbm9wXG4iCisgICAgICAgICI8IDAwMTA6XHQ3MSA3MiA3MyA3NCA3 NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0cXJzdHVcbiIKKyAgICAgICAgIlxu IgorICAgICAgICAiPCAwMDAwOlx0NzYgNzcgNzggNzkgN2EgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcdHZ3eHl6XG4iCisgICAgICAgICJcbiIKKyAgICApCisgICAgYXNzZXJ0IG91 dC5nZXR2YWx1ZSgpID09IGV4cGVjdGVkCisKKworZGVmIHRlc3RfRGVidWdTdHJlYW1fd3JpdGUo KToKKyAgICB1bmRlciA9IGlvLkJ5dGVzSU8oKQorICAgIG91dCA9IGlvLlN0cmluZ0lPKCkKKwor ICAgIHN0cmVhbSA9IF9EZWJ1Z1N0cmVhbSh1bmRlciwgb3V0KQorCisgICAgc3RyZWFtLndyaXRl KGIiXHgwMFx4MDFceDAyIikKKyAgICBzdHJlYW0uZmx1c2goKQorCisgICAgYXNzZXJ0IHVuZGVy LmdldHZhbHVlKCkgPT0gYiJceDAwXHgwMVx4MDIiCisKKyAgICBzdHJlYW0ud3JpdGUoYiJceGMw XHhjMVx4YzIiKQorICAgIHN0cmVhbS5mbHVzaCgpCisKKyAgICBhc3NlcnQgdW5kZXIuZ2V0dmFs dWUoKSA9PSBiIlx4MDBceDAxXHgwMlx4YzBceGMxXHhjMiIKKworICAgIHN0cmVhbS5mbHVzaF9k ZWJ1ZygpCisKKyAgICBleHBlY3RlZCA9ICI+IDAwMDA6XHQwMCAwMSAwMiBjMCBjMSBjMiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFx0Li4uLi4uXG5cbiIKKyAgICBhc3NlcnQgb3V0Lmdl dHZhbHVlKCkgPT0gZXhwZWN0ZWQKKworCitkZWYgdGVzdF9EZWJ1Z1N0cmVhbV9yZWFkX3dyaXRl KCk6CisgICAgdW5kZXIgPSBpby5CeXRlc0lPKGIiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoi KQorICAgIG91dCA9IGlvLlN0cmluZ0lPKCkKKyAgICBzdHJlYW0gPSBfRGVidWdTdHJlYW0odW5k ZXIsIG91dCkKKworICAgIHJlcyA9IHN0cmVhbS5yZWFkKDUpCisgICAgYXNzZXJ0IHJlcyA9PSBi ImFiY2RlIgorCisgICAgc3RyZWFtLndyaXRlKGIieHh4eHgiKQorICAgIHN0cmVhbS5mbHVzaCgp CisKKyAgICBhc3NlcnQgdW5kZXIuZ2V0dmFsdWUoKSA9PSBiImFiY2RleHh4eHhrbG1ub3BxcnN0 dXZ3eHl6IgorCisgICAgcmVzID0gc3RyZWFtLnJlYWQoNSkKKyAgICBhc3NlcnQgcmVzID09IGIi a2xtbm8iCisKKyAgICBzdHJlYW0ud3JpdGUoYiJ4eHh4eCIpCisgICAgc3RyZWFtLmZsdXNoKCkK KworICAgIGFzc2VydCB1bmRlci5nZXR2YWx1ZSgpID09IGIiYWJjZGV4eHh4eGtsbW5veHh4eHh1 dnd4eXoiCisKKyAgICBzdHJlYW0uZmx1c2hfZGVidWcoKQorCisgICAgZXhwZWN0ZWQgPSAoCisg ICAgICAgICI8IDAwMDA6XHQ2MSA2MiA2MyA2NCA2NSA2YiA2YyA2ZCA2ZSA2ZiAgICAgICAgICAg ICAgICAgIFx0YWJjZGVrbG1ub1xuIgorICAgICAgICAiXG4iCisgICAgICAgICI+IDAwMDA6XHQ3 OCA3OCA3OCA3OCA3OCA3OCA3OCA3OCA3OCA3OCAgICAgICAgICAgICAgICAgIFx0eHh4eHh4eHh4 eFxuIgorICAgICAgICAiXG4iCisgICAgKQorICAgIGFzc2VydCBvdXQuZ2V0dmFsdWUoKSA9PSBl eHBlY3RlZAorCisKK2RlZiB0ZXN0X0RlYnVnU3RyZWFtX2VuZF9wYWNrZXQoKToKKyAgICB1bmRl ciA9IGlvLkJ5dGVzSU8oYiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIpCisgICAgb3V0ID0g aW8uU3RyaW5nSU8oKQorICAgIHN0cmVhbSA9IF9EZWJ1Z1N0cmVhbSh1bmRlciwgb3V0KQorCisg ICAgc3RyZWFtLnJlYWQoNSkKKyAgICBzdHJlYW0uZW5kX3BhY2tldCgicmVhZCBkZXNjcmlwdGlv biIsIHJlYWQ9VHJ1ZSwgaW5kZW50PSIgIikKKworICAgIHN0cmVhbS53cml0ZShiInh4eHh4IikK KyAgICBzdHJlYW0uZmx1c2goKQorICAgIHN0cmVhbS5lbmRfcGFja2V0KCJ3cml0ZSBkZXNjcmlw dGlvbiIsIGluZGVudD0iICIpCisKKyAgICBzdHJlYW0ucmVhZCg1KQorICAgIHN0cmVhbS53cml0 ZShiInh4eHh4IikKKyAgICBzdHJlYW0uZmx1c2goKQorICAgIHN0cmVhbS5lbmRfcGFja2V0KCJy ZWFkL3dyaXRlIGNvbWJvIGZvciByZWFkIiwgcmVhZD1UcnVlLCBpbmRlbnQ9IiAiKQorCisgICAg c3RyZWFtLnJlYWQoNSkKKyAgICBzdHJlYW0ud3JpdGUoYiJ4eHh4eCIpCisgICAgc3RyZWFtLmZs dXNoKCkKKyAgICBzdHJlYW0uZW5kX3BhY2tldCgicmVhZC93cml0ZSBjb21ibyBmb3Igd3JpdGUi LCBpbmRlbnQ9IiAiKQorCisgICAgZXhwZWN0ZWQgPSAoCisgICAgICAgICIgPCAwMDAwOlx0NjEg NjIgNjMgNjQgNjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdGFiY2RlXG4iCisg ICAgICAgICJcbiIKKyAgICAgICAgIjwgcmVhZCBkZXNjcmlwdGlvblxuIgorICAgICAgICAiXG4i CisgICAgICAgICI+IHdyaXRlIGRlc2NyaXB0aW9uXG4iCisgICAgICAgICJcbiIKKyAgICAgICAg IiA+IDAwMDA6XHQ3OCA3OCA3OCA3OCA3OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFx0eHh4eHhcbiIKKyAgICAgICAgIlxuIgorICAgICAgICAiIDwgMDAwMDpcdDZiIDZjIDZkIDZl IDZmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHRrbG1ub1xuIgorICAgICAgICAi XG4iCisgICAgICAgICIgPiAwMDAwOlx0NzggNzggNzggNzggNzggICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcdHh4eHh4XG4iCisgICAgICAgICJcbiIKKyAgICAgICAgIjwgcmVhZC93 cml0ZSBjb21ibyBmb3IgcmVhZFxuIgorICAgICAgICAiXG4iCisgICAgICAgICI+IHJlYWQvd3Jp dGUgY29tYm8gZm9yIHdyaXRlXG4iCisgICAgICAgICJcbiIKKyAgICAgICAgIiA8IDAwMDA6XHQ3 NSA3NiA3NyA3OCA3OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0dXZ3eHlcbiIK KyAgICAgICAgIlxuIgorICAgICAgICAiID4gMDAwMDpcdDc4IDc4IDc4IDc4IDc4ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXHR4eHh4eFxuIgorICAgICAgICAiXG4iCisgICAgKQor ICAgIGFzc2VydCBvdXQuZ2V0dmFsdWUoKSA9PSBleHBlY3RlZApkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcHl0aG9uL3Rlc3RfcHEzLnB5IGIvc3JjL3Rlc3QvcHl0aG9uL3Rlc3RfcHEzLnB5Cm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmUwYzBlMDU2OGQKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvdGVzdC9weXRob24vdGVzdF9wcTMucHkKQEAgLTAsMCArMSw1NTggQEAKKyMK KyMgQ29weXJpZ2h0IDIwMjEgVk13YXJlLCBJbmMuCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBQb3N0Z3JlU1FMCisjCisKK2ltcG9ydCBjb250ZXh0bGliCitpbXBvcnQgZ2V0cGFzcworaW1w b3J0IGlvCitpbXBvcnQgc3RydWN0CitpbXBvcnQgc3lzCisKK2ltcG9ydCBweXRlc3QKK2Zyb20g Y29uc3RydWN0IGltcG9ydCBDb250YWluZXIsIFBhZGRpbmdFcnJvciwgU3RyZWFtRXJyb3IsIFRl cm1pbmF0ZWRFcnJvcgorCitpbXBvcnQgcHEzCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXpl KAorICAgICJyYXcsZXhwZWN0ZWQsZXh0cmEiLAorICAgIFsKKyAgICAgICAgcHl0ZXN0LnBhcmFt KAorICAgICAgICAgICAgYiJceDAwXHgwMFx4MDBceDEwXHgwMFx4MDRceDAwXHgwMGFiY2RlZmdo IiwKKyAgICAgICAgICAgIENvbnRhaW5lcihsZW49MTYsIHByb3RvPTB4NDAwMDAsIHBheWxvYWQ9 YiJhYmNkZWZnaCIpLAorICAgICAgICAgICAgYiIiLAorICAgICAgICAgICAgaWQ9IjgtYnl0ZSBw YXlsb2FkIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAg YiJceDAwXHgwMFx4MDBceDA4XHgwMFx4MDRceDAwXHgwMCIsCisgICAgICAgICAgICBDb250YWlu ZXIobGVuPTgsIHByb3RvPTB4NDAwMDAsIHBheWxvYWQ9YiIiKSwKKyAgICAgICAgICAgIGIiIiwK KyAgICAgICAgICAgIGlkPSJubyBwYXlsb2FkIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0 LnBhcmFtKAorICAgICAgICAgICAgYiJceDAwXHgwMFx4MDBceDA5XHgwMFx4MDRceDAwXHgwMGFi Y2RlIiwKKyAgICAgICAgICAgIENvbnRhaW5lcihsZW49OSwgcHJvdG89MHg0MDAwMCwgcGF5bG9h ZD1iImEiKSwKKyAgICAgICAgICAgIGIiYmNkZSIsCisgICAgICAgICAgICBpZD0iMS1ieXRlIHBh eWxvYWQgYW5kIGV4dHJhIHBhZGRpbmciLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFy YW0oCisgICAgICAgICAgICBiIlx4MDBceDAwXHgwMFx4MEJceDAwXHgwM1x4MDBceDAwaGlceDAw IiwKKyAgICAgICAgICAgIENvbnRhaW5lcihsZW49MTEsIHByb3RvPXBxMy5wcm90b2NvbCgzLCAw KSwgcGF5bG9hZD1bYiJoaSJdKSwKKyAgICAgICAgICAgIGIiIiwKKyAgICAgICAgICAgIGlkPSJp bXBsaWVkIHBhcmFtZXRlciBsaXN0IHdoZW4gdXNpbmcgcHJvdG8gdmVyc2lvbiAzLjAiLAorICAg ICAgICApLAorICAgIF0sCispCitkZWYgdGVzdF9TdGFydHVwX3BhcnNlKHJhdywgZXhwZWN0ZWQs IGV4dHJhKToKKyAgICB3aXRoIGlvLkJ5dGVzSU8ocmF3KSBhcyBzdHJlYW06CisgICAgICAgIGFj dHVhbCA9IHBxMy5TdGFydHVwLnBhcnNlX3N0cmVhbShzdHJlYW0pCisKKyAgICAgICAgYXNzZXJ0 IGFjdHVhbCA9PSBleHBlY3RlZAorICAgICAgICBhc3NlcnQgc3RyZWFtLnJlYWQoKSA9PSBleHRy YQorCisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgKKyAgICAicGFja2V0LGV4cGVjdGVkX2J5 dGVzIiwKKyAgICBbCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGRpY3QoKSwK KyAgICAgICAgICAgIGIiXHgwMFx4MDBceDAwXHgwOFx4MDBceDAwXHgwMFx4MDAiLAorICAgICAg ICAgICAgaWQ9Im5vdGhpbmcgc2V0IiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFt KAorICAgICAgICAgICAgZGljdChsZW49MTAsIHByb3RvPTB4MTIzNDU2NzgpLAorICAgICAgICAg ICAgYiJceDAwXHgwMFx4MDBceDBBXHgxMlx4MzRceDU2XHg3OFx4MDBceDAwIiwKKyAgICAgICAg ICAgIGlkPSJsZW4gYW5kIHByb3RvIHNldCBleHBsaWNpdGx5IiwKKyAgICAgICAgKSwKKyAgICAg ICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgZGljdChwcm90bz0weDEyMzQ1Njc4KSwKKyAg ICAgICAgICAgIGIiXHgwMFx4MDBceDAwXHgwOFx4MTJceDM0XHg1Nlx4NzgiLAorICAgICAgICAg ICAgaWQ9ImltcGxpZWQgbGVuIHdpdGggbm8gcGF5bG9hZCIsCisgICAgICAgICksCisgICAgICAg IHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGRpY3QocHJvdG89MHgxMjM0NTY3OCwgcGF5bG9h ZD1iImFiY2QiKSwKKyAgICAgICAgICAgIGIiXHgwMFx4MDBceDAwXHgwQ1x4MTJceDM0XHg1Nlx4 NzhhYmNkIiwKKyAgICAgICAgICAgIGlkPSJpbXBsaWVkIGxlbiB3aXRoIHBheWxvYWQiLAorICAg ICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBkaWN0KHBheWxvYWQ9 W2IiIl0pLAorICAgICAgICAgICAgYiJceDAwXHgwMFx4MDBceDA5XHgwMFx4MDNceDAwXHgwMFx4 MDAiLAorICAgICAgICAgICAgaWQ9ImltcGxpZWQgcHJvdG8gdmVyc2lvbiAzIHdoZW4gc2VuZGlu ZyBwYXJhbWV0ZXJzIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAg ICAgICAgZGljdChwYXlsb2FkPVtiImhpIiwgYiIiXSksCisgICAgICAgICAgICBiIlx4MDBceDAw XHgwMFx4MENceDAwXHgwM1x4MDBceDAwaGlceDAwXHgwMCIsCisgICAgICAgICAgICBpZD0iaW1w bGllZCBwcm90byB2ZXJzaW9uIDMgYW5kIGxlbiB3aGVuIHNlbmRpbmcgbW9yZSB0aGFuIG9uZSBw YXJhbWV0ZXIiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAg ICBkaWN0KHBheWxvYWQ9ZGljdCh1c2VyPSJqc21pdGgiLCBkYXRhYmFzZT0icG9zdGdyZXMiKSks CisgICAgICAgICAgICBiIlx4MDBceDAwXHgwMFx4MjdceDAwXHgwM1x4MDBceDAwdXNlclx4MDBq c21pdGhceDAwZGF0YWJhc2VceDAwcG9zdGdyZXNceDAwXHgwMCIsCisgICAgICAgICAgICBpZD0i YXV0by1zZXJpYWxpemF0aW9uIG9mIGRpY3QgcGFyYW1ldGVycyIsCisgICAgICAgICksCisgICAg XSwKKykKK2RlZiB0ZXN0X1N0YXJ0dXBfYnVpbGQocGFja2V0LCBleHBlY3RlZF9ieXRlcyk6Cisg ICAgYWN0dWFsID0gcHEzLlN0YXJ0dXAuYnVpbGQocGFja2V0KQorICAgIGFzc2VydCBhY3R1YWwg PT0gZXhwZWN0ZWRfYnl0ZXMKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoCisgICAgInJh dyxleHBlY3RlZCxleHRyYSIsCisgICAgWworICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAg ICAgICBiIipceDAwXHgwMFx4MDBceDA4YWJjZCIsCisgICAgICAgICAgICBkaWN0KHR5cGU9YiIq IiwgbGVuPTgsIHBheWxvYWQ9YiJhYmNkIiksCisgICAgICAgICAgICBiIiIsCisgICAgICAgICAg ICBpZD0iNC1ieXRlIHBheWxvYWQiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0o CisgICAgICAgICAgICBiIipceDAwXHgwMFx4MDBceDA0IiwKKyAgICAgICAgICAgIGRpY3QodHlw ZT1iIioiLCBsZW49NCwgcGF5bG9hZD1iIiIpLAorICAgICAgICAgICAgYiIiLAorICAgICAgICAg ICAgaWQ9Im5vIHBheWxvYWQiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisg ICAgICAgICAgICBiIipceDAwXHgwMFx4MDBceDA1eGFiY2QiLAorICAgICAgICAgICAgZGljdCh0 eXBlPWIiKiIsIGxlbj01LCBwYXlsb2FkPWIieCIpLAorICAgICAgICAgICAgYiJhYmNkIiwKKyAg ICAgICAgICAgIGlkPSIxLWJ5dGUgcGF5bG9hZCB3aXRoIGV4dHJhIHBhZGRpbmciLAorICAgICAg ICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBiIlJceDAwXHgwMFx4MDBc eDA4XHgwMFx4MDBceDAwXHgwMCIsCisgICAgICAgICAgICBkaWN0KAorICAgICAgICAgICAgICAg IHR5cGU9cHEzLnR5cGVzLkF1dGhuUmVxdWVzdCwKKyAgICAgICAgICAgICAgICBsZW49OCwKKyAg ICAgICAgICAgICAgICBwYXlsb2FkPWRpY3QodHlwZT1wcTMuYXV0aG4uT0ssIGJvZHk9Tm9uZSks CisgICAgICAgICAgICApLAorICAgICAgICAgICAgYiIiLAorICAgICAgICAgICAgaWQ9IkF1dGhl bnRpY2F0aW9uT2siLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAg ICAgICBiIlJceDAwXHgwMFx4MDBceDEyXHgwMFx4MDBceDAwXHgwQUVYVEVSTkFMXHgwMFx4MDAi LAorICAgICAgICAgICAgZGljdCgKKyAgICAgICAgICAgICAgICB0eXBlPXBxMy50eXBlcy5BdXRo blJlcXVlc3QsCisgICAgICAgICAgICAgICAgbGVuPTE4LAorICAgICAgICAgICAgICAgIHBheWxv YWQ9ZGljdCh0eXBlPXBxMy5hdXRobi5TQVNMLCBib2R5PVtiIkVYVEVSTkFMIiwgYiIiXSksCisg ICAgICAgICAgICApLAorICAgICAgICAgICAgYiIiLAorICAgICAgICAgICAgaWQ9IkF1dGhlbnRp Y2F0aW9uU0FTTCIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAg ICAgIGIiUlx4MDBceDAwXHgwMFx4MERceDAwXHgwMFx4MDBceDBCMTIzNDUiLAorICAgICAgICAg ICAgZGljdCgKKyAgICAgICAgICAgICAgICB0eXBlPXBxMy50eXBlcy5BdXRoblJlcXVlc3QsCisg ICAgICAgICAgICAgICAgbGVuPTEzLAorICAgICAgICAgICAgICAgIHBheWxvYWQ9ZGljdCh0eXBl PXBxMy5hdXRobi5TQVNMQ29udGludWUsIGJvZHk9YiIxMjM0NSIpLAorICAgICAgICAgICAgKSwK KyAgICAgICAgICAgIGIiIiwKKyAgICAgICAgICAgIGlkPSJBdXRoZW50aWNhdGlvblNBU0xDb250 aW51ZSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGIi Ulx4MDBceDAwXHgwMFx4MERceDAwXHgwMFx4MDBceDBDMTIzNDUiLAorICAgICAgICAgICAgZGlj dCgKKyAgICAgICAgICAgICAgICB0eXBlPXBxMy50eXBlcy5BdXRoblJlcXVlc3QsCisgICAgICAg ICAgICAgICAgbGVuPTEzLAorICAgICAgICAgICAgICAgIHBheWxvYWQ9ZGljdCh0eXBlPXBxMy5h dXRobi5TQVNMRmluYWwsIGJvZHk9YiIxMjM0NSIpLAorICAgICAgICAgICAgKSwKKyAgICAgICAg ICAgIGIiIiwKKyAgICAgICAgICAgIGlkPSJBdXRoZW50aWNhdGlvblNBU0xGaW5hbCIsCisgICAg ICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGIicFx4MDBceDAwXHgw MFx4MEJodW50ZXIyIiwKKyAgICAgICAgICAgIGRpY3QoCisgICAgICAgICAgICAgICAgdHlwZT1w cTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlLAorICAgICAgICAgICAgICAgIGxlbj0xMSwKKyAgICAg ICAgICAgICAgICBwYXlsb2FkPWIiaHVudGVyMiIsCisgICAgICAgICAgICApLAorICAgICAgICAg ICAgYiIiLAorICAgICAgICAgICAgaWQ9IlBhc3N3b3JkTWVzc2FnZSIsCisgICAgICAgICksCisg ICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGIiS1x4MDBceDAwXHgwMFx4MENceDAw XHgwMFx4MDBceDAwXHgxMlx4MzRceDU2XHg3OCIsCisgICAgICAgICAgICBkaWN0KAorICAgICAg ICAgICAgICAgIHR5cGU9cHEzLnR5cGVzLkJhY2tlbmRLZXlEYXRhLAorICAgICAgICAgICAgICAg IGxlbj0xMiwKKyAgICAgICAgICAgICAgICBwYXlsb2FkPWRpY3QocGlkPTAsIGtleT0weDEyMzQ1 Njc4KSwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBiIiIsCisgICAgICAgICAgICBpZD0i QmFja2VuZEtleURhdGEiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAg ICAgICAgICBiIkNceDAwXHgwMFx4MDBceDA4U0VUXHgwMCIsCisgICAgICAgICAgICBkaWN0KAor ICAgICAgICAgICAgICAgIHR5cGU9cHEzLnR5cGVzLkNvbW1hbmRDb21wbGV0ZSwKKyAgICAgICAg ICAgICAgICBsZW49OCwKKyAgICAgICAgICAgICAgICBwYXlsb2FkPWRpY3QodGFnPWIiU0VUIiks CisgICAgICAgICAgICApLAorICAgICAgICAgICAgYiIiLAorICAgICAgICAgICAgaWQ9IkNvbW1h bmRDb21wbGV0ZSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAg ICAgIGIiRVx4MDBceDAwXHgwMFx4MTFNYmFkIVx4MDBNZG9nIVx4MDBceDAwIiwKKyAgICAgICAg ICAgIGRpY3QodHlwZT1iIkUiLCBsZW49MTcsIHBheWxvYWQ9ZGljdChmaWVsZHM9W2IiTWJhZCEi LCBiIk1kb2chIiwgYiIiXSkpLAorICAgICAgICAgICAgYiIiLAorICAgICAgICAgICAgaWQ9IkVy cm9yUmVzcG9uc2UiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAg ICAgICBiIlNceDAwXHgwMFx4MDBceDA4YVx4MDBiXHgwMCIsCisgICAgICAgICAgICBkaWN0KAor ICAgICAgICAgICAgICAgIHR5cGU9cHEzLnR5cGVzLlBhcmFtZXRlclN0YXR1cywKKyAgICAgICAg ICAgICAgICBsZW49OCwKKyAgICAgICAgICAgICAgICBwYXlsb2FkPWRpY3QobmFtZT1iImEiLCB2 YWx1ZT1iImIiKSwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBiIiIsCisgICAgICAgICAg ICBpZD0iUGFyYW1ldGVyU3RhdHVzIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFt KAorICAgICAgICAgICAgYiJaXHgwMFx4MDBceDAwXHgwNXgiLAorICAgICAgICAgICAgZGljdCh0 eXBlPWIiWiIsIGxlbj01LCBwYXlsb2FkPWRpY3Qoc3RhdHVzPWIieCIpKSwKKyAgICAgICAgICAg IGIiIiwKKyAgICAgICAgICAgIGlkPSJSZWFkeUZvclF1ZXJ5IiwKKyAgICAgICAgKSwKKyAgICAg ICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgYiJRXHgwMFx4MDBceDAwXHgwNiFceDAwIiwK KyAgICAgICAgICAgIGRpY3QodHlwZT1wcTMudHlwZXMuUXVlcnksIGxlbj02LCBwYXlsb2FkPWRp Y3QocXVlcnk9YiIhIikpLAorICAgICAgICAgICAgYiIiLAorICAgICAgICAgICAgaWQ9IlF1ZXJ5 IiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgYiJEXHgw MFx4MDBceDAwXHgwQlx4MDBceDAxXHgwMFx4MDBceDAwXHgwMSEiLAorICAgICAgICAgICAgZGlj dCh0eXBlPXBxMy50eXBlcy5EYXRhUm93LCBsZW49MTEsIHBheWxvYWQ9ZGljdChjb2x1bW5zPVti IiEiXSkpLAorICAgICAgICAgICAgYiIiLAorICAgICAgICAgICAgaWQ9IkRhdGFSb3ciLAorICAg ICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBiIkRceDAwXHgwMFx4 MDBceDA2XHgwMFx4MDBleHRyYSIsCisgICAgICAgICAgICBkaWN0KHR5cGU9cHEzLnR5cGVzLkRh dGFSb3csIGxlbj02LCBwYXlsb2FkPWRpY3QoY29sdW1ucz1bXSkpLAorICAgICAgICAgICAgYiJl eHRyYSIsCisgICAgICAgICAgICBpZD0iRGF0YVJvdyB3aXRoIGV4dHJhIGRhdGEiLAorICAgICAg ICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBiIklceDAwXHgwMFx4MDBc eDA0IiwKKyAgICAgICAgICAgIGRpY3QodHlwZT1wcTMudHlwZXMuRW1wdHlRdWVyeVJlc3BvbnNl LCBsZW49NCwgcGF5bG9hZD1Ob25lKSwKKyAgICAgICAgICAgIGIiIiwKKyAgICAgICAgICAgIGlk PSJFbXB0eVF1ZXJ5UmVzcG9uc2UiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0o CisgICAgICAgICAgICBiIklceDAwXHgwMFx4MDBceDA0XHhGRiIsCisgICAgICAgICAgICBkaWN0 KHR5cGU9YiJJIiwgbGVuPTQsIHBheWxvYWQ9Tm9uZSksCisgICAgICAgICAgICBiIlx4RkYiLAor ICAgICAgICAgICAgaWQ9IkVtcHR5UXVlcnlSZXNwb25zZSB3aXRoIGV4dHJhIGJ5dGVzIiwKKyAg ICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgYiJYXHgwMFx4MDBc eDAwXHgwNCIsCisgICAgICAgICAgICBkaWN0KHR5cGU9cHEzLnR5cGVzLlRlcm1pbmF0ZSwgbGVu PTQsIHBheWxvYWQ9Tm9uZSksCisgICAgICAgICAgICBiIiIsCisgICAgICAgICAgICBpZD0iVGVy bWluYXRlIiwKKyAgICAgICAgKSwKKyAgICBdLAorKQorZGVmIHRlc3RfUHEzX3BhcnNlKHJhdywg ZXhwZWN0ZWQsIGV4dHJhKToKKyAgICB3aXRoIGlvLkJ5dGVzSU8ocmF3KSBhcyBzdHJlYW06Cisg ICAgICAgIGFjdHVhbCA9IHBxMy5QcTMucGFyc2Vfc3RyZWFtKHN0cmVhbSkKKworICAgICAgICBh c3NlcnQgYWN0dWFsID09IGV4cGVjdGVkCisgICAgICAgIGFzc2VydCBzdHJlYW0ucmVhZCgpID09 IGV4dHJhCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKAorICAgICJmaWVsZHMsZXhwZWN0 ZWQiLAorICAgIFsKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgZGljdCh0eXBl PWIiKiIsIGxlbj01KSwKKyAgICAgICAgICAgIGIiKlx4MDBceDAwXHgwMFx4MDVceDAwIiwKKyAg ICAgICAgICAgIGlkPSJ0eXBlIGFuZCBsZW4gc2V0IGV4cGxpY2l0bHkiLAorICAgICAgICApLAor ICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBkaWN0KHR5cGU9YiIqIiksCisgICAg ICAgICAgICBiIipceDAwXHgwMFx4MDBceDA0IiwKKyAgICAgICAgICAgIGlkPSJpbXBsaWVkIGxl biB3aXRoIG5vIHBheWxvYWQiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisg ICAgICAgICAgICBkaWN0KHR5cGU9YiIqIiwgcGF5bG9hZD1iIjEyMzQiKSwKKyAgICAgICAgICAg IGIiKlx4MDBceDAwXHgwMFx4MDgxMjM0IiwKKyAgICAgICAgICAgIGlkPSJpbXBsaWVkIGxlbiB3 aXRoIHBheWxvYWQiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAg ICAgICBkaWN0KHR5cGU9cHEzLnR5cGVzLkF1dGhuUmVxdWVzdCwgcGF5bG9hZD1kaWN0KHR5cGU9 cHEzLmF1dGhuLk9LKSksCisgICAgICAgICAgICBiIlJceDAwXHgwMFx4MDBceDA4XHgwMFx4MDBc eDAwXHgwMCIsCisgICAgICAgICAgICBpZD0iaW1wbGllZCBsZW4vdHlwZSBmb3IgQXV0aGVudGlj YXRpb25PSyIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAg IGRpY3QoCisgICAgICAgICAgICAgICAgdHlwZT1wcTMudHlwZXMuQXV0aG5SZXF1ZXN0LAorICAg ICAgICAgICAgICAgIHBheWxvYWQ9ZGljdCgKKyAgICAgICAgICAgICAgICAgICAgdHlwZT1wcTMu YXV0aG4uU0FTTCwKKyAgICAgICAgICAgICAgICAgICAgYm9keT1bYiJTQ1JBTS1TSEEtMjU2LVBM VVMiLCBiIlNDUkFNLVNIQS0yNTYiLCBiIiJdLAorICAgICAgICAgICAgICAgICksCisgICAgICAg ICAgICApLAorICAgICAgICAgICAgYiJSXHgwMFx4MDBceDAwXHgyQVx4MDBceDAwXHgwMFx4MEFT Q1JBTS1TSEEtMjU2LVBMVVNceDAwU0NSQU0tU0hBLTI1Nlx4MDBceDAwIiwKKyAgICAgICAgICAg IGlkPSJpbXBsaWVkIGxlbi90eXBlIGZvciBBdXRoZW50aWNhdGlvblNBU0wiLAorICAgICAgICAp LAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBkaWN0KAorICAgICAgICAgICAg ICAgIHR5cGU9cHEzLnR5cGVzLkF1dGhuUmVxdWVzdCwKKyAgICAgICAgICAgICAgICBwYXlsb2Fk PWRpY3QodHlwZT1wcTMuYXV0aG4uU0FTTENvbnRpbnVlLCBib2R5PWIiMTIzNDUiKSwKKyAgICAg ICAgICAgICksCisgICAgICAgICAgICBiIlJceDAwXHgwMFx4MDBceDBEXHgwMFx4MDBceDAwXHgw QjEyMzQ1IiwKKyAgICAgICAgICAgIGlkPSJpbXBsaWVkIGxlbi90eXBlIGZvciBBdXRoZW50aWNh dGlvblNBU0xDb250aW51ZSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAg ICAgICAgICAgIGRpY3QoCisgICAgICAgICAgICAgICAgdHlwZT1wcTMudHlwZXMuQXV0aG5SZXF1 ZXN0LAorICAgICAgICAgICAgICAgIHBheWxvYWQ9ZGljdCh0eXBlPXBxMy5hdXRobi5TQVNMRmlu YWwsIGJvZHk9YiIxMjM0NSIpLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIGIiUlx4MDBc eDAwXHgwMFx4MERceDAwXHgwMFx4MDBceDBDMTIzNDUiLAorICAgICAgICAgICAgaWQ9ImltcGxp ZWQgbGVuL3R5cGUgZm9yIEF1dGhlbnRpY2F0aW9uU0FTTEZpbmFsIiwKKyAgICAgICAgKSwKKyAg ICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgZGljdCgKKyAgICAgICAgICAgICAgICB0 eXBlPXBxMy50eXBlcy5QYXNzd29yZE1lc3NhZ2UsCisgICAgICAgICAgICAgICAgcGF5bG9hZD1i Imh1bnRlcjIiLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIGIicFx4MDBceDAwXHgwMFx4 MEJodW50ZXIyIiwKKyAgICAgICAgICAgIGlkPSJpbXBsaWVkIGxlbi90eXBlIGZvciBQYXNzd29y ZE1lc3NhZ2UiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAg ICBkaWN0KHR5cGU9cHEzLnR5cGVzLkJhY2tlbmRLZXlEYXRhLCBwYXlsb2FkPWRpY3QocGlkPTEs IGtleT03KSksCisgICAgICAgICAgICBiIktceDAwXHgwMFx4MDBceDBDXHgwMFx4MDBceDAwXHgw MVx4MDBceDAwXHgwMFx4MDciLAorICAgICAgICAgICAgaWQ9ImltcGxpZWQgbGVuL3R5cGUgZm9y IEJhY2tlbmRLZXlEYXRhIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAg ICAgICAgICAgZGljdCh0eXBlPXBxMy50eXBlcy5Db21tYW5kQ29tcGxldGUsIHBheWxvYWQ9ZGlj dCh0YWc9YiJTRVQiKSksCisgICAgICAgICAgICBiIkNceDAwXHgwMFx4MDBceDA4U0VUXHgwMCIs CisgICAgICAgICAgICBpZD0iaW1wbGllZCBsZW4vdHlwZSBmb3IgQ29tbWFuZENvbXBsZXRlIiwK KyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgZGljdCh0eXBl PXBxMy50eXBlcy5FcnJvclJlc3BvbnNlLCBwYXlsb2FkPWRpY3QoZmllbGRzPVtiImVycm9yIiwg YiIiXSkpLAorICAgICAgICAgICAgYiJFXHgwMFx4MDBceDAwXHgwQmVycm9yXHgwMFx4MDAiLAor ICAgICAgICAgICAgaWQ9ImltcGxpZWQgbGVuL3R5cGUgZm9yIEVycm9yUmVzcG9uc2UiLAorICAg ICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBkaWN0KHR5cGU9cHEz LnR5cGVzLlBhcmFtZXRlclN0YXR1cywgcGF5bG9hZD1kaWN0KG5hbWU9YiJhIiwgdmFsdWU9YiJi IikpLAorICAgICAgICAgICAgYiJTXHgwMFx4MDBceDAwXHgwOGFceDAwYlx4MDAiLAorICAgICAg ICAgICAgaWQ9ImltcGxpZWQgbGVuL3R5cGUgZm9yIFBhcmFtZXRlclN0YXR1cyIsCisgICAgICAg ICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGRpY3QodHlwZT1wcTMudHlw ZXMuUmVhZHlGb3JRdWVyeSwgcGF5bG9hZD1kaWN0KHN0YXR1cz1iIkkiKSksCisgICAgICAgICAg ICBiIlpceDAwXHgwMFx4MDBceDA1SSIsCisgICAgICAgICAgICBpZD0iaW1wbGllZCBsZW4vdHlw ZSBmb3IgUmVhZHlGb3JRdWVyeSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgK KyAgICAgICAgICAgIGRpY3QodHlwZT1wcTMudHlwZXMuUXVlcnksIHBheWxvYWQ9ZGljdChxdWVy eT1iIlNFTEVDVCAxOyIpKSwKKyAgICAgICAgICAgIGIiUVx4MDBceDAwXHgwMFx4MGVTRUxFQ1Qg MTtceDAwIiwKKyAgICAgICAgICAgIGlkPSJpbXBsaWVkIGxlbi90eXBlIGZvciBRdWVyeSIsCisg ICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGRpY3QodHlwZT1w cTMudHlwZXMuRGF0YVJvdywgcGF5bG9hZD1kaWN0KGNvbHVtbnM9W2IiYWJjZCJdKSksCisgICAg ICAgICAgICBiIkRceDAwXHgwMFx4MDBceDBFXHgwMFx4MDFceDAwXHgwMFx4MDBceDA0YWJjZCIs CisgICAgICAgICAgICBpZD0iaW1wbGllZCBsZW4vdHlwZSBmb3IgRGF0YVJvdyIsCisgICAgICAg ICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGRpY3QodHlwZT1wcTMudHlw ZXMuRW1wdHlRdWVyeVJlc3BvbnNlKSwKKyAgICAgICAgICAgIGIiSVx4MDBceDAwXHgwMFx4MDQi LAorICAgICAgICAgICAgaWQ9ImltcGxpZWQgbGVuIGZvciBFbXB0eVF1ZXJ5UmVzcG9uc2UiLAor ICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBkaWN0KHR5cGU9 cHEzLnR5cGVzLlRlcm1pbmF0ZSksCisgICAgICAgICAgICBiIlhceDAwXHgwMFx4MDBceDA0IiwK KyAgICAgICAgICAgIGlkPSJpbXBsaWVkIGxlbiBmb3IgVGVybWluYXRlIiwKKyAgICAgICAgKSwK KyAgICBdLAorKQorZGVmIHRlc3RfUHEzX2J1aWxkKGZpZWxkcywgZXhwZWN0ZWQpOgorICAgIGFj dHVhbCA9IHBxMy5QcTMuYnVpbGQoZmllbGRzKQorICAgIGFzc2VydCBhY3R1YWwgPT0gZXhwZWN0 ZWQKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoCisgICAgInJhdyxleHBlY3RlZCxleHRy YSIsCisgICAgWworICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBiIlx4MDBceDAw IiwKKyAgICAgICAgICAgIGRpY3QoY29sdW1ucz1bXSksCisgICAgICAgICAgICBiIiIsCisgICAg ICAgICAgICBpZD0ibm8gY29sdW1ucyIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJh bSgKKyAgICAgICAgICAgIGIiXHgwMFx4MDFceDAwXHgwMFx4MDBceDA0YWJjZCIsCisgICAgICAg ICAgICBkaWN0KGNvbHVtbnM9W2IiYWJjZCJdKSwKKyAgICAgICAgICAgIGIiIiwKKyAgICAgICAg ICAgIGlkPSJvbmUgY29sdW1uIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAor ICAgICAgICAgICAgYiJceDAwXHgwMlx4MDBceDAwXHgwMFx4MDRhYmNkXHgwMFx4MDBceDAwXHgw MXgiLAorICAgICAgICAgICAgZGljdChjb2x1bW5zPVtiImFiY2QiLCBiIngiXSksCisgICAgICAg ICAgICBiIiIsCisgICAgICAgICAgICBpZD0ibXVsdGlwbGUgY29sdW1ucyIsCisgICAgICAgICks CisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGIiXHgwMFx4MDJceDAwXHgwMFx4 MDBceDAwXHgwMFx4MDBceDAwXHgwMXgiLAorICAgICAgICAgICAgZGljdChjb2x1bW5zPVtiIiIs IGIieCJdKSwKKyAgICAgICAgICAgIGIiIiwKKyAgICAgICAgICAgIGlkPSJlbXB0eSBjb2x1bW4g dmFsdWUiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBi Ilx4MDBceDAyXHhGRlx4RkZceEZGXHhGRlx4RkZceEZGXHhGRlx4RkYiLAorICAgICAgICAgICAg ZGljdChjb2x1bW5zPVtOb25lLCBOb25lXSksCisgICAgICAgICAgICBiIiIsCisgICAgICAgICAg ICBpZD0ibnVsbCBjb2x1bW5zIiwKKyAgICAgICAgKSwKKyAgICBdLAorKQorZGVmIHRlc3RfRGF0 YVJvd19wYXJzZShyYXcsIGV4cGVjdGVkLCBleHRyYSk6CisgICAgcGt0ID0gYiJEIiArIHN0cnVj dC5wYWNrKCIhaSIsIGxlbihyYXcpICsgNCkgKyByYXcKKyAgICB3aXRoIGlvLkJ5dGVzSU8ocGt0 KSBhcyBzdHJlYW06CisgICAgICAgIGFjdHVhbCA9IHBxMy5QcTMucGFyc2Vfc3RyZWFtKHN0cmVh bSkKKworICAgICAgICBhc3NlcnQgYWN0dWFsLnR5cGUgPT0gcHEzLnR5cGVzLkRhdGFSb3cKKyAg ICAgICAgYXNzZXJ0IGFjdHVhbC5wYXlsb2FkID09IGV4cGVjdGVkCisgICAgICAgIGFzc2VydCBz dHJlYW0ucmVhZCgpID09IGV4dHJhCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKAorICAg ICJmaWVsZHMsZXhwZWN0ZWQiLAorICAgIFsKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAg ICAgICAgZGljdCgpLAorICAgICAgICAgICAgYiJceDAwXHgwMCIsCisgICAgICAgICAgICBpZD0i bm8gY29sdW1ucyIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAg ICAgIGRpY3QoY29sdW1ucz1bTm9uZSwgTm9uZV0pLAorICAgICAgICAgICAgYiJceDAwXHgwMlx4 RkZceEZGXHhGRlx4RkZceEZGXHhGRlx4RkZceEZGIiwKKyAgICAgICAgICAgIGlkPSJudWxsIGNv bHVtbnMiLAorICAgICAgICApLAorICAgIF0sCispCitkZWYgdGVzdF9EYXRhUm93X2J1aWxkKGZp ZWxkcywgZXhwZWN0ZWQpOgorICAgIGFjdHVhbCA9IHBxMy5QcTMuYnVpbGQoZGljdCh0eXBlPXBx My50eXBlcy5EYXRhUm93LCBwYXlsb2FkPWZpZWxkcykpCisKKyAgICBleHBlY3RlZCA9IGIiRCIg KyBzdHJ1Y3QucGFjaygiIWkiLCBsZW4oZXhwZWN0ZWQpICsgNCkgKyBleHBlY3RlZAorICAgIGFz c2VydCBhY3R1YWwgPT0gZXhwZWN0ZWQKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoCisg ICAgInJhdyxleHBlY3RlZCxleGNlcHRpb24iLAorICAgIFsKKyAgICAgICAgcHl0ZXN0LnBhcmFt KAorICAgICAgICAgICAgYiJFWFRFUk5BTFx4MDBceEZGXHhGRlx4RkZceEZGIiwKKyAgICAgICAg ICAgIGRpY3QobmFtZT1iIkVYVEVSTkFMIiwgbGVuPS0xLCBkYXRhPU5vbmUpLAorICAgICAgICAg ICAgTm9uZSwKKyAgICAgICAgICAgIGlkPSJubyBpbml0aWFsIHJlc3BvbnNlIiwKKyAgICAgICAg KSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgYiJFWFRFUk5BTFx4MDBceDAw XHgwMFx4MDBceDAybWUiLAorICAgICAgICAgICAgZGljdChuYW1lPWIiRVhURVJOQUwiLCBsZW49 MiwgZGF0YT1iIm1lIiksCisgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgaWQ9ImluaXRp YWwgcmVzcG9uc2UiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAg ICAgICBiIkVYVEVSTkFMXHgwMFx4MDBceDAwXHgwMFx4MDJtZWV4dHJhIiwKKyAgICAgICAgICAg IE5vbmUsCisgICAgICAgICAgICBUZXJtaW5hdGVkRXJyb3IsCisgICAgICAgICAgICBpZD0iZXh0 cmEgZGF0YSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAg IGIiRVhURVJOQUxceDAwXHgwMFx4MDBceDAwXHhGRm1lIiwKKyAgICAgICAgICAgIE5vbmUsCisg ICAgICAgICAgICBTdHJlYW1FcnJvciwKKyAgICAgICAgICAgIGlkPSJ1bmRlcmZsb3ciLAorICAg ICAgICApLAorICAgIF0sCispCitkZWYgdGVzdF9TQVNMSW5pdGlhbFJlc3BvbnNlX3BhcnNlKHJh dywgZXhwZWN0ZWQsIGV4Y2VwdGlvbik6CisgICAgY3R4ID0gY29udGV4dGxpYi5udWxsY29udGV4 dCgpCisgICAgaWYgZXhjZXB0aW9uOgorICAgICAgICBjdHggPSBweXRlc3QucmFpc2VzKGV4Y2Vw dGlvbikKKworICAgIHdpdGggY3R4OgorICAgICAgICBhY3R1YWwgPSBwcTMuU0FTTEluaXRpYWxS ZXNwb25zZS5wYXJzZShyYXcpCisgICAgICAgIGFzc2VydCBhY3R1YWwgPT0gZXhwZWN0ZWQKKwor CitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoCisgICAgImZpZWxkcyxleHBlY3RlZCIsCisgICAg WworICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBkaWN0KG5hbWU9YiJFWFRFUk5B TCIpLAorICAgICAgICAgICAgYiJFWFRFUk5BTFx4MDBceEZGXHhGRlx4RkZceEZGIiwKKyAgICAg ICAgICAgIGlkPSJubyBpbml0aWFsIHJlc3BvbnNlIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0 ZXN0LnBhcmFtKAorICAgICAgICAgICAgZGljdChuYW1lPWIiRVhURVJOQUwiLCBkYXRhPU5vbmUp LAorICAgICAgICAgICAgYiJFWFRFUk5BTFx4MDBceEZGXHhGRlx4RkZceEZGIiwKKyAgICAgICAg ICAgIGlkPSJubyBpbml0aWFsIHJlc3BvbnNlIChleHBsaWNpdCBOb25lKSIsCisgICAgICAgICks CisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGRpY3QobmFtZT1iIkVYVEVSTkFM IiwgZGF0YT1iIiIpLAorICAgICAgICAgICAgYiJFWFRFUk5BTFx4MDBceDAwXHgwMFx4MDBceDAw IiwKKyAgICAgICAgICAgIGlkPSJlbXB0eSByZXNwb25zZSIsCisgICAgICAgICksCisgICAgICAg IHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGRpY3QobmFtZT1iIkVYVEVSTkFMIiwgZGF0YT1i Im1lQGV4YW1wbGUuY29tIiksCisgICAgICAgICAgICBiIkVYVEVSTkFMXHgwMFx4MDBceDAwXHgw MFx4MEVtZUBleGFtcGxlLmNvbSIsCisgICAgICAgICAgICBpZD0iaW5pdGlhbCByZXNwb25zZSIs CisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGRpY3QobmFt ZT1iIkVYVEVSTkFMIiwgbGVuPTIsIGRhdGE9YiJtZUBleGFtcGxlLmNvbSIpLAorICAgICAgICAg ICAgYiJFWFRFUk5BTFx4MDBceDAwXHgwMFx4MDBceDAybWVAZXhhbXBsZS5jb20iLAorICAgICAg ICAgICAgaWQ9ImRhdGEgb3ZlcmZsb3ciLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFy YW0oCisgICAgICAgICAgICBkaWN0KG5hbWU9YiJFWFRFUk5BTCIsIGxlbj0xNCwgZGF0YT1iIm1l IiksCisgICAgICAgICAgICBiIkVYVEVSTkFMXHgwMFx4MDBceDAwXHgwMFx4MEVtZSIsCisgICAg ICAgICAgICBpZD0iZGF0YSB1bmRlcmZsb3ciLAorICAgICAgICApLAorICAgIF0sCispCitkZWYg dGVzdF9TQVNMSW5pdGlhbFJlc3BvbnNlX2J1aWxkKGZpZWxkcywgZXhwZWN0ZWQpOgorICAgIGFj dHVhbCA9IHBxMy5TQVNMSW5pdGlhbFJlc3BvbnNlLmJ1aWxkKGZpZWxkcykKKyAgICBhc3NlcnQg YWN0dWFsID09IGV4cGVjdGVkCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKAorICAgICJ2 ZXJzaW9uLGV4cGVjdGVkX2J5dGVzIiwKKyAgICBbCisgICAgICAgIHB5dGVzdC5wYXJhbSgoMywg MCksIGIiXHgwMFx4MDNceDAwXHgwMCIsIGlkPSJ2ZXJzaW9uIDMiKSwKKyAgICAgICAgcHl0ZXN0 LnBhcmFtKCgxMjM0LCA1Njc5KSwgYiJceDA0XHhkMlx4MTZceDJmIiwgaWQ9IlNTTFJlcXVlc3Qi KSwKKyAgICBdLAorKQorZGVmIHRlc3RfcHJvdG9jb2wodmVyc2lvbiwgZXhwZWN0ZWRfYnl0ZXMp OgorICAgICMgTWFrZSBzdXJlIHRoZSBpbnRlZ2VyIHJldHVybmVkIGJ5IHByb3RvY29sIGlzIGNv cnJlY3RseSBzZXJpYWxpemVkIG9uIHRoZQorICAgICMgd2lyZS4KKyAgICBhc3NlcnQgc3RydWN0 LnBhY2soIiFpIiwgcHEzLnByb3RvY29sKCp2ZXJzaW9uKSkgPT0gZXhwZWN0ZWRfYnl0ZXMKKwor CitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoCisgICAgImVudnZhcixmdW5jLGV4cGVjdGVkIiwK KyAgICBbCisgICAgICAgICgiUEdIT1NUIiwgcHEzLnBnaG9zdCwgImxvY2FsaG9zdCIpLAorICAg ICAgICAoIlBHUE9SVCIsIHBxMy5wZ3BvcnQsIDU0MzIpLAorICAgICAgICAoIlBHVVNFUiIsIHBx My5wZ3VzZXIsIGdldHBhc3MuZ2V0dXNlcigpKSwKKyAgICAgICAgKCJQR0RBVEFCQVNFIiwgcHEz LnBnZGF0YWJhc2UsICJwb3N0Z3JlcyIpLAorICAgIF0sCispCitkZWYgdGVzdF9lbnZfZGVmYXVs dHMobW9ua2V5cGF0Y2gsIGVudnZhciwgZnVuYywgZXhwZWN0ZWQpOgorICAgIG1vbmtleXBhdGNo LmRlbGVudihlbnZ2YXIsIHJhaXNpbmc9RmFsc2UpCisKKyAgICBhY3R1YWwgPSBmdW5jKCkKKyAg ICBhc3NlcnQgYWN0dWFsID09IGV4cGVjdGVkCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXpl KAorICAgICJlbnZ2YXJzLGZ1bmMsZXhwZWN0ZWQiLAorICAgIFsKKyAgICAgICAgKGRpY3QoUEdI T1NUPSJvdGhlcmhvc3QiKSwgcHEzLnBnaG9zdCwgIm90aGVyaG9zdCIpLAorICAgICAgICAoZGlj dChQR1BPUlQ9IjY3ODkiKSwgcHEzLnBncG9ydCwgNjc4OSksCisgICAgICAgIChkaWN0KFBHVVNF Uj0icG9zdGdyZXMiKSwgcHEzLnBndXNlciwgInBvc3RncmVzIiksCisgICAgICAgIChkaWN0KFBH REFUQUJBU0U9InRlbXBsYXRlMSIpLCBwcTMucGdkYXRhYmFzZSwgInRlbXBsYXRlMSIpLAorICAg IF0sCispCitkZWYgdGVzdF9lbnYobW9ua2V5cGF0Y2gsIGVudnZhcnMsIGZ1bmMsIGV4cGVjdGVk KToKKyAgICBmb3IgaywgdiBpbiBlbnZ2YXJzLml0ZW1zKCk6CisgICAgICAgIG1vbmtleXBhdGNo LnNldGVudihrLCB2KQorCisgICAgYWN0dWFsID0gZnVuYygpCisgICAgYXNzZXJ0IGFjdHVhbCA9 PSBleHBlY3RlZApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcHl0aG9uL3Rscy5weSBiL3NyYy90ZXN0 L3B5dGhvbi90bHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMDc1 YzAyYzFjYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5dGhvbi90bHMucHkKQEAgLTAs MCArMSwxOTUgQEAKKyMKKyMgQ29weXJpZ2h0IDIwMjEgVk13YXJlLCBJbmMuCisjIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBQb3N0Z3JlU1FMCisjCisKK2Zyb20gY29uc3RydWN0IGltcG9ydCAq CisKKyMKKyMgVExTIDEuMworIworIyBNb3N0IG9mIHRoZSB0eXBlcyBiZWxvdyBhcmUgdHJhbnNj cmliZWQgZnJvbSBSRkMgODQ0NjoKKyMKKyMgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRt bC9yZmM4NDQ2CisjCisKKworZGVmIF9WZWN0b3Ioc2l6ZV9maWVsZCwgZWxlbWVudCk6CisgICAg cmV0dXJuIFByZWZpeGVkKHNpemVfZmllbGQsIEdyZWVkeVJhbmdlKGVsZW1lbnQpKQorCisKKyMg QWxlcnRzCisKK0FsZXJ0TGV2ZWwgPSBFbnVtKAorICAgIEJ5dGUsCisgICAgd2FybmluZz0xLAor ICAgIGZhdGFsPTIsCispCisKK0FsZXJ0RGVzY3JpcHRpb24gPSBFbnVtKAorICAgIEJ5dGUsCisg ICAgY2xvc2Vfbm90aWZ5PTAsCisgICAgdW5leHBlY3RlZF9tZXNzYWdlPTEwLAorICAgIGJhZF9y ZWNvcmRfbWFjPTIwLAorICAgIGRlY3J5cHRpb25fZmFpbGVkX1JFU0VSVkVEPTIxLAorICAgIHJl Y29yZF9vdmVyZmxvdz0yMiwKKyAgICBkZWNvbXByZXNzaW9uX2ZhaWx1cmU9MzAsCisgICAgaGFu ZHNoYWtlX2ZhaWx1cmU9NDAsCisgICAgbm9fY2VydGlmaWNhdGVfUkVTRVJWRUQ9NDEsCisgICAg YmFkX2NlcnRpZmljYXRlPTQyLAorICAgIHVuc3VwcG9ydGVkX2NlcnRpZmljYXRlPTQzLAorICAg IGNlcnRpZmljYXRlX3Jldm9rZWQ9NDQsCisgICAgY2VydGlmaWNhdGVfZXhwaXJlZD00NSwKKyAg ICBjZXJ0aWZpY2F0ZV91bmtub3duPTQ2LAorICAgIGlsbGVnYWxfcGFyYW1ldGVyPTQ3LAorICAg IHVua25vd25fY2E9NDgsCisgICAgYWNjZXNzX2RlbmllZD00OSwKKyAgICBkZWNvZGVfZXJyb3I9 NTAsCisgICAgZGVjcnlwdF9lcnJvcj01MSwKKyAgICBleHBvcnRfcmVzdHJpY3Rpb25fUkVTRVJW RUQ9NjAsCisgICAgcHJvdG9jb2xfdmVyc2lvbj03MCwKKyAgICBpbnN1ZmZpY2llbnRfc2VjdXJp dHk9NzEsCisgICAgaW50ZXJuYWxfZXJyb3I9ODAsCisgICAgdXNlcl9jYW5jZWxlZD05MCwKKyAg ICBub19yZW5lZ290aWF0aW9uPTEwMCwKKyAgICB1bnN1cHBvcnRlZF9leHRlbnNpb249MTEwLAor KQorCitBbGVydCA9IFN0cnVjdCgKKyAgICAibGV2ZWwiIC8gQWxlcnRMZXZlbCwKKyAgICAiZGVz Y3JpcHRpb24iIC8gQWxlcnREZXNjcmlwdGlvbiwKKykKKworCisjIEV4dGVuc2lvbnMKKworRXh0 ZW5zaW9uVHlwZSA9IEVudW0oCisgICAgSW50MTZ1YiwKKyAgICBzZXJ2ZXJfbmFtZT0wLAorICAg IG1heF9mcmFnbWVudF9sZW5ndGg9MSwKKyAgICBzdGF0dXNfcmVxdWVzdD01LAorICAgIHN1cHBv cnRlZF9ncm91cHM9MTAsCisgICAgc2lnbmF0dXJlX2FsZ29yaXRobXM9MTMsCisgICAgdXNlX3Ny dHA9MTQsCisgICAgaGVhcnRiZWF0PTE1LAorICAgIGFwcGxpY2F0aW9uX2xheWVyX3Byb3RvY29s X25lZ290aWF0aW9uPTE2LAorICAgIHNpZ25lZF9jZXJ0aWZpY2F0ZV90aW1lc3RhbXA9MTgsCisg ICAgY2xpZW50X2NlcnRpZmljYXRlX3R5cGU9MTksCisgICAgc2VydmVyX2NlcnRpZmljYXRlX3R5 cGU9MjAsCisgICAgcGFkZGluZz0yMSwKKyAgICBwcmVfc2hhcmVkX2tleT00MSwKKyAgICBlYXJs eV9kYXRhPTQyLAorICAgIHN1cHBvcnRlZF92ZXJzaW9ucz00MywKKyAgICBjb29raWU9NDQsCisg ICAgcHNrX2tleV9leGNoYW5nZV9tb2Rlcz00NSwKKyAgICBjZXJ0aWZpY2F0ZV9hdXRob3JpdGll cz00NywKKyAgICBvaWRfZmlsdGVycz00OCwKKyAgICBwb3N0X2hhbmRzaGFrZV9hdXRoPTQ5LAor ICAgIHNpZ25hdHVyZV9hbGdvcml0aG1zX2NlcnQ9NTAsCisgICAga2V5X3NoYXJlPTUxLAorKQor CitFeHRlbnNpb24gPSBTdHJ1Y3QoCisgICAgImV4dGVuc2lvbl90eXBlIiAvIEV4dGVuc2lvblR5 cGUsCisgICAgImV4dGVuc2lvbl9kYXRhIiAvIFByZWZpeGVkKEludDE2dWIsIEdyZWVkeUJ5dGVz KSwKKykKKworCisjIENsaWVudEhlbGxvCisKKworY2xhc3MgX0NpcGhlclN1aXRlQWRhcHRlcihB ZGFwdGVyKToKKyAgICBjbGFzcyBfaGV4dHVwbGUodHVwbGUpOgorICAgICAgICBkZWYgX19yZXBy X18oc2VsZik6CisgICAgICAgICAgICByZXR1cm4gZiIoMHh7c2VsZlswXTowMlh9LCAweHtzZWxm WzFdOjAyWH0pIgorCisgICAgZGVmIF9lbmNvZGUoc2VsZiwgb2JqLCBjb250ZXh0LCBwYXRoKToK KyAgICAgICAgcmV0dXJuIGJ5dGVzKG9iaikKKworICAgIGRlZiBfZGVjb2RlKHNlbGYsIG9iaiwg Y29udGV4dCwgcGF0aCk6CisgICAgICAgIGFzc2VydCBsZW4ob2JqKSA9PSAyCisgICAgICAgIHJl dHVybiBzZWxmLl9oZXh0dXBsZShvYmopCisKKworUHJvdG9jb2xWZXJzaW9uID0gSGV4KEludDE2 dWIpCisKK1JhbmRvbSA9IEhleChCeXRlcygzMikpCisKK0NpcGhlclN1aXRlID0gX0NpcGhlclN1 aXRlQWRhcHRlcihCeXRlWzJdKQorCitDbGllbnRIZWxsbyA9IFN0cnVjdCgKKyAgICAibGVnYWN5 X3ZlcnNpb24iIC8gUHJvdG9jb2xWZXJzaW9uLAorICAgICJyYW5kb20iIC8gUmFuZG9tLAorICAg ICJsZWdhY3lfc2Vzc2lvbl9pZCIgLyBQcmVmaXhlZChCeXRlLCBIZXgoR3JlZWR5Qnl0ZXMpKSwK KyAgICAiY2lwaGVyX3N1aXRlcyIgLyBfVmVjdG9yKEludDE2dWIsIENpcGhlclN1aXRlKSwKKyAg ICAibGVnYWN5X2NvbXByZXNzaW9uX21ldGhvZHMiIC8gUHJlZml4ZWQoQnl0ZSwgR3JlZWR5Qnl0 ZXMpLAorICAgICJleHRlbnNpb25zIiAvIF9WZWN0b3IoSW50MTZ1YiwgRXh0ZW5zaW9uKSwKKykK KworIyBTZXJ2ZXJIZWxsbworCitTZXJ2ZXJIZWxsbyA9IFN0cnVjdCgKKyAgICAibGVnYWN5X3Zl cnNpb24iIC8gUHJvdG9jb2xWZXJzaW9uLAorICAgICJyYW5kb20iIC8gUmFuZG9tLAorICAgICJs ZWdhY3lfc2Vzc2lvbl9pZF9lY2hvIiAvIFByZWZpeGVkKEJ5dGUsIEhleChHcmVlZHlCeXRlcykp LAorICAgICJjaXBoZXJfc3VpdGUiIC8gQ2lwaGVyU3VpdGUsCisgICAgImxlZ2FjeV9jb21wcmVz c2lvbl9tZXRob2QiIC8gSGV4KEJ5dGUpLAorICAgICJleHRlbnNpb25zIiAvIF9WZWN0b3IoSW50 MTZ1YiwgRXh0ZW5zaW9uKSwKKykKKworIyBIYW5kc2hha2UKKworSGFuZHNoYWtlVHlwZSA9IEVu dW0oCisgICAgQnl0ZSwKKyAgICBjbGllbnRfaGVsbG89MSwKKyAgICBzZXJ2ZXJfaGVsbG89MiwK KyAgICBuZXdfc2Vzc2lvbl90aWNrZXQ9NCwKKyAgICBlbmRfb2ZfZWFybHlfZGF0YT01LAorICAg IGVuY3J5cHRlZF9leHRlbnNpb25zPTgsCisgICAgY2VydGlmaWNhdGU9MTEsCisgICAgY2VydGlm aWNhdGVfcmVxdWVzdD0xMywKKyAgICBjZXJ0aWZpY2F0ZV92ZXJpZnk9MTUsCisgICAgZmluaXNo ZWQ9MjAsCisgICAga2V5X3VwZGF0ZT0yNCwKKyAgICBtZXNzYWdlX2hhc2g9MjU0LAorKQorCitI YW5kc2hha2UgPSBTdHJ1Y3QoCisgICAgIm1zZ190eXBlIiAvIEhhbmRzaGFrZVR5cGUsCisgICAg Imxlbmd0aCIgLyBJbnQyNHViLAorICAgICJwYXlsb2FkIgorICAgIC8gU3dpdGNoKAorICAgICAg ICB0aGlzLm1zZ190eXBlLAorICAgICAgICB7CisgICAgICAgICAgICBIYW5kc2hha2VUeXBlLmNs aWVudF9oZWxsbzogQ2xpZW50SGVsbG8sCisgICAgICAgICAgICBIYW5kc2hha2VUeXBlLnNlcnZl cl9oZWxsbzogU2VydmVySGVsbG8sCisgICAgICAgICAgICAjIEhhbmRzaGFrZVR5cGUuZW5kX29m X2Vhcmx5X2RhdGE6IEVuZE9mRWFybHlEYXRhLAorICAgICAgICAgICAgIyBIYW5kc2hha2VUeXBl LmVuY3J5cHRlZF9leHRlbnNpb25zOiBFbmNyeXB0ZWRFeHRlbnNpb25zLAorICAgICAgICAgICAg IyBIYW5kc2hha2VUeXBlLmNlcnRpZmljYXRlX3JlcXVlc3Q6IENlcnRpZmljYXRlUmVxdWVzdCwK KyAgICAgICAgICAgICMgSGFuZHNoYWtlVHlwZS5jZXJ0aWZpY2F0ZTogQ2VydGlmaWNhdGUsCisg ICAgICAgICAgICAjIEhhbmRzaGFrZVR5cGUuY2VydGlmaWNhdGVfdmVyaWZ5OiBDZXJ0aWZpY2F0 ZVZlcmlmeSwKKyAgICAgICAgICAgICMgSGFuZHNoYWtlVHlwZS5maW5pc2hlZDogRmluaXNoZWQs CisgICAgICAgICAgICAjIEhhbmRzaGFrZVR5cGUubmV3X3Nlc3Npb25fdGlja2V0OiBOZXdTZXNz aW9uVGlja2V0LAorICAgICAgICAgICAgIyBIYW5kc2hha2VUeXBlLmtleV91cGRhdGU6IEtleVVw ZGF0ZSwKKyAgICAgICAgfSwKKyAgICAgICAgZGVmYXVsdD1GaXhlZFNpemVkKHRoaXMubGVuZ3Ro LCBHcmVlZHlCeXRlcyksCisgICAgKSwKKykKKworIyBSZWNvcmRzCisKK0NvbnRlbnRUeXBlID0g RW51bSgKKyAgICBCeXRlLAorICAgIGludmFsaWQ9MCwKKyAgICBjaGFuZ2VfY2lwaGVyX3NwZWM9 MjAsCisgICAgYWxlcnQ9MjEsCisgICAgaGFuZHNoYWtlPTIyLAorICAgIGFwcGxpY2F0aW9uX2Rh dGE9MjMsCispCisKK1BsYWludGV4dCA9IFN0cnVjdCgKKyAgICAidHlwZSIgLyBDb250ZW50VHlw ZSwKKyAgICAibGVnYWN5X3JlY29yZF92ZXJzaW9uIiAvIFByb3RvY29sVmVyc2lvbiwKKyAgICAi bGVuZ3RoIiAvIEludDE2dWIsCisgICAgImZyYWdtZW50IiAvIEZpeGVkU2l6ZWQodGhpcy5sZW5n dGgsIEdyZWVkeUJ5dGVzKSwKKykKLS0gCjIuMjUuMQoK --_010_0e86fe7e3534fb05db02379fed404a2010eb1d62camelvmwarecom_ Content-Type: text/x-patch; name="v3-0009-contrib-oauth-switch-to-pluggable-auth-API.patch" Content-Description: v3-0009-contrib-oauth-switch-to-pluggable-auth-API.patch Content-Disposition: attachment; filename="v3-0009-contrib-oauth-switch-to-pluggable-auth-API.patch"; size=14069; creation-date="Fri, 04 Mar 2022 19:13:41 GMT"; modification-date="Fri, 04 Mar 2022 19:13:41 GMT" Content-ID: <5E7D004722795146AD02B0CECC8F7052@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 RnJvbSBkMjc1YjMyOWFhZWQ2YzZlZjI0MDNlNGMzMTM3MjVhMWFlODhmYTQwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8cGNoYW1waW9uQHZtd2FyZS5jb20+ CkRhdGU6IEZyaSwgNCBNYXIgMjAyMiAwODo0ODo0NyAtMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjMg OS85XSBjb250cmliL29hdXRoOiBzd2l0Y2ggdG8gcGx1Z2dhYmxlIGF1dGggQVBJCgpNb3ZlIHRo ZSBjb3JlIHNlcnZlciBpbXBsZW1lbnRhdGlvbiB0byBjb250cmliL29hdXRoIGFzIGEgcGx1Z2dh YmxlCnByb3ZpZGVyLCB1c2luZyB0aGUgUmVnaXN0ZXJBdXRoUHJvdmlkZXIoKSBBUEkuIG9hdXRo X3ZhbGlkYXRvcl9jb21tYW5kCmhhcyBiZWVuIG1vdmVkIGZyb20gY29yZSB0byBhIGN1c3RvbSBH VUMuIFRlc3RzIGhhdmUgYmVlbiB1cGRhdGVkIHRvCmhhbmRsZSB0aGUgbmV3IGltcGxlbWVudGF0 aW9ucy4KClNvbWUgc2VydmVyIG1vZGlmaWNhdGlvbnMgcmVtYWluOgotIEFkZGluZyBuZXcgSEJB IG9wdGlvbnMgZm9yIGN1c3RvbSBwcm92aWRlcnMKLSBSZWdpc3RlcmluZyBzdXBwb3J0IGZvciB1 c2VybWFwcwotIEFsbG93aW5nIGN1c3RvbSBTQVNMIG1lY2hhbmlzbXMgdG8gZGVjbGFyZSB0aGVp ciBvd24gbWF4aW11bSBtZXNzYWdlCiAgbGVuZ3RoCgpUaGlzIHBhdGNoIGlzIG9wdGlvbmFsOyB5 b3UgY2FuIGFwcGx5L3JldmVydCBpdCB0byBjb21wYXJlIHRoZSB0d28KYXBwcm9hY2hlcy4KLS0t CiBjb250cmliL29hdXRoL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgfCAxNiArKysr KysrCiAuLi4vYXV0aC1vYXV0aC5jID0+IGNvbnRyaWIvb2F1dGgvb2F1dGguYyAgICAgfCA0NyAr KysrKysrKysrKysrKystLS0tCiBzcmMvYmFja2VuZC9saWJwcS9NYWtlZmlsZSAgICAgICAgICAg ICAgICAgICAgfCAgMSAtCiBzcmMvYmFja2VuZC9saWJwcS9hdXRoLmMgICAgICAgICAgICAgICAg ICAgICAgfCAgNyAtLS0KIHNyYy9iYWNrZW5kL2xpYnBxL2hiYS5jICAgICAgICAgICAgICAgICAg ICAgICB8IDIxICsrKysrLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYyAgICAgICAg ICAgICAgICAgIHwgMTIgLS0tLS0KIHNyYy9pbmNsdWRlL2xpYnBxL2hiYS5oICAgICAgICAgICAg ICAgICAgICAgICB8ICAzICstCiBzcmMvaW5jbHVkZS9saWJwcS9vYXV0aC5oICAgICAgICAgICAg ICAgICAgICAgfCAyNCAtLS0tLS0tLS0tCiBzcmMvdGVzdC9weXRob24vc2VydmVyL3Rlc3Rfb2F1 dGgucHkgICAgICAgICAgfCAyMCArKysrLS0tLQogOSBmaWxlcyBjaGFuZ2VkLCA3OCBpbnNlcnRp b25zKCspLCA3MyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL29hdXRo L01ha2VmaWxlCiByZW5hbWUgc3JjL2JhY2tlbmQvbGlicHEvYXV0aC1vYXV0aC5jID0+IGNvbnRy aWIvb2F1dGgvb2F1dGguYyAoOTUlKQogZGVsZXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2xp YnBxL29hdXRoLmgKCmRpZmYgLS1naXQgYS9jb250cmliL29hdXRoL01ha2VmaWxlIGIvY29udHJp Yi9vYXV0aC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi44 ODBiYzFmZWYzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9vYXV0aC9NYWtlZmlsZQpAQCAt MCwwICsxLDE2IEBACisjIGNvbnRyaWIvb2F1dGgvTWFrZWZpbGUKKworTU9EVUxFX2JpZyA9IG9h dXRoCitPQkpTID0gb2F1dGgubworUEdGSUxFREVTQyA9ICJvYXV0aCAtIGF1dGggcHJvdmlkZXIg c3VwcG9ydGluZyBPQXV0aCAyLjAvT0lEQyIKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NPTkZJRyA9 IHBnX2NvbmZpZworUEdYUyA6PSAkKHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitpbmNsdWRl ICQoUEdYUykKK2Vsc2UKK3N1YmRpciA9IGNvbnRyaWIvb2F1dGgKK3RvcF9idWlsZGRpciA9IC4u Ly4uCitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitpbmNsdWRl ICQodG9wX3NyY2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5taworZW5kaWYKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGgtb2F1dGguYyBiL2NvbnRyaWIvb2F1dGgvb2F1dGgu YwpzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBzcmMvYmFja2VuZC9saWJwcS9hdXRo LW9hdXRoLmMKcmVuYW1lIHRvIGNvbnRyaWIvb2F1dGgvb2F1dGguYwppbmRleCBjMTIzMmEzMWEw Li4zYTZkYWIxOWQ5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9saWJwcS9hdXRoLW9hdXRoLmMK KysrIGIvY29udHJpYi9vYXV0aC9vYXV0aC5jCkBAIC0xLDMzICsxLDM5IEBACi0vKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCi0gKiBhdXRoLW9hdXRoLmMKKyAqIG9h dXRoLmMKICAqCSAgU2VydmVyLXNpZGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNBU0wgT0FVVEhC RUFSRVIgbWVjaGFuaXNtLgogICoKICAqIFNlZSB0aGUgZm9sbG93aW5nIFJGQyBmb3IgbW9yZSBk ZXRhaWxzOgogICogLSBSRkMgNzYyODogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc2 MjgKICAqCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMSwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0y MDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAogICogUG9ydGlvbnMgQ29w eXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEK ICAqCi0gKiBzcmMvYmFja2VuZC9saWJwcS9hdXRoLW9hdXRoLmMKKyAqIGNvbnRyaWIvb2F1dGgv b2F1dGguYwogICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICov CisKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVk ZSA8ZmNudGwuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9vYXV0aC1jb21tb24uaCIKKyNpbmNsdWRl ICJmbWdyLmgiCiAjaW5jbHVkZSAibGliL3N0cmluZ2luZm8uaCIKICNpbmNsdWRlICJsaWJwcS9h dXRoLmgiCiAjaW5jbHVkZSAibGlicHEvaGJhLmgiCi0jaW5jbHVkZSAibGlicHEvb2F1dGguaCIK ICNpbmNsdWRlICJsaWJwcS9zYXNsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgorI2luY2x1 ZGUgInV0aWxzL2d1Yy5oIgorCitQR19NT0RVTEVfTUFHSUM7CisKK3ZvaWQgX1BHX2luaXQodm9p ZCk7CiAKIC8qIEdVQyAqLwotY2hhciAqb2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQ7CitzdGF0aWMg Y2hhciAqb2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQ7CiAKIHN0YXRpYyB2b2lkICBvYXV0aF9nZXRf bWVjaGFuaXNtcyhQb3J0ICpwb3J0LCBTdHJpbmdJbmZvIGJ1Zik7CiBzdGF0aWMgdm9pZCAqb2F1 dGhfaW5pdChQb3J0ICpwb3J0LCBjb25zdCBjaGFyICpzZWxlY3RlZF9tZWNoLCBjb25zdCBjaGFy ICpzaGFkb3dfcGFzcyk7CkBAIC0zNSw3ICs0MSw3IEBAIHN0YXRpYyBpbnQgICBvYXV0aF9leGNo YW5nZSh2b2lkICpvcGFxLCBjb25zdCBjaGFyICppbnB1dCwgaW50IGlucHV0bGVuLAogCQkJCQkJ CWNoYXIgKipvdXRwdXQsIGludCAqb3V0cHV0bGVuLCBjb25zdCBjaGFyICoqbG9nZGV0YWlsKTsK IAogLyogTWVjaGFuaXNtIGRlY2xhcmF0aW9uICovCi1jb25zdCBwZ19iZV9zYXNsX21lY2ggcGdf YmVfb2F1dGhfbWVjaCA9IHsKK3N0YXRpYyBjb25zdCBwZ19iZV9zYXNsX21lY2ggb2F1dGhfbWVj aCA9IHsKIAlvYXV0aF9nZXRfbWVjaGFuaXNtcywKIAlvYXV0aF9pbml0LAogCW9hdXRoX2V4Y2hh bmdlLApAQCAtNzk1LDMgKzgwMSwyOCBAQCB1c2VybmFtZV9va19mb3Jfc2hlbGwoY29uc3QgY2hh ciAqdXNlcm5hbWUpCiAKIAlyZXR1cm4gdHJ1ZTsKIH0KKworc3RhdGljIGludCBDaGVja09BdXRo KFBvcnQgKnBvcnQpCit7CisJcmV0dXJuIENoZWNrU0FTTEF1dGgoJm9hdXRoX21lY2gsIHBvcnQs IE5VTEwsIE5VTEwpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqT0F1dGhFcnJvcihQb3J0ICpw b3J0KQoreworCXJldHVybiBwc3ByaW50ZigiT0F1dGggYmVhcmVyIGF1dGhlbnRpY2F0aW9uIGZh aWxlZCBmb3IgdXNlciBcIiVzXCIiLAorCQkJCQlwb3J0LT51c2VyX25hbWUpOworfQorCit2b2lk CitfUEdfaW5pdCh2b2lkKQoreworCVJlZ2lzdGVyQXV0aFByb3ZpZGVyKCJvYXV0aCIsIENoZWNr T0F1dGgsIE9BdXRoRXJyb3IpOworCisJRGVmaW5lQ3VzdG9tU3RyaW5nVmFyaWFibGUoIm9hdXRo LnZhbGlkYXRvcl9jb21tYW5kIiwKKwkJCQkJCQkgICBnZXR0ZXh0X25vb3AoIkNvbW1hbmQgdG8g dmFsaWRhdGUgT0F1dGggdjIgYmVhcmVyIHRva2Vucy4iKSwKKwkJCQkJCQkgICBOVUxMLAorCQkJ CQkJCSAgICZvYXV0aF92YWxpZGF0b3JfY29tbWFuZCwKKwkJCQkJCQkgICAiIiwKKwkJCQkJCQkg ICBQR0NfU0lHSFVQLCBHVUNfU1VQRVJVU0VSX09OTFksCisJCQkJCQkJICAgTlVMTCwgTlVMTCwg TlVMTCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9saWJwcS9NYWtlZmlsZSBiL3NyYy9i YWNrZW5kL2xpYnBxL01ha2VmaWxlCmluZGV4IDk4ZWIyYTgyNDIuLjZkMzg1ZmQ2YTQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2xpYnBxL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2xpYnBx L01ha2VmaWxlCkBAIC0xNSw3ICsxNSw2IEBAIGluY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9N YWtlZmlsZS5nbG9iYWwKICMgYmUtZnNzdHVicyBpcyBoZXJlIGZvciBoaXN0b3JpY2FsIHJlYXNv bnMsIHByb2JhYmx5IGJlbG9uZ3MgZWxzZXdoZXJlCiAKIE9CSlMgPSBcCi0JYXV0aC1vYXV0aC5v IFwKIAlhdXRoLXNhc2wubyBcCiAJYXV0aC1zY3JhbS5vIFwKIAlhdXRoLm8gXApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvbGlicHEvYXV0aC5jIGIvc3JjL2JhY2tlbmQvbGlicHEvYXV0aC5jCmlu ZGV4IDVjMzA5MDRlMmIuLjM1MzNiMGJjNTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2xpYnBx L2F1dGguYworKysgYi9zcmMvYmFja2VuZC9saWJwcS9hdXRoLmMKQEAgLTMwLDcgKzMwLDYgQEAK ICNpbmNsdWRlICJsaWJwcS9hdXRoLmgiCiAjaW5jbHVkZSAibGlicHEvY3J5cHQuaCIKICNpbmNs dWRlICJsaWJwcS9saWJwcS5oIgotI2luY2x1ZGUgImxpYnBxL29hdXRoLmgiCiAjaW5jbHVkZSAi bGlicHEvcHFmb3JtYXQuaCIKICNpbmNsdWRlICJsaWJwcS9zYXNsLmgiCiAjaW5jbHVkZSAibGli cHEvc2NyYW0uaCIKQEAgLTMwMyw5ICszMDIsNiBAQCBhdXRoX2ZhaWxlZChQb3J0ICpwb3J0LCBp bnQgc3RhdHVzLCBjb25zdCBjaGFyICpsb2dkZXRhaWwpCiAJCWNhc2UgdWFSQURJVVM6CiAJCQll cnJzdHIgPSBnZXR0ZXh0X25vb3AoIlJBRElVUyBhdXRoZW50aWNhdGlvbiBmYWlsZWQgZm9yIHVz ZXIgXCIlc1wiIik7CiAJCQlicmVhazsKLQkJY2FzZSB1YU9BdXRoOgotCQkJZXJyc3RyID0gZ2V0 dGV4dF9ub29wKCJPQXV0aCBiZWFyZXIgYXV0aGVudGljYXRpb24gZmFpbGVkIGZvciB1c2VyIFwi JXNcIiIpOwotCQkJYnJlYWs7CiAJCWNhc2UgdWFDdXN0b206CiAJCQlpZiAoQ3VzdG9tQXV0aGVu dGljYXRpb25FcnJvcl9ob29rKQogCQkJCWVycnN0ciA9IEN1c3RvbUF1dGhlbnRpY2F0aW9uRXJy b3JfaG9vayhwb3J0KTsKQEAgLTYzMSw5ICs2MjcsNiBAQCBDbGllbnRBdXRoZW50aWNhdGlvbihQ b3J0ICpwb3J0KQogCQljYXNlIHVhVHJ1c3Q6CiAJCQlzdGF0dXMgPSBTVEFUVVNfT0s7CiAJCQli cmVhazsKLQkJY2FzZSB1YU9BdXRoOgotCQkJc3RhdHVzID0gQ2hlY2tTQVNMQXV0aCgmcGdfYmVf b2F1dGhfbWVjaCwgcG9ydCwgTlVMTCwgTlVMTCk7Ci0JCQlicmVhazsKIAkJY2FzZSB1YUN1c3Rv bToKIAkJCWlmIChDdXN0b21BdXRoZW50aWNhdGlvbkNoZWNrX2hvb2spCiAJCQkJc3RhdHVzID0g Q3VzdG9tQXV0aGVudGljYXRpb25DaGVja19ob29rKHBvcnQpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvbGlicHEvaGJhLmMgYi9zcmMvYmFja2VuZC9saWJwcS9oYmEuYwppbmRleCBmN2YzMDU5 OTI3Li5mYjUxYzUzY2MwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9saWJwcS9oYmEuYworKysg Yi9zcmMvYmFja2VuZC9saWJwcS9oYmEuYwpAQCAtMTM2LDcgKzEzNiw2IEBAIHN0YXRpYyBjb25z dCBjaGFyICpjb25zdCBVc2VyQXV0aE5hbWVbXSA9CiAJInJhZGl1cyIsCiAJImN1c3RvbSIsCiAJ InBlZXIiLAotCSJvYXV0aCIsCiB9OwogCiAKQEAgLTE0MDEsOCArMTQwMCw2IEBAIHBhcnNlX2hi YV9saW5lKFRva2VuaXplZExpbmUgKnRva19saW5lLCBpbnQgZWxldmVsKQogI2VuZGlmCiAJZWxz ZSBpZiAoc3RyY21wKHRva2VuLT5zdHJpbmcsICJyYWRpdXMiKSA9PSAwKQogCQlwYXJzZWRsaW5l LT5hdXRoX21ldGhvZCA9IHVhUkFESVVTOwotCWVsc2UgaWYgKHN0cmNtcCh0b2tlbi0+c3RyaW5n LCAib2F1dGgiKSA9PSAwKQotCQlwYXJzZWRsaW5lLT5hdXRoX21ldGhvZCA9IHVhT0F1dGg7CiAJ ZWxzZSBpZiAoc3RyY21wKHRva2VuLT5zdHJpbmcsICJjdXN0b20iKSA9PSAwKQogCQlwYXJzZWRs aW5lLT5hdXRoX21ldGhvZCA9IHVhQ3VzdG9tOwogCWVsc2UKQEAgLTE3MzEsOSArMTcyOCw5IEBA IHBhcnNlX2hiYV9hdXRoX29wdChjaGFyICpuYW1lLCBjaGFyICp2YWwsIEhiYUxpbmUgKmhiYWxp bmUsCiAJCQloYmFsaW5lLT5hdXRoX21ldGhvZCAhPSB1YVBlZXIgJiYKIAkJCWhiYWxpbmUtPmF1 dGhfbWV0aG9kICE9IHVhR1NTICYmCiAJCQloYmFsaW5lLT5hdXRoX21ldGhvZCAhPSB1YVNTUEkg JiYKLQkJCWhiYWxpbmUtPmF1dGhfbWV0aG9kICE9IHVhT0F1dGggJiYKLQkJCWhiYWxpbmUtPmF1 dGhfbWV0aG9kICE9IHVhQ2VydCkKLQkJCUlOVkFMSURfQVVUSF9PUFRJT04oIm1hcCIsIGdldHRl eHRfbm9vcCgiaWRlbnQsIHBlZXIsIGdzc2FwaSwgc3NwaSwgb2F1dGgsIGFuZCBjZXJ0IikpOwor CQkJaGJhbGluZS0+YXV0aF9tZXRob2QgIT0gdWFDZXJ0ICYmCisJCQloYmFsaW5lLT5hdXRoX21l dGhvZCAhPSB1YUN1c3RvbSkKKwkJCUlOVkFMSURfQVVUSF9PUFRJT04oIm1hcCIsIGdldHRleHRf bm9vcCgiaWRlbnQsIHBlZXIsIGdzc2FwaSwgc3NwaSwgY2VydCwgYW5kIGN1c3RvbSIpKTsKIAkJ aGJhbGluZS0+dXNlcm1hcCA9IHBzdHJkdXAodmFsKTsKIAl9CiAJZWxzZSBpZiAoc3RyY21wKG5h bWUsICJjbGllbnRjZXJ0IikgPT0gMCkKQEAgLTIxMTksMTkgKzIxMTYsMjUgQEAgcGFyc2VfaGJh X2F1dGhfb3B0KGNoYXIgKm5hbWUsIGNoYXIgKnZhbCwgSGJhTGluZSAqaGJhbGluZSwKIAl9CiAJ ZWxzZSBpZiAoc3RyY21wKG5hbWUsICJpc3N1ZXIiKSA9PSAwKQogCXsKLQkJaWYgKGhiYWxpbmUt PmF1dGhfbWV0aG9kICE9IHVhT0F1dGgpCisJCWlmIChoYmFsaW5lLT5hdXRoX21ldGhvZCAhPSB1 YUN1c3RvbQorCQkJJiYgKGN1c3RvbV9wcm92aWRlcl9uYW1lICE9IE5VTEwKKwkJCQkmJiBzdHJj bXAoY3VzdG9tX3Byb3ZpZGVyX25hbWUsICJvYXV0aCIpKSkKIAkJCUlOVkFMSURfQVVUSF9PUFRJ T04oImlzc3VlciIsIGdldHRleHRfbm9vcCgib2F1dGgiKSk7CiAJCWhiYWxpbmUtPm9hdXRoX2lz c3VlciA9IHBzdHJkdXAodmFsKTsKIAl9CiAJZWxzZSBpZiAoc3RyY21wKG5hbWUsICJzY29wZSIp ID09IDApCiAJewotCQlpZiAoaGJhbGluZS0+YXV0aF9tZXRob2QgIT0gdWFPQXV0aCkKKwkJaWYg KGhiYWxpbmUtPmF1dGhfbWV0aG9kICE9IHVhQ3VzdG9tCisJCQkmJiAoY3VzdG9tX3Byb3ZpZGVy X25hbWUgIT0gTlVMTAorCQkJCSYmIHN0cmNtcChjdXN0b21fcHJvdmlkZXJfbmFtZSwgIm9hdXRo IikpKQogCQkJSU5WQUxJRF9BVVRIX09QVElPTigic2NvcGUiLCBnZXR0ZXh0X25vb3AoIm9hdXRo IikpOwogCQloYmFsaW5lLT5vYXV0aF9zY29wZSA9IHBzdHJkdXAodmFsKTsKIAl9CiAJZWxzZSBp ZiAoc3RyY21wKG5hbWUsICJ0cnVzdF92YWxpZGF0b3JfYXV0aHoiKSA9PSAwKQogCXsKLQkJaWYg KGhiYWxpbmUtPmF1dGhfbWV0aG9kICE9IHVhT0F1dGgpCisJCWlmIChoYmFsaW5lLT5hdXRoX21l dGhvZCAhPSB1YUN1c3RvbQorCQkJJiYgKGN1c3RvbV9wcm92aWRlcl9uYW1lICE9IE5VTEwKKwkJ CQkmJiBzdHJjbXAoY3VzdG9tX3Byb3ZpZGVyX25hbWUsICJvYXV0aCIpKSkKIAkJCUlOVkFMSURf QVVUSF9PUFRJT04oInRydXN0X3ZhbGlkYXRvcl9hdXRoeiIsIGdldHRleHRfbm9vcCgib2F1dGgi KSk7CiAJCWlmIChzdHJjbXAodmFsLCAiMSIpID09IDApCiAJCQloYmFsaW5lLT5vYXV0aF9za2lw X3VzZXJtYXAgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMu YyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMKaW5kZXggNzkxYzdjODNkZi4uMWUzNjUw MTg0YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYworKysgYi9zcmMv YmFja2VuZC91dGlscy9taXNjL2d1Yy5jCkBAIC01OCw3ICs1OCw2IEBACiAjaW5jbHVkZSAibGli cHEvYXV0aC5oIgogI2luY2x1ZGUgImxpYnBxL2xpYnBxLmgiCiAjaW5jbHVkZSAibGlicHEvcHFm b3JtYXQuaCIKLSNpbmNsdWRlICJsaWJwcS9vYXV0aC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgogI2luY2x1ZGUgIm9wdGltaXplci9jb3N0LmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL2dlcW8u aCIKQEAgLTQ2NjMsMTcgKzQ2NjIsNiBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ19zdHJpbmcgQ29u ZmlndXJlTmFtZXNTdHJpbmdbXSA9CiAJCWNoZWNrX2JhY2t0cmFjZV9mdW5jdGlvbnMsIGFzc2ln bl9iYWNrdHJhY2VfZnVuY3Rpb25zLCBOVUxMCiAJfSwKIAotCXsKLQkJeyJvYXV0aF92YWxpZGF0 b3JfY29tbWFuZCIsIFBHQ19TSUdIVVAsIENPTk5fQVVUSF9BVVRILAotCQkJZ2V0dGV4dF9ub29w KCJDb21tYW5kIHRvIHZhbGlkYXRlIE9BdXRoIHYyIGJlYXJlciB0b2tlbnMuIiksCi0JCQlOVUxM LAotCQkJR1VDX1NVUEVSVVNFUl9PTkxZCi0JCX0sCi0JCSZvYXV0aF92YWxpZGF0b3JfY29tbWFu ZCwKLQkJIiIsCi0JCU5VTEwsIE5VTEwsIE5VTEwKLQl9LAotCiAJLyogRW5kLW9mLWxpc3QgbWFy a2VyICovCiAJewogCQl7TlVMTCwgMCwgMCwgTlVMTCwgTlVMTH0sIE5VTEwsIE5VTEwsIE5VTEws IE5VTEwsIE5VTEwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2xpYnBxL2hiYS5oIGIvc3JjL2lu Y2x1ZGUvbGlicHEvaGJhLmgKaW5kZXggZDQ2YzIxMDhlYi4uMGM2YTdkZDgyMyAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvbGlicHEvaGJhLmgKKysrIGIvc3JjL2luY2x1ZGUvbGlicHEvaGJhLmgK QEAgLTQwLDggKzQwLDcgQEAgdHlwZWRlZiBlbnVtIFVzZXJBdXRoCiAJdWFSQURJVVMsCiAJdWFD dXN0b20sCiAJdWFQZWVyLAotCXVhT0F1dGgKLSNkZWZpbmUgVVNFUl9BVVRIX0xBU1QgdWFPQXV0 aAkvKiBNdXN0IGJlIGxhc3QgdmFsdWUgb2YgdGhpcyBlbnVtICovCisjZGVmaW5lIFVTRVJfQVVU SF9MQVNUIHVhUGVlcgkvKiBNdXN0IGJlIGxhc3QgdmFsdWUgb2YgdGhpcyBlbnVtICovCiB9IFVz ZXJBdXRoOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGlicHEvb2F1dGguaCBiL3Ny Yy9pbmNsdWRlL2xpYnBxL29hdXRoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3 MGU0MjZhZjEuLjAwMDAwMDAwMDAKLS0tIGEvc3JjL2luY2x1ZGUvbGlicHEvb2F1dGguaAorKysg L2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqIG9h dXRoLmgKLSAqCSAgSW50ZXJmYWNlIHRvIGxpYnBxL2F1dGgtb2F1dGguYwotICoKLSAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIxLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBV bml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKLSAqCi0gKiBzcmMvaW5jbHVkZS9saWJwcS9vYXV0aC5o Ci0gKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLSNpZm5kZWYgUEdfT0FVVEhfSAotI2RlZmlu ZSBQR19PQVVUSF9ICi0KLSNpbmNsdWRlICJsaWJwcS9saWJwcS1iZS5oIgotI2luY2x1ZGUgImxp YnBxL3Nhc2wuaCIKLQotZXh0ZXJuIGNoYXIgKm9hdXRoX3ZhbGlkYXRvcl9jb21tYW5kOwotCi0v KiBJbXBsZW1lbnRhdGlvbiAqLwotZXh0ZXJuIGNvbnN0IHBnX2JlX3Nhc2xfbWVjaCBwZ19iZV9v YXV0aF9tZWNoOwotCi0jZW5kaWYgLyogUEdfT0FVVEhfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcHl0aG9uL3NlcnZlci90ZXN0X29hdXRoLnB5IGIvc3JjL3Rlc3QvcHl0aG9uL3NlcnZlci90 ZXN0X29hdXRoLnB5CmluZGV4IGNiNWNhN2ZhMjMuLjA3ZmMyNWVkYzIgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3B5dGhvbi9zZXJ2ZXIvdGVzdF9vYXV0aC5weQorKysgYi9zcmMvdGVzdC9weXRob24v c2VydmVyL3Rlc3Rfb2F1dGgucHkKQEAgLTEwMyw5ICsxMDMsOSBAQCBkZWYgb2F1dGhfY3R4KCk6 CiAKICAgICBjdHggPSBDb250ZXh0KCkKICAgICBoYmFfbGluZXMgPSAoCi0gICAgICAgIGYnaG9z dCB7Y3R4LmRibmFtZX0ge2N0eC5tYXBfdXNlcn0gICBzYW1laG9zdCBvYXV0aCBpc3N1ZXI9Intj dHguaXNzdWVyfSIgc2NvcGU9IntjdHguc2NvcGV9IiBtYXA9b2F1dGhcbicsCi0gICAgICAgIGYn aG9zdCB7Y3R4LmRibmFtZX0ge2N0eC5hdXRoel91c2VyfSBzYW1laG9zdCBvYXV0aCBpc3N1ZXI9 IntjdHguaXNzdWVyfSIgc2NvcGU9IntjdHguc2NvcGV9IiB0cnVzdF92YWxpZGF0b3JfYXV0aHo9 MVxuJywKLSAgICAgICAgZidob3N0IHtjdHguZGJuYW1lfSBhbGwgICAgICAgICAgICAgIHNhbWVo b3N0IG9hdXRoIGlzc3Vlcj0ie2N0eC5pc3N1ZXJ9IiBzY29wZT0ie2N0eC5zY29wZX0iXG4nLAor ICAgICAgICBmJ2hvc3Qge2N0eC5kYm5hbWV9IHtjdHgubWFwX3VzZXJ9ICAgc2FtZWhvc3QgY3Vz dG9tIHByb3ZpZGVyPW9hdXRoIGlzc3Vlcj0ie2N0eC5pc3N1ZXJ9IiBzY29wZT0ie2N0eC5zY29w ZX0iIG1hcD1vYXV0aFxuJywKKyAgICAgICAgZidob3N0IHtjdHguZGJuYW1lfSB7Y3R4LmF1dGh6 X3VzZXJ9IHNhbWVob3N0IGN1c3RvbSBwcm92aWRlcj1vYXV0aCBpc3N1ZXI9IntjdHguaXNzdWVy fSIgc2NvcGU9IntjdHguc2NvcGV9IiB0cnVzdF92YWxpZGF0b3JfYXV0aHo9MVxuJywKKyAgICAg ICAgZidob3N0IHtjdHguZGJuYW1lfSBhbGwgICAgICAgICAgICAgIHNhbWVob3N0IGN1c3RvbSBw cm92aWRlcj1vYXV0aCBpc3N1ZXI9IntjdHguaXNzdWVyfSIgc2NvcGU9IntjdHguc2NvcGV9Ilxu JywKICAgICApCiAgICAgaWRlbnRfbGluZXMgPSAociJvYXV0aCAvXiguKilAZXhhbXBsZVwuY29t JCBcMSIsKQogCkBAIC0xMjYsMTIgKzEyNiwxMiBAQCBkZWYgb2F1dGhfY3R4KCk6CiAgICAgICAg IGMuZXhlY3V0ZShzcWwuU1FMKCJDUkVBVEUgUk9MRSB7fSBMT0dJTjsiKS5mb3JtYXQoYXV0aHpf dXNlcikpCiAgICAgICAgIGMuZXhlY3V0ZShzcWwuU1FMKCJDUkVBVEUgREFUQUJBU0Uge307Iiku Zm9ybWF0KGRibmFtZSkpCiAKLSAgICAgICAgIyBNYWtlIHRoaXMgdGVzdCBzY3JpcHQgdGhlIHNl cnZlcidzIG9hdXRoX3ZhbGlkYXRvci4KKyAgICAgICAgIyBNYWtlIHRoaXMgdGVzdCBzY3JpcHQg dGhlIHNlcnZlcidzIG9hdXRoIHZhbGlkYXRvci4KICAgICAgICAgcGF0aCA9IHBhdGhsaWIuUGF0 aChfX2ZpbGVfXykucGFyZW50IC8gInZhbGlkYXRlX2JlYXJlci5weSIKICAgICAgICAgcGF0aCA9 IHN0cihwYXRoLmFic29sdXRlKCkpCiAKICAgICAgICAgY21kID0gZiJ7c2hsZXgucXVvdGUocGF0 aCl9IHtTSEFSRURfTUVNX05BTUV9IDwmJWYiCi0gICAgICAgIGMuZXhlY3V0ZSgiQUxURVIgU1lT VEVNIFNFVCBvYXV0aF92YWxpZGF0b3JfY29tbWFuZCBUTyAlczsiLCAoY21kLCkpCisgICAgICAg IGMuZXhlY3V0ZSgiQUxURVIgU1lTVEVNIFNFVCBvYXV0aC52YWxpZGF0b3JfY29tbWFuZCBUTyAl czsiLCAoY21kLCkpCiAKICAgICAgICAgIyBSZXBsYWNlIHBnX2hiYSBhbmQgcGdfaWRlbnQuCiAg ICAgICAgIGMuZXhlY3V0ZSgiU0hPVyBoYmFfZmlsZTsiKQpAQCAtMTQ5LDcgKzE0OSw3IEBAIGRl ZiBvYXV0aF9jdHgoKToKICAgICAgICAgIyBQdXQgdGhpbmdzIGJhY2sgdGhlIHdheSB0aGV5IHdl cmUuCiAgICAgICAgIGMuZXhlY3V0ZSgiU0VMRUNUIHBnX3JlbG9hZF9jb25mKCk7IikKIAotICAg ICAgICBjLmV4ZWN1dGUoIkFMVEVSIFNZU1RFTSBSRVNFVCBvYXV0aF92YWxpZGF0b3JfY29tbWFu ZDsiKQorICAgICAgICBjLmV4ZWN1dGUoIkFMVEVSIFNZU1RFTSBSRVNFVCBvYXV0aC52YWxpZGF0 b3JfY29tbWFuZDsiKQogICAgICAgICBjLmV4ZWN1dGUoc3FsLlNRTCgiRFJPUCBEQVRBQkFTRSB7 fTsiKS5mb3JtYXQoZGJuYW1lKSkKICAgICAgICAgYy5leGVjdXRlKHNxbC5TUUwoIkRST1AgUk9M RSB7fTsiKS5mb3JtYXQoYXV0aHpfdXNlcikpCiAgICAgICAgIGMuZXhlY3V0ZShzcWwuU1FMKCJE Uk9QIFJPTEUge307IikuZm9ybWF0KG1hcF91c2VyKSkKQEAgLTkzMCw3ICs5MzAsNyBAQCBkZWYg dGVzdF9vYXV0aF9lbXB0eV9pbml0aWFsX3Jlc3BvbnNlKGNvbm4sIG9hdXRoX2N0eCwgYmVhcmVy X3Rva2VuKToKIGRlZiBzZXRfdmFsaWRhdG9yKCk6CiAgICAgIiIiCiAgICAgQSBwZXItdGVzdCBm aXh0dXJlIHRoYXQgYWxsb3dzIGEgdGVzdCB0byBvdmVycmlkZSB0aGUgc2V0dGluZyBvZgotICAg IG9hdXRoX3ZhbGlkYXRvcl9jb21tYW5kIGZvciB0aGUgY2x1c3Rlci4gVGhlIHNldHRpbmcgd2ls bCBiZSByZXZlcnRlZCBkdXJpbmcKKyAgICBvYXV0aC52YWxpZGF0b3JfY29tbWFuZCBmb3IgdGhl IGNsdXN0ZXIuIFRoZSBzZXR0aW5nIHdpbGwgYmUgcmV2ZXJ0ZWQgZHVyaW5nCiAgICAgdGVhcmRv d24uCiAKICAgICBQYXNzaW5nIE5vbmUgd2lsbCBwZXJmb3JtIGFuIEFMVEVSIFNZU1RFTSBSRVNF VC4KQEAgLTk0MiwxNyArOTQyLDE3IEBAIGRlZiBzZXRfdmFsaWRhdG9yKCk6CiAgICAgICAgIGMg PSBjb25uLmN1cnNvcigpCiAKICAgICAgICAgIyBTYXZlIHRoZSBwcmV2aW91cyB2YWx1ZS4KLSAg ICAgICAgYy5leGVjdXRlKCJTSE9XIG9hdXRoX3ZhbGlkYXRvcl9jb21tYW5kOyIpCisgICAgICAg IGMuZXhlY3V0ZSgiU0hPVyBvYXV0aC52YWxpZGF0b3JfY29tbWFuZDsiKQogICAgICAgICBwcmV2 X2NtZCA9IGMuZmV0Y2hvbmUoKVswXQogCiAgICAgICAgIGRlZiBzZXR0ZXIoY21kKToKLSAgICAg ICAgICAgIGMuZXhlY3V0ZSgiQUxURVIgU1lTVEVNIFNFVCBvYXV0aF92YWxpZGF0b3JfY29tbWFu ZCBUTyAlczsiLCAoY21kLCkpCisgICAgICAgICAgICBjLmV4ZWN1dGUoIkFMVEVSIFNZU1RFTSBT RVQgb2F1dGgudmFsaWRhdG9yX2NvbW1hbmQgVE8gJXM7IiwgKGNtZCwpKQogICAgICAgICAgICAg Yy5leGVjdXRlKCJTRUxFQ1QgcGdfcmVsb2FkX2NvbmYoKTsiKQogCiAgICAgICAgIHlpZWxkIHNl dHRlcgogCiAgICAgICAgICMgUmVzdG9yZSB0aGUgcHJldmlvdXMgdmFsdWUuCi0gICAgICAgIGMu ZXhlY3V0ZSgiQUxURVIgU1lTVEVNIFNFVCBvYXV0aF92YWxpZGF0b3JfY29tbWFuZCBUTyAlczsi LCAocHJldl9jbWQsKSkKKyAgICAgICAgYy5leGVjdXRlKCJBTFRFUiBTWVNURU0gU0VUIG9hdXRo LnZhbGlkYXRvcl9jb21tYW5kIFRPICVzOyIsIChwcmV2X2NtZCwpKQogICAgICAgICBjLmV4ZWN1 dGUoIlNFTEVDVCBwZ19yZWxvYWRfY29uZigpOyIpCiAKIAotLSAKMi4yNS4xCgo= --_010_0e86fe7e3534fb05db02379fed404a2010eb1d62camelvmwarecom_--