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.96) (envelope-from ) id 1vSUyu-00FsPA-1z for pgsql-hackers@arkaria.postgresql.org; Mon, 08 Dec 2025 06:44:25 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vSUys-00F8fw-1T for pgsql-hackers@arkaria.postgresql.org; Mon, 08 Dec 2025 06:44:22 +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.96) (envelope-from ) id 1vSUyr-00F8fm-1t for pgsql-hackers@lists.postgresql.org; Mon, 08 Dec 2025 06:44:22 +0000 Received: from mail-qt1-x829.google.com ([2607:f8b0:4864:20::829]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vSUyo-003i91-2f for pgsql-hackers@lists.postgresql.org; Mon, 08 Dec 2025 06:44:21 +0000 Received: by mail-qt1-x829.google.com with SMTP id d75a77b69052e-4ed82ee9e57so51508391cf.0 for ; Sun, 07 Dec 2025 22:44:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765176259; x=1765781059; darn=lists.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=N5f1UXpVc9mlsErXYuKrPcEBIQ2+vt5GKG41d5FLszI=; b=FJL2AqyoVdCQFnhQ7yrg39zBn4Nhs7jVso5WLClyueDiOFXoEBJXJY/xjNwYh/FUAA ImrTgmt2ZZW/V87gv42K61vlwYlwVhVf9YDDyw+UXSVOXgHhEQkHfG3pzcY9I08tMzHB uc/4h+x8UNFRPZt52Ca6H34wY4ufPyTcjqpoP3Dt1mykJaVrb5s0HU+lUGXM8tJphZc+ TeIIQfXrqueuvXw+wqNVxrEV/3WsNI2fYy5aKL2GtIZd1fDoNldADwAzsCpZMUsULT8n fvumsgNH/Bh/kqvjHdQmoEL0HRvecUhfChZuk2feWs4RA19upqyUOcbNKj0kJpa18wOE MSMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765176259; x=1765781059; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=N5f1UXpVc9mlsErXYuKrPcEBIQ2+vt5GKG41d5FLszI=; b=ar1vFMOMWvKfNSN2KeCEoGTtCG27Xxegs7xGu4hzaPIxuH/mmBIOwIwLWZmVJzVsQ8 SE3LCd8cvovxddcmdehPYw5umi6YamI0mnPj1RwUIaIcfxfIidnPbg57VfdQeBkaKMF1 WMA65Gd4oeI7ix0HhrmNGq6xlXfulChrZBv09cn6CAfMbPPl94x4U55TymyuJ9aYjoc/ gQs6VG31FjF8lx6w2ZjG5WUU17XGaeAXC4Jn+g3oKmMnm/L+ulHCyYw/mSLZc19kSPqX nvfXpMQEmNgP7qDAONccd+Nl1yHydtGJwMBMBMBuPDyNK11d2MiusPankIs93grYVFfB 30bA== X-Forwarded-Encrypted: i=1; AJvYcCWvMA72VjO7RAXsfD3YeCM9QHrMVIQaVfhwtDMjSTn3nqTLsrgTzGl5/1W3gf/R+gqzoejaWp2zPsneeoQk@lists.postgresql.org X-Gm-Message-State: AOJu0Yxxa4H8HR9z7Uo9gQkbcUBc29AKqxwjVUG8WMxAf1IwLj8opKQJ MXA1AMCC/aDDsfp9dYzvmWp8Po5GlsbxFR8maSEFl4IHkqCEzKUa+vxxXa4n+hrCKgG66FDl60d RiWWTnAWeNYcb2zsjgfl116LjE3zgadY= X-Gm-Gg: ASbGncvpNACp5UlAp5dDA8lYtLs5v1CEps7YMpTNs45YPMORAPZkiRR26YvNWNoA2s9 PiMiuPp83/VgiWCndvHnniEAd3mwZS7sC44pS0HWzJ+2b+oI37GdgD9YKumjwn6giUBfQg9QGYM SjuiatCmxyv2RgzsZiiyL6uEzTl6bmHrFyO8TP8ILUWvhdzMpMMiTJXeww9U/CtXwHS31gNa9Xm uJwbYppUSXsjp5SZ+78bvMkt5QspymlqQL5e9bzRc2OZUICwPksV5/XbIfPWsYdVsL/ewB+ X-Google-Smtp-Source: AGHT+IH1jd2UIWtEKLmFg9BQPwhEdr36R3EpLHp8rjP/MML889hh9XyPN9wZORAxNEa3Zz/f6icKhxlVJ+PwI8dCWq8= X-Received: by 2002:a05:622a:17c5:b0:4ed:6324:f53f with SMTP id d75a77b69052e-4f03fea35cdmr109384651cf.39.1765176258595; Sun, 07 Dec 2025 22:44:18 -0800 (PST) MIME-Version: 1.0 References: <3f22a8bb-29e8-40cc-97a1-309181da2c13@dunslane.net> <2bed001a-462c-42da-9a6b-3c7884502932@dunslane.net> <20250824010811.4d.nmisch@google.com> <82eb35b8-7f07-493b-b689-0934919e1dc3@dunslane.net> <17555e46-4fb2-4265-90e0-95cb8ed584a6@dunslane.net> In-Reply-To: From: Mahendra Singh Thalor Date: Mon, 8 Dec 2025 12:14:06 +0530 X-Gm-Features: AQt7F2puWIfT3puORy702osXN2v1qrs2biWTRZIfhNQTMiknOIY5C_tG-3vigGM Message-ID: Subject: Re: Non-text mode for pg_dumpall To: tushar Cc: Vaibhav Dalvi , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000dcfd2106456b1fe3" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000dcfd2106456b1fe3 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks Tushar for the testing and reports. On Tue, 2 Dec 2025 at 18:45, tushar wrote: > > > > On Mon, Dec 1, 2025 at 10:47=E2=80=AFPM tushar wrote: >>> >>> >> >> I have observed that when combining the --globals-only option with certa= in other switches during a pg_restore - operation fails silently. >> The attempted restore does not execute, but no error message or warning = is displayed unless the --verbose option is also used. >> >> --this will just run without any message but objects also not going to c= reate >> ./pg_restore -Fc ok31. -C -d postgres -t mytable --globals-only >> ./pg_restore -Fc ok31. -C -d postgres -no-tablespace --globals-only >> ./pg_restore -Fc ok31. -C -d postgres -no-data --globals-only >> >> with --verbose >> [edb@1a1c15437e7c bin]$ ./pg_restore -Fc ok31. -C -d postgres -t myable= --globals-only -v >> pg_restore: connecting to database for restore >> pg_restore: executing SELECT pg_catalog.set_config('search_path', '', fa= lse); >> pg_restore: implied no-schema restore >> pg_restore: database restoring skipped because option -g/--globals-only = was specified >> >> we should probably add some message there. >> > > Please refer this scenario where "--no-comments" switch is ignoring whe= n used with -Ft/c option of pg_dumpall > > Test Case to reproduce: > --Connect to psql terminal , create a table and comment : > postgres=3D# create table t(n int); > CREATE TABLE > postgres=3D# insert into t values (1); > INSERT 0 1 > postgres=3D# comment on table t is 'testing...'; > COMMENT > postgres=3D# SELECT obj_description('public.t'::regclass, 'pg_class') AS = table_comment ; > table_comment > --------------- > testing... > (1 row) > > --perform pg_dumpall with > (a) -Fp (./pg_dumpall -Fp --no-comments -f dump.plain) > (b) -Ft (./pg_dumpall -Ft --no-comments -f dump.tar) > > Case 1: restore (a) , just run the file (dump.plain) on psql terminal , = fire this query : > postgres=3D# SELECT > obj_description('public.t'::regclass, 'pg_class') AS table_comment; > table_comment > --------------- > > (1 row) > Seems expected . > > Case 2: restore (b) via command ( ./pg_restore -Ft dump.tar -d postgres -= p 5806 -C ) > fire this query : > postgres=3D# SELECT obj_description('public.t'::regclass, 'pg_class') AS = table_comment ; > table_comment > --------------- > testing... > (1 row) > > Seems not expected i.e pg_dumpall with option -Ft still taking table comm= ents and ignoring --no-comments switch. > > regards, I tried to fix these issues in the attached patch. Here, I am attaching an updated patch for the review and testing. --=20 Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --000000000000dcfd2106456b1fe3 Content-Type: application/octet-stream; name="v11_08122025-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Disposition: attachment; filename="v11_08122025-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_miwscj9k0 RnJvbSBhOTg5YjYwNzQxOTI2YTA4OWEwYzJmYzM3MmNiMmVmMDA3MzEwYTk2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogTW9uLCA4IERlYyAyMDI1IDEyOjA2OjI4ICswNTMwClN1YmplY3Q6IFtQQVRD SF0gTm9uIHRleHQgbW9kZXMgZm9yIHBnX2R1bXBhbGwsIGNvcnJlc3BvbmRpbmdseSBjaGFuZ2Ug CiBwZ19yZXN0b3JlCgogICAgcGdfZHVtcGFsbCBhY3F1aXJlcyBhIG5ldyAtRi8tLWZvcm1hdCBv cHRpb24sIHdpdGggdGhlIHNhbWUgbWVhbmluZ3MgYXMKICAgIHBnX2R1bXAuIFRoZSBkZWZhdWx0 IGlzIHAsIG1lYW5pbmcgcGxhaW4gdGV4dC4gRm9yIGFueSBvdGhlciB2YWx1ZSwgYQogICAgZGly ZWN0b3J5IGlzIGNyZWF0ZWQgY29udGFpbmluZyB0d28gZmlsZXMsIHRvYy5nbG8gYW5kIG1hcC5k YXQuIFRoZQogICAgZmlyc3QgY29udGFpbnMgY29tbWFuZHMgcmVzdG9yaW5nIHRoZSBnbG9iYWwg ZGF0YSBpbiBjdXN0b20gZm9ybWF0LCBhbmQgdGhlIHNlY29uZAogICAgY29udGFpbnMgYSBtYXAg ZnJvbSBvaWRzIHRvIGRhdGFiYXNlIG5hbWVzIGluIHRleHQgZm9ybWF0LiBJdCB3aWxsIGFsc28g Y29udGFpbiBhCiAgICBzdWJkaXJlY3RvcnkgY2FsbGVkIGRhdGFiYXNlcywgaW5zaWRlIHdoaWNo IGl0IHdpbGwgY3JlYXRlIGFyY2hpdmVzIGluCiAgICB0aGUgc3BlY2lmaWVkIGZvcm1hdCwgbmFt ZWQgdXNpbmcgdGhlIGRhdGFiYXNlIG9pZHMuCgogICAgSW4gdGhlc2UgY2FzZXNzIHRoZSAtZiBh cmd1bWVudCBpcyByZXF1aXJlZC4KCiAgICBJZiBwZ19yZXN0b3JlIGVuY291bnRlcnMgYSBkaXJl Y3RvcnkgY29udGFpbmluZyBtYXAuZGF0IGFuZCB0b2MuZ2xvLAogICAgaXQgcmVzdG9yZXMgdGhl IGdsb2JhbCBzZXR0aW5ncyBmcm9tIHRvYy5nbG8gaWYgZXhpc3QsIGFuZCB0aGVuCiAgICByZXN0 b3JlcyBlYWNoIGRhdGFiYXNlLgoKICAgIHBnX3Jlc3RvcmUgYWNxdWlyZXMgdHdvIG5ldyBvcHRp b25zOiAtZy8tLWdsb2JhbHMtb25seSB3aGljaCBzdXBwcmVzc2VzCiAgICByZXN0b3JhdGlvbiBv ZiBhbnkgZGF0YWJhc2VzLCBhbmQgLS1leGNsdWRlLWRhdGFiYXNlIHdoaWNoIGluaGliaXRzCiAg ICByZXN0b3JhdGlvbiBvZiBwYXJ0aWN1YWxyIGRhdGFiYXNlKHMpIGluIHRoZSBzYW1lIHdheSB0 aGUgc2FtZSBvcHRpb24KICAgIHdvcmtzIGluIHBnX2R1bXBhbGwuCgp2MTEKLS0tCiBkb2Mvc3Jj L3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbCAgICAgfCAxMDQgKysrKy0KIGRvYy9zcmMvc2dtbC9y ZWYvcGdfcmVzdG9yZS5zZ21sICAgICB8ICA2NiArKy0KIHNyYy9iaW4vcGdfZHVtcC9jb25uZWN0 ZGIuYyAgICAgICAgICB8ICAgNyArLQogc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5oICAgICAg ICAgIHwgICAyICstCiBzcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQgICAgICAgICAgfCAgIDEg Kwogc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMgICAgICAgICAgIHwgIDEwICsKIHNyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXAuaCAgICAgICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cF9hcmNoaXZlci5jIHwgIDM0ICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2Fy Y2hpdmVyLmggfCAgIDEgKwogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYyAgICAgIHwg ICAyICstCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgfCAgIDIgKy0KIHNy Yy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMgICAgICAgICB8IDYxNyArKysrKysrKysrKysrKysr KysrKystLS0tLS0KIHNyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMgICAgICAgICB8IDYwOSAr KysrKysrKysrKysrKysrKysrKysrKysrLQogc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBs ICAgICAgIHwgIDI3ICsrCiBzcmMvYmluL3BnX2R1bXAvdC8wMDdfcGdfZHVtcGFsbC5wbCAgfCAz OTYgKysrKysrKysrKysrKysrKysKIDE1IGZpbGVzIGNoYW5nZWQsIDE3MTMgaW5zZXJ0aW9ucygr KSwgMTY3IGRlbGV0aW9ucygtKQogbW9kZSBjaGFuZ2UgMTAwNjQ0ID0+IDEwMDc1NSBzcmMvYmlu L3BnX2R1bXAvdC8wMDFfYmFzaWMucGwKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzcmMvYmluL3BnX2R1 bXAvdC8wMDdfcGdfZHVtcGFsbC5wbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdf ZHVtcGFsbC5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwKaW5kZXggODgz NGI3ZWMxNDEuLjc1ZGUxZmVlMzMwIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1 bXBhbGwuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbApAQCAtMTYs NyArMTYsMTAgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICA8cmVmbmFtZWRpdj4KICAg PHJlZm5hbWU+cGdfZHVtcGFsbDwvcmVmbmFtZT4KLSAgPHJlZnB1cnBvc2U+ZXh0cmFjdCBhIDxw cm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgY2x1c3RlciBpbnRv IGEgc2NyaXB0IGZpbGU8L3JlZnB1cnBvc2U+CisKKyAgPHJlZnB1cnBvc2U+CisgICBleHBvcnQg YSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGNsdXN0ZXIg YXMgYW4gU1FMIHNjcmlwdCBvciB0byBvdGhlciBmb3JtYXRzCisgIDwvcmVmcHVycG9zZT4KICA8 L3JlZm5hbWVkaXY+CiAKICA8cmVmc3lub3BzaXNkaXY+CkBAIC0zMyw3ICszNiw3IEBAIFBvc3Rn cmVTUUwgZG9jdW1lbnRhdGlvbgogICA8cGFyYT4KICAgIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxs PC9hcHBsaWNhdGlvbj4gaXMgYSB1dGlsaXR5IGZvciB3cml0aW5nIG91dAogICAgKDxxdW90ZT5k dW1waW5nPC9xdW90ZT4pIGFsbCA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+ IGRhdGFiYXNlcwotICAgb2YgYSBjbHVzdGVyIGludG8gb25lIHNjcmlwdCBmaWxlLiAgVGhlIHNj cmlwdCBmaWxlIGNvbnRhaW5zCisgICBvZiBhIGNsdXN0ZXIgaW50byBhbiBTUUwgc2NyaXB0IGZp bGUgb3IgYW4gYXJjaGl2ZS4gIFRoZSBvdXRwdXQgY29udGFpbnMKICAgIDxhY3JvbnltPlNRTDwv YWNyb255bT4gY29tbWFuZHMgdGhhdCBjYW4gYmUgdXNlZCBhcyBpbnB1dCB0byA8eHJlZgogICAg bGlua2VuZD0iYXBwLXBzcWwiLz4gdG8gcmVzdG9yZSB0aGUgZGF0YWJhc2VzLiAgSXQgZG9lcyB0 aGlzIGJ5CiAgICBjYWxsaW5nIDx4cmVmIGxpbmtlbmQ9ImFwcC1wZ2R1bXAiLz4gZm9yIGVhY2gg ZGF0YWJhc2UgaW4gdGhlIGNsdXN0ZXIuCkBAIC01MiwxMSArNTUsMTYgQEAgUG9zdGdyZVNRTCBk b2N1bWVudGF0aW9uCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIFRoZSBTUUwgc2NyaXB0IHdp bGwgYmUgd3JpdHRlbiB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAgVXNlIHRoZQorICAgUGxhaW4g dGV4dCBTUUwgc2NyaXB0cyB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4g IFVzZSB0aGUKICAgIDxvcHRpb24+LWY8L29wdGlvbj4vPG9wdGlvbj4tLWZpbGU8L29wdGlvbj4g b3B0aW9uIG9yIHNoZWxsIG9wZXJhdG9ycyB0bwogICAgcmVkaXJlY3QgaXQgaW50byBhIGZpbGUu CiAgIDwvcGFyYT4KIAorICA8cGFyYT4KKyAgIEFyY2hpdmVzIGluIG90aGVyIGZvcm1hdHMgd2ls bCBiZSBwbGFjZWQgaW4gYSBkaXJlY3RvcnkgbmFtZWQgdXNpbmcgdGhlCisgICA8b3B0aW9uPi1m PC9vcHRpb24+LzxvcHRpb24+LS1maWxlPC9vcHRpb24+LCB3aGljaCBpcyByZXF1aXJlZCBpbiB0 aGlzIGNhc2UuCisgIDwvcGFyYT4KKwogICA8cGFyYT4KICAgPGFwcGxpY2F0aW9uPnBnX2R1bXBh bGw8L2FwcGxpY2F0aW9uPiBuZWVkcyB0byBjb25uZWN0IHNldmVyYWwKICAgdGltZXMgdG8gdGhl IDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gc2VydmVyIChvbmNlIHBlcgpA QCAtMTMxLDEwICsxMzksODUgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICAgPHBh cmE+CiAgICAgICAgIFNlbmQgb3V0cHV0IHRvIHRoZSBzcGVjaWZpZWQgZmlsZS4gIElmIHRoaXMg aXMgb21pdHRlZCwgdGhlCiAgICAgICAgIHN0YW5kYXJkIG91dHB1dCBpcyB1c2VkLgorICAgICAg ICBOb3RlOiBUaGlzIG9wdGlvbiBjYW4gb25seSBiZSBvbWl0dGVkIHdoZW4gPG9wdGlvbj4tLWZv cm1hdDwvb3B0aW9uPiBpcyBwbGFpbgogICAgICAgIDwvcGFyYT4KICAgICAgIDwvbGlzdGl0ZW0+ CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVy bT48b3B0aW9uPi1GIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5mb3JtYXQ8L3JlcGxh Y2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1mb3JtYXQ9PHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmZvcm1hdDwvcmVwbGFjZWFibGU+PC9vcHRpb24+ PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBTcGVjaWZ5 IHRoZSBmb3JtYXQgb2YgZHVtcCBmaWxlcy4gIEluIHBsYWluIGZvcm1hdCwgYWxsIHRoZSBkdW1w IGRhdGEgaXMKKyAgICAgICAgc2VudCBpbiBhIHNpbmdsZSB0ZXh0IHN0cmVhbS4gVGhpcyBpcyB0 aGUgZGVmYXVsdC4KKworICAgICAgICBJbiBhbGwgb3RoZXIgbW9kZXMsIDxhcHBsaWNhdGlvbj5w Z19kdW1wYWxsPC9hcHBsaWNhdGlvbj4gZmlyc3QgY3JlYXRlcyB0d28gZmlsZXM6CisgICAgICAg IDxmaWxlbmFtZT50b2MuZGF0L3RvYy5kbXAvdG9jLnRhcjwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5h bWU+bWFwLmRhdDwvZmlsZW5hbWU+LCBpbiB0aGUgZGlyZWN0b3J5CisgICAgICAgIHNwZWNpZmll ZCBieSA8b3B0aW9uPi0tZmlsZTwvb3B0aW9uPi4KKyAgICAgICAgVGhlIGZpcnN0IGZpbGUgY29u dGFpbnMgZ2xvYmFsIGRhdGEsIHN1Y2ggYXMgcm9sZXMgYW5kIHRhYmxlc3BhY2VzLiBUaGUgc2Vj b25kCisgICAgICAgIGNvbnRhaW5zIGEgbWFwcGluZyBiZXR3ZWVuIGRhdGFiYXNlIG9pZHMgYW5k IG5hbWVzLiBUaGVzZSBmaWxlcyBhcmUgdXNlZCBieQorICAgICAgICA8YXBwbGljYXRpb24+cGdf cmVzdG9yZTwvYXBwbGljYXRpb24+LiBEYXRhIGZvciBpbmRpdmlkdWFsIGRhdGFiYXNlcyBpcyBw bGFjZWQgaW4KKyAgICAgICAgPGZpbGVuYW1lPmRhdGFiYXNlczwvZmlsZW5hbWU+IHN1YmRpcmVj dG9yeSwgbmFtZWQgdXNpbmcgdGhlIGRhdGFiYXNlJ3MgPHR5cGU+b2lkPC90eXBlPi4KKworICAg ICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVy bT48bGl0ZXJhbD5kPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmRp cmVjdG9yeTwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAg PHBhcmE+CisgICAgICAgICAgIE91dHB1dCBkaXJlY3RvcnktZm9ybWF0IGFyY2hpdmVzIGZvciBl YWNoIGRhdGFiYXNlLAorICAgICAgICAgICBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0 b3JlLiBUaGUgZGlyZWN0b3J5CisgICAgICAgICAgIHdpbGwgaGF2ZSBkYXRhYmFzZSA8dHlwZT5v aWQ8L3R5cGU+IGFzIGl0cyBuYW1lLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlz dGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgIDx2YXJsaXN0ZW50cnk+ CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5wPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDx0 ZXJtPjxsaXRlcmFsPnBsYWluPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4K KyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGEgcGxhaW4tdGV4dCBTUUwgc2Ny aXB0IGZpbGUgKHRoZSBkZWZhdWx0KS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xp c3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICA8dmFybGlzdGVudHJ5 PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+YzwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8 dGVybT48bGl0ZXJhbD5jdXN0b208L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVt PgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgYSBjdXN0b20tZm9ybWF0IGFy Y2hpdmUgZm9yIGVhY2ggZGF0YWJhc2UsCisgICAgICAgICAgIHN1aXRhYmxlIGZvciBpbnB1dCBp bnRvIHBnX3Jlc3RvcmUuIFRoZSBhcmNoaXZlCisgICAgICAgICAgIHdpbGwgYmUgbmFtZWQgPGZp bGVuYW1lPmRib2lkLmRtcDwvZmlsZW5hbWU+IHdoZXJlIDx0eXBlPmRib2lkPC90eXBlPiBpcyB0 aGUKKyAgICAgICAgICAgPHR5cGU+b2lkPC90eXBlPiBvZiB0aGUgZGF0YWJhc2UuCisgICAgICAg ICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+ CisKKyAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD50PC9s aXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnRhcjwvbGl0ZXJhbD48L3Rl cm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91 dHB1dCBhIHRhci1mb3JtYXQgYXJjaGl2ZSBmb3IgZWFjaCBkYXRhYmFzZSwKKyAgICAgICAgICAg c3VpdGFibGUgZm9yIGlucHV0IGludG8gcGdfcmVzdG9yZS4gVGhlIGFyY2hpdmUKKyAgICAgICAg ICAgd2lsbCBiZSBuYW1lZCA8ZmlsZW5hbWU+ZGJvaWQudGFyPC9maWxlbmFtZT4gd2hlcmUgPHR5 cGU+ZGJvaWQ8L3R5cGU+IGlzIHRoZQorICAgICAgICAgICA8dHlwZT5vaWQ8L3R5cGU+IG9mIHRo ZSBkYXRhYmFzZS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAg ICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICA8L3ZhcmlhYmxlbGlzdD4KKworICAgICAg IE5vdGU6IHNlZSA8eHJlZiBsaW5rZW5kPSJhcHAtcGdkdW1wIi8+IGZvciBkZXRhaWxzCisgICAg ICAgb2YgaG93IHRoZSB2YXJpb3VzIG5vbiBwbGFpbiB0ZXh0IGFyY2hpdmVzIHdvcmsuCisKKyAg ICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisK ICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LWc8L29wdGlvbj48L3Rl cm0+CiAgICAgICA8dGVybT48b3B0aW9uPi0tZ2xvYmFscy1vbmx5PC9vcHRpb24+PC90ZXJtPgpA QCAtOTM3LDkgKzEwMjAsMTMgQEAgZXhjbHVkZSBkYXRhYmFzZSA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+UEFUVEVSTjwvcmVwbGFjZWFibGU+CiAgIDx0aXRsZT5FeGFtcGxlczwvdGl0 bGU+CiAgIDxwYXJhPgogICAgVG8gZHVtcCBhbGwgZGF0YWJhc2VzOgotCisgICBJZiBmb3JtYXQg aXMgZ2l2ZW4sIHRoZW4gZHVtcCB3aWxsIGJlIGJhc2VkIG9uIGZvcm1hdCwgZGVmYXVsdCBwbGFp bi4KIDxzY3JlZW4+CiA8cHJvbXB0PiQ8L3Byb21wdD4gPHVzZXJpbnB1dD5wZ19kdW1wYWxsICZn dDsgZGIub3V0PC91c2VyaW5wdXQ+Cis8L3NjcmVlbj4KKworPHNjcmVlbj4KKzxwcm9tcHQ+JDwv cHJvbXB0PiA8dXNlcmlucHV0PnBnX2R1bXBhbGwgLS1mb3JtYXQ9ZC9hL2MvcCAtZiBkYi5vdXQ8 L3VzZXJpbnB1dD4KIDwvc2NyZWVuPgogICA8L3BhcmE+CiAKQEAgLTk1Niw2ICsxMDQzLDE1IEBA IGV4Y2x1ZGUgZGF0YWJhc2UgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPlBBVFRFUk48 L3JlcGxhY2VhYmxlPgogICAgdGhlIHNjcmlwdCB3aWxsIGF0dGVtcHQgdG8gZHJvcCBvdGhlciBk YXRhYmFzZXMgaW1tZWRpYXRlbHksIGFuZCB0aGF0CiAgICB3aWxsIGZhaWwgZm9yIHRoZSBkYXRh YmFzZSB5b3UgYXJlIGNvbm5lY3RlZCB0by4KICAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgIElm IGR1bXAgd2FzIHRha2VuIGluIG5vbi10ZXh0IGZvcm1hdCwgdGhlbiB1c2UgcGdfcmVzdG9yZSB0 byByZXN0b3JlIGFsbCBkYXRhYmFzZXMuCis8c2NyZWVuPgorPHByb21wdD4kPC9wcm9tcHQ+IDx1 c2VyaW5wdXQ+cGdfcmVzdG9yZSBkYi5vdXQgLWQgcG9zdGdyZXMgLUM8L3VzZXJpbnB1dD4KKzwv c2NyZWVuPgorICAgVGhpcyB3aWxsIHJlc3RvcmUgYWxsIHRoZSBkYXRhYmFzZXMuIElmIHVzZXIg ZG9uJ3Qgd2FudCB0byByZXN0b3JlIHNvbWUgZGF0YWJhc2VzLCB0aGVuIHVzZQorICAgLS1leGNs dWRlLXBhdHRlcm4gdG8gc2tpcCB0aG9zZS4KKzwvcGFyYT4KICA8L3JlZnNlY3QxPgogCiAgPHJl ZnNlY3QxPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwgYi9k b2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbAppbmRleCBhNDY4YTM4MzYxYS4uNzQ5N2I1 MjdhZTYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCisrKyBi L2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCkBAIC0xOCw4ICsxOCw5IEBAIFBvc3Rn cmVTUUwgZG9jdW1lbnRhdGlvbgogICA8cmVmbmFtZT5wZ19yZXN0b3JlPC9yZWZuYW1lPgogCiAg IDxyZWZwdXJwb3NlPgotICAgcmVzdG9yZSBhIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9k dWN0bmFtZT4gZGF0YWJhc2UgZnJvbSBhbgotICAgYXJjaGl2ZSBmaWxlIGNyZWF0ZWQgYnkgPGFw cGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9uPgorICAgcmVzdG9yZSA8cHJvZHVjdG5hbWU+ UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlcyBmcm9tIGFyY2hpdmVzCisgICBjcmVh dGVkIGJ5IDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4gb3IKKyAgIDxhcHBsaWNh dGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4KICAgPC9yZWZwdXJwb3NlPgogIDwvcmVmbmFt ZWRpdj4KIApAQCAtMzgsMTMgKzM5LDE0IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogCiAg IDxwYXJhPgogICAgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiBpcyBhIHV0 aWxpdHkgZm9yIHJlc3RvcmluZyBhCi0gICA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVj dG5hbWU+IGRhdGFiYXNlIGZyb20gYW4gYXJjaGl2ZQotICAgY3JlYXRlZCBieSA8eHJlZiBsaW5r ZW5kPSJhcHAtcGdkdW1wIi8+IGluIG9uZSBvZiB0aGUgbm9uLXBsYWluLXRleHQKKyAgIDxwcm9k dWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2Ugb3IgY2x1c3RlciBmcm9t IGFuIGFyY2hpdmUKKyAgIGNyZWF0ZWQgYnkgPHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIvPiBv cgorICAgPHhyZWYgbGlua2VuZD0iYXBwLXBnLWR1bXBhbGwiLz4gaW4gb25lIG9mIHRoZSBub24t cGxhaW4tdGV4dAogICAgZm9ybWF0cy4gIEl0IHdpbGwgaXNzdWUgdGhlIGNvbW1hbmRzIG5lY2Vz c2FyeSB0byByZWNvbnN0cnVjdCB0aGUKLSAgIGRhdGFiYXNlIHRvIHRoZSBzdGF0ZSBpdCB3YXMg aW4gYXQgdGhlIHRpbWUgaXQgd2FzIHNhdmVkLiAgVGhlCi0gICBhcmNoaXZlIGZpbGVzIGFsc28g YWxsb3cgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiB0bworICAgZGF0YWJh c2Ugb3IgY2x1c3RlciB0byB0aGUgc3RhdGUgaXQgd2FzIGluIGF0IHRoZSB0aW1lIGl0IHdhcyBz YXZlZC4gVGhlCisgICBhcmNoaXZlcyBhbHNvIGFsbG93IDxhcHBsaWNhdGlvbj5wZ19yZXN0b3Jl PC9hcHBsaWNhdGlvbj4gdG8KICAgIGJlIHNlbGVjdGl2ZSBhYm91dCB3aGF0IGlzIHJlc3RvcmVk LCBvciBldmVuIHRvIHJlb3JkZXIgdGhlIGl0ZW1zCi0gICBwcmlvciB0byBiZWluZyByZXN0b3Jl ZC4gVGhlIGFyY2hpdmUgZmlsZXMgYXJlIGRlc2lnbmVkIHRvIGJlCisgICBwcmlvciB0byBiZWlu ZyByZXN0b3JlZC4gVGhlIGFyY2hpdmUgZm9ybWF0cyBhcmUgZGVzaWduZWQgdG8gYmUKICAgIHBv cnRhYmxlIGFjcm9zcyBhcmNoaXRlY3R1cmVzLgogICA8L3BhcmE+CiAKQEAgLTUyLDEwICs1NCwx NyBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgIDxhcHBsaWNhdGlvbj5wZ19yZXN0b3Jl PC9hcHBsaWNhdGlvbj4gY2FuIG9wZXJhdGUgaW4gdHdvIG1vZGVzLgogICAgSWYgYSBkYXRhYmFz ZSBuYW1lIGlzIHNwZWNpZmllZCwgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9u PgogICAgY29ubmVjdHMgdG8gdGhhdCBkYXRhYmFzZSBhbmQgcmVzdG9yZXMgYXJjaGl2ZSBjb250 ZW50cyBkaXJlY3RseSBpbnRvCi0gICB0aGUgZGF0YWJhc2UuICBPdGhlcndpc2UsIGEgc2NyaXB0 IGNvbnRhaW5pbmcgdGhlIFNRTAotICAgY29tbWFuZHMgbmVjZXNzYXJ5IHRvIHJlYnVpbGQgdGhl IGRhdGFiYXNlIGlzIGNyZWF0ZWQgYW5kIHdyaXR0ZW4KKyAgIHRoZSBkYXRhYmFzZS4KKyAgIFdo ZW4gcmVzdG9yaW5nIGZyb20gYSBkdW1wIG1hZGUgYnkgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8 L2FwcGxpY2F0aW9uPiwKKyAgIGVhY2ggZGF0YWJhc2Ugd2lsbCBiZSBjcmVhdGVkIGFuZCB0aGVu IHRoZSByZXN0b3JhdGlvbiB3aWxsIGJlIHJ1biBpbiB0aGF0CisgICBkYXRhYmFzZS4KKworICAg T3RoZXJ3aXNlLCB3aGVuIGEgZGF0YWJhc2UgbmFtZSBpcyBub3Qgc3BlY2lmaWVkLCBhIHNjcmlw dCBjb250YWluaW5nIHRoZSBTUUwKKyAgIGNvbW1hbmRzIG5lY2Vzc2FyeSB0byByZWJ1aWxkIHRo ZSBkYXRhYmFzZSBvciBjbHVzdGVyIGlzIGNyZWF0ZWQgYW5kIHdyaXR0ZW4KICAgIHRvIGEgZmls ZSBvciBzdGFuZGFyZCBvdXRwdXQuICBUaGlzIHNjcmlwdCBvdXRwdXQgaXMgZXF1aXZhbGVudCB0 bwotICAgdGhlIHBsYWluIHRleHQgb3V0cHV0IGZvcm1hdCBvZiA8YXBwbGljYXRpb24+cGdfZHVt cDwvYXBwbGljYXRpb24+LgorICAgdGhlIHBsYWluIHRleHQgb3V0cHV0IGZvcm1hdCBvZiA8YXBw bGljYXRpb24+cGdfZHVtcDwvYXBwbGljYXRpb24+IG9yCisgICA8YXBwbGljYXRpb24+cGdfZHVt cGFsbDwvYXBwbGljYXRpb24+LgorCiAgICBTb21lIG9mIHRoZSBvcHRpb25zIGNvbnRyb2xsaW5n IHRoZSBvdXRwdXQgYXJlIHRoZXJlZm9yZSBhbmFsb2dvdXMgdG8KICAgIDxhcHBsaWNhdGlvbj5w Z19kdW1wPC9hcHBsaWNhdGlvbj4gb3B0aW9ucy4KICAgPC9wYXJhPgpAQCAtMTUyLDYgKzE2MSw4 IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgICBjb21tYW5kcyB0aGF0IG1lbnRp b24gdGhpcyBkYXRhYmFzZS4KICAgICAgICAgQWNjZXNzIHByaXZpbGVnZXMgZm9yIHRoZSBkYXRh YmFzZSBpdHNlbGYgYXJlIGFsc28gcmVzdG9yZWQsCiAgICAgICAgIHVubGVzcyA8b3B0aW9uPi0t bm8tYWNsPC9vcHRpb24+IGlzIHNwZWNpZmllZC4KKyAgICAgICAgPG9wdGlvbj4tLWNyZWF0ZTwv b3B0aW9uPiBpcyByZXF1aXJlZCB3aGVuIHJlc3RvcmluZyBtdWx0aXBsZSBkYXRhYmFzZXMKKyAg ICAgICAgZnJvbSBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8 L2FwcGxpY2F0aW9uPi4KICAgICAgICA8L3BhcmE+CiAKICAgICAgICA8cGFyYT4KQEAgLTI0Nyw2 ICsyNTgsMTkgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICA8L2xpc3RpdGVtPgog ICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+ PG9wdGlvbj4tZzwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1nbG9iYWxz LW9ubHk8L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+Cisg ICAgICAgIFJlc3RvcmUgb25seSBnbG9iYWwgb2JqZWN0cyAocm9sZXMgYW5kIHRhYmxlc3BhY2Vz KSwgbm8gZGF0YWJhc2VzLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAg VGhpcyBvcHRpb24gaXMgb25seSByZWxldmFudCB3aGVuIHJlc3RvcmluZyBmcm9tIGFuIGFyY2hp dmUgbWFkZSB1c2luZyA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+LgorICAg ICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAg ICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi1JIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5pbmRleDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgogICAg ICAgPHRlcm0+PG9wdGlvbj4tLWluZGV4PTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5p bmRleDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgpAQCAtNTkxLDYgKzYxNSwyOCBAQCBQ b3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlz dGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi0tZXhj bHVkZS1kYXRhYmFzZT08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVybjwvcmVw bGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJh PgorICAgICAgICBEbyBub3QgcmVzdG9yZSBkYXRhYmFzZXMgd2hvc2UgbmFtZSBtYXRjaGVzCisg ICAgICAgIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJs ZT4uCisgICAgICAgIE11bHRpcGxlIHBhdHRlcm5zIGNhbiBiZSBleGNsdWRlZCBieSB3cml0aW5n IG11bHRpcGxlCisgICAgICAgIDxvcHRpb24+LS1leGNsdWRlLWRhdGFiYXNlPC9vcHRpb24+IHN3 aXRjaGVzLiAgVGhlCisgICAgICAgIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0 ZXJuPC9yZXBsYWNlYWJsZT4gcGFyYW1ldGVyIGlzCisgICAgICAgIGludGVycHJldGVkIGFzIGEg cGF0dGVybiBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgcnVsZXMgdXNlZCBieQorICAgICAgICA8YXBw bGljYXRpb24+cHNxbDwvYXBwbGljYXRpb24+J3MgPGxpdGVyYWw+XGQ8L2xpdGVyYWw+CisgICAg ICAgIGNvbW1hbmRzIChzZWUgPHhyZWYgbGlua2VuZD0iYXBwLXBzcWwtcGF0dGVybnMiLz4pLAor ICAgICAgICBzbyBtdWx0aXBsZSBkYXRhYmFzZXMgY2FuIGFsc28gYmUgZXhjbHVkZWQgYnkgd3Jp dGluZyB3aWxkY2FyZAorICAgICAgICBjaGFyYWN0ZXJzIGluIHRoZSBwYXR0ZXJuLiAgV2hlbiB1 c2luZyB3aWxkY2FyZHMsIGJlIGNhcmVmdWwgdG8KKyAgICAgICAgcXVvdGUgdGhlIHBhdHRlcm4g aWYgbmVlZGVkIHRvIHByZXZlbnQgc2hlbGwgd2lsZGNhcmQgZXhwYW5zaW9uLgorICAgICAgIDwv cGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBvcHRpb24gaXMgb25seSByZWxldmFu dCB3aGVuIHJlc3RvcmluZyBmcm9tIGFuIGFyY2hpdmUgbWFkZSB1c2luZyA8YXBwbGljYXRpb24+ cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0 ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8 dGVybT48b3B0aW9uPi0tZmlsdGVyPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5maWxl bmFtZTwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgogICAgICAgPGxpc3RpdGVtPgpkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5jIGIvc3JjL2Jpbi9wZ19kdW1wL2Nv bm5lY3RkYi5jCmluZGV4IGQ1NWQ1M2RiZWVhLi5kM2U5ZTI3MDAzZSAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIu YwpAQCAtMjI1LDcgKzIyNSw3IEBAIENvbm5lY3REYXRhYmFzZShjb25zdCBjaGFyICpkYm5hbWUs IGNvbnN0IGNoYXIgKmNvbm5lY3Rpb25fc3RyaW5nLAogCQlleGl0X25pY2VseSgxKTsKIAl9CiAK LQlQUWNsZWFyKGV4ZWN1dGVRdWVyeShjb25uLCBBTFdBWVNfU0VDVVJFX1NFQVJDSF9QQVRIX1NR TCkpOworCVBRY2xlYXIoZXhlY3V0ZVF1ZXJ5KGNvbm4sIEFMV0FZU19TRUNVUkVfU0VBUkNIX1BB VEhfU1FMLCBmYWxzZSkpOwogCiAJcmV0dXJuIGNvbm47CiB9CkBAIC0yNzUsNyArMjc1LDcgQEAg Y29uc3RydWN0Q29ublN0cihjb25zdCBjaGFyICoqa2V5d29yZHMsIGNvbnN0IGNoYXIgKip2YWx1 ZXMpCiAgKiBSdW4gYSBxdWVyeSwgcmV0dXJuIHRoZSByZXN1bHRzLCBleGl0IHByb2dyYW0gb24g ZmFpbHVyZS4KICAqLwogUEdyZXN1bHQgKgotZXhlY3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29u c3QgY2hhciAqcXVlcnkpCitleGVjdXRlUXVlcnkoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpx dWVyeSwgYm9vbCBpc19hcmNoaXZlKQogewogCVBHcmVzdWx0ICAgKnJlczsKIApAQCAtMjg3LDcg KzI4Nyw4IEBAIGV4ZWN1dGVRdWVyeShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KQog CXsKIAkJcGdfbG9nX2Vycm9yKCJxdWVyeSBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29u bikpOwogCQlwZ19sb2dfZXJyb3JfZGV0YWlsKCJRdWVyeSB3YXM6ICVzIiwgcXVlcnkpOwotCQlQ UWZpbmlzaChjb25uKTsKKwkJaWYgKCFpc19hcmNoaXZlKQorCQkJUFFmaW5pc2goY29ubik7CiAJ CWV4aXRfbmljZWx5KDEpOwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2Nvbm5l Y3RkYi5oIGIvc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5oCmluZGV4IDZjMWUxOTU0NzY5Li4w Yjc0MWI2OGNiMSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5oCisrKyBi L3NyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuaApAQCAtMjIsNSArMjIsNSBAQCBleHRlcm4gUEdj b25uICpDb25uZWN0RGF0YWJhc2UoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjb25u ZWN0aW9uX3N0cmluZwogCQkJCQkJCSAgIHRyaXZhbHVlIHByb21wdF9wYXNzd29yZCwgYm9vbCBm YWlsX29uX2Vycm9yLAogCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnByb2duYW1lLCBjb25zdCBjaGFy ICoqY29ubnN0ciwgaW50ICpzZXJ2ZXJfdmVyc2lvbiwKIAkJCQkJCQkgICBjaGFyICpwYXNzd29y ZCwgY2hhciAqb3ZlcnJpZGVfZGJuYW1lKTsKLWV4dGVybiBQR3Jlc3VsdCAqZXhlY3V0ZVF1ZXJ5 KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpOworZXh0ZXJuIFBHcmVzdWx0ICpleGVj dXRlUXVlcnkoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSwgYm9vbCBpc19hcmNoaXZl KTsKICNlbmRpZgkJCQkJCQkvKiBDT05ORUNUREJfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19kdW1wL21lc29uLmJ1aWxkIGIvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCmluZGV4IGYz YzY2OWY0ODRlLi4zZTIxYWFmNTc4MCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL21lc29u LmJ1aWxkCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZApAQCAtMTAzLDYgKzEwMyw3 IEBAIHRlc3RzICs9IHsKICAgICAgICd0LzAwNF9wZ19kdW1wX3BhcmFsbGVsLnBsJywKICAgICAg ICd0LzAwNV9wZ19kdW1wX2ZpbHRlcmZpbGUucGwnLAogICAgICAgJ3QvMDA2X3BnX2R1bXBfY29t cHJlc3MucGwnLAorCSAgJ3QvMDA3X3BnX2R1bXBhbGwucGwnLAogICAgICAgJ3QvMDEwX2R1bXBf Y29ubnN0ci5wbCcsCiAgICAgXSwKICAgfSwKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9w YXJhbGxlbC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMKaW5kZXggMDg2YWRjZGM1MDIu LjU5NzRkNjcwNmZkIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwuYworKysg Yi9zcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwuYwpAQCAtMzMzLDYgKzMzMywxNiBAQCBvbl9leGl0 X2Nsb3NlX2FyY2hpdmUoQXJjaGl2ZSAqQUhYKQogCW9uX2V4aXRfbmljZWx5KGFyY2hpdmVfY2xv c2VfY29ubmVjdGlvbiwgJnNodXRkb3duX2luZm8pOwogfQogCisvKgorICogV2hlbiBwZ19yZXN0 b3JlIHJlc3RvcmVzIG11bHRpcGxlIGRhdGFiYXNlcywgdGhlbiB1cGRhdGUgYWxyZWFkeSBhZGRl ZCBlbnRyeQorICogaW50byBhcnJheSBmb3IgY2xlYW51cC4KKyAqLwordm9pZAorcmVwbGFjZV9v bl9leGl0X2Nsb3NlX2FyY2hpdmUoQXJjaGl2ZSAqQUhYKQoreworCXNodXRkb3duX2luZm8uQUhY ID0gQUhYOworfQorCiAvKgogICogb25fZXhpdF9uaWNlbHkgaGFuZGxlciBmb3Igc2h1dHRpbmcg ZG93biBkYXRhYmFzZSBjb25uZWN0aW9ucyBhbmQKICAqIHdvcmtlciBwcm9jZXNzZXMgY2xlYW5s eS4KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaCBiL3NyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXAuaAppbmRleCBkOTA0MWRhZDcyMC4uZjYzMWQ5NDU0NzIgMTAwNjQ0Ci0t LSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwLmgKQEAgLTMxMiw3ICszMTIsNyBAQCBleHRlcm4gdm9pZCBTZXRBcmNoaXZlT3B0aW9u cyhBcmNoaXZlICpBSCwgRHVtcE9wdGlvbnMgKmRvcHQsIFJlc3RvcmVPcHRpb25zICpybwogCiBl eHRlcm4gdm9pZCBQcm9jZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKEFyY2hpdmUgKkFIWCk7CiAK LWV4dGVybiB2b2lkIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCk7CitleHRlcm4gdm9pZCBS ZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgsIGJvb2wgYXBwZW5kX2RhdGEsIGJvb2wgZ2xvYmFs c19vbmx5KTsKIAogLyogT3BlbiBhbiBleGlzdGluZyBhcmNoaXZlICovCiBleHRlcm4gQXJjaGl2 ZSAqT3BlbkFyY2hpdmUoY29uc3QgY2hhciAqRmlsZVNwZWMsIGNvbnN0IEFyY2hpdmVGb3JtYXQg Zm10KTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyBi L3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwppbmRleCBjODRiMDE3ZjIxYi4u ZDM1MjMyY2QwMzggMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2 ZXIuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKQEAgLTg2LDcg Kzg2LDcgQEAgc3RhdGljIGludAlSZXN0b3JpbmdUb0RCKEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0 YXRpYyB2b2lkIGR1bXBfbG9fYnVmKEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIGR1 bXBUaW1lc3RhbXAoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKm1zZywgdGltZV90IHRp bSk7CiBzdGF0aWMgdm9pZCBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIg KmZpbGVuYW1lLAotCQkJCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJl c3Npb25fc3BlYyk7CisJCQkJY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVz c2lvbl9zcGVjLCBib29sIGFwcGVuZF9kYXRhKTsKIHN0YXRpYyBDb21wcmVzc0ZpbGVIYW5kbGUg KlNhdmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgUmVzdG9yZU91dHB1 dChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NGaWxlSGFuZGxlICpzYXZlZE91dHB1dCk7CiAK QEAgLTMzOSw5ICszMzksMTQgQEAgUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBcmNoaXZl ICpBSFgpCiAJCVN0cmljdE5hbWVzQ2hlY2socm9wdCk7CiB9CiAKLS8qIFB1YmxpYyAqLworLyoK KyAqIFJlc3RvcmVBcmNoaXZlCisgKgorICogSWYgYXBwZW5kX2RhdGEgaXMgc2V0LCB0aGVuIGFw cGVuZCBkYXRhIGludG8gZmlsZSBhcyB3ZSBhcmUgcmVzdG9yaW5nIGR1bXAKKyAqIG9mIG11bHRp cGxlIGRhdGFiYXNlcyB3aGljaCB3YXMgdGFrZW4gYnkgcGdfZHVtcGFsbC4KKyAqLwogdm9pZAot UmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQorUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhY LCBib29sIGFwcGVuZF9kYXRhLCBib29sIGdsb2JhbHNfb25seSkKIHsKIAlBcmNoaXZlSGFuZGxl ICpBSCA9IChBcmNoaXZlSGFuZGxlICopIEFIWDsKIAlSZXN0b3JlT3B0aW9ucyAqcm9wdCA9IEFI LT5wdWJsaWMucm9wdDsKQEAgLTQ1OCw3ICs0NjMsNyBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZl ICpBSFgpCiAJICovCiAJc2F2ID0gU2F2ZU91dHB1dChBSCk7CiAJaWYgKHJvcHQtPmZpbGVuYW1l IHx8IHJvcHQtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtICE9IFBHX0NPTVBSRVNTSU9OX05P TkUpCi0JCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIHJvcHQtPmNvbXByZXNzaW9uX3Nw ZWMpOworCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCByb3B0LT5jb21wcmVzc2lvbl9z cGVjLCBhcHBlbmRfZGF0YSk7CiAKIAlhaHByaW50ZihBSCwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRh dGFiYXNlIGR1bXBcbi0tXG5cbiIpOwogCkBAIC03NjEsNiArNzY2LDIwIEBAIFJlc3RvcmVBcmNo aXZlKEFyY2hpdmUgKkFIWCkKIAkJCWlmICgodGUtPnJlcXMgJiAoUkVRX1NDSEVNQSB8IFJFUV9E QVRBIHwgUkVRX1NUQVRTKSkgPT0gMCkKIAkJCQljb250aW51ZTsJCS8qIGlnbm9yZSBpZiBub3Qg dG8gYmUgZHVtcGVkIGF0IGFsbCAqLwogCisJCQkvKiBTa2lwIERST1AgREFUQUJBU0UgaWYgZ2xv YmFsc19vbmx5LiAqLworCQkJaWYgKGdsb2JhbHNfb25seSAmJiB0ZSAmJiB0ZS0+dGFnICYmIChz dHJjbXAodGUtPnRhZywgIkRST1BfREFUQUJBU0UiKSA9PSAwKSkKKwkJCQljb250aW51ZTsKKwor CQkJLyogU2tpcCBmb3IgQ09OTkVDVCBtZXRhIGNvbW1hbmQuICovCisJCQlpZiAoIXJvcHQtPmZp bGVuYW1lICYmIHRlICYmIHRlLT50YWcgJiYKKwkJCQkJKHN0cmNtcCh0ZS0+dGFnLCAiQ09OTkVD VCIpID09IDApKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBTa2lwIGlmIG5vLXRhYmxlc3BhY2Ug aXMgZ2l2ZW4uICovCisJCQlpZiAocm9wdC0+bm9UYWJsZXNwYWNlICYmIHRlICYmIHRlLT50YWcg JiYgKChzdHJjbXAodGUtPnRhZywgImR1bXBUYWJsZXNwYWNlcyIpID09IDApIHx8CisJCQkJCShz dHJjbXAodGUtPnRhZywgImRyb3BUYWJsZXNwYWNlcyIpID09IDApKSkKKwkJCQljb250aW51ZTsK KwogCQkJc3dpdGNoIChfdG9jRW50cnlSZXN0b3JlUGFzcyh0ZSkpCiAJCQl7CiAJCQkJY2FzZSBS RVNUT1JFX1BBU1NfTUFJTjoKQEAgLTEzMTYsNyArMTMzNSw3IEBAIFByaW50VE9DU3VtbWFyeShB cmNoaXZlICpBSFgpCiAKIAlzYXYgPSBTYXZlT3V0cHV0KEFIKTsKIAlpZiAocm9wdC0+ZmlsZW5h bWUpCi0JCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIG91dF9jb21wcmVzc2lvbl9zcGVj KTsKKwkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgb3V0X2NvbXByZXNzaW9uX3NwZWMs IGZhbHNlKTsKIAogCWlmIChzdHJmdGltZShzdGFtcF9zdHIsIHNpemVvZihzdGFtcF9zdHIpLCBQ R0RVTVBfU1RSRlRJTUVfRk1ULAogCQkJCSBsb2NhbHRpbWUoJkFILT5jcmVhdGVEYXRlKSkgPT0g MCkKQEAgLTE2OTUsNyArMTcxNCw4IEBAIGFyY2hwcmludGYoQXJjaGl2ZSAqQUgsIGNvbnN0IGNo YXIgKmZtdCwuLi4pCiAKIHN0YXRpYyB2b2lkCiBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgs IGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRp b24gY29tcHJlc3Npb25fc3BlYykKKwkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9u IGNvbXByZXNzaW9uX3NwZWMsCisJCSAgYm9vbCBhcHBlbmRfZGF0YSkKIHsKIAlDb21wcmVzc0Zp bGVIYW5kbGUgKkNGSDsKIAljb25zdCBjaGFyICptb2RlOwpAQCAtMTcxNSw3ICsxNzM1LDcgQEAg U2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKIAllbHNl CiAJCWZuID0gZmlsZW5vKHN0ZG91dCk7CiAKLQlpZiAoQUgtPm1vZGUgPT0gYXJjaE1vZGVBcHBl bmQpCisJaWYgKGFwcGVuZF9kYXRhIHx8IEFILT5tb2RlID09IGFyY2hNb2RlQXBwZW5kKQogCQlt b2RlID0gUEdfQklOQVJZX0E7CiAJZWxzZQogCQltb2RlID0gUEdfQklOQVJZX1c7CmRpZmYgLS1n aXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggYi9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKaW5kZXggMzI1YjUzZmM5YmQuLjM2NTA3M2IzZWFlIDEw MDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKKysrIGIvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCkBAIC0zOTQsNiArMzk0LDcgQEAgc3Ry dWN0IF90b2NFbnRyeQogCiBleHRlcm4gaW50CXBhcmFsbGVsX3Jlc3RvcmUoQXJjaGl2ZUhhbmRs ZSAqQUgsIFRvY0VudHJ5ICp0ZSk7CiBleHRlcm4gdm9pZCBvbl9leGl0X2Nsb3NlX2FyY2hpdmUo QXJjaGl2ZSAqQUhYKTsKK2V4dGVybiB2b2lkIHJlcGxhY2Vfb25fZXhpdF9jbG9zZV9hcmNoaXZl KEFyY2hpdmUgKkFIWCk7CiAKIGV4dGVybiB2b2lkIHdhcm5fb3JfZXhpdF9ob3JyaWJseShBcmNo aXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZm10LC4uLikgcGdfYXR0cmlidXRlX3ByaW50Zigy LCAzKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYyBiL3Ny Yy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMKaW5kZXggYjViYTNiNDZkZDkuLjgxOGI4MGE5 MzY5IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jCisrKyBiL3Ny Yy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMKQEAgLTgyNiw3ICs4MjYsNyBAQCBfQ2xvc2VB cmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFIKQogCQlzYXZWZXJib3NlID0gQUgtPnB1YmxpYy52ZXJi b3NlOwogCQlBSC0+cHVibGljLnZlcmJvc2UgPSAwOwogCi0JCVJlc3RvcmVBcmNoaXZlKChBcmNo aXZlICopIEFIKTsKKwkJUmVzdG9yZUFyY2hpdmUoKEFyY2hpdmUgKikgQUgsIGZhbHNlLCBmYWxz ZSk7CiAKIAkJU2V0QXJjaGl2ZU9wdGlvbnMoKEFyY2hpdmUgKikgQUgsIHNhdkRvcHQsIHNhdlJv cHQpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuYwppbmRleCAyNDQ1MDg1ZGJiZC4uZTFhMTcxMTI1NGQgMTAwNjQ0Ci0t LSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1 bXAuYwpAQCAtMTI5Miw3ICsxMjkyLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJ ICogcmlnaHQgbm93LgogCSAqLwogCWlmIChwbGFpblRleHQpCi0JCVJlc3RvcmVBcmNoaXZlKGZv dXQpOworCQlSZXN0b3JlQXJjaGl2ZShmb3V0LCBmYWxzZSwgZmFsc2UpOwogCiAJQ2xvc2VBcmNo aXZlKGZvdXQpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jIGIv c3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYwppbmRleCBiYjQ1MWMxYmFlMS4uMDFlMzY4M2M4 NGIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKKysrIGIvc3JjL2Jp bi9wZ19kdW1wL3BnX2R1bXBhbGwuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgImZlX3V0 aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUgImZpbHRlci5oIgogI2luY2x1ZGUgImdldG9w dF9sb25nLmgiCisjaW5jbHVkZSAicGdfYmFja3VwX2FyY2hpdmVyLmgiCiAKIC8qIHZlcnNpb24g c3RyaW5nIHdlIGV4cGVjdCBiYWNrIGZyb20gcGdfZHVtcCAqLwogI2RlZmluZSBQR0RVTVBfVkVS U0lPTlNUUiAicGdfZHVtcCAoUG9zdGdyZVNRTCkgIiBQR19WRVJTSU9OICJcbiIKQEAgLTY1LDkg KzY2LDkgQEAgc3RhdGljIHZvaWQgZHJvcFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubik7CiBzdGF0 aWMgdm9pZCBkdW1wVGFibGVzcGFjZXMoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lkIGRyb3BE QnMoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lkIGR1bXBVc2VyQ29uZmlnKFBHY29ubiAqY29u biwgY29uc3QgY2hhciAqdXNlcm5hbWUpOwotc3RhdGljIHZvaWQgZHVtcERhdGFiYXNlcyhQR2Nv bm4gKmNvbm4pOworc3RhdGljIHZvaWQgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4sIGJvb2wg b3V0cHV0X2NsZWFuKTsKIHN0YXRpYyB2b2lkIGR1bXBUaW1lc3RhbXAoY29uc3QgY2hhciAqbXNn KTsKLXN0YXRpYyBpbnQJcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAq Y3JlYXRlX29wdHMpOworc3RhdGljIGludCBydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBj b25zdCBjaGFyICpjcmVhdGVfb3B0cywgY2hhciAqZGJmaWxlKTsKIHN0YXRpYyB2b2lkIGJ1aWxk U2hTZWNMYWJlbHMoUEdjb25uICpjb25uLAogCQkJCQkJCSBjb25zdCBjaGFyICpjYXRhbG9nX25h bWUsIE9pZCBvYmplY3RJZCwKIAkJCQkJCQkgY29uc3QgY2hhciAqb2JqdHlwZSwgY29uc3QgY2hh ciAqb2JqbmFtZSwKQEAgLTc2LDExICs3NywxMyBAQCBzdGF0aWMgdm9pZCBleGVjdXRlQ29tbWFu ZChQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KTsKIHN0YXRpYyB2b2lkIGV4cGFuZF9k Ym5hbWVfcGF0dGVybnMoUEdjb25uICpjb25uLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJucywK IAkJCQkJCQkJICAgU2ltcGxlU3RyaW5nTGlzdCAqbmFtZXMpOwogc3RhdGljIHZvaWQgcmVhZF9k dW1wYWxsX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFNpbXBsZVN0cmluZ0xpc3QgKnBh dHRlcm4pOworc3RhdGljIEFyY2hpdmVGb3JtYXQgcGFyc2VEdW1wRm9ybWF0KGNvbnN0IGNoYXIg KmZvcm1hdCk7CitzdGF0aWMgaW50IGNyZWF0ZUR1bXBJZCh2b2lkKTsKK3N0YXRpYyB2b2lkIGNy ZWF0ZU9uZUFyY2hpdmVFbnRyeShjb25zdCBjaGFyICpxdWVyeSwgY29uc3QgY2hhciAqdGFnKTsK IAogc3RhdGljIGNoYXIgcGdfZHVtcF9iaW5bTUFYUEdQQVRIXTsKIHN0YXRpYyBQUUV4cEJ1ZmZl ciBwZ2R1bXBvcHRzOwogc3RhdGljIGNvbnN0IGNoYXIgKmNvbm5zdHIgPSAiIjsKLXN0YXRpYyBi b29sIG91dHB1dF9jbGVhbiA9IGZhbHNlOwogc3RhdGljIGJvb2wgc2tpcF9hY2xzID0gZmFsc2U7 CiBzdGF0aWMgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBzdGF0aWMgYm9vbCBkb3N5bmMgPSB0cnVl OwpAQCAtMTIzLDYgKzEyNiwxMCBAQCBzdGF0aWMgU2ltcGxlU3RyaW5nTGlzdCBkYXRhYmFzZV9l eGNsdWRlX3BhdHRlcm5zID0ge05VTEwsIE5VTEx9Owogc3RhdGljIFNpbXBsZVN0cmluZ0xpc3Qg ZGF0YWJhc2VfZXhjbHVkZV9uYW1lcyA9IHtOVUxMLCBOVUxMfTsKIAogc3RhdGljIGNoYXIgKnJl c3RyaWN0X2tleTsKK3N0YXRpYyBBcmNoaXZlICpmb3V0ID0gTlVMTDsKK3N0YXRpYyBwZ19jb21w cmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMgPSB7MH07CitzdGF0aWMgaW50IGR1 bXBJZFZhbCA9IDA7CitzdGF0aWMgQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCA9IGFyY2hO dWxsOwogCiBpbnQKIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKQEAgLTE0OCw2ICsxNTUs NyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCXsicGFzc3dvcmQiLCBub19hcmd1 bWVudCwgTlVMTCwgJ1cnfSwKIAkJeyJuby1wcml2aWxlZ2VzIiwgbm9fYXJndW1lbnQsIE5VTEws ICd4J30sCiAJCXsibm8tYWNsIiwgbm9fYXJndW1lbnQsIE5VTEwsICd4J30sCisJCXsiZm9ybWF0 IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdGJ30sCiAKIAkJLyoKIAkJICogdGhlIGZvbGxv d2luZyBvcHRpb25zIGRvbid0IGhhdmUgYW4gZXF1aXZhbGVudCBzaG9ydCBvcHRpb24gbGV0dGVy CkBAIC0xOTcsNiArMjA1LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWNoYXIJ ICAgKnBnZGIgPSBOVUxMOwogCWNoYXIJICAgKnVzZV9yb2xlID0gTlVMTDsKIAljb25zdCBjaGFy ICpkdW1wZW5jb2RpbmcgPSBOVUxMOworCWNvbnN0IGNoYXIgKmZvcm1hdF9uYW1lID0gInAiOwog CXRyaXZhbHVlCXByb21wdF9wYXNzd29yZCA9IFRSSV9ERUZBVUxUOwogCWJvb2wJCWRhdGFfb25s eSA9IGZhbHNlOwogCWJvb2wJCWdsb2JhbHNfb25seSA9IGZhbHNlOwpAQCAtMjA4LDYgKzIxNyw3 IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlpbnQJCQljLAogCQkJCXJldDsKIAlp bnQJCQlvcHRpbmRleDsKKwlEdW1wT3B0aW9ucyBkb3B0OwogCiAJcGdfbG9nZ2luZ19pbml0KGFy Z3ZbMF0pOwogCXBnX2xvZ2dpbmdfc2V0X2xldmVsKFBHX0xPR19XQVJOSU5HKTsKQEAgLTI0Niw3 ICsyNTYsOSBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAKIAlwZ2R1bXBvcHRzID0g Y3JlYXRlUFFFeHBCdWZmZXIoKTsKIAotCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFy Z3YsICJhY2Q6RTpmOmdoOmw6T3A6cnNTOnRVOnZ3V3giLCBsb25nX29wdGlvbnMsICZvcHRpbmRl eCkpICE9IC0xKQorCUluaXREdW1wT3B0aW9ucygmZG9wdCk7CisKKwl3aGlsZSAoKGMgPSBnZXRv cHRfbG9uZyhhcmdjLCBhcmd2LCAiYWNkOkU6ZjpGOmdoOmw6T3A6cnNTOnRVOnZ3V3giLCBsb25n X29wdGlvbnMsICZvcHRpbmRleCkpICE9IC0xKQogCXsKIAkJc3dpdGNoIChjKQogCQl7CkBAIC0y NTYsNyArMjY4LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJCWJyZWFrOwog CiAJCQljYXNlICdjJzoKLQkJCQlvdXRwdXRfY2xlYW4gPSB0cnVlOworCQkJCWRvcHQub3V0cHV0 Q2xlYW4gPSB0cnVlOwogCQkJCWJyZWFrOwogCiAJCQljYXNlICdkJzoKQEAgLTI3NCw3ICsyODYs OSBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQkJYXBwZW5kUFFFeHBCdWZmZXJT dHIocGdkdW1wb3B0cywgIiAtZiAiKTsKIAkJCQlhcHBlbmRTaGVsbFN0cmluZyhwZ2R1bXBvcHRz LCBmaWxlbmFtZSk7CiAJCQkJYnJlYWs7Ci0KKwkJCWNhc2UgJ0YnOgorCQkJCWZvcm1hdF9uYW1l ID0gcGdfc3RyZHVwKG9wdGFyZyk7CisJCQkJYnJlYWs7CiAJCQljYXNlICdnJzoKIAkJCQlnbG9i YWxzX29ubHkgPSB0cnVlOwogCQkJCWJyZWFrOwpAQCAtMzE0LDYgKzMyOCw3IEBAIG1haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogCQkJY2FzZSAnVSc6CiAJCQkJcGd1c2VyID0gcGdfc3Ry ZHVwKG9wdGFyZyk7CisJCQkJZG9wdC5jcGFyYW1zLnVzZXJuYW1lID0gcGdfc3RyZHVwKG9wdGFy Zyk7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgJ3YnOgpAQCAtNDE5LDcgKzQzNCw3IEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJZXhpdF9uaWNlbHkoMSk7CiAJfQogCi0JaWYgKGlm X2V4aXN0cyAmJiAhb3V0cHV0X2NsZWFuKQorCWlmIChpZl9leGlzdHMgJiYgIWRvcHQub3V0cHV0 Q2xlYW4pCiAJCXBnX2ZhdGFsKCJvcHRpb24gLS1pZi1leGlzdHMgcmVxdWlyZXMgb3B0aW9uIC1j Ly0tY2xlYW4iKTsKIAogCWlmIChyb2xlc19vbmx5ICYmIHRhYmxlc3BhY2VzX29ubHkpCkBAIC00 MjksNiArNDQ0LDI1IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJZXhpdF9uaWNl bHkoMSk7CiAJfQogCisJLyogR2V0IGZvcm1hdCBmb3IgZHVtcC4gKi8KKwlhcmNoRHVtcEZvcm1h dCA9IHBhcnNlRHVtcEZvcm1hdChmb3JtYXRfbmFtZSk7CisKKwkvKgorCSAqIElmIGEgbm9uLXBs YWluIGZvcm1hdCBpcyBzcGVjaWZpZWQsIGEgZmlsZSBuYW1lIGlzIGFsc28gcmVxdWlyZWQgYXMg dGhlCisJICogcGF0aCB0byB0aGUgbWFpbiBkaXJlY3RvcnkuCisJICovCisJaWYgKGFyY2hEdW1w Rm9ybWF0ICE9IGFyY2hOdWxsICYmCisJCSghZmlsZW5hbWUgfHwgc3RyY21wKGZpbGVuYW1lLCAi IikgPT0gMCkpCisJeworCQlwZ19sb2dfZXJyb3IoIm9wdGlvbiAtRi8tLWZvcm1hdD1kfGN8dCBy ZXF1aXJlcyBvcHRpb24gLWYvLS1maWxlIik7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIl cyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJCWV4aXRfbmlj ZWx5KDEpOworCX0KKworCS8qIHJlc3RyaWN0LWtleSBpcyBvbmx5IHN1cHBvcnRlZCB3aXRoIC0t Zm9ybWF0PXBsYWluICovCisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsICYmIHJlc3Ry aWN0X2tleSkKKwkJcGdfZmF0YWwoIm9wdGlvbiAtLXJlc3RyaWN0LWtleSBjYW4gb25seSBiZSB1 c2VkIHdpdGggLS1mb3JtYXQ9cGxhaW4iKTsKKwogCS8qCiAJICogSWYgcGFzc3dvcmQgdmFsdWVz IGFyZSBub3QgcmVxdWlyZWQgaW4gdGhlIGR1bXAsIHN3aXRjaCB0byB1c2luZwogCSAqIHBnX3Jv bGVzIHdoaWNoIGlzIGVxdWFsbHkgdXNlZnVsLCBqdXN0IG1vcmUgbGlrZWx5IHRvIGhhdmUgdW5y ZXN0cmljdGVkCkBAIC00ODksNiArNTIzLDI3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKIAlpZiAoc2VxdWVuY2VfZGF0YSkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocGdkdW1wb3B0 cywgIiAtLXNlcXVlbmNlLWRhdGEiKTsKIAorCS8qCisJICogT3BlbiB0aGUgb3V0cHV0IGZpbGUg aWYgcmVxdWlyZWQsIG90aGVyd2lzZSB1c2Ugc3Rkb3V0LiAgSWYgcmVxdWlyZWQsCisJICogdGhl biBjcmVhdGUgbmV3IGRpcmVjdG9yeS4KKwkgKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJj aE51bGwpCisJeworCQlBc3NlcnQoZmlsZW5hbWUpOworCisJCS8qIENyZWF0ZSBuZXcgZGlyZWN0 b3J5IG9yIGFjY2VwdCB0aGUgZW1wdHkgZXhpc3RpbmcgZGlyZWN0b3J5LiAqLworCQljcmVhdGVf b3Jfb3Blbl9kaXIoZmlsZW5hbWUpOworCX0KKwllbHNlIGlmIChmaWxlbmFtZSkKKwl7CisJCU9Q RiA9IGZvcGVuKGZpbGVuYW1lLCBQR19CSU5BUllfVyk7CisJCWlmICghT1BGKQorCQkJcGdfZmF0 YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlIFwiJXNcIjogJW0iLAorCQkJCQkgZmlsZW5h bWUpOworCX0KKwllbHNlCisJCU9QRiA9IHN0ZG91dDsKKwogCS8qCiAJICogSWYgeW91IGRvbid0 IHByb3ZpZGUgYSByZXN0cmljdCBrZXksIG9uZSB3aWxsIGJlIGFwcG9pbnRlZCBmb3IgeW91Lgog CSAqLwpAQCAtNTM4LDE5ICs1OTMsNiBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJ ZXhwYW5kX2RibmFtZV9wYXR0ZXJucyhjb25uLCAmZGF0YWJhc2VfZXhjbHVkZV9wYXR0ZXJucywK IAkJCQkJCSAgICZkYXRhYmFzZV9leGNsdWRlX25hbWVzKTsKIAotCS8qCi0JICogT3BlbiB0aGUg b3V0cHV0IGZpbGUgaWYgcmVxdWlyZWQsIG90aGVyd2lzZSB1c2Ugc3Rkb3V0Ci0JICovCi0JaWYg KGZpbGVuYW1lKQotCXsKLQkJT1BGID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKLQkJ aWYgKCFPUEYpCi0JCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wi OiAlbSIsCi0JCQkJCSBmaWxlbmFtZSk7Ci0JfQotCWVsc2UKLQkJT1BGID0gc3Rkb3V0OwotCiAJ LyoKIAkgKiBTZXQgdGhlIGNsaWVudCBlbmNvZGluZyBpZiByZXF1ZXN0ZWQuCiAJICovCkBAIC01 ODUsMzcgKzYyNywxMTAgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWlmIChxdW90 ZV9hbGxfaWRlbnRpZmllcnMpCiAJCWV4ZWN1dGVDb21tYW5kKGNvbm4sICJTRVQgcXVvdGVfYWxs X2lkZW50aWZpZXJzID0gdHJ1ZSIpOwogCi0JZnByaW50ZihPUEYsICItLVxuLS0gUG9zdGdyZVNR TCBkYXRhYmFzZSBjbHVzdGVyIGR1bXBcbi0tXG5cbiIpOwotCWlmICh2ZXJib3NlKQorCWlmICh2 ZXJib3NlICYmIGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQogCQlkdW1wVGltZXN0YW1wKCJT dGFydGVkIG9uIik7CiAKLQkvKgotCSAqIEVudGVyIHJlc3RyaWN0ZWQgbW9kZSB0byBibG9jayBh bnkgdW5leHBlY3RlZCBwc3FsIG1ldGEtY29tbWFuZHMuICBBCi0JICogbWFsaWNpb3VzIHNvdXJj ZSBtaWdodCB0cnkgdG8gaW5qZWN0IGEgdmFyaWV0eSBvZiB0aGluZ3MgdmlhIGJvZ3VzCi0JICog cmVzcG9uc2VzIHRvIHF1ZXJpZXMuICBXaGlsZSB3ZSBjYW5ub3QgcHJldmVudCBzdWNoIHNvdXJj ZXMgZnJvbQotCSAqIGFmZmVjdGluZyB0aGUgZGVzdGluYXRpb24gYXQgcmVzdG9yZSB0aW1lLCB3 ZSBjYW4gYmxvY2sgcHNxbAotCSAqIG1ldGEtY29tbWFuZHMgc28gdGhhdCB0aGUgY2xpZW50IG1h Y2hpbmUgdGhhdCBydW5zIHBzcWwgd2l0aCB0aGUgZHVtcAotCSAqIG91dHB1dCByZW1haW5zIHVu YWZmZWN0ZWQuCi0JICovCi0JZnByaW50ZihPUEYsICJcXHJlc3RyaWN0ICVzXG5cbiIsIHJlc3Ry aWN0X2tleSk7CisJLyogY3JlYXRlIGEgYXJjaGl2ZSBmaWxlIGZvciBnbG9iYWwgY29tbWFuZHMu ICovCisJaWYgKGZpbGVuYW1lICYmIGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJ Y2hhcglnbG9iYWxfcGF0aFtNQVhQR1BBVEhdOwogCi0JLyoKLQkgKiBXZSB1c2VkIHRvIGVtaXQg XGNvbm5lY3QgcG9zdGdyZXMgaGVyZSwgYnV0IHRoYXQgc2VydmVkIG5vIHB1cnBvc2UKLQkgKiBv dGhlciB0aGFuIHRvIGJyZWFrIHRoaW5ncyBmb3IgaW5zdGFsbGF0aW9ucyB3aXRob3V0IGEgcG9z dGdyZXMKLQkgKiBkYXRhYmFzZS4gIEV2ZXJ5dGhpbmcgd2UncmUgcmVzdG9yaW5nIGhlcmUgaXMg YSBnbG9iYWwsIHNvIHdoaWNoZXZlcgotCSAqIGRhdGFiYXNlIHdlJ3JlIGNvbm5lY3RlZCB0byBh dCB0aGUgbW9tZW50IGlzIGZpbmUuCi0JICovCisJCS8qIFNldCBmaWxlIHBhdGggZm9yIGdsb2Jh bCBzcWwgY29tbWFuZHMuICovCisJCXNucHJpbnRmKGdsb2JhbF9wYXRoLCBNQVhQR1BBVEgsICIl cy90b2MuZ2xvIiwgZmlsZW5hbWUpOwogCi0JLyogUmVzdG9yZSB3aWxsIG5lZWQgdG8gd3JpdGUg dG8gdGhlIHRhcmdldCBjbHVzdGVyICovCi0JZnByaW50ZihPUEYsICJTRVQgZGVmYXVsdF90cmFu c2FjdGlvbl9yZWFkX29ubHkgPSBvZmY7XG5cbiIpOworCQkvKiBPcGVuIHRoZSBvdXRwdXQgZmls ZSAqLworCQlmb3V0ID0gQ3JlYXRlQXJjaGl2ZShnbG9iYWxfcGF0aCwgYXJjaEN1c3RvbSwgY29t cHJlc3Npb25fc3BlYywKKwkJCQlkb3N5bmMsIGFyY2hNb2RlV3JpdGUsIE5VTEwsIERBVEFfRElS X1NZTkNfTUVUSE9EX0ZTWU5DKTsKKworCQkvKiBNYWtlIGR1bXAgb3B0aW9ucyBhY2Nlc3NpYmxl IHJpZ2h0IGF3YXkgKi8KKwkJU2V0QXJjaGl2ZU9wdGlvbnMoZm91dCwgJmRvcHQsIE5VTEwpOwor CQkoKEFyY2hpdmVIYW5kbGUqKWZvdXQpLT5jb25uZWN0aW9uID0gY29ubjsKKwkJKChBcmNoaXZl SGFuZGxlKilmb3V0KS0+cHVibGljLm51bVdvcmtlcnMgPSAxOworCisJCS8qIFJlZ2lzdGVyIHRo ZSBjbGVhbnVwIGhvb2sgKi8KKwkJb25fZXhpdF9jbG9zZV9hcmNoaXZlKGZvdXQpOworCisJCS8q IExldCB0aGUgYXJjaGl2ZXIga25vdyBob3cgbm9pc3kgdG8gYmUgKi8KKwkJZm91dC0+dmVyYm9z ZSA9IHZlcmJvc2U7CisKKwkJLyoKKwkJICogV2UgYWxsb3cgdGhlIHNlcnZlciB0byBiZSBiYWNr IHRvIDkuMiwgYW5kIHVwIHRvIGFueSBtaW5vciByZWxlYXNlIG9mCisJCSAqIG91ciBvd24gbWFq b3IgdmVyc2lvbi4gIChTZWUgYWxzbyB2ZXJzaW9uIGNoZWNrIGluIHBnX2R1bXBhbGwuYy4pCisJ CSAqLworCQlmb3V0LT5taW5SZW1vdGVWZXJzaW9uID0gOTAyMDA7CisJCWZvdXQtPm1heFJlbW90 ZVZlcnNpb24gPSAoUEdfVkVSU0lPTl9OVU0gLyAxMDApICogMTAwICsgOTk7CisJCWZvdXQtPm51 bVdvcmtlcnMgPSAxOwogCi0JLyogUmVwbGljYXRlIGVuY29kaW5nIGFuZCBzdGRfc3RyaW5ncyBp biBvdXRwdXQgKi8KLQlmcHJpbnRmKE9QRiwgIlNFVCBjbGllbnRfZW5jb2RpbmcgPSAnJXMnO1xu IiwKLQkJCXBnX2VuY29kaW5nX3RvX2NoYXIoZW5jb2RpbmcpKTsKLQlmcHJpbnRmKE9QRiwgIlNF VCBzdGFuZGFyZF9jb25mb3JtaW5nX3N0cmluZ3MgPSAlcztcbiIsIHN0ZF9zdHJpbmdzKTsKLQlp ZiAoc3RyY21wKHN0ZF9zdHJpbmdzLCAib2ZmIikgPT0gMCkKLQkJZnByaW50ZihPUEYsICJTRVQg ZXNjYXBlX3N0cmluZ193YXJuaW5nID0gb2ZmO1xuIik7Ci0JZnByaW50ZihPUEYsICJcbiIpOwor CQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0 ZXIgZHVtcFxuLS1cblxuIiwgIkNPTU1FTlQiKTsKKworCQkvKiBkZWZhdWx0X3RyYW5zYWN0aW9u X3JlYWRfb25seSA9IG9mZiAqLworCQl7CisJCQlQUUV4cEJ1ZmZlciBxcnkgPSBjcmVhdGVQUUV4 cEJ1ZmZlcigpOworCisJCQlwZ19sb2dfaW5mbygic2F2aW5nIGRlZmF1bHRfdHJhbnNhY3Rpb25f cmVhZF9vbmx5ID0gb2ZmIik7CisJCQlhcHBlbmRQUUV4cEJ1ZmZlcihxcnksICJTRVQgZGVmYXVs dF90cmFuc2FjdGlvbl9yZWFkX29ubHkgPSBvZmY7XG4iKTsKKwkJCWNyZWF0ZU9uZUFyY2hpdmVF bnRyeShxcnktPmRhdGEsICJERUZBVUxUX1RSQU5TQUNUSU9OX1JFQURfT05MWSIpOworCQkJZGVz dHJveVBRRXhwQnVmZmVyKHFyeSk7CisJCX0KKworCQkvKiBkdW1wRW5jb2Rpbmc6IHB1dCB0aGUg Y29ycmVjdCBlbmNvZGluZyBpbnRvIHRoZSBhcmNoaXZlICovCisJCXsKKwkJCVBRRXhwQnVmZmVy IHFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJCQljb25zdCBjaGFyICplbmNuYW1lID0gcGdf ZW5jb2RpbmdfdG9fY2hhcihlbmNvZGluZyk7CisKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHFy eSwgIlNFVCBjbGllbnRfZW5jb2RpbmcgPSAiKTsKKwkJCWFwcGVuZFN0cmluZ0xpdGVyYWxBSChx cnksIGVuY25hbWUsIGZvdXQpOworCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXJ5LCAiO1xuIik7 CisKKwkJCXBnX2xvZ19pbmZvKCJzYXZpbmcgZW5jb2RpbmcgPSAlcyIsIGVuY25hbWUpOworCQkJ Y3JlYXRlT25lQXJjaGl2ZUVudHJ5KHFyeS0+ZGF0YSwgIkVOQ09ESU5HIik7CisJCQlkZXN0cm95 UFFFeHBCdWZmZXIocXJ5KTsKKwkJfQorCisJCS8qIGR1bXBTdGRTdHJpbmdzOiBwdXQgdGhlIGNv cnJlY3QgZXNjYXBlIHN0cmluZyBiZWhhdmlvciBpbnRvIHRoZSBhcmNoaXZlICovCisJCXsKKwkJ CWNvbnN0IGNoYXIgKnN0ZHN0cmluZ3MgPSBzdGRfc3RyaW5ncyA/ICJvbiIgOiAib2ZmIjsKKwkJ CVBRRXhwQnVmZmVyIHFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwkJCXBnX2xvZ19pbmZv KCJzYXZpbmcgXCJzdGFuZGFyZF9jb25mb3JtaW5nX3N0cmluZ3MgPSAlc1wiIiwgc3Rkc3RyaW5n cyk7CisJCQlhcHBlbmRQUUV4cEJ1ZmZlcihxcnksICJTRVQgc3RhbmRhcmRfY29uZm9ybWluZ19z dHJpbmdzID0gJyVzJztcbiIsCisJCQkJCXN0ZHN0cmluZ3MpOworCQkJY3JlYXRlT25lQXJjaGl2 ZUVudHJ5KHFyeS0+ZGF0YSwgIlNURFNUUklOR1MiKTsKKwkJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihx cnkpOworCQl9CisJfQorCWVsc2UKKwl7CisJCWZwcmludGYoT1BGLCAiLS1cbi0tIFBvc3RncmVT UUwgZGF0YWJhc2UgY2x1c3RlciBkdW1wXG4tLVxuXG4iKTsKKworCQkvKgorCQkgKiBFbnRlciBy ZXN0cmljdGVkIG1vZGUgdG8gYmxvY2sgYW55IHVuZXhwZWN0ZWQgcHNxbCBtZXRhLWNvbW1hbmRz LiAgQQorCQkgKiBtYWxpY2lvdXMgc291cmNlIG1pZ2h0IHRyeSB0byBpbmplY3QgYSB2YXJpZXR5 IG9mIHRoaW5ncyB2aWEgYm9ndXMKKwkJICogcmVzcG9uc2VzIHRvIHF1ZXJpZXMuICBXaGlsZSB3 ZSBjYW5ub3QgcHJldmVudCBzdWNoIHNvdXJjZXMgZnJvbQorCQkgKiBhZmZlY3RpbmcgdGhlIGRl c3RpbmF0aW9uIGF0IHJlc3RvcmUgdGltZSwgd2UgY2FuIGJsb2NrIHBzcWwKKwkJICogbWV0YS1j b21tYW5kcyBzbyB0aGF0IHRoZSBjbGllbnQgbWFjaGluZSB0aGF0IHJ1bnMgcHNxbCB3aXRoIHRo ZSBkdW1wCisJCSAqIG91dHB1dCByZW1haW5zIHVuYWZmZWN0ZWQuCisJCSAqLworCQlmcHJpbnRm KE9QRiwgIlxccmVzdHJpY3QgJXNcblxuIiwgcmVzdHJpY3Rfa2V5KTsKKworCQkvKgorCQkgKiBX ZSB1c2VkIHRvIGVtaXQgXGNvbm5lY3QgcG9zdGdyZXMgaGVyZSwgYnV0IHRoYXQgc2VydmVkIG5v IHB1cnBvc2UKKwkJICogb3RoZXIgdGhhbiB0byBicmVhayB0aGluZ3MgZm9yIGluc3RhbGxhdGlv bnMgd2l0aG91dCBhIHBvc3RncmVzCisJCSAqIGRhdGFiYXNlLiAgRXZlcnl0aGluZyB3ZSdyZSBy ZXN0b3JpbmcgaGVyZSBpcyBhIGdsb2JhbCwgc28gd2hpY2hldmVyCisJCSAqIGRhdGFiYXNlIHdl J3JlIGNvbm5lY3RlZCB0byBhdCB0aGUgbW9tZW50IGlzIGZpbmUuCisJCSAqLworCisJCS8qIFJl c3RvcmUgd2lsbCBuZWVkIHRvIHdyaXRlIHRvIHRoZSB0YXJnZXQgY2x1c3RlciAqLworCQlmcHJp bnRmKE9QRiwgIlNFVCBkZWZhdWx0X3RyYW5zYWN0aW9uX3JlYWRfb25seSA9IG9mZjtcblxuIik7 CisKKwkJLyogUmVwbGljYXRlIGVuY29kaW5nIGFuZCBzdGRfc3RyaW5ncyBpbiBvdXRwdXQgKi8K KwkJZnByaW50ZihPUEYsICJTRVQgY2xpZW50X2VuY29kaW5nID0gJyVzJztcbiIsCisJCQkJcGdf ZW5jb2RpbmdfdG9fY2hhcihlbmNvZGluZykpOworCQlmcHJpbnRmKE9QRiwgIlNFVCBzdGFuZGFy ZF9jb25mb3JtaW5nX3N0cmluZ3MgPSAlcztcbiIsIHN0ZF9zdHJpbmdzKTsKKwkJaWYgKHN0cmNt cChzdGRfc3RyaW5ncywgIm9mZiIpID09IDApCisJCQlmcHJpbnRmKE9QRiwgIlNFVCBlc2NhcGVf c3RyaW5nX3dhcm5pbmcgPSBvZmY7XG4iKTsKKwkJZnByaW50ZihPUEYsICJcbiIpOworCX0KIAog CWlmICghZGF0YV9vbmx5ICYmICFzdGF0aXN0aWNzX29ubHkgJiYgIW5vX3NjaGVtYSkKIAl7CkBA IC02MjUsNyArNzQwLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkgKiBhbmQg dGFibGVzcGFjZXMgbmV2ZXIgZGVwZW5kIG9uIGVhY2ggb3RoZXIuICBSb2xlcyBjb3VsZCBoYXZl CiAJCSAqIGdyYW50cyB0byBlYWNoIG90aGVyLCBidXQgRFJPUCBST0xFIHdpbGwgY2xlYW4gdGhv c2UgdXAgc2lsZW50bHkuCiAJCSAqLwotCQlpZiAob3V0cHV0X2NsZWFuKQorCQlpZiAoZG9wdC5v dXRwdXRDbGVhbikKIAkJewogCQkJaWYgKCFnbG9iYWxzX29ubHkgJiYgIXJvbGVzX29ubHkgJiYg IXRhYmxlc3BhY2VzX29ubHkpCiAJCQkJZHJvcERCcyhjb25uKTsKQEAgLTY1OSwyNyArNzc0LDQy IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCWR1bXBUYWJsZXNwYWNlcyhjb25u KTsKIAl9CiAKLQkvKgotCSAqIEV4aXQgcmVzdHJpY3RlZCBtb2RlIGp1c3QgYmVmb3JlIGR1bXBp bmcgdGhlIGRhdGFiYXNlcy4gIHBnX2R1bXAgd2lsbAotCSAqIGhhbmRsZSBlbnRlcmluZyByZXN0 cmljdGVkIG1vZGUgYWdhaW4gYXMgYXBwcm9wcmlhdGUuCi0JICovCi0JZnByaW50ZihPUEYsICJc XHVucmVzdHJpY3QgJXNcblxuIiwgcmVzdHJpY3Rfa2V5KTsKKwlpZiAoYXJjaER1bXBGb3JtYXQg PT0gYXJjaE51bGwpCisJeworCQkvKgorCQkgKiBFeGl0IHJlc3RyaWN0ZWQgbW9kZSBqdXN0IGJl Zm9yZSBkdW1waW5nIHRoZSBkYXRhYmFzZXMuICBwZ19kdW1wIHdpbGwKKwkJICogaGFuZGxlIGVu dGVyaW5nIHJlc3RyaWN0ZWQgbW9kZSBhZ2FpbiBhcyBhcHByb3ByaWF0ZS4KKwkJICovCisJCWZw cmludGYoT1BGLCAiXFx1bnJlc3RyaWN0ICVzXG5cbiIsIHJlc3RyaWN0X2tleSk7CisJfQogCiAJ aWYgKCFnbG9iYWxzX29ubHkgJiYgIXJvbGVzX29ubHkgJiYgIXRhYmxlc3BhY2VzX29ubHkpCi0J CWR1bXBEYXRhYmFzZXMoY29ubik7CisJCWR1bXBEYXRhYmFzZXMoY29ubiwgZG9wdC5vdXRwdXRD bGVhbik7CiAKLQlQUWZpbmlzaChjb25uKTsKLQotCWlmICh2ZXJib3NlKQorCWlmICh2ZXJib3Nl ICYmIGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQogCQlkdW1wVGltZXN0YW1wKCJDb21wbGV0 ZWQgb24iKTsKLQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0 ZXIgZHVtcCBjb21wbGV0ZVxuLS1cblxuIik7CiAKLQlpZiAoZmlsZW5hbWUpCisJaWYgKGFyY2hE dW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBQb3N0Z3JlU1FM IGRhdGFiYXNlIGNsdXN0ZXIgZHVtcCBjb21wbGV0ZVxuLS1cblxuIik7CisKKwlpZiAoYXJjaER1 bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQlSZXN0b3JlT3B0aW9ucyAqcm9wdDsKKworCQlj cmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIg ZHVtcCBjb21wbGV0ZVxuLS1cblxuIiwgIkNPTU1FTlQiKTsKKwkJcm9wdCA9IE5ld1Jlc3RvcmVP cHRpb25zKCk7CisJCVNldEFyY2hpdmVPcHRpb25zKGZvdXQsICZkb3B0LCByb3B0KTsKKworCQkv KiBNYXJrIHdoaWNoIGVudHJpZXMgc2hvdWxkIGJlIG91dHB1dCAqLworCQlQcm9jZXNzQXJjaGl2 ZVJlc3RvcmVPcHRpb25zKGZvdXQpOworCQlDbG9zZUFyY2hpdmUoZm91dCk7CisJfQorCWVsc2Ug aWYgKGZpbGVuYW1lKQogCXsKIAkJZmNsb3NlKE9QRik7CiAKIAkJLyogc3luYyB0aGUgcmVzdWx0 aW5nIGZpbGUsIGVycm9ycyBhcmUgbm90IGZhdGFsICovCi0JCWlmIChkb3N5bmMpCisJCWlmIChk b3N5bmMgJiYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKSkKIAkJCSh2b2lkKSBmc3luY19m bmFtZShmaWxlbmFtZSwgZmFsc2UpOwogCX0KIApAQCAtNjkwLDEyICs4MjAsMTQgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQogc3RhdGljIHZvaWQKIGhlbHAodm9pZCkKIHsKLQlwcmlu dGYoXygiJXMgZXhwb3J0cyBhIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBhcyBhbiBTUUwg c2NyaXB0LlxuXG4iKSwgcHJvZ25hbWUpOworCXByaW50ZihfKCIlcyBleHBvcnRzIGEgUG9zdGdy ZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGFzIGFuIFNRTCBzY3JpcHQgb3IgdG8gb3RoZXIgZm9ybWF0 cy5cblxuIiksIHByb2duYW1lKTsKIAlwcmludGYoXygiVXNhZ2U6XG4iKSk7CiAJcHJpbnRmKF8o IiAgJXMgW09QVElPTl0uLi5cbiIpLCBwcm9nbmFtZSk7CiAKIAlwcmludGYoXygiXG5HZW5lcmFs IG9wdGlvbnM6XG4iKSk7CiAJcHJpbnRmKF8oIiAgLWYsIC0tZmlsZT1GSUxFTkFNRSAgICAgICAg ICBvdXRwdXQgZmlsZSBuYW1lXG4iKSk7CisJcHJpbnRmKF8oIiAgLUYsIC0tZm9ybWF0PWN8ZHx0 fHAgICAgICAgICBvdXRwdXQgZmlsZSBmb3JtYXQgKGN1c3RvbSwgZGlyZWN0b3J5LCB0YXIsXG4i CisJCQkgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFpbiB0ZXh0IChkZWZhdWx0 KSlcbiIpKTsKIAlwcmludGYoXygiICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgICAgIHZlcmJv c2UgbW9kZVxuIikpOwogCXByaW50ZihfKCIgIC1WLCAtLXZlcnNpb24gICAgICAgICAgICAgICAg b3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24sIHRoZW4gZXhpdFxuIikpOwogCXByaW50ZihfKCIg IC0tbG9jay13YWl0LXRpbWVvdXQ9VElNRU9VVCAgZmFpbCBhZnRlciB3YWl0aW5nIFRJTUVPVVQg Zm9yIGEgdGFibGUgbG9ja1xuIikpOwpAQCAtNzcwLDYgKzkwMiw3IEBAIHN0YXRpYyB2b2lkCiBk cm9wUm9sZXMoUEdjb25uICpjb25uKQogewogCVBRRXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhw QnVmZmVyKCk7CisJUFFFeHBCdWZmZXIgZGVsUXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAlQ R3Jlc3VsdCAgICpyZXM7CiAJaW50CQkJaV9yb2xuYW1lOwogCWludAkJCWk7CkBAIC03ODYsMTIg KzkxOSwxNyBAQCBkcm9wUm9sZXMoUEdjb25uICpjb25uKQogCQkJCQkJICAiRlJPTSAlcyAiCiAJ CQkJCQkgICJPUkRFUiBCWSAxIiwgcm9sZV9jYXRhbG9nKTsKIAotCXJlcyA9IGV4ZWN1dGVRdWVy eShjb25uLCBidWYtPmRhdGEpOworCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBidWYtPmRhdGEs IGZvdXQgPyB0cnVlIDogZmFsc2UpOwogCiAJaV9yb2xuYW1lID0gUFFmbnVtYmVyKHJlcywgInJv bG5hbWUiKTsKIAogCWlmIChQUW50dXBsZXMocmVzKSA+IDApCi0JCWZwcmludGYoT1BGLCAiLS1c bi0tIERyb3Agcm9sZXNcbi0tXG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFy Y2hOdWxsKQorCQkJZnByaW50ZihPUEYsICItLVxuLS0gRHJvcCByb2xlc1xuLS1cblxuIik7CisJ CWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeSgiLS1cbi0tIERyb3Agcm9sZXNcbi0tXG5c biIsICJDT01NRU5UIik7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBp KyspCiAJewpAQCAtNzk5LDE1ICs5MzcsMjEgQEAgZHJvcFJvbGVzKFBHY29ubiAqY29ubikKIAog CQlyb2xlbmFtZSA9IFBRZ2V0dmFsdWUocmVzLCBpLCBpX3JvbG5hbWUpOwogCi0JCWZwcmludGYo T1BGLCAiRFJPUCBST0xFICVzJXM7XG4iLAorCQlhcHBlbmRQUUV4cEJ1ZmZlcihkZWxRcnksICJE Uk9QIFJPTEUgJXMlcztcbiIsCiAJCQkJaWZfZXhpc3RzID8gIklGIEVYSVNUUyAiIDogIiIsCiAJ CQkJZm10SWQocm9sZW5hbWUpKTsKKworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwp CisJCQlmcHJpbnRmKE9QRiwgIiVzIiwgZGVsUXJ5LT5kYXRhKTsKKwkJZWxzZQorCQkJY3JlYXRl T25lQXJjaGl2ZUVudHJ5KGRlbFFyeS0+ZGF0YSwgImRyb3BSb2xlcyIpOwogCX0KIAogCVBRY2xl YXIocmVzKTsKIAlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKIAotCWZwcmludGYoT1BGLCAiXG5c biIpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICJc blxuIik7CiB9CiAKIC8qCkBAIC04NzEsNyArMTAxNSw3IEBAIGR1bXBSb2xlcyhQR2Nvbm4gKmNv bm4pCiAJCQkJCQkgICJGUk9NICVzICIKIAkJCQkJCSAgIk9SREVSIEJZIDIiLCByb2xlX2NhdGFs b2cpOwogCi0JcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sIGJ1Zi0+ZGF0YSk7CisJcmVzID0gZXhl Y3V0ZVF1ZXJ5KGNvbm4sIGJ1Zi0+ZGF0YSwgZm91dCA/IHRydWUgOiBmYWxzZSk7CiAKIAlpX29p ZCA9IFBRZm51bWJlcihyZXMsICJvaWQiKTsKIAlpX3JvbG5hbWUgPSBQUWZudW1iZXIocmVzLCAi cm9sbmFtZSIpOwpAQCAtODg5LDcgKzEwMzMsMTIgQEAgZHVtcFJvbGVzKFBHY29ubiAqY29ubikK IAlpX2lzX2N1cnJlbnRfdXNlciA9IFBRZm51bWJlcihyZXMsICJpc19jdXJyZW50X3VzZXIiKTsK IAogCWlmIChQUW50dXBsZXMocmVzKSA+IDApCi0JCWZwcmludGYoT1BGLCAiLS1cbi0tIFJvbGVz XG4tLVxuXG4iKTsKKwl7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZw cmludGYoT1BGLCAiLS1cbi0tIFJvbGVzXG4tLVxuXG4iKTsKKwkJZWxzZQorCQkJY3JlYXRlT25l QXJjaGl2ZUVudHJ5KCItLVxuLS0gUm9sZXNcbi0tXG5cbiIsICJDT01NRU5UIik7CisJfQogCiAJ Zm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewpAQCAtOTkzLDcgKzExNDIs MTAgQEAgZHVtcFJvbGVzKFBHY29ubiAqY29ubikKIAkJCQkJCQkgIlJPTEUiLCByb2xlbmFtZSwK IAkJCQkJCQkgYnVmKTsKIAotCQlmcHJpbnRmKE9QRiwgIiVzIiwgYnVmLT5kYXRhKTsKKwkJaWYg KGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ ZGF0YSk7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShidWYtPmRhdGEsICJkdW1w Um9sZXMiKTsKIAl9CiAKIAkvKgpAQCAtMTAwMSwxNSArMTE1MywxMyBAQCBkdW1wUm9sZXMoUEdj b25uICpjb25uKQogCSAqIFdlIGRvIGl0IHRoaXMgd2F5IGJlY2F1c2UgY29uZmlnIHNldHRpbmdz IGZvciByb2xlcyBjb3VsZCBtZW50aW9uIHRoZQogCSAqIG5hbWVzIG9mIG90aGVyIHJvbGVzLgog CSAqLwotCWlmIChQUW50dXBsZXMocmVzKSA+IDApCi0JCWZwcmludGYoT1BGLCAiXG4tLVxuLS0g VXNlciBDb25maWd1cmF0aW9uc1xuLS1cbiIpOwotCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxl cyhyZXMpOyBpKyspCiAJCWR1bXBVc2VyQ29uZmlnKGNvbm4sIFBRZ2V0dmFsdWUocmVzLCBpLCBp X3JvbG5hbWUpKTsKIAogCVBRY2xlYXIocmVzKTsKIAotCWZwcmludGYoT1BGLCAiXG5cbiIpOwor CWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICJcblxuIik7 CiAKIAlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKIH0KQEAgLTEwNzYsNyArMTIyNiw3IEBAIGR1 bXBSb2xlTWVtYmVyc2hpcChQR2Nvbm4gKmNvbm4pCiAJCQkJCSAgIkxFRlQgSk9JTiAlcyB1ZyBv biB1Zy5vaWQgPSBhLmdyYW50b3IgIgogCQkJCQkgICJXSEVSRSBOT1QgKHVyLnJvbG5hbWUgfiAn XnBnXycgQU5EIHVtLnJvbG5hbWUgfiAnXnBnXycpIgogCQkJCQkgICJPUkRFUiBCWSAxLDIsMyIs IHJvbGVfY2F0YWxvZywgcm9sZV9jYXRhbG9nLCByb2xlX2NhdGFsb2cpOwotCXJlcyA9IGV4ZWN1 dGVRdWVyeShjb25uLCBidWYtPmRhdGEpOworCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBidWYt PmRhdGEsIGZvdXQgPyB0cnVlIDogZmFsc2UpOwogCWlfcm9sZSA9IFBRZm51bWJlcihyZXMsICJy b2xlIik7CiAJaV9tZW1iZXIgPSBQUWZudW1iZXIocmVzLCAibWVtYmVyIik7CiAJaV9ncmFudG9y ID0gUFFmbnVtYmVyKHJlcywgImdyYW50b3IiKTsKQEAgLTEwODgsNyArMTIzOCwxMiBAQCBkdW1w Um9sZU1lbWJlcnNoaXAoUEdjb25uICpjb25uKQogCWlfc2V0X29wdGlvbiA9IFBRZm51bWJlcihy ZXMsICJzZXRfb3B0aW9uIik7CiAKIAlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQotCQlmcHJpbnRm KE9QRiwgIi0tXG4tLSBSb2xlIG1lbWJlcnNoaXBzXG4tLVxuXG4iKTsKKwl7CisJCWlmIChhcmNo RHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiLS1cbi0tIFJvbGUgbWVt YmVyc2hpcHNcbi0tXG5cbiIpOworCQllbHNlCisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0t XG4tLSBSb2xlIG1lbWJlcnNoaXBzXG4tLVxuXG4iLCAiQ09NTUVOVCIpOworCX0KIAogCS8qCiAJ ICogV2UgY2FuJ3QgZHVtcCB0aGVzZSBHUkFOVCBjb21tYW5kcyBpbiBhcmJpdHJhcnkgb3JkZXIs IGJlY2F1c2UgYSByb2xlCkBAIC0xMTY3LDYgKzEzMjIsNyBAQCBkdW1wUm9sZU1lbWJlcnNoaXAo UEdjb25uICpjb25uKQogCQkJCWNoYXIJICAgKmdyYW50b3I7CiAJCQkJY2hhcgkgICAqc2V0X29w dGlvbiA9ICJ0cnVlIjsKIAkJCQlib29sCQlmb3VuZDsKKwkJCQlQUUV4cEJ1ZmZlciBjcmVhUXJ5 ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAogCQkJCS8qIElmIHdlIGFscmVhZHkgZGlkIHRoaXMg Z3JhbnQsIGRvbid0IGRvIGl0IGFnYWluLiAqLwogCQkJCWlmIChkb25lW2kgLSBzdGFydF0pCkBA IC0xMjIzLDggKzEzNzksOCBAQCBkdW1wUm9sZU1lbWJlcnNoaXAoUEdjb25uICpjb25uKQogCiAJ CQkJLyogR2VuZXJhdGUgdGhlIGFjdHVhbCBHUkFOVCBzdGF0ZW1lbnQuICovCiAJCQkJcmVzZXRQ UUV4cEJ1ZmZlcihvcHRidWYpOwotCQkJCWZwcmludGYoT1BGLCAiR1JBTlQgJXMiLCBmbXRJZChy b2xlKSk7Ci0JCQkJZnByaW50ZihPUEYsICIgVE8gJXMiLCBmbXRJZChtZW1iZXIpKTsKKwkJCQlh cHBlbmRQUUV4cEJ1ZmZlcihjcmVhUXJ5LCAiR1JBTlQgJXMiLCBmbXRJZChyb2xlKSk7CisJCQkJ YXBwZW5kUFFFeHBCdWZmZXIoY3JlYVFyeSwgIiBUTyAlcyIsIGZtdElkKG1lbWJlcikpOwogCQkJ CWlmICgqYWRtaW5fb3B0aW9uID09ICd0JykKIAkJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIob3B0 YnVmLCAiQURNSU4gT1BUSU9OIik7CiAJCQkJaWYgKGR1bXBfZ3JhbnRfb3B0aW9ucykKQEAgLTEy NDUsMTAgKzE0MDEsMTUgQEAgZHVtcFJvbGVNZW1iZXJzaGlwKFBHY29ubiAqY29ubikKIAkJCQkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIob3B0YnVmLCAiU0VUIEZBTFNFIik7CiAJCQkJfQogCQkJCWlm IChvcHRidWYtPmRhdGFbMF0gIT0gJ1wwJykKLQkJCQkJZnByaW50ZihPUEYsICIgV0lUSCAlcyIs IG9wdGJ1Zi0+ZGF0YSk7CisJCQkJCWFwcGVuZFBRRXhwQnVmZmVyKGNyZWFRcnksICIgV0lUSCAl cyIsIG9wdGJ1Zi0+ZGF0YSk7CiAJCQkJaWYgKGR1bXBfZ3JhbnRvcnMpCi0JCQkJCWZwcmludGYo T1BGLCAiIEdSQU5URUQgQlkgJXMiLCBmbXRJZChncmFudG9yKSk7Ci0JCQkJZnByaW50ZihPUEYs ICI7XG4iKTsKKwkJCQkJYXBwZW5kUFFFeHBCdWZmZXIoY3JlYVFyeSwgIiBHUkFOVEVEIEJZICVz IiwgZm10SWQoZ3JhbnRvcikpOworCQkJCWFwcGVuZFBRRXhwQnVmZmVyKGNyZWFRcnksICI7XG4i KTsKKworCQkJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCQkJZnByaW50ZihP UEYsICIlcyIsIGNyZWFRcnktPmRhdGEpOworCQkJCWVsc2UKKwkJCQkJY3JlYXRlT25lQXJjaGl2 ZUVudHJ5KGNyZWFRcnktPmRhdGEsICJkdW1wUm9sZU1lbWJlcnNoaXAiKTsKIAkJCX0KIAkJfQog CkBAIC0xMjYwLDcgKzE0MjEsOCBAQCBkdW1wUm9sZU1lbWJlcnNoaXAoUEdjb25uICpjb25uKQog CVBRY2xlYXIocmVzKTsKIAlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKIAotCWZwcmludGYoT1BG LCAiXG5cbiIpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihP UEYsICJcblxuIik7CiB9CiAKIApAQCAtMTI4NSwxMCArMTQ0NywxNSBAQCBkdW1wUm9sZUdVQ1By aXZzKFBHY29ubiAqY29ubikKIAkJCQkJICAgInBhcmFjbCwgIgogCQkJCQkgICAicGdfY2F0YWxv Zy5hY2xkZWZhdWx0KCdwJywgIiBDcHBBc1N0cmluZzIoQk9PVFNUUkFQX1NVUEVSVVNFUklEKSAi KSBBUyBhY2xkZWZhdWx0ICIKIAkJCQkJICAgIkZST00gcGdfY2F0YWxvZy5wZ19wYXJhbWV0ZXJf YWNsICIKLQkJCQkJICAgIk9SREVSIEJZIDEiKTsKKwkJCQkJICAgIk9SREVSIEJZIDEiLCBmb3V0 ID8gdHJ1ZSA6IGZhbHNlKTsKIAogCWlmIChQUW50dXBsZXMocmVzKSA+IDApCi0JCWZwcmludGYo T1BGLCAiLS1cbi0tIFJvbGUgcHJpdmlsZWdlcyBvbiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnNc bi0tXG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnBy aW50ZihPUEYsICItLVxuLS0gUm9sZSBwcml2aWxlZ2VzIG9uIGNvbmZpZ3VyYXRpb24gcGFyYW1l dGVyc1xuLS1cblxuIik7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeSgiLS1cbi0t IFJvbGUgcHJpdmlsZWdlcyBvbiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnNcbi0tXG5cbiIsICJD T01NRU5UIik7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJ ewpAQCAtMTMxMiwxNCArMTQ3OSwxOSBAQCBkdW1wUm9sZUdVQ1ByaXZzKFBHY29ubiAqY29ubikK IAkJCWV4aXRfbmljZWx5KDEpOwogCQl9CiAKLQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0 YSk7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAi JXMiLCBidWYtPmRhdGEpOworCQllbHNlCisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoYnVmLT5k YXRhLCAiZHVtcFJvbGVHVUNQcml2cyIpOwogCiAJCWZyZWUoZnBhcm5hbWUpOwogCQlkZXN0cm95 UFFFeHBCdWZmZXIoYnVmKTsKIAl9CiAKIAlQUWNsZWFyKHJlcyk7Ci0JZnByaW50ZihPUEYsICJc blxuIik7CisKKwlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCWZwcmludGYoT1BG LCAiXG5cbiIpOwogfQogCiAKQEAgLTEzMzEsNiArMTUwMyw3IEBAIGRyb3BUYWJsZXNwYWNlcyhQ R2Nvbm4gKmNvbm4pCiB7CiAJUEdyZXN1bHQgICAqcmVzOwogCWludAkJCWk7CisJUFFFeHBCdWZm ZXIgZGVsUXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAogCS8qCiAJICogR2V0IGFsbCB0YWJs ZXNwYWNlcyBleGNlcHQgYnVpbHQtaW4gb25lcyAod2hpY2ggd2UgYXNzdW1lIGFyZSBuYW1lZApA QCAtMTMzOSwyMyArMTUxMiwzNCBAQCBkcm9wVGFibGVzcGFjZXMoUEdjb25uICpjb25uKQogCXJl cyA9IGV4ZWN1dGVRdWVyeShjb25uLCAiU0VMRUNUIHNwY25hbWUgIgogCQkJCQkgICAiRlJPTSBw Z19jYXRhbG9nLnBnX3RhYmxlc3BhY2UgIgogCQkJCQkgICAiV0hFUkUgc3BjbmFtZSAhfiAnXnBn XycgIgotCQkJCQkgICAiT1JERVIgQlkgMSIpOworCQkJCQkgICAiT1JERVIgQlkgMSIsIGZvdXQg PyB0cnVlIDogZmFsc2UpOwogCiAJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKLQkJZnByaW50ZihP UEYsICItLVxuLS0gRHJvcCB0YWJsZXNwYWNlc1xuLS1cblxuIik7CisJeworCQlpZiAoYXJjaER1 bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEcm9wIHRhYmxl c3BhY2VzXG4tLVxuXG4iKTsKKwkJZWxzZQorCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KCItLVxu LS0gRHJvcCB0YWJsZXNwYWNlc1xuLS1cblxuIiwgIkNPTU1FTlQiKTsKKwl9CiAKIAlmb3IgKGkg PSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKIAl7CiAJCWNoYXIJICAgKnNwY25hbWUgPSBQ UWdldHZhbHVlKHJlcywgaSwgMCk7CiAKLQkJZnByaW50ZihPUEYsICJEUk9QIFRBQkxFU1BBQ0Ug JXMlcztcbiIsCisJCWFwcGVuZFBRRXhwQnVmZmVyKGRlbFFyeSwgIkRST1AgVEFCTEVTUEFDRSAl cyVzO1xuIiwKIAkJCQlpZl9leGlzdHMgPyAiSUYgRVhJU1RTICIgOiAiIiwKIAkJCQlmbXRJZChz cGNuYW1lKSk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50 ZihPUEYsICIlcyIsIGRlbFFyeS0+ZGF0YSk7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVF bnRyeShkZWxRcnktPmRhdGEsICJkcm9wVGFibGVzcGFjZXMiKTsKIAl9CiAKIAlQUWNsZWFyKHJl cyk7CiAKLQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJj aE51bGwpCisJCWZwcmludGYoT1BGLCAiXG5cbiIpOwogfQogCiAvKgpAQCAtMTM3OSwxMCArMTU2 MywxNSBAQCBkdW1wVGFibGVzcGFjZXMoUEdjb25uICpjb25uKQogCQkJCQkgICAicGdfY2F0YWxv Zy5zaG9ial9kZXNjcmlwdGlvbihvaWQsICdwZ190YWJsZXNwYWNlJykgIgogCQkJCQkgICAiRlJP TSBwZ19jYXRhbG9nLnBnX3RhYmxlc3BhY2UgIgogCQkJCQkgICAiV0hFUkUgc3BjbmFtZSAhfiAn XnBnXycgIgotCQkJCQkgICAiT1JERVIgQlkgMSIpOworCQkJCQkgICAiT1JERVIgQlkgMSIsIGZv dXQgPyB0cnVlIDogZmFsc2UpOwogCiAJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKLQkJZnByaW50 ZihPUEYsICItLVxuLS0gVGFibGVzcGFjZXNcbi0tXG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1w Rm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICItLVxuLS0gVGFibGVzcGFjZXNc bi0tXG5cbiIpOworCQllbHNlCisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBUYWJs ZXNwYWNlc1xuLS1cblxuIiwgIkNPTU1FTlQiKTsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFu dHVwbGVzKHJlcyk7IGkrKykKIAl7CkBAIC0xNDUxLDE0ICsxNjQwLDE5IEBAIGR1bXBUYWJsZXNw YWNlcyhQR2Nvbm4gKmNvbm4pCiAJCQkJCQkJICJUQUJMRVNQQUNFIiwgc3BjbmFtZSwKIAkJCQkJ CQkgYnVmKTsKIAotCQlmcHJpbnRmKE9QRiwgIiVzIiwgYnVmLT5kYXRhKTsKKwkJaWYgKGFyY2hE dW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7 CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShidWYtPmRhdGEsICJkdW1wVGFibGVz cGFjZXMiKTsKIAogCQlmcmVlKGZzcGNuYW1lKTsKIAkJZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7 CiAJfQogCiAJUFFjbGVhcihyZXMpOwotCWZwcmludGYoT1BGLCAiXG5cbiIpOworCisJaWYgKGFy Y2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAog CkBAIC0xNDc5LDEwICsxNjczLDE1IEBAIGRyb3BEQnMoUEdjb25uICpjb25uKQogCQkJCQkgICAi U0VMRUNUIGRhdG5hbWUgIgogCQkJCQkgICAiRlJPTSBwZ19kYXRhYmFzZSBkICIKIAkJCQkJICAg IldIRVJFIGRhdGFsbG93Y29ubiBBTkQgZGF0Y29ubmxpbWl0ICE9IC0yICIKLQkJCQkJICAgIk9S REVSIEJZIGRhdG5hbWUiKTsKKwkJCQkJICAgIk9SREVSIEJZIGRhdG5hbWUiLCBmb3V0ID8gdHJ1 ZSA6IGZhbHNlKTsKIAogCWlmIChQUW50dXBsZXMocmVzKSA+IDApCi0JCWZwcmludGYoT1BGLCAi LS1cbi0tIERyb3AgZGF0YWJhc2VzIChleGNlcHQgcG9zdGdyZXMgYW5kIHRlbXBsYXRlMSlcbi0t XG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50 ZihPUEYsICItLVxuLS0gRHJvcCBkYXRhYmFzZXMgKGV4Y2VwdCBwb3N0Z3JlcyBhbmQgdGVtcGxh dGUxKVxuLS1cblxuIik7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeSgiLS1cbi0t IERyb3AgZGF0YWJhc2VzIChleGNlcHQgcG9zdGdyZXMgYW5kIHRlbXBsYXRlMSlcbi0tXG5cbiIs ICJDT01NRU5UIik7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKysp CiAJewpAQCAtMTQ5NywxNSArMTY5NiwyMyBAQCBkcm9wREJzKFBHY29ubiAqY29ubikKIAkJCXN0 cmNtcChkYm5hbWUsICJ0ZW1wbGF0ZTAiKSAhPSAwICYmCiAJCQlzdHJjbXAoZGJuYW1lLCAicG9z dGdyZXMiKSAhPSAwKQogCQl7Ci0JCQlmcHJpbnRmKE9QRiwgIkRST1AgREFUQUJBU0UgJXMlcztc biIsCisJCQlQUUV4cEJ1ZmZlciBkZWxRcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCisJCQlh cHBlbmRQUUV4cEJ1ZmZlcihkZWxRcnksICJEUk9QIERBVEFCQVNFICVzJXM7XG4iLAogCQkJCQlp Zl9leGlzdHMgPyAiSUYgRVhJU1RTICIgOiAiIiwKIAkJCQkJZm10SWQoZGJuYW1lKSk7CisKKwkJ CWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCQlmcHJpbnRmKE9QRiwgIiVzIiwg ZGVsUXJ5LT5kYXRhKTsKKwkJCWVsc2UKKwkJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoZGVsUXJ5 LT5kYXRhLCAiRFJPUF9EQVRBQkFTRSIpOwogCQl9CiAJfQogCiAJUFFjbGVhcihyZXMpOwogCi0J ZnByaW50ZihPUEYsICJcblxuIik7CisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQor CQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogCkBAIC0xNTI1LDE0ICsxNzMyLDI1IEBAIGR1 bXBVc2VyQ29uZmlnKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAJYXBwZW5k U3RyaW5nTGl0ZXJhbENvbm4oYnVmLCB1c2VybmFtZSwgY29ubik7CiAJYXBwZW5kUFFFeHBCdWZm ZXJDaGFyKGJ1ZiwgJyknKTsKIAotCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBidWYtPmRhdGEp OworCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBidWYtPmRhdGEsIGZvdXQgPyB0cnVlIDogZmFs c2UpOwogCiAJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKIAl7CiAJCWNoYXIJICAgKnNhbml0aXpl ZDsKIAogCQlzYW5pdGl6ZWQgPSBzYW5pdGl6ZV9saW5lKHVzZXJuYW1lLCB0cnVlKTsKLQkJZnBy aW50ZihPUEYsICJcbi0tXG4tLSBVc2VyIENvbmZpZyBcIiVzXCJcbi0tXG5cbiIsIHNhbml0aXpl ZCk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYs ICJcbi0tXG4tLSBVc2VyIENvbmZpZyBcIiVzXCJcbi0tXG5cbiIsIHNhbml0aXplZCk7CisJCWVs c2UKKwkJeworCQkJUFFFeHBCdWZmZXIJcXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCQkJ YXBwZW5kUFFFeHBCdWZmZXIocXJ5LCAiXG4tLVxuLS0gVXNlciBDb25maWcgXCIlc1wiXG4tLVxu XG4iLCBzYW5pdGl6ZWQpOworCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KHFyeS0+ZGF0YSwgIkNP TU1FTlQiKTsKKwkJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihxcnkpOworCQl9CisKIAkJZnJlZShzYW5p dGl6ZWQpOwogCX0KIApAQCAtMTU0Miw3ICsxNzYwLDExIEBAIGR1bXBVc2VyQ29uZmlnKFBHY29u biAqY29ubiwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAJCW1ha2VBbHRlckNvbmZpZ0NvbW1hbmQo Y29ubiwgUFFnZXR2YWx1ZShyZXMsIGksIDApLAogCQkJCQkJCSAgICJST0xFIiwgdXNlcm5hbWUs IE5VTEwsIE5VTEwsCiAJCQkJCQkJICAgYnVmKTsKLQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ ZGF0YSk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihP UEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShi dWYtPmRhdGEsICJkdW1wVXNlckNvbmZpZyIpOwogCX0KIAogCVBRY2xlYXIocmVzKTsKQEAgLTE1 OTEsNyArMTgxMyw3IEBAIGV4cGFuZF9kYm5hbWVfcGF0dGVybnMoUEdjb25uICpjb25uLAogCQkJ ZXhpdF9uaWNlbHkoMSk7CiAJCX0KIAotCQlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwgcXVlcnkt PmRhdGEpOworCQlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwgcXVlcnktPmRhdGEsIGZvdXQgPyB0 cnVlIDogZmFsc2UpOwogCQlmb3IgKGludCBpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKysp CiAJCXsKIAkJCXNpbXBsZV9zdHJpbmdfbGlzdF9hcHBlbmQobmFtZXMsIFBRZ2V0dmFsdWUocmVz LCBpLCAwKSk7CkBAIC0xNjA4LDEwICsxODMwLDEzIEBAIGV4cGFuZF9kYm5hbWVfcGF0dGVybnMo UEdjb25uICpjb25uLAogICogRHVtcCBjb250ZW50cyBvZiBkYXRhYmFzZXMuCiAgKi8KIHN0YXRp YyB2b2lkCi1kdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKK2R1bXBEYXRhYmFzZXMoUEdjb25u ICpjb25uLCBib29sIG91dHB1dF9jbGVhbikKIHsKIAlQR3Jlc3VsdCAgICpyZXM7CiAJaW50CQkJ aTsKKwljaGFyCQlkYl9zdWJkaXJbTUFYUEdQQVRIXTsKKwljaGFyCQlkYmZpbGVwYXRoW01BWFBH UEFUSF07CisJRklMRQkJKm1hcF9maWxlID0gTlVMTDsKIAogCS8qCiAJICogU2tpcCBkYXRhYmFz ZXMgbWFya2VkIG5vdCBkYXRhbGxvd2Nvbm4sIHNpbmNlIHdlJ2QgYmUgdW5hYmxlIHRvIGNvbm5l Y3QKQEAgLTE2MjUsMTkgKzE4NTAsNDkgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJ ICogZG9lc24ndCBoYXZlIHNvbWUgZmFpbHVyZSBtb2RlIHdpdGggLS1jbGVhbi4KIAkgKi8KIAly ZXMgPSBleGVjdXRlUXVlcnkoY29ubiwKLQkJCQkJICAgIlNFTEVDVCBkYXRuYW1lICIKKwkJCQkJ ICAgIlNFTEVDVCBkYXRuYW1lLCBvaWQgIgogCQkJCQkgICAiRlJPTSBwZ19kYXRhYmFzZSBkICIK IAkJCQkJICAgIldIRVJFIGRhdGFsbG93Y29ubiBBTkQgZGF0Y29ubmxpbWl0ICE9IC0yICIKLQkJ CQkJICAgIk9SREVSIEJZIChkYXRuYW1lIDw+ICd0ZW1wbGF0ZTEnKSwgZGF0bmFtZSIpOworCQkJ CQkgICAiT1JERVIgQlkgKGRhdG5hbWUgPD4gJ3RlbXBsYXRlMScpLCBkYXRuYW1lIiwKKwkJCQkJ ICAgZm91dCA/IHRydWUgOiBmYWxzZSk7CiAKIAlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQotCQlm cHJpbnRmKE9QRiwgIi0tXG4tLSBEYXRhYmFzZXNcbi0tXG5cbiIpOworCXsKKwkJaWYgKGFyY2hE dW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2Vz XG4tLVxuXG4iKTsKKwkJZWxzZQorCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KCItLVxuLS0gRGF0 YWJhc2VzXG4tLVxuXG4iLCAiQ09NTUVOVCIpOworCX0KKworCS8qCisJICogSWYgZGlyZWN0b3J5 L3Rhci9jdXN0b20gZm9ybWF0IGlzIHNwZWNpZmllZCwgY3JlYXRlIGEgc3ViZGlyZWN0b3J5CisJ ICogdW5kZXIgdGhlIG1haW4gZGlyZWN0b3J5IGFuZCBlYWNoIGRhdGFiYXNlIGR1bXAgZmlsZSBv ciBzdWJkaXJlY3RvcnkKKwkgKiB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhhdCBzdWJkaXJlY3Rvcnkg YnkgcGdfZHVtcC4KKwkgKi8KKyAgIGlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKyAg IHsKKwkgICBjaGFyICAgICAgICBtYXBfZmlsZV9wYXRoW01BWFBHUEFUSF07CisKKwkgICBzbnBy aW50ZihkYl9zdWJkaXIsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcyIsIGZpbGVuYW1lKTsKKwor CSAgIC8qIENyZWF0ZSBhIHN1YmRpcmVjdG9yeSB3aXRoICdkYXRhYmFzZXMnIG5hbWUgdW5kZXIg bWFpbiBkaXJlY3RvcnkuICovCisJICAgaWYgKG1rZGlyKGRiX3N1YmRpciwgcGdfZGlyX2NyZWF0 ZV9tb2RlKSAhPSAwKQorCQkgICBwZ19mYXRhbCgiY291bGQgbm90IGNyZWF0ZSBkaXJlY3Rvcnkg XCIlc1wiOiAlbSIsIGRiX3N1YmRpcik7CisKKwkgICBzbnByaW50ZihtYXBfZmlsZV9wYXRoLCBN QVhQR1BBVEgsICIlcy9tYXAuZGF0IiwgZmlsZW5hbWUpOworCisJICAgLyogQ3JlYXRlIGEgbWFw IGZpbGUgKHRvIHN0b3JlIGRib2lkIGFuZCBkYm5hbWUpICovCisJICAgbWFwX2ZpbGUgPSBmb3Bl bihtYXBfZmlsZV9wYXRoLCBQR19CSU5BUllfVyk7CisJICAgaWYgKCFtYXBfZmlsZSkKKwkJICAg cGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlbSIsIG1hcF9maWxlX3BhdGgp OworICAgfQogCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewogCQlj aGFyCSAgICpkYm5hbWUgPSBQUWdldHZhbHVlKHJlcywgaSwgMCk7CiAJCWNoYXIJICAgKnNhbml0 aXplZDsKLQkJY29uc3QgY2hhciAqY3JlYXRlX29wdHM7CisJCWNoYXIgICAgICAgKm9pZCA9IFBR Z2V0dmFsdWUocmVzLCBpLCAxKTsKKwkJY29uc3QgY2hhciAqY3JlYXRlX29wdHMgPSAiIjsKIAkJ aW50CQkJcmV0OwogCiAJCS8qIFNraXAgdGVtcGxhdGUwLCBldmVuIGlmIGl0J3Mgbm90IG1hcmtl ZCAhZGF0YWxsb3djb25uLiAqLwpAQCAtMTY1NCw3ICsxOTA5LDE4IEBAIGR1bXBEYXRhYmFzZXMo UEdjb25uICpjb25uKQogCQlwZ19sb2dfaW5mbygiZHVtcGluZyBkYXRhYmFzZSBcIiVzXCIiLCBk Ym5hbWUpOwogCiAJCXNhbml0aXplZCA9IHNhbml0aXplX2xpbmUoZGJuYW1lLCB0cnVlKTsKLQkJ ZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2UgXCIlc1wiIGR1bXBcbi0tXG5cbiIsIHNhbml0 aXplZCk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihP UEYsICItLVxuLS0gRGF0YWJhc2UgXCIlc1wiIGR1bXBcbi0tXG5cbiIsIHNhbml0aXplZCk7CisJ CWVsc2UKKwkJeworCQkJUFFFeHBCdWZmZXIgcXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwor CQkJYXBwZW5kUFFFeHBCdWZmZXIocXJ5LCAiLS1cbi0tIERhdGFiYXNlIFwiJXNcIiBkdW1wXG4t LVxuXG4iLCBzYW5pdGl6ZWQpOworCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KHFyeS0+ZGF0YSwg IkNPTU1FTlQiKTsKKwkJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihxcnkpOworCQl9CisKIAkJZnJlZShz YW5pdGl6ZWQpOwogCiAJCS8qCkBAIC0xNjY5LDI0ICsxOTM1LDQ2IEBAIGR1bXBEYXRhYmFzZXMo UEdjb25uICpjb25uKQogCQl7CiAJCQlpZiAob3V0cHV0X2NsZWFuKQogCQkJCWNyZWF0ZV9vcHRz ID0gIi0tY2xlYW4gLS1jcmVhdGUiOworCQkJLyogU2luY2UgcGdfZHVtcCB3b24ndCBlbWl0IGEg XGNvbm5lY3QgY29tbWFuZCwgd2UgbXVzdCAqLworCQkJZWxzZSBpZiAoYXJjaER1bXBGb3JtYXQg PT0gYXJjaE51bGwpCisJCQkJZnByaW50ZihPUEYsICJcXGNvbm5lY3QgJXNcblxuIiwgZGJuYW1l KTsKIAkJCWVsc2UKIAkJCXsKLQkJCQljcmVhdGVfb3B0cyA9ICIiOwotCQkJCS8qIFNpbmNlIHBn X2R1bXAgd29uJ3QgZW1pdCBhIFxjb25uZWN0IGNvbW1hbmQsIHdlIG11c3QgKi8KLQkJCQlmcHJp bnRmKE9QRiwgIlxcY29ubmVjdCAlc1xuXG4iLCBkYm5hbWUpOworCQkJCVBRRXhwQnVmZmVyCXFy eSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihxcnksICJc XGNvbm5lY3QgJXNcblxuIiwgZGJuYW1lKTsKKwkJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkocXJ5 LT5kYXRhLCAiQ09OTkVDVCIpOworCQkJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihxcnkpOwogCQkJfQog CQl9CiAJCWVsc2UKIAkJCWNyZWF0ZV9vcHRzID0gIi0tY3JlYXRlIjsKIAotCQlpZiAoZmlsZW5h bWUpCisJCWlmIChmaWxlbmFtZSAmJiBhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKIAkJCWZj bG9zZShPUEYpOwogCi0JCXJldCA9IHJ1blBnRHVtcChkYm5hbWUsIGNyZWF0ZV9vcHRzKTsKKwkJ LyoKKwkJICogSWYgdGhpcyBpcyBub3QgYSBwbGFpbiBmb3JtYXQgZHVtcCwgdGhlbiBhcHBlbmQg ZGJvaWQgYW5kIGRibmFtZSB0bworCQkgKiB0aGUgbWFwLmRhdCBmaWxlLgorCQkgKi8KKwkJaWYg KGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCQl7CisJCQlpZiAoYXJjaER1bXBGb3JtYXQg PT0gYXJjaEN1c3RvbSkKKwkJCQlzbnByaW50ZihkYmZpbGVwYXRoLCBNQVhQR1BBVEgsICJcIiVz XCIvXCIlc1wiLmRtcCIsIGRiX3N1YmRpciwgb2lkKTsKKwkJCWVsc2UgaWYgKGFyY2hEdW1wRm9y bWF0ID09IGFyY2hUYXIpCisJCQkJc25wcmludGYoZGJmaWxlcGF0aCwgTUFYUEdQQVRILCAiXCIl c1wiL1wiJXNcIi50YXIiLCBkYl9zdWJkaXIsIG9pZCk7CisJCQllbHNlCisJCQkJc25wcmludGYo ZGJmaWxlcGF0aCwgTUFYUEdQQVRILCAiXCIlc1wiL1wiJXNcIiIsIGRiX3N1YmRpciwgb2lkKTsK KworCQkJLyogUHV0IG9uZSBsaW5lIGVudHJ5IGZvciBkYm9pZCBhbmQgZGJuYW1lIGluIG1hcCBm aWxlLiAqLworCQkJZnByaW50ZihtYXBfZmlsZSwgIiVzICVzXG4iLCBvaWQsIGRibmFtZSk7CisJ CX0KKworCQlyZXQgPSBydW5QZ0R1bXAoZGJuYW1lLCBjcmVhdGVfb3B0cywgZGJmaWxlcGF0aCk7 CiAJCWlmIChyZXQgIT0gMCkKIAkJCXBnX2ZhdGFsKCJwZ19kdW1wIGZhaWxlZCBvbiBkYXRhYmFz ZSBcIiVzXCIsIGV4aXRpbmciLCBkYm5hbWUpOwogCi0JCWlmIChmaWxlbmFtZSkKKwkJaWYgKGZp bGVuYW1lICYmIGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQogCQl7CiAJCQlPUEYgPSBmb3Bl bihmaWxlbmFtZSwgUEdfQklOQVJZX0EpOwogCQkJaWYgKCFPUEYpCkBAIC0xNjk1LDYgKzE5ODMs MTAgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJCX0KIAl9CiAKKwkvKiBDbG9zZSBt YXAgZmlsZSAqLworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwkJZmNsb3NlKG1h cF9maWxlKTsKKwogCVBRY2xlYXIocmVzKTsKIH0KIApAQCAtMTcwNCw3ICsxOTk2LDcgQEAgZHVt cERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAgKiBSdW4gcGdfZHVtcCBvbiBkYm5hbWUsIHdpdGgg c3BlY2lmaWVkIG9wdGlvbnMuCiAgKi8KIHN0YXRpYyBpbnQKLXJ1blBnRHVtcChjb25zdCBjaGFy ICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzKQorcnVuUGdEdW1wKGNvbnN0IGNoYXIg KmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMsIGNoYXIgKmRiZmlsZSkKIHsKIAlQUUV4 cEJ1ZmZlckRhdGEgY29ubnN0cmJ1ZjsKIAlQUUV4cEJ1ZmZlckRhdGEgY21kOwpAQCAtMTcxMywx NyArMjAwNSwzNiBAQCBydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpj cmVhdGVfb3B0cykKIAlpbml0UFFFeHBCdWZmZXIoJmNvbm5zdHJidWYpOwogCWluaXRQUUV4cEJ1 ZmZlcigmY21kKTsKIAotCXByaW50ZlBRRXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgJXMgJXMiLCBw Z19kdW1wX2JpbiwKLQkJCQkJICBwZ2R1bXBvcHRzLT5kYXRhLCBjcmVhdGVfb3B0cyk7Ci0KIAkv KgotCSAqIElmIHdlIGhhdmUgYSBmaWxlbmFtZSwgdXNlIHRoZSB1bmRvY3VtZW50ZWQgcGxhaW4t YXBwZW5kIHBnX2R1bXAKLQkgKiBmb3JtYXQuCisJICogSWYgdGhpcyBpcyBub3QgYSBwbGFpbiBm b3JtYXQgZHVtcCwgdGhlbiBhcHBlbmQgZmlsZSBuYW1lIGFuZCBkdW1wCisJICogZm9ybWF0IHRv IHRoZSBwZ19kdW1wIGNvbW1hbmQgdG8gZ2V0IGFyY2hpdmUgZHVtcC4KIAkgKi8KLQlpZiAoZmls ZW5hbWUpCi0JCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZhICIpOworCWlmIChhcmNo RHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCXByaW50ZlBRRXhwQnVmZmVyKCZjbWQsICJc IiVzXCIgJXMgLWYgJXMgJXMiLCBwZ19kdW1wX2JpbiwKKwkJCQlwZ2R1bXBvcHRzLT5kYXRhLCBk YmZpbGUsIGNyZWF0ZV9vcHRzKTsKKworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaERpcmVj dG9yeSkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgIC0tZm9ybWF0PWRpcmVjdG9y eSAiKTsKKwkJZWxzZSBpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaEN1c3RvbSkKKwkJCWFwcGVu ZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgIC0tZm9ybWF0PWN1c3RvbSAiKTsKKwkJZWxzZSBpZiAo YXJjaER1bXBGb3JtYXQgPT0gYXJjaFRhcikKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQs ICIgIC0tZm9ybWF0PXRhciAiKTsKKwl9CiAJZWxzZQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigm Y21kLCAiIC1GcCAiKTsKKwl7CisJCXByaW50ZlBRRXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgJXMg JXMiLCBwZ19kdW1wX2JpbiwKKwkJCQkJCSAgcGdkdW1wb3B0cy0+ZGF0YSwgY3JlYXRlX29wdHMp OworCisJCS8qCisJCSAqIElmIHdlIGhhdmUgYSBmaWxlbmFtZSwgdXNlIHRoZSB1bmRvY3VtZW50 ZWQgcGxhaW4tYXBwZW5kIHBnX2R1bXAKKwkJICogZm9ybWF0LgorCQkgKi8KKwkJaWYgKGZpbGVu YW1lKQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRmEgIik7CisJCWVsc2UKKwkJ CWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZwICIpOworCX0KIAogCS8qCiAJICogQXBw ZW5kIHRoZSBkYXRhYmFzZSBuYW1lIHRvIHRoZSBhbHJlYWR5LWNvbnN0cnVjdGVkIHN0ZW0gb2Yg Y29ubmVjdGlvbgpAQCAtMTc2Niw3ICsyMDc3LDcgQEAgYnVpbGRTaFNlY0xhYmVscyhQR2Nvbm4g KmNvbm4sIGNvbnN0IGNoYXIgKmNhdGFsb2dfbmFtZSwgT2lkIG9iamVjdElkLAogCVBHcmVzdWx0 ICAgKnJlczsKIAogCWJ1aWxkU2hTZWNMYWJlbFF1ZXJ5KGNhdGFsb2dfbmFtZSwgb2JqZWN0SWQs IHNxbCk7Ci0JcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sIHNxbC0+ZGF0YSk7CisJcmVzID0gZXhl Y3V0ZVF1ZXJ5KGNvbm4sIHNxbC0+ZGF0YSwgZm91dCA/IHRydWUgOiBmYWxzZSk7CiAJZW1pdFNo U2VjTGFiZWxzKGNvbm4sIHJlcywgYnVmZmVyLCBvYmp0eXBlLCBvYmpuYW1lKTsKIAogCVBRY2xl YXIocmVzKTsKQEAgLTE4NjgsMyArMjE3OSw2NyBAQCByZWFkX2R1bXBhbGxfZmlsdGVycyhjb25z dCBjaGFyICpmaWxlbmFtZSwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0dGVybikKIAogCWZpbHRlcl9m cmVlKCZmc3RhdGUpOwogfQorCisvKgorICogcGFyc2VEdW1wRm9ybWF0CisgKgorICogVGhpcyB3 aWxsIHZhbGlkYXRlIGR1bXAgZm9ybWF0cy4KKyAqLworc3RhdGljIEFyY2hpdmVGb3JtYXQKK3Bh cnNlRHVtcEZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQpCit7CisJQXJjaGl2ZUZvcm1hdCBhcmNo RHVtcEZvcm1hdDsKKworCWlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImMiKSA9PSAwKQorCQlh cmNoRHVtcEZvcm1hdCA9IGFyY2hDdXN0b207CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3Jt YXQsICJjdXN0b20iKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hDdXN0b207CisJZWxz ZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJkIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQg PSBhcmNoRGlyZWN0b3J5OworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiZGlyZWN0 b3J5IikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoRGlyZWN0b3J5OworCWVsc2UgaWYg KHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAicCIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJj aE51bGw7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJwbGFpbiIpID09IDApCisJ CWFyY2hEdW1wRm9ybWF0ID0gYXJjaE51bGw7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3Jt YXQsICJ0IikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoVGFyOworCWVsc2UgaWYgKHBn X3N0cmNhc2VjbXAoZm9ybWF0LCAidGFyIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNo VGFyOworCWVsc2UKKwkJcGdfZmF0YWwoInVucmVjb2duaXplZCBvdXRwdXQgZm9ybWF0IFwiJXNc IjsgcGxlYXNlIHNwZWNpZnkgXCJjXCIsIFwiZFwiLCBcInBcIiwgb3IgXCJ0XCIiLAorCQkJCSBm b3JtYXQpOworCisJcmV0dXJuIGFyY2hEdW1wRm9ybWF0OworfQorCisvKgorICogY3JlYXRlRHVt cElkCisgKgorICogVGhpcyB3aWxsIHJldHVybiBuZXh0IGxhc3QgdXNlZCBvaWQuCisgKi8KK3N0 YXRpYyBpbnQKK2NyZWF0ZUR1bXBJZCh2b2lkKQoreworCXJldHVybiArK2R1bXBJZFZhbDsKK30K KworLyoKKyAqIGNyZWF0ZU9uZUFyY2hpdmVFbnRyeQorICoKKyAqIFRoaXMgY3JlYXRlcyBvbmUg YXJjaGl2ZSBlbnRyeSBiYXNlZCBvbiBmb3JtYXQuCisgKi8KK3N0YXRpYyB2b2lkCitjcmVhdGVP bmVBcmNoaXZlRW50cnkoY29uc3QgY2hhciAqcXVlcnksIGNvbnN0IGNoYXIgKnRhZykKK3sKKwlD YXRhbG9nSWQgbmlsQ2F0YWxvZ0lkID0gezAsIDB9OworCUFzc2VydChmb3V0ICE9IE5VTEwpOwor CisJQXJjaGl2ZUVudHJ5KGZvdXQsCisJCQluaWxDYXRhbG9nSWQsIC8qIGNhdGFsb2cgSUQgKi8K KwkJCWNyZWF0ZUR1bXBJZCgpLCAvKiBkdW1wIElEICovCisJCQlBUkNISVZFX09QVFMoLnRhZyA9 IHRhZywKKwkJCQkuZGVzY3JpcHRpb24gPSB0YWcsCisJCQkJLnNlY3Rpb24gPSBTRUNUSU9OX1BS RV9EQVRBLAorCQkJCS5jcmVhdGVTdG10ID0gcXVlcnkpKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jCmlu ZGV4IGM5Nzc2MzA2YzVjLi42MTBiMmViZjk2ZiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1w L3BnX3Jlc3RvcmUuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jCkBAIC0yLDcg KzIsNyBAQAogICoKICAqIHBnX3Jlc3RvcmUuYwogICoJcGdfcmVzdG9yZSBpcyBhbiB1dGlsaXR5 IGV4dHJhY3RpbmcgcG9zdGdyZXMgZGF0YWJhc2UgZGVmaW5pdGlvbnMKLSAqCWZyb20gYSBiYWNr dXAgYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAgdXNpbmcgdGhlIGFyY2hpdmVyCisgKglmcm9t IGEgYmFja3VwIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wL3BnX2R1bXBhbGwgdXNpbmcgdGhl IGFyY2hpdmVyCiAgKglpbnRlcmZhY2UuCiAgKgogICoJcGdfcmVzdG9yZSB3aWxsIHJlYWQgdGhl IGJhY2t1cCBhcmNoaXZlIGFuZApAQCAtNDEsMTIgKzQxLDE2IEBACiAjaW5jbHVkZSAicG9zdGdy ZXNfZmUuaCIKIAogI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNp ZmRlZiBIQVZFX1RFUk1JT1NfSAogI2luY2x1ZGUgPHRlcm1pb3MuaD4KICNlbmRpZgogCisjaW5j bHVkZSAiY29tbW9uL3N0cmluZy5oIgorI2luY2x1ZGUgImNvbm5lY3RkYi5oIgogI2luY2x1ZGUg ImR1bXB1dGlscy5oIgogI2luY2x1ZGUgImZlX3V0aWxzL29wdGlvbl91dGlscy5oIgorI2luY2x1 ZGUgImZlX3V0aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUgImZpbHRlci5oIgogI2luY2x1 ZGUgImdldG9wdF9sb25nLmgiCiAjaW5jbHVkZSAicGFyYWxsZWwuaCIKQEAgLTU0LDE4ICs1OCw0 NCBAQAogCiBzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSk7CiBzdGF0aWMg dm9pZCByZWFkX3Jlc3RvcmVfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgUmVzdG9yZU9w dGlvbnMgKm9wdHMpOworc3RhdGljIGJvb2wgZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KGNvbnN0 IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUpOworc3RhdGljIGludAlyZXN0b3JlX29u ZV9kYXRhYmFzZShjb25zdCBjaGFyICppbnB1dEZpbGVTcGVjLCBSZXN0b3JlT3B0aW9ucyAqb3B0 cywKKwkJCQkJCQkJIGludCBudW1Xb3JrZXJzLCBib29sIGFwcGVuZF9kYXRhLCBpbnQgbnVtLAor CQkJCQkJCQkgYm9vbCBnbG9iYWxzX29ubHkpOworc3RhdGljIGludCByZXN0b3JlX2dsb2JhbF9v YmplY3RzKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsCisJCVJlc3RvcmVPcHRpb25zICpvcHRz LCBpbnQgbnVtV29ya2VycywKKwkJaW50IG51bSwgYm9vbCBnbG9iYWxzX29ubHkpOworc3RhdGlj IGludAlyZXN0b3JlX2FsbF9kYXRhYmFzZXMoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywKKwkJ U2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zLCBSZXN0b3JlT3B0aW9ucyAqb3B0 cywgaW50IG51bVdvcmtlcnMpOworc3RhdGljIGludAlnZXRfZGJuYW1lc19saXN0X3RvX3Jlc3Rv cmUoUEdjb25uICpjb25uLAorCQkJCQkJCQkJCVNpbXBsZVB0ckxpc3QgKmRibmFtZV9vaWRfbGlz dCwKKwkJCQkJCQkJCQlTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMpOworc3Rh dGljIGludAlnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUoY29uc3QgY2hhciAqZHVtcGRp cnBhdGgsCisJCQkJCQkJCQkJICAgU2ltcGxlUHRyTGlzdCAqZGJuYW1lX29pZF9saXN0KTsKKwor c3RhdGljIGJvb2wgZGF0YV9vbmx5ID0gZmFsc2U7CisKKy8qCisgKiBTdG9yZXMgYSBkYXRhYmFz ZSBPSUQgYW5kIHRoZSBjb3JyZXNwb25kaW5nIG5hbWUuCisgKi8KK3R5cGVkZWYgc3RydWN0IERi T2lkTmFtZQoreworCU9pZAkJCW9pZDsKKwljaGFyCQlzdHJbRkxFWElCTEVfQVJSQVlfTUVNQkVS XTsgLyogbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBoZXJlICovCit9IERiT2lkTmFtZTsKKwogCiBp bnQKIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCVJlc3RvcmVPcHRpb25zICpvcHRz OwogCWludAkJCWM7Ci0JaW50CQkJZXhpdF9jb2RlOwogCWludAkJCW51bVdvcmtlcnMgPSAxOwot CUFyY2hpdmUgICAgKkFIOwogCWNoYXIJICAgKmlucHV0RmlsZVNwZWM7Ci0JYm9vbAkJZGF0YV9v bmx5ID0gZmFsc2U7CiAJYm9vbAkJc2NoZW1hX29ubHkgPSBmYWxzZTsKKwlpbnQJCQluX2Vycm9y cyA9IDA7CisJYm9vbAkJZ2xvYmFsc19vbmx5ID0gZmFsc2U7CisJU2ltcGxlU3RyaW5nTGlzdCBk Yl9leGNsdWRlX3BhdHRlcm5zID0ge05VTEwsIE5VTEx9OwogCXN0YXRpYyBpbnQJZGlzYWJsZV90 cmlnZ2VycyA9IDA7CiAJc3RhdGljIGludAllbmFibGVfcm93X3NlY3VyaXR5ID0gMDsKIAlzdGF0 aWMgaW50CWlmX2V4aXN0cyA9IDA7CkBAIC04OSw2ICsxMTksNyBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKIAkJeyJjbGVhbiIsIDAsIE5VTEwsICdjJ30sCiAJCXsiY3JlYXRlIiwgMCwg TlVMTCwgJ0MnfSwKIAkJeyJkYXRhLW9ubHkiLCAwLCBOVUxMLCAnYSd9LAorCQl7Imdsb2JhbHMt b25seSIsIDAsIE5VTEwsICdnJ30sCiAJCXsiZGJuYW1lIiwgMSwgTlVMTCwgJ2QnfSwKIAkJeyJl eGl0LW9uLWVycm9yIiwgMCwgTlVMTCwgJ2UnfSwKIAkJeyJleGNsdWRlLXNjaGVtYSIsIDEsIE5V TEwsICdOJ30sCkBAIC0xNDIsNiArMTczLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CiAJCXsic3RhdGlzdGljcy1vbmx5Iiwgbm9fYXJndW1lbnQsICZzdGF0aXN0aWNzX29ubHksIDF9 LAogCQl7ImZpbHRlciIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA0fSwKIAkJeyJyZXN0cmlj dC1rZXkiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNn0sCisJCXsiZXhjbHVkZS1kYXRhYmFz ZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA3fSwKIAogCQl7TlVMTCwgMCwgTlVMTCwgMH0K IAl9OwpAQCAtMTcwLDcgKzIwMiw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl9 CiAJfQogCi0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjQ2Q6ZWY6Rjpo Okk6ajpsTDpuOk46T3A6UDpSc1M6dDpUOlU6dndXeDEiLAorCXdoaWxlICgoYyA9IGdldG9wdF9s b25nKGFyZ2MsIGFyZ3YsICJhY0NkOmVmOkY6Z2g6STpqOmxMOm46TjpPcDpQOlJzUzp0OlQ6VTp2 d1d4MSIsCiAJCQkJCQkJY21kb3B0cywgTlVMTCkpICE9IC0xKQogCXsKIAkJc3dpdGNoIChjKQpA QCAtMTk3LDExICsyMjksMTQgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJaWYg KHN0cmxlbihvcHRhcmcpICE9IDApCiAJCQkJCW9wdHMtPmZvcm1hdE5hbWUgPSBwZ19zdHJkdXAo b3B0YXJnKTsKIAkJCQlicmVhazsKKwkJCWNhc2UgJ2cnOgorCQkJCS8qIHJlc3RvcmUgb25seSBn bG9iYWwgc3FsIGNvbW1hbmRzLiAqLworCQkJCWdsb2JhbHNfb25seSA9IHRydWU7CisJCQkJYnJl YWs7CiAJCQljYXNlICdoJzoKIAkJCQlpZiAoc3RybGVuKG9wdGFyZykgIT0gMCkKIAkJCQkJb3B0 cy0+Y3BhcmFtcy5wZ2hvc3QgPSBwZ19zdHJkdXAob3B0YXJnKTsKIAkJCQlicmVhazsKLQogCQkJ Y2FzZSAnaic6CQkJLyogbnVtYmVyIG9mIHJlc3RvcmUgam9icyAqLwogCQkJCWlmICghb3B0aW9u X3BhcnNlX2ludChvcHRhcmcsICItai8tLWpvYnMiLCAxLAogCQkJCQkJCQkJICBQR19NQVhfSk9C UywKQEAgLTMyMSw2ICszNTYsMTAgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJ b3B0cy0+cmVzdHJpY3Rfa2V5ID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7CiAKKwkJ CWNhc2UgNzoJCQkJLyogZGF0YWJhc2UgcGF0dGVybnMgdG8gc2tpcCAqLworCQkJCXNpbXBsZV9z dHJpbmdfbGlzdF9hcHBlbmQoJmRiX2V4Y2x1ZGVfcGF0dGVybnMsIG9wdGFyZyk7CisJCQkJYnJl YWs7CisKIAkJCWRlZmF1bHQ6CiAJCQkJLyogZ2V0b3B0X2xvbmcgYWxyZWFkeSBlbWl0dGVkIGEg Y29tcGxhaW50ICovCiAJCQkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZv ciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKQEAgLTM0Nyw2ICszODYsMTMgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJaWYgKCFvcHRzLT5jcGFyYW1zLmRibmFtZSAmJiAh b3B0cy0+ZmlsZW5hbWUgJiYgIW9wdHMtPnRvY1N1bW1hcnkpCiAJCXBnX2ZhdGFsKCJvbmUgb2Yg LWQvLS1kYm5hbWUgYW5kIC1mLy0tZmlsZSBtdXN0IGJlIHNwZWNpZmllZCIpOwogCisJaWYgKGRi X2V4Y2x1ZGVfcGF0dGVybnMuaGVhZCAhPSBOVUxMICYmIGdsb2JhbHNfb25seSkKKwl7CisJCXBn X2xvZ19lcnJvcigib3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dl dGhlciB3aXRoIC1nLy0tZ2xvYmFscy1vbmx5Iik7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkg XCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJCWV4aXRf bmljZWx5KDEpOworCX0KKwogCS8qIFNob3VsZCBnZXQgYXQgbW9zdCBvbmUgb2YgLWQgYW5kIC1m LCBlbHNlIHVzZXIgaXMgY29uZnVzZWQgKi8KIAlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUpCiAJ ewpAQCAtNDA5LDYgKzQ1NSw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWlmIChv cHRzLT5zaW5nbGVfdHhuICYmIG9wdHMtPnR4bl9zaXplID4gMCkKIAkJcGdfZmF0YWwoIm9wdGlv bnMgLTEvLS1zaW5nbGUtdHJhbnNhY3Rpb24gYW5kIC0tdHJhbnNhY3Rpb24tc2l6ZSBjYW5ub3Qg YmUgdXNlZCB0b2dldGhlciIpOwogCisJaWYgKGRhdGFfb25seSAmJiBnbG9iYWxzX29ubHkpCisJ CXBnX2ZhdGFsKCJvcHRpb25zIC1hLy0tZGF0YS1vbmx5IGFuZCAtZy8tLWdsb2JhbHMtb25seSBj YW5ub3QgYmUgdXNlZCB0b2dldGhlciIpOworCiAJLyoKIAkgKiAtQyBpcyBub3QgY29tcGF0aWJs ZSB3aXRoIC0xLCBiZWNhdXNlIHdlIGNhbid0IGNyZWF0ZSBhIGRhdGFiYXNlIGluc2lkZQogCSAq IGEgdHJhbnNhY3Rpb24gYmxvY2suCkBAIC00NzIsNiArNTIxLDEyMiBAQCBtYWluKGludCBhcmdj LCBjaGFyICoqYXJndikKIAkJCQkJIG9wdHMtPmZvcm1hdE5hbWUpOwogCX0KIAorCS8qCisJICog SWYgdG9jLmdsbyBmaWxlIGlzIHByZXNlbnQsIHRoZW4gcmVzdG9yZSBhbGwgdGhlCisJICogZGF0 YWJhc2VzIGZyb20gbWFwLmRhdCwgYnV0IHNraXAgcmVzdG9yaW5nIHRob3NlIG1hdGNoaW5nCisJ ICogLS1leGNsdWRlLWRhdGFiYXNlIHBhdHRlcm5zLgorCSAqLworCWlmIChpbnB1dEZpbGVTcGVj ICE9IE5VTEwgJiYKKwkJCShmaWxlX2V4aXN0c19pbl9kaXJlY3RvcnkoaW5wdXRGaWxlU3BlYywg InRvYy5nbG8iKSkpCisJeworCQkvKgorCQkgKiBDYW4gb25seSB1c2UgLS1saXN0IG9yIC0tdXNl LWxpc3Qgb3B0aW9ucyB3aXRoIGEgc2luZ2xlIGRhdGFiYXNlCisJCSAqIGR1bXAuCisJCSAqLwor CQlpZiAob3B0cy0+dG9jU3VtbWFyeSkKKwkJCXBnX2ZhdGFsKCJvcHRpb24gLWwvLS1saXN0IGNh bm5vdCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1w YWxsIik7CisJCWVsc2UgaWYgKG9wdHMtPnRvY0ZpbGUpCisJCQlwZ19mYXRhbCgib3B0aW9uIC1M Ly0tdXNlLWxpc3QgY2Fubm90IGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVh dGVkIGJ5IHBnX2R1bXBhbGwiKTsKKworCQkvKgorCQkgKiBUbyByZXN0b3JlIGZyb20gYSBwZ19k dW1wYWxsIGFyY2hpdmUsIC1DIChjcmVhdGUgZGF0YWJhc2UpIG9wdGlvbgorCQkgKiBtdXN0IGJl IHNwZWNpZmllZCB1bmxlc3Mgd2UgYXJlIG9ubHkgcmVzdG9yaW5nIGdsb2JhbHMuCisJCSAqLwor CQlpZiAoIWdsb2JhbHNfb25seSAmJiBvcHRzLT5jcmVhdGVEQiAhPSAxKQorCQl7CisJCQlwZ19s b2dfZXJyb3IoIm9wdGlvbiAtQy8tLWNyZWF0ZSBtdXN0IGJlIHNwZWNpZmllZCB3aGVuIHJlc3Rv cmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbCIpOworCQkJcGdfbG9nX2Vycm9y X2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1l KTsKKwkJCXBnX2xvZ19lcnJvcl9oaW50KCJJbmRpdmlkdWFsIGRhdGFiYXNlcyBjYW4gYmUgcmVz dG9yZWQgdXNpbmcgdGhlaXIgc3BlY2lmaWMgYXJjaGl2ZXMuIik7CisJCQlleGl0X25pY2VseSgx KTsKKwkJfQorCisJCS8qIElmIGdsb2JhbHMtb25seSwgdGhlbiByZXR1cm4gZnJvbSBoZXJlLiAq LworCQlpZiAoZ2xvYmFsc19vbmx5KQorCQl7CisJCQljaGFyCWdsb2JhbF9wYXRoW01BWFBHUEFU SF07CisKKwkJCS8qIFNldCBwYXRoIGZvciB0b2MuZ2xvIGZpbGUuICovCisJCQlzbnByaW50Zihn bG9iYWxfcGF0aCwgTUFYUEdQQVRILCAiJXMvdG9jLmdsbyIsIGlucHV0RmlsZVNwZWMpOworCQkJ bl9lcnJvcnMgPSByZXN0b3JlX2dsb2JhbF9vYmplY3RzKGdsb2JhbF9wYXRoLCBvcHRzLCBudW1X b3JrZXJzLCAwLCBnbG9iYWxzX29ubHkpOworCisJCQlwZ19sb2dfaW5mbygiZGF0YWJhc2UgcmVz dG9yaW5nIHNraXBwZWQgYmVjYXVzZSBvcHRpb24gLWcvLS1nbG9iYWxzLW9ubHkgd2FzIHNwZWNp ZmllZCIpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogTm93IHJlc3RvcmUgYWxsIHRoZSBkYXRh YmFzZXMgZnJvbSBtYXAuZGF0ICovCisJCQluX2Vycm9ycyA9IHJlc3RvcmVfYWxsX2RhdGFiYXNl cyhpbnB1dEZpbGVTcGVjLCBkYl9leGNsdWRlX3BhdHRlcm5zLAorCQkJCQkJCQkJCQkgb3B0cywg bnVtV29ya2Vycyk7CisJCX0KKworCQkvKiBGcmVlIGRiIHBhdHRlcm4gbGlzdC4gKi8KKwkJc2lt cGxlX3N0cmluZ19saXN0X2Rlc3Ryb3koJmRiX2V4Y2x1ZGVfcGF0dGVybnMpOworCX0KKwllbHNl CisJeworCQlpZiAoZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkICE9IE5VTEwpCisJCXsKKwkJCXNp bXBsZV9zdHJpbmdfbGlzdF9kZXN0cm95KCZkYl9leGNsdWRlX3BhdHRlcm5zKTsKKwkJCXBnX2Zh dGFsKCJvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbiBiZSB1c2VkIG9ubHkgd2hlbiByZXN0 b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwiKTsKKwkJfQorCisJCWlmIChn bG9iYWxzX29ubHkpCisJCQlwZ19mYXRhbCgib3B0aW9uIC1nLy0tZ2xvYmFscy1vbmx5IGNhbiBi ZSB1c2VkIG9ubHkgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBh bGwiKTsKKworCQkvKiBQcm9jZXNzIGlmIHRvYy5nbG8gZmlsZSBkb2VzIG5vdCBleGlzdC4gKi8K KwkJbl9lcnJvcnMgPSByZXN0b3JlX29uZV9kYXRhYmFzZShpbnB1dEZpbGVTcGVjLCBvcHRzLAor CQkJCW51bVdvcmtlcnMsIGZhbHNlLCAwLCBnbG9iYWxzX29ubHkpOworCX0KKworCS8qIERvbmUs IHByaW50IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVycm9ycyBkdXJpbmcgcmVzdG9yZS4gKi8KKwlp ZiAobl9lcnJvcnMpCisJeworCQlwZ19sb2dfd2FybmluZygiZXJyb3JzIGlnbm9yZWQgb24gcmVz dG9yZTogJWQiLCBuX2Vycm9ycyk7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQor CisvKgorICogcmVzdG9yZV9nbG9iYWxfb2JqZWN0cworICoKKyAqIFRoaXMgcmVzdG9yZSBhbGwg Z2xvYmFsIG9iamVjdHMuCisgKgorICogSWYgZ2xvYmFsc19vbmx5IGlzIHNldCwgdGhlbiBza2lw IERST1AgREFUQUJBU0UgY29tbWFuZHMgZnJvbSByZXN0b3JlLgorICovCitzdGF0aWMgaW50IHJl c3RvcmVfZ2xvYmFsX29iamVjdHMoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywgUmVzdG9yZU9w dGlvbnMgKm9wdHMsCisJCWludCBudW1Xb3JrZXJzLCBpbnQgbnVtLCBib29sIGdsb2JhbHNfb25s eSkKK3sKKwlpbnQJbmVycm9yID0gMDsKKwlpbnQJZm9ybWF0ID0gb3B0cy0+Zm9ybWF0OworCisJ LyogU2V0IGZvcm1hdCBhcyBjdXN0b20gc28gdGhhdCB0b2MuZ2xvIGZpbGUgY2FuIGJlIHJlYWQu ICovCisJb3B0cy0+Zm9ybWF0ID0gYXJjaEN1c3RvbTsKKworCWlmICghZGF0YV9vbmx5KQorCQlu ZXJyb3IgPSByZXN0b3JlX29uZV9kYXRhYmFzZShpbnB1dEZpbGVTcGVjLCBvcHRzLCBudW1Xb3Jr ZXJzLAorCQkJCWZhbHNlLCBudW0sIGdsb2JhbHNfb25seSk7CisKKwkvKiBSZXNldCBmb3JtYXQg dmFsdWUuICovCisJb3B0cy0+Zm9ybWF0ID0gZm9ybWF0OworCisJcmV0dXJuIG5lcnJvcjsKK30K KworLyoKKyAqIHJlc3RvcmVfb25lX2RhdGFiYXNlCisgKgorICogVGhpcyB3aWxsIHJlc3RvcmUg b25lIGRhdGFiYXNlIHVzaW5nIHRvYy5kYXQgZmlsZS4KKyAqCisgKiByZXR1cm5zIHRoZSBudW1i ZXIgb2YgZXJyb3JzIHdoaWxlIGRvaW5nIHJlc3RvcmUuCisgKi8KK3N0YXRpYyBpbnQKK3Jlc3Rv cmVfb25lX2RhdGFiYXNlKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJlc3RvcmVPcHRpb25z ICpvcHRzLAorCQkJCQkgaW50IG51bVdvcmtlcnMsIGJvb2wgYXBwZW5kX2RhdGEsIGludCBudW0s IGJvb2wgZ2xvYmFsc19vbmx5KQoreworCUFyY2hpdmUgICAgKkFIOworCWludAkJCW5fZXJyb3Jz OworCiAJQUggPSBPcGVuQXJjaGl2ZShpbnB1dEZpbGVTcGVjLCBvcHRzLT5mb3JtYXQpOwogCiAJ U2V0QXJjaGl2ZU9wdGlvbnMoQUgsIE5VTEwsIG9wdHMpOwpAQCAtNDc5LDkgKzY0NCwxNSBAQCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkvKgogCSAqIFdlIGRvbid0IGhhdmUgYSBjb25u ZWN0aW9uIHlldCBidXQgdGhhdCBkb2Vzbid0IG1hdHRlci4gVGhlIGNvbm5lY3Rpb24KIAkgKiBp cyBpbml0aWFsaXplZCB0byBOVUxMIGFuZCBpZiB3ZSB0ZXJtaW5hdGUgdGhyb3VnaCBleGl0X25p Y2VseSgpIHdoaWxlCi0JICogaXQncyBzdGlsbCBOVUxMLCB0aGUgY2xlYW51cCBmdW5jdGlvbiB3 aWxsIGp1c3QgYmUgYSBuby1vcC4KKwkgKiBpdCdzIHN0aWxsIE5VTEwsIHRoZSBjbGVhbnVwIGZ1 bmN0aW9uIHdpbGwganVzdCBiZSBhIG5vLW9wLiBJZiB3ZSBhcmUKKwkgKiByZXN0b3JpbmcgbXVs dGlwbGUgZGF0YWJhc2VzLCB0aGVuIG9ubHkgdXBkYXRlIEFYIGhhbmRsZSBmb3IgY2xlYW51cCBh cworCSAqIHRoZSBwcmV2aW91cyBlbnRyeSB3YXMgYWxyZWFkeSBpbiB0aGUgYXJyYXkgYW5kIHdl IGhhZCBjbG9zZWQgcHJldmlvdXMKKwkgKiBjb25uZWN0aW9uLCBzbyB3ZSBjYW4gdXNlIHRoZSBz YW1lIGFycmF5IHNsb3QuCiAJICovCi0Jb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFIKTsKKwlpZiAo IWFwcGVuZF9kYXRhIHx8IG51bSA9PSAwKQorCQlvbl9leGl0X2Nsb3NlX2FyY2hpdmUoQUgpOwor CWVsc2UKKwkJcmVwbGFjZV9vbl9leGl0X2Nsb3NlX2FyY2hpdmUoQUgpOwogCiAJLyogTGV0IHRo ZSBhcmNoaXZlciBrbm93IGhvdyBub2lzeSB0byBiZSAqLwogCUFILT52ZXJib3NlID0gb3B0cy0+ dmVyYm9zZTsKQEAgLTUwMSwyNSArNjcyLDIxIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogCWVsc2UKIAl7CiAJCVByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoQUgpOwotCQlSZXN0 b3JlQXJjaGl2ZShBSCk7CisJCVJlc3RvcmVBcmNoaXZlKEFILCBhcHBlbmRfZGF0YSwgZ2xvYmFs c19vbmx5KTsKIAl9CiAKLQkvKiBkb25lLCBwcmludCBhIHN1bW1hcnkgb2YgaWdub3JlZCBlcnJv cnMgKi8KLQlpZiAoQUgtPm5fZXJyb3JzKQotCQlwZ19sb2dfd2FybmluZygiZXJyb3JzIGlnbm9y ZWQgb24gcmVzdG9yZTogJWQiLCBBSC0+bl9lcnJvcnMpOworCW5fZXJyb3JzID0gQUgtPm5fZXJy b3JzOwogCiAJLyogQUggbWF5IGJlIGZyZWVkIGluIENsb3NlQXJjaGl2ZT8gKi8KLQlleGl0X2Nv ZGUgPSBBSC0+bl9lcnJvcnMgPyAxIDogMDsKLQogCUNsb3NlQXJjaGl2ZShBSCk7CiAKLQlyZXR1 cm4gZXhpdF9jb2RlOworCXJldHVybiBuX2Vycm9yczsKIH0KIAogc3RhdGljIHZvaWQKIHVzYWdl KGNvbnN0IGNoYXIgKnByb2duYW1lKQogewotCXByaW50ZihfKCIlcyByZXN0b3JlcyBhIFBvc3Rn cmVTUUwgZGF0YWJhc2UgZnJvbSBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcC5cblxuIiks IHByb2duYW1lKTsKKwlwcmludGYoXygiJXMgcmVzdG9yZXMgUG9zdGdyZVNRTCBkYXRhYmFzZXMg ZnJvbSBhcmNoaXZlcyBjcmVhdGVkIGJ5IHBnX2R1bXAgb3IgcGdfZHVtcGFsbC5cblxuIiksIHBy b2duYW1lKTsKIAlwcmludGYoXygiVXNhZ2U6XG4iKSk7CiAJcHJpbnRmKF8oIiAgJXMgW09QVElP Tl0uLi4gW0ZJTEVdXG4iKSwgcHJvZ25hbWUpOwogCkBAIC01MzcsNiArNzA0LDcgQEAgdXNhZ2Uo Y29uc3QgY2hhciAqcHJvZ25hbWUpCiAJcHJpbnRmKF8oIiAgLWMsIC0tY2xlYW4gICAgICAgICAg ICAgICAgICBjbGVhbiAoZHJvcCkgZGF0YWJhc2Ugb2JqZWN0cyBiZWZvcmUgcmVjcmVhdGluZ1xu IikpOwogCXByaW50ZihfKCIgIC1DLCAtLWNyZWF0ZSAgICAgICAgICAgICAgICAgY3JlYXRlIHRo ZSB0YXJnZXQgZGF0YWJhc2VcbiIpKTsKIAlwcmludGYoXygiICAtZSwgLS1leGl0LW9uLWVycm9y ICAgICAgICAgIGV4aXQgb24gZXJyb3IsIGRlZmF1bHQgaXMgdG8gY29udGludWVcbiIpKTsKKwlw cmludGYoXygiICAtZywgLS1nbG9iYWxzLW9ubHkgICAgICAgICAgIHJlc3RvcmUgb25seSBnbG9i YWwgb2JqZWN0cywgbm8gZGF0YWJhc2VzXG4iKSk7CiAJcHJpbnRmKF8oIiAgLUksIC0taW5kZXg9 TkFNRSAgICAgICAgICAgICByZXN0b3JlIG5hbWVkIGluZGV4XG4iKSk7CiAJcHJpbnRmKF8oIiAg LWosIC0tam9icz1OVU0gICAgICAgICAgICAgICB1c2UgdGhpcyBtYW55IHBhcmFsbGVsIGpvYnMg dG8gcmVzdG9yZVxuIikpOwogCXByaW50ZihfKCIgIC1MLCAtLXVzZS1saXN0PUZJTEVOQU1FICAg ICAgdXNlIHRhYmxlIG9mIGNvbnRlbnRzIGZyb20gdGhpcyBmaWxlIGZvclxuIgpAQCAtNTUzLDYg KzcyMSw3IEBAIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQogCXByaW50ZihfKCIgIC0xLCAt LXNpbmdsZS10cmFuc2FjdGlvbiAgICAgcmVzdG9yZSBhcyBhIHNpbmdsZSB0cmFuc2FjdGlvblxu IikpOwogCXByaW50ZihfKCIgIC0tZGlzYWJsZS10cmlnZ2VycyAgICAgICAgICAgZGlzYWJsZSB0 cmlnZ2VycyBkdXJpbmcgZGF0YS1vbmx5IHJlc3RvcmVcbiIpKTsKIAlwcmludGYoXygiICAtLWVu YWJsZS1yb3ctc2VjdXJpdHkgICAgICAgIGVuYWJsZSByb3cgc2VjdXJpdHlcbiIpKTsKKwlwcmlu dGYoXygiICAtLWV4Y2x1ZGUtZGF0YWJhc2U9UEFUVEVSTiAgIGRvIG5vdCByZXN0b3JlIHRoZSBz cGVjaWZpZWQgZGF0YWJhc2UocylcbiIpKTsKIAlwcmludGYoXygiICAtLWZpbHRlcj1GSUxFTkFN RSAgICAgICAgICAgIHJlc3RvcmUgb3Igc2tpcCBvYmplY3RzIGJhc2VkIG9uIGV4cHJlc3Npb25z XG4iCiAJCQkgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBGSUxFTkFNRVxuIikp OwogCXByaW50ZihfKCIgIC0taWYtZXhpc3RzICAgICAgICAgICAgICAgICAgdXNlIElGIEVYSVNU UyB3aGVuIGRyb3BwaW5nIG9iamVjdHNcbiIpKTsKQEAgLTU4OCw4ICs3NTcsOCBAQCB1c2FnZShj b25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAtLXJvbGU9Uk9MRU5BTUUgICAgICAg ICAgZG8gU0VUIFJPTEUgYmVmb3JlIHJlc3RvcmVcbiIpKTsKIAogCXByaW50ZihfKCJcbiIKLQkJ CSAiVGhlIG9wdGlvbnMgLUksIC1uLCAtTiwgLVAsIC10LCAtVCwgYW5kIC0tc2VjdGlvbiBjYW4g YmUgY29tYmluZWQgYW5kIHNwZWNpZmllZFxuIgotCQkJICJtdWx0aXBsZSB0aW1lcyB0byBzZWxl Y3QgbXVsdGlwbGUgb2JqZWN0cy5cbiIpKTsKKwkJCSAiVGhlIG9wdGlvbnMgLUksIC1uLCAtTiwg LVAsIC10LCAtVCwgLS1zZWN0aW9uLCBhbmQgLS1leGNsdWRlLWRhdGFiYXNlIGNhbiBiZVxuIgor CQkJICJjb21iaW5lZCBhbmQgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzIHRvIHNlbGVjdCBtdWx0 aXBsZSBvYmplY3RzLlxuIikpOwogCXByaW50ZihfKCJcbklmIG5vIGlucHV0IGZpbGUgbmFtZSBp cyBzdXBwbGllZCwgdGhlbiBzdGFuZGFyZCBpbnB1dCBpcyB1c2VkLlxuXG4iKSk7CiAJcHJpbnRm KF8oIlJlcG9ydCBidWdzIHRvIDwlcz4uXG4iKSwgUEFDS0FHRV9CVUdSRVBPUlQpOwogCXByaW50 ZihfKCIlcyBob21lIHBhZ2U6IDwlcz5cbiIpLCBQQUNLQUdFX05BTUUsIFBBQ0tBR0VfVVJMKTsK QEAgLTY5NCwzICs4NjMsNDA3IEBAIHJlYWRfcmVzdG9yZV9maWx0ZXJzKGNvbnN0IGNoYXIgKmZp bGVuYW1lLCBSZXN0b3JlT3B0aW9ucyAqb3B0cykKIAogCWZpbHRlcl9mcmVlKCZmc3RhdGUpOwog fQorCisvKgorICogZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5CisgKgorICogUmV0dXJucyB0cnVl IGlmIHRoZSBmaWxlIGV4aXN0cyBpbiB0aGUgZ2l2ZW4gZGlyZWN0b3J5LgorICovCitzdGF0aWMg Ym9vbAorZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hh ciAqZmlsZW5hbWUpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJY2hhcgkJYnVmW01BWFBHUEFUSF07 CisKKwlpZiAoc25wcmludGYoYnVmLCBNQVhQR1BBVEgsICIlcy8lcyIsIGRpciwgZmlsZW5hbWUp ID49IE1BWFBHUEFUSCkKKwkJcGdfZmF0YWwoImRpcmVjdG9yeSBuYW1lIHRvbyBsb25nOiBcIiVz XCIiLCBkaXIpOworCisJcmV0dXJuIChzdGF0KGJ1ZiwgJnN0KSA9PSAwICYmIFNfSVNSRUcoc3Qu c3RfbW9kZSkpOworfQorCisvKgorICogZ2V0X2RibmFtZXNfbGlzdF90b19yZXN0b3JlCisgKgor ICogVGhpcyB3aWxsIG1hcmsgZm9yIHNraXBwaW5nIGFueSBlbnRyaWVzIGZyb20gZGJuYW1lX29p ZF9saXN0IHRoYXQgcGF0dGVybiBtYXRjaCBhbgorICogZW50cnkgaW4gdGhlIGRiX2V4Y2x1ZGVf cGF0dGVybnMgbGlzdC4KKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGF0YWJhc2UgdG8g YmUgcmVzdG9yZWQuCisgKgorICovCitzdGF0aWMgaW50CitnZXRfZGJuYW1lc19saXN0X3RvX3Jl c3RvcmUoUEdjb25uICpjb25uLAorCQkJCQkJCVNpbXBsZVB0ckxpc3QgKmRibmFtZV9vaWRfbGlz dCwKKwkJCQkJCQlTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMpCit7CisJaW50 CQkJY291bnRfZGIgPSAwOworCVBRRXhwQnVmZmVyIHF1ZXJ5OworCVBHcmVzdWx0ICAgKnJlczsK KworCXF1ZXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCWlmICghY29ubiAmJiBkYl9leGNs dWRlX3BhdHRlcm5zLmhlYWQgIT0gTlVMTCkKKwkJcGdfbG9nX2luZm8oImNvbnNpZGVyaW5nIFBB VFRFUk4gYXMgTkFNRSBmb3IgLS1leGNsdWRlLWRhdGFiYXNlIG9wdGlvbiBhcyBubyBkYXRhYmFz ZSBjb25uZWN0aW9uIHdoaWxlIGRvaW5nIHBnX3Jlc3RvcmUiKTsKKworCS8qCisJICogUHJvY2Vz cyBvbmUgYnkgb25lIGFsbCBkYm5hbWVzIGFuZCBpZiBzcGVjaWZpZWQgdG8gc2tpcCByZXN0b3Jp bmcsIHRoZW4KKwkgKiByZW1vdmUgZGJuYW1lIGZyb20gbGlzdC4KKwkgKi8KKwlmb3IgKFNpbXBs ZVB0ckxpc3RDZWxsICpkYl9jZWxsID0gZGJuYW1lX29pZF9saXN0LT5oZWFkOworCQkgZGJfY2Vs bDsgZGJfY2VsbCA9IGRiX2NlbGwtPm5leHQpCisJeworCQlEYk9pZE5hbWUgICpkYmlkbmFtZSA9 IChEYk9pZE5hbWUgKikgZGJfY2VsbC0+cHRyOworCQlib29sCQlza2lwX2RiX3Jlc3RvcmUgPSBm YWxzZTsKKwkJUFFFeHBCdWZmZXIgZGJfbGl0ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCQlh cHBlbmRTdHJpbmdMaXRlcmFsQ29ubihkYl9saXQsIGRiaWRuYW1lLT5zdHIsIGNvbm4pOworCisJ CWZvciAoU2ltcGxlU3RyaW5nTGlzdENlbGwgKnBhdF9jZWxsID0gZGJfZXhjbHVkZV9wYXR0ZXJu cy5oZWFkOyBwYXRfY2VsbDsgcGF0X2NlbGwgPSBwYXRfY2VsbC0+bmV4dCkKKwkJeworCQkJLyoK KwkJCSAqIElmIHRoZXJlIGlzIGFuIGV4YWN0IG1hdGNoIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byB0 cnkgYSBwYXR0ZXJuCisJCQkgKiBtYXRjaAorCQkJICovCisJCQlpZiAocGdfc3RyY2FzZWNtcChk YmlkbmFtZS0+c3RyLCBwYXRfY2VsbC0+dmFsKSA9PSAwKQorCQkJCXNraXBfZGJfcmVzdG9yZSA9 IHRydWU7CisJCQkvKiBPdGhlcndpc2UsIHRyeSBhIHBhdHRlcm4gbWF0Y2ggaWYgdGhlcmUgaXMg YSBjb25uZWN0aW9uICovCisJCQllbHNlIGlmIChjb25uKQorCQkJeworCQkJCWludAkJCWRvdGNu dDsKKworCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiU0VMRUNUIDEgIik7CisJCQkJ cHJvY2Vzc1NRTE5hbWVQYXR0ZXJuKGNvbm4sIHF1ZXJ5LCBwYXRfY2VsbC0+dmFsLCBmYWxzZSwK KwkJCQkJCQkJCSAgZmFsc2UsIE5VTEwsIGRiX2xpdC0+ZGF0YSwKKwkJCQkJCQkJCSAgTlVMTCwg TlVMTCwgTlVMTCwgJmRvdGNudCk7CisKKwkJCQlpZiAoZG90Y250ID4gMCkKKwkJCQl7CisJCQkJ CXBnX2xvZ19lcnJvcigiaW1wcm9wZXIgcXVhbGlmaWVkIG5hbWUgKHRvbyBtYW55IGRvdHRlZCBu YW1lcyk6ICVzIiwKKwkJCQkJCQkJIGRiaWRuYW1lLT5zdHIpOworCQkJCQlQUWZpbmlzaChjb25u KTsKKwkJCQkJZXhpdF9uaWNlbHkoMSk7CisJCQkJfQorCisJCQkJcmVzID0gZXhlY3V0ZVF1ZXJ5 KGNvbm4sIHF1ZXJ5LT5kYXRhLCBmYWxzZSk7CisKKwkJCQlpZiAoKFBRcmVzdWx0U3RhdHVzKHJl cykgPT0gUEdSRVNfVFVQTEVTX09LKSAmJiBQUW50dXBsZXMocmVzKSkKKwkJCQl7CisJCQkJCXNr aXBfZGJfcmVzdG9yZSA9IHRydWU7CisJCQkJCXBnX2xvZ19pbmZvKCJkYXRhYmFzZSBuYW1lIFwi JXNcIiBtYXRjaGVzIGV4Y2x1ZGUgcGF0dGVybiBcIiVzXCIiLCBkYmlkbmFtZS0+c3RyLCBwYXRf Y2VsbC0+dmFsKTsKKwkJCQl9CisKKwkJCQlQUWNsZWFyKHJlcyk7CisJCQkJcmVzZXRQUUV4cEJ1 ZmZlcihxdWVyeSk7CisJCQl9CisKKwkJCWlmIChza2lwX2RiX3Jlc3RvcmUpCisJCQkJYnJlYWs7 CisJCX0KKworCQlkZXN0cm95UFFFeHBCdWZmZXIoZGJfbGl0KTsKKworCQkvKgorCQkgKiBNYXJr IGRiIHRvIGJlIHNraXBwZWQgb3IgaW5jcmVtZW50IHRoZSBjb3VudGVyIG9mIGRicyB0byBiZQor CQkgKiByZXN0b3JlZAorCQkgKi8KKwkJaWYgKHNraXBfZGJfcmVzdG9yZSkKKwkJeworCQkJcGdf bG9nX2luZm8oImV4Y2x1ZGluZyBkYXRhYmFzZSBcIiVzXCIiLCBkYmlkbmFtZS0+c3RyKTsKKwkJ CWRiaWRuYW1lLT5vaWQgPSBJbnZhbGlkT2lkOworCQl9CisJCWVsc2UKKwkJeworCQkJY291bnRf ZGIrKzsKKwkJfQorCX0KKworCWRlc3Ryb3lQUUV4cEJ1ZmZlcihxdWVyeSk7CisKKwlyZXR1cm4g Y291bnRfZGI7Cit9CisKKy8qCisgKiBnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUKKyAq CisgKiBPcGVuIG1hcC5kYXQgZmlsZSBhbmQgcmVhZCBsaW5lIGJ5IGxpbmUgYW5kIHRoZW4gcHJl cGFyZSBhIGxpc3Qgb2YgZGF0YWJhc2UKKyAqIG5hbWVzIGFuZCBjb3JyZXNwb25kaW5nIGRiX29p ZC4KKyAqCisgKiBSZXR1cm5zLCB0b3RhbCBudW1iZXIgb2YgZGF0YWJhc2UgbmFtZXMgaW4gbWFw LmRhdCBmaWxlLgorICovCitzdGF0aWMgaW50CitnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZp bGUoY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsIFNpbXBsZVB0ckxpc3QgKmRibmFtZV9vaWRfbGlz dCkKK3sKKwlTdHJpbmdJbmZvRGF0YSBsaW5lYnVmOworCUZJTEUJICAgKnBmaWxlOworCWNoYXIJ CW1hcF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKKwlpbnQJCQljb3VudCA9IDA7CisKKworCS8qCisJ ICogSWYgdGhlcmUgaXMgbm8gbWFwLmRhdCBmaWxlIGluIGR1bXAsIHRoZW4gcmV0dXJuIGZyb20g aGVyZSBhcworCSAqIHRoZXJlIGlzIG5vIGRhdGFiYXNlIHRvIHJlc3RvcmUuCisJICovCisJaWYg KCFmaWxlX2V4aXN0c19pbl9kaXJlY3RvcnkoZHVtcGRpcnBhdGgsICJtYXAuZGF0IikpCisJewor CQlwZ19sb2dfaW5mbygiZGF0YWJhc2UgcmVzdG9yaW5nIGlzIHNraXBwZWQgYmVjYXVzZSBmaWxl IFwiJXNcIiBkb2VzIG5vdCBleGlzdCBpbiBkaXJlY3RvcnkgXCIlc1wiIiwgIm1hcC5kYXQiLCBk dW1wZGlycGF0aCk7CisJCXJldHVybiAwOworCX0KKworCXNucHJpbnRmKG1hcF9maWxlX3BhdGgs IE1BWFBHUEFUSCwgIiVzL21hcC5kYXQiLCBkdW1wZGlycGF0aCk7CisKKwkvKiBPcGVuIG1hcC5k YXQgZmlsZS4gKi8KKwlwZmlsZSA9IGZvcGVuKG1hcF9maWxlX3BhdGgsIFBHX0JJTkFSWV9SKTsK KworCWlmIChwZmlsZSA9PSBOVUxMKQorCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZmlsZSBc IiVzXCI6ICVtIiwgbWFwX2ZpbGVfcGF0aCk7CisKKwlpbml0U3RyaW5nSW5mbygmbGluZWJ1Zik7 CisKKwkvKiBBcHBlbmQgYWxsIHRoZSBkYm5hbWUvZGJfb2lkIGNvbWJpbmF0aW9ucyB0byB0aGUg bGlzdC4gKi8KKwl3aGlsZSAocGdfZ2V0X2xpbmVfYnVmKHBmaWxlLCAmbGluZWJ1ZikpCisJewor CQlPaWQJCQlkYl9vaWQgPSBJbnZhbGlkT2lkOworCQljaGFyCSAgICpkYm5hbWU7CisJCURiT2lk TmFtZSAgKmRiaWRuYW1lOworCQlpbnQJCQluYW1lbGVuOworCQljaGFyCSAgICpwID0gbGluZWJ1 Zi5kYXRhOworCisJCS8qIEV4dHJhY3QgZGJvaWQuICovCisJCXdoaWxlIChpc2RpZ2l0KCh1bnNp Z25lZCBjaGFyKSAqcCkpCisJCQlwKys7CisJCWlmIChwID4gbGluZWJ1Zi5kYXRhICYmICpwID09 ICcgJykKKwkJeworCQkJc3NjYW5mKGxpbmVidWYuZGF0YSwgIiV1IiwgJmRiX29pZCk7CisJCQlw Kys7CisJCX0KKworCQkvKiBkYm5hbWUgaXMgdGhlIHJlc3Qgb2YgdGhlIGxpbmUgKi8KKwkJZGJu YW1lID0gcDsKKwkJbmFtZWxlbiA9IHN0cmxlbihkYm5hbWUpOworCisJCS8qIFJlcG9ydCBlcnJv ciBhbmQgZXhpdCBpZiB0aGUgZmlsZSBoYXMgYW55IGNvcnJ1cHRlZCBkYXRhLiAqLworCQlpZiAo IU9pZElzVmFsaWQoZGJfb2lkKSB8fCBuYW1lbGVuIDw9IDEpCisJCQlwZ19mYXRhbCgiaW52YWxp ZCBlbnRyeSBpbiBmaWxlIFwiJXNcIiBvbiBsaW5lICVkIiwgbWFwX2ZpbGVfcGF0aCwKKwkJCQkJ IGNvdW50ICsgMSk7CisKKwkJcGdfbG9nX2luZm8oImZvdW5kIGRhdGFiYXNlIFwiJXNcIiAoT0lE OiAldSkgaW4gZmlsZSBcIiVzXCIiLAorCQkJCQlkYm5hbWUsIGRiX29pZCwgbWFwX2ZpbGVfcGF0 aCk7CisKKwkJZGJpZG5hbWUgPSBwZ19tYWxsb2Mob2Zmc2V0b2YoRGJPaWROYW1lLCBzdHIpICsg bmFtZWxlbiArIDEpOworCQlkYmlkbmFtZS0+b2lkID0gZGJfb2lkOworCQlzdHJsY3B5KGRiaWRu YW1lLT5zdHIsIGRibmFtZSwgbmFtZWxlbik7CisKKwkJc2ltcGxlX3B0cl9saXN0X2FwcGVuZChk Ym5hbWVfb2lkX2xpc3QsIGRiaWRuYW1lKTsKKwkJY291bnQrKzsKKwl9CisKKwkvKiBDbG9zZSBt YXAuZGF0IGZpbGUuICovCisJZmNsb3NlKHBmaWxlKTsKKworCXJldHVybiBjb3VudDsKK30KKwor LyoKKyAqIHJlc3RvcmVfYWxsX2RhdGFiYXNlcworICoKKyAqIFRoaXMgd2lsbCByZXN0b3JlIGRh dGFiYXNlcyB0aG9zZSBkdW1wcyBhcmUgcHJlc2VudCBpbgorICogZGlyZWN0b3J5IGJhc2VkIG9u IG1hcC5kYXQgZmlsZSBtYXBwaW5nLgorICoKKyAqIFRoaXMgd2lsbCBza2lwIHJlc3RvcmluZyBm b3IgZGF0YWJhc2VzIHRoYXQgYXJlIHNwZWNpZmllZCB3aXRoCisgKiBleGNsdWRlLWRhdGFiYXNl IG9wdGlvbi4KKyAqCisgKiByZXR1cm5zLCBudW1iZXIgb2YgZXJyb3JzIHdoaWxlIGRvaW5nIHJl c3RvcmUuCisgKi8KK3N0YXRpYyBpbnQKK3Jlc3RvcmVfYWxsX2RhdGFiYXNlcyhjb25zdCBjaGFy ICppbnB1dEZpbGVTcGVjLAorCQkJCQkgIFNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0 ZXJucywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJCQkJCSAgaW50IG51bVdvcmtlcnMpCit7CisJ U2ltcGxlUHRyTGlzdCBkYm5hbWVfb2lkX2xpc3QgPSB7TlVMTCwgTlVMTH07CisJaW50CQkJbnVt X2RiX3Jlc3RvcmUgPSAwOworCWludAkJCW51bV90b3RhbF9kYjsKKwlpbnQJCQluX2Vycm9yc190 b3RhbDsKKwljaGFyCSAgICpjb25uZWN0ZWRfZGIgPSBOVUxMOworCWJvb2wJCWR1bXBEYXRhID0g b3B0cy0+ZHVtcERhdGE7CisJYm9vbAkJZHVtcFNjaGVtYSA9IG9wdHMtPmR1bXBTY2hlbWE7CisJ Ym9vbAkJZHVtcFN0YXRpc3RpY3MgPSBvcHRzLT5kdW1wU2NoZW1hOworCVBHY29ubiAqY29ubiA9 IE5VTEw7CisJY2hhcgkJZ2xvYmFsX3BhdGhbTUFYUEdQQVRIXTsKKworCS8qIFNldCBwYXRoIGZv ciB0b2MuZ2xvIGZpbGUuICovCisJc25wcmludGYoZ2xvYmFsX3BhdGgsIE1BWFBHUEFUSCwgIiVz L3RvYy5nbG8iLCBpbnB1dEZpbGVTcGVjKTsKKworCS8qIFNhdmUgZGIgbmFtZSB0byByZXVzZSBp dCBmb3IgYWxsIHRoZSBkYXRhYmFzZS4gKi8KKwlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUpCisJ CWNvbm5lY3RlZF9kYiA9IG9wdHMtPmNwYXJhbXMuZGJuYW1lOworCisJbnVtX3RvdGFsX2RiID0g Z2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGlucHV0RmlsZVNwZWMsICZkYm5hbWVfb2lk X2xpc3QpOworCisJLyogSWYgbWFwLmRhdCBoYXMgbm8gZW50cmllcywgcmV0dXJuIGFmdGVyIHBy b2Nlc3NpbmcgZ2xvYmFsIGNvbW1hbmRzLiAqLworCWlmIChkYm5hbWVfb2lkX2xpc3QuaGVhZCA9 PSBOVUxMKQorCQlyZXR1cm4gcmVzdG9yZV9nbG9iYWxfb2JqZWN0cyhnbG9iYWxfcGF0aCwgb3B0 cywgbnVtV29ya2VycywgMCwgZmFsc2UpOworCisJcGdfbG9nX2luZm8obmdldHRleHQoImZvdW5k ICVkIGRhdGFiYXNlIG5hbWUgaW4gXCIlc1wiIiwKKwkJCQkJCSAiZm91bmQgJWQgZGF0YWJhc2Ug bmFtZXMgaW4gXCIlc1wiIiwKKwkJCQkJCSBudW1fdG90YWxfZGIpLAorCQkJCW51bV90b3RhbF9k YiwgIm1hcC5kYXQiKTsKKworCS8qCisJICogSWYgZXhjbHVkZS1wYXR0ZXJucyBpcyBnaXZlbiwg dGhlbiBjb25uZWN0IHRvIHRoZSBkYXRhYmFzZSB0byBwcm9jZXNzCisJICogaXQuCisJICovCisJ aWYgKGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZCAhPSBOVUxMKQorCXsKKwkJaWYgKG9wdHMtPmNw YXJhbXMuZGJuYW1lKQorCQl7CisJCQljb25uID0gQ29ubmVjdERhdGFiYXNlKG9wdHMtPmNwYXJh bXMuZGJuYW1lLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJb3B0cy0+Y3BhcmFt cy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNlcm5hbWUsIFRSSV9ERUZBVUxULAorCQkJCQlmYWxz ZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworCisJCQlpZiAoIWNvbm4pCisJ CQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsIG9wdHMt PmNwYXJhbXMuZGJuYW1lKTsKKwkJfQorCisJCWlmICghY29ubikKKwkJeworCQkJcGdfbG9nX2lu Zm8oInRyeWluZyB0byBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsICJwb3N0Z3JlcyIpOwor CisJCQljb25uID0gQ29ubmVjdERhdGFiYXNlKCJwb3N0Z3JlcyIsIE5VTEwsIG9wdHMtPmNwYXJh bXMucGdob3N0LAorCQkJCQlvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2Vy bmFtZSwgVFJJX0RFRkFVTFQsCisJCQkJCWZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCwgTlVM TCwgTlVMTCk7CisKKwkJCS8qIFRyeSB3aXRoIHRlbXBsYXRlMS4gKi8KKwkJCWlmICghY29ubikK KwkJCXsKKwkJCQlwZ19sb2dfaW5mbygidHJ5aW5nIHRvIGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIl c1wiIiwgInRlbXBsYXRlMSIpOworCisJCQkJY29ubiA9IENvbm5lY3REYXRhYmFzZSgidGVtcGxh dGUxIiwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCQlvcHRzLT5jcGFyYW1zLnBn cG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RFRkFVTFQsCisJCQkJCQlmYWxzZSwg cHJvZ25hbWUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworCQkJfQorCQl9CisJfQorCisJLyoK KwkgKiBmaWx0ZXIgdGhlIGRiIGxpc3QgYWNjb3JkaW5nIHRvIHRoZSBleGNsdWRlIHBhdHRlcm5z CisJICovCisJbnVtX2RiX3Jlc3RvcmUgPSBnZXRfZGJuYW1lc19saXN0X3RvX3Jlc3RvcmUoY29u biwgJmRibmFtZV9vaWRfbGlzdCwKKwkJCQkJCQkJCQkJCSBkYl9leGNsdWRlX3BhdHRlcm5zKTsK KworCS8qIENsb3NlIHRoZSBkYiBjb25uZWN0aW9uIGFzIHdlIGFyZSBkb25lIHdpdGggZ2xvYmFs cyBhbmQgcGF0dGVybnMuICovCisJaWYgKGNvbm4pCisJCVBRZmluaXNoKGNvbm4pOworCisJLyog T3BlbiB0b2MuZGF0IGZpbGUgYW5kIGV4ZWN1dGUvYXBwZW5kIGFsbCB0aGUgZ2xvYmFsIHNxbCBj b21tYW5kcy4gKi8KKwluX2Vycm9yc190b3RhbCA9ICByZXN0b3JlX2dsb2JhbF9vYmplY3RzKGds b2JhbF9wYXRoLCBvcHRzLCBudW1Xb3JrZXJzLCAwLCBmYWxzZSk7CisKKwkvKiBFeGl0IGlmIG5v IGRiIG5lZWRzIHRvIGJlIHJlc3RvcmVkLiAqLworCWlmIChkYm5hbWVfb2lkX2xpc3QuaGVhZCA9 PSBOVUxMIHx8IG51bV9kYl9yZXN0b3JlID09IDApCisJeworCQlwZ19sb2dfaW5mbyhuZ2V0dGV4 dCgibm8gZGF0YWJhc2UgbmVlZHMgcmVzdG9yaW5nIG91dCBvZiAlZCBkYXRhYmFzZSIsCisJCQkJ CQkJICJubyBkYXRhYmFzZSBuZWVkcyByZXN0b3Jpbmcgb3V0IG9mICVkIGRhdGFiYXNlcyIsIG51 bV90b3RhbF9kYiksCisJCQkJCW51bV90b3RhbF9kYik7CisJCXJldHVybiBuX2Vycm9yc190b3Rh bDsKKwl9CisKKwlwZ19sb2dfaW5mbygibmVlZCB0byByZXN0b3JlICVkIGRhdGFiYXNlcyBvdXQg b2YgJWQgZGF0YWJhc2VzIiwgbnVtX2RiX3Jlc3RvcmUsIG51bV90b3RhbF9kYik7CisKKwkvKgor CSAqIFdlIGhhdmUgYSBsaXN0IG9mIGRhdGFiYXNlcyB0byByZXN0b3JlIGFmdGVyIHByb2Nlc3Np bmcgdGhlCisJICogZXhjbHVkZS1kYXRhYmFzZSBzd2l0Y2goZXMpLiAgTm93IHdlIGNhbiByZXN0 b3JlIHRoZW0gb25lIGJ5IG9uZS4KKwkgKi8KKwlmb3IgKFNpbXBsZVB0ckxpc3RDZWxsICpkYl9j ZWxsID0gZGJuYW1lX29pZF9saXN0LmhlYWQ7CisJCSBkYl9jZWxsOyBkYl9jZWxsID0gZGJfY2Vs bC0+bmV4dCkKKwl7CisJCURiT2lkTmFtZSAgKmRiaWRuYW1lID0gKERiT2lkTmFtZSAqKSBkYl9j ZWxsLT5wdHI7CisJCWNoYXIJCXN1YmRpcnBhdGhbTUFYUEdQQVRIXTsKKwkJY2hhcgkJc3ViZGly ZGJwYXRoW01BWFBHUEFUSF07CisJCWNoYXIJCWRiZmlsZW5hbWVbTUFYUEdQQVRIXTsKKwkJaW50 CQkJbl9lcnJvcnM7CisKKwkJLyogaWdub3JlIGRicyBtYXJrZWQgZm9yIHNraXBwaW5nICovCisJ CWlmIChkYmlkbmFtZS0+b2lkID09IEludmFsaWRPaWQpCisJCQljb250aW51ZTsKKworCQkvKgor CQkgKiBXZSBuZWVkIHRvIHJlc2V0IG92ZXJyaWRlX2RibmFtZSBzbyB0aGF0IG9iamVjdHMgY2Fu IGJlIHJlc3RvcmVkCisJCSAqIGludG8gYW4gYWxyZWFkeSBjcmVhdGVkIGRhdGFiYXNlLiAodXNl ZCB3aXRoIC1kLy0tZGJuYW1lIG9wdGlvbikKKwkJICovCisJCWlmIChvcHRzLT5jcGFyYW1zLm92 ZXJyaWRlX2RibmFtZSkKKwkJeworCQkJcGZyZWUob3B0cy0+Y3BhcmFtcy5vdmVycmlkZV9kYm5h bWUpOworCQkJb3B0cy0+Y3BhcmFtcy5vdmVycmlkZV9kYm5hbWUgPSBOVUxMOworCQl9CisKKwkJ c25wcmludGYoc3ViZGlyZGJwYXRoLCBNQVhQR1BBVEgsICIlcy9kYXRhYmFzZXMiLCBpbnB1dEZp bGVTcGVjKTsKKworCQkvKgorCQkgKiBMb29rIGZvciB0aGUgZGF0YWJhc2UgZHVtcCBmaWxlL2Rp ci4gSWYgdGhlcmUgaXMgYW4ge29pZH0udGFyIG9yCisJCSAqIHtvaWR9LmRtcCBmaWxlLCB1c2Ug aXQuIE90aGVyd2lzZSB0cnkgdG8gdXNlIGEgZGlyZWN0b3J5IGNhbGxlZAorCQkgKiB7b2lkfQor CQkgKi8KKwkJc25wcmludGYoZGJmaWxlbmFtZSwgTUFYUEdQQVRILCAiJXUudGFyIiwgZGJpZG5h bWUtPm9pZCk7CisJCWlmIChmaWxlX2V4aXN0c19pbl9kaXJlY3Rvcnkoc3ViZGlyZGJwYXRoLCBk YmZpbGVuYW1lKSkKKwkJCXNucHJpbnRmKHN1YmRpcnBhdGgsIE1BWFBHUEFUSCwgIiVzL2RhdGFi YXNlcy8ldS50YXIiLCBpbnB1dEZpbGVTcGVjLCBkYmlkbmFtZS0+b2lkKTsKKwkJZWxzZQorCQl7 CisJCQlzbnByaW50ZihkYmZpbGVuYW1lLCBNQVhQR1BBVEgsICIldS5kbXAiLCBkYmlkbmFtZS0+ b2lkKTsKKworCQkJaWYgKGZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeShzdWJkaXJkYnBhdGgsIGRi ZmlsZW5hbWUpKQorCQkJCXNucHJpbnRmKHN1YmRpcnBhdGgsIE1BWFBHUEFUSCwgIiVzL2RhdGFi YXNlcy8ldS5kbXAiLCBpbnB1dEZpbGVTcGVjLCBkYmlkbmFtZS0+b2lkKTsKKwkJCWVsc2UKKwkJ CQlzbnByaW50ZihzdWJkaXJwYXRoLCBNQVhQR1BBVEgsICIlcy9kYXRhYmFzZXMvJXUiLCBpbnB1 dEZpbGVTcGVjLCBkYmlkbmFtZS0+b2lkKTsKKwkJfQorCisJCXBnX2xvZ19pbmZvKCJyZXN0b3Jp bmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJpZG5hbWUtPnN0cik7CisKKwkJLyogSWYgZGF0YWJhc2Ug aXMgYWxyZWFkeSBjcmVhdGVkLCB0aGVuIGRvbid0IHNldCBjcmVhdGVEQiBmbGFnLiAqLworCQlp ZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUpCisJCXsKKwkJCVBHY29ubgkgICAqdGVzdF9jb25uOwor CisJCQl0ZXN0X2Nvbm4gPSBDb25uZWN0RGF0YWJhc2UoZGJpZG5hbWUtPnN0ciwgTlVMTCwgb3B0 cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCQkJCQkJb3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMt PmNwYXJhbXMudXNlcm5hbWUsIFRSSV9ERUZBVUxULAorCQkJCQkJCQkJCWZhbHNlLCBwcm9nbmFt ZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisJCQlpZiAodGVzdF9jb25uKQorCQkJeworCQkJ CVBRZmluaXNoKHRlc3RfY29ubik7CisKKwkJCQkvKiBVc2UgYWxyZWFkeSBjcmVhdGVkIGRhdGFi YXNlIGZvciBjb25uZWN0aW9uLiAqLworCQkJCW9wdHMtPmNyZWF0ZURCID0gMDsKKwkJCQlvcHRz LT5jcGFyYW1zLmRibmFtZSA9IGRiaWRuYW1lLT5zdHI7CisJCQl9CisJCQllbHNlCisJCQl7CisJ CQkJLyogd2UnbGwgaGF2ZSB0byBjcmVhdGUgaXQgKi8KKwkJCQlvcHRzLT5jcmVhdGVEQiA9IDE7 CisJCQkJb3B0cy0+Y3BhcmFtcy5kYm5hbWUgPSBjb25uZWN0ZWRfZGI7CisJCQl9CisJCX0KKwor CQkvKgorCQkgKiBSZXNldCBmbGFncyAtIG1pZ2h0IGhhdmUgYmVlbiByZXNldCBpbiBwZ19iYWNr dXBfYXJjaGl2ZXIuYyBieSB0aGUKKwkJICogcHJldmlvdXMgcmVzdG9yZS4KKwkJICovCisJCW9w dHMtPmR1bXBEYXRhID0gZHVtcERhdGE7CisJCW9wdHMtPmR1bXBTY2hlbWEgPSBkdW1wU2NoZW1h OworCQlvcHRzLT5kdW1wU3RhdGlzdGljcyA9IGR1bXBTdGF0aXN0aWNzOworCisJCS8qIFJlc3Rv cmUgdGhlIHNpbmdsZSBkYXRhYmFzZS4gKi8KKwkJbl9lcnJvcnMgPSByZXN0b3JlX29uZV9kYXRh YmFzZShzdWJkaXJwYXRoLCBvcHRzLCBudW1Xb3JrZXJzLCB0cnVlLCAxLCBmYWxzZSk7CisKKwkJ LyogUHJpbnQgYSBzdW1tYXJ5IG9mIGlnbm9yZWQgZXJyb3JzIGR1cmluZyBzaW5nbGUgZGF0YWJh c2UgcmVzdG9yZS4gKi8KKwkJaWYgKG5fZXJyb3JzKQorCQl7CisJCQluX2Vycm9yc190b3RhbCAr PSBuX2Vycm9yczsKKwkJCXBnX2xvZ193YXJuaW5nKCJlcnJvcnMgaWdub3JlZCBvbiBkYXRhYmFz ZSBcIiVzXCIgcmVzdG9yZTogJWQiLCBkYmlkbmFtZS0+c3RyLCBuX2Vycm9ycyk7CisJCX0KKwl9 CisKKwkvKiBMb2cgbnVtYmVyIG9mIHByb2Nlc3NlZCBkYXRhYmFzZXMuICovCisJcGdfbG9nX2lu Zm8oIm51bWJlciBvZiByZXN0b3JlZCBkYXRhYmFzZXMgaXMgJWQiLCBudW1fZGJfcmVzdG9yZSk7 CisKKwkvKiBGcmVlIGRibmFtZSBhbmQgZGJvaWQgbGlzdC4gKi8KKwlzaW1wbGVfcHRyX2xpc3Rf ZGVzdHJveSgmZGJuYW1lX29pZF9saXN0KTsKKworCXJldHVybiBuX2Vycm9yc190b3RhbDsKK30K ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbCBiL3NyYy9iaW4vcGdf ZHVtcC90LzAwMV9iYXNpYy5wbApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4 IDM3ZDg5M2Q1ZTZhLi4wODNmNWM1YmY5ZAotLS0gYS9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFz aWMucGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCkBAIC0yNDQsNCArMjQ0 LDMxIEBAIGNvbW1hbmRfZmFpbHNfbGlrZSgKIAkncGdfZHVtcGFsbDogb3B0aW9uIC0tZXhjbHVk ZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIC1nLy0tZ2xvYmFscy1vbmx5 JwogKTsKIAorY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX2R1bXBhbGwnLCAnLS1mb3JtYXQn LCAneCcgXSwKKwlxci9cUXBnX2R1bXBhbGw6IGVycm9yOiB1bnJlY29nbml6ZWQgb3V0cHV0IGZv cm1hdCAieCI7XEUvLAorCSdwZ19kdW1wYWxsOiB1bnJlY29nbml6ZWQgb3V0cHV0IGZvcm1hdCcp OworCitjb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfZHVtcGFsbCcsICctLWZvcm1hdCcsICdk JywgJy0tcmVzdHJpY3Qta2V5PXV1JywgJy1mIGR1bXBmaWxlJyBdLAorCXFyL1xRcGdfZHVtcGFs bDogZXJyb3I6IG9wdGlvbiAtLXJlc3RyaWN0LWtleSBjYW4gb25seSBiZSB1c2VkIHdpdGggLS1m b3JtYXQ9cGxhaW5cRS8sCisJJ3BnX2R1bXBhbGw6IC0tcmVzdHJpY3Qta2V5IGNhbiBvbmx5IGJl IHVzZWQgd2l0aCBwbGFpbiBkdW1wIGZvcm1hdCcpOworCitjb21tYW5kX2ZhaWxzX2xpa2UoCisJ WyAncGdfcmVzdG9yZScsICctLWV4Y2x1ZGUtZGF0YWJhc2U9Zm9vJywgJy0tZ2xvYmFscy1vbmx5 JywgJy1kJywgJ3h4eCcgXSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb24gLS1leGNs dWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWdcLy0tZ2xvYmFscy1v bmx5XEUvLAorCSdwZ19yZXN0b3JlOiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBi ZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcvLS1nbG9iYWxzLW9ubHknCispOworCitjb21tYW5kX2Zh aWxzX2xpa2UoCisJWyAncGdfcmVzdG9yZScsICctLWV4Y2x1ZGUtZGF0YWJhc2U9Zm9vJywgJy1k JywgJ3h4eCcsICdkdW1wZGlyJyBdLAorCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbiAt LWV4Y2x1ZGUtZGF0YWJhc2UgY2FuIGJlIHVzZWQgb25seSB3aGVuIHJlc3RvcmluZyBhbiBhcmNo aXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbFxFLywKKwknV2hlbiBvcHRpb24gLS1leGNsdWRlLWRh dGFiYXNlIGlzIHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcCcKKyk7CisK K2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdwZ19yZXN0b3JlJywgJy0tZ2xvYmFscy1vbmx5Jywg Jy1kJywgJ3h4eCcsICdkdW1wZGlyJyBdLAorCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlv biAtZ1wvLS1nbG9iYWxzLW9ubHkgY2FuIGJlIHVzZWQgb25seSB3aGVuIHJlc3RvcmluZyBhbiBh cmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbFxFLywKKwknV2hlbiBvcHRpb24gLS1nbG9iYWxz LW9ubHkgaXMgbm90IHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcCcKKyk7 CiBkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC90LzAwN19wZ19k dW1wYWxsLnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDA3X3BnX2R1bXBhbGwucGwKbmV3IGZpbGUg bW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAuLjNjN2QyYWQ3YzUzCi0tLSAvZGV2L251bGwK KysrIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDA3X3BnX2R1bXBhbGwucGwKQEAgLTAsMCArMSwzOTYg QEAKKyMgQ29weXJpZ2h0IChjKSAyMDIxLTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7CisK K3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0 aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKK215ICR0ZW1wZGlyID0gUG9zdGdyZVNRTDo6VGVzdDo6 VXRpbHM6OnRlbXBkaXI7CitteSAkcnVuX2RiID0gJ3Bvc3RncmVzJzsKK215ICRzZXAgPSAkd2lu ZG93c19vcyA/ICJcXCIgOiAiLyI7CisKKyMgVGFibGVzcGFjZSBsb2NhdGlvbnMgdXNlZCBieSAi cmVzdG9yZV90YWJsZXNwYWNlIiB0ZXN0IGNhc2UuCitteSAkdGFibGVzcGFjZTEgPSAiJHt0ZW1w ZGlyfSR7c2VwfXRibDEiOworbXkgJHRhYmxlc3BhY2UyID0gIiR7dGVtcGRpcn0ke3NlcH10Ymwy IjsKK21rZGlyKCR0YWJsZXNwYWNlMSkgfHwgZGllICJta2RpciAkdGFibGVzcGFjZTEgJCEiOwor bWtkaXIoJHRhYmxlc3BhY2UyKSB8fCBkaWUgIm1rZGlyICR0YWJsZXNwYWNlMiAkISI7CisKKyMg U2NhcGUgdGFibGVzcGFjZSBsb2NhdGlvbnMgb24gV2luZG93cy4KKyR0YWJsZXNwYWNlMSA9ICR3 aW5kb3dzX29zID8gKCR0YWJsZXNwYWNlMSA9fiBzL1xcL1xcXFwvZ3IpIDogJHRhYmxlc3BhY2Ux OworJHRhYmxlc3BhY2UyID0gJHdpbmRvd3Nfb3MgPyAoJHRhYmxlc3BhY2UyID1+IHMvXFwvXFxc XC9ncikgOiAkdGFibGVzcGFjZTI7CisKKyMgV2hlcmUgcGdfZHVtcGFsbCB3aWxsIGJlIGV4ZWN1 dGVkLgorbXkgJG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGUnKTsK KyRub2RlLT5pbml0OworJG5vZGUtPnN0YXJ0OworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEZWZpbml0aW9uIG9m IHRoZSBwZ19kdW1wYWxsIHRlc3QgY2FzZXMgdG8gcnVuLgorIworIyBFYWNoIG9mIHRoZXNlIHRl c3QgY2FzZXMgYXJlIG5hbWVkIGFuZCB0aG9zZSBuYW1lcyBhcmUgdXNlZCBmb3IgZmFpbAorIyBy ZXBvcnRpbmcgYW5kIGFsc28gdG8gc2F2ZSB0aGUgZHVtcCBhbmQgcmVzdG9yZSBpbmZvcm1hdGlv biBuZWVkZWQgZm9yIHRoZQorIyB0ZXN0IHRvIGFzc2VydC4KKyMKKyMgVGhlICJzZXR1cF9zcWwi IGlzIGEgcHNxbCB2YWxpZCBzY3JpcHQgdGhhdCBjb250YWlucyBTUUwgY29tbWFuZHMgdG8gZXhl Y3V0ZQorIyBiZWZvcmUgb2YgYWN0dWFsbHkgZXhlY3V0ZSB0aGUgdGVzdHMuIFRoZSBzZXR1cHMg YXJlIGFsbCBleGVjdXRlZCBiZWZvcmUgb2YKKyMgYW55IHRlc3QgZXhlY3V0aW9uLgorIworIyBU aGUgImR1bXBfY21kIiBhbmQgInJlc3RvcmVfY21kIiBhcmUgdGhlIGNvbW1hbmRzIHRoYXQgd2ls bCBiZSBleGVjdXRlZC4gVGhlCisjICJyZXN0b3JlX2NtZCIgbXVzdCBoYXZlIHRoZSAtLWZpbGUg ZmxhZyB0byBzYXZlIHRoZSByZXN0b3JlIG91dHB1dCBzbyB0aGF0IHdlCisjIGNhbiBhc3NlcnQg b24gaXQuCisjCisjIFRoZSAibGlrZSIgYW5kICJ1bmxpa2UiIGlzIGEgcmVnZXhwIHRoYXQgaXMg dXNlZCB0byBtYXRjaCB0aGUgcGdfcmVzdG9yZQorIyBvdXRwdXQuIEl0IG11c3QgaGF2ZSBhdCBs ZWFzdCBvbmUgb2YgdGhlbiBmaWxsZWQgcGVyIHRlc3QgY2FzZXMgYnV0IGl0IGFsc28KKyMgY2Fu IGhhdmUgYm90aC4gU2VlICJleGNsdWRpbmdfZGF0YWJhc2VzIiB0ZXN0IGNhc2UgZm9yIGV4YW1w bGUuCitteSAlcGdkdW1wYWxsX3J1bnMgPSAoCisJcmVzdG9yZV9yb2xlcyA9PiB7CisJCXNldHVw X3NxbCA9PiAnCisJCUNSRUFURSBST0xFIGR1bXBhbGwgV0lUSCBFTkNSWVBURUQgUEFTU1dPUkQg XCdhZG1pblwnIFNVUEVSVVNFUjsKKwkJQ1JFQVRFIFJPTEUgZHVtcGFsbDIgV0lUSCBSRVBMSUNB VElPTiBDT05ORUNUSU9OIExJTUlUIDEwOycsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1w YWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRl bXBkaXIvcmVzdG9yZV9yb2xlcyIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19y ZXN0b3JlJywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxl JyA9PiAiJHRlbXBkaXIvcmVzdG9yZV9yb2xlcy5zcWwiLAorCQkJIiR0ZW1wZGlyL3Jlc3RvcmVf cm9sZXMiLAorCQldLAorCQlsaWtlID0+IHFyLworCQkJXHMqXFFDUkVBVEUgUk9MRSBkdW1wYWxs MjtcRQorCQkJXHMqXFFBTFRFUiBST0xFIGR1bXBhbGwyIFdJVEggTk9TVVBFUlVTRVIgSU5IRVJJ VCBOT0NSRUFURVJPTEUgTk9DUkVBVEVEQiBOT0xPR0lOIFJFUExJQ0FUSU9OIE5PQllQQVNTUkxT IENPTk5FQ1RJT04gTElNSVQgMTA7XEUKKwkJL3htCisJfSwKKworCXJlc3RvcmVfdGFibGVzcGFj ZSA9PiB7CisJCXNldHVwX3NxbCA9PiAiCisJCUNSRUFURSBST0xFIHRhcDsKKwkJQ1JFQVRFIFRB QkxFU1BBQ0UgdGJsMSBPV05FUiB0YXAgTE9DQVRJT04gJyR0YWJsZXNwYWNlMSc7CisJCUNSRUFU RSBUQUJMRVNQQUNFIHRibDIgT1dORVIgdGFwIExPQ0FUSU9OICckdGFibGVzcGFjZTInIFdJVEgg KHNlcV9wYWdlX2Nvc3Q9MS4wKTsiLAorCQlkdW1wX2NtZCA9PiBbCisJCQkncGdfZHVtcGFsbCcs CisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGly L3Jlc3RvcmVfdGFibGVzcGFjZSIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19y ZXN0b3JlJywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxl JyA9PiAiJHRlbXBkaXIvcmVzdG9yZV90YWJsZXNwYWNlLnNxbCIsCisJCQkiJHRlbXBkaXIvcmVz dG9yZV90YWJsZXNwYWNlIiwKKwkJXSwKKwkJIyBNYXRjaCAiRSIgYXMgb3B0aW9uYWwgc2luY2Ug aXQgaXMgYWRkZWQgb24gTE9DQVRJT04gd2hlbiBydW5uaW5nIG9uCisJCSMgV2luZG93cy4KKwkJ bGlrZSA9PiBxci9eCisJCQlcblxRQ1JFQVRFIFRBQkxFU1BBQ0UgdGJsMiBPV05FUiB0YXAgTE9D QVRJT04gXEUoPzpFKT9cUSckdGFibGVzcGFjZTInO1xFCisJCQlcblxRQUxURVIgVEFCTEVTUEFD RSB0YmwyIFNFVCAoc2VxX3BhZ2VfY29zdD0xLjApO1xFCisJCS94bSwKKwl9LAorCisJcmVzdG9y ZV9ncmFudHMgPT4geworCQlzZXR1cF9zcWwgPT4gIgorCQlDUkVBVEUgREFUQUJBU0UgdGFwZ3Jh bnRzZGI7CisJCUNSRUFURSBTQ0hFTUEgcHJpdmF0ZTsKKwkJQ1JFQVRFIFNFUVVFTkNFIHNlcmlh bCBTVEFSVCAxMDE7CisJCUNSRUFURSBGVU5DVElPTiBmbigpIFJFVFVSTlMgdm9pZCBBUyBcJFwk CisJCUJFR0lOCisJCUVORDsKKwkJXCRcJCBMQU5HVUFHRSBwbHBnc3FsOworCQlDUkVBVEUgUk9M RSBzdXBlcjsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQxOworCQlDUkVBVEUgUk9MRSBncmFudDI7CisJ CUNSRUFURSBST0xFIGdyYW50MzsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQ0OworCQlDUkVBVEUgUk9M RSBncmFudDU7CisJCUNSRUFURSBST0xFIGdyYW50NjsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQ3Owor CQlDUkVBVEUgUk9MRSBncmFudDg7CisKKwkJQ1JFQVRFIFRBQkxFIHQgKGlkIGludCk7CisJCUlO U0VSVCBJTlRPIHQgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKworCQlHUkFOVCBTRUxFQ1Qg T04gVEFCTEUgdCBUTyBncmFudDE7CisJCUdSQU5UIElOU0VSVCBPTiBUQUJMRSB0IFRPIGdyYW50 MjsKKwkJR1JBTlQgQUxMIFBSSVZJTEVHRVMgT04gVEFCTEUgdCB0byBncmFudDM7CisJCUdSQU5U IENPTk5FQ1QsIENSRUFURSBPTiBEQVRBQkFTRSB0YXBncmFudHNkYiBUTyBncmFudDQ7CisJCUdS QU5UIFVTQUdFLCBDUkVBVEUgT04gU0NIRU1BIHByaXZhdGUgVE8gZ3JhbnQ1OworCQlHUkFOVCBV U0FHRSwgU0VMRUNULCBVUERBVEUgT04gU0VRVUVOQ0Ugc2VyaWFsIFRPIGdyYW50NjsKKwkJR1JB TlQgc3VwZXIgVE8gZ3JhbnQ3OworCQlHUkFOVCBFWEVDVVRFIE9OIEZVTkNUSU9OIGZuKCkgVE8g Z3JhbnQ4OworCQkiLAorCQlkdW1wX2NtZCA9PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQknLS1m b3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL3Jlc3RvcmVf Z3JhbnRzIiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMn LAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRp ci9yZXN0b3JlX2dyYW50cy5zcWwiLAorCQkJIiR0ZW1wZGlyL3Jlc3RvcmVfZ3JhbnRzIiwKKwkJ XSwKKwkJbGlrZSA9PiBxci9eCisJCQlcblxRR1JBTlQgc3VwZXIgVE8gZ3JhbnQ3IFdJVEggSU5I RVJJVCBUUlVFIEdSQU5URUQgQllcRQorCQkJKC4qXG4pKgorCQkJXG5cUUdSQU5UIEFMTCBPTiBT Q0hFTUEgcHJpdmF0ZSBUTyBncmFudDU7XEUKKwkJCSguKlxuKSoKKwkJCVxuXFFHUkFOVCBBTEwg T04gRlVOQ1RJT04gcHVibGljLmZuKCkgVE8gZ3JhbnQ4O1xFCisJCQkoLipcbikqCisJCQlcblxR R1JBTlQgQUxMIE9OIFNFUVVFTkNFIHB1YmxpYy5zZXJpYWwgVE8gZ3JhbnQ2O1xFCisJCQkoLipc bikqCisJCQlcblxRR1JBTlQgU0VMRUNUIE9OIFRBQkxFIHB1YmxpYy50IFRPIGdyYW50MTtcRQor CQkJXG5cUUdSQU5UIElOU0VSVCBPTiBUQUJMRSBwdWJsaWMudCBUTyBncmFudDI7XEUKKwkJCVxu XFFHUkFOVCBBTEwgT04gVEFCTEUgcHVibGljLnQgVE8gZ3JhbnQzO1xFCisJCQkoLipcbikqCisJ CQlcblxRR1JBTlQgQ1JFQVRFLENPTk5FQ1QgT04gREFUQUJBU0UgdGFwZ3JhbnRzZGIgVE8gZ3Jh bnQ0O1xFCisJCS94bSwKKwl9LAorCisJZXhjbHVkaW5nX2RhdGFiYXNlcyA9PiB7CisJCXNldHVw X3NxbCA9PiAnQ1JFQVRFIERBVEFCQVNFIGRiMTsKKwkJXGMgZGIxCisJCUNSRUFURSBUQUJMRSB0 MSAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDEgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsK KwkJQ1JFQVRFIFRBQkxFIHQyIChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0MiBWQUxVRVMgKDEp LCAoMiksICgzKSwgKDQpOworCisJCUNSRUFURSBEQVRBQkFTRSBkYjI7CisJCVxjIGRiMgorCQlD UkVBVEUgVEFCTEUgdDMgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQzIFZBTFVFUyAoMSksICgy KSwgKDMpLCAoNCk7CisJCUNSRUFURSBUQUJMRSB0NCAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8g dDQgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKworCQlDUkVBVEUgREFUQUJBU0UgZGJleDM7 CisJCVxjIGRiZXgzCisJCUNSRUFURSBUQUJMRSB0NSAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8g dDUgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKwkJQ1JFQVRFIFRBQkxFIHQ2IChpZCBpbnQp OworCQlJTlNFUlQgSU5UTyB0NiBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCisJCUNSRUFU RSBEQVRBQkFTRSBkYmV4NDsKKwkJXGMgZGJleDQKKwkJQ1JFQVRFIFRBQkxFIHQ3IChpZCBpbnQp OworCQlJTlNFUlQgSU5UTyB0NyBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCQlDUkVBVEUg VEFCTEUgdDggKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQ4IFZBTFVFUyAoMSksICgyKSwgKDMp LCAoNCk7CisKKwkJQ1JFQVRFIERBVEFCQVNFIGRiNTsKKwkJXGMgZGI1CisJCUNSRUFURSBUQUJM RSB0OSAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDkgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0 KTsKKwkJQ1JFQVRFIFRBQkxFIHQxMCAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDEwIFZBTFVF UyAoMSksICgyKSwgKDMpLCAoNCk7CisJCScsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1w YWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRl bXBkaXIvZXhjbHVkaW5nX2RhdGFiYXNlcyIsCisJCQknLS1leGNsdWRlLWRhdGFiYXNlJyA9PiAn ZGJleConLAorCQldLAorCQlyZXN0b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICctQycs CisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGly L2V4Y2x1ZGluZ19kYXRhYmFzZXMuc3FsIiwKKwkJCSctLWV4Y2x1ZGUtZGF0YWJhc2UnID0+ICdk YjUnLAorCQkJIiR0ZW1wZGlyL2V4Y2x1ZGluZ19kYXRhYmFzZXMiLAorCQldLAorCQlsaWtlID0+ IHFyL14KKwkJCVxuXFFDUkVBVEUgREFUQUJBU0UgZGIxXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFD UkVBVEUgVEFCTEUgcHVibGljLnQxIChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJM RSBwdWJsaWMudDIgKFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIERBVEFCQVNFIGRiMlxF CisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50MyAoXEUKKwkJCSguKlxu KSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQ0ICgveG0sCisJCXVubGlrZSA9PiBxci9e CisJCQlcblxRQ1JFQVRFIERBVEFCQVNFIGRiM1xFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRF IFRBQkxFIHB1YmxpYy50NSAoXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVi bGljLnQ2IChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBEQVRBQkFTRSBkYjRcRQorCQkJ KC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDcgKFxFCisJCQkoLipcbikqCisJ CQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50OCAoXEUKKwkJCVxuXFFDUkVBVEUgREFUQUJBU0Ug ZGI1XEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQ5IChcRQorCQkJ KC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDEwIChcRQorCQkveG0sCisJfSwK KworCWZvcm1hdF9kaXJlY3RvcnkgPT4geworCQlzZXR1cF9zcWwgPT4gIkNSRUFURSBUQUJMRSBm b3JtYXRfZGlyZWN0b3J5KGEgaW50LCBiIGJvb2xlYW4sIGMgdGV4dCk7CisJCUlOU0VSVCBJTlRP IGZvcm1hdF9kaXJlY3RvcnkgVkFMVUVTICgxLCB0cnVlLCAnbmFtZTEnKSwgKDIsIGZhbHNlLCAn bmFtZTInKTsiLAorCQlkdW1wX2NtZCA9PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQknLS1mb3Jt YXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Zvcm1hdF9kaXJl Y3RvcnkiLAorCQldLAorCQlyZXN0b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICctQycs CisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGly L2Zvcm1hdF9kaXJlY3Rvcnkuc3FsIiwKKwkJCSIkdGVtcGRpci9mb3JtYXRfZGlyZWN0b3J5IiwK KwkJXSwKKwkJbGlrZSA9PiBxci9eXG5cUUNPUFkgcHVibGljLmZvcm1hdF9kaXJlY3RvcnkgKGEs IGIsIGMpIEZST00gc3RkaW47L3htCisJfSwKKworCWZvcm1hdF90YXIgPT4geworCQlzZXR1cF9z cWwgPT4gIkNSRUFURSBUQUJMRSBmb3JtYXRfdGFyKGEgaW50LCBiIGJvb2xlYW4sIGMgdGV4dCk7 CisJCUlOU0VSVCBJTlRPIGZvcm1hdF90YXIgVkFMVUVTICgxLCBmYWxzZSwgJ25hbWUzJyksICgy LCB0cnVlLCAnbmFtZTQnKTsiLAorCQlkdW1wX2NtZCA9PiBbCisJCQkncGdfZHVtcGFsbCcsCisJ CQknLS1mb3JtYXQnID0+ICd0YXInLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Zvcm1hdF90 YXIiLAorCQldLAorCQlyZXN0b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsCisJ CQknLS1mb3JtYXQnID0+ICd0YXInLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Zvcm1hdF90 YXIuc3FsIiwKKwkJCSIkdGVtcGRpci9mb3JtYXRfdGFyIiwKKwkJXSwKKwkJbGlrZSA9PiBxci9e XG5cUUNPUFkgcHVibGljLmZvcm1hdF90YXIgKGEsIGIsIGMpIEZST00gc3RkaW47L3htCisJfSwK KworCWZvcm1hdF9jdXN0b20gPT4geworCQlzZXR1cF9zcWwgPT4gIkNSRUFURSBUQUJMRSBmb3Jt YXRfY3VzdG9tKGEgaW50LCBiIGJvb2xlYW4sIGMgdGV4dCk7CisJCUlOU0VSVCBJTlRPIGZvcm1h dF9jdXN0b20gVkFMVUVTICgxLCBmYWxzZSwgJ25hbWU1JyksICgyLCB0cnVlLCAnbmFtZTYnKTsi LAorCQlkdW1wX2NtZCA9PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQknLS1mb3JtYXQnID0+ICdj dXN0b20nLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLAorCQldLAor CQlyZXN0b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsCisJCQknLS1mb3JtYXQn ID0+ICdjdXN0b20nLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20uc3Fs IiwKKwkJCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwKKwkJXSwKKwkJbGlrZSA9PiBxci9eIFxu XFFDT1BZIHB1YmxpYy5mb3JtYXRfY3VzdG9tIChhLCBiLCBjKSBGUk9NIHN0ZGluOy94bQorCX0s CisKKwlkdW1wX2dsb2JhbHNfb25seSA9PiB7CisJCXNldHVwX3NxbCA9PiAiQ1JFQVRFIFRBQkxF IGZvcm1hdF9kaXIoYSBpbnQsIGIgYm9vbGVhbiwgYyB0ZXh0KTsKKwkJSU5TRVJUIElOVE8gZm9y bWF0X2RpciBWQUxVRVMgKDEsIGZhbHNlLCAnbmFtZTUnKSwgKDIsIHRydWUsICduYW1lNicpOyIs CisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ2Rp cmVjdG9yeScsCisJCQknLS1nbG9iYWxzLW9ubHknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGly L2R1bXBfZ2xvYmFsc19vbmx5IiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jl c3RvcmUnLCAnLUMnLCAnLS1nbG9iYWxzLW9ubHknLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0 b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9kdW1wX2dsb2JhbHNfb25seS5zcWwiLAor CQkJIiR0ZW1wZGlyL2R1bXBfZ2xvYmFsc19vbmx5IiwKKwkJXSwKKwkJbGlrZSA9PiBxci8KKyAg ICAgICAgICAgIF5ccypcUUNSRUFURSBST0xFIGR1bXBhbGw7XEVccypcbgorCQkJL3htCisJfSwp OworCisjIEZpcnN0IGV4ZWN1dGUgdGhlIHNldHVwX3NxbAorZm9yZWFjaCBteSAkcnVuIChzb3J0 IGtleXMgJXBnZHVtcGFsbF9ydW5zKQoreworCWlmICgkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPntz ZXR1cF9zcWx9KQorCXsKKwkJJG5vZGUtPnNhZmVfcHNxbCgkcnVuX2RiLCAkcGdkdW1wYWxsX3J1 bnN7JHJ1bn0tPntzZXR1cF9zcWx9KTsKKwl9Cit9CisKKyMgRXhlY3V0ZSB0aGUgdGVzdHMKK2Zv cmVhY2ggbXkgJHJ1biAoc29ydCBrZXlzICVwZ2R1bXBhbGxfcnVucykKK3sKKwkjIENyZWF0ZSBh IG5ldyB0YXJnZXQgY2x1c3RlciB0byBwZ19yZXN0b3JlIGVhY2ggdGVzdCBjYXNlIHJ1biBzbyB0 aGF0IHdlCisJIyBkb24ndCBuZWVkIHRvIHRha2UgY2FyZSBvZiB0aGUgY2xlYW51cCBmcm9tIHRo ZSB0YXJnZXQgY2x1c3RlciBhZnRlciBlYWNoCisJIyBydW4uCisJbXkgJHRhcmdldF9ub2RlID0g UG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCJ0YXJnZXRfJHJ1biIpOworCSR0YXJnZXRf bm9kZS0+aW5pdDsKKwkkdGFyZ2V0X25vZGUtPnN0YXJ0OworCisJIyBEdW1wYWxsIGZyb20gbm9k ZSBjbHVzdGVyLgorCSRub2RlLT5jb21tYW5kX29rKFxAeyAkcGdkdW1wYWxsX3J1bnN7JHJ1bn0t PntkdW1wX2NtZH0gfSwKKwkJIiRydW46IHBnX2R1bXBhbGwgcnVucyIpOworCisJIyBSZXN0b3Jl IHRoZSBkdW1wIG9uICJ0YXJnZXRfbm9kZSIgY2x1c3Rlci4KKwlteSBAcmVzdG9yZV9jbWQgPSAo CisJCUB7ICRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e3Jlc3RvcmVfY21kfSB9LAorCQknLS1ob3N0 JywgJHRhcmdldF9ub2RlLT5ob3N0LCAnLS1wb3J0JywgJHRhcmdldF9ub2RlLT5wb3J0KTsKKwor CW15ICgkc3Rkb3V0LCAkc3RkZXJyKSA9IHJ1bl9jb21tYW5kKFxAcmVzdG9yZV9jbWQpOworCisJ IyBwZ19yZXN0b3JlIC0tZmlsZSBvdXRwdXQgZmlsZS4KKwlteSAkb3V0cHV0X2ZpbGUgPSBzbHVy cF9maWxlKCIkdGVtcGRpci8ke3J1bn0uc3FsIik7CisKKwlpZiAoICAgISgkcGdkdW1wYWxsX3J1 bnN7JHJ1bn0tPntsaWtlfSkKKwkJJiYgISgkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPnt1bmxpa2V9 KSkKKwl7CisJCWRpZSAibWlzc2luZyBcImxpa2VcIiBvciBcInVubGlrZVwiIGluIHRlc3QgXCIk cnVuXCIiOworCX0KKworCWlmICgkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPntsaWtlfSkKKwl7CisJ CWxpa2UoJG91dHB1dF9maWxlLCAkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPntsaWtlfSwgInNob3Vs ZCBkdW1wICRydW4iKTsKKwl9CisKKwlpZiAoJHBnZHVtcGFsbF9ydW5zeyRydW59LT57dW5saWtl fSkKKwl7CisJCXVubGlrZSgKKwkJCSRvdXRwdXRfZmlsZSwKKwkJCSRwZ2R1bXBhbGxfcnVuc3sk cnVufS0+e3VubGlrZX0sCisJCQkic2hvdWxkIG5vdCBkdW1wICRydW4iKTsKKwl9Cit9CisKKyMg U29tZSBuZWdhdGl2ZSB0ZXN0IGNhc2Ugd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwgYW5kIHJlc3Rv cmUgdXNpbmcgcGdfcmVzdG9yZQorIyB0ZXN0IGNhc2UgMTogd2hlbiAtQyBpcyBub3QgdXNlZCBp biBwZ19yZXN0b3JlIHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsCiskbm9kZS0+Y29tbWFuZF9mYWls c19saWtlKAorCVsKKwkJJ3BnX3Jlc3RvcmUnLAorCQkiJHRlbXBkaXIvZm9ybWF0X2N1c3RvbSIs CisJCSctLWZvcm1hdCcgPT4gJ2N1c3RvbScsCisJCSctLWZpbGUnID0+ICIkdGVtcGRpci9lcnJv cl90ZXN0LnNxbCIsCisJXSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb24gLUNcLy0t Y3JlYXRlIG11c3QgYmUgc3BlY2lmaWVkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRl ZCBieSBwZ19kdW1wYWxsXEUvLAorCSdXaGVuIC1DIGlzIG5vdCB1c2VkIGluIHBnX3Jlc3RvcmUg d2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwnKTsKKworIyB0ZXN0IGNhc2UgMjogV2hlbiAtLWxpc3Qg b3B0aW9uIGlzIHVzZWQgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwKKyRub2RlLT5jb21tYW5kX2Zh aWxzX2xpa2UoCisJWworCQkncGdfcmVzdG9yZScsCisJCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9t IiwgJy1DJywKKwkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJJy0tbGlzdCcsCisJCSctLWZp bGUnID0+ICIkdGVtcGRpci9lcnJvcl90ZXN0LnNxbCIsCisJXSwKKwlxci9cUXBnX3Jlc3RvcmU6 IGVycm9yOiBvcHRpb24gLWxcLy0tbGlzdCBjYW5ub3QgYmUgdXNlZCB3aGVuIHJlc3RvcmluZyBh biBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbFxFLywKKwknV2hlbiAtLWxpc3QgaXMgdXNl ZCBpbiBwZ19yZXN0b3JlIHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsJyk7CisKKyMgdGVzdCBjYXNl IDM6IFdoZW4gbm9uLWV4aXN0IGRhdGFiYXNlIGlzIGdpdmVuIHdpdGggLWQgb3B0aW9uCiskbm9k ZS0+Y29tbWFuZF9mYWlsc19saWtlKAorCVsKKwkJJ3BnX3Jlc3RvcmUnLAorCQkiJHRlbXBkaXIv Zm9ybWF0X2N1c3RvbSIsICctQycsCisJCSctLWZvcm1hdCcgPT4gJ2N1c3RvbScsCisJCSctZCcg PT4gJ2RicHEnLAorCV0sCisJcXIvXFFGQVRBTDogIGRhdGFiYXNlICJkYnBxIiBkb2VzIG5vdCBl eGlzdFxFLywKKwknV2hlbiBub24tZXhpc3RlbnQgZGF0YWJhc2UgaXMgZ2l2ZW4gd2l0aCAtZCBv cHRpb24gaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbCcKKyk7CisKKyRub2Rl LT5zdG9wKCdmYXN0Jyk7CisKK2RvbmVfdGVzdGluZygpOwotLSAKMi40Ny4zCgo= --000000000000dcfd2106456b1fe3--