Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ncpyL-0007jb-8U for pgsql-hackers@arkaria.postgresql.org; Fri, 08 Apr 2022 14:52:25 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1ncpyJ-0003Ef-IB for pgsql-hackers@arkaria.postgresql.org; Fri, 08 Apr 2022 14:52:23 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ncpyI-0003EW-UW for pgsql-hackers@lists.postgresql.org; Fri, 08 Apr 2022 14:52:23 +0000 Received: from mail-vs1-xe2c.google.com ([2607:f8b0:4864:20::e2c]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1ncpyG-0002yP-9r for pgsql-hackers@lists.postgresql.org; Fri, 08 Apr 2022 14:52:21 +0000 Received: by mail-vs1-xe2c.google.com with SMTP id i186so6876267vsc.9 for ; Fri, 08 Apr 2022 07:52:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=ibAyU7rTy6xBhXCy3GINcj8J/XmdJy49pL5wJRdHlUI=; b=NbAjbBQcc+2lAEBZbzrMzAcQmCzMPiupq0CqR7r2HBmFI218kuk1Vh9gmEHxBlv4bU m9bTjie15PH9BonUL9eJs6aJFfFGNtlBflLQV2hIcT+VrCIKwDj6FNlBfGnfUxKFs/+S WkE3w9faxUP1WWeCSZwbu8imezLLA11rUDbDueVDRzh61K57WTGNhP1R8ZtJWBxwNo7K h5Jkk5ixQ/hDEADAzlfgLbJOpW0E2DJZjWsFYP/vijKg+mhwQALpk/38LSoXe+kVOiZk WKIiEzGr3MSZaMJvPJCTpSpTE+FJA7I0gsWsF1FOvTYlza7l22Xb6BxDU7rGGY/NyzED 2xnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=ibAyU7rTy6xBhXCy3GINcj8J/XmdJy49pL5wJRdHlUI=; b=cPTG1LrX5nM63no5cFAvtyco0RcQ/pq8qmW+gCUfcQXNMGiK11nFbzEPehnblrqCsc IcuC6hU/TjMCNZvfQUG7XcIHtog2HrjjDryPbL2fJEYpvHbqMZYarLHiX6SKNBdZZ0It dB7xRNF0+i1sNFY2dfIHBqJz2A80eG/t5l03enl9BH0PvhIjyVZI3IDpzEd/1UkchTrd a7oLNVDLX41IleC9gNRq7CQXbUMNWctpE4N4SCAPfZiGA8T/aF6NiYkewLd31cMnu5Dp P11OUK8ErZdXtm8xoMfCUU9nQ5FosmnmaYVCJgMvxroaO7yGBLreJnbNlEhhxHm/DqeI hWxw== X-Gm-Message-State: AOAM532cADSFuccdTWTFBidML+EZETI5PtrT8M8rs2LOT4CJwDIEWh8x r/Jt1NvhX2vzf+eyOi4otH4El1CGM4G7k48iRuw= X-Google-Smtp-Source: ABdhPJzx30rxgYAIw+T4EJtWC+rzIHA93VBl8UzR4tHgjHJtgoAATHQAGGvq09NyT+JfY4neuCtULpIQdJekN/UZTAQ= X-Received: by 2002:a05:6102:3098:b0:328:1825:61f8 with SMTP id l24-20020a056102309800b00328182561f8mr2395912vsb.39.1649429539358; Fri, 08 Apr 2022 07:52:19 -0700 (PDT) MIME-Version: 1.0 References: <20220319001556.atuqbmafvc73pa2k@alap3.anarazel.de> In-Reply-To: <20220319001556.atuqbmafvc73pa2k@alap3.anarazel.de> From: Matthias van de Meent Date: Fri, 8 Apr 2022 16:52:07 +0200 Message-ID: Subject: Size of pg_rewrite (Was: Report checkpoint progress with pg_stat_progress_checkpoint) To: Andres Freund Cc: Nitin Jadhav , Bharath Rupireddy , Matthias van de Meent , Ashutosh Sharma , Julien Rouhaud , Bruce Momjian , Tom Lane , Magnus Hagander , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000c6a43605dc25bd1c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000c6a43605dc25bd1c Content-Type: text/plain; charset="UTF-8" On Sat, 19 Mar 2022 at 01:15, Andres Freund wrote: > pg_rewrite without pg_stat_progress_checkpoint: 745472, with: 753664 > > pg_rewrite is the second biggest relation in an empty database already... Yeah, that's not great. Thanks for nerd-sniping me into looking into how views and pg_rewrite rules work, that was very interesting and I learned quite a lot. # Immediately potential, limited to progress views I noticed that the CASE-WHEN (used in translating progress stage index to stage names) in those progress reporting views can be more efficiently described (althoug with slightly worse behaviour around undefined values) using text array lookups (as attached). That resulted in somewhat smaller rewrite entries for the progress views (toast compression was good old pglz): template1=# SELECT sum(octet_length(ev_action)), SUM(pg_column_size(ev_action)) FROM pg_rewrite WHERE ev_class::regclass::text LIKE '%progress%'; master: sum | sum -------+------- 97277 | 19956 patched: sum | sum -------+------- 77069 | 18417 So this seems like a nice improvement of 20% uncompressed / 7% compressed. I tested various cases of phase number to text translations: `CASE .. WHEN`; `(ARRAY[]::text[])[index]` and `('{}'::text[])[index]`. See results below: postgres=# create or replace view arrayliteral_view as select (ARRAY['a','b','c','d','e','f']::text[])[index] as name from tst s(index); CREATE INDEX postgres=# create or replace view stringcast_view as select ('{a,b,c,d,e,f}'::text[])[index] as name from tst s(index); CREATE INDEX postgres=# create or replace view split_stringcast_view as select (('{a,b,' || 'c,d,e,f}')::text[])[index] as name from tst s(index); CREATE VIEW postgres=# create or replace view case_view as select case index when 0 then 'a' when 1 then 'b' when 2 then 'c' when 3 then 'd' when 4 then 'e' when 5 then 'f' end as name from tst s(index); CREATE INDEX postgres=# postgres=# select ev_class::regclass::text, octet_length(ev_action), pg_column_size(ev_action) from pg_rewrite where ev_class in ('arrayliteral_view'::regclass::oid, 'case_view'::regclass::oid, 'split_stringcast_view'::regclass::oid, 'stringcast_view'::regclass::oid); ev_class | octet_length | pg_column_size -----------------------+--------------+---------------- arrayliteral_view | 3311 | 1322 stringcast_view | 2610 | 1257 case_view | 5170 | 1412 split_stringcast_view | 2847 | 1350 It seems to me that we could consider replacing the CASE statements with array literals and lookups if we really value our template database size. But, as text literal concatenations don't seem to get constant folded before storing them in the rules table, this rewrite of the views would result in long lines in the system_views.sql file, or we'd have to deal with the additional overhead of the append operator and cast nodes. # Future work; nodeToString / readNode, all rewrite rules Additionally, we might want to consider other changes like default (or empty value) elision in nodeToString, if that is considered a reasonable option and if we really want to reduce the size of the pg_rewrite table. I think a lot of space can be recovered from that: A manual removal of what seemed to be fields with default values (and the removal of all query location related fields) in the current definition of pg_stat_progress_create_index reduces its uncompressed size from 23226B raw and 4204B compressed to 13821B raw and 2784B compressed, for an on-disk space saving of 33% for this view's ev_action. Do note, however, that that would add significant branching in the nodeToString and readNode code, which might slow down that code significantly. I'm not planning on working on that; but in my opinion that is a viable path to reducing the size of new database catalogs. -Matthias PS. attached patch is not to be considered complete - it is a minimal example of the array literal form. It fails regression tests because I didn't bother updating or including the regression tests on system views. --000000000000c6a43605dc25bd1c Content-Type: text/plain; charset="US-ASCII"; name="v0-Replace-system-view-CASE-WHEN-with-array-lookups.patch.txt" Content-Disposition: attachment; filename="v0-Replace-system-view-CASE-WHEN-with-array-lookups.patch.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l1qjcd3r0 SW5kZXg6IHNyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbApJREVBIGFkZGl0aW9u YWwgaW5mbzoKU3Vic3lzdGVtOiBjb20uaW50ZWxsaWoub3BlbmFwaS5kaWZmLmltcGwucGF0Y2gu Q2hhcnNldEVQCjwrPlVURi04Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nh dGFsb2cvc3lzdGVtX3ZpZXdzLnNxbCBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdz LnNxbAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwJKHJldmlzaW9u IDMyNzIzZTVmYWJjYzdkYjFiZjRlODk3YmFhZjBkMjUxYjUwMGMxZGMpCisrKyBiL3NyYy9iYWNr ZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbAkoZGF0ZSAxNjQ5MTYwMTM4ODg2KQpAQCAtMTEy MCwxMyArMTEyMCw3IEBACiAgICAgU0VMRUNUCiAgICAgICAgIFMucGlkIEFTIHBpZCwgUy5kYXRp ZCBBUyBkYXRpZCwgRC5kYXRuYW1lIEFTIGRhdG5hbWUsCiAgICAgICAgIENBU1QoUy5yZWxpZCBB UyBvaWQpIEFTIHJlbGlkLAotICAgICAgICBDQVNFIFMucGFyYW0xIFdIRU4gMCBUSEVOICdpbml0 aWFsaXppbmcnCi0gICAgICAgICAgICAgICAgICAgICAgV0hFTiAxIFRIRU4gJ2FjcXVpcmluZyBz YW1wbGUgcm93cycKLSAgICAgICAgICAgICAgICAgICAgICBXSEVOIDIgVEhFTiAnYWNxdWlyaW5n IGluaGVyaXRlZCBzYW1wbGUgcm93cycKLSAgICAgICAgICAgICAgICAgICAgICBXSEVOIDMgVEhF TiAnY29tcHV0aW5nIHN0YXRpc3RpY3MnCi0gICAgICAgICAgICAgICAgICAgICAgV0hFTiA0IFRI RU4gJ2NvbXB1dGluZyBleHRlbmRlZCBzdGF0aXN0aWNzJwotICAgICAgICAgICAgICAgICAgICAg IFdIRU4gNSBUSEVOICdmaW5hbGl6aW5nIGFuYWx5emUnCi0gICAgICAgICAgICAgICAgICAgICAg RU5EIEFTIHBoYXNlLAorICAgICAgICAoKCd7aW5pdGlhbGl6aW5nLGFjcXVpcmluZyBzYW1wbGUg cm93cyxhY3F1aXJpbmcgaW5oZXJpdGVkIHNhbXBsZSByb3dzLGNvbXB1dGluZyBzdGF0aXN0aWNz LGNvbXB1dGluZyBleHRlbmRlZCBzdGF0aXN0aWNzLGZpbmFsaXppbmcgYW5hbHl6ZX0nKTo6dGV4 dFtdKVtTLnBhcmFtMV0gQVMgcGhhc2UsCiAgICAgICAgIFMucGFyYW0yIEFTIHNhbXBsZV9ibGtz X3RvdGFsLAogICAgICAgICBTLnBhcmFtMyBBUyBzYW1wbGVfYmxrc19zY2FubmVkLAogICAgICAg ICBTLnBhcmFtNCBBUyBleHRfc3RhdHNfdG90YWwsCkBAIC0xMTQxLDE0ICsxMTM1LDggQEAKICAg ICBTRUxFQ1QKICAgICAgICAgUy5waWQgQVMgcGlkLCBTLmRhdGlkIEFTIGRhdGlkLCBELmRhdG5h bWUgQVMgZGF0bmFtZSwKICAgICAgICAgUy5yZWxpZCBBUyByZWxpZCwKLSAgICAgICAgQ0FTRSBT LnBhcmFtMSBXSEVOIDAgVEhFTiAnaW5pdGlhbGl6aW5nJwotICAgICAgICAgICAgICAgICAgICAg IFdIRU4gMSBUSEVOICdzY2FubmluZyBoZWFwJwotICAgICAgICAgICAgICAgICAgICAgIFdIRU4g MiBUSEVOICd2YWN1dW1pbmcgaW5kZXhlcycKLSAgICAgICAgICAgICAgICAgICAgICBXSEVOIDMg VEhFTiAndmFjdXVtaW5nIGhlYXAnCi0gICAgICAgICAgICAgICAgICAgICAgV0hFTiA0IFRIRU4g J2NsZWFuaW5nIHVwIGluZGV4ZXMnCi0gICAgICAgICAgICAgICAgICAgICAgV0hFTiA1IFRIRU4g J3RydW5jYXRpbmcgaGVhcCcKLSAgICAgICAgICAgICAgICAgICAgICBXSEVOIDYgVEhFTiAncGVy Zm9ybWluZyBmaW5hbCBjbGVhbnVwJwotICAgICAgICAgICAgICAgICAgICAgIEVORCBBUyBwaGFz ZSwKKyAgICAgICAgKCgne2luaXRpYWxpemluZyxzY2FubmluZyBoZWFwLHZhY3V1bWluZyBpbmRl eGVzLHZhY3V1bWluZyBoZWFwLGNsZWFuaW5nIHVwIGluZGV4ZXMsdHJ1bmNhdGluZyBoZWFwLHBl cmZvcm1pbmcgZmluYWwgY2xlYW51cH0nKTo6dGV4dFtdCisgICAgICAgIClbUy5wYXJhbTFdIEFT IHBoYXNlLAogICAgICAgICBTLnBhcmFtMiBBUyBoZWFwX2Jsa3NfdG90YWwsIFMucGFyYW0zIEFT IGhlYXBfYmxrc19zY2FubmVkLAogICAgICAgICBTLnBhcmFtNCBBUyBoZWFwX2Jsa3NfdmFjdXVt ZWQsIFMucGFyYW01IEFTIGluZGV4X3ZhY3V1bV9jb3VudCwKICAgICAgICAgUy5wYXJhbTYgQVMg bWF4X2RlYWRfdHVwbGVzLCBTLnBhcmFtNyBBUyBudW1fZGVhZF90dXBsZXMKQEAgLTExNjEsMTgg KzExNDksOCBAQAogICAgICAgICBTLmRhdGlkIEFTIGRhdGlkLAogICAgICAgICBELmRhdG5hbWUg QVMgZGF0bmFtZSwKICAgICAgICAgUy5yZWxpZCBBUyByZWxpZCwKLSAgICAgICAgQ0FTRSBTLnBh cmFtMSBXSEVOIDEgVEhFTiAnQ0xVU1RFUicKLSAgICAgICAgICAgICAgICAgICAgICBXSEVOIDIg VEhFTiAnVkFDVVVNIEZVTEwnCi0gICAgICAgICAgICAgICAgICAgICAgRU5EIEFTIGNvbW1hbmQs Ci0gICAgICAgIENBU0UgUy5wYXJhbTIgV0hFTiAwIFRIRU4gJ2luaXRpYWxpemluZycKLSAgICAg ICAgICAgICAgICAgICAgICBXSEVOIDEgVEhFTiAnc2VxIHNjYW5uaW5nIGhlYXAnCi0gICAgICAg ICAgICAgICAgICAgICAgV0hFTiAyIFRIRU4gJ2luZGV4IHNjYW5uaW5nIGhlYXAnCi0gICAgICAg ICAgICAgICAgICAgICAgV0hFTiAzIFRIRU4gJ3NvcnRpbmcgdHVwbGVzJwotICAgICAgICAgICAg ICAgICAgICAgIFdIRU4gNCBUSEVOICd3cml0aW5nIG5ldyBoZWFwJwotICAgICAgICAgICAgICAg ICAgICAgIFdIRU4gNSBUSEVOICdzd2FwcGluZyByZWxhdGlvbiBmaWxlcycKLSAgICAgICAgICAg ICAgICAgICAgICBXSEVOIDYgVEhFTiAncmVidWlsZGluZyBpbmRleCcKLSAgICAgICAgICAgICAg ICAgICAgICBXSEVOIDcgVEhFTiAncGVyZm9ybWluZyBmaW5hbCBjbGVhbnVwJwotICAgICAgICAg ICAgICAgICAgICAgIEVORCBBUyBwaGFzZSwKKyAgICAgICAgKCd7TlVMTCxDTFVTVEVSLFZBQ1VV TSBGVUxMfSc6OnRleHRbXSlbUy5wYXJhbTFdIEFTIGNvbW1hbmQsCisgICAgICAgICgoJ3tpbml0 aWFsaXppbmcsaW5pdGlhbGl6aW5nLHNlcSBzY2FubmluZyBoZWFwLGluZGV4IHNjYW5uaW5nIGhl YXAsc29ydGluZyB0dXBsZXMsd3JpdGluZyBuZXcgaGVhcCxzd2FwcGluZyByZWxhdGlvbiBmaWxl cyxyZWJ1aWxkaW5nIGluZGV4LHBlcmZvcm1pbmcgZmluYWwgY2xlYW51cH0nKTo6dGV4dFtdKVtT LnBhcmFtMl0gQVMgcGhhc2UsCiAgICAgICAgIENBU1QoUy5wYXJhbTMgQVMgb2lkKSBBUyBjbHVz dGVyX2luZGV4X3JlbGlkLAogICAgICAgICBTLnBhcmFtNCBBUyBoZWFwX3R1cGxlc19zY2FubmVk LAogICAgICAgICBTLnBhcmFtNSBBUyBoZWFwX3R1cGxlc193cml0dGVuLApAQCAtMTE4NywyNCAr MTE2NSwxMiBAQAogICAgICAgICBTLnBpZCBBUyBwaWQsIFMuZGF0aWQgQVMgZGF0aWQsIEQuZGF0 bmFtZSBBUyBkYXRuYW1lLAogICAgICAgICBTLnJlbGlkIEFTIHJlbGlkLAogICAgICAgICBDQVNU KFMucGFyYW03IEFTIG9pZCkgQVMgaW5kZXhfcmVsaWQsCi0gICAgICAgIENBU0UgUy5wYXJhbTEg V0hFTiAxIFRIRU4gJ0NSRUFURSBJTkRFWCcKLSAgICAgICAgICAgICAgICAgICAgICBXSEVOIDIg VEhFTiAnQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWScKLSAgICAgICAgICAgICAgICAgICAgICBX SEVOIDMgVEhFTiAnUkVJTkRFWCcKLSAgICAgICAgICAgICAgICAgICAgICBXSEVOIDQgVEhFTiAn UkVJTkRFWCBDT05DVVJSRU5UTFknCi0gICAgICAgICAgICAgICAgICAgICAgRU5EIEFTIGNvbW1h bmQsCi0gICAgICAgIENBU0UgUy5wYXJhbTEwIFdIRU4gMCBUSEVOICdpbml0aWFsaXppbmcnCi0g ICAgICAgICAgICAgICAgICAgICAgIFdIRU4gMSBUSEVOICd3YWl0aW5nIGZvciB3cml0ZXJzIGJl Zm9yZSBidWlsZCcKLSAgICAgICAgICAgICAgICAgICAgICAgV0hFTiAyIFRIRU4gJ2J1aWxkaW5n IGluZGV4JyB8fAorICAgICAgICAoJ3tOVUxMLENSRUFURSBJTkRFWCxDUkVBVEUgSU5ERVggQ09O Q1VSUkVOVExZLFJFSU5ERVgsUkVJTkRFWCBDT05DVVJSRU5UTFl9Jzo6dGV4dFtdKVtTLnBhcmFt MV0gQVMgY29tbWFuZCwKKyAgICAgICAgQ0FTRSBTLnBhcmFtMTAgV0hFTiAyIFRIRU4gJ2J1aWxk aW5nIGluZGV4JyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09BTEVTQ0UoKCc6ICcg fHwgcGdfaW5kZXhhbV9wcm9ncmVzc19waGFzZW5hbWUoUy5wYXJhbTk6Om9pZCwgUy5wYXJhbTEx KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJykKLSAgICAgICAgICAg ICAgICAgICAgICAgV0hFTiAzIFRIRU4gJ3dhaXRpbmcgZm9yIHdyaXRlcnMgYmVmb3JlIHZhbGlk YXRpb24nCi0gICAgICAgICAgICAgICAgICAgICAgIFdIRU4gNCBUSEVOICdpbmRleCB2YWxpZGF0 aW9uOiBzY2FubmluZyBpbmRleCcKLSAgICAgICAgICAgICAgICAgICAgICAgV0hFTiA1IFRIRU4g J2luZGV4IHZhbGlkYXRpb246IHNvcnRpbmcgdHVwbGVzJwotICAgICAgICAgICAgICAgICAgICAg ICBXSEVOIDYgVEhFTiAnaW5kZXggdmFsaWRhdGlvbjogc2Nhbm5pbmcgdGFibGUnCi0gICAgICAg ICAgICAgICAgICAgICAgIFdIRU4gNyBUSEVOICd3YWl0aW5nIGZvciBvbGQgc25hcHNob3RzJwot ICAgICAgICAgICAgICAgICAgICAgICBXSEVOIDggVEhFTiAnd2FpdGluZyBmb3IgcmVhZGVycyBi ZWZvcmUgbWFya2luZyBkZWFkJwotICAgICAgICAgICAgICAgICAgICAgICBXSEVOIDkgVEhFTiAn d2FpdGluZyBmb3IgcmVhZGVycyBiZWZvcmUgZHJvcHBpbmcnCi0gICAgICAgICAgICAgICAgICAg ICAgIEVORCBhcyBwaGFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgRUxTRSAoJ3tOVUxMLGlu aXRpYWxpemluZyx3YWl0aW5nIGZvciB3cml0ZXJzIGJlZm9yZSBidWlsZCxOVUxMLHdhaXRpbmcg Zm9yIHdyaXRlcnMgYmVmb3JlIHZhbGlkYXRpb24saW5kZXggdmFsaWRhdGlvbjogc2Nhbm5pbmcg aW5kZXgsaW5kZXggdmFsaWRhdGlvbjogc29ydGluZyB0dXBsZXMsaW5kZXggdmFsaWRhdGlvbjog c2Nhbm5pbmcgdGFibGUsd2FpdGluZyBmb3Igb2xkIHNuYXBzaG90cyx3YWl0aW5nIGZvciByZWFk ZXJzIGJlZm9yZSBtYXJraW5nIGRlYWQsd2FpdGluZyBmb3IgcmVhZGVycyBiZWZvcmUgZHJvcHBp bmd9Jzo6dGV4dFtdKVtTLnBhcmFtMTBdCisgICAgICAgICAgICAgICAgICAgICAgIEVORCBBUyBw aGFzZSwKICAgICAgICAgUy5wYXJhbTQgQVMgbG9ja2Vyc190b3RhbCwKICAgICAgICAgUy5wYXJh bTUgQVMgbG9ja2Vyc19kb25lLAogICAgICAgICBTLnBhcmFtNiBBUyBjdXJyZW50X2xvY2tlcl9w aWQsCkBAIC0xMjIwLDEzICsxMTg2LDggQEAKIENSRUFURSBWSUVXIHBnX3N0YXRfcHJvZ3Jlc3Nf YmFzZWJhY2t1cCBBUwogICAgIFNFTEVDVAogICAgICAgICBTLnBpZCBBUyBwaWQsCi0gICAgICAg IENBU0UgUy5wYXJhbTEgV0hFTiAwIFRIRU4gJ2luaXRpYWxpemluZycKLSAgICAgICAgICAgICAg ICAgICAgICBXSEVOIDEgVEhFTiAnd2FpdGluZyBmb3IgY2hlY2twb2ludCB0byBmaW5pc2gnCi0g ICAgICAgICAgICAgICAgICAgICAgV0hFTiAyIFRIRU4gJ2VzdGltYXRpbmcgYmFja3VwIHNpemUn Ci0gICAgICAgICAgICAgICAgICAgICAgV0hFTiAzIFRIRU4gJ3N0cmVhbWluZyBkYXRhYmFzZSBm aWxlcycKLSAgICAgICAgICAgICAgICAgICAgICBXSEVOIDQgVEhFTiAnd2FpdGluZyBmb3Igd2Fs IGFyY2hpdmluZyB0byBmaW5pc2gnCi0gICAgICAgICAgICAgICAgICAgICAgV0hFTiA1IFRIRU4g J3RyYW5zZmVycmluZyB3YWwgZmlsZXMnCi0gICAgICAgICAgICAgICAgICAgICAgRU5EIEFTIHBo YXNlLAorICAgICAgICAoJ3tOVUxMLGluaXRpYWxpemluZyx3YWl0aW5nIGZvciBjaGVja3BvaW50 IHRvIGZpbmlzaCxlc3RpbWF0aW5nIGJhY2t1cCBzaXplLHN0cmVhbWluZyBkYXRhYmFzZSBmaWxl cyx3YWl0aW5nIGZvciB3YWwgYXJjaGl2aW5nIHRvIGZpbmlzaCx0cmFuc2ZlcnJpbmcgd2FsIGZp bGVzfSc6OnRleHRbXQorICAgICAgICApW1MucGFyYW0xXSBBUyBwaGFzZSwKICAgICAgICAgQ0FT RSBTLnBhcmFtMiBXSEVOIC0xIFRIRU4gTlVMTCBFTFNFIFMucGFyYW0yIEVORCBBUyBiYWNrdXBf dG90YWwsCiAgICAgICAgIFMucGFyYW0zIEFTIGJhY2t1cF9zdHJlYW1lZCwKICAgICAgICAgUy5w YXJhbTQgQVMgdGFibGVzcGFjZXNfdG90YWwsCkBAIC0xMjM4LDE0ICsxMTk5LDggQEAKICAgICBT RUxFQ1QKICAgICAgICAgUy5waWQgQVMgcGlkLCBTLmRhdGlkIEFTIGRhdGlkLCBELmRhdG5hbWUg QVMgZGF0bmFtZSwKICAgICAgICAgUy5yZWxpZCBBUyByZWxpZCwKLSAgICAgICAgQ0FTRSBTLnBh cmFtNSBXSEVOIDEgVEhFTiAnQ09QWSBGUk9NJwotICAgICAgICAgICAgICAgICAgICAgIFdIRU4g MiBUSEVOICdDT1BZIFRPJwotICAgICAgICAgICAgICAgICAgICAgIEVORCBBUyBjb21tYW5kLAot ICAgICAgICBDQVNFIFMucGFyYW02IFdIRU4gMSBUSEVOICdGSUxFJwotICAgICAgICAgICAgICAg ICAgICAgIFdIRU4gMiBUSEVOICdQUk9HUkFNJwotICAgICAgICAgICAgICAgICAgICAgIFdIRU4g MyBUSEVOICdQSVBFJwotICAgICAgICAgICAgICAgICAgICAgIFdIRU4gNCBUSEVOICdDQUxMQkFD SycKLSAgICAgICAgICAgICAgICAgICAgICBFTkQgQVMgInR5cGUiLAorICAgICAgICAoJ3tOVUxM LENPUFkgRlJPTSxDT1BZIFRPfSc6OnRleHRbXSlbUy5wYXJhbTVdIEFTIGNvbW1hbmQsCisgICAg ICAgICgne05VTEwsRklMRSxQUk9HUkFNLFBJUEUsQ0FMTEJBQ0t9Jzo6dGV4dFtdKVtTLnBhcmFt Nl0gQVMgInR5cGUiLAogICAgICAgICBTLnBhcmFtMSBBUyBieXRlc19wcm9jZXNzZWQsCiAgICAg ICAgIFMucGFyYW0yIEFTIGJ5dGVzX3RvdGFsLAogICAgICAgICBTLnBhcmFtMyBBUyB0dXBsZXNf cHJvY2Vzc2VkLAo= --000000000000c6a43605dc25bd1c--