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.94.2) (envelope-from ) id 1sDYm8-00DatB-Tl for pgsql-hackers@arkaria.postgresql.org; Sun, 02 Jun 2024 00:08:43 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1sDYm6-004iAT-Ck for pgsql-hackers@arkaria.postgresql.org; Sun, 02 Jun 2024 00:08:38 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sDYm5-004iAL-NY for pgsql-hackers@lists.postgresql.org; Sun, 02 Jun 2024 00:08:38 +0000 Received: from mail-yw1-x1136.google.com ([2607:f8b0:4864:20::1136]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1sDYm1-00323B-B7 for pgsql-hackers@postgresql.org; Sun, 02 Jun 2024 00:08:36 +0000 Received: by mail-yw1-x1136.google.com with SMTP id 00721157ae682-62a0849f5a8so31626047b3.2 for ; Sat, 01 Jun 2024 17:08:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jeltef.nl; s=google; t=1717286912; x=1717891712; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=wZI7vWCKJozBZRS/vzdHfYBRa4+t+NvLww0uSZH1E6o=; b=NPeXfv/KYRzFiyGmsc0Iq6XNmMKhu7JGMsSSs2th3LuoWC5CuaOPyLZMWv6GKNHxlt o4tlzcVB5KExUCpc1lyCVO9MqTKR9EndFcT+PQBk63Tjulaqax6HbgS3DufN1cgOaVXD 3ksW6sQLGsyywjDEDpI4+ZDxqNCoTLcQUJouHqfghfuApJi3aQekaJTWhf2vpupGA31q PypKKX8XKDHvmmAiUBk0ugbRTa81YsN6A0odcIhkXdvJD5G8Y51lMgCdOklheXXMbaAq kLwWPihv47hlVLBPSgNv0ITtMRpHakva4rRl1aUEBxtPWt6ZzbwVjwa+WKuCP/RkhZm8 Y/Ng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1717286912; x=1717891712; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=wZI7vWCKJozBZRS/vzdHfYBRa4+t+NvLww0uSZH1E6o=; b=NPgyrjkmdNnEdeiBjQJcU9gebyF+/9eF0tQbg5iFKgKucKzPl7MeScTrV7qAbYoMw9 oaLCbLmjMUkFQ+8BPEdwPErlXy/BWU50FXXN4sco88rfhCkypb/VgU8qv7yye5go7juh 89svVbVRLscsNCQTk+B3I4//cyg0GRjbaLXCx4cvQ8P5Aw7Iian5tF/3dJWzHVCEK5Og p9XMgYqE8+McChlCQxJDiRwxwMXS6NLrihPsRWZJeGwrNfs1l9iqrwu+grgLdYaPA8HY iC4nYff3WVdOjwnsvhWcBBE/aX9Vk53PfJpuFQy9YsnYaetP4tpBhM4AlgzqBs++9+C/ 7mRw== X-Gm-Message-State: AOJu0YzxU9SXKP4jsZsOyIOuG9u34vJDF2GWIWe4A1NN0WMsbPHkFkXl KFU6/UBIdW7DeIKhYVfQODqsUjD14n7aU9xmD8QwfzwQw/fEx3wVyfs6m4vzP2xVOJbV+sMKMfR WS00YMNNvkW9jPqpXREv7MSEf7vL2YsE5loirifFR9mCrRFLiSinrtfkW X-Google-Smtp-Source: AGHT+IF5vKmlZ+zw7ZXer8NNO65YWRACceLtqirLl/uywnlPITdz6rdTzTdn6F5bzOlSEY2yjA41e+z3kn17M8i4n0A= X-Received: by 2002:a05:690c:a0b:b0:615:4cd6:128b with SMTP id 00721157ae682-62c79852c22mr55927377b3.40.1717286911497; Sat, 01 Jun 2024 17:08:31 -0700 (PDT) MIME-Version: 1.0 From: Jelte Fennema-Nio Date: Sat, 1 Jun 2024 17:08:19 -0700 Message-ID: Subject: Extension security improvement: Add support for extensions with an owned schema To: PostgreSQL-development Content-Type: multipart/mixed; boundary="0000000000005695e80619dd04b2" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000005695e80619dd04b2 Content-Type: text/plain; charset="UTF-8" Writing the sql migration scripts that are run by CREATE EXTENSION and ALTER EXTENSION UPDATE are security minefields for extension authors. One big reason for this is that search_path is set to the schema of the extension while running these scripts, and thus if a user with lower privileges can create functions or operators in that schema they can do all kinds of search_path confusion attacks if not every function and operator that is used in the script is schema qualified. While doing such schema qualification is possible, it relies on the author to never make a mistake in any of the sql files. And sadly humans have a tendency to make mistakes. This patch adds a new "owned_schema" option to the extension control file that can be set to true to indicate that this extension wants to own the schema in which it is installed. What that means is that the schema should not exist before creating the extension, and will be created during extension creation. This thus gives the extension author an easy way to use a safe search_path, while still allowing all objects to be grouped together in a schema. The implementation also has the pleasant side effect that the schema will be automatically dropped when the extension is dropped. One way in which certain extensions currently hack around the non-existence of this feature is by using the approach that pg_cron uses: Setting the schema to pg_catalog and running "CREATE SCHEMA pg_cron" from within the extension script. While this works, it's obviously a hack, and a big downside of it is that it doesn't allow users to choose the schema name used by the extension. PS. I have never added fields to pg_catalag tables before, so there's a clear TODO in the pg_upgrade code related to that. If anyone has some pointers for me to look at to address that one that would be helpful, if not I'll probably figure it out myself. All other code is in pretty finished state, although I'm considering if AlterExtensionNamespace should maybe be split a bit somehow, because owned_schema skips most of the code in that function. --0000000000005695e80619dd04b2 Content-Type: text/x-patch; charset="US-ASCII"; name="v1-0001-Add-support-for-extensions-with-an-owned-schema.patch" Content-Disposition: attachment; filename="v1-0001-Add-support-for-extensions-with-an-owned-schema.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lwws7z870 RnJvbSBjY2EyZmM1YTgyMDgyMmEyOWQ5YmMzYjgxMGE4MTFhZGIxZDA4MWUxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hLU5pbyA8amVsdGUuZmVubmVtYUBtaWNy b3NvZnQuY29tPgpEYXRlOiBGcmksIDMxIE1heSAyMDI0IDAyOjA0OjMxIC0wNzAwClN1YmplY3Q6 IFtQQVRDSCB2MV0gQWRkIHN1cHBvcnQgZm9yIGV4dGVuc2lvbnMgd2l0aCBhbiBvd25lZCBzY2hl bWEKCldyaXRpbmcgdGhlIHNxbCBtaWdyYXRpb24gc2NyaXB0cyB0aGF0IGFyZSBydW4gYnkgQ1JF QVRFIEVYVEVOU0lPTiBhbmQKQUxURVIgRVhURU5TSU9OIFVQREFURSBhcmUgc2VjdXJpdHkgbWlu ZWZpZWxkcyBmb3IgZXh0ZW5zaW9uIGF1dGhvcnMuCk9uZSBiaWcgcmVhc29uIGZvciB0aGlzIGlz IHRoYXQgc2VhcmNoX3BhdGggaXMgc2V0IHRvIHRoZSBzY2hlbWEgb2YgdGhlCmV4dGVuc2lvbiB3 aGlsZSBydW5uaW5nIHRoZXNlIHNjcmlwdHMsIGFuZCB0aHVzIGlmIGEgdXNlciB3aXRoIGxvd2Vy CnByaXZpbGVnZXMgY2FuIGNyZWF0ZSBmdW5jdGlvbnMgb3Igb3BlcmF0b3JzIGluIHRoYXQgc2No ZW1hIHRoZXkgY2FuIGRvCmFsbCBraW5kcyBvZiBzZWFyY2hfcGF0aCBjb25mdXNpb24gYXR0YWNr cyBpZiBub3QgZXZlcnkgZnVuY3Rpb24gYW5kCm9wZXJhdG9yIHRoYXQgaXMgdXNlZCBpbiB0aGUg c2NyaXB0IGlzIHNjaGVtYSBxdWFsaWZpZWQuIFdoaWxlIGRvaW5nCnN1Y2ggc2NoZW1hIHF1YWxp ZmljYXRpb24gaXMgcG9zc2libGUsIGl0IHJlbGllcyBvbiB0aGUgYXV0aG9yIHRvIG5ldmVyCm1h a2UgYSBtaXN0YWtlIGluIGFueSBvZiB0aGUgc3FsIGZpbGVzLiBBbmQgc2FkbHkgaHVtYW5zIGhh dmUgYSB0ZW5kZW5jeQp0byBtYWtlIG1pc3Rha2VzLgoKVGhpcyBwYXRjaCBhZGRzIGEgbmV3ICJv d25lZF9zY2hlbWEiIG9wdGlvbiB0byB0aGUgZXh0ZW5zaW9uIGNvbnRyb2wKZmlsZSB0aGF0IGNh biBiZSBzZXQgdG8gdHJ1ZSB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgZXh0ZW5zaW9uIHdhbnRzIHRv Cm93biB0aGUgc2NoZW1hIGluIHdoaWNoIGl0IGlzIGluc3RhbGxlZC4gV2hhdCB0aGF0IG1lYW5z IGlzIHRoYXQgdGhlCnNjaGVtYSBzaG91bGQgbm90IGV4aXN0IGJlZm9yZSBjcmVhdGluZyB0aGUg ZXh0ZW5zaW9uLCBhbmQgd2lsbCBiZQpjcmVhdGVkIGR1cmluZyBleHRlbnNpb24gY3JlYXRpb24u IFRoaXMgdGh1cyBnaXZlcyB0aGUgZXh0ZW5zaW9uIGF1dGhvcgphbiBlYXN5IHdheSB0byB1c2Ug YSBzYWZlIHNlYXJjaF9wYXRoLCB3aGlsZSBzdGlsbCBhbGxvd2luZyBhbGwgb2JqZWN0cwp0byBi ZSBncm91cGVkIHRvZ2V0aGVyIGluIGEgc2NoZW1hLiBUaGUgaW1wbGVtZW50YXRpb24gYWxzbyBo YXMgdGhlCnBsZWFzYW50IHNpZGUgZWZmZWN0IHRoYXQgdGhlIHNjaGVtYSB3aWxsIGJlIGF1dG9t YXRpY2FsbHkgZHJvcHBlZCB3aGVuCnRoZSBleHRlbnNpb24gaXMgZHJvcHBlZC4KLS0tCiBkb2Mv c3JjL3NnbWwvZXh0ZW5kLnNnbWwgICAgICAgICAgICAgICAgICAgICAgfCAgMTMgKysKIGRvYy9z cmMvc2dtbC9yZWYvY3JlYXRlX2V4dGVuc2lvbi5zZ21sICAgICAgICB8ICAgMiArLQogc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZXh0ZW5zaW9uLmMgICAgICAgICAgICAgIHwgMTM5ICsrKysrKysrKysr KystLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX3VwZ3JhZGVfc3VwcG9ydC5jICAgIHwg ICAxICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfZXh0ZW5zaW9uLmggICAgICAgICAgICB8ICAg MSArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9leHRlbnNpb24uaCAgICAgICAgICAgICAgfCAgIDQg Ky0KIC4uLi9leHBlY3RlZC90ZXN0X2V4dGVuc2lvbnMub3V0ICAgICAgICAgICAgICB8ICA1MCAr KysrKysrCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZXh0ZW5zaW9ucy9tZXNvbi5idWlsZCAgfCAg IDQgKwogLi4uL3Rlc3RfZXh0ZW5zaW9ucy9zcWwvdGVzdF9leHRlbnNpb25zLnNxbCAgIHwgIDI3 ICsrKysKIC4uLi90ZXN0X2V4dF9vd25lZF9zY2hlbWEtLTEuMC5zcWwgICAgICAgICAgICB8ICAg MiArCiAuLi4vdGVzdF9leHRfb3duZWRfc2NoZW1hLmNvbnRyb2wgICAgICAgICAgICAgfCAgIDUg KwogLi4udGVzdF9leHRfb3duZWRfc2NoZW1hX3JlbG9jYXRhYmxlLS0xLjAuc3FsIHwgICAyICsK IC4uLi90ZXN0X2V4dF9vd25lZF9zY2hlbWFfcmVsb2NhdGFibGUuY29udHJvbCB8ICAgNCArCiAx MyBmaWxlcyBjaGFuZ2VkLCAyMTQgaW5zZXJ0aW9ucygrKSwgNDAgZGVsZXRpb25zKC0pCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2V4dGVuc2lvbnMvdGVzdF9leHRf b3duZWRfc2NoZW1hLS0xLjAuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2V4dGVuc2lvbnMvdGVzdF9leHRfb3duZWRfc2NoZW1hLmNvbnRyb2wKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZXh0ZW5zaW9ucy90ZXN0X2V4dF9vd25l ZF9zY2hlbWFfcmVsb2NhdGFibGUtLTEuMC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVz dC9tb2R1bGVzL3Rlc3RfZXh0ZW5zaW9ucy90ZXN0X2V4dF9vd25lZF9zY2hlbWFfcmVsb2NhdGFi bGUuY29udHJvbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9leHRlbmQuc2dtbCBiL2RvYy9z cmMvc2dtbC9leHRlbmQuc2dtbAppbmRleCAyMTg5NDBlZTVjZS4uMzZkYzY5MmFiZWYgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9leHRlbmQuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvZXh0ZW5k LnNnbWwKQEAgLTgwOSw2ICs4MDksMTkgQEAgUkVUVVJOUyBhbnljb21wYXRpYmxlIEFTIC4uLgog ICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3Rl bnRyeSBpZD0iZXh0ZW5kLWV4dGVuc2lvbnMtZmlsZXMtb3duZWQtc2NoZW1hIj4KKyAgICAgIDx0 ZXJtPjx2YXJuYW1lPm93bmVkX3NjaGVtYTwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+ KTwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgQW4gZXh0 ZW5zaW9uIGlzIDxmaXJzdHRlcm0+b3duZWRfc2NoZW1hPC9maXJzdHRlcm0+IGlmIGl0IHJlcXVp cmVzIGEKKyAgICAgICAgbmV3IGRlZGljYXRlZCBzY2hlbWEgZm9yIGl0cyBvYmplY3RzLiBTdWNo IGEgcmVxdWlyZW1lbnQgY2FuIG1ha2UKKyAgICAgICAgc2VjdXJpdHkgY29uY2VybnMgcmVsYXRl ZCB0byA8bGl0ZXJhbD5zZWFyY2hfcGF0aDwvbGl0ZXJhbD4gaW5qZWN0aW9uCisgICAgICAgIG11 Y2ggZWFzaWVyIHRvIHJlYXNvbiBhYm91dC4gVGhlIGRlZmF1bHQgaXMgPGxpdGVyYWw+ZmFsc2U8 L2xpdGVyYWw+LAorICAgICAgICBpLmUuLCB0aGUgZXh0ZW5zaW9uIGNhbiBiZSBpbnN0YWxsZWQg aW50byBhbiBleGlzdGluZyBzY2hlbWEuCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRl bT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZXh0ZW5k LWV4dGVuc2lvbnMtZmlsZXMtc2NoZW1hIj4KICAgICAgIDx0ZXJtPjx2YXJuYW1lPnNjaGVtYTwv dmFybmFtZT4gKDx0eXBlPnN0cmluZzwvdHlwZT4pPC90ZXJtPgogICAgICAgPGxpc3RpdGVtPgpk aWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfZXh0ZW5zaW9uLnNnbWwgYi9kb2Mv c3JjL3NnbWwvcmVmL2NyZWF0ZV9leHRlbnNpb24uc2dtbAppbmRleCBjYTJiODBkNjY5Yy4uMjQw NTY4ZjMxNjYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2V4dGVuc2lvbi5z Z21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2V4dGVuc2lvbi5zZ21sCkBAIC0xMDIs NyArMTAyLDcgQEAgQ1JFQVRFIEVYVEVOU0lPTiBbIElGIE5PVCBFWElTVFMgXSA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+ZXh0ZW5zaW9uX25hbWUKICAgICAgICA8cGFyYT4KICAgICAg ICAgVGhlIG5hbWUgb2YgdGhlIHNjaGVtYSBpbiB3aGljaCB0byBpbnN0YWxsIHRoZSBleHRlbnNp b24ncwogICAgICAgICBvYmplY3RzLCBnaXZlbiB0aGF0IHRoZSBleHRlbnNpb24gYWxsb3dzIGl0 cyBjb250ZW50cyB0byBiZQotICAgICAgICByZWxvY2F0ZWQuICBUaGUgbmFtZWQgc2NoZW1hIG11 c3QgYWxyZWFkeSBleGlzdC4KKyAgICAgICAgcmVsb2NhdGVkLiAgVGhlIG5hbWVkIHNjaGVtYSBt dXN0IGFscmVhZHkgZXhpc3QgaWYgdGhlIGV4dGVuc2lvbidzIGNvbnRyb2wgZmlsZSBkb2VzIG5v dCBzcGVjaWZ5IDxsaXRlcmFsPm93bmVkX3NjaGVtYTwvb3duZWRfc2NoZW1hPi4KICAgICAgICAg SWYgbm90IHNwZWNpZmllZCwgYW5kIHRoZSBleHRlbnNpb24ncyBjb250cm9sIGZpbGUgZG9lcyBu b3Qgc3BlY2lmeSBhCiAgICAgICAgIHNjaGVtYSBlaXRoZXIsIHRoZSBjdXJyZW50IGRlZmF1bHQg b2JqZWN0IGNyZWF0aW9uIHNjaGVtYSBpcyB1c2VkLgogICAgICAgIDwvcGFyYT4KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4dGVuc2lvbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvZXh0ZW5zaW9uLmMKaW5kZXggMTY0M2M4YzY5YTAuLmE4NTllYzJlMDQzIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHRlbnNpb24uYworKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9leHRlbnNpb24uYwpAQCAtODMsNiArODMsOCBAQCB0eXBlZGVmIHN0cnVjdCBFeHRlbnNp b25Db250cm9sRmlsZQogCQkJCQkJCQkJICogTU9EVUxFX1BBVEhOQU1FICovCiAJY2hhcgkgICAq Y29tbWVudDsJCS8qIGNvbW1lbnQsIGlmIGFueSAqLwogCWNoYXIJICAgKnNjaGVtYTsJCQkvKiB0 YXJnZXQgc2NoZW1hIChhbGxvd2VkIGlmICFyZWxvY2F0YWJsZSkgKi8KKwlib29sCQlvd25lZF9z Y2hlbWE7CS8qIGlmIHRoZSBzY2hlbWEgc2hvdWxkIGJlIG93bmVkIGJ5IHRoZQorCQkJCQkJCQkg KiBleHRlbnNpb24gKi8KIAlib29sCQlyZWxvY2F0YWJsZTsJLyogaXMgQUxURVIgRVhURU5TSU9O IFNFVCBTQ0hFTUEgc3VwcG9ydGVkPyAqLwogCWJvb2wJCXN1cGVydXNlcjsJCS8qIG11c3QgYmUg c3VwZXJ1c2VyIHRvIGluc3RhbGw/ICovCiAJYm9vbAkJdHJ1c3RlZDsJCS8qIGFsbG93IGJlY29t aW5nIHN1cGVydXNlciBvbiB0aGUgZmx5PyAqLwpAQCAtNTYxLDYgKzU2MywxNCBAQCBwYXJzZV9l eHRlbnNpb25fY29udHJvbF9maWxlKEV4dGVuc2lvbkNvbnRyb2xGaWxlICpjb250cm9sLAogCQl7 CiAJCQljb250cm9sLT5zY2hlbWEgPSBwc3RyZHVwKGl0ZW0tPnZhbHVlKTsKIAkJfQorCQllbHNl IGlmIChzdHJjbXAoaXRlbS0+bmFtZSwgIm93bmVkX3NjaGVtYSIpID09IDApCisJCXsKKwkJCWlm ICghcGFyc2VfYm9vbChpdGVtLT52YWx1ZSwgJmNvbnRyb2wtPm93bmVkX3NjaGVtYSkpCisJCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAorCQkJCQkJIGVycm1zZygicGFyYW1ldGVyIFwiJXNcIiByZXF1aXJlcyBhIEJvb2xl YW4gdmFsdWUiLAorCQkJCQkJCQlpdGVtLT5uYW1lKSkpOworCQl9CiAJCWVsc2UgaWYgKHN0cmNt cChpdGVtLT5uYW1lLCAicmVsb2NhdGFibGUiKSA9PSAwKQogCQl7CiAJCQlpZiAoIXBhcnNlX2Jv b2woaXRlbS0+dmFsdWUsICZjb250cm9sLT5yZWxvY2F0YWJsZSkpCkBAIC0xNTQ3LDggKzE1NTcs MTEgQEAgQ3JlYXRlRXh0ZW5zaW9uSW50ZXJuYWwoY2hhciAqZXh0ZW5zaW9uTmFtZSwKIAkgKi8K IAlpZiAoc2NoZW1hTmFtZSkKIAl7Ci0JCS8qIElmIHRoZSB1c2VyIGlzIGdpdmluZyB1cyB0aGUg c2NoZW1hIG5hbWUsIGl0IG11c3QgZXhpc3QgYWxyZWFkeS4gKi8KLQkJc2NoZW1hT2lkID0gZ2V0 X25hbWVzcGFjZV9vaWQoc2NoZW1hTmFtZSwgZmFsc2UpOworCQkvKgorCQkgKiBJZiB0aGUgdXNl ciBpcyBnaXZpbmcgdXMgdGhlIHNjaGVtYSBuYW1lLCBpdCBtdXN0IGV4aXN0IGFscmVhZHkgaWYK KwkJICogdGhlIGV4dGVuc2lvbiBkb2VzIG5vdCB3YW50IHRvIG93biB0aGUgc2NoZW1hCisJCSAq LworCQlzY2hlbWFPaWQgPSBnZXRfbmFtZXNwYWNlX29pZChzY2hlbWFOYW1lLCBjb250cm9sLT5v d25lZF9zY2hlbWEpOwogCX0KIAogCWlmIChjb250cm9sLT5zY2hlbWEgIT0gTlVMTCkKQEAgLTE1 NzAsNyArMTU4MywxMCBAQCBDcmVhdGVFeHRlbnNpb25JbnRlcm5hbChjaGFyICpleHRlbnNpb25O YW1lLAogCiAJCS8qIEFsd2F5cyB1c2UgdGhlIHNjaGVtYSBmcm9tIGNvbnRyb2wgZmlsZSBmb3Ig Y3VycmVudCBleHRlbnNpb24uICovCiAJCXNjaGVtYU5hbWUgPSBjb250cm9sLT5zY2hlbWE7CisJ fQogCisJaWYgKHNjaGVtYU5hbWUpCisJewogCQkvKiBGaW5kIG9yIGNyZWF0ZSB0aGUgc2NoZW1h IGluIGNhc2UgaXQgZG9lcyBub3QgZXhpc3QuICovCiAJCXNjaGVtYU9pZCA9IGdldF9uYW1lc3Bh Y2Vfb2lkKHNjaGVtYU5hbWUsIHRydWUpOwogCkBAIC0xNTkxLDggKzE2MDcsMjIgQEAgQ3JlYXRl RXh0ZW5zaW9uSW50ZXJuYWwoY2hhciAqZXh0ZW5zaW9uTmFtZSwKIAkJCSAqLwogCQkJc2NoZW1h T2lkID0gZ2V0X25hbWVzcGFjZV9vaWQoc2NoZW1hTmFtZSwgZmFsc2UpOwogCQl9CisJCWVsc2Ug aWYgKGNvbnRyb2wtPm93bmVkX3NjaGVtYSkKKwkJeworCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJ KGVycmNvZGUoRVJSQ09ERV9EVVBMSUNBVEVfU0NIRU1BKSwKKwkJCQkJIGVycm1zZygic2NoZW1h IFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIsCisJCQkJCQkJc2NoZW1hTmFtZSkpKTsKKwkJfQorCiAJ fQotCWVsc2UgaWYgKCFPaWRJc1ZhbGlkKHNjaGVtYU9pZCkpCisJZWxzZSBpZiAoY29udHJvbC0+ b3duZWRfc2NoZW1hKQorCXsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RF X1VOREVGSU5FRF9TQ0hFTUEpLAorCQkJCSBlcnJtc2coIm5vIHNjaGVtYSBoYXMgYmVlbiBzZWxl Y3RlZCB0byBjcmVhdGUgaW4iKSkpOworCX0KKwllbHNlCiAJewogCQkvKgogCQkgKiBOZWl0aGVy IHVzZXIgbm9yIGF1dGhvciBvZiB0aGUgZXh0ZW5zaW9uIHNwZWNpZmllZCBzY2hlbWE7IHVzZSB0 aGUKQEAgLTE2NTksNiArMTY4OSw3IEBAIENyZWF0ZUV4dGVuc2lvbkludGVybmFsKGNoYXIgKmV4 dGVuc2lvbk5hbWUsCiAJICovCiAJYWRkcmVzcyA9IEluc2VydEV4dGVuc2lvblR1cGxlKGNvbnRy b2wtPm5hbWUsIGV4dG93bmVyLAogCQkJCQkJCQkgICBzY2hlbWFPaWQsIGNvbnRyb2wtPnJlbG9j YXRhYmxlLAorCQkJCQkJCQkgICBjb250cm9sLT5vd25lZF9zY2hlbWEsCiAJCQkJCQkJCSAgIHZl cnNpb25OYW1lLAogCQkJCQkJCQkgICBQb2ludGVyR2V0RGF0dW0oTlVMTCksCiAJCQkJCQkJCSAg IFBvaW50ZXJHZXREYXR1bShOVUxMKSwKQEAgLTE2NzEsNiArMTcwMiwxNiBAQCBDcmVhdGVFeHRl bnNpb25JbnRlcm5hbChjaGFyICpleHRlbnNpb25OYW1lLAogCWlmIChjb250cm9sLT5jb21tZW50 ICE9IE5VTEwpCiAJCUNyZWF0ZUNvbW1lbnRzKGV4dGVuc2lvbk9pZCwgRXh0ZW5zaW9uUmVsYXRp b25JZCwgMCwgY29udHJvbC0+Y29tbWVudCk7CiAKKwlpZiAoY29udHJvbC0+b3duZWRfc2NoZW1h KQorCXsKKwkJT2JqZWN0QWRkcmVzcyBzY2hlbWFBZGRyZXNzID0geworCQkJLmNsYXNzSWQgPSBO YW1lc3BhY2VSZWxhdGlvbklkLAorCQkJLm9iamVjdElkID0gc2NoZW1hT2lkLAorCQl9OworCisJ CXJlY29yZERlcGVuZGVuY3lPbigmc2NoZW1hQWRkcmVzcywgJmFkZHJlc3MsIERFUEVOREVOQ1lf RVhURU5TSU9OKTsKKwl9CisKIAkvKgogCSAqIEV4ZWN1dGUgdGhlIGluc3RhbGxhdGlvbiBzY3Jp cHQgZmlsZQogCSAqLwpAQCAtMTg2NCw3ICsxOTA1LDggQEAgQ3JlYXRlRXh0ZW5zaW9uKFBhcnNl U3RhdGUgKnBzdGF0ZSwgQ3JlYXRlRXh0ZW5zaW9uU3RtdCAqc3RtdCkKICAqLwogT2JqZWN0QWRk cmVzcwogSW5zZXJ0RXh0ZW5zaW9uVHVwbGUoY29uc3QgY2hhciAqZXh0TmFtZSwgT2lkIGV4dE93 bmVyLAotCQkJCQkgT2lkIHNjaGVtYU9pZCwgYm9vbCByZWxvY2F0YWJsZSwgY29uc3QgY2hhciAq ZXh0VmVyc2lvbiwKKwkJCQkJIE9pZCBzY2hlbWFPaWQsIGJvb2wgcmVsb2NhdGFibGUsIGJvb2wg b3duZWRTY2hlbWEsCisJCQkJCSBjb25zdCBjaGFyICpleHRWZXJzaW9uLAogCQkJCQkgRGF0dW0g ZXh0Q29uZmlnLCBEYXR1bSBleHRDb25kaXRpb24sCiAJCQkJCSBMaXN0ICpyZXF1aXJlZEV4dGVu c2lvbnMpCiB7CkBAIC0xODk0LDYgKzE5MzYsNyBAQCBJbnNlcnRFeHRlbnNpb25UdXBsZShjb25z dCBjaGFyICpleHROYW1lLCBPaWQgZXh0T3duZXIsCiAJdmFsdWVzW0FudW1fcGdfZXh0ZW5zaW9u X2V4dG93bmVyIC0gMV0gPSBPYmplY3RJZEdldERhdHVtKGV4dE93bmVyKTsKIAl2YWx1ZXNbQW51 bV9wZ19leHRlbnNpb25fZXh0bmFtZXNwYWNlIC0gMV0gPSBPYmplY3RJZEdldERhdHVtKHNjaGVt YU9pZCk7CiAJdmFsdWVzW0FudW1fcGdfZXh0ZW5zaW9uX2V4dHJlbG9jYXRhYmxlIC0gMV0gPSBC b29sR2V0RGF0dW0ocmVsb2NhdGFibGUpOworCXZhbHVlc1tBbnVtX3BnX2V4dGVuc2lvbl9leHRv d25lZHNjaGVtYSAtIDFdID0gQm9vbEdldERhdHVtKG93bmVkU2NoZW1hKTsKIAl2YWx1ZXNbQW51 bV9wZ19leHRlbnNpb25fZXh0dmVyc2lvbiAtIDFdID0gQ1N0cmluZ0dldFRleHREYXR1bShleHRW ZXJzaW9uKTsKIAogCWlmIChleHRDb25maWcgPT0gUG9pbnRlckdldERhdHVtKE5VTEwpKQpAQCAt Mjc4OCw4ICsyODMxLDYgQEAgQWx0ZXJFeHRlbnNpb25OYW1lc3BhY2UoY29uc3QgY2hhciAqZXh0 ZW5zaW9uTmFtZSwgY29uc3QgY2hhciAqbmV3c2NoZW1hLCBPaWQgKm8KIAogCWV4dGVuc2lvbk9p ZCA9IGdldF9leHRlbnNpb25fb2lkKGV4dGVuc2lvbk5hbWUsIGZhbHNlKTsKIAotCW5zcE9pZCA9 IExvb2t1cENyZWF0aW9uTmFtZXNwYWNlKG5ld3NjaGVtYSk7Ci0KIAkvKgogCSAqIFBlcm1pc3Np b24gY2hlY2s6IG11c3Qgb3duIGV4dGVuc2lvbi4gIE5vdGUgdGhhdCB3ZSBkb24ndCBib3RoZXIg dG8KIAkgKiBjaGVjayBvd25lcnNoaXAgb2YgdGhlIGluZGl2aWR1YWwgbWVtYmVyIG9iamVjdHMg Li4uCkBAIC0yNzk4LDIyICsyODM5LDYgQEAgQWx0ZXJFeHRlbnNpb25OYW1lc3BhY2UoY29uc3Qg Y2hhciAqZXh0ZW5zaW9uTmFtZSwgY29uc3QgY2hhciAqbmV3c2NoZW1hLCBPaWQgKm8KIAkJYWNs Y2hlY2tfZXJyb3IoQUNMQ0hFQ0tfTk9UX09XTkVSLCBPQkpFQ1RfRVhURU5TSU9OLAogCQkJCQkg ICBleHRlbnNpb25OYW1lKTsKIAotCS8qIFBlcm1pc3Npb24gY2hlY2s6IG11c3QgaGF2ZSBjcmVh dGlvbiByaWdodHMgaW4gdGFyZ2V0IG5hbWVzcGFjZSAqLwotCWFjbHJlc3VsdCA9IG9iamVjdF9h Y2xjaGVjayhOYW1lc3BhY2VSZWxhdGlvbklkLCBuc3BPaWQsIEdldFVzZXJJZCgpLCBBQ0xfQ1JF QVRFKTsKLQlpZiAoYWNscmVzdWx0ICE9IEFDTENIRUNLX09LKQotCQlhY2xjaGVja19lcnJvcihh Y2xyZXN1bHQsIE9CSkVDVF9TQ0hFTUEsIG5ld3NjaGVtYSk7Ci0KLQkvKgotCSAqIElmIHRoZSBz Y2hlbWEgaXMgY3VycmVudGx5IGEgbWVtYmVyIG9mIHRoZSBleHRlbnNpb24sIGRpc2FsbG93IG1v dmluZwotCSAqIHRoZSBleHRlbnNpb24gaW50byB0aGUgc2NoZW1hLiAgVGhhdCB3b3VsZCBjcmVh dGUgYSBkZXBlbmRlbmN5IGxvb3AuCi0JICovCi0JaWYgKGdldEV4dGVuc2lvbk9mT2JqZWN0KE5h bWVzcGFjZVJlbGF0aW9uSWQsIG5zcE9pZCkgPT0gZXh0ZW5zaW9uT2lkKQotCQllcmVwb3J0KEVS Uk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RB VEUpLAotCQkJCSBlcnJtc2coImNhbm5vdCBtb3ZlIGV4dGVuc2lvbiBcIiVzXCIgaW50byBzY2hl bWEgXCIlc1wiICIKLQkJCQkJCSJiZWNhdXNlIHRoZSBleHRlbnNpb24gY29udGFpbnMgdGhlIHNj aGVtYSIsCi0JCQkJCQlleHRlbnNpb25OYW1lLCBuZXdzY2hlbWEpKSk7Ci0KIAkvKiBMb2NhdGUg dGhlIHBnX2V4dGVuc2lvbiB0dXBsZSAqLwogCWV4dFJlbCA9IHRhYmxlX29wZW4oRXh0ZW5zaW9u UmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CiAKQEAgLTI4MzcsMTQgKzI4NjIsMzYgQEAg QWx0ZXJFeHRlbnNpb25OYW1lc3BhY2UoY29uc3QgY2hhciAqZXh0ZW5zaW9uTmFtZSwgY29uc3Qg Y2hhciAqbmV3c2NoZW1hLCBPaWQgKm8KIAogCXN5c3RhYmxlX2VuZHNjYW4oZXh0U2Nhbik7CiAK LQkvKgotCSAqIElmIHRoZSBleHRlbnNpb24gaXMgYWxyZWFkeSBpbiB0aGUgdGFyZ2V0IHNjaGVt YSwganVzdCBzaWxlbnRseSBkbwotCSAqIG5vdGhpbmcuCi0JICovCi0JaWYgKGV4dEZvcm0tPmV4 dG5hbWVzcGFjZSA9PSBuc3BPaWQpCisJaWYgKCFleHRGb3JtLT5leHRvd25lZHNjaGVtYSkKIAl7 Ci0JCXRhYmxlX2Nsb3NlKGV4dFJlbCwgUm93RXhjbHVzaXZlTG9jayk7Ci0JCXJldHVybiBJbnZh bGlkT2JqZWN0QWRkcmVzczsKKwkJbnNwT2lkID0gTG9va3VwQ3JlYXRpb25OYW1lc3BhY2UobmV3 c2NoZW1hKTsKKworCQkvKiBQZXJtaXNzaW9uIGNoZWNrOiBtdXN0IGhhdmUgY3JlYXRpb24gcmln aHRzIGluIHRhcmdldCBuYW1lc3BhY2UgKi8KKwkJYWNscmVzdWx0ID0gb2JqZWN0X2FjbGNoZWNr KE5hbWVzcGFjZVJlbGF0aW9uSWQsIG5zcE9pZCwgR2V0VXNlcklkKCksIEFDTF9DUkVBVEUpOwor CQlpZiAoYWNscmVzdWx0ICE9IEFDTENIRUNLX09LKQorCQkJYWNsY2hlY2tfZXJyb3IoYWNscmVz dWx0LCBPQkpFQ1RfU0NIRU1BLCBuZXdzY2hlbWEpOworCisJCS8qCisJCSAqIElmIHRoZSBzY2hl bWEgaXMgY3VycmVudGx5IGEgbWVtYmVyIG9mIHRoZSBleHRlbnNpb24sIGRpc2FsbG93CisJCSAq IG1vdmluZyB0aGUgZXh0ZW5zaW9uIGludG8gdGhlIHNjaGVtYS4gIFRoYXQgd291bGQgY3JlYXRl IGEKKwkJICogZGVwZW5kZW5jeSBsb29wLgorCQkgKi8KKwkJaWYgKGdldEV4dGVuc2lvbk9mT2Jq ZWN0KE5hbWVzcGFjZVJlbGF0aW9uSWQsIG5zcE9pZCkgPT0gZXh0ZW5zaW9uT2lkKQorCQkJZXJl cG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJ U0lURV9TVEFURSksCisJCQkJCSBlcnJtc2coImNhbm5vdCBtb3ZlIGV4dGVuc2lvbiBcIiVzXCIg aW50byBzY2hlbWEgXCIlc1wiICIKKwkJCQkJCQkiYmVjYXVzZSB0aGUgZXh0ZW5zaW9uIGNvbnRh aW5zIHRoZSBzY2hlbWEiLAorCQkJCQkJCWV4dGVuc2lvbk5hbWUsIG5ld3NjaGVtYSkpKTsKKwor CQkvKgorCQkgKiBJZiB0aGUgZXh0ZW5zaW9uIGlzIGFscmVhZHkgaW4gdGhlIHRhcmdldCBzY2hl bWEsIGp1c3Qgc2lsZW50bHkgZG8KKwkJICogbm90aGluZy4KKwkJICovCisJCWlmIChleHRGb3Jt LT5leHRuYW1lc3BhY2UgPT0gbnNwT2lkKQorCQl7CisJCQl0YWJsZV9jbG9zZShleHRSZWwsIFJv d0V4Y2x1c2l2ZUxvY2spOworCQkJcmV0dXJuIEludmFsaWRPYmplY3RBZGRyZXNzOworCQl9CiAJ fQogCiAJLyogQ2hlY2sgZXh0ZW5zaW9uIGlzIHN1cHBvc2VkIHRvIGJlIHJlbG9jYXRhYmxlICov CkBAIC0yOTE3LDYgKzI5NjQsMTMgQEAgQWx0ZXJFeHRlbnNpb25OYW1lc3BhY2UoY29uc3QgY2hh ciAqZXh0ZW5zaW9uTmFtZSwgY29uc3QgY2hhciAqbmV3c2NoZW1hLCBPaWQgKm8KIAkJCX0KIAkJ fQogCisJCS8qCisJCSAqIFdlIGRvbid0IGFjdHVhbGx5IGhhdmUgdG8gbW92ZSBhbnkgb2JqZWN0 cyBhbnl0aGluZyBmb3Igb3duZWQKKwkJICogc2NoZW1hcywgYmVjYXVzZSB3ZSBzaW1wbHkgcmVu YW1lIHRoZSBzY2hlbWEuCisJCSAqLworCQlpZiAoZXh0Rm9ybS0+ZXh0b3duZWRzY2hlbWEpCisJ CQljb250aW51ZTsKKwogCQkvKgogCQkgKiBPdGhlcndpc2UsIGlnbm9yZSBub24tbWVtYmVyc2hp cCBkZXBlbmRlbmNpZXMuICAoQ3VycmVudGx5LCB0aGUKIAkJICogb25seSBvdGhlciBjYXNlIHdl IGNvdWxkIHNlZSBoZXJlIGlzIGEgbm9ybWFsIGRlcGVuZGVuY3kgZnJvbQpAQCAtMjk2MCwxOCAr MzAxNCwyNyBAQCBBbHRlckV4dGVuc2lvbk5hbWVzcGFjZShjb25zdCBjaGFyICpleHRlbnNpb25O YW1lLCBjb25zdCBjaGFyICpuZXdzY2hlbWEsIE9pZCAqbwogCiAJcmVsYXRpb25fY2xvc2UoZGVw UmVsLCBBY2Nlc3NTaGFyZUxvY2spOwogCi0JLyogTm93IGFkanVzdCBwZ19leHRlbnNpb24uZXh0 bmFtZXNwYWNlICovCi0JZXh0Rm9ybS0+ZXh0bmFtZXNwYWNlID0gbnNwT2lkOworCWlmIChleHRG b3JtLT5leHRvd25lZHNjaGVtYSkKKwl7CisJCVJlbmFtZVNjaGVtYShnZXRfbmFtZXNwYWNlX25h bWUob2xkTnNwT2lkKSwgbmV3c2NoZW1hKTsKKwkJdGFibGVfY2xvc2UoZXh0UmVsLCBSb3dFeGNs dXNpdmVMb2NrKTsKKwl9CisJZWxzZQorCXsKIAotCUNhdGFsb2dUdXBsZVVwZGF0ZShleHRSZWws ICZleHRUdXAtPnRfc2VsZiwgZXh0VHVwKTsKKwkJLyogTm93IGFkanVzdCBwZ19leHRlbnNpb24u ZXh0bmFtZXNwYWNlICovCisJCWV4dEZvcm0tPmV4dG5hbWVzcGFjZSA9IG5zcE9pZDsKIAotCXRh YmxlX2Nsb3NlKGV4dFJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJCUNhdGFsb2dUdXBsZVVwZGF0 ZShleHRSZWwsICZleHRUdXAtPnRfc2VsZiwgZXh0VHVwKTsKIAotCS8qIHVwZGF0ZSBkZXBlbmRl bmN5IHRvIHBvaW50IHRvIHRoZSBuZXcgc2NoZW1hICovCi0JaWYgKGNoYW5nZURlcGVuZGVuY3lG b3IoRXh0ZW5zaW9uUmVsYXRpb25JZCwgZXh0ZW5zaW9uT2lkLAotCQkJCQkJCU5hbWVzcGFjZVJl bGF0aW9uSWQsIG9sZE5zcE9pZCwgbnNwT2lkKSAhPSAxKQotCQllbG9nKEVSUk9SLCAiY291bGQg bm90IGNoYW5nZSBzY2hlbWEgZGVwZW5kZW5jeSBmb3IgZXh0ZW5zaW9uICVzIiwKLQkJCSBOYW1l U3RyKGV4dEZvcm0tPmV4dG5hbWUpKTsKKwkJdGFibGVfY2xvc2UoZXh0UmVsLCBSb3dFeGNsdXNp dmVMb2NrKTsKKworCQkvKiB1cGRhdGUgZGVwZW5kZW5jeSB0byBwb2ludCB0byB0aGUgbmV3IHNj aGVtYSAqLworCQlpZiAoY2hhbmdlRGVwZW5kZW5jeUZvcihFeHRlbnNpb25SZWxhdGlvbklkLCBl eHRlbnNpb25PaWQsCisJCQkJCQkJCU5hbWVzcGFjZVJlbGF0aW9uSWQsIG9sZE5zcE9pZCwgbnNw T2lkKSAhPSAxKQorCQkJZWxvZyhFUlJPUiwgImNvdWxkIG5vdCBjaGFuZ2Ugc2NoZW1hIGRlcGVu ZGVuY3kgZm9yIGV4dGVuc2lvbiAlcyIsCisJCQkJIE5hbWVTdHIoZXh0Rm9ybS0+ZXh0bmFtZSkp OworCX0KIAogCUludm9rZU9iamVjdFBvc3RBbHRlckhvb2soRXh0ZW5zaW9uUmVsYXRpb25JZCwg ZXh0ZW5zaW9uT2lkLCAwKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bn X3VwZ3JhZGVfc3VwcG9ydC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX3VwZ3JhZGVfc3Vw cG9ydC5jCmluZGV4IGM1NGIwOGZlMTgwLi5jY2Q5MWQ0YzgxOCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3BnX3VwZ3JhZGVfc3VwcG9ydC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9wZ191cGdyYWRlX3N1cHBvcnQuYwpAQCAtMjM4LDYgKzIzOCw3IEBAIGJpbmFyeV91 cGdyYWRlX2NyZWF0ZV9lbXB0eV9leHRlbnNpb24oUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJCSBH ZXRVc2VySWQoKSwKIAkJCQkJCSBnZXRfbmFtZXNwYWNlX29pZCh0ZXh0X3RvX2NzdHJpbmcoc2No ZW1hTmFtZSksIGZhbHNlKSwKIAkJCQkJCSByZWxvY2F0YWJsZSwKKwkJCQkJCSBmYWxzZSwgLyog VE9ETzogTWF5YmUgY2hhbmdlIHRoaXM/Pz8gKi8KIAkJCQkJCSB0ZXh0X3RvX2NzdHJpbmcoZXh0 VmVyc2lvbiksCiAJCQkJCQkgZXh0Q29uZmlnLAogCQkJCQkJIGV4dENvbmRpdGlvbiwKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfZXh0ZW5zaW9uLmggYi9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX2V4dGVuc2lvbi5oCmluZGV4IGNkZmFjYzA5MzAzLi5hYjIwZmZmODhlYSAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19leHRlbnNpb24uaAorKysgYi9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX2V4dGVuc2lvbi5oCkBAIC0zNCw2ICszNCw3IEBAIENBVEFMT0cocGdf ZXh0ZW5zaW9uLDMwNzksRXh0ZW5zaW9uUmVsYXRpb25JZCkKIAlPaWQJCQlleHRuYW1lc3BhY2Ug QktJX0xPT0tVUChwZ19uYW1lc3BhY2UpOwkvKiBuYW1lc3BhY2Ugb2YKIAkJCQkJCQkJCQkJCQkJ ICogY29udGFpbmVkIG9iamVjdHMgKi8KIAlib29sCQlleHRyZWxvY2F0YWJsZTsgLyogaWYgdHJ1 ZSwgYWxsb3cgQUxURVIgRVhURU5TSU9OIFNFVCBTQ0hFTUEgKi8KKwlib29sCQlleHRvd25lZHNj aGVtYTsgLyogaWYgdHJ1ZSwgc2NoZW1hIGlzIG93bmVkIGJ5IGV4dGVuc2lvbiAqLwogCiAjaWZk ZWYgQ0FUQUxPR19WQVJMRU4JCQkvKiB2YXJpYWJsZS1sZW5ndGggZmllbGRzIHN0YXJ0IGhlcmUg Ki8KIAkvKiBleHR2ZXJzaW9uIG1heSBuZXZlciBiZSBudWxsLCBidXQgdGhlIG90aGVycyBjYW4g YmUuICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHRlbnNpb24uaCBiL3Ny Yy9pbmNsdWRlL2NvbW1hbmRzL2V4dGVuc2lvbi5oCmluZGV4IGM2ZjNmODY3ZWI3Li44ZTdmYTU3 NDAzMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXh0ZW5zaW9uLmgKKysrIGIv c3JjL2luY2x1ZGUvY29tbWFuZHMvZXh0ZW5zaW9uLmgKQEAgLTM2LDcgKzM2LDkgQEAgZXh0ZXJu IE9iamVjdEFkZHJlc3MgQ3JlYXRlRXh0ZW5zaW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRl RXh0ZW5zaW9uU3RtdCAqc3QKIGV4dGVybiB2b2lkIFJlbW92ZUV4dGVuc2lvbkJ5SWQoT2lkIGV4 dElkKTsKIAogZXh0ZXJuIE9iamVjdEFkZHJlc3MgSW5zZXJ0RXh0ZW5zaW9uVHVwbGUoY29uc3Qg Y2hhciAqZXh0TmFtZSwgT2lkIGV4dE93bmVyLAotCQkJCQkJCQkJCSAgT2lkIHNjaGVtYU9pZCwg Ym9vbCByZWxvY2F0YWJsZSwgY29uc3QgY2hhciAqZXh0VmVyc2lvbiwKKwkJCQkJCQkJCQkgIE9p ZCBzY2hlbWFPaWQsIGJvb2wgcmVsb2NhdGFibGUsCisJCQkJCQkJCQkJICBib29sIG93bmVkU2No ZW1hLAorCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqZXh0VmVyc2lvbiwKIAkJCQkJCQkJCQkgIERh dHVtIGV4dENvbmZpZywgRGF0dW0gZXh0Q29uZGl0aW9uLAogCQkJCQkJCQkJCSAgTGlzdCAqcmVx dWlyZWRFeHRlbnNpb25zKTsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2V4 dGVuc2lvbnMvZXhwZWN0ZWQvdGVzdF9leHRlbnNpb25zLm91dCBiL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9leHRlbnNpb25zL2V4cGVjdGVkL3Rlc3RfZXh0ZW5zaW9ucy5vdXQKaW5kZXggZjM1N2Nj MjFhYWEuLmMwYTJiN2IzMTVlIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZXh0 ZW5zaW9ucy9leHBlY3RlZC90ZXN0X2V4dGVuc2lvbnMub3V0CisrKyBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9leHRlbnNpb25zL2V4cGVjdGVkL3Rlc3RfZXh0ZW5zaW9ucy5vdXQKQEAgLTYyNiwz ICs2MjYsNTMgQEAgU0VMRUNUIHRlc3Rfc19kZXAuZGVwX3JlcTIoKTsKIAogRFJPUCBFWFRFTlNJ T04gdGVzdF9leHRfcmVxX3NjaGVtYTEgQ0FTQ0FERTsKIE5PVElDRTogIGRyb3AgY2FzY2FkZXMg dG8gZXh0ZW5zaW9uIHRlc3RfZXh0X3JlcV9zY2hlbWEyCistLQorLS0gVGVzdCBvd25lZCBzY2hl bWEgZXh0ZW5zaW9ucworLS0KK0NSRUFURSBTQ0hFTUEgdGVzdF9leHRfb3duZWRfc2NoZW1hOwor LS0gRmFpbHMgZm9yIGFuIGFscmVhZHkgZXhpc3Rpbmcgc2NoZW1hIHRvIGJlIHByb3ZpZGVkCitD UkVBVEUgRVhURU5TSU9OIHRlc3RfZXh0X293bmVkX3NjaGVtYSBTQ0hFTUEgdGVzdF9leHRfb3du ZWRfc2NoZW1hOworRVJST1I6ICBzY2hlbWEgInRlc3RfZXh0X293bmVkX3NjaGVtYSIgYWxyZWFk eSBleGlzdHMKKy0tIEZhaWxzIGJlY2F1c2UgYSBkaWZmZXJlbnQgc2NoZW1hIGlzIHNldCBpbiBj b250cm9sIGZpbGUKK0NSRUFURSBFWFRFTlNJT04gdGVzdF9leHRfb3duZWRfc2NoZW1hIFNDSEVN QSB0ZXN0X3NjaGVtYTsKK0VSUk9SOiAgZXh0ZW5zaW9uICJ0ZXN0X2V4dF9vd25lZF9zY2hlbWEi IG11c3QgYmUgaW5zdGFsbGVkIGluIHNjaGVtYSAidGVzdF9leHRfb3duZWRfc2NoZW1hIgorRFJP UCBTQ0hFTUEgdGVzdF9leHRfb3duZWRfc2NoZW1hOworQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2V4 dF9vd25lZF9zY2hlbWE7CitcZHgrIHRlc3RfZXh0X293bmVkX3NjaGVtYTsKK09iamVjdHMgaW4g ZXh0ZW5zaW9uICJ0ZXN0X2V4dF9vd25lZF9zY2hlbWEiCisgICAgICAgICAgIE9iamVjdCBkZXNj cmlwdGlvbiAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBmdW5jdGlvbiB0ZXN0X2V4dF9vd25lZF9zY2hlbWEub3duZWQxKCkKKyBzY2hlbWEg dGVzdF9leHRfb3duZWRfc2NoZW1hCisoMiByb3dzKQorCitEUk9QIEVYVEVOU0lPTiB0ZXN0X2V4 dF9vd25lZF9zY2hlbWE7CitDUkVBVEUgU0NIRU1BIGFscmVhZHlfZXhpc3Rpbmc7CistLSBGYWls cyBmb3IgYW4gYWxyZWFkeSBleGlzdGluZyBzY2hlbWEgdG8gYmUgcHJvdmlkZWQKK0NSRUFURSBF WFRFTlNJT04gdGVzdF9leHRfb3duZWRfc2NoZW1hX3JlbG9jYXRhYmxlIFNDSEVNQSBhbHJlYWR5 X2V4aXN0aW5nOworRVJST1I6ICBzY2hlbWEgImFscmVhZHlfZXhpc3RpbmciIGFscmVhZHkgZXhp c3RzCistLSBGYWlscyBiZWNhdXNlIG5vIHNjaGVtYSBpcyBzZXQgaW4gY29udHJvbCBmaWxlCitD UkVBVEUgRVhURU5TSU9OIHRlc3RfZXh0X293bmVkX3NjaGVtYV9yZWxvY2F0YWJsZTsKK0VSUk9S OiAgbm8gc2NoZW1hIGhhcyBiZWVuIHNlbGVjdGVkIHRvIGNyZWF0ZSBpbgorQ1JFQVRFIEVYVEVO U0lPTiB0ZXN0X2V4dF9vd25lZF9zY2hlbWFfcmVsb2NhdGFibGUgU0NIRU1BIHRlc3Rfc2NoZW1h OworXGR4KyB0ZXN0X2V4dF9vd25lZF9zY2hlbWFfcmVsb2NhdGFibGUKK09iamVjdHMgaW4gZXh0 ZW5zaW9uICJ0ZXN0X2V4dF9vd25lZF9zY2hlbWFfcmVsb2NhdGFibGUiCisgICAgICBPYmplY3Qg ZGVzY3JpcHRpb24gICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZnVu Y3Rpb24gdGVzdF9zY2hlbWEub3duZWQyKCkKKyBzY2hlbWEgdGVzdF9zY2hlbWEKKygyIHJvd3Mp CisKKy0tIEZhaWxzIGJlY2F1c2Ugc2NoZW1hIGFscmVhZHkgZXhpc3RzCitBTFRFUiBFWFRFTlNJ T04gdGVzdF9leHRfb3duZWRfc2NoZW1hX3JlbG9jYXRhYmxlIFNFVCBTQ0hFTUEgYWxyZWFkeV9l eGlzdGluZzsKK0VSUk9SOiAgc2NoZW1hICJhbHJlYWR5X2V4aXN0aW5nIiBhbHJlYWR5IGV4aXN0 cworQUxURVIgRVhURU5TSU9OIHRlc3RfZXh0X293bmVkX3NjaGVtYV9yZWxvY2F0YWJsZSBTRVQg U0NIRU1BIHNvbWVfb3RoZXJfbmFtZTsKK1xkeCsgdGVzdF9leHRfb3duZWRfc2NoZW1hX3JlbG9j YXRhYmxlCitPYmplY3RzIGluIGV4dGVuc2lvbiAidGVzdF9leHRfb3duZWRfc2NoZW1hX3JlbG9j YXRhYmxlIgorICAgICAgICBPYmplY3QgZGVzY3JpcHRpb24gICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZnVuY3Rpb24gc29tZV9vdGhlcl9uYW1lLm93bmVk MigpCisgc2NoZW1hIHNvbWVfb3RoZXJfbmFtZQorKDIgcm93cykKKworRFJPUCBFWFRFTlNJT04g dGVzdF9leHRfb3duZWRfc2NoZW1hX3JlbG9jYXRhYmxlOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2V4dGVuc2lvbnMvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfZXh0ZW5zaW9ucy9tZXNvbi5idWlsZAppbmRleCBjNWYzNDI0ZGE1MS4uNTJlODg0MTQ4MGIg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9leHRlbnNpb25zL21lc29uLmJ1aWxk CisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9leHRlbnNpb25zL21lc29uLmJ1aWxkCkBAIC00 Miw2ICs0MiwxMCBAQCB0ZXN0X2luc3RhbGxfZGF0YSArPSBmaWxlcygKICAgJ3Rlc3RfZXh0X3Jl cV9zY2hlbWEzLmNvbnRyb2wnLAogICAndGVzdF9leHRfc2V0X3NjaGVtYS0tMS4wLnNxbCcsCiAg ICd0ZXN0X2V4dF9zZXRfc2NoZW1hLmNvbnRyb2wnLAorICAndGVzdF9leHRfb3duZWRfc2NoZW1h LS0xLjAuc3FsJywKKyAgJ3Rlc3RfZXh0X293bmVkX3NjaGVtYS5jb250cm9sJywKKyAgJ3Rlc3Rf ZXh0X293bmVkX3NjaGVtYV9yZWxvY2F0YWJsZS0tMS4wLnNxbCcsCisgICd0ZXN0X2V4dF9vd25l ZF9zY2hlbWFfcmVsb2NhdGFibGUuY29udHJvbCcsCiApCiAKIHRlc3RzICs9IHsKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9leHRlbnNpb25zL3NxbC90ZXN0X2V4dGVuc2lvbnMu c3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2V4dGVuc2lvbnMvc3FsL3Rlc3RfZXh0ZW5zaW9u cy5zcWwKaW5kZXggNjQyYzgyZmY1ZDMuLjEzNjk2N2RiMzk1IDEwMDY0NAotLS0gYS9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfZXh0ZW5zaW9ucy9zcWwvdGVzdF9leHRlbnNpb25zLnNxbAorKysgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfZXh0ZW5zaW9ucy9zcWwvdGVzdF9leHRlbnNpb25zLnNxbApA QCAtMjk5LDMgKzI5OSwzMCBAQCBBTFRFUiBFWFRFTlNJT04gdGVzdF9leHRfcmVxX3NjaGVtYTEg U0VUIFNDSEVNQSB0ZXN0X3NfZGVwMjsgIC0tIG5vdyBvawogU0VMRUNUIHRlc3Rfc19kZXAyLmRl cF9yZXExKCk7CiBTRUxFQ1QgdGVzdF9zX2RlcC5kZXBfcmVxMigpOwogRFJPUCBFWFRFTlNJT04g dGVzdF9leHRfcmVxX3NjaGVtYTEgQ0FTQ0FERTsKKworLS0KKy0tIFRlc3Qgb3duZWQgc2NoZW1h IGV4dGVuc2lvbnMKKy0tCisKK0NSRUFURSBTQ0hFTUEgdGVzdF9leHRfb3duZWRfc2NoZW1hOwor LS0gRmFpbHMgZm9yIGFuIGFscmVhZHkgZXhpc3Rpbmcgc2NoZW1hIHRvIGJlIHByb3ZpZGVkCitD UkVBVEUgRVhURU5TSU9OIHRlc3RfZXh0X293bmVkX3NjaGVtYSBTQ0hFTUEgdGVzdF9leHRfb3du ZWRfc2NoZW1hOworLS0gRmFpbHMgYmVjYXVzZSBhIGRpZmZlcmVudCBzY2hlbWEgaXMgc2V0IGlu IGNvbnRyb2wgZmlsZQorQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2V4dF9vd25lZF9zY2hlbWEgU0NI RU1BIHRlc3Rfc2NoZW1hOworRFJPUCBTQ0hFTUEgdGVzdF9leHRfb3duZWRfc2NoZW1hOworQ1JF QVRFIEVYVEVOU0lPTiB0ZXN0X2V4dF9vd25lZF9zY2hlbWE7CitcZHgrIHRlc3RfZXh0X293bmVk X3NjaGVtYTsKK0RST1AgRVhURU5TSU9OIHRlc3RfZXh0X293bmVkX3NjaGVtYTsKKworQ1JFQVRF IFNDSEVNQSBhbHJlYWR5X2V4aXN0aW5nOworLS0gRmFpbHMgZm9yIGFuIGFscmVhZHkgZXhpc3Rp bmcgc2NoZW1hIHRvIGJlIHByb3ZpZGVkCitDUkVBVEUgRVhURU5TSU9OIHRlc3RfZXh0X293bmVk X3NjaGVtYV9yZWxvY2F0YWJsZSBTQ0hFTUEgYWxyZWFkeV9leGlzdGluZzsKKy0tIEZhaWxzIGJl Y2F1c2Ugbm8gc2NoZW1hIGlzIHNldCBpbiBjb250cm9sIGZpbGUKK0NSRUFURSBFWFRFTlNJT04g dGVzdF9leHRfb3duZWRfc2NoZW1hX3JlbG9jYXRhYmxlOworQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0 X2V4dF9vd25lZF9zY2hlbWFfcmVsb2NhdGFibGUgU0NIRU1BIHRlc3Rfc2NoZW1hOworXGR4KyB0 ZXN0X2V4dF9vd25lZF9zY2hlbWFfcmVsb2NhdGFibGUKKy0tIEZhaWxzIGJlY2F1c2Ugc2NoZW1h IGFscmVhZHkgZXhpc3RzCitBTFRFUiBFWFRFTlNJT04gdGVzdF9leHRfb3duZWRfc2NoZW1hX3Jl bG9jYXRhYmxlIFNFVCBTQ0hFTUEgYWxyZWFkeV9leGlzdGluZzsKK0FMVEVSIEVYVEVOU0lPTiB0 ZXN0X2V4dF9vd25lZF9zY2hlbWFfcmVsb2NhdGFibGUgU0VUIFNDSEVNQSBzb21lX290aGVyX25h bWU7CitcZHgrIHRlc3RfZXh0X293bmVkX3NjaGVtYV9yZWxvY2F0YWJsZQorRFJPUCBFWFRFTlNJ T04gdGVzdF9leHRfb3duZWRfc2NoZW1hX3JlbG9jYXRhYmxlOwpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2V4dGVuc2lvbnMvdGVzdF9leHRfb3duZWRfc2NoZW1hLS0xLjAuc3Fs IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2V4dGVuc2lvbnMvdGVzdF9leHRfb3duZWRfc2NoZW1h LS0xLjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42NzJhYjhl NjA3ZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9leHRlbnNpb25z L3Rlc3RfZXh0X293bmVkX3NjaGVtYS0tMS4wLnNxbApAQCAtMCwwICsxLDIgQEAKK0NSRUFURSBG VU5DVElPTiBvd25lZDEoKSBSRVRVUk5TIHRleHQKK0xBTkdVQUdFIFNRTCBBUyAkJCBTRUxFQ1Qg MSAkJDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9leHRlbnNpb25zL3Rlc3Rf ZXh0X293bmVkX3NjaGVtYS5jb250cm9sIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2V4dGVuc2lv bnMvdGVzdF9leHRfb3duZWRfc2NoZW1hLmNvbnRyb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjUzMWMzOGRhZWZkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2V4dGVuc2lvbnMvdGVzdF9leHRfb3duZWRfc2NoZW1hLmNvbnRyb2wKQEAg LTAsMCArMSw1IEBACitjb21tZW50ID0gJ1Rlc3QgZXh0ZW5zaW9uIHdpdGggYW4gb3duZWQgc2No ZW1hJworZGVmYXVsdF92ZXJzaW9uID0gJzEuMCcKK3JlbG9jYXRhYmxlID0gZmFsc2UKK3NjaGVt YSA9IHRlc3RfZXh0X293bmVkX3NjaGVtYQorb3duZWRfc2NoZW1hID0gdHJ1ZQpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2V4dGVuc2lvbnMvdGVzdF9leHRfb3duZWRfc2NoZW1h X3JlbG9jYXRhYmxlLS0xLjAuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2V4dGVuc2lvbnMv dGVzdF9leHRfb3duZWRfc2NoZW1hX3JlbG9jYXRhYmxlLS0xLjAuc3FsCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iZmNjYWY0YWY4MgotLS0gL2Rldi9udWxsCisrKyBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9leHRlbnNpb25zL3Rlc3RfZXh0X293bmVkX3NjaGVtYV9y ZWxvY2F0YWJsZS0tMS4wLnNxbApAQCAtMCwwICsxLDIgQEAKK0NSRUFURSBGVU5DVElPTiBvd25l ZDIoKSBSRVRVUk5TIHRleHQKK0xBTkdVQUdFIFNRTCBBUyAkJCBTRUxFQ1QgMSAkJDsKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9leHRlbnNpb25zL3Rlc3RfZXh0X293bmVkX3Nj aGVtYV9yZWxvY2F0YWJsZS5jb250cm9sIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2V4dGVuc2lv bnMvdGVzdF9leHRfb3duZWRfc2NoZW1hX3JlbG9jYXRhYmxlLmNvbnRyb2wKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjNjZGExZTEyMzQxCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2V4dGVuc2lvbnMvdGVzdF9leHRfb3duZWRfc2NoZW1h X3JlbG9jYXRhYmxlLmNvbnRyb2wKQEAgLTAsMCArMSw0IEBACitjb21tZW50ID0gJ1Rlc3QgZXh0 ZW5zaW9uIHdpdGggYW4gb3duZWQgc2NoZW1hJworZGVmYXVsdF92ZXJzaW9uID0gJzEuMCcKK3Jl bG9jYXRhYmxlID0gdHJ1ZQorb3duZWRfc2NoZW1hID0gdHJ1ZQoKYmFzZS1jb21taXQ6IDhmZWEx YmQ1NDExYjc5MzY5N2E0YzkwODdjNDAzODg3ZTA1MGM0YWMKLS0gCjIuMzQuMQoK --0000000000005695e80619dd04b2--