Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r5Ai7-00C9KK-K9 for pgsql-hackers@arkaria.postgresql.org; Mon, 20 Nov 2023 20:17:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1r5Ai4-00AOlQ-8c for pgsql-hackers@arkaria.postgresql.org; Mon, 20 Nov 2023 20:17:32 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r5Ai3-00AOlH-GD for pgsql-hackers@lists.postgresql.org; Mon, 20 Nov 2023 20:17:31 +0000 Received: from mail-vi1eur04on2097.outbound.protection.outlook.com ([40.107.8.97] helo=EUR04-VI1-obe.outbound.protection.outlook.com) by magus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r5Ahy-007UGt-AV for pgsql-hackers@lists.postgresql.org; Mon, 20 Nov 2023 20:17:30 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hnDKkQIu/aINwSVqAgVuPpxBm2DTStKnea6XYHDTIBonDVr3ezIuSPjSrYg8x8h72Sgm93od/gUoWl3G/ZKk7t9tMWlcwkhpxrJwgDUzNpzNZqx6asXNo7ynAZwuWoN9OF2pDlQsQbLMhSg5U1QlfPXVpako8xaeapKUVOBjnH4HODB+gmDLnp54o96TKU2cbp24c/hQFoh6Poyjj9DrRCDejBncW3ZZldTd76DgGb+fxTAYGcOlsFaloXLRZka+kUTYoBmxZlGbQj2ab/M1/8CBLuE0E4mHLect82hAhVP30OL2I/GkmDM0/0AOMtpJYXEUH6JLEoJWGMlopqmAcA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=1iLQ5nuXfWk9FguiQH3pXvQwCMfzD1lAzlLzTkOhzj8=; b=UTGa/HTs1NYQXsDwy0NykiCWqt/K99gj7yqVNFPM/J8DIY3AzYGYpJqRenKvh2Qkk/FJuyrAo5R6Xp+mG2kChrNpA2SrOV0XBn+fdJpNxV2BX/sS1JUFQZZQhAqYnq5aiFzfYUPak6eXjDf4ldANJjQU2dZkYD/thg9sB0Fx1Ei7ervLPBoVHrn1N4Ss4oKe0I4TPM16o8JSmW7cIqjtcSKE4K1nBDHRmBY6UUHNG148iQwwcdftU27Hi2zkkkuWka0nlJTdHM4T7zc/QFjrb4/0dst+rjMa8Wiybpcd/TkwFT9TfdasVTNoGNTkVth/ESy6gbdSsCr5Yi2r2PCUTQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ulb.be; dmarc=pass action=none header.from=ulb.be; dkim=pass header.d=ulb.be; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ulb.be; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1iLQ5nuXfWk9FguiQH3pXvQwCMfzD1lAzlLzTkOhzj8=; b=s4B78X4yHm9CVFh3qg1ytOno0QYmxncFx93/n5psab/oCUW0JtejDXI4uEd5WAbtKUhIBLM453TyMU0W8O1GIFaQS544Hjcqr0q7spXTXwuYJRe491v3g8IWgkXc3Wzrdv0G3iGLBGxgbSILzuzy+ef4Asn05VuMFzg3PVRn3IU= Received: from DB8P190MB0731.EURP190.PROD.OUTLOOK.COM (2603:10a6:10:125::14) by DB9P190MB1532.EURP190.PROD.OUTLOOK.COM (2603:10a6:10:244::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7002.27; Mon, 20 Nov 2023 20:17:22 +0000 Received: from DB8P190MB0731.EURP190.PROD.OUTLOOK.COM ([fe80::117e:a981:6686:c9ad]) by DB8P190MB0731.EURP190.PROD.OUTLOOK.COM ([fe80::117e:a981:6686:c9ad%7]) with mapi id 15.20.7002.027; Mon, 20 Nov 2023 20:17:22 +0000 From: Schoemans Maxime To: Tom Lane CC: Damir Belyalov , PostgreSQL Hackers , SAKR Mahmoud , Diogo Repas , LUO Zhicheng , Tomas Vondra , Andrey Lepikhov Subject: Re: Implement missing join selectivity estimation for range types Thread-Topic: Implement missing join selectivity estimation for range types Thread-Index: AQHZK2HTFElV4cAAG0qhvSWvkCiFBa6keKmAgAAVOQCAAtFcgIACBB+AgAYni4CAVKFYAICOo58AgABu2wCAG78GAIAAfkQAgMyTtICACXamgA== Date: Mon, 20 Nov 2023 20:17:22 +0000 Message-ID: References: <8afecd87-d1e5-241c-5e3e-75e1c62c279b@enterprisedb.com> <1bc5e1e4-380b-213d-6e6a-d5e8f7f0c7f5@enterprisedb.com> <84ffb566-8038-ab35-c841-7a5e5728a247@enterprisedb.com> <525ea957-88ff-e2c6-2975-474c849aa234@ulb.be> <48a78946-f380-a279-e75f-711846e509f8@ulb.be> <4c443cf6-96af-0953-fd5b-bd2b5c0c6f00@ulb.be> <2516071.1699991181@sss.pgh.pa.us> In-Reply-To: <2516071.1699991181@sss.pgh.pa.us> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=ulb.be; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DB8P190MB0731:EE_|DB9P190MB1532:EE_ x-ms-office365-filtering-correlation-id: 03b48feb-a10a-4518-95cf-08dbea05b47f x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: GkDcUv7ryC3FGkPZaGuc/R+e7ixcYBJ/26vM36nEmy2ffbP7tlnmv+m2fPpJcdQ4InS0oXcJIvBPrT6yhCrI7PH3Corn8I5vQBtmuXP1xhNFCrA8yV6g/EI6pk+xrt1bfPARIKgun10R17oftV6j5J/FroyI45LvTBHp2LLopex7IL/UlH0Rz8nNu7xrp8oS3R9zlG3LZoeuUlfpFw06nNXym+r+uT4KzaYEMrdTw3COYpopfy4aS9xNGGyBs2Px6yCOA4jetaW7UsXqpeT7sAnnjvArrguLkoO19Bx84clxsZvpdyYtK0iHcKscbMVXO78oar1aijofLK1OVn2xqHYE9PQLR+3dLOm97NGD1Kl84kJ/NhStclrAqtSHcFu7DL2Lma4I39CcCogVKmOZUzx8Kq+dCWefQYfoDKYIEkEizlPBUpYRGv4+iN6n2DRX1tUtPjkE0FGnnthQ3+P5VcKcpmImJ/iS2G5g8gMKKF1ADhFqELvSNlTqVA5d7Y5v3rnOMc+/JgTgqg/Oa3LzA7YeZ9nVOGWKMw5x3YcpUK68P+Z41GNmxkx+yiuO3UFrQAd/bdmvP9I7jMy+0yiQUuUzLBqjNY8DkejcNTUDr32479M0qqsYZBx+jWMIqBvNE9lRCrdY+/54KlluJoM9Ug== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB8P190MB0731.EURP190.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230031)(346002)(376002)(136003)(39860400002)(396003)(366004)(230922051799003)(451199024)(64100799003)(186009)(1800799012)(66899024)(316002)(786003)(6916009)(91956017)(54906003)(66946007)(66476007)(64756008)(66556008)(76116006)(66446008)(36756003)(53546011)(6512007)(71200400001)(6506007)(2616005)(38070700009)(6486002)(478600001)(38100700002)(31696002)(99936003)(122000001)(86362001)(2906002)(31686004)(5660300002)(8936002)(4326008)(8676002)(41300700001)(45980500001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?aStMcDNJbXVKRFhaeko1ZmhHdHY1RHNhTWJzNmQzTXlDR3hPYVpTUjVTZk5Z?= =?utf-8?B?bDROT3NLbWZha21hQ2pLWDJwV3V3dzRvblpkcjZEZUZOR09lOCtDazc2SEZm?= =?utf-8?B?d1VPYWVKc1UyNTFnZWsxQXhYdUlZZlU4UVpNK3FsM011QU1LNlZOc3JZYnpH?= =?utf-8?B?NXlLUjljK2hWNjlaVy9JUFFsTE9PdFdDM3NsakVVcGw2TXRpQ2hUQkVVMnR6?= =?utf-8?B?QmZNaTZuRTJtY1gwZ01VKzIxYWlNa0M4ZkVGcTh1dnRCODFCOHNDL1RxS0dX?= =?utf-8?B?aTBvVUlwbEQzaEZBWWxiUnE2YThPQitwQTV5SzZBTHFHVkVLcktaUm42VXBw?= =?utf-8?B?emVWYXQ1eEFjakNONFg5dkwvOFZBUnRaa2I0Q1N6dVcvL25XbEE1TlhuaHpG?= =?utf-8?B?TzBoQm85eUZlT1ZTdHpWQzFFemt4L3k3SWJBWHhqRStnZVlNd1FWZmJ4T0Nu?= =?utf-8?B?MXFrdVlVWmF5UjUyWGMyOEkvOEpFYVB1RUxpSUExN0orTk8rZlBuZWNwR3Rq?= =?utf-8?B?blE4enBoL09ibWJTdW1vN1ozQW5LRW1NUFFqY2szYy84SHFCNHRVZGxZTktk?= =?utf-8?B?Qys0YjU3VEpDYmx6SVVjcm44WndwVTN0T0NHaGtxc2QzbEZobjBDaVJsZllY?= =?utf-8?B?ODltR0hKNktoZHhaTGcrWisycXJRQzgzVVNIMHdHaFRHTllOM3BxQnZvNmhp?= =?utf-8?B?c2xyOCtZdlJzcTlqRGkzSHU0dzhoV2x4U094ekNmdVE1dHBjaG1iMS92ZXND?= =?utf-8?B?WVBBZUcyMXdZMHN2dVpLVEFVNXFlSFF5YkVvaTZ4RVJkTkV5YXhGWWRtMzQv?= =?utf-8?B?SGZ2ZTQvV1V0SkczOTNYaXNqMmpSRTNZZzc3akRRK1JuNi9IUk1BRWFFWFkr?= =?utf-8?B?aWZxMmIySDFqMWppUXZJWnlUYkM1K20wV2IxeVRHYXEwUUl2MWVHZXlqS0N4?= =?utf-8?B?aEJKZkR0SThmTjVrRWc0WERBYk0vVG1FS2pTZFRlUjJ2MVpZT3Z2TmRuY015?= =?utf-8?B?SzNGb09aOU95dXlEZ201OWs4YUtQQnpMOHZ5eVlVaTVsOVBaSm5lZnFCQ3pv?= =?utf-8?B?cUs1L09vY0dxNnB1aTcvLzEweGJDcDFONVN0K0FwSEJER0hYYXNaRDcvNndm?= =?utf-8?B?dENxVjJjYytENUgwajBUdkcvVFR6U3g0RzVrVCs0ZVlLSlVEbURnTExYQVYv?= =?utf-8?B?SGRKTnVGai9BNTJxU1N0MkdNM2NLdTRpWlhnWnZIaHJzYW5yMlZSSWJ5TDBq?= =?utf-8?B?TnYrNEJqOEZqcHpxcDAvaGtyUHhvSHFKZEhGd1hZU2RwWThLbW4wUFdiWFh4?= =?utf-8?B?RUlEZjFsUytJOXJsWjMwdm9sS0RLb21QT0FNdjBOV2FmNVVBVGczb3BzMk1K?= =?utf-8?B?U2hMRXd3ZzBoOGt5YjNuWXFsR05IWkN2WmZuVVQ4cjBudU9QSm5icEdEK01C?= =?utf-8?B?eVlqcXRxdDhlSzhIb1Z5clVtQSs2VnVsNUdwWFYvK0QxNkZ5eG5KMWJXcUJp?= =?utf-8?B?aHhZZkpPVzBOVjNMWkI3blJiaXBtZ3VxK1REOHh1alRyV3NQYzJ1UnhNYlZK?= =?utf-8?B?cyt2SHQwN1FCRndvMnhLSVZ6VWduZzNGa3NUNEFDb001NzhtZi9WbmphNkgz?= =?utf-8?B?TUpVN2JIMmJHTHA3RXNUY3F5SkUzK3NDQ2lHcUY0VEoxM3J0Q2RkUzFQNmVN?= =?utf-8?B?VG9ZTlRxam9ISFZFL3F3alMyZG9Td3BncXYwTTIrSzZNM1UzbnNlS0NFT0l6?= =?utf-8?B?ODNHbysrVU9KbzZ5MHZaWTRObVRUUjQ2SXByR0hXRlBaV2ZUMVp5bWJ1b0Zs?= =?utf-8?B?YXZCdDAvUmtNc2RPMmJPUmZWTHpKMTk2c0ZsR0tSMVhmVnZReFJXZDVBUlQ0?= =?utf-8?B?a0tMakFTcXZlSEl2SHhpZGN5V1E1V001QXkyZVRwQjBJMEhuV212VDUybjUx?= =?utf-8?B?c28vSW82ejZwMGhuMjhpTE9CY1hmTFRyc1N4TUNjQXB1MmJwZ041TjduQUY5?= =?utf-8?B?ZVBzUGVTaHJMMjZvMzIra0xvc2xjVjBaazdYRUNFUEpRdSsvR0c4M0tZMkxv?= =?utf-8?B?VXFqNnBFR2FGLzJMbWxKUGd2Q1BvellTMGZEQVo2L2hHL0p0TzI1bUsyS0VS?= =?utf-8?B?djdld0dUeHdHZEt4REhtem50aDBPWG1mYnZqSTFpdEs1KzYyNy9taTR4SER1?= =?utf-8?Q?HT/oeQdZb98CH3E+J+E5JD3nMbHoN2lcY/qs55GQawBc?= Content-Type: multipart/mixed; boundary="_002_f530d708bcb41487f25e248ea101e571ulbbe_" MIME-Version: 1.0 X-OriginatorOrg: ulb.be X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DB8P190MB0731.EURP190.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 03b48feb-a10a-4518-95cf-08dbea05b47f X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Nov 2023 20:17:22.6913 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 30a5145e-75bd-4212-bb02-8ff9c0ea4ae9 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: pW8VIzCePuNjYoJYIw0Y8qbXLW9JY7cQAJHbYLq4OM4p/7zJo5s4JYsbUC7PMol2HrwlsT4Rd96w/PD74AmxvA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9P190MB1532 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_002_f530d708bcb41487f25e248ea101e571ulbbe_ Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 T24gMTQvMTEvMjAyMyAyMDo0NiwgVG9tIExhbmUgd3JvdGU6DQo+IEkgdG9vayBhIGJyaWVmIGxv b2sgdGhyb3VnaCB0aGlzIHZlcnkgaW50ZXJlc3Rpbmcgd29yay4gIEkgY29uY3VyDQo+IHdpdGgg VG9tYXMgdGhhdCBpdCBmZWVscyBhIGxpdHRsZSBvZGQgdGhhdCByYW5nZSBqb2luIHNlbGVjdGl2 aXR5DQo+IHdvdWxkIGJlY29tZSBzbWFydGVyIHRoYW4gc2NhbGFyIGluZXF1YWxpdHkgam9pbiBz ZWxlY3Rpdml0eSwgYW5kDQo+IHRoYXQgd2UgcmVhbGx5IG91Z2h0IHRvIHByaW9yaXRpemUgYXBw bHlpbmcgdGhlc2UgbWV0aG9kcyB0byB0aGF0DQo+IGNhc2UuICBTdGlsbCwgdGhhdCdzIGEgcG9v ciByZWFzb24gdG8gbm90IHRha2UgdGhlIHBhdGNoLg0KDQpJbmRlZWQsIHdlIHN0YXJ0ZWQgd2l0 aCByYW5nZXMgYXMgdGhpcyB3YXMgdGhlIHNpbXBsZXIgY2FzZSAobm8gTUNWKSBhbmQgDQp3YXMg dGhlIHRvcGljIG9mIGEgY291cnNlIHByb2plY3QuDQpUaGUgaWRlYSBpcyB0byBsYXRlciB3cml0 ZSBhIHNlY29uZCBwYXRjaCB0aGF0IGFwcGxpZXMgdGhlc2UgaWRlYXMgdG8gDQpzY2FsYXIgaW5l cXVhbGl0eSB3aGlsZSBhbHNvIGhhbmRsaW5nIE1DVidzIGNvcnJlY3RseS4NCg0KPiBJIGFsc28g YWdyZWUgd2l0aCB0aGUgdXB0aHJlYWQgY3JpdGljaXNtIHRoYXQgaGF2aW5nIHR3byBpZGVudGlj YWwNCj4gZnVuY3Rpb25zIGluIGRpZmZlcmVudCBzb3VyY2UgZmlsZXMgd2lsbCBiZSBhIG1haW50 ZW5hbmNlIG5pZ2h0bWFyZS4NCj4gRG9uJ3QgZG8gaXQuICBXaGVuIGFuZCBpZiB0aGVyZSdzIGEg cmVhc29uIGZvciB0aGUgYmVoYXZpb3IgdG8NCj4gZGl2ZXJnZSBiZXR3ZWVuIHRoZSByYW5nZSBh bmQgbXVsdGlyYW5nZSBjYXNlcywgaXQnZCBsaWtlbHkgYmUNCj4gYmV0dGVyIHRvIGhhbmRsZSB0 aGF0IGJ5IHBhc3NpbmcgaW4gYSBmbGFnIHRvIHNheSB3aGF0IHRvIGRvLg0KDQpUaGUgZHVwbGlj YXRpb24gaXMgaW5kZWVkIG5vdCBpZGVhbC4gSG93ZXZlciwgdGhlcmUgYXJlIGFscmVhZHkgOCBv dGhlciANCmR1cGxpY2F0ZSBmdW5jdGlvbnMgYmV0d2VlbiB0aGUgdHdvIGZpbGVzLg0KSSB3b3Vs ZCB0aHVzIHN1Z2dlc3QgdG8gbGVhdmUgdGhlIGR1cGxpY2F0aW9uIGluIHRoaXMgcGF0Y2ggYW5k IGNyZWF0ZSBhIA0Kc2Vjb25kIG9uZSB0aGF0IHJlbW92ZXMgYWxsIGR1cGxpY2F0aW9uIGZyb20g dGhlIHR3byBmaWxlcywgaW5zdGVhZCBvZiANCmp1c3QgcmVtb3ZpbmcgdGhlIGR1cGxpY2F0aW9u IGZvciBvdXIgbmV3IGZ1bmN0aW9uLg0KV2hhdCBhcmUgeW91ciB0aG91Z2h0cyBvbiB0aGlzPyBJ ZiB3ZSBkbyB0aGlzLCBzaG91bGQgdGhlIGZ1bmN0aW9uIA0KZGVmaW5pdGlvbnMgZ28gaW4gcmFu Z2V0eXBlcy5oIG9yIHNob3VsZCB3ZSBjcmVhdGUgYSBuZXcgDQpyYW5nZXR5cGVzX3NlbGZ1bmNz LmggaGVhZGVyPw0KDQo+IEJ1dCBteSByZWFsIHVuaGFwcGluZXNzIHdpdGggdGhlIHBhdGNoIGFz LXN1Ym1pdHRlZCBpcyB0aGUgdGVzdCBjYXNlcywNCj4gd2hpY2ggcmVxdWlyZSByb3djb3VudCBl c3RpbWF0ZXMgdG8gYmUgcmVwcm9kdWNlZCBleGFjdGx5Lg0KDQo+IFdlIG5lZWQgYSBtb3JlIGZv cmdpdmluZyB0ZXN0IG1ldGhvZC4gVXN1YWxseSB0aGUNCj4gYXBwcm9hY2ggaXMgdG8gc2V0IHVw IGEgdGVzdCBjYXNlIHdoZXJlIHRoZSBpbXByb3ZlZCBhY2N1cmFjeSBvZg0KPiB0aGUgZXN0aW1h dGUgY2hhbmdlcyB0aGUgcGxhbm5lcidzIGNob2ljZSBvZiBwbGFuIGNvbXBhcmVkIHRvIHdoYXQN Cj4geW91IGdvdCBiZWZvcmUsIHNpbmNlIHRoYXQgd2lsbCBub3JtYWxseSBub3QgYmUgdG9vIHBy b25lIHRvIGNoYW5nZQ0KPiBmcm9tIHZhcmlhdGlvbnMgb2YgYSBwZXJjZW50IG9yIHR3byBpbiB0 aGUgZXN0aW1hdGVzLg0KDQpJIGhhdmUgY2hhbmdlZCB0aGUgdGVzdCBtZXRob2QgdG8gcHJvZHVj ZSBxdWVyeSBwbGFucyBmb3IgYSAzLXdheSByYW5nZSANCmpvaW4uDQpUaGUgcGxhbnMgZm9yIHRo ZSBkaWZmZXJlbnQgb3BlcmF0b3JzIGRpZmZlciBkdWUgdG8gdGhlIGNvbXB1dGVkIA0Kc2VsZWN0 aXZpdHkgZXN0aW1hdGlvbiwgd2hpY2ggd2FzIG5vdCB0aGUgY2FzZSBiZWZvcmUgdGhpcyBwYXRj aC4NCg0KUmVnYXJkcywNCk1heGltZSBTY2hvZW1hbnM= --_002_f530d708bcb41487f25e248ea101e571ulbbe_ Content-Type: text/x-patch; name="v3-0001-Join-Selectivity-Estimation-for-Range-types.patch" Content-Description: v3-0001-Join-Selectivity-Estimation-for-Range-types.patch Content-Disposition: attachment; filename="v3-0001-Join-Selectivity-Estimation-for-Range-types.patch"; size=62682; creation-date="Mon, 20 Nov 2023 20:17:22 GMT"; modification-date="Mon, 20 Nov 2023 20:17:22 GMT" Content-ID: <1C337203C38C504D9BB57D8463E2D8C6@EURP190.PROD.OUTLOOK.COM> Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tdWx0aXJhbmdldHlwZXNfc2VsZnVu Y3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tdWx0aXJhbmdldHlwZXNfc2VsZnVuY3MuYwpp bmRleCBjZWZjNDcxMGZkLi5jNjcwZDIyNWEwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9hZHQvbXVsdGlyYW5nZXR5cGVzX3NlbGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L211bHRpcmFuZ2V0eXBlc19zZWxmdW5jcy5jCkBAIC0xMzM1LDMgKzEzMzUsNTU4IEBAIGNh bGNfaGlzdF9zZWxlY3Rpdml0eV9jb250YWlucyhUeXBlQ2FjaGVFbnRyeSAqdHlwY2FjaGUsCiAK IAlyZXR1cm4gc3VtX2ZyYWM7CiB9CisKKy8qCisgKiBUaGlzIGlzIGEgdXRpbGl0eSBmdW5jdGlv biB1c2VkIHRvIGVzdGltYXRlIHRoZSBqb2luIHNlbGVjdGl2aXR5IG9mCisgKiByYW5nZSBhdHRy aWJ1dGVzIHVzaW5nIHJhbmdlYm91bmQgaGlzdG9ncmFtIHN0YXRpc3RpY3MgYXMgZGVzY3JpYmVk CisgKiBpbiB0aGlzIHBhcGVyOgorICoKKyAqIERpb2dvIFJlcGFzLCBaaGljaGVuZyBMdW8sIE1h eGltZSBTY2hvZW1hbnMgYW5kIE1haG1vdWQgU2FrciwgMjAyMgorICogU2VsZWN0aXZpdHkgRXN0 aW1hdGlvbiBvZiBJbmVxdWFsaXR5IEpvaW5zIEluIERhdGFiYXNlcworICogaHR0cHM6Ly9kb2ku b3JnLzEwLjQ4NTUwL2FyWGl2LjIyMDYuMDczOTYKKyAqCisgKiBUaGUgYXR0cmlidXRlcyBiZWlu ZyBqb2luZWQgd2lsbCBiZSB0cmVhdGVkIGFzIHJhbmRvbSB2YXJpYWJsZXMKKyAqIHRoYXQgZm9s bG93IGEgZGlzdHJpYnV0aW9uIG1vZGVsZWQgYnkgYSBQcm9iYWJpbGl0eSBEZW5zaXR5IEZ1bmN0 aW9uIChQREYpLgorICogTGV0IHRoZSB0d28gYXR0cmlidXRlcyBiZSBkZW5vdGVkIFgsIFkuCisg KiBUaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZSBwcm9iYWJpbGl0eSBQKFggPCBZKS4KKyAqIE5vdGUg dGhhdCB0aGUgUERGcyBvZiB0aGUgdHdvIHZhcmlhYmxlcyBjYW4gZWFzaWx5IGJlIG9idGFpbmVk CisgKiBmcm9tIHRoZWlyIGJvdW5kcyBoaXN0b2dyYW0sIHJlc3BlY3RpdmVseSBoaXN0MSBhbmQg aGlzdDIgLgorICoKKyAqIExldCB0aGUgUERGIG9mIFgsIFkgYmUgZGVub3RlZCBhcyBmX1gsIGZf WS4KKyAqIFRoZSBwcm9iYWJpbGl0eSBQKFggPCBZKSBjYW4gYmUgZm9ybWFsaXplZCBhcyBmb2xs b3dzOgorICogUChYIDwgWSk9IGludGVncmFsXy1pbmZeaW5mKCBpbnRlZ3JhbF8taW5mXnkgKCBm X1goeCkgKiBmX1koeSkgZHggZHkgKSApCisgKiAgICAgICAgICAgICAgICA9IGludGVncmFsXy1p bmZeaW5mKCBGX1goeSkgKiBmX1koeSkgZHkgKQorICogd2hlcmUgRl9YKHkpIGRlbm90ZSB0aGUg Q3VtdWxhdGl2ZSBEaXN0cmlidXRpb24gRnVuY3Rpb24gb2YgWCBhdCB5LgorICogTm90ZSB0aGF0 IEZfWCBpcyB0aGUgc2VsZWN0aXZpdHkgZXN0aW1hdGlvbiAobm9uLWpvaW4pLAorICogd2hpY2gg aXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlIGZ1bmN0aW9uIGNhbGNfaGlzdF9zZWxlY3Rpdml0eV9z Y2FsYXIuCisgKgorICogTm93IGdpdmVuIHRoZSBoaXN0b2dyYW1zIG9mIHRoZSB0d28gYXR0cmli dXRlcyBYLCBZLCB3ZSBub3RlIHRoZSBmb2xsb3dpbmc6CisgKiAtIFRoZSBQREYgb2YgWSBpcyBh IHN0ZXAgZnVuY3Rpb24KKyAqIChjb25zdGFudCBwaWVjZS13aXNlLCB3aGVyZSBlYWNoIHBpZWNl IGlzIGRlZmluZWQgaW4gYSBiaW4gb2YgWSdzIGhpc3RvZ3JhbSkKKyAqIC0gVGhlIENERiBvZiBY IGlzIGxpbmVhciBwaWVjZS13aXNlCisgKiAgIChlYWNoIHBpZWNlIGlzIGRlZmluZWQgaW4gYSBi aW4gb2YgWCdzIGhpc3RvZ3JhbSkKKyAqIFRoaXMgbGVhZHMgdG8gdGhlIGNvbmNsdXNpb24gdGhh dCB0aGVpciBwcm9kdWN0CisgKiAodXNlZCB0byBjYWxjdWxhdGUgdGhlIGVxdWF0aW9uIGFib3Zl KSBpcyBhbHNvIGxpbmVhciBwaWVjZS13aXNlLgorICogQSBuZXcgcGllY2Ugc3RhcnRzIHdoZW5l dmVyIGVpdGhlciB0aGUgYmluIG9mIFggb3IgdGhlIGJpbiBvZiBZIGNoYW5nZXMuCisgKiBCeSBw YXJhbGxlbCBzY2FubmluZyB0aGUgdHdvIHJhbmdlYm91bmQgaGlzdG9ncmFtcyBvZiBYIGFuZCBZ LAorICogd2UgZXZhbHVhdGUgb25lIHBpZWNlIG9mIHRoZSByZXN1bHQgYmV0d2VlbiBldmVyeSB0 d28gY29uc2VjdXRpdmUgcmFuZ2Vib3VuZHMKKyAqIGluIHRoZSB1bmlvbiBvZiB0aGUgdHdvIGhp c3RvZ3JhbXMuCisgKgorICogR2l2ZW4gdGhhdCB0aGUgcHJvZHVjdCBGX1ggKiBmX3kgaXMgbGlu ZWFyIGluIHRoZSBpbnRlcnZhbAorICogYmV0d2VlbiBldmVyeSB0d28gY29uc2VjdXRpdmUgcmFu Z2Vib3VuZHMsIGxldCB0aGVtIGJlIGRlbm90ZWQgcHJldiwgY3VyLAorICogaXQgY2FuIGJlIHNo b3duIHRoYXQgdGhlIGFib3ZlIGZvcm11bGEgY2FuIGJlIGRpc2NyZXRpemVkIGludG8gdGhlIGZv bGxvd2luZzoKKyAqIFAoWCA8IFkpID0KKyAqICAgMC41ICogc3VtXzBee24rbS0xfSAoICggRl9Y KHByZXYpICsgRl9YKGN1cikgKSAqICggRl9ZKGN1cikgLSBGX1kocHJldikgKSApCisgKiB3aGVy ZSBuLCBtIGFyZSB0aGUgbGVuZ3RocyBvZiB0aGUgdHdvIGhpc3RvZ3JhbXMuCisgKgorICogQXMg c3VjaCwgaXQgaXMgcG9zc2libGUgdG8gZnVsbHkgY29tcHV0ZSB0aGUgam9pbiBzZWxlY3Rpdml0 eQorICogYXMgYSBzdW1tYXRpb24gb2YgQ0RGcywgaXRlcmF0aW5nIG92ZXIgdGhlIGJvdW5kcyBv ZiB0aGUgdHdvIGhpc3RvZ3JhbXMuCisgKiBUaGlzIG1heGltaXplcyB0aGUgY29kZSByZXVzZSwg c2luY2UgdGhlIENERiBpcyBjb21wdXRlZCB1c2luZworICogdGhlIGNhbGNfaGlzdF9zZWxlY3Rp dml0eV9zY2FsYXIgZnVuY3Rpb24sIHdoaWNoIGlzIHRoZSBmdW5jdGlvbiB1c2VkCisgKiBmb3Ig c2VsZWN0aXZpdHkgZXN0aW1hdGlvbiAobm9uLWpvaW5zKS4KKyAqCisgKi8KK3N0YXRpYyBkb3Vi bGUKK2NhbGNfaGlzdF9qb2luX3NlbGVjdGl2aXR5KFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwK KwkJCQkJCSAgIGNvbnN0IFJhbmdlQm91bmQgKmhpc3QxLCBpbnQgbmhpc3QxLAorCQkJCQkJICAg Y29uc3QgUmFuZ2VCb3VuZCAqaGlzdDIsIGludCBuaGlzdDIpCit7CisJaW50CQkJaSwKKwkJCQlq OworCWRvdWJsZQkJc2VsZWN0aXZpdHksCisJCQkJY3VyX3NlbDEsCisJCQkJY3VyX3NlbDIsCisJ CQkJcHJldl9zZWwxLAorCQkJCXByZXZfc2VsMjsKKwlSYW5nZUJvdW5kCWN1cl9zeW5jOworCisJ LyoKKwkgKiBIaXN0b2dyYW1zIHdpbGwgbmV2ZXIgYmUgZW1wdHkuIEluIGZhY3QsIGEgaGlzdG9n cmFtIHdpbGwgbmV2ZXIgaGF2ZQorCSAqIGxlc3MgdGhhbiAyIHZhbHVlcyAoMSBiaW4pCisJICov CisJQXNzZXJ0KG5oaXN0MSA+IDEpOworCUFzc2VydChuaGlzdDIgPiAxKTsKKworCS8qIEZhc3Qt Zm9yd2FyZHMgaSBhbmQgaiB0byBzdGFydCBvZiBpdGVyYXRpb24gKi8KKwlmb3IgKGkgPSAwOyBy YW5nZV9jbXBfYm91bmRfdmFsdWVzKHR5cGNhY2hlLCAmaGlzdDFbaV0sICZoaXN0MlswXSkgPCAw OyBpKyspOworCWZvciAoaiA9IDA7IHJhbmdlX2NtcF9ib3VuZF92YWx1ZXModHlwY2FjaGUsICZo aXN0MltqXSwgJmhpc3QxWzBdKSA8IDA7IGorKyk7CisKKwlpZiAocmFuZ2VfY21wX2JvdW5kX3Zh bHVlcyh0eXBjYWNoZSwgJmhpc3QxW2ldLCAmaGlzdDJbal0pIDwgMCkKKwkJY3VyX3N5bmMgPSBo aXN0MVtpKytdOworCWVsc2UgaWYgKHJhbmdlX2NtcF9ib3VuZF92YWx1ZXModHlwY2FjaGUsICZo aXN0MVtpXSwgJmhpc3QyW2pdKSA+IDApCisJCWN1cl9zeW5jID0gaGlzdDJbaisrXTsKKwllbHNl CisJeworCQkvKiBJZiBlcXVhbCwgc2tpcCBvbmUgKi8KKwkJY3VyX3N5bmMgPSBoaXN0MVtpXTsK KwkJaSsrOworCQlqKys7CisJfQorCXByZXZfc2VsMSA9IGNhbGNfaGlzdF9zZWxlY3Rpdml0eV9z Y2FsYXIodHlwY2FjaGUsICZjdXJfc3luYywKKwkJCQkJCQkJCQkJIGhpc3QxLCBuaGlzdDEsIGZh bHNlKTsKKwlwcmV2X3NlbDIgPSBjYWxjX2hpc3Rfc2VsZWN0aXZpdHlfc2NhbGFyKHR5cGNhY2hl LCAmY3VyX3N5bmMsCisJCQkJCQkJCQkJCSBoaXN0Miwgbmhpc3QyLCBmYWxzZSk7CisKKwkvKgor CSAqIERvIHRoZSBlc3RpbWF0aW9uIG9uIG92ZXJsYXBwaW5nIHJlZ2lvbgorCSAqLworCXNlbGVj dGl2aXR5ID0gMC4wOworCXdoaWxlIChpIDwgbmhpc3QxICYmIGogPCBuaGlzdDIpCisJeworCQlp ZiAocmFuZ2VfY21wX2JvdW5kX3ZhbHVlcyh0eXBjYWNoZSwgJmhpc3QxW2ldLCAmaGlzdDJbal0p IDwgMCkKKwkJCWN1cl9zeW5jID0gaGlzdDFbaSsrXTsKKwkJZWxzZSBpZiAocmFuZ2VfY21wX2Jv dW5kX3ZhbHVlcyh0eXBjYWNoZSwgJmhpc3QxW2ldLCAmaGlzdDJbal0pID4gMCkKKwkJCWN1cl9z eW5jID0gaGlzdDJbaisrXTsKKwkJZWxzZQorCQl7CisJCQkvKiBJZiBlcXVhbCwgc2tpcCBvbmUg Ki8KKwkJCWN1cl9zeW5jID0gaGlzdDFbaV07CisJCQlpKys7CisJCQlqKys7CisJCX0KKwkJY3Vy X3NlbDEgPSBjYWxjX2hpc3Rfc2VsZWN0aXZpdHlfc2NhbGFyKHR5cGNhY2hlLCAmY3VyX3N5bmMs CisJCQkJCQkJCQkJCQloaXN0MSwgbmhpc3QxLCBmYWxzZSk7CisJCWN1cl9zZWwyID0gY2FsY19o aXN0X3NlbGVjdGl2aXR5X3NjYWxhcih0eXBjYWNoZSwgJmN1cl9zeW5jLAorCQkJCQkJCQkJCQkJ aGlzdDIsIG5oaXN0MiwgZmFsc2UpOworCisJCXNlbGVjdGl2aXR5ICs9IChwcmV2X3NlbDEgKyBj dXJfc2VsMSkgKiAoY3VyX3NlbDIgLSBwcmV2X3NlbDIpOworCisJCS8qIFByZXBhcmUgZm9yIHRo ZSBuZXh0IGl0ZXJhdGlvbiAqLworCQlwcmV2X3NlbDEgPSBjdXJfc2VsMTsKKwkJcHJldl9zZWwy ID0gY3VyX3NlbDI7CisJfQorCisJLyogUChYIDwgWSkgPSAwLjUgKiBTdW0oLi4uKSAqLworCXNl bGVjdGl2aXR5IC89IDI7CisKKwkvKiBJbmNsdWRlIHJlbWFpbmRlciBvZiBoaXN0MiBpZiBhbnkg Ki8KKwlpZiAoaiA8IG5oaXN0MikKKwkJc2VsZWN0aXZpdHkgKz0gMSAtIHByZXZfc2VsMjsKKwor CXJldHVybiBzZWxlY3Rpdml0eTsKK30KKworLyoKKyAqIG11bHRpcmFuZ2Vqb2luc2VsIC0tIGpv aW4gY2FyZGluYWxpdHkgZm9yIG11bHRpcmFuZ2Ugb3BlcmF0b3JzCisgKi8KK0RhdHVtCittdWx0 aXJhbmdlam9pbnNlbChQR19GVU5DVElPTl9BUkdTKQoreworCVBsYW5uZXJJbmZvICpyb290ID0g KFBsYW5uZXJJbmZvICopIFBHX0dFVEFSR19QT0lOVEVSKDApOworCU9pZAkJCW9wZXJhdG9yID0g UEdfR0VUQVJHX09JRCgxKTsKKwlMaXN0CSAgICphcmdzID0gKExpc3QgKikgUEdfR0VUQVJHX1BP SU5URVIoMik7CisJU3BlY2lhbEpvaW5JbmZvICpzamluZm8gPSAoU3BlY2lhbEpvaW5JbmZvICop IFBHX0dFVEFSR19QT0lOVEVSKDQpOworCVZhcmlhYmxlU3RhdERhdGEgdmFyZGF0YTEsCisJCQkJ dmFyZGF0YTI7CisJQXR0U3RhdHNTbG90IGhpc3QxLAorCQkJCWhpc3QyLAorCQkJCXNzbG90Owor CWJvb2wJCXJldmVyc2VkOworCVNlbGVjdGl2aXR5IHNlbGVjOworCVR5cGVDYWNoZUVudHJ5ICp0 eXBjYWNoZSA9IE5VTEwsCisJCQkgICAqcm5nX3R5cGNhY2hlID0gTlVMTDsKKwlGb3JtX3BnX3N0 YXRpc3RpYyBzdGF0czEsCisJCQkJc3RhdHMyOworCWRvdWJsZQkJZW1wdHlfZnJhYzEsCisJCQkJ ZW1wdHlfZnJhYzIsCisJCQkJbnVsbF9mcmFjMSwKKwkJCQludWxsX2ZyYWMyOworCWludAkJCW5o aXN0MSwKKwkJCQluaGlzdDI7CisJUmFuZ2VCb3VuZCAqaGlzdDFfbG93ZXIsCisJCQkgICAqaGlz dDFfdXBwZXIsCisJCQkgICAqaGlzdDJfbG93ZXIsCisJCQkgICAqaGlzdDJfdXBwZXI7CisJYm9v bAkJZW1wdHk7CisJaW50CQkJaTsKKworCWdldF9qb2luX3ZhcmlhYmxlcyhyb290LCBhcmdzLCBz amluZm8sICZ2YXJkYXRhMSwgJnZhcmRhdGEyLCAmcmV2ZXJzZWQpOworCisJc2VsZWMgPSBkZWZh dWx0X211bHRpcmFuZ2Vfc2VsZWN0aXZpdHkob3BlcmF0b3IpOworCisJLyogZ2V0IG11bHRpcmFu Z2UgdHlwZSBjYWNoZSAqLworCWlmICh0eXBlX2lzX211bHRpcmFuZ2UodmFyZGF0YTEudmFydHlw ZSkpCisJCXR5cGNhY2hlID0gbXVsdGlyYW5nZV9nZXRfdHlwY2FjaGUoZmNpbmZvLCB2YXJkYXRh MS52YXJ0eXBlKTsKKwllbHNlIGlmICh0eXBlX2lzX211bHRpcmFuZ2UodmFyZGF0YTIudmFydHlw ZSkpCisJCXR5cGNhY2hlID0gbXVsdGlyYW5nZV9nZXRfdHlwY2FjaGUoZmNpbmZvLCB2YXJkYXRh Mi52YXJ0eXBlKTsKKworCWlmIChIZWFwVHVwbGVJc1ZhbGlkKHZhcmRhdGExLnN0YXRzVHVwbGUp ICYmCisJCWdldF9hdHRzdGF0c3Nsb3QoJmhpc3QxLCB2YXJkYXRhMS5zdGF0c1R1cGxlLAorCQkJ CQkJIFNUQVRJU1RJQ19LSU5EX0JPVU5EU19ISVNUT0dSQU0sIEludmFsaWRPaWQsCisJCQkJCQkg QVRUU1RBVFNTTE9UX1ZBTFVFUykgJiYKKwkJSGVhcFR1cGxlSXNWYWxpZCh2YXJkYXRhMi5zdGF0 c1R1cGxlKSAmJgorCQlnZXRfYXR0c3RhdHNzbG90KCZoaXN0MiwgdmFyZGF0YTIuc3RhdHNUdXBs ZSwKKwkJCQkJCSBTVEFUSVNUSUNfS0lORF9CT1VORFNfSElTVE9HUkFNLCBJbnZhbGlkT2lkLAor CQkJCQkJIEFUVFNUQVRTU0xPVF9WQUxVRVMpICYmCisJCXR5cGNhY2hlKQorCXsKKworCQkvKiBJ bml0aWFsaXplIHVuZGVybHlpbmcgcmFuZ2UgdHlwZSBjYWNoZSAqLworCQlybmdfdHlwY2FjaGUg PSB0eXBjYWNoZS0+cm5ndHlwZTsKKworCQkvKgorCQkgKiBGaXJzdCBsb29rIHVwIHRoZSBmcmFj dGlvbiBvZiBOVUxMcyBhbmQgZW1wdHkgcmFuZ2VzIGZyb20KKwkJICogcGdfc3RhdGlzdGljLgor CQkgKi8KKwkJc3RhdHMxID0gKEZvcm1fcGdfc3RhdGlzdGljKSBHRVRTVFJVQ1QodmFyZGF0YTEu c3RhdHNUdXBsZSk7CisJCXN0YXRzMiA9IChGb3JtX3BnX3N0YXRpc3RpYykgR0VUU1RSVUNUKHZh cmRhdGEyLnN0YXRzVHVwbGUpOworCisJCW51bGxfZnJhYzEgPSBzdGF0czEtPnN0YW51bGxmcmFj OworCQludWxsX2ZyYWMyID0gc3RhdHMyLT5zdGFudWxsZnJhYzsKKworCQkvKiBUcnkgdG8gZ2V0 IGZyYWN0aW9uIG9mIGVtcHR5IHJhbmdlcyBmb3IgdGhlIGZpcnN0IHZhcmlhYmxlICovCisJCWlm IChnZXRfYXR0c3RhdHNzbG90KCZzc2xvdCwgdmFyZGF0YTEuc3RhdHNUdXBsZSwKKwkJCQkJCQkg U1RBVElTVElDX0tJTkRfUkFOR0VfTEVOR1RIX0hJU1RPR1JBTSwKKwkJCQkJCQkgSW52YWxpZE9p ZCwKKwkJCQkJCQkgQVRUU1RBVFNTTE9UX05VTUJFUlMpKQorCQl7CisJCQlpZiAoc3Nsb3Qubm51 bWJlcnMgIT0gMSkJLyogc2hvdWxkbid0IGhhcHBlbiAqLworCQkJCWVsb2coRVJST1IsICJpbnZh bGlkIGVtcHR5IGZyYWN0aW9uIHN0YXRpc3RpYyIpOworCQkJZW1wdHlfZnJhYzEgPSBzc2xvdC5u dW1iZXJzWzBdOworCQkJZnJlZV9hdHRzdGF0c3Nsb3QoJnNzbG90KTsKKwkJfQorCQllbHNlCisJ CXsKKwkJCS8qIE5vIGVtcHR5IGZyYWN0aW9uIHN0YXRpc3RpYy4gQXNzdW1lIG5vIGVtcHR5IHJh bmdlcy4gKi8KKwkJCWVtcHR5X2ZyYWMxID0gMC4wOworCQl9CisKKwkJLyogVHJ5IHRvIGdldCBm cmFjdGlvbiBvZiBlbXB0eSByYW5nZXMgZm9yIHRoZSBzZWNvbmQgdmFyaWFibGUgKi8KKwkJaWYg KGdldF9hdHRzdGF0c3Nsb3QoJnNzbG90LCB2YXJkYXRhMi5zdGF0c1R1cGxlLAorCQkJCQkJCSBT VEFUSVNUSUNfS0lORF9SQU5HRV9MRU5HVEhfSElTVE9HUkFNLAorCQkJCQkJCSBJbnZhbGlkT2lk LAorCQkJCQkJCSBBVFRTVEFUU1NMT1RfTlVNQkVSUykpCisJCXsKKwkJCWlmIChzc2xvdC5ubnVt YmVycyAhPSAxKQkvKiBzaG91bGRuJ3QgaGFwcGVuICovCisJCQkJZWxvZyhFUlJPUiwgImludmFs aWQgZW1wdHkgZnJhY3Rpb24gc3RhdGlzdGljIik7CisJCQllbXB0eV9mcmFjMiA9IHNzbG90Lm51 bWJlcnNbMF07CisJCQlmcmVlX2F0dHN0YXRzc2xvdCgmc3Nsb3QpOworCQl9CisJCWVsc2UKKwkJ eworCQkJLyogTm8gZW1wdHkgZnJhY3Rpb24gc3RhdGlzdGljLiBBc3N1bWUgbm8gZW1wdHkgcmFu Z2VzLiAqLworCQkJZW1wdHlfZnJhYzIgPSAwLjA7CisJCX0KKworCQkvKgorCQkgKiBDb252ZXJ0 IGhpc3RvZ3JhbXMgb2YgcmFuZ2VzIGludG8gaGlzdG9ncmFtcyBvZiB0aGVpciBsb3dlciBhbmQK KwkJICogdXBwZXIgYm91bmRzIGZvciB0aGUgZmlyc3QgdmFyaWFibGUuCisJCSAqLworCQluaGlz dDEgPSBoaXN0MS5udmFsdWVzOworCQloaXN0MV9sb3dlciA9IChSYW5nZUJvdW5kICopIHBhbGxv YyhzaXplb2YoUmFuZ2VCb3VuZCkgKiBuaGlzdDEpOworCQloaXN0MV91cHBlciA9IChSYW5nZUJv dW5kICopIHBhbGxvYyhzaXplb2YoUmFuZ2VCb3VuZCkgKiBuaGlzdDEpOworCQlmb3IgKGkgPSAw OyBpIDwgbmhpc3QxOyBpKyspCisJCXsKKwkJCXJhbmdlX2Rlc2VyaWFsaXplKHJuZ190eXBjYWNo ZSwgRGF0dW1HZXRSYW5nZVR5cGVQKGhpc3QxLnZhbHVlc1tpXSksCisJCQkJCQkJICAmaGlzdDFf bG93ZXJbaV0sICZoaXN0MV91cHBlcltpXSwgJmVtcHR5KTsKKwkJCS8qIFRoZSBoaXN0b2dyYW0g c2hvdWxkIG5vdCBjb250YWluIGFueSBlbXB0eSByYW5nZXMgKi8KKwkJCWlmIChlbXB0eSkKKwkJ CQllbG9nKEVSUk9SLCAiYm91bmRzIGhpc3RvZ3JhbSBjb250YWlucyBhbiBlbXB0eSByYW5nZSIp OworCQl9CisKKwkJLyoKKwkJICogQ29udmVydCBoaXN0b2dyYW1zIG9mIHJhbmdlcyBpbnRvIGhp c3RvZ3JhbXMgb2YgdGhlaXIgbG93ZXIgYW5kCisJCSAqIHVwcGVyIGJvdW5kcyBmb3IgdGhlIHNl Y29uZCB2YXJpYWJsZS4KKwkJICovCisJCW5oaXN0MiA9IGhpc3QyLm52YWx1ZXM7CisJCWhpc3Qy X2xvd2VyID0gKFJhbmdlQm91bmQgKikgcGFsbG9jKHNpemVvZihSYW5nZUJvdW5kKSAqIG5oaXN0 Mik7CisJCWhpc3QyX3VwcGVyID0gKFJhbmdlQm91bmQgKikgcGFsbG9jKHNpemVvZihSYW5nZUJv dW5kKSAqIG5oaXN0Mik7CisJCWZvciAoaSA9IDA7IGkgPCBuaGlzdDI7IGkrKykKKwkJeworCQkJ cmFuZ2VfZGVzZXJpYWxpemUocm5nX3R5cGNhY2hlLCBEYXR1bUdldFJhbmdlVHlwZVAoaGlzdDIu dmFsdWVzW2ldKSwKKwkJCQkJCQkgICZoaXN0Ml9sb3dlcltpXSwgJmhpc3QyX3VwcGVyW2ldLCAm ZW1wdHkpOworCQkJLyogVGhlIGhpc3RvZ3JhbSBzaG91bGQgbm90IGNvbnRhaW4gYW55IGVtcHR5 IHJhbmdlcyAqLworCQkJaWYgKGVtcHR5KQorCQkJCWVsb2coRVJST1IsICJib3VuZHMgaGlzdG9n cmFtIGNvbnRhaW5zIGFuIGVtcHR5IHJhbmdlIik7CisJCX0KKworCQlzd2l0Y2ggKG9wZXJhdG9y KQorCQl7CisJCQljYXNlIE9JRF9NVUxUSVJBTkdFX09WRVJMQVBTX01VTFRJUkFOR0VfT1A6CisJ CQljYXNlIE9JRF9NVUxUSVJBTkdFX09WRVJMQVBTX1JBTkdFX09QOgorCQkJY2FzZSBPSURfUkFO R0VfT1ZFUkxBUFNfTVVMVElSQU5HRV9PUDoKKworCQkJCS8qCisJCQkJICogU2VsZWN0aXZpdHkg b2YgQSAmJiBCID0gU2VsZWN0aXZpdHkgb2YgTk9UKCBBIDw8IEIgfHwgQSA+PgorCQkJCSAqIEIg KSA9IDEgLSBTZWxlY3Rpdml0eSBvZiAoQS51cHBlciA8IEIubG93ZXIpIC0gU2VsZWN0aXZpdHkK KwkJCQkgKiBvZiAoQi51cHBlciA8IEEubG93ZXIpCisJCQkJICovCisJCQkJc2VsZWMgPSAxOwor CQkJCXNlbGVjIC09IGNhbGNfaGlzdF9qb2luX3NlbGVjdGl2aXR5KHJuZ190eXBjYWNoZSwKKwkJ CQkJCQkJCQkJCQloaXN0MV91cHBlciwgbmhpc3QxLAorCQkJCQkJCQkJCQkJCWhpc3QyX2xvd2Vy LCBuaGlzdDIpOworCQkJCXNlbGVjIC09IGNhbGNfaGlzdF9qb2luX3NlbGVjdGl2aXR5KHJuZ190 eXBjYWNoZSwKKwkJCQkJCQkJCQkJCQloaXN0Ml91cHBlciwgbmhpc3QyLAorCQkJCQkJCQkJCQkJ CWhpc3QxX2xvd2VyLCBuaGlzdDEpOworCQkJCWJyZWFrOworCisJCQljYXNlIE9JRF9NVUxUSVJB TkdFX0xFU1NfRVFVQUxfT1A6CisKKwkJCQkvKgorCQkJCSAqIEEgPD0gQgorCQkJCSAqCisJCQkJ ICogU3RhcnQgYnkgY29tcGFyaW5nIGxvd2VyIGJvdW5kcyBhbmQgaWYgdGhleSBhcmUgZXF1YWwK KwkJCQkgKiBjb21wYXJlIHVwcGVyIGJvdW5kcworCQkJCSAqCisJCQkJICogTmVnYXRpb24gb2Yg T0lEX1JBTkdFX0dSRUFURVJfT1AuCisJCQkJICoKKwkJCQkgKiBPdmVyZXN0aW1hdGUgYnkgY29t cGFyaW5nIG9ubHkgdGhlIGxvd2VyIGJvdW5kcy4gSGlnaGVyCisJCQkJICogYWNjdXJhY3kgd291 bGQgcmVxdWlyZSB1cyB0byBzdWJ0cmFjdCBQKGxvd2VyMSA9IGxvd2VyMikgKgorCQkJCSAqIFAo dXBwZXIxID4gdXBwZXIyKQorCQkJCSAqLworCQkJCXNlbGVjID0gMSAtIGNhbGNfaGlzdF9qb2lu X3NlbGVjdGl2aXR5KHJuZ190eXBjYWNoZSwKKwkJCQkJCQkJCQkJCQkgICBoaXN0Ml9sb3dlciwg bmhpc3QyLAorCQkJCQkJCQkJCQkJCSAgIGhpc3QxX2xvd2VyLCBuaGlzdDEpOworCQkJCWJyZWFr OworCisJCQljYXNlIE9JRF9NVUxUSVJBTkdFX0xFU1NfT1A6CisKKwkJCQkvKgorCQkJCSAqIEEg PCBCCisJCQkJICoKKwkJCQkgKiBTdGFydCBieSBjb21wYXJpbmcgbG93ZXIgYm91bmRzIGFuZCBp ZiB0aGV5IGFyZSBlcXVhbAorCQkJCSAqIGNvbXBhcmUgdXBwZXIgYm91bmRzCisJCQkJICoKKwkJ CQkgKiBVbmRlcmVzdGltYXRlIGJ5IGNvbXBhcmluZyBvbmx5IHRoZSBsb3dlciBib3VuZHMuIEhp Z2hlcgorCQkJCSAqIGFjY3VyYWN5IHdvdWxkIHJlcXVpcmUgdXMgdG8gYWRkIFAobG93ZXIxID0g bG93ZXIyKSAqCisJCQkJICogUCh1cHBlcjEgPCB1cHBlcjIpCisJCQkJICovCisJCQkJc2VsZWMg PSBjYWxjX2hpc3Rfam9pbl9zZWxlY3Rpdml0eShybmdfdHlwY2FjaGUsCisJCQkJCQkJCQkJCQkg ICBoaXN0MV9sb3dlciwgbmhpc3QxLAorCQkJCQkJCQkJCQkJICAgaGlzdDJfbG93ZXIsIG5oaXN0 Mik7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgT0lEX01VTFRJUkFOR0VfR1JFQVRFUl9FUVVBTF9P UDoKKworCQkJCS8qCisJCQkJICogQSA+PSBCCisJCQkJICoKKwkJCQkgKiBTdGFydCBieSBjb21w YXJpbmcgbG93ZXIgYm91bmRzIGFuZCBpZiB0aGV5IGFyZSBlcXVhbAorCQkJCSAqIGNvbXBhcmUg dXBwZXIgYm91bmRzCisJCQkJICoKKwkJCQkgKiBOZWdhdGlvbiBvZiBPSURfUkFOR0VfTEVTU19P UC4KKwkJCQkgKgorCQkJCSAqIE92ZXJlc3RpbWF0ZSBieSBjb21wYXJpbmcgb25seSB0aGUgbG93 ZXIgYm91bmRzLiBIaWdoZXIKKwkJCQkgKiBhY2N1cmFjeSB3b3VsZCByZXF1aXJlIHVzIHRvIGFk ZCBQKGxvd2VyMSA9IGxvd2VyMikgKgorCQkJCSAqIFAodXBwZXIxIDwgdXBwZXIyKQorCQkJCSAq LworCQkJCXNlbGVjID0gMSAtIGNhbGNfaGlzdF9qb2luX3NlbGVjdGl2aXR5KHJuZ190eXBjYWNo ZSwKKwkJCQkJCQkJCQkJCQkgICBoaXN0MV9sb3dlciwgbmhpc3QxLAorCQkJCQkJCQkJCQkJCSAg IGhpc3QyX2xvd2VyLCBuaGlzdDIpOworCQkJCWJyZWFrOworCisJCQljYXNlIE9JRF9NVUxUSVJB TkdFX0dSRUFURVJfT1A6CisKKwkJCQkvKgorCQkJCSAqIEEgPiBCID09IEIgPCBBCisJCQkJICoK KwkJCQkgKiBTdGFydCBieSBjb21wYXJpbmcgbG93ZXIgYm91bmRzIGFuZCBpZiB0aGV5IGFyZSBl cXVhbAorCQkJCSAqIGNvbXBhcmUgdXBwZXIgYm91bmRzCisJCQkJICoKKwkJCQkgKiBVbmRlcmVz dGltYXRlIGJ5IGNvbXBhcmluZyBvbmx5IHRoZSBsb3dlciBib3VuZHMuIEhpZ2hlcgorCQkJCSAq IGFjY3VyYWN5IHdvdWxkIHJlcXVpcmUgdXMgdG8gYWRkIFAobG93ZXIxID0gbG93ZXIyKSAqCisJ CQkJICogUCh1cHBlcjEgPiB1cHBlcjIpCisJCQkJICovCisJCQkJc2VsZWMgPSBjYWxjX2hpc3Rf am9pbl9zZWxlY3Rpdml0eShybmdfdHlwY2FjaGUsCisJCQkJCQkJCQkJCQkgICBoaXN0Ml9sb3dl ciwgbmhpc3QyLAorCQkJCQkJCQkJCQkJICAgaGlzdDFfbG93ZXIsIG5oaXN0MSk7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgT0lEX01VTFRJUkFOR0VfTEVGVF9NVUxUSVJBTkdFX09QOgorCQkJY2Fz ZSBPSURfTVVMVElSQU5HRV9MRUZUX1JBTkdFX09QOgorCQkJY2FzZSBPSURfUkFOR0VfTEVGVF9N VUxUSVJBTkdFX09QOgorCQkJCS8qIHZhcjEgPDwgdmFyMiB3aGVuIHVwcGVyKHZhcjEpIDwgbG93 ZXIodmFyMikgKi8KKwkJCQlzZWxlYyA9IGNhbGNfaGlzdF9qb2luX3NlbGVjdGl2aXR5KHJuZ190 eXBjYWNoZSwKKwkJCQkJCQkJCQkJCSAgIGhpc3QxX3VwcGVyLCBuaGlzdDEsCisJCQkJCQkJCQkJ CQkgICBoaXN0Ml9sb3dlciwgbmhpc3QyKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBPSURfTVVM VElSQU5HRV9SSUdIVF9NVUxUSVJBTkdFX09QOgorCQkJY2FzZSBPSURfTVVMVElSQU5HRV9SSUdI VF9SQU5HRV9PUDoKKwkJCWNhc2UgT0lEX1JBTkdFX1JJR0hUX01VTFRJUkFOR0VfT1A6CisJCQkJ LyogdmFyMSA+PiB2YXIyIHdoZW4gdXBwZXIodmFyMikgPCBsb3dlcih2YXIxKSAqLworCQkJCXNl bGVjID0gY2FsY19oaXN0X2pvaW5fc2VsZWN0aXZpdHkocm5nX3R5cGNhY2hlLAorCQkJCQkJCQkJ CQkJICAgaGlzdDJfdXBwZXIsIG5oaXN0MiwKKwkJCQkJCQkJCQkJCSAgIGhpc3QxX2xvd2VyLCBu aGlzdDEpOworCQkJCWJyZWFrOworCisJCQljYXNlIE9JRF9NVUxUSVJBTkdFX09WRVJMQVBTX0xF RlRfTVVMVElSQU5HRV9PUDoKKwkJCWNhc2UgT0lEX01VTFRJUkFOR0VfT1ZFUkxBUFNfTEVGVF9S QU5HRV9PUDoKKwkJCWNhc2UgT0lEX1JBTkdFX09WRVJMQVBTX0xFRlRfTVVMVElSQU5HRV9PUDoK KwkJCQkvKiB2YXIxICY8IHZhcjIgd2hlbiB1cHBlcih2YXIxKSA8IHVwcGVyKHZhcjIpICovCisJ CQkJc2VsZWMgPSBjYWxjX2hpc3Rfam9pbl9zZWxlY3Rpdml0eShybmdfdHlwY2FjaGUsCisJCQkJ CQkJCQkJCQkgICBoaXN0MV91cHBlciwgbmhpc3QxLAorCQkJCQkJCQkJCQkJICAgaGlzdDJfdXBw ZXIsIG5oaXN0Mik7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgT0lEX01VTFRJUkFOR0VfT1ZFUkxB UFNfUklHSFRfTVVMVElSQU5HRV9PUDoKKwkJCWNhc2UgT0lEX01VTFRJUkFOR0VfT1ZFUkxBUFNf UklHSFRfUkFOR0VfT1A6CisJCQljYXNlIE9JRF9SQU5HRV9PVkVSTEFQU19SSUdIVF9NVUxUSVJB TkdFX09QOgorCQkJCS8qIHZhcjEgJj4gdmFyMiB3aGVuIGxvd2VyKHZhcjIpIDwgbG93ZXIodmFy MSkgKi8KKwkJCQlzZWxlYyA9IGNhbGNfaGlzdF9qb2luX3NlbGVjdGl2aXR5KHJuZ190eXBjYWNo ZSwKKwkJCQkJCQkJCQkJCSAgIGhpc3QyX2xvd2VyLCBuaGlzdDIsCisJCQkJCQkJCQkJCQkgICBo aXN0MV9sb3dlciwgbmhpc3QxKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBPSURfTVVMVElSQU5H RV9NVUxUSVJBTkdFX0NPTlRBSU5FRF9PUDoKKwkJCWNhc2UgT0lEX01VTFRJUkFOR0VfUkFOR0Vf Q09OVEFJTkVEX09QOgorCQkJY2FzZSBPSURfUkFOR0VfTVVMVElSQU5HRV9DT05UQUlORURfT1A6 CisKKwkJCQkvKgorCQkJCSAqIHZhcjEgPEAgdmFyMiBpcyBlcXVpdmFsZW50IHRvIGxvd2VyKHZh cjIpIDw9IGxvd2VyKHZhcjEpCisJCQkJICogYW5kIHVwcGVyKHZhcjEpIDw9IHVwcGVyKHZhcjIp CisJCQkJICoKKwkJCQkgKiBBZnRlciBuZWdhdGluZyBib3RoIHNpZGVzIHdlIGdldCBub3QoIGxv d2VyKHZhcjEpIDwKKwkJCQkgKiBsb3dlcih2YXIyKSApIGFuZCBub3QoIHVwcGVyKHZhcjIpIDwg dXBwZXIodmFyMSkgKSwKKwkJCQkgKiByZXNwZWN0aXZlbHkuIEFzc3VtaW5nIGluZGVwZW5kZW5j ZSwgbXVsdGlwbHkgYm90aAorCQkJCSAqIHNlbGVjdGl2aXRpZXMuCisJCQkJICovCisJCQkJc2Vs ZWMgPSAxIC0gY2FsY19oaXN0X2pvaW5fc2VsZWN0aXZpdHkocm5nX3R5cGNhY2hlLAorCQkJCQkJ CQkJCQkJCSAgIGhpc3QxX2xvd2VyLCBuaGlzdDEsCisJCQkJCQkJCQkJCQkJICAgaGlzdDJfbG93 ZXIsIG5oaXN0Mik7CisJCQkJc2VsZWMgKj0gMSAtIGNhbGNfaGlzdF9qb2luX3NlbGVjdGl2aXR5 KHJuZ190eXBjYWNoZSwKKwkJCQkJCQkJCQkJCQkJaGlzdDJfdXBwZXIsIG5oaXN0MiwKKwkJCQkJ CQkJCQkJCQkJaGlzdDFfdXBwZXIsIG5oaXN0MSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgT0lE X01VTFRJUkFOR0VfQ09OVEFJTlNfTVVMVElSQU5HRV9PUDoKKwkJCWNhc2UgT0lEX01VTFRJUkFO R0VfQ09OVEFJTlNfUkFOR0VfT1A6CisJCQljYXNlIE9JRF9SQU5HRV9DT05UQUlOU19NVUxUSVJB TkdFX09QOgorCisJCQkJLyoKKwkJCQkgKiB2YXIxIEA+IHZhcjIgaXMgZXF1aXZhbGVudCB0byBs b3dlcih2YXIxKSA8PSBsb3dlcih2YXIyKQorCQkJCSAqIGFuZCB1cHBlcih2YXIyKSA8PSB1cHBl cih2YXIxKQorCQkJCSAqCisJCQkJICogQWZ0ZXIgbmVnYXRpbmcgYm90aCBzaWRlcyB3ZSBnZXQg bm90KCBsb3dlcih2YXIyKSA8CisJCQkJICogbG93ZXIodmFyMSkgKSBhbmQgbm90KCB1cHBlcih2 YXIxKSA8IHVwcGVyKHZhcjIpICksCisJCQkJICogcmVzcGVjdGl2ZWx5LiBBc3N1bWluZyBpbmRl cGVuZGVuY2UsIG11bHRpcGx5IGJvdGgKKwkJCQkgKiBzZWxlY3Rpdml0aWVzLgorCQkJCSAqLwor CQkJCXNlbGVjID0gMSAtIGNhbGNfaGlzdF9qb2luX3NlbGVjdGl2aXR5KHJuZ190eXBjYWNoZSwK KwkJCQkJCQkJCQkJCQkgICBoaXN0Ml9sb3dlciwgbmhpc3QyLAorCQkJCQkJCQkJCQkJCSAgIGhp c3QxX2xvd2VyLCBuaGlzdDEpOworCQkJCXNlbGVjICo9IDEgLSBjYWxjX2hpc3Rfam9pbl9zZWxl Y3Rpdml0eShybmdfdHlwY2FjaGUsCisJCQkJCQkJCQkJCQkJCWhpc3QxX3VwcGVyLCBuaGlzdDEs CisJCQkJCQkJCQkJCQkJCWhpc3QyX3VwcGVyLCBuaGlzdDIpOworCQkJCWJyZWFrOworCisJCQlj YXNlIE9JRF9NVUxUSVJBTkdFX0FESkFDRU5UX01VTFRJUkFOR0VfT1A6CisJCQljYXNlIE9JRF9N VUxUSVJBTkdFX0FESkFDRU5UX1JBTkdFX09QOgorCQkJY2FzZSBPSURfUkFOR0VfQURKQUNFTlRf TVVMVElSQU5HRV9PUDoKKworCQkJCS8qCisJCQkJICoganVzdCBwdW50IGZvciBub3csIGVzdGlt YXRpb24gd291bGQgcmVxdWlyZSBlcXVhbGl0eQorCQkJCSAqIHNlbGVjdGl2aXR5IGZvciBib3Vu ZHMKKwkJCQkgKi8KKwkJCWNhc2UgT0lEX01VTFRJUkFOR0VfQ09OVEFJTlNfRUxFTV9PUDoKKwkJ CWNhc2UgT0lEX01VTFRJUkFOR0VfRUxFTV9DT05UQUlORURfT1A6CisKKwkJCQkvKgorCQkJCSAq IGp1c3QgcHVudCBmb3Igbm93LCBlc3RpbWF0aW9uIHdvdWxkIHJlcXVpcmUgZXh0cmFjdGlvbiBv ZgorCQkJCSAqIGhpc3RvZ3JhbXMgZm9yIHRoZSBhbnllbGVtZW50CisJCQkJICovCisJCQlkZWZh dWx0OgorCQkJCWJyZWFrOworCQl9CisKKworCQkvKiB0aGUgY2FsY3VsYXRlZCBzZWxlY3Rpdml0 eSBvbmx5IGFwcGxpZXMgdG8gbm9uLWVtcHR5IChtdWx0aSlyYW5nZXMgKi8KKwkJc2VsZWMgKj0g KDEgLSBlbXB0eV9mcmFjMSkgKiAoMSAtIGVtcHR5X2ZyYWMyKTsKKworCQkvKgorCQkgKiBEZXBl bmRpbmcgb24gdGhlIG9wZXJhdG9yLCBlbXB0eSAobXVsdGkpcmFuZ2VzIG1pZ2h0IG1hdGNoCisJ CSAqIGRpZmZlcmVudCBmcmFjdGlvbnMgb2YgdGhlIHJlc3VsdC4KKwkJICovCisJCXN3aXRjaCAo b3BlcmF0b3IpCisJCXsKKwkJCWNhc2UgT0lEX01VTFRJUkFOR0VfTEVTU19PUDoKKworCQkJCS8q CisJCQkJICogZW1wdHkgKG11bHRpKXJhbmdlIDwgbm9uLWVtcHR5IChtdWx0aSlyYW5nZQorCQkJ CSAqLworCQkJCXNlbGVjICs9IGVtcHR5X2ZyYWMxICogKDEgLSBlbXB0eV9mcmFjMik7CisJCQkJ YnJlYWs7CisKKwkJCWNhc2UgT0lEX01VTFRJUkFOR0VfR1JFQVRFUl9PUDoKKworCQkJCS8qCisJ CQkJICogbm9uLWVtcHR5IChtdWx0aSlyYW5nZSA+IGVtcHR5IChtdWx0aSlyYW5nZQorCQkJCSAq LworCQkJCXNlbGVjICs9ICgxIC0gZW1wdHlfZnJhYzEpICogZW1wdHlfZnJhYzI7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgT0lEX01VTFRJUkFOR0VfTVVMVElSQU5HRV9DT05UQUlORURfT1A6CisJ CQljYXNlIE9JRF9NVUxUSVJBTkdFX1JBTkdFX0NPTlRBSU5FRF9PUDoKKwkJCWNhc2UgT0lEX1JB TkdFX01VTFRJUkFOR0VfQ09OVEFJTkVEX09QOgorCisJCQkJLyoKKwkJCQkgKiBlbXB0eSAobXVs dGkpcmFuZ2UgPEAgYW55IChtdWx0aSlyYW5nZQorCQkJCSAqLworCQkJY2FzZSBPSURfTVVMVElS QU5HRV9MRVNTX0VRVUFMX09QOgorCisJCQkJLyoKKwkJCQkgKiBlbXB0eSAobXVsdGkpcmFuZ2Ug PD0gYW55IChtdWx0aSlyYW5nZQorCQkJCSAqLworCQkJCXNlbGVjICs9IGVtcHR5X2ZyYWMxOwor CQkJCWJyZWFrOworCisJCQljYXNlIE9JRF9NVUxUSVJBTkdFX0NPTlRBSU5TX01VTFRJUkFOR0Vf T1A6CisJCQljYXNlIE9JRF9NVUxUSVJBTkdFX0NPTlRBSU5TX1JBTkdFX09QOgorCQkJY2FzZSBP SURfUkFOR0VfQ09OVEFJTlNfTVVMVElSQU5HRV9PUDoKKworCQkJCS8qCisJCQkJICogYW55ICht dWx0aSlyYW5nZSBAPiBlbXB0eSAobXVsdGkpcmFuZ2UKKwkJCQkgKi8KKwkJCWNhc2UgT0lEX01V TFRJUkFOR0VfR1JFQVRFUl9FUVVBTF9PUDoKKworCQkJCS8qCisJCQkJICogYW55IChtdWx0aSly YW5nZSA+PSBlbXB0eSAobXVsdGkpcmFuZ2UKKwkJCQkgKi8KKwkJCQlzZWxlYyArPSBlbXB0eV9m cmFjMjsKKwkJCQlicmVhazsKKworCQkJY2FzZSBPSURfTVVMVElSQU5HRV9DT05UQUlOU19FTEVN X09QOgorCQkJY2FzZSBPSURfTVVMVElSQU5HRV9FTEVNX0NPTlRBSU5FRF9PUDoKKwkJCWNhc2Ug T0lEX01VTFRJUkFOR0VfT1ZFUkxBUFNfTVVMVElSQU5HRV9PUDoKKwkJCWNhc2UgT0lEX01VTFRJ UkFOR0VfT1ZFUkxBUFNfUkFOR0VfT1A6CisJCQljYXNlIE9JRF9SQU5HRV9PVkVSTEFQU19NVUxU SVJBTkdFX09QOgorCQkJY2FzZSBPSURfTVVMVElSQU5HRV9PVkVSTEFQU19MRUZUX01VTFRJUkFO R0VfT1A6CisJCQljYXNlIE9JRF9NVUxUSVJBTkdFX09WRVJMQVBTX0xFRlRfUkFOR0VfT1A6CisJ CQljYXNlIE9JRF9SQU5HRV9PVkVSTEFQU19MRUZUX01VTFRJUkFOR0VfT1A6CisJCQljYXNlIE9J RF9NVUxUSVJBTkdFX09WRVJMQVBTX1JJR0hUX01VTFRJUkFOR0VfT1A6CisJCQljYXNlIE9JRF9N VUxUSVJBTkdFX09WRVJMQVBTX1JJR0hUX1JBTkdFX09QOgorCQkJY2FzZSBPSURfUkFOR0VfT1ZF UkxBUFNfUklHSFRfTVVMVElSQU5HRV9PUDoKKwkJCWNhc2UgT0lEX01VTFRJUkFOR0VfTEVGVF9N VUxUSVJBTkdFX09QOgorCQkJY2FzZSBPSURfTVVMVElSQU5HRV9MRUZUX1JBTkdFX09QOgorCQkJ Y2FzZSBPSURfUkFOR0VfTEVGVF9NVUxUSVJBTkdFX09QOgorCQkJY2FzZSBPSURfTVVMVElSQU5H RV9SSUdIVF9NVUxUSVJBTkdFX09QOgorCQkJY2FzZSBPSURfTVVMVElSQU5HRV9SSUdIVF9SQU5H RV9PUDoKKwkJCWNhc2UgT0lEX1JBTkdFX1JJR0hUX01VTFRJUkFOR0VfT1A6CisJCQljYXNlIE9J RF9NVUxUSVJBTkdFX0FESkFDRU5UX01VTFRJUkFOR0VfT1A6CisJCQljYXNlIE9JRF9NVUxUSVJB TkdFX0FESkFDRU5UX1JBTkdFX09QOgorCQkJY2FzZSBPSURfUkFOR0VfQURKQUNFTlRfTVVMVElS QU5HRV9PUDoKKwkJCWRlZmF1bHQ6CisKKwkJCQkvKgorCQkJCSAqIHRoZXNlIG9wZXJhdG9ycyBh bHdheXMgcmV0dXJuIGZhbHNlIHdoZW4gYW4gZW1wdHkKKwkJCQkgKiAobXVsdGkpcmFuZ2UgaXMg aW52b2x2ZWQKKwkJCQkgKi8KKwkJCQlicmVhazsKKworCQl9CisKKwkJLyogYWxsIHJhbmdlIG9w ZXJhdG9ycyBhcmUgc3RyaWN0ICovCisJCXNlbGVjICo9ICgxIC0gbnVsbF9mcmFjMSkgKiAoMSAt IG51bGxfZnJhYzIpOworCisJCWZyZWVfYXR0c3RhdHNzbG90KCZoaXN0MSk7CisJCWZyZWVfYXR0 c3RhdHNzbG90KCZoaXN0Mik7CisJfQorCisJUmVsZWFzZVZhcmlhYmxlU3RhdHModmFyZGF0YTEp OworCVJlbGVhc2VWYXJpYWJsZVN0YXRzKHZhcmRhdGEyKTsKKworCUNMQU1QX1BST0JBQklMSVRZ KHNlbGVjKTsKKworCVBHX1JFVFVSTl9GTE9BVDgoKGZsb2F0OCkgc2VsZWMpOworCit9CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcmFuZ2V0eXBlc19zZWxmdW5jcy5jIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3JhbmdldHlwZXNfc2VsZnVuY3MuYwppbmRleCBmYmFiYjNlMThj Li5lMmMwYTdmMGMzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcmFuZ2V0eXBl c19zZWxmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yYW5nZXR5cGVzX3NlbGZ1 bmNzLmMKQEAgLTEyMjEsMyArMTIyMSw1MTIgQEAgY2FsY19oaXN0X3NlbGVjdGl2aXR5X2NvbnRh aW5zKFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwKIAogCXJldHVybiBzdW1fZnJhYzsKIH0KKwor LyoKKyAqIFRoaXMgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIHVzZWQgdG8gZXN0aW1hdGUgdGhlIGpv aW4gc2VsZWN0aXZpdHkgb2YKKyAqIHJhbmdlIGF0dHJpYnV0ZXMgdXNpbmcgcmFuZ2Vib3VuZCBo aXN0b2dyYW0gc3RhdGlzdGljcyBhcyBkZXNjcmliZWQKKyAqIGluIHRoaXMgcGFwZXI6CisgKgor ICogRGlvZ28gUmVwYXMsIFpoaWNoZW5nIEx1bywgTWF4aW1lIFNjaG9lbWFucyBhbmQgTWFobW91 ZCBTYWtyLCAyMDIyCisgKiBTZWxlY3Rpdml0eSBFc3RpbWF0aW9uIG9mIEluZXF1YWxpdHkgSm9p bnMgSW4gRGF0YWJhc2VzCisgKiBodHRwczovL2RvaS5vcmcvMTAuNDg1NTAvYXJYaXYuMjIwNi4w NzM5NgorICoKKyAqIFRoZSBhdHRyaWJ1dGVzIGJlaW5nIGpvaW5lZCB3aWxsIGJlIHRyZWF0ZWQg YXMgcmFuZG9tIHZhcmlhYmxlcworICogdGhhdCBmb2xsb3cgYSBkaXN0cmlidXRpb24gbW9kZWxl ZCBieSBhIFByb2JhYmlsaXR5IERlbnNpdHkgRnVuY3Rpb24gKFBERikuCisgKiBMZXQgdGhlIHR3 byBhdHRyaWJ1dGVzIGJlIGRlbm90ZWQgWCwgWS4KKyAqIFRoaXMgZnVuY3Rpb24gZmluZHMgdGhl IHByb2JhYmlsaXR5IFAoWCA8IFkpLgorICogTm90ZSB0aGF0IHRoZSBQREZzIG9mIHRoZSB0d28g dmFyaWFibGVzIGNhbiBlYXNpbHkgYmUgb2J0YWluZWQKKyAqIGZyb20gdGhlaXIgYm91bmRzIGhp c3RvZ3JhbSwgcmVzcGVjdGl2ZWx5IGhpc3QxIGFuZCBoaXN0MiAuCisgKgorICogTGV0IHRoZSBQ REYgb2YgWCwgWSBiZSBkZW5vdGVkIGFzIGZfWCwgZl9ZLgorICogVGhlIHByb2JhYmlsaXR5IFAo WCA8IFkpIGNhbiBiZSBmb3JtYWxpemVkIGFzIGZvbGxvd3M6CisgKiBQKFggPCBZKT0gaW50ZWdy YWxfLWluZl5pbmYoIGludGVncmFsXy1pbmZeeSAoIGZfWCh4KSAqIGZfWSh5KSBkeCBkeSApICkK KyAqICAgICAgICAgICAgICAgID0gaW50ZWdyYWxfLWluZl5pbmYoIEZfWCh5KSAqIGZfWSh5KSBk eSApCisgKiB3aGVyZSBGX1goeSkgZGVub3RlIHRoZSBDdW11bGF0aXZlIERpc3RyaWJ1dGlvbiBG dW5jdGlvbiBvZiBYIGF0IHkuCisgKiBOb3RlIHRoYXQgRl9YIGlzIHRoZSBzZWxlY3Rpdml0eSBl c3RpbWF0aW9uIChub24tam9pbiksCisgKiB3aGljaCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUg ZnVuY3Rpb24gY2FsY19oaXN0X3NlbGVjdGl2aXR5X3NjYWxhci4KKyAqCisgKiBOb3cgZ2l2ZW4g dGhlIGhpc3RvZ3JhbXMgb2YgdGhlIHR3byBhdHRyaWJ1dGVzIFgsIFksIHdlIG5vdGUgdGhlIGZv bGxvd2luZzoKKyAqIC0gVGhlIFBERiBvZiBZIGlzIGEgc3RlcCBmdW5jdGlvbgorICogKGNvbnN0 YW50IHBpZWNlLXdpc2UsIHdoZXJlIGVhY2ggcGllY2UgaXMgZGVmaW5lZCBpbiBhIGJpbiBvZiBZ J3MgaGlzdG9ncmFtKQorICogLSBUaGUgQ0RGIG9mIFggaXMgbGluZWFyIHBpZWNlLXdpc2UKKyAq ICAgKGVhY2ggcGllY2UgaXMgZGVmaW5lZCBpbiBhIGJpbiBvZiBYJ3MgaGlzdG9ncmFtKQorICog VGhpcyBsZWFkcyB0byB0aGUgY29uY2x1c2lvbiB0aGF0IHRoZWlyIHByb2R1Y3QKKyAqICh1c2Vk IHRvIGNhbGN1bGF0ZSB0aGUgZXF1YXRpb24gYWJvdmUpIGlzIGFsc28gbGluZWFyIHBpZWNlLXdp c2UuCisgKiBBIG5ldyBwaWVjZSBzdGFydHMgd2hlbmV2ZXIgZWl0aGVyIHRoZSBiaW4gb2YgWCBv ciB0aGUgYmluIG9mIFkgY2hhbmdlcy4KKyAqIEJ5IHBhcmFsbGVsIHNjYW5uaW5nIHRoZSB0d28g cmFuZ2Vib3VuZCBoaXN0b2dyYW1zIG9mIFggYW5kIFksCisgKiB3ZSBldmFsdWF0ZSBvbmUgcGll Y2Ugb2YgdGhlIHJlc3VsdCBiZXR3ZWVuIGV2ZXJ5IHR3byBjb25zZWN1dGl2ZSByYW5nZWJvdW5k cworICogaW4gdGhlIHVuaW9uIG9mIHRoZSB0d28gaGlzdG9ncmFtcy4KKyAqCisgKiBHaXZlbiB0 aGF0IHRoZSBwcm9kdWN0IEZfWCAqIGZfeSBpcyBsaW5lYXIgaW4gdGhlIGludGVydmFsCisgKiBi ZXR3ZWVuIGV2ZXJ5IHR3byBjb25zZWN1dGl2ZSByYW5nZWJvdW5kcywgbGV0IHRoZW0gYmUgZGVu b3RlZCBwcmV2LCBjdXIsCisgKiBpdCBjYW4gYmUgc2hvd24gdGhhdCB0aGUgYWJvdmUgZm9ybXVs YSBjYW4gYmUgZGlzY3JldGl6ZWQgaW50byB0aGUgZm9sbG93aW5nOgorICogUChYIDwgWSkgPQor ICogICAwLjUgKiBzdW1fMF57bittLTF9ICggKCBGX1gocHJldikgKyBGX1goY3VyKSApICogKCBG X1koY3VyKSAtIEZfWShwcmV2KSApICkKKyAqIHdoZXJlIG4sIG0gYXJlIHRoZSBsZW5ndGhzIG9m IHRoZSB0d28gaGlzdG9ncmFtcy4KKyAqCisgKiBBcyBzdWNoLCBpdCBpcyBwb3NzaWJsZSB0byBm dWxseSBjb21wdXRlIHRoZSBqb2luIHNlbGVjdGl2aXR5CisgKiBhcyBhIHN1bW1hdGlvbiBvZiBD REZzLCBpdGVyYXRpbmcgb3ZlciB0aGUgYm91bmRzIG9mIHRoZSB0d28gaGlzdG9ncmFtcy4KKyAq IFRoaXMgbWF4aW1pemVzIHRoZSBjb2RlIHJldXNlLCBzaW5jZSB0aGUgQ0RGIGlzIGNvbXB1dGVk IHVzaW5nCisgKiB0aGUgY2FsY19oaXN0X3NlbGVjdGl2aXR5X3NjYWxhciBmdW5jdGlvbiwgd2hp Y2ggaXMgdGhlIGZ1bmN0aW9uIHVzZWQKKyAqIGZvciBzZWxlY3Rpdml0eSBlc3RpbWF0aW9uIChu b24tam9pbnMpLgorICoKKyAqLworc3RhdGljIGRvdWJsZQorY2FsY19oaXN0X2pvaW5fc2VsZWN0 aXZpdHkoVHlwZUNhY2hlRW50cnkgKnR5cGNhY2hlLAorCQkJCQkJICAgY29uc3QgUmFuZ2VCb3Vu ZCAqaGlzdDEsIGludCBuaGlzdDEsCisJCQkJCQkgICBjb25zdCBSYW5nZUJvdW5kICpoaXN0Miwg aW50IG5oaXN0MikKK3sKKwlpbnQJCQlpLAorCQkJCWo7CisJZG91YmxlCQlzZWxlY3Rpdml0eSwK KwkJCQljdXJfc2VsMSwKKwkJCQljdXJfc2VsMiwKKwkJCQlwcmV2X3NlbDEsCisJCQkJcHJldl9z ZWwyOworCVJhbmdlQm91bmQJY3VyX3N5bmM7CisKKwkvKgorCSAqIEhpc3RvZ3JhbXMgd2lsbCBu ZXZlciBiZSBlbXB0eS4gSW4gZmFjdCwgYSBoaXN0b2dyYW0gd2lsbCBuZXZlciBoYXZlCisJICog bGVzcyB0aGFuIDIgdmFsdWVzICgxIGJpbikKKwkgKi8KKwlBc3NlcnQobmhpc3QxID4gMSk7CisJ QXNzZXJ0KG5oaXN0MiA+IDEpOworCisJLyogRmFzdC1mb3J3YXJkcyBpIGFuZCBqIHRvIHN0YXJ0 IG9mIGl0ZXJhdGlvbiAqLworCWZvciAoaSA9IDA7IHJhbmdlX2NtcF9ib3VuZF92YWx1ZXModHlw Y2FjaGUsICZoaXN0MVtpXSwgJmhpc3QyWzBdKSA8IDA7IGkrKyk7CisJZm9yIChqID0gMDsgcmFu Z2VfY21wX2JvdW5kX3ZhbHVlcyh0eXBjYWNoZSwgJmhpc3QyW2pdLCAmaGlzdDFbMF0pIDwgMDsg aisrKTsKKworCWlmIChyYW5nZV9jbXBfYm91bmRfdmFsdWVzKHR5cGNhY2hlLCAmaGlzdDFbaV0s ICZoaXN0MltqXSkgPCAwKQorCQljdXJfc3luYyA9IGhpc3QxW2krK107CisJZWxzZSBpZiAocmFu Z2VfY21wX2JvdW5kX3ZhbHVlcyh0eXBjYWNoZSwgJmhpc3QxW2ldLCAmaGlzdDJbal0pID4gMCkK KwkJY3VyX3N5bmMgPSBoaXN0MltqKytdOworCWVsc2UKKwl7CisJCS8qIElmIGVxdWFsLCBza2lw IG9uZSAqLworCQljdXJfc3luYyA9IGhpc3QxW2ldOworCQlpKys7CisJCWorKzsKKwl9CisJcHJl dl9zZWwxID0gY2FsY19oaXN0X3NlbGVjdGl2aXR5X3NjYWxhcih0eXBjYWNoZSwgJmN1cl9zeW5j LAorCQkJCQkJCQkJCQkgaGlzdDEsIG5oaXN0MSwgZmFsc2UpOworCXByZXZfc2VsMiA9IGNhbGNf aGlzdF9zZWxlY3Rpdml0eV9zY2FsYXIodHlwY2FjaGUsICZjdXJfc3luYywKKwkJCQkJCQkJCQkJ IGhpc3QyLCBuaGlzdDIsIGZhbHNlKTsKKworCS8qCisJICogRG8gdGhlIGVzdGltYXRpb24gb24g b3ZlcmxhcHBpbmcgcmVnaW9uCisJICovCisJc2VsZWN0aXZpdHkgPSAwLjA7CisJd2hpbGUgKGkg PCBuaGlzdDEgJiYgaiA8IG5oaXN0MikKKwl7CisJCWlmIChyYW5nZV9jbXBfYm91bmRfdmFsdWVz KHR5cGNhY2hlLCAmaGlzdDFbaV0sICZoaXN0MltqXSkgPCAwKQorCQkJY3VyX3N5bmMgPSBoaXN0 MVtpKytdOworCQllbHNlIGlmIChyYW5nZV9jbXBfYm91bmRfdmFsdWVzKHR5cGNhY2hlLCAmaGlz dDFbaV0sICZoaXN0MltqXSkgPiAwKQorCQkJY3VyX3N5bmMgPSBoaXN0MltqKytdOworCQllbHNl CisJCXsKKwkJCS8qIElmIGVxdWFsLCBza2lwIG9uZSAqLworCQkJY3VyX3N5bmMgPSBoaXN0MVtp XTsKKwkJCWkrKzsKKwkJCWorKzsKKwkJfQorCQljdXJfc2VsMSA9IGNhbGNfaGlzdF9zZWxlY3Rp dml0eV9zY2FsYXIodHlwY2FjaGUsICZjdXJfc3luYywKKwkJCQkJCQkJCQkJCWhpc3QxLCBuaGlz dDEsIGZhbHNlKTsKKwkJY3VyX3NlbDIgPSBjYWxjX2hpc3Rfc2VsZWN0aXZpdHlfc2NhbGFyKHR5 cGNhY2hlLCAmY3VyX3N5bmMsCisJCQkJCQkJCQkJCQloaXN0Miwgbmhpc3QyLCBmYWxzZSk7CisK KwkJc2VsZWN0aXZpdHkgKz0gKHByZXZfc2VsMSArIGN1cl9zZWwxKSAqIChjdXJfc2VsMiAtIHBy ZXZfc2VsMik7CisKKwkJLyogUHJlcGFyZSBmb3IgdGhlIG5leHQgaXRlcmF0aW9uICovCisJCXBy ZXZfc2VsMSA9IGN1cl9zZWwxOworCQlwcmV2X3NlbDIgPSBjdXJfc2VsMjsKKwl9CisKKwkvKiBQ KFggPCBZKSA9IDAuNSAqIFN1bSguLi4pICovCisJc2VsZWN0aXZpdHkgLz0gMjsKKworCS8qIElu Y2x1ZGUgcmVtYWluZGVyIG9mIGhpc3QyIGlmIGFueSAqLworCWlmIChqIDwgbmhpc3QyKQorCQlz ZWxlY3Rpdml0eSArPSAxIC0gcHJldl9zZWwyOworCisJcmV0dXJuIHNlbGVjdGl2aXR5OworfQor CisvKgorICogcmFuZ2Vqb2luc2VsIC0tIGpvaW4gY2FyZGluYWxpdHkgZm9yIHJhbmdlIG9wZXJh dG9ycworICovCitEYXR1bQorcmFuZ2Vqb2luc2VsKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJUGxh bm5lckluZm8gKnJvb3QgPSAoUGxhbm5lckluZm8gKikgUEdfR0VUQVJHX1BPSU5URVIoMCk7CisJ T2lkCQkJb3BlcmF0b3IgPSBQR19HRVRBUkdfT0lEKDEpOworCUxpc3QJICAgKmFyZ3MgPSAoTGlz dCAqKSBQR19HRVRBUkdfUE9JTlRFUigyKTsKKwlTcGVjaWFsSm9pbkluZm8gKnNqaW5mbyA9IChT cGVjaWFsSm9pbkluZm8gKikgUEdfR0VUQVJHX1BPSU5URVIoNCk7CisJVmFyaWFibGVTdGF0RGF0 YSB2YXJkYXRhMSwKKwkJCQl2YXJkYXRhMjsKKwlBdHRTdGF0c1Nsb3QgaGlzdDEsCisJCQkJaGlz dDIsCisJCQkJc3Nsb3Q7CisJYm9vbAkJcmV2ZXJzZWQ7CisJU2VsZWN0aXZpdHkgc2VsZWM7CisJ VHlwZUNhY2hlRW50cnkgKnR5cGNhY2hlID0gTlVMTDsKKwlGb3JtX3BnX3N0YXRpc3RpYyBzdGF0 czEsCisJCQkJc3RhdHMyOworCWRvdWJsZQkJZW1wdHlfZnJhYzEsCisJCQkJZW1wdHlfZnJhYzIs CisJCQkJbnVsbF9mcmFjMSwKKwkJCQludWxsX2ZyYWMyOworCWludAkJCW5oaXN0MSwKKwkJCQlu aGlzdDI7CisJUmFuZ2VCb3VuZCAqaGlzdDFfbG93ZXIsCisJCQkgICAqaGlzdDFfdXBwZXIsCisJ CQkgICAqaGlzdDJfbG93ZXIsCisJCQkgICAqaGlzdDJfdXBwZXI7CisJYm9vbAkJZW1wdHk7CisJ aW50CQkJaTsKKworCWdldF9qb2luX3ZhcmlhYmxlcyhyb290LCBhcmdzLCBzamluZm8sICZ2YXJk YXRhMSwgJnZhcmRhdGEyLCAmcmV2ZXJzZWQpOworCisJc2VsZWMgPSBkZWZhdWx0X3JhbmdlX3Nl bGVjdGl2aXR5KG9wZXJhdG9yKTsKKworCWlmIChIZWFwVHVwbGVJc1ZhbGlkKHZhcmRhdGExLnN0 YXRzVHVwbGUpICYmCisJCWdldF9hdHRzdGF0c3Nsb3QoJmhpc3QxLCB2YXJkYXRhMS5zdGF0c1R1 cGxlLAorCQkJCQkJIFNUQVRJU1RJQ19LSU5EX0JPVU5EU19ISVNUT0dSQU0sIEludmFsaWRPaWQs CisJCQkJCQkgQVRUU1RBVFNTTE9UX1ZBTFVFUykgJiYKKwkJSGVhcFR1cGxlSXNWYWxpZCh2YXJk YXRhMi5zdGF0c1R1cGxlKSAmJgorCQlnZXRfYXR0c3RhdHNzbG90KCZoaXN0MiwgdmFyZGF0YTIu c3RhdHNUdXBsZSwKKwkJCQkJCSBTVEFUSVNUSUNfS0lORF9CT1VORFNfSElTVE9HUkFNLCBJbnZh bGlkT2lkLAorCQkJCQkJIEFUVFNUQVRTU0xPVF9WQUxVRVMpICYmCisJCXZhcmRhdGExLnZhcnR5 cGUgPT0gdmFyZGF0YTIudmFydHlwZSkKKwl7CisKKwkJLyogSW5pdGlhbGl6ZSB0eXBlIGNhY2hl ICovCisJCXR5cGNhY2hlID0gcmFuZ2VfZ2V0X3R5cGNhY2hlKGZjaW5mbywgdmFyZGF0YTEudmFy dHlwZSk7CisKKwkJLyoKKwkJICogRmlyc3QgbG9vayB1cCB0aGUgZnJhY3Rpb24gb2YgTlVMTHMg YW5kIGVtcHR5IHJhbmdlcyBmcm9tCisJCSAqIHBnX3N0YXRpc3RpYy4KKwkJICovCisJCXN0YXRz MSA9IChGb3JtX3BnX3N0YXRpc3RpYykgR0VUU1RSVUNUKHZhcmRhdGExLnN0YXRzVHVwbGUpOwor CQlzdGF0czIgPSAoRm9ybV9wZ19zdGF0aXN0aWMpIEdFVFNUUlVDVCh2YXJkYXRhMi5zdGF0c1R1 cGxlKTsKKworCQludWxsX2ZyYWMxID0gc3RhdHMxLT5zdGFudWxsZnJhYzsKKwkJbnVsbF9mcmFj MiA9IHN0YXRzMi0+c3RhbnVsbGZyYWM7CisKKwkJLyogVHJ5IHRvIGdldCBmcmFjdGlvbiBvZiBl bXB0eSByYW5nZXMgZm9yIHRoZSBmaXJzdCB2YXJpYWJsZSAqLworCQlpZiAoZ2V0X2F0dHN0YXRz c2xvdCgmc3Nsb3QsIHZhcmRhdGExLnN0YXRzVHVwbGUsCisJCQkJCQkJIFNUQVRJU1RJQ19LSU5E X1JBTkdFX0xFTkdUSF9ISVNUT0dSQU0sCisJCQkJCQkJIEludmFsaWRPaWQsCisJCQkJCQkJIEFU VFNUQVRTU0xPVF9OVU1CRVJTKSkKKwkJeworCQkJaWYgKHNzbG90Lm5udW1iZXJzICE9IDEpCS8q IHNob3VsZG4ndCBoYXBwZW4gKi8KKwkJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBlbXB0eSBmcmFj dGlvbiBzdGF0aXN0aWMiKTsKKwkJCWVtcHR5X2ZyYWMxID0gc3Nsb3QubnVtYmVyc1swXTsKKwkJ CWZyZWVfYXR0c3RhdHNzbG90KCZzc2xvdCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBObyBl bXB0eSBmcmFjdGlvbiBzdGF0aXN0aWMuIEFzc3VtZSBubyBlbXB0eSByYW5nZXMuICovCisJCQll bXB0eV9mcmFjMSA9IDAuMDsKKwkJfQorCisJCS8qIFRyeSB0byBnZXQgZnJhY3Rpb24gb2YgZW1w dHkgcmFuZ2VzIGZvciB0aGUgc2Vjb25kIHZhcmlhYmxlICovCisJCWlmIChnZXRfYXR0c3RhdHNz bG90KCZzc2xvdCwgdmFyZGF0YTIuc3RhdHNUdXBsZSwKKwkJCQkJCQkgU1RBVElTVElDX0tJTkRf UkFOR0VfTEVOR1RIX0hJU1RPR1JBTSwKKwkJCQkJCQkgSW52YWxpZE9pZCwKKwkJCQkJCQkgQVRU U1RBVFNTTE9UX05VTUJFUlMpKQorCQl7CisJCQlpZiAoc3Nsb3Qubm51bWJlcnMgIT0gMSkJLyog c2hvdWxkbid0IGhhcHBlbiAqLworCQkJCWVsb2coRVJST1IsICJpbnZhbGlkIGVtcHR5IGZyYWN0 aW9uIHN0YXRpc3RpYyIpOworCQkJZW1wdHlfZnJhYzIgPSBzc2xvdC5udW1iZXJzWzBdOworCQkJ ZnJlZV9hdHRzdGF0c3Nsb3QoJnNzbG90KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIE5vIGVt cHR5IGZyYWN0aW9uIHN0YXRpc3RpYy4gQXNzdW1lIG5vIGVtcHR5IHJhbmdlcy4gKi8KKwkJCWVt cHR5X2ZyYWMyID0gMC4wOworCQl9CisKKwkJLyoKKwkJICogQ29udmVydCBoaXN0b2dyYW1zIG9m IHJhbmdlcyBpbnRvIGhpc3RvZ3JhbXMgb2YgdGhlaXIgbG93ZXIgYW5kCisJCSAqIHVwcGVyIGJv dW5kcyBmb3IgdGhlIGZpcnN0IHZhcmlhYmxlLgorCQkgKi8KKwkJbmhpc3QxID0gaGlzdDEubnZh bHVlczsKKwkJaGlzdDFfbG93ZXIgPSAoUmFuZ2VCb3VuZCAqKSBwYWxsb2Moc2l6ZW9mKFJhbmdl Qm91bmQpICogbmhpc3QxKTsKKwkJaGlzdDFfdXBwZXIgPSAoUmFuZ2VCb3VuZCAqKSBwYWxsb2Mo c2l6ZW9mKFJhbmdlQm91bmQpICogbmhpc3QxKTsKKwkJZm9yIChpID0gMDsgaSA8IG5oaXN0MTsg aSsrKQorCQl7CisJCQlyYW5nZV9kZXNlcmlhbGl6ZSh0eXBjYWNoZSwgRGF0dW1HZXRSYW5nZVR5 cGVQKGhpc3QxLnZhbHVlc1tpXSksCisJCQkJCQkJICAmaGlzdDFfbG93ZXJbaV0sICZoaXN0MV91 cHBlcltpXSwgJmVtcHR5KTsKKwkJCS8qIFRoZSBoaXN0b2dyYW0gc2hvdWxkIG5vdCBjb250YWlu IGFueSBlbXB0eSByYW5nZXMgKi8KKwkJCWlmIChlbXB0eSkKKwkJCQllbG9nKEVSUk9SLCAiYm91 bmRzIGhpc3RvZ3JhbSBjb250YWlucyBhbiBlbXB0eSByYW5nZSIpOworCQl9CisKKwkJLyoKKwkJ ICogQ29udmVydCBoaXN0b2dyYW1zIG9mIHJhbmdlcyBpbnRvIGhpc3RvZ3JhbXMgb2YgdGhlaXIg bG93ZXIgYW5kCisJCSAqIHVwcGVyIGJvdW5kcyBmb3IgdGhlIHNlY29uZCB2YXJpYWJsZS4KKwkJ ICovCisJCW5oaXN0MiA9IGhpc3QyLm52YWx1ZXM7CisJCWhpc3QyX2xvd2VyID0gKFJhbmdlQm91 bmQgKikgcGFsbG9jKHNpemVvZihSYW5nZUJvdW5kKSAqIG5oaXN0Mik7CisJCWhpc3QyX3VwcGVy ID0gKFJhbmdlQm91bmQgKikgcGFsbG9jKHNpemVvZihSYW5nZUJvdW5kKSAqIG5oaXN0Mik7CisJ CWZvciAoaSA9IDA7IGkgPCBuaGlzdDI7IGkrKykKKwkJeworCQkJcmFuZ2VfZGVzZXJpYWxpemUo dHlwY2FjaGUsIERhdHVtR2V0UmFuZ2VUeXBlUChoaXN0Mi52YWx1ZXNbaV0pLAorCQkJCQkJCSAg Jmhpc3QyX2xvd2VyW2ldLCAmaGlzdDJfdXBwZXJbaV0sICZlbXB0eSk7CisJCQkvKiBUaGUgaGlz dG9ncmFtIHNob3VsZCBub3QgY29udGFpbiBhbnkgZW1wdHkgcmFuZ2VzICovCisJCQlpZiAoZW1w dHkpCisJCQkJZWxvZyhFUlJPUiwgImJvdW5kcyBoaXN0b2dyYW0gY29udGFpbnMgYW4gZW1wdHkg cmFuZ2UiKTsKKwkJfQorCisJCXN3aXRjaCAob3BlcmF0b3IpCisJCXsKKwkJCWNhc2UgT0lEX1JB TkdFX09WRVJMQVBfT1A6CisKKwkJCQkvKgorCQkJCSAqIFNlbGVjdGl2aXR5IG9mIEEgJiYgQiA9 IFNlbGVjdGl2aXR5IG9mIE5PVCggQSA8PCBCIHx8IEEgPj4KKwkJCQkgKiBCICkgPSAxIC0gU2Vs ZWN0aXZpdHkgb2YgKEEudXBwZXIgPCBCLmxvd2VyKSAtIFNlbGVjdGl2aXR5CisJCQkJICogb2Yg KEIudXBwZXIgPCBBLmxvd2VyKQorCQkJCSAqLworCQkJCXNlbGVjID0gMTsKKwkJCQlzZWxlYyAt PSBjYWxjX2hpc3Rfam9pbl9zZWxlY3Rpdml0eSh0eXBjYWNoZSwKKwkJCQkJCQkJCQkJCQloaXN0 MV91cHBlciwgbmhpc3QxLAorCQkJCQkJCQkJCQkJCWhpc3QyX2xvd2VyLCBuaGlzdDIpOworCQkJ CXNlbGVjIC09IGNhbGNfaGlzdF9qb2luX3NlbGVjdGl2aXR5KHR5cGNhY2hlLAorCQkJCQkJCQkJ CQkJCWhpc3QyX3VwcGVyLCBuaGlzdDIsCisJCQkJCQkJCQkJCQkJaGlzdDFfbG93ZXIsIG5oaXN0 MSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgT0lEX1JBTkdFX0xFU1NfRVFVQUxfT1A6CisKKwkJ CQkvKgorCQkJCSAqIEEgPD0gQgorCQkJCSAqCisJCQkJICogU3RhcnQgYnkgY29tcGFyaW5nIGxv d2VyIGJvdW5kcyBhbmQgaWYgdGhleSBhcmUgZXF1YWwKKwkJCQkgKiBjb21wYXJlIHVwcGVyIGJv dW5kcworCQkJCSAqCisJCQkJICogTmVnYXRpb24gb2YgT0lEX1JBTkdFX0dSRUFURVJfT1AuCisJ CQkJICoKKwkJCQkgKiBPdmVyZXN0aW1hdGUgYnkgY29tcGFyaW5nIG9ubHkgdGhlIGxvd2VyIGJv dW5kcy4gSGlnaGVyCisJCQkJICogYWNjdXJhY3kgd291bGQgcmVxdWlyZSB1cyB0byBzdWJ0cmFj dCBQKGxvd2VyMSA9IGxvd2VyMikgKgorCQkJCSAqIFAodXBwZXIxID4gdXBwZXIyKQorCQkJCSAq LworCQkJCXNlbGVjID0gMSAtIGNhbGNfaGlzdF9qb2luX3NlbGVjdGl2aXR5KHR5cGNhY2hlLAor CQkJCQkJCQkJCQkJCSAgIGhpc3QyX2xvd2VyLCBuaGlzdDIsCisJCQkJCQkJCQkJCQkJICAgaGlz dDFfbG93ZXIsIG5oaXN0MSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgT0lEX1JBTkdFX0xFU1Nf T1A6CisKKwkJCQkvKgorCQkJCSAqIEEgPCBCCisJCQkJICoKKwkJCQkgKiBTdGFydCBieSBjb21w YXJpbmcgbG93ZXIgYm91bmRzIGFuZCBpZiB0aGV5IGFyZSBlcXVhbAorCQkJCSAqIGNvbXBhcmUg dXBwZXIgYm91bmRzCisJCQkJICoKKwkJCQkgKiBVbmRlcmVzdGltYXRlIGJ5IGNvbXBhcmluZyBv bmx5IHRoZSBsb3dlciBib3VuZHMuIEhpZ2hlcgorCQkJCSAqIGFjY3VyYWN5IHdvdWxkIHJlcXVp cmUgdXMgdG8gYWRkIFAobG93ZXIxID0gbG93ZXIyKSAqCisJCQkJICogUCh1cHBlcjEgPCB1cHBl cjIpCisJCQkJICovCisJCQkJc2VsZWMgPSBjYWxjX2hpc3Rfam9pbl9zZWxlY3Rpdml0eSh0eXBj YWNoZSwKKwkJCQkJCQkJCQkJCSAgIGhpc3QxX2xvd2VyLCBuaGlzdDEsCisJCQkJCQkJCQkJCQkg ICBoaXN0Ml9sb3dlciwgbmhpc3QyKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBPSURfUkFOR0Vf R1JFQVRFUl9FUVVBTF9PUDoKKworCQkJCS8qCisJCQkJICogQSA+PSBCCisJCQkJICoKKwkJCQkg KiBTdGFydCBieSBjb21wYXJpbmcgbG93ZXIgYm91bmRzIGFuZCBpZiB0aGV5IGFyZSBlcXVhbAor CQkJCSAqIGNvbXBhcmUgdXBwZXIgYm91bmRzCisJCQkJICoKKwkJCQkgKiBOZWdhdGlvbiBvZiBP SURfUkFOR0VfTEVTU19PUC4KKwkJCQkgKgorCQkJCSAqIE92ZXJlc3RpbWF0ZSBieSBjb21wYXJp bmcgb25seSB0aGUgbG93ZXIgYm91bmRzLiBIaWdoZXIKKwkJCQkgKiBhY2N1cmFjeSB3b3VsZCBy ZXF1aXJlIHVzIHRvIGFkZCBQKGxvd2VyMSA9IGxvd2VyMikgKgorCQkJCSAqIFAodXBwZXIxIDwg dXBwZXIyKQorCQkJCSAqLworCQkJCXNlbGVjID0gMSAtIGNhbGNfaGlzdF9qb2luX3NlbGVjdGl2 aXR5KHR5cGNhY2hlLAorCQkJCQkJCQkJCQkJCSAgIGhpc3QxX2xvd2VyLCBuaGlzdDEsCisJCQkJ CQkJCQkJCQkJICAgaGlzdDJfbG93ZXIsIG5oaXN0Mik7CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug T0lEX1JBTkdFX0dSRUFURVJfT1A6CisKKwkJCQkvKgorCQkJCSAqIEEgPiBCID09IEIgPCBBCisJ CQkJICoKKwkJCQkgKiBTdGFydCBieSBjb21wYXJpbmcgbG93ZXIgYm91bmRzIGFuZCBpZiB0aGV5 IGFyZSBlcXVhbAorCQkJCSAqIGNvbXBhcmUgdXBwZXIgYm91bmRzCisJCQkJICoKKwkJCQkgKiBV bmRlcmVzdGltYXRlIGJ5IGNvbXBhcmluZyBvbmx5IHRoZSBsb3dlciBib3VuZHMuIEhpZ2hlcgor CQkJCSAqIGFjY3VyYWN5IHdvdWxkIHJlcXVpcmUgdXMgdG8gYWRkIFAobG93ZXIxID0gbG93ZXIy KSAqCisJCQkJICogUCh1cHBlcjEgPiB1cHBlcjIpCisJCQkJICovCisJCQkJc2VsZWMgPSBjYWxj X2hpc3Rfam9pbl9zZWxlY3Rpdml0eSh0eXBjYWNoZSwKKwkJCQkJCQkJCQkJCSAgIGhpc3QyX2xv d2VyLCBuaGlzdDIsCisJCQkJCQkJCQkJCQkgICBoaXN0MV9sb3dlciwgbmhpc3QxKTsKKwkJCQli cmVhazsKKworCQkJY2FzZSBPSURfUkFOR0VfTEVGVF9PUDoKKwkJCQkvKiB2YXIxIDw8IHZhcjIg d2hlbiB1cHBlcih2YXIxKSA8IGxvd2VyKHZhcjIpICovCisJCQkJc2VsZWMgPSBjYWxjX2hpc3Rf am9pbl9zZWxlY3Rpdml0eSh0eXBjYWNoZSwKKwkJCQkJCQkJCQkJCSAgIGhpc3QxX3VwcGVyLCBu aGlzdDEsCisJCQkJCQkJCQkJCQkgICBoaXN0Ml9sb3dlciwgbmhpc3QyKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBPSURfUkFOR0VfUklHSFRfT1A6CisJCQkJLyogdmFyMSA+PiB2YXIyIHdoZW4g dXBwZXIodmFyMikgPCBsb3dlcih2YXIxKSAqLworCQkJCXNlbGVjID0gY2FsY19oaXN0X2pvaW5f c2VsZWN0aXZpdHkodHlwY2FjaGUsCisJCQkJCQkJCQkJCQkgICBoaXN0Ml91cHBlciwgbmhpc3Qy LAorCQkJCQkJCQkJCQkJICAgaGlzdDFfbG93ZXIsIG5oaXN0MSk7CisJCQkJYnJlYWs7CisKKwkJ CWNhc2UgT0lEX1JBTkdFX09WRVJMQVBTX0xFRlRfT1A6CisJCQkJLyogdmFyMSAmPCB2YXIyIHdo ZW4gdXBwZXIodmFyMSkgPCB1cHBlcih2YXIyKSAqLworCQkJCXNlbGVjID0gY2FsY19oaXN0X2pv aW5fc2VsZWN0aXZpdHkodHlwY2FjaGUsCisJCQkJCQkJCQkJCQkgICBoaXN0MV91cHBlciwgbmhp c3QxLAorCQkJCQkJCQkJCQkJICAgaGlzdDJfdXBwZXIsIG5oaXN0Mik7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgT0lEX1JBTkdFX09WRVJMQVBTX1JJR0hUX09QOgorCQkJCS8qIHZhcjEgJj4gdmFy MiB3aGVuIGxvd2VyKHZhcjIpIDwgbG93ZXIodmFyMSkgKi8KKwkJCQlzZWxlYyA9IGNhbGNfaGlz dF9qb2luX3NlbGVjdGl2aXR5KHR5cGNhY2hlLAorCQkJCQkJCQkJCQkJICAgaGlzdDJfbG93ZXIs IG5oaXN0MiwKKwkJCQkJCQkJCQkJCSAgIGhpc3QxX2xvd2VyLCBuaGlzdDEpOworCQkJCWJyZWFr OworCisJCQljYXNlIE9JRF9SQU5HRV9DT05UQUlORURfT1A6CisKKwkJCQkvKgorCQkJCSAqIHZh cjEgPEAgdmFyMiBpcyBlcXVpdmFsZW50IHRvIGxvd2VyKHZhcjIpIDw9IGxvd2VyKHZhcjEpCisJ CQkJICogYW5kIHVwcGVyKHZhcjEpIDw9IHVwcGVyKHZhcjIpCisJCQkJICoKKwkJCQkgKiBBZnRl ciBuZWdhdGluZyBib3RoIHNpZGVzIHdlIGdldCBub3QoIGxvd2VyKHZhcjEpIDwKKwkJCQkgKiBs b3dlcih2YXIyKSApIGFuZCBub3QoIHVwcGVyKHZhcjIpIDwgdXBwZXIodmFyMSkgKSwKKwkJCQkg KiByZXNwZWN0aXZlbHkuIEFzc3VtaW5nIGluZGVwZW5kZW5jZSwgbXVsdGlwbHkgYm90aAorCQkJ CSAqIHNlbGVjdGl2aXRpZXMuCisJCQkJICovCisJCQkJc2VsZWMgPSAxIC0gY2FsY19oaXN0X2pv aW5fc2VsZWN0aXZpdHkodHlwY2FjaGUsCisJCQkJCQkJCQkJCQkJICAgaGlzdDFfbG93ZXIsIG5o aXN0MSwKKwkJCQkJCQkJCQkJCQkgICBoaXN0Ml9sb3dlciwgbmhpc3QyKTsKKwkJCQlzZWxlYyAq PSAxIC0gY2FsY19oaXN0X2pvaW5fc2VsZWN0aXZpdHkodHlwY2FjaGUsCisJCQkJCQkJCQkJCQkJ CWhpc3QyX3VwcGVyLCBuaGlzdDIsCisJCQkJCQkJCQkJCQkJCWhpc3QxX3VwcGVyLCBuaGlzdDEp OworCQkJCWJyZWFrOworCisJCQljYXNlIE9JRF9SQU5HRV9DT05UQUlOU19PUDoKKworCQkJCS8q CisJCQkJICogdmFyMSBAPiB2YXIyIGlzIGVxdWl2YWxlbnQgdG8gbG93ZXIodmFyMSkgPD0gbG93 ZXIodmFyMikKKwkJCQkgKiBhbmQgdXBwZXIodmFyMikgPD0gdXBwZXIodmFyMSkKKwkJCQkgKgor CQkJCSAqIEFmdGVyIG5lZ2F0aW5nIGJvdGggc2lkZXMgd2UgZ2V0IG5vdCggbG93ZXIodmFyMikg PAorCQkJCSAqIGxvd2VyKHZhcjEpICkgYW5kIG5vdCggdXBwZXIodmFyMSkgPCB1cHBlcih2YXIy KSApLAorCQkJCSAqIHJlc3BlY3RpdmVseS4gQXNzdW1pbmcgaW5kZXBlbmRlbmNlLCBtdWx0aXBs eSBib3RoCisJCQkJICogc2VsZWN0aXZpdGllcy4KKwkJCQkgKi8KKwkJCQlzZWxlYyA9IDEgLSBj YWxjX2hpc3Rfam9pbl9zZWxlY3Rpdml0eSh0eXBjYWNoZSwKKwkJCQkJCQkJCQkJCQkgICBoaXN0 Ml9sb3dlciwgbmhpc3QyLAorCQkJCQkJCQkJCQkJCSAgIGhpc3QxX2xvd2VyLCBuaGlzdDEpOwor CQkJCXNlbGVjICo9IDEgLSBjYWxjX2hpc3Rfam9pbl9zZWxlY3Rpdml0eSh0eXBjYWNoZSwKKwkJ CQkJCQkJCQkJCQkJaGlzdDFfdXBwZXIsIG5oaXN0MSwKKwkJCQkJCQkJCQkJCQkJaGlzdDJfdXBw ZXIsIG5oaXN0Mik7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgT0lEX1JBTkdFX0NPTlRBSU5TX0VM RU1fT1A6CisJCQljYXNlIE9JRF9SQU5HRV9FTEVNX0NPTlRBSU5FRF9PUDoKKworCQkJCS8qCisJ CQkJICoganVzdCBwdW50IGZvciBub3csIGVzdGltYXRpb24gd291bGQgcmVxdWlyZSBleHRyYWN0 aW9uIG9mCisJCQkJICogaGlzdG9ncmFtcyBmb3IgdGhlIGFueWVsZW1lbnQKKwkJCQkgKi8KKwkJ CWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCX0KKworCisJCS8qIHRoZSBjYWxjdWxhdGVkIHNlbGVj dGl2aXR5IG9ubHkgYXBwbGllcyB0byBub24tZW1wdHkgcmFuZ2VzICovCisJCXNlbGVjICo9ICgx IC0gZW1wdHlfZnJhYzEpICogKDEgLSBlbXB0eV9mcmFjMik7CisKKwkJLyoKKwkJICogRGVwZW5k aW5nIG9uIHRoZSBvcGVyYXRvciwgZW1wdHkgcmFuZ2VzIG1pZ2h0IG1hdGNoIGRpZmZlcmVudAor CQkgKiBmcmFjdGlvbnMgb2YgdGhlIHJlc3VsdC4KKwkJICovCisJCXN3aXRjaCAob3BlcmF0b3Ip CisJCXsKKwkJCWNhc2UgT0lEX1JBTkdFX0xFU1NfT1A6CisKKwkJCQkvKgorCQkJCSAqIGVtcHR5 IHJhbmdlIDwgbm9uLWVtcHR5IHJhbmdlCisJCQkJICovCisJCQkJc2VsZWMgKz0gZW1wdHlfZnJh YzEgKiAoMSAtIGVtcHR5X2ZyYWMyKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBPSURfUkFOR0Vf R1JFQVRFUl9PUDoKKworCQkJCS8qCisJCQkJICogbm9uLWVtcHR5IHJhbmdlID4gZW1wdHkgcmFu Z2UKKwkJCQkgKi8KKwkJCQlzZWxlYyArPSAoMSAtIGVtcHR5X2ZyYWMxKSAqIGVtcHR5X2ZyYWMy OworCQkJCWJyZWFrOworCisJCQljYXNlIE9JRF9SQU5HRV9DT05UQUlORURfT1A6CisKKwkJCQkv KgorCQkJCSAqIGVtcHR5IHJhbmdlIDxAIGFueSByYW5nZQorCQkJCSAqLworCQkJY2FzZSBPSURf UkFOR0VfTEVTU19FUVVBTF9PUDoKKworCQkJCS8qCisJCQkJICogZW1wdHkgcmFuZ2UgPD0gYW55 IHJhbmdlCisJCQkJICovCisJCQkJc2VsZWMgKz0gZW1wdHlfZnJhYzE7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgT0lEX1JBTkdFX0NPTlRBSU5TX09QOgorCisJCQkJLyoKKwkJCQkgKiBhbnkgcmFu Z2UgQD4gZW1wdHkgcmFuZ2UKKwkJCQkgKi8KKwkJCWNhc2UgT0lEX1JBTkdFX0dSRUFURVJfRVFV QUxfT1A6CisKKwkJCQkvKgorCQkJCSAqIGFueSByYW5nZSA+PSBlbXB0eSByYW5nZQorCQkJCSAq LworCQkJCXNlbGVjICs9IGVtcHR5X2ZyYWMyOworCQkJCWJyZWFrOworCisJCQljYXNlIE9JRF9S QU5HRV9DT05UQUlOU19FTEVNX09QOgorCQkJY2FzZSBPSURfUkFOR0VfRUxFTV9DT05UQUlORURf T1A6CisJCQljYXNlIE9JRF9SQU5HRV9PVkVSTEFQX09QOgorCQkJY2FzZSBPSURfUkFOR0VfT1ZF UkxBUFNfTEVGVF9PUDoKKwkJCWNhc2UgT0lEX1JBTkdFX09WRVJMQVBTX1JJR0hUX09QOgorCQkJ Y2FzZSBPSURfUkFOR0VfTEVGVF9PUDoKKwkJCWNhc2UgT0lEX1JBTkdFX1JJR0hUX09QOgorCQkJ ZGVmYXVsdDoKKworCQkJCS8qCisJCQkJICogdGhlc2Ugb3BlcmF0b3JzIGFsd2F5cyByZXR1cm4g ZmFsc2Ugd2hlbiBhbiBlbXB0eSByYW5nZSBpcworCQkJCSAqIGludm9sdmVkCisJCQkJICovCisJ CQkJYnJlYWs7CisKKwkJfQorCisJCS8qIGFsbCByYW5nZSBvcGVyYXRvcnMgYXJlIHN0cmljdCAq LworCQlzZWxlYyAqPSAoMSAtIG51bGxfZnJhYzEpICogKDEgLSBudWxsX2ZyYWMyKTsKKworCQlm cmVlX2F0dHN0YXRzc2xvdCgmaGlzdDEpOworCQlmcmVlX2F0dHN0YXRzc2xvdCgmaGlzdDIpOwor CX0KKworCVJlbGVhc2VWYXJpYWJsZVN0YXRzKHZhcmRhdGExKTsKKwlSZWxlYXNlVmFyaWFibGVT dGF0cyh2YXJkYXRhMik7CisKKwlDTEFNUF9QUk9CQUJJTElUWShzZWxlYyk7CisKKwlQR19SRVRV Uk5fRkxPQVQ4KChmbG9hdDgpIHNlbGVjKTsKKworfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19vcGVyYXRvci5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29wZXJhdG9y LmRhdAppbmRleCBiMmNkZWE2NmM0Li5kMDRmYzY5MmI1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX29wZXJhdG9yLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29w ZXJhdG9yLmRhdApAQCAtMzA3MSw3OCArMzA3MSw3OCBAQAogICBvcHJuYW1lID0+ICc8Jywgb3By bGVmdCA9PiAnYW55cmFuZ2UnLCBvcHJyaWdodCA9PiAnYW55cmFuZ2UnLAogICBvcHJyZXN1bHQg PT4gJ2Jvb2wnLCBvcHJjb20gPT4gJz4oYW55cmFuZ2UsYW55cmFuZ2UpJywKICAgb3BybmVnYXRl ID0+ICc+PShhbnlyYW5nZSxhbnlyYW5nZSknLCBvcHJjb2RlID0+ICdyYW5nZV9sdCcsCi0gIG9w cnJlc3QgPT4gJ3Jhbmdlc2VsJywgb3Byam9pbiA9PiAnc2NhbGFybHRqb2luc2VsJyB9LAorICBv cHJyZXN0ID0+ICdyYW5nZXNlbCcsIG9wcmpvaW4gPT4gJ3Jhbmdlam9pbnNlbCcgfSwKIHsgb2lk ID0+ICczODg1Jywgb2lkX3N5bWJvbCA9PiAnT0lEX1JBTkdFX0xFU1NfRVFVQUxfT1AnLAogICBk ZXNjciA9PiAnbGVzcyB0aGFuIG9yIGVxdWFsJywKICAgb3BybmFtZSA9PiAnPD0nLCBvcHJsZWZ0 ID0+ICdhbnlyYW5nZScsIG9wcnJpZ2h0ID0+ICdhbnlyYW5nZScsCiAgIG9wcnJlc3VsdCA9PiAn Ym9vbCcsIG9wcmNvbSA9PiAnPj0oYW55cmFuZ2UsYW55cmFuZ2UpJywKICAgb3BybmVnYXRlID0+ ICc+KGFueXJhbmdlLGFueXJhbmdlKScsIG9wcmNvZGUgPT4gJ3JhbmdlX2xlJywKLSAgb3BycmVz dCA9PiAncmFuZ2VzZWwnLCBvcHJqb2luID0+ICdzY2FsYXJsZWpvaW5zZWwnIH0sCisgIG9wcnJl c3QgPT4gJ3Jhbmdlc2VsJywgb3Byam9pbiA9PiAncmFuZ2Vqb2luc2VsJyB9LAogeyBvaWQgPT4g JzM4ODYnLCBvaWRfc3ltYm9sID0+ICdPSURfUkFOR0VfR1JFQVRFUl9FUVVBTF9PUCcsCiAgIGRl c2NyID0+ICdncmVhdGVyIHRoYW4gb3IgZXF1YWwnLAogICBvcHJuYW1lID0+ICc+PScsIG9wcmxl ZnQgPT4gJ2FueXJhbmdlJywgb3BycmlnaHQgPT4gJ2FueXJhbmdlJywKICAgb3BycmVzdWx0ID0+ ICdib29sJywgb3ByY29tID0+ICc8PShhbnlyYW5nZSxhbnlyYW5nZSknLAogICBvcHJuZWdhdGUg PT4gJzwoYW55cmFuZ2UsYW55cmFuZ2UpJywgb3ByY29kZSA9PiAncmFuZ2VfZ2UnLAotICBvcHJy ZXN0ID0+ICdyYW5nZXNlbCcsIG9wcmpvaW4gPT4gJ3NjYWxhcmdlam9pbnNlbCcgfSwKKyAgb3By cmVzdCA9PiAncmFuZ2VzZWwnLCBvcHJqb2luID0+ICdyYW5nZWpvaW5zZWwnIH0sCiB7IG9pZCA9 PiAnMzg4NycsIG9pZF9zeW1ib2wgPT4gJ09JRF9SQU5HRV9HUkVBVEVSX09QJywKICAgZGVzY3Ig PT4gJ2dyZWF0ZXIgdGhhbicsCiAgIG9wcm5hbWUgPT4gJz4nLCBvcHJsZWZ0ID0+ICdhbnlyYW5n ZScsIG9wcnJpZ2h0ID0+ICdhbnlyYW5nZScsCiAgIG9wcnJlc3VsdCA9PiAnYm9vbCcsIG9wcmNv bSA9PiAnPChhbnlyYW5nZSxhbnlyYW5nZSknLAogICBvcHJuZWdhdGUgPT4gJzw9KGFueXJhbmdl LGFueXJhbmdlKScsIG9wcmNvZGUgPT4gJ3JhbmdlX2d0JywKLSAgb3BycmVzdCA9PiAncmFuZ2Vz ZWwnLCBvcHJqb2luID0+ICdzY2FsYXJndGpvaW5zZWwnIH0sCisgIG9wcnJlc3QgPT4gJ3Jhbmdl c2VsJywgb3Byam9pbiA9PiAncmFuZ2Vqb2luc2VsJyB9LAogeyBvaWQgPT4gJzM4ODgnLCBvaWRf c3ltYm9sID0+ICdPSURfUkFOR0VfT1ZFUkxBUF9PUCcsIGRlc2NyID0+ICdvdmVybGFwcycsCiAg IG9wcm5hbWUgPT4gJyYmJywgb3BybGVmdCA9PiAnYW55cmFuZ2UnLCBvcHJyaWdodCA9PiAnYW55 cmFuZ2UnLAogICBvcHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20gPT4gJyYmKGFueXJhbmdlLGFu eXJhbmdlKScsCiAgIG9wcmNvZGUgPT4gJ3JhbmdlX292ZXJsYXBzJywgb3BycmVzdCA9PiAncmFu Z2VzZWwnLAotICBvcHJqb2luID0+ICdhcmVham9pbnNlbCcgfSwKKyAgb3Byam9pbiA9PiAncmFu Z2Vqb2luc2VsJyB9LAogeyBvaWQgPT4gJzM4ODknLCBvaWRfc3ltYm9sID0+ICdPSURfUkFOR0Vf Q09OVEFJTlNfRUxFTV9PUCcsCiAgIGRlc2NyID0+ICdjb250YWlucycsCiAgIG9wcm5hbWUgPT4g J0A+Jywgb3BybGVmdCA9PiAnYW55cmFuZ2UnLCBvcHJyaWdodCA9PiAnYW55ZWxlbWVudCcsCiAg IG9wcnJlc3VsdCA9PiAnYm9vbCcsIG9wcmNvbSA9PiAnPEAoYW55ZWxlbWVudCxhbnlyYW5nZSkn LAogICBvcHJjb2RlID0+ICdyYW5nZV9jb250YWluc19lbGVtJywgb3BycmVzdCA9PiAncmFuZ2Vz ZWwnLAotICBvcHJqb2luID0+ICdjb250am9pbnNlbCcgfSwKKyAgb3Byam9pbiA9PiAncmFuZ2Vq b2luc2VsJyB9LAogeyBvaWQgPT4gJzM4OTAnLCBvaWRfc3ltYm9sID0+ICdPSURfUkFOR0VfQ09O VEFJTlNfT1AnLCBkZXNjciA9PiAnY29udGFpbnMnLAogICBvcHJuYW1lID0+ICdAPicsIG9wcmxl ZnQgPT4gJ2FueXJhbmdlJywgb3BycmlnaHQgPT4gJ2FueXJhbmdlJywKICAgb3BycmVzdWx0ID0+ ICdib29sJywgb3ByY29tID0+ICc8QChhbnlyYW5nZSxhbnlyYW5nZSknLAogICBvcHJjb2RlID0+ ICdyYW5nZV9jb250YWlucycsIG9wcnJlc3QgPT4gJ3Jhbmdlc2VsJywKLSAgb3Byam9pbiA9PiAn Y29udGpvaW5zZWwnIH0sCisgIG9wcmpvaW4gPT4gJ3Jhbmdlam9pbnNlbCcgfSwKIHsgb2lkID0+ ICczODkxJywgb2lkX3N5bWJvbCA9PiAnT0lEX1JBTkdFX0VMRU1fQ09OVEFJTkVEX09QJywKICAg ZGVzY3IgPT4gJ2lzIGNvbnRhaW5lZCBieScsCiAgIG9wcm5hbWUgPT4gJzxAJywgb3BybGVmdCA9 PiAnYW55ZWxlbWVudCcsIG9wcnJpZ2h0ID0+ICdhbnlyYW5nZScsCiAgIG9wcnJlc3VsdCA9PiAn Ym9vbCcsIG9wcmNvbSA9PiAnQD4oYW55cmFuZ2UsYW55ZWxlbWVudCknLAogICBvcHJjb2RlID0+ ICdlbGVtX2NvbnRhaW5lZF9ieV9yYW5nZScsIG9wcnJlc3QgPT4gJ3Jhbmdlc2VsJywKLSAgb3By am9pbiA9PiAnY29udGpvaW5zZWwnIH0sCisgIG9wcmpvaW4gPT4gJ3Jhbmdlam9pbnNlbCcgfSwK IHsgb2lkID0+ICczODkyJywgb2lkX3N5bWJvbCA9PiAnT0lEX1JBTkdFX0NPTlRBSU5FRF9PUCcs CiAgIGRlc2NyID0+ICdpcyBjb250YWluZWQgYnknLAogICBvcHJuYW1lID0+ICc8QCcsIG9wcmxl ZnQgPT4gJ2FueXJhbmdlJywgb3BycmlnaHQgPT4gJ2FueXJhbmdlJywKICAgb3BycmVzdWx0ID0+ ICdib29sJywgb3ByY29tID0+ICdAPihhbnlyYW5nZSxhbnlyYW5nZSknLAogICBvcHJjb2RlID0+ ICdyYW5nZV9jb250YWluZWRfYnknLCBvcHJyZXN0ID0+ICdyYW5nZXNlbCcsCi0gIG9wcmpvaW4g PT4gJ2NvbnRqb2luc2VsJyB9LAorICBvcHJqb2luID0+ICdyYW5nZWpvaW5zZWwnIH0sCiB7IG9p ZCA9PiAnMzg5MycsIG9pZF9zeW1ib2wgPT4gJ09JRF9SQU5HRV9MRUZUX09QJywgZGVzY3IgPT4g J2lzIGxlZnQgb2YnLAogICBvcHJuYW1lID0+ICc8PCcsIG9wcmxlZnQgPT4gJ2FueXJhbmdlJywg b3BycmlnaHQgPT4gJ2FueXJhbmdlJywKICAgb3BycmVzdWx0ID0+ICdib29sJywgb3ByY29tID0+ ICc+PihhbnlyYW5nZSxhbnlyYW5nZSknLAogICBvcHJjb2RlID0+ICdyYW5nZV9iZWZvcmUnLCBv cHJyZXN0ID0+ICdyYW5nZXNlbCcsCi0gIG9wcmpvaW4gPT4gJ3NjYWxhcmx0am9pbnNlbCcgfSwK KyAgb3Byam9pbiA9PiAncmFuZ2Vqb2luc2VsJyB9LAogeyBvaWQgPT4gJzM4OTQnLCBvaWRfc3lt Ym9sID0+ICdPSURfUkFOR0VfUklHSFRfT1AnLCBkZXNjciA9PiAnaXMgcmlnaHQgb2YnLAogICBv cHJuYW1lID0+ICc+PicsIG9wcmxlZnQgPT4gJ2FueXJhbmdlJywgb3BycmlnaHQgPT4gJ2FueXJh bmdlJywKICAgb3BycmVzdWx0ID0+ICdib29sJywgb3ByY29tID0+ICc8PChhbnlyYW5nZSxhbnly YW5nZSknLAogICBvcHJjb2RlID0+ICdyYW5nZV9hZnRlcicsIG9wcnJlc3QgPT4gJ3Jhbmdlc2Vs JywKLSAgb3Byam9pbiA9PiAnc2NhbGFyZ3Rqb2luc2VsJyB9LAorICBvcHJqb2luID0+ICdyYW5n ZWpvaW5zZWwnIH0sCiB7IG9pZCA9PiAnMzg5NScsIG9pZF9zeW1ib2wgPT4gJ09JRF9SQU5HRV9P VkVSTEFQU19MRUZUX09QJywKICAgZGVzY3IgPT4gJ292ZXJsYXBzIG9yIGlzIGxlZnQgb2YnLAog ICBvcHJuYW1lID0+ICcmPCcsIG9wcmxlZnQgPT4gJ2FueXJhbmdlJywgb3BycmlnaHQgPT4gJ2Fu eXJhbmdlJywKICAgb3BycmVzdWx0ID0+ICdib29sJywgb3ByY29kZSA9PiAncmFuZ2Vfb3Zlcmxl ZnQnLCBvcHJyZXN0ID0+ICdyYW5nZXNlbCcsCi0gIG9wcmpvaW4gPT4gJ3NjYWxhcmx0am9pbnNl bCcgfSwKKyAgb3Byam9pbiA9PiAncmFuZ2Vqb2luc2VsJyB9LAogeyBvaWQgPT4gJzM4OTYnLCBv aWRfc3ltYm9sID0+ICdPSURfUkFOR0VfT1ZFUkxBUFNfUklHSFRfT1AnLAogICBkZXNjciA9PiAn b3ZlcmxhcHMgb3IgaXMgcmlnaHQgb2YnLAogICBvcHJuYW1lID0+ICcmPicsIG9wcmxlZnQgPT4g J2FueXJhbmdlJywgb3BycmlnaHQgPT4gJ2FueXJhbmdlJywKICAgb3BycmVzdWx0ID0+ICdib29s Jywgb3ByY29kZSA9PiAncmFuZ2Vfb3ZlcnJpZ2h0Jywgb3BycmVzdCA9PiAncmFuZ2VzZWwnLAot ICBvcHJqb2luID0+ICdzY2FsYXJndGpvaW5zZWwnIH0sCisgIG9wcmpvaW4gPT4gJ3Jhbmdlam9p bnNlbCcgfSwKIHsgb2lkID0+ICczODk3JywgZGVzY3IgPT4gJ2lzIGFkamFjZW50IHRvJywKICAg b3BybmFtZSA9PiAnLXwtJywgb3BybGVmdCA9PiAnYW55cmFuZ2UnLCBvcHJyaWdodCA9PiAnYW55 cmFuZ2UnLAogICBvcHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20gPT4gJy18LShhbnlyYW5nZSxh bnlyYW5nZSknLAogICBvcHJjb2RlID0+ICdyYW5nZV9hZGphY2VudCcsIG9wcnJlc3QgPT4gJ21h dGNoaW5nc2VsJywKLSAgb3Byam9pbiA9PiAnbWF0Y2hpbmdqb2luc2VsJyB9LAorICBvcHJqb2lu ID0+ICdyYW5nZWpvaW5zZWwnIH0sCiB7IG9pZCA9PiAnMzg5OCcsIGRlc2NyID0+ICdyYW5nZSB1 bmlvbicsCiAgIG9wcm5hbWUgPT4gJysnLCBvcHJsZWZ0ID0+ICdhbnlyYW5nZScsIG9wcnJpZ2h0 ID0+ICdhbnlyYW5nZScsCiAgIG9wcnJlc3VsdCA9PiAnYW55cmFuZ2UnLCBvcHJjb20gPT4gJyso YW55cmFuZ2UsYW55cmFuZ2UpJywKQEAgLTMyNzcsMTM5ICszMjc3LDEzOSBAQAogICBvcHJuYW1l ID0+ICc8Jywgb3BybGVmdCA9PiAnYW55bXVsdGlyYW5nZScsIG9wcnJpZ2h0ID0+ICdhbnltdWx0 aXJhbmdlJywKICAgb3BycmVzdWx0ID0+ICdib29sJywgb3ByY29tID0+ICc+KGFueW11bHRpcmFu Z2UsYW55bXVsdGlyYW5nZSknLAogICBvcHJuZWdhdGUgPT4gJz49KGFueW11bHRpcmFuZ2UsYW55 bXVsdGlyYW5nZSknLCBvcHJjb2RlID0+ICdtdWx0aXJhbmdlX2x0JywKLSAgb3BycmVzdCA9PiAn bXVsdGlyYW5nZXNlbCcsIG9wcmpvaW4gPT4gJ3NjYWxhcmx0am9pbnNlbCcgfSwKKyAgb3BycmVz dCA9PiAnbXVsdGlyYW5nZXNlbCcsIG9wcmpvaW4gPT4gJ211bHRpcmFuZ2Vqb2luc2VsJyB9LAog eyBvaWQgPT4gJzI4NjMnLCBvaWRfc3ltYm9sID0+ICdPSURfTVVMVElSQU5HRV9MRVNTX0VRVUFM X09QJywKICAgZGVzY3IgPT4gJ2xlc3MgdGhhbiBvciBlcXVhbCcsCiAgIG9wcm5hbWUgPT4gJzw9 Jywgb3BybGVmdCA9PiAnYW55bXVsdGlyYW5nZScsIG9wcnJpZ2h0ID0+ICdhbnltdWx0aXJhbmdl JywKICAgb3BycmVzdWx0ID0+ICdib29sJywgb3ByY29tID0+ICc+PShhbnltdWx0aXJhbmdlLGFu eW11bHRpcmFuZ2UpJywKICAgb3BybmVnYXRlID0+ICc+KGFueW11bHRpcmFuZ2UsYW55bXVsdGly YW5nZSknLCBvcHJjb2RlID0+ICdtdWx0aXJhbmdlX2xlJywKLSAgb3BycmVzdCA9PiAnbXVsdGly YW5nZXNlbCcsIG9wcmpvaW4gPT4gJ3NjYWxhcmxlam9pbnNlbCcgfSwKKyAgb3BycmVzdCA9PiAn bXVsdGlyYW5nZXNlbCcsIG9wcmpvaW4gPT4gJ211bHRpcmFuZ2Vqb2luc2VsJyB9LAogeyBvaWQg PT4gJzI4NjQnLCBvaWRfc3ltYm9sID0+ICdPSURfTVVMVElSQU5HRV9HUkVBVEVSX0VRVUFMX09Q JywKICAgZGVzY3IgPT4gJ2dyZWF0ZXIgdGhhbiBvciBlcXVhbCcsCiAgIG9wcm5hbWUgPT4gJz49 Jywgb3BybGVmdCA9PiAnYW55bXVsdGlyYW5nZScsIG9wcnJpZ2h0ID0+ICdhbnltdWx0aXJhbmdl JywKICAgb3BycmVzdWx0ID0+ICdib29sJywgb3ByY29tID0+ICc8PShhbnltdWx0aXJhbmdlLGFu eW11bHRpcmFuZ2UpJywKICAgb3BybmVnYXRlID0+ICc8KGFueW11bHRpcmFuZ2UsYW55bXVsdGly YW5nZSknLCBvcHJjb2RlID0+ICdtdWx0aXJhbmdlX2dlJywKLSAgb3BycmVzdCA9PiAnbXVsdGly YW5nZXNlbCcsIG9wcmpvaW4gPT4gJ3NjYWxhcmdlam9pbnNlbCcgfSwKKyAgb3BycmVzdCA9PiAn bXVsdGlyYW5nZXNlbCcsIG9wcmpvaW4gPT4gJ211bHRpcmFuZ2Vqb2luc2VsJyB9LAogeyBvaWQg PT4gJzI4NjUnLCBvaWRfc3ltYm9sID0+ICdPSURfTVVMVElSQU5HRV9HUkVBVEVSX09QJywKICAg ZGVzY3IgPT4gJ2dyZWF0ZXIgdGhhbicsCiAgIG9wcm5hbWUgPT4gJz4nLCBvcHJsZWZ0ID0+ICdh bnltdWx0aXJhbmdlJywgb3BycmlnaHQgPT4gJ2FueW11bHRpcmFuZ2UnLAogICBvcHJyZXN1bHQg PT4gJ2Jvb2wnLCBvcHJjb20gPT4gJzwoYW55bXVsdGlyYW5nZSxhbnltdWx0aXJhbmdlKScsCiAg IG9wcm5lZ2F0ZSA9PiAnPD0oYW55bXVsdGlyYW5nZSxhbnltdWx0aXJhbmdlKScsIG9wcmNvZGUg PT4gJ211bHRpcmFuZ2VfZ3QnLAotICBvcHJyZXN0ID0+ICdtdWx0aXJhbmdlc2VsJywgb3Byam9p biA9PiAnc2NhbGFyZ3Rqb2luc2VsJyB9LAorICBvcHJyZXN0ID0+ICdtdWx0aXJhbmdlc2VsJywg b3Byam9pbiA9PiAnbXVsdGlyYW5nZWpvaW5zZWwnIH0sCiB7IG9pZCA9PiAnMjg2NicsIG9pZF9z eW1ib2wgPT4gJ09JRF9SQU5HRV9PVkVSTEFQU19NVUxUSVJBTkdFX09QJywKICAgZGVzY3IgPT4g J292ZXJsYXBzJywKICAgb3BybmFtZSA9PiAnJiYnLCBvcHJsZWZ0ID0+ICdhbnlyYW5nZScsIG9w cnJpZ2h0ID0+ICdhbnltdWx0aXJhbmdlJywKICAgb3BycmVzdWx0ID0+ICdib29sJywgb3ByY29t ID0+ICcmJihhbnltdWx0aXJhbmdlLGFueXJhbmdlKScsCiAgIG9wcmNvZGUgPT4gJ3JhbmdlX292 ZXJsYXBzX211bHRpcmFuZ2UnLCBvcHJyZXN0ID0+ICdtdWx0aXJhbmdlc2VsJywKLSAgb3Byam9p biA9PiAnYXJlYWpvaW5zZWwnIH0sCisgIG9wcmpvaW4gPT4gJ211bHRpcmFuZ2Vqb2luc2VsJyB9 LAogeyBvaWQgPT4gJzI4NjcnLCBvaWRfc3ltYm9sID0+ICdPSURfTVVMVElSQU5HRV9PVkVSTEFQ U19SQU5HRV9PUCcsCiAgIGRlc2NyID0+ICdvdmVybGFwcycsCiAgIG9wcm5hbWUgPT4gJyYmJywg b3BybGVmdCA9PiAnYW55bXVsdGlyYW5nZScsIG9wcnJpZ2h0ID0+ICdhbnlyYW5nZScsCiAgIG9w cnJlc3VsdCA9PiAnYm9vbCcsIG9wcmNvbSA9PiAnJiYoYW55cmFuZ2UsYW55bXVsdGlyYW5nZSkn LAogICBvcHJjb2RlID0+ICdtdWx0aXJhbmdlX292ZXJsYXBzX3JhbmdlJywgb3BycmVzdCA9PiAn bXVsdGlyYW5nZXNlbCcsCi0gIG9wcmpvaW4gPT4gJ2FyZWFqb2luc2VsJyB9LAorICBvcHJqb2lu ID0+ICdtdWx0aXJhbmdlam9pbnNlbCcgfSwKIHsgb2lkID0+ICcyODY4Jywgb2lkX3N5bWJvbCA9 PiAnT0lEX01VTFRJUkFOR0VfT1ZFUkxBUFNfTVVMVElSQU5HRV9PUCcsCiAgIGRlc2NyID0+ICdv dmVybGFwcycsCiAgIG9wcm5hbWUgPT4gJyYmJywgb3BybGVmdCA9PiAnYW55bXVsdGlyYW5nZScs IG9wcnJpZ2h0ID0+ICdhbnltdWx0aXJhbmdlJywKICAgb3BycmVzdWx0ID0+ICdib29sJywgb3By Y29tID0+ICcmJihhbnltdWx0aXJhbmdlLGFueW11bHRpcmFuZ2UpJywKICAgb3ByY29kZSA9PiAn bXVsdGlyYW5nZV9vdmVybGFwc19tdWx0aXJhbmdlJywgb3BycmVzdCA9PiAnbXVsdGlyYW5nZXNl bCcsCi0gIG9wcmpvaW4gPT4gJ2FyZWFqb2luc2VsJyB9LAorICBvcHJqb2luID0+ICdtdWx0aXJh bmdlam9pbnNlbCcgfSwKIHsgb2lkID0+ICcyODY5Jywgb2lkX3N5bWJvbCA9PiAnT0lEX01VTFRJ UkFOR0VfQ09OVEFJTlNfRUxFTV9PUCcsCiAgIGRlc2NyID0+ICdjb250YWlucycsCiAgIG9wcm5h bWUgPT4gJ0A+Jywgb3BybGVmdCA9PiAnYW55bXVsdGlyYW5nZScsIG9wcnJpZ2h0ID0+ICdhbnll bGVtZW50JywKICAgb3BycmVzdWx0ID0+ICdib29sJywgb3ByY29tID0+ICc8QChhbnllbGVtZW50 LGFueW11bHRpcmFuZ2UpJywKICAgb3ByY29kZSA9PiAnbXVsdGlyYW5nZV9jb250YWluc19lbGVt Jywgb3BycmVzdCA9PiAnbXVsdGlyYW5nZXNlbCcsCi0gIG9wcmpvaW4gPT4gJ2NvbnRqb2luc2Vs JyB9LAorICBvcHJqb2luID0+ICdtdWx0aXJhbmdlam9pbnNlbCcgfSwKIHsgb2lkID0+ICcyODcw Jywgb2lkX3N5bWJvbCA9PiAnT0lEX01VTFRJUkFOR0VfQ09OVEFJTlNfUkFOR0VfT1AnLAogICBk ZXNjciA9PiAnY29udGFpbnMnLAogICBvcHJuYW1lID0+ICdAPicsIG9wcmxlZnQgPT4gJ2FueW11 bHRpcmFuZ2UnLCBvcHJyaWdodCA9PiAnYW55cmFuZ2UnLAogICBvcHJyZXN1bHQgPT4gJ2Jvb2wn LCBvcHJjb20gPT4gJzxAKGFueXJhbmdlLGFueW11bHRpcmFuZ2UpJywKICAgb3ByY29kZSA9PiAn bXVsdGlyYW5nZV9jb250YWluc19yYW5nZScsIG9wcnJlc3QgPT4gJ211bHRpcmFuZ2VzZWwnLAot ICBvcHJqb2luID0+ICdjb250am9pbnNlbCcgfSwKKyAgb3Byam9pbiA9PiAnbXVsdGlyYW5nZWpv aW5zZWwnIH0sCiB7IG9pZCA9PiAnMjg3MScsIG9pZF9zeW1ib2wgPT4gJ09JRF9NVUxUSVJBTkdF X0NPTlRBSU5TX01VTFRJUkFOR0VfT1AnLAogICBkZXNjciA9PiAnY29udGFpbnMnLAogICBvcHJu YW1lID0+ICdAPicsIG9wcmxlZnQgPT4gJ2FueW11bHRpcmFuZ2UnLCBvcHJyaWdodCA9PiAnYW55 bXVsdGlyYW5nZScsCiAgIG9wcnJlc3VsdCA9PiAnYm9vbCcsIG9wcmNvbSA9PiAnPEAoYW55bXVs dGlyYW5nZSxhbnltdWx0aXJhbmdlKScsCiAgIG9wcmNvZGUgPT4gJ211bHRpcmFuZ2VfY29udGFp bnNfbXVsdGlyYW5nZScsIG9wcnJlc3QgPT4gJ211bHRpcmFuZ2VzZWwnLAotICBvcHJqb2luID0+ ICdjb250am9pbnNlbCcgfSwKKyAgb3Byam9pbiA9PiAnbXVsdGlyYW5nZWpvaW5zZWwnIH0sCiB7 IG9pZCA9PiAnMjg3MicsIG9pZF9zeW1ib2wgPT4gJ09JRF9NVUxUSVJBTkdFX0VMRU1fQ09OVEFJ TkVEX09QJywKICAgZGVzY3IgPT4gJ2lzIGNvbnRhaW5lZCBieScsCiAgIG9wcm5hbWUgPT4gJzxA Jywgb3BybGVmdCA9PiAnYW55ZWxlbWVudCcsIG9wcnJpZ2h0ID0+ICdhbnltdWx0aXJhbmdlJywK ICAgb3BycmVzdWx0ID0+ICdib29sJywgb3ByY29tID0+ICdAPihhbnltdWx0aXJhbmdlLGFueWVs ZW1lbnQpJywKICAgb3ByY29kZSA9PiAnZWxlbV9jb250YWluZWRfYnlfbXVsdGlyYW5nZScsIG9w cnJlc3QgPT4gJ211bHRpcmFuZ2VzZWwnLAotICBvcHJqb2luID0+ICdjb250am9pbnNlbCcgfSwK KyAgb3Byam9pbiA9PiAnbXVsdGlyYW5nZWpvaW5zZWwnIH0sCiB7IG9pZCA9PiAnMjg3MycsIG9p ZF9zeW1ib2wgPT4gJ09JRF9NVUxUSVJBTkdFX1JBTkdFX0NPTlRBSU5FRF9PUCcsCiAgIGRlc2Ny ID0+ICdpcyBjb250YWluZWQgYnknLAogICBvcHJuYW1lID0+ICc8QCcsIG9wcmxlZnQgPT4gJ2Fu eXJhbmdlJywgb3BycmlnaHQgPT4gJ2FueW11bHRpcmFuZ2UnLAogICBvcHJyZXN1bHQgPT4gJ2Jv b2wnLCBvcHJjb20gPT4gJ0A+KGFueW11bHRpcmFuZ2UsYW55cmFuZ2UpJywKICAgb3ByY29kZSA9 PiAncmFuZ2VfY29udGFpbmVkX2J5X211bHRpcmFuZ2UnLCBvcHJyZXN0ID0+ICdtdWx0aXJhbmdl c2VsJywKLSAgb3Byam9pbiA9PiAnY29udGpvaW5zZWwnIH0sCisgIG9wcmpvaW4gPT4gJ211bHRp cmFuZ2Vqb2luc2VsJyB9LAogeyBvaWQgPT4gJzI4NzQnLCBvaWRfc3ltYm9sID0+ICdPSURfTVVM VElSQU5HRV9NVUxUSVJBTkdFX0NPTlRBSU5FRF9PUCcsCiAgIGRlc2NyID0+ICdpcyBjb250YWlu ZWQgYnknLAogICBvcHJuYW1lID0+ICc8QCcsIG9wcmxlZnQgPT4gJ2FueW11bHRpcmFuZ2UnLCBv cHJyaWdodCA9PiAnYW55bXVsdGlyYW5nZScsCiAgIG9wcnJlc3VsdCA9PiAnYm9vbCcsIG9wcmNv bSA9PiAnQD4oYW55bXVsdGlyYW5nZSxhbnltdWx0aXJhbmdlKScsCiAgIG9wcmNvZGUgPT4gJ211 bHRpcmFuZ2VfY29udGFpbmVkX2J5X211bHRpcmFuZ2UnLCBvcHJyZXN0ID0+ICdtdWx0aXJhbmdl c2VsJywKLSAgb3Byam9pbiA9PiAnY29udGpvaW5zZWwnIH0sCisgIG9wcmpvaW4gPT4gJ211bHRp cmFuZ2Vqb2luc2VsJyB9LAogeyBvaWQgPT4gJzQ1MzknLCBvaWRfc3ltYm9sID0+ICdPSURfUkFO R0VfQ09OVEFJTlNfTVVMVElSQU5HRV9PUCcsCiAgIGRlc2NyID0+ICdjb250YWlucycsCiAgIG9w cm5hbWUgPT4gJ0A+Jywgb3BybGVmdCA9PiAnYW55cmFuZ2UnLCBvcHJyaWdodCA9PiAnYW55bXVs dGlyYW5nZScsCiAgIG9wcnJlc3VsdCA9PiAnYm9vbCcsIG9wcmNvbSA9PiAnPEAoYW55bXVsdGly YW5nZSxhbnlyYW5nZSknLAogICBvcHJjb2RlID0+ICdyYW5nZV9jb250YWluc19tdWx0aXJhbmdl Jywgb3BycmVzdCA9PiAnbXVsdGlyYW5nZXNlbCcsCi0gIG9wcmpvaW4gPT4gJ2NvbnRqb2luc2Vs JyB9LAorICBvcHJqb2luID0+ICdtdWx0aXJhbmdlam9pbnNlbCcgfSwKIHsgb2lkID0+ICc0NTQw Jywgb2lkX3N5bWJvbCA9PiAnT0lEX1JBTkdFX01VTFRJUkFOR0VfQ09OVEFJTkVEX09QJywKICAg ZGVzY3IgPT4gJ2lzIGNvbnRhaW5lZCBieScsCiAgIG9wcm5hbWUgPT4gJzxAJywgb3BybGVmdCA9 PiAnYW55bXVsdGlyYW5nZScsIG9wcnJpZ2h0ID0+ICdhbnlyYW5nZScsCiAgIG9wcnJlc3VsdCA9 PiAnYm9vbCcsIG9wcmNvbSA9PiAnQD4oYW55cmFuZ2UsYW55bXVsdGlyYW5nZSknLAogICBvcHJj b2RlID0+ICdtdWx0aXJhbmdlX2NvbnRhaW5lZF9ieV9yYW5nZScsIG9wcnJlc3QgPT4gJ211bHRp cmFuZ2VzZWwnLAotICBvcHJqb2luID0+ICdjb250am9pbnNlbCcgfSwKKyAgb3Byam9pbiA9PiAn bXVsdGlyYW5nZWpvaW5zZWwnIH0sCiB7IG9pZCA9PiAnMjg3NScsIG9pZF9zeW1ib2wgPT4gJ09J RF9SQU5HRV9PVkVSTEFQU19MRUZUX01VTFRJUkFOR0VfT1AnLAogICBkZXNjciA9PiAnb3Zlcmxh cHMgb3IgaXMgbGVmdCBvZicsCiAgIG9wcm5hbWUgPT4gJyY8Jywgb3BybGVmdCA9PiAnYW55cmFu Z2UnLCBvcHJyaWdodCA9PiAnYW55bXVsdGlyYW5nZScsCiAgIG9wcnJlc3VsdCA9PiAnYm9vbCcs IG9wcmNvZGUgPT4gJ3JhbmdlX292ZXJsZWZ0X211bHRpcmFuZ2UnLAotICBvcHJyZXN0ID0+ICdt dWx0aXJhbmdlc2VsJywgb3Byam9pbiA9PiAnc2NhbGFybHRqb2luc2VsJyB9LAorICBvcHJyZXN0 ID0+ICdtdWx0aXJhbmdlc2VsJywgb3Byam9pbiA9PiAnbXVsdGlyYW5nZWpvaW5zZWwnIH0sCiB7 IG9pZCA9PiAnMjg3NicsIG9pZF9zeW1ib2wgPT4gJ09JRF9NVUxUSVJBTkdFX09WRVJMQVBTX0xF RlRfUkFOR0VfT1AnLAogICBkZXNjciA9PiAnb3ZlcmxhcHMgb3IgaXMgbGVmdCBvZicsCiAgIG9w cm5hbWUgPT4gJyY8Jywgb3BybGVmdCA9PiAnYW55bXVsdGlyYW5nZScsIG9wcnJpZ2h0ID0+ICdh bnlyYW5nZScsCiAgIG9wcnJlc3VsdCA9PiAnYm9vbCcsIG9wcmNvZGUgPT4gJ211bHRpcmFuZ2Vf b3ZlcmxlZnRfcmFuZ2UnLAotICBvcHJyZXN0ID0+ICdtdWx0aXJhbmdlc2VsJywgb3Byam9pbiA9 PiAnc2NhbGFybHRqb2luc2VsJyB9LAorICBvcHJyZXN0ID0+ICdtdWx0aXJhbmdlc2VsJywgb3By am9pbiA9PiAnbXVsdGlyYW5nZWpvaW5zZWwnIH0sCiB7IG9pZCA9PiAnMjg3NycsIG9pZF9zeW1i b2wgPT4gJ09JRF9NVUxUSVJBTkdFX09WRVJMQVBTX0xFRlRfTVVMVElSQU5HRV9PUCcsCiAgIGRl c2NyID0+ICdvdmVybGFwcyBvciBpcyBsZWZ0IG9mJywKICAgb3BybmFtZSA9PiAnJjwnLCBvcHJs ZWZ0ID0+ICdhbnltdWx0aXJhbmdlJywgb3BycmlnaHQgPT4gJ2FueW11bHRpcmFuZ2UnLAogICBv cHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb2RlID0+ICdtdWx0aXJhbmdlX292ZXJsZWZ0X211bHRp cmFuZ2UnLAotICBvcHJyZXN0ID0+ICdtdWx0aXJhbmdlc2VsJywgb3Byam9pbiA9PiAnc2NhbGFy bHRqb2luc2VsJyB9LAorICBvcHJyZXN0ID0+ICdtdWx0aXJhbmdlc2VsJywgb3Byam9pbiA9PiAn bXVsdGlyYW5nZWpvaW5zZWwnIH0sCiB7IG9pZCA9PiAnMzU4NScsIG9pZF9zeW1ib2wgPT4gJ09J RF9SQU5HRV9PVkVSTEFQU19SSUdIVF9NVUxUSVJBTkdFX09QJywKICAgZGVzY3IgPT4gJ292ZXJs YXBzIG9yIGlzIHJpZ2h0IG9mJywKICAgb3BybmFtZSA9PiAnJj4nLCBvcHJsZWZ0ID0+ICdhbnly YW5nZScsIG9wcnJpZ2h0ID0+ICdhbnltdWx0aXJhbmdlJywKICAgb3BycmVzdWx0ID0+ICdib29s Jywgb3ByY29kZSA9PiAncmFuZ2Vfb3ZlcnJpZ2h0X211bHRpcmFuZ2UnLAotICBvcHJyZXN0ID0+ ICdtdWx0aXJhbmdlc2VsJywgb3Byam9pbiA9PiAnc2NhbGFyZ3Rqb2luc2VsJyB9LAorICBvcHJy ZXN0ID0+ICdtdWx0aXJhbmdlc2VsJywgb3Byam9pbiA9PiAnbXVsdGlyYW5nZWpvaW5zZWwnIH0s CiB7IG9pZCA9PiAnNDAzNScsIG9pZF9zeW1ib2wgPT4gJ09JRF9NVUxUSVJBTkdFX09WRVJMQVBT X1JJR0hUX1JBTkdFX09QJywKICAgZGVzY3IgPT4gJ292ZXJsYXBzIG9yIGlzIHJpZ2h0IG9mJywK ICAgb3BybmFtZSA9PiAnJj4nLCBvcHJsZWZ0ID0+ICdhbnltdWx0aXJhbmdlJywgb3BycmlnaHQg PT4gJ2FueXJhbmdlJywKICAgb3BycmVzdWx0ID0+ICdib29sJywgb3ByY29kZSA9PiAnbXVsdGly YW5nZV9vdmVycmlnaHRfcmFuZ2UnLAotICBvcHJyZXN0ID0+ICdtdWx0aXJhbmdlc2VsJywgb3By am9pbiA9PiAnc2NhbGFyZ3Rqb2luc2VsJyB9LAorICBvcHJyZXN0ID0+ICdtdWx0aXJhbmdlc2Vs Jywgb3Byam9pbiA9PiAnbXVsdGlyYW5nZWpvaW5zZWwnIH0sCiB7IG9pZCA9PiAnNDE0MicsIG9p ZF9zeW1ib2wgPT4gJ09JRF9NVUxUSVJBTkdFX09WRVJMQVBTX1JJR0hUX01VTFRJUkFOR0VfT1An LAogICBkZXNjciA9PiAnb3ZlcmxhcHMgb3IgaXMgcmlnaHQgb2YnLAogICBvcHJuYW1lID0+ICcm PicsIG9wcmxlZnQgPT4gJ2FueW11bHRpcmFuZ2UnLCBvcHJyaWdodCA9PiAnYW55bXVsdGlyYW5n ZScsCiAgIG9wcnJlc3VsdCA9PiAnYm9vbCcsIG9wcmNvZGUgPT4gJ211bHRpcmFuZ2Vfb3ZlcnJp Z2h0X211bHRpcmFuZ2UnLAotICBvcHJyZXN0ID0+ICdtdWx0aXJhbmdlc2VsJywgb3Byam9pbiA9 PiAnc2NhbGFyZ3Rqb2luc2VsJyB9LAorICBvcHJyZXN0ID0+ICdtdWx0aXJhbmdlc2VsJywgb3By am9pbiA9PiAnbXVsdGlyYW5nZWpvaW5zZWwnIH0sCiB7IG9pZCA9PiAnNDE3OScsIG9pZF9zeW1i b2wgPT4gJ09JRF9SQU5HRV9BREpBQ0VOVF9NVUxUSVJBTkdFX09QJywKICAgZGVzY3IgPT4gJ2lz IGFkamFjZW50IHRvJywKICAgb3BybmFtZSA9PiAnLXwtJywgb3BybGVmdCA9PiAnYW55cmFuZ2Un LCBvcHJyaWdodCA9PiAnYW55bXVsdGlyYW5nZScsCiAgIG9wcnJlc3VsdCA9PiAnYm9vbCcsIG9w cmNvbSA9PiAnLXwtKGFueW11bHRpcmFuZ2UsYW55cmFuZ2UpJywKICAgb3ByY29kZSA9PiAncmFu Z2VfYWRqYWNlbnRfbXVsdGlyYW5nZScsIG9wcnJlc3QgPT4gJ21hdGNoaW5nc2VsJywKLSAgb3By am9pbiA9PiAnbWF0Y2hpbmdqb2luc2VsJyB9LAorICBvcHJqb2luID0+ICdtdWx0aXJhbmdlam9p bnNlbCcgfSwKIHsgb2lkID0+ICc0MTgwJywgb2lkX3N5bWJvbCA9PiAnT0lEX01VTFRJUkFOR0Vf QURKQUNFTlRfUkFOR0VfT1AnLAogICBkZXNjciA9PiAnaXMgYWRqYWNlbnQgdG8nLAogICBvcHJu YW1lID0+ICctfC0nLCBvcHJsZWZ0ID0+ICdhbnltdWx0aXJhbmdlJywgb3BycmlnaHQgPT4gJ2Fu eXJhbmdlJywKICAgb3BycmVzdWx0ID0+ICdib29sJywgb3ByY29tID0+ICctfC0oYW55cmFuZ2Us YW55bXVsdGlyYW5nZSknLAogICBvcHJjb2RlID0+ICdtdWx0aXJhbmdlX2FkamFjZW50X3Jhbmdl Jywgb3BycmVzdCA9PiAnbWF0Y2hpbmdzZWwnLAotICBvcHJqb2luID0+ICdtYXRjaGluZ2pvaW5z ZWwnIH0sCisgIG9wcmpvaW4gPT4gJ211bHRpcmFuZ2Vqb2luc2VsJyB9LAogeyBvaWQgPT4gJzQx OTgnLCBvaWRfc3ltYm9sID0+ICdPSURfTVVMVElSQU5HRV9BREpBQ0VOVF9NVUxUSVJBTkdFX09Q JywKICAgZGVzY3IgPT4gJ2lzIGFkamFjZW50IHRvJywKICAgb3BybmFtZSA9PiAnLXwtJywgb3By bGVmdCA9PiAnYW55bXVsdGlyYW5nZScsIG9wcnJpZ2h0ID0+ICdhbnltdWx0aXJhbmdlJywKICAg b3BycmVzdWx0ID0+ICdib29sJywgb3ByY29tID0+ICctfC0oYW55bXVsdGlyYW5nZSxhbnltdWx0 aXJhbmdlKScsCiAgIG9wcmNvZGUgPT4gJ211bHRpcmFuZ2VfYWRqYWNlbnRfbXVsdGlyYW5nZScs IG9wcnJlc3QgPT4gJ21hdGNoaW5nc2VsJywKLSAgb3Byam9pbiA9PiAnbWF0Y2hpbmdqb2luc2Vs JyB9LAorICBvcHJqb2luID0+ICdtdWx0aXJhbmdlam9pbnNlbCcgfSwKIHsgb2lkID0+ICc0Mzky JywgZGVzY3IgPT4gJ211bHRpcmFuZ2UgdW5pb24nLAogICBvcHJuYW1lID0+ICcrJywgb3BybGVm dCA9PiAnYW55bXVsdGlyYW5nZScsIG9wcnJpZ2h0ID0+ICdhbnltdWx0aXJhbmdlJywKICAgb3By cmVzdWx0ID0+ICdhbnltdWx0aXJhbmdlJywgb3ByY29tID0+ICcrKGFueW11bHRpcmFuZ2UsYW55 bXVsdGlyYW5nZSknLApAQCAtMzQyNiwzNiArMzQyNiwzNiBAQAogICBvcHJuYW1lID0+ICc8PCcs IG9wcmxlZnQgPT4gJ2FueXJhbmdlJywgb3BycmlnaHQgPT4gJ2FueW11bHRpcmFuZ2UnLAogICBv cHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20gPT4gJz4+KGFueW11bHRpcmFuZ2UsYW55cmFuZ2Up JywKICAgb3ByY29kZSA9PiAncmFuZ2VfYmVmb3JlX211bHRpcmFuZ2UnLCBvcHJyZXN0ID0+ICdt dWx0aXJhbmdlc2VsJywKLSAgb3Byam9pbiA9PiAnc2NhbGFybHRqb2luc2VsJyB9LAorICBvcHJq b2luID0+ICdtdWx0aXJhbmdlam9pbnNlbCcgfSwKIHsgb2lkID0+ICc0Mzk2Jywgb2lkX3N5bWJv bCA9PiAnT0lEX01VTFRJUkFOR0VfTEVGVF9SQU5HRV9PUCcsCiAgIGRlc2NyID0+ICdpcyBsZWZ0 IG9mJywKICAgb3BybmFtZSA9PiAnPDwnLCBvcHJsZWZ0ID0+ICdhbnltdWx0aXJhbmdlJywgb3By cmlnaHQgPT4gJ2FueXJhbmdlJywKICAgb3BycmVzdWx0ID0+ICdib29sJywgb3ByY29tID0+ICc+ PihhbnlyYW5nZSxhbnltdWx0aXJhbmdlKScsCiAgIG9wcmNvZGUgPT4gJ211bHRpcmFuZ2VfYmVm b3JlX3JhbmdlJywgb3BycmVzdCA9PiAnbXVsdGlyYW5nZXNlbCcsCi0gIG9wcmpvaW4gPT4gJ3Nj YWxhcmx0am9pbnNlbCcgfSwKKyAgb3Byam9pbiA9PiAnbXVsdGlyYW5nZWpvaW5zZWwnIH0sCiB7 IG9pZCA9PiAnNDM5NycsIG9pZF9zeW1ib2wgPT4gJ09JRF9NVUxUSVJBTkdFX0xFRlRfTVVMVElS QU5HRV9PUCcsCiAgIGRlc2NyID0+ICdpcyBsZWZ0IG9mJywKICAgb3BybmFtZSA9PiAnPDwnLCBv cHJsZWZ0ID0+ICdhbnltdWx0aXJhbmdlJywgb3BycmlnaHQgPT4gJ2FueW11bHRpcmFuZ2UnLAog ICBvcHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20gPT4gJz4+KGFueW11bHRpcmFuZ2UsYW55bXVs dGlyYW5nZSknLAogICBvcHJjb2RlID0+ICdtdWx0aXJhbmdlX2JlZm9yZV9tdWx0aXJhbmdlJywg b3BycmVzdCA9PiAnbXVsdGlyYW5nZXNlbCcsCi0gIG9wcmpvaW4gPT4gJ3NjYWxhcmx0am9pbnNl bCcgfSwKKyAgb3Byam9pbiA9PiAnbXVsdGlyYW5nZWpvaW5zZWwnIH0sCiB7IG9pZCA9PiAnNDM5 OCcsIG9pZF9zeW1ib2wgPT4gJ09JRF9SQU5HRV9SSUdIVF9NVUxUSVJBTkdFX09QJywKICAgZGVz Y3IgPT4gJ2lzIHJpZ2h0IG9mJywKICAgb3BybmFtZSA9PiAnPj4nLCBvcHJsZWZ0ID0+ICdhbnly YW5nZScsIG9wcnJpZ2h0ID0+ICdhbnltdWx0aXJhbmdlJywKICAgb3BycmVzdWx0ID0+ICdib29s Jywgb3ByY29tID0+ICc8PChhbnltdWx0aXJhbmdlLGFueXJhbmdlKScsCiAgIG9wcmNvZGUgPT4g J3JhbmdlX2FmdGVyX211bHRpcmFuZ2UnLCBvcHJyZXN0ID0+ICdtdWx0aXJhbmdlc2VsJywKLSAg b3Byam9pbiA9PiAnc2NhbGFyZ3Rqb2luc2VsJyB9LAorICBvcHJqb2luID0+ICdtdWx0aXJhbmdl am9pbnNlbCcgfSwKIHsgb2lkID0+ICc0Mzk5Jywgb2lkX3N5bWJvbCA9PiAnT0lEX01VTFRJUkFO R0VfUklHSFRfUkFOR0VfT1AnLAogICBkZXNjciA9PiAnaXMgcmlnaHQgb2YnLAogICBvcHJuYW1l ID0+ICc+PicsIG9wcmxlZnQgPT4gJ2FueW11bHRpcmFuZ2UnLCBvcHJyaWdodCA9PiAnYW55cmFu Z2UnLAogICBvcHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20gPT4gJzw8KGFueXJhbmdlLGFueW11 bHRpcmFuZ2UpJywKICAgb3ByY29kZSA9PiAnbXVsdGlyYW5nZV9hZnRlcl9yYW5nZScsIG9wcnJl c3QgPT4gJ211bHRpcmFuZ2VzZWwnLAotICBvcHJqb2luID0+ICdzY2FsYXJndGpvaW5zZWwnIH0s CisgIG9wcmpvaW4gPT4gJ211bHRpcmFuZ2Vqb2luc2VsJyB9LAogeyBvaWQgPT4gJzQ0MDAnLCBv aWRfc3ltYm9sID0+ICdPSURfTVVMVElSQU5HRV9SSUdIVF9NVUxUSVJBTkdFX09QJywKICAgZGVz Y3IgPT4gJ2lzIHJpZ2h0IG9mJywKICAgb3BybmFtZSA9PiAnPj4nLCBvcHJsZWZ0ID0+ICdhbnlt dWx0aXJhbmdlJywgb3BycmlnaHQgPT4gJ2FueW11bHRpcmFuZ2UnLAogICBvcHJyZXN1bHQgPT4g J2Jvb2wnLCBvcHJjb20gPT4gJzw8KGFueW11bHRpcmFuZ2UsYW55bXVsdGlyYW5nZSknLAogICBv cHJjb2RlID0+ICdtdWx0aXJhbmdlX2FmdGVyX211bHRpcmFuZ2UnLCBvcHJyZXN0ID0+ICdtdWx0 aXJhbmdlc2VsJywKLSAgb3Byam9pbiA9PiAnc2NhbGFyZ3Rqb2luc2VsJyB9LAorICBvcHJqb2lu ID0+ICdtdWx0aXJhbmdlam9pbnNlbCcgfSwKIAogXQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5k ZXggZmI1OGRlZTNiYy4uZjAwOTdkNGVjMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0x MjEwMCw0ICsxMjEwMCwxMyBAQAogICBwcm9uYW1lID0+ICdhbnlfdmFsdWVfdHJhbnNmbicsIHBy b3JldHR5cGUgPT4gJ2FueWVsZW1lbnQnLAogICBwcm9hcmd0eXBlcyA9PiAnYW55ZWxlbWVudCBh bnllbGVtZW50JywgcHJvc3JjID0+ICdhbnlfdmFsdWVfdHJhbnNmbicgfSwKIAoreyBvaWQgPT4g JzgzNTUnLCBkZXNjciA9PiAnam9pbiBzZWxlY3Rpdml0eSBmb3IgcmFuZ2Ugb3BlcmF0b3JzJywK KyAgcHJvbmFtZSA9PiAncmFuZ2Vqb2luc2VsJywgcHJvdm9sYXRpbGUgPT4gJ3MnLCBwcm9yZXR0 eXBlID0+ICdmbG9hdDgnLAorICBwcm9hcmd0eXBlcyA9PiAnaW50ZXJuYWwgb2lkIGludGVybmFs IGludDIgaW50ZXJuYWwnLAorICBwcm9zcmMgPT4gJ3Jhbmdlam9pbnNlbCcgfSwKK3sgb2lkID0+ ICc4MzU2JywgZGVzY3IgPT4gJ2pvaW4gc2VsZWN0aXZpdHkgZm9yIG11bHRpcmFuZ2Ugb3BlcmF0 b3JzJywKKyAgcHJvbmFtZSA9PiAnbXVsdGlyYW5nZWpvaW5zZWwnLCBwcm92b2xhdGlsZSA9PiAn cycsIHByb3JldHR5cGUgPT4gJ2Zsb2F0OCcsCisgIHByb2FyZ3R5cGVzID0+ICdpbnRlcm5hbCBv aWQgaW50ZXJuYWwgaW50MiBpbnRlcm5hbCcsCisgIHByb3NyYyA9PiAnbXVsdGlyYW5nZWpvaW5z ZWwnIH0sCisKIF0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbXVsdGly YW5nZXR5cGVzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbXVsdGlyYW5nZXR5cGVz Lm91dAppbmRleCBhMGNiODc1NDkyLi4yMWQ2M2Q5YmRhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL211bHRpcmFuZ2V0eXBlcy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9tdWx0aXJhbmdldHlwZXMub3V0CkBAIC0zMzYxLDMgKzMzNjEsNjYgQEAgY3Jl YXRlIGZ1bmN0aW9uIG1yX3RhYmxlX2ZhaWwoaSBhbnllbGVtZW50KSByZXR1cm5zIHRhYmxlKGkg YW55ZWxlbWVudCwgciBhbnltdWwKICAgYXMgJCQgc2VsZWN0ICQxLCAnWzEsMTBdJyAkJCBsYW5n dWFnZSBzcWw7CiBFUlJPUjogIGNhbm5vdCBkZXRlcm1pbmUgcmVzdWx0IGRhdGEgdHlwZQogREVU QUlMOiAgQSByZXN1bHQgb2YgdHlwZSBhbnltdWx0aXJhbmdlIHJlcXVpcmVzIGF0IGxlYXN0IG9u ZSBpbnB1dCBvZiB0eXBlIGFueXJhbmdlIG9yIGFueW11bHRpcmFuZ2UuCistLQorLS0gdGVzdCBz ZWxlY3Rpdml0eSBvZiBtdWx0aXJhbmdlIGpvaW4gb3BlcmF0b3JzCistLQorY3JlYXRlIHRhYmxl IHRlc3RfbXVsdGlyYW5nZV9qb2luXzEgKGltcjEgaW50NG11bHRpcmFuZ2UpOworY3JlYXRlIHRh YmxlIHRlc3RfbXVsdGlyYW5nZV9qb2luXzIgKGltcjIgaW50NG11bHRpcmFuZ2UpOworY3JlYXRl IHRhYmxlIHRlc3RfbXVsdGlyYW5nZV9qb2luXzMgKGltcjMgaW50NG11bHRpcmFuZ2UpOworaW5z ZXJ0IGludG8gdGVzdF9tdWx0aXJhbmdlX2pvaW5fMSBzZWxlY3QgaW50NG11bHRpcmFuZ2UoaW50 NHJhbmdlKGcsIGcrMTApKSBmcm9tIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBnOworaW5zZXJ0 IGludG8gdGVzdF9tdWx0aXJhbmdlX2pvaW5fMSBzZWxlY3QgaW50NG11bHRpcmFuZ2UoaW50NHJh bmdlKGcsIGcrMTAwKSkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCwgMTApIGc7CitpbnNl cnQgaW50byB0ZXN0X211bHRpcmFuZ2Vfam9pbl8yIHNlbGVjdCBpbnQ0bXVsdGlyYW5nZShpbnQ0 cmFuZ2UoZywgZysxMCkpIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMCkgZzsKK2luc2VydCBp bnRvIHRlc3RfbXVsdGlyYW5nZV9qb2luXzIgc2VsZWN0IGludDRtdWx0aXJhbmdlKGludDRyYW5n ZShnLCBnKzEwMCkpIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMCwgMTApIGc7CitpbnNlcnQg aW50byB0ZXN0X211bHRpcmFuZ2Vfam9pbl8zIHNlbGVjdCBpbnQ0bXVsdGlyYW5nZShpbnQ0cmFu Z2UoZywgZysxMCkpIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDUwMSwgMTAwMCkgZzsKK2luc2VydCBp bnRvIHRlc3RfbXVsdGlyYW5nZV9qb2luXzMgc2VsZWN0IGludDRtdWx0aXJhbmdlKGludDRyYW5n ZShnLCBnKzEwMCkpIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDUwMSwgMTAwMCwgMTApIGc7CithbmFs eXplIHRlc3RfbXVsdGlyYW5nZV9qb2luXzE7CithbmFseXplIHRlc3RfbXVsdGlyYW5nZV9qb2lu XzI7CithbmFseXplIHRlc3RfbXVsdGlyYW5nZV9qb2luXzM7CistLXJlb3JkZXIgam9pbnMgYmFz ZWQgb24gY29tcHV0ZWQgc2VsZWN0aXZpdHkKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0IGNv dW50KCopIGZyb20gdGVzdF9tdWx0aXJhbmdlX2pvaW5fMSwgdGVzdF9tdWx0aXJhbmdlX2pvaW5f MiwgdGVzdF9tdWx0aXJhbmdlX2pvaW5fMyB3aGVyZSBpbXIxICYmIGltcjIgYW5kIGltcjIgJiYg aW1yMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAg ICBKb2luIEZpbHRlcjogKHRlc3RfbXVsdGlyYW5nZV9qb2luXzEuaW1yMSAmJiB0ZXN0X211bHRp cmFuZ2Vfam9pbl8yLmltcjIpCisgICAgICAgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgICAg ICAgIEpvaW4gRmlsdGVyOiAodGVzdF9tdWx0aXJhbmdlX2pvaW5fMi5pbXIyICYmIHRlc3RfbXVs dGlyYW5nZV9qb2luXzMuaW1yMykKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0ZXN0 X211bHRpcmFuZ2Vfam9pbl8yCisgICAgICAgICAgICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0ZXN0X211bHRpcmFuZ2Vfam9pbl8zCisg ICAgICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0 ZXN0X211bHRpcmFuZ2Vfam9pbl8xCisoMTAgcm93cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKSBz ZWxlY3QgY291bnQoKikgZnJvbSB0ZXN0X211bHRpcmFuZ2Vfam9pbl8xLCB0ZXN0X211bHRpcmFu Z2Vfam9pbl8yLCB0ZXN0X211bHRpcmFuZ2Vfam9pbl8zIHdoZXJlIGltcjEgPDwgaW1yMiBhbmQg aW1yMiA8PCBpbXIzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgTmVzdGVkIExvb3AK KyAgICAgICAgIEpvaW4gRmlsdGVyOiAodGVzdF9tdWx0aXJhbmdlX2pvaW5fMi5pbXIyIDw8IHRl c3RfbXVsdGlyYW5nZV9qb2luXzMuaW1yMykKKyAgICAgICAgIC0+ICBOZXN0ZWQgTG9vcAorICAg ICAgICAgICAgICAgSm9pbiBGaWx0ZXI6ICh0ZXN0X211bHRpcmFuZ2Vfam9pbl8xLmltcjEgPDwg dGVzdF9tdWx0aXJhbmdlX2pvaW5fMi5pbXIyKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHRlc3RfbXVsdGlyYW5nZV9qb2luXzEKKyAgICAgICAgICAgICAgIC0+ICBNYXRlcmlhbGl6 ZQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRlc3RfbXVsdGlyYW5nZV9q b2luXzIKKyAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHRlc3RfbXVsdGlyYW5nZV9qb2luXzMKKygxMCByb3dzKQorCitleHBsYWluIChjb3N0 cyBvZmYpIHNlbGVjdCBjb3VudCgqKSBmcm9tIHRlc3RfbXVsdGlyYW5nZV9qb2luXzEsIHRlc3Rf bXVsdGlyYW5nZV9qb2luXzIsIHRlc3RfbXVsdGlyYW5nZV9qb2luXzMgd2hlcmUgaW1yMSA+PiBp bXIyIGFuZCBpbXIyID4+IGltcjM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBOZXN0 ZWQgTG9vcAorICAgICAgICAgSm9pbiBGaWx0ZXI6ICh0ZXN0X211bHRpcmFuZ2Vfam9pbl8xLmlt cjEgPj4gdGVzdF9tdWx0aXJhbmdlX2pvaW5fMi5pbXIyKQorICAgICAgICAgLT4gIE5lc3RlZCBM b29wCisgICAgICAgICAgICAgICBKb2luIEZpbHRlcjogKHRlc3RfbXVsdGlyYW5nZV9qb2luXzIu aW1yMiA+PiB0ZXN0X211bHRpcmFuZ2Vfam9pbl8zLmltcjMpCisgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gdGVzdF9tdWx0aXJhbmdlX2pvaW5fMgorICAgICAgICAgICAgICAgLT4gIE1h dGVyaWFsaXplCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGVzdF9tdWx0 aXJhbmdlX2pvaW5fMworICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRlc3RfbXVsdGlyYW5nZV9q b2luXzEKKyg5IHJvd3MpCisKK2Ryb3AgdGFibGUgdGVzdF9tdWx0aXJhbmdlX2pvaW5fMTsKK2Ry b3AgdGFibGUgdGVzdF9tdWx0aXJhbmdlX2pvaW5fMjsKK2Ryb3AgdGFibGUgdGVzdF9tdWx0aXJh bmdlX2pvaW5fMzsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcmFuZ2V0 eXBlcy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3JhbmdldHlwZXMub3V0CmluZGV4 IGVlMDJmZjAxNjMuLjM1N2JiMzE1NGIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcmFuZ2V0eXBlcy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9yYW5n ZXR5cGVzLm91dApAQCAtMTgzNCwzICsxODM0LDY2IEBAIGNyZWF0ZSBmdW5jdGlvbiB0YWJsZV9m YWlsKGkgYW55ZWxlbWVudCkgcmV0dXJucyB0YWJsZShpIGFueWVsZW1lbnQsIHIgYW55cmFuZ2Up CiAgIGFzICQkIHNlbGVjdCAkMSwgJ1sxLDEwXScgJCQgbGFuZ3VhZ2Ugc3FsOwogRVJST1I6ICBj YW5ub3QgZGV0ZXJtaW5lIHJlc3VsdCBkYXRhIHR5cGUKIERFVEFJTDogIEEgcmVzdWx0IG9mIHR5 cGUgYW55cmFuZ2UgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGlucHV0IG9mIHR5cGUgYW55cmFuZ2Ug b3IgYW55bXVsdGlyYW5nZS4KKy0tCistLSB0ZXN0IHNlbGVjdGl2aXR5IG9mIHJhbmdlIGpvaW4g b3BlcmF0b3JzCistLQorY3JlYXRlIHRhYmxlIHRlc3RfcmFuZ2Vfam9pbl8xIChpcjEgaW50NHJh bmdlKTsKK2NyZWF0ZSB0YWJsZSB0ZXN0X3JhbmdlX2pvaW5fMiAoaXIyIGludDRyYW5nZSk7Citj cmVhdGUgdGFibGUgdGVzdF9yYW5nZV9qb2luXzMgKGlyMyBpbnQ0cmFuZ2UpOworaW5zZXJ0IGlu dG8gdGVzdF9yYW5nZV9qb2luXzEgc2VsZWN0IGludDRyYW5nZShnLCBnKzEwKSBmcm9tIGdlbmVy YXRlX3NlcmllcygxLCAxMDAwKSBnOworaW5zZXJ0IGludG8gdGVzdF9yYW5nZV9qb2luXzEgc2Vs ZWN0IGludDRyYW5nZShnLCBnKzEwMCkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCwgMTAp IGc7CitpbnNlcnQgaW50byB0ZXN0X3JhbmdlX2pvaW5fMiBzZWxlY3QgaW50NHJhbmdlKGcsIGcr MTApIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMCkgZzsKK2luc2VydCBpbnRvIHRlc3RfcmFu Z2Vfam9pbl8yIHNlbGVjdCBpbnQ0cmFuZ2UoZywgZysxMDApIGZyb20gZ2VuZXJhdGVfc2VyaWVz KDEsIDUwMCwgMTApIGc7CitpbnNlcnQgaW50byB0ZXN0X3JhbmdlX2pvaW5fMyBzZWxlY3QgaW50 NHJhbmdlKGcsIGcrMTApIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDUwMSwgMTAwMCkgZzsKK2luc2Vy dCBpbnRvIHRlc3RfcmFuZ2Vfam9pbl8zIHNlbGVjdCBpbnQ0cmFuZ2UoZywgZysxMDApIGZyb20g Z2VuZXJhdGVfc2VyaWVzKDUwMSwgMTAwMCwgMTApIGc7CithbmFseXplIHRlc3RfcmFuZ2Vfam9p bl8xOworYW5hbHl6ZSB0ZXN0X3JhbmdlX2pvaW5fMjsKK2FuYWx5emUgdGVzdF9yYW5nZV9qb2lu XzM7CistLXJlb3JkZXIgam9pbnMgYmFzZWQgb24gY29tcHV0ZWQgc2VsZWN0aXZpdHkKK2V4cGxh aW4gKGNvc3RzIG9mZikgc2VsZWN0IGNvdW50KCopIGZyb20gdGVzdF9yYW5nZV9qb2luXzEsIHRl c3RfcmFuZ2Vfam9pbl8yLCB0ZXN0X3JhbmdlX2pvaW5fMyB3aGVyZSBpcjEgJiYgaXIyIGFuZCBp cjIgJiYgaXIzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIEpvaW4g RmlsdGVyOiAodGVzdF9yYW5nZV9qb2luXzEuaXIxICYmIHRlc3RfcmFuZ2Vfam9pbl8yLmlyMikK KyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0ZXN0X3JhbmdlX2pvaW5fMQorICAgICAgICAgLT4g IE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgICAg ICAgICAgICAgIEpvaW4gRmlsdGVyOiAodGVzdF9yYW5nZV9qb2luXzIuaXIyICYmIHRlc3RfcmFu Z2Vfam9pbl8zLmlyMykKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0ZXN0 X3JhbmdlX2pvaW5fMgorICAgICAgICAgICAgICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGVzdF9yYW5nZV9qb2luXzMK KygxMCByb3dzKQorCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCBjb3VudCgqKSBmcm9tIHRl c3RfcmFuZ2Vfam9pbl8xLCB0ZXN0X3JhbmdlX2pvaW5fMiwgdGVzdF9yYW5nZV9qb2luXzMgd2hl cmUgaXIxIDw8IGlyMiBhbmQgaXIyIDw8IGlyMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAg ICBKb2luIEZpbHRlcjogKHRlc3RfcmFuZ2Vfam9pbl8yLmlyMiA8PCB0ZXN0X3JhbmdlX2pvaW5f My5pcjMpCisgICAgICAgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgICAgICAgIEpvaW4gRmls dGVyOiAodGVzdF9yYW5nZV9qb2luXzEuaXIxIDw8IHRlc3RfcmFuZ2Vfam9pbl8yLmlyMikKKyAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0ZXN0X3JhbmdlX2pvaW5fMQorICAgICAgICAg ICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gdGVzdF9yYW5nZV9qb2luXzIKKyAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHRlc3RfcmFuZ2Vfam9pbl8zCisoMTAgcm93cykKKworZXhw bGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgY291bnQoKikgZnJvbSB0ZXN0X3JhbmdlX2pvaW5fMSwg dGVzdF9yYW5nZV9qb2luXzIsIHRlc3RfcmFuZ2Vfam9pbl8zIHdoZXJlIGlyMSA+PiBpcjIgYW5k IGlyMiA+PiBpcjM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBBZ2dyZWdhdGUKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgSm9pbiBGaWx0ZXI6ICh0 ZXN0X3JhbmdlX2pvaW5fMS5pcjEgPj4gdGVzdF9yYW5nZV9qb2luXzIuaXIyKQorICAgICAgICAg LT4gIE5lc3RlZCBMb29wCisgICAgICAgICAgICAgICBKb2luIEZpbHRlcjogKHRlc3RfcmFuZ2Vf am9pbl8yLmlyMiA+PiB0ZXN0X3JhbmdlX2pvaW5fMy5pcjMpCisgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gdGVzdF9yYW5nZV9qb2luXzIKKyAgICAgICAgICAgICAgIC0+ICBNYXRlcmlh bGl6ZQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRlc3RfcmFuZ2Vfam9p bl8zCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGVzdF9yYW5nZV9qb2luXzEKKyg5IHJvd3Mp CisKK2Ryb3AgdGFibGUgdGVzdF9yYW5nZV9qb2luXzE7Citkcm9wIHRhYmxlIHRlc3RfcmFuZ2Vf am9pbl8yOworZHJvcCB0YWJsZSB0ZXN0X3JhbmdlX2pvaW5fMzsKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL211bHRpcmFuZ2V0eXBlcy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9tdWx0aXJhbmdldHlwZXMuc3FsCmluZGV4IGZlZmI0YjRkNDIuLjRjNjJjMzExNjYgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL211bHRpcmFuZ2V0eXBlcy5zcWwKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvbXVsdGlyYW5nZXR5cGVzLnNxbApAQCAtODYxLDMgKzg2MSwzMCBA QCBjcmVhdGUgZnVuY3Rpb24gbXJfaW5vdXRwYXJhbV9mYWlsKGlub3V0IGkgYW55ZWxlbWVudCwg b3V0IHIgYW55bXVsdGlyYW5nZSkKIC0tc2hvdWxkIGZhaWwKIGNyZWF0ZSBmdW5jdGlvbiBtcl90 YWJsZV9mYWlsKGkgYW55ZWxlbWVudCkgcmV0dXJucyB0YWJsZShpIGFueWVsZW1lbnQsIHIgYW55 bXVsdGlyYW5nZSkKICAgYXMgJCQgc2VsZWN0ICQxLCAnWzEsMTBdJyAkJCBsYW5ndWFnZSBzcWw7 CisKKy0tCistLSB0ZXN0IHNlbGVjdGl2aXR5IG9mIG11bHRpcmFuZ2Ugam9pbiBvcGVyYXRvcnMK Ky0tCitjcmVhdGUgdGFibGUgdGVzdF9tdWx0aXJhbmdlX2pvaW5fMSAoaW1yMSBpbnQ0bXVsdGly YW5nZSk7CitjcmVhdGUgdGFibGUgdGVzdF9tdWx0aXJhbmdlX2pvaW5fMiAoaW1yMiBpbnQ0bXVs dGlyYW5nZSk7CitjcmVhdGUgdGFibGUgdGVzdF9tdWx0aXJhbmdlX2pvaW5fMyAoaW1yMyBpbnQ0 bXVsdGlyYW5nZSk7CisKK2luc2VydCBpbnRvIHRlc3RfbXVsdGlyYW5nZV9qb2luXzEgc2VsZWN0 IGludDRtdWx0aXJhbmdlKGludDRyYW5nZShnLCBnKzEwKSkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMo MSwgMTAwMCkgZzsKK2luc2VydCBpbnRvIHRlc3RfbXVsdGlyYW5nZV9qb2luXzEgc2VsZWN0IGlu dDRtdWx0aXJhbmdlKGludDRyYW5nZShnLCBnKzEwMCkpIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEs IDEwMDAsIDEwKSBnOworaW5zZXJ0IGludG8gdGVzdF9tdWx0aXJhbmdlX2pvaW5fMiBzZWxlY3Qg aW50NG11bHRpcmFuZ2UoaW50NHJhbmdlKGcsIGcrMTApKSBmcm9tIGdlbmVyYXRlX3Nlcmllcygx LCA1MDApIGc7CitpbnNlcnQgaW50byB0ZXN0X211bHRpcmFuZ2Vfam9pbl8yIHNlbGVjdCBpbnQ0 bXVsdGlyYW5nZShpbnQ0cmFuZ2UoZywgZysxMDApKSBmcm9tIGdlbmVyYXRlX3NlcmllcygxLCA1 MDAsIDEwKSBnOworaW5zZXJ0IGludG8gdGVzdF9tdWx0aXJhbmdlX2pvaW5fMyBzZWxlY3QgaW50 NG11bHRpcmFuZ2UoaW50NHJhbmdlKGcsIGcrMTApKSBmcm9tIGdlbmVyYXRlX3Nlcmllcyg1MDEs IDEwMDApIGc7CitpbnNlcnQgaW50byB0ZXN0X211bHRpcmFuZ2Vfam9pbl8zIHNlbGVjdCBpbnQ0 bXVsdGlyYW5nZShpbnQ0cmFuZ2UoZywgZysxMDApKSBmcm9tIGdlbmVyYXRlX3Nlcmllcyg1MDEs IDEwMDAsIDEwKSBnOworCithbmFseXplIHRlc3RfbXVsdGlyYW5nZV9qb2luXzE7CithbmFseXpl IHRlc3RfbXVsdGlyYW5nZV9qb2luXzI7CithbmFseXplIHRlc3RfbXVsdGlyYW5nZV9qb2luXzM7 CisKKy0tcmVvcmRlciBqb2lucyBiYXNlZCBvbiBjb21wdXRlZCBzZWxlY3Rpdml0eQorZXhwbGFp biAoY29zdHMgb2ZmKSBzZWxlY3QgY291bnQoKikgZnJvbSB0ZXN0X211bHRpcmFuZ2Vfam9pbl8x LCB0ZXN0X211bHRpcmFuZ2Vfam9pbl8yLCB0ZXN0X211bHRpcmFuZ2Vfam9pbl8zIHdoZXJlIGlt cjEgJiYgaW1yMiBhbmQgaW1yMiAmJiBpbXIzOworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3Qg Y291bnQoKikgZnJvbSB0ZXN0X211bHRpcmFuZ2Vfam9pbl8xLCB0ZXN0X211bHRpcmFuZ2Vfam9p bl8yLCB0ZXN0X211bHRpcmFuZ2Vfam9pbl8zIHdoZXJlIGltcjEgPDwgaW1yMiBhbmQgaW1yMiA8 PCBpbXIzOworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgY291bnQoKikgZnJvbSB0ZXN0X211 bHRpcmFuZ2Vfam9pbl8xLCB0ZXN0X211bHRpcmFuZ2Vfam9pbl8yLCB0ZXN0X211bHRpcmFuZ2Vf am9pbl8zIHdoZXJlIGltcjEgPj4gaW1yMiBhbmQgaW1yMiA+PiBpbXIzOworCitkcm9wIHRhYmxl IHRlc3RfbXVsdGlyYW5nZV9qb2luXzE7Citkcm9wIHRhYmxlIHRlc3RfbXVsdGlyYW5nZV9qb2lu XzI7Citkcm9wIHRhYmxlIHRlc3RfbXVsdGlyYW5nZV9qb2luXzM7CmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL3NxbC9yYW5nZXR5cGVzLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Jh bmdldHlwZXMuc3FsCmluZGV4IGMyM2JlOTI4YzMuLjEwMThhMjM0YTUgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL3JhbmdldHlwZXMuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3JhbmdldHlwZXMuc3FsCkBAIC02MjksMyArNjI5LDMwIEBAIGNyZWF0ZSBmdW5jdGlvbiBp bm91dHBhcmFtX2ZhaWwoaW5vdXQgaSBhbnllbGVtZW50LCBvdXQgciBhbnlyYW5nZSkKIC0tc2hv dWxkIGZhaWwKIGNyZWF0ZSBmdW5jdGlvbiB0YWJsZV9mYWlsKGkgYW55ZWxlbWVudCkgcmV0dXJu cyB0YWJsZShpIGFueWVsZW1lbnQsIHIgYW55cmFuZ2UpCiAgIGFzICQkIHNlbGVjdCAkMSwgJ1sx LDEwXScgJCQgbGFuZ3VhZ2Ugc3FsOworCistLQorLS0gdGVzdCBzZWxlY3Rpdml0eSBvZiByYW5n ZSBqb2luIG9wZXJhdG9ycworLS0KK2NyZWF0ZSB0YWJsZSB0ZXN0X3JhbmdlX2pvaW5fMSAoaXIx IGludDRyYW5nZSk7CitjcmVhdGUgdGFibGUgdGVzdF9yYW5nZV9qb2luXzIgKGlyMiBpbnQ0cmFu Z2UpOworY3JlYXRlIHRhYmxlIHRlc3RfcmFuZ2Vfam9pbl8zIChpcjMgaW50NHJhbmdlKTsKKwor aW5zZXJ0IGludG8gdGVzdF9yYW5nZV9qb2luXzEgc2VsZWN0IGludDRyYW5nZShnLCBnKzEwKSBm cm9tIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBnOworaW5zZXJ0IGludG8gdGVzdF9yYW5nZV9q b2luXzEgc2VsZWN0IGludDRyYW5nZShnLCBnKzEwMCkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwg MTAwMCwgMTApIGc7CitpbnNlcnQgaW50byB0ZXN0X3JhbmdlX2pvaW5fMiBzZWxlY3QgaW50NHJh bmdlKGcsIGcrMTApIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMCkgZzsKK2luc2VydCBpbnRv IHRlc3RfcmFuZ2Vfam9pbl8yIHNlbGVjdCBpbnQ0cmFuZ2UoZywgZysxMDApIGZyb20gZ2VuZXJh dGVfc2VyaWVzKDEsIDUwMCwgMTApIGc7CitpbnNlcnQgaW50byB0ZXN0X3JhbmdlX2pvaW5fMyBz ZWxlY3QgaW50NHJhbmdlKGcsIGcrMTApIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDUwMSwgMTAwMCkg ZzsKK2luc2VydCBpbnRvIHRlc3RfcmFuZ2Vfam9pbl8zIHNlbGVjdCBpbnQ0cmFuZ2UoZywgZysx MDApIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDUwMSwgMTAwMCwgMTApIGc7CisKK2FuYWx5emUgdGVz dF9yYW5nZV9qb2luXzE7CithbmFseXplIHRlc3RfcmFuZ2Vfam9pbl8yOworYW5hbHl6ZSB0ZXN0 X3JhbmdlX2pvaW5fMzsKKworLS1yZW9yZGVyIGpvaW5zIGJhc2VkIG9uIGNvbXB1dGVkIHNlbGVj dGl2aXR5CitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCBjb3VudCgqKSBmcm9tIHRlc3RfcmFu Z2Vfam9pbl8xLCB0ZXN0X3JhbmdlX2pvaW5fMiwgdGVzdF9yYW5nZV9qb2luXzMgd2hlcmUgaXIx ICYmIGlyMiBhbmQgaXIyICYmIGlyMzsKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0IGNvdW50 KCopIGZyb20gdGVzdF9yYW5nZV9qb2luXzEsIHRlc3RfcmFuZ2Vfam9pbl8yLCB0ZXN0X3Jhbmdl X2pvaW5fMyB3aGVyZSBpcjEgPDwgaXIyIGFuZCBpcjIgPDwgaXIzOworZXhwbGFpbiAoY29zdHMg b2ZmKSBzZWxlY3QgY291bnQoKikgZnJvbSB0ZXN0X3JhbmdlX2pvaW5fMSwgdGVzdF9yYW5nZV9q b2luXzIsIHRlc3RfcmFuZ2Vfam9pbl8zIHdoZXJlIGlyMSA+PiBpcjIgYW5kIGlyMiA+PiBpcjM7 CisKK2Ryb3AgdGFibGUgdGVzdF9yYW5nZV9qb2luXzE7Citkcm9wIHRhYmxlIHRlc3RfcmFuZ2Vf am9pbl8yOworZHJvcCB0YWJsZSB0ZXN0X3JhbmdlX2pvaW5fMzsK --_002_f530d708bcb41487f25e248ea101e571ulbbe_--