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.96) (envelope-from ) id 1vZ4fx-002ji4-2Y for pgpool-hackers@arkaria.postgresql.org; Fri, 26 Dec 2025 10:04:03 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vZ4fw-00939h-05 for pgpool-hackers@arkaria.postgresql.org; Fri, 26 Dec 2025 10:04:00 +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.96) (envelope-from ) id 1vZ4fv-00939a-2N for pgpool-hackers@lists.postgresql.org; Fri, 26 Dec 2025 10:04:00 +0000 Received: from meldrar.postgresql.org ([2a02:c0:301:0:ffff::31]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vZ4ft-002uSS-1I for pgpool-hackers@lists.postgresql.org; Fri, 26 Dec 2025 10:04:00 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=postgresql.org; s=20171124; h=Content-Transfer-Encoding:Content-Type: Mime-Version:References:In-Reply-To:From:Subject:Cc:To:Message-Id:Date:Sender :Reply-To:Content-ID:Content-Description; bh=YT0Jyqoqk/HwPX3cMcV+tt9YKB6CZ+foMq+jv3NJpLY=; b=Cwib3ivaX+sE5MWKzN/hZiTm9P tEivajcboez7YFb5fTHWh353kAOrEtExDLetkvvyKVLpgfK8uXqCXUbyFK4M0cLVCWsg5ZP1awGIG BR0cbOk+hJqYCZQ9g+uwocQYHrzvbsikg/F4UTdJEBCD/MzcZSo5vbRxz7VFeQ0b/MBpMM46kD4SA RNunwy0/3SrwacwSXTK1aKDMtzPTLEWfsP1W0OsvGDnZX5m5OheaKqwshzX2cnh2u9FDVysOjmdER h+kS2ld0llPwMhHBhXMNVTEpWto9rJKzHJHuJOM6lO9IHceTX7NLPGciP+jmUX1kyyxpERjVYJ5fP 4OvLyKgg==; Received: from [2409:11:4120:300:2f5f:5599:52de:b92b] (helo=localhost) by meldrar.postgresql.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vZ4fq-0064Rb-2b; Fri, 26 Dec 2025 10:03:57 +0000 Date: Fri, 26 Dec 2025 19:03:49 +0900 (JST) Message-Id: <20251226.190349.1321105398044197651.ishii@postgresql.org> To: nadav@tailorbrands.com Cc: pgpool-hackers@lists.postgresql.org Subject: Re: Proposal: recent access based routing for primary-replica setups From: Tatsuo Ishii In-Reply-To: <20251226.165446.148265507050550257.ishii@postgresql.org> References: <20251223.174625.653233061559427537.ishii@postgresql.org> <20251226.165446.148265507050550257.ishii@postgresql.org> X-Mailer: Mew version 6.8 on Emacs 29.3 Mime-Version: 1.0 Content-Type: Text/Plain; charset=utf-8 Content-Transfer-Encoding: base64 X-Host-Lookup-Failed: Reverse DNS lookup failed for 2409:11:4120:300:2f5f:5599:52de:b92b (failed) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk SGkgTmFkYXYsDQoNCkkganVzdCB3YW50IHRvIG1ha2UgaXQgY2xlYXIuIFRoZSBwYXRjaCBzaG91 bGQgYmUgYXBwbGllZCBvbiB0b3Agb2YNCnlvdXIgbGF0ZXN0LnBhdGNoLg0KDQo+IChQbGVhc2Ug ZGlzcmVnYXJkIHByZXZpb3VzIG1haWwuIEkgc2VlbSB0byBoYXZlIG1hbmdsZWQgdGhlIG1lc3Nh Z2UpLg0KPiANCj4gSSB0aGluayBJIGZvdW5kIGEgY2F1c2Ugb2YgdGhlIHByb2JsZW0uIE9uIExp bnV4LCBpZiBTSUdDSExEIGlzDQo+IGlnbm9yZWQgKHNldCB0byBTSUdfSUdOKSwgd2FpdHBpZCgp IGNhbm5vdCBnZXQgcHJvcGVyIGNoaWxkIHN0YXR1cy4NCj4gQmVjYXVzZSB0aGUga2VybmVsIHJl bGNhaW1zIHRoZSByZXNvdXJjZSBmb3IgdGhlIGNoaWxkIHByb2Nlc3MgdG8gbm90DQo+IG1ha2Ug dGhlIGNoaWxkIHByb2Nlc3MgYSB6b21iaWUuIEFuZCB0aGlzIG1ha2VzIHdhaXRwaWQoKSB0byBm YWlsIHdpdGgNCj4gRUNITEQuIFNpbmNlIHRoZSByZXR1cm4gb2Ygd2FpdHBpZCgpIGlzIG5vdCBj aGVja2VkLCBJIGRpZCBub3Qgbm90aWNlDQo+IHRoZSB3YWl0cGlkKCkgZmFpbHVyZSAoSSByZWNv bW1lbmQgdG8gY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBvZg0KPiB3YWl0cGlkKCkpLg0KPiANCj4g CS8qIHNldCB1cCBzaWduYWwgaGFuZGxlcnMgKi8NCj4gCXNpZ25hbChTSUdBTFJNLCBTSUdfREZM KTsNCj4gCXNpZ25hbChTSUdURVJNLCBteV9zaWduYWxfaGFuZGxlcik7DQo+IAlzaWduYWwoU0lH SU5ULCBteV9zaWduYWxfaGFuZGxlcik7DQo+IAlzaWduYWwoU0lHSFVQLCByZWxvYWRfY29uZmln X2hhbmRsZXIpOw0KPiAJc2lnbmFsKFNJR1FVSVQsIG15X3NpZ25hbF9oYW5kbGVyKTsNCj4gCXNp Z25hbChTSUdDSExELCBTSUdfSUdOKTsJPC0tLSBTSUdDSExEIGlzIGlnbm9yZWQNCj4gCXNpZ25h bChTSUdVU1IxLCBteV9zaWduYWxfaGFuZGxlcik7DQo+IAlzaWduYWwoU0lHVVNSMiwgU0lHX0lH Tik7DQo+IAlzaWduYWwoU0lHUElQRSwgU0lHX0lHTik7DQo+IA0KPiBUbyBmaXggdGhpcywgZWl0 aGVyIGNoYW5nZSB0aGUgbGluZSBhYm92ZSB0bzoNCj4gDQo+IAlzaWduYWwoU0lHQ0hMRCwgU0lH X0RGTCk7DQo+IG9yDQo+IAlzaWduYWwoU0lHQ0hMRCwgbXlfc2lnbmFsX2hhbmRsZXIpOw0KPiAJ YW5kIG1vZGlmeSBteV9zaWduYWxfaGFuZGxlci4NCj4gDQo+IEkgcmVjb21tZW5kIHRoZSBsYXR0 ZXIsIGJlY2F1c2UgaXQgZG9lcyBub3QgZGVwZW5kIG9uIHRoZSBkZWZhdWx0DQo+IGJlaGF2aW9y IG9mIFNJR0NITEQsIHdoaWNoIG1pZ2h0IGJlIGRpZmZlcmVudCBwZXIgcGxhdGZvcm0uDQo+IEF0 dGFjaGVkIGlzIHRoZSBwYXRjaCB0byBkbyB0aGlzLiAoYW5kIHJ1biBwZ2luZGVudCkuDQo+IEkg YWxzbyBub3RpY2UgdGhhdCBzb21ldGhpbmcgbGlrZToNCj4gDQo+IAkJLyogQ291bnQgdG9rZW5z IGluIG91dHB1dCBmb3IgdmFsaWRhdGlvbiAqLw0KPiAJCWNoYXIgKmxpbmVfY29weSA9IHBzdHJk dXAobGluZSk7DQo+IAkJY2hhciAqdGVtcF90b2tlbiA9IHN0cnRvayhsaW5lX2NvcHksICIgXHRc biIpOw0KPiANCj4gWW91IHNob3VsZCBkZWNsYXJlIGxpbmVfY29weSBhbmQgdGVtcF90b2tlbiBp biB0aGUgYmVnZ2luZyBvZiB0aGUgY29kZQ0KPiBibG9jayAob3IgaW4gdGhlIG91dGVyIGJsb2Nr KS4gIFRoZSBmb3J3YXJkIGRlY2xhcmF0aW9uIGlzIHJlY29tbWVuZGVkDQo+IGNvZGluZyBzdHls ZSBpbiBQZ3Bvb2wtSUkgKGFuZCBQb3N0Z3JlU1FMKS4gU2FtZSB0aGluZyBjYW4gYmUgc2FpZCB0 bw0KPiBzb21lIG90aGVyIHZhcmlhYmxlcy4NCj4gDQo+IEJlc3QgcmVnYXJkcywNCj4gLS0NCj4g VGF0c3VvIElzaGlpDQo+IFNSQSBPU1MgSy5LLg0KPiBFbmdsaXNoOiBodHRwOi8vd3d3LnNyYW9z cy5jby5qcC9pbmRleF9lbi8NCj4gSmFwYW5lc2U6aHR0cDovL3d3dy5zcmFvc3MuY28uanANCj4g DQo+PiBIaSBUYXRzdW8sDQo+PiANCj4+IFRoYW5rIHlvdSBmb3IgdGhlIG5vdGUuDQo+PiANCj4+ IEkndmUgcmVtb3ZlZCB0aGUgZG9ja2VyIHN0dWZmLiBzdGFydGVkIHdvcmtpbmcgaW4gYW4gdWJ1 bnR1IDI0IFZNIHRvIG1hdGNoDQo+PiB0aGUgc2V0dXAuIGhvcGVmdWxseSB0aGUgcmVzdWx0cyB3 aWxsIGJlIGJldHRlciwgaGFkIHNvIG1hbnkgaXNzdWVzDQo+PiBjb21waWxpbmcgYW5kIHRlc3Rp bmcgYmVmb3JlIHRoYXQgc3R1ZmYgd2Fzbid0IHByb3Blcmx5IGZvcm11bGF0ZWQuDQo+PiANCj4+ IEF0dGFjaGluZyB0aGUgbGF0ZXN0IHBhdGNoLg0KPj4gDQo+PiB0aGlzIGlzIHdoYXQgaSdtIHNl ZWluZzoNCj4+IGFkYXZAbGltYS1kZXY6L3NyYy9wZ3Bvb2wyL3NyYy90ZXN0L3JlZ3Jlc3Npb24k IFBHSE9TVD0vdG1wIC4vcmVncmVzcy5zaCAtcA0KPj4gL3Vzci9iaW4gMDQxLmV4dGVybmFsX3Jl cGxpY2F0aW9uX2RlbGF5DQo+PiBjcmVhdGluZyBwZ3Bvb2wtSUkgdGVtcG9yYXJ5IGluc3RhbGxh dGlvbiAuLi4NCj4+IG1vdmluZyBwZ3Bvb2xfc2V0dXAgdG8gdGVtcG9yYXJ5IGluc3RhbGxhdGlv biBwYXRoIC4uLg0KPj4gbW92aW5nIHdhdGNoZG9nX3NldHVwIHRvIHRlbXBvcmFyeSBpbnN0YWxs YXRpb24gcGF0aCAuLi4NCj4+IHVzaW5nIHBncG9vbC1JSSBhdCAvc3JjL3BncG9vbDIvc3JjL3Rl c3QvcmVncmVzc2lvbi90ZW1wL2luc3RhbGxlZA0KPj4gKioqKioqKioqKioqKioqKioqKioqKioq Kg0KPj4gUkVHUkVTU0lPTiBNT0RFICAgICAgICAgIDogaW5zdGFsbA0KPj4gUGdwb29sLUlJIHZl cnNpb24gICAgICAgIDogcGdwb29sLUlJIHZlcnNpb24gNC44ZGV2ZWwgKG1pdHN1a2FrZWJvc2hp KQ0KPj4gUGdwb29sLUlJIGluc3RhbGwgcGF0aCAgIDogL3NyYy9wZ3Bvb2wyL3NyYy90ZXN0L3Jl Z3Jlc3Npb24vdGVtcC9pbnN0YWxsZWQNCj4+IFBvc3RncmVTUUwgYmluICAgICAgICAgICA6IC91 c3IvbGliL3Bvc3RncmVzcWwvMTYvYmluDQo+PiBQb3N0Z3JlU1FMIE1ham9yIHZlcnNpb24gOiAx Ng0KPj4gcGdiZW5jaCAgICAgICAgICAgICAgICAgIDogL3Vzci9saWIvcG9zdGdyZXNxbC8xNi9i aW4vcGdiZW5jaA0KPj4gUG9zdGdyZVNRTCBqZGJjICAgICAgICAgIDoNCj4+IC91c3IvbG9jYWwv cGdzcWwvc2hhcmUvcG9zdGdyZXNxbC05LjItMTAwMy5qZGJjNC5qYXINCj4+ICoqKioqKioqKioq KioqKioqKioqKioqKioNCj4+IHRlc3RpbmcgMDQxLmV4dGVybmFsX3JlcGxpY2F0aW9uX2RlbGF5 Li4ub2suDQo+PiBvdXQgb2YgMSBvazoxIGZhaWxlZDowIHRpbWVvdXQ6MA0KPj4gDQo+PiANCj4+ IA0KPj4gT24gVHVlLCBEZWMgMjMsIDIwMjUgYXQgMTA6NDbigK9BTSBUYXRzdW8gSXNoaWkgPGlz aGlpQHBvc3RncmVzcWwub3JnPiB3cm90ZToNCj4+IA0KPj4+ID4gSGkgVGF0c3VvLA0KPj4+ID4N Cj4+PiA+IEkna20gcnVubmluZyBpbnRvIGlzc3VlcyB0ZXN0aW5nIHRoaXMgYW5kIGhhdmUgY3Jl YXRlZCBhIGZ1bGwgZG9ja2VyDQo+Pj4gPiBjb21wb3NlIHNldHVwIC0gY2FuIHlvdSBwbGVhc2Ug cG9pbnQgbWUgdG8gdXAgdG8gZGF0ZSBndWlkZXMgb24gdGhlIGJlc3QNCj4+PiA+IHdheSB0byBy dW4gdGhlIHRlc3RzIHNvIGkga25vdyB3ZSdyZSBkb2luZyBpdCB0aGUgc2FtZSB3YXk/DQo+Pj4g Pg0KPj4+ID4gVGhhbmsgeW91IGZvciBhbGwgeW91ciBoZWxwIQ0KPj4+DQo+Pj4gSSBoYXZlIHJ1 biB0aGUgcmVncmVzc2lvbiB0ZXN0IG9uIHRoZSBQZ3Bvb2wtSUkgbWFzdGVyIGJyYW5jaCBvbiBt eQ0KPj4+IFVidW50dSAyNCBib3guDQo+Pj4NCj4+PiBjZCBwZ3Bvb2wyL3NyYy90ZXN0L3JlZ3Jl c3Npb24NCj4+PiAuL3JlZ3Jlc3Muc2ggMDQxDQo+Pj4NCj4+PiBUaGlzIHRpbWUgSSBub3RpY2Vk Og0KPj4+DQo+Pj4gLSBUaGUgcGF0Y2ggZG9lcyBub3QgbmFtZWQgd2l0aCB2ZXJzaW9uIG51bWJl cg0KPj4+IC0gVGhlIHBhdGNoIGNyZWF0ZXMgLmRvY2tlcmlnbm9yZSBhbmQgZG9ja2VyLyBkaXJl Y3RvcnkuDQo+Pj4NCj4+PiBBcmUgdGhleSBpbnRlbmRlZD8gSSBhbSBhc2tpbmcgYmVjYXVzZSB0 aGV5IGFyZSBkaWZmZXJlbnQgZnJvbSB0aGUNCj4+PiBwcmV2aW91cyB2ZXJzaW9uLg0KPj4+DQo+ Pj4gPiBPbiBUdWUsIERlYyAyMywgMjAyNSBhdCAyOjEz4oCvQU0gVGF0c3VvIElzaGlpIDxpc2hp aUBwb3N0Z3Jlc3FsLm9yZz4NCj4+PiB3cm90ZToNCj4+PiA+DQo+Pj4gPj4gPiBJIHRoaW5rIGV2 ZXJ5dGhpbmcgaXMgcGFzc2luZyBub3cuIG5ldyB2ZXJzaW9uIGF0dGFjaGVkLg0KPj4+ID4+DQo+ Pj4gPj4gVW5mb3J0dW5hdGVseSBUZXN0MSBkaWQgbm90IHBhc3MuDQo+Pj4gPj4NCj4+PiA+PiA9 PT0gVGVzdDE6IEJhc2ljIGV4dGVybmFsIGNvbW1hbmQgd2l0aCBpbnRlZ2VyIG1pbGxpc2Vjb25k IHZhbHVlcyA9PT0NCj4+PiA+PiB3YWl0aW5nIGZvciBzZXJ2ZXIgdG8gc3RhcnQuLi4uMTQzODYw MCAyMDI1LTEyLTIzIDA5OjA5OjQ4LjMzNyBKU1QgTE9HOg0KPj4+ID4+IHJlZGlyZWN0aW5nIGxv ZyBvdXRwdXQgdG8gbG9nZ2luZyBjb2xsZWN0b3IgcHJvY2Vzcw0KPj4+ID4+IDE0Mzg2MDAgMjAy NS0xMi0yMyAwOTowOTo0OC4zMzcgSlNUIEhJTlQ6ICBGdXR1cmUgbG9nIG91dHB1dCB3aWxsIGFw cGVhcg0KPj4+ID4+IGluIGRpcmVjdG9yeSAibG9nIi4NCj4+PiA+PiAgZG9uZQ0KPj4+ID4+IHNl cnZlciBzdGFydGVkDQo+Pj4gPj4gd2FpdGluZyBmb3Igc2VydmVyIHRvIHN0YXJ0Li4uLjE0Mzg2 MTcgMjAyNS0xMi0yMyAwOTowOTo0OC40NDMgSlNUIExPRzoNCj4+PiA+PiByZWRpcmVjdGluZyBs b2cgb3V0cHV0IHRvIGxvZ2dpbmcgY29sbGVjdG9yIHByb2Nlc3MNCj4+PiA+PiAxNDM4NjE3IDIw MjUtMTItMjMgMDk6MDk6NDguNDQzIEpTVCBISU5UOiAgRnV0dXJlIGxvZyBvdXRwdXQgd2lsbCBh cHBlYXINCj4+PiA+PiBpbiBkaXJlY3RvcnkgImxvZyIuDQo+Pj4gPj4gIGRvbmUNCj4+PiA+PiBz ZXJ2ZXIgc3RhcnRlZA0KPj4+ID4+IHdhaXRpbmcgZm9yIHNlcnZlciB0byBzdGFydC4uLi4xNDM4 NjM0IDIwMjUtMTItMjMgMDk6MDk6NDguNTYxIEpTVCBMT0c6DQo+Pj4gPj4gcmVkaXJlY3Rpbmcg bG9nIG91dHB1dCB0byBsb2dnaW5nIGNvbGxlY3RvciBwcm9jZXNzDQo+Pj4gPj4gMTQzODYzNCAy MDI1LTEyLTIzIDA5OjA5OjQ4LjU2MSBKU1QgSElOVDogIEZ1dHVyZSBsb2cgb3V0cHV0IHdpbGwg YXBwZWFyDQo+Pj4gPj4gaW4gZGlyZWN0b3J5ICJsb2ciLg0KPj4+ID4+ICBkb25lDQo+Pj4gPj4g c2VydmVyIHN0YXJ0ZWQNCj4+PiA+PiBDUkVBVEUgVEFCTEUNCj4+PiA+PiBXYWl0aW5nIGZvciBz cl9jaGVjayB0byBydW4uLi4NCj4+PiA+PiBDb21tYW5kIGV4ZWN1dGVkIGFmdGVyIDEgc2Vjb25k cw0KPj4+ID4+ICBub2RlX2lkIHwgaG9zdG5hbWUgIHwgcG9ydCAgfCBzdGF0dXMgfCBwZ19zdGF0 dXMgfCBsYl93ZWlnaHQgfCAgcm9sZQ0KPj4+ICB8DQo+Pj4gPj4gcGdfcm9sZSB8IHNlbGVjdF9j bnQgfCBsb2FkX2JhbGFuY2Vfbm9kZSB8IHJlcGxpY2F0aW9uX2RlbGF5IHwNCj4+PiA+PiByZXBs aWNhdGlvbl9zdGF0ZSB8IHJlcGxpY2F0aW9uX3N5bmNfc3RhdGUgfCBsYXN0X3N0YXR1c19jaGFu Z2UNCj4+PiA+Pg0KPj4+ID4+DQo+Pj4gLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0rLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K Pj4+ID4+ICAwICAgICAgIHwgbG9jYWxob3N0IHwgMTEwMDIgfCB1cCAgICAgfCB1cCAgICAgICAg fCAwLjMzMzMzMyAgfCBwcmltYXJ5DQo+Pj4gfA0KPj4+ID4+IHByaW1hcnkgfCAwICAgICAgICAg IHwgdHJ1ZSAgICAgICAgICAgICAgfCAwICAgICAgICAgICAgICAgICB8DQo+Pj4gPj4gICAgICB8 ICAgICAgICAgICAgICAgICAgICAgICAgfCAyMDI1LTEyLTIzIDA5OjA5OjQ5DQo+Pj4gPj4gIDEg ICAgICAgfCBsb2NhbGhvc3QgfCAxMTAwMyB8IHVwICAgICB8IHVwICAgICAgICB8IDAuMzMzMzMz ICB8IHN0YW5kYnkNCj4+PiB8DQo+Pj4gPj4gc3RhbmRieSB8IDAgICAgICAgICAgfCBmYWxzZSAg ICAgICAgICAgICB8IDAgICAgICAgICAgICAgICAgIHwNCj4+PiA+PiAgICAgIHwgICAgICAgICAg ICAgICAgICAgICAgICB8IDIwMjUtMTItMjMgMDk6MDk6NDkNCj4+PiA+PiAgMiAgICAgICB8IGxv Y2FsaG9zdCB8IDExMDA0IHwgdXAgICAgIHwgdXAgICAgICAgIHwgMC4zMzMzMzMgIHwgc3RhbmRi eQ0KPj4+IHwNCj4+PiA+PiBzdGFuZGJ5IHwgMCAgICAgICAgICB8IGZhbHNlICAgICAgICAgICAg IHwgMCAgICAgICAgICAgICAgICAgfA0KPj4+ID4+ICAgICAgfCAgICAgICAgICAgICAgICAgICAg ICAgIHwgMjAyNS0xMi0yMyAwOTowOTo0OQ0KPj4+ID4+ICgzIHJvd3MpDQo+Pj4gPj4NCj4+PiA+ PiBmYWlsOiBleHRlcm5hbCBjb21tYW5kIGRlbGF5IGxvZ2dpbmcgbm90IGZvdW5kDQo+Pj4gPj4N Cj4+PiA+PiA+IE9uIE1vbiwgTm92IDI0LCAyMDI1IGF0IDk6NDHigK9BTSBUYXRzdW8gSXNoaWkg PGlzaGlpQHBvc3RncmVzcWwub3JnPg0KPj4+ID4+IHdyb3RlOg0KPj4+ID4+ID4NCj4+PiA+PiA+ PiBUaGFuayB5b3UgZm9yIHVwZGF0aW5nIHRoZSBwYXRjaCEgVGhpcyB0aW1lIHRoZSBwYXRjaCBh cHBsaWVzIHdpdGhvdXQNCj4+PiA+PiA+PiBhbnkgaXNzdWUgYW5kIGNvbXBpbGVzIGZpbmUuIFVu Zm9ydHVuYXRlbHkgcmVncmVzc2lvbiB0ZXN0IGZhaWxlZC4NCj4+PiA+PiA+Pg0KPj4+ID4+ID4+ IHRlc3RpbmcgMDQxLmV4dGVybmFsX3JlcGxpY2F0aW9uX2RlbGF5Li4uZmFpbGVkLg0KPj4+ID4+ ID4+DQo+Pj4gPj4gPj4gRnJvbSB0aGUgcmVncmVzc2lvbiBsb2csIGl0IHNlZW1zIFRlc3Q3IGZh aWxlZC4NCj4+PiA+PiA+Pg0KPj4+ID4+ID4+DQo+Pj4gPj4NCj4+PiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCj4+PiA+PiA+PiA9PT0gVGVzdDc6IENvbW1hbmQgdGltZW91dCBoYW5kbGluZyA9PT0N Cj4+PiA+PiA+PiB3YWl0aW5nIGZvciBzZXJ2ZXIgdG8gc3RhcnQuLi4uNDExMTgxIDIwMjUtMTEt MjQgMTY6MzE6MDUuMjQ0IEpTVA0KPj4+IExPRzoNCj4+PiA+PiA+PiByZWRpcmVjdGluZyBsb2cg b3V0cHV0IHRvIGxvZ2dpbmcgY29sbGVjdG9yIHByb2Nlc3MNCj4+PiA+PiA+PiA0MTExODEgMjAy NS0xMS0yNCAxNjozMTowNS4yNDQgSlNUIEhJTlQ6ICBGdXR1cmUgbG9nIG91dHB1dCB3aWxsDQo+ Pj4gYXBwZWFyDQo+Pj4gPj4gaW4NCj4+PiA+PiA+PiBkaXJlY3RvcnkgImxvZyIuDQo+Pj4gPj4g Pj4gIGRvbmUNCj4+PiA+PiA+PiBzZXJ2ZXIgc3RhcnRlZA0KPj4+ID4+ID4+IHdhaXRpbmcgZm9y IHNlcnZlciB0byBzdGFydC4uLi40MTExOTYgMjAyNS0xMS0yNCAxNjozMTowNS4zNTIgSlNUDQo+ Pj4gTE9HOg0KPj4+ID4+ID4+IHJlZGlyZWN0aW5nIGxvZyBvdXRwdXQgdG8gbG9nZ2luZyBjb2xs ZWN0b3IgcHJvY2Vzcw0KPj4+ID4+ID4+IDQxMTE5NiAyMDI1LTExLTI0IDE2OjMxOjA1LjM1MiBK U1QgSElOVDogIEZ1dHVyZSBsb2cgb3V0cHV0IHdpbGwNCj4+PiBhcHBlYXINCj4+PiA+PiBpbg0K Pj4+ID4+ID4+IGRpcmVjdG9yeSAibG9nIi4NCj4+PiA+PiA+PiAgZG9uZQ0KPj4+ID4+ID4+IHNl cnZlciBzdGFydGVkDQo+Pj4gPj4gPj4gd2FpdGluZyBmb3Igc2VydmVyIHRvIHN0YXJ0Li4uLjQx MTIxMyAyMDI1LTExLTI0IDE2OjMxOjA1LjQ2MSBKU1QNCj4+PiBMT0c6DQo+Pj4gPj4gPj4gcmVk aXJlY3RpbmcgbG9nIG91dHB1dCB0byBsb2dnaW5nIGNvbGxlY3RvciBwcm9jZXNzDQo+Pj4gPj4g Pj4gNDExMjEzIDIwMjUtMTEtMjQgMTY6MzE6MDUuNDYxIEpTVCBISU5UOiAgRnV0dXJlIGxvZyBv dXRwdXQgd2lsbA0KPj4+IGFwcGVhcg0KPj4+ID4+IGluDQo+Pj4gPj4gPj4gZGlyZWN0b3J5ICJs b2ciLg0KPj4+ID4+ID4+ICBkb25lDQo+Pj4gPj4gPj4gc2VydmVyIHN0YXJ0ZWQNCj4+PiA+PiA+ PiBXYWl0aW5nIGZvciBjb21tYW5kIHRpbWVvdXQuLi4NCj4+PiA+PiA+PiBmYWlsOiBjb21tYW5k IHRpbWVvdXQgbm90IGRldGVjdGVkDQo+Pj4gPj4gPj4NCj4+PiA+PiA+Pg0KPj4+ID4+DQo+Pj4g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+Pj4gPj4gPj4NCj4+PiA+PiA+PiBBdHRhY2hlZCBpcyB0 aGUgcGdwb29sLmxvZy4gSWYgeW91IG5lZWQgbW9yZSBpbmZvLCBwbGVhc2UgbGV0IG1lDQo+Pj4g a25vdy4NCj4+PiA+PiA+Pg0KPj4+ID4+ID4+IEJlc3QgcmVnYXJkcywNCj4+PiA+PiA+PiAtLQ0K Pj4+ID4+ID4+IFRhdHN1byBJc2hpaQ0KPj4+ID4+ID4+IFNSQSBPU1MgSy5LLg0KPj4+ID4+ID4+ IEVuZ2xpc2g6IGh0dHA6Ly93d3cuc3Jhb3NzLmNvLmpwL2luZGV4X2VuLw0KPj4+ID4+ID4+IEph cGFuZXNlOmh0dHA6Ly93d3cuc3Jhb3NzLmNvLmpwDQo+Pj4gPj4gPj4NCj4+PiA+PiA+Pg0KPj4+ ID4+ID4+ID4gSGkgVGF0c3VvLA0KPj4+ID4+ID4+ID4NCj4+PiA+PiA+PiA+IFNvcnJ5IGFnYWlu LCB0aGlzIHdhcyBkdWUgdG8gdGhlIHNlcGFyYXRpb24gb2YgMiBwYXRjaGVzIGFuZCBpIG9ubHkN Cj4+PiA+PiBzZW50DQo+Pj4gPj4gPj4gPiB0aGUgb25lLg0KPj4+ID4+ID4+ID4NCj4+PiA+PiA+ PiA+IEkndmUgbWVyZ2VkIGl0IGludG8gMSBjb21taXQgYW5kIDEgcGF0Y2ggYW5kIHJlYmFzZWQg b3ZlciBtYXN0ZXIgdG8NCj4+PiA+PiBhdm9pZA0KPj4+ID4+ID4+ID4gdGhlc2UgaXNzdWVzIG1v dmluZyBmb3J3YXJkLg0KPj4+ID4+ID4+ID4NCj4+PiA+PiA+PiA+IFBGQSBsYXRlc3QgdmVyc2lv bg0KPj4+ID4+ID4+ID4NCj4+PiA+PiA+PiA+IE9uIFRodSwgTm92IDIwLCAyMDI1IGF0IDE6MDni gK9BTSBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnDQo+Pj4gPg0KPj4+ID4+ID4+ IHdyb3RlOg0KPj4+ID4+ID4+ID4NCj4+PiA+PiA+PiA+PiBIaSBOYWRhdiwNCj4+PiA+PiA+PiA+ Pg0KPj4+ID4+ID4+ID4+IFRoYW5rIHlvdSBmb3IgbmV3IHBhdGNoLg0KPj4+ID4+ID4+ID4+IFVu Zm9ydHVuYXRlbHkgdGhlIHBhdGNoIGRpZCBub3QgYXBwbHkgdG8gY3VycmVudCBtYXN0ZXIuDQo+ Pj4gPj4gPj4gPj4NCj4+PiA+PiA+PiA+PiAkIGdpdCBhcHBseQ0KPj4+ID4+ID4+ID4+IH4vMDAw MS1GaXgtbXVsdGlwbGUtaXNzdWVzLWluLWV4dGVybmFsLXJlcGxpY2F0aW9uLWRlbGF5LWZlLnBh dGNoDQo+Pj4gPj4gPj4gPj4gZXJyb3I6IHBhdGNoIGZhaWxlZDoNCj4+PiA+PiBzcmMvc3RyZWFt aW5nX3JlcGxpY2F0aW9uL3Bvb2xfd29ya2VyX2NoaWxkLmM6Njk0DQo+Pj4gPj4gPj4gPj4gZXJy b3I6IHNyYy9zdHJlYW1pbmdfcmVwbGljYXRpb24vcG9vbF93b3JrZXJfY2hpbGQuYzogcGF0Y2gg ZG9lcw0KPj4+IG5vdA0KPj4+ID4+ID4+IGFwcGx5DQo+Pj4gPj4gPj4gPj4NCj4+PiA+PiA+PiA+ PiBNYXliZSB0aGUgcGF0Y2ggaXMgb24gdG9wIG9mIHlvdXIgcHJldmlvdXMgcGF0Y2g/DQo+Pj4g Pj4gPj4gPj4NCj4+PiA+PiA+PiA+PiBBbHNvIEkgc3VnZ2VzdCB0byB1c2UgIi12IiBvcHRpb24g b2YgImdpdCBmb3JtYXQtcGF0Y2giIHRvIGFkZCB0aGUNCj4+PiA+PiA+PiA+PiBwYXRjaCB2ZXJz aW9uIG51bWJlciBzbyB0aGF0IHdlIGNhbiBlYXNpbHkga25vdyB3aGljaCBwYXRjaCBpcyB0aGUN Cj4+PiA+PiA+PiA+PiBsYXRlc3QuDQo+Pj4gPj4gPj4gPj4NCj4+PiA+PiA+PiA+PiBCZXN0IHJl Z2FyZHMsDQo+Pj4gPj4gPj4gPj4gLS0NCj4+PiA+PiA+PiA+PiBUYXRzdW8gSXNoaWkNCj4+PiA+ PiA+PiA+PiBTUkEgT1NTIEsuSy4NCj4+PiA+PiA+PiA+PiBFbmdsaXNoOiBodHRwOi8vd3d3LnNy YW9zcy5jby5qcC9pbmRleF9lbi8NCj4+PiA+PiA+PiA+PiBKYXBhbmVzZTpodHRwOi8vd3d3LnNy YW9zcy5jby5qcA0KPj4+ID4+ID4+ID4+DQo+Pj4gPj4gPj4gPj4gPiBIaSBUYXRzdW8sDQo+Pj4g Pj4gPj4gPj4gPg0KPj4+ID4+ID4+ID4+ID4gUGxlYXNlIHNlZSBhdHRhY2hlZCBhbiB1cGRhdGVk IHZlcnNpb24uDQo+Pj4gPj4gPj4gPj4gPg0KPj4+ID4+ID4+ID4+ID4gdGhhbmsgeW91DQo+Pj4g Pj4gPj4gPj4gPg0KPj4+ID4+ID4+ID4+ID4gT24gRnJpLCBOb3YgNywgMjAyNSBhdCAyOjA34oCv QU0gVGF0c3VvIElzaGlpIDwNCj4+PiBpc2hpaUBwb3N0Z3Jlc3FsLm9yZz4NCj4+PiA+PiA+PiA+ PiB3cm90ZToNCj4+PiA+PiA+PiA+PiA+DQo+Pj4gPj4gPj4gPj4gPj4gPiBTb3JyeSBmb3IgdGhh dCAtIHRoYW5rcyBmb3IgdGhlIHBhdGNoLg0KPj4+ID4+ID4+ID4+ID4+ID4NCj4+PiA+PiA+PiA+ PiA+PiA+IFBsZWFzZSBmaW5kIGF0dGFjaGVkIGEgbmV3IHZlcnNpb24NCj4+PiA+PiA+PiA+PiA+ Pg0KPj4+ID4+ID4+ID4+ID4+IFRoYW5rcyBmb3IgdGhlIG5ldyB2ZXJzaW9uLiBVbmZvcnR1bmF0 ZWx5IHRoaXMgdGltZSByZWdyZXNzaW9uDQo+Pj4gPj4gdGVzdA0KPj4+ID4+ID4+ID4+ID4+IGZh aWxzIGF0Og0KPj4+ID4+ID4+ID4+ID4+DQo+Pj4gPj4gPj4gPj4gPj4gPiBXYWl0aW5nIGZvciBj b21tYW5kIHRpbWVvdXQuLi4NCj4+PiA+PiA+PiA+PiA+PiA+IGZhaWw6IGNvbW1hbmQgdGltZW91 dCBub3QgZGV0ZWN0ZWQNCj4+PiA+PiA+PiA+PiA+Pg0KPj4+ID4+ID4+ID4+ID4+IEF0dGFjaGVk IGlzIHRoZSBwZ3Bvb2wubG9nLg0KPj4+ID4+ID4+ID4+ID4+DQo+Pj4gPj4gPj4gPj4gPj4gQmVz dCByZWdhcmRzLA0KPj4+ID4+ID4+ID4+ID4+IC0tDQo+Pj4gPj4gPj4gPj4gPj4gVGF0c3VvIElz aGlpDQo+Pj4gPj4gPj4gPj4gPj4gU1JBIE9TUyBLLksuDQo+Pj4gPj4gPj4gPj4gPj4gRW5nbGlz aDogaHR0cDovL3d3dy5zcmFvc3MuY28uanAvaW5kZXhfZW4vDQo+Pj4gPj4gPj4gPj4gPj4gSmFw YW5lc2U6aHR0cDovL3d3dy5zcmFvc3MuY28uanANCj4+PiA+PiA+PiA+PiA+Pg0KPj4+ID4+ID4+ ID4+ID4+ID4gT24gTW9uLCBOb3YgMywgMjAyNSBhdCA5OjA14oCvQU0gVGF0c3VvIElzaGlpIDwN Cj4+PiA+PiBpc2hpaUBwb3N0Z3Jlc3FsLm9yZz4NCj4+PiA+PiA+PiA+PiA+PiB3cm90ZToNCj4+ PiA+PiA+PiA+PiA+PiA+DQo+Pj4gPj4gPj4gPj4gPj4gPj4gPiB0aGFua3MgYW5kIHNvcnJ5IGZv ciB0aGUgaXNzdWVzLCBwbGVhc2UgZmluZCBhdHRhY2hlZA0KPj4+IHVwZGF0ZWQNCj4+PiA+PiA+ PiA+PiB2ZXJzaW9uLg0KPj4+ID4+ID4+ID4+ID4+ID4+DQo+Pj4gPj4gPj4gPj4gPj4gPj4gTm8g cHJvYmxlbS4NCj4+PiA+PiA+PiA+PiA+PiA+Pg0KPj4+ID4+ID4+ID4+ID4+ID4+IFRoaXMgdGlt ZSB0aGUgcGF0Y2ggYXBwbGllcyBmaW5lLCBubyBjb21waWxlciB3YXJuaW5ncy4NCj4+PiA+PiBI b3dldmVyLA0KPj4+ID4+ID4+ID4+ID4+ID4+IHJlZ3Jlc3Npb24gdGVzdCBkaWQgbm90IHBhc3Nl ZCBoZXJlIChvbiBVYnVudHUgMjQgTFRTIGlmDQo+Pj4gdGhpcw0KPj4+ID4+ID4+ID4+ID4+ID4+ IG1hdHRlcnMpLiAgU28gSSBsb29rZWQgaW50bw0KPj4+ID4+ID4+ID4+ID4+ID4+DQo+Pj4gPj4g c3JjL3Rlc3QvcmVncmVzc2lvbi90ZXN0cy8wNDEuZXh0ZXJuYWxfcmVwbGljYXRpb25fZGVsYXkv dGVzdC5zaCBhDQo+Pj4gPj4gPj4gPj4gPj4gPj4gbGl0dGxlIGJpdCBhbmQgYXBwbHkgYXR0YWNo ZWQgcGF0Y2ggKHRlc3Quc2gucGF0Y2gpLiBJdA0KPj4+IG1vdmVkDQo+Pj4gPj4gPj4gZm9yd2Fy ZA0KPj4+ID4+ID4+ID4+ID4+ID4+IHBhcnRpYWxseSBidXQgZmFpbGVkIGF0Og0KPj4+ID4+ID4+ ID4+ID4+ID4+DQo+Pj4gPj4gPj4gPj4gPj4gPj4gZmFpbDogY29tbWFuZCBleGVjdXRpb24gZmFp bHVyZSBub3QgZGV0ZWN0ZWQNCj4+PiA+PiA+PiA+PiA+PiA+Pg0KPj4+ID4+ID4+ID4+ID4+ID4+ IFBsZWFzZSBmaW5kIGF0dGFjaGVkDQo+Pj4gPj4gPj4gPj4gPj4gPj4NCj4+PiA+PiA+PiA+PiA+ Pg0KPj4+ID4+ID4+ID4+DQo+Pj4gPj4gPj4NCj4+PiA+Pg0KPj4+IHNyYy90ZXN0L3JlZ3Jlc3Np b24vdGVzdHMvMDQxLmV4dGVybmFsX3JlcGxpY2F0aW9uX2RlbGF5L3Rlc3RkaXIvcGdwb29sLmxv Zw0KPj4+ID4+ID4+ID4+ID4+ID4+IGFuZCBzcmMvdGVzdC9yZWdyZXNzaW9uL2xvZy8wNDEuZXh0 ZXJuYWxfcmVwbGljYXRpb25fZGVsYXkuDQo+Pj4gPj4gPj4gPj4gPj4gPj4NCj4+PiA+PiA+PiA+ PiA+PiA+PiBCZXN0IHJlZ2FyZHMsDQo+Pj4gPj4gPj4gPj4gPj4gPj4gLS0NCj4+PiA+PiA+PiA+ PiA+PiA+PiBUYXRzdW8gSXNoaWkNCj4+PiA+PiA+PiA+PiA+PiA+PiBTUkEgT1NTIEsuSy4NCj4+ PiA+PiA+PiA+PiA+PiA+PiBFbmdsaXNoOiBodHRwOi8vd3d3LnNyYW9zcy5jby5qcC9pbmRleF9l bi8NCj4+PiA+PiA+PiA+PiA+PiA+PiBKYXBhbmVzZTpodHRwOi8vd3d3LnNyYW9zcy5jby5qcA0K Pj4+ID4+ID4+ID4+ID4+ID4+DQo+Pj4gPj4gPj4gPj4gPj4gPg0KPj4+ID4+ID4+ID4+ID4+ID4N Cj4+PiA+PiA+PiA+PiA+PiA+IC0tDQo+Pj4gPj4gPj4gPj4gPj4gPiBOYWRhdiBTaGF0eg0KPj4+ ID4+ID4+ID4+ID4+ID4gVGFpbG9yIEJyYW5kcyB8IENUTw0KPj4+ID4+ID4+ID4+ID4+DQo+Pj4g Pj4gPj4gPj4gPg0KPj4+ID4+ID4+ID4+ID4NCj4+PiA+PiA+PiA+PiA+IC0tDQo+Pj4gPj4gPj4g Pj4gPiBOYWRhdiBTaGF0eg0KPj4+ID4+ID4+ID4+ID4gVGFpbG9yIEJyYW5kcyB8IENUTw0KPj4+ ID4+ID4+ID4+DQo+Pj4gPj4gPj4gPg0KPj4+ID4+ID4+ID4NCj4+PiA+PiA+PiA+IC0tDQo+Pj4g Pj4gPj4gPiBOYWRhdiBTaGF0eg0KPj4+ID4+ID4+ID4gVGFpbG9yIEJyYW5kcyB8IENUTw0KPj4+ ID4+ID4+DQo+Pj4gPj4gPg0KPj4+ID4+ID4NCj4+PiA+PiA+IC0tDQo+Pj4gPj4gPiBOYWRhdiBT aGF0eg0KPj4+ID4+ID4gVGFpbG9yIEJyYW5kcyB8IENUTw0KPj4+ID4+DQo+Pj4gPg0KPj4+ID4N Cj4+PiA+IC0tDQo+Pj4gPiBOYWRhdiBTaGF0eg0KPj4+ID4gVGFpbG9yIEJyYW5kcyB8IENUTw0K Pj4+DQo+PiANCj4+IA0KPj4gLS0gDQo+PiBOYWRhdiBTaGF0eg0KPj4gVGFpbG9yIEJyYW5kcyB8 IENUTw0K