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 1lqejr-0001a9-MZ for pgsql-hackers@arkaria.postgresql.org; Tue, 08 Jun 2021 16:38:04 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lqejq-0006Ld-Fo for pgsql-hackers@arkaria.postgresql.org; Tue, 08 Jun 2021 16:38:02 +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 1lqejp-0006LV-JL for pgsql-hackers@lists.postgresql.org; Tue, 08 Jun 2021 16:38:02 +0000 Received: from mail-bn8nam11on2063.outbound.protection.outlook.com ([40.107.236.63] 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 1lqejf-0005Zb-Iy for pgsql-hackers@postgresql.org; Tue, 08 Jun 2021 16:38:01 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bcTsDNfYV8rDm0lkI8SgfpSu4rl0lvuNbRBRiZZ9r31QfVjvRbIZSfq9UvR7+DgprPSlLAHNLcQq+QQaEBow/2y82s3YV/VYqDQAnH3hnwUbtqvXPmW0g9WOpAplAAYXuOqfWcMLVhq6lTDXdwD9qXqwbAybtZNY0qjUHByekEEVDataTEkT/+h+ogTCq1CAY9rnz8F5fT+hcAxKZZg6kqPh6ZQbftTn9Xy/IpS/wI3+PKSq2CBgXijKU7KTq5KexF07hyqfBPi7X/rXaWOlsQ+izB4tx0PuqlH2dzgSogGxAX8IeadkXf1K7sJsYQbf/Olc36UsF8X6EsniKGs67w== 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-SenderADCheck; bh=0nE2pS4tdNzxmbDAhQqpE5zT1PfwId/xIIyE6MR7pfE=; b=hM1rAInwxl4z8BS6kdV2o5a+QVlUEIRT72hQqQVt1l8m7GdeeBnajF7sXLzThqbtlMnhYNGlup7v3rL2RUPcQv3pV8rSMwW1fJf+d53TRNzg24Kr6w3XeyYMP/reuqAjsZY533rx156E4AZJE5SjOc006HpklIPCDbIBI/ZaNg5ozSL2ByeR0jPKiJQDwsacELw7z2/y/aOJUU9523xVC26Bd09s6p347PtmFuvU12wQmqb1cq6yszzMbRK94x3bAfElQJuSKsC1gk1SSlqfynNBGymh3OxDkzGsQ9fYTWTVO9mq43mhktho/m92dg0+j/DFq9cLZ/UzRZJ+oJM+Hg== 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=0nE2pS4tdNzxmbDAhQqpE5zT1PfwId/xIIyE6MR7pfE=; b=NzyF2xDYp8Y32qWdsc5x31lTCZI5mNekZwZ7XwjCd36BTdaXqoMfgEsyHWS7XVDB/Tu2JZXUARHrTVKsGoecBXDym/VKWSVylAyZe01092fdFX1wppGsirt9PXvVmXQFHq+6RiR3/zpfWpL3tyDpVTbkfNPQDKK+wXZvZXsMzlA= Received: from MWHPR05MB2896.namprd05.prod.outlook.com (2603:10b6:300:65::20) by MWHPR0501MB3900.namprd05.prod.outlook.com (2603:10b6:301:7e::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.14; Tue, 8 Jun 2021 16:37:46 +0000 Received: from MWHPR05MB2896.namprd05.prod.outlook.com ([fe80::681c:ba9f:a7d5:4804]) by MWHPR05MB2896.namprd05.prod.outlook.com ([fe80::681c:ba9f:a7d5:4804%2]) with mapi id 15.20.4219.021; Tue, 8 Jun 2021 16:37:46 +0000 From: Jacob Champion To: "pgsql-hackers@postgresql.org" Subject: [PoC] Federated Authn/z with OAUTHBEARER Thread-Topic: [PoC] Federated Authn/z with OAUTHBEARER Thread-Index: AQHXXISc0BUwpEo1NUi6cD0VutaLHQ== Date: Tue, 8 Jun 2021 16:37:46 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: user-agent: Evolution 3.36.4-0ubuntu1 authentication-results: postgresql.org; dkim=none (message not signed) header.d=none;postgresql.org; dmarc=none action=none header.from=vmware.com; x-originating-ip: [50.39.198.229] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 6c1b183e-4ba0-42c5-e74d-08d92a9bbf07 x-ms-traffictypediagnostic: MWHPR0501MB3900: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:1728; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: p7CwwPV21hVw46Qk4TiTckO00NjGF7PHy0dLaPdLrF2edAr3qg+0hFTpTrVy4hxI12Nv7uxDd5dC/w0PaimCZOOqAViwDgq2m34cfSTDHeS4aFbs5kAG03ePUHSBnaBPltQb3KUZinPrb8B0R+1dct8OFsbaaQwzVDLaPvZZOCSPQOJoTZSPzfp1mtXUZVudhIcMKU1AWxVOdEhLFcAIKwO+jw8rWHjUCqzb7rotwu74ccgm7E+2n4vPNnkQ9WJKRiOrkIt0I6cjyakClQBZPjZGxI38dv+AncccMjZGy/AoJTH9gVyReTFhykLt++twMq4kmry5iwAaPuVaaw2wnrU8xcLF38+dbeKFLjJC4J99z0LzMpIrGRf9bkGVgd55Ju3GuAGCCsC/WX+yKDXIaNDTaAR2g9T4um8p2FCPAyUCCqonUmrfYi28VJa/xhzJnjgGqV3+mjju8tgEV0DYHfwmbEZtsNdK0/BCUOzd7kU/ypuZXaDtmJqwwApvt1YnvaHwUDLdczxoMpVO6i+iZztIznD008nMJ3TnGuKDLOVgXPOvQ0qF1eT7ZNIontefABo4My0Bu0P/RGcGnnDiODZGz6pnfUvCUxCSTymK9HdC1hTI0ea3VETk6p4PV6mHWAfxfjAygqi+eawquMeU22+YtDxuWft+bXO9ai8wokAWNR2KiFm/x48q2/tY6m7HqzYtOH4RJVaAXnHeNb/eVRX/gwwmf1nQysNzOru0m3l6fsEMpeoCaizUT3ljQFlo x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MWHPR05MB2896.namprd05.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(26005)(966005)(8676002)(30864003)(8936002)(66446008)(64756008)(6512007)(498600001)(86362001)(6506007)(186003)(2906002)(36756003)(71200400001)(66476007)(2616005)(122000001)(83380400001)(5660300002)(6916009)(76116006)(66574015)(66576008)(66946007)(38100700002)(6486002)(66556008)(99936003);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?YXYyZnZuMTIxcnJFaUVzdk9qdkZ4NGt3bk1rNDFHMWhHVEZTdG5ic0ZwM3E4?= =?utf-8?B?OS9xc3oySGJWM0pKdFlMYk1SNEI4VXd5cUREbC9aZ3NFWVdFa3RiTDdXLzdw?= =?utf-8?B?SlBSRmdMdHB2d1ZrRlNyUW5BUm95cWRTZ0FjaHRnQzFwUnVjWHFlK3NCVTV3?= =?utf-8?B?SzBzeFRoUFV5czVSU0I2NmRTcVhodFFZNk5VT2dMQW8vZDlvdyt6RDdKeDNW?= =?utf-8?B?UG1kUzVzSlBQOU5WMG9SY29tY29iN0VEVmYyODVjNEhueHBuVThqTjFBbW1P?= =?utf-8?B?L1pZemtxTUxFVS9iT0FRVVNKeHVMN1VveTdmWUNSSWxLYktJVFFjbGFnWksr?= =?utf-8?B?ajFFR0FMdTdkS2JVWHVkaWdyNm1rSXloS3ZkVXQvVTdmUGtQQUQ3RkdQeXBF?= =?utf-8?B?cU1mUlJBMjNSa3B1WnVSekc0UkV0WnIvdHpmU3RvMkZORmVVVzl1STVFOTh6?= =?utf-8?B?ZGljR0dMcXJxR1lzWS85VklJOUcxMVhjZ1lZV1RhSnNjeTVJMVlHbmJuL0tV?= =?utf-8?B?b1dWbjJkOTlXL3p2T1M3d0xYZUZZcmZTUUN2M0pQd0piVGxqYW1PeWltN2Y2?= =?utf-8?B?REVJYi84bmd6R3BCNU5WbjlKM25KZXZpckI5bFBUSmxWSExjZFhCRmtZMHpv?= =?utf-8?B?WDIxUGNQelczc0hzdndQWlBrZXRFREhYMVJMakhicUtsRlY2Z1I0aXlpT1dr?= =?utf-8?B?UktWbG9CdHNMNnBXUDdVZi9OV0ZCaTl2K2N3T2JXWUZoSW13ZGVsSFhJbHNa?= =?utf-8?B?SVg2NXVSZFlxTUhNeUNLMEZrQzhCR1NmWHNkNVRmRzZWRlVMNTFFazRyTi9U?= =?utf-8?B?VTNvTzlkb3VkR1RYZE1sd2wzc2pxdkNianBMZ0RnT0RIOUIxWjNtRmlQdWNF?= =?utf-8?B?dzJkUjJJMUdhYklPYzAzZmE4ZTVsUWxxRkVvSlNHVHNudS9GR3Bnc3JpR3pF?= =?utf-8?B?SFRMVkFiMnBDVTFuckFpaVRiNEJMNTByR3I1aGphakw0S2o2MWtITTc1ZGFr?= =?utf-8?B?am5kN0tQUVoxT2tCY0pUODloWGJJWnlZdDNYQ01ST0JLRm5FWDBGek1TSGFl?= =?utf-8?B?YVFkdFIwSG9TSG4zTUUxUk5hWThyWHc4RFcvV0lheU9vSDU3RW0vSUVYeUgz?= =?utf-8?B?bXZXM2JFaE80dWZaamhxMk1NcTEyNTBkY2dONThWSytqRTNxTFBKanlIUFBZ?= =?utf-8?B?UUVQdDNDSHdpUFFnSHBnZXRlMXMzeXdmSlQwRmo3RllLa0J0RkR4cVJ4d0hp?= =?utf-8?B?WnVOWFJkNTAxVUxmZ3dnNGpFb0pNWkQ1T0h0SUpxYURqbDhERG52b3FiUlhn?= =?utf-8?B?MElpKzFHR09MVlhDVVkrRy9Mdjdid1ROa2pSZVVlVWdPbGpsaTlnMXRkaVIy?= =?utf-8?B?akdqa0N5M0NhTmJlZ1FMUmV2ZCtyajEyeW8zMFE1MVZTTkRHdkIyUmZabzA4?= =?utf-8?B?OHp0RnJzUmYvMTVSNm0xQ0poRmQrOFJNUzRpMW9PZWVJKzZWUUR4eER4aXZD?= =?utf-8?B?d2J1OGxyYWR1RTZyV2NLOXJqN3orOXcxeU1vZFpHc2IyU2Y3ZlhRdStMM3l0?= =?utf-8?B?SnpxbWlDcmFjZ1VVSThvUGd3Y0pGWDkwK01jOXBQR1JkUGd5aHJiRjFGRTJ3?= =?utf-8?B?UEdUL0FEeUNINEExSTJEUEw2VG0rdVZOZkwzTVF5cnRlL0UwZnFGNjY4MkF1?= =?utf-8?B?UWJBVDREdGdyb0liUzJCWjd0ZFBKRUdWZjdVQys1aURSNUtWVHF3UFdSTXZE?= =?utf-8?Q?YEPaUTnCDMhcNlRdvzHYhH9f3Edlr6i5EBsamvt?= x-ms-exchange-transport-forked: True Content-Type: multipart/mixed; boundary="_008_d1b467a78e0e36ed85a09adf979d04cf124a9d4bcamelvmwarecom_" MIME-Version: 1.0 X-OriginatorOrg: vmware.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MWHPR05MB2896.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6c1b183e-4ba0-42c5-e74d-08d92a9bbf07 X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Jun 2021 16:37:46.0550 (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: gc7qyuI1E2LdI7FaxysHgQ1wNimdKw4mUy2z6IDj7L40lgyWjds774PAdptGFTW3eji3odibeTmlSZXp3gbvWQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR0501MB3900 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_008_d1b467a78e0e36ed85a09adf979d04cf124a9d4bcamelvmwarecom_ Content-Type: text/plain; charset="utf-8" Content-ID: <81A005FF26252046A3B555F23B004AFE@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 SGkgYWxsLA0KDQpXZSd2ZSBiZWVuIHdvcmtpbmcgb24gd2F5cyB0byBleHBhbmQgdGhlIGxpc3Qg b2YgdGhpcmQtcGFydHkgYXV0aA0KbWV0aG9kcyB0aGF0IFBvc3RncmVzIHByb3ZpZGVzLiBTb21l IGV4YW1wbGUgdXNlIGNhc2VzIG1pZ2h0IGJlICJJIHdhbnQNCnRvIGxldCBhbnlvbmUgd2l0aCBh IEdvb2dsZSBhY2NvdW50IHJlYWQgdGhpcyB0YWJsZSIgb3IgImxldCBhbnlvbmUgd2hvDQpiZWxv bmdzIHRvIHRoaXMgR2l0SHViIG9yZ2FuaXphdGlvbiBjb25uZWN0IGFzIGEgc3VwZXJ1c2VyIi4N Cg0KQXR0YWNoZWQgaXMgYSBwcm9vZiBvZiBjb25jZXB0IHRoYXQgaW1wbGVtZW50cyBwaWVjZXMg b2YgT0F1dGggMi4wDQpmZWRlcmF0ZWQgYXV0aG9yaXphdGlvbiwgdmlhIHRoZSBPQVVUSEJFQVJF UiBTQVNMIG1lY2hhbmlzbSBmcm9tIFJGQw0KNzYyOCBbMV0uIEN1cnJlbnRseSwgb25seSBMaW51 eCBpcyBzdXBwb3J0ZWQgZHVlIHRvIHNvbWUgdWdseSBoYWNrcyBpbg0KdGhlIGJhY2tlbmQuDQoN ClRoZSBhcmNoaXRlY3R1cmUgY2FuIHN1cHBvcnQgdGhlIGZvbGxvd2luZyB1c2UgY2FzZXMsIGFz IGxvbmcgYXMgeW91cg0KT0F1dGggaXNzdWVyIG9mIGNob2ljZSBpbXBsZW1lbnRzIHRoZSBuZWNl c3Nhcnkgc3BlY3MsIGFuZCB5b3Uga25vdyBob3cNCnRvIHdyaXRlIGEgdmFsaWRhdG9yIGZvciB5 b3VyIGlzc3VlcidzIGJlYXJlciB0b2tlbnM6DQoNCi0gQXV0aGVudGljYXRpb24gb25seSwgd2hl cmUgYW4gZXh0ZXJuYWwgdmFsaWRhdG9yIHVzZXMgdGhlIGJlYXJlcg0KdG9rZW4gdG8gZGV0ZXJt aW5lIHRoZSBlbmQgdXNlcidzIGlkZW50aXR5LCBhbmQgUG9zdGdyZXMgZGVjaWRlcw0Kd2hldGhl ciB0aGF0IHVzZXIgSUQgaXMgYXV0aG9yaXplZCB0byBjb25uZWN0IHZpYSB0aGUgc3RhbmRhcmQg cGdfaWRlbnQNCnVzZXIgbWFwcGluZy4NCg0KLSBBdXRob3JpemF0aW9uIG9ubHksIHdoZXJlIHRo ZSB2YWxpZGF0b3IgdXNlcyB0aGUgYmVhcmVyIHRva2VuIHRvDQpkZXRlcm1pbmUgdGhlIGFsbG93 ZWQgcm9sZXMgZm9yIHRoZSBlbmQgdXNlciwgYW5kIHRoZW4gY2hlY2tzIHRvIG1ha2UNCnN1cmUg dGhhdCB0aGUgY29ubmVjdGlvbidzIHJvbGUgaXMgb25lIG9mIHRob3NlLiBUaGlzIGJ5cGFzc2Vz IHBnX2lkZW50DQphbmQgYWxsb3dzIHBzZXVkb255bW91cyBjb25uZWN0aW9ucywgd2hlcmUgUG9z dGdyZXMgZG9lc24ndCBjYXJlIHdobw0KeW91IGFyZSBhcyBsb25nIGFzIHRoZSB0b2tlbiBwcm92 ZXMgeW91J3JlIGFsbG93ZWQgdG8gYXNzdW1lIHRoZSByb2xlDQp5b3Ugd2FudC4NCg0KLSBBIGNv bWJpbmF0aW9uLCB3aGVyZSB0aGUgdmFsaWRhdG9yIHByb3ZpZGVzIGJvdGggYW4gYXV0aG5faWQg KGZvcg0KbGF0ZXIgYXVkaXRzIG9mIGRhdGFiYXNlIGFjY2VzcykgYW5kIGFuIGF1dGhvcml6YXRp b24gZGVjaXNpb24gYmFzZWQgb24NCnRoZSBiZWFyZXIgdG9rZW4gYW5kIHJvbGUgcHJvdmlkZWQu DQoNCkl0IGxvb2tzIGtpbmRhIGxpa2UgdGhpcyBkdXJpbmcgdXNlOg0KDQogICAgJCBwc3FsICdo b3N0PWV4YW1wbGUub3JnIG9hdXRoX2NsaWVudF9pZD1mMDJjNjM2MS0wNjM1LS4uLicNCiAgICBW aXNpdCBodHRwczovL29hdXRoLmV4YW1wbGUub3JnL2xvZ2luIGFuZCBlbnRlciB0aGUgY29kZTog RlBRMi1NNEJHDQoNCj0gUXVpY2tzdGFydCA9DQoNCkZvciBhbnlvbmUgd2hvIGxpa2VzIGJ1aWxk aW5nIGFuZCBzZWVpbmcgZ3JlZW4gdGVzdHMgQVNBUC4NCg0KUHJlcmVxdWlzaXRlIHNvZnR3YXJl Og0KLSBpZGRhd2MgdjAuOS45IFsyXSwgbGlicmFyeSBhbmQgZGV2IGhlYWRlcnMsIGZvciBjbGll bnQgc3VwcG9ydA0KLSBQeXRob24gMywgZm9yIHRoZSB0ZXN0IHN1aXRlIG9ubHkNCg0KKFNvbWUg bmV3ZXIgZGlzdHJpYnV0aW9ucyBoYXZlIGRldiBwYWNrYWdlcyBmb3IgaWRkYXdjLCBidXQgbWlu ZSBkaWQNCm5vdC4pDQoNCkNvbmZpZ3VyZSB1c2luZyAtLXdpdGgtb2F1dGggKGFuZCwgaWYgeW91 J3ZlIGluc3RhbGxlZCBpZGRhd2MgaW50byBhDQpub24tc3RhbmRhcmQgbG9jYXRpb24sIGJlIHN1 cmUgdG8gdXNlIC0td2l0aC1pbmNsdWRlcyBhbmQgLS13aXRoLQ0KbGlicmFyaWVzLiBNYWtlIHN1 cmUgZWl0aGVyIHJwYXRoIG9yIExEX0xJQlJBUllfUEFUSCB3aWxsIGdldCB5b3Ugd2hhdA0KeW91 IG5lZWQpLiBJbnN0YWxsIGFzIHVzdWFsLg0KDQpUbyBydW4gdGhlIHRlc3Qgc3VpdGUsIG1ha2Ug c3VyZSB0aGUgY29udHJpYi9hdXRobl9pZCBleHRlbnNpb24gaXMNCmluc3RhbGxlZCwgdGhlbiBp bml0IGFuZCBzdGFydCB5b3VyIGRldiBjbHVzdGVyLiBObyBvdGhlciBjb25maWd1cmF0aW9uDQpp cyByZXF1aXJlZDsgdGhlIHRlc3Qgd2lsbCBkbyBpdCBmb3IgeW91LiBTd2l0Y2ggdG8gdGhlIHNy Yy90ZXN0L3B5dGhvbg0KZGlyZWN0b3J5LCBwb2ludCB5b3VyIFBHKiBlbnZ2YXJzIHRvIGEgc3Vw ZXJ1c2VyIGNvbm5lY3Rpb24gb24gdGhlDQpjbHVzdGVyIChzbyB0aGF0IGEgImJhcmUiIHBzcWwg d2lsbCBjb25uZWN0IGF1dG9tYXRpY2FsbHkpLCBhbmQgcnVuDQpgbWFrZSBpbnN0YWxsY2hlY2tg Lg0KDQo9IFByb2R1Y3Rpb24gU2V0dXAgPQ0KDQooYnV0IGRvbid0IHVzZSB0aGlzIGluIHByb2R1 Y3Rpb24sIHBsZWFzZSkNCg0KQWN0dWFsbHkgc2V0dGluZyB1cCBhICJyZWFsIiBzeXN0ZW0gcmVx dWlyZXMga25vd2luZyB0aGUgc3BlY2lmaWNzIG9mDQp5b3VyIHRoaXJkLXBhcnR5IGlzc3VlciBv ZiBjaG9pY2UuIFlvdXIgaXNzdWVyIE1VU1QgaW1wbGVtZW50IE9wZW5JRA0KRGlzY292ZXJ5IGFu ZCB0aGUgT0F1dGggRGV2aWNlIEF1dGhvcml6YXRpb24gZmxvdyEgU2VyaW91c2x5LCBjaGVjaw0K dGhpcyBiZWZvcmUgc3BlbmRpbmcgYSBsb3Qgb2YgdGltZSB3cml0aW5nIGEgdmFsaWRhdG9yIGFn YWluc3QgYW4NCmlzc3VlciB0aGF0IGNhbid0IGFjdHVhbGx5IHRhbGsgdG8gbGlicHEuDQoNClRo ZSBicm9hZCBzdHJva2VzIGFyZSBhcyBmb2xsb3dzOg0KDQoxLiBSZWdpc3RlciBhIG5ldyBwdWJs aWMgY2xpZW50IHdpdGggeW91ciBpc3N1ZXIgdG8gZ2V0IGFuIE9BdXRoIGNsaWVudA0KSUQgZm9y IGxpYnBxLiBZb3UnbGwgdXNlIHRoaXMgYXMgdGhlIG9hdXRoX2NsaWVudF9pZCBpbiB0aGUgY29u bmVjdGlvbg0Kc3RyaW5nLiAoSWYgeW91ciBpc3N1ZXIgZG9lc24ndCBzdXBwb3J0IHB1YmxpYyBj bGllbnRzIGFuZCBnaXZlcyB5b3UgYQ0KY2xpZW50IHNlY3JldCwgeW91IGNhbiB1c2UgdGhlIG9h dXRoX2NsaWVudF9zZWNyZXQgY29ubmVjdGlvbiBwYXJhbWV0ZXINCnRvIHByb3ZpZGUgdGhhdCB0 b28uKQ0KDQpUaGUgY2xpZW50IHlvdSByZWdpc3RlciBtdXN0IGJlIGFibGUgdG8gdXNlIGEgZGV2 aWNlIGF1dGhvcml6YXRpb24NCmZsb3c7IHNvbWUgaXNzdWVycyByZXF1aXJlIGFkZGl0aW9uYWwg c2V0dXAgZm9yIHRoYXQuDQoNCjIuIFNldCB1cCB5b3VyIEhCQSB3aXRoIHRoZSAnb2F1dGgnIGF1 dGggbWV0aG9kLCBhbmQgc2V0IHRoZSAnaXNzdWVyJw0KYW5kICdzY29wZScgb3B0aW9ucy4gJ2lz c3VlcicgaXMgdGhlIGJhc2UgVVJMIGlkZW50aWZ5aW5nIHlvdXIgdGhpcmQtDQpwYXJ0eSBpc3N1 ZXIgKGZvciBleGFtcGxlLCBodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20pLCBhbmQgJ3Njb3Bl JyBpcw0KdGhlIHNldCBvZiBPQXV0aCBzY29wZXMgdGhhdCB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIg d2lsbCBuZWVkIHRvDQphdXRoZW50aWNhdGUgYW5kL29yIGF1dGhvcml6ZSB0aGUgdXNlciAoZS5n LiAib3BlbmlkIGVtYWlsIikuDQoNClNvIGEgc2FtcGxlIEhCQSBsaW5lIG1pZ2h0IGxvb2sgbGlr ZQ0KDQogICAgaG9zdCBhbGwgYWxsIHNhbWVob3N0IG9hdXRoIGlzc3Vlcj0iaHR0cHM6Ly9hY2Nv dW50cy5nb29nbGUuY29tIiBzY29wZT0ib3BlbmlkIGVtYWlsIg0KDQozLiBJbiBwb3N0Z3Jlc3Fs LmNvbmYsIHNldCB1cCBhbiBvYXV0aF92YWxpZGF0b3JfY29tbWFuZCB0aGF0J3MgY2FwYWJsZQ0K b2YgdmVyaWZ5aW5nIGJlYXJlciB0b2tlbnMgYW5kIGltcGxlbWVudHMgdGhlIHZhbGlkYXRvciBw cm90b2NvbC4gVGhpcw0KaXMgdGhlIGhhcmRlc3QgcGFydC4gU2VlIGJlbG93Lg0KDQo9IERlc2ln biA9DQoNCk9uIHRoZSBjbGllbnQgc2lkZSwgSSd2ZSBpbXBsZW1lbnRlZCB0aGUgRGV2aWNlIEF1 dGhvcml6YXRpb24gZmxvdyAoUkZDDQo4NjI4LCBbM10pLiBXaGF0IHRoaXMgbWVhbnMgaW4gcHJh Y3RpY2UgaXMgdGhhdCBsaWJwcSByZWFjaGVzIG91dCB0byBhDQp0aGlyZC1wYXJ0eSBpc3N1ZXIg KGUuZy4gR29vZ2xlLCBBenVyZSwgZXRjLiksIGlkZW50aWZpZXMgaXRzZWxmIHdpdGggYQ0KY2xp ZW50IElELCBhbmQgcmVxdWVzdHMgcGVybWlzc2lvbiB0byBhY3Qgb24gYmVoYWxmIG9mIHRoZSBl bmQgdXNlci4NClRoZSBpc3N1ZXIgcmVzcG9uZHMgd2l0aCBhIGxvZ2luIFVSTCBhbmQgYSBvbmUt dGltZSBjb2RlLCB3aGljaCBsaWJwcQ0KcHJlc2VudHMgdG8gdGhlIHVzZXIgdXNpbmcgdGhlIG5v dGljZSBob29rLiBUaGUgZW5kIHVzZXIgdGhlbiBuYXZpZ2F0ZXMNCnRvIHRoYXQgVVJMLCBwcmVz ZW50cyB0aGVpciBjb2RlLCBhdXRoZW50aWNhdGVzIHRvIHRoZSBpc3N1ZXIsIGFuZA0KZ3JhbnRz IHBlcm1pc3Npb24gZm9yIGxpYnBxIHRvIHJldHJpZXZlIGEgYmVhcmVyIHRva2VuLiBsaWJwcSBn cmFicyBhDQp0b2tlbiBhbmQgc2VuZHMgaXQgdG8gdGhlIHNlcnZlciBmb3IgdmVyaWZpY2F0aW9u Lg0KDQooVGhlIGJlYXJlciB0b2tlbiwgaW4gdGhpcyBzZXR1cCwgaXMgZXNzZW50aWFsbHkgYSBw bGFpbnRleHQgcGFzc3dvcmQsDQphbmQgeW91IG11c3Qgc2VjdXJlIGl0IGxpa2UgeW91IHdvdWxk IGEgcGxhaW50ZXh0IHBhc3N3b3JkLiBUaGUgdG9rZW4NCmhhcyBhbiBleHBpcmF0aW9uIGRhdGUg YW5kIGNhbiBiZSBleHBsaWNpdGx5IHJldm9rZWQsIHdoaWNoIG1ha2VzIGl0DQpzbGlnaHRseSBi ZXR0ZXIgdGhhbiBhIHBhc3N3b3JkLCBidXQgdGhpcyBpcyBzdGlsbCBhIHN0ZXAgYmFja3dhcmRz DQpmcm9tIHNvbWV0aGluZyBsaWtlIFNDUkFNIHdpdGggY2hhbm5lbCBiaW5kaW5nLiBUaGVyZSBh cmUgd2F5cyB0byBiaW5kDQphIGJlYXJlciB0b2tlbiB0byBhIGNsaWVudCBjZXJ0aWZpY2F0ZSBb NF0sIHdoaWNoIHdvdWxkIG1pdGlnYXRlIHRoZQ0KcmlzayBvZiB0b2tlbiB0aGVmdCAtLSBidXQg eW91ciBpc3N1ZXIgaGFzIHRvIHN1cHBvcnQgdGhhdCwgYW5kIEkNCmhhdmVuJ3QgZm91bmQgbXVj aCBzdXBwb3J0IGluIHRoZSB3aWxkLikNCg0KVGhlIHNlcnZlciBzaWRlIGlzIHdoZXJlIHRoaW5n cyBnZXQgbW9yZSBkaWZmaWN1bHQgZm9yIHRoZSBEQkEuIFRoZQ0KT0FVVEhCRUFSRVIgc3BlYyBo YXMgdGhpcyB0byBzYXkgYWJvdXQgdGhlIHNlcnZlciBzaWRlIGltcGxlbWVudGF0aW9uOg0KDQog ICBUaGUgc2VydmVyIHZhbGlkYXRlcyB0aGUgcmVzcG9uc2UgYWNjb3JkaW5nIHRvIHRoZSBzcGVj aWZpY2F0aW9uIGZvcg0KICAgdGhlIE9BdXRoIEFjY2VzcyBUb2tlbiBUeXBlcyB1c2VkLg0KDQpB bmQgaGVyZSdzIHdoYXQgdGhlIEJlYXJlciBUb2tlbiBzcGVjaWZpY2F0aW9uIFs1XSBzYXlzOg0K DQogICBUaGlzIGRvY3VtZW50IGRvZXMgbm90IHNwZWNpZnkgdGhlIGVuY29kaW5nIG9yIHRoZSBj b250ZW50cyBvZiB0aGUNCiAgIHRva2VuOyBoZW5jZSwgZGV0YWlsZWQgcmVjb21tZW5kYXRpb25z IGFib3V0IHRoZSBtZWFucyBvZg0KICAgZ3VhcmFudGVlaW5nIHRva2VuIGludGVncml0eSBwcm90 ZWN0aW9uIGFyZSBvdXRzaWRlIHRoZSBzY29wZSBvZg0KICAgdGhpcyBkb2N1bWVudC4NCg0KSXQn cyB0aGUgV2lsZCBXZXN0LiBFdmVyeSBpc3N1ZXIgZG9lcyB0aGVpciBvd24gdGhpbmcgaW4gdGhl aXIgb3duDQpzcGVjaWFsIHdheS4gU29tZSBkb24ndCByZWFsbHkgZ2l2ZSB5b3UgYSB3YXkgdG8g aW50cm9zcGVjdCBpbmZvcm1hdGlvbg0KYWJvdXQgYSBiZWFyZXIgdG9rZW4gYXQgYWxsLCBiZWNh dXNlIHRoZXkgYXNzdW1lIHRoYXQgdGhlIGlzc3VlciBvZiB0aGUNCnRva2VuIGFuZCB0aGUgY29u c3VtZXIgb2YgdGhlIHRva2VuIGFyZSBlc3NlbnRpYWxseSB0aGUgc2FtZSBzZXJ2aWNlLg0KU29t ZSBtYWpvciBwbGF5ZXJzIHByb3ZpZGUgdGhlaXIgb3duIGN1c3RvbSBsaWJyYXJpZXMsIGltcGxl bWVudGVkIGluDQp5b3VyLWxhbmd1YWdlLW9mLWNob2ljZSwgdG8gZGVhbCB3aXRoIHRoZWlyIHBh cnRpY3VsYXIgYnJhbmQgb2YgbWFnaWMuDQoNClNvIEkgcHVudGVkIGFuZCBhZGRlZCB0aGUgb2F1 dGhfdmFsaWRhdG9yX2NvbW1hbmQgR1VDLiBBIHRva2VuDQp2YWxpZGF0b3IgY29tbWFuZCByZWFk cyB0aGUgYmVhcmVyIHRva2VuIGZyb20gYSBmaWxlIGRlc2NyaXB0b3IgdGhhdCdzDQpwYXNzZWQg dG8gaXQsIHRoZW4gZG9lcyB3aGF0ZXZlciBtYWdpYyBpcyBuZWNlc3NhcnkgdG8gdmFsaWRhdGUg dGhhdA0KdG9rZW4gYW5kIGZpbmQgb3V0IHdobyBvd25zIGl0LiBPcHRpb25hbGx5LCBpdCBjYW4g bG9vayBhdCB0aGUgcm9sZQ0KdGhhdCdzIGJlaW5nIGNvbm5lY3RlZCBhbmQgbWFrZSBzdXJlIHRo YXQgdGhlIHRva2VuIGF1dGhvcml6ZXMgdGhlIHVzZXINCnRvIGFjdHVhbGx5IHVzZSB0aGF0IHJv bGUuIFRoZW4gaXQgc2F5cyB5ZWEgb3IgbmF5IHRvIFBvc3RncmVzLCBhbmQNCm9wdGlvbmFsbHkg dGVsbHMgdGhlIHNlcnZlciB3aG8gdGhlIHVzZXIgaXMgc28gdGhhdCB0aGVpciBJRCBjYW4gYmUN CmxvZ2dlZCBhbmQgbWFwcGVkIHRocm91Z2ggcGdfaWRlbnQuDQoNCihTZWUgdGhlIGNvbW1pdCBt ZXNzYWdlIGluIDAwMDUgZm9yIGEgZnVsbCBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvdG9jb2wuDQpU aGUgdGVzdCBzdWl0ZSBhbHNvIGhhcyB0d28gdG95IGltcGxlbWVudGF0aW9ucyB0aGF0IGlsbHVz dHJhdGUgdGhlDQpwcm90b2NvbCwgYnV0IHRoZXkgcHJvdmlkZSB6ZXJvIHNlY3VyaXR5LikNCg0K VGhpcyBpcyBlYXNpbHkgdGhlIHdvcnN0IHBhcnQgb2YgdGhlIHBhdGNoLCBub3Qgb25seSBiZWNh dXNlIG15DQppbXBsZW1lbnRhdGlvbiBpcyBhIGJhZCBoYWNrIG9uIE9wZW5QaXBlU3RyZWFtKCks IGJ1dCBiZWNhdXNlIGl0DQpiYWxhbmNlcyB0aGUgc2VjdXJpdHkgb2YgdGhlIGVudGlyZSBzeXN0 ZW0gb24gdGhlIHNob3VsZGVycyBvZiBhIERCQQ0Kd2hvIGRvZXMgbm90IGhhdmUgdGltZSB0byBy ZWFkIHVtcHRlZW4gT0F1dGggc3BlY2lmaWNhdGlvbnMgY292ZXIgdG8NCmNvdmVyLiBNb3JlIHRo b3VnaHQgYW5kIGNvZGluZyBlZmZvcnQgaXMgbmVlZGVkIGhlcmUsIGJ1dCBJIGRpZG4ndCB3YW50 DQp0byBnb2xkLXBsYXRlIGEgYmFkIGRlc2lnbi4gSSdtIG5vdCBzdXJlIHdoYXQgYWx0ZXJuYXRp dmVzIHRoZXJlIGFyZQ0Kd2l0aGluIHRoZSBydWxlcyBsYWlkIG91dCBieSBPQVVUSEJFQVJFUi4g QW5kIHRoZSBzeXN0ZW0gaXMgX2V4dHJlbWVseV8NCmZsZXhpYmxlLCBpbiB0aGUgd2F5IHRoYXQg b25seSBjb2RlIHRoYXQncyBtYWludGFpbmVkIGJ5IHNvbWVib2R5IGVsc2UNCmNhbiBiZS4NCg0K PSBQYXRjaHNldCBSb2FkbWFwID0NCg0KVGhlIHNldmVuIHBhdGNoZXMgY2FuIGJlIGdyb3VwZWQg aW50byB0aHJlZToNCg0KMS4gUHJlcA0KDQogIDAwMDEgZGVjb3VwbGVzIHRoZSBTQVNMIGNvZGUg ZnJvbSB0aGUgU0NSQU0gaW1wbGVtZW50YXRpb24uDQogIDAwMDIgbWFrZXMgaXQgcG9zc2libGUg dG8gdXNlIGNvbW1vbi9qc29uYXBpIGZyb20gdGhlIGZyb250ZW5kLg0KICAwMDAzIGxldHMgdGhl IGpzb25fZXJyZGV0YWlsKCkgcmVzdWx0IGJlIGZyZWVkLCB0byBhdm9pZCBsZWFrcy4NCg0KMi4g T0FVVEhCRUFSRVIgSW1wbGVtZW50YXRpb24NCg0KICAwMDA0IGltcGxlbWVudHMgdGhlIGNsaWVu dCB3aXRoIGxpYmlkZGF3Yy4NCiAgMDAwNSBpbXBsZW1lbnRzIHNlcnZlciBIQkEgc3VwcG9ydCBh bmQgb2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQuDQoNCjMuIFRlc3RpbmcNCg0KICAwMDA2IGFkZHMg YSBzaW1wbGUgdGVzdCBleHRlbnNpb24gdG8gcmV0cmlldmUgdGhlIGF1dGhuX2lkLg0KICAwMDA3 IGFkZHMgdGhlIFB5dGhvbiB0ZXN0IHN1aXRlIEkndmUgYmVlbiBkZXZlbG9waW5nIGFnYWluc3Qu DQoNClRoZSBmaXJzdCB0aHJlZSBwYXRjaGVzIGFyZSwgaG9wZWZ1bGx5LCBnZW5lcmFsbHkgdXNl ZnVsIG91dHNpZGUgb2YNCnRoaXMgaW1wbGVtZW50YXRpb24sIGFuZCBJJ2xsIHBsYW4gdG8gcmVn aXN0ZXIgdGhlbSBpbiB0aGUgbmV4dA0KY29tbWl0ZmVzdC4gVGhlIG1pZGRsZSB0d28gcGF0Y2hl cyBhcmUgdGhlICJpbnRlcmVzdGluZyIgcGllY2VzLCBhbmQNCkkndmUgc3BsaXQgdGhlbSBpbnRv IGNsaWVudCBhbmQgc2VydmVyIGZvciBlYXNlIG9mIHVuZGVyc3RhbmRpbmcsDQp0aG91Z2ggbmVp dGhlciBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIHdpdGhvdXQgdGhlIG90aGVyLg0KDQpUaGUgbGFz dCB0d28gcGF0Y2hlcyBncmV3IG91dCBvZiBhIHRlc3Qgc3VpdGUgdGhhdCBJIG9yaWdpbmFsbHkg YnVpbHQNCnRvIGJlIGFibGUgdG8gZXhlcmNpc2UgTlNTIGNvcm5lciBjYXNlcyBhdCB0aGUgcHJv dG9jb2wvYnl0ZSBsZXZlbC4gSXQNCndhcyBpbmNyZWRpYmx5IGhlbHBmdWwgZHVyaW5nIGltcGxl bWVudGF0aW9uIG9mIHRoaXMgbmV3IFNBU0wNCm1lY2hhbmlzbSwgc2luY2UgSSBjb3VsZCB3cml0 ZSB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIgaW5kZXBlbmRlbnRseSBvZg0KZWFjaCBvdGhlciBhbmQg Z2V0IGhpZ2ggY292ZXJhZ2Ugb2YgYnJva2VuL21hbGljaW91cyBpbXBsZW1lbnRhdGlvbnMuDQpJ dCdzIGJhc2VkIG9uIHB5dGVzdCBhbmQgQ29uc3RydWN0LCBhbmQgdGhlIFB5dGhvbiAzIHJlcXVp cmVtZW50IG1pZ2h0DQp0dXJuIHNvbWUgYXdheSwgYnV0IEkgd2FudGVkIHRvIGluY2x1ZGUgaXQg aW4gY2FzZSBhbnlvbmUgZWxzZSB3YW50ZWQNCnRvIGhhY2sgb24gdGhlIGNvZGUuIHNyYy90ZXN0 L3B5dGhvbi9SRUFETUUgZXhwbGFpbnMgbW9yZS4NCg0KPSBUaG91Z2h0cy9SZWZsZWN0aW9ucyA9 DQoNCi4uLmluIG5vIHBhcnRpY3VsYXIgb3JkZXIuDQoNCkkgcGlja2VkIE9BdXRoIDIuMCBhcyBt eSBmaXJzdCBleHBlcmltZW50IGluIGZlZGVyYXRlZCBhdXRoIG1vc3RseQ0KYmVjYXVzZSBJIHdh cyBhbHJlYWR5IGZhbWlsaWFyIHdpdGggcGllY2VzIG9mIGl0LiBJIHRoaW5rIFNBTUwgKHZpYSB0 aGUNClNBTUwyMCBtZWNoYW5pc20sIFJGQyA2NTk1KSB3b3VsZCBiZSBhIGdvb2QgY29tcGFuaW9u IHRvIHRoaXMgcHJvb2Ygb2YNCmNvbmNlcHQsIGlmIHRoZXJlIGlzIGdlbmVyYWwgaW50ZXJlc3Qg aW4gZmVkZXJhdGVkIGRlcGxveW1lbnRzLg0KDQpJIGRvbid0IHJlYWxseSBsaWtlIHRoZSBPQVVU SEJFQVJFUiBzcGVjLCBidXQgSSdtIG5vdCBzdXJlIHRoZXJlJ3MgYQ0KYmV0dGVyIGFsdGVybmF0 aXZlLiBFdmVyeXRoaW5nIGlzIGxlZnQgYXMgYW4gZXhlcmNpc2UgZm9yIHRoZSByZWFkZXIuDQpJ dCdzIG5vdCBwYXJ0aWN1bGFybHkgZXh0ZW5zaWJsZS4gU3RhbmRhcmQgT0F1dGggaXMgYnVpbHQg Zm9yDQphdXRob3JpemF0aW9uLCBub3QgYXV0aGVudGljYXRpb24sIGFuZCBmcm9tIHJlYWRpbmcg dGhlIFJGQydzIGhpc3RvcnksDQppdCBmZWVscyBsaWtlIGl0IHdhcyBhIGhhY2sgdG8ganVzdCBn ZXQgc29tZXRoaW5nIHdvcmtpbmcuIE5ldw0Kc3RhbmRhcmRzIGxpa2UgT3BlbklEIENvbm5lY3Qg aGF2ZSBiZWd1biB0byBmaWxsIGluIHRoZSBnYXBzLCBidXQgdGhlDQpTQVNMIG1lY2hhbmlzbXMg aGF2ZSBub3Qga2VwdCB1cC4gKFRoZSBPUEVOSUQyMCBtZWNoYW5pc20gaXMsIHRvIG15DQp1bmRl cnN0YW5kaW5nLCB1bnJlbGF0ZWQvb2Jzb2xldGUuKSBBbmQgc3VwcG9ydCBmb3IgaGVscGZ1bCBP SURDDQpmZWF0dXJlcyBzZWVtcyB0byBiZSBzcG90dHkgaW4gdGhlIHJlYWwgd29ybGQuDQoNClRo ZSBpZGRhd2MgZGVwZW5kZW5jeSBmb3IgY2xpZW50LXNpZGUgT0F1dGggd2FzIGV4dHJlbWVseSBo ZWxwZnVsIHRvDQpkZXZlbG9wIHRoaXMgcHJvb2Ygb2YgY29uY2VwdCBxdWlja2x5LCBidXQgSSBk b24ndCB0aGluayBpdCB3b3VsZCBiZSBhbg0KYXBwcm9wcmlhdGUgY29tcG9uZW50IHRvIGJ1aWxk IGEgcmVhbCBmZWF0dXJlIG9uLiBJdCdzIGV4dHJlbWVseQ0KaGVhdnl3ZWlnaHQgLS0gaXQgaW5j b3Jwb3JhdGVzIGEgaHVnZSBzdGFjayBvZiBkZXBlbmRlbmNpZXMsIGluY2x1ZGluZw0KYSBsb2dn aW5nIGZyYW1ld29yayBhbmQgYSB3ZWIgc2VydmVyLCB0byBpbXBsZW1lbnQgZmVhdHVyZXMgd2Ug d291bGQNCnByb2JhYmx5IG5ldmVyIHVzZSAtLSBhbmQgaXQncyBmYWlybHkgZGlmZmljdWx0IHRv IGRlYnVnIGluIHByYWN0aWNlLg0KSWYgYSBkZXZpY2UgYXV0aG9yaXphdGlvbiBmbG93IHdlcmUg dGhlIG9ubHkgdGhpbmcgdGhhdCBsaWJwcSBuZWVkZWQgdG8NCnN1cHBvcnQgbmF0aXZlbHksIEkg dGhpbmsgd2Ugc2hvdWxkIGp1c3QgZGVwZW5kIG9uIGEgd2lkZWx5IHVzZWQgSFRUUA0KY2xpZW50 LCBsaWtlIGxpYmN1cmwgb3IgbmVvbiwgYW5kIGltcGxlbWVudCB0aGUgbWluaW11bSBzcGVjIGRp cmVjdGx5DQphZ2FpbnN0IHRoZSBleGlzdGluZyB0ZXN0IHN1aXRlLg0KDQpUaGVyZSBhcmUgYSBo dWdlIG51bWJlciBvZiBvdGhlciBhdXRob3JpemF0aW9uIGZsb3dzIGJlc2lkZXMgRGV2aWNlDQpB dXRob3JpemF0aW9uOyBtb3N0IHdvdWxkIGludm9sdmUgbGlicHEgYXV0b21hdGljYWxseSBvcGVu aW5nIGEgd2ViDQpicm93c2VyIGZvciB5b3UuIEkgZmVsdCBsaWtlIHRoYXQgd2Fzbid0IGFuIGFw cHJvcHJpYXRlIHRoaW5nIGZvciBhDQpsaWJyYXJ5IHRvIGRvIGJ5IGRlZmF1bHQsIGVzcGVjaWFs bHkgd2hlbiBvbmUgb2YgdGhlIG1vc3QgaW1wb3J0YW50DQpjbGllbnRzIGlzIGEgY29tbWFuZC1s aW5lIGFwcGxpY2F0aW9uLiBQZXJoYXBzIHRoZXJlIGNvdWxkIGJlIGEgaG9vaw0KZm9yIGFwcGxp Y2F0aW9ucyB0byBiZSBhYmxlIHRvIG92ZXJyaWRlIHRoZSBidWlsdGluIGZsb3cgYW5kIHN1YnN0 aXR1dGUNCnRoZWlyIG93bi4NCg0KU2luY2UgYmVhcmVyIHRva2VucyBhcmUgZXNzZW50aWFsbHkg cGxhaW50ZXh0IHBhc3N3b3JkcywgdGhlIHJlbGV2YW50DQpzcGVjcyByZXF1aXJlIHRoZSB1c2Ug b2YgdHJhbnNwb3J0LWxldmVsIHByb3RlY3Rpb24sIGFuZCBJIHRoaW5rIGl0J2QNCmJlIHdpc2Ug Zm9yIHRoZSBjbGllbnQgdG8gcmVxdWlyZSBUTFMgdG8gYmUgaW4gcGxhY2UgYmVmb3JlIHBlcmZv cm1pbmcNCnRoZSBpbml0aWFsIGhhbmRzaGFrZSBvciBzZW5kaW5nIGEgdG9rZW4uDQoNCk5vdCBl dmVyeSBPQXV0aCBpc3N1ZXIgaXMgYWxzbyBhbiBPcGVuSUQgRGlzY292ZXJ5IHByb3ZpZGVyLCBz byBpdCdzDQpmcnVzdHJhdGluZyB0aGF0IE9BVVRIQkVBUkVSICh3aGljaCBpcyBwdXJwb3J0ZWRs eSBhbiBPQXV0aCAyLjANCmZlYXR1cmUpIHJlcXVpcmVzIE9JREQgZm9yIHJlYWwtd29ybGQgaW1w bGVtZW50YXRpb25zLiBQZXJoYXBzIHdlIGNvdWxkDQpoYWNrIGFyb3VuZCB0aGlzIHdpdGggYSBk YXRhOiBVUkkgb3Igc29tZXRoaW5nLg0KDQpUaGUgY2xpZW50IGN1cnJlbnRseSBwZXJmb3JtcyB0 aGUgT0F1dGggbG9naW4gZGFuY2UgZXZlcnkgc2luZ2xlIHRpbWUgYQ0KY29ubmVjdGlvbiBpcyBt YWRlLCBidXQgYSBwcm9wZXIgT0F1dGggY2xpZW50IHdvdWxkIGNhY2hlIGl0cyB0b2tlbnMgdG8N CnJldXNlIGxhdGVyLCBhbmQga2VlcCBhbiBleWUgb24gdGhlaXIgZXhwaXJhdGlvbiB0aW1lcy4g VGhpcyB3b3VsZCBtYWtlDQpkYWlseSB1c2UgYSBsaXR0bGUgbW9yZSBsaWtlIHRoYXQgb2YgS2Vy YmVyb3MsIGJ1dCB3ZSB3b3VsZCBoYXZlIHRvDQpkZXNpZ24gYSB3YXkgdG8gY3JlYXRlIGFuZCBz ZWN1cmUgYSB0b2tlbiBjYWNoZSBvbiBkaXNrLg0KDQpJZiB5b3UndmUgcmVhZCB0aGlzIGZhciwg dGhhbmsgeW91IGZvciB5b3VyIGludGVyZXN0LCBhbmQgSSBob3BlIHlvdQ0KZW5qb3kgcGxheWlu ZyB3aXRoIGl0IQ0KDQotLUphY29iDQoNClsxXSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3Jn L2RvYy9odG1sL3JmYzc2MjgNClsyXSBodHRwczovL2dpdGh1Yi5jb20vYmFiZWxvdWVzdC9pZGRh d2MNClszXSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzg2MjgNCls0 XSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzg3MDUNCls1XSBodHRw czovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY3NTAjc2VjdGlvbi01LjINCg== --_008_d1b467a78e0e36ed85a09adf979d04cf124a9d4bcamelvmwarecom_ Content-Type: text/x-patch; name="0001-auth-generalize-SASL-mechanisms.patch" Content-Description: 0001-auth-generalize-SASL-mechanisms.patch Content-Disposition: attachment; filename="0001-auth-generalize-SASL-mechanisms.patch"; size=16731; creation-date="Tue, 08 Jun 2021 16:37:45 GMT"; modification-date="Tue, 08 Jun 2021 16:37:45 GMT" Content-ID: <75116A9AEA56984A84CFC9BA38D14BB7@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 RnJvbSBhNmE2NWI2NmNjM2RjNWRhNzIxOTM3OGRiYWRiMDkwZmYxMGZkNDJiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8cGNoYW1waW9uQHZtd2FyZS5jb20+ CkRhdGU6IFR1ZSwgMTMgQXByIDIwMjEgMTA6MjU6NDggLTA3MDAKU3ViamVjdDogW1BBVENIIDEv N10gYXV0aDogZ2VuZXJhbGl6ZSBTQVNMIG1lY2hhbmlzbXMKClNwbGl0IHRoZSBTQVNMIGxvZ2lj IG91dCBmcm9tIHRoZSBTQ1JBTSBpbXBsZW1lbnRhdGlvbiwgc28gdGhhdCBpdCBjYW4KYmUgcmV1 c2VkIGJ5IG90aGVyIG1lY2hhbmlzbXMuICBOZXcgaW1wbGVtZW50YXRpb25zIHdpbGwgaW1wbGVt ZW50IGJvdGgKYSBwZ19zYXNsX21lY2ggYW5kIGEgcGdfYmVfc2FzbF9tZWNoLgotLS0KIHNyYy9i YWNrZW5kL2xpYnBxL2F1dGgtc2NyYW0uYyAgICAgICB8IDM0ICsrKysrKysrKysrKysrLS0tLS0t LS0tCiBzcmMvYmFja2VuZC9saWJwcS9hdXRoLmMgICAgICAgICAgICAgfCAzNCArKysrKysrKysr KysrKysrLS0tLS0tLQogc3JjL2luY2x1ZGUvbGlicHEvc2FzbC5oICAgICAgICAgICAgIHwgMzQg KysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL2xpYnBxL3NjcmFtLmggICAgICAg ICAgICB8IDEzICsrKy0tLS0tLQogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1zY3JhbS5j IHwgNDAgKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQogc3JjL2ludGVyZmFjZXMvbGlicHEv ZmUtYXV0aC5jICAgICAgIHwgMTYgKysrKysrKystLS0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2Zl LWF1dGguaCAgICAgICB8IDExICsrLS0tLS0tCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25u ZWN0LmMgICAgfCAgNiArLS0tLQogc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtaW50LmggICAg IHwgMTQgKysrKysrKysrKwogOSBmaWxlcyBjaGFuZ2VkLCAxMzkgaW5zZXJ0aW9ucygrKSwgNjMg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvbGlicHEvc2FzbC5o CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbGlicHEvYXV0aC1zY3JhbS5jIGIvc3JjL2JhY2tl bmQvbGlicHEvYXV0aC1zY3JhbS5jCmluZGV4IGY5ZTEwMjZhMTIuLmRiM2NhNzVhNjAgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGgtc2NyYW0uYworKysgYi9zcmMvYmFja2VuZC9s aWJwcS9hdXRoLXNjcmFtLmMKQEAgLTEwMSwxMSArMTAxLDI1IEBACiAjaW5jbHVkZSAiY29tbW9u L3NoYTIuaCIKICNpbmNsdWRlICJsaWJwcS9hdXRoLmgiCiAjaW5jbHVkZSAibGlicHEvY3J5cHQu aCIKKyNpbmNsdWRlICJsaWJwcS9zYXNsLmgiCiAjaW5jbHVkZSAibGlicHEvc2NyYW0uaCIKICNp bmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1 ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgogCitzdGF0aWMgdm9pZCAgc2NyYW1fZ2V0X21lY2hhbmlz bXMoUG9ydCAqcG9ydCwgU3RyaW5nSW5mbyBidWYpOworc3RhdGljIHZvaWQgKnNjcmFtX2luaXQo UG9ydCAqcG9ydCwgY29uc3QgY2hhciAqc2VsZWN0ZWRfbWVjaCwKKwkJCQkJCWNvbnN0IGNoYXIg KnNoYWRvd19wYXNzKTsKK3N0YXRpYyBpbnQgICBzY3JhbV9leGNoYW5nZSh2b2lkICpvcGFxLCBj b25zdCBjaGFyICppbnB1dCwgaW50IGlucHV0bGVuLAorCQkJCQkJCWNoYXIgKipvdXRwdXQsIGlu dCAqb3V0cHV0bGVuLCBjaGFyICoqbG9nZGV0YWlsKTsKKworLyogTWVjaGFuaXNtIGRlY2xhcmF0 aW9uICovCitjb25zdCBwZ19iZV9zYXNsX21lY2ggcGdfYmVfc2NyYW1fbWVjaCA9IHsKKwlzY3Jh bV9nZXRfbWVjaGFuaXNtcywKKwlzY3JhbV9pbml0LAorCXNjcmFtX2V4Y2hhbmdlLAorfTsKKwog LyoKICAqIFN0YXR1cyBkYXRhIGZvciBhIFNDUkFNIGF1dGhlbnRpY2F0aW9uIGV4Y2hhbmdlLiAg VGhpcyBzaG91bGQgYmUga2VwdAogICogaW50ZXJuYWwgdG8gdGhpcyBmaWxlLgpAQCAtMTcwLDE2 ICsxODQsMTQgQEAgc3RhdGljIGNoYXIgKnNhbml0aXplX3N0cihjb25zdCBjaGFyICpzKTsKIHN0 YXRpYyBjaGFyICpzY3JhbV9tb2NrX3NhbHQoY29uc3QgY2hhciAqdXNlcm5hbWUpOwogCiAvKgot ICogcGdfYmVfc2NyYW1fZ2V0X21lY2hhbmlzbXMKLSAqCiAgKiBHZXQgYSBsaXN0IG9mIFNBU0wg bWVjaGFuaXNtcyB0aGF0IHRoaXMgbW9kdWxlIHN1cHBvcnRzLgogICoKICAqIEZvciB0aGUgY29u dmVuaWVuY2Ugb2YgYnVpbGRpbmcgdGhlIEZFL0JFIHBhY2tldCB0aGF0IGxpc3RzIHRoZQogICog bWVjaGFuaXNtcywgdGhlIG5hbWVzIGFyZSBhcHBlbmRlZCB0byB0aGUgZ2l2ZW4gU3RyaW5nSW5m byBidWZmZXIsCiAgKiBzZXBhcmF0ZWQgYnkgJ1wwJyBieXRlcy4KICAqLwotdm9pZAotcGdfYmVf c2NyYW1fZ2V0X21lY2hhbmlzbXMoUG9ydCAqcG9ydCwgU3RyaW5nSW5mbyBidWYpCitzdGF0aWMg dm9pZAorc2NyYW1fZ2V0X21lY2hhbmlzbXMoUG9ydCAqcG9ydCwgU3RyaW5nSW5mbyBidWYpCiB7 CiAJLyoKIAkgKiBBZHZlcnRpc2UgdGhlIG1lY2hhbmlzbXMgaW4gZGVjcmVhc2luZyBvcmRlciBv ZiBpbXBvcnRhbmNlLiAgU28gdGhlCkBAIC0xOTksOCArMjExLDYgQEAgcGdfYmVfc2NyYW1fZ2V0 X21lY2hhbmlzbXMoUG9ydCAqcG9ydCwgU3RyaW5nSW5mbyBidWYpCiB9CiAKIC8qCi0gKiBwZ19i ZV9zY3JhbV9pbml0Ci0gKgogICogSW5pdGlhbGl6ZSBhIG5ldyBTQ1JBTSBhdXRoZW50aWNhdGlv biBleGNoYW5nZSBzdGF0dXMgdHJhY2tlci4gIFRoaXMKICAqIG5lZWRzIHRvIGJlIGNhbGxlZCBi ZWZvcmUgZG9pbmcgYW55IGV4Y2hhbmdlLiAgSXQgd2lsbCBiZSBmaWxsZWQgbGF0ZXIKICAqIGFm dGVyIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGV4Y2hhbmdlIHdpdGggYXV0aGVudGljYXRpb24gaW5m b3JtYXRpb24uCkBAIC0yMTUsMTAgKzIyNSw4IEBAIHBnX2JlX3NjcmFtX2dldF9tZWNoYW5pc21z KFBvcnQgKnBvcnQsIFN0cmluZ0luZm8gYnVmKQogICogYW4gYXV0aGVudGljYXRpb24gZXhjaGFu Z2UsIGJ1dCBpdCB3aWxsIGZhaWwsIGFzIGlmIGFuIGluY29ycmVjdCBwYXNzd29yZAogICogd2Fz IGdpdmVuLgogICovCi12b2lkICoKLXBnX2JlX3NjcmFtX2luaXQoUG9ydCAqcG9ydCwKLQkJCQkg Y29uc3QgY2hhciAqc2VsZWN0ZWRfbWVjaCwKLQkJCQkgY29uc3QgY2hhciAqc2hhZG93X3Bhc3Mp CitzdGF0aWMgdm9pZCAqCitzY3JhbV9pbml0KFBvcnQgKnBvcnQsIGNvbnN0IGNoYXIgKnNlbGVj dGVkX21lY2gsIGNvbnN0IGNoYXIgKnNoYWRvd19wYXNzKQogewogCXNjcmFtX3N0YXRlICpzdGF0 ZTsKIAlib29sCQlnb3Rfc2VjcmV0OwpAQCAtMzI1LDkgKzMzMyw5IEBAIHBnX2JlX3NjcmFtX2lu aXQoUG9ydCAqcG9ydCwKICAqIHN0cmluZyBhdCAqbG9nZGV0YWlsIHRoYXQgd2lsbCBiZSBzZW50 IHRvIHRoZSBwb3N0bWFzdGVyIGxvZyAoYnV0IG5vdAogICogdGhlIGNsaWVudCkuCiAgKi8KLWlu dAotcGdfYmVfc2NyYW1fZXhjaGFuZ2Uodm9pZCAqb3BhcSwgY29uc3QgY2hhciAqaW5wdXQsIGlu dCBpbnB1dGxlbiwKLQkJCQkJIGNoYXIgKipvdXRwdXQsIGludCAqb3V0cHV0bGVuLCBjaGFyICoq bG9nZGV0YWlsKQorc3RhdGljIGludAorc2NyYW1fZXhjaGFuZ2Uodm9pZCAqb3BhcSwgY29uc3Qg Y2hhciAqaW5wdXQsIGludCBpbnB1dGxlbiwKKwkJCSAgIGNoYXIgKipvdXRwdXQsIGludCAqb3V0 cHV0bGVuLCBjaGFyICoqbG9nZGV0YWlsKQogewogCXNjcmFtX3N0YXRlICpzdGF0ZSA9IChzY3Jh bV9zdGF0ZSAqKSBvcGFxOwogCWludAkJCXJlc3VsdDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2xpYnBxL2F1dGguYyBiL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGguYwppbmRleCA2ODM3MmZjZWE4 Li5lMjA3NDBhN2M1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9saWJwcS9hdXRoLmMKKysrIGIv c3JjL2JhY2tlbmQvbGlicHEvYXV0aC5jCkBAIC0yNiwxMSArMjYsMTEgQEAKICNpbmNsdWRlICJj b21tYW5kcy91c2VyLmgiCiAjaW5jbHVkZSAiY29tbW9uL2lwLmgiCiAjaW5jbHVkZSAiY29tbW9u L21kNS5oIgotI2luY2x1ZGUgImNvbW1vbi9zY3JhbS1jb21tb24uaCIKICNpbmNsdWRlICJsaWJw cS9hdXRoLmgiCiAjaW5jbHVkZSAibGlicHEvY3J5cHQuaCIKICNpbmNsdWRlICJsaWJwcS9saWJw cS5oIgogI2luY2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCisjaW5jbHVkZSAibGlicHEvc2FzbC5o IgogI2luY2x1ZGUgImxpYnBxL3NjcmFtLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5j bHVkZSAicG9ydC9wZ19ic3dhcC5oIgpAQCAtNTEsNiArNTEsMTMgQEAgc3RhdGljIHZvaWQgYXV0 aF9mYWlsZWQoUG9ydCAqcG9ydCwgaW50IHN0YXR1cywgY2hhciAqbG9nZGV0YWlsKTsKIHN0YXRp YyBjaGFyICpyZWN2X3Bhc3N3b3JkX3BhY2tldChQb3J0ICpwb3J0KTsKIHN0YXRpYyB2b2lkIHNl dF9hdXRobl9pZChQb3J0ICpwb3J0LCBjb25zdCBjaGFyICppZCk7CiAKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICog U0FTTCBjb21tb24gYXV0aGVudGljYXRpb24KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgaW50CVNB U0xfZXhjaGFuZ2UoY29uc3QgcGdfYmVfc2FzbF9tZWNoICptZWNoLCBQb3J0ICpwb3J0LAorCQkJ CQkJICBjaGFyICpzaGFkb3dfcGFzcywgY2hhciAqKmxvZ2RldGFpbCk7CisKIAogLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAgKiBQYXNzd29yZC1iYXNlZCBhdXRoZW50aWNhdGlvbiBtZXRob2RzIChwYXNzd29yZCwgbWQ1 LCBhbmQgc2NyYW0tc2hhLTI1NikKQEAgLTkxMiwxMiArOTE5LDEzIEBAIENoZWNrTUQ1QXV0aChQ b3J0ICpwb3J0LCBjaGFyICpzaGFkb3dfcGFzcywgY2hhciAqKmxvZ2RldGFpbCkKIH0KIAogc3Rh dGljIGludAotQ2hlY2tTQ1JBTUF1dGgoUG9ydCAqcG9ydCwgY2hhciAqc2hhZG93X3Bhc3MsIGNo YXIgKipsb2dkZXRhaWwpCitTQVNMX2V4Y2hhbmdlKGNvbnN0IHBnX2JlX3Nhc2xfbWVjaCAqbWVj aCwgUG9ydCAqcG9ydCwgY2hhciAqc2hhZG93X3Bhc3MsCisJCQkgIGNoYXIgKipsb2dkZXRhaWwp CiB7CiAJU3RyaW5nSW5mb0RhdGEgc2FzbF9tZWNoczsKIAlpbnQJCQltdHlwZTsKIAlTdHJpbmdJ bmZvRGF0YSBidWY7Ci0Jdm9pZAkgICAqc2NyYW1fb3BhcSA9IE5VTEw7CisJdm9pZAkgICAqb3Bh cSA9IE5VTEw7CiAJY2hhcgkgICAqb3V0cHV0ID0gTlVMTDsKIAlpbnQJCQlvdXRwdXRsZW4gPSAw OwogCWNvbnN0IGNoYXIgKmlucHV0OwpAQCAtOTMxLDcgKzkzOSw3IEBAIENoZWNrU0NSQU1BdXRo KFBvcnQgKnBvcnQsIGNoYXIgKnNoYWRvd19wYXNzLCBjaGFyICoqbG9nZGV0YWlsKQogCSAqLwog CWluaXRTdHJpbmdJbmZvKCZzYXNsX21lY2hzKTsKIAotCXBnX2JlX3NjcmFtX2dldF9tZWNoYW5p c21zKHBvcnQsICZzYXNsX21lY2hzKTsKKwltZWNoLT5nZXRfbWVjaGFuaXNtcyhwb3J0LCAmc2Fz bF9tZWNocyk7CiAJLyogUHV0IGFub3RoZXIgJ1wwJyB0byBtYXJrIHRoYXQgbGlzdCBpcyBmaW5p c2hlZC4gKi8KIAlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmc2FzbF9tZWNocywgJ1wwJyk7CiAKQEAg LTk5OCw3ICsxMDA2LDcgQEAgQ2hlY2tTQ1JBTUF1dGgoUG9ydCAqcG9ydCwgY2hhciAqc2hhZG93 X3Bhc3MsIGNoYXIgKipsb2dkZXRhaWwpCiAJCQkgKiBUaGlzIGlzIGJlY2F1c2Ugd2UgZG9uJ3Qg d2FudCB0byByZXZlYWwgdG8gYW4gYXR0YWNrZXIgd2hhdAogCQkJICogdXNlcm5hbWVzIGFyZSB2 YWxpZCwgbm9yIHdoaWNoIHVzZXJzIGhhdmUgYSB2YWxpZCBwYXNzd29yZC4KIAkJCSAqLwotCQkJ c2NyYW1fb3BhcSA9IHBnX2JlX3NjcmFtX2luaXQocG9ydCwgc2VsZWN0ZWRfbWVjaCwgc2hhZG93 X3Bhc3MpOworCQkJb3BhcSA9IG1lY2gtPmluaXQocG9ydCwgc2VsZWN0ZWRfbWVjaCwgc2hhZG93 X3Bhc3MpOwogCiAJCQlpbnB1dGxlbiA9IHBxX2dldG1zZ2ludCgmYnVmLCA0KTsKIAkJCWlmIChp bnB1dGxlbiA9PSAtMSkKQEAgLTEwMjIsMTIgKzEwMzAsMTEgQEAgQ2hlY2tTQ1JBTUF1dGgoUG9y dCAqcG9ydCwgY2hhciAqc2hhZG93X3Bhc3MsIGNoYXIgKipsb2dkZXRhaWwpCiAJCUFzc2VydChp bnB1dCA9PSBOVUxMIHx8IGlucHV0W2lucHV0bGVuXSA9PSAnXDAnKTsKIAogCQkvKgotCQkgKiB3 ZSBwYXNzICdsb2dkZXRhaWwnIGFzIE5VTEwgd2hlbiBkb2luZyBhIG1vY2sgYXV0aGVudGljYXRp b24sCi0JCSAqIGJlY2F1c2Ugd2Ugc2hvdWxkIGFscmVhZHkgaGF2ZSBhIGJldHRlciBlcnJvciBt ZXNzYWdlIGluIHRoYXQgY2FzZQorCQkgKiBIYW5kIHRoZSBpbmNvbWluZyBtZXNzYWdlIHRvIHRo ZSBtZWNoYW5pc20gaW1wbGVtZW50YXRpb24uCiAJCSAqLwotCQlyZXN1bHQgPSBwZ19iZV9zY3Jh bV9leGNoYW5nZShzY3JhbV9vcGFxLCBpbnB1dCwgaW5wdXRsZW4sCi0JCQkJCQkJCQkgICZvdXRw dXQsICZvdXRwdXRsZW4sCi0JCQkJCQkJCQkgIGxvZ2RldGFpbCk7CisJCXJlc3VsdCA9IG1lY2gt PmV4Y2hhbmdlKG9wYXEsIGlucHV0LCBpbnB1dGxlbiwKKwkJCQkJCQkJJm91dHB1dCwgJm91dHB1 dGxlbiwKKwkJCQkJCQkJbG9nZGV0YWlsKTsKIAogCQkvKiBpbnB1dCBidWZmZXIgbm8gbG9uZ2Vy IHVzZWQgKi8KIAkJcGZyZWUoYnVmLmRhdGEpOwpAQCAtMTAzOSw2ICsxMDQ2LDcgQEAgQ2hlY2tT Q1JBTUF1dGgoUG9ydCAqcG9ydCwgY2hhciAqc2hhZG93X3Bhc3MsIGNoYXIgKipsb2dkZXRhaWwp CiAJCQkgKi8KIAkJCWVsb2coREVCVUc0LCAic2VuZGluZyBTQVNMIGNoYWxsZW5nZSBvZiBsZW5n dGggJXUiLCBvdXRwdXRsZW4pOwogCisJCQkvKiBUT0RPOiBTQVNMX0VYQ0hBTkdFX0ZBSUxVUkUg d2l0aCBvdXRwdXQgaXMgZm9yYmlkZGVuIGluIFNBU0wgKi8KIAkJCWlmIChyZXN1bHQgPT0gU0FT TF9FWENIQU5HRV9TVUNDRVNTKQogCQkJCXNlbmRBdXRoUmVxdWVzdChwb3J0LCBBVVRIX1JFUV9T QVNMX0ZJTiwgb3V0cHV0LCBvdXRwdXRsZW4pOwogCQkJZWxzZQpAQCAtMTA1Nyw2ICsxMDY1LDEy IEBAIENoZWNrU0NSQU1BdXRoKFBvcnQgKnBvcnQsIGNoYXIgKnNoYWRvd19wYXNzLCBjaGFyICoq bG9nZGV0YWlsKQogCXJldHVybiBTVEFUVVNfT0s7CiB9CiAKK3N0YXRpYyBpbnQKK0NoZWNrU0NS QU1BdXRoKFBvcnQgKnBvcnQsIGNoYXIgKnNoYWRvd19wYXNzLCBjaGFyICoqbG9nZGV0YWlsKQor eworCXJldHVybiBTQVNMX2V4Y2hhbmdlKCZwZ19iZV9zY3JhbV9tZWNoLCBwb3J0LCBzaGFkb3df cGFzcywgbG9nZGV0YWlsKTsKK30KKwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEdTU0FQSSBhdXRoZW50aWNh dGlvbiBzeXN0ZW0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2xpYnBxL3Nhc2wuaCBiL3NyYy9p bmNsdWRlL2xpYnBxL3Nhc2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li44YzljOTk4M2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvbGlicHEvc2FzbC5o CkBAIC0wLDAgKzEsMzQgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHNhc2wuaAorICoK KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIxLCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRz IG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBzcmMvaW5jbHVkZS9saWJw cS9zYXNsLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR19TQVNMX0gK KyNkZWZpbmUgUEdfU0FTTF9ICisKKyNpbmNsdWRlICJsaWJwcS9saWJwcS1iZS5oIgorCisvKiBT dGF0dXMgY29kZXMgZm9yIG1lc3NhZ2UgZXhjaGFuZ2UgKi8KKyNkZWZpbmUgU0FTTF9FWENIQU5H RV9DT05USU5VRQkJMAorI2RlZmluZSBTQVNMX0VYQ0hBTkdFX1NVQ0NFU1MJCTEKKyNkZWZpbmUg U0FTTF9FWENIQU5HRV9GQUlMVVJFCQkyCisKKy8qIEJhY2tlbmQgbWVjaGFuaXNtIEFQSSAqLwor dHlwZWRlZiB2b2lkICAoKnBnX2JlX3Nhc2xfbWVjaGFuaXNtX2Z1bmMpKFBvcnQgKiwgU3RyaW5n SW5mbyk7Cit0eXBlZGVmIHZvaWQgKigqcGdfYmVfc2FzbF9pbml0X2Z1bmMpKFBvcnQgKiwgY29u c3QgY2hhciAqLCBjb25zdCBjaGFyICopOwordHlwZWRlZiBpbnQgICAoKnBnX2JlX3Nhc2xfZXhj aGFuZ2VfZnVuYykodm9pZCAqLCBjb25zdCBjaGFyICosIGludCwgY2hhciAqKiwgaW50ICosIGNo YXIgKiopOworCit0eXBlZGVmIHN0cnVjdAoreworCXBnX2JlX3Nhc2xfbWVjaGFuaXNtX2Z1bmMJ Z2V0X21lY2hhbmlzbXM7CisJcGdfYmVfc2FzbF9pbml0X2Z1bmMJCWluaXQ7CisJcGdfYmVfc2Fz bF9leGNoYW5nZV9mdW5jCWV4Y2hhbmdlOworfSBwZ19iZV9zYXNsX21lY2g7CisKKyNlbmRpZiAv KiBQR19TQVNMX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2xpYnBxL3NjcmFtLmggYi9z cmMvaW5jbHVkZS9saWJwcS9zY3JhbS5oCmluZGV4IDJjODc5MTUwZGEuLjllNDU0MGJkZTMgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2xpYnBxL3NjcmFtLmgKKysrIGIvc3JjL2luY2x1ZGUvbGli cHEvc2NyYW0uaApAQCAtMTUsMTcgKzE1LDEwIEBACiAKICNpbmNsdWRlICJsaWIvc3RyaW5naW5m by5oIgogI2luY2x1ZGUgImxpYnBxL2xpYnBxLWJlLmgiCisjaW5jbHVkZSAibGlicHEvc2FzbC5o IgogCi0vKiBTdGF0dXMgY29kZXMgZm9yIG1lc3NhZ2UgZXhjaGFuZ2UgKi8KLSNkZWZpbmUgU0FT TF9FWENIQU5HRV9DT05USU5VRQkJMAotI2RlZmluZSBTQVNMX0VYQ0hBTkdFX1NVQ0NFU1MJCTEK LSNkZWZpbmUgU0FTTF9FWENIQU5HRV9GQUlMVVJFCQkyCi0KLS8qIFJvdXRpbmVzIGRlZGljYXRl ZCB0byBhdXRoZW50aWNhdGlvbiAqLwotZXh0ZXJuIHZvaWQgcGdfYmVfc2NyYW1fZ2V0X21lY2hh bmlzbXMoUG9ydCAqcG9ydCwgU3RyaW5nSW5mbyBidWYpOwotZXh0ZXJuIHZvaWQgKnBnX2JlX3Nj cmFtX2luaXQoUG9ydCAqcG9ydCwgY29uc3QgY2hhciAqc2VsZWN0ZWRfbWVjaCwgY29uc3QgY2hh ciAqc2hhZG93X3Bhc3MpOwotZXh0ZXJuIGludAlwZ19iZV9zY3JhbV9leGNoYW5nZSh2b2lkICpv cGFxLCBjb25zdCBjaGFyICppbnB1dCwgaW50IGlucHV0bGVuLAotCQkJCQkJCQkgY2hhciAqKm91 dHB1dCwgaW50ICpvdXRwdXRsZW4sIGNoYXIgKipsb2dkZXRhaWwpOworLyogSW1wbGVtZW50YXRp b24gKi8KK2V4dGVybiBjb25zdCBwZ19iZV9zYXNsX21lY2ggcGdfYmVfc2NyYW1fbWVjaDsKIAog LyogUm91dGluZXMgdG8gaGFuZGxlIGFuZCBjaGVjayBTQ1JBTS1TSEEtMjU2IHNlY3JldCAqLwog ZXh0ZXJuIGNoYXIgKnBnX2JlX3NjcmFtX2J1aWxkX3NlY3JldChjb25zdCBjaGFyICpwYXNzd29y ZCk7CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLXNjcmFtLmMgYi9z cmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLXNjcmFtLmMKaW5kZXggNTg4MTM4NmUzNy4uMDRk NTcwM2Q4OSAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1zY3JhbS5j CisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtc2NyYW0uYwpAQCAtMjEsNiArMjEs MjIgQEAKICNpbmNsdWRlICJmZS1hdXRoLmgiCiAKIAorLyogVGhlIGV4cG9ydGVkIFNDUkFNIGNh bGxiYWNrIG1lY2hhbmlzbS4gKi8KK3N0YXRpYyB2b2lkICpzY3JhbV9pbml0KFBHY29ubiAqY29u biwgY29uc3QgY2hhciAqcGFzc3dvcmQsCisJCQkJCQljb25zdCBjaGFyICpzYXNsX21lY2hhbmlz bSk7CitzdGF0aWMgdm9pZCBzY3JhbV9leGNoYW5nZSh2b2lkICpvcGFxLCBjaGFyICppbnB1dCwg aW50IGlucHV0bGVuLAorCQkJCQkJICAgY2hhciAqKm91dHB1dCwgaW50ICpvdXRwdXRsZW4sCisJ CQkJCQkgICBib29sICpkb25lLCBib29sICpzdWNjZXNzKTsKK3N0YXRpYyBib29sIHNjcmFtX2No YW5uZWxfYm91bmQodm9pZCAqb3BhcSk7CitzdGF0aWMgdm9pZCBzY3JhbV9mcmVlKHZvaWQgKm9w YXEpOworCitjb25zdCBwZ19zYXNsX21lY2ggcGdfc2NyYW1fbWVjaCA9IHsKKwlzY3JhbV9pbml0 LAorCXNjcmFtX2V4Y2hhbmdlLAorCXNjcmFtX2NoYW5uZWxfYm91bmQsCisJc2NyYW1fZnJlZSwK K307CisKIC8qCiAgKiBTdGF0dXMgb2YgZXhjaGFuZ2UgbWVzc2FnZXMgdXNlZCBmb3IgU0NSQU0g YXV0aGVudGljYXRpb24gdmlhIHRoZQogICogU0FTTCBwcm90b2NvbC4KQEAgLTcyLDEwICs4OCwx MCBAQCBzdGF0aWMgYm9vbCBjYWxjdWxhdGVfY2xpZW50X3Byb29mKGZlX3NjcmFtX3N0YXRlICpz dGF0ZSwKIC8qCiAgKiBJbml0aWFsaXplIFNDUkFNIGV4Y2hhbmdlIHN0YXR1cy4KICAqLwotdm9p ZCAqCi1wZ19mZV9zY3JhbV9pbml0KFBHY29ubiAqY29ubiwKLQkJCQkgY29uc3QgY2hhciAqcGFz c3dvcmQsCi0JCQkJIGNvbnN0IGNoYXIgKnNhc2xfbWVjaGFuaXNtKQorc3RhdGljIHZvaWQgKgor c2NyYW1faW5pdChQR2Nvbm4gKmNvbm4sCisJCSAgIGNvbnN0IGNoYXIgKnBhc3N3b3JkLAorCQkg ICBjb25zdCBjaGFyICpzYXNsX21lY2hhbmlzbSkKIHsKIAlmZV9zY3JhbV9zdGF0ZSAqc3RhdGU7 CiAJY2hhcgkgICAqcHJlcF9wYXNzd29yZDsKQEAgLTEyOCw4ICsxNDQsOCBAQCBwZ19mZV9zY3Jh bV9pbml0KFBHY29ubiAqY29ubiwKICAqIE5vdGUgdGhhdCB0aGUgY2FsbGVyIG11c3QgYWxzbyBl bnN1cmUgdGhhdCB0aGUgZXhjaGFuZ2Ugd2FzIGFjdHVhbGx5CiAgKiBzdWNjZXNzZnVsLgogICov Ci1ib29sCi1wZ19mZV9zY3JhbV9jaGFubmVsX2JvdW5kKHZvaWQgKm9wYXEpCitzdGF0aWMgYm9v bAorc2NyYW1fY2hhbm5lbF9ib3VuZCh2b2lkICpvcGFxKQogewogCWZlX3NjcmFtX3N0YXRlICpz dGF0ZSA9IChmZV9zY3JhbV9zdGF0ZSAqKSBvcGFxOwogCkBAIC0xNTIsOCArMTY4LDggQEAgcGdf ZmVfc2NyYW1fY2hhbm5lbF9ib3VuZCh2b2lkICpvcGFxKQogLyoKICAqIEZyZWUgU0NSQU0gZXhj aGFuZ2Ugc3RhdHVzCiAgKi8KLXZvaWQKLXBnX2ZlX3NjcmFtX2ZyZWUodm9pZCAqb3BhcSkKK3N0 YXRpYyB2b2lkCitzY3JhbV9mcmVlKHZvaWQgKm9wYXEpCiB7CiAJZmVfc2NyYW1fc3RhdGUgKnN0 YXRlID0gKGZlX3NjcmFtX3N0YXRlICopIG9wYXE7CiAKQEAgLTE4OCwxMCArMjA0LDEwIEBAIHBn X2ZlX3NjcmFtX2ZyZWUodm9pZCAqb3BhcSkKIC8qCiAgKiBFeGNoYW5nZSBhIFNDUkFNIG1lc3Nh Z2Ugd2l0aCBiYWNrZW5kLgogICovCi12b2lkCi1wZ19mZV9zY3JhbV9leGNoYW5nZSh2b2lkICpv cGFxLCBjaGFyICppbnB1dCwgaW50IGlucHV0bGVuLAotCQkJCQkgY2hhciAqKm91dHB1dCwgaW50 ICpvdXRwdXRsZW4sCi0JCQkJCSBib29sICpkb25lLCBib29sICpzdWNjZXNzKQorc3RhdGljIHZv aWQKK3NjcmFtX2V4Y2hhbmdlKHZvaWQgKm9wYXEsIGNoYXIgKmlucHV0LCBpbnQgaW5wdXRsZW4s CisJCQkgICBjaGFyICoqb3V0cHV0LCBpbnQgKm91dHB1dGxlbiwKKwkJCSAgIGJvb2wgKmRvbmUs IGJvb2wgKnN1Y2Nlc3MpCiB7CiAJZmVfc2NyYW1fc3RhdGUgKnN0YXRlID0gKGZlX3NjcmFtX3N0 YXRlICopIG9wYXE7CiAJUEdjb25uCSAgICpjb25uID0gc3RhdGUtPmNvbm47CmRpZmYgLS1naXQg YS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9m ZS1hdXRoLmMKaW5kZXggZTgwNjI2NDdlNi4uZDVjYmFjMTA4ZSAxMDA2NDQKLS0tIGEvc3JjL2lu dGVyZmFjZXMvbGlicHEvZmUtYXV0aC5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1 dGguYwpAQCAtNDgyLDcgKzQ4MiwxMCBAQCBwZ19TQVNMX2luaXQoUEdjb25uICpjb25uLCBpbnQg cGF5bG9hZGxlbikKIAkJCQkgKiBjaGFubmVsX2JpbmRpbmcgaXMgbm90IGRpc2FibGVkLgogCQkJ CSAqLwogCQkJCWlmIChjb25uLT5jaGFubmVsX2JpbmRpbmdbMF0gIT0gJ2QnKQkvKiBkaXNhYmxl ICovCisJCQkJewogCQkJCQlzZWxlY3RlZF9tZWNoYW5pc20gPSBTQ1JBTV9TSEFfMjU2X1BMVVNf TkFNRTsKKwkJCQkJY29ubi0+c2FzbCA9ICZwZ19zY3JhbV9tZWNoOworCQkJCX0KICNlbHNlCiAJ CQkJLyoKIAkJCQkgKiBUaGUgY2xpZW50IGRvZXMgbm90IHN1cHBvcnQgY2hhbm5lbCBiaW5kaW5n LiAgSWYgaXQgaXMKQEAgLTUxNiw3ICs1MTksMTAgQEAgcGdfU0FTTF9pbml0KFBHY29ubiAqY29u biwgaW50IHBheWxvYWRsZW4pCiAJCX0KIAkJZWxzZSBpZiAoc3RyY21wKG1lY2hhbmlzbV9idWYu ZGF0YSwgU0NSQU1fU0hBXzI1Nl9OQU1FKSA9PSAwICYmCiAJCQkJICFzZWxlY3RlZF9tZWNoYW5p c20pCisJCXsKIAkJCXNlbGVjdGVkX21lY2hhbmlzbSA9IFNDUkFNX1NIQV8yNTZfTkFNRTsKKwkJ CWNvbm4tPnNhc2wgPSAmcGdfc2NyYW1fbWVjaDsKKwkJfQogCX0KIAogCWlmICghc2VsZWN0ZWRf bWVjaGFuaXNtKQpAQCAtNTU1LDIwICs1NjEsMjIgQEAgcGdfU0FTTF9pbml0KFBHY29ubiAqY29u biwgaW50IHBheWxvYWRsZW4pCiAJCWdvdG8gZXJyb3I7CiAJfQogCisJQXNzZXJ0KGNvbm4tPnNh c2wpOworCiAJLyoKIAkgKiBJbml0aWFsaXplIHRoZSBTQVNMIHN0YXRlIGluZm9ybWF0aW9uIHdp dGggYWxsIHRoZSBpbmZvcm1hdGlvbiBnYXRoZXJlZAogCSAqIGR1cmluZyB0aGUgaW5pdGlhbCBl eGNoYW5nZS4KIAkgKgogCSAqIE5vdGU6IE9ubHkgdGxzLXVuaXF1ZSBpcyBzdXBwb3J0ZWQgZm9y IHRoZSBtb21lbnQuCiAJICovCi0JY29ubi0+c2FzbF9zdGF0ZSA9IHBnX2ZlX3NjcmFtX2luaXQo Y29ubiwKKwljb25uLT5zYXNsX3N0YXRlID0gY29ubi0+c2FzbC0+aW5pdChjb25uLAogCQkJCQkJ CQkJCXBhc3N3b3JkLAogCQkJCQkJCQkJCXNlbGVjdGVkX21lY2hhbmlzbSk7CiAJaWYgKCFjb25u LT5zYXNsX3N0YXRlKQogCQlnb3RvIG9vbV9lcnJvcjsKIAogCS8qIEdldCB0aGUgbWVjaGFuaXNt LXNwZWNpZmljIEluaXRpYWwgQ2xpZW50IFJlc3BvbnNlLCBpZiBhbnkgKi8KLQlwZ19mZV9zY3Jh bV9leGNoYW5nZShjb25uLT5zYXNsX3N0YXRlLAorCWNvbm4tPnNhc2wtPmV4Y2hhbmdlKGNvbm4t PnNhc2xfc3RhdGUsCiAJCQkJCQkgTlVMTCwgLTEsCiAJCQkJCQkgJmluaXRpYWxyZXNwb25zZSwg JmluaXRpYWxyZXNwb25zZWxlbiwKIAkJCQkJCSAmZG9uZSwgJnN1Y2Nlc3MpOwpAQCAtNjQ5LDcg KzY1Nyw3IEBAIHBnX1NBU0xfY29udGludWUoUEdjb25uICpjb25uLCBpbnQgcGF5bG9hZGxlbiwg Ym9vbCBmaW5hbCkKIAkvKiBGb3Igc2FmZXR5IGFuZCBjb252ZW5pZW5jZSwgZW5zdXJlIHRoZSBi dWZmZXIgaXMgTlVMTC10ZXJtaW5hdGVkLiAqLwogCWNoYWxsZW5nZVtwYXlsb2FkbGVuXSA9ICdc MCc7CiAKLQlwZ19mZV9zY3JhbV9leGNoYW5nZShjb25uLT5zYXNsX3N0YXRlLAorCWNvbm4tPnNh c2wtPmV4Y2hhbmdlKGNvbm4tPnNhc2xfc3RhdGUsCiAJCQkJCQkgY2hhbGxlbmdlLCBwYXlsb2Fk bGVuLAogCQkJCQkJICZvdXRwdXQsICZvdXRwdXRsZW4sCiAJCQkJCQkgJmRvbmUsICZzdWNjZXNz KTsKQEAgLTgzMCw3ICs4MzgsNyBAQCBjaGVja19leHBlY3RlZF9hcmVxKEF1dGhSZXF1ZXN0IGFy ZXEsIFBHY29ubiAqY29ubikKIAkJCWNhc2UgQVVUSF9SRVFfU0FTTF9GSU46CiAJCQkJYnJlYWs7 CiAJCQljYXNlIEFVVEhfUkVRX09LOgotCQkJCWlmICghcGdfZmVfc2NyYW1fY2hhbm5lbF9ib3Vu ZChjb25uLT5zYXNsX3N0YXRlKSkKKwkJCQlpZiAoIWNvbm4tPnNhc2wgfHwgIWNvbm4tPnNhc2wt PmNoYW5uZWxfYm91bmQoY29ubi0+c2FzbF9zdGF0ZSkpCiAJCQkJewogCQkJCQlhcHBlbmRQUUV4 cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNzYWdlLAogCQkJCQkJCQkJCSBsaWJwcV9nZXR0ZXh0 KCJjaGFubmVsIGJpbmRpbmcgcmVxdWlyZWQsIGJ1dCBzZXJ2ZXIgYXV0aGVudGljYXRlZCBjbGll bnQgd2l0aG91dCBjaGFubmVsIGJpbmRpbmdcbiIpKTsKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZh Y2VzL2xpYnBxL2ZlLWF1dGguaCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGguaAppbmRl eCA3ODc3ZGNiZDA5Li4xZTRmY2JmZjYyIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJw cS9mZS1hdXRoLmgKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC5oCkBAIC0yMiwx NSArMjIsOCBAQAogZXh0ZXJuIGludAlwZ19mZV9zZW5kYXV0aChBdXRoUmVxdWVzdCBhcmVxLCBp bnQgcGF5bG9hZGxlbiwgUEdjb25uICpjb25uKTsKIGV4dGVybiBjaGFyICpwZ19mZV9nZXRhdXRo bmFtZShQUUV4cEJ1ZmZlciBlcnJvck1lc3NhZ2UpOwogCi0vKiBQcm90b3R5cGVzIGZvciBmdW5j dGlvbnMgaW4gZmUtYXV0aC1zY3JhbS5jICovCi1leHRlcm4gdm9pZCAqcGdfZmVfc2NyYW1faW5p dChQR2Nvbm4gKmNvbm4sCi0JCQkJCQkJICBjb25zdCBjaGFyICpwYXNzd29yZCwKLQkJCQkJCQkg IGNvbnN0IGNoYXIgKnNhc2xfbWVjaGFuaXNtKTsKLWV4dGVybiBib29sIHBnX2ZlX3NjcmFtX2No YW5uZWxfYm91bmQodm9pZCAqb3BhcSk7Ci1leHRlcm4gdm9pZCBwZ19mZV9zY3JhbV9mcmVlKHZv aWQgKm9wYXEpOwotZXh0ZXJuIHZvaWQgcGdfZmVfc2NyYW1fZXhjaGFuZ2Uodm9pZCAqb3BhcSwg Y2hhciAqaW5wdXQsIGludCBpbnB1dGxlbiwKLQkJCQkJCQkJIGNoYXIgKipvdXRwdXQsIGludCAq b3V0cHV0bGVuLAotCQkJCQkJCQkgYm9vbCAqZG9uZSwgYm9vbCAqc3VjY2Vzcyk7CisvKiBNZWNo YW5pc21zIGluIGZlLWF1dGgtc2NyYW0uYyAqLworZXh0ZXJuIGNvbnN0IHBnX3Nhc2xfbWVjaCBw Z19zY3JhbV9tZWNoOwogZXh0ZXJuIGNoYXIgKnBnX2ZlX3NjcmFtX2J1aWxkX3NlY3JldChjb25z dCBjaGFyICpwYXNzd29yZCk7CiAKICNlbmRpZgkJCQkJCQkvKiBGRV9BVVRIX0ggKi8KZGlmZiAt LWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3QuYyBiL3NyYy9pbnRlcmZhY2Vz L2xpYnBxL2ZlLWNvbm5lY3QuYwppbmRleCA4MDcwMzY5OGI4Li4xMGQwMDc1ODJjIDEwMDY0NAot LS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMKKysrIGIvc3JjL2ludGVyZmFj ZXMvbGlicHEvZmUtY29ubmVjdC5jCkBAIC01MTcsMTEgKzUxNyw3IEBAIHBxRHJvcENvbm5lY3Rp b24oUEdjb25uICpjb25uLCBib29sIGZsdXNoSW5wdXQpCiAjZW5kaWYKIAlpZiAoY29ubi0+c2Fz bF9zdGF0ZSkKIAl7Ci0JCS8qCi0JCSAqIFhYWDogaWYgc3VwcG9ydCBmb3IgbW9yZSBhdXRoZW50 aWNhdGlvbiBtZWNoYW5pc21zIGlzIGFkZGVkLCB0aGlzCi0JCSAqIG5lZWRzIHRvIGNhbGwgdGhl IHJpZ2h0ICdmcmVlJyBmdW5jdGlvbi4KLQkJICovCi0JCXBnX2ZlX3NjcmFtX2ZyZWUoY29ubi0+ c2FzbF9zdGF0ZSk7CisJCWNvbm4tPnNhc2wtPmZyZWUoY29ubi0+c2FzbF9zdGF0ZSk7CiAJCWNv bm4tPnNhc2xfc3RhdGUgPSBOVUxMOwogCX0KIH0KZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2Vz L2xpYnBxL2xpYnBxLWludC5oIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtaW50LmgKaW5k ZXggZTgxZGMzNzkwNi4uMjVlYWEyMzFjNSAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGli cHEvbGlicHEtaW50LmgKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtaW50LmgKQEAg LTMzOSw2ICszMzksMTkgQEAgdHlwZWRlZiBzdHJ1Y3QgcGdfY29ubl9ob3N0CiAJCQkJCQkJCSAq IGZvdW5kIGluIHBhc3N3b3JkIGZpbGUuICovCiB9IHBnX2Nvbm5faG9zdDsKIAordHlwZWRlZiB2 b2lkICooKnBnX3Nhc2xfaW5pdF9mdW5jKShQR2Nvbm4gKiwgY29uc3QgY2hhciAqLCBjb25zdCBj aGFyICopOwordHlwZWRlZiB2b2lkICAoKnBnX3Nhc2xfZXhjaGFuZ2VfZnVuYykodm9pZCAqLCBj aGFyICosIGludCwgY2hhciAqKiwgaW50ICosIGJvb2wgKiwgYm9vbCAqKTsKK3R5cGVkZWYgYm9v bCAgKCpwZ19zYXNsX2NoYW5uZWxfYm91bmRfZnVuYykodm9pZCAqKTsKK3R5cGVkZWYgdm9pZCAg KCpwZ19zYXNsX2ZyZWVfZnVuYykodm9pZCAqKTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlwZ19z YXNsX2luaXRfZnVuYwkJCWluaXQ7CisJcGdfc2FzbF9leGNoYW5nZV9mdW5jCQlleGNoYW5nZTsK KwlwZ19zYXNsX2NoYW5uZWxfYm91bmRfZnVuYwljaGFubmVsX2JvdW5kOworCXBnX3Nhc2xfZnJl ZV9mdW5jCQkJZnJlZTsKK30gcGdfc2FzbF9tZWNoOworCiAvKgogICogUEdjb25uIHN0b3JlcyBh bGwgdGhlIHN0YXRlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgc2luZ2xlIGNvbm5lY3Rpb24KICAq IHRvIGEgYmFja2VuZC4KQEAgLTUwMCw2ICs1MTMsNyBAQCBzdHJ1Y3QgcGdfY29ubgogCVBHcmVz dWx0ICAgKm5leHRfcmVzdWx0OwkvKiBuZXh0IHJlc3VsdCAodXNlZCBpbiBzaW5nbGUtcm93IG1v ZGUpICovCiAKIAkvKiBBc3NvcnRlZCBzdGF0ZSBmb3IgU0FTTCwgU1NMLCBHU1MsIGV0YyAqLwor CWNvbnN0IHBnX3Nhc2xfbWVjaCAqc2FzbDsKIAl2b2lkCSAgICpzYXNsX3N0YXRlOwogCiAJLyog U1NMIHN0cnVjdHVyZXMgKi8KLS0gCjIuMjUuMQoK --_008_d1b467a78e0e36ed85a09adf979d04cf124a9d4bcamelvmwarecom_ Content-Type: text/x-patch; name="0002-src-common-remove-logging-from-jsonapi-for-shlib.patch" Content-Description: 0002-src-common-remove-logging-from-jsonapi-for-shlib.patch Content-Disposition: attachment; filename="0002-src-common-remove-logging-from-jsonapi-for-shlib.patch"; size=1761; creation-date="Tue, 08 Jun 2021 16:37:45 GMT"; modification-date="Tue, 08 Jun 2021 16:37:45 GMT" Content-ID: <468D6CBAE1C9A94E83206FB41EDCBE52@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 RnJvbSAwNTQxNTk4ZTRmMGJhZDFiOWZmNDFhNDY0MGVjNjk0OTFiMzkzZDU0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8cGNoYW1waW9uQHZtd2FyZS5jb20+ CkRhdGU6IE1vbiwgMyBNYXkgMjAyMSAxMToxNToxNSAtMDcwMApTdWJqZWN0OiBbUEFUQ0ggMi83 XSBzcmMvY29tbW9uOiByZW1vdmUgbG9nZ2luZyBmcm9tIGpzb25hcGkgZm9yIHNobGliCgpUaGUg Y2FuJ3QtaGFwcGVuIGNvZGUgaW4ganNvbmFwaSB3YXMgcHVsbGluZyBpbiBsb2dnaW5nIGNvZGUs IHdoaWNoIGZvcgpsaWJwcSBpcyBub3QgaW5jbHVkZWQuCi0tLQogc3JjL2NvbW1vbi9NYWtlZmls ZSAgfCAgNCArKysrCiBzcmMvY29tbW9uL2pzb25hcGkuYyB8IDExICsrKysrKysrLS0tCiAyIGZp bGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL2NvbW1vbi9NYWtlZmlsZSBiL3NyYy9jb21tb24vTWFrZWZpbGUKaW5kZXggMzhhODU5 OTMzNy4uNmYxMDM5YmM3OCAxMDA2NDQKLS0tIGEvc3JjL2NvbW1vbi9NYWtlZmlsZQorKysgYi9z cmMvY29tbW9uL01ha2VmaWxlCkBAIC0yOCw2ICsyOCwxMCBAQCBzdWJkaXIgPSBzcmMvY29tbW9u CiB0b3BfYnVpbGRkaXIgPSAuLi8uLgogaW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2Vm aWxlLmdsb2JhbAogCisjIEZvciB1c2UgaW4gc2hhcmVkIGxpYnJhcmllcywganNvbmFwaSBuZWVk cyB0byBub3QgbGluayBpbiBhbnkgbG9nZ2luZworIyBmdW5jdGlvbnMuCitvdmVycmlkZSBDRkxB R1NfU0wgKz0gLURKU09OQVBJX05PX0xPRworCiAjIGRvbid0IGluY2x1ZGUgc3ViZGlyZWN0b3J5 LXBhdGgtZGVwZW5kZW50IC1JIGFuZCAtTCBzd2l0Y2hlcwogU1REX0NQUEZMQUdTIDo9ICQoZmls dGVyLW91dCAtSSQodG9wX3NyY2Rpcikvc3JjL2luY2x1ZGUgLUkkKHRvcF9idWlsZGRpcikvc3Jj L2luY2x1ZGUsJChDUFBGTEFHUykpCiBTVERfTERGTEFHUyA6PSAkKGZpbHRlci1vdXQgLUwkKHRv cF9idWlsZGRpcikvc3JjL2NvbW1vbiAtTCQodG9wX2J1aWxkZGlyKS9zcmMvcG9ydCwkKExERkxB R1MpKQpkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi9qc29uYXBpLmMgYi9zcmMvY29tbW9uL2pzb25h cGkuYwppbmRleCAxYmYzOGQ3YjQyLi42YjYwMDFiMTE4IDEwMDY0NAotLS0gYS9zcmMvY29tbW9u L2pzb25hcGkuYworKysgYi9zcmMvY29tbW9uL2pzb25hcGkuYwpAQCAtMjcsMTEgKzI3LDE2IEBA CiAjZW5kaWYKIAogI2lmZGVmIEZST05URU5ECi0jZGVmaW5lIGNoZWNrX3N0YWNrX2RlcHRoKCkK LSNkZWZpbmUganNvbl9sb2dfYW5kX2Fib3J0KC4uLikgXAorIyAgZGVmaW5lIGNoZWNrX3N0YWNr X2RlcHRoKCkKKyMgIGlmZGVmIEpTT05BUElfTk9fTE9HCisjICAgIGRlZmluZSBqc29uX2xvZ19h bmRfYWJvcnQoLi4uKSBcCisJZG8geyBmcHJpbnRmKHN0ZGVyciwgX19WQV9BUkdTX18pOyBleGl0 KDEpOyB9IHdoaWxlKDApCisjICBlbHNlCisjICAgIGRlZmluZSBqc29uX2xvZ19hbmRfYWJvcnQo Li4uKSBcCiAJZG8geyBwZ19sb2dfZmF0YWwoX19WQV9BUkdTX18pOyBleGl0KDEpOyB9IHdoaWxl KDApCisjICBlbmRpZgogI2Vsc2UKLSNkZWZpbmUganNvbl9sb2dfYW5kX2Fib3J0KC4uLikgZWxv ZyhFUlJPUiwgX19WQV9BUkdTX18pCisjICBkZWZpbmUganNvbl9sb2dfYW5kX2Fib3J0KC4uLikg ZWxvZyhFUlJPUiwgX19WQV9BUkdTX18pCiAjZW5kaWYKIAogLyoKLS0gCjIuMjUuMQoK --_008_d1b467a78e0e36ed85a09adf979d04cf124a9d4bcamelvmwarecom_ Content-Type: text/x-patch; name="0003-common-jsonapi-always-palloc-the-error-strings.patch" Content-Description: 0003-common-jsonapi-always-palloc-the-error-strings.patch Content-Disposition: attachment; filename="0003-common-jsonapi-always-palloc-the-error-strings.patch"; size=2259; creation-date="Tue, 08 Jun 2021 16:37:45 GMT"; modification-date="Tue, 08 Jun 2021 16:37:45 GMT" Content-ID: <04ADB13E56481F40B6349AFFF9B00302@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 RnJvbSA1YWQ0YjNjNzgzNWZlOWUwZjI4NDcwMmVjN2I4MjdjMjc3NzA4NTRlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8cGNoYW1waW9uQHZtd2FyZS5jb20+ CkRhdGU6IE1vbiwgMyBNYXkgMjAyMSAxNTozODoyNiAtMDcwMApTdWJqZWN0OiBbUEFUQ0ggMy83 XSBjb21tb24vanNvbmFwaTogYWx3YXlzIHBhbGxvYyB0aGUgZXJyb3Igc3RyaW5ncwoKLi4uc28g dGhhdCBjbGllbnQgY29kZSBjYW4gcGZyZWUoKSB0byBhdm9pZCBtZW1vcnkgbGVha3MgaW4gbG9u Zy1ydW5uaW5nCm9wZXJhdGlvbnMuCi0tLQogc3JjL2NvbW1vbi9qc29uYXBpLmMgfCAxMiArKysr KystLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi9qc29uYXBpLmMgYi9zcmMvY29tbW9uL2pzb25hcGku YwppbmRleCA2YjYwMDFiMTE4Li5mNzMwNGY1ODRmIDEwMDY0NAotLS0gYS9zcmMvY29tbW9uL2pz b25hcGkuYworKysgYi9zcmMvY29tbW9uL2pzb25hcGkuYwpAQCAtMTA4OSw3ICsxMDg5LDcgQEAg anNvbl9lcnJkZXRhaWwoSnNvblBhcnNlRXJyb3JUeXBlIGVycm9yLCBKc29uTGV4Q29udGV4dCAq bGV4KQogCQkJcmV0dXJuIHBzcHJpbnRmKF8oIkV4cGVjdGVkIEpTT04gdmFsdWUsIGJ1dCBmb3Vu ZCBcIiVzXCIuIiksCiAJCQkJCQkJZXh0cmFjdF90b2tlbihsZXgpKTsKIAkJY2FzZSBKU09OX0VY UEVDVEVEX01PUkU6Ci0JCQlyZXR1cm4gXygiVGhlIGlucHV0IHN0cmluZyBlbmRlZCB1bmV4cGVj dGVkbHkuIik7CisJCQlyZXR1cm4gcHN0cmR1cChfKCJUaGUgaW5wdXQgc3RyaW5nIGVuZGVkIHVu ZXhwZWN0ZWRseS4iKSk7CiAJCWNhc2UgSlNPTl9FWFBFQ1RFRF9PQkpFQ1RfRklSU1Q6CiAJCQly ZXR1cm4gcHNwcmludGYoXygiRXhwZWN0ZWQgc3RyaW5nIG9yIFwifVwiLCBidXQgZm91bmQgXCIl c1wiLiIpLAogCQkJCQkJCWV4dHJhY3RfdG9rZW4obGV4KSk7CkBAIC0xMTAzLDE2ICsxMTAzLDE2 IEBAIGpzb25fZXJyZGV0YWlsKEpzb25QYXJzZUVycm9yVHlwZSBlcnJvciwgSnNvbkxleENvbnRl eHQgKmxleCkKIAkJCXJldHVybiBwc3ByaW50ZihfKCJUb2tlbiBcIiVzXCIgaXMgaW52YWxpZC4i KSwKIAkJCQkJCQlleHRyYWN0X3Rva2VuKGxleCkpOwogCQljYXNlIEpTT05fVU5JQ09ERV9DT0RF X1BPSU5UX1pFUk86Ci0JCQlyZXR1cm4gXygiXFx1MDAwMCBjYW5ub3QgYmUgY29udmVydGVkIHRv IHRleHQuIik7CisJCQlyZXR1cm4gcHN0cmR1cChfKCJcXHUwMDAwIGNhbm5vdCBiZSBjb252ZXJ0 ZWQgdG8gdGV4dC4iKSk7CiAJCWNhc2UgSlNPTl9VTklDT0RFX0VTQ0FQRV9GT1JNQVQ6Ci0JCQly ZXR1cm4gXygiXCJcXHVcIiBtdXN0IGJlIGZvbGxvd2VkIGJ5IGZvdXIgaGV4YWRlY2ltYWwgZGln aXRzLiIpOworCQkJcmV0dXJuIHBzdHJkdXAoXygiXCJcXHVcIiBtdXN0IGJlIGZvbGxvd2VkIGJ5 IGZvdXIgaGV4YWRlY2ltYWwgZGlnaXRzLiIpKTsKIAkJY2FzZSBKU09OX1VOSUNPREVfSElHSF9F U0NBUEU6CiAJCQkvKiBub3RlOiB0aGlzIGNhc2UgaXMgb25seSByZWFjaGFibGUgaW4gZnJvbnRl bmQgbm90IGJhY2tlbmQgKi8KLQkJCXJldHVybiBfKCJVbmljb2RlIGVzY2FwZSB2YWx1ZXMgY2Fu bm90IGJlIHVzZWQgZm9yIGNvZGUgcG9pbnQgdmFsdWVzIGFib3ZlIDAwN0Ygd2hlbiB0aGUgZW5j b2RpbmcgaXMgbm90IFVURjguIik7CisJCQlyZXR1cm4gcHN0cmR1cChfKCJVbmljb2RlIGVzY2Fw ZSB2YWx1ZXMgY2Fubm90IGJlIHVzZWQgZm9yIGNvZGUgcG9pbnQgdmFsdWVzIGFib3ZlIDAwN0Yg d2hlbiB0aGUgZW5jb2RpbmcgaXMgbm90IFVURjguIikpOwogCQljYXNlIEpTT05fVU5JQ09ERV9I SUdIX1NVUlJPR0FURToKLQkJCXJldHVybiBfKCJVbmljb2RlIGhpZ2ggc3Vycm9nYXRlIG11c3Qg bm90IGZvbGxvdyBhIGhpZ2ggc3Vycm9nYXRlLiIpOworCQkJcmV0dXJuIHBzdHJkdXAoXygiVW5p Y29kZSBoaWdoIHN1cnJvZ2F0ZSBtdXN0IG5vdCBmb2xsb3cgYSBoaWdoIHN1cnJvZ2F0ZS4iKSk7 CiAJCWNhc2UgSlNPTl9VTklDT0RFX0xPV19TVVJST0dBVEU6Ci0JCQlyZXR1cm4gXygiVW5pY29k ZSBsb3cgc3Vycm9nYXRlIG11c3QgZm9sbG93IGEgaGlnaCBzdXJyb2dhdGUuIik7CisJCQlyZXR1 cm4gcHN0cmR1cChfKCJVbmljb2RlIGxvdyBzdXJyb2dhdGUgbXVzdCBmb2xsb3cgYSBoaWdoIHN1 cnJvZ2F0ZS4iKSk7CiAJfQogCiAJLyoKLS0gCjIuMjUuMQoK --_008_d1b467a78e0e36ed85a09adf979d04cf124a9d4bcamelvmwarecom_ Content-Type: text/x-patch; name="0004-libpq-add-OAUTHBEARER-SASL-mechanism.patch" Content-Description: 0004-libpq-add-OAUTHBEARER-SASL-mechanism.patch Content-Disposition: attachment; filename="0004-libpq-add-OAUTHBEARER-SASL-mechanism.patch"; size=35317; creation-date="Tue, 08 Jun 2021 16:37:45 GMT"; modification-date="Tue, 08 Jun 2021 16:37:45 GMT" Content-ID: Content-Transfer-Encoding: base64 RnJvbSBlM2Q5NTcwOWUxNDdhZTM2NzBiZDhhY2QwYzI2NTQ5M2E2MTE2YjlhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8cGNoYW1waW9uQHZtd2FyZS5jb20+ CkRhdGU6IFR1ZSwgMTMgQXByIDIwMjEgMTA6Mjc6MjcgLTA3MDAKU3ViamVjdDogW1BBVENIIDQv N10gbGlicHE6IGFkZCBPQVVUSEJFQVJFUiBTQVNMIG1lY2hhbmlzbQoKRE8gTk9UIFVTRSBUSElT IFBST09GIE9GIENPTkNFUFQgSU4gUFJPRFVDVElPTi4KCkltcGxlbWVudCBPQVVUSEJFQVJFUiAo UkZDIDc2MjgpIGFuZCBPQXV0aCAyLjAgRGV2aWNlIEF1dGhvcml6YXRpb24KR3JhbnRzIChSRkMg ODYyOCkgb24gdGhlIGNsaWVudCBzaWRlLiBXaGVuIHNwZWFraW5nIHRvIGEgT0F1dGgtZW5hYmxl ZApzZXJ2ZXIsIGl0IGxvb2tzIGEgYml0IGxpa2UgdGhpczoKCiAgICAkIHBzcWwgJ2hvc3Q9ZXhh bXBsZS5vcmcgb2F1dGhfY2xpZW50X2lkPWYwMmM2MzYxLTA2MzUtLi4uJwogICAgVmlzaXQgaHR0 cHM6Ly9vYXV0aC5leGFtcGxlLm9yZy9sb2dpbiBhbmQgZW50ZXIgdGhlIGNvZGU6IEZQUTItTTRC RwoKVGhlIE9BdXRoIGlzc3VlciBtdXN0IHN1cHBvcnQgZGV2aWNlIGF1dGhvcml6YXRpb24uIE5v IG90aGVyIE9BdXRoIGZsb3dzCmFyZSBjdXJyZW50bHkgaW1wbGVtZW50ZWQuCgpUaGUgY2xpZW50 IGltcGxlbWVudGF0aW9uIHJlcXVpcmVzIGxpYmlkZGF3YyBhbmQgaXRzIGRldmVsb3BtZW50Cmhl YWRlcnMuIENvbmZpZ3VyZSAtLXdpdGgtb2F1dGggKGFuZCAtLXdpdGgtaW5jbHVkZXMvLS13aXRo LWxpYnJhcmllcyB0bwpwb2ludCBhdCB0aGUgaWRkYXdjIGluc3RhbGxhdGlvbiwgaWYgaXQncyBp biBhIGN1c3RvbSBsb2NhdGlvbikuCgpTZXZlcmFsIFRPRE9zOgotIGRvbid0IHJldHJ5IGZvcmV2 ZXIgaWYgdGhlIHNlcnZlciB3b24ndCBhY2NlcHQgb3VyIHRva2VuCi0gcGVyZm9ybSBzZXZlcmFs IHNhbml0eSBjaGVja3Mgb24gdGhlIE9BdXRoIGlzc3VlcidzIHJlc3BvbnNlcwotIGhhbmRsZSBj YXNlcyB3aGVyZSB0aGUgY2xpZW50IGhhcyBiZWVuIHNldCB1cCB3aXRoIGFuIGlzc3VlciBhbmQK ICBzY29wZSwgYnV0IHRoZSBQb3N0Z3JlcyBzZXJ2ZXIgd2FudHMgdG8gdXNlIHNvbWV0aGluZyBk aWZmZXJlbnQKLSBpbXByb3ZlIGVycm9yIGRlYnVnZ2FiaWxpdHkgZHVyaW5nIHRoZSBPQXV0aCBo YW5kc2hha2UKLSAuLi5hbmQgbW9yZS4KLS0tCiBjb25maWd1cmUgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAxMDAgKysrKwogY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgICAg IHwgIDE5ICsKIHNyYy9NYWtlZmlsZS5nbG9iYWwuaW4gICAgICAgICAgICAgICB8ICAgMSArCiBz cmMvaW5jbHVkZS9jb21tb24vb2F1dGgtY29tbW9uLmggICAgfCAgMTkgKwogc3JjL2luY2x1ZGUv cGdfY29uZmlnLmguaW4gICAgICAgICAgIHwgICA2ICsKIHNyYy9pbnRlcmZhY2VzL2xpYnBxL01h a2VmaWxlICAgICAgICB8ICAgNyArLQogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1vYXV0 aC5jIHwgNzI0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2ludGVyZmFjZXMvbGli cHEvZmUtYXV0aC1zY3JhbS5jIHwgICA2ICstCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRo LmMgICAgICAgfCAgNDIgKy0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGguaCAgICAgICB8 ICAgMyArCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMgICAgfCAgMzggKysKIHNy Yy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWludC5oICAgICB8ICAxMCArLQogMTIgZmlsZXMgY2hh bmdlZCwgOTU2IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy9pbmNsdWRlL2NvbW1vbi9vYXV0aC1jb21tb24uaAogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguYwoKZGlmZiAtLWdpdCBhL2NvbmZp Z3VyZSBiL2NvbmZpZ3VyZQppbmRleCBlOWI5OGY0NDJmLi5jM2I3YTg5YmYwIDEwMDc1NQotLS0g YS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC03MTMsNiArNzEzLDcgQEAgd2l0aF91dWlk CiB3aXRoX3JlYWRsaW5lCiB3aXRoX3N5c3RlbWQKIHdpdGhfc2VsaW51eAord2l0aF9vYXV0aAog d2l0aF9sZGFwCiB3aXRoX2tyYl9zcnZuYW0KIGtyYl9zcnZ0YWIKQEAgLTg1Niw2ICs4NTcsNyBA QCB3aXRoX2tyYl9zcnZuYW0KIHdpdGhfcGFtCiB3aXRoX2JzZF9hdXRoCiB3aXRoX2xkYXAKK3dp dGhfb2F1dGgKIHdpdGhfYm9uam91cgogd2l0aF9zZWxpbnV4CiB3aXRoX3N5c3RlbWQKQEAgLTE1 NjIsNiArMTU2NCw3IEBAIE9wdGlvbmFsIFBhY2thZ2VzOgogICAtLXdpdGgtcGFtICAgICAgICAg ICAgICBidWlsZCB3aXRoIFBBTSBzdXBwb3J0CiAgIC0td2l0aC1ic2QtYXV0aCAgICAgICAgIGJ1 aWxkIHdpdGggQlNEIEF1dGhlbnRpY2F0aW9uIHN1cHBvcnQKICAgLS13aXRoLWxkYXAgICAgICAg ICAgICAgYnVpbGQgd2l0aCBMREFQIHN1cHBvcnQKKyAgLS13aXRoLW9hdXRoICAgICAgICAgICAg YnVpbGQgd2l0aCBPQXV0aCAyLjAgc3VwcG9ydAogICAtLXdpdGgtYm9uam91ciAgICAgICAgICBi dWlsZCB3aXRoIEJvbmpvdXIgc3VwcG9ydAogICAtLXdpdGgtc2VsaW51eCAgICAgICAgICBidWls ZCB3aXRoIFNFTGludXggc3VwcG9ydAogICAtLXdpdGgtc3lzdGVtZCAgICAgICAgICBidWlsZCB3 aXRoIHN5c3RlbWQgc3VwcG9ydApAQCAtODA0Niw2ICs4MDQ5LDQyIEBAICRhc19lY2hvICIkd2l0 aF9sZGFwIiA+JjY7IH0KIAogCiAKKyMKKyMgT0F1dGggMi4wCisjCit7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgd2l0aCBP QXV0aCBzdXBwb3J0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQg d2l0aCBPQXV0aCBzdXBwb3J0Li4uICIgPiY2OyB9CisKKworCisjIENoZWNrIHdoZXRoZXIgLS13 aXRoLW9hdXRoIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9vYXV0aCtzZXR9IiA9IHNldDsg dGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfb2F1dGg7CisgIGNhc2UgJHdpdGh2YWwgaW4KKyAgICB5 ZXMpCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9PQVVUSCAxIiA+PmNvbmZkZWZzLmgKKworICAg ICAgOzsKKyAgICBubykKKyAgICAgIDoKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGFzX2ZuX2Vy cm9yICQ/ICJubyBhcmd1bWVudCBleHBlY3RlZCBmb3IgLS13aXRoLW9hdXRoIG9wdGlvbiIgIiRM SU5FTk8iIDUKKyAgICAgIDs7CisgIGVzYWMKKworZWxzZQorICB3aXRoX29hdXRoPW5vCisKK2Zp CisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR3 aXRoX29hdXRoIiA+JjUKKyRhc19lY2hvICIkd2l0aF9vYXV0aCIgPiY2OyB9CisKKworCiAjCiAj IEJvbmpvdXIKICMKQEAgLTEzMDQ4LDYgKzEzMDg3LDU2IEBAIGZpCiAKIAogCitpZiB0ZXN0ICIk d2l0aF9vYXV0aCIgPSB5ZXMgOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogY2hlY2tpbmcgZm9yIGlfaW5pdF9zZXNzaW9uIGluIC1saWRkYXdjIiA+JjUK KyRhc19lY2hvX24gImNoZWNraW5nIGZvciBpX2luaXRfc2Vzc2lvbiBpbiAtbGlkZGF3Yy4uLiAi ID4mNjsgfQoraWYgJHthY19jdl9saWJfaWRkYXdjX2lfaW5pdF9zZXNzaW9uKzp9IGZhbHNlOyB0 aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGli X3NhdmVfTElCUz0kTElCUworTElCUz0iLWxpZGRhd2MgICRMSUJTIgorY2F0IGNvbmZkZWZzLmgg LSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisv KiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4K KyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBh IEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0 aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitj aGFyIGlfaW5pdF9zZXNzaW9uICgpOworaW50CittYWluICgpCit7CityZXR1cm4gaV9pbml0X3Nl c3Npb24gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xp bmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2lkZGF3Y19pX2luaXRfc2Vzc2lvbj15 ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2lkZGF3Y19pX2luaXRfc2Vzc2lvbj1ubworZmkKK3JtIC1m IGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFj X2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitm aQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19j dl9saWJfaWRkYXdjX2lfaW5pdF9zZXNzaW9uIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2lk ZGF3Y19pX2luaXRfc2Vzc2lvbiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9pZGRhd2Nf aV9pbml0X3Nlc3Npb24iID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNF T0YKKyNkZWZpbmUgSEFWRV9MSUJJRERBV0MgMQorX0FDRU9GCisKKyAgTElCUz0iLWxpZGRhd2Mg JExJQlMiCisKK2Vsc2UKKyAgYXNfZm5fZXJyb3IgJD8gImxpYnJhcnkgJ2lkZGF3YycgaXMgcmVx dWlyZWQgZm9yIE9BdXRoIHN1cHBvcnQiICIkTElORU5PIiA1CitmaQorCitmaQorCiAjIGZvciBj b250cmliL3NlcGdzcWwKIGlmIHRlc3QgIiR3aXRoX3NlbGludXgiID0geWVzOyB0aGVuCiAgIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNlY3Vy aXR5X2NvbXB1dGVfY3JlYXRlX25hbWUgaW4gLWxzZWxpbnV4IiA+JjUKQEAgLTEzOTQyLDYgKzE0 MDMxLDE3IEBAIGZpCiAKIGRvbmUKIAorZmkKKworaWYgdGVzdCAiJHdpdGhfb2F1dGgiICE9IG5v OyB0aGVuCisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJpZGRhd2Mu aCIgImFjX2N2X2hlYWRlcl9pZGRhd2NfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVz dCAieCRhY19jdl9oZWFkZXJfaWRkYXdjX2giID0geHllczsgdGhlbiA6CisKK2Vsc2UKKyAgYXNf Zm5fZXJyb3IgJD8gImhlYWRlciBmaWxlIDxpZGRhd2MuaD4gaXMgcmVxdWlyZWQgZm9yIE9BdXRo IiAiJExJTkVOTyIgNQorZmkKKworCiBmaQogCiBpZiB0ZXN0ICIkUE9SVE5BTUUiID0gIndpbjMy IiA7IHRoZW4KZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCAz YjQyZDhiZGM5Li5mMTVmNmY2NGQ1IDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29u ZmlndXJlLmFjCkBAIC04NDIsNiArODQyLDE3IEBAIEFDX01TR19SRVNVTFQoWyR3aXRoX2xkYXBd KQogQUNfU1VCU1Qod2l0aF9sZGFwKQogCiAKKyMKKyMgT0F1dGggMi4wCisjCitBQ19NU0dfQ0hF Q0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgd2l0aCBPQXV0aCBzdXBwb3J0XSkKK1BHQUNfQVJHX0JP T0wod2l0aCwgb2F1dGgsIG5vLAorICAgICAgICAgICAgICBbYnVpbGQgd2l0aCBPQXV0aCAyLjAg c3VwcG9ydF0sCisgICAgICAgICAgICAgIFtBQ19ERUZJTkUoW1VTRV9PQVVUSF0sIDEsIFtEZWZp bmUgdG8gMSB0byBidWlsZCB3aXRoIE9BdXRoIDIuMCBzdXBwb3J0LiAoLS13aXRoLW9hdXRoKV0p XSkKK0FDX01TR19SRVNVTFQoWyR3aXRoX29hdXRoXSkKK0FDX1NVQlNUKHdpdGhfb2F1dGgpCisK KwogIwogIyBCb25qb3VyCiAjCkBAIC0xMzEzLDYgKzEzMjQsMTAgQEAgZmkKIEFDX1NVQlNUKExE QVBfTElCU19GRSkKIEFDX1NVQlNUKExEQVBfTElCU19CRSkKIAoraWYgdGVzdCAiJHdpdGhfb2F1 dGgiID0geWVzIDsgdGhlbgorICBBQ19DSEVDS19MSUIoaWRkYXdjLCBpX2luaXRfc2Vzc2lvbiwg W10sIFtBQ19NU0dfRVJST1IoW2xpYnJhcnkgJ2lkZGF3YycgaXMgcmVxdWlyZWQgZm9yIE9BdXRo IHN1cHBvcnRdKV0pCitmaQorCiAjIGZvciBjb250cmliL3NlcGdzcWwKIGlmIHRlc3QgIiR3aXRo X3NlbGludXgiID0geWVzOyB0aGVuCiAgIEFDX0NIRUNLX0xJQihzZWxpbnV4LCBzZWN1cml0eV9j b21wdXRlX2NyZWF0ZV9uYW1lLCBbXSwKQEAgLTE1MjMsNiArMTUzOCwxMCBAQCBlbGlmIHRlc3Qg IiR3aXRoX3V1aWQiID0gb3NzcCA7IHRoZW4KICAgICAgIFtBQ19NU0dfRVJST1IoW2hlYWRlciBm aWxlIDxvc3NwL3V1aWQuaD4gb3IgPHV1aWQuaD4gaXMgcmVxdWlyZWQgZm9yIE9TU1AgVVVJRF0p XSldKQogZmkKIAoraWYgdGVzdCAiJHdpdGhfb2F1dGgiICE9IG5vOyB0aGVuCisgIEFDX0NIRUNL X0hFQURFUihpZGRhd2MuaCwgW10sIFtBQ19NU0dfRVJST1IoW2hlYWRlciBmaWxlIDxpZGRhd2Mu aD4gaXMgcmVxdWlyZWQgZm9yIE9BdXRoXSldKQorZmkKKwogaWYgdGVzdCAiJFBPUlROQU1FIiA9 ICJ3aW4zMiIgOyB0aGVuCiAgICBBQ19DSEVDS19IRUFERVJTKGNydGRlZnMuaCkKIGZpCmRpZmYg LS1naXQgYS9zcmMvTWFrZWZpbGUuZ2xvYmFsLmluIGIvc3JjL01ha2VmaWxlLmdsb2JhbC5pbgpp bmRleCA4ZjA1ODQwODIxLi4zYTYxZGQ0NmQzIDEwMDY0NAotLS0gYS9zcmMvTWFrZWZpbGUuZ2xv YmFsLmluCisrKyBiL3NyYy9NYWtlZmlsZS5nbG9iYWwuaW4KQEAgLTE5Myw2ICsxOTMsNyBAQCB3 aXRoX2xkYXAJPSBAd2l0aF9sZGFwQAogd2l0aF9saWJ4bWwJPSBAd2l0aF9saWJ4bWxACiB3aXRo X2xpYnhzbHQJPSBAd2l0aF9saWJ4c2x0QAogd2l0aF9sbHZtCT0gQHdpdGhfbGx2bUAKK3dpdGhf b2F1dGgJPSBAd2l0aF9vYXV0aEAKIHdpdGhfc3lzdGVtX3R6ZGF0YSA9IEB3aXRoX3N5c3RlbV90 emRhdGFACiB3aXRoX3V1aWQJPSBAd2l0aF91dWlkQAogd2l0aF96bGliCT0gQHdpdGhfemxpYkAK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1vbi9vYXV0aC1jb21tb24uaCBiL3NyYy9pbmNs dWRlL2NvbW1vbi9vYXV0aC1jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi4zZmE5NWFjN2U4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvY29tbW9u L29hdXRoLWNvbW1vbi5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoK KyAqIG9hdXRoLWNvbW1vbi5oCisgKgkJRGVjbGFyYXRpb25zIGZvciBoZWxwZXIgZnVuY3Rpb25z IHVzZWQgZm9yIE9BdXRoL09JREMgYXV0aGVudGljYXRpb24KKyAqCisgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTYtMjAyMSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0 eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvY29tbW9uL29hdXRoLWNvbW1vbi5o CisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgT0FVVEhfQ09NTU9OX0gKKyNk ZWZpbmUgT0FVVEhfQ09NTU9OX0gKKworLyogTmFtZSBvZiBTQVNMIG1lY2hhbmlzbSBwZXIgSUFO QSAqLworI2RlZmluZSBPQVVUSEJFQVJFUl9OQU1FICJPQVVUSEJFQVJFUiIKKworI2VuZGlmIC8q IE9BVVRIX0NPTU1PTl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wZ19jb25maWcuaC5p biBiL3NyYy9pbmNsdWRlL3BnX2NvbmZpZy5oLmluCmluZGV4IDc4M2I4ZmMxYmEuLmRiNWJjNTZh YzUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3BnX2NvbmZpZy5oLmluCisrKyBiL3NyYy9pbmNs dWRlL3BnX2NvbmZpZy5oLmluCkBAIC0zMTksNiArMzE5LDkgQEAKIC8qIERlZmluZSB0byAxIGlm IHlvdSBoYXZlIHRoZSBgY3J5cHRvJyBsaWJyYXJ5ICgtbGNyeXB0bykuICovCiAjdW5kZWYgSEFW RV9MSUJDUllQVE8KIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpZGRhd2MnIGxp YnJhcnkgKC1saWRkYXdjKS4gKi8KKyN1bmRlZiBIQVZFX0xJQklEREFXQworCiAvKiBEZWZpbmUg dG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxkYXAnIGxpYnJhcnkgKC1sbGRhcCkuICovCiAjdW5kZWYg SEFWRV9MSUJMREFQCiAKQEAgLTkyMCw2ICs5MjMsOSBAQAogLyogRGVmaW5lIHRvIHNlbGVjdCBu YW1lZCBQT1NJWCBzZW1hcGhvcmVzLiAqLwogI3VuZGVmIFVTRV9OQU1FRF9QT1NJWF9TRU1BUEhP UkVTCiAKKy8qIERlZmluZSB0byAxIHRvIGJ1aWxkIHdpdGggT0F1dGggMi4wIHN1cHBvcnQuICgt LXdpdGgtb2F1dGgpICovCisjdW5kZWYgVVNFX09BVVRICisKIC8qIERlZmluZSB0byAxIHRvIGJ1 aWxkIHdpdGggT3BlblNTTCBzdXBwb3J0LiAoLS13aXRoLXNzbD1vcGVuc3NsKSAqLwogI3VuZGVm IFVTRV9PUEVOU1NMCiAKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL01ha2VmaWxl IGIvc3JjL2ludGVyZmFjZXMvbGlicHEvTWFrZWZpbGUKaW5kZXggMGM0ZTU1YjZhZC4uOGU4OWQ1 MDkwMCAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvTWFrZWZpbGUKKysrIGIvc3Jj L2ludGVyZmFjZXMvbGlicHEvTWFrZWZpbGUKQEAgLTYyLDYgKzYyLDExIEBAIE9CSlMgKz0gXAog CWZlLXNlY3VyZS1nc3NhcGkubwogZW5kaWYKIAoraWZlcSAoJCh3aXRoX29hdXRoKSx5ZXMpCitP QkpTICs9IFwKKwlmZS1hdXRoLW9hdXRoLm8KK2VuZGlmCisKIGlmZXEgKCQoUE9SVE5BTUUpLCBj eWd3aW4pCiBvdmVycmlkZSBzaGxpYiA9IGN5ZyQoTkFNRSkkKERMU1VGRklYKQogZW5kaWYKQEAg LTgzLDcgKzg4LDcgQEAgZW5kaWYKICMgdGhhdCBhcmUgYnVpbHQgY29ycmVjdGx5IGZvciB1c2Ug aW4gYSBzaGxpYi4KIFNITElCX0xJTktfSU5URVJOQUwgPSAtbHBnY29tbW9uX3NobGliIC1scGdw b3J0X3NobGliCiBpZm5lcSAoJChQT1JUTkFNRSksIHdpbjMyKQotU0hMSUJfTElOSyArPSAkKGZp bHRlciAtbGNyeXB0IC1sZGVzIC1sY29tX2VyciAtbGNyeXB0byAtbGs1Y3J5cHRvIC1sa3JiNSAt bGdzc2FwaV9rcmI1IC1sZ3NzIC1sZ3NzYXBpIC1sc3NsIC1sc29ja2V0IC1sbnNsIC1scmVzb2x2 IC1saW50bCAtbG0sICQoTElCUykpICQoTERBUF9MSUJTX0ZFKSAkKFBUSFJFQURfTElCUykKK1NI TElCX0xJTksgKz0gJChmaWx0ZXIgLWxjcnlwdCAtbGRlcyAtbGNvbV9lcnIgLWxjcnlwdG8gLWxr NWNyeXB0byAtbGtyYjUgLWxnc3NhcGlfa3JiNSAtbGdzcyAtbGdzc2FwaSAtbHNzbCAtbGlkZGF3 YyAtbHNvY2tldCAtbG5zbCAtbHJlc29sdiAtbGludGwgLWxtLCAkKExJQlMpKSAkKExEQVBfTElC U19GRSkgJChQVEhSRUFEX0xJQlMpCiBlbHNlCiBTSExJQl9MSU5LICs9ICQoZmlsdGVyIC1sY3J5 cHQgLWxkZXMgLWxjb21fZXJyIC1sY3J5cHRvIC1sazVjcnlwdG8gLWxrcmI1IC1sZ3NzYXBpMzIg LWxzc2wgLWxzb2NrZXQgLWxuc2wgLWxyZXNvbHYgLWxpbnRsIC1sbSAkKFBUSFJFQURfTElCUyks ICQoTElCUykpICQoTERBUF9MSUJTX0ZFKQogZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZh Y2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgt b2F1dGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5hMjdmOTc0MzY5 Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1vYXV0aC5j CkBAIC0wLDAgKzEsNzI0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBmZS1hdXRoLW9h dXRoLmMKKyAqCSAgIFRoZSBmcm9udC1lbmQgKGNsaWVudCkgaW1wbGVtZW50YXRpb24gb2YgT0F1 dGgvT0lEQyBhdXRoZW50aWNhdGlvbi4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5 OTYtMjAyMSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25z IENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9y bmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2ludGVyZmFjZXMvbGlicHEvZmUt YXV0aC1vYXV0aC5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgPGlk ZGF3Yy5oPgorCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKworI2luY2x1ZGUgImNvbW1vbi9i YXNlNjQuaCIKKyNpbmNsdWRlICJjb21tb24vaG1hYy5oIgorI2luY2x1ZGUgImNvbW1vbi9qc29u YXBpLmgiCisjaW5jbHVkZSAiY29tbW9uL29hdXRoLWNvbW1vbi5oIgorI2luY2x1ZGUgImZlLWF1 dGguaCIKKyNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgorCisvKiBUaGUgZXhwb3J0ZWQgT0F1dGgg Y2FsbGJhY2sgbWVjaGFuaXNtLiAqLworc3RhdGljIHZvaWQgKm9hdXRoX2luaXQoUEdjb25uICpj b25uLCBjb25zdCBjaGFyICpwYXNzd29yZCwKKwkJCQkJCWNvbnN0IGNoYXIgKnNhc2xfbWVjaGFu aXNtKTsKK3N0YXRpYyB2b2lkIG9hdXRoX2V4Y2hhbmdlKHZvaWQgKm9wYXEsIGJvb2wgZmluYWws CisJCQkJCQkgICBjaGFyICppbnB1dCwgaW50IGlucHV0bGVuLAorCQkJCQkJICAgY2hhciAqKm91 dHB1dCwgaW50ICpvdXRwdXRsZW4sCisJCQkJCQkgICBib29sICpkb25lLCBib29sICpzdWNjZXNz KTsKK3N0YXRpYyBib29sIG9hdXRoX2NoYW5uZWxfYm91bmQodm9pZCAqb3BhcSk7CitzdGF0aWMg dm9pZCBvYXV0aF9mcmVlKHZvaWQgKm9wYXEpOworCitjb25zdCBwZ19zYXNsX21lY2ggcGdfb2F1 dGhfbWVjaCA9IHsKKwlvYXV0aF9pbml0LAorCW9hdXRoX2V4Y2hhbmdlLAorCW9hdXRoX2NoYW5u ZWxfYm91bmQsCisJb2F1dGhfZnJlZSwKK307CisKK3R5cGVkZWYgZW51bQoreworCUZFX09BVVRI X0lOSVQsCisJRkVfT0FVVEhfQkVBUkVSX1NFTlQsCisJRkVfT0FVVEhfU0VSVkVSX0VSUk9SLAor fSBmZV9vYXV0aF9zdGF0ZV9lbnVtOworCit0eXBlZGVmIHN0cnVjdAoreworCWZlX29hdXRoX3N0 YXRlX2VudW0gc3RhdGU7CisKKwlQR2Nvbm4JICAgKmNvbm47Cit9IGZlX29hdXRoX3N0YXRlOwor CitzdGF0aWMgdm9pZCAqCitvYXV0aF9pbml0KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcGFz c3dvcmQsCisJCSAgIGNvbnN0IGNoYXIgKnNhc2xfbWVjaGFuaXNtKQoreworCWZlX29hdXRoX3N0 YXRlICpzdGF0ZTsKKworCS8qCisJICogV2Ugb25seSBzdXBwb3J0IG9uZSBTQVNMIG1lY2hhbmlz bSBoZXJlOyBhbnl0aGluZyBlbHNlIGlzIHByb2dyYW1tZXIKKwkgKiBlcnJvci4KKwkgKi8KKwlB c3NlcnQoc2FzbF9tZWNoYW5pc20gIT0gTlVMTCk7CisJQXNzZXJ0KCFzdHJjbXAoc2FzbF9tZWNo YW5pc20sIE9BVVRIQkVBUkVSX05BTUUpKTsKKworCXN0YXRlID0gbWFsbG9jKHNpemVvZigqc3Rh dGUpKTsKKwlpZiAoIXN0YXRlKQorCQlyZXR1cm4gTlVMTDsKKworCXN0YXRlLT5zdGF0ZSA9IEZF X09BVVRIX0lOSVQ7CisJc3RhdGUtPmNvbm4gPSBjb25uOworCisJcmV0dXJuIHN0YXRlOworfQor CitzdGF0aWMgY29uc3QgY2hhciAqCitpZGRhd2NfZXJyb3Jfc3RyaW5nKGludCBlcnJjb2RlKQor eworCXN3aXRjaCAoZXJyY29kZSkKKwl7CisJCWNhc2UgSV9PSzoKKwkJCXJldHVybiAiSV9PSyI7 CisKKwkJY2FzZSBJX0VSUk9SOgorCQkJcmV0dXJuICJJX0VSUk9SIjsKKworCQljYXNlIElfRVJS T1JfUEFSQU06CisJCQlyZXR1cm4gIklfRVJST1JfUEFSQU0iOworCisJCWNhc2UgSV9FUlJPUl9N RU1PUlk6CisJCQlyZXR1cm4gIklfRVJST1JfTUVNT1JZIjsKKworCQljYXNlIElfRVJST1JfVU5B VVRIT1JJWkVEOgorCQkJcmV0dXJuICJJX0VSUk9SX1VOQVVUSE9SSVpFRCI7CisKKwkJY2FzZSBJ X0VSUk9SX1NFUlZFUjoKKwkJCXJldHVybiAiSV9FUlJPUl9TRVJWRVIiOworCX0KKworCXJldHVy biAiPHVua25vd24+IjsKK30KKworc3RhdGljIHZvaWQKK2lkZGF3Y19lcnJvcihQR2Nvbm4gKmNv bm4sIGludCBlcnJjb2RlLCBjb25zdCBjaGFyICptc2cpCit7CisJYXBwZW5kUFFFeHBCdWZmZXJT dHIoJmNvbm4tPmVycm9yTWVzc2FnZSwgbGlicHFfZ2V0dGV4dChtc2cpKTsKKwlhcHBlbmRQUUV4 cEJ1ZmZlcigmY29ubi0+ZXJyb3JNZXNzYWdlLAorCQkJCQkgIGxpYnBxX2dldHRleHQoIiAoaWRk YXdjIGVycm9yICVzKVxuIiksCisJCQkJCSAgaWRkYXdjX2Vycm9yX3N0cmluZyhlcnJjb2RlKSk7 Cit9CisKK3N0YXRpYyB2b2lkCitpZGRhd2NfcmVxdWVzdF9lcnJvcihQR2Nvbm4gKmNvbm4sIHN0 cnVjdCBfaV9zZXNzaW9uICppLCBpbnQgZXJyLCBjb25zdCBjaGFyICptc2cpCit7CisJY29uc3Qg Y2hhciAqZXJyb3JfY29kZTsKKwljb25zdCBjaGFyICpkZXNjOworCisJYXBwZW5kUFFFeHBCdWZm ZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwgIiVzOiAiLCBsaWJwcV9nZXR0ZXh0KG1zZykpOworCisJ ZXJyb3JfY29kZSA9IGlfZ2V0X3N0cl9wYXJhbWV0ZXIoaSwgSV9PUFRfRVJST1IpOworCWlmICgh ZXJyb3JfY29kZSkKKwl7CisJCS8qCisJCSAqIFRoZSBzZXJ2ZXIgZGlkbid0IGdpdmUgdXMgYW55 IHVzZWZ1bCBpbmZvcm1hdGlvbiwgc28ganVzdCBwcmludCB0aGUKKwkJICogZXJyb3IgY29kZS4K KwkJICovCisJCWFwcGVuZFBRRXhwQnVmZmVyKCZjb25uLT5lcnJvck1lc3NhZ2UsCisJCQkJCQkg IGxpYnBxX2dldHRleHQoIihpZGRhd2MgZXJyb3IgJXMpXG4iKSwKKwkJCQkJCSAgaWRkYXdjX2Vy cm9yX3N0cmluZyhlcnIpKTsKKwkJcmV0dXJuOworCX0KKworCS8qIElmIHRoZSBzZXJ2ZXIgZ2F2 ZSBhIHN0cmluZyBkZXNjcmlwdGlvbiwgcHJpbnQgdGhhdCB0b28uICovCisJZGVzYyA9IGlfZ2V0 X3N0cl9wYXJhbWV0ZXIoaSwgSV9PUFRfRVJST1JfREVTQ1JJUFRJT04pOworCWlmIChkZXNjKQor CQlhcHBlbmRQUUV4cEJ1ZmZlcigmY29ubi0+ZXJyb3JNZXNzYWdlLCAiJXMgIiwgZGVzYyk7CisK KwlhcHBlbmRQUUV4cEJ1ZmZlcigmY29ubi0+ZXJyb3JNZXNzYWdlLCAiKCVzKVxuIiwgZXJyb3Jf Y29kZSk7Cit9CisKK3N0YXRpYyBjaGFyICoKK2dldF9hdXRoX3Rva2VuKFBHY29ubiAqY29ubikK K3sKKwlQUUV4cEJ1ZmZlcgl0b2tlbl9idWYgPSBOVUxMOworCXN0cnVjdCBfaV9zZXNzaW9uIHNl c3Npb247CisJaW50CQkJZXJyOworCWludAkJCWF1dGhfbWV0aG9kOworCWJvb2wJCXVzZXJfcHJv bXB0ZWQgPSBmYWxzZTsKKwljb25zdCBjaGFyICp2ZXJpZmljYXRpb25fdXJpOworCWNvbnN0IGNo YXIgKnVzZXJfY29kZTsKKwljb25zdCBjaGFyICphY2Nlc3NfdG9rZW47CisJY29uc3QgY2hhciAq dG9rZW5fdHlwZTsKKwljaGFyCSAgICp0b2tlbiA9IE5VTEw7CisKKwlpZiAoIWNvbm4tPm9hdXRo X2Rpc2NvdmVyeV91cmkpCisJCXJldHVybiBzdHJkdXAoIiIpOyAvKiBhc2sgdGhlIHNlcnZlciBm b3Igb25lICovCisKKwlpX2luaXRfc2Vzc2lvbigmc2Vzc2lvbik7CisKKwlpZiAoIWNvbm4tPm9h dXRoX2NsaWVudF9pZCkKKwl7CisJCS8qIFdlIGNhbid0IHRhbGsgdG8gYSBzZXJ2ZXIgd2l0aG91 dCBhIGNsaWVudCBpZGVudGlmaWVyLiAqLworCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY29ubi0+ ZXJyb3JNZXNzYWdlLAorCQkJCQkJCSBsaWJwcV9nZXR0ZXh0KCJubyBvYXV0aF9jbGllbnRfaWQg aXMgc2V0IGZvciB0aGUgY29ubmVjdGlvbiIpKTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCXRv a2VuX2J1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwlpZiAoIXRva2VuX2J1ZikKKwkJZ290 byBjbGVhbnVwOworCisJZXJyID0gaV9zZXRfc3RyX3BhcmFtZXRlcigmc2Vzc2lvbiwgSV9PUFRf T1BFTklEX0NPTkZJR19FTkRQT0lOVCwgY29ubi0+b2F1dGhfZGlzY292ZXJ5X3VyaSk7CisJaWYg KGVycikKKwl7CisJCWlkZGF3Y19lcnJvcihjb25uLCBlcnIsICJmYWlsZWQgdG8gc2V0IE9wZW5J RCBjb25maWcgZW5kcG9pbnQiKTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCWVyciA9IGlfZ2V0 X29wZW5pZF9jb25maWcoJnNlc3Npb24pOworCWlmIChlcnIpCisJeworCQlpZGRhd2NfZXJyb3Io Y29ubiwgZXJyLCAiZmFpbGVkIHRvIGZldGNoIE9wZW5JRCBkaXNjb3ZlcnkgZG9jdW1lbnQiKTsK KwkJZ290byBjbGVhbnVwOworCX0KKworCWlmICghaV9nZXRfc3RyX3BhcmFtZXRlcigmc2Vzc2lv biwgSV9PUFRfVE9LRU5fRU5EUE9JTlQpKQorCXsKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNv bm4tPmVycm9yTWVzc2FnZSwKKwkJCQkJCQkgbGlicHFfZ2V0dGV4dCgiaXNzdWVyIGhhcyBubyB0 b2tlbiBlbmRwb2ludCIpKTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCWlmICghaV9nZXRfc3Ry X3BhcmFtZXRlcigmc2Vzc2lvbiwgSV9PUFRfREVWSUNFX0FVVEhPUklaQVRJT05fRU5EUE9JTlQp KQorCXsKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVzc2FnZSwKKwkJCQkJ CQkgbGlicHFfZ2V0dGV4dCgiaXNzdWVyIGRvZXMgbm90IHN1cHBvcnQgZGV2aWNlIGF1dGhvcml6 YXRpb24iKSk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwllcnIgPSBpX3NldF9yZXNwb25zZV90 eXBlKCZzZXNzaW9uLCBJX1JFU1BPTlNFX1RZUEVfREVWSUNFX0NPREUpOworCWlmIChlcnIpCisJ eworCQlpZGRhd2NfZXJyb3IoY29ubiwgZXJyLCAiZmFpbGVkIHRvIHNldCBkZXZpY2UgY29kZSBy ZXNwb25zZSB0eXBlIik7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlhdXRoX21ldGhvZCA9IElf VE9LRU5fQVVUSF9NRVRIT0RfTk9ORTsKKwlpZiAoY29ubi0+b2F1dGhfY2xpZW50X3NlY3JldCAm JiAqY29ubi0+b2F1dGhfY2xpZW50X3NlY3JldCkKKwkJYXV0aF9tZXRob2QgPSBJX1RPS0VOX0FV VEhfTUVUSE9EX1NFQ1JFVF9CQVNJQzsKKworCWVyciA9IGlfc2V0X3BhcmFtZXRlcl9saXN0KCZz ZXNzaW9uLAorCQlJX09QVF9DTElFTlRfSUQsIGNvbm4tPm9hdXRoX2NsaWVudF9pZCwKKwkJSV9P UFRfQ0xJRU5UX1NFQ1JFVCwgY29ubi0+b2F1dGhfY2xpZW50X3NlY3JldCwKKwkJSV9PUFRfVE9L RU5fTUVUSE9ELCBhdXRoX21ldGhvZCwKKwkJSV9PUFRfU0NPUEUsIGNvbm4tPm9hdXRoX3Njb3Bl LAorCQlJX09QVF9OT05FCisJKTsKKwlpZiAoZXJyKQorCXsKKwkJaWRkYXdjX2Vycm9yKGNvbm4s IGVyciwgImZhaWxlZCB0byBzZXQgY2xpZW50IGlkZW50aWZpZXIiKTsKKwkJZ290byBjbGVhbnVw OworCX0KKworCWVyciA9IGlfcnVuX2RldmljZV9hdXRoX3JlcXVlc3QoJnNlc3Npb24pOworCWlm IChlcnIpCisJeworCQlpZGRhd2NfcmVxdWVzdF9lcnJvcihjb25uLCAmc2Vzc2lvbiwgZXJyLAor CQkJCQkJCSJmYWlsZWQgdG8gb2J0YWluIGRldmljZSBhdXRob3JpemF0aW9uIik7CisJCWdvdG8g Y2xlYW51cDsKKwl9CisKKwl2ZXJpZmljYXRpb25fdXJpID0gaV9nZXRfc3RyX3BhcmFtZXRlcigm c2Vzc2lvbiwgSV9PUFRfREVWSUNFX0FVVEhfVkVSSUZJQ0FUSU9OX1VSSSk7CisJaWYgKCF2ZXJp ZmljYXRpb25fdXJpKQorCXsKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVz c2FnZSwKKwkJCQkJCQkgbGlicHFfZ2V0dGV4dCgiaXNzdWVyIGRpZCBub3QgcHJvdmlkZSBhIHZl cmlmaWNhdGlvbiBVUkkiKSk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwl1c2VyX2NvZGUgPSBp X2dldF9zdHJfcGFyYW1ldGVyKCZzZXNzaW9uLCBJX09QVF9ERVZJQ0VfQVVUSF9VU0VSX0NPREUp OworCWlmICghdXNlcl9jb2RlKQorCXsKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVy cm9yTWVzc2FnZSwKKwkJCQkJCQkgbGlicHFfZ2V0dGV4dCgiaXNzdWVyIGRpZCBub3QgcHJvdmlk ZSBhIHVzZXIgY29kZSIpKTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCS8qCisJICogUG9sbCB0 aGUgdG9rZW4gZW5kcG9pbnQgdW50aWwgZWl0aGVyIHRoZSB1c2VyIGxvZ3MgaW4gYW5kIGF1dGhv cml6ZXMgdGhlCisJICogdXNlIG9mIGEgdG9rZW4sIG9yIGEgaGFyZCBmYWlsdXJlIG9jY3Vycy4g V2UgcGVyZm9ybSBvbmUgcGluZyBfYmVmb3JlXworCSAqIHByb21wdGluZyB0aGUgdXNlciwgc28g dGhhdCB3ZSBkb24ndCBtYWtlIHRoZW0gZG8gdGhlIHdvcmsgb2YgbG9nZ2luZyBpbgorCSAqIG9u bHkgdG8gZmluZCB0aGF0IHRoZSB0b2tlbiBlbmRwb2ludCBpcyBjb21wbGV0ZWx5IHVucmVhY2hh YmxlLgorCSAqLworCWVyciA9IGlfcnVuX3Rva2VuX3JlcXVlc3QoJnNlc3Npb24pOworCXdoaWxl IChlcnIpCisJeworCQljb25zdCBjaGFyICplcnJvcl9jb2RlOworCQl1aW50CQlpbnRlcnZhbDsK KworCQllcnJvcl9jb2RlID0gaV9nZXRfc3RyX3BhcmFtZXRlcigmc2Vzc2lvbiwgSV9PUFRfRVJS T1IpOworCisJCS8qCisJCSAqIGF1dGhvcml6YXRpb25fcGVuZGluZyBhbmQgc2xvd19kb3duIGFy ZSB0aGUgb25seSBhY2NlcHRhYmxlIGVycm9yczsKKwkJICogYW55dGhpbmcgZWxzZSBhbmQgd2Ug YmFpbC4KKwkJICovCisJCWlmICghZXJyb3JfY29kZSB8fCAoc3RyY21wKGVycm9yX2NvZGUsICJh dXRob3JpemF0aW9uX3BlbmRpbmciKQorCQkJCQkJCSYmIHN0cmNtcChlcnJvcl9jb2RlLCAic2xv d19kb3duIikpKQorCQl7CisJCQlpZGRhd2NfcmVxdWVzdF9lcnJvcihjb25uLCAmc2Vzc2lvbiwg ZXJyLAorCQkJCQkJCQkiT0F1dGggdG9rZW4gcmV0cmlldmFsIGZhaWxlZCIpOworCQkJZ290byBj bGVhbnVwOworCQl9CisKKwkJaWYgKCF1c2VyX3Byb21wdGVkKQorCQl7CisJCQkvKgorCQkJICog Tm93IHRoYXQgd2Uga25vdyB0aGUgdG9rZW4gZW5kcG9pbnQgaXNuJ3QgYnJva2VuLCBnaXZlIHRo ZSB1c2VyCisJCQkgKiB0aGUgbG9naW4gaW5zdHJ1Y3Rpb25zLgorCQkJICovCisJCQlwcUludGVy bmFsTm90aWNlKCZjb25uLT5ub3RpY2VIb29rcywKKwkJCQkJCQkgIlZpc2l0ICVzIGFuZCBlbnRl ciB0aGUgY29kZTogJXMiLAorCQkJCQkJCSB2ZXJpZmljYXRpb25fdXJpLCB1c2VyX2NvZGUpOwor CisJCQl1c2VyX3Byb21wdGVkID0gdHJ1ZTsKKwkJfQorCisJCS8qCisJCSAqIFdlIGFyZSByZXF1 aXJlZCB0byB3YWl0IGJldHdlZW4gcG9sbHM7IHRoZSBzZXJ2ZXIgdGVsbHMgdXMgaG93IGxvbmcu CisJCSAqIFRPRE86IGlmIGludGVydmFsJ3Mgbm90IHNldCwgd2UgbmVlZCB0byBkZWZhdWx0IHRv IGZpdmUgc2Vjb25kcworCQkgKiBUT0RPOiBzYW5pdHkgY2hlY2sgdGhlIGludGVydmFsCisJCSAq LworCQlpbnRlcnZhbCA9IGlfZ2V0X2ludF9wYXJhbWV0ZXIoJnNlc3Npb24sIElfT1BUX0RFVklD RV9BVVRIX0lOVEVSVkFMKTsKKworCQkvKgorCQkgKiBBIHNsb3dfZG93biBlcnJvciByZXF1aXJl cyB1cyB0byBwZXJtYW5lbnRseSBpbmNyZWFzZSBvdXIgcmV0cnkKKwkJICogaW50ZXJ2YWwgYnkg Zml2ZSBzZWNvbmRzLiBSRkMgODYyOCwgU2VjLiAzLjUuCisJCSAqLworCQlpZiAoIXN0cmNtcChl cnJvcl9jb2RlLCAic2xvd19kb3duIikpCisJCXsKKwkJCWludGVydmFsICs9IDU7CisJCQlpX3Nl dF9pbnRfcGFyYW1ldGVyKCZzZXNzaW9uLCBJX09QVF9ERVZJQ0VfQVVUSF9JTlRFUlZBTCwgaW50 ZXJ2YWwpOworCQl9CisKKwkJc2xlZXAoaW50ZXJ2YWwpOworCisJCS8qCisJCSAqIFhYWCBSZXNl dCB0aGUgZXJyb3IgY29kZSBiZWZvcmUgZXZlcnkgY2FsbCwgYmVjYXVzZSBpZGRhd2Mgd29uJ3Qg ZG8KKwkJICogdGhhdCBmb3IgdXMuIFRoaXMgbWF0dGVycyBpZiB0aGUgc2VydmVyIGZpcnN0IHNl bmRzIGEgInBlbmRpbmciIGVycm9yCisJCSAqIGNvZGUsIHRoZW4gbGF0ZXIgaGFyZC1mYWlscyB3 aXRob3V0IHNlbmRpbmcgYW4gZXJyb3IgY29kZSB0bworCQkgKiBvdmVyd3JpdGUgdGhlIGZpcnN0 IG9uZS4KKwkJICoKKwkJICogVGhhdCB3ZSBoYXZlIHRvIGRvIHRoaXMgYXQgYWxsIHNlZW1zIGxp a2UgYSBidWcgaW4gaWRkYXdjLgorCQkgKi8KKwkJaV9zZXRfc3RyX3BhcmFtZXRlcigmc2Vzc2lv biwgSV9PUFRfRVJST1IsIE5VTEwpOworCisJCWVyciA9IGlfcnVuX3Rva2VuX3JlcXVlc3QoJnNl c3Npb24pOworCX0KKworCWFjY2Vzc190b2tlbiA9IGlfZ2V0X3N0cl9wYXJhbWV0ZXIoJnNlc3Np b24sIElfT1BUX0FDQ0VTU19UT0tFTik7CisJdG9rZW5fdHlwZSA9IGlfZ2V0X3N0cl9wYXJhbWV0 ZXIoJnNlc3Npb24sIElfT1BUX1RPS0VOX1RZUEUpOworCisJaWYgKCFhY2Nlc3NfdG9rZW4gfHwg IXRva2VuX3R5cGUgfHwgc3RyY2FzZWNtcCh0b2tlbl90eXBlLCAiQmVhcmVyIikpCisJeworCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNzYWdlLAorCQkJCQkJCSBsaWJwcV9n ZXR0ZXh0KCJpc3N1ZXIgZGlkIG5vdCBwcm92aWRlIGEgYmVhcmVyIHRva2VuIikpOworCQlnb3Rv IGNsZWFudXA7CisJfQorCisJYXBwZW5kUFFFeHBCdWZmZXJTdHIodG9rZW5fYnVmLCAiQmVhcmVy ICIpOworCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHRva2VuX2J1ZiwgYWNjZXNzX3Rva2VuKTsKKwor CWlmIChQUUV4cEJ1ZmZlckJyb2tlbih0b2tlbl9idWYpKQorCQlnb3RvIGNsZWFudXA7CisKKwl0 b2tlbiA9IHN0cmR1cCh0b2tlbl9idWYtPmRhdGEpOworCitjbGVhbnVwOgorCWlmICh0b2tlbl9i dWYpCisJCWRlc3Ryb3lQUUV4cEJ1ZmZlcih0b2tlbl9idWYpOworCWlfY2xlYW5fc2Vzc2lvbigm c2Vzc2lvbik7CisKKwlyZXR1cm4gdG9rZW47Cit9CisKKyNkZWZpbmUga3ZzZXAgIlx4MDEiCisK K3N0YXRpYyBjaGFyICoKK2NsaWVudF9pbml0aWFsX3Jlc3BvbnNlKFBHY29ubiAqY29ubikKK3sK KwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJlc3BfZm9ybWF0ID0gIm4sLCIga3ZzZXAgImF1 dGg9JXMiIGt2c2VwIGt2c2VwOworCisJUFFFeHBCdWZmZXIJdG9rZW5fYnVmOworCVBRRXhwQnVm ZmVyCWRpc2NvdmVyeV9idWYgPSBOVUxMOworCWNoYXIJICAgKnRva2VuID0gTlVMTDsKKwljaGFy CSAgICpyZXNwb25zZSA9IE5VTEw7CisKKwl0b2tlbl9idWYgPSBjcmVhdGVQUUV4cEJ1ZmZlcigp OworCWlmICghdG9rZW5fYnVmKQorCQlnb3RvIGNsZWFudXA7CisKKwkvKgorCSAqIElmIHdlIGRv bid0IHlldCBoYXZlIGEgZGlzY292ZXJ5IFVSSSwgYnV0IHRoZSB1c2VyIGdhdmUgdXMgYW4gZXhw bGljaXQKKwkgKiBpc3N1ZXIsIHVzZSB0aGUgLndlbGwta25vd24gZGlzY292ZXJ5IFVSSSBmb3Ig dGhhdCBpc3N1ZXIuCisJICovCisJaWYgKCFjb25uLT5vYXV0aF9kaXNjb3ZlcnlfdXJpICYmIGNv bm4tPm9hdXRoX2lzc3VlcikKKwl7CisJCWRpc2NvdmVyeV9idWYgPSBjcmVhdGVQUUV4cEJ1ZmZl cigpOworCQlpZiAoIWRpc2NvdmVyeV9idWYpCisJCQlnb3RvIGNsZWFudXA7CisKKwkJYXBwZW5k UFFFeHBCdWZmZXJTdHIoZGlzY292ZXJ5X2J1ZiwgY29ubi0+b2F1dGhfaXNzdWVyKTsKKwkJYXBw ZW5kUFFFeHBCdWZmZXJTdHIoZGlzY292ZXJ5X2J1ZiwgIi8ud2VsbC1rbm93bi9vcGVuaWQtY29u ZmlndXJhdGlvbiIpOworCisJCWlmIChQUUV4cEJ1ZmZlckJyb2tlbihkaXNjb3ZlcnlfYnVmKSkK KwkJCWdvdG8gY2xlYW51cDsKKworCQljb25uLT5vYXV0aF9kaXNjb3ZlcnlfdXJpID0gc3RyZHVw KGRpc2NvdmVyeV9idWYtPmRhdGEpOworCX0KKworCXRva2VuID0gZ2V0X2F1dGhfdG9rZW4oY29u bik7CisJaWYgKCF0b2tlbikKKwkJZ290byBjbGVhbnVwOworCisJYXBwZW5kUFFFeHBCdWZmZXIo dG9rZW5fYnVmLCByZXNwX2Zvcm1hdCwgdG9rZW4pOworCWlmIChQUUV4cEJ1ZmZlckJyb2tlbih0 b2tlbl9idWYpKQorCQlnb3RvIGNsZWFudXA7CisKKwlyZXNwb25zZSA9IHN0cmR1cCh0b2tlbl9i dWYtPmRhdGEpOworCitjbGVhbnVwOgorCWlmICh0b2tlbikKKwkJZnJlZSh0b2tlbik7CisJaWYg KGRpc2NvdmVyeV9idWYpCisJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihkaXNjb3ZlcnlfYnVmKTsKKwlp ZiAodG9rZW5fYnVmKQorCQlkZXN0cm95UFFFeHBCdWZmZXIodG9rZW5fYnVmKTsKKworCXJldHVy biByZXNwb25zZTsKK30KKworI2RlZmluZSBFUlJPUl9TVEFUVVNfRklFTEQgInN0YXR1cyIKKyNk ZWZpbmUgRVJST1JfU0NPUEVfRklFTEQgInNjb3BlIgorI2RlZmluZSBFUlJPUl9PUEVOSURfQ09O RklHVVJBVElPTl9GSUVMRCAib3BlbmlkLWNvbmZpZ3VyYXRpb24iCisKK3N0cnVjdCBqc29uX2N0 eAoreworCWNoYXIJCSAgICplcnJtc2c7IC8qIGFueSBub24tTlVMTCB2YWx1ZSBzdG9wcyBhbGwg cHJvY2Vzc2luZyAqLworCWludAkJCQluZXN0ZWQ7IC8qIG5lc3RpbmcgbGV2ZWwgKHplcm8gaXMg dGhlIHRvcCkgKi8KKworCWNvbnN0IGNoYXIJICAgKnRhcmdldF9maWVsZF9uYW1lOyAvKiBwb2lu dHMgdG8gYSBzdGF0aWMgYWxsb2NhdGlvbiAqLworCWNoYXIJCSAgKip0YXJnZXRfZmllbGQ7ICAg ICAgLyogc2VlIGJlbG93ICovCisKKwkvKiB0YXJnZXRfZmllbGQsIGlmIHNldCwgcG9pbnRzIHRv IG9uZSBvZiB0aGUgZm9sbG93aW5nOiAqLworCWNoYXIJCSAgICpzdGF0dXM7CisJY2hhcgkJICAg KnNjb3BlOworCWNoYXIJCSAgICpkaXNjb3ZlcnlfdXJpOworfTsKKworc3RhdGljIHZvaWQKK29h dXRoX2pzb25fb2JqZWN0X3N0YXJ0KHZvaWQgKnN0YXRlKQoreworCXN0cnVjdCBqc29uX2N0eAkg ICAqY3R4ID0gc3RhdGU7CisKKwlpZiAoY3R4LT5lcnJtc2cpCisJCXJldHVybjsgLyogc2hvcnQt Y2lyY3VpdCAqLworCisJaWYgKGN0eC0+dGFyZ2V0X2ZpZWxkKQorCXsKKwkJQXNzZXJ0KGN0eC0+ bmVzdGVkID09IDEpOworCisJCWN0eC0+ZXJybXNnID0gcHNwcmludGYobGlicHFfZ2V0dGV4dCgi ZmllbGQgXCIlc1wiIG11c3QgYmUgYSBzdHJpbmciKSwKKwkJCQkJCQkgICBjdHgtPnRhcmdldF9m aWVsZF9uYW1lKTsKKwl9CisKKwkrK2N0eC0+bmVzdGVkOworfQorCitzdGF0aWMgdm9pZAorb2F1 dGhfanNvbl9vYmplY3RfZW5kKHZvaWQgKnN0YXRlKQoreworCXN0cnVjdCBqc29uX2N0eAkgICAq Y3R4ID0gc3RhdGU7CisKKwlpZiAoY3R4LT5lcnJtc2cpCisJCXJldHVybjsgLyogc2hvcnQtY2ly Y3VpdCAqLworCisJLS1jdHgtPm5lc3RlZDsKK30KKworc3RhdGljIHZvaWQKK29hdXRoX2pzb25f b2JqZWN0X2ZpZWxkX3N0YXJ0KHZvaWQgKnN0YXRlLCBjaGFyICpuYW1lLCBib29sIGlzbnVsbCkK K3sKKwlzdHJ1Y3QganNvbl9jdHgJICAgKmN0eCA9IHN0YXRlOworCisJaWYgKGN0eC0+ZXJybXNn KQorCXsKKwkJLyogc2hvcnQtY2lyY3VpdCAqLworCQlwZnJlZShuYW1lKTsKKwkJcmV0dXJuOwor CX0KKworCWlmIChjdHgtPm5lc3RlZCA9PSAxKQorCXsKKwkJaWYgKCFzdHJjbXAobmFtZSwgRVJS T1JfU1RBVFVTX0ZJRUxEKSkKKwkJeworCQkJY3R4LT50YXJnZXRfZmllbGRfbmFtZSA9IEVSUk9S X1NUQVRVU19GSUVMRDsKKwkJCWN0eC0+dGFyZ2V0X2ZpZWxkID0gJmN0eC0+c3RhdHVzOworCQl9 CisJCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgRVJST1JfU0NPUEVfRklFTEQpKQorCQl7CisJCQlj dHgtPnRhcmdldF9maWVsZF9uYW1lID0gRVJST1JfU0NPUEVfRklFTEQ7CisJCQljdHgtPnRhcmdl dF9maWVsZCA9ICZjdHgtPnNjb3BlOworCQl9CisJCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgRVJS T1JfT1BFTklEX0NPTkZJR1VSQVRJT05fRklFTEQpKQorCQl7CisJCQljdHgtPnRhcmdldF9maWVs ZF9uYW1lID0gRVJST1JfT1BFTklEX0NPTkZJR1VSQVRJT05fRklFTEQ7CisJCQljdHgtPnRhcmdl dF9maWVsZCA9ICZjdHgtPmRpc2NvdmVyeV91cmk7CisJCX0KKwl9CisKKwlwZnJlZShuYW1lKTsK K30KKworc3RhdGljIHZvaWQKK29hdXRoX2pzb25fYXJyYXlfc3RhcnQodm9pZCAqc3RhdGUpCit7 CisJc3RydWN0IGpzb25fY3R4CSAgICpjdHggPSBzdGF0ZTsKKworCWlmIChjdHgtPmVycm1zZykK KwkJcmV0dXJuOyAvKiBzaG9ydC1jaXJjdWl0ICovCisKKwlpZiAoIWN0eC0+bmVzdGVkKQorCXsK KwkJY3R4LT5lcnJtc2cgPSBwc3RyZHVwKGxpYnBxX2dldHRleHQoInRvcC1sZXZlbCBlbGVtZW50 IG11c3QgYmUgYW4gb2JqZWN0IikpOworCX0KKwllbHNlIGlmIChjdHgtPnRhcmdldF9maWVsZCkK Kwl7CisJCUFzc2VydChjdHgtPm5lc3RlZCA9PSAxKTsKKworCQljdHgtPmVycm1zZyA9IHBzcHJp bnRmKGxpYnBxX2dldHRleHQoImZpZWxkIFwiJXNcIiBtdXN0IGJlIGEgc3RyaW5nIiksCisJCQkJ CQkJICAgY3R4LT50YXJnZXRfZmllbGRfbmFtZSk7CisJfQorfQorCitzdGF0aWMgdm9pZAorb2F1 dGhfanNvbl9zY2FsYXIodm9pZCAqc3RhdGUsIGNoYXIgKnRva2VuLCBKc29uVG9rZW5UeXBlIHR5 cGUpCit7CisJc3RydWN0IGpzb25fY3R4CSAgICpjdHggPSBzdGF0ZTsKKworCWlmIChjdHgtPmVy cm1zZykKKwl7CisJCS8qIHNob3J0LWNpcmN1aXQgKi8KKwkJcGZyZWUodG9rZW4pOworCQlyZXR1 cm47CisJfQorCisJaWYgKCFjdHgtPm5lc3RlZCkKKwl7CisJCWN0eC0+ZXJybXNnID0gcHN0cmR1 cChsaWJwcV9nZXR0ZXh0KCJ0b3AtbGV2ZWwgZWxlbWVudCBtdXN0IGJlIGFuIG9iamVjdCIpKTsK Kwl9CisJZWxzZSBpZiAoY3R4LT50YXJnZXRfZmllbGQpCisJeworCQlBc3NlcnQoY3R4LT5uZXN0 ZWQgPT0gMSk7CisKKwkJaWYgKHR5cGUgPT0gSlNPTl9UT0tFTl9TVFJJTkcpCisJCXsKKwkJCSpj dHgtPnRhcmdldF9maWVsZCA9IHRva2VuOworCisJCQljdHgtPnRhcmdldF9maWVsZCA9IE5VTEw7 CisJCQljdHgtPnRhcmdldF9maWVsZF9uYW1lID0gTlVMTDsKKworCQkJcmV0dXJuOyAvKiBkb24n dCBwZnJlZSB0aGUgdG9rZW4gd2UncmUgdXNpbmcgKi8KKwkJfQorCisJCWN0eC0+ZXJybXNnID0g cHNwcmludGYobGlicHFfZ2V0dGV4dCgiZmllbGQgXCIlc1wiIG11c3QgYmUgYSBzdHJpbmciKSwK KwkJCQkJCQkgICBjdHgtPnRhcmdldF9maWVsZF9uYW1lKTsKKwl9CisKKwlwZnJlZSh0b2tlbik7 Cit9CisKK3N0YXRpYyBib29sCitoYW5kbGVfb2F1dGhfc2FzbF9lcnJvcihQR2Nvbm4gKmNvbm4s IGNoYXIgKm1zZywgaW50IG1zZ2xlbikKK3sKKwlKc29uTGV4Q29udGV4dAkgICAqbGV4OworCUpz b25TZW1BY3Rpb24JCXNlbSA9IHswfTsKKwlKc29uUGFyc2VFcnJvclR5cGUJZXJyOworCXN0cnVj dCBqc29uX2N0eAkJY3R4ID0gezB9OworCWNoYXIJCQkgICAqZXJybXNnID0gTlVMTDsKKworCS8q IFNhbml0eSBjaGVjay4gKi8KKwlpZiAoc3RybGVuKG1zZykgIT0gbXNnbGVuKQorCXsKKwkJYXBw ZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVzc2FnZSwKKwkJCQkJCQkgbGlicHFfZ2V0 dGV4dCgic2VydmVyJ3MgZXJyb3IgbWVzc2FnZSBjb250YWluZWQgYW4gZW1iZWRkZWQgTlVMTCIp KTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWxleCA9IG1ha2VKc29uTGV4Q29udGV4dENzdHJp bmdMZW4obXNnLCBtc2dsZW4sIFBHX1VURjgsIHRydWUpOworCisJc2VtLnNlbXN0YXRlID0gJmN0 eDsKKworCXNlbS5vYmplY3Rfc3RhcnQgPSBvYXV0aF9qc29uX29iamVjdF9zdGFydDsKKwlzZW0u b2JqZWN0X2VuZCA9IG9hdXRoX2pzb25fb2JqZWN0X2VuZDsKKwlzZW0ub2JqZWN0X2ZpZWxkX3N0 YXJ0ID0gb2F1dGhfanNvbl9vYmplY3RfZmllbGRfc3RhcnQ7CisJc2VtLmFycmF5X3N0YXJ0ID0g b2F1dGhfanNvbl9hcnJheV9zdGFydDsKKwlzZW0uc2NhbGFyID0gb2F1dGhfanNvbl9zY2FsYXI7 CisKKwllcnIgPSBwZ19wYXJzZV9qc29uKGxleCwgJnNlbSk7CisKKwlpZiAoZXJyICE9IEpTT05f U1VDQ0VTUykKKwl7CisJCWVycm1zZyA9IGpzb25fZXJyZGV0YWlsKGVyciwgbGV4KTsKKwl9CisJ ZWxzZSBpZiAoY3R4LmVycm1zZykKKwl7CisJCWVycm1zZyA9IGN0eC5lcnJtc2c7CisJfQorCisJ aWYgKGVycm1zZykKKwl7CisJCWFwcGVuZFBRRXhwQnVmZmVyKCZjb25uLT5lcnJvck1lc3NhZ2Us CisJCQkJCQkgIGxpYnBxX2dldHRleHQoImZhaWxlZCB0byBwYXJzZSBzZXJ2ZXIncyBlcnJvciBy ZXNwb25zZTogJXMiKSwKKwkJCQkJCSAgZXJybXNnKTsKKwkJcGZyZWUoZXJybXNnKTsKKwkJcmV0 dXJuIGZhbHNlOworCX0KKworCS8qIFRPRE86IHdoYXQgaWYgdGhlc2Ugb3ZlcnJpZGUgd2hhdCB0 aGUgdXNlciBhbHJlYWR5IHNwZWNpZmllZD8gKi8KKwlpZiAoY3R4LmRpc2NvdmVyeV91cmkpCisJ eworCQlpZiAoY29ubi0+b2F1dGhfZGlzY292ZXJ5X3VyaSkKKwkJCWZyZWUoY29ubi0+b2F1dGhf ZGlzY292ZXJ5X3VyaSk7CisKKwkJY29ubi0+b2F1dGhfZGlzY292ZXJ5X3VyaSA9IGN0eC5kaXNj b3ZlcnlfdXJpOworCX0KKworCWlmIChjdHguc2NvcGUpCisJeworCQlpZiAoY29ubi0+b2F1dGhf c2NvcGUpCisJCQlmcmVlKGNvbm4tPm9hdXRoX3Njb3BlKTsKKworCQljb25uLT5vYXV0aF9zY29w ZSA9IGN0eC5zY29wZTsKKwl9CisJLyogVE9ETzogbWlzc2luZyBlcnJvciBzY29wZSBzaG91bGQg Y2xlYXIgYW55IGV4aXN0aW5nIGNvbm5lY3Rpb24gc2NvcGUgKi8KKworCWlmICghY3R4LnN0YXR1 cykKKwl7CisJCWFwcGVuZFBRRXhwQnVmZmVyKCZjb25uLT5lcnJvck1lc3NhZ2UsCisJCQkJCQkg IGxpYnBxX2dldHRleHQoInNlcnZlciBzZW50IGVycm9yIHJlc3BvbnNlIHdpdGhvdXQgYSBzdGF0 dXMiKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAoIXN0cmNtcChjdHguc3RhdHVzLCAi aW52YWxpZF90b2tlbiIpKQorCXsKKwkJLyoKKwkJICogaW52YWxpZF90b2tlbiBpcyB0aGUgb25s eSBlcnJvciBjb2RlIHdlJ2xsIGF1dG9tYXRpY2FsbHkgcmV0cnkgZm9yLAorCQkgKiBidXQgb25s eSBpZiB3ZSBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbiB0byBkbyBzby4KKwkJICovCisJCWlmIChj b25uLT5vYXV0aF9kaXNjb3ZlcnlfdXJpKQorCQkJY29ubi0+b2F1dGhfd2FudF9yZXRyeSA9IHRy dWU7CisJfQorCS8qIFRPRE86IGluY2x1ZGUgc3RhdHVzIGluIGhhcmQgZmFpbHVyZSBtZXNzYWdl ICovCisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQKK29hdXRoX2V4Y2hhbmdlKHZv aWQgKm9wYXEsIGJvb2wgZmluYWwsCisJCQkgICBjaGFyICppbnB1dCwgaW50IGlucHV0bGVuLAor CQkJICAgY2hhciAqKm91dHB1dCwgaW50ICpvdXRwdXRsZW4sCisJCQkgICBib29sICpkb25lLCBi b29sICpzdWNjZXNzKQoreworCWZlX29hdXRoX3N0YXRlICpzdGF0ZSA9IG9wYXE7CisJUEdjb25u CSAgICpjb25uID0gc3RhdGUtPmNvbm47CisKKwkqZG9uZSA9IGZhbHNlOworCSpzdWNjZXNzID0g ZmFsc2U7CisJKm91dHB1dCA9IE5VTEw7CisJKm91dHB1dGxlbiA9IDA7CisKKwlzd2l0Y2ggKHN0 YXRlLT5zdGF0ZSkKKwl7CisJCWNhc2UgRkVfT0FVVEhfSU5JVDoKKwkJCUFzc2VydChpbnB1dGxl biA9PSAtMSk7CisKKwkJCSpvdXRwdXQgPSBjbGllbnRfaW5pdGlhbF9yZXNwb25zZShjb25uKTsK KwkJCWlmICghKm91dHB1dCkKKwkJCQlnb3RvIGVycm9yOworCisJCQkqb3V0cHV0bGVuID0gc3Ry bGVuKCpvdXRwdXQpOworCQkJc3RhdGUtPnN0YXRlID0gRkVfT0FVVEhfQkVBUkVSX1NFTlQ7CisK KwkJCWJyZWFrOworCisJCWNhc2UgRkVfT0FVVEhfQkVBUkVSX1NFTlQ6CisJCQlpZiAoZmluYWwp CisJCQl7CisJCQkJLyogVE9ETzogZW5zdXJlIHRoZXJlIGlzIG5vIG1lc3NhZ2UgY29udGVudCBo ZXJlLiAqLworCQkJCSpkb25lID0gdHJ1ZTsKKwkJCQkqc3VjY2VzcyA9IHRydWU7CisKKwkJCQli cmVhazsKKwkJCX0KKworCQkJLyoKKwkJCSAqIEVycm9yIG1lc3NhZ2Ugc2VudCBieSB0aGUgc2Vy dmVyLgorCQkJICovCisJCQlpZiAoIWhhbmRsZV9vYXV0aF9zYXNsX2Vycm9yKGNvbm4sIGlucHV0 LCBpbnB1dGxlbikpCisJCQkJZ290byBlcnJvcjsKKworCQkJLyoKKwkJCSAqIFJlc3BvbmQgd2l0 aCB0aGUgcmVxdWlyZWQgZHVtbXkgbWVzc2FnZSAoUkZDIDc2MjgsIHNlYy4gMy4yLjMpLgorCQkJ ICovCisJCQkqb3V0cHV0ID0gc3RyZHVwKGt2c2VwKTsKKwkJCSpvdXRwdXRsZW4gPSBzdHJsZW4o Km91dHB1dCk7IC8qID09IDEgKi8KKworCQkJc3RhdGUtPnN0YXRlID0gRkVfT0FVVEhfU0VSVkVS X0VSUk9SOworCQkJYnJlYWs7CisKKwkJY2FzZSBGRV9PQVVUSF9TRVJWRVJfRVJST1I6CisJCQkv KgorCQkJICogQWZ0ZXIgYW4gZXJyb3IsIHRoZSBzZXJ2ZXIgc2hvdWxkIHNlbmQgYW4gZXJyb3Ig cmVzcG9uc2UgdG8gZmFpbAorCQkJICogdGhlIFNBU0wgaGFuZHNoYWtlLCB3aGljaCBpcyBoYW5k bGVkIGluIGhpZ2hlciBsYXllcnMuCisJCQkgKgorCQkJICogSWYgd2UgZ2V0IGhlcmUsIHRoZSBz ZXJ2ZXIgZWl0aGVyIHNlbnQgKmFub3RoZXIqIGNoYWxsZW5nZSB3aGljaAorCQkJICogaXNuJ3Qg ZGVmaW5lZCBpbiB0aGUgUkZDLCBvciBjb21wbGV0ZWQgdGhlIGhhbmRzaGFrZSBzdWNjZXNzZnVs bHkKKwkJCSAqIGFmdGVyIHRlbGxpbmcgdXMgaXQgd2FzIGdvaW5nIHRvIGZhaWwuIE5laXRoZXIg aXMgYWNjZXB0YWJsZS4KKwkJCSAqLworCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVy cm9yTWVzc2FnZSwKKwkJCQkJCQkJIGxpYnBxX2dldHRleHQoInNlcnZlciBzZW50IGFkZGl0aW9u YWwgT0F1dGggZGF0YSBhZnRlciBlcnJvclxuIikpOworCQkJZ290byBlcnJvcjsKKworCQlkZWZh dWx0OgorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVzc2FnZSwKKwkJCQkJ CQkJIGxpYnBxX2dldHRleHQoImludmFsaWQgT0F1dGggZXhjaGFuZ2Ugc3RhdGVcbiIpKTsKKwkJ CWdvdG8gZXJyb3I7CisJfQorCisJcmV0dXJuOworCitlcnJvcjoKKwkqZG9uZSA9IHRydWU7CisJ KnN1Y2Nlc3MgPSBmYWxzZTsKK30KKworc3RhdGljIGJvb2wKK29hdXRoX2NoYW5uZWxfYm91bmQo dm9pZCAqb3BhcSkKK3sKKwkvKiBUaGlzIG1lY2hhbmlzbSBkb2VzIG5vdCBzdXBwb3J0IGNoYW5u ZWwgYmluZGluZy4gKi8KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkCitvYXV0aF9m cmVlKHZvaWQgKm9wYXEpCit7CisJZmVfb2F1dGhfc3RhdGUgKnN0YXRlID0gb3BhcTsKKworCWZy ZWUoc3RhdGUpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1z Y3JhbS5jIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1zY3JhbS5jCmluZGV4IDA0ZDU3 MDNkODkuLmYyYmEzYmNhMzcgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1 dGgtc2NyYW0uYworKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLXNjcmFtLmMKQEAg LTI0LDcgKzI0LDggQEAKIC8qIFRoZSBleHBvcnRlZCBTQ1JBTSBjYWxsYmFjayBtZWNoYW5pc20u ICovCiBzdGF0aWMgdm9pZCAqc2NyYW1faW5pdChQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnBh c3N3b3JkLAogCQkJCQkJY29uc3QgY2hhciAqc2FzbF9tZWNoYW5pc20pOwotc3RhdGljIHZvaWQg c2NyYW1fZXhjaGFuZ2Uodm9pZCAqb3BhcSwgY2hhciAqaW5wdXQsIGludCBpbnB1dGxlbiwKK3N0 YXRpYyB2b2lkIHNjcmFtX2V4Y2hhbmdlKHZvaWQgKm9wYXEsIGJvb2wgZmluYWwsCisJCQkJCQkg ICBjaGFyICppbnB1dCwgaW50IGlucHV0bGVuLAogCQkJCQkJICAgY2hhciAqKm91dHB1dCwgaW50 ICpvdXRwdXRsZW4sCiAJCQkJCQkgICBib29sICpkb25lLCBib29sICpzdWNjZXNzKTsKIHN0YXRp YyBib29sIHNjcmFtX2NoYW5uZWxfYm91bmQodm9pZCAqb3BhcSk7CkBAIC0yMDUsNyArMjA2LDgg QEAgc2NyYW1fZnJlZSh2b2lkICpvcGFxKQogICogRXhjaGFuZ2UgYSBTQ1JBTSBtZXNzYWdlIHdp dGggYmFja2VuZC4KICAqLwogc3RhdGljIHZvaWQKLXNjcmFtX2V4Y2hhbmdlKHZvaWQgKm9wYXEs IGNoYXIgKmlucHV0LCBpbnQgaW5wdXRsZW4sCitzY3JhbV9leGNoYW5nZSh2b2lkICpvcGFxLCBi b29sIGZpbmFsLAorCQkJICAgY2hhciAqaW5wdXQsIGludCBpbnB1dGxlbiwKIAkJCSAgIGNoYXIg KipvdXRwdXQsIGludCAqb3V0cHV0bGVuLAogCQkJICAgYm9vbCAqZG9uZSwgYm9vbCAqc3VjY2Vz cykKIHsKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGguYyBiL3NyYy9p bnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGguYwppbmRleCBkNWNiYWMxMDhlLi42OTBiMjNiOWQ5IDEw MDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLmMKKysrIGIvc3JjL2ludGVy ZmFjZXMvbGlicHEvZmUtYXV0aC5jCkBAIC0zOSw2ICszOSw3IEBACiAjZW5kaWYKIAogI2luY2x1 ZGUgImNvbW1vbi9tZDUuaCIKKyNpbmNsdWRlICJjb21tb24vb2F1dGgtY29tbW9uLmgiCiAjaW5j bHVkZSAiY29tbW9uL3NjcmFtLWNvbW1vbi5oIgogI2luY2x1ZGUgImZlLWF1dGguaCIKICNpbmNs dWRlICJsaWJwcS1mZS5oIgpAQCAtNDIyLDcgKzQyMyw3IEBAIHBnX1NBU0xfaW5pdChQR2Nvbm4g KmNvbm4sIGludCBwYXlsb2FkbGVuKQogCWJvb2wJCXN1Y2Nlc3M7CiAJY29uc3QgY2hhciAqc2Vs ZWN0ZWRfbWVjaGFuaXNtOwogCVBRRXhwQnVmZmVyRGF0YSBtZWNoYW5pc21fYnVmOwotCWNoYXIJ ICAgKnBhc3N3b3JkOworCWNoYXIJICAgKnBhc3N3b3JkID0gTlVMTDsKIAogCWluaXRQUUV4cEJ1 ZmZlcigmbWVjaGFuaXNtX2J1Zik7CiAKQEAgLTQ0NCw4ICs0NDUsNyBAQCBwZ19TQVNMX2luaXQo UEdjb25uICpjb25uLCBpbnQgcGF5bG9hZGxlbikKIAkvKgogCSAqIFBhcnNlIHRoZSBsaXN0IG9m IFNBU0wgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtcyBpbiB0aGUKIAkgKiBBdXRoZW50aWNhdGlv blNBU0wgbWVzc2FnZSwgYW5kIHNlbGVjdCB0aGUgYmVzdCBtZWNoYW5pc20gdGhhdCB3ZQotCSAq IHN1cHBvcnQuICBTQ1JBTS1TSEEtMjU2LVBMVVMgYW5kIFNDUkFNLVNIQS0yNTYgYXJlIHRoZSBv bmx5IG9uZXMKLQkgKiBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudCwgbGlzdGVkIGJ5IG9yZGVyIG9m IGRlY3JlYXNpbmcgaW1wb3J0YW5jZS4KKwkgKiBzdXBwb3J0LiAgTWVjaGFuaXNtcyBhcmUgbGlz dGVkIGJ5IG9yZGVyIG9mIGRlY3JlYXNpbmcgaW1wb3J0YW5jZS4KIAkgKi8KIAlzZWxlY3RlZF9t ZWNoYW5pc20gPSBOVUxMOwogCWZvciAoOzspCkBAIC00ODUsNiArNDg1LDcgQEAgcGdfU0FTTF9p bml0KFBHY29ubiAqY29ubiwgaW50IHBheWxvYWRsZW4pCiAJCQkJewogCQkJCQlzZWxlY3RlZF9t ZWNoYW5pc20gPSBTQ1JBTV9TSEFfMjU2X1BMVVNfTkFNRTsKIAkJCQkJY29ubi0+c2FzbCA9ICZw Z19zY3JhbV9tZWNoOworCQkJCQljb25uLT5wYXNzd29yZF9uZWVkZWQgPSB0cnVlOwogCQkJCX0K ICNlbHNlCiAJCQkJLyoKQEAgLTUyMiw3ICs1MjMsMTcgQEAgcGdfU0FTTF9pbml0KFBHY29ubiAq Y29ubiwgaW50IHBheWxvYWRsZW4pCiAJCXsKIAkJCXNlbGVjdGVkX21lY2hhbmlzbSA9IFNDUkFN X1NIQV8yNTZfTkFNRTsKIAkJCWNvbm4tPnNhc2wgPSAmcGdfc2NyYW1fbWVjaDsKKwkJCWNvbm4t PnBhc3N3b3JkX25lZWRlZCA9IHRydWU7CiAJCX0KKyNpZmRlZiBVU0VfT0FVVEgKKwkJZWxzZSBp ZiAoc3RyY21wKG1lY2hhbmlzbV9idWYuZGF0YSwgT0FVVEhCRUFSRVJfTkFNRSkgPT0gMCAmJgor CQkJCSFzZWxlY3RlZF9tZWNoYW5pc20pCisJCXsKKwkJCXNlbGVjdGVkX21lY2hhbmlzbSA9IE9B VVRIQkVBUkVSX05BTUU7CisJCQljb25uLT5zYXNsID0gJnBnX29hdXRoX21lY2g7CisJCQljb25u LT5wYXNzd29yZF9uZWVkZWQgPSBmYWxzZTsKKwkJfQorI2VuZGlmCiAJfQogCiAJaWYgKCFzZWxl Y3RlZF9tZWNoYW5pc20pCkBAIC01NDcsMTggKzU1OCwxOSBAQCBwZ19TQVNMX2luaXQoUEdjb25u ICpjb25uLCBpbnQgcGF5bG9hZGxlbikKIAogCS8qCiAJICogRmlyc3QsIHNlbGVjdCB0aGUgcGFz c3dvcmQgdG8gdXNlIGZvciB0aGUgZXhjaGFuZ2UsIGNvbXBsYWluaW5nIGlmCi0JICogdGhlcmUg aXNuJ3Qgb25lLiAgQ3VycmVudGx5LCBhbGwgc3VwcG9ydGVkIFNBU0wgbWVjaGFuaXNtcyByZXF1 aXJlIGEKLQkgKiBwYXNzd29yZCwgc28gd2UgY2FuIGp1c3QgZ28gYWhlYWQgaGVyZSB3aXRob3V0 IGZ1cnRoZXIgZGlzdGluY3Rpb24uCisJICogdGhlcmUgaXNuJ3Qgb25lIGFuZCB0aGUgU0FTTCBt ZWNoYW5pc20gbmVlZHMgaXQuCiAJICovCi0JY29ubi0+cGFzc3dvcmRfbmVlZGVkID0gdHJ1ZTsK LQlwYXNzd29yZCA9IGNvbm4tPmNvbm5ob3N0W2Nvbm4tPndoaWNoaG9zdF0ucGFzc3dvcmQ7Ci0J aWYgKHBhc3N3b3JkID09IE5VTEwpCi0JCXBhc3N3b3JkID0gY29ubi0+cGdwYXNzOwotCWlmIChw YXNzd29yZCA9PSBOVUxMIHx8IHBhc3N3b3JkWzBdID09ICdcMCcpCisJaWYgKGNvbm4tPnBhc3N3 b3JkX25lZWRlZCkKIAl7Ci0JCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjb25uLT5lcnJvck1lc3Nh Z2UsCi0JCQkJCQkJIFBRbm9QYXNzd29yZFN1cHBsaWVkKTsKLQkJZ290byBlcnJvcjsKKwkJcGFz c3dvcmQgPSBjb25uLT5jb25uaG9zdFtjb25uLT53aGljaGhvc3RdLnBhc3N3b3JkOworCQlpZiAo cGFzc3dvcmQgPT0gTlVMTCkKKwkJCXBhc3N3b3JkID0gY29ubi0+cGdwYXNzOworCQlpZiAocGFz c3dvcmQgPT0gTlVMTCB8fCBwYXNzd29yZFswXSA9PSAnXDAnKQorCQl7CisJCQlhcHBlbmRQUUV4 cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNzYWdlLAorCQkJCQkJCQkgUFFub1Bhc3N3b3JkU3Vw cGxpZWQpOworCQkJZ290byBlcnJvcjsKKwkJfQogCX0KIAogCUFzc2VydChjb25uLT5zYXNsKTsK QEAgLTU3Niw3ICs1ODgsNyBAQCBwZ19TQVNMX2luaXQoUEdjb25uICpjb25uLCBpbnQgcGF5bG9h ZGxlbikKIAkJZ290byBvb21fZXJyb3I7CiAKIAkvKiBHZXQgdGhlIG1lY2hhbmlzbS1zcGVjaWZp YyBJbml0aWFsIENsaWVudCBSZXNwb25zZSwgaWYgYW55ICovCi0JY29ubi0+c2FzbC0+ZXhjaGFu Z2UoY29ubi0+c2FzbF9zdGF0ZSwKKwljb25uLT5zYXNsLT5leGNoYW5nZShjb25uLT5zYXNsX3N0 YXRlLCBmYWxzZSwKIAkJCQkJCSBOVUxMLCAtMSwKIAkJCQkJCSAmaW5pdGlhbHJlc3BvbnNlLCAm aW5pdGlhbHJlc3BvbnNlbGVuLAogCQkJCQkJICZkb25lLCAmc3VjY2Vzcyk7CkBAIC02NTcsNyAr NjY5LDcgQEAgcGdfU0FTTF9jb250aW51ZShQR2Nvbm4gKmNvbm4sIGludCBwYXlsb2FkbGVuLCBi b29sIGZpbmFsKQogCS8qIEZvciBzYWZldHkgYW5kIGNvbnZlbmllbmNlLCBlbnN1cmUgdGhlIGJ1 ZmZlciBpcyBOVUxMLXRlcm1pbmF0ZWQuICovCiAJY2hhbGxlbmdlW3BheWxvYWRsZW5dID0gJ1ww JzsKIAotCWNvbm4tPnNhc2wtPmV4Y2hhbmdlKGNvbm4tPnNhc2xfc3RhdGUsCisJY29ubi0+c2Fz bC0+ZXhjaGFuZ2UoY29ubi0+c2FzbF9zdGF0ZSwgZmluYWwsCiAJCQkJCQkgY2hhbGxlbmdlLCBw YXlsb2FkbGVuLAogCQkJCQkJICZvdXRwdXQsICZvdXRwdXRsZW4sCiAJCQkJCQkgJmRvbmUsICZz dWNjZXNzKTsKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGguaCBiL3Ny Yy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGguaAppbmRleCAxZTRmY2JmZjYyLi5lZGM3NDhmZDNh IDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLmgKKysrIGIvc3JjL2lu dGVyZmFjZXMvbGlicHEvZmUtYXV0aC5oCkBAIC0yNiw0ICsyNiw3IEBAIGV4dGVybiBjaGFyICpw Z19mZV9nZXRhdXRobmFtZShQUUV4cEJ1ZmZlciBlcnJvck1lc3NhZ2UpOwogZXh0ZXJuIGNvbnN0 IHBnX3Nhc2xfbWVjaCBwZ19zY3JhbV9tZWNoOwogZXh0ZXJuIGNoYXIgKnBnX2ZlX3NjcmFtX2J1 aWxkX3NlY3JldChjb25zdCBjaGFyICpwYXNzd29yZCk7CiAKKy8qIE1lY2hhbmlzbXMgaW4gZmUt YXV0aC1vYXV0aC5jICovCitleHRlcm4gY29uc3QgcGdfc2FzbF9tZWNoIHBnX29hdXRoX21lY2g7 CisKICNlbmRpZgkJCQkJCQkvKiBGRV9BVVRIX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZh Y2VzL2xpYnBxL2ZlLWNvbm5lY3QuYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3Qu YwppbmRleCAxMGQwMDc1ODJjLi4xZDRiY2E5MTk0IDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNl cy9saWJwcS9mZS1jb25uZWN0LmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY29ubmVj dC5jCkBAIC0zNDUsNiArMzQ1LDIzIEBAIHN0YXRpYyBjb25zdCBpbnRlcm5hbFBRY29ubmluZm9P cHRpb24gUFFjb25uaW5mb09wdGlvbnNbXSA9IHsKIAkJIlRhcmdldC1TZXNzaW9uLUF0dHJzIiwg IiIsIDE1LCAvKiBzaXplb2YoInByZWZlci1zdGFuZGJ5IikgPSAxNSAqLwogCW9mZnNldG9mKHN0 cnVjdCBwZ19jb25uLCB0YXJnZXRfc2Vzc2lvbl9hdHRycyl9LAogCisJLyogT0F1dGggdjIgKi8K Kwl7Im9hdXRoX2lzc3VlciIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJPQXV0aC1Jc3N1ZXIiLCAi IiwgNDAsCisJb2Zmc2V0b2Yoc3RydWN0IHBnX2Nvbm4sIG9hdXRoX2lzc3Vlcil9LAorCisJeyJv YXV0aF9jbGllbnRfaWQiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiT0F1dGgtQ2xpZW50LUlEIiwg IiIsIDQwLAorCW9mZnNldG9mKHN0cnVjdCBwZ19jb25uLCBvYXV0aF9jbGllbnRfaWQpfSwKKwor CXsib2F1dGhfY2xpZW50X3NlY3JldCIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJPQXV0aC1DbGll bnQtU2VjcmV0IiwgIiIsIDQwLAorCW9mZnNldG9mKHN0cnVjdCBwZ19jb25uLCBvYXV0aF9jbGll bnRfc2VjcmV0KX0sCisKKwl7Im9hdXRoX3Njb3BlIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJIk9B dXRoLVNjb3BlIiwgIiIsIDE1LAorCW9mZnNldG9mKHN0cnVjdCBwZ19jb25uLCBvYXV0aF9zY29w ZSl9LAorCiAJLyogVGVybWluYXRpbmcgZW50cnkgLS0tIE1VU1QgQkUgTEFTVCAqLwogCXtOVUxM LCBOVUxMLCBOVUxMLCBOVUxMLAogCU5VTEwsIE5VTEwsIDB9CkBAIC02MDcsNiArNjI0LDcgQEAg cHFEcm9wU2VydmVyRGF0YShQR2Nvbm4gKmNvbm4pCiAJY29ubi0+d3JpdGVfZXJyX21zZyA9IE5V TEw7CiAJY29ubi0+YmVfcGlkID0gMDsKIAljb25uLT5iZV9rZXkgPSAwOworCS8qIGNvbm4tPm9h dXRoX3dhbnRfcmV0cnkgPSBmYWxzZTsgVE9ETyAqLwogfQogCiAKQEAgLTMzNTYsNiArMzM3NCwx NiBAQCBrZWVwX2dvaW5nOgkJCQkJCS8qIFdlIHdpbGwgY29tZSBiYWNrIHRvIGhlcmUgdW50aWwg dGhlcmUgaXMKIAkJCQkJLyogQ2hlY2sgdG8gc2VlIGlmIHdlIHNob3VsZCBtZW50aW9uIHBncGFz c2ZpbGUgKi8KIAkJCQkJcGdwYXNzZmlsZVdhcm5pbmcoY29ubik7CiAKKyNpZmRlZiBVU0VfT0FV VEgKKwkJCQkJaWYgKGNvbm4tPnNhc2wgPT0gJnBnX29hdXRoX21lY2gKKwkJCQkJCSYmIGNvbm4t Pm9hdXRoX3dhbnRfcmV0cnkpCisJCQkJCXsKKwkJCQkJCS8qIFRPRE86IG9ubHkgYWxsb3cgcmV0 cnkgb25jZSAqLworCQkJCQkJbmVlZF9uZXdfY29ubmVjdGlvbiA9IHRydWU7CisJCQkJCQlnb3Rv IGtlZXBfZ29pbmc7CisJCQkJCX0KKyNlbmRpZgorCiAjaWZkZWYgRU5BQkxFX0dTUwogCiAJCQkJ CS8qCkBAIC00MTMwLDYgKzQxNTgsMTYgQEAgZnJlZVBHY29ubihQR2Nvbm4gKmNvbm4pCiAJCWZy ZWUoY29ubi0+cm93QnVmKTsKIAlpZiAoY29ubi0+dGFyZ2V0X3Nlc3Npb25fYXR0cnMpCiAJCWZy ZWUoY29ubi0+dGFyZ2V0X3Nlc3Npb25fYXR0cnMpOworCWlmIChjb25uLT5vYXV0aF9pc3N1ZXIp CisJCWZyZWUoY29ubi0+b2F1dGhfaXNzdWVyKTsKKwlpZiAoY29ubi0+b2F1dGhfZGlzY292ZXJ5 X3VyaSkKKwkJZnJlZShjb25uLT5vYXV0aF9kaXNjb3ZlcnlfdXJpKTsKKwlpZiAoY29ubi0+b2F1 dGhfY2xpZW50X2lkKQorCQlmcmVlKGNvbm4tPm9hdXRoX2NsaWVudF9pZCk7CisJaWYgKGNvbm4t Pm9hdXRoX2NsaWVudF9zZWNyZXQpCisJCWZyZWUoY29ubi0+b2F1dGhfY2xpZW50X3NlY3JldCk7 CisJaWYgKGNvbm4tPm9hdXRoX3Njb3BlKQorCQlmcmVlKGNvbm4tPm9hdXRoX3Njb3BlKTsKIAl0 ZXJtUFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVzc2FnZSk7CiAJdGVybVBRRXhwQnVmZmVyKCZj b25uLT53b3JrQnVmZmVyKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvbGli cHEtaW50LmggYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1pbnQuaAppbmRleCAyNWVhYTIz MWM1Li5iNzQ5YzZjMDVkIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1p bnQuaAorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1pbnQuaApAQCAtMzQwLDcgKzM0 MCw3IEBAIHR5cGVkZWYgc3RydWN0IHBnX2Nvbm5faG9zdAogfSBwZ19jb25uX2hvc3Q7CiAKIHR5 cGVkZWYgdm9pZCAqKCpwZ19zYXNsX2luaXRfZnVuYykoUEdjb25uICosIGNvbnN0IGNoYXIgKiwg Y29uc3QgY2hhciAqKTsKLXR5cGVkZWYgdm9pZCAgKCpwZ19zYXNsX2V4Y2hhbmdlX2Z1bmMpKHZv aWQgKiwgY2hhciAqLCBpbnQsIGNoYXIgKiosIGludCAqLCBib29sICosIGJvb2wgKik7Cit0eXBl ZGVmIHZvaWQgICgqcGdfc2FzbF9leGNoYW5nZV9mdW5jKSh2b2lkICosIGJvb2wsIGNoYXIgKiwg aW50LCBjaGFyICoqLCBpbnQgKiwgYm9vbCAqLCBib29sICopOwogdHlwZWRlZiBib29sICAoKnBn X3Nhc2xfY2hhbm5lbF9ib3VuZF9mdW5jKSh2b2lkICopOwogdHlwZWRlZiB2b2lkICAoKnBnX3Nh c2xfZnJlZV9mdW5jKSh2b2lkICopOwogCkBAIC00MDYsNiArNDA2LDE0IEBAIHN0cnVjdCBwZ19j b25uCiAJY2hhcgkgICAqc3NsX21heF9wcm90b2NvbF92ZXJzaW9uOwkvKiBtYXhpbXVtIFRMUyBw cm90b2NvbCB2ZXJzaW9uICovCiAJY2hhcgkgICAqdGFyZ2V0X3Nlc3Npb25fYXR0cnM7CS8qIGRl c2lyZWQgc2Vzc2lvbiBwcm9wZXJ0aWVzICovCiAKKwkvKiBPQXV0aCB2MiAqLworCWNoYXIJICAg Km9hdXRoX2lzc3VlcjsJCQkvKiB0b2tlbiBpc3N1ZXIgVVJMICovCisJY2hhcgkgICAqb2F1dGhf ZGlzY292ZXJ5X3VyaTsJLyogVVJJIG9mIHRoZSBpc3N1ZXIncyBkaXNjb3ZlcnkgZG9jdW1lbnQg Ki8KKwljaGFyCSAgICpvYXV0aF9jbGllbnRfaWQ7CQkvKiBjbGllbnQgaWRlbnRpZmllciAqLwor CWNoYXIJICAgKm9hdXRoX2NsaWVudF9zZWNyZXQ7CS8qIGNsaWVudCBzZWNyZXQgKi8KKwljaGFy CSAgICpvYXV0aF9zY29wZTsJCQkvKiBhY2Nlc3MgdG9rZW4gc2NvcGUgKi8KKwlib29sCQlvYXV0 aF93YW50X3JldHJ5OwkJLyogc2hvdWxkIHdlIHJldHJ5IG9uIGZhaWx1cmU/ICovCisKIAkvKiBP cHRpb25hbCBmaWxlIHRvIHdyaXRlIHRyYWNlIGluZm8gdG8gKi8KIAlGSUxFCSAgICpQZmRlYnVn OwogCWludAkJCXRyYWNlRmxhZ3M7Ci0tIAoyLjI1LjEKCg== --_008_d1b467a78e0e36ed85a09adf979d04cf124a9d4bcamelvmwarecom_ Content-Type: text/x-patch; name="0005-backend-add-OAUTHBEARER-SASL-mechanism.patch" Content-Description: 0005-backend-add-OAUTHBEARER-SASL-mechanism.patch Content-Disposition: attachment; filename="0005-backend-add-OAUTHBEARER-SASL-mechanism.patch"; size=39391; creation-date="Tue, 08 Jun 2021 16:37:45 GMT"; modification-date="Tue, 08 Jun 2021 16:37:45 GMT" Content-ID: <9305EE5B20C0D64BAFD59ADA396E592A@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 RnJvbSBlZThlODVkMzQxNmYzODFiYTlkNDRmOGQ0YTY4MWU1MDA2YmQ1YjgyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8cGNoYW1waW9uQHZtd2FyZS5jb20+ CkRhdGU6IFR1ZSwgNCBNYXkgMjAyMSAxNjoyMToxMSAtMDcwMApTdWJqZWN0OiBbUEFUQ0ggNS83 XSBiYWNrZW5kOiBhZGQgT0FVVEhCRUFSRVIgU0FTTCBtZWNoYW5pc20KCkRPIE5PVCBVU0UgVEhJ UyBQUk9PRiBPRiBDT05DRVBUIElOIFBST0RVQ1RJT04uCgpJbXBsZW1lbnQgT0FVVEhCRUFSRVIg KFJGQyA3NjI4KSBvbiB0aGUgc2VydmVyIHNpZGUuIFRoaXMgYWRkcyBhIG5ldwphdXRoIG1ldGhv ZCwgb2F1dGgsIHRvIHBnX2hiYS4KCkJlY2F1c2UgT0F1dGggaW1wbGVtZW50YXRpb25zIHZhcnkg c28gd2lsZGx5LCBhbmQgYmVhcmVyIHRva2VuCnZhbGlkYXRpb24gaXMgaGVhdmlseSBkZXBlbmRl bnQgb24gdGhlIGlzc3VpbmcgcGFydHksIGF1dGhuL3ogaXMgZG9uZSBieQpjb21tdW5pY2F0aW5n IHdpdGggYW4gZXh0ZXJuYWwgcHJvZ3JhbTogdGhlIG9hdXRoX3ZhbGlkYXRvcl9jb21tYW5kLgpU aGlzIGNvbW1hbmQgbXVzdCBkbyB0aGUgZm9sbG93aW5nOgoKMS4gUmVjZWl2ZSB0aGUgYmVhcmVy IHRva2VuIGJ5IHJlYWRpbmcgaXRzIGNvbnRlbnRzIGZyb20gYSBmaWxlCiAgIGRlc2NyaXB0b3Ig cGFzc2VkIGZyb20gdGhlIHNlcnZlci4gKFRoZSBudW1lcmljIHZhbHVlIG9mIHRoaXMKICAgZGVz Y3JpcHRvciBtYXkgYmUgaW5zZXJ0ZWQgaW50byB0aGUgb2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQg dXNpbmcgdGhlCiAgICVmIHNwZWNpZmllci4pCgogICBUaGlzIE1VU1QgYmUgdGhlIGZpcnN0IGFj dGlvbiB0aGUgY29tbWFuZCBwZXJmb3Jtcy4gVGhlIHNlcnZlciB3aWxsCiAgIG5vdCBiZWdpbiBy ZWFkaW5nIHN0ZG91dCBmcm9tIHRoZSBjb21tYW5kIHVudGlsIHRoZSB0b2tlbiBoYXMgYmVlbgog ICByZWFkIGluIGZ1bGwsIHNvIGlmIHRoZSBjb21tYW5kIHRyaWVzIHRvIHByaW50IGFueXRoaW5n IGFuZCBoaXRzIGEKICAgYnVmZmVyIGxpbWl0LCB0aGUgYmFja2VuZCB3aWxsIGRlYWRsb2NrIGFu ZCB0aW1lIG91dC4KCjIuIFZhbGlkYXRlIHRoZSBiZWFyZXIgdG9rZW4uIFRoZSBjb3JyZWN0IHdh eSB0byBkbyB0aGlzIGRlcGVuZHMgb24gdGhlCiAgIGlzc3VlciwgYnV0IGl0IGdlbmVyYWxseSBp bnZvbHZlcyBlaXRoZXIgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zIHRvCiAgIHByb3ZlIHRoYXQg dGhlIHRva2VuIHdhcyBpc3N1ZWQgYnkgYSB0cnVzdGVkIHBhcnR5LCBvciB0aGUKICAgcHJlc2Vu dGF0aW9uIG9mIHRoZSBiZWFyZXIgdG9rZW4gdG8gc29tZSBvdGhlciBwYXJ0eSBzbyB0aGF0IF9p dF8gY2FuCiAgIHBlcmZvcm0gdmFsaWRhdGlvbi4KCiAgIFRoZSBjb21tYW5kIE1VU1QgbWFpbnRh aW4gY29uZmlkZW50aWFsaXR5IG9mIHRoZSBiZWFyZXIgdG9rZW4sIHNpbmNlCiAgIGluIG1vc3Qg Y2FzZXMgaXQgY2FuIGJlIHVzZWQganVzdCBsaWtlIGEgcGFzc3dvcmQuIChUaGVyZSBhcmUgd2F5 cyB0bwogICBjcnlwdG9ncmFwaGljYWxseSBiaW5kIHRva2VucyB0byBjbGllbnQgY2VydGlmaWNh dGVzLCBidXQgdGhleSBhcmUKICAgd2F5IGJleW9uZCB0aGUgc2NvcGUgb2YgdGhpcyBjb21taXQg bWVzc2FnZS4pCgogICBJZiB0aGUgdG9rZW4gY2Fubm90IGJlIHZhbGlkYXRlZCwgdGhlIGNvbW1h bmQgbXVzdCBleGl0IHdpdGggYQogICBub24temVybyBzdGF0dXMuIEZ1cnRoZXIgYXV0aGVudGlj YXRpb24vYXV0aG9yaXphdGlvbiBpcyBwb2ludGxlc3MgaWYKICAgdGhlIGJlYXJlciB0b2tlbiB3 YXNuJ3QgaXNzdWVkIGJ5IHNvbWVvbmUgeW91IHRydXN0LgoKMy4gQXV0aGVudGljYXRlIHRoZSB1 c2VyLCBhdXRob3JpemUgdGhlIHVzZXIsIG9yIGJvdGg6CgogICBhLiBUbyBhdXRoZW50aWNhdGUg dGhlIHVzZXIsIHVzZSB0aGUgYmVhcmVyIHRva2VuIHRvIHJldHJpZXZlIHNvbWUKICAgICAgdHJ1 c3RlZCBpZGVudGlmaWVyIHN0cmluZyBmb3IgdGhlIGVuZCB1c2VyLiBUaGUgZXhhY3QgcHJvY2Vz cyBmb3IKICAgICAgdGhpcyBpcywgYWdhaW4sIGlzc3Vlci1kZXBlbmRlbnQuIFRoZSBjb21tYW5k IHNob3VsZCBwcmludCB0aGUKICAgICAgYXV0aGVudGljYXRlZCBpZGVudGl0eSBzdHJpbmcgdG8g c3Rkb3V0LCBmb2xsb3dlZCBieSBhIG5ld2xpbmUuCgogICAgICBJZiB0aGUgdXNlciBjYW5ub3Qg YmUgYXV0aGVudGljYXRlZCwgdGhlIHZhbGlkYXRvciBzaG91bGQgbm90CiAgICAgIHByaW50IGFu eXRoaW5nIHRvIHN0ZG91dC4gSXQgc2hvdWxkIGFsc28gZXhpdCB3aXRoIGEgbm9uLXplcm8KICAg ICAgc3RhdHVzLCB1bmxlc3MgdGhlIHRva2VuIG1heSBiZSB1c2VkIHRvIGF1dGhvcml6ZSB0aGUg Y29ubmVjdGlvbgogICAgICB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMgKHNlZSBiZWxvdykuCgog ICAgICBPbiBhIHN1Y2Nlc3MsIHRoZSBjb21tYW5kIG1heSB0aGVuIGV4aXQgd2l0aCBhIHplcm8g c3VjY2VzcyBjb2RlLgogICAgICBCeSBkZWZhdWx0LCB0aGUgc2VydmVyIHdpbGwgdGhlbiBjaGVj ayB0byBtYWtlIHN1cmUgdGhlIGlkZW50aXR5CiAgICAgIHN0cmluZyBtYXRjaGVzIHRoZSByb2xl IHRoYXQgaXMgYmVpbmcgdXNlZCAob3IgbWF0Y2hlcyBhIHVzZXJtYXAKICAgICAgZW50cnksIGlm IG9uZSBpcyBpbiB1c2UpLgoKICAgYi4gVG8gb3B0aW9uYWxseSBhdXRob3JpemUgdGhlIHVzZXIs IGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIEhCQQogICAgICBvcHRpb24gdHJ1c3RfdmFsaWRhdG9y X2F1dGh6PTEgKHNlZSBiZWxvdyksIHRoZSB2YWxpZGF0b3Igc2ltcGx5CiAgICAgIHJldHVybnMg YSB6ZXJvIGV4aXQgY29kZSBpZiB0aGUgY2xpZW50IHNob3VsZCBiZSBhbGxvd2VkIHRvCiAgICAg IGNvbm5lY3Qgd2l0aCBpdHMgcHJlc2VudGVkIHJvbGUgKHdoaWNoIGNhbiBiZSBwYXNzZWQgdG8g dGhlCiAgICAgIGNvbW1hbmQgdXNpbmcgdGhlICVyIHNwZWNpZmllciksIG9yIGEgbm9uLXplcm8g Y29kZSBvdGhlcndpc2UuCgogICAgICBUaGUgaGFyZCBwYXJ0IGlzIGluIGRldGVybWluaW5nIHdo ZXRoZXIgdGhlIGdpdmVuIHRva2VuIHRydWx5CiAgICAgIGF1dGhvcml6ZXMgdGhlIGNsaWVudCB0 byB1c2UgdGhlIGdpdmVuIHJvbGUsIHdoaWNoIG11c3QKICAgICAgdW5mb3J0dW5hdGVseSBiZSBs ZWZ0IGFzIGFuIGV4ZXJjaXNlIHRvIHRoZSByZWFkZXIuCgogICAgICBUaGlzIG9idmlvdXNseSBy ZXF1aXJlcyBzb21lIGNhcmUsIGFzIGEgcG9vcmx5IGltcGxlbWVudGVkIHRva2VuCiAgICAgIHZh bGlkYXRvciBtYXkgc2lsZW50bHkgb3BlbiB0aGUgZW50aXJlIGRhdGFiYXNlIHRvIGFueW9uZSB3 aXRoIGEKICAgICAgYmVhcmVyIHRva2VuLiBCdXQgaXQgbWF5IGJlIGEgbW9yZSBwb3J0YWJsZSBh cHByb2FjaCwgc2luY2UgT0F1dGgKICAgICAgaXMgZGVzaWduZWQgYXMgYW4gYXV0aG9yaXphdGlv biBmcmFtZXdvcmssIG5vdCBhbiBhdXRoZW50aWNhdGlvbgogICAgICBmcmFtZXdvcmsuIEZvciBl eGFtcGxlLCB0aGUgdXNlcidzIGJlYXJlciB0b2tlbiBjb3VsZCBjYXJyeSBhbgogICAgICAiYWxs b3dfc3VwZXJ1c2VyX2FjY2VzcyIgY2xhaW0sIHdoaWNoIHdvdWxkIGF1dGhvcml6ZSBwc2V1ZG9u eW1vdXMKICAgICAgZGF0YWJhc2UgYWNjZXNzIGFzIGFueSByb2xlLiBJdCdzIHRoZW4gdXAgdG8g dGhlIE9BdXRoIHN5c3RlbQogICAgICBhZG1pbmlzdHJhdG9ycyB0byBlbnN1cmUgdGhhdCBhbGxv d19zdXBlcnVzZXJfYWNjZXNzIGlzIGRvbGVkIG91dAogICAgICBvbmx5IHRvIHRoZSBwcm9wZXIg dXNlcnMuCgogICBjLiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHVzZXIgY2FuIGJlIHN1Y2Nlc3Nm dWxseSBhdXRoZW50aWNhdGVkIGJ1dAogICAgICBpc24ndCBhdXRob3JpemVkIHRvIGNvbm5lY3Qu IEluIHRoaXMgY2FzZSwgdGhlIGNvbW1hbmQgbWF5IHByaW50CiAgICAgIHRoZSBhdXRoZW50aWNh dGVkIElEIGFuZCB0aGVuIGZhaWwgd2l0aCBhIG5vbi16ZXJvIGV4aXQgY29kZS4KICAgICAgKFRo aXMgbWFrZXMgaXQgZWFzaWVyIHRvIHNlZSB3aGF0J3MgZ29pbmcgb24gaW4gdGhlIFBvc3RncmVz CiAgICAgIGxvZ3MuKQoKNC4gVG9rZW4gdmFsaWRhdG9ycyBtYXkgb3B0aW9uYWxseSBsb2cgdG8g c3RkZXJyLiBUaGlzIHdpbGwgYmUgcHJpbnRlZAogICB2ZXJiYXRpbSBpbnRvIHRoZSBQb3N0Z3Jl cyBzZXJ2ZXIgbG9ncy4KClRoZSBvYXV0aCBtZXRob2Qgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBI QkEgb3B0aW9ucyAoYnV0IG5vdGUgdGhhdCB0d28Kb2YgdGhlbSBhcmUgbm90IG9wdGlvbmFsLCBz aW5jZSB3ZSBoYXZlIG5vIHdheSBvZiBjaG9vc2luZyBzZW5zaWJsZQpkZWZhdWx0cyk6CgogIGlz c3VlcjogUmVxdWlyZWQuIFRoZSBVUkwgb2YgdGhlIE9BdXRoIGlzc3VpbmcgcGFydHksIHdoaWNo IHRoZSBjbGllbnQKICAgICAgICAgIG11c3QgY29udGFjdCB0byByZWNlaXZlIGEgYmVhcmVyIHRv a2VuLgoKICAgICAgICAgIFNvbWUgcmVhbC13b3JsZCBleGFtcGxlcyBhcyBvZiB0aW1lIG9mIHdy aXRpbmc6CiAgICAgICAgICAtIGh0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbQogICAgICAgICAg LSBodHRwczovL2xvZ2luLm1pY3Jvc29mdC5jb20vW3RlbmFudC1pZF0vdjIuMAoKICBzY29wZTog IFJlcXVpcmVkLiBUaGUgT0F1dGggc2NvcGUocykgcmVxdWlyZWQgZm9yIHRoZSBzZXJ2ZXIgdG8K ICAgICAgICAgIGF1dGhlbnRpY2F0ZSBhbmQvb3IgYXV0aG9yaXplIHRoZSB1c2VyLiBUaGlzIGlz IGhlYXZpbHkKICAgICAgICAgIGRlcGxveW1lbnQtc3BlY2lmaWMsIGJ1dCBhIHNpbXBsZSBleGFt cGxlIGlzICJvcGVuaWQgZW1haWwiLgoKICBtYXA6ICAgIE9wdGlvbmFsLiBTcGVjaWZ5IGEgc3Rh bmRhcmQgUG9zdGdyZVNRTCB1c2VyIG1hcDsgdGhpcyB3b3JrcwogICAgICAgICAgdGhlIHNhbWUg YXMgd2l0aCBvdGhlciBhdXRoIG1ldGhvZHMgc3VjaCBhcyBwZWVyLiBJZiBhIG1hcCBpcwogICAg ICAgICAgbm90IHNwZWNpZmllZCwgdGhlIHVzZXIgSUQgcmV0dXJuZWQgYnkgdGhlIHRva2VuIHZh bGlkYXRvcgogICAgICAgICAgbXVzdCBleGFjdGx5IG1hdGNoIHRoZSByb2xlIHRoYXQncyBiZWlu ZyByZXF1ZXN0ZWQgKGJ1dCBzZWUKICAgICAgICAgIHRydXN0X3ZhbGlkYXRvcl9hdXRoeiwgYmVs b3cpLgoKICB0cnVzdF92YWxpZGF0b3JfYXV0aHo6CiAgICAgICAgICBPcHRpb25hbC4gV2hlbiBz ZXQgdG8gMSwgdGhpcyBhbGxvd3MgdGhlIHRva2VuIHZhbGlkYXRvciB0bwogICAgICAgICAgdGFr ZSBmdWxsIGNvbnRyb2wgb2YgdGhlIGF1dGhvcml6YXRpb24gcHJvY2Vzcy4gU3RhbmRhcmQgdXNl cgogICAgICAgICAgbWFwcGluZyBpcyBza2lwcGVkOiBpZiB0aGUgdmFsaWRhdG9yIGNvbW1hbmQg c3VjY2VlZHMsIHRoZQogICAgICAgICAgY2xpZW50IGlzIGFsbG93ZWQgdG8gY29ubmVjdCB1bmRl ciBpdHMgZGVzaXJlZCByb2xlIGFuZCBubwogICAgICAgICAgZnVydGhlciBjaGVja3MgYXJlIGRv bmUuCgpVbmxpa2UgdGhlIGNsaWVudCwgc2VydmVycyBzdXBwb3J0IE9BdXRoIHdpdGhvdXQgbmVl ZGluZyB0byBiZSBidWlsdAphZ2FpbnN0IGxpYmlkZGF3YyAoc2luY2UgdGhlIHJlc3BvbnNpYmls aXR5IGZvciAic3BlYWtpbmciIE9BdXRoL09JREMKY29ycmVjdGx5IGlzIGRlbGVnYXRlZCBlbnRp cmVseSB0byB0aGUgb2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQpLgoKU2V2ZXJhbCBUT0RPczoKLSBw b3J0IHRvIHBsYXRmb3JtcyBvdGhlciB0aGFuICJtb2Rlcm4gTGludXgiCi0gb3ZlcmhhdWwgdGhl IGNvbW11bmljYXRpb24gd2l0aCBvYXV0aF92YWxpZGF0b3JfY29tbWFuZCwgd2hpY2ggaXMKICBj dXJyZW50bHkgYSBiYWQgaGFjayBvbiBPcGVuUGlwZVN0cmVhbSgpCi0gaW1wbGVtZW50IG1vcmUg c2FuaXR5IGNoZWNrcyBvbiB0aGUgT0FVVEhCRUFSRVIgbWVzc2FnZSBmb3JtYXQgYW5kCiAgdG9r ZW5zIHNlbnQgYnkgdGhlIGNsaWVudAotIGltcGxlbWVudCBtb3JlIGhlbHBmdWwgaGFuZGxpbmcg b2YgSEJBIG1pc2NvbmZpZ3VyYXRpb25zCi0gcHJvcGVybHkgaW50ZXJwb2xhdGUgSlNPTiB3aGVu IGdlbmVyYXRpbmcgZXJyb3IgcmVzcG9uc2VzCi0gdXNlIGxvZ2RldGFpbCBkdXJpbmcgYXV0aCBm YWlsdXJlcwotIGRlYWwgd2l0aCByb2xlIG5hbWVzIHRoYXQgY2FuJ3QgYmUgc2FmZWx5IHBhc3Nl ZCB0byBzeXN0ZW0oKSB3aXRob3V0CiAgc2hlbGwtZXNjYXBpbmcKLSBhbGxvdyBwYXNzaW5nIHRo ZSBjb25maWd1cmVkIGlzc3VlciB0byB0aGUgb2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQsIHRvCiAg ZGVhbCB3aXRoIG11bHRpLWlzc3VlciBzZXR1cHMKLSAuLi5hbmQgbW9yZS4KLS0tCiBzcmMvYmFj a2VuZC9saWJwcS9NYWtlZmlsZSAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvbGlicHEvYXV0aC1v YXV0aC5jIHwgNzk3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tl bmQvbGlicHEvYXV0aC1zY3JhbS5jIHwgICAyICsKIHNyYy9iYWNrZW5kL2xpYnBxL2F1dGguYyAg ICAgICB8ICA0MyArLQogc3JjL2JhY2tlbmQvbGlicHEvaGJhLmMgICAgICAgIHwgIDI5ICstCiBz cmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jICAgfCAgMTIgKwogc3JjL2luY2x1ZGUvbGlicHEv YXV0aC5oICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2xpYnBxL2hiYS5oICAgICAgICB8ICAg OCArLQogc3JjL2luY2x1ZGUvbGlicHEvb2F1dGguaCAgICAgIHwgIDI0ICsKIHNyYy9pbmNsdWRl L2xpYnBxL3Nhc2wuaCAgICAgICB8ICAyNiArKwogMTAgZmlsZXMgY2hhbmdlZCwgOTE1IGluc2Vy dGlvbnMoKyksIDI4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5k L2xpYnBxL2F1dGgtb2F1dGguYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2xpYnBx L29hdXRoLmgKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9saWJwcS9NYWtlZmlsZSBiL3NyYy9i YWNrZW5kL2xpYnBxL01ha2VmaWxlCmluZGV4IDhkMWQxNmIwZmMuLjQwZjJjNTBjM2MgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2xpYnBxL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2xpYnBx L01ha2VmaWxlCkBAIC0xNSw2ICsxNSw3IEBAIGluY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9N YWtlZmlsZS5nbG9iYWwKICMgYmUtZnNzdHVicyBpcyBoZXJlIGZvciBoaXN0b3JpY2FsIHJlYXNv bnMsIHByb2JhYmx5IGJlbG9uZ3MgZWxzZXdoZXJlCiAKIE9CSlMgPSBcCisJYXV0aC1vYXV0aC5v IFwKIAlhdXRoLXNjcmFtLm8gXAogCWF1dGgubyBcCiAJYmUtZnNzdHVicy5vIFwKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGgtb2F1dGguYyBiL3NyYy9iYWNrZW5kL2xpYnBxL2F1 dGgtb2F1dGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5iMmI5ZDU2 ZTdjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvbGlicHEvYXV0aC1vYXV0aC5jCkBA IC0wLDAgKzEsNzk3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBhdXRoLW9hdXRoLmMK KyAqCSAgU2VydmVyLXNpZGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNBU0wgT0FVVEhCRUFSRVIg bWVjaGFuaXNtLgorICoKKyAqIFNlZSB0aGUgZm9sbG93aW5nIFJGQyBmb3IgbW9yZSBkZXRhaWxz OgorICogLSBSRkMgNzYyODogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc2MjgKKyAq CisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMSwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50 cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2JhY2tlbmQvbGli cHEvYXV0aC1vYXV0aC5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJw b3N0Z3Jlcy5oIgorCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKwor I2luY2x1ZGUgImNvbW1vbi9vYXV0aC1jb21tb24uaCIKKyNpbmNsdWRlICJsaWIvc3RyaW5naW5m by5oIgorI2luY2x1ZGUgImxpYnBxL2F1dGguaCIKKyNpbmNsdWRlICJsaWJwcS9oYmEuaCIKKyNp bmNsdWRlICJsaWJwcS9vYXV0aC5oIgorI2luY2x1ZGUgImxpYnBxL3Nhc2wuaCIKKyNpbmNsdWRl ICJzdG9yYWdlL2ZkLmgiCisKKy8qIEdVQyAqLworY2hhciAqb2F1dGhfdmFsaWRhdG9yX2NvbW1h bmQ7CisKK3N0YXRpYyB2b2lkICBvYXV0aF9nZXRfbWVjaGFuaXNtcyhQb3J0ICpwb3J0LCBTdHJp bmdJbmZvIGJ1Zik7CitzdGF0aWMgdm9pZCAqb2F1dGhfaW5pdChQb3J0ICpwb3J0LCBjb25zdCBj aGFyICpzZWxlY3RlZF9tZWNoLCBjb25zdCBjaGFyICpzaGFkb3dfcGFzcyk7CitzdGF0aWMgaW50 ICAgb2F1dGhfZXhjaGFuZ2Uodm9pZCAqb3BhcSwgY29uc3QgY2hhciAqaW5wdXQsIGludCBpbnB1 dGxlbiwKKwkJCQkJCQljaGFyICoqb3V0cHV0LCBpbnQgKm91dHB1dGxlbiwgY2hhciAqKmxvZ2Rl dGFpbCk7CisKKy8qIE1lY2hhbmlzbSBkZWNsYXJhdGlvbiAqLworY29uc3QgcGdfYmVfc2FzbF9t ZWNoIHBnX2JlX29hdXRoX21lY2ggPSB7CisJb2F1dGhfZ2V0X21lY2hhbmlzbXMsCisJb2F1dGhf aW5pdCwKKwlvYXV0aF9leGNoYW5nZSwKKworCVBHX01BWF9BVVRIX1RPS0VOX0xFTkdUSCwKK307 CisKKwordHlwZWRlZiBlbnVtCit7CisJT0FVVEhfU1RBVEVfSU5JVCA9IDAsCisJT0FVVEhfU1RB VEVfRVJST1IsCisJT0FVVEhfU1RBVEVfRklOSVNIRUQsCit9IG9hdXRoX3N0YXRlOworCitzdHJ1 Y3Qgb2F1dGhfY3R4Cit7CisJb2F1dGhfc3RhdGUJc3RhdGU7CisJUG9ydAkgICAqcG9ydDsKKwlj b25zdCBjaGFyICppc3N1ZXI7CisJY29uc3QgY2hhciAqc2NvcGU7Cit9OworCitzdGF0aWMgY2hh ciAqc2FuaXRpemVfY2hhcihjaGFyIGMpOworc3RhdGljIGNoYXIgKnBhcnNlX2t2cGFpcnNfZm9y X2F1dGgoY2hhciAqKmlucHV0KTsKK3N0YXRpYyB2b2lkIGdlbmVyYXRlX2Vycm9yX3Jlc3BvbnNl KHN0cnVjdCBvYXV0aF9jdHggKmN0eCwgY2hhciAqKm91dHB1dCwgaW50ICpvdXRwdXRsZW4pOwor c3RhdGljIGJvb2wgdmFsaWRhdGUoUG9ydCAqcG9ydCwgY29uc3QgY2hhciAqYXV0aCwgY2hhciAq KmxvZ2RldGFpbCk7CitzdGF0aWMgYm9vbCBydW5fdmFsaWRhdG9yX2NvbW1hbmQoUG9ydCAqcG9y dCwgY29uc3QgY2hhciAqdG9rZW4pOworc3RhdGljIGJvb2wgY2hlY2tfZXhpdChGSUxFICoqZmgs IGNvbnN0IGNoYXIgKmNvbW1hbmQpOworc3RhdGljIGJvb2wgdW5zZXRfY2xvZXhlYyhpbnQgZmQp Oworc3RhdGljIGJvb2wgdXNlcm5hbWVfb2tfZm9yX3NoZWxsKGNvbnN0IGNoYXIgKnVzZXJuYW1l KTsKKworI2RlZmluZSBLVlNFUCAweDAxCisjZGVmaW5lIEFVVEhfS0VZICJhdXRoIgorI2RlZmlu ZSBCRUFSRVJfU0NIRU1FICJCZWFyZXIgIgorCitzdGF0aWMgdm9pZAorb2F1dGhfZ2V0X21lY2hh bmlzbXMoUG9ydCAqcG9ydCwgU3RyaW5nSW5mbyBidWYpCit7CisJLyogT25seSBPQVVUSEJFQVJF UiBpcyBzdXBwb3J0ZWQuICovCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIE9BVVRIQkVB UkVSX05BTUUpOworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJ1wwJyk7Cit9CisKK3N0YXRp YyB2b2lkICoKK29hdXRoX2luaXQoUG9ydCAqcG9ydCwgY29uc3QgY2hhciAqc2VsZWN0ZWRfbWVj aCwgY29uc3QgY2hhciAqc2hhZG93X3Bhc3MpCit7CisJc3RydWN0IG9hdXRoX2N0eCAqY3R4Owor CisJaWYgKHN0cmNtcChzZWxlY3RlZF9tZWNoLCBPQVVUSEJFQVJFUl9OQU1FKSkKKwkJZXJlcG9y dChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCisJCQkJ IGVycm1zZygiY2xpZW50IHNlbGVjdGVkIGFuIGludmFsaWQgU0FTTCBhdXRoZW50aWNhdGlvbiBt ZWNoYW5pc20iKSkpOworCisJY3R4ID0gcGFsbG9jMChzaXplb2YoKmN0eCkpOworCisJY3R4LT5z dGF0ZSA9IE9BVVRIX1NUQVRFX0lOSVQ7CisJY3R4LT5wb3J0ID0gcG9ydDsKKworCUFzc2VydChw b3J0LT5oYmEpOworCWN0eC0+aXNzdWVyID0gcG9ydC0+aGJhLT5vYXV0aF9pc3N1ZXI7CisJY3R4 LT5zY29wZSA9IHBvcnQtPmhiYS0+b2F1dGhfc2NvcGU7CisKKwlyZXR1cm4gY3R4OworfQorCitz dGF0aWMgaW50CitvYXV0aF9leGNoYW5nZSh2b2lkICpvcGFxLCBjb25zdCBjaGFyICppbnB1dCwg aW50IGlucHV0bGVuLAorCQkJICAgY2hhciAqKm91dHB1dCwgaW50ICpvdXRwdXRsZW4sIGNoYXIg Kipsb2dkZXRhaWwpCit7CisJY2hhciAgICpwOworCWNoYXIJY2JpbmRfZmxhZzsKKwljaGFyICAg KmF1dGg7CisKKwlzdHJ1Y3Qgb2F1dGhfY3R4ICpjdHggPSBvcGFxOworCisJKm91dHB1dCA9IE5V TEw7CisJKm91dHB1dGxlbiA9IC0xOworCisJLyoKKwkgKiBJZiB0aGUgY2xpZW50IGRpZG4ndCBp bmNsdWRlIGFuICJJbml0aWFsIENsaWVudCBSZXNwb25zZSIgaW4gdGhlCisJICogU0FTTEluaXRp YWxSZXNwb25zZSBtZXNzYWdlLCBzZW5kIGFuIGVtcHR5IGNoYWxsZW5nZSwgdG8gd2hpY2ggdGhl CisJICogY2xpZW50IHdpbGwgcmVzcG9uZCB3aXRoIHRoZSBzYW1lIGRhdGEgdGhhdCB1c3VhbGx5 IGNvbWVzIGluIHRoZQorCSAqIEluaXRpYWwgQ2xpZW50IFJlc3BvbnNlLgorCSAqLworCWlmIChp bnB1dCA9PSBOVUxMKQorCXsKKwkJQXNzZXJ0KGN0eC0+c3RhdGUgPT0gT0FVVEhfU1RBVEVfSU5J VCk7CisKKwkJKm91dHB1dCA9IHBzdHJkdXAoIiIpOworCQkqb3V0cHV0bGVuID0gMDsKKwkJcmV0 dXJuIFNBU0xfRVhDSEFOR0VfQ09OVElOVUU7CisJfQorCisJLyoKKwkgKiBDaGVjayB0aGF0IHRo ZSBpbnB1dCBsZW5ndGggYWdyZWVzIHdpdGggdGhlIHN0cmluZyBsZW5ndGggb2YgdGhlIGlucHV0 LgorCSAqLworCWlmIChpbnB1dGxlbiA9PSAwKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJj b2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKKwkJCQkgZXJybXNnKCJtYWxmb3JtZWQg T0FVVEhCRUFSRVIgbWVzc2FnZSIpLAorCQkJCSBlcnJkZXRhaWwoIlRoZSBtZXNzYWdlIGlzIGVt cHR5LiIpKSk7CisJaWYgKGlucHV0bGVuICE9IHN0cmxlbihpbnB1dCkpCisJCWVyZXBvcnQoRVJS T1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAorCQkJCSBlcnJt c2coIm1hbGZvcm1lZCBPQVVUSEJFQVJFUiBtZXNzYWdlIiksCisJCQkJIGVycmRldGFpbCgiTWVz c2FnZSBsZW5ndGggZG9lcyBub3QgbWF0Y2ggaW5wdXQgbGVuZ3RoLiIpKSk7CisKKwlzd2l0Y2gg KGN0eC0+c3RhdGUpCisJeworCQljYXNlIE9BVVRIX1NUQVRFX0lOSVQ6CisJCQkvKiBIYW5kbGUg dGhpcyBjYXNlIGJlbG93LiAqLworCQkJYnJlYWs7CisKKwkJY2FzZSBPQVVUSF9TVEFURV9FUlJP UjoKKwkJCS8qCisJCQkgKiBPbmx5IG9uZSByZXNwb25zZSBpcyB2YWxpZCBmb3IgdGhlIGNsaWVu dCBkdXJpbmcgYXV0aGVudGljYXRpb24KKwkJCSAqIGZhaWx1cmU6IGEgc2luZ2xlIGt2c2VwLgor CQkJICovCisJCQlpZiAoaW5wdXRsZW4gIT0gMSB8fCAqaW5wdXQgIT0gS1ZTRVApCisJCQkJZXJl cG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwK KwkJCQkJCSBlcnJtc2coIm1hbGZvcm1lZCBPQVVUSEJFQVJFUiBtZXNzYWdlIiksCisJCQkJCQkg ZXJyZGV0YWlsKCJDbGllbnQgZGlkIG5vdCBzZW5kIGEga3ZzZXAgcmVzcG9uc2UuIikpKTsKKwor CQkJLyogVGhlIChmYWlsZWQpIGhhbmRzaGFrZSBpcyBub3cgY29tcGxldGUuICovCisJCQljdHgt PnN0YXRlID0gT0FVVEhfU1RBVEVfRklOSVNIRUQ7CisJCQlyZXR1cm4gU0FTTF9FWENIQU5HRV9G QUlMVVJFOworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBPQVVUSEJFQVJF UiBleGNoYW5nZSBzdGF0ZSIpOworCQkJcmV0dXJuIFNBU0xfRVhDSEFOR0VfRkFJTFVSRTsKKwl9 CisKKwkvKiBIYW5kbGUgdGhlIGNsaWVudCdzIGluaXRpYWwgbWVzc2FnZS4gKi8KKwlwID0gc3Ry ZHVwKGlucHV0KTsKKworCS8qCisJICogT0FVVEhCRUFSRVIgZG9lcyBub3QgY3VycmVudGx5IGRl ZmluZSBhIGNoYW5uZWwgYmluZGluZyAoc28gdGhlcmUgaXMgbm8KKwkgKiBPQVVUSEJFQVJFUi1Q TFVTLCBhbmQgd2UgZG8gbm90IGFjY2VwdCBhICdwJyBzcGVjaWZpZXIpLiBXZSBhY2NlcHQgYSAn eScKKwkgKiBzcGVjaWZpZXIgcHVyZWx5IGZvciB0aGUgcmVtb3RlIGNoYW5jZSB0aGF0IGEgZnV0 dXJlIHNwZWNpZmljYXRpb24gY291bGQKKwkgKiBkZWZpbmUgb25lOyB0aGVuIGZ1dHVyZSBjbGll bnRzIGNhbiBzdGlsbCBpbnRlcm9wZXJhdGUgd2l0aCB0aGlzIHNlcnZlcgorCSAqIGltcGxlbWVu dGF0aW9uLiAnbicgaXMgdGhlIGV4cGVjdGVkIGNhc2UuCisJICovCisJY2JpbmRfZmxhZyA9ICpw OworCXN3aXRjaCAoY2JpbmRfZmxhZykKKwl7CisJCWNhc2UgJ3AnOgorCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAorCQkJCQkgZXJy bXNnKCJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIpLAorCQkJCQkgZXJyZGV0YWlsKCJU aGUgc2VydmVyIGRvZXMgbm90IHN1cHBvcnQgY2hhbm5lbCBiaW5kaW5nIGZvciBPQXV0aCwgYnV0 IHRoZSBjbGllbnQgbWVzc2FnZSBpbmNsdWRlcyBjaGFubmVsIGJpbmRpbmcgZGF0YS4iKSkpOwor CQkJYnJlYWs7CisKKwkJY2FzZSAneSc6IC8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlICduJzoK KwkJCXArKzsKKwkJCWlmICgqcCAhPSAnLCcpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShl cnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKKwkJCQkJCSBlcnJtc2coIm1hbGZv cm1lZCBPQVVUSEJFQVJFUiBtZXNzYWdlIiksCisJCQkJCQkgZXJyZGV0YWlsKCJDb21tYSBleHBl Y3RlZCwgYnV0IGZvdW5kIGNoYXJhY3RlciBcIiVzXCIuIiwKKwkJCQkJCQkJICAgc2FuaXRpemVf Y2hhcigqcCkpKSk7CisJCQlwKys7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAorCQkJ CQkgZXJybXNnKCJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIpLAorCQkJCQkgZXJyZGV0 YWlsKCJVbmV4cGVjdGVkIGNoYW5uZWwtYmluZGluZyBmbGFnIFwiJXNcIi4iLAorCQkJCQkJCSAg IHNhbml0aXplX2NoYXIoY2JpbmRfZmxhZykpKSk7CisJfQorCisJLyoKKwkgKiBGb3JiaWQgb3B0 aW9uYWwgYXV0aHppZCAoYXV0aG9yaXphdGlvbiBpZGVudGl0eSkuICBXZSBkb24ndCBzdXBwb3J0 IGl0LgorCSAqLworCWlmICgqcCA9PSAnYScpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNv ZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCSBlcnJtc2coImNsaWVudCB1 c2VzIGF1dGhvcml6YXRpb24gaWRlbnRpdHksIGJ1dCBpdCBpcyBub3Qgc3VwcG9ydGVkIikpKTsK KwlpZiAoKnAgIT0gJywnKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVf UFJPVE9DT0xfVklPTEFUSU9OKSwKKwkJCQkgZXJybXNnKCJtYWxmb3JtZWQgT0FVVEhCRUFSRVIg bWVzc2FnZSIpLAorCQkJCSBlcnJkZXRhaWwoIlVuZXhwZWN0ZWQgYXR0cmlidXRlIFwiJXNcIiBp biBjbGllbnQtZmlyc3QtbWVzc2FnZS4iLAorCQkJCQkJICAgc2FuaXRpemVfY2hhcigqcCkpKSk7 CisJcCsrOworCisJLyogQWxsIHJlbWFpbmluZyBmaWVsZHMgYXJlIHNlcGFyYXRlZCBieSB0aGUg UkZDJ3Mga3ZzZXAgKFx4MDEpLiAqLworCWlmICgqcCAhPSBLVlNFUCkKKwkJZXJlcG9ydChFUlJP UiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCisJCQkJIGVycm1z ZygibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiKSwKKwkJCQkgZXJyZGV0YWlsKCJLZXkt dmFsdWUgc2VwYXJhdG9yIGV4cGVjdGVkLCBidXQgZm91bmQgY2hhcmFjdGVyIFwiJXNcIi4iLAor CQkJCQkJICAgc2FuaXRpemVfY2hhcigqcCkpKSk7CisJcCsrOworCisJYXV0aCA9IHBhcnNlX2t2 cGFpcnNfZm9yX2F1dGgoJnApOworCWlmICghYXV0aCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQko ZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCisJCQkJIGVycm1zZygibWFsZm9y bWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiKSwKKwkJCQkgZXJyZGV0YWlsKCJNZXNzYWdlIGRvZXMg bm90IGNvbnRhaW4gYW4gYXV0aCB2YWx1ZS4iKSkpOworCisJLyogV2Ugc2hvdWxkIGJlIGF0IHRo ZSBlbmQgb2Ygb3VyIG1lc3NhZ2UuICovCisJaWYgKCpwKQorCQllcmVwb3J0KEVSUk9SLAorCQkJ CShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKKwkJCQkgZXJybXNnKCJtYWxm b3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIpLAorCQkJCSBlcnJkZXRhaWwoIk1lc3NhZ2UgY29u dGFpbnMgYWRkaXRpb25hbCBkYXRhIGFmdGVyIHRoZSBmaW5hbCB0ZXJtaW5hdG9yLiIpKSk7CisK KwlpZiAoIXZhbGlkYXRlKGN0eC0+cG9ydCwgYXV0aCwgbG9nZGV0YWlsKSkKKwl7CisJCWdlbmVy YXRlX2Vycm9yX3Jlc3BvbnNlKGN0eCwgb3V0cHV0LCBvdXRwdXRsZW4pOworCisJCWN0eC0+c3Rh dGUgPSBPQVVUSF9TVEFURV9FUlJPUjsKKwkJcmV0dXJuIFNBU0xfRVhDSEFOR0VfQ09OVElOVUU7 CisJfQorCisJY3R4LT5zdGF0ZSA9IE9BVVRIX1NUQVRFX0ZJTklTSEVEOworCXJldHVybiBTQVNM X0VYQ0hBTkdFX1NVQ0NFU1M7Cit9CisKKy8qCisgKiBDb252ZXJ0IGFuIGFyYml0cmFyeSBieXRl IHRvIHByaW50YWJsZSBmb3JtLiAgRm9yIGVycm9yIG1lc3NhZ2VzLgorICoKKyAqIElmIGl0J3Mg YSBwcmludGFibGUgQVNDSUkgY2hhcmFjdGVyLCBwcmludCBpdCBhcyBhIHNpbmdsZSBjaGFyYWN0 ZXIuCisgKiBvdGhlcndpc2UsIHByaW50IGl0IGluIGhleC4KKyAqCisgKiBUaGUgcmV0dXJuZWQg cG9pbnRlciBwb2ludHMgdG8gYSBzdGF0aWMgYnVmZmVyLgorICovCitzdGF0aWMgY2hhciAqCitz YW5pdGl6ZV9jaGFyKGNoYXIgYykKK3sKKwlzdGF0aWMgY2hhciBidWZbNV07CisKKwlpZiAoYyA+ PSAweDIxICYmIGMgPD0gMHg3RSkKKwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiclYyci LCBjKTsKKwllbHNlCisJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIweCUwMngiLCAodW5z aWduZWQgY2hhcikgYyk7CisJcmV0dXJuIGJ1ZjsKK30KKworLyoKKyAqIENvbnN1bWVzIGFsbCBr dnBhaXJzIGluIGFuIE9BVVRIQkVBUkVSIGV4Y2hhbmdlIG1lc3NhZ2UuIElmIHRoZSAiYXV0aCIg a2V5IGlzCisgKiBmb3VuZCwgaXRzIHZhbHVlIGlzIHJldHVybmVkLgorICovCitzdGF0aWMgY2hh ciAqCitwYXJzZV9rdnBhaXJzX2Zvcl9hdXRoKGNoYXIgKippbnB1dCkKK3sKKwljaGFyICAgKnBv cyA9ICppbnB1dDsKKwljaGFyICAgKmF1dGggPSBOVUxMOworCisJLyoKKwkgKiBUaGUgcmVsZXZh bnQgQUJORiwgZnJvbSBTZWMuIDMuMToKKwkgKgorCSAqICAgICBrdnNlcCAgICAgICAgICA9ICV4 MDEKKwkgKiAgICAga2V5ICAgICAgICAgICAgPSAxKihBTFBIQSkKKwkgKiAgICAgdmFsdWUgICAg ICAgICAgPSAqKFZDSEFSIC8gU1AgLyBIVEFCIC8gQ1IgLyBMRiApCisJICogICAgIGt2cGFpciAg ICAgICAgID0ga2V5ICI9IiB2YWx1ZSBrdnNlcAorCSAqICAgOztnczItaGVhZGVyICAgICA9IFNl ZSBSRkMgNTgwMQorCSAqICAgICBjbGllbnQtcmVzcCAgICA9IChnczItaGVhZGVyIGt2c2VwICpr dnBhaXIga3ZzZXApIC8ga3ZzZXAKKwkgKgorCSAqIEJ5IHRoZSB0aW1lIHdlIHJlYWNoIHRoaXMg Y29kZSwgdGhlIGdzMi1oZWFkZXIgYW5kIGluaXRpYWwga3ZzZXAgaGF2ZQorCSAqIGFscmVhZHkg YmVlbiB2YWxpZGF0ZWQuIFdlIHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpcnN0IGt2 cGFpci4KKwkgKi8KKworCXdoaWxlICgqcG9zKQorCXsKKwkJY2hhciAgICplbmQ7CisJCWNoYXIg ICAqc2VwOworCQljaGFyICAgKmtleTsKKwkJY2hhciAgICp2YWx1ZTsKKworCQkvKgorCQkgKiBG aW5kIHRoZSBlbmQgb2YgdGhpcyBrdnBhaXIuIE5vdGUgdGhhdCBpbnB1dCBpcyBudWxsLXRlcm1p bmF0ZWQgYnkKKwkJICogdGhlIFNBU0wgY29kZSwgc28gdGhlIHN0cmNocigpIGlzIGJvdW5kZWQu CisJCSAqLworCQllbmQgPSBzdHJjaHIocG9zLCBLVlNFUCk7CisJCWlmICghZW5kKQorCQkJZXJl cG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAor CQkJCQkgZXJybXNnKCJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIpLAorCQkJCQkgZXJy ZGV0YWlsKCJNZXNzYWdlIGNvbnRhaW5zIGFuIHVudGVybWluYXRlZCBrZXkvdmFsdWUgcGFpci4i KSkpOworCQkqZW5kID0gJ1wwJzsKKworCQlpZiAocG9zID09IGVuZCkKKwkJeworCQkJLyogRW1w dHkga3ZwYWlyLCBzaWduaWZ5aW5nIHRoZSBlbmQgb2YgdGhlIGxpc3QuICovCisJCQkqaW5wdXQg PSBwb3MgKyAxOworCQkJcmV0dXJuIGF1dGg7CisJCX0KKworCQkvKgorCQkgKiBGaW5kIHRoZSBl bmQgb2YgdGhlIGtleSBuYW1lLgorCQkgKgorCQkgKiBUT0RPIGZ1cnRoZXIgdmFsaWRhdGUgdGhl IGtleS92YWx1ZSBncmFtbWFyPyBlbXB0eSBrZXlzLCBiYWQgY2hhcnMuLi4KKwkJICovCisJCXNl cCA9IHN0cmNocihwb3MsICc9Jyk7CisJCWlmICghc2VwKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAorCQkJCQkgZXJybXNnKCJt YWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIpLAorCQkJCQkgZXJyZGV0YWlsKCJNZXNzYWdl IGNvbnRhaW5zIGEga2V5IHdpdGhvdXQgYSB2YWx1ZS4iKSkpOworCQkqc2VwID0gJ1wwJzsKKwor CQkvKiBCb3RoIGtleSBhbmQgdmFsdWUgYXJlIG5vdyBzYWZlbHkgdGVybWluYXRlZC4gKi8KKwkJ a2V5ID0gcG9zOworCQl2YWx1ZSA9IHNlcCArIDE7CisKKwkJaWYgKCFzdHJjbXAoa2V5LCBBVVRI X0tFWSkpCisJCXsKKwkJCWlmIChhdXRoKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJy Y29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCisJCQkJCQkgZXJybXNnKCJtYWxmb3Jt ZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIpLAorCQkJCQkJIGVycmRldGFpbCgiTWVzc2FnZSBjb250 YWlucyBtdWx0aXBsZSBhdXRoIHZhbHVlcy4iKSkpOworCisJCQlhdXRoID0gdmFsdWU7CisJCX0K KwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogVGhlIFJGQyBhbHNvIGRlZmluZXMgdGhlIGhvc3Qg YW5kIHBvcnQga2V5cywgYnV0IHRoZXkgYXJlIG5vdAorCQkJICogcmVxdWlyZWQgZm9yIE9BVVRI QkVBUkVSIGFuZCB3ZSBkbyBub3QgdXNlIHRoZW0uIEFsc28sIHBlcgorCQkJICogU2VjLiAzLjEs IGFueSBrZXkvdmFsdWUgcGFpcnMgd2UgZG9uJ3QgcmVjb2duaXplIG11c3QgYmUgaWdub3JlZC4K KwkJCSAqLworCQl9CisKKwkJLyogTW92ZSB0byB0aGUgbmV4dCBwYWlyLiAqLworCQlwb3MgPSBl bmQgKyAxOworCX0KKworCWVyZXBvcnQoRVJST1IsCisJCQkoZXJyY29kZShFUlJDT0RFX1BST1RP Q09MX1ZJT0xBVElPTiksCisJCQkgZXJybXNnKCJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2Fn ZSIpLAorCQkJIGVycmRldGFpbCgiTWVzc2FnZSBkaWQgbm90IGNvbnRhaW4gYSBmaW5hbCB0ZXJt aW5hdG9yLiIpKSk7CisKKwlyZXR1cm4gTlVMTDsgLyogdW5yZWFjaGFibGUgKi8KK30KKworc3Rh dGljIHZvaWQKK2dlbmVyYXRlX2Vycm9yX3Jlc3BvbnNlKHN0cnVjdCBvYXV0aF9jdHggKmN0eCwg Y2hhciAqKm91dHB1dCwgaW50ICpvdXRwdXRsZW4pCit7CisJU3RyaW5nSW5mb0RhdGEJYnVmOwor CisJLyoKKwkgKiBUaGUgYWRtaW4gbmVlZHMgdG8gc2V0IGFuIGlzc3VlciBhbmQgc2NvcGUgZm9y IE9BdXRoIHRvIHdvcmsuIFRoZXJlJ3Mgbm90CisJICogcmVhbGx5IGEgd2F5IHRvIGhpZGUgdGhp cyBmcm9tIHRoZSB1c2VyLCBlaXRoZXIsIGJlY2F1c2Ugd2UgY2FuJ3QgY2hvb3NlCisJICogYSAi ZGVmYXVsdCIgaXNzdWVyLCBzbyBiZSBob25lc3QgaW4gdGhlIGZhaWx1cmUgbWVzc2FnZS4KKwkg KgorCSAqIFRPRE86IHNlZSBpZiB0aGVyZSdzIGEgYmV0dGVyIHBsYWNlIHRvIGZhaWwsIGVhcmxp ZXIgdGhhbiB0aGlzLgorCSAqLworCWlmICghY3R4LT5pc3N1ZXIgfHwgIWN0eC0+c2NvcGUpCisJ CWVyZXBvcnQoRkFUQUwsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlRFUk5BTF9FUlJPUiksCisJ CQkJIGVycm1zZygiT0F1dGggaXMgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQgZm9yIHRoaXMgdXNl ciIpLAorCQkJCSBlcnJkZXRhaWxfbG9nKCJUaGUgaXNzdWVyIGFuZCBzY29wZSBwYXJhbWV0ZXJz IG11c3QgYmUgc2V0IGluIHBnX2hiYS5jb25mLiIpKSk7CisKKworCWluaXRTdHJpbmdJbmZvKCZi dWYpOworCisJLyoKKwkgKiBUT0RPOiBKU09OIGVzY2FwaW5nCisJICovCisJYXBwZW5kU3RyaW5n SW5mbygmYnVmLAorCQkieyAiCisJCQkiXCJzdGF0dXNcIjogXCJpbnZhbGlkX3Rva2VuXCIsICIK KwkJCSJcIm9wZW5pZC1jb25maWd1cmF0aW9uXCI6IFwiJXMvLndlbGwta25vd24vb3BlbmlkLWNv bmZpZ3VyYXRpb25cIiwiCisJCQkiXCJzY29wZVwiOiBcIiVzXCIgIgorCQkifSIsCisJCWN0eC0+ aXNzdWVyLCBjdHgtPnNjb3BlKTsKKworCSpvdXRwdXQgPSBidWYuZGF0YTsKKwkqb3V0cHV0bGVu ID0gYnVmLmxlbjsKK30KKworc3RhdGljIGJvb2wKK3ZhbGlkYXRlKFBvcnQgKnBvcnQsIGNvbnN0 IGNoYXIgKmF1dGgsIGNoYXIgKipsb2dkZXRhaWwpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKiBj b25zdCBiNjRfc2V0ID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgorCQkJCQkJCQkJCSJB QkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIKKwkJCQkJCQkJCQkiMDEyMzQ1Njc4OS0uX34rLyI7 CisKKwljb25zdCBjaGFyICp0b2tlbjsKKwlzaXplX3QJCXNwYW47CisJaW50CQkJcmV0OworCisJ LyogVE9ETzogaGFuZGxlIGxvZ2RldGFpbCB3aGVuIHRoZSB0ZXN0IGZyYW1ld29yayBjYW4gY2hl Y2sgaXQgKi8KKworCS8qCisJICogT25seSBCZWFyZXIgdG9rZW5zIGFyZSBhY2NlcHRlZC4gVGhl IEFCTkYgaXMgZGVmaW5lZCBpbiBSRkMgNjc1MCwgU2VjLgorCSAqIDIuMToKKwkgKgorCSAqICAg ICAgYjY0dG9rZW4gICAgPSAxKiggQUxQSEEgLyBESUdJVCAvCisJICogICAgICAgICAgICAgICAg ICAgICAgICAiLSIgLyAiLiIgLyAiXyIgLyAifiIgLyAiKyIgLyAiLyIgKSAqIj0iCisJICogICAg ICBjcmVkZW50aWFscyA9ICJCZWFyZXIiIDEqU1AgYjY0dG9rZW4KKwkgKgorCSAqIFRoZSAiY3Jl ZGVudGlhbHMiIGNvbnN0cnVjdGlvbiBpcyB3aGF0IHdlIHJlY2VpdmUgaW4gb3VyIGF1dGggdmFs dWUuCisJICoKKwkgKiBTaW5jZSB0aGF0IHNwZWMgaXMgc3Vib3JkaW5hdGUgdG8gSFRUUCAoaS5l LiB0aGUgSFRUUCBBdXRob3JpemF0aW9uCisJICogaGVhZGVyIGZvcm1hdDsgUkZDIDcyMzUgU2Vj LiAyKSwgdGhlICJCZWFyZXIiIHNjaGVtZSBzdHJpbmcgbXVzdCBiZQorCSAqIGNvbXBhcmVkIGNh c2UtaW5zZW5zaXRpdmVseS4gKFRoaXMgaXMgbm90IG1lbnRpb25lZCBpbiBSRkMgNjc1MCwgYnV0 IGl0J3MKKwkgKiBwb2ludGVkIG91dCBpbiBSRkMgNzYyOCBTZWMuIDQuKQorCSAqCisJICogVE9E TzogaGFuZGxlIHRoZSBBdXRob3JpemF0aW9uIHNwZWMsIFJGQyA3MjM1IFNlYy4gMi4xLgorCSAq LworCWlmIChzdHJuY2FzZWNtcChhdXRoLCBCRUFSRVJfU0NIRU1FLCBzdHJsZW4oQkVBUkVSX1ND SEVNRSkpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBQdWxsIHRoZSBiZWFyZXIgdG9rZW4gb3V0 IG9mIHRoZSBhdXRoIHZhbHVlLiAqLworCXRva2VuID0gYXV0aCArIHN0cmxlbihCRUFSRVJfU0NI RU1FKTsKKworCS8qIFN3YWxsb3cgYW55IGFkZGl0aW9uYWwgc3BhY2VzLiAqLworCXdoaWxlICgq dG9rZW4gPT0gJyAnKQorCQl0b2tlbisrOworCisJLyoKKwkgKiBCZWZvcmUgaW52b2tpbmcgdGhl IHZhbGlkYXRvciBjb21tYW5kLCBzYW5pdHktY2hlY2sgdGhlIHRva2VuIGZvcm1hdCB0bworCSAq IGF2b2lkIGFueSBpbmplY3Rpb24gYXR0YWNrcyBsYXRlciBpbiB0aGUgY2hhaW4uIEludmFsaWQg Zm9ybWF0cyBhcmUKKwkgKiB0ZWNobmljYWxseSBhIHByb3RvY29sIHZpb2xhdGlvbiwgYnV0IGRv bid0IHJlZmxlY3QgYW55IGluZm9ybWF0aW9uIGFib3V0CisJICogdGhlIHNlbnNpdGl2ZSBCZWFy ZXIgdG9rZW4gYmFjayB0byB0aGUgY2xpZW50OyBsb2cgYXQgQ09NTUVSUk9SIGluc3RlYWQuCisJ ICovCisKKwkvKiBUb2tlbnMgbXVzdCBub3QgYmUgZW1wdHkuICovCisJaWYgKCEqdG9rZW4pCisJ eworCQllcmVwb3J0KENPTU1FUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJ T0xBVElPTiksCisJCQkJIGVycm1zZygibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiKSwK KwkJCQkgZXJyZGV0YWlsKCJCZWFyZXIgdG9rZW4gaXMgZW1wdHkuIikpKTsKKwkJcmV0dXJuIGZh bHNlOworCX0KKworCS8qCisJICogTWFrZSBzdXJlIHRoZSB0b2tlbiBjb250YWlucyBvbmx5IGFs bG93ZWQgY2hhcmFjdGVycy4gVG9rZW5zIG1heSBlbmQgd2l0aAorCSAqIGFueSBudW1iZXIgb2Yg Jz0nIGNoYXJhY3RlcnMuCisJICovCisJc3BhbiA9IHN0cnNwbih0b2tlbiwgYjY0X3NldCk7CisJ d2hpbGUgKHRva2VuW3NwYW5dID09ICc9JykKKwkJc3BhbisrOworCisJaWYgKHRva2VuW3NwYW5d ICE9ICdcMCcpCisJeworCQkvKgorCQkgKiBUaGlzIGVycm9yIG1lc3NhZ2UgY291bGQgYmUgbW9y ZSBoZWxwZnVsIGJ5IHByaW50aW5nIHRoZSBwcm9ibGVtYXRpYworCQkgKiBjaGFyYWN0ZXIocyks IGJ1dCB0aGF0J2QgYmUgYSBiaXQgbGlrZSBwcmludGluZyBhIHBpZWNlIG9mIHNvbWVvbmUncwor CQkgKiBwYXNzd29yZCBpbnRvIHRoZSBsb2dzLgorCQkgKi8KKwkJZXJlcG9ydChDT01NRVJST1Is CisJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAorCQkJCSBlcnJtc2co Im1hbGZvcm1lZCBPQVVUSEJFQVJFUiBtZXNzYWdlIiksCisJCQkJIGVycmRldGFpbCgiQmVhcmVy IHRva2VuIGlzIG5vdCBpbiB0aGUgY29ycmVjdCBmb3JtYXQuIikpKTsKKwkJcmV0dXJuIGZhbHNl OworCX0KKworCS8qIEhhdmUgdGhlIHZhbGlkYXRvciBjaGVjayB0aGUgdG9rZW4uICovCisJaWYg KCFydW5fdmFsaWRhdG9yX2NvbW1hbmQocG9ydCwgdG9rZW4pKQorCQlyZXR1cm4gZmFsc2U7CisK KwlpZiAocG9ydC0+aGJhLT5vYXV0aF9za2lwX3VzZXJtYXApCisJeworCQkvKgorCQkgKiBJZiB0 aGUgdmFsaWRhdG9yIGlzIG91ciBhdXRob3JpemF0aW9uIGF1dGhvcml0eSwgd2UncmUgZG9uZS4K KwkJICogQXV0aGVudGljYXRpb24gbWF5IG9yIG1heSBub3QgaGF2ZSBiZWVuIHBlcmZvcm1lZCBk ZXBlbmRpbmcgb24gdGhlCisJCSAqIHZhbGlkYXRvciBpbXBsZW1lbnRhdGlvbjsgYWxsIHRoYXQg bWF0dGVycyBpcyB0aGF0IHRoZSB2YWxpZGF0b3Igc2F5cworCQkgKiB0aGUgdXNlciBjYW4gbG9n IGluIHdpdGggdGhlIHRhcmdldCByb2xlLgorCQkgKi8KKwkJcmV0dXJuIHRydWU7CisJfQorCisJ LyogTWFrZSBzdXJlIHRoZSB2YWxpZGF0b3IgYXV0aGVudGljYXRlZCB0aGUgdXNlci4gKi8KKwlp ZiAoIXBvcnQtPmF1dGhuX2lkKQorCXsKKwkJLyogVE9ETzogdXNlIGxvZ2RldGFpbDsgcmVkdWNl IG1lc3NhZ2UgZHVwbGljYXRpb24gKi8KKwkJZXJlcG9ydChMT0csCisJCQkJKGVycm1zZygiT0F1 dGggYmVhcmVyIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCBmb3IgdXNlciBcIiVzXCI6IHZhbGlkYXRv ciBwcm92aWRlZCBubyBpZGVudGl0eSIsCisJCQkJCQlwb3J0LT51c2VyX25hbWUpKSk7CisJCXJl dHVybiBmYWxzZTsKKwl9CisKKwkvKiBGaW5hbGx5LCBjaGVjayB0aGUgdXNlciBtYXAuICovCisJ cmV0ID0gY2hlY2tfdXNlcm1hcChwb3J0LT5oYmEtPnVzZXJtYXAsIHBvcnQtPnVzZXJfbmFtZSwg cG9ydC0+YXV0aG5faWQsCisJCQkJCQlmYWxzZSk7CisJcmV0dXJuIChyZXQgPT0gU1RBVFVTX09L KTsKK30KKworc3RhdGljIGJvb2wKK3J1bl92YWxpZGF0b3JfY29tbWFuZChQb3J0ICpwb3J0LCBj b25zdCBjaGFyICp0b2tlbikKK3sKKwlib29sCQlzdWNjZXNzID0gZmFsc2U7CisJaW50CQkJcmM7 CisJaW50CQkJcGlwZWZkWzJdOworCWludAkJCXJmZCA9IC0xOworCWludAkJCXdmZCA9IC0xOwor CisJU3RyaW5nSW5mb0RhdGEgY29tbWFuZCA9IHsgMCB9OworCWNoYXIJICAgKnA7CisJRklMRQkg ICAqZmggPSBOVUxMOworCisJc3NpemVfdAkJd3JpdHRlbjsKKwljaGFyCSAgICpsaW5lID0gTlVM TDsKKwlzaXplX3QJCXNpemUgPSAwOworCXNzaXplX3QJCWxlbjsKKworCUFzc2VydChvYXV0aF92 YWxpZGF0b3JfY29tbWFuZCk7CisKKwlpZiAoIW9hdXRoX3ZhbGlkYXRvcl9jb21tYW5kWzBdKQor CXsKKwkJZXJlcG9ydChDT01NRVJST1IsCisJCQkJKGVycm1zZygib2F1dGhfdmFsaWRhdG9yX2Nv bW1hbmQgaXMgbm90IHNldCIpLAorCQkJCSBlcnJoaW50KCJUbyBhbGxvdyBPQXV0aCBhdXRoZW50 aWNhdGVkIGNvbm5lY3Rpb25zLCBzZXQgIgorCQkJCQkJICJvYXV0aF92YWxpZGF0b3JfY29tbWFu ZCBpbiBwb3N0Z3Jlc3FsLmNvbmYuIikpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJ ICogU2luY2UgcG9wZW4oKSBpcyB1bmlkaXJlY3Rpb25hbCwgb3BlbiB1cCBhIHBpcGUgZm9yIHRo ZSBvdGhlciBkaXJlY3Rpb24uCisJICogVXNlIENMT0VYRUMgdG8gZW5zdXJlIHRoYXQgb3VyIHdy aXRlIGVuZCBkb2Vzbid0IGFjY2lkZW50YWxseSBnZXQgY29waWVkCisJICogaW50byBjaGlsZCBw cm9jZXNzZXMsIHdoaWNoIHdvdWxkIHByZXZlbnQgdXMgZnJvbSBjbG9zaW5nIGl0IGNsZWFubHku CisJICoKKwkgKiBYWFggdGhpcyBpcyB1Z2x5LiBXZSBzaG91bGQganVzdCByZWFkIGZyb20gdGhl IGNoaWxkIHByb2Nlc3MncyBzdGRvdXQsCisJICogYnV0IHRoYXQncyBhIGxvdCBtb3JlIGNvZGUu CisJICogWFhYIGJ5IGJ5cGFzc2luZyB0aGUgcG9wZW4gQVBJLCB3ZSBvcGVuIHRoZSBwb3RlbnRp YWwgb2YgcHJvY2VzcworCSAqIGRlYWRsb2NrLiBDbGVhcmx5IGRvY3VtZW50IGNoaWxkIHByb2Nl c3MgcmVxdWlyZW1lbnRzIChpLmUuIHRoZSBjaGlsZAorCSAqIE1VU1QgcmVhZCBhbGwgZGF0YSBv ZmYgb2YgdGhlIHBpcGUgYmVmb3JlIHdyaXRpbmcgYW55dGhpbmcpLgorCSAqIFRPRE86IHBvcnQg dG8gV2luZG93cyB1c2luZyBfcGlwZSgpLgorCSAqLworCXJjID0gcGlwZTIocGlwZWZkLCBPX0NM T0VYRUMpOworCWlmIChyYyA8IDApCisJeworCQllcmVwb3J0KENPTU1FUlJPUiwKKwkJCQkoZXJy Y29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3QgY3JlYXRlIGNo aWxkIHBpcGU6ICVtIikpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJmZCA9IHBpcGVmZFsw XTsKKwl3ZmQgPSBwaXBlZmRbMV07CisKKwkvKiBBbGxvdyB0aGUgcmVhZCBwaXBlIGJlIHBhc3Nl ZCB0byB0aGUgY2hpbGQuICovCisJaWYgKCF1bnNldF9jbG9leGVjKHJmZCkpCisJeworCQkvKiBl cnJvciBtZXNzYWdlIHdhcyBhbHJlYWR5IGxvZ2dlZCAqLworCQlnb3RvIGNsZWFudXA7CisJfQor CisJLyoKKwkgKiBDb25zdHJ1Y3QgdGhlIGNvbW1hbmQsIHN1YnN0aXR1dGluZyBhbnkgcmVjb2du aXplZCAlLXNwZWNpZmllcnM6CisJICoKKwkgKiAgICVmOiB0aGUgZmlsZSBkZXNjcmlwdG9yIG9m IHRoZSBpbnB1dCBwaXBlCisJICogICAlcjogdGhlIHJvbGUgdGhhdCB0aGUgY2xpZW50IHdhbnRz IHRvIGFzc3VtZSAocG9ydC0+dXNlcl9uYW1lKQorCSAqICAgJSU6IGEgbGl0ZXJhbCAnJScKKwkg Ki8KKwlpbml0U3RyaW5nSW5mbygmY29tbWFuZCk7CisKKwlmb3IgKHAgPSBvYXV0aF92YWxpZGF0 b3JfY29tbWFuZDsgKnA7IHArKykKKwl7CisJCWlmIChwWzBdID09ICclJykKKwkJeworCQkJc3dp dGNoIChwWzFdKQorCQkJeworCQkJCWNhc2UgJ2YnOgorCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZj b21tYW5kLCAiJWQiLCByZmQpOworCQkJCQlwKys7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJ3In OgorCQkJCQkvKgorCQkJCQkgKiBUT0RPOiBkZWNpZGUgaG93IHRoaXMgc3RyaW5nIHNob3VsZCBi ZSBlc2NhcGVkLiBUaGUgcm9sZQorCQkJCQkgKiBpcyBjb250cm9sbGVkIGJ5IHRoZSBjbGllbnQs IHNvIGlmIHdlIGRvbid0IGVzY2FwZSBpdCwKKwkJCQkJICogY29tbWFuZCBpbmplY3Rpb25zIGFy ZSBpbmV2aXRhYmxlLgorCQkJCQkgKgorCQkJCQkgKiBUaGlzIGlzIHByb2JhYmx5IGFuIGluZGlj YXRpb24gdGhhdCB0aGUgcm9sZSBuYW1lIG5lZWRzCisJCQkJCSAqIHRvIGJlIGNvbW11bmljYXRl ZCB0byB0aGUgdmFsaWRhdG9yIHByb2Nlc3MgaW4gc29tZSBvdGhlcgorCQkJCQkgKiB3YXkuIEZv ciB0aGlzIHByb29mIG9mIGNvbmNlcHQsIGp1c3QgYmUgaW5jcmVkaWJseSBzdHJpY3QKKwkJCQkJ ICogYWJvdXQgdGhlIGNoYXJhY3RlcnMgdGhhdCBhcmUgYWxsb3dlZCBpbiB1c2VyIG5hbWVzLgor CQkJCQkgKi8KKwkJCQkJaWYgKCF1c2VybmFtZV9va19mb3Jfc2hlbGwocG9ydC0+dXNlcl9uYW1l KSkKKwkJCQkJCWdvdG8gY2xlYW51cDsKKworCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZj b21tYW5kLCBwb3J0LT51c2VyX25hbWUpOworCQkJCQlwKys7CisJCQkJCWJyZWFrOworCQkJCWNh c2UgJyUnOgorCQkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmY29tbWFuZCwgJyUnKTsKKwkJCQkJ cCsrOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hh cigmY29tbWFuZCwgcFswXSk7CisJCQl9CisJCX0KKwkJZWxzZQorCQkJYXBwZW5kU3RyaW5nSW5m b0NoYXIoJmNvbW1hbmQsIHBbMF0pOworCX0KKworCS8qIEV4ZWN1dGUgdGhlIGNvbW1hbmQuICov CisJZmggPSBPcGVuUGlwZVN0cmVhbShjb21tYW5kLmRhdGEsICJyZSIpOworCS8qIFRPRE86IGhh bmRsZSBmYWlsdXJlcyAqLworCisJLyogV2UgZG9uJ3QgbmVlZCB0aGUgcmVhZCBlbmQgb2YgdGhl IHBpcGUgYW55bW9yZS4gKi8KKwljbG9zZShyZmQpOworCXJmZCA9IC0xOworCisJLyogR2l2ZSB0 aGUgY29tbWFuZCB0aGUgdG9rZW4gdG8gdmFsaWRhdGUuICovCisJd3JpdHRlbiA9IHdyaXRlKHdm ZCwgdG9rZW4sIHN0cmxlbih0b2tlbikpOworCWlmICh3cml0dGVuICE9IHN0cmxlbih0b2tlbikp CisJeworCQkvKiBUT0RPIG11c3QgbG9vcCBmb3Igc2hvcnQgd3JpdGVzLCBFSU5UUiBldCBhbCAq LworCQllcmVwb3J0KENPTU1FUlJPUiwKKwkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwK KwkJCQkgZXJybXNnKCJjb3VsZCBub3Qgd3JpdGUgdG9rZW4gdG8gY2hpbGQgcGlwZTogJW0iKSkp OworCQlnb3RvIGNsZWFudXA7CisJfQorCisJY2xvc2Uod2ZkKTsKKwl3ZmQgPSAtMTsKKworCS8q CisJICogUmVhZCB0aGUgY29tbWFuZCdzIHJlc3BvbnNlLgorCSAqCisJICogVE9ETzogZ2V0bGlu ZSgpIGlzIHByb2JhYmx5IHRvbyBuZXcgdG8gdXNlLCB1bmZvcnR1bmF0ZWx5LgorCSAqIFRPRE86 IGxvb3Agb3ZlciBhbGwgbGluZXMKKwkgKi8KKwlpZiAoKGxlbiA9IGdldGxpbmUoJmxpbmUsICZz aXplLCBmaCkpID49IDApCisJeworCQkvKiBUT0RPOiBmYWlsIGlmIHRoZSBhdXRobl9pZCBkb2Vz bid0IGVuZCB3aXRoIGEgbmV3bGluZSAqLworCQlpZiAobGVuID4gMCkKKwkJCWxpbmVbbGVuIC0g MV0gPSAnXDAnOworCisJCXNldF9hdXRobl9pZChwb3J0LCBsaW5lKTsKKwl9CisJZWxzZSBpZiAo ZmVycm9yKGZoKSkKKwl7CisJCWVyZXBvcnQoQ09NTUVSUk9SLAorCQkJCShlcnJjb2RlX2Zvcl9m aWxlX2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCByZWFkIGZyb20gY29tbWFuZCBc IiVzXCI6ICVtIiwKKwkJCQkJCWNvbW1hbmQuZGF0YSkpKTsKKwkJZ290byBjbGVhbnVwOworCX0K KworCS8qIE1ha2Ugc3VyZSB0aGUgY29tbWFuZCBleGl0cyBjbGVhbmx5LiAqLworCWlmICghY2hl Y2tfZXhpdCgmZmgsIGNvbW1hbmQuZGF0YSkpCisJeworCQkvKiBlcnJvciBtZXNzYWdlIGFscmVh ZHkgbG9nZ2VkICovCisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKiBEb25lLiAqLworCXN1Y2Nl c3MgPSB0cnVlOworCitjbGVhbnVwOgorCWlmIChsaW5lKQorCQlmcmVlKGxpbmUpOworCisJLyoK KwkgKiBJbiB0aGUgc3VjY2Vzc2Z1bCBjYXNlLCB0aGUgcGlwZSBmZHMgYXJlIGFscmVhZHkgY2xv c2VkLiBGb3IgdGhlIGVycm9yCisJICogY2FzZSwgYWx3YXlzIGNsb3NlIG91dCB0aGUgcGlwZSBi ZWZvcmUgd2FpdGluZyBmb3IgdGhlIGNvbW1hbmQsIHRvCisJICogcHJldmVudCBkZWFkbG9jay4K KwkgKi8KKwlpZiAocmZkID49IDApCisJCWNsb3NlKHJmZCk7CisJaWYgKHdmZCA+PSAwKQorCQlj bG9zZSh3ZmQpOworCisJaWYgKGZoKQorCXsKKwkJQXNzZXJ0KCFzdWNjZXNzKTsKKwkJY2hlY2tf ZXhpdCgmZmgsIGNvbW1hbmQuZGF0YSk7CisJfQorCisJaWYgKGNvbW1hbmQuZGF0YSkKKwkJcGZy ZWUoY29tbWFuZC5kYXRhKTsKKworCXJldHVybiBzdWNjZXNzOworfQorCitzdGF0aWMgYm9vbAor Y2hlY2tfZXhpdChGSUxFICoqZmgsIGNvbnN0IGNoYXIgKmNvbW1hbmQpCit7CisJaW50IHJjOwor CisJcmMgPSBDbG9zZVBpcGVTdHJlYW0oKmZoKTsKKwkqZmggPSBOVUxMOworCisJaWYgKHJjID09 IC0xKQorCXsKKwkJLyogcGNsb3NlKCkgaXRzZWxmIGZhaWxlZC4gKi8KKwkJZXJlcG9ydChDT01N RVJST1IsCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJIGVycm1zZygiY291 bGQgbm90IGNsb3NlIHBpcGUgdG8gY29tbWFuZCBcIiVzXCI6ICVtIiwKKwkJCQkJCWNvbW1hbmQp KSk7CisJfQorCWVsc2UgaWYgKHJjICE9IDApCisJeworCQljaGFyICpyZWFzb24gPSB3YWl0X3Jl c3VsdF90b19zdHIocmMpOworCisJCWVyZXBvcnQoQ09NTUVSUk9SLAorCQkJCShlcnJtc2coImZh aWxlZCB0byBleGVjdXRlIGNvbW1hbmQgXCIlc1wiOiAlcyIsCisJCQkJCQljb21tYW5kLCByZWFz b24pKSk7CisKKwkJcGZyZWUocmVhc29uKTsKKwl9CisKKwlyZXR1cm4gKHJjID09IDApOworfQor CitzdGF0aWMgYm9vbAordW5zZXRfY2xvZXhlYyhpbnQgZmQpCit7CisJaW50CQkJZmxhZ3M7CisJ aW50CQkJcmM7CisKKwlmbGFncyA9IGZjbnRsKGZkLCBGX0dFVEZEKTsKKwlpZiAoZmxhZ3MgPT0g LTEpCisJeworCQllcmVwb3J0KENPTU1FUlJPUiwKKwkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nl c3MoKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3QgZ2V0IGZkIGZsYWdzIGZvciBjaGlsZCBwaXBl OiAlbSIpKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyYyA9IGZjbnRsKGZkLCBGX1NFVEZE LCBmbGFncyAmIH5GRF9DTE9FWEVDKTsKKwlpZiAocmMgPCAwKQorCXsKKwkJZXJlcG9ydChDT01N RVJST1IsCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJIGVycm1zZygiY291 bGQgbm90IHVuc2V0IEZEX0NMT0VYRUMgZm9yIGNoaWxkIHBpcGU6ICVtIikpKTsKKwkJcmV0dXJu IGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCisvKgorICogWFhYIFRoaXMgc2hvdWxk IGdvIGF3YXkgZXZlbnR1YWxseSBhbmQgYmUgcmVwbGFjZWQgd2l0aCBlaXRoZXIgYSBwcm9wZXIK KyAqIGVzY2FwZSBvciBhIGRpZmZlcmVudCBzdHJhdGVneSBmb3IgY29tbXVuaWNhdGlvbiB3aXRo IHRoZSB2YWxpZGF0b3IgY29tbWFuZC4KKyAqLworc3RhdGljIGJvb2wKK3VzZXJuYW1lX29rX2Zv cl9zaGVsbChjb25zdCBjaGFyICp1c2VybmFtZSkKK3sKKwkvKiBUaGlzIHNldCBpcyBib3Jyb3dl ZCBmcm9tIGZlX3V0aWxzJyBhcHBlbmRTaGVsbFN0cmluZ05vRXJyb3IoKS4gKi8KKwlzdGF0aWMg Y29uc3QgY2hhciAqIGNvbnN0IGFsbG93ZWQgPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoi CisJCQkJCQkJCQkJIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgorCQkJCQkJCQkJCSIwMTIz NDU2Nzg5LV8uLzoiOworCXNpemVfdAlzcGFuOworCisJQXNzZXJ0KHVzZXJuYW1lICYmIHVzZXJu YW1lWzBdKTsgLyogc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGNoZWNrZWQgKi8KKworCXNwYW4g PSBzdHJzcG4odXNlcm5hbWUsIGFsbG93ZWQpOworCWlmICh1c2VybmFtZVtzcGFuXSAhPSAnXDAn KQorCXsKKwkJZXJlcG9ydChDT01NRVJST1IsCisJCQkJKGVycm1zZygiUG9zdGdyZVNRTCB1c2Vy IG5hbWUgY29udGFpbnMgdW5zYWZlIGNoYXJhY3RlcnMgYW5kIGNhbm5vdCBiZSBwYXNzZWQgdG8g dGhlIE9BdXRoIHZhbGlkYXRvciIpKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4g dHJ1ZTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGgtc2NyYW0uYyBiL3Ny Yy9iYWNrZW5kL2xpYnBxL2F1dGgtc2NyYW0uYwppbmRleCBkYjNjYTc1YTYwLi45ZTQ0ODJkYzI3 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9saWJwcS9hdXRoLXNjcmFtLmMKKysrIGIvc3JjL2Jh Y2tlbmQvbGlicHEvYXV0aC1zY3JhbS5jCkBAIC0xMTgsNiArMTE4LDggQEAgY29uc3QgcGdfYmVf c2FzbF9tZWNoIHBnX2JlX3NjcmFtX21lY2ggPSB7CiAJc2NyYW1fZ2V0X21lY2hhbmlzbXMsCiAJ c2NyYW1faW5pdCwKIAlzY3JhbV9leGNoYW5nZSwKKworCVBHX01BWF9TQVNMX01FU1NBR0VfTEVO R1RILAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGguYyBiL3Ny Yy9iYWNrZW5kL2xpYnBxL2F1dGguYwppbmRleCBlMjA3NDBhN2M1Li4zNTRjN2IwZmM4IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9saWJwcS9hdXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvbGlicHEv YXV0aC5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAibGlicHEvYXV0aC5oIgogI2luY2x1 ZGUgImxpYnBxL2NyeXB0LmgiCiAjaW5jbHVkZSAibGlicHEvbGlicHEuaCIKKyNpbmNsdWRlICJs aWJwcS9vYXV0aC5oIgogI2luY2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCiAjaW5jbHVkZSAibGli cHEvc2FzbC5oIgogI2luY2x1ZGUgImxpYnBxL3NjcmFtLmgiCkBAIC00OSw3ICs1MCw2IEBAIHN0 YXRpYyB2b2lkIHNlbmRBdXRoUmVxdWVzdChQb3J0ICpwb3J0LCBBdXRoUmVxdWVzdCBhcmVxLCBj b25zdCBjaGFyICpleHRyYWRhdGEsCiAJCQkJCQkJaW50IGV4dHJhbGVuKTsKIHN0YXRpYyB2b2lk IGF1dGhfZmFpbGVkKFBvcnQgKnBvcnQsIGludCBzdGF0dXMsIGNoYXIgKmxvZ2RldGFpbCk7CiBz dGF0aWMgY2hhciAqcmVjdl9wYXNzd29yZF9wYWNrZXQoUG9ydCAqcG9ydCk7Ci1zdGF0aWMgdm9p ZCBzZXRfYXV0aG5faWQoUG9ydCAqcG9ydCwgY29uc3QgY2hhciAqaWQpOwogCiAvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K ICAqIFNBU0wgY29tbW9uIGF1dGhlbnRpY2F0aW9uCkBAIC0yMTUsMjkgKzIxNSwxMiBAQCBzdGF0 aWMgaW50CUNoZWNrUkFESVVTQXV0aChQb3J0ICpwb3J0KTsKIHN0YXRpYyBpbnQJUGVyZm9ybVJh ZGl1c1RyYW5zYWN0aW9uKGNvbnN0IGNoYXIgKnNlcnZlciwgY29uc3QgY2hhciAqc2VjcmV0LCBj b25zdCBjaGFyICpwb3J0c3RyLCBjb25zdCBjaGFyICppZGVudGlmaWVyLCBjb25zdCBjaGFyICp1 c2VyX25hbWUsIGNvbnN0IGNoYXIgKnBhc3N3ZCk7CiAKIAotLyoKLSAqIE1heGltdW0gYWNjZXB0 ZWQgc2l6ZSBvZiBHU1MgYW5kIFNTUEkgYXV0aGVudGljYXRpb24gdG9rZW5zLgotICogV2UgYWxz byB1c2UgdGhpcyBhcyBhIGxpbWl0IG9uIG9yZGluYXJ5IHBhc3N3b3JkIHBhY2tldCBsZW5ndGhz LgotICoKLSAqIEtlcmJlcm9zIHRpY2tldHMgYXJlIHVzdWFsbHkgcXVpdGUgc21hbGwsIGJ1dCB0 aGUgVEdUcyBpc3N1ZWQgYnkgV2luZG93cwotICogZG9tYWluIGNvbnRyb2xsZXJzIGluY2x1ZGUg YW4gYXV0aG9yaXphdGlvbiBmaWVsZCBrbm93biBhcyB0aGUgUHJpdmlsZWdlCi0gKiBBdHRyaWJ1 dGUgQ2VydGlmaWNhdGUgKFBBQyksIHdoaWNoIGNvbnRhaW5zIHRoZSB1c2VyJ3MgV2luZG93cyBw ZXJtaXNzaW9ucwotICogKGdyb3VwIG1lbWJlcnNoaXBzIGV0Yy4pLiBUaGUgUEFDIGlzIGNvcGll ZCBpbnRvIGFsbCB0aWNrZXRzIG9idGFpbmVkIG9uCi0gKiB0aGUgYmFzaXMgb2YgdGhpcyBUR1Qg KGV2ZW4gdGhvc2UgaXNzdWVkIGJ5IFVuaXggcmVhbG1zIHdoaWNoIHRoZSBXaW5kb3dzCi0gKiBy ZWFsbSB0cnVzdHMpLCBhbmQgY2FuIGJlIHNldmVyYWwga0IgaW4gc2l6ZS4gVGhlIG1heGltdW0g dG9rZW4gc2l6ZQotICogYWNjZXB0ZWQgYnkgV2luZG93cyBzeXN0ZW1zIGlzIGRldGVybWluZWQg YnkgdGhlIE1heEF1dGhUb2tlbiBXaW5kb3dzCi0gKiByZWdpc3RyeSBzZXR0aW5nLiBNaWNyb3Nv ZnQgcmVjb21tZW5kcyB0aGF0IGl0IGlzIG5vdCBzZXQgaGlnaGVyIHRoYW4KLSAqIDY1NTM1IGJ5 dGVzLCBzbyB0aGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGxpbWl0IGZvciB1cyBhcyB3ZWxs LgorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKiBPQXV0aCB2MiBCZWFyZXIgQXV0aGVudGljYXRpb24KKyAqLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogICovCi0jZGVmaW5lIFBHX01BWF9BVVRIX1RPS0VOX0xFTkdUSAk2NTUzNQorc3RhdGljIGlu dAlDaGVja09BdXRoQmVhcmVyKFBvcnQgKnBvcnQpOwogCi0vKgotICogTWF4aW11bSBhY2NlcHRl ZCBzaXplIG9mIFNBU0wgbWVzc2FnZXMuCi0gKgotICogVGhlIG1lc3NhZ2VzIHRoYXQgdGhlIHNl cnZlciBvciBsaWJwcSBnZW5lcmF0ZSBhcmUgbXVjaCBzbWFsbGVyIHRoYW4gdGhpcywKLSAqIGJ1 dCBoYXZlIHNvbWUgaGVhZHJvb20uCi0gKi8KLSNkZWZpbmUgUEdfTUFYX1NBU0xfTUVTU0FHRV9M RU5HVEgJMTAyNAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEdsb2JhbCBhdXRoZW50aWNhdGlvbiBmdW5jdGlv bnMKQEAgLTMyNyw2ICszMTAsOSBAQCBhdXRoX2ZhaWxlZChQb3J0ICpwb3J0LCBpbnQgc3RhdHVz LCBjaGFyICpsb2dkZXRhaWwpCiAJCWNhc2UgdWFSQURJVVM6CiAJCQllcnJzdHIgPSBnZXR0ZXh0 X25vb3AoIlJBRElVUyBhdXRoZW50aWNhdGlvbiBmYWlsZWQgZm9yIHVzZXIgXCIlc1wiIik7CiAJ CQlicmVhazsKKwkJY2FzZSB1YU9BdXRoOgorCQkJZXJyc3RyID0gZ2V0dGV4dF9ub29wKCJPQXV0 aCBiZWFyZXIgYXV0aGVudGljYXRpb24gZmFpbGVkIGZvciB1c2VyIFwiJXNcIiIpOworCQkJYnJl YWs7CiAJCWRlZmF1bHQ6CiAJCQllcnJzdHIgPSBnZXR0ZXh0X25vb3AoImF1dGhlbnRpY2F0aW9u IGZhaWxlZCBmb3IgdXNlciBcIiVzXCI6IGludmFsaWQgYXV0aGVudGljYXRpb24gbWV0aG9kIik7 CiAJCQlicmVhazsKQEAgLTM2MSw3ICszNDcsNyBAQCBhdXRoX2ZhaWxlZChQb3J0ICpwb3J0LCBp bnQgc3RhdHVzLCBjaGFyICpsb2dkZXRhaWwpCiAgKiBsaWZldGltZSBvZiB0aGUgUG9ydCwgc28g aXQgaXMgc2FmZSB0byBwYXNzIGEgc3RyaW5nIHRoYXQgaXMgbWFuYWdlZCBieSBhbgogICogZXh0 ZXJuYWwgbGlicmFyeS4KICAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIHNldF9hdXRobl9pZChQb3J0 ICpwb3J0LCBjb25zdCBjaGFyICppZCkKIHsKIAlBc3NlcnQoaWQpOwpAQCAtNjQ2LDYgKzYzMiw5 IEBAIENsaWVudEF1dGhlbnRpY2F0aW9uKFBvcnQgKnBvcnQpCiAJCWNhc2UgdWFUcnVzdDoKIAkJ CXN0YXR1cyA9IFNUQVRVU19PSzsKIAkJCWJyZWFrOworCQljYXNlIHVhT0F1dGg6CisJCQlzdGF0 dXMgPSBDaGVja09BdXRoQmVhcmVyKHBvcnQpOworCQkJYnJlYWs7CiAJfQogCiAJaWYgKChzdGF0 dXMgPT0gU1RBVFVTX09LICYmIHBvcnQtPmhiYS0+Y2xpZW50Y2VydCA9PSBjbGllbnRDZXJ0RnVs bCkKQEAgLTk3Myw3ICs5NjIsNyBAQCBTQVNMX2V4Y2hhbmdlKGNvbnN0IHBnX2JlX3Nhc2xfbWVj aCAqbWVjaCwgUG9ydCAqcG9ydCwgY2hhciAqc2hhZG93X3Bhc3MsCiAKIAkJLyogR2V0IHRoZSBh Y3R1YWwgU0FTTCBtZXNzYWdlICovCiAJCWluaXRTdHJpbmdJbmZvKCZidWYpOwotCQlpZiAocHFf Z2V0bWVzc2FnZSgmYnVmLCBQR19NQVhfU0FTTF9NRVNTQUdFX0xFTkdUSCkpCisJCWlmIChwcV9n ZXRtZXNzYWdlKCZidWYsIG1lY2gtPm1heF9tZXNzYWdlX2xlbmd0aCkpCiAJCXsKIAkJCS8qIEVP RiAtIHBxX2dldG1lc3NhZ2UgYWxyZWFkeSBsb2dnZWQgZXJyb3IgKi8KIAkJCXBmcmVlKGJ1Zi5k YXRhKTsKQEAgLTM0OTUsMyArMzQ4NCw5IEBAIFBlcmZvcm1SYWRpdXNUcmFuc2FjdGlvbihjb25z dCBjaGFyICpzZXJ2ZXIsIGNvbnN0IGNoYXIgKnNlY3JldCwgY29uc3QgY2hhciAqcG9yCiAJCX0K IAl9CQkJCQkJCS8qIHdoaWxlICh0cnVlKSAqLwogfQorCitzdGF0aWMgaW50CitDaGVja09BdXRo QmVhcmVyKFBvcnQgKnBvcnQpCit7CisJcmV0dXJuIFNBU0xfZXhjaGFuZ2UoJnBnX2JlX29hdXRo X21lY2gsIHBvcnQsIE5VTEwsIE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbGli cHEvaGJhLmMgYi9zcmMvYmFja2VuZC9saWJwcS9oYmEuYwppbmRleCAzYmU4Nzc4ZDIxLi45ODE0 NzcwMGRkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9saWJwcS9oYmEuYworKysgYi9zcmMvYmFj a2VuZC9saWJwcS9oYmEuYwpAQCAtMTM0LDcgKzEzNCw4IEBAIHN0YXRpYyBjb25zdCBjaGFyICpj b25zdCBVc2VyQXV0aE5hbWVbXSA9CiAJImxkYXAiLAogCSJjZXJ0IiwKIAkicmFkaXVzIiwKLQki cGVlciIKKwkicGVlciIsCisJIm9hdXRoIiwKIH07CiAKIApAQCAtMTM5OSw2ICsxNDAwLDggQEAg cGFyc2VfaGJhX2xpbmUoVG9rZW5pemVkTGluZSAqdG9rX2xpbmUsIGludCBlbGV2ZWwpCiAjZW5k aWYKIAllbHNlIGlmIChzdHJjbXAodG9rZW4tPnN0cmluZywgInJhZGl1cyIpID09IDApCiAJCXBh cnNlZGxpbmUtPmF1dGhfbWV0aG9kID0gdWFSQURJVVM7CisJZWxzZSBpZiAoc3RyY21wKHRva2Vu LT5zdHJpbmcsICJvYXV0aCIpID09IDApCisJCXBhcnNlZGxpbmUtPmF1dGhfbWV0aG9kID0gdWFP QXV0aDsKIAllbHNlCiAJewogCQllcmVwb3J0KGVsZXZlbCwKQEAgLTE3MTMsOCArMTcxNiw5IEBA IHBhcnNlX2hiYV9hdXRoX29wdChjaGFyICpuYW1lLCBjaGFyICp2YWwsIEhiYUxpbmUgKmhiYWxp bmUsCiAJCQloYmFsaW5lLT5hdXRoX21ldGhvZCAhPSB1YVBlZXIgJiYKIAkJCWhiYWxpbmUtPmF1 dGhfbWV0aG9kICE9IHVhR1NTICYmCiAJCQloYmFsaW5lLT5hdXRoX21ldGhvZCAhPSB1YVNTUEkg JiYKKwkJCWhiYWxpbmUtPmF1dGhfbWV0aG9kICE9IHVhT0F1dGggJiYKIAkJCWhiYWxpbmUtPmF1 dGhfbWV0aG9kICE9IHVhQ2VydCkKLQkJCUlOVkFMSURfQVVUSF9PUFRJT04oIm1hcCIsIGdldHRl eHRfbm9vcCgiaWRlbnQsIHBlZXIsIGdzc2FwaSwgc3NwaSwgYW5kIGNlcnQiKSk7CisJCQlJTlZB TElEX0FVVEhfT1BUSU9OKCJtYXAiLCBnZXR0ZXh0X25vb3AoImlkZW50LCBwZWVyLCBnc3NhcGks IHNzcGksIG9hdXRoLCBhbmQgY2VydCIpKTsKIAkJaGJhbGluZS0+dXNlcm1hcCA9IHBzdHJkdXAo dmFsKTsKIAl9CiAJZWxzZSBpZiAoc3RyY21wKG5hbWUsICJjbGllbnRjZXJ0IikgPT0gMCkKQEAg LTIwOTgsNiArMjEwMiwyNyBAQCBwYXJzZV9oYmFfYXV0aF9vcHQoY2hhciAqbmFtZSwgY2hhciAq dmFsLCBIYmFMaW5lICpoYmFsaW5lLAogCQloYmFsaW5lLT5yYWRpdXNpZGVudGlmaWVycyA9IHBh cnNlZF9pZGVudGlmaWVyczsKIAkJaGJhbGluZS0+cmFkaXVzaWRlbnRpZmllcnNfcyA9IHBzdHJk dXAodmFsKTsKIAl9CisJZWxzZSBpZiAoc3RyY21wKG5hbWUsICJpc3N1ZXIiKSA9PSAwKQorCXsK KwkJaWYgKGhiYWxpbmUtPmF1dGhfbWV0aG9kICE9IHVhT0F1dGgpCisJCQlJTlZBTElEX0FVVEhf T1BUSU9OKCJpc3N1ZXIiLCBnZXR0ZXh0X25vb3AoIm9hdXRoIikpOworCQloYmFsaW5lLT5vYXV0 aF9pc3N1ZXIgPSBwc3RyZHVwKHZhbCk7CisJfQorCWVsc2UgaWYgKHN0cmNtcChuYW1lLCAic2Nv cGUiKSA9PSAwKQorCXsKKwkJaWYgKGhiYWxpbmUtPmF1dGhfbWV0aG9kICE9IHVhT0F1dGgpCisJ CQlJTlZBTElEX0FVVEhfT1BUSU9OKCJzY29wZSIsIGdldHRleHRfbm9vcCgib2F1dGgiKSk7CisJ CWhiYWxpbmUtPm9hdXRoX3Njb3BlID0gcHN0cmR1cCh2YWwpOworCX0KKwllbHNlIGlmIChzdHJj bXAobmFtZSwgInRydXN0X3ZhbGlkYXRvcl9hdXRoeiIpID09IDApCisJeworCQlpZiAoaGJhbGlu ZS0+YXV0aF9tZXRob2QgIT0gdWFPQXV0aCkKKwkJCUlOVkFMSURfQVVUSF9PUFRJT04oInRydXN0 X3ZhbGlkYXRvcl9hdXRoeiIsIGdldHRleHRfbm9vcCgib2F1dGgiKSk7CisJCWlmIChzdHJjbXAo dmFsLCAiMSIpID09IDApCisJCQloYmFsaW5lLT5vYXV0aF9za2lwX3VzZXJtYXAgPSB0cnVlOwor CQllbHNlCisJCQloYmFsaW5lLT5vYXV0aF9za2lwX3VzZXJtYXAgPSBmYWxzZTsKKwl9CiAJZWxz ZQogCXsKIAkJZXJlcG9ydChlbGV2ZWwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9t aXNjL2d1Yy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYwppbmRleCA2OGI2MmQ1MjNk Li4xZWY2YjNjNDFlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMKQEAgLTU2LDYgKzU2LDcgQEAKICNpbmNs dWRlICJsaWJwcS9hdXRoLmgiCiAjaW5jbHVkZSAibGlicHEvbGlicHEuaCIKICNpbmNsdWRlICJs aWJwcS9wcWZvcm1hdC5oIgorI2luY2x1ZGUgImxpYnBxL29hdXRoLmgiCiAjaW5jbHVkZSAibWlz Y2FkbWluLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL2Nvc3QuaCIKICNpbmNsdWRlICJvcHRpbWl6 ZXIvZ2Vxby5oIgpAQCAtNDU4Nyw2ICs0NTg4LDE3IEBAIHN0YXRpYyBzdHJ1Y3QgY29uZmlnX3N0 cmluZyBDb25maWd1cmVOYW1lc1N0cmluZ1tdID0KIAkJY2hlY2tfYmFja3RyYWNlX2Z1bmN0aW9u cywgYXNzaWduX2JhY2t0cmFjZV9mdW5jdGlvbnMsIE5VTEwKIAl9LAogCisJeworCQl7Im9hdXRo X3ZhbGlkYXRvcl9jb21tYW5kIiwgUEdDX1NJR0hVUCwgQ09OTl9BVVRIX0FVVEgsCisJCQlnZXR0 ZXh0X25vb3AoIkNvbW1hbmQgdG8gdmFsaWRhdGUgT0F1dGggdjIgYmVhcmVyIHRva2Vucy4iKSwK KwkJCU5VTEwsCisJCQlHVUNfU1VQRVJVU0VSX09OTFkKKwkJfSwKKwkJJm9hdXRoX3ZhbGlkYXRv cl9jb21tYW5kLAorCQkiIiwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKIAkvKiBFbmQtb2Yt bGlzdCBtYXJrZXIgKi8KIAl7CiAJCXtOVUxMLCAwLCAwLCBOVUxMLCBOVUxMfSwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTCwgTlVMTApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGlicHEvYXV0aC5o IGIvc3JjL2luY2x1ZGUvbGlicHEvYXV0aC5oCmluZGV4IDM2MTBmYWUzZmYuLjc4NWNjNWQxNmYg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2xpYnBxL2F1dGguaAorKysgYi9zcmMvaW5jbHVkZS9s aWJwcS9hdXRoLmgKQEAgLTIxLDYgKzIxLDcgQEAgZXh0ZXJuIGJvb2wgcGdfa3JiX2Nhc2VpbnNf dXNlcnM7CiBleHRlcm4gY2hhciAqcGdfa3JiX3JlYWxtOwogCiBleHRlcm4gdm9pZCBDbGllbnRB dXRoZW50aWNhdGlvbihQb3J0ICpwb3J0KTsKK2V4dGVybiB2b2lkIHNldF9hdXRobl9pZChQb3J0 ICpwb3J0LCBjb25zdCBjaGFyICppZCk7CiAKIC8qIEhvb2sgZm9yIHBsdWdpbnMgdG8gZ2V0IGNv bnRyb2wgaW4gQ2xpZW50QXV0aGVudGljYXRpb24oKSAqLwogdHlwZWRlZiB2b2lkICgqQ2xpZW50 QXV0aGVudGljYXRpb25faG9va190eXBlKSAoUG9ydCAqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvbGlicHEvaGJhLmggYi9zcmMvaW5jbHVkZS9saWJwcS9oYmEuaAppbmRleCA4ZDlm MzgyMWIxLi40NDFkZDU2MjNlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9saWJwcS9oYmEuaAor KysgYi9zcmMvaW5jbHVkZS9saWJwcS9oYmEuaApAQCAtMzgsOCArMzgsOSBAQCB0eXBlZGVmIGVu dW0gVXNlckF1dGgKIAl1YUxEQVAsCiAJdWFDZXJ0LAogCXVhUkFESVVTLAotCXVhUGVlcgotI2Rl ZmluZSBVU0VSX0FVVEhfTEFTVCB1YVBlZXIJLyogTXVzdCBiZSBsYXN0IHZhbHVlIG9mIHRoaXMg ZW51bSAqLworCXVhUGVlciwKKwl1YU9BdXRoCisjZGVmaW5lIFVTRVJfQVVUSF9MQVNUIHVhT0F1 dGgJLyogTXVzdCBiZSBsYXN0IHZhbHVlIG9mIHRoaXMgZW51bSAqLwogfSBVc2VyQXV0aDsKIAog LyoKQEAgLTEyMCw2ICsxMjEsOSBAQCB0eXBlZGVmIHN0cnVjdCBIYmFMaW5lCiAJY2hhcgkgICAq cmFkaXVzaWRlbnRpZmllcnNfczsKIAlMaXN0CSAgICpyYWRpdXNwb3J0czsKIAljaGFyCSAgICpy YWRpdXNwb3J0c19zOworCWNoYXIJICAgKm9hdXRoX2lzc3VlcjsKKwljaGFyCSAgICpvYXV0aF9z Y29wZTsKKwlib29sCQlvYXV0aF9za2lwX3VzZXJtYXA7CiB9IEhiYUxpbmU7CiAKIHR5cGVkZWYg c3RydWN0IElkZW50TGluZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGlicHEvb2F1dGguaCBi L3NyYy9pbmNsdWRlL2xpYnBxL29hdXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uODcwZTQyNmFmMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2xpYnBx L29hdXRoLmgKQEAgLTAsMCArMSwyNCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogb2F1 dGguaAorICoJICBJbnRlcmZhY2UgdG8gbGlicHEvYXV0aC1vYXV0aC5jCisgKgorICogUG9ydGlv bnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjEsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVu aXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9pbmNsdWRlL2xpYnBxL29hdXRoLmgK KyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR19PQVVUSF9ICisjZGVmaW5l IFBHX09BVVRIX0gKKworI2luY2x1ZGUgImxpYnBxL2xpYnBxLWJlLmgiCisjaW5jbHVkZSAibGli cHEvc2FzbC5oIgorCitleHRlcm4gY2hhciAqb2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQ7CisKKy8q IEltcGxlbWVudGF0aW9uICovCitleHRlcm4gY29uc3QgcGdfYmVfc2FzbF9tZWNoIHBnX2JlX29h dXRoX21lY2g7CisKKyNlbmRpZiAvKiBQR19PQVVUSF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9saWJwcS9zYXNsLmggYi9zcmMvaW5jbHVkZS9saWJwcS9zYXNsLmgKaW5kZXggOGM5Yzk5 ODNkNC4uZjEzNDFkMGM1NCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbGlicHEvc2FzbC5oCisr KyBiL3NyYy9pbmNsdWRlL2xpYnBxL3Nhc2wuaApAQCAtMTksNiArMTksMzAgQEAKICNkZWZpbmUg U0FTTF9FWENIQU5HRV9TVUNDRVNTCQkxCiAjZGVmaW5lIFNBU0xfRVhDSEFOR0VfRkFJTFVSRQkJ MgogCisvKgorICogTWF4aW11bSBhY2NlcHRlZCBzaXplIG9mIEdTUyBhbmQgU1NQSSBhdXRoZW50 aWNhdGlvbiB0b2tlbnMuCisgKiBXZSBhbHNvIHVzZSB0aGlzIGFzIGEgbGltaXQgb24gb3JkaW5h cnkgcGFzc3dvcmQgcGFja2V0IGxlbmd0aHMuCisgKgorICogS2VyYmVyb3MgdGlja2V0cyBhcmUg dXN1YWxseSBxdWl0ZSBzbWFsbCwgYnV0IHRoZSBUR1RzIGlzc3VlZCBieSBXaW5kb3dzCisgKiBk b21haW4gY29udHJvbGxlcnMgaW5jbHVkZSBhbiBhdXRob3JpemF0aW9uIGZpZWxkIGtub3duIGFz IHRoZSBQcml2aWxlZ2UKKyAqIEF0dHJpYnV0ZSBDZXJ0aWZpY2F0ZSAoUEFDKSwgd2hpY2ggY29u dGFpbnMgdGhlIHVzZXIncyBXaW5kb3dzIHBlcm1pc3Npb25zCisgKiAoZ3JvdXAgbWVtYmVyc2hp cHMgZXRjLikuIFRoZSBQQUMgaXMgY29waWVkIGludG8gYWxsIHRpY2tldHMgb2J0YWluZWQgb24K KyAqIHRoZSBiYXNpcyBvZiB0aGlzIFRHVCAoZXZlbiB0aG9zZSBpc3N1ZWQgYnkgVW5peCByZWFs bXMgd2hpY2ggdGhlIFdpbmRvd3MKKyAqIHJlYWxtIHRydXN0cyksIGFuZCBjYW4gYmUgc2V2ZXJh bCBrQiBpbiBzaXplLiBUaGUgbWF4aW11bSB0b2tlbiBzaXplCisgKiBhY2NlcHRlZCBieSBXaW5k b3dzIHN5c3RlbXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgTWF4QXV0aFRva2VuIFdpbmRvd3MKKyAq IHJlZ2lzdHJ5IHNldHRpbmcuIE1pY3Jvc29mdCByZWNvbW1lbmRzIHRoYXQgaXQgaXMgbm90IHNl dCBoaWdoZXIgdGhhbgorICogNjU1MzUgYnl0ZXMsIHNvIHRoYXQgc2VlbXMgbGlrZSBhIHJlYXNv bmFibGUgbGltaXQgZm9yIHVzIGFzIHdlbGwuCisgKi8KKyNkZWZpbmUgUEdfTUFYX0FVVEhfVE9L RU5fTEVOR1RICTY1NTM1CisKKy8qCisgKiBNYXhpbXVtIGFjY2VwdGVkIHNpemUgb2YgU0FTTCBt ZXNzYWdlcy4KKyAqCisgKiBUaGUgbWVzc2FnZXMgdGhhdCB0aGUgc2VydmVyIG9yIGxpYnBxIGdl bmVyYXRlIGFyZSBtdWNoIHNtYWxsZXIgdGhhbiB0aGlzLAorICogYnV0IGhhdmUgc29tZSBoZWFk cm9vbS4KKyAqLworI2RlZmluZSBQR19NQVhfU0FTTF9NRVNTQUdFX0xFTkdUSAkxMDI0CisKIC8q IEJhY2tlbmQgbWVjaGFuaXNtIEFQSSAqLwogdHlwZWRlZiB2b2lkICAoKnBnX2JlX3Nhc2xfbWVj aGFuaXNtX2Z1bmMpKFBvcnQgKiwgU3RyaW5nSW5mbyk7CiB0eXBlZGVmIHZvaWQgKigqcGdfYmVf c2FzbF9pbml0X2Z1bmMpKFBvcnQgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpAQCAt MjksNiArNTMsOCBAQCB0eXBlZGVmIHN0cnVjdAogCXBnX2JlX3Nhc2xfbWVjaGFuaXNtX2Z1bmMJ Z2V0X21lY2hhbmlzbXM7CiAJcGdfYmVfc2FzbF9pbml0X2Z1bmMJCWluaXQ7CiAJcGdfYmVfc2Fz bF9leGNoYW5nZV9mdW5jCWV4Y2hhbmdlOworCisJaW50CQkJCQkJCW1heF9tZXNzYWdlX2xlbmd0 aDsKIH0gcGdfYmVfc2FzbF9tZWNoOwogCiAjZW5kaWYgLyogUEdfU0FTTF9IICovCi0tIAoyLjI1 LjEKCg== --_008_d1b467a78e0e36ed85a09adf979d04cf124a9d4bcamelvmwarecom_ Content-Type: text/x-patch; name="0006-Add-a-very-simple-authn_id-extension.patch" Content-Description: 0006-Add-a-very-simple-authn_id-extension.patch Content-Disposition: attachment; filename="0006-Add-a-very-simple-authn_id-extension.patch"; size=2892; creation-date="Tue, 08 Jun 2021 16:37:45 GMT"; modification-date="Tue, 08 Jun 2021 16:37:45 GMT" Content-ID: Content-Transfer-Encoding: base64 RnJvbSBlNDY4YmU3ZmY3ZDE5NjQ1YWViNzdiZWYyMWEzODM5NjBhNDc3MzFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8cGNoYW1waW9uQHZtd2FyZS5jb20+ CkRhdGU6IFR1ZSwgMTggTWF5IDIwMjEgMTU6MDE6MjkgLTA3MDAKU3ViamVjdDogW1BBVENIIDYv N10gQWRkIGEgdmVyeSBzaW1wbGUgYXV0aG5faWQgZXh0ZW5zaW9uCgouLi5mb3IgcmV0cmlldmlu ZyB0aGUgYXV0aG5faWQgZnJvbSB0aGUgc2VydmVyIGluIHRlc3RzLgotLS0KIGNvbnRyaWIvYXV0 aG5faWQvTWFrZWZpbGUgICAgICAgICAgfCAxOSArKysrKysrKysrKysrKysrKysrCiBjb250cmli L2F1dGhuX2lkL2F1dGhuX2lkLS0xLjAuc3FsIHwgIDggKysrKysrKysKIGNvbnRyaWIvYXV0aG5f aWQvYXV0aG5faWQuYyAgICAgICAgfCAyOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBj b250cmliL2F1dGhuX2lkL2F1dGhuX2lkLmNvbnRyb2wgIHwgIDUgKysrKysKIDQgZmlsZXMgY2hh bmdlZCwgNjAgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvYXV0aG5f aWQvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL2F1dGhuX2lkL2F1dGhuX2lk LS0xLjAuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9hdXRobl9pZC9hdXRobl9pZC5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9hdXRobl9pZC9hdXRobl9pZC5jb250cm9sCgpk aWZmIC0tZ2l0IGEvY29udHJpYi9hdXRobl9pZC9NYWtlZmlsZSBiL2NvbnRyaWIvYXV0aG5faWQv TWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNDYwMjYzNThl MAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvYXV0aG5faWQvTWFrZWZpbGUKQEAgLTAsMCAr MSwxOSBAQAorIyBjb250cmliL2F1dGhuX2lkL01ha2VmaWxlCisKK01PRFVMRV9iaWcgPSBhdXRo bl9pZAorT0JKUyA9IGF1dGhuX2lkLm8KKworRVhURU5TSU9OID0gYXV0aG5faWQKK0RBVEEgPSBh dXRobl9pZC0tMS4wLnNxbAorUEdGSUxFREVTQyA9ICJhdXRobl9pZCAtIGluZm9ybWF0aW9uIGFi b3V0IHRoZSBhdXRoZW50aWNhdGVkIHVzZXIiCisKK2lmZGVmIFVTRV9QR1hTCitQR19DT05GSUcg PSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQoraW5jbHVk ZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBjb250cmliL2F1dGhuX2lkCit0b3BfYnVpbGRkaXIg PSAuLi8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5j bHVkZSAkKHRvcF9zcmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCmRpZmYg LS1naXQgYS9jb250cmliL2F1dGhuX2lkL2F1dGhuX2lkLS0xLjAuc3FsIGIvY29udHJpYi9hdXRo bl9pZC9hdXRobl9pZC0tMS4wLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwLi5hZjJhNGQzOTkxCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9hdXRobl9pZC9hdXRo bl9pZC0tMS4wLnNxbApAQCAtMCwwICsxLDggQEAKKy8qIGNvbnRyaWIvYXV0aG5faWQvYXV0aG5f aWQtLTEuMC5zcWwgKi8KKworLS0gY29tcGxhaW4gaWYgc2NyaXB0IGlzIHNvdXJjZWQgaW4gcHNx bCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBFWFRFTlNJT04KK1xlY2hvIFVzZSAiQ1JFQVRFIEVY VEVOU0lPTiBhdXRobl9pZCIgdG8gbG9hZCB0aGlzIGZpbGUuIFxxdWl0CisKK0NSRUFURSBGVU5D VElPTiBhdXRobl9pZCgpIFJFVFVSTlMgdGV4dAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdhdXRo bl9pZCcKK0xBTkdVQUdFIEMgSU1NVVRBQkxFOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9hdXRobl9p ZC9hdXRobl9pZC5jIGIvY29udHJpYi9hdXRobl9pZC9hdXRobl9pZC5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjBmZWNhYzM2YTgKLS0tIC9kZXYvbnVsbAorKysgYi9j b250cmliL2F1dGhuX2lkL2F1dGhuX2lkLmMKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIEV4dGVu c2lvbiB0byBleHBvc2UgdGhlIGN1cnJlbnQgdXNlcidzIGF1dGhuX2lkLgorICoKKyAqIGNvbnRy aWIvYXV0aG5faWQvYXV0aG5faWQuYworICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisj aW5jbHVkZSAiZm1nci5oIgorI2luY2x1ZGUgImxpYnBxL2xpYnBxLWJlLmgiCisjaW5jbHVkZSAi bWlzY2FkbWluLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKworUEdfTU9EVUxFX01B R0lDOworCitQR19GVU5DVElPTl9JTkZPX1YxKGF1dGhuX2lkKTsKKworLyoKKyAqIFJldHVybnMg dGhlIGN1cnJlbnQgdXNlcidzIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHkuCisgKi8KK0RhdHVtCith dXRobl9pZChQR19GVU5DVElPTl9BUkdTKQoreworCWlmICghTXlQcm9jUG9ydC0+YXV0aG5faWQp CisJCVBHX1JFVFVSTl9OVUxMKCk7CisKKwlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4 dChNeVByb2NQb3J0LT5hdXRobl9pZCkpOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9hdXRobl9p ZC9hdXRobl9pZC5jb250cm9sIGIvY29udHJpYi9hdXRobl9pZC9hdXRobl9pZC5jb250cm9sCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmUwZjllMDZiZWQKLS0tIC9kZXYv bnVsbAorKysgYi9jb250cmliL2F1dGhuX2lkL2F1dGhuX2lkLmNvbnRyb2wKQEAgLTAsMCArMSw1 IEBACisjIGF1dGhuX2lkIGV4dGVuc2lvbgorY29tbWVudCA9ICdjdXJyZW50IHVzZXIgaWRlbnRp dHknCitkZWZhdWx0X3ZlcnNpb24gPSAnMS4wJworbW9kdWxlX3BhdGhuYW1lID0gJyRsaWJkaXIv YXV0aG5faWQnCityZWxvY2F0YWJsZSA9IHRydWUKLS0gCjIuMjUuMQoK --_008_d1b467a78e0e36ed85a09adf979d04cf124a9d4bcamelvmwarecom_ Content-Type: text/x-patch; name="0007-Add-pytest-suite-for-OAuth.patch" Content-Description: 0007-Add-pytest-suite-for-OAuth.patch Content-Disposition: attachment; filename="0007-Add-pytest-suite-for-OAuth.patch"; size=134399; creation-date="Tue, 08 Jun 2021 16:37:45 GMT"; modification-date="Tue, 08 Jun 2021 16:37:45 GMT" Content-ID: Content-Transfer-Encoding: base64 RnJvbSA4OTZkYTkxOGNmY2QxNmJjYjExOTA5MDkxNGY2ODdiM2U5MDVkODY1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8cGNoYW1waW9uQHZtd2FyZS5jb20+ CkRhdGU6IEZyaSwgNCBKdW4gMjAyMSAwOTowNjozOCAtMDcwMApTdWJqZWN0OiBbUEFUQ0ggNy83 XSBBZGQgcHl0ZXN0IHN1aXRlIGZvciBPQXV0aAoKUmVxdWlyZXMgUHl0aG9uIDM7IG9uIHRoZSBm aXJzdCBydW4gb2YgYG1ha2UgaW5zdGFsbGNoZWNrYCB0aGUKZGVwZW5kZW5jaWVzIHdpbGwgYmUg aW5zdGFsbGVkIGludG8gLi92ZW52IGZvciB5b3UuIFNlZSB0aGUgUkVBRE1FIGZvcgptb3JlIGRl dGFpbHMuCi0tLQogc3JjL3Rlc3QvcHl0aG9uLy5naXRpZ25vcmUgICAgICAgICAgICAgICAgIHwg ICAgMiArCiBzcmMvdGVzdC9weXRob24vTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgfCAgIDMz ICsKIHNyYy90ZXN0L3B5dGhvbi9SRUFETUUgICAgICAgICAgICAgICAgICAgICB8ICAgNDkgKwog c3JjL3Rlc3QvcHl0aG9uL2NsaWVudC9fX2luaXRfXy5weSAgICAgICAgIHwgICAgMAogc3JjL3Rl c3QvcHl0aG9uL2NsaWVudC9jb25mdGVzdC5weSAgICAgICAgIHwgIDEyNiArKysKIHNyYy90ZXN0 L3B5dGhvbi9jbGllbnQvdGVzdF9jbGllbnQucHkgICAgICB8ICAxODAgKysrKwogc3JjL3Rlc3Qv cHl0aG9uL2NsaWVudC90ZXN0X29hdXRoLnB5ICAgICAgIHwgIDkzNiArKysrKysrKysrKysrKysr KysKIHNyYy90ZXN0L3B5dGhvbi9wcTMucHkgICAgICAgICAgICAgICAgICAgICB8ICA3MjcgKysr KysrKysrKysrKysKIHNyYy90ZXN0L3B5dGhvbi9weXRlc3QuaW5pICAgICAgICAgICAgICAgICB8 ICAgIDQgKwogc3JjL3Rlc3QvcHl0aG9uL3JlcXVpcmVtZW50cy50eHQgICAgICAgICAgIHwgICAg NyArCiBzcmMvdGVzdC9weXRob24vc2VydmVyL19faW5pdF9fLnB5ICAgICAgICAgfCAgICAwCiBz cmMvdGVzdC9weXRob24vc2VydmVyL2NvbmZ0ZXN0LnB5ICAgICAgICAgfCAgIDQ1ICsKIHNyYy90 ZXN0L3B5dGhvbi9zZXJ2ZXIvdGVzdF9vYXV0aC5weSAgICAgICB8IDEwMTIgKysrKysrKysrKysr KysrKysrKysKIHNyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIvdGVzdF9zZXJ2ZXIucHkgICAgICB8ICAg MjEgKwogc3JjL3Rlc3QvcHl0aG9uL3NlcnZlci92YWxpZGF0ZV9iZWFyZXIucHkgIHwgIDEwMSAr Kwogc3JjL3Rlc3QvcHl0aG9uL3NlcnZlci92YWxpZGF0ZV9yZWZsZWN0LnB5IHwgICAzNCArCiBz cmMvdGVzdC9weXRob24vdGVzdF9pbnRlcm5hbHMucHkgICAgICAgICAgfCAgMTM4ICsrKwogc3Jj L3Rlc3QvcHl0aG9uL3Rlc3RfcHEzLnB5ICAgICAgICAgICAgICAgIHwgIDU1OCArKysrKysrKysr Kwogc3JjL3Rlc3QvcHl0aG9uL3Rscy5weSAgICAgICAgICAgICAgICAgICAgIHwgIDE5NSArKysr CiAxOSBmaWxlcyBjaGFuZ2VkLCA0MTY4IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvdGVzdC9weXRob24vLmdpdGlnbm9yZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L3B5dGhvbi9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3B5dGhvbi9SRUFE TUUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9weXRob24vY2xpZW50L19faW5pdF9fLnB5 CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcHl0aG9uL2NsaWVudC9jb25mdGVzdC5weQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3B5dGhvbi9jbGllbnQvdGVzdF9jbGllbnQucHkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9weXRob24vY2xpZW50L3Rlc3Rfb2F1dGgucHkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9weXRob24vcHEzLnB5CiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL3Rlc3QvcHl0aG9uL3B5dGVzdC5pbmkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv dGVzdC9weXRob24vcmVxdWlyZW1lbnRzLnR4dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L3B5dGhvbi9zZXJ2ZXIvX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9w eXRob24vc2VydmVyL2NvbmZ0ZXN0LnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcHl0 aG9uL3NlcnZlci90ZXN0X29hdXRoLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcHl0 aG9uL3NlcnZlci90ZXN0X3NlcnZlci5weQogY3JlYXRlIG1vZGUgMTAwNzU1IHNyYy90ZXN0L3B5 dGhvbi9zZXJ2ZXIvdmFsaWRhdGVfYmVhcmVyLnB5CiBjcmVhdGUgbW9kZSAxMDA3NTUgc3JjL3Rl c3QvcHl0aG9uL3NlcnZlci92YWxpZGF0ZV9yZWZsZWN0LnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL3Rlc3QvcHl0aG9uL3Rlc3RfaW50ZXJuYWxzLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Jj L3Rlc3QvcHl0aG9uL3Rlc3RfcHEzLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcHl0 aG9uL3Rscy5weQoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3B5dGhvbi8uZ2l0aWdub3JlIGIvc3Jj L3Rlc3QvcHl0aG9uLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMC4uMGU4ZjAyN2IyZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5dGhvbi8uZ2l0 aWdub3JlCkBAIC0wLDAgKzEsMiBAQAorX19weWNhY2hlX18vCisvdmVudi8KZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3B5dGhvbi9NYWtlZmlsZSBiL3NyYy90ZXN0L3B5dGhvbi9NYWtlZmlsZQpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi41MTVhOTk1MTA2Ci0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3Rlc3QvcHl0aG9uL01ha2VmaWxlCkBAIC0wLDAgKzEsMzMgQEAKKyMKKyMg Q29weXJpZ2h0IDIwMjEgVk13YXJlLCBJbmMuCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBQ b3N0Z3JlU1FMCisjCisKKyMgT25seSBQeXRob24gMyBpcyBzdXBwb3J0ZWQsIGJ1dCBpZiBpdCdz IG5hbWVkIHNvbWV0aGluZyBkaWZmZXJlbnQgb24geW91cgorIyBzeXN0ZW0geW91IGNhbiBvdmVy cmlkZSBpdCB3aXRoIHRoZSBQWVRIT04zIHZhcmlhYmxlLgorUFlUSE9OMyA6PSBweXRob24zCisK KyMgQWxsIGRlcGVuZGVuY2llcyBhcmUgcGxhY2VkIGludG8gdGhpcyBkaXJlY3RvcnkuIFRoZSBk ZWZhdWx0IGlzIC5naXRpZ25vcmVkCisjIGZvciB5b3UsIGJ1dCB5b3UgY2FuIG92ZXJyaWRlIGl0 IGlmIHlvdSdkIGxpa2UuCitWRU5WIDo9IC4vdmVudgorCitvdmVycmlkZSBWQklOICAgOj0gJChW RU5WKS9iaW4KK292ZXJyaWRlIFBJUCAgICA6PSAkKFZCSU4pL3BpcAorb3ZlcnJpZGUgUFlURVNU IDo9ICQoVkJJTikvcHkudGVzdAorb3ZlcnJpZGUgSVNPUlQgIDo9ICQoVkJJTikvaXNvcnQKK292 ZXJyaWRlIEJMQUNLICA6PSAkKFZCSU4pL2JsYWNrCisKKy5QSE9OWTogaW5zdGFsbGNoZWNrIGlu ZGVudAorCitpbnN0YWxsY2hlY2s6ICQoUFlURVNUKQorCSQoUFlURVNUKSAtdiAtcnMKKworaW5k ZW50OiAkKElTT1JUKSAkKEJMQUNLKQorCSQoSVNPUlQpIC0tcHJvZmlsZSBibGFjayAqLnB5IGNs aWVudC8qLnB5IHNlcnZlci8qLnB5CisJJChCTEFDSykgKi5weSBjbGllbnQvKi5weSBzZXJ2ZXIv Ki5weQorCiskKFBZVEVTVCkgJChJU09SVCkgJChCTEFDSyk6IHJlcXVpcmVtZW50cy50eHQgfCAk KFBJUCkKKwkkKFBJUCkgaW5zdGFsbCAtciAkPAorCiskKFBJUCk6CisJJChQWVRIT04zKSAtbSB2 ZW52ICQoVkVOVikKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3B5dGhvbi9SRUFETUUgYi9zcmMvdGVz dC9weXRob24vUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmNl YWUzNjRlODEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9weXRob24vUkVBRE1FCkBAIC0w LDAgKzEsNDkgQEAKK0EgdGVzdCBzdWl0ZSBmb3IgZXhlcmNpc2luZyBib3RoIHRoZSBsaWJwcSBj bGllbnQgYW5kIHRoZSBzZXJ2ZXIgYmFja2VuZCBhdCB0aGUKK3Byb3RvY29sIGxldmVsLCBiYXNl ZCBvbiBweXRlc3QgYW5kIENvbnN0cnVjdC4KKworVGhlIHRlc3Qgc3VpdGUgY3VycmVudGx5IGFz c3VtZXMgdGhhdCB0aGUgc3RhbmRhcmQgUEcqIGVudmlyb25tZW50IHZhcmlhYmxlcworcG9pbnQg dG8gdGhlIGRhdGFiYXNlIHVuZGVyIHRlc3QgYW5kIGFyZSBzdWZmaWNpZW50IHRvIGxvZyBpbiBh IHN1cGVydXNlciBvbgordGhhdCBzeXN0ZW0uIEluIG90aGVyIHdvcmRzLCBhIGJhcmUgYHBzcWxg IG5lZWRzIHRvIEp1c3QgV29yayBiZWZvcmUgdGhlIHRlc3QKK3N1aXRlIGNhbiBkbyBpdHMgdGhp bmcuIEZvciBhIG5ld2x5IGJ1aWx0IGRldiBjbHVzdGVyLCB0eXBpY2FsbHkgYWxsIHRoYXQgSSBu ZWVkCit0byBkbyBpcyBhCisKKyAgICBleHBvcnQgUEdEQVRBQkFTRT1wb3N0Z3JlcworCitidXQg eW91IGNhbiBhZGp1c3QgYXMgbmVlZGVkIGZvciB5b3VyIHNldHVwLgorCisjIyBSZXF1aXJlbWVu dHMKKworQSBzdXBwb3J0ZWQgdmVyc2lvbiAoMy42Kykgb2YgUHl0aG9uLgorCitUaGUgZmlyc3Qg cnVuIG9mCisKKyAgICBtYWtlIGluc3RhbGxjaGVjaworCit3aWxsIGluc3RhbGwgYSBsb2NhbCB2 aXJ0dWFsIGVudmlyb25tZW50IGFuZCBhbGwgbmVlZGVkIGRlcGVuZGVuY2llcy4KKworIyMgSGFj a2luZworCitUaGUgY29kZSBzdHlsZSBpcyBlbmZvcmNlZCBieSBhIF92ZXJ5XyBvcGluaW9uYXRl ZCBhdXRvZm9ybWF0dGVyLiBSdW5uaW5nIHRoZQorCisgICAgbWFrZSBpbmRlbnQKKworcmVjaXBl IHdpbGwgaW52b2tlIGl0IGZvciB5b3UgYXV0b21hdGljYWxseS4gRG9uJ3QgZmlnaHQgdGhlIHRv b2w7IHBhcnQgb2YgdGhlCit6ZW4gaXMgaW4ga25vd2luZyB0aGF0IGlmIHRoZSBmb3JtYXR0ZXIg bWFrZXMgeW91ciBjb2RlIHVnbHksIHRoZXJlJ3MgcHJvYmFibHkgYQorY2xlYW5lciB3YXkgdG8g d3JpdGUgeW91ciBjb2RlLgorCisjIyBBZHZhbmNlZCBVc2FnZQorCitUaGUgTWFrZWZpbGUgaXMg dGhlcmUgZm9yIGNvbnZlbmllbmNlLCBidXQgeW91IGRvbid0IGhhdmUgdG8gdXNlIGl0LiBBY3Rp dmF0ZQordGhlIHZpcnR1YWxlbnYgdG8gYmUgYWJsZSB0byB1c2UgcHl0ZXN0IGRpcmVjdGx5Ogor CisgICAgJCBzb3VyY2UgdmVudi9iaW4vYWN0aXZhdGUKKyAgICAkIHB5LnRlc3QgLWsgb2F1dGgK KyAgICAuLi4KKyAgICAkIHB5LnRlc3QgLi9zZXJ2ZXIvdGVzdF9zZXJ2ZXIucHkKKyAgICAuLi4K KyAgICAkIGRlYWN0aXZhdGUgICMgcHV0cyB0aGUgUEFUSCBldCBhbCBiYWNrIHRoZSB3YXkgaXQg d2FzIGJlZm9yZQorCitUbyBtYWtlIHF1aWNrIHNtb2tlIHRlc3RzIHBvc3NpYmxlLCBzbG93IHRl c3RzIGhhdmUgYmVlbiBtYXJrZWQgZXhwbGljaXRseS4gWW91CitjYW4gc2tpcCB0aGVtIGJ5IHNh eWluZyBlLmcuCisKKyAgICAkIHB5LnRlc3QgLW0gJ25vdCBzbG93JwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcHl0aG9uL2NsaWVudC9fX2luaXRfXy5weSBiL3NyYy90ZXN0L3B5dGhvbi9jbGllbnQv X19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZTY5ZGUy OWJiMgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcHl0aG9uL2NsaWVudC9jb25mdGVzdC5weSBiL3Ny Yy90ZXN0L3B5dGhvbi9jbGllbnQvY29uZnRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMC4uZjM4ZGE3YTEzOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5 dGhvbi9jbGllbnQvY29uZnRlc3QucHkKQEAgLTAsMCArMSwxMjYgQEAKKyMKKyMgQ29weXJpZ2h0 IDIwMjEgVk13YXJlLCBJbmMuCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBQb3N0Z3JlU1FM CisjCisKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKKworaW1w b3J0IHBzeWNvcGcyCitpbXBvcnQgcHl0ZXN0CisKK2ltcG9ydCBwcTMKKworQkxPQ0tJTkdfVElN RU9VVCA9IDIgICMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgZm9yIGJsb2NraW5nIGNh bGxzCisKKworQHB5dGVzdC5maXh0dXJlCitkZWYgc2VydmVyX3NvY2tldCh1bnVzZWRfdGNwX3Bv cnRfZmFjdG9yeSk6CisgICAgIiIiCisgICAgUmV0dXJucyBhIGxpc3RlbmluZyBzb2NrZXQgYm91 bmQgdG8gYW4gZXBoZW1lcmFsIHBvcnQuCisgICAgIiIiCisgICAgd2l0aCBzb2NrZXQuc29ja2V0 KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHM6CisgICAgICAgIHMuYmlu ZCgoIjEyNy4wLjAuMSIsIHVudXNlZF90Y3BfcG9ydF9mYWN0b3J5KCkpKQorICAgICAgICBzLmxp c3RlbigxKQorICAgICAgICBzLnNldHRpbWVvdXQoQkxPQ0tJTkdfVElNRU9VVCkKKyAgICAgICAg eWllbGQgcworCisKK2NsYXNzIENsaWVudEhhbmRzaGFrZSh0aHJlYWRpbmcuVGhyZWFkKToKKyAg ICAiIiIKKyAgICBBIHRocmVhZCB0aGF0IGNvbm5lY3RzIHRvIGEgbG9jYWwgUG9zdGdyZXMgc2Vy dmVyIHVzaW5nIHBzeWNvcGcyLiBPbmNlIHRoZQorICAgIG9wZW5pbmcgaGFuZHNoYWtlIGNvbXBs ZXRlcywgdGhlIGNvbm5lY3Rpb24gd2lsbCBiZSBpbW1lZGlhdGVseSBjbG9zZWQuCisgICAgIiIi CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiwgcG9ydCwgKiprd2FyZ3MpOgorICAgICAgICBz dXBlcigpLl9faW5pdF9fKCkKKworICAgICAgICBrd2FyZ3NbInBvcnQiXSA9IHBvcnQKKyAgICAg ICAgc2VsZi5fa3dhcmdzID0ga3dhcmdzCisKKyAgICAgICAgc2VsZi5leGNlcHRpb24gPSBOb25l CisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb25uID0g cHN5Y29wZzIuY29ubmVjdChob3N0PSIxMjcuMC4wLjEiLCAqKnNlbGYuX2t3YXJncykKKyAgICAg ICAgICAgIGNvbm4uY2xvc2UoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAg ICAgICAgICBzZWxmLmV4Y2VwdGlvbiA9IGUKKworICAgIGRlZiBjaGVja19jb21wbGV0ZWQoc2Vs ZiwgdGltZW91dD1CTE9DS0lOR19USU1FT1VUKToKKyAgICAgICAgIiIiCisgICAgICAgIEpvaW5z IHRoZSBjbGllbnQgdGhyZWFkLiBSYWlzZXMgYW4gZXhjZXB0aW9uIGlmIHRoZSB0aHJlYWQgY291 bGQgbm90IGJlCisgICAgICAgIGpvaW5lZCwgb3IgaWYgaXQgdGhyZXcgYW4gZXhjZXB0aW9uIGl0 c2VsZi4gKFRoZSBleGNlcHRpb24gd2lsbCBiZQorICAgICAgICBjbGVhcmVkLCBzbyBmdXR1cmUg Y2FsbHMgdG8gY2hlY2tfY29tcGxldGVkIHdpbGwgc3VjY2VlZC4pCisgICAgICAgICIiIgorICAg ICAgICBzZWxmLmpvaW4odGltZW91dCkKKworICAgICAgICBpZiBzZWxmLmlzX2FsaXZlKCk6Cisg ICAgICAgICAgICByYWlzZSBUaW1lb3V0RXJyb3IoImNsaWVudCB0aHJlYWQgZGlkIG5vdCBoYW5k c2hha2Ugd2l0aGluIHRoZSB0aW1lb3V0IikKKyAgICAgICAgZWxpZiBzZWxmLmV4Y2VwdGlvbjoK KyAgICAgICAgICAgIGUgPSBzZWxmLmV4Y2VwdGlvbgorICAgICAgICAgICAgc2VsZi5leGNlcHRp b24gPSBOb25lCisgICAgICAgICAgICByYWlzZSBlCisKKworQHB5dGVzdC5maXh0dXJlCitkZWYg YWNjZXB0KHNlcnZlcl9zb2NrZXQpOgorICAgICIiIgorICAgIFJldHVybnMgYSBmYWN0b3J5IGZ1 bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLCByZXR1cm5zIGEgcGFpciAoc29jaywgY2xpZW50KQor ICAgIHdoZXJlIHNvY2sgaXMgYSBzZXJ2ZXIgc29ja2V0IHRoYXQgaGFzIGFjY2VwdGVkIGEgY29u bmVjdGlvbiBmcm9tIGNsaWVudCwKKyAgICBhbmQgY2xpZW50IGlzIGFuIGluc3RhbmNlIG9mIENs aWVudEhhbmRzaGFrZS4gQ2xpZW50cyB3aWxsIGNvbXBsZXRlIHRoZWlyCisgICAgaGFuZHNoYWtl cyBhbmQgY2xlYW5seSBkaXNjb25uZWN0LgorCisgICAgVGhlIGRlZmF1bHQgY29ubnN0cmluZyBv cHRpb25zIG1heSBiZSBleHRlbmRlZCBvciBvdmVycmlkZGVuIGJ5IHBhc3NpbmcKKyAgICBhcmJp dHJhcnkga2V5d29yZCBhcmd1bWVudHMuIEtlZXAgaW4gbWluZCB0aGF0IHlvdSBnZW5lcmFsbHkg c2hvdWxkIG5vdAorICAgIG92ZXJyaWRlIHRoZSBob3N0IG9yIHBvcnQsIHNpbmNlIHRoZXkgcG9p bnQgdG8gdGhlIGxvY2FsIHRlc3Qgc2VydmVyLgorCisgICAgRm9yIHNpdHVhdGlvbnMgd2hlcmUg YSBjbGllbnQgbmVlZHMgdG8gY29ubmVjdCBtb3JlIHRoYW4gb25jZSB0byBjb21wbGV0ZSBhCisg ICAgaGFuZHNoYWtlLCB0aGUgYWNjZXB0IGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgbW9yZSB0aGFu IG9uY2UuIChUaGUgY2xpZW50CisgICAgcmV0dXJuZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMgd2ls bCBhbHdheXMgYmUgdGhlIHNhbWUgY2xpZW50IHRoYXQgd2FzCisgICAgcmV0dXJuZWQgZm9yIHRo ZSBmaXJzdCBjYWxsLikKKworICAgIFRlc3RzIG11c3QgZWl0aGVyIGNvbXBsZXRlIHRoZSBoYW5k c2hha2Ugc28gdGhhdCB0aGUgY2xpZW50IHRocmVhZCBjYW4gYmUKKyAgICBhdXRvbWF0aWNhbGx5 IGpvaW5lZCBkdXJpbmcgdGVhcmRvd24sIG9yIGVsc2UgY2FsbCBjbGllbnQuY2hlY2tfY29tcGxl dGVkKCkKKyAgICBhbmQgbWFudWFsbHkgaGFuZGxlIGFueSBleHBlY3RlZCBlcnJvcnMuCisgICAg IiIiCisgICAgXywgcG9ydCA9IHNlcnZlcl9zb2NrZXQuZ2V0c29ja25hbWUoKQorCisgICAgY2xp ZW50ID0gTm9uZQorICAgIGRlZmF1bHRfb3B0cyA9IGRpY3QoCisgICAgICAgIHBvcnQ9cG9ydCwK KyAgICAgICAgdXNlcj1wcTMucGd1c2VyKCksCisgICAgICAgIHNzbG1vZGU9ImRpc2FibGUiLAor ICAgICkKKworICAgIGRlZiBmYWN0b3J5KCoqa3dhcmdzKToKKyAgICAgICAgbm9ubG9jYWwgY2xp ZW50CisKKyAgICAgICAgaWYgY2xpZW50IGlzIE5vbmU6CisgICAgICAgICAgICBvcHRzID0gZGlj dChkZWZhdWx0X29wdHMpCisgICAgICAgICAgICBvcHRzLnVwZGF0ZShrd2FyZ3MpCisKKyAgICAg ICAgICAgICMgVGhlIHNlcnZlcl9zb2NrZXQgaXMgYWxyZWFkeSBsaXN0ZW5pbmcsIHNvIHRoZSBj bGllbnQgdGhyZWFkIGNhbgorICAgICAgICAgICAgIyBiZSBzYWZlbHkgc3RhcnRlZDsgaXQnbGwg YmxvY2sgb24gdGhlIGNvbm5lY3Rpb24gdW50aWwgd2UgYWNjZXB0LgorICAgICAgICAgICAgY2xp ZW50ID0gQ2xpZW50SGFuZHNoYWtlKCoqb3B0cykKKyAgICAgICAgICAgIGNsaWVudC5zdGFydCgp CisKKyAgICAgICAgc29jaywgXyA9IHNlcnZlcl9zb2NrZXQuYWNjZXB0KCkKKyAgICAgICAgcmV0 dXJuIHNvY2ssIGNsaWVudAorCisgICAgeWllbGQgZmFjdG9yeQorICAgIGNsaWVudC5jaGVja19j b21wbGV0ZWQoKQorCisKK0BweXRlc3QuZml4dHVyZQorZGVmIGNvbm4oYWNjZXB0KToKKyAgICAi IiIKKyAgICBSZXR1cm5zIGFuIGFjY2VwdGVkLCB3cmFwcGVkIHBxMyBjb25uZWN0aW9uIHRvIGEg cHN5Y29wZzIgY2xpZW50LiBUaGUgc29ja2V0CisgICAgd2lsbCBiZSBjbG9zZWQgd2hlbiB0aGUg dGVzdCBmaW5pc2hlcywgYW5kIHRoZSBjbGllbnQgd2lsbCBiZSBjaGVja2VkIGZvciBhCisgICAg Y2xlYW5seSBjb21wbGV0ZWQgaGFuZHNoYWtlLgorICAgICIiIgorICAgIHNvY2ssIGNsaWVudCA9 IGFjY2VwdCgpCisgICAgd2l0aCBzb2NrOgorICAgICAgICB3aXRoIHBxMy53cmFwKHNvY2ssIGRl YnVnX3N0cmVhbT1zeXMuc3Rkb3V0KSBhcyBjb25uOgorICAgICAgICAgICAgeWllbGQgY29ubgpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcHl0aG9uL2NsaWVudC90ZXN0X2NsaWVudC5weSBiL3NyYy90 ZXN0L3B5dGhvbi9jbGllbnQvdGVzdF9jbGllbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMC4uYzRjOTQ2ZmRhNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5 dGhvbi9jbGllbnQvdGVzdF9jbGllbnQucHkKQEAgLTAsMCArMSwxODAgQEAKKyMKKyMgQ29weXJp Z2h0IDIwMjEgVk13YXJlLCBJbmMuCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBQb3N0Z3Jl U1FMCisjCisKK2ltcG9ydCBiYXNlNjQKK2ltcG9ydCBzeXMKKworaW1wb3J0IHBzeWNvcGcyCitp bXBvcnQgcHl0ZXN0Citmcm9tIGNyeXB0b2dyYXBoeS5oYXptYXQucHJpbWl0aXZlcyBpbXBvcnQg aGFzaGVzLCBobWFjCisKK2ltcG9ydCBwcTMKKworCitkZWYgZmluaXNoX2hhbmRzaGFrZShjb25u KToKKyAgICAiIiIKKyAgICBTZW5kcyB0aGUgQXV0aGVudGljYXRpb25PSyBtZXNzYWdlIGFuZCB0 aGUgc3RhbmRhcmQgb3BlbmluZyBzYWx2byBvZiBzZXJ2ZXIKKyAgICBtZXNzYWdlcywgdGhlbiBh c3NlcnRzIHRoYXQgdGhlIGNsaWVudCBpbW1lZGlhdGVseSBzZW5kcyBhIFRlcm1pbmF0ZSBtZXNz YWdlCisgICAgdG8gY2xvc2UgdGhlIGNvbm5lY3Rpb24gY2xlYW5seS4KKyAgICAiIiIKKyAgICBw cTMuc2VuZChjb25uLCBwcTMudHlwZXMuQXV0aG5SZXF1ZXN0LCB0eXBlPXBxMy5hdXRobi5PSykK KyAgICBwcTMuc2VuZChjb25uLCBwcTMudHlwZXMuUGFyYW1ldGVyU3RhdHVzLCBuYW1lPWIiY2xp ZW50X2VuY29kaW5nIiwgdmFsdWU9YiJVVEYtOCIpCisgICAgcHEzLnNlbmQoY29ubiwgcHEzLnR5 cGVzLlBhcmFtZXRlclN0YXR1cywgbmFtZT1iIkRhdGVTdHlsZSIsIHZhbHVlPWIiSVNPLCBNRFki KQorICAgIHBxMy5zZW5kKGNvbm4sIHBxMy50eXBlcy5SZWFkeUZvclF1ZXJ5LCBzdGF0dXM9YiJJ IikKKworICAgIHBrdCA9IHBxMy5yZWN2MShjb25uKQorICAgIGFzc2VydCBwa3QudHlwZSA9PSBw cTMudHlwZXMuVGVybWluYXRlCisKKworZGVmIHRlc3RfaGFuZHNoYWtlKGNvbm4pOgorICAgIHN0 YXJ0dXAgPSBwcTMucmVjdjEoY29ubiwgY2xzPXBxMy5TdGFydHVwKQorICAgIGFzc2VydCBzdGFy dHVwLnByb3RvID09IHBxMy5wcm90b2NvbCgzLCAwKQorCisgICAgZmluaXNoX2hhbmRzaGFrZShj b25uKQorCisKK2RlZiB0ZXN0X2Fib3J0ZWRfY29ubmVjdGlvbihhY2NlcHQpOgorICAgICIiIgor ICAgIE1ha2Ugc3VyZSB0aGUgY2xpZW50IGNvcnJlY3RseSByZXBvcnRzIGFuIGVhcmx5IGNsb3Nl IGR1cmluZyBoYW5kc2hha2VzLgorICAgICIiIgorICAgIHNvY2ssIGNsaWVudCA9IGFjY2VwdCgp CisgICAgc29jay5jbG9zZSgpCisKKyAgICBleHBlY3RlZCA9ICJzZXJ2ZXIgY2xvc2VkIHRoZSBj b25uZWN0aW9uIHVuZXhwZWN0ZWRseSIKKyAgICB3aXRoIHB5dGVzdC5yYWlzZXMocHN5Y29wZzIu T3BlcmF0aW9uYWxFcnJvciwgbWF0Y2g9ZXhwZWN0ZWQpOgorICAgICAgICBjbGllbnQuY2hlY2tf Y29tcGxldGVkKCkKKworCisjCisjIFNDUkFNLVNIQS0yNTYgKHNlZSBSRkMgNTgwMjogaHR0cHM6 Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzU4MDIpCisjCisKKworQHB5dGVzdC5maXh0dXJlCitk ZWYgcGFzc3dvcmQoKToKKyAgICAiIiIKKyAgICBSZXR1cm5zIGEgcGFzc3dvcmQgZm9yIHVzZSBi eSBib3RoIGNsaWVudCBhbmQgc2VydmVyLgorICAgICIiIgorICAgICMgVE9ETzogcGFyYW1ldGVy aXplIHRoaXMgd2l0aCBwYXNzd29yZHMgdGhhdCByZXF1aXJlIFNBU0xwcmVwLgorICAgIHJldHVy biAic2VjcmV0IgorCisKK0BweXRlc3QuZml4dHVyZQorZGVmIHB3Y29ubihhY2NlcHQsIHBhc3N3 b3JkKToKKyAgICAiIiIKKyAgICBMaWtlIHRoZSBjb25uIGZpeHR1cmUsIGJ1dCB1c2VzIGEgcGFz c3dvcmQgaW4gdGhlIGNvbm5lY3Rpb24uCisgICAgIiIiCisgICAgc29jaywgY2xpZW50ID0gYWNj ZXB0KHBhc3N3b3JkPXBhc3N3b3JkKQorICAgIHdpdGggc29jazoKKyAgICAgICAgd2l0aCBwcTMu d3JhcChzb2NrLCBkZWJ1Z19zdHJlYW09c3lzLnN0ZG91dCkgYXMgY29ubjoKKyAgICAgICAgICAg IHlpZWxkIGNvbm4KKworCitkZWYgc2hhMjU2KGRhdGEpOgorICAgICIiIlRoZSBIKHN0cikgZnVu Y3Rpb24gZnJvbSBTZWN0aW9uIDIuMi4iIiIKKyAgICBkaWdlc3QgPSBoYXNoZXMuSGFzaChoYXNo ZXMuU0hBMjU2KCkpCisgICAgZGlnZXN0LnVwZGF0ZShkYXRhKQorICAgIHJldHVybiBkaWdlc3Qu ZmluYWxpemUoKQorCisKK2RlZiBobWFjXzI1NihrZXksIGRhdGEpOgorICAgICIiIlRoZSBITUFD KGtleSwgc3RyKSBmdW5jdGlvbiBmcm9tIFNlY3Rpb24gMi4yLiIiIgorICAgIGggPSBobWFjLkhN QUMoa2V5LCBoYXNoZXMuU0hBMjU2KCkpCisgICAgaC51cGRhdGUoZGF0YSkKKyAgICByZXR1cm4g aC5maW5hbGl6ZSgpCisKKworZGVmIHhvcihhLCBiKToKKyAgICAiIiJUaGUgWE9SIG9wZXJhdGlv biBmcm9tIFNlY3Rpb24gMi4yLiIiIgorICAgIHJlcyA9IGJ5dGVhcnJheShhKQorICAgIGZvciBp LCBieXRlIGluIGVudW1lcmF0ZShiKToKKyAgICAgICAgcmVzW2ldIF49IGJ5dGUKKyAgICByZXR1 cm4gYnl0ZXMocmVzKQorCisKK2RlZiBoX2koZGF0YSwgc2FsdCwgaSk6CisgICAgIiIiVGhlIEhp KHN0ciwgc2FsdCwgaSkgZnVuY3Rpb24gZnJvbSBTZWN0aW9uIDIuMi4iIiIKKyAgICBhc3NlcnQg aSA+IDAKKworICAgIGFjYyA9IGhtYWNfMjU2KGRhdGEsIHNhbHQgKyBiIlx4MDBceDAwXHgwMFx4 MDEiKQorICAgIGxhc3QgPSBhY2MKKyAgICBpIC09IDEKKworICAgIHdoaWxlIGk6CisgICAgICAg IHUgPSBobWFjXzI1NihkYXRhLCBsYXN0KQorICAgICAgICBhY2MgPSB4b3IoYWNjLCB1KQorCisg ICAgICAgIGxhc3QgPSB1CisgICAgICAgIGkgLT0gMQorCisgICAgcmV0dXJuIGFjYworCisKK2Rl ZiB0ZXN0X3NjcmFtKHB3Y29ubiwgcGFzc3dvcmQpOgorICAgIHN0YXJ0dXAgPSBwcTMucmVjdjEo cHdjb25uLCBjbHM9cHEzLlN0YXJ0dXApCisgICAgYXNzZXJ0IHN0YXJ0dXAucHJvdG8gPT0gcHEz LnByb3RvY29sKDMsIDApCisKKyAgICBwcTMuc2VuZCgKKyAgICAgICAgcHdjb25uLAorICAgICAg ICBwcTMudHlwZXMuQXV0aG5SZXF1ZXN0LAorICAgICAgICB0eXBlPXBxMy5hdXRobi5TQVNMLAor ICAgICAgICBib2R5PVtiIlNDUkFNLVNIQS0yNTYiLCBiIiJdLAorICAgICkKKworICAgICMgR2V0 IHRoZSBjbGllbnQtZmlyc3QtbWVzc2FnZS4KKyAgICBwa3QgPSBwcTMucmVjdjEocHdjb25uKQor ICAgIGFzc2VydCBwa3QudHlwZSA9PSBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlCisKKyAgICBp bml0aWFsID0gcHEzLlNBU0xJbml0aWFsUmVzcG9uc2UucGFyc2UocGt0LnBheWxvYWQpCisgICAg YXNzZXJ0IGluaXRpYWwubmFtZSA9PSBiIlNDUkFNLVNIQS0yNTYiCisKKyAgICBjX2JpbmQsIGF1 dGh6aWQsIGNfbmFtZSwgY19ub25jZSA9IGluaXRpYWwuZGF0YS5zcGxpdChiIiwiKQorICAgIGFz c2VydCBjX2JpbmQgPT0gYiJuIiAgIyBubyBjaGFubmVsIGJpbmRpbmdzIG9uIGEgcGxhaW50ZXh0 IGNvbm5lY3Rpb24KKyAgICBhc3NlcnQgYXV0aHppZCA9PSBiIiIgICMgd2UgZG9uJ3Qgc3VwcG9y dCBhdXRoemlkIGN1cnJlbnRseQorICAgIGFzc2VydCBjX25hbWUgPT0gYiJuPSIgICMgbGlicHEg ZG9lc24ndCBob25vciB0aGUgR1MyIHVzZXJuYW1lCisgICAgYXNzZXJ0IGNfbm9uY2Uuc3RhcnRz d2l0aChiInI9IikKKworICAgICMgU2VuZCB0aGUgc2VydmVyLWZpcnN0LW1lc3NhZ2UuCisgICAg c2FsdCA9IGIiMTIzNDUiCisgICAgaXRlcmF0aW9ucyA9IDIKKworICAgIHNfbm9uY2UgPSBjX25v bmNlICsgYiJzb21lbm9uY2UiCisgICAgc19zYWx0ID0gYiJzPSIgKyBiYXNlNjQuYjY0ZW5jb2Rl KHNhbHQpCisgICAgc19pdGVyYXRpb25zID0gYiJpPSVkIiAlIGl0ZXJhdGlvbnMKKworICAgIG1z ZyA9IGIiLCIuam9pbihbc19ub25jZSwgc19zYWx0LCBzX2l0ZXJhdGlvbnNdKQorICAgIHBxMy5z ZW5kKHB3Y29ubiwgcHEzLnR5cGVzLkF1dGhuUmVxdWVzdCwgdHlwZT1wcTMuYXV0aG4uU0FTTENv bnRpbnVlLCBib2R5PW1zZykKKworICAgICMgR2V0IHRoZSBjbGllbnQtZmluYWwtbWVzc2FnZS4K KyAgICBwa3QgPSBwcTMucmVjdjEocHdjb25uKQorICAgIGFzc2VydCBwa3QudHlwZSA9PSBwcTMu dHlwZXMuUGFzc3dvcmRNZXNzYWdlCisKKyAgICBjX2JpbmRfZmluYWwsIGNfbm9uY2VfZmluYWws IGNfcHJvb2YgPSBwa3QucGF5bG9hZC5zcGxpdChiIiwiKQorICAgIGFzc2VydCBjX2JpbmRfZmlu YWwgPT0gYiJjPSIgKyBiYXNlNjQuYjY0ZW5jb2RlKGNfYmluZCArIGIiLCIgKyBhdXRoemlkICsg YiIsIikKKyAgICBhc3NlcnQgY19ub25jZV9maW5hbCA9PSBzX25vbmNlCisKKyAgICAjIENhbGN1 bGF0ZSB3aGF0IHRoZSBjbGllbnQgcHJvb2Ygc2hvdWxkIGJlLgorICAgIHNhbHRlZF9wYXNzd29y ZCA9IGhfaShwYXNzd29yZC5lbmNvZGUoImFzY2lpIiksIHNhbHQsIGl0ZXJhdGlvbnMpCisgICAg Y2xpZW50X2tleSA9IGhtYWNfMjU2KHNhbHRlZF9wYXNzd29yZCwgYiJDbGllbnQgS2V5IikKKyAg ICBzdG9yZWRfa2V5ID0gc2hhMjU2KGNsaWVudF9rZXkpCisKKyAgICBhdXRoX21lc3NhZ2UgPSBi IiwiLmpvaW4oCisgICAgICAgIFtjX25hbWUsIGNfbm9uY2UsIHNfbm9uY2UsIHNfc2FsdCwgc19p dGVyYXRpb25zLCBjX2JpbmRfZmluYWwsIGNfbm9uY2VfZmluYWxdCisgICAgKQorICAgIGNsaWVu dF9zaWduYXR1cmUgPSBobWFjXzI1NihzdG9yZWRfa2V5LCBhdXRoX21lc3NhZ2UpCisgICAgY2xp ZW50X3Byb29mID0geG9yKGNsaWVudF9rZXksIGNsaWVudF9zaWduYXR1cmUpCisKKyAgICBleHBl Y3RlZCA9IGIicD0iICsgYmFzZTY0LmI2NGVuY29kZShjbGllbnRfcHJvb2YpCisgICAgYXNzZXJ0 IGNfcHJvb2YgPT0gZXhwZWN0ZWQKKworICAgICMgU2VuZCB0aGUgY29ycmVjdCBzZXJ2ZXIgc2ln bmF0dXJlLgorICAgIHNlcnZlcl9rZXkgPSBobWFjXzI1NihzYWx0ZWRfcGFzc3dvcmQsIGIiU2Vy dmVyIEtleSIpCisgICAgc2VydmVyX3NpZ25hdHVyZSA9IGhtYWNfMjU2KHNlcnZlcl9rZXksIGF1 dGhfbWVzc2FnZSkKKworICAgIHNfdmVyaWZ5ID0gYiJ2PSIgKyBiYXNlNjQuYjY0ZW5jb2RlKHNl cnZlcl9zaWduYXR1cmUpCisgICAgcHEzLnNlbmQocHdjb25uLCBwcTMudHlwZXMuQXV0aG5SZXF1 ZXN0LCB0eXBlPXBxMy5hdXRobi5TQVNMRmluYWwsIGJvZHk9c192ZXJpZnkpCisKKyAgICAjIERv bmUhCisgICAgZmluaXNoX2hhbmRzaGFrZShwd2Nvbm4pCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9w eXRob24vY2xpZW50L3Rlc3Rfb2F1dGgucHkgYi9zcmMvdGVzdC9weXRob24vY2xpZW50L3Rlc3Rf b2F1dGgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYTc1NGE5YzBi NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5dGhvbi9jbGllbnQvdGVzdF9vYXV0aC5w eQpAQCAtMCwwICsxLDkzNiBAQAorIworIyBDb3B5cmlnaHQgMjAyMSBWTXdhcmUsIEluYy4KKyMg U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IFBvc3RncmVTUUwKKyMKKworaW1wb3J0IGJhc2U2NAor aW1wb3J0IGh0dHAuc2VydmVyCitpbXBvcnQganNvbgoraW1wb3J0IHNlY3JldHMKK2ltcG9ydCBz eXMKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0aW1lCitpbXBvcnQgdXJsbGliLnBhcnNlCisK K2ltcG9ydCBwc3ljb3BnMgoraW1wb3J0IHB5dGVzdAorCitpbXBvcnQgcHEzCisKK2Zyb20gLmNv bmZ0ZXN0IGltcG9ydCBCTE9DS0lOR19USU1FT1VUCisKKworZGVmIGZpbmlzaF9oYW5kc2hha2Uo Y29ubik6CisgICAgIiIiCisgICAgU2VuZHMgdGhlIEF1dGhlbnRpY2F0aW9uT0sgbWVzc2FnZSBh bmQgdGhlIHN0YW5kYXJkIG9wZW5pbmcgc2Fsdm8gb2Ygc2VydmVyCisgICAgbWVzc2FnZXMsIHRo ZW4gYXNzZXJ0cyB0aGF0IHRoZSBjbGllbnQgaW1tZWRpYXRlbHkgc2VuZHMgYSBUZXJtaW5hdGUg bWVzc2FnZQorICAgIHRvIGNsb3NlIHRoZSBjb25uZWN0aW9uIGNsZWFubHkuCisgICAgIiIiCisg ICAgcHEzLnNlbmQoY29ubiwgcHEzLnR5cGVzLkF1dGhuUmVxdWVzdCwgdHlwZT1wcTMuYXV0aG4u T0spCisgICAgcHEzLnNlbmQoY29ubiwgcHEzLnR5cGVzLlBhcmFtZXRlclN0YXR1cywgbmFtZT1i ImNsaWVudF9lbmNvZGluZyIsIHZhbHVlPWIiVVRGLTgiKQorICAgIHBxMy5zZW5kKGNvbm4sIHBx My50eXBlcy5QYXJhbWV0ZXJTdGF0dXMsIG5hbWU9YiJEYXRlU3R5bGUiLCB2YWx1ZT1iIklTTywg TURZIikKKyAgICBwcTMuc2VuZChjb25uLCBwcTMudHlwZXMuUmVhZHlGb3JRdWVyeSwgc3RhdHVz PWIiSSIpCisKKyAgICBwa3QgPSBwcTMucmVjdjEoY29ubikKKyAgICBhc3NlcnQgcGt0LnR5cGUg PT0gcHEzLnR5cGVzLlRlcm1pbmF0ZQorCisKKyMKKyMgT0FVVEhCRUFSRVIgKHNlZSBSRkMgNzYy ODogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc2MjgpCisjCisKKworZGVmIHN0YXJ0 X29hdXRoX2hhbmRzaGFrZShjb25uKToKKyAgICAiIiIKKyAgICBOZWdvdGlhdGVzIGFuIE9BVVRI QkVBUkVSIFNBU0wgY2hhbGxlbmdlLiBSZXR1cm5zIHRoZSBjbGllbnQncyBpbml0aWFsCisgICAg cmVzcG9uc2UgZGF0YS4KKyAgICAiIiIKKyAgICBzdGFydHVwID0gcHEzLnJlY3YxKGNvbm4sIGNs cz1wcTMuU3RhcnR1cCkKKyAgICBhc3NlcnQgc3RhcnR1cC5wcm90byA9PSBwcTMucHJvdG9jb2wo MywgMCkKKworICAgIHBxMy5zZW5kKAorICAgICAgICBjb25uLCBwcTMudHlwZXMuQXV0aG5SZXF1 ZXN0LCB0eXBlPXBxMy5hdXRobi5TQVNMLCBib2R5PVtiIk9BVVRIQkVBUkVSIiwgYiIiXQorICAg ICkKKworICAgIHBrdCA9IHBxMy5yZWN2MShjb25uKQorICAgIGFzc2VydCBwa3QudHlwZSA9PSBw cTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlCisKKyAgICBpbml0aWFsID0gcHEzLlNBU0xJbml0aWFs UmVzcG9uc2UucGFyc2UocGt0LnBheWxvYWQpCisgICAgYXNzZXJ0IGluaXRpYWwubmFtZSA9PSBi Ik9BVVRIQkVBUkVSIgorCisgICAgcmV0dXJuIGluaXRpYWwuZGF0YQorCisKK2RlZiBnZXRfYXV0 aF92YWx1ZShpbml0aWFsKToKKyAgICAiIiIKKyAgICBGaW5kcyB0aGUgYXV0aCB2YWx1ZSAoZS5n LiAiQmVhcmVyIHNvbWVkYXRhLi4uIiBpbiB0aGUgY2xpZW50J3MgaW5pdGlhbCBTQVNMCisgICAg cmVzcG9uc2UuCisgICAgIiIiCisgICAga3ZwYWlycyA9IGluaXRpYWwuc3BsaXQoYiJceDAxIikK KyAgICBhc3NlcnQga3ZwYWlyc1swXSA9PSBiIm4sLCIgICMgbm8gY2hhbm5lbCBiaW5kaW5nIG9y IGF1dGh6aWQKKyAgICBhc3NlcnQga3ZwYWlyc1syXSA9PSBiIiIgICMgZW5kcyB3aXRoIGFuIGVt cHR5IGt2cGFpcgorICAgIGFzc2VydCBrdnBhaXJzWzNdID09IGIiIiAgIyAuLi5hbmQgdGhlcmUn cyBub3RoaW5nIGFmdGVyIGl0CisgICAgYXNzZXJ0IGxlbihrdnBhaXJzKSA9PSA0CisKKyAgICBr ZXksIHZhbHVlID0ga3ZwYWlyc1sxXS5zcGxpdChiIj0iLCAyKQorICAgIGFzc2VydCBrZXkgPT0g YiJhdXRoIgorCisgICAgcmV0dXJuIHZhbHVlCisKKworZGVmIHh0ZXN0X29hdXRoX3N1Y2Nlc3Mo Y29ubik6ICAjIFRPRE8KKyAgICBpbml0aWFsID0gc3RhcnRfb2F1dGhfaGFuZHNoYWtlKGNvbm4p CisKKyAgICBhdXRoID0gZ2V0X2F1dGhfdmFsdWUoaW5pdGlhbCkKKyAgICBhc3NlcnQgYXV0aC5z dGFydHN3aXRoKGIiQmVhcmVyICIpCisKKyAgICAjIEFjY2VwdCB0aGUgdG9rZW4uIFRPRE8gYWN0 dWFsbHkgdmFsaWRhdGUKKyAgICBwcTMuc2VuZChjb25uLCBwcTMudHlwZXMuQXV0aG5SZXF1ZXN0 LCB0eXBlPXBxMy5hdXRobi5TQVNMRmluYWwpCisgICAgZmluaXNoX2hhbmRzaGFrZShjb25uKQor CisKK2NsYXNzIE9wZW5JRFByb3ZpZGVyKHRocmVhZGluZy5UaHJlYWQpOgorICAgICIiIgorICAg IEEgdGhyZWFkIHRoYXQgcnVucyBhIG1vY2sgT3BlbklEIHByb3ZpZGVyIHNlcnZlci4KKyAgICAi IiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqLCBwb3J0KToKKyAgICAgICAgc3VwZXIoKS5f X2luaXRfXygpCisKKyAgICAgICAgc2VsZi5leGNlcHRpb24gPSBOb25lCisKKyAgICAgICAgYWRk ciA9ICgiIiwgcG9ydCkKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZWxmLl9TZXJ2ZXIoYWRkciwg c2VsZi5fSGFuZGxlcikKKworICAgICAgICAjIFRPRE86IGFsbG93IEhUVFBTIG9ubHksIHNvbWVo b3cKKyAgICAgICAgb2F1dGggPSBzZWxmLl9PQXV0aFN0YXRlKCkKKyAgICAgICAgb2F1dGguaG9z dCA9IGYibG9jYWxob3N0Ontwb3J0fSIKKyAgICAgICAgb2F1dGguaXNzdWVyID0gZiJodHRwOi8v bG9jYWxob3N0Ontwb3J0fSIKKworICAgICAgICAjIFRoZSBmb2xsb3dpbmcgZW5kcG9pbnRzIGFy ZSByZXF1aXJlZCB0byBiZSBhZHZlcnRpc2VkIGJ5IHByb3ZpZGVycywKKyAgICAgICAgIyBldmVu IHRob3VnaCBvdXIgY2hvc2VuIGNsaWVudCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBhY3R1YWxs eSBtYWtlCisgICAgICAgICMgdXNlIG9mIHRoZW0uCisgICAgICAgIG9hdXRoLnJlZ2lzdGVyX2Vu ZHBvaW50KAorICAgICAgICAgICAgImF1dGhvcml6YXRpb25fZW5kcG9pbnQiLCAiUE9TVCIsICIv YXV0aG9yaXplIiwgc2VsZi5fYXV0aG9yaXphdGlvbl9oYW5kbGVyCisgICAgICAgICkKKyAgICAg ICAgb2F1dGgucmVnaXN0ZXJfZW5kcG9pbnQoImp3a3NfdXJpIiwgIkdFVCIsICIva2V5cyIsIHNl bGYuX2p3a3NfaGFuZGxlcikKKworICAgICAgICBzZWxmLnNlcnZlci5vYXV0aCA9IG9hdXRoCisK KyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnNlcnZl ci5zZXJ2ZV9mb3JldmVyKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAg ICAgICAgc2VsZi5leGNlcHRpb24gPSBlCisKKyAgICBkZWYgc3RvcChzZWxmLCB0aW1lb3V0PUJM T0NLSU5HX1RJTUVPVVQpOgorICAgICAgICAiIiIKKyAgICAgICAgU2h1dHMgZG93biB0aGUgc2Vy dmVyIGFuZCBqb2lucyBpdHMgdGhyZWFkLiBSYWlzZXMgYW4gZXhjZXB0aW9uIGlmIHRoZQorICAg ICAgICB0aHJlYWQgY291bGQgbm90IGJlIGpvaW5lZCwgb3IgaWYgaXQgdGhyZXcgYW4gZXhjZXB0 aW9uIGl0c2VsZi4gTXVzdAorICAgICAgICBvbmx5IGJlIGNhbGxlZCBvbmNlLCBhZnRlciBzdGFy dCgpLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc2h1dGRvd24oKQorICAgICAg ICBzZWxmLmpvaW4odGltZW91dCkKKworICAgICAgICBpZiBzZWxmLmlzX2FsaXZlKCk6CisgICAg ICAgICAgICByYWlzZSBUaW1lb3V0RXJyb3IoImNsaWVudCB0aHJlYWQgZGlkIG5vdCBoYW5kc2hh a2Ugd2l0aGluIHRoZSB0aW1lb3V0IikKKyAgICAgICAgZWxpZiBzZWxmLmV4Y2VwdGlvbjoKKyAg ICAgICAgICAgIGUgPSBzZWxmLmV4Y2VwdGlvbgorICAgICAgICAgICAgcmFpc2UgZQorCisgICAg Y2xhc3MgX09BdXRoU3RhdGUob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgor ICAgICAgICAgICAgc2VsZi5lbmRwb2ludF9wYXRocyA9IHt9CisgICAgICAgICAgICBzZWxmLl9l bmRwb2ludHMgPSB7fQorCisgICAgICAgIGRlZiByZWdpc3Rlcl9lbmRwb2ludChzZWxmLCBuYW1l LCBtZXRob2QsIHBhdGgsIGZ1bmMpOgorICAgICAgICAgICAgaWYgbWV0aG9kIG5vdCBpbiBzZWxm Ll9lbmRwb2ludHM6CisgICAgICAgICAgICAgICAgc2VsZi5fZW5kcG9pbnRzW21ldGhvZF0gPSB7 fQorCisgICAgICAgICAgICBzZWxmLl9lbmRwb2ludHNbbWV0aG9kXVtwYXRoXSA9IGZ1bmMKKyAg ICAgICAgICAgIHNlbGYuZW5kcG9pbnRfcGF0aHNbbmFtZV0gPSBwYXRoCisKKyAgICAgICAgZGVm IGVuZHBvaW50KHNlbGYsIG1ldGhvZCwgcGF0aCk6CisgICAgICAgICAgICBpZiBtZXRob2Qgbm90 IGluIHNlbGYuX2VuZHBvaW50czoKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAg ICAgICAgICByZXR1cm4gc2VsZi5fZW5kcG9pbnRzW21ldGhvZF0uZ2V0KHBhdGgpCisKKyAgICBj bGFzcyBfU2VydmVyKGh0dHAuc2VydmVyLkhUVFBTZXJ2ZXIpOgorICAgICAgICBkZWYgaGFuZGxl X2Vycm9yKHNlbGYsIHJlcXVlc3QsIGFkZHIpOgorICAgICAgICAgICAgc2VsZi5zaHV0ZG93bl9y ZXF1ZXN0KHJlcXVlc3QpCisgICAgICAgICAgICByYWlzZQorCisgICAgQHN0YXRpY21ldGhvZAor ICAgIGRlZiBfandrc19oYW5kbGVyKGhlYWRlcnMsIHBhcmFtcyk6CisgICAgICAgIHJldHVybiAy MDAsIHsia2V5cyI6IFtdfQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfYXV0aG9yaXph dGlvbl9oYW5kbGVyKGhlYWRlcnMsIHBhcmFtcyk6CisgICAgICAgICMgV2UgZG9uJ3QgYWN0dWFs bHkgd2FudCB0aGlzIHRvIGJlIGNhbGxlZCBkdXJpbmcgdGhlc2UgdGVzdHMgLS0gd2UKKyAgICAg ICAgIyBzaG91bGQgYmUgdXNpbmcgdGhlIGRldmljZSBhdXRob3JpemF0aW9uIGVuZHBvaW50IGlu c3RlYWQuCisgICAgICAgIGFzc2VydCAoCisgICAgICAgICAgICBGYWxzZQorICAgICAgICApLCAi YXV0aG9yaXphdGlvbiBoYW5kbGVyIGNhbGxlZCBpbnN0ZWFkIG9mIGRldmljZSBhdXRob3JpemF0 aW9uIGhhbmRsZXIiCisKKyAgICBjbGFzcyBfSGFuZGxlcihodHRwLnNlcnZlci5CYXNlSFRUUFJl cXVlc3RIYW5kbGVyKToKKyAgICAgICAgdGltZW91dCA9IEJMT0NLSU5HX1RJTUVPVVQKKworICAg ICAgICBkZWYgX2Rpc2NvdmVyeV9oYW5kbGVyKHNlbGYsIGhlYWRlcnMsIHBhcmFtcyk6CisgICAg ICAgICAgICBvYXV0aCA9IHNlbGYuc2VydmVyLm9hdXRoCisKKyAgICAgICAgICAgIGRvYyA9IHsK KyAgICAgICAgICAgICAgICAiaXNzdWVyIjogb2F1dGguaXNzdWVyLAorICAgICAgICAgICAgICAg ICJyZXNwb25zZV90eXBlc19zdXBwb3J0ZWQiOiBbInRva2VuIl0sCisgICAgICAgICAgICAgICAg InN1YmplY3RfdHlwZXNfc3VwcG9ydGVkIjogWyJwdWJsaWMiXSwKKyAgICAgICAgICAgICAgICAi aWRfdG9rZW5fc2lnbmluZ19hbGdfdmFsdWVzX3N1cHBvcnRlZCI6IFsiUlMyNTYiXSwKKyAgICAg ICAgICAgIH0KKworICAgICAgICAgICAgZm9yIG5hbWUsIHBhdGggaW4gb2F1dGguZW5kcG9pbnRf cGF0aHMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBkb2NbbmFtZV0gPSBvYXV0aC5pc3N1ZXIg KyBwYXRoCisKKyAgICAgICAgICAgIHJldHVybiAyMDAsIGRvYworCisgICAgICAgIGRlZiBfaGFu ZGxlKHNlbGYsICosIHBhcmFtcz1Ob25lLCBoYW5kbGVyPU5vbmUpOgorICAgICAgICAgICAgb2F1 dGggPSBzZWxmLnNlcnZlci5vYXV0aAorICAgICAgICAgICAgYXNzZXJ0IHNlbGYuaGVhZGVyc1si SG9zdCJdID09IG9hdXRoLmhvc3QKKworICAgICAgICAgICAgaWYgaGFuZGxlciBpcyBOb25lOgor ICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBvYXV0aC5lbmRwb2ludChzZWxmLmNvbW1hbmQsIHNl bGYucGF0aCkKKyAgICAgICAgICAgICAgICBhc3NlcnQgKAorICAgICAgICAgICAgICAgICAgICBo YW5kbGVyIGlzIG5vdCBOb25lCisgICAgICAgICAgICAgICAgKSwgZiJubyByZWdpc3RlcmVkIGVu ZHBvaW50IGZvciB7c2VsZi5jb21tYW5kfSB7c2VsZi5wYXRofSIKKworICAgICAgICAgICAgY29k ZSwgcmVzcCA9IGhhbmRsZXIoc2VsZi5oZWFkZXJzLCBwYXJhbXMpCisKKyAgICAgICAgICAgIHNl bGYuc2VuZF9yZXNwb25zZShjb2RlKQorICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiQ29u dGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2pzb24iKQorICAgICAgICAgICAgc2VsZi5lbmRfaGVh ZGVycygpCisKKyAgICAgICAgICAgIHJlc3AgPSBqc29uLmR1bXBzKHJlc3ApCisgICAgICAgICAg ICByZXNwID0gcmVzcC5lbmNvZGUoInV0Zi04IikKKyAgICAgICAgICAgIHNlbGYud2ZpbGUud3Jp dGUocmVzcCkKKworICAgICAgICAgICAgc2VsZi5jbG9zZV9jb25uZWN0aW9uID0gVHJ1ZQorCisg ICAgICAgIGRlZiBkb19HRVQoc2VsZik6CisgICAgICAgICAgICBpZiBzZWxmLnBhdGggPT0gIi8u d2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJhdGlvbiI6CisgICAgICAgICAgICAgICAgc2VsZi5f aGFuZGxlKGhhbmRsZXI9c2VsZi5fZGlzY292ZXJ5X2hhbmRsZXIpCisgICAgICAgICAgICAgICAg cmV0dXJuCisKKyAgICAgICAgICAgIHNlbGYuX2hhbmRsZSgpCisKKyAgICAgICAgZGVmIF9yZXF1 ZXN0X2JvZHkoc2VsZik6CisgICAgICAgICAgICBsZW5ndGggPSBzZWxmLmhlYWRlcnNbIkNvbnRl bnQtTGVuZ3RoIl0KKworICAgICAgICAgICAgIyBIYW5kbGUgb25seSBhbiBleHBsaWNpdCBjb250 ZW50LWxlbmd0aC4KKyAgICAgICAgICAgIGFzc2VydCBsZW5ndGggaXMgbm90IE5vbmUKKyAgICAg ICAgICAgIGxlbmd0aCA9IGludChsZW5ndGgpCisKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJm aWxlLnJlYWQobGVuZ3RoKS5kZWNvZGUoInV0Zi04IikKKworICAgICAgICBkZWYgZG9fUE9TVChz ZWxmKToKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmhlYWRlcnNbIkNvbnRlbnQtVHlwZSJdID09 ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiCisKKyAgICAgICAgICAgIGJvZHkg PSBzZWxmLl9yZXF1ZXN0X2JvZHkoKQorICAgICAgICAgICAgcGFyYW1zID0gdXJsbGliLnBhcnNl LnBhcnNlX3FzKGJvZHkpCisKKyAgICAgICAgICAgIHNlbGYuX2hhbmRsZShwYXJhbXM9cGFyYW1z KQorCisKK0BweXRlc3QuZml4dHVyZQorZGVmIG9wZW5pZF9wcm92aWRlcih1bnVzZWRfdGNwX3Bv cnRfZmFjdG9yeSk6CisgICAgIiIiCisgICAgQSBmaXh0dXJlIHRoYXQgcmV0dXJucyB0aGUgT0F1 dGggc3RhdGUgb2YgYSBydW5uaW5nIE9wZW5JRCBwcm92aWRlciBzZXJ2ZXIuIFRoZQorICAgIHNl cnZlciB3aWxsIGJlIHN0b3BwZWQgd2hlbiB0aGUgZml4dHVyZSBpcyB0b3JuIGRvd24uCisgICAg IiIiCisgICAgdGhyZWFkID0gT3BlbklEUHJvdmlkZXIocG9ydD11bnVzZWRfdGNwX3BvcnRfZmFj dG9yeSgpKQorICAgIHRocmVhZC5zdGFydCgpCisKKyAgICB0cnk6CisgICAgICAgIHlpZWxkIHRo cmVhZC5zZXJ2ZXIub2F1dGgKKyAgICBmaW5hbGx5OgorICAgICAgICB0aHJlYWQuc3RvcCgpCisK KworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJzZWNyZXQiLCBbTm9uZSwgIiIsICJodW50ZXIy Il0pCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoInNjb3BlIiwgW05vbmUsICIiLCAib3Blbmlk IGVtYWlsIl0pCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoInJldHJpZXMiLCBbMCwgMV0pCitk ZWYgdGVzdF9vYXV0aF93aXRoX2V4cGxpY2l0X2lzc3VlcigKKyAgICBjYXBmZCwgYWNjZXB0LCBv cGVuaWRfcHJvdmlkZXIsIHJldHJpZXMsIHNjb3BlLCBzZWNyZXQKKyk6CisgICAgY2xpZW50X2lk ID0gc2VjcmV0cy50b2tlbl9oZXgoKQorCisgICAgc29jaywgY2xpZW50ID0gYWNjZXB0KAorICAg ICAgICBvYXV0aF9pc3N1ZXI9b3BlbmlkX3Byb3ZpZGVyLmlzc3VlciwKKyAgICAgICAgb2F1dGhf Y2xpZW50X2lkPWNsaWVudF9pZCwKKyAgICAgICAgb2F1dGhfY2xpZW50X3NlY3JldD1zZWNyZXQs CisgICAgICAgIG9hdXRoX3Njb3BlPXNjb3BlLAorICAgICkKKworICAgIGRldmljZV9jb2RlID0g c2VjcmV0cy50b2tlbl9oZXgoKQorICAgIHVzZXJfY29kZSA9IGYie3NlY3JldHMudG9rZW5faGV4 KDIpfS17c2VjcmV0cy50b2tlbl9oZXgoMil9IgorICAgIHZlcmlmaWNhdGlvbl91cmwgPSAiaHR0 cHM6Ly9leGFtcGxlLmNvbS9kZXZpY2UiCisKKyAgICBhY2Nlc3NfdG9rZW4gPSBzZWNyZXRzLnRv a2VuX3VybHNhZmUoKQorCisgICAgZGVmIGNoZWNrX2NsaWVudF9hdXRobihoZWFkZXJzLCBwYXJh bXMpOgorICAgICAgICBpZiBub3Qgc2VjcmV0OgorICAgICAgICAgICAgYXNzZXJ0IHBhcmFtc1si Y2xpZW50X2lkIl0gPT0gW2NsaWVudF9pZF0KKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAg ICMgUmVxdWlyZSB0aGUgY2xpZW50IHRvIHVzZSBCYXNpYyBhdXRobjsgcmVxdWVzdC1ib2R5IGNy ZWRlbnRpYWxzIGFyZQorICAgICAgICAjIE5PVCBSRUNPTU1FTkRFRCAoUkZDIDY3NDksIFNlYy4g Mi4zLjEpLgorICAgICAgICBhc3NlcnQgIkF1dGhvcml6YXRpb24iIGluIGhlYWRlcnMKKworICAg ICAgICBtZXRob2QsIGNyZWRzID0gaGVhZGVyc1siQXV0aG9yaXphdGlvbiJdLnNwbGl0KCkKKyAg ICAgICAgYXNzZXJ0IG1ldGhvZCA9PSAiQmFzaWMiCisKKyAgICAgICAgZXhwZWN0ZWQgPSBmIntj bGllbnRfaWR9OntzZWNyZXR9IgorICAgICAgICBhc3NlcnQgYmFzZTY0LmI2NGRlY29kZShjcmVk cykgPT0gZXhwZWN0ZWQuZW5jb2RlKCJhc2NpaSIpCisKKyAgICAjIFNldCB1cCBvdXIgcHJvdmlk ZXIgY2FsbGJhY2tzLgorICAgICMgTk9URSB0aGF0IHRoZXNlIGNhbGxiYWNrcyB3aWxsIGJlIGNh bGxlZCBvbiBhIGJhY2tncm91bmQgdGhyZWFkLiBEb24ndCBkbworICAgICMgYW55IHVucHJvdGVj dGVkIHN0YXRlIG11dGF0aW9uIGhlcmUuCisKKyAgICBkZWYgYXV0aG9yaXphdGlvbl9lbmRwb2lu dChoZWFkZXJzLCBwYXJhbXMpOgorICAgICAgICBjaGVja19jbGllbnRfYXV0aG4oaGVhZGVycywg cGFyYW1zKQorCisgICAgICAgIGlmIHNjb3BlOgorICAgICAgICAgICAgYXNzZXJ0IHBhcmFtc1si c2NvcGUiXSA9PSBbc2NvcGVdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgInNj b3BlIiBub3QgaW4gcGFyYW1zCisKKyAgICAgICAgcmVzcCA9IHsKKyAgICAgICAgICAgICJkZXZp Y2VfY29kZSI6IGRldmljZV9jb2RlLAorICAgICAgICAgICAgInVzZXJfY29kZSI6IHVzZXJfY29k ZSwKKyAgICAgICAgICAgICJpbnRlcnZhbCI6IDAsCisgICAgICAgICAgICAidmVyaWZpY2F0aW9u X3VyaSI6IHZlcmlmaWNhdGlvbl91cmwsCisgICAgICAgICAgICAiZXhwaXJlc19pbiI6IDUsCisg ICAgICAgIH0KKworICAgICAgICByZXR1cm4gMjAwLCByZXNwCisKKyAgICBvcGVuaWRfcHJvdmlk ZXIucmVnaXN0ZXJfZW5kcG9pbnQoCisgICAgICAgICJkZXZpY2VfYXV0aG9yaXphdGlvbl9lbmRw b2ludCIsICJQT1NUIiwgIi9kZXZpY2UiLCBhdXRob3JpemF0aW9uX2VuZHBvaW50CisgICAgKQor CisgICAgYXR0ZW1wdHMgPSAwCisgICAgcmV0cnlfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKwor ICAgIGRlZiB0b2tlbl9lbmRwb2ludChoZWFkZXJzLCBwYXJhbXMpOgorICAgICAgICBjaGVja19j bGllbnRfYXV0aG4oaGVhZGVycywgcGFyYW1zKQorCisgICAgICAgIGFzc2VydCBwYXJhbXNbImdy YW50X3R5cGUiXSA9PSBbInVybjppZXRmOnBhcmFtczpvYXV0aDpncmFudC10eXBlOmRldmljZV9j b2RlIl0KKyAgICAgICAgYXNzZXJ0IHBhcmFtc1siZGV2aWNlX2NvZGUiXSA9PSBbZGV2aWNlX2Nv ZGVdCisKKyAgICAgICAgbm93ID0gdGltZS5tb25vdG9uaWMoKQorCisgICAgICAgIHdpdGggcmV0 cnlfbG9jazoKKyAgICAgICAgICAgIG5vbmxvY2FsIGF0dGVtcHRzCisKKyAgICAgICAgICAgICMg SWYgdGhlIHRlc3Qgd2FudHMgdG8gZm9yY2UgdGhlIGNsaWVudCB0byByZXRyeSwgcmV0dXJuIGFu CisgICAgICAgICAgICAjIGF1dGhvcml6YXRpb25fcGVuZGluZyByZXNwb25zZSBhbmQgZGVjcmVt ZW50IHRoZSByZXRyeSBjb3VudC4KKyAgICAgICAgICAgIGlmIGF0dGVtcHRzIDwgcmV0cmllczoK KyAgICAgICAgICAgICAgICBhdHRlbXB0cyArPSAxCisgICAgICAgICAgICAgICAgcmV0dXJuIDQw MCwgeyJlcnJvciI6ICJhdXRob3JpemF0aW9uX3BlbmRpbmcifQorCisgICAgICAgICMgU3VjY2Vz c2Z1bGx5IGZpbmlzaCB0aGUgcmVxdWVzdCBieSBzZW5kaW5nIHRoZSBhY2Nlc3MgYmVhcmVyIHRv a2VuLgorICAgICAgICByZXNwID0geworICAgICAgICAgICAgImFjY2Vzc190b2tlbiI6IGFjY2Vz c190b2tlbiwKKyAgICAgICAgICAgICJ0b2tlbl90eXBlIjogImJlYXJlciIsCisgICAgICAgIH0K KworICAgICAgICByZXR1cm4gMjAwLCByZXNwCisKKyAgICBvcGVuaWRfcHJvdmlkZXIucmVnaXN0 ZXJfZW5kcG9pbnQoCisgICAgICAgICJ0b2tlbl9lbmRwb2ludCIsICJQT1NUIiwgIi90b2tlbiIs IHRva2VuX2VuZHBvaW50CisgICAgKQorCisgICAgd2l0aCBzb2NrOgorICAgICAgICB3aXRoIHBx My53cmFwKHNvY2ssIGRlYnVnX3N0cmVhbT1zeXMuc3Rkb3V0KSBhcyBjb25uOgorICAgICAgICAg ICAgIyBJbml0aWF0ZSBhIGhhbmRzaGFrZSwgd2hpY2ggc2hvdWxkIHJlc3VsdCBpbiB0aGUgYWJv dmUgZW5kcG9pbnRzCisgICAgICAgICAgICAjIGJlaW5nIGNhbGxlZC4KKyAgICAgICAgICAgIGlu aXRpYWwgPSBzdGFydF9vYXV0aF9oYW5kc2hha2UoY29ubikKKworICAgICAgICAgICAgIyBWYWxp ZGF0ZSBhbmQgYWNjZXB0IHRoZSB0b2tlbi4KKyAgICAgICAgICAgIGF1dGggPSBnZXRfYXV0aF92 YWx1ZShpbml0aWFsKQorICAgICAgICAgICAgYXNzZXJ0IGF1dGggPT0gZiJCZWFyZXIge2FjY2Vz c190b2tlbn0iLmVuY29kZSgiYXNjaWkiKQorCisgICAgICAgICAgICBwcTMuc2VuZChjb25uLCBw cTMudHlwZXMuQXV0aG5SZXF1ZXN0LCB0eXBlPXBxMy5hdXRobi5TQVNMRmluYWwpCisgICAgICAg ICAgICBmaW5pc2hfaGFuZHNoYWtlKGNvbm4pCisKKyAgICBpZiByZXRyaWVzOgorICAgICAgICAj IEZpbmFsbHksIG1ha2Ugc3VyZSB0aGF0IHRoZSBjbGllbnQgcHJvbXB0ZWQgdGhlIHVzZXIgd2l0 aCB0aGUgZXhwZWN0ZWQKKyAgICAgICAgIyBhdXRob3JpemF0aW9uIFVSTCBhbmQgdXNlciBjb2Rl LgorICAgICAgICBleHBlY3RlZCA9IGYiVmlzaXQge3ZlcmlmaWNhdGlvbl91cmx9IGFuZCBlbnRl ciB0aGUgY29kZToge3VzZXJfY29kZX0iCisgICAgICAgIF8sIHN0ZGVyciA9IGNhcGZkLnJlYWRv dXRlcnIoKQorICAgICAgICBhc3NlcnQgZXhwZWN0ZWQgaW4gc3RkZXJyCisKKworZGVmIHRlc3Rf b2F1dGhfcmVxdWlyZXNfY2xpZW50X2lkKGFjY2VwdCwgb3BlbmlkX3Byb3ZpZGVyKToKKyAgICBz b2NrLCBjbGllbnQgPSBhY2NlcHQoCisgICAgICAgIG9hdXRoX2lzc3Vlcj1vcGVuaWRfcHJvdmlk ZXIuaXNzdWVyLAorICAgICAgICAjIERvIG5vdCBzZXQgYSBjbGllbnQgSUQ7IHRoaXMgc2hvdWxk IGNhdXNlIGEgY2xpZW50IGVycm9yIGFmdGVyIHRoZQorICAgICAgICAjIHNlcnZlciBhc2tzIGZv ciBPQVVUSEJFQVJFUiBhbmQgdGhlIGNsaWVudCB0cmllcyB0byBjb250YWN0IHRoZQorICAgICAg ICAjIGlzc3Vlci4KKyAgICApCisKKyAgICB3aXRoIHNvY2s6CisgICAgICAgIHdpdGggcHEzLndy YXAoc29jaywgZGVidWdfc3RyZWFtPXN5cy5zdGRvdXQpIGFzIGNvbm46CisgICAgICAgICAgICAj IEluaXRpYXRlIGEgaGFuZHNoYWtlLgorICAgICAgICAgICAgc3RhcnR1cCA9IHBxMy5yZWN2MShj b25uLCBjbHM9cHEzLlN0YXJ0dXApCisgICAgICAgICAgICBhc3NlcnQgc3RhcnR1cC5wcm90byA9 PSBwcTMucHJvdG9jb2woMywgMCkKKworICAgICAgICAgICAgcHEzLnNlbmQoCisgICAgICAgICAg ICAgICAgY29ubiwKKyAgICAgICAgICAgICAgICBwcTMudHlwZXMuQXV0aG5SZXF1ZXN0LAorICAg ICAgICAgICAgICAgIHR5cGU9cHEzLmF1dGhuLlNBU0wsCisgICAgICAgICAgICAgICAgYm9keT1b YiJPQVVUSEJFQVJFUiIsIGIiIl0sCisgICAgICAgICAgICApCisKKyAgICAgICAgICAgICMgVGhl IGNsaWVudCBzaG91bGQgZGlzY29ubmVjdCBhdCB0aGlzIHBvaW50LgorICAgICAgICAgICAgYXNz ZXJ0IG5vdCBjb25uLnJlYWQoKQorCisgICAgZXhwZWN0ZWRfZXJyb3IgPSAibm8gb2F1dGhfY2xp ZW50X2lkIGlzIHNldCIKKyAgICB3aXRoIHB5dGVzdC5yYWlzZXMocHN5Y29wZzIuT3BlcmF0aW9u YWxFcnJvciwgbWF0Y2g9ZXhwZWN0ZWRfZXJyb3IpOgorICAgICAgICBjbGllbnQuY2hlY2tfY29t cGxldGVkKCkKKworCitAcHl0ZXN0Lm1hcmsuc2xvdworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXpl KCJlcnJvcl9jb2RlIiwgWyJhdXRob3JpemF0aW9uX3BlbmRpbmciLCAic2xvd19kb3duIl0pCitA cHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoInJldHJpZXMiLCBbMSwgMl0pCitkZWYgdGVzdF9vYXV0 aF9yZXRyeV9pbnRlcnZhbChhY2NlcHQsIG9wZW5pZF9wcm92aWRlciwgcmV0cmllcywgZXJyb3Jf Y29kZSk6CisgICAgc29jaywgY2xpZW50ID0gYWNjZXB0KAorICAgICAgICBvYXV0aF9pc3N1ZXI9 b3BlbmlkX3Byb3ZpZGVyLmlzc3VlciwKKyAgICAgICAgb2F1dGhfY2xpZW50X2lkPSJzb21lLWlk IiwKKyAgICApCisKKyAgICBleHBlY3RlZF9yZXRyeV9pbnRlcnZhbCA9IDEKKyAgICBhY2Nlc3Nf dG9rZW4gPSBzZWNyZXRzLnRva2VuX3VybHNhZmUoKQorCisgICAgIyBTZXQgdXAgb3VyIHByb3Zp ZGVyIGNhbGxiYWNrcy4KKyAgICAjIE5PVEUgdGhhdCB0aGVzZSBjYWxsYmFja3Mgd2lsbCBiZSBj YWxsZWQgb24gYSBiYWNrZ3JvdW5kIHRocmVhZC4gRG9uJ3QgZG8KKyAgICAjIGFueSB1bnByb3Rl Y3RlZCBzdGF0ZSBtdXRhdGlvbiBoZXJlLgorCisgICAgZGVmIGF1dGhvcml6YXRpb25fZW5kcG9p bnQoaGVhZGVycywgcGFyYW1zKToKKyAgICAgICAgcmVzcCA9IHsKKyAgICAgICAgICAgICJkZXZp Y2VfY29kZSI6ICJteS1kZXZpY2UtY29kZSIsCisgICAgICAgICAgICAidXNlcl9jb2RlIjogIm15 LXVzZXItY29kZSIsCisgICAgICAgICAgICAiaW50ZXJ2YWwiOiBleHBlY3RlZF9yZXRyeV9pbnRl cnZhbCwKKyAgICAgICAgICAgICJ2ZXJpZmljYXRpb25fdXJpIjogImh0dHBzOi8vZXhhbXBsZS5j b20iLAorICAgICAgICAgICAgImV4cGlyZXNfaW4iOiA1LAorICAgICAgICB9CisKKyAgICAgICAg cmV0dXJuIDIwMCwgcmVzcAorCisgICAgb3BlbmlkX3Byb3ZpZGVyLnJlZ2lzdGVyX2VuZHBvaW50 KAorICAgICAgICAiZGV2aWNlX2F1dGhvcml6YXRpb25fZW5kcG9pbnQiLCAiUE9TVCIsICIvZGV2 aWNlIiwgYXV0aG9yaXphdGlvbl9lbmRwb2ludAorICAgICkKKworICAgIGF0dGVtcHRzID0gMAor ICAgIGxhc3RfcmV0cnkgPSBOb25lCisgICAgcmV0cnlfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkK KworICAgIGRlZiB0b2tlbl9lbmRwb2ludChoZWFkZXJzLCBwYXJhbXMpOgorICAgICAgICBub3cg PSB0aW1lLm1vbm90b25pYygpCisKKyAgICAgICAgd2l0aCByZXRyeV9sb2NrOgorICAgICAgICAg ICAgbm9ubG9jYWwgYXR0ZW1wdHMsIGxhc3RfcmV0cnksIGV4cGVjdGVkX3JldHJ5X2ludGVydmFs CisKKyAgICAgICAgICAgICMgTWFrZSBzdXJlIHRoZSByZXRyeSBpbnRlcnZhbCBpcyBiZWluZyBy ZXNwZWN0ZWQgYnkgdGhlIGNsaWVudC4KKyAgICAgICAgICAgIGlmIGxhc3RfcmV0cnkgaXMgbm90 IE5vbmU6CisgICAgICAgICAgICAgICAgaW50ZXJ2YWwgPSBub3cgLSBsYXN0X3JldHJ5CisgICAg ICAgICAgICAgICAgYXNzZXJ0IGludGVydmFsID49IGV4cGVjdGVkX3JldHJ5X2ludGVydmFsCisK KyAgICAgICAgICAgIGxhc3RfcmV0cnkgPSBub3cKKworICAgICAgICAgICAgIyBJZiB0aGUgdGVz dCB3YW50cyB0byBmb3JjZSB0aGUgY2xpZW50IHRvIHJldHJ5LCByZXR1cm4gdGhlIGRlc2lyZWQK KyAgICAgICAgICAgICMgZXJyb3IgcmVzcG9uc2UgYW5kIGRlY3JlbWVudCB0aGUgcmV0cnkgY291 bnQuCisgICAgICAgICAgICBpZiBhdHRlbXB0cyA8IHJldHJpZXM6CisgICAgICAgICAgICAgICAg YXR0ZW1wdHMgKz0gMQorCisgICAgICAgICAgICAgICAgIyBBIHNsb3dfZG93biBjb2RlIHJlcXVp cmVzIHRoZSBjbGllbnQgdG8gYWRkaXRpb25hbGx5IGluY3JlYXNlCisgICAgICAgICAgICAgICAg IyBpdHMgaW50ZXJ2YWwgYnkgZml2ZSBzZWNvbmRzLgorICAgICAgICAgICAgICAgIGlmIGVycm9y X2NvZGUgPT0gInNsb3dfZG93biI6CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3JldHJ5 X2ludGVydmFsICs9IDUKKworICAgICAgICAgICAgICAgIHJldHVybiA0MDAsIHsiZXJyb3IiOiBl cnJvcl9jb2RlfQorCisgICAgICAgICMgU3VjY2Vzc2Z1bGx5IGZpbmlzaCB0aGUgcmVxdWVzdCBi eSBzZW5kaW5nIHRoZSBhY2Nlc3MgYmVhcmVyIHRva2VuLgorICAgICAgICByZXNwID0geworICAg ICAgICAgICAgImFjY2Vzc190b2tlbiI6IGFjY2Vzc190b2tlbiwKKyAgICAgICAgICAgICJ0b2tl bl90eXBlIjogImJlYXJlciIsCisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gMjAwLCByZXNw CisKKyAgICBvcGVuaWRfcHJvdmlkZXIucmVnaXN0ZXJfZW5kcG9pbnQoCisgICAgICAgICJ0b2tl bl9lbmRwb2ludCIsICJQT1NUIiwgIi90b2tlbiIsIHRva2VuX2VuZHBvaW50CisgICAgKQorCisg ICAgd2l0aCBzb2NrOgorICAgICAgICB3aXRoIHBxMy53cmFwKHNvY2ssIGRlYnVnX3N0cmVhbT1z eXMuc3Rkb3V0KSBhcyBjb25uOgorICAgICAgICAgICAgIyBJbml0aWF0ZSBhIGhhbmRzaGFrZSwg d2hpY2ggc2hvdWxkIHJlc3VsdCBpbiB0aGUgYWJvdmUgZW5kcG9pbnRzCisgICAgICAgICAgICAj IGJlaW5nIGNhbGxlZC4KKyAgICAgICAgICAgIGluaXRpYWwgPSBzdGFydF9vYXV0aF9oYW5kc2hh a2UoY29ubikKKworICAgICAgICAgICAgIyBWYWxpZGF0ZSBhbmQgYWNjZXB0IHRoZSB0b2tlbi4K KyAgICAgICAgICAgIGF1dGggPSBnZXRfYXV0aF92YWx1ZShpbml0aWFsKQorICAgICAgICAgICAg YXNzZXJ0IGF1dGggPT0gZiJCZWFyZXIge2FjY2Vzc190b2tlbn0iLmVuY29kZSgiYXNjaWkiKQor CisgICAgICAgICAgICBwcTMuc2VuZChjb25uLCBwcTMudHlwZXMuQXV0aG5SZXF1ZXN0LCB0eXBl PXBxMy5hdXRobi5TQVNMRmluYWwpCisgICAgICAgICAgICBmaW5pc2hfaGFuZHNoYWtlKGNvbm4p CisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKAorICAgICJmYWlsdXJlX21vZGUsIGVycm9y X3BhdHRlcm4iLAorICAgIFsKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgICJlcnJvciI6ICJpbnZhbGlkX2NsaWVudCIsCisgICAgICAgICAgICAg ICAgImVycm9yX2Rlc2NyaXB0aW9uIjogImNsaWVudCBhdXRoZW50aWNhdGlvbiBmYWlsZWQiLAor ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHIiY2xpZW50IGF1dGhlbnRpY2F0aW9uIGZhaWxl ZCBcKGludmFsaWRfY2xpZW50XCkiLAorICAgICAgICAgICAgaWQ9ImF1dGhlbnRpY2F0aW9uIGZh aWx1cmUgd2l0aCBkZXNjcmlwdGlvbiIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJh bSgKKyAgICAgICAgICAgIHsiZXJyb3IiOiAiaW52YWxpZF9yZXF1ZXN0In0sCisgICAgICAgICAg ICByIlwoaW52YWxpZF9yZXF1ZXN0XCkiLAorICAgICAgICAgICAgaWQ9ImludmFsaWQgcmVxdWVz dCB3aXRob3V0IGRlc2NyaXB0aW9uIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFt KAorICAgICAgICAgICAge30sCisgICAgICAgICAgICByImZhaWxlZCB0byBvYnRhaW4gZGV2aWNl IGF1dGhvcml6YXRpb24iLAorICAgICAgICAgICAgaWQ9ImJyb2tlbiBlcnJvciByZXNwb25zZSIs CisgICAgICAgICksCisgICAgXSwKKykKK2RlZiB0ZXN0X29hdXRoX2RldmljZV9hdXRob3JpemF0 aW9uX2ZhaWx1cmVzKAorICAgIGFjY2VwdCwgb3BlbmlkX3Byb3ZpZGVyLCBmYWlsdXJlX21vZGUs IGVycm9yX3BhdHRlcm4KKyk6CisgICAgY2xpZW50X2lkID0gc2VjcmV0cy50b2tlbl9oZXgoKQor CisgICAgc29jaywgY2xpZW50ID0gYWNjZXB0KAorICAgICAgICBvYXV0aF9pc3N1ZXI9b3Blbmlk X3Byb3ZpZGVyLmlzc3VlciwKKyAgICAgICAgb2F1dGhfY2xpZW50X2lkPWNsaWVudF9pZCwKKyAg ICApCisKKyAgICAjIFNldCB1cCBvdXIgcHJvdmlkZXIgY2FsbGJhY2tzLgorICAgICMgTk9URSB0 aGF0IHRoZXNlIGNhbGxiYWNrcyB3aWxsIGJlIGNhbGxlZCBvbiBhIGJhY2tncm91bmQgdGhyZWFk LiBEb24ndCBkbworICAgICMgYW55IHVucHJvdGVjdGVkIHN0YXRlIG11dGF0aW9uIGhlcmUuCisK KyAgICBkZWYgYXV0aG9yaXphdGlvbl9lbmRwb2ludChoZWFkZXJzLCBwYXJhbXMpOgorICAgICAg ICByZXR1cm4gNDAwLCBmYWlsdXJlX21vZGUKKworICAgIG9wZW5pZF9wcm92aWRlci5yZWdpc3Rl cl9lbmRwb2ludCgKKyAgICAgICAgImRldmljZV9hdXRob3JpemF0aW9uX2VuZHBvaW50IiwgIlBP U1QiLCAiL2RldmljZSIsIGF1dGhvcml6YXRpb25fZW5kcG9pbnQKKyAgICApCisKKyAgICBkZWYg dG9rZW5fZW5kcG9pbnQoaGVhZGVycywgcGFyYW1zKToKKyAgICAgICAgYXNzZXJ0IEZhbHNlLCAi dG9rZW4gZW5kcG9pbnQgd2FzIGludm9rZWQgdW5leHBlY3RlZGx5IgorCisgICAgb3BlbmlkX3By b3ZpZGVyLnJlZ2lzdGVyX2VuZHBvaW50KAorICAgICAgICAidG9rZW5fZW5kcG9pbnQiLCAiUE9T VCIsICIvdG9rZW4iLCB0b2tlbl9lbmRwb2ludAorICAgICkKKworICAgIHdpdGggc29jazoKKyAg ICAgICAgd2l0aCBwcTMud3JhcChzb2NrLCBkZWJ1Z19zdHJlYW09c3lzLnN0ZG91dCkgYXMgY29u bjoKKyAgICAgICAgICAgICMgSW5pdGlhdGUgYSBoYW5kc2hha2UsIHdoaWNoIHNob3VsZCByZXN1 bHQgaW4gdGhlIGFib3ZlIGVuZHBvaW50cworICAgICAgICAgICAgIyBiZWluZyBjYWxsZWQuCisg ICAgICAgICAgICBzdGFydHVwID0gcHEzLnJlY3YxKGNvbm4sIGNscz1wcTMuU3RhcnR1cCkKKyAg ICAgICAgICAgIGFzc2VydCBzdGFydHVwLnByb3RvID09IHBxMy5wcm90b2NvbCgzLCAwKQorCisg ICAgICAgICAgICBwcTMuc2VuZCgKKyAgICAgICAgICAgICAgICBjb25uLAorICAgICAgICAgICAg ICAgIHBxMy50eXBlcy5BdXRoblJlcXVlc3QsCisgICAgICAgICAgICAgICAgdHlwZT1wcTMuYXV0 aG4uU0FTTCwKKyAgICAgICAgICAgICAgICBib2R5PVtiIk9BVVRIQkVBUkVSIiwgYiIiXSwKKyAg ICAgICAgICAgICkKKworICAgICAgICAgICAgIyBUaGUgY2xpZW50IHNob3VsZCBub3QgY29udGlu dWUgdGhlIGNvbm5lY3Rpb24gZHVlIHRvIHRoZSBoYXJkY29kZWQKKyAgICAgICAgICAgICMgcHJv dmlkZXIgZmFpbHVyZTsgd2UgZGlzY29ubmVjdCBoZXJlLgorCisgICAgIyBOb3cgbWFrZSBzdXJl IHRoZSBjbGllbnQgY29ycmVjdGx5IGZhaWxlZC4KKyAgICB3aXRoIHB5dGVzdC5yYWlzZXMocHN5 Y29wZzIuT3BlcmF0aW9uYWxFcnJvciwgbWF0Y2g9ZXJyb3JfcGF0dGVybik6CisgICAgICAgIGNs aWVudC5jaGVja19jb21wbGV0ZWQoKQorCisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgKKyAg ICAiZmFpbHVyZV9tb2RlLCBlcnJvcl9wYXR0ZXJuIiwKKyAgICBbCisgICAgICAgIHB5dGVzdC5w YXJhbSgKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiZXJyb3IiOiAiZXhwaXJlZF90 b2tlbiIsCisgICAgICAgICAgICAgICAgImVycm9yX2Rlc2NyaXB0aW9uIjogInRoZSBkZXZpY2Ug Y29kZSBoYXMgZXhwaXJlZCIsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgciJ0aGUgZGV2 aWNlIGNvZGUgaGFzIGV4cGlyZWQgXChleHBpcmVkX3Rva2VuXCkiLAorICAgICAgICAgICAgaWQ9 ImV4cGlyZWQgdG9rZW4gd2l0aCBkZXNjcmlwdGlvbiIsCisgICAgICAgICksCisgICAgICAgIHB5 dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIHsiZXJyb3IiOiAiYWNjZXNzX2RlbmllZCJ9LAorICAg ICAgICAgICAgciJcKGFjY2Vzc19kZW5pZWRcKSIsCisgICAgICAgICAgICBpZD0iYWNjZXNzIGRl bmllZCB3aXRob3V0IGRlc2NyaXB0aW9uIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBh cmFtKAorICAgICAgICAgICAge30sCisgICAgICAgICAgICByIk9BdXRoIHRva2VuIHJldHJpZXZh bCBmYWlsZWQiLAorICAgICAgICAgICAgaWQ9ImJyb2tlbiBlcnJvciByZXNwb25zZSIsCisgICAg ICAgICksCisgICAgXSwKKykKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgicmV0cmllcyIsIFsw LCAxXSkKK2RlZiB0ZXN0X29hdXRoX3Rva2VuX2ZhaWx1cmVzKAorICAgIGFjY2VwdCwgb3Blbmlk X3Byb3ZpZGVyLCByZXRyaWVzLCBmYWlsdXJlX21vZGUsIGVycm9yX3BhdHRlcm4KKyk6CisgICAg Y2xpZW50X2lkID0gc2VjcmV0cy50b2tlbl9oZXgoKQorCisgICAgc29jaywgY2xpZW50ID0gYWNj ZXB0KAorICAgICAgICBvYXV0aF9pc3N1ZXI9b3BlbmlkX3Byb3ZpZGVyLmlzc3VlciwKKyAgICAg ICAgb2F1dGhfY2xpZW50X2lkPWNsaWVudF9pZCwKKyAgICApCisKKyAgICBkZXZpY2VfY29kZSA9 IHNlY3JldHMudG9rZW5faGV4KCkKKyAgICB1c2VyX2NvZGUgPSBmIntzZWNyZXRzLnRva2VuX2hl eCgyKX0te3NlY3JldHMudG9rZW5faGV4KDIpfSIKKworICAgICMgU2V0IHVwIG91ciBwcm92aWRl ciBjYWxsYmFja3MuCisgICAgIyBOT1RFIHRoYXQgdGhlc2UgY2FsbGJhY2tzIHdpbGwgYmUgY2Fs bGVkIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQuIERvbid0IGRvCisgICAgIyBhbnkgdW5wcm90ZWN0 ZWQgc3RhdGUgbXV0YXRpb24gaGVyZS4KKworICAgIGRlZiBhdXRob3JpemF0aW9uX2VuZHBvaW50 KGhlYWRlcnMsIHBhcmFtcyk6CisgICAgICAgIGFzc2VydCBwYXJhbXNbImNsaWVudF9pZCJdID09 IFtjbGllbnRfaWRdCisKKyAgICAgICAgcmVzcCA9IHsKKyAgICAgICAgICAgICJkZXZpY2VfY29k ZSI6IGRldmljZV9jb2RlLAorICAgICAgICAgICAgInVzZXJfY29kZSI6IHVzZXJfY29kZSwKKyAg ICAgICAgICAgICJpbnRlcnZhbCI6IDAsCisgICAgICAgICAgICAidmVyaWZpY2F0aW9uX3VyaSI6 ICJodHRwczovL2V4YW1wbGUuY29tL2RldmljZSIsCisgICAgICAgICAgICAiZXhwaXJlc19pbiI6 IDUsCisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gMjAwLCByZXNwCisKKyAgICBvcGVuaWRf cHJvdmlkZXIucmVnaXN0ZXJfZW5kcG9pbnQoCisgICAgICAgICJkZXZpY2VfYXV0aG9yaXphdGlv bl9lbmRwb2ludCIsICJQT1NUIiwgIi9kZXZpY2UiLCBhdXRob3JpemF0aW9uX2VuZHBvaW50Cisg ICAgKQorCisgICAgcmV0cnlfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKworICAgIGRlZiB0b2tl bl9lbmRwb2ludChoZWFkZXJzLCBwYXJhbXMpOgorICAgICAgICB3aXRoIHJldHJ5X2xvY2s6Cisg ICAgICAgICAgICBub25sb2NhbCByZXRyaWVzCisKKyAgICAgICAgICAgICMgSWYgdGhlIHRlc3Qg d2FudHMgdG8gZm9yY2UgdGhlIGNsaWVudCB0byByZXRyeSwgcmV0dXJuIGFuCisgICAgICAgICAg ICAjIGF1dGhvcml6YXRpb25fcGVuZGluZyByZXNwb25zZSBhbmQgZGVjcmVtZW50IHRoZSByZXRy eSBjb3VudC4KKyAgICAgICAgICAgIGlmIHJldHJpZXMgPiAwOgorICAgICAgICAgICAgICAgIHJl dHJpZXMgLT0gMQorICAgICAgICAgICAgICAgIHJldHVybiA0MDAsIHsiZXJyb3IiOiAiYXV0aG9y aXphdGlvbl9wZW5kaW5nIn0KKworICAgICAgICByZXR1cm4gNDAwLCBmYWlsdXJlX21vZGUKKwor ICAgIG9wZW5pZF9wcm92aWRlci5yZWdpc3Rlcl9lbmRwb2ludCgKKyAgICAgICAgInRva2VuX2Vu ZHBvaW50IiwgIlBPU1QiLCAiL3Rva2VuIiwgdG9rZW5fZW5kcG9pbnQKKyAgICApCisKKyAgICB3 aXRoIHNvY2s6CisgICAgICAgIHdpdGggcHEzLndyYXAoc29jaywgZGVidWdfc3RyZWFtPXN5cy5z dGRvdXQpIGFzIGNvbm46CisgICAgICAgICAgICAjIEluaXRpYXRlIGEgaGFuZHNoYWtlLCB3aGlj aCBzaG91bGQgcmVzdWx0IGluIHRoZSBhYm92ZSBlbmRwb2ludHMKKyAgICAgICAgICAgICMgYmVp bmcgY2FsbGVkLgorICAgICAgICAgICAgc3RhcnR1cCA9IHBxMy5yZWN2MShjb25uLCBjbHM9cHEz LlN0YXJ0dXApCisgICAgICAgICAgICBhc3NlcnQgc3RhcnR1cC5wcm90byA9PSBwcTMucHJvdG9j b2woMywgMCkKKworICAgICAgICAgICAgcHEzLnNlbmQoCisgICAgICAgICAgICAgICAgY29ubiwK KyAgICAgICAgICAgICAgICBwcTMudHlwZXMuQXV0aG5SZXF1ZXN0LAorICAgICAgICAgICAgICAg IHR5cGU9cHEzLmF1dGhuLlNBU0wsCisgICAgICAgICAgICAgICAgYm9keT1bYiJPQVVUSEJFQVJF UiIsIGIiIl0sCisgICAgICAgICAgICApCisKKyAgICAgICAgICAgICMgVGhlIGNsaWVudCBzaG91 bGQgbm90IGNvbnRpbnVlIHRoZSBjb25uZWN0aW9uIGR1ZSB0byB0aGUgaGFyZGNvZGVkCisgICAg ICAgICAgICAjIHByb3ZpZGVyIGZhaWx1cmU7IHdlIGRpc2Nvbm5lY3QgaGVyZS4KKworICAgICMg Tm93IG1ha2Ugc3VyZSB0aGUgY2xpZW50IGNvcnJlY3RseSBmYWlsZWQuCisgICAgd2l0aCBweXRl c3QucmFpc2VzKHBzeWNvcGcyLk9wZXJhdGlvbmFsRXJyb3IsIG1hdGNoPWVycm9yX3BhdHRlcm4p OgorICAgICAgICBjbGllbnQuY2hlY2tfY29tcGxldGVkKCkKKworCitAcHl0ZXN0Lm1hcmsucGFy YW1ldHJpemUoInNjb3BlIiwgW05vbmUsICJvcGVuaWQgZW1haWwiXSkKK0BweXRlc3QubWFyay5w YXJhbWV0cml6ZSgKKyAgICAiYmFzZV9yZXNwb25zZSIsCisgICAgWworICAgICAgICB7InN0YXR1 cyI6ICJpbnZhbGlkX3Rva2VuIn0sCisgICAgICAgIHsiZXh0cmFfb2JqZWN0IjogeyJrZXkiOiAi dmFsdWUifSwgInN0YXR1cyI6ICJpbnZhbGlkX3Rva2VuIn0sCisgICAgICAgIHsiZXh0cmFfb2Jq ZWN0IjogeyJzdGF0dXMiOiAxfSwgInN0YXR1cyI6ICJpbnZhbGlkX3Rva2VuIn0sCisgICAgXSwK KykKK2RlZiB0ZXN0X29hdXRoX2Rpc2NvdmVyeShhY2NlcHQsIG9wZW5pZF9wcm92aWRlciwgYmFz ZV9yZXNwb25zZSwgc2NvcGUpOgorICAgIHNvY2ssIGNsaWVudCA9IGFjY2VwdChvYXV0aF9jbGll bnRfaWQ9c2VjcmV0cy50b2tlbl9oZXgoKSkKKworICAgIGRldmljZV9jb2RlID0gc2VjcmV0cy50 b2tlbl9oZXgoKQorICAgIHVzZXJfY29kZSA9IGYie3NlY3JldHMudG9rZW5faGV4KDIpfS17c2Vj cmV0cy50b2tlbl9oZXgoMil9IgorICAgIHZlcmlmaWNhdGlvbl91cmwgPSAiaHR0cHM6Ly9leGFt cGxlLmNvbS9kZXZpY2UiCisKKyAgICBhY2Nlc3NfdG9rZW4gPSBzZWNyZXRzLnRva2VuX3VybHNh ZmUoKQorCisgICAgIyBTZXQgdXAgb3VyIHByb3ZpZGVyIGNhbGxiYWNrcy4KKyAgICAjIE5PVEUg dGhhdCB0aGVzZSBjYWxsYmFja3Mgd2lsbCBiZSBjYWxsZWQgb24gYSBiYWNrZ3JvdW5kIHRocmVh ZC4gRG9uJ3QgZG8KKyAgICAjIGFueSB1bnByb3RlY3RlZCBzdGF0ZSBtdXRhdGlvbiBoZXJlLgor CisgICAgZGVmIGF1dGhvcml6YXRpb25fZW5kcG9pbnQoaGVhZGVycywgcGFyYW1zKToKKyAgICAg ICAgaWYgc2NvcGU6CisgICAgICAgICAgICBhc3NlcnQgcGFyYW1zWyJzY29wZSJdID09IFtzY29w ZV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFzc2VydCAic2NvcGUiIG5vdCBpbiBwYXJh bXMKKworICAgICAgICByZXNwID0geworICAgICAgICAgICAgImRldmljZV9jb2RlIjogZGV2aWNl X2NvZGUsCisgICAgICAgICAgICAidXNlcl9jb2RlIjogdXNlcl9jb2RlLAorICAgICAgICAgICAg ImludGVydmFsIjogMCwKKyAgICAgICAgICAgICJ2ZXJpZmljYXRpb25fdXJpIjogdmVyaWZpY2F0 aW9uX3VybCwKKyAgICAgICAgICAgICJleHBpcmVzX2luIjogNSwKKyAgICAgICAgfQorCisgICAg ICAgIHJldHVybiAyMDAsIHJlc3AKKworICAgIG9wZW5pZF9wcm92aWRlci5yZWdpc3Rlcl9lbmRw b2ludCgKKyAgICAgICAgImRldmljZV9hdXRob3JpemF0aW9uX2VuZHBvaW50IiwgIlBPU1QiLCAi L2RldmljZSIsIGF1dGhvcml6YXRpb25fZW5kcG9pbnQKKyAgICApCisKKyAgICBkZWYgdG9rZW5f ZW5kcG9pbnQoaGVhZGVycywgcGFyYW1zKToKKyAgICAgICAgYXNzZXJ0IHBhcmFtc1siZ3JhbnRf dHlwZSJdID09IFsidXJuOmlldGY6cGFyYW1zOm9hdXRoOmdyYW50LXR5cGU6ZGV2aWNlX2NvZGUi XQorICAgICAgICBhc3NlcnQgcGFyYW1zWyJkZXZpY2VfY29kZSJdID09IFtkZXZpY2VfY29kZV0K KworICAgICAgICAjIFN1Y2Nlc3NmdWxseSBmaW5pc2ggdGhlIHJlcXVlc3QgYnkgc2VuZGluZyB0 aGUgYWNjZXNzIGJlYXJlciB0b2tlbi4KKyAgICAgICAgcmVzcCA9IHsKKyAgICAgICAgICAgICJh Y2Nlc3NfdG9rZW4iOiBhY2Nlc3NfdG9rZW4sCisgICAgICAgICAgICAidG9rZW5fdHlwZSI6ICJi ZWFyZXIiLAorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIDIwMCwgcmVzcAorCisgICAgb3Bl bmlkX3Byb3ZpZGVyLnJlZ2lzdGVyX2VuZHBvaW50KAorICAgICAgICAidG9rZW5fZW5kcG9pbnQi LCAiUE9TVCIsICIvdG9rZW4iLCB0b2tlbl9lbmRwb2ludAorICAgICkKKworICAgIHdpdGggc29j azoKKyAgICAgICAgd2l0aCBwcTMud3JhcChzb2NrLCBkZWJ1Z19zdHJlYW09c3lzLnN0ZG91dCkg YXMgY29ubjoKKyAgICAgICAgICAgIGluaXRpYWwgPSBzdGFydF9vYXV0aF9oYW5kc2hha2UoY29u bikKKworICAgICAgICAgICAgIyBGb3IgZGlzY292ZXJ5LCB0aGUgY2xpZW50IHNob3VsZCBzZW5k IGFuIGVtcHR5IGF1dGggaGVhZGVyLiBTZWUKKyAgICAgICAgICAgICMgUkZDIDc2MjgsIFNlYy4g NC4zLgorICAgICAgICAgICAgYXV0aCA9IGdldF9hdXRoX3ZhbHVlKGluaXRpYWwpCisgICAgICAg ICAgICBhc3NlcnQgYXV0aCA9PSBiIiIKKworICAgICAgICAgICAgIyBXZSB3aWxsIGZhaWwgdGhl IGZpcnN0IFNBU0wgZXhjaGFuZ2UuIEZpcnN0IHJldHVybiBhIGxpbmsgdG8gdGhlCisgICAgICAg ICAgICAjIGRpc2NvdmVyeSBkb2N1bWVudCwgcG9pbnRpbmcgdG8gdGhlIHRlc3QgcHJvdmlkZXIg c2VydmVyLgorICAgICAgICAgICAgcmVzcCA9IGRpY3QoYmFzZV9yZXNwb25zZSkKKworICAgICAg ICAgICAgZGlzY292ZXJ5X3VyaSA9IGYie29wZW5pZF9wcm92aWRlci5pc3N1ZXJ9Ly53ZWxsLWtu b3duL29wZW5pZC1jb25maWd1cmF0aW9uIgorICAgICAgICAgICAgcmVzcFsib3BlbmlkLWNvbmZp Z3VyYXRpb24iXSA9IGRpc2NvdmVyeV91cmkKKworICAgICAgICAgICAgaWYgc2NvcGU6CisgICAg ICAgICAgICAgICAgcmVzcFsic2NvcGUiXSA9IHNjb3BlCisKKyAgICAgICAgICAgIHJlc3AgPSBq c29uLmR1bXBzKHJlc3ApCisKKyAgICAgICAgICAgIHBxMy5zZW5kKAorICAgICAgICAgICAgICAg IGNvbm4sCisgICAgICAgICAgICAgICAgcHEzLnR5cGVzLkF1dGhuUmVxdWVzdCwKKyAgICAgICAg ICAgICAgICB0eXBlPXBxMy5hdXRobi5TQVNMQ29udGludWUsCisgICAgICAgICAgICAgICAgYm9k eT1yZXNwLmVuY29kZSgiYXNjaWkiKSwKKyAgICAgICAgICAgICkKKworICAgICAgICAgICAgIyBQ ZXIgUkZDLCB0aGUgY2xpZW50IGlzIHJlcXVpcmVkIHRvIHNlbmQgYSBkdW1teSBeQSByZXNwb25z ZS4KKyAgICAgICAgICAgIHBrdCA9IHBxMy5yZWN2MShjb25uKQorICAgICAgICAgICAgYXNzZXJ0 IHBrdC50eXBlID09IHBxMy50eXBlcy5QYXNzd29yZE1lc3NhZ2UKKyAgICAgICAgICAgIGFzc2Vy dCBwa3QucGF5bG9hZCA9PSBiIlx4MDEiCisKKyAgICAgICAgICAgICMgTm93IGZhaWwgdGhlIFNB U0wgZXhjaGFuZ2UuCisgICAgICAgICAgICBwcTMuc2VuZCgKKyAgICAgICAgICAgICAgICBjb25u LAorICAgICAgICAgICAgICAgIHBxMy50eXBlcy5FcnJvclJlc3BvbnNlLAorICAgICAgICAgICAg ICAgIGZpZWxkcz1bCisgICAgICAgICAgICAgICAgICAgIGIiU0ZBVEFMIiwKKyAgICAgICAgICAg ICAgICAgICAgYiJDMjgwMDAiLAorICAgICAgICAgICAgICAgICAgICBiIk1kb2Vzbid0IG1hdHRl ciIsCisgICAgICAgICAgICAgICAgICAgIGIiIiwKKyAgICAgICAgICAgICAgICBdLAorICAgICAg ICAgICAgKQorCisgICAgIyBUaGUgY2xpZW50IHdpbGwgY29ubmVjdCB0byB1cyBhIHNlY29uZCB0 aW1lLCB1c2luZyB0aGUgcGFyYW1ldGVycyB3ZSBzZW50CisgICAgIyBpdC4KKyAgICBzb2NrLCBf ID0gYWNjZXB0KCkKKworICAgIHdpdGggc29jazoKKyAgICAgICAgd2l0aCBwcTMud3JhcChzb2Nr LCBkZWJ1Z19zdHJlYW09c3lzLnN0ZG91dCkgYXMgY29ubjoKKyAgICAgICAgICAgIGluaXRpYWwg PSBzdGFydF9vYXV0aF9oYW5kc2hha2UoY29ubikKKworICAgICAgICAgICAgIyBWYWxpZGF0ZSBh bmQgYWNjZXB0IHRoZSB0b2tlbi4KKyAgICAgICAgICAgIGF1dGggPSBnZXRfYXV0aF92YWx1ZShp bml0aWFsKQorICAgICAgICAgICAgYXNzZXJ0IGF1dGggPT0gZiJCZWFyZXIge2FjY2Vzc190b2tl bn0iLmVuY29kZSgiYXNjaWkiKQorCisgICAgICAgICAgICBwcTMuc2VuZChjb25uLCBwcTMudHlw ZXMuQXV0aG5SZXF1ZXN0LCB0eXBlPXBxMy5hdXRobi5TQVNMRmluYWwpCisgICAgICAgICAgICBm aW5pc2hfaGFuZHNoYWtlKGNvbm4pCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKAorICAg ICJyZXNwb25zZSxleHBlY3RlZF9lcnJvciIsCisgICAgWworICAgICAgICBweXRlc3QucGFyYW0o CisgICAgICAgICAgICAiYWJjZGUiLAorICAgICAgICAgICAgJ1Rva2VuICJhYmNkZSIgaXMgaW52 YWxpZCcsCisgICAgICAgICAgICBpZD0iYmFkIEpTT046IGludmFsaWQgc3ludGF4IiwKKyAgICAg ICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgJyJhYmNkZSInLAorICAg ICAgICAgICAgInRvcC1sZXZlbCBlbGVtZW50IG11c3QgYmUgYW4gb2JqZWN0IiwKKyAgICAgICAg ICAgIGlkPSJiYWQgSlNPTjogdG9wLWxldmVsIGVsZW1lbnQgaXMgYSBzdHJpbmciLAorICAgICAg ICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICAiW10iLAorICAgICAgICAg ICAgInRvcC1sZXZlbCBlbGVtZW50IG11c3QgYmUgYW4gb2JqZWN0IiwKKyAgICAgICAgICAgIGlk PSJiYWQgSlNPTjogdG9wLWxldmVsIGVsZW1lbnQgaXMgYW4gYXJyYXkiLAorICAgICAgICApLAor ICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICAie30iLAorICAgICAgICAgICAgInNl cnZlciBzZW50IGVycm9yIHJlc3BvbnNlIHdpdGhvdXQgYSBzdGF0dXMiLAorICAgICAgICAgICAg aWQ9ImJhZCBKU09OOiBubyBzdGF0dXMgbWVtYmVyIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0 ZXN0LnBhcmFtKAorICAgICAgICAgICAgJ3sgInN0YXR1cyI6IG51bGwgfScsCisgICAgICAgICAg ICAnZmllbGQgInN0YXR1cyIgbXVzdCBiZSBhIHN0cmluZycsCisgICAgICAgICAgICBpZD0iYmFk IEpTT046IG51bGwgc3RhdHVzIG1lbWJlciIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5w YXJhbSgKKyAgICAgICAgICAgICd7ICJzdGF0dXMiOiAwIH0nLAorICAgICAgICAgICAgJ2ZpZWxk ICJzdGF0dXMiIG11c3QgYmUgYSBzdHJpbmcnLAorICAgICAgICAgICAgaWQ9ImJhZCBKU09OOiBp bnQgc3RhdHVzIG1lbWJlciIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAg ICAgICAgICAgICd7ICJzdGF0dXMiOiBbICJiYWQiIF0gfScsCisgICAgICAgICAgICAnZmllbGQg InN0YXR1cyIgbXVzdCBiZSBhIHN0cmluZycsCisgICAgICAgICAgICBpZD0iYmFkIEpTT046IGFy cmF5IHN0YXR1cyBtZW1iZXIiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisg ICAgICAgICAgICAneyAic3RhdHVzIjogeyAiYmFkIjogImJhZCIgfSB9JywKKyAgICAgICAgICAg ICdmaWVsZCAic3RhdHVzIiBtdXN0IGJlIGEgc3RyaW5nJywKKyAgICAgICAgICAgIGlkPSJiYWQg SlNPTjogb2JqZWN0IHN0YXR1cyBtZW1iZXIiLAorICAgICAgICApLAorICAgICAgICBweXRlc3Qu cGFyYW0oCisgICAgICAgICAgICAneyAibmVzdGVkIjogeyAic3RhdHVzIjogImJhZCIgfSB9JywK KyAgICAgICAgICAgICJzZXJ2ZXIgc2VudCBlcnJvciByZXNwb25zZSB3aXRob3V0IGEgc3RhdHVz IiwKKyAgICAgICAgICAgIGlkPSJiYWQgSlNPTjogbmVzdGVkIHN0YXR1cyIsCisgICAgICAgICks CisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgICd7ICJzdGF0dXMiOiAiaW52YWxp ZF90b2tlbiIgJywKKyAgICAgICAgICAgICJUaGUgaW5wdXQgc3RyaW5nIGVuZGVkIHVuZXhwZWN0 ZWRseSIsCisgICAgICAgICAgICBpZD0iYmFkIEpTT046IHVudGVybWluYXRlZCBvYmplY3QiLAor ICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICAneyAic3RhdHVz IjogImludmFsaWRfdG9rZW4iIH0geyB9JywKKyAgICAgICAgICAgICdFeHBlY3RlZCBlbmQgb2Yg aW5wdXQsIGJ1dCBmb3VuZCAieyInLAorICAgICAgICAgICAgaWQ9ImJhZCBKU09OOiB0cmFpbGlu ZyBkYXRhIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAg J3sgInN0YXR1cyI6ICJpbnZhbGlkX3Rva2VuIiwgIm9wZW5pZC1jb25maWd1cmF0aW9uIjogMSB9 JywKKyAgICAgICAgICAgICdmaWVsZCAib3BlbmlkLWNvbmZpZ3VyYXRpb24iIG11c3QgYmUgYSBz dHJpbmcnLAorICAgICAgICAgICAgaWQ9ImJhZCBKU09OOiBpbnQgb3BlbmlkLWNvbmZpZ3VyYXRp b24gbWVtYmVyIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAg ICAgJ3sgInN0YXR1cyI6ICJpbnZhbGlkX3Rva2VuIiwgIm9wZW5pZC1jb25maWd1cmF0aW9uIjog MSB9JywKKyAgICAgICAgICAgICdmaWVsZCAib3BlbmlkLWNvbmZpZ3VyYXRpb24iIG11c3QgYmUg YSBzdHJpbmcnLAorICAgICAgICAgICAgaWQ9ImJhZCBKU09OOiBpbnQgb3BlbmlkLWNvbmZpZ3Vy YXRpb24gbWVtYmVyIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAg ICAgICAgJ3sgInN0YXR1cyI6ICJpbnZhbGlkX3Rva2VuIiwgInNjb3BlIjogMSB9JywKKyAgICAg ICAgICAgICdmaWVsZCAic2NvcGUiIG11c3QgYmUgYSBzdHJpbmcnLAorICAgICAgICAgICAgaWQ9 ImJhZCBKU09OOiBpbnQgc2NvcGUgbWVtYmVyIiwKKyAgICAgICAgKSwKKyAgICBdLAorKQorZGVm IHRlc3Rfb2F1dGhfZGlzY292ZXJ5X3NlcnZlcl9lcnJvcihhY2NlcHQsIHJlc3BvbnNlLCBleHBl Y3RlZF9lcnJvcik6CisgICAgc29jaywgY2xpZW50ID0gYWNjZXB0KG9hdXRoX2NsaWVudF9pZD1z ZWNyZXRzLnRva2VuX2hleCgpKQorCisgICAgd2l0aCBzb2NrOgorICAgICAgICB3aXRoIHBxMy53 cmFwKHNvY2ssIGRlYnVnX3N0cmVhbT1zeXMuc3Rkb3V0KSBhcyBjb25uOgorICAgICAgICAgICAg aW5pdGlhbCA9IHN0YXJ0X29hdXRoX2hhbmRzaGFrZShjb25uKQorCisgICAgICAgICAgICAjIEZh aWwgdGhlIFNBU0wgZXhjaGFuZ2Ugd2l0aCBhbiBpbnZhbGlkIEpTT04gcmVzcG9uc2UuCisgICAg ICAgICAgICBwcTMuc2VuZCgKKyAgICAgICAgICAgICAgICBjb25uLAorICAgICAgICAgICAgICAg IHBxMy50eXBlcy5BdXRoblJlcXVlc3QsCisgICAgICAgICAgICAgICAgdHlwZT1wcTMuYXV0aG4u U0FTTENvbnRpbnVlLAorICAgICAgICAgICAgICAgIGJvZHk9cmVzcG9uc2UuZW5jb2RlKCJ1dGYt OCIpLAorICAgICAgICAgICAgKQorCisgICAgICAgICAgICAjIFRoZSBjbGllbnQgc2hvdWxkIGRp c2Nvbm5lY3QsIHNvIHRoZSBzb2NrZXQgaXMgY2xvc2VkIGhlcmUuIChJZgorICAgICAgICAgICAg IyB0aGUgY2xpZW50IGRvZXNuJ3QgZGlzY29ubmVjdCwgaXQgd2lsbCByZXBvcnQgYSBkaWZmZXJl bnQgZXJyb3IKKyAgICAgICAgICAgICMgYmVsb3cgYW5kIHRoZSB0ZXN0IHdpbGwgZmFpbC4pCisK KyAgICB3aXRoIHB5dGVzdC5yYWlzZXMocHN5Y29wZzIuT3BlcmF0aW9uYWxFcnJvciwgbWF0Y2g9 ZXhwZWN0ZWRfZXJyb3IpOgorICAgICAgICBjbGllbnQuY2hlY2tfY29tcGxldGVkKCkKKworCitA cHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoCisgICAgInNhc2xfZXJyLHJlc3BfdHlwZSxyZXNwX3Bh eWxvYWQsZXhwZWN0ZWRfZXJyb3IiLAorICAgIFsKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAg ICAgICAgICAgeyJzdGF0dXMiOiAiaW52YWxpZF9yZXF1ZXN0In0sCisgICAgICAgICAgICBwcTMu dHlwZXMuRXJyb3JSZXNwb25zZSwKKyAgICAgICAgICAgIGRpY3QoCisgICAgICAgICAgICAgICAg ZmllbGRzPVtiIlNGQVRBTCIsIGIiQzI4MDAwIiwgYiJNZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZSIs IGIiIl0sCisgICAgICAgICAgICApLAorICAgICAgICAgICAgImV4cGVjdGVkIGVycm9yIG1lc3Nh Z2UiLAorICAgICAgICAgICAgaWQ9InN0YW5kYXJkIHNlcnZlciBlcnJvcjogaW52YWxpZF9yZXF1 ZXN0IiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgeyJz dGF0dXMiOiAiaW52YWxpZF90b2tlbiJ9LAorICAgICAgICAgICAgcHEzLnR5cGVzLkVycm9yUmVz cG9uc2UsCisgICAgICAgICAgICBkaWN0KAorICAgICAgICAgICAgICAgIGZpZWxkcz1bYiJTRkFU QUwiLCBiIkMyODAwMCIsIGIiTWV4cGVjdGVkIGVycm9yIG1lc3NhZ2UiLCBiIiJdLAorICAgICAg ICAgICAgKSwKKyAgICAgICAgICAgICJleHBlY3RlZCBlcnJvciBtZXNzYWdlIiwKKyAgICAgICAg ICAgIGlkPSJzdGFuZGFyZCBzZXJ2ZXIgZXJyb3I6IGludmFsaWRfdG9rZW4gd2l0aG91dCBkaXNj b3ZlcnkgVVJJIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAg ICAgeyJzdGF0dXMiOiAiaW52YWxpZF9yZXF1ZXN0In0sCisgICAgICAgICAgICBwcTMudHlwZXMu QXV0aG5SZXF1ZXN0LAorICAgICAgICAgICAgZGljdCh0eXBlPXBxMy5hdXRobi5TQVNMQ29udGlu dWUsIGJvZHk9YiIiKSwKKyAgICAgICAgICAgICJzZXJ2ZXIgc2VudCBhZGRpdGlvbmFsIE9BdXRo IGRhdGEiLAorICAgICAgICAgICAgaWQ9ImJyb2tlbiBzZXJ2ZXI6IGFkZGl0aW9uYWwgY2hhbGxl bmdlIGFmdGVyIGVycm9yIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAg ICAgICAgICAgeyJzdGF0dXMiOiAiaW52YWxpZF9yZXF1ZXN0In0sCisgICAgICAgICAgICBwcTMu dHlwZXMuQXV0aG5SZXF1ZXN0LAorICAgICAgICAgICAgZGljdCh0eXBlPXBxMy5hdXRobi5TQVNM RmluYWwpLAorICAgICAgICAgICAgInNlcnZlciBzZW50IGFkZGl0aW9uYWwgT0F1dGggZGF0YSIs CisgICAgICAgICAgICBpZD0iYnJva2VuIHNlcnZlcjogU0FTTCBzdWNjZXNzIGFmdGVyIGVycm9y IiwKKyAgICAgICAgKSwKKyAgICBdLAorKQorZGVmIHRlc3Rfb2F1dGhfc2VydmVyX2Vycm9yKGFj Y2VwdCwgc2FzbF9lcnIsIHJlc3BfdHlwZSwgcmVzcF9wYXlsb2FkLCBleHBlY3RlZF9lcnJvcik6 CisgICAgc29jaywgY2xpZW50ID0gYWNjZXB0KCkKKworICAgIHdpdGggc29jazoKKyAgICAgICAg d2l0aCBwcTMud3JhcChzb2NrLCBkZWJ1Z19zdHJlYW09c3lzLnN0ZG91dCkgYXMgY29ubjoKKyAg ICAgICAgICAgIHN0YXJ0X29hdXRoX2hhbmRzaGFrZShjb25uKQorCisgICAgICAgICAgICAjIEln bm9yZSB0aGUgY2xpZW50IGRhdGEuIFJldHVybiBhbiBlcnJvciAiY2hhbGxlbmdlIi4KKyAgICAg ICAgICAgIHJlc3AgPSBqc29uLmR1bXBzKHNhc2xfZXJyKQorICAgICAgICAgICAgcmVzcCA9IHJl c3AuZW5jb2RlKCJ1dGYtOCIpCisKKyAgICAgICAgICAgIHBxMy5zZW5kKAorICAgICAgICAgICAg ICAgIGNvbm4sIHBxMy50eXBlcy5BdXRoblJlcXVlc3QsIHR5cGU9cHEzLmF1dGhuLlNBU0xDb250 aW51ZSwgYm9keT1yZXNwCisgICAgICAgICAgICApCisKKyAgICAgICAgICAgICMgUGVyIFJGQywg dGhlIGNsaWVudCBpcyByZXF1aXJlZCB0byBzZW5kIGEgZHVtbXkgXkEgcmVzcG9uc2UuCisgICAg ICAgICAgICBwa3QgPSBwcTMucmVjdjEoY29ubikKKyAgICAgICAgICAgIGFzc2VydCBwa3QudHlw ZSA9PSBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlCisgICAgICAgICAgICBhc3NlcnQgcGt0LnBh eWxvYWQgPT0gYiJceDAxIgorCisgICAgICAgICAgICAjIE5vdyBmYWlsIHRoZSBTQVNMIGV4Y2hh bmdlIChpbiBlaXRoZXIgYSB2YWxpZCB3YXksIG9yIGFuIGludmFsaWQKKyAgICAgICAgICAgICMg b25lLCBkZXBlbmRpbmcgb24gdGhlIHRlc3QpLgorICAgICAgICAgICAgcHEzLnNlbmQoY29ubiwg cmVzcF90eXBlLCAqKnJlc3BfcGF5bG9hZCkKKworICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhwc3lj b3BnMi5PcGVyYXRpb25hbEVycm9yLCBtYXRjaD1leHBlY3RlZF9lcnJvcik6CisgICAgICAgIGNs aWVudC5jaGVja19jb21wbGV0ZWQoKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcHl0aG9uL3BxMy5w eSBiL3NyYy90ZXN0L3B5dGhvbi9wcTMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uM2EyMmRhZDBiNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5dGhvbi9w cTMucHkKQEAgLTAsMCArMSw3MjcgQEAKKyMKKyMgQ29weXJpZ2h0IDIwMjEgVk13YXJlLCBJbmMu CisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBQb3N0Z3JlU1FMCisjCisKK2ltcG9ydCBjb250 ZXh0bGliCitpbXBvcnQgZ2V0cGFzcworaW1wb3J0IGlvCitpbXBvcnQgb3MKK2ltcG9ydCBzc2wK K2ltcG9ydCBzeXMKK2ltcG9ydCB0ZXh0d3JhcAorCitmcm9tIGNvbnN0cnVjdCBpbXBvcnQgKgor CitpbXBvcnQgdGxzCisKKworZGVmIHByb3RvY29sKG1ham9yLCBtaW5vcik6CisgICAgIiIiCisg ICAgUmV0dXJucyB0aGUgcHJvdG9jb2wgdmVyc2lvbiwgaW4gaW50ZWdlciBmb3JtYXQsIGNvcnJl c3BvbmRpbmcgdG8gdGhlIGdpdmVuCisgICAgbWFqb3IgYW5kIG1pbm9yIHZlcnNpb24gbnVtYmVy cy4KKyAgICAiIiIKKyAgICByZXR1cm4gKG1ham9yIDw8IDE2KSB8IG1pbm9yCisKKworIyBTdGFy dHVwCisKK1N0cmluZ0xpc3QgPSBHcmVlZHlSYW5nZShOdWxsVGVybWluYXRlZChHcmVlZHlCeXRl cykpCisKKworY2xhc3MgS2V5VmFsdWVBZGFwdGVyKEFkYXB0ZXIpOgorICAgICIiIgorICAgIFR1 cm5zIGEga2V5LXZhbHVlIHN0b3JlIGludG8gYSBudWxsLXRlcm1pbmF0ZWQgbGlzdCBvZiBudWxs LXRlcm1pbmF0ZWQKKyAgICBzdHJpbmdzLCBhcyBwcmVzZW50ZWQgb24gdGhlIHdpcmUgaW4gdGhl IHN0YXJ0dXAgcGFja2V0LgorICAgICIiIgorCisgICAgZGVmIF9lbmNvZGUoc2VsZiwgb2JqLCBj b250ZXh0LCBwYXRoKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIGxpc3QpOgorICAgICAg ICAgICAgcmV0dXJuIG9iagorCisgICAgICAgIGwgPSBbXQorCisgICAgICAgIGZvciBrLCB2IGlu IG9iai5pdGVtcygpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrLCBzdHIpOgorICAgICAg ICAgICAgICAgIGsgPSBrLmVuY29kZSgidXRmLTgiKQorICAgICAgICAgICAgbC5hcHBlbmQoaykK KworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2LCBzdHIpOgorICAgICAgICAgICAgICAgIHYg PSB2LmVuY29kZSgidXRmLTgiKQorICAgICAgICAgICAgbC5hcHBlbmQodikKKworICAgICAgICBs LmFwcGVuZChiIiIpCisgICAgICAgIHJldHVybiBsCisKKyAgICBkZWYgX2RlY29kZShzZWxmLCBv YmosIGNvbnRleHQsIHBhdGgpOgorICAgICAgICAjIFRPRE86IHR1cm4gYSBsaXN0IGJhY2sgaW50 byBhIGRpY3QKKyAgICAgICAgcmV0dXJuIG9iagorCisKK0tleVZhbHVlcyA9IEtleVZhbHVlQWRh cHRlcihTdHJpbmdMaXN0KQorCitfc3RhcnR1cF9wYXlsb2FkID0gU3dpdGNoKAorICAgIHRoaXMu cHJvdG8sCisgICAgeworICAgICAgICBwcm90b2NvbCgzLCAwKTogS2V5VmFsdWVzLAorICAgIH0s CisgICAgZGVmYXVsdD1HcmVlZHlCeXRlcywKKykKKworCitkZWYgX2RlZmF1bHRfcHJvdG9jb2wo dGhpcyk6CisgICAgdHJ5OgorICAgICAgICBpZiBpc2luc3RhbmNlKHRoaXMucGF5bG9hZCwgKGxp c3QsIGRpY3QpKToKKyAgICAgICAgICAgIHJldHVybiBwcm90b2NvbCgzLCAwKQorICAgIGV4Y2Vw dCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcGFzcyAgIyBubyBwYXlsb2FkIHBhc3NlZCBkdXJp bmcgYnVpbGQKKworICAgIHJldHVybiAwCisKKworZGVmIF9zdGFydHVwX3BheWxvYWRfbGVuKHRo aXMpOgorICAgICIiIgorICAgIFRoZSBwYXlsb2FkIGZpZWxkIGhhcyBhIGZpeGVkIHNpemUgYmFz ZWQgb24gdGhlIGxlbmd0aCBvZiB0aGUgcGFja2V0LiBCdXQKKyAgICBpZiB0aGUgY2FsbGVyIGhh c24ndCBzdXBwbGllZCBhbiBleHBsaWNpdCBsZW5ndGggYXQgYnVpbGQgdGltZSwgd2UgaGF2ZSB0 bworICAgIGJ1aWxkIHRoZSBwYXlsb2FkIHRvIGZpZ3VyZSBvdXQgaG93IGxvbmcgaXQgaXMsIHdo aWNoIHJlcXVpcmVzIHVzIHRvIGtub3cKKyAgICB0aGUgbGVuZ3RoIGZpcnN0Li4uIFRoaXMgZnVu Y3Rpb24gZXhpc3RzIHNvbGVseSB0byBicmVhayB0aGUgY3ljbGUuCisgICAgIiIiCisgICAgYXNz ZXJ0IHRoaXMuX2J1aWxkaW5nLCAiX3N0YXJ0dXBfcGF5bG9hZF9sZW4oKSBjYW5ub3QgYmUgY2Fs bGVkIGR1cmluZyBwYXJzaW5nIgorCisgICAgdHJ5OgorICAgICAgICBwYXlsb2FkID0gdGhpcy5w YXlsb2FkCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICByZXR1cm4gMCAgIyBu byBwYXlsb2FkCisKKyAgICBpZiBpc2luc3RhbmNlKHBheWxvYWQsIGJ5dGVzKToKKyAgICAgICAg IyBhbHJlYWR5IHNlcmlhbGl6ZWQ7IGp1c3QgdXNlIHRoZSBnaXZlbiBsZW5ndGgKKyAgICAgICAg cmV0dXJuIGxlbihwYXlsb2FkKQorCisgICAgdHJ5OgorICAgICAgICBwcm90byA9IHRoaXMucHJv dG8KKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHByb3RvID0gX2RlZmF1bHRf cHJvdG9jb2wodGhpcykKKworICAgIGRhdGEgPSBfc3RhcnR1cF9wYXlsb2FkLmJ1aWxkKHBheWxv YWQsIHByb3RvPXByb3RvKQorICAgIHJldHVybiBsZW4oZGF0YSkKKworCitTdGFydHVwID0gU3Ry dWN0KAorICAgICJsZW4iIC8gRGVmYXVsdChJbnQzMnNiLCBsYW1iZGEgdGhpczogX3N0YXJ0dXBf cGF5bG9hZF9sZW4odGhpcykgKyA4KSwKKyAgICAicHJvdG8iIC8gRGVmYXVsdChIZXgoSW50MzJz YiksIF9kZWZhdWx0X3Byb3RvY29sKSwKKyAgICAicGF5bG9hZCIgLyBGaXhlZFNpemVkKHRoaXMu bGVuIC0gOCwgRGVmYXVsdChfc3RhcnR1cF9wYXlsb2FkLCBiIiIpKSwKKykKKworIyBQcTMKKwor IyBBZGFwdGVkIGZyb20gY29uc3RydWN0LmNvcmUuRW51bUludGVnZXJTdHJpbmcKK2NsYXNzIEVu dW1OYW1lZEJ5dGU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbCwgbmFtZSk6CisgICAgICAg IHNlbGYuX3ZhbCA9IHZhbAorICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQorCisgICAgZGVmIF9f aW50X18oc2VsZik6CisgICAgICAgIHJldHVybiBvcmQoc2VsZi5fdmFsKQorCisgICAgZGVmIF9f c3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiKGVudW0pICVzICVyIiAlIChzZWxmLl9uYW1l LCBzZWxmLl92YWwpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAi RW51bU5hbWVkQnl0ZSglcikiICUgc2VsZi5fdmFsCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90 aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgRW51bU5hbWVkQnl0ZSk6CisgICAg ICAgICAgICBvdGhlciA9IG90aGVyLl92YWwKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3Ro ZXIsIGJ5dGVzKToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgICAg IHJldHVybiBzZWxmLl92YWwgPT0gb3RoZXIKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAg ICAgICAgcmV0dXJuIGhhc2goc2VsZi5fdmFsKQorCisKKyMgQWRhcHRlZCBmcm9tIGNvbnN0cnVj dC5jb3JlLkVudW0KK2NsYXNzIEJ5dGVFbnVtKEFkYXB0ZXIpOgorICAgIGRlZiBfX2luaXRfXyhz ZWxmLCAqKm1hcHBpbmcpOgorICAgICAgICBzdXBlcihCeXRlRW51bSwgc2VsZikuX19pbml0X18o Qnl0ZSkKKyAgICAgICAgc2VsZi5uYW1lbWFwcGluZyA9IHtrOiBFbnVtTmFtZWRCeXRlKHYsIGsp IGZvciBrLCB2IGluIG1hcHBpbmcuaXRlbXMoKX0KKyAgICAgICAgc2VsZi5kZWNtYXBwaW5nID0g e3Y6IEVudW1OYW1lZEJ5dGUodiwgaykgZm9yIGssIHYgaW4gbWFwcGluZy5pdGVtcygpfQorCisg ICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICBpZiBuYW1lIGluIHNlbGYu bmFtZW1hcHBpbmc6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5kZWNtYXBwaW5nW3NlbGYubmFt ZW1hcHBpbmdbbmFtZV1dCisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yCisKKyAgICBkZWYg X2RlY29kZShzZWxmLCBvYmosIGNvbnRleHQsIHBhdGgpOgorICAgICAgICBiID0gYnl0ZXMoW29i al0pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmRlY21hcHBpbmdbYl0K KyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEVudW1OYW1lZEJ5 dGUoYiwgIih1bmtub3duKSIpCisKKyAgICBkZWYgX2VuY29kZShzZWxmLCBvYmosIGNvbnRleHQs IHBhdGgpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgaW50KToKKyAgICAgICAgICAgIHJl dHVybiBvYmoKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgYnl0ZXMpOgorICAgICAgICAg ICAgcmV0dXJuIG9yZChvYmopCisgICAgICAgIHJldHVybiBpbnQob2JqKQorCisKK3R5cGVzID0g Qnl0ZUVudW0oCisgICAgRXJyb3JSZXNwb25zZT1iIkUiLAorICAgIFJlYWR5Rm9yUXVlcnk9YiJa IiwKKyAgICBRdWVyeT1iIlEiLAorICAgIEVtcHR5UXVlcnlSZXNwb25zZT1iIkkiLAorICAgIEF1 dGhuUmVxdWVzdD1iIlIiLAorICAgIFBhc3N3b3JkTWVzc2FnZT1iInAiLAorICAgIEJhY2tlbmRL ZXlEYXRhPWIiSyIsCisgICAgQ29tbWFuZENvbXBsZXRlPWIiQyIsCisgICAgUGFyYW1ldGVyU3Rh dHVzPWIiUyIsCisgICAgRGF0YVJvdz1iIkQiLAorICAgIFRlcm1pbmF0ZT1iIlgiLAorKQorCisK K2F1dGhuID0gRW51bSgKKyAgICBJbnQzMnViLAorICAgIE9LPTAsCisgICAgU0FTTD0xMCwKKyAg ICBTQVNMQ29udGludWU9MTEsCisgICAgU0FTTEZpbmFsPTEyLAorKQorCisKK19hdXRobl9ib2R5 ID0gU3dpdGNoKAorICAgIHRoaXMudHlwZSwKKyAgICB7CisgICAgICAgIGF1dGhuLk9LOiBUZXJt aW5hdGVkLAorICAgICAgICBhdXRobi5TQVNMOiBTdHJpbmdMaXN0LAorICAgIH0sCisgICAgZGVm YXVsdD1HcmVlZHlCeXRlcywKKykKKworCitkZWYgX2RhdGFfbGVuKHRoaXMpOgorICAgIGFzc2Vy dCB0aGlzLl9idWlsZGluZywgIl9kYXRhX2xlbigpIGNhbm5vdCBiZSBjYWxsZWQgZHVyaW5nIHBh cnNpbmciCisKKyAgICBpZiBub3QgaGFzYXR0cih0aGlzLCAiZGF0YSIpIG9yIHRoaXMuZGF0YSBp cyBOb25lOgorICAgICAgICByZXR1cm4gLTEKKworICAgIHJldHVybiBsZW4odGhpcy5kYXRhKQor CisKKyMgVGhlIHByb3RvY29sIHJldXNlcyB0aGUgUGFzc3dvcmRNZXNzYWdlIGZvciBzZXZlcmFs IGF1dGhlbnRpY2F0aW9uIHJlc3BvbnNlCisjIHR5cGVzLCBhbmQgdGhlcmUncyBubyBnb29kIHdh eSB0byBmaWd1cmUgb3V0IHdoaWNoIGlzIHdoaWNoIHdpdGhvdXQga2VlcGluZworIyBzdGF0ZSBm b3IgdGhlIGVudGlyZSBzdHJlYW0uIFNvIHRoaXMgaXMgYSBzZXBhcmF0ZSBDb25zdHJ1Y3QgdGhh dCBjYW4gYmUKKyMgZXhwbGljaXRseSBwYXJzZWQvYnVpbHQgYnkgY29kZSB0aGF0IGtub3dzIGl0 J3MgbmVlZGVkLgorU0FTTEluaXRpYWxSZXNwb25zZSA9IFN0cnVjdCgKKyAgICAibmFtZSIgLyBO dWxsVGVybWluYXRlZChHcmVlZHlCeXRlcyksCisgICAgImxlbiIgLyBEZWZhdWx0KEludDMyc2Is IGxhbWJkYSB0aGlzOiBfZGF0YV9sZW4odGhpcykpLAorICAgICJkYXRhIgorICAgIC8gSWZUaGVu RWxzZSgKKyAgICAgICAgIyBBbGxvdyB0ZXN0cyB0byBleHBsaWNpdGx5IHBhc3MgYW4gaW5jb3Jy ZWN0IGxlbmd0aCBkdXJpbmcgdGVzdGluZywgYnkKKyAgICAgICAgIyBub3QgZW5mb3JjaW5nIGEg Rml4ZWRTaXplZCBkdXJpbmcgYnVpbGQuIChUaGUgbGVuIGNhbGN1bGF0aW9uIGFib3ZlCisgICAg ICAgICMgZGVmYXVsdHMgdG8gdGhlIGNvcnJlY3Qgc2l6ZS4pCisgICAgICAgIHRoaXMuX2J1aWxk aW5nLAorICAgICAgICBPcHRpb25hbChHcmVlZHlCeXRlcyksCisgICAgICAgIElmKHRoaXMubGVu ICE9IC0xLCBEZWZhdWx0KEZpeGVkU2l6ZWQodGhpcy5sZW4sIEdyZWVkeUJ5dGVzKSwgYiIiKSks CisgICAgKSwKKyAgICBUZXJtaW5hdGVkLCAgIyBtYWtlIHN1cmUgdGhlIGVudGlyZSByZXNwb25z ZSBpcyBjb25zdW1lZAorKQorCisKK19jb2x1bW4gPSBGb2N1c2VkU2VxKAorICAgICJkYXRhIiwK KyAgICAibGVuIiAvIERlZmF1bHQoSW50MzJzYiwgbGFtYmRhIHRoaXM6IF9kYXRhX2xlbih0aGlz KSksCisgICAgImRhdGEiIC8gSWYodGhpcy5sZW4gIT0gLTEsIEZpeGVkU2l6ZWQodGhpcy5sZW4s IEdyZWVkeUJ5dGVzKSksCispCisKKworX3BheWxvYWRfbWFwID0geworICAgIHR5cGVzLkVycm9y UmVzcG9uc2U6IFN0cnVjdCgiZmllbGRzIiAvIFN0cmluZ0xpc3QpLAorICAgIHR5cGVzLlJlYWR5 Rm9yUXVlcnk6IFN0cnVjdCgic3RhdHVzIiAvIEJ5dGVzKDEpKSwKKyAgICB0eXBlcy5RdWVyeTog U3RydWN0KCJxdWVyeSIgLyBOdWxsVGVybWluYXRlZChHcmVlZHlCeXRlcykpLAorICAgIHR5cGVz LkVtcHR5UXVlcnlSZXNwb25zZTogVGVybWluYXRlZCwKKyAgICB0eXBlcy5BdXRoblJlcXVlc3Q6 IFN0cnVjdCgidHlwZSIgLyBhdXRobiwgImJvZHkiIC8gRGVmYXVsdChfYXV0aG5fYm9keSwgYiIi KSksCisgICAgdHlwZXMuQmFja2VuZEtleURhdGE6IFN0cnVjdCgicGlkIiAvIEludDMydWIsICJr ZXkiIC8gSGV4KEludDMydWIpKSwKKyAgICB0eXBlcy5Db21tYW5kQ29tcGxldGU6IFN0cnVjdCgi dGFnIiAvIE51bGxUZXJtaW5hdGVkKEdyZWVkeUJ5dGVzKSksCisgICAgdHlwZXMuUGFyYW1ldGVy U3RhdHVzOiBTdHJ1Y3QoCisgICAgICAgICJuYW1lIiAvIE51bGxUZXJtaW5hdGVkKEdyZWVkeUJ5 dGVzKSwgInZhbHVlIiAvIE51bGxUZXJtaW5hdGVkKEdyZWVkeUJ5dGVzKQorICAgICksCisgICAg dHlwZXMuRGF0YVJvdzogU3RydWN0KCJjb2x1bW5zIiAvIERlZmF1bHQoUHJlZml4ZWRBcnJheShJ bnQxNnNiLCBfY29sdW1uKSwgYiIiKSksCisgICAgdHlwZXMuVGVybWluYXRlOiBUZXJtaW5hdGVk LAorfQorCisKK19wYXlsb2FkID0gRm9jdXNlZFNlcSgKKyAgICAiX3BheWxvYWQiLAorICAgICJf cGF5bG9hZCIKKyAgICAvIFN3aXRjaCgKKyAgICAgICAgdGhpcy5fLnR5cGUsCisgICAgICAgIF9w YXlsb2FkX21hcCwKKyAgICAgICAgZGVmYXVsdD1HcmVlZHlCeXRlcywKKyAgICApLAorICAgIFRl cm1pbmF0ZWQsICAjIG1ha2Ugc3VyZSBldmVyeSBwYXlsb2FkIGNvbnN1bWVzIHRoZSBlbnRpcmUg cGFja2V0CispCisKKworZGVmIF9wYXlsb2FkX2xlbih0aGlzKToKKyAgICAiIiIKKyAgICBTZWUg X3N0YXJ0dXBfcGF5bG9hZF9sZW4oKSBmb3IgYW4gZXhwbGFuYXRpb24uCisgICAgIiIiCisgICAg YXNzZXJ0IHRoaXMuX2J1aWxkaW5nLCAiX3BheWxvYWRfbGVuKCkgY2Fubm90IGJlIGNhbGxlZCBk dXJpbmcgcGFyc2luZyIKKworICAgIHRyeToKKyAgICAgICAgcGF5bG9hZCA9IHRoaXMucGF5bG9h ZAorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcmV0dXJuIDAgICMgbm8gcGF5 bG9hZAorCisgICAgaWYgaXNpbnN0YW5jZShwYXlsb2FkLCBieXRlcyk6CisgICAgICAgICMgYWxy ZWFkeSBzZXJpYWxpemVkOyBqdXN0IHVzZSB0aGUgZ2l2ZW4gbGVuZ3RoCisgICAgICAgIHJldHVy biBsZW4ocGF5bG9hZCkKKworICAgIGRhdGEgPSBfcGF5bG9hZC5idWlsZChwYXlsb2FkLCB0eXBl PXRoaXMudHlwZSkKKyAgICByZXR1cm4gbGVuKGRhdGEpCisKKworUHEzID0gU3RydWN0KAorICAg ICJ0eXBlIiAvIHR5cGVzLAorICAgICJsZW4iIC8gRGVmYXVsdChJbnQzMnViLCBsYW1iZGEgdGhp czogX3BheWxvYWRfbGVuKHRoaXMpICsgNCksCisgICAgInBheWxvYWQiIC8gRml4ZWRTaXplZCh0 aGlzLmxlbiAtIDQsIERlZmF1bHQoX3BheWxvYWQsIGIiIikpLAorKQorCisKKyMgRW52aXJvbm1l bnQKKworCitkZWYgcGdob3N0KCk6CisgICAgcmV0dXJuIG9zLmVudmlyb24uZ2V0KCJQR0hPU1Qi LCBkZWZhdWx0PSJsb2NhbGhvc3QiKQorCisKK2RlZiBwZ3BvcnQoKToKKyAgICByZXR1cm4gaW50 KG9zLmVudmlyb24uZ2V0KCJQR1BPUlQiLCBkZWZhdWx0PTU0MzIpKQorCisKK2RlZiBwZ3VzZXIo KToKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBvcy5lbnZpcm9uWyJQR1VTRVIiXQorICAgIGV4 Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcmV0dXJuIGdldHBhc3MuZ2V0dXNlcigpCisKKworZGVm IHBnZGF0YWJhc2UoKToKKyAgICByZXR1cm4gb3MuZW52aXJvbi5nZXQoIlBHREFUQUJBU0UiLCBk ZWZhdWx0PSJwb3N0Z3JlcyIpCisKKworIyBDb25uZWN0aW9ucworCisKK2RlZiBfaGV4ZHVtcF90 cmFuc2xhdGlvbl9tYXAoKToKKyAgICAiIiIKKyAgICBGb3IgaGV4ZHVtcHMuIFRyYW5zbGF0ZXMg YW55IHVucHJpbnRhYmxlIG9yIG5vbi1BU0NJSSBieXRlcyBpbnRvICcuJy4KKyAgICAiIiIKKyAg ICBpbnB1dCA9IGJ5dGVhcnJheSgpCisKKyAgICBmb3IgaSBpbiByYW5nZSgxMjgpOgorICAgICAg ICBjID0gY2hyKGkpCisKKyAgICAgICAgaWYgbm90IGMuaXNwcmludGFibGUoKToKKyAgICAgICAg ICAgIGlucHV0ICs9IGJ5dGVzKFtpXSkKKworICAgIGlucHV0ICs9IGJ5dGVzKHJhbmdlKDEyOCwg MjU2KSkKKworICAgIHJldHVybiBieXRlcy5tYWtldHJhbnMoaW5wdXQsIGIiLiIgKiBsZW4oaW5w dXQpKQorCisKK2NsYXNzIF9EZWJ1Z1N0cmVhbShvYmplY3QpOgorICAgICIiIgorICAgIFdyYXBz IGEgZmlsZS1saWtlIG9iamVjdCBhbmQgYWRkcyBoZXhkdW1wcyBvZiB0aGUgcmVhZCBhbmQgd3Jp dGUgZGF0YS4gQ2FsbAorICAgIGVuZF9wYWNrZXQoKSBvbiBhIF9EZWJ1Z1N0cmVhbSB0byB3cml0 ZSB0aGUgYWNjdW11bGF0ZWQgaGV4ZHVtcHMgdG8gdGhlCisgICAgb3V0cHV0IHN0cmVhbSwgYWxv bmcgd2l0aCB0aGUgcGFja2V0IHRoYXQgd2FzIHNlbnQuCisgICAgIiIiCisKKyAgICBfdHJhbnNs YXRpb25fbWFwID0gX2hleGR1bXBfdHJhbnNsYXRpb25fbWFwKCkKKworICAgIGRlZiBfX2luaXRf XyhzZWxmLCBzdHJlYW0sIG91dD1zeXMuc3Rkb3V0KToKKyAgICAgICAgIiIiCisgICAgICAgIENy ZWF0ZXMgYSBuZXcgX0RlYnVnU3RyZWFtIHdyYXBwaW5nIHRoZSBnaXZlbiBzdHJlYW0gKHdoaWNo IG11c3QgaGF2ZQorICAgICAgICBiZWVuIGNyZWF0ZWQgYnkgd3JhcCgpKS4gQWxsIGF0dHJpYnV0 ZXMgbm90IHByb3ZpZGVkIGJ5IHRoZSBfRGVidWdTdHJlYW0KKyAgICAgICAgYXJlIGRlbGVnYXRl ZCB0byB0aGUgd3JhcHBlZCBzdHJlYW0uIG91dCBpcyB0aGUgdGV4dCBzdHJlYW0gdG8gd2hpY2gK KyAgICAgICAgaGV4ZHVtcHMgYXJlIHdyaXR0ZW4uCisgICAgICAgICIiIgorICAgICAgICBzZWxm LnJhdyA9IHN0cmVhbQorICAgICAgICBzZWxmLl9vdXQgPSBvdXQKKyAgICAgICAgc2VsZi5fcmJ1 ZiA9IGlvLkJ5dGVzSU8oKQorICAgICAgICBzZWxmLl93YnVmID0gaW8uQnl0ZXNJTygpCisKKyAg ICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBnZXRhdHRyKHNl bGYucmF3LCBuYW1lKQorCisgICAgZGVmIF9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKToK KyAgICAgICAgaWYgbmFtZSBpbiAoInJhdyIsICJfb3V0IiwgIl9yYnVmIiwgIl93YnVmIik6Cisg ICAgICAgICAgICByZXR1cm4gb2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKQor CisgICAgICAgIHNldGF0dHIoc2VsZi5yYXcsIG5hbWUsIHZhbHVlKQorCisgICAgZGVmIHJlYWQo c2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgYnVmID0gc2VsZi5yYXcucmVhZCgqYXJn cywgKiprd2FyZ3MpCisKKyAgICAgICAgc2VsZi5fcmJ1Zi53cml0ZShidWYpCisgICAgICAgIHJl dHVybiBidWYKKworICAgIGRlZiB3cml0ZShzZWxmLCBiKToKKyAgICAgICAgc2VsZi5fd2J1Zi53 cml0ZShiKQorICAgICAgICByZXR1cm4gc2VsZi5yYXcud3JpdGUoYikKKworICAgIGRlZiByZWN2 KHNlbGYsICphcmdzKToKKyAgICAgICAgYnVmID0gc2VsZi5yYXcucmVjdigqYXJncykKKworICAg ICAgICBzZWxmLl9yYnVmLndyaXRlKGJ1ZikKKyAgICAgICAgcmV0dXJuIGJ1ZgorCisgICAgZGVm IF9mbHVzaChzZWxmLCBidWYsIHByZWZpeCk6CisgICAgICAgIHdpZHRoID0gMTYKKyAgICAgICAg aGV4d2lkdGggPSB3aWR0aCAqIDMgLSAxCisKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIGJ1 Zi5zZWVrKDApCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGxpbmUgPSBidWYu cmVhZCgxNikKKworICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgaWYg Y291bnQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX291dC53cml0ZSgiXG4iKSAgIyBzZXBh cmF0ZSB0aGUgb3V0cHV0IGJsb2NrIHdpdGggYSBuZXdsaW5lCisgICAgICAgICAgICAgICAgcmV0 dXJuCisKKyAgICAgICAgICAgIHNlbGYuX291dC53cml0ZSgiJXMgJTA0WDpcdCIgJSAocHJlZml4 LCBjb3VudCkpCisgICAgICAgICAgICBzZWxmLl9vdXQud3JpdGUoIiUqc1x0IiAlICgtaGV4d2lk dGgsIGxpbmUuaGV4KCIgIikpKQorICAgICAgICAgICAgc2VsZi5fb3V0LndyaXRlKGxpbmUudHJh bnNsYXRlKHNlbGYuX3RyYW5zbGF0aW9uX21hcCkuZGVjb2RlKCJhc2NpaSIpKQorICAgICAgICAg ICAgc2VsZi5fb3V0LndyaXRlKCJcbiIpCisKKyAgICAgICAgICAgIGNvdW50ICs9IDE2CisKKyAg ICBkZWYgcHJpbnRfZGVidWcoc2VsZiwgb2JqLCAqLCBwcmVmaXg9IiIpOgorICAgICAgICBjb250 ZW50cyA9ICIiCisgICAgICAgIGlmIG9iaiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGNvbnRl bnRzID0gc3RyKG9iaikKKworICAgICAgICBmb3IgbGluZSBpbiBjb250ZW50cy5zcGxpdGxpbmVz KCk6CisgICAgICAgICAgICBzZWxmLl9vdXQud3JpdGUoIiVzJXNcbiIgJSAocHJlZml4LCBsaW5l KSkKKworICAgICAgICBzZWxmLl9vdXQud3JpdGUoIlxuIikKKworICAgIGRlZiBmbHVzaF9kZWJ1 ZyhzZWxmLCAqLCBwcmVmaXg9IiIpOgorICAgICAgICBzZWxmLl9mbHVzaChzZWxmLl9yYnVmLCBw cmVmaXggKyAiPCIpCisgICAgICAgIHNlbGYuX3JidWYgPSBpby5CeXRlc0lPKCkKKworICAgICAg ICBzZWxmLl9mbHVzaChzZWxmLl93YnVmLCBwcmVmaXggKyAiPiIpCisgICAgICAgIHNlbGYuX3di dWYgPSBpby5CeXRlc0lPKCkKKworICAgIGRlZiBlbmRfcGFja2V0KHNlbGYsIHBrdCwgKiwgcmVh ZD1GYWxzZSwgcHJlZml4PSIiLCBpbmRlbnQ9IiAgIik6CisgICAgICAgICIiIgorICAgICAgICBN YXJrcyB0aGUgZW5kIG9mIGEgbG9naWNhbCAicGFja2V0IiBvZiBkYXRhLiBBIHN0cmluZyByZXBy ZXNlbnRhdGlvbiBvZgorICAgICAgICBwa3Qgd2lsbCBiZSBwcmludGVkLCBhbmQgdGhlIGRlYnVn IGJ1ZmZlcnMgd2lsbCBiZSBmbHVzaGVkIHdpdGggYW4KKyAgICAgICAgaW5kZW50LiBBbGwgbGlu ZXMgY2FuIGJlIG9wdGlvbmFsbHkgcHJlZml4ZWQuCisKKyAgICAgICAgSWYgcmVhZCBpcyBUcnVl LCB0aGUgcGFja2V0IHJlcHJlc2VudGF0aW9uIGlzIHdyaXR0ZW4gYWZ0ZXIgdGhlIGRlYnVnCisg ICAgICAgIGJ1ZmZlcnM7IG90aGVyd2lzZSB0aGUgZGVmYXVsdCBvZiBGYWxzZSAobWVhbmluZyB3 cml0ZSkgY2F1c2VzIHRoZQorICAgICAgICBwYWNrZXQgcmVwcmVzZW50YXRpb24gdG8gYmUgZHVt cGVkIGZpcnN0LiBUaGlzIGlzIG1lYW50IHRvIGNhcHR1cmUgdGhlCisgICAgICAgIGxvZ2ljYWwg ZmxvdyBvZiBsYXllciB0cmFuc2xhdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHdyaXRlID0g bm90IHJlYWQKKworICAgICAgICBpZiB3cml0ZToKKyAgICAgICAgICAgIHNlbGYucHJpbnRfZGVi dWcocGt0LCBwcmVmaXg9cHJlZml4ICsgIj4gIikKKworICAgICAgICBzZWxmLmZsdXNoX2RlYnVn KHByZWZpeD1wcmVmaXggKyBpbmRlbnQpCisKKyAgICAgICAgaWYgcmVhZDoKKyAgICAgICAgICAg IHNlbGYucHJpbnRfZGVidWcocGt0LCBwcmVmaXg9cHJlZml4ICsgIjwgIikKKworCitAY29udGV4 dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIHdyYXAoc29ja2V0LCAqLCBkZWJ1Z19zdHJlYW09Tm9u ZSk6CisgICAgIiIiCisgICAgVHJhbnNmb3JtcyBhIHJhdyBzb2NrZXQgaW50byBhIGNvbm5lY3Rp b24gdGhhdCBjYW4gYmUgdXNlZCBmb3IgQ29uc3RydWN0CisgICAgYnVpbGRpbmcgYW5kIHBhcnNp bmcuIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBjb250ZXh0IG1hbmFnZXIgYW5kIGNhbiBiZSB1c2Vk CisgICAgaW4gYSB3aXRoIHN0YXRlbWVudC4KKyAgICAiIiIKKyAgICAjIEl0IGlzIGNyaXRpY2Fs IHRoYXQgYnVmZmVyaW5nIGJlIGRpc2FibGVkIGhlcmUsIHNvIHRoYXQgd2UgY2FuIHN0aWxsCisg ICAgIyBtYW5pcHVsYXRlIHRoZSByYXcgc29ja2V0IHdpdGhvdXQgZGVzeW5jaW5nIHRoZSBzdHJl YW0uCisgICAgd2l0aCBzb2NrZXQubWFrZWZpbGUoInJ3YiIsIGJ1ZmZlcmluZz0wKSBhcyBzZmls ZToKKyAgICAgICAgIyBFeHBvc2UgdGhlIG9yaWdpbmFsIHNvY2tldCdzIHJlY3YoKSBvbiB0aGUg U29ja2V0SU8gb2JqZWN0IHdlIHJldHVybi4KKyAgICAgICAgZGVmIHJlY3Yoc2VsZiwgKmFyZ3Mp OgorICAgICAgICAgICAgcmV0dXJuIHNvY2tldC5yZWN2KCphcmdzKQorCisgICAgICAgIHNmaWxl LnJlY3YgPSByZWN2Ll9fZ2V0X18oc2ZpbGUpCisKKyAgICAgICAgY29ubiA9IHNmaWxlCisgICAg ICAgIGlmIGRlYnVnX3N0cmVhbToKKyAgICAgICAgICAgIGNvbm4gPSBfRGVidWdTdHJlYW0oY29u biwgZGVidWdfc3RyZWFtKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkIGNvbm4K KyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIGRlYnVnX3N0cmVhbToKKyAgICAgICAg ICAgICAgICBjb25uLmZsdXNoX2RlYnVnKHByZWZpeD0iPyAiKQorCisKK2RlZiBfc2VuZChzdHJl YW0sIGNscywgb2JqKToKKyAgICBkZWJ1Z2dpbmcgPSBoYXNhdHRyKHN0cmVhbSwgImZsdXNoX2Rl YnVnIikKKyAgICBvdXQgPSBpby5CeXRlc0lPKCkKKworICAgICMgSWRlYWxseSB3ZSB3b3VsZCBi dWlsZCBkaXJlY3RseSB0byB0aGUgcGFzc2VkIHN0cmVhbSwgYnV0IGJlY2F1c2Ugd2UgbmVlZAor ICAgICMgdG8gcmVwYXJzZSB0aGUgZ2VuZXJhdGVkIG91dHB1dCBmb3IgdGhlIGRlYnVnZ2luZyBj YXNlLCBidWlsZCB0byBhbgorICAgICMgaW50ZXJtZWRpYXRlIEJ5dGVzSU8gYW5kIHNlbmQgaXQg aW5zdGVhZC4KKyAgICBjbHMuYnVpbGRfc3RyZWFtKG9iaiwgb3V0KQorICAgIGJ1ZiA9IG91dC5n ZXR2YWx1ZSgpCisKKyAgICBzdHJlYW0ud3JpdGUoYnVmKQorICAgIGlmIGRlYnVnZ2luZzoKKyAg ICAgICAgcGt0ID0gY2xzLnBhcnNlKGJ1ZikKKyAgICAgICAgc3RyZWFtLmVuZF9wYWNrZXQocGt0 KQorCisgICAgc3RyZWFtLmZsdXNoKCkKKworCitkZWYgc2VuZChzdHJlYW0sIHBhY2tldF90eXBl LCBwYXlsb2FkX2RhdGE9Tm9uZSwgKipwYXlsb2Fka3cpOgorICAgICIiIgorICAgIFNlbmRzIGEg cGFja2V0IG9uIHRoZSBnaXZlbiBwcTMgY29ubmVjdGlvbi4gdHlwZSBpcyB0aGUgcHEzLnR5cGVz IG1lbWJlcgorICAgIHRoYXQgc2hvdWxkIGJlIGFzc2lnbmVkIHRvIHRoZSBwYWNrZXQuIElmIHBh eWxvYWRfZGF0YSBpcyBnaXZlbiwgaXQgd2lsbCBiZQorICAgIHVzZWQgYXMgdGhlIHBhY2tldCBw YXlsb2FkOyBvdGhlcndpc2UgdGhlIGtleS92YWx1ZSBwYWlycyBpbiBwYXlsb2Fka3cgd2lsbAor ICAgIGJlIHRoZSBwYXlsb2FkIGNvbnRlbnRzLgorICAgICIiIgorICAgIGRhdGEgPSBwYXlsb2Fk a3cKKworICAgIGlmIHBheWxvYWRfZGF0YSBpcyBub3QgTm9uZToKKyAgICAgICAgaWYgcGF5bG9h ZGt3OgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAicGF5 bG9hZF9kYXRhIGFuZCBwYXlsb2FkIGtleXdvcmRzIG1heSBub3QgYmUgdXNlZCBzaW11bHRhbmVv dXNseSIKKyAgICAgICAgICAgICkKKworICAgICAgICBkYXRhID0gcGF5bG9hZF9kYXRhCisKKyAg ICBfc2VuZChzdHJlYW0sIFBxMywgZGljdCh0eXBlPXBhY2tldF90eXBlLCBwYXlsb2FkPWRhdGEp KQorCisKK2RlZiBzZW5kX3N0YXJ0dXAoc3RyZWFtLCBwcm90bz1Ob25lLCAqKmt3YXJncyk6Cisg ICAgIiIiCisgICAgU2VuZHMgYSBzdGFydHVwIHBhY2tldCBvbiB0aGUgZ2l2ZW4gcHEzIGNvbm5l Y3Rpb24uIEluIG1vc3QgY2FzZXMgeW91IHNob3VsZAorICAgIHVzZSB0aGUgaGFuZHNoYWtlIGZ1 bmN0aW9ucyBpbnN0ZWFkLCB3aGljaCB3aWxsIGRvIHRoaXMgZm9yIHlvdS4KKworICAgIEJ5IGRl ZmF1bHQsIGEgcHJvdG9jb2wgdmVyc2lvbiAzIHBhY2tldCB3aWxsIGJlIHNlbnQuIFRoaXMgY2Fu IGJlIG92ZXJyaWRkZW4KKyAgICB3aXRoIHRoZSBwcm90byBwYXJhbWV0ZXIuCisgICAgIiIiCisg ICAgcGt0ID0ge30KKworICAgIGlmIHByb3RvIGlzIG5vdCBOb25lOgorICAgICAgICBwa3RbInBy b3RvIl0gPSBwcm90bworICAgIGlmIGt3YXJnczoKKyAgICAgICAgcGt0WyJwYXlsb2FkIl0gPSBr d2FyZ3MKKworICAgIF9zZW5kKHN0cmVhbSwgU3RhcnR1cCwgcGt0KQorCisKK2RlZiByZWN2MShz dHJlYW0sICosIGNscz1QcTMpOgorICAgICIiIgorICAgIFJlY2VpdmVzIGEgc2luZ2xlIHBxMyBw YWNrZXQgZnJvbSB0aGUgZ2l2ZW4gc3RyZWFtIGFuZCByZXR1cm5zIGl0LgorICAgICIiIgorICAg IHJlc3AgPSBjbHMucGFyc2Vfc3RyZWFtKHN0cmVhbSkKKworICAgIGRlYnVnZ2luZyA9IGhhc2F0 dHIoc3RyZWFtLCAiZmx1c2hfZGVidWciKQorICAgIGlmIGRlYnVnZ2luZzoKKyAgICAgICAgc3Ry ZWFtLmVuZF9wYWNrZXQocmVzcCwgcmVhZD1UcnVlKQorCisgICAgcmV0dXJuIHJlc3AKKworCitk ZWYgaGFuZHNoYWtlKHN0cmVhbSwgKiprd2FyZ3MpOgorICAgICIiIgorICAgIFBlcmZvcm1zIGEg bGlicHEgdjMgc3RhcnR1cCBoYW5kc2hha2UuIGt3YXJncyBzaG91bGQgY29udGFpbiB0aGUga2V5 L3ZhbHVlCisgICAgcGFyYW1ldGVycyB0byBzZW5kIHRvIHRoZSBzZXJ2ZXIgaW4gdGhlIHN0YXJ0 dXAgcGFja2V0LgorICAgICIiIgorICAgICMgU2VuZCBvdXIgc3RhcnR1cCBwYXJhbWV0ZXJzLgor ICAgIHNlbmRfc3RhcnR1cChzdHJlYW0sICoqa3dhcmdzKQorCisgICAgIyBSZWNlaXZlIGFuZCBk dW1wIHBhY2tldHMgdW50aWwgdGhlIHNlcnZlciBpbmRpY2F0ZXMgaXQncyByZWFkeSBmb3Igb3Vy CisgICAgIyBmaXJzdCBxdWVyeS4KKyAgICB3aGlsZSBUcnVlOgorICAgICAgICByZXNwID0gcmVj djEoc3RyZWFtKQorICAgICAgICBpZiByZXNwIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBS dW50aW1lRXJyb3IoInNlcnZlciBjbG9zZWQgY29ubmVjdGlvbiBkdXJpbmcgaGFuZHNoYWtlIikK KworICAgICAgICBpZiByZXNwLnR5cGUgPT0gdHlwZXMuUmVhZHlGb3JRdWVyeToKKyAgICAgICAg ICAgIHJldHVybgorICAgICAgICBlbGlmIHJlc3AudHlwZSA9PSB0eXBlcy5FcnJvclJlc3BvbnNl OgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAorICAgICAgICAgICAgICAgIGYicmVj ZWl2ZWQgZXJyb3IgcmVzcG9uc2UgZnJvbSBwZWVyOiB7cmVzcC5wYXlsb2FkLmZpZWxkcyFyfSIK KyAgICAgICAgICAgICkKKworCisjIFRMUworCisKK2NsYXNzIF9UTFNTdHJlYW0ob2JqZWN0KToK KyAgICAiIiIKKyAgICBBIGZpbGUtbGlrZSBvYmplY3QgdGhhdCBwZXJmb3JtcyBUTFMgZW5jcnlw dGlvbi9kZWNyeXB0aW9uIG9uIGEgd3JhcHBlZAorICAgIHN0cmVhbS4gRGlmZmVycyBmcm9tIHNz bC5TU0xTb2NrZXQgaW4gdGhhdCB3ZSBoYXZlIGZ1bGwgdmlzaWJpbGl0eSBhbmQKKyAgICBjb250 cm9sIG92ZXIgdGhlIFRMUyBsYXllci4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxm LCBzdHJlYW0sIGNvbnRleHQpOgorICAgICAgICBzZWxmLl9zdHJlYW0gPSBzdHJlYW0KKyAgICAg ICAgc2VsZi5fZGVidWdnaW5nID0gaGFzYXR0cihzdHJlYW0sICJmbHVzaF9kZWJ1ZyIpCisKKyAg ICAgICAgc2VsZi5faW4gPSBzc2wuTWVtb3J5QklPKCkKKyAgICAgICAgc2VsZi5fb3V0ID0gc3Ns Lk1lbW9yeUJJTygpCisgICAgICAgIHNlbGYuX3NzbCA9IGNvbnRleHQud3JhcF9iaW8oc2VsZi5f aW4sIHNlbGYuX291dCkKKworICAgIGRlZiBoYW5kc2hha2Uoc2VsZik6CisgICAgICAgIHRyeToK KyAgICAgICAgICAgIHNlbGYuX3B1bXAobGFtYmRhOiBzZWxmLl9zc2wuZG9faGFuZHNoYWtlKCkp CisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9mbHVzaF9kZWJ1ZyhwcmVmaXg9 Ij8gIikKKworICAgIGRlZiByZWFkKHNlbGYsICphcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYu X3B1bXAobGFtYmRhOiBzZWxmLl9zc2wucmVhZCgqYXJncykpCisKKyAgICBkZWYgd3JpdGUoc2Vs ZiwgKmFyZ3MpOgorICAgICAgICByZXR1cm4gc2VsZi5fcHVtcChsYW1iZGE6IHNlbGYuX3NzbC53 cml0ZSgqYXJncykpCisKKyAgICBkZWYgX2RlY29kZShzZWxmLCBidWYpOgorICAgICAgICAiIiIK KyAgICAgICAgQXR0ZW1wdHMgdG8gZGVjb2RlIGEgYnVmZmVyIG9mIFRMUyBkYXRhIGludG8gYSBw YWNrZXQgcmVwcmVzZW50YXRpb24KKyAgICAgICAgdGhhdCBjYW4gYmUgcHJpbnRlZC4KKworICAg ICAgICBUT0RPOiBoYW5kbGUgYnVmZmVycyAoYW5kIHJlY29yZCBmcmFnbWVudHMpIHRoYXQgZG9u J3QgYWxpZ24gd2l0aCBwYWNrZXQKKyAgICAgICAgYm91bmRhcmllcy4KKyAgICAgICAgIiIiCisg ICAgICAgIGVuZCA9IGxlbihidWYpCisgICAgICAgIGJpbyA9IGlvLkJ5dGVzSU8oYnVmKQorCisg ICAgICAgIHJldCA9IGlvLlN0cmluZ0lPKCkKKworICAgICAgICB3aGlsZSBiaW8udGVsbCgpIDwg ZW5kOgorICAgICAgICAgICAgcmVjb3JkID0gdGxzLlBsYWludGV4dC5wYXJzZV9zdHJlYW0oYmlv KQorCisgICAgICAgICAgICBpZiByZXQudGVsbCgpID4gMDoKKyAgICAgICAgICAgICAgICByZXQu d3JpdGUoIlxuIikKKyAgICAgICAgICAgIHJldC53cml0ZSgiW1JlY29yZF0gIikKKyAgICAgICAg ICAgIHJldC53cml0ZShzdHIocmVjb3JkKSkKKyAgICAgICAgICAgIHJldC53cml0ZSgiXG4iKQor CisgICAgICAgICAgICBpZiByZWNvcmQudHlwZSA9PSB0bHMuQ29udGVudFR5cGUuaGFuZHNoYWtl OgorICAgICAgICAgICAgICAgIHJlY29yZF9jbHMgPSB0bHMuSGFuZHNoYWtlCisgICAgICAgICAg ICBlbHNlOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlubmVybGVu ID0gbGVuKHJlY29yZC5mcmFnbWVudCkKKyAgICAgICAgICAgIGlubmVyID0gaW8uQnl0ZXNJTyhy ZWNvcmQuZnJhZ21lbnQpCisKKyAgICAgICAgICAgIHdoaWxlIGlubmVyLnRlbGwoKSA8IGlubmVy bGVuOgorICAgICAgICAgICAgICAgIG1zZyA9IHJlY29yZF9jbHMucGFyc2Vfc3RyZWFtKGlubmVy KQorCisgICAgICAgICAgICAgICAgaW5kZW50ZWQgPSAiW01lc3NhZ2VdICIgKyBzdHIobXNnKQor ICAgICAgICAgICAgICAgIGluZGVudGVkID0gdGV4dHdyYXAuaW5kZW50KGluZGVudGVkLCAiICAg ICIpCisKKyAgICAgICAgICAgICAgICByZXQud3JpdGUoIlxuIikKKyAgICAgICAgICAgICAgICBy ZXQud3JpdGUoaW5kZW50ZWQpCisgICAgICAgICAgICAgICAgcmV0LndyaXRlKCJcbiIpCisKKyAg ICAgICAgcmV0dXJuIHJldC5nZXR2YWx1ZSgpCisKKyAgICBkZWYgZmx1c2goc2VsZik6CisgICAg ICAgIGlmIG5vdCBzZWxmLl9vdXQucGVuZGluZzoKKyAgICAgICAgICAgIHNlbGYuX3N0cmVhbS5m bHVzaCgpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBidWYgPSBzZWxmLl9vdXQucmVh ZCgpCisgICAgICAgIHNlbGYuX3N0cmVhbS53cml0ZShidWYpCisKKyAgICAgICAgaWYgc2VsZi5f ZGVidWdnaW5nOgorICAgICAgICAgICAgcGt0ID0gc2VsZi5fZGVjb2RlKGJ1ZikKKyAgICAgICAg ICAgIHNlbGYuX3N0cmVhbS5lbmRfcGFja2V0KHBrdCwgcHJlZml4PSIgICIpCisKKyAgICAgICAg c2VsZi5fc3RyZWFtLmZsdXNoKCkKKworICAgIGRlZiBfcHVtcChzZWxmLCBvcGVyYXRpb24pOgor ICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJl dHVybiBvcGVyYXRpb24oKQorICAgICAgICAgICAgZXhjZXB0IChzc2wuU1NMV2FudFJlYWRFcnJv ciwgc3NsLlNTTFdhbnRXcml0ZUVycm9yKSBhcyBlOgorICAgICAgICAgICAgICAgIHdhbnQgPSBl CisgICAgICAgICAgICBzZWxmLl9yZWFkX3dyaXRlKHdhbnQpCisKKyAgICBkZWYgX3JlY3Yoc2Vs ZiwgbWF4c2l6ZSk6CisgICAgICAgIGJ1ZiA9IHNlbGYuX3N0cmVhbS5yZWN2KDQwOTYpCisgICAg ICAgIGlmIG5vdCBidWY6CisgICAgICAgICAgICBzZWxmLl9pbi53cml0ZV9lb2YoKQorICAgICAg ICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5faW4ud3JpdGUoYnVmKQorCisgICAgICAgIGlm IG5vdCBzZWxmLl9kZWJ1Z2dpbmc6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBwa3Qg PSBzZWxmLl9kZWNvZGUoYnVmKQorICAgICAgICBzZWxmLl9zdHJlYW0uZW5kX3BhY2tldChwa3Qs IHJlYWQ9VHJ1ZSwgcHJlZml4PSIgICIpCisKKyAgICBkZWYgX3JlYWRfd3JpdGUoc2VsZiwgd2Fu dCk6CisgICAgICAgICMgWFhYIFRoaXMgbmVlZHMgd29yay4gU28gbWFueSBjb3JuZXIgY2FzZXMg eWV0IHRvIGhhbmRsZS4gRm9yIG9uZSwKKyAgICAgICAgIyBkb2luZyBibG9ja2luZyB3cml0ZXMg aW4gZmx1c2ggbWF5IGxlYWQgdG8gZGlzdHJpYnV0ZWQgZGVhZGxvY2sgaWYgdGhlCisgICAgICAg ICMgcGVlciBpcyBhbHJlYWR5IGJsb2NraW5nIG9uIGl0cyB3cml0ZXMuCisKKyAgICAgICAgaWYg aXNpbnN0YW5jZSh3YW50LCBzc2wuU1NMV2FudFdyaXRlRXJyb3IpOgorICAgICAgICAgICAgYXNz ZXJ0IHNlbGYuX291dC5wZW5kaW5nLCAiU1NMIGJhY2tlbmQgd2FudHMgd3JpdGUgd2l0aG91dCBk YXRhIgorCisgICAgICAgIHNlbGYuZmx1c2goKQorCisgICAgICAgIGlmIGlzaW5zdGFuY2Uod2Fu dCwgc3NsLlNTTFdhbnRSZWFkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5fcmVjdig0MDk2KQor CisgICAgZGVmIF9mbHVzaF9kZWJ1ZyhzZWxmLCBwcmVmaXgpOgorICAgICAgICBpZiBub3Qgc2Vs Zi5fZGVidWdnaW5nOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5fc3RyZWFt LmZsdXNoX2RlYnVnKHByZWZpeD1wcmVmaXgpCisKKworQGNvbnRleHRsaWIuY29udGV4dG1hbmFn ZXIKK2RlZiB0bHNfaGFuZHNoYWtlKHN0cmVhbSwgY29udGV4dCk6CisgICAgIiIiCisgICAgUGVy Zm9ybXMgYSBUTFMgaGFuZHNoYWtlIG92ZXIgdGhlIGdpdmVuIHN0cmVhbSAod2hpY2ggbXVzdCBo YXZlIGJlZW4gY3JlYXRlZAorICAgIHZpYSBhIGNhbGwgdG8gd3JhcCgpKSwgYW5kIHJldHVybnMg YSBuZXcgc3RyZWFtIHdoaWNoIHRyYW5zcGFyZW50bHkgdHVubmVscworICAgIGRhdGEgb3ZlciB0 aGUgVExTIGNvbm5lY3Rpb24uCisKKyAgICBJZiB0aGUgcGFzc2VkIHN0cmVhbSBoYXMgZGVidWdn aW5nIGVuYWJsZWQsIHRoZSByZXR1cm5lZCBzdHJlYW0gd2lsbCBhbHNvCisgICAgaGF2ZSBkZWJ1 Z2dpbmcsIHVzaW5nIHRoZSBzYW1lIG91dHB1dCBJTy4KKyAgICAiIiIKKyAgICBkZWJ1Z2dpbmcg PSBoYXNhdHRyKHN0cmVhbSwgImZsdXNoX2RlYnVnIikKKworICAgICMgU2VuZCBvdXIgc3RhcnR1 cCBwYXJhbWV0ZXJzLgorICAgIHNlbmRfc3RhcnR1cChzdHJlYW0sIHByb3RvPXByb3RvY29sKDEy MzQsIDU2NzkpKQorCisgICAgIyBMb29rIGF0IHRoZSBTU0wgcmVzcG9uc2UuCisgICAgcmVzcCA9 IHN0cmVhbS5yZWFkKDEpCisgICAgaWYgZGVidWdnaW5nOgorICAgICAgICBzdHJlYW0uZmx1c2hf ZGVidWcocHJlZml4PSIgICIpCisKKyAgICBpZiByZXNwID09IGIiTiI6CisgICAgICAgIHJhaXNl IFJ1bnRpbWVFcnJvcigic2VydmVyIGRvZXMgbm90IHN1cHBvcnQgU1NMUmVxdWVzdCIpCisgICAg aWYgcmVzcCAhPSBiIlMiOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoZiJ1bmV4cGVjdGVk IHJlc3BvbnNlIG9mIHR5cGUge3Jlc3Ahcn0gZHVyaW5nIFRMUyBzdGFydHVwIikKKworICAgIHRs cyA9IF9UTFNTdHJlYW0oc3RyZWFtLCBjb250ZXh0KQorICAgIHRscy5oYW5kc2hha2UoKQorCisg ICAgaWYgZGVidWdnaW5nOgorICAgICAgICB0bHMgPSBfRGVidWdTdHJlYW0odGxzLCBzdHJlYW0u X291dCkKKworICAgIHRyeToKKyAgICAgICAgeWllbGQgdGxzCisgICAgICAgICMgVE9ETzogdGVh cmRvd24vdW53cmFwIHRoZSBjb25uZWN0aW9uPworICAgIGZpbmFsbHk6CisgICAgICAgIGlmIGRl YnVnZ2luZzoKKyAgICAgICAgICAgIHRscy5mbHVzaF9kZWJ1ZyhwcmVmaXg9Ij8gIikKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3B5dGhvbi9weXRlc3QuaW5pIGIvc3JjL3Rlc3QvcHl0aG9uL3B5dGVz dC5pbmkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYWI3YTZlN2ZiOQot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5dGhvbi9weXRlc3QuaW5pCkBAIC0wLDAgKzEs NCBAQAorW3B5dGVzdF0KKworbWFya2VycyA9CisgICAgc2xvdzogbWFyayB0ZXN0IGFzIHNsb3cK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3B5dGhvbi9yZXF1aXJlbWVudHMudHh0IGIvc3JjL3Rlc3Qv cHl0aG9uL3JlcXVpcmVtZW50cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMC4uMzJmMTA1ZWE4NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5dGhvbi9yZXF1 aXJlbWVudHMudHh0CkBAIC0wLDAgKzEsNyBAQAorYmxhY2sKK2NyeXB0b2dyYXBoeX49My40LjYK K2NvbnN0cnVjdH49Mi4xMC42MQoraXNvcnR+PTUuNgorcHN5Y29wZzJ+PTIuOC42CitweXRlc3R+ PTYuMQorcHl0ZXN0LWFzeW5jaW9+PTAuMTQuMApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcHl0aG9u L3NlcnZlci9fX2luaXRfXy5weSBiL3NyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIvX19pbml0X18ucHkK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZTY5ZGUyOWJiMgpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcHl0aG9uL3NlcnZlci9jb25mdGVzdC5weSBiL3NyYy90ZXN0L3B5dGhv bi9zZXJ2ZXIvY29uZnRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MC4uYmE3MzQyYTQ1MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIv Y29uZnRlc3QucHkKQEAgLTAsMCArMSw0NSBAQAorIworIyBDb3B5cmlnaHQgMjAyMSBWTXdhcmUs IEluYy4KKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IFBvc3RncmVTUUwKKyMKKworaW1wb3J0 IGNvbnRleHRsaWIKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzeXMKKworaW1wb3J0IHB5dGVzdAor CitpbXBvcnQgcHEzCisKKworQHB5dGVzdC5maXh0dXJlCitkZWYgY29ubmVjdCgpOgorICAgICIi IgorICAgIEEgZmFjdG9yeSBmaXh0dXJlIHRoYXQsIHdoZW4gY2FsbGVkLCByZXR1cm5zIGEgc29j a2V0IGNvbm5lY3RlZCB0byBhCisgICAgUG9zdGdyZXMgc2VydmVyLCB3cmFwcGVkIGluIGEgcHEz IGNvbm5lY3Rpb24uIFRoZSBjYWxsaW5nIHRlc3Qgd2lsbCBiZQorICAgIHNraXBwZWQgYXV0b21h dGljYWxseSBpZiBhIHNlcnZlciBpcyBub3QgcnVubmluZyBhdCBQR0hPU1Q6UEdQT1JULCBzbyBp dCdzCisgICAgYmVzdCB0byBjb25uZWN0IGFzIHNvb24gYXMgcG9zc2libGUgYWZ0ZXIgdGhlIHRl c3QgY2FzZSBiZWdpbnMsIHRvIGF2b2lkCisgICAgZG9pbmcgdW5uZWNlc3Nhcnkgd29yay4KKyAg ICAiIiIKKyAgICAjIFNldCB1cCBhbiBFeGl0U3RhY2sgdG8gaGFuZGxlIHNhZmUgY2xlYW51cCBv ZiBhbGwgb2YgdGhlIG1vdmluZyBwaWVjZXMuCisgICAgd2l0aCBjb250ZXh0bGliLkV4aXRTdGFj aygpIGFzIHN0YWNrOgorCisgICAgICAgIGRlZiBjb25uX2ZhY3RvcnkoKToKKyAgICAgICAgICAg IGFkZHIgPSAocHEzLnBnaG9zdCgpLCBwcTMucGdwb3J0KCkpCisKKyAgICAgICAgICAgIHRyeToK KyAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKGFkZHIsIHRp bWVvdXQ9MikKKyAgICAgICAgICAgIGV4Y2VwdCBDb25uZWN0aW9uRXJyb3IgYXMgZToKKyAgICAg ICAgICAgICAgICBweXRlc3Quc2tpcChmInVuYWJsZSB0byBjb25uZWN0IHRvIHthZGRyfToge2V9 IikKKworICAgICAgICAgICAgIyBIYXZlIEV4aXRTdGFjayBjbG9zZSBvdXIgc29ja2V0LgorICAg ICAgICAgICAgc3RhY2suZW50ZXJfY29udGV4dChzb2NrKQorCisgICAgICAgICAgICAjIFdyYXAg dGhlIGNvbm5lY3Rpb24gaW4gYSBwcTMgbGF5ZXIgYW5kIGhhdmUgRXhpdFN0YWNrIGNsZWFuIGl0 IHVwCisgICAgICAgICAgICAjIHRvby4KKyAgICAgICAgICAgIHdyYXBfY3R4ID0gcHEzLndyYXAo c29jaywgZGVidWdfc3RyZWFtPXN5cy5zdGRvdXQpCisgICAgICAgICAgICBjb25uID0gc3RhY2su ZW50ZXJfY29udGV4dCh3cmFwX2N0eCkKKworICAgICAgICAgICAgcmV0dXJuIGNvbm4KKworICAg ICAgICB5aWVsZCBjb25uX2ZhY3RvcnkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3B5dGhvbi9zZXJ2 ZXIvdGVzdF9vYXV0aC5weSBiL3NyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIvdGVzdF9vYXV0aC5weQpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4zNTVlZjhlNGJkCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL3Rlc3QvcHl0aG9uL3NlcnZlci90ZXN0X29hdXRoLnB5CkBAIC0wLDAg KzEsMTAxMiBAQAorIworIyBDb3B5cmlnaHQgMjAyMSBWTXdhcmUsIEluYy4KKyMgU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IFBvc3RncmVTUUwKKyMKKworaW1wb3J0IGJhc2U2NAoraW1wb3J0IGNv bnRleHRsaWIKK2ltcG9ydCBqc29uCitpbXBvcnQgb3MKK2ltcG9ydCBwYXRobGliCitpbXBvcnQg c2VjcmV0cworaW1wb3J0IHNobGV4CitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc29ja2V0CitpbXBv cnQgc3RydWN0Citmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgc2hhcmVkX21lbW9yeQorCitp bXBvcnQgcHN5Y29wZzIKK2ltcG9ydCBweXRlc3QKK2Zyb20gcHN5Y29wZzIgaW1wb3J0IHNxbAor CitpbXBvcnQgcHEzCisKK01BWF9TQVNMX01FU1NBR0VfTEVOR1RIID0gNjU1MzUKKworSU5WQUxJ RF9BVVRIT1JJWkFUSU9OX0VSUkNPREUgPSBiIjI4MDAwIgorUFJPVE9DT0xfVklPTEFUSU9OX0VS UkNPREUgPSBiIjA4UDAxIgorRkVBVFVSRV9OT1RfU1VQUE9SVEVEX0VSUkNPREUgPSBiIjBBMDAw IgorCitTSEFSRURfTUVNX05BTUUgPSAib2F1dGgtcHl0ZXN0IgorTUFYX1RPS0VOX1NJWkUgPSA0 MDk2CitNQVhfVUlOVDE2ID0gMiAqKiAxNiAtIDEKKworCitkZWYgc2tpcF9pZl9ub19wb3N0Z3Jl cygpOgorICAgICIiIgorICAgIFVzZWQgYnkgdGhlIG9hdXRoX2N0eCBmaXh0dXJlIHRvIHNraXAg dGhpcyB0ZXN0IG1vZHVsZSBpZiBubyBQb3N0Z3JlcyBzZXJ2ZXIKKyAgICBpcyBydW5uaW5nLgor CisgICAgVGhpcyBsb2dpYyBpcyBuZWFybHkgZHVwbGljYXRlZCB3aXRoIHRoZSBjb25uIGZpeHR1 cmUuIElkZWFsbHkgb2F1dGhfY3R4CisgICAgd291bGQgZGVwZW5kIG9uIHRoYXQsIGJ1dCBhIG1v ZHVsZS1zY29wZSBmaXh0dXJlIGNhbid0IGRlcGVuZCBvbiBhCisgICAgdGVzdC1zY29wZSBmaXh0 dXJlLCBhbmQgd2UgaGF2ZW4ndCByZWFjaGVkIHRoZSBydWxlIG9mIHRocmVlIHlldC4KKyAgICAi IiIKKyAgICBhZGRyID0gKHBxMy5wZ2hvc3QoKSwgcHEzLnBncG9ydCgpKQorCisgICAgdHJ5Ogor ICAgICAgICB3aXRoIHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbihhZGRyLCB0aW1lb3V0PTIpOgor ICAgICAgICAgICAgcGFzcworICAgIGV4Y2VwdCBDb25uZWN0aW9uRXJyb3IgYXMgZToKKyAgICAg ICAgcHl0ZXN0LnNraXAoZiJ1bmFibGUgdG8gY29ubmVjdCB0byB7YWRkcn06IHtlfSIpCisKKwor QGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiBwcmVwZW5kX2ZpbGUocGF0aCwgbGluZXMp OgorICAgICIiIgorICAgIEEgY29udGV4dCBtYW5hZ2VyIHRoYXQgcHJlcGVuZHMgYSBmaWxlIG9u IGRpc2sgd2l0aCB0aGUgZGVzaXJlZCBsaW5lcyBvZgorICAgIHRleHQuIFdoZW4gdGhlIGNvbnRl eHQgbWFuYWdlciBpcyBleGl0ZWQsIHRoZSBmaWxlIHdpbGwgYmUgcmVzdG9yZWQgdG8gaXRzCisg ICAgb3JpZ2luYWwgY29udGVudHMuCisgICAgIiIiCisgICAgIyBGaXJzdCBtYWtlIGEgYmFja3Vw IG9mIHRoZSBvcmlnaW5hbCBmaWxlLgorICAgIGJhayA9IHBhdGggKyAiLmJhayIKKyAgICBzaHV0 aWwuY29weTIocGF0aCwgYmFrKQorCisgICAgdHJ5OgorICAgICAgICAjIFdyaXRlIHRoZSBuZXcg bGluZXMsIGZvbGxvd2VkIGJ5IHRoZSBvcmlnaW5hbCBmaWxlIGNvbnRlbnQuCisgICAgICAgIHdp dGggb3BlbihwYXRoLCAidyIpIGFzIG5ldywgb3BlbihiYWssICJyIikgYXMgb3JpZzoKKyAgICAg ICAgICAgIG5ldy53cml0ZWxpbmVzKGxpbmVzKQorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxl b2JqKG9yaWcsIG5ldykKKworICAgICAgICAjIFJldHVybiBjb250cm9sIHRvIHRoZSBjYWxsaW5n IGNvZGUuCisgICAgICAgIHlpZWxkCisKKyAgICBmaW5hbGx5OgorICAgICAgICAjIFB1dCB0aGUg YmFja3VwIGJhY2sgaW50byBwbGFjZS4KKyAgICAgICAgb3MucmVwbGFjZShiYWssIHBhdGgpCisK KworQHB5dGVzdC5maXh0dXJlKHNjb3BlPSJtb2R1bGUiKQorZGVmIG9hdXRoX2N0eCgpOgorICAg ICIiIgorICAgIENyZWF0ZXMgYSBkYXRhYmFzZSBhbmQgdXNlciB0aGF0IHVzZSB0aGUgb2F1dGgg YXV0aCBtZXRob2QuIFRoZSBjb250ZXh0CisgICAgb2JqZWN0IGNvbnRhaW5zIHRoZSBkYm5hbWUg YW5kIHVzZXIgYXR0cmlidXRlcyBhcyBzdHJpbmdzIHRvIGJlIHVzZWQgZHVyaW5nCisgICAgY29u bmVjdGlvbiwgYXMgd2VsbCBhcyB0aGUgaXNzdWVyIGFuZCBzY29wZSB0aGF0IGhhdmUgYmVlbiBz ZXQgaW4gdGhlIEhCQQorICAgIGNvbmZpZ3VyYXRpb24uCisKKyAgICBUaGlzIGZpeHR1cmUgYXNz dW1lcyB0aGF0IHRoZSBzdGFuZGFyZCBQRyogZW52aXJvbm1lbnQgdmFyaWFibGVzIHBvaW50IHRv IGEKKyAgICBzZXJ2ZXIgcnVubmluZyBvbiBhIGxvY2FsIG1hY2hpbmUsIGFuZCB0aGF0IHRoZSBQ R1VTRVIgaGFzIHJpZ2h0cyB0byBjcmVhdGUKKyAgICBkYXRhYmFzZXMgYW5kIHJvbGVzLgorICAg ICIiIgorICAgIHNraXBfaWZfbm9fcG9zdGdyZXMoKSAgIyBkb24ndCBib3RoZXIgcnVubmluZyB0 aGVzZSB0ZXN0cyB3aXRob3V0IGEgc2VydmVyCisKKyAgICBpZCA9IHNlY3JldHMudG9rZW5faGV4 KDQpCisKKyAgICBjbGFzcyBDb250ZXh0OgorICAgICAgICBkYm5hbWUgPSAib2F1dGhfdGVzdF8i ICsgaWQKKworICAgICAgICB1c2VyID0gIm9hdXRoX3VzZXJfIiArIGlkCisgICAgICAgIG1hcF91 c2VyID0gIm9hdXRoX21hcF91c2VyXyIgKyBpZAorICAgICAgICBhdXRoel91c2VyID0gIm9hdXRo X2F1dGh6X3VzZXJfIiArIGlkCisKKyAgICAgICAgaXNzdWVyID0gImh0dHBzOi8vZXhhbXBsZS5j b20vIiArIGlkCisgICAgICAgIHNjb3BlID0gIm9wZW5pZCAiICsgaWQKKworICAgIGN0eCA9IENv bnRleHQoKQorICAgIGhiYV9saW5lcyA9ICgKKyAgICAgICAgZidob3N0IHtjdHguZGJuYW1lfSB7 Y3R4Lm1hcF91c2VyfSAgIHNhbWVob3N0IG9hdXRoIGlzc3Vlcj0ie2N0eC5pc3N1ZXJ9IiBzY29w ZT0ie2N0eC5zY29wZX0iIG1hcD1vYXV0aFxuJywKKyAgICAgICAgZidob3N0IHtjdHguZGJuYW1l fSB7Y3R4LmF1dGh6X3VzZXJ9IHNhbWVob3N0IG9hdXRoIGlzc3Vlcj0ie2N0eC5pc3N1ZXJ9IiBz Y29wZT0ie2N0eC5zY29wZX0iIHRydXN0X3ZhbGlkYXRvcl9hdXRoej0xXG4nLAorICAgICAgICBm J2hvc3Qge2N0eC5kYm5hbWV9IGFsbCAgICAgICAgICAgICAgc2FtZWhvc3Qgb2F1dGggaXNzdWVy PSJ7Y3R4Lmlzc3Vlcn0iIHNjb3BlPSJ7Y3R4LnNjb3BlfSJcbicsCisgICAgKQorICAgIGlkZW50 X2xpbmVzID0gKHIib2F1dGggL14oLiopQGV4YW1wbGVcLmNvbSQgXDEiLCkKKworICAgIGNvbm4g PSBwc3ljb3BnMi5jb25uZWN0KCIiKQorICAgIGNvbm4uYXV0b2NvbW1pdCA9IFRydWUKKworICAg IHdpdGggY29udGV4dGxpYi5jbG9zaW5nKGNvbm4pOgorICAgICAgICBjID0gY29ubi5jdXJzb3Io KQorCisgICAgICAgICMgQ3JlYXRlIG91ciByb2xlcyBhbmQgZGF0YWJhc2UuCisgICAgICAgIHVz ZXIgPSBzcWwuSWRlbnRpZmllcihjdHgudXNlcikKKyAgICAgICAgbWFwX3VzZXIgPSBzcWwuSWRl bnRpZmllcihjdHgubWFwX3VzZXIpCisgICAgICAgIGF1dGh6X3VzZXIgPSBzcWwuSWRlbnRpZmll cihjdHguYXV0aHpfdXNlcikKKyAgICAgICAgZGJuYW1lID0gc3FsLklkZW50aWZpZXIoY3R4LmRi bmFtZSkKKworICAgICAgICBjLmV4ZWN1dGUoc3FsLlNRTCgiQ1JFQVRFIFJPTEUge30gTE9HSU47 IikuZm9ybWF0KHVzZXIpKQorICAgICAgICBjLmV4ZWN1dGUoc3FsLlNRTCgiQ1JFQVRFIFJPTEUg e30gTE9HSU47IikuZm9ybWF0KG1hcF91c2VyKSkKKyAgICAgICAgYy5leGVjdXRlKHNxbC5TUUwo IkNSRUFURSBST0xFIHt9IExPR0lOOyIpLmZvcm1hdChhdXRoel91c2VyKSkKKyAgICAgICAgYy5l eGVjdXRlKHNxbC5TUUwoIkNSRUFURSBEQVRBQkFTRSB7fTsiKS5mb3JtYXQoZGJuYW1lKSkKKwor ICAgICAgICAjIE1ha2UgdGhpcyB0ZXN0IHNjcmlwdCB0aGUgc2VydmVyJ3Mgb2F1dGhfdmFsaWRh dG9yLgorICAgICAgICBwYXRoID0gcGF0aGxpYi5QYXRoKF9fZmlsZV9fKS5wYXJlbnQgLyAidmFs aWRhdGVfYmVhcmVyLnB5IgorICAgICAgICBwYXRoID0gc3RyKHBhdGguYWJzb2x1dGUoKSkKKwor ICAgICAgICBjbWQgPSBmIntzaGxleC5xdW90ZShwYXRoKX0ge1NIQVJFRF9NRU1fTkFNRX0gPCYl ZiIKKyAgICAgICAgYy5leGVjdXRlKCJBTFRFUiBTWVNURU0gU0VUIG9hdXRoX3ZhbGlkYXRvcl9j b21tYW5kIFRPICVzOyIsIChjbWQsKSkKKworICAgICAgICAjIFJlcGxhY2UgcGdfaGJhIGFuZCBw Z19pZGVudC4KKyAgICAgICAgYy5leGVjdXRlKCJTSE9XIGhiYV9maWxlOyIpCisgICAgICAgIGhi YSA9IGMuZmV0Y2hvbmUoKVswXQorCisgICAgICAgIGMuZXhlY3V0ZSgiU0hPVyBpZGVudF9maWxl OyIpCisgICAgICAgIGlkZW50ID0gYy5mZXRjaG9uZSgpWzBdCisKKyAgICAgICAgd2l0aCBwcmVw ZW5kX2ZpbGUoaGJhLCBoYmFfbGluZXMpLCBwcmVwZW5kX2ZpbGUoaWRlbnQsIGlkZW50X2xpbmVz KToKKyAgICAgICAgICAgIGMuZXhlY3V0ZSgiU0VMRUNUIHBnX3JlbG9hZF9jb25mKCk7IikKKwor ICAgICAgICAgICAgIyBVc2UgdGhlIG5ldyBkYXRhYmFzZSBhbmQgdXNlci4KKyAgICAgICAgICAg IHlpZWxkIGN0eAorCisgICAgICAgICMgUHV0IHRoaW5ncyBiYWNrIHRoZSB3YXkgdGhleSB3ZXJl LgorICAgICAgICBjLmV4ZWN1dGUoIlNFTEVDVCBwZ19yZWxvYWRfY29uZigpOyIpCisKKyAgICAg ICAgYy5leGVjdXRlKCJBTFRFUiBTWVNURU0gUkVTRVQgb2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQ7 IikKKyAgICAgICAgYy5leGVjdXRlKHNxbC5TUUwoIkRST1AgREFUQUJBU0Uge307IikuZm9ybWF0 KGRibmFtZSkpCisgICAgICAgIGMuZXhlY3V0ZShzcWwuU1FMKCJEUk9QIFJPTEUge307IikuZm9y bWF0KGF1dGh6X3VzZXIpKQorICAgICAgICBjLmV4ZWN1dGUoc3FsLlNRTCgiRFJPUCBST0xFIHt9 OyIpLmZvcm1hdChtYXBfdXNlcikpCisgICAgICAgIGMuZXhlY3V0ZShzcWwuU1FMKCJEUk9QIFJP TEUge307IikuZm9ybWF0KHVzZXIpKQorCisKK0BweXRlc3QuZml4dHVyZSgpCitkZWYgY29ubihv YXV0aF9jdHgsIGNvbm5lY3QpOgorICAgICIiIgorICAgIEEgY29udmVuaWVuY2Ugd3JhcHBlciBm b3IgY29ubmVjdCgpLiBUaGUgbWFpbiBwdXJwb3NlIG9mIHRoaXMgZml4dHVyZSBpcyB0bworICAg IG1ha2Ugc3VyZSBvYXV0aF9jdHggcnVucyBpdHMgc2V0dXAgY29kZSBiZWZvcmUgdGhlIGNvbm5l Y3Rpb24gaXMgbWFkZS4KKyAgICAiIiIKKyAgICByZXR1cm4gY29ubmVjdCgpCisKKworQHB5dGVz dC5maXh0dXJlKHNjb3BlPSJtb2R1bGUiLCBhdXRvdXNlPVRydWUpCitkZWYgYXV0aG5faWRfZXh0 ZW5zaW9uKG9hdXRoX2N0eCk6CisgICAgIiIiCisgICAgUGVyZm9ybXMgYSBgQ1JFQVRFIEVYVEVO U0lPTiBhdXRobl9pZGAgaW4gdGhlIHRlc3QgZGF0YWJhc2UuIFRoaXMgZml4dHVyZSBpcworICAg IGF1dG91c2VkLCBzbyB0ZXN0cyBkb24ndCBuZWVkIHRvIHJlbHkgb24gaXQuCisgICAgIiIiCisg ICAgY29ubiA9IHBzeWNvcGcyLmNvbm5lY3QoZGF0YWJhc2U9b2F1dGhfY3R4LmRibmFtZSkKKyAg ICBjb25uLmF1dG9jb21taXQgPSBUcnVlCisKKyAgICB3aXRoIGNvbnRleHRsaWIuY2xvc2luZyhj b25uKToKKyAgICAgICAgYyA9IGNvbm4uY3Vyc29yKCkKKyAgICAgICAgYy5leGVjdXRlKCJDUkVB VEUgRVhURU5TSU9OIGF1dGhuX2lkOyIpCisKKworQHB5dGVzdC5maXh0dXJlKHNjb3BlPSJzZXNz aW9uIikKK2RlZiBzaGFyZWRfbWVtKCk6CisgICAgIiIiCisgICAgWWllbGRzIGEgc2hhcmVkIG1l bW9yeSBzZWdtZW50IHRoYXQgY2FuIGJlIHVzZWQgZm9yIGNvbW11bmljYXRpb24gYmV0d2Vlbgor ICAgIHRoZSBiZWFyZXJfdG9rZW4gZml4dHVyZSBhbmQgLi92YWxpZGF0ZV9iZWFyZXIucHkuCisg ICAgIiIiCisgICAgc2l6ZSA9IE1BWF9UT0tFTl9TSVpFICsgMiAgIyB0d28gYnl0ZSBsZW5ndGgg cHJlZml4CisgICAgbWVtID0gc2hhcmVkX21lbW9yeS5TaGFyZWRNZW1vcnkoU0hBUkVEX01FTV9O QU1FLCBjcmVhdGU9VHJ1ZSwgc2l6ZT1zaXplKQorCisgICAgdHJ5OgorICAgICAgICB3aXRoIGNv bnRleHRsaWIuY2xvc2luZyhtZW0pOgorICAgICAgICAgICAgeWllbGQgbWVtCisgICAgZmluYWxs eToKKyAgICAgICAgbWVtLnVubGluaygpCisKKworQHB5dGVzdC5maXh0dXJlKCkKK2RlZiBiZWFy ZXJfdG9rZW4oc2hhcmVkX21lbSk6CisgICAgIiIiCisgICAgUmV0dXJucyBhIGZhY3RvcnkgZnVu Y3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsIHdpbGwgc3RvcmUgYSBCZWFyZXIgdG9rZW4gaW4KKyAg ICBzaGFyZWRfbWVtLiBJZiB0b2tlbiBpcyBOb25lICh0aGUgZGVmYXVsdCksIGEgbmV3IHRva2Vu IHdpbGwgYmUgZ2VuZXJhdGVkCisgICAgdXNpbmcgc2VjcmV0cy50b2tlbl91cmxzYWZlKCkgYW5k IHJldHVybmVkOyBvdGhlcndpc2UgdGhlIHBhc3NlZCB0b2tlbiB3aWxsCisgICAgYmUgdXNlZCBh cy1pcy4KKworICAgIFdoZW4gdG9rZW4gaXMgTm9uZSwgdGhlIGdlbmVyYXRlZCB0b2tlbiBzaXpl IGluIGJ5dGVzIG1heSBiZSBzcGVjaWZpZWQgYXMgYW4KKyAgICBhcmd1bWVudDsgaWYgdW5zZXQs IGEgc21hbGwgMTYtYnl0ZSB0b2tlbiB3aWxsIGJlIGdlbmVyYXRlZC4gVGhlIHRva2VuIHNpemUK KyAgICBtYXkgbm90IGV4Y2VlZCBNQVhfVE9LRU5fU0laRSBpbiBhbnkgY2FzZS4KKworICAgIFRo ZSByZXR1cm4gdmFsdWUgaXMgdGhlIHRva2VuLCBjb252ZXJ0ZWQgdG8gYSBieXRlcyBvYmplY3Qu CisKKyAgICBBcyBhIHNwZWNpYWwgY2FzZSBmb3IgdGVzdGluZyBmYWlsdXJlIG1vZGVzLCBhY2Nl cHRfYW55IG1heSBiZSBzZXQgdG8gVHJ1ZS4KKyAgICBUaGlzIHNpZ25hbHMgdG8gdGhlIHZhbGlk YXRvciBjb21tYW5kIHRoYXQgYW55IGJlYXJlciB0b2tlbiBzaG91bGQgYmUKKyAgICBhY2NlcHRl ZC4gVGhlIHJldHVybmVkIHRva2VuIGluIHRoaXMgY2FzZSBtYXkgYmUgdXNlZCBvciBkaXNjYXJk ZWQgYXMgbmVlZGVkCisgICAgYnkgdGhlIHRlc3QuCisgICAgIiIiCisKKyAgICBkZWYgc2V0X3Rv a2VuKHRva2VuPU5vbmUsICosIHNpemU9MTYsIGFjY2VwdF9hbnk9RmFsc2UpOgorICAgICAgICBp ZiB0b2tlbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNpemUgPSBsZW4odG9rZW4pCisKKyAg ICAgICAgaWYgc2l6ZSA+IE1BWF9UT0tFTl9TSVpFOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVF cnJvcihmInRva2VuIHNpemUge3NpemV9IGV4Y2VlZHMgbWF4aW11bSBzaXplIHtNQVhfVE9LRU5f U0laRX0iKQorCisgICAgICAgIGlmIHRva2VuIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzaXpl ICUgNDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGYicmVxdWVzdGVkIHRva2Vu IHNpemUge3NpemV9IGlzIG5vdCBhIG11bHRpcGxlIG9mIDQiKQorCisgICAgICAgICAgICB0b2tl biA9IHNlY3JldHMudG9rZW5fdXJsc2FmZShzaXplIC8vIDQgKiAzKQorICAgICAgICAgICAgYXNz ZXJ0IGxlbih0b2tlbikgPT0gc2l6ZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRva2Vu ID0gdG9rZW4uZW5jb2RlKCJhc2NpaSIpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoK KyAgICAgICAgICAgIHBhc3MgICMgYWxyZWFkeSBlbmNvZGVkCisKKyAgICAgICAgaWYgYWNjZXB0 X2FueToKKyAgICAgICAgICAgICMgVHdvLWJ5dGUgbWFnaWMgdmFsdWUuCisgICAgICAgICAgICBz aGFyZWRfbWVtLmJ1Zls6Ml0gPSBzdHJ1Y3QucGFjaygiSCIsIE1BWF9VSU5UMTYpCisgICAgICAg IGVsc2U6CisgICAgICAgICAgICAjIFR3by1ieXRlIGxlbmd0aCBwcmVmaXgsIHRoZW4gdGhlIHRv a2VuIGRhdGEuCisgICAgICAgICAgICBzaGFyZWRfbWVtLmJ1Zls6Ml0gPSBzdHJ1Y3QucGFjaygi SCIsIGxlbih0b2tlbikpCisgICAgICAgICAgICBzaGFyZWRfbWVtLmJ1ZlsyIDogc2l6ZSArIDJd ID0gdG9rZW4KKworICAgICAgICByZXR1cm4gdG9rZW4KKworICAgIHJldHVybiBzZXRfdG9rZW4K KworCitkZWYgYmVnaW5fb2F1dGhfaGFuZHNoYWtlKGNvbm4sIG9hdXRoX2N0eCwgKiwgdXNlcj1O b25lKToKKyAgICBpZiB1c2VyIGlzIE5vbmU6CisgICAgICAgIHVzZXIgPSBvYXV0aF9jdHguYXV0 aHpfdXNlcgorCisgICAgcHEzLnNlbmRfc3RhcnR1cChjb25uLCB1c2VyPXVzZXIsIGRhdGFiYXNl PW9hdXRoX2N0eC5kYm5hbWUpCisKKyAgICByZXNwID0gcHEzLnJlY3YxKGNvbm4pCisgICAgYXNz ZXJ0IHJlc3AudHlwZSA9PSBwcTMudHlwZXMuQXV0aG5SZXF1ZXN0CisKKyAgICAjIFRoZSBzZXJ2 ZXIgc2hvdWxkIGFkdmVydGlzZSBleGFjdGx5IG9uZSBtZWNoYW5pc20uCisgICAgYXNzZXJ0IHJl c3AucGF5bG9hZC50eXBlID09IHBxMy5hdXRobi5TQVNMCisgICAgYXNzZXJ0IHJlc3AucGF5bG9h ZC5ib2R5ID09IFtiIk9BVVRIQkVBUkVSIiwgYiIiXQorCisKK2RlZiBzZW5kX2luaXRpYWxfcmVz cG9uc2UoY29ubiwgKiwgYXV0aD1Ob25lLCBiZWFyZXI9Tm9uZSk6CisgICAgIiIiCisgICAgU2Vu ZHMgdGhlIE9BVVRIQkVBUkVSIGluaXRpYWwgcmVzcG9uc2Ugb24gdGhlIGNvbm5lY3Rpb24sIHVz aW5nIHRoZSBnaXZlbgorICAgIGJlYXJlciB0b2tlbi4gQWx0ZXJuYXRpdmVseSB0byBhIGJlYXJl ciB0b2tlbiwgdGhlIGluaXRpYWwgcmVzcG9uc2UncyBhdXRoCisgICAgZmllbGQgbWF5IGJlIGV4 cGxpY2l0bHkgc3BlY2lmaWVkIHRvIHRlc3QgY29ybmVyIGNhc2VzLgorICAgICIiIgorICAgIGlm IGJlYXJlciBpcyBub3QgTm9uZSBhbmQgYXV0aCBpcyBub3QgTm9uZToKKyAgICAgICAgcmFpc2Ug VmFsdWVFcnJvcigiZXhhY3RseSBvbmUgb2YgdGhlIGF1dGggYW5kIGJlYXJlciBrd2FyZ3MgbXVz dCBiZSBzZXQiKQorCisgICAgaWYgYmVhcmVyIGlzIG5vdCBOb25lOgorICAgICAgICBhdXRoID0g YiJCZWFyZXIgIiArIGJlYXJlcgorCisgICAgaWYgYXV0aCBpcyBOb25lOgorICAgICAgICByYWlz ZSBWYWx1ZUVycm9yKCJleGFjdGx5IG9uZSBvZiB0aGUgYXV0aCBhbmQgYmVhcmVyIGt3YXJncyBt dXN0IGJlIHNldCIpCisKKyAgICBpbml0aWFsID0gcHEzLlNBU0xJbml0aWFsUmVzcG9uc2UuYnVp bGQoCisgICAgICAgIGRpY3QoCisgICAgICAgICAgICBuYW1lPWIiT0FVVEhCRUFSRVIiLAorICAg ICAgICAgICAgZGF0YT1iIm4sLFx4MDFhdXRoPSIgKyBhdXRoICsgYiJceDAxXHgwMSIsCisgICAg ICAgICkKKyAgICApCisgICAgcHEzLnNlbmQoY29ubiwgcHEzLnR5cGVzLlBhc3N3b3JkTWVzc2Fn ZSwgaW5pdGlhbCkKKworCitkZWYgZXhwZWN0X2hhbmRzaGFrZV9zdWNjZXNzKGNvbm4pOgorICAg ICIiIgorICAgIFZhbGlkYXRlcyB0aGF0IHRoZSBzZXJ2ZXIgcmVzcG9uZHMgd2l0aCBhbiBBdXRo bk9LIG1lc3NhZ2UsIGFuZCB0aGVuIGRyYWlucworICAgIHRoZSBjb25uZWN0aW9uIHVudGlsIGEg UmVhZHlGb3JRdWVyeSBtZXNzYWdlIGlzIHJlY2VpdmVkLgorICAgICIiIgorICAgIHJlc3AgPSBw cTMucmVjdjEoY29ubikKKworICAgIGFzc2VydCByZXNwLnR5cGUgPT0gcHEzLnR5cGVzLkF1dGhu UmVxdWVzdAorICAgIGFzc2VydCByZXNwLnBheWxvYWQudHlwZSA9PSBwcTMuYXV0aG4uT0sKKyAg ICBhc3NlcnQgbm90IHJlc3AucGF5bG9hZC5ib2R5CisKKyAgICByZWNlaXZlX3VudGlsKGNvbm4s IHBxMy50eXBlcy5SZWFkeUZvclF1ZXJ5KQorCisKK2RlZiBleHBlY3RfaGFuZHNoYWtlX2ZhaWx1 cmUoY29ubiwgb2F1dGhfY3R4KToKKyAgICAiIiIKKyAgICBQZXJmb3JtcyB0aGUgT0FVVEhCRUFS RVIgU0FTTCBmYWlsdXJlICJoYW5kc2hha2UiIGFuZCB2YWxpZGF0ZXMgdGhlIHNlcnZlcidzCisg ICAgc2lkZSBvZiB0aGUgY29udmVyc2F0aW9uLCBpbmNsdWRpbmcgdGhlIGZpbmFsIEVycm9yUmVz cG9uc2UuCisgICAgIiIiCisKKyAgICAjIFdlIGV4cGVjdCBhIGRpc2NvdmVyeSAiY2hhbGxlbmdl IiBiYWNrIGZyb20gdGhlIHNlcnZlciBiZWZvcmUgdGhlIGF1dGhuCisgICAgIyBmYWlsdXJlIG1l c3NhZ2UuCisgICAgcmVzcCA9IHBxMy5yZWN2MShjb25uKQorICAgIGFzc2VydCByZXNwLnR5cGUg PT0gcHEzLnR5cGVzLkF1dGhuUmVxdWVzdAorCisgICAgcmVxID0gcmVzcC5wYXlsb2FkCisgICAg YXNzZXJ0IHJlcS50eXBlID09IHBxMy5hdXRobi5TQVNMQ29udGludWUKKworICAgIGJvZHkgPSBq c29uLmxvYWRzKHJlcS5ib2R5KQorICAgIGFzc2VydCBib2R5WyJzdGF0dXMiXSA9PSAiaW52YWxp ZF90b2tlbiIKKyAgICBhc3NlcnQgYm9keVsic2NvcGUiXSA9PSBvYXV0aF9jdHguc2NvcGUKKwor ICAgIGV4cGVjdGVkX2NvbmZpZyA9IG9hdXRoX2N0eC5pc3N1ZXIgKyAiLy53ZWxsLWtub3duL29w ZW5pZC1jb25maWd1cmF0aW9uIgorICAgIGFzc2VydCBib2R5WyJvcGVuaWQtY29uZmlndXJhdGlv biJdID09IGV4cGVjdGVkX2NvbmZpZworCisgICAgIyBTZW5kIHRoZSBkdW1teSByZXNwb25zZSB0 byBjb21wbGV0ZSB0aGUgZmFpbGVkIGhhbmRzaGFrZS4KKyAgICBwcTMuc2VuZChjb25uLCBwcTMu dHlwZXMuUGFzc3dvcmRNZXNzYWdlLCBiIlx4MDEiKQorICAgIHJlc3AgPSBwcTMucmVjdjEoY29u bikKKworICAgIGVyciA9IEV4cGVjdGVkRXJyb3IoSU5WQUxJRF9BVVRIT1JJWkFUSU9OX0VSUkNP REUsICJiZWFyZXIgYXV0aGVudGljYXRpb24gZmFpbGVkIikKKyAgICBlcnIubWF0Y2gocmVzcCkK KworCitkZWYgcmVjZWl2ZV91bnRpbChjb25uLCB0eXBlKToKKyAgICAiIiIKKyAgICByZWNlaXZl X3VudGlsIHB1bGxzIHBhY2tldHMgb2ZmIHRoZSBwcTMgY29ubmVjdGlvbiB1bnRpbCBhIHBhY2tl dCB3aXRoIHRoZQorICAgIGRlc2lyZWQgdHlwZSBpcyBmb3VuZCwgb3IgYW4gZXJyb3IgcmVzcG9u c2UgaXMgcmVjZWl2ZWQuCisgICAgIiIiCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgcGt0ID0g cHEzLnJlY3YxKGNvbm4pCisKKyAgICAgICAgaWYgcGt0LnR5cGUgPT0gdHlwZToKKyAgICAgICAg ICAgIHJldHVybiBwa3QKKyAgICAgICAgZWxpZiBwa3QudHlwZSA9PSBwcTMudHlwZXMuRXJyb3JS ZXNwb25zZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKKyAgICAgICAgICAgICAg ICBmInJlY2VpdmVkIGVycm9yIHJlc3BvbnNlIGZyb20gcGVlcjoge3BrdC5wYXlsb2FkLmZpZWxk cyFyfSIKKyAgICAgICAgICAgICkKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoInRva2Vu X2xlbiIsIFsxNiwgMTAyNCwgNDA5Nl0pCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoCisgICAg ImF1dGhfcHJlZml4IiwKKyAgICBbCisgICAgICAgIGIiQmVhcmVyICIsCisgICAgICAgIGIiYmVh cmVyICIsCisgICAgICAgIGIiQmVhcmVyICAgICIsCisgICAgXSwKKykKK2RlZiB0ZXN0X29hdXRo KGNvbm4sIG9hdXRoX2N0eCwgYmVhcmVyX3Rva2VuLCBhdXRoX3ByZWZpeCwgdG9rZW5fbGVuKToK KyAgICBiZWdpbl9vYXV0aF9oYW5kc2hha2UoY29ubiwgb2F1dGhfY3R4KQorCisgICAgIyBHZW5l cmF0ZSBvdXIgYmVhcmVyIHRva2VuIHdpdGggdGhlIGRlc2lyZWQgbGVuZ3RoLgorICAgIHRva2Vu ID0gYmVhcmVyX3Rva2VuKHNpemU9dG9rZW5fbGVuKQorICAgIGF1dGggPSBhdXRoX3ByZWZpeCAr IHRva2VuCisKKyAgICBzZW5kX2luaXRpYWxfcmVzcG9uc2UoY29ubiwgYXV0aD1hdXRoKQorICAg IGV4cGVjdF9oYW5kc2hha2Vfc3VjY2Vzcyhjb25uKQorCisgICAgIyBNYWtlIHN1cmUgdGhhdCB0 aGUgc2VydmVyIGhhcyBub3Qgc2V0IGFuIGF1dGhlbnRpY2F0ZWQgSUQuCisgICAgcHEzLnNlbmQo Y29ubiwgcHEzLnR5cGVzLlF1ZXJ5LCBxdWVyeT1iIlNFTEVDVCBhdXRobl9pZCgpOyIpCisgICAg cmVzcCA9IHJlY2VpdmVfdW50aWwoY29ubiwgcHEzLnR5cGVzLkRhdGFSb3cpCisKKyAgICByb3cg PSByZXNwLnBheWxvYWQKKyAgICBhc3NlcnQgcm93LmNvbHVtbnMgPT0gW05vbmVdCisKKworQHB5 dGVzdC5tYXJrLnBhcmFtZXRyaXplKAorICAgICJ0b2tlbl92YWx1ZSIsCisgICAgWworICAgICAg ICAiYWJjZHpBPT0iLAorICAgICAgICAiMTIzNDU2TT0iLAorICAgICAgICAieC0uX34rL3giLAor ICAgIF0sCispCitkZWYgdGVzdF9vYXV0aF9iZWFyZXJfY29ybmVyX2Nhc2VzKGNvbm4sIG9hdXRo X2N0eCwgYmVhcmVyX3Rva2VuLCB0b2tlbl92YWx1ZSk6CisgICAgYmVnaW5fb2F1dGhfaGFuZHNo YWtlKGNvbm4sIG9hdXRoX2N0eCkKKworICAgIHNlbmRfaW5pdGlhbF9yZXNwb25zZShjb25uLCBi ZWFyZXI9YmVhcmVyX3Rva2VuKHRva2VuX3ZhbHVlKSkKKworICAgIGV4cGVjdF9oYW5kc2hha2Vf c3VjY2Vzcyhjb25uKQorCisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgKKyAgICAidXNlcixh dXRobl9pZCxzaG91bGRfc3VjY2VlZCIsCisgICAgWworICAgICAgICBweXRlc3QucGFyYW0oCisg ICAgICAgICAgICBsYW1iZGEgY3R4OiBjdHgudXNlciwKKyAgICAgICAgICAgIGxhbWJkYSBjdHg6 IGN0eC51c2VyLAorICAgICAgICAgICAgVHJ1ZSwKKyAgICAgICAgICAgIGlkPSJ2YWxpZGF0b3Ig YXV0aG46IHN1Y2NlZWRzIHdoZW4gYXV0aG5faWQgPT0gdXNlcm5hbWUiLAorICAgICAgICApLAor ICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBsYW1iZGEgY3R4OiBjdHgudXNlciwK KyAgICAgICAgICAgIGxhbWJkYSBjdHg6IE5vbmUsCisgICAgICAgICAgICBGYWxzZSwKKyAgICAg ICAgICAgIGlkPSJ2YWxpZGF0b3IgYXV0aG46IGZhaWxzIHdoZW4gYXV0aG5faWQgaXMgbm90IHNl dCIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGxhbWJk YSBjdHg6IGN0eC51c2VyLAorICAgICAgICAgICAgbGFtYmRhIGN0eDogY3R4LmF1dGh6X3VzZXIs CisgICAgICAgICAgICBGYWxzZSwKKyAgICAgICAgICAgIGlkPSJ2YWxpZGF0b3IgYXV0aG46IGZh aWxzIHdoZW4gYXV0aG5faWQgIT0gdXNlcm5hbWUiLAorICAgICAgICApLAorICAgICAgICBweXRl c3QucGFyYW0oCisgICAgICAgICAgICBsYW1iZGEgY3R4OiBjdHgubWFwX3VzZXIsCisgICAgICAg ICAgICBsYW1iZGEgY3R4OiBjdHgubWFwX3VzZXIgKyAiQGV4YW1wbGUuY29tIiwKKyAgICAgICAg ICAgIFRydWUsCisgICAgICAgICAgICBpZD0idmFsaWRhdG9yIHdpdGggbWFwOiBzdWNjZWVkcyB3 aGVuIGF1dGhuX2lkIG1hdGNoZXMgbWFwIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBh cmFtKAorICAgICAgICAgICAgbGFtYmRhIGN0eDogY3R4Lm1hcF91c2VyLAorICAgICAgICAgICAg bGFtYmRhIGN0eDogTm9uZSwKKyAgICAgICAgICAgIEZhbHNlLAorICAgICAgICAgICAgaWQ9InZh bGlkYXRvciB3aXRoIG1hcDogZmFpbHMgd2hlbiBhdXRobl9pZCBpcyBub3Qgc2V0IiwKKyAgICAg ICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgbGFtYmRhIGN0eDogY3R4 Lm1hcF91c2VyLAorICAgICAgICAgICAgbGFtYmRhIGN0eDogY3R4Lm1hcF91c2VyICsgIkBleGFt cGxlLm5ldCIsCisgICAgICAgICAgICBGYWxzZSwKKyAgICAgICAgICAgIGlkPSJ2YWxpZGF0b3Ig d2l0aCBtYXA6IGZhaWxzIHdoZW4gYXV0aG5faWQgZG9lc24ndCBtYXRjaCBtYXAiLAorICAgICAg ICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBsYW1iZGEgY3R4OiBjdHgu YXV0aHpfdXNlciwKKyAgICAgICAgICAgIGxhbWJkYSBjdHg6IE5vbmUsCisgICAgICAgICAgICBU cnVlLAorICAgICAgICAgICAgaWQ9InZhbGlkYXRvciBhdXRoejogc3VjY2VlZHMgd2l0aCBubyBh dXRobl9pZCIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAg IGxhbWJkYSBjdHg6IGN0eC5hdXRoel91c2VyLAorICAgICAgICAgICAgbGFtYmRhIGN0eDogIiIs CisgICAgICAgICAgICBUcnVlLAorICAgICAgICAgICAgaWQ9InZhbGlkYXRvciBhdXRoejogc3Vj Y2VlZHMgd2l0aCBlbXB0eSBhdXRobl9pZCIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5w YXJhbSgKKyAgICAgICAgICAgIGxhbWJkYSBjdHg6IGN0eC5hdXRoel91c2VyLAorICAgICAgICAg ICAgbGFtYmRhIGN0eDogInBvc3RncmVzIiwKKyAgICAgICAgICAgIFRydWUsCisgICAgICAgICAg ICBpZD0idmFsaWRhdG9yIGF1dGh6OiBzdWNjZWVkcyB3aXRoIGJhc2ljIHVzZXJuYW1lIiwKKyAg ICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgbGFtYmRhIGN0eDog Y3R4LmF1dGh6X3VzZXIsCisgICAgICAgICAgICBsYW1iZGEgY3R4OiAibWVAZXhhbXBsZS5jb20i LAorICAgICAgICAgICAgVHJ1ZSwKKyAgICAgICAgICAgIGlkPSJ2YWxpZGF0b3IgYXV0aHo6IHN1 Y2NlZWRzIHdpdGggZW1haWwgYWRkcmVzcyIsCisgICAgICAgICksCisgICAgXSwKKykKK2RlZiB0 ZXN0X29hdXRoX2F1dGhuX2lkKGNvbm4sIG9hdXRoX2N0eCwgYmVhcmVyX3Rva2VuLCB1c2VyLCBh dXRobl9pZCwgc2hvdWxkX3N1Y2NlZWQpOgorICAgIHRva2VuID0gTm9uZQorCisgICAgYXV0aG5f aWQgPSBhdXRobl9pZChvYXV0aF9jdHgpCisgICAgaWYgYXV0aG5faWQgaXMgbm90IE5vbmU6Cisg ICAgICAgIGF1dGhuX2lkID0gYXV0aG5faWQuZW5jb2RlKCJhc2NpaSIpCisKKyAgICAgICAgIyBB cyBhIGhhY2sgdG8gZ2V0IHRoZSB2YWxpZGF0b3IgdG8gcmVmbGVjdCBhcmJpdHJhcnkgb3V0cHV0 IGZyb20gdGhpcworICAgICAgICAjIHRlc3QsIGVuY29kZSB0aGUgZGVzaXJlZCBvdXRwdXQgYXMg YSBiYXNlNjQgdG9rZW4uIFRoZSB2YWxpZGF0b3Igd2lsbAorICAgICAgICAjIGtleSBvbiB0aGUg bGVhZGluZyAib3V0cHV0PSIgdG8gZGlmZmVyZW50aWF0ZSB0aGlzIGZyb20gdGhlIHJhbmRvbQor ICAgICAgICAjIHRva2VucyBnZW5lcmF0ZWQgYnkgc2VjcmV0cy50b2tlbl91cmxzYWZlKCkuCisg ICAgICAgIG91dHB1dCA9IGIib3V0cHV0PSIgKyBhdXRobl9pZCArIGIiXG4iCisgICAgICAgIHRv a2VuID0gYmFzZTY0LnVybHNhZmVfYjY0ZW5jb2RlKG91dHB1dCkKKworICAgIHRva2VuID0gYmVh cmVyX3Rva2VuKHRva2VuKQorICAgIHVzZXJuYW1lID0gdXNlcihvYXV0aF9jdHgpCisKKyAgICBi ZWdpbl9vYXV0aF9oYW5kc2hha2UoY29ubiwgb2F1dGhfY3R4LCB1c2VyPXVzZXJuYW1lKQorICAg IHNlbmRfaW5pdGlhbF9yZXNwb25zZShjb25uLCBiZWFyZXI9dG9rZW4pCisKKyAgICBpZiBub3Qg c2hvdWxkX3N1Y2NlZWQ6CisgICAgICAgIGV4cGVjdF9oYW5kc2hha2VfZmFpbHVyZShjb25uLCBv YXV0aF9jdHgpCisgICAgICAgIHJldHVybgorCisgICAgZXhwZWN0X2hhbmRzaGFrZV9zdWNjZXNz KGNvbm4pCisKKyAgICAjIENoZWNrIHRoZSByZXBvcnRlZCBhdXRobl9pZC4KKyAgICBwcTMuc2Vu ZChjb25uLCBwcTMudHlwZXMuUXVlcnksIHF1ZXJ5PWIiU0VMRUNUIGF1dGhuX2lkKCk7IikKKyAg ICByZXNwID0gcmVjZWl2ZV91bnRpbChjb25uLCBwcTMudHlwZXMuRGF0YVJvdykKKworICAgIHJv dyA9IHJlc3AucGF5bG9hZAorICAgIGFzc2VydCByb3cuY29sdW1ucyA9PSBbYXV0aG5faWRdCisK KworY2xhc3MgRXhwZWN0ZWRFcnJvcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBj b2RlLCBtc2c9Tm9uZSwgZGV0YWlsPU5vbmUpOgorICAgICAgICBzZWxmLmNvZGUgPSBjb2RlCisg ICAgICAgIHNlbGYubXNnID0gbXNnCisgICAgICAgIHNlbGYuZGV0YWlsID0gZGV0YWlsCisKKyAg ICAgICAgIyBQcm90ZWN0IGFnYWluc3QgdGhlIGZvb3RndW4gb2YgYW4gYWNjaWRlbnRhbCBlbXB0 eSBzdHJpbmcsIHdoaWNoIHdpbGwKKyAgICAgICAgIyAibWF0Y2giIGFueXRoaW5nLiBJZiB5b3Ug ZG9uJ3Qgd2FudCB0byBtYXRjaCBtZXNzYWdlIG9yIGRldGFpbCwganVzdAorICAgICAgICAjIGRv bid0IHBhc3MgdGhlbS4KKyAgICAgICAgaWYgc2VsZi5tc2cgPT0gIiI6CisgICAgICAgICAgICBy YWlzZSBWYWx1ZUVycm9yKCJtc2cgbXVzdCBiZSBub24tZW1wdHkgb3IgTm9uZSIpCisgICAgICAg IGlmIHNlbGYuZGV0YWlsID09ICIiOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZGV0 YWlsIG11c3QgYmUgbm9uLWVtcHR5IG9yIE5vbmUiKQorCisgICAgZGVmIF9nZXRmaWVsZChzZWxm LCByZXNwLCB0eXBlKToKKyAgICAgICAgIiIiCisgICAgICAgIFNlYXJjaGVzIGFuIEVycm9yUmVz cG9uc2UgZm9yIGEgc2luZ2xlIGZpZWxkIG9mIHRoZSBnaXZlbiB0eXBlIChlLmcuCisgICAgICAg ICJNIiwgIkMiLCAiRCIpIGFuZCByZXR1cm5zIGl0cyB2YWx1ZS4gQXNzZXJ0cyBpZiBpdCBkb2Vz bid0IGZpbmQgZXhhY3RseQorICAgICAgICBvbmUgZmllbGQuCisgICAgICAgICIiIgorICAgICAg ICBwcmVmaXggPSB0eXBlLmVuY29kZSgiYXNjaWkiKQorICAgICAgICBmaWVsZHMgPSBbZiBmb3Ig ZiBpbiByZXNwLnBheWxvYWQuZmllbGRzIGlmIGYuc3RhcnRzd2l0aChwcmVmaXgpXQorCisgICAg ICAgIGFzc2VydCBsZW4oZmllbGRzKSA9PSAxCisgICAgICAgIHJldHVybiBmaWVsZHNbMF1bMTpd ICAjIHN0cmlwIG9mZiB0aGUgdHlwZSBieXRlCisKKyAgICBkZWYgbWF0Y2goc2VsZiwgcmVzcCk6 CisgICAgICAgICIiIgorICAgICAgICBDaGVja3MgdGhhdCB0aGUgZ2l2ZW4gcmVzcG9uc2UgbWF0 Y2hlcyB0aGUgZXhwZWN0ZWQgY29kZSwgbWVzc2FnZSwgYW5kCisgICAgICAgIGRldGFpbCAoaWYg Z2l2ZW4pLiBUaGUgZXJyb3IgY29kZSBtdXN0IG1hdGNoIGV4YWN0bHkuIFRoZSBleHBlY3RlZAor ICAgICAgICBtZXNzYWdlIGFuZCBkZXRhaWwgbXVzdCBiZSBjb250YWluZWQgd2l0aGluIHRoZSBh Y3R1YWwgc3RyaW5ncy4KKyAgICAgICAgIiIiCisgICAgICAgIGFzc2VydCByZXNwLnR5cGUgPT0g cHEzLnR5cGVzLkVycm9yUmVzcG9uc2UKKworICAgICAgICBjb2RlID0gc2VsZi5fZ2V0ZmllbGQo cmVzcCwgIkMiKQorICAgICAgICBhc3NlcnQgY29kZSA9PSBzZWxmLmNvZGUKKworICAgICAgICBp ZiBzZWxmLm1zZzoKKyAgICAgICAgICAgIG1zZyA9IHNlbGYuX2dldGZpZWxkKHJlc3AsICJNIikK KyAgICAgICAgICAgIGV4cGVjdGVkID0gc2VsZi5tc2cuZW5jb2RlKCJ1dGYtOCIpCisgICAgICAg ICAgICBhc3NlcnQgZXhwZWN0ZWQgaW4gbXNnCisKKyAgICAgICAgaWYgc2VsZi5kZXRhaWw6Cisg ICAgICAgICAgICBkZXRhaWwgPSBzZWxmLl9nZXRmaWVsZChyZXNwLCAiRCIpCisgICAgICAgICAg ICBleHBlY3RlZCA9IHNlbGYuZGV0YWlsLmVuY29kZSgidXRmLTgiKQorICAgICAgICAgICAgYXNz ZXJ0IGV4cGVjdGVkIGluIGRldGFpbAorCisKK2RlZiB0ZXN0X29hdXRoX3JlamVjdGVkX2JlYXJl cihjb25uLCBvYXV0aF9jdHgsIGJlYXJlcl90b2tlbik6CisgICAgIyBHZW5lcmF0ZSBhIG5ldyBi ZWFyZXIgdG9rZW4sIHdoaWNoIHdlIHdpbGwgcHJvY2VlZCBub3QgdG8gdXNlLgorICAgIF8gPSBi ZWFyZXJfdG9rZW4oKQorCisgICAgYmVnaW5fb2F1dGhfaGFuZHNoYWtlKGNvbm4sIG9hdXRoX2N0 eCkKKworICAgICMgU2VuZCBhIGJlYXJlciB0b2tlbiB0aGF0IGRvZXNuJ3QgbWF0Y2ggd2hhdCB0 aGUgdmFsaWRhdG9yIGV4cGVjdHMuIEl0CisgICAgIyBzaG91bGQgZmFpbCB0aGUgY29ubmVjdGlv bi4KKyAgICBzZW5kX2luaXRpYWxfcmVzcG9uc2UoY29ubiwgYmVhcmVyPWIieHh4eHh4IikKKwor ICAgIGV4cGVjdF9oYW5kc2hha2VfZmFpbHVyZShjb25uLCBvYXV0aF9jdHgpCisKKworQHB5dGVz dC5tYXJrLnBhcmFtZXRyaXplKAorICAgICJiYWRfYmVhcmVyIiwKKyAgICBbCisgICAgICAgIGIi QmVhcmVyICAgICIsCisgICAgICAgIGIiQmVhcmVyIGE9PT1iIiwKKyAgICAgICAgYiJCZWFyZXIg aGVsbG8hIiwKKyAgICAgICAgYiJCZWFyZXIgbWVAZXhhbXBsZS5jb20iLAorICAgICAgICBiJ09B dXRoIHJlYWxtPSJFeGFtcGxlIicsCisgICAgICAgIGIiIiwKKyAgICBdLAorKQorZGVmIHRlc3Rf b2F1dGhfaW52YWxpZF9iZWFyZXIoY29ubiwgb2F1dGhfY3R4LCBiZWFyZXJfdG9rZW4sIGJhZF9i ZWFyZXIpOgorICAgICMgVGVsbCB0aGUgdmFsaWRhdG9yIHRvIGFjY2VwdCBhbnkgdG9rZW4uIFRo aXMgZW5zdXJlcyB0aGF0IHRoZSBpbnZhbGlkCisgICAgIyBiZWFyZXIgdG9rZW5zIGFyZSByZWpl Y3RlZCBiZWZvcmUgdGhlIHZhbGlkYXRpb24gc3RlcC4KKyAgICBfID0gYmVhcmVyX3Rva2VuKGFj Y2VwdF9hbnk9VHJ1ZSkKKworICAgIGJlZ2luX29hdXRoX2hhbmRzaGFrZShjb25uLCBvYXV0aF9j dHgpCisgICAgc2VuZF9pbml0aWFsX3Jlc3BvbnNlKGNvbm4sIGF1dGg9YmFkX2JlYXJlcikKKwor ICAgIGV4cGVjdF9oYW5kc2hha2VfZmFpbHVyZShjb25uLCBvYXV0aF9jdHgpCisKKworQHB5dGVz dC5tYXJrLnNsb3cKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgKKyAgICAicmVzcF90eXBlLHJl c3AsZXJyIiwKKyAgICBbCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIE5vbmUs CisgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgIG1hcmtz PXB5dGVzdC5tYXJrLnNsb3csCisgICAgICAgICAgICBpZD0ibm8gcmVzcG9uc2UgKGV4cGVjdCB0 aW1lb3V0KSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAg IHBxMy50eXBlcy5QYXNzd29yZE1lc3NhZ2UsCisgICAgICAgICAgICBiImhlbGxvIiwKKyAgICAg ICAgICAgIEV4cGVjdGVkRXJyb3IoCisgICAgICAgICAgICAgICAgUFJPVE9DT0xfVklPTEFUSU9O X0VSUkNPREUsCisgICAgICAgICAgICAgICAgIm1hbGZvcm1lZCBPQVVUSEJFQVJFUiBtZXNzYWdl IiwKKyAgICAgICAgICAgICAgICAiZGlkIG5vdCBzZW5kIGEga3ZzZXAgcmVzcG9uc2UiLAorICAg ICAgICAgICAgKSwKKyAgICAgICAgICAgIGlkPSJiYWQgZHVtbXkgcmVzcG9uc2UiLAorICAgICAg ICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBwcTMudHlwZXMuUGFzc3dv cmRNZXNzYWdlLAorICAgICAgICAgICAgYiJceDAxXHgwMSIsCisgICAgICAgICAgICBFeHBlY3Rl ZEVycm9yKAorICAgICAgICAgICAgICAgIFBST1RPQ09MX1ZJT0xBVElPTl9FUlJDT0RFLAorICAg ICAgICAgICAgICAgICJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIsCisgICAgICAgICAg ICAgICAgImRpZCBub3Qgc2VuZCBhIGt2c2VwIHJlc3BvbnNlIiwKKyAgICAgICAgICAgICksCisg ICAgICAgICAgICBpZD0ibXVsdGlwbGUga3ZzZXBzIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0 ZXN0LnBhcmFtKAorICAgICAgICAgICAgcHEzLnR5cGVzLlF1ZXJ5LAorICAgICAgICAgICAgZGlj dChxdWVyeT1iIiIpLAorICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcihQUk9UT0NPTF9WSU9MQVRJ T05fRVJSQ09ERSwgImV4cGVjdGVkIFNBU0wgcmVzcG9uc2UiKSwKKyAgICAgICAgICAgIGlkPSJi YWQgcmVzcG9uc2UgbWVzc2FnZSB0eXBlIiwKKyAgICAgICAgKSwKKyAgICBdLAorKQorZGVmIHRl c3Rfb2F1dGhfYmFkX3Jlc3BvbnNlX3RvX2Vycm9yX2NoYWxsZW5nZShjb25uLCBvYXV0aF9jdHgs IHJlc3BfdHlwZSwgcmVzcCwgZXJyKToKKyAgICBiZWdpbl9vYXV0aF9oYW5kc2hha2UoY29ubiwg b2F1dGhfY3R4KQorCisgICAgIyBTZW5kIGFuIGVtcHR5IGF1dGggaW5pdGlhbCByZXNwb25zZSwg d2hpY2ggd2lsbCBmb3JjZSBhbiBhdXRobiBmYWlsdXJlLgorICAgIHNlbmRfaW5pdGlhbF9yZXNw b25zZShjb25uLCBhdXRoPWIiIikKKworICAgICMgV2UgZXhwZWN0IGEgZGlzY292ZXJ5ICJjaGFs bGVuZ2UiIGJhY2sgZnJvbSB0aGUgc2VydmVyIGJlZm9yZSB0aGUgYXV0aG4KKyAgICAjIGZhaWx1 cmUgbWVzc2FnZS4KKyAgICBwa3QgPSBwcTMucmVjdjEoY29ubikKKyAgICBhc3NlcnQgcGt0LnR5 cGUgPT0gcHEzLnR5cGVzLkF1dGhuUmVxdWVzdAorCisgICAgcmVxID0gcGt0LnBheWxvYWQKKyAg ICBhc3NlcnQgcmVxLnR5cGUgPT0gcHEzLmF1dGhuLlNBU0xDb250aW51ZQorCisgICAgYm9keSA9 IGpzb24ubG9hZHMocmVxLmJvZHkpCisgICAgYXNzZXJ0IGJvZHlbInN0YXR1cyJdID09ICJpbnZh bGlkX3Rva2VuIgorCisgICAgaWYgcmVzcF90eXBlIGlzIE5vbmU6CisgICAgICAgICMgRG8gbm90 IHNlbmQgdGhlIGR1bW15IHJlc3BvbnNlLiBXZSBzaG91bGQgdGltZSBvdXQgYW5kIG5vdCBnZXQg YQorICAgICAgICAjIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci4KKyAgICAgICAgd2l0aCBweXRl c3QucmFpc2VzKHNvY2tldC50aW1lb3V0KToKKyAgICAgICAgICAgIGNvbm4ucmVhZCgxKQorCisg ICAgICAgICMgRG9uZSB3aXRoIHRoZSB0ZXN0LgorICAgICAgICByZXR1cm4KKworICAgICMgU2Vu ZCB0aGUgYmFkIHJlc3BvbnNlLgorICAgIHBxMy5zZW5kKGNvbm4sIHJlc3BfdHlwZSwgcmVzcCkK KworICAgICMgTWFrZSBzdXJlIHRoZSBzZXJ2ZXIgZmFpbHMgdGhlIGNvbm5lY3Rpb24gY29ycmVj dGx5LgorICAgIHBrdCA9IHBxMy5yZWN2MShjb25uKQorICAgIGVyci5tYXRjaChwa3QpCisKKwor QHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKAorICAgICJ0eXBlLHBheWxvYWQsZXJyIiwKKyAgICBb CisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIHBxMy50eXBlcy5FcnJvclJlc3Bv bnNlLAorICAgICAgICAgICAgZGljdChmaWVsZHM9W2IiIl0pLAorICAgICAgICAgICAgRXhwZWN0 ZWRFcnJvcihQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwgImV4cGVjdGVkIFNBU0wgcmVzcG9u c2UiKSwKKyAgICAgICAgICAgIGlkPSJlcnJvciByZXNwb25zZSBpbiBpbml0aWFsIG1lc3NhZ2Ui LAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBwcTMudHlw ZXMuUGFzc3dvcmRNZXNzYWdlLAorICAgICAgICAgICAgYiJ4IiAqIChNQVhfU0FTTF9NRVNTQUdF X0xFTkdUSCArIDEpLAorICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcigKKyAgICAgICAgICAgICAg ICBJTlZBTElEX0FVVEhPUklaQVRJT05fRVJSQ09ERSwgImJlYXJlciBhdXRoZW50aWNhdGlvbiBm YWlsZWQiCisgICAgICAgICAgICApLAorICAgICAgICAgICAgaWQ9Im92ZXJsb25nIGluaXRpYWwg cmVzcG9uc2UgZGF0YSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAg ICAgICAgIHBxMy50eXBlcy5QYXNzd29yZE1lc3NhZ2UsCisgICAgICAgICAgICBwcTMuU0FTTElu aXRpYWxSZXNwb25zZS5idWlsZChkaWN0KG5hbWU9YiJTQ1JBTS1TSEEtMjU2IikpLAorICAgICAg ICAgICAgRXhwZWN0ZWRFcnJvcigKKyAgICAgICAgICAgICAgICBQUk9UT0NPTF9WSU9MQVRJT05f RVJSQ09ERSwgImludmFsaWQgU0FTTCBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc20iCisgICAgICAg ICAgICApLAorICAgICAgICAgICAgaWQ9ImJhZCBTQVNMIG1lY2hhbmlzbSBzZWxlY3Rpb24iLAor ICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBwcTMudHlwZXMu UGFzc3dvcmRNZXNzYWdlLAorICAgICAgICAgICAgcHEzLlNBU0xJbml0aWFsUmVzcG9uc2UuYnVp bGQoZGljdChuYW1lPWIiT0FVVEhCRUFSRVIiLCBsZW49MiwgZGF0YT1iIngiKSksCisgICAgICAg ICAgICBFeHBlY3RlZEVycm9yKFBST1RPQ09MX1ZJT0xBVElPTl9FUlJDT0RFLCAiaW5zdWZmaWNp ZW50IGRhdGEiKSwKKyAgICAgICAgICAgIGlkPSJTQVNMIGRhdGEgdW5kZXJmbG93IiwKKyAgICAg ICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgcHEzLnR5cGVzLlBhc3N3 b3JkTWVzc2FnZSwKKyAgICAgICAgICAgIHBxMy5TQVNMSW5pdGlhbFJlc3BvbnNlLmJ1aWxkKGRp Y3QobmFtZT1iIk9BVVRIQkVBUkVSIiwgbGVuPTAsIGRhdGE9YiJ4IikpLAorICAgICAgICAgICAg RXhwZWN0ZWRFcnJvcihQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwgImludmFsaWQgbWVzc2Fn ZSBmb3JtYXQiKSwKKyAgICAgICAgICAgIGlkPSJTQVNMIGRhdGEgb3ZlcmZsb3ciLAorICAgICAg ICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBwcTMudHlwZXMuUGFzc3dv cmRNZXNzYWdlLAorICAgICAgICAgICAgcHEzLlNBU0xJbml0aWFsUmVzcG9uc2UuYnVpbGQoZGlj dChuYW1lPWIiT0FVVEhCRUFSRVIiLCBkYXRhPWIiIikpLAorICAgICAgICAgICAgRXhwZWN0ZWRF cnJvcigKKyAgICAgICAgICAgICAgICBQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwKKyAgICAg ICAgICAgICAgICAibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiLAorICAgICAgICAgICAg ICAgICJtZXNzYWdlIGlzIGVtcHR5IiwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBpZD0i ZW1wdHkiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBw cTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlLAorICAgICAgICAgICAgcHEzLlNBU0xJbml0aWFsUmVz cG9uc2UuYnVpbGQoCisgICAgICAgICAgICAgICAgZGljdChuYW1lPWIiT0FVVEhCRUFSRVIiLCBk YXRhPWIibiwsXHgwMWF1dGg9XHgwMVx4MDFcMCIpCisgICAgICAgICAgICApLAorICAgICAgICAg ICAgRXhwZWN0ZWRFcnJvcigKKyAgICAgICAgICAgICAgICBQUk9UT0NPTF9WSU9MQVRJT05fRVJS Q09ERSwKKyAgICAgICAgICAgICAgICAibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiLAor ICAgICAgICAgICAgICAgICJsZW5ndGggZG9lcyBub3QgbWF0Y2ggaW5wdXQgbGVuZ3RoIiwKKyAg ICAgICAgICAgICksCisgICAgICAgICAgICBpZD0iY29udGFpbnMgbnVsbCBieXRlIiwKKyAgICAg ICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgcHEzLnR5cGVzLlBhc3N3 b3JkTWVzc2FnZSwKKyAgICAgICAgICAgIHBxMy5TQVNMSW5pdGlhbFJlc3BvbnNlLmJ1aWxkKGRp Y3QobmFtZT1iIk9BVVRIQkVBUkVSIiwgZGF0YT1iIlx4MDEiKSksCisgICAgICAgICAgICBFeHBl Y3RlZEVycm9yKAorICAgICAgICAgICAgICAgIFBST1RPQ09MX1ZJT0xBVElPTl9FUlJDT0RFLAor ICAgICAgICAgICAgICAgICJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIsCisgICAgICAg ICAgICAgICAgIlVuZXhwZWN0ZWQgY2hhbm5lbC1iaW5kaW5nIGZsYWciLCAgIyBYWFggdGhpcyBp cyBhIGJpdCBzdHJhbmdlCisgICAgICAgICAgICApLAorICAgICAgICAgICAgaWQ9ImluaXRpYWwg ZXJyb3IgcmVzcG9uc2UiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAg ICAgICAgICBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlLAorICAgICAgICAgICAgcHEzLlNBU0xJ bml0aWFsUmVzcG9uc2UuYnVpbGQoCisgICAgICAgICAgICAgICAgZGljdChuYW1lPWIiT0FVVEhC RUFSRVIiLCBkYXRhPWIicD10bHMtc2VydmVyLWVuZC1wb2ludCwsXHgwMSIpCisgICAgICAgICAg ICApLAorICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcigKKyAgICAgICAgICAgICAgICBQUk9UT0NP TF9WSU9MQVRJT05fRVJSQ09ERSwKKyAgICAgICAgICAgICAgICAibWFsZm9ybWVkIE9BVVRIQkVB UkVSIG1lc3NhZ2UiLAorICAgICAgICAgICAgICAgICJzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBj aGFubmVsIGJpbmRpbmciLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIGlkPSJ1c2VzIGNo YW5uZWwgYmluZGluZyIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAg ICAgICAgIHBxMy50eXBlcy5QYXNzd29yZE1lc3NhZ2UsCisgICAgICAgICAgICBwcTMuU0FTTElu aXRpYWxSZXNwb25zZS5idWlsZChkaWN0KG5hbWU9YiJPQVVUSEJFQVJFUiIsIGRhdGE9YiJ4LCxc eDAxIikpLAorICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcigKKyAgICAgICAgICAgICAgICBQUk9U T0NPTF9WSU9MQVRJT05fRVJSQ09ERSwKKyAgICAgICAgICAgICAgICAibWFsZm9ybWVkIE9BVVRI QkVBUkVSIG1lc3NhZ2UiLAorICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkIGNoYW5uZWwtYmlu ZGluZyBmbGFnIiwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBpZD0iaW52YWxpZCBjaGFu bmVsIGJpbmRpbmcgc3BlY2lmaWVyIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFt KAorICAgICAgICAgICAgcHEzLnR5cGVzLlBhc3N3b3JkTWVzc2FnZSwKKyAgICAgICAgICAgIHBx My5TQVNMSW5pdGlhbFJlc3BvbnNlLmJ1aWxkKGRpY3QobmFtZT1iIk9BVVRIQkVBUkVSIiwgZGF0 YT1iInkiKSksCisgICAgICAgICAgICBFeHBlY3RlZEVycm9yKAorICAgICAgICAgICAgICAgIFBS T1RPQ09MX1ZJT0xBVElPTl9FUlJDT0RFLAorICAgICAgICAgICAgICAgICJtYWxmb3JtZWQgT0FV VEhCRUFSRVIgbWVzc2FnZSIsCisgICAgICAgICAgICAgICAgIkNvbW1hIGV4cGVjdGVkIiwKKyAg ICAgICAgICAgICksCisgICAgICAgICAgICBpZD0iYmFkIEdTMiBoZWFkZXI6IG1pc3NpbmcgY2hh bm5lbCBiaW5kaW5nIHRlcm1pbmF0b3IiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFy YW0oCisgICAgICAgICAgICBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlLAorICAgICAgICAgICAg cHEzLlNBU0xJbml0aWFsUmVzcG9uc2UuYnVpbGQoZGljdChuYW1lPWIiT0FVVEhCRUFSRVIiLCBk YXRhPWIieSxhIikpLAorICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcigKKyAgICAgICAgICAgICAg ICBGRUFUVVJFX05PVF9TVVBQT1JURURfRVJSQ09ERSwKKyAgICAgICAgICAgICAgICAiY2xpZW50 IHVzZXMgYXV0aG9yaXphdGlvbiBpZGVudGl0eSIsCisgICAgICAgICAgICApLAorICAgICAgICAg ICAgaWQ9ImJhZCBHUzIgaGVhZGVyOiBhdXRoemlkIGluIHVzZSIsCisgICAgICAgICksCisgICAg ICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIHBxMy50eXBlcy5QYXNzd29yZE1lc3NhZ2Us CisgICAgICAgICAgICBwcTMuU0FTTEluaXRpYWxSZXNwb25zZS5idWlsZChkaWN0KG5hbWU9YiJP QVVUSEJFQVJFUiIsIGRhdGE9YiJ5LGIsIikpLAorICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcigK KyAgICAgICAgICAgICAgICBQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwKKyAgICAgICAgICAg ICAgICAibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiLAorICAgICAgICAgICAgICAgICJV bmV4cGVjdGVkIGF0dHJpYnV0ZSIsCisgICAgICAgICAgICApLAorICAgICAgICAgICAgaWQ9ImJh ZCBHUzIgaGVhZGVyOiBleHRyYSBhdHRyaWJ1dGUiLAorICAgICAgICApLAorICAgICAgICBweXRl c3QucGFyYW0oCisgICAgICAgICAgICBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlLAorICAgICAg ICAgICAgcHEzLlNBU0xJbml0aWFsUmVzcG9uc2UuYnVpbGQoZGljdChuYW1lPWIiT0FVVEhCRUFS RVIiLCBkYXRhPWIieSwiKSksCisgICAgICAgICAgICBFeHBlY3RlZEVycm9yKAorICAgICAgICAg ICAgICAgIFBST1RPQ09MX1ZJT0xBVElPTl9FUlJDT0RFLAorICAgICAgICAgICAgICAgICJtYWxm b3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIsCisgICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQg YXR0cmlidXRlICIweDAwIicsICAjIFhYWCB0aGlzIGlzIGEgYml0IHN0cmFuZ2UKKyAgICAgICAg ICAgICksCisgICAgICAgICAgICBpZD0iYmFkIEdTMiBoZWFkZXI6IG1pc3NpbmcgYXV0aHppZCB0 ZXJtaW5hdG9yIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAg ICAgcHEzLnR5cGVzLlBhc3N3b3JkTWVzc2FnZSwKKyAgICAgICAgICAgIHBxMy5TQVNMSW5pdGlh bFJlc3BvbnNlLmJ1aWxkKGRpY3QobmFtZT1iIk9BVVRIQkVBUkVSIiwgZGF0YT1iInksLCIpKSwK KyAgICAgICAgICAgIEV4cGVjdGVkRXJyb3IoCisgICAgICAgICAgICAgICAgUFJPVE9DT0xfVklP TEFUSU9OX0VSUkNPREUsCisgICAgICAgICAgICAgICAgIm1hbGZvcm1lZCBPQVVUSEJFQVJFUiBt ZXNzYWdlIiwKKyAgICAgICAgICAgICAgICAiS2V5LXZhbHVlIHNlcGFyYXRvciBleHBlY3RlZCIs CisgICAgICAgICAgICApLAorICAgICAgICAgICAgaWQ9Im1pc3NpbmcgaW5pdGlhbCBrdnNlcCIs CisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIHBxMy50eXBl cy5QYXNzd29yZE1lc3NhZ2UsCisgICAgICAgICAgICBwcTMuU0FTTEluaXRpYWxSZXNwb25zZS5i dWlsZChkaWN0KG5hbWU9YiJPQVVUSEJFQVJFUiIsIGRhdGE9YiJ5LCwiKSksCisgICAgICAgICAg ICBFeHBlY3RlZEVycm9yKAorICAgICAgICAgICAgICAgIFBST1RPQ09MX1ZJT0xBVElPTl9FUlJD T0RFLAorICAgICAgICAgICAgICAgICJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIsCisg ICAgICAgICAgICAgICAgIktleS12YWx1ZSBzZXBhcmF0b3IgZXhwZWN0ZWQiLAorICAgICAgICAg ICAgKSwKKyAgICAgICAgICAgIGlkPSJtaXNzaW5nIGluaXRpYWwga3ZzZXAiLAorICAgICAgICAp LAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBwcTMudHlwZXMuUGFzc3dvcmRN ZXNzYWdlLAorICAgICAgICAgICAgcHEzLlNBU0xJbml0aWFsUmVzcG9uc2UuYnVpbGQoCisgICAg ICAgICAgICAgICAgZGljdChuYW1lPWIiT0FVVEhCRUFSRVIiLCBkYXRhPWIieSwsXHgwMVx4MDEi KQorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIEV4cGVjdGVkRXJyb3IoCisgICAgICAgICAg ICAgICAgUFJPVE9DT0xfVklPTEFUSU9OX0VSUkNPREUsCisgICAgICAgICAgICAgICAgIm1hbGZv cm1lZCBPQVVUSEJFQVJFUiBtZXNzYWdlIiwKKyAgICAgICAgICAgICAgICAiZG9lcyBub3QgY29u dGFpbiBhbiBhdXRoIHZhbHVlIiwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBpZD0ibWlz c2luZyBhdXRoIHZhbHVlOiBlbXB0eSBrZXktdmFsdWUgbGlzdCIsCisgICAgICAgICksCisgICAg ICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIHBxMy50eXBlcy5QYXNzd29yZE1lc3NhZ2Us CisgICAgICAgICAgICBwcTMuU0FTTEluaXRpYWxSZXNwb25zZS5idWlsZCgKKyAgICAgICAgICAg ICAgICBkaWN0KG5hbWU9YiJPQVVUSEJFQVJFUiIsIGRhdGE9YiJ5LCxceDAxaG9zdD1leGFtcGxl LmNvbVx4MDFceDAxIikKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBFeHBlY3RlZEVycm9y KAorICAgICAgICAgICAgICAgIFBST1RPQ09MX1ZJT0xBVElPTl9FUlJDT0RFLAorICAgICAgICAg ICAgICAgICJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIsCisgICAgICAgICAgICAgICAg ImRvZXMgbm90IGNvbnRhaW4gYW4gYXV0aCB2YWx1ZSIsCisgICAgICAgICAgICApLAorICAgICAg ICAgICAgaWQ9Im1pc3NpbmcgYXV0aCB2YWx1ZTogb3RoZXIga2V5cyBwcmVzZW50IiwKKyAgICAg ICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgcHEzLnR5cGVzLlBhc3N3 b3JkTWVzc2FnZSwKKyAgICAgICAgICAgIHBxMy5TQVNMSW5pdGlhbFJlc3BvbnNlLmJ1aWxkKAor ICAgICAgICAgICAgICAgIGRpY3QobmFtZT1iIk9BVVRIQkVBUkVSIiwgZGF0YT1iInksLFx4MDFo b3N0PWV4YW1wbGUuY29tIikKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBFeHBlY3RlZEVy cm9yKAorICAgICAgICAgICAgICAgIFBST1RPQ09MX1ZJT0xBVElPTl9FUlJDT0RFLAorICAgICAg ICAgICAgICAgICJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIsCisgICAgICAgICAgICAg ICAgInVudGVybWluYXRlZCBrZXkvdmFsdWUgcGFpciIsCisgICAgICAgICAgICApLAorICAgICAg ICAgICAgaWQ9Im1pc3NpbmcgdmFsdWUgdGVybWluYXRvciIsCisgICAgICAgICksCisgICAgICAg IHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIHBxMy50eXBlcy5QYXNzd29yZE1lc3NhZ2UsCisg ICAgICAgICAgICBwcTMuU0FTTEluaXRpYWxSZXNwb25zZS5idWlsZChkaWN0KG5hbWU9YiJPQVVU SEJFQVJFUiIsIGRhdGE9YiJ5LCxceDAxIikpLAorICAgICAgICAgICAgRXhwZWN0ZWRFcnJvcigK KyAgICAgICAgICAgICAgICBQUk9UT0NPTF9WSU9MQVRJT05fRVJSQ09ERSwKKyAgICAgICAgICAg ICAgICAibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3NhZ2UiLAorICAgICAgICAgICAgICAgICJk aWQgbm90IGNvbnRhaW4gYSBmaW5hbCB0ZXJtaW5hdG9yIiwKKyAgICAgICAgICAgICksCisgICAg ICAgICAgICBpZD0ibWlzc2luZyBsaXN0IHRlcm1pbmF0b3I6IGVtcHR5IGxpc3QiLAorICAgICAg ICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBwcTMudHlwZXMuUGFzc3dv cmRNZXNzYWdlLAorICAgICAgICAgICAgcHEzLlNBU0xJbml0aWFsUmVzcG9uc2UuYnVpbGQoCisg ICAgICAgICAgICAgICAgZGljdChuYW1lPWIiT0FVVEhCRUFSRVIiLCBkYXRhPWIieSwsXHgwMWF1 dGg9QmVhcmVyIDBceDAxIikKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBFeHBlY3RlZEVy cm9yKAorICAgICAgICAgICAgICAgIFBST1RPQ09MX1ZJT0xBVElPTl9FUlJDT0RFLAorICAgICAg ICAgICAgICAgICJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIsCisgICAgICAgICAgICAg ICAgImRpZCBub3QgY29udGFpbiBhIGZpbmFsIHRlcm1pbmF0b3IiLAorICAgICAgICAgICAgKSwK KyAgICAgICAgICAgIGlkPSJtaXNzaW5nIGxpc3QgdGVybWluYXRvcjogd2l0aCBhdXRoIHZhbHVl IiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgcHEzLnR5 cGVzLlBhc3N3b3JkTWVzc2FnZSwKKyAgICAgICAgICAgIHBxMy5TQVNMSW5pdGlhbFJlc3BvbnNl LmJ1aWxkKAorICAgICAgICAgICAgICAgIGRpY3QobmFtZT1iIk9BVVRIQkVBUkVSIiwgZGF0YT1i InksLFx4MDFhdXRoPUJlYXJlciAwXHgwMVx4MDFibGFoIikKKyAgICAgICAgICAgICksCisgICAg ICAgICAgICBFeHBlY3RlZEVycm9yKAorICAgICAgICAgICAgICAgIFBST1RPQ09MX1ZJT0xBVElP Tl9FUlJDT0RFLAorICAgICAgICAgICAgICAgICJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2Fn ZSIsCisgICAgICAgICAgICAgICAgImFkZGl0aW9uYWwgZGF0YSBhZnRlciB0aGUgZmluYWwgdGVy bWluYXRvciIsCisgICAgICAgICAgICApLAorICAgICAgICAgICAgaWQ9ImFkZGl0aW9uYWwga2V5 IGFmdGVyIHRlcm1pbmF0b3IiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisg ICAgICAgICAgICBwcTMudHlwZXMuUGFzc3dvcmRNZXNzYWdlLAorICAgICAgICAgICAgcHEzLlNB U0xJbml0aWFsUmVzcG9uc2UuYnVpbGQoCisgICAgICAgICAgICAgICAgZGljdChuYW1lPWIiT0FV VEhCRUFSRVIiLCBkYXRhPWIieSwsXHgwMWtleVx4MDFceDAxIikKKyAgICAgICAgICAgICksCisg ICAgICAgICAgICBFeHBlY3RlZEVycm9yKAorICAgICAgICAgICAgICAgIFBST1RPQ09MX1ZJT0xB VElPTl9FUlJDT0RFLAorICAgICAgICAgICAgICAgICJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVz c2FnZSIsCisgICAgICAgICAgICAgICAgImtleSB3aXRob3V0IGEgdmFsdWUiLAorICAgICAgICAg ICAgKSwKKyAgICAgICAgICAgIGlkPSJrZXkgd2l0aG91dCB2YWx1ZSIsCisgICAgICAgICksCisg ICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIHBxMy50eXBlcy5QYXNzd29yZE1lc3Nh Z2UsCisgICAgICAgICAgICBwcTMuU0FTTEluaXRpYWxSZXNwb25zZS5idWlsZCgKKyAgICAgICAg ICAgICAgICBkaWN0KAorICAgICAgICAgICAgICAgICAgICBuYW1lPWIiT0FVVEhCRUFSRVIiLAor ICAgICAgICAgICAgICAgICAgICBkYXRhPWIieSwsXHgwMWF1dGg9QmVhcmVyIDBceDAxYXV0aD1C ZWFyZXIgMVx4MDFceDAxIiwKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICApLAorICAg ICAgICAgICAgRXhwZWN0ZWRFcnJvcigKKyAgICAgICAgICAgICAgICBQUk9UT0NPTF9WSU9MQVRJ T05fRVJSQ09ERSwKKyAgICAgICAgICAgICAgICAibWFsZm9ybWVkIE9BVVRIQkVBUkVSIG1lc3Nh Z2UiLAorICAgICAgICAgICAgICAgICJjb250YWlucyBtdWx0aXBsZSBhdXRoIHZhbHVlcyIsCisg ICAgICAgICAgICApLAorICAgICAgICAgICAgaWQ9Im11bHRpcGxlIGF1dGggdmFsdWVzIiwKKyAg ICAgICAgKSwKKyAgICBdLAorKQorZGVmIHRlc3Rfb2F1dGhfYmFkX2luaXRpYWxfcmVzcG9uc2Uo Y29ubiwgb2F1dGhfY3R4LCB0eXBlLCBwYXlsb2FkLCBlcnIpOgorICAgIGJlZ2luX29hdXRoX2hh bmRzaGFrZShjb25uLCBvYXV0aF9jdHgpCisKKyAgICAjIFRoZSBzZXJ2ZXIgZXhwZWN0cyBhIFNB U0wgcmVzcG9uc2U7IGdpdmUgaXQgc29tZXRoaW5nIGVsc2UgaW5zdGVhZC4KKyAgICBpZiBub3Qg aXNpbnN0YW5jZShwYXlsb2FkLCBkaWN0KToKKyAgICAgICAgcGF5bG9hZCA9IGRpY3QocGF5bG9h ZF9kYXRhPXBheWxvYWQpCisgICAgcHEzLnNlbmQoY29ubiwgdHlwZSwgKipwYXlsb2FkKQorCisg ICAgcmVzcCA9IHBxMy5yZWN2MShjb25uKQorICAgIGVyci5tYXRjaChyZXNwKQorCisKK2RlZiB0 ZXN0X29hdXRoX2VtcHR5X2luaXRpYWxfcmVzcG9uc2UoY29ubiwgb2F1dGhfY3R4LCBiZWFyZXJf dG9rZW4pOgorICAgIGJlZ2luX29hdXRoX2hhbmRzaGFrZShjb25uLCBvYXV0aF9jdHgpCisKKyAg ICAjIFNlbmQgYW4gaW5pdGlhbCByZXNwb25zZSB3aXRob3V0IGRhdGEuCisgICAgaW5pdGlhbCA9 IHBxMy5TQVNMSW5pdGlhbFJlc3BvbnNlLmJ1aWxkKGRpY3QobmFtZT1iIk9BVVRIQkVBUkVSIikp CisgICAgcHEzLnNlbmQoY29ubiwgcHEzLnR5cGVzLlBhc3N3b3JkTWVzc2FnZSwgaW5pdGlhbCkK KworICAgICMgVGhlIHNlcnZlciBzaG91bGQgcmVzcG9uZCB3aXRoIGFuIGVtcHR5IGNoYWxsZW5n ZSBzbyB3ZSBjYW4gc2VuZCB0aGUgZGF0YQorICAgICMgaXQgd2FudHMuCisgICAgcGt0ID0gcHEz LnJlY3YxKGNvbm4pCisKKyAgICBhc3NlcnQgcGt0LnR5cGUgPT0gcHEzLnR5cGVzLkF1dGhuUmVx dWVzdAorICAgIGFzc2VydCBwa3QucGF5bG9hZC50eXBlID09IHBxMy5hdXRobi5TQVNMQ29udGlu dWUKKyAgICBhc3NlcnQgbm90IHBrdC5wYXlsb2FkLmJvZHkKKworICAgICMgTm93IHNlbmQgdGhl IGluaXRpYWwgZGF0YS4KKyAgICBkYXRhID0gYiJuLCxceDAxYXV0aD1CZWFyZXIgIiArIGJlYXJl cl90b2tlbigpICsgYiJceDAxXHgwMSIKKyAgICBwcTMuc2VuZChjb25uLCBwcTMudHlwZXMuUGFz c3dvcmRNZXNzYWdlLCBkYXRhKQorCisgICAgIyBTZXJ2ZXIgc2hvdWxkIG5vdyBjb21wbGV0ZSB0 aGUgaGFuZHNoYWtlLgorICAgIGV4cGVjdF9oYW5kc2hha2Vfc3VjY2Vzcyhjb25uKQorCisKK0Bw eXRlc3QuZml4dHVyZSgpCitkZWYgc2V0X3ZhbGlkYXRvcigpOgorICAgICIiIgorICAgIEEgcGVy LXRlc3QgZml4dHVyZSB0aGF0IGFsbG93cyBhIHRlc3QgdG8gb3ZlcnJpZGUgdGhlIHNldHRpbmcg b2YKKyAgICBvYXV0aF92YWxpZGF0b3JfY29tbWFuZCBmb3IgdGhlIGNsdXN0ZXIuIFRoZSBzZXR0 aW5nIHdpbGwgYmUgcmV2ZXJ0ZWQgZHVyaW5nCisgICAgdGVhcmRvd24uCisKKyAgICBQYXNzaW5n IE5vbmUgd2lsbCBwZXJmb3JtIGFuIEFMVEVSIFNZU1RFTSBSRVNFVC4KKyAgICAiIiIKKyAgICBj b25uID0gcHN5Y29wZzIuY29ubmVjdCgiIikKKyAgICBjb25uLmF1dG9jb21taXQgPSBUcnVlCisK KyAgICB3aXRoIGNvbnRleHRsaWIuY2xvc2luZyhjb25uKToKKyAgICAgICAgYyA9IGNvbm4uY3Vy c29yKCkKKworICAgICAgICAjIFNhdmUgdGhlIHByZXZpb3VzIHZhbHVlLgorICAgICAgICBjLmV4 ZWN1dGUoIlNIT1cgb2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQ7IikKKyAgICAgICAgcHJldl9jbWQg PSBjLmZldGNob25lKClbMF0KKworICAgICAgICBkZWYgc2V0dGVyKGNtZCk6CisgICAgICAgICAg ICBjLmV4ZWN1dGUoIkFMVEVSIFNZU1RFTSBTRVQgb2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQgVE8g JXM7IiwgKGNtZCwpKQorICAgICAgICAgICAgYy5leGVjdXRlKCJTRUxFQ1QgcGdfcmVsb2FkX2Nv bmYoKTsiKQorCisgICAgICAgIHlpZWxkIHNldHRlcgorCisgICAgICAgICMgUmVzdG9yZSB0aGUg cHJldmlvdXMgdmFsdWUuCisgICAgICAgIGMuZXhlY3V0ZSgiQUxURVIgU1lTVEVNIFNFVCBvYXV0 aF92YWxpZGF0b3JfY29tbWFuZCBUTyAlczsiLCAocHJldl9jbWQsKSkKKyAgICAgICAgYy5leGVj dXRlKCJTRUxFQ1QgcGdfcmVsb2FkX2NvbmYoKTsiKQorCisKK2RlZiB0ZXN0X29hdXRoX25vX3Zh bGlkYXRvcihvYXV0aF9jdHgsIHNldF92YWxpZGF0b3IsIGNvbm5lY3QsIGJlYXJlcl90b2tlbik6 CisgICAgIyBDbGVhciBvdXQgb3VyIHZhbGlkYXRvciBjb21tYW5kLCB0aGVuIGVzdGFibGlzaCBh IG5ldyBjb25uZWN0aW9uLgorICAgIHNldF92YWxpZGF0b3IoIiIpCisgICAgY29ubiA9IGNvbm5l Y3QoKQorCisgICAgYmVnaW5fb2F1dGhfaGFuZHNoYWtlKGNvbm4sIG9hdXRoX2N0eCkKKyAgICBz ZW5kX2luaXRpYWxfcmVzcG9uc2UoY29ubiwgYmVhcmVyPWJlYXJlcl90b2tlbigpKQorCisgICAg IyBUaGUgc2VydmVyIHNob3VsZCBmYWlsIHRoZSBjb25uZWN0aW9uLgorICAgIGV4cGVjdF9oYW5k c2hha2VfZmFpbHVyZShjb25uLCBvYXV0aF9jdHgpCisKKworZGVmIHRlc3Rfb2F1dGhfdmFsaWRh dG9yX3JvbGUob2F1dGhfY3R4LCBzZXRfdmFsaWRhdG9yLCBjb25uZWN0KToKKyAgICAjIFN3aXRj aCB0aGUgdmFsaWRhdG9yIGltcGxlbWVudGF0aW9uLiBUaGlzIHZhbGlkYXRvciB3aWxsIHJlZmxl Y3QgdGhlCisgICAgIyBQR1VTRVIgYXMgdGhlIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHkuCisgICAg cGF0aCA9IHBhdGhsaWIuUGF0aChfX2ZpbGVfXykucGFyZW50IC8gInZhbGlkYXRlX3JlZmxlY3Qu cHkiCisgICAgcGF0aCA9IHN0cihwYXRoLmFic29sdXRlKCkpCisKKyAgICBzZXRfdmFsaWRhdG9y KGYie3NobGV4LnF1b3RlKHBhdGgpfSAnJXInIDwmJWYiKQorICAgIGNvbm4gPSBjb25uZWN0KCkK KworICAgICMgTG9nIGluLiBOb3RlIHRoYXQgdGhlIHJlZmxlY3Rpb24gdmFsaWRhdG9yIGlnbm9y ZXMgdGhlIGJlYXJlciB0b2tlbi4KKyAgICBiZWdpbl9vYXV0aF9oYW5kc2hha2UoY29ubiwgb2F1 dGhfY3R4LCB1c2VyPW9hdXRoX2N0eC51c2VyKQorICAgIHNlbmRfaW5pdGlhbF9yZXNwb25zZShj b25uLCBiZWFyZXI9YiJkb250Y2FyZSIpCisgICAgZXhwZWN0X2hhbmRzaGFrZV9zdWNjZXNzKGNv bm4pCisKKyAgICAjIENoZWNrIHRoZSB1c2VyIGlkZW50aXR5LgorICAgIHBxMy5zZW5kKGNvbm4s IHBxMy50eXBlcy5RdWVyeSwgcXVlcnk9YiJTRUxFQ1QgYXV0aG5faWQoKTsiKQorICAgIHJlc3Ag PSByZWNlaXZlX3VudGlsKGNvbm4sIHBxMy50eXBlcy5EYXRhUm93KQorCisgICAgcm93ID0gcmVz cC5wYXlsb2FkCisgICAgZXhwZWN0ZWQgPSBvYXV0aF9jdHgudXNlci5lbmNvZGUoInV0Zi04IikK KyAgICBhc3NlcnQgcm93LmNvbHVtbnMgPT0gW2V4cGVjdGVkXQorCisKK2RlZiB0ZXN0X29hdXRo X3JvbGVfd2l0aF9zaGVsbF91bnNhZmVfY2hhcmFjdGVycyhvYXV0aF9jdHgsIHNldF92YWxpZGF0 b3IsIGNvbm5lY3QpOgorICAgICIiIgorICAgIFhYWCBUaGlzIHRlc3QgcGlucyB1bmRlc2lyYWJs ZSBiZWhhdmlvci4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIGFueQorICAgIHZhbGlkIFBv c3RncmVzIHJvbGUgbmFtZS4KKyAgICAiIiIKKyAgICAjIFN3aXRjaCB0aGUgdmFsaWRhdG9yIGlt cGxlbWVudGF0aW9uLiBUaGlzIHZhbGlkYXRvciB3aWxsIHJlZmxlY3QgdGhlCisgICAgIyBQR1VT RVIgYXMgdGhlIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHkuCisgICAgcGF0aCA9IHBhdGhsaWIuUGF0 aChfX2ZpbGVfXykucGFyZW50IC8gInZhbGlkYXRlX3JlZmxlY3QucHkiCisgICAgcGF0aCA9IHN0 cihwYXRoLmFic29sdXRlKCkpCisKKyAgICBzZXRfdmFsaWRhdG9yKGYie3NobGV4LnF1b3RlKHBh dGgpfSAnJXInIDwmJWYiKQorICAgIGNvbm4gPSBjb25uZWN0KCkKKworICAgIHVuc2FmZV91c2Vy bmFtZSA9ICJoZWxsbyd0aGVyZSIKKyAgICBiZWdpbl9vYXV0aF9oYW5kc2hha2UoY29ubiwgb2F1 dGhfY3R4LCB1c2VyPXVuc2FmZV91c2VybmFtZSkKKworICAgICMgVGhlIHNlcnZlciBzaG91bGQg cmVqZWN0IHRoZSBoYW5kc2hha2UuCisgICAgc2VuZF9pbml0aWFsX3Jlc3BvbnNlKGNvbm4sIGJl YXJlcj1iImRvbnRjYXJlIikKKyAgICBleHBlY3RfaGFuZHNoYWtlX2ZhaWx1cmUoY29ubiwgb2F1 dGhfY3R4KQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcHl0aG9uL3NlcnZlci90ZXN0X3NlcnZlci5w eSBiL3NyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIvdGVzdF9zZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMDIxMjZkYmE3OQotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy90ZXN0L3B5dGhvbi9zZXJ2ZXIvdGVzdF9zZXJ2ZXIucHkKQEAgLTAsMCArMSwyMSBAQAorIwor IyBDb3B5cmlnaHQgMjAyMSBWTXdhcmUsIEluYy4KKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IFBvc3RncmVTUUwKKyMKKworaW1wb3J0IHBxMworCisKK2RlZiB0ZXN0X2hhbmRzaGFrZShjb25u ZWN0KToKKyAgICAiIiJCYXNpYyBzYW5pdHkgY2hlY2suIiIiCisgICAgY29ubiA9IGNvbm5lY3Qo KQorCisgICAgcHEzLmhhbmRzaGFrZShjb25uLCB1c2VyPXBxMy5wZ3VzZXIoKSwgZGF0YWJhc2U9 cHEzLnBnZGF0YWJhc2UoKSkKKworICAgIHBxMy5zZW5kKGNvbm4sIHBxMy50eXBlcy5RdWVyeSwg cXVlcnk9YiIiKQorCisgICAgcmVzcCA9IHBxMy5yZWN2MShjb25uKQorICAgIGFzc2VydCByZXNw LnR5cGUgPT0gcHEzLnR5cGVzLkVtcHR5UXVlcnlSZXNwb25zZQorCisgICAgcmVzcCA9IHBxMy5y ZWN2MShjb25uKQorICAgIGFzc2VydCByZXNwLnR5cGUgPT0gcHEzLnR5cGVzLlJlYWR5Rm9yUXVl cnkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIvdmFsaWRhdGVfYmVhcmVyLnB5 IGIvc3JjL3Rlc3QvcHl0aG9uL3NlcnZlci92YWxpZGF0ZV9iZWFyZXIucHkKbmV3IGZpbGUgbW9k ZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMC4uMmNjNzNmZjE1NAotLS0gL2Rldi9udWxsCisrKyBi L3NyYy90ZXN0L3B5dGhvbi9zZXJ2ZXIvdmFsaWRhdGVfYmVhcmVyLnB5CkBAIC0wLDAgKzEsMTAx IEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMworIworIyBDb3B5cmlnaHQgMjAyMSBWTXdhcmUs IEluYy4KKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IFBvc3RncmVTUUwKKyMKKyMgRE8gTk9U IFVTRSBUSElTIE9BVVRIIFZBTElEQVRPUiBJTiBQUk9EVUNUSU9OLiBJdCBkb2Vzbid0IGFjdHVh bGx5IHZhbGlkYXRlCisjIGFueXRoaW5nLCBhbmQgaXQgbG9ncyB0aGUgYmVhcmVyIHRva2VuIGRh dGEsIHdoaWNoIGlzIHNlbnNpdGl2ZS4KKyMKKyMgVGhpcyBleGVjdXRhYmxlIGlzIHVzZWQgYXMg YW4gb2F1dGhfdmFsaWRhdG9yX2NvbW1hbmQgaW4gY29uY2VydCB3aXRoCisjIHRlc3Rfb2F1dGgu cHkuIE1lbW9yeSBpcyBzaGFyZWQgYW5kIGNvbW11bmljYXRlZCBmcm9tIHRoYXQgdGVzdCBtb2R1 bGUncworIyBiZWFyZXJfdG9rZW4oKSBmaXh0dXJlLgorIworIyBUaGlzIHNjcmlwdCBtdXN0IHJ1 biB1bmRlciB0aGUgUG9zdGdyZXMgc2VydmVyIGVudmlyb25tZW50OyBrZWVwIHRoZQorIyBkZXBl bmRlbmN5IGxpc3QgZmFpcmx5IHN0YW5kYXJkLgorCitpbXBvcnQgYmFzZTY0CitpbXBvcnQgYmlu YXNjaWkKK2ltcG9ydCBjb250ZXh0bGliCitpbXBvcnQgc3RydWN0CitpbXBvcnQgc3lzCitmcm9t IG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgc2hhcmVkX21lbW9yeQorCitNQVhfVUlOVDE2ID0gMiAq KiAxNiAtIDEKKworCitkZWYgcmVtb3ZlX3NobV9mcm9tX3Jlc291cmNlX3RyYWNrZXIoKToKKyAg ICAiIiIKKyAgICBNb25rZXktcGF0Y2ggbXVsdGlwcm9jZXNzaW5nLnJlc291cmNlX3RyYWNrZXIg c28gU2hhcmVkTWVtb3J5IHdvbid0IGJlCisgICAgdHJhY2tlZC4gUHVsbGVkIGZyb20gdGhpcyB0 aHJlYWQsIHdoZXJlIHRoZXJlIGFyZSBtb3JlIGRldGFpbHM6CisKKyAgICAgICAgaHR0cHM6Ly9i dWdzLnB5dGhvbi5vcmcvaXNzdWUzODExOQorCisgICAgVEw7RFI6IGFsbCBjbGllbnRzIG9mIHNo YXJlZCBtZW1vcnkgc2VnbWVudHMgYXV0b21hdGljYWxseSBkZXN0cm95IHRoZW0gb24KKyAgICBw cm9jZXNzIGV4aXQsIHdoaWNoIG1ha2VzIHNoYXJlZCBtZW1vcnkgc2VnbWVudHMgbXVjaCBsZXNz IHVzZWZ1bC4gVGhpcworICAgIG1vbmtleXBhdGNoIHJlbW92ZXMgdGhhdCBiZWhhdmlvciBzbyB0 aGF0IHdlIGNhbiBkZWZlciB0byB0aGUgdGVzdCB0byBtYW5hZ2UKKyAgICB0aGUgc2VnbWVudCBs aWZldGltZS4KKworICAgIElkZWFsbHkgYSBmdXR1cmUgUHl0aG9uIHBhdGNoIHdpbGwgcHVsbCBp biB0aGlzIGZpeCBhbmQgdGhlbiB0aGUgZW50aXJlCisgICAgZnVuY3Rpb24gY2FuIGdvIGF3YXku CisgICAgIiIiCisgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IHJlc291cmNlX3RyYWNr ZXIKKworICAgIGRlZiBmaXhfcmVnaXN0ZXIobmFtZSwgcnR5cGUpOgorICAgICAgICBpZiBydHlw ZSA9PSAic2hhcmVkX21lbW9yeSI6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgcmV0dXJu IHJlc291cmNlX3RyYWNrZXIuX3Jlc291cmNlX3RyYWNrZXIucmVnaXN0ZXIoc2VsZiwgbmFtZSwg cnR5cGUpCisKKyAgICByZXNvdXJjZV90cmFja2VyLnJlZ2lzdGVyID0gZml4X3JlZ2lzdGVyCisK KyAgICBkZWYgZml4X3VucmVnaXN0ZXIobmFtZSwgcnR5cGUpOgorICAgICAgICBpZiBydHlwZSA9 PSAic2hhcmVkX21lbW9yeSI6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgcmV0dXJuIHJl c291cmNlX3RyYWNrZXIuX3Jlc291cmNlX3RyYWNrZXIudW5yZWdpc3RlcihzZWxmLCBuYW1lLCBy dHlwZSkKKworICAgIHJlc291cmNlX3RyYWNrZXIudW5yZWdpc3RlciA9IGZpeF91bnJlZ2lzdGVy CisKKyAgICBpZiAic2hhcmVkX21lbW9yeSIgaW4gcmVzb3VyY2VfdHJhY2tlci5fQ0xFQU5VUF9G VU5DUzoKKyAgICAgICAgZGVsIHJlc291cmNlX3RyYWNrZXIuX0NMRUFOVVBfRlVOQ1NbInNoYXJl ZF9tZW1vcnkiXQorCisKK2RlZiBtYWluKGFyZ3MpOgorICAgIHJlbW92ZV9zaG1fZnJvbV9yZXNv dXJjZV90cmFja2VyKCkgICMgWFhYIHJlbW92ZSBzb21lIGRheQorCisgICAgIyBHZXQgdGhlIGV4 cGVjdGVkIHRva2VuIGZyb20gdGhlIGN1cnJlbnRseSBydW5uaW5nIHRlc3QuCisgICAgc2hhcmVk X21lbV9uYW1lID0gYXJnc1swXQorCisgICAgbWVtID0gc2hhcmVkX21lbW9yeS5TaGFyZWRNZW1v cnkoc2hhcmVkX21lbV9uYW1lKQorICAgIHdpdGggY29udGV4dGxpYi5jbG9zaW5nKG1lbSk6Cisg ICAgICAgICMgRmlyc3QgdHdvIGJ5dGVzIGFyZSB0aGUgdG9rZW4gbGVuZ3RoLgorICAgICAgICBz aXplID0gc3RydWN0LnVucGFjaygiSCIsIG1lbS5idWZbOjJdKVswXQorCisgICAgICAgIGlmIHNp emUgPT0gTUFYX1VJTlQxNjoKKyAgICAgICAgICAgICMgU3BlY2lhbCBjYXNlOiB0aGUgdGVzdCB3 YW50cyB1cyB0byBhY2NlcHQgYW55IHRva2VuLgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0 ZSgiYWNjZXB0aW5nIHRva2VuIHdpdGhvdXQgdmFsaWRhdGlvblxuIikKKyAgICAgICAgICAgIHJl dHVybgorCisgICAgICAgICMgVGhlIHJlbWFpbmRlciBvZiB0aGUgYnVmZmVyIGNvbnRhaW5zIHRo ZSBleHBlY3RlZCB0b2tlbi4KKyAgICAgICAgYXNzZXJ0IHNpemUgPD0gKG1lbS5zaXplIC0gMikK KyAgICAgICAgZXhwZWN0ZWRfdG9rZW4gPSBtZW0uYnVmWzIgOiBzaXplICsgMl0udG9ieXRlcygp CisKKyAgICAgICAgbWVtLmJ1Zls6XSA9IGIiXDAiICogbWVtLnNpemUgICMgc2NyaWJibGUgb3Zl ciB0aGUgdG9rZW4KKworICAgIHRva2VuID0gc3lzLnN0ZGluLmJ1ZmZlci5yZWFkKCkKKyAgICBp ZiB0b2tlbiAhPSBleHBlY3RlZF90b2tlbjoKKyAgICAgICAgc3lzLmV4aXQoZiJmYWlsZWQgdG8g bWF0Y2ggQmVhcmVyIHRva2VuICh7dG9rZW4hcn0gIT0ge2V4cGVjdGVkX3Rva2VuIXJ9KSIpCisK KyAgICAjIFNlZSBpZiB0aGUgdGVzdCB3YW50cyB1cyB0byBwcmludCBhbnl0aGluZy4gSWYgc28s IGl0IHdpbGwgaGF2ZSBlbmNvZGVkCisgICAgIyB0aGUgZGVzaXJlZCBvdXRwdXQgaW4gdGhlIHRv a2VuIHdpdGggYW4gIm91dHB1dD0iIHByZWZpeC4KKyAgICB0cnk6CisgICAgICAgICMgYWx0Y2hh cnM9Ii1fIiBjb3JyZXNwb25kcyB0byB0aGUgdXJsc2FmZSBhbHBoYWJldC4KKyAgICAgICAgZGF0 YSA9IGJhc2U2NC5iNjRkZWNvZGUodG9rZW4sIGFsdGNoYXJzPSItXyIsIHZhbGlkYXRlPVRydWUp CisKKyAgICAgICAgaWYgZGF0YS5zdGFydHN3aXRoKGIib3V0cHV0PSIpOgorICAgICAgICAgICAg c3lzLnN0ZG91dC5idWZmZXIud3JpdGUoZGF0YVs3Ol0pCisKKyAgICBleGNlcHQgYmluYXNjaWku RXJyb3I6CisgICAgICAgIHBhc3MKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAg IG1haW4oc3lzLmFyZ3ZbMTpdKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcHl0aG9uL3NlcnZlci92 YWxpZGF0ZV9yZWZsZWN0LnB5IGIvc3JjL3Rlc3QvcHl0aG9uL3NlcnZlci92YWxpZGF0ZV9yZWZs ZWN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAuLjI0YzNhN2U3MTUK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9weXRob24vc2VydmVyL3ZhbGlkYXRlX3JlZmxl Y3QucHkKQEAgLTAsMCArMSwzNCBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKKyMKKyMgQ29w eXJpZ2h0IDIwMjEgVk13YXJlLCBJbmMuCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBQb3N0 Z3JlU1FMCisjCisjIERPIE5PVCBVU0UgVEhJUyBPQVVUSCBWQUxJREFUT1IgSU4gUFJPRFVDVElP Ti4gSXQgaWdub3JlcyB0aGUgYmVhcmVyIHRva2VuCisjIGVudGlyZWx5IGFuZCBhdXRvbWF0aWNh bGx5IGxvZ3MgdGhlIHVzZXIgaW4uCisjCisjIFRoaXMgZXhlY3V0YWJsZSBpcyB1c2VkIGFzIGFu IG9hdXRoX3ZhbGlkYXRvcl9jb21tYW5kIGluIGNvbmNlcnQgd2l0aAorIyB0ZXN0X29hdXRoLnB5 LiBJdCBleHBlY3RzIHRoZSB1c2VyJ3MgZGVzaXJlZCByb2xlIG5hbWUgYXMgYW4gYXJndW1lbnQ7 IHRoZQorIyBhY3R1YWwgdG9rZW4gd2lsbCBiZSBkaXNjYXJkZWQgYW5kIHRoZSB1c2VyIHdpbGwg YmUgbG9nZ2VkIGluIHdpdGggdGhlIHJvbGUKKyMgbmFtZSBhcyB0aGUgYXV0aGVudGljYXRlZCBp ZGVudGl0eS4KKyMKKyMgVGhpcyBzY3JpcHQgbXVzdCBydW4gdW5kZXIgdGhlIFBvc3RncmVzIHNl cnZlciBlbnZpcm9ubWVudDsga2VlcCB0aGUKKyMgZGVwZW5kZW5jeSBsaXN0IGZhaXJseSBzdGFu ZGFyZC4KKworaW1wb3J0IHN5cworCisKK2RlZiBtYWluKGFyZ3MpOgorICAgICMgV2UgaGF2ZSB0 byByZWFkIHRoZSBlbnRpcmUgdG9rZW4gYXMgb3VyIGZpcnN0IGFjdGlvbiB0byB1bmJsb2NrIHRo ZQorICAgICMgc2VydmVyLCBidXQgd2Ugd29uJ3QgYWN0dWFsbHkgdXNlIGl0LgorICAgIF8gPSBz eXMuc3RkaW4uYnVmZmVyLnJlYWQoKQorCisgICAgaWYgbGVuKGFyZ3MpICE9IDE6CisgICAgICAg IHN5cy5leGl0KCJ1c2FnZTogLi92YWxpZGF0ZV9yZWZsZWN0LnB5IFJPTEUiKQorCisgICAgIyBM b2cgdGhlIHVzZXIgaW4gYXMgdGhlIHByb3ZpZGVkIHJvbGUuCisgICAgcm9sZSA9IGFyZ3NbMF0K KyAgICBwcmludChyb2xlKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFp bihzeXMuYXJndlsxOl0pCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9weXRob24vdGVzdF9pbnRlcm5h bHMucHkgYi9zcmMvdGVzdC9weXRob24vdGVzdF9pbnRlcm5hbHMucHkKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZGVlNDg1NWZjMAotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy90ZXN0L3B5dGhvbi90ZXN0X2ludGVybmFscy5weQpAQCAtMCwwICsxLDEzOCBAQAorIworIyBD b3B5cmlnaHQgMjAyMSBWTXdhcmUsIEluYy4KKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IFBv c3RncmVTUUwKKyMKKworaW1wb3J0IGlvCisKK2Zyb20gcHEzIGltcG9ydCBfRGVidWdTdHJlYW0K KworCitkZWYgdGVzdF9EZWJ1Z1N0cmVhbV9yZWFkKCk6CisgICAgdW5kZXIgPSBpby5CeXRlc0lP KGIiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiKQorICAgIG91dCA9IGlvLlN0cmluZ0lPKCkK KworICAgIHN0cmVhbSA9IF9EZWJ1Z1N0cmVhbSh1bmRlciwgb3V0KQorCisgICAgcmVzID0gc3Ry ZWFtLnJlYWQoNSkKKyAgICBhc3NlcnQgcmVzID09IGIiYWJjZGUiCisKKyAgICByZXMgPSBzdHJl YW0ucmVhZCgxNikKKyAgICBhc3NlcnQgcmVzID09IGIiZmdoaWprbG1ub3BxcnN0dSIKKworICAg IHN0cmVhbS5mbHVzaF9kZWJ1ZygpCisKKyAgICByZXMgPSBzdHJlYW0ucmVhZCgpCisgICAgYXNz ZXJ0IHJlcyA9PSBiInZ3eHl6IgorCisgICAgc3RyZWFtLmZsdXNoX2RlYnVnKCkKKworICAgIGV4 cGVjdGVkID0gKAorICAgICAgICAiPCAwMDAwOlx0NjEgNjIgNjMgNjQgNjUgNjYgNjcgNjggNjkg NmEgNmIgNmMgNmQgNmUgNmYgNzBcdGFiY2RlZmdoaWprbG1ub3BcbiIKKyAgICAgICAgIjwgMDAx MDpcdDcxIDcyIDczIDc0IDc1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHRxcnN0 dVxuIgorICAgICAgICAiXG4iCisgICAgICAgICI8IDAwMDA6XHQ3NiA3NyA3OCA3OSA3YSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0dnd4eXpcbiIKKyAgICAgICAgIlxuIgorICAg ICkKKyAgICBhc3NlcnQgb3V0LmdldHZhbHVlKCkgPT0gZXhwZWN0ZWQKKworCitkZWYgdGVzdF9E ZWJ1Z1N0cmVhbV93cml0ZSgpOgorICAgIHVuZGVyID0gaW8uQnl0ZXNJTygpCisgICAgb3V0ID0g aW8uU3RyaW5nSU8oKQorCisgICAgc3RyZWFtID0gX0RlYnVnU3RyZWFtKHVuZGVyLCBvdXQpCisK KyAgICBzdHJlYW0ud3JpdGUoYiJceDAwXHgwMVx4MDIiKQorICAgIHN0cmVhbS5mbHVzaCgpCisK KyAgICBhc3NlcnQgdW5kZXIuZ2V0dmFsdWUoKSA9PSBiIlx4MDBceDAxXHgwMiIKKworICAgIHN0 cmVhbS53cml0ZShiIlx4YzBceGMxXHhjMiIpCisgICAgc3RyZWFtLmZsdXNoKCkKKworICAgIGFz c2VydCB1bmRlci5nZXR2YWx1ZSgpID09IGIiXHgwMFx4MDFceDAyXHhjMFx4YzFceGMyIgorCisg ICAgc3RyZWFtLmZsdXNoX2RlYnVnKCkKKworICAgIGV4cGVjdGVkID0gIj4gMDAwMDpcdDAwIDAx IDAyIGMwIGMxIGMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHQuLi4uLi5cblxuIgor ICAgIGFzc2VydCBvdXQuZ2V0dmFsdWUoKSA9PSBleHBlY3RlZAorCisKK2RlZiB0ZXN0X0RlYnVn U3RyZWFtX3JlYWRfd3JpdGUoKToKKyAgICB1bmRlciA9IGlvLkJ5dGVzSU8oYiJhYmNkZWZnaGlq a2xtbm9wcXJzdHV2d3h5eiIpCisgICAgb3V0ID0gaW8uU3RyaW5nSU8oKQorICAgIHN0cmVhbSA9 IF9EZWJ1Z1N0cmVhbSh1bmRlciwgb3V0KQorCisgICAgcmVzID0gc3RyZWFtLnJlYWQoNSkKKyAg ICBhc3NlcnQgcmVzID09IGIiYWJjZGUiCisKKyAgICBzdHJlYW0ud3JpdGUoYiJ4eHh4eCIpCisg ICAgc3RyZWFtLmZsdXNoKCkKKworICAgIGFzc2VydCB1bmRlci5nZXR2YWx1ZSgpID09IGIiYWJj ZGV4eHh4eGtsbW5vcHFyc3R1dnd4eXoiCisKKyAgICByZXMgPSBzdHJlYW0ucmVhZCg1KQorICAg IGFzc2VydCByZXMgPT0gYiJrbG1ubyIKKworICAgIHN0cmVhbS53cml0ZShiInh4eHh4IikKKyAg ICBzdHJlYW0uZmx1c2goKQorCisgICAgYXNzZXJ0IHVuZGVyLmdldHZhbHVlKCkgPT0gYiJhYmNk ZXh4eHh4a2xtbm94eHh4eHV2d3h5eiIKKworICAgIHN0cmVhbS5mbHVzaF9kZWJ1ZygpCisKKyAg ICBleHBlY3RlZCA9ICgKKyAgICAgICAgIjwgMDAwMDpcdDYxIDYyIDYzIDY0IDY1IDZiIDZjIDZk IDZlIDZmICAgICAgICAgICAgICAgICAgXHRhYmNkZWtsbW5vXG4iCisgICAgICAgICJcbiIKKyAg ICAgICAgIj4gMDAwMDpcdDc4IDc4IDc4IDc4IDc4IDc4IDc4IDc4IDc4IDc4ICAgICAgICAgICAg ICAgICAgXHR4eHh4eHh4eHh4XG4iCisgICAgICAgICJcbiIKKyAgICApCisgICAgYXNzZXJ0IG91 dC5nZXR2YWx1ZSgpID09IGV4cGVjdGVkCisKKworZGVmIHRlc3RfRGVidWdTdHJlYW1fZW5kX3Bh Y2tldCgpOgorICAgIHVuZGVyID0gaW8uQnl0ZXNJTyhiImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3 eHl6IikKKyAgICBvdXQgPSBpby5TdHJpbmdJTygpCisgICAgc3RyZWFtID0gX0RlYnVnU3RyZWFt KHVuZGVyLCBvdXQpCisKKyAgICBzdHJlYW0ucmVhZCg1KQorICAgIHN0cmVhbS5lbmRfcGFja2V0 KCJyZWFkIGRlc2NyaXB0aW9uIiwgcmVhZD1UcnVlLCBpbmRlbnQ9IiAiKQorCisgICAgc3RyZWFt LndyaXRlKGIieHh4eHgiKQorICAgIHN0cmVhbS5mbHVzaCgpCisgICAgc3RyZWFtLmVuZF9wYWNr ZXQoIndyaXRlIGRlc2NyaXB0aW9uIiwgaW5kZW50PSIgIikKKworICAgIHN0cmVhbS5yZWFkKDUp CisgICAgc3RyZWFtLndyaXRlKGIieHh4eHgiKQorICAgIHN0cmVhbS5mbHVzaCgpCisgICAgc3Ry ZWFtLmVuZF9wYWNrZXQoInJlYWQvd3JpdGUgY29tYm8gZm9yIHJlYWQiLCByZWFkPVRydWUsIGlu ZGVudD0iICIpCisKKyAgICBzdHJlYW0ucmVhZCg1KQorICAgIHN0cmVhbS53cml0ZShiInh4eHh4 IikKKyAgICBzdHJlYW0uZmx1c2goKQorICAgIHN0cmVhbS5lbmRfcGFja2V0KCJyZWFkL3dyaXRl IGNvbWJvIGZvciB3cml0ZSIsIGluZGVudD0iICIpCisKKyAgICBleHBlY3RlZCA9ICgKKyAgICAg ICAgIiA8IDAwMDA6XHQ2MSA2MiA2MyA2NCA2NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFx0YWJjZGVcbiIKKyAgICAgICAgIlxuIgorICAgICAgICAiPCByZWFkIGRlc2NyaXB0aW9u XG4iCisgICAgICAgICJcbiIKKyAgICAgICAgIj4gd3JpdGUgZGVzY3JpcHRpb25cbiIKKyAgICAg ICAgIlxuIgorICAgICAgICAiID4gMDAwMDpcdDc4IDc4IDc4IDc4IDc4ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXHR4eHh4eFxuIgorICAgICAgICAiXG4iCisgICAgICAgICIgPCAw MDAwOlx0NmIgNmMgNmQgNmUgNmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdGts bW5vXG4iCisgICAgICAgICJcbiIKKyAgICAgICAgIiA+IDAwMDA6XHQ3OCA3OCA3OCA3OCA3OCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0eHh4eHhcbiIKKyAgICAgICAgIlxuIgor ICAgICAgICAiPCByZWFkL3dyaXRlIGNvbWJvIGZvciByZWFkXG4iCisgICAgICAgICJcbiIKKyAg ICAgICAgIj4gcmVhZC93cml0ZSBjb21ibyBmb3Igd3JpdGVcbiIKKyAgICAgICAgIlxuIgorICAg ICAgICAiIDwgMDAwMDpcdDc1IDc2IDc3IDc4IDc5ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXHR1dnd4eVxuIgorICAgICAgICAiXG4iCisgICAgICAgICIgPiAwMDAwOlx0NzggNzgg NzggNzggNzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdHh4eHh4XG4iCisgICAg ICAgICJcbiIKKyAgICApCisgICAgYXNzZXJ0IG91dC5nZXR2YWx1ZSgpID09IGV4cGVjdGVkCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9weXRob24vdGVzdF9wcTMucHkgYi9zcmMvdGVzdC9weXRob24v dGVzdF9wcTMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZTBjMGUw NTY4ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5dGhvbi90ZXN0X3BxMy5weQpAQCAt MCwwICsxLDU1OCBAQAorIworIyBDb3B5cmlnaHQgMjAyMSBWTXdhcmUsIEluYy4KKyMgU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IFBvc3RncmVTUUwKKyMKKworaW1wb3J0IGNvbnRleHRsaWIKK2lt cG9ydCBnZXRwYXNzCitpbXBvcnQgaW8KK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBzeXMKKworaW1w b3J0IHB5dGVzdAorZnJvbSBjb25zdHJ1Y3QgaW1wb3J0IENvbnRhaW5lciwgUGFkZGluZ0Vycm9y LCBTdHJlYW1FcnJvciwgVGVybWluYXRlZEVycm9yCisKK2ltcG9ydCBwcTMKKworCitAcHl0ZXN0 Lm1hcmsucGFyYW1ldHJpemUoCisgICAgInJhdyxleHBlY3RlZCxleHRyYSIsCisgICAgWworICAg ICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBiIlx4MDBceDAwXHgwMFx4MTBceDAwXHgw NFx4MDBceDAwYWJjZGVmZ2giLAorICAgICAgICAgICAgQ29udGFpbmVyKGxlbj0xNiwgcHJvdG89 MHg0MDAwMCwgcGF5bG9hZD1iImFiY2RlZmdoIiksCisgICAgICAgICAgICBiIiIsCisgICAgICAg ICAgICBpZD0iOC1ieXRlIHBheWxvYWQiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFy YW0oCisgICAgICAgICAgICBiIlx4MDBceDAwXHgwMFx4MDhceDAwXHgwNFx4MDBceDAwIiwKKyAg ICAgICAgICAgIENvbnRhaW5lcihsZW49OCwgcHJvdG89MHg0MDAwMCwgcGF5bG9hZD1iIiIpLAor ICAgICAgICAgICAgYiIiLAorICAgICAgICAgICAgaWQ9Im5vIHBheWxvYWQiLAorICAgICAgICAp LAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBiIlx4MDBceDAwXHgwMFx4MDlc eDAwXHgwNFx4MDBceDAwYWJjZGUiLAorICAgICAgICAgICAgQ29udGFpbmVyKGxlbj05LCBwcm90 bz0weDQwMDAwLCBwYXlsb2FkPWIiYSIpLAorICAgICAgICAgICAgYiJiY2RlIiwKKyAgICAgICAg ICAgIGlkPSIxLWJ5dGUgcGF5bG9hZCBhbmQgZXh0cmEgcGFkZGluZyIsCisgICAgICAgICksCisg ICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGIiXHgwMFx4MDBceDAwXHgwQlx4MDBc eDAzXHgwMFx4MDBoaVx4MDAiLAorICAgICAgICAgICAgQ29udGFpbmVyKGxlbj0xMSwgcHJvdG89 cHEzLnByb3RvY29sKDMsIDApLCBwYXlsb2FkPVtiImhpIl0pLAorICAgICAgICAgICAgYiIiLAor ICAgICAgICAgICAgaWQ9ImltcGxpZWQgcGFyYW1ldGVyIGxpc3Qgd2hlbiB1c2luZyBwcm90byB2 ZXJzaW9uIDMuMCIsCisgICAgICAgICksCisgICAgXSwKKykKK2RlZiB0ZXN0X1N0YXJ0dXBfcGFy c2UocmF3LCBleHBlY3RlZCwgZXh0cmEpOgorICAgIHdpdGggaW8uQnl0ZXNJTyhyYXcpIGFzIHN0 cmVhbToKKyAgICAgICAgYWN0dWFsID0gcHEzLlN0YXJ0dXAucGFyc2Vfc3RyZWFtKHN0cmVhbSkK KworICAgICAgICBhc3NlcnQgYWN0dWFsID09IGV4cGVjdGVkCisgICAgICAgIGFzc2VydCBzdHJl YW0ucmVhZCgpID09IGV4dHJhCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKAorICAgICJw YWNrZXQsZXhwZWN0ZWRfYnl0ZXMiLAorICAgIFsKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAg ICAgICAgICAgZGljdCgpLAorICAgICAgICAgICAgYiJceDAwXHgwMFx4MDBceDA4XHgwMFx4MDBc eDAwXHgwMCIsCisgICAgICAgICAgICBpZD0ibm90aGluZyBzZXQiLAorICAgICAgICApLAorICAg ICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBkaWN0KGxlbj0xMCwgcHJvdG89MHgxMjM0 NTY3OCksCisgICAgICAgICAgICBiIlx4MDBceDAwXHgwMFx4MEFceDEyXHgzNFx4NTZceDc4XHgw MFx4MDAiLAorICAgICAgICAgICAgaWQ9ImxlbiBhbmQgcHJvdG8gc2V0IGV4cGxpY2l0bHkiLAor ICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBkaWN0KHByb3Rv PTB4MTIzNDU2NzgpLAorICAgICAgICAgICAgYiJceDAwXHgwMFx4MDBceDA4XHgxMlx4MzRceDU2 XHg3OCIsCisgICAgICAgICAgICBpZD0iaW1wbGllZCBsZW4gd2l0aCBubyBwYXlsb2FkIiwKKyAg ICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgZGljdChwcm90bz0w eDEyMzQ1Njc4LCBwYXlsb2FkPWIiYWJjZCIpLAorICAgICAgICAgICAgYiJceDAwXHgwMFx4MDBc eDBDXHgxMlx4MzRceDU2XHg3OGFiY2QiLAorICAgICAgICAgICAgaWQ9ImltcGxpZWQgbGVuIHdp dGggcGF5bG9hZCIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAg ICAgIGRpY3QocGF5bG9hZD1bYiIiXSksCisgICAgICAgICAgICBiIlx4MDBceDAwXHgwMFx4MDlc eDAwXHgwM1x4MDBceDAwXHgwMCIsCisgICAgICAgICAgICBpZD0iaW1wbGllZCBwcm90byB2ZXJz aW9uIDMgd2hlbiBzZW5kaW5nIHBhcmFtZXRlcnMiLAorICAgICAgICApLAorICAgICAgICBweXRl c3QucGFyYW0oCisgICAgICAgICAgICBkaWN0KHBheWxvYWQ9W2IiaGkiLCBiIiJdKSwKKyAgICAg ICAgICAgIGIiXHgwMFx4MDBceDAwXHgwQ1x4MDBceDAzXHgwMFx4MDBoaVx4MDBceDAwIiwKKyAg ICAgICAgICAgIGlkPSJpbXBsaWVkIHByb3RvIHZlcnNpb24gMyBhbmQgbGVuIHdoZW4gc2VuZGlu ZyBtb3JlIHRoYW4gb25lIHBhcmFtZXRlciIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5w YXJhbSgKKyAgICAgICAgICAgIGRpY3QocGF5bG9hZD1kaWN0KHVzZXI9ImpzbWl0aCIsIGRhdGFi YXNlPSJwb3N0Z3JlcyIpKSwKKyAgICAgICAgICAgIGIiXHgwMFx4MDBceDAwXHgyN1x4MDBceDAz XHgwMFx4MDB1c2VyXHgwMGpzbWl0aFx4MDBkYXRhYmFzZVx4MDBwb3N0Z3Jlc1x4MDBceDAwIiwK KyAgICAgICAgICAgIGlkPSJhdXRvLXNlcmlhbGl6YXRpb24gb2YgZGljdCBwYXJhbWV0ZXJzIiwK KyAgICAgICAgKSwKKyAgICBdLAorKQorZGVmIHRlc3RfU3RhcnR1cF9idWlsZChwYWNrZXQsIGV4 cGVjdGVkX2J5dGVzKToKKyAgICBhY3R1YWwgPSBwcTMuU3RhcnR1cC5idWlsZChwYWNrZXQpCisg ICAgYXNzZXJ0IGFjdHVhbCA9PSBleHBlY3RlZF9ieXRlcworCisKK0BweXRlc3QubWFyay5wYXJh bWV0cml6ZSgKKyAgICAicmF3LGV4cGVjdGVkLGV4dHJhIiwKKyAgICBbCisgICAgICAgIHB5dGVz dC5wYXJhbSgKKyAgICAgICAgICAgIGIiKlx4MDBceDAwXHgwMFx4MDhhYmNkIiwKKyAgICAgICAg ICAgIGRpY3QodHlwZT1iIioiLCBsZW49OCwgcGF5bG9hZD1iImFiY2QiKSwKKyAgICAgICAgICAg IGIiIiwKKyAgICAgICAgICAgIGlkPSI0LWJ5dGUgcGF5bG9hZCIsCisgICAgICAgICksCisgICAg ICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGIiKlx4MDBceDAwXHgwMFx4MDQiLAorICAg ICAgICAgICAgZGljdCh0eXBlPWIiKiIsIGxlbj00LCBwYXlsb2FkPWIiIiksCisgICAgICAgICAg ICBiIiIsCisgICAgICAgICAgICBpZD0ibm8gcGF5bG9hZCIsCisgICAgICAgICksCisgICAgICAg IHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGIiKlx4MDBceDAwXHgwMFx4MDV4YWJjZCIsCisg ICAgICAgICAgICBkaWN0KHR5cGU9YiIqIiwgbGVuPTUsIHBheWxvYWQ9YiJ4IiksCisgICAgICAg ICAgICBiImFiY2QiLAorICAgICAgICAgICAgaWQ9IjEtYnl0ZSBwYXlsb2FkIHdpdGggZXh0cmEg cGFkZGluZyIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAg IGIiUlx4MDBceDAwXHgwMFx4MDhceDAwXHgwMFx4MDBceDAwIiwKKyAgICAgICAgICAgIGRpY3Qo CisgICAgICAgICAgICAgICAgdHlwZT1wcTMudHlwZXMuQXV0aG5SZXF1ZXN0LAorICAgICAgICAg ICAgICAgIGxlbj04LAorICAgICAgICAgICAgICAgIHBheWxvYWQ9ZGljdCh0eXBlPXBxMy5hdXRo bi5PSywgYm9keT1Ob25lKSwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBiIiIsCisgICAg ICAgICAgICBpZD0iQXV0aGVudGljYXRpb25PayIsCisgICAgICAgICksCisgICAgICAgIHB5dGVz dC5wYXJhbSgKKyAgICAgICAgICAgIGIiUlx4MDBceDAwXHgwMFx4MTJceDAwXHgwMFx4MDBceDBB RVhURVJOQUxceDAwXHgwMCIsCisgICAgICAgICAgICBkaWN0KAorICAgICAgICAgICAgICAgIHR5 cGU9cHEzLnR5cGVzLkF1dGhuUmVxdWVzdCwKKyAgICAgICAgICAgICAgICBsZW49MTgsCisgICAg ICAgICAgICAgICAgcGF5bG9hZD1kaWN0KHR5cGU9cHEzLmF1dGhuLlNBU0wsIGJvZHk9W2IiRVhU RVJOQUwiLCBiIiJdKSwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBiIiIsCisgICAgICAg ICAgICBpZD0iQXV0aGVudGljYXRpb25TQVNMIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0 LnBhcmFtKAorICAgICAgICAgICAgYiJSXHgwMFx4MDBceDAwXHgwRFx4MDBceDAwXHgwMFx4MEIx MjM0NSIsCisgICAgICAgICAgICBkaWN0KAorICAgICAgICAgICAgICAgIHR5cGU9cHEzLnR5cGVz LkF1dGhuUmVxdWVzdCwKKyAgICAgICAgICAgICAgICBsZW49MTMsCisgICAgICAgICAgICAgICAg cGF5bG9hZD1kaWN0KHR5cGU9cHEzLmF1dGhuLlNBU0xDb250aW51ZSwgYm9keT1iIjEyMzQ1Iiks CisgICAgICAgICAgICApLAorICAgICAgICAgICAgYiIiLAorICAgICAgICAgICAgaWQ9IkF1dGhl bnRpY2F0aW9uU0FTTENvbnRpbnVlIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFt KAorICAgICAgICAgICAgYiJSXHgwMFx4MDBceDAwXHgwRFx4MDBceDAwXHgwMFx4MEMxMjM0NSIs CisgICAgICAgICAgICBkaWN0KAorICAgICAgICAgICAgICAgIHR5cGU9cHEzLnR5cGVzLkF1dGhu UmVxdWVzdCwKKyAgICAgICAgICAgICAgICBsZW49MTMsCisgICAgICAgICAgICAgICAgcGF5bG9h ZD1kaWN0KHR5cGU9cHEzLmF1dGhuLlNBU0xGaW5hbCwgYm9keT1iIjEyMzQ1IiksCisgICAgICAg ICAgICApLAorICAgICAgICAgICAgYiIiLAorICAgICAgICAgICAgaWQ9IkF1dGhlbnRpY2F0aW9u U0FTTEZpbmFsIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAg ICAgYiJwXHgwMFx4MDBceDAwXHgwQmh1bnRlcjIiLAorICAgICAgICAgICAgZGljdCgKKyAgICAg ICAgICAgICAgICB0eXBlPXBxMy50eXBlcy5QYXNzd29yZE1lc3NhZ2UsCisgICAgICAgICAgICAg ICAgbGVuPTExLAorICAgICAgICAgICAgICAgIHBheWxvYWQ9YiJodW50ZXIyIiwKKyAgICAgICAg ICAgICksCisgICAgICAgICAgICBiIiIsCisgICAgICAgICAgICBpZD0iUGFzc3dvcmRNZXNzYWdl IiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgYiJLXHgw MFx4MDBceDAwXHgwQ1x4MDBceDAwXHgwMFx4MDBceDEyXHgzNFx4NTZceDc4IiwKKyAgICAgICAg ICAgIGRpY3QoCisgICAgICAgICAgICAgICAgdHlwZT1wcTMudHlwZXMuQmFja2VuZEtleURhdGEs CisgICAgICAgICAgICAgICAgbGVuPTEyLAorICAgICAgICAgICAgICAgIHBheWxvYWQ9ZGljdChw aWQ9MCwga2V5PTB4MTIzNDU2NzgpLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIGIiIiwK KyAgICAgICAgICAgIGlkPSJCYWNrZW5kS2V5RGF0YSIsCisgICAgICAgICksCisgICAgICAgIHB5 dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGIiQ1x4MDBceDAwXHgwMFx4MDhTRVRceDAwIiwKKyAg ICAgICAgICAgIGRpY3QoCisgICAgICAgICAgICAgICAgdHlwZT1wcTMudHlwZXMuQ29tbWFuZENv bXBsZXRlLAorICAgICAgICAgICAgICAgIGxlbj04LAorICAgICAgICAgICAgICAgIHBheWxvYWQ9 ZGljdCh0YWc9YiJTRVQiKSwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBiIiIsCisgICAg ICAgICAgICBpZD0iQ29tbWFuZENvbXBsZXRlIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0 LnBhcmFtKAorICAgICAgICAgICAgYiJFXHgwMFx4MDBceDAwXHgxMU1iYWQhXHgwME1kb2chXHgw MFx4MDAiLAorICAgICAgICAgICAgZGljdCh0eXBlPWIiRSIsIGxlbj0xNywgcGF5bG9hZD1kaWN0 KGZpZWxkcz1bYiJNYmFkISIsIGIiTWRvZyEiLCBiIiJdKSksCisgICAgICAgICAgICBiIiIsCisg ICAgICAgICAgICBpZD0iRXJyb3JSZXNwb25zZSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVz dC5wYXJhbSgKKyAgICAgICAgICAgIGIiU1x4MDBceDAwXHgwMFx4MDhhXHgwMGJceDAwIiwKKyAg ICAgICAgICAgIGRpY3QoCisgICAgICAgICAgICAgICAgdHlwZT1wcTMudHlwZXMuUGFyYW1ldGVy U3RhdHVzLAorICAgICAgICAgICAgICAgIGxlbj04LAorICAgICAgICAgICAgICAgIHBheWxvYWQ9 ZGljdChuYW1lPWIiYSIsIHZhbHVlPWIiYiIpLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAg IGIiIiwKKyAgICAgICAgICAgIGlkPSJQYXJhbWV0ZXJTdGF0dXMiLAorICAgICAgICApLAorICAg ICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBiIlpceDAwXHgwMFx4MDBceDA1eCIsCisg ICAgICAgICAgICBkaWN0KHR5cGU9YiJaIiwgbGVuPTUsIHBheWxvYWQ9ZGljdChzdGF0dXM9YiJ4 IikpLAorICAgICAgICAgICAgYiIiLAorICAgICAgICAgICAgaWQ9IlJlYWR5Rm9yUXVlcnkiLAor ICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBiIlFceDAwXHgw MFx4MDBceDA2IVx4MDAiLAorICAgICAgICAgICAgZGljdCh0eXBlPXBxMy50eXBlcy5RdWVyeSwg bGVuPTYsIHBheWxvYWQ9ZGljdChxdWVyeT1iIiEiKSksCisgICAgICAgICAgICBiIiIsCisgICAg ICAgICAgICBpZD0iUXVlcnkiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisg ICAgICAgICAgICBiIkRceDAwXHgwMFx4MDBceDBCXHgwMFx4MDFceDAwXHgwMFx4MDBceDAxISIs CisgICAgICAgICAgICBkaWN0KHR5cGU9cHEzLnR5cGVzLkRhdGFSb3csIGxlbj0xMSwgcGF5bG9h ZD1kaWN0KGNvbHVtbnM9W2IiISJdKSksCisgICAgICAgICAgICBiIiIsCisgICAgICAgICAgICBp ZD0iRGF0YVJvdyIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAg ICAgIGIiRFx4MDBceDAwXHgwMFx4MDZceDAwXHgwMGV4dHJhIiwKKyAgICAgICAgICAgIGRpY3Qo dHlwZT1wcTMudHlwZXMuRGF0YVJvdywgbGVuPTYsIHBheWxvYWQ9ZGljdChjb2x1bW5zPVtdKSks CisgICAgICAgICAgICBiImV4dHJhIiwKKyAgICAgICAgICAgIGlkPSJEYXRhUm93IHdpdGggZXh0 cmEgZGF0YSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAg IGIiSVx4MDBceDAwXHgwMFx4MDQiLAorICAgICAgICAgICAgZGljdCh0eXBlPXBxMy50eXBlcy5F bXB0eVF1ZXJ5UmVzcG9uc2UsIGxlbj00LCBwYXlsb2FkPU5vbmUpLAorICAgICAgICAgICAgYiIi LAorICAgICAgICAgICAgaWQ9IkVtcHR5UXVlcnlSZXNwb25zZSIsCisgICAgICAgICksCisgICAg ICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGIiSVx4MDBceDAwXHgwMFx4MDRceEZGIiwK KyAgICAgICAgICAgIGRpY3QodHlwZT1iIkkiLCBsZW49NCwgcGF5bG9hZD1Ob25lKSwKKyAgICAg ICAgICAgIGIiXHhGRiIsCisgICAgICAgICAgICBpZD0iRW1wdHlRdWVyeVJlc3BvbnNlIHdpdGgg ZXh0cmEgYnl0ZXMiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAg ICAgICBiIlhceDAwXHgwMFx4MDBceDA0IiwKKyAgICAgICAgICAgIGRpY3QodHlwZT1wcTMudHlw ZXMuVGVybWluYXRlLCBsZW49NCwgcGF5bG9hZD1Ob25lKSwKKyAgICAgICAgICAgIGIiIiwKKyAg ICAgICAgICAgIGlkPSJUZXJtaW5hdGUiLAorICAgICAgICApLAorICAgIF0sCispCitkZWYgdGVz dF9QcTNfcGFyc2UocmF3LCBleHBlY3RlZCwgZXh0cmEpOgorICAgIHdpdGggaW8uQnl0ZXNJTyhy YXcpIGFzIHN0cmVhbToKKyAgICAgICAgYWN0dWFsID0gcHEzLlBxMy5wYXJzZV9zdHJlYW0oc3Ry ZWFtKQorCisgICAgICAgIGFzc2VydCBhY3R1YWwgPT0gZXhwZWN0ZWQKKyAgICAgICAgYXNzZXJ0 IHN0cmVhbS5yZWFkKCkgPT0gZXh0cmEKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoCisg ICAgImZpZWxkcyxleHBlY3RlZCIsCisgICAgWworICAgICAgICBweXRlc3QucGFyYW0oCisgICAg ICAgICAgICBkaWN0KHR5cGU9YiIqIiwgbGVuPTUpLAorICAgICAgICAgICAgYiIqXHgwMFx4MDBc eDAwXHgwNVx4MDAiLAorICAgICAgICAgICAgaWQ9InR5cGUgYW5kIGxlbiBzZXQgZXhwbGljaXRs eSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGRpY3Qo dHlwZT1iIioiKSwKKyAgICAgICAgICAgIGIiKlx4MDBceDAwXHgwMFx4MDQiLAorICAgICAgICAg ICAgaWQ9ImltcGxpZWQgbGVuIHdpdGggbm8gcGF5bG9hZCIsCisgICAgICAgICksCisgICAgICAg IHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGRpY3QodHlwZT1iIioiLCBwYXlsb2FkPWIiMTIz NCIpLAorICAgICAgICAgICAgYiIqXHgwMFx4MDBceDAwXHgwODEyMzQiLAorICAgICAgICAgICAg aWQ9ImltcGxpZWQgbGVuIHdpdGggcGF5bG9hZCIsCisgICAgICAgICksCisgICAgICAgIHB5dGVz dC5wYXJhbSgKKyAgICAgICAgICAgIGRpY3QodHlwZT1wcTMudHlwZXMuQXV0aG5SZXF1ZXN0LCBw YXlsb2FkPWRpY3QodHlwZT1wcTMuYXV0aG4uT0spKSwKKyAgICAgICAgICAgIGIiUlx4MDBceDAw XHgwMFx4MDhceDAwXHgwMFx4MDBceDAwIiwKKyAgICAgICAgICAgIGlkPSJpbXBsaWVkIGxlbi90 eXBlIGZvciBBdXRoZW50aWNhdGlvbk9LIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBh cmFtKAorICAgICAgICAgICAgZGljdCgKKyAgICAgICAgICAgICAgICB0eXBlPXBxMy50eXBlcy5B dXRoblJlcXVlc3QsCisgICAgICAgICAgICAgICAgcGF5bG9hZD1kaWN0KAorICAgICAgICAgICAg ICAgICAgICB0eXBlPXBxMy5hdXRobi5TQVNMLAorICAgICAgICAgICAgICAgICAgICBib2R5PVti IlNDUkFNLVNIQS0yNTYtUExVUyIsIGIiU0NSQU0tU0hBLTI1NiIsIGIiIl0sCisgICAgICAgICAg ICAgICAgKSwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBiIlJceDAwXHgwMFx4MDBceDJB XHgwMFx4MDBceDAwXHgwQVNDUkFNLVNIQS0yNTYtUExVU1x4MDBTQ1JBTS1TSEEtMjU2XHgwMFx4 MDAiLAorICAgICAgICAgICAgaWQ9ImltcGxpZWQgbGVuL3R5cGUgZm9yIEF1dGhlbnRpY2F0aW9u U0FTTCIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGRp Y3QoCisgICAgICAgICAgICAgICAgdHlwZT1wcTMudHlwZXMuQXV0aG5SZXF1ZXN0LAorICAgICAg ICAgICAgICAgIHBheWxvYWQ9ZGljdCh0eXBlPXBxMy5hdXRobi5TQVNMQ29udGludWUsIGJvZHk9 YiIxMjM0NSIpLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIGIiUlx4MDBceDAwXHgwMFx4 MERceDAwXHgwMFx4MDBceDBCMTIzNDUiLAorICAgICAgICAgICAgaWQ9ImltcGxpZWQgbGVuL3R5 cGUgZm9yIEF1dGhlbnRpY2F0aW9uU0FTTENvbnRpbnVlIiwKKyAgICAgICAgKSwKKyAgICAgICAg cHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgZGljdCgKKyAgICAgICAgICAgICAgICB0eXBlPXBx My50eXBlcy5BdXRoblJlcXVlc3QsCisgICAgICAgICAgICAgICAgcGF5bG9hZD1kaWN0KHR5cGU9 cHEzLmF1dGhuLlNBU0xGaW5hbCwgYm9keT1iIjEyMzQ1IiksCisgICAgICAgICAgICApLAorICAg ICAgICAgICAgYiJSXHgwMFx4MDBceDAwXHgwRFx4MDBceDAwXHgwMFx4MEMxMjM0NSIsCisgICAg ICAgICAgICBpZD0iaW1wbGllZCBsZW4vdHlwZSBmb3IgQXV0aGVudGljYXRpb25TQVNMRmluYWwi LAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBkaWN0KAor ICAgICAgICAgICAgICAgIHR5cGU9cHEzLnR5cGVzLlBhc3N3b3JkTWVzc2FnZSwKKyAgICAgICAg ICAgICAgICBwYXlsb2FkPWIiaHVudGVyMiIsCisgICAgICAgICAgICApLAorICAgICAgICAgICAg YiJwXHgwMFx4MDBceDAwXHgwQmh1bnRlcjIiLAorICAgICAgICAgICAgaWQ9ImltcGxpZWQgbGVu L3R5cGUgZm9yIFBhc3N3b3JkTWVzc2FnZSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5w YXJhbSgKKyAgICAgICAgICAgIGRpY3QodHlwZT1wcTMudHlwZXMuQmFja2VuZEtleURhdGEsIHBh eWxvYWQ9ZGljdChwaWQ9MSwga2V5PTcpKSwKKyAgICAgICAgICAgIGIiS1x4MDBceDAwXHgwMFx4 MENceDAwXHgwMFx4MDBceDAxXHgwMFx4MDBceDAwXHgwNyIsCisgICAgICAgICAgICBpZD0iaW1w bGllZCBsZW4vdHlwZSBmb3IgQmFja2VuZEtleURhdGEiLAorICAgICAgICApLAorICAgICAgICBw eXRlc3QucGFyYW0oCisgICAgICAgICAgICBkaWN0KHR5cGU9cHEzLnR5cGVzLkNvbW1hbmRDb21w bGV0ZSwgcGF5bG9hZD1kaWN0KHRhZz1iIlNFVCIpKSwKKyAgICAgICAgICAgIGIiQ1x4MDBceDAw XHgwMFx4MDhTRVRceDAwIiwKKyAgICAgICAgICAgIGlkPSJpbXBsaWVkIGxlbi90eXBlIGZvciBD b21tYW5kQ29tcGxldGUiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAg ICAgICAgICBkaWN0KHR5cGU9cHEzLnR5cGVzLkVycm9yUmVzcG9uc2UsIHBheWxvYWQ9ZGljdChm aWVsZHM9W2IiZXJyb3IiLCBiIiJdKSksCisgICAgICAgICAgICBiIkVceDAwXHgwMFx4MDBceDBC ZXJyb3JceDAwXHgwMCIsCisgICAgICAgICAgICBpZD0iaW1wbGllZCBsZW4vdHlwZSBmb3IgRXJy b3JSZXNwb25zZSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAg ICAgIGRpY3QodHlwZT1wcTMudHlwZXMuUGFyYW1ldGVyU3RhdHVzLCBwYXlsb2FkPWRpY3QobmFt ZT1iImEiLCB2YWx1ZT1iImIiKSksCisgICAgICAgICAgICBiIlNceDAwXHgwMFx4MDBceDA4YVx4 MDBiXHgwMCIsCisgICAgICAgICAgICBpZD0iaW1wbGllZCBsZW4vdHlwZSBmb3IgUGFyYW1ldGVy U3RhdHVzIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAg ZGljdCh0eXBlPXBxMy50eXBlcy5SZWFkeUZvclF1ZXJ5LCBwYXlsb2FkPWRpY3Qoc3RhdHVzPWIi SSIpKSwKKyAgICAgICAgICAgIGIiWlx4MDBceDAwXHgwMFx4MDVJIiwKKyAgICAgICAgICAgIGlk PSJpbXBsaWVkIGxlbi90eXBlIGZvciBSZWFkeUZvclF1ZXJ5IiwKKyAgICAgICAgKSwKKyAgICAg ICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgZGljdCh0eXBlPXBxMy50eXBlcy5RdWVyeSwg cGF5bG9hZD1kaWN0KHF1ZXJ5PWIiU0VMRUNUIDE7IikpLAorICAgICAgICAgICAgYiJRXHgwMFx4 MDBceDAwXHgwZVNFTEVDVCAxO1x4MDAiLAorICAgICAgICAgICAgaWQ9ImltcGxpZWQgbGVuL3R5 cGUgZm9yIFF1ZXJ5IiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAg ICAgICAgZGljdCh0eXBlPXBxMy50eXBlcy5EYXRhUm93LCBwYXlsb2FkPWRpY3QoY29sdW1ucz1b YiJhYmNkIl0pKSwKKyAgICAgICAgICAgIGIiRFx4MDBceDAwXHgwMFx4MEVceDAwXHgwMVx4MDBc eDAwXHgwMFx4MDRhYmNkIiwKKyAgICAgICAgICAgIGlkPSJpbXBsaWVkIGxlbi90eXBlIGZvciBE YXRhUm93IiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAg ZGljdCh0eXBlPXBxMy50eXBlcy5FbXB0eVF1ZXJ5UmVzcG9uc2UpLAorICAgICAgICAgICAgYiJJ XHgwMFx4MDBceDAwXHgwNCIsCisgICAgICAgICAgICBpZD0iaW1wbGllZCBsZW4gZm9yIEVtcHR5 UXVlcnlSZXNwb25zZSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAg ICAgICAgIGRpY3QodHlwZT1wcTMudHlwZXMuVGVybWluYXRlKSwKKyAgICAgICAgICAgIGIiWFx4 MDBceDAwXHgwMFx4MDQiLAorICAgICAgICAgICAgaWQ9ImltcGxpZWQgbGVuIGZvciBUZXJtaW5h dGUiLAorICAgICAgICApLAorICAgIF0sCispCitkZWYgdGVzdF9QcTNfYnVpbGQoZmllbGRzLCBl eHBlY3RlZCk6CisgICAgYWN0dWFsID0gcHEzLlBxMy5idWlsZChmaWVsZHMpCisgICAgYXNzZXJ0 IGFjdHVhbCA9PSBleHBlY3RlZAorCisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgKKyAgICAi cmF3LGV4cGVjdGVkLGV4dHJhIiwKKyAgICBbCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAg ICAgICAgIGIiXHgwMFx4MDAiLAorICAgICAgICAgICAgZGljdChjb2x1bW5zPVtdKSwKKyAgICAg ICAgICAgIGIiIiwKKyAgICAgICAgICAgIGlkPSJubyBjb2x1bW5zIiwKKyAgICAgICAgKSwKKyAg ICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgYiJceDAwXHgwMVx4MDBceDAwXHgwMFx4 MDRhYmNkIiwKKyAgICAgICAgICAgIGRpY3QoY29sdW1ucz1bYiJhYmNkIl0pLAorICAgICAgICAg ICAgYiIiLAorICAgICAgICAgICAgaWQ9Im9uZSBjb2x1bW4iLAorICAgICAgICApLAorICAgICAg ICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBiIlx4MDBceDAyXHgwMFx4MDBceDAwXHgwNGFi Y2RceDAwXHgwMFx4MDBceDAxeCIsCisgICAgICAgICAgICBkaWN0KGNvbHVtbnM9W2IiYWJjZCIs IGIieCJdKSwKKyAgICAgICAgICAgIGIiIiwKKyAgICAgICAgICAgIGlkPSJtdWx0aXBsZSBjb2x1 bW5zIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgYiJc eDAwXHgwMlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxeCIsCisgICAgICAgICAgICBk aWN0KGNvbHVtbnM9W2IiIiwgYiJ4Il0pLAorICAgICAgICAgICAgYiIiLAorICAgICAgICAgICAg aWQ9ImVtcHR5IGNvbHVtbiB2YWx1ZSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVzdC5wYXJh bSgKKyAgICAgICAgICAgIGIiXHgwMFx4MDJceEZGXHhGRlx4RkZceEZGXHhGRlx4RkZceEZGXHhG RiIsCisgICAgICAgICAgICBkaWN0KGNvbHVtbnM9W05vbmUsIE5vbmVdKSwKKyAgICAgICAgICAg IGIiIiwKKyAgICAgICAgICAgIGlkPSJudWxsIGNvbHVtbnMiLAorICAgICAgICApLAorICAgIF0s CispCitkZWYgdGVzdF9EYXRhUm93X3BhcnNlKHJhdywgZXhwZWN0ZWQsIGV4dHJhKToKKyAgICBw a3QgPSBiIkQiICsgc3RydWN0LnBhY2soIiFpIiwgbGVuKHJhdykgKyA0KSArIHJhdworICAgIHdp dGggaW8uQnl0ZXNJTyhwa3QpIGFzIHN0cmVhbToKKyAgICAgICAgYWN0dWFsID0gcHEzLlBxMy5w YXJzZV9zdHJlYW0oc3RyZWFtKQorCisgICAgICAgIGFzc2VydCBhY3R1YWwudHlwZSA9PSBwcTMu dHlwZXMuRGF0YVJvdworICAgICAgICBhc3NlcnQgYWN0dWFsLnBheWxvYWQgPT0gZXhwZWN0ZWQK KyAgICAgICAgYXNzZXJ0IHN0cmVhbS5yZWFkKCkgPT0gZXh0cmEKKworCitAcHl0ZXN0Lm1hcmsu cGFyYW1ldHJpemUoCisgICAgImZpZWxkcyxleHBlY3RlZCIsCisgICAgWworICAgICAgICBweXRl c3QucGFyYW0oCisgICAgICAgICAgICBkaWN0KCksCisgICAgICAgICAgICBiIlx4MDBceDAwIiwK KyAgICAgICAgICAgIGlkPSJubyBjb2x1bW5zIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0 LnBhcmFtKAorICAgICAgICAgICAgZGljdChjb2x1bW5zPVtOb25lLCBOb25lXSksCisgICAgICAg ICAgICBiIlx4MDBceDAyXHhGRlx4RkZceEZGXHhGRlx4RkZceEZGXHhGRlx4RkYiLAorICAgICAg ICAgICAgaWQ9Im51bGwgY29sdW1ucyIsCisgICAgICAgICksCisgICAgXSwKKykKK2RlZiB0ZXN0 X0RhdGFSb3dfYnVpbGQoZmllbGRzLCBleHBlY3RlZCk6CisgICAgYWN0dWFsID0gcHEzLlBxMy5i dWlsZChkaWN0KHR5cGU9cHEzLnR5cGVzLkRhdGFSb3csIHBheWxvYWQ9ZmllbGRzKSkKKworICAg IGV4cGVjdGVkID0gYiJEIiArIHN0cnVjdC5wYWNrKCIhaSIsIGxlbihleHBlY3RlZCkgKyA0KSAr IGV4cGVjdGVkCisgICAgYXNzZXJ0IGFjdHVhbCA9PSBleHBlY3RlZAorCisKK0BweXRlc3QubWFy ay5wYXJhbWV0cml6ZSgKKyAgICAicmF3LGV4cGVjdGVkLGV4Y2VwdGlvbiIsCisgICAgWworICAg ICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBiIkVYVEVSTkFMXHgwMFx4RkZceEZGXHhG Rlx4RkYiLAorICAgICAgICAgICAgZGljdChuYW1lPWIiRVhURVJOQUwiLCBsZW49LTEsIGRhdGE9 Tm9uZSksCisgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgaWQ9Im5vIGluaXRpYWwgcmVz cG9uc2UiLAorICAgICAgICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBi IkVYVEVSTkFMXHgwMFx4MDBceDAwXHgwMFx4MDJtZSIsCisgICAgICAgICAgICBkaWN0KG5hbWU9 YiJFWFRFUk5BTCIsIGxlbj0yLCBkYXRhPWIibWUiKSwKKyAgICAgICAgICAgIE5vbmUsCisgICAg ICAgICAgICBpZD0iaW5pdGlhbCByZXNwb25zZSIsCisgICAgICAgICksCisgICAgICAgIHB5dGVz dC5wYXJhbSgKKyAgICAgICAgICAgIGIiRVhURVJOQUxceDAwXHgwMFx4MDBceDAwXHgwMm1lZXh0 cmEiLAorICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgIFRlcm1pbmF0ZWRFcnJvciwKKyAg ICAgICAgICAgIGlkPSJleHRyYSBkYXRhIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBh cmFtKAorICAgICAgICAgICAgYiJFWFRFUk5BTFx4MDBceDAwXHgwMFx4MDBceEZGbWUiLAorICAg ICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgIFN0cmVhbUVycm9yLAorICAgICAgICAgICAgaWQ9 InVuZGVyZmxvdyIsCisgICAgICAgICksCisgICAgXSwKKykKK2RlZiB0ZXN0X1NBU0xJbml0aWFs UmVzcG9uc2VfcGFyc2UocmF3LCBleHBlY3RlZCwgZXhjZXB0aW9uKToKKyAgICBjdHggPSBjb250 ZXh0bGliLm51bGxjb250ZXh0KCkKKyAgICBpZiBleGNlcHRpb246CisgICAgICAgIGN0eCA9IHB5 dGVzdC5yYWlzZXMoZXhjZXB0aW9uKQorCisgICAgd2l0aCBjdHg6CisgICAgICAgIGFjdHVhbCA9 IHBxMy5TQVNMSW5pdGlhbFJlc3BvbnNlLnBhcnNlKHJhdykKKyAgICAgICAgYXNzZXJ0IGFjdHVh bCA9PSBleHBlY3RlZAorCisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgKKyAgICAiZmllbGRz LGV4cGVjdGVkIiwKKyAgICBbCisgICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGRp Y3QobmFtZT1iIkVYVEVSTkFMIiksCisgICAgICAgICAgICBiIkVYVEVSTkFMXHgwMFx4RkZceEZG XHhGRlx4RkYiLAorICAgICAgICAgICAgaWQ9Im5vIGluaXRpYWwgcmVzcG9uc2UiLAorICAgICAg ICApLAorICAgICAgICBweXRlc3QucGFyYW0oCisgICAgICAgICAgICBkaWN0KG5hbWU9YiJFWFRF Uk5BTCIsIGRhdGE9Tm9uZSksCisgICAgICAgICAgICBiIkVYVEVSTkFMXHgwMFx4RkZceEZGXHhG Rlx4RkYiLAorICAgICAgICAgICAgaWQ9Im5vIGluaXRpYWwgcmVzcG9uc2UgKGV4cGxpY2l0IE5v bmUpIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgZGlj dChuYW1lPWIiRVhURVJOQUwiLCBkYXRhPWIiIiksCisgICAgICAgICAgICBiIkVYVEVSTkFMXHgw MFx4MDBceDAwXHgwMFx4MDAiLAorICAgICAgICAgICAgaWQ9ImVtcHR5IHJlc3BvbnNlIiwKKyAg ICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAgICAgICAgICAgZGljdChuYW1lPWIi RVhURVJOQUwiLCBkYXRhPWIibWVAZXhhbXBsZS5jb20iKSwKKyAgICAgICAgICAgIGIiRVhURVJO QUxceDAwXHgwMFx4MDBceDAwXHgwRW1lQGV4YW1wbGUuY29tIiwKKyAgICAgICAgICAgIGlkPSJp bml0aWFsIHJlc3BvbnNlIiwKKyAgICAgICAgKSwKKyAgICAgICAgcHl0ZXN0LnBhcmFtKAorICAg ICAgICAgICAgZGljdChuYW1lPWIiRVhURVJOQUwiLCBsZW49MiwgZGF0YT1iIm1lQGV4YW1wbGUu Y29tIiksCisgICAgICAgICAgICBiIkVYVEVSTkFMXHgwMFx4MDBceDAwXHgwMFx4MDJtZUBleGFt cGxlLmNvbSIsCisgICAgICAgICAgICBpZD0iZGF0YSBvdmVyZmxvdyIsCisgICAgICAgICksCisg ICAgICAgIHB5dGVzdC5wYXJhbSgKKyAgICAgICAgICAgIGRpY3QobmFtZT1iIkVYVEVSTkFMIiwg bGVuPTE0LCBkYXRhPWIibWUiKSwKKyAgICAgICAgICAgIGIiRVhURVJOQUxceDAwXHgwMFx4MDBc eDAwXHgwRW1lIiwKKyAgICAgICAgICAgIGlkPSJkYXRhIHVuZGVyZmxvdyIsCisgICAgICAgICks CisgICAgXSwKKykKK2RlZiB0ZXN0X1NBU0xJbml0aWFsUmVzcG9uc2VfYnVpbGQoZmllbGRzLCBl eHBlY3RlZCk6CisgICAgYWN0dWFsID0gcHEzLlNBU0xJbml0aWFsUmVzcG9uc2UuYnVpbGQoZmll bGRzKQorICAgIGFzc2VydCBhY3R1YWwgPT0gZXhwZWN0ZWQKKworCitAcHl0ZXN0Lm1hcmsucGFy YW1ldHJpemUoCisgICAgInZlcnNpb24sZXhwZWN0ZWRfYnl0ZXMiLAorICAgIFsKKyAgICAgICAg cHl0ZXN0LnBhcmFtKCgzLCAwKSwgYiJceDAwXHgwM1x4MDBceDAwIiwgaWQ9InZlcnNpb24gMyIp LAorICAgICAgICBweXRlc3QucGFyYW0oKDEyMzQsIDU2NzkpLCBiIlx4MDRceGQyXHgxNlx4MmYi LCBpZD0iU1NMUmVxdWVzdCIpLAorICAgIF0sCispCitkZWYgdGVzdF9wcm90b2NvbCh2ZXJzaW9u LCBleHBlY3RlZF9ieXRlcyk6CisgICAgIyBNYWtlIHN1cmUgdGhlIGludGVnZXIgcmV0dXJuZWQg YnkgcHJvdG9jb2wgaXMgY29ycmVjdGx5IHNlcmlhbGl6ZWQgb24gdGhlCisgICAgIyB3aXJlLgor ICAgIGFzc2VydCBzdHJ1Y3QucGFjaygiIWkiLCBwcTMucHJvdG9jb2woKnZlcnNpb24pKSA9PSBl eHBlY3RlZF9ieXRlcworCisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgKKyAgICAiZW52dmFy LGZ1bmMsZXhwZWN0ZWQiLAorICAgIFsKKyAgICAgICAgKCJQR0hPU1QiLCBwcTMucGdob3N0LCAi bG9jYWxob3N0IiksCisgICAgICAgICgiUEdQT1JUIiwgcHEzLnBncG9ydCwgNTQzMiksCisgICAg ICAgICgiUEdVU0VSIiwgcHEzLnBndXNlciwgZ2V0cGFzcy5nZXR1c2VyKCkpLAorICAgICAgICAo IlBHREFUQUJBU0UiLCBwcTMucGdkYXRhYmFzZSwgInBvc3RncmVzIiksCisgICAgXSwKKykKK2Rl ZiB0ZXN0X2Vudl9kZWZhdWx0cyhtb25rZXlwYXRjaCwgZW52dmFyLCBmdW5jLCBleHBlY3RlZCk6 CisgICAgbW9ua2V5cGF0Y2guZGVsZW52KGVudnZhciwgcmFpc2luZz1GYWxzZSkKKworICAgIGFj dHVhbCA9IGZ1bmMoKQorICAgIGFzc2VydCBhY3R1YWwgPT0gZXhwZWN0ZWQKKworCitAcHl0ZXN0 Lm1hcmsucGFyYW1ldHJpemUoCisgICAgImVudnZhcnMsZnVuYyxleHBlY3RlZCIsCisgICAgWwor ICAgICAgICAoZGljdChQR0hPU1Q9Im90aGVyaG9zdCIpLCBwcTMucGdob3N0LCAib3RoZXJob3N0 IiksCisgICAgICAgIChkaWN0KFBHUE9SVD0iNjc4OSIpLCBwcTMucGdwb3J0LCA2Nzg5KSwKKyAg ICAgICAgKGRpY3QoUEdVU0VSPSJwb3N0Z3JlcyIpLCBwcTMucGd1c2VyLCAicG9zdGdyZXMiKSwK KyAgICAgICAgKGRpY3QoUEdEQVRBQkFTRT0idGVtcGxhdGUxIiksIHBxMy5wZ2RhdGFiYXNlLCAi dGVtcGxhdGUxIiksCisgICAgXSwKKykKK2RlZiB0ZXN0X2Vudihtb25rZXlwYXRjaCwgZW52dmFy cywgZnVuYywgZXhwZWN0ZWQpOgorICAgIGZvciBrLCB2IGluIGVudnZhcnMuaXRlbXMoKToKKyAg ICAgICAgbW9ua2V5cGF0Y2guc2V0ZW52KGssIHYpCisKKyAgICBhY3R1YWwgPSBmdW5jKCkKKyAg ICBhc3NlcnQgYWN0dWFsID09IGV4cGVjdGVkCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9weXRob24v dGxzLnB5IGIvc3JjL3Rlc3QvcHl0aG9uL3Rscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwLi4wNzVjMDJjMWNhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcHl0 aG9uL3Rscy5weQpAQCAtMCwwICsxLDE5NSBAQAorIworIyBDb3B5cmlnaHQgMjAyMSBWTXdhcmUs IEluYy4KKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IFBvc3RncmVTUUwKKyMKKworZnJvbSBj b25zdHJ1Y3QgaW1wb3J0ICoKKworIworIyBUTFMgMS4zCisjCisjIE1vc3Qgb2YgdGhlIHR5cGVz IGJlbG93IGFyZSB0cmFuc2NyaWJlZCBmcm9tIFJGQyA4NDQ2OgorIworIyAgICAgaHR0cHM6Ly90 b29scy5pZXRmLm9yZy9odG1sL3JmYzg0NDYKKyMKKworCitkZWYgX1ZlY3RvcihzaXplX2ZpZWxk LCBlbGVtZW50KToKKyAgICByZXR1cm4gUHJlZml4ZWQoc2l6ZV9maWVsZCwgR3JlZWR5UmFuZ2Uo ZWxlbWVudCkpCisKKworIyBBbGVydHMKKworQWxlcnRMZXZlbCA9IEVudW0oCisgICAgQnl0ZSwK KyAgICB3YXJuaW5nPTEsCisgICAgZmF0YWw9MiwKKykKKworQWxlcnREZXNjcmlwdGlvbiA9IEVu dW0oCisgICAgQnl0ZSwKKyAgICBjbG9zZV9ub3RpZnk9MCwKKyAgICB1bmV4cGVjdGVkX21lc3Nh Z2U9MTAsCisgICAgYmFkX3JlY29yZF9tYWM9MjAsCisgICAgZGVjcnlwdGlvbl9mYWlsZWRfUkVT RVJWRUQ9MjEsCisgICAgcmVjb3JkX292ZXJmbG93PTIyLAorICAgIGRlY29tcHJlc3Npb25fZmFp bHVyZT0zMCwKKyAgICBoYW5kc2hha2VfZmFpbHVyZT00MCwKKyAgICBub19jZXJ0aWZpY2F0ZV9S RVNFUlZFRD00MSwKKyAgICBiYWRfY2VydGlmaWNhdGU9NDIsCisgICAgdW5zdXBwb3J0ZWRfY2Vy dGlmaWNhdGU9NDMsCisgICAgY2VydGlmaWNhdGVfcmV2b2tlZD00NCwKKyAgICBjZXJ0aWZpY2F0 ZV9leHBpcmVkPTQ1LAorICAgIGNlcnRpZmljYXRlX3Vua25vd249NDYsCisgICAgaWxsZWdhbF9w YXJhbWV0ZXI9NDcsCisgICAgdW5rbm93bl9jYT00OCwKKyAgICBhY2Nlc3NfZGVuaWVkPTQ5LAor ICAgIGRlY29kZV9lcnJvcj01MCwKKyAgICBkZWNyeXB0X2Vycm9yPTUxLAorICAgIGV4cG9ydF9y ZXN0cmljdGlvbl9SRVNFUlZFRD02MCwKKyAgICBwcm90b2NvbF92ZXJzaW9uPTcwLAorICAgIGlu c3VmZmljaWVudF9zZWN1cml0eT03MSwKKyAgICBpbnRlcm5hbF9lcnJvcj04MCwKKyAgICB1c2Vy X2NhbmNlbGVkPTkwLAorICAgIG5vX3JlbmVnb3RpYXRpb249MTAwLAorICAgIHVuc3VwcG9ydGVk X2V4dGVuc2lvbj0xMTAsCispCisKK0FsZXJ0ID0gU3RydWN0KAorICAgICJsZXZlbCIgLyBBbGVy dExldmVsLAorICAgICJkZXNjcmlwdGlvbiIgLyBBbGVydERlc2NyaXB0aW9uLAorKQorCisKKyMg RXh0ZW5zaW9ucworCitFeHRlbnNpb25UeXBlID0gRW51bSgKKyAgICBJbnQxNnViLAorICAgIHNl cnZlcl9uYW1lPTAsCisgICAgbWF4X2ZyYWdtZW50X2xlbmd0aD0xLAorICAgIHN0YXR1c19yZXF1 ZXN0PTUsCisgICAgc3VwcG9ydGVkX2dyb3Vwcz0xMCwKKyAgICBzaWduYXR1cmVfYWxnb3JpdGht cz0xMywKKyAgICB1c2Vfc3J0cD0xNCwKKyAgICBoZWFydGJlYXQ9MTUsCisgICAgYXBwbGljYXRp b25fbGF5ZXJfcHJvdG9jb2xfbmVnb3RpYXRpb249MTYsCisgICAgc2lnbmVkX2NlcnRpZmljYXRl X3RpbWVzdGFtcD0xOCwKKyAgICBjbGllbnRfY2VydGlmaWNhdGVfdHlwZT0xOSwKKyAgICBzZXJ2 ZXJfY2VydGlmaWNhdGVfdHlwZT0yMCwKKyAgICBwYWRkaW5nPTIxLAorICAgIHByZV9zaGFyZWRf a2V5PTQxLAorICAgIGVhcmx5X2RhdGE9NDIsCisgICAgc3VwcG9ydGVkX3ZlcnNpb25zPTQzLAor ICAgIGNvb2tpZT00NCwKKyAgICBwc2tfa2V5X2V4Y2hhbmdlX21vZGVzPTQ1LAorICAgIGNlcnRp ZmljYXRlX2F1dGhvcml0aWVzPTQ3LAorICAgIG9pZF9maWx0ZXJzPTQ4LAorICAgIHBvc3RfaGFu ZHNoYWtlX2F1dGg9NDksCisgICAgc2lnbmF0dXJlX2FsZ29yaXRobXNfY2VydD01MCwKKyAgICBr ZXlfc2hhcmU9NTEsCispCisKK0V4dGVuc2lvbiA9IFN0cnVjdCgKKyAgICAiZXh0ZW5zaW9uX3R5 cGUiIC8gRXh0ZW5zaW9uVHlwZSwKKyAgICAiZXh0ZW5zaW9uX2RhdGEiIC8gUHJlZml4ZWQoSW50 MTZ1YiwgR3JlZWR5Qnl0ZXMpLAorKQorCisKKyMgQ2xpZW50SGVsbG8KKworCitjbGFzcyBfQ2lw aGVyU3VpdGVBZGFwdGVyKEFkYXB0ZXIpOgorICAgIGNsYXNzIF9oZXh0dXBsZSh0dXBsZSk6Cisg ICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBmIigweHtzZWxm WzBdOjAyWH0sIDB4e3NlbGZbMV06MDJYfSkiCisKKyAgICBkZWYgX2VuY29kZShzZWxmLCBvYmos IGNvbnRleHQsIHBhdGgpOgorICAgICAgICByZXR1cm4gYnl0ZXMob2JqKQorCisgICAgZGVmIF9k ZWNvZGUoc2VsZiwgb2JqLCBjb250ZXh0LCBwYXRoKToKKyAgICAgICAgYXNzZXJ0IGxlbihvYmop ID09IDIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2hleHR1cGxlKG9iaikKKworCitQcm90b2NvbFZl cnNpb24gPSBIZXgoSW50MTZ1YikKKworUmFuZG9tID0gSGV4KEJ5dGVzKDMyKSkKKworQ2lwaGVy U3VpdGUgPSBfQ2lwaGVyU3VpdGVBZGFwdGVyKEJ5dGVbMl0pCisKK0NsaWVudEhlbGxvID0gU3Ry dWN0KAorICAgICJsZWdhY3lfdmVyc2lvbiIgLyBQcm90b2NvbFZlcnNpb24sCisgICAgInJhbmRv bSIgLyBSYW5kb20sCisgICAgImxlZ2FjeV9zZXNzaW9uX2lkIiAvIFByZWZpeGVkKEJ5dGUsIEhl eChHcmVlZHlCeXRlcykpLAorICAgICJjaXBoZXJfc3VpdGVzIiAvIF9WZWN0b3IoSW50MTZ1Yiwg Q2lwaGVyU3VpdGUpLAorICAgICJsZWdhY3lfY29tcHJlc3Npb25fbWV0aG9kcyIgLyBQcmVmaXhl ZChCeXRlLCBHcmVlZHlCeXRlcyksCisgICAgImV4dGVuc2lvbnMiIC8gX1ZlY3RvcihJbnQxNnVi LCBFeHRlbnNpb24pLAorKQorCisjIFNlcnZlckhlbGxvCisKK1NlcnZlckhlbGxvID0gU3RydWN0 KAorICAgICJsZWdhY3lfdmVyc2lvbiIgLyBQcm90b2NvbFZlcnNpb24sCisgICAgInJhbmRvbSIg LyBSYW5kb20sCisgICAgImxlZ2FjeV9zZXNzaW9uX2lkX2VjaG8iIC8gUHJlZml4ZWQoQnl0ZSwg SGV4KEdyZWVkeUJ5dGVzKSksCisgICAgImNpcGhlcl9zdWl0ZSIgLyBDaXBoZXJTdWl0ZSwKKyAg ICAibGVnYWN5X2NvbXByZXNzaW9uX21ldGhvZCIgLyBIZXgoQnl0ZSksCisgICAgImV4dGVuc2lv bnMiIC8gX1ZlY3RvcihJbnQxNnViLCBFeHRlbnNpb24pLAorKQorCisjIEhhbmRzaGFrZQorCitI YW5kc2hha2VUeXBlID0gRW51bSgKKyAgICBCeXRlLAorICAgIGNsaWVudF9oZWxsbz0xLAorICAg IHNlcnZlcl9oZWxsbz0yLAorICAgIG5ld19zZXNzaW9uX3RpY2tldD00LAorICAgIGVuZF9vZl9l YXJseV9kYXRhPTUsCisgICAgZW5jcnlwdGVkX2V4dGVuc2lvbnM9OCwKKyAgICBjZXJ0aWZpY2F0 ZT0xMSwKKyAgICBjZXJ0aWZpY2F0ZV9yZXF1ZXN0PTEzLAorICAgIGNlcnRpZmljYXRlX3Zlcmlm eT0xNSwKKyAgICBmaW5pc2hlZD0yMCwKKyAgICBrZXlfdXBkYXRlPTI0LAorICAgIG1lc3NhZ2Vf aGFzaD0yNTQsCispCisKK0hhbmRzaGFrZSA9IFN0cnVjdCgKKyAgICAibXNnX3R5cGUiIC8gSGFu ZHNoYWtlVHlwZSwKKyAgICAibGVuZ3RoIiAvIEludDI0dWIsCisgICAgInBheWxvYWQiCisgICAg LyBTd2l0Y2goCisgICAgICAgIHRoaXMubXNnX3R5cGUsCisgICAgICAgIHsKKyAgICAgICAgICAg IEhhbmRzaGFrZVR5cGUuY2xpZW50X2hlbGxvOiBDbGllbnRIZWxsbywKKyAgICAgICAgICAgIEhh bmRzaGFrZVR5cGUuc2VydmVyX2hlbGxvOiBTZXJ2ZXJIZWxsbywKKyAgICAgICAgICAgICMgSGFu ZHNoYWtlVHlwZS5lbmRfb2ZfZWFybHlfZGF0YTogRW5kT2ZFYXJseURhdGEsCisgICAgICAgICAg ICAjIEhhbmRzaGFrZVR5cGUuZW5jcnlwdGVkX2V4dGVuc2lvbnM6IEVuY3J5cHRlZEV4dGVuc2lv bnMsCisgICAgICAgICAgICAjIEhhbmRzaGFrZVR5cGUuY2VydGlmaWNhdGVfcmVxdWVzdDogQ2Vy dGlmaWNhdGVSZXF1ZXN0LAorICAgICAgICAgICAgIyBIYW5kc2hha2VUeXBlLmNlcnRpZmljYXRl OiBDZXJ0aWZpY2F0ZSwKKyAgICAgICAgICAgICMgSGFuZHNoYWtlVHlwZS5jZXJ0aWZpY2F0ZV92 ZXJpZnk6IENlcnRpZmljYXRlVmVyaWZ5LAorICAgICAgICAgICAgIyBIYW5kc2hha2VUeXBlLmZp bmlzaGVkOiBGaW5pc2hlZCwKKyAgICAgICAgICAgICMgSGFuZHNoYWtlVHlwZS5uZXdfc2Vzc2lv bl90aWNrZXQ6IE5ld1Nlc3Npb25UaWNrZXQsCisgICAgICAgICAgICAjIEhhbmRzaGFrZVR5cGUu a2V5X3VwZGF0ZTogS2V5VXBkYXRlLAorICAgICAgICB9LAorICAgICAgICBkZWZhdWx0PUZpeGVk U2l6ZWQodGhpcy5sZW5ndGgsIEdyZWVkeUJ5dGVzKSwKKyAgICApLAorKQorCisjIFJlY29yZHMK KworQ29udGVudFR5cGUgPSBFbnVtKAorICAgIEJ5dGUsCisgICAgaW52YWxpZD0wLAorICAgIGNo YW5nZV9jaXBoZXJfc3BlYz0yMCwKKyAgICBhbGVydD0yMSwKKyAgICBoYW5kc2hha2U9MjIsCisg ICAgYXBwbGljYXRpb25fZGF0YT0yMywKKykKKworUGxhaW50ZXh0ID0gU3RydWN0KAorICAgICJ0 eXBlIiAvIENvbnRlbnRUeXBlLAorICAgICJsZWdhY3lfcmVjb3JkX3ZlcnNpb24iIC8gUHJvdG9j b2xWZXJzaW9uLAorICAgICJsZW5ndGgiIC8gSW50MTZ1YiwKKyAgICAiZnJhZ21lbnQiIC8gRml4 ZWRTaXplZCh0aGlzLmxlbmd0aCwgR3JlZWR5Qnl0ZXMpLAorKQotLSAKMi4yNS4xCgo= --_008_d1b467a78e0e36ed85a09adf979d04cf124a9d4bcamelvmwarecom_--