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 1rW9QQ-003ozi-HI for pgsql-hackers@arkaria.postgresql.org; Sat, 03 Feb 2024 06:22:51 +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 1rW9QP-000Qv9-NU for pgsql-hackers@arkaria.postgresql.org; Sat, 03 Feb 2024 06:22:49 +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 1rW9QP-000Qul-01 for pgsql-hackers@lists.postgresql.org; Sat, 03 Feb 2024 06:22:49 +0000 Received: from mail-ua1-x92b.google.com ([2607:f8b0:4864:20::92b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rW9QM-004pKK-8p for pgsql-hackers@lists.postgresql.org; Sat, 03 Feb 2024 06:22:47 +0000 Received: by mail-ua1-x92b.google.com with SMTP id a1e0cc1a2514c-7d6024b181bso1140579241.2 for ; Fri, 02 Feb 2024 22:22:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706941365; x=1707546165; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=82eQHbUFjEFvdIrwQlmHf8wuMTvQy+Y8pI8GSwXGRoY=; b=jLlPtgbwED7j8ebSz4XiTnfAJnqLEb/bNvrH82euG9pgAai4AxuRmyAV66Ehyr9uvn ISksWZnyb0qEWzuAzw1UVHKd9LAEpoyY6HOLEUWUFrM98zek1XTTtqRLH3v9J8lB6G2w 2UFKrFNla6h0f8HXjUtBjhl3Ldf4/Q5qoT8Z3JFWuXWyM2J//LtP9AFLPo/6iGy8dzWv 8NXxPD5UrG+XfAKkKkLSv845Vb85jfuATX5Wps7oKA00cOzAurzwGpBX68FlH+JpTZQ8 0oY9V5Xgv8zGRJc9+p03KFUIvfgGzMB9zx4K7TmDbbvalgGaJX9OwcFDov+wC9jFKyQv Qt8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706941365; x=1707546165; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=82eQHbUFjEFvdIrwQlmHf8wuMTvQy+Y8pI8GSwXGRoY=; b=Ep3NzQbPCCsCkDC+V8tMAjYgHFEMXitMJR2hN7P4FMnQbXPjuYiSWj0BBBfOLTjybj 78hSKU+9tD7B2QpY1RqtysqMOReSOO/l38SYsT8rzKdJ7+jVdnNsgqwl09Obf1qjYjF9 0CBz6U/HEWBBOoNgZA388qfJMMDmUCT6SPtcT4yPH+HU6xk4tjJCeKioCG3go/nFVQn9 GaOgLdmBuglUQbQlNNiebR7OpLfs6T18itFTBp9EyUFrt8QEnKAXX54AWs5EYMReMBNy w7Duz/wnyqkmsObiT2KWaTKNyRUHhgwG5+iJWM7UIXwpW/+6FdT7JoRBQWP1g2GW250B TMnA== X-Gm-Message-State: AOJu0Yx+USvB34vlSJI2rdtqW4Bm7dnfQqWVSkk11Gte8ZcHSVRInQ6Z KKGeEKnbue4Av4aAjpGHvAHASehSELnRX9KecMKSHzXfzAk8f12eE29hocqPsnAwGIivib+gU7O Ke5nO7nSRLX2ptdfE5EZGulvsfMfsgLji4ZbzhQ== X-Google-Smtp-Source: AGHT+IFli4+fR2kjXlpKCTQrGLXO4DuwDN5N5XsO19y5fu5mzSyofXCTnIu23KhA2J82+y7r37foRV5xmTGx1mjsSh4= X-Received: by 2002:a05:6102:812:b0:46c:b2e8:c619 with SMTP id g18-20020a056102081200b0046cb2e8c619mr3881280vsb.24.1706941365364; Fri, 02 Feb 2024 22:22:45 -0800 (PST) MIME-Version: 1.0 From: jian he Date: Sat, 3 Feb 2024 14:22:34 +0800 Message-ID: Subject: on_error table, saving error info to a table To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000bc460b06107441f1" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000bc460b06107441f1 Content-Type: text/plain; charset="UTF-8" Hi. I previously did some work in COPY FROM save error information to a table. still based on this suggestion: https://www.postgresql.org/message-id/752672.1699474336%40sss.pgh.pa.us Now I refactored it. the syntax: ON_ERROR 'table', TABLE 'error_saving_tbl' if ON_ERROR is not specified with 'table', TABLE is specified, then error. if ON_ERROR is specified with 'table', TABLE is not specified or error_saving_tbl does not exist, then error. In BeginCopyFrom, we check the data definition of error_saving_table, we also check if the user has INSERT privilege to error_saving_table (all the columns). We also did a preliminary check of the lock condition of error_saving_table. if it does not meet these conditions, we quickly error out. error_saving_table will be the same schema as the copy from table. Because "table" is a keyword, I have to add the following changes to gram.y. --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -3420,6 +3420,10 @@ copy_opt_item: { $$ = makeDefElem("null", (Node *) makeString($3), @1); } + | TABLE opt_as Sconst + { + $$ = makeDefElem("table", (Node *) makeString($3), @1); + } since "table" is already a keyword, so there is no influence on the parsing speed? demo: create table err_tbl( userid oid, -- the user oid while copy generated this entry copy_tbl oid, --copy table filename text, lineno int8, line text, colname text, raw_field_value text, err_message text, err_detail text, errorcode text ); create table t_copy_tbl(a int, b int, c int); COPY t_copy_tbl FROM STDIN WITH (delimiter ',', on_error 'table', table err_tbl); 1,2,a \. table err_tbl \gx -[ RECORD 1 ]---+------------------------------------------- userid | 10 copy_tbl | 17920 filename | STDIN lineno | 1 line | 1,2,a colname | c raw_field_value | a err_message | invalid input syntax for type integer: "a" err_detail | errorcode | 22P02 --000000000000bc460b06107441f1 Content-Type: application/x-patch; name="v1-0001-on_error-table-saving-error-info-to-a-table.patch" Content-Disposition: attachment; filename="v1-0001-on_error-table-saving-error-info-to-a-table.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ls5iy8n70 RnJvbSBiYjZmMjYzZWY0ZDM3YzI4NzEwODZkYjQ0ZGNhMjE3ZmE5MWY1MDgwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFNhdCwgMyBGZWIgMjAyNCAxMToxMzoxNCArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjEg MS8xXSBvbl9lcnJvciB0YWJsZSwgc2F2aW5nIGVycm9yIGluZm8gdG8gYSB0YWJsZQoKaW50cm9k dWNlIG9uX2Vycm9yIHRhYmxlIG9wdGlvbiBmb3IgQ09QWSBGUk9NLgp0aGUgc3ludGF4IGlzIHtv bl9lcnJvciB0YWJsZSwgdGFibGUgJ2Vycm9yX3NhdmluZ190YmwnfS4KCndlIGZpcnN0IGNoZWNr IHRhYmxlIGVycm9yX3NhdmluZ190YmwncyBleGlzdGVuY2UgYW5kIGRhdGEgZGVmaW5pdGlvbi4K aWYgaXQgZG9lcyBub3QgbWVldCBvdXIgY3JpdGVyaWEsIHRoZW4gd2UgcXVpY2tseSBhYm9ydCB0 aGUgQ09QWSBvcGVyYXRpb24uCndlIGFsc28gZGlkIHByZWxpbWluYXJ5IGNoZWNrIHRoZSBsb2Nr IG9mIGVycm9yIHNhdmluZyB0YWJsZQpzbyB0aGUgQ09QWSBjYW4gaW5zZXJ0IHR1cGxlcyB0byBp dC4KCm9uY2UgdGhlcmUgaXMgYSBlcnJvciBoYXBwZW5lZCwgd2Ugc2F2ZSB0aGUgZXJyb3IgbWV0 ZWRhdGEKYW5kIGluc2VydCBpdCB0byB0aGUgZXJyb3Jfc2F2aW5nX3RhYmxlLgotLS0KIGNvbnRy aWIvZmlsZV9mZHcvZmlsZV9mZHcuYyAgICAgICAgICB8ICAgNCArLQogZG9jL3NyYy9zZ21sL3Jl Zi9jb3B5LnNnbWwgICAgICAgICAgIHwgMTA2ICsrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9i YWNrZW5kL2NvbW1hbmRzL2NvcHkuYyAgICAgICAgICB8ICAyNiArKysrKysKIHNyYy9iYWNrZW5k L2NvbW1hbmRzL2NvcHlmcm9tLmMgICAgICB8IDEyOSArKysrKysrKysrKysrKysrKysrKysrKysr Ky0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tcGFyc2UuYyB8ICA1MiArKysrKysrKysr LQogc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueSAgICAgICAgICAgIHwgICA0ICsKIHNyYy9pbmNs dWRlL2NvbW1hbmRzL2NvcHkuaCAgICAgICAgICB8ICAgNCArLQogc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9jb3B5Mi5vdXQgIHwgIDkzICsrKysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2NvcHkyLnNxbCAgICAgICB8ICA4MCArKysrKysrKysrKysrKysrKwogOSBmaWxl cyBjaGFuZ2VkLCA0OTIgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9jb250cmliL2ZpbGVfZmR3L2ZpbGVfZmR3LmMgYi9jb250cmliL2ZpbGVfZmR3L2ZpbGVfZmR3 LmMKaW5kZXggMjQ5ZDgyZDMuLjFkNTM2ZTllIDEwMDY0NAotLS0gYS9jb250cmliL2ZpbGVfZmR3 L2ZpbGVfZmR3LmMKKysrIGIvY29udHJpYi9maWxlX2Zkdy9maWxlX2Zkdy5jCkBAIC03NTEsNyAr NzUxLDcgQEAgZmlsZUl0ZXJhdGVGb3JlaWduU2NhbihGb3JlaWduU2NhblN0YXRlICpub2RlKQog CSAqLwogCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oR2V0UGVyVHVwbGVNZW1v cnlDb250ZXh0KGVzdGF0ZSkpOwogCWZvdW5kID0gTmV4dENvcHlGcm9tKGZlc3RhdGUtPmNzdGF0 ZSwgZWNvbnRleHQsCi0JCQkJCQkgc2xvdC0+dHRzX3ZhbHVlcywgc2xvdC0+dHRzX2lzbnVsbCk7 CisJCQkJCQkgc2xvdC0+dHRzX3ZhbHVlcywgc2xvdC0+dHRzX2lzbnVsbCwgTlVMTCk7CiAJaWYg KGZvdW5kKQogCQlFeGVjU3RvcmVWaXJ0dWFsVHVwbGUoc2xvdCk7CiAKQEAgLTExODMsNyArMTE4 Myw3IEBAIGZpbGVfYWNxdWlyZV9zYW1wbGVfcm93cyhSZWxhdGlvbiBvbmVyZWwsIGludCBlbGV2 ZWwsCiAJCU1lbW9yeUNvbnRleHRSZXNldCh0dXBjb250ZXh0KTsKIAkJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKHR1cGNvbnRleHQpOwogCi0JCWZvdW5kID0gTmV4dENvcHlGcm9tKGNzdGF0ZSwgTlVM TCwgdmFsdWVzLCBudWxscyk7CisJCWZvdW5kID0gTmV4dENvcHlGcm9tKGNzdGF0ZSwgTlVMTCwg dmFsdWVzLCBudWxscywgTlVMTCk7CiAKIAkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRl eHQpOwogCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2NvcHkuc2dtbCBiL2RvYy9zcmMv c2dtbC9yZWYvY29weS5zZ21sCmluZGV4IDIxYTVjNGEwLi5hZTEzYzNiNiAxMDA2NDQKLS0tIGEv ZG9jL3NyYy9zZ21sL3JlZi9jb3B5LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jb3B5LnNn bWwKQEAgLTQ0LDYgKzQ0LDcgQEAgQ09QWSB7IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVy Ij50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gWyAoIDxyZXBsYWNlYWJsZQogICAgIEZPUkNFX05P VF9OVUxMIHsgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Y29sdW1uX25hbWU8L3Jl cGxhY2VhYmxlPiBbLCAuLi5dICkgfCAqIH0KICAgICBGT1JDRV9OVUxMIHsgKCA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+Y29sdW1uX25hbWU8L3JlcGxhY2VhYmxlPiBbLCAuLi5dICkg fCAqIH0KICAgICBPTl9FUlJPUiAnPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmVycm9y X2FjdGlvbjwvcmVwbGFjZWFibGU+JworICAgIFRBQkxFICc8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+ZXJyb3Jfc2F2aW5nX3RibDwvcmVwbGFjZWFibGU+JwogICAgIEVOQ09ESU5HICc8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZW5jb2RpbmdfbmFtZTwvcmVwbGFjZWFibGU+ JwogPC9zeW5vcHNpcz4KICA8L3JlZnN5bm9wc2lzZGl2PgpAQCAtMzgwLDEyICszODEsMTQgQEAg Q09QWSB7IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9uYW1lPC9yZXBsYWNl YWJsZT4gWyAoIDxyZXBsYWNlYWJsZQogICAgICA8cGFyYT4KICAgICAgIFNwZWNpZmllcyB3aGlj aCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+CiAgICAgICBlcnJvcl9hY3Rpb248L3Jl cGxhY2VhYmxlPiB0byBwZXJmb3JtIHdoZW4gdGhlcmUgaXMgbWFsZm9ybWVkIGRhdGEgaW4gdGhl IGlucHV0LgotICAgICAgQ3VycmVudGx5LCBvbmx5IDxsaXRlcmFsPnN0b3A8L2xpdGVyYWw+IChk ZWZhdWx0KSBhbmQgPGxpdGVyYWw+aWdub3JlPC9saXRlcmFsPgorICAgICAgQ3VycmVudGx5LCBv bmx5IDxsaXRlcmFsPnN0b3A8L2xpdGVyYWw+IChkZWZhdWx0KSAsIDxsaXRlcmFsPmlnbm9yZTwv bGl0ZXJhbD4sIDxsaXRlcmFsPnRhYmxlPC9saXRlcmFsPgogICAgICAgdmFsdWVzIGFyZSBzdXBw b3J0ZWQuCiAgICAgICBJZiB0aGUgPGxpdGVyYWw+c3RvcDwvbGl0ZXJhbD4gdmFsdWUgaXMgc3Bl Y2lmaWVkLAogICAgICAgPGNvbW1hbmQ+Q09QWTwvY29tbWFuZD4gc3RvcHMgb3BlcmF0aW9uIGF0 IHRoZSBmaXJzdCBlcnJvci4KICAgICAgIElmIHRoZSA8bGl0ZXJhbD5pZ25vcmU8L2xpdGVyYWw+ IHZhbHVlIGlzIHNwZWNpZmllZCwKICAgICAgIDxjb21tYW5kPkNPUFk8L2NvbW1hbmQ+IHNraXBz IG1hbGZvcm1lZCBkYXRhIGFuZCBjb250aW51ZXMgY29weWluZyBkYXRhLgorICAgICAgSWYgdGhl IDxsaXRlcmFsPnRhYmxlPC9saXRlcmFsPiB2YWx1ZSBpcyBzcGVjaWZpZWQsCisgICAgICA8Y29t bWFuZD5DT1BZPC9jb21tYW5kPiBza2lwcyBtYWxmb3JtZWQgZGF0YSBhbmQgY29udGludWVzIGNv cHlpbmcgZGF0YSwgaXQgYXNsbyBpbnNlcnQgZXJyb3IgcmVsYXRlZCBpbmZvcm1hdGlvbiB0byA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZXJyb3Jfc2F2aW5nX3RibDwvcmVwbGFjZWFi bGU+LgogICAgICAgVGhlIG9wdGlvbiBpcyBhbGxvd2VkIG9ubHkgaW4gPGNvbW1hbmQ+Q09QWSBG Uk9NPC9jb21tYW5kPi4KICAgICAgIE9ubHkgPGxpdGVyYWw+c3RvcDwvbGl0ZXJhbD4gdmFsdWUg aXMgYWxsb3dlZCB3aGVuCiAgICAgICB1c2luZyA8bGl0ZXJhbD5iaW5hcnk8L2xpdGVyYWw+IGZv cm1hdC4KQEAgLTQwNSw2ICs0MDgsMTA3IEBAIENPUFkgeyA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFsgKCA8cmVwbGFjZWFibGUKICAgICA8 L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAg PHRlcm0+PGxpdGVyYWw+dGFibGU8L2xpdGVyYWw+PC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAg ICAgPHBhcmE+CisgICAgICBTYXZlIGVycm9yIGluZm9ybWF0aW9uIHRvIHRoZSB0YWJsZSA8cmVw bGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZXJyb3Jfc2F2aW5nX3RhYmxlPC9yZXBsYWNlYWJs ZT4KKyAgICB3aGVuIGl0IGVuY291bnRlcnMgYW4gZXJyb3Igd2hpbGUgZG9pbmcgPGNvbW1hbmQ+ Q09QWSBGUk9NPC9jb21tYW5kPiBvcGVyYXRpb24uCisgICAgVGhlIHRhYmxlLCA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+ZXJyb3Jfc2F2aW5nX3RhYmxlPC9yZXBsYWNlYWJsZT4ncyBz Y2hlbWEgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgc2NoZW1hIG9mCisgICAgPGNvbW1hbmQ+Q09Q WSBGUk9NPC9jb21tYW5kPiBkZXN0aW5hdGlvbiB0YWJsZS4KKyAgICBUaGlzIG9wdGlvbiBpcyBh bGxvd2VkIG9ubHkgaW4gPGNvbW1hbmQ+Q09QWSBGUk9NPC9jb21tYW5kPiBhbmQKKyAgICA8bGl0 ZXJhbD5PTl9FUlJPUjwvbGl0ZXJhbD4gaXMgc3BlY2lmaWVkIHdpdGggPGxpdGVyYWw+VEFCTEU8 L2xpdGVyYWw+LgorICAgIFRoZSA8Y29tbWFuZD5DT1BZIEZST008L2NvbW1hbmQ+IHVzZXIgcmVx dWlyZXMgPGxpdGVyYWw+SU5TRVJUPC9saXRlcmFsPiBwcml2aWxlZ2VzIGZvciBlY2FoIGNvbHVt biBpbiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZXJyb3Jfc2F2aW5nX3RhYmxlPC9y ZXBsYWNlYWJsZT4uCisgICAgSWYgdGhpcyBvcHRpb24gaXMgb21pdHRlZCwgdGhlIDxsaXRlcmFs Pk9OX0VSUk9SPC9saXRlcmFsPiBwYXJhbWV0ZXIgbXVzdCBub3Qgc3BlY2lmaWVkIHdpdGggPGxp dGVyYWw+dGFibGU8L2xpdGVyYWw+LgorPC9wYXJhPgorICAgPHBhcmE+CisgICAgSWYgdGFibGUg PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmVycm9yX3NhdmluZ190YWJsZTwvcmVwbGFj ZWFibGU+IGRvZXMgbm90IGV4aXN0cyBvciBtZWV0IHRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbiAo Y29sdW1uIG9yZGVyIHNob3VsZCBhbHNvIGJlIHRoZSBzYW1lKSwgYW4gZXJyb3Igd2lsbCBiZSBy YWlzZWQuCisKKzxpbmZvcm1hbHRhYmxlPgorICAgIDx0Z3JvdXAgY29scz0iMyI+CisgICAgIDx0 aGVhZD4KKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5PkNvbHVtbiBuYW1lPC9lbnRyeT4KKyAg ICAgICA8ZW50cnk+RGF0YSB0eXBlPC9lbnRyeT4KKyAgICAgICA8ZW50cnk+RGVzY3JpcHRpb248 L2VudHJ5PgorICAgICAgPC9yb3c+CisgICAgIDwvdGhlYWQ+CisKKyAgICAgIDx0Ym9keT4KKyAg ICAgICA8cm93PgorICAgICAgIDxlbnRyeT4gPGxpdGVyYWw+dXNlcmlkPC9saXRlcmFsPiA8L2Vu dHJ5PgorICAgICAgIDxlbnRyeT48dHlwZT5vaWQ8L3R5cGU+PC9lbnRyeT4KKyAgICAgICA8ZW50 cnk+VGhlIHVzZXIgZ2VuZXJhdGVkIHRoZSBlcnJvci4KKyAgICAgICBSZWZlcmVuY2UgPGxpbmsg bGlua2VuZD0iY2F0YWxvZy1wZy1hdXRoaWQiPjxzdHJ1Y3RuYW1lPnBnX2F1dGhpZDwvc3RydWN0 bmFtZT48L2xpbms+LjxzdHJ1Y3RmaWVsZD5vaWQ8L3N0cnVjdGZpZWxkPiwKKyAgICAgICBIb3dl dmVyIHRoZXJlIGlzIG5vIGhhcmQgZGVwZW5lZGVuY3kgd2l0aCBjYXRhbG9nIDxsaXRlcmFsPnBn X2F1dGhpZDwvbGl0ZXJhbD4uIElmIHRoZSBjb3JyZXNwb25kIHJvdyBvbiA8bGl0ZXJhbD5wZ19h dXRoaWQ8L2xpdGVyYWw+IGRlbGV0ZWQsIHRoaXMgdmFsdWUgYmVjb21lIHN0YWxlLgorICAgIDwv ZW50cnk+CisgICAgICAgPC9yb3c+CisKKyAgICAgICA8cm93PgorICAgICAgIDxlbnRyeT4gPGxp dGVyYWw+Y29weV90Ymw8L2xpdGVyYWw+IDwvZW50cnk+CisgICAgICAgPGVudHJ5Pjx0eXBlPm9p ZDwvdHlwZT48L2VudHJ5PgorICAgICAgIDxlbnRyeT5UaGUgPGNvbW1hbmQ+Q09QWSBGUk9NPC9j b21tYW5kPiBvcGVyYXRpb24gZGVzdGluYXRpb24gdGFibGUgb2lkLgorICAgICAgICBSZWZlcmVu Y2UgPGxpbmsgbGlua2VuZD0iY2F0YWxvZy1wZy1jbGFzcyI+PHN0cnVjdG5hbWU+cGdfY2xhc3M8 L3N0cnVjdG5hbWU+PC9saW5rPi48c3RydWN0ZmllbGQ+b2lkPC9zdHJ1Y3RmaWVsZD4sCisgICAg ICAgIEhvd2V2ZXIgdGhlcmUgaXMgbm8gaGFyZCBkZXBlbmVkZW5jeSB3aXRoIGNhdGFsb2cgPGxp dGVyYWw+cGdfY2xhc3M8L2xpdGVyYWw+LiBJZiB0aGUgY29ycmVzcG9uZCByb3cgb24gPGxpdGVy YWw+cGdfY2xhc3M8L2xpdGVyYWw+IGRlbGV0ZWQsIHRoaXMgdmFsdWUgYmVjb21lIHN0YWxlLgor ICAgICAgICA8L2VudHJ5PgorICAgICAgIDwvcm93PgorCisgICAgICAgPHJvdz4KKyAgICAgICA8 ZW50cnk+IDxsaXRlcmFsPmZpbGVuYW1lPC9saXRlcmFsPiA8L2VudHJ5PgorICAgICAgIDxlbnRy eT48dHlwZT50ZXh0PC90eXBlPjwvZW50cnk+CisgICAgICAgPGVudHJ5PlRoZSBwYXRoIG5hbWUg b2YgdGhlIDxjb21tYW5kPkNPUFkgRlJPTTwvY29tbWFuZD4gaW5wdXQ8L2VudHJ5PgorICAgICAg IDwvcm93PgorCisgICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnk+IDxsaXRlcmFsPmxpbmVubzwv bGl0ZXJhbD4gPC9lbnRyeT4KKyAgICAgICA8ZW50cnk+PHR5cGU+YmlnaW50PC90eXBlPjwvZW50 cnk+CisgICAgICAgPGVudHJ5PkxpbmUgbnVtYmVyIHdoZXJlIHRoZSBlcnJvciBvY2N1cnJlZCwg Y291bnRpbmcgZnJvbSAxPC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKworICAgICAgIDxyb3c+Cisg ICAgICAgPGVudHJ5PiA8bGl0ZXJhbD5saW5lPC9saXRlcmFsPiA8L2VudHJ5PgorICAgICAgIDxl bnRyeT48dHlwZT50ZXh0PC90eXBlPjwvZW50cnk+CisgICAgICAgPGVudHJ5PlJhdyBjb250ZW50 IG9mIHRoZSBlcnJvciBvY2N1cnJlZCBsaW5lPC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKworICAg ICAgIDxyb3c+CisgICAgICAgPGVudHJ5PiA8bGl0ZXJhbD5jb2xuYW1lPC9saXRlcmFsPiA8L2Vu dHJ5PgorICAgICAgIDxlbnRyeT48dHlwZT50ZXh0PC90eXBlPjwvZW50cnk+CisgICAgICAgPGVu dHJ5PkZpZWxkIHdoZXJlIHRoZSBlcnJvciBvY2N1cnJlZDwvZW50cnk+CisgICAgICAgPC9yb3c+ CisKKyAgICAgICA8cm93PgorICAgICAgIDxlbnRyeT4gPGxpdGVyYWw+cmF3X2ZpZWxkX3ZhbHVl PC9saXRlcmFsPiA8L2VudHJ5PgorICAgICAgIDxlbnRyeT48dHlwZT50ZXh0PC90eXBlPjwvZW50 cnk+CisgICAgICAgPGVudHJ5PlJhdyBjb250ZW50IG9mIHRoZSBlcnJvciBvY2N1cnJlZCBmaWVs ZDwvZW50cnk+CisgICAgICAgPC9yb3c+CisKKyAgICAgICA8cm93PgorICAgICAgIDxlbnRyeT4g PGxpdGVyYWw+ZXJyX21lc3NhZ2UgPC9saXRlcmFsPiA8L2VudHJ5PgorICAgICAgIDxlbnRyeT48 dHlwZT50ZXh0PC90eXBlPjwvZW50cnk+CisgICAgICAgPGVudHJ5PlRoZSBlcnJvciBtZXNzYWdl PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKworICAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5PiA8 bGl0ZXJhbD5lcnJfZGV0YWlsPC9saXRlcmFsPiA8L2VudHJ5PgorICAgICAgIDxlbnRyeT48dHlw ZT50ZXh0PC90eXBlPjwvZW50cnk+CisgICAgICAgPGVudHJ5PkRldGFpbGVkIGVycm9yIG1lc3Nh Z2UgPC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKworICAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5 PiA8bGl0ZXJhbD5lcnJvcmNvZGUgPC9saXRlcmFsPiA8L2VudHJ5PgorICAgICAgIDxlbnRyeT48 dHlwZT50ZXh0PC90eXBlPjwvZW50cnk+CisgICAgICAgPGVudHJ5PlRoZSBlcnJvciBjb2RlIDwv ZW50cnk+CisgICAgICAgPC9yb3c+CisKKyAgICAgIDwvdGJvZHk+CisgICAgIDwvdGdyb3VwPgor ICAgPC9pbmZvcm1hbHRhYmxlPgorCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAg PC92YXJsaXN0ZW50cnk+CisKICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgPHRlcm0+PGxpdGVyYWw+ V0hFUkU8L2xpdGVyYWw+PC90ZXJtPgogICAgIDxsaXN0aXRlbT4KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2NvcHkuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYwppbmRl eCBjYzA3ODZjNi4uYzdkMjQ5MTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Nv cHkuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMKQEAgLTQyMyw2ICs0MjMsOCBA QCBkZWZHZXRDb3B5T25FcnJvckNob2ljZShEZWZFbGVtICpkZWYsIFBhcnNlU3RhdGUgKnBzdGF0 ZSwgYm9vbCBpc19mcm9tKQogCWlmIChwZ19zdHJjYXNlY21wKHN2YWwsICJpZ25vcmUiKSA9PSAw KQogCQlyZXR1cm4gQ09QWV9PTl9FUlJPUl9JR05PUkU7CiAKKwlpZiAocGdfc3RyY2FzZWNtcChz dmFsLCAidGFibGUiKSA9PSAwKQorCQlyZXR1cm4gQ09QWV9PTl9FUlJPUl9UQUJMRTsKIAllcmVw b3J0KEVSUk9SLAogCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSks CiAJCQkgZXJybXNnKCJDT1BZIE9OX0VSUk9SIFwiJXNcIiBub3QgcmVjb2duaXplZCIsIHN2YWwp LApAQCAtNDU2LDYgKzQ1OCw3IEBAIFByb2Nlc3NDb3B5T3B0aW9ucyhQYXJzZVN0YXRlICpwc3Rh dGUsCiAJYm9vbAkJZnJlZXplX3NwZWNpZmllZCA9IGZhbHNlOwogCWJvb2wJCWhlYWRlcl9zcGVj aWZpZWQgPSBmYWxzZTsKIAlib29sCQlvbl9lcnJvcl9zcGVjaWZpZWQgPSBmYWxzZTsKKwlib29s CQlvbl9lcnJvcl90Ymxfc3BlY2lmaWVkID0gZmFsc2U7CiAJTGlzdENlbGwgICAqb3B0aW9uOwog CiAJLyogU3VwcG9ydCBleHRlcm5hbCB1c2UgZm9yIG9wdGlvbiBzYW5pdHkgY2hlY2tpbmcgKi8K QEAgLTYxNSw2ICs2MTgsMjAgQEAgUHJvY2Vzc0NvcHlPcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0 ZSwKIAkJCW9uX2Vycm9yX3NwZWNpZmllZCA9IHRydWU7CiAJCQlvcHRzX291dC0+b25fZXJyb3Ig PSBkZWZHZXRDb3B5T25FcnJvckNob2ljZShkZWZlbCwgcHN0YXRlLCBpc19mcm9tKTsKIAkJfQor CQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJ0YWJsZSIpID09IDApCisJCXsKKwkJ CWlmIChvbl9lcnJvcl90Ymxfc3BlY2lmaWVkKQorCQkJCWVycm9yQ29uZmxpY3RpbmdEZWZFbGVt KGRlZmVsLCBwc3RhdGUpOworCQkJb25fZXJyb3JfdGJsX3NwZWNpZmllZCA9IHRydWU7CisKKwkJ CW9wdHNfb3V0LT5vbl9lcnJvcl90YmwgPSBkZWZHZXRTdHJpbmcoZGVmZWwpOworCQkJaWYgKCFv cHRzX291dC0+b25fZXJyb3JfdGJsKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29k ZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImFyZ3Vt ZW50IHRvIG9wdGlvbiBcIiVzXCIgbXVzdCBiZSBhIHZhbGlkIHRhYmxlIG5hbWUiLAorCQkJCQkJ CWRlZmVsLT5kZWZuYW1lKSwKKwkJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBkZWZl bC0+bG9jYXRpb24pKSk7CisJCX0KIAkJZWxzZQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVy cmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLApAQCAtNjIzLDYgKzY0MCwxNSBAQCBQcm9jZXNz Q29weU9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9u KHBzdGF0ZSwgZGVmZWwtPmxvY2F0aW9uKSkpOwogCX0KIAorCWlmICghb25fZXJyb3JfdGJsX3Nw ZWNpZmllZCAmJiBvcHRzX291dC0+b25fZXJyb3IgPT0gQ09QWV9PTl9FUlJPUl9UQUJMRSkKKwkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKKwkJCQkgZXJybXNnKCJhcmd1bWVudCB0byBvcHRpb24gXCJ0YWJsZVwiIGNhbiBvbmx5 IGFwcGxpZWQgd2hlbiBPTiBFUlJPUiBpcyBzcGVjaWZpZWQiKSkpOworCisJaWYgKG9uX2Vycm9y X3RibF9zcGVjaWZpZWQgJiYgb3B0c19vdXQtPm9uX2Vycm9yICE9IENPUFlfT05fRVJST1JfVEFC TEUpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFN RVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiYXJndW1lbnQgdG8gb3B0aW9uIFwidGFibGVcIiBj YW4gb25seSBhcHBsaWVkIHdoZW4gT04gRVJST1IgaXMgc3BlY2lmaWVkIikpKTsKIAkvKgogCSAq IENoZWNrIGZvciBpbmNvbXBhdGlibGUgb3B0aW9ucyAobXVzdCBkbyB0aGVzZSB0d28gYmVmb3Jl IGluc2VydGluZwogCSAqIGRlZmF1bHRzKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvY29weWZyb20uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMKaW5kZXggMWZl NzBiOTEuLmI1Njc4MzE3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJv bS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMKQEAgLTM3LDYgKzM3LDcg QEAKICNpbmNsdWRlICJleGVjdXRvci9leGVjUGFydGl0aW9uLmgiCiAjaW5jbHVkZSAiZXhlY3V0 b3IvZXhlY3V0b3IuaCIKICNpbmNsdWRlICJleGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuaCIKKyNp bmNsdWRlICJleGVjdXRvci9zcGkuaCIKICNpbmNsdWRlICJleGVjdXRvci90dXB0YWJsZS5oIgog I2luY2x1ZGUgImZvcmVpZ24vZmR3YXBpLmgiCiAjaW5jbHVkZSAibGlicHEvbGlicHEuaCIKQEAg LTQ3LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJyZXdyaXRlL3Jl d3JpdGVIYW5kbGVyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgorI2luY2x1ZGUgInN0b3Jh Z2UvbG1nci5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNsdWRlICJ1dGlscy9s c3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgpAQCAtNjU1LDExICs2NTcs MjAgQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAJYm9vbAkJaGFzX2luc3RlYWRf aW5zZXJ0X3Jvd190cmlnOwogCWJvb2wJCWxlYWZwYXJ0X3VzZV9tdWx0aV9pbnNlcnQgPSBmYWxz ZTsKIAorCS8qIHRoZSBlcnJvciBpbmZvcmFtdGlvbiB3aGlsZSBkb2luZyBOZXh0Q29weUZyb20g c2F2aW5nIHRhYmxlICovCisJUmVsYXRpb24Jb25fZXJyb3JfcmVsCT0gTlVMTDsKKwogCUFzc2Vy dChjc3RhdGUtPnJlbCk7CiAJQXNzZXJ0KGxpc3RfbGVuZ3RoKGNzdGF0ZS0+cmFuZ2VfdGFibGUp ID09IDEpOwogCiAJaWYgKGNzdGF0ZS0+b3B0cy5vbl9lcnJvciAhPSBDT1BZX09OX0VSUk9SX1NU T1ApCiAJCUFzc2VydChjc3RhdGUtPmVzY29udGV4dCk7CisJaWYgKGNzdGF0ZS0+b3B0cy5vbl9l cnJvciA9PSBDT1BZX09OX0VSUk9SX1RBQkxFKQorCXsKKwkJQXNzZXJ0KGNzdGF0ZS0+b3B0cy5v bl9lcnJvcl90YmwpOworCQlvbl9lcnJvcl9yZWwgPSB0YWJsZV9vcGVuKFJlbG5hbWVHZXRSZWxp ZChjc3RhdGUtPm9wdHMub25fZXJyb3JfdGJsKSwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJdGFibGVf Y2xvc2Uob25fZXJyb3JfcmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCX0KIAogCS8qCiAJICogVGhl IHRhcmdldCBtdXN0IGJlIGEgcGxhaW4sIGZvcmVpZ24sIG9yIHBhcnRpdGlvbmVkIHJlbGF0aW9u LCBvciBoYXZlCkBAIC05OTQsNyArMTAwNSw3IEBAIENvcHlGcm9tKENvcHlGcm9tU3RhdGUgY3N0 YXRlKQogCQlFeGVjQ2xlYXJUdXBsZShteXNsb3QpOwogCiAJCS8qIERpcmVjdGx5IHN0b3JlIHRo ZSB2YWx1ZXMvbnVsbHMgYXJyYXkgaW4gdGhlIHNsb3QgKi8KLQkJaWYgKCFOZXh0Q29weUZyb20o Y3N0YXRlLCBlY29udGV4dCwgbXlzbG90LT50dHNfdmFsdWVzLCBteXNsb3QtPnR0c19pc251bGwp KQorCQlpZiAoIU5leHRDb3B5RnJvbShjc3RhdGUsIGVjb250ZXh0LCBteXNsb3QtPnR0c192YWx1 ZXMsIG15c2xvdC0+dHRzX2lzbnVsbCwgb25fZXJyb3JfcmVsKSkKIAkJCWJyZWFrOwogCiAJCWlm IChjc3RhdGUtPm9wdHMub25fZXJyb3IgIT0gQ09QWV9PTl9FUlJPUl9TVE9QICYmCkBAIC0xMDE3 LDYgKzEwMjgsMTIgQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAJCQlwZ3N0YXRf cHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NPUFlfVFVQTEVTX1NLSVBQRUQsCiAJCQkJ CQkJCQkJICsrc2tpcHBlZCk7CiAKKwkJCWlmIChjc3RhdGUtPm9wdHMub25fZXJyb3IgPT0gQ09Q WV9PTl9FUlJPUl9UQUJMRSkKKwkJCXsKKwkJCQljc3RhdGUtPmVzY29udGV4dC0+ZXJyb3Jfb2Nj dXJyZWQgPSBmYWxzZTsKKwkJCQljc3RhdGUtPmVzY29udGV4dC0+ZGV0YWlsc193YW50ZWQgPSB0 cnVlOworCQkJCW1lbXNldChjc3RhdGUtPmVzY29udGV4dC0+ZXJyb3JfZGF0YSwwLCBzaXplb2Yo RXJyb3JEYXRhKSk7CisJCQl9CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0xNDcyLDYgKzE0ODks MTE2IEBAIEJlZ2luQ29weUZyb20oUGFyc2VTdGF0ZSAqcHN0YXRlLAogCWVsc2UKIAkJY3N0YXRl LT5lc2NvbnRleHQgPSBOVUxMOwogCisJaWYgKGNzdGF0ZS0+b3B0cy5vbl9lcnJvciA9PSBDT1BZ X09OX0VSUk9SX1RBQkxFKQorCXsKKwkJU3RyaW5nSW5mb0RhdGEgCXF1ZXJ5YnVmOworCQlPaWQJ CQllcnJfdGJsOworCQljb25zdAkJY2hhciogY29weV9uc3BuYW1lOworCQlPaWQJCQljb3B5X25z cG9pZDsKKwkJYm9vbAkJb25fZXJyb3JfdGJsX29rOworCQlib29sCQlpc251bGw7CisKKwkJQXNz ZXJ0KGNzdGF0ZS0+ZXNjb250ZXh0ICE9IE5VTEwpOworCQlBc3NlcnQoY3N0YXRlLT5vcHRzLm9u X2Vycm9yX3RibCAhPSBOVUxMKTsKKworCQkvKiBDT1BZIEZST00gZGVzdGluYXRpb24gdGFibGUg c2NoZW1hcyBzaG91bGQgYmUgc2FtZSBhcyB0aGUgZXJyb3Jfc2F2aW5nIHRhYmxlICovCisJCWNv cHlfbnNwbmFtZSA9IGdldF9uYW1lc3BhY2VfbmFtZShSZWxhdGlvbkdldE5hbWVzcGFjZShjc3Rh dGUtPnJlbCkpOworCQljb3B5X25zcG9pZCA9IGdldF9uYW1lc3BhY2Vfb2lkKGNvcHlfbnNwbmFt ZSwgZmFsc2UpOworCQllcnJfdGJsID0gZ2V0X3JlbG5hbWVfcmVsaWQoY3N0YXRlLT5vcHRzLm9u X2Vycm9yX3RibCwgY29weV9uc3BvaWQpOworCisJCWlmICghT2lkSXNWYWxpZChlcnJfdGJsKSkK KwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVU RVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJlcnJvciBzYXZpbmcgdGFibGUgXCIlc1wiLlwiJXNc IiBkb2VzIG5vdCBleGlzdCIsCisJCQkJCQkJY29weV9uc3BuYW1lLCBjc3RhdGUtPm9wdHMub25f ZXJyb3JfdGJsKSkpOworCisJCS8qCisJCSAqIHdlIG1heSBuZWVkIGluc2VydCB0dXBsZXMgdG8g dGhlIGVycm9yIHNhdmluZyB0YWJsZSwgdG8gZG8gdGhhdCB3ZSBuZWVkCisJCSAqIGZpcnN0IGNo ZWNrIHRoZSBsb2NrIGNvbmRpdGlvbi4gSWYgdGhlIHRhYmxlIGlzIGFscmVhZHkgdWRuZXIgaGVh dnkgbG9ja2VkLAorCQkgKiB0aGVuIG91ciBDT1BZIG9wZXJhdGlvbiB3b3VsZCBiZSBzdHVjay4K KwkJICogaW5zdGVhZCBvZiBsZXQgQ09QWSBzdHVjaywganVzdCBlcnJvciByZXBvcnQgdGhhdCB0 aGUgdGFibGUgaXMgaW4gaGVhdnkgbG9jay4KKwkJKi8KKwkJaW5pdFN0cmluZ0luZm8oJnF1ZXJ5 YnVmKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmcXVlcnlidWYsCisJCQkic2VsZWN0IDEgYXMgZXhp c3RzIGZyb20gKCAiCisJCQkic2VsZWN0CTEgIgorCQkJImZyb20gCXBnX2NsYXNzLCBwZ19sb2Nr cyAiCisJCQkid2hlcmUJcGdfY2xhc3Mub2lkID0gcGdfbG9ja3MucmVsYXRpb24gIgorCQkJImFu ZCAJcGdfY2xhc3MucmVsbmFtZXNwYWNlID0gJWQgIgorCQkJImFuZCAJcGdfY2xhc3Mub2lkID0g JWQgIgorCQkJImFuZCAJbW9kZSBub3QgaW4gKCdBY2Nlc3NTaGFyZUxvY2snLCAnUm93U2hhcmVM b2NrJywgJ1Jvd0V4Y2x1c2l2ZUxvY2snKSk7ICIKKwkJCSxjb3B5X25zcG9pZCwgZXJyX3RibCk7 CisKKwkJaWYgKFNQSV9jb25uZWN0KCkgIT0gU1BJX09LX0NPTk5FQ1QpCisJCQllbG9nKEVSUk9S LCAiU1BJX2Nvbm5lY3QgZmFpbGVkIik7CisKKwkJaWYgKFNQSV9leGVjdXRlKHF1ZXJ5YnVmLmRh dGEsIGZhbHNlLCAwKSAhPSBTUElfT0tfU0VMRUNUKQorCQkJZWxvZyhFUlJPUiwgIlNQSV9leGVj IGZhaWxlZDogJXMiLCBxdWVyeWJ1Zi5kYXRhKTsKKworCQlpZiAoU1BJX3Byb2Nlc3NlZCAhPSAw KQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFN RVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coInRhYmxlIFwiJXNcIi5cIiVzXCIgd2FzIGxvY2tl ZCwgY2Fubm90IGJlIHVzZWQgZm9yIGVycm9yIHNhdmluZyIKKwkJCQkJIAkJLGNvcHlfbnNwbmFt ZSwgY3N0YXRlLT5vcHRzLm9uX2Vycm9yX3RibCkpKTsKKwkJU1BJX3Byb2Nlc3NlZCA9IDA7CisJ CXJlc2V0U3RyaW5nSW5mbygmcXVlcnlidWYpOworCisJCS8qCisJCSAqCisJCSAqIFZlcmlmeSB3 aGV0aGVyIHRoZSBlcnJvciBzYXZpbmcgdGFibGUgYWxyZWFkeSBleGlzdHMsIGFuZCBpZiBzbywK KwkJICogZXhhbWluZSBpdCdzIGNvbHVtbiBuYW1lcyBhbmQgZGF0YSB0eXBlcy4gY3VycmVudCB1 c2VyIHJlcXVpcmVzCisJCSAqIElOU0VSVCBwcmV2aWxlZGdlIGZvciBlYWNoIGNvbHVtbnMgaW4g ZXJyb3Igc2F2aW5nIHRhYmxlCisJCSAqCisJCSovCisJCWFwcGVuZFN0cmluZ0luZm8oJnF1ZXJ5 YnVmLAorCQkJCQkJIlNFTEVDVCAoYXJyYXlfYWdnKHBhLmF0dG5hbWUgT1JERVIgQlkgcGEuYXR0 bnVtKSAiCisJCQkJCQkJIj0gJ3tjdGlkLHVzZXJpZCxjb3B5X3RibCxmaWxlbmFtZSxsaW5lbm8s ICIKKwkJCQkJCQkibGluZSxjb2xuYW1lLHJhd19maWVsZF92YWx1ZSxlcnJfbWVzc2FnZSxlcnJf ZGV0YWlsLGVycm9yY29kZX0nKSAiCisJCQkJCQkJIkFORCAoQVJSQVlfQUdHKHB0LnR5cG5hbWUg T1JERVIgQlkgcGEuYXR0bnVtKSAiCisJCQkJCQkJIj0gJ3t0aWQsb2lkLG9pZCx0ZXh0LGludDgs dGV4dCx0ZXh0LHRleHQsdGV4dCx0ZXh0LHRleHR9JykgIgorCQkJCQkJCSJGUk9NIHBnX2NhdGFs b2cucGdfYXR0cmlidXRlIHBhICIKKwkJCQkJCQkiSk9JTiBwZ19jYXRhbG9nLnBnX2NsYXNzIHBj IE9OIHBjLm9pZCA9IHBhLmF0dHJlbGlkICIKKwkJCQkJCQkiSk9JTiBwZ19jYXRhbG9nLnBnX3R5 cGUgcHQgT04gcHQub2lkID0gcGEuYXR0dHlwaWQgIgorCQkJCQkJCSJKT0lOIHBnX2NhdGFsb2cu cGdfbmFtZXNwYWNlIHBuICIKKwkJCQkJCQkiT04gcG4ub2lkID0gcGMucmVsbmFtZXNwYWNlIFdI RVJFICIpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZxdWVyeWJ1ZiwKKwkJCQkJCQkicG4ubnNwbmFt ZSA9ICQkJXMkJCBBTkQgcmVsbmFtZSA9ICQkJXMkJCAiCisJCQkJCQkJIiBBTkQgcGEuYXR0bnVt ID49IC0xIEFORCBOT1QgYXR0aXNkcm9wcGVkICIKKwkJCQkJCQkiQU5EIGhhc19jb2x1bW5fcHJp dmlsZWdlIChDVVJSRU5UX1VTRVIsICQkJXMkJCwgMTo6c21hbGxpbnQsICdJTlNFUlQnKSAiCisJ CQkJCQkJIkFORCBoYXNfY29sdW1uX3ByaXZpbGVnZSAoQ1VSUkVOVF9VU0VSLCAkJCVzJCQsIDI6 OnNtYWxsaW50LCAnSU5TRVJUJykgIgorCQkJCQkJCSJBTkQgaGFzX2NvbHVtbl9wcml2aWxlZ2Ug KENVUlJFTlRfVVNFUiwgJCQlcyQkLCAzOjpzbWFsbGludCwgJ0lOU0VSVCcpICIKKwkJCQkJCQki QU5EIGhhc19jb2x1bW5fcHJpdmlsZWdlIChDVVJSRU5UX1VTRVIsICQkJXMkJCwgNDo6c21hbGxp bnQsICdJTlNFUlQnKSAiCisJCQkJCQkJIkFORCBoYXNfY29sdW1uX3ByaXZpbGVnZSAoQ1VSUkVO VF9VU0VSLCAkJCVzJCQsIDU6OnNtYWxsaW50LCAnSU5TRVJUJykgIgorCQkJCQkJCSJBTkQgaGFz X2NvbHVtbl9wcml2aWxlZ2UgKENVUlJFTlRfVVNFUiwgJCQlcyQkLCA2OjpzbWFsbGludCwgJ0lO U0VSVCcpICIKKwkJCQkJCQkiQU5EIGhhc19jb2x1bW5fcHJpdmlsZWdlIChDVVJSRU5UX1VTRVIs ICQkJXMkJCwgNzo6c21hbGxpbnQsICdJTlNFUlQnKSAiCisJCQkJCQkJIkFORCBoYXNfY29sdW1u X3ByaXZpbGVnZSAoQ1VSUkVOVF9VU0VSLCAkJCVzJCQsIDg6OnNtYWxsaW50LCAnSU5TRVJUJykg IgorCQkJCQkJCSJBTkQgaGFzX2NvbHVtbl9wcml2aWxlZ2UgKENVUlJFTlRfVVNFUiwgJCQlcyQk LCA5OjpzbWFsbGludCwgJ0lOU0VSVCcpICIKKwkJCQkJCQkiQU5EIGhhc19jb2x1bW5fcHJpdmls ZWdlIChDVVJSRU5UX1VTRVIsICQkJXMkJCwgMTA6OnNtYWxsaW50LCAnSU5TRVJUJykgIiwKKwkJ CQkJCQljb3B5X25zcG5hbWUsIGNzdGF0ZS0+b3B0cy5vbl9lcnJvcl90YmwsCisJCQkJCQkJY3N0 YXRlLT5vcHRzLm9uX2Vycm9yX3RibCwgY3N0YXRlLT5vcHRzLm9uX2Vycm9yX3RibCwgY3N0YXRl LT5vcHRzLm9uX2Vycm9yX3RibCwKKwkJCQkJCQljc3RhdGUtPm9wdHMub25fZXJyb3JfdGJsLCBj c3RhdGUtPm9wdHMub25fZXJyb3JfdGJsLCBjc3RhdGUtPm9wdHMub25fZXJyb3JfdGJsLAorCQkJ CQkJCWNzdGF0ZS0+b3B0cy5vbl9lcnJvcl90YmwsIGNzdGF0ZS0+b3B0cy5vbl9lcnJvcl90Ymws IGNzdGF0ZS0+b3B0cy5vbl9lcnJvcl90YmwsCisJCQkJCQkJY3N0YXRlLT5vcHRzLm9uX2Vycm9y X3RibCk7CisKKwkJaWYgKFNQSV9leGVjdXRlKHF1ZXJ5YnVmLmRhdGEsIGZhbHNlLCAwKSAhPSBT UElfT0tfU0VMRUNUKQorCQkJZWxvZyhFUlJPUiwgIlNQSV9leGVjIGZhaWxlZDogJXMiLCBxdWVy eWJ1Zi5kYXRhKTsKKwkJb25fZXJyb3JfdGJsX29rID0gRGF0dW1HZXRCb29sKFNQSV9nZXRiaW52 YWwoU1BJX3R1cHRhYmxlLT52YWxzWzBdLAorCQkJCQkJCQkJICAgU1BJX3R1cHRhYmxlLT50dXBk ZXNjLAorCQkJCQkJCQkJICAgMSwgJmlzbnVsbCkpOworCisJCWlmKCFvbl9lcnJvcl90Ymxfb2sp CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1F VEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygidGFibGUgXCIlc1wiLlwiJXNcIiBjYW5ub3QgYmUg dXNlZCBmb3IgQ09QWSBGUk9NIGVycm9yIHNhdmluZyIsIGNvcHlfbnNwbmFtZSwgY3N0YXRlLT5v cHRzLm9uX2Vycm9yX3RibCksCisJCQkJCSBlcnJkZXRhaWwoIlRoZSB0YWJsZSAoXCIlc1wiLlwi JXNcIikgZGF0YSBkZWZpbml0aW9uIGNhbm5vdCBiZSB1c2VkIGZvciBlcnJvciBzYXZpbmcgb3Ig Y3VycmVudCB1c2VyIGRvbid0IGVub3VnaCBwcml2aWxlZGdlIG9uIGl0IiwKKwkJCQkJCQkJY29w eV9uc3BuYW1lLCBjc3RhdGUtPm9wdHMub25fZXJyb3JfdGJsKSwKKwkJCQkJIGVycmhpbnQoIkVu c3VyZSBjdXJyZW50IHVzZXIgaGF2ZSBlbm91Z2ggcHJpdmlsZWRnZSBvbiBcIiVzXCIuXCIlc1wi LCBhbHNvIGVuc3VyZSB0aGUgZGF0YSBkZWZpbml0aW9uIGNhbiBiZSB1c2VkIGZvciBlcnJvciBz YXZpbmciLAorCQkJCQkJCQljb3B5X25zcG5hbWUsIGNzdGF0ZS0+b3B0cy5vbl9lcnJvcl90Ymwp KSk7CisKKwkJaWYgKFNQSV9maW5pc2goKSAhPSBTUElfT0tfRklOSVNIKQorCQkJZWxvZyhFUlJP UiwgIlNQSV9maW5pc2ggZmFpbGVkIik7CisJCWNzdGF0ZS0+ZXNjb250ZXh0LT5kZXRhaWxzX3dh bnRlZCA9IHRydWU7CisJfQogCS8qIENvbnZlcnQgRk9SQ0VfTlVMTCBuYW1lIGxpc3QgdG8gcGVy LWNvbHVtbiBmbGFncywgY2hlY2sgdmFsaWRpdHkgKi8KIAljc3RhdGUtPm9wdHMuZm9yY2VfbnVs bF9mbGFncyA9IChib29sICopIHBhbGxvYzAobnVtX3BoeXNfYXR0cnMgKiBzaXplb2YoYm9vbCkp OwogCWlmIChjc3RhdGUtPm9wdHMuZm9yY2VfbnVsbF9hbGwpCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5 ZnJvbXBhcnNlLmMKaW5kZXggN2NhY2QwYjcuLjE1NzAxN2NmIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv Y29weWZyb21wYXJzZS5jCkBAIC02Niw2ICs2Niw3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvY29w eWZyb21faW50ZXJuYWwuaCIKICNpbmNsdWRlICJjb21tYW5kcy9wcm9ncmVzcy5oIgogI2luY2x1 ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCisjaW5jbHVkZSAiYWNjZXNzL2hlYXBhbS5oIgogI2lu Y2x1ZGUgImxpYnBxL2xpYnBxLmgiCiAjaW5jbHVkZSAibGlicHEvcHFmb3JtYXQuaCIKICNpbmNs dWRlICJtYi9wZ193Y2hhci5oIgpAQCAtODUwLDEwICs4NTEsMTEgQEAgTmV4dENvcHlGcm9tUmF3 RmllbGRzKENvcHlGcm9tU3RhdGUgY3N0YXRlLCBjaGFyICoqKmZpZWxkcywgaW50ICpuZmllbGRz KQogICoKICAqICd2YWx1ZXMnIGFuZCAnbnVsbHMnIGFycmF5cyBtdXN0IGJlIHRoZSBzYW1lIGxl bmd0aCBhcyBjb2x1bW5zIG9mIHRoZQogICogcmVsYXRpb24gcGFzc2VkIHRvIEJlZ2luQ29weUZy b20uIFRoaXMgZnVuY3Rpb24gZmlsbHMgdGhlIGFycmF5cy4KKyAqIGlmIG9uX2Vycm9yIGlzIHNw ZWNpZmllZCB3aXRoICd0YWJsZScsIHRoZW4gb25fZXJyb3JfcmVsIGlzIHRoZSBlcnJvciBzYXZp bmcgdGFibGUKICAqLwogYm9vbAogTmV4dENvcHlGcm9tKENvcHlGcm9tU3RhdGUgY3N0YXRlLCBF eHByQ29udGV4dCAqZWNvbnRleHQsCi0JCQkgRGF0dW0gKnZhbHVlcywgYm9vbCAqbnVsbHMpCisJ CQkgRGF0dW0gKnZhbHVlcywgYm9vbCAqbnVsbHMsIFJlbGF0aW9uIG9uX2Vycm9yX3JlbCkKIHsK IAlUdXBsZURlc2MJdHVwRGVzYzsKIAlBdHRyTnVtYmVyCW51bV9waHlzX2F0dHJzLApAQCAtODYy LDYgKzg2NCw4IEBAIE5leHRDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSwgRXhwckNvbnRl eHQgKmVjb250ZXh0LAogCUZtZ3JJbmZvICAgKmluX2Z1bmN0aW9ucyA9IGNzdGF0ZS0+aW5fZnVu Y3Rpb25zOwogCU9pZAkJICAgKnR5cGlvcGFyYW1zID0gY3N0YXRlLT50eXBpb3BhcmFtczsKIAlp bnQJCQlpOworCUhlYXBUdXBsZQlvbl9lcnJvcl90dXA7CisJVHVwbGVEZXNjCW9uX2Vycm9yX3R1 cERlc2M7CiAJaW50CQkgICAqZGVmbWFwID0gY3N0YXRlLT5kZWZtYXA7CiAJRXhwclN0YXRlICoq ZGVmZXhwcnMgPSBjc3RhdGUtPmRlZmV4cHJzOwogCkBAIC05NjgsNiArOTcyLDUyIEBAIE5leHRD b3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LAogCQkJ CQkJCQkJCQkoTm9kZSAqKSBjc3RhdGUtPmVzY29udGV4dCwKIAkJCQkJCQkJCQkJJnZhbHVlc1tt XSkpCiAJCQl7CisJCQkJaWYgKGNzdGF0ZS0+b3B0cy5vbl9lcnJvciA9PSBDT1BZX09OX0VSUk9S X1RBQkxFKQorCQkJCXsKKwkJCQkJLyogCisJCQkJCSAqIGRldGFpbHMgb2YgZGF0YSBkZWZpbml0 aW9uIG9mIGVycm9yIHNhdmluZyB0YWJsZSwKKwkJCQkJICogc2VlIGZ1bmN0aW9uIEJlZ2luQ29w eUZyb20uIGhlcmUgd2UgYmFzZWQgb24gbm9kZSBFcnJvclNhdmVDb250ZXh0CisJCQkJCSAqIGNv bnRlbnQsIGZvcm0gYSB0dXBsZSBhbmQgaW5zZXJ0IHR1cGxlIHRvIHRoZSBlcnJvciBzYXZpbmcg dGFibGUuCisJCQkJCSAqIHdlIGFsc28gZGlkIGxvY2sgY2hlY2sgaW4gQmVnaW5Db3B5RnJvbS4K KwkJCQkJKi8KKwkJCQkJY2hhcgkqZXJyX2RldGFpbDsKKwkJCQkJY2hhcgkqZXJyX2NvZGU7CisJ CQkJCURhdHVtCQl0X3ZhbHVlc1sxMF0gPSB7MH07CisJCQkJCWJvb2wJCXRfaXNudWxsWzEwXSA9 IHswfTsKKworCQkJCQllcnJfY29kZSA9IHBzdHJkdXAodW5wYWNrX3NxbF9zdGF0ZShjc3RhdGUt PmVzY29udGV4dC0+ZXJyb3JfZGF0YS0+c3FsZXJyY29kZSkpOworCisJCQkJCWlmICghY3N0YXRl LT5lc2NvbnRleHQtPmVycm9yX2RhdGEtPmRldGFpbCkKKwkJCQkJCWVycl9kZXRhaWwgPSBOVUxM OworCQkJCQllbHNlCisJCQkJCQllcnJfZGV0YWlsID0gY3N0YXRlLT5lc2NvbnRleHQtPmVycm9y X2RhdGEtPmRldGFpbDsKKworCQkJCQl0X3ZhbHVlc1swXSA9IE9iamVjdElkR2V0RGF0dW0oR2V0 Q3VycmVudFJvbGVJZCgpKTsKKwkJCQkJdF9pc251bGxbMF0gPSBmYWxzZTsKKwkJCQkJdF92YWx1 ZXNbMV0gPSBPYmplY3RJZEdldERhdHVtKGNzdGF0ZS0+cmVsLT5yZF9yZWwtPm9pZCk7CisJCQkJ CXRfaXNudWxsWzFdID0gZmFsc2U7CisJCQkJCXRfdmFsdWVzWzJdID0gQ1N0cmluZ0dldFRleHRE YXR1bShjc3RhdGUtPmZpbGVuYW1lID8gY3N0YXRlLT5maWxlbmFtZSA6ICJTVERJTiIpOworCQkJ CQl0X2lzbnVsbFsyXSA9IGZhbHNlOworCQkJCQl0X3ZhbHVlc1szXSA9IEludDY0R2V0RGF0dW0o KGxvbmcgbG9uZykgY3N0YXRlLT5jdXJfbGluZW5vKTsKKwkJCQkJdF9pc251bGxbM10gPSBmYWxz ZTsKKwkJCQkJdF92YWx1ZXNbNF0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKGNzdGF0ZS0+bGluZV9i dWYuZGF0YSk7CisJCQkJCXRfaXNudWxsWzRdID0gZmFsc2U7CisJCQkJCXRfdmFsdWVzWzVdID0g Q1N0cmluZ0dldFRleHREYXR1bShjc3RhdGUtPmN1cl9hdHRuYW1lKTsKKwkJCQkJdF9pc251bGxb NV0gPSBmYWxzZTsKKwkJCQkJdF92YWx1ZXNbNl0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKHN0cmlu Zyk7CisJCQkJCXRfaXNudWxsWzZdID0gZmFsc2U7CisJCQkJCXRfdmFsdWVzWzddID0gQ1N0cmlu Z0dldFRleHREYXR1bShjc3RhdGUtPmVzY29udGV4dC0+ZXJyb3JfZGF0YS0+bWVzc2FnZSk7CisJ CQkJCXRfaXNudWxsWzddID0gZmFsc2U7CisJCQkJCXRfdmFsdWVzWzhdID0gZXJyX2RldGFpbCA/ IENTdHJpbmdHZXRUZXh0RGF0dW0oZXJyX2RldGFpbCkgOiAoRGF0dW0pIDA7CisJCQkJCXRfaXNu dWxsWzhdID0gZXJyX2RldGFpbCA/IGZhbHNlOiB0cnVlOworCQkJCQl0X3ZhbHVlc1s5XSA9IENT dHJpbmdHZXRUZXh0RGF0dW0oZXJyX2NvZGUpOworCQkJCQl0X2lzbnVsbFs5XSA9IGZhbHNlOwor CQkJCQlvbl9lcnJvcl90dXBEZXNjID0gb25fZXJyb3JfcmVsLT5yZF9hdHQ7CisJCQkJCW9uX2Vy cm9yX3R1cCA9IGhlYXBfZm9ybV90dXBsZShvbl9lcnJvcl90dXBEZXNjLAorCQkJCQkJCQkJCQkJ CXRfdmFsdWVzLAorCQkJCQkJCQkJCQkJCXRfaXNudWxsKTsKKwkJCQkJc2ltcGxlX2hlYXBfaW5z ZXJ0KG9uX2Vycm9yX3JlbCwgb25fZXJyb3JfdHVwKTsKKwkJCQl9CiAJCQkJY3N0YXRlLT5udW1f ZXJyb3JzKys7CiAJCQkJcmV0dXJuIHRydWU7CiAJCQl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9wYXJzZXIvZ3JhbS55IGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQppbmRleCAxMzBmN2Zj Ny4uNDZmYmE5NGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKKysrIGIv c3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQpAQCAtMzQyMCw2ICszNDIwLDEwIEBAIGNvcHlfb3B0 X2l0ZW06CiAJCQkJewogCQkJCQkkJCA9IG1ha2VEZWZFbGVtKCJudWxsIiwgKE5vZGUgKikgbWFr ZVN0cmluZygkMyksIEAxKTsKIAkJCQl9CisJCQl8IFRBQkxFIG9wdF9hcyBTY29uc3QKKwkJCQl7 CisJCQkJCSQkID0gbWFrZURlZkVsZW0oInRhYmxlIiwgKE5vZGUgKikgbWFrZVN0cmluZygkMyks IEAxKTsKKwkJCQl9CiAJCQl8IENTVgogCQkJCXsKIAkJCQkJJCQgPSBtYWtlRGVmRWxlbSgiZm9y bWF0IiwgKE5vZGUgKikgbWFrZVN0cmluZygiY3N2IiksIEAxKTsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2NvbW1hbmRzL2NvcHkuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHkuaAppbmRl eCBiM2RhM2NiMC4uMWRiNjJlNTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2Nv cHkuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5LmgKQEAgLTM4LDYgKzM4LDcgQEAg dHlwZWRlZiBlbnVtIENvcHlPbkVycm9yQ2hvaWNlCiB7CiAJQ09QWV9PTl9FUlJPUl9TVE9QID0g MCwJCS8qIGltbWVkaWF0ZWx5IHRocm93IGVycm9ycywgZGVmYXVsdCAqLwogCUNPUFlfT05fRVJS T1JfSUdOT1JFLAkJLyogaWdub3JlIGVycm9ycyAqLworCUNPUFlfT05fRVJST1JfVEFCTEUsCQkv KiBzYXZpbmcgZXJyb3JzIGluZm8gdG8gdGFibGUgKi8KIH0gQ29weU9uRXJyb3JDaG9pY2U7CiAK IC8qCkBAIC03Myw2ICs3NCw3IEBAIHR5cGVkZWYgc3RydWN0IENvcHlGb3JtYXRPcHRpb25zCiAJ Ym9vbAkgICAqZm9yY2VfbnVsbF9mbGFnczsJLyogcGVyLWNvbHVtbiBDU1YgRk4gZmxhZ3MgKi8K IAlib29sCQljb252ZXJ0X3NlbGVjdGl2ZWx5OwkvKiBkbyBzZWxlY3RpdmUgYmluYXJ5IGNvbnZl cnNpb24/ICovCiAJQ29weU9uRXJyb3JDaG9pY2Ugb25fZXJyb3I7IC8qIHdoYXQgdG8gZG8gd2hl biBlcnJvciBoYXBwZW5lZCAqLworCWNoYXIJCSpvbl9lcnJvcl90Ymw7IC8qIG9uIGVycm9yLCBz YXZlIGVycm9yIGluZm8gdG8gdGFibGUgKi8KIAlMaXN0CSAgICpjb252ZXJ0X3NlbGVjdDsgLyog bGlzdCBvZiBjb2x1bW4gbmFtZXMgKGNhbiBiZSBOSUwpICovCiB9IENvcHlGb3JtYXRPcHRpb25z OwogCkBAIC05Myw3ICs5NSw3IEBAIGV4dGVybiBDb3B5RnJvbVN0YXRlIEJlZ2luQ29weUZyb20o UGFyc2VTdGF0ZSAqcHN0YXRlLCBSZWxhdGlvbiByZWwsIE5vZGUgKndoZXJlCiAJCQkJCQkJCSAg IGJvb2wgaXNfcHJvZ3JhbSwgY29weV9kYXRhX3NvdXJjZV9jYiBkYXRhX3NvdXJjZV9jYiwgTGlz dCAqYXR0bmFtZWxpc3QsIExpc3QgKm9wdGlvbnMpOwogZXh0ZXJuIHZvaWQgRW5kQ29weUZyb20o Q29weUZyb21TdGF0ZSBjc3RhdGUpOwogZXh0ZXJuIGJvb2wgTmV4dENvcHlGcm9tKENvcHlGcm9t U3RhdGUgY3N0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsCi0JCQkJCQkgRGF0dW0gKnZhbHVl cywgYm9vbCAqbnVsbHMpOworCQkJCQkJIERhdHVtICp2YWx1ZXMsIGJvb2wgKm51bGxzLCBSZWxh dGlvbiBvbl9lcnJvcl9yZWwpOwogZXh0ZXJuIGJvb2wgTmV4dENvcHlGcm9tUmF3RmllbGRzKENv cHlGcm9tU3RhdGUgY3N0YXRlLAogCQkJCQkJCQkgIGNoYXIgKioqZmllbGRzLCBpbnQgKm5maWVs ZHMpOwogZXh0ZXJuIHZvaWQgQ29weUZyb21FcnJvckNhbGxiYWNrKHZvaWQgKmFyZyk7CmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHkyLm91dCBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvY29weTIub3V0CmluZGV4IDI1YzQwMWNlLi40MjNiZTE1NyAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5Mi5vdXQKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9jb3B5Mi5vdXQKQEAgLTc1MSw2ICs3NTEsOTYgQEAgQ09OVEVYVDog IENPUFkgY2hlY2tfaWduX2VyciwgbGluZSAxOiAiMQl7MX0iCiBDT1BZIGNoZWNrX2lnbl9lcnIg RlJPTSBTVERJTiBXSVRIIChvbl9lcnJvciBpZ25vcmUpOwogRVJST1I6ICBleHRyYSBkYXRhIGFm dGVyIGxhc3QgZXhwZWN0ZWQgY29sdW1uCiBDT05URVhUOiAgQ09QWSBjaGVja19pZ25fZXJyLCBs aW5lIDE6ICIxCXsxfQkzCWFiYyIKK2NyZWF0ZSB0YWJsZSBlcnJfdGJsKAorICAgIHVzZXJpZCBv aWQsIC0tIHRoZSB1c2VyIG9pZCB3aGlsZSBjb3B5IGdlbmVyYXRlZCB0aGlzIGVudHJ5CisgICAg Y29weV90Ymwgb2lkLCAtLWNvcHkgdGFibGUKKyAgICBmaWxlbmFtZSB0ZXh0LAorICAgIGxpbmVu byAgaW50OCwKKyAgICBsaW5lICAgIHRleHQsCisgICAgY29sbmFtZSB0ZXh0LAorICAgIHJhd19m aWVsZF92YWx1ZSB0ZXh0LAorICAgIGVycl9tZXNzYWdlIHRleHQsCisgICAgZXJyX2RldGFpbCB0 ZXh0LAorICAgIGVycm9yY29kZSB0ZXh0CispOworY3JlYXRlIHRhYmxlIGVycl90YmxfMSgKKyAg ICB1c2VyaWQgb2lkLCAtLSB0aGUgdXNlciBvaWQgd2hpbGUgY29weSBnZW5lcmF0ZWQgdGhpcyBl bnRyeQorICAgIGNvcHlfdGJsIG9pZCwgLS1jb3B5IHRhYmxlCisgICAgZmlsZW5hbWUgdGV4dCwK KyAgICBsaW5lbm8gIGludDgsCisgICAgbGluZSAgICB0ZXh0LAorICAgIGNvbG5hbWUgdGV4dCwK KyAgICByYXdfZmllbGRfdmFsdWUgdGV4dCwKKyAgICBlcnJfbWVzc2FnZSB0ZXh0LAorICAgIGVy cl9kZXRhaWwgdGV4dAorKTsKK2NyZWF0ZSB0YWJsZSB0X2NvcHlfdGJsKGEgaW50LCBiIGludCwg YyBpbnQpOworLS1zaG91bGQgZmFpbC4KK0NPUFkgdF9jb3B5X3RibCBGUk9NIFNURElOIFdJVEgg KG9uX2Vycm9yICd0YWJsZScpOworRVJST1I6ICBhcmd1bWVudCB0byBvcHRpb24gInRhYmxlIiBj YW4gb25seSBhcHBsaWVkIHdoZW4gT04gRVJST1IgaXMgc3BlY2lmaWVkCitDT1BZIHRfY29weV90 YmwgVE8gU1RESU4gV0lUSCAob25fZXJyb3IgJ3RhYmxlJyk7CitFUlJPUjogIENPUFkgT05fRVJS T1IgY2Fubm90IGJlIHVzZWQgd2l0aCBDT1BZIFRPCitMSU5FIDE6IENPUFkgdF9jb3B5X3RibCBU TyBTVERJTiBXSVRIIChvbl9lcnJvciAndGFibGUnKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF4KK0NPUFkgdF9jb3B5X3RibCBGUk9NIFNURElOIFdJVEggKHRhYmxl IGVycl90YmwpOworRVJST1I6ICBhcmd1bWVudCB0byBvcHRpb24gInRhYmxlIiBjYW4gb25seSBh cHBsaWVkIHdoZW4gT04gRVJST1IgaXMgc3BlY2lmaWVkCitDT1BZIHRfY29weV90YmwgVE8gU1RE SU4gV0lUSCAodGFibGUgZXJyX3RibCk7CitFUlJPUjogIGFyZ3VtZW50IHRvIG9wdGlvbiAidGFi bGUiIGNhbiBvbmx5IGFwcGxpZWQgd2hlbiBPTiBFUlJPUiBpcyBzcGVjaWZpZWQKK0NPUFkgdF9j b3B5X3RibChhLGIpIEZST00gU1RESU4gV0lUSCAob25fZXJyb3IgJ3RhYmxlJywgdGFibGUgbm90 X2V4aXN0cyk7CitFUlJPUjogIGVycm9yIHNhdmluZyB0YWJsZSAicHVibGljIi4ibm90X2V4aXN0 cyIgZG9lcyBub3QgZXhpc3QKKy0tc2hvdWxkIGZhaWwuIGVycl90YmxfMSBkb2VzIG5vdCBtZWV0 IGNyaXRlcmlhCitDT1BZIHRfY29weV90YmwoYSxiKSBGUk9NIFNURElOIFdJVEggKG9uX2Vycm9y ICd0YWJsZScsIHRhYmxlIGVycl90YmxfMSk7CitFUlJPUjogIHRhYmxlICJwdWJsaWMiLiJlcnJf dGJsXzEiIGNhbm5vdCBiZSB1c2VkIGZvciBDT1BZIEZST00gZXJyb3Igc2F2aW5nCitERVRBSUw6 ICBUaGUgdGFibGUgKCJwdWJsaWMiLiJlcnJfdGJsXzEiKSBkYXRhIGRlZmluaXRpb24gY2Fubm90 IGJlIHVzZWQgZm9yIGVycm9yIHNhdmluZyBvciBjdXJyZW50IHVzZXIgZG9uJ3QgZW5vdWdoIHBy aXZpbGVkZ2Ugb24gaXQKK0hJTlQ6ICBFbnN1cmUgY3VycmVudCB1c2VyIGhhdmUgZW5vdWdoIHBy aXZpbGVkZ2Ugb24gInB1YmxpYyIuImVycl90YmxfMSIsIGFsc28gZW5zdXJlIHRoZSBkYXRhIGRl ZmluaXRpb24gY2FuIGJlIHVzZWQgZm9yIGVycm9yIHNhdmluZworLS1zaG91bGQgZmFpbCwgZXh0 cmEgY29sdW1ucworQ09QWSB0X2NvcHlfdGJsKGEsYikgRlJPTSBTVERJTiBXSVRIIChkZWxpbWl0 ZXIgJywnLCBvbl9lcnJvciAndGFibGUnLCB0YWJsZSBlcnJfdGJsKTsKK0VSUk9SOiAgZXh0cmEg ZGF0YSBhZnRlciBsYXN0IGV4cGVjdGVkIGNvbHVtbgorQ09OVEVYVDogIENPUFkgdF9jb3B5X3Ri bCwgbGluZSAxOiAiMSwyLDMsNCIKKy0tc2hvdWxkIGZhaWwsIGxlc3MgY29sdW1ucworQ09QWSB0 X2NvcHlfdGJsKGEsYikgRlJPTSBTVERJTiBXSVRIIChkZWxpbWl0ZXIgJywnLCBvbl9lcnJvciAn dGFibGUnLCB0YWJsZSBlcnJfdGJsKTsKK0VSUk9SOiAgZXh0cmEgZGF0YSBhZnRlciBsYXN0IGV4 cGVjdGVkIGNvbHVtbgorQ09OVEVYVDogIENPUFkgdF9jb3B5X3RibCwgbGluZSAxOiAiMSwyLCIK Ky0tb2suCitDT1BZIHRfY29weV90YmwgRlJPTSBTVERJTiBXSVRIIChkZWxpbWl0ZXIgJywnLCBv bl9lcnJvciAndGFibGUnLCB0YWJsZSBlcnJfdGJsKTsKK05PVElDRTogIDQgcm93cyB3ZXJlIHNr aXBwZWQgZHVlIHRvIGRhdGEgdHlwZSBpbmNvbXBhdGliaWxpdHkKKy0tc2hvdWxkIGZhaWwuIGxh Y2sgcHJpdmlsZWRnZSBvbiBjb2x1bW4gZXJyb3Jjb2RlCitiZWdpbjsKK2NyZWF0ZSB1c2VyIHJl Z3Jlc3NfdXNlcjIwOworZ3JhbnQgaW5zZXJ0KHVzZXJpZCxjb3B5X3RibCxmaWxlbmFtZSxsaW5l bm8sbGluZSxjb2xuYW1lLHJhd19maWVsZF92YWx1ZSxlcnJfbWVzc2FnZSxlcnJfZGV0YWlsKSBv biB0YWJsZSBlcnJfdGJsIHRvIGFsaWNlOworRVJST1I6ICByb2xlICJhbGljZSIgZG9lcyBub3Qg ZXhpc3QKK2dyYW50IGluc2VydCBvbiB0YWJsZSB0X2NvcHlfdGJsIHRvIGFsaWNlOworRVJST1I6 ICBjdXJyZW50IHRyYW5zYWN0aW9uIGlzIGFib3J0ZWQsIGNvbW1hbmRzIGlnbm9yZWQgdW50aWwg ZW5kIG9mIHRyYW5zYWN0aW9uIGJsb2NrCitzZXQgcm9sZSByZWdyZXNzX3VzZXIyMDsKK0VSUk9S OiAgY3VycmVudCB0cmFuc2FjdGlvbiBpcyBhYm9ydGVkLCBjb21tYW5kcyBpZ25vcmVkIHVudGls IGVuZCBvZiB0cmFuc2FjdGlvbiBibG9jaworQ09QWSB0X2NvcHlfdGJsIEZST00gU1RESU4gV0lU SCAoZGVsaW1pdGVyICcsJywgb25fZXJyb3IgJ3RhYmxlJywgdGFibGUgZXJyX3RibCk7CitFUlJP UjogIGN1cnJlbnQgdHJhbnNhY3Rpb24gaXMgYWJvcnRlZCwgY29tbWFuZHMgaWdub3JlZCB1bnRp bCBlbmQgb2YgdHJhbnNhY3Rpb24gYmxvY2sKK1JPTExCQUNLOworc2VsZWN0CXBnX2NsYXNzLnJl bG5hbWUgYXMgY29weV9kZXN0aW5hdGlvbiwKKyAgCQlmaWxlbmFtZQorCQksbGluZW5vCisJCSxs aW5lCisJCSxjb2xuYW1lCisJCSxyYXdfZmllbGRfdmFsdWUsZXJyX21lc3NhZ2UKKwkJLGVycl9k ZXRhaWwKKwkJLGVycm9yY29kZSAKK2Zyb20gZXJyX3RibCBqb2luIHBnX2NsYXNzIG9uIGNvcHlf dGJsID0gcGdfY2xhc3Mub2lkOworIGNvcHlfZGVzdGluYXRpb24gfCBmaWxlbmFtZSB8IGxpbmVu byB8ICAgICAgICAgICBsaW5lICAgICAgICAgICB8IGNvbG5hbWUgfCAgIHJhd19maWVsZF92YWx1 ZSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgZXJyX21lc3NhZ2UgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgZXJyX2RldGFpbCB8IGVycm9yY29kZSAKKy0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tCisgdF9j b3B5X3RibCAgICAgICB8IFNURElOICAgIHwgICAgICAxIHwgMSwyLGEgICAgICAgICAgICAgICAg ICAgIHwgYyAgICAgICB8IGEgICAgICAgICAgICAgICAgICAgfCBpbnZhbGlkIGlucHV0IHN5bnRh eCBmb3IgdHlwZSBpbnRlZ2VyOiAiYSIgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwg MjJQMDIKKyB0X2NvcHlfdGJsICAgICAgIHwgU1RESU4gICAgfCAgICAgIDMgfCAxLF9qdW5rLHRl c3QgICAgICAgICAgICAgfCBiICAgICAgIHwgX2p1bmsgICAgICAgICAgICAgICB8IGludmFsaWQg aW5wdXQgc3ludGF4IGZvciB0eXBlIGludGVnZXI6ICJfanVuayIgICAgICAgICAgICAgICB8ICAg ICAgICAgICAgfCAyMlAwMgorIHRfY29weV90YmwgICAgICAgfCBTVERJTiAgICB8ICAgICAgNCB8 IGNvbGEsY29sYixjb2xjICAgICAgICAgICB8IGEgICAgICAgfCBjb2xhICAgICAgICAgICAgICAg IHwgaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgaW50ZWdlcjogImNvbGEiICAgICAgICAg ICAgICAgIHwgICAgICAgICAgICB8IDIyUDAyCisgdF9jb3B5X3RibCAgICAgICB8IFNURElOICAg IHwgICAgICA3IHwgMSwxMSw0MjM4Njc5NzMyNDg5ODc5ODc5IHwgYyAgICAgICB8IDQyMzg2Nzk3 MzI0ODk4Nzk4NzkgfCB2YWx1ZSAiNDIzODY3OTczMjQ4OTg3OTg3OSIgaXMgb3V0IG9mIHJhbmdl IGZvciB0eXBlIGludGVnZXIgfCAgICAgICAgICAgIHwgMjIwMDMKKyg0IHJvd3MpCisKK3NlbGVj dCAqIGZyb20gdF9jb3B5X3RibDsKKyBhIHwgYiB8IGMgIAorLS0tKy0tLSstLS0tCisgMSB8IDIg fCAgMworIDQgfCA1IHwgIDYKKyA4IHwgOSB8IDEwCisoMyByb3dzKQorCiAtLSBjbGVhbiB1cAog RFJPUCBUQUJMRSBmb3JjZXRlc3Q7CiBEUk9QIFRBQkxFIHZpc3Rlc3Q7CkBAIC03NjcsNiArODU3 LDkgQEAgRFJPUCBWSUVXIGluc3RlYWRfb2ZfaW5zZXJ0X3RibF92aWV3XzI7CiBEUk9QIEZVTkNU SU9OIGZ1bl9pbnN0ZWFkX29mX2luc2VydF90YmwoKTsKIERST1AgVEFCTEUgY2hlY2tfaWduX2Vy cjsKIERST1AgVEFCTEUgaGFyZF9lcnI7CitEUk9QIFRBQkxFIGVycl90Ymw7CitEUk9QIFRBQkxF IGVycl90YmxfMTsKK0RST1AgVEFCTEUgdF9jb3B5X3RibDsKIC0tCiAtLSBDT1BZIEZST00gLi4u IERFRkFVTFQKIC0tCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5Mi5zcWwg Yi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5Mi5zcWwKaW5kZXggYjVlNTQ5ZTguLjgxMWViZWUz IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5Mi5zcWwKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9zcWwvY29weTIuc3FsCkBAIC01MzQsNiArNTM0LDgzIEBAIENPUFkgY2hlY2tf aWduX2VyciBGUk9NIFNURElOIFdJVEggKG9uX2Vycm9yIGlnbm9yZSk7CiAxCXsxfQkzCWFiYwog XC4KIAorY3JlYXRlIHRhYmxlIGVycl90YmwoCisgICAgdXNlcmlkIG9pZCwgLS0gdGhlIHVzZXIg b2lkIHdoaWxlIGNvcHkgZ2VuZXJhdGVkIHRoaXMgZW50cnkKKyAgICBjb3B5X3RibCBvaWQsIC0t Y29weSB0YWJsZQorICAgIGZpbGVuYW1lIHRleHQsCisgICAgbGluZW5vICBpbnQ4LAorICAgIGxp bmUgICAgdGV4dCwKKyAgICBjb2xuYW1lIHRleHQsCisgICAgcmF3X2ZpZWxkX3ZhbHVlIHRleHQs CisgICAgZXJyX21lc3NhZ2UgdGV4dCwKKyAgICBlcnJfZGV0YWlsIHRleHQsCisgICAgZXJyb3Jj b2RlIHRleHQKKyk7CitjcmVhdGUgdGFibGUgZXJyX3RibF8xKAorICAgIHVzZXJpZCBvaWQsIC0t IHRoZSB1c2VyIG9pZCB3aGlsZSBjb3B5IGdlbmVyYXRlZCB0aGlzIGVudHJ5CisgICAgY29weV90 Ymwgb2lkLCAtLWNvcHkgdGFibGUKKyAgICBmaWxlbmFtZSB0ZXh0LAorICAgIGxpbmVubyAgaW50 OCwKKyAgICBsaW5lICAgIHRleHQsCisgICAgY29sbmFtZSB0ZXh0LAorICAgIHJhd19maWVsZF92 YWx1ZSB0ZXh0LAorICAgIGVycl9tZXNzYWdlIHRleHQsCisgICAgZXJyX2RldGFpbCB0ZXh0Cisp OworY3JlYXRlIHRhYmxlIHRfY29weV90YmwoYSBpbnQsIGIgaW50LCBjIGludCk7CisKKy0tc2hv dWxkIGZhaWwuCitDT1BZIHRfY29weV90YmwgRlJPTSBTVERJTiBXSVRIIChvbl9lcnJvciAndGFi bGUnKTsKK0NPUFkgdF9jb3B5X3RibCBUTyBTVERJTiBXSVRIIChvbl9lcnJvciAndGFibGUnKTsK K0NPUFkgdF9jb3B5X3RibCBGUk9NIFNURElOIFdJVEggKHRhYmxlIGVycl90YmwpOworQ09QWSB0 X2NvcHlfdGJsIFRPIFNURElOIFdJVEggKHRhYmxlIGVycl90YmwpOworQ09QWSB0X2NvcHlfdGJs KGEsYikgRlJPTSBTVERJTiBXSVRIIChvbl9lcnJvciAndGFibGUnLCB0YWJsZSBub3RfZXhpc3Rz KTsKKworLS1zaG91bGQgZmFpbC4gZXJyX3RibF8xIGRvZXMgbm90IG1lZXQgY3JpdGVyaWEKK0NP UFkgdF9jb3B5X3RibChhLGIpIEZST00gU1RESU4gV0lUSCAob25fZXJyb3IgJ3RhYmxlJywgdGFi bGUgZXJyX3RibF8xKTsKKworLS1zaG91bGQgZmFpbCwgZXh0cmEgY29sdW1ucworQ09QWSB0X2Nv cHlfdGJsKGEsYikgRlJPTSBTVERJTiBXSVRIIChkZWxpbWl0ZXIgJywnLCBvbl9lcnJvciAndGFi bGUnLCB0YWJsZSBlcnJfdGJsKTsKKzEsMiwzLDQKK1wuCisKKy0tc2hvdWxkIGZhaWwsIGxlc3Mg Y29sdW1ucworQ09QWSB0X2NvcHlfdGJsKGEsYikgRlJPTSBTVERJTiBXSVRIIChkZWxpbWl0ZXIg JywnLCBvbl9lcnJvciAndGFibGUnLCB0YWJsZSBlcnJfdGJsKTsKKzEsMiwKK1wuCisKKy0tb2su CitDT1BZIHRfY29weV90YmwgRlJPTSBTVERJTiBXSVRIIChkZWxpbWl0ZXIgJywnLCBvbl9lcnJv ciAndGFibGUnLCB0YWJsZSBlcnJfdGJsKTsKKzEsMixhCisxLDIsMworMSxfanVuayx0ZXN0Citj b2xhLGNvbGIsY29sYworNCw1LDYKKzgsOSwxMAorMSwxMSw0MjM4Njc5NzMyNDg5ODc5ODc5Citc LgorCistLXNob3VsZCBmYWlsLiBsYWNrIHByaXZpbGVkZ2Ugb24gY29sdW1uIGVycm9yY29kZQor YmVnaW47CitjcmVhdGUgdXNlciByZWdyZXNzX3VzZXIyMDsKK2dyYW50IGluc2VydCh1c2VyaWQs Y29weV90YmwsZmlsZW5hbWUsbGluZW5vLGxpbmUsY29sbmFtZSxyYXdfZmllbGRfdmFsdWUsZXJy X21lc3NhZ2UsZXJyX2RldGFpbCkgb24gdGFibGUgZXJyX3RibCB0byBhbGljZTsKK2dyYW50IGlu c2VydCBvbiB0YWJsZSB0X2NvcHlfdGJsIHRvIGFsaWNlOworc2V0IHJvbGUgcmVncmVzc191c2Vy MjA7CitDT1BZIHRfY29weV90YmwgRlJPTSBTVERJTiBXSVRIIChkZWxpbWl0ZXIgJywnLCBvbl9l cnJvciAndGFibGUnLCB0YWJsZSBlcnJfdGJsKTsKK1JPTExCQUNLOworCitzZWxlY3QJcGdfY2xh c3MucmVsbmFtZSBhcyBjb3B5X2Rlc3RpbmF0aW9uLAorICAJCWZpbGVuYW1lCisJCSxsaW5lbm8K KwkJLGxpbmUKKwkJLGNvbG5hbWUKKwkJLHJhd19maWVsZF92YWx1ZSxlcnJfbWVzc2FnZQorCQks ZXJyX2RldGFpbAorCQksZXJyb3Jjb2RlIAorZnJvbSBlcnJfdGJsIGpvaW4gcGdfY2xhc3Mgb24g Y29weV90YmwgPSBwZ19jbGFzcy5vaWQ7CisKK3NlbGVjdCAqIGZyb20gdF9jb3B5X3RibDsKKwog LS0gY2xlYW4gdXAKIERST1AgVEFCTEUgZm9yY2V0ZXN0OwogRFJPUCBUQUJMRSB2aXN0ZXN0OwpA QCAtNTUwLDYgKzYyNyw5IEBAIERST1AgVklFVyBpbnN0ZWFkX29mX2luc2VydF90Ymxfdmlld18y OwogRFJPUCBGVU5DVElPTiBmdW5faW5zdGVhZF9vZl9pbnNlcnRfdGJsKCk7CiBEUk9QIFRBQkxF IGNoZWNrX2lnbl9lcnI7CiBEUk9QIFRBQkxFIGhhcmRfZXJyOworRFJPUCBUQUJMRSBlcnJfdGJs OworRFJPUCBUQUJMRSBlcnJfdGJsXzE7CitEUk9QIFRBQkxFIHRfY29weV90Ymw7CiAKIC0tCiAt LSBDT1BZIEZST00gLi4uIERFRkFVTFQKLS0gCjIuMzQuMQoK --000000000000bc460b06107441f1--