Return-Path: linux-nfs-owner@vger.kernel.org Received: from mx1.netapp.com ([216.240.18.38]:50419 "EHLO mx1.netapp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755665Ab2JVS2F (ORCPT ); Mon, 22 Oct 2012 14:28:05 -0400 From: "Myklebust, Trond" To: Chris Perl CC: "linux-nfs@vger.kernel.org" Subject: Re: RPC Race Condition Date: Mon, 22 Oct 2012 18:28:02 +0000 Message-ID: <4FA345DA4F4AE44899BD2B03EEEC2FA909289403@SACEXCMBX04-PRD.hq.netapp.com> References: <20121022180339.GC24763@nyc-qws-132.nyc.delacy.com> In-Reply-To: <20121022180339.GC24763@nyc-qws-132.nyc.delacy.com> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org List-ID: T24gTW9uLCAyMDEyLTEwLTIyIGF0IDE0OjAzIC0wNDAwLCBDaHJpcyBQZXJsIHdyb3RlOg0KPiBJ IGJlbGlldmUgSSBtYXkgaGF2ZSBpZGVudGlmaWVkIGEgcmFjZSBjb25kaXRpb24gd2l0aCB0aGUg Y2xpZW50IHNpZGUNCj4gUlBDIGNvZGUgdGhhdCBjb21lcyBpbnRvIHBsYXkgd2hlbiBoYW5kbGlu ZyBhIHJlY29ubmVjdC4NCj4gDQo+IEZpcnN0LCBJJ2xsIGRldGFpbCBob3cgdG8gcmVwcm9kdWNl IGl0LCB0aGVuIGdpdmUgc29tZSBkZXRhaWxzIG9uIHdoYXQgSQ0KPiB0aGluayBpcyBnb2luZyBv bi4NCj4gDQo+IA0KPiBUTyBSRVBST0RVQ0U6DQo+IA0KPiBDbGllbnQgaXMgMTkyLjE2OC4xLjEw MA0KPiBTZXJ2ZXIgaXMgMTkyLjE2OC4xLjIwMA0KPiANCj4gY2xpZW50IyBzaG93bW91bnQgLWUg c2VydmVyDQo+IEV4cG9ydCBsaXN0IGZvciBzZXJ2ZXI6DQo+IC9leHBvcnQvdGVzdCAxOTIuMTY4 LjEuMTAwDQo+IGNsaWVudCMgbWtkaXIgLXAgL21udC90ZXN0DQo+IGNsaWVudCMgbW91bnQgLXQg bmZzIC1vIFwNCj4gCXJvLHJlbGF0aW1lLHZlcnM9Myxyc2l6ZT0xMzEwNzIsd3NpemU9NTI0Mjg4 LG5hbWxlbj0yNTUsYWNyZWdtaW49MCxhY3JlZ21heD0wLGFjZGlybWluPTAsYWNkaXJtYXg9MCxo YXJkLHByb3RvPXRjcCx0aW1lbz02MDAscmV0cmFucz0yLHNlYz1zeXMgXA0KPiAJMTkyLjE2OC4x LjIwMDovZXhwb3J0L3Rlc3QgL21udC90ZXN0DQo+IA0KPiBOb3RlOiBJIGhhdmUgc2V0IGFsbCB0 aGUgYWMqIHZhcmlhYmxlcyB0byAwIHRvIGJldHRlciBiZSBhYmxlIHRvIHRyYWNlDQo+IHRoZSBj YWxscyBteSB1c2VyIHNwYWNlIHByb2dyYW0gaXMgbWFraW5nIHRvIHRoaW5ncyB0aGF0IGdvIG91 dCBvdmVyIHRoZQ0KPiB3aXJlLiAgVGhpcyBpcyBub3QgY3J1Y2lhbCBhcyB0aGUgcHJvYmxlbSBz dGlsbCBleGlzdHMgd2l0aCB0aGVzZSBzZXQgdG8NCj4gdGhlIGRlZmF1bHQuDQo+IA0KPiBOb3cs IG9uIHRoZSBjbGllbnQgc3RhcnQgdGhlIGF0dGFjaGVkIHB5dGhvbiBwcm9ncmFtIFsxXSB3aXRo IHJlYWwgdGltZQ0KPiBwcmlvcml0eSAoU0NIRURfUlIpLCBzdGF0J2luZyBhIGZpbGUgb24gdGhl IE5GUyBtb3VudDoNCj4gDQo+IGNsaWVudCMgdG91Y2ggL21udC90ZXN0L2ZpbGUudHh0DQo+IGNs aWVudCMgY2hydCA1MCAuL2hhbmcucHkgL21udC90ZXN0L2ZpbGUudHh0IDEwDQo+IA0KPiA+RnJv bSBoZXJlLCBpdCBpcyBuZWNlc3NhcnkgdG8gc2ltdWxhdGUgYSBuZXR3b3JrIGV2ZW50IHN1Y2gg dGhhdCB0aGUNCj4gY2xpZW50IGlzIHVuYWJsZSB0byB0YWxrIHRvIHRoZSBzZXJ2ZXIsIGJ1dCB0 aGUgc2VydmVyIGlzIHN0aWxsIGFibGUgdG8NCj4gdGFsayB0byB0aGUgY2xpZW50Lg0KPiANCj4g Y2xpZW50IyBpcCByb3V0ZSBhZGQgYmxhY2tob2xlIDE5Mi4xNjguMS4yMDAvMzIgJiYgaXAgcm91 dGUgZmx1c2ggY2FjaGUNCj4gDQo+IE5vdywgd2Ugd2FpdCB1bnRpbCB0aGUgdXNlcnNwYWNlIHBy b2dyYW0gbWFrZXMgaXRzIG5leHQgc3RhdCBjYWxsLiAgT25jZQ0KPiBpdCBkb2VzLCByZXN0YXJ0 IHRoZSBORlMgc2VydmVyIHByb2Nlc3NlcyBvbiB0aGUgc2VydmVyOg0KPiANCj4gc2VydmVyIyAv ZXRjL2luaXQuZC9uZnMgcmVzdGFydA0KPiANCj4gVGhlIGlkZWEgb2YgcmVzdGFydGluZyB0aGUg bmZzIHNlcnZlciBwcm9jZXNzZXMgaXMgdG8gZW5zdXJlIHRoYXQgRklOcw0KPiBhbmQvb3IgYW4g UlNUIGNvbWUgYWNyb3NzIGZyb20gdGhlIHNlcnZlciB0byB0aGUgY2xpZW50LCBjaGFuZ2luZyB0 aGUNCj4gc3RhdGUgb2YgaXRzIHNvY2tldCB3aGlsZSBpdHMgd2FpdGluZyBmb3IgdGhlIHJlc3Bv bnNlIHRvIGl0cyBjYWxsIG9mDQo+IGBjYWxsX3RyYW5zbWl0JyBmcm9tIHdpdGhpbiBgX19ycGNf ZXhlY3V0ZScuDQo+IA0KPiBGaW5hbGx5IGJhY2sgb24gdGhlIGNsaWVudCwgcmVtb3ZlIHRoZSBi bGFja2hvbGUgcm91dGU6DQo+IA0KPiBjbGllbnQjIGlwIHJvdXRlIGRlbCAxOTIuMTY4LjEuMjAw LzMyICYmIGlwIHJvdXRlIGZsdXNoIGNhY2hlDQo+IA0KPiBPbmNlIHRoZSByb3V0ZSBpcyByZW1v dmVkLCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gZG8gdGhpbmdzIGxpa2UgcGluZyB0aGUNCj4gc2Vy dmVyIGFnYWluLCBydW4gYHJwY2luZm8gLXAnIGFnYWluc3QgaXQsIGV0Yy4gIEhvd2V2ZXIsIGFu eSBORlMNCj4gb3BlcmF0aW9ucyBmb3IgdGhpcyBzZXJ2ZXIgd2lsbCBjb250aW51ZSB0byBoYW5n LiAgVGhlIHdheSB0byByZWNvdmVyIGlzDQo+IHRvIGtpbGwgdGhlIFNDSEVEX1JSIHByb2Nlc3Mu ICBBZnRlciB0aGF0LCB0aGluZ3Mgd2lsbCByZWNvdmVyLg0KPiANCj4gDQo+IE5PVEVTOg0KPiAN Cj4gVGhpcyBzZXR1cCBmb3IgcmVwcm9kdWNpbmcgdGhlIHByb2JsZW0gbWF5IHNlZW0gYSBsaXR0 bGUgc2lsbHksIGJ1dCB3ZQ0KPiBoYWQgc29tZXRoaW5nIHZlcnkgc2ltaWxpYXIgaGFwcGVuIGlu IG91ciBwcm9kdWN0aW9uIGVudmlyb25tZW50IGENCj4gY291cGxlIG9mIHdlZWtzIGFnbyBhbmQg aXQgY2F1c2VkIHVzIHRvIGdldCBpbnRvIHRoaXMgc2l0dWF0aW9uLiAgTm90ZQ0KPiB0aGF0IGl0 IGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIHNlcnZlciBzaWRlIG9mIHRoaW5ncy4gIEkndmUg c2Vlbg0KPiB0aGlzIGhhcHBlbiB3aXRoIGEgbGludXggTkZTIHNlcnZlciAoYXMgYWJvdmUpIGFu ZCB3aXRoIGEgTkFTIGZyb20gYQ0KPiBsYXJnZSBzdG9yYWdlIHZlbmRvci4NCj4gDQo+IElmIHlv dSBydW4gdGhlIHN0YXQnaW5nIHByb2Nlc3MgYXMgYSBub3JtYWwgcHJvY2VzcywgaS5lLiBTQ0hF RF9PVEhFUiwNCj4gdGhlbiBldmVyeXRoaW5nIHJlY292ZXJzIHdpdGhvdXQgaW50ZXJ2ZW50aW9u IChpLmUuIGl0IGFsbCB3b3JrcyBhcyBpdA0KPiBzaG91bGQpLiAgSG93ZXZlciwgSSBiZWxpZXZl IHRoZSBzYW1lIHJhY2UgY29uZGl0aW9uIGlzIHN0aWxsIHRoZXJlLCBidXQNCj4ganVzdCBkb2Vz bid0IG1hbmlmZXN0IGJlY2F1c2UgaW4gdGhpcyBjYXNlIHRoZSBzdGF0J2luZyBwcm9jZXNzIGRv ZXMgbm90DQo+IGhhdmUgdGhlIHNhbWUgc2NoZWR1bGluZyBhZHZhbnRhZ2Ugb3ZlciBycGNpb2Qu DQo+IA0KPiBXZSBleHBlcmllbmNlZCB0aGlzIHByb2JsZW0gb24gdGhlIGZvbGxvd2luZyBDZW50 T1Mga2VybmVsOg0KPiAyLjYuMzItMjc5LjUuMi5lbDYuY2VudG9zLnBsdXMueDg2XzY0LCBidXQg SSd2ZSB2ZXJpZmllZCB0aGF0IHRoZSBzYW1lDQo+IGJlaGF2aW9yIGV4aXN0cyBhcyBsYXRlIGFz IDMuN3JjMi4NCj4gDQo+IER1cmluZyB0aGUgaGFuZ2luZywgaWYgeW91IHdhdGNoIHRoZSBuZXR3 b3JrLCB5b3UgY2FuIHNlZSB0aGF0IHRoZQ0KPiBjbGllbnQgY29udGludWFsbHkgY29tcGxldGVz IGEgVENQIDMtd2F5IGhhbmRoc2FrZSwgYnV0IHRoZW4gaW1tZWRpYXRlbHkNCj4gdGVhcnMgdGhl IGNvbm5lY3Rpb24gZG93bi4NCj4gDQo+IA0KPiBNWSBBVFRFTVBURUQgQU5BTFlTSVM6DQo+IA0K PiBGaXJzdCwgSSBhbSBubyBleHBlcnQgYW5kIGp1c3Qgc3RhcnRpbmcgbG9va2luZyBhdCB0aGUg cnBjIGNvZGUgaW4gdGhlDQo+IGtlcm5lbCBhYm91dCAyIHdlZWtzIGFnby4gIFRoZXJlZm9yZSBz b21lIG9yIGFsbCBvZiB3aGF0IEkgbGF5IG91dCBoZXJlDQo+IG1heSBiZSB3cm9uZyBvciBtaXNn dWlkZWQgZXRjLiAgVGhpcyBpcyBqdXN0IHdoYXQgSSd2ZSBiZWVuIGFibGUgdG8NCj4gZmlndXJl IG91dCBieSBsb29raW5nIGF0IHRoZSBzb3VyY2UgY29kZSBhbmQgd3JpdGluZyBhIGJ1bmNoIG9m DQo+IFN5c3RlbVRhcCBzY3JpcHRzLg0KPiANCj4gSSBjYW4gZ2V0IG1vcmUgZGV0YWlsZWQgaWYg bmVjZXNzYXJ5IChpbmNsdWRpbmcgc2hhcmluZyB0aGUgU3lzdGVtVGFwDQo+IHNjcmlwdHMgSSB1 c2VkIHRvIG9ic2VydmUgdGhpcyBiZWhhdmlvciksIGJ1dCBkb24ndCB3YW50IHRvIG1ha2UgdGhp cw0KPiBlbWFpbCBvdmVybHkgbG9uZywgc28gd2lsbCBqdXN0IHRvdWNoIG9uIHRoZSBoaWdoIHBv aW50czoNCj4gDQo+ICAgLSBUaGUgc2xlZXBpbmcgcHJvY2VzcyBpcyB0aGF0IGlzIGluIHRoZSBt aWRkbGUgb2Ygd2FpdGluZyBmb3IgYQ0KPiAgICAgcmVzcG9uc2UgdG8gYGNhbGxfdHJhbnNtaXQn IGlzIHdva2VuIHVwIHZpYSBgeHNfZXJyb3JfcmVwb3J0JyB3aGVuDQo+ICAgICB0aGUgRklOcyBh bmQvb3IgUlNUIGNvbWVzIGFjcm9zcyB0aGUgd2lyZS4NCj4gDQo+ICAgLSBJdCBmaW5kcyB0aGUg YHRrX3N0YXR1cycgZmllbGQgb2YgdGhlIHRhc2sgc2V0IHRvIEVBR0FJTiwgYW5kIHNvDQo+ICAg ICByZXRyaWVzIGBjYWxsX3RyYW5zbWl0Jy4NCj4gDQo+ICAgLSBPbiB0aGUgbmV4dCBhdHRlbXB0 LCBgdGNwX3NlbmRtc2cnIGFuZCBpdHMgY2FsbCBvZg0KPiAgICAgYHNrX3N0cmVhbV93YWl0X2Nv bm5lY3QnIHNlZSB0aGUgc29ja2V0IGhhcyBhbiBlcnJvciBvZiBFQ09OTlJFU0VULg0KPiAgICAg VGhlcmVmb3JlLCB0aGUgbmV4dCBjYWxsIHRvIGBjYWxsX3N0YXR1cycgc2VlcyB0aGlzIGFuZCBz ZXRzIHRoZQ0KPiAgICAgbmV4dCBgdGtfYWN0aW9uJyB0byBiZSBgY2FsbF9iaW5kJy4gDQo+IA0K PiAgIC0gYGNhbGxfYmluZCcgZG9lcyBpdHMgdGhpbmcgYW5kIHRoZW4gd2UgY29tZSB0byBgY2Fs bF9jb25uZWN0Jw0KPiANCj4gICAtIGBjYWxsX2Nvbm5lY3QnIHNjaGVkdWxlcyB0aGUgZXhlY3V0 aW9uIG9mIGB4c190Y3Bfc2V0dXBfc29ja2V0JyB3aXRoDQo+ICAgICBycGNpb2QgdmlhIHJwY2lv ZCdzIHdvcmtxdWV1ZSBhbmQgdGhlbiBnb2VzIHRvIHNsZWVwLg0KPiANCj4gICAtIEhlcmUgaXMg d2hlcmUgSSBiZWxpZXZlIHRoZSBwcm9ibGVtIGNvbWVzIGFib3V0LiAgT3VyIHNsZWVwaW5nDQo+ ICAgICB0aHJlYWQgd2FpdGluZyBmb3IgdGhlIGNvbm5lY3QgdG8gZmluaXNoIGlzIHdva2VuIHVw IGJ5IHJwY2lvZA0KPiAgICAgZWFybHkgdmlhIHRoZSBmb2xsb3dpbmcgY2FsbCBzdGFjazoNCj4g DQo+ICAgICAgIDB4ZmZmZmZmZmZhMDQyZjg0MCA6IHJwY19tYWtlX3J1bm5hYmxlKzB4MC8weDgw IFtzdW5ycGNdDQo+ICAgICAgIDB4ZmZmZmZmZmZhMDQyZmI1ZSA6IHJwY193YWtlX3VwX3Rhc2tf cXVldWVfbG9ja2VkKzB4MThlLzB4MjcwIFtzdW5ycGNdDQo+ICAgICAgIDB4ZmZmZmZmZmZhMDQy ZmM4ZSA6IHJwY193YWtlX3VwX3N0YXR1cysweDRlLzB4ODAgW3N1bnJwY10NCj4gICAgICAgMHhm ZmZmZmZmZmEwNDI4OGVjIDogeHBydF93YWtlX3BlbmRpbmdfdGFza3MrMHgyYy8weDMwIFtzdW5y cGNdDQo+ICAgICAgIDB4ZmZmZmZmZmZhMDQyYjlmZCA6IHhzX2Vycm9yX3JlcG9ydCsweDRkLzB4 OTAgW3N1bnJwY10NCj4gICAgICAgMHhmZmZmZmZmZjgxNDg3NDM2IDogdGNwX2Rpc2Nvbm5lY3Qr MHgzNTYvMHg0MTAgW2tlcm5lbF0NCj4gICAgICAgMHhmZmZmZmZmZjgxNGE5YzIwIDogaW5ldF9z dHJlYW1fY29ubmVjdCsweDUwLzB4MmMwIFtrZXJuZWxdDQo+ICAgICAgIDB4ZmZmZmZmZmY4MTQy YmIyMCA6IGtlcm5lbF9jb25uZWN0KzB4MTAvMHgyMCBba2VybmVsXQ0KPiAgICAgICAweGZmZmZm ZmZmYTA0MmIzNjggOiB4c190Y3Bfc2V0dXBfc29ja2V0KzB4ZTgvMHg0YzAgW3N1bnJwY10NCj4g ICAgICAgMHhmZmZmZmZmZjgxMDhjNzYwIDogd29ya2VyX3RocmVhZCsweDE3MC8weDJhMCBba2Vy bmVsXQ0KPiAgICAgICAweGZmZmZmZmZmODEwOTFkNjYgOiBrdGhyZWFkKzB4OTYvMHhhMCBba2Vy bmVsXQ0KPiAgICAgICAweGZmZmZmZmZmODEwMGMxNGEgOiBjaGlsZF9yaXArMHhhLzB4MjAgW2tl cm5lbF0NCj4gDQo+ICAgICBJdCBhcHBlYXJzIHRoYXQgd2l0aCBycGNpb2QgdHJ5aW5nIHRvIHJl Y29ubmVjdCwgaXQgd2luZHMgdXANCj4gICAgIGluZGlyZWN0bHkgaW52b2tpbmcgYHhzX2Vycm9y X3JlcG9ydCcgdmlhIGEgY2FsbGJhY2sgZnJvbSB0aGUNCj4gICAgIHNvY2svdGNwIGxheWVyLg0K PiANCj4gICAtIEF0IHRoaXMgcG9pbnQgdGhlIGB0a19zdGF0dXMnIGlzIHNldCB0byBFQUdBSU4s IHNvIGlmDQo+ICAgICBgY2FsbF9jb25uZWN0X3N0YXR1cycgaGFuZGxlZCBFR0FJTiBieSBzZXR0 aW5nIGB0a19hY3Rpb24nIHRvDQo+ICAgICBgY2FsbF9jb25uZWN0JyBhZ2FpbiBBTkQgcnBjaW9k IHdhcyBmaW5pc2hlZCB0cnlpbmcgdG8gZXhlY3V0ZQ0KPiAgICAgYHhzX3RjcF9zZXR1cF9zb2Nr ZXQnIHRoZW4gd2Ugd291bGQgYmUgb2suDQo+IA0KPiAgIC0gSG93ZXZlciwgYGNhbGxfY29ubmVj dF9zdGF0dXMnIHNldHMgYHRrX2FjdGlvbicgdG8gYGNhbGxfdHJhbnNtaXQnDQo+ICAgICBhbmQg Z29lcyBvbi4NCj4gDQo+ICAgLSBBdCB0aGlzIHBvaW50IHJwY2lvZCBpcyBzdGlsbCBleGVjdXRp bmcgdHJ5aW5nIHRvIGNvbm5lY3QgdGhlDQo+ICAgICBzb2NrZXQsIGFuZCBldmVudHVhbGx5IHdp bGwgc3VjY2VlZCwgYnV0IG5vdyBvdXIgdGhyZWFkIGFuZCBycGNpb2QNCj4gICAgIGFyZSByYWNp bmcgdG8gc2VlIHdobyBjYW4gdXBkYXRlL2NoZWNrIHRoZSBzdGF0ZSBvZiB0aGUgc29ja2V0DQo+ ICAgICBmaXJzdC4NCj4gDQo+ICAgICBEZXBlbmRpbmcgb24gd2hvIHdpbnMgYW5kIHdoYXQgc3Rh dHVzIGlzIHJldHVybmVkLA0KPiAgICAgYHhzX3RjcF9zZW5kX3JlcXVlc3QnIHdpbGwgZWl0aGVy IHRlYXIgdGhlIGNvbm5lY3Rpb24gZG93biBhbmQNCj4gICAgIHJldHJ5LCBvciBpdCB3aWxsIHNp bXBseSByZXRyeSB3aXRob3V0IHRoZSB0ZWFyZG93bi4gIFdlIGNhbiB3aW5kIHVwDQo+ICAgICBp biBhIGxvb3Agb2Ygc2V0dXAvdGVhcmRvd25zIGFuZCBhcmUgbmV2ZXIgYWJsZSB0byBhY3R1YWxs eSByZXR1cm4NCj4gICAgIGZyb20gYF9fcnBjX2V4ZWN1dGUuJw0KPiANCj4gICAgIFNpbmNlIHdl J3JlIHN0dWNrIGluIGBfX3JwY19leGVjdXRlJyBhbmQgdGhlIHRyYW5zcG9ydCBpcyBsb2NrZWQs IG5vDQo+ICAgICBvdGhlciBORlMgb3BlcmF0aW9ucyBjYW4gY29tZSBpbiBhbmQgdGhleSBhbGwg aGFuZy4NCj4gDQo+IFNpbXBseSBjaGFuZ2luZyBgY2FsbF9jb25uZWN0X3N0YXR1cycgdG8gaGFu ZGxlIEVBR0FJTiBhcyBkZXNjcmliZWQNCj4gYWJvdmUgZGlkICJmaXgiIG15IHByb2JsZW0gYW5k IEkgY291bGQgbm8gbG9uZ2VyIHJlcHJvZHVjZSB0aGUgaXNzdWUsDQo+IGhvd2V2ZXIgSSBiZWxp ZXZlIHRoYXQgY291bGQgcmVzdWx0IGluIGFub3RoZXIgcmFjZSBjb25kaXRpb24gd2l0aA0KPiBt dWx0aXBsZSBycGNpb2QncyB0cnlpbmcgdG8gZXhlY3V0ZSBgeHNfdGNwX3NldHVwX3NvY2tldCcg YXQgdGhlIHNhbWUNCj4gdGltZS4NCj4gDQo+IEkgdGhpbmsgdGhlICJyaWdodCIgZml4LCBhdCBs ZWFzdCBhcyBmYXIgYXMgSSBjYW4gdGVsbCB3b3VsZCBiZSB0bw0KPiBlbnN1cmUgdGhhdCBycGNp b2QgZG9lcyBub3Qgd2FrZSB1cCB0aGUgcHJvY2VzcyBzbGVlcGluZyBvbg0KPiBgY2FsbF9jb25u ZWN0JyB1bnRpbCBpdCBpcyBjb21wbGV0ZWx5IGRvbmUgd2l0aCBpdHMgd29yayAod2hldGhlciB0 aGF0DQo+IGlzIHN1Y2Nlc3Mgb3IgZmFpbHVyZSkuICBJIGJlbGlldmUgdGhpcyBjb3VwbGVkIHdp dGggbWFraW5nDQo+IGBjYWxsX2Nvbm5lY3Rfc3RhdHVzJyBoYW5kbGUgRUFHQUlOIHdvdWxkIHdv cmsuDQo+IA0KPiBVbmZvcnR1bmF0ZWx5LCBJJ20gc3RyZXRjaGluZyBteSBhYmlsaXRpZXMgaGVy ZSBhbmQgZG8gbm90IHJlYWxseSBoYXZlIGENCj4gZ29vZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0 aGUgaW50ZXJhY3Rpb25zIGNvbWUgdG9nZXRoZXIgdG8gYmUgYWJsZSB0bw0KPiBzdWJtaXQgYSBw YXRjaCB0byBmaXggdGhpcy4NCj4gDQo+IA0KPiBXT1JLQVJPVU5EOg0KPiANCj4gQmFzZWQgb24g d2hhdCBJIGZvdW5kIGFib3ZlIEkgZGVjaWRlZCB0byB0cnkgc2V0dGluZyB0aGUgcmVhbCB0aW1l DQo+IHByaW9yaXR5IG9mIGFsbCBteSBycGNpb2QgdGhyZWFkcyB0byBvbmUgaGlnaGVyIHRoYW4g dGhhdCBvZiBteSByZWFsDQo+IHRpbWUgc3RhdCdpbmcgcHJvY2VzcyAoaS5lLiA1MSkuICBXaGVu IEkgZGlkIHRoaXMsIEkgY291bGQgbm8gbG9uZ2VyDQo+IHJlcHJvZHVjZSB0aGUgcHJvYmxlbS4g IFNldHRpbmcgdGhlIHJ0IHByaW9yaXR5IHRvIDQ5IGhvd2V2ZXIsIGRpZCBhbGxvdw0KPiBpdCB0 byBzdGlsbCBoYXBwZW4uICBJIGJlbGlldmUgdGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBy ZWFzb24gdGhhdA0KPiB0aGluZ3Mgc2VlbSB0byB3b3JrIG5vcm1hbGx5IGZvciBTQ0hFRF9PVEhF UiBwcm9jZXNzZXMuICBTaW1wbHkgdGhhdA0KPiB0aGV5IGRvIG5vdCBoYXZlIHRoZSBzYW1lIHNj aGVkdWxpbmcgYWR2YW50YWdlIG92ZXIgcnBjaW9kIGFuZCB0aGVyZWZvcmUNCj4gaXRzIGxpa2Vs eSB0aGF0IHJwY2lvZCB3aW5zIGFuZCBvdXIgdGhyZWFkIGZpbmRzIHRoZSBzb2NrZXQgc3RhdGUg YXMNCj4gZWl0aGVyIGBUQ1BfU1lOX1NFTlQnIG9yIGBUQ1BfRVNUQUJMSVNIRUQnIGFuZCBldmVy eXRoaW5nIHJlY292ZXJzLg0KPiANCg0KSGkgQ2hyaXMsDQoNClRoYW5rcyBmb3IgaGVscGluZyB0 byBkZWJ1ZyB0aGlzLCBhbmQgZm9yIHByb3ZpZGluZyBzdWNoIGEgdGhvcm91Z2gNCmFuYWx5c2lz ISBUaGlzIGlzIGdyZWF0IHdvcmshDQoNCkRvZXMgYWRkaW5nIGEgY2hlY2sgaW4geHNfZXJyb3Jf cmVwb3J0KCkgZm9yIHhwcnRfY29ubmVjdGluZyh4cHJ0KSBzbw0KdGhhdCB3ZSBza2lwIHRoZSBj YWxsIHRvIHhwcnRfd2FrZV9wZW5kaW5nX3Rhc2tzKCkgaWYgdHJ1ZSwgaGVscCB0bw0KcmVzb2x2 ZSB0aGUgcmFjZT8NCg0KQ2hlZXJzDQogIFRyb25kDQotLSANClRyb25kIE15a2xlYnVzdA0KTGlu dXggTkZTIGNsaWVudCBtYWludGFpbmVyDQoNCk5ldEFwcA0KVHJvbmQuTXlrbGVidXN0QG5ldGFw cC5jb20NCnd3dy5uZXRhcHAuY29tDQo=