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 1tbLUF-009ydI-Ns for pgsql-hackers@arkaria.postgresql.org; Fri, 24 Jan 2025 15:20:48 +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 1tbLUD-00F6ke-3Z for pgsql-hackers@arkaria.postgresql.org; Fri, 24 Jan 2025 15:20:45 +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.94.2) (envelope-from ) id 1tbLUC-00F6kW-Ni for pgsql-hackers@lists.postgresql.org; Fri, 24 Jan 2025 15:20:44 +0000 Received: from mail-vs1-xe34.google.com ([2607:f8b0:4864:20::e34]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tbLU9-001Hw8-2T for pgsql-hackers@postgresql.org; Fri, 24 Jan 2025 15:20:44 +0000 Received: by mail-vs1-xe34.google.com with SMTP id ada2fe7eead31-4afe99e5229so576516137.3 for ; Fri, 24 Jan 2025 07:20:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1737732040; x=1738336840; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=+JjKbueAMAlgWSVO683QO3naXRdD+/cIeyBQs/Pq6+k=; b=UItIxQ+8e3gI6J+cixEQ1wpUQV456FcpIyzFvnxWP6ZOCpeWhaGFJNMYhgwfWAstbK Ge/HH4yjh1VvEz8qAkkHwG+gtLoosqkNJl1loKmObEKLrVDHxJ+hoByaGLhoSXGCwS1u zJ9DdB+s3z1DclkncJYbwIQgG/jDcFnRDqBdWgz640Ok1ECK7vRSEz7Ld34MEsdg7kIl vJZb7/5tzror0SJozYOSOuduRKapBuc8MxHsvWAPSeyUH1i5hc7CSfkQVu26xtL01m1M DgX6+jHT2EZsv9qpbX+Rrc2eSUetZFRglx5TIJtI4kfEFfIbhrSkUGxXoh8VGlkAYIl7 y2HQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737732040; x=1738336840; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=+JjKbueAMAlgWSVO683QO3naXRdD+/cIeyBQs/Pq6+k=; b=hvkRJpVH6lAXdTSizd9jnuTq9wQKG/FFFUZ+QpGw98eAFrkK7u5T30gSUSpI1qfYPK iSyK17AuiaWv//hMmpek/a1hRpEf4KWsbVVORCcQLPE/9VLdVwpck/k+937k5z2eEtKW h2cmL2iEnubtviEz8IRNNh8BHRtTCg1j+q1s+i/wqHYwb9kntEwTm8oYnkqAPhphz+QV cBJ/wxsukr2GGrGuoTafK+74BysTKz0jxwB1dWcNvv5C/fPn8jmFJh5+xwHCw6AFseIC 81EmSlqDg+r1ZkD0YrNhdGP2KewBCWCDxzJAD2a19NHftqOVpdPZSePQKJrYLRdqXZ6c tZZQ== X-Forwarded-Encrypted: i=1; AJvYcCWoKjDhCnnDAySwCS2y/X5Zk3XE9PhtmY2v6HqAKvEKY/SiXhzghtGg9kNHPT1wyZJFnsKNXCxNOEHHly8r@postgresql.org X-Gm-Message-State: AOJu0YxYKgiZMIebnn2OCOTgDpv8IMlwINH51OCov6k9D6EFWBoi2//X EzKVxwfbMJp24hoINYzRc8kR5AHOLKhr2Y0BtHwBiAglgUhe7nWo6UsUIW2Mfi6Yarol04Q+L6t Q8lnGBtit4o/E20V+Fr8pajIUyLM= X-Gm-Gg: ASbGnct14CjhPoOqcHceqbwseyEJz57DlPRNOhzeAmSOHknupAAeJ0drwAh82JM4gA3 m1mFVB04/iMSpr5+efgnj9ydp6KB6NEQY91j9U2DHDuagqb54q5/d/kU/LpPdi1e33Fk7CzaZ5y qwXjsW/x/nTkYUJda9nJBT/Mzd2oU= X-Google-Smtp-Source: AGHT+IFraBtKSaVZBmTvI7tgtTvB9II26t6ZKhDkymj/NJMPjeGlH5Pd7IDyCRodUqI6yQ4SicUpvYyuE8ml0Rpg9HE= X-Received: by 2002:a05:6102:3588:b0:4af:fca2:1b7 with SMTP id ada2fe7eead31-4b690c1b836mr23206530137.14.1737732039966; Fri, 24 Jan 2025 07:20:39 -0800 (PST) MIME-Version: 1.0 References: <202501110844.5ztsym4vbflm@alvherre.pgsql> In-Reply-To: From: jian he Date: Fri, 24 Jan 2025 23:20:03 +0800 X-Gm-Features: AWEUYZlCo8e9EdumBlYS8P7BdlhXG-HZyB3cJCwAr-DNySbiJ13UugXHz_QQ-As Message-ID: Subject: Re: Non-text mode for pg_dumpall To: Mahendra Singh Thalor Cc: Alvaro Herrera , Guillaume Lelarge , Nathan Bossart , Magnus Hagander , Tom Lane , Andrew Dunstan , PostgreSQL-development , Dilip Kumar Content-Type: multipart/mixed; boundary="000000000000f5c93b062c7544a6" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000f5c93b062c7544a6 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Jan 23, 2025 at 6:35=E2=80=AFPM Mahendra Singh Thalor wrote: > > On Thu, 23 Jan 2025 at 14:59, jian he wrote= : > > > > hi. > > The four patches attached are to solve the > > TODO1: We need to think for --exclude-database=3DPATTERN for pg_restore= . > > it is based on your v11_pg_dumpall-with-directory-tar-custom-format-21-= jan.patch > > > > > > 0001. pg_dumpall --exclude-database=3DPATTERN already works, > > main function resolve pattern matching is expand_dbname_patterns. > > make it an extern function, so pg_restore --exclude-database can also u= se it. > > Hi Jian, > We can't use the same expand_dbname_patterns function pg_restore. > > In the 1st patch, by mistake I also used this function but then I > realised that we should not use this function due to some limitation > for pg_restore. > > While doing pg_dumpall, we have all the existence database names in > the pg_database catalog but while restoring, we don't have all > databases in the catalog. > Actually, we will read dbnames from map.dat file to skip matching > patterns for restore. > hi. After some tests and thinking about your reply, I admit that using expand_dbname_patterns in pg_restore will not work. We need to do pattern matching against the map.dat file. Please check the attached v12 series based on your v11_pg_dumpall-with-directory-tar-custom-format-21-jan.patch v12-0001 cosmetic change. v12-0002 implement pg_resore --exclude-database=3DPATTERN. main gist of implementation: for each database name in map.dat file, check if this database name pattern matches with PATTERN or not. pattern matching is using processSQLNamePattern. your substring will not work. some of the test cases. $BIN10/pg_restore --exclude-database=3D* -Cd template1 --verbose dir10 > dir_format 2>&1 $BIN10/pg_restore --exclude-database=3D*x* -Cd template1 --verbose dir10 > dir_format 2>&1 $BIN10/pg_restore --exclude-database=3D?* -Cd template1 --verbose dir10 > dir_format 2>&1 --000000000000f5c93b062c7544a6 Content-Type: application/octet-stream; name="v12-0002-pg_restore-exclude-database-PATTERN.no-cfbot" Content-Disposition: attachment; filename="v12-0002-pg_restore-exclude-database-PATTERN.no-cfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m6awr5jp0 RnJvbSA3ZTUxYWE2NDkzZWRmY2I3YjNhYWZhOGJjZTY2NjQyNTA5ZTBjZGVjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMjQgSmFuIDIwMjUgMjI6NDk6NDcgKzA4MDAKU3ViamVjdDogW1BBVENIIHYx MiAyLzJdIHBnX3Jlc3RvcmUgLS1leGNsdWRlLWRhdGFiYXNlPVBBVFRFUk4KCi0tLQogc3JjL2Jp bi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuYyB8ICA0OSArKysrKysrCiBzcmMvYmlu L3BnX2R1bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5oIHwgICAzICstCiBzcmMvYmluL3BnX2R1 bXAvcGdfcmVzdG9yZS5jICAgICAgICAgICAgIHwgMTY0ICsrKysrKysrKysrLS0tLS0tLS0tLS0t CiAzIGZpbGVzIGNoYW5nZWQsIDEzMyBpbnNlcnRpb25zKCspLCA4MyBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5jIGIvc3Jj L2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuYwppbmRleCBhY2U1MDc3MDg1Li5m ZDk2NmM0MmEwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxfcmVz dG9yZS5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVtcGFsbF9yZXN0b3JlLmMKQEAg LTMxMiwzICszMTIsNTIgQEAgcGFyc2VEdW1wRm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCkKIAog CXJldHVybiBhcmNoRHVtcEZvcm1hdDsKIH0KKworc3RhdGljIHNpemVfdAorcXVvdGVfbGl0ZXJh bF9pbnRlcm5hbChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbikKK3sKKwlj b25zdCBjaGFyICpzOworCWNoYXIJICAgKnNhdmVkc3QgPSBkc3Q7CisKKwlmb3IgKHMgPSBzcmM7 IHMgPCBzcmMgKyBsZW47IHMrKykKKwl7CisJCWlmICgqcyA9PSAnXFwnKQorCQl7CisJCQkqZHN0 KysgPSBFU0NBUEVfU1RSSU5HX1NZTlRBWDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJKmRzdCsr ID0gJ1wnJzsKKwl3aGlsZSAobGVuLS0gPiAwKQorCXsKKwkJaWYgKFNRTF9TVFJfRE9VQkxFKCpz cmMsIHRydWUpKQorCQkJKmRzdCsrID0gKnNyYzsKKwkJKmRzdCsrID0gKnNyYysrOworCX0KKwkq ZHN0KysgPSAnXCcnOworCisJcmV0dXJuIGRzdCAtIHNhdmVkc3Q7Cit9CisKKy8qCisgKiBxdW90 ZV9saXRlcmFsX2NzdHIgLQorICoJICByZXR1cm5zIGEgcHJvcGVybHkgcXVvdGVkIGxpdGVyYWwK KyAqIGNvcGllZCBmcm9tIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9xdW90ZS5jCisgKi8KK2NoYXIg KgorcXVvdGVfbGl0ZXJhbF9jc3RyKGNvbnN0IGNoYXIgKnJhd3N0cikKK3sKKwljaGFyCSAgICpy ZXN1bHQ7CisJaW50CQkJbGVuOworCWludAkJCW5ld2xlbjsKKworCWxlbiA9IHN0cmxlbihyYXdz dHIpOworCS8qIFdlIG1ha2UgYSB3b3JzdC1jYXNlIHJlc3VsdCBhcmVhOyB3YXN0aW5nIGEgbGl0 dGxlIHNwYWNlIGlzIE9LICovCisJcmVzdWx0ID0gcGdfbWFsbG9jKGxlbiAqIDIgKyAzICsgMSk7 CisKKwluZXdsZW4gPSBxdW90ZV9saXRlcmFsX2ludGVybmFsKHJlc3VsdCwgcmF3c3RyLCBsZW4p OworCXJlc3VsdFtuZXdsZW5dID0gJ1wwJzsKKworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1n aXQgYS9zcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5oIGIvc3JjL2Jpbi9w Z19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuaAppbmRleCBhZWY3YWJkZjRmLi5kODg5M2Jl ZmNhIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5o CisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVtcGFsbF9yZXN0b3JlLmgKQEAgLTE2LDEw ICsxNiwxMSBAQAogCiAjaW5jbHVkZSAicGdfYmFja3VwLmgiCiAKLWV4dGVybiBQR2Nvbm4gKnYo Y29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjb25uZWN0aW9uX3N0cmluZywgY29uc3Qg Y2hhciAqcGdob3N0LAorZXh0ZXJuIFBHY29ubiAqY29ubmVjdERhdGFiYXNlKGNvbnN0IGNoYXIg KmRibmFtZSwgY29uc3QgY2hhciAqY29ubmVjdGlvbl9zdHJpbmcsIGNvbnN0IGNoYXIgKnBnaG9z dCwKIAkJCQkJCQkgICBjb25zdCBjaGFyICpwZ3BvcnQsIGNvbnN0IGNoYXIgKnBndXNlciwKIAkJ CQkJCQkgICB0cml2YWx1ZSBwcm9tcHRfcGFzc3dvcmQsIGJvb2wgZmFpbF9vbl9lcnJvciwKIAkJ CQkJCQkgICBjb25zdCBjaGFyICpwcm9nbmFtZSwgY29uc3QgY2hhciAqKmNvbm5zdHIsIGludCAq c2VydmVyX3ZlcnNpb24pOwogZXh0ZXJuICBQR3Jlc3VsdCAqZXhlY3V0ZVF1ZXJ5KFBHY29ubiAq Y29ubiwgY29uc3QgY2hhciAqcXVlcnkpOwogZXh0ZXJuIEFyY2hpdmVGb3JtYXQgcGFyc2VEdW1w Rm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCk7CitleHRlcm4gY2hhcgkgICAqcXVvdGVfbGl0ZXJh bF9jc3RyKGNvbnN0IGNoYXIgKnMpOwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBDT01NT05fRFVNUEFMTF9SRVNUT1JFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVt cC9wZ19yZXN0b3JlLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jCmluZGV4IGE3MTU0 NDhkY2UuLmNlZjhhZjY1MmMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3Jl LmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYwpAQCAtODEsMjIgKzgxLDI3IEBA IHN0YXRpYyBib29sIHJlc3RvcmVPbmVEYXRhYmFzZShjb25zdCBjaGFyICppbnB1dEZpbGVTcGVj LCBSZXN0b3JlT3B0aW9ucyAqb3B0cywKIAkJCQkJCQkgICBpbnQgbnVtV29ya2VycywgYm9vbCBh cHBlbmRfZGF0YSk7CiBzdGF0aWMgaW50IFJlYWRPbmVTdGF0ZW1lbnQoU3RyaW5nSW5mbyBpbkJ1 ZiwgRklMRSAqcGZpbGUpOwogc3RhdGljIGludCByZXN0b3JlQWxsRGF0YWJhc2VzKFBHY29ubiAq Y29ubiwgY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsCi0JU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNs dWRlX3BhdHRlcm5zLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywgaW50IG51bVdvcmtlcnMpOworCQkJ CQkJCSAgIFJlc3RvcmVPcHRpb25zICpvcHRzLCBpbnQgbnVtV29ya2Vycyk7CiBzdGF0aWMgdm9p ZCBleGVjdXRlX2dsb2JhbF9zcWxfY29tbWFuZHMoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpk dW1wZGlycGF0aCwKLQkJY29uc3QgY2hhciAqb3V0ZmlsZSk7Ci1zdGF0aWMgaW50IGZpbHRlcl9k Ym5hbWVzX2Zvcl9yZXN0b3JlKFBHY29ubiAqY29ubiwKLQkJU2ltcGxlRGF0YWJhc2VPaWRMaXN0 ICpkYm5hbWVfb2lkX2xpc3QsIFNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucyk7 CisJCQkJCQkJCQkJY29uc3QgY2hhciAqb3V0ZmlsZSk7CisKK3N0YXRpYyB2b2lkIGV4cGFuZF9k Yl9wYXR0ZXJuX3Jlc3RvcmUoUEdjb25uICpjb25uLAorCQkJCQkJCQkJICBTaW1wbGVTdHJpbmdM aXN0ICpwYXR0ZXJucywKKwkJCQkJCQkJCSAgU2ltcGxlU3RyaW5nTGlzdCAqbmFtZXMsCisJCQkJ CQkJCQkgIFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqZGJvaWRfbGlzdCk7CitzdGF0aWMgaW50IGZp bHRlcl9kYm5hbWVzX2Zvcl9yZXN0b3JlKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqZGJuYW1lX29p ZF9saXN0KTsKIHN0YXRpYyBpbnQgZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGNvbnN0 IGNoYXIgKmR1bXBkaXJwYXRoLAogCQkJCQkJCQkJCSAgU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpk Ym5hbWVfb2lkX2xpc3QpOwogc3RhdGljIHZvaWQgc2ltcGxlX2RiX29pZF9saXN0X2FwcGVuZChT aW1wbGVEYXRhYmFzZU9pZExpc3QgKmxpc3QsIE9pZCBkYl9vaWQsCiAJCQkJCQkJCQkgIGNvbnN0 IGNoYXIgKmRibmFtZSk7Ci1zdGF0aWMgYm9vbCBpc19mdWxsX3BhdHRlcm4oUEdjb25uICpjb25u LCBjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnB0cm4pOwogc3RhdGljIHZvaWQgc2ltcGxl X3N0cmluZ19mdWxsX2xpc3RfZGVsZXRlKFNpbXBsZVN0cmluZ0xpc3QgKmxpc3QpOwogc3RhdGlj IHZvaWQgc2ltcGxlX2RiX29pZF9mdWxsX2xpc3RfZGVsZXRlKFNpbXBsZURhdGFiYXNlT2lkTGlz dCAqbGlzdCk7CiBzdGF0aWMgdm9pZCBzaW1wbGVfZGJfb2lkX2xpc3RfZGVsZXRlKFNpbXBsZURh dGFiYXNlT2lkTGlzdCAqbGlzdCwKIAkJCQkJCQkJCSAgU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2Vs bCAqY2VsbCwKIAkJCQkJCQkJCSAgU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqcHJldik7CiAK K3N0YXRpYyBTaW1wbGVTdHJpbmdMaXN0CQlkYl9leGNsdWRlX3BhdHRlcm5zID0ge05VTEwsIE5V TEx9Oworc3RhdGljIFNpbXBsZVN0cmluZ0xpc3QJCWRhdGFiYXNlX2V4Y2x1ZGVfbmFtZXMgPSB7 TlVMTCwgTlVMTH07CiBpbnQKIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewpAQCAtMTE4 LDcgKzEyMyw2IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCXN0YXRpYyBpbnQJc3Ry aWN0X25hbWVzID0gMDsKIAlib29sCQlkYXRhX29ubHkgPSBmYWxzZTsKIAlib29sCQlzY2hlbWFf b25seSA9IGZhbHNlOwotCVNpbXBsZVN0cmluZ0xpc3QgICAgZGJfZXhjbHVkZV9wYXR0ZXJucyA9 IHtOVUxMLCBOVUxMfTsKIAlib29sCQkJCWdsb2JhbHNfb25seSA9IGZhbHNlOwogCiAJc3RydWN0 IG9wdGlvbiBjbWRvcHRzW10gPSB7CkBAIC00OTEsOCArNDk1LDcgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAJCQllbHNlCiAJCQl7CiAJCQkJLyogTm93IHJlc3RvcmUgYWxsIHRoZSBk YXRhYmFzZXMgZnJvbSBtYXAuZGF0IGZpbGUuICovCi0JCQkJZXhpdF9jb2RlID0gcmVzdG9yZUFs bERhdGFiYXNlcyhjb25uLCBpbnB1dEZpbGVTcGVjLCBkYl9leGNsdWRlX3BhdHRlcm5zLAotCQkJ CQkJb3B0cywgbnVtV29ya2Vycyk7CisJCQkJZXhpdF9jb2RlID0gcmVzdG9yZUFsbERhdGFiYXNl cyhjb25uLCBpbnB1dEZpbGVTcGVjLCBvcHRzLCBudW1Xb3JrZXJzKTsKIAkJCX0KIAogCQkJLyog RnJlZSBkYiBwYXR0ZXJuIGxpc3QuICovCkBAIC03OTUsMTcgKzc5OCw3NSBAQCBSZWFkT25lU3Rh dGVtZW50KFN0cmluZ0luZm8gaW5CdWYsIEZJTEUgKnBmaWxlKQogCXJldHVybiAnUSc7CiB9CiAK KworLyoKKyAqIEZpbmQgYSBsaXN0IG9mIGRhdGFiYXNlIG5hbWVzIHRoYXQgbWF0Y2ggdGhlIGdp dmVuIHBhdHRlcm5zLAorICogdGhlIHJlc3VsdHMgaXMgc3RvcmVkIGluICpuYW1lcyouCisgKi8K K3N0YXRpYyB2b2lkCitleHBhbmRfZGJfcGF0dGVybl9yZXN0b3JlKFBHY29ubiAqY29ubiwKKwkJ CQkJCSAgU2ltcGxlU3RyaW5nTGlzdCAqcGF0dGVybnMsCisJCQkJCQkgIFNpbXBsZVN0cmluZ0xp c3QgKm5hbWVzLAorCQkJCQkJICBTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmRib2lkX2xpc3QpCit7 CisJUFFFeHBCdWZmZXIgcXVlcnk7CisJUEdyZXN1bHQgICAqcmVzOworCVNpbXBsZURhdGFiYXNl T2lkTGlzdENlbGwgKmRib2lkX2NlbGwgPSBOVUxMOworCisJaWYgKHBhdHRlcm5zLT5oZWFkID09 IE5VTEwpCisJCXJldHVybjsKKworCXF1ZXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCS8q CisJICogdGhlIGNvbnN0cnVjdCBwYXR0ZXJuIG1hdGNoaW5nIHF1ZXJ5OgorCSAqIFNFTEVDVCAx IFdIRVJFIFhYWCBPUEVSQVRPUihwZ19jYXRhbG9nLn4pICdeKFBBVFRFUk4pJCcgQ09MTEFURSBw Z19jYXRhbG9nLmRlZmF1bHQKKwkgKgorCSAqIFhYWCByZXByZXNlbnRzIHRoZSBzdHJpbmcgbGl0 ZXJhbCBkYXRhYmFzZSBuYW1lIGRlcml2ZWQgZnJvbSB0aGUKKwkgKiBkYm9pZF9saXN0IHZhcmlh YmxlLCB3aGljaCBpcyBpbml0aWFsbHkgZXh0cmFjdGVkIGZyb20gdGhlIG1hcC5kYXQKKwkgKiBm aWxlIGxvY2F0ZWQgaW4gdGhlIGJhY2t1cCBkaXJlY3RvcnkuCisJICogdGhhdCdzIHdoeSB3ZSBu ZWVkIHF1b3RlX2xpdGVyYWxfY3N0ci4KKwkgKi8KKwlmb3IgKGRib2lkX2NlbGwgPSBkYm9pZF9s aXN0LT5oZWFkOyBkYm9pZF9jZWxsOyBkYm9pZF9jZWxsID0gZGJvaWRfY2VsbC0+bmV4dCkKKwl7 CisJCWZvciAoU2ltcGxlU3RyaW5nTGlzdENlbGwgKmNlbGwgPSBwYXR0ZXJucy0+aGVhZDsgY2Vs bDsgY2VsbCA9IGNlbGwtPm5leHQpCisJCXsKKwkJCWludAkJCWRvdGNudDsKKworCQkJYXBwZW5k UFFFeHBCdWZmZXJTdHIocXVlcnksICJTRUxFQ1QgMSAiKTsKKwkJCXByb2Nlc3NTUUxOYW1lUGF0 dGVybihjb25uLCBxdWVyeSwgY2VsbC0+dmFsLCBmYWxzZSwKKwkJCQkJCQkJICBmYWxzZSwgTlVM TCwgcXVvdGVfbGl0ZXJhbF9jc3RyKGRib2lkX2NlbGwtPmRiX25hbWUpLAorCQkJCQkJCQkgIE5V TEwsIE5VTEwsIE5VTEwsICZkb3RjbnQpOworCisJCQlpZiAoZG90Y250ID4gMCkKKwkJCXsKKwkJ CQlwZ19sb2dfZXJyb3IoImltcHJvcGVyIHF1YWxpZmllZCBuYW1lICh0b28gbWFueSBkb3R0ZWQg bmFtZXMpOiAlcyIsCisJCQkJCQkJICBjZWxsLT52YWwpOworCQkJCVBRZmluaXNoKGNvbm4pOwor CQkJCWV4aXRfbmljZWx5KDEpOworCQkJfQorCisJCQlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwg cXVlcnktPmRhdGEpOworCQkJaWYgKChQUXJlc3VsdFN0YXR1cyhyZXMpID09IFBHUkVTX1RVUExF U19PSykgJiYgUFFudHVwbGVzKHJlcykpCisJCQkJc2ltcGxlX3N0cmluZ19saXN0X2FwcGVuZChu YW1lcywgZGJvaWRfY2VsbC0+ZGJfbmFtZSk7CisKKwkJCVBRY2xlYXIocmVzKTsKKwkJCXJlc2V0 UFFFeHBCdWZmZXIocXVlcnkpOworCQl9CisJfQorCWRlc3Ryb3lQUUV4cEJ1ZmZlcihxdWVyeSk7 Cit9CisKIC8qCiAgKiBmaWx0ZXJfZGJuYW1lc19mb3JfcmVzdG9yZQogICoKLSAqIFRoaXMgd2ls bCByZW1vdmUgbmFtZXMgZnJvbSBhbGwgZGJsaXN0IHRoYXQgYXJlIGdpdmVuIHdpdGggZXhjbHVk ZS1kYXRhYmFzZQotICogb3B0aW9uLgorICogVGhpcyB3aWxsIHJlbW92ZSBuYW1lcyBmcm9tIGFs bCBkYmxpc3QgdGhhdCBhcmUgc2FtZSBhcworICogZGF0YWJhc2VfZXhjbHVkZV9uYW1lcyBsaXN0 IGVsZW1lbnQKICAqCiAgKiByZXR1cm5zIG51bWJlciBvZiBkYm5hbWVzIHRob3NlIHdpbGwgYmUg cmVzdG9yZWQuCiAgKi8KIHN0YXRpYyBpbnQKLWZpbHRlcl9kYm5hbWVzX2Zvcl9yZXN0b3JlKFBH Y29ubiAqY29ubiwgU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpkYm5hbWVfb2lkX2xpc3QsCi0JCVNp bXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucykKK2ZpbHRlcl9kYm5hbWVzX2Zvcl9y ZXN0b3JlKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqZGJuYW1lX29pZF9saXN0KQogewogCVNpbXBs ZURhdGFiYXNlT2lkTGlzdENlbGwJKmRib2lkX2NlbGwgPSBkYm5hbWVfb2lkX2xpc3QtPmhlYWQ7 CiAJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAkqZGJvaWRwcmVjZWxsID0gTlVMTDsKQEAgLTgy MSwxOCArODgyLDEzIEBAIGZpbHRlcl9kYm5hbWVzX2Zvcl9yZXN0b3JlKFBHY29ubiAqY29ubiwg U2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpkYm5hbWVfb2lkX2xpc3QsCiAJCWJvb2wJCQkJCQlza2lw X2RiX3Jlc3RvcmUgPSBmYWxzZTsKIAkJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAkqbmV4dCA9 IGRib2lkX2NlbGwtPm5leHQ7CiAKLQkJLyogTm93IG1hdGNoIHRoaXMgZGJuYW1lIHdpdGggZXhj bHVkZS1kYXRhYmFzZSBsaXN0LiAqLwotCQlmb3IgKFNpbXBsZVN0cmluZ0xpc3RDZWxsICpjZWxs ZGIgPSBkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQ7IGNlbGxkYjsgY2VsbGRiID0gY2VsbGRiLT5u ZXh0KQorCQlmb3IgKFNpbXBsZVN0cmluZ0xpc3RDZWxsICpjZWxsZGIgPSBkYXRhYmFzZV9leGNs dWRlX25hbWVzLmhlYWQ7IGNlbGxkYjsgY2VsbGRiID0gY2VsbGRiLT5uZXh0KQogCQl7Ci0JCQlp ZiAoKGNvbm4gJiYgaXNfZnVsbF9wYXR0ZXJuKGNvbm4sIGRib2lkX2NlbGwtPmRiX25hbWUsIGNl bGxkYi0+dmFsKSkgfHwKLQkJCQkJKCFjb25uICYmIHBnX3N0cmNhc2VjbXAoZGJvaWRfY2VsbC0+ ZGJfbmFtZSwgY2VsbGRiLT52YWwpID09IDApKQorCQkJaWYgKHBnX3N0cmNhc2VjbXAoZGJvaWRf Y2VsbC0+ZGJfbmFtZSwgY2VsbGRiLT52YWwpID09IDApCiAJCQl7CiAJCQkJLyoKIAkJCQkgKiBB cyB3ZSBuZWVkIHRvIHNraXAgdGhpcyBkYm5hbWUgc28gc2V0IGZsYWcgdG8gcmVtb3ZlIGl0IGZy b20KIAkJCQkgKiBsaXN0LgotCQkJCSAqCi0JCQkJICogTm90ZTogd2UgY2FuJ3QgcmVtb3ZlIHRo aXMgcGF0dGVybiBmcm9tIHNraXAgbGlzdCBhcyB3ZQotCQkJCSAqIG1pZ2h0IGhhdmUgbXVsdGlw bGUgZGF0YWJhc2UgbmFtZSB3aXRoIHRoaXMgc2FtZSBwYXR0ZXJuLgogCQkJCSAqLwogCQkJCXNr aXBfZGJfcmVzdG9yZSA9IHRydWU7CiAJCQkJYnJlYWs7CkBAIC05MzcsOCArOTkzLDcgQEAgZ2V0 X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLCBTaW1w bGVEYXRhYmFzZU9pZExpc3QgKmQKICAqLwogc3RhdGljIGludAogcmVzdG9yZUFsbERhdGFiYXNl cyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLAotCQlTaW1wbGVTdHJpbmdM aXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAotCQlpbnQgbnVt V29ya2VycykKKwkJCQkJUmVzdG9yZU9wdGlvbnMgKm9wdHMsIGludCBudW1Xb3JrZXJzKQogewog CVNpbXBsZURhdGFiYXNlT2lkTGlzdAkJCWRibmFtZV9vaWRfbGlzdCA9IHtOVUxMLCBOVUxMfTsK IAlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCQkqZGJvaWRfY2VsbDsKQEAgLTk3NywxMyArMTAz MiwxMyBAQCByZXN0b3JlQWxsRGF0YWJhc2VzKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqZHVt cGRpcnBhdGgsCiAJfQogCiAJLyoKLQkgKiBUT0RPOiBUbyBza2lwIGRhdGFiYXNlcywgd2UgbmVl ZCB0byBtYWtlIGEgZGVzaWduLgotCSAqCi0JICogU2tpcCBhbnkgZXhwbGljaXRseSBleGNsdWRl ZCBkYXRhYmFzZS4gIElmIHRoZXJlIGlzIG5vIGRhdGFiYXNlCi0JICogY29ubmVjdGlvbiwgdGhl biBqdXN0IGNvbnNpZGVyIHBhdHRlcm4gYXMgc2ltcGxlIG5hbWUgdG8gY29tcGFyZS4KKwkgKiBw cm9jZXNzaW5nIHBnX3JldHNvcmUgLS1leGNsdWRlLWRhdGFiYXNlPVBBVFRFUk4uCiAJICovCi0J bnVtX2RiX3Jlc3RvcmUgPSBmaWx0ZXJfZGJuYW1lc19mb3JfcmVzdG9yZShjb25uLCAmZGJuYW1l X29pZF9saXN0LAotCQkJZGJfZXhjbHVkZV9wYXR0ZXJucyk7CisJZXhwYW5kX2RiX3BhdHRlcm5f cmVzdG9yZShjb25uLAorCQkJCQkJCSAgJmRiX2V4Y2x1ZGVfcGF0dGVybnMsCisJCQkJCQkJICAm ZGF0YWJhc2VfZXhjbHVkZV9uYW1lcywKKwkJCQkJCQkgICZkYm5hbWVfb2lkX2xpc3QpOworCW51 bV9kYl9yZXN0b3JlID0gZmlsdGVyX2RibmFtZXNfZm9yX3Jlc3RvcmUoJmRibmFtZV9vaWRfbGlz dCk7CiAKIAkvKiBDbG9zZSB0aGUgZGIgY29ubmVjdGlvbiBhcyB3ZSBhcmUgZG9uZSBnbG9iYWxz IGFuZCBwYXR0ZXJucy4gKi8KIAlpZiAoY29ubikKQEAgLTEyMTgsNTggKzEyNzMsMyBAQCBzaW1w bGVfZGJfb2lkX2xpc3RfZGVsZXRlKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqbGlzdCwgU2ltcGxl RGF0YWJhc2VPaWRMaXN0Q2VsbAogCQlwZnJlZShjZWxsKTsKIAl9CiB9Ci0KLS8qCi0gKiBpc19m dWxsX3BhdHRlcm4KLSAqCi0gKiBUaGlzIHVzZXMgc3Vic3RyaW5nIGZ1bmN0aW9uIHRvIG1ha2Ug MXN0IHN0cmluZyBmcm9tIHBhdHRlcm4uCi0gKiBPdXRzdHJpbmcgb2Ygc3Vic3RyaW5nIGZ1bmN0 aW9uIGlzIGNvbXBhcmVkIHdpdGggMXN0IHN0cmluZyB0bwotICogdmFsaWRhdGUgdGhpcyBwYXR0 ZXJuLgotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiAxc3Qgc3RyaW5nIGNhbiBiZSBjb25zdHJ1Y3Rl ZCBmcm9tIGdpdmVuIHBhdHRlcm4uCi0gKgotICovCi1zdGF0aWMgYm9vbAotaXNfZnVsbF9wYXR0 ZXJuKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpwdHJuKQotewot CVBRRXhwQnVmZmVyCQlxdWVyeTsKLQlQR3Jlc3VsdAkJKnJlc3VsdDsKLQotCXF1ZXJ5ID0gY3Jl YXRlUFFFeHBCdWZmZXIoKTsKLQotCXByaW50ZlBRRXhwQnVmZmVyKHF1ZXJ5LAotCQkJIlNFTEVD VCBzdWJzdHJpbmcgKCAiCi0JCQkiICclcycgLCAiCi0JCQkiICclcycgKSAiLCBzdHIsIHB0cm4p OwotCi0gICByZXN1bHQgPSBleGVjdXRlUXVlcnkoY29ubiwgcXVlcnktPmRhdGEpOwotCi0JaWYg KFBRcmVzdWx0U3RhdHVzKHJlc3VsdCkgPT0gUEdSRVNfVFVQTEVTX09LKQotCXsKLQkJaWYgKFBR bnR1cGxlcyhyZXN1bHQpID09IDEpCi0JCXsKLQkJCWNvbnN0IGNoYXIJKm91dHN0ciA9IE5VTEw7 Ci0KLQkJCS8qCi0JCQkgKiBJZiBvdXRwdXQgc3RyaW5nIG9mIHN1YnN0cmluZyBmdW5jdGlvbiBp cyBtYXRjaGVzIHdpdGggc3RyLCB0aGVuCi0JCQkgKiB3ZSBjYW4gY29uc3RydWN0IHN0ciBmcm9t IHBhdHRlcm4uCi0JCQkgKi8KLQkJCWlmICghUFFnZXRpc251bGwocmVzdWx0LCAwLCAwKSkKLQkJ CQlvdXRzdHIgPSBQUWdldHZhbHVlKHJlc3VsdCwgMCwgMCk7Ci0KLQkJCWlmIChvdXRzdHIgJiYg cGdfc3RyY2FzZWNtcChvdXRzdHIsIHN0cikgPT0gMCkKLQkJCXsKLQkJCQlQUWNsZWFyKHJlc3Vs dCk7Ci0JCQkJZGVzdHJveVBRRXhwQnVmZmVyKHF1ZXJ5KTsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJ CX0KLQkJfQotCX0KLQllbHNlCi0JCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGV4ZWN1dGUgcXVl cnk6IFwiJXNcIiBcbkNvbW1hbmQgd2FzOiBcIiVzXCIiLCBQUWVycm9yTWVzc2FnZShjb25uKSwg cXVlcnktPmRhdGEpOwotCi0JUFFjbGVhcihyZXN1bHQpOwotCWRlc3Ryb3lQUUV4cEJ1ZmZlcihx dWVyeSk7Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0tIAoyLjM0LjEKCg== --000000000000f5c93b062c7544a6 Content-Type: application/octet-stream; name="v12-0001-coesmetic-change.no-cfbot" Content-Disposition: attachment; filename="v12-0001-coesmetic-change.no-cfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m6awr5jz1 RnJvbSA0NTVkNzQ1ZWQ3ZTZkZjA5YzNhZGEyMmMzNGJjNWE4ODhlZjAyMzA0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMjQgSmFuIDIwMjUgMDk6NDk6NTUgKzA4MDAKU3ViamVjdDogW1BBVENIIHYx MiAxLzJdIGNvZXNtZXRpYyBjaGFuZ2UuCgotLS0KIHNyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVt cGFsbF9yZXN0b3JlLmggfCAgOSArKystLS0KIHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMg ICAgICAgICAgICAgfCAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYyAgICAgICAg ICAgICB8IDM5ICsrKysrKysrKysrKy0tLS0tLS0tLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCAyNSBp bnNlcnRpb25zKCspLCAyNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1 bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5oIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1w YWxsX3Jlc3RvcmUuaAppbmRleCBhMjdjM2U5ZmI4Li5hZWY3YWJkZjRmIDEwMDY0NAotLS0gYS9z cmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5oCisrKyBiL3NyYy9iaW4vcGdf ZHVtcC9jb21tb25fZHVtcGFsbF9yZXN0b3JlLmgKQEAgLTE2LDExICsxNiwxMCBAQAogCiAjaW5j bHVkZSAicGdfYmFja3VwLmgiCiAKLWV4dGVybiBQR2Nvbm4gKmNvbm5lY3REYXRhYmFzZShjb25z dCBjaGFyICpkYm5hbWUsCi0JCWNvbnN0IGNoYXIgKmNvbm5lY3Rpb25fc3RyaW5nLCBjb25zdCBj aGFyICpwZ2hvc3QsCi0JCWNvbnN0IGNoYXIgKnBncG9ydCwgY29uc3QgY2hhciAqcGd1c2VyLAot CQl0cml2YWx1ZSBwcm9tcHRfcGFzc3dvcmQsIGJvb2wgZmFpbF9vbl9lcnJvciwKLQkJY29uc3Qg Y2hhciAqcHJvZ25hbWUsIGNvbnN0IGNoYXIgKipjb25uc3RyLCBpbnQgKnNlcnZlcl92ZXJzaW9u KTsKK2V4dGVybiBQR2Nvbm4gKnYoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjb25u ZWN0aW9uX3N0cmluZywgY29uc3QgY2hhciAqcGdob3N0LAorCQkJCQkJCSAgIGNvbnN0IGNoYXIg KnBncG9ydCwgY29uc3QgY2hhciAqcGd1c2VyLAorCQkJCQkJCSAgIHRyaXZhbHVlIHByb21wdF9w YXNzd29yZCwgYm9vbCBmYWlsX29uX2Vycm9yLAorCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnByb2du YW1lLCBjb25zdCBjaGFyICoqY29ubnN0ciwgaW50ICpzZXJ2ZXJfdmVyc2lvbik7CiBleHRlcm4g IFBHcmVzdWx0ICpleGVjdXRlUXVlcnkoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSk7 CiBleHRlcm4gQXJjaGl2ZUZvcm1hdCBwYXJzZUR1bXBGb3JtYXQoY29uc3QgY2hhciAqZm9ybWF0 KTsKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ09NTU9OX0RVTVBBTExfUkVT VE9SRV9IICovCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jIGIvc3Jj L2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYwppbmRleCA1OTE1YjFiMDUxLi41YWRlZWI2ZDRkIDEw MDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCisrKyBiL3NyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wYWxsLmMKQEAgLTY3Myw3ICs2NzMsNyBAQCBoZWxwKHZvaWQpCiAJcHJpbnRm KF8oIlxuR2VuZXJhbCBvcHRpb25zOlxuIikpOwogCXByaW50ZihfKCIgIC1mLCAtLWZpbGU9RklM RU5BTUUgICAgICAgICAgb3V0cHV0IGZpbGUgbmFtZVxuIikpOwogCXByaW50ZihfKCIgIC1GLCAt LWZvcm1hdD1jfGR8dHxwICAgICAgICAgb3V0cHV0IGZpbGUgZm9ybWF0IChjdXN0b20sIGRpcmVj dG9yeSwgdGFyLFxuIgotCQkJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhaW4g dGV4dCAoZGVmYXVsdCkpXG4iKSk7CisJCQkgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGxhaW4gdGV4dCAoZGVmYXVsdCkpXG4iKSk7CiAJcHJpbnRmKF8oIiAgLXYsIC0tdmVyYm9z ZSAgICAgICAgICAgICAgICB2ZXJib3NlIG1vZGVcbiIpKTsKIAlwcmludGYoXygiICAtViwgLS12 ZXJzaW9uICAgICAgICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uLCB0aGVuIGV4 aXRcbiIpKTsKIAlwcmludGYoXygiICAtLWxvY2std2FpdC10aW1lb3V0PVRJTUVPVVQgIGZhaWwg YWZ0ZXIgd2FpdGluZyBUSU1FT1VUIGZvciBhIHRhYmxlIGxvY2tcbiIpKTsKZGlmZiAtLWdpdCBh L3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9y ZS5jCmluZGV4IDc5ZjYxMzk1YWUuLmE3MTU0NDhkY2UgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdf ZHVtcC9wZ19yZXN0b3JlLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYwpAQCAt NzcsOCArNzcsOCBAQCBzaW1wbGVfZGJfb2lkX2xpc3RfYXBwZW5kKFNpbXBsZURhdGFiYXNlT2lk TGlzdCAqbGlzdCwgT2lkIGRiX29pZCwgY29uc3QgY2hhciAqZAogc3RhdGljIHZvaWQgdXNhZ2Uo Y29uc3QgY2hhciAqcHJvZ25hbWUpOwogc3RhdGljIHZvaWQgcmVhZF9yZXN0b3JlX2ZpbHRlcnMo Y29uc3QgY2hhciAqZmlsZW5hbWUsIFJlc3RvcmVPcHRpb25zICpvcHRzKTsKIHN0YXRpYyBib29s IElzRmlsZUV4aXN0c0luRGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmls ZW5hbWUpOwotc3RhdGljIGJvb2wgcmVzdG9yZU9uZURhdGFiYXNlKGNvbnN0IGNoYXIgKmlucHV0 RmlsZVNwZWMsCi0JCVJlc3RvcmVPcHRpb25zICpvcHRzLCBpbnQgbnVtV29ya2VycywgYm9vbCBh cHBlbmRfZGF0YSk7CitzdGF0aWMgYm9vbCByZXN0b3JlT25lRGF0YWJhc2UoY29uc3QgY2hhciAq aW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJCQkJCQkJICAgaW50IG51bVdv cmtlcnMsIGJvb2wgYXBwZW5kX2RhdGEpOwogc3RhdGljIGludCBSZWFkT25lU3RhdGVtZW50KFN0 cmluZ0luZm8gaW5CdWYsIEZJTEUgKnBmaWxlKTsKIHN0YXRpYyBpbnQgcmVzdG9yZUFsbERhdGFi YXNlcyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLAogCVNpbXBsZVN0cmlu Z0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsIGludCBudW1X b3JrZXJzKTsKQEAgLTg3LDE0ICs4NywxNSBAQCBzdGF0aWMgdm9pZCBleGVjdXRlX2dsb2JhbF9z cWxfY29tbWFuZHMoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpkdW1wZGlycGF0aCwKIHN0YXRp YyBpbnQgZmlsdGVyX2RibmFtZXNfZm9yX3Jlc3RvcmUoUEdjb25uICpjb25uLAogCQlTaW1wbGVE YXRhYmFzZU9pZExpc3QgKmRibmFtZV9vaWRfbGlzdCwgU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNs dWRlX3BhdHRlcm5zKTsKIHN0YXRpYyBpbnQgZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxl KGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLAotCQlTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmRibmFt ZV9vaWRfbGlzdCk7CisJCQkJCQkJCQkJICBTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmRibmFtZV9v aWRfbGlzdCk7CiBzdGF0aWMgdm9pZCBzaW1wbGVfZGJfb2lkX2xpc3RfYXBwZW5kKFNpbXBsZURh dGFiYXNlT2lkTGlzdCAqbGlzdCwgT2lkIGRiX29pZCwKLQkJY29uc3QgY2hhciAqZGJuYW1lKTsK KwkJCQkJCQkJCSAgY29uc3QgY2hhciAqZGJuYW1lKTsKIHN0YXRpYyBib29sIGlzX2Z1bGxfcGF0 dGVybihQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcHRybik7CiBz dGF0aWMgdm9pZCBzaW1wbGVfc3RyaW5nX2Z1bGxfbGlzdF9kZWxldGUoU2ltcGxlU3RyaW5nTGlz dCAqbGlzdCk7CiBzdGF0aWMgdm9pZCBzaW1wbGVfZGJfb2lkX2Z1bGxfbGlzdF9kZWxldGUoU2lt cGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0KTsKIHN0YXRpYyB2b2lkIHNpbXBsZV9kYl9vaWRfbGlz dF9kZWxldGUoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0LAotCQlTaW1wbGVEYXRhYmFzZU9p ZExpc3RDZWxsICpjZWxsLCBTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpwcmV2KTsKKwkJCQkJ CQkJCSAgU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqY2VsbCwKKwkJCQkJCQkJCSAgU2ltcGxl RGF0YWJhc2VPaWRMaXN0Q2VsbCAqcHJldik7CiAKIGludAogbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCkBAIC00NDYsOCArNDQ3LDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJ CS8qIFBsYWluIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkIGZvciBwZ19yZXN0b3JlLiAqLwogCQlp ZiAob3B0cy0+Zm9ybWF0ID09IGFyY2hOdWxsKQogCQl7Ci0JCQlwZ19mYXRhbCgidW5yZWNvZ25p emVkIGFyY2hpdmUgZm9ybWF0IFwiJXNcIjsgcGxlYXNlIHNwZWNpZnkgXCJjXCIsIFwiZFwiLCBv ciBcInRcIiIsCi0JCQkJCW9wdHMtPmZvcm1hdE5hbWUpOworCQkJcGdfZmF0YWwoInVucmVjb2du aXplZCBhcmNoaXZlIGZvcm1hdCBcIiVzXCIsIG9uZSBvZiBcImNcIiwgXCJkXCIgb3IgXCJ0XCIg bXVzdCBiZSBzcGVjaWZpZWQiLAorCQkJCQkgIG9wdHMtPmZvcm1hdE5hbWUpOwogCQl9CiAJfQog CkBAIC00NTgsNyArNDU5LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJICogLS1l eGNsdWRlLWRhdGFiYXNlIHBhdHRlcm5zLgogCSAqLwogCWlmIChpbnB1dEZpbGVTcGVjICE9IE5V TEwgJiYKLQkJCSFJc0ZpbGVFeGlzdHNJbkRpcmVjdG9yeShpbnB1dEZpbGVTcGVjLCAidG9jLmRh dCIpKQorCQkhSXNGaWxlRXhpc3RzSW5EaXJlY3RvcnkoaW5wdXRGaWxlU3BlYywgInRvYy5kYXQi KSkKIAl7CiAJCS8qIElmIGdsb2JhbC5kYXQgaXMgZXhpc3QsIHRoZW4gcHJvY2VzcyBpdC4gKi8K IAkJaWYgKElzRmlsZUV4aXN0c0luRGlyZWN0b3J5KHBnX3N0cmR1cChpbnB1dEZpbGVTcGVjKSwg Imdsb2JhbC5kYXQiKSkKQEAgLTQ3MCw4ICs0NzEsOCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKIAkJCWlmIChvcHRzLT5jcGFyYW1zLmRibmFtZSkKIAkJCXsKIAkJCQljb25uID0gY29u bmVjdERhdGFiYXNlKG9wdHMtPmNwYXJhbXMuZGJuYW1lLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBn aG9zdCwKLQkJCQkJCW9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1l LCBUUklfREVGQVVMVCwgZmFsc2UsCi0JCQkJCQlwcm9nbmFtZSwgTlVMTCwgTlVMTCk7CisJCQkJ CQkJCQkgICBvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJ X0RFRkFVTFQsCisJCQkJCQkJCQkgICBmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwpOwogCiAJ CQkJaWYgKCFjb25uKQogCQkJCQlwZ19mYXRhbCgiY291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJh c2UgXCIlc1wiIiwgb3B0cy0+Y3BhcmFtcy5kYm5hbWUpOwpAQCAtNDk4LDggKzQ5OSw4IEBAIG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJc2ltcGxlX3N0cmluZ19mdWxsX2xpc3RfZGVs ZXRlKCZkYl9leGNsdWRlX3BhdHRlcm5zKTsKIAogCQkJcmV0dXJuIGV4aXRfY29kZTsKLQkJfS8q IGVuZCBpZiAqLwotCX0vKiBlbmQgaWYgKi8KKwkJfQorCX0KIAogCXJldHVybiByZXN0b3JlT25l RGF0YWJhc2UoaW5wdXRGaWxlU3BlYywgb3B0cywgbnVtV29ya2VycywgZmFsc2UpOwogfQpAQCAt NTExLDcgKzUxMiw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICovCiBzdGF0aWMg Ym9vbAogcmVzdG9yZU9uZURhdGFiYXNlKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJlc3Rv cmVPcHRpb25zICpvcHRzLAotCQlpbnQgbnVtV29ya2VycywgYm9vbCBhcHBlbmRfZGF0YSkKKwkJ CQkgICBpbnQgbnVtV29ya2VycywgYm9vbCBhcHBlbmRfZGF0YSkKIHsKIAlBcmNoaXZlCQkqQUg7 CiAJYm9vbAkJZXhpdF9jb2RlOwpAQCAtOTU1LDIwICs5NTYsMjAgQEAgcmVzdG9yZUFsbERhdGFi YXNlcyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLAogCiAJaWYgKCFjb25u KQogCXsKLQkJcGdfbG9nX2luZm8oInRyeWluZyB0byBjb25uZWN0IHBvc3RncmVzIGRhdGFiYXNl IHRvIGR1bXAgaW50byBvdXQgZmlsZSIpOworCQlwZ19sb2dfaW5mbygidHJ5aW5nIHRvIGNvbm5l Y3QgZGF0YWJhc2UgXCJwb3N0Z3Jlc1wiICB0byBkdW1wIGludG8gb3V0IGZpbGUiKTsKIAogCQlj b25uID0gY29ubmVjdERhdGFiYXNlKCJwb3N0Z3JlcyIsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdo b3N0LAotCQkJCW9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBU UklfREVGQVVMVCwgZmFsc2UsCi0JCQkJcHJvZ25hbWUsIE5VTEwsIE5VTEwpOworCQkJCQkJCSAg IG9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVM VCwKKwkJCQkJCQkgICBmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwpOwogCiAJCS8qIFRyeSB3 aXRoIHRlbXBsYXRlMS4gKi8KIAkJaWYgKCFjb25uKQogCQl7Ci0JCQlwZ19sb2dfaW5mbygidHJ5 aW5nIHRvIGNvbm5lY3QgdGVtcGxhdGUxIGRhdGFiYXNlIGFzIGZhaWxlZCB0byBjb25uZWN0IHRv IHBvc3RncmVzIHRvIGR1bXAgaW50byBvdXQgZmlsZSIpOworCQkJcGdfbG9nX2luZm8oInRyeWlu ZyB0byBjb25uZWN0IGRhdGFiYXNlIFwidGVtcGxhdGUxXCIgYXMgZmFpbGVkIHRvIGNvbm5lY3Qg dG8gZGF0YWJhc2UgXCJwb3N0Z3Jlc1wiIHRvIGR1bXAgaW50byBvdXQgZmlsZSIpOwogCiAJCQlj b25uID0gY29ubmVjdERhdGFiYXNlKCJ0ZW1wbGF0ZTEiLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBn aG9zdCwKLQkJCQkJb3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNlcm5hbWUs IFRSSV9ERUZBVUxULCBmYWxzZSwKLQkJCQkJcHJvZ25hbWUsIE5VTEwsIE5VTEwpOworCQkJCQkJ CQkgICBvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RF RkFVTFQsCisJCQkJCQkJCSAgIGZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCk7CiAKIAkJCWlm ICghY29ubikKIAkJCQlwZ19sb2dfaW5mbygidGhlcmUgaXMgbm8gZGF0YWJhc2UgY29ubmVjdGlv biBzbyBjb25zaWRlciBwYXR0ZXJuIGFzIHNpbXBsZSBuYW1lIGZvciBleGNsdWRlLWRhdGFiYXNl Iik7Ci0tIAoyLjM0LjEKCg== --000000000000f5c93b062c7544a6--