Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 1EDBF200C16 for ; Thu, 9 Feb 2017 08:34:23 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id 1D58C160B50; Thu, 9 Feb 2017 07:34:23 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id C05D4160B4C for ; Thu, 9 Feb 2017 08:34:21 +0100 (CET) Received: (qmail 10682 invoked by uid 500); 9 Feb 2017 07:34:20 -0000 Mailing-List: contact user-help@zookeeper.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: user@zookeeper.apache.org Delivered-To: mailing list user@zookeeper.apache.org Received: (qmail 10668 invoked by uid 99); 9 Feb 2017 07:34:20 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd2-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 09 Feb 2017 07:34:20 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd2-us-west.apache.org (ASF Mail Server at spamd2-us-west.apache.org) with ESMTP id EBBF51A0366 for ; Thu, 9 Feb 2017 07:34:19 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd2-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -3.119 X-Spam-Level: X-Spam-Status: No, score=-3.119 tagged_above=-999 required=6.31 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-2.999, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=disabled Authentication-Results: spamd2-us-west.apache.org (amavisd-new); dkim=pass (2048-bit key) header.d=hotmail.com Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd2-us-west.apache.org [10.40.0.9]) (amavisd-new, port 10024) with ESMTP id V9D7kQUrRMl6 for ; Thu, 9 Feb 2017 07:34:15 +0000 (UTC) Received: from SNT004-OMC2S37.hotmail.com (snt004-omc2s37.hotmail.com [65.55.90.112]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with ESMTPS id 60EB55FB0B for ; Thu, 9 Feb 2017 07:34:15 +0000 (UTC) Received: from NAM04-BN3-obe.outbound.protection.outlook.com ([65.55.90.71]) by SNT004-OMC2S37.hotmail.com over TLS secured channel with Microsoft SMTPSVC(7.5.7601.23008); Wed, 8 Feb 2017 23:34:08 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=Hbx+kl8v8pDAWA6yw6QZSYr9QhNOL7pnGU/GvDkm8jQ=; b=TCIzaHiY+DfLBZye/Cho7dBNgUo1tSKICdq8phJcWMGSTRAWqvcD+9P1br1YBd3MF8QC9IuBjqJm0dCA8I9CnsYkdL3c0qmuFOGNV748bTQFWOrAvGMw1wGnUjw1z7Ta2NPoZuVAhY+kAxV9SXwYtH94c6PW0aZEA3AKWVKXc6ryWTqhLil2kQXcFRI/kSHFyL4qo3KSUZfLMO10OdNctZ94NnhugSAVgCm7tbF3tD7nMmwKEaL1ZXeDgFxhR8TVCk+OyMP0pxTRxS9QKrAtn0IdudHNXGCsoQEq5YcbjMk7OyV6BGpZQ59VjZuTRGjb/qzZJp6keBENLrDEABiXHw== Received: from BN3NAM04FT004.eop-NAM04.prod.protection.outlook.com (10.152.92.56) by BN3NAM04HT243.eop-NAM04.prod.protection.outlook.com (10.152.93.61) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.888.7; Thu, 9 Feb 2017 07:34:07 +0000 Received: from BLUPR15MB0033.namprd15.prod.outlook.com (10.152.92.58) by BN3NAM04FT004.mail.protection.outlook.com (10.152.92.98) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.888.7 via Frontend Transport; Thu, 9 Feb 2017 07:34:07 +0000 Received: from BLUPR15MB0033.namprd15.prod.outlook.com ([10.161.124.19]) by BLUPR15MB0033.namprd15.prod.outlook.com ([10.161.124.19]) with mapi id 15.01.0888.026; Thu, 9 Feb 2017 07:34:07 +0000 From: Ryan Zhang To: "user@zookeeper.apache.org" CC: Michael Han Subject: Re: are ephemeral nodes removed when client receives session expiration Thread-Topic: are ephemeral nodes removed when client receives session expiration Thread-Index: AQHSdyuNyY1IOsZalEGBs0yeLVlhdqFJlS8AgAAhwwCAAA6bgIAUXVCAgAAKfICAABYhgIAABuMAgAFRxYCAAJkrAIAAJ1GAgAACzoA= Date: Thu, 9 Feb 2017 07:34:07 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: cloudera.com; dkim=none (message not signed) header.d=none;cloudera.com; dmarc=none action=none header.from=hotmail.com; x-incomingtopheadermarker: OriginalChecksum:BDB3CA15CC1B48DDD7D4C8B2788264151583C7E354C23935FBD3DDDCB772F50E;UpperCasedChecksum:077A43DDFDAF743257737C3FFA82376F59840EBFD37018C5F95D7F19A79BE9C6;SizeAsReceived:8589;Count:37 x-ms-exchange-messagesentrepresentingtype: 1 x-incomingheadercount: 37 x-eopattributedmessage: 0 x-microsoft-exchange-diagnostics: 1;BN3NAM04HT243;5:OfgL3Qj3FhxMd4lWst9lTcrXXxjpnA2xYvD9V/lbsYvFEsgE0Xcmcb+8TyXv1H3Nq0LzZGM0IHc9gYR8onMYyCXL1O8vL+FHjlL+xPcIrZz/D+4uVDsCA0ArSvGYqcsyNuoyXokY8buefOpEk3zZww==;24:yVxISPAd3oKGR7FVciE/SfkVcRNcQX2EsLBx6BHOagkJ/h2CW/N+2r0ue7RVfpSAKfmXgEaESbDwD+HK/KgB6WkZPhF2wDhGSPexVyeB2ZQ=;7:pSajUVejH4lUJ9/NC9pziQdSumUZTMmKGAeEA+iDg12vQ2RZXVIFriRFC+0gzHZP0GaczIInWSJVlf966mC1borZ6LuwhEqjihVhme0P4BfTdTF0xSv8T4R4Fb8VQrdBXr5kwvtZIztLOa150BgtztW14nYOuLyxEJMBKsuQbiNpTUbQiw9PAXsO3vAl0YiYkJalPRQb5SoHx8xUB5c+mDZp1VSE3+trXY5lb6/it91IqPrM3tJHGL3CoS5JXmpj0cW1ZLzkpFubpM5zsbJtZgPsUIZXcpf1SsJZS8pkP5w+bqZ54Njx8sKOcix8jTCYeoTIYyyV+D2I2Pyf+ViLMeeArd8+ui7bsIv4QS2y7f+edNPVMRyeTlnoq14q4P0KtcYvaEyhYUQrE/LlzcFscGmVBBov89FHBDTVl9Ll7wCAjDxeolJr/EG0XacnuDDzmIL/ZHvrwgMHg6M5kO1Z1uNf/tTGrExcOWNNej9AKJ+tZWJpIRPB5uzddGO/QDX8F7yKFm7dQ1TbE64wUpPsyA== x-forefront-antispam-report: EFV:NLI;SFV:NSPM;SFS:(10019020)(98900006);DIR:OUT;SFP:1102;SCL:1;SRVR:BN3NAM04HT243;H:BLUPR15MB0033.namprd15.prod.outlook.com;FPR:;SPF:None;LANG:en; x-ms-office365-filtering-correlation-id: 69f3a898-eae1-4e66-9ad7-08d450be0767 x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(5061506426)(5061507331)(1603103135)(1603101373)(1601125107)(1701031045);SRVR:BN3NAM04HT243; x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(432015086)(82015046);SRVR:BN3NAM04HT243;BCL:0;PCL:0;RULEID:;SRVR:BN3NAM04HT243; x-forefront-prvs: 02135EB356 spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-ID: <8932D79D1F955D4183DA2F7DB3CF3EE4@namprd15.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: hotmail.com X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Feb 2017 07:34:07.7411 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Internet X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN3NAM04HT243 X-OriginalArrivalTime: 09 Feb 2017 07:34:09.0007 (UTC) FILETIME=[E6797FF0:01D282A6] archived-at: Thu, 09 Feb 2017 07:34:23 -0000 U29ycnksIEkgd2FzIHdyb25nIG9uIHRoZSBzZXNzaW9uIG5vdCBjaGVja2VkIGluIHRoZSBsZWFy bmVyIGFuZCBtYXJrIHRoZSBzZXNzaW9uIGNsb3Npbmcgb25seSBydW4gb24gdGhlIGxlYWRlciBw YXJ0LiAgSG93ZXZlciwgaXQgbG9va3MgbGlrZSB0aGUgc2Vzc2lvbiBvbiB0aGUgbGVhcm5lciAo dGhlIHNlY29uZCBzZXJ2ZXIpIHdpbGwgbm90IGV4cGlyZSBhcyBpdCB3YXMgYSByZW9wZW5lZCBz ZXNzaW9uIGFuZCBhcyBmYXIgYXMgSSBzZWUgdGhlIHNlc3Npb24gdGltZSBvdXQgaXMgcGFydGx5 IHNldCBieSB0aGUgY2xpZW50IChhbmQgYWRqdXN0ZWQgYnkgdGhlIHNlcnZlcikuIFNvIHRoZSBz ZXNzaW9uIG9uIHRoZSBuZXcgc2VydmVyIGxvb2tzIHZhbGlkICh1bnRpbCB0aGUgbGVhcm5lciBn ZXRzIHRoZSBjbG9zZVNlc3Npb24gcmVxdWVzdCkuIEFueSBpZGVhcz8gTWF5YmUgSSBjYW4gdHJ5 IHRvIGFkZCBhIHRlc3Q/DQoNCg0KPiBPbiBGZWIgOCwgMjAxNywgYXQgMTE6MjQgUE0sIFJ5YW4g WmhhbmcgPHlhbmd6aGFuZ3JpY2VAaG90bWFpbC5jb20+IHdyb3RlOg0KPiANCj4gSSBhbSBzb3Jy eSB0aGF0IEkgc3RpbGwgZGlkbuKAmXQgZ2V0IGl0LiAgTGV0IG1lIHBvc3QgbXkgc2NlbmFyaW9z IGFnYWluDQo+IA0KPiAxLiAgQ2xpZW50IEEgY29ubmVjdGVkIHRvIExlYWRlciB3aXRoIHNlc3Np b24gUw0KPiAyLiAgU2Vzc2lvbiBTIGV4cGlyZWQgb24gTGVhZGVyLCB3aGljaCBhY2NvcmRpbmcg dG8gdGhlIGNvZGUgYmVsb3cgaXQgd2lsbCBzZXQgdGhlIHNlc3Npb24gYXMgY2xvc2luZw0KPiAz LiAgTGVhZGVyIHRoZW4gc2VuZCBvdXQgYSBjbG9zZSBzZXNzaW9uIHJlcXVlc3QgdG8gaXRzIG93 biBmaXJzdCBwcm9jZXNzb3Igd2hpY2ggd2lsbCBnbyB0aHJvdWdoIHRoZSB1c3VhbCBwaXBlbGlu ZSBhcyB5b3UgbWVudGlvbmVkDQo+IDQuIENsaWVudCBBIHNlbmQgYSByZXF1ZXN0IHdoaWNoIHdp bGwgZ28gdGhyb3VnaCB0aGUgY2hlY2tTZXNzaW9uIGNvZGUgSSBwYXN0ZWQgYmVsb3cgYW5kIGl0 IHNob3VsZCBnZXQgYSBTZXNzaW9uRXhwaXJlZEV4Y2VwdGlvbi4NCj4gNS4gQ2xpZW50IG5vdyBr bm93cyBpdHMgc2Vzc2lvbiBleHBpcmVkIGJ1dCBmb3Igc29tZSByZWFzb24gaXQgdHJpZXMgdG8g Y29ubmVjdCB0byBhbm90aGVyIHNlcnZlciBCIGFuZCBpc3N1ZXMgYSByZWFkLg0KPiANCj4gTm93 IHRoaXMgaXMgYSByYWNlIGJldHdlZW4gdGhlIGZvbGxvd2luZyB0d28gY2hhaW4gb2Ygb3BlcmF0 aW9ucw0KPiANCj4gMS4gVGhlIGNsb3Nlc2Vzc2lvbiByZXF1ZXN0IG5lZWRzIHRvIGdvIHRocm91 Z2ggcXVvcnVtIGFuZCBnZXQgdGhlIG1ham9yaXR5IGFuZCBzZXJ2ZXIgQiBnZXQgdGhlIGNvbW1p dCAob3IgaW5mb3JtKSByZXF1ZXN0IGFuZCBhY3R1YWxseSBraWxsIHRoZSBzZXNzaW9uIGluIHRo ZSBmaW5hbCByZXF1ZXN0IHByb2Nlc3Nvcg0KPiANCj4gMi4gVGhlIHJlYWQgb3BlcmF0aW9uIHRo YXQgZ29lcyB0aHJvdWdoIGxlYXJuZXJaSyBwcm9jZXNzIGNoYWluIGluIG1lbW9yeSAoYXMgZmFy IGFzIEkgc2VlLCB0aGVyZSBpcyBubyBzZXNzaW9uIGNoZWNrIG9uIHJlYWQgYXQgYWxsIHNvIGl0 IHdvbuKAmXQga25vdyB1bnRpbCBpdCByZWFkcyB0aGUgdHJlZSkNCj4gDQo+IFRoZSBmaXJzdCBj aGFpbiBjYW4gZ2V0IHN0dWNrIG9uIGEgdmFyaW91cyBwbGFjZXMgbGlrZSBzb21lIHF1b3J1bSBu b2RlcyBhcmUgc3R1Y2sgb24gc29tZSBvdGhlciBwcm9wb3NhbHMgc28gaXQgbG9va3MgdG8gbWUg dGhhdCB0aGUgc2Vjb25kIGNoYWluIGlzIHZlcnkgbXVjaCBsaWtlbHkgdG8gd2luIGFzIGl0IGRv ZXMgbm90IG5lZWQgdG8gZ28gdGhyb3VnaCBhbnkgcXVvcnVtIG9wZXJhdGlvbi4gVGhlIGtleSBp c3N1ZSBpcyB0aGUgY2xpZW50IG5lZWRzIHRvIHJlY29ubmVjdCBmYXN0IChvciBpbiBwYXJhbGxl bCBhcyB0aGUgb3JpZ2luYWwgcG9zdCBzZWVtcyB0byBpbmRpY2F0ZSkuIEkgdGhpbmsgSSBjYW4g ZGVmaW5pdGVseSBzaW11bGF0ZSB0aGlzIHdpdGggYSB0ZXN0IGJ1dCBpdCB3aWxsIGJlIHRyaWNr eSB0byBtYWtlIGl0IHBhc3MvZmFpbCBkZXRlcm1pbmlzdGljYWxseSBzbyBJIGRpZG7igJl0IHRy eS4NCj4gDQo+IA0KPiB5b3Ugc2VlbXMgdG8gYWdyZWUgdGhhdCBteSBzdGVwIDUgd2lsbCBoYXBw ZW4gaWYgdGhlIGNsaWVudCBjb25uZWN0IHdpdGggYSB2YWxpZCBzZXNzaW9uIElEIHNvIHRoZXJl IHdvbuKAmXQgYmUgYW55IHF1b3J1bSBvcGVyYXRpb24gYmVmb3JlIGVzdGFibGlzaGluZyB0aGUg c2Vzc2lvbi4gU28gdGhlIHJhY2UgYWZ0ZXIgdGhhdCBjYW4gaGFwcGVuLCB3aHkgbm90PyAgQWxz bywgdGhlcmUgaXMgbm8gc2Vzc2lvbiBjaGVjayBmb3IgcmVhZCBvcGVyYXRpb24gb24gdGhlIGxl YXJuZXJzIGFzIGZhciBhcyBJIGNhbiBzZWUgKHBsZWFzZSBwb2ludCBtZSB0byB0aGUgY29kZSBp ZiB5b3UgZmluZCBpdCkuIEZ1cnRoZXJtb3JlLCAgdGhlIG1hcmsgdGhlIHNlc3Npb24gY2xvc2lu ZyBjb2RlIEkgcG9zdGVkIG9ubHkgcnVuIG9uIHRoZSBsZWFkIGFzIGZhciBhcyBJIGNhbiBzZWUg KGFnYWluLCBwbGVhc2UgcG9pbnQgbWUgdG8gdGhlIGNvZGUpDQo+IA0KPiBKdXN0IHRvIHJlcGVh dCwgdGhlIHJhY2UgaXMgYmV0d2VlbiB0aGUgbGVhcm5lciBnZXRzIHRoZSBxdW9ydW0gY2xvc2VT ZXNzaW9uIGFuZCB0aGUgY2xpZW50IGlzc3VlIGEgcmVhZC4gTm8/DQo+IA0KPiANCj4gT24gRmVi IDgsIDIwMTcsIGF0IDk6MDMgUE0sIE1pY2hhZWwgSGFuIDxoYW5tQGNsb3VkZXJhLmNvbTxtYWls dG86aGFubUBjbG91ZGVyYS5jb20+PiB3cm90ZToNCj4gDQo+IEhpIFJ5YW4sDQo+IA0KPj4+IEZy b20gdGhlIGNvZGUgSSBzYXcsICB0aGVyZSBpcyBubyBxdW9ydW0gb3BlcmF0aW9uIHdoZW4gYSBa SyByZWNvbm5lY3Qgd2l0aCBhIHNlc3Npb24gSUQNCj4gDQo+IFRoZSAiY3JlYXRlU2Vzc2lvbihj bnhuLCBwYXNzd2QsIHNlc3Npb25UaW1lb3V0KSIgd2lsbCBzdWJtaXQgYSBzZXNzaW9uIGNyZWF0 ZSByZXF1ZXN0IHRoYXQgd2lsbCBnbyB0aHJvdWdoIHByb2Nlc3NvciBwaXBlbGluZSwgYW5kIHRo YXQgaXMgd2hlcmUgdGhlIHF1b3J1bSBvcGVyYXRpb24gaXMgaW52b2x2ZWQuIEFsc28gbm90ZSB0 aGF0IHdoaWxlIHdlIGFyZSBjcmVhdGluZyBhIG5ldyBzZXNzaW9uIGZvciBjbGllbnQsIHdlIGRp c2FibGVkIHNlcnZlciBzb2NrZXQgY29ubmVjdGlvbiBhcHBlcnRhaW5zIHRvIHRoaXMgY2xpZW50 LCBzbyBzZXJ2ZXIgd291bGQgbm90IHByb2Nlc3MgYW55IHJlcXVlc3RzIGZyb20gdGhlIGNsaWVu dCwgdW50aWwgdGhlIHNlc3Npb24gaXMgZmluYWxpemVkICh3ZSB0aGVuIGVuYWJsZSB0aGUgc2Ft ZSBzb2NrZXQgY29ubmVjdGlvbikuDQo+IA0KPiBUaGVyZSBpcyBhbm90aGVyIGNhc2UgaGVyZSAt IGNvdmVyZWQgYnkgdGhlICJlbHNlIiBjbGF1c2UsIHdoaWNoIGlzIHdoZW4gdGhlIGNsaWVudCBy ZXF1ZXN0IGVtYmVkcyBhIHZhbGlkIHNlc3Npb24gSUQuIElmIGF0IHRoaXMgcG9pbnQgaW4gdGlt ZSwgWm9vS2VlcGVyIGhhcyBhbHJlYWR5IHN0YXJ0ZWQgdGhlIHNlc3Npb24gY2xlYW4gdXAgZm9y IHRoaXMgcGFydGljdWxhciBzZXNzaW9uIElELCB0aGVuIHRoZSBzZXNzaW9uIHdpbGwgYmUgbWFy a2VkIGFzIGNsb3NpbmcuIEFzIHlvdSBub3RpY2VkIHByZXZpb3VzbHksIFpLIHZhbGlkYXRlcyBz ZXNzaW9uIGZvciBldmVyeSBvcGVyYXRpb24gKGV2ZW4gdGhlIHJlYWQgb25lcyksIGFuZCBhIHNl c3Npb24gaW4gdGhlIHN0YXRlIG9mICJjbG9zaW5nIiB3aWxsIG5vdCBwYXNzIHZhbGlkYXRpb24u IE9uIGNsaWVudCBzaWRlIGl0IHdpbGwgcmVjZWl2ZSBTZXNzaW9uRXhwaXJlIGV2ZW50IChhcyBh IHJlc3VsdCBvZiBmYWlsZWQgc2Vzc2lvbiB2YWxpZGF0aW9uKSBmb3IgdGhlIHJlYWQgcmVxdWVz dHMgaXQgcHJldmlvdXNseSBpc3N1ZWQgb24gZXBoZW1lcmFsIG5vZGVzLCBzbyBvdXIgaW52YXJp YW50IHN0aWxsIGhvbGRzLg0KPiANCj4gSG9wZSB0aGVzZSBoZWxwLg0KPiANCj4gDQo+IE9uIFdl ZCwgRmViIDgsIDIwMTcgYXQgMTE6NTUgQU0sIFJ5YW4gWmhhbmcgPHlhbmd6aGFuZ3JpY2VAaG90 bWFpbC5jb208bWFpbHRvOnlhbmd6aGFuZ3JpY2VAaG90bWFpbC5jb20+PiB3cm90ZToNCj4gSGks IE1pY2hhZWwsIEkgYW0gc29ycnkgdGhhdCBJIHNwb2tlIHRvbyBzb29uLiAgRnJvbSB0aGUgY29k ZSBJIHNhdywgIHRoZXJlIGlzIG5vIHF1b3J1bSBvcGVyYXRpb24gd2hlbiBhIFpLIHJlY29ubmVj dCB3aXRoIGEgc2Vzc2lvbiBJRCAocGFzdGVkIHRoZSBjb2RlIGJlbG93KS4gRGlkIEkgbWlzcyBz b21ldGhpbmcgYWdhaW4/DQo+IA0KPiANCj4gbG9uZyBzZXNzaW9uSWQgPSBjb25uUmVxLmdldFNl c3Npb25JZCgpOw0KPiBpZiAoc2Vzc2lvbklkID09IDApIHsNCj4gICAgTE9HLmluZm8oIkNsaWVu dCBhdHRlbXB0aW5nIHRvIGVzdGFibGlzaCBuZXcgc2Vzc2lvbiBhdCAiDQo+ICAgICAgICAgICAg KyBjbnhuLmdldFJlbW90ZVNvY2tldEFkZHJlc3MoKSk7DQo+ICAgIGNyZWF0ZVNlc3Npb24oY254 biwgcGFzc3dkLCBzZXNzaW9uVGltZW91dCk7DQo+IH0gZWxzZSB7DQo+ICAgIGxvbmcgY2xpZW50 U2Vzc2lvbklkID0gY29ublJlcS5nZXRTZXNzaW9uSWQoKTsNCj4gICAgTE9HLmluZm8oIkNsaWVu dCBhdHRlbXB0aW5nIHRvIHJlbmV3IHNlc3Npb24gMHgiDQo+ICAgICAgICAgICAgKyBMb25nLnRv SGV4U3RyaW5nKGNsaWVudFNlc3Npb25JZCkNCj4gICAgICAgICAgICArICIgYXQgIiArIGNueG4u Z2V0UmVtb3RlU29ja2V0QWRkcmVzcygpKTsNCj4gICAgaWYgKHNlcnZlckNueG5GYWN0b3J5ICE9 IG51bGwpIHsNCj4gICAgICAgIHNlcnZlckNueG5GYWN0b3J5LmNsb3NlU2Vzc2lvbihzZXNzaW9u SWQpOw0KPiAgICB9DQo+ICAgIGlmIChzZWN1cmVTZXJ2ZXJDbnhuRmFjdG9yeSAhPSBudWxsKSB7 DQo+ICAgICAgICBzZWN1cmVTZXJ2ZXJDbnhuRmFjdG9yeS5jbG9zZVNlc3Npb24oc2Vzc2lvbklk KTsNCj4gICAgfQ0KPiAgICBjbnhuLnNldFNlc3Npb25JZChzZXNzaW9uSWQpOw0KPiAgICByZW9w ZW5TZXNzaW9uKGNueG4sIHNlc3Npb25JZCwgcGFzc3dkLCBzZXNzaW9uVGltZW91dCk7DQo+IH0N Cj4gDQo+IA0KPiANCj4gDQo+IE9uIEZlYiA3LCAyMDE3LCBhdCAzOjQ2IFBNLCBSeWFuIFpoYW5n IDx5YW5nemhhbmdyaWNlQGhvdG1haWwuY29tPG1haWx0bzp5YW5nemhhbmdyaWNlQGhvdG1haWwu Y29tPj4gd3JvdGU6DQo+IA0KPiBUaGFuayB5b3UgdmVyeSBtdWNoIE1pY2hhZWwsIEkgYW0gbm93 IGNsZWFyLg0KPiANCj4gT24gRmViIDcsIDIwMTcsIGF0IDM6MjEgUE0sIE1pY2hhZWwgSGFuIDxo YW5tQGNsb3VkZXJhLmNvbTxtYWlsdG86aGFubUBjbG91ZGVyYS5jb20+PG1haWx0bzpoYW5tQGNs b3VkZXJhLmNvbT4+IHdyb3RlOg0KPiANCj4gSGkgUnlhbiwNCj4gDQo+IFRoYW5rcyBmb3IgdGhl IGVsYWJvcmF0aW9ucy4gSSBzZWUgd2h5IHlvdSBhcmUgY29uZnVzZWQuIFlvdXIgY2FzZSBpcyB2 YWxpZCwgZXhjZXB0IGluIHN0ZXAgNToNCj4gDQo+IENsaWVudCBub3cga25vd3MgaXRzIHNlc3Np b24gZXhwaXJlZCBidXQgZm9yIHNvbWUgcmVhc29uIGl0IHRyaWVzIHRvIGNvbm5lY3QgdG8gYW5v dGhlciBzZXJ2ZXIgQiBhbmQgaXNzdWVzIGEgcmVhZC4NCj4gDQo+IEF0IHRoaXMgcG9pbnQgb2Yg dGltZSwgdGhlcmUgYXJlIHR3byBwb3NzaWJsZSBjYXNlczoNCj4gKiBDbGllbnQgQSdzIHNlc3Np b24gaGFzIGJlZW4gY2xlYW5lZCB1cC4gQXMgcGFydCBvZiB0aGUgc2Vzc2lvbiBjbGVhbiB1cCwg dGhlIGVwaGVtZXJhbCBub2RlcyBhcHBlcnRhaW4gd2l0aCBBIHdpbGwgYmUgZ29uZS4gQWZ0ZXIg QSByZWNvbm5lY3QgdG8gdGhlIHF1b3J1bSwgaXQgd2lsbCBub3Qgc2VlIHRoZSBvbGQgZXBoZW1l cmFsIG5vZGVzLg0KPiAqIENsaWVudCBBJ3Mgc2Vzc2lvbiBoYXMgbm90IGZpbmlzaGVkIGNsZWFu ZWQgdXAuIEluIHRoaXMgY2FzZSwgaWYgY2xpZW50IEEgaXMgdHJ5aW5nIHRvIGlzc3VlIGEgcmVh ZCwgaXQgaGFzIHRvIGZpcnN0IGVzdGFibGlzaCBhIG5ldyBzZXNzaW9uIHdpdGggcXVvcnVtLiBC ZWNhdXNlIHRoZSBzZXNzaW9uIGNsZWFuIHVwIHRyYW5zYWN0aW9uIG9mIEEgaXMgYWxyZWFkeSBp biBmbGlnaHQsIGFuZCBiZWNhdXNlIG9mIHRoZSBzZXF1ZW50aWFsIGNvbnNpc3RlbmN5IGd1YXJh bnRlZSBwcm92aWRlZCBieSBab29LZWVwZXIsIGNsaWVudCBBIHdpbGwgbm90IGJlIGFibGUgdG8g cmVjb25uZWN0IHRvIHRoZSBxdW9ydW0gLyBlc3RhYmxpc2ggdGhlIHNlc3Npb24sIHVudGlsIHRo ZSBwcmV2aW91cyBzZXNzaW9uIHVwIHRyYW5zYWN0aW9uIGhhcyBmaW5pc2hlZC4gU28gd2Ugd2ls bCBiZSBiYWNrIHRvIGZpcnN0IGNhc2UgaGVyZSwgd2hpY2ggYWxzbyBndWFyYW50ZWUgdGhlIG9s ZCBlcGhlbWVyYWwgbm9kZXMgYXJlIGdvbmUuDQo+IA0KPiANCj4gT24gVHVlLCBGZWIgNywgMjAx NyBhdCAyOjAyIFBNLCBSeWFuIFpoYW5nIDx5YW5nemhhbmdyaWNlQGhvdG1haWwuY29tPG1haWx0 bzp5YW5nemhhbmdyaWNlQGhvdG1haWwuY29tPjxtYWlsdG86eWFuZ3poYW5ncmljZUBob3RtYWls LmNvbT4+IHdyb3RlOg0KPiBIaSwgTWljaGFlbCwNCj4gVGhhbmsgeW91IGZvciB5b3VyIGNsYXJp ZmljYXRpb24uIFdoYXQgeW91IHNhaWQgc2VlbXMgdG8gYmUgY29uc2lzdGVudCB3aXRoIHdoYXQg SSBzYXcgaW4gdGhlIGNvZGUuIEhvd2V2ZXIsIEkgYW0gc3RpbGwgY29uZnVzZWQgYnkgeW91ciBj b25jbHVzaW9uLiBNeSBjb25jbHVzaW9uIGZyb20gdGhlIGNvZGUgaXMgdGhhdCBpdCBpcyB0b3Rh bGx5IHBvc3NpYmxlIGZvciBhIGNsaWVudCB0byBnZXQgc2Vzc2lvbiBleHBpcmVkIGFuZCByZWNv bm5lY3QgdG8gYW5vdGhlciBzZXZlciB0byBzdGlsbCBzZWUgdGhlIGVwaGVtZXJhbCBub2RlLiBU aGUgZXhhY3QgcmVhc29uIGlzIGNhdXNlZCBieSB0aGUgY29kZSBJIHBhc3RlZCBiZWxvdy4gIEkg YW0gbm90IHN1cmUgaWYgd2UgYXJlIG9uIHRoZSBzYW1lIHBhZ2UgYXMgeW91IHNlZW0gdG8gc3Vn Z2VzdCB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZS4gTGV0IG1lIGVsYWJvcmF0ZSBhIGJpdCBvbiBo b3cgdGhpcyBjYW4gaGFwcGVuLg0KPiANCj4gMS4gIENsaWVudCBBIGNvbm5lY3RlZCB0byBMZWFk ZXIgd2l0aCBzZXNzaW9uIFMNCj4gMi4gIFNlc3Npb24gUyBleHBpcmVkIG9uIExlYWRlciwgd2hp Y2ggYWNjb3JkaW5nIHRvIHRoZSBjb2RlIGJlbG93IGl0IHdpbGwgc2V0IHRoZSBzZXNzaW9uIGFz IGNsb3NpbmcNCj4gMy4gIExlYWRlciB0aGVuIHNlbmQgb3V0IGEgY2xvc2Ugc2Vzc2lvbiByZXF1 ZXN0IHRvIGl0cyBvd24gZmlyc3QgcHJvY2Vzc29yIHdoaWNoIHdpbGwgZ28gdGhyb3VnaCB0aGUg dXN1YWwgcGlwZWxpbmUgYXMgeW91IG1lbnRpb25lZA0KPiA0LiBDbGllbnQgQSBzZW5kIGEgcmVx dWVzdCB3aGljaCB3aWxsIGdvIHRocm91Z2ggdGhlIGNoZWNrU2Vzc2lvbiBjb2RlIEkgcGFzdGVk IGJlbG93IGFuZCBpdCBzaG91bGQgZ2V0IGEgU2Vzc2lvbkV4cGlyZWRFeGNlcHRpb24uDQo+IDUu IENsaWVudCBub3cga25vd3MgaXRzIHNlc3Npb24gZXhwaXJlZCBidXQgZm9yIHNvbWUgcmVhc29u IGl0IHRyaWVzIHRvIGNvbm5lY3QgdG8gYW5vdGhlciBzZXJ2ZXIgQiBhbmQgaXNzdWVzIGEgcmVh ZC4NCj4gDQo+IE5vdyB0aGlzIGlzIGEgcmFjZSBiZXR3ZWVuIHRoZSBmb2xsb3dpbmcgdHdvIGNo YWluIG9mIG9wZXJhdGlvbnMNCj4gDQo+IDEuIFRoZSBjbG9zZXNlc3Npb24gcmVxdWVzdCBuZWVk cyB0byBnbyB0aHJvdWdoIHF1b3J1bSBhbmQgZ2V0IHRoZSBtYWpvcml0eSBhbmQgc2VydmVyIEIg Z2V0IHRoZSBjb21taXQgKG9yIGluZm9ybSkgcmVxdWVzdCBhbmQgYWN0dWFsbHkga2lsbCB0aGUg c2Vzc2lvbiBpbiB0aGUgZmluYWwgcmVxdWVzdCBwcm9jZXNzb3INCj4gDQo+IDIuIFRoZSByZWFk IG9wZXJhdGlvbiB0aGF0IGdvZXMgdGhyb3VnaCBsZWFybmVyWksgcHJvY2VzcyBjaGFpbiBpbiBt ZW1vcnkgKGFzIGZhciBhcyBJIHNlZSwgdGhlcmUgaXMgbm8gc2Vzc2lvbiBjaGVjayBvbiByZWFk IGF0IGFsbCBzbyBpdCB3b27igJl0IGtub3cgdW50aWwgaXQgcmVhZHMgdGhlIHRyZWUpDQo+IA0K PiBUaGUgZmlyc3QgY2hhaW4gY2FuIGdldCBzdHVjayBvbiBhIHZhcmlvdXMgcGxhY2VzIGxpa2Ug c29tZSBxdW9ydW0gbm9kZXMgYXJlIHN0dWNrIG9uIHNvbWUgb3RoZXIgcHJvcG9zYWxzIHNvIGl0 IGxvb2tzIHRvIG1lIHRoYXQgdGhlIHNlY29uZCBjaGFpbiBpcyB2ZXJ5IG11Y2ggbGlrZWx5IHRv IHdpbiBhcyBpdCBkb2VzIG5vdCBuZWVkIHRvIGdvIHRocm91Z2ggYW55IHF1b3J1bSBvcGVyYXRp b24uIFRoZSBrZXkgaXNzdWUgaXMgdGhlIGNsaWVudCBuZWVkcyB0byByZWNvbm5lY3QgZmFzdCAo b3IgaW4gcGFyYWxsZWwgYXMgdGhlIG9yaWdpbmFsIHBvc3Qgc2VlbXMgdG8gaW5kaWNhdGUpLiBJ IHRoaW5rIEkgY2FuIGRlZmluaXRlbHkgc2ltdWxhdGUgdGhpcyB3aXRoIGEgdGVzdCBidXQgaXQg d2lsbCBiZSB0cmlja3kgdG8gbWFrZSBpdCBwYXNzL2ZhaWwgZGV0ZXJtaW5pc3RpY2FsbHkgc28g SSBkaWRu4oCZdCB0cnkuDQo+IA0KPiBBbSBJIG1pc3Npbmcgc29tZXRoaW5nPw0KPiANCj4gLVJ5 YW4NCj4gDQo+IA0KPiANCj4gT24gRmViIDcsIDIwMTcsIGF0IDE6MjQgUE0sIE1pY2hhZWwgSGFu IDxoYW5tQGNsb3VkZXJhLmNvbTxtYWlsdG86aGFubUBjbG91ZGVyYS5jb20+PG1haWx0bzpoYW5t QGNsb3VkZXJhLmNvbT4+IHdyb3RlOg0KPiANCj4gSGkgUnlhbiwNCj4gDQo+IEkgYW0gbm90IHN1 cmUgd2hhdCB5b3Ugd2VyZSBjb25mdXNlZCBhYm91dCByZWdhcmRpbmcgc2Vzc2lvbiBjbGVhbmlu ZyB1cCBjb2RlLiBIZXJlIGlzIG15IHVuZGVyc3RhbmRpbmcsIGhvcGUgaXQgaGVscHMuDQo+IA0K PiAqIFNlc3Npb24gY2xlYW4gdXAgaXMgc3RhcnRlZCBmcm9tIG1hcmtpbmcgdGhlIHN0YXRlIG9m IGEgc2Vzc2lvbiBhcyBjbG9zZWQsIGFzIHlvdSBub3RpY2VkLiBUaGlzIGlzIGJlY2F1c2UgZWFj aCBzZXNzaW9uIGNsZWFuIHVwIHdpbGwgdGFrZSBhIHdoaWxlIHNvIHdlIG5lZWQgbWFrZSBzdXJl IHRoYXQgZHVyaW5nIHNlc3Npb24gY2xlYW4gdXAsIHNlcnZlciB3aWxsIG5vdCBjb250aW51ZSBw cm9jZXNzaW5nIHRoZSByZXF1ZXN0cyBmcm9tIHRoZSBjbGllbnQgdGhhdCBhcHBlcnRhaW4gd2l0 aCB0aGlzIHNlc3Npb24uDQo+IA0KPiAqIE9uY2Ugc2Vzc2lvbiBpcyBtYXJrZWQgYXMgY2xvc2lu Zywgd2Ugd2lsbCBzZW5kIGEgcmVxdWVzdCBzbyB0aGUgY2xvc2luZyBvZiB0aGUgc2Vzc2lvbiBu b3Qgb25seSBhcHBsaWVzIHRvIHRoZSBsZWFkZXIgYnV0IGFsc28gb24gdGhlIHF1b3J1bSBzZXJ2 ZXJzLiBUaGlzIGlzIGp1c3QgbGlrZSBhbGwgb3RoZXIgcmVxdWVzdHMgdGhhdCB3aWxsIGdvIHRo cm91Z2ggdGhlIG5vcm1hbCByZXF1ZXN0cyBwcm9jZXNzIHBpcGVsaW5lLg0KPiANCj4gKiBBIHZh bGlkIHNlc3Npb24gaXMgYSBwcmVyZXF1aXNpdGUgZm9yIGFueSBvZiB0aGUgY2xpZW50IG9wZXJh dGlvbnMgKGluY2x1ZGluZyByZWFkIG9wZXJhdGlvbnMpLCBzbyB0aGUgbGl2ZW5lc3Mgb2YgdGhl IHNlc3Npb24gaXMgdmFsaWRhdGVkIGJlZm9yZSBwcm9jZXNzaW5nIGEgcmVhZCBvcGVyYXRpb24u DQo+IA0KPiANCj4gT24gV2VkLCBKYW4gMjUsIDIwMTcgYXQgMjoyNSBQTSwgUnlhbiBaaGFuZyA8 eWFuZ3poYW5ncmljZUBob3RtYWlsLmNvbTxtYWlsdG86eWFuZ3poYW5ncmljZUBob3RtYWlsLmNv bT48bWFpbHRvOnlhbmd6aGFuZ3JpY2VAaG90bWFpbC5jb20+PiB3cm90ZToNCj4gSSBhbSBhIGJp dCBjb25mdXNlZCBieSB0aGUgY29kZQ0KPiANCj4gT24gSmFuIDI1LCAyMDE3LCBhdCAxOjMzIFBN LCBNaWNoYWVsIEhhbiA8aGFubUBjbG91ZGVyYS5jb208bWFpbHRvOmhhbm1AY2xvdWRlcmEuY29t PjxtYWlsdG86aGFubUBjbG91ZGVyYS5jb20+PG1haWx0bzpoYW5tQGNsb3VkZXJhLmNvbTxtYWls dG86aGFubUBjbG91ZGVyYS5jb20+Pj4gd3JvdGU6DQo+IA0KPiBEb2VzIFpLIGd1YXJhbnRlZSB0 aGF0IGVwaGVtZXJhbCBub2RlcyBmcm9tIGEgY2xpZW50IGFyZSByZW1vdmVkIG9uIHRoZQ0KPiBz ZXZlciBieSB0aGUgdGltZSB0aGUgY2xpZW50IHJlY2VpdmVzIGEgc2Vzc2lvbiBleHBpcmF0aW9u IGV2ZW50Pw0KPiANCj4gInRoZSBzZXJ2ZXIiIGlzIGEgdmFndWUgZGVmaW5pdGlvbiwgYXMgWm9v S2VlcGVyIGVuc2VtYmxlIGlzIGNvbXBvc2VkIG9mDQo+IG11bHRpcGxlIHNlcnZlcnMgOikuDQo+ IA0KPiBUaGVyZWZvcmUsIGl0IHNlZW1zIHRvIGJlIHBvc3NpYmxlIGZvciBhIGNsaWVudCB0byBj b25uZWN0IHRvIGFub3RoZXINCj4gc2VydmVyIHRvIHNlZSB0aGUgbm9kZSB0aGVyZS4NCj4gDQo+ IFRoaXMgc2VlbXMgdGhlIG9ubHkgY2FzZSBJIGNhbiB0aGluayBvZiB0aGF0IGxlYWQgdG8gdGhl IGluY29uc2lzdGVudCB2aWV3DQo+IGZyb20gY2xpZW50IHNpZGUuIEknbGwgZWxhYm9yYXRlIGFz IGZvbGxvd3MsIGZpcnN0IHRoZSBndWFyYW50ZWVzIG9mDQo+IFpvb0tlZXBlciB0aGF0J3MgcmVs ZXZhbnQgdG8gdGhpcyBjYXNlOg0KPiANCj4gDQo+ICogWm9vS2VlcGVyIHF1b3J1bSBzaG91bGQg aGF2ZSBhbHJlYWR5IGNvbW1pdHRlZCB0aGUgdHJhbnNhY3Rpb24gb2YgY2xvc2luZw0KPiB0aGUg c2Vzc2lvbiB3aGVuIGEgY2xpZW50IHJlY2VpdmVzIHRoZSBzZXNzaW9uIGV4cGlyZSBldmVudC4N Cj4gDQo+IA0KPiBIZXJlIGFyZSB0aGUgY29kZSB0aGF0IHRocm93cyBLZWVwZXJFeGNlcHRpb24u U2Vzc2lvbkV4cGlyZWRFeGNlcHRpb24NCj4gDQo+IHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBj aGVja1Nlc3Npb24obG9uZyBzZXNzaW9uSWQsIE9iamVjdCBvd25lcikNCj4gDQo+ICAgICAgIHRo cm93cyBLZWVwZXJFeGNlcHRpb24uU2Vzc2lvbkV4cGlyZWRFeGNlcHRpb24sDQo+ICAgICAgIEtl ZXBlckV4Y2VwdGlvbi5TZXNzaW9uTW92ZWRFeGNlcHRpb24sDQo+ICAgICAgIEtlZXBlckV4Y2Vw dGlvbi5Vbmtub3duU2Vzc2lvbkV4Y2VwdGlvbiB7DQo+ICAg4oCm4oCm4oCmLg0KPiAgIGlmIChz ZXNzaW9uLmlzQ2xvc2luZygpKSB7DQo+ICAgICAgIHRocm93IG5ldyBLZWVwZXJFeGNlcHRpb24u U2Vzc2lvbkV4cGlyZWRFeGNlcHRpb24oKTsNCj4gICB9DQo+IH0NCj4gDQo+IEhlcmUgaXMgdGhl IGNvZGUgdG8gc2V0IGl0IHRvIGJlIGNsb3NpbmcgZGlyZWN0bHkNCj4gDQo+IHN5bmNocm9uaXpl ZCBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ2xvc2luZyhsb25nIHNlc3Npb25JZCkgew0KPiAgIGlm IChMT0cuaXNUcmFjZUVuYWJsZWQoKSkgew0KPiAgICAgICBMT0cudHJhY2UoIlNlc3Npb24gY2xv c2luZzogMHgiICsgTG9uZy50b0hleFN0cmluZyhzZXNzaW9uSWQpKTsNCj4gICB9DQo+ICAgU2Vz c2lvbkltcGwgcyA9IHNlc3Npb25zQnlJZC5nZXQoc2Vzc2lvbklkKTsNCj4gICBpZiAocyA9PSBu dWxsKSB7DQo+ICAgICAgIHJldHVybjsNCj4gICB9DQo+ICAgcy5pc0Nsb3NpbmcgPSB0cnVlOw0K PiB9DQo+IA0KPiBhbmQgaGVyZSBpcyB0aGUgY29kZSB0aGF0IGNhbGwgdGhlIGFib3ZlDQo+IHB1 YmxpYyB2b2lkIHJ1bkltcGwoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gew0KPiANCj4g ICB3aGlsZSAocnVubmluZykgew0KPiAgICAgIOKApuKApi4uLg0KPiANCj4gICAgICAgZm9yIChT ZXNzaW9uSW1wbCBzIDogc2Vzc2lvbkV4cGlyeVF1ZXVlLnBvbGwoKSkgew0KPiAgICAgICAgICAg c2V0U2Vzc2lvbkNsb3Npbmcocy5zZXNzaW9uSWQpOw0KPiAgICAgICAgICAgZXhwaXJlci5leHBp cmUocyk7DQo+ICAgICAgIH0NCj4gICB9DQo+IH0NCj4gDQo+IHRoZSBleHBpcmUgZnVuY3Rpb24g bG9va3MgbGlrZSB0aGlzDQo+IA0KPiBwdWJsaWMgdm9pZCBleHBpcmUoU2Vzc2lvbiBzZXNzaW9u KSB7DQo+ICAgbG9uZyBzZXNzaW9uSWQgPSBzZXNzaW9uLmdldFNlc3Npb25JZCgpOw0KPiANCj4g ICBjbG9zZShzZXNzaW9uSWQpOw0KPiB9DQo+IA0KPiBhbmQgY2xvc2UgZnVuY3Rpb24gaGVyZQ0K PiANCj4gcHJpdmF0ZSB2b2lkIGNsb3NlKGxvbmcgc2Vzc2lvbklkKSB7DQo+ICAgUmVxdWVzdCBz aSA9IG5ldyBSZXF1ZXN0KG51bGwsIHNlc3Npb25JZCwgMCwgT3BDb2RlLmNsb3NlU2Vzc2lvbiwg bnVsbCwgbnVsbCk7DQo+ICAgc2V0TG9jYWxTZXNzaW9uRmxhZyhzaSk7DQo+ICAgc3VibWl0UmVx dWVzdChzaSk7DQo+IH0NCj4gDQo+IHNvIGl0IGxvb2tzIHRvIG1lIHRoYXQgdGhlIHNlc3Npb24g aXMgbWFya2VkIGFzIGNsb3NpbmcgZmlyc3QgYW5kIHRoZW4gdGhlIGNsb3NlU2Vzc2lvbiBpcyBz ZW5kLiBUaGlzIHdpbGwgaGFwcGVuIG9uDQo+IHRoZSBsZWFkIG9ubHkgdGhvdWdoIGFzIHRoZSBj aGVja1Nlc3Npb24gaXMgb25seSBjYWxsZWQgb24gdGhlIGxlYWQgYnV0IGl0IGlzIGNhbGxlZCBl dmVuIG9uIHJlYWQgb3BlcmF0aW9uLg0KPiANCj4gTWF5IEkgbWlzc2luZyBzb21ldGhpbmc/DQo+ IA0KPiANCj4gKiBDbGVhbiB1cCBvZiBlcGhlbWVyYWwgbm9kZXMgYXNzb2NpYXRlZCB3aXRoIHRo ZSBzZXNzaW9uIGlzIHBhcnQgb2YgdGhlDQo+IGNsb3Npbmcgc2Vzc2lvbiB0cmFuc2FjdGlvbiwg c28gZm9yIHRoZSBxdW9ydW0gb2Ygc2VydmVycyB3aG8gaGF2ZSBhbHJlYWR5DQo+IGNvbW1pdHRl ZCB0aGUgdHJhbnNhY3Rpb24sIHRoZSBlcGhlbWVyYWwgbm9kZXMgc2hvdWxkIGhhdmUgZ29uZSBh bHJlYWR5LCBvbg0KPiB0aG9zZSBzZXJ2ZXJzLg0KPiANCj4gKiBab29LZWVwZXIgcXVvcnVtIHdv dWxkIG5vdCBoYXZlIHByb2Nlc3NlZCB0aGUgbmV3IHNlc3Npb24gZXN0YWJsaXNobWVudA0KPiBy ZXF1ZXN0IGZvciB0aGUgc2FtZSBjbGllbnQsIHVudGlsIGFmdGVyIHRoZSBjbG9zaW5nIHNlc3Np b24gcmVxdWVzdCBoYXMNCj4gYmVlbiBwcm9jZXNzZWQgYmVjYXVzZSB0cmFuc2FjdGlvbnMgYXJl IG9yZGVyZWQgYWNyb3NzIHF1b3J1bS4NCj4gDQo+IEdpdmVuIHRoZXNlIGd1YXJhbnRlZXMsIGlm IGEgY2xpZW50IHJlZXN0YWJsaXNoZXMgYSBuZXcgc2Vzc2lvbiB2aWENCj4gY29ubmVjdGluZyB0 byBhIHNlcnZlciB3aGljaCB3YXMgdGhlIHF1b3J1bSBvZiBzZXJ2ZXJzIHRoYXQgY29tbWl0dGVk IHRoZQ0KPiBjbG9zaW5nIHNlc3Npb24gdHJhbnNhY3Rpb24sIHRoZW4gdGhlIGNsaWVudCBzaG91 bGQgbm90IHNlZSB0aGUgb2xkDQo+IGVwaGVtZXJhbCBub2RlIHVwb24gbmV3IHNlc3Npb24gZXN0 YWJsaXNoZWQuDQo+IA0KPiBab29LZWVwZXIgZG9lcyBub3QgZ3VhcmFudGVlIGEgd3JpdGUgdHJh bnNhY3Rpb24gb2NjdXIgc3luY2hyb25vdXNseSBhY3Jvc3MNCj4gYWxsIG9mIHRoZSBzZXJ2ZXJz LCBzaW5jZSBhIHdyaXRlIHJlcXVlc3Qgb25seSByZXF1aXJlcyBhIHF1b3J1bSBvZiBzZXJ2ZXJz DQo+IHRvIGFja25vd2xlZGdlLiBBcyBhIHJlc3VsdCwgaXQgaXMgdmFsaWQgdGhhdCBzb21lIHNl cnZlcnMgbWlnaHQgbGFnIGJlaGluZA0KPiB0aGUgc3RhdGUgb2YgdGhlIHF1b3J1bS4gSSBzdXNw ZWN0IHRoaXMgY2FzZSBpcyBwb3NzaWJsZToNCj4gDQo+ICogQ2xpZW50IHJlY2VpdmVzIHNlc3Np b24gZXhwaXJlIGV2ZW50LCBhbmQgY2xpZW50IGNsb3NlIGl0cyBjb25uZWN0aW9uIHRvDQo+IHNl cnZlciBBLg0KPiANCj4gKiBDbGllbnQgcmVjb25uZWN0cyB0byBzZXJ2ZXIgQiwgd2hpY2ggbGFn cyBiZWhpbmQgcXVvcnVtLCB0aGF0IGRvZXMgbm90DQo+IGNvbnRhaW4gdGhlIGNoYW5nZXMgdG8g dGhlIGRhdGEgdHJlZSByZWdhcmRpbmcgZXBoZW1lcmFsIG5vZGVzLg0KPiANCj4gKiBDbGllbnQg c2VlcyB0aGUgZXBoZW1lcmFsIG5vZGUgc28gaXQgZG9lcyBub3RoaW5nLiBMYXRlciB0aGUgbm9k ZSBpcw0KPiBjbGVhbmVkIHVwIHdoZW4gc2VydmVyIEIgc3luYyB3aXRoIHF1b3J1bS4NCj4gDQo+ IENsaWVudCBjYW4gZW5zdXJlIGl0IGFsd2F5cyBzZWUgdGhlIHN0YXRlIG9mIHRydXRoIG9mIHRo ZSBxdW9ydW0gYnkgaXNzdWluZw0KPiBhIHN5bmMoKSByZXF1ZXN0IGJlZm9yZSBpc3N1aW5nIGEg cmVhZCByZXF1ZXN0LiBBIHN5bmMgcmVxdWVzdCB3aWxsIGZvcmNlDQo+IHRoZSBzZXJ2ZXIgaXQn cyBjb25uZWN0aW5nIHRvIHN5bmMgd2l0aCB0aGUgcXVvcnVtLiBJZiBLYWZrYSBkb2VzIHRoaXMs DQo+IHdpbGwgdGhlIGJ1ZyBnbyBhd2F5PyBPZiBjb3Vyc2UsIHJldHJ5IGNyZWF0aW5nIGVwaGVt ZXJhbCBub2RlcyBjYW4gYWxzbw0KPiBzb2x2ZSB0aGUgcHJvYmxlbSAodGhlcmUgYXJlIHBvc3Np YmxlIG90aGVyIHNvbHV0aW9ucyBhcyB3ZWxsLCBieSBoYXZpbmcNCj4gY2xpZW50IHRvIGRvIHNv bWUgYm9vayBrZWVwaW5nIHdvcmsgdG8gZGlmZmVyZW50aWF0ZSB2ZXJzaW9ucyBiZXR3ZWVuDQo+ IGVwaGVtZXJhbCBub2RlcykuDQo+IA0KPiANCj4gT24gV2VkLCBKYW4gMjUsIDIwMTcgYXQgMTE6 MzIgQU0sIFJ5YW4gWmhhbmcgPHlhbmd6aGFuZ3JpY2VAaG90bWFpbC5jb208bWFpbHRvOnlhbmd6 aGFuZ3JpY2VAaG90bWFpbC5jb20+PG1haWx0bzp5YW5nemhhbmdyaWNlQGhvdG1haWwuY29tPjxt YWlsdG86eWFuZ3poYW5ncmljZUBob3RtYWlsLmNvbTxtYWlsdG86eWFuZ3poYW5ncmljZUBob3Rt YWlsLmNvbT4+Pg0KPiB3cm90ZToNCj4gDQo+IEdvb2QgcXVlc3Rpb24sIEFGQUlLLCBpdOKAmXMg bm90IHRoZSBjYXNlLg0KPiANCj4gVGhlIHNlcnZlciB3aWxsIHRocm93IGFuIFNlc3Npb25FeHBp cmVkRXhjZXB0aW9uIGR1cmluZyBjaGVja1Nlc3Npb24gY2FsbA0KPiBhcyBzb29uIGFzIHRoZSBz ZXNzaW9uIGlzIG1hcmtlZCBhcyBpc0Nsb3NpbmcuIEhvd2V2ZXIsIHNlc3Npb24gZXhwaXJhdGlv bg0KPiBhY3R1YWxseSByZXF1aXJlcyBhIHRyYW5zYWN0aW9uIChvZiB0eXBlIE9wQ29kZS5jbG9z ZVNlc3Npb24pIHdoaWNoIHdpbGwgYmUNCj4gc2VuZCB0byB0aGUgbGVhZGVyIHRvIGdvIHRocm91 Z2ggdGhlIHF1b3J1bS4gIFRoZSBzZXNzaW9uIGFuZCBlcGhlbWVyYWwNCj4gbm9kZSB3aWxsIG9u bHkgYmUgcmVtb3ZlZCBhZnRlciB0aGUgdHJhbnNhY3Rpb24gaXMgIGNvbW1pdHRlZCBhbmQgcHJv Y2Vzc2VkDQo+IGluIHRoZSBmaW5hbCBwcm9jZXNzb3Igb24gb3RoZXIgbm9kZXMuIFRoZXJlZm9y ZSwgaXQgc2VlbXMgdG8gYmUgcG9zc2libGUNCj4gZm9yIGEgY2xpZW50IHRvIGNvbm5lY3QgdG8g YW5vdGhlciBzZXJ2ZXIgdG8gc2VlIHRoZSBub2RlIHRoZXJlLiBJIGFtIG5vdA0KPiBlbnRpcmVs eSBzdXJlIGlmIGl0IGNhbiB1c2UgdGhlIHNhbWUgc2Vzc2lvbiBpZCB0aG91Z2gsIGl0IHNlZW1z IHBvc3NpYmxlDQo+IGFzIHRoZSBzZXNzaW9uIGNsb3NlIGlzIG9ubHkgYmFzZWQgb24gdGhlIHNl c3Npb24gZXhwaXJlIHRpbWUgYW5kIHRoZXJlIGNhbg0KPiBiZSBkZWxheXMgaW4gc2Vzc2lvbiBw aW5ncy4NCj4gDQo+IE9uIEphbiAyNSwgMjAxNywgYXQgODo1MyBBTSwgSnVuIFJhbyA8anVucmFv QGdtYWlsLmNvbTxtYWlsdG86anVucmFvQGdtYWlsLmNvbT48bWFpbHRvOmp1bnJhb0BnbWFpbC5j b20+PG1haWx0bzpqdW5yYW9AZ21haWwuY29tPG1haWx0bzpqdW5yYW9AZ21haWwuY29tPj48bWFp bHRvOmp1bnJhPG1haWx0bzpqdW5yYT48bWFpbHRvOmp1bnJhPG1haWx0bzpqdW5yYT4+DQo+IG9A Z21haWwuY29tPG1haWx0bzpvQGdtYWlsLmNvbT48bWFpbHRvOm9AZ21haWwuY29tPjxtYWlsdG86 b0BnbWFpbC5jb208bWFpbHRvOm9AZ21haWwuY29tPj4+PiB3cm90ZToNCj4gDQo+IEhpLA0KPiAN Cj4gRG9lcyBaSyBndWFyYW50ZWUgdGhhdCBlcGhlbWVyYWwgbm9kZXMgZnJvbSBhIGNsaWVudCBh cmUgcmVtb3ZlZCBvbiB0aGUNCj4gc2V2ZXIgYnkgdGhlIHRpbWUgdGhlIGNsaWVudCByZWNlaXZl cyBhIHNlc3Npb24gZXhwaXJhdGlvbiBldmVudD8gSSBhbQ0KPiBnZXR0aW5nIGNvbmZsaWN0aW5n IGluZm8gb24gdGhpcyAoDQo+IGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2Uv S0FGS0EtNDI3NykuIENvdWxkIHNvbWVvbmUgY2xhcmlmeT8NCj4gDQo+IFRoYW5rcywNCj4gDQo+ IEp1bg0KPiANCj4gDQo+IA0KPiANCj4gLS0NCj4gQ2hlZXJzDQo+IE1pY2hhZWwuDQo+IA0KPiAN Cj4gDQo+IA0KPiAtLQ0KPiBDaGVlcnMNCj4gTWljaGFlbC4NCj4gDQo+IA0KPiANCj4gDQo+IC0t DQo+IENoZWVycw0KPiBNaWNoYWVsLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0tDQo+IENoZWVy cw0KPiBNaWNoYWVsLg0KPiANCg0K