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 1oeEt8-0005Qq-PP for pgsql-hackers@arkaria.postgresql.org; Fri, 30 Sep 2022 12:13:07 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oeEt5-0004LY-NQ for pgsql-hackers@arkaria.postgresql.org; Fri, 30 Sep 2022 12:13:03 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oeEt5-0004LN-9G for pgsql-hackers@lists.postgresql.org; Fri, 30 Sep 2022 12:13:03 +0000 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1oeEsz-0007F9-TP for pgsql-hackers@postgresql.org; Fri, 30 Sep 2022 12:13:02 +0000 Received: by mail-wr1-x42c.google.com with SMTP id x15so6063828wrv.1 for ; Fri, 30 Sep 2022 05:12:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=in-reply-to:references:cc:to:from:content-language:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date; bh=w1t9+8sNac65k1ypbCV5O5aEE2d8so05VuFPI/jGXOo=; b=fGEOcnCd4ZryC2ggan78jLIJJIveSEm2V+plIqy03FmWjdNLcda9E/V2q2Sn+ij8XR XuownN/yUJgrn/GCvpc4nct7PT0+7KSTq1NXG4O3S0qF9nxIgst7wR6JJz3Y2iUt0WbJ q67Q/V5G5f9WvBKosXApglEK41JGpN5j6sTK7oo3UIGSUlJrUIdb35VIDxoauAxHq1bt VcwhJVjMzZiNTufCH7cpMteU6Hf7kzP+0VUCBTP2I9jwbxp5MEl0aKCbXoDYgd9f/4+h i6FecO4RzdjcPY+R8RmbGo0tw/LHgUE6W8tQ2jqDkFUWEG17VjdojbTYasKLG8Mlor5y OODg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:references:cc:to:from:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date; bh=w1t9+8sNac65k1ypbCV5O5aEE2d8so05VuFPI/jGXOo=; b=yLOQFs+N5wPhKF0KPkwPrNYnfx3HMKWgh8jXia45AXJyVHCYHW6CgeLko9BGBQ9NRd JfqC4EoXf00YgtcIPICumtfy9SCOWGbRNFyoLUgYBwVK2sqS42E79nqtapURgHwkUt58 2SRy+6OywM6yYvEl2WY2pb3MEW73Q+SaMkPvbJIGuKMs4S6R1NPAu+v8N+wCNOZFzfWn KTKuAaV+xXsiYsp2MjhWSD5IgShEiIWsmmQdJnf9VO90n9HmYrF7FMYrdmbA+9csnfJW rwRJnzDt3ibCR2iSb/AN2EUd1Hqk8O25LPVlES6QrMFWZn11UCvILZ3wZ33Cai4MattI XJyQ== X-Gm-Message-State: ACrzQf1Uq5ywz7rSgDaA7SRBym4CEGVHk5dNOdNSvX/4ctpXwAReDdIk /yKUeaa5iNkk7AV/zVf35iE= X-Google-Smtp-Source: AMsMyM7bzKfnnzSWyp8BiIbIsAlDFBJm0dPtfFp4+TlAPhym7N4LdLvZcCRlFhM/o+uVepbzWCfhZg== X-Received: by 2002:adf:f0c6:0:b0:22c:dc92:9dde with SMTP id x6-20020adff0c6000000b0022cdc929ddemr3799691wro.677.1664539976529; Fri, 30 Sep 2022 05:12:56 -0700 (PDT) Received: from [192.168.28.51] ([54.239.6.187]) by smtp.gmail.com with ESMTPSA id r18-20020a05600c35d200b003a84375d0d1sm7019306wmq.44.2022.09.30.05.12.54 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 30 Sep 2022 05:12:55 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------ScVn3SQtdTbYXEREThz8umaV" Message-ID: <178cf7da-9bd7-e328-9c49-e28ac4701352@gmail.com> Date: Fri, 30 Sep 2022 14:11:39 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.3.0 Subject: Re: Minimal logical decoding on standbys Content-Language: en-US From: "Drouvot, Bertrand" To: Andres Freund , Robert Haas Cc: Alvaro Herrera , Ibrar Ahmed , Amit Khandekar , fabriziomello@gmail.com, tushar , Rahila Syed , pgsql-hackers References: <202107281526.o74ieuj6sj7z@alvherre.pgsql> <2b14d595-1e8b-e5b6-6098-6a11d19fa1c7@amazon.com> <688cbedf-a172-f0d8-8352-d4ea223bceeb@amazon.com> <20211028210755.afmwcvpo6ajwdx6n@alap3.anarazel.de> <6711d09f-eaa9-264b-ec7f-88004218b075@amazon.com> In-Reply-To: <6711d09f-eaa9-264b-ec7f-88004218b075@amazon.com> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------ScVn3SQtdTbYXEREThz8umaV Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, On 7/6/22 3:30 PM, Drouvot, Bertrand wrote: > Hi, > > On 10/28/21 11:07 PM, Andres Freund wrote: >> Hi, >> >> On 2021-10-28 16:24:22 -0400, Robert Haas wrote: >>> On Wed, Oct 27, 2021 at 2:56 AM Drouvot, Bertrand >>> wrote: >>>> So you have in mind to check for XLogLogicalInfoActive() first, and >>>> if true, then open the relation and call >>>> RelationIsAccessibleInLogicalDecoding()? >>> I think 0001 is utterly unacceptable. We cannot add calls to >>> table_open() in low-level functions like this. Suppose for example >>> that _bt_getbuf() calls _bt_log_reuse_page() which with 0001 applied >>> would call get_rel_logical_catalog(). _bt_getbuf() will have acquired >>> a buffer lock on the page. The idea that it's safe to call >>> table_open() while holding a buffer lock cannot be taken seriously. >> Yes - that's pretty clearly a deadlock hazard. It shouldn't too hard >> to fix, I >> think. Possibly a bit more verbose than nice, but... >> >> Alternatively we could propagate the information whether a relcache >> entry is >> for a catalog from the table to the index. Then we'd not need to >> change the >> btree code to pass the table down. > > Looking closer at RelationIsAccessibleInLogicalDecoding() It seems to me > that the missing part to be able to tell whether or not an index is for > a catalog is the rd_options->user_catalog_table value of its related > heap relation. > > Then, a way to achieve that could be to: > > - Add to Relation a new "heap_rd_options" representing the rd_options of > the related heap relation when appropriate > > - Trigger the related indexes relcache invalidations when an > ATExecSetRelOptions() is triggered on a heap relation > > - Write an equivalent of RelationIsUsedAsCatalogTable() for indexes that > would make use of the heap_rd_options instead > > Does that sound like a valid option to you or do you have another idea > in mind to propagate the information whether a relcache entry is for a > catalog from the table to the index? > I ended up with the attached proposal to propagate the catalog information to the indexes. The attached adds a new field "isusercatalog" in pg_index to indicate whether or not the index is linked to a table that has the storage parameter user_catalog_table set to true. Then it defines new macros, including "IndexIsAccessibleInLogicalDecoding" making use of this new field. This new macro replaces get_rel_logical_catalog() that was part of the previous patch version. What do you think about this approach and the attached? If that sounds reasonable, then I'll add tap tests for it and try to improve the way isusercatalog is propagated to the index(es) in case a reset is done on user_catalog_table on the table (currently in this POC patch, it's hardcoded to "false" which is the default value for user_catalog_table in boolRelOpts[]) (A better approach would be probably to retrieve the value from the table once the reset is done and then propagate it to the index(es).) Regards, -- Bertrand Drouvot PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --------------ScVn3SQtdTbYXEREThz8umaV Content-Type: text/plain; charset=UTF-8; name="v26-0001-Add-info-in-WAL-records-in-preparation-for-logic.patch" Content-Disposition: attachment; filename*0="v26-0001-Add-info-in-WAL-records-in-preparation-for-logic.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAwZGM4MzhhMGZkYjBmOGRhY2NjMzk4YmVhNGYxMTE1MmI2OGUwYzNhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBiZHJvdXZvdEFXUyA8YmRyb3V2b3RAYW1hem9uLmNv bT4KRGF0ZTogRnJpLCAzMCBTZXAgMjAyMiAwOToyODowOSArMDAwMApTdWJqZWN0OiBbUEFU Q0ggdjI2XSBBZGQgaW5mbyBpbiBXQUwgcmVjb3JkcyBpbiBwcmVwYXJhdGlvbiBmb3IgbG9n aWNhbCBzbG90CiBjb25mbGljdCBoYW5kbGluZy4KCldoZW4gYSBXQUwgcmVwbGF5IG9uIHN0 YW5kYnkgaW5kaWNhdGVzIHRoYXQgYSBjYXRhbG9nIHRhYmxlIHR1cGxlIGlzCnRvIGJlIGRl bGV0ZWQgYnkgYW4geGlkIHRoYXQgaXMgZ3JlYXRlciB0aGFuIGEgbG9naWNhbCBzbG90J3MK Y2F0YWxvZ194bWluLCB0aGVuIHRoYXQgbWVhbnMgdGhlIHNsb3QncyBjYXRhbG9nX3htaW4g Y29uZmxpY3RzIHdpdGgKdGhlIHhpZCwgYW5kIHdlIG5lZWQgdG8gaGFuZGxlIHRoZSBjb25m bGljdC4gIFdoaWxlIHN1YnNlcXVlbnQgY29tbWl0cwp3aWxsIGRvIHRoZSBhY3R1YWwgY29u ZmxpY3QgaGFuZGxpbmcsIHRoaXMgY29tbWl0IGFkZHMgYSBuZXcgZmllbGQKb25DYXRhbG9n VGFibGUgaW4gc3VjaCBXQUwgcmVjb3JkcywgdGhhdCBpcyB0cnVlIGZvciBjYXRhbG9nIHRh YmxlcywKc28gYXMgdG8gYXJyYW5nZSBmb3IgY29uZmxpY3QgaGFuZGxpbmcuCgpBdXRob3I6 IEFuZHJlcyBGcmV1bmQgKGluIGFuIG9sZGVyIHZlcnNpb24pLCBBbWl0IEtoYW5kZWthciwg QmVydHJhbmQKRHJvdXZvdApSZXZpZXdlZC1CeTogQmVydHJhbmQgRHJvdXZvdCwgQW5kcmVz IEZyZXVuZCwgUm9iZXJ0IEhhYXMsIEZhYnJpemlvIGRlClJveWVzIE1lbGxvCi0tLQogZG9j L3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwgICAgICAgICAgICAgIHwgMTEgKysrKysKIHNyYy9i YWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jICB8ICAzICstCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvZ2lzdC9naXN0eGxvZy5jICAgICAgfCAgMSArCiBzcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNoaW5zZXJ0LmMgICAgfCAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC9oZWFwYW0uYyAgICAgICAgfCAgNCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvcHJ1 bmVoZWFwLmMgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0 eW1hcC5jIHwgIDMgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jICAg ICB8ICAzICsrCiBzcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3ZhY3V1bS5jICAgfCAg MSArCiBzcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMgICAgICAgICAgICAgfCAxNCArKysr LS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICAgICAgICB8IDU3ICsrKysr KysrKysrKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL2FjY2Vzcy9naXN0eGxvZy5oICAg ICAgICAgICB8ICAyICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoX3hsb2cuaCAgICAgICAg ICB8ICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW1feGxvZy5oICAgICAgICB8ICA1 ICsrLQogc3JjL2luY2x1ZGUvYWNjZXNzL25idHhsb2cuaCAgICAgICAgICAgIHwgIDIgKwog c3JjL2luY2x1ZGUvYWNjZXNzL3NwZ3hsb2cuaCAgICAgICAgICAgIHwgIDEgKwogc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19pbmRleC5oICAgICAgICAgIHwgIDIgKwogc3JjL2luY2x1ZGUv dXRpbHMvcmVsLmggICAgICAgICAgICAgICAgIHwgMzMgKysrKysrKysrKysrKysKIDE4IGZp bGVzIGNoYW5nZWQsIDEzNyBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQogICA4LjMl IGRvYy9zcmMvc2dtbC8KICAgOS41JSBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC8KICAgOC4x JSBzcmMvYmFja2VuZC9hY2Nlc3MvCiAgIDcuNyUgc3JjL2JhY2tlbmQvY2F0YWxvZy8KICAz MS41JSBzcmMvYmFja2VuZC9jb21tYW5kcy8KICAgNi40JSBzcmMvaW5jbHVkZS9hY2Nlc3Mv CiAgMjYuNSUgc3JjL2luY2x1ZGUvdXRpbHMvCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L2NhdGFsb2dzLnNnbWwgYi9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbAppbmRleCAwMGY4 MzNkMjEwLi4yYTYzYWIwZWEzIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Mu c2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbApAQCAtNDQyNiw2ICs0NDI2 LDE3IEBAIFNDUkFNLVNIQS0yNTYkPHJlcGxhY2VhYmxlPiZsdDtpdGVyYXRpb24gY291bnQm Z3Q7PC9yZXBsYWNlYWJsZT46PHJlcGxhY2VhYmxlPiZsCiAgICAgICA8L3BhcmE+PC9lbnRy eT4KICAgICAgPC9yb3c+CiAKKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSByb2xlPSJjYXRh bG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+CisgICAg ICAgPHN0cnVjdGZpZWxkPmluZGlzdXNlcmNhdGFsb2c8L3N0cnVjdGZpZWxkPiA8dHlwZT5i b29sPC90eXBlPgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgSWYgdHJ1 ZSwgdGhlIGluZGV4IGlzIGxpbmtlZCB0byBhIHRhYmxlIHRoYXQgaXMgZGVjbGFyZWQgYXMg YW4gYWRkaXRpb25hbAorICAgICAgIGNhdGFsb2cgdGFibGUgZm9yIHB1cnBvc2VzIG9mIGxv Z2ljYWwgcmVwbGljYXRpb24gKG1lYW5zIGhhcyA8bGluayBsaW5rZW5kPSJzcWwtY3JlYXRl dGFibGUiPjxsaXRlcmFsPnVzZXJfY2F0YWxvZ190YWJsZTwvbGl0ZXJhbD48L2xpbms+KQor ICAgICAgIHNldCB0byB0cnVlLgorICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgIDwvcm93 PgorCiAgICAgIDxyb3c+CiAgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRy eSI+PHBhcmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgogICAgICAgIDxzdHJ1Y3RmaWVs ZD5pbmRpc3JlcGxpZGVudDwvc3RydWN0ZmllbGQ+IDx0eXBlPmJvb2w8L3R5cGU+CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3JlbG9wdGlvbnMuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jCmluZGV4IDY0NThhOWMyNzYuLjQ0 ZGMxNDA0NDAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0 aW9ucy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jCkBA IC0xMjAsNyArMTIwLDggQEAgc3RhdGljIHJlbG9wdF9ib29sIGJvb2xSZWxPcHRzW10gPQog CQkJUkVMT1BUX0tJTkRfSEVBUCwKIAkJCUFjY2Vzc0V4Y2x1c2l2ZUxvY2sKIAkJfSwKLQkJ ZmFsc2UKKwkJZmFsc2UJCQkJCS8qIENoYW5nZSBjYXRhbG9nX3RhYmxlX3ZhbCBpbgorCQkJ CQkJCQkgKiBBVEV4ZWNTZXRSZWxPcHRpb25zIGFjY29yZGluZ2x5ICovCiAJfSwKIAl7CiAJ CXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R4bG9nLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0eGxvZy5jCmluZGV4IDk5OGJlZmQyY2IuLjk2 MTA3YjIxMjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R4bG9n LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHhsb2cuYwpAQCAtNjA4LDYg KzYwOCw3IEBAIGdpc3RYTG9nUGFnZVJldXNlKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIg Ymxrbm8sIEZ1bGxUcmFuc2FjdGlvbklkIGxhdGVzdFJlbW92CiAJICovCiAKIAkvKiBYTE9H IHN0dWZmICovCisJeGxyZWNfcmV1c2Uub25DYXRhbG9nVGFibGUgPSBJbmRleElzQWNjZXNz aWJsZUluTG9naWNhbERlY29kaW5nKHJlbCk7CiAJeGxyZWNfcmV1c2UubG9jYXRvciA9IHJl bC0+cmRfbG9jYXRvcjsKIAl4bHJlY19yZXVzZS5ibG9jayA9IGJsa25vOwogCXhscmVjX3Jl dXNlLmxhdGVzdFJlbW92ZWRGdWxsWGlkID0gbGF0ZXN0UmVtb3ZlZFhpZDsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hpbnNlcnQuYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoL2hhc2hpbnNlcnQuYwppbmRleCA0ZjJmZWNiOTA4Li4xYzU4NmIxM2Y1 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoaW5zZXJ0LmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaGluc2VydC5jCkBAIC0zOTksNiArMzk5 LDcgQEAgX2hhc2hfdmFjdXVtX29uZV9wYWdlKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaHJl bCwgQnVmZmVyIG1ldGFidWYsIEJ1ZmZlciBidWYpCiAJCQl4bF9oYXNoX3ZhY3V1bV9vbmVf cGFnZSB4bHJlYzsKIAkJCVhMb2dSZWNQdHIJcmVjcHRyOwogCisJCQl4bHJlYy5vbkNhdGFs b2dUYWJsZSA9IFJlbGF0aW9uSXNBY2Nlc3NpYmxlSW5Mb2dpY2FsRGVjb2RpbmcoaHJlbCk7 CiAJCQl4bHJlYy5sYXRlc3RSZW1vdmVkWGlkID0gbGF0ZXN0UmVtb3ZlZFhpZDsKIAkJCXhs cmVjLm50dXBsZXMgPSBuZGVsZXRhYmxlOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5j CmluZGV4IDc1YjIxNDgyNGQuLjE1MjliZjFkYjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbS5jCkBAIC04MTY3LDYgKzgxNjcsNyBAQCBsb2dfaGVhcF9mcmVlemUoUmVsYXRpb24g cmVsbiwgQnVmZmVyIGJ1ZmZlciwgVHJhbnNhY3Rpb25JZCBjdXRvZmZfeGlkLAogCS8qIG5v ciB3aGVuIHRoZXJlIGFyZSBubyB0dXBsZXMgdG8gZnJlZXplICovCiAJQXNzZXJ0KG50dXBs ZXMgPiAwKTsKIAorCXhscmVjLm9uQ2F0YWxvZ1RhYmxlID0gUmVsYXRpb25Jc0FjY2Vzc2li bGVJbkxvZ2ljYWxEZWNvZGluZyhyZWxuKTsKIAl4bHJlYy5jdXRvZmZfeGlkID0gY3V0b2Zm X3hpZDsKIAl4bHJlYy5udHVwbGVzID0gbnR1cGxlczsKIApAQCAtODE5Nyw3ICs4MTk4LDcg QEAgbG9nX2hlYXBfZnJlZXplKFJlbGF0aW9uIHJlbG4sIEJ1ZmZlciBidWZmZXIsIFRyYW5z YWN0aW9uSWQgY3V0b2ZmX3hpZCwKICAqIGhlYXBfYnVmZmVyLCBpZiBuZWNlc3NhcnkuCiAg Ki8KIFhMb2dSZWNQdHIKLWxvZ19oZWFwX3Zpc2libGUoUmVsRmlsZUxvY2F0b3IgcmxvY2F0 b3IsIEJ1ZmZlciBoZWFwX2J1ZmZlciwgQnVmZmVyIHZtX2J1ZmZlciwKK2xvZ19oZWFwX3Zp c2libGUoUmVsYXRpb24gcmVsLCBCdWZmZXIgaGVhcF9idWZmZXIsIEJ1ZmZlciB2bV9idWZm ZXIsCiAJCQkJIFRyYW5zYWN0aW9uSWQgY3V0b2ZmX3hpZCwgdWludDggdm1mbGFncykKIHsK IAl4bF9oZWFwX3Zpc2libGUgeGxyZWM7CkBAIC04MjA3LDYgKzgyMDgsNyBAQCBsb2dfaGVh cF92aXNpYmxlKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBCdWZmZXIgaGVhcF9idWZmZXIs IEJ1ZmZlciB2bV9idWZmZXIsCiAJQXNzZXJ0KEJ1ZmZlcklzVmFsaWQoaGVhcF9idWZmZXIp KTsKIAlBc3NlcnQoQnVmZmVySXNWYWxpZCh2bV9idWZmZXIpKTsKIAorCXhscmVjLm9uQ2F0 YWxvZ1RhYmxlID0gUmVsYXRpb25Jc0FjY2Vzc2libGVJbkxvZ2ljYWxEZWNvZGluZyhyZWwp OwogCXhscmVjLmN1dG9mZl94aWQgPSBjdXRvZmZfeGlkOwogCXhscmVjLmZsYWdzID0gdm1m bGFnczsKIAlYTG9nQmVnaW5JbnNlcnQoKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL3BydW5laGVhcC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvcHJ1bmVo ZWFwLmMKaW5kZXggOWY0M2JiZTI1Zi4uYzNmOWU2MmNjNSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvcHJ1bmVoZWFwLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvcHJ1bmVoZWFwLmMKQEAgLTQyMSw2ICs0MjEsNyBAQCBoZWFwX3BhZ2VfcHJ1bmUo UmVsYXRpb24gcmVsYXRpb24sIEJ1ZmZlciBidWZmZXIsCiAJCQl4bHJlYy5sYXRlc3RSZW1v dmVkWGlkID0gcHJzdGF0ZS5sYXRlc3RSZW1vdmVkWGlkOwogCQkJeGxyZWMubnJlZGlyZWN0 ZWQgPSBwcnN0YXRlLm5yZWRpcmVjdGVkOwogCQkJeGxyZWMubmRlYWQgPSBwcnN0YXRlLm5k ZWFkOworCQkJeGxyZWMub25DYXRhbG9nVGFibGUgPSBSZWxhdGlvbklzQWNjZXNzaWJsZUlu TG9naWNhbERlY29kaW5nKHJlbGF0aW9uKTsKIAogCQkJWExvZ0JlZ2luSW5zZXJ0KCk7CiAJ CQlYTG9nUmVnaXN0ZXJEYXRhKChjaGFyICopICZ4bHJlYywgU2l6ZU9mSGVhcFBydW5lKTsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYwppbmRleCBkNjI3NjE3 MjhiLi5kOWFiY2NjZDY4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92 aXNpYmlsaXR5bWFwLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0 eW1hcC5jCkBAIC0yODMsOCArMjgzLDcgQEAgdmlzaWJpbGl0eW1hcF9zZXQoUmVsYXRpb24g cmVsLCBCbG9ja051bWJlciBoZWFwQmxrLCBCdWZmZXIgaGVhcEJ1ZiwKIAkJCWlmIChYTG9n UmVjUHRySXNJbnZhbGlkKHJlY3B0cikpCiAJCQl7CiAJCQkJQXNzZXJ0KCFJblJlY292ZXJ5 KTsKLQkJCQlyZWNwdHIgPSBsb2dfaGVhcF92aXNpYmxlKHJlbC0+cmRfbG9jYXRvciwgaGVh cEJ1Ziwgdm1CdWYsCi0JCQkJCQkJCQkJICBjdXRvZmZfeGlkLCBmbGFncyk7CisJCQkJcmVj cHRyID0gbG9nX2hlYXBfdmlzaWJsZShyZWwsIGhlYXBCdWYsIHZtQnVmLCBjdXRvZmZfeGlk LCBmbGFncyk7CiAKIAkJCQkvKgogCQkJCSAqIElmIGRhdGEgY2hlY2tzdW1zIGFyZSBlbmFi bGVkIChvciB3YWxfbG9nX2hpbnRzPW9uKSwgd2UKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnRwYWdlLmMKaW5kZXggOGI5NjcwOGIzZS4uOGMxOGZmODk1YSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRwYWdlLmMKQEAgLTgzNiw2ICs4MzYsNyBAQCBfYnRfbG9nX3JldXNl X3BhZ2UoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBibGtubywgRnVsbFRyYW5zYWN0aW9u SWQgc2FmZXhpZCkKIAkgKi8KIAogCS8qIFhMT0cgc3R1ZmYgKi8KKwl4bHJlY19yZXVzZS5v bkNhdGFsb2dUYWJsZSA9IEluZGV4SXNBY2Nlc3NpYmxlSW5Mb2dpY2FsRGVjb2RpbmcocmVs KTsKIAl4bHJlY19yZXVzZS5sb2NhdG9yID0gcmVsLT5yZF9sb2NhdG9yOwogCXhscmVjX3Jl dXNlLmJsb2NrID0gYmxrbm87CiAJeGxyZWNfcmV1c2UubGF0ZXN0UmVtb3ZlZEZ1bGxYaWQg PSBzYWZleGlkOwpAQCAtMTM1Nyw2ICsxMzU4LDggQEAgX2J0X2RlbGl0ZW1zX2RlbGV0ZShS ZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYsIFRyYW5zYWN0aW9uSWQgbGF0ZXN0UmVtb3ZlZFhp ZCwKIAkJWExvZ1JlY1B0cglyZWNwdHI7CiAJCXhsX2J0cmVlX2RlbGV0ZSB4bHJlY19kZWxl dGU7CiAKKwkJeGxyZWNfZGVsZXRlLm9uQ2F0YWxvZ1RhYmxlID0KKwkJCUluZGV4SXNBY2Nl c3NpYmxlSW5Mb2dpY2FsRGVjb2RpbmcocmVsKTsKIAkJeGxyZWNfZGVsZXRlLmxhdGVzdFJl bW92ZWRYaWQgPSBsYXRlc3RSZW1vdmVkWGlkOwogCQl4bHJlY19kZWxldGUubmRlbGV0ZWQg PSBuZGVsZXRhYmxlOwogCQl4bHJlY19kZWxldGUubnVwZGF0ZWQgPSBudXBkYXRhYmxlOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd2YWN1dW0uYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndmFjdXVtLmMKaW5kZXggMDA0OTYzMDUzMi4u MWZkYTcyMGE3NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd2 YWN1dW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3ZhY3V1bS5jCkBA IC01MDMsNiArNTAzLDcgQEAgdmFjdXVtUmVkaXJlY3RBbmRQbGFjZWhvbGRlcihSZWxhdGlv biBpbmRleCwgQnVmZmVyIGJ1ZmZlcikKIAlzcGd4bG9nVmFjdXVtUmVkaXJlY3QgeGxyZWM7 CiAJR2xvYmFsVmlzU3RhdGUgKnZpc3Rlc3Q7CiAKKwl4bHJlYy5vbkNhdGFsb2dUYWJsZSA9 IEluZGV4SXNBY2Nlc3NpYmxlSW5Mb2dpY2FsRGVjb2RpbmcoaW5kZXgpOwogCXhscmVjLm5U b1BsYWNlaG9sZGVyID0gMDsKIAl4bHJlYy5uZXdlc3RSZWRpcmVjdFhpZCA9IEludmFsaWRU cmFuc2FjdGlvbklkOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4 LmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKaW5kZXggNjFmMWQzOTI2YS4uZjZi MmM5YWM3MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCisrKyBi L3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwpAQCAtMTIzLDcgKzEyMyw4IEBAIHN0YXRp YyB2b2lkIFVwZGF0ZUluZGV4UmVsYXRpb24oT2lkIGluZGV4b2lkLCBPaWQgaGVhcG9pZCwK IAkJCQkJCQkJYm9vbCBpc2V4Y2x1c2lvbiwKIAkJCQkJCQkJYm9vbCBpbW1lZGlhdGUsCiAJ CQkJCQkJCWJvb2wgaXN2YWxpZCwKLQkJCQkJCQkJYm9vbCBpc3JlYWR5KTsKKwkJCQkJCQkJ Ym9vbCBpc3JlYWR5LAorCQkJCQkJCQlib29sIGlzX3VzZXJfY2F0YWxvZyk7CiBzdGF0aWMg dm9pZCBpbmRleF91cGRhdGVfc3RhdHMoUmVsYXRpb24gcmVsLAogCQkJCQkJCSAgIGJvb2wg aGFzaW5kZXgsCiAJCQkJCQkJICAgZG91YmxlIHJlbHR1cGxlcyk7CkBAIC01NDUsNyArNTQ2 LDggQEAgVXBkYXRlSW5kZXhSZWxhdGlvbihPaWQgaW5kZXhvaWQsCiAJCQkJCWJvb2wgaXNl eGNsdXNpb24sCiAJCQkJCWJvb2wgaW1tZWRpYXRlLAogCQkJCQlib29sIGlzdmFsaWQsCi0J CQkJCWJvb2wgaXNyZWFkeSkKKwkJCQkJYm9vbCBpc3JlYWR5LAorCQkJCQlib29sIGlzX3Vz ZXJfY2F0YWxvZykKIHsKIAlpbnQydmVjdG9yICppbmRrZXk7CiAJb2lkdmVjdG9yICAqaW5k Y29sbGF0aW9uOwpAQCAtNjIyLDYgKzYyNCw3IEBAIFVwZGF0ZUluZGV4UmVsYXRpb24oT2lk IGluZGV4b2lkLAogCXZhbHVlc1tBbnVtX3BnX2luZGV4X2luZGNoZWNreG1pbiAtIDFdID0g Qm9vbEdldERhdHVtKGZhbHNlKTsKIAl2YWx1ZXNbQW51bV9wZ19pbmRleF9pbmRpc3JlYWR5 IC0gMV0gPSBCb29sR2V0RGF0dW0oaXNyZWFkeSk7CiAJdmFsdWVzW0FudW1fcGdfaW5kZXhf aW5kaXNsaXZlIC0gMV0gPSBCb29sR2V0RGF0dW0odHJ1ZSk7CisJdmFsdWVzW0FudW1fcGdf aW5kZXhfaW5kaXN1c2VyY2F0YWxvZyAtIDFdID0gQm9vbEdldERhdHVtKGlzX3VzZXJfY2F0 YWxvZyk7CiAJdmFsdWVzW0FudW1fcGdfaW5kZXhfaW5kaXNyZXBsaWRlbnQgLSAxXSA9IEJv b2xHZXREYXR1bShmYWxzZSk7CiAJdmFsdWVzW0FudW1fcGdfaW5kZXhfaW5ka2V5IC0gMV0g PSBQb2ludGVyR2V0RGF0dW0oaW5ka2V5KTsKIAl2YWx1ZXNbQW51bV9wZ19pbmRleF9pbmRj b2xsYXRpb24gLSAxXSA9IFBvaW50ZXJHZXREYXR1bShpbmRjb2xsYXRpb24pOwpAQCAtNzM1 LDYgKzczOCw3IEBAIGluZGV4X2NyZWF0ZShSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJVHJh bnNhY3Rpb25JZCByZWxmcm96ZW54aWQ7CiAJTXVsdGlYYWN0SWQgcmVsbWlubXhpZDsKIAli b29sCQljcmVhdGVfc3RvcmFnZSA9ICFSZWxGaWxlTnVtYmVySXNWYWxpZChyZWxGaWxlTnVt YmVyKTsKKwlib29sCQlpc3VzZXJjYXRhbG9nID0gZmFsc2U7CiAKIAkvKiBjb25zdHJhaW50 IGZsYWdzIGNhbiBvbmx5IGJlIHNldCB3aGVuIGEgY29uc3RyYWludCBpcyByZXF1ZXN0ZWQg Ki8KIAlBc3NlcnQoKGNvbnN0cl9mbGFncyA9PSAwKSB8fApAQCAtMTAxNCwxMyArMTAxOCwx NyBAQCBpbmRleF9jcmVhdGUoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCSAqCSAgKE9yLCBj b3VsZCBkZWZpbmUgYSBydWxlIHRvIG1haW50YWluIHRoZSBwcmVkaWNhdGUpIC0tTmVscywg RmViICc5MgogCSAqIC0tLS0tLS0tLS0tLS0tLS0KIAkgKi8KKwlpZiAoaGVhcFJlbGF0aW9u LT5yZF9vcHRpb25zKQorCQlpc3VzZXJjYXRhbG9nID0gKChTdGRSZE9wdGlvbnMgKikgKGhl YXBSZWxhdGlvbiktPnJkX29wdGlvbnMpLT51c2VyX2NhdGFsb2dfdGFibGU7CisKIAlVcGRh dGVJbmRleFJlbGF0aW9uKGluZGV4UmVsYXRpb25JZCwgaGVhcFJlbGF0aW9uSWQsIHBhcmVu dEluZGV4UmVsaWQsCiAJCQkJCQlpbmRleEluZm8sCiAJCQkJCQljb2xsYXRpb25PYmplY3RJ ZCwgY2xhc3NPYmplY3RJZCwgY29sb3B0aW9ucywKIAkJCQkJCWlzcHJpbWFyeSwgaXNfZXhj bHVzaW9uLAogCQkJCQkJKGNvbnN0cl9mbGFncyAmIElOREVYX0NPTlNUUl9DUkVBVEVfREVG RVJSQUJMRSkgPT0gMCwKIAkJCQkJCSFjb25jdXJyZW50ICYmICFpbnZhbGlkLAotCQkJCQkJ IWNvbmN1cnJlbnQpOworCQkJCQkJIWNvbmN1cnJlbnQsCisJCQkJCQlpc3VzZXJjYXRhbG9n KTsKIAogCS8qCiAJICogUmVnaXN0ZXIgcmVsY2FjaGUgaW52YWxpZGF0aW9uIG9uIHRoZSBp bmRleGVzJyBoZWFwIHJlbGF0aW9uLCB0bwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpp bmRleCA3ZDhhNzVkMjNjLi41OTNhN2MwODVmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j b21tYW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNt ZHMuYwpAQCAtMTQxMzYsNiArMTQxMzYsMTAgQEAgQVRQcmVwU2V0VGFibGVTcGFjZShBbHRl cmVkVGFibGVJbmZvICp0YWIsIFJlbGF0aW9uIHJlbCwgY29uc3QgY2hhciAqdGFibGVzcGFj ZW4KIAogLyoKICAqIFNldCwgcmVzZXQsIG9yIHJlcGxhY2UgcmVsb3B0aW9ucy4KKyAqCisg KiBUaGUgY2F0YWxvZ190YWJsZV92YWwgdmFsdWUgaGFzIHRvIG1hdGNoIHRoZSB1c2VyX2Nh dGFsb2dfdGFibGUgdmFsdWUKKyAqIGRlZmluZWQgaW4gYm9vbFJlbE9wdHNbXSBpbiByZWxv cHRpb25zLmMuIEl0J3MgaW5kZWVkIHVzZWQgYXMgdGhlIGRlZmF1bHQKKyAqIHZhbHVlIHRv IGJlIHByb3BhZ2F0ZWQgdG8gdGhlIGluZGV4ZXMgaW4gY2FzZSBvZiByZXNldC4KICAqLwog c3RhdGljIHZvaWQKIEFURXhlY1NldFJlbE9wdGlvbnMoUmVsYXRpb24gcmVsLCBMaXN0ICpk ZWZMaXN0LCBBbHRlclRhYmxlVHlwZSBvcGVyYXRpb24sCkBAIC0xNDE1MSw2ICsxNDE1NSwx MCBAQCBBVEV4ZWNTZXRSZWxPcHRpb25zKFJlbGF0aW9uIHJlbCwgTGlzdCAqZGVmTGlzdCwg QWx0ZXJUYWJsZVR5cGUgb3BlcmF0aW9uLAogCURhdHVtCQlyZXBsX3ZhbFtOYXR0c19wZ19j bGFzc107CiAJYm9vbAkJcmVwbF9udWxsW05hdHRzX3BnX2NsYXNzXTsKIAlib29sCQlyZXBs X3JlcGxbTmF0dHNfcGdfY2xhc3NdOworCUxpc3RDZWxsICAgKmNlbGw7CisJTGlzdAkgICAq cmVsX29wdGlvbnM7CisJYm9vbAkJY2F0YWxvZ190YWJsZV92YWwgPSBmYWxzZTsKKwlib29s CQljYXRhbG9nX3RhYmxlID0gZmFsc2U7CiAJc3RhdGljIGNoYXIgKnZhbGlkbnNwc1tdID0g SEVBUF9SRUxPUFRfTkFNRVNQQUNFUzsKIAogCWlmIChkZWZMaXN0ID09IE5JTCAmJiBvcGVy YXRpb24gIT0gQVRfUmVwbGFjZVJlbE9wdGlvbnMpCkBAIC0xNDI0NSw2ICsxNDI1MywyMCBA QCBBVEV4ZWNTZXRSZWxPcHRpb25zKFJlbGF0aW9uIHJlbCwgTGlzdCAqZGVmTGlzdCwgQWx0 ZXJUYWJsZVR5cGUgb3BlcmF0aW9uLAogCQl9CiAJfQogCisJLyogSWYgdXNlcl9jYXRhbG9n X3RhYmxlIGlzIHBhcnQgb2YgdGhlIG5ldyBvcHRpb25zLCByZWNvcmQgaXRzIG5ldyB2YWx1 ZSAqLworCXJlbF9vcHRpb25zID0gdW50cmFuc2Zvcm1SZWxPcHRpb25zKG5ld09wdGlvbnMp OworCisJZm9yZWFjaChjZWxsLCByZWxfb3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAgKmRl ZmVsID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCisJCWlmIChzdHJjbXAoZGVmZWwt PmRlZm5hbWUsICJ1c2VyX2NhdGFsb2dfdGFibGUiKSA9PSAwKQorCQl7CisJCQljYXRhbG9n X3RhYmxlID0gdHJ1ZTsKKwkJCWNhdGFsb2dfdGFibGVfdmFsID0gZGVmR2V0Qm9vbGVhbihk ZWZlbCk7CisJCX0KKwl9CisKIAkvKgogCSAqIEFsbCB3ZSBuZWVkIGRvIGhlcmUgaXMgdXBk YXRlIHRoZSBwZ19jbGFzcyByb3c7IHRoZSBuZXcgb3B0aW9ucyB3aWxsIGJlCiAJICogcHJv cGFnYXRlZCBpbnRvIHJlbGNhY2hlcyBkdXJpbmcgcG9zdC1jb21taXQgY2FjaGUgaW52YWwu CkBAIC0xNDI3MSw2ICsxNDI5Myw0MSBAQCBBVEV4ZWNTZXRSZWxPcHRpb25zKFJlbGF0aW9u IHJlbCwgTGlzdCAqZGVmTGlzdCwgQWx0ZXJUYWJsZVR5cGUgb3BlcmF0aW9uLAogCiAJUmVs ZWFzZVN5c0NhY2hlKHR1cGxlKTsKIAorCS8qIFVwZGF0ZSB0aGUgaW5kZXhlcyBpZiB0aGVy ZSBpcyBhIG5lZWQgdG8gKi8KKwlpZiAoY2F0YWxvZ190YWJsZSB8fCBvcGVyYXRpb24gPT0g QVRfUmVzZXRSZWxPcHRpb25zKQorCXsKKwkJUmVsYXRpb24JcGdfaW5kZXg7CisJCUhlYXBU dXBsZQlwZ19pbmRleF90dXBsZTsKKwkJRm9ybV9wZ19pbmRleCBwZ19pbmRleF9mb3JtOwor CQlMaXN0Q2VsbCAgICppbmRleDsKKworCQlwZ19pbmRleCA9IHRhYmxlX29wZW4oSW5kZXhS ZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCQlmb3JlYWNoKGluZGV4LCBSZWxh dGlvbkdldEluZGV4TGlzdChyZWwpKQorCQl7CisJCQlPaWQJCQl0aGlzSW5kZXhPaWQgPSBs Zmlyc3Rfb2lkKGluZGV4KTsKKworCQkJcGdfaW5kZXhfdHVwbGUgPSBTZWFyY2hTeXNDYWNo ZUNvcHkxKElOREVYUkVMSUQsCisJCQkJCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bSh0aGlz SW5kZXhPaWQpKTsKKwkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwZ19pbmRleF90dXBsZSkp CisJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGluZGV4ICV1Iiwg dGhpc0luZGV4T2lkKTsKKwkJCXBnX2luZGV4X2Zvcm0gPSAoRm9ybV9wZ19pbmRleCkgR0VU U1RSVUNUKHBnX2luZGV4X3R1cGxlKTsKKworCQkJLyogTW9kaWZ5IHRoZSBpbmRleCBvbmx5 IGlmIHVzZXJfY2F0YWxvZ190YWJsZSBkaWZmZXIgKi8KKwkJCWlmIChjYXRhbG9nX3RhYmxl X3ZhbCAhPSBwZ19pbmRleF9mb3JtLT5pbmRpc3VzZXJjYXRhbG9nKQorCQkJeworCQkJCXBn X2luZGV4X2Zvcm0tPmluZGlzdXNlcmNhdGFsb2cgPSBjYXRhbG9nX3RhYmxlX3ZhbDsKKwkJ CQlDYXRhbG9nVHVwbGVVcGRhdGUocGdfaW5kZXgsICZwZ19pbmRleF90dXBsZS0+dF9zZWxm LCBwZ19pbmRleF90dXBsZSk7CisJCQkJSW52b2tlT2JqZWN0UG9zdEFsdGVySG9va0FyZyhJ bmRleFJlbGF0aW9uSWQsIHRoaXNJbmRleE9pZCwgMCwKKwkJCQkJCQkJCQkJIEludmFsaWRP aWQsIHRydWUpOworCQkJfQorCisJCQloZWFwX2ZyZWV0dXBsZShwZ19pbmRleF90dXBsZSk7 CisJCX0KKworCQl0YWJsZV9jbG9zZShwZ19pbmRleCwgUm93RXhjbHVzaXZlTG9jayk7CisJ fQorCiAJLyogcmVwZWF0IHRoZSB3aG9sZSBleGVyY2lzZSBmb3IgdGhlIHRvYXN0IHRhYmxl LCBpZiB0aGVyZSdzIG9uZSAqLwogCWlmIChPaWRJc1ZhbGlkKHJlbC0+cmRfcmVsLT5yZWx0 b2FzdHJlbGlkKSkKIAl7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdHhs b2cuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9naXN0eGxvZy5oCmluZGV4IDliYmU0YzI2MjIu LmM0NmM0NzI4ZTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9naXN0eGxvZy5o CisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9naXN0eGxvZy5oCkBAIC00OSw2ICs0OSw3IEBA IHR5cGVkZWYgc3RydWN0IGdpc3R4bG9nUGFnZVVwZGF0ZQogICovCiB0eXBlZGVmIHN0cnVj dCBnaXN0eGxvZ0RlbGV0ZQogeworCWJvb2wJCW9uQ2F0YWxvZ1RhYmxlOwogCVRyYW5zYWN0 aW9uSWQgbGF0ZXN0UmVtb3ZlZFhpZDsKIAl1aW50MTYJCW50b2RlbGV0ZTsJCS8qIG51bWJl ciBvZiBkZWxldGVkIG9mZnNldHMgKi8KIApAQCAtOTcsNiArOTgsNyBAQCB0eXBlZGVmIHN0 cnVjdCBnaXN0eGxvZ1BhZ2VEZWxldGUKICAqLwogdHlwZWRlZiBzdHJ1Y3QgZ2lzdHhsb2dQ YWdlUmV1c2UKIHsKKwlib29sCQlvbkNhdGFsb2dUYWJsZTsKIAlSZWxGaWxlTG9jYXRvciBs b2NhdG9yOwogCUJsb2NrTnVtYmVyIGJsb2NrOwogCUZ1bGxUcmFuc2FjdGlvbklkIGxhdGVz dFJlbW92ZWRGdWxsWGlkOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2hf eGxvZy5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2hfeGxvZy5oCmluZGV4IDU5MjMwNzA2 YmIuLjlkZGE5N2E4ZDcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoX3hs b2cuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGFzaF94bG9nLmgKQEAgLTI1MCw2ICsy NTAsNyBAQCB0eXBlZGVmIHN0cnVjdCB4bF9oYXNoX2luaXRfYml0bWFwX3BhZ2UKICAqLwog dHlwZWRlZiBzdHJ1Y3QgeGxfaGFzaF92YWN1dW1fb25lX3BhZ2UKIHsKKwlib29sCQlvbkNh dGFsb2dUYWJsZTsKIAlUcmFuc2FjdGlvbklkIGxhdGVzdFJlbW92ZWRYaWQ7CiAJaW50CQkJ bnR1cGxlczsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbV94bG9n LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtX3hsb2cuaAppbmRleCAzNDIyMGQ5M2Nm Li5hMDkxODQ1NjQ3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtX3hs b2cuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtX3hsb2cuaApAQCAtMjQyLDYg KzI0Miw3IEBAIHR5cGVkZWYgc3RydWN0IHhsX2hlYXBfdXBkYXRlCiAgKi8KIHR5cGVkZWYg c3RydWN0IHhsX2hlYXBfcHJ1bmUKIHsKKwlib29sCQlvbkNhdGFsb2dUYWJsZTsKIAlUcmFu c2FjdGlvbklkIGxhdGVzdFJlbW92ZWRYaWQ7CiAJdWludDE2CQlucmVkaXJlY3RlZDsKIAl1 aW50MTYJCW5kZWFkOwpAQCAtMzM4LDYgKzMzOSw3IEBAIHR5cGVkZWYgc3RydWN0IHhsX2hl YXBfZnJlZXplX3R1cGxlCiAgKi8KIHR5cGVkZWYgc3RydWN0IHhsX2hlYXBfZnJlZXplX3Bh Z2UKIHsKKwlib29sCQlvbkNhdGFsb2dUYWJsZTsKIAlUcmFuc2FjdGlvbklkIGN1dG9mZl94 aWQ7CiAJdWludDE2CQludHVwbGVzOwogfSB4bF9oZWFwX2ZyZWV6ZV9wYWdlOwpAQCAtMzUy LDYgKzM1NCw3IEBAIHR5cGVkZWYgc3RydWN0IHhsX2hlYXBfZnJlZXplX3BhZ2UKICAqLwog dHlwZWRlZiBzdHJ1Y3QgeGxfaGVhcF92aXNpYmxlCiB7CisJYm9vbAkJb25DYXRhbG9nVGFi bGU7CiAJVHJhbnNhY3Rpb25JZCBjdXRvZmZfeGlkOwogCXVpbnQ4CQlmbGFnczsKIH0geGxf aGVhcF92aXNpYmxlOwpAQCAtNDE1LDcgKzQxOCw3IEBAIGV4dGVybiBib29sIGhlYXBfcHJl cGFyZV9mcmVlemVfdHVwbGUoSGVhcFR1cGxlSGVhZGVyIHR1cGxlLAogCQkJCQkJCQkJICBN dWx0aVhhY3RJZCAqcmVsbWlubXhpZF9vdXQpOwogZXh0ZXJuIHZvaWQgaGVhcF9leGVjdXRl X2ZyZWV6ZV90dXBsZShIZWFwVHVwbGVIZWFkZXIgdHVwbGUsCiAJCQkJCQkJCQkgIHhsX2hl YXBfZnJlZXplX3R1cGxlICpmcnopOwotZXh0ZXJuIFhMb2dSZWNQdHIgbG9nX2hlYXBfdmlz aWJsZShSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgQnVmZmVyIGhlYXBfYnVmZmVyLAorZXh0 ZXJuIFhMb2dSZWNQdHIgbG9nX2hlYXBfdmlzaWJsZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBo ZWFwX2J1ZmZlciwKIAkJCQkJCQkJICAgQnVmZmVyIHZtX2J1ZmZlciwgVHJhbnNhY3Rpb25J ZCBjdXRvZmZfeGlkLCB1aW50OCB2bWZsYWdzKTsKIAogI2VuZGlmCQkJCQkJCS8qIEhFQVBB TV9YTE9HX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnR4bG9nLmgg Yi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0eGxvZy5oCmluZGV4IGRkNTA0ZDE4ODUuLjJhMDBl MDU1NjAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnR4bG9nLmgKKysrIGIv c3JjL2luY2x1ZGUvYWNjZXNzL25idHhsb2cuaApAQCAtMTg1LDYgKzE4NSw3IEBAIHR5cGVk ZWYgc3RydWN0IHhsX2J0cmVlX2RlZHVwCiAgKi8KIHR5cGVkZWYgc3RydWN0IHhsX2J0cmVl X3JldXNlX3BhZ2UKIHsKKwlib29sCQlvbkNhdGFsb2dUYWJsZTsKIAlSZWxGaWxlTG9jYXRv ciBsb2NhdG9yOwogCUJsb2NrTnVtYmVyIGJsb2NrOwogCUZ1bGxUcmFuc2FjdGlvbklkIGxh dGVzdFJlbW92ZWRGdWxsWGlkOwpAQCAtMjMyLDYgKzIzMyw3IEBAIHR5cGVkZWYgc3RydWN0 IHhsX2J0cmVlX3ZhY3V1bQogCiB0eXBlZGVmIHN0cnVjdCB4bF9idHJlZV9kZWxldGUKIHsK Kwlib29sCQlvbkNhdGFsb2dUYWJsZTsKIAlUcmFuc2FjdGlvbklkIGxhdGVzdFJlbW92ZWRY aWQ7CiAJdWludDE2CQluZGVsZXRlZDsKIAl1aW50MTYJCW51cGRhdGVkOwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3NwZ3hsb2cuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9z cGd4bG9nLmgKaW5kZXggOTMwZmZkZDRmNy4uNDgwODMwMzU4NSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvYWNjZXNzL3NwZ3hsb2cuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3Bn eGxvZy5oCkBAIC0yMzcsNiArMjM3LDcgQEAgdHlwZWRlZiBzdHJ1Y3Qgc3BneGxvZ1ZhY3V1 bVJvb3QKIAogdHlwZWRlZiBzdHJ1Y3Qgc3BneGxvZ1ZhY3V1bVJlZGlyZWN0CiB7CisJYm9v bAkJb25DYXRhbG9nVGFibGU7CiAJdWludDE2CQluVG9QbGFjZWhvbGRlcjsgLyogbnVtYmVy IG9mIHJlZGlyZWN0cyB0byBtYWtlIHBsYWNlaG9sZGVycyAqLwogCU9mZnNldE51bWJlciBm aXJzdFBsYWNlaG9sZGVyOwkvKiBmaXJzdCBwbGFjZWhvbGRlciB0dXBsZSB0byByZW1vdmUg Ki8KIAlUcmFuc2FjdGlvbklkIG5ld2VzdFJlZGlyZWN0WGlkOwkvKiBuZXdlc3QgWElEIG9m IHJlbW92ZWQgcmVkaXJlY3RzICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX2luZGV4LmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2luZGV4LmgKaW5kZXggZjg1 Mzg0NmVlMS4uZGQxNjQzMTM3OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19pbmRleC5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfaW5kZXguaApAQCAtNDMs NiArNDMsOCBAQCBDQVRBTE9HKHBnX2luZGV4LDI2MTAsSW5kZXhSZWxhdGlvbklkKSBCS0lf U0NIRU1BX01BQ1JPCiAJYm9vbAkJaW5kY2hlY2t4bWluOwkvKiBtdXN0IHdlIHdhaXQgZm9y IHhtaW4gdG8gYmUgb2xkPyAqLwogCWJvb2wJCWluZGlzcmVhZHk7CQkvKiBpcyB0aGlzIGlu ZGV4IHJlYWR5IGZvciBpbnNlcnRzPyAqLwogCWJvb2wJCWluZGlzbGl2ZTsJCS8qIGlzIHRo aXMgaW5kZXggYWxpdmUgYXQgYWxsPyAqLworCWJvb2wJCWluZGlzdXNlcmNhdGFsb2c7CS8q IGlzIHRoaXMgaW5kZXggbGlua2VkIHRvIGEgdXNlciBjYXRhbG9nCisJCQkJCQkJCQkgKiBy ZWxhdGlvbj8gKi8KIAlib29sCQlpbmRpc3JlcGxpZGVudDsgLyogaXMgdGhpcyBpbmRleCB0 aGUgaWRlbnRpdHkgZm9yIHJlcGxpY2F0aW9uPyAqLwogCiAJLyogdmFyaWFibGUtbGVuZ3Ro IGZpZWxkcyBzdGFydCBoZXJlLCBidXQgd2UgYWxsb3cgZGlyZWN0IGFjY2VzcyB0byBpbmRr ZXkgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oIGIvc3JjL2luY2x1 ZGUvdXRpbHMvcmVsLmgKaW5kZXggN2RjNDAxY2YwZC4uNmY2MjZjYzEyZCAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcmVs LmgKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIKICNpbmNs dWRlICJ1dGlscy9yZWxjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3JlbHRyaWdnZXIuaCIK KyNpbmNsdWRlICJjYXRhbG9nL2NhdGFsb2cuaCIKIAogCiAvKgpAQCAtMzc4LDYgKzM3OSw5 IEBAIHR5cGVkZWYgc3RydWN0IFN0ZFJkT3B0aW9ucwogICogUmVsYXRpb25Jc1VzZWRBc0Nh dGFsb2dUYWJsZQogICoJCVJldHVybnMgd2hldGhlciB0aGUgcmVsYXRpb24gc2hvdWxkIGJl IHRyZWF0ZWQgYXMgYSBjYXRhbG9nIHRhYmxlCiAgKgkJZnJvbSB0aGUgcG92IG9mIGxvZ2lj YWwgZGVjb2RpbmcuICBOb3RlIG11bHRpcGxlIGV2YWwgb2YgYXJndW1lbnQhCisgKgkJVGhp cyBkZWZpbml0aW9uIHNob3VsZCBub3QgaW52b2tlIGFueXRoaW5nIHRoYXQgcGVyZm9ybXMg Y2F0YWxvZworICoJCWFjY2Vzczsgb3RoZXJ3aXNlIGl0IG1heSBjYXVzZSBpbmZpbml0ZSBy ZWN1cnNpb24uIENoZWNrIHRoZSBjb21tZW50cworICoJCWluIFJlbGF0aW9uSXNBY2Nlc3Np YmxlSW5Mb2dpY2FsRGVjb2RpbmcoKSBmb3IgZGV0YWlscy4KICAqLwogI2RlZmluZSBSZWxh dGlvbklzVXNlZEFzQ2F0YWxvZ1RhYmxlKHJlbGF0aW9uKQlcCiAJKChyZWxhdGlvbiktPnJk X29wdGlvbnMgJiYgXApAQCAtNjc5LDEyICs2ODMsNDEgQEAgUmVsYXRpb25HZXRTbWdyKFJl bGF0aW9uIHJlbCkKICAqIFJlbGF0aW9uSXNBY2Nlc3NpYmxlSW5Mb2dpY2FsRGVjb2RpbmcK ICAqCQlUcnVlIGlmIHdlIG5lZWQgdG8gbG9nIGVub3VnaCBpbmZvcm1hdGlvbiB0byBoYXZl IGFjY2VzcyB2aWEKICAqCQlkZWNvZGluZyBzbmFwc2hvdC4KKyAqCQlUaGlzIGRlZmluaXRp b24gc2hvdWxkIG5vdCBpbnZva2UgYW55dGhpbmcgdGhhdCBwZXJmb3JtcyBjYXRhbG9nCisg KgkJYWNjZXNzLiBPdGhlcndpc2UsIGUuZy4gbG9nZ2luZyBhIFdBTCBlbnRyeSBmb3IgY2F0 YWxvZyByZWxhdGlvbiBtYXkKKyAqCQlpbnZva2UgdGhpcyBmdW5jdGlvbiwgd2hpY2ggd2ls bCBpbiB0dXJuIGRvIGNhdGFsb2cgYWNjZXNzLCB3aGljaCBtYXkKKyAqCQlpbiB0dXJuIGNh dXNlIGFub3RoZXIgc2ltaWxhciBXQUwgZW50cnkgdG8gYmUgbG9nZ2VkLCBsZWFkaW5nIHRv CisgKgkJaW5maW5pdGUgcmVjdXJzaW9uLgogICovCiAjZGVmaW5lIFJlbGF0aW9uSXNBY2Nl c3NpYmxlSW5Mb2dpY2FsRGVjb2RpbmcocmVsYXRpb24pIFwKIAkoWExvZ0xvZ2ljYWxJbmZv QWN0aXZlKCkgJiYgXAogCSBSZWxhdGlvbk5lZWRzV0FMKHJlbGF0aW9uKSAmJiBcCiAJIChJ c0NhdGFsb2dSZWxhdGlvbihyZWxhdGlvbikgfHwgUmVsYXRpb25Jc1VzZWRBc0NhdGFsb2dU YWJsZShyZWxhdGlvbikpKQogCisvKgorICogSW5kZXhJc1VzZXJDYXRhbG9nCisgKgkJVHJ1 ZSBpZiBpbmRleCBpcyBsaW5rZWQgdG8gYSB1c2VyIGNhdGFsb2cgcmVsYXRpb24uCisgKi8K KyNkZWZpbmUgSW5kZXhJc1VzZXJDYXRhbG9nKHJlbGF0aW9uKQkJCQkJCQkJCQkJXAorCShB c3NlcnRNYWNybyhyZWxhdGlvbi0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfSU5ERVgp LAkJCQlcCisJIChyZWxhdGlvbiktPnJkX2luZGV4LT5pbmRpc3VzZXJjYXRhbG9nKQorCisv KgorICogSW5kZXhJc0FjY2Vzc2libGVJbkxvZ2ljYWxEZWNvZGluZworICoJCVRydWUgaWYg d2UgbmVlZCB0byBsb2cgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGhhdmUgYWNjZXNzIHZpYQor ICoJCWRlY29kaW5nIHNuYXBzaG90LgorICoJCVRoaXMgZGVmaW5pdGlvbiBzaG91bGQgbm90 IGludm9rZSBhbnl0aGluZyB0aGF0IHBlcmZvcm1zIGNhdGFsb2cKKyAqCQlhY2Nlc3MuIE90 aGVyd2lzZSwgZS5nLiBsb2dnaW5nIGEgV0FMIGVudHJ5IGZvciBjYXRhbG9nIHJlbGF0aW9u IG1heQorICoJCWludm9rZSB0aGlzIGZ1bmN0aW9uLCB3aGljaCB3aWxsIGluIHR1cm4gZG8g Y2F0YWxvZyBhY2Nlc3MsIHdoaWNoIG1heQorICoJCWluIHR1cm4gY2F1c2UgYW5vdGhlciBz aW1pbGFyIFdBTCBlbnRyeSB0byBiZSBsb2dnZWQsIGxlYWRpbmcgdG8KKyAqCQlpbmZpbml0 ZSByZWN1cnNpb24uCisgKi8KKyNkZWZpbmUgSW5kZXhJc0FjY2Vzc2libGVJbkxvZ2ljYWxE ZWNvZGluZyhyZWxhdGlvbikgXAorCShBc3NlcnRNYWNybyhyZWxhdGlvbi0+cmRfcmVsLT5y ZWxraW5kID09IFJFTEtJTkRfSU5ERVgpLCBcCisJIFhMb2dMb2dpY2FsSW5mb0FjdGl2ZSgp ICYmIFwKKwkgUmVsYXRpb25OZWVkc1dBTChyZWxhdGlvbikgJiYgXAorCSAoSXNDYXRhbG9n UmVsYXRpb24ocmVsYXRpb24pIHx8IEluZGV4SXNVc2VyQ2F0YWxvZyhyZWxhdGlvbikpKQor CiAvKgogICogUmVsYXRpb25Jc0xvZ2ljYWxseUxvZ2dlZAogICoJCVRydWUgaWYgd2UgbmVl ZCB0byBsb2cgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGV4dHJhY3QgdGhlIGRhdGEgZnJvbSB0 aGUKLS0gCjIuMzQuMQoK --------------ScVn3SQtdTbYXEREThz8umaV--