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 1rm5nD-005xv4-JD for pgsql-hackers@arkaria.postgresql.org; Mon, 18 Mar 2024 05:44:16 +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 1rm5nB-00Fjji-Gc for pgsql-hackers@arkaria.postgresql.org; Mon, 18 Mar 2024 05:44:14 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rm5nA-00FjjY-SS for pgsql-hackers@lists.postgresql.org; Mon, 18 Mar 2024 05:44:13 +0000 Received: from esa18.fujitsucc.c3s2.iphmx.com ([216.71.158.38]) by makus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rm5n6-0055lU-Ej for pgsql-hackers@lists.postgresql.org; Mon, 18 Mar 2024 05:44:12 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=fujitsu.com; i=@fujitsu.com; q=dns/txt; s=fj1; t=1710740650; x=1742276650; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=F6ceyNbLv+iW3EFsR7VRJO0MFxDSgeQc7g4KUJL+GMw=; b=LsGhHaRtpwT2edLnDo6l6mE8naCgr2udoVvIqrW65+HaK0pv0cvT5taV pALA2L942zdZrmQaIT8gwoBtDk4cyqa2YOzGYKul5Zqd52ESSfvZQf5Zj B8c0Ujdwm5+lksnX5VCsR6gl/iMloR+L4ovBeTs4kC+XdOVixbXtoNrfX MGlZKYb4ZRrDGUu2vXs5itnz++VsU2m1ht4nN/ko5xVAna3AxwOB6RxbH Hg3m59cNi4xf12jEhpZqs30NBefBnPWvE27HLq750rq0xtLDqsY9Fqecc HOGnZKk/u/u/N41onSezveZ4Gp84Zgnltm7O0NATk8ob2n9cx+b1h760V g==; X-IronPort-AV: E=McAfee;i="6600,9927,11016"; a="118486490" X-IronPort-AV: E=Sophos;i="6.07,134,1708354800"; d="scan'208";a="118486490" Received: from mail-japaneastazlp17010000.outbound.protection.outlook.com (HELO TYVP286CU001.outbound.protection.outlook.com) ([40.93.73.0]) by ob1.fujitsucc.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2024 14:44:04 +0900 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=k0KGhw0pSf/N0d/vl4zaLchltY07IG9A+HpUY5DBAKxkJ+PURjen8O6zNjq+sOh3T0jt74Z94f13JTcuhSSkS3C6e8zcrXR/W9kn/1oMkAPAopPLUE6QJRZTKjehWEPczDbbw60h2+EmwWpX6wNPCbGNw/bLKLLh9A8OdayBoPibzYCid/UE4CpR4odkDBq1rTu/Q4LYAum2aKSSWEaqyuG5idtwkWkghrZ8Ztb3YKvn2+k+N8uCXrhKnBaKdtWhp3v1Wn8G1dZZ0KvgeOP/YlgCOHQ5lffJU8WYx46Gn06H2cx992BiLUCgJZlo/D7LFSpWRM+tljo/cuKUoODY3Q== 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=F6ceyNbLv+iW3EFsR7VRJO0MFxDSgeQc7g4KUJL+GMw=; b=TqFxGB8nd0DDfxPO1n8tHUNPNO4C8H54qDxbyK9h7YLi/i4w0R1ksbnE+UNT/H9HHWk7QaUXpq0yxlR4x/rMr0HEP4VXtiB2n73f5VUHKG9s6DhRZQqZEIo8GYtX3zcnb/sl3kIsYn3ADEhwvkDF4iT5trKPQ8DmkZfOsuFgBMxNr//nOjlk2Bu0fu30TQYzlKpw0zHfEoQ8HF8OEXD2VkVUL9mBLU1eznCCKROqFVVZhnO6COAn3TXGVEmqYxLxRGHal1IJQO/MXZ+/FoI1ghhY7nti1nPwcH4q3J8nZIfT3uj3bWkzbxr936K9f+7XThsIXxMWJueF9RatdKjhjQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=fujitsu.com; dmarc=pass action=none header.from=fujitsu.com; dkim=pass header.d=fujitsu.com; arc=none Received: from TYCPR01MB12077.jpnprd01.prod.outlook.com (2603:1096:400:439::5) by TYWPR01MB9774.jpnprd01.prod.outlook.com (2603:1096:400:234::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7386.26; Mon, 18 Mar 2024 05:44:00 +0000 Received: from TYCPR01MB12077.jpnprd01.prod.outlook.com ([fe80::7e1a:6993:fe9e:5317]) by TYCPR01MB12077.jpnprd01.prod.outlook.com ([fe80::7e1a:6993:fe9e:5317%3]) with mapi id 15.20.7386.025; Mon, 18 Mar 2024 05:44:00 +0000 From: "Hayato Kuroda (Fujitsu)" To: 'Euler Taveira' , Amit Kapila CC: Shlok Kyal , Tomas Vondra , "pgsql-hackers@lists.postgresql.org" , Michael Paquier , Peter Eisentraut , Andres Freund , Ashutosh Bapat , =?utf-8?B?RmFicsOtemlvIGRlIFJveWVzIE1lbGxv?= , vignesh C Subject: RE: speed up a logical replica setup Thread-Topic: speed up a logical replica setup Thread-Index: AQHYJxwqCwVDEK8rxk6UuFJmWEa5OLBaerWAgBix/4CAACTuAIACleiAgACOjoCAKWVqAIApDNiAgARDvICAAC3UgIAADN4AgABJ6wCAAUerAIAHtdWAgAFvhACAAEZbgIAAWW2AgACrngCAAM0jQIAPei1wgAAshICAAp5LgIADBLQAgACKXLCABEd0gIABoIwAgAB7ucCAAcm90IAAHJgAgAACwICAAAXhgIAAC7MAgAAh+gCAAIfpEIAAGb3AgACYWmCAAOVegIAAfuxAgAeMDoCAAAXdAIABBpmAgABeF2CACXUbgIAATP9AgAHL3uCAARDPAIAAoFUwgAQywWCAAeMXAIADek5ggAz2jwCABVnHcIADBCkAgADUOwCAANs88IAH2USAgAB1EYCAAojjAIAALVOAgAIrrICAAnzvcA== Date: Mon, 18 Mar 2024 05:43:59 +0000 Message-ID: References: <9a9c7e65-c47b-4400-a63e-ac6169c0860e@app.fastmail.com> <34075bd4-c85d-4654-a782-0cd6713b2c89@app.fastmail.com> <2edde173-5ff9-45fd-b881-cd04eb13049f@app.fastmail.com> <2231a04b-f2d4-4a4e-b5cd-56be8b002427@app.fastmail.com> <40595e73-c7e1-463a-b8be-49792e870007@app.fastmail.com> <6423dfeb-a729-45d3-b71e-7bf1b3adb0c9@enterprisedb.com> <2f0b73f3-e7c0-4e95-9712-1993442a6b64@app.fastmail.com> <34637e7f-0330-420d-8f45-1d022962d2fe@app.fastmail.com> In-Reply-To: <34637e7f-0330-420d-8f45-1d022962d2fe@app.fastmail.com> Accept-Language: ja-JP, en-US Content-Language: ja-JP X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: =?utf-8?B?TVNJUF9MYWJlbF9hNzI5NWNjMS1kMjc5LTQyYWMtYWI0ZC0zYjBmNGZlY2Uw?= =?utf-8?B?NTBfQWN0aW9uSWQ9MTUwOGQxNjAtMmEyMS00NTVkLWFkOGMtZjI1ZWIwMzM2?= =?utf-8?B?ZjI3O01TSVBfTGFiZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRm?= =?utf-8?B?ZWNlMDUwX0NvbnRlbnRCaXRzPTA7TVNJUF9MYWJlbF9hNzI5NWNjMS1kMjc5?= =?utf-8?B?LTQyYWMtYWI0ZC0zYjBmNGZlY2UwNTBfRW5hYmxlZD10cnVlO01TSVBfTGFi?= =?utf-8?B?ZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRmZWNlMDUwX01ldGhv?= =?utf-8?B?ZD1TdGFuZGFyZDtNU0lQX0xhYmVsX2E3Mjk1Y2MxLWQyNzktNDJhYy1hYjRk?= =?utf-8?B?LTNiMGY0ZmVjZTA1MF9OYW1lPUZVSklUU1UtUkVTVFJJQ1RFROKAiztNU0lQ?= =?utf-8?B?X0xhYmVsX2E3Mjk1Y2MxLWQyNzktNDJhYy1hYjRkLTNiMGY0ZmVjZTA1MF9T?= =?utf-8?B?ZXREYXRlPTIwMjQtMDMtMThUMDU6NDI6MzFaO01TSVBfTGFiZWxfYTcyOTVj?= =?utf-8?B?YzEtZDI3OS00MmFjLWFiNGQtM2IwZjRmZWNlMDUwX1NpdGVJZD1hMTlmMTIx?= =?utf-8?Q?d-81e1-4858-a9d8-736e267fd4c7;?= authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=fujitsu.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: TYCPR01MB12077:EE_|TYWPR01MB9774:EE_ x-ms-office365-filtering-correlation-id: e1fe1b57-3343-4bba-b4d8-08dc470e6925 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 3+aOEK5awNWBFGkyFLDzPY8SC027H6smHSWu6SGWWX9JVPuN97Y7hLRLRxM3Y7YU3vKSOBh/nPhJL7DVlFZzrDVkL6GL8ZPgecHK60u6A6u6DpfX6xUfCCcmYa1YYrlUCblnJFcoYBBu1QyVhBTsY3BaQI47BwskvCyNPnn7YVl46LyquyssrWmFqIiHxgJhesNCmIdg6wOWDELrLp7zK0xsV2tDe1hHKgO4g1vIt/F0BGFDffDCSHfB56wP0dljdTDUefNWez0I/SY8hJFwzy0wTG/XM5xpWKwRf8SxHEBqKy+UFT7ciJUU5W6D8vuen4FUlf88Vyy6LOF72bLWQ35hYJfRymUnnu3SWb0lYDuYrUhRrHrx0XJhWx21EzhvzPsS/ecd6PDICwLkwGyP/+a2r6Iozs5L710i3hatz70J4+Vzc2fN6HHWLqlKTSXIZ7FmxWHzaOkf5QjTaXmW+plWS1gLC/kjP7i4SzzRULG1GreQOXUg7PG6IRaipzcb9qTpoJTPyhlVDUEIGo3TlppakrpbYjWYdvWW6oEdZZ1ADAxOqQ60jKR+Ix5qG/03IqD7lAE3rxpvY/PcrlvdBMb/+0PjAhUwFLBG03VI8JksPvhTRsJQ2WzZ7ePE8Aj/5W92kzTw6Ke0mHaAw6zCS2oBDvINgQvrCdnjmLDjKVTSlzFAwxS+HC8c4pHkoaZqi4EygF0vBXi4izUDWujLjg== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:ja;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYCPR01MB12077.jpnprd01.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(366007)(376005)(7416005)(1800799015)(38070700009)(1580799018);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?R0hpcmZvc2lDcGpRbFk4bW8yQUZic2hKdWd0QWNjd1c3WFB5YzZidjJQY0pk?= =?utf-8?B?YmhRQzZzWU01WTlqZU1ZWGxoS1M4c0pLb2pNYUF1blZDdVpHZUdWSHdVRERO?= =?utf-8?B?dGZrTktmT1pOU1J6cFdJRFlCNlMvaHIwdmJWUnpNWTJSQWtTaG1NeFo4MlZ2?= =?utf-8?B?YWlIZU9KYkRoRFdPWFpxRmQ5T2lOYnVnVHdPVXBaa0FsMUVMZVJjbjVQcHkw?= =?utf-8?B?T29CVnJCWjFhUlZzTTV4RU1zYWhTNkpWc0VnOE0xMWRQNXdpMEs2TUJzZS9N?= =?utf-8?B?N0M2emRPQXdVM3NkVUdkWmswb29aRmtGSWYxaGMweVdiVEVyWEJoaDBjSDVQ?= =?utf-8?B?d0QzbWpMUlNaazUvQWJEUkp1Vm92d0U4MG91UU81RWVtNlJlTm53NVFLYVh4?= =?utf-8?B?Nm5rVm02MW1zQ2VSU3VaWm1VVUlUSEJjSGRuVUJaZXlpSXMxNEVGR29XTFEv?= =?utf-8?B?VkZoRVE2eTB4UmVJOWFmWGY5VFlPaU9aWW5DWTQ0bVpLNWF3MWNHRC9rT0Y0?= =?utf-8?B?b2tpb1I3Um1kcytuNXFTZE43WmNqUGF5Nm41ajJSWFJIWDB5dEZ4dFNDa2h0?= =?utf-8?B?VkhCTU1mUFN2NUYyaDFRWUZMWFpSSjJ3c3RYcEtaWDM4K2JHVEZ0VFV3d1Jq?= =?utf-8?B?TytzNFF4NHJQNEVNN2MwWU5rS3RkcXk0UUtYY3VORUVlRk5wVFNXUG50SHlr?= =?utf-8?B?VGJpRG9Cc2pRWG52S2Rkblpwb2ZvbU1xeG1jbEZvMGVFdUlTTTdrN2o0Qzlz?= =?utf-8?B?U2hqMDFOZ1h4STdUWGZTTGM0STNwNFlpbHlHTXgveHFjN3ZnQ09NN2V1S29P?= =?utf-8?B?djJBSVNhaG9rWS9CRUh3WXdWbDBhU1FFT3dadkkvQjdtSkRzNlJ3YlZqaHll?= =?utf-8?B?VngwdVVaVjhyNitUM2xSS0F1czVBOFprVE9adGJwUytWWFBHemVwMExzV20z?= =?utf-8?B?QVBzRDVJeUl6SmM1VWVqbTBiUC93Q083WEVLMjNKQkpreTdqY1pCb09ncVNV?= =?utf-8?B?NG45eVVVcDd1ckM0eEdYWVExR2RBLy9DRDB5cEJIMTJ2dFQ0NnZLM3FoVWUw?= =?utf-8?B?SjU1eVdvbGtuUmx5L2t0TjlMYXFaaFdIT3NWaEdLS1VFLzJ5U2xhQnF5MGZL?= =?utf-8?B?UTA3b2NNMC9PdUR3QzJvK2JwTldpYURkdTU1UUhvOG1SU3c2Y20vSXBNU3E2?= =?utf-8?B?QytyUDVCdFNxOEhKZkxjNmE5MjkzczBpVFo3L3VnR3NYNVJVbGJndjB6SFhs?= =?utf-8?B?Q3o1RHlLTHpKWlhVb2ZsWHlBOFNTK1NUV2oxeVFhRGorOGJhem5UbFN3RnZl?= =?utf-8?B?OFdJQm81amI2UjNlQWdsVjdTOHRURVBEUkpuYjc5SnVGd25xaVRDbHJrSGhs?= =?utf-8?B?MkVSclVnQ0Y0elZrKzZ2MzRGVEx5SDd0amJwVkFNdkNnTmhSUFA5L0hON2E3?= =?utf-8?B?VTZSNjNTUW1GcnRndnBGdlVNaCtkYWhXQ2s1cVFBQXc1WEhPSTZiMi9OeEdU?= =?utf-8?B?TjFaQnMrZkFRdlFnREJ6ZC9kMVRNTXlXaG5vdVpINzFjUzV3dWo0cWhPMS9V?= =?utf-8?B?K09XN0hvQVlMbGg3TlYzV1dNb1ZNa3pzNm1VTEI0UkhRTlBwQWUvTFhPNjZr?= =?utf-8?B?dWU2VjcvM2hLVDJ2YUk1OVg5WGVrSTVzOHlscWRlbTZMY1J3VktqV2ZDcnVy?= =?utf-8?B?bEdOV2trRFN5OWc2eGErN0dQaGhhT1o3eHl6am0zVmkxZlk3b1l4REZ3RVRH?= =?utf-8?B?aWVTd1BnTE53Z3ZFV0E1VkpVZGR1VXYxVEw3bGhIVWFQKzUvdjFHMVRzdWFW?= =?utf-8?B?a3lKa0dWRGk5UGJqelA5dEZidFF3eDBPV3lONkxVWjIvVkJwdGNvYWtYeXZ4?= =?utf-8?B?UktBT0R2WTVjSWM0UGJwM0Z0dmpLVTI1RllIYk1nMHd5a2lBTWZPMk15SzdZ?= =?utf-8?B?SjllbkovWkxmWFpaekJFNitqOXRiUWZoZkFXd2xJSW9DS3FsbjZIdzZQSVdU?= =?utf-8?B?eHJaYnVDZXhEY0o2cUxrYkloeENyanZreUZNQnhxQTF0TkQ1ZllCek9zNllY?= =?utf-8?B?a29DbEcxQ05pSWVxL0hzQmR1cExrREgwSVlpNWlOU2ZNUGhIUVd2NCszZmhw?= =?utf-8?B?WjdNVFp2YzlaVUd3NytDbk9SUGRCd3owNU1VckpobTUwNTF3cC8zb3haMUov?= =?utf-8?B?bVE9PQ==?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: MDwlnxzkeb7BLxWGJywbdyZ56kUQhmyMS2Iko5Q3gjd+yRC1iWA+BhBKgkXgHKLUr3Jz5ODU0bVoYuHUgu2P+u1mgzEjwmp3pYHQOrdkcMGnvK348mqy3yhGypzDuF5EWpZcoyZsaY0GGoO6cSufzi9rLWmpI5k0BI67N8yA3UDXmFZbGkqxX/oJMkJgIajY5ygq+dvT+bcco63zhRajBnjcNtM64TOoOarqKhBZiB3JQghs2S4AXkc5xiJdWdKI8JVTgxJ80n3m0SCU3HNyXx04sVng11lRvrX2oiYjpTW41VXRiF/GVIKEKDCFjO3Qmpgf2cUAKECGoEgvMHxGZaxxCAEbzV1eKELjRV+mWVLFgUmfKGluCBdt7CbQLAl2nBlmzDa268KK3EBddl2lUhltLioqyfbGJfDjXaKqLWq+lY+xJmCv5GLA/5LzR5ZzCl4Broz8/OL469xrfrBlCrSw2FfiwqkN+OesVzSUDUwTzR6dIPOyIEYN8c1DRjKR/K5Zc0qEyWjLgbVLA+HsW+cVtElXzC0QlBMA8h2BGZ258bobOYL19vEtLTx6zHJ9+dqkNsSXjaBdeXGYakBDeCwVeC3qZ1EHDiH11C9HezpV/QqJG3N5Dmtbycq9Duv7 X-OriginatorOrg: fujitsu.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYCPR01MB12077.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e1fe1b57-3343-4bba-b4d8-08dc470e6925 X-MS-Exchange-CrossTenant-originalarrivaltime: 18 Mar 2024 05:43:59.8819 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a19f121d-81e1-4858-a9d8-736e267fd4c7 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 9EQdLjqkc3eKoR1ANr19QY2j5dHncAQkMONWlBabRGUkLMODZ8rH+9pQmklMYsY5Ewx3GPKV3zS4mdutZlthlJ5Lxhq4psFUR5KBeiHGJCc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYWPR01MB9774 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk RGVhciBFdWxlciwNCg0KVGhhbmtzIGZvciB1cGRhdGluZyB0aGUgcGF0Y2guIEhlcmUgYXJlIG15 IGNvbW1lbnRzLg0KSSB1c2VkIEdyYW1tYXJseSB0byBwcm9vZnJlYWQgc2VudGVuY2VzLg0KKFRo ZSB0b29sIHN0cm9uZ2x5IHJlY29tbWVuZHMgdG8gdXNlIGFjdGl2ZSB2b2ljZSwgYnV0IEkgY2Fu IGlnbm9yZSBmb3Igbm93KQ0KDQowMS4NCg0KIkFmdGVyIGEgc3VjY2Vzc2Z1bCBydW4sIHRoZSBz dGF0ZSBvZiB0aGUgdGFyZ2V0IHNlcnZlciBpcyBhbmFsYWdvdXMgdG8gYSBmcmVzaA0KbG9naWNh bCByZXBsaWNhdGlvbiBzZXR1cC4iDQphL2FuYWxhZ291cy9hbmFsb2dvdXMNCg0KMDIuDQoNCiJU aGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24gc2V0dXAg YW5kIHBnX2NyZWF0ZXN1YnNjcmliZXINCmlzIHRoZSBpbml0aWFsIGRhdGEgY29weS4iDQoNCkdy YW1tYXJseSBzdWdnZXN0czoNCiJUaGUgaW5pdGlhbCBkYXRhIGNvcHkgaXMgdGhlIG1haW4gZGlm ZmVyZW5jZSBiZXR3ZWVuIHRoZSBsb2dpY2FsIHJlcGxpY2F0aW9uDQpzZXR1cCBhbmQgcGdfY3Jl YXRlc3Vic2NyaWJlci4iDQoNCjAzLg0KDQoiT25seSB0aGUgc3luY2hyb25pemF0aW9uIHBoYXNl IGlzIGRvbmUsIHdoaWNoIGVuc3VyZXMgZWFjaCB0YWJsZSBpcyBicm91Z2h0IHVwDQp0byBhIHN5 bmNocm9uaXplZCBzdGF0ZS4iDQoNClRoaXMgc2VudGVuY2UgaXMgbm90IHZlcnkgY2xlYXIgdG8g bWUuIEhvdyBhYm91dDoNCiJwZ19jcmVhdGVzdWJzY3JpYmVyIGRvZXMgb25seSB0aGUgc3luY2hy b25pemF0aW9uIHBoYXNlLCBlbnN1cmluZyBlYWNoIHRhYmxlJ3MNCnJlcGxpY2F0aW9uIHN0YXRl IGlzIHJlYWR5LiINCg0KMDQuDQoNCiJUaGUgcGdfY3JlYXRlc3Vic2NyaWJlciB0YXJnZXRzIGxh cmdlIGRhdGFiYXNlIHN5c3RlbXMgYmVjYXVzZSBtb3N0IG9mIHRoZQ0KZXhlY3V0aW9uIHRpbWUg aXMgc3BlbnQgbWFraW5nIHRoZSBpbml0aWFsIGRhdGEgY29weS4iDQoNCkhtbSwgYnV0IGluaXRp YWwgZGF0YSBzeW5jIGJ5IGxvZ2ljYWwgcmVwbGljYXRpb24gYWxzbyBzcGVuZHMgbW9zdCBvZiB0 aW1lIHRvDQptYWtlIHRoZSBpbml0aWFsIGRhdGEgY29weS4gSUlVQyBib3R0bGVuZWNrcyBhcmUg YSkgdGhpcyBhcHBsaWNhdGlvbiBtdXN0IHN0b3ANCmFuZCBzdGFydCBzZXJ2ZXIgc2V2ZXJhbCB0 aW1lcywgYW5kIGIpIG9ubHkgdGhlIHNlcmlhbCBjb3B5IHdvcmtzLiBDYW4geW91DQpjbGFyaWZ5 IHRoZW0/DQoNCjA1Lg0KDQpJdCBpcyBiZXR0ZXIgdG8gc2F5IHRoZSBpbnRlcm5hbCBkaWZmZXJl bmNlIGJldHdlZW4gcGdfY3JlYXRlc3Vic2NyaWJlciBhbmQgdGhlDQppbml0aWFsIHN5bmMgYnkg bG9naWNhbCByZXBsaWNhdGlvbi4gRm9yIGV4YW1wbGU6DQpwZ19jcmVhdGVzdWJzY3JpYmVyIHVz ZXMgYSBwaHlzaWNhbCByZXBsaWNhdGlvbiBtZWNoYW5pc20gdG8gZW5zdXJlIHRoZSBzdGFuZGJ5 DQpjYXRjaGVzIHVwIHVudGlsIGEgY2VydGFpbiBwb2ludC4gVGhlbiwgaXQgY29udmVydHMgdG8g dGhlIHN0YW5kYnkgdG8gdGhlDQpzdWJzY3JpYmVyIGJ5IHByb21vdGluZyBhbmQgY3JlYXRpbmcg c3Vic2NyaXB0aW9ucy4NCg0KMDYuDQoNCiJJZiB0aGVzZSBhcmUgbm90IG1ldCBhbiBlcnJvciB3 aWxsIGJlIHJlcG9ydGVkLiINCg0KR3JhbW1hcmx5IHN1Z2dlc3RzOg0KIklmIHRoZXNlIGFyZSBu b3QgbWV0LCBhbiBlcnJvciB3aWxsIGJlIHJlcG9ydGVkLiINCg0KMDcuDQoNCiJUaGUgZ2l2ZW4g dGFyZ2V0IGRhdGEgZGlyZWN0b3J5IG11c3QgaGF2ZSB0aGUgc2FtZSBzeXN0ZW0gaWRlbnRpZmll ciB0aGFuIHRoZQ0Kc291cmNlIGRhdGEgZGlyZWN0b3J5LiINCg0KR3JhbW1hcmx5IHN1Z2dlc3Rz Og0KIlRoZSBnaXZlbiB0YXJnZXQgZGF0YSBkaXJlY3RvcnkgbXVzdCBoYXZlIHRoZSBzYW1lIHN5 c3RlbSBpZGVudGlmaWVyIGFzIHRoZQ0Kc291cmNlIGRhdGEgZGlyZWN0b3J5LiINCg0KMDguDQoN CiJJZiBhIHN0YW5kYnkgc2VydmVyIGlzIHJ1bm5pbmcgb24gdGhlIHRhcmdldCBkYXRhIGRpcmVj dG9yeSBvciBpdCBpcyBhIGJhc2UNCmJhY2t1cCBmcm9tIHRoZSBzb3VyY2UgZGF0YSBkaXJlY3Rv cnksIHN5c3RlbSBpZGVudGlmaWVycyBhcmUgdGhlIHNhbWUuIg0KDQpUaGlzIGxpbmUgaXMgbm90 IG5lZWRlZCBpZiBidWxsZXQtc3R5bGUgaXMgbm90IHVzZWQuIFRoZSBsaW5lIGlzIGp1c3QgYSBz dXBwbGVtZW50LA0Kbm90IHByZXJlcXVpc2l0ZS4NCg0KMDkuDQoNCiJUaGUgc291cmNlIHNlcnZl ciBtdXN0IGFjY2VwdCBjb25uZWN0aW9ucyBmcm9tIHRoZSB0YXJnZXQgc2VydmVyLiBUaGUgc291 cmNlIHNlcnZlciBtdXN0IG5vdCBiZSBpbiByZWNvdmVyeS4iDQoNCkdyYW1tYXJseSBzdWdnZXN0 czoNCiJUaGUgc291cmNlIHNlcnZlciBtdXN0IGFjY2VwdCBjb25uZWN0aW9ucyBmcm9tIHRoZSB0 YXJnZXQgc2VydmVyIGFuZCBub3QgYmUgaW4gcmVjb3ZlcnkuIg0KDQoxMC4NCg0KIlB1YmxpY2F0 aW9ucyBjYW5ub3QgYmUgY3JlYXRlZCBpbiBhIHJlYWQtb25seSBjbHVzdGVyLiINCg0KU2FtZSBh cyAwOCwgdGhpcyBsaW5lIGlzIG5vdCBuZWVkZWQgaWYgYnVsbGV0LXN0eWxlIGlzIG5vdCB1c2Vk Lg0KDQoxMS4NCg0KInBnX2NyZWF0ZXN1YnNjcmliZXIgdXN1YWxseSBzdGFydHMgdGhlIHRhcmdl dCBzZXJ2ZXIgd2l0aCBkaWZmZXJlbnQgY29ubmVjdGlvbg0Kc2V0dGluZ3MgZHVyaW5nIHRoZSB0 cmFuc2Zvcm1hdGlvbiBzdGVwcy4gSGVuY2UsIGNvbm5lY3Rpb25zIHRvIHRhcmdldCBzZXJ2ZXIN Cm1pZ2h0IGZhaWwuIg0KIA0KR3JhbW1hcmx5IHN1Z2dlc3RzOg0KInBnX2NyZWF0ZXN1YnNjcmli ZXIgdXN1YWxseSBzdGFydHMgdGhlIHRhcmdldCBzZXJ2ZXIgd2l0aCBkaWZmZXJlbnQgY29ubmVj dGlvbg0Kc2V0dGluZ3MgZHVyaW5nIHRyYW5zZm9ybWF0aW9uLiBIZW5jZSwgY29ubmVjdGlvbnMg dG8gdGhlIHRhcmdldCBzZXJ2ZXIgbWlnaHQgZmFpbC4iDQoNCjEyLg0KDQoiRHVyaW5nIHRoZSBy ZWNvdmVyeSBwcm9jZXNzLCINCg0KR3JhbW1hcmx5IHN1Z2dlc3RzOg0KIkR1cmluZyByZWNvdmVy eSwiDQoNCjEzLg0KDQoicmVwbGljYXRlZCBzbyBhbiBlcnJvciB3b3VsZCBvY2N1ci4iDQoNCkdy YW1tYXJseSBzdWdnZXN0czoNCiJyZXBsaWNhdGVkLCBzbyBhbiBlcnJvciB3b3VsZCBvY2N1ci4i DQoNCjE0Lg0KDQoiSXQgd291bGQgYXZvaWQgc2l0dWF0aW9ucyBpbiB3aGljaCBXQUwgZmlsZXMg ZnJvbSB0aGUgc291cmNlIHNlcnZlciBtaWdodCBiZQ0KdXNlZCBieSB0aGUgdGFyZ2V0IHNlcnZl ci4iDQoNCkdyYW1tYXJseSBzdWdnZXN0czoNCiJJdCB3b3VsZCBhdm9pZCBzaXR1YXRpb25zIGlu IHdoaWNoIHRoZSB0YXJnZXQgc2VydmVyIG1pZ2h0IHVzZSBXQUwgZmlsZXMgZnJvbQ0KdGhlIHNv dXJjZSBzZXJ2ZXIuIg0KDQoxNS4NCg0KImEgTFNOIg0KDQpzL2EvYW4NCg0KMTYuDQoNCiJvZiB3 cml0ZS1haGVhZCINCg0Kcy9vZi9vZiB0aGUvDQoNCjE3Lg0KDQoic3BlY2lmaWVzIHByb21vdGUi DQoNCldlIGNhbiBkbyBkb3VibGUtcXVvdGUgZm9yIHRoZSB3b3JkIHByb21vdGUuDQoNCjE4Lg0K DQoiYXJlIGFsc28gYWRkZWQgc28gaXQgYXZvaWRzIg0KDQpHcmFtbWFybHkgc3VnZ2VzdHM6DQoi YXJlIGFkZGVkIHRvIGF2b2lkIg0KDQoxOS4NCg0KImlzIGFjY2VwdGluZyByZWFkLXdyaXRlIHRy YW5zYWN0aW9ucyINCg0KR3JhbW1hcmx5IHN1Z2dlc3RzOg0KImFjY2VwdHMgcmVhZC13cml0ZSB0 cmFuc2FjdGlvbnMiDQoNCjIwLg0KDQpOZXcgb3B0aW9ucyBtdXN0IGJlIGFsc28gZG9jdW1lbnRl ZCBhcyB3ZWxsLiBUaGlzIGhlbHBzIG5vdCBvbmx5IHVzZXJzIGJ1dCBhbHNvDQpyZXZpZXdlcnMu DQooU29tZXRpbWVzIHdlIGNhbm5vdCBpZGVudGlmeSB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBp cyBpbnRlbnRpbmFsIG9yIG5vdC4pDQoNCjIxLg0KDQpBbHNvLCBub3Qgc3VyZSB0aGUgc3BlY2lm aWNhdGlvbiBpcyBnb29kLiBJIHByZWZlcnJlZCB0byBzcGVjaWZ5IHRoZW0gYnkgZm9ybWF0DQpz dHJpbmcuIEJlY2F1c2UgaXQgY2FuIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBhbmQg SSBjYW5ub3QgZmluZCB1c2UgY2FzZXMNCndoaWNoIHVzZXIgd2FudCB0byBjb250cm9sIHRoZSBu YW1lIG9mIG9iamVjdHMuDQoNCkhvd2V2ZXIsIHlvdXIgYXBwcm9hY2ggaGFzIGEgYmVuZWZpdCB3 aGljaCB1c2VycyBjYW4gZWFzaWx5IGlkZW50aWZ5IHRoZSBnZW5lcmF0ZWQNCm9iamVjdHMgYnkg cGdfY3JlYXRlc3Vic2NyaWJlci4gSG93IGRvIG90aGVyIHRoaW5rPw0KDQoyMi4NCg0KYGBgDQoj ZGVmaW5lCUJBU0VfT1VUUFVUX0RJUgkJInBnX2NyZWF0ZXN1YnNjcmliZXJfb3V0cHV0LmQiDQpg YGANCg0KTm8gb25lIHJlZmVycyB0aGUgZGVmaW5lLg0KDQoyMy4NCiANCmBgYA0KfQkJCUNyZWF0 ZVN1YnNjcmliZXJPcHRpb25zOw0KLi4uDQp9CQkJTG9naWNhbFJlcEluZm87DQpgYGANCg0KRGVj bGFyYXRpb25zIGFmdGVyIHRoZSAieyIgYXJlIG5vdCBuZWVkZWQsIGJlY2F1c2Ugd2UgZG8gbm90 IGRvIHR5cGVkZWYuDQoNCjIyLg0KDQpXaGlsZSBzZWVpbmcgZGVmaW5pdGlvbnMgb2YgZnVuY3Rp b25zLCBJIGZvdW5kIHRoYXQgc29tZSBwb2ludGVycyBhcmUgZGVjbGFyZWQNCmFzIGNvbnN0LCBi dXQgb3RoZXJzIGFyZSBub3QuIEUuZy4sICJjaGFyICpsc24iIGluIHNldHVwX3JlY292ZXJ5KCkg d29uJyBiZQ0KY2hhbmdlZCBidXQgbm90IHRoZSBjb25zdGFudC4gSXMgaXQganVzdCBtaXNzaW5n IG9yIGlzIHRoZXJlIGFub3RoZXIgcnVsZT8NCg0KMjMuDQoNCmBgYA0Kc3RhdGljIGludAludW1f ZGJzID0gMDsNCnN0YXRpYyBpbnQJbnVtX3B1YnMgPSAwOw0Kc3RhdGljIGludAludW1fc3VicyA9 IDA7DQpzdGF0aWMgaW50CW51bV9yZXBsc2xvdHMgPSAwOw0KYGBgDQoNCkkgdGhpbmsgdGhlIG5h bWUgaXMgYml0IGNvbmZ1c2luZy4gVGhlIG51bWJlciBvZiBnZW5lcmF0aW5nIHB1YmxpY2F0aW9u cy9zdWJzY3JpcHRpb25zL3JlcGxpY2F0aW9uIHNsb3RzDQphcmUgYWx3YXlzIHNhbWUgYXMgdGhl IG51bWJlciBvZiBkYXRhYmFzZXMuIFRoZXkganVzdCBpbmRpY2F0ZSB0aGUgbnVtYmVyIG9mDQpz cGVjaWZpZWQuDQoNCk15IGlkZWEgaXMgbnVtX2N1c3RvbV9wdWJzIG9yIHNvbWV0aGluZy4gVGhv dWdodD8NCg0KMjQuDQoNCmBgYA0KLyogc3RhbmRieSAvIHN1YnNjcmliZXIgZGF0YSBkaXJlY3Rv cnkgKi8NCnN0YXRpYyBjaGFyICpzdWJzY3JpYmVyX2RpciA9IE5VTEw7DQpgYGANCg0KSXQgaXMg Yml0IHN0cmFuZ2UgdGhhdCBvbmx5IHN1YnNjcmliZXJfZGlyIGlzIGEgZ2xvYmFsIHZhcmlhYmxl LiBDYWxsZXIgcmVxdWlyZXMNCnRoZSBDcmVhdGVTdWJzY3JpYmVyT3B0aW9ucyBhcyBhbiBhcmd1 bWVudCwgZXhjZXB0IGNsZWFudXBfb2JqZWN0c19hdGV4aXQoKSBhbmQNCm1haW4uIFNvLCBob3cg YWJvdXQgbWFrZWluZyBgQ3JlYXRlU3Vic2NyaWJlck9wdGlvbnMgb3B0YCB0byBnbG9iYWwgb25l Pw0KDQoyNS4NCg0KYGBgDQogKiBSZXBsaWNhdGlvbiBzbG90cywgcHVibGljYXRpb25zIGFuZCBz dWJzY3JpcHRpb25zIGFyZSBjcmVhdGVkLiBEZXBlbmRpbmcgb24NCiAqIHRoZSBzdGVwIGl0IGZh aWxlZCwgaXQgc2hvdWxkIHJlbW92ZSB0aGUgYWxyZWFkeSBjcmVhdGVkIG9iamVjdHMgaWYgaXQg aXMNCiAqIHBvc3NpYmxlIChzb21ldGltZXMgaXQgd29uJ3Qgd29yayBkdWUgdG8gYSBjb25uZWN0 aW9uIGlzc3VlKS4NCmBgYA0KDQpJIHRoaW5rIGl0IHNob3VsZCBiZSBzcGVjaWZpZWQgaGVyZSB0 aGF0IHN1YnNjcmlwdGlvbnMgd29uJ3QgYmUgcmVtb3ZlZCB3aXRoIHRoZQ0KcmVhc29uLiANCg0K MjYuDQoNCmBgYA0KDQoJLyoNCgkgKiBJZiB0aGUgc2VydmVyIGlzIHByb21vdGVkLCB0aGVyZSBp cyBubyB3YXkgdG8gdXNlIHRoZSBjdXJyZW50IHNldHVwDQoJICogYWdhaW4uIFdhcm4gdGhlIHVz ZXIgdGhhdCBhIG5ldyByZXBsaWNhdGlvbiBzZXR1cCBzaG91bGQgYmUgZG9uZSBiZWZvcmUNCgkg KiB0cnlpbmcgYWdhaW4uDQoJICovDQpgYGANCg0KUGVyIGNvbW1lbnQgMjUsIHdlIGNhbiBhZGQg YSByZWZlcmVuY2UgbGlrZSAiU2VlIGNvbW1lbnRzIGF0b3AgdGhlIGZ1bmN0aW9uIg0KDQoyNy4N Cg0KdXNhZ2UoKSB3YXMgbm90IHVwZGF0ZWQgYmFzZWQgb24gcmVjZW50IGNoYW5nZXMuDQoNCjI4 Lg0KDQpgYGANCgkJaWYgKHN0cmNtcChjb25uX29wdC0+a2V5d29yZCwgImRibmFtZSIpID09IDAg JiYgY29ubl9vcHQtPnZhbCAhPSBOVUxMKQ0KCQl7DQoJCQlpZiAoZGJuYW1lKQ0KCQkJCSpkYm5h bWUgPSBwZ19zdHJkdXAoY29ubl9vcHQtPnZhbCk7DQoJCQljb250aW51ZTsNCgkJfQ0KYGBgDQoN ClRoZXJlIGlzIGEgbWVtb3J5LWxlYWsgaWYgbXVsdGlwbGUgZGJuYW1lIGFyZSBzcGVjaWZpZWQg aW4gdGhlIGNvbm5pbmZvLg0KDQoyOS4NCg0KYGBgDQoJcGdfcHJuZ19zZWVkKCZwcm5nX3N0YXRl LCAodWludDY0KSAoZ2V0cGlkKCkgXiB0aW1lKE5VTEwpKSk7DQpgYGANCg0KTm8gbmVlZCB0byBp bml0aWFsaXplIHRoZSBzZWVkIGV2ZXJ5IHRpbWUuIENhbiB5b3UgcmV1c2UgcGdfcHJuZ19zdGF0 ZT8NCg0KMzAuDQoNCmBgYA0KCQlpZiAobnVtX3JlcGxzbG90cyA9PSAwKQ0KCQkJZGJpbmZvW2ld LnJlcGxzbG90bmFtZSA9IHBnX3N0cmR1cChnZW5uYW1lKTsNCmBgYA0KDQpJIHRoaW5rIHRoZSBz dHJhaWdodGZvcndhcmQgd2F5IGlzIHRvIHVzZSB0aGUgbmFtZSBvZiBzdWJzY3JpcHRpb24gaWYg bm8gbmFtZQ0KaXMgc3BlY2lmaWVkLiBUaGlzIGZvbGxvd3MgdGhlIHJ1bGUgZm9yIENSRUFURSBT VUJTQ1JJUFRJT04uDQoNCjMxLg0KDQpgYGANCgkJLyogQ3JlYXRlIHJlcGxpY2F0aW9uIHNsb3Qg b24gcHVibGlzaGVyICovDQoJCWlmIChsc24pDQoJCQlwZ19mcmVlKGxzbik7DQpgYGANCg0KSSB0 aGluayBhbGxvY2F0aW5nL2ZyZWVpbmcgbWVtb3J5IGlzIG5vdCBzbyBlZmZpY2llbnQuDQpDYW4g d2UgYWRkIGEgZmxhZyB0byBjcmVhdGVfbG9naWNhbF9yZXBsaWNhdGlvbl9zbG90KCkgZm9yIGNv bnRyb2xsaW5nIHRoZQ0KcmV0dXJuaW5nIHZhbHVlIChOVUxMIG9yIGR1cGxpY2F0ZWQgc3RyaW5n KT8gV2UgY2FuIHVzZSB0aGUgY29uZGl0aW9uIChpID09IG51bV9kYnMtMSkNCmFzIGZsYWcuDQoN CjMyLg0KDQpgYGANCi8qDQogKiBDbG9zZSB0aGUgY29ubmVjdGlvbi4gSWYgZXhpdF9vbl9lcnJv ciBpcyB0cnVlLCBpdCBoYXMgYW4gdW5kZXNpcmVkDQogKiBjb25kaXRpb24gYW5kIGl0IHNob3Vs ZCBleGl0IGltbWVkaWF0ZWx5Lg0KICovDQpzdGF0aWMgdm9pZA0KZGlzY29ubmVjdF9kYXRhYmFz ZShQR2Nvbm4gKmNvbm4sIGJvb2wgZXhpdF9vbl9lcnJvcikNCmBgYA0KDQpJbiBjYXNlIG9mIGRp c2Nvbm5lY3RfZGF0YWJhc2UoKSwgdGhlIHNlY29uZCBhcmd1bWVudCBzaG91bGQgaGF2ZSBkaWZm ZXJlbnQgbmFtZS4NCklmIGl0IGlzIHRydWUsIHRoZSBwcm9jZXNzIGV4aXRzIHVuY29uZGl0aW9u YWxseS4NCkFsc28sIGNvbW1lbnRzIGF0b3AgdGhlIGZ1bmN0aW9uIG11c3QgYmUgZml4ZWQuDQoN Cg0KMzMuDQoNCmBgYA0KCXdhbF9sZXZlbCA9IHN0cmR1cChQUWdldHZhbHVlKHJlcywgMCwgMCkp Ow0KYGBgDQoNCnBnX3N0cmR1cCBzaG91bGQgYmUgdXNlZCBoZXJlLg0KDQozNC4NCg0KYGBgDQoJ CXsiY29uZmlnLWZpbGUiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMX0sDQoJCXsicHVibGlj YXRpb24iLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMn0sDQoJCXsicmVwbGljYXRpb24tc2xv dCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAzfSwNCgkJeyJzdWJzY3JpcHRpb24iLCByZXF1 aXJlZF9hcmd1bWVudCwgTlVMTCwgNH0sDQpgYGANCg0KVGhlIG9yZGVyaW5nIGxvb2tzIHN0cmFu Z2UgZm9yIG1lLiBBY2NvcmRpbmcgdG8gcGdfdXBnYXJhZGUgYW5kIHBnX2Jhc2ViYWNrdXAsDQpv cHRpb25zIHdoaWNoIGRvIG5vdCBoYXZlIHNob3J0IG5vdGF0aW9uIGFyZSBsaXN0ZWQgYmVoaW5k Lg0KDQozNS4NCg0KYGBgDQoJb3B0LnN1Yl9wb3J0ID0gcGFsbG9jKDE2KTsNCmBgYA0KDQpQZXIg b3RoZXIgbGluZXMsIHBnX2FsbG9jKCkgc2hvdWxkIGJlIHVzZWQuDQoNCjM2Lg0KDQpgYGANCgkJ CQlwZ19mcmVlKG9wdC5zdWJfcG9ydCk7DQpgYGANCg0KWW91IHNhaWQgdGhhdCB0aGUgbGVhayB3 b24ndCBiZSBjb25jZXJuZWQgaGVyZS4gSWYgc28sIHdoeSBvbmx5ICdwJyBoYXMgcGdfZnJlZSgp Pw0KDQozNy4NCg0KYGBgDQoJLyogUmVnaXN0ZXIgYSBmdW5jdGlvbiB0byBjbGVhbiB1cCBvYmpl Y3RzIGluIGNhc2Ugb2YgZmFpbHVyZSAqLw0KCWF0ZXhpdChjbGVhbnVwX29iamVjdHNfYXRleGl0 KTsNCmBgYA0KDQpTb3JyeSBpZiB3ZSBoYXZlIGFscmVhZHkgZGlzY3Vzc2VkLiBJIHRoaW5rIHRo ZSByZWdpc3RyYXRpb24gY2FuIGJlIG1vdmVkIGp1c3QNCmJlZm9yZSB0aGUgYm9vdCBvZiB0aGUg c3RhbmRieS4gQmVmb3JlIHRoYXQsIHRoZSBjYWxsYmFjayB3aWxsIGJlIG5vLW9wLg0KDQozOC4N Cg0KYGBgDQoJLyogU3Vic2NyaWJlciBQSUQgZmlsZSAqLw0KCXNucHJpbnRmKHBpZGZpbGUsIE1B WFBHUEFUSCwgIiVzL3Bvc3RtYXN0ZXIucGlkIiwgc3Vic2NyaWJlcl9kaXIpOw0KDQoJLyoNCgkg KiBJZiB0aGUgc3RhbmRieSBzZXJ2ZXIgaXMgcnVubmluZywgc3RvcCBpdC4gU29tZSBwYXJhbWV0 ZXJzICh0aGF0IGNhbg0KCSAqIG9ubHkgYmUgc2V0IGF0IHNlcnZlciBzdGFydCkgYXJlIGluZm9y bWVkIGJ5IGNvbW1hbmQtbGluZSBvcHRpb25zLg0KCSAqLw0KCWlmIChzdGF0KHBpZGZpbGUsICZz dGF0YnVmKSA9PSAwKQ0KYGBgDQoNCkhtbS4gcGlkZmlsZSBpcyB1c2VkIG9ubHkgaGVyZSwgYnV0 IGl0IGlzIGRlY2xhcmVkIGluIG1haW4oKS4gQ2FuIGl0IGJlDQpzZXBhcmF0ZWQgaW50byBhbm90 aGVyIGZ1bnRpb24gbGlrZSBpc19zdGFuZGJ5X3N0YXJ0ZWQoKT8NCg0KMzkuDQoNCk9yLCB3ZSBt YXkgYWJsZSB0byBpbnRyb2N1ZSAicmVzdGFydF9zdGFuZGJ5X2lmX25lZWRlZCIgb3Igc29tZXRo aW5nLg0KDQo0MC4NCg0KYGBgDQoJICogWFhYIHRoaXMgY29kZSB3YXMgZXh0cmFjdGVkIGZyb20g Qm9vdFN0cmFwWExPRygpLg0KYGBgDQoNClNvLCBjYW4gd2UgZXh0cmFjdCB0aGUgY29tbW9uIHBh cnQgdG8gc29tZXdoZXJlPyBTaW5jZSBzeXN0ZW0gaWRlbnRpZmllciBpcyByZWxhdGVkDQp3aXRo IHRoZSBjb250cm9sZGF0YSBmaWxlLCBJIHRoaW5rIGl0IGNhbiBiZSBsb2NhdGVkIGluIGNvbnRy b2xkYXRhX3V0aWwuYy4NCg0KNDEuDQoNCllvdSBzYWlkIGxpa2UgYmVsb3cgaW4gWzFdLCBidXQg SSBjb3VsZCBub3QgZmluZCB0aGUgcmVsYXRlZCBmaXguIENhbiB5b3UgY2xhcmlmeT8NCg0KPiBU aGF0J3MgYSBnb29kIHBvaW50LiBXZSBzaG91bGQgc3RhdGUgaW4gdGhlIGRvY3VtZW50YXRpb24g dGhhdCBHVUNzIHNwZWNpZmllZCBpbg0KPiB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMgYXJlIGln bm9yZWQgZHVyaW5nIHRoZSBleGVjdXRpb24uDQoNClsxXTogaHR0cHM6Ly93d3cucG9zdGdyZXNx bC5vcmcvbWVzc2FnZS1pZC80MDU5NWU3My1jN2UxLTQ2M2EtYjhiZS00OTc5MmU4NzAwMDclNDBh cHAuZmFzdG1haWwuY29tDQoNCkJlc3QgUmVnYXJkcywNCkhheWF0byBLdXJvZGENCkZVSklUU1Ug TElNSVRFRA0KaHR0cHM6Ly93d3cuZnVqaXRzdS5jb20vZ2xvYmFsLyANCg0K