Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rSd3C-00Eto2-Q9 for pgsql-hackers@arkaria.postgresql.org; Wed, 24 Jan 2024 13:12:20 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rSd3B-004qmG-UG for pgsql-hackers@arkaria.postgresql.org; Wed, 24 Jan 2024 13:12:18 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rSd3A-004qm3-LB for pgsql-hackers@lists.postgresql.org; Wed, 24 Jan 2024 13:12:17 +0000 Received: from mail-pl1-x62f.google.com ([2607:f8b0:4864:20::62f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rSd37-0038Ai-6Q for pgsql-hackers@postgresql.org; Wed, 24 Jan 2024 13:12:15 +0000 Received: by mail-pl1-x62f.google.com with SMTP id d9443c01a7336-1d76943baafso18242355ad.2 for ; Wed, 24 Jan 2024 05:12:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706101932; x=1706706732; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=1ek/dAnWfcxqlALGqMBmu1NRcQMNd7T8arYcrbiXgu4=; b=blgcL5XDjD6uaTdzTIb6JAKtKaQJUkqLs2Ie3wgtz3T0kiaMMDliZc5lbVp35j7F6/ 03RjH9ALG6loFLDwcmUJDSYS8Ln88rAPmmzaC3JgE1RPmtJL5tXTy7KsufDS9+9PK8eJ UhIUOksgFoZMQMdlQlZj9/EW7F0ZrLg72KIzmFrgcslILrKoGQeqPIINLZ44Aj4OYYF9 uXsgbioWpW+weoIUndYwtO84/V+NtNnaA4td2vuAaubeQOFFtyZgalK1mJS63BwlDXmU ZYxbKxwFjdsSelMK9lKDZOmy6ROz5zOiWFSl8IKjQWfoNWpb5LCo1wJhdLFSnKCncWeJ zVoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706101932; x=1706706732; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=1ek/dAnWfcxqlALGqMBmu1NRcQMNd7T8arYcrbiXgu4=; b=FWdyWptDonu1OnizVKZZhfAGGPnbqjXh3wrxeq3TjWS6nH74HtYjuGwlaR12nWjMRD sFeWaUjkHcVkXW0jTcSzYtylQanT/TdNs5PxGO/MJchjFjfcDNh2xBYmVRbO3MABFKya dXVR7y+XDiIRp9LoXzazEiZn5YLVmFuWXibLk+WWaLywaF4D17WFAGDNFYfaZqJZ/OTe 4ZN4Oc4rjhlJiZk2Ad3x2ITLPdNk0FXpq2tSyatiMGrsS49tNE5hX3qgiuFIIy9oBaUC dR8K0JM/b8mCqLvKjIxSraMI2X35LPvMGTiLxknLd6NtENbD6o/CJDKvhMf4in2qEMsw niGQ== X-Gm-Message-State: AOJu0YyBxtbcOcASrfHTS2XN/dSjf+XiLgu0o1XAWYU6lehfyYej1uEI qCalQmHBn9skOmJcGr++k/mekzmwT+eW3iCIz2MFnN6sPfJiKjRn0JjH6OLiy/5fInsYxqUswRy NTG10y1+L7q11BneM4Ti3PIBRKp4= X-Google-Smtp-Source: AGHT+IGUpvU8CLU6l/N/dUZqf7whX3Yvd07BNOBng+ZC2EZ/CSMVoC/2o+WLZe+p6rGpQH1QFhJsu46jFP+pz+Kpois= X-Received: by 2002:a17:90a:e557:b0:28e:3817:5844 with SMTP id ei23-20020a17090ae55700b0028e38175844mr3525867pjb.42.1706101931616; Wed, 24 Jan 2024 05:12:11 -0800 (PST) MIME-Version: 1.0 References: <202401181711.qxjxpnl3ohnw@alvherre.pgsql> <202401221619.ragf2vnbyopl@alvherre.pgsql> In-Reply-To: From: Amit Langote Date: Wed, 24 Jan 2024 22:11:54 +0900 Message-ID: Subject: Re: remaining sql/json patches To: Alvaro Herrera Cc: Andres Freund , Erik Rijkers , jian he , Andrew Dunstan , PostgreSQL-development Content-Type: multipart/mixed; boundary="00000000000096e04e060fb0cf2d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000096e04e060fb0cf2d Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Jan 23, 2024 at 10:46=E2=80=AFPM Amit Langote wrote: > On Tue, Jan 23, 2024 at 1:19=E2=80=AFAM Alvaro Herrera wrote: > > On 2024-Jan-18, Alvaro Herrera wrote: > > > > commands/explain.c (Hmm, I think this is a preexisting bug actually= ) > > > > > > > > 3893 18 : case T_TableFuncScan: > > > > 3894 18 : Assert(rte->rtekind =3D=3D RTE_T= ABLEFUNC); > > > > 3895 18 : if (rte->tablefunc) > > > > 3896 0 : if (rte->tablefunc->functype= =3D=3D TFT_XMLTABLE) > > > > 3897 0 : objectname =3D "xmltable= "; > > > > 3898 : else /* Must be T= FT_JSON_TABLE */ > > > > 3899 0 : objectname =3D "json_tab= le"; > > > > 3900 : else > > > > 3901 18 : objectname =3D NULL; > > > > 3902 18 : objecttag =3D "Table Function Na= me"; > > > > 3903 18 : break; > > > > > > Indeed > > > > I was completely wrong about this, and in order to gain coverage the > > only thing we needed was to add an EXPLAIN that uses the JSON format. > > I did that just now. I think your addition here works just fine. > > I think we'd still need your RangeTblFunc.tablefunc_name in order for > the new code (with JSON_TABLE) to be able to set objectname to either > "XMLTABLE" or "JSON_TABLE", no? > > As you pointed out, rte->tablefunc is always NULL in > ExplainTargetRel() due to setrefs.c setting it to NULL, so the > JSON_TABLE additions to explain.c in my patch as they were won't work. > I've included your patch in the attached set and adjusted the > JSON_TABLE patch to set tablefunc_name in the parser. > > I had intended to push 0001-0004 today, but held off to add a > SQL-callable testing function for the changes in 0002. On that note, > I'm now not so sure about committing jsonpath_exec.c functions > JsonPathExists/Query/Value() from their SQL/JSON counterparts, so > inclined to squash that one into the SQL/JSON query functions patch > from a testability standpoint. Pushed 0001-0003 for now. Rebased patches attached. I merged 0004 into the query functions patch after all. > I haven't looked at Jian He's comments yet. See below... On Tue, Jan 23, 2024 at 12:46=E2=80=AFAM jian he wrote: > On Mon, Jan 22, 2024 at 10:28=E2=80=AFPM Amit Langote wrote: > > > > > based on v35. > > > Now I only applied from 0001 to 0007. > > > For {DEFAULT expression ON EMPTY} | {DEFAULT expression ON ERROR} > > > restrict DEFAULT expression be either Const node or FuncExpr node. > > > so these 3 SQL/JSON functions can be used in the btree expression ind= ex. > > > > I'm not really excited about adding these restrictions into the > > transformJsonFuncExpr() path. Index or any other code that wants to > > put restrictions already have those in place, no need to add them > > here. Moreover, by adding these restrictions, we might end up > > preventing users from doing useful things with this like specify > > column references. If there are semantic issues with allowing that, > > we should discuss them. > > > > after applying v36. > The following index creation and query operation works. I am not 100% > sure about these cases. > just want confirmation, sorry for bothering you.... No worries; I really appreciate your testing and suggestions. > drop table t; > create table t(a jsonb, b int); > insert into t select '{"hello":11}',1; > insert into t select '{"hello":12}',2; > CREATE INDEX t_idx2 ON t (JSON_query(a, '$.hello1' RETURNING int > default b + random() on error)); > CREATE INDEX t_idx3 ON t (JSON_query(a, '$.hello1' RETURNING int > default random()::int on error)); > create or replace function ret_setint() returns setof integer as > $$ > begin > -- perform pg_sleep(0.1); > return query execute 'select 1 union all select 1'; > end; > $$ > language plpgsql IMMUTABLE; > SELECT JSON_query(a, '$.hello1' RETURNING int default ret_setint() on > error) from t; > SELECT JSON_query(a, '$.hello1' RETURNING int default sum(b) over() > on error) from t; > SELECT JSON_query(a, '$.hello1' RETURNING int default sum(b) on > error) from t group by a; > > but the following cases will fail related to index and default expression= . > create table zz(a int, b int); > CREATE INDEX zz_idx1 ON zz ( (b + random()::int)); > create table ssss(a int, b int default ret_setint()); > create table ssss(a int, b int default sum(b) over()); I think your suggestion to add restrictions on what is allowed for DEFAULT makes sense. Also, immutability shouldn't be checked in transformJsonBehavior(), but in contain_mutable_functions() as done in the attached. Added some tests too. I still need to take a look at your other report regarding typmod but I'm out of energy today. --=20 Thanks, Amit Langote EDB: http://www.enterprisedb.com --00000000000096e04e060fb0cf2d Content-Type: application/octet-stream; name="v38-0002-Show-function-name-in-TableFuncScan.patch" Content-Disposition: attachment; filename="v38-0002-Show-function-name-in-TableFuncScan.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lrrneqv81 RnJvbSBkMmY5NjJmZmZlZjE1OWY3OTFkNzZmYWIxZmJlYTliNzM4MmJhMWJiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbHZhcm8gSGVycmVyYSA8YWx2aGVycmVAYWx2aC5uby1pcC5v cmc+CkRhdGU6IFR1ZSwgMjMgSmFuIDIwMjQgMTI6MTE6NDYgKzA5MDAKU3ViamVjdDogW1BBVENI IHYzOCAyLzNdIFNob3cgZnVuY3Rpb24gbmFtZSBpbiBUYWJsZUZ1bmNTY2FuCgpQcmV2aW91c2x5 IHdlIHdlcmUgb25seSBzaG93aW5nIHRoZSB1c2VyLXNwZWNpZmllZCBhbGlhcywgYnV0IHRoaXMg aXMKY2xlYXJseSBub3QgdGhlIGNvZGUncyBpbnRlbnQuCgpEaXNjdXNzaW9uOiBodHRwczovL3Bv c3Rnci5lcy9tLzIwMjQwMTE4MTcxMS5xeGp4cG5sM29obnclNDBhbHZoZXJyZS5wZ3NxbAotLS0K IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAgIHwgIDIgKy0KIHNyYy9iYWNrZW5k L25vZGVzL291dGZ1bmNzLmMgICAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1 bmNzLmMgICAgICAgfCAgMSArCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcmVsYXRpb24uYyB8 ICA0ICsrLS0KIHNyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCAgICAgIHwgIDEgKwogc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC94bWwub3V0ICAgfCAxNiArKysrKysrKy0tLS0tLS0tCiBz cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3htbF8xLm91dCB8IDE2ICsrKysrKysrLS0tLS0tLS0K IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQveG1sXzIub3V0IHwgMTYgKysrKysrKystLS0tLS0t LQogOCBmaWxlcyBjaGFuZ2VkLCAzMCBpbnNlcnRpb25zKCspLCAyNyBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9leHBsYWluLmMKaW5kZXggODQzNDcyZTZkZC4uYjMyMzBmMjk3YiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2V4cGxhaW4uYwpAQCAtMzg5Miw3ICszODkyLDcgQEAgRXhwbGFpblRhcmdldFJlbChQbGFu ICpwbGFuLCBJbmRleCBydGksIEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQlicmVhazsKIAkJY2FzZSBU X1RhYmxlRnVuY1NjYW46CiAJCQlBc3NlcnQocnRlLT5ydGVraW5kID09IFJURV9UQUJMRUZVTkMp OwotCQkJb2JqZWN0bmFtZSA9ICJ4bWx0YWJsZSI7CisJCQlvYmplY3RuYW1lID0gcnRlLT50YWJs ZWZ1bmNfbmFtZTsKIAkJCW9iamVjdHRhZyA9ICJUYWJsZSBGdW5jdGlvbiBOYW1lIjsKIAkJCWJy ZWFrOwogCQljYXNlIFRfVmFsdWVzU2NhbjoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVz L291dGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCmluZGV4IDI5NmJhODQ1 MTguLmI0MmRhYWJhNTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMK KysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYwpAQCAtNTMxLDYgKzUzMSw3IEBAIF9v dXRSYW5nZVRibEVudHJ5KFN0cmluZ0luZm8gc3RyLCBjb25zdCBSYW5nZVRibEVudHJ5ICpub2Rl KQogCQkJYnJlYWs7CiAJCWNhc2UgUlRFX1RBQkxFRlVOQzoKIAkJCVdSSVRFX05PREVfRklFTEQo dGFibGVmdW5jKTsKKwkJCVdSSVRFX1NUUklOR19GSUVMRCh0YWJsZWZ1bmNfbmFtZSk7CiAJCQli cmVhazsKIAkJY2FzZSBSVEVfVkFMVUVTOgogCQkJV1JJVEVfTk9ERV9GSUVMRCh2YWx1ZXNfbGlz dHMpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMgYi9zcmMvYmFj a2VuZC9ub2Rlcy9yZWFkZnVuY3MuYwppbmRleCAxNjI0YjM0NTgxLi45MjUxOTJjYjA3IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9yZWFkZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9u b2Rlcy9yZWFkZnVuY3MuYwpAQCAtNTI4LDYgKzUyOCw3IEBAIF9yZWFkUmFuZ2VUYmxFbnRyeSh2 b2lkKQogCQkJYnJlYWs7CiAJCWNhc2UgUlRFX1RBQkxFRlVOQzoKIAkJCVJFQURfTk9ERV9GSUVM RCh0YWJsZWZ1bmMpOworCQkJUkVBRF9TVFJJTkdfRklFTEQodGFibGVmdW5jX25hbWUpOwogCQkJ LyogVGhlIFJURSBtdXN0IGhhdmUgYSBjb3B5IG9mIHRoZSBjb2x1bW4gdHlwZSBpbmZvLCBpZiBh bnkgKi8KIAkJCWlmIChsb2NhbF9ub2RlLT50YWJsZWZ1bmMpCiAJCQl7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcmVsYXRpb24uYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9w YXJzZV9yZWxhdGlvbi5jCmluZGV4IDM0YTBlYzU5MDEuLjY1ZTU0YWJkZDEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9yZWxhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL3Bh cnNlci9wYXJzZV9yZWxhdGlvbi5jCkBAIC0yMDczLDE3ICsyMDczLDE3IEBAIGFkZFJhbmdlVGFi bGVFbnRyeUZvclRhYmxlRnVuYyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJQXNzZXJ0KGxpc3RfbGVu Z3RoKHRmLT5jb2x0eXBtb2RzKSA9PSBsaXN0X2xlbmd0aCh0Zi0+Y29sbmFtZXMpKTsKIAlBc3Nl cnQobGlzdF9sZW5ndGgodGYtPmNvbGNvbGxhdGlvbnMpID09IGxpc3RfbGVuZ3RoKHRmLT5jb2xu YW1lcykpOwogCi0JcmVmbmFtZSA9IGFsaWFzID8gYWxpYXMtPmFsaWFzbmFtZSA6IHBzdHJkdXAo InhtbHRhYmxlIik7Ci0KIAlydGUtPnJ0ZWtpbmQgPSBSVEVfVEFCTEVGVU5DOwogCXJ0ZS0+cmVs aWQgPSBJbnZhbGlkT2lkOwogCXJ0ZS0+c3VicXVlcnkgPSBOVUxMOwogCXJ0ZS0+dGFibGVmdW5j ID0gdGY7CisJcnRlLT50YWJsZWZ1bmNfbmFtZSA9IHBzdHJkdXAoIlhNTFRBQkxFIik7CiAJcnRl LT5jb2x0eXBlcyA9IHRmLT5jb2x0eXBlczsKIAlydGUtPmNvbHR5cG1vZHMgPSB0Zi0+Y29sdHlw bW9kczsKIAlydGUtPmNvbGNvbGxhdGlvbnMgPSB0Zi0+Y29sY29sbGF0aW9uczsKIAlydGUtPmFs aWFzID0gYWxpYXM7CiAKKwlyZWZuYW1lID0gYWxpYXMgPyBhbGlhcy0+YWxpYXNuYW1lIDogcHN0 cmR1cCgieG1sdGFibGUiKTsKIAllcmVmID0gYWxpYXMgPyBjb3B5T2JqZWN0KGFsaWFzKSA6IG1h a2VBbGlhcyhyZWZuYW1lLCBOSUwpOwogCW51bWFsaWFzZXMgPSBsaXN0X2xlbmd0aChlcmVmLT5j b2xuYW1lcyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCBi L3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAppbmRleCBiZmNkZTE2N2E2Li5kNDZkMjA4 ZTY5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKKysrIGIvc3Jj L2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCkBAIC0xMTQ0LDYgKzExNDQsNyBAQCB0eXBlZGVm IHN0cnVjdCBSYW5nZVRibEVudHJ5CiAJICogRmllbGRzIHZhbGlkIGZvciBhIFRhYmxlRnVuYyBS VEUgKGVsc2UgTlVMTCk6CiAJICovCiAJVGFibGVGdW5jICAqdGFibGVmdW5jOworCWNoYXIJICAg KnRhYmxlZnVuY19uYW1lOwogCiAJLyoKIAkgKiBGaWVsZHMgdmFsaWQgZm9yIGEgdmFsdWVzIFJU RSAoZWxzZSBOSUwpOgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC94bWwu b3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC94bWwub3V0CmluZGV4IDY1MDBjZmY4ODUu LjcwMzM1Yzc0ZGYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQveG1sLm91 dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3htbC5vdXQKQEAgLTEzNDMsMTEgKzEz NDMsMTEgQEAgQ1JFQVRFIE9SIFJFUExBQ0UgVklFVyBwdWJsaWMueG1sdGFibGV2aWV3MSBBUwog ICAgICAgICAgICBGUk9NIHhtbGRhdGEpIHgsCiAgICAgTEFURVJBTCBYTUxUQUJMRSgoJy9ST1dT L1JPVyc6OnRleHQpIFBBU1NJTkcgKHguZGF0YSkgQ09MVU1OUyBpZCBpbnRlZ2VyIFBBVEggKCdA aWQnOjp0ZXh0KSwgX2lkIEZPUiBPUkRJTkFMSVRZLCBjb3VudHJ5X25hbWUgdGV4dCBQQVRIICgn Q09VTlRSWV9OQU1FL3RleHQoKSc6OnRleHQpIE5PVCBOVUxMLCBjb3VudHJ5X2lkIHRleHQgUEFU SCAoJ0NPVU5UUllfSUQnOjp0ZXh0KSwgcmVnaW9uX2lkIGludGVnZXIgUEFUSCAoJ1JFR0lPTl9J RCc6OnRleHQpLCBzaXplIGRvdWJsZSBwcmVjaXNpb24gUEFUSCAoJ1NJWkUnOjp0ZXh0KSwgdW5p dCB0ZXh0IFBBVEggKCdTSVpFL0B1bml0Jzo6dGV4dCksIHByZW1pZXJfbmFtZSB0ZXh0IERFRkFV TFQgKCdub3Qgc3BlY2lmaWVkJzo6dGV4dCkgUEFUSCAoJ1BSRU1JRVJfTkFNRSc6OnRleHQpKQog RVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIHhtbHRhYmxldmlldzE7Ci0gICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KICBOZXN0ZWQgTG9vcAogICAgLT4gIFNlcSBTY2FuIG9uIHhtbGRhdGEK LSAgIC0+ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9uICJ4bWx0YWJsZSIKKyAgIC0+ICBUYWJsZSBG dW5jdGlvbiBTY2FuIG9uICJYTUxUQUJMRSIgInhtbHRhYmxlIgogKDMgcm93cykKIAogRVhQTEFJ TiAoQ09TVFMgT0ZGLCBWRVJCT1NFKSBTRUxFQ1QgKiBGUk9NIHhtbHRhYmxldmlldzE7CkBAIC0x MzU3LDcgKzEzNTcsNyBAQCBFWFBMQUlOIChDT1NUUyBPRkYsIFZFUkJPU0UpIFNFTEVDVCAqIEZS T00geG1sdGFibGV2aWV3MTsKICAgIE91dHB1dDogInhtbHRhYmxlIi5pZCwgInhtbHRhYmxlIi5f aWQsICJ4bWx0YWJsZSIuY291bnRyeV9uYW1lLCAieG1sdGFibGUiLmNvdW50cnlfaWQsICJ4bWx0 YWJsZSIucmVnaW9uX2lkLCAieG1sdGFibGUiLnNpemUsICJ4bWx0YWJsZSIudW5pdCwgInhtbHRh YmxlIi5wcmVtaWVyX25hbWUKICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMueG1sZGF0YQogICAg ICAgICAgT3V0cHV0OiB4bWxkYXRhLmRhdGEKLSAgIC0+ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9u ICJ4bWx0YWJsZSIKKyAgIC0+ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9uICJYTUxUQUJMRSIgInht bHRhYmxlIgogICAgICAgICAgT3V0cHV0OiAieG1sdGFibGUiLmlkLCAieG1sdGFibGUiLl9pZCwg InhtbHRhYmxlIi5jb3VudHJ5X25hbWUsICJ4bWx0YWJsZSIuY291bnRyeV9pZCwgInhtbHRhYmxl Ii5yZWdpb25faWQsICJ4bWx0YWJsZSIuc2l6ZSwgInhtbHRhYmxlIi51bml0LCAieG1sdGFibGUi LnByZW1pZXJfbmFtZQogICAgICAgICAgVGFibGUgRnVuY3Rpb24gQ2FsbDogWE1MVEFCTEUoKCcv Uk9XUy9ST1cnOjp0ZXh0KSBQQVNTSU5HICh4bWxkYXRhLmRhdGEpIENPTFVNTlMgaWQgaW50ZWdl ciBQQVRIICgnQGlkJzo6dGV4dCksIF9pZCBGT1IgT1JESU5BTElUWSwgY291bnRyeV9uYW1lIHRl eHQgUEFUSCAoJ0NPVU5UUllfTkFNRS90ZXh0KCknOjp0ZXh0KSBOT1QgTlVMTCwgY291bnRyeV9p ZCB0ZXh0IFBBVEggKCdDT1VOVFJZX0lEJzo6dGV4dCksIHJlZ2lvbl9pZCBpbnRlZ2VyIFBBVEgg KCdSRUdJT05fSUQnOjp0ZXh0KSwgc2l6ZSBkb3VibGUgcHJlY2lzaW9uIFBBVEggKCdTSVpFJzo6 dGV4dCksIHVuaXQgdGV4dCBQQVRIICgnU0laRS9AdW5pdCc6OnRleHQpLCBwcmVtaWVyX25hbWUg dGV4dCBERUZBVUxUICgnbm90IHNwZWNpZmllZCc6OnRleHQpIFBBVEggKCdQUkVNSUVSX05BTUUn Ojp0ZXh0KSkKICg3IHJvd3MpCkBAIC0xNTM2LDcgKzE1MzYsNyBAQCBTRUxFQ1QgIHhtbHRhYmxl LioKICAgIE91dHB1dDogInhtbHRhYmxlIi5pZCwgInhtbHRhYmxlIi5faWQsICJ4bWx0YWJsZSIu Y291bnRyeV9uYW1lLCAieG1sdGFibGUiLmNvdW50cnlfaWQsICJ4bWx0YWJsZSIucmVnaW9uX2lk LCAieG1sdGFibGUiLnNpemUsICJ4bWx0YWJsZSIudW5pdCwgInhtbHRhYmxlIi5wcmVtaWVyX25h bWUKICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMueG1sZGF0YQogICAgICAgICAgT3V0cHV0OiB4 bWxkYXRhLmRhdGEKLSAgIC0+ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9uICJ4bWx0YWJsZSIKKyAg IC0+ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9uICJYTUxUQUJMRSIgInhtbHRhYmxlIgogICAgICAg ICAgT3V0cHV0OiAieG1sdGFibGUiLmlkLCAieG1sdGFibGUiLl9pZCwgInhtbHRhYmxlIi5jb3Vu dHJ5X25hbWUsICJ4bWx0YWJsZSIuY291bnRyeV9pZCwgInhtbHRhYmxlIi5yZWdpb25faWQsICJ4 bWx0YWJsZSIuc2l6ZSwgInhtbHRhYmxlIi51bml0LCAieG1sdGFibGUiLnByZW1pZXJfbmFtZQog ICAgICAgICAgVGFibGUgRnVuY3Rpb24gQ2FsbDogWE1MVEFCTEUoKCcvUk9XUy9ST1cnOjp0ZXh0 KSBQQVNTSU5HICh4bWxkYXRhLmRhdGEpIENPTFVNTlMgaWQgaW50ZWdlciBQQVRIICgnQGlkJzo6 dGV4dCksIF9pZCBGT1IgT1JESU5BTElUWSwgY291bnRyeV9uYW1lIHRleHQgUEFUSCAoJ0NPVU5U UllfTkFNRSc6OnRleHQpIE5PVCBOVUxMLCBjb3VudHJ5X2lkIHRleHQgUEFUSCAoJ0NPVU5UUllf SUQnOjp0ZXh0KSwgcmVnaW9uX2lkIGludGVnZXIgUEFUSCAoJ1JFR0lPTl9JRCc6OnRleHQpLCBz aXplIGRvdWJsZSBwcmVjaXNpb24gUEFUSCAoJ1NJWkUnOjp0ZXh0KSwgdW5pdCB0ZXh0IFBBVEgg KCdTSVpFL0B1bml0Jzo6dGV4dCksIHByZW1pZXJfbmFtZSB0ZXh0IERFRkFVTFQgKCdub3Qgc3Bl Y2lmaWVkJzo6dGV4dCkgUEFUSCAoJ1BSRU1JRVJfTkFNRSc6OnRleHQpKQogKDcgcm93cykKQEAg LTE1NTYsNyArMTU1Niw3IEBAIFNFTEVDVCBmLiogRlJPTSB4bWxkYXRhLCBMQVRFUkFMIHhtbHRh YmxlKCcvUk9XUy9ST1dbQ09VTlRSWV9OQU1FPSJKYXBhbiIgb3IgQ09VCiAgICBPdXRwdXQ6IGYu IkNPVU5UUllfTkFNRSIsIGYuIlJFR0lPTl9JRCIKICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu eG1sZGF0YQogICAgICAgICAgT3V0cHV0OiB4bWxkYXRhLmRhdGEKLSAgIC0+ICBUYWJsZSBGdW5j dGlvbiBTY2FuIG9uICJ4bWx0YWJsZSIgZgorICAgLT4gIFRhYmxlIEZ1bmN0aW9uIFNjYW4gb24g IlhNTFRBQkxFIiBmCiAgICAgICAgICBPdXRwdXQ6IGYuIkNPVU5UUllfTkFNRSIsIGYuIlJFR0lP Tl9JRCIKICAgICAgICAgIFRhYmxlIEZ1bmN0aW9uIENhbGw6IFhNTFRBQkxFKCgnL1JPV1MvUk9X W0NPVU5UUllfTkFNRT0iSmFwYW4iIG9yIENPVU5UUllfTkFNRT0iSW5kaWEiXSc6OnRleHQpIFBB U1NJTkcgKHhtbGRhdGEuZGF0YSkgQ09MVU1OUyAiQ09VTlRSWV9OQU1FIiB0ZXh0LCAiUkVHSU9O X0lEIiBpbnRlZ2VyKQogICAgICAgICAgRmlsdGVyOiAoZi4iQ09VTlRSWV9OQU1FIiA9ICdKYXBh bic6OnRleHQpCkBAIC0xNTkxLDcgKzE1OTEsNyBAQCBTRUxFQ1QgZi4qIEZST00geG1sZGF0YSwg TEFURVJBTCB4bWx0YWJsZSgnL1JPV1MvUk9XW0NPVU5UUllfTkFNRT0iSmFwYW4iIG9yIENPVQog ICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJJbm5lciIsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiUGFyYWxsZWwgQXdhcmUiOiBmYWxz ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAg ICAiQXN5bmMgQ2FwYWJsZSI6IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKwotICAgICAgICAgICAiVGFibGUgRnVuY3Rpb24gTmFtZSI6ICJ4bWx0YWJs ZSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAiVGFibGUg RnVuY3Rpb24gTmFtZSI6ICJYTUxUQUJMRSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKwogICAgICAgICAgICAiQWxpYXMiOiAiZiIsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiT3V0cHV0IjogWyJmLlwi Q09VTlRSWV9OQU1FXCIiLCAiZi5cIlJFR0lPTl9JRFwiIl0sICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAg ICAgICAgICAiVGFibGUgRnVuY3Rpb24gQ2FsbCI6ICJYTUxUQUJMRSgoJy9ST1dTL1JPV1tDT1VO VFJZX05BTUU9XCJKYXBhblwiIG9yIENPVU5UUllfTkFNRT1cIkluZGlhXCJdJzo6dGV4dCkgUEFT U0lORyAoeG1sZGF0YS5kYXRhKSBDT0xVTU5TIFwiQ09VTlRSWV9OQU1FXCIgdGV4dCwgXCJSRUdJ T05fSURcIiBpbnRlZ2VyKSIsKwpAQCAtMTcwMCw3ICsxNzAwLDcgQEAgU0VMRUNUICB4bWx0YWJs ZS4qCiAgICBPdXRwdXQ6ICJ4bWx0YWJsZSIuaWQsICJ4bWx0YWJsZSIuX2lkLCAieG1sdGFibGUi LmNvdW50cnlfbmFtZSwgInhtbHRhYmxlIi5jb3VudHJ5X2lkLCAieG1sdGFibGUiLnJlZ2lvbl9p ZCwgInhtbHRhYmxlIi5zaXplLCAieG1sdGFibGUiLnVuaXQsICJ4bWx0YWJsZSIucHJlbWllcl9u YW1lCiAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLnhtbGRhdGEKICAgICAgICAgIE91dHB1dDog eG1sZGF0YS5kYXRhCi0gICAtPiAgVGFibGUgRnVuY3Rpb24gU2NhbiBvbiAieG1sdGFibGUiCisg ICAtPiAgVGFibGUgRnVuY3Rpb24gU2NhbiBvbiAiWE1MVEFCTEUiICJ4bWx0YWJsZSIKICAgICAg ICAgIE91dHB1dDogInhtbHRhYmxlIi5pZCwgInhtbHRhYmxlIi5faWQsICJ4bWx0YWJsZSIuY291 bnRyeV9uYW1lLCAieG1sdGFibGUiLmNvdW50cnlfaWQsICJ4bWx0YWJsZSIucmVnaW9uX2lkLCAi eG1sdGFibGUiLnNpemUsICJ4bWx0YWJsZSIudW5pdCwgInhtbHRhYmxlIi5wcmVtaWVyX25hbWUK ICAgICAgICAgIFRhYmxlIEZ1bmN0aW9uIENhbGw6IFhNTFRBQkxFKCgnL1JPV1MvUk9XJzo6dGV4 dCkgUEFTU0lORyAoeG1sZGF0YS5kYXRhKSBDT0xVTU5TIGlkIGludGVnZXIgUEFUSCAoJ0BpZCc6 OnRleHQpLCBfaWQgRk9SIE9SRElOQUxJVFksIGNvdW50cnlfbmFtZSB0ZXh0IFBBVEggKCdDT1VO VFJZX05BTUUnOjp0ZXh0KSBOT1QgTlVMTCwgY291bnRyeV9pZCB0ZXh0IFBBVEggKCdDT1VOVFJZ X0lEJzo6dGV4dCksIHJlZ2lvbl9pZCBpbnRlZ2VyIFBBVEggKCdSRUdJT05fSUQnOjp0ZXh0KSwg c2l6ZSBkb3VibGUgcHJlY2lzaW9uIFBBVEggKCdTSVpFJzo6dGV4dCksIHVuaXQgdGV4dCBQQVRI ICgnU0laRS9AdW5pdCc6OnRleHQpLCBwcmVtaWVyX25hbWUgdGV4dCBERUZBVUxUICgnbm90IHNw ZWNpZmllZCc6OnRleHQpIFBBVEggKCdQUkVNSUVSX05BTUUnOjp0ZXh0KSkKICAgICAgICAgIEZp bHRlcjogKCJ4bWx0YWJsZSIucmVnaW9uX2lkID0gMikKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQveG1sXzEub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC94bWxf MS5vdXQKaW5kZXggOTMyM2I4NGFlMi4uMDgxMjdkYjcyMCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC94bWxfMS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC94bWxfMS5vdXQKQEAgLTEwMDQsMTEgKzEwMDQsMTEgQEAgQ1JFQVRFIE9SIFJFUExBQ0UgVklF VyBwdWJsaWMueG1sdGFibGV2aWV3MSBBUwogICAgICAgICAgICBGUk9NIHhtbGRhdGEpIHgsCiAg ICAgTEFURVJBTCBYTUxUQUJMRSgoJy9ST1dTL1JPVyc6OnRleHQpIFBBU1NJTkcgKHguZGF0YSkg Q09MVU1OUyBpZCBpbnRlZ2VyIFBBVEggKCdAaWQnOjp0ZXh0KSwgX2lkIEZPUiBPUkRJTkFMSVRZ LCBjb3VudHJ5X25hbWUgdGV4dCBQQVRIICgnQ09VTlRSWV9OQU1FL3RleHQoKSc6OnRleHQpIE5P VCBOVUxMLCBjb3VudHJ5X2lkIHRleHQgUEFUSCAoJ0NPVU5UUllfSUQnOjp0ZXh0KSwgcmVnaW9u X2lkIGludGVnZXIgUEFUSCAoJ1JFR0lPTl9JRCc6OnRleHQpLCBzaXplIGRvdWJsZSBwcmVjaXNp b24gUEFUSCAoJ1NJWkUnOjp0ZXh0KSwgdW5pdCB0ZXh0IFBBVEggKCdTSVpFL0B1bml0Jzo6dGV4 dCksIHByZW1pZXJfbmFtZSB0ZXh0IERFRkFVTFQgKCdub3Qgc3BlY2lmaWVkJzo6dGV4dCkgUEFU SCAoJ1BSRU1JRVJfTkFNRSc6OnRleHQpKQogRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBG Uk9NIHhtbHRhYmxldmlldzE7Ci0gICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBOZXN0ZWQgTG9vcAog ICAgLT4gIFNlcSBTY2FuIG9uIHhtbGRhdGEKLSAgIC0+ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9u ICJ4bWx0YWJsZSIKKyAgIC0+ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9uICJYTUxUQUJMRSIgInht bHRhYmxlIgogKDMgcm93cykKIAogRVhQTEFJTiAoQ09TVFMgT0ZGLCBWRVJCT1NFKSBTRUxFQ1Qg KiBGUk9NIHhtbHRhYmxldmlldzE7CkBAIC0xMDE4LDcgKzEwMTgsNyBAQCBFWFBMQUlOIChDT1NU UyBPRkYsIFZFUkJPU0UpIFNFTEVDVCAqIEZST00geG1sdGFibGV2aWV3MTsKICAgIE91dHB1dDog InhtbHRhYmxlIi5pZCwgInhtbHRhYmxlIi5faWQsICJ4bWx0YWJsZSIuY291bnRyeV9uYW1lLCAi eG1sdGFibGUiLmNvdW50cnlfaWQsICJ4bWx0YWJsZSIucmVnaW9uX2lkLCAieG1sdGFibGUiLnNp emUsICJ4bWx0YWJsZSIudW5pdCwgInhtbHRhYmxlIi5wcmVtaWVyX25hbWUKICAgIC0+ICBTZXEg U2NhbiBvbiBwdWJsaWMueG1sZGF0YQogICAgICAgICAgT3V0cHV0OiB4bWxkYXRhLmRhdGEKLSAg IC0+ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9uICJ4bWx0YWJsZSIKKyAgIC0+ICBUYWJsZSBGdW5j dGlvbiBTY2FuIG9uICJYTUxUQUJMRSIgInhtbHRhYmxlIgogICAgICAgICAgT3V0cHV0OiAieG1s dGFibGUiLmlkLCAieG1sdGFibGUiLl9pZCwgInhtbHRhYmxlIi5jb3VudHJ5X25hbWUsICJ4bWx0 YWJsZSIuY291bnRyeV9pZCwgInhtbHRhYmxlIi5yZWdpb25faWQsICJ4bWx0YWJsZSIuc2l6ZSwg InhtbHRhYmxlIi51bml0LCAieG1sdGFibGUiLnByZW1pZXJfbmFtZQogICAgICAgICAgVGFibGUg RnVuY3Rpb24gQ2FsbDogWE1MVEFCTEUoKCcvUk9XUy9ST1cnOjp0ZXh0KSBQQVNTSU5HICh4bWxk YXRhLmRhdGEpIENPTFVNTlMgaWQgaW50ZWdlciBQQVRIICgnQGlkJzo6dGV4dCksIF9pZCBGT1Ig T1JESU5BTElUWSwgY291bnRyeV9uYW1lIHRleHQgUEFUSCAoJ0NPVU5UUllfTkFNRS90ZXh0KCkn Ojp0ZXh0KSBOT1QgTlVMTCwgY291bnRyeV9pZCB0ZXh0IFBBVEggKCdDT1VOVFJZX0lEJzo6dGV4 dCksIHJlZ2lvbl9pZCBpbnRlZ2VyIFBBVEggKCdSRUdJT05fSUQnOjp0ZXh0KSwgc2l6ZSBkb3Vi bGUgcHJlY2lzaW9uIFBBVEggKCdTSVpFJzo6dGV4dCksIHVuaXQgdGV4dCBQQVRIICgnU0laRS9A dW5pdCc6OnRleHQpLCBwcmVtaWVyX25hbWUgdGV4dCBERUZBVUxUICgnbm90IHNwZWNpZmllZCc6 OnRleHQpIFBBVEggKCdQUkVNSUVSX05BTUUnOjp0ZXh0KSkKICg3IHJvd3MpCkBAIC0xMTYyLDcg KzExNjIsNyBAQCBTRUxFQ1QgIHhtbHRhYmxlLioKICAgIE91dHB1dDogInhtbHRhYmxlIi5pZCwg InhtbHRhYmxlIi5faWQsICJ4bWx0YWJsZSIuY291bnRyeV9uYW1lLCAieG1sdGFibGUiLmNvdW50 cnlfaWQsICJ4bWx0YWJsZSIucmVnaW9uX2lkLCAieG1sdGFibGUiLnNpemUsICJ4bWx0YWJsZSIu dW5pdCwgInhtbHRhYmxlIi5wcmVtaWVyX25hbWUKICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu eG1sZGF0YQogICAgICAgICAgT3V0cHV0OiB4bWxkYXRhLmRhdGEKLSAgIC0+ICBUYWJsZSBGdW5j dGlvbiBTY2FuIG9uICJ4bWx0YWJsZSIKKyAgIC0+ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9uICJY TUxUQUJMRSIgInhtbHRhYmxlIgogICAgICAgICAgT3V0cHV0OiAieG1sdGFibGUiLmlkLCAieG1s dGFibGUiLl9pZCwgInhtbHRhYmxlIi5jb3VudHJ5X25hbWUsICJ4bWx0YWJsZSIuY291bnRyeV9p ZCwgInhtbHRhYmxlIi5yZWdpb25faWQsICJ4bWx0YWJsZSIuc2l6ZSwgInhtbHRhYmxlIi51bml0 LCAieG1sdGFibGUiLnByZW1pZXJfbmFtZQogICAgICAgICAgVGFibGUgRnVuY3Rpb24gQ2FsbDog WE1MVEFCTEUoKCcvUk9XUy9ST1cnOjp0ZXh0KSBQQVNTSU5HICh4bWxkYXRhLmRhdGEpIENPTFVN TlMgaWQgaW50ZWdlciBQQVRIICgnQGlkJzo6dGV4dCksIF9pZCBGT1IgT1JESU5BTElUWSwgY291 bnRyeV9uYW1lIHRleHQgUEFUSCAoJ0NPVU5UUllfTkFNRSc6OnRleHQpIE5PVCBOVUxMLCBjb3Vu dHJ5X2lkIHRleHQgUEFUSCAoJ0NPVU5UUllfSUQnOjp0ZXh0KSwgcmVnaW9uX2lkIGludGVnZXIg UEFUSCAoJ1JFR0lPTl9JRCc6OnRleHQpLCBzaXplIGRvdWJsZSBwcmVjaXNpb24gUEFUSCAoJ1NJ WkUnOjp0ZXh0KSwgdW5pdCB0ZXh0IFBBVEggKCdTSVpFL0B1bml0Jzo6dGV4dCksIHByZW1pZXJf bmFtZSB0ZXh0IERFRkFVTFQgKCdub3Qgc3BlY2lmaWVkJzo6dGV4dCkgUEFUSCAoJ1BSRU1JRVJf TkFNRSc6OnRleHQpKQogKDcgcm93cykKQEAgLTExODEsNyArMTE4MSw3IEBAIFNFTEVDVCBmLiog RlJPTSB4bWxkYXRhLCBMQVRFUkFMIHhtbHRhYmxlKCcvUk9XUy9ST1dbQ09VTlRSWV9OQU1FPSJK YXBhbiIgb3IgQ09VCiAgICBPdXRwdXQ6IGYuIkNPVU5UUllfTkFNRSIsIGYuIlJFR0lPTl9JRCIK ICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMueG1sZGF0YQogICAgICAgICAgT3V0cHV0OiB4bWxk YXRhLmRhdGEKLSAgIC0+ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9uICJ4bWx0YWJsZSIgZgorICAg LT4gIFRhYmxlIEZ1bmN0aW9uIFNjYW4gb24gIlhNTFRBQkxFIiBmCiAgICAgICAgICBPdXRwdXQ6 IGYuIkNPVU5UUllfTkFNRSIsIGYuIlJFR0lPTl9JRCIKICAgICAgICAgIFRhYmxlIEZ1bmN0aW9u IENhbGw6IFhNTFRBQkxFKCgnL1JPV1MvUk9XW0NPVU5UUllfTkFNRT0iSmFwYW4iIG9yIENPVU5U UllfTkFNRT0iSW5kaWEiXSc6OnRleHQpIFBBU1NJTkcgKHhtbGRhdGEuZGF0YSkgQ09MVU1OUyAi Q09VTlRSWV9OQU1FIiB0ZXh0LCAiUkVHSU9OX0lEIiBpbnRlZ2VyKQogICAgICAgICAgRmlsdGVy OiAoZi4iQ09VTlRSWV9OQU1FIiA9ICdKYXBhbic6OnRleHQpCkBAIC0xMjE2LDcgKzEyMTYsNyBA QCBTRUxFQ1QgZi4qIEZST00geG1sZGF0YSwgTEFURVJBTCB4bWx0YWJsZSgnL1JPV1MvUk9XW0NP VU5UUllfTkFNRT0iSmFwYW4iIG9yIENPVQogICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hp cCI6ICJJbm5lciIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAg ICAgICAiUGFyYWxsZWwgQXdhcmUiOiBmYWxzZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiQXN5bmMgQ2FwYWJsZSI6IGZhbHNlLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwotICAgICAgICAgICAiVGFi bGUgRnVuY3Rpb24gTmFtZSI6ICJ4bWx0YWJsZSIsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKworICAgICAgICAgICAiVGFibGUgRnVuY3Rpb24gTmFtZSI6ICJYTUxUQUJMRSIsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiQWxpYXMiOiAiZiIs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwog ICAgICAgICAgICAiT3V0cHV0IjogWyJmLlwiQ09VTlRSWV9OQU1FXCIiLCAiZi5cIlJFR0lPTl9J RFwiIl0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiVGFibGUgRnVuY3Rpb24gQ2FsbCI6 ICJYTUxUQUJMRSgoJy9ST1dTL1JPV1tDT1VOVFJZX05BTUU9XCJKYXBhblwiIG9yIENPVU5UUllf TkFNRT1cIkluZGlhXCJdJzo6dGV4dCkgUEFTU0lORyAoeG1sZGF0YS5kYXRhKSBDT0xVTU5TIFwi Q09VTlRSWV9OQU1FXCIgdGV4dCwgXCJSRUdJT05fSURcIiBpbnRlZ2VyKSIsKwpAQCAtMTMxOSw3 ICsxMzE5LDcgQEAgU0VMRUNUICB4bWx0YWJsZS4qCiAgICBPdXRwdXQ6ICJ4bWx0YWJsZSIuaWQs ICJ4bWx0YWJsZSIuX2lkLCAieG1sdGFibGUiLmNvdW50cnlfbmFtZSwgInhtbHRhYmxlIi5jb3Vu dHJ5X2lkLCAieG1sdGFibGUiLnJlZ2lvbl9pZCwgInhtbHRhYmxlIi5zaXplLCAieG1sdGFibGUi LnVuaXQsICJ4bWx0YWJsZSIucHJlbWllcl9uYW1lCiAgICAtPiAgU2VxIFNjYW4gb24gcHVibGlj LnhtbGRhdGEKICAgICAgICAgIE91dHB1dDogeG1sZGF0YS5kYXRhCi0gICAtPiAgVGFibGUgRnVu Y3Rpb24gU2NhbiBvbiAieG1sdGFibGUiCisgICAtPiAgVGFibGUgRnVuY3Rpb24gU2NhbiBvbiAi WE1MVEFCTEUiICJ4bWx0YWJsZSIKICAgICAgICAgIE91dHB1dDogInhtbHRhYmxlIi5pZCwgInht bHRhYmxlIi5faWQsICJ4bWx0YWJsZSIuY291bnRyeV9uYW1lLCAieG1sdGFibGUiLmNvdW50cnlf aWQsICJ4bWx0YWJsZSIucmVnaW9uX2lkLCAieG1sdGFibGUiLnNpemUsICJ4bWx0YWJsZSIudW5p dCwgInhtbHRhYmxlIi5wcmVtaWVyX25hbWUKICAgICAgICAgIFRhYmxlIEZ1bmN0aW9uIENhbGw6 IFhNTFRBQkxFKCgnL1JPV1MvUk9XJzo6dGV4dCkgUEFTU0lORyAoeG1sZGF0YS5kYXRhKSBDT0xV TU5TIGlkIGludGVnZXIgUEFUSCAoJ0BpZCc6OnRleHQpLCBfaWQgRk9SIE9SRElOQUxJVFksIGNv dW50cnlfbmFtZSB0ZXh0IFBBVEggKCdDT1VOVFJZX05BTUUnOjp0ZXh0KSBOT1QgTlVMTCwgY291 bnRyeV9pZCB0ZXh0IFBBVEggKCdDT1VOVFJZX0lEJzo6dGV4dCksIHJlZ2lvbl9pZCBpbnRlZ2Vy IFBBVEggKCdSRUdJT05fSUQnOjp0ZXh0KSwgc2l6ZSBkb3VibGUgcHJlY2lzaW9uIFBBVEggKCdT SVpFJzo6dGV4dCksIHVuaXQgdGV4dCBQQVRIICgnU0laRS9AdW5pdCc6OnRleHQpLCBwcmVtaWVy X25hbWUgdGV4dCBERUZBVUxUICgnbm90IHNwZWNpZmllZCc6OnRleHQpIFBBVEggKCdQUkVNSUVS X05BTUUnOjp0ZXh0KSkKICAgICAgICAgIEZpbHRlcjogKCJ4bWx0YWJsZSIucmVnaW9uX2lkID0g MikKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQveG1sXzIub3V0IGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC94bWxfMi5vdXQKaW5kZXggZTFkMTY1YzZjOS4uYzcyMGEw NWY1YSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC94bWxfMi5vdXQKKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC94bWxfMi5vdXQKQEAgLTEzMjMsMTEgKzEzMjMs MTEgQEAgQ1JFQVRFIE9SIFJFUExBQ0UgVklFVyBwdWJsaWMueG1sdGFibGV2aWV3MSBBUwogICAg ICAgICAgICBGUk9NIHhtbGRhdGEpIHgsCiAgICAgTEFURVJBTCBYTUxUQUJMRSgoJy9ST1dTL1JP Vyc6OnRleHQpIFBBU1NJTkcgKHguZGF0YSkgQ09MVU1OUyBpZCBpbnRlZ2VyIFBBVEggKCdAaWQn Ojp0ZXh0KSwgX2lkIEZPUiBPUkRJTkFMSVRZLCBjb3VudHJ5X25hbWUgdGV4dCBQQVRIICgnQ09V TlRSWV9OQU1FL3RleHQoKSc6OnRleHQpIE5PVCBOVUxMLCBjb3VudHJ5X2lkIHRleHQgUEFUSCAo J0NPVU5UUllfSUQnOjp0ZXh0KSwgcmVnaW9uX2lkIGludGVnZXIgUEFUSCAoJ1JFR0lPTl9JRCc6 OnRleHQpLCBzaXplIGRvdWJsZSBwcmVjaXNpb24gUEFUSCAoJ1NJWkUnOjp0ZXh0KSwgdW5pdCB0 ZXh0IFBBVEggKCdTSVpFL0B1bml0Jzo6dGV4dCksIHByZW1pZXJfbmFtZSB0ZXh0IERFRkFVTFQg KCdub3Qgc3BlY2lmaWVkJzo6dGV4dCkgUEFUSCAoJ1BSRU1JRVJfTkFNRSc6OnRleHQpKQogRVhQ TEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIHhtbHRhYmxldmlldzE7Ci0gICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KICBOZXN0ZWQgTG9vcAogICAgLT4gIFNlcSBTY2FuIG9uIHhtbGRhdGEKLSAg IC0+ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9uICJ4bWx0YWJsZSIKKyAgIC0+ICBUYWJsZSBGdW5j dGlvbiBTY2FuIG9uICJYTUxUQUJMRSIgInhtbHRhYmxlIgogKDMgcm93cykKIAogRVhQTEFJTiAo Q09TVFMgT0ZGLCBWRVJCT1NFKSBTRUxFQ1QgKiBGUk9NIHhtbHRhYmxldmlldzE7CkBAIC0xMzM3 LDcgKzEzMzcsNyBAQCBFWFBMQUlOIChDT1NUUyBPRkYsIFZFUkJPU0UpIFNFTEVDVCAqIEZST00g eG1sdGFibGV2aWV3MTsKICAgIE91dHB1dDogInhtbHRhYmxlIi5pZCwgInhtbHRhYmxlIi5faWQs ICJ4bWx0YWJsZSIuY291bnRyeV9uYW1lLCAieG1sdGFibGUiLmNvdW50cnlfaWQsICJ4bWx0YWJs ZSIucmVnaW9uX2lkLCAieG1sdGFibGUiLnNpemUsICJ4bWx0YWJsZSIudW5pdCwgInhtbHRhYmxl Ii5wcmVtaWVyX25hbWUKICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMueG1sZGF0YQogICAgICAg ICAgT3V0cHV0OiB4bWxkYXRhLmRhdGEKLSAgIC0+ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9uICJ4 bWx0YWJsZSIKKyAgIC0+ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9uICJYTUxUQUJMRSIgInhtbHRh YmxlIgogICAgICAgICAgT3V0cHV0OiAieG1sdGFibGUiLmlkLCAieG1sdGFibGUiLl9pZCwgInht bHRhYmxlIi5jb3VudHJ5X25hbWUsICJ4bWx0YWJsZSIuY291bnRyeV9pZCwgInhtbHRhYmxlIi5y ZWdpb25faWQsICJ4bWx0YWJsZSIuc2l6ZSwgInhtbHRhYmxlIi51bml0LCAieG1sdGFibGUiLnBy ZW1pZXJfbmFtZQogICAgICAgICAgVGFibGUgRnVuY3Rpb24gQ2FsbDogWE1MVEFCTEUoKCcvUk9X Uy9ST1cnOjp0ZXh0KSBQQVNTSU5HICh4bWxkYXRhLmRhdGEpIENPTFVNTlMgaWQgaW50ZWdlciBQ QVRIICgnQGlkJzo6dGV4dCksIF9pZCBGT1IgT1JESU5BTElUWSwgY291bnRyeV9uYW1lIHRleHQg UEFUSCAoJ0NPVU5UUllfTkFNRS90ZXh0KCknOjp0ZXh0KSBOT1QgTlVMTCwgY291bnRyeV9pZCB0 ZXh0IFBBVEggKCdDT1VOVFJZX0lEJzo6dGV4dCksIHJlZ2lvbl9pZCBpbnRlZ2VyIFBBVEggKCdS RUdJT05fSUQnOjp0ZXh0KSwgc2l6ZSBkb3VibGUgcHJlY2lzaW9uIFBBVEggKCdTSVpFJzo6dGV4 dCksIHVuaXQgdGV4dCBQQVRIICgnU0laRS9AdW5pdCc6OnRleHQpLCBwcmVtaWVyX25hbWUgdGV4 dCBERUZBVUxUICgnbm90IHNwZWNpZmllZCc6OnRleHQpIFBBVEggKCdQUkVNSUVSX05BTUUnOjp0 ZXh0KSkKICg3IHJvd3MpCkBAIC0xNTE2LDcgKzE1MTYsNyBAQCBTRUxFQ1QgIHhtbHRhYmxlLioK ICAgIE91dHB1dDogInhtbHRhYmxlIi5pZCwgInhtbHRhYmxlIi5faWQsICJ4bWx0YWJsZSIuY291 bnRyeV9uYW1lLCAieG1sdGFibGUiLmNvdW50cnlfaWQsICJ4bWx0YWJsZSIucmVnaW9uX2lkLCAi eG1sdGFibGUiLnNpemUsICJ4bWx0YWJsZSIudW5pdCwgInhtbHRhYmxlIi5wcmVtaWVyX25hbWUK ICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMueG1sZGF0YQogICAgICAgICAgT3V0cHV0OiB4bWxk YXRhLmRhdGEKLSAgIC0+ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9uICJ4bWx0YWJsZSIKKyAgIC0+ ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9uICJYTUxUQUJMRSIgInhtbHRhYmxlIgogICAgICAgICAg T3V0cHV0OiAieG1sdGFibGUiLmlkLCAieG1sdGFibGUiLl9pZCwgInhtbHRhYmxlIi5jb3VudHJ5 X25hbWUsICJ4bWx0YWJsZSIuY291bnRyeV9pZCwgInhtbHRhYmxlIi5yZWdpb25faWQsICJ4bWx0 YWJsZSIuc2l6ZSwgInhtbHRhYmxlIi51bml0LCAieG1sdGFibGUiLnByZW1pZXJfbmFtZQogICAg ICAgICAgVGFibGUgRnVuY3Rpb24gQ2FsbDogWE1MVEFCTEUoKCcvUk9XUy9ST1cnOjp0ZXh0KSBQ QVNTSU5HICh4bWxkYXRhLmRhdGEpIENPTFVNTlMgaWQgaW50ZWdlciBQQVRIICgnQGlkJzo6dGV4 dCksIF9pZCBGT1IgT1JESU5BTElUWSwgY291bnRyeV9uYW1lIHRleHQgUEFUSCAoJ0NPVU5UUllf TkFNRSc6OnRleHQpIE5PVCBOVUxMLCBjb3VudHJ5X2lkIHRleHQgUEFUSCAoJ0NPVU5UUllfSUQn Ojp0ZXh0KSwgcmVnaW9uX2lkIGludGVnZXIgUEFUSCAoJ1JFR0lPTl9JRCc6OnRleHQpLCBzaXpl IGRvdWJsZSBwcmVjaXNpb24gUEFUSCAoJ1NJWkUnOjp0ZXh0KSwgdW5pdCB0ZXh0IFBBVEggKCdT SVpFL0B1bml0Jzo6dGV4dCksIHByZW1pZXJfbmFtZSB0ZXh0IERFRkFVTFQgKCdub3Qgc3BlY2lm aWVkJzo6dGV4dCkgUEFUSCAoJ1BSRU1JRVJfTkFNRSc6OnRleHQpKQogKDcgcm93cykKQEAgLTE1 MzYsNyArMTUzNiw3IEBAIFNFTEVDVCBmLiogRlJPTSB4bWxkYXRhLCBMQVRFUkFMIHhtbHRhYmxl KCcvUk9XUy9ST1dbQ09VTlRSWV9OQU1FPSJKYXBhbiIgb3IgQ09VCiAgICBPdXRwdXQ6IGYuIkNP VU5UUllfTkFNRSIsIGYuIlJFR0lPTl9JRCIKICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMueG1s ZGF0YQogICAgICAgICAgT3V0cHV0OiB4bWxkYXRhLmRhdGEKLSAgIC0+ICBUYWJsZSBGdW5jdGlv biBTY2FuIG9uICJ4bWx0YWJsZSIgZgorICAgLT4gIFRhYmxlIEZ1bmN0aW9uIFNjYW4gb24gIlhN TFRBQkxFIiBmCiAgICAgICAgICBPdXRwdXQ6IGYuIkNPVU5UUllfTkFNRSIsIGYuIlJFR0lPTl9J RCIKICAgICAgICAgIFRhYmxlIEZ1bmN0aW9uIENhbGw6IFhNTFRBQkxFKCgnL1JPV1MvUk9XW0NP VU5UUllfTkFNRT0iSmFwYW4iIG9yIENPVU5UUllfTkFNRT0iSW5kaWEiXSc6OnRleHQpIFBBU1NJ TkcgKHhtbGRhdGEuZGF0YSkgQ09MVU1OUyAiQ09VTlRSWV9OQU1FIiB0ZXh0LCAiUkVHSU9OX0lE IiBpbnRlZ2VyKQogICAgICAgICAgRmlsdGVyOiAoZi4iQ09VTlRSWV9OQU1FIiA9ICdKYXBhbic6 OnRleHQpCkBAIC0xNTcxLDcgKzE1NzEsNyBAQCBTRUxFQ1QgZi4qIEZST00geG1sZGF0YSwgTEFU RVJBTCB4bWx0YWJsZSgnL1JPV1MvUk9XW0NPVU5UUllfTkFNRT0iSmFwYW4iIG9yIENPVQogICAg ICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJJbm5lciIsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiUGFyYWxsZWwgQXdhcmUiOiBmYWxzZSwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAi QXN5bmMgQ2FwYWJsZSI6IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKwotICAgICAgICAgICAiVGFibGUgRnVuY3Rpb24gTmFtZSI6ICJ4bWx0YWJsZSIs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAiVGFibGUgRnVu Y3Rpb24gTmFtZSI6ICJYTUxUQUJMRSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KwogICAgICAgICAgICAiQWxpYXMiOiAiZiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiT3V0cHV0IjogWyJmLlwiQ09V TlRSWV9OQU1FXCIiLCAiZi5cIlJFR0lPTl9JRFwiIl0sICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAg ICAgICAiVGFibGUgRnVuY3Rpb24gQ2FsbCI6ICJYTUxUQUJMRSgoJy9ST1dTL1JPV1tDT1VOVFJZ X05BTUU9XCJKYXBhblwiIG9yIENPVU5UUllfTkFNRT1cIkluZGlhXCJdJzo6dGV4dCkgUEFTU0lO RyAoeG1sZGF0YS5kYXRhKSBDT0xVTU5TIFwiQ09VTlRSWV9OQU1FXCIgdGV4dCwgXCJSRUdJT05f SURcIiBpbnRlZ2VyKSIsKwpAQCAtMTY4MCw3ICsxNjgwLDcgQEAgU0VMRUNUICB4bWx0YWJsZS4q CiAgICBPdXRwdXQ6ICJ4bWx0YWJsZSIuaWQsICJ4bWx0YWJsZSIuX2lkLCAieG1sdGFibGUiLmNv dW50cnlfbmFtZSwgInhtbHRhYmxlIi5jb3VudHJ5X2lkLCAieG1sdGFibGUiLnJlZ2lvbl9pZCwg InhtbHRhYmxlIi5zaXplLCAieG1sdGFibGUiLnVuaXQsICJ4bWx0YWJsZSIucHJlbWllcl9uYW1l CiAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLnhtbGRhdGEKICAgICAgICAgIE91dHB1dDogeG1s ZGF0YS5kYXRhCi0gICAtPiAgVGFibGUgRnVuY3Rpb24gU2NhbiBvbiAieG1sdGFibGUiCisgICAt PiAgVGFibGUgRnVuY3Rpb24gU2NhbiBvbiAiWE1MVEFCTEUiICJ4bWx0YWJsZSIKICAgICAgICAg IE91dHB1dDogInhtbHRhYmxlIi5pZCwgInhtbHRhYmxlIi5faWQsICJ4bWx0YWJsZSIuY291bnRy eV9uYW1lLCAieG1sdGFibGUiLmNvdW50cnlfaWQsICJ4bWx0YWJsZSIucmVnaW9uX2lkLCAieG1s dGFibGUiLnNpemUsICJ4bWx0YWJsZSIudW5pdCwgInhtbHRhYmxlIi5wcmVtaWVyX25hbWUKICAg ICAgICAgIFRhYmxlIEZ1bmN0aW9uIENhbGw6IFhNTFRBQkxFKCgnL1JPV1MvUk9XJzo6dGV4dCkg UEFTU0lORyAoeG1sZGF0YS5kYXRhKSBDT0xVTU5TIGlkIGludGVnZXIgUEFUSCAoJ0BpZCc6OnRl eHQpLCBfaWQgRk9SIE9SRElOQUxJVFksIGNvdW50cnlfbmFtZSB0ZXh0IFBBVEggKCdDT1VOVFJZ X05BTUUnOjp0ZXh0KSBOT1QgTlVMTCwgY291bnRyeV9pZCB0ZXh0IFBBVEggKCdDT1VOVFJZX0lE Jzo6dGV4dCksIHJlZ2lvbl9pZCBpbnRlZ2VyIFBBVEggKCdSRUdJT05fSUQnOjp0ZXh0KSwgc2l6 ZSBkb3VibGUgcHJlY2lzaW9uIFBBVEggKCdTSVpFJzo6dGV4dCksIHVuaXQgdGV4dCBQQVRIICgn U0laRS9AdW5pdCc6OnRleHQpLCBwcmVtaWVyX25hbWUgdGV4dCBERUZBVUxUICgnbm90IHNwZWNp ZmllZCc6OnRleHQpIFBBVEggKCdQUkVNSUVSX05BTUUnOjp0ZXh0KSkKICAgICAgICAgIEZpbHRl cjogKCJ4bWx0YWJsZSIucmVnaW9uX2lkID0gMikKLS0gCjIuMzUuMwoK --00000000000096e04e060fb0cf2d Content-Type: application/octet-stream; name="v38-0001-Add-SQL-JSON-query-functions.patch" Content-Disposition: attachment; filename="v38-0001-Add-SQL-JSON-query-functions.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lrrneqvc2 RnJvbSBjZGRmNDJmODg3MzIzZWNjMGM5YTFhYTQwNjA0NDdhZTM3NmE3ZGE4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgMTggSmFuIDIwMjQgMTc6NTc6MjAgKzA5MDAKU3ViamVjdDogW1BBVENIIHYz OCAxLzNdIEFkZCBTUUwvSlNPTiBxdWVyeSBmdW5jdGlvbnMKTUlNRS1WZXJzaW9uOiAxLjAKQ29u dGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNvbnRlbnQtVHJhbnNmZXItRW5j b2Rpbmc6IDhiaXQKClRoaXMgaW50cm9kdWNlcyB0aGUgZm9sbG93aW5nIFNRTC9KU09OIGZ1bmN0 aW9ucyBmb3IgcXVlcnlpbmcgSlNPTgpkYXRhIHVzaW5nIGpzb25wYXRoIGV4cHJlc3Npb25zOgoK SlNPTl9FWElTVFMoKQpKU09OX1FVRVJZKCkKSlNPTl9WQUxVRSgpCgpKU09OX0VYSVNUUygpIHRl c3RzIGlmIHRoZSBqc29ucGF0aCBleHByZXNzaW9uIGFwcGxpZWQgdG8gdGhlIGpzb25iCnZhbHVl IHlpZWxkcyBhbnkgdmFsdWVzLgoKSlNPTl9WQUxVRSgpIG11c3QgcmV0dXJuIGEgc2luZ2xlIHZh bHVlLCBhbmQgYW4gZXJyb3Igb2NjdXJzIGlmIGl0CnRyaWVzIHRvIHJldHVybiBtdWx0aXBsZSB2 YWx1ZXMuCgpKU09OX1FVRVJZKCkgbXVzdCByZXR1cm4gYSBqc29uIG9iamVjdCBvciBhcnJheSwg YW5kIHRoZXJlIGFyZQp2YXJpb3VzIFdSQVBQRVIgb3B0aW9ucyBmb3IgaGFuZGxpbmcgc2NhbGFy IG9yIG11bHRpLXZhbHVlIHJlc3VsdHMuCkJvdGggdGhlc2UgZnVuY3Rpb25zIGhhdmUgb3B0aW9u cyBmb3IgaGFuZGxpbmcgRU1QVFkgYW5kIEVSUk9SCmNvbmRpdGlvbnMuCgpBbGwgb2YgdGhlc2Ug ZnVuY3Rpb25zIG9ubHkgb3BlcmF0ZSBvbiBqc29uYi4gVGhlIHdvcmthcm91bmQgZm9yIG5vdwpp cyB0byBjYXN0IHRoZSBhcmd1bWVudCB0byBqc29uYi4KCkF1dGhvcjogTmlraXRhIEdsdWtob3Yg PG4uZ2x1aG92QHBvc3RncmVzcHJvLnJ1PgpBdXRob3I6IFRlb2RvciBTaWdhZXYgPHRlb2RvckBz aWdhZXYucnU+CkF1dGhvcjogT2xlZyBCYXJ0dW5vdiA8b2JhcnR1bm92QGdtYWlsLmNvbT4KQXV0 aG9yOiBBbGV4YW5kZXIgS29yb3Rrb3YgPGFla29yb3Rrb3ZAZ21haWwuY29tPgpBdXRob3I6IEFu ZHJldyBEdW5zdGFuIDxhbmRyZXdAZHVuc2xhbmUubmV0PgpBdXRob3I6IEFtaXQgTGFuZ290ZSA8 YW1pdGxhbmdvdGUwOUBnbWFpbC5jb20+CkF1dGhvcjogUGV0ZXIgRWlzZW50cmF1dCA8cGV0ZXJA ZWlzZW50cmF1dC5vcmc+CkF1dGhvcjogSmlhbiBIZSA8amlhbi51bml2ZXJzYWxpdHlAZ21haWwu Y29tPgoKUmV2aWV3ZXJzIGhhdmUgaW5jbHVkZWQgKGluIG5vIHBhcnRpY3VsYXIgb3JkZXIpIEFu ZHJlcyBGcmV1bmQsIEFsZXhhbmRlcgpLb3JvdGtvdiwgUGF2ZWwgU3RlaHVsZSwgQW5kcmV3IEFs c3VwLCBFcmlrIFJpamtlcnMsIFppaG9uZyBZdSwKSGltYW5zaHUgVXBhZGh5YXlhLCBEYW5pZWwg R3VzdGFmc3NvbiwgSnVzdGluIFByeXpieSwgw4FsdmFybyBIZXJyZXJhLApKaWFuIEhlLCBBbnRv biBBLiBNZWxuaWtvdiwgTmlraXRhIE1hbGFraG92LCBQZXRlciBFaXNlbnRyYXV0CgpEaXNjdXNz aW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2NkMGJiOTM1LTAxNTgtNzhhNy0wOGI1LTkwNDg4NmRl YWM0YkBwb3N0Z3Jlc3Byby5ydQpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLzIwMjIw NjE2MjMzMTMwLnJwYXJpdmFmaXB0NmRvajNAYWxhcDMuYW5hcmF6ZWwuZGUKRGlzY3Vzc2lvbjog aHR0cHM6Ly9wb3N0Z3IuZXMvbS9hYmQ5YjgzYi1hYTY2LWYyMzAtM2Q2ZC03MzQ4MTdmMDk5NWQl NDBwb3N0Z3Jlc3FsLm9yZwpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBK0hpd3FI Uk9wZjllNjQ0RDhCUnFZdmFBUG1nQlpWdXAteEtNRFBrLW5kNEVwZ3pId0BtYWlsLmdtYWlsLmNv bQpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBK0hpd3FFNFhUZGZiMW5XPU9qb3lf dFFTUmhZdC1xX2tiNmk1ZDR4Y0t5ckxDMU5iZ0BtYWlsLmdtYWlsLmNvbQotLS0KIGRvYy9zcmMv c2dtbC9mdW5jLnNnbWwgICAgICAgICAgICAgICAgICAgICAgICB8ICAxNzMgKysrCiBzcmMvYmFj a2VuZC9jYXRhbG9nL3NxbF9mZWF0dXJlcy50eHQgICAgICAgICAgfCAgIDEyICstCiBzcmMvYmFj a2VuZC9leGVjdXRvci9leGVjRXhwci5jICAgICAgICAgICAgICAgfCAgMzQ0ICsrKysrCiBzcmMv YmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jICAgICAgICAgfCAgMzcxICsrKysrLQog c3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMgICAgICAgICAgIHwgIDE0NCArKwog c3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF90eXBlcy5jICAgICAgICAgIHwgICAgMyArCiBz cmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYyAgICAgICAgICAgICAgICAgfCAgIDE4ICsKIHNy Yy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jICAgICAgICAgICAgICAgICB8ICAyMzMgKysrLQog c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyAgICAgICAgIHwgICAgMyArLQog c3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jICAgICAgICAgIHwgICAyMCArCiBz cmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55ICAgICAgICAgICAgICAgICAgICAgfCAgMTg4ICsrLQog c3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYyAgICAgICAgICAgICAgIHwgIDYyNSArKysr KysrKy0KIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYyAgICAgICAgICAgICB8ICAg MTUgKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdHRpbmcuYyAgICAgICAgICAgIHwgICA0 NCArCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYyAgICAgICAgICAgICAgICAgfCAgIDMx ICsKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYyAgICAgICAgICAgICB8ICAgNjIg Ky0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aC5jICAgICAgICAgICAgICB8ICAyNTkg KysrKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX2V4ZWMuYyAgICAgICAgIHwgIDMy MiArKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAgICAgICAgICAgIHwg IDEzNiArKwogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaCAgICAgICAgICAgICAgIHwg ICAyNCArLQogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgICAgICAgIHwg ICA4NyArKwogc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmggICAgICAgICAgICAgICAgIHwg ICAgMiArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggICAgICAgICAgICAgICAgfCAg IDQ3ICsKIHNyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAx NzcgKysrCiBzcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmggICAgICAgICAgICAgICAgICAgfCAg IDExICsKIHNyYy9pbmNsdWRlL3V0aWxzL2Zvcm1hdHRpbmcuaCAgICAgICAgICAgICAgICB8ICAg IDEgKwogc3JjL2luY2x1ZGUvdXRpbHMvanNvbmIuaCAgICAgICAgICAgICAgICAgICAgIHwgICAg MSArCiBzcmMvaW5jbHVkZS91dGlscy9qc29uZnVuY3MuaCAgICAgICAgICAgICAgICAgfCAgICA3 ICsKIHNyYy9pbmNsdWRlL3V0aWxzL2pzb25wYXRoLmggICAgICAgICAgICAgICAgICB8ICAgMjQg Kwogc3JjL2ludGVyZmFjZXMvZWNwZy9wcmVwcm9jL2VjcGcudHJhaWxlciAgICAgIHwgICAyOCAr CiAuLi4vcmVncmVzcy9leHBlY3RlZC9zcWxqc29uX3F1ZXJ5ZnVuY3Mub3V0ICAgfCAxMTcyICsr KysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlICAgICAg ICAgICAgfCAgICAyICstCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9zcWxqc29uX3F1ZXJ5ZnVuY3Mu c3FsICAgfCAgMzg2ICsrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAg ICAgICAgICAgIHwgICAxOCArCiAzNCBmaWxlcyBjaGFuZ2VkLCA0OTUyIGluc2VydGlvbnMoKyks IDM4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvc3FsanNvbl9xdWVyeWZ1bmNzLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL3NxbGpzb25fcXVlcnlmdW5jcy5zcWwKCmRpZmYgLS1naXQgYS9kb2Mvc3Jj L3NnbWwvZnVuYy5zZ21sIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAppbmRleCA1MDMwYTEwNDVm Li4yZmFhOWNiOGM3IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9mdW5jLnNnbWwKQEAgLTE1NDYxLDYgKzE1NDYxLDExIEBAIHRhYmxlMi1tYXBw aW5nCiAgICAgICB0aGUgU1FML0pTT04gcGF0aCBsYW5ndWFnZQogICAgICA8L3BhcmE+CiAgICAg PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgdGhlIFNRTC9K U09OIHF1ZXJ5IGZ1bmN0aW9ucworICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KICAgIDwv aXRlbWl6ZWRsaXN0PgogICA8L3BhcmE+CiAKQEAgLTE4MjE1LDYgKzE4MjIwLDE3NCBAQCAkLiog PyAoQCBsaWtlX3JlZ2V4ICJeXFxkKyQiKQogICAgIDwvcGFyYT4KICAgIDwvc2VjdDM+CiAgIDwv c2VjdDI+CisKKyAgIDxzZWN0MiBpZD0ic3FsanNvbi1xdWVyeS1mdW5jdGlvbnMiPgorICAgIDx0 aXRsZT5TUUwvSlNPTiBRdWVyeSBGdW5jdGlvbnM8L3RpdGxlPgorICA8cGFyYT4KKyAgIFNRTC9K U09OIGZ1bmN0aW9ucyA8bGl0ZXJhbD5KU09OX0VYSVNUUygpPC9saXRlcmFsPiwKKyAgIDxsaXRl cmFsPkpTT05fUVVFUlkoKTwvbGl0ZXJhbD4sIGFuZCA8bGl0ZXJhbD5KU09OX1ZBTFVFKCk8L2xp dGVyYWw+CisgICBkZXNjcmliZWQgaW4gPHhyZWYgbGlua2VuZD0iZnVuY3Rpb25zLXNxbGpzb24t cXVlcnlpbmciLz4gY2FuIGJlIHVzZWQKKyAgIHRvIHF1ZXJ5IEpTT04gZG9jdW1lbnQuICBFYWNo IG9mIHRoZXNlIGZ1bmN0aW9ucyBhcHBseSBhCisgICA8cmVwbGFjZWFibGU+cGF0aF9leHByZXNz aW9uPC9yZXBsYWNlYWJsZT4gKHRoZSBxdWVyeSkgdG8gYQorICAgPHJlcGxhY2VhYmxlPmNvbnRl eHRfaXRlbTwvcmVwbGFjZWFibGU+ICh0aGUgZG9jdW1lbnQpOyBzZWVuCisgICA8eHJlZiBsaW5r ZW5kPSJmdW5jdGlvbnMtc3FsanNvbi1wYXRoIi8+IGZvciBtb3JlIGRldGFpbHMgb24gd2hhdAor ICAgPHJlcGxhY2VhYmxlPnBhdGhfZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IGNhbiBjb250YWlu LgorICA8L3BhcmE+CisKKyAgPG5vdGU+CisgICA8cGFyYT4KKyAgICBTUUwvSlNPTiBxdWVyeSBm dW5jdGlvbnMgY3VycmVudGx5IG9ubHkgYWNjZXB0IHZhbHVlcyBvZiB0aGUKKyAgICA8dHlwZT5q c29uYjwvdHlwZT4gdHlwZSwgYmVjYXVzZSB0aGUgU1FML0pTT04gcGF0aCBsYW5ndWFnZSBvbmx5 CisgICAgc3VwcG9ydHMgdGhvc2UsIHNvIGl0IG1pZ2h0IGJlIG5lY2Vzc2FyeSB0byBjYXN0IHRo ZQorICAgIDxyZXBsYWNlYWJsZT5jb250ZXh0X2l0ZW08L3JlcGxhY2VhYmxlPiBhcmd1bWVudCBv ZiB0aGVzZSBmdW5jdGlvbnMgdG8KKyAgICA8dHlwZT5qc29uYjwvdHlwZT4uCisgICA8L3BhcmE+ CisgIDwvbm90ZT4KKworICA8dGFibGUgaWQ9ImZ1bmN0aW9ucy1zcWxqc29uLXF1ZXJ5aW5nIj4K KyAgIDx0aXRsZT5TUUwvSlNPTiBRdWVyeSBGdW5jdGlvbnM8L3RpdGxlPgorICAgPHRncm91cCBj b2xzPSIxIj4KKyAgICA8dGhlYWQ+CisgICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0iZnVu Y190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAgICAgICBGdW5j dGlvbiBzaWduYXR1cmUKKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIERl c2NyaXB0aW9uCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBFeGFtcGxl KHMpCisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisgICAgPC90aGVhZD4KKyAg ICA8dGJvZHk+CisgICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRy eSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAgICAgICA8aW5kZXh0ZXJtPjxwcmlt YXJ5Pmpzb25fZXhpc3RzPC9wcmltYXJ5PjwvaW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+ anNvbl9leGlzdHM8L2Z1bmN0aW9uPiAoCisgICAgICAgIDxyZXBsYWNlYWJsZT5jb250ZXh0X2l0 ZW08L3JlcGxhY2VhYmxlPiwgPHJlcGxhY2VhYmxlPnBhdGhfZXhwcmVzc2lvbjwvcmVwbGFjZWFi bGU+IDxvcHRpb25hbD4gPGxpdGVyYWw+UEFTU0lORzwvbGl0ZXJhbD4geyA8cmVwbGFjZWFibGU+ dmFsdWU8L3JlcGxhY2VhYmxlPiA8bGl0ZXJhbD5BUzwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxlPnZh cm5hbWU8L3JlcGxhY2VhYmxlPiB9IDxvcHRpb25hbD4sIC4uLjwvb3B0aW9uYWw+PC9vcHRpb25h bD4KKyAgICAgICAgPG9wdGlvbmFsPiB7IDxsaXRlcmFsPlRSVUU8L2xpdGVyYWw+IHwgPGxpdGVy YWw+RkFMU0U8L2xpdGVyYWw+IHw8bGl0ZXJhbD4gVU5LTk9XTjwvbGl0ZXJhbD4gfCA8bGl0ZXJh bD5FUlJPUjwvbGl0ZXJhbD4gfSA8bGl0ZXJhbD5PTiBFUlJPUjwvbGl0ZXJhbD4gPC9vcHRpb25h bD4pCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBSZXR1cm5zIHRydWUg aWYgdGhlIFNRTC9KU09OIDxyZXBsYWNlYWJsZT5wYXRoX2V4cHJlc3Npb248L3JlcGxhY2VhYmxl PgorICAgICAgICBhcHBsaWVkIHRvIHRoZSA8cmVwbGFjZWFibGU+Y29udGV4dF9pdGVtPC9yZXBs YWNlYWJsZT4gdXNpbmcgdGhlCisgICAgICAgIDxyZXBsYWNlYWJsZT52YWx1ZTwvcmVwbGFjZWFi bGU+cyB5aWVsZHMgYW55IGl0ZW1zLgorICAgICAgICBUaGUgPGxpdGVyYWw+T04gRVJST1I8L2xp dGVyYWw+IGNsYXVzZSBzcGVjaWZpZXMgdGhlIGJlaGF2aW9yIGlmCisgICAgICAgIGFuIGVycm9y IG9jY3VyczsgdGhlIGRlZmF1bHQgaXMgdG8gcmV0dXJuIHRoZSA8dHlwZT5ib29sZWFuPC90eXBl PgorICAgICAgICA8bGl0ZXJhbD5GQUxTRTwvbGl0ZXJhbD4gdmFsdWUuCisgICAgICAgIE5vdGUg dGhhdCBpZiB0aGUgPHJlcGxhY2VhYmxlPnBhdGhfZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+Cisg ICAgICAgIGlzIDxsaXRlcmFsPnN0cmljdDwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFsPk9OIEVSUk9S PC9saXRlcmFsPiBiZWhhdmlvcgorICAgICAgICBpcyA8bGl0ZXJhbD5PTiBFUlJPUjwvbGl0ZXJh bD4sIGFuIGVycm9yIGlzIGdlbmVyYXRlZCBpZiBpdCB5aWVsZHMgbm8KKyAgICAgICAgaXRlbXMu CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICA8bGl0ZXJhbD5qc29uX2V4 aXN0cyhqc29uYiAneyJrZXkxIjogWzEsMiwzXX0nLCAnc3RyaWN0ICQua2V5MVsqXSA/IChAID4g MiknKTwvbGl0ZXJhbD4KKyAgICAgICAgPHJldHVybnZhbHVlPnQ8L3JldHVybnZhbHVlPgorICAg ICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgPGxpdGVyYWw+anNvbl9leGlzdHMo anNvbmIgJ3siYSI6IFsxLDIsM119JywgJ2xheCAkLmFbNV0nIEVSUk9SIE9OIEVSUk9SKTwvbGl0 ZXJhbD4KKyAgICAgICAgPHJldHVybnZhbHVlPmY8L3JldHVybnZhbHVlPgorICAgICAgIDwvcGFy YT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgPGxpdGVyYWw+anNvbl9leGlzdHMoanNvbmIgJ3si YSI6IFsxLDIsM119JywgJ3N0cmljdCAkLmFbNV0nIEVSUk9SIE9OIEVSUk9SKTwvbGl0ZXJhbD4K KyAgICAgICAgPHJldHVybnZhbHVlPkVSUk9SOiAganNvbnBhdGggYXJyYXkgc3Vic2NyaXB0IGlz IG91dCBvZiBib3VuZHM8L3JldHVybnZhbHVlPgorICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAg IDwvcm93PgorICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnki PjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICAgPGluZGV4dGVybT48cHJpbWFy eT5qc29uX3F1ZXJ5PC9wcmltYXJ5PjwvaW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+anNv bl9xdWVyeTwvZnVuY3Rpb24+ICgKKyAgICAgICAgPHJlcGxhY2VhYmxlPmNvbnRleHRfaXRlbTwv cmVwbGFjZWFibGU+LCA8cmVwbGFjZWFibGU+cGF0aF9leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4g PG9wdGlvbmFsPiA8bGl0ZXJhbD5QQVNTSU5HPC9saXRlcmFsPiB7IDxyZXBsYWNlYWJsZT52YWx1 ZTwvcmVwbGFjZWFibGU+IDxsaXRlcmFsPkFTPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+dmFybmFt ZTwvcmVwbGFjZWFibGU+IH0gPG9wdGlvbmFsPiwgLi4uPC9vcHRpb25hbD48L29wdGlvbmFsPgor ICAgICAgICA8b3B0aW9uYWw+IDxsaXRlcmFsPlJFVFVSTklORzwvbGl0ZXJhbD4gPHJlcGxhY2Vh YmxlPmRhdGFfdHlwZTwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4gPGxpdGVyYWw+Rk9STUFUIEpT T048L2xpdGVyYWw+IDxvcHRpb25hbD4gPGxpdGVyYWw+RU5DT0RJTkcgVVRGODwvbGl0ZXJhbD4g PC9vcHRpb25hbD4gPC9vcHRpb25hbD4gPC9vcHRpb25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiB7 IDxsaXRlcmFsPldJVEhPVVQ8L2xpdGVyYWw+IHwgPGxpdGVyYWw+V0lUSDwvbGl0ZXJhbD4geyA8 bGl0ZXJhbD5DT05ESVRJT05BTDwvbGl0ZXJhbD4gfCA8b3B0aW9uYWw+PGxpdGVyYWw+VU5DT05E SVRJT05BTDwvbGl0ZXJhbD48L29wdGlvbmFsPiB9IH0gPG9wdGlvbmFsPiA8bGl0ZXJhbD5BUlJB WTwvbGl0ZXJhbD4gPC9vcHRpb25hbD4gPGxpdGVyYWw+V1JBUFBFUjwvbGl0ZXJhbD4gPC9vcHRp b25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiB7IDxsaXRlcmFsPktFRVA8L2xpdGVyYWw+IHwgPGxp dGVyYWw+T01JVDwvbGl0ZXJhbD4gfSA8bGl0ZXJhbD5RVU9URVM8L2xpdGVyYWw+IDxvcHRpb25h bD4gPGxpdGVyYWw+T04gU0NBTEFSIFNUUklORzwvbGl0ZXJhbD4gPC9vcHRpb25hbD4gPC9vcHRp b25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiB7IDxsaXRlcmFsPkVSUk9SPC9saXRlcmFsPiB8IDxs aXRlcmFsPk5VTEw8L2xpdGVyYWw+IHwgPGxpdGVyYWw+RU1QVFk8L2xpdGVyYWw+IHsgPG9wdGlv bmFsPiA8bGl0ZXJhbD5BUlJBWTwvbGl0ZXJhbD4gPC9vcHRpb25hbD4gfCA8bGl0ZXJhbD5PQkpF Q1Q8L2xpdGVyYWw+IH0gfCA8bGl0ZXJhbD5ERUZBVUxUPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+ ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IH0gPGxpdGVyYWw+T04gRU1QVFk8L2xpdGVyYWw+IDwv b3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4geyA8bGl0ZXJhbD5FUlJPUjwvbGl0ZXJhbD4g fCA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiB8IDxsaXRlcmFsPkVNUFRZPC9saXRlcmFsPiB7IDxv cHRpb25hbD4gPGxpdGVyYWw+QVJSQVk8L2xpdGVyYWw+IDwvb3B0aW9uYWw+IHwgPGxpdGVyYWw+ T0JKRUNUPC9saXRlcmFsPiB9IHwgPGxpdGVyYWw+REVGQVVMVDwvbGl0ZXJhbD4gPHJlcGxhY2Vh YmxlPmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiB9IDxsaXRlcmFsPk9OIEVSUk9SPC9saXRlcmFs PiA8L29wdGlvbmFsPikKKyAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUmV0 dXJucyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIHRoZQorICAgICAgICA8cmVwbGFjZWFibGU+cGF0 aF9leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gdG8gdGhlCisgICAgICAgIDxyZXBsYWNlYWJsZT5j b250ZXh0X2l0ZW08L3JlcGxhY2VhYmxlPiB1c2luZyB0aGUKKyAgICAgICAgPHJlcGxhY2VhYmxl PnZhbHVlPC9yZXBsYWNlYWJsZT5zLgorICAgICAgICBUaGlzIGZ1bmN0aW9uIG11c3QgcmV0dXJu IGEgSlNPTiBzdHJpbmcsIHNvIGlmIHRoZSBwYXRoIGV4cHJlc3Npb24KKyAgICAgICAgcmV0dXJu cyBtdWx0aXBsZSBTUUwvSlNPTiBpdGVtcywgeW91IG11c3Qgd3JhcCB0aGUgcmVzdWx0IHVzaW5n IHRoZQorICAgICAgICA8bGl0ZXJhbD5XSVRIIFdSQVBQRVI8L2xpdGVyYWw+IGNsYXVzZS4gSWYg dGhlIHdyYXBwZXIgaXMKKyAgICAgICAgPGxpdGVyYWw+VU5DT05ESVRJT05BTDwvbGl0ZXJhbD4s IGFuIGFycmF5IHdyYXBwZXIgd2lsbCBhbHdheXMKKyAgICAgICAgYmUgYXBwbGllZCwgZXZlbiBp ZiB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgYWxyZWFkeSBhIHNpbmdsZSBKU09OIG9iamVjdAorICAg ICAgICBvciBhbiBhcnJheSwgYnV0IGlmIGl0IGlzIDxsaXRlcmFsPkNPTkRJVElPTkFMPC9saXRl cmFsPiwgaXQgd2lsbCBub3QgYmUKKyAgICAgICAgYXBwbGllZCB0byBhIHNpbmdsZSBhcnJheSBv ciBvYmplY3QuIDxsaXRlcmFsPlVOQ09ORElUSU9OQUw8L2xpdGVyYWw+CisgICAgICAgIGlzIHRo ZSBkZWZhdWx0LiAgSWYgdGhlIHJlc3VsdCBpcyBhIHNjYWxhciBzdHJpbmcsIGJ5IGRlZmF1bHQg dGhlIHZhbHVlCisgICAgICAgIHJldHVybmVkIHdpbGwgaGF2ZSBzdXJyb3VuZGluZyBxdW90ZXMg bWFraW5nIGl0IGEgdmFsaWQgSlNPTiB2YWx1ZSwKKyAgICAgICAgd2hpY2ggY2FuIGJlIG1hZGUg ZXhwbGljaXQgYnkgc3BlY2lmeWluZyA8bGl0ZXJhbD5LRUVQIFFVT1RFUzwvbGl0ZXJhbD4uCisg ICAgICAgIENvbnZlcnNlbHksIHF1b3RlcyBjYW4gYmUgb21pdHRlZCBieSBzcGVjaWZ5aW5nIDxs aXRlcmFsPk9NSVQgUVVPVEVTPC9saXRlcmFsPi4KKyAgICAgICAgVGhlIDxsaXRlcmFsPlJFVFVS TklORzwvbGl0ZXJhbD4gY2xhdXNlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlCisgICAgICAg IDxyZXBsYWNlYWJsZT5kYXRhX3R5cGU8L3JlcGxhY2VhYmxlPiBvZiB0aGUgcmVzdWx0IHZhbHVl LiAgSXQgbXVzdAorICAgICAgICBiZSBhIHR5cGUgZm9yIHdoaWNoIHRoZXJlIGlzIGEgY2FzdCBm cm9tIDx0eXBlPnRleHQ8L3R5cGU+IHRvIHRoYXQgdHlwZS4KKyAgICAgICAgSWYgbm8gPGxpdGVy YWw+UkVUVVJOSU5HPC9saXRlcmFsPiBpcyBzcGNpZmllZCwgdGhlIHJldHVybmVkIHZhbHVlIHdp bGwKKyAgICAgICAgYmUgb2YgdHlwZSA8dHlwZT5qc29uYjwvdHlwZT4uCisgICAgICAgIFRoZSA8 bGl0ZXJhbD5PTiBFTVBUWTwvbGl0ZXJhbD4gY2xhdXNlIHNwZWNpZmllcyB0aGUgYmVoYXZpb3Ig aWYgdGhlCisgICAgICAgIDxyZXBsYWNlYWJsZT5wYXRoX2V4cHJlc3Npb248L3JlcGxhY2VhYmxl PiB5aWVsZHMgbm8gdmFsdWUgYXQgYWxsOyB0aGUKKyAgICAgICAgZGVmYXVsdCB3aGVuIDxsaXRl cmFsPk9OIEVNUFRZPC9saXRlcmFsPiBpcyBub3Qgc3BlY2lmaWVkIGlzIHRvIHJldHVybiBhCisg ICAgICAgIG51bGwgdmFsdWUuICBUaGUgPGxpdGVyYWw+T04gRVJST1I8L2xpdGVyYWw+IGNsYXVz ZSBzcGVjaWZpZXMgdGhlIGJlaGF2aW9yCisgICAgICAgIGlmIGFuIGVycm9yIG9jY3VycyBhcyBh IHJlc3VsdCBvZiA8dHlwZT5qc29ucGF0aDwvdHlwZT4gZXZhbHVhdGlvbgorICAgICAgICAoaW5j bHVkaW5nIGNhc3QgdG8gdGhlIG91dHB1dCB0eXBlKSBvciBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBv ZgorICAgICAgICA8bGl0ZXJhbD5PTiBFTVBUWTwvbGl0ZXJhbD4gYmVoYXZpb3IgKHRoYXQgd2Fz IGNhdXNlZCBieSBlbXB0eSByZXN1bHQgb2YKKyAgICAgICAgPHR5cGU+anNvbnBhdGg8L3R5cGU+ IGV2YWx1YXRpb24pOyB0aGUgZGVmYXVsdCB3aGVuCisgICAgICAgIDxsaXRlcmFsPk9OIEVSUk9S PC9saXRlcmFsPiBpcyBub3Qgc3BlY2lmaWVkIGlzIHRvIHJldHVybiBhIG51bGwgdmFsdWUuCisg ICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICA8bGl0ZXJhbD5qc29uX3F1ZXJ5 KGpzb25iICdbMSxbMiwzXSxudWxsXScsICdsYXggJFsqXVsxXScgV0lUSCBDT05ESVRJT05BTCBX UkFQUEVSKTwvbGl0ZXJhbD4KKyAgICAgICAgPHJldHVybnZhbHVlPlszXTwvcmV0dXJudmFsdWU+ CisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisgICAgIDxyb3c+CisgICAgICA8 ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUi PgorICAgICAgICA8aW5kZXh0ZXJtPjxwcmltYXJ5Pmpzb25fdmFsdWU8L3ByaW1hcnk+PC9pbmRl eHRlcm0+CisgICAgICAgIDxmdW5jdGlvbj5qc29uX3ZhbHVlPC9mdW5jdGlvbj4gKAorICAgICAg ICA8cmVwbGFjZWFibGU+Y29udGV4dF9pdGVtPC9yZXBsYWNlYWJsZT4sIDxyZXBsYWNlYWJsZT5w YXRoX2V4cHJlc3Npb248L3JlcGxhY2VhYmxlPgorICAgICAgICA8b3B0aW9uYWw+IDxsaXRlcmFs PlBBU1NJTkc8L2xpdGVyYWw+IHsgPHJlcGxhY2VhYmxlPnZhbHVlPC9yZXBsYWNlYWJsZT4gPGxp dGVyYWw+QVM8L2xpdGVyYWw+IDxyZXBsYWNlYWJsZT52YXJuYW1lPC9yZXBsYWNlYWJsZT4gfSA8 b3B0aW9uYWw+LCAuLi48L29wdGlvbmFsPjwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4g PGxpdGVyYWw+UkVUVVJOSU5HPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+ZGF0YV90eXBlPC9yZXBs YWNlYWJsZT4gPC9vcHRpb25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiB7IDxsaXRlcmFsPkVSUk9S PC9saXRlcmFsPiB8IDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+IHwgPGxpdGVyYWw+REVGQVVMVDwv bGl0ZXJhbD4gPHJlcGxhY2VhYmxlPmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiB9IDxsaXRlcmFs Pk9OIEVNUFRZPC9saXRlcmFsPiA8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsgPGxp dGVyYWw+RVJST1I8L2xpdGVyYWw+IHwgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4gfCA8bGl0ZXJh bD5ERUZBVUxUPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+ IH0gPGxpdGVyYWw+T04gRVJST1I8L2xpdGVyYWw+IDwvb3B0aW9uYWw+KQorICAgICAgIDwvcGFy YT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUmV0dXJucyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5n IHRoZQorICAgICAgICA8cmVwbGFjZWFibGU+cGF0aF9leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4g dG8gdGhlCisgICAgICAgIDxyZXBsYWNlYWJsZT5jb250ZXh0X2l0ZW08L3JlcGxhY2VhYmxlPiB1 c2luZyB0aGUKKyAgICAgICAgPGxpdGVyYWw+UEFTU0lORzwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxl PnZhbHVlPC9yZXBsYWNlYWJsZT5zLiBUaGUKKyAgICAgICAgZXh0cmFjdGVkIHZhbHVlIG11c3Qg YmUgYSBzaW5nbGUgPGFjcm9ueW0+U1FML0pTT048L2Fjcm9ueW0+IHNjYWxhcgorICAgICAgICBp dGVtLiBGb3IgcmVzdWx0cyB0aGF0IGFyZSBvYmplY3RzIG9yIGFycmF5cywgdXNlIHRoZQorICAg ICAgICA8ZnVuY3Rpb24+anNvbl9xdWVyeTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGluc3RlYWQuCisg ICAgICAgIFRoZSA8bGl0ZXJhbD5SRVRVUk5JTkc8L2xpdGVyYWw+IGNsYXVzZSBjYW4gYmUgdXNl ZCB0byBzcGVjaWZ5IHRoZQorICAgICAgICA8cmVwbGFjZWFibGU+ZGF0YV90eXBlPC9yZXBsYWNl YWJsZT4gb2YgdGhlIHJlc3VsdCB2YWx1ZS4gIEl0IG11c3QKKyAgICAgICAgYmUgYSB0eXBlIGZv ciB3aGljaCB0aGVyZSBhcmUgY2FzdHMgZnJvbSBhbGwgcG9zc2libGUgSlNPTiBzY2FsYXIKKyAg ICAgICAgdmFsdWUgdHlwZXMgKDx0eXBlPnRleHQ8L3R5cGU+LCA8dHlwZT5ib29sZWFuPC90eXBl PiwgPHR5cGU+bnVtZXJpYzwvdHlwZT4sCisgICAgICAgIGFuZCB2YXJpb3VzIGRhdGV0aW1lIHR5 cGVzKSB0byB0aGF0IHR5cGUuICBJZiBubyA8bGl0ZXJhbD5SRVRVUk5JTkc8L2xpdGVyYWw+Cisg ICAgICAgIGlzIHNwY2lmaWVkLCB0aGUgcmV0dXJuZWQgdmFsdWUgd2lsbCBiZSBvZiB0eXBlIDx0 eXBlPnRleHQ8L3R5cGU+LgorICAgICAgICBUaGUgPGxpdGVyYWw+T04gRVJST1I8L2xpdGVyYWw+ IGFuZCA8bGl0ZXJhbD5PTiBFTVBUWTwvbGl0ZXJhbD4KKyAgICAgICAgY2xhdXNlcyBoYXZlIHNp bWlsYXIgc2VtYW50aWNzIGFzIG1lbnRpb25lZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YKKyAgICAg ICAgPGZ1bmN0aW9uPmpzb25fcXVlcnk8L2Z1bmN0aW9uPi4gIE5vdGUgdGhhdCBzY2FsYXIgc3Ry aW5ncyByZXR1cm5lZAorICAgICAgICBieSA8ZnVuY3Rpb24+anNvbl92YWx1ZTwvZnVuY3Rpb24+ IGFsd2F5cyBoYXZlIHRoZWlyIHF1b3RlcyByZW1vdmVkLAorICAgICAgICBlcXVpdmFsZW50IHRv IHdoYXQgb25lIHdvdWxkIGdldCB3aXRoIDxsaXRlcmFsPk9NSVQgUVVPVEVTPC9saXRlcmFsPgor ICAgICAgICB3aGVuIHVzaW5nIDxmdW5jdGlvbj5qc29uX3F1ZXJ5PC9mdW5jdGlvbj4uCisgICAg ICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICA8bGl0ZXJhbD5qc29uX3ZhbHVlKGpz b25iICciMTIzLjQ1IicsICckJyBSRVRVUk5JTkcgZmxvYXQpPC9saXRlcmFsPgorICAgICAgICA8 cmV0dXJudmFsdWU+MTIzLjQ1PC9yZXR1cm52YWx1ZT4KKyAgICAgICA8L3BhcmE+CisgICAgICAg PHBhcmE+CisgICAgICAgIDxsaXRlcmFsPmpzb25fdmFsdWUoanNvbmIgJyIwMzowNCAyMDE1LTAy LTAxIicsICckLmRhdGV0aW1lKCJISDI0Ok1JJm5ic3A7WVlZWS1NTS1ERCIpJyBSRVRVUk5JTkcg ZGF0ZSk8L2xpdGVyYWw+CisgICAgICAgIDxyZXR1cm52YWx1ZT4yMDE1LTAyLTAxPC9yZXR1cm52 YWx1ZT4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIDxsaXRlcmFsPmpz b25fdmFsdWUoanNvbmIgJ1sxLDJdJywgJ3N0cmljdCAkWypdJyBERUZBVUxUIDkgT04gRVJST1Ip PC9saXRlcmFsPgorICAgICAgICA8cmV0dXJudmFsdWU+OTwvcmV0dXJudmFsdWU+CisgICAgICA8 L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisgICAgPC90Ym9keT4KKyAgIDwvdGdyb3VwPgor ICA8L3RhYmxlPgorICA8L3NlY3QyPgogIDwvc2VjdDE+CiAKICA8c2VjdDEgaWQ9ImZ1bmN0aW9u cy1zZXF1ZW5jZSI+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3NxbF9mZWF0dXJl cy50eHQgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3NxbF9mZWF0dXJlcy50eHQKaW5kZXggODBjNDBl YWY1Ny4uNzU5OGJkOGYyMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zcWxfZmVh dHVyZXMudHh0CisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3FsX2ZlYXR1cmVzLnR4dApAQCAt NTQ4LDE1ICs1NDgsMTUgQEAgVDgxMQlCYXNpYyBTUUwvSlNPTiBjb25zdHJ1Y3RvciBmdW5jdGlv bnMJCQlZRVMKIFQ4MTIJU1FML0pTT046IEpTT05fT0JKRUNUQUdHCQkJWUVTCQogVDgxMwlTUUwv SlNPTjogSlNPTl9BUlJBWUFHRyB3aXRoIE9SREVSIEJZCQkJWUVTCQogVDgxNAlDb2xvbiBpbiBK U09OX09CSkVDVCBvciBKU09OX09CSkVDVEFHRwkJCVlFUwkKLVQ4MjEJQmFzaWMgU1FML0pTT04g cXVlcnkgb3BlcmF0b3JzCQkJTk8JCitUODIxCUJhc2ljIFNRTC9KU09OIHF1ZXJ5IG9wZXJhdG9y cwkJCVlFUwkKIFQ4MjIJU1FML0pTT046IElTIEpTT04gV0lUSCBVTklRVUUgS0VZUyBwcmVkaWNh dGUJCQlZRVMJCi1UODIzCVNRTC9KU09OOiBQQVNTSU5HIGNsYXVzZQkJCU5PCQorVDgyMwlTUUwv SlNPTjogUEFTU0lORyBjbGF1c2UJCQlZRVMJCiBUODI0CUpTT05fVEFCTEU6IHNwZWNpZmljIFBM QU4gY2xhdXNlCQkJTk8JCi1UODI1CVNRTC9KU09OOiBPTiBFTVBUWSBhbmQgT04gRVJST1IgY2xh dXNlcwkJCU5PCQotVDgyNglHZW5lcmFsIHZhbHVlIGV4cHJlc3Npb24gaW4gT04gRVJST1Igb3Ig T04gRU1QVFkgY2xhdXNlcwkJCU5PCQorVDgyNQlTUUwvSlNPTjogT04gRU1QVFkgYW5kIE9OIEVS Uk9SIGNsYXVzZXMJCQlZRVMJCitUODI2CUdlbmVyYWwgdmFsdWUgZXhwcmVzc2lvbiBpbiBPTiBF UlJPUiBvciBPTiBFTVBUWSBjbGF1c2VzCQkJWUVTCQogVDgyNwlKU09OX1RBQkxFOiBzaWJsaW5n IE5FU1RFRCBDT0xVTU5TIGNsYXVzZXMJCQlOTwkKLVQ4MjgJSlNPTl9RVUVSWQkJCU5PCQotVDgy OQlKU09OX1FVRVJZOiBhcnJheSB3cmFwcGVyIG9wdGlvbnMJCQlOTwkKK1Q4MjgJSlNPTl9RVUVS WQkJCVlFUwkKK1Q4MjkJSlNPTl9RVUVSWTogYXJyYXkgd3JhcHBlciBvcHRpb25zCQkJWUVTCQog VDgzMAlFbmZvcmNpbmcgdW5pcXVlIGtleXMgaW4gU1FML0pTT04gY29uc3RydWN0b3IgZnVuY3Rp b25zCQkJWUVTCQogVDgzMQlTUUwvSlNPTiBwYXRoIGxhbmd1YWdlOiBzdHJpY3QgbW9kZQkJCVlF UwkKIFQ4MzIJU1FML0pTT04gcGF0aCBsYW5ndWFnZTogaXRlbSBtZXRob2QJCQlZRVMJCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY0V4cHIuYwppbmRleCAzMTgxYjExMzZhLi43NGJjNmY0OTRmIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNFeHByLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJ1dGlscy9idWlsdGlu cy5oIgogI2luY2x1ZGUgInV0aWxzL2RhdHVtLmgiCiAjaW5jbHVkZSAidXRpbHMvanNvbmZ1bmNz LmgiCisjaW5jbHVkZSAidXRpbHMvanNvbnBhdGguaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2Fj aGUuaCIKICNpbmNsdWRlICJ1dGlscy90eXBjYWNoZS5oIgogCkBAIC04OCw2ICs4OSwxMiBAQCBz dGF0aWMgdm9pZCBFeGVjQnVpbGRBZ2dUcmFuc0NhbGwoRXhwclN0YXRlICpzdGF0ZSwgQWdnU3Rh dGUgKmFnZ3N0YXRlLAogCQkJCQkJCQkgIEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBBZ2dTdGF0 ZVBlclRyYW5zIHBlcnRyYW5zLAogCQkJCQkJCQkgIGludCB0cmFuc25vLCBpbnQgc2V0bm8sIGlu dCBzZXRvZmYsIGJvb2wgaXNoYXNoLAogCQkJCQkJCQkgIGJvb2wgbnVsbGNoZWNrKTsKK3N0YXRp YyB2b2lkIEV4ZWNJbml0SnNvbkV4cHIoSnNvbkV4cHIgKmpleHByLCBFeHByU3RhdGUgKnN0YXRl LAorCQkJCQkJCSBEYXR1bSAqcmVzdiwgYm9vbCAqcmVzbnVsbCwKKwkJCQkJCQkgRXhwckV2YWxT dGVwICpzY3JhdGNoKTsKK3N0YXRpYyBpbnQJRXhlY0luaXRKc29uRXhwckNvZXJjaW9uKEV4cHJT dGF0ZSAqc3RhdGUsIE5vZGUgKmNvZXJjaW9uLAorCQkJCQkJCQkJIEVycm9yU2F2ZUNvbnRleHQg KmVzY29udGV4dCwKKwkJCQkJCQkJCSBEYXR1bSAqcmVzdiwgYm9vbCAqcmVzbnVsbCk7CiAKIAog LyoKQEAgLTI0MTMsNiArMjQyMCwxNCBAQCBFeGVjSW5pdEV4cHJSZWMoRXhwciAqbm9kZSwgRXhw clN0YXRlICpzdGF0ZSwKIAkJCQlicmVhazsKIAkJCX0KIAorCQljYXNlIFRfSnNvbkV4cHI6CisJ CQl7CisJCQkJSnNvbkV4cHIgICAqamV4cHIgPSBjYXN0Tm9kZShKc29uRXhwciwgbm9kZSk7CisK KwkJCQlFeGVjSW5pdEpzb25FeHByKGpleHByLCBzdGF0ZSwgcmVzdiwgcmVzbnVsbCwgJnNjcmF0 Y2gpOworCQkJCWJyZWFrOworCQkJfQorCiAJCWNhc2UgVF9OdWxsVGVzdDoKIAkJCXsKIAkJCQlO dWxsVGVzdCAgICpudGVzdCA9IChOdWxsVGVzdCAqKSBub2RlOwpAQCAtNDE4MSwzICs0MTk2LDMz MiBAQCBFeGVjQnVpbGRQYXJhbVNldEVxdWFsKFR1cGxlRGVzYyBkZXNjLAogCiAJcmV0dXJuIHN0 YXRlOwogfQorCisvKgorICogUHVzaCBzdGVwcyB0byBldmFsdWF0ZSBhIEpzb25FeHByIGFuZCBp dHMgdmFyaW91cyBzdWJzaWRpYXJ5IGV4cHJlc3Npb25zLgorICovCitzdGF0aWMgdm9pZAorRXhl Y0luaXRKc29uRXhwcihKc29uRXhwciAqamV4cHIsIEV4cHJTdGF0ZSAqc3RhdGUsCisJCQkJIERh dHVtICpyZXN2LCBib29sICpyZXNudWxsLAorCQkJCSBFeHByRXZhbFN0ZXAgKnNjcmF0Y2gpCit7 CisJSnNvbkV4cHJTdGF0ZSAqanNlc3RhdGUgPSBwYWxsb2MwKHNpemVvZihKc29uRXhwclN0YXRl KSk7CisJSnNvbkV4cHJQb3N0RXZhbFN0YXRlICpwb3N0X2V2YWwgPSAmanNlc3RhdGUtPnBvc3Rf ZXZhbDsKKwlMaXN0Q2VsbCAgICphcmdleHBybGM7CisJTGlzdENlbGwgICAqYXJnbmFtZWxjOwor CUxpc3QJICAgKmp1bXBzX2lmX3NraXAgPSBOSUw7CisJTGlzdAkgICAqanVtcHNfdG9fY29lcmNl X2ZpbmlzaCA9IE5JTDsKKwlMaXN0CSAgICpqdW1wc190b19lbmQgPSBOSUw7CisJTGlzdENlbGwg ICAqbGM7CisJRXhwckV2YWxTdGVwICphczsKKworCWpzZXN0YXRlLT5qc2V4cHIgPSBqZXhwcjsK KworCS8qCisJICogRXZhbHVhdGUgZm9ybWF0dGVkX2V4cHIgc3RvcmluZyB0aGUgcmVzdWx0IGlu dG8KKwkgKiBqc2VzdGF0ZS0+Zm9ybWF0dGVkX2V4cHIuCisJICovCisJRXhlY0luaXRFeHByUmVj KChFeHByICopIGpleHByLT5mb3JtYXR0ZWRfZXhwciwgc3RhdGUsCisJCQkJCSZqc2VzdGF0ZS0+ Zm9ybWF0dGVkX2V4cHIudmFsdWUsCisJCQkJCSZqc2VzdGF0ZS0+Zm9ybWF0dGVkX2V4cHIuaXNu dWxsKTsKKworCS8qIFN0ZXBzIHRvIGp1bXAgdG8gZW5kIGlmIGZvcm1hdHRlZF9leHByIGV2YWx1 YXRlcyB0byBOVUxMICovCisJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9KVU1QX0lGX05VTEw7CisJ c2NyYXRjaC0+cmVzbnVsbCA9ICZqc2VzdGF0ZS0+Zm9ybWF0dGVkX2V4cHIuaXNudWxsOworCXNj cmF0Y2gtPmQuanVtcC5qdW1wZG9uZSA9IC0xOwkvKiBzZXQgYmVsb3cgKi8KKwlqdW1wc19pZl9z a2lwID0gbGFwcGVuZF9pbnQoanVtcHNfaWZfc2tpcCwgc3RhdGUtPnN0ZXBzX2xlbik7CisJRXhw ckV2YWxQdXNoU3RlcChzdGF0ZSwgc2NyYXRjaCk7CisKKwkvKgorCSAqIEV2YWx1YXRlIHBhdGhz cGVjIGV4cHJlc3Npb24gc3RvcmluZyB0aGUgcmVzdWx0IGludG8KKwkgKiBqc2VzdGF0ZS0+cGF0 aHNwZWMuCisJICovCisJRXhlY0luaXRFeHByUmVjKChFeHByICopIGpleHByLT5wYXRoX3NwZWMs IHN0YXRlLAorCQkJCQkmanNlc3RhdGUtPnBhdGhzcGVjLnZhbHVlLAorCQkJCQkmanNlc3RhdGUt PnBhdGhzcGVjLmlzbnVsbCk7CisKKwkvKiBTdGVwcyB0byBKVU1QIHRvIGVuZCBpZiBwYXRoc3Bl YyBldmFsdWF0ZXMgdG8gTlVMTCAqLworCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1BfSlVNUF9JRl9O VUxMOworCXNjcmF0Y2gtPnJlc251bGwgPSAmanNlc3RhdGUtPnBhdGhzcGVjLmlzbnVsbDsKKwlz Y3JhdGNoLT5kLmp1bXAuanVtcGRvbmUgPSAtMTsJLyogc2V0IGJlbG93ICovCisJanVtcHNfaWZf c2tpcCA9IGxhcHBlbmRfaW50KGp1bXBzX2lmX3NraXAsIHN0YXRlLT5zdGVwc19sZW4pOworCUV4 cHJFdmFsUHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOworCisJLyogU3RlcHMgdG8gY29tcHV0ZSBQ QVNTSU5HIGFyZ3MuICovCisJanNlc3RhdGUtPmFyZ3MgPSBOSUw7CisJZm9yYm90aChhcmdleHBy bGMsIGpleHByLT5wYXNzaW5nX3ZhbHVlcywKKwkJCWFyZ25hbWVsYywgamV4cHItPnBhc3Npbmdf bmFtZXMpCisJeworCQlFeHByCSAgICphcmdleHByID0gKEV4cHIgKikgbGZpcnN0KGFyZ2V4cHJs Yyk7CisJCVN0cmluZwkgICAqYXJnbmFtZSA9IGxmaXJzdF9ub2RlKFN0cmluZywgYXJnbmFtZWxj KTsKKwkJSnNvblBhdGhWYXJpYWJsZSAqdmFyID0gcGFsbG9jKHNpemVvZigqdmFyKSk7CisKKwkJ dmFyLT5uYW1lID0gYXJnbmFtZS0+c3ZhbDsKKwkJdmFyLT50eXBpZCA9IGV4cHJUeXBlKChOb2Rl ICopIGFyZ2V4cHIpOworCQl2YXItPnR5cG1vZCA9IGV4cHJUeXBtb2QoKE5vZGUgKikgYXJnZXhw cik7CisKKwkJRXhlY0luaXRFeHByUmVjKChFeHByICopIGFyZ2V4cHIsIHN0YXRlLCAmdmFyLT52 YWx1ZSwgJnZhci0+aXNudWxsKTsKKworCQlqc2VzdGF0ZS0+YXJncyA9IGxhcHBlbmQoanNlc3Rh dGUtPmFyZ3MsIHZhcik7CisJfQorCisJLyogU3RlcCBmb3IgSnNvblBhdGgqIGV2YWx1YXRpb247 IHNlZSBFeGVjRXZhbEpzb25FeHByUGF0aCgpLiAqLworCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1Bf SlNPTkVYUFJfUEFUSDsKKwlzY3JhdGNoLT5yZXN2YWx1ZSA9IHJlc3Y7CisJc2NyYXRjaC0+cmVz bnVsbCA9IHJlc251bGw7CisJc2NyYXRjaC0+ZC5qc29uZXhwci5qc2VzdGF0ZSA9IGpzZXN0YXRl OworCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOworCisJLyoKKwkgKiBTdGVwIHRv IGp1bXAgdG8gZW5kIHdoZW4gdGhlcmUncyBuZWl0aGVyIGFuIGVycm9yIHdoZW4gZXZhbHVhdGlu ZworCSAqIEpzb25QYXRoKiBub3IgYW55IG5lZWQgdG8gY29lcmNlIHRoZSByZXN1bHQgYmVjYXVz ZSBpdCdzIGFscmVhZHkgb2YgdGhlCisJICogc3BlY2lmaWVkIHR5cGUuCisJICovCisJc2NyYXRj aC0+b3Bjb2RlID0gRUVPUF9KVU1QOworCXNjcmF0Y2gtPmQuanVtcC5qdW1wZG9uZSA9IC0xOwkv KiBzZXQgYmVsb3cgKi8KKwlqdW1wc190b19lbmQgPSBsYXBwZW5kX2ludChqdW1wc190b19lbmQs IHN0YXRlLT5zdGVwc19sZW4pOworCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOwor CisJLyoKKwkgKiBTdGVwcyB0byBjb2VyY2UgdGhlIHJlc3VsdCB2YWx1ZSBjb21wdXRlZCBieSBF RU9QX0pTT05FWFBSX1BBVEguIFRvCisJICogaGFuZGxlIGNvZXJjaW9uIGVycm9ycyBzb2Z0bHks IHVzZSB0aGUgZm9sbG93aW5nIEVycm9yU2F2ZUNvbnRleHQgd2hlbgorCSAqIGluaXRpYWxpemlu ZyB0aGUgY29lcmNpb24gZXhwcmVzc2lvbnMsIGluY2x1ZGluZyBhbnkgSnNvbkNvZXJjaW9uCisJ ICogbm9kZXMuCisJICovCisJanNlc3RhdGUtPmVzY29udGV4dC50eXBlID0gVF9FcnJvclNhdmVD b250ZXh0OworCWlmIChqZXhwci0+cmVzdWx0X2NvZXJjaW9uIHx8IGpleHByLT5vbWl0X3F1b3Rl cykKKwl7CisJCWpzZXN0YXRlLT5qdW1wX2V2YWxfcmVzdWx0X2NvZXJjaW9uID0KKwkJCUV4ZWNJ bml0SnNvbkV4cHJDb2VyY2lvbihzdGF0ZSwgamV4cHItPnJlc3VsdF9jb2VyY2lvbiwKKwkJCQkJ CQkJCSBqZXhwci0+b25fZXJyb3ItPmJ0eXBlICE9IEpTT05fQkVIQVZJT1JfRVJST1IgPworCQkJ CQkJCQkJICZqc2VzdGF0ZS0+ZXNjb250ZXh0IDogTlVMTCwKKwkJCQkJCQkJCSByZXN2LCByZXNu dWxsKTsKKwkJLyogSnVtcCB0byBDT0VSQ0lPTl9GSU5JU0guICovCisJCXNjcmF0Y2gtPm9wY29k ZSA9IEVFT1BfSlVNUDsKKwkJc2NyYXRjaC0+ZC5qdW1wLmp1bXBkb25lID0gLTE7CS8qIHNldCBi ZWxvdyAqLworCQlqdW1wc190b19jb2VyY2VfZmluaXNoID0gbGFwcGVuZF9pbnQoanVtcHNfdG9f Y29lcmNlX2ZpbmlzaCwKKwkJCQkJCQkJCQkJIHN0YXRlLT5zdGVwc19sZW4pOworCQlFeHByRXZh bFB1c2hTdGVwKHN0YXRlLCBzY3JhdGNoKTsKKwl9CisJZWxzZQorCQlqc2VzdGF0ZS0+anVtcF9l dmFsX3Jlc3VsdF9jb2VyY2lvbiA9IC0xOworCisJLyogU3RlcHMgZm9yIGNvZXJjaW5nIEpzb25J dGVtVHlwZSB2YWx1ZXMgcmV0dXJuZWQgYnkgSnNvblBhdGhWYWx1ZSgpLiAqLworCWlmIChqZXhw ci0+aXRlbV9jb2VyY2lvbnMpCisJeworCQkvKgorCQkgKiBIZXJlIHdlIGNyZWF0ZSB0aGUgc3Rl cHMgZm9yIGVhY2ggSnNvbkl0ZW1UeXBlIHR5cGUncyBjb2VyY2lvbgorCQkgKiBleHByZXNzaW9u IGFuZCBhbHNvIHN0b3JlIGEgZmxhZyB3aGV0aGVyIHRoZSBleHByZXNzaW9uIGlzIGEKKwkJICog SnNvbkNvZXJjaW9uIG5vZGUuICBFeGVjUHJlcGFyZUpzb25JdGVtQ29lcmNpb24oKSBjYWxsZWQg YnkKKwkJICogRXhlY0V2YWxKc29uRXhwclBhdGgoKSB3aWxsIG1hcCBhIGdpdmVuIEpzb25iVmFs dWUgcmV0dXJuZWQgYnkKKwkJICogSnNvblBhdGhWYWx1ZSgpIHRvIGl0cyAgSnNvbkl0ZW1UeXBl J3MgZXhwcmVzc2lvbidzIHN0ZXAgYWRkcmVzcworCQkgKiBhbmQgdGhlIGZsYWcgYnkgaW5kZXhp bmcgdGhlIGZvbGxvd2luZyBhcnJheXMgd2l0aCBKc29uSXRlbVR5cGUKKwkJICogZW51bSB2YWx1 ZS4KKwkJICovCisJCWpzZXN0YXRlLT5udW1faXRlbV9jb2VyY2lvbnMgPSBsaXN0X2xlbmd0aChq ZXhwci0+aXRlbV9jb2VyY2lvbnMpOworCQlqc2VzdGF0ZS0+ZXZhbF9pdGVtX2NvZXJjaW9uX2p1 bXBzID0gKGludCAqKQorCQkJcGFsbG9jKGpzZXN0YXRlLT5udW1faXRlbV9jb2VyY2lvbnMgKiBz aXplb2YoaW50KSk7CisJCWpzZXN0YXRlLT5pdGVtX2NvZXJjaW9uX3ZpYV9leHByID0gKGJvb2wg KikKKwkJCXBhbGxvYzAoanNlc3RhdGUtPm51bV9pdGVtX2NvZXJjaW9ucyAqIHNpemVvZihib29s KSk7CisJCWZvcmVhY2gobGMsIGpleHByLT5pdGVtX2NvZXJjaW9ucykKKwkJeworCQkJSnNvbkl0 ZW1Db2VyY2lvbiAqaXRlbV9jb2VyY2lvbiA9IGxmaXJzdChsYyk7CisJCQlOb2RlCSAgICpjb2Vy Y2lvbiA9IGl0ZW1fY29lcmNpb24tPmNvZXJjaW9uOworCisJCQlqc2VzdGF0ZS0+aXRlbV9jb2Vy Y2lvbl92aWFfZXhwcltpdGVtX2NvZXJjaW9uLT5pdGVtX3R5cGVdID0KKwkJCQkoY29lcmNpb24g IT0gTlVMTCAmJiAhSXNBKGNvZXJjaW9uLCBKc29uQ29lcmNpb24pKTsKKwkJCWpzZXN0YXRlLT5l dmFsX2l0ZW1fY29lcmNpb25fanVtcHNbaXRlbV9jb2VyY2lvbi0+aXRlbV90eXBlXSA9CisJCQkJ RXhlY0luaXRKc29uRXhwckNvZXJjaW9uKHN0YXRlLCBjb2VyY2lvbiwKKwkJCQkJCQkJCQkgamV4 cHItPm9uX2Vycm9yLT5idHlwZSAhPSBKU09OX0JFSEFWSU9SX0VSUk9SID8KKwkJCQkJCQkJCQkg JmpzZXN0YXRlLT5lc2NvbnRleHQgOiBOVUxMLAorCQkJCQkJCQkJCSByZXN2LCByZXNudWxsKTsK KworCQkJLyogSnVtcCB0byBDT0VSQ0lPTl9GSU5JU0guICovCisJCQlzY3JhdGNoLT5vcGNvZGUg PSBFRU9QX0pVTVA7CisJCQlzY3JhdGNoLT5kLmp1bXAuanVtcGRvbmUgPSAtMTsJLyogc2V0IGJl bG93ICovCisJCQlqdW1wc190b19jb2VyY2VfZmluaXNoID0gbGFwcGVuZF9pbnQoanVtcHNfdG9f Y29lcmNlX2ZpbmlzaCwKKwkJCQkJCQkJCQkJCSBzdGF0ZS0+c3RlcHNfbGVuKTsKKwkJCUV4cHJF dmFsUHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOworCQl9CisJfQorCisJLyoKKwkgKiBBZGQgc3Rl cCB0byByZXNldCB0aGUgRXJyb3JTYXZlQ29udGV4dCBhbmQgc2V0IGVycm9yIGZsYWcgaWYgdGhl CisJICogY29lcmNpb24gc3RlcHMgZW5jb3VudGVyZWQgYW4gZXJyb3IgYnV0IHdhcyBub3QgdGhy b3duIGJlY2F1c2Ugb2YgdGhlCisJICogT04gRVJST1IgYmVoYXZpb3IuCisJICovCisJaWYgKGpl eHByLT5yZXN1bHRfY29lcmNpb24gfHwgamV4cHItPml0ZW1fY29lcmNpb25zKQorCXsKKwkJZm9y ZWFjaChsYywganVtcHNfdG9fY29lcmNlX2ZpbmlzaCkKKwkJeworCQkJYXMgPSAmc3RhdGUtPnN0 ZXBzW2xmaXJzdF9pbnQobGMpXTsKKwkJCWFzLT5kLmp1bXAuanVtcGRvbmUgPSBzdGF0ZS0+c3Rl cHNfbGVuOworCQl9CisKKwkJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9KU09ORVhQUl9DT0VSQ0lP Tl9GSU5JU0g7CisJCXNjcmF0Y2gtPmQuanNvbmV4cHIuanNlc3RhdGUgPSBqc2VzdGF0ZTsKKwkJ RXhwckV2YWxQdXNoU3RlcChzdGF0ZSwgc2NyYXRjaCk7CisJfQorCisJanNlc3RhdGUtPmp1bXBf ZW1wdHkgPSBqc2VzdGF0ZS0+anVtcF9lcnJvciA9IC0xOworCisJLyoKKwkgKiBTdGVwIHRvIGhh bmRsZSBPTiBFUlJPUiBiZWhhdmlvcnMuICBUaGlzIGhhbmRsZXMgYm90aCB0aGUgZXJyb3JzIHRo YXQKKwkgKiBvY2N1ciBkdXJpbmcgRUVPUF9KU09ORVhQUl9QQVRIIGV2YWx1YXRpb24gYW5kIHN1 YnNlcXVlbnQgY29lcmNpb24KKwkgKiBldmFsdWF0aW9uLgorCSAqLworCWlmIChqZXhwci0+b25f ZXJyb3IgJiYKKwkJamV4cHItPm9uX2Vycm9yLT5idHlwZSAhPSBKU09OX0JFSEFWSU9SX0VSUk9S KQorCXsKKwkJanNlc3RhdGUtPmp1bXBfZXJyb3IgPSBzdGF0ZS0+c3RlcHNfbGVuOworCQlzY3Jh dGNoLT5vcGNvZGUgPSBFRU9QX0pVTVBfSUZfTk9UX1RSVUU7CisKKwkJLyoKKwkJICogcG9zdF9l dmFsLmVycm9yIGlzIHNldCBieSBFeGVjRXZhbEpzb25FeHByUGF0aCgpIGFuZAorCQkgKiBFeGVj RXZhbEpzb25Db2VyY2lvbkZpbmlzaCgpLgorCQkgKi8KKwkJc2NyYXRjaC0+cmVzdmFsdWUgPSAm cG9zdF9ldmFsLT5lcnJvci52YWx1ZTsKKwkJc2NyYXRjaC0+cmVzbnVsbCA9ICZwb3N0X2V2YWwt PmVycm9yLmlzbnVsbDsKKwkJc2NyYXRjaC0+ZC5qdW1wLmp1bXBkb25lID0gLTE7CS8qIHNldCBi ZWxvdyAqLworCQlqdW1wc190b19lbmQgPSBsYXBwZW5kX2ludChqdW1wc190b19lbmQsIHN0YXRl LT5zdGVwc19sZW4pOworCQlFeHByRXZhbFB1c2hTdGVwKHN0YXRlLCBzY3JhdGNoKTsKKworCQkv KiBTdGVwcyB0byBldmFsdWF0ZSB0aGUgT04gRVJST1IgZXhwcmVzc2lvbiAqLworCQlFeGVjSW5p dEV4cHJSZWMoKEV4cHIgKikgamV4cHItPm9uX2Vycm9yLT5leHByLAorCQkJCQkJc3RhdGUsIHJl c3YsIHJlc251bGwpOworCisJCS8qIFN0ZXBzIHRvIGNvZXJjZSB0aGUgT04gRVJST1IgZXhwcmVz c2lvbiBpZiBuZWVkZWQgKi8KKwkJKHZvaWQpIEV4ZWNJbml0SnNvbkV4cHJDb2VyY2lvbihzdGF0 ZSwKKwkJCQkJCQkJCQkoTm9kZSAqKSBqZXhwci0+b25fZXJyb3ItPmNvZXJjaW9uLAorCQkJCQkJ CQkJCSZqc2VzdGF0ZS0+ZXNjb250ZXh0LAorCQkJCQkJCQkJCXJlc3YsIHJlc251bGwpOworCisJ CWp1bXBzX3RvX2VuZCA9IGxhcHBlbmRfaW50KGp1bXBzX3RvX2VuZCwgc3RhdGUtPnN0ZXBzX2xl bik7CisJCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1BfSlVNUDsKKwkJc2NyYXRjaC0+ZC5qdW1wLmp1 bXBkb25lID0gLTE7CisJCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOworCX0KKwor CS8qIFN0ZXAgdG8gaGFuZGxlIE9OIEVNUFRZIGJlaGF2aW9ycy4gKi8KKwlpZiAoamV4cHItPm9u X2VtcHR5ICE9IE5VTEwgJiYKKwkJamV4cHItPm9uX2VtcHR5LT5idHlwZSAhPSBKU09OX0JFSEFW SU9SX0VSUk9SKQorCXsKKwkJanNlc3RhdGUtPmp1bXBfZW1wdHkgPSBzdGF0ZS0+c3RlcHNfbGVu OworCisJCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1BfSlVNUF9JRl9OT1RfVFJVRTsKKwkJc2NyYXRj aC0+cmVzdmFsdWUgPSAmcG9zdF9ldmFsLT5lbXB0eS52YWx1ZTsKKwkJc2NyYXRjaC0+cmVzbnVs bCA9ICZwb3N0X2V2YWwtPmVtcHR5LmlzbnVsbDsKKwkJc2NyYXRjaC0+ZC5qdW1wLmp1bXBkb25l ID0gLTE7CS8qIHNldCBiZWxvdyAqLworCQlqdW1wc190b19lbmQgPSBsYXBwZW5kX2ludChqdW1w c190b19lbmQsIHN0YXRlLT5zdGVwc19sZW4pOworCQlFeHByRXZhbFB1c2hTdGVwKHN0YXRlLCBz Y3JhdGNoKTsKKworCQkvKiBTdGVwcyB0byBldmFsdWF0ZSB0aGUgT04gRU1QVFkgZXhwcmVzc2lv biAqLworCQlFeGVjSW5pdEV4cHJSZWMoKEV4cHIgKikgamV4cHItPm9uX2VtcHR5LT5leHByLAor CQkJCQkJc3RhdGUsIHJlc3YsIHJlc251bGwpOworCisJCS8qIFN0ZXBzIHRvIGNvZXJjZSB0aGUg T04gRU1QVFkgZXhwcmVzc2lvbiBpZiBuZWVkZWQgKi8KKwkJKHZvaWQpIEV4ZWNJbml0SnNvbkV4 cHJDb2VyY2lvbihzdGF0ZSwKKwkJCQkJCQkJCQkoTm9kZSAqKSBqZXhwci0+b25fZW1wdHktPmNv ZXJjaW9uLAorCQkJCQkJCQkJCSZqc2VzdGF0ZS0+ZXNjb250ZXh0LAorCQkJCQkJCQkJCXJlc3Ys IHJlc251bGwpOworCisJCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1BfSlVNUDsKKwkJc2NyYXRjaC0+ ZC5qdW1wLmp1bXBkb25lID0gLTE7CS8qIHNldCBiZWxvdyAqLworCQlqdW1wc190b19lbmQgPSBs YXBwZW5kX2ludChqdW1wc190b19lbmQsIHN0YXRlLT5zdGVwc19sZW4pOworCQlFeHByRXZhbFB1 c2hTdGVwKHN0YXRlLCBzY3JhdGNoKTsKKwl9CisKKwlpZiAoanNlc3RhdGUtPmp1bXBfZXJyb3Ig PCAwICYmIGpzZXN0YXRlLT5qdW1wX2VtcHR5IDwgMCkKKwl7CisJCXNjcmF0Y2gtPm9wY29kZSA9 IEVFT1BfSlVNUDsKKwkJc2NyYXRjaC0+ZC5qdW1wLmp1bXBkb25lID0gLTE7CS8qIHNldCBiZWxv dyAqLworCQlqdW1wc190b19lbmQgPSBsYXBwZW5kX2ludChqdW1wc190b19lbmQsIHN0YXRlLT5z dGVwc19sZW4pOworCQlFeHByRXZhbFB1c2hTdGVwKHN0YXRlLCBzY3JhdGNoKTsKKwl9CisKKwkv KiBSZXR1cm4gTlVMTCB3aGVuIGVpdGhlciBmb3JtYXR0ZWRfZXhwciBvciBwYXRoc3BlYyBpcyBO VUxMLiAqLworCWZvcmVhY2gobGMsIGp1bXBzX2lmX3NraXApCisJeworCQlhcyA9ICZzdGF0ZS0+ c3RlcHNbbGZpcnN0X2ludChsYyldOworCQlhcy0+ZC5qdW1wLmp1bXBkb25lID0gc3RhdGUtPnN0 ZXBzX2xlbjsKKwl9CisJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9DT05TVDsKKwlzY3JhdGNoLT5y ZXN2YWx1ZSA9IHJlc3Y7CisJc2NyYXRjaC0+cmVzbnVsbCA9IHJlc251bGw7CisJc2NyYXRjaC0+ ZC5jb25zdHZhbC52YWx1ZSA9IChEYXR1bSkgMDsKKwlzY3JhdGNoLT5kLmNvbnN0dmFsLmlzbnVs bCA9IHRydWU7CisJRXhwckV2YWxQdXNoU3RlcChzdGF0ZSwgc2NyYXRjaCk7CisKKwkvKiBKdW1w IHRvIGNvZXJjZSB0aGUgTlVMTCB1c2luZyByZXN1bHRfY29lcmNpb24gaXMgcHJlc2VudC4gKi8K KwlpZiAoanNlc3RhdGUtPmp1bXBfZXZhbF9yZXN1bHRfY29lcmNpb24gPj0gMCkKKwl7CisJCXNj cmF0Y2gtPm9wY29kZSA9IEVFT1BfSlVNUDsKKwkJc2NyYXRjaC0+ZC5qdW1wLmp1bXBkb25lID0g anNlc3RhdGUtPmp1bXBfZXZhbF9yZXN1bHRfY29lcmNpb247CisJCUV4cHJFdmFsUHVzaFN0ZXAo c3RhdGUsIHNjcmF0Y2gpOworCX0KKworCWZvcmVhY2gobGMsIGp1bXBzX3RvX2VuZCkKKwl7CisJ CWFzID0gJnN0YXRlLT5zdGVwc1tsZmlyc3RfaW50KGxjKV07CisJCWFzLT5kLmp1bXAuanVtcGRv bmUgPSBzdGF0ZS0+c3RlcHNfbGVuOworCX0KKworCWpzZXN0YXRlLT5qdW1wX2VuZCA9IHN0YXRl LT5zdGVwc19sZW47Cit9CisKKy8qIEluaXRpYWxpemUgb25lIEpzb25Db2VyY2lvbiBmb3IgZXhl Y3V0aW9uLiAqLworc3RhdGljIGludAorRXhlY0luaXRKc29uRXhwckNvZXJjaW9uKEV4cHJTdGF0 ZSAqc3RhdGUsIE5vZGUgKmNvZXJjaW9uLAorCQkJCQkJIEVycm9yU2F2ZUNvbnRleHQgKmVzY29u dGV4dCwKKwkJCQkJCSBEYXR1bSAqcmVzdiwgYm9vbCAqcmVzbnVsbCkKK3sKKwlpbnQJCQlqdW1w X2V2YWxfY29lcmNpb247CisJRGF0dW0JICAgKnNhdmVfaW5uZXJtb3N0X2Nhc2V2YWw7CisJYm9v bAkgICAqc2F2ZV9pbm5lcm1vc3RfY2FzZW51bGw7CisJRXJyb3JTYXZlQ29udGV4dCAqc2F2ZV9l c2NvbnRleHQ7CisKKwlpZiAoY29lcmNpb24gPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJanVt cF9ldmFsX2NvZXJjaW9uID0gc3RhdGUtPnN0ZXBzX2xlbjsKKwlpZiAoSXNBKGNvZXJjaW9uLCBK c29uQ29lcmNpb24pKQorCXsKKwkJRXhwckV2YWxTdGVwIHNjcmF0Y2ggPSB7MH07CisJCU9pZAkJ CXR5cGlucHV0OworCQlGbWdySW5mbyAgICpmaW5mbzsKKwkJT2lkCQkJdHlwaW9wYXJhbTsKKwor CQlnZXRUeXBlSW5wdXRJbmZvKCgoSnNvbkNvZXJjaW9uICopIGNvZXJjaW9uKS0+dGFyZ2V0dHlw ZSwKKwkJCQkJCSAmdHlwaW5wdXQsICZ0eXBpb3BhcmFtKTsKKwkJZmluZm8gPSBwYWxsb2MwKHNp emVvZihGbWdySW5mbykpOworCQlmbWdyX2luZm8odHlwaW5wdXQsIGZpbmZvKTsKKworCQlzY3Jh dGNoLm9wY29kZSA9IEVFT1BfSlNPTkVYUFJfQ09FUkNJT047CisJCXNjcmF0Y2gucmVzdmFsdWUg PSByZXN2OworCQlzY3JhdGNoLnJlc251bGwgPSByZXNudWxsOworCQlzY3JhdGNoLmQuanNvbmV4 cHJfY29lcmNpb24uY29lcmNpb24gPSAoSnNvbkNvZXJjaW9uICopIGNvZXJjaW9uOworCQlzY3Jh dGNoLmQuanNvbmV4cHJfY29lcmNpb24uaW5wdXRfZmluZm8gPSBmaW5mbzsKKwkJc2NyYXRjaC5k Lmpzb25leHByX2NvZXJjaW9uLnR5cGlvcGFyYW0gPSB0eXBpb3BhcmFtOworCQlzY3JhdGNoLmQu anNvbmV4cHJfY29lcmNpb24uanNvbl9wb3B1bGF0ZV90eXBlX2NhY2hlID0gTlVMTDsKKwkJc2Ny YXRjaC5kLmpzb25leHByX2NvZXJjaW9uLmVzY29udGV4dCA9IGVzY29udGV4dDsKKwkJRXhwckV2 YWxQdXNoU3RlcChzdGF0ZSwgJnNjcmF0Y2gpOworCQlyZXR1cm4ganVtcF9ldmFsX2NvZXJjaW9u OworCX0KKworCS8qIFB1c2ggc3RlcChzKSB0byBjb21wdXRlIGNzdGF0ZS0+Y29lcmNpb24uICov CisJc2F2ZV9pbm5lcm1vc3RfY2FzZXZhbCA9IHN0YXRlLT5pbm5lcm1vc3RfY2FzZXZhbDsKKwlz YXZlX2lubmVybW9zdF9jYXNlbnVsbCA9IHN0YXRlLT5pbm5lcm1vc3RfY2FzZW51bGw7CisJc2F2 ZV9lc2NvbnRleHQgPSBzdGF0ZS0+ZXNjb250ZXh0OworCisJc3RhdGUtPmlubmVybW9zdF9jYXNl dmFsID0gcmVzdjsKKwlzdGF0ZS0+aW5uZXJtb3N0X2Nhc2VudWxsID0gcmVzbnVsbDsKKwlzdGF0 ZS0+ZXNjb250ZXh0ID0gZXNjb250ZXh0OworCisJRXhlY0luaXRFeHByUmVjKChFeHByICopIGNv ZXJjaW9uLCBzdGF0ZSwgcmVzdiwgcmVzbnVsbCk7CisKKwlzdGF0ZS0+aW5uZXJtb3N0X2Nhc2V2 YWwgPSBzYXZlX2lubmVybW9zdF9jYXNldmFsOworCXN0YXRlLT5pbm5lcm1vc3RfY2FzZW51bGwg PSBzYXZlX2lubmVybW9zdF9jYXNlbnVsbDsKKwlzdGF0ZS0+ZXNjb250ZXh0ID0gc2F2ZV9lc2Nv bnRleHQ7CisKKwlyZXR1cm4ganVtcF9ldmFsX2NvZXJjaW9uOworfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNFeHBySW50ZXJwLmMKaW5kZXggM2YyMGYxZGQzMS4uOTUxZmE0ZmNhMCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYworKysgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjRXhwckludGVycC5jCkBAIC03Myw4ICs3Myw4IEBACiAjaW5jbHVkZSAi dXRpbHMvZGF0dW0uaCIKICNpbmNsdWRlICJ1dGlscy9leHBhbmRlZHJlY29yZC5oIgogI2luY2x1 ZGUgInV0aWxzL2pzb24uaCIKLSNpbmNsdWRlICJ1dGlscy9qc29uYi5oIgogI2luY2x1ZGUgInV0 aWxzL2pzb25mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxzL2pzb25wYXRoLmgiCiAjaW5jbHVkZSAi dXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRl ICJ1dGlscy90aW1lc3RhbXAuaCIKQEAgLTE4MSw2ICsxODEsMTAgQEAgc3RhdGljIHBnX2F0dHJp YnV0ZV9hbHdheXNfaW5saW5lIHZvaWQgRXhlY0FnZ1BsYWluVHJhbnNCeVJlZihBZ2dTdGF0ZSAq YWdnc3RhdGUKIAkJCQkJCQkJCQkJCQkJCSAgQWdnU3RhdGVQZXJHcm91cCBwZXJncm91cCwKIAkJ CQkJCQkJCQkJCQkJCSAgRXhwckNvbnRleHQgKmFnZ2NvbnRleHQsCiAJCQkJCQkJCQkJCQkJCQkg IGludCBzZXRubyk7CitzdGF0aWMgdm9pZCBFeGVjUHJlcGFyZUpzb25JdGVtQ29lcmNpb24oSnNv bmJWYWx1ZSAqaXRlbSwgSnNvbkV4cHJTdGF0ZSAqanNlc3RhdGUsCisJCQkJCQkJCQkJYm9vbCB0 aHJvd19lcnJvciwKKwkJCQkJCQkJCQlpbnQgKmp1bXBfZXZhbF9pdGVtX2NvZXJjaW9uLAorCQkJ CQkJCQkJCURhdHVtICpyZXN2YWx1ZSwgYm9vbCAqcmVzbnVsbCk7CiAKIC8qCiAgKiBTY2FsYXJB cnJheU9wRXhwckhhc2hFbnRyeQpAQCAtNDgyLDYgKzQ4Niw5IEBAIEV4ZWNJbnRlcnBFeHByKEV4 cHJTdGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwgYm9vbCAqaXNudWxsKQogCQkm JkNBU0VfRUVPUF9YTUxFWFBSLAogCQkmJkNBU0VfRUVPUF9KU09OX0NPTlNUUlVDVE9SLAogCQkm JkNBU0VfRUVPUF9JU19KU09OLAorCQkmJkNBU0VfRUVPUF9KU09ORVhQUl9QQVRILAorCQkmJkNB U0VfRUVPUF9KU09ORVhQUl9DT0VSQ0lPTiwKKwkJJiZDQVNFX0VFT1BfSlNPTkVYUFJfQ09FUkNJ T05fRklOSVNILAogCQkmJkNBU0VfRUVPUF9BR0dSRUYsCiAJCSYmQ0FTRV9FRU9QX0dST1VQSU5H X0ZVTkMsCiAJCSYmQ0FTRV9FRU9QX1dJTkRPV19GVU5DLApAQCAtMTU1NCw2ICsxNTYxLDI4IEBA IEV4ZWNJbnRlcnBFeHByKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwg Ym9vbCAqaXNudWxsKQogCQkJRUVPX05FWFQoKTsKIAkJfQogCisJCUVFT19DQVNFKEVFT1BfSlNP TkVYUFJfUEFUSCkKKwkJeworCQkJLyogdG9vIGNvbXBsZXggZm9yIGFuIGlubGluZSBpbXBsZW1l bnRhdGlvbiAqLworCQkJRUVPX0pVTVAoRXhlY0V2YWxKc29uRXhwclBhdGgoc3RhdGUsIG9wLCBl Y29udGV4dCkpOworCQl9CisKKwkJRUVPX0NBU0UoRUVPUF9KU09ORVhQUl9DT0VSQ0lPTikKKwkJ eworCQkJLyogdG9vIGNvbXBsZXggZm9yIGFuIGlubGluZSBpbXBsZW1lbnRhdGlvbiAqLworCQkJ RXhlY0V2YWxKc29uQ29lcmNpb24oc3RhdGUsIG9wLCBlY29udGV4dCk7CisKKwkJCUVFT19ORVhU KCk7CisJCX0KKworCQlFRU9fQ0FTRShFRU9QX0pTT05FWFBSX0NPRVJDSU9OX0ZJTklTSCkKKwkJ eworCQkJLyogdG9vIGNvbXBsZXggZm9yIGFuIGlubGluZSBpbXBsZW1lbnRhdGlvbiAqLworCQkJ RXhlY0V2YWxKc29uQ29lcmNpb25GaW5pc2goc3RhdGUsIG9wKTsKKworCQkJRUVPX05FWFQoKTsK KwkJfQorCiAJCUVFT19DQVNFKEVFT1BfQUdHUkVGKQogCQl7CiAJCQkvKgpAQCAtNDIxNCw2ICs0 MjQzLDM0NiBAQCBFeGVjRXZhbEpzb25Jc1ByZWRpY2F0ZShFeHByU3RhdGUgKnN0YXRlLCBFeHBy RXZhbFN0ZXAgKm9wKQogCSpvcC0+cmVzdmFsdWUgPSBCb29sR2V0RGF0dW0ocmVzKTsKIH0KIAor LyoKKyAqIFBlcmZvcm1zIEpzb25QYXRoe0V4aXN0c3xRdWVyeXxWYWx1ZX0oKSBmb3IgZ2l2ZW4g Y29udGV4dCBpdGVtIGFuZCBKU09OCisgKiBwYXRoLgorICoKKyAqIFJlc3VsdCBpcyBzZXQgaW4g Km9wLT5yZXN2YWx1ZSBhbmQgKm9wLT5yZXNudWxsLiAgUmV0dXJuIHZhbHVlIGlzIHRoZQorICog c3RlcCBhZGRyZXNzIHRvIGJlIHBlcmZvcm1lZCBuZXh0LgorICoKKyAqIE9uIHJldHVybiwgSnNv bkV4cHJQb3N0RXZhbFN0YXRlIGlzIHBvcHVsYXRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgZGV0YWls czoKKyAqCS0gZXJyb3IudmFsdWU6IHRydWUgaWYgYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIEpz b25QYXRoIGV2YWx1YXRpb24KKyAqCS0gZW1wdHkudmFsdWU6IHRydWUgaWYgSnNvblBhdGh7UXVl cnl8VmFsdWV9KCkgZm91bmQgbm8gbWF0Y2hpbmcgaXRlbQorICoKKyAqIE5vIHJldHVybiBpZiB0 aGUgT04gRVJST1IvRU1QVFkgYmVoYXZpb3IgaXMgRVJST1IuCisgKi8KK2ludAorRXhlY0V2YWxK c29uRXhwclBhdGgoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwKKwkJCQkJIEV4 cHJDb250ZXh0ICplY29udGV4dCkKK3sKKwlKc29uRXhwclN0YXRlICpqc2VzdGF0ZSA9IG9wLT5k Lmpzb25leHByLmpzZXN0YXRlOworCUpzb25FeHByUG9zdEV2YWxTdGF0ZSAqcG9zdF9ldmFsID0g JmpzZXN0YXRlLT5wb3N0X2V2YWw7CisJSnNvbkV4cHIgICAqamV4cHIgPSBqc2VzdGF0ZS0+anNl eHByOworCURhdHVtCQlpdGVtOworCUpzb25QYXRoICAgKnBhdGg7CisJYm9vbAkJdGhyb3dfZXJy b3IgPSBqZXhwci0+b25fZXJyb3ItPmJ0eXBlID09IEpTT05fQkVIQVZJT1JfRVJST1I7CisJYm9v bAkJZXJyb3IgPSBmYWxzZSwKKwkJCQllbXB0eSA9IGZhbHNlOworCisJLyogTWlnaHQgZ2V0IG92 ZXJyaWRkZW4gZm9yIEpTT05fVkFMVUVfT1AgYnkgYW4gcGVyLWl0ZW0gY29lcmNpb24uICovCisJ aW50CQkJanVtcF9ldmFsX2NvZXJjaW9uID0ganNlc3RhdGUtPmp1bXBfZXZhbF9yZXN1bHRfY29l cmNpb247CisKKwlpdGVtID0ganNlc3RhdGUtPmZvcm1hdHRlZF9leHByLnZhbHVlOworCXBhdGgg PSBEYXR1bUdldEpzb25QYXRoUChqc2VzdGF0ZS0+cGF0aHNwZWMudmFsdWUpOworCisJLyogUmVz ZXQgSnNvbkV4cHJQb3N0RXZhbFN0YXRlIGZvciB0aGlzIGV2YWx1YXRpb24uICovCisJbWVtc2V0 KHBvc3RfZXZhbCwgMCwgc2l6ZW9mKCpwb3N0X2V2YWwpKTsKKwlzd2l0Y2ggKGpleHByLT5vcCkK Kwl7CisJCWNhc2UgSlNPTl9FWElTVFNfT1A6CisJCQl7CisJCQkJYm9vbAkJZXhpc3RzID0gSnNv blBhdGhFeGlzdHMoaXRlbSwgcGF0aCwKKwkJCQkJCQkJCQkJCQkhdGhyb3dfZXJyb3IgPyAmZXJy b3IgOiBOVUxMLAorCQkJCQkJCQkJCQkJCWpzZXN0YXRlLT5hcmdzKTsKKworCQkJCWlmICghZXJy b3IpCisJCQkJeworCQkJCQkqb3AtPnJlc3ZhbHVlID0gQm9vbEdldERhdHVtKGV4aXN0cyk7CisJ CQkJCSpvcC0+cmVzbnVsbCA9IGZhbHNlOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNh c2UgSlNPTl9RVUVSWV9PUDoKKwkJCSpvcC0+cmVzdmFsdWUgPSBKc29uUGF0aFF1ZXJ5KGl0ZW0s IHBhdGgsIGpleHByLT53cmFwcGVyLCAmZW1wdHksCisJCQkJCQkJCQkJICAhdGhyb3dfZXJyb3Ig PyAmZXJyb3IgOiBOVUxMLAorCQkJCQkJCQkJCSAganNlc3RhdGUtPmFyZ3MpOworCisJCQlpZiAo IWVycm9yICYmICFlbXB0eSkKKwkJCQkqb3AtPnJlc251bGwgPSAoRGF0dW1HZXRQb2ludGVyKCpv cC0+cmVzdmFsdWUpID09IE5VTEwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBKU09OX1ZBTFVFX09Q OgorCQkJeworCQkJCUpzb25iVmFsdWUgKmpidiA9IEpzb25QYXRoVmFsdWUoaXRlbSwgcGF0aCwg JmVtcHR5LAorCQkJCQkJCQkJCQkJIXRocm93X2Vycm9yID8gJmVycm9yIDogTlVMTCwKKwkJCQkJ CQkJCQkJCWpzZXN0YXRlLT5hcmdzKTsKKworCQkJCWlmIChqYnYgPT0gTlVMTCkKKwkJCQl7CisJ CQkJCS8qIFdpbGwgYmUgY29lcmNlZCB3aXRoIHJlc3VsdF9jb2VyY2lvbi4gKi8KKwkJCQkJKm9w LT5yZXN2YWx1ZSA9IChEYXR1bSkgMDsKKwkJCQkJKm9wLT5yZXNudWxsID0gdHJ1ZTsKKwkJCQl9 CisJCQkJZWxzZSBpZiAoIWVycm9yICYmICFlbXB0eSkKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAq IElmIHRoZSByZXF1ZXN0ZWQgb3V0cHV0IHR5cGUgaXMganNvbihiKSwgdXNlCisJCQkJCSAqIHJl c3VsdF9jb2VyY2lvbiB0byBkbyB0aGUgY29lcmNpb24uCisJCQkJCSAqLworCQkJCQlpZiAoamV4 cHItPnJldHVybmluZy0+dHlwaWQgPT0gSlNPTk9JRCB8fAorCQkJCQkJamV4cHItPnJldHVybmlu Zy0+dHlwaWQgPT0gSlNPTkJPSUQpCisJCQkJCXsKKwkJCQkJCSpvcC0+cmVzdmFsdWUgPSBKc29u YlBHZXREYXR1bShKc29uYlZhbHVlVG9Kc29uYihqYnYpKTsKKwkJCQkJCSpvcC0+cmVzbnVsbCA9 IGZhbHNlOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJLyoKKwkJCQkJCSAqIEVs c2UsIHVzZSBvbmUgb2YgdGhlIGl0ZW1fY29lcmNpb25zLgorCQkJCQkJICoKKwkJCQkJCSAqIEVy cm9yIG91dCBpZiBubyBjYXN0IGV4cHJlc3Npb24gZXhpc3RzLgorCQkJCQkJICovCisJCQkJCQlF eGVjUHJlcGFyZUpzb25JdGVtQ29lcmNpb24oamJ2LCBqc2VzdGF0ZSwgdGhyb3dfZXJyb3IsCisJ CQkJCQkJCQkJCQkJJmp1bXBfZXZhbF9jb2VyY2lvbiwKKwkJCQkJCQkJCQkJCQlvcC0+cmVzdmFs dWUsIG9wLT5yZXNudWxsKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKworCQlk ZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBTUUwvSlNPTiBleHByZXNzaW9u IG9wICVkIiwgamV4cHItPm9wKTsKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAoZW1wdHkp CisJeworCQlpZiAoamV4cHItPm9uX2VtcHR5KQorCQl7CisJCQlpZiAoamV4cHItPm9uX2VtcHR5 LT5idHlwZSA9PSBKU09OX0JFSEFWSU9SX0VSUk9SKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CQllcnJjb2RlKEVSUkNPREVfTk9fU1FMX0pTT05fSVRFTSksCisJCQkJCQllcnJtc2coIm5vIFNR TC9KU09OIGl0ZW0iKSk7CisJCQllbHNlCisJCQkJcG9zdF9ldmFsLT5lbXB0eS52YWx1ZSA9IEJv b2xHZXREYXR1bSh0cnVlKTsKKworCQkJQXNzZXJ0KGpzZXN0YXRlLT5qdW1wX2VtcHR5ID49IDAp OworCQkJcmV0dXJuIGpzZXN0YXRlLT5qdW1wX2VtcHR5OworCQl9CisJCWVsc2UgaWYgKGpleHBy LT5vbl9lcnJvci0+YnR5cGUgPT0gSlNPTl9CRUhBVklPUl9FUlJPUikKKwkJCWVyZXBvcnQoRVJS T1IsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9OT19TUUxfSlNPTl9JVEVNKSwKKwkJCQkJZXJybXNn KCJubyBTUUwvSlNPTiBpdGVtIikpOworCQllbHNlCisJCQlwb3N0X2V2YWwtPmVycm9yLnZhbHVl ID0gQm9vbEdldERhdHVtKHRydWUpOworCisJCSpvcC0+cmVzdmFsdWUgPSAoRGF0dW0pIDA7CisJ CSpvcC0+cmVzbnVsbCA9IHRydWU7CisKKwkJQXNzZXJ0KGpzZXN0YXRlLT5qdW1wX2Vycm9yID49 IDApOworCQlyZXR1cm4ganNlc3RhdGUtPmp1bXBfZXJyb3I7CisJfQorCisJaWYgKGVycm9yKQor CXsKKwkJQXNzZXJ0KCF0aHJvd19lcnJvciAmJiBqc2VzdGF0ZS0+anVtcF9lcnJvciA+PSAwKTsK KwkJKm9wLT5yZXN2YWx1ZSA9IChEYXR1bSkgMDsKKwkJKm9wLT5yZXNudWxsID0gdHJ1ZTsKKwkJ cG9zdF9ldmFsLT5lcnJvci52YWx1ZSA9IEJvb2xHZXREYXR1bSh0cnVlKTsKKwkJcmV0dXJuIGpz ZXN0YXRlLT5qdW1wX2Vycm9yOworCX0KKworCS8qIEVsc2UgcmV0dXJuIHRoZSBjb2VyY2lvbiBz dGVwIGFkZHJlc3Mgb3IgdGhlIGFkZHJlc3MgdG8gc2tpcCB0byBlbmQuICovCisJcmV0dXJuIGp1 bXBfZXZhbF9jb2VyY2lvbiA+PSAwID8ganVtcF9ldmFsX2NvZXJjaW9uIDoganNlc3RhdGUtPmp1 bXBfZW5kOworfQorCisvKgorICogU2VsZWN0cyBhIGNvZXJjaW9uIGZvciBhIGdpdmVuIEpzb25i VmFsdWUgYmFzZWQgb24gaXRzIHR5cGUuCisgKgorICogT24gcmV0dXJuLCAqcmVzdmFsdWUgYW5k ICpyZXNudWxsIGFyZSBzZXQgdG8gdGhlIHZhbHVlIGV4dHJhY3RlZCBmcm9tIHRoZQorICogSnNv bmJWYWx1ZSBhbmQgKmp1bXBfZXZhbF9pdGVtX2NvZXJjaW9uIGlzIHNldCB0byB0aGUgc3RlcCBh ZGRyZXNzIG9mIHRoZQorICogY29lcmNpb24gZXhwcmVzc2lvbi4KKyAqCisgKiBJZiB0aGUgZm91 bmQgZXhwcmVzc2lvbiBpcyBhIEpzb25Db2VyY2lvbiBub2RlIHRoYXQgbWVhbnMgdGhlIHBhcnNl cgorICogZGlkbnQnIGZpbmQgYSBjYXN0IHRvIGRvIHRoZSBjb2VyY2lvbiwgc28gdGhyb3cgYW4g ZXJyb3IgaWYgdGhlCisgKiBPTiBFUlJPUiBiZWhhdmlvciBzYXlzIHRvIGRvIHNvLgorICovCitz dGF0aWMgdm9pZAorRXhlY1ByZXBhcmVKc29uSXRlbUNvZXJjaW9uKEpzb25iVmFsdWUgKml0ZW0s IEpzb25FeHByU3RhdGUgKmpzZXN0YXRlLAorCQkJCQkJCWJvb2wgdGhyb3dfZXJyb3IsCisJCQkJ CQkJaW50ICpqdW1wX2V2YWxfaXRlbV9jb2VyY2lvbiwKKwkJCQkJCQlEYXR1bSAqcmVzdmFsdWUs IGJvb2wgKnJlc251bGwpCit7CisJaW50CQkgICAqZXZhbF9pdGVtX2NvZXJjaW9uX2p1bXBzID0g anNlc3RhdGUtPmV2YWxfaXRlbV9jb2VyY2lvbl9qdW1wczsKKwlib29sCSAgICppdGVtX2NvZXJj aW9uX3ZpYV9leHByID0ganNlc3RhdGUtPml0ZW1fY29lcmNpb25fdmlhX2V4cHI7CisJYm9vbAkJ dmlhX2V4cHI7CisJaW50CQkJanVtcF90bzsKKwlKc29uYlZhbHVlCWJ1ZjsKKworCWlmIChpdGVt LT50eXBlID09IGpidkJpbmFyeSAmJiBKc29uQ29udGFpbmVySXNTY2FsYXIoaXRlbS0+dmFsLmJp bmFyeS5kYXRhKSkKKwl7CisJCWJvb2wJCWlzX3NjYWxhciBQR19VU0VEX0ZPUl9BU1NFUlRTX09O TFk7CisKKwkJaXNfc2NhbGFyID0gSnNvbmJFeHRyYWN0U2NhbGFyKGl0ZW0tPnZhbC5iaW5hcnku ZGF0YSwgJmJ1Zik7CisJCWl0ZW0gPSAmYnVmOworCQlBc3NlcnQoaXNfc2NhbGFyKTsKKwl9CisK KwkqcmVzbnVsbCA9IGZhbHNlOworCisJLyogZ2V0IGNvZXJjaW9uIHN0YXRlIHJlZmVyZW5jZSBh bmQgZGF0dW0gb2YgdGhlIGNvcnJlc3BvbmRpbmcgU1FMIHR5cGUgKi8KKwlzd2l0Y2ggKGl0ZW0t PnR5cGUpCisJeworCQljYXNlIGpidk51bGw6CisJCQl2aWFfZXhwciA9IGl0ZW1fY29lcmNpb25f dmlhX2V4cHJbSnNvbkl0ZW1UeXBlTnVsbF07CisJCQlqdW1wX3RvID0gZXZhbF9pdGVtX2NvZXJj aW9uX2p1bXBzW0pzb25JdGVtVHlwZU51bGxdOworCQkJKnJlc3ZhbHVlID0gKERhdHVtKSAwOwor CQkJKnJlc251bGwgPSB0cnVlOworCQkJYnJlYWs7CisKKwkJY2FzZSBqYnZTdHJpbmc6CisJCQl2 aWFfZXhwciA9IGl0ZW1fY29lcmNpb25fdmlhX2V4cHJbSnNvbkl0ZW1UeXBlU3RyaW5nXTsKKwkJ CWp1bXBfdG8gPSBldmFsX2l0ZW1fY29lcmNpb25fanVtcHNbSnNvbkl0ZW1UeXBlU3RyaW5nXTsK KwkJCSpyZXN2YWx1ZSA9CisJCQkJUG9pbnRlckdldERhdHVtKGNzdHJpbmdfdG9fdGV4dF93aXRo X2xlbihpdGVtLT52YWwuc3RyaW5nLnZhbCwKKwkJCQkJCQkJCQkJCQkJIGl0ZW0tPnZhbC5zdHJp bmcubGVuKSk7CisJCQlicmVhazsKKworCQljYXNlIGpidk51bWVyaWM6CisJCQl2aWFfZXhwciA9 IGl0ZW1fY29lcmNpb25fdmlhX2V4cHJbSnNvbkl0ZW1UeXBlTnVtZXJpY107CisJCQlqdW1wX3Rv ID0gZXZhbF9pdGVtX2NvZXJjaW9uX2p1bXBzW0pzb25JdGVtVHlwZU51bWVyaWNdOworCQkJKnJl c3ZhbHVlID0gTnVtZXJpY0dldERhdHVtKGl0ZW0tPnZhbC5udW1lcmljKTsKKwkJCWJyZWFrOwor CisJCWNhc2UgamJ2Qm9vbDoKKwkJCXZpYV9leHByID0gaXRlbV9jb2VyY2lvbl92aWFfZXhwcltK c29uSXRlbVR5cGVCb29sZWFuXTsKKwkJCWp1bXBfdG8gPSBldmFsX2l0ZW1fY29lcmNpb25fanVt cHNbSnNvbkl0ZW1UeXBlQm9vbGVhbl07CisJCQkqcmVzdmFsdWUgPSBCb29sR2V0RGF0dW0oaXRl bS0+dmFsLmJvb2xlYW4pOworCQkJYnJlYWs7CisKKwkJY2FzZSBqYnZEYXRldGltZToKKwkJCSpy ZXN2YWx1ZSA9IGl0ZW0tPnZhbC5kYXRldGltZS52YWx1ZTsKKwkJCXN3aXRjaCAoaXRlbS0+dmFs LmRhdGV0aW1lLnR5cGlkKQorCQkJeworCQkJCWNhc2UgREFURU9JRDoKKwkJCQkJdmlhX2V4cHIg PSBpdGVtX2NvZXJjaW9uX3ZpYV9leHByW0pzb25JdGVtVHlwZURhdGVdOworCQkJCQlqdW1wX3Rv ID0gZXZhbF9pdGVtX2NvZXJjaW9uX2p1bXBzW0pzb25JdGVtVHlwZURhdGVdOworCQkJCQlicmVh azsKKwkJCQljYXNlIFRJTUVPSUQ6CisJCQkJCXZpYV9leHByID0gaXRlbV9jb2VyY2lvbl92aWFf ZXhwcltKc29uSXRlbVR5cGVUaW1lXTsKKwkJCQkJanVtcF90byA9IGV2YWxfaXRlbV9jb2VyY2lv bl9qdW1wc1tKc29uSXRlbVR5cGVUaW1lXTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBUSU1FVFpP SUQ6CisJCQkJCXZpYV9leHByID0gaXRlbV9jb2VyY2lvbl92aWFfZXhwcltKc29uSXRlbVR5cGVU aW1ldHpdOworCQkJCQlqdW1wX3RvID0gZXZhbF9pdGVtX2NvZXJjaW9uX2p1bXBzW0pzb25JdGVt VHlwZVRpbWV0el07CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVElNRVNUQU1QT0lEOgorCQkJCQl2 aWFfZXhwciA9IGl0ZW1fY29lcmNpb25fdmlhX2V4cHJbSnNvbkl0ZW1UeXBlVGltZXN0YW1wXTsK KwkJCQkJanVtcF90byA9IGV2YWxfaXRlbV9jb2VyY2lvbl9qdW1wc1tKc29uSXRlbVR5cGVUaW1l c3RhbXBdOworCQkJCQlicmVhazsKKwkJCQljYXNlIFRJTUVTVEFNUFRaT0lEOgorCQkJCQl2aWFf ZXhwciA9IGl0ZW1fY29lcmNpb25fdmlhX2V4cHJbSnNvbkl0ZW1UeXBlVGltZXN0YW1wdHpdOwor CQkJCQlqdW1wX3RvID0gZXZhbF9pdGVtX2NvZXJjaW9uX2p1bXBzW0pzb25JdGVtVHlwZVRpbWVz dGFtcHR6XTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJZWxvZyhFUlJPUiwgInVu ZXhwZWN0ZWQganNvbmIgZGF0ZXRpbWUgdHlwZSBvaWQgJXUiLAorCQkJCQkJIGl0ZW0tPnZhbC5k YXRldGltZS50eXBpZCk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIGpidkFycmF5OgorCQlj YXNlIGpidk9iamVjdDoKKwkJY2FzZSBqYnZCaW5hcnk6CisJCQl2aWFfZXhwciA9IGl0ZW1fY29l cmNpb25fdmlhX2V4cHJbSnNvbkl0ZW1UeXBlQ29tcG9zaXRlXTsKKwkJCWp1bXBfdG8gPSBldmFs X2l0ZW1fY29lcmNpb25fanVtcHNbSnNvbkl0ZW1UeXBlQ29tcG9zaXRlXTsKKwkJCSpyZXN2YWx1 ZSA9IEpzb25iUEdldERhdHVtKEpzb25iVmFsdWVUb0pzb25iKGl0ZW0pKTsKKwkJCWJyZWFrOwor CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBqc29uYiB2YWx1ZSB0eXBl ICVkIiwgaXRlbS0+dHlwZSk7CisJfQorCisJLyogSWYgdGhlIGV4cHJlc3Npb24gaXMgYSBKc29u Q29lcmNpb24sIHRocm93IGFuIGVycm9yLiAqLworCWlmIChqdW1wX3RvID49IDAgJiYgIXZpYV9l eHByKQorCXsKKwkJaWYgKHRocm93X2Vycm9yKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJZXJy Y29kZShFUlJDT0RFX1NRTF9KU09OX0lURU1fQ0FOTk9UX0JFX0NBU1RfVE9fVEFSR0VUX1RZUEUp LAorCQkJCQllcnJtc2coIlNRTC9KU09OIGl0ZW0gY2Fubm90IGJlIGNhc3QgdG8gdGFyZ2V0IHR5 cGUiKSk7CisKKwkJKnJlc3ZhbHVlID0gKERhdHVtKSAwOworCQkqcmVzbnVsbCA9IHRydWU7CisJ fQorCisJKmp1bXBfZXZhbF9pdGVtX2NvZXJjaW9uID0ganVtcF90bzsKK30KKworLyoKKyAqIENv ZXJjZSBhIGpzb25iIHZhbHVlIHByb2R1Y2VkIGJ5IEV4ZWNFdmFsSnNvbkV4cHJQYXRoKCkgb3Ig YW4gT04gRVJST1IgLworICogRU1QVFkgYmVoYXZpb3IgZXhwcmVzc2lvbiB0byB0aGUgdGFyZ2V0 IHR5cGUgYnkgZWl0aGVyIGNhbGxpbmcKKyAqIGpzb25fcG9wdWxhdGVfdHlwZSgpIG9yIGJ5IGRp cmVjdGx5IGNhbGxpbmcgdGhlIHR5cGUncyBpbnB1dCBmdW5jdGlvbiBpbgorICogc29tZSBjYXNl cy4KKyAqCisgKiBBbnkgc29mdCBlcnJvcnMgdGhhdCBvY2N1ciB3aWxsIGJlIGNoZWNrZWQgYnkg RUVPUF9KU09ORVhQUl9DT0VSQ0lPTl9GSU5JU0gKKyAqIHRoYXQgd2lsbCBydW4gcmlnaHQgYWZ0 ZXIgdGhpcy4KKyAqLwordm9pZAorRXhlY0V2YWxKc29uQ29lcmNpb24oRXhwclN0YXRlICpzdGF0 ZSwgRXhwckV2YWxTdGVwICpvcCwKKwkJCQkJIEV4cHJDb250ZXh0ICplY29udGV4dCkKK3sKKwlK c29uQ29lcmNpb24gKmNvZXJjaW9uID0gb3AtPmQuanNvbmV4cHJfY29lcmNpb24uY29lcmNpb247 CisJRXJyb3JTYXZlQ29udGV4dCAqZXNjb250ZXh0ID0gb3AtPmQuanNvbmV4cHJfY29lcmNpb24u ZXNjb250ZXh0OworCURhdHVtCQlyZXMgPSAqb3AtPnJlc3ZhbHVlOworCWJvb2wJCXJlc251bGwg PSAqb3AtPnJlc251bGw7CisJSnNvbmIJICAgKmpiID0gIXJlc251bGwgPyBEYXR1bUdldEpzb25i UChyZXMpIDogTlVMTDsKKworCS8qCisJICogQ2FuJ3QgZ28gdG8ganNvbl9wb3B1bGF0ZV90eXBl KCkgZm9yIHNjYWxhcnMgd2hlbiBPTUlUIFFVT1RFUyBpcworCSAqIHNwZWNpZmllZCwgYmVjYXVz ZSBpdCBrZWVwcyB0aGUgcXVvdGVzIGJ5IGRlZmF1bHQuICBTbyBsZXQncyBkbyB0aGUKKwkgKiBk ZWVkIG91cnNlbHZlcyBieSBjYWxsaW5nIHRoZSBpbnB1dCBmdW5jdGlvbiwgdGhhdCBpcywgYWZ0 ZXIgcmVtb3ZpbmcKKwkgKiB0aGUgcXVvdGVzLgorCSAqLworCWlmIChqYiAmJiBKQl9ST09UX0lT X1NDQUxBUihqYikgJiYgY29lcmNpb24tPm9taXRfcXVvdGVzKQorCXsKKwkJRm1nckluZm8gICAq aW5wdXRfZmluZm8gPSBvcC0+ZC5qc29uZXhwcl9jb2VyY2lvbi5pbnB1dF9maW5mbzsKKwkJT2lk CQkJdHlwaW9wYXJhbSA9IG9wLT5kLmpzb25leHByX2NvZXJjaW9uLnR5cGlvcGFyYW07CisJCWNo YXIJICAgKnZhbF9zdHJpbmcgPSBKc29uYlVucXVvdGUoamIpOworCisJCSh2b2lkKSBJbnB1dEZ1 bmN0aW9uQ2FsbFNhZmUoaW5wdXRfZmluZm8sIHZhbF9zdHJpbmcsIHR5cGlvcGFyYW0sCisJCQkJ CQkJCQkgY29lcmNpb24tPnRhcmdldHR5cG1vZCwKKwkJCQkJCQkJCSAoTm9kZSAqKSBlc2NvbnRl eHQsCisJCQkJCQkJCQkgb3AtPnJlc3ZhbHVlKTsKKwl9CisJZWxzZQorCXsKKwkJdm9pZAkgICAq Y2FjaGUgPSBvcC0+ZC5qc29uZXhwcl9jb2VyY2lvbi5qc29uX3BvcHVsYXRlX3R5cGVfY2FjaGU7 CisKKwkJKm9wLT5yZXN2YWx1ZSA9IGpzb25fcG9wdWxhdGVfdHlwZShyZXMsIEpTT05CT0lELAor CQkJCQkJCQkJCSAgIGNvZXJjaW9uLT50YXJnZXR0eXBlLAorCQkJCQkJCQkJCSAgIGNvZXJjaW9u LT50YXJnZXR0eXBtb2QsCisJCQkJCQkJCQkJICAgJmNhY2hlLAorCQkJCQkJCQkJCSAgIGVjb250 ZXh0LT5lY3h0X3Blcl9xdWVyeV9tZW1vcnksCisJCQkJCQkJCQkJICAgb3AtPnJlc251bGwsIChO b2RlICopIGVzY29udGV4dCk7CisJfQorfQorCisvKgorICogQ2hlY2tzIGlmIHRoZSBjb2VyY2lv biBldmFsdWF0aW9uIGxlZCB0byBhbiBlcnJvci4gIElmIGFuIGVycm9yIGRpZCBvY2N1ciwKKyAq IHRoaXMgc2V0cyBwb3N0X2V2YWwtPmVycm9yIHRvIHRyaWdnZXIgdGhlIHN1YnNlcXVlbnQgT04g RVJST1IgaGFuZGxpbmcKKyAqIHN0ZXBzLgorICovCit2b2lkCitFeGVjRXZhbEpzb25Db2VyY2lv bkZpbmlzaChFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wKQoreworCUpzb25FeHBy U3RhdGUgKmpzZXN0YXRlID0gb3AtPmQuanNvbmV4cHIuanNlc3RhdGU7CisKKwlpZiAoU09GVF9F UlJPUl9PQ0NVUlJFRCgmanNlc3RhdGUtPmVzY29udGV4dCkpCisJeworCQkqb3AtPnJlc3ZhbHVl ID0gKERhdHVtKSAwOworCQkqb3AtPnJlc251bGwgPSB0cnVlOworCQlqc2VzdGF0ZS0+cG9zdF9l dmFsLmVycm9yLnZhbHVlID0gQm9vbEdldERhdHVtKHRydWUpOworCisJCS8qCisJCSAqIEFsc28g bWFrZSBFcnJvclNhdmVDb250ZXh0IHJlYWR5IGZvciB0aGUgbmV4dCByb3cuICBTaW5jZSB3ZSBu ZXZlcgorCQkgKiBzZXQgZGV0YWlsc193YW50ZWQsIHdlIGRvbid0IG5lZWQgdG8gYWxzbyByZXNl dCBlcnJvcl9kYXRhLCB3aGljaAorCQkgKiB3b3VsZCBiZSBOVUxMIGFueXdheS4KKwkJICovCisJ CUFzc2VydCghanNlc3RhdGUtPmVzY29udGV4dC5kZXRhaWxzX3dhbnRlZCAmJgorCQkJICAganNl c3RhdGUtPmVzY29udGV4dC5lcnJvcl9kYXRhID09IE5VTEwpOworCQlqc2VzdGF0ZS0+ZXNjb250 ZXh0LmVycm9yX29jY3VycmVkID0gZmFsc2U7CisJfQorfQogCiAvKgogICogRXhlY0V2YWxHcm91 cGluZ0Z1bmMKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5j IGIvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMKaW5kZXggMDk5OTQ1MDNiMS4u MzhiZTA5OWRmZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHBy LmMKKysrIGIvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMKQEAgLTE5MzAsNiAr MTkzMCwxNTAgQEAgbGx2bV9jb21waWxlX2V4cHIoRXhwclN0YXRlICpzdGF0ZSkKIAkJCQlMTFZN QnVpbGRCcihiLCBvcGJsb2Nrc1tvcG5vICsgMV0pOwogCQkJCWJyZWFrOwogCisJCQljYXNlIEVF T1BfSlNPTkVYUFJfUEFUSDoKKwkJCQl7CisJCQkJCUpzb25FeHByU3RhdGUgKmpzZXN0YXRlID0g b3AtPmQuanNvbmV4cHIuanNlc3RhdGU7CisJCQkJCUxMVk1WYWx1ZVJlZiB2X3JldDsKKworCQkJ CQkvKgorCQkJCQkgKiBDYWxsIEV4ZWNFdmFsSnNvbkV4cHJQYXRoKCkuICBJdCByZXR1cm5zIHRo ZSBhZGRyZXNzIG9mCisJCQkJCSAqIHRoZSBzdGVwIHRvIHBlcmZvcm0gbmV4dC4KKwkJCQkJICov CisJCQkJCXZfcmV0ID0gYnVpbGRfRXZhbFhGdW5jKGIsIG1vZCwgIkV4ZWNFdmFsSnNvbkV4cHJQ YXRoIiwKKwkJCQkJCQkJCQkJdl9zdGF0ZSwgb3AsIHZfZWNvbnRleHQpOworCisJCQkJCS8qCisJ CQkJCSAqIEJ1aWxkIGEgc3dpdGNoIHRvIG1hcCB0aGUgcmV0dXJuIHZhbHVlLCB3aGljaCBpcyBh CisJCQkJCSAqIHJ1bnRpbWUgdmFsdWUgb2YgdGhlIHN0ZXAgYWRkcmVzcyB0byBwZXJmb3JtIG5l eHQsIHRvCisJCQkJCSAqIGVpdGhlciBqdW1wX2VtcHR5LCBqdW1wX2Vycm9yLCBvciB0aGUgY29l cmNpb24KKwkJCQkJICogZXhwcmVzc2lvbi4KKwkJCQkJICovCisJCQkJCWlmIChqc2VzdGF0ZS0+ anVtcF9lbXB0eSA+PSAwIHx8CisJCQkJCQlqc2VzdGF0ZS0+anVtcF9lcnJvciA+PSAwIHx8CisJ CQkJCQlqc2VzdGF0ZS0+anVtcF9ldmFsX3Jlc3VsdF9jb2VyY2lvbiA+PSAwIHx8CisJCQkJCQlq c2VzdGF0ZS0+bnVtX2l0ZW1fY29lcmNpb25zID4gMCkKKwkJCQkJeworCQkJCQkJaW50CQkJaTsK KwkJCQkJCUxMVk1WYWx1ZVJlZiB2X2p1bXBfZW1wdHk7CisJCQkJCQlMTFZNVmFsdWVSZWYgdl9q dW1wX2Vycm9yOworCQkJCQkJTExWTVZhbHVlUmVmIHZfanVtcF9jb2VyY2lvbjsKKwkJCQkJCUxM Vk1WYWx1ZVJlZiB2X3N3aXRjaDsKKwkJCQkJCUxMVk1CYXNpY0Jsb2NrUmVmIGJfZG9uZSwKKwkJ CQkJCQkJCWJfZW1wdHksCisJCQkJCQkJCQliX2Vycm9yLAorCQkJCQkJCQkJYl9yZXN1bHRfY29l cmNpb24sCisJCQkJCQkJCSAgICpiX2l0ZW1fY29lcmNpb25zID0gTlVMTDsKKworCQkJCQkJYl9l bXB0eSA9CisJCQkJCQkJbF9iYl9iZWZvcmVfdihvcGJsb2Nrc1tvcG5vICsgMV0sCisJCQkJCQkJ CQkJICAib3AuJWQuanNvbmV4cHJfZW1wdHkiLCBvcG5vKTsKKwkJCQkJCWJfZXJyb3IgPQorCQkJ CQkJCWxfYmJfYmVmb3JlX3Yob3BibG9ja3Nbb3BubyArIDFdLAorCQkJCQkJCQkJCSAgIm9wLiVk Lmpzb25leHByX2Vycm9yIiwgb3Bubyk7CisJCQkJCQliX3Jlc3VsdF9jb2VyY2lvbiA9CisJCQkJ CQkJbF9iYl9iZWZvcmVfdihvcGJsb2Nrc1tvcG5vICsgMV0sCisJCQkJCQkJCQkJICAib3AuJWQu anNvbmV4cHJfcmVzdWx0X2NvZXJjaW9uIiwgb3Bubyk7CisJCQkJCQlpZiAoanNlc3RhdGUtPm51 bV9pdGVtX2NvZXJjaW9ucyA+IDApCisJCQkJCQl7CisJCQkJCQkJYl9pdGVtX2NvZXJjaW9ucyA9 IHBhbGxvYyhzaXplb2YoTExWTUJhc2ljQmxvY2tSZWYpICoKKwkJCQkJCQkJCQkJCQkgIGpzZXN0 YXRlLT5udW1faXRlbV9jb2VyY2lvbnMpOworCQkJCQkJCWZvciAoaSA9IDA7IGkgPCBqc2VzdGF0 ZS0+bnVtX2l0ZW1fY29lcmNpb25zOyBpKyspCisJCQkJCQkJeworCQkJCQkJCQliX2l0ZW1fY29l cmNpb25zW2ldID0KKwkJCQkJCQkJCWxfYmJfYmVmb3JlX3Yob3BibG9ja3Nbb3BubyArIDFdLAor CQkJCQkJCQkJCQkJICAib3AuJWQuanNvbmV4cHJfaXRlbV9jb2VyY2lvbi4lZCIsCisJCQkJCQkJ CQkJCQkgIG9wbm8sIGkpOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJCWJfZG9uZSA9CisJCQkJ CQkJbF9iYl9iZWZvcmVfdihvcGJsb2Nrc1tvcG5vICsgMV0sCisJCQkJCQkJCQkJICAib3AuJWQu anNvbmV4cHJfZG9uZSIsIG9wbm8pOworCisJCQkJCQl2X3N3aXRjaCA9IExMVk1CdWlsZFN3aXRj aChiLAorCQkJCQkJCQkJCQkJICAgdl9yZXQsCisJCQkJCQkJCQkJCQkgICBiX2RvbmUsCisJCQkJ CQkJCQkJCQkgICBqc2VzdGF0ZS0+bnVtX2l0ZW1fY29lcmNpb25zICsgMyk7CisJCQkJCQkvKiBS ZXR1cm5lZCBqc2VzdGF0ZS0+anVtcF9lbXB0eT8gKi8KKwkJCQkJCWlmIChqc2VzdGF0ZS0+anVt cF9lbXB0eSA+PSAwKQorCQkJCQkJeworCQkJCQkJCXZfanVtcF9lbXB0eSA9IGxfaW50MzJfY29u c3QobGMsIGpzZXN0YXRlLT5qdW1wX2VtcHR5KTsKKwkJCQkJCQlMTFZNQWRkQ2FzZSh2X3N3aXRj aCwgdl9qdW1wX2VtcHR5LCBiX2VtcHR5KTsKKwkJCQkJCX0KKwkJCQkJCS8qIFJldHVybmVkIGpz ZXN0YXRlLT5qdW1wX2Vycm9yPyAqLworCQkJCQkJaWYgKGpzZXN0YXRlLT5qdW1wX2Vycm9yID49 IDApCisJCQkJCQl7CisJCQkJCQkJdl9qdW1wX2Vycm9yID0gbF9pbnQzMl9jb25zdChsYywganNl c3RhdGUtPmp1bXBfZXJyb3IpOworCQkJCQkJCUxMVk1BZGRDYXNlKHZfc3dpdGNoLCB2X2p1bXBf ZXJyb3IsIGJfZXJyb3IpOworCQkJCQkJfQorCQkJCQkJLyogUmV0dXJuZWQganNlc3RhdGUtPmp1 bXBfZXZhbF9yZXN1bHRfY29lcmNpb24/ICovCisJCQkJCQlpZiAoanNlc3RhdGUtPmp1bXBfZXZh bF9yZXN1bHRfY29lcmNpb24gPj0gMCkKKwkJCQkJCXsKKwkJCQkJCQl2X2p1bXBfY29lcmNpb24g PSBsX2ludDMyX2NvbnN0KGxjLCBqc2VzdGF0ZS0+anVtcF9ldmFsX3Jlc3VsdF9jb2VyY2lvbik7 CisJCQkJCQkJTExWTUFkZENhc2Uodl9zd2l0Y2gsIHZfanVtcF9jb2VyY2lvbiwgYl9yZXN1bHRf Y29lcmNpb24pOworCQkJCQkJfQorCisJCQkJCQkvKgorCQkJCQkJICogUmV0dXJuZWQgb25lIG9m CisJCQkJCQkgKiBqc2VzdGF0ZS0+ZXZhbF9pdGVtX2NvZXJjaW9uX2p1bXBzW10/CisJCQkJCQkg Ki8KKwkJCQkJCWZvciAoaSA9IDA7IGkgPCBqc2VzdGF0ZS0+bnVtX2l0ZW1fY29lcmNpb25zOyBp KyspCisJCQkJCQl7CisJCQkJCQkJaWYgKGpzZXN0YXRlLT5ldmFsX2l0ZW1fY29lcmNpb25fanVt cHNbaV0gPj0gMCkKKwkJCQkJCQl7CisJCQkJCQkJCXZfanVtcF9jb2VyY2lvbiA9IGxfaW50MzJf Y29uc3QobGMsIGpzZXN0YXRlLT5ldmFsX2l0ZW1fY29lcmNpb25fanVtcHNbaV0pOworCQkJCQkJ CQlMTFZNQWRkQ2FzZSh2X3N3aXRjaCwgdl9qdW1wX2NvZXJjaW9uLCBiX2l0ZW1fY29lcmNpb25z W2ldKTsKKwkJCQkJCQl9CisJCQkJCQl9CisKKwkJCQkJCS8qIE9OIEVNUFRZIGNvZGUgKi8KKwkJ CQkJCUxMVk1Qb3NpdGlvbkJ1aWxkZXJBdEVuZChiLCBiX2VtcHR5KTsKKwkJCQkJCWlmIChqc2Vz dGF0ZS0+anVtcF9lbXB0eSA+PSAwKQorCQkJCQkJCUxMVk1CdWlsZEJyKGIsIG9wYmxvY2tzW2pz ZXN0YXRlLT5qdW1wX2VtcHR5XSk7CisJCQkJCQllbHNlCisJCQkJCQkJTExWTUJ1aWxkVW5yZWFj aGFibGUoYik7CisJCQkJCQkvKiBPTiBFUlJPUiBjb2RlICovCisJCQkJCQlMTFZNUG9zaXRpb25C dWlsZGVyQXRFbmQoYiwgYl9lcnJvcik7CisJCQkJCQlpZiAoanNlc3RhdGUtPmp1bXBfZXJyb3Ig Pj0gMCkKKwkJCQkJCQlMTFZNQnVpbGRCcihiLCBvcGJsb2Nrc1tqc2VzdGF0ZS0+anVtcF9lcnJv cl0pOworCQkJCQkJZWxzZQorCQkJCQkJCUxMVk1CdWlsZFVucmVhY2hhYmxlKGIpOworCQkJCQkJ LyogcmVzdWx0X2NvZXJjaW9uIGNvZGUgKi8KKwkJCQkJCUxMVk1Qb3NpdGlvbkJ1aWxkZXJBdEVu ZChiLCBiX3Jlc3VsdF9jb2VyY2lvbik7CisJCQkJCQlpZiAoanNlc3RhdGUtPmp1bXBfZXZhbF9y ZXN1bHRfY29lcmNpb24gPj0gMCkKKwkJCQkJCQlMTFZNQnVpbGRCcihiLCBvcGJsb2Nrc1tqc2Vz dGF0ZS0+anVtcF9ldmFsX3Jlc3VsdF9jb2VyY2lvbl0pOworCQkJCQkJZWxzZQorCQkJCQkJCUxM Vk1CdWlsZFVucmVhY2hhYmxlKGIpOworCQkJCQkJLyogaXRlbSBjb2VyY2lvbiBjb2RlIGJsb2Nr cyAqLworCQkJCQkJZm9yIChpID0gMDsgaSA8IGpzZXN0YXRlLT5udW1faXRlbV9jb2VyY2lvbnM7 IGkrKykKKwkJCQkJCXsKKwkJCQkJCQlMTFZNUG9zaXRpb25CdWlsZGVyQXRFbmQoYiwgYl9pdGVt X2NvZXJjaW9uc1tpXSk7CisJCQkJCQkJaWYgKGpzZXN0YXRlLT5ldmFsX2l0ZW1fY29lcmNpb25f anVtcHNbaV0gPj0gMCkKKwkJCQkJCQkJTExWTUJ1aWxkQnIoYiwgb3BibG9ja3NbanNlc3RhdGUt PmV2YWxfaXRlbV9jb2VyY2lvbl9qdW1wc1tpXV0pOworCQkJCQkJCWVsc2UKKwkJCQkJCQkJTExW TUJ1aWxkVW5yZWFjaGFibGUoYik7CisJCQkJCQl9CisKKwkJCQkJCUxMVk1Qb3NpdGlvbkJ1aWxk ZXJBdEVuZChiLCBiX2RvbmUpOworCQkJCQl9CisKKwkJCQkJTExWTUJ1aWxkQnIoYiwgb3BibG9j a3Nbb3BubyArIDFdKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQljYXNlIEVFT1BfSlNPTkVY UFJfQ09FUkNJT046CisJCQkJYnVpbGRfRXZhbFhGdW5jKGIsIG1vZCwgIkV4ZWNFdmFsSnNvbkNv ZXJjaW9uIiwKKwkJCQkJCQkJdl9zdGF0ZSwgb3AsIHZfZWNvbnRleHQpOworCisJCQkJTExWTUJ1 aWxkQnIoYiwgb3BibG9ja3Nbb3BubyArIDFdKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBFRU9Q X0pTT05FWFBSX0NPRVJDSU9OX0ZJTklTSDoKKwkJCQlidWlsZF9FdmFsWEZ1bmMoYiwgbW9kLCAi RXhlY0V2YWxKc29uQ29lcmNpb25GaW5pc2giLAorCQkJCQkJCQl2X3N0YXRlLCBvcCk7CisKKwkJ CQlMTFZNQnVpbGRCcihiLCBvcGJsb2Nrc1tvcG5vICsgMV0pOworCQkJCWJyZWFrOworCiAJCQlj YXNlIEVFT1BfQUdHUkVGOgogCQkJCXsKIAkJCQkJTExWTVZhbHVlUmVmIHZfYWdnbm87CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X3R5cGVzLmMgYi9zcmMvYmFja2Vu ZC9qaXQvbGx2bS9sbHZtaml0X3R5cGVzLmMKaW5kZXggNDdjOWRhZjQwMi4uZWRkMWUxNjc5YiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF90eXBlcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfdHlwZXMuYwpAQCAtMTcyLDYgKzE3Miw5IEBAIHZv aWQJICAgKnJlZmVyZW5jZWRfZnVuY3Rpb25zW10gPQogCUV4ZWNFdmFsWG1sRXhwciwKIAlFeGVj RXZhbEpzb25Db25zdHJ1Y3RvciwKIAlFeGVjRXZhbEpzb25Jc1ByZWRpY2F0ZSwKKwlFeGVjRXZh bEpzb25Db2VyY2lvbiwKKwlFeGVjRXZhbEpzb25Db2VyY2lvbkZpbmlzaCwKKwlFeGVjRXZhbEpz b25FeHByUGF0aCwKIAlNYWtlRXhwYW5kZWRPYmplY3RSZWFkT25seUludGVybmFsLAogCXNsb3Rf Z2V0bWlzc2luZ2F0dHJzLAogCXNsb3RfZ2V0c29tZWF0dHJzX2ludCwKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNz LmMKaW5kZXggYTAyMzMyYTFlYy4uMDlhMDVhMDM3MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv bm9kZXMvbWFrZWZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKQEAg LTg1Nyw2ICs4NTcsMjQgQEAgbWFrZUpzb25WYWx1ZUV4cHIoRXhwciAqcmF3X2V4cHIsIEV4cHIg KmZvcm1hdHRlZF9leHByLAogCXJldHVybiBqdmU7CiB9CiAKKy8qCisgKiBtYWtlSnNvbkJlaGF2 aW9yIC0KKyAqCSAgY3JlYXRlcyBhIEpzb25CZWhhdmlvciBub2RlCisgKi8KK0pzb25CZWhhdmlv ciAqCittYWtlSnNvbkJlaGF2aW9yKEpzb25CZWhhdmlvclR5cGUgdHlwZSwgTm9kZSAqZXhwciwg SnNvbkNvZXJjaW9uICpjb2VyY2lvbiwKKwkJCQkgaW50IGxvY2F0aW9uKQoreworCUpzb25CZWhh dmlvciAqYmVoYXZpb3IgPSBtYWtlTm9kZShKc29uQmVoYXZpb3IpOworCisJYmVoYXZpb3ItPmJ0 eXBlID0gdHlwZTsKKwliZWhhdmlvci0+ZXhwciA9IGV4cHI7CisJYmVoYXZpb3ItPmNvZXJjaW9u ID0gY29lcmNpb247CisJYmVoYXZpb3ItPmxvY2F0aW9uID0gbG9jYXRpb247CisKKwlyZXR1cm4g YmVoYXZpb3I7Cit9CisKIC8qCiAgKiBtYWtlSnNvbktleVZhbHVlIC0KICAqCSAgY3JlYXRlcyBh IEpzb25LZXlWYWx1ZSBub2RlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVu Y3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCmluZGV4IGUxYTViYzdlOTUuLjJl MzU4NGE3ZTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCisrKyBi L3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCkBAIC0yMzQsNiArMjM0LDMzIEBAIGV4cHJU eXBlKGNvbnN0IE5vZGUgKmV4cHIpCiAJCWNhc2UgVF9Kc29uSXNQcmVkaWNhdGU6CiAJCQl0eXBl ID0gQk9PTE9JRDsKIAkJCWJyZWFrOworCQljYXNlIFRfSnNvbkV4cHI6CisJCQl7CisJCQkJY29u c3QgSnNvbkV4cHIgKmpleHByID0gKGNvbnN0IEpzb25FeHByICopIGV4cHI7CisKKwkJCQl0eXBl ID0gamV4cHItPnJldHVybmluZy0+dHlwaWQ7CisJCQkJYnJlYWs7CisJCQl9CisJCWNhc2UgVF9K c29uQ29lcmNpb246CisJCQl7CisJCQkJY29uc3QgSnNvbkNvZXJjaW9uICpjb2VyY2lvbiA9IChj b25zdCBKc29uQ29lcmNpb24gKikgZXhwcjsKKworCQkJCXR5cGUgPSBjb2VyY2lvbi0+dGFyZ2V0 dHlwZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJY2FzZSBUX0pzb25JdGVtQ29lcmNpb246CisJCQl0 eXBlID0gZXhwclR5cGUoKChKc29uSXRlbUNvZXJjaW9uICopIGV4cHIpLT5jb2VyY2lvbik7CisJ CQlicmVhazsKKwkJY2FzZSBUX0pzb25CZWhhdmlvcjoKKwkJCXsKKwkJCQljb25zdCBKc29uQmVo YXZpb3IgKmJlaGF2aW9yID0gKGNvbnN0IEpzb25CZWhhdmlvciAqKSBleHByOworCisJCQkJaWYg KGJlaGF2aW9yLT5jb2VyY2lvbikKKwkJCQkJdHlwZSA9IGV4cHJUeXBlKChOb2RlICopIGJlaGF2 aW9yLT5jb2VyY2lvbik7CisJCQkJZWxzZQorCQkJCQl0eXBlID0gZXhwclR5cGUoYmVoYXZpb3It PmV4cHIpOworCQkJCWJyZWFrOworCQkJfQogCQljYXNlIFRfTnVsbFRlc3Q6CiAJCQl0eXBlID0g Qk9PTE9JRDsKIAkJCWJyZWFrOwpAQCAtNDkxLDggKzUxOCwzMiBAQCBleHByVHlwbW9kKGNvbnN0 IE5vZGUgKmV4cHIpCiAJCQlyZXR1cm4gKChjb25zdCBTUUxWYWx1ZUZ1bmN0aW9uICopIGV4cHIp LT50eXBtb2Q7CiAJCWNhc2UgVF9Kc29uVmFsdWVFeHByOgogCQkJcmV0dXJuIGV4cHJUeXBtb2Qo KE5vZGUgKikgKChjb25zdCBKc29uVmFsdWVFeHByICopIGV4cHIpLT5mb3JtYXR0ZWRfZXhwcik7 Ci0JCWNhc2UgVF9Kc29uQ29uc3RydWN0b3JFeHByOgotCQkJcmV0dXJuICgoY29uc3QgSnNvbkNv bnN0cnVjdG9yRXhwciAqKSBleHByKS0+cmV0dXJuaW5nLT50eXBtb2Q7CisJCWNhc2UgVF9Kc29u RXhwcjoKKwkJCXsKKwkJCQljb25zdCBKc29uRXhwciAqamV4cHIgPSAoY29uc3QgSnNvbkV4cHIg KikgZXhwcjsKKworCQkJCXJldHVybiBqZXhwci0+cmV0dXJuaW5nLT50eXBtb2Q7CisJCQl9CisJ CQlicmVhazsKKwkJY2FzZSBUX0pzb25Db2VyY2lvbjoKKwkJCXsKKwkJCQljb25zdCBKc29uQ29l cmNpb24gKmNvZXJjaW9uID0gKGNvbnN0IEpzb25Db2VyY2lvbiAqKSBleHByOworCisJCQkJcmV0 dXJuIGNvZXJjaW9uLT50YXJnZXR0eXBtb2Q7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX0pz b25JdGVtQ29lcmNpb246CisJCQlyZXR1cm4gZXhwclR5cG1vZCgoKEpzb25JdGVtQ29lcmNpb24g KikgZXhwciktPmNvZXJjaW9uKTsKKwkJY2FzZSBUX0pzb25CZWhhdmlvcjoKKwkJCXsKKwkJCQlj b25zdCBKc29uQmVoYXZpb3IgKmJlaGF2aW9yID0gKGNvbnN0IEpzb25CZWhhdmlvciAqKSBleHBy OworCisJCQkJaWYgKGJlaGF2aW9yLT5jb2VyY2lvbikKKwkJCQkJcmV0dXJuIGV4cHJUeXBtb2Qo KE5vZGUgKikgYmVoYXZpb3ItPmNvZXJjaW9uKTsKKwkJCQllbHNlCisJCQkJCXJldHVybiBleHBy VHlwbW9kKGJlaGF2aW9yLT5leHByKTsKKwkJCX0KKwkJCWJyZWFrOwogCQljYXNlIFRfQ29lcmNl VG9Eb21haW46CiAJCQlyZXR1cm4gKChjb25zdCBDb2VyY2VUb0RvbWFpbiAqKSBleHByKS0+cmVz dWx0dHlwbW9kOwogCQljYXNlIFRfQ29lcmNlVG9Eb21haW5WYWx1ZToKQEAgLTk2OSw2ICsxMDIw LDI3IEBAIGV4cHJDb2xsYXRpb24oY29uc3QgTm9kZSAqZXhwcikKIAkJCS8qIElTIEpTT04ncyBy ZXN1bHQgaXMgYm9vbGVhbiAuLi4gKi8KIAkJCWNvbGwgPSBJbnZhbGlkT2lkOwkvKiAuLi4gc28g aXQgaGFzIG5vIGNvbGxhdGlvbiAqLwogCQkJYnJlYWs7CisJCWNhc2UgVF9Kc29uRXhwcjoKKwkJ CWNvbGwgPSBleHByQ29sbGF0aW9uKCgoSnNvbkV4cHIgKikgZXhwciktPnJlc3VsdF9jb2VyY2lv bik7CisJCQlicmVhazsKKwkJY2FzZSBUX0pzb25Db2VyY2lvbjoKKwkJCWNvbGwgPSAoKGNvbnN0 IEpzb25Db2VyY2lvbiAqKSBleHByKS0+Y29sbGF0aW9uOworCQkJYnJlYWs7CisJCWNhc2UgVF9K c29uSXRlbUNvZXJjaW9uOgorCQkJY29sbCA9IGV4cHJDb2xsYXRpb24oKChKc29uSXRlbUNvZXJj aW9uICopIGV4cHIpLT5jb2VyY2lvbik7CisJCQlicmVhazsKKwkJY2FzZSBUX0pzb25CZWhhdmlv cjoKKwkJCXsKKwkJCQlKc29uQmVoYXZpb3IgKmJlaGF2aW9yID0gKEpzb25CZWhhdmlvciAqKSBl eHByOworCisJCQkJaWYgKGJlaGF2aW9yLT5jb2VyY2lvbikKKwkJCQkJY29sbCA9IGV4cHJDb2xs YXRpb24oKE5vZGUgKikgYmVoYXZpb3ItPmNvZXJjaW9uKTsKKwkJCQllbHNlIGlmIChiZWhhdmlv ci0+ZXhwcikKKwkJCQkJY29sbCA9IGV4cHJDb2xsYXRpb24oYmVoYXZpb3ItPmV4cHIpOworCQkJ CWVsc2UKKwkJCQkJY29sbCA9IEludmFsaWRPaWQ7CisJCQl9CisJCQlicmVhazsKIAkJY2FzZSBU X051bGxUZXN0OgogCQkJLyogTnVsbFRlc3QncyByZXN1bHQgaXMgYm9vbGVhbiAuLi4gKi8KIAkJ CWNvbGwgPSBJbnZhbGlkT2lkOwkvKiAuLi4gc28gaXQgaGFzIG5vIGNvbGxhdGlvbiAqLwpAQCAt MTIwNSw2ICsxMjc3LDQyIEBAIGV4cHJTZXRDb2xsYXRpb24oTm9kZSAqZXhwciwgT2lkIGNvbGxh dGlvbikKIAkJY2FzZSBUX0pzb25Jc1ByZWRpY2F0ZToKIAkJCUFzc2VydCghT2lkSXNWYWxpZChj b2xsYXRpb24pKTsgLyogcmVzdWx0IGlzIGFsd2F5cyBib29sZWFuICovCiAJCQlicmVhazsKKwkJ Y2FzZSBUX0pzb25FeHByOgorCQkJeworCQkJCUpzb25FeHByICAgKmpleHByID0gKEpzb25FeHBy ICopIGV4cHI7CisKKwkJCQlpZiAoamV4cHItPnJlc3VsdF9jb2VyY2lvbikKKwkJCQkJZXhwclNl dENvbGxhdGlvbigoTm9kZSAqKSBqZXhwci0+cmVzdWx0X2NvZXJjaW9uLCBjb2xsYXRpb24pOwor CQkJCWVsc2UKKwkJCQkJQXNzZXJ0KCFPaWRJc1ZhbGlkKGNvbGxhdGlvbikpOyAvKiByZXN1bHQg aXMgYWx3YXlzIGEKKwkJCQkJCQkJCQkJCQkgKiBqc29uW2JdIHR5cGUgKi8KKwkJCX0KKwkJCWJy ZWFrOworCQljYXNlIFRfSnNvbkl0ZW1Db2VyY2lvbjoKKwkJCXsKKwkJCQlKc29uSXRlbUNvZXJj aW9uICppdGVtX2NvZXJjaW9uID0gKEpzb25JdGVtQ29lcmNpb24gKikgZXhwcjsKKworCQkJCWlm IChpdGVtX2NvZXJjaW9uLT5jb2VyY2lvbikKKwkJCQkJZXhwclNldENvbGxhdGlvbihpdGVtX2Nv ZXJjaW9uLT5jb2VyY2lvbiwgY29sbGF0aW9uKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRf SnNvbkNvZXJjaW9uOgorCQkJeworCQkJCUpzb25Db2VyY2lvbiAqY29lcmNpb24gPSAoSnNvbkNv ZXJjaW9uICopIGV4cHI7CisKKwkJCQljb2VyY2lvbi0+Y29sbGF0aW9uID0gY29sbGF0aW9uOwor CQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVF9Kc29uQmVoYXZpb3I6CisJCQl7CisJCQkJSnNvbkJl aGF2aW9yICpiZWhhdmlvciA9IChKc29uQmVoYXZpb3IgKikgZXhwcjsKKworCQkJCWlmIChiZWhh dmlvci0+ZXhwcikKKwkJCQkJZXhwclNldENvbGxhdGlvbihiZWhhdmlvci0+ZXhwciwgY29sbGF0 aW9uKTsKKwkJCQlpZiAoYmVoYXZpb3ItPmNvZXJjaW9uKQorCQkJCQlleHByU2V0Q29sbGF0aW9u KChOb2RlICopIGJlaGF2aW9yLT5jb2VyY2lvbiwgY29sbGF0aW9uKTsKKwkJCX0KKwkJCWJyZWFr OwogCQljYXNlIFRfTnVsbFRlc3Q6CiAJCQkvKiBOdWxsVGVzdCdzIHJlc3VsdCBpcyBib29sZWFu IC4uLiAqLwogCQkJQXNzZXJ0KCFPaWRJc1ZhbGlkKGNvbGxhdGlvbikpOyAvKiAuLi4gc28gbmV2 ZXIgc2V0IGEgY29sbGF0aW9uICovCkBAIC0xNTA4LDYgKzE2MTYsMTggQEAgZXhwckxvY2F0aW9u KGNvbnN0IE5vZGUgKmV4cHIpCiAJCWNhc2UgVF9Kc29uSXNQcmVkaWNhdGU6CiAJCQlsb2MgPSAo KGNvbnN0IEpzb25Jc1ByZWRpY2F0ZSAqKSBleHByKS0+bG9jYXRpb247CiAJCQlicmVhazsKKwkJ Y2FzZSBUX0pzb25FeHByOgorCQkJeworCQkJCWNvbnN0IEpzb25FeHByICpqc2V4cHIgPSAoY29u c3QgSnNvbkV4cHIgKikgZXhwcjsKKworCQkJCS8qIGNvbnNpZGVyIGJvdGggZnVuY3Rpb24gbmFt ZSBhbmQgbGVmdG1vc3QgYXJnICovCisJCQkJbG9jID0gbGVmdG1vc3RMb2MoanNleHByLT5sb2Nh dGlvbiwKKwkJCQkJCQkJICBleHByTG9jYXRpb24oanNleHByLT5mb3JtYXR0ZWRfZXhwcikpOwor CQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVF9Kc29uQmVoYXZpb3I6CisJCQlsb2MgPSBleHByTG9j YXRpb24oKChKc29uQmVoYXZpb3IgKikgZXhwciktPmV4cHIpOworCQkJYnJlYWs7CiAJCWNhc2Ug VF9OdWxsVGVzdDoKIAkJCXsKIAkJCQljb25zdCBOdWxsVGVzdCAqbmV4cHIgPSAoY29uc3QgTnVs bFRlc3QgKikgZXhwcjsKQEAgLTIyNjAsNiArMjM4MCw0NSBAQCBleHByZXNzaW9uX3RyZWVfd2Fs a2VyX2ltcGwoTm9kZSAqbm9kZSwKIAkJCWJyZWFrOwogCQljYXNlIFRfSnNvbklzUHJlZGljYXRl OgogCQkJcmV0dXJuIFdBTEsoKChKc29uSXNQcmVkaWNhdGUgKikgbm9kZSktPmV4cHIpOworCQlj YXNlIFRfSnNvbkV4cHI6CisJCQl7CisJCQkJSnNvbkV4cHIgICAqamV4cHIgPSAoSnNvbkV4cHIg Kikgbm9kZTsKKworCQkJCWlmIChXQUxLKGpleHByLT5mb3JtYXR0ZWRfZXhwcikpCisJCQkJCXJl dHVybiB0cnVlOworCQkJCWlmIChXQUxLKGpleHByLT5yZXN1bHRfY29lcmNpb24pKQorCQkJCQly ZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhqZXhwci0+aXRlbV9jb2VyY2lvbnMpKQorCQkJCQly ZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhqZXhwci0+cGFzc2luZ192YWx1ZXMpKQorCQkJCQly ZXR1cm4gdHJ1ZTsKKwkJCQkvKiB3ZSBhc3N1bWUgd2Fsa2VyIGRvZXNuJ3QgY2FyZSBhYm91dCBw YXNzaW5nX25hbWVzICovCisJCQkJaWYgKFdBTEsoamV4cHItPm9uX2VtcHR5KSkKKwkJCQkJcmV0 dXJuIHRydWU7CisJCQkJaWYgKFdBTEsoamV4cHItPm9uX2Vycm9yKSkKKwkJCQkJcmV0dXJuIHRy dWU7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX0pzb25Db2VyY2lvbjoKKwkJCWJyZWFrOwor CQljYXNlIFRfSnNvbkl0ZW1Db2VyY2lvbjoKKwkJCXsKKwkJCQlKc29uSXRlbUNvZXJjaW9uICpp dGVtX2NvZXJjaW9uID0gKEpzb25JdGVtQ29lcmNpb24gKikgbm9kZTsKKworCQkJCWlmIChXQUxL KGl0ZW1fY29lcmNpb24tPmNvZXJjaW9uKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQli cmVhazsKKwkJY2FzZSBUX0pzb25CZWhhdmlvcjoKKwkJCXsKKwkJCQlKc29uQmVoYXZpb3IgKmJl aGF2aW9yID0gKEpzb25CZWhhdmlvciAqKSBub2RlOworCisJCQkJaWYgKFdBTEsoYmVoYXZpb3It PmV4cHIpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhiZWhhdmlvci0+Y29lcmNp b24pKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCWJyZWFrOwogCQljYXNlIFRfTnVsbFRl c3Q6CiAJCQlyZXR1cm4gV0FMSygoKE51bGxUZXN0ICopIG5vZGUpLT5hcmcpOwogCQljYXNlIFRf Qm9vbGVhblRlc3Q6CkBAIC0zMjYzLDYgKzM0MjIsNDYgQEAgZXhwcmVzc2lvbl90cmVlX211dGF0 b3JfaW1wbChOb2RlICpub2RlLAogCiAJCQkJcmV0dXJuIChOb2RlICopIG5ld25vZGU7CiAJCQl9 CisJCWNhc2UgVF9Kc29uRXhwcjoKKwkJCXsKKwkJCQlKc29uRXhwciAgICpqZXhwciA9IChKc29u RXhwciAqKSBub2RlOworCQkJCUpzb25FeHByICAgKm5ld25vZGU7CisKKwkJCQlGTEFUQ09QWShu ZXdub2RlLCBqZXhwciwgSnNvbkV4cHIpOworCQkJCU1VVEFURShuZXdub2RlLT5wYXRoX3NwZWMs IGpleHByLT5wYXRoX3NwZWMsIE5vZGUgKik7CisJCQkJTVVUQVRFKG5ld25vZGUtPmZvcm1hdHRl ZF9leHByLCBqZXhwci0+Zm9ybWF0dGVkX2V4cHIsIE5vZGUgKik7CisJCQkJTVVUQVRFKG5ld25v ZGUtPnJlc3VsdF9jb2VyY2lvbiwgamV4cHItPnJlc3VsdF9jb2VyY2lvbiwgTm9kZSAqKTsKKwkJ CQlNVVRBVEUobmV3bm9kZS0+aXRlbV9jb2VyY2lvbnMsIGpleHByLT5pdGVtX2NvZXJjaW9ucywg TGlzdCAqKTsKKwkJCQlNVVRBVEUobmV3bm9kZS0+cGFzc2luZ192YWx1ZXMsIGpleHByLT5wYXNz aW5nX3ZhbHVlcywgTGlzdCAqKTsKKwkJCQkvKiBhc3N1bWUgbXV0YXRvciBkb2VzIG5vdCBjYXJl IGFib3V0IHBhc3NpbmdfbmFtZXMgKi8KKwkJCQlNVVRBVEUobmV3bm9kZS0+b25fZW1wdHksIGpl eHByLT5vbl9lbXB0eSwgSnNvbkJlaGF2aW9yICopOworCQkJCU1VVEFURShuZXdub2RlLT5vbl9l cnJvciwgamV4cHItPm9uX2Vycm9yLCBKc29uQmVoYXZpb3IgKik7CisJCQkJcmV0dXJuIChOb2Rl ICopIG5ld25vZGU7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX0pzb25Db2VyY2lvbjoKKwkJ CXJldHVybiAoTm9kZSAqKSBjb3B5T2JqZWN0KG5vZGUpOworCQljYXNlIFRfSnNvbkl0ZW1Db2Vy Y2lvbjoKKwkJCXsKKwkJCQlKc29uSXRlbUNvZXJjaW9uICppdGVtX2NvZXJjaW9uID0gKEpzb25J dGVtQ29lcmNpb24gKikgbm9kZTsKKwkJCQlKc29uSXRlbUNvZXJjaW9uICpuZXdub2RlOworCisJ CQkJRkxBVENPUFkobmV3bm9kZSwgaXRlbV9jb2VyY2lvbiwgSnNvbkl0ZW1Db2VyY2lvbik7CisJ CQkJTVVUQVRFKG5ld25vZGUtPmNvZXJjaW9uLCBpdGVtX2NvZXJjaW9uLT5jb2VyY2lvbiwgTm9k ZSAqKTsKKwkJCQlyZXR1cm4gKE5vZGUgKikgbmV3bm9kZTsKKwkJCX0KKwkJCWJyZWFrOworCQlj YXNlIFRfSnNvbkJlaGF2aW9yOgorCQkJeworCQkJCUpzb25CZWhhdmlvciAqYmVoYXZpb3IgPSAo SnNvbkJlaGF2aW9yICopIG5vZGU7CisJCQkJSnNvbkJlaGF2aW9yICpuZXdub2RlOworCisJCQkJ RkxBVENPUFkobmV3bm9kZSwgYmVoYXZpb3IsIEpzb25CZWhhdmlvcik7CisJCQkJTVVUQVRFKG5l d25vZGUtPmV4cHIsIGJlaGF2aW9yLT5leHByLCBOb2RlICopOworCQkJCU1VVEFURShuZXdub2Rl LT5jb2VyY2lvbiwgYmVoYXZpb3ItPmNvZXJjaW9uLCBKc29uQ29lcmNpb24gKik7CisJCQkJcmV0 dXJuIChOb2RlICopIG5ld25vZGU7CisJCQl9CisJCQlicmVhazsKIAkJY2FzZSBUX051bGxUZXN0 OgogCQkJewogCQkJCU51bGxUZXN0ICAgKm50ZXN0ID0gKE51bGxUZXN0ICopIG5vZGU7CkBAIC0z OTUxLDYgKzQxNTAsMzYgQEAgcmF3X2V4cHJlc3Npb25fdHJlZV93YWxrZXJfaW1wbChOb2RlICpu b2RlLAogCQkJYnJlYWs7CiAJCWNhc2UgVF9Kc29uSXNQcmVkaWNhdGU6CiAJCQlyZXR1cm4gV0FM SygoKEpzb25Jc1ByZWRpY2F0ZSAqKSBub2RlKS0+ZXhwcik7CisJCWNhc2UgVF9Kc29uQXJndW1l bnQ6CisJCQlyZXR1cm4gV0FMSygoKEpzb25Bcmd1bWVudCAqKSBub2RlKS0+dmFsKTsKKwkJY2Fz ZSBUX0pzb25GdW5jRXhwcjoKKwkJCXsKKwkJCQlKc29uRnVuY0V4cHIgKmpmZSA9IChKc29uRnVu Y0V4cHIgKikgbm9kZTsKKworCQkJCWlmIChXQUxLKGpmZS0+Y29udGV4dF9pdGVtKSkKKwkJCQkJ cmV0dXJuIHRydWU7CisJCQkJaWYgKFdBTEsoamZlLT5wYXRoc3BlYykpCisJCQkJCXJldHVybiB0 cnVlOworCQkJCWlmIChXQUxLKGpmZS0+cGFzc2luZykpCisJCQkJCXJldHVybiB0cnVlOworCQkJ CWlmIChqZmUtPm91dHB1dCAmJiBXQUxLKGpmZS0+b3V0cHV0KSkKKwkJCQkJcmV0dXJuIHRydWU7 CisJCQkJaWYgKGpmZS0+b25fZW1wdHkpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChqZmUt Pm9uX2Vycm9yKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRf SnNvbkJlaGF2aW9yOgorCQkJeworCQkJCUpzb25CZWhhdmlvciAqamIgPSAoSnNvbkJlaGF2aW9y ICopIG5vZGU7CisKKwkJCQlpZiAoV0FMSyhqYi0+ZXhwcikpCisJCQkJCXJldHVybiB0cnVlOwor CQkJCWlmIChXQUxLKGpiLT5jb2VyY2lvbikpCisJCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJ YnJlYWs7CiAJCWNhc2UgVF9OdWxsVGVzdDoKIAkJCXJldHVybiBXQUxLKCgoTnVsbFRlc3QgKikg bm9kZSktPmFyZyk7CiAJCWNhc2UgVF9Cb29sZWFuVGVzdDoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9jb3N0c2l6ZS5jCmluZGV4IDhiNzZlOTg1MjkuLjRjZDYwNmNhNzMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvY29zdHNpemUuYwpAQCAtNDg3OSw3ICs0ODc5LDggQEAgY29zdF9xdWFsX2V2 YWxfd2Fsa2VyKE5vZGUgKm5vZGUsIGNvc3RfcXVhbF9ldmFsX2NvbnRleHQgKmNvbnRleHQpCiAJ CQkgSXNBKG5vZGUsIFNRTFZhbHVlRnVuY3Rpb24pIHx8CiAJCQkgSXNBKG5vZGUsIFhtbEV4cHIp IHx8CiAJCQkgSXNBKG5vZGUsIENvZXJjZVRvRG9tYWluKSB8fAotCQkJIElzQShub2RlLCBOZXh0 VmFsdWVFeHByKSkKKwkJCSBJc0Eobm9kZSwgTmV4dFZhbHVlRXhwcikgfHwKKwkJCSBJc0Eobm9k ZSwgSnNvbkV4cHIpKQogCXsKIAkJLyogVHJlYXQgYWxsIHRoZXNlIGFzIGhhdmluZyBjb3N0IDEg Ki8KIAkJY29udGV4dC0+dG90YWwucGVyX3R1cGxlICs9IGNwdV9vcGVyYXRvcl9jb3N0OwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jCmluZGV4IDk0ZWI1NmExZTcuLjIzMWNkMGMzZTUg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMuYworKysgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMKQEAgLTUzLDYgKzUzLDcgQEAKICNp bmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgogI2luY2x1ZGUgInV0aWxzL2pzb24uaCIKICNpbmNs dWRlICJ1dGlscy9qc29uYi5oIgorI2luY2x1ZGUgInV0aWxzL2pzb25wYXRoLmgiCiAjaW5jbHVk ZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNs dWRlICJ1dGlscy9zeXNjYWNoZS5oIgpAQCAtNDE3LDYgKzQxOCwyNSBAQCBjb250YWluX211dGFi bGVfZnVuY3Rpb25zX3dhbGtlcihOb2RlICpub2RlLCB2b2lkICpjb250ZXh0KQogCQkvKiBDaGVj ayBhbGwgc3Vibm9kZXMgKi8KIAl9CiAKKwlpZiAoSXNBKG5vZGUsIEpzb25FeHByKSkKKwl7CisJ CUpzb25FeHByICAgKmpleHByID0gY2FzdE5vZGUoSnNvbkV4cHIsIG5vZGUpOworCQlDb25zdAkg ICAqY25zdDsKKworCQlpZiAoIUlzQShqZXhwci0+cGF0aF9zcGVjLCBDb25zdCkpCisJCQlyZXR1 cm4gdHJ1ZTsKKworCQljbnN0ID0gY2FzdE5vZGUoQ29uc3QsIGpleHByLT5wYXRoX3NwZWMpOwor CisJCUFzc2VydChjbnN0LT5jb25zdHR5cGUgPT0gSlNPTlBBVEhPSUQpOworCQlpZiAoY25zdC0+ Y29uc3Rpc251bGwpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJaWYgKGpzcElzTXV0YWJsZShEYXR1 bUdldEpzb25QYXRoUChjbnN0LT5jb25zdHZhbHVlKSwKKwkJCQkJCSBqZXhwci0+cGFzc2luZ19u YW1lcywgamV4cHItPnBhc3NpbmdfdmFsdWVzKSkKKwkJCXJldHVybiB0cnVlOworCX0KKwogCWlm IChJc0Eobm9kZSwgU1FMVmFsdWVGdW5jdGlvbikpCiAJewogCQkvKiBhbGwgdmFyaWFudHMgb2Yg U1FMVmFsdWVGdW5jdGlvbiBhcmUgc3RhYmxlICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9w YXJzZXIvZ3JhbS55IGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQppbmRleCAzNDYwZmVhNTZi Li4yNzJhY2M4ODU2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CisrKyBi L3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKQEAgLTY1MiwxMCArNjUyLDE5IEBAIHN0YXRpYyBO b2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2Vz LCBOb2RlICpxdWVyeSk7CiAJCQkJanNvbl9yZXR1cm5pbmdfY2xhdXNlX29wdAogCQkJCWpzb25f bmFtZV9hbmRfdmFsdWUKIAkJCQlqc29uX2FnZ3JlZ2F0ZV9mdW5jCisJCQkJanNvbl9hcmd1bWVu dAorCQkJCWpzb25fYmVoYXZpb3IKKwkJCQlqc29uX29uX2Vycm9yX2NsYXVzZV9vcHQKICV0eXBl IDxsaXN0Pglqc29uX25hbWVfYW5kX3ZhbHVlX2xpc3QKIAkJCQlqc29uX3ZhbHVlX2V4cHJfbGlz dAogCQkJCWpzb25fYXJyYXlfYWdncmVnYXRlX29yZGVyX2J5X2NsYXVzZV9vcHQKLSV0eXBlIDxp dmFsPglqc29uX3ByZWRpY2F0ZV90eXBlX2NvbnN0cmFpbnQKKwkJCQlqc29uX2FyZ3VtZW50cwor CQkJCWpzb25fYmVoYXZpb3JfY2xhdXNlX29wdAorCQkJCWpzb25fcGFzc2luZ19jbGF1c2Vfb3B0 CisldHlwZSA8aXZhbD4JanNvbl9iZWhhdmlvcl90eXBlCisJCQkJanNvbl9wcmVkaWNhdGVfdHlw ZV9jb25zdHJhaW50CisJCQkJanNvbl9xdW90ZXNfY2xhdXNlX29wdAorCQkJCWpzb25fd3JhcHBl cl9iZWhhdmlvcgogJXR5cGUgPGJvb2xlYW4+CWpzb25fa2V5X3VuaXF1ZW5lc3NfY29uc3RyYWlu dF9vcHQKIAkJCQlqc29uX29iamVjdF9jb25zdHJ1Y3Rvcl9udWxsX2NsYXVzZV9vcHQKIAkJCQlq c29uX2FycmF5X2NvbnN0cnVjdG9yX251bGxfY2xhdXNlX29wdApAQCAtNjk2LDcgKzcwNSw3IEBA IHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0 ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJQ0FDSEUgQ0FMTCBDQUxMRUQgQ0FTQ0FERSBDQVND QURFRCBDQVNFIENBU1QgQ0FUQUxPR19QIENIQUlOIENIQVJfUAogCUNIQVJBQ1RFUiBDSEFSQUNU RVJJU1RJQ1MgQ0hFQ0sgQ0hFQ0tQT0lOVCBDTEFTUyBDTE9TRQogCUNMVVNURVIgQ09BTEVTQ0Ug Q09MTEFURSBDT0xMQVRJT04gQ09MVU1OIENPTFVNTlMgQ09NTUVOVCBDT01NRU5UUyBDT01NSVQK LQlDT01NSVRURUQgQ09NUFJFU1NJT04gQ09OQ1VSUkVOVExZIENPTkZJR1VSQVRJT04gQ09ORkxJ Q1QKKwlDT01NSVRURUQgQ09NUFJFU1NJT04gQ09OQ1VSUkVOVExZIENPTkRJVElPTkFMIENPTkZJ R1VSQVRJT04gQ09ORkxJQ1QKIAlDT05ORUNUSU9OIENPTlNUUkFJTlQgQ09OU1RSQUlOVFMgQ09O VEVOVF9QIENPTlRJTlVFX1AgQ09OVkVSU0lPTl9QIENPUFkKIAlDT1NUIENSRUFURSBDUk9TUyBD U1YgQ1VCRSBDVVJSRU5UX1AKIAlDVVJSRU5UX0NBVEFMT0cgQ1VSUkVOVF9EQVRFIENVUlJFTlRf Uk9MRSBDVVJSRU5UX1NDSEVNQQpAQCAtNzA3LDggKzcxNiw4IEBAIHN0YXRpYyBOb2RlICptYWtl UmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpx dWVyeSk7CiAJREVUQUNIIERJQ1RJT05BUlkgRElTQUJMRV9QIERJU0NBUkQgRElTVElOQ1QgRE8g RE9DVU1FTlRfUCBET01BSU5fUAogCURPVUJMRV9QIERST1AKIAotCUVBQ0ggRUxTRSBFTkFCTEVf UCBFTkNPRElORyBFTkNSWVBURUQgRU5EX1AgRU5VTV9QIEVTQ0FQRSBFVkVOVCBFWENFUFQKLQlF WENMVURFIEVYQ0xVRElORyBFWENMVVNJVkUgRVhFQ1VURSBFWElTVFMgRVhQTEFJTiBFWFBSRVNT SU9OCisJRUFDSCBFTFNFIEVNUFRZX1AgRU5BQkxFX1AgRU5DT0RJTkcgRU5DUllQVEVEIEVORF9Q IEVOVU1fUCBFUlJPUl9QIEVTQ0FQRQorCUVWRU5UIEVYQ0VQVCBFWENMVURFIEVYQ0xVRElORyBF WENMVVNJVkUgRVhFQ1VURSBFWElTVFMgRVhQTEFJTiBFWFBSRVNTSU9OCiAJRVhURU5TSU9OIEVY VEVSTkFMIEVYVFJBQ1QKIAogCUZBTFNFX1AgRkFNSUxZIEZFVENIIEZJTFRFUiBGSU5BTElaRSBG SVJTVF9QIEZMT0FUX1AgRk9MTE9XSU5HIEZPUgpAQCAtNzIzLDEwICs3MzIsMTAgQEAgc3RhdGlj IE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFz ZXMsIE5vZGUgKnF1ZXJ5KTsKIAlJTk5FUl9QIElOT1VUIElOUFVUX1AgSU5TRU5TSVRJVkUgSU5T RVJUIElOU1RFQUQgSU5UX1AgSU5URUdFUgogCUlOVEVSU0VDVCBJTlRFUlZBTCBJTlRPIElOVk9L RVIgSVMgSVNOVUxMIElTT0xBVElPTgogCi0JSk9JTiBKU09OIEpTT05fQVJSQVkgSlNPTl9BUlJB WUFHRyBKU09OX09CSkVDVCBKU09OX09CSkVDVEFHRwotCUpTT05fU0NBTEFSIEpTT05fU0VSSUFM SVpFCisJSk9JTiBKU09OIEpTT05fQVJSQVkgSlNPTl9BUlJBWUFHRyBKU09OX0VYSVNUUyBKU09O X09CSkVDVCBKU09OX09CSkVDVEFHRworCUpTT05fUVVFUlkgSlNPTl9TQ0FMQVIgSlNPTl9TRVJJ QUxJWkUgSlNPTl9WQUxVRQogCi0JS0VZIEtFWVMKKwlLRUVQIEtFWSBLRVlTCiAKIAlMQUJFTCBM QU5HVUFHRSBMQVJHRV9QIExBU1RfUCBMQVRFUkFMX1AKIAlMRUFESU5HIExFQUtQUk9PRiBMRUFT VCBMRUZUIExFVkVMIExJS0UgTElNSVQgTElTVEVOIExPQUQgTE9DQUwKQEAgLTc0MCw3ICs3NDks NyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwg TGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCU5PVCBOT1RISU5HIE5PVElGWSBOT1ROVUxM IE5PV0FJVCBOVUxMX1AgTlVMTElGCiAJTlVMTFNfUCBOVU1FUklDCiAKLQlPQkpFQ1RfUCBPRiBP RkYgT0ZGU0VUIE9JRFMgT0xEIE9OIE9OTFkgT1BFUkFUT1IgT1BUSU9OIE9QVElPTlMgT1IKKwlP QkpFQ1RfUCBPRiBPRkYgT0ZGU0VUIE9JRFMgT0xEIE9NSVQgT04gT05MWSBPUEVSQVRPUiBPUFRJ T04gT1BUSU9OUyBPUgogCU9SREVSIE9SRElOQUxJVFkgT1RIRVJTIE9VVF9QIE9VVEVSX1AKIAlP VkVSIE9WRVJMQVBTIE9WRVJMQVkgT1ZFUlJJRElORyBPV05FRCBPV05FUgogCkBAIC03NDksNyAr NzU4LDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5h bWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAlQT1NJVElPTiBQUkVDRURJTkcgUFJF Q0lTSU9OIFBSRVNFUlZFIFBSRVBBUkUgUFJFUEFSRUQgUFJJTUFSWQogCVBSSU9SIFBSSVZJTEVH RVMgUFJPQ0VEVVJBTCBQUk9DRURVUkUgUFJPQ0VEVVJFUyBQUk9HUkFNIFBVQkxJQ0FUSU9OCiAK LQlRVU9URQorCVFVT1RFIFFVT1RFUwogCiAJUkFOR0UgUkVBRCBSRUFMIFJFQVNTSUdOIFJFQ0hF Q0sgUkVDVVJTSVZFIFJFRl9QIFJFRkVSRU5DRVMgUkVGRVJFTkNJTkcKIAlSRUZSRVNIIFJFSU5E RVggUkVMQVRJVkVfUCBSRUxFQVNFIFJFTkFNRSBSRVBFQVRBQkxFIFJFUExBQ0UgUkVQTElDQQpA QCAtNzYwLDcgKzc2OSw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChj aGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJU0VRVUVOQ0UgU0VR VUVOQ0VTCiAJU0VSSUFMSVpBQkxFIFNFUlZFUiBTRVNTSU9OIFNFU1NJT05fVVNFUiBTRVQgU0VU UyBTRVRPRiBTSEFSRSBTSE9XCiAJU0lNSUxBUiBTSU1QTEUgU0tJUCBTTUFMTElOVCBTTkFQU0hP VCBTT01FIFNRTF9QIFNUQUJMRSBTVEFOREFMT05FX1AKLQlTVEFSVCBTVEFURU1FTlQgU1RBVElT VElDUyBTVERJTiBTVERPVVQgU1RPUkFHRSBTVE9SRUQgU1RSSUNUX1AgU1RSSVBfUAorCVNUQVJU IFNUQVRFTUVOVCBTVEFUSVNUSUNTIFNURElOIFNURE9VVCBTVE9SQUdFIFNUT1JFRCBTVFJJQ1Rf UCBTVFJJTkdfUCBTVFJJUF9QCiAJU1VCU0NSSVBUSU9OIFNVQlNUUklORyBTVVBQT1JUIFNZTU1F VFJJQyBTWVNJRCBTWVNURU1fUCBTWVNURU1fVVNFUgogCiAJVEFCTEUgVEFCTEVTIFRBQkxFU0FN UExFIFRBQkxFU1BBQ0UgVEVNUCBURU1QTEFURSBURU1QT1JBUlkgVEVYVF9QIFRIRU4KQEAgLTc2 OCw3ICs3NzcsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAq cmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCVRSRUFUIFRSSUdHRVIgVFJJ TSBUUlVFX1AKIAlUUlVOQ0FURSBUUlVTVEVEIFRZUEVfUCBUWVBFU19QCiAKLQlVRVNDQVBFIFVO Qk9VTkRFRCBVTkNPTU1JVFRFRCBVTkVOQ1JZUFRFRCBVTklPTiBVTklRVUUgVU5LTk9XTgorCVVF U0NBUEUgVU5CT1VOREVEIFVOQ09ORElUSU9OQUwgVU5DT01NSVRURUQgVU5FTkNSWVBURUQgVU5J T04gVU5JUVVFIFVOS05PV04KIAlVTkxJU1RFTiBVTkxPR0dFRCBVTlRJTCBVUERBVEUgVVNFUiBV U0lORwogCiAJVkFDVVVNIFZBTElEIFZBTElEQVRFIFZBTElEQVRPUiBWQUxVRV9QIFZBTFVFUyBW QVJDSEFSIFZBUklBRElDIFZBUllJTkcKQEAgLTE1NzgyLDYgKzE1NzkxLDYyIEBAIGZ1bmNfZXhw cl9jb21tb25fc3ViZXhwcjoKIAkJCQkJbi0+bG9jYXRpb24gPSBAMTsKIAkJCQkJJCQgPSAoTm9k ZSAqKSBuOwogCQkJCX0KKwkJCXwgSlNPTl9RVUVSWSAnKCcKKwkJCQlqc29uX3ZhbHVlX2V4cHIg JywnIGFfZXhwciBqc29uX3Bhc3NpbmdfY2xhdXNlX29wdAorCQkJCWpzb25fcmV0dXJuaW5nX2Ns YXVzZV9vcHQKKwkJCQlqc29uX3dyYXBwZXJfYmVoYXZpb3IKKwkJCQlqc29uX3F1b3Rlc19jbGF1 c2Vfb3B0CisJCQkJanNvbl9iZWhhdmlvcl9jbGF1c2Vfb3B0CisJCQknKScKKwkJCQl7CisJCQkJ CUpzb25GdW5jRXhwciAqbiA9IG1ha2VOb2RlKEpzb25GdW5jRXhwcik7CisKKwkJCQkJbi0+b3Ag PSBKU09OX1FVRVJZX09QOworCQkJCQluLT5jb250ZXh0X2l0ZW0gPSAoSnNvblZhbHVlRXhwciAq KSAkMzsKKwkJCQkJbi0+cGF0aHNwZWMgPSAkNTsKKwkJCQkJbi0+cGFzc2luZyA9ICQ2OworCQkJ CQluLT5vdXRwdXQgPSAoSnNvbk91dHB1dCAqKSAkNzsKKwkJCQkJbi0+d3JhcHBlciA9ICQ4Owor CQkJCQluLT5xdW90ZXMgPSAkOTsKKwkJCQkJbi0+b25fZW1wdHkgPSAoSnNvbkJlaGF2aW9yICop IGxpbml0aWFsKCQxMCk7CisJCQkJCW4tPm9uX2Vycm9yID0gKEpzb25CZWhhdmlvciAqKSBsc2Vj b25kKCQxMCk7CisJCQkJCW4tPmxvY2F0aW9uID0gQDE7CisJCQkJCSQkID0gKE5vZGUgKikgbjsK KwkJCQl9CisJCQl8IEpTT05fRVhJU1RTICcoJworCQkJCWpzb25fdmFsdWVfZXhwciAnLCcgYV9l eHByIGpzb25fcGFzc2luZ19jbGF1c2Vfb3B0CisJCQkJanNvbl9vbl9lcnJvcl9jbGF1c2Vfb3B0 CisJCQknKScKKwkJCQl7CisJCQkJCUpzb25GdW5jRXhwciAqbiA9IG1ha2VOb2RlKEpzb25GdW5j RXhwcik7CisKKwkJCQkJbi0+b3AgPSBKU09OX0VYSVNUU19PUDsKKwkJCQkJbi0+Y29udGV4dF9p dGVtID0gKEpzb25WYWx1ZUV4cHIgKikgJDM7CisJCQkJCW4tPnBhdGhzcGVjID0gJDU7CisJCQkJ CW4tPnBhc3NpbmcgPSAkNjsKKwkJCQkJbi0+b3V0cHV0ID0gTlVMTDsKKwkJCQkJbi0+b25fZXJy b3IgPSAoSnNvbkJlaGF2aW9yICopICQ3OworCQkJCQluLT5sb2NhdGlvbiA9IEAxOworCQkJCQkk JCA9IChOb2RlICopIG47CisJCQkJfQorCQkJfCBKU09OX1ZBTFVFICcoJworCQkJCWpzb25fdmFs dWVfZXhwciAnLCcgYV9leHByIGpzb25fcGFzc2luZ19jbGF1c2Vfb3B0CisJCQkJanNvbl9yZXR1 cm5pbmdfY2xhdXNlX29wdAorCQkJCWpzb25fYmVoYXZpb3JfY2xhdXNlX29wdAorCQkJJyknCisJ CQkJeworCQkJCQlKc29uRnVuY0V4cHIgKm4gPSBtYWtlTm9kZShKc29uRnVuY0V4cHIpOworCisJ CQkJCW4tPm9wID0gSlNPTl9WQUxVRV9PUDsKKwkJCQkJbi0+Y29udGV4dF9pdGVtID0gKEpzb25W YWx1ZUV4cHIgKikgJDM7CisJCQkJCW4tPnBhdGhzcGVjID0gJDU7CisJCQkJCW4tPnBhc3Npbmcg PSAkNjsKKwkJCQkJbi0+b3V0cHV0ID0gKEpzb25PdXRwdXQgKikgJDc7CisJCQkJCW4tPm9uX2Vt cHR5ID0gKEpzb25CZWhhdmlvciAqKSBsaW5pdGlhbCgkOCk7CisJCQkJCW4tPm9uX2Vycm9yID0g KEpzb25CZWhhdmlvciAqKSBsc2Vjb25kKCQ4KTsKKwkJCQkJbi0+bG9jYXRpb24gPSBAMTsKKwkJ CQkJJCQgPSAoTm9kZSAqKSBuOworCQkJCX0KIAkJCTsKIAogCkBAIC0xNjUwOCw2ICsxNjU3Myw3 NyBAQCBvcHRfYXN5bW1ldHJpYzogQVNZTU1FVFJJQwogCQk7CiAKIC8qIFNRTC9KU09OIHN1cHBv cnQgKi8KK2pzb25fcGFzc2luZ19jbGF1c2Vfb3B0OgorCQkJUEFTU0lORyBqc29uX2FyZ3VtZW50 cwkJCQkJeyAkJCA9ICQyOyB9CisJCQl8IC8qRU1QVFkqLwkJCQkJCQkJeyAkJCA9IE5JTDsgfQor CQk7CisKK2pzb25fYXJndW1lbnRzOgorCQkJanNvbl9hcmd1bWVudAkJCQkJCQl7ICQkID0gbGlz dF9tYWtlMSgkMSk7IH0KKwkJCXwganNvbl9hcmd1bWVudHMgJywnIGpzb25fYXJndW1lbnQJCXsg JCQgPSBsYXBwZW5kKCQxLCAkMyk7IH0KKwkJOworCitqc29uX2FyZ3VtZW50OgorCQkJanNvbl92 YWx1ZV9leHByIEFTIENvbExhYmVsCisJCQl7CisJCQkJSnNvbkFyZ3VtZW50ICpuID0gbWFrZU5v ZGUoSnNvbkFyZ3VtZW50KTsKKworCQkJCW4tPnZhbCA9IChKc29uVmFsdWVFeHByICopICQxOwor CQkJCW4tPm5hbWUgPSAkMzsKKwkJCQkkJCA9IChOb2RlICopIG47CisJCQl9CisJCTsKKworLyog QVJSQVkgaXMgYSBub2lzZSB3b3JkICovCitqc29uX3dyYXBwZXJfYmVoYXZpb3I6CisJCQkgIFdJ VEhPVVQgV1JBUFBFUgkJCQkJeyAkJCA9IEpTV19OT05FOyB9CisJCQl8IFdJVEhPVVQgQVJSQVkJ V1JBUFBFUgkJCQl7ICQkID0gSlNXX05PTkU7IH0KKwkJCXwgV0lUSCBXUkFQUEVSCQkJCQkJeyAk JCA9IEpTV19VTkNPTkRJVElPTkFMOyB9CisJCQl8IFdJVEggQVJSQVkgV1JBUFBFUgkJCQl7ICQk ID0gSlNXX1VOQ09ORElUSU9OQUw7IH0KKwkJCXwgV0lUSCBDT05ESVRJT05BTCBBUlJBWSBXUkFQ UEVSCXsgJCQgPSBKU1dfQ09ORElUSU9OQUw7IH0KKwkJCXwgV0lUSCBVTkNPTkRJVElPTkFMIEFS UkFZIFdSQVBQRVIJeyAkJCA9IEpTV19VTkNPTkRJVElPTkFMOyB9CisJCQl8IFdJVEggQ09ORElU SU9OQUwgV1JBUFBFUgkJCXsgJCQgPSBKU1dfQ09ORElUSU9OQUw7IH0KKwkJCXwgV0lUSCBVTkNP TkRJVElPTkFMIFdSQVBQRVIJCXsgJCQgPSBKU1dfVU5DT05ESVRJT05BTDsgfQorCQkJfCAvKiBl bXB0eSAqLwkJCQkJCXsgJCQgPSBKU1dfVU5TUEVDOyB9CisJCTsKKworanNvbl9iZWhhdmlvcjoK KwkJCURFRkFVTFQgYV9leHByCisJCQkJeyAkJCA9IChOb2RlICopIG1ha2VKc29uQmVoYXZpb3Io SlNPTl9CRUhBVklPUl9ERUZBVUxULCAkMiwgTlVMTCwgQDEpOyB9CisJCQl8IGpzb25fYmVoYXZp b3JfdHlwZQorCQkJCXsgJCQgPSAoTm9kZSAqKSBtYWtlSnNvbkJlaGF2aW9yKCQxLCBOVUxMLCBO VUxMLCBAMSk7IH0KKwkJOworCitqc29uX2JlaGF2aW9yX3R5cGU6CisJCQlFUlJPUl9QCQl7ICQk ID0gSlNPTl9CRUhBVklPUl9FUlJPUjsgfQorCQkJfCBOVUxMX1AJeyAkJCA9IEpTT05fQkVIQVZJ T1JfTlVMTDsgfQorCQkJfCBUUlVFX1AJeyAkJCA9IEpTT05fQkVIQVZJT1JfVFJVRTsgfQorCQkJ fCBGQUxTRV9QCXsgJCQgPSBKU09OX0JFSEFWSU9SX0ZBTFNFOyB9CisJCQl8IFVOS05PV04JeyAk JCA9IEpTT05fQkVIQVZJT1JfVU5LTk9XTjsgfQorCQkJfCBFTVBUWV9QIEFSUkFZCXsgJCQgPSBK U09OX0JFSEFWSU9SX0VNUFRZX0FSUkFZOyB9CisJCQl8IEVNUFRZX1AgT0JKRUNUX1AJeyAkJCA9 IEpTT05fQkVIQVZJT1JfRU1QVFlfT0JKRUNUOyB9CisJCQkvKiBub24tc3RhbmRhcmQsIGZvciBP cmFjbGUgY29tcGF0aWJpbGl0eSBvbmx5ICovCisJCQl8IEVNUFRZX1AJeyAkJCA9IEpTT05fQkVI QVZJT1JfRU1QVFlfQVJSQVk7IH0KKwkJOworCitqc29uX2JlaGF2aW9yX2NsYXVzZV9vcHQ6CisJ CQlqc29uX2JlaGF2aW9yIE9OIEVNUFRZX1AKKwkJCQl7ICQkID0gbGlzdF9tYWtlMigkMSwgTlVM TCk7IH0KKwkJCXwganNvbl9iZWhhdmlvciBPTiBFUlJPUl9QCisJCQkJeyAkJCA9IGxpc3RfbWFr ZTIoTlVMTCwgJDEpOyB9CisJCQl8IGpzb25fYmVoYXZpb3IgT04gRU1QVFlfUCBqc29uX2JlaGF2 aW9yIE9OIEVSUk9SX1AKKwkJCQl7ICQkID0gbGlzdF9tYWtlMigkMSwgJDQpOyB9CisJCQl8IC8q IEVNUFRZICovCisJCQkJeyAkJCA9IGxpc3RfbWFrZTIoTlVMTCwgTlVMTCk7IH0KKwkJOworCitq c29uX29uX2Vycm9yX2NsYXVzZV9vcHQ6CisJCQlqc29uX2JlaGF2aW9yIE9OIEVSUk9SX1AKKwkJ CQl7ICQkID0gJDE7IH0KKwkJCXwgLyogRU1QVFkgKi8KKwkJCQl7ICQkID0gTlVMTDsgfQorCQk7 CisKIGpzb25fdmFsdWVfZXhwcjoKIAkJCWFfZXhwciBqc29uX2Zvcm1hdF9jbGF1c2Vfb3B0CiAJ CQl7CkBAIC0xNjU1Miw2ICsxNjY4OCwxNCBAQCBqc29uX2Zvcm1hdF9jbGF1c2Vfb3B0OgogCQkJ CX0KIAkJOwogCitqc29uX3F1b3Rlc19jbGF1c2Vfb3B0OgorCQkJS0VFUCBRVU9URVMgT04gU0NB TEFSIFNUUklOR19QCQl7ICQkID0gSlNfUVVPVEVTX0tFRVA7IH0KKwkJCXwgS0VFUCBRVU9URVMJ CQkJCQl7ICQkID0gSlNfUVVPVEVTX0tFRVA7IH0KKwkJCXwgT01JVCBRVU9URVMgT04gU0NBTEFS IFNUUklOR19QCXsgJCQgPSBKU19RVU9URVNfT01JVDsgfQorCQkJfCBPTUlUIFFVT1RFUwkJCQkJ CXsgJCQgPSBKU19RVU9URVNfT01JVDsgfQorCQkJfCAvKiBFTVBUWSAqLwkJCQkJCXsgJCQgPSBK U19RVU9URVNfVU5TUEVDOyB9CisJCTsKKwoganNvbl9yZXR1cm5pbmdfY2xhdXNlX29wdDoKIAkJ CVJFVFVSTklORyBUeXBlbmFtZSBqc29uX2Zvcm1hdF9jbGF1c2Vfb3B0CiAJCQkJewpAQCAtMTcx NjgsNiArMTczMTIsNyBAQCB1bnJlc2VydmVkX2tleXdvcmQ6CiAJCQl8IENPTU1JVAogCQkJfCBD T01NSVRURUQKIAkJCXwgQ09NUFJFU1NJT04KKwkJCXwgQ09ORElUSU9OQUwKIAkJCXwgQ09ORklH VVJBVElPTgogCQkJfCBDT05GTElDVAogCQkJfCBDT05ORUNUSU9OCkBAIC0xNzIwNCwxMCArMTcz NDksMTIgQEAgdW5yZXNlcnZlZF9rZXl3b3JkOgogCQkJfCBET1VCTEVfUAogCQkJfCBEUk9QCiAJ CQl8IEVBQ0gKKwkJCXwgRU1QVFlfUAogCQkJfCBFTkFCTEVfUAogCQkJfCBFTkNPRElORwogCQkJ fCBFTkNSWVBURUQKIAkJCXwgRU5VTV9QCisJCQl8IEVSUk9SX1AKIAkJCXwgRVNDQVBFCiAJCQl8 IEVWRU5UCiAJCQl8IEVYQ0xVREUKQEAgLTE3MjU3LDYgKzE3NDA0LDcgQEAgdW5yZXNlcnZlZF9r ZXl3b3JkOgogCQkJfCBJTlNURUFECiAJCQl8IElOVk9LRVIKIAkJCXwgSVNPTEFUSU9OCisJCQl8 IEtFRVAKIAkJCXwgS0VZCiAJCQl8IEtFWVMKIAkJCXwgTEFCRUwKQEAgLTE3MzAzLDYgKzE3NDUx LDcgQEAgdW5yZXNlcnZlZF9rZXl3b3JkOgogCQkJfCBPRkYKIAkJCXwgT0lEUwogCQkJfCBPTEQK KwkJCXwgT01JVAogCQkJfCBPUEVSQVRPUgogCQkJfCBPUFRJT04KIAkJCXwgT1BUSU9OUwpAQCAt MTczMzMsNiArMTc0ODIsNyBAQCB1bnJlc2VydmVkX2tleXdvcmQ6CiAJCQl8IFBST0dSQU0KIAkJ CXwgUFVCTElDQVRJT04KIAkJCXwgUVVPVEUKKwkJCXwgUVVPVEVTCiAJCQl8IFJBTkdFCiAJCQl8 IFJFQUQKIAkJCXwgUkVBU1NJR04KQEAgLTE3MzkyLDYgKzE3NTQyLDcgQEAgdW5yZXNlcnZlZF9r ZXl3b3JkOgogCQkJfCBTVE9SQUdFCiAJCQl8IFNUT1JFRAogCQkJfCBTVFJJQ1RfUAorCQkJfCBT VFJJTkdfUAogCQkJfCBTVFJJUF9QCiAJCQl8IFNVQlNDUklQVElPTgogCQkJfCBTVVBQT1JUCkBA IC0xNzQxNCw2ICsxNzU2NSw3IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJCXwgVUVTQ0FQRQog CQkJfCBVTkJPVU5ERUQKIAkJCXwgVU5DT01NSVRURUQKKwkJCXwgVU5DT05ESVRJT05BTAogCQkJ fCBVTkVOQ1JZUFRFRAogCQkJfCBVTktOT1dOCiAJCQl8IFVOTElTVEVOCkBAIC0xNzQ3NCwxMCAr MTc2MjYsMTMgQEAgY29sX25hbWVfa2V5d29yZDoKIAkJCXwgSlNPTgogCQkJfCBKU09OX0FSUkFZ CiAJCQl8IEpTT05fQVJSQVlBR0cKKwkJCXwgSlNPTl9FWElTVFMKIAkJCXwgSlNPTl9PQkpFQ1QK IAkJCXwgSlNPTl9PQkpFQ1RBR0cKKwkJCXwgSlNPTl9RVUVSWQogCQkJfCBKU09OX1NDQUxBUgog CQkJfCBKU09OX1NFUklBTElaRQorCQkJfCBKU09OX1ZBTFVFCiAJCQl8IExFQVNUCiAJCQl8IE5B VElPTkFMCiAJCQl8IE5DSEFSCkBAIC0xNzcxMCw2ICsxNzg2NSw3IEBAIGJhcmVfbGFiZWxfa2V5 d29yZDoKIAkJCXwgQ09NTUlUVEVECiAJCQl8IENPTVBSRVNTSU9OCiAJCQl8IENPTkNVUlJFTlRM WQorCQkJfCBDT05ESVRJT05BTAogCQkJfCBDT05GSUdVUkFUSU9OCiAJCQl8IENPTkZMSUNUCiAJ CQl8IENPTk5FQ1RJT04KQEAgLTE3NzYyLDExICsxNzkxOCwxMyBAQCBiYXJlX2xhYmVsX2tleXdv cmQ6CiAJCQl8IERST1AKIAkJCXwgRUFDSAogCQkJfCBFTFNFCisJCQl8IEVNUFRZX1AKIAkJCXwg RU5BQkxFX1AKIAkJCXwgRU5DT0RJTkcKIAkJCXwgRU5DUllQVEVECiAJCQl8IEVORF9QCiAJCQl8 IEVOVU1fUAorCQkJfCBFUlJPUl9QCiAJCQl8IEVTQ0FQRQogCQkJfCBFVkVOVAogCQkJfCBFWENM VURFCkBAIC0xNzgzNiwxMCArMTc5OTQsMTQgQEAgYmFyZV9sYWJlbF9rZXl3b3JkOgogCQkJfCBK U09OCiAJCQl8IEpTT05fQVJSQVkKIAkJCXwgSlNPTl9BUlJBWUFHRworCQkJfCBKU09OX0VYSVNU UwogCQkJfCBKU09OX09CSkVDVAogCQkJfCBKU09OX09CSkVDVEFHRworCQkJfCBKU09OX1FVRVJZ CiAJCQl8IEpTT05fU0NBTEFSCiAJCQl8IEpTT05fU0VSSUFMSVpFCisJCQl8IEpTT05fVkFMVUUK KwkJCXwgS0VFUAogCQkJfCBLRVkKIAkJCXwgS0VZUwogCQkJfCBMQUJFTApAQCAtMTc5MDAsNiAr MTgwNjIsNyBAQCBiYXJlX2xhYmVsX2tleXdvcmQ6CiAJCQl8IE9GRgogCQkJfCBPSURTCiAJCQl8 IE9MRAorCQkJfCBPTUlUCiAJCQl8IE9OTFkKIAkJCXwgT1BFUkFUT1IKIAkJCXwgT1BUSU9OCkBA IC0xNzkzNyw2ICsxODEwMCw3IEBAIGJhcmVfbGFiZWxfa2V5d29yZDoKIAkJCXwgUFJPR1JBTQog CQkJfCBQVUJMSUNBVElPTgogCQkJfCBRVU9URQorCQkJfCBRVU9URVMKIAkJCXwgUkFOR0UKIAkJ CXwgUkVBRAogCQkJfCBSRUFMCkBAIC0xODAwNSw2ICsxODE2OSw3IEBAIGJhcmVfbGFiZWxfa2V5 d29yZDoKIAkJCXwgU1RPUkFHRQogCQkJfCBTVE9SRUQKIAkJCXwgU1RSSUNUX1AKKwkJCXwgU1RS SU5HX1AKIAkJCXwgU1RSSVBfUAogCQkJfCBTVUJTQ1JJUFRJT04KIAkJCXwgU1VCU1RSSU5HCkBA IC0xODAzOSw2ICsxODIwNCw3IEBAIGJhcmVfbGFiZWxfa2V5d29yZDoKIAkJCXwgVUVTQ0FQRQog CQkJfCBVTkJPVU5ERUQKIAkJCXwgVU5DT01NSVRURUQKKwkJCXwgVU5DT05ESVRJT05BTAogCQkJ fCBVTkVOQ1JZUFRFRAogCQkJfCBVTklRVUUKIAkJCXwgVU5LTk9XTgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9l eHByLmMKaW5kZXggOTMwMGM3YjlhYi4uYWUzY2RjM2JlMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcGFyc2VyL3BhcnNlX2V4cHIuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhw ci5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNs dWRlICJ1dGlscy9kYXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMuaCIKKyNpbmNsdWRl ICJ1dGlscy9qc29uYi5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUg InV0aWxzL3RpbWVzdGFtcC5oIgogI2luY2x1ZGUgInV0aWxzL3htbC5oIgpAQCAtOTAsNiArOTEs MjIgQEAgc3RhdGljIE5vZGUgKnRyYW5zZm9ybUpzb25QYXJzZUV4cHIoUGFyc2VTdGF0ZSAqcHN0 YXRlLCBKc29uUGFyc2VFeHByICpleHByKTsKIHN0YXRpYyBOb2RlICp0cmFuc2Zvcm1Kc29uU2Nh bGFyRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25TY2FsYXJFeHByICpleHByKTsKIHN0YXRp YyBOb2RlICp0cmFuc2Zvcm1Kc29uU2VyaWFsaXplRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsCiAJ CQkJCQkJCQkJSnNvblNlcmlhbGl6ZUV4cHIgKmV4cHIpOworc3RhdGljIE5vZGUgKnRyYW5zZm9y bUpzb25GdW5jRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25GdW5jRXhwciAqcCk7CitzdGF0 aWMgSnNvbkV4cHIgKnRyYW5zZm9ybUpzb25FeHByQ29tbW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwg SnNvbkZ1bmNFeHByICpmdW5jLAorCQkJCQkJCQkJCSBjb25zdCBjaGFyICpjb25zdHJ1Y3ROYW1l KTsKK3N0YXRpYyB2b2lkIHRyYW5zZm9ybUpzb25QYXNzaW5nQXJncyhQYXJzZVN0YXRlICpwc3Rh dGUsIGNvbnN0IGNoYXIgKmNvbnN0cnVjdE5hbWUsCisJCQkJCQkJCQkgSnNvbkZvcm1hdFR5cGUg Zm9ybWF0LCBMaXN0ICphcmdzLAorCQkJCQkJCQkJIExpc3QgKipwYXNzaW5nX3ZhbHVlcywgTGlz dCAqKnBhc3NpbmdfbmFtZXMpOworc3RhdGljIE5vZGUgKmNvZXJjZUpzb25GdW5jRXhwck91dHB1 dChQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25FeHByICpqc2V4cHIpOworc3RhdGljIE9pZAlKc29u RnVuY0V4cHJEZWZhdWx0UmV0dXJuVHlwZShKc29uRXhwciAqanNleHByKTsKK3N0YXRpYyBOb2Rl ICpjb2VyY2VKc29uRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIE5vZGUgKmV4cHIsCisJCQkJCQkJ Y29uc3QgSnNvblJldHVybmluZyAqcmV0dXJuaW5nKTsKK3N0YXRpYyBKc29uQ29lcmNpb24gKm1h a2VKc29uQ29lcmNpb24oY29uc3QgSnNvblJldHVybmluZyAqcmV0dXJuaW5nKTsKK3N0YXRpYyBM aXN0ICpJbml0SnNvbkl0ZW1Db2VyY2lvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBjb25zdCBKc29u UmV0dXJuaW5nICpyZXR1cm5pbmcsCisJCQkJCQkJCSAgIE9pZCBjb250ZXh0SXRlbVR5cGVJZCk7 CitzdGF0aWMgSnNvbkJlaGF2aW9yICp0cmFuc2Zvcm1Kc29uQmVoYXZpb3IoUGFyc2VTdGF0ZSAq cHN0YXRlLCBKc29uQmVoYXZpb3IgKmJlaGF2aW9yLAorCQkJCQkJCQkJCSAgIEpzb25CZWhhdmlv clR5cGUgZGVmYXVsdF9iZWhhdmlvciwKKwkJCQkJCQkJCQkgICBKc29uUmV0dXJuaW5nICpyZXR1 cm5pbmcpOwogc3RhdGljIE5vZGUgKm1ha2Vfcm93X2NvbXBhcmlzb25fb3AoUGFyc2VTdGF0ZSAq cHN0YXRlLCBMaXN0ICpvcG5hbWUsCiAJCQkJCQkJCQlMaXN0ICpsYXJncywgTGlzdCAqcmFyZ3Ms IGludCBsb2NhdGlvbik7CiBzdGF0aWMgTm9kZSAqbWFrZV9yb3dfZGlzdGluY3Rfb3AoUGFyc2VT dGF0ZSAqcHN0YXRlLCBMaXN0ICpvcG5hbWUsCkBAIC0zNTMsNiArMzcwLDEwIEBAIHRyYW5zZm9y bUV4cHJSZWN1cnNlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTm9kZSAqZXhwcikKIAkJCXJlc3VsdCA9 IHRyYW5zZm9ybUpzb25TZXJpYWxpemVFeHByKHBzdGF0ZSwgKEpzb25TZXJpYWxpemVFeHByICop IGV4cHIpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBUX0pzb25GdW5jRXhwcjoKKwkJCXJlc3VsdCA9 IHRyYW5zZm9ybUpzb25GdW5jRXhwcihwc3RhdGUsIChKc29uRnVuY0V4cHIgKikgZXhwcik7CisJ CQlicmVhazsKKwogCQlkZWZhdWx0OgogCQkJLyogc2hvdWxkIG5vdCByZWFjaCBoZXJlICovCiAJ CQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZTogJWQiLCAoaW50KSBub2RlVGFn KGV4cHIpKTsKQEAgLTMyMjksNyArMzI1MCw3IEBAIG1ha2VKc29uQnl0ZWFUb1RleHRDb252ZXJz aW9uKE5vZGUgKmV4cHIsIEpzb25Gb3JtYXQgKmZvcm1hdCwgaW50IGxvY2F0aW9uKQogc3RhdGlj IE5vZGUgKgogdHJhbnNmb3JtSnNvblZhbHVlRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIGNvbnN0 IGNoYXIgKmNvbnN0cnVjdE5hbWUsCiAJCQkJCSAgIEpzb25WYWx1ZUV4cHIgKnZlLCBKc29uRm9y bWF0VHlwZSBkZWZhdWx0X2Zvcm1hdCwKLQkJCQkJICAgT2lkIHRhcmdldHR5cGUpCisJCQkJCSAg IE9pZCB0YXJnZXR0eXBlLCBib29sIGlzYXJnKQogewogCU5vZGUJICAgKmV4cHIgPSB0cmFuc2Zv cm1FeHByUmVjdXJzZShwc3RhdGUsIChOb2RlICopIHZlLT5yYXdfZXhwcik7CiAJTm9kZQkgICAq cmF3ZXhwcjsKQEAgLTMyNjEsNiArMzI4Miw0MSBAQCB0cmFuc2Zvcm1Kc29uVmFsdWVFeHByKFBh cnNlU3RhdGUgKnBzdGF0ZSwgY29uc3QgY2hhciAqY29uc3RydWN0TmFtZSwKIAkJZWxzZQogCQkJ Zm9ybWF0ID0gdmUtPmZvcm1hdC0+Zm9ybWF0X3R5cGU7CiAJfQorCWVsc2UgaWYgKGlzYXJnKQor CXsKKwkJLyoKKwkJICogU3BlY2lhbCB0cmVhdG1lbnQgZm9yIFBBU1NJTkcgYXJndW1lbnRzLgor CQkgKgorCQkgKiBQYXNzIHR5cGVzIHN1cHBvcnRlZCBieSBHZXRKc29uUGF0aFZhcigpIC8gSnNv bkl0ZW1Gcm9tRGF0dW0oKQorCQkgKiBkaXJlY3RseSB3aXRob3V0IGNvbnZlcnRpbmcgdG8ganNv bltiXS4KKwkJICovCisJCXN3aXRjaCAoZXhwcnR5cGUpCisJCXsKKwkJCWNhc2UgQk9PTE9JRDoK KwkJCWNhc2UgTlVNRVJJQ09JRDoKKwkJCWNhc2UgSU5UMk9JRDoKKwkJCWNhc2UgSU5UNE9JRDoK KwkJCWNhc2UgSU5UOE9JRDoKKwkJCWNhc2UgRkxPQVQ0T0lEOgorCQkJY2FzZSBGTE9BVDhPSUQ6 CisJCQljYXNlIFRFWFRPSUQ6CisJCQljYXNlIFZBUkNIQVJPSUQ6CisJCQljYXNlIERBVEVPSUQ6 CisJCQljYXNlIFRJTUVPSUQ6CisJCQljYXNlIFRJTUVUWk9JRDoKKwkJCWNhc2UgVElNRVNUQU1Q T0lEOgorCQkJY2FzZSBUSU1FU1RBTVBUWk9JRDoKKwkJCQlyZXR1cm4gZXhwcjsKKworCQkJZGVm YXVsdDoKKwkJCQlpZiAodHlwY2F0ZWdvcnkgPT0gVFlQQ0FURUdPUllfU1RSSU5HKQorCQkJCQly ZXR1cm4gZXhwcjsKKwkJCQkvKiBlbHNlIGNvbnZlcnQgYXJndW1lbnQgdG8ganNvbltiXSB0eXBl ICovCisJCQkJYnJlYWs7CisJCX0KKworCQlmb3JtYXQgPSBkZWZhdWx0X2Zvcm1hdDsKKwl9CiAJ ZWxzZSBpZiAoZXhwcnR5cGUgPT0gSlNPTk9JRCB8fCBleHBydHlwZSA9PSBKU09OQk9JRCkKIAkJ Zm9ybWF0ID0gSlNfRk9STUFUX0RFRkFVTFQ7IC8qIGRvIG5vdCBmb3JtYXQganNvbltiXSB0eXBl cyAqLwogCWVsc2UKQEAgLTMyNzIsNyArMzMyOCwxMiBAQCB0cmFuc2Zvcm1Kc29uVmFsdWVFeHBy KFBhcnNlU3RhdGUgKnBzdGF0ZSwgY29uc3QgY2hhciAqY29uc3RydWN0TmFtZSwKIAkJTm9kZQkg ICAqY29lcmNlZDsKIAkJYm9vbAkJb25seV9hbGxvd19jYXN0ID0gT2lkSXNWYWxpZCh0YXJnZXR0 eXBlKTsKIAotCQlpZiAoIW9ubHlfYWxsb3dfY2FzdCAmJgorCQkvKgorCQkgKiBQQVNTSU5HIGFy Z3MgYXJlIGhhbmRsZWQgYXBwcm9wcmlhdGVseSBieSBHZXRKc29uUGF0aFZhcigpIC8KKwkJICog SnNvbkl0ZW1Gcm9tRGF0dW0oKS4KKwkJICovCisJCWlmICghaXNhcmcgJiYKKwkJCSFvbmx5X2Fs bG93X2Nhc3QgJiYKIAkJCWV4cHJ0eXBlICE9IEJZVEVBT0lEICYmIHR5cGNhdGVnb3J5ICE9IFRZ UENBVEVHT1JZX1NUUklORykKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCWVycmNvZGUoRVJSQ09E RV9EQVRBVFlQRV9NSVNNQVRDSCksCkBAIC0zNDI1LDYgKzM0ODYsMTEgQEAgdHJhbnNmb3JtSnNv bk91dHB1dChQYXJzZVN0YXRlICpwc3RhdGUsIGNvbnN0IEpzb25PdXRwdXQgKm91dHB1dCwKIAkJ CQllcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQllcnJtc2coInJl dHVybmluZyBTRVRPRiB0eXBlcyBpcyBub3Qgc3VwcG9ydGVkIGluIFNRTC9KU09OIGZ1bmN0aW9u cyIpKTsKIAorCWlmIChnZXRfdHlwdHlwZShyZXQtPnR5cGlkKSA9PSBUWVBUWVBFX1BTRVVETykK KwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9S VEVEKSwKKwkJCQllcnJtc2coInJldHVybmluZyBwc2V1ZG8tdHlwZXMgaXMgbm90IHN1cHBvcnRl ZCBpbiBTUUwvSlNPTiBmdW5jdGlvbnMiKSk7CisKIAlpZiAocmV0LT5mb3JtYXQtPmZvcm1hdF90 eXBlID09IEpTX0ZPUk1BVF9ERUZBVUxUKQogCQkvKiBhc3NpZ24gSlNPTkIgZm9ybWF0IHdoZW4g cmV0dXJuaW5nIGpzb25iLCBvciBKU09OIGZvcm1hdCBvdGhlcndpc2UgKi8KIAkJcmV0LT5mb3Jt YXQtPmZvcm1hdF90eXBlID0KQEAgLTM2MjEsNyArMzY4Nyw3IEBAIHRyYW5zZm9ybUpzb25PYmpl Y3RDb25zdHJ1Y3RvcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25PYmplY3RDb25zdHJ1Y3RvciAq Y3RvcikKIAkJCU5vZGUJICAgKnZhbCA9IHRyYW5zZm9ybUpzb25WYWx1ZUV4cHIocHN0YXRlLCAi SlNPTl9PQkpFQ1QoKSIsCiAJCQkJCQkJCQkJCQkJIGt2LT52YWx1ZSwKIAkJCQkJCQkJCQkJCQkg SlNfRk9STUFUX0RFRkFVTFQsCi0JCQkJCQkJCQkJCQkJIEludmFsaWRPaWQpOworCQkJCQkJCQkJ CQkJCSBJbnZhbGlkT2lkLCBmYWxzZSk7CiAKIAkJCWFyZ3MgPSBsYXBwZW5kKGFyZ3MsIGtleSk7 CiAJCQlhcmdzID0gbGFwcGVuZChhcmdzLCB2YWwpOwpAQCAtMzgwOCw3ICszODc0LDcgQEAgdHJh bnNmb3JtSnNvbk9iamVjdEFnZyhQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25PYmplY3RBZ2cgKmFn ZykKIAl2YWwgPSB0cmFuc2Zvcm1Kc29uVmFsdWVFeHByKHBzdGF0ZSwgIkpTT05fT0JKRUNUQUdH KCkiLAogCQkJCQkJCQkgYWdnLT5hcmctPnZhbHVlLAogCQkJCQkJCQkgSlNfRk9STUFUX0RFRkFV TFQsCi0JCQkJCQkJCSBJbnZhbGlkT2lkKTsKKwkJCQkJCQkJIEludmFsaWRPaWQsIGZhbHNlKTsK IAlhcmdzID0gbGlzdF9tYWtlMihrZXksIHZhbCk7CiAKIAlyZXR1cm5pbmcgPSB0cmFuc2Zvcm1K c29uQ29uc3RydWN0b3JPdXRwdXQocHN0YXRlLCBhZ2ctPmNvbnN0cnVjdG9yLT5vdXRwdXQsCkBA IC0zODY0LDkgKzM5MzAsOCBAQCB0cmFuc2Zvcm1Kc29uQXJyYXlBZ2coUGFyc2VTdGF0ZSAqcHN0 YXRlLCBKc29uQXJyYXlBZ2cgKmFnZykKIAlPaWQJCQlhZ2dmbm9pZDsKIAlPaWQJCQlhZ2d0eXBl OwogCi0JYXJnID0gdHJhbnNmb3JtSnNvblZhbHVlRXhwcihwc3RhdGUsICJKU09OX0FSUkFZQUdH KCkiLAotCQkJCQkJCQkgYWdnLT5hcmcsCi0JCQkJCQkJCSBKU19GT1JNQVRfREVGQVVMVCwgSW52 YWxpZE9pZCk7CisJYXJnID0gdHJhbnNmb3JtSnNvblZhbHVlRXhwcihwc3RhdGUsICJKU09OX0FS UkFZQUdHKCkiLCBhZ2ctPmFyZywKKwkJCQkJCQkJIEpTX0ZPUk1BVF9ERUZBVUxULCBJbnZhbGlk T2lkLCBmYWxzZSk7CiAKIAlyZXR1cm5pbmcgPSB0cmFuc2Zvcm1Kc29uQ29uc3RydWN0b3JPdXRw dXQocHN0YXRlLCBhZ2ctPmNvbnN0cnVjdG9yLT5vdXRwdXQsCiAJCQkJCQkJCQkJCSAgIGxpc3Rf bWFrZTEoYXJnKSk7CkBAIC0zOTEzLDkgKzM5NzgsOCBAQCB0cmFuc2Zvcm1Kc29uQXJyYXlDb25z dHJ1Y3RvcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25BcnJheUNvbnN0cnVjdG9yICpjdG9yKQog CQl7CiAJCQlKc29uVmFsdWVFeHByICpqc3ZhbCA9IGNhc3ROb2RlKEpzb25WYWx1ZUV4cHIsIGxm aXJzdChsYykpOwogCQkJTm9kZQkgICAqdmFsID0gdHJhbnNmb3JtSnNvblZhbHVlRXhwcihwc3Rh dGUsICJKU09OX0FSUkFZKCkiLAotCQkJCQkJCQkJCQkJCSBqc3ZhbCwKLQkJCQkJCQkJCQkJCQkg SlNfRk9STUFUX0RFRkFVTFQsCi0JCQkJCQkJCQkJCQkJIEludmFsaWRPaWQpOworCQkJCQkJCQkJ CQkJCSBqc3ZhbCwgSlNfRk9STUFUX0RFRkFVTFQsCisJCQkJCQkJCQkJCQkJIEludmFsaWRPaWQs IGZhbHNlKTsKIAogCQkJYXJncyA9IGxhcHBlbmQoYXJncywgdmFsKTsKIAkJfQpAQCAtNDA3NCw3 ICs0MTM4LDcgQEAgdHJhbnNmb3JtSnNvblBhcnNlRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEpz b25QYXJzZUV4cHIgKmpzZXhwcikKIAkJICogZnVuY3Rpb24tbGlrZSBDQVNUcy4KIAkJICovCiAJ CWFyZyA9IHRyYW5zZm9ybUpzb25WYWx1ZUV4cHIocHN0YXRlLCAiSlNPTigpIiwganNleHByLT5l eHByLAotCQkJCQkJCQkJIEpTX0ZPUk1BVF9KU09OLCByZXR1cm5pbmctPnR5cGlkKTsKKwkJCQkJ CQkJCSBKU19GT1JNQVRfSlNPTiwgcmV0dXJuaW5nLT50eXBpZCwgZmFsc2UpOwogCX0KIAogCXJl dHVybiBtYWtlSnNvbkNvbnN0cnVjdG9yRXhwcihwc3RhdGUsIEpTQ1RPUl9KU09OX1BBUlNFLCBs aXN0X21ha2UxKGFyZyksIE5VTEwsCkBAIC00MTE5LDcgKzQxODMsNyBAQCB0cmFuc2Zvcm1Kc29u U2VyaWFsaXplRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25TZXJpYWxpemVFeHByICpleHBy KQogCU5vZGUJICAgKmFyZyA9IHRyYW5zZm9ybUpzb25WYWx1ZUV4cHIocHN0YXRlLCAiSlNPTl9T RVJJQUxJWkUoKSIsCiAJCQkJCQkJCQkJCSBleHByLT5leHByLAogCQkJCQkJCQkJCQkgSlNfRk9S TUFUX0pTT04sCi0JCQkJCQkJCQkJCSBJbnZhbGlkT2lkKTsKKwkJCQkJCQkJCQkJIEludmFsaWRP aWQsIGZhbHNlKTsKIAogCWlmIChleHByLT5vdXRwdXQpCiAJewpAQCAtNDE1MywzICs0MjE3LDU0 MCBAQCB0cmFuc2Zvcm1Kc29uU2VyaWFsaXplRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25T ZXJpYWxpemVFeHByICpleHByKQogCXJldHVybiBtYWtlSnNvbkNvbnN0cnVjdG9yRXhwcihwc3Rh dGUsIEpTQ1RPUl9KU09OX1NFUklBTElaRSwgbGlzdF9tYWtlMShhcmcpLAogCQkJCQkJCQkgICBO VUxMLCByZXR1cm5pbmcsIGZhbHNlLCBmYWxzZSwgZXhwci0+bG9jYXRpb24pOwogfQorCisvKgor ICogVHJhbnNmb3JtIEpTT05fVkFMVUUsIEpTT05fUVVFUlksIEpTT05fRVhJU1RTIGZ1bmN0aW9u cyBpbnRvIGEgSnNvbkV4cHIgbm9kZS4KKyAqLworc3RhdGljIE5vZGUgKgordHJhbnNmb3JtSnNv bkZ1bmNFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkZ1bmNFeHByICpmdW5jKQoreworCUpz b25FeHByICAgKmpzZXhwciA9IE5VTEw7CisJY29uc3QgY2hhciAqZnVuY19uYW1lID0gTlVMTDsK KworCXN3aXRjaCAoZnVuYy0+b3ApCisJeworCQljYXNlIEpTT05fRVhJU1RTX09QOgorCQkJZnVu Y19uYW1lID0gIkpTT05fRVhJU1RTIjsKKwkJCWJyZWFrOworCQljYXNlIEpTT05fUVVFUllfT1A6 CisJCQlmdW5jX25hbWUgPSAiSlNPTl9RVUVSWSI7CisJCQlicmVhazsKKwkJY2FzZSBKU09OX1ZB TFVFX09QOgorCQkJZnVuY19uYW1lID0gIkpTT05fVkFMVUUiOworCQkJYnJlYWs7CisJCWRlZmF1 bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBKc29uRnVuY0V4cHIgb3AiKTsKKwkJCWJyZWFr OworCX0KKworCS8qIE9ubHkgYWxsb3cgRk9STUFUIHNwZWNpZmljYXRpb24gZm9yIEpTT05fUVVF UlkoKS4gKi8KKwlpZiAoZnVuYy0+b3V0cHV0ICYmIGZ1bmMtPm9wICE9IEpTT05fUVVFUllfT1Ap CisJeworCQlKc29uRm9ybWF0ICpmb3JtYXQgPSBmdW5jLT5vdXRwdXQtPnJldHVybmluZy0+Zm9y bWF0OworCisJCWlmIChmb3JtYXQtPmZvcm1hdF90eXBlICE9IEpTX0ZPUk1BVF9ERUZBVUxUIHx8 CisJCQlmb3JtYXQtPmVuY29kaW5nICE9IEpTX0VOQ19ERUZBVUxUKQorCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCWVycm1zZygiY2Fu bm90IHNwZWNpZnkgRk9STUFUIGluIFJFVFVSTklORyBjbGF1c2Ugb2YgJXMoKSIsCisJCQkJCQkg ICBmdW5jX25hbWUpLAorCQkJCQlwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBmb3JtYXQtPmxv Y2F0aW9uKSk7CisJfQorCisJaWYgKGZ1bmMtPm9wID09IEpTT05fUVVFUllfT1AgJiYKKwkJZnVu Yy0+cXVvdGVzICE9IEpTX1FVT1RFU19VTlNQRUMgJiYKKwkJKGZ1bmMtPndyYXBwZXIgPT0gSlNX X0NPTkRJVElPTkFMIHx8CisJCSBmdW5jLT53cmFwcGVyID09IEpTV19VTkNPTkRJVElPTkFMKSkK KwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJ CQllcnJtc2coIlNRTC9KU09OIFFVT1RFUyBiZWhhdmlvciBtdXN0IG5vdCBiZSBzcGVjaWZpZWQg d2hlbiBXSVRIIFdSQVBQRVIgaXMgdXNlZCIpLAorCQkJCXBhcnNlcl9lcnJwb3NpdGlvbihwc3Rh dGUsIGZ1bmMtPmxvY2F0aW9uKSk7CisKKworCWpzZXhwciA9IHRyYW5zZm9ybUpzb25FeHByQ29t bW9uKHBzdGF0ZSwgZnVuYywgZnVuY19uYW1lKTsKKworCXN3aXRjaCAoZnVuYy0+b3ApCisJewor CQljYXNlIEpTT05fRVhJU1RTX09QOgorCQkJaWYgKCFPaWRJc1ZhbGlkKGpzZXhwci0+cmV0dXJu aW5nLT50eXBpZCkpCisJCQl7CisJCQkJanNleHByLT5yZXR1cm5pbmctPnR5cGlkID0gQk9PTE9J RDsKKwkJCQlqc2V4cHItPnJldHVybmluZy0+dHlwbW9kID0gLTE7CisJCQl9CisJCQlqc2V4cHIt PnJldHVybmluZy0+Zm9ybWF0LT5mb3JtYXRfdHlwZSA9IEpTX0ZPUk1BVF9ERUZBVUxUOworCQkJ anNleHByLT5yZXR1cm5pbmctPmZvcm1hdC0+ZW5jb2RpbmcgPSBKU19FTkNfREVGQVVMVDsKKwor CQkJanNleHByLT5vbl9lcnJvciA9IHRyYW5zZm9ybUpzb25CZWhhdmlvcihwc3RhdGUsIGZ1bmMt Pm9uX2Vycm9yLAorCQkJCQkJCQkJCQkJCSBKU09OX0JFSEFWSU9SX0ZBTFNFLAorCQkJCQkJCQkJ CQkJCSBqc2V4cHItPnJldHVybmluZyk7CisJCQlicmVhazsKKworCQljYXNlIEpTT05fUVVFUllf T1A6CisJCQlqc2V4cHItPndyYXBwZXIgPSBmdW5jLT53cmFwcGVyOworCisJCQkvKgorCQkJICog S2VlcCBxdW90ZXMgYnkgZGVmYXVsdCwgb21pdHRpbmcgdGhlbSBvbmx5IGlmIE9NSVQgUVVPVEVT IGlzCisJCQkgKiBzcGVjaWZpZWQuCisJCQkgKi8KKwkJCWpzZXhwci0+b21pdF9xdW90ZXMgPSAo ZnVuYy0+cXVvdGVzID09IEpTX1FVT1RFU19PTUlUKTsKKworCQkJaWYgKCFPaWRJc1ZhbGlkKGpz ZXhwci0+cmV0dXJuaW5nLT50eXBpZCkpCisJCQl7CisJCQkJSnNvblJldHVybmluZyAqcmV0ID0g anNleHByLT5yZXR1cm5pbmc7CisKKwkJCQlyZXQtPnR5cGlkID0gSnNvbkZ1bmNFeHByRGVmYXVs dFJldHVyblR5cGUoanNleHByKTsKKwkJCQlyZXQtPnR5cG1vZCA9IC0xOworCQkJfQorCQkJanNl eHByLT5yZXN1bHRfY29lcmNpb24gPSBjb2VyY2VKc29uRnVuY0V4cHJPdXRwdXQocHN0YXRlLCBq c2V4cHIpOworCisJCQlpZiAoZnVuYy0+b25fZW1wdHkpCisJCQkJanNleHByLT5vbl9lbXB0eSA9 IHRyYW5zZm9ybUpzb25CZWhhdmlvcihwc3RhdGUsCisJCQkJCQkJCQkJCQkJCSBmdW5jLT5vbl9l bXB0eSwKKwkJCQkJCQkJCQkJCQkJIEpTT05fQkVIQVZJT1JfTlVMTCwKKwkJCQkJCQkJCQkJCQkJ IGpzZXhwci0+cmV0dXJuaW5nKTsKKwkJCWpzZXhwci0+b25fZXJyb3IgPSB0cmFuc2Zvcm1Kc29u QmVoYXZpb3IocHN0YXRlLCBmdW5jLT5vbl9lcnJvciwKKwkJCQkJCQkJCQkJCQkgSlNPTl9CRUhB VklPUl9OVUxMLAorCQkJCQkJCQkJCQkJCSBqc2V4cHItPnJldHVybmluZyk7CisJCQlicmVhazsK KworCQljYXNlIEpTT05fVkFMVUVfT1A6CisJCQlpZiAoIU9pZElzVmFsaWQoanNleHByLT5yZXR1 cm5pbmctPnR5cGlkKSkKKwkJCXsKKwkJCQkvKiBNYWtlIEpTT05fVkFMVUUgcmV0dXJuIHRleHQg YnkgZGVmYXVsdCAqLworCQkJCWpzZXhwci0+cmV0dXJuaW5nLT50eXBpZCA9IFRFWFRPSUQ7CisJ CQkJanNleHByLT5yZXR1cm5pbmctPnR5cG1vZCA9IC0xOworCQkJfQorCQkJanNleHByLT5yZXR1 cm5pbmctPmZvcm1hdC0+Zm9ybWF0X3R5cGUgPSBKU19GT1JNQVRfREVGQVVMVDsKKwkJCWpzZXhw ci0+cmV0dXJuaW5nLT5mb3JtYXQtPmVuY29kaW5nID0gSlNfRU5DX0RFRkFVTFQ7CisKKwkJCWpz ZXhwci0+cmVzdWx0X2NvZXJjaW9uID0gY29lcmNlSnNvbkZ1bmNFeHByT3V0cHV0KHBzdGF0ZSwg anNleHByKTsKKworCQkJLyoKKwkJCSAqIEluaXRpYWxpemUgZXhwcmVzc2lvbnMgdG8gY29lcmNl IHRoZSBzY2FsYXIgdmFsdWUgcmV0dXJuZWQgYnkKKwkJCSAqIEpzb25QYXRoVmFsdWUoKSB0byB0 aGUgInJldHVybmluZyIgdHlwZS4KKwkJCSAqLworCQkJaWYgKGpzZXhwci0+cmVzdWx0X2NvZXJj aW9uKQorCQkJCWpzZXhwci0+aXRlbV9jb2VyY2lvbnMgPQorCQkJCQlJbml0SnNvbkl0ZW1Db2Vy Y2lvbnMocHN0YXRlLCBqc2V4cHItPnJldHVybmluZywKKwkJCQkJCQkJCQkgIGV4cHJUeXBlKGpz ZXhwci0+Zm9ybWF0dGVkX2V4cHIpKTsKKworCQkJaWYgKGZ1bmMtPm9uX2VtcHR5KQorCQkJCWpz ZXhwci0+b25fZW1wdHkgPSB0cmFuc2Zvcm1Kc29uQmVoYXZpb3IocHN0YXRlLAorCQkJCQkJCQkJ CQkJCQkgZnVuYy0+b25fZW1wdHksCisJCQkJCQkJCQkJCQkJCSBKU09OX0JFSEFWSU9SX05VTEws CisJCQkJCQkJCQkJCQkJCSBqc2V4cHItPnJldHVybmluZyk7CisJCQlqc2V4cHItPm9uX2Vycm9y ID0gdHJhbnNmb3JtSnNvbkJlaGF2aW9yKHBzdGF0ZSwgZnVuYy0+b25fZXJyb3IsCisJCQkJCQkJ CQkJCQkJIEpTT05fQkVIQVZJT1JfTlVMTCwKKwkJCQkJCQkJCQkJCQkganNleHByLT5yZXR1cm5p bmcpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIEpz b25GdW5jRXhwciBvcCIpOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIChOb2RlICopIGpzZXhw cjsKK30KKworLyoKKyAqIENvbW1vbiBjb2RlIGZvciBKU09OX1ZBTFVFLCBKU09OX1FVRVJZLCBK U09OX0VYSVNUUyB0cmFuc2Zvcm1hdGlvbgorICogaW50byBhIEpzb25FeHByIG5vZGUuCisgKi8K K3N0YXRpYyBKc29uRXhwciAqCit0cmFuc2Zvcm1Kc29uRXhwckNvbW1vbihQYXJzZVN0YXRlICpw c3RhdGUsIEpzb25GdW5jRXhwciAqZnVuYywKKwkJCQkJCWNvbnN0IGNoYXIgKmNvbnN0cnVjdE5h bWUpCit7CisJSnNvbkV4cHIgICAqanNleHByID0gbWFrZU5vZGUoSnNvbkV4cHIpOworCU5vZGUJ ICAgKnBhdGhfc3BlYzsKKworCWpzZXhwci0+bG9jYXRpb24gPSBmdW5jLT5sb2NhdGlvbjsKKwlq c2V4cHItPm9wID0gZnVuYy0+b3A7CisJanNleHByLT5mb3JtYXR0ZWRfZXhwciA9IHRyYW5zZm9y bUpzb25WYWx1ZUV4cHIocHN0YXRlLCBjb25zdHJ1Y3ROYW1lLAorCQkJCQkJCQkJCQkJCWZ1bmMt PmNvbnRleHRfaXRlbSwKKwkJCQkJCQkJCQkJCQlKU19GT1JNQVRfSlNPTiwKKwkJCQkJCQkJCQkJ CQlJbnZhbGlkT2lkLCBmYWxzZSk7CisKKwlpZiAoZXhwclR5cGUoanNleHByLT5mb3JtYXR0ZWRf ZXhwcikgIT0gSlNPTkJPSUQpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RF X0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJZXJybXNnKCIlcygpIGlzIG5vdCB5ZXQgaW1w bGVtZW50ZWQgZm9yIHRoZSBqc29uIHR5cGUiLAorCQkJCQkgICBjb25zdHJ1Y3ROYW1lKSwKKwkJ CQllcnJoaW50KCJUcnkgY2FzdGluZyB0aGUgYXJndW1lbnQgdG8ganNvbmIiKSwKKwkJCQlwYXJz ZXJfZXJycG9zaXRpb24ocHN0YXRlLCBleHByTG9jYXRpb24oanNleHByLT5mb3JtYXR0ZWRfZXhw cikpKTsKKworCWpzZXhwci0+Zm9ybWF0ID0gZnVuYy0+Y29udGV4dF9pdGVtLT5mb3JtYXQ7CisK KwlwYXRoX3NwZWMgPSB0cmFuc2Zvcm1FeHByUmVjdXJzZShwc3RhdGUsIGZ1bmMtPnBhdGhzcGVj KTsKKwlqc2V4cHItPnBhdGhfc3BlYyA9CisJCWNvZXJjZV90b190YXJnZXRfdHlwZShwc3RhdGUs IHBhdGhfc3BlYywgZXhwclR5cGUocGF0aF9zcGVjKSwKKwkJCQkJCQkgIEpTT05QQVRIT0lELCAt MSwKKwkJCQkJCQkgIENPRVJDSU9OX0VYUExJQ0lULCBDT0VSQ0VfSU1QTElDSVRfQ0FTVCwKKwkJ CQkJCQkgIGV4cHJMb2NhdGlvbihwYXRoX3NwZWMpKTsKKwlpZiAoIWpzZXhwci0+cGF0aF9zcGVj KQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQVRZUEVfTUlTTUFU Q0gpLAorCQkJCSBlcnJtc2coIkpTT04gcGF0aCBleHByZXNzaW9uIG11c3QgYmUgb2YgdHlwZSAl cywgbm90IG9mIHR5cGUgJXMiLAorCQkJCQkJImpzb25wYXRoIiwgZm9ybWF0X3R5cGVfYmUoZXhw clR5cGUocGF0aF9zcGVjKSkpLAorCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBleHBy TG9jYXRpb24ocGF0aF9zcGVjKSkpKTsKKworCS8qCisJICogVHJhbnNmb3JtIGFuZCBjb2VyY2Ug dG8ganNvbltiXSBwYXNzaW5nIGFyZ3VtZW50cywgd2hvc2UgZm9ybWF0IGlzCisJICogZGV0ZXJt aW5lZCBieSBjb250ZXh0IGl0ZW0gdHlwZS4KKwkgKi8KKwl0cmFuc2Zvcm1Kc29uUGFzc2luZ0Fy Z3MocHN0YXRlLCBjb25zdHJ1Y3ROYW1lLAorCQkJCQkJCSBleHByVHlwZShqc2V4cHItPmZvcm1h dHRlZF9leHByKSA9PSBKU09OQk9JRCA/CisJCQkJCQkJIEpTX0ZPUk1BVF9KU09OQiA6IEpTX0ZP Uk1BVF9KU09OLAorCQkJCQkJCSBmdW5jLT5wYXNzaW5nLAorCQkJCQkJCSAmanNleHByLT5wYXNz aW5nX3ZhbHVlcywKKwkJCQkJCQkgJmpzZXhwci0+cGFzc2luZ19uYW1lcyk7CisKKwlqc2V4cHIt PnJldHVybmluZyA9IHRyYW5zZm9ybUpzb25PdXRwdXQocHN0YXRlLCBmdW5jLT5vdXRwdXQsIGZh bHNlKTsKKworCXJldHVybiBqc2V4cHI7Cit9CisKKy8qCisgKiBUcmFuc2Zvcm0gYSBKU09OIFBB U1NJTkcgY2xhdXNlLgorICovCitzdGF0aWMgdm9pZAordHJhbnNmb3JtSnNvblBhc3NpbmdBcmdz KFBhcnNlU3RhdGUgKnBzdGF0ZSwgY29uc3QgY2hhciAqY29uc3RydWN0TmFtZSwKKwkJCQkJCSBK c29uRm9ybWF0VHlwZSBmb3JtYXQsIExpc3QgKmFyZ3MsCisJCQkJCQkgTGlzdCAqKnBhc3Npbmdf dmFsdWVzLCBMaXN0ICoqcGFzc2luZ19uYW1lcykKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCSpw YXNzaW5nX3ZhbHVlcyA9IE5JTDsKKwkqcGFzc2luZ19uYW1lcyA9IE5JTDsKKworCWZvcmVhY2go bGMsIGFyZ3MpCisJeworCQlKc29uQXJndW1lbnQgKmFyZyA9IGNhc3ROb2RlKEpzb25Bcmd1bWVu dCwgbGZpcnN0KGxjKSk7CisJCU5vZGUJICAgKmV4cHIgPSB0cmFuc2Zvcm1Kc29uVmFsdWVFeHBy KHBzdGF0ZSwgY29uc3RydWN0TmFtZSwKKwkJCQkJCQkJCQkJCSAgYXJnLT52YWwsIGZvcm1hdCwK KwkJCQkJCQkJCQkJCSAgSW52YWxpZE9pZCwgdHJ1ZSk7CisKKwkJKnBhc3NpbmdfdmFsdWVzID0g bGFwcGVuZCgqcGFzc2luZ192YWx1ZXMsIGV4cHIpOworCQkqcGFzc2luZ19uYW1lcyA9IGxhcHBl bmQoKnBhc3NpbmdfbmFtZXMsIG1ha2VTdHJpbmcoYXJnLT5uYW1lKSk7CisJfQorfQorCisvKgor ICogQ3JlYXRlIGFuIGV4cHJlc3Npb24gdG8gY29lcmNlIHRoZSBvdXRwdXQgb2YgSlNPTl9WQUxV RSgpIC8gSlNPTl9RVUVSWSgpCisgKiB0byB0aGUgb3V0cHV0IHR5cGUsIGlmIG5lZWRlZC4KKyAq Lworc3RhdGljIE5vZGUgKgorY29lcmNlSnNvbkZ1bmNFeHByT3V0cHV0KFBhcnNlU3RhdGUgKnBz dGF0ZSwgSnNvbkV4cHIgKmpzZXhwcikKK3sKKwlKc29uUmV0dXJuaW5nICpyZXR1cm5pbmcgPSBq c2V4cHItPnJldHVybmluZzsKKwlOb2RlCSAgICpjb250ZXh0X2l0ZW0gPSBqc2V4cHItPmZvcm1h dHRlZF9leHByOworCWludAkJCWRlZmF1bHRfdHlwbW9kOworCU9pZAkJCWRlZmF1bHRfdHlwaWQ7 CisKKwlBc3NlcnQocmV0dXJuaW5nKTsKKworCS8qCisJICogVXNlIGEgSnNvbkNvZXJjaW9uIG5v ZGUgdG8gaW1wbGVtZW50IGEgbm9uLWRlZmF1bHQgUVVPVEVTIG9yIFdSQVBQRVIKKwkgKiBiZWhh dmlvciBmb3IgSlNPTl9RVUVSWS4KKwkgKi8KKwlpZiAoanNleHByLT5vcCA9PSBKU09OX1FVRVJZ X09QICYmCisJCShqc2V4cHItPm9taXRfcXVvdGVzIHx8IGpzZXhwci0+d3JhcHBlciAhPSBKU1df VU5TUEVDKSkKKwl7CisJCUpzb25Db2VyY2lvbiAqY29lcmNpb24gPSBtYWtlSnNvbkNvZXJjaW9u KHJldHVybmluZyk7CisKKwkJY29lcmNpb24tPm9taXRfcXVvdGVzID0ganNleHByLT5vbWl0X3F1 b3RlczsKKworCQlyZXR1cm4gKE5vZGUgKikgY29lcmNpb247CisJfQorCisJZGVmYXVsdF90eXBp ZCA9IEpzb25GdW5jRXhwckRlZmF1bHRSZXR1cm5UeXBlKGpzZXhwcik7CisJZGVmYXVsdF90eXBt b2QgPSAtMTsKKwlpZiAocmV0dXJuaW5nLT50eXBpZCAhPSBkZWZhdWx0X3R5cGlkIHx8CisJCXJl dHVybmluZy0+dHlwbW9kICE9IGRlZmF1bHRfdHlwbW9kKQorCXsKKwkJLyoKKwkJICogV2UgYWJ1 c2UgQ2FzZVRlc3RFeHByIGhlcmUgYXMgcGxhY2Vob2xkZXIgdG8gcGFzcyB0aGUgcmVzdWx0IG9m CisJCSAqIGV2YWx1YXRpbmcgdGhlIEpTT05fVkFMVUUvUVVFUlkganNvbnBhdGggZXhwcmVzc2lv biBhcyBpbnB1dCB0byB0aGUKKwkJICogY29lcmNpb24gZXhwcmVzc2lvbi4KKwkJICovCisJCUNh c2VUZXN0RXhwciAqcGxhY2Vob2xkZXIgPSBtYWtlTm9kZShDYXNlVGVzdEV4cHIpOworCisJCXBs YWNlaG9sZGVyLT50eXBlSWQgPSBleHByVHlwZShjb250ZXh0X2l0ZW0pOworCQlwbGFjZWhvbGRl ci0+dHlwZU1vZCA9IGV4cHJUeXBtb2QoY29udGV4dF9pdGVtKTsKKwkJcGxhY2Vob2xkZXItPmNv bGxhdGlvbiA9IGV4cHJDb2xsYXRpb24oY29udGV4dF9pdGVtKTsKKworCQlBc3NlcnQocGxhY2Vo b2xkZXItPnR5cGVJZCA9PSBkZWZhdWx0X3R5cGlkKTsKKwkJQXNzZXJ0KHBsYWNlaG9sZGVyLT50 eXBlTW9kID09IGRlZmF1bHRfdHlwbW9kKTsKKworCQlyZXR1cm4gY29lcmNlSnNvbkV4cHIocHN0 YXRlLCAoTm9kZSAqKSBwbGFjZWhvbGRlciwgcmV0dXJuaW5nKTsKKwl9CisKKwlyZXR1cm4gTlVM TDsKK30KKworLyogUmV0dXJucyB0aGUgZGVmYXVsdCB0eXBlIGZvciBhIGdpdmVuIEpzb25FeHBy IGZvciBhIGdpdmVuIEpzb25Gb3JtYXQuICovCitzdGF0aWMgT2lkCitKc29uRnVuY0V4cHJEZWZh dWx0UmV0dXJuVHlwZShKc29uRXhwciAqanNleHByKQoreworCUpzb25Gb3JtYXQgKmZvcm1hdCA9 IGpzZXhwci0+Zm9ybWF0OworCU5vZGUJICAgKmNvbnRleHRfaXRlbSA9IGpzZXhwci0+Zm9ybWF0 dGVkX2V4cHI7CisKKwlBc3NlcnQoZm9ybWF0KTsKKwlpZiAoZm9ybWF0LT5mb3JtYXRfdHlwZSA9 PSBKU19GT1JNQVRfSlNPTkIpCisJCXJldHVybiBKU09OQk9JRDsKKwllbHNlIGlmIChmb3JtYXQt PmZvcm1hdF90eXBlID09IEpTX0ZPUk1BVF9ERUZBVUxUICYmCisJCQkgZXhwclR5cGUoY29udGV4 dF9pdGVtKSA9PSBKU09OQk9JRCkKKwkJcmV0dXJuIEpTT05CT0lEOworCisJcmV0dXJuIEpTT05P SUQ7Cit9CisKKy8qCisgKiBSZXR1cm5zIGEgSnNvbkNvZXJjaW9uIG5vZGUgdG8gY29lcmNlIGEg anNvbmItdmFsdWVkIGV4cHJlc3Npb24gdG8gdGhlCisgKiB0YXJnZXQgdHlwZSBnaXZlbiBieSAn cmV0dXJuaW5nJyB1c2luZyBlaXRoZXIganNvbl9wb3B1bGF0ZV90eXBlKCkgb3IKKyAqIGJ5IHVz aW5nIHRoZSB0YXJnZXQgdHlwZSdzIGlucHV0IGZ1bmN0aW9uLgorICovCitzdGF0aWMgSnNvbkNv ZXJjaW9uICoKK21ha2VKc29uQ29lcmNpb24oY29uc3QgSnNvblJldHVybmluZyAqcmV0dXJuaW5n KQoreworCUpzb25Db2VyY2lvbiAqY29lcmNpb24gPSBtYWtlTm9kZShKc29uQ29lcmNpb24pOwor CisJY29lcmNpb24tPnRhcmdldHR5cGUgPSByZXR1cm5pbmctPnR5cGlkOworCWNvZXJjaW9uLT50 YXJnZXR0eXBtb2QgPSByZXR1cm5pbmctPnR5cG1vZDsKKworCXJldHVybiBjb2VyY2lvbjsKK30K KworLyoKKyAqIFNldCB1cCBhIEpzb25Db2VyY2lvbiBub2RlIHRvOgorICoKKyAqIAktIGNvZXJj ZSBleHByZXNzaW9uIHRvIHRoZSBvdXRwdXQgcmV0dXJuaW5nIHR5cGUsIG9yCisgKiAJLSBjb2Vy Y2UgdXNpbmcganNvbl9wb3B1bGF0ZV90eXBlKCkgaWYgcmV0dXJuaW5nIHR5cGUgcmVxdWlyZXMg aXQsIG9yCisgKiAJLSBjb2VyY2UgdmlhIEkvTy4KKyAqLworc3RhdGljIE5vZGUgKgorY29lcmNl SnNvbkV4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpleHByLCBjb25zdCBKc29uUmV0dXJu aW5nICpyZXR1cm5pbmcpCit7CisJTm9kZQkgICAqY29lcmNlZF9leHByOworCisJY29lcmNlZF9l eHByID0gY29lcmNlSnNvbkZ1bmNFeHByKHBzdGF0ZSwgZXhwciwgcmV0dXJuaW5nLCBmYWxzZSk7 CisJaWYgKGNvZXJjZWRfZXhwcikKKwl7CisJCWlmIChjb2VyY2VkX2V4cHIgPT0gZXhwcikKKwkJ CXJldHVybiBOVUxMOworCQlyZXR1cm4gY29lcmNlZF9leHByOworCX0KKworCXJldHVybiAoTm9k ZSAqKSBtYWtlSnNvbkNvZXJjaW9uKHJldHVybmluZyk7Cit9CisKKy8qCisgKiBJbml0aWFsaXpl IEpzb25Db2VyY2lvbiBub2RlcyBmb3IgY29lcmNpbmcgYSBnaXZlbiBKU09OIGl0ZW0gdmFsdWUg cHJvZHVjZWQKKyAqIGJ5IEpTT05fVkFMVUUgdG8gdGhlIHRhcmdldCAicmV0dXJuaW5nIiB0eXBl OyBhbHNvIHNlZQorICogRXhlY1ByZXBhcmVKc29uSXRlbUNvZXJjaW9uKCkuCisgKi8KK3N0YXRp YyBMaXN0ICoKK0luaXRKc29uSXRlbUNvZXJjaW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsIGNvbnN0 IEpzb25SZXR1cm5pbmcgKnJldHVybmluZywKKwkJCQkJICBPaWQgY29udGV4dEl0ZW1UeXBlSWQp Cit7CisJTGlzdAkgICAqaXRlbV9jb2VyY2lvbnMgPSBOSUw7CisJaW50CQkJaTsKKwlPaWQJCQl0 eXBlb2lkOworCXN0cnVjdAorCXsKKwkJSnNvbkl0ZW1UeXBlIGl0ZW1fdHlwZTsKKwkJT2lkCQkJ dHlwZW9pZDsKKwl9CQkJaXRlbV90eXBlc1tdID0KKwl7CisJCXtKc29uSXRlbVR5cGVOdWxsLCBV TktOT1dOT0lEfSwKKwkJe0pzb25JdGVtVHlwZVN0cmluZywgVEVYVE9JRH0sCisJCXtKc29uSXRl bVR5cGVOdW1lcmljLCBOVU1FUklDT0lEfSwKKwkJe0pzb25JdGVtVHlwZUJvb2xlYW4sIEJPT0xP SUR9LAorCQl7SnNvbkl0ZW1UeXBlRGF0ZSwgREFURU9JRH0sCisJCXtKc29uSXRlbVR5cGVUaW1l LCBUSU1FT0lEfSwKKwkJe0pzb25JdGVtVHlwZVRpbWV0eiwgVElNRVRaT0lEfSwKKwkJe0pzb25J dGVtVHlwZVRpbWVzdGFtcCwgVElNRVNUQU1QT0lEfSwKKwkJe0pzb25JdGVtVHlwZVRpbWVzdGFt cHR6LCBUSU1FU1RBTVBUWk9JRH0sCisJCXtKc29uSXRlbVR5cGVDb21wb3NpdGUsIGNvbnRleHRJ dGVtVHlwZUlkfSwKKwkJe0pzb25JdGVtVHlwZUludmFsaWQsIEludmFsaWRPaWR9CisJfTsKKwor CWZvciAoaSA9IDA7IE9pZElzVmFsaWQodHlwZW9pZCA9IGl0ZW1fdHlwZXNbaV0udHlwZW9pZCk7 IGkrKykKKwl7CisJCU5vZGUJICAgKmV4cHI7CisJCUpzb25JdGVtQ29lcmNpb24gKml0ZW1fY29l cmNpb24gPSBtYWtlTm9kZShKc29uSXRlbUNvZXJjaW9uKTsKKworCQlpZiAodHlwZW9pZCA9PSBV TktOT1dOT0lEKQorCQl7CisJCQlleHByID0gKE5vZGUgKikgbWFrZU51bGxDb25zdChVTktOT1dO T0lELCAtMSwgSW52YWxpZE9pZCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlDYXNlVGVzdEV4cHIg KnBsYWNlaG9sZGVyID0gbWFrZU5vZGUoQ2FzZVRlc3RFeHByKTsKKworCQkJLyoKKwkJCSAqIFdl IGFidXNlIENhc2VUZXN0RXhwciBoZXJlIGFzIHBsYWNlaG9sZGVyIHRvIHBhc3MgdGhlIHJlc3Vs dCBvZgorCQkJICogSlNPTl9WQUxVRSBqc29ucGF0aCBleHByZXNzaW9uIHRvIHRoZSBjb2VyY2lv biBmdW5jdGlvbi4KKwkJCSAqLworCQkJcGxhY2Vob2xkZXItPnR5cGVJZCA9IGl0ZW1fdHlwZXNb aV0udHlwZW9pZDsKKwkJCXBsYWNlaG9sZGVyLT50eXBlTW9kID0gLTE7CisJCQlwbGFjZWhvbGRl ci0+Y29sbGF0aW9uID0gSW52YWxpZE9pZDsKKworCQkJZXhwciA9IChOb2RlICopIHBsYWNlaG9s ZGVyOworCQl9CisKKwkJaXRlbV9jb2VyY2lvbi0+aXRlbV90eXBlID0gaXRlbV90eXBlc1tpXS5p dGVtX3R5cGU7CisJCWl0ZW1fY29lcmNpb24tPmNvZXJjaW9uID0gY29lcmNlSnNvbkV4cHIocHN0 YXRlLCBleHByLCByZXR1cm5pbmcpOworCQlpdGVtX2NvZXJjaW9ucyA9IGxhcHBlbmQoaXRlbV9j b2VyY2lvbnMsIGl0ZW1fY29lcmNpb24pOworCX0KKworCXJldHVybiBpdGVtX2NvZXJjaW9uczsK K30KKworLyoKKyAqIFJldHVybnMgY29uc3RhbnQgdmFsdWVzIHRvIGJlIHJldHVybmVkIHRvIHRo ZSB1c2VyIGZvciB2YXJpb3VzCisgKiBub24tRVJST1IgT04gRVJST1IvRU1QVFkgYmVoYXZpb3Jz LgorICoKKyAqIE5vdGUgdGhhdCBKU09OX0JFSEFWSU9SX0RFRkFVTFQgZXhwcmVzc2lvbiBpcyBo YW5kbGVkIGJ5IHRoZQorICogY2FsbGVyIHNlcGFyYXRlbHkuCisgKi8KK3N0YXRpYyBOb2RlICoK K0dldEpzb25CZWhhdmlvckNvbnN0RXhwcihKc29uQmVoYXZpb3JUeXBlIGJ0eXBlLCBpbnQgbG9j YXRpb24pCit7CisJRGF0dW0JCXZhbCA9IChEYXR1bSkgMDsKKwlPaWQJCQl0eXBpZCA9IEpTT05C T0lEOworCWludAkJCWxlbiA9IC0xOworCWJvb2wJCWlzYnl2YWwgPSBmYWxzZTsKKwlib29sCQlp c251bGwgPSBmYWxzZTsKKwlDb25zdAkgICAqY29uOworCisJc3dpdGNoIChidHlwZSkKKwl7CisJ CWNhc2UgSlNPTl9CRUhBVklPUl9FTVBUWV9BUlJBWToKKwkJCXZhbCA9IERpcmVjdEZ1bmN0aW9u Q2FsbDEoanNvbmJfaW4sIENTdHJpbmdHZXREYXR1bSgiW10iKSk7CisJCQlicmVhazsKKworCQlj YXNlIEpTT05fQkVIQVZJT1JfRU1QVFlfT0JKRUNUOgorCQkJdmFsID0gRGlyZWN0RnVuY3Rpb25D YWxsMShqc29uYl9pbiwgQ1N0cmluZ0dldERhdHVtKCJ7fSIpKTsKKwkJCWJyZWFrOworCisJCWNh c2UgSlNPTl9CRUhBVklPUl9UUlVFOgorCQkJdmFsID0gQm9vbEdldERhdHVtKHRydWUpOworCQkJ dHlwaWQgPSBCT09MT0lEOworCQkJbGVuID0gc2l6ZW9mKGJvb2wpOworCQkJaXNieXZhbCA9IHRy dWU7CisJCQlicmVhazsKKworCQljYXNlIEpTT05fQkVIQVZJT1JfRkFMU0U6CisJCQl2YWwgPSBC b29sR2V0RGF0dW0oZmFsc2UpOworCQkJdHlwaWQgPSBCT09MT0lEOworCQkJbGVuID0gc2l6ZW9m KGJvb2wpOworCQkJaXNieXZhbCA9IHRydWU7CisJCQlicmVhazsKKworCQljYXNlIEpTT05fQkVI QVZJT1JfTlVMTDoKKwkJY2FzZSBKU09OX0JFSEFWSU9SX1VOS05PV046CisJCWNhc2UgSlNPTl9C RUhBVklPUl9FTVBUWToKKwkJCXZhbCA9IChEYXR1bSkgMDsKKwkJCWlzbnVsbCA9IHRydWU7CisJ CQl0eXBpZCA9IElOVDRPSUQ7CisJCQlsZW4gPSBzaXplb2YoaW50MzIpOworCQkJaXNieXZhbCA9 IHRydWU7CisJCQlicmVhazsKKworCQljYXNlIEpTT05fQkVIQVZJT1JfREVGQVVMVDoKKwkJY2Fz ZSBKU09OX0JFSEFWSU9SX0VSUk9SOgorCQkJLyogQWx3YXlzIGhhbmRsZWQgaW4gdGhlIGNhbGxl ci4gKi8KKwkJCUFzc2VydChmYWxzZSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxv ZyhFUlJPUiwgInVucmVjb2duaXplZCBTUUwvSlNPTiBiZWhhdmlvciAlZCIsIGJ0eXBlKTsKKwkJ CWJyZWFrOworCX0KKworCWNvbiA9IG1ha2VDb25zdCh0eXBpZCwgLTEsIEludmFsaWRPaWQsIGxl biwgdmFsLCBpc251bGwsIGlzYnl2YWwpOworCWNvbi0+bG9jYXRpb24gPSBsb2NhdGlvbjsKKwor CXJldHVybiAoTm9kZSAqKSBjb247Cit9CisKKy8qCisgKiBUcmFuc2Zvcm0gYSBKU09OIEJFSEFW SU9SIGNsYXVzZS4KKyAqLworc3RhdGljIEpzb25CZWhhdmlvciAqCit0cmFuc2Zvcm1Kc29uQmVo YXZpb3IoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uQmVoYXZpb3IgKmJlaGF2aW9yLAorCQkJCQkg IEpzb25CZWhhdmlvclR5cGUgZGVmYXVsdF9iZWhhdmlvciwKKwkJCQkJICBKc29uUmV0dXJuaW5n ICpyZXR1cm5pbmcpCit7CisJSnNvbkJlaGF2aW9yVHlwZSBiZWhhdmlvcl90eXBlID0gZGVmYXVs dF9iZWhhdmlvcjsKKwlOb2RlCSAgICpleHByID0gTlVMTDsKKwlKc29uQ29lcmNpb24gKmNvZXJj aW9uID0gTlVMTDsKKwlpbnQJCQlsb2NhdGlvbiA9IC0xOworCisJaWYgKGJlaGF2aW9yKQorCXsK KwkJYmVoYXZpb3JfdHlwZSA9IGJlaGF2aW9yLT5idHlwZTsKKwkJbG9jYXRpb24gPSBiZWhhdmlv ci0+bG9jYXRpb247CisJCWlmIChiZWhhdmlvcl90eXBlID09IEpTT05fQkVIQVZJT1JfREVGQVVM VCkKKwkJeworCQkJZXhwciA9IHRyYW5zZm9ybUV4cHJSZWN1cnNlKHBzdGF0ZSwgYmVoYXZpb3It PmV4cHIpOworCQkJaWYgKCFJc0EoZXhwciwgQ29uc3QpICYmICFJc0EoZXhwciwgRnVuY0V4cHIp ICYmCisJCQkJIUlzQShleHByLCBPcEV4cHIpKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQko ZXJyY29kZShFUlJDT0RFX0RBVEFUWVBFX01JU01BVENIKSwKKwkJCQkJCSBlcnJtc2coImNhbiBv bmx5IHNwZWNpZnkgY29uc3RhbnQsIG5vbi1hZ2dyZWdhdGUiCisJCQkJCQkJCSIgZnVuY3Rpb24s IG9yIG9wZXJhdG9yIGV4cHJlc3Npb24gZm9yIgorCQkJCQkJCQkiIERFRkFVTFQiKSwKKwkJCQkJ CXBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGV4cHJMb2NhdGlvbihleHByKSkpKTsKKwkJCWlm IChjb250YWluX3Zhcl9jbGF1c2UoZXhwcikpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShl cnJjb2RlKEVSUkNPREVfREFUQVRZUEVfTUlTTUFUQ0gpLAorCQkJCQkJIGVycm1zZygiREVGQVVM VCBleHByZXNzaW9uIG11c3Qgbm90IGNvbnRhaW4gY29sdW1uIHJlZmVyZW5jZXMiKSwKKwkJCQkJ CXBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGV4cHJMb2NhdGlvbihleHByKSkpKTsKKwkJCWlm IChleHByZXNzaW9uX3JldHVybnNfc2V0KGV4cHIpKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CQkoZXJyY29kZShFUlJDT0RFX0RBVEFUWVBFX01JU01BVENIKSwKKwkJCQkJCSBlcnJtc2coIkRF RkFVTFQgZXhwcmVzc2lvbiBtdXN0IG5vdCByZXR1cm4gYSBzZXQiKSwKKwkJCQkJCXBhcnNlcl9l cnJwb3NpdGlvbihwc3RhdGUsIGV4cHJMb2NhdGlvbihleHByKSkpKTsKKwkJfQorCX0KKworCWlm IChleHByID09IE5VTEwgJiYgYmVoYXZpb3JfdHlwZSAhPSBKU09OX0JFSEFWSU9SX0VSUk9SKQor CQlleHByID0gR2V0SnNvbkJlaGF2aW9yQ29uc3RFeHByKGJlaGF2aW9yX3R5cGUsIGxvY2F0aW9u KTsKKworCWlmIChleHByKQorCXsKKwkJTm9kZQkgICAqY29lcmNlZF9leHByID0gZXhwcjsKKwkJ Ym9vbAkJaXNudWxsID0gKElzQShleHByLCBDb25zdCkgJiYgKChDb25zdCAqKSBleHByKS0+Y29u c3Rpc251bGwpOworCisJCS8qCisJCSAqIENvZXJjZSBOVUxMcyBhbmQgImRlZmF1bHQiICh0aGF0 IGlzLCBub3Qgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyKQorCQkgKiBqc29uYi12YWx1ZWQgZXhwcmVz c2lvbnMgdXNpbmcgYSBKc29uQ29lcmNpb24gbm9kZS4KKwkJICoKKwkJICogRm9yIG90aGVyICh1 c2VyLXNwZWNpZmllZCkgbm9uLU5VTEwgdmFsdWVzLCB0cnkgdG8gZmluZCBhIGNhc3QgYW5kCisJ CSAqIGVycm9yIG91dCBpZiBvbmUgaXMgbm90IGZvdW5kLgorCQkgKi8KKwkJaWYgKGlzbnVsbCB8 fAorCQkJKGV4cHJUeXBlKGV4cHIpID09IEpTT05CT0lEICYmCisJCQkgYmVoYXZpb3JfdHlwZSA9 PSBkZWZhdWx0X2JlaGF2aW9yKSkKKwkJCWNvZXJjaW9uID0gbWFrZUpzb25Db2VyY2lvbihyZXR1 cm5pbmcpOworCQllbHNlCisJCQljb2VyY2VkX2V4cHIgPQorCQkJCWNvZXJjZV90b190YXJnZXRf dHlwZShwc3RhdGUsIGV4cHIsIGV4cHJUeXBlKGV4cHIpLAorCQkJCQkJCQkJICByZXR1cm5pbmct PnR5cGlkLCByZXR1cm5pbmctPnR5cG1vZCwKKwkJCQkJCQkJCSAgQ09FUkNJT05fRVhQTElDSVQs IENPRVJDRV9FWFBMSUNJVF9DQVNULAorCQkJCQkJCQkJICBleHByTG9jYXRpb24oKE5vZGUgKikg YmVoYXZpb3IpKTsKKworCQlpZiAoY29lcmNlZF9leHByID09IE5VTEwpCisJCQllcmVwb3J0KEVS Uk9SLAorCQkJCQllcnJjb2RlKEVSUkNPREVfQ0FOTk9UX0NPRVJDRSksCisJCQkJCWVycm1zZygi Y2Fubm90IGNhc3QgYmVoYXZpb3IgZXhwcmVzc2lvbiBvZiB0eXBlICVzIHRvICVzIiwKKwkJCQkJ CSAgIGZvcm1hdF90eXBlX2JlKGV4cHJUeXBlKGV4cHIpKSwKKwkJCQkJCSAgIGZvcm1hdF90eXBl X2JlKHJldHVybmluZy0+dHlwaWQpKSwKKwkJCQkJcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwg ZXhwckxvY2F0aW9uKGV4cHIpKSk7CisJCWVsc2UKKwkJCWV4cHIgPSBjb2VyY2VkX2V4cHI7CisJ fQorCisJcmV0dXJuIG1ha2VKc29uQmVoYXZpb3IoYmVoYXZpb3JfdHlwZSwgZXhwciwgY29lcmNp b24sIGxvY2F0aW9uKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90 YXJnZXQuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYwppbmRleCAwY2Q5MDRm OGRhLi5lYTVhYzZiYWZlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdGFy Z2V0LmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jCkBAIC0xOTg5LDYg KzE5ODksMjEgQEAgRmlndXJlQ29sbmFtZUludGVybmFsKE5vZGUgKm5vZGUsIGNoYXIgKipuYW1l KQogCQkJLyogbWFrZSBKU09OX0FSUkFZQUdHIGFjdCBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiAq LwogCQkJKm5hbWUgPSAianNvbl9hcnJheWFnZyI7CiAJCQlyZXR1cm4gMjsKKwkJY2FzZSBUX0pz b25GdW5jRXhwcjoKKwkJCS8qIG1ha2UgU1FML0pTT04gZnVuY3Rpb25zIGFjdCBsaWtlIGEgcmVn dWxhciBmdW5jdGlvbiAqLworCQkJc3dpdGNoICgoKEpzb25GdW5jRXhwciAqKSBub2RlKS0+b3Ap CisJCQl7CisJCQkJY2FzZSBKU09OX0VYSVNUU19PUDoKKwkJCQkJKm5hbWUgPSAianNvbl9leGlz dHMiOworCQkJCQlyZXR1cm4gMjsKKwkJCQljYXNlIEpTT05fUVVFUllfT1A6CisJCQkJCSpuYW1l ID0gImpzb25fcXVlcnkiOworCQkJCQlyZXR1cm4gMjsKKwkJCQljYXNlIEpTT05fVkFMVUVfT1A6 CisJCQkJCSpuYW1lID0gImpzb25fdmFsdWUiOworCQkJCQlyZXR1cm4gMjsKKwkJCX0KKwkJCWJy ZWFrOwogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L2Zvcm1hdHRpbmcuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5n LmMKaW5kZXggODNlMWYxMjY1Yy4uNDFiYjBlMDU0NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L2Zvcm1hdHRpbmcuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0 dGluZy5jCkBAIC00NDI2LDYgKzQ0MjYsNTAgQEAgcGFyc2VfZGF0ZXRpbWUodGV4dCAqZGF0ZV90 eHQsIHRleHQgKmZtdCwgT2lkIGNvbGxpZCwgYm9vbCBzdHJpY3QsCiAJfQogfQogCisvKgorICog UGFyc2VzIHRoZSBkYXRldGltZSBmb3JtYXQgc3RyaW5nIGluICdmbXRfc3RyJyBhbmQgcmV0dXJu cyB0cnVlIGlmIGl0CisgKiBjb250YWlucyBhIHRpbWV6b25lIHNwZWNpZmllciwgZmFsc2UgaWYg bm90LgorICovCitib29sCitkYXRldGltZV9mb3JtYXRfaGFzX3R6KGNvbnN0IGNoYXIgKmZtdF9z dHIpCit7CisJYm9vbAkJaW5jYWNoZTsKKwlpbnQJCQlmbXRfbGVuID0gc3RybGVuKGZtdF9zdHIp OworCWludAkJCXJlc3VsdDsKKwlGb3JtYXROb2RlICpmb3JtYXQ7CisKKwlpZiAoZm10X2xlbiA+ IERDSF9DQUNIRV9TSVpFKQorCXsKKwkJLyoKKwkJICogQWxsb2NhdGUgbmV3IG1lbW9yeSBpZiBm b3JtYXQgcGljdHVyZSBpcyBiaWdnZXIgdGhhbiBzdGF0aWMgY2FjaGUKKwkJICogYW5kIGRvIG5v dCB1c2UgY2FjaGUgKGNhbGwgcGFyc2VyIGFsd2F5cykKKwkJICovCisJCWluY2FjaGUgPSBmYWxz ZTsKKworCQlmb3JtYXQgPSAoRm9ybWF0Tm9kZSAqKSBwYWxsb2MoKGZtdF9sZW4gKyAxKSAqIHNp emVvZihGb3JtYXROb2RlKSk7CisKKwkJcGFyc2VfZm9ybWF0KGZvcm1hdCwgZm10X3N0ciwgRENI X2tleXdvcmRzLAorCQkJCQkgRENIX3N1ZmYsIERDSF9pbmRleCwgRENIX0ZMQUcsIE5VTEwpOwor CX0KKwllbHNlCisJeworCQkvKgorCQkgKiBVc2UgY2FjaGUgYnVmZmVycworCQkgKi8KKwkJRENI Q2FjaGVFbnRyeSAqZW50ID0gRENIX2NhY2hlX2ZldGNoKGZtdF9zdHIsIGZhbHNlKTsKKworCQlp bmNhY2hlID0gdHJ1ZTsKKwkJZm9ybWF0ID0gZW50LT5mb3JtYXQ7CisJfQorCisJcmVzdWx0ID0g RENIX2RhdGV0aW1lX3R5cGUoZm9ybWF0KTsKKworCWlmICghaW5jYWNoZSkKKwkJcGZyZWUoZm9y bWF0KTsKKworCXJldHVybiByZXN1bHQgJiBEQ0hfWk9ORUQ7Cit9CisKIC8qCiAgKiBkb190b190 aW1lc3RhbXA6IHNoYXJlZCBjb2RlIGZvciB0b190aW1lc3RhbXAgYW5kIHRvX2RhdGUKICAqCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9qc29uYi5jCmluZGV4IGMxMGIzZmJlZGYuLjZkNzk3YzA5NTMgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYi5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9qc29uYi5jCkBAIC0yMTYzLDMgKzIxNjMsMzQgQEAganNvbmJfZmxvYXQ4KFBHX0ZVTkNUSU9O X0FSR1MpCiAKIAlQR19SRVRVUk5fREFUVU0ocmV0VmFsdWUpOwogfQorCisvKgorICogQ29udmVy dCBqc29uYiB0byBhIEMtc3RyaW5nIHN0cmlwcGluZyBxdW90ZXMgZnJvbSBzY2FsYXIgc3RyaW5n cy4KKyAqLworY2hhciAqCitKc29uYlVucXVvdGUoSnNvbmIgKmpiKQoreworCWlmIChKQl9ST09U X0lTX1NDQUxBUihqYikpCisJeworCQlKc29uYlZhbHVlCXY7CisKKwkJKHZvaWQpIEpzb25iRXh0 cmFjdFNjYWxhcigmamItPnJvb3QsICZ2KTsKKworCQlpZiAodi50eXBlID09IGpidlN0cmluZykK KwkJCXJldHVybiBwbnN0cmR1cCh2LnZhbC5zdHJpbmcudmFsLCB2LnZhbC5zdHJpbmcubGVuKTsK KwkJZWxzZSBpZiAodi50eXBlID09IGpidkJvb2wpCisJCQlyZXR1cm4gcHN0cmR1cCh2LnZhbC5i b29sZWFuID8gInRydWUiIDogImZhbHNlIik7CisJCWVsc2UgaWYgKHYudHlwZSA9PSBqYnZOdW1l cmljKQorCQkJcmV0dXJuIERhdHVtR2V0Q1N0cmluZyhEaXJlY3RGdW5jdGlvbkNhbGwxKG51bWVy aWNfb3V0LAorCQkJCQkJCQkJCQkJCSAgIFBvaW50ZXJHZXREYXR1bSh2LnZhbC5udW1lcmljKSkp OworCQllbHNlIGlmICh2LnR5cGUgPT0gamJ2TnVsbCkKKwkJCXJldHVybiBwc3RyZHVwKCJudWxs Iik7CisJCWVsc2UKKwkJeworCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBqc29uYiB2YWx1 ZSB0eXBlICVkIiwgdi50eXBlKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCWVsc2UKKwkJ cmV0dXJuIEpzb25iVG9DU3RyaW5nKE5VTEwsICZqYi0+cm9vdCwgVkFSU0laRShqYikpOworfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25mdW5jcy5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2pzb25mdW5jcy5jCmluZGV4IDZiZmFmMzcwM2QuLmZlMWE3ZWMwOWMgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMKQEAgLTI4MzAsNyArMjgzMCw5IEBAIHBvcHVsYXRl X2FycmF5X2RpbV9qc29uYihQb3B1bGF0ZUFycmF5Q29udGV4dCAqY3R4LCAvKiBjb250ZXh0ICov CiAKIAljaGVja19zdGFja19kZXB0aCgpOwogCi0JaWYgKGpidi0+dHlwZSAhPSBqYnZCaW5hcnkg fHwgIUpzb25Db250YWluZXJJc0FycmF5KGpiYykpCisJLyogRXZlbiBzY2FsYXJzIGNhbiBlbmQg dXAgaGVyZSB0aGFua3MgdG8gSnNvblBhdGhRdWVyeS9WYWx1ZSgpLiAqLworCWlmIChqYnYtPnR5 cGUgIT0gamJ2QmluYXJ5IHx8ICFKc29uQ29udGFpbmVySXNBcnJheShqYmMpIHx8CisJCUpzb25D b250YWluZXJJc1NjYWxhcihqYmMpKQogCXsKIAkJcG9wdWxhdGVfYXJyYXlfcmVwb3J0X2V4cGVj dGVkX2FycmF5KGN0eCwgbmRpbSAtIDEpOwogCQkvKiBHZXR0aW5nIGhlcmUgbWVhbnMgdGhlIGVy cm9yIHdhcyByZXBvcnRlZCBzb2Z0bHkuICovCkBAIC0yODM4LDggKzI4NDAsNiBAQCBwb3B1bGF0 ZV9hcnJheV9kaW1fanNvbmIoUG9wdWxhdGVBcnJheUNvbnRleHQgKmN0eCwgLyogY29udGV4dCAq LwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JQXNzZXJ0KCFKc29uQ29udGFpbmVySXNTY2FsYXIo amJjKSk7Ci0KIAlpdCA9IEpzb25iSXRlcmF0b3JJbml0KGpiYyk7CiAKIAl0b2sgPSBKc29uYkl0 ZXJhdG9yTmV4dCgmaXQsICZ2YWwsIHRydWUpOwpAQCAtMzMyMyw2ICszMzIzLDYyIEBAIHByZXBh cmVfY29sdW1uX2NhY2hlKENvbHVtbklPRGF0YSAqY29sdW1uLAogCVJlbGVhc2VTeXNDYWNoZSh0 dXApOwogfQogCisvKgorICogUG9wdWxhdGUgYW5kIHJldHVybiB0aGUgdmFsdWUgb2Ygc3BlY2lm aWVkIHR5cGUgZnJvbSBhIGdpdmVuIGpzb24vanNvbmIKKyAqIHZhbHVlICdqc29uX3ZhbCcuICAn Y2FjaGUnIGlzIGNhbGxlci1zcGVjaWZpZWQgcG9pbnRlciB0byBzYXZlIHRoZQorICogQ29sdW1u SU9EYXRhIHRoYXQgd2lsbCBiZSBpbml0aWFsaXplZCBvbiB0aGUgMXN0IGNhbGwgYW5kIHRoZW4g cmV1c2VkCisgKiBkdXJpbmcgYW55IHN1YnNlcXVlbnQgY2FsbHMuICAnbWN4dCcgZ2l2ZXMgdGhl IG1lbW9yeSBjb250ZXh0IHRvIGFsbG9jYXRlCisgKiB0aGUgQ29sdW1uSU9EYXRhIGFuZCBhbnkg b3RoZXIgc3Vic2lkaWFyeSBtZW1vcnkgaW4uICAnZXNjb250ZXh0JywKKyAqIGlmIG5vdCBOVUxM LCB0ZWxscyB0aGF0IGFueSBlcnJvcnMgdGhhdCBvY2N1ciBzaG91bGQgYmUgaGFuZGxlZCBzb2Z0 bHkuCisgKi8KK0RhdHVtCitqc29uX3BvcHVsYXRlX3R5cGUoRGF0dW0ganNvbl92YWwsIE9pZCBq c29uX3R5cGUsCisJCQkJICAgT2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QsCisJCQkJICAgdm9pZCAq KmNhY2hlLCBNZW1vcnlDb250ZXh0IG1jeHQsCisJCQkJICAgYm9vbCAqaXNudWxsLAorCQkJCSAg IE5vZGUgKmVzY29udGV4dCkKK3sKKwlKc1ZhbHVlCQlqc3YgPSB7MH07CisJSnNvbmJWYWx1ZQlq YnY7CisKKwlqc3YuaXNfanNvbiA9IGpzb25fdHlwZSA9PSBKU09OT0lEOworCisJaWYgKCppc251 bGwpCisJeworCQlpZiAoanN2LmlzX2pzb24pCisJCQlqc3YudmFsLmpzb24uc3RyID0gTlVMTDsK KwkJZWxzZQorCQkJanN2LnZhbC5qc29uYiA9IE5VTEw7CisJfQorCWVsc2UgaWYgKGpzdi5pc19q c29uKQorCXsKKwkJdGV4dAkgICAqanNvbiA9IERhdHVtR2V0VGV4dFBQKGpzb25fdmFsKTsKKwor CQlqc3YudmFsLmpzb24uc3RyID0gVkFSREFUQV9BTlkoanNvbik7CisJCWpzdi52YWwuanNvbi5s ZW4gPSBWQVJTSVpFX0FOWV9FWEhEUihqc29uKTsKKwkJanN2LnZhbC5qc29uLnR5cGUgPSBKU09O X1RPS0VOX0lOVkFMSUQ7IC8qIG5vdCB1c2VkIGluCisJCQkJCQkJCQkJCQkgKiBwb3B1bGF0ZV9j b21wb3NpdGUoKSAqLworCX0KKwllbHNlCisJeworCQlKc29uYgkgICAqanNvbmIgPSBEYXR1bUdl dEpzb25iUChqc29uX3ZhbCk7CisKKwkJanN2LnZhbC5qc29uYiA9ICZqYnY7CisKKwkJLyogZmls bCBiaW5hcnkganNvbmIgdmFsdWUgcG9pbnRpbmcgdG8gamIgKi8KKwkJamJ2LnR5cGUgPSBqYnZC aW5hcnk7CisJCWpidi52YWwuYmluYXJ5LmRhdGEgPSAmanNvbmItPnJvb3Q7CisJCWpidi52YWwu YmluYXJ5LmxlbiA9IFZBUlNJWkUoanNvbmIpIC0gVkFSSERSU1o7CisJfQorCisJaWYgKCpjYWNo ZSA9PSBOVUxMKQorCQkqY2FjaGUgPSBNZW1vcnlDb250ZXh0QWxsb2NaZXJvKG1jeHQsIHNpemVv ZihDb2x1bW5JT0RhdGEpKTsKKworCXJldHVybiBwb3B1bGF0ZV9yZWNvcmRfZmllbGQoKmNhY2hl LCB0eXBpZCwgdHlwbW9kLCBOVUxMLCBtY3h0LAorCQkJCQkJCQkgUG9pbnRlckdldERhdHVtKE5V TEwpLCAmanN2LCBpc251bGwsCisJCQkJCQkJCSBlc2NvbnRleHQpOworfQorCiAvKiByZWN1cnNp dmVseSBwb3B1bGF0ZSBhIHJlY29yZCBmaWVsZCBvciBhbiBhcnJheSBlbGVtZW50IGZyb20gYSBq c29uL2pzb25iIHZhbHVlICovCiBzdGF0aWMgRGF0dW0KIHBvcHVsYXRlX3JlY29yZF9maWVsZChD b2x1bW5JT0RhdGEgKmNvbCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29u cGF0aC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoLmMKaW5kZXggZDAyYzAzZTAx NC4uMjAwNzdiNjdhNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRo LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoLmMKQEAgLTY4LDcgKzY4LDkg QEAKICNpbmNsdWRlICJsaWJwcS9wcWZvcm1hdC5oIgogI2luY2x1ZGUgIm5vZGVzL21pc2Nub2Rl cy5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5o IgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZm9ybWF0dGlu Zy5oIgogI2luY2x1ZGUgInV0aWxzL2pzb24uaCIKICNpbmNsdWRlICJ1dGlscy9qc29ucGF0aC5o IgogCkBAIC0xMTEwLDMgKzExMTIsMjYwIEBAIGpzcEdldEFycmF5U3Vic2NyaXB0KEpzb25QYXRo SXRlbSAqdiwgSnNvblBhdGhJdGVtICpmcm9tLCBKc29uUGF0aEl0ZW0gKnRvLAogCiAJcmV0dXJu IHRydWU7CiB9CisKKy8qIFNRTC9KU09OIGRhdGF0eXBlIHN0YXR1czogKi8KK2VudW0gSnNvblBh dGhEYXRhdHlwZVN0YXR1cworeworCWpwZHNOb25EYXRlVGltZSwJCQkvKiBudWxsLCBib29sLCBu dW1lcmljLCBzdHJpbmcsIGFycmF5LCBvYmplY3QgKi8KKwlqcGRzVW5rbm93bkRhdGVUaW1lLAkJ LyogdW5rbm93biBkYXRldGltZSB0eXBlICovCisJanBkc0RhdGVUaW1lWm9uZWQsCQkJLyogdGlt ZXR6LCB0aW1lc3RhbXB0eiAqLworCWpwZHNEYXRlVGltZU5vblpvbmVkLAkJLyogdGltZSwgdGlt ZXN0YW1wLCBkYXRlICovCit9OworCisvKiBDb250ZXh0IGZvciBqc3BJc011dGFibGVXYWxrZXIo KSAqLworc3RydWN0IEpzb25QYXRoTXV0YWJsZUNvbnRleHQKK3sKKwlMaXN0CSAgICp2YXJuYW1l czsJCS8qIGxpc3Qgb2YgdmFyaWFibGUgbmFtZXMgKi8KKwlMaXN0CSAgICp2YXJleHByczsJCS8q IGxpc3Qgb2YgdmFyaWFibGUgZXhwcmVzc2lvbnMgKi8KKwllbnVtIEpzb25QYXRoRGF0YXR5cGVT dGF0dXMgY3VycmVudDsJLyogc3RhdHVzIG9mIEAgaXRlbSAqLworCWJvb2wJCWxheDsJCQkvKiBq c29ucGF0aCBpcyBsYXggb3Igc3RyaWN0ICovCisJYm9vbAkJbXV0YWJsZTsJCS8qIHJlc3VsdGlu ZyBtdXRhYmlsaXR5IHN0YXR1cyAqLworfTsKKworc3RhdGljIGVudW0gSnNvblBhdGhEYXRhdHlw ZVN0YXR1cyBqc3BJc011dGFibGVXYWxrZXIoSnNvblBhdGhJdGVtICpqcGksCisJCQkJCQkJCQkJ CQkJICBzdHJ1Y3QgSnNvblBhdGhNdXRhYmxlQ29udGV4dCAqY3h0KTsKKworLyoKKyAqIEZ1bmN0 aW9uIHRvIGNoZWNrIHdoZXRoZXIganNvbnBhdGggZXhwcmVzc2lvbiBpcyBtdXRhYmxlIHRvIGJl IHVzZWQgaW4gdGhlCisgKiBwbGFubmVyIGZ1bmN0aW9uIGNvbnRhaW5fbXV0YWJsZV9mdW5jdGlv bnMoKS4KKyAqLworYm9vbAoranNwSXNNdXRhYmxlKEpzb25QYXRoICpwYXRoLCBMaXN0ICp2YXJu YW1lcywgTGlzdCAqdmFyZXhwcnMpCit7CisJc3RydWN0IEpzb25QYXRoTXV0YWJsZUNvbnRleHQg Y3h0OworCUpzb25QYXRoSXRlbSBqcGk7CisKKwljeHQudmFybmFtZXMgPSB2YXJuYW1lczsKKwlj eHQudmFyZXhwcnMgPSB2YXJleHByczsKKwljeHQuY3VycmVudCA9IGpwZHNOb25EYXRlVGltZTsK KwljeHQubGF4ID0gKHBhdGgtPmhlYWRlciAmIEpTT05QQVRIX0xBWCkgIT0gMDsKKwljeHQubXV0 YWJsZSA9IGZhbHNlOworCisJanNwSW5pdCgmanBpLCBwYXRoKTsKKwkodm9pZCkganNwSXNNdXRh YmxlV2Fsa2VyKCZqcGksICZjeHQpOworCisJcmV0dXJuIGN4dC5tdXRhYmxlOworfQorCisvKgor ICogUmVjdXJzaXZlIHdhbGtlciBmb3IganNwSXNNdXRhYmxlKCkKKyAqLworc3RhdGljIGVudW0g SnNvblBhdGhEYXRhdHlwZVN0YXR1cworanNwSXNNdXRhYmxlV2Fsa2VyKEpzb25QYXRoSXRlbSAq anBpLCBzdHJ1Y3QgSnNvblBhdGhNdXRhYmxlQ29udGV4dCAqY3h0KQoreworCUpzb25QYXRoSXRl bSBuZXh0OworCWVudW0gSnNvblBhdGhEYXRhdHlwZVN0YXR1cyBzdGF0dXMgPSBqcGRzTm9uRGF0 ZVRpbWU7CisKKwl3aGlsZSAoIWN4dC0+bXV0YWJsZSkKKwl7CisJCUpzb25QYXRoSXRlbSBhcmc7 CisJCWVudW0gSnNvblBhdGhEYXRhdHlwZVN0YXR1cyBsZWZ0U3RhdHVzOworCQllbnVtIEpzb25Q YXRoRGF0YXR5cGVTdGF0dXMgcmlnaHRTdGF0dXM7CisKKwkJc3dpdGNoIChqcGktPnR5cGUpCisJ CXsKKwkJCWNhc2UganBpUm9vdDoKKwkJCQlBc3NlcnQoc3RhdHVzID09IGpwZHNOb25EYXRlVGlt ZSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UganBpQ3VycmVudDoKKwkJCQlBc3NlcnQoc3RhdHVz ID09IGpwZHNOb25EYXRlVGltZSk7CisJCQkJc3RhdHVzID0gY3h0LT5jdXJyZW50OworCQkJCWJy ZWFrOworCisJCQljYXNlIGpwaUZpbHRlcjoKKwkJCQl7CisJCQkJCWVudW0gSnNvblBhdGhEYXRh dHlwZVN0YXR1cyBwcmV2U3RhdHVzID0gY3h0LT5jdXJyZW50OworCisJCQkJCWN4dC0+Y3VycmVu dCA9IHN0YXR1czsKKwkJCQkJanNwR2V0QXJnKGpwaSwgJmFyZyk7CisJCQkJCWpzcElzTXV0YWJs ZVdhbGtlcigmYXJnLCBjeHQpOworCisJCQkJCWN4dC0+Y3VycmVudCA9IHByZXZTdGF0dXM7CisJ CQkJCWJyZWFrOworCQkJCX0KKworCQkJY2FzZSBqcGlWYXJpYWJsZToKKwkJCQl7CisJCQkJCWlu dDMyCQlsZW47CisJCQkJCWNvbnN0IGNoYXIgKm5hbWUgPSBqc3BHZXRTdHJpbmcoanBpLCAmbGVu KTsKKwkJCQkJTGlzdENlbGwgICAqbGMxOworCQkJCQlMaXN0Q2VsbCAgICpsYzI7CisKKwkJCQkJ QXNzZXJ0KHN0YXR1cyA9PSBqcGRzTm9uRGF0ZVRpbWUpOworCisJCQkJCWZvcmJvdGgobGMxLCBj eHQtPnZhcm5hbWVzLCBsYzIsIGN4dC0+dmFyZXhwcnMpCisJCQkJCXsKKwkJCQkJCVN0cmluZwkg ICAqdmFybmFtZSA9IGxmaXJzdF9ub2RlKFN0cmluZywgbGMxKTsKKwkJCQkJCU5vZGUJICAgKnZh cmV4cHIgPSBsZmlyc3QobGMyKTsKKworCQkJCQkJaWYgKHN0cm5jbXAodmFybmFtZS0+c3ZhbCwg bmFtZSwgbGVuKSkKKwkJCQkJCQljb250aW51ZTsKKworCQkJCQkJc3dpdGNoIChleHByVHlwZSh2 YXJleHByKSkKKwkJCQkJCXsKKwkJCQkJCQljYXNlIERBVEVPSUQ6CisJCQkJCQkJY2FzZSBUSU1F T0lEOgorCQkJCQkJCWNhc2UgVElNRVNUQU1QT0lEOgorCQkJCQkJCQlzdGF0dXMgPSBqcGRzRGF0 ZVRpbWVOb25ab25lZDsKKwkJCQkJCQkJYnJlYWs7CisKKwkJCQkJCQljYXNlIFRJTUVUWk9JRDoK KwkJCQkJCQljYXNlIFRJTUVTVEFNUFRaT0lEOgorCQkJCQkJCQlzdGF0dXMgPSBqcGRzRGF0ZVRp bWVab25lZDsKKwkJCQkJCQkJYnJlYWs7CisKKwkJCQkJCQlkZWZhdWx0OgorCQkJCQkJCQlzdGF0 dXMgPSBqcGRzTm9uRGF0ZVRpbWU7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCisJCQkJCQli cmVhazsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCWNhc2UganBpRXF1YWw6CisJ CQljYXNlIGpwaU5vdEVxdWFsOgorCQkJY2FzZSBqcGlMZXNzOgorCQkJY2FzZSBqcGlHcmVhdGVy OgorCQkJY2FzZSBqcGlMZXNzT3JFcXVhbDoKKwkJCWNhc2UganBpR3JlYXRlck9yRXF1YWw6CisJ CQkJQXNzZXJ0KHN0YXR1cyA9PSBqcGRzTm9uRGF0ZVRpbWUpOworCQkJCWpzcEdldExlZnRBcmco anBpLCAmYXJnKTsKKwkJCQlsZWZ0U3RhdHVzID0ganNwSXNNdXRhYmxlV2Fsa2VyKCZhcmcsIGN4 dCk7CisKKwkJCQlqc3BHZXRSaWdodEFyZyhqcGksICZhcmcpOworCQkJCXJpZ2h0U3RhdHVzID0g anNwSXNNdXRhYmxlV2Fsa2VyKCZhcmcsIGN4dCk7CisKKwkJCQkvKgorCQkJCSAqIENvbXBhcmlz b24gb2YgZGF0ZXRpbWUgdHlwZSB3aXRoIGRpZmZlcmVudCB0aW1lem9uZSBzdGF0dXMKKwkJCQkg KiBpcyBtdXRhYmxlLgorCQkJCSAqLworCQkJCWlmIChsZWZ0U3RhdHVzICE9IGpwZHNOb25EYXRl VGltZSAmJgorCQkJCQlyaWdodFN0YXR1cyAhPSBqcGRzTm9uRGF0ZVRpbWUgJiYKKwkJCQkJKGxl ZnRTdGF0dXMgPT0ganBkc1Vua25vd25EYXRlVGltZSB8fAorCQkJCQkgcmlnaHRTdGF0dXMgPT0g anBkc1Vua25vd25EYXRlVGltZSB8fAorCQkJCQkgbGVmdFN0YXR1cyAhPSByaWdodFN0YXR1cykp CisJCQkJCWN4dC0+bXV0YWJsZSA9IHRydWU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UganBpTm90 OgorCQkJY2FzZSBqcGlJc1Vua25vd246CisJCQljYXNlIGpwaUV4aXN0czoKKwkJCWNhc2UganBp UGx1czoKKwkJCWNhc2UganBpTWludXM6CisJCQkJQXNzZXJ0KHN0YXR1cyA9PSBqcGRzTm9uRGF0 ZVRpbWUpOworCQkJCWpzcEdldEFyZyhqcGksICZhcmcpOworCQkJCWpzcElzTXV0YWJsZVdhbGtl cigmYXJnLCBjeHQpOworCQkJCWJyZWFrOworCisJCQljYXNlIGpwaUFuZDoKKwkJCWNhc2UganBp T3I6CisJCQljYXNlIGpwaUFkZDoKKwkJCWNhc2UganBpU3ViOgorCQkJY2FzZSBqcGlNdWw6CisJ CQljYXNlIGpwaURpdjoKKwkJCWNhc2UganBpTW9kOgorCQkJY2FzZSBqcGlTdGFydHNXaXRoOgor CQkJCUFzc2VydChzdGF0dXMgPT0ganBkc05vbkRhdGVUaW1lKTsKKwkJCQlqc3BHZXRMZWZ0QXJn KGpwaSwgJmFyZyk7CisJCQkJanNwSXNNdXRhYmxlV2Fsa2VyKCZhcmcsIGN4dCk7CisJCQkJanNw R2V0UmlnaHRBcmcoanBpLCAmYXJnKTsKKwkJCQlqc3BJc011dGFibGVXYWxrZXIoJmFyZywgY3h0 KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBqcGlJbmRleEFycmF5OgorCQkJCWZvciAoaW50IGkg PSAwOyBpIDwganBpLT5jb250ZW50LmFycmF5Lm5lbGVtczsgaSsrKQorCQkJCXsKKwkJCQkJSnNv blBhdGhJdGVtIGZyb207CisJCQkJCUpzb25QYXRoSXRlbSB0bzsKKworCQkJCQlpZiAoanNwR2V0 QXJyYXlTdWJzY3JpcHQoanBpLCAmZnJvbSwgJnRvLCBpKSkKKwkJCQkJCWpzcElzTXV0YWJsZVdh bGtlcigmdG8sIGN4dCk7CisKKwkJCQkJanNwSXNNdXRhYmxlV2Fsa2VyKCZmcm9tLCBjeHQpOwor CQkJCX0KKwkJCQkvKiBGQUxMVEhST1VHSCAqLworCisJCQljYXNlIGpwaUFueUFycmF5OgorCQkJ CWlmICghY3h0LT5sYXgpCisJCQkJCXN0YXR1cyA9IGpwZHNOb25EYXRlVGltZTsKKwkJCQlicmVh azsKKworCQkJY2FzZSBqcGlBbnk6CisJCQkJaWYgKGpwaS0+Y29udGVudC5hbnlib3VuZHMuZmly c3QgPiAwKQorCQkJCQlzdGF0dXMgPSBqcGRzTm9uRGF0ZVRpbWU7CisJCQkJYnJlYWs7CisKKwkJ CWNhc2UganBpRGF0ZXRpbWU6CisJCQkJaWYgKGpwaS0+Y29udGVudC5hcmcpCisJCQkJeworCQkJ CQljaGFyCSAgICp0ZW1wbGF0ZTsKKworCQkJCQlqc3BHZXRBcmcoanBpLCAmYXJnKTsKKwkJCQkJ aWYgKGFyZy50eXBlICE9IGpwaVN0cmluZykKKwkJCQkJeworCQkJCQkJc3RhdHVzID0ganBkc05v bkRhdGVUaW1lOworCQkJCQkJYnJlYWs7CS8qIHRoZXJlIHdpbGwgYmUgcnVudGltZSBlcnJvciAq LworCQkJCQl9CisKKwkJCQkJdGVtcGxhdGUgPSBqc3BHZXRTdHJpbmcoJmFyZywgTlVMTCk7CisJ CQkJCWlmIChkYXRldGltZV9mb3JtYXRfaGFzX3R6KHRlbXBsYXRlKSkKKwkJCQkJCXN0YXR1cyA9 IGpwZHNEYXRlVGltZVpvbmVkOworCQkJCQllbHNlCisJCQkJCQlzdGF0dXMgPSBqcGRzRGF0ZVRp bWVOb25ab25lZDsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJc3RhdHVzID0ganBkc1Vu a25vd25EYXRlVGltZTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UganBpTGlrZVJlZ2V4 OgorCQkJCUFzc2VydChzdGF0dXMgPT0ganBkc05vbkRhdGVUaW1lKTsKKwkJCQlqc3BJbml0QnlC dWZmZXIoJmFyZywganBpLT5iYXNlLCBqcGktPmNvbnRlbnQubGlrZV9yZWdleC5leHByKTsKKwkJ CQlqc3BJc011dGFibGVXYWxrZXIoJmFyZywgY3h0KTsKKwkJCQlicmVhazsKKworCQkJCS8qIGxp dGVyYWxzICovCisJCQljYXNlIGpwaU51bGw6CisJCQljYXNlIGpwaVN0cmluZzoKKwkJCWNhc2Ug anBpTnVtZXJpYzoKKwkJCWNhc2UganBpQm9vbDoKKwkJCQkvKiBhY2Nlc3NvcnMgKi8KKwkJCWNh c2UganBpS2V5OgorCQkJY2FzZSBqcGlBbnlLZXk6CisJCQkJLyogc3BlY2lhbCBpdGVtcyAqLwor CQkJY2FzZSBqcGlTdWJzY3JpcHQ6CisJCQljYXNlIGpwaUxhc3Q6CisJCQkJLyogaXRlbSBtZXRo b2RzICovCisJCQljYXNlIGpwaVR5cGU6CisJCQljYXNlIGpwaVNpemU6CisJCQljYXNlIGpwaUFi czoKKwkJCWNhc2UganBpRmxvb3I6CisJCQljYXNlIGpwaUNlaWxpbmc6CisJCQljYXNlIGpwaURv dWJsZToKKwkJCWNhc2UganBpS2V5VmFsdWU6CisJCQkJc3RhdHVzID0ganBkc05vbkRhdGVUaW1l OworCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKCFqc3BHZXROZXh0KGpwaSwgJm5leHQpKQorCQkJ YnJlYWs7CisKKwkJanBpID0gJm5leHQ7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9leGVjLmMgYi9zcmMvYmFja2Vu ZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5jCmluZGV4IGNiMmVhMDQ4YzMuLmNlYzBmM2RkNjUg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9leGVjLmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX2V4ZWMuYwpAQCAtMjM0LDYgKzIzNCwxMiBA QCBzdGF0aWMgSnNvblBhdGhFeGVjUmVzdWx0IGFwcGVuZEJvb2xSZXN1bHQoSnNvblBhdGhFeGVj Q29udGV4dCAqY3h0LAogCQkJCQkJCQkJCSAgIEpzb25QYXRoSXRlbSAqanNwLCBKc29uVmFsdWVM aXN0ICpmb3VuZCwgSnNvblBhdGhCb29sIHJlcyk7CiBzdGF0aWMgdm9pZCBnZXRKc29uUGF0aEl0 ZW0oSnNvblBhdGhFeGVjQ29udGV4dCAqY3h0LCBKc29uUGF0aEl0ZW0gKml0ZW0sCiAJCQkJCQkJ SnNvbmJWYWx1ZSAqdmFsdWUpOworc3RhdGljIEpzb25iVmFsdWUgKkdldEpzb25QYXRoVmFyKHZv aWQgKmN4dCwgY2hhciAqdmFyTmFtZSwgaW50IHZhck5hbWVMZW4sCisJCQkJCQkJCSAgSnNvbmJW YWx1ZSAqYmFzZU9iamVjdCwgaW50ICpiYXNlT2JqZWN0SWQpOworc3RhdGljIGludAlDb3VudEpz b25QYXRoVmFycyh2b2lkICpjeHQpOworc3RhdGljIHZvaWQgSnNvbkl0ZW1Gcm9tRGF0dW0oRGF0 dW0gdmFsLCBPaWQgdHlwaWQsIGludDMyIHR5cG1vZCwKKwkJCQkJCQkgIEpzb25iVmFsdWUgKnJl cyk7CitzdGF0aWMgdm9pZCBKc29uYlZhbHVlSW5pdE51bWVyaWNEYXR1bShKc29uYlZhbHVlICpq YnYsIERhdHVtIG51bSk7CiBzdGF0aWMgdm9pZCBnZXRKc29uUGF0aFZhcmlhYmxlKEpzb25QYXRo RXhlY0NvbnRleHQgKmN4dCwKIAkJCQkJCQkJSnNvblBhdGhJdGVtICp2YXJpYWJsZSwgSnNvbmJW YWx1ZSAqdmFsdWUpOwogc3RhdGljIGludAljb3VudFZhcmlhYmxlc0Zyb21Kc29uYih2b2lkICp2 YXJzSnNvbmIpOwpAQCAtMjEzOCw2ICsyMTQ0LDE1NSBAQCBnZXRKc29uUGF0aEl0ZW0oSnNvblBh dGhFeGVjQ29udGV4dCAqY3h0LCBKc29uUGF0aEl0ZW0gKml0ZW0sCiAJfQogfQogCisvKgorICog UmV0dXJucyB0aGUgY29tcHV0ZWQgdmFsdWUgb2YgYSBKU09OIHBhdGggdmFyaWFibGUgd2l0aCBn aXZlbiBuYW1lLgorICovCitzdGF0aWMgSnNvbmJWYWx1ZSAqCitHZXRKc29uUGF0aFZhcih2b2lk ICpjeHQsIGNoYXIgKnZhck5hbWUsIGludCB2YXJOYW1lTGVuLAorCQkJICAgSnNvbmJWYWx1ZSAq YmFzZU9iamVjdCwgaW50ICpiYXNlT2JqZWN0SWQpCit7CisJSnNvblBhdGhWYXJpYWJsZSAqdmFy ID0gTlVMTDsKKwlMaXN0CSAgICp2YXJzID0gY3h0OworCUxpc3RDZWxsICAgKmxjOworCUpzb25i VmFsdWUgKnJlc3VsdDsKKwlpbnQJCQlpZCA9IDE7CisKKwlmb3JlYWNoKGxjLCB2YXJzKQorCXsK KwkJSnNvblBhdGhWYXJpYWJsZSAqY3VydmFyID0gbGZpcnN0KGxjKTsKKworCQlpZiAoIXN0cm5j bXAoY3VydmFyLT5uYW1lLCB2YXJOYW1lLCB2YXJOYW1lTGVuKSkKKwkJeworCQkJdmFyID0gY3Vy dmFyOworCQkJYnJlYWs7CisJCX0KKworCQlpZCsrOworCX0KKworCWlmICh2YXIgPT0gTlVMTCkK Kwl7CisJCSpiYXNlT2JqZWN0SWQgPSAtMTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmVzdWx0 ID0gcGFsbG9jKHNpemVvZihKc29uYlZhbHVlKSk7CisJaWYgKHZhci0+aXNudWxsKQorCXsKKwkJ KmJhc2VPYmplY3RJZCA9IDA7CisJCXJlc3VsdC0+dHlwZSA9IGpidk51bGw7CisJfQorCWVsc2UK KwkJSnNvbkl0ZW1Gcm9tRGF0dW0odmFyLT52YWx1ZSwgdmFyLT50eXBpZCwgdmFyLT50eXBtb2Qs IHJlc3VsdCk7CisKKwkqYmFzZU9iamVjdCA9ICpyZXN1bHQ7CisJKmJhc2VPYmplY3RJZCA9IGlk OworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludAorQ291bnRKc29uUGF0aFZhcnMo dm9pZCAqY3h0KQoreworCUxpc3QJICAgKnZhcnMgPSAoTGlzdCAqKSBjeHQ7CisKKwlyZXR1cm4g bGlzdF9sZW5ndGgodmFycyk7Cit9CisKKworLyoKKyAqIEluaXRpYWxpemUgSnNvbmJWYWx1ZSB0 byBwYXNzIHRvIGpzb25wYXRoIGV4ZWN1dG9yIGZyb20gZ2l2ZW4KKyAqIGRhdHVtIHZhbHVlIG9m IHRoZSBzcGVjaWZpZWQgdHlwZS4KKyAqLworc3RhdGljIHZvaWQKK0pzb25JdGVtRnJvbURhdHVt KERhdHVtIHZhbCwgT2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QsIEpzb25iVmFsdWUgKnJlcykKK3sK Kwlzd2l0Y2ggKHR5cGlkKQorCXsKKwkJY2FzZSBCT09MT0lEOgorCQkJcmVzLT50eXBlID0gamJ2 Qm9vbDsKKwkJCXJlcy0+dmFsLmJvb2xlYW4gPSBEYXR1bUdldEJvb2wodmFsKTsKKwkJCWJyZWFr OworCQljYXNlIE5VTUVSSUNPSUQ6CisJCQlKc29uYlZhbHVlSW5pdE51bWVyaWNEYXR1bShyZXMs IHZhbCk7CisJCQlicmVhazsKKwkJY2FzZSBJTlQyT0lEOgorCQkJSnNvbmJWYWx1ZUluaXROdW1l cmljRGF0dW0ocmVzLCBEaXJlY3RGdW5jdGlvbkNhbGwxKGludDJfbnVtZXJpYywgdmFsKSk7CisJ CQlicmVhazsKKwkJY2FzZSBJTlQ0T0lEOgorCQkJSnNvbmJWYWx1ZUluaXROdW1lcmljRGF0dW0o cmVzLCBEaXJlY3RGdW5jdGlvbkNhbGwxKGludDRfbnVtZXJpYywgdmFsKSk7CisJCQlicmVhazsK KwkJY2FzZSBJTlQ4T0lEOgorCQkJSnNvbmJWYWx1ZUluaXROdW1lcmljRGF0dW0ocmVzLCBEaXJl Y3RGdW5jdGlvbkNhbGwxKGludDhfbnVtZXJpYywgdmFsKSk7CisJCQlicmVhazsKKwkJY2FzZSBG TE9BVDRPSUQ6CisJCQlKc29uYlZhbHVlSW5pdE51bWVyaWNEYXR1bShyZXMsIERpcmVjdEZ1bmN0 aW9uQ2FsbDEoZmxvYXQ0X251bWVyaWMsIHZhbCkpOworCQkJYnJlYWs7CisJCWNhc2UgRkxPQVQ4 T0lEOgorCQkJSnNvbmJWYWx1ZUluaXROdW1lcmljRGF0dW0ocmVzLCBEaXJlY3RGdW5jdGlvbkNh bGwxKGZsb2F0OF9udW1lcmljLCB2YWwpKTsKKwkJCWJyZWFrOworCQljYXNlIFRFWFRPSUQ6CisJ CWNhc2UgVkFSQ0hBUk9JRDoKKwkJCXJlcy0+dHlwZSA9IGpidlN0cmluZzsKKwkJCXJlcy0+dmFs LnN0cmluZy52YWwgPSBWQVJEQVRBX0FOWSh2YWwpOworCQkJcmVzLT52YWwuc3RyaW5nLmxlbiA9 IFZBUlNJWkVfQU5ZX0VYSERSKHZhbCk7CisJCQlicmVhazsKKwkJY2FzZSBEQVRFT0lEOgorCQlj YXNlIFRJTUVPSUQ6CisJCWNhc2UgVElNRVRaT0lEOgorCQljYXNlIFRJTUVTVEFNUE9JRDoKKwkJ Y2FzZSBUSU1FU1RBTVBUWk9JRDoKKwkJCXJlcy0+dHlwZSA9IGpidkRhdGV0aW1lOworCQkJcmVz LT52YWwuZGF0ZXRpbWUudmFsdWUgPSB2YWw7CisJCQlyZXMtPnZhbC5kYXRldGltZS50eXBpZCA9 IHR5cGlkOworCQkJcmVzLT52YWwuZGF0ZXRpbWUudHlwbW9kID0gdHlwbW9kOworCQkJcmVzLT52 YWwuZGF0ZXRpbWUudHogPSAwOworCQkJYnJlYWs7CisJCWNhc2UgSlNPTkJPSUQ6CisJCQl7CisJ CQkJSnNvbmJWYWx1ZSAqamJ2ID0gcmVzOworCQkJCUpzb25iCSAgICpqYiA9IERhdHVtR2V0SnNv bmJQKHZhbCk7CisKKwkJCQlpZiAoSnNvbkNvbnRhaW5lcklzU2NhbGFyKCZqYi0+cm9vdCkpCisJ CQkJeworCQkJCQlib29sCQlyZXN1bHQgUEdfVVNFRF9GT1JfQVNTRVJUU19PTkxZOworCisJCQkJ CXJlc3VsdCA9IEpzb25iRXh0cmFjdFNjYWxhcigmamItPnJvb3QsIGpidik7CisJCQkJCUFzc2Vy dChyZXN1bHQpOworCQkJCX0KKwkJCQllbHNlCisJCQkJCUpzb25iSW5pdEJpbmFyeShqYnYsIGpi KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJY2FzZSBKU09OT0lEOgorCQkJeworCQkJCXRleHQJICAg KnR4dCA9IERhdHVtR2V0VGV4dFAodmFsKTsKKwkJCQljaGFyCSAgICpzdHIgPSB0ZXh0X3RvX2Nz dHJpbmcodHh0KTsKKwkJCQlKc29uYgkgICAqamI7CisKKwkJCQlqYiA9IERhdHVtR2V0SnNvbmJQ KERpcmVjdEZ1bmN0aW9uQ2FsbDEoanNvbmJfaW4sCisJCQkJCQkJCQkJCQkJCUNTdHJpbmdHZXRE YXR1bShzdHIpKSk7CisJCQkJcGZyZWUoc3RyKTsKKworCQkJCUpzb25JdGVtRnJvbURhdHVtKEpz b25iUEdldERhdHVtKGpiKSwgSlNPTkJPSUQsIC0xLCByZXMpOworCQkJCWJyZWFrOworCQkJfQor CQlkZWZhdWx0OgorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFM SURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJZXJybXNnKCJjb3VsZCBub3QgY29udmVydCB2YWx1 ZSBvZiB0eXBlICVzIHRvIGpzb25wYXRoIiwKKwkJCQkJCSAgIGZvcm1hdF90eXBlX2JlKHR5cGlk KSkpOworCX0KK30KKworLyogSW5pdGlhbGl6ZSBudW1lcmljIHZhbHVlIGZyb20gdGhlIGdpdmVu IGRhdHVtICovCitzdGF0aWMgdm9pZAorSnNvbmJWYWx1ZUluaXROdW1lcmljRGF0dW0oSnNvbmJW YWx1ZSAqamJ2LCBEYXR1bSBudW0pCit7CisJamJ2LT50eXBlID0gamJ2TnVtZXJpYzsKKwlqYnYt PnZhbC5udW1lcmljID0gRGF0dW1HZXROdW1lcmljKG51bSk7Cit9CisKIC8qCiAgKiBHZXQgdGhl IHZhbHVlIG9mIHZhcmlhYmxlIHBhc3NlZCB0byBqc29ucGF0aCBleGVjdXRvcgogICovCkBAIC0y ODc0LDMgKzMwMjksMTcwIEBAIGNvbXBhcmVEYXRldGltZShEYXR1bSB2YWwxLCBPaWQgdHlwaWQx LCBEYXR1bSB2YWwyLCBPaWQgdHlwaWQyLAogCiAJcmV0dXJuIERhdHVtR2V0SW50MzIoRGlyZWN0 RnVuY3Rpb25DYWxsMihjbXBmdW5jLCB2YWwxLCB2YWwyKSk7CiB9CisKKy8qCisgKiBFeGVjdXRv ci1jYWxsYWJsZSBKU09OX0VYSVNUUyBpbXBsZW1lbnRhdGlvbgorICoKKyAqIFJldHVybnMgTlVM TCBpbnN0ZWFkIG9mIHRocm93aW5nIGVycm9ycyBpZiAnZXJyb3InIGlzIG5vdCBOVUxMLCBzZXR0 aW5nCisgKiAqZXJyb3IgdG8gdHJ1ZS4KKyAqLworYm9vbAorSnNvblBhdGhFeGlzdHMoRGF0dW0g amIsIEpzb25QYXRoICpqcCwgYm9vbCAqZXJyb3IsIExpc3QgKnZhcnMpCit7CisJSnNvblBhdGhF eGVjUmVzdWx0IHJlczsKKworCXJlcyA9IGV4ZWN1dGVKc29uUGF0aChqcCwgdmFycywKKwkJCQkJ CSAgR2V0SnNvblBhdGhWYXIsIENvdW50SnNvblBhdGhWYXJzLAorCQkJCQkJICBEYXR1bUdldEpz b25iUChqYiksICFlcnJvciwgTlVMTCwgdHJ1ZSk7CisKKwlBc3NlcnQoZXJyb3IgfHwgIWpwZXJJ c0Vycm9yKHJlcykpOworCisJaWYgKGVycm9yICYmIGpwZXJJc0Vycm9yKHJlcykpCisJCSplcnJv ciA9IHRydWU7CisKKwlyZXR1cm4gcmVzID09IGpwZXJPazsKK30KKworLyoKKyAqIEV4ZWN1dG9y LWNhbGxhYmxlIEpTT05fUVVFUlkgaW1wbGVtZW50YXRpb24KKyAqCisgKiBSZXR1cm5zIE5VTEwg aW5zdGVhZCBvZiB0aHJvd2luZyBlcnJvcnMgaWYgJ2Vycm9yJyBpcyBub3QgTlVMTCwgc2V0dGlu ZworICogKmVycm9yIHRvIHRydWUuICAqZW1wdHkgaXMgc2V0IHRvIHRydWUgaWYgbm8gbWF0Y2gg aXMgZm91bmQuCisgKi8KK0RhdHVtCitKc29uUGF0aFF1ZXJ5KERhdHVtIGpiLCBKc29uUGF0aCAq anAsIEpzb25XcmFwcGVyIHdyYXBwZXIsIGJvb2wgKmVtcHR5LAorCQkJICBib29sICplcnJvciwg TGlzdCAqdmFycykKK3sKKwlKc29uYlZhbHVlICpzaW5nbGV0b247CisJYm9vbAkJd3JhcDsKKwlK c29uVmFsdWVMaXN0IGZvdW5kID0gezB9OworCUpzb25QYXRoRXhlY1Jlc3VsdCByZXM7CisJaW50 CQkJY291bnQ7CisKKwlyZXMgPSBleGVjdXRlSnNvblBhdGgoanAsIHZhcnMsCisJCQkJCQkgIEdl dEpzb25QYXRoVmFyLCBDb3VudEpzb25QYXRoVmFycywKKwkJCQkJCSAgRGF0dW1HZXRKc29uYlAo amIpLCAhZXJyb3IsICZmb3VuZCwgdHJ1ZSk7CisJQXNzZXJ0KGVycm9yIHx8ICFqcGVySXNFcnJv cihyZXMpKTsKKwlpZiAoZXJyb3IgJiYganBlcklzRXJyb3IocmVzKSkKKwl7CisJCSplcnJvciA9 IHRydWU7CisJCSplbXB0eSA9IGZhbHNlOworCQlyZXR1cm4gKERhdHVtKSAwOworCX0KKworCS8q IFdSQVAgb3Igbm90PyAqLworCWNvdW50ID0gSnNvblZhbHVlTGlzdExlbmd0aCgmZm91bmQpOwor CXNpbmdsZXRvbiA9IGNvdW50ID4gMCA/IEpzb25WYWx1ZUxpc3RIZWFkKCZmb3VuZCkgOiBOVUxM OworCWlmIChzaW5nbGV0b24gPT0gTlVMTCkKKwkJd3JhcCA9IGZhbHNlOworCWVsc2UgaWYgKHdy YXBwZXIgPT0gSlNXX05PTkUgfHwgd3JhcHBlciA9PSBKU1dfVU5TUEVDKQorCQl3cmFwID0gZmFs c2U7CisJZWxzZSBpZiAod3JhcHBlciA9PSBKU1dfVU5DT05ESVRJT05BTCkKKwkJd3JhcCA9IHRy dWU7CisJZWxzZSBpZiAod3JhcHBlciA9PSBKU1dfQ09ORElUSU9OQUwpCisJCXdyYXAgPSBjb3Vu dCA+IDEgfHwKKwkJCUlzQUpzb25iU2NhbGFyKHNpbmdsZXRvbikgfHwKKwkJCShzaW5nbGV0b24t PnR5cGUgPT0gamJ2QmluYXJ5ICYmCisJCQkgSnNvbkNvbnRhaW5lcklzU2NhbGFyKHNpbmdsZXRv bi0+dmFsLmJpbmFyeS5kYXRhKSk7CisJZWxzZQorCXsKKwkJZWxvZyhFUlJPUiwgInVucmVjb2du aXplZCBqc29uIHdyYXBwZXIgJWQiLCB3cmFwcGVyKTsKKwkJd3JhcCA9IGZhbHNlOworCX0KKwor CWlmICh3cmFwKQorCQlyZXR1cm4gSnNvbmJQR2V0RGF0dW0oSnNvbmJWYWx1ZVRvSnNvbmIod3Jh cEl0ZW1zSW5BcnJheSgmZm91bmQpKSk7CisKKwkvKiBObyB3cmFwcGluZyBtZWFucyBvbmx5IG9u ZSBpdGVtIGlzIGV4cGVjdGVkLiAqLworCWlmIChjb3VudCA+IDEpCisJeworCQlpZiAoZXJyb3Ip CisJCXsKKwkJCSplcnJvciA9IHRydWU7CisJCQlyZXR1cm4gKERhdHVtKSAwOworCQl9CisKKwkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX01PUkVfVEhBTl9PTkVfU1FMX0pT T05fSVRFTSksCisJCQkJIGVycm1zZygiSlNPTiBwYXRoIGV4cHJlc3Npb24gaW4gSlNPTl9RVUVS WSBzaG91bGQgcmV0dXJuIHNpbmdsZXRvbiBpdGVtIHdpdGhvdXQgd3JhcHBlciIpLAorCQkJCSBl cnJoaW50KCJVc2UgV0lUSCBXUkFQUEVSIGNsYXVzZSB0byB3cmFwIFNRTC9KU09OIGl0ZW0gc2Vx dWVuY2UgaW50byBhcnJheS4iKSkpOworCX0KKworCWlmIChzaW5nbGV0b24pCisJCXJldHVybiBK c29uYlBHZXREYXR1bShKc29uYlZhbHVlVG9Kc29uYihzaW5nbGV0b24pKTsKKworCSplbXB0eSA9 IHRydWU7CisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKK30KKworLyoKKyAqIEV4ZWN1 dG9yLWNhbGxhYmxlIEpTT05fVkFMVUUgaW1wbGVtZW50YXRpb24KKyAqCisgKiBSZXR1cm5zIE5V TEwgaW5zdGVhZCBvZiB0aHJvd2luZyBlcnJvcnMgaWYgJ2Vycm9yJyBpcyBub3QgTlVMTCwgc2V0 dGluZworICogKmVycm9yIHRvIHRydWUuICAqZW1wdHkgaXMgc2V0IHRvIHRydWUgaWYgbm8gbWF0 Y2ggaXMgZm91bmQuCisgKi8KK0pzb25iVmFsdWUgKgorSnNvblBhdGhWYWx1ZShEYXR1bSBqYiwg SnNvblBhdGggKmpwLCBib29sICplbXB0eSwgYm9vbCAqZXJyb3IsIExpc3QgKnZhcnMpCit7CisJ SnNvbmJWYWx1ZSAqcmVzOworCUpzb25WYWx1ZUxpc3QgZm91bmQgPSB7MH07CisJSnNvblBhdGhF eGVjUmVzdWx0IGpwZXIgUEdfVVNFRF9GT1JfQVNTRVJUU19PTkxZOworCWludAkJCWNvdW50Owor CisJanBlciA9IGV4ZWN1dGVKc29uUGF0aChqcCwgdmFycywgR2V0SnNvblBhdGhWYXIsIENvdW50 SnNvblBhdGhWYXJzLAorCQkJCQkJICAgRGF0dW1HZXRKc29uYlAoamIpLAorCQkJCQkJICAgIWVy cm9yLCAmZm91bmQsIHRydWUpOworCisJQXNzZXJ0KGVycm9yIHx8ICFqcGVySXNFcnJvcihqcGVy KSk7CisKKwlpZiAoZXJyb3IgJiYganBlcklzRXJyb3IoanBlcikpCisJeworCQkqZXJyb3IgPSB0 cnVlOworCQkqZW1wdHkgPSBmYWxzZTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJY291bnQgPSBK c29uVmFsdWVMaXN0TGVuZ3RoKCZmb3VuZCk7CisKKwkqZW1wdHkgPSAoY291bnQgPT0gMCk7CisK KwlpZiAoKmVtcHR5KQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEpTT05fVkFMVUUgZXhwZWN0cyB0 byBnZXQgb25seSBzaW5nbGV0b25zLiAqLworCWlmIChjb3VudCA+IDEpCisJeworCQlpZiAoZXJy b3IpCisJCXsKKwkJCSplcnJvciA9IHRydWU7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9NT1JFX1RIQU5fT05FX1NRTF9KU09O X0lURU0pLAorCQkJCSBlcnJtc2coIkpTT04gcGF0aCBleHByZXNzaW9uIGluIEpTT05fVkFMVUUg c2hvdWxkIHJldHVybiBzaW5nbGV0b24gc2NhbGFyIGl0ZW0iKSkpOworCX0KKworCXJlcyA9IEpz b25WYWx1ZUxpc3RIZWFkKCZmb3VuZCk7CisJaWYgKHJlcy0+dHlwZSA9PSBqYnZCaW5hcnkgJiYg SnNvbkNvbnRhaW5lcklzU2NhbGFyKHJlcy0+dmFsLmJpbmFyeS5kYXRhKSkKKwkJSnNvbmJFeHRy YWN0U2NhbGFyKHJlcy0+dmFsLmJpbmFyeS5kYXRhLCByZXMpOworCisJLyogSlNPTl9WQUxVRSBl eHBlY3RzIHRvIGdldCBvbmx5IHNjYWxhcnMuICovCisJaWYgKCFJc0FKc29uYlNjYWxhcihyZXMp KQorCXsKKwkJaWYgKGVycm9yKQorCQl7CisJCQkqZXJyb3IgPSB0cnVlOworCQkJcmV0dXJuIE5V TEw7CisJCX0KKworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfU1FMX0pT T05fU0NBTEFSX1JFUVVJUkVEKSwKKwkJCQkgZXJybXNnKCJKU09OIHBhdGggZXhwcmVzc2lvbiBp biBKU09OX1ZBTFVFIHNob3VsZCByZXR1cm4gc2luZ2xldG9uIHNjYWxhciBpdGVtIikpKTsKKwl9 CisKKwlpZiAocmVzLT50eXBlID09IGpidk51bGwpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJu IHJlczsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwppbmRleCAwYjJhMTY0MDU3Li4yNzM1 MzQ4NDE2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCkBAIC00NzYsNiArNDc2LDggQEAg c3RhdGljIHZvaWQgZ2V0X2NvbnN0X2V4cHIoQ29uc3QgKmNvbnN0dmFsLCBkZXBhcnNlX2NvbnRl eHQgKmNvbnRleHQsCiAJCQkJCQkgICBpbnQgc2hvd3R5cGUpOwogc3RhdGljIHZvaWQgZ2V0X2Nv bnN0X2NvbGxhdGlvbihDb25zdCAqY29uc3R2YWwsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7 CiBzdGF0aWMgdm9pZCBnZXRfanNvbl9mb3JtYXQoSnNvbkZvcm1hdCAqZm9ybWF0LCBTdHJpbmdJ bmZvIGJ1Zik7CitzdGF0aWMgdm9pZCBnZXRfanNvbl9yZXR1cm5pbmcoSnNvblJldHVybmluZyAq cmV0dXJuaW5nLCBTdHJpbmdJbmZvIGJ1ZiwKKwkJCQkJCQkgICBib29sIGpzb25fZm9ybWF0X2J5 X2RlZmF1bHQpOwogc3RhdGljIHZvaWQgZ2V0X2pzb25fY29uc3RydWN0b3IoSnNvbkNvbnN0cnVj dG9yRXhwciAqY3RvciwKIAkJCQkJCQkJIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwgYm9vbCBz aG93aW1wbGljaXQpOwogc3RhdGljIHZvaWQgZ2V0X2pzb25fY29uc3RydWN0b3Jfb3B0aW9ucyhK c29uQ29uc3RydWN0b3JFeHByICpjdG9yLApAQCAtNTE4LDYgKzUyMCw4IEBAIHN0YXRpYyBjaGFy ICpnZW5lcmF0ZV9xdWFsaWZpZWRfdHlwZV9uYW1lKE9pZCB0eXBpZCk7CiBzdGF0aWMgdGV4dCAq c3RyaW5nX3RvX3RleHQoY2hhciAqc3RyKTsKIHN0YXRpYyBjaGFyICpmbGF0dGVuX3JlbG9wdGlv bnMoT2lkIHJlbGlkKTsKIHN0YXRpYyB2b2lkIGdldF9yZWxvcHRpb25zKFN0cmluZ0luZm8gYnVm LCBEYXR1bSByZWxvcHRpb25zKTsKK3N0YXRpYyB2b2lkIGdldF9qc29uX3BhdGhfc3BlYyhOb2Rl ICpwYXRoX3NwZWMsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkgICBib29sIHNo b3dpbXBsaWNpdCk7CiAKICNkZWZpbmUgb25seV9tYXJrZXIocnRlKSAgKChydGUpLT5pbmggPyAi IiA6ICJPTkxZICIpCiAKQEAgLTgzMDAsNiArODMwNCw3IEBAIGlzU2ltcGxlTm9kZShOb2RlICpu b2RlLCBOb2RlICpwYXJlbnROb2RlLCBpbnQgcHJldHR5RmxhZ3MpCiAJCWNhc2UgVF9XaW5kb3dG dW5jOgogCQljYXNlIFRfRnVuY0V4cHI6CiAJCWNhc2UgVF9Kc29uQ29uc3RydWN0b3JFeHByOgor CQljYXNlIFRfSnNvbkV4cHI6CiAJCQkvKiBmdW5jdGlvbi1saWtlOiBuYW1lKC4uKSBvciBuYW1l Wy4uXSAqLwogCQkJcmV0dXJuIHRydWU7CiAKQEAgLTg0NzEsNiArODQ3Niw3IEBAIGlzU2ltcGxl Tm9kZShOb2RlICpub2RlLCBOb2RlICpwYXJlbnROb2RlLCBpbnQgcHJldHR5RmxhZ3MpCiAJCQkJ Y2FzZSBUX0dyb3VwaW5nRnVuYzoJLyogb3duIHBhcmVudGhlc2VzICovCiAJCQkJY2FzZSBUX1dp bmRvd0Z1bmM6CS8qIG93biBwYXJlbnRoZXNlcyAqLwogCQkJCWNhc2UgVF9DYXNlRXhwcjoJLyog b3RoZXIgc2VwYXJhdG9ycyAqLworCQkJCWNhc2UgVF9Kc29uRXhwcjoJLyogb3duIHBhcmVudGhl c2VzICovCiAJCQkJCXJldHVybiB0cnVlOwogCQkJCWRlZmF1bHQ6CiAJCQkJCXJldHVybiBmYWxz ZTsKQEAgLTg1ODYsNiArODU5Miw2NCBAQCBnZXRfcnVsZV9leHByX3BhcmVuKE5vZGUgKm5vZGUs IGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKIAkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4 dC0+YnVmLCAnKScpOwogfQogCitzdGF0aWMgdm9pZAorZ2V0X2pzb25fYmVoYXZpb3IoSnNvbkJl aGF2aW9yICpiZWhhdmlvciwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LAorCQkJCSAgY29uc3Qg Y2hhciAqb24pCit7CisJLyoKKwkgKiBUaGUgb3JkZXIgb2YgYXJyYXkgZWxlbWVudHMgbXVzdCBj b3JyZXNwb25kIHRvIHRoZSBvcmRlciBvZgorCSAqIEpzb25CZWhhdmlvclR5cGUgbWVtYmVycy4K KwkgKi8KKwljb25zdCBjaGFyICpiZWhhdmlvcl9uYW1lc1tdID0KKwl7CisJCSIgTlVMTCIsCisJ CSIgRVJST1IiLAorCQkiIEVNUFRZIiwKKwkJIiBUUlVFIiwKKwkJIiBGQUxTRSIsCisJCSIgVU5L Tk9XTiIsCisJCSIgRU1QVFkgQVJSQVkiLAorCQkiIEVNUFRZIE9CSkVDVCIsCisJCSIgREVGQVVM VCAiCisJfTsKKworCWlmICgoaW50KSBiZWhhdmlvci0+YnR5cGUgPCAwIHx8IGJlaGF2aW9yLT5i dHlwZSA+PSBsZW5ndGhvZihiZWhhdmlvcl9uYW1lcykpCisJCWVsb2coRVJST1IsICJpbnZhbGlk IGpzb24gYmVoYXZpb3IgdHlwZTogJWQiLCBiZWhhdmlvci0+YnR5cGUpOworCisJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZyhjb250ZXh0LT5idWYsIGJlaGF2aW9yX25hbWVzW2JlaGF2aW9yLT5idHlw ZV0pOworCisJaWYgKGJlaGF2aW9yLT5idHlwZSA9PSBKU09OX0JFSEFWSU9SX0RFRkFVTFQpCisJ CWdldF9ydWxlX2V4cHIoYmVoYXZpb3ItPmV4cHIsIGNvbnRleHQsIGZhbHNlKTsKKworCWFwcGVu ZFN0cmluZ0luZm8oY29udGV4dC0+YnVmLCAiIE9OICVzIiwgb24pOworfQorCisvKgorICogZ2V0 X2pzb25fZXhwcl9vcHRpb25zCisgKgorICogUGFyc2UgYmFjayBjb21tb24gb3B0aW9ucyBmb3Ig SlNPTl9RVUVSWSwgSlNPTl9WQUxVRSwgSlNPTl9FWElTVFMuCisgKi8KK3N0YXRpYyB2b2lkCitn ZXRfanNvbl9leHByX29wdGlvbnMoSnNvbkV4cHIgKmpzZXhwciwgZGVwYXJzZV9jb250ZXh0ICpj b250ZXh0LAorCQkJCQkgIEpzb25CZWhhdmlvclR5cGUgZGVmYXVsdF9iZWhhdmlvcikKK3sKKwlp ZiAoanNleHByLT5vcCA9PSBKU09OX1FVRVJZX09QKQorCXsKKwkJaWYgKGpzZXhwci0+d3JhcHBl ciA9PSBKU1dfQ09ORElUSU9OQUwpCisJCQlhcHBlbmRTdHJpbmdJbmZvKGNvbnRleHQtPmJ1Ziwg IiBXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIiKTsKKwkJZWxzZSBpZiAoanNleHByLT53cmFwcGVy ID09IEpTV19VTkNPTkRJVElPTkFMKQorCQkJYXBwZW5kU3RyaW5nSW5mbyhjb250ZXh0LT5idWYs ICIgV0lUSCBVTkNPTkRJVElPTkFMIFdSQVBQRVIiKTsKKworCQlpZiAoanNleHByLT5vbWl0X3F1 b3RlcykKKwkJCWFwcGVuZFN0cmluZ0luZm8oY29udGV4dC0+YnVmLCAiIE9NSVQgUVVPVEVTIik7 CisJfQorCisJaWYgKGpzZXhwci0+b25fZW1wdHkgJiYganNleHByLT5vbl9lbXB0eS0+YnR5cGUg IT0gZGVmYXVsdF9iZWhhdmlvcikKKwkJZ2V0X2pzb25fYmVoYXZpb3IoanNleHByLT5vbl9lbXB0 eSwgY29udGV4dCwgIkVNUFRZIik7CisKKwlpZiAoanNleHByLT5vbl9lcnJvciAmJiBqc2V4cHIt Pm9uX2Vycm9yLT5idHlwZSAhPSBkZWZhdWx0X2JlaGF2aW9yKQorCQlnZXRfanNvbl9iZWhhdmlv cihqc2V4cHItPm9uX2Vycm9yLCBjb250ZXh0LCAiRVJST1IiKTsKK30KIAogLyogLS0tLS0tLS0t LQogICogZ2V0X3J1bGVfZXhwcgkJCS0gUGFyc2UgYmFjayBhbiBleHByZXNzaW9uCkBAIC05NzQ1 LDYgKzk4MDksNyBAQCBnZXRfcnVsZV9leHByKE5vZGUgKm5vZGUsIGRlcGFyc2VfY29udGV4dCAq Y29udGV4dCwKIAkJCX0KIAkJCWJyZWFrOwogCisKIAkJY2FzZSBUX0pzb25WYWx1ZUV4cHI6CiAJ CQl7CiAJCQkJSnNvblZhbHVlRXhwciAqanZlID0gKEpzb25WYWx1ZUV4cHIgKikgbm9kZTsKQEAg LTk3OTQsNiArOTg1OSw2NCBAQCBnZXRfcnVsZV9leHByKE5vZGUgKm5vZGUsIGRlcGFyc2VfY29u dGV4dCAqY29udGV4dCwKIAkJCX0KIAkJCWJyZWFrOwogCisJCWNhc2UgVF9Kc29uRXhwcjoKKwkJ CXsKKwkJCQlKc29uRXhwciAgICpqZXhwciA9IChKc29uRXhwciAqKSBub2RlOworCisJCQkJc3dp dGNoIChqZXhwci0+b3ApCisJCQkJeworCQkJCQljYXNlIEpTT05fRVhJU1RTX09QOgorCQkJCQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJKU09OX0VYSVNUUygiKTsKKwkJCQkJCWJyZWFr OworCQkJCQljYXNlIEpTT05fUVVFUllfT1A6CisJCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KGJ1ZiwgIkpTT05fUVVFUlkoIik7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBKU09OX1ZBTFVF X09QOgorCQkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJKU09OX1ZBTFVFKCIpOwor CQkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJZ2V0X3J1bGVfZXhwcihqZXhwci0+Zm9ybWF0dGVk X2V4cHIsIGNvbnRleHQsIHNob3dpbXBsaWNpdCk7CisKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKGJ1ZiwgIiwgIik7CisKKwkJCQlnZXRfanNvbl9wYXRoX3NwZWMoamV4cHItPnBhdGhfc3Bl YywgY29udGV4dCwgc2hvd2ltcGxpY2l0KTsKKworCQkJCWlmIChqZXhwci0+cGFzc2luZ192YWx1 ZXMpCisJCQkJeworCQkJCQlMaXN0Q2VsbCAgICpsYzEsCisJCQkJCQkJICAgKmxjMjsKKwkJCQkJ Ym9vbAkJbmVlZGNvbW1hID0gZmFsc2U7CisKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhi dWYsICIgUEFTU0lORyAiKTsKKworCQkJCQlmb3Jib3RoKGxjMSwgamV4cHItPnBhc3NpbmdfbmFt ZXMsCisJCQkJCQkJbGMyLCBqZXhwci0+cGFzc2luZ192YWx1ZXMpCisJCQkJCXsKKwkJCQkJCWlm IChuZWVkY29tbWEpCisJCQkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIsICIpOwor CQkJCQkJbmVlZGNvbW1hID0gdHJ1ZTsKKworCQkJCQkJZ2V0X3J1bGVfZXhwcigoTm9kZSAqKSBs Zmlyc3QobGMyKSwgY29udGV4dCwgc2hvd2ltcGxpY2l0KTsKKwkJCQkJCWFwcGVuZFN0cmluZ0lu Zm8oYnVmLCAiIEFTICVzIiwKKwkJCQkJCQkJCQkgKChTdHJpbmcgKikgbGZpcnN0X25vZGUoU3Ry aW5nLCBsYzEpKS0+c3ZhbCk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlpZiAoamV4cHItPm9wICE9 IEpTT05fRVhJU1RTX09QIHx8CisJCQkJCWpleHByLT5yZXR1cm5pbmctPnR5cGlkICE9IEJPT0xP SUQpCisJCQkJCWdldF9qc29uX3JldHVybmluZyhqZXhwci0+cmV0dXJuaW5nLCBjb250ZXh0LT5i dWYsCisJCQkJCQkJCQkgICBqZXhwci0+b3AgPT0gSlNPTl9RVUVSWV9PUCk7CisKKwkJCQlnZXRf anNvbl9leHByX29wdGlvbnMoamV4cHIsIGNvbnRleHQsCisJCQkJCQkJCQkgIGpleHByLT5vcCAh PSBKU09OX0VYSVNUU19PUCA/CisJCQkJCQkJCQkgIEpTT05fQkVIQVZJT1JfTlVMTCA6CisJCQkJ CQkJCQkgIEpTT05fQkVIQVZJT1JfRkFMU0UpOworCisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZyhidWYsICIpIik7CisJCQl9CisJCQlicmVhazsKKwogCQljYXNlIFRfTGlzdDoKIAkJCXsKIAkJ CQljaGFyCSAgICpzZXA7CkBAIC05OTE3LDYgKzEwMDQwLDcgQEAgbG9va3NfbGlrZV9mdW5jdGlv bihOb2RlICpub2RlKQogCQljYXNlIFRfTWluTWF4RXhwcjoKIAkJY2FzZSBUX1NRTFZhbHVlRnVu Y3Rpb246CiAJCWNhc2UgVF9YbWxFeHByOgorCQljYXNlIFRfSnNvbkV4cHI6CiAJCQkvKiB0aGVz ZSBhcmUgYWxsIGFjY2VwdGVkIGJ5IGZ1bmNfZXhwcl9jb21tb25fc3ViZXhwciAqLwogCQkJcmV0 dXJuIHRydWU7CiAJCWRlZmF1bHQ6CkBAIC0xMDc4Niw2ICsxMDkxMCwxOCBAQCBnZXRfY29uc3Rf Y29sbGF0aW9uKENvbnN0ICpjb25zdHZhbCwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KQogCX0K IH0KIAorLyoKKyAqIGdldF9qc29uX3BhdGhfc3BlYwkJLSBQYXJzZSBiYWNrIGEgSlNPTiBwYXRo IHNwZWNpZmljYXRpb24KKyAqLworc3RhdGljIHZvaWQKK2dldF9qc29uX3BhdGhfc3BlYyhOb2Rl ICpwYXRoX3NwZWMsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwgYm9vbCBzaG93aW1wbGljaXQp Cit7CisJaWYgKElzQShwYXRoX3NwZWMsIENvbnN0KSkKKwkJZ2V0X2NvbnN0X2V4cHIoKENvbnN0 ICopIHBhdGhfc3BlYywgY29udGV4dCwgLTEpOworCWVsc2UKKwkJZ2V0X3J1bGVfZXhwcihwYXRo X3NwZWMsIGNvbnRleHQsIHNob3dpbXBsaWNpdCk7Cit9CisKIC8qCiAgKiBnZXRfanNvbl9mb3Jt YXQJCQktIFBhcnNlIGJhY2sgYSBKc29uRm9ybWF0IG5vZGUKICAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNF eHByLmgKaW5kZXggYTI4ZGRjZGQ3Ny4uMmJhYzg3NzAwYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhw ci5oCkBAIC0yNDAsNiArMjQwLDkgQEAgdHlwZWRlZiBlbnVtIEV4cHJFdmFsT3AKIAlFRU9QX1hN TEVYUFIsCiAJRUVPUF9KU09OX0NPTlNUUlVDVE9SLAogCUVFT1BfSVNfSlNPTiwKKwlFRU9QX0pT T05FWFBSX1BBVEgsCisJRUVPUF9KU09ORVhQUl9DT0VSQ0lPTiwKKwlFRU9QX0pTT05FWFBSX0NP RVJDSU9OX0ZJTklTSCwKIAlFRU9QX0FHR1JFRiwKIAlFRU9QX0dST1VQSU5HX0ZVTkMsCiAJRUVP UF9XSU5ET1dfRlVOQywKQEAgLTY5Miw2ICs2OTUsMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgRXhwckV2 YWxTdGVwCiAJCQlKc29uSXNQcmVkaWNhdGUgKnByZWQ7CS8qIG9yaWdpbmFsIGV4cHJlc3Npb24g bm9kZSAqLwogCQl9CQkJaXNfanNvbjsKIAorCQkvKiBmb3IgRUVPUF9KU09ORVhQUl9QQVRIICov CisJCXN0cnVjdAorCQl7CisJCQlzdHJ1Y3QgSnNvbkV4cHJTdGF0ZSAqanNlc3RhdGU7CisJCX0J CQlqc29uZXhwcjsKKworCQkvKiBmb3IgRUVPUF9KU09ORVhQUl9DT0VSQ0lPTiAqLworCQlzdHJ1 Y3QKKwkJeworCQkJSnNvbkNvZXJjaW9uICpjb2VyY2lvbjsKKwkJCUZtZ3JJbmZvICAgKmlucHV0 X2ZpbmZvOworCQkJT2lkCQkJdHlwaW9wYXJhbTsKKwkJCXZvaWQJICAgKmpzb25fcG9wdWxhdGVf dHlwZV9jYWNoZTsKKwkJCUVycm9yU2F2ZUNvbnRleHQgKmVzY29udGV4dDsKKwkJfQkJCWpzb25l eHByX2NvZXJjaW9uOwogCX0JCQlkOwogfSBFeHByRXZhbFN0ZXA7CiAKQEAgLTc1NSw3ICs3NzMs NiBAQCB0eXBlZGVmIHN0cnVjdCBKc29uQ29uc3RydWN0b3JFeHByU3RhdGUKIAlpbnQJCQluYXJn czsKIH0gSnNvbkNvbnN0cnVjdG9yRXhwclN0YXRlOwogCi0KIC8qIGZ1bmN0aW9ucyBpbiBleGVj RXhwci5jICovCiBleHRlcm4gdm9pZCBFeHByRXZhbFB1c2hTdGVwKEV4cHJTdGF0ZSAqZXMsIGNv bnN0IEV4cHJFdmFsU3RlcCAqcyk7CiAKQEAgLTgwOSw2ICs4MjYsMTEgQEAgZXh0ZXJuIHZvaWQg RXhlY0V2YWxYbWxFeHByKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3ApOwogZXh0 ZXJuIHZvaWQgRXhlY0V2YWxKc29uQ29uc3RydWN0b3IoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2 YWxTdGVwICpvcCwKIAkJCQkJCQkJCUV4cHJDb250ZXh0ICplY29udGV4dCk7CiBleHRlcm4gdm9p ZCBFeGVjRXZhbEpzb25Jc1ByZWRpY2F0ZShFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAg Km9wKTsKK2V4dGVybiB2b2lkIEV4ZWNFdmFsSnNvbkNvZXJjaW9uKEV4cHJTdGF0ZSAqc3RhdGUs IEV4cHJFdmFsU3RlcCAqb3AsCisJCQkJCQkJCSBFeHByQ29udGV4dCAqZWNvbnRleHQpOworZXh0 ZXJuIHZvaWQgRXhlY0V2YWxKc29uQ29lcmNpb25GaW5pc2goRXhwclN0YXRlICpzdGF0ZSwgRXhw ckV2YWxTdGVwICpvcCk7CitleHRlcm4gaW50CUV4ZWNFdmFsSnNvbkV4cHJQYXRoKEV4cHJTdGF0 ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsCisJCQkJCQkJCSBFeHByQ29udGV4dCAqZWNvbnRl eHQpOwogZXh0ZXJuIHZvaWQgRXhlY0V2YWxHcm91cGluZ0Z1bmMoRXhwclN0YXRlICpzdGF0ZSwg RXhwckV2YWxTdGVwICpvcCk7CiBleHRlcm4gdm9pZCBFeGVjRXZhbFN1YlBsYW4oRXhwclN0YXRl ICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwKIAkJCQkJCQlFeHByQ29udGV4dCAqZWNvbnRleHQp OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVk ZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCA0NDRhNWYwZmQ1Li4xOTYxZDllMGFhIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rl cy9leGVjbm9kZXMuaApAQCAtMTAwOCw2ICsxMDA4LDkzIEBAIHR5cGVkZWYgc3RydWN0IERvbWFp bkNvbnN0cmFpbnRTdGF0ZQogCUV4cHJTdGF0ZSAgKmNoZWNrX2V4cHJzdGF0ZTsJLyogY2hlY2tf ZXhwcidzIGV2YWwgc3RhdGUsIG9yIE5VTEwgKi8KIH0gRG9tYWluQ29uc3RyYWludFN0YXRlOwog CisvKgorICogSW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXRlIG9mIEpzb25QYXRoKiBldmFsdWF0 aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCBKc29uRXhwclBvc3RFdmFsU3RhdGUKK3sKKwkvKiBE aWQgSnNvblBhdGgqIGV2YWx1YXRpb24gY2F1c2UgYW4gZXJyb3I/ICovCisJTnVsbGFibGVEYXR1 bSBlcnJvcjsKKworCS8qIElzIHRoZSByZXN1bHQgb2YgSnNvblBhdGgqIGV2YWx1YXRpb24gZW1w dHk/ICovCisJTnVsbGFibGVEYXR1bSBlbXB0eTsKKworCS8qCisJICogRXhlY0V2YWxKc29uRXhw clBhdGgoKSB3aWxsIHNldCB0aGlzIHRvIHRoZSBhZGRyZXNzIG9mIHRoZSBzdGVwIHRvIHVzZQor CSAqIHRvIGNvZXJjZSB0aGUgcmVzdWx0IG9mIEpzb25QYXRoKiBldmFsdWF0aW9uIHRvIHRoZSBS RVRVUk5JTkcgdHlwZS4KKwkgKiBBbHNvIHNlZSB0aGUgZGVzY3JpcHRpb24gb2YgcG9zc2libGUg c3RlcCBhZGRyZXNzZXMgdGhhdCB0aGlzIGNvdWxkIGJlCisJICogc2V0IHRvIGluIHRoZSBkZWZp bml0aW9uIG9mIEpzb25FeHByU3RhdGUuCisJICovCisJaW50CQkJanVtcF9ldmFsX2NvZXJjaW9u OworfSBKc29uRXhwclBvc3RFdmFsU3RhdGU7CisKKy8qIFN0YXRlIGZvciBldmFsdWF0aW5nIGEg SnNvbkV4cHIsIHRvbyBiaWcgdG8gaW5saW5lICovCit0eXBlZGVmIHN0cnVjdCBKc29uRXhwclN0 YXRlCit7CisJLyogb3JpZ2luYWwgZXhwcmVzc2lvbiBub2RlICovCisJSnNvbkV4cHIgICAqanNl eHByOworCisJLyogdmFsdWUvaXNudWxsIGZvciBmb3JtYXR0ZWRfZXhwciAqLworCU51bGxhYmxl RGF0dW0gZm9ybWF0dGVkX2V4cHI7CisKKwkvKiB2YWx1ZS9pc251bGwgZm9yIHBhdGhzcGVjICov CisJTnVsbGFibGVEYXR1bSBwYXRoc3BlYzsKKworCS8qIEpzb25QYXRoVmFyaWFibGUgZW50cmll cyBmb3IgcGFzc2luZ192YWx1ZXMgKi8KKwlMaXN0CSAgICphcmdzOworCisJLyoKKwkgKiBQZXIt cm93IHJlc3VsdCBzdGF0dXMgaW5mbyBwb3B1bGF0ZWQgYnkgRXhlY0V2YWxKc29uRXhwclBhdGgo KSBhbmQKKwkgKiBFeGVjRXZhbEpzb25Db2VyY2lvbkZpbmlzaCgpLgorCSAqLworCUpzb25FeHBy UG9zdEV2YWxTdGF0ZSBwb3N0X2V2YWw7CisKKwkvKgorCSAqIEFkZHJlc3NlcyBvZiB0aGUgc3Rl cHMgdGhhdCBpbXBsZW1lbnRzIHRoZSBub24tRVJST1IgdmFyaWFudCBvZiBPTgorCSAqIEVNUFRZ IGFuZCBPTiBFUlJPUiBiZWhhdmlvcnMsIHJlc3BlY3RpdmVseS4KKwkgKi8KKwlpbnQJCQlqdW1w X2VtcHR5OworCWludAkJCWp1bXBfZXJyb3I7CisKKwkvKgorCSAqIEFkZHJlc3NlcyBvZiBzdGVw cyB0byBwZXJmb3JtIHRoZSBjb2VyY2lvbiBvZiB0aGUgSnNvblBhdGgqIHJlc3VsdAorCSAqIHZh bHVlIHRvIHRoZSBSRVRVUk5JTkcgdHlwZS4gIEVhY2ggYWRkcmVzcyBwb2ludHMgdG8gZWl0aGVy IDEpIGEKKwkgKiBzcGVjaWFsIEVFT1BfSlNPTkVYUFJfQ09FUkNJT04gc3RlcCB0aGF0IGhhbmRs ZXMgY29lcmNpb24gdXNpbmcgdGhlCisJICogUkVUVVJOSU5HIHR5cGUncyBpbnB1dCBmdW5jdGlv biBvciBieSB1c2luZyBqc29uX3ZpYV9wb3B1bGF0ZSgpLCBvciAyKQorCSAqIGFuIGV4cHJlc3Np b24gc3VjaCBhcyBDb2VyY2VWaWFJTy4gIEl0IG1heSBiZSAtMSBpZiBubyBjb2VyY2lvbiBpcwor CSAqIG5lY2Vzc2FyeS4KKwkgKgorCSAqIGp1bXBfZXZhbF9yZXN1bHRfY29lcmNpb24gcG9pbnRz IHRvIHRoZSBzdGVwIHRvIGV2YWx1YXRlIHRoZSBjb2VyY2lvbgorCSAqIGdpdmVuIGluIEpzb25F eHByLnJlc3VsdF9jb2VyY2lvbi4KKwkgKi8KKwlpbnQJCQlqdW1wX2V2YWxfcmVzdWx0X2NvZXJj aW9uOworCisJLyogSnVtcCB0byBlbmQgdG8gc2tpcCBhbGwgdGhlIHN0ZXBzIGFmdGVyIEVFT1Bf SlNPTkVYUFJfUEFUSC4gKi8KKwlpbnQJCQlqdW1wX2VuZDsKKworCS8qCisJICogZXZhbF9pdGVt X2NvZXJjaW9uX2p1bXBzIGlzIGFuIGFycmF5IG9mIG51bV9pdGVtX2NvZXJjaW9ucyBlbGVtZW50 cworCSAqIGVhY2ggY29udGFpbmluZyBhIHN0ZXAgYWRkcmVzcyB0byBldmFsdWF0ZSB0aGUgY29l cmNpb24gZnJvbSBhIHZhbHVlIG9mCisJICogdGhlIGdpdmVuIEpzb25JdGVtVHlwZSB0byB0aGUg UkVUVVJOSU5HIHR5cGUsIG9yIC0xIGlmIG5vIGNvZXJjaW9uIGlzCisJICogbmVjZXNzYXJ5LiAg aXRlbV9jb2VyY2lvbl92aWFfZXhwciBpcyBhbiBhcnJheSBvZiBib29sZWFuIGZsYWdzIG9mIHRo ZQorCSAqIHNhbWUgbGVuZ3RoIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgZWFjaCB2YWxpZCBzdGVw IGFkZHJlc3MgaW4gdGhlCisJICogZXZhbF9pdGVtX2NvZXJjaW9uX2p1bXBzIGFycmF5IHBvaW50 cyB0byBhbiBleHByZXNzaW9uIG9yIGEKKwkgKiBFRU9QX0pTT05FWFBSX0NPRVJDSU9OIHN0ZXAu ICBFeGVjRXZhbEpzb25FeHByUGF0aCgpIHdpbGwgY2F1c2UgYW4KKwkgKiBlcnJvciBpZiBpdCdz IHRoZSBsYXR0ZXIsIGJlY2F1c2UgdGhhdCBtb2RlIG9mIGNvZXJjaW9uIGlzIG5vdAorCSAqIHN1 cHBvcnRlZCBmb3IgYWxsIEpzb25JdGVtVHlwZXMuCisJICovCisJaW50CQkJbnVtX2l0ZW1fY29l cmNpb25zOworCWludAkJICAgKmV2YWxfaXRlbV9jb2VyY2lvbl9qdW1wczsKKwlib29sCSAgICpp dGVtX2NvZXJjaW9uX3ZpYV9leHByOworCisJLyoKKwkgKiBGb3IgcGFzc2luZyB3aGVuIGluaXRp YWxpemluZyBhIEVFT1BfSU9DT0VSQ0VfU0FGRSBzdGVwIGZvciBhbnkKKwkgKiBDb2VyY2VWaWFJ TyBub2RlcyBpbiB0aGUgZXhwcmVzc2lvbiB0aGF0IG11c3QgYmUgZXZhbHVhdGVkIGluIGFuCisJ ICogZXJyb3Itc2FmZSBtYW5uZXIuCisJICovCisJRXJyb3JTYXZlQ29udGV4dCBlc2NvbnRleHQ7 Cit9IEpzb25FeHByU3RhdGU7CisKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJCQkJIEV4ZWN1dG9yIFN0YXRl IFRyZWVzCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaCBiL3NyYy9p bmNsdWRlL25vZGVzL21ha2VmdW5jcy5oCmluZGV4IDJkYzc5NjQ4ZDIuLjkxZDk1ZmM1MmIgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL21ha2VmdW5jcy5oCisrKyBiL3NyYy9pbmNsdWRl L25vZGVzL21ha2VmdW5jcy5oCkBAIC0xMTIsNiArMTEyLDggQEAgZXh0ZXJuIEpzb25Gb3JtYXQg Km1ha2VKc29uRm9ybWF0KEpzb25Gb3JtYXRUeXBlIHR5cGUsIEpzb25FbmNvZGluZyBlbmNvZGlu ZywKIAkJCQkJCQkJICBpbnQgbG9jYXRpb24pOwogZXh0ZXJuIEpzb25WYWx1ZUV4cHIgKm1ha2VK c29uVmFsdWVFeHByKEV4cHIgKnJhd19leHByLCBFeHByICpmb3JtYXR0ZWRfZXhwciwKIAkJCQkJ CQkJCQlKc29uRm9ybWF0ICpmb3JtYXQpOworZXh0ZXJuIEpzb25CZWhhdmlvciAqbWFrZUpzb25C ZWhhdmlvcihKc29uQmVoYXZpb3JUeXBlIHR5cGUsIE5vZGUgKmV4cHIsCisJCQkJCQkJCQkgIEpz b25Db2VyY2lvbiAqY29lcmNpb24sIGludCBsb2NhdGlvbik7CiBleHRlcm4gTm9kZSAqbWFrZUpz b25LZXlWYWx1ZShOb2RlICprZXksIE5vZGUgKnZhbHVlKTsKIGV4dGVybiBOb2RlICptYWtlSnNv bklzUHJlZGljYXRlKE5vZGUgKmV4cHIsIEpzb25Gb3JtYXQgKmZvcm1hdCwKIAkJCQkJCQkJIEpz b25WYWx1ZVR5cGUgaXRlbV90eXBlLCBib29sIHVuaXF1ZV9rZXlzLApkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rl cy5oCmluZGV4IGIzMTgxZjM0YWUuLmJmY2RlMTY3YTYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L25vZGVzL3BhcnNlbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgK QEAgLTE2OTIsNiArMTY5MiwxMiBAQCB0eXBlZGVmIHN0cnVjdCBUcmlnZ2VyVHJhbnNpdGlvbgog CiAvKiBOb2RlcyBmb3IgU1FML0pTT04gc3VwcG9ydCAqLwogCisvKgorICogSnNvblBhdGhTcGVj IC0KKyAqCQlyZXByZXNlbnRhdGlvbiBvZiBKU09OIHBhdGggY29uc3RhbnQKKyAqLwordHlwZWRl ZiBjaGFyICpKc29uUGF0aFNwZWM7CisKIC8qCiAgKiBKc29uT3V0cHV0IC0KICAqCQlyZXByZXNl bnRhdGlvbiBvZiBKU09OIG91dHB1dCBjbGF1c2UgKFJFVFVSTklORyB0eXBlIFtGT1JNQVQgZm9y bWF0XSkKQEAgLTE3MDMsNiArMTcwOSw0NyBAQCB0eXBlZGVmIHN0cnVjdCBKc29uT3V0cHV0CiAJ SnNvblJldHVybmluZyAqcmV0dXJuaW5nOwkvKiBSRVRVUk5JTkcgRk9STUFUIGNsYXVzZSBhbmQg dHlwZSBPaWRzICovCiB9IEpzb25PdXRwdXQ7CiAKKy8qCisgKiBKc29uQXJndW1lbnQgLQorICoJ CXJlcHJlc2VudGF0aW9uIG9mIGFyZ3VtZW50IGZyb20gSlNPTiBQQVNTSU5HIGNsYXVzZQorICov Cit0eXBlZGVmIHN0cnVjdCBKc29uQXJndW1lbnQKK3sKKwlOb2RlVGFnCQl0eXBlOworCUpzb25W YWx1ZUV4cHIgKnZhbDsJCQkvKiBhcmd1bWVudCB2YWx1ZSBleHByZXNzaW9uICovCisJY2hhcgkg ICAqbmFtZTsJCQkvKiBhcmd1bWVudCBuYW1lICovCit9IEpzb25Bcmd1bWVudDsKKworLyoKKyAq IEpzb25RdW90ZXMgLQorICoJCXJlcHJlc2VudGF0aW9uIG9mIFtLRUVQfE9NSVRdIFFVT1RFUyBj bGF1c2UgZm9yIEpTT05fUVVFUlkoKQorICovCit0eXBlZGVmIGVudW0gSnNvblF1b3Rlcworewor CUpTX1FVT1RFU19VTlNQRUMsCQkJLyogdW5zcGVjaWZpZWQgKi8KKwlKU19RVU9URVNfS0VFUCwJ CQkJLyogS0VFUCBRVU9URVMgKi8KKwlKU19RVU9URVNfT01JVCwJCQkJLyogT01JVCBRVU9URVMg Ki8KK30gSnNvblF1b3RlczsKKworLyoKKyAqIEpzb25GdW5jRXhwciAtCisgKgkJdW50cmFuc2Zv cm1lZCByZXByZXNlbnRhdGlvbiBvZiBKU09OIGZ1bmN0aW9uIGV4cHJlc3Npb25zCisgKi8KK3R5 cGVkZWYgc3RydWN0IEpzb25GdW5jRXhwcgoreworCU5vZGVUYWcJCXR5cGU7CisJSnNvbkV4cHJP cAlvcDsJCQkJLyogZXhwcmVzc2lvbiB0eXBlICovCisJSnNvblZhbHVlRXhwciAqY29udGV4dF9p dGVtOwkvKiBjb250ZXh0IGl0ZW0gZXhwcmVzc2lvbiAqLworCU5vZGUJICAgKnBhdGhzcGVjOwkJ LyogSlNPTiBwYXRoIHNwZWNpZmljYXRpb24gZXhwcmVzc2lvbiAqLworCUxpc3QJICAgKnBhc3Np bmc7CQkvKiBsaXN0IG9mIFBBU1NJTkcgY2xhdXNlIGFyZ3VtZW50cywgaWYgYW55ICovCisJSnNv bk91dHB1dCAqb3V0cHV0OwkJCS8qIG91dHB1dCBjbGF1c2UsIGlmIHNwZWNpZmllZCAqLworCUpz b25CZWhhdmlvciAqb25fZW1wdHk7CQkvKiBPTiBFTVBUWSBiZWhhdmlvciAqLworCUpzb25CZWhh dmlvciAqb25fZXJyb3I7CQkvKiBPTiBFUlJPUiBiZWhhdmlvciAqLworCUpzb25XcmFwcGVyIHdy YXBwZXI7CQkvKiBhcnJheSB3cmFwcGVyIGJlaGF2aW9yIChKU09OX1FVRVJZIG9ubHkpICovCisJ SnNvblF1b3RlcwlxdW90ZXM7CQkJLyogb21pdCBvciBrZWVwIHF1b3Rlcz8gKEpTT05fUVVFUlkg b25seSkgKi8KKwlpbnQJCQlsb2NhdGlvbjsJCS8qIHRva2VuIGxvY2F0aW9uLCBvciAtMSBpZiB1 bmtub3duICovCit9IEpzb25GdW5jRXhwcjsKKwogLyoKICAqIEpzb25LZXlWYWx1ZSAtCiAgKgkJ dW50cmFuc2Zvcm1lZCByZXByZXNlbnRhdGlvbiBvZiBKU09OIG9iamVjdCBrZXktdmFsdWUgcGFp ciBmb3IKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oIGIvc3JjL2lu Y2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKaW5kZXggNGExNTQ2MDZkMi4uOGVkYWQ0NzkwYiAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUv bm9kZXMvcHJpbW5vZGVzLmgKQEAgLTE1NTIsNiArMTU1MiwxNyBAQCB0eXBlZGVmIHN0cnVjdCBY bWxFeHByCiAJaW50CQkJbG9jYXRpb247CiB9IFhtbEV4cHI7CiAKKy8qCisgKiBKc29uRXhwck9w IC0KKyAqCQllbnVtZXJhdGlvbiBvZiBKU09OIGZ1bmN0aW9ucyB1c2luZyBKU09OIHBhdGgKKyAq LwordHlwZWRlZiBlbnVtIEpzb25FeHByT3AKK3sKKwlKU09OX1ZBTFVFX09QLAkJCQkvKiBKU09O X1ZBTFVFKCkgKi8KKwlKU09OX1FVRVJZX09QLAkJCQkvKiBKU09OX1FVRVJZKCkgKi8KKwlKU09O X0VYSVNUU19PUCwJCQkJLyogSlNPTl9FWElTVFMoKSAqLworfSBKc29uRXhwck9wOworCiAvKgog ICogSnNvbkVuY29kaW5nIC0KICAqCQlyZXByZXNlbnRhdGlvbiBvZiBKU09OIEVOQ09ESU5HIGNs YXVzZQpAQCAtMTY3MCw2ICsxNjgxLDE3MiBAQCB0eXBlZGVmIHN0cnVjdCBKc29uSXNQcmVkaWNh dGUKIAlpbnQJCQlsb2NhdGlvbjsJCS8qIHRva2VuIGxvY2F0aW9uLCBvciAtMSBpZiB1bmtub3du ICovCiB9IEpzb25Jc1ByZWRpY2F0ZTsKIAorLyogTm9kZXMgdXNlZCBpbiBTUUwvSlNPTiBxdWVy eSBmdW5jdGlvbnMgKi8KKworLyoKKyAqIEpzb25XcmFwcGVyIC0KKyAqCQlyZXByZXNlbnRhdGlv biBvZiBXUkFQUEVSIGNsYXVzZSBmb3IgSlNPTl9RVUVSWSgpCisgKi8KK3R5cGVkZWYgZW51bSBK c29uV3JhcHBlcgoreworCUpTV19VTlNQRUMsCisJSlNXX05PTkUsCisJSlNXX0NPTkRJVElPTkFM LAorCUpTV19VTkNPTkRJVElPTkFMLAorfSBKc29uV3JhcHBlcjsKKworLyoKKyAqIEpzb25CZWhh dmlvclR5cGUgLQorICoJCWVudW1lcmF0aW9uIG9mIGJlaGF2aW9yIHR5cGVzIHVzZWQgaW4gU1FM L0pTT04gT04gRVJST1IvRU1QVFkgY2xhdXNlcworICoKKyAqIAkJSWYgZW51bSBtZW1iZXJzIGFy ZSByZW9yZGVyZWQsIGdldF9qc29uX2JlaGF2aW9yKCkgZnJvbSBydWxldXRpbHMuYworICogCQlt dXN0IGJlIHVwZGF0ZWQgYWNjb3JkaW5nbHkuCisgKi8KK3R5cGVkZWYgZW51bSBKc29uQmVoYXZp b3JUeXBlCit7CisJSlNPTl9CRUhBVklPUl9OVUxMID0gMCwKKwlKU09OX0JFSEFWSU9SX0VSUk9S LAorCUpTT05fQkVIQVZJT1JfRU1QVFksCisJSlNPTl9CRUhBVklPUl9UUlVFLAorCUpTT05fQkVI QVZJT1JfRkFMU0UsCisJSlNPTl9CRUhBVklPUl9VTktOT1dOLAorCUpTT05fQkVIQVZJT1JfRU1Q VFlfQVJSQVksCisJSlNPTl9CRUhBVklPUl9FTVBUWV9PQkpFQ1QsCisJSlNPTl9CRUhBVklPUl9E RUZBVUxULAorfSBKc29uQmVoYXZpb3JUeXBlOworCisvKgorICogSnNvbkNvZXJjaW9uCisgKgkJ SW5mb3JtYXRpb24gYWJvdXQgY29lcmNpbmcgYSBTUUwvSlNPTiB2YWx1ZSB0byB0aGUgc3BlY2lm aWVkCisgKgkJdHlwZSBhdCBydW50aW1lIHVzaW5nIGpzb25fcG9wdWxhdGVfdHlwZSgpIG9yIGJ5 IGNhbGxpbmcgdGhlIHR5cGUncworICoJCWlucHV0IGZ1bnRpb24uCisgKgorICogQSBub2RlIG9m IHRoaXMgdHlwZSBpcyBjcmVhdGVkIGlmIHRoZSBwYXJzZXIgY2Fubm90IGZpbmQgYSBjYXN0IGV4 cHJlc3Npb24KKyAqIHVzaW5nIGNvZXJjZV90eXBlKCkuCisgKi8KK3R5cGVkZWYgc3RydWN0IEpz b25Db2VyY2lvbgoreworCU5vZGVUYWcJCXR5cGU7CisKKwlPaWQJCQl0YXJnZXR0eXBlOworCWlu dDMyCQl0YXJnZXR0eXBtb2Q7CisJYm9vbAkJb21pdF9xdW90ZXM7CS8qIG9taXQgcXVvdGVzIGZy b20gc2NhbGFyIG91dHB1dCBzdHJpbmdzPyAqLworCU9pZAkJCWNvbGxhdGlvbjsJCS8qIGNvbGxh dGlvbiBmb3IgY29lcmNpb24gdmlhIEkvTyBvciBwb3B1bGF0ZSAqLworfSBKc29uQ29lcmNpb247 CisKKy8qCisgKiBKc29uSXRlbVR5cGUKKyAqCQlQb3NzaWJsZSB0eXBlcyBmb3Igc2NhbGFyIHZh bHVlcyByZXR1cm5lZCBieSBKU09OX1ZBTFVFKCkKKyAqCisgKiBUaGUgY29tbWVudCBuZXh0IHRv IGVhY2ggaXRlbSB0eXBlIG1lbnRpb25zIHRoZSBjb3JyZXNwb25kaW5nCisgKiBKc29uYlZhbHVl LmpidlR5cGUuCisgKi8KK3R5cGVkZWYgZW51bSBKc29uSXRlbVR5cGUKK3sKKwlKc29uSXRlbVR5 cGVOdWxsLAkJCS8qIGpidk51bGwgKi8KKwlKc29uSXRlbVR5cGVTdHJpbmcsCQkJLyogamJ2U3Ry aW5nICovCisJSnNvbkl0ZW1UeXBlTnVtZXJpYywJCS8qIGpidk51bWVyaWMgKi8KKwlKc29uSXRl bVR5cGVCb29sZWFuLAkJLyogamJ2Qm9vbCAqLworCUpzb25JdGVtVHlwZURhdGUsCQkJLyogamJ2 RGF0ZXRpbWU6IERBVEVPSUQgKi8KKwlKc29uSXRlbVR5cGVUaW1lLAkJCS8qIGpidkRhdGV0aW1l OiBUSU1FT0lEICovCisJSnNvbkl0ZW1UeXBlVGltZXR6LAkJCS8qIGpidkRhdGV0aW1lOiBUSU1F VFpPSUQgKi8KKwlKc29uSXRlbVR5cGVUaW1lc3RhbXAsCQkvKiBqYnZEYXRldGltZTogVElNRVNU QU1QT0lEICovCisJSnNvbkl0ZW1UeXBlVGltZXN0YW1wdHosCS8qIGpidkRhdGV0aW1lOiBUSU1F U1RBTVBUWk9JRCAqLworCUpzb25JdGVtVHlwZUNvbXBvc2l0ZSwJCS8qIGpidkFycmF5LCBqYnZP YmplY3QsIGpidkJpbmFyeSAqLworCUpzb25JdGVtVHlwZUludmFsaWQsCit9IEpzb25JdGVtVHlw ZTsKKworLyoKKyAqIEpzb25JdGVtQ29lcmNpb24KKyAqCQlDb2VyY2lvbiBleHByZXNzaW9uIGZv ciB0aGUgZ2l2ZW4gSnNvbkl0ZW1UeXBlCisgKgorICogSWYgbm90IE5VTEwsICdjb2VyY2lvbicg Z2l2ZW4gdGhlIGV4cHJlc3Npb24gbm9kZSB0byBjb252ZXJ0IGEgc2NhbGFyIHZhbHVlCisgKiBl eHRyYWN0ZWQgZnJvbSBhIEpzb25iVmFsdWUgb2YgdGhlIGdpdmVuIHR5cGUgdG8gdGhlIHRhcmdl dCB0eXBlIGdpdmVuIGJ5CisgKiBKc29uRXhwci5yZXR1cm5pbmcuICBOVUxMIG1lYW5zIHRoZSBj b2VyY2lvbiBpcyB1bm5lY2Vzc2FyeS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvbkl0ZW1Db2Vy Y2lvbgoreworCU5vZGVUYWcJCXR5cGU7CisKKwlKc29uSXRlbVR5cGUgaXRlbV90eXBlOworCU5v ZGUJICAgKmNvZXJjaW9uOworfSBKc29uSXRlbUNvZXJjaW9uOworCisvKgorICogSnNvbkJlaGF2 aW9yCisgKgkJSW5mb3JtYXRpb24gYWJvdXQgT04gRVJST1IgLyBPTiBFTVBUWSBiZWhhdmlvcnMg b2YgSlNPTl9WQUxVRSgpLAorICoJCUpTT05fUVVFUlkoKSwgYW5kIEpTT05fRVhJU1RTKCkKKyAq CisgKiAnZXhwcicgaXMgdGhlIGV4cHJlc3Npb24gdG8gZW1pdCB3aGVuIGEgZ2l2ZW4gYmVoYXZp b3IgKEVNUFRZIG9yIEVSUk9SKQorICogb2NjdXJzIG9uIGV2YWx1YXRpbmcgdGhlIFNRTC9KU09O IHF1ZXJ5IGZ1bmN0aW9uLiAgJ2NvZXJjaW9uJyBpcyBzZXQKKyAqIGlmICdleHByJyBpc24ndCBh bHJlYWR5IG9mIHRoZSBleHBlY3RlZCB0YXJnZXQgdHlwZSBnaXZlbiBieQorICogSnNvbkV4cHIu cmV0dXJuaW5nLgorICovCit0eXBlZGVmIHN0cnVjdCBKc29uQmVoYXZpb3IKK3sKKwlOb2RlVGFn CQl0eXBlOworCisJSnNvbkJlaGF2aW9yVHlwZSBidHlwZTsKKwlOb2RlCSAgICpleHByOworCUpz b25Db2VyY2lvbiAqY29lcmNpb247CQkvKiB0byBjb2VyY2UgYmVoYXZpb3IgZXhwcmVzc2lvbiB3 aGVuIHRoZXJlIGlzCisJCQkJCQkJCSAqIG5vIGNhc3QgdG8gdGhlIHRhcmdldCB0eXBlICovCisJ aW50CQkJbG9jYXRpb247CQkvKiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEgaWYgdW5rbm93biAqLwor fSBKc29uQmVoYXZpb3I7CisKKy8qCisgKiBKc29uRXhwciAtCisgKgkJVHJhbnNmb3JtZWQgcmVw cmVzZW50YXRpb24gb2YgSlNPTl9WQUxVRSgpLCBKU09OX1FVRVJZKCksIGFuZAorICoJCUpTT05f RVhJU1RTKCkKKyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvbkV4cHIKK3sKKwlFeHByCQl4cHI7CisK KwkvKiBKU09OXyogZnVuY3Rpb24gaWRlbnRpZmllciAqLworCUpzb25FeHByT3AJb3A7CisKKwkv KiBqc29uKGIpLXZhbHVlZCBleHByZXNzaW9uIHRvIHF1ZXJ5ICovCisJTm9kZQkgICAqZm9ybWF0 dGVkX2V4cHI7CisKKwkvKiBGb3JtYXQgb2YgdGhlIGFib3ZlIGV4cHJlc3Npb24gbmVlZGVkIGJ5 IHJ1bGV1dGlscy5jICovCisJSnNvbkZvcm1hdCAqZm9ybWF0OworCisJLyoganNvcGF0aC12YWx1 ZWQgZXhwcmVzc2lvbiBjb250YWluaW5nIHRoZSBxdWVyeSBwYXR0ZXJuICovCisJTm9kZQkgICAq cGF0aF9zcGVjOworCisJLyogRXhwZWN0ZWQgdHlwZS9mb3JtYXQgb2YgdGhlIG91dHB1dC4gKi8K KwlKc29uUmV0dXJuaW5nICpyZXR1cm5pbmc7CisKKwkvKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUg UEFTU0lORyBhcmd1bWVudCBleHByZXNzaW9ucyAqLworCUxpc3QJICAgKnBhc3NpbmdfbmFtZXM7 CisJTGlzdAkgICAqcGFzc2luZ192YWx1ZXM7CisKKwkvKiBVc2Utc3BlY2lmaWVkIG9yIGRlZmF1 bHQgT04gRU1QVFkgYW5kIE9OIEVSUk9SIGJlaGF2aW9ycyAqLworCUpzb25CZWhhdmlvciAqb25f ZW1wdHk7CisJSnNvbkJlaGF2aW9yICpvbl9lcnJvcjsKKworCS8qCisJICogRXhwcmVzc2lvbiB0 byBjb252ZXJ0IHRoZSByZXN1bHQgb2YgSlNPTl8qIGZ1bmN0aW9uIHRvIHRoZSBSRVRVUk5JTkcK KwkgKiB0eXBlCisJICovCisJTm9kZQkgICAqcmVzdWx0X2NvZXJjaW9uOworCisJLyoKKwkgKiBM aXN0IG9mIGV4cHJlc3Npb25zIGZvciBjb2VyY2luZyBKU09OX1ZBTFVFKCkgcmVzdWx0IHZhbHVl cywgY29udGFpbmluZworCSAqIG9uZSBlbGVtZW50IGZvciBldmVyeSBKc29uSXRlbVR5cGUuCisJ ICovCisJTGlzdAkgICAqaXRlbV9jb2VyY2lvbnM7CisKKwkvKiBXUkFQUEVSIHNwZWNpZmljYXRp b24gZm9yIEpTT05fUVVFUlkgKi8KKwlKc29uV3JhcHBlciB3cmFwcGVyOworCisJLyogS0VFUCBv ciBPTUlUIFFVT1RFUyBmb3Igc2luZ2xldG9uIHNjYWxhcnMgcmV0dXJuZWQgYnkgSlNPTl9RVUVS WSgpICovCisJYm9vbAkJb21pdF9xdW90ZXM7CisKKwkvKiBPcmlnaW5hbCBKc29uRnVuY0V4cHIn cyBsb2NhdGlvbiAqLworCWludAkJCWxvY2F0aW9uOworfSBKc29uRXhwcjsKKwogLyogLS0tLS0t LS0tLS0tLS0tLQogICogTnVsbFRlc3QKICAqCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wYXJz ZXIva3dsaXN0LmggYi9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmgKaW5kZXggMjMzMWFjYWMw OS4uOTRlMWNiNGRjZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oCisr KyBiL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaApAQCAtOTMsNiArOTMsNyBAQCBQR19LRVlX T1JEKCJjb21taXQiLCBDT01NSVQsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBH X0tFWVdPUkQoImNvbW1pdHRlZCIsIENPTU1JVFRFRCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJF X0xBQkVMKQogUEdfS0VZV09SRCgiY29tcHJlc3Npb24iLCBDT01QUkVTU0lPTiwgVU5SRVNFUlZF RF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiY29uY3VycmVudGx5IiwgQ09OQ1VS UkVOVExZLCBUWVBFX0ZVTkNfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgi Y29uZGl0aW9uYWwiLCBDT05ESVRJT05BTCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVM KQogUEdfS0VZV09SRCgiY29uZmlndXJhdGlvbiIsIENPTkZJR1VSQVRJT04sIFVOUkVTRVJWRURf S0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImNvbmZsaWN0IiwgQ09ORkxJQ1QsIFVO UkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImNvbm5lY3Rpb24iLCBD T05ORUNUSU9OLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCkBAIC0xNDcsMTEgKzE0 OCwxMyBAQCBQR19LRVlXT1JEKCJkb3VibGUiLCBET1VCTEVfUCwgVU5SRVNFUlZFRF9LRVlXT1JE LCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiZHJvcCIsIERST1AsIFVOUkVTRVJWRURfS0VZV09S RCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImVhY2giLCBFQUNILCBVTlJFU0VSVkVEX0tFWVdP UkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJlbHNlIiwgRUxTRSwgUkVTRVJWRURfS0VZV09S RCwgQkFSRV9MQUJFTCkKK1BHX0tFWVdPUkQoImVtcHR5IiwgRU1QVFlfUCwgVU5SRVNFUlZFRF9L RVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiZW5hYmxlIiwgRU5BQkxFX1AsIFVOUkVT RVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImVuY29kaW5nIiwgRU5DT0RJ TkcsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImVuY3J5cHRl ZCIsIEVOQ1JZUFRFRCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09S RCgiZW5kIiwgRU5EX1AsIFJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JE KCJlbnVtIiwgRU5VTV9QLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlX T1JEKCJlcnJvciIsIEVSUk9SX1AsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBH X0tFWVdPUkQoImVzY2FwZSIsIEVTQ0FQRSwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVM KQogUEdfS0VZV09SRCgiZXZlbnQiLCBFVkVOVCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xB QkVMKQogUEdfS0VZV09SRCgiZXhjZXB0IiwgRVhDRVBULCBSRVNFUlZFRF9LRVlXT1JELCBBU19M QUJFTCkKQEAgLTIzMywxMCArMjM2LDE0IEBAIFBHX0tFWVdPUkQoImpvaW4iLCBKT0lOLCBUWVBF X0ZVTkNfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgianNvbiIsIEpTT04s IENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJqc29uX2FycmF5Iiwg SlNPTl9BUlJBWSwgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImpz b25fYXJyYXlhZ2ciLCBKU09OX0FSUkFZQUdHLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVM KQorUEdfS0VZV09SRCgianNvbl9leGlzdHMiLCBKU09OX0VYSVNUUywgQ09MX05BTUVfS0VZV09S RCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImpzb25fb2JqZWN0IiwgSlNPTl9PQkpFQ1QsIENP TF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJqc29uX29iamVjdGFnZyIs IEpTT05fT0JKRUNUQUdHLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09S RCgianNvbl9xdWVyeSIsIEpTT05fUVVFUlksIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwp CiBQR19LRVlXT1JEKCJqc29uX3NjYWxhciIsIEpTT05fU0NBTEFSLCBDT0xfTkFNRV9LRVlXT1JE LCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgianNvbl9zZXJpYWxpemUiLCBKU09OX1NFUklBTEla RSwgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKK1BHX0tFWVdPUkQoImpzb25fdmFsdWUi LCBKU09OX1ZBTFVFLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgi a2VlcCIsIEtFRVAsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQo ImtleSIsIEtFWSwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgi a2V5cyIsIEtFWVMsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQo ImxhYmVsIiwgTEFCRUwsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKQEAgLTMwMiw2 ICszMDksNyBAQCBQR19LRVlXT1JEKCJvZmYiLCBPRkYsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFS RV9MQUJFTCkKIFBHX0tFWVdPUkQoIm9mZnNldCIsIE9GRlNFVCwgUkVTRVJWRURfS0VZV09SRCwg QVNfTEFCRUwpCiBQR19LRVlXT1JEKCJvaWRzIiwgT0lEUywgVU5SRVNFUlZFRF9LRVlXT1JELCBC QVJFX0xBQkVMKQogUEdfS0VZV09SRCgib2xkIiwgT0xELCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJB UkVfTEFCRUwpCitQR19LRVlXT1JEKCJvbWl0IiwgT01JVCwgVU5SRVNFUlZFRF9LRVlXT1JELCBC QVJFX0xBQkVMKQogUEdfS0VZV09SRCgib24iLCBPTiwgUkVTRVJWRURfS0VZV09SRCwgQVNfTEFC RUwpCiBQR19LRVlXT1JEKCJvbmx5IiwgT05MWSwgUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJF TCkKIFBHX0tFWVdPUkQoIm9wZXJhdG9yIiwgT1BFUkFUT1IsIFVOUkVTRVJWRURfS0VZV09SRCwg QkFSRV9MQUJFTCkKQEAgLTM0NCw2ICszNTIsNyBAQCBQR19LRVlXT1JEKCJwcm9jZWR1cmVzIiwg UFJPQ0VEVVJFUywgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgi cHJvZ3JhbSIsIFBST0dSQU0sIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tF WVdPUkQoInB1YmxpY2F0aW9uIiwgUFVCTElDQVRJT04sIFVOUkVTRVJWRURfS0VZV09SRCwgQkFS RV9MQUJFTCkKIFBHX0tFWVdPUkQoInF1b3RlIiwgUVVPVEUsIFVOUkVTRVJWRURfS0VZV09SRCwg QkFSRV9MQUJFTCkKK1BHX0tFWVdPUkQoInF1b3RlcyIsIFFVT1RFUywgVU5SRVNFUlZFRF9LRVlX T1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgicmFuZ2UiLCBSQU5HRSwgVU5SRVNFUlZFRF9L RVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgicmVhZCIsIFJFQUQsIFVOUkVTRVJWRURf S0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInJlYWwiLCBSRUFMLCBDT0xfTkFNRV9L RVlXT1JELCBCQVJFX0xBQkVMKQpAQCAtNDE0LDYgKzQyMyw3IEBAIFBHX0tFWVdPUkQoInN0ZG91 dCIsIFNURE9VVCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgi c3RvcmFnZSIsIFNUT1JBR0UsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tF WVdPUkQoInN0b3JlZCIsIFNUT1JFRCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQog UEdfS0VZV09SRCgic3RyaWN0IiwgU1RSSUNUX1AsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9M QUJFTCkKK1BHX0tFWVdPUkQoInN0cmluZyIsIFNUUklOR19QLCBVTlJFU0VSVkVEX0tFWVdPUkQs IEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJzdHJpcCIsIFNUUklQX1AsIFVOUkVTRVJWRURfS0VZ V09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInN1YnNjcmlwdGlvbiIsIFNVQlNDUklQVElP TiwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgic3Vic3RyaW5n IiwgU1VCU1RSSU5HLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQpAQCAtNDQ5LDYgKzQ1 OSw3IEBAIFBHX0tFWVdPUkQoInR5cGVzIiwgVFlQRVNfUCwgVU5SRVNFUlZFRF9LRVlXT1JELCBC QVJFX0xBQkVMKQogUEdfS0VZV09SRCgidWVzY2FwZSIsIFVFU0NBUEUsIFVOUkVTRVJWRURfS0VZ V09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInVuYm91bmRlZCIsIFVOQk9VTkRFRCwgVU5S RVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgidW5jb21taXR0ZWQiLCBV TkNPTU1JVFRFRCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgi dW5jb25kaXRpb25hbCIsIFVOQ09ORElUSU9OQUwsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9M QUJFTCkKIFBHX0tFWVdPUkQoInVuZW5jcnlwdGVkIiwgVU5FTkNSWVBURUQsIFVOUkVTRVJWRURf S0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInVuaW9uIiwgVU5JT04sIFJFU0VSVkVE X0tFWVdPUkQsIEFTX0xBQkVMKQogUEdfS0VZV09SRCgidW5pcXVlIiwgVU5JUVVFLCBSRVNFUlZF RF9LRVlXT1JELCBCQVJFX0xBQkVMKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvZm9y bWF0dGluZy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvZm9ybWF0dGluZy5oCmluZGV4IDdlYTFhNzBm NzEuLmNkZTAzMDQxNGUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2Zvcm1hdHRpbmcu aAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9mb3JtYXR0aW5nLmgKQEAgLTI5LDUgKzI5LDYgQEAg ZXh0ZXJuIGNoYXIgKmFzY19pbml0Y2FwKGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVfdCBuYnl0ZXMp OwogZXh0ZXJuIERhdHVtIHBhcnNlX2RhdGV0aW1lKHRleHQgKmRhdGVfdHh0LCB0ZXh0ICpmbXQs IE9pZCBjb2xsaWQsIGJvb2wgc3RyaWN0LAogCQkJCQkJCU9pZCAqdHlwaWQsIGludDMyICp0eXBt b2QsIGludCAqdHosCiAJCQkJCQkJc3RydWN0IE5vZGUgKmVzY29udGV4dCk7CitleHRlcm4gYm9v bCBkYXRldGltZV9mb3JtYXRfaGFzX3R6KGNvbnN0IGNoYXIgKmZtdF9zdHIpOwogCiAjZW5kaWYK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25iLmggYi9zcmMvaW5jbHVkZS91dGls cy9qc29uYi5oCmluZGV4IGUzOGRmZDQ5MDEuLmQ1ODlhY2U1YTIgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3V0aWxzL2pzb25iLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvanNvbmIuaApAQCAt NDIyLDYgKzQyMiw3IEBAIGV4dGVybiBjaGFyICpKc29uYlRvQ1N0cmluZyhTdHJpbmdJbmZvIG91 dCwgSnNvbmJDb250YWluZXIgKmluLAogCQkJCQkJCWludCBlc3RpbWF0ZWRfbGVuKTsKIGV4dGVy biBjaGFyICpKc29uYlRvQ1N0cmluZ0luZGVudChTdHJpbmdJbmZvIG91dCwgSnNvbmJDb250YWlu ZXIgKmluLAogCQkJCQkJCQkgIGludCBlc3RpbWF0ZWRfbGVuKTsKK2V4dGVybiBjaGFyICpKc29u YlVucXVvdGUoSnNvbmIgKmpiKTsKIGV4dGVybiBib29sIEpzb25iRXh0cmFjdFNjYWxhcihKc29u YkNvbnRhaW5lciAqamJjLCBKc29uYlZhbHVlICpyZXMpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKkpz b25iVHlwZU5hbWUoSnNvbmJWYWx1ZSAqdmFsKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv dXRpbHMvanNvbmZ1bmNzLmggYi9zcmMvaW5jbHVkZS91dGlscy9qc29uZnVuY3MuaAppbmRleCAz MWMxYWU0NzY3Li4xOTBlMTMyODRiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9qc29u ZnVuY3MuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9qc29uZnVuY3MuaApAQCAtMTUsNiArMTUs NyBAQAogI2RlZmluZSBKU09ORlVOQ1NfSAogCiAjaW5jbHVkZSAiY29tbW9uL2pzb25hcGkuaCIK KyNpbmNsdWRlICJub2Rlcy9ub2Rlcy5oIgogI2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCiAKIC8q CkBAIC04OCw0ICs4OSwxMCBAQCBleHRlcm4gRGF0dW0gZGF0dW1fdG9fanNvbmIoRGF0dW0gdmFs LCBKc29uVHlwZUNhdGVnb3J5IHRjYXRlZ29yeSwKIAkJCQkJCQlPaWQgb3V0ZnVuY29pZCk7CiBl eHRlcm4gRGF0dW0ganNvbmJfZnJvbV90ZXh0KHRleHQgKmpzLCBib29sIHVuaXF1ZV9rZXlzKTsK IAorZXh0ZXJuIERhdHVtIGpzb25fcG9wdWxhdGVfdHlwZShEYXR1bSBqc29uX3ZhbCwgT2lkIGpz b25fdHlwZSwKKwkJCQkJCQkJT2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QsCisJCQkJCQkJCXZvaWQg KipjYWNoZSwgTWVtb3J5Q29udGV4dCBtY3h0LAorCQkJCQkJCQlib29sICppc251bGwsCisJCQkJ CQkJCU5vZGUgKmVzY29udGV4dCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv dXRpbHMvanNvbnBhdGguaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25wYXRoLmgKaW5kZXggOWQ1 NWMyNWViYy4uODk3ZGUyMWE1MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvanNvbnBh dGguaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9qc29ucGF0aC5oCkBAIC0xNiw2ICsxNiw3IEBA CiAKICNpbmNsdWRlICJmbWdyLmgiCiAjaW5jbHVkZSAibm9kZXMvcGdfbGlzdC5oIgorI2luY2x1 ZGUgIm5vZGVzL3ByaW1ub2Rlcy5oIgogI2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCiAKIHR5cGVk ZWYgc3RydWN0CkBAIC0xOTEsNiArMTkyLDcgQEAgZXh0ZXJuIGJvb2wganNwR2V0Qm9vbChKc29u UGF0aEl0ZW0gKnYpOwogZXh0ZXJuIGNoYXIgKmpzcEdldFN0cmluZyhKc29uUGF0aEl0ZW0gKnYs IGludDMyICpsZW4pOwogZXh0ZXJuIGJvb2wganNwR2V0QXJyYXlTdWJzY3JpcHQoSnNvblBhdGhJ dGVtICp2LCBKc29uUGF0aEl0ZW0gKmZyb20sCiAJCQkJCQkJCSBKc29uUGF0aEl0ZW0gKnRvLCBp bnQgaSk7CitleHRlcm4gYm9vbCBqc3BJc011dGFibGUoSnNvblBhdGggKnBhdGgsIExpc3QgKnZh cm5hbWVzLCBMaXN0ICp2YXJleHBycyk7CiAKIGV4dGVybiBjb25zdCBjaGFyICpqc3BPcGVyYXRp b25OYW1lKEpzb25QYXRoSXRlbVR5cGUgdHlwZSk7CiAKQEAgLTI2OCw0ICsyNzAsMjYgQEAgZXh0 ZXJuIGJvb2wganNwQ29udmVydFJlZ2V4RmxhZ3ModWludDMyIHhmbGFncywgaW50ICpyZXN1bHQs CiAJCQkJCQkJCSBzdHJ1Y3QgTm9kZSAqZXNjb250ZXh0KTsKIAogCisvKgorICogRXZhbHVhdGlv biBvZiBqc29ucGF0aAorICovCisKKy8qIEV4dGVybmFsIHZhcmlhYmxlIHBhc3NlZCBpbnRvIGpz b25wYXRoLiAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvblBhdGhWYXJpYWJsZQoreworCWNoYXIJICAg Km5hbWU7CisJT2lkCQkJdHlwaWQ7CisJaW50MzIJCXR5cG1vZDsKKwlEYXR1bQkJdmFsdWU7CisJ Ym9vbAkJaXNudWxsOworfSBKc29uUGF0aFZhcmlhYmxlOworCisKKy8qIFNRTC9KU09OIGl0ZW0g Ki8KK2V4dGVybiBib29sIEpzb25QYXRoRXhpc3RzKERhdHVtIGpiLCBKc29uUGF0aCAqcGF0aCwg Ym9vbCAqZXJyb3IsIExpc3QgKnZhcnMpOworZXh0ZXJuIERhdHVtIEpzb25QYXRoUXVlcnkoRGF0 dW0gamIsIEpzb25QYXRoICpqcCwgSnNvbldyYXBwZXIgd3JhcHBlciwKKwkJCQkJCSAgIGJvb2wg KmVtcHR5LCBib29sICplcnJvciwgTGlzdCAqdmFycyk7CitleHRlcm4gSnNvbmJWYWx1ZSAqSnNv blBhdGhWYWx1ZShEYXR1bSBqYiwgSnNvblBhdGggKmpwLCBib29sICplbXB0eSwKKwkJCQkJCQkJ IGJvb2wgKmVycm9yLCBMaXN0ICp2YXJzKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvaW50 ZXJmYWNlcy9lY3BnL3ByZXByb2MvZWNwZy50cmFpbGVyIGIvc3JjL2ludGVyZmFjZXMvZWNwZy9w cmVwcm9jL2VjcGcudHJhaWxlcgppbmRleCA0MzVjMTM5ZWMyLi5iMmFhNDRmMzZkIDEwMDY0NAot LS0gYS9zcmMvaW50ZXJmYWNlcy9lY3BnL3ByZXByb2MvZWNwZy50cmFpbGVyCisrKyBiL3NyYy9p bnRlcmZhY2VzL2VjcGcvcHJlcHJvYy9lY3BnLnRyYWlsZXIKQEAgLTY1MSw2ICs2NTEsMzQgQEAg dmFyX3R5cGU6CXNpbXBsZV90eXBlCiAJCQkkJC50eXBlX2luZGV4ID0gbW1fc3RyZHVwKCItMSIp OwogCQkJJCQudHlwZV9zaXplb2YgPSBOVUxMOwogCQl9CisJCXwgU1RSSU5HX1AKKwkJeworCQkJ aWYgKElORk9STUlYX01PREUpCisJCQl7CisJCQkJLyogSW4gSW5mb3JtaXggbW9kZSwgInN0cmlu ZyIgaXMgYXV0b21hdGljYWxseSBhIHR5cGVkZWYgKi8KKwkJCQkkJC50eXBlX2VudW0gPSBFQ1BH dF9zdHJpbmc7CisJCQkJJCQudHlwZV9zdHIgPSBtbV9zdHJkdXAoImNoYXIiKTsKKwkJCQkkJC50 eXBlX2RpbWVuc2lvbiA9IG1tX3N0cmR1cCgiLTEiKTsKKwkJCQkkJC50eXBlX2luZGV4ID0gbW1f c3RyZHVwKCItMSIpOworCQkJCSQkLnR5cGVfc2l6ZW9mID0gTlVMTDsKKwkJCX0KKwkJCWVsc2UK KwkJCXsKKwkJCQkvKiBPdGhlcndpc2UsIGxlZ2FsIG9ubHkgaWYgdXNlciB0eXBlZGVmJ2VkIGl0 ICovCisJCQkJc3RydWN0IHR5cGVkZWZzICp0aGlzID0gZ2V0X3R5cGVkZWYoInN0cmluZyIsIGZh bHNlKTsKKworCQkJCSQkLnR5cGVfc3RyID0gKHRoaXMtPnR5cGUtPnR5cGVfZW51bSA9PSBFQ1BH dF92YXJjaGFyIHx8IHRoaXMtPnR5cGUtPnR5cGVfZW51bSA9PSBFQ1BHdF9ieXRlYSkgPyBFTVBU WSA6IG1tX3N0cmR1cCh0aGlzLT5uYW1lKTsKKwkJCQkkJC50eXBlX2VudW0gPSB0aGlzLT50eXBl LT50eXBlX2VudW07CisJCQkJJCQudHlwZV9kaW1lbnNpb24gPSB0aGlzLT50eXBlLT50eXBlX2Rp bWVuc2lvbjsKKwkJCQkkJC50eXBlX2luZGV4ID0gdGhpcy0+dHlwZS0+dHlwZV9pbmRleDsKKwkJ CQlpZiAodGhpcy0+dHlwZS0+dHlwZV9zaXplb2YgJiYgc3RybGVuKHRoaXMtPnR5cGUtPnR5cGVf c2l6ZW9mKSAhPSAwKQorCQkJCQkkJC50eXBlX3NpemVvZiA9IHRoaXMtPnR5cGUtPnR5cGVfc2l6 ZW9mOworCQkJCWVsc2UKKwkJCQkJJCQudHlwZV9zaXplb2YgPSBjYXRfc3RyKDMsIG1tX3N0cmR1 cCgic2l6ZW9mKCIpLCBtbV9zdHJkdXAodGhpcy0+bmFtZSksIG1tX3N0cmR1cCgiKSIpKTsKKwor CQkJCXN0cnVjdF9tZW1iZXJfbGlzdFtzdHJ1Y3RfbGV2ZWxdID0gRUNQR3N0cnVjdF9tZW1iZXJf ZHVwKHRoaXMtPnN0cnVjdF9tZW1iZXJfbGlzdCk7CisJCQl9CisJCX0KIAkJfCBJTlRFUlZBTCBl Y3BnX2ludGVydmFsCiAJCXsKIAkJCSQkLnR5cGVfZW51bSA9IEVDUEd0X2ludGVydmFsOwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zcWxqc29uX3F1ZXJ5ZnVuY3Mub3V0 IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zcWxqc29uX3F1ZXJ5ZnVuY3Mub3V0Cm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjIyMTM3Y2MzODIKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NxbGpzb25fcXVlcnlmdW5jcy5vdXQK QEAgLTAsMCArMSwxMTcyIEBACistLSBKU09OX0VYSVNUUworLS0ganNvbiBhcmd1bWVudHMgY3Vy cmVudGx5IG5vdCBzdXBwb3J0ZWQKK1NFTEVDVCBKU09OX0VYSVNUUyhOVUxMIEZPUk1BVCBKU09O LCAnJCcpOworRVJST1I6ICBKU09OX0VYSVNUUygpIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9y IHRoZSBqc29uIHR5cGUKK0xJTkUgMTogU0VMRUNUIEpTT05fRVhJU1RTKE5VTEwgRk9STUFUIEpT T04sICckJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitISU5UOiAgVHJ5IGNhc3Rp bmcgdGhlIGFyZ3VtZW50IHRvIGpzb25iCitTRUxFQ1QgSlNPTl9FWElTVFMoTlVMTDo6anNvbmIs ICckJyk7CisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVD VCBKU09OX0VYSVNUUyhqc29uYiAnW10nLCAnJCcpOworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0t LS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKEpTT05fT0JKRUNUKFJFVFVS TklORyBqc29uYiksICckJyk7CisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgdAorKDEg cm93KQorCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJCcpOworIGpzb25fZXhpc3Rz IAorLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25i ICdudWxsJywgJyQnKTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cp CisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnW10nLCAnJCcpOworIGpzb25fZXhpc3RzIAor LS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcx JywgJyQuYScpOworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIGYKKygxIHJvdykKKwor U0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJ3N0cmljdCAkLmEnKTsgLS0gRkFMU0Ugb24g ZXJyb3IKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisKK1NFTEVD VCBKU09OX0VYSVNUUyhqc29uYiAnMScsICdzdHJpY3QgJC5hJyBFUlJPUiBPTiBFUlJPUik7CitF UlJPUjogIGpzb25wYXRoIG1lbWJlciBhY2Nlc3NvciBjYW4gb25seSBiZSBhcHBsaWVkIHRvIGFu IG9iamVjdAorU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICdudWxsJywgJyQuYScpOworIGpzb25f ZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIGYKKygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RT KGpzb25iICdbXScsICckLmEnKTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyBmCiso MSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnWzEsICJhYWEiLCB7ImEiOiAxfV0n LCAnc3RyaWN0ICQuYScpOyAtLSBGQUxTRSBvbiBlcnJvcgorIGpzb25fZXhpc3RzIAorLS0tLS0t LS0tLS0tLQorIGYKKygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICdbMSwgImFh YSIsIHsiYSI6IDF9XScsICdsYXggJC5hJyk7CisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0t CisgdAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ3t9JywgJyQuYScpOwor IGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIGYKKygxIHJvdykKKworU0VMRUNUIEpTT05f RVhJU1RTKGpzb25iICd7ImIiOiAxLCAiYSI6IDJ9JywgJyQuYScpOworIGpzb25fZXhpc3RzIAor LS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcx JywgJyQuYS5iJyk7CisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgZgorKDEgcm93KQor CitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ3siYSI6IHsiYiI6IDF9fScsICckLmEuYicpOwor IGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIEpTT05f RVhJU1RTKGpzb25iICd7ImEiOiAxLCAiYiI6IDJ9JywgJyQuYS5iJyk7CisganNvbl9leGlzdHMg CistLS0tLS0tLS0tLS0tCisgZgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIg J3siYSI6IDEsICJiIjogMn0nLCAnJC4qID8gKEAgPiAkeCknIFBBU1NJTkcgMSBBUyB4KTsKKyBq c29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VY SVNUUyhqc29uYiAneyJhIjogMSwgImIiOiAyfScsICckLiogPyAoQCA+ICR4KScgUEFTU0lORyAn MScgQVMgeCk7CisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgZgorKDEgcm93KQorCitT RUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ3siYSI6IDEsICJiIjogMn0nLCAnJC4qID8gKEAgPiAk eCAmJiBAIDwgJHkpJyBQQVNTSU5HIDAgQVMgeCwgMiBBUyB5KTsKKyBqc29uX2V4aXN0cyAKKy0t LS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAneyJh IjogMSwgImIiOiAyfScsICckLiogPyAoQCA+ICR4ICYmIEAgPCAkeSknIFBBU1NJTkcgMCBBUyB4 LCAxIEFTIHkpOworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIGYKKygxIHJvdykKKwor LS0gZXh0ZW5zaW9uOiBib29sZWFuIGV4cHJlc3Npb25zCitTRUxFQ1QgSlNPTl9FWElTVFMoanNv bmIgJzEnLCAnJCA+IDInKTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyB0CisoMSBy b3cpCisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScsICckLmEgPiAyJyBFUlJPUiBPTiBF UlJPUik7CisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCistLSBK U09OX1ZBTFVFCistLSBqc29uIGFyZ3VtZW50cyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZAorU0VM RUNUIEpTT05fVkFMVUUoTlVMTCBGT1JNQVQgSlNPTiwgJyQnKTsKK0VSUk9SOiAgSlNPTl9WQUxV RSgpIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9yIHRoZSBqc29uIHR5cGUKK0xJTkUgMTogU0VM RUNUIEpTT05fVkFMVUUoTlVMTCBGT1JNQVQgSlNPTiwgJyQnKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgXgorSElOVDogIFRyeSBjYXN0aW5nIHRoZSBhcmd1bWVudCB0byBqc29uYgorU0VM RUNUIEpTT05fVkFMVUUoTlVMTDo6anNvbmIsICckJyk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0t LS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckJyk7 CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9W QUxVRShqc29uYiAnbnVsbCcsICckJyBSRVRVUk5JTkcgaW50KTsKKyBqc29uX3ZhbHVlIAorLS0t LS0tLS0tLS0tCisgICAgICAgICAgIAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29u YiAndHJ1ZScsICckJyk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIHRydWUKKygxIHJv dykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ3RydWUnLCAnJCcgUkVUVVJOSU5HIGJvb2wp OworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICcxMjMnLCAnJCcpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAx MjMKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEyMycsICckJyBSRVRVUk5J TkcgaW50KSArIDIzNDsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyAgICAgIDM1NworKDEgcm93 KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMTIzJywgJyQnIFJFVFVSTklORyB0ZXh0KTsK KyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgMTIzCisoMSByb3cpCisKKy8qIGpzb25iIGJ5 dGVhID8/PyAqLworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEyMycsICckJyBSRVRVUk5JTkcg Ynl0ZWEgRVJST1IgT04gRVJST1IpOworRVJST1I6ICBTUUwvSlNPTiBpdGVtIGNhbm5vdCBiZSBj YXN0IHRvIHRhcmdldCB0eXBlCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMS4yMycsICckJyk7 CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIDEuMjMKKygxIHJvdykKKworU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJzEuMjMnLCAnJCcgUkVUVVJOSU5HIGludCk7CisganNvbl92YWx1ZSAK Ky0tLS0tLS0tLS0tLQorICAgICAgICAgIDEKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUo anNvbmIgJyIxLjIzIicsICckJyBSRVRVUk5JTkcgbnVtZXJpYyk7CisganNvbl92YWx1ZSAKKy0t LS0tLS0tLS0tLQorICAgICAgIDEuMjMKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNv bmIgJyIxLjIzIicsICckJyBSRVRVUk5JTkcgaW50IEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAg aW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgaW50ZWdlcjogIjEuMjMiCitTRUxFQ1QgSlNP Tl9WQUxVRShqc29uYiAnImFhYSInLCAnJCcpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0K KyBhYWEKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJF VFVSTklORyB0ZXh0KTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgYWFhCisoMSByb3cp CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgY2hhcig1 KSk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIGFhYSAgCisoMSByb3cpCisKK1NFTEVD VCBKU09OX1ZBTFVFKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgY2hhcigyKSk7CisganNv bl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIGFhCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVF KGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcganNvbik7CisganNvbl92YWx1ZSAKKy0tLS0t LS0tLS0tLQorICJhYWEiCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFh IicsICckJyBSRVRVUk5JTkcganNvbmIpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAi YWFhIgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImFhYSInLCAnJCcgUkVU VVJOSU5HIGpzb24gRVJST1IgT04gRVJST1IpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0K KyAiYWFhIgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImFhYSInLCAnJCcg UkVUVVJOSU5HIGpzb25iIEVSUk9SIE9OIEVSUk9SKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0t LS0tCisgImFhYSIKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJcImFhYVwi IicsICckJyBSRVRVUk5JTkcganNvbik7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorICJc ImFhYVwiIgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIlwiYWFhXCIiJywg JyQnIFJFVFVSTklORyBqc29uYik7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorICJcImFh YVwiIgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImFhYSInLCAnJCcgUkVU VVJOSU5HIGludCk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorICAgICAgICAgICAKKygx IHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBp bnQgRVJST1IgT04gRVJST1IpOworRVJST1I6ICBpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlw ZSBpbnRlZ2VyOiAiYWFhIgorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJF VFVSTklORyBpbnQgREVGQVVMVCAxMTEgT04gRVJST1IpOworIGpzb25fdmFsdWUgCistLS0tLS0t LS0tLS0KKyAgICAgICAgMTExCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICci MTIzIicsICckJyBSRVRVUk5JTkcgaW50KSArIDIzNDsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0K KyAgICAgIDM1NworKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIjIwMTctMDIt MjAiJywgJyQnIFJFVFVSTklORyBkYXRlKSArIDk7CisgID9jb2x1bW4/ICAKKy0tLS0tLS0tLS0t LQorIDAzLTAxLTIwMTcKKygxIHJvdykKKworLS0gVGVzdCBOVUxMIGNoZWNrcyBleGVjdXRpb24g aW4gZG9tYWluIHR5cGVzCitDUkVBVEUgRE9NQUlOIHNxbGpzb25iX2ludF9ub3RfbnVsbCBBUyBp bnQgTk9UIE5VTEw7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckJyBSRVRVUk5J Tkcgc3FsanNvbmJfaW50X25vdF9udWxsKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisg ICAgICAgICAgIAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICck JyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsIEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9S OiAgZG9tYWluIHNxbGpzb25iX2ludF9ub3RfbnVsbCBkb2VzIG5vdCBhbGxvdyBudWxsIHZhbHVl cworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25i X2ludF9ub3RfbnVsbCBERUZBVUxUIDIgT04gRU1QVFkgRVJST1IgT04gRVJST1IpOworRVJST1I6 ICBkb21haW4gc3FsanNvbmJfaW50X25vdF9udWxsIGRvZXMgbm90IGFsbG93IG51bGwgdmFsdWVz CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICAnJC5hJyBSRVRVUk5JTkcgc3FsanNvbmJf aW50X25vdF9udWxsIERFRkFVTFQgMiBPTiBFTVBUWSBFUlJPUiBPTiBFUlJPUik7CisganNvbl92 YWx1ZSAKKy0tLS0tLS0tLS0tLQorICAgICAgICAgIDIKKygxIHJvdykKKworU0VMRUNUIEpTT05f VkFMVUUoanNvbmIgJzEnLCAgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCBE RUZBVUxUIE5VTEwgT04gRU1QVFkgRVJST1IgT04gRVJST1IpOworIGpzb25fdmFsdWUgCistLS0t LS0tLS0tLS0KKyAgICAgICAgICAgCisoMSByb3cpCisKK0NSRUFURSBUWVBFIHJhaW5ib3cgQVMg RU5VTSAoJ3JlZCcsICdvcmFuZ2UnLCAneWVsbG93JywgJ2dyZWVuJywgJ2JsdWUnLCAncHVycGxl Jyk7CitDUkVBVEUgRE9NQUlOIHJnYiBBUyByYWluYm93IENIRUNLIChWQUxVRSBJTiAoJ3JlZCcs ICdncmVlbicsICdibHVlJykpOworU0VMRUNUIEpTT05fVkFMVUUoJyJwdXJwbGUiJzo6anNvbmIs ICdsYXggJFsqXScgUkVUVVJOSU5HIHJnYik7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQor IAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRSgnInB1cnBsZSInOjpqc29uYiwgJ2xheCAk WypdJyBSRVRVUk5JTkcgcmdiIEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgdmFsdWUgZm9yIGRv bWFpbiByZ2IgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAicmdiX2NoZWNrIgorU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJ1tdJywgJyQnKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisg CisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdbXScsICckJyBFUlJPUiBPTiBF UlJPUik7CitFUlJPUjogIEpTT04gcGF0aCBleHByZXNzaW9uIGluIEpTT05fVkFMVUUgc2hvdWxk IHJldHVybiBzaW5nbGV0b24gc2NhbGFyIGl0ZW0KK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICd7 fScsICckJyk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxF Q1QgSlNPTl9WQUxVRShqc29uYiAne30nLCAnJCcgRVJST1IgT04gRVJST1IpOworRVJST1I6ICBK U09OIHBhdGggZXhwcmVzc2lvbiBpbiBKU09OX1ZBTFVFIHNob3VsZCByZXR1cm4gc2luZ2xldG9u IHNjYWxhciBpdGVtCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnKTsKKyBqc29u X3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpz b25iICcxJywgJ3N0cmljdCAkLmEnIEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAganNvbnBhdGgg bWVtYmVyIGFjY2Vzc29yIGNhbiBvbmx5IGJlIGFwcGxpZWQgdG8gYW4gb2JqZWN0CitTRUxFQ1Qg SlNPTl9WQUxVRShqc29uYiAnMScsICdzdHJpY3QgJC5hJyBERUZBVUxUICdlcnJvcicgT04gRVJS T1IpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyBlcnJvcgorKDEgcm93KQorCitTRUxF Q1QgSlNPTl9WQUxVRShqc29uYiAnMScsICdsYXggJC5hJyBFUlJPUiBPTiBFUlJPUik7CitFUlJP UjogIG5vIFNRTC9KU09OIGl0ZW0KK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJ2xheCAk LmEnIEVSUk9SIE9OIEVNUFRZIEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgbm8gU1FML0pTT04g aXRlbQorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnc3RyaWN0ICQuYScgREVGQVVMVCAy IE9OIEVSUk9SKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgMgorKDEgcm93KQorCitT RUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICdsYXggJC5hJyBERUZBVUxUIDIgT04gRVJST1Ip OworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAyCisoMSByb3cpCisKK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICcxJywgJ2xheCAkLmEnIERFRkFVTFQgJzInIE9OIEVSUk9SKTsKKyBqc29u X3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgMgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShq c29uYiAnMScsICdsYXggJC5hJyBOVUxMIE9OIEVNUFRZIERFRkFVTFQgJzInIE9OIEVSUk9SKTsK KyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZB TFVFKGpzb25iICcxJywgJ2xheCAkLmEnIERFRkFVTFQgJzInIE9OIEVNUFRZIERFRkFVTFQgJzMn IE9OIEVSUk9SKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgMgorKDEgcm93KQorCitT RUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICdsYXggJC5hJyBFUlJPUiBPTiBFTVBUWSBERUZB VUxUICczJyBPTiBFUlJPUik7CitFUlJPUjogIG5vIFNRTC9KU09OIGl0ZW0KK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICdbMSwyXScsICckWypdJyBFUlJPUiBPTiBFUlJPUik7CitFUlJPUjogIEpT T04gcGF0aCBleHByZXNzaW9uIGluIEpTT05fVkFMVUUgc2hvdWxkIHJldHVybiBzaW5nbGV0b24g c2NhbGFyIGl0ZW0KK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdbMSwyXScsICckWypdJyBERUZB VUxUICcwJyBPTiBFUlJPUik7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIDAKKygxIHJv dykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ1siICJdJywgJyRbKl0nIFJFVFVSTklORyBp bnQgRVJST1IgT04gRVJST1IpOworRVJST1I6ICBpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlw ZSBpbnRlZ2VyOiAiICIKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdbIiAiXScsICckWypdJyBS RVRVUk5JTkcgaW50IERFRkFVTFQgMiArIDMgT04gRVJST1IpOworIGpzb25fdmFsdWUgCistLS0t LS0tLS0tLS0KKyAgICAgICAgICA1CisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25i ICdbIjEiXScsICckWypdJyBSRVRVUk5JTkcgaW50IERFRkFVTFQgMiArIDMgT04gRVJST1IpOwor IGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAgICAgICAgICAxCisoMSByb3cpCisKK1NFTEVD VCBKU09OX1ZBTFVFKGpzb25iICdbIjEiXScsICckWypdJyBSRVRVUk5JTkcgaW50IEZPUk1BVCBK U09OKTsgLS0gUkVUVVJOSU5HIEZPUk1BVCBub3QgYWxsb3dlZAorRVJST1I6ICBjYW5ub3Qgc3Bl Y2lmeSBGT1JNQVQgaW4gUkVUVVJOSU5HIGNsYXVzZSBvZiBKU09OX1ZBTFVFKCkKK0xJTkUgMTog Li4uQ1QgSlNPTl9WQUxVRShqc29uYiAnWyIxIl0nLCAnJFsqXScgUkVUVVJOSU5HIGludCBGT1JN QVQgSlNPLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXgorLS0gUkVUVUdOSU5HIHBzZXVkby10eXBlcyBub3QgYWxsb3dlZAor U0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ1siMSJdJywgJyRbKl0nIFJFVFVSTklORyByZWNvcmQp OworRVJST1I6ICByZXR1cm5pbmcgcHNldWRvLXR5cGVzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gU1FM L0pTT04gZnVuY3Rpb25zCitTRUxFQ1QKKwl4LAorCUpTT05fVkFMVUUoCisJCWpzb25iICd7ImEi OiAxLCAiYiI6IDJ9JywKKwkJJyQuKiA/IChAID4gJHgpJyBQQVNTSU5HIHggQVMgeAorCQlSRVRV Uk5JTkcgaW50CisJCURFRkFVTFQgLTEgT04gRU1QVFkKKwkJREVGQVVMVCAtMiBPTiBFUlJPUgor CSkgeQorRlJPTQorCWdlbmVyYXRlX3NlcmllcygwLCAyKSB4OworIHggfCB5ICAKKy0tLSstLS0t CisgMCB8IC0yCisgMSB8ICAyCisgMiB8IC0xCisoMyByb3dzKQorCitTRUxFQ1QgSlNPTl9WQUxV RShqc29uYiAnbnVsbCcsICckYScgUEFTU0lORyBwb2ludCAnICgxLCAyICknIEFTIGEpOworIGpz b25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAoMSwyKQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9W QUxVRShqc29uYiAnbnVsbCcsICckYScgUEFTU0lORyBwb2ludCAnICgxLCAyICknIEFTIGEgUkVU VVJOSU5HIHBvaW50KTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgKDEsMikKKygxIHJv dykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJGEnIFBBU1NJTkcgcG9pbnQg JyAoMSwgMiApJyBBUyBhIFJFVFVSTklORyBwb2ludCBFUlJPUiBPTiBFUlJPUik7CisganNvbl92 YWx1ZSAKKy0tLS0tLS0tLS0tLQorICgxLDIpCisoMSByb3cpCisKKy0tIFRlc3QgUEFTU0lORyBh bmQgUkVUVVJOSU5HIGRhdGUvdGltZSB0eXBlcworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251 bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFtcHR6ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcg QVMgdHMpOworICAgICAgICAgIGpzb25fdmFsdWUgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBUdWUgRmViIDIwIDE4OjM0OjU2IDIwMTggUFNUCisoMSByb3cpCisK K1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0 eiAnMjAxOC0wMi0yMSAxMjozNDo1NiArMTAnIEFTIHRzIFJFVFVSTklORyB0aW1lc3RhbXB0eik7 CisgICAgICAgICAganNvbl92YWx1ZSAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIFR1ZSBGZWIgMjAgMTg6MzQ6NTYgMjAxOCBQU1QKKygxIHJvdykKKworU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFtcHR6ICcyMDE4 LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMgUkVUVVJOSU5HIHRpbWVzdGFtcCk7CisgICAgICAg IGpzb25fdmFsdWUgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUdWUgRmVi IDIwIDE4OjM0OjU2IDIwMTgKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251 bGwnLCAnJHRzJyBQQVNTSU5HIGRhdGUgJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyBS RVRVUk5JTkcgZGF0ZSk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIDAyLTIxLTIwMTgK KygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5H IHRpbWUgJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcgdGltZSk7Cisg anNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIDEyOjM0OjU2CisoMSByb3cpCisKK1NFTEVDVCBK U09OX1ZBTFVFKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1ldHogJzIwMTgtMDItMjEg MTI6MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcgdGltZXR6KTsKKyBqc29uX3ZhbHVlICAKKy0t LS0tLS0tLS0tLS0KKyAxMjozNDo1NisxMAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShq c29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wICcyMDE4LTAyLTIxIDEyOjM0OjU2 ICsxMCcgQVMgdHMgUkVUVVJOSU5HIHRpbWVzdGFtcCk7CisgICAgICAgIGpzb25fdmFsdWUgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBXZWQgRmViIDIxIDEyOjM0OjU2IDIw MTgKKygxIHJvdykKKworLS0gQWxzbyB0ZXN0IFJFVFVSTklORyBqc29uW2JdCitTRUxFQ1QgSlNP Tl9WQUxVRShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDIt MjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcganNvbik7CisgICAgICAgICBqc29uX3Zh bHVlICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAiMjAxOC0wMi0y MVQwMjozNDo1NiswMDowMCIKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251 bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFtcHR6ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcg QVMgdHMgUkVUVVJOSU5HIGpzb25iKTsKKyAgICAgICAgIGpzb25fdmFsdWUgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICIyMDE4LTAyLTIxVDAyOjM0OjU2KzAwOjAw IgorKDEgcm93KQorCistLSBKU09OX1FVRVJZCistLSBqc29uIGFyZ3VtZW50cyBjdXJyZW50bHkg bm90IHN1cHBvcnRlZAorU0VMRUNUIEpTT05fUVVFUlkoTlVMTCBGT1JNQVQgSlNPTiwgJyQnKTsK K0VSUk9SOiAgSlNPTl9RVUVSWSgpIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9yIHRoZSBqc29u IHR5cGUKK0xJTkUgMTogU0VMRUNUIEpTT05fUVVFUlkoTlVMTCBGT1JNQVQgSlNPTiwgJyQnKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgXgorSElOVDogIFRyeSBjYXN0aW5nIHRoZSBhcmd1 bWVudCB0byBqc29uYgorU0VMRUNUIEpTT05fVkFMVUUoTlVMTDo6anNvbmIsICckJyk7CisganNv bl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QKKwlKU09OX1FVRVJZ KGpzLCAnJCcpLAorCUpTT05fUVVFUlkoanMsICckJyBXSVRIT1VUIFdSQVBQRVIpLAorCUpTT05f UVVFUlkoanMsICckJyBXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIpLAorCUpTT05fUVVFUlkoanMs ICckJyBXSVRIIFVOQ09ORElUSU9OQUwgQVJSQVkgV1JBUFBFUiksCisJSlNPTl9RVUVSWShqcywg JyQnIFdJVEggQVJSQVkgV1JBUFBFUikKK0ZST00KKwkoVkFMVUVTCisJCShqc29uYiAnbnVsbCcp LAorCQkoJzEyLjMnKSwKKwkJKCd0cnVlJyksCisJCSgnImFhYSInKSwKKwkJKCdbMSwgbnVsbCwg IjIiXScpLAorCQkoJ3siYSI6IDEsICJiIjogWzJdfScpCisJKSBmb28oanMpOworICAgICBqc29u X3F1ZXJ5ICAgICB8ICAgICBqc29uX3F1ZXJ5ICAgICB8ICAgICBqc29uX3F1ZXJ5ICAgICB8ICAg ICAganNvbl9xdWVyeSAgICAgIHwgICAgICBqc29uX3F1ZXJ5ICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBudWxsICAgICAgICAgICAg ICAgfCBudWxsICAgICAgICAgICAgICAgfCBbbnVsbF0gICAgICAgICAgICAgfCBbbnVsbF0gICAg ICAgICAgICAgICB8IFtudWxsXQorIDEyLjMgICAgICAgICAgICAgICB8IDEyLjMgICAgICAgICAg ICAgICB8IFsxMi4zXSAgICAgICAgICAgICB8IFsxMi4zXSAgICAgICAgICAgICAgIHwgWzEyLjNd CisgdHJ1ZSAgICAgICAgICAgICAgIHwgdHJ1ZSAgICAgICAgICAgICAgIHwgW3RydWVdICAgICAg ICAgICAgIHwgW3RydWVdICAgICAgICAgICAgICAgfCBbdHJ1ZV0KKyAiYWFhIiAgICAgICAgICAg ICAgfCAiYWFhIiAgICAgICAgICAgICAgfCBbImFhYSJdICAgICAgICAgICAgfCBbImFhYSJdICAg ICAgICAgICAgICB8IFsiYWFhIl0KKyBbMSwgbnVsbCwgIjIiXSAgICAgfCBbMSwgbnVsbCwgIjIi XSAgICAgfCBbMSwgbnVsbCwgIjIiXSAgICAgfCBbWzEsIG51bGwsICIyIl1dICAgICB8IFtbMSwg bnVsbCwgIjIiXV0KKyB7ImEiOiAxLCAiYiI6IFsyXX0gfCB7ImEiOiAxLCAiYiI6IFsyXX0gfCB7 ImEiOiAxLCAiYiI6IFsyXX0gfCBbeyJhIjogMSwgImIiOiBbMl19XSB8IFt7ImEiOiAxLCAiYiI6 IFsyXX1dCisoNiByb3dzKQorCitTRUxFQ1QKKwlKU09OX1FVRVJZKGpzLCAnc3RyaWN0ICRbKl0n KSBBUyAidW5zcGVjIiwKKwlKU09OX1FVRVJZKGpzLCAnc3RyaWN0ICRbKl0nIFdJVEhPVVQgV1JB UFBFUikgQVMgIndpdGhvdXQiLAorCUpTT05fUVVFUlkoanMsICdzdHJpY3QgJFsqXScgV0lUSCBD T05ESVRJT05BTCBXUkFQUEVSKSBBUyAid2l0aCBjb25kIiwKKwlKU09OX1FVRVJZKGpzLCAnc3Ry aWN0ICRbKl0nIFdJVEggVU5DT05ESVRJT05BTCBBUlJBWSBXUkFQUEVSKSBBUyAid2l0aCB1bmNv bmQiLAorCUpTT05fUVVFUlkoanMsICdzdHJpY3QgJFsqXScgV0lUSCBBUlJBWSBXUkFQUEVSKSBB UyAid2l0aCIKK0ZST00KKwkoVkFMVUVTCisJCShqc29uYiAnMScpLAorCQkoJ1tdJyksCisJCSgn W251bGxdJyksCisJCSgnWzEyLjNdJyksCisJCSgnW3RydWVdJyksCisJCSgnWyJhYWEiXScpLAor CQkoJ1tbMSwgMiwgM11dJyksCisJCSgnW3siYSI6IDEsICJiIjogWzJdfV0nKSwKKwkJKCdbMSwg IjIiLCBudWxsLCBbM11dJykKKwkpIGZvbyhqcyk7CisgICAgICAgdW5zcGVjICAgICAgIHwgICAg ICB3aXRob3V0ICAgICAgIHwgICAgICB3aXRoIGNvbmQgICAgICB8ICAgICB3aXRoIHVuY29uZCAg ICAgIHwgICAgICAgICB3aXRoICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwg CisgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAg ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwgCisgbnVsbCAgICAgICAgICAgICAgIHwg bnVsbCAgICAgICAgICAgICAgIHwgW251bGxdICAgICAgICAgICAgICB8IFtudWxsXSAgICAgICAg ICAgICAgIHwgW251bGxdCisgMTIuMyAgICAgICAgICAgICAgIHwgMTIuMyAgICAgICAgICAgICAg IHwgWzEyLjNdICAgICAgICAgICAgICB8IFsxMi4zXSAgICAgICAgICAgICAgIHwgWzEyLjNdCisg dHJ1ZSAgICAgICAgICAgICAgIHwgdHJ1ZSAgICAgICAgICAgICAgIHwgW3RydWVdICAgICAgICAg ICAgICB8IFt0cnVlXSAgICAgICAgICAgICAgIHwgW3RydWVdCisgImFhYSIgICAgICAgICAgICAg IHwgImFhYSIgICAgICAgICAgICAgIHwgWyJhYWEiXSAgICAgICAgICAgICB8IFsiYWFhIl0gICAg ICAgICAgICAgIHwgWyJhYWEiXQorIFsxLCAyLCAzXSAgICAgICAgICB8IFsxLCAyLCAzXSAgICAg ICAgICB8IFsxLCAyLCAzXSAgICAgICAgICAgfCBbWzEsIDIsIDNdXSAgICAgICAgICB8IFtbMSwg MiwgM11dCisgeyJhIjogMSwgImIiOiBbMl19IHwgeyJhIjogMSwgImIiOiBbMl19IHwgeyJhIjog MSwgImIiOiBbMl19ICB8IFt7ImEiOiAxLCAiYiI6IFsyXX1dIHwgW3siYSI6IDEsICJiIjogWzJd fV0KKyAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCBbMSwgIjIiLCBu dWxsLCBbM11dIHwgWzEsICIyIiwgbnVsbCwgWzNdXSAgfCBbMSwgIjIiLCBudWxsLCBbM11dCiso OSByb3dzKQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5H IHRleHQpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyAiYWFhIgorKDEgcm93KQorCitT RUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIHRleHQgS0VFUCBR VU9URVMpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyAiYWFhIgorKDEgcm93KQorCitT RUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIHRleHQgS0VFUCBR VU9URVMgT04gU0NBTEFSIFNUUklORyk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorICJh YWEiCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciYWFhIicsICckJyBSRVRV Uk5JTkcgdGV4dCBPTUlUIFFVT1RFUyk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIGFh YQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJO SU5HIHRleHQgT01JVCBRVU9URVMgT04gU0NBTEFSIFNUUklORyk7CisganNvbl9xdWVyeSAKKy0t LS0tLS0tLS0tLQorIGFhYQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnImFh YSInLCAnJCcgT01JVCBRVU9URVMgRVJST1IgT04gRVJST1IpOworRVJST1I6ICBpbnZhbGlkIGlu cHV0IHN5bnRheCBmb3IgdHlwZSBqc29uCitERVRBSUw6ICBUb2tlbiAiYWFhIiBpcyBpbnZhbGlk LgorQ09OVEVYVDogIEpTT04gZGF0YSwgbGluZSAxOiBhYWEKK1NFTEVDVCBKU09OX1FVRVJZKGpz b25iICciYWFhIicsICckJyBSRVRVUk5JTkcganNvbiBPTUlUIFFVT1RFUyBFUlJPUiBPTiBFUlJP Uik7CitFUlJPUjogIGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGpzb24KK0RFVEFJTDog IFRva2VuICJhYWEiIGlzIGludmFsaWQuCitDT05URVhUOiAgSlNPTiBkYXRhLCBsaW5lIDE6IGFh YQorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBieXRlYSBG T1JNQVQgSlNPTiBPTUlUIFFVT1RFUyBFUlJPUiBPTiBFUlJPUik7CisganNvbl9xdWVyeSAKKy0t LS0tLS0tLS0tLQorIFx4NjE2MTYxCisoMSByb3cpCisKKy0tIFFVT1RFUyBiZWhhdmlvciBzaG91 bGQgbm90IGJlIHNwZWNpZmllZCB3aGVuIFdJVEggV1JBUFBFUiB1c2VkOgorLS0gU2hvdWxkIGZh aWwKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMV0nLCAnJCcgV0lUSCBXUkFQUEVSIE9NSVQg UVVPVEVTKTsKK0VSUk9SOiAgU1FML0pTT04gUVVPVEVTIGJlaGF2aW9yIG11c3Qgbm90IGJlIHNw ZWNpZmllZCB3aGVuIFdJVEggV1JBUFBFUiBpcyB1c2VkCitMSU5FIDE6IFNFTEVDVCBKU09OX1FV RVJZKGpzb25iICdbMV0nLCAnJCcgV0lUSCBXUkFQUEVSIE9NSVQgUVVPVEVTKS4uLgorICAgICAg ICAgICAgICAgXgorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScsICckJyBXSVRIIFdSQVBQ RVIgS0VFUCBRVU9URVMpOworRVJST1I6ICBTUUwvSlNPTiBRVU9URVMgYmVoYXZpb3IgbXVzdCBu b3QgYmUgc3BlY2lmaWVkIHdoZW4gV0lUSCBXUkFQUEVSIGlzIHVzZWQKK0xJTkUgMTogU0VMRUNU IEpTT05fUVVFUlkoanNvbmIgJ1sxXScsICckJyBXSVRIIFdSQVBQRVIgS0VFUCBRVU9URVMpLi4u CisgICAgICAgICAgICAgICBeCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzFdJywgJyQnIFdJ VEggQ09ORElUSU9OQUwgV1JBUFBFUiBLRUVQIFFVT1RFUyk7CitFUlJPUjogIFNRTC9KU09OIFFV T1RFUyBiZWhhdmlvciBtdXN0IG5vdCBiZSBzcGVjaWZpZWQgd2hlbiBXSVRIIFdSQVBQRVIgaXMg dXNlZAorTElORSAxOiBTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzFdJywgJyQnIFdJVEggQ09O RElUSU9OQUwgV1JBUFBFUiAuLi4KKyAgICAgICAgICAgICAgIF4KK1NFTEVDVCBKU09OX1FVRVJZ KGpzb25iICdbMV0nLCAnJCcgV0lUSCBDT05ESVRJT05BTCBXUkFQUEVSIE9NSVQgUVVPVEVTKTsK K0VSUk9SOiAgU1FML0pTT04gUVVPVEVTIGJlaGF2aW9yIG11c3Qgbm90IGJlIHNwZWNpZmllZCB3 aGVuIFdJVEggV1JBUFBFUiBpcyB1c2VkCitMSU5FIDE6IFNFTEVDVCBKU09OX1FVRVJZKGpzb25i ICdbMV0nLCAnJCcgV0lUSCBDT05ESVRJT05BTCBXUkFQUEVSIC4uLgorICAgICAgICAgICAgICAg XgorLS0gU2hvdWxkIHN1Y2NlZWQKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMV0nLCAnJCcg V0lUSE9VVCBXUkFQUEVSIE9NSVQgUVVPVEVTKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0t CisgWzFdCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMV0nLCAnJCcgV0lU SE9VVCBXUkFQUEVSIEtFRVAgUVVPVEVTKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisg WzFdCisoMSByb3cpCisKKy0tIHRlc3QgUVVPVEVTIGJlaGF2aW9yLgorU0VMRUNUIEpTT05fUVVF UlkoanNvbmIneyJyZWMiOiAiezEsMiwzfSJ9JywgJyQucmVjJyByZXR1cm5pbmcgaW50W10gb21p dCBxdW90ZXMpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyB7MSwyLDN9CisoMSByb3cp CisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iJ3sicmVjIjogInsxLDIsM30ifScsICckLnJlYycg cmV0dXJuaW5nIGludFtdIGtlZXAgcXVvdGVzKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0t CisgCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iJ3sicmVjIjogInsxLDIsM30i fScsICckLnJlYycgcmV0dXJuaW5nIGludFtdIGtlZXAgcXVvdGVzIGVycm9yIG9uIGVycm9yKTsK K0VSUk9SOiAgZXhwZWN0ZWQgSlNPTiBhcnJheQorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIneyJy ZWMiOiAiWzEsMl0ifScsICckLnJlYycgcmV0dXJuaW5nIGludDRyYW5nZSBvbWl0IHF1b3Rlcyk7 CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIFsxLDMpCisoMSByb3cpCisKK1NFTEVDVCBK U09OX1FVRVJZKGpzb25iJ3sicmVjIjogIlsxLDJdIn0nLCAnJC5yZWMnIHJldHVybmluZyBpbnQ0 cmFuZ2Uga2VlcCBxdW90ZXMpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyAKKygxIHJv dykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIneyJyZWMiOiAiWzEsMl0ifScsICckLnJlYycg CXJldHVybmluZyBpbnQ0cmFuZ2Uga2VlcCBxdW90ZXMgZXJyb3Igb24gZXJyb3IpOworRVJST1I6 ICBtYWxmb3JtZWQgcmFuZ2UgbGl0ZXJhbDogIiJbMSwyXSIiCitERVRBSUw6ICBNaXNzaW5nIGxl ZnQgcGFyZW50aGVzaXMgb3IgYnJhY2tldC4KK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScs ICckWypdJyk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxF Q1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScgTlVMTCBPTiBFTVBUWSk7CisganNvbl9x dWVyeSAKKy0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29u YiAnW10nLCAnJFsqXScgRU1QVFkgT04gRU1QVFkpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0t LS0KKyBbXQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScg RU1QVFkgQVJSQVkgT04gRU1QVFkpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyBbXQor KDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScgRU1QVFkgT0JK RUNUIE9OIEVNUFRZKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisge30KKygxIHJvdykK KworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nIEVSUk9SIE9OIEVNUFRZKTsK K0VSUk9SOiAgbm8gU1FML0pTT04gaXRlbQorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywg JyRbKl0nIERFRkFVTFQgJyJlbXB0eSInIE9OIEVNUFRZKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0t LS0tLS0tCisgImVtcHR5IgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10n LCAnJFsqXScgRVJST1IgT04gRU1QVFkgTlVMTCBPTiBFUlJPUik7CitFUlJPUjogIG5vIFNRTC9K U09OIGl0ZW0KK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBFUlJPUiBPTiBF TVBUWSBFTVBUWSBBUlJBWSBPTiBFUlJPUik7CitFUlJPUjogIG5vIFNRTC9KU09OIGl0ZW0KK1NF TEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBFUlJPUiBPTiBFTVBUWSBFTVBUWSBP QkpFQ1QgT04gRVJST1IpOworRVJST1I6ICBubyBTUUwvSlNPTiBpdGVtCitTRUxFQ1QgSlNPTl9R VUVSWShqc29uYiAnW10nLCAnJFsqXScgRVJST1IgT04gRU1QVFkgRVJST1IgT04gRVJST1IpOwor RVJST1I6ICBubyBTUUwvSlNPTiBpdGVtCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAn JFsqXScgRVJST1IgT04gRVJST1IpOworRVJST1I6ICBubyBTUUwvSlNPTiBpdGVtCitTRUxFQ1Qg SlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJFsqXScgRVJST1IgT04gRVJST1IpOworRVJST1I6 ICBKU09OIHBhdGggZXhwcmVzc2lvbiBpbiBKU09OX1FVRVJZIHNob3VsZCByZXR1cm4gc2luZ2xl dG9uIGl0ZW0gd2l0aG91dCB3cmFwcGVyCitISU5UOiAgVXNlIFdJVEggV1JBUFBFUiBjbGF1c2Ug dG8gd3JhcCBTUUwvSlNPTiBpdGVtIHNlcXVlbmNlIGludG8gYXJyYXkuCitTRUxFQ1QgSlNPTl9R VUVSWShqc29uYiAnWzEsMl0nLCAnJFsqXScgREVGQVVMVCAnImVtcHR5IicgT04gRVJST1IpOwor IGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyAiZW1wdHkiCisoMSByb3cpCisKK1NFTEVDVCBK U09OX1FVRVJZKGpzb25iICdbMSwyXScsICckJyBSRVRVUk5JTkcganNvbik7CisganNvbl9xdWVy eSAKKy0tLS0tLS0tLS0tLQorIFsxLCAyXQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShq c29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5HIGpzb24gRk9STUFUIEpTT04pOworIGpzb25fcXVl cnkgCistLS0tLS0tLS0tLS0KKyBbMSwgMl0KKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlko anNvbmIgJ1sxLDJdJywgJyQnIFJFVFVSTklORyBqc29uYik7CisganNvbl9xdWVyeSAKKy0tLS0t LS0tLS0tLQorIFsxLCAyXQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEs Ml0nLCAnJCcgUkVUVVJOSU5HIGpzb25iIEZPUk1BVCBKU09OKTsKKyBqc29uX3F1ZXJ5IAorLS0t LS0tLS0tLS0tCisgWzEsIDJdCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdb MSwyXScsICckJyBSRVRVUk5JTkcgdGV4dCk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQor IFsxLCAyXQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJCcg UkVUVVJOSU5HIGNoYXIoMTApKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgWzEsIDJd ICAgIAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJCcgUkVU VVJOSU5HIGNoYXIoMykpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyBbMSwKKygxIHJv dykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyQnIFJFVFVSTklORyB0ZXh0 IEZPUk1BVCBKU09OKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgWzEsIDJdCisoMSBy b3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckJyBSRVRVUk5JTkcgYnl0 ZWEpOworICAganNvbl9xdWVyeSAgIAorLS0tLS0tLS0tLS0tLS0tLQorIFx4NWIzMTJjMjAzMjVk CisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckJyBSRVRVUk5J TkcgYnl0ZWEgRk9STUFUIEpTT04pOworICAganNvbl9xdWVyeSAgIAorLS0tLS0tLS0tLS0tLS0t LQorIFx4NWIzMTJjMjAzMjVkCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdb MSwyXScsICckWypdJyBSRVRVUk5JTkcgYnl0ZWEgRU1QVFkgT0JKRUNUIE9OIEVSUk9SKTsKK0VS Uk9SOiAgY2Fubm90IGNhc3QgYmVoYXZpb3IgZXhwcmVzc2lvbiBvZiB0eXBlIGpzb25iIHRvIGJ5 dGVhCitMSU5FIDE6IC4uLiBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckWypdJyBSRVRVUk5J TkcgYnl0ZWEgRU1QVFkgT0JKRS4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdb MSwyXScsICckWypdJyBSRVRVUk5JTkcgYnl0ZWEgRk9STUFUIEpTT04gRU1QVFkgT0JKRUNUIE9O IEVSUk9SKTsKK0VSUk9SOiAgY2Fubm90IGNhc3QgYmVoYXZpb3IgZXhwcmVzc2lvbiBvZiB0eXBl IGpzb25iIHRvIGJ5dGVhCitMSU5FIDE6IC4uLmpzb25iICdbMSwyXScsICckWypdJyBSRVRVUk5J TkcgYnl0ZWEgRk9STUFUIEpTT04gRU1QVFkgT0JKRS4uLgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK1NFTEVDVCBKU09OX1FV RVJZKGpzb25iICdbMSwyXScsICckWypdJyBSRVRVUk5JTkcganNvbiBFTVBUWSBPQkpFQ1QgT04g RVJST1IpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyB7fQorKDEgcm93KQorCitTRUxF Q1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJFsqXScgUkVUVVJOSU5HIGpzb25iIEVNUFRZ IE9CSkVDVCBPTiBFUlJPUik7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIHt9CisoMSBy b3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMyw0XScsICckWypdJyBSRVRVUk5JTkcg YmlnaW50W10gRU1QVFkgT0JKRUNUIE9OIEVSUk9SKTsKK0VSUk9SOiAgY2Fubm90IGNhc3QgYmVo YXZpb3IgZXhwcmVzc2lvbiBvZiB0eXBlIGpzb25iIHRvIGJpZ2ludFtdCitMSU5FIDE6IC4uLk9O X1FVRVJZKGpzb25iICdbMyw0XScsICckWypdJyBSRVRVUk5JTkcgYmlnaW50W10gRU1QVFkgT0JK RS4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF4KK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciWzMsNF0iJywgJyRbKl0nIFJF VFVSTklORyBiaWdpbnRbXSBFTVBUWSBPQkpFQ1QgT04gRVJST1IpOworRVJST1I6ICBjYW5ub3Qg Y2FzdCBiZWhhdmlvciBleHByZXNzaW9uIG9mIHR5cGUganNvbmIgdG8gYmlnaW50W10KK0xJTkUg MTogLi4uX1FVRVJZKGpzb25iICciWzMsNF0iJywgJyRbKl0nIFJFVFVSTklORyBiaWdpbnRbXSBF TVBUWSBPQkpFLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXgorLS0gUkVUVUdOSU5HIHBzZXVkby10eXBlcyBub3QgYWxsb3dl ZAorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1szLDRdJywgJyRbKl0nIFJFVFVSTklORyBhbnlh cnJheSBFTVBUWSBPQkpFQ1QgT04gRVJST1IpOworRVJST1I6ICByZXR1cm5pbmcgcHNldWRvLXR5 cGVzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gU1FML0pTT04gZnVuY3Rpb25zCitTRUxFQ1QKKwl4LCB5 LAorCUpTT05fUVVFUlkoCisJCWpzb25iICdbMSwyLDMsNCw1LG51bGxdJywKKwkJJyRbKl0gPyAo QCA+PSAkeCAmJiBAIDw9ICR5KScKKwkJUEFTU0lORyB4IEFTIHgsIHkgQVMgeQorCQlXSVRIIENP TkRJVElPTkFMIFdSQVBQRVIKKwkJRU1QVFkgQVJSQVkgT04gRU1QVFkKKwkpIGxpc3QKK0ZST00K KwlnZW5lcmF0ZV9zZXJpZXMoMCwgNCkgeCwKKwlnZW5lcmF0ZV9zZXJpZXMoMCwgNCkgeTsKKyB4 IHwgeSB8ICAgICBsaXN0ICAgICAKKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0KKyAwIHwgMCB8IFtd CisgMCB8IDEgfCBbMV0KKyAwIHwgMiB8IFsxLCAyXQorIDAgfCAzIHwgWzEsIDIsIDNdCisgMCB8 IDQgfCBbMSwgMiwgMywgNF0KKyAxIHwgMCB8IFtdCisgMSB8IDEgfCBbMV0KKyAxIHwgMiB8IFsx LCAyXQorIDEgfCAzIHwgWzEsIDIsIDNdCisgMSB8IDQgfCBbMSwgMiwgMywgNF0KKyAyIHwgMCB8 IFtdCisgMiB8IDEgfCBbXQorIDIgfCAyIHwgWzJdCisgMiB8IDMgfCBbMiwgM10KKyAyIHwgNCB8 IFsyLCAzLCA0XQorIDMgfCAwIHwgW10KKyAzIHwgMSB8IFtdCisgMyB8IDIgfCBbXQorIDMgfCAz IHwgWzNdCisgMyB8IDQgfCBbMywgNF0KKyA0IHwgMCB8IFtdCisgNCB8IDEgfCBbXQorIDQgfCAy IHwgW10KKyA0IHwgMyB8IFtdCisgNCB8IDQgfCBbNF0KKygyNSByb3dzKQorCistLSByZWNvcmQg dHlwZSByZXR1cm5pbmcgd2l0aCBxdW90ZXMgYmVoYXZpb3IuCitDUkVBVEUgVFlQRSBjb21wX2Fi YyBBUyAoYSB0ZXh0LCBiIGludCwgYyB0aW1lc3RhbXApOworU0VMRUNUIEpTT05fUVVFUlkoanNv bmIneyJyZWMiOiAiKGFiYyw0MiwwMS4wMi4yMDAzKSJ9JywgJyQucmVjJyByZXR1cm5pbmcgY29t cF9hYmMgb21pdCBxdW90ZXMpOworICAgICAgICAgICAgIGpzb25fcXVlcnkgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIChhYmMsNDIsIlRodSBK YW4gMDIgMDA6MDA6MDAgMjAwMyIpCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25i J3sicmVjIjogIihhYmMsNDIsMDEuMDIuMjAwMykifScsICckLnJlYycgcmV0dXJuaW5nIGNvbXBf YWJjIGtlZXAgcXVvdGVzKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgCisoMSByb3cp CisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iJ3sicmVjIjogIihhYmMsNDIsMDEuMDIuMjAwMyki fScsICckLnJlYycgcmV0dXJuaW5nIGNvbXBfYWJjIGtlZXAgcXVvdGVzIGVycm9yIG9uIGVycm9y KTsKK0VSUk9SOiAgY2Fubm90IGNhbGwgcG9wdWxhdGVfY29tcG9zaXRlIG9uIGEgc2NhbGFyCitE Uk9QIFRZUEUgY29tcF9hYmM7CistLSBFeHRlbnNpb246IHJlY29yZCB0eXBlcyByZXR1cm5pbmcK K0NSRUFURSBUWVBFIHNxbGpzb25iX3JlYyBBUyAoYSBpbnQsIHQgdGV4dCwganMganNvbiwgamIg anNvbmIsIGpzYSBqc29uW10pOworQ1JFQVRFIFRZUEUgc3FsanNvbmJfcmVjYSBBUyAocmVjYSBz cWxqc29uYl9yZWNbXSk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW3siYSI6IDEsICJiIjog ImZvbyIsICJ0IjogImFhYSIsICJqcyI6IFsxLCAiMiIsIHt9XSwgImpiIjogeyJ4IjogWzEsICIy Iiwge31dfX0sICB7ImEiOiAyfV0nLCAnJFswXScgUkVUVVJOSU5HIHNxbGpzb25iX3JlYyk7Cisg ICAgICAgICAgICAgICAgICAgICBqc29uX3F1ZXJ5ICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAoMSxh YWEsIlsxLCAiIjIiIiwge31dIiwieyIieCIiOiBbMSwgIiIyIiIsIHt9XX0iLCkKKygxIHJvdykK KworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1t7ImEiOiAiYSIsICJiIjogImZvbyIsICJ0Ijog ImFhYSIsICJqcyI6IFsxLCAiMiIsIHt9XSwgImpiIjogeyJ4IjogWzEsICIyIiwge31dfX0sICB7 ImEiOiAyfV0nLCAnJFswXScgUkVUVVJOSU5HIHNxbGpzb25iX3JlYyBFUlJPUiBPTiBFUlJPUik7 CitFUlJPUjogIGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGludGVnZXI6ICJhIgorU0VM RUNUIEpTT05fUVVFUlkoanNvbmIgJ1t7ImEiOiAiYSIsICJiIjogImZvbyIsICJ0IjogImFhYSIs ICJqcyI6IFsxLCAiMiIsIHt9XSwgImpiIjogeyJ4IjogWzEsICIyIiwge31dfX0sICB7ImEiOiAy fV0nLCAnJFswXScgUkVUVVJOSU5HIHNxbGpzb25iX3JlYyk7CisganNvbl9xdWVyeSAKKy0tLS0t LS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHVubmVzdCgoSlNPTl9RVUVSWShq c29uYiAneyJqc2EiOiAgW3siYSI6IDEsICJiIjogWyJmb28iXX0sIHsiYSI6IDIsICJjIjoge319 LCAxMjNdfScsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfcmVjKSkuanNhKTsKKyAgICAgICAgIHVu bmVzdCAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgeyJhIjogMSwgImIiOiBb ImZvbyJdfQorIHsiYSI6IDIsICJjIjoge319CisgMTIzCisoMyByb3dzKQorCitTRUxFQ1QgKiBG Uk9NIHVubmVzdCgoSlNPTl9RVUVSWShqc29uYiAneyJyZWNhIjogW3siYSI6IDEsICJ0IjogWyJm b28iLCBbXV19LCB7ImEiOiAyLCAiamIiOiBbe30sIHRydWVdfV19JywgJyQnIFJFVFVSTklORyBz cWxqc29uYl9yZWNhKSkucmVjYSk7CisgYSB8ICAgICAgdCAgICAgIHwganMgfCAgICAgamIgICAg IHwganNhIAorLS0tKy0tLS0tLS0tLS0tLS0rLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0KKyAxIHwg WyJmb28iLCBbXV0gfCAgICB8ICAgICAgICAgICAgfCAKKyAyIHwgICAgICAgICAgICAgfCAgICB8 IFt7fSwgdHJ1ZV0gfCAKKygyIHJvd3MpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbeyJh IjogMSwgImIiOiAiZm9vIiwgInQiOiAiYWFhIiwgImpzIjogWzEsICIyIiwge31dLCAiamIiOiB7 IngiOiBbMSwgIjIiLCB7fV19fSwgIHsiYSI6IDJ9XScsICckWzBdJyBSRVRVUk5JTkcganNvbnBh dGgpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUIEpT T05fUVVFUlkoanNvbmIgJ1t7ImEiOiAxLCAiYiI6ICJmb28iLCAidCI6ICJhYWEiLCAianMiOiBb MSwgIjIiLCB7fV0sICJqYiI6IHsieCI6IFsxLCAiMiIsIHt9XX19LCAgeyJhIjogMn1dJywgJyRb MF0nIFJFVFVSTklORyBqc29ucGF0aCBFUlJPUiBPTiBFUlJPUik7CitFUlJPUjogIHN5bnRheCBl cnJvciBhdCBvciBuZWFyICJ7IiBvZiBqc29ucGF0aCBpbnB1dAorLS0gRXh0ZW5zaW9uOiBhcnJh eSB0eXBlcyByZXR1cm5pbmcKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyLG51bGwsIjMi XScsICckWypdJyBSRVRVUk5JTkcgaW50W10gV0lUSCBXUkFQUEVSKTsKKyAganNvbl9xdWVyeSAg CistLS0tLS0tLS0tLS0tLQorIHsxLDIsTlVMTCwzfQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9R VUVSWShqc29uYiAnWzEsMixudWxsLCJhIl0nLCAnJFsqXScgUkVUVVJOSU5HIGludFtdIFdJVEgg V1JBUFBFUiBFUlJPUiBPTiBFUlJPUik7CitFUlJPUjogIGludmFsaWQgaW5wdXQgc3ludGF4IGZv ciB0eXBlIGludGVnZXI6ICJhIgorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDIsbnVsbCwi YSJdJywgJyRbKl0nIFJFVFVSTklORyBpbnRbXSBXSVRIIFdSQVBQRVIpOworIGpzb25fcXVlcnkg CistLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUICogRlJPTSB1bm5lc3QoSlNPTl9R VUVSWShqc29uYiAnW3siYSI6IDEsICJ0IjogWyJmb28iLCBbXV19LCB7ImEiOiAyLCAiamIiOiBb e30sIHRydWVdfV0nLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX3JlY1tdKSk7CisgYSB8ICAgICAg dCAgICAgIHwganMgfCAgICAgamIgICAgIHwganNhIAorLS0tKy0tLS0tLS0tLS0tLS0rLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0KKyAxIHwgWyJmb28iLCBbXV0gfCAgICB8ICAgICAgICAgICAgfCAK KyAyIHwgICAgICAgICAgICAgfCAgICB8IFt7fSwgdHJ1ZV0gfCAKKygyIHJvd3MpCisKKy0tIEV4 dGVuc2lvbjogZG9tYWluIHR5cGVzIHJldHVybmluZworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIg J3siYSI6IDF9JywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCk7CisganNv bl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorICAgICAgICAgIDEKKygxIHJvdykKKworU0VMRUNUIEpT T05fUVVFUlkoanNvbmIgJ3siYSI6IDF9JywgJyQuYicgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9u b3RfbnVsbCk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorICAgICAgICAgICAKKygxIHJv dykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDF9JywgJyQuYicgUkVUVVJOSU5H IHNxbGpzb25iX2ludF9ub3RfbnVsbCBFUlJPUiBPTiBFUlJPUik7CitFUlJPUjogIG5vIFNRTC9K U09OIGl0ZW0KKy0tIFRlc3QgdGltZXN0YW1wdHogcGFzc2luZyBhbmQgb3V0cHV0CitTRUxFQ1Qg SlNPTl9RVUVSWShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgt MDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyk7CisgICAgICAgICBqc29uX3F1ZXJ5ICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAiMjAxOC0wMi0yMVQwMjozNDo1Nisw MDowMCIKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ251bGwnLCAnJHRzJyBQ QVNTSU5HIHRpbWVzdGFtcHR6ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMgUkVUVVJO SU5HIGpzb24pOworICAgICAgICAganNvbl9xdWVyeSAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgIjIwMTgtMDItMjFUMDI6MzQ6NTYrMDA6MDAiCisoMSByb3cpCisK K1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0 eiAnMjAxOC0wMi0yMSAxMjozNDo1NiArMTAnIEFTIHRzIFJFVFVSTklORyBqc29uYik7CisgICAg ICAgICBqc29uX3F1ZXJ5ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAiMjAxOC0wMi0yMVQwMjozNDo1NiswMDowMCIKKygxIHJvdykKKworLS0gVGVzdCBjb25zdHJh aW50cworQ1JFQVRFIFRBQkxFIHRlc3RfanNvbmJfY29uc3RyYWludHMgKAorCWpzIHRleHQsCisJ aSBpbnQsCisJeCBqc29uYiBERUZBVUxUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyRbKl0n IFdJVEggV1JBUFBFUikKKwlDT05TVFJBSU5UIHRlc3RfanNvbmJfY29uc3RyYWludDEKKwkJQ0hF Q0sgKGpzIElTIEpTT04pCisJQ09OU1RSQUlOVCB0ZXN0X2pzb25iX2NvbnN0cmFpbnQyCisJCUNI RUNLIChKU09OX0VYSVNUUyhqczo6anNvbmIsICckLmEnIFBBU1NJTkcgaSArIDUgQVMgaW50LCBp Ojp0ZXh0IEFTIHR4dCwgYXJyYXlbMSwyLDNdIGFzIGFycikpCisJQ09OU1RSQUlOVCB0ZXN0X2pz b25iX2NvbnN0cmFpbnQzCisJCUNIRUNLIChKU09OX1ZBTFVFKGpzOjpqc29uYiwgJyQuYScgUkVU VVJOSU5HIGludCBERUZBVUxUICcxMicgT04gRU1QVFkgRVJST1IgT04gRVJST1IpID4gaSkKKwlD T05TVFJBSU5UIHRlc3RfanNvbmJfY29uc3RyYWludDQKKwkJQ0hFQ0sgKEpTT05fUVVFUlkoanM6 Ompzb25iLCAnJC5hJyBXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIgRU1QVFkgT0JKRUNUIE9OIEVS Uk9SKSA8IGpzb25iICdbMTBdJykKKwlDT05TVFJBSU5UIHRlc3RfanNvbmJfY29uc3RyYWludDUK KwkJQ0hFQ0sgKEpTT05fUVVFUlkoanM6Ompzb25iLCAnJC5hJyBSRVRVUk5JTkcgY2hhcig1KSBP TUlUIFFVT1RFUyBFTVBUWSBBUlJBWSBPTiBFTVBUWSkgPiAgJ2EnIENPTExBVEUgIkMiKQorKTsK K1xkIHRlc3RfanNvbmJfY29uc3RyYWludHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFRhYmxlICJwdWJsaWMudGVzdF9qc29uYl9jb25zdHJhaW50cyIKKyBDb2x1 bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIERlZmF1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIGpzICAgICB8IHRleHQgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8 IAorIGkgICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAgICAgICAgICB8IAorIHggICAgICB8 IGpzb25iICAgfCAgICAgICAgICAgfCAgICAgICAgICB8IEpTT05fUVVFUlkoJ1sxLCAyXSc6Ompz b25iLCAnJFsqXScgUkVUVVJOSU5HIGpzb25iIFdJVEggVU5DT05ESVRJT05BTCBXUkFQUEVSKQor Q2hlY2sgY29uc3RyYWludHM6CisgICAgInRlc3RfanNvbmJfY29uc3RyYWludDEiIENIRUNLIChq cyBJUyBKU09OKQorICAgICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnQyIiBDSEVDSyAoSlNPTl9FWElT VFMoanM6Ompzb25iLCAnJC4iYSInIFBBU1NJTkcgaSArIDUgQVMgaW50LCBpOjp0ZXh0IEFTIHR4 dCwgQVJSQVlbMSwgMiwgM10gQVMgYXJyKSkKKyAgICAidGVzdF9qc29uYl9jb25zdHJhaW50MyIg Q0hFQ0sgKEpTT05fVkFMVUUoanM6Ompzb25iLCAnJC4iYSInIFJFVFVSTklORyBpbnRlZ2VyIERF RkFVTFQgMTIgT04gRU1QVFkgRVJST1IgT04gRVJST1IpID4gaSkKKyAgICAidGVzdF9qc29uYl9j b25zdHJhaW50NCIgQ0hFQ0sgKEpTT05fUVVFUlkoanM6Ompzb25iLCAnJC4iYSInIFJFVFVSTklO RyBqc29uYiBXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIgRU1QVFkgT0JKRUNUIE9OIEVSUk9SKSA8 ICdbMTBdJzo6anNvbmIpCisgICAgInRlc3RfanNvbmJfY29uc3RyYWludDUiIENIRUNLIChKU09O X1FVRVJZKGpzOjpqc29uYiwgJyQuImEiJyBSRVRVUk5JTkcgY2hhcmFjdGVyKDUpIE9NSVQgUVVP VEVTIEVNUFRZIEFSUkFZIE9OIEVNUFRZKSA+ICgnYSc6OmJwY2hhciBDT0xMQVRFICJDIikpCisK K1NFTEVDVCBjaGVja19jbGF1c2UKK0ZST00gaW5mb3JtYXRpb25fc2NoZW1hLmNoZWNrX2NvbnN0 cmFpbnRzCitXSEVSRSBjb25zdHJhaW50X25hbWUgTElLRSAndGVzdF9qc29uYl9jb25zdHJhaW50 JScKK09SREVSIEJZIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaGVja19jbGF1c2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIChKU09OX1FVRVJZKChqcyk6Ompzb25i LCAnJC4iYSInIFJFVFVSTklORyBjaGFyYWN0ZXIoNSkgT01JVCBRVU9URVMgRU1QVFkgQVJSQVkg T04gRU1QVFkpID4gKCdhJzo6YnBjaGFyIENPTExBVEUgIkMiKSkKKyAoSlNPTl9RVUVSWSgoanMp Ojpqc29uYiwgJyQuImEiJyBSRVRVUk5JTkcganNvbmIgV0lUSCBDT05ESVRJT05BTCBXUkFQUEVS IEVNUFRZIE9CSkVDVCBPTiBFUlJPUikgPCAnWzEwXSc6Ompzb25iKQorIChKU09OX1ZBTFVFKChq cyk6Ompzb25iLCAnJC4iYSInIFJFVFVSTklORyBpbnRlZ2VyIERFRkFVTFQgMTIgT04gRU1QVFkg RVJST1IgT04gRVJST1IpID4gaSkKKyAoanMgSVMgSlNPTikKKyBKU09OX0VYSVNUUygoanMpOjpq c29uYiwgJyQuImEiJyBQQVNTSU5HIChpICsgNSkgQVMgaW50LCAoaSk6OnRleHQgQVMgdHh0LCBB UlJBWVsxLCAyLCAzXSBBUyBhcnIpCisoNSByb3dzKQorCitTRUxFQ1QgcGdfZ2V0X2V4cHIoYWRi aW4sIGFkcmVsaWQpCitGUk9NIHBnX2F0dHJkZWYKK1dIRVJFIGFkcmVsaWQgPSAndGVzdF9qc29u Yl9jb25zdHJhaW50cyc6OnJlZ2NsYXNzCitPUkRFUiBCWSAxOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBnX2dldF9leHByICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSlNPTl9RVUVSWSgnWzEsIDJdJzo6anNv bmIsICckWypdJyBSRVRVUk5JTkcganNvbmIgV0lUSCBVTkNPTkRJVElPTkFMIFdSQVBQRVIpCiso MSByb3cpCisKK0lOU0VSVCBJTlRPIHRlc3RfanNvbmJfY29uc3RyYWludHMgVkFMVUVTICgnJywg MSk7CitFUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnRz IiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnQxIgorREVU QUlMOiAgRmFpbGluZyByb3cgY29udGFpbnMgKCwgMSwgWzEsIDJdKS4KK0lOU0VSVCBJTlRPIHRl c3RfanNvbmJfY29uc3RyYWludHMgVkFMVUVTICgnMScsIDEpOworRVJST1I6ICBuZXcgcm93IGZv ciByZWxhdGlvbiAidGVzdF9qc29uYl9jb25zdHJhaW50cyIgdmlvbGF0ZXMgY2hlY2sgY29uc3Ry YWludCAidGVzdF9qc29uYl9jb25zdHJhaW50MiIKK0RFVEFJTDogIEZhaWxpbmcgcm93IGNvbnRh aW5zICgxLCAxLCBbMSwgMl0pLgorSU5TRVJUIElOVE8gdGVzdF9qc29uYl9jb25zdHJhaW50cyBW QUxVRVMgKCdbXScpOworRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAidGVzdF9qc29uYl9j b25zdHJhaW50cyIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidGVzdF9qc29uYl9jb25zdHJh aW50MiIKK0RFVEFJTDogIEZhaWxpbmcgcm93IGNvbnRhaW5zIChbXSwgbnVsbCwgWzEsIDJdKS4K K0lOU0VSVCBJTlRPIHRlc3RfanNvbmJfY29uc3RyYWludHMgVkFMVUVTICgneyJiIjogMX0nLCAx KTsKK0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRpb24gInRlc3RfanNvbmJfY29uc3RyYWludHMi IHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRlc3RfanNvbmJfY29uc3RyYWludDIiCitERVRB SUw6ICBGYWlsaW5nIHJvdyBjb250YWlucyAoeyJiIjogMX0sIDEsIFsxLCAyXSkuCitJTlNFUlQg SU5UTyB0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIFZBTFVFUyAoJ3siYSI6IDF9JywgMSk7CitFUlJP UjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIiB2aW9sYXRl cyBjaGVjayBjb25zdHJhaW50ICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnQzIgorREVUQUlMOiAgRmFp bGluZyByb3cgY29udGFpbnMgKHsiYSI6IDF9LCAxLCBbMSwgMl0pLgorSU5TRVJUIElOVE8gdGVz dF9qc29uYl9jb25zdHJhaW50cyBWQUxVRVMgKCd7ImEiOiA3fScsIDEpOworRVJST1I6ICBuZXcg cm93IGZvciByZWxhdGlvbiAidGVzdF9qc29uYl9jb25zdHJhaW50cyIgdmlvbGF0ZXMgY2hlY2sg Y29uc3RyYWludCAidGVzdF9qc29uYl9jb25zdHJhaW50NSIKK0RFVEFJTDogIEZhaWxpbmcgcm93 IGNvbnRhaW5zICh7ImEiOiA3fSwgMSwgWzEsIDJdKS4KK0lOU0VSVCBJTlRPIHRlc3RfanNvbmJf Y29uc3RyYWludHMgVkFMVUVTICgneyJhIjogMTB9JywgMSk7CitFUlJPUjogIG5ldyByb3cgZm9y IHJlbGF0aW9uICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIiB2aW9sYXRlcyBjaGVjayBjb25zdHJh aW50ICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnQ0IgorREVUQUlMOiAgRmFpbGluZyByb3cgY29udGFp bnMgKHsiYSI6IDEwfSwgMSwgWzEsIDJdKS4KK0RST1AgVEFCTEUgdGVzdF9qc29uYl9jb25zdHJh aW50czsKKy0tIFRlc3QgbXV0YWJpbGlseSBvZiBxdWVyeSBmdW5jdGlvbnMKK0NSRUFURSBUQUJM RSB0ZXN0X2pzb25iX211dGFiaWxpdHkoanMganNvbmIsIGIgaW50KTsKK0NSRUFURSBJTkRFWCBP TiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckJykpOworQ1JFQVRFIElO REVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuYVswXScpKTsK K0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICck LmRhdGV0aW1lKCknKSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChK U09OX1FVRVJZKGpzLCAnJC5hID8gKEAgPCAkLmRhdGV0aW1lKCkpJykpOworQ1JFQVRFIElOREVY IE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuYSA/IChALmRhdGV0 aW1lKCkgPCAkLmRhdGV0aW1lKCkpJykpOworRVJST1I6ICBmdW5jdGlvbnMgaW4gaW5kZXggZXhw cmVzc2lvbiBtdXN0IGJlIG1hcmtlZCBJTU1VVEFCTEUKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pz b25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmEgPyAoQC5kYXRldGltZSgpIDwgJC5k YXRldGltZSgiSEg6TUkgVFpIIikpJykpOworRVJST1I6ICBmdW5jdGlvbnMgaW4gaW5kZXggZXhw cmVzc2lvbiBtdXN0IGJlIG1hcmtlZCBJTU1VVEFCTEUKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pz b25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmEgPyAoQC5kYXRldGltZSgiSEg6TUkg VFpIIikgPCAkLmRhdGV0aW1lKCJISDpNSSBUWkgiKSknKSk7CitDUkVBVEUgSU5ERVggT04gdGVz dF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5hID8gKEAuZGF0ZXRpbWUoIkhI Ok1JIikgPCAkLmRhdGV0aW1lKCJZWS1NTS1ERCBISDpNSSIpKScpKTsKK0NSRUFURSBJTkRFWCBP TiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmEgPyAoQC5kYXRldGlt ZSgiSEg6TUkgVFpIIikgPCAkLmRhdGV0aW1lKCJZWS1NTS1ERCBISDpNSSIpKScpKTsKK0VSUk9S OiAgZnVuY3Rpb25zIGluIGluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBtYXJrZWQgSU1NVVRBQkxF CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAn JC5kYXRldGltZSgiSEg6TUkgVFpIIikgPCAkeCcgUEFTU0lORyAnMTI6MzQnOjp0aW1ldHogQVMg eCkpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShq cywgJyQuZGF0ZXRpbWUoIkhIOk1JIFRaSCIpIDwgJHknIFBBU1NJTkcgJzEyOjM0Jzo6dGltZXR6 IEFTIHgpKTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVF UlkoanMsICckLmRhdGV0aW1lKCkgPCAkeCcgUEFTU0lORyAnMTI6MzQnOjp0aW1ldHogQVMgeCkp OworRVJST1I6ICBmdW5jdGlvbnMgaW4gaW5kZXggZXhwcmVzc2lvbiBtdXN0IGJlIG1hcmtlZCBJ TU1VVEFCTEUKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVF UlkoanMsICckLmRhdGV0aW1lKCkgPCAkeCcgUEFTU0lORyAnMTIzNCc6OmludCBBUyB4KSk7CitD UkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5k YXRldGltZSgpID8gKEAgPT0gJHgpJyBQQVNTSU5HICcxMjozNCc6OnRpbWUgQVMgeCkpOworRVJS T1I6ICBmdW5jdGlvbnMgaW4gaW5kZXggZXhwcmVzc2lvbiBtdXN0IGJlIG1hcmtlZCBJTU1VVEFC TEUKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMs ICckLmRhdGV0aW1lKCJZWS1NTS1ERCIpID8gKEAgPT0gJHgpJyBQQVNTSU5HICcyMDIwLTA3LTE0 Jzo6ZGF0ZSBBUyB4KSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChK U09OX1FVRVJZKGpzLCAnJFsxLCAkLmEgPyAoQC5kYXRldGltZSgpID09ICR4KV0nIFBBU1NJTkcg JzEyOjM0Jzo6dGltZSBBUyB4KSk7CitFUlJPUjogIGZ1bmN0aW9ucyBpbiBpbmRleCBleHByZXNz aW9uIG11c3QgYmUgbWFya2VkIElNTVVUQUJMRQorQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJf bXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyRbMSwgMCB0byAkLmEgPyAoQC5kYXRldGltZSgp ID09ICR4KV0nIFBBU1NJTkcgJzEyOjM0Jzo6dGltZSBBUyB4KSk7CitFUlJPUjogIGZ1bmN0aW9u cyBpbiBpbmRleCBleHByZXNzaW9uIG11c3QgYmUgbWFya2VkIElNTVVUQUJMRQorQ1JFQVRFIElO REVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyRbMSwgJC5hID8g KEAuZGF0ZXRpbWUoIkhIOk1JIikgPT0gJHgpXScgUEFTU0lORyAnMTI6MzQnOjp0aW1lIEFTIHgp KTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fVkFMVUUoanMs ICckJyBERUZBVUxUIHJhbmRvbSgpOjppbnQgT04gRVJST1IpKTsKK0VSUk9SOiAgZnVuY3Rpb25z IGluIGluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBtYXJrZWQgSU1NVVRBQkxFCistLSBERUZBVUxU IGV4cHJlc3Npb24KK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIHJldF9zZXRpbnQoKSBSRVRV Uk5TIFNFVE9GIGludGVnZXIgQVMKKyQkCitCRUdJTgorICAgIFJFVFVSTiBRVUVSWSBFWEVDVVRF ICdzZWxlY3QgMSB1bmlvbiBhbGwgc2VsZWN0IDEnOworRU5EOworJCQKK0xBTkdVQUdFIHBscGdz cWwgSU1NVVRBQkxFOworU0VMRUNUIEpTT05fUVVFUlkoanMsICckJyAgUkVUVVJOSU5HIGludCBE RUZBVUxUIHJldF9zZXRpbnQoKSBPTiBFUlJPUikgRlJPTSB0ZXN0X2pzb25iX211dGFiaWxpdHk7 CitFUlJPUjogIERFRkFVTFQgZXhwcmVzc2lvbiBtdXN0IG5vdCByZXR1cm4gYSBzZXQKK0xJTkUg MTogU0VMRUNUIEpTT05fUVVFUlkoanMsICckJyAgUkVUVVJOSU5HIGludCBERUZBVUxUIHJldF9z ZXRpbnQoLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBeCitTRUxFQ1QgSlNPTl9RVUVSWShqcywgJyQnICBSRVRVUk5JTkcgaW50IERF RkFVTFQgYiArIDEgT04gRVJST1IpIEZST00gdGVzdF9qc29uYl9tdXRhYmlsaXR5OworRVJST1I6 ICBERUZBVUxUIGV4cHJlc3Npb24gbXVzdCBub3QgY29udGFpbiBjb2x1bW4gcmVmZXJlbmNlcwor TElORSAxOiBTRUxFQ1QgSlNPTl9RVUVSWShqcywgJyQnICBSRVRVUk5JTkcgaW50IERFRkFVTFQg YiArIDEgT04gRVIuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF4KK1NFTEVDVCBKU09OX1FVRVJZKGpzLCAnJCcgIFJFVFVSTklORyBp bnQgREVGQVVMVCBzdW0oMSkgb3ZlcigpIE9OIEVSUk9SKSBGUk9NIHRlc3RfanNvbmJfbXV0YWJp bGl0eTsKK0VSUk9SOiAgY2FuIG9ubHkgc3BlY2lmeSBjb25zdGFudCwgbm9uLWFnZ3JlZ2F0ZSBm dW5jdGlvbiwgb3Igb3BlcmF0b3IgZXhwcmVzc2lvbiBmb3IgREVGQVVMVAorTElORSAxOiBTRUxF Q1QgSlNPTl9RVUVSWShqcywgJyQnICBSRVRVUk5JTkcgaW50IERFRkFVTFQgc3VtKDEpIG92ZXIu Li4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF4KK1NFTEVDVCBKU09OX1FVRVJZKGpzLCAnJCcgIFJFVFVSTklORyBpbnQgREVGQVVMVCAo U0VMRUNUIDEpIE9OIEVSUk9SKSBGUk9NIHRlc3RfanNvbmJfbXV0YWJpbGl0eTsKK0VSUk9SOiAg Y2FuIG9ubHkgc3BlY2lmeSBjb25zdGFudCwgbm9uLWFnZ3JlZ2F0ZSBmdW5jdGlvbiwgb3Igb3Bl cmF0b3IgZXhwcmVzc2lvbiBmb3IgREVGQVVMVAorTElORSAxOiBTRUxFQ1QgSlNPTl9RVUVSWShq cywgJyQnICBSRVRVUk5JTkcgaW50IERFRkFVTFQgKFNFTEVDVCAxKSAuLi4KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK0RST1AgVEFC TEUgdGVzdF9qc29uYl9tdXRhYmlsaXR5OworRFJPUCBGVU5DVElPTiByZXRfc2V0aW50OworLS0g RXh0ZW5zaW9uOiBub24tY29uc3RhbnQgSlNPTiBwYXRoCitTRUxFQ1QgSlNPTl9FWElTVFMoanNv bmIgJ3siYSI6IDEyM30nLCAnJCcgfHwgJy4nIHx8ICdhJyk7CisganNvbl9leGlzdHMgCistLS0t LS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAneyJhIjog MTIzfScsICckJyB8fCAnLicgfHwgJ2EnKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisg MTIzCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICd7ImEiOiAxMjN9JywgJyQn IHx8ICcuJyB8fCAnYicgREVGQVVMVCAnZm9vJyBPTiBFTVBUWSk7CisganNvbl92YWx1ZSAKKy0t LS0tLS0tLS0tLQorIGZvbworKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAneyJh IjogMTIzfScsICckJyB8fCAnLicgfHwgJ2EnKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0t CisgMTIzCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICd7ImEiOiAxMjN9Jywg JyQnIHx8ICcuJyB8fCAnYScgV0lUSCBXUkFQUEVSKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0t LS0tCisgWzEyM10KKygxIHJvdykKKworLS0gU2hvdWxkIGZhaWwgKGludmFsaWQgcGF0aCkKK1NF TEVDVCBKU09OX1FVRVJZKGpzb25iICd7ImEiOiAxMjN9JywgJ2Vycm9yJyB8fCAnICcgfHwgJ2Vy cm9yJyk7CitFUlJPUjogIHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIgIiBvZiBqc29ucGF0aCBp bnB1dApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKaW5kZXggNmY1YTMzYzIzNC4uZDAxYWQ1 MWQ5NSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCkBAIC0xMDMsNyArMTAzLDcgQEAg dGVzdDogc2VsZWN0X3ZpZXdzIHBvcnRhbHNfcDIgZm9yZWlnbl9rZXkgY2x1c3RlciBkZXBlbmRl bmN5IGd1YyBiaXRtYXBvcHMgY29tYm8KICMgLS0tLS0tLS0tLQogIyBBbm90aGVyIGdyb3VwIG9m IHBhcmFsbGVsIHRlc3RzIChKU09OIHJlbGF0ZWQpCiAjIC0tLS0tLS0tLS0KLXRlc3Q6IGpzb24g anNvbmIganNvbl9lbmNvZGluZyBqc29ucGF0aCBqc29ucGF0aF9lbmNvZGluZyBqc29uYl9qc29u cGF0aCBzcWxqc29uCit0ZXN0OiBqc29uIGpzb25iIGpzb25fZW5jb2RpbmcganNvbnBhdGgganNv bnBhdGhfZW5jb2RpbmcganNvbmJfanNvbnBhdGggc3FsanNvbiBzcWxqc29uX3F1ZXJ5ZnVuY3MK IAogIyAtLS0tLS0tLS0tCiAjIEFub3RoZXIgZ3JvdXAgb2YgcGFyYWxsZWwgdGVzdHMKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NxbGpzb25fcXVlcnlmdW5jcy5zcWwgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9zcWxqc29uX3F1ZXJ5ZnVuY3Muc3FsCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAuLjZmOTM5YzcxMTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9zcWxqc29uX3F1ZXJ5ZnVuY3Muc3FsCkBAIC0wLDAgKzEsMzg2IEBA CistLSBKU09OX0VYSVNUUworCistLSBqc29uIGFyZ3VtZW50cyBjdXJyZW50bHkgbm90IHN1cHBv cnRlZAorU0VMRUNUIEpTT05fRVhJU1RTKE5VTEwgRk9STUFUIEpTT04sICckJyk7CisKK1NFTEVD VCBKU09OX0VYSVNUUyhOVUxMOjpqc29uYiwgJyQnKTsKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29u YiAnW10nLCAnJCcpOworU0VMRUNUIEpTT05fRVhJU1RTKEpTT05fT0JKRUNUKFJFVFVSTklORyBq c29uYiksICckJyk7CisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScsICckJyk7CitTRUxF Q1QgSlNPTl9FWElTVFMoanNvbmIgJ251bGwnLCAnJCcpOworU0VMRUNUIEpTT05fRVhJU1RTKGpz b25iICdbXScsICckJyk7CisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScsICckLmEnKTsK K1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScsICdzdHJpY3QgJC5hJyk7IC0tIEZBTFNFIG9u IGVycm9yCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnc3RyaWN0ICQuYScgRVJST1Ig T04gRVJST1IpOworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICdudWxsJywgJyQuYScpOworU0VM RUNUIEpTT05fRVhJU1RTKGpzb25iICdbXScsICckLmEnKTsKK1NFTEVDVCBKU09OX0VYSVNUUyhq c29uYiAnWzEsICJhYWEiLCB7ImEiOiAxfV0nLCAnc3RyaWN0ICQuYScpOyAtLSBGQUxTRSBvbiBl cnJvcgorU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICdbMSwgImFhYSIsIHsiYSI6IDF9XScsICds YXggJC5hJyk7CitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ3t9JywgJyQuYScpOworU0VMRUNU IEpTT05fRVhJU1RTKGpzb25iICd7ImIiOiAxLCAiYSI6IDJ9JywgJyQuYScpOworCitTRUxFQ1Qg SlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJC5hLmInKTsKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29u YiAneyJhIjogeyJiIjogMX19JywgJyQuYS5iJyk7CitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIg J3siYSI6IDEsICJiIjogMn0nLCAnJC5hLmInKTsKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25i ICd7ImEiOiAxLCAiYiI6IDJ9JywgJyQuKiA/IChAID4gJHgpJyBQQVNTSU5HIDEgQVMgeCk7CitT RUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ3siYSI6IDEsICJiIjogMn0nLCAnJC4qID8gKEAgPiAk eCknIFBBU1NJTkcgJzEnIEFTIHgpOworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICd7ImEiOiAx LCAiYiI6IDJ9JywgJyQuKiA/IChAID4gJHggJiYgQCA8ICR5KScgUEFTU0lORyAwIEFTIHgsIDIg QVMgeSk7CitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ3siYSI6IDEsICJiIjogMn0nLCAnJC4q ID8gKEAgPiAkeCAmJiBAIDwgJHkpJyBQQVNTSU5HIDAgQVMgeCwgMSBBUyB5KTsKKworLS0gZXh0 ZW5zaW9uOiBib29sZWFuIGV4cHJlc3Npb25zCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEn LCAnJCA+IDInKTsKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScsICckLmEgPiAyJyBFUlJP UiBPTiBFUlJPUik7CisKKy0tIEpTT05fVkFMVUUKKworLS0ganNvbiBhcmd1bWVudHMgY3VycmVu dGx5IG5vdCBzdXBwb3J0ZWQKK1NFTEVDVCBKU09OX1ZBTFVFKE5VTEwgRk9STUFUIEpTT04sICck Jyk7CisKK1NFTEVDVCBKU09OX1ZBTFVFKE5VTEw6Ompzb25iLCAnJCcpOworCitTRUxFQ1QgSlNP Tl9WQUxVRShqc29uYiAnbnVsbCcsICckJyk7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVs bCcsICckJyBSRVRVUk5JTkcgaW50KTsKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ3RydWUn LCAnJCcpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ3RydWUnLCAnJCcgUkVUVVJOSU5HIGJv b2wpOworCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMTIzJywgJyQnKTsKK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICcxMjMnLCAnJCcgUkVUVVJOSU5HIGludCkgKyAyMzQ7CitTRUxFQ1QgSlNP Tl9WQUxVRShqc29uYiAnMTIzJywgJyQnIFJFVFVSTklORyB0ZXh0KTsKKy8qIGpzb25iIGJ5dGVh ID8/PyAqLworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEyMycsICckJyBSRVRVUk5JTkcgYnl0 ZWEgRVJST1IgT04gRVJST1IpOworCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMS4yMycsICck Jyk7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMS4yMycsICckJyBSRVRVUk5JTkcgaW50KTsK K1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciMS4yMyInLCAnJCcgUkVUVVJOSU5HIG51bWVyaWMp OworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyIxLjIzIicsICckJyBSRVRVUk5JTkcgaW50IEVS Uk9SIE9OIEVSUk9SKTsKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywgJyQnKTsK K1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgdGV4dCk7CitT RUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGNoYXIoNSkpOwor U0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBjaGFyKDIpKTsK K1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcganNvbik7CitT RUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGpzb25iKTsKK1NF TEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcganNvbiBFUlJPUiBP TiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5H IGpzb25iIEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciXCJhYWFc IiInLCAnJCcgUkVUVVJOSU5HIGpzb24pOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJcImFh YVwiIicsICckJyBSRVRVUk5JTkcganNvbmIpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJh YWEiJywgJyQnIFJFVFVSTklORyBpbnQpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJhYWEi JywgJyQnIFJFVFVSTklORyBpbnQgRVJST1IgT04gRVJST1IpOworU0VMRUNUIEpTT05fVkFMVUUo anNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBpbnQgREVGQVVMVCAxMTEgT04gRVJST1IpOwor U0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyIxMjMiJywgJyQnIFJFVFVSTklORyBpbnQpICsgMjM0 OworCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIjIwMTctMDItMjAiJywgJyQnIFJFVFVSTklO RyBkYXRlKSArIDk7CisKKy0tIFRlc3QgTlVMTCBjaGVja3MgZXhlY3V0aW9uIGluIGRvbWFpbiB0 eXBlcworQ1JFQVRFIERPTUFJTiBzcWxqc29uYl9pbnRfbm90X251bGwgQVMgaW50IE5PVCBOVUxM OworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25i X2ludF9ub3RfbnVsbCk7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckJyBSRVRV Uk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsIEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICdudWxsJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm90X251bGwg REVGQVVMVCAyIE9OIEVNUFRZIEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpz b25iICcxJywgICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm90X251bGwgREVGQVVMVCAy IE9OIEVNUFRZIEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywg ICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm90X251bGwgREVGQVVMVCBOVUxMIE9OIEVN UFRZIEVSUk9SIE9OIEVSUk9SKTsKK0NSRUFURSBUWVBFIHJhaW5ib3cgQVMgRU5VTSAoJ3JlZCcs ICdvcmFuZ2UnLCAneWVsbG93JywgJ2dyZWVuJywgJ2JsdWUnLCAncHVycGxlJyk7CitDUkVBVEUg RE9NQUlOIHJnYiBBUyByYWluYm93IENIRUNLIChWQUxVRSBJTiAoJ3JlZCcsICdncmVlbicsICdi bHVlJykpOworU0VMRUNUIEpTT05fVkFMVUUoJyJwdXJwbGUiJzo6anNvbmIsICdsYXggJFsqXScg UkVUVVJOSU5HIHJnYik7CitTRUxFQ1QgSlNPTl9WQUxVRSgnInB1cnBsZSInOjpqc29uYiwgJ2xh eCAkWypdJyBSRVRVUk5JTkcgcmdiIEVSUk9SIE9OIEVSUk9SKTsKKworU0VMRUNUIEpTT05fVkFM VUUoanNvbmIgJ1tdJywgJyQnKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdbXScsICckJyBF UlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAne30nLCAnJCcpOworU0VM RUNUIEpTT05fVkFMVUUoanNvbmIgJ3t9JywgJyQnIEVSUk9SIE9OIEVSUk9SKTsKKworU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJC5hJyk7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAn MScsICdzdHJpY3QgJC5hJyBFUlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29u YiAnMScsICdzdHJpY3QgJC5hJyBERUZBVUxUICdlcnJvcicgT04gRVJST1IpOworU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJzEnLCAnbGF4ICQuYScgRVJST1IgT04gRVJST1IpOworU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJzEnLCAnbGF4ICQuYScgRVJST1IgT04gRU1QVFkgRVJST1IgT04gRVJS T1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnc3RyaWN0ICQuYScgREVGQVVMVCAy IE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJ2xheCAkLmEnIERFRkFV TFQgMiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICdsYXggJC5hJyBE RUZBVUxUICcyJyBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICdsYXgg JC5hJyBOVUxMIE9OIEVNUFRZIERFRkFVTFQgJzInIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZB TFVFKGpzb25iICcxJywgJ2xheCAkLmEnIERFRkFVTFQgJzInIE9OIEVNUFRZIERFRkFVTFQgJzMn IE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJ2xheCAkLmEnIEVSUk9S IE9OIEVNUFRZIERFRkFVTFQgJzMnIE9OIEVSUk9SKTsKKworU0VMRUNUIEpTT05fVkFMVUUoanNv bmIgJ1sxLDJdJywgJyRbKl0nIEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpz b25iICdbMSwyXScsICckWypdJyBERUZBVUxUICcwJyBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9W QUxVRShqc29uYiAnWyIgIl0nLCAnJFsqXScgUkVUVVJOSU5HIGludCBFUlJPUiBPTiBFUlJPUik7 CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnWyIgIl0nLCAnJFsqXScgUkVUVVJOSU5HIGludCBE RUZBVUxUIDIgKyAzIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdbIjEiXScs ICckWypdJyBSRVRVUk5JTkcgaW50IERFRkFVTFQgMiArIDMgT04gRVJST1IpOworU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJ1siMSJdJywgJyRbKl0nIFJFVFVSTklORyBpbnQgRk9STUFUIEpTT04p OyAtLSBSRVRVUk5JTkcgRk9STUFUIG5vdCBhbGxvd2VkCisKKy0tIFJFVFVHTklORyBwc2V1ZG8t dHlwZXMgbm90IGFsbG93ZWQKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdbIjEiXScsICckWypd JyBSRVRVUk5JTkcgcmVjb3JkKTsKKworU0VMRUNUCisJeCwKKwlKU09OX1ZBTFVFKAorCQlqc29u YiAneyJhIjogMSwgImIiOiAyfScsCisJCSckLiogPyAoQCA+ICR4KScgUEFTU0lORyB4IEFTIHgK KwkJUkVUVVJOSU5HIGludAorCQlERUZBVUxUIC0xIE9OIEVNUFRZCisJCURFRkFVTFQgLTIgT04g RVJST1IKKwkpIHkKK0ZST00KKwlnZW5lcmF0ZV9zZXJpZXMoMCwgMikgeDsKKworU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJ251bGwnLCAnJGEnIFBBU1NJTkcgcG9pbnQgJyAoMSwgMiApJyBBUyBh KTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyRhJyBQQVNTSU5HIHBvaW50ICcg KDEsIDIgKScgQVMgYSBSRVRVUk5JTkcgcG9pbnQpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIg J251bGwnLCAnJGEnIFBBU1NJTkcgcG9pbnQgJyAoMSwgMiApJyBBUyBhIFJFVFVSTklORyBwb2lu dCBFUlJPUiBPTiBFUlJPUik7CisKKy0tIFRlc3QgUEFTU0lORyBhbmQgUkVUVVJOSU5HIGRhdGUv dGltZSB0eXBlcworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5H IHRpbWVzdGFtcHR6ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMpOworU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFtcHR6ICcyMDE4LTAy LTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMgUkVUVVJOSU5HIHRpbWVzdGFtcHR6KTsKK1NFTEVDVCBK U09OX1ZBTFVFKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0eiAnMjAxOC0w Mi0yMSAxMjozNDo1NiArMTAnIEFTIHRzIFJFVFVSTklORyB0aW1lc3RhbXApOworU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIGRhdGUgJzIwMTgtMDItMjEgMTI6 MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcgZGF0ZSk7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29u YiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZSAnMjAxOC0wMi0yMSAxMjozNDo1NiArMTAnIEFT IHRzIFJFVFVSTklORyB0aW1lKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyR0 cycgUEFTU0lORyB0aW1ldHogJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5J TkcgdGltZXR6KTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lO RyB0aW1lc3RhbXAgJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcgdGlt ZXN0YW1wKTsKKworLS0gQWxzbyB0ZXN0IFJFVFVSTklORyBqc29uW2JdCitTRUxFQ1QgSlNPTl9W QUxVRShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEg MTI6MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcganNvbik7CitTRUxFQ1QgSlNPTl9WQUxVRShq c29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6 NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcganNvbmIpOworCistLSBKU09OX1FVRVJZCisKKy0tIGpz b24gYXJndW1lbnRzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkCitTRUxFQ1QgSlNPTl9RVUVSWShO VUxMIEZPUk1BVCBKU09OLCAnJCcpOworCitTRUxFQ1QgSlNPTl9WQUxVRShOVUxMOjpqc29uYiwg JyQnKTsKKworU0VMRUNUCisJSlNPTl9RVUVSWShqcywgJyQnKSwKKwlKU09OX1FVRVJZKGpzLCAn JCcgV0lUSE9VVCBXUkFQUEVSKSwKKwlKU09OX1FVRVJZKGpzLCAnJCcgV0lUSCBDT05ESVRJT05B TCBXUkFQUEVSKSwKKwlKU09OX1FVRVJZKGpzLCAnJCcgV0lUSCBVTkNPTkRJVElPTkFMIEFSUkFZ IFdSQVBQRVIpLAorCUpTT05fUVVFUlkoanMsICckJyBXSVRIIEFSUkFZIFdSQVBQRVIpCitGUk9N CisJKFZBTFVFUworCQkoanNvbmIgJ251bGwnKSwKKwkJKCcxMi4zJyksCisJCSgndHJ1ZScpLAor CQkoJyJhYWEiJyksCisJCSgnWzEsIG51bGwsICIyIl0nKSwKKwkJKCd7ImEiOiAxLCAiYiI6IFsy XX0nKQorCSkgZm9vKGpzKTsKKworU0VMRUNUCisJSlNPTl9RVUVSWShqcywgJ3N0cmljdCAkWypd JykgQVMgInVuc3BlYyIsCisJSlNPTl9RVUVSWShqcywgJ3N0cmljdCAkWypdJyBXSVRIT1VUIFdS QVBQRVIpIEFTICJ3aXRob3V0IiwKKwlKU09OX1FVRVJZKGpzLCAnc3RyaWN0ICRbKl0nIFdJVEgg Q09ORElUSU9OQUwgV1JBUFBFUikgQVMgIndpdGggY29uZCIsCisJSlNPTl9RVUVSWShqcywgJ3N0 cmljdCAkWypdJyBXSVRIIFVOQ09ORElUSU9OQUwgQVJSQVkgV1JBUFBFUikgQVMgIndpdGggdW5j b25kIiwKKwlKU09OX1FVRVJZKGpzLCAnc3RyaWN0ICRbKl0nIFdJVEggQVJSQVkgV1JBUFBFUikg QVMgIndpdGgiCitGUk9NCisJKFZBTFVFUworCQkoanNvbmIgJzEnKSwKKwkJKCdbXScpLAorCQko J1tudWxsXScpLAorCQkoJ1sxMi4zXScpLAorCQkoJ1t0cnVlXScpLAorCQkoJ1siYWFhIl0nKSwK KwkJKCdbWzEsIDIsIDNdXScpLAorCQkoJ1t7ImEiOiAxLCAiYiI6IFsyXX1dJyksCisJCSgnWzEs ICIyIiwgbnVsbCwgWzNdXScpCisJKSBmb28oanMpOworCitTRUxFQ1QgSlNPTl9RVUVSWShqc29u YiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIHRleHQpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIg JyJhYWEiJywgJyQnIFJFVFVSTklORyB0ZXh0IEtFRVAgUVVPVEVTKTsKK1NFTEVDVCBKU09OX1FV RVJZKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgdGV4dCBLRUVQIFFVT1RFUyBPTiBTQ0FM QVIgU1RSSU5HKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciYWFhIicsICckJyBSRVRVUk5J TkcgdGV4dCBPTUlUIFFVT1RFUyk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAn JCcgUkVUVVJOSU5HIHRleHQgT01JVCBRVU9URVMgT04gU0NBTEFSIFNUUklORyk7CitTRUxFQ1Qg SlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAnJCcgT01JVCBRVU9URVMgRVJST1IgT04gRVJST1Ip OworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBqc29uIE9N SVQgUVVPVEVTIEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciYWFh IicsICckJyBSRVRVUk5JTkcgYnl0ZWEgRk9STUFUIEpTT04gT01JVCBRVU9URVMgRVJST1IgT04g RVJST1IpOworCistLSBRVU9URVMgYmVoYXZpb3Igc2hvdWxkIG5vdCBiZSBzcGVjaWZpZWQgd2hl biBXSVRIIFdSQVBQRVIgdXNlZDoKKy0tIFNob3VsZCBmYWlsCitTRUxFQ1QgSlNPTl9RVUVSWShq c29uYiAnWzFdJywgJyQnIFdJVEggV1JBUFBFUiBPTUlUIFFVT1RFUyk7CitTRUxFQ1QgSlNPTl9R VUVSWShqc29uYiAnWzFdJywgJyQnIFdJVEggV1JBUFBFUiBLRUVQIFFVT1RFUyk7CitTRUxFQ1Qg SlNPTl9RVUVSWShqc29uYiAnWzFdJywgJyQnIFdJVEggQ09ORElUSU9OQUwgV1JBUFBFUiBLRUVQ IFFVT1RFUyk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzFdJywgJyQnIFdJVEggQ09ORElU SU9OQUwgV1JBUFBFUiBPTUlUIFFVT1RFUyk7CistLSBTaG91bGQgc3VjY2VlZAorU0VMRUNUIEpT T05fUVVFUlkoanNvbmIgJ1sxXScsICckJyBXSVRIT1VUIFdSQVBQRVIgT01JVCBRVU9URVMpOwor U0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScsICckJyBXSVRIT1VUIFdSQVBQRVIgS0VFUCBR VU9URVMpOworCistLSB0ZXN0IFFVT1RFUyBiZWhhdmlvci4KK1NFTEVDVCBKU09OX1FVRVJZKGpz b25iJ3sicmVjIjogInsxLDIsM30ifScsICckLnJlYycgcmV0dXJuaW5nIGludFtdIG9taXQgcXVv dGVzKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iJ3sicmVjIjogInsxLDIsM30ifScsICckLnJl YycgcmV0dXJuaW5nIGludFtdIGtlZXAgcXVvdGVzKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25i J3sicmVjIjogInsxLDIsM30ifScsICckLnJlYycgcmV0dXJuaW5nIGludFtdIGtlZXAgcXVvdGVz IGVycm9yIG9uIGVycm9yKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iJ3sicmVjIjogIlsxLDJd In0nLCAnJC5yZWMnIHJldHVybmluZyBpbnQ0cmFuZ2Ugb21pdCBxdW90ZXMpOworU0VMRUNUIEpT T05fUVVFUlkoanNvbmIneyJyZWMiOiAiWzEsMl0ifScsICckLnJlYycgcmV0dXJuaW5nIGludDRy YW5nZSBrZWVwIHF1b3Rlcyk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYid7InJlYyI6ICJbMSwy XSJ9JywgJyQucmVjJyAJcmV0dXJuaW5nIGludDRyYW5nZSBrZWVwIHF1b3RlcyBlcnJvciBvbiBl cnJvcik7CisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyk7CitTRUxFQ1Qg SlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScgTlVMTCBPTiBFTVBUWSk7CitTRUxFQ1QgSlNP Tl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScgRU1QVFkgT04gRU1QVFkpOworU0VMRUNUIEpTT05f UVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nIEVNUFRZIEFSUkFZIE9OIEVNUFRZKTsKK1NFTEVDVCBK U09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBFTVBUWSBPQkpFQ1QgT04gRU1QVFkpOworU0VM RUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nIEVSUk9SIE9OIEVNUFRZKTsKK1NFTEVD VCBKU09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBERUZBVUxUICciZW1wdHkiJyBPTiBFTVBU WSk7CisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBFUlJPUiBPTiBFTVBU WSBOVUxMIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBF UlJPUiBPTiBFTVBUWSBFTVBUWSBBUlJBWSBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9RVUVSWShq c29uYiAnW10nLCAnJFsqXScgRVJST1IgT04gRU1QVFkgRU1QVFkgT0JKRUNUIE9OIEVSUk9SKTsK K1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBFUlJPUiBPTiBFTVBUWSBFUlJP UiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScgRVJST1Ig T04gRVJST1IpOworCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJFsqXScgRVJS T1IgT04gRVJST1IpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyRbKl0nIERF RkFVTFQgJyJlbXB0eSInIE9OIEVSUk9SKTsKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sx LDJdJywgJyQnIFJFVFVSTklORyBqc29uKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwy XScsICckJyBSRVRVUk5JTkcganNvbiBGT1JNQVQgSlNPTik7CitTRUxFQ1QgSlNPTl9RVUVSWShq c29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5HIGpzb25iKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpz b25iICdbMSwyXScsICckJyBSRVRVUk5JTkcganNvbmIgRk9STUFUIEpTT04pOworU0VMRUNUIEpT T05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyQnIFJFVFVSTklORyB0ZXh0KTsKK1NFTEVDVCBKU09O X1FVRVJZKGpzb25iICdbMSwyXScsICckJyBSRVRVUk5JTkcgY2hhcigxMCkpOworU0VMRUNUIEpT T05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyQnIFJFVFVSTklORyBjaGFyKDMpKTsKK1NFTEVDVCBK U09OX1FVRVJZKGpzb25iICdbMSwyXScsICckJyBSRVRVUk5JTkcgdGV4dCBGT1JNQVQgSlNPTik7 CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5HIGJ5dGVhKTsK K1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckJyBSRVRVUk5JTkcgYnl0ZWEgRk9S TUFUIEpTT04pOworCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJFsqXScgUkVU VVJOSU5HIGJ5dGVhIEVNUFRZIE9CSkVDVCBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9RVUVSWShq c29uYiAnWzEsMl0nLCAnJFsqXScgUkVUVVJOSU5HIGJ5dGVhIEZPUk1BVCBKU09OIEVNUFRZIE9C SkVDVCBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJFsqXScg UkVUVVJOSU5HIGpzb24gRU1QVFkgT0JKRUNUIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1FVRVJZ KGpzb25iICdbMSwyXScsICckWypdJyBSRVRVUk5JTkcganNvbmIgRU1QVFkgT0JKRUNUIE9OIEVS Uk9SKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMyw0XScsICckWypdJyBSRVRVUk5JTkcg YmlnaW50W10gRU1QVFkgT0JKRUNUIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25i ICciWzMsNF0iJywgJyRbKl0nIFJFVFVSTklORyBiaWdpbnRbXSBFTVBUWSBPQkpFQ1QgT04gRVJS T1IpOworCistLSBSRVRVR05JTkcgcHNldWRvLXR5cGVzIG5vdCBhbGxvd2VkCitTRUxFQ1QgSlNP Tl9RVUVSWShqc29uYiAnWzMsNF0nLCAnJFsqXScgUkVUVVJOSU5HIGFueWFycmF5IEVNUFRZIE9C SkVDVCBPTiBFUlJPUik7CisKK1NFTEVDVAorCXgsIHksCisJSlNPTl9RVUVSWSgKKwkJanNvbmIg J1sxLDIsMyw0LDUsbnVsbF0nLAorCQknJFsqXSA/IChAID49ICR4ICYmIEAgPD0gJHkpJworCQlQ QVNTSU5HIHggQVMgeCwgeSBBUyB5CisJCVdJVEggQ09ORElUSU9OQUwgV1JBUFBFUgorCQlFTVBU WSBBUlJBWSBPTiBFTVBUWQorCSkgbGlzdAorRlJPTQorCWdlbmVyYXRlX3NlcmllcygwLCA0KSB4 LAorCWdlbmVyYXRlX3NlcmllcygwLCA0KSB5OworCistLSByZWNvcmQgdHlwZSByZXR1cm5pbmcg d2l0aCBxdW90ZXMgYmVoYXZpb3IuCitDUkVBVEUgVFlQRSBjb21wX2FiYyBBUyAoYSB0ZXh0LCBi IGludCwgYyB0aW1lc3RhbXApOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIneyJyZWMiOiAiKGFi Yyw0MiwwMS4wMi4yMDAzKSJ9JywgJyQucmVjJyByZXR1cm5pbmcgY29tcF9hYmMgb21pdCBxdW90 ZXMpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIneyJyZWMiOiAiKGFiYyw0MiwwMS4wMi4yMDAz KSJ9JywgJyQucmVjJyByZXR1cm5pbmcgY29tcF9hYmMga2VlcCBxdW90ZXMpOworU0VMRUNUIEpT T05fUVVFUlkoanNvbmIneyJyZWMiOiAiKGFiYyw0MiwwMS4wMi4yMDAzKSJ9JywgJyQucmVjJyBy ZXR1cm5pbmcgY29tcF9hYmMga2VlcCBxdW90ZXMgZXJyb3Igb24gZXJyb3IpOworRFJPUCBUWVBF IGNvbXBfYWJjOworCistLSBFeHRlbnNpb246IHJlY29yZCB0eXBlcyByZXR1cm5pbmcKK0NSRUFU RSBUWVBFIHNxbGpzb25iX3JlYyBBUyAoYSBpbnQsIHQgdGV4dCwganMganNvbiwgamIganNvbmIs IGpzYSBqc29uW10pOworQ1JFQVRFIFRZUEUgc3FsanNvbmJfcmVjYSBBUyAocmVjYSBzcWxqc29u Yl9yZWNbXSk7CisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbeyJhIjogMSwgImIiOiAiZm9v IiwgInQiOiAiYWFhIiwgImpzIjogWzEsICIyIiwge31dLCAiamIiOiB7IngiOiBbMSwgIjIiLCB7 fV19fSwgIHsiYSI6IDJ9XScsICckWzBdJyBSRVRVUk5JTkcgc3FsanNvbmJfcmVjKTsKK1NFTEVD VCBKU09OX1FVRVJZKGpzb25iICdbeyJhIjogImEiLCAiYiI6ICJmb28iLCAidCI6ICJhYWEiLCAi anMiOiBbMSwgIjIiLCB7fV0sICJqYiI6IHsieCI6IFsxLCAiMiIsIHt9XX19LCAgeyJhIjogMn1d JywgJyRbMF0nIFJFVFVSTklORyBzcWxqc29uYl9yZWMgRVJST1IgT04gRVJST1IpOworU0VMRUNU IEpTT05fUVVFUlkoanNvbmIgJ1t7ImEiOiAiYSIsICJiIjogImZvbyIsICJ0IjogImFhYSIsICJq cyI6IFsxLCAiMiIsIHt9XSwgImpiIjogeyJ4IjogWzEsICIyIiwge31dfX0sICB7ImEiOiAyfV0n LCAnJFswXScgUkVUVVJOSU5HIHNxbGpzb25iX3JlYyk7CitTRUxFQ1QgKiBGUk9NIHVubmVzdCgo SlNPTl9RVUVSWShqc29uYiAneyJqc2EiOiAgW3siYSI6IDEsICJiIjogWyJmb28iXX0sIHsiYSI6 IDIsICJjIjoge319LCAxMjNdfScsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfcmVjKSkuanNhKTsK K1NFTEVDVCAqIEZST00gdW5uZXN0KChKU09OX1FVRVJZKGpzb25iICd7InJlY2EiOiBbeyJhIjog MSwgInQiOiBbImZvbyIsIFtdXX0sIHsiYSI6IDIsICJqYiI6IFt7fSwgdHJ1ZV19XX0nLCAnJCcg UkVUVVJOSU5HIHNxbGpzb25iX3JlY2EpKS5yZWNhKTsKKworU0VMRUNUIEpTT05fUVVFUlkoanNv bmIgJ1t7ImEiOiAxLCAiYiI6ICJmb28iLCAidCI6ICJhYWEiLCAianMiOiBbMSwgIjIiLCB7fV0s ICJqYiI6IHsieCI6IFsxLCAiMiIsIHt9XX19LCAgeyJhIjogMn1dJywgJyRbMF0nIFJFVFVSTklO RyBqc29ucGF0aCk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW3siYSI6IDEsICJiIjogImZv byIsICJ0IjogImFhYSIsICJqcyI6IFsxLCAiMiIsIHt9XSwgImpiIjogeyJ4IjogWzEsICIyIiwg e31dfX0sICB7ImEiOiAyfV0nLCAnJFswXScgUkVUVVJOSU5HIGpzb25wYXRoIEVSUk9SIE9OIEVS Uk9SKTsKKworLS0gRXh0ZW5zaW9uOiBhcnJheSB0eXBlcyByZXR1cm5pbmcKK1NFTEVDVCBKU09O X1FVRVJZKGpzb25iICdbMSwyLG51bGwsIjMiXScsICckWypdJyBSRVRVUk5JTkcgaW50W10gV0lU SCBXUkFQUEVSKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyLG51bGwsImEiXScsICck WypdJyBSRVRVUk5JTkcgaW50W10gV0lUSCBXUkFQUEVSIEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVD VCBKU09OX1FVRVJZKGpzb25iICdbMSwyLG51bGwsImEiXScsICckWypdJyBSRVRVUk5JTkcgaW50 W10gV0lUSCBXUkFQUEVSKTsKK1NFTEVDVCAqIEZST00gdW5uZXN0KEpTT05fUVVFUlkoanNvbmIg J1t7ImEiOiAxLCAidCI6IFsiZm9vIiwgW11dfSwgeyJhIjogMiwgImpiIjogW3t9LCB0cnVlXX1d JywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9yZWNbXSkpOworCistLSBFeHRlbnNpb246IGRvbWFp biB0eXBlcyByZXR1cm5pbmcKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICd7ImEiOiAxfScsICck LmEnIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm90X251bGwpOworU0VMRUNUIEpTT05fUVVFUlko anNvbmIgJ3siYSI6IDF9JywgJyQuYicgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCk7 CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAneyJhIjogMX0nLCAnJC5iJyBSRVRVUk5JTkcgc3Fs anNvbmJfaW50X25vdF9udWxsIEVSUk9SIE9OIEVSUk9SKTsKKworLS0gVGVzdCB0aW1lc3RhbXB0 eiBwYXNzaW5nIGFuZCBvdXRwdXQKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdudWxsJywgJyR0 cycgUEFTU0lORyB0aW1lc3RhbXB0eiAnMjAxOC0wMi0yMSAxMjozNDo1NiArMTAnIEFTIHRzKTsK K1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0 eiAnMjAxOC0wMi0yMSAxMjozNDo1NiArMTAnIEFTIHRzIFJFVFVSTklORyBqc29uKTsKK1NFTEVD VCBKU09OX1FVRVJZKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0eiAnMjAx OC0wMi0yMSAxMjozNDo1NiArMTAnIEFTIHRzIFJFVFVSTklORyBqc29uYik7CisKKy0tIFRlc3Qg Y29uc3RyYWludHMKKworQ1JFQVRFIFRBQkxFIHRlc3RfanNvbmJfY29uc3RyYWludHMgKAorCWpz IHRleHQsCisJaSBpbnQsCisJeCBqc29uYiBERUZBVUxUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJd JywgJyRbKl0nIFdJVEggV1JBUFBFUikKKwlDT05TVFJBSU5UIHRlc3RfanNvbmJfY29uc3RyYWlu dDEKKwkJQ0hFQ0sgKGpzIElTIEpTT04pCisJQ09OU1RSQUlOVCB0ZXN0X2pzb25iX2NvbnN0cmFp bnQyCisJCUNIRUNLIChKU09OX0VYSVNUUyhqczo6anNvbmIsICckLmEnIFBBU1NJTkcgaSArIDUg QVMgaW50LCBpOjp0ZXh0IEFTIHR4dCwgYXJyYXlbMSwyLDNdIGFzIGFycikpCisJQ09OU1RSQUlO VCB0ZXN0X2pzb25iX2NvbnN0cmFpbnQzCisJCUNIRUNLIChKU09OX1ZBTFVFKGpzOjpqc29uYiwg JyQuYScgUkVUVVJOSU5HIGludCBERUZBVUxUICcxMicgT04gRU1QVFkgRVJST1IgT04gRVJST1Ip ID4gaSkKKwlDT05TVFJBSU5UIHRlc3RfanNvbmJfY29uc3RyYWludDQKKwkJQ0hFQ0sgKEpTT05f UVVFUlkoanM6Ompzb25iLCAnJC5hJyBXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIgRU1QVFkgT0JK RUNUIE9OIEVSUk9SKSA8IGpzb25iICdbMTBdJykKKwlDT05TVFJBSU5UIHRlc3RfanNvbmJfY29u c3RyYWludDUKKwkJQ0hFQ0sgKEpTT05fUVVFUlkoanM6Ompzb25iLCAnJC5hJyBSRVRVUk5JTkcg Y2hhcig1KSBPTUlUIFFVT1RFUyBFTVBUWSBBUlJBWSBPTiBFTVBUWSkgPiAgJ2EnIENPTExBVEUg IkMiKQorKTsKKworXGQgdGVzdF9qc29uYl9jb25zdHJhaW50cworCitTRUxFQ1QgY2hlY2tfY2xh dXNlCitGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS5jaGVja19jb25zdHJhaW50cworV0hFUkUgY29u c3RyYWludF9uYW1lIExJS0UgJ3Rlc3RfanNvbmJfY29uc3RyYWludCUnCitPUkRFUiBCWSAxOwor CitTRUxFQ1QgcGdfZ2V0X2V4cHIoYWRiaW4sIGFkcmVsaWQpCitGUk9NIHBnX2F0dHJkZWYKK1dI RVJFIGFkcmVsaWQgPSAndGVzdF9qc29uYl9jb25zdHJhaW50cyc6OnJlZ2NsYXNzCitPUkRFUiBC WSAxOworCitJTlNFUlQgSU5UTyB0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIFZBTFVFUyAoJycsIDEp OworSU5TRVJUIElOVE8gdGVzdF9qc29uYl9jb25zdHJhaW50cyBWQUxVRVMgKCcxJywgMSk7CitJ TlNFUlQgSU5UTyB0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIFZBTFVFUyAoJ1tdJyk7CitJTlNFUlQg SU5UTyB0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIFZBTFVFUyAoJ3siYiI6IDF9JywgMSk7CitJTlNF UlQgSU5UTyB0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIFZBTFVFUyAoJ3siYSI6IDF9JywgMSk7CitJ TlNFUlQgSU5UTyB0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIFZBTFVFUyAoJ3siYSI6IDd9JywgMSk7 CitJTlNFUlQgSU5UTyB0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIFZBTFVFUyAoJ3siYSI6IDEwfScs IDEpOworCitEUk9QIFRBQkxFIHRlc3RfanNvbmJfY29uc3RyYWludHM7CisKKy0tIFRlc3QgbXV0 YWJpbGlseSBvZiBxdWVyeSBmdW5jdGlvbnMKK0NSRUFURSBUQUJMRSB0ZXN0X2pzb25iX211dGFi aWxpdHkoanMganNvbmIsIGIgaW50KTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFi aWxpdHkgKEpTT05fUVVFUlkoanMsICckJykpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJf bXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuYVswXScpKTsKK0NSRUFURSBJTkRFWCBPTiB0 ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmRhdGV0aW1lKCknKSk7CitD UkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5h ID8gKEAgPCAkLmRhdGV0aW1lKCkpJykpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0 YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuYSA/IChALmRhdGV0aW1lKCkgPCAkLmRhdGV0aW1l KCkpJykpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVS WShqcywgJyQuYSA/IChALmRhdGV0aW1lKCkgPCAkLmRhdGV0aW1lKCJISDpNSSBUWkgiKSknKSk7 CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAn JC5hID8gKEAuZGF0ZXRpbWUoIkhIOk1JIFRaSCIpIDwgJC5kYXRldGltZSgiSEg6TUkgVFpIIikp JykpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShq cywgJyQuYSA/IChALmRhdGV0aW1lKCJISDpNSSIpIDwgJC5kYXRldGltZSgiWVktTU0tREQgSEg6 TUkiKSknKSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FV RVJZKGpzLCAnJC5hID8gKEAuZGF0ZXRpbWUoIkhIOk1JIFRaSCIpIDwgJC5kYXRldGltZSgiWVkt TU0tREQgSEg6TUkiKSknKSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5 IChKU09OX1FVRVJZKGpzLCAnJC5kYXRldGltZSgiSEg6TUkgVFpIIikgPCAkeCcgUEFTU0lORyAn MTI6MzQnOjp0aW1ldHogQVMgeCkpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJp bGl0eSAoSlNPTl9RVUVSWShqcywgJyQuZGF0ZXRpbWUoIkhIOk1JIFRaSCIpIDwgJHknIFBBU1NJ TkcgJzEyOjM0Jzo6dGltZXR6IEFTIHgpKTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211 dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmRhdGV0aW1lKCkgPCAkeCcgUEFTU0lORyAnMTI6 MzQnOjp0aW1ldHogQVMgeCkpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0 eSAoSlNPTl9RVUVSWShqcywgJyQuZGF0ZXRpbWUoKSA8ICR4JyBQQVNTSU5HICcxMjM0Jzo6aW50 IEFTIHgpKTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVF UlkoanMsICckLmRhdGV0aW1lKCkgPyAoQCA9PSAkeCknIFBBU1NJTkcgJzEyOjM0Jzo6dGltZSBB UyB4KSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZ KGpzLCAnJC5kYXRldGltZSgiWVktTU0tREQiKSA/IChAID09ICR4KScgUEFTU0lORyAnMjAyMC0w Ny0xNCc6OmRhdGUgQVMgeCkpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0 eSAoSlNPTl9RVUVSWShqcywgJyRbMSwgJC5hID8gKEAuZGF0ZXRpbWUoKSA9PSAkeCldJyBQQVNT SU5HICcxMjozNCc6OnRpbWUgQVMgeCkpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0 YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyRbMSwgMCB0byAkLmEgPyAoQC5kYXRldGltZSgpID09 ICR4KV0nIFBBU1NJTkcgJzEyOjM0Jzo6dGltZSBBUyB4KSk7CitDUkVBVEUgSU5ERVggT04gdGVz dF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJFsxLCAkLmEgPyAoQC5kYXRldGlt ZSgiSEg6TUkiKSA9PSAkeCldJyBQQVNTSU5HICcxMjozNCc6OnRpbWUgQVMgeCkpOworQ1JFQVRF IElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9WQUxVRShqcywgJyQnIERFRkFV TFQgcmFuZG9tKCk6OmludCBPTiBFUlJPUikpOworCistLSBERUZBVUxUIGV4cHJlc3Npb24KK0NS RUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIHJldF9zZXRpbnQoKSBSRVRVUk5TIFNFVE9GIGludGVn ZXIgQVMKKyQkCitCRUdJTgorICAgIFJFVFVSTiBRVUVSWSBFWEVDVVRFICdzZWxlY3QgMSB1bmlv biBhbGwgc2VsZWN0IDEnOworRU5EOworJCQKK0xBTkdVQUdFIHBscGdzcWwgSU1NVVRBQkxFOwor U0VMRUNUIEpTT05fUVVFUlkoanMsICckJyAgUkVUVVJOSU5HIGludCBERUZBVUxUIHJldF9zZXRp bnQoKSBPTiBFUlJPUikgRlJPTSB0ZXN0X2pzb25iX211dGFiaWxpdHk7CitTRUxFQ1QgSlNPTl9R VUVSWShqcywgJyQnICBSRVRVUk5JTkcgaW50IERFRkFVTFQgYiArIDEgT04gRVJST1IpIEZST00g dGVzdF9qc29uYl9tdXRhYmlsaXR5OworU0VMRUNUIEpTT05fUVVFUlkoanMsICckJyAgUkVUVVJO SU5HIGludCBERUZBVUxUIHN1bSgxKSBvdmVyKCkgT04gRVJST1IpIEZST00gdGVzdF9qc29uYl9t dXRhYmlsaXR5OworU0VMRUNUIEpTT05fUVVFUlkoanMsICckJyAgUkVUVVJOSU5HIGludCBERUZB VUxUIChTRUxFQ1QgMSkgT04gRVJST1IpIEZST00gdGVzdF9qc29uYl9tdXRhYmlsaXR5OworRFJP UCBUQUJMRSB0ZXN0X2pzb25iX211dGFiaWxpdHk7CitEUk9QIEZVTkNUSU9OIHJldF9zZXRpbnQ7 CisKKy0tIEV4dGVuc2lvbjogbm9uLWNvbnN0YW50IEpTT04gcGF0aAorU0VMRUNUIEpTT05fRVhJ U1RTKGpzb25iICd7ImEiOiAxMjN9JywgJyQnIHx8ICcuJyB8fCAnYScpOworU0VMRUNUIEpTT05f VkFMVUUoanNvbmIgJ3siYSI6IDEyM30nLCAnJCcgfHwgJy4nIHx8ICdhJyk7CitTRUxFQ1QgSlNP Tl9WQUxVRShqc29uYiAneyJhIjogMTIzfScsICckJyB8fCAnLicgfHwgJ2InIERFRkFVTFQgJ2Zv bycgT04gRU1QVFkpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDEyM30nLCAnJCcg fHwgJy4nIHx8ICdhJyk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAneyJhIjogMTIzfScsICck JyB8fCAnLicgfHwgJ2EnIFdJVEggV1JBUFBFUik7CistLSBTaG91bGQgZmFpbCAoaW52YWxpZCBw YXRoKQorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDEyM30nLCAnZXJyb3InIHx8ICcg JyB8fCAnZXJyb3InKTsKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggN2U4NjZlM2MzZC4u YTZiZTZmNzg3NCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QK KysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTEyNTYsNiArMTI1Niw3 IEBAIEpvaW4KIEpvaW5Db3N0V29ya3NwYWNlCiBKb2luRG9tYWluCiBKb2luRXhwcgorSnNvbkZ1 bmNFeHByCiBKb2luSGFzaEVudHJ5CiBKb2luUGF0aAogSm9pblBhdGhFeHRyYURhdGEKQEAgLTEy NjYsMTggKzEyNjcsMjggQEAgSnNPYmplY3QKIEpzVmFsdWUKIEpzb25BZ2dDb25zdHJ1Y3Rvcgog SnNvbkFnZ1N0YXRlCitKc29uQXJndW1lbnQKIEpzb25BcnJheUFnZwogSnNvbkFycmF5Q29uc3Ry dWN0b3IKIEpzb25BcnJheVF1ZXJ5Q29uc3RydWN0b3IKIEpzb25CYXNlT2JqZWN0SW5mbworSnNv bkJlaGF2aW9yCitKc29uQmVoYXZpb3JUeXBlCitKc29uQ29lcmNpb24KIEpzb25Db25zdHJ1Y3Rv ckV4cHIKIEpzb25Db25zdHJ1Y3RvckV4cHJTdGF0ZQogSnNvbkNvbnN0cnVjdG9yVHlwZQogSnNv bkVuY29kaW5nCitKc29uRXhwcgorSnNvbkV4cHJPcAorSnNvbkV4cHJQb3N0RXZhbFN0YXRlCitK c29uRXhwclN0YXRlCiBKc29uRm9ybWF0CiBKc29uRm9ybWF0VHlwZQogSnNvbkhhc2hFbnRyeQog SnNvbklzUHJlZGljYXRlCitKc29uSXRlbUNvZXJjaW9uCitKc29uSXRlbVR5cGUKIEpzb25JdGVy YXRlU3RyaW5nVmFsdWVzQWN0aW9uCiBKc29uS2V5VmFsdWUKIEpzb25MZXhDb250ZXh0CkBAIC0x Mjk1LDYgKzEzMDYsNyBAQCBKc29uUGFyc2VDb250ZXh0CiBKc29uUGFyc2VFcnJvclR5cGUKIEpz b25QYXRoCiBKc29uUGF0aEJvb2wKK0pzb25QYXRoRGF0YXR5cGVTdGF0dXMKIEpzb25QYXRoRXhl Y0NvbnRleHQKIEpzb25QYXRoRXhlY1Jlc3VsdAogSnNvblBhdGhHaW5BZGRQYXRoSXRlbUZ1bmMK QEAgLTEzMDcsMTAgKzEzMTksMTUgQEAgSnNvblBhdGhHaW5QYXRoSXRlbQogSnNvblBhdGhJdGVt CiBKc29uUGF0aEl0ZW1UeXBlCiBKc29uUGF0aEtleXdvcmQKK0pzb25QYXRoTXV0YWJsZUNvbnRl eHQKIEpzb25QYXRoUGFyc2VJdGVtCiBKc29uUGF0aFBhcnNlUmVzdWx0CiBKc29uUGF0aFByZWRp Y2F0ZUNhbGxiYWNrCiBKc29uUGF0aFN0cmluZworSnNvblBhdGhWYXJpYWJsZQorSnNvblBhdGhW YXJpYWJsZUV2YWxDb250ZXh0CitKc29uUGF0aFZhckNhbGxiYWNrCitKc29uUXVvdGVzCiBKc29u UmV0dXJuaW5nCiBKc29uU2NhbGFyRXhwcgogSnNvblNlbUFjdGlvbgpAQCAtMTMyNyw2ICsxMzQ0 LDcgQEAgSnNvblZhbHVlRXhwcgogSnNvblZhbHVlTGlzdAogSnNvblZhbHVlTGlzdEl0ZXJhdG9y CiBKc29uVmFsdWVUeXBlCitKc29uV3JhcHBlcgogSnNvbmIKIEpzb25iQWdnU3RhdGUKIEpzb25i Q29udGFpbmVyCi0tIAoyLjM1LjMKCg== --00000000000096e04e060fb0cf2d Content-Type: application/octet-stream; name="v38-0003-JSON_TABLE.patch" Content-Disposition: attachment; filename="v38-0003-JSON_TABLE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lrrnequt0 RnJvbSBlZDEzNmJhYjQ4ODc5MzUwZjFmYjJmMzA4NjE0NGJiNDc5OTlhNWFiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgMTggSmFuIDIwMjQgMTg6MDA6MDYgKzA5MDAKU3ViamVjdDogW1BBVENIIHYz OCAzLzNdIEpTT05fVEFCTEUKTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3Bs YWluOyBjaGFyc2V0PVVURi04CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKClRoaXMg ZmVhdHVyZSBhbGxvd3MganNvbmIgZGF0YSB0byBiZSB0cmVhdGVkIGFzIGEgdGFibGUgYW5kIHRo dXMKdXNlZCBpbiBhIEZST00gY2xhdXNlIGxpa2Ugb3RoZXIgdGFidWxhciBkYXRhLiBEYXRhIGNh biBiZSBzZWxlY3RlZApmcm9tIHRoZSBqc29uYiB1c2luZyBqc29ucGF0aCBleHByZXNzaW9ucywg YW5kIGhvaXN0ZWQgb3V0IG9mIG5lc3RlZApzdHJ1Y3R1cmVzIGluIHRoZSBqc29uYiB0byBmb3Jt IG11bHRpcGxlIHJvd3MsIG1vcmUgb3IgbGVzcyBsaWtlIGFuCm91dGVyIGpvaW4uCgpUaGlzIGFs c28gYWRkcyB0aGUgUExBTiBjbGF1c2VzIGZvciBKU09OX1RBQkxFLCB3aGljaCBhbGxvdyB0aGUg dXNlcgp0byBzcGVjaWZ5IGhvdyBkYXRhIGZyb20gbmVzdGVkIHBhdGhzIGFyZSBqb2luZWQsIGFs bG93aW5nCmNvbnNpZGVyYWJsZSBmcmVlZG9tIGluIHNoYXBpbmcgdGhlIHRhYnVsYXIgb3V0cHV0 IG9mIEpTT05fVEFCTEUuClBMQU4gREVGQVVMVCBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSB0 aGUgZ2xvYmFsIHN0cmF0ZWdpZXMgd2hlbgpkZWFsaW5nIHdpdGggc2libGluZyBvciBjaGlsZCBu ZXN0ZWQgcGF0aHMuIFRoZSBpcyBvZnRlbiBzdWZmaWNpZW50CnRvIGFjaGlldmUgdGhlIG5lY2Vz c2FyeSBnb2FsLCBhbmQgaXMgY29uc2lkZXJhYmx5IHNpbXBsZXIgdGhhbiB0aGUKZnVsbCBQTEFO IGNsYXVzZSwgd2hpY2ggYWxsb3dzIHRoZSB1c2VyIHRvIHNwZWNpZnkgdGhlIHN0cmF0ZWd5IHRv IGJlCnVzZWQgZm9yIGVhY2ggbmFtZWQgbmVzdGVkIHBhdGguCgpBdXRob3I6IE5pa2l0YSBHbHVr aG92IDxuLmdsdWhvdkBwb3N0Z3Jlc3Byby5ydT4KQXV0aG9yOiBUZW9kb3IgU2lnYWV2IDx0ZW9k b3JAc2lnYWV2LnJ1PgpBdXRob3I6IE9sZWcgQmFydHVub3YgPG9iYXJ0dW5vdkBnbWFpbC5jb20+ CkF1dGhvcjogQWxleGFuZGVyIEtvcm90a292IDxhZWtvcm90a292QGdtYWlsLmNvbT4KQXV0aG9y OiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5lLm5ldD4KQXV0aG9yOiBBbWl0IExhbmdv dGUgPGFtaXRsYW5nb3RlMDlAZ21haWwuY29tPgpBdXRob3I6IEppYW4gSGUgPGppYW4udW5pdmVy c2FsaXR5QGdtYWlsLmNvbT4KClJldmlld2VycyBoYXZlIGluY2x1ZGVkIChpbiBubyBwYXJ0aWN1 bGFyIG9yZGVyKSBBbmRyZXMgRnJldW5kLCBBbGV4YW5kZXIKS29yb3Rrb3YsIFBhdmVsIFN0ZWh1 bGUsIEFuZHJldyBBbHN1cCwgRXJpayBSaWprZXJzLCBaaWhvbmcgWXUsCkhpbWFuc2h1IFVwYWRo eWF5YSwgRGFuaWVsIEd1c3RhZnNzb24sIEp1c3RpbiBQcnl6YnksIMOBbHZhcm8gSGVycmVyYSwK amlhbiBoZQoKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9jZDBiYjkzNS0wMTU4LTc4 YTctMDhiNS05MDQ4ODZkZWFjNGJAcG9zdGdyZXNwcm8ucnUKRGlzY3Vzc2lvbjogaHR0cHM6Ly9w b3N0Z3IuZXMvbS8yMDIyMDYxNjIzMzEzMC5ycGFyaXZhZmlwdDZkb2ozQGFsYXAzLmFuYXJhemVs LmRlCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vYWJkOWI4M2ItYWE2Ni1mMjMwLTNk NmQtNzM0ODE3ZjA5OTVkJTQwcG9zdGdyZXNxbC5vcmcKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0 Z3IuZXMvbS9DQStIaXdxRTRYVGRmYjFuVz1Pam95X3RRU1JoWXQtcV9rYjZpNWQ0eGNLeXJMQzFO YmdAbWFpbC5nbWFpbC5jb20KLS0tCiBkb2Mvc3JjL3NnbWwvZnVuYy5zZ21sICAgICAgICAgICAg ICAgICAgICAgICAgfCAgNTEwICsrKysrKysKIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3FsX2ZlYXR1 cmVzLnR4dCAgICAgICAgICB8ICAgIDYgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBy SW50ZXJwLmMgICAgICAgICB8ICAgIDYgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVRhYmxl RnVuY3NjYW4uYyAgICAgIHwgICAyNyArLQogc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMg ICAgICAgICAgICAgICAgIHwgIDEwOCArKwogc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMg ICAgICAgICAgICAgICAgIHwgICAzOCArCiBzcmMvYmFja2VuZC9wYXJzZXIvTWFrZWZpbGUgICAg ICAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgICAgICAg ICAgICAgICAgICAgICB8ICAyOTkgKysrLQogc3JjL2JhY2tlbmQvcGFyc2VyL21lc29uLmJ1aWxk ICAgICAgICAgICAgICAgIHwgICAgMSArCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfY2xhdXNl LmMgICAgICAgICAgICAgfCAgIDE0ICstCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5j ICAgICAgICAgICAgICAgfCAgIDUzICstCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfanNvbnRh YmxlLmMgICAgICAgICAgfCAgNzE4ICsrKysrKysrKysKIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJz ZV9yZWxhdGlvbi5jICAgICAgICAgICB8ICAgIDggKy0KIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJz ZV90YXJnZXQuYyAgICAgICAgICAgICB8ICAgIDMgKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pz b25wYXRoX2V4ZWMuYyAgICAgICAgIHwgIDU0NyArKysrKysrKwogc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3J1bGV1dGlscy5jICAgICAgICAgICAgIHwgIDI3OSArKystCiBzcmMvaW5jbHVkZS9ub2Rl cy9leGVjbm9kZXMuaCAgICAgICAgICAgICAgICAgfCAgICAyICsKIHNyYy9pbmNsdWRlL25vZGVz L21ha2VmdW5jcy5oICAgICAgICAgICAgICAgICB8ICAgIDkgKwogc3JjL2luY2x1ZGUvbm9kZXMv cGFyc2Vub2Rlcy5oICAgICAgICAgICAgICAgIHwgIDEwOSArKwogc3JjL2luY2x1ZGUvbm9kZXMv cHJpbW5vZGVzLmggICAgICAgICAgICAgICAgIHwgICA2MCArLQogc3JjL2luY2x1ZGUvcGFyc2Vy L2t3bGlzdC5oICAgICAgICAgICAgICAgICAgIHwgICAgNCArCiBzcmMvaW5jbHVkZS9wYXJzZXIv cGFyc2VfY2xhdXNlLmggICAgICAgICAgICAgfCAgICAzICsKIHNyYy9pbmNsdWRlL3V0aWxzL2pz b25wYXRoLmggICAgICAgICAgICAgICAgICB8ICAgIDMgKwogc3JjL2ludGVyZmFjZXMvZWNwZy90 ZXN0L2VjcGdfc2NoZWR1bGUgICAgICAgIHwgICAgMSArCiAuLi4vdGVzdC9leHBlY3RlZC9zcWwt c3FsanNvbl9qc29udGFibGUuYyAgICAgfCAgMTMyICsrCiAuLi4vZXhwZWN0ZWQvc3FsLXNxbGpz b25fanNvbnRhYmxlLnN0ZGVyciAgICAgfCAgIDIwICsKIC4uLi9leHBlY3RlZC9zcWwtc3FsanNv bl9qc29udGFibGUuc3Rkb3V0ICAgICB8ICAgIDAKIHNyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9z cWwvTWFrZWZpbGUgICAgICAgICB8ICAgIDEgKwogc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L3Nx bC9tZXNvbi5idWlsZCAgICAgIHwgICAgMSArCiAuLi4vZWNwZy90ZXN0L3NxbC9zcWxqc29uX2pz b250YWJsZS5wZ2MgICAgICAgfCAgIDMyICsKIC4uLi9yZWdyZXNzL2V4cGVjdGVkL3NxbGpzb25f anNvbnRhYmxlLm91dCAgICB8IDEyMDggKysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jl c3MvcGFyYWxsZWxfc2NoZWR1bGUgICAgICAgICAgICB8ICAgIDIgKy0KIHNyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3NxbGpzb25fanNvbnRhYmxlLnNxbCAgICB8ICA2ODYgKysrKysrKysrKwogc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAxNiArCiAzNCBmaWxl cyBjaGFuZ2VkLCA0ODYwIGluc2VydGlvbnMoKyksIDQ3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9qc29udGFibGUuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9leHBlY3RlZC9zcWwtc3FsanNvbl9q c29udGFibGUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9l eHBlY3RlZC9zcWwtc3FsanNvbl9qc29udGFibGUuc3RkZXJyCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L2V4cGVjdGVkL3NxbC1zcWxqc29uX2pzb250YWJsZS5z dGRvdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3Qvc3FsL3Nx bGpzb25fanNvbnRhYmxlLnBnYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvc3FsanNvbl9qc29udGFibGUub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rl c3QvcmVncmVzcy9zcWwvc3FsanNvbl9qc29udGFibGUuc3FsCgpkaWZmIC0tZ2l0IGEvZG9jL3Ny Yy9zZ21sL2Z1bmMuc2dtbCBiL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKaW5kZXggMmZhYTljYjhj Ny4uMzYxYjc3NGY3NyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAorKysgYi9k b2Mvc3JjL3NnbWwvZnVuYy5zZ21sCkBAIC0xODM4OCw2ICsxODM4OCw1MTYgQEAgJC4qID8gKEAg bGlrZV9yZWdleCAiXlxcZCskIikKICAgIDwvdGdyb3VwPgogICA8L3RhYmxlPgogICA8L3NlY3Qy PgorCisgPHNlY3QyIGlkPSJmdW5jdGlvbnMtc3FsanNvbi10YWJsZSI+CisgIDx0aXRsZT5KU09O X1RBQkxFPC90aXRsZT4KKyAgPGluZGV4dGVybT4KKyAgIDxwcmltYXJ5Pmpzb25fdGFibGU8L3By aW1hcnk+CisgIDwvaW5kZXh0ZXJtPgorCisgIDxwYXJhPgorICAgPGZ1bmN0aW9uPmpzb25fdGFi bGU8L2Z1bmN0aW9uPiBpcyBhbiBTUUwvSlNPTiBmdW5jdGlvbiB3aGljaAorICAgcXVlcmllcyA8 YWNyb255bT5KU09OPC9hY3JvbnltPiBkYXRhCisgICBhbmQgcHJlc2VudHMgdGhlIHJlc3VsdHMg YXMgYSByZWxhdGlvbmFsIHZpZXcsIHdoaWNoIGNhbiBiZSBhY2Nlc3NlZCBhcyBhCisgICByZWd1 bGFyIFNRTCB0YWJsZS4gWW91IGNhbiBvbmx5IHVzZSA8ZnVuY3Rpb24+anNvbl90YWJsZTwvZnVu Y3Rpb24+IGluc2lkZSB0aGUKKyAgIDxsaXRlcmFsPkZST008L2xpdGVyYWw+IGNsYXVzZSBvZiBh IDxsaXRlcmFsPlNFTEVDVDwvbGl0ZXJhbD4gc3RhdGVtZW50LgorICA8L3BhcmE+CisKKyAgPHBh cmE+CisgICBUYWtpbmcgSlNPTiBkYXRhIGFzIGlucHV0LCA8ZnVuY3Rpb24+anNvbl90YWJsZTwv ZnVuY3Rpb24+IHVzZXMKKyAgIGEgcGF0aCBleHByZXNzaW9uIHRvIGV4dHJhY3QgYSBwYXJ0IG9m IHRoZSBwcm92aWRlZCBkYXRhIHRoYXQKKyAgIHdpbGwgYmUgdXNlZCBhcyBhIDxmaXJzdHRlcm0+ cm93IHBhdHRlcm48L2ZpcnN0dGVybT4gZm9yIHRoZQorICAgY29uc3RydWN0ZWQgdmlldy4gRWFj aCBTUUwvSlNPTiBpdGVtIGF0IHRoZSB0b3AgbGV2ZWwgb2YgdGhlIHJvdyBwYXR0ZXJuIHNlcnZl cworICAgYXMgdGhlIHNvdXJjZSBmb3IgYSBzZXBhcmF0ZSByb3cgaW4gdGhlIGNvbnN0cnVjdGVk IHJlbGF0aW9uYWwgdmlldy4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVG8gc3BsaXQgdGhl IHJvdyBwYXR0ZXJuIGludG8gY29sdW1ucywgPGZ1bmN0aW9uPmpzb25fdGFibGU8L2Z1bmN0aW9u PgorICAgcHJvdmlkZXMgdGhlIDxsaXRlcmFsPkNPTFVNTlM8L2xpdGVyYWw+IGNsYXVzZSB0aGF0 IGRlZmluZXMgdGhlCisgICBzY2hlbWEgb2YgdGhlIGNyZWF0ZWQgdmlldy4gRm9yIGVhY2ggY29s dW1uIHRvIGJlIGNvbnN0cnVjdGVkLAorICAgdGhpcyBjbGF1c2UgcHJvdmlkZXMgYSBzZXBhcmF0 ZSBwYXRoIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMKKyAgIHRoZSByb3cgcGF0dGVybiwgZXh0 cmFjdHMgYSBKU09OIGl0ZW0sIGFuZCByZXR1cm5zIGl0IGFzIGEKKyAgIHNlcGFyYXRlIFNRTCB2 YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBjb2x1bW4uIElmIHRoZSByZXF1aXJlZCB2YWx1ZQorICAg aXMgc3RvcmVkIGluIGEgbmVzdGVkIGxldmVsIG9mIHRoZSByb3cgcGF0dGVybiwgaXQgY2FuIGJl IGV4dHJhY3RlZAorICAgdXNpbmcgdGhlIDxsaXRlcmFsPk5FU1RFRCBQQVRIPC9saXRlcmFsPiBz dWJjbGF1c2UuIEpvaW5pbmcgdGhlCisgICBjb2x1bW5zIHJldHVybmVkIGJ5IDxsaXRlcmFsPk5F U1RFRCBQQVRIPC9saXRlcmFsPiBjYW4gYWRkIG11bHRpcGxlCisgICBuZXcgcm93cyB0byB0aGUg Y29uc3RydWN0ZWQgdmlldy4gU3VjaCByb3dzIGFyZSBjYWxsZWQKKyAgIDxmaXJzdHRlcm0+Y2hp bGQgcm93czwvZmlyc3R0ZXJtPiwgYXMgb3Bwb3NlZCB0byB0aGUgPGZpcnN0dGVybT5wYXJlbnQg cm93PC9maXJzdHRlcm0+CisgICB0aGF0IGdlbmVyYXRlcyB0aGVtLgorICA8L3BhcmE+CisKKyAg PHBhcmE+CisgICBUaGUgcm93cyBwcm9kdWNlZCBieSA8ZnVuY3Rpb24+SlNPTl9UQUJMRTwvZnVu Y3Rpb24+IGFyZSBsYXRlcmFsbHkKKyAgIGpvaW5lZCB0byB0aGUgcm93IHRoYXQgZ2VuZXJhdGVk IHRoZW0sIHNvIHlvdSBkbyBub3QgaGF2ZSB0byBleHBsaWNpdGx5IGpvaW4KKyAgIHRoZSBjb25z dHJ1Y3RlZCB2aWV3IHdpdGggdGhlIG9yaWdpbmFsIHRhYmxlIGhvbGRpbmcgPGFjcm9ueW0+SlNP TjwvYWNyb255bT4KKyAgIGRhdGEuIE9wdGlvbmFsbHksIHlvdSBjYW4gc3BlY2lmeSBob3cgdG8g am9pbiB0aGUgY29sdW1ucyByZXR1cm5lZAorICAgYnkgPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xp dGVyYWw+IHVzaW5nIHRoZSA8bGl0ZXJhbD5QTEFOPC9saXRlcmFsPiBjbGF1c2UuCisgIDwvcGFy YT4KKworICA8cGFyYT4KKyAgIEVhY2ggPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xpdGVyYWw+IGNs YXVzZSBjYW4gZ2VuZXJhdGUgb25lIG9yIG1vcmUKKyAgIGNvbHVtbnMuIENvbHVtbnMgcHJvZHVj ZWQgYnkgPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xpdGVyYWw+cyBhdCB0aGUKKyAgIHNhbWUgbGV2 ZWwgYXJlIGNvbnNpZGVyZWQgdG8gYmUgPGZpcnN0dGVybT5zaWJsaW5nczwvZmlyc3R0ZXJtPiwK KyAgIHdoaWxlIGEgY29sdW1uIHByb2R1Y2VkIGJ5IGEgPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xp dGVyYWw+IGlzCisgICBjb25zaWRlcmVkIHRvIGJlIGEgY2hpbGQgb2YgdGhlIGNvbHVtbiBwcm9k dWNlZCBieSBhCisgICA8bGl0ZXJhbD5ORVNURUQgUEFUSDwvbGl0ZXJhbD4gb3Igcm93IGV4cHJl c3Npb24gYXQgYSBoaWdoZXIgbGV2ZWwuCisgICBTaWJsaW5nIGNvbHVtbnMgYXJlIGFsd2F5cyBq b2luZWQgZmlyc3QuIE9uY2UgdGhleSBhcmUgcHJvY2Vzc2VkLAorICAgdGhlIHJlc3VsdGluZyBy b3dzIGFyZSBqb2luZWQgdG8gdGhlIHBhcmVudCByb3cuCisgIDwvcGFyYT4KKworICA8cGFyYT4K KyAgIFRoZSBzeW50YXggaXM6CisgIDwvcGFyYT4KKworPHN5bm9wc2lzPgorSlNPTl9UQUJMRSAo CisgIDxyZXBsYWNlYWJsZT5jb250ZXh0X2l0ZW08L3JlcGxhY2VhYmxlPiwgPHJlcGxhY2VhYmxl PnBhdGhfZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4gQVMgPHJlcGxhY2VhYmxl Pmpzb25fcGF0aF9uYW1lPC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4gPG9wdGlvbmFsPiBQQVNT SU5HIHsgPHJlcGxhY2VhYmxlPnZhbHVlPC9yZXBsYWNlYWJsZT4gQVMgPHJlcGxhY2VhYmxlPnZh cm5hbWU8L3JlcGxhY2VhYmxlPiB9IDxvcHRpb25hbD4sIC4uLjwvb3B0aW9uYWw+IDwvb3B0aW9u YWw+CisgIENPTFVNTlMgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+anNvbl90YWJs ZV9jb2x1bW48L3JlcGxhY2VhYmxlPiA8b3B0aW9uYWw+LCAuLi48L29wdGlvbmFsPiApCisgIDxv cHRpb25hbD4geyA8bGl0ZXJhbD5FUlJPUjwvbGl0ZXJhbD4gfCA8bGl0ZXJhbD5FTVBUWTwvbGl0 ZXJhbD4gfSA8bGl0ZXJhbD5PTiBFUlJPUjwvbGl0ZXJhbD4gPC9vcHRpb25hbD4KKyAgPG9wdGlv bmFsPgorICAgIFBMQU4gKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+anNvbl90YWJs ZV9wbGFuPC9yZXBsYWNlYWJsZT4gKSB8CisgICAgUExBTiBERUZBVUxUICggeyBJTk5FUiB8IE9V VEVSIH0gPG9wdGlvbmFsPiAsIHsgQ1JPU1MgfCBVTklPTiB9IDwvb3B0aW9uYWw+CisgICAgICAg ICAgICAgICAgIHwgeyBDUk9TUyB8IFVOSU9OIH0gPG9wdGlvbmFsPiAsIHsgSU5ORVIgfCBPVVRF UiB9IDwvb3B0aW9uYWw+ICkKKyAgPC9vcHRpb25hbD4KKykKKworPHBocmFzZT4KK3doZXJlIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5qc29uX3RhYmxlX2NvbHVtbjwvcmVwbGFjZWFi bGU+IGlzOgorPC9waHJhc2U+CisgICAgPHJlcGxhY2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPiA8 cmVwbGFjZWFibGU+dHlwZTwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4gUEFUSCA8cmVwbGFjZWFi bGU+anNvbl9wYXRoX3NwZWNpZmljYXRpb248L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPgorICAg ICAgICA8b3B0aW9uYWw+IHsgV0lUSE9VVCB8IFdJVEggeyBDT05ESVRJT05BTCB8IDxvcHRpb25h bD5VTkNPTkRJVElPTkFMPC9vcHRpb25hbD4gfSB9IDxvcHRpb25hbD4gQVJSQVkgPC9vcHRpb25h bD4gV1JBUFBFUiA8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsgS0VFUCB8IE9NSVQg fSBRVU9URVMgPG9wdGlvbmFsPiBPTiBTQ0FMQVIgU1RSSU5HIDwvb3B0aW9uYWw+IDwvb3B0aW9u YWw+CisgICAgICAgIDxvcHRpb25hbD4geyBFUlJPUiB8IE5VTEwgfCBERUZBVUxUIDxyZXBsYWNl YWJsZT5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gfSBPTiBFTVBUWSA8L29wdGlvbmFsPgorICAg ICAgICA8b3B0aW9uYWw+IHsgRVJST1IgfCBOVUxMIHwgREVGQVVMVCA8cmVwbGFjZWFibGU+ZXhw cmVzc2lvbjwvcmVwbGFjZWFibGU+IH0gT04gRVJST1IgPC9vcHRpb25hbD4KKyAgfCA8cmVwbGFj ZWFibGU+bmFtZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT50eXBlPC9yZXBsYWNlYWJsZT4g Rk9STUFUIEpTT04gPG9wdGlvbmFsPkVOQ09ESU5HIDxsaXRlcmFsPlVURjg8L2xpdGVyYWw+PC9v cHRpb25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiBQQVRIIDxyZXBsYWNlYWJsZT5qc29uX3BhdGhf c3BlY2lmaWNhdGlvbjwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25h bD4geyBXSVRIT1VUIHwgV0lUSCB7IENPTkRJVElPTkFMIHwgPG9wdGlvbmFsPlVOQ09ORElUSU9O QUw8L29wdGlvbmFsPiB9IH0gPG9wdGlvbmFsPiBBUlJBWSA8L29wdGlvbmFsPiBXUkFQUEVSIDwv b3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4geyBLRUVQIHwgT01JVCB9IFFVT1RFUyA8b3B0 aW9uYWw+IE9OIFNDQUxBUiBTVFJJTkcgPC9vcHRpb25hbD4gPC9vcHRpb25hbD4KKyAgICAgICAg PG9wdGlvbmFsPiB7IEVSUk9SIHwgTlVMTCB8IEVNUFRZIHsgQVJSQVkgfCBPQkpFQ1QgfSB8IERF RkFVTFQgPHJlcGxhY2VhYmxlPmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiB9IE9OIEVNUFRZIDwv b3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4geyBFUlJPUiB8IE5VTEwgfCBFTVBUWSB7IEFS UkFZIHwgT0JKRUNUIH0gfCBERUZBVUxUIDxyZXBsYWNlYWJsZT5leHByZXNzaW9uPC9yZXBsYWNl YWJsZT4gfSBPTiBFUlJPUiA8L29wdGlvbmFsPgorICB8IDxyZXBsYWNlYWJsZT5uYW1lPC9yZXBs YWNlYWJsZT4gPHJlcGxhY2VhYmxlPnR5cGU8L3JlcGxhY2VhYmxlPiBFWElTVFMgPG9wdGlvbmFs PiBQQVRIIDxyZXBsYWNlYWJsZT5qc29uX3BhdGhfc3BlY2lmaWNhdGlvbjwvcmVwbGFjZWFibGU+ IDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4geyBFUlJPUiB8IFRSVUUgfCBGQUxTRSB8 IFVOS05PV04gfSBPTiBFUlJPUiA8L29wdGlvbmFsPgorICB8IE5FU1RFRCBQQVRIIDxyZXBsYWNl YWJsZT5qc29uX3BhdGhfc3BlY2lmaWNhdGlvbjwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4gQVMg PHJlcGxhY2VhYmxlPnBhdGhfbmFtZTwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+CisgICAgICAg IENPTFVNTlMgKCA8cmVwbGFjZWFibGU+anNvbl90YWJsZV9jb2x1bW48L3JlcGxhY2VhYmxlPiA8 b3B0aW9uYWw+LCAuLi48L29wdGlvbmFsPiApCisgIHwgPHJlcGxhY2VhYmxlPm5hbWU8L3JlcGxh Y2VhYmxlPiBGT1IgT1JESU5BTElUWQorPHBocmFzZT4KKzxyZXBsYWNlYWJsZT5qc29uX3RhYmxl X3BsYW48L3JlcGxhY2VhYmxlPiBpczoKKzwvcGhyYXNlPgorICAgIDxyZXBsYWNlYWJsZT5qc29u X3BhdGhfbmFtZTwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4geyBPVVRFUiB8IElOTkVSIH0gPHJl cGxhY2VhYmxlPmpzb25fdGFibGVfcGxhbl9wcmltYXJ5PC9yZXBsYWNlYWJsZT4gPC9vcHRpb25h bD4KKyAgfCA8cmVwbGFjZWFibGU+anNvbl90YWJsZV9wbGFuX3ByaW1hcnk8L3JlcGxhY2VhYmxl PiB7IFVOSU9OIDxyZXBsYWNlYWJsZT5qc29uX3RhYmxlX3BsYW5fcHJpbWFyeTwvcmVwbGFjZWFi bGU+IH0gPG9wdGlvbmFsPi4uLjwvb3B0aW9uYWw+CisgIHwgPHJlcGxhY2VhYmxlPmpzb25fdGFi bGVfcGxhbl9wcmltYXJ5PC9yZXBsYWNlYWJsZT4geyBDUk9TUyA8cmVwbGFjZWFibGU+anNvbl90 YWJsZV9wbGFuX3ByaW1hcnk8L3JlcGxhY2VhYmxlPiB9IDxvcHRpb25hbD4uLi48L29wdGlvbmFs PgorPHBocmFzZT4KKzxyZXBsYWNlYWJsZT5qc29uX3RhYmxlX3BsYW5fcHJpbWFyeTwvcmVwbGFj ZWFibGU+IGlzOgorPC9waHJhc2U+CisgICAgPHJlcGxhY2VhYmxlPmpzb25fcGF0aF9uYW1lPC9y ZXBsYWNlYWJsZT4gfCAoIDxyZXBsYWNlYWJsZT5qc29uX3RhYmxlX3BsYW48L3JlcGxhY2VhYmxl PiApCis8L3N5bm9wc2lzPgorCisgIDxwYXJhPgorICAgRWFjaCBzeW50YXggZWxlbWVudCBpcyBk ZXNjcmliZWQgYmVsb3cgaW4gbW9yZSBkZXRhaWwuCisgIDwvcGFyYT4KKworICA8dmFyaWFibGVs aXN0PgorICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGxpdGVyYWw+PHJlcGxh Y2VhYmxlPmNvbnRleHRfaXRlbTwvcmVwbGFjZWFibGU+LCA8cmVwbGFjZWFibGU+cGF0aF9leHBy ZXNzaW9uPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiA8bGl0ZXJhbD5BUzwvbGl0ZXJhbD4gPHJl cGxhY2VhYmxlPmpzb25fcGF0aF9uYW1lPC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4gPG9wdGlv bmFsPiA8bGl0ZXJhbD5QQVNTSU5HPC9saXRlcmFsPiB7IDxyZXBsYWNlYWJsZT52YWx1ZTwvcmVw bGFjZWFibGU+IDxsaXRlcmFsPkFTPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+dmFybmFtZTwvcmVw bGFjZWFibGU+IH0gPG9wdGlvbmFsPiwgLi4uPC9vcHRpb25hbD48L29wdGlvbmFsPjwvbGl0ZXJh bD4KKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgICBUaGUgaW5w dXQgZGF0YSB0byBxdWVyeSwgdGhlIEpTT04gcGF0aCBleHByZXNzaW9uIGRlZmluaW5nIHRoZSBx dWVyeSwKKyAgICAgYW5kIGFuIG9wdGlvbmFsIDxsaXRlcmFsPlBBU1NJTkc8L2xpdGVyYWw+IGNs YXVzZSwgd2hpY2ggY2FuIHByb3ZpZGUgZGF0YQorICAgICB2YWx1ZXMgdG8gdGhlIDxyZXBsYWNl YWJsZT5wYXRoX2V4cHJlc3Npb248L3JlcGxhY2VhYmxlPi4KKyAgICAgVGhlIHJlc3VsdCBvZiB0 aGUgaW5wdXQgZGF0YQorICAgICBldmFsdWF0aW9uIGlzIGNhbGxlZCB0aGUgPGZpcnN0dGVybT5y b3cgcGF0dGVybjwvZmlyc3R0ZXJtPi4gVGhlIHJvdworICAgICBwYXR0ZXJuIGlzIHVzZWQgYXMg dGhlIHNvdXJjZSBmb3Igcm93IHZhbHVlcyBpbiB0aGUgY29uc3RydWN0ZWQgdmlldy4KKyAgICA8 L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlz dGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8bGl0ZXJhbD5DT0xVTU5TPC9saXRlcmFsPiggPHJl cGxhY2VhYmxlPmpzb25fdGFibGVfY29sdW1uPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiwgLi4u PC9vcHRpb25hbD4gKQorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisKKyAgICA8cGFyYT4K KyAgICAgVGhlIDxsaXRlcmFsPkNPTFVNTlM8L2xpdGVyYWw+IGNsYXVzZSBkZWZpbmluZyB0aGUg c2NoZW1hIG9mIHRoZQorICAgICBjb25zdHJ1Y3RlZCB2aWV3LiBJbiB0aGlzIGNsYXVzZSwgeW91 IG11c3Qgc3BlY2lmeSBhbGwgdGhlIGNvbHVtbnMKKyAgICAgdG8gYmUgZmlsbGVkIHdpdGggU1FM L0pTT04gaXRlbXMuCisgICAgIFRoZSA8cmVwbGFjZWFibGU+anNvbl90YWJsZV9jb2x1bW48L3Jl cGxhY2VhYmxlPgorICAgICBleHByZXNzaW9uIGhhcyB0aGUgZm9sbG93aW5nIHN5bnRheCB2YXJp YW50czoKKyAgICA8L3BhcmE+CisKKyAgPHZhcmlhYmxlbGlzdD4KKyAgIDx2YXJsaXN0ZW50cnk+ CisgICAgPHRlcm0+CisgICAgIDxsaXRlcmFsPjxyZXBsYWNlYWJsZT5uYW1lPC9yZXBsYWNlYWJs ZT4gPHJlcGxhY2VhYmxlPnR5cGU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgIDxvcHRpb25hbD4g PGxpdGVyYWw+UEFUSDwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxlPmpzb25fcGF0aF9zcGVjaWZpY2F0 aW9uPC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD48L2xpdGVyYWw+CisgICAgPC90ZXJtPgorICAg IDxsaXN0aXRlbT4KKworICAgIDxwYXJhPgorICAgICBJbnNlcnRzIGEgc2luZ2xlIFNRTC9KU09O IGl0ZW0gaW50byB0aGUgb3V0cHV0IHJvdy4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAg IFRoZSBwcm92aWRlZCA8bGl0ZXJhbD5QQVRIPC9saXRlcmFsPiBleHByZXNzaW9uIGlzIGV2YWx1 YXRlZCBhbmQKKyAgICAgdGhlIGNvbHVtbiBpcyBmaWxsZWQgd2l0aCB0aGUgcHJvZHVjZWQgU1FM L0pTT04gaXRlbSwgb25lIGZvciBlYWNoIHJvdy4KKyAgICAgSWYgdGhlIDxsaXRlcmFsPlBBVEg8 L2xpdGVyYWw+IGV4cHJlc3Npb24gaXMgb21pdHRlZCwKKyAgICAgPGZ1bmN0aW9uPkpTT05fVEFC TEU8L2Z1bmN0aW9uPiB1c2VzIHRoZQorICAgICA8bGl0ZXJhbD4kLjxyZXBsYWNlYWJsZT5uYW1l PC9yZXBsYWNlYWJsZT48L2xpdGVyYWw+IHBhdGggZXhwcmVzc2lvbiwKKyAgICAgd2hlcmUgPHJl cGxhY2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPiBpcyB0aGUgcHJvdmlkZWQgY29sdW1uIG5hbWUu CisgICAgIEluIHRoaXMgY2FzZSwgdGhlIGNvbHVtbiBuYW1lIG11c3QgY29ycmVzcG9uZCB0byBv bmUgb2YgdGhlCisgICAgIGtleXMgd2l0aGluIHRoZSBTUUwvSlNPTiBpdGVtIHByb2R1Y2VkIGJ5 IHRoZSByb3cgcGF0dGVybi4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgIE9wdGlvbmFs bHksIHlvdSBjYW4gc3BlY2lmeSA8bGl0ZXJhbD5XUkFQUEVSPC9saXRlcmFsPiwKKyAgICAgPGxp dGVyYWw+UVVPVEVTPC9saXRlcmFsPiBjbGF1c2VzIHRvIGZvcm1hdCB0aGUgb3V0cHV0IGFuZAor ICAgICA8bGl0ZXJhbD5PTiBFTVBUWTwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFsPk9OIEVSUk9SPC9s aXRlcmFsPiB0byBoYW5kbGUKKyAgICAgdGhvc2UgbWlzc2luZyB2YWx1ZXMgYW5kIHN0cnVjdHVy YWwgZXJyb3JzLCByZXNwZWN0aXZlbHkuCisgICAgPC9wYXJhPgorICAgIDxub3RlPgorICAgICA8 cGFyYT4KKyAgICAgIFRoaXMgY2xhdXNlIGlzIGludGVybmFsbHkgdHVybmVkIGludG8gYW5kIGhh cyB0aGUgc2FtZSBzZW1hbnRpY3MgYXMKKyAgICAgIDxmdW5jdGlvbj5qc29uX3ZhbHVlPC9mdW5j dGlvbj4gYW5kIDxmdW5jdGlvbj5qc29uX3F1ZXJ5PC9mdW5jdGlvbj4uCisgICAgICBUaGUgbGF0 dGVyIGlmIHRoZSBzcGVjaWZpZWQgdHlwZSBpcyBub3QgYSBzY2FsYXIgdHlwZSBvciBpZgorICAg ICAgPGxpdGVyYWw+V1JBUFBFUjwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+UVVPVEVTPC9saXRlcmFs PiBjbGF1c2UgaXMKKyAgICAgIHByZXNlbnQuCisgICAgIDwvcGFyYT4KKyAgICA8L25vdGU+Cisg ICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5Pgor ICAgIDx0ZXJtPgorICAgICA8cmVwbGFjZWFibGU+bmFtZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNl YWJsZT50eXBlPC9yZXBsYWNlYWJsZT4gPGxpdGVyYWw+Rk9STUFUIEpTT048L2xpdGVyYWw+IDxv cHRpb25hbD5FTkNPRElORyA8bGl0ZXJhbD5VVEY4PC9saXRlcmFsPjwvb3B0aW9uYWw+CisgICAg ICAgICAgPG9wdGlvbmFsPiA8bGl0ZXJhbD5QQVRIPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+anNv bl9wYXRoX3NwZWNpZmljYXRpb248L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPgorICAgIDwvdGVy bT4KKyAgICA8bGlzdGl0ZW0+CisKKyAgICA8cGFyYT4KKyAgICAgSW5zZXJ0cyBhIGNvbXBvc2l0 ZSBTUUwvSlNPTiBpdGVtIGludG8gdGhlIG91dHB1dCByb3cuCisgICAgPC9wYXJhPgorICAgIDxw YXJhPgorICAgICBUaGUgcHJvdmlkZWQgPGxpdGVyYWw+UEFUSDwvbGl0ZXJhbD4gZXhwcmVzc2lv biBpcyBldmFsdWF0ZWQgYW5kCisgICAgIHRoZSBjb2x1bW4gaXMgZmlsbGVkIHdpdGggdGhlIHBy b2R1Y2VkIFNRTC9KU09OIGl0ZW0uICBJZiB0aGUKKyAgICAgPGxpdGVyYWw+UEFUSDwvbGl0ZXJh bD4gZXhwcmVzc2lvbiBpcyBvbWl0dGVkLCBwYXRoIGV4cHJlc3Npb24KKyAgICAgPGxpdGVyYWw+ JC48cmVwbGFjZWFibGU+bmFtZTwvcmVwbGFjZWFibGU+PC9saXRlcmFsPiBpcyB1c2VkLAorICAg ICB3aGVyZSA8cmVwbGFjZWFibGU+bmFtZTwvcmVwbGFjZWFibGU+IGlzIHRoZSBwcm92aWRlZCBj b2x1bW4gbmFtZS4KKyAgICAgSW4gdGhpcyBjYXNlLCB0aGUgY29sdW1uIG5hbWUgbXVzdCBjb3Jy ZXNwb25kIHRvIG9uZSBvZiB0aGUKKyAgICAga2V5cyB3aXRoaW4gdGhlIFNRTC9KU09OIGl0ZW0g cHJvZHVjZWQgYnkgdGhlIHJvdyBwYXR0ZXJuLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAg ICAgT3B0aW9uYWxseSwgeW91IGNhbiBzcGVjaWZ5IDxsaXRlcmFsPldSQVBQRVI8L2xpdGVyYWw+ LAorICAgICA8bGl0ZXJhbD5RVU9URVM8L2xpdGVyYWw+IGNsYXVzZXMgdG8gZm9ybWF0IHRoZSBv dXRwdXQgYW5kCisgICAgIDxsaXRlcmFsPk9OIEVNUFRZPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+ T04gRVJST1I8L2xpdGVyYWw+IHRvIGhhbmRsZQorICAgICB0aG9zZSBzY2VuYXJpb3MgYXBwcm9w cmlhdGVseS4KKyAgICA8L3BhcmE+CisgICAgPG5vdGU+CisgICAgIDxwYXJhPgorICAgICAgVGhp cyBjbGF1c2UgaXMgaW50ZXJuYWxseSB0dXJuZWQgaW50byBhbmQgaGFzIHRoZSBzYW1lIHNlbWFu dGljcyBhcworICAgICAgPGZ1bmN0aW9uPmpzb25fcXVlcnk8L2Z1bmN0aW9uPi4KKyAgICAgPC9w YXJhPgorICAgIDwvbm90ZT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisK KyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgICAgPHJlcGxhY2VhYmxlPm5hbWU8 L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dHlwZTwvcmVwbGFjZWFibGU+CisgICAgICAgPGxp dGVyYWw+RVhJU1RTPC9saXRlcmFsPiA8b3B0aW9uYWw+IDxsaXRlcmFsPlBBVEg8L2xpdGVyYWw+ IDxyZXBsYWNlYWJsZT5qc29uX3BhdGhfc3BlY2lmaWNhdGlvbjwvcmVwbGFjZWFibGU+IDwvb3B0 aW9uYWw+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKworICAgIDxwYXJhPgorICAgICBJ bnNlcnRzIGEgYm9vbGVhbiBpdGVtIGludG8gZWFjaCBvdXRwdXQgcm93LgorICAgIDwvcGFyYT4K KyAgICA8cGFyYT4KKyAgICAgVGhlIHZhbHVlIGNvcnJlc3BvbmRzIHRvIHdoZXRoZXIgZXZhbHVh dGluZyB0aGUgPGxpdGVyYWw+UEFUSDwvbGl0ZXJhbD4KKyAgICAgZXhwcmVzc2lvbiB5aWVsZHMg YW55IFNRTC9KU09OIGl0ZW1zLiAgSWYgdGhlIDxsaXRlcmFsPlBBVEg8L2xpdGVyYWw+CisgICAg IGV4cHJlc3Npb24gaXMgb21pdHRlZCwgcGF0aCBleHByZXNzaW9uCisgICAgIDxsaXRlcmFsPiQu PHJlcGxhY2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPjwvbGl0ZXJhbD4gaXMgdXNlZCwKKyAgICAg d2hlcmUgPHJlcGxhY2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPiBpcyB0aGUgcHJvdmlkZWQgY29s dW1uIG5hbWUuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICBUaGUgc3BlY2lmaWVkIDxw YXJhbWV0ZXI+dHlwZTwvcGFyYW1ldGVyPiBzaG91bGQgaGF2ZSBhIGNhc3QgZnJvbSB0aGUKKyAg ICAgPHR5cGU+Ym9vbGVhbjwvdHlwZT4uCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICBP cHRpb25hbGx5LCB5b3UgY2FuIGFkZCA8bGl0ZXJhbD5PTiBFUlJPUjwvbGl0ZXJhbD4gY2xhdXNl IHRvIGRlZmluZQorICAgICBlcnJvciBiZWhhdmlvci4KKyAgICA8L3BhcmE+CisgICAgPG5vdGU+ CisgICAgIDxwYXJhPgorICAgICAgVGhpcyBjbGF1c2UgaXMgaW50ZXJuYWxseSB0dXJuZWQgaW50 byBhbmQgaGFzIHRoZSBzYW1lIHNlbWFudGljcyBhcworICAgICAgPGZ1bmN0aW9uPmpzb25fZXhp c3RzPC9mdW5jdGlvbj4uCisgICAgIDwvcGFyYT4KKyAgICA8L25vdGU+CisgICAgPC9saXN0aXRl bT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgor ICAgICAgPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xpdGVyYWw+IDxyZXBsYWNlYWJsZT5qc29uX3Bh dGhfc3BlY2lmaWNhdGlvbjwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4gPGxpdGVyYWw+QVM8L2xp dGVyYWw+IDxyZXBsYWNlYWJsZT5qc29uX3BhdGhfbmFtZTwvcmVwbGFjZWFibGU+IDwvb3B0aW9u YWw+CisgICAgICAgICAgPGxpdGVyYWw+Q09MVU1OUzwvbGl0ZXJhbD4gKCA8cmVwbGFjZWFibGU+ anNvbl90YWJsZV9jb2x1bW48L3JlcGxhY2VhYmxlPiA8b3B0aW9uYWw+LCAuLi48L29wdGlvbmFs PiApCisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKworICAgIDxwYXJhPgorICAgICBFeHRy YWN0cyBTUUwvSlNPTiBpdGVtcyBmcm9tIG5lc3RlZCBsZXZlbHMgb2YgdGhlIHJvdyBwYXR0ZXJu LAorICAgICBnZW5lcmF0ZXMgb25lIG9yIG1vcmUgY29sdW1ucyBhcyBkZWZpbmVkIGJ5IHRoZSA8 bGl0ZXJhbD5DT0xVTU5TPC9saXRlcmFsPgorICAgICBzdWJjbGF1c2UsIGFuZCBpbnNlcnRzIHRo ZSBleHRyYWN0ZWQgU1FML0pTT04gaXRlbXMgaW50byBlYWNoIHJvdyBvZiB0aGVzZSBjb2x1bW5z LgorICAgICBUaGUgPHJlcGxhY2VhYmxlPmpzb25fdGFibGVfY29sdW1uPC9yZXBsYWNlYWJsZT4g ZXhwcmVzc2lvbiBpbiB0aGUKKyAgICAgPGxpdGVyYWw+Q09MVU1OUzwvbGl0ZXJhbD4gc3ViY2xh dXNlIHVzZXMgdGhlIHNhbWUgc3ludGF4IGFzIGluIHRoZQorICAgICBwYXJlbnQgPGxpdGVyYWw+ Q09MVU1OUzwvbGl0ZXJhbD4gY2xhdXNlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAg ICBUaGUgPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xpdGVyYWw+IHN5bnRheCBpcyByZWN1cnNpdmUs CisgICAgIHNvIHlvdSBjYW4gZ28gZG93biBtdWx0aXBsZSBuZXN0ZWQgbGV2ZWxzIGJ5IHNwZWNp Znlpbmcgc2V2ZXJhbAorICAgICA8bGl0ZXJhbD5ORVNURUQgUEFUSDwvbGl0ZXJhbD4gc3ViY2xh dXNlcyB3aXRoaW4gZWFjaCBvdGhlci4KKyAgICAgSXQgYWxsb3dzIHRvIHVubmVzdCB0aGUgaGll cmFyY2h5IG9mIEpTT04gb2JqZWN0cyBhbmQgYXJyYXlzCisgICAgIGluIGEgc2luZ2xlIGZ1bmN0 aW9uIGludm9jYXRpb24gcmF0aGVyIHRoYW4gY2hhaW5pbmcgc2V2ZXJhbAorICAgICA8ZnVuY3Rp b24+SlNPTl9UQUJMRTwvZnVuY3Rpb24+IGV4cHJlc3Npb25zIGluIGFuIFNRTCBzdGF0ZW1lbnQu CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgIFlvdSBjYW4gdXNlIHRoZSA8bGl0ZXJh bD5QTEFOPC9saXRlcmFsPiBjbGF1c2UgdG8gZGVmaW5lIGhvdworICAgICB0byBqb2luIHRoZSBj b2x1bW5zIHJldHVybmVkIGJ5IDxsaXRlcmFsPk5FU1RFRCBQQVRIPC9saXRlcmFsPiBjbGF1c2Vz LgorICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAg IDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxyZXBsYWNlYWJsZT5uYW1lPC9yZXBs YWNlYWJsZT4gPGxpdGVyYWw+Rk9SIE9SRElOQUxJVFk8L2xpdGVyYWw+CisgICAgPC90ZXJtPgor ICAgIDxsaXN0aXRlbT4KKworICAgIDxwYXJhPgorICAgICBBZGRzIGFuIG9yZGluYWxpdHkgY29s dW1uIHRoYXQgcHJvdmlkZXMgc2VxdWVudGlhbCByb3cgbnVtYmVyaW5nLgorICAgICBZb3UgY2Fu IGhhdmUgb25seSBvbmUgb3JkaW5hbGl0eSBjb2x1bW4gcGVyIHRhYmxlLiBSb3cgbnVtYmVyaW5n CisgICAgIGlzIDEtYmFzZWQuIEZvciBjaGlsZCByb3dzIHRoYXQgcmVzdWx0IGZyb20gdGhlIDxs aXRlcmFsPk5FU1RFRCBQQVRIPC9saXRlcmFsPgorICAgICBjbGF1c2VzLCB0aGUgcGFyZW50IHJv dyBudW1iZXIgaXMgcmVwZWF0ZWQuCisgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8 L3Zhcmxpc3RlbnRyeT4KKyAgPC92YXJpYWJsZWxpc3Q+CisKKyAgICA8L2xpc3RpdGVtPgorICAg PC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxs aXRlcmFsPkFTPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+anNvbl9wYXRoX25hbWU8L3JlcGxhY2Vh YmxlPgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisKKyAgICA8cGFyYT4KKyAgICAgVGhl IG9wdGlvbmFsIDxyZXBsYWNlYWJsZT5qc29uX3BhdGhfbmFtZTwvcmVwbGFjZWFibGU+IHNlcnZl cyBhcyBhbgorICAgICBpZGVudGlmaWVyIG9mIHRoZSBwcm92aWRlZCA8cmVwbGFjZWFibGU+anNv bl9wYXRoX3NwZWNpZmljYXRpb248L3JlcGxhY2VhYmxlPi4KKyAgICAgVGhlIHBhdGggbmFtZSBt dXN0IGJlIHVuaXF1ZSBhbmQgZGlzdGluY3QgZnJvbSB0aGUgY29sdW1uIG5hbWVzLgorICAgICBX aGVuIHVzaW5nIHRoZSA8bGl0ZXJhbD5QTEFOPC9saXRlcmFsPiBjbGF1c2UsIHlvdSBtdXN0IHNw ZWNpZnkgdGhlIG5hbWVzCisgICAgIGZvciBhbGwgdGhlIHBhdGhzLCBpbmNsdWRpbmcgdGhlIHJv dyBwYXR0ZXJuLiBFYWNoIHBhdGggbmFtZSBjYW4gYXBwZWFyIGluCisgICAgIHRoZSA8bGl0ZXJh bD5QTEFOPC9saXRlcmFsPiBjbGF1c2Ugb25seSBvbmNlLgorICAgIDwvcGFyYT4KKyAgICA8L2xp c3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRl cm0+CisgICAgIDxsaXRlcmFsPlBMQU48L2xpdGVyYWw+ICggPHJlcGxhY2VhYmxlPmpzb25fdGFi bGVfcGxhbjwvcmVwbGFjZWFibGU+ICkKKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorCisg ICAgPHBhcmE+CisgICAgIERlZmluZXMgaG93IHRvIGpvaW4gdGhlIGRhdGEgcmV0dXJuZWQgYnkg PGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xpdGVyYWw+CisgICAgIGNsYXVzZXMgdG8gdGhlIGNvbnN0 cnVjdGVkIHZpZXcuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICBUbyBqb2luIGNvbHVt bnMgd2l0aCBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwLCB5b3UgY2FuIHVzZToKKyAgICA8L3Bh cmE+CisgIDx2YXJpYWJsZWxpc3Q+CisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAg ICA8bGl0ZXJhbD5JTk5FUjwvbGl0ZXJhbD4KKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgor CisgICAgPHBhcmE+CisgICAgIFVzZSA8bGl0ZXJhbD5JTk5FUiBKT0lOPC9saXRlcmFsPiwgc28g dGhhdCB0aGUgcGFyZW50IHJvdworICAgICBpcyBvbWl0dGVkIGZyb20gdGhlIG91dHB1dCBpZiBp dCBkb2VzIG5vdCBoYXZlIGFueSBjaGlsZCByb3dzCisgICAgIGFmdGVyIGpvaW5pbmcgdGhlIGRh dGEgcmV0dXJuZWQgYnkgPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xpdGVyYWw+LgorICAgIDwvcGFy YT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50 cnk+CisgICAgPHRlcm0+CisgICAgIDxsaXRlcmFsPk9VVEVSPC9saXRlcmFsPgorICAgIDwvdGVy bT4KKyAgICA8bGlzdGl0ZW0+CisKKyAgICA8cGFyYT4KKyAgICAgVXNlIDxsaXRlcmFsPkxFRlQg T1VURVIgSk9JTjwvbGl0ZXJhbD4sIHNvIHRoYXQgdGhlIHBhcmVudCByb3cKKyAgICAgaXMgYWx3 YXlzIGluY2x1ZGVkIGludG8gdGhlIG91dHB1dCBldmVuIGlmIGl0IGRvZXMgbm90IGhhdmUgYW55 IGNoaWxkIHJvd3MKKyAgICAgYWZ0ZXIgam9pbmluZyB0aGUgZGF0YSByZXR1cm5lZCBieSA8bGl0 ZXJhbD5ORVNURUQgUEFUSDwvbGl0ZXJhbD4sIHdpdGggTlVMTCB2YWx1ZXMKKyAgICAgaW5zZXJ0 ZWQgaW50byB0aGUgY2hpbGQgY29sdW1ucyBpZiB0aGUgY29ycmVzcG9uZGluZworICAgICB2YWx1 ZXMgYXJlIG1pc3NpbmcuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICBUaGlzIGlzIHRo ZSBkZWZhdWx0IG9wdGlvbiBmb3Igam9pbmluZyBjb2x1bW5zIHdpdGggcGFyZW50L2NoaWxkIHJl bGF0aW9uc2hpcC4KKyAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVu dHJ5PgorICA8L3ZhcmlhYmxlbGlzdD4KKworICAgICA8cGFyYT4KKyAgICAgVG8gam9pbiBzaWJs aW5nIGNvbHVtbnMsIHlvdSBjYW4gdXNlOgorICAgIDwvcGFyYT4KKworICA8dmFyaWFibGVsaXN0 PgorICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGxpdGVyYWw+VU5JT048L2xp dGVyYWw+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKworICAgIDxwYXJhPgorICAgICBH ZW5lcmF0ZSBvbmUgcm93IGZvciBlYWNoIHZhbHVlIHByb2R1Y2VkIGJ5IGVhY2ggb2YgdGhlIHNp YmxpbmcKKyAgICAgY29sdW1ucy4gVGhlIGNvbHVtbnMgZnJvbSB0aGUgb3RoZXIgc2libGluZ3Mg YXJlIHNldCB0byBudWxsLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgVGhpcyBpcyB0 aGUgZGVmYXVsdCBvcHRpb24gZm9yIGpvaW5pbmcgc2libGluZyBjb2x1bW5zLgorICAgIDwvcGFy YT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50 cnk+CisgICAgPHRlcm0+CisgICAgIDxsaXRlcmFsPkNST1NTPC9saXRlcmFsPgorICAgIDwvdGVy bT4KKyAgICA8bGlzdGl0ZW0+CisKKyAgICA8cGFyYT4KKyAgICAgR2VuZXJhdGUgb25lIHJvdyBm b3IgZWFjaCBjb21iaW5hdGlvbiBvZiB2YWx1ZXMgZnJvbSB0aGUgc2libGluZyBjb2x1bW5zLgor ICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgPC92 YXJpYWJsZWxpc3Q+CisKKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAg IDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxsaXRlcmFsPlBMQU4gREVGQVVMVDwv bGl0ZXJhbD4gKCA8bGl0ZXJhbD48cmVwbGFjZWFibGU+T1VURVIgfCBJTk5FUjwvcmVwbGFjZWFi bGU+IDxvcHRpb25hbD4sIDxyZXBsYWNlYWJsZT5VTklPTiB8IENST1NTPC9yZXBsYWNlYWJsZT4g PC9vcHRpb25hbD48L2xpdGVyYWw+ICkKKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAg ICA8cGFyYT4KKyAgICAgIFRoZSB0ZXJtcyBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgaW4gcmV2ZXJz ZSBvcmRlci4gVGhlCisgICAgICA8bGl0ZXJhbD5JTk5FUjwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+ T1VURVI8L2xpdGVyYWw+IG9wdGlvbiBkZWZpbmVzIHRoZQorICAgICAgam9pbmluZyBwbGFuIGZv ciBwYXJlbnQvY2hpbGQgY29sdW1ucywgd2hpbGUgPGxpdGVyYWw+VU5JT048L2xpdGVyYWw+IG9y CisgICAgICA8bGl0ZXJhbD5DUk9TUzwvbGl0ZXJhbD4gYWZmZWN0cyBqb2lucyBvZiBzaWJsaW5n IGNvbHVtbnMuIFRoaXMgZm9ybQorICAgICAgb2YgPGxpdGVyYWw+UExBTjwvbGl0ZXJhbD4gb3Zl cnJpZGVzIHRoZSBkZWZhdWx0IHBsYW4gZm9yCisgICAgICBhbGwgY29sdW1ucyBhdCBvbmNlLiBF dmVuIHRob3VnaCB0aGUgcGF0aCBuYW1lcyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZQorICAgICAg PGxpdGVyYWw+UExBTiBERUZBVUxUPC9saXRlcmFsPiBmb3JtLCB0byBjb25mb3JtIHRvIHRoZSBT UUwvSlNPTiBzdGFuZGFyZAorICAgICAgdGhleSBtdXN0IGJlIHByb3ZpZGVkIGZvciBhbGwgdGhl IHBhdGhzIGlmIHRoZSA8bGl0ZXJhbD5QTEFOPC9saXRlcmFsPgorICAgICAgY2xhdXNlIGlzIHVz ZWQuCisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAgICA8bGl0ZXJhbD5QTEFOIERFRkFV TFQ8L2xpdGVyYWw+IGlzIHNpbXBsZXIgdGhhbiBzcGVjaWZ5aW5nIGEgY29tcGxldGUKKyAgICAg IDxsaXRlcmFsPlBMQU48L2xpdGVyYWw+LCBhbmQgaXMgb2Z0ZW4gYWxsIHRoYXQgaXMgcmVxdWly ZWQgdG8gZ2V0IHRoZSBkZXNpcmVkCisgICAgICBvdXRwdXQuCisgICAgIDwvcGFyYT4KKyAgICA8 L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisgIDwvdmFyaWFibGVsaXN0PgorCisgIDxw YXJhPkV4YW1wbGVzPC9wYXJhPgorCisgICAgIDxwYXJhPgorICAgICBJbiB0aGVzZSBleGFtcGxl cyB0aGUgZm9sbG93aW5nIHNtYWxsIHRhYmxlIHN0b3Jpbmcgc29tZSBKU09OIGRhdGEgd2lsbCBi ZSB1c2VkOgorPHByb2dyYW1saXN0aW5nPgorQ1JFQVRFIFRBQkxFIG15X2ZpbG1zICgganMganNv bmIgKTsKKworSU5TRVJUIElOVE8gbXlfZmlsbXMgVkFMVUVTICgKKyd7ICJmYXZvcml0ZXMiIDog WworICAgeyAia2luZCIgOiAiY29tZWR5IiwgImZpbG1zIiA6IFsKKyAgICAgeyAidGl0bGUiIDog IkJhbmFuYXMiLAorICAgICAgICJkaXJlY3RvciIgOiAiV29vZHkgQWxsZW4ifSwKKyAgICAgeyAi dGl0bGUiIDogIlRoZSBEaW5uZXIgR2FtZSIsCisgICAgICAgImRpcmVjdG9yIiA6ICJGcmFuY2lz IFZlYmVyIiB9IF0gfSwKKyAgIHsgImtpbmQiIDogImhvcnJvciIsICJmaWxtcyIgOiBbCisgICAg IHsgInRpdGxlIiA6ICJQc3ljaG8iLAorICAgICAgICJkaXJlY3RvciIgOiAiQWxmcmVkIEhpdGNo Y29jayIgfSBdIH0sCisgICB7ICJraW5kIiA6ICJ0aHJpbGxlciIsICJmaWxtcyIgOiBbCisgICAg IHsgInRpdGxlIiA6ICJWZXJ0aWdvIiwKKyAgICAgICAiZGlyZWN0b3IiIDogIkFsZnJlZCBIaXRj aGNvY2siIH0gXSB9LAorICAgeyAia2luZCIgOiAiZHJhbWEiLCAiZmlsbXMiIDogWworICAgICB7 ICJ0aXRsZSIgOiAiWW9qaW1ibyIsCisgICAgICAgImRpcmVjdG9yIiA6ICJBa2lyYSBLdXJvc2F3 YSIgfSBdIH0KKyAgXSB9Jyk7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgICA8L3BhcmE+CisgICAg IDxwYXJhPgorICAgICAgUXVlcnkgdGhlIDxzdHJ1Y3RuYW1lPm15X2ZpbG1zPC9zdHJ1Y3RuYW1l PiB0YWJsZSBob2xkaW5nCisgICAgICBzb21lIEpTT04gZGF0YSBhYm91dCB0aGUgZmlsbXMgYW5k IGNyZWF0ZSBhIHZpZXcgdGhhdAorICAgICAgZGlzdHJpYnV0ZXMgdGhlIGZpbG0gZ2VucmUsIHRp dGxlLCBhbmQgZGlyZWN0b3IgYmV0d2VlbiBzZXBhcmF0ZSBjb2x1bW5zOgorPHNjcmVlbj4KK1NF TEVDVCBqdC4qIEZST00KKyBteV9maWxtcywKKyBKU09OX1RBQkxFICgganMsICckLmZhdm9yaXRl c1sqXScgQ09MVU1OUyAoCisgICBpZCBGT1IgT1JESU5BTElUWSwKKyAgIGtpbmQgdGV4dCBQQVRI ICckLmtpbmQnLAorICAgTkVTVEVEIFBBVEggJyQuZmlsbXNbKl0nIENPTFVNTlMgKAorICAgICB0 aXRsZSB0ZXh0IFBBVEggJyQudGl0bGUnLAorICAgICBkaXJlY3RvciB0ZXh0IFBBVEggJyQuZGly ZWN0b3InKSkpIEFTIGp0OworLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tCisgaWQgfCAgIGtpbmQgICB8ICAgICAgIHRpdGxlICAgICAgfCAgICBk aXJlY3RvcgorLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tCisgMSAgfCBjb21lZHkgICB8IEJhbmFuYXMgICAgICAgICAgfCBXb29keSBBbGxlbgor IDEgIHwgY29tZWR5ICAgfCBUaGUgRGlubmVyIEdhbWUgIHwgRnJhbmNpcyBWZWJlcgorIDIgIHwg aG9ycm9yICAgfCBQc3ljaG8gICAgICAgICAgIHwgQWxmcmVkIEhpdGNoY29jaworIDMgIHwgdGhy aWxsZXIgfCBWZXJ0aWdvICAgICAgICAgIHwgQWxmcmVkIEhpdGNoY29jaworIDQgIHwgZHJhbWEg ICAgfCBZb2ppbWJvICAgICAgICAgIHwgQWtpcmEgS3Vyb3Nhd2EKKyAoNSByb3dzKQorPC9zY3Jl ZW4+CisgICAgIDwvcGFyYT4KKworICAgICA8cGFyYT4KKyAgICAgIEZpbmQgYSBkaXJlY3RvciB0 aGF0IGhhcyBkb25lIGZpbG1zIGluIHR3byBkaWZmZXJlbnQgZ2VucmVzOgorPHNjcmVlbj4KK1NF TEVDVAorICBkaXJlY3RvcjEgQVMgZGlyZWN0b3IsIHRpdGxlMSwga2luZDEsIHRpdGxlMiwga2lu ZDIKK0ZST00KKyAgbXlfZmlsbXMsCisgIEpTT05fVEFCTEUgKCBqcywgJyQuZmF2b3JpdGVzJyBB UyBmYXZzIENPTFVNTlMgKAorICAgIE5FU1RFRCBQQVRIICckWypdJyBBUyBmaWxtczEgQ09MVU1O UyAoCisgICAgICBraW5kMSB0ZXh0IFBBVEggJyQua2luZCcsCisgICAgICBORVNURUQgUEFUSCAn JC5maWxtc1sqXScgQVMgZmlsbTEgQ09MVU1OUyAoCisgICAgICAgIHRpdGxlMSB0ZXh0IFBBVEgg JyQudGl0bGUnLAorICAgICAgICBkaXJlY3RvcjEgdGV4dCBQQVRIICckLmRpcmVjdG9yJykKKyAg ICApLAorICAgIE5FU1RFRCBQQVRIICckWypdJyBBUyBmaWxtczIgQ09MVU1OUyAoCisgICAgICBr aW5kMiB0ZXh0IFBBVEggJyQua2luZCcsCisgICAgICBORVNURUQgUEFUSCAnJC5maWxtc1sqXScg QVMgZmlsbTIgQ09MVU1OUyAoCisgICAgICAgIHRpdGxlMiB0ZXh0IFBBVEggJyQudGl0bGUnLAor ICAgICAgICBkaXJlY3RvcjIgdGV4dCBQQVRIICckLmRpcmVjdG9yJworICAgICAgKQorICAgICkK KyAgICkKKyAgIFBMQU4gKGZhdnMgT1VURVIgKChmaWxtczEgSU5ORVIgZmlsbTEpIENST1NTIChm aWxtczIgSU5ORVIgZmlsbTIpKSkKKyAgKSBBUyBqdAorIFdIRVJFIGtpbmQxID4ga2luZDIgQU5E IGRpcmVjdG9yMSA9IGRpcmVjdG9yMjsKKworICAgICBkaXJlY3RvciAgICAgfCB0aXRsZTEgIHwg IGtpbmQxICAgfCB0aXRsZTIgfCBraW5kMgorLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tCisgQWxmcmVkIEhpdGNoY29jayB8IFZlcnRpZ28g fCB0aHJpbGxlciB8IFBzeWNobyB8IGhvcnJvcgorKDEgcm93KQorPC9zY3JlZW4+CisgICAgIDwv cGFyYT4KKyAgPC9zZWN0Mj4KKwogIDwvc2VjdDE+CiAKICA8c2VjdDEgaWQ9ImZ1bmN0aW9ucy1z ZXF1ZW5jZSI+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3NxbF9mZWF0dXJlcy50 eHQgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3NxbF9mZWF0dXJlcy50eHQKaW5kZXggNzU5OGJkOGYy Mi4uOTUwMGE4MGY0ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zcWxfZmVhdHVy ZXMudHh0CisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3FsX2ZlYXR1cmVzLnR4dApAQCAtNTUx LDEwICs1NTEsMTAgQEAgVDgxNAlDb2xvbiBpbiBKU09OX09CSkVDVCBvciBKU09OX09CSkVDVEFH RwkJCVlFUwogVDgyMQlCYXNpYyBTUUwvSlNPTiBxdWVyeSBvcGVyYXRvcnMJCQlZRVMJCiBUODIy CVNRTC9KU09OOiBJUyBKU09OIFdJVEggVU5JUVVFIEtFWVMgcHJlZGljYXRlCQkJWUVTCQogVDgy MwlTUUwvSlNPTjogUEFTU0lORyBjbGF1c2UJCQlZRVMJCi1UODI0CUpTT05fVEFCTEU6IHNwZWNp ZmljIFBMQU4gY2xhdXNlCQkJTk8JCitUODI0CUpTT05fVEFCTEU6IHNwZWNpZmljIFBMQU4gY2xh dXNlCQkJWUVTCQogVDgyNQlTUUwvSlNPTjogT04gRU1QVFkgYW5kIE9OIEVSUk9SIGNsYXVzZXMJ CQlZRVMJCiBUODI2CUdlbmVyYWwgdmFsdWUgZXhwcmVzc2lvbiBpbiBPTiBFUlJPUiBvciBPTiBF TVBUWSBjbGF1c2VzCQkJWUVTCQotVDgyNwlKU09OX1RBQkxFOiBzaWJsaW5nIE5FU1RFRCBDT0xV TU5TIGNsYXVzZXMJCQlOTwkKK1Q4MjcJSlNPTl9UQUJMRTogc2libGluZyBORVNURUQgQ09MVU1O UyBjbGF1c2VzCQkJWUVTCQogVDgyOAlKU09OX1FVRVJZCQkJWUVTCQogVDgyOQlKU09OX1FVRVJZ OiBhcnJheSB3cmFwcGVyIG9wdGlvbnMJCQlZRVMJCiBUODMwCUVuZm9yY2luZyB1bmlxdWUga2V5 cyBpbiBTUUwvSlNPTiBjb25zdHJ1Y3RvciBmdW5jdGlvbnMJCQlZRVMJCkBAIC01NjUsNyArNTY1 LDcgQEAgVDgzNAlTUUwvSlNPTiBwYXRoIGxhbmd1YWdlOiB3aWxkY2FyZCBtZW1iZXIgYWNjZXNz b3IJCQlZRVMKIFQ4MzUJU1FML0pTT04gcGF0aCBsYW5ndWFnZTogZmlsdGVyIGV4cHJlc3Npb25z CQkJWUVTCQogVDgzNglTUUwvSlNPTiBwYXRoIGxhbmd1YWdlOiBzdGFydHMgd2l0aCBwcmVkaWNh dGUJCQlZRVMJCiBUODM3CVNRTC9KU09OIHBhdGggbGFuZ3VhZ2U6IHJlZ2V4X2xpa2UgcHJlZGlj YXRlCQkJWUVTCQotVDgzOAlKU09OX1RBQkxFOiBQTEFOIERFRkFVTFQgY2xhdXNlCQkJTk8JCitU ODM4CUpTT05fVEFCTEU6IFBMQU4gREVGQVVMVCBjbGF1c2UJCQlZRVMJCiBUODM5CUZvcm1hdHRl ZCBjYXN0IG9mIGRhdGV0aW1lcyB0by9mcm9tIGNoYXJhY3RlciBzdHJpbmdzCQkJTk8JCiBUODQw CUhleCBpbnRlZ2VyIGxpdGVyYWxzIGluIFNRTC9KU09OIHBhdGggbGFuZ3VhZ2UJCQlZRVMJCiBU ODUxCVNRTC9KU09OOiBvcHRpb25hbCBrZXl3b3JkcyBmb3IgZGVmYXVsdCBzeW50YXgJCQlZRVMJ CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYwppbmRleCA5NTFmYTRmY2EwLi45MmI2 Y2I0MDM1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5j CisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKQEAgLTQzNDEsNiAr NDM0MSwxMiBAQCBFeGVjRXZhbEpzb25FeHByUGF0aChFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZh bFN0ZXAgKm9wLAogCQkJCWJyZWFrOwogCQkJfQogCisJCWNhc2UgSlNPTl9UQUJMRV9PUDoKKwkJ CXBvc3RfZXZhbC0+anVtcF9ldmFsX2NvZXJjaW9uID0gLTE7CisJCQkqb3AtPnJlc3ZhbHVlID0g aXRlbTsKKwkJCSpvcC0+cmVzbnVsbCA9IGZhbHNlOworCQkJYnJlYWs7CisKIAkJZGVmYXVsdDoK IAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgU1FML0pTT04gZXhwcmVzc2lvbiBvcCAlZCIs IGpleHByLT5vcCk7CiAJCQlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlVGFibGVGdW5jc2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVRh YmxlRnVuY3NjYW4uYwppbmRleCA3MmNhMzRhMjI4Li45OWZiOTI4OTRjIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlVGFibGVGdW5jc2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVUYWJsZUZ1bmNzY2FuLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRl ICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9leGVjbm9kZXMuaCIKICNpbmNsdWRlICJ1 dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2pzb25wYXRoLmgiCiAjaW5jbHVkZSAi dXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRl ICJ1dGlscy94bWwuaCIKQEAgLTE2MSw4ICsxNjIsOSBAQCBFeGVjSW5pdFRhYmxlRnVuY1NjYW4o VGFibGVGdW5jU2NhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJc2NhbnN0 YXRlLT5zcy5wcy5xdWFsID0KIAkJRXhlY0luaXRRdWFsKG5vZGUtPnNjYW4ucGxhbi5xdWFsLCAm c2NhbnN0YXRlLT5zcy5wcyk7CiAKLQkvKiBPbmx5IFhNTFRBQkxFIGlzIHN1cHBvcnRlZCBjdXJy ZW50bHkgKi8KLQlzY2Fuc3RhdGUtPnJvdXRpbmUgPSAmWG1sVGFibGVSb3V0aW5lOworCS8qIE9u bHkgWE1MVEFCTEUgYW5kIEpTT05fVEFCTEUgYXJlIHN1cHBvcnRlZCBjdXJyZW50bHkgKi8KKwlz Y2Fuc3RhdGUtPnJvdXRpbmUgPQorCQl0Zi0+ZnVuY3R5cGUgPT0gVEZUX1hNTFRBQkxFID8gJlht bFRhYmxlUm91dGluZSA6ICZKc29uYlRhYmxlUm91dGluZTsKIAogCXNjYW5zdGF0ZS0+cGVyVGFi bGVDeHQgPQogCQlBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCkBA IC0xODIsNiArMTg0LDEwIEBAIEV4ZWNJbml0VGFibGVGdW5jU2NhbihUYWJsZUZ1bmNTY2FuICpu b2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJRXhlY0luaXRFeHByTGlzdCh0Zi0+ Y29sZXhwcnMsIChQbGFuU3RhdGUgKikgc2NhbnN0YXRlKTsKIAlzY2Fuc3RhdGUtPmNvbGRlZmV4 cHJzID0KIAkJRXhlY0luaXRFeHByTGlzdCh0Zi0+Y29sZGVmZXhwcnMsIChQbGFuU3RhdGUgKikg c2NhbnN0YXRlKTsKKwlzY2Fuc3RhdGUtPmNvbHZhbGV4cHJzID0KKwkJRXhlY0luaXRFeHByTGlz dCh0Zi0+Y29sdmFsZXhwcnMsIChQbGFuU3RhdGUgKikgc2NhbnN0YXRlKTsKKwlzY2Fuc3RhdGUt PnBhc3Npbmd2YWxleHBycyA9CisJCUV4ZWNJbml0RXhwckxpc3QodGYtPnBhc3Npbmd2YWxleHBy cywgKFBsYW5TdGF0ZSAqKSBzY2Fuc3RhdGUpOwogCiAJc2NhbnN0YXRlLT5ub3RudWxscyA9IHRm LT5ub3RudWxsczsKIApAQCAtMzY5LDE0ICszNzUsMTcgQEAgdGZ1bmNJbml0aWFsaXplKFRhYmxl RnVuY1NjYW5TdGF0ZSAqdHN0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsIERhdHVtIGRvYykK IAkJcm91dGluZS0+U2V0TmFtZXNwYWNlKHRzdGF0ZSwgbnNfbmFtZSwgbnNfdXJpKTsKIAl9CiAK LQkvKiBJbnN0YWxsIHRoZSByb3cgZmlsdGVyIGV4cHJlc3Npb24gaW50byB0aGUgdGFibGUgYnVp bGRlciBjb250ZXh0ICovCi0JdmFsdWUgPSBFeGVjRXZhbEV4cHIodHN0YXRlLT5yb3dleHByLCBl Y29udGV4dCwgJmlzbnVsbCk7Ci0JaWYgKGlzbnVsbCkKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQko ZXJyY29kZShFUlJDT0RFX05VTExfVkFMVUVfTk9UX0FMTE9XRUQpLAotCQkJCSBlcnJtc2coInJv dyBmaWx0ZXIgZXhwcmVzc2lvbiBtdXN0IG5vdCBiZSBudWxsIikpKTsKKwlpZiAocm91dGluZS0+ U2V0Um93RmlsdGVyKQorCXsKKwkJLyogSW5zdGFsbCB0aGUgcm93IGZpbHRlciBleHByZXNzaW9u IGludG8gdGhlIHRhYmxlIGJ1aWxkZXIgY29udGV4dCAqLworCQl2YWx1ZSA9IEV4ZWNFdmFsRXhw cih0c3RhdGUtPnJvd2V4cHIsIGVjb250ZXh0LCAmaXNudWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfTlVMTF9WQUxVRV9OT1RfQUxM T1dFRCksCisJCQkJCSBlcnJtc2coInJvdyBmaWx0ZXIgZXhwcmVzc2lvbiBtdXN0IG5vdCBiZSBu dWxsIikpKTsKIAotCXJvdXRpbmUtPlNldFJvd0ZpbHRlcih0c3RhdGUsIFRleHREYXR1bUdldENT dHJpbmcodmFsdWUpKTsKKwkJcm91dGluZS0+U2V0Um93RmlsdGVyKHRzdGF0ZSwgVGV4dERhdHVt R2V0Q1N0cmluZyh2YWx1ZSkpOworCX0KIAogCS8qCiAJICogSW5zdGFsbCB0aGUgY29sdW1uIGZp bHRlciBleHByZXNzaW9ucyBpbnRvIHRoZSB0YWJsZSBidWlsZGVyIGNvbnRleHQuCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL21h a2VmdW5jcy5jCmluZGV4IDA5YTA1YTAzNzMuLmI4ZDM0NzcwZTggMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5j cy5jCkBAIC01MzgsNiArNTM4LDIyIEBAIG1ha2VGdW5jRXhwcihPaWQgZnVuY2lkLCBPaWQgcmV0 dHlwZSwgTGlzdCAqYXJncywKIAlyZXR1cm4gZnVuY2V4cHI7CiB9CiAKKy8qCisgKiBtYWtlU3Ry aW5nQ29uc3QgLQorICogCWJ1aWxkIGEgQV9Db25zdCBub2RlIG9mIHR5cGUgVF9TdHJpbmcgZm9y IGdpdmVuIHN0cmluZworICovCitOb2RlICoKK21ha2VTdHJpbmdDb25zdChjaGFyICpzdHIsIGlu dCBsb2NhdGlvbikKK3sKKwlBX0NvbnN0CSAgICpuID0gbWFrZU5vZGUoQV9Db25zdCk7CisKKwlu LT52YWwuc3ZhbC50eXBlID0gVF9TdHJpbmc7CisJbi0+dmFsLnN2YWwuc3ZhbCA9IHN0cjsKKwlu LT5sb2NhdGlvbiA9IGxvY2F0aW9uOworCisgICByZXR1cm4gKE5vZGUgKikgbjsKK30KKwogLyoK ICAqIG1ha2VEZWZFbGVtIC0KICAqCWJ1aWxkIGEgRGVmRWxlbSBub2RlCkBAIC04NzUsNiArODkx LDk4IEBAIG1ha2VKc29uQmVoYXZpb3IoSnNvbkJlaGF2aW9yVHlwZSB0eXBlLCBOb2RlICpleHBy LCBKc29uQ29lcmNpb24gKmNvZXJjaW9uLAogCXJldHVybiBiZWhhdmlvcjsKIH0KIAorLyoKKyAq IG1ha2VKc29uVGFibGVQYXRoIC0KKyAqCQlNYWtlIEpzb25UYWJsZVBhdGggbm9kZSBmcm9tIGdp dmVuIHBhdGggc3RyaW5nIGFuZCBuYW1lIChpZiBhbnkpCisgKi8KK0pzb25UYWJsZVBhdGggKgor bWFrZUpzb25UYWJsZVBhdGgoQ29uc3QgKnBhdGh2YWx1ZSwgY2hhciAqcGF0aG5hbWUpCit7CisJ SnNvblRhYmxlUGF0aCAqcGF0aCA9IG1ha2VOb2RlKEpzb25UYWJsZVBhdGgpOworCisJQXNzZXJ0 KElzQShwYXRodmFsdWUsIENvbnN0KSk7CisJcGF0aC0+dmFsdWUgPSBwYXRodmFsdWU7CisJaWYg KHBhdGhuYW1lKQorCQlwYXRoLT5uYW1lID0gcGF0aG5hbWU7CisKKwlyZXR1cm4gcGF0aDsKK30K KworLyoKKyAqIG1ha2VKc29uVGFibGVQYXRoU3BlYyAtCisgKgkJTWFrZSBKc29uVGFibGVQYXRo U3BlYyBub2RlIGZyb20gZ2l2ZW4gcGF0aCBzdHJpbmcgYW5kIG5hbWUgKGlmIGFueSkKKyAqLwor Tm9kZSAqCittYWtlSnNvblRhYmxlUGF0aFNwZWMoY2hhciAqc3RyaW5nLCBjaGFyICpuYW1lLCBp bnQgc3RyaW5nX2xvY2F0aW9uLAorCQkJCQkgIGludCBuYW1lX2xvY2F0aW9uKQoreworCUpzb25U YWJsZVBhdGhTcGVjICpwYXRoc3BlYyA9IG1ha2VOb2RlKEpzb25UYWJsZVBhdGhTcGVjKTsKKwor CUFzc2VydChzdHJpbmcgIT0gTlVMTCk7CisJcGF0aHNwZWMtPnN0cmluZyA9IG1ha2VTdHJpbmdD b25zdChzdHJpbmcsIHN0cmluZ19sb2NhdGlvbik7CisJaWYgKG5hbWUgIT0gTlVMTCkKKwkJcGF0 aHNwZWMtPm5hbWUgPSBwc3RyZHVwKG5hbWUpOworCisJcGF0aHNwZWMtPm5hbWVfbG9jYXRpb24g PSBuYW1lX2xvY2F0aW9uOworCXBhdGhzcGVjLT5sb2NhdGlvbiA9IHN0cmluZ19sb2NhdGlvbjsK KworCXJldHVybiAoTm9kZSAqKSBwYXRoc3BlYzsKK30KKworLyoKKyAqIG1ha2VKc29uVGFibGVE ZWZhdWx0UGxhbiAtCisgKgkgICBjcmVhdGVzIGEgSnNvblRhYmxlUGxhblNwZWMgbm9kZSB0byBy ZXByZXNlbnQgYSAiZGVmYXVsdCIgSlNPTl9UQUJMRSBwbGFuCisgKgkgICB3aXRoIGdpdmVuIGpv aW4gc3RyYXRlZ3kKKyAqLworTm9kZSAqCittYWtlSnNvblRhYmxlRGVmYXVsdFBsYW4oSnNvblRh YmxlUGxhbkpvaW5UeXBlIGpvaW5fdHlwZSwgaW50IGxvY2F0aW9uKQoreworCUpzb25UYWJsZVBs YW5TcGVjICpuID0gbWFrZU5vZGUoSnNvblRhYmxlUGxhblNwZWMpOworCisJbi0+cGxhbl90eXBl ID0gSlNUUF9ERUZBVUxUOworCW4tPmpvaW5fdHlwZSA9IGpvaW5fdHlwZTsKKwluLT5sb2NhdGlv biA9IGxvY2F0aW9uOworCisJcmV0dXJuIChOb2RlICopIG47Cit9CisKKy8qCisgKiBtYWtlSnNv blRhYmxlU2ltcGxlUGxhbiAtCisgKgkgICBjcmVhdGVzIGEgSnNvblRhYmxlUGxhblNwZWMgbm9k ZSB0byByZXByZXNlbnQgYSAic2ltcGxlIiBKU09OX1RBQkxFIHBsYW4KKyAqCSAgIGZvciBnaXZl biBQQVRICisgKi8KK05vZGUgKgorbWFrZUpzb25UYWJsZVNpbXBsZVBsYW4oY2hhciAqcGF0aG5h bWUsIGludCBsb2NhdGlvbikKK3sKKwlKc29uVGFibGVQbGFuU3BlYyAqbiA9IG1ha2VOb2RlKEpz b25UYWJsZVBsYW5TcGVjKTsKKworCW4tPnBsYW5fdHlwZSA9IEpTVFBfU0lNUExFOworCW4tPnBh dGhuYW1lID0gcGF0aG5hbWU7CisJbi0+bG9jYXRpb24gPSBsb2NhdGlvbjsKKworCXJldHVybiAo Tm9kZSAqKSBuOworfQorCisvKgorICogbWFrZUpzb25UYWJsZUpvaW5lZFBsYW4gLQorICoJICAg Y3JlYXRlcyBhIEpzb25UYWJsZVBsYW5TcGVjIG5vZGUgdG8gcmVwcmVzZW50IGpvaW4gYmV0d2Vl biB0aGUgZ2l2ZW4KKyAqCSAgIHBhaXIgb2YgcGxhbnMKKyAqLworTm9kZSAqCittYWtlSnNvblRh YmxlSm9pbmVkUGxhbihKc29uVGFibGVQbGFuSm9pblR5cGUgdHlwZSwgTm9kZSAqcGxhbjEsIE5v ZGUgKnBsYW4yLAorCQkJCQkJaW50IGxvY2F0aW9uKQoreworCUpzb25UYWJsZVBsYW5TcGVjICpu ID0gbWFrZU5vZGUoSnNvblRhYmxlUGxhblNwZWMpOworCisJbi0+cGxhbl90eXBlID0gSlNUUF9K T0lORUQ7CisJbi0+am9pbl90eXBlID0gdHlwZTsKKwluLT5wbGFuMSA9IGNhc3ROb2RlKEpzb25U YWJsZVBsYW5TcGVjLCBwbGFuMSk7CisJbi0+cGxhbjIgPSBjYXN0Tm9kZShKc29uVGFibGVQbGFu U3BlYywgcGxhbjIpOworCW4tPmxvY2F0aW9uID0gbG9jYXRpb247CisKKwlyZXR1cm4gKE5vZGUg KikgbjsKK30KKwogLyoKICAqIG1ha2VKc29uS2V5VmFsdWUgLQogICoJICBjcmVhdGVzIGEgSnNv bktleVZhbHVlIG5vZGUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5j IGIvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMKaW5kZXggMmUzNTg0YTdlMS4uZmJkYzkz MDI4ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMKKysrIGIvc3Jj L2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMKQEAgLTI2OTIsNiArMjY5MiwxMCBAQCBleHByZXNz aW9uX3RyZWVfd2Fsa2VyX2ltcGwoTm9kZSAqbm9kZSwKIAkJCQkJcmV0dXJuIHRydWU7CiAJCQkJ aWYgKFdBTEsodGYtPmNvbGRlZmV4cHJzKSkKIAkJCQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKFdB TEsodGYtPmNvbHZhbGV4cHJzKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKFdBTEsodGYt PnBhc3Npbmd2YWxleHBycykpCisJCQkJCXJldHVybiB0cnVlOwogCQkJfQogCQkJYnJlYWs7CiAJ CWRlZmF1bHQ6CkBAIC0zNzU1LDYgKzM3NTksOCBAQCBleHByZXNzaW9uX3RyZWVfbXV0YXRvcl9p bXBsKE5vZGUgKm5vZGUsCiAJCQkJTVVUQVRFKG5ld25vZGUtPnJvd2V4cHIsIHRmLT5yb3dleHBy LCBOb2RlICopOwogCQkJCU1VVEFURShuZXdub2RlLT5jb2xleHBycywgdGYtPmNvbGV4cHJzLCBM aXN0ICopOwogCQkJCU1VVEFURShuZXdub2RlLT5jb2xkZWZleHBycywgdGYtPmNvbGRlZmV4cHJz LCBMaXN0ICopOworCQkJCU1VVEFURShuZXdub2RlLT5jb2x2YWxleHBycywgdGYtPmNvbHZhbGV4 cHJzLCBMaXN0ICopOworCQkJCU1VVEFURShuZXdub2RlLT5wYXNzaW5ndmFsZXhwcnMsIHRmLT5w YXNzaW5ndmFsZXhwcnMsIExpc3QgKik7CiAJCQkJcmV0dXJuIChOb2RlICopIG5ld25vZGU7CiAJ CQl9CiAJCQlicmVhazsKQEAgLTQxODAsNiArNDE4NiwzOCBAQCByYXdfZXhwcmVzc2lvbl90cmVl X3dhbGtlcl9pbXBsKE5vZGUgKm5vZGUsCiAJCQkJCXJldHVybiB0cnVlOwogCQkJfQogCQkJYnJl YWs7CisJCWNhc2UgVF9Kc29uVGFibGU6CisJCQl7CisJCQkJSnNvblRhYmxlICAqanQgPSAoSnNv blRhYmxlICopIG5vZGU7CisKKwkJCQlpZiAoV0FMSyhqdC0+Y29udGV4dF9pdGVtKSkKKwkJCQkJ cmV0dXJuIHRydWU7CisJCQkJaWYgKFdBTEsoanQtPnBhdGhzcGVjKSkKKwkJCQkJcmV0dXJuIHRy dWU7CisJCQkJaWYgKFdBTEsoanQtPnBhc3NpbmcpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlp ZiAoV0FMSyhqdC0+Y29sdW1ucykpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChXQUxLKGp0 LT5vbl9lcnJvcikpCisJCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2Ug VF9Kc29uVGFibGVDb2x1bW46CisJCQl7CisJCQkJSnNvblRhYmxlQ29sdW1uICpqdGMgPSAoSnNv blRhYmxlQ29sdW1uICopIG5vZGU7CisKKwkJCQlpZiAoV0FMSyhqdGMtPnR5cGVOYW1lKSkKKwkJ CQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKFdBTEsoanRjLT5vbl9lbXB0eSkpCisJCQkJCXJldHVy biB0cnVlOworCQkJCWlmIChXQUxLKGp0Yy0+b25fZXJyb3IpKQorCQkJCQlyZXR1cm4gdHJ1ZTsK KwkJCQlpZiAoanRjLT5jb2x0eXBlID09IEpUQ19ORVNURUQgJiYgV0FMSyhqdGMtPmNvbHVtbnMp KQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRfSnNvblRhYmxl UGF0aFNwZWM6CisJCQlyZXR1cm4gV0FMSygoKEpzb25UYWJsZVBhdGhTcGVjICopIG5vZGUpLT5z dHJpbmcpOwogCQljYXNlIFRfTnVsbFRlc3Q6CiAJCQlyZXR1cm4gV0FMSygoKE51bGxUZXN0ICop IG5vZGUpLT5hcmcpOwogCQljYXNlIFRfQm9vbGVhblRlc3Q6CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9wYXJzZXIvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9wYXJzZXIvTWFrZWZpbGUKaW5kZXgg NDAxYzE2Njg2Yy4uMzE2MmEwMWYzMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL01h a2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9NYWtlZmlsZQpAQCAtMjMsNiArMjMsNyBA QCBPQkpTID0gXAogCXBhcnNlX2Vuci5vIFwKIAlwYXJzZV9leHByLm8gXAogCXBhcnNlX2Z1bmMu byBcCisJcGFyc2VfanNvbnRhYmxlLm8gXAogCXBhcnNlX21lcmdlLm8gXAogCXBhcnNlX25vZGUu byBcCiAJcGFyc2Vfb3Blci5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFt LnkgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CmluZGV4IDI3MmFjYzg4NTYuLjJkMTdlOTcw OTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKKysrIGIvc3JjL2JhY2tl bmQvcGFyc2VyL2dyYW0ueQpAQCAtMTcwLDcgKzE3MCw2IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZVJh d1N0bXRFbmQoUmF3U3RtdCAqcnMsIGludCBlbmRfbG9jYXRpb24pOwogc3RhdGljIE5vZGUgKm1h a2VDb2x1bW5SZWYoY2hhciAqY29sbmFtZSwgTGlzdCAqaW5kaXJlY3Rpb24sCiAJCQkJCQkgICBp bnQgbG9jYXRpb24sIGNvcmVfeXlzY2FuX3QgeXlzY2FubmVyKTsKIHN0YXRpYyBOb2RlICptYWtl VHlwZUNhc3QoTm9kZSAqYXJnLCBUeXBlTmFtZSAqdHlwZW5hbWUsIGludCBsb2NhdGlvbik7Ci1z dGF0aWMgTm9kZSAqbWFrZVN0cmluZ0NvbnN0KGNoYXIgKnN0ciwgaW50IGxvY2F0aW9uKTsKIHN0 YXRpYyBOb2RlICptYWtlU3RyaW5nQ29uc3RDYXN0KGNoYXIgKnN0ciwgaW50IGxvY2F0aW9uLCBU eXBlTmFtZSAqdHlwZW5hbWUpOwogc3RhdGljIE5vZGUgKm1ha2VJbnRDb25zdChpbnQgdmFsLCBp bnQgbG9jYXRpb24pOwogc3RhdGljIE5vZGUgKm1ha2VGbG9hdENvbnN0KGNoYXIgKnN0ciwgaW50 IGxvY2F0aW9uKTsKQEAgLTY1NSwxNSArNjU0LDMxIEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJz aXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7 CiAJCQkJanNvbl9hcmd1bWVudAogCQkJCWpzb25fYmVoYXZpb3IKIAkJCQlqc29uX29uX2Vycm9y X2NsYXVzZV9vcHQKKwkJCQlqc29uX3RhYmxlCisJCQkJanNvbl90YWJsZV9jb2x1bW5fZGVmaW5p dGlvbgorCQkJCWpzb25fdGFibGVfY29sdW1uX3BhdGhfY2xhdXNlX29wdAorCQkJCWpzb25fdGFi bGVfcGxhbl9jbGF1c2Vfb3B0CisJCQkJanNvbl90YWJsZV9wbGFuCisJCQkJanNvbl90YWJsZV9w bGFuX3NpbXBsZQorCQkJCWpzb25fdGFibGVfcGxhbl9vdXRlcgorCQkJCWpzb25fdGFibGVfcGxh bl9pbm5lcgorCQkJCWpzb25fdGFibGVfcGxhbl91bmlvbgorCQkJCWpzb25fdGFibGVfcGxhbl9j cm9zcworCQkJCWpzb25fdGFibGVfcGxhbl9wcmltYXJ5CiAldHlwZSA8bGlzdD4JanNvbl9uYW1l X2FuZF92YWx1ZV9saXN0CiAJCQkJanNvbl92YWx1ZV9leHByX2xpc3QKIAkJCQlqc29uX2FycmF5 X2FnZ3JlZ2F0ZV9vcmRlcl9ieV9jbGF1c2Vfb3B0CiAJCQkJanNvbl9hcmd1bWVudHMKIAkJCQlq c29uX2JlaGF2aW9yX2NsYXVzZV9vcHQKIAkJCQlqc29uX3Bhc3NpbmdfY2xhdXNlX29wdAorCQkJ CWpzb25fdGFibGVfY29sdW1uX2RlZmluaXRpb25fbGlzdAorJXR5cGUgPHN0cj4JCWpzb25fdGFi bGVfcGF0aF9uYW1lX29wdAogJXR5cGUgPGl2YWw+CWpzb25fYmVoYXZpb3JfdHlwZQogCQkJCWpz b25fcHJlZGljYXRlX3R5cGVfY29uc3RyYWludAogCQkJCWpzb25fcXVvdGVzX2NsYXVzZV9vcHQK KwkJCQlqc29uX3RhYmxlX2RlZmF1bHRfcGxhbl9jaG9pY2VzCisJCQkJanNvbl90YWJsZV9kZWZh dWx0X3BsYW5faW5uZXJfb3V0ZXIKKwkJCQlqc29uX3RhYmxlX2RlZmF1bHRfcGxhbl91bmlvbl9j cm9zcwogCQkJCWpzb25fd3JhcHBlcl9iZWhhdmlvcgogJXR5cGUgPGJvb2xlYW4+CWpzb25fa2V5 X3VuaXF1ZW5lc3NfY29uc3RyYWludF9vcHQKIAkJCQlqc29uX29iamVjdF9jb25zdHJ1Y3Rvcl9u dWxsX2NsYXVzZV9vcHQKQEAgLTczMyw3ICs3NDgsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vy c2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkp OwogCUlOVEVSU0VDVCBJTlRFUlZBTCBJTlRPIElOVk9LRVIgSVMgSVNOVUxMIElTT0xBVElPTgog CiAJSk9JTiBKU09OIEpTT05fQVJSQVkgSlNPTl9BUlJBWUFHRyBKU09OX0VYSVNUUyBKU09OX09C SkVDVCBKU09OX09CSkVDVEFHRwotCUpTT05fUVVFUlkgSlNPTl9TQ0FMQVIgSlNPTl9TRVJJQUxJ WkUgSlNPTl9WQUxVRQorCUpTT05fUVVFUlkgSlNPTl9TQ0FMQVIgSlNPTl9TRVJJQUxJWkUgSlNP Tl9UQUJMRSBKU09OX1ZBTFVFCiAKIAlLRUVQIEtFWSBLRVlTCiAKQEAgLTc0NCw4ICs3NTksOCBA QCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlz dCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCU1BUFBJTkcgTUFUQ0ggTUFUQ0hFRCBNQVRFUklB TElaRUQgTUFYVkFMVUUgTUVSR0UgTUVUSE9ECiAJTUlOVVRFX1AgTUlOVkFMVUUgTU9ERSBNT05U SF9QIE1PVkUKIAotCU5BTUVfUCBOQU1FUyBOQVRJT05BTCBOQVRVUkFMIE5DSEFSIE5FVyBORVhU IE5GQyBORkQgTkZLQyBORktEIE5PIE5PTkUKLQlOT1JNQUxJWkUgTk9STUFMSVpFRAorCU5BTUVf UCBOQU1FUyBOQVRJT05BTCBOQVRVUkFMIE5DSEFSIE5FU1RFRCBORVcgTkVYVCBORkMgTkZEIE5G S0MgTkZLRCBOTworCU5PTkUgTk9STUFMSVpFIE5PUk1BTElaRUQKIAlOT1QgTk9USElORyBOT1RJ RlkgTk9UTlVMTCBOT1dBSVQgTlVMTF9QIE5VTExJRgogCU5VTExTX1AgTlVNRVJJQwogCkBAIC03 NTMsOCArNzY4LDggQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIg KnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAlPUkRFUiBPUkRJTkFMSVRZ IE9USEVSUyBPVVRfUCBPVVRFUl9QCiAJT1ZFUiBPVkVSTEFQUyBPVkVSTEFZIE9WRVJSSURJTkcg T1dORUQgT1dORVIKIAotCVBBUkFMTEVMIFBBUkFNRVRFUiBQQVJTRVIgUEFSVElBTCBQQVJUSVRJ T04gUEFTU0lORyBQQVNTV09SRAotCVBMQUNJTkcgUExBTlMgUE9MSUNZCisJUEFSQUxMRUwgUEFS QU1FVEVSIFBBUlNFUiBQQVJUSUFMIFBBUlRJVElPTiBQQVNTSU5HIFBBU1NXT1JEIFBBVEgKKwlQ TEFDSU5HIFBMQU4gUExBTlMgUE9MSUNZCiAJUE9TSVRJT04gUFJFQ0VESU5HIFBSRUNJU0lPTiBQ UkVTRVJWRSBQUkVQQVJFIFBSRVBBUkVEIFBSSU1BUlkKIAlQUklPUiBQUklWSUxFR0VTIFBST0NF RFVSQUwgUFJPQ0VEVVJFIFBST0NFRFVSRVMgUFJPR1JBTSBQVUJMSUNBVElPTgogCkBAIC04NzIs MTAgKzg4NywxMyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAq cmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogICogdGhlIHNhbWUgcHJlY2Vk ZW5jZSBhcyBJREVOVC4gIFRoaXMgYWxsb3dzIHJlc29sdmluZyBjb25mbGljdHMgaW4gdGhlCiAg KiBqc29uX3ByZWRpY2F0ZV90eXBlX2NvbnN0cmFpbnQgYW5kIGpzb25fa2V5X3VuaXF1ZW5lc3Nf Y29uc3RyYWludF9vcHQKICAqIHByb2R1Y3Rpb25zIChzZWUgY29tbWVudHMgdGhlcmUpLgorICoK KyAqIExpa2UgdGhlIFVOQk9VTkRFRCBQUkVDRURJTkcvRk9MTE9XSU5HIGNhc2UsIE5FU1RFRCBp cyBhc3NpZ25lZCBhIGxvd2VyCisgKiBwcmVjZWRlbmNlIHRoYW4gUEFUSCB0byBmaXggYW1iaWd1 aXR5IGluIHRoZSBqc29uX3RhYmxlIHByb2R1Y3Rpb24uCiAgKi8KLSVub25hc3NvYwlVTkJPVU5E RUQJCS8qIGlkZWFsbHkgd291bGQgaGF2ZSBzYW1lIHByZWNlZGVuY2UgYXMgSURFTlQgKi8KKyVu b25hc3NvYwlVTkJPVU5ERUQgTkVTVEVEIC8qIGlkZWFsbHkgd291bGQgaGF2ZSBzYW1lIHByZWNl ZGVuY2UgYXMgSURFTlQgKi8KICVub25hc3NvYwlJREVOVCBQQVJUSVRJT04gUkFOR0UgUk9XUyBH Uk9VUFMgUFJFQ0VESU5HIEZPTExPV0lORyBDVUJFIFJPTExVUAotCQkJU0VUIEtFWVMgT0JKRUNU X1AgU0NBTEFSIFZBTFVFX1AgV0lUSCBXSVRIT1VUCisJCQlTRVQgS0VZUyBPQkpFQ1RfUCBTQ0FM QVIgVkFMVUVfUCBXSVRIIFdJVEhPVVQgUEFUSAogJWxlZnQJCU9wIE9QRVJBVE9SCQkvKiBtdWx0 aS1jaGFyYWN0ZXIgb3BzIGFuZCB1c2VyLWRlZmluZWQgb3BlcmF0b3JzICovCiAlbGVmdAkJJysn ICctJwogJWxlZnQJCScqJyAnLycgJyUnCkBAIC04OTYsNyArOTE0LDYgQEAgc3RhdGljIE5vZGUg Km1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5v ZGUgKnF1ZXJ5KTsKICAqIGxlZnQtYXNzb2NpYXRpdml0eSBhbW9uZyB0aGUgSk9JTiBydWxlcyB0 aGVtc2VsdmVzLgogICovCiAlbGVmdAkJSk9JTiBDUk9TUyBMRUZUIEZVTEwgUklHSFQgSU5ORVJf UCBOQVRVUkFMCi0KICUlCiAKIC8qCkBAIC0xMzQzOCw2ICsxMzQ1NSwyMSBAQCB0YWJsZV9yZWY6 CXJlbGF0aW9uX2V4cHIgb3B0X2FsaWFzX2NsYXVzZQogCQkJCQkkMi0+YWxpYXMgPSAkNDsKIAkJ CQkJJCQgPSAoTm9kZSAqKSAkMjsKIAkJCQl9CisJCQl8IGpzb25fdGFibGUgb3B0X2FsaWFzX2Ns YXVzZQorCQkJCXsKKwkJCQkJSnNvblRhYmxlICAqanQgPSBjYXN0Tm9kZShKc29uVGFibGUsICQx KTsKKworCQkJCQlqdC0+YWxpYXMgPSAkMjsKKwkJCQkJJCQgPSAoTm9kZSAqKSBqdDsKKwkJCQl9 CisJCQl8IExBVEVSQUxfUCBqc29uX3RhYmxlIG9wdF9hbGlhc19jbGF1c2UKKwkJCQl7CisJCQkJ CUpzb25UYWJsZSAgKmp0ID0gY2FzdE5vZGUoSnNvblRhYmxlLCAkMik7CisKKwkJCQkJanQtPmFs aWFzID0gJDM7CisJCQkJCWp0LT5sYXRlcmFsID0gdHJ1ZTsKKwkJCQkJJCQgPSAoTm9kZSAqKSBq dDsKKwkJCQl9CiAJCTsKIAogCkBAIC0xNDAwNSw2ICsxNDAzNyw4IEBAIHhtbHRhYmxlX2NvbHVt bl9vcHRpb25fZWw6CiAJCQkJeyAkJCA9IG1ha2VEZWZFbGVtKCJpc19ub3RfbnVsbCIsIChOb2Rl ICopIG1ha2VCb29sZWFuKHRydWUpLCBAMSk7IH0KIAkJCXwgTlVMTF9QCiAJCQkJeyAkJCA9IG1h a2VEZWZFbGVtKCJpc19ub3RfbnVsbCIsIChOb2RlICopIG1ha2VCb29sZWFuKGZhbHNlKSwgQDEp OyB9CisJCQl8IFBBVEggYl9leHByCisJCQkJeyAkJCA9IG1ha2VEZWZFbGVtKCJwYXRoIiwgJDIs IEAxKTsgfQogCQk7CiAKIHhtbF9uYW1lc3BhY2VfbGlzdDoKQEAgLTE0MDMzLDYgKzE0MDY3LDIz MyBAQCB4bWxfbmFtZXNwYWNlX2VsOgogCQkJCX0KIAkJOwogCitqc29uX3RhYmxlOgorCQkJSlNP Tl9UQUJMRSAnKCcKKwkJCQlqc29uX3ZhbHVlX2V4cHIgJywnIGFfZXhwciBqc29uX3RhYmxlX3Bh dGhfbmFtZV9vcHQKKwkJCQlqc29uX3Bhc3NpbmdfY2xhdXNlX29wdAorCQkJCUNPTFVNTlMgJygn IGpzb25fdGFibGVfY29sdW1uX2RlZmluaXRpb25fbGlzdCAnKScKKwkJCQlqc29uX3RhYmxlX3Bs YW5fY2xhdXNlX29wdAorCQkJCWpzb25fb25fZXJyb3JfY2xhdXNlX29wdAorCQkJJyknCisJCQkJ eworCQkJCQlKc29uVGFibGUgKm4gPSBtYWtlTm9kZShKc29uVGFibGUpOworCQkJCQljaGFyCSAg KnBhdGhzdHJpbmc7CisKKwkJCQkJbi0+Y29udGV4dF9pdGVtID0gKEpzb25WYWx1ZUV4cHIgKikg JDM7CisJCQkJCWlmICghSXNBKCQ1LCBBX0NvbnN0KSB8fAorCQkJCQkJY2FzdE5vZGUoQV9Db25z dCwgJDUpLT52YWwubm9kZS50eXBlICE9IFRfU3RyaW5nKQorCQkJCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkJCQkJZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJCQkJ CWVycm1zZygib25seSBzdHJpbmcgY29uc3RhbnRzIGFyZSBzdXBwb3J0ZWQgaW4gSlNPTl9UQUJM RSIKKwkJCQkJCQkJCSAgICIgcGF0aCBzcGVjaWZpY2F0aW9uIiksCisJCQkJCQkJCXBhcnNlcl9l cnJwb3NpdGlvbihANSkpOworCQkJCQlwYXRoc3RyaW5nID0gY2FzdE5vZGUoQV9Db25zdCwgJDUp LT52YWwuc3ZhbC5zdmFsOworCQkJCQluLT5wYXRoc3BlYyA9IChKc29uVGFibGVQYXRoU3BlYyAq KQorCQkJCQkJbWFrZUpzb25UYWJsZVBhdGhTcGVjKHBhdGhzdHJpbmcsICQ2LCBANSwgQDYpOwor CQkJCQluLT5wYXNzaW5nID0gJDc7CisJCQkJCW4tPmNvbHVtbnMgPSAkMTA7CisJCQkJCW4tPnBs YW5zcGVjID0gKEpzb25UYWJsZVBsYW5TcGVjICopICQxMjsKKwkJCQkJbi0+b25fZXJyb3IgPSAo SnNvbkJlaGF2aW9yICopICQxMzsKKwkJCQkJbi0+bG9jYXRpb24gPSBAMTsKKwkJCQkJJCQgPSAo Tm9kZSAqKSBuOworCQkJCX0KKwkJOworCitqc29uX3RhYmxlX3BhdGhfbmFtZV9vcHQ6CisJCQlB UyBuYW1lCQkJeyAkJCA9ICQyOyB9CisJCQl8IC8qIGVtcHR5ICovCXsgJCQgPSBOVUxMOyB9CisJ CTsKKworanNvbl90YWJsZV9jb2x1bW5fZGVmaW5pdGlvbl9saXN0OgorCQkJanNvbl90YWJsZV9j b2x1bW5fZGVmaW5pdGlvbgorCQkJCXsgJCQgPSBsaXN0X21ha2UxKCQxKTsgfQorCQkJfCBqc29u X3RhYmxlX2NvbHVtbl9kZWZpbml0aW9uX2xpc3QgJywnIGpzb25fdGFibGVfY29sdW1uX2RlZmlu aXRpb24KKwkJCQl7ICQkID0gbGFwcGVuZCgkMSwgJDMpOyB9CisJCTsKKworanNvbl90YWJsZV9j b2x1bW5fZGVmaW5pdGlvbjoKKwkJCUNvbElkIEZPUiBPUkRJTkFMSVRZCisJCQkJeworCQkJCQlK c29uVGFibGVDb2x1bW4gKm4gPSBtYWtlTm9kZShKc29uVGFibGVDb2x1bW4pOworCisJCQkJCW4t PmNvbHR5cGUgPSBKVENfRk9SX09SRElOQUxJVFk7CisJCQkJCW4tPm5hbWUgPSAkMTsKKwkJCQkJ bi0+bG9jYXRpb24gPSBAMTsKKwkJCQkJJCQgPSAoTm9kZSAqKSBuOworCQkJCX0KKwkJCXwgQ29s SWQgVHlwZW5hbWUKKwkJCQlqc29uX3RhYmxlX2NvbHVtbl9wYXRoX2NsYXVzZV9vcHQKKwkJCQlq c29uX3dyYXBwZXJfYmVoYXZpb3IKKwkJCQlqc29uX3F1b3Rlc19jbGF1c2Vfb3B0CisJCQkJanNv bl9iZWhhdmlvcl9jbGF1c2Vfb3B0CisJCQkJeworCQkJCQlKc29uVGFibGVDb2x1bW4gKm4gPSBt YWtlTm9kZShKc29uVGFibGVDb2x1bW4pOworCisJCQkJCW4tPmNvbHR5cGUgPSBKVENfUkVHVUxB UjsKKwkJCQkJbi0+bmFtZSA9ICQxOworCQkJCQluLT50eXBlTmFtZSA9ICQyOworCQkJCQluLT5m b3JtYXQgPSBtYWtlSnNvbkZvcm1hdChKU19GT1JNQVRfREVGQVVMVCwgSlNfRU5DX0RFRkFVTFQs IC0xKTsKKwkJCQkJbi0+cGF0aHNwZWMgPSAoSnNvblRhYmxlUGF0aFNwZWMgKikgJDM7CisJCQkJ CW4tPndyYXBwZXIgPSAkNDsgLyogZGlzYWxsb3dlZCBkdXJpbmcgcGFyc2UtYW5hbHlzaXMhICov CisJCQkJCW4tPnF1b3RlcyA9ICQ1OyAvKiBkaXNhbGxvd2VkIGR1cmluZyBwYXJzZS1hbmFseXNp cyEgKi8KKwkJCQkJbi0+b25fZW1wdHkgPSAoSnNvbkJlaGF2aW9yICopIGxpbml0aWFsKCQ2KTsK KwkJCQkJbi0+b25fZXJyb3IgPSAoSnNvbkJlaGF2aW9yICopIGxzZWNvbmQoJDYpOworCQkJCQlu LT5sb2NhdGlvbiA9IEAxOworCQkJCQkkJCA9IChOb2RlICopIG47CisJCQkJfQorCQkJfCBDb2xJ ZCBUeXBlbmFtZSBqc29uX2Zvcm1hdF9jbGF1c2UKKwkJCQlqc29uX3RhYmxlX2NvbHVtbl9wYXRo X2NsYXVzZV9vcHQKKwkJCQlqc29uX3dyYXBwZXJfYmVoYXZpb3IKKwkJCQlqc29uX3F1b3Rlc19j bGF1c2Vfb3B0CisJCQkJanNvbl9iZWhhdmlvcl9jbGF1c2Vfb3B0CisJCQkJeworCQkJCQlKc29u VGFibGVDb2x1bW4gKm4gPSBtYWtlTm9kZShKc29uVGFibGVDb2x1bW4pOworCisJCQkJCW4tPmNv bHR5cGUgPSBKVENfRk9STUFUVEVEOworCQkJCQluLT5uYW1lID0gJDE7CisJCQkJCW4tPnR5cGVO YW1lID0gJDI7CisJCQkJCW4tPmZvcm1hdCA9IChKc29uRm9ybWF0ICopICQzOworCQkJCQluLT5w YXRoc3BlYyA9IChKc29uVGFibGVQYXRoU3BlYyAqKSAkNDsKKwkJCQkJbi0+d3JhcHBlciA9ICQ1 OworCQkJCQluLT5xdW90ZXMgPSAkNjsKKwkJCQkJbi0+b25fZW1wdHkgPSAoSnNvbkJlaGF2aW9y ICopIGxpbml0aWFsKCQ3KTsKKwkJCQkJbi0+b25fZXJyb3IgPSAoSnNvbkJlaGF2aW9yICopIGxz ZWNvbmQoJDcpOworCQkJCQluLT5sb2NhdGlvbiA9IEAxOworCQkJCQkkJCA9IChOb2RlICopIG47 CisJCQkJfQorCQkJfCBDb2xJZCBUeXBlbmFtZQorCQkJCUVYSVNUUyBqc29uX3RhYmxlX2NvbHVt bl9wYXRoX2NsYXVzZV9vcHQKKwkJCQlqc29uX2JlaGF2aW9yX2NsYXVzZV9vcHQKKwkJCQl7CisJ CQkJCUpzb25UYWJsZUNvbHVtbiAqbiA9IG1ha2VOb2RlKEpzb25UYWJsZUNvbHVtbik7CisKKwkJ CQkJbi0+Y29sdHlwZSA9IEpUQ19FWElTVFM7CisJCQkJCW4tPm5hbWUgPSAkMTsKKwkJCQkJbi0+ dHlwZU5hbWUgPSAkMjsKKwkJCQkJbi0+Zm9ybWF0ID0gbWFrZUpzb25Gb3JtYXQoSlNfRk9STUFU X0RFRkFVTFQsIEpTX0VOQ19ERUZBVUxULCAtMSk7CisJCQkJCW4tPndyYXBwZXIgPSBKU1dfTk9O RTsKKwkJCQkJbi0+cXVvdGVzID0gSlNfUVVPVEVTX1VOU1BFQzsKKwkJCQkJbi0+cGF0aHNwZWMg PSAoSnNvblRhYmxlUGF0aFNwZWMgKikgJDQ7CisJCQkJCW4tPm9uX2VtcHR5ID0gKEpzb25CZWhh dmlvciAqKSBsaW5pdGlhbCgkNSk7CisJCQkJCW4tPm9uX2Vycm9yID0gKEpzb25CZWhhdmlvciAq KSBsc2Vjb25kKCQ1KTsKKwkJCQkJbi0+bG9jYXRpb24gPSBAMTsKKwkJCQkJJCQgPSAoTm9kZSAq KSBuOworCQkJCX0KKwkJCXwgTkVTVEVEIHBhdGhfb3B0IFNjb25zdAorCQkJCUNPTFVNTlMgJygn IGpzb25fdGFibGVfY29sdW1uX2RlZmluaXRpb25fbGlzdCAnKScKKwkJCQl7CisJCQkJCUpzb25U YWJsZUNvbHVtbiAqbiA9IG1ha2VOb2RlKEpzb25UYWJsZUNvbHVtbik7CisKKwkJCQkJbi0+Y29s dHlwZSA9IEpUQ19ORVNURUQ7CisJCQkJCW4tPnBhdGhzcGVjID0gKEpzb25UYWJsZVBhdGhTcGVj ICopCisJCQkJCQltYWtlSnNvblRhYmxlUGF0aFNwZWMoJDMsIE5VTEwsIEAzLCAtMSk7CisJCQkJ CW4tPmNvbHVtbnMgPSAkNjsKKwkJCQkJbi0+bG9jYXRpb24gPSBAMTsKKwkJCQkJJCQgPSAoTm9k ZSAqKSBuOworCQkJCX0KKwkJCXwgTkVTVEVEIHBhdGhfb3B0IFNjb25zdCBBUyBuYW1lCisJCQkJ Q09MVU1OUyAnKCcganNvbl90YWJsZV9jb2x1bW5fZGVmaW5pdGlvbl9saXN0ICcpJworCQkJCXsK KwkJCQkJSnNvblRhYmxlQ29sdW1uICpuID0gbWFrZU5vZGUoSnNvblRhYmxlQ29sdW1uKTsKKwor CQkJCQluLT5jb2x0eXBlID0gSlRDX05FU1RFRDsKKwkJCQkJbi0+cGF0aHNwZWMgPSAoSnNvblRh YmxlUGF0aFNwZWMgKikKKwkJCQkJCW1ha2VKc29uVGFibGVQYXRoU3BlYygkMywgJDUsIEAzLCBA NSk7CisJCQkJCW4tPmNvbHVtbnMgPSAkODsKKwkJCQkJbi0+bG9jYXRpb24gPSBAMTsKKwkJCQkJ JCQgPSAoTm9kZSAqKSBuOworCQkJCX0KKwkJOworCitwYXRoX29wdDoKKwkJCVBBVEgKKwkJCXwg LyogRU1QVFkgKi8KKwkJOworCitqc29uX3RhYmxlX2NvbHVtbl9wYXRoX2NsYXVzZV9vcHQ6CisJ CQlQQVRIIFNjb25zdAorCQkJCXsgJCQgPSBtYWtlSnNvblRhYmxlUGF0aFNwZWMoJDIsIE5VTEws IEAyLCAtMSk7IH0KKwkJCXwgLyogRU1QVFkgKi8KKwkJCQl7ICQkID0gTlVMTDsgfQorCQk7CisK K2pzb25fdGFibGVfcGxhbl9jbGF1c2Vfb3B0OgorCQkJUExBTiAnKCcganNvbl90YWJsZV9wbGFu ICcpJworCQkJCXsgJCQgPSAkMzsgfQorCQkJfCBQTEFOIERFRkFVTFQgJygnIGpzb25fdGFibGVf ZGVmYXVsdF9wbGFuX2Nob2ljZXMgJyknCisJCQkJeyAkJCA9IG1ha2VKc29uVGFibGVEZWZhdWx0 UGxhbigkNCwgQDEpOyB9CisJCQl8IC8qIEVNUFRZICovCisJCQkJeyAkJCA9IE5VTEw7IH0KKwkJ OworCitqc29uX3RhYmxlX3BsYW46CisJCQlqc29uX3RhYmxlX3BsYW5fc2ltcGxlCisJCQl8IGpz b25fdGFibGVfcGxhbl9vdXRlcgorCQkJfCBqc29uX3RhYmxlX3BsYW5faW5uZXIKKwkJCXwganNv bl90YWJsZV9wbGFuX3VuaW9uCisJCQl8IGpzb25fdGFibGVfcGxhbl9jcm9zcworCQk7CisKK2pz b25fdGFibGVfcGxhbl9zaW1wbGU6CisJCQluYW1lCisJCQkJeyAkJCA9IG1ha2VKc29uVGFibGVT aW1wbGVQbGFuKCQxLCBAMSk7IH0KKwkJOworCitqc29uX3RhYmxlX3BsYW5fb3V0ZXI6CisJCQlq c29uX3RhYmxlX3BsYW5fc2ltcGxlIE9VVEVSX1AganNvbl90YWJsZV9wbGFuX3ByaW1hcnkKKwkJ CQl7ICQkID0gbWFrZUpzb25UYWJsZUpvaW5lZFBsYW4oSlNUUF9KT0lOX09VVEVSLCAkMSwgJDMs IEAxKTsgfQorCQk7CisKK2pzb25fdGFibGVfcGxhbl9pbm5lcjoKKwkJCWpzb25fdGFibGVfcGxh bl9zaW1wbGUgSU5ORVJfUCBqc29uX3RhYmxlX3BsYW5fcHJpbWFyeQorCQkJCXsgJCQgPSBtYWtl SnNvblRhYmxlSm9pbmVkUGxhbihKU1RQX0pPSU5fSU5ORVIsICQxLCAkMywgQDEpOyB9CisJCTsK KworanNvbl90YWJsZV9wbGFuX3VuaW9uOgorCQkJanNvbl90YWJsZV9wbGFuX3ByaW1hcnkgVU5J T04ganNvbl90YWJsZV9wbGFuX3ByaW1hcnkKKwkJCQl7ICQkID0gbWFrZUpzb25UYWJsZUpvaW5l ZFBsYW4oSlNUUF9KT0lOX1VOSU9OLCAkMSwgJDMsIEAxKTsgfQorCQkJfCBqc29uX3RhYmxlX3Bs YW5fdW5pb24gVU5JT04ganNvbl90YWJsZV9wbGFuX3ByaW1hcnkKKwkJCQl7ICQkID0gbWFrZUpz b25UYWJsZUpvaW5lZFBsYW4oSlNUUF9KT0lOX1VOSU9OLCAkMSwgJDMsIEAxKTsgfQorCQk7CisK K2pzb25fdGFibGVfcGxhbl9jcm9zczoKKwkJCWpzb25fdGFibGVfcGxhbl9wcmltYXJ5IENST1NT IGpzb25fdGFibGVfcGxhbl9wcmltYXJ5CisJCQkJeyAkJCA9IG1ha2VKc29uVGFibGVKb2luZWRQ bGFuKEpTVFBfSk9JTl9DUk9TUywgJDEsICQzLCBAMSk7IH0KKwkJCXwganNvbl90YWJsZV9wbGFu X2Nyb3NzIENST1NTIGpzb25fdGFibGVfcGxhbl9wcmltYXJ5CisJCQkJeyAkJCA9IG1ha2VKc29u VGFibGVKb2luZWRQbGFuKEpTVFBfSk9JTl9DUk9TUywgJDEsICQzLCBAMSk7IH0KKwkJOworCitq c29uX3RhYmxlX3BsYW5fcHJpbWFyeToKKwkJCWpzb25fdGFibGVfcGxhbl9zaW1wbGUKKwkJCQl7 ICQkID0gJDE7IH0KKwkJCXwgJygnIGpzb25fdGFibGVfcGxhbiAnKScKKwkJCQl7CisJCQkJCWNh c3ROb2RlKEpzb25UYWJsZVBsYW5TcGVjLCAkMiktPmxvY2F0aW9uID0gQDE7CisJCQkJCSQkID0g JDI7CisJCQkJfQorCQk7CisKK2pzb25fdGFibGVfZGVmYXVsdF9wbGFuX2Nob2ljZXM6CisJCQlq c29uX3RhYmxlX2RlZmF1bHRfcGxhbl9pbm5lcl9vdXRlcgorCQkJCXsgJCQgPSAkMSB8IEpTVFBf Sk9JTl9VTklPTjsgfQorCQkJfCBqc29uX3RhYmxlX2RlZmF1bHRfcGxhbl91bmlvbl9jcm9zcwor CQkJCXsgJCQgPSAkMSB8IEpTVFBfSk9JTl9PVVRFUjsgfQorCQkJfCBqc29uX3RhYmxlX2RlZmF1 bHRfcGxhbl9pbm5lcl9vdXRlciAnLCcganNvbl90YWJsZV9kZWZhdWx0X3BsYW5fdW5pb25fY3Jv c3MKKwkJCQl7ICQkID0gJDEgfCAkMzsgfQorCQkJfCBqc29uX3RhYmxlX2RlZmF1bHRfcGxhbl91 bmlvbl9jcm9zcyAnLCcganNvbl90YWJsZV9kZWZhdWx0X3BsYW5faW5uZXJfb3V0ZXIKKwkJCQl7 ICQkID0gJDEgfCAkMzsgfQorCQk7CisKK2pzb25fdGFibGVfZGVmYXVsdF9wbGFuX2lubmVyX291 dGVyOgorCQkJSU5ORVJfUAkJCQkJCXsgJCQgPSBKU1RQX0pPSU5fSU5ORVI7IH0KKwkJCXwgT1VU RVJfUAkJCQkJeyAkJCA9IEpTVFBfSk9JTl9PVVRFUjsgfQorCQk7CisKK2pzb25fdGFibGVfZGVm YXVsdF9wbGFuX3VuaW9uX2Nyb3NzOgorCQkJVU5JT04JCQkJCQl7ICQkID0gSlNUUF9KT0lOX1VO SU9OOyB9CisJCQl8IENST1NTCQkJCQkJeyAkJCA9IEpTVFBfSk9JTl9DUk9TUzsgfQorCQk7CisK IC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgogICoKICAqCVR5cGUgc3ludGF4CkBAIC0xNzQzNCw2ICsx NzY5NSw3IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJCXwgTU9WRQogCQkJfCBOQU1FX1AKIAkJ CXwgTkFNRVMKKwkJCXwgTkVTVEVECiAJCQl8IE5FVwogCQkJfCBORVhUCiAJCQl8IE5GQwpAQCAt MTc0NjgsNiArMTc3MzAsOCBAQCB1bnJlc2VydmVkX2tleXdvcmQ6CiAJCQl8IFBBUlRJVElPTgog CQkJfCBQQVNTSU5HCiAJCQl8IFBBU1NXT1JECisJCQl8IFBBVEgKKwkJCXwgUExBTgogCQkJfCBQ TEFOUwogCQkJfCBQT0xJQ1kKIAkJCXwgUFJFQ0VESU5HCkBAIC0xNzYzMiw2ICsxNzg5Niw3IEBA IGNvbF9uYW1lX2tleXdvcmQ6CiAJCQl8IEpTT05fUVVFUlkKIAkJCXwgSlNPTl9TQ0FMQVIKIAkJ CXwgSlNPTl9TRVJJQUxJWkUKKwkJCXwgSlNPTl9UQUJMRQogCQkJfCBKU09OX1ZBTFVFCiAJCQl8 IExFQVNUCiAJCQl8IE5BVElPTkFMCkBAIC0xODAwMCw2ICsxODI2NSw3IEBAIGJhcmVfbGFiZWxf a2V5d29yZDoKIAkJCXwgSlNPTl9RVUVSWQogCQkJfCBKU09OX1NDQUxBUgogCQkJfCBKU09OX1NF UklBTElaRQorCQkJfCBKU09OX1RBQkxFCiAJCQl8IEpTT05fVkFMVUUKIAkJCXwgS0VFUAogCQkJ fCBLRVkKQEAgLTE4MDM5LDYgKzE4MzA1LDcgQEAgYmFyZV9sYWJlbF9rZXl3b3JkOgogCQkJfCBO QVRJT05BTAogCQkJfCBOQVRVUkFMCiAJCQl8IE5DSEFSCisJCQl8IE5FU1RFRAogCQkJfCBORVcK IAkJCXwgTkVYVAogCQkJfCBORkMKQEAgLTE4MDgzLDcgKzE4MzUwLDkgQEAgYmFyZV9sYWJlbF9r ZXl3b3JkOgogCQkJfCBQQVJUSVRJT04KIAkJCXwgUEFTU0lORwogCQkJfCBQQVNTV09SRAorCQkJ fCBQQVRICiAJCQl8IFBMQUNJTkcKKwkJCXwgUExBTgogCQkJfCBQTEFOUwogCQkJfCBQT0xJQ1kK IAkJCXwgUE9TSVRJT04KQEAgLTE4MzUxLDE4ICsxODYyMCw2IEBAIG1ha2VUeXBlQ2FzdChOb2Rl ICphcmcsIFR5cGVOYW1lICp0eXBlbmFtZSwgaW50IGxvY2F0aW9uKQogCXJldHVybiAoTm9kZSAq KSBuOwogfQogCi1zdGF0aWMgTm9kZSAqCi1tYWtlU3RyaW5nQ29uc3QoY2hhciAqc3RyLCBpbnQg bG9jYXRpb24pCi17Ci0JQV9Db25zdAkgICAqbiA9IG1ha2VOb2RlKEFfQ29uc3QpOwotCi0Jbi0+ dmFsLnN2YWwudHlwZSA9IFRfU3RyaW5nOwotCW4tPnZhbC5zdmFsLnN2YWwgPSBzdHI7Ci0Jbi0+ bG9jYXRpb24gPSBsb2NhdGlvbjsKLQotICAgcmV0dXJuIChOb2RlICopIG47Ci19Ci0KIHN0YXRp YyBOb2RlICoKIG1ha2VTdHJpbmdDb25zdENhc3QoY2hhciAqc3RyLCBpbnQgbG9jYXRpb24sIFR5 cGVOYW1lICp0eXBlbmFtZSkKIHsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9tZXNv bi5idWlsZCBiL3NyYy9iYWNrZW5kL3BhcnNlci9tZXNvbi5idWlsZAppbmRleCA4ZTgyOTU2NDBi Li41NzNkNzBiM2QxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvbWVzb24uYnVpbGQK KysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL21lc29uLmJ1aWxkCkBAIC0xMCw2ICsxMCw3IEBAIGJh Y2tlbmRfc291cmNlcyArPSBmaWxlcygKICAgJ3BhcnNlX2Vuci5jJywKICAgJ3BhcnNlX2V4cHIu YycsCiAgICdwYXJzZV9mdW5jLmMnLAorICAncGFyc2VfanNvbnRhYmxlLmMnLAogICAncGFyc2Vf bWVyZ2UuYycsCiAgICdwYXJzZV9ub2RlLmMnLAogICAncGFyc2Vfb3Blci5jJywKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9jbGF1c2UuYyBiL3NyYy9iYWNrZW5kL3BhcnNl ci9wYXJzZV9jbGF1c2UuYwppbmRleCA0YjUwMjc4ZmQwLi4zOGUyN2U4NDcyIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfY2xhdXNlLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFy c2VyL3BhcnNlX2NsYXVzZS5jCkBAIC02OTcsNyArNjk3LDExIEBAIHRyYW5zZm9ybVJhbmdlVGFi bGVGdW5jKFBhcnNlU3RhdGUgKnBzdGF0ZSwgUmFuZ2VUYWJsZUZ1bmMgKnJ0ZikKIAljaGFyCSAg KipuYW1lczsKIAlpbnQJCQljb2xubzsKIAotCS8qIEN1cnJlbnRseSBvbmx5IFhNTFRBQkxFIGlz IHN1cHBvcnRlZCAqLworCS8qCisJICogQ3VycmVudGx5IHdlIG9ubHkgc3VwcG9ydCBYTUxUQUJM RSBoZXJlLiAgU2VlIHRyYW5zZm9ybUpzb25UYWJsZSgpIGZvcgorCSAqIEpTT05fVEFCTEUgc3Vw cG9ydC4KKwkgKi8KKwl0Zi0+ZnVuY3R5cGUgPSBURlRfWE1MVEFCTEU7CiAJY29uc3RydWN0TmFt ZSA9ICJYTUxUQUJMRSI7CiAJZG9jVHlwZSA9IFhNTE9JRDsKIApAQCAtMTEwNCwxMyArMTEwOCwx NyBAQCB0cmFuc2Zvcm1Gcm9tQ2xhdXNlSXRlbShQYXJzZVN0YXRlICpwc3RhdGUsIE5vZGUgKm4s CiAJCXJ0ci0+cnRpbmRleCA9IG5zaXRlbS0+cF9ydGluZGV4OwogCQlyZXR1cm4gKE5vZGUgKikg cnRyOwogCX0KLQllbHNlIGlmIChJc0EobiwgUmFuZ2VUYWJsZUZ1bmMpKQorCWVsc2UgaWYgKElz QShuLCBSYW5nZVRhYmxlRnVuYykgfHwgSXNBKG4sIEpzb25UYWJsZSkpCiAJewogCQkvKiB0YWJs ZSBmdW5jdGlvbiBpcyBsaWtlIGEgcGxhaW4gcmVsYXRpb24gKi8KIAkJUmFuZ2VUYmxSZWYgKnJ0 cjsKIAkJUGFyc2VOYW1lc3BhY2VJdGVtICpuc2l0ZW07CiAKLQkJbnNpdGVtID0gdHJhbnNmb3Jt UmFuZ2VUYWJsZUZ1bmMocHN0YXRlLCAoUmFuZ2VUYWJsZUZ1bmMgKikgbik7CisJCWlmIChJc0Eo biwgUmFuZ2VUYWJsZUZ1bmMpKQorCQkJbnNpdGVtID0gdHJhbnNmb3JtUmFuZ2VUYWJsZUZ1bmMo cHN0YXRlLCAoUmFuZ2VUYWJsZUZ1bmMgKikgbik7CisJCWVsc2UKKwkJCW5zaXRlbSA9IHRyYW5z Zm9ybUpzb25UYWJsZShwc3RhdGUsIChKc29uVGFibGUgKikgbik7CisKIAkJKnRvcF9uc2l0ZW0g PSBuc2l0ZW07CiAJCSpuYW1lc3BhY2UgPSBsaXN0X21ha2UxKG5zaXRlbSk7CiAJCXJ0ciA9IG1h a2VOb2RlKFJhbmdlVGJsUmVmKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJz ZV9leHByLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCmluZGV4IGFlM2NkYzNi ZTAuLjMxYzA4NDdlNjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHBy LmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYwpAQCAtNDIxOSw3ICs0MjE5 LDggQEAgdHJhbnNmb3JtSnNvblNlcmlhbGl6ZUV4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29u U2VyaWFsaXplRXhwciAqZXhwcikKIH0KIAogLyoKLSAqIFRyYW5zZm9ybSBKU09OX1ZBTFVFLCBK U09OX1FVRVJZLCBKU09OX0VYSVNUUyBmdW5jdGlvbnMgaW50byBhIEpzb25FeHByIG5vZGUuCisg KiBUcmFuc2Zvcm0gSlNPTl9WQUxVRSwgSlNPTl9RVUVSWSwgSlNPTl9FWElTVFMsIEpTT05fVEFC TEUgZnVuY3Rpb25zIGludG8KKyAqIGEgSnNvbkV4cHIgbm9kZS4KICAqLwogc3RhdGljIE5vZGUg KgogdHJhbnNmb3JtSnNvbkZ1bmNFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkZ1bmNFeHBy ICpmdW5jKQpAQCAtNDIzOCw2ICs0MjM5LDkgQEAgdHJhbnNmb3JtSnNvbkZ1bmNFeHByKFBhcnNl U3RhdGUgKnBzdGF0ZSwgSnNvbkZ1bmNFeHByICpmdW5jKQogCQljYXNlIEpTT05fVkFMVUVfT1A6 CiAJCQlmdW5jX25hbWUgPSAiSlNPTl9WQUxVRSI7CiAJCQlicmVhazsKKwkJY2FzZSBKU09OX1RB QkxFX09QOgorCQkJZnVuY19uYW1lID0gIkpTT05fVEFCTEUiOworCQkJYnJlYWs7CiAJCWRlZmF1 bHQ6CiAJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBKc29uRnVuY0V4cHIgb3AiKTsKIAkJCWJyZWFr OwpAQCAtNDI4MCw2ICs0Mjg0LDQyIEBAIHRyYW5zZm9ybUpzb25GdW5jRXhwcihQYXJzZVN0YXRl ICpwc3RhdGUsIEpzb25GdW5jRXhwciAqZnVuYykKIAkJCWpzZXhwci0+cmV0dXJuaW5nLT5mb3Jt YXQtPmZvcm1hdF90eXBlID0gSlNfRk9STUFUX0RFRkFVTFQ7CiAJCQlqc2V4cHItPnJldHVybmlu Zy0+Zm9ybWF0LT5lbmNvZGluZyA9IEpTX0VOQ19ERUZBVUxUOwogCisJCQkvKiBKU09OX1RBQkxF KCkgQ09MVU1OUyBjYW4gc3BlY2lmeSBhIG5vbi1ib29sZWFuIHR5cGUuICovCisJCQlpZiAoanNl eHByLT5yZXR1cm5pbmctPnR5cGlkICE9IEJPT0xPSUQpCisJCQl7CisJCQkJTm9kZQkgICAqY29l cmNpb25fZXhwcjsKKwkJCQlDYXNlVGVzdEV4cHIgKnBsYWNlaG9sZGVyID0gbWFrZU5vZGUoQ2Fz ZVRlc3RFeHByKTsKKwkJCQlpbnQJCQlsb2NhdGlvbiA9IGV4cHJMb2NhdGlvbigoTm9kZSAqKSBq c2V4cHIpOworCisJCQkJLyoKKwkJCQkgKiBXZSBhYnVzZSBDYXNlVGVzdEV4cHIgaGVyZSBhcyBw bGFjZWhvbGRlciB0byBwYXNzIHRoZQorCQkJCSAqIHJlc3VsdCBvZiBldmFsdWF0aW5nIEpTT05f RVhJU1RTIHRvIHRoZSBjb2VyY2lvbgorCQkJCSAqIGV4cHJlc3Npb24uCisJCQkJICovCisJCQkJ cGxhY2Vob2xkZXItPnR5cGVJZCA9IEJPT0xPSUQ7CisJCQkJcGxhY2Vob2xkZXItPnR5cGVNb2Qg PSAtMTsKKwkJCQlwbGFjZWhvbGRlci0+Y29sbGF0aW9uID0gSW52YWxpZE9pZDsKKworCQkJCWNv ZXJjaW9uX2V4cHIgPQorCQkJCQljb2VyY2VfdG9fdGFyZ2V0X3R5cGUocHN0YXRlLCAoTm9kZSAq KSBwbGFjZWhvbGRlciwgQk9PTE9JRCwKKwkJCQkJCQkJCQkgIGpzZXhwci0+cmV0dXJuaW5nLT50 eXBpZCwKKwkJCQkJCQkJCQkgIGpzZXhwci0+cmV0dXJuaW5nLT50eXBtb2QsCisJCQkJCQkJCQkJ ICBDT0VSQ0lPTl9FWFBMSUNJVCwKKwkJCQkJCQkJCQkgIENPRVJDRV9JTVBMSUNJVF9DQVNULAor CQkJCQkJCQkJCSAgbG9jYXRpb24pOworCisJCQkJaWYgKGNvZXJjaW9uX2V4cHIgPT0gTlVMTCkK KwkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0NBTk5PVF9DT0VS Q0UpLAorCQkJCQkJCSBlcnJtc2coImNhbm5vdCBjYXN0IHR5cGUgJXMgdG8gJXMiLAorCQkJCQkJ CQkJZm9ybWF0X3R5cGVfYmUoQk9PTE9JRCksCisJCQkJCQkJCQlmb3JtYXRfdHlwZV9iZShqc2V4 cHItPnJldHVybmluZy0+dHlwaWQpKSwKKwkJCQkJCQkgcGFyc2VyX2NvZXJjaW9uX2VycnBvc2l0 aW9uKHBzdGF0ZSwgbG9jYXRpb24sIChOb2RlICopIGpzZXhwcikpKTsKKworCQkJCWlmIChjb2Vy Y2lvbl9leHByICE9IChOb2RlICopIHBsYWNlaG9sZGVyKQorCQkJCQlqc2V4cHItPnJlc3VsdF9j b2VyY2lvbiA9IGNvZXJjaW9uX2V4cHI7CisJCQl9CisKIAkJCWpzZXhwci0+b25fZXJyb3IgPSB0 cmFuc2Zvcm1Kc29uQmVoYXZpb3IocHN0YXRlLCBmdW5jLT5vbl9lcnJvciwKIAkJCQkJCQkJCQkJ CQkgSlNPTl9CRUhBVklPUl9GQUxTRSwKIAkJCQkJCQkJCQkJCQkganNleHByLT5yZXR1cm5pbmcp OwpAQCAtNDM0NCw2ICs0Mzg0LDE3IEBAIHRyYW5zZm9ybUpzb25GdW5jRXhwcihQYXJzZVN0YXRl ICpwc3RhdGUsIEpzb25GdW5jRXhwciAqZnVuYykKIAkJCQkJCQkJCQkJCQkganNleHByLT5yZXR1 cm5pbmcpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBKU09OX1RBQkxFX09QOgorCQkJaWYgKCFPaWRJ c1ZhbGlkKGpzZXhwci0+cmV0dXJuaW5nLT50eXBpZCkpCisJCQl7CisJCQkJanNleHByLT5yZXR1 cm5pbmctPnR5cGlkID0gZXhwclR5cGUoanNleHByLT5mb3JtYXR0ZWRfZXhwcik7CisJCQkJanNl eHByLT5yZXR1cm5pbmctPnR5cG1vZCA9IC0xOworCQkJfQorCQkJanNleHByLT5vbl9lcnJvciA9 IHRyYW5zZm9ybUpzb25CZWhhdmlvcihwc3RhdGUsIGZ1bmMtPm9uX2Vycm9yLAorCQkJCQkJCQkJ CQkJCSBKU09OX0JFSEFWSU9SX0VNUFRZLAorCQkJCQkJCQkJCQkJCSBqc2V4cHItPnJldHVybmlu Zyk7CisJCQlicmVhazsKKwogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgImludmFsaWQgSnNv bkZ1bmNFeHByIG9wIik7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNl ci9wYXJzZV9qc29udGFibGUuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9qc29udGFibGUu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4yNWI4MjA0ZGM2Ci0tLSAv ZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2pzb250YWJsZS5jCkBAIC0w LDAgKzEsNzE4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwYXJzZV9qc29udGFibGUu YworICoJICBwYXJzaW5nIG9mIEpTT05fVEFCTEUKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBv cnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBD YWxpZm9ybmlhCisgKgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL3Bh cnNlci9wYXJzZV9qc29udGFibGUuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNp bmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24uaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNp bmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKKyNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIK KyNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNl X2NsYXVzZS5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZV9jb2xsYXRlLmgiCisjaW5jbHVkZSAi cGFyc2VyL3BhcnNlX2V4cHIuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2VfcmVsYXRpb24uaCIK KyNpbmNsdWRlICJwYXJzZXIvcGFyc2VfdHlwZS5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5z LmgiCisjaW5jbHVkZSAidXRpbHMvanNvbi5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5o IgorCisvKiBDb250ZXh0IGZvciBKU09OX1RBQkxFIHRyYW5zZm9ybWF0aW9uICovCit0eXBlZGVm IHN0cnVjdCBKc29uVGFibGVQYXJzZUNvbnRleHQKK3sKKwlQYXJzZVN0YXRlICpwc3RhdGU7CQkJ LyogcGFyc2luZyBzdGF0ZSAqLworCUpzb25UYWJsZSAgKnRhYmxlOwkJCS8qIHVudHJhbnNmb3Jt ZWQgbm9kZSAqLworCVRhYmxlRnVuYyAgKnRhYmxlZnVuYzsJCS8qIHRyYW5zZm9ybWVkIG5vZGUJ Ki8KKwlMaXN0CSAgICpwYXRoTmFtZXM7CQkvKiBsaXN0IG9mIGFsbCBwYXRoIGFuZCBjb2x1bW5z IG5hbWVzICovCisJaW50CQkJcGF0aE5hbWVJZDsJCS8qIHBhdGggbmFtZSBpZCBjb3VudGVyICov CisJT2lkCQkJY29udGV4dEl0ZW1UeXBpZDsJLyogdHlwZSBvaWQgb2YgY29udGV4dCBpdGVtIChq c29uL2pzb25iKSAqLworfQkJCUpzb25UYWJsZVBhcnNlQ29udGV4dDsKKworc3RhdGljIEpzb25U YWJsZVBsYW4gKnRyYW5zZm9ybUpzb25UYWJsZUNvbHVtbnMoSnNvblRhYmxlUGFyc2VDb250ZXh0 ICogY3h0LAorCQkJCQkJCQkJCQkJSnNvblRhYmxlUGxhblNwZWMgKnBsYW5zcGVjLAorCQkJCQkJ CQkJCQkJTGlzdCAqY29sdW1ucywKKwkJCQkJCQkJCQkJCUpzb25UYWJsZVBhdGhTcGVjICpwYXRo c3BlYyk7CisKKy8qCisgKiBUcmFuc2Zvcm0gSlNPTl9UQUJMRSBjb2x1bW4KKyAqICAgLSByZWd1 bGFyIGNvbHVtbiBpbnRvIEpTT05fVkFMVUUoKQorICogICAtIEZPUk1BVCBKU09OIGNvbHVtbiBp bnRvIEpTT05fUVVFUlkoKQorICogICAtIEVYSVNUUyBjb2x1bW4gaW50byBKU09OX0VYSVNUUygp CisgKi8KK3N0YXRpYyBOb2RlICoKK3RyYW5zZm9ybUpzb25UYWJsZUNvbHVtbihKc29uVGFibGVD b2x1bW4gKmp0YywgTm9kZSAqY29udGV4dEl0ZW1FeHByLAorCQkJCQkJIExpc3QgKnBhc3NpbmdB cmdzLCBib29sIGVycm9yT25FcnJvcikKK3sKKwlKc29uRnVuY0V4cHIgKmpmZXhwciA9IG1ha2VO b2RlKEpzb25GdW5jRXhwcik7CisJTm9kZQkgICAqcGF0aHNwZWM7CisJSnNvbkZvcm1hdCAqZGVm YXVsdF9mb3JtYXQ7CisKKwlpZiAoanRjLT5jb2x0eXBlID09IEpUQ19SRUdVTEFSKQorCQlqZmV4 cHItPm9wID0gSlNPTl9WQUxVRV9PUDsKKwllbHNlIGlmIChqdGMtPmNvbHR5cGUgPT0gSlRDX0VY SVNUUykKKwkJamZleHByLT5vcCA9IEpTT05fRVhJU1RTX09QOworCWVsc2UKKwkJamZleHByLT5v cCA9IEpTT05fUVVFUllfT1A7CisJamZleHByLT5vdXRwdXQgPSBtYWtlTm9kZShKc29uT3V0cHV0 KTsKKwlqZmV4cHItPm9uX2VtcHR5ID0ganRjLT5vbl9lbXB0eTsKKwlqZmV4cHItPm9uX2Vycm9y ID0ganRjLT5vbl9lcnJvcjsKKwlpZiAoamZleHByLT5vbl9lcnJvciA9PSBOVUxMICYmIGVycm9y T25FcnJvcikKKwkJamZleHByLT5vbl9lcnJvciA9IG1ha2VKc29uQmVoYXZpb3IoSlNPTl9CRUhB VklPUl9FUlJPUiwgTlVMTCwKKwkJCQkJCQkJCQkJTlVMTCwgLTEpOworCWpmZXhwci0+cXVvdGVz ID0ganRjLT5xdW90ZXM7CisJamZleHByLT53cmFwcGVyID0ganRjLT53cmFwcGVyOworCWpmZXhw ci0+bG9jYXRpb24gPSBqdGMtPmxvY2F0aW9uOworCisJamZleHByLT5vdXRwdXQtPnR5cGVOYW1l ID0ganRjLT50eXBlTmFtZTsKKwlqZmV4cHItPm91dHB1dC0+cmV0dXJuaW5nID0gbWFrZU5vZGUo SnNvblJldHVybmluZyk7CisJamZleHByLT5vdXRwdXQtPnJldHVybmluZy0+Zm9ybWF0ID0ganRj LT5mb3JtYXQ7CisKKwlkZWZhdWx0X2Zvcm1hdCA9IG1ha2VKc29uRm9ybWF0KEpTX0ZPUk1BVF9E RUZBVUxULCBKU19FTkNfREVGQVVMVCwgLTEpOworCisJaWYgKGp0Yy0+cGF0aHNwZWMpCisJCXBh dGhzcGVjID0gKE5vZGUgKikganRjLT5wYXRoc3BlYy0+c3RyaW5nOworCWVsc2UKKwl7CisJCS8q IENvbnN0cnVjdCBkZWZhdWx0IHBhdGggYXMgJyQuImNvbHVtbl9uYW1lIicgKi8KKwkJU3RyaW5n SW5mb0RhdGEgcGF0aDsKKworCQlpbml0U3RyaW5nSW5mbygmcGF0aCk7CisKKwkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmcGF0aCwgIiQuIik7CisJCWVzY2FwZV9qc29uKCZwYXRoLCBqdGMtPm5h bWUpOworCisJCXBhdGhzcGVjID0gbWFrZVN0cmluZ0NvbnN0KHBhdGguZGF0YSwgLTEpOworCX0K KworCWpmZXhwci0+Y29udGV4dF9pdGVtID0JbWFrZUpzb25WYWx1ZUV4cHIoKEV4cHIgKikgY29u dGV4dEl0ZW1FeHByLCBOVUxMLAorCQkJCQkJCQkJCQkgIGRlZmF1bHRfZm9ybWF0KTsKKwlqZmV4 cHItPnBhdGhzcGVjID0gcGF0aHNwZWM7CisJamZleHByLT5wYXRobmFtZSA9IE5VTEw7CisJamZl eHByLT5wYXNzaW5nID0gcGFzc2luZ0FyZ3M7CisKKwlyZXR1cm4gKE5vZGUgKikgamZleHByOwor fQorCisvKgorICogUmVnaXN0ZXIgYSBjb2x1bW4vcGF0aCBuYW1lIGluIHRoZSBwYXRoIG5hbWUg bGlzdCwgZmxhZ2dpbmcgaWYgdGhlIG5hbWUgaXMKKyAqIGFscmVhZHkgdGFrZW4gYnkgYW5vdGhl ciBjb2x1bW4vcGF0aC4KKyAqLworc3RhdGljIHZvaWQKK3JlZ2lzdGVySnNvblRhYmxlQ29sdW1u KEpzb25UYWJsZVBhcnNlQ29udGV4dCAqIGN4dCwgY2hhciAqY29sbmFtZSwKKwkJCQkJCWludCBs b2NhdGlvbikKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCWZvcmVhY2gobGMsIGN4dC0+cGF0aE5h bWVzKQorCXsKKwkJaWYgKHN0cmNtcChjb2xuYW1lLCAoY29uc3QgY2hhciAqKSBsZmlyc3QobGMp KSA9PSAwKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJZXJyY29kZShFUlJDT0RFX0RVUExJQ0FU RV9BTElBUyksCisJCQkJCWVycm1zZygiZHVwbGljYXRlIEpTT05fVEFCTEUgY29sdW1uIG5hbWU6 ICVzIiwgY29sbmFtZSksCisJCQkJCXBhcnNlcl9lcnJwb3NpdGlvbihjeHQtPnBzdGF0ZSwgbG9j YXRpb24pKTsKKwl9CisKKwljeHQtPnBhdGhOYW1lcyA9IGxhcHBlbmQoY3h0LT5wYXRoTmFtZXMs IGNvbG5hbWUpOworfQorCitzdGF0aWMgdm9pZAorcmVnaXN0ZXJKc29uVGFibGVQYXRoKEpzb25U YWJsZVBhcnNlQ29udGV4dCAqIGN4dCwgY2hhciAqcGF0aG5hbWUsCisJCQkJCSAgaW50IGxvY2F0 aW9uKQoreworCUxpc3RDZWxsICAgKmxjOworCisJZm9yZWFjaChsYywgY3h0LT5wYXRoTmFtZXMp CisJeworCQlpZiAoc3RyY21wKHBhdGhuYW1lLCAoY29uc3QgY2hhciAqKSBsZmlyc3QobGMpKSA9 PSAwKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJZXJyY29kZShFUlJDT0RFX0RVUExJQ0FURV9B TElBUyksCisJCQkJCWVycm1zZygiZHVwbGljYXRlIEpTT05fVEFCTEUgcGF0aCBuYW1lOiAlcyIs IHBhdGhuYW1lKSwKKwkJCQkJcGFyc2VyX2VycnBvc2l0aW9uKGN4dC0+cHN0YXRlLCBsb2NhdGlv bikpOworCX0KKworCWN4dC0+cGF0aE5hbWVzID0gbGFwcGVuZChjeHQtPnBhdGhOYW1lcywgcGF0 aG5hbWUpOworfQorCisvKgorICogUmVjdXJzaXZlbHkgcmVnaXN0ZXIgYWxsIG5lc3RlZCBjb2x1 bW4gbmFtZXMgaW4gdGhlIHNoYXJlZCBjb2x1bW5zL3BhdGggbmFtZQorICogbGlzdC4KKyAqLwor c3RhdGljIHZvaWQKK3JlZ2lzdGVyQWxsSnNvblRhYmxlQ29sdW1uc0FuZFBhdGhzKEpzb25UYWJs ZVBhcnNlQ29udGV4dCAqIGN4dCwKKwkJCQkJCQkJCUxpc3QgKmNvbHVtbnMpCit7CisJTGlzdENl bGwgICAqbGM7CisKKwlmb3JlYWNoKGxjLCBjb2x1bW5zKQorCXsKKwkJSnNvblRhYmxlQ29sdW1u ICpqdGMgPSBjYXN0Tm9kZShKc29uVGFibGVDb2x1bW4sIGxmaXJzdChsYykpOworCisJCWlmIChq dGMtPmNvbHR5cGUgPT0gSlRDX05FU1RFRCkKKwkJeworCQkJaWYgKGp0Yy0+cGF0aHNwZWMtPm5h bWUpCisJCQkJcmVnaXN0ZXJKc29uVGFibGVQYXRoKGN4dCwganRjLT5wYXRoc3BlYy0+bmFtZSwK KwkJCQkJCQkJCSAganRjLT5wYXRoc3BlYy0+bmFtZV9sb2NhdGlvbik7CisKKwkJCXJlZ2lzdGVy QWxsSnNvblRhYmxlQ29sdW1uc0FuZFBhdGhzKGN4dCwganRjLT5jb2x1bW5zKTsKKwkJfQorCQll bHNlCisJCXsKKwkJCXJlZ2lzdGVySnNvblRhYmxlQ29sdW1uKGN4dCwganRjLT5uYW1lLCBqdGMt PmxvY2F0aW9uKTsKKwkJfQorCX0KK30KKworLyogR2VuZXJhdGUgYSBuZXcgdW5pcXVlIEpTT05f VEFCTEUgcGF0aCBuYW1lLiAqLworc3RhdGljIGNoYXIgKgorZ2VuZXJhdGVKc29uVGFibGVQYXRo TmFtZShKc29uVGFibGVQYXJzZUNvbnRleHQgKiBjeHQpCit7CisJY2hhcgkJbmFtZWJ1ZlszMl07 CisJY2hhcgkgICAqbmFtZSA9IG5hbWVidWY7CisKKwlzbnByaW50ZihuYW1lYnVmLCBzaXplb2Yo bmFtZWJ1ZiksICJqc29uX3RhYmxlX3BhdGhfJWQiLAorCQkJIGN4dC0+cGF0aE5hbWVJZCsrKTsK KworCW5hbWUgPSBwc3RyZHVwKG5hbWUpOworCWN4dC0+cGF0aE5hbWVzID0gbGFwcGVuZChjeHQt PnBhdGhOYW1lcywgbmFtZSk7CisKKwlyZXR1cm4gbmFtZTsKK30KKworLyogQ29sbGVjdCBzaWJs aW5nIHBhdGggbmFtZXMgZnJvbSBwbGFuIHRvIHRoZSBzcGVjaWZpZWQgbGlzdC4gKi8KK3N0YXRp YyB2b2lkCitjb2xsZWN0U2libGluZ1BhdGhzSW5Kc29uVGFibGVQbGFuKEpzb25UYWJsZVBsYW5T cGVjICpwbGFuLCBMaXN0ICoqcGF0aHMpCit7CisJaWYgKHBsYW4tPnBsYW5fdHlwZSA9PSBKU1RQ X1NJTVBMRSkKKwkJKnBhdGhzID0gbGFwcGVuZCgqcGF0aHMsIHBsYW4tPnBhdGhuYW1lKTsKKwll bHNlIGlmIChwbGFuLT5wbGFuX3R5cGUgPT0gSlNUUF9KT0lORUQpCisJeworCQlpZiAocGxhbi0+ am9pbl90eXBlID09IEpTVFBfSk9JTl9JTk5FUiB8fAorCQkJcGxhbi0+am9pbl90eXBlID09IEpT VFBfSk9JTl9PVVRFUikKKwkJeworCQkJQXNzZXJ0KHBsYW4tPnBsYW4xLT5wbGFuX3R5cGUgPT0g SlNUUF9TSU1QTEUpOworCQkJKnBhdGhzID0gbGFwcGVuZCgqcGF0aHMsIHBsYW4tPnBsYW4xLT5w YXRobmFtZSk7CisJCX0KKwkJZWxzZSBpZiAocGxhbi0+am9pbl90eXBlID09IEpTVFBfSk9JTl9D Uk9TUyB8fAorCQkJCSBwbGFuLT5qb2luX3R5cGUgPT0gSlNUUF9KT0lOX1VOSU9OKQorCQl7CisJ CQljb2xsZWN0U2libGluZ1BhdGhzSW5Kc29uVGFibGVQbGFuKHBsYW4tPnBsYW4xLCBwYXRocyk7 CisJCQljb2xsZWN0U2libGluZ1BhdGhzSW5Kc29uVGFibGVQbGFuKHBsYW4tPnBsYW4yLCBwYXRo cyk7CisJCX0KKwkJZWxzZQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgSlNPTl9UQUJMRSBqb2lu IHR5cGUgJWQiLAorCQkJCSBwbGFuLT5qb2luX3R5cGUpOworCX0KK30KKworLyoKKyAqIFZhbGlk YXRlIGNoaWxkIEpTT05fVEFCTEUgcGxhbiBieSBjaGVja2luZyB0aGF0OgorICogIC0gYWxsIG5l c3RlZCBjb2x1bW5zIGhhdmUgcGF0aCBuYW1lcyBzcGVjaWZpZWQKKyAqICAtIGFsbCBuZXN0ZWQg Y29sdW1ucyBoYXZlIGNvcnJlc3BvbmRpbmcgbm9kZSBpbiB0aGUgc2libGluZyBwbGFuCisgKiAg LSBwbGFuIGRvZXMgbm90IGNvbnRhaW4gZHVwbGljYXRlIG9yIGV4dHJhIG5vZGVzCisgKi8KK3N0 YXRpYyB2b2lkCit2YWxpZGF0ZUpzb25UYWJsZUNoaWxkUGxhbihQYXJzZVN0YXRlICpwc3RhdGUs IEpzb25UYWJsZVBsYW5TcGVjICpwbGFuLAorCQkJCQkJICAgTGlzdCAqY29sdW1ucykKK3sKKwlM aXN0Q2VsbCAgICpsYzE7CisJTGlzdAkgICAqc2libGluZ3MgPSBOSUw7CisJaW50CQkJbmNoaWxk cmVuID0gMDsKKworCWlmIChwbGFuKQorCQljb2xsZWN0U2libGluZ1BhdGhzSW5Kc29uVGFibGVQ bGFuKHBsYW4sICZzaWJsaW5ncyk7CisKKwlmb3JlYWNoKGxjMSwgY29sdW1ucykKKwl7CisJCUpz b25UYWJsZUNvbHVtbiAqanRjID0gY2FzdE5vZGUoSnNvblRhYmxlQ29sdW1uLCBsZmlyc3QobGMx KSk7CisKKwkJaWYgKGp0Yy0+Y29sdHlwZSA9PSBKVENfTkVTVEVEKQorCQl7CisJCQlMaXN0Q2Vs bCAgICpsYzI7CisJCQlib29sCQlmb3VuZCA9IGZhbHNlOworCisJCQlpZiAoanRjLT5wYXRoc3Bl Yy0+bmFtZSA9PSBOVUxMKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQllcnJjb2RlKEVSUkNP REVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJCWVycm1zZygibmVzdGVkIEpTT05fVEFCTEUgY29sdW1u cyBtdXN0IGNvbnRhaW4iCisJCQkJCQkJCSIgYW4gZXhwbGljaXQgQVMgcGF0aG5hbWUgc3BlY2lm aWNhdGlvbiIKKwkJCQkJCQkJIiBpZiBhbiBleHBsaWNpdCBQTEFOIGNsYXVzZSBpcyB1c2VkIiks CisJCQkJCQlwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBqdGMtPmxvY2F0aW9uKSk7CisKKwkJ CS8qIGZpbmQgbmVzdGVkIHBhdGggbmFtZSBpbiB0aGUgbGlzdCBvZiBzaWJsaW5nIHBhdGggbmFt ZXMgKi8KKwkJCWZvcmVhY2gobGMyLCBzaWJsaW5ncykKKwkJCXsKKwkJCQlpZiAoKGZvdW5kID0g IXN0cmNtcChqdGMtPnBhdGhzcGVjLT5uYW1lLCBsZmlyc3QobGMyKSkpKQorCQkJCQlicmVhazsK KwkJCX0KKworCQkJaWYgKCFmb3VuZCkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJZXJyY29k ZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCQllcnJtc2coImludmFsaWQgSlNPTl9UQUJM RSBzcGVjaWZpY2F0aW9uIiksCisJCQkJCQllcnJkZXRhaWwoIlBMQU4gY2xhdXNlIGZvciBuZXN0 ZWQgcGF0aCAlcyB3YXMgbm90IGZvdW5kLiIsCisJCQkJCQkJCSAganRjLT5wYXRoc3BlYy0+bmFt ZSksCisJCQkJCQlwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBqdGMtPmxvY2F0aW9uKSk7CisK KwkJCW5jaGlsZHJlbisrOworCQl9CisJfQorCisJaWYgKGxpc3RfbGVuZ3RoKHNpYmxpbmdzKSA+ IG5jaGlsZHJlbikKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfU1lOVEFY X0VSUk9SKSwKKwkJCQllcnJtc2coImludmFsaWQgSlNPTl9UQUJMRSBwbGFuIGNsYXVzZSIpLAor CQkJCWVycmRldGFpbCgiUExBTiBjbGF1c2UgY29udGFpbnMgc29tZSBleHRyYSBvciBkdXBsaWNh dGUgc2libGluZyBub2Rlcy4iKSwKKwkJCQlwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBwbGFu ID8gcGxhbi0+bG9jYXRpb24gOiAtMSkpOworfQorCitzdGF0aWMgSnNvblRhYmxlQ29sdW1uICoK K2ZpbmROZXN0ZWRKc29uVGFibGVDb2x1bW4oTGlzdCAqY29sdW1ucywgY29uc3QgY2hhciAqcGF0 aG5hbWUpCit7CisJTGlzdENlbGwgICAqbGM7CisKKwlmb3JlYWNoKGxjLCBjb2x1bW5zKQorCXsK KwkJSnNvblRhYmxlQ29sdW1uICpqdGMgPSBjYXN0Tm9kZShKc29uVGFibGVDb2x1bW4sIGxmaXJz dChsYykpOworCisJCWlmIChqdGMtPmNvbHR5cGUgPT0gSlRDX05FU1RFRCAmJgorCQkJanRjLT5w YXRoc3BlYy0+bmFtZSAmJgorCQkJIXN0cmNtcChqdGMtPnBhdGhzcGVjLT5uYW1lLCBwYXRobmFt ZSkpCisJCQlyZXR1cm4ganRjOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgTm9k ZSAqCit0cmFuc2Zvcm1OZXN0ZWRKc29uVGFibGVDb2x1bW4oSnNvblRhYmxlUGFyc2VDb250ZXh0 ICogY3h0LCBKc29uVGFibGVDb2x1bW4gKmp0YywKKwkJCQkJCQkgICBKc29uVGFibGVQbGFuU3Bl YyAqcGxhbnNwZWMpCit7CisJaWYgKGp0Yy0+cGF0aHNwZWMtPm5hbWUgPT0gTlVMTCkKKwl7CisJ CWlmIChjeHQtPnRhYmxlLT5wbGFuc3BlYyAhPSBOVUxMKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQkgZXJybXNnKCJpbnZhbGlk IEpTT05fVEFCTEUgZXhwcmVzc2lvbiIpLAorCQkJCQkgZXJyZGV0YWlsKCJKU09OX1RBQkxFIHBh dGggbXVzdCBjb250YWluIgorCQkJCQkJCSAgICIgZXhwbGljaXQgQVMgcGF0aG5hbWUgc3BlY2lm aWNhdGlvbiBpZiIKKwkJCQkJCQkgICAiIGV4cGxpY2l0IFBMQU4gY2xhdXNlIGlzIHVzZWQiKSwK KwkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihjeHQtPnBzdGF0ZSwganRjLT5sb2NhdGlvbikpKTsK KworCQlqdGMtPnBhdGhzcGVjLT5uYW1lID0gZ2VuZXJhdGVKc29uVGFibGVQYXRoTmFtZShjeHQp OworCX0KKworCXJldHVybiAoTm9kZSAqKSB0cmFuc2Zvcm1Kc29uVGFibGVDb2x1bW5zKGN4dCwg cGxhbnNwZWMsIGp0Yy0+Y29sdW1ucywKKwkJCQkJCQkJCQkJICBqdGMtPnBhdGhzcGVjKTsKK30K Kworc3RhdGljIE5vZGUgKgorbWFrZUpzb25UYWJsZVNpYmxpbmdKb2luKGJvb2wgY3Jvc3MsIE5v ZGUgKmxub2RlLCBOb2RlICpybm9kZSkKK3sKKwlKc29uVGFibGVTaWJsaW5nICpqb2luID0gbWFr ZU5vZGUoSnNvblRhYmxlU2libGluZyk7CisKKwlqb2luLT5sYXJnID0gbG5vZGU7CisJam9pbi0+ cmFyZyA9IHJub2RlOworCWpvaW4tPmNyb3NzID0gY3Jvc3M7CisKKwlyZXR1cm4gKE5vZGUgKikg am9pbjsKK30KKworLyoKKyAqIFJlY3Vyc2l2ZWx5IHRyYW5zZm9ybSBjaGlsZCBKU09OX1RBQkxF IHBsYW4uCisgKgorICogRGVmYXVsdCBwbGFuIGlzIHRyYW5zZm9ybWVkIGludG8gYSBjcm9zcy91 bmlvbiBqb2luIG9mIGl0cyBuZXN0ZWQgY29sdW1ucy4KKyAqIFNpbXBsZSBhbmQgb3V0ZXIvaW5u ZXIgcGxhbnMgYXJlIHRyYW5zZm9ybWVkIGludG8gYSBKc29uVGFibGVQbGFuIGJ5CisgKiBmaW5k aW5nIGFuZCB0cmFuc2Zvcm1pbmcgY29ycmVzcG9uZGluZyBuZXN0ZWQgY29sdW1uLgorICogU2li bGluZyBwbGFucyBhcmUgcmVjdXJzaXZlbHkgdHJhbnNmb3JtZWQgaW50byBhIEpzb25UYWJsZVNp YmxpbmcuCisgKi8KK3N0YXRpYyBOb2RlICoKK3RyYW5zZm9ybUpzb25UYWJsZUNoaWxkUGxhbihK c29uVGFibGVQYXJzZUNvbnRleHQgKiBjeHQsCisJCQkJCQkJSnNvblRhYmxlUGxhblNwZWMgKnBs YW4sCisJCQkJCQkJTGlzdCAqY29sdW1ucykKK3sKKwlKc29uVGFibGVDb2x1bW4gKmp0YyA9IE5V TEw7CisKKwlpZiAoIXBsYW4gfHwgcGxhbi0+cGxhbl90eXBlID09IEpTVFBfREVGQVVMVCkKKwl7 CisJCS8qIHVuc3BlY2lmaWVkIG9yIGRlZmF1bHQgcGxhbiAqLworCQlOb2RlCSAgICpyZXMgPSBO VUxMOworCQlMaXN0Q2VsbCAgICpsYzsKKwkJYm9vbAkJY3Jvc3MgPSBwbGFuICYmIChwbGFuLT5q b2luX3R5cGUgJiBKU1RQX0pPSU5fQ1JPU1MpOworCisJCS8qIHRyYW5zZm9ybSBhbGwgbmVzdGVk IGNvbHVtbnMgaW50byBjcm9zcy91bmlvbiBqb2luICovCisJCWZvcmVhY2gobGMsIGNvbHVtbnMp CisJCXsKKwkJCUpzb25UYWJsZUNvbHVtbiAqY29sID0gY2FzdE5vZGUoSnNvblRhYmxlQ29sdW1u LCBsZmlyc3QobGMpKTsKKwkJCU5vZGUJICAgKm5vZGU7CisKKwkJCWlmIChjb2wtPmNvbHR5cGUg IT0gSlRDX05FU1RFRCkKKwkJCQljb250aW51ZTsKKworCQkJbm9kZSA9IHRyYW5zZm9ybU5lc3Rl ZEpzb25UYWJsZUNvbHVtbihjeHQsIGNvbCwgcGxhbik7CisKKwkJCS8qIGpvaW4gdHJhbnNmb3Jt ZWQgbm9kZSB3aXRoIHByZXZpb3VzIHNpYmxpbmcgbm9kZXMgKi8KKwkJCXJlcyA9IHJlcyA/IG1h a2VKc29uVGFibGVTaWJsaW5nSm9pbihjcm9zcywgcmVzLCBub2RlKSA6IG5vZGU7CisJCX0KKwor CQlyZXR1cm4gcmVzOworCX0KKwllbHNlIGlmIChwbGFuLT5wbGFuX3R5cGUgPT0gSlNUUF9TSU1Q TEUpCisJeworCQlqdGMgPSBmaW5kTmVzdGVkSnNvblRhYmxlQ29sdW1uKGNvbHVtbnMsIHBsYW4t PnBhdGhuYW1lKTsKKwl9CisJZWxzZSBpZiAocGxhbi0+cGxhbl90eXBlID09IEpTVFBfSk9JTkVE KQorCXsKKwkJaWYgKHBsYW4tPmpvaW5fdHlwZSA9PSBKU1RQX0pPSU5fSU5ORVIgfHwKKwkJCXBs YW4tPmpvaW5fdHlwZSA9PSBKU1RQX0pPSU5fT1VURVIpCisJCXsKKwkJCUFzc2VydChwbGFuLT5w bGFuMS0+cGxhbl90eXBlID09IEpTVFBfU0lNUExFKTsKKwkJCWp0YyA9IGZpbmROZXN0ZWRKc29u VGFibGVDb2x1bW4oY29sdW1ucywgcGxhbi0+cGxhbjEtPnBhdGhuYW1lKTsKKwkJfQorCQllbHNl CisJCXsKKwkJCU5vZGUJICAgKm5vZGUxID0gdHJhbnNmb3JtSnNvblRhYmxlQ2hpbGRQbGFuKGN4 dCwgcGxhbi0+cGxhbjEsCisJCQkJCQkJCQkJCQkJCQljb2x1bW5zKTsKKwkJCU5vZGUJICAgKm5v ZGUyID0gdHJhbnNmb3JtSnNvblRhYmxlQ2hpbGRQbGFuKGN4dCwgcGxhbi0+cGxhbjIsCisJCQkJ CQkJCQkJCQkJCQljb2x1bW5zKTsKKworCQkJcmV0dXJuIG1ha2VKc29uVGFibGVTaWJsaW5nSm9p bihwbGFuLT5qb2luX3R5cGUgPT0gSlNUUF9KT0lOX0NST1NTLAorCQkJCQkJCQkJCQlub2RlMSwg bm9kZTIpOworCQl9CisJfQorCWVsc2UKKwkJZWxvZyhFUlJPUiwgImludmFsaWQgSlNPTl9UQUJM RSBwbGFuIHR5cGUgJWQiLCBwbGFuLT5wbGFuX3R5cGUpOworCisJaWYgKCFqdGMpCisJCWVyZXBv cnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCSBlcnJt c2coImludmFsaWQgSlNPTl9UQUJMRSBwbGFuIGNsYXVzZSIpLAorCQkJCSBlcnJkZXRhaWwoIlBB VEggbmFtZSB3YXMgJXMgbm90IGZvdW5kIGluIG5lc3RlZCBjb2x1bW5zIGxpc3QuIiwKKwkJCQkJ CSAgIHBsYW4tPnBhdGhuYW1lKSwKKwkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKGN4dC0+cHN0YXRl LCBwbGFuLT5sb2NhdGlvbikpKTsKKworCXJldHVybiB0cmFuc2Zvcm1OZXN0ZWRKc29uVGFibGVD b2x1bW4oY3h0LCBqdGMsIHBsYW4pOworfQorCisvKiBDaGVjayB3aGV0aGVyIHR5cGUgaXMganNv bi9qc29uYiwgYXJyYXksIG9yIHJlY29yZC4gKi8KK3N0YXRpYyBib29sCit0eXBlSXNDb21wb3Np dGUoT2lkIHR5cGlkKQoreworCWNoYXIJCXR5cHR5cGU7CisKKwlpZiAodHlwaWQgPT0gSlNPTk9J RCB8fAorCQl0eXBpZCA9PSBKU09OQk9JRCB8fAorCQl0eXBpZCA9PSBSRUNPUkRPSUQgfHwKKwkJ dHlwZV9pc19hcnJheSh0eXBpZCkpCisJCXJldHVybiB0cnVlOworCisJdHlwdHlwZSA9IGdldF90 eXB0eXBlKHR5cGlkKTsKKworCWlmICh0eXB0eXBlID09IFRZUFRZUEVfQ09NUE9TSVRFKQorCQly ZXR1cm4gdHJ1ZTsKKworCWlmICh0eXB0eXBlID09IFRZUFRZUEVfRE9NQUlOKQorCQlyZXR1cm4g dHlwZUlzQ29tcG9zaXRlKGdldEJhc2VUeXBlKHR5cGlkKSk7CisKKwlyZXR1cm4gZmFsc2U7Cit9 CisKKy8qIEFwcGVuZCB0cmFuc2Zvcm1lZCBub24tbmVzdGVkIEpTT05fVEFCTEUgY29sdW1ucyB0 byB0aGUgVGFibGVGdW5jIG5vZGUgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRKc29uVGFibGVDb2x1 bW5zKEpzb25UYWJsZVBhcnNlQ29udGV4dCAqIGN4dCwgTGlzdCAqY29sdW1ucykKK3sKKwlMaXN0 Q2VsbCAgICpjb2w7CisJUGFyc2VTdGF0ZSAqcHN0YXRlID0gY3h0LT5wc3RhdGU7CisJSnNvblRh YmxlICAqanQgPSBjeHQtPnRhYmxlOworCVRhYmxlRnVuYyAgKnRmID0gY3h0LT50YWJsZWZ1bmM7 CisJYm9vbAkJb3JkaW5hbGl0eV9mb3VuZCA9IGZhbHNlOworCUpzb25CZWhhdmlvciAqb25fZXJy b3IgPSBqdC0+b25fZXJyb3I7CisJYm9vbAkJZXJyb3JPbkVycm9yID0gb25fZXJyb3IgJiYKKwkJ b25fZXJyb3ItPmJ0eXBlID09IEpTT05fQkVIQVZJT1JfRVJST1I7CisKKwlmb3JlYWNoKGNvbCwg Y29sdW1ucykKKwl7CisJCUpzb25UYWJsZUNvbHVtbiAqcmF3YyA9IGNhc3ROb2RlKEpzb25UYWJs ZUNvbHVtbiwgbGZpcnN0KGNvbCkpOworCQlPaWQJCQl0eXBpZDsKKwkJaW50MzIJCXR5cG1vZDsK KwkJTm9kZQkgICAqY29sZXhwcjsKKworCQlpZiAocmF3Yy0+bmFtZSkKKwkJCXRmLT5jb2xuYW1l cyA9IGxhcHBlbmQodGYtPmNvbG5hbWVzLAorCQkJCQkJCQkgICBtYWtlU3RyaW5nKHBzdHJkdXAo cmF3Yy0+bmFtZSkpKTsKKworCQkvKgorCQkgKiBEZXRlcm1pbmUgdGhlIHR5cGUgYW5kIHR5cG1v ZCBmb3IgdGhlIG5ldyBjb2x1bW4uIEZPUiBPUkRJTkFMSVRZCisJCSAqIGNvbHVtbnMgYXJlIElO VEVHRVIgYnkgc3RhbmRhcmQ7IHRoZSBvdGhlcnMgYXJlIHVzZXItc3BlY2lmaWVkLgorCQkgKi8K KwkJc3dpdGNoIChyYXdjLT5jb2x0eXBlKQorCQl7CisJCQljYXNlIEpUQ19GT1JfT1JESU5BTElU WToKKwkJCQlpZiAob3JkaW5hbGl0eV9mb3VuZCkKKwkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJ CQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCQkJIGVycm1zZygiY2Fubm90 IHVzZSBtb3JlIHRoYW4gb25lIEZPUiBPUkRJTkFMSVRZIGNvbHVtbiIpLAorCQkJCQkJCSBwYXJz ZXJfZXJycG9zaXRpb24ocHN0YXRlLCByYXdjLT5sb2NhdGlvbikpKTsKKwkJCQlvcmRpbmFsaXR5 X2ZvdW5kID0gdHJ1ZTsKKwkJCQljb2xleHByID0gTlVMTDsKKwkJCQl0eXBpZCA9IElOVDRPSUQ7 CisJCQkJdHlwbW9kID0gLTE7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgSlRDX1JFR1VMQVI6CisJ CQkJdHlwZW5hbWVUeXBlSWRBbmRNb2QocHN0YXRlLCByYXdjLT50eXBlTmFtZSwgJnR5cGlkLCAm dHlwbW9kKTsKKworCQkJCS8qCisJCQkJICogVXNlIGltcGxpY2l0IEZPUk1BVCBKU09OIGZvciBj b21wb3NpdGUgdHlwZXMgKGFycmF5cyBhbmQKKwkJCQkgKiByZWNvcmRzKSBvciBpZiBhIG5vbi1k ZWZhdWx0IFdSQVBQRVIgLyBRVU9URVMgYmVoYXZpb3IKKwkJCQkgKiBpcyBzcGVjaWZpZWQuCisJ CQkJICovCisJCQkJaWYgKHR5cGVJc0NvbXBvc2l0ZSh0eXBpZCkgfHwKKwkJCQkJcmF3Yy0+cXVv dGVzICE9IEpTX1FVT1RFU19VTlNQRUMgfHwKKwkJCQkJcmF3Yy0+d3JhcHBlciAhPSBKU1dfVU5T UEVDKQorCQkJCQlyYXdjLT5jb2x0eXBlID0gSlRDX0ZPUk1BVFRFRDsKKworCQkJCS8qIEZBTExU SFJPVUdIICovCisJCQljYXNlIEpUQ19GT1JNQVRURUQ6CisJCQljYXNlIEpUQ19FWElTVFM6CisJ CQkJeworCQkJCQlOb2RlCSAgICpqZTsKKwkJCQkJQ2FzZVRlc3RFeHByICpwYXJhbSA9IG1ha2VO b2RlKENhc2VUZXN0RXhwcik7CisKKwkJCQkJcGFyYW0tPmNvbGxhdGlvbiA9IEludmFsaWRPaWQ7 CisJCQkJCXBhcmFtLT50eXBlSWQgPSBjeHQtPmNvbnRleHRJdGVtVHlwaWQ7CisJCQkJCXBhcmFt LT50eXBlTW9kID0gLTE7CisKKwkJCQkJamUgPSB0cmFuc2Zvcm1Kc29uVGFibGVDb2x1bW4ocmF3 YywgKE5vZGUgKikgcGFyYW0sCisJCQkJCQkJCQkJCQkgIE5JTCwgZXJyb3JPbkVycm9yKTsKKwor CQkJCQljb2xleHByID0gdHJhbnNmb3JtRXhwcihwc3RhdGUsIGplLCBFWFBSX0tJTkRfRlJPTV9G VU5DVElPTik7CisJCQkJCWFzc2lnbl9leHByX2NvbGxhdGlvbnMocHN0YXRlLCBjb2xleHByKTsK KworCQkJCQl0eXBpZCA9IGV4cHJUeXBlKGNvbGV4cHIpOworCQkJCQl0eXBtb2QgPSBleHByVHlw bW9kKGNvbGV4cHIpOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCWNhc2UgSlRDX05FU1RFRDoK KwkJCQljb250aW51ZTsKKworCQkJZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9SLCAidW5rbm93biBK U09OX1RBQkxFIGNvbHVtbiB0eXBlOiAlZCIsIHJhd2MtPmNvbHR5cGUpOworCQkJCWJyZWFrOwor CQl9CisKKwkJdGYtPmNvbHR5cGVzID0gbGFwcGVuZF9vaWQodGYtPmNvbHR5cGVzLCB0eXBpZCk7 CisJCXRmLT5jb2x0eXBtb2RzID0gbGFwcGVuZF9pbnQodGYtPmNvbHR5cG1vZHMsIHR5cG1vZCk7 CisJCXRmLT5jb2xjb2xsYXRpb25zID0gbGFwcGVuZF9vaWQodGYtPmNvbGNvbGxhdGlvbnMsIGdl dF90eXBjb2xsYXRpb24odHlwaWQpKTsKKwkJdGYtPmNvbHZhbGV4cHJzID0gbGFwcGVuZCh0Zi0+ Y29sdmFsZXhwcnMsIGNvbGV4cHIpOworCX0KK30KKworLyoKKyAqIENyZWF0ZSB0cmFuc2Zvcm1l ZCBKU09OX1RBQkxFIHBhcmVudCBwbGFuIG5vZGUgYnkgYXBwZW5kaW5nIGFsbCBub24tbmVzdGVk CisgKiBjb2x1bW5zIHRvIHRoZSBUYWJsZUZ1bmMgbm9kZSBhbmQgcmVtZW1iZXJpbmcgdGhlaXIg aW5kaWNlcyBpbiB0aGUKKyAqIGNvbHZhbGV4cHJzIGxpc3QuCisgKi8KK3N0YXRpYyBKc29uVGFi bGVQbGFuICoKK21ha2VQYXJlbnRKc29uVGFibGVQbGFuKEpzb25UYWJsZVBhcnNlQ29udGV4dCAq IGN4dCwgSnNvblRhYmxlUGF0aFNwZWMgKnBhdGhzcGVjLAorCQkJCQkJTGlzdCAqY29sdW1ucykK K3sKKwlKc29uVGFibGVQbGFuICpwbGFuID0gbWFrZU5vZGUoSnNvblRhYmxlUGxhbik7CisJSnNv bkJlaGF2aW9yICpvbl9lcnJvciA9IGN4dC0+dGFibGUtPm9uX2Vycm9yOworCWNoYXIJCSAqcGF0 aHN0cmluZzsKKwlDb25zdAkJICp2YWx1ZTsKKworCUFzc2VydChJc0EocGF0aHNwZWMtPnN0cmlu ZywgQV9Db25zdCkpOworCXBhdGhzdHJpbmcgPSBjYXN0Tm9kZShBX0NvbnN0LCBwYXRoc3BlYy0+ c3RyaW5nKS0+dmFsLnN2YWwuc3ZhbDsKKwl2YWx1ZSA9IG1ha2VDb25zdChKU09OUEFUSE9JRCwg LTEsIEludmFsaWRPaWQsIC0xLAorCQkJCQkgIERpcmVjdEZ1bmN0aW9uQ2FsbDEoanNvbnBhdGhf aW4sCisJCQkJCQkJCQkJICBDU3RyaW5nR2V0RGF0dW0ocGF0aHN0cmluZykpLAorCQkJCQkgIGZh bHNlLCBmYWxzZSk7CisJcGxhbi0+cGF0aCA9IG1ha2VKc29uVGFibGVQYXRoKHZhbHVlLCBwYXRo c3BlYy0+bmFtZSk7CisKKwkvKiBzYXZlIHN0YXJ0IG9mIGNvbHVtbiByYW5nZSAqLworCXBsYW4t PmNvbE1pbiA9IGxpc3RfbGVuZ3RoKGN4dC0+dGFibGVmdW5jLT5jb2x2YWxleHBycyk7CisKKwlh cHBlbmRKc29uVGFibGVDb2x1bW5zKGN4dCwgY29sdW1ucyk7CisKKwkvKiBzYXZlIGVuZCBvZiBj b2x1bW4gcmFuZ2UgKi8KKwlwbGFuLT5jb2xNYXggPSBsaXN0X2xlbmd0aChjeHQtPnRhYmxlZnVu Yy0+Y29sdmFsZXhwcnMpIC0gMTsKKworCXBsYW4tPmVycm9yT25FcnJvciA9IG9uX2Vycm9yICYm IG9uX2Vycm9yLT5idHlwZSA9PSBKU09OX0JFSEFWSU9SX0VSUk9SOworCisJcmV0dXJuIHBsYW47 Cit9CisKK3N0YXRpYyBKc29uVGFibGVQbGFuICoKK3RyYW5zZm9ybUpzb25UYWJsZUNvbHVtbnMo SnNvblRhYmxlUGFyc2VDb250ZXh0ICogY3h0LAorCQkJCQkJICBKc29uVGFibGVQbGFuU3BlYyAq cGxhbnNwZWMsCisJCQkJCQkgIExpc3QgKmNvbHVtbnMsCisJCQkJCQkgIEpzb25UYWJsZVBhdGhT cGVjICpwYXRoc3BlYykKK3sKKwlKc29uVGFibGVQbGFuICpwbGFuOworCUpzb25UYWJsZVBsYW5T cGVjICpjaGlsZFBsYW5TcGVjOworCWJvb2wJCWRlZmF1bHRQbGFuID0gcGxhbnNwZWMgPT0gTlVM TCB8fAorCQlwbGFuc3BlYy0+cGxhbl90eXBlID09IEpTVFBfREVGQVVMVDsKKworCWlmIChkZWZh dWx0UGxhbikKKwkJY2hpbGRQbGFuU3BlYyA9IHBsYW5zcGVjOworCWVsc2UKKwl7CisJCS8qIHZh bGlkYXRlIHBhcmVudCBhbmQgY2hpbGQgcGxhbnMgKi8KKwkJSnNvblRhYmxlUGxhblNwZWMgKnBh cmVudFBsYW5TcGVjOworCisJCWlmIChwbGFuc3BlYy0+cGxhbl90eXBlID09IEpTVFBfSk9JTkVE KQorCQl7CisJCQlpZiAocGxhbnNwZWMtPmpvaW5fdHlwZSAhPSBKU1RQX0pPSU5fSU5ORVIgJiYK KwkJCQlwbGFuc3BlYy0+am9pbl90eXBlICE9IEpTVFBfSk9JTl9PVVRFUikKKwkJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQkJIGVy cm1zZygiaW52YWxpZCBKU09OX1RBQkxFIHBsYW4gY2xhdXNlIiksCisJCQkJCQkgZXJyZGV0YWls KCJFeHBlY3RlZCBJTk5FUiBvciBPVVRFUi4iKSwKKwkJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24o Y3h0LT5wc3RhdGUsIHBsYW5zcGVjLT5sb2NhdGlvbikpKTsKKworCQkJcGFyZW50UGxhblNwZWMg PSBwbGFuc3BlYy0+cGxhbjE7CisJCQljaGlsZFBsYW5TcGVjID0gcGxhbnNwZWMtPnBsYW4yOwor CisJCQlBc3NlcnQocGFyZW50UGxhblNwZWMtPnBsYW5fdHlwZSAhPSBKU1RQX0pPSU5FRCk7CisJ CQlBc3NlcnQocGFyZW50UGxhblNwZWMtPnBhdGhuYW1lKTsKKwkJfQorCQllbHNlCisJCXsKKwkJ CXBhcmVudFBsYW5TcGVjID0gcGxhbnNwZWM7CisJCQljaGlsZFBsYW5TcGVjID0gTlVMTDsKKwkJ fQorCisJCWlmIChzdHJjbXAocGFyZW50UGxhblNwZWMtPnBhdGhuYW1lLCBwYXRoc3BlYy0+bmFt ZSkgIT0gMCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFY X0VSUk9SKSwKKwkJCQkJIGVycm1zZygiaW52YWxpZCBKU09OX1RBQkxFIHBsYW4iKSwKKwkJCQkJ IGVycmRldGFpbCgiUEFUSCBuYW1lIG1pc21hdGNoOiBleHBlY3RlZCAlcyBidXQgJXMgaXMgZ2l2 ZW4uIiwKKwkJCQkJCQkgICBwYXRoc3BlYy0+bmFtZSwgcGFyZW50UGxhblNwZWMtPnBhdGhuYW1l KSwKKwkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihjeHQtPnBzdGF0ZSwgcGxhbnNwZWMtPmxvY2F0 aW9uKSkpOworCisJCXZhbGlkYXRlSnNvblRhYmxlQ2hpbGRQbGFuKGN4dC0+cHN0YXRlLCBjaGls ZFBsYW5TcGVjLCBjb2x1bW5zKTsKKwl9CisKKwkvKiB0cmFuc2Zvcm0gb25seSBub24tbmVzdGVk IGNvbHVtbnMgKi8KKwlwbGFuID0gbWFrZVBhcmVudEpzb25UYWJsZVBsYW4oY3h0LCBwYXRoc3Bl YywgY29sdW1ucyk7CisKKwlpZiAoY2hpbGRQbGFuU3BlYyB8fCBkZWZhdWx0UGxhbikKKwl7CisJ CS8qIHRyYW5zZm9ybSByZWN1cnNpdmVseSBuZXN0ZWQgY29sdW1ucyAqLworCQlwbGFuLT5jaGls ZCA9IHRyYW5zZm9ybUpzb25UYWJsZUNoaWxkUGxhbihjeHQsIGNoaWxkUGxhblNwZWMsIGNvbHVt bnMpOworCQlpZiAocGxhbi0+Y2hpbGQpCisJCQlwbGFuLT5vdXRlckpvaW4gPSBwbGFuc3BlYyA9 PSBOVUxMIHx8CisJCQkJKHBsYW5zcGVjLT5qb2luX3R5cGUgJiBKU1RQX0pPSU5fT1VURVIpOwor CQkvKiBlbHNlOiBkZWZhdWx0IHBsYW4gY2FzZSwgbm8gY2hpbGRyZW4gZm91bmQgKi8KKwl9CisK KwlyZXR1cm4gcGxhbjsKK30KKworLyoKKyAqIHRyYW5zZm9ybUpzb25UYWJsZSAtCisgKgkJCVRy YW5zZm9ybSBhIHJhdyBKc29uVGFibGUgaW50byBUYWJsZUZ1bmMuCisgKgorICogVHJhbnNmb3Jt IHRoZSBkb2N1bWVudC1nZW5lcmF0aW5nIGV4cHJlc3Npb24sIHRoZSByb3ctZ2VuZXJhdGluZyBl eHByZXNzaW9uLAorICogdGhlIGNvbHVtbi1nZW5lcmF0aW5nIGV4cHJlc3Npb25zLCBhbmQgdGhl IGRlZmF1bHQgdmFsdWUgZXhwcmVzc2lvbnMuCisgKi8KK1BhcnNlTmFtZXNwYWNlSXRlbSAqCit0 cmFuc2Zvcm1Kc29uVGFibGUoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uVGFibGUgKmp0KQorewor CUpzb25UYWJsZVBhcnNlQ29udGV4dCBjeHQ7CisJVGFibGVGdW5jICAqdGYgPSBtYWtlTm9kZShU YWJsZUZ1bmMpOworCUpzb25GdW5jRXhwciAqamZlID0gbWFrZU5vZGUoSnNvbkZ1bmNFeHByKTsK KwlKc29uRXhwciAgICpqZTsKKwlKc29uVGFibGVQbGFuU3BlYyAqcGxhbiA9IGp0LT5wbGFuc3Bl YzsKKwlKc29uVGFibGVQYXRoU3BlYyAqcm9vdFBhdGhTcGVjID0ganQtPnBhdGhzcGVjOworCWJv b2wJCWlzX2xhdGVyYWw7CisKKwlBc3NlcnQoSXNBKHJvb3RQYXRoU3BlYy0+c3RyaW5nLCBBX0Nv bnN0KSAmJgorCQkgICBjYXN0Tm9kZShBX0NvbnN0LCByb290UGF0aFNwZWMtPnN0cmluZyktPnZh bC5ub2RlLnR5cGUgPT0gVF9TdHJpbmcpOworCisJY3h0LnBzdGF0ZSA9IHBzdGF0ZTsKKwljeHQu dGFibGUgPSBqdDsKKwljeHQudGFibGVmdW5jID0gdGY7CisJY3h0LnBhdGhOYW1lcyA9IE5JTDsK KwljeHQucGF0aE5hbWVJZCA9IDA7CisKKwlpZiAocm9vdFBhdGhTcGVjLT5uYW1lKQorCQlyZWdp c3Rlckpzb25UYWJsZVBhdGgoJmN4dCwgcm9vdFBhdGhTcGVjLT5uYW1lLAorCQkJCQkJCSAgcm9v dFBhdGhTcGVjLT5uYW1lX2xvY2F0aW9uKTsKKwllbHNlCisJeworCQlpZiAoanQtPnBsYW5zcGVj ICE9IE5VTEwpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRB WF9FUlJPUiksCisJCQkJCSBlcnJtc2coImludmFsaWQgSlNPTl9UQUJMRSBleHByZXNzaW9uIiks CisJCQkJCSBlcnJkZXRhaWwoIkpTT05fVEFCTEUgcGF0aCBtdXN0IGNvbnRhaW4iCisJCQkJCQkJ ICAgIiBleHBsaWNpdCBBUyBwYXRobmFtZSBzcGVjaWZpY2F0aW9uIGlmIgorCQkJCQkJCSAgICIg ZXhwbGljaXQgUExBTiBjbGF1c2UgaXMgdXNlZCIpLAorCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9u KHBzdGF0ZSwgcm9vdFBhdGhTcGVjLT5sb2NhdGlvbikpKTsKKworCQlyb290UGF0aFNwZWMtPm5h bWUgPSBnZW5lcmF0ZUpzb25UYWJsZVBhdGhOYW1lKCZjeHQpOworCX0KKworCXJlZ2lzdGVyQWxs SnNvblRhYmxlQ29sdW1uc0FuZFBhdGhzKCZjeHQsIGp0LT5jb2x1bW5zKTsKKworCWpmZS0+b3Ag PSBKU09OX1RBQkxFX09QOworCWpmZS0+Y29udGV4dF9pdGVtID0JanQtPmNvbnRleHRfaXRlbTsK KwlqZmUtPnBhdGhzcGVjID0gKE5vZGUgKikgcm9vdFBhdGhTcGVjLT5zdHJpbmc7CisJamZlLT5w YXRobmFtZSA9IHJvb3RQYXRoU3BlYy0+bmFtZTsKKwlqZmUtPnBhc3NpbmcgPSBqdC0+cGFzc2lu ZzsKKwlqZmUtPm9uX2VtcHR5ID0gTlVMTDsKKwlqZmUtPm9uX2Vycm9yID0ganQtPm9uX2Vycm9y OworCWpmZS0+bG9jYXRpb24gPSBqdC0+bG9jYXRpb247CisKKwkvKgorCSAqIFdlIG1ha2UgbGF0 ZXJhbF9vbmx5IG5hbWVzIG9mIHRoaXMgbGV2ZWwgdmlzaWJsZSwgd2hldGhlciBvciBub3QgdGhl CisJICogUmFuZ2VUYWJsZUZ1bmMgaXMgZXhwbGljaXRseSBtYXJrZWQgTEFURVJBTC4gIFRoaXMg aXMgbmVlZGVkIGZvciBTUUwKKwkgKiBzcGVjIGNvbXBsaWFuY2UgYW5kIHNlZW1zIHVzZWZ1bCBv biBjb252ZW5pZW5jZSBncm91bmRzIGZvciBhbGwKKwkgKiBmdW5jdGlvbnMgaW4gRlJPTS4KKwkg KgorCSAqIChMQVRFUkFMIGNhbid0IG5lc3Qgd2l0aGluIGEgc2luZ2xlIHBzdGF0ZSBsZXZlbCwg c28gd2UgZG9uJ3QgbmVlZAorCSAqIHNhdmUvcmVzdG9yZSBsb2dpYyBoZXJlLikKKwkgKi8KKwlB c3NlcnQoIXBzdGF0ZS0+cF9sYXRlcmFsX2FjdGl2ZSk7CisJcHN0YXRlLT5wX2xhdGVyYWxfYWN0 aXZlID0gdHJ1ZTsKKworCXRmLT5mdW5jdHlwZSA9IFRGVF9KU09OX1RBQkxFOworCXRmLT5kb2Nl eHByID0gdHJhbnNmb3JtRXhwcihwc3RhdGUsIChOb2RlICopIGpmZSwgRVhQUl9LSU5EX0ZST01f RlVOQ1RJT04pOworCisJY3h0LmNvbnRleHRJdGVtVHlwaWQgPSBleHByVHlwZSh0Zi0+ZG9jZXhw cik7CisKKwl0Zi0+cGxhbiA9IChOb2RlICopIHRyYW5zZm9ybUpzb25UYWJsZUNvbHVtbnMoJmN4 dCwgcGxhbiwganQtPmNvbHVtbnMsCisJCQkJCQkJCQkJCQkgIHJvb3RQYXRoU3BlYyk7CisKKwkv KiBBbHNvIHNhdmUgYSBjb3B5IG9mIHRoZSBQQVNTSU5HIGFyZ3VtZW50cyBpbiB0aGUgVGFibGVG dW5jIG5vZGUuICovCisJamUgPSAoSnNvbkV4cHIgKikgdGYtPmRvY2V4cHI7CisJdGYtPnBhc3Np bmd2YWxleHBycyA9IGNvcHlPYmplY3QoamUtPnBhc3NpbmdfdmFsdWVzKTsKKworCXRmLT5vcmRp bmFsaXR5Y29sID0gLTE7CQkvKiB1bmRlZmluZSBvcmRpbmFsaXR5IGNvbHVtbiBudW1iZXIgKi8K Kwl0Zi0+bG9jYXRpb24gPSBqdC0+bG9jYXRpb247CisKKwlwc3RhdGUtPnBfbGF0ZXJhbF9hY3Rp dmUgPSBmYWxzZTsKKworCS8qCisJICogTWFyayB0aGUgUlRFIGFzIExBVEVSQUwgaWYgdGhlIHVz ZXIgc2FpZCBMQVRFUkFMIGV4cGxpY2l0bHksIG9yIGlmCisJICogdGhlcmUgYXJlIGFueSBsYXRl cmFsIGNyb3NzLXJlZmVyZW5jZXMgaW4gaXQuCisJICovCisJaXNfbGF0ZXJhbCA9IGp0LT5sYXRl cmFsIHx8IGNvbnRhaW5fdmFyc19vZl9sZXZlbCgoTm9kZSAqKSB0ZiwgMCk7CisKKwlyZXR1cm4g YWRkUmFuZ2VUYWJsZUVudHJ5Rm9yVGFibGVGdW5jKHBzdGF0ZSwKKwkJCQkJCQkJCQkgIHRmLCBq dC0+YWxpYXMsIGlzX2xhdGVyYWwsIHRydWUpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cGFyc2VyL3BhcnNlX3JlbGF0aW9uLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcmVsYXRp b24uYwppbmRleCA2NWU1NGFiZGQxLi5jMmUzZTY1Y2M2IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9wYXJzZXIvcGFyc2VfcmVsYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2Vf cmVsYXRpb24uYwpAQCAtMjA3NywxMyArMjA3NywxNSBAQCBhZGRSYW5nZVRhYmxlRW50cnlGb3JU YWJsZUZ1bmMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCXJ0ZS0+cmVsaWQgPSBJbnZhbGlkT2lkOwog CXJ0ZS0+c3VicXVlcnkgPSBOVUxMOwogCXJ0ZS0+dGFibGVmdW5jID0gdGY7Ci0JcnRlLT50YWJs ZWZ1bmNfbmFtZSA9IHBzdHJkdXAoIlhNTFRBQkxFIik7CisJcnRlLT50YWJsZWZ1bmNfbmFtZSA9 IHBzdHJkdXAodGYtPmZ1bmN0eXBlID09IFRGVF9YTUxUQUJMRSA/CisJCQkJCQkJCSAgIlhNTFRB QkxFIiA6ICJKU09OX1RBQkxFIik7CiAJcnRlLT5jb2x0eXBlcyA9IHRmLT5jb2x0eXBlczsKIAly dGUtPmNvbHR5cG1vZHMgPSB0Zi0+Y29sdHlwbW9kczsKIAlydGUtPmNvbGNvbGxhdGlvbnMgPSB0 Zi0+Y29sY29sbGF0aW9uczsKIAlydGUtPmFsaWFzID0gYWxpYXM7CiAKLQlyZWZuYW1lID0gYWxp YXMgPyBhbGlhcy0+YWxpYXNuYW1lIDogcHN0cmR1cCgieG1sdGFibGUiKTsKKwlyZWZuYW1lID0g YWxpYXMgPyBhbGlhcy0+YWxpYXNuYW1lIDoKKwkJcHN0cmR1cCh0Zi0+ZnVuY3R5cGUgPT0gVEZU X1hNTFRBQkxFID8gInhtbHRhYmxlIiA6ICJqc29uX3RhYmxlIik7CiAJZXJlZiA9IGFsaWFzID8g Y29weU9iamVjdChhbGlhcykgOiBtYWtlQWxpYXMocmVmbmFtZSwgTklMKTsKIAludW1hbGlhc2Vz ID0gbGlzdF9sZW5ndGgoZXJlZi0+Y29sbmFtZXMpOwogCkBAIC0yMDk2LDcgKzIwOTgsNyBAQCBh ZGRSYW5nZVRhYmxlRW50cnlGb3JUYWJsZUZ1bmMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQllcmVw b3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9DT0xVTU5fUkVGRVJFTkNF KSwKIAkJCQkgZXJybXNnKCIlcyBmdW5jdGlvbiBoYXMgJWQgY29sdW1ucyBhdmFpbGFibGUgYnV0 ICVkIGNvbHVtbnMgc3BlY2lmaWVkIiwKLQkJCQkJCSJYTUxUQUJMRSIsCisJCQkJCQl0Zi0+ZnVu Y3R5cGUgPT0gVEZUX1hNTFRBQkxFID8gIlhNTFRBQkxFIiA6ICJKU09OX1RBQkxFIiwKIAkJCQkJ CWxpc3RfbGVuZ3RoKHRmLT5jb2xuYW1lcyksIG51bWFsaWFzZXMpKSk7CiAKIAlydGUtPmVyZWYg PSBlcmVmOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jIGIv c3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jCmluZGV4IGVhNWFjNmJhZmUuLmEzMzFl YTMyNzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYworKysg Yi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdGFyZ2V0LmMKQEAgLTIwMDIsNiArMjAwMiw5IEBA IEZpZ3VyZUNvbG5hbWVJbnRlcm5hbChOb2RlICpub2RlLCBjaGFyICoqbmFtZSkKIAkJCQljYXNl IEpTT05fVkFMVUVfT1A6CiAJCQkJCSpuYW1lID0gImpzb25fdmFsdWUiOwogCQkJCQlyZXR1cm4g MjsKKwkJCQljYXNlIEpTT05fVEFCTEVfT1A6CisJCQkJCSpuYW1lID0gImpzb25fdGFibGUiOwor CQkJCQlyZXR1cm4gMjsKIAkJCX0KIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX2V4ZWMuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9qc29ucGF0aF9leGVjLmMKaW5kZXggY2VjMGYzZGQ2NS4uYzY5MzhiZmE1NyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX2V4ZWMuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5jCkBAIC02MSwxMCArNjEsMTIgQEAKIAogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBl LmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY0V4cHIuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgi CiAjaW5jbHVkZSAibGliL3N0cmluZ2luZm8uaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNp bmNsdWRlICJub2Rlcy9taXNjbm9kZXMuaCIKKyNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIK ICNpbmNsdWRlICJyZWdleC9yZWdleC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAj aW5jbHVkZSAidXRpbHMvZGF0ZS5oIgpAQCAtNzUsNiArNzcsOCBAQAogI2luY2x1ZGUgInV0aWxz L2d1Yy5oIgogI2luY2x1ZGUgInV0aWxzL2pzb24uaCIKICNpbmNsdWRlICJ1dGlscy9qc29ucGF0 aC5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0 aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1wLmgiCiAjaW5jbHVkZSAidXRpbHMvdmFy bGVuYS5oIgogCkBAIC0xNTksNiArMTYzLDYwIEBAIHR5cGVkZWYgc3RydWN0IEpzb25WYWx1ZUxp c3RJdGVyYXRvcgogCUxpc3RDZWxsICAgKm5leHQ7CiB9IEpzb25WYWx1ZUxpc3RJdGVyYXRvcjsK IAorLyogU3RydWN0dXJlcyBmb3IgSlNPTl9UQUJMRSBleGVjdXRpb24gICovCisKK3R5cGVkZWYg ZW51bSBKc29uVGFibGVQbGFuU3RhdGVUeXBlCit7CisJSlNPTl9UQUJMRV9TQ0FOX1NUQVRFID0g MCwKKwlKU09OX1RBQkxFX0pPSU5fU1RBVEUsCit9CQkJSnNvblRhYmxlUGxhblN0YXRlVHlwZTsK KwordHlwZWRlZiBzdHJ1Y3QgSnNvblRhYmxlUGxhblN0YXRlCit7CisJSnNvblRhYmxlUGxhblN0 YXRlVHlwZSB0eXBlOworCisJc3RydWN0IEpzb25UYWJsZVBsYW5TdGF0ZSAqcGFyZW50OworCXN0 cnVjdCBKc29uVGFibGVQbGFuU3RhdGUgKm5lc3RlZDsKK30JCQlKc29uVGFibGVQbGFuU3RhdGU7 CisKK3R5cGVkZWYgc3RydWN0IEpzb25UYWJsZVNjYW5TdGF0ZQoreworCUpzb25UYWJsZVBsYW5T dGF0ZSBwbGFuOworCisJTWVtb3J5Q29udGV4dCBtY3h0OworCUpzb25QYXRoICAgKnBhdGg7CisJ TGlzdAkgICAqYXJnczsKKwlKc29uVmFsdWVMaXN0IGZvdW5kOworCUpzb25WYWx1ZUxpc3RJdGVy YXRvciBpdGVyOworCURhdHVtCQljdXJyZW50OworCWludAkJCW9yZGluYWw7CisJYm9vbAkJY3Vy cmVudElzTnVsbDsKKwlib29sCQlvdXRlckpvaW47CisJYm9vbAkJZXJyb3JPbkVycm9yOworCWJv b2wJCWFkdmFuY2VOZXN0ZWQ7CisJYm9vbAkJcmVzZXQ7Cit9IEpzb25UYWJsZVNjYW5TdGF0ZTsK KwordHlwZWRlZiBzdHJ1Y3QgSnNvblRhYmxlSm9pblN0YXRlCit7CisJSnNvblRhYmxlUGxhblN0 YXRlIHBsYW47CisKKwlKc29uVGFibGVQbGFuU3RhdGUgKmxlZnQ7CisJSnNvblRhYmxlUGxhblN0 YXRlICpyaWdodDsKKwlib29sCQljcm9zczsKKwlib29sCQlhZHZhbmNlUmlnaHQ7Cit9IEpzb25U YWJsZUpvaW5TdGF0ZTsKKworLyogcmFuZG9tIG51bWJlciB0byBpZGVudGlmeSBKc29uVGFibGVF eGVjQ29udGV4dCAqLworI2RlZmluZSBKU09OX1RBQkxFX0VYRUNfQ09OVEVYVF9NQUdJQwkJNDE4 MzUyODY3CisKK3R5cGVkZWYgc3RydWN0IEpzb25UYWJsZUV4ZWNDb250ZXh0Cit7CisJaW50CQkJ bWFnaWM7CisJSnNvblRhYmxlU2NhblN0YXRlICoqY29sZXhwcnNjYW5zOworCUpzb25UYWJsZVNj YW5TdGF0ZSAqcm9vdDsKK30JCQlKc29uVGFibGVFeGVjQ29udGV4dDsKKwogLyogc3RyaWN0L2xh eCBmbGFncyBpcyBkZWNvbXBvc2VkIGludG8gZm91ciBbdW5dd3JhcC9lcnJvciBmbGFncyAqLwog I2RlZmluZSBqc3BTdHJpY3RBYnNlbmNlT2ZFcnJvcnMoY3h0KQkoIShjeHQpLT5sYXhNb2RlKQog I2RlZmluZSBqc3BBdXRvVW53cmFwKGN4dCkJCQkJKChjeHQpLT5sYXhNb2RlKQpAQCAtMjU4LDYg KzMxNiw3IEBAIHN0YXRpYyBKc29uUGF0aEV4ZWNSZXN1bHQgZ2V0QXJyYXlJbmRleChKc29uUGF0 aEV4ZWNDb250ZXh0ICpjeHQsCiAJCQkJCQkJCQkJSnNvblBhdGhJdGVtICpqc3AsIEpzb25iVmFs dWUgKmpiLCBpbnQzMiAqaW5kZXgpOwogc3RhdGljIEpzb25CYXNlT2JqZWN0SW5mbyBzZXRCYXNl T2JqZWN0KEpzb25QYXRoRXhlY0NvbnRleHQgKmN4dCwKIAkJCQkJCQkJCQlKc29uYlZhbHVlICpq YnYsIGludDMyIGlkKTsKK3N0YXRpYyB2b2lkIEpzb25WYWx1ZUxpc3RDbGVhcihKc29uVmFsdWVM aXN0ICpqdmwpOwogc3RhdGljIHZvaWQgSnNvblZhbHVlTGlzdEFwcGVuZChKc29uVmFsdWVMaXN0 ICpqdmwsIEpzb25iVmFsdWUgKmpidik7CiBzdGF0aWMgaW50CUpzb25WYWx1ZUxpc3RMZW5ndGgo Y29uc3QgSnNvblZhbHVlTGlzdCAqanZsKTsKIHN0YXRpYyBib29sIEpzb25WYWx1ZUxpc3RJc0Vt cHR5KEpzb25WYWx1ZUxpc3QgKmp2bCk7CkBAIC0yNzUsNiArMzM0LDMyIEBAIHN0YXRpYyBKc29u YlZhbHVlICp3cmFwSXRlbXNJbkFycmF5KGNvbnN0IEpzb25WYWx1ZUxpc3QgKml0ZW1zKTsKIHN0 YXRpYyBpbnQJY29tcGFyZURhdGV0aW1lKERhdHVtIHZhbDEsIE9pZCB0eXBpZDEsIERhdHVtIHZh bDIsIE9pZCB0eXBpZDIsCiAJCQkJCQkJYm9vbCB1c2VUeiwgYm9vbCAqY2FzdF9lcnJvcik7CiAK Kworc3RhdGljIEpzb25UYWJsZVBsYW5TdGF0ZSAqIEpzb25UYWJsZUluaXRQbGFuU3RhdGUoSnNv blRhYmxlRXhlY0NvbnRleHQgKiBjeHQsCisJCQkJCQkJCQkJCQkgICBOb2RlICpwbGFuLAorCQkJ CQkJCQkJCQkJICAgSnNvblRhYmxlUGxhblN0YXRlICogcGFyZW50KTsKK3N0YXRpYyBib29sIEpz b25UYWJsZVBsYW5OZXh0Um93KEpzb25UYWJsZVBsYW5TdGF0ZSAqIHN0YXRlKTsKK3N0YXRpYyBi b29sIEpzb25UYWJsZVNjYW5OZXh0Um93KEpzb25UYWJsZVNjYW5TdGF0ZSAqc2Nhbik7CisKK3N0 YXRpYyB2b2lkIEpzb25UYWJsZUluaXRPcGFxdWUoVGFibGVGdW5jU2NhblN0YXRlICpzdGF0ZSwg aW50IG5hdHRzKTsKK3N0YXRpYyB2b2lkIEpzb25UYWJsZVNldERvY3VtZW50KFRhYmxlRnVuY1Nj YW5TdGF0ZSAqc3RhdGUsIERhdHVtIHZhbHVlKTsKK3N0YXRpYyBib29sIEpzb25UYWJsZUZldGNo Um93KFRhYmxlRnVuY1NjYW5TdGF0ZSAqc3RhdGUpOworc3RhdGljIERhdHVtIEpzb25UYWJsZUdl dFZhbHVlKFRhYmxlRnVuY1NjYW5TdGF0ZSAqc3RhdGUsIGludCBjb2xudW0sCisJCQkJICBPaWQg dHlwaWQsIGludDMyIHR5cG1vZCwgYm9vbCAqaXNudWxsKTsKK3N0YXRpYyB2b2lkIEpzb25UYWJs ZURlc3Ryb3lPcGFxdWUoVGFibGVGdW5jU2NhblN0YXRlICpzdGF0ZSk7CisKK2NvbnN0IFRhYmxl RnVuY1JvdXRpbmUgSnNvbmJUYWJsZVJvdXRpbmUgPQoreworCUpzb25UYWJsZUluaXRPcGFxdWUs CisJSnNvblRhYmxlU2V0RG9jdW1lbnQsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJSnNvblRh YmxlRmV0Y2hSb3csCisJSnNvblRhYmxlR2V0VmFsdWUsCisJSnNvblRhYmxlRGVzdHJveU9wYXF1 ZQorfTsKKwogLyoqKioqKioqKioqKioqKioqKiBVc2VyIGludGVyZmFjZSB0byBKc29uUGF0aCBl eGVjdXRvciAqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKQEAgLTI2NjEsNiArMjc0NiwxMyBA QCBzZXRCYXNlT2JqZWN0KEpzb25QYXRoRXhlY0NvbnRleHQgKmN4dCwgSnNvbmJWYWx1ZSAqamJ2 LCBpbnQzMiBpZCkKIAlyZXR1cm4gYmFzZU9iamVjdDsKIH0KIAorc3RhdGljIHZvaWQKK0pzb25W YWx1ZUxpc3RDbGVhcihKc29uVmFsdWVMaXN0ICpqdmwpCit7CisJanZsLT5zaW5nbGV0b24gPSBO VUxMOworCWp2bC0+bGlzdCA9IE5VTEw7Cit9CisKIHN0YXRpYyB2b2lkCiBKc29uVmFsdWVMaXN0 QXBwZW5kKEpzb25WYWx1ZUxpc3QgKmp2bCwgSnNvbmJWYWx1ZSAqamJ2KQogewpAQCAtMzE5Niwz ICszMjg4LDQ1OCBAQCBKc29uUGF0aFZhbHVlKERhdHVtIGpiLCBKc29uUGF0aCAqanAsIGJvb2wg KmVtcHR5LCBib29sICplcnJvciwgTGlzdCAqdmFycykKIAogCXJldHVybiByZXM7CiB9CisKKy8q KioqKioqKioqKioqKioqKioqKioqKiogSlNPTl9UQUJMRSBmdW5jdGlvbnMgKioqKioqKioqKioq KioqKioqKioqKioqKioqLworCisvKgorICogUmV0dXJucyBwcml2YXRlIGRhdGEgZnJvbSBleGVj dXRvciBzdGF0ZS4gRW5zdXJlIHZhbGlkaXR5IGJ5IGNoZWNrIHdpdGgKKyAqIE1BR0lDIG51bWJl ci4KKyAqLworc3RhdGljIGlubGluZSBKc29uVGFibGVFeGVjQ29udGV4dCAqCitHZXRKc29uVGFi bGVFeGVjQ29udGV4dChUYWJsZUZ1bmNTY2FuU3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICpmbmFt ZSkKK3sKKwlKc29uVGFibGVFeGVjQ29udGV4dCAqcmVzdWx0OworCisJaWYgKCFJc0Eoc3RhdGUs IFRhYmxlRnVuY1NjYW5TdGF0ZSkpCisJCWVsb2coRVJST1IsICIlcyBjYWxsZWQgd2l0aCBpbnZh bGlkIFRhYmxlRnVuY1NjYW5TdGF0ZSIsIGZuYW1lKTsKKwlyZXN1bHQgPSAoSnNvblRhYmxlRXhl Y0NvbnRleHQgKikgc3RhdGUtPm9wYXF1ZTsKKwlpZiAocmVzdWx0LT5tYWdpYyAhPSBKU09OX1RB QkxFX0VYRUNfQ09OVEVYVF9NQUdJQykKKwkJZWxvZyhFUlJPUiwgIiVzIGNhbGxlZCB3aXRoIGlu dmFsaWQgVGFibGVGdW5jU2NhblN0YXRlIiwgZm5hbWUpOworCisJcmV0dXJuIHJlc3VsdDsKK30K KworLyogUmVjdXJzaXZlbHkgaW5pdGlhbGl6ZSBKU09OX1RBQkxFIHNjYW4gLyBqb2luIHN0YXRl ICovCitzdGF0aWMgSnNvblRhYmxlSm9pblN0YXRlICoKK0pzb25UYWJsZUluaXRKb2luU3RhdGUo SnNvblRhYmxlRXhlY0NvbnRleHQgKiBjeHQsIEpzb25UYWJsZVNpYmxpbmcgKnBsYW4sCisJCQkJ CSAgIEpzb25UYWJsZVBsYW5TdGF0ZSAqIHBhcmVudCkKK3sKKwlKc29uVGFibGVKb2luU3RhdGUg KmpvaW4gPSBwYWxsb2MwKHNpemVvZigqam9pbikpOworCisJam9pbi0+cGxhbi50eXBlID0gSlNP Tl9UQUJMRV9KT0lOX1NUQVRFOworCS8qIHBhcmVudCBhbmQgbmVzdGVkIG5vdCBzZXQuICovCisK Kwlqb2luLT5jcm9zcyA9IHBsYW4tPmNyb3NzOworCWpvaW4tPmxlZnQgPSBKc29uVGFibGVJbml0 UGxhblN0YXRlKGN4dCwgcGxhbi0+bGFyZywgcGFyZW50KTsKKwlqb2luLT5yaWdodCA9IEpzb25U YWJsZUluaXRQbGFuU3RhdGUoY3h0LCBwbGFuLT5yYXJnLCBwYXJlbnQpOworCisJcmV0dXJuIGpv aW47Cit9CisKK3N0YXRpYyBKc29uVGFibGVTY2FuU3RhdGUgKgorSnNvblRhYmxlSW5pdFNjYW5T dGF0ZShKc29uVGFibGVFeGVjQ29udGV4dCAqIGN4dCwKKwkJCQkJICAgSnNvblRhYmxlUGxhbiAq cGxhbiwKKwkJCQkJICAgSnNvblRhYmxlUGxhblN0YXRlICpwYXJlbnQsCisJCQkJCSAgIExpc3Qg KmFyZ3MsIE1lbW9yeUNvbnRleHQgbWN4dCkKK3sKKwlKc29uVGFibGVTY2FuU3RhdGUgKnNjYW4g PSBwYWxsb2MwKHNpemVvZigqc2NhbikpOworCWludAkJCWk7CisKKwlzY2FuLT5wbGFuLnR5cGUg PSBKU09OX1RBQkxFX1NDQU5fU1RBVEU7CisJc2Nhbi0+cGxhbi5wYXJlbnQgPSBwYXJlbnQ7CisK KwlzY2FuLT5vdXRlckpvaW4gPSBwbGFuLT5vdXRlckpvaW47CisJc2Nhbi0+ZXJyb3JPbkVycm9y ID0gcGxhbi0+ZXJyb3JPbkVycm9yOworCXNjYW4tPnBhdGggPSBEYXR1bUdldEpzb25QYXRoUChw bGFuLT5wYXRoLT52YWx1ZS0+Y29uc3R2YWx1ZSk7CisJc2Nhbi0+YXJncyA9IGFyZ3M7CisJc2Nh bi0+bWN4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShtY3h0LCAiSnNvblRhYmxlRXhlY0NvbnRl eHQiLAorCQkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisKKwkvKgorCSAqIFNl dCBhZnRlciBzZXR0aW5ncyBzY2FuLT5hcmdzIGFuZCBzY2FuLT5tY3h0LCBiZWNhdXNlIHRoZSBy ZWN1cnNpdmUKKwkgKiBjYWxsIHdhbnRzIHRvIHVzZSB0aG9zZSB2YWx1ZXMuCisJICovCisJc2Nh bi0+cGxhbi5uZXN0ZWQgPSBwbGFuLT5jaGlsZCA/CisJCUpzb25UYWJsZUluaXRQbGFuU3RhdGUo Y3h0LCBwbGFuLT5jaGlsZCwgKEpzb25UYWJsZVBsYW5TdGF0ZSAqKSBzY2FuKSA6CisJCU5VTEw7 CisKKwlzY2FuLT5jdXJyZW50ID0gUG9pbnRlckdldERhdHVtKE5VTEwpOworCXNjYW4tPmN1cnJl bnRJc051bGwgPSB0cnVlOworCisJZm9yIChpID0gcGxhbi0+Y29sTWluOyBpIDw9IHBsYW4tPmNv bE1heDsgaSsrKQorCQljeHQtPmNvbGV4cHJzY2Fuc1tpXSA9IHNjYW47CisKKwlyZXR1cm4gc2Nh bjsKK30KKworLyogUmVjdXJzaXZlbHkgaW5pdGlhbGl6ZSBKU09OX1RBQkxFIHNjYW4gc3RhdGUg Ki8KK3N0YXRpYyBKc29uVGFibGVQbGFuU3RhdGUgKgorSnNvblRhYmxlSW5pdFBsYW5TdGF0ZShK c29uVGFibGVFeGVjQ29udGV4dCAqIGN4dCwgTm9kZSAqcGxhbiwKKwkJCQkJICAgSnNvblRhYmxl UGxhblN0YXRlICogcGFyZW50KQoreworCUpzb25UYWJsZVBsYW5TdGF0ZSAqc3RhdGU7CisKKwlp ZiAoSXNBKHBsYW4sIEpzb25UYWJsZVNpYmxpbmcpKQorCXsKKwkJSnNvblRhYmxlU2libGluZyAq am9pbiA9IChKc29uVGFibGVTaWJsaW5nICopIHBsYW47CisKKwkJc3RhdGUgPSAoSnNvblRhYmxl UGxhblN0YXRlICopCisJCQlKc29uVGFibGVJbml0Sm9pblN0YXRlKGN4dCwgam9pbiwgcGFyZW50 KTsKKwl9CisJZWxzZQorCXsKKwkJSnNvblRhYmxlUGxhbiAqc2NhbiA9IGNhc3ROb2RlKEpzb25U YWJsZVBsYW4sIHBsYW4pOworCQlKc29uVGFibGVTY2FuU3RhdGUgKnBhcmVudF9zY2FuID0gKEpz b25UYWJsZVNjYW5TdGF0ZSAqKSBwYXJlbnQ7CisKKwkJQXNzZXJ0KHBhcmVudF9zY2FuKTsKKwkJ c3RhdGUgPSAoSnNvblRhYmxlUGxhblN0YXRlICopCisJCQlKc29uVGFibGVJbml0U2NhblN0YXRl KGN4dCwgc2NhbiwgcGFyZW50LCBwYXJlbnRfc2Nhbi0+YXJncywKKwkJCQkJCQkJICAgcGFyZW50 X3NjYW4tPm1jeHQpOworCX0KKworCXJldHVybiBzdGF0ZTsKK30KKworLyoKKyAqIEpzb25UYWJs ZUluaXRPcGFxdWUKKyAqCQlGaWxsIGluIFRhYmxlRnVuY1NjYW5TdGF0ZS0+b3BhcXVlIGZvciBK c29uVGFibGUgcHJvY2Vzc29yCisgKi8KK3N0YXRpYyB2b2lkCitKc29uVGFibGVJbml0T3BhcXVl KFRhYmxlRnVuY1NjYW5TdGF0ZSAqc3RhdGUsIGludCBuYXR0cykKK3sKKwlKc29uVGFibGVFeGVj Q29udGV4dCAqY3h0OworCVBsYW5TdGF0ZSAgKnBzID0gJnN0YXRlLT5zcy5wczsKKwlUYWJsZUZ1 bmNTY2FuICp0ZnMgPSBjYXN0Tm9kZShUYWJsZUZ1bmNTY2FuLCBwcy0+cGxhbik7CisJVGFibGVG dW5jICAqdGYgPSB0ZnMtPnRhYmxlZnVuYzsKKwlKc29uVGFibGVQbGFuICpyb290ID0gY2FzdE5v ZGUoSnNvblRhYmxlUGxhbiwgdGYtPnBsYW4pOworCUpzb25FeHByICAgKmplID0gY2FzdE5vZGUo SnNvbkV4cHIsIHRmLT5kb2NleHByKTsKKwlMaXN0CSAgICphcmdzID0gTklMOworCisJY3h0ID0g cGFsbG9jMChzaXplb2YoSnNvblRhYmxlRXhlY0NvbnRleHQpKTsKKwljeHQtPm1hZ2ljID0gSlNP Tl9UQUJMRV9FWEVDX0NPTlRFWFRfTUFHSUM7CisKKwlpZiAoc3RhdGUtPnBhc3Npbmd2YWxleHBy cykKKwl7CisJCUxpc3RDZWxsICAgKmV4cHJsYzsKKwkJTGlzdENlbGwgICAqbmFtZWxjOworCisJ CUFzc2VydChsaXN0X2xlbmd0aChzdGF0ZS0+cGFzc2luZ3ZhbGV4cHJzKSA9PQorCQkJICAgbGlz dF9sZW5ndGgoamUtPnBhc3NpbmdfbmFtZXMpKTsKKwkJZm9yYm90aChleHBybGMsIHN0YXRlLT5w YXNzaW5ndmFsZXhwcnMsCisJCQkJbmFtZWxjLCBqZS0+cGFzc2luZ19uYW1lcykKKwkJeworCQkJ RXhwclN0YXRlICAqc3RhdGUgPSBsZmlyc3Rfbm9kZShFeHByU3RhdGUsIGV4cHJsYyk7CisJCQlT dHJpbmcJICAgKm5hbWUgPSBsZmlyc3Rfbm9kZShTdHJpbmcsIG5hbWVsYyk7CisJCQlKc29uUGF0 aFZhcmlhYmxlICp2YXIgPSBwYWxsb2Moc2l6ZW9mKCp2YXIpKTsKKworCQkJdmFyLT5uYW1lID0g cHN0cmR1cChuYW1lLT5zdmFsKTsKKwkJCXZhci0+dHlwaWQgPSBleHByVHlwZSgoTm9kZSAqKSBz dGF0ZS0+ZXhwcik7CisJCQl2YXItPnR5cG1vZCA9IGV4cHJUeXBtb2QoKE5vZGUgKikgc3RhdGUt PmV4cHIpOworCisJCQkvKgorCQkJICogRXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gYW5kIHNhdmUg dGhlIHZhbHVlIHRvIGJlIHJldHVybmVkIGJ5CisJCQkgKiBHZXRKc29uUGF0aFZhcigpLgorCQkJ ICovCisJCQl2YXItPnZhbHVlID0gRXhlY0V2YWxFeHByKHN0YXRlLCBwcy0+cHNfRXhwckNvbnRl eHQsCisJCQkJCQkJCQkgICZ2YXItPmlzbnVsbCk7CisKKwkJCWFyZ3MgPSBsYXBwZW5kKGFyZ3Ms IHZhcik7CisJCX0KKwl9CisKKwljeHQtPmNvbGV4cHJzY2FucyA9IHBhbGxvYyhzaXplb2YoSnNv blRhYmxlU2NhblN0YXRlICopICoKKwkJCQkJCQkgICBsaXN0X2xlbmd0aCh0Zi0+Y29sdmFsZXhw cnMpKTsKKworCWN4dC0+cm9vdCA9IEpzb25UYWJsZUluaXRTY2FuU3RhdGUoY3h0LCByb290LCBO VUxMLCBhcmdzLAorCQkJCQkJCQkJICAgQ3VycmVudE1lbW9yeUNvbnRleHQpOworCXN0YXRlLT5v cGFxdWUgPSBjeHQ7Cit9CisKKy8qIFJlc2V0IHNjYW4gaXRlcmF0b3IgdG8gdGhlIGJlZ2lubmlu ZyBvZiB0aGUgaXRlbSBsaXN0ICovCitzdGF0aWMgdm9pZAorSnNvblRhYmxlUmVzY2FuKEpzb25U YWJsZVNjYW5TdGF0ZSAqc2NhbikKK3sKKwlKc29uVmFsdWVMaXN0SW5pdEl0ZXJhdG9yKCZzY2Fu LT5mb3VuZCwgJnNjYW4tPml0ZXIpOworCXNjYW4tPmN1cnJlbnQgPSBQb2ludGVyR2V0RGF0dW0o TlVMTCk7CisJc2Nhbi0+Y3VycmVudElzTnVsbCA9IHRydWU7CisJc2Nhbi0+YWR2YW5jZU5lc3Rl ZCA9IGZhbHNlOworCXNjYW4tPm9yZGluYWwgPSAwOworfQorCisvKiBSZXNldCBjb250ZXh0IGl0 ZW0gb2YgYSBzY2FuLCBleGVjdXRlIEpTT04gcGF0aCBhbmQgcmVzZXQgYSBzY2FuICovCitzdGF0 aWMgdm9pZAorSnNvblRhYmxlUmVzZXRDb250ZXh0SXRlbShKc29uVGFibGVTY2FuU3RhdGUgKnNj YW4sIERhdHVtIGl0ZW0pCit7CisJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CisJSnNvblBhdGhFeGVj UmVzdWx0IHJlczsKKwlKc29uYgkgICAqanMgPSAoSnNvbmIgKikgRGF0dW1HZXRKc29uYlAoaXRl bSk7CisKKwlKc29uVmFsdWVMaXN0Q2xlYXIoJnNjYW4tPmZvdW5kKTsKKworCU1lbW9yeUNvbnRl eHRSZXNldE9ubHkoc2Nhbi0+bWN4dCk7CisKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNo VG8oc2Nhbi0+bWN4dCk7CisKKwlyZXMgPSBleGVjdXRlSnNvblBhdGgoc2Nhbi0+cGF0aCwgc2Nh bi0+YXJncywKKwkJCQkJCSAgR2V0SnNvblBhdGhWYXIsIENvdW50SnNvblBhdGhWYXJzLAorCQkJ CQkJICBqcywgc2Nhbi0+ZXJyb3JPbkVycm9yLCAmc2Nhbi0+Zm91bmQsCisJCQkJCQkgIGZhbHNl IC8qIEZJWE1FICovICk7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKworCWlm IChqcGVySXNFcnJvcihyZXMpKQorCXsKKwkJQXNzZXJ0KCFzY2FuLT5lcnJvck9uRXJyb3IpOwor CQlKc29uVmFsdWVMaXN0Q2xlYXIoJnNjYW4tPmZvdW5kKTsJLyogRU1QVFkgT04gRVJST1IgY2Fz ZSAqLworCX0KKworCUpzb25UYWJsZVJlc2NhbihzY2FuKTsKK30KKworLyoKKyAqIEpzb25UYWJs ZVNldERvY3VtZW50CisgKgkJSW5zdGFsbCB0aGUgaW5wdXQgZG9jdW1lbnQKKyAqLworc3RhdGlj IHZvaWQKK0pzb25UYWJsZVNldERvY3VtZW50KFRhYmxlRnVuY1NjYW5TdGF0ZSAqc3RhdGUsIERh dHVtIHZhbHVlKQoreworCUpzb25UYWJsZUV4ZWNDb250ZXh0ICpjeHQgPQorCQlHZXRKc29uVGFi bGVFeGVjQ29udGV4dChzdGF0ZSwgIkpzb25UYWJsZVNldERvY3VtZW50Iik7CisKKwlKc29uVGFi bGVSZXNldENvbnRleHRJdGVtKGN4dC0+cm9vdCwgdmFsdWUpOworfQorCisvKiBSZWN1cnNpdmVs eSByZXNldCBzY2FuIGFuZCBpdHMgY2hpbGQgbm9kZXMgKi8KK3N0YXRpYyB2b2lkCitKc29uVGFi bGVSZXNjYW5SZWN1cnNpdmUoSnNvblRhYmxlUGxhblN0YXRlICogc3RhdGUpCit7CisJaWYgKHN0 YXRlLT50eXBlID09IEpTT05fVEFCTEVfSk9JTl9TVEFURSkKKwl7CisJCUpzb25UYWJsZUpvaW5T dGF0ZSAqam9pbiA9IChKc29uVGFibGVKb2luU3RhdGUgKikgc3RhdGU7CisKKwkJSnNvblRhYmxl UmVzY2FuUmVjdXJzaXZlKGpvaW4tPmxlZnQpOworCQlKc29uVGFibGVSZXNjYW5SZWN1cnNpdmUo am9pbi0+cmlnaHQpOworCQlqb2luLT5hZHZhbmNlUmlnaHQgPSBmYWxzZTsKKwl9CisJZWxzZQor CXsKKwkJSnNvblRhYmxlU2NhblN0YXRlICpzY2FuID0gKEpzb25UYWJsZVNjYW5TdGF0ZSAqKSBz dGF0ZTsKKworCQlBc3NlcnQoc3RhdGUtPnR5cGUgPT0gSlNPTl9UQUJMRV9TQ0FOX1NUQVRFKTsK KwkJSnNvblRhYmxlUmVzY2FuKHNjYW4pOworCQlpZiAoc2Nhbi0+cGxhbi5uZXN0ZWQpCisJCQlK c29uVGFibGVSZXNjYW5SZWN1cnNpdmUoc2Nhbi0+cGxhbi5uZXN0ZWQpOworCX0KK30KKworLyoK KyAqIEZldGNoIG5leHQgcm93IGZyb20gYSBjcm9zcy91bmlvbiBqb2luZWQgc2Nhbi4KKyAqCisg KiBSZXR1cm5zIGZhbHNlIGF0IHRoZSBlbmQgb2YgYSBzY2FuLCB0cnVlIG90aGVyd2lzZS4KKyAq Lworc3RhdGljIGJvb2wKK0pzb25UYWJsZVBsYW5OZXh0Um93KEpzb25UYWJsZVBsYW5TdGF0ZSAq IHN0YXRlKQoreworCUpzb25UYWJsZUpvaW5TdGF0ZSAqam9pbjsKKworCWlmIChzdGF0ZS0+dHlw ZSA9PSBKU09OX1RBQkxFX1NDQU5fU1RBVEUpCisJCXJldHVybiBKc29uVGFibGVTY2FuTmV4dFJv dygoSnNvblRhYmxlU2NhblN0YXRlICopIHN0YXRlKTsKKworCWpvaW4gPSAoSnNvblRhYmxlSm9p blN0YXRlICopIHN0YXRlOworCWlmIChqb2luLT5hZHZhbmNlUmlnaHQpCisJeworCQkvKiBmZXRj aCBuZXh0IGlubmVyIHJvdyAqLworCQlpZiAoSnNvblRhYmxlUGxhbk5leHRSb3coam9pbi0+cmln aHQpKQorCQkJcmV0dXJuIHRydWU7CisKKwkJLyogaW5uZXIgcm93cyBhcmUgZXhoYXVzdGVkICov CisJCWlmIChqb2luLT5jcm9zcykKKwkJCWpvaW4tPmFkdmFuY2VSaWdodCA9IGZhbHNlOyAvKiBu ZXh0IG91dGVyIHJvdyAqLworCQllbHNlCisJCQlyZXR1cm4gZmFsc2U7CQkvKiBlbmQgb2Ygc2Nh biAqLworCX0KKworCXdoaWxlICgham9pbi0+YWR2YW5jZVJpZ2h0KQorCXsKKwkJLyogZmV0Y2gg bmV4dCBvdXRlciByb3cgKi8KKwkJYm9vbAkJbW9yZSA9IEpzb25UYWJsZVBsYW5OZXh0Um93KGpv aW4tPmxlZnQpOworCisJCWlmIChqb2luLT5jcm9zcykKKwkJeworCQkJaWYgKCFtb3JlKQorCQkJ CXJldHVybiBmYWxzZTsJLyogZW5kIG9mIHNjYW4gKi8KKworCQkJSnNvblRhYmxlUmVzY2FuUmVj dXJzaXZlKGpvaW4tPnJpZ2h0KTsKKworCQkJaWYgKCFKc29uVGFibGVQbGFuTmV4dFJvdyhqb2lu LT5yaWdodCkpCisJCQkJY29udGludWU7CQkvKiBuZXh0IG91dGVyIHJvdyAqLworCisJCQlqb2lu LT5hZHZhbmNlUmlnaHQgPSB0cnVlOwkvKiBuZXh0IGlubmVyIHJvdyAqLworCQl9CisJCWVsc2Ug aWYgKCFtb3JlKQorCQl7CisJCQlpZiAoIUpzb25UYWJsZVBsYW5OZXh0Um93KGpvaW4tPnJpZ2h0 KSkKKwkJCQlyZXR1cm4gZmFsc2U7CS8qIGVuZCBvZiBzY2FuICovCisKKwkJCWpvaW4tPmFkdmFu Y2VSaWdodCA9IHRydWU7CS8qIG5leHQgaW5uZXIgcm93ICovCisJCX0KKworCQlicmVhazsKKwl9 CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyogUmVjdXJzaXZlbHkgc2V0ICdyZXNldCcgZmxhZyBv ZiBzY2FuIGFuZCBpdHMgY2hpbGQgbm9kZXMgKi8KK3N0YXRpYyB2b2lkCitKc29uVGFibGVQbGFu UmVzZXQoSnNvblRhYmxlUGxhblN0YXRlICogc3RhdGUpCit7CisJaWYgKHN0YXRlLT50eXBlID09 IEpTT05fVEFCTEVfSk9JTl9TVEFURSkKKwl7CisJCUpzb25UYWJsZUpvaW5TdGF0ZSAqam9pbiA9 IChKc29uVGFibGVKb2luU3RhdGUgKikgc3RhdGU7CisKKwkJSnNvblRhYmxlUGxhblJlc2V0KGpv aW4tPmxlZnQpOworCQlKc29uVGFibGVQbGFuUmVzZXQoam9pbi0+cmlnaHQpOworCQlqb2luLT5h ZHZhbmNlUmlnaHQgPSBmYWxzZTsKKwl9CisJZWxzZQorCXsKKwkJSnNvblRhYmxlU2NhblN0YXRl ICpzY2FuOworCisJCUFzc2VydChzdGF0ZS0+dHlwZSA9PSBKU09OX1RBQkxFX1NDQU5fU1RBVEUp OworCQlzY2FuID0gKEpzb25UYWJsZVNjYW5TdGF0ZSAqKSBzdGF0ZTsKKwkJc2Nhbi0+cmVzZXQg PSB0cnVlOworCQlzY2FuLT5hZHZhbmNlTmVzdGVkID0gZmFsc2U7CisKKwkJaWYgKHNjYW4tPnBs YW4ubmVzdGVkKQorCQkJSnNvblRhYmxlUGxhblJlc2V0KHNjYW4tPnBsYW4ubmVzdGVkKTsKKwl9 Cit9CisKKy8qCisgKiBGZXRjaCBuZXh0IHJvdyBmcm9tIGEgc2ltcGxlIHNjYW4gd2l0aCBvdXRl ci9pbm5lciBqb2luZWQgbmVzdGVkIHN1YnNjYW5zLgorICoKKyAqIFJldHVybnMgZmFsc2UgYXQg dGhlIGVuZCBvZiBhIHNjYW4sIHRydWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbAorSnNv blRhYmxlU2Nhbk5leHRSb3coSnNvblRhYmxlU2NhblN0YXRlICpzY2FuKQoreworCS8qIHJlc2V0 IGNvbnRleHQgaXRlbSBpZiByZXF1ZXN0ZWQgKi8KKwlpZiAoc2Nhbi0+cmVzZXQpCisJeworCQlK c29uVGFibGVTY2FuU3RhdGUgKnBhcmVudF9zY2FuID0KKwkJCShKc29uVGFibGVTY2FuU3RhdGUg Kikgc2Nhbi0+cGxhbi5wYXJlbnQ7CisKKwkJQXNzZXJ0KHBhcmVudF9zY2FuICYmICFwYXJlbnRf c2Nhbi0+Y3VycmVudElzTnVsbCk7CisJCUpzb25UYWJsZVJlc2V0Q29udGV4dEl0ZW0oc2Nhbiwg cGFyZW50X3NjYW4tPmN1cnJlbnQpOworCQlzY2FuLT5yZXNldCA9IGZhbHNlOworCX0KKworCWlm IChzY2FuLT5hZHZhbmNlTmVzdGVkKQorCXsKKwkJLyogZmV0Y2ggbmV4dCBuZXN0ZWQgcm93ICov CisJCXNjYW4tPmFkdmFuY2VOZXN0ZWQgPSBKc29uVGFibGVQbGFuTmV4dFJvdyhzY2FuLT5wbGFu Lm5lc3RlZCk7CisKKwkJaWYgKHNjYW4tPmFkdmFuY2VOZXN0ZWQpCisJCQlyZXR1cm4gdHJ1ZTsK Kwl9CisKKwlmb3IgKDs7KQorCXsKKwkJLyogZmV0Y2ggbmV4dCByb3cgKi8KKwkJSnNvbmJWYWx1 ZSAqamJ2ID0gSnNvblZhbHVlTGlzdE5leHQoJnNjYW4tPmZvdW5kLCAmc2Nhbi0+aXRlcik7CisJ CU1lbW9yeUNvbnRleHQgb2xkY3h0OworCisJCWlmICghamJ2KQorCQl7CisJCQlzY2FuLT5jdXJy ZW50ID0gUG9pbnRlckdldERhdHVtKE5VTEwpOworCQkJc2Nhbi0+Y3VycmVudElzTnVsbCA9IHRy dWU7CisJCQlyZXR1cm4gZmFsc2U7CQkvKiBlbmQgb2Ygc2NhbiAqLworCQl9CisKKwkJLyogc2V0 IGN1cnJlbnQgcm93IGl0ZW0gKi8KKwkJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHNj YW4tPm1jeHQpOworCQlzY2FuLT5jdXJyZW50ID0gSnNvbmJQR2V0RGF0dW0oSnNvbmJWYWx1ZVRv SnNvbmIoamJ2KSk7CisJCXNjYW4tPmN1cnJlbnRJc051bGwgPSBmYWxzZTsKKwkJTWVtb3J5Q29u dGV4dFN3aXRjaFRvKG9sZGN4dCk7CisKKwkJc2Nhbi0+b3JkaW5hbCsrOworCisJCWlmICghc2Nh bi0+cGxhbi5uZXN0ZWQpCisJCQlicmVhazsKKworCQlKc29uVGFibGVQbGFuUmVzZXQoc2Nhbi0+ cGxhbi5uZXN0ZWQpOworCisJCXNjYW4tPmFkdmFuY2VOZXN0ZWQgPSBKc29uVGFibGVQbGFuTmV4 dFJvdyhzY2FuLT5wbGFuLm5lc3RlZCk7CisKKwkJaWYgKHNjYW4tPmFkdmFuY2VOZXN0ZWQgfHwg c2Nhbi0+b3V0ZXJKb2luKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8q CisgKiBKc29uVGFibGVGZXRjaFJvdworICoJCVByZXBhcmUgdGhlIG5leHQgImN1cnJlbnQiIHR1 cGxlIGZvciB1cGNvbWluZyBHZXRWYWx1ZSBjYWxscy4KKyAqCQlSZXR1cm5zIGZhbHNlIGlmIG5v IG1vcmUgcm93cyBjYW4gYmUgcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBib29sCitKc29uVGFibGVG ZXRjaFJvdyhUYWJsZUZ1bmNTY2FuU3RhdGUgKnN0YXRlKQoreworCUpzb25UYWJsZUV4ZWNDb250 ZXh0ICpjeHQgPQorCQlHZXRKc29uVGFibGVFeGVjQ29udGV4dChzdGF0ZSwgIkpzb25UYWJsZUZl dGNoUm93Iik7CisKKwlyZXR1cm4gSnNvblRhYmxlU2Nhbk5leHRSb3coY3h0LT5yb290KTsKK30K KworLyoKKyAqIEpzb25UYWJsZUdldFZhbHVlCisgKgkJUmV0dXJuIHRoZSB2YWx1ZSBmb3IgY29s dW1uIG51bWJlciAnY29sbnVtJyBmb3IgdGhlIGN1cnJlbnQgcm93LgorICoKKyAqIFRoaXMgbGVh a3MgbWVtb3J5LCBzbyBiZSBzdXJlIHRvIHJlc2V0IG9mdGVuIHRoZSBjb250ZXh0IGluIHdoaWNo IGl0J3MKKyAqIGNhbGxlZC4KKyAqLworc3RhdGljIERhdHVtCitKc29uVGFibGVHZXRWYWx1ZShU YWJsZUZ1bmNTY2FuU3RhdGUgKnN0YXRlLCBpbnQgY29sbnVtLAorCQkJCSAgT2lkIHR5cGlkLCBp bnQzMiB0eXBtb2QsIGJvb2wgKmlzbnVsbCkKK3sKKwlKc29uVGFibGVFeGVjQ29udGV4dCAqY3h0 ID0KKwkJR2V0SnNvblRhYmxlRXhlY0NvbnRleHQoc3RhdGUsICJKc29uVGFibGVHZXRWYWx1ZSIp OworCUV4cHJDb250ZXh0ICplY29udGV4dCA9IHN0YXRlLT5zcy5wcy5wc19FeHByQ29udGV4dDsK KwlFeHByU3RhdGUgICplc3RhdGUgPSBsaXN0X250aChzdGF0ZS0+Y29sdmFsZXhwcnMsIGNvbG51 bSk7CisJSnNvblRhYmxlU2NhblN0YXRlICpzY2FuID0gY3h0LT5jb2xleHByc2NhbnNbY29sbnVt XTsKKwlEYXR1bQkJcmVzdWx0OworCisJaWYgKHNjYW4tPmN1cnJlbnRJc051bGwpCS8qIE5VTEwg ZnJvbSBvdXRlci91bmlvbiBqb2luICovCisJeworCQlyZXN1bHQgPSAoRGF0dW0pIDA7CisJCSpp c251bGwgPSB0cnVlOworCX0KKwllbHNlIGlmIChlc3RhdGUpCQkJLyogcmVndWxhciBjb2x1bW4g Ki8KKwl7CisJCURhdHVtCQlzYXZlZF9jYXNlVmFsdWUgPSBlY29udGV4dC0+Y2FzZVZhbHVlX2Rh dHVtOworCQlib29sCQlzYXZlZF9jYXNlSXNOdWxsID0gZWNvbnRleHQtPmNhc2VWYWx1ZV9pc051 bGw7CisKKwkJLyogUGFzcyB0aGUgdmFsdWUgZm9yIENhc2VUZXN0RXhwciB0aGF0IG1heSBiZSBw cmVzZW50IGluIGNvbGV4cHIgKi8KKwkJZWNvbnRleHQtPmNhc2VWYWx1ZV9kYXR1bSA9IHNjYW4t PmN1cnJlbnQ7CisJCWVjb250ZXh0LT5jYXNlVmFsdWVfaXNOdWxsID0gZmFsc2U7CisKKwkJcmVz dWx0ID0gRXhlY0V2YWxFeHByKGVzdGF0ZSwgZWNvbnRleHQsIGlzbnVsbCk7CisKKwkJZWNvbnRl eHQtPmNhc2VWYWx1ZV9kYXR1bSA9IHNhdmVkX2Nhc2VWYWx1ZTsKKwkJZWNvbnRleHQtPmNhc2VW YWx1ZV9pc051bGwgPSBzYXZlZF9jYXNlSXNOdWxsOworCX0KKwllbHNlCisJeworCQlyZXN1bHQg PSBJbnQzMkdldERhdHVtKHNjYW4tPm9yZGluYWwpOwkvKiBvcmRpbmFsaXR5IGNvbHVtbiAqLwor CQkqaXNudWxsID0gZmFsc2U7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEpz b25UYWJsZURlc3Ryb3lPcGFxdWUKKyAqLworc3RhdGljIHZvaWQKK0pzb25UYWJsZURlc3Ryb3lP cGFxdWUoVGFibGVGdW5jU2NhblN0YXRlICpzdGF0ZSkKK3sKKwlKc29uVGFibGVFeGVjQ29udGV4 dCAqY3h0ID0KKwkJR2V0SnNvblRhYmxlRXhlY0NvbnRleHQoc3RhdGUsICJKc29uVGFibGVEZXN0 cm95T3BhcXVlIik7CisKKwkvKiBub3QgdmFsaWQgYW55bW9yZSAqLworCWN4dC0+bWFnaWMgPSAw OworCisJc3RhdGUtPm9wYXF1ZSA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvcnVsZXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMK aW5kZXggMjczNTM0ODQxNi4uYTI3YzdhMzUwZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3J1bGV1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMu YwpAQCAtNTIyLDYgKzUyMiw4IEBAIHN0YXRpYyBjaGFyICpmbGF0dGVuX3JlbG9wdGlvbnMoT2lk IHJlbGlkKTsKIHN0YXRpYyB2b2lkIGdldF9yZWxvcHRpb25zKFN0cmluZ0luZm8gYnVmLCBEYXR1 bSByZWxvcHRpb25zKTsKIHN0YXRpYyB2b2lkIGdldF9qc29uX3BhdGhfc3BlYyhOb2RlICpwYXRo X3NwZWMsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkgICBib29sIHNob3dpbXBs aWNpdCk7CitzdGF0aWMgdm9pZCBnZXRfanNvbl90YWJsZV9jb2x1bW5zKFRhYmxlRnVuYyAqdGYs IEpzb25UYWJsZVBsYW4gKm5vZGUsCisJCQkJCQkJCSAgIGRlcGFyc2VfY29udGV4dCAqY29udGV4 dCwgYm9vbCBzaG93aW1wbGljaXQpOwogCiAjZGVmaW5lIG9ubHlfbWFya2VyKHJ0ZSkgICgocnRl KS0+aW5oID8gIiIgOiAiT05MWSAiKQogCkBAIC04NjI3LDcgKzg2MjksOCBAQCBnZXRfanNvbl9i ZWhhdmlvcihKc29uQmVoYXZpb3IgKmJlaGF2aW9yLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQs CiAvKgogICogZ2V0X2pzb25fZXhwcl9vcHRpb25zCiAgKgotICogUGFyc2UgYmFjayBjb21tb24g b3B0aW9ucyBmb3IgSlNPTl9RVUVSWSwgSlNPTl9WQUxVRSwgSlNPTl9FWElTVFMuCisgKiBQYXJz ZSBiYWNrIGNvbW1vbiBvcHRpb25zIGZvciBKU09OX1FVRVJZLCBKU09OX1ZBTFVFLCBKU09OX0VY SVNUUyBhbmQKKyAqIEpTT05fVEFCTEUgY29sdW1ucy4KICAqLwogc3RhdGljIHZvaWQKIGdldF9q c29uX2V4cHJfb3B0aW9ucyhKc29uRXhwciAqanNleHByLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRl eHQsCkBAIC05ODc0LDYgKzk4NzcsOSBAQCBnZXRfcnVsZV9leHByKE5vZGUgKm5vZGUsIGRlcGFy c2VfY29udGV4dCAqY29udGV4dCwKIAkJCQkJY2FzZSBKU09OX1ZBTFVFX09QOgogCQkJCQkJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJKU09OX1ZBTFVFKCIpOwogCQkJCQkJYnJlYWs7CisJ CQkJCWRlZmF1bHQ6CisJCQkJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBKc29uRXhwciB0eXBl OiAlZCIsIGpleHByLT5vcCk7CisJCQkJCQlicmVhazsKIAkJCQl9CiAKIAkJCQlnZXRfcnVsZV9l eHByKGpleHByLT5mb3JtYXR0ZWRfZXhwciwgY29udGV4dCwgc2hvd2ltcGxpY2l0KTsKQEAgLTEx MjQwLDE2ICsxMTI0NiwxNCBAQCBnZXRfc3VibGlua19leHByKFN1YkxpbmsgKnN1YmxpbmssIGRl cGFyc2VfY29udGV4dCAqY29udGV4dCkKIAogCiAvKiAtLS0tLS0tLS0tCi0gKiBnZXRfdGFibGVm dW5jCQkJLSBQYXJzZSBiYWNrIGEgdGFibGUgZnVuY3Rpb24KKyAqIGdldF94bWx0YWJsZQkJCS0g UGFyc2UgYmFjayBhIFhNTFRBQkxFIGZ1bmN0aW9uCiAgKiAtLS0tLS0tLS0tCiAgKi8KIHN0YXRp YyB2b2lkCi1nZXRfdGFibGVmdW5jKFRhYmxlRnVuYyAqdGYsIGRlcGFyc2VfY29udGV4dCAqY29u dGV4dCwgYm9vbCBzaG93aW1wbGljaXQpCitnZXRfeG1sdGFibGUoVGFibGVGdW5jICp0ZiwgZGVw YXJzZV9jb250ZXh0ICpjb250ZXh0LCBib29sIHNob3dpbXBsaWNpdCkKIHsKIAlTdHJpbmdJbmZv CWJ1ZiA9IGNvbnRleHQtPmJ1ZjsKIAotCS8qIFhNTFRBQkxFIGlzIHRoZSBvbmx5IGV4aXN0aW5n IGltcGxlbWVudGF0aW9uLiAgKi8KLQogCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiWE1M VEFCTEUoIik7CiAKIAlpZiAodGYtPm5zX3VyaXMgIT0gTklMKQpAQCAtMTEzNDAsNiArMTEzNDQs MjcxIEBAIGdldF90YWJsZWZ1bmMoVGFibGVGdW5jICp0ZiwgZGVwYXJzZV9jb250ZXh0ICpjb250 ZXh0LCBib29sIHNob3dpbXBsaWNpdCkKIAlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcpJyk7 CiB9CiAKKy8qCisgKiBnZXRfanNvbl9uZXN0ZWRfY29sdW1ucyAtIFBhcnNlIGJhY2sgbmVzdGVk IEpTT05fVEFCTEUgY29sdW1ucworICovCitzdGF0aWMgdm9pZAorZ2V0X2pzb25fdGFibGVfbmVz dGVkX2NvbHVtbnMoVGFibGVGdW5jICp0ZiwgTm9kZSAqbm9kZSwKKwkJCQkJCQkgIGRlcGFyc2Vf Y29udGV4dCAqY29udGV4dCwgYm9vbCBzaG93aW1wbGljaXQsCisJCQkJCQkJICBib29sIG5lZWRj b21tYSkKK3sKKwlpZiAoSXNBKG5vZGUsIEpzb25UYWJsZVNpYmxpbmcpKQorCXsKKwkJSnNvblRh YmxlU2libGluZyAqbiA9IChKc29uVGFibGVTaWJsaW5nICopIG5vZGU7CisKKwkJZ2V0X2pzb25f dGFibGVfbmVzdGVkX2NvbHVtbnModGYsIG4tPmxhcmcsIGNvbnRleHQsIHNob3dpbXBsaWNpdCwK KwkJCQkJCQkJCSAgbmVlZGNvbW1hKTsKKwkJZ2V0X2pzb25fdGFibGVfbmVzdGVkX2NvbHVtbnMo dGYsIG4tPnJhcmcsIGNvbnRleHQsIHNob3dpbXBsaWNpdCwgdHJ1ZSk7CisJfQorCWVsc2UKKwl7 CisJCUpzb25UYWJsZVBsYW4gKm4gPSBjYXN0Tm9kZShKc29uVGFibGVQbGFuLCBub2RlKTsKKwor CQlpZiAobmVlZGNvbW1hKQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAn LCcpOworCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJYXBw ZW5kQ29udGV4dEtleXdvcmQoY29udGV4dCwgIk5FU1RFRCBQQVRIICIsIDAsIDAsIDApOworCQln ZXRfY29uc3RfZXhwcihuLT5wYXRoLT52YWx1ZSwgY29udGV4dCwgLTEpOworCQlhcHBlbmRTdHJp bmdJbmZvKGNvbnRleHQtPmJ1ZiwgIiBBUyAlcyIsIHF1b3RlX2lkZW50aWZpZXIobi0+cGF0aC0+ bmFtZSkpOworCQlnZXRfanNvbl90YWJsZV9jb2x1bW5zKHRmLCBuLCBjb250ZXh0LCBzaG93aW1w bGljaXQpOworCX0KK30KKworLyoKKyAqIGdldF9qc29uX3RhYmxlX3BsYW4gLSBQYXJzZSBiYWNr IGEgSlNPTl9UQUJMRSBwbGFuCisgKi8KK3N0YXRpYyB2b2lkCitnZXRfanNvbl90YWJsZV9wbGFu KFRhYmxlRnVuYyAqdGYsIE5vZGUgKm5vZGUsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKKwkJ CQkJYm9vbCBwYXJlbnRoZXNpemUpCit7CisJaWYgKHBhcmVudGhlc2l6ZSkKKwkJYXBwZW5kU3Ry aW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKCcpOworCisJaWYgKElzQShub2RlLCBKc29uVGFi bGVTaWJsaW5nKSkKKwl7CisJCUpzb25UYWJsZVNpYmxpbmcgKm4gPSAoSnNvblRhYmxlU2libGlu ZyAqKSBub2RlOworCisJCWdldF9qc29uX3RhYmxlX3BsYW4odGYsIG4tPmxhcmcsIGNvbnRleHQs CisJCQkJCQkJSXNBKG4tPmxhcmcsIEpzb25UYWJsZVNpYmxpbmcpIHx8CisJCQkJCQkJY2FzdE5v ZGUoSnNvblRhYmxlUGxhbiwgbi0+bGFyZyktPmNoaWxkKTsKKworCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKGNvbnRleHQtPmJ1Ziwgbi0+Y3Jvc3MgPyAiIENST1NTICIgOiAiIFVOSU9OICIpOwor CisJCWdldF9qc29uX3RhYmxlX3BsYW4odGYsIG4tPnJhcmcsIGNvbnRleHQsCisJCQkJCQkJSXNB KG4tPnJhcmcsIEpzb25UYWJsZVNpYmxpbmcpIHx8CisJCQkJCQkJY2FzdE5vZGUoSnNvblRhYmxl UGxhbiwgbi0+cmFyZyktPmNoaWxkKTsKKwl9CisJZWxzZQorCXsKKwkJSnNvblRhYmxlUGxhbiAq biA9IGNhc3ROb2RlKEpzb25UYWJsZVBsYW4sIG5vZGUpOworCisJCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoY29udGV4dC0+YnVmLCBxdW90ZV9pZGVudGlmaWVyKG4tPnBhdGgtPm5hbWUpKTsKKwor CQlpZiAobi0+Y2hpbGQpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoY29udGV4dC0+ YnVmLAorCQkJCQkJCQkgICBuLT5vdXRlckpvaW4gPyAiIE9VVEVSICIgOiAiIElOTkVSICIpOwor CQkJZ2V0X2pzb25fdGFibGVfcGxhbih0Ziwgbi0+Y2hpbGQsIGNvbnRleHQsCisJCQkJCQkJCUlz QShuLT5jaGlsZCwgSnNvblRhYmxlU2libGluZykpOworCQl9CisJfQorCisJaWYgKHBhcmVudGhl c2l6ZSkKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworfQorCisv KgorICogZ2V0X2pzb25fdGFibGVfY29sdW1ucyAtIFBhcnNlIGJhY2sgSlNPTl9UQUJMRSBjb2x1 bW5zCisgKi8KK3N0YXRpYyB2b2lkCitnZXRfanNvbl90YWJsZV9jb2x1bW5zKFRhYmxlRnVuYyAq dGYsIEpzb25UYWJsZVBsYW4gKnBsYW4sCisJCQkJCSAgIGRlcGFyc2VfY29udGV4dCAqY29udGV4 dCwgYm9vbCBzaG93aW1wbGljaXQpCit7CisJU3RyaW5nSW5mbwlidWYgPSBjb250ZXh0LT5idWY7 CisJSnNvbkV4cHIgICAqamV4cHIgPSBjYXN0Tm9kZShKc29uRXhwciwgdGYtPmRvY2V4cHIpOwor CUxpc3RDZWxsICAgKmxjX2NvbG5hbWU7CisJTGlzdENlbGwgICAqbGNfY29sdHlwZTsKKwlMaXN0 Q2VsbCAgICpsY19jb2x0eXBtb2Q7CisJTGlzdENlbGwgICAqbGNfY29sdmFsZXhwcjsKKwlpbnQJ CQljb2xudW0gPSAwOworCisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnICcpOworCWFwcGVu ZENvbnRleHRLZXl3b3JkKGNvbnRleHQsICJDT0xVTU5TICgiLCAwLCAwLCAwKTsKKworCWlmIChQ UkVUVFlfSU5ERU5UKGNvbnRleHQpKQorCQljb250ZXh0LT5pbmRlbnRMZXZlbCArPSBQUkVUVFlJ TkRFTlRfVkFSOworCisJZm9yZm91cihsY19jb2xuYW1lLCB0Zi0+Y29sbmFtZXMsCisJCQlsY19j b2x0eXBlLCB0Zi0+Y29sdHlwZXMsCisJCQlsY19jb2x0eXBtb2QsIHRmLT5jb2x0eXBtb2RzLAor CQkJbGNfY29sdmFsZXhwciwgdGYtPmNvbHZhbGV4cHJzKQorCXsKKwkJY2hhcgkgICAqY29sbmFt ZSA9IHN0clZhbChsZmlyc3QobGNfY29sbmFtZSkpOworCQlKc29uRXhwciAgICpjb2xleHByOwor CQlPaWQJCQl0eXBpZDsKKwkJaW50MzIJCXR5cG1vZDsKKwkJYm9vbAkJb3JkaW5hbGl0eTsKKwkJ SnNvbkJlaGF2aW9yVHlwZSBkZWZhdWx0X2JlaGF2aW9yOworCisJCXR5cGlkID0gbGZpcnN0X29p ZChsY19jb2x0eXBlKTsKKwkJdHlwbW9kID0gbGZpcnN0X2ludChsY19jb2x0eXBtb2QpOworCQlj b2xleHByID0gY2FzdE5vZGUoSnNvbkV4cHIsIGxmaXJzdChsY19jb2x2YWxleHByKSk7CisKKwkJ aWYgKGNvbG51bSA8IHBsYW4tPmNvbE1pbikKKwkJeworCQkJY29sbnVtKys7CisJCQljb250aW51 ZTsKKwkJfQorCisJCWlmIChjb2xudW0gPiBwbGFuLT5jb2xNYXgpCisJCQlicmVhazsKKworCQlp ZiAoY29sbnVtID4gcGxhbi0+Y29sTWluKQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYs ICIsICIpOworCisJCWNvbG51bSsrOworCisJCW9yZGluYWxpdHkgPSAhY29sZXhwcjsKKworCQlh cHBlbmRDb250ZXh0S2V5d29yZChjb250ZXh0LCAiIiwgMCwgMCwgMCk7CisKKwkJYXBwZW5kU3Ry aW5nSW5mbyhidWYsICIlcyAlcyIsIHF1b3RlX2lkZW50aWZpZXIoY29sbmFtZSksCisJCQkJCQkg b3JkaW5hbGl0eSA/ICJGT1IgT1JESU5BTElUWSIgOgorCQkJCQkJIGZvcm1hdF90eXBlX3dpdGhf dHlwZW1vZCh0eXBpZCwgdHlwbW9kKSk7CisJCWlmIChvcmRpbmFsaXR5KQorCQkJY29udGludWU7 CisKKwkJaWYgKGNvbGV4cHItPm9wID09IEpTT05fRVhJU1RTX09QKQorCQl7CisJCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiBFWElTVFMiKTsKKwkJCWRlZmF1bHRfYmVoYXZpb3IgPSBK U09OX0JFSEFWSU9SX0ZBTFNFOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKGNvbGV4cHItPm9w ID09IEpTT05fUVVFUllfT1ApCisJCQl7CisJCQkJY2hhcgkJdHlwY2F0ZWdvcnk7CisJCQkJYm9v bAkJdHlwaXNwcmVmZXJyZWQ7CisKKwkJCQlnZXRfdHlwZV9jYXRlZ29yeV9wcmVmZXJyZWQodHlw aWQsICZ0eXBjYXRlZ29yeSwgJnR5cGlzcHJlZmVycmVkKTsKKworCQkJCWlmICh0eXBjYXRlZ29y eSA9PSBUWVBDQVRFR09SWV9TVFJJTkcpCisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVm LAorCQkJCQkJCQkJCSAgIGNvbGV4cHItPmZvcm1hdC0+Zm9ybWF0X3R5cGUgPT0gSlNfRk9STUFU X0pTT05CID8KKwkJCQkJCQkJCQkgICAiIEZPUk1BVCBKU09OQiIgOiAiIEZPUk1BVCBKU09OIik7 CisJCQl9CisKKwkJCWRlZmF1bHRfYmVoYXZpb3IgPSBKU09OX0JFSEFWSU9SX05VTEw7CisJCX0K KworCQlpZiAoamV4cHItPm9uX2Vycm9yLT5idHlwZSA9PSBKU09OX0JFSEFWSU9SX0VSUk9SKQor CQkJZGVmYXVsdF9iZWhhdmlvciA9IEpTT05fQkVIQVZJT1JfRVJST1I7CisKKwkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZyhidWYsICIgUEFUSCAiKTsKKworCQlnZXRfanNvbl9wYXRoX3NwZWMoY29s ZXhwci0+cGF0aF9zcGVjLCBjb250ZXh0LCBzaG93aW1wbGljaXQpOworCisJCWdldF9qc29uX2V4 cHJfb3B0aW9ucyhjb2xleHByLCBjb250ZXh0LCBkZWZhdWx0X2JlaGF2aW9yKTsKKwl9CisKKwlp ZiAocGxhbi0+Y2hpbGQpCisJCWdldF9qc29uX3RhYmxlX25lc3RlZF9jb2x1bW5zKHRmLCBwbGFu LT5jaGlsZCwgY29udGV4dCwgc2hvd2ltcGxpY2l0LAorCQkJCQkJCQkJICBwbGFuLT5jb2xNYXgg Pj0gcGxhbi0+Y29sTWluKTsKKworCWlmIChQUkVUVFlfSU5ERU5UKGNvbnRleHQpKQorCQljb250 ZXh0LT5pbmRlbnRMZXZlbCAtPSBQUkVUVFlJTkRFTlRfVkFSOworCisJYXBwZW5kQ29udGV4dEtl eXdvcmQoY29udGV4dCwgIikiLCAwLCAwLCAwKTsKK30KKworLyogLS0tLS0tLS0tLQorICogZ2V0 X2pzb25fdGFibGUJCQktIFBhcnNlIGJhY2sgYSBKU09OX1RBQkxFIGZ1bmN0aW9uCisgKiAtLS0t LS0tLS0tCisgKi8KK3N0YXRpYyB2b2lkCitnZXRfanNvbl90YWJsZShUYWJsZUZ1bmMgKnRmLCBk ZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsIGJvb2wgc2hvd2ltcGxpY2l0KQoreworCVN0cmluZ0lu Zm8JYnVmID0gY29udGV4dC0+YnVmOworCUpzb25FeHByICAgKmpleHByID0gY2FzdE5vZGUoSnNv bkV4cHIsIHRmLT5kb2NleHByKTsKKwlKc29uVGFibGVQbGFuICpyb290ID0gY2FzdE5vZGUoSnNv blRhYmxlUGxhbiwgdGYtPnBsYW4pOworCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJK U09OX1RBQkxFKCIpOworCisJaWYgKFBSRVRUWV9JTkRFTlQoY29udGV4dCkpCisJCWNvbnRleHQt PmluZGVudExldmVsICs9IFBSRVRUWUlOREVOVF9WQVI7CisKKwlhcHBlbmRDb250ZXh0S2V5d29y ZChjb250ZXh0LCAiIiwgMCwgMCwgMCk7CisKKwlnZXRfcnVsZV9leHByKGpleHByLT5mb3JtYXR0 ZWRfZXhwciwgY29udGV4dCwgc2hvd2ltcGxpY2l0KTsKKworCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoYnVmLCAiLCAiKTsKKworCWdldF9jb25zdF9leHByKHJvb3QtPnBhdGgtPnZhbHVlLCBjb250 ZXh0LCAtMSk7CisKKwlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBBUyAlcyIsIHF1b3RlX2lkZW50 aWZpZXIocm9vdC0+cGF0aC0+bmFtZSkpOworCisJaWYgKGpleHByLT5wYXNzaW5nX3ZhbHVlcykK Kwl7CisJCUxpc3RDZWxsICAgKmxjMSwKKwkJCQkgICAqbGMyOworCQlib29sCQluZWVkY29tbWEg PSBmYWxzZTsKKworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcgJyk7CisJCWFwcGVuZENv bnRleHRLZXl3b3JkKGNvbnRleHQsICJQQVNTSU5HICIsIDAsIDAsIDApOworCisJCWlmIChQUkVU VFlfSU5ERU5UKGNvbnRleHQpKQorCQkJY29udGV4dC0+aW5kZW50TGV2ZWwgKz0gUFJFVFRZSU5E RU5UX1ZBUjsKKworCQlmb3Jib3RoKGxjMSwgamV4cHItPnBhc3NpbmdfbmFtZXMsCisJCQkJbGMy LCBqZXhwci0+cGFzc2luZ192YWx1ZXMpCisJCXsKKwkJCWlmIChuZWVkY29tbWEpCisJCQkJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIsICIpOworCQkJbmVlZGNvbW1hID0gdHJ1ZTsKKwor CQkJYXBwZW5kQ29udGV4dEtleXdvcmQoY29udGV4dCwgIiIsIDAsIDAsIDApOworCisJCQlnZXRf cnVsZV9leHByKChOb2RlICopIGxmaXJzdChsYzIpLCBjb250ZXh0LCBmYWxzZSk7CisJCQlhcHBl bmRTdHJpbmdJbmZvKGJ1ZiwgIiBBUyAlcyIsCisJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoKGxm aXJzdF9ub2RlKFN0cmluZywgbGMxKSktPnN2YWwpCisJCQkJKTsKKwkJfQorCisJCWlmIChQUkVU VFlfSU5ERU5UKGNvbnRleHQpKQorCQkJY29udGV4dC0+aW5kZW50TGV2ZWwgLT0gUFJFVFRZSU5E RU5UX1ZBUjsKKwl9CisKKwlnZXRfanNvbl90YWJsZV9jb2x1bW5zKHRmLCByb290LCBjb250ZXh0 LCBzaG93aW1wbGljaXQpOworCisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnICcpOworCWFw cGVuZENvbnRleHRLZXl3b3JkKGNvbnRleHQsICJQTEFOICIsIDAsIDAsIDApOworCWdldF9qc29u X3RhYmxlX3BsYW4odGYsIChOb2RlICopIHJvb3QsIGNvbnRleHQsIHRydWUpOworCisJaWYgKGpl eHByLT5vbl9lcnJvci0+YnR5cGUgIT0gSlNPTl9CRUhBVklPUl9FTVBUWSkKKwkJZ2V0X2pzb25f YmVoYXZpb3IoamV4cHItPm9uX2Vycm9yLCBjb250ZXh0LCAiRVJST1IiKTsKKworCWlmIChQUkVU VFlfSU5ERU5UKGNvbnRleHQpKQorCQljb250ZXh0LT5pbmRlbnRMZXZlbCAtPSBQUkVUVFlJTkRF TlRfVkFSOworCisJYXBwZW5kQ29udGV4dEtleXdvcmQoY29udGV4dCwgIikiLCAwLCAwLCAwKTsK K30KKworLyogLS0tLS0tLS0tLQorICogZ2V0X3RhYmxlZnVuYwkJCS0gUGFyc2UgYmFjayBhIHRh YmxlIGZ1bmN0aW9uCisgKiAtLS0tLS0tLS0tCisgKi8KK3N0YXRpYyB2b2lkCitnZXRfdGFibGVm dW5jKFRhYmxlRnVuYyAqdGYsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwgYm9vbCBzaG93aW1w bGljaXQpCit7CisJLyogWE1MVEFCTEUgYW5kIEpTT05fVEFCTEUgYXJlIHRoZSBvbmx5IGV4aXN0 aW5nIGltcGxlbWVudGF0aW9ucy4gICovCisKKwlpZiAodGYtPmZ1bmN0eXBlID09IFRGVF9YTUxU QUJMRSkKKwkJZ2V0X3htbHRhYmxlKHRmLCBjb250ZXh0LCBzaG93aW1wbGljaXQpOworCWVsc2Ug aWYgKHRmLT5mdW5jdHlwZSA9PSBURlRfSlNPTl9UQUJMRSkKKwkJZ2V0X2pzb25fdGFibGUodGYs IGNvbnRleHQsIHNob3dpbXBsaWNpdCk7Cit9CisKIC8qIC0tLS0tLS0tLS0KICAqIGdldF9mcm9t X2NsYXVzZQkJCS0gUGFyc2UgYmFjayBhIEZST00gY2xhdXNlCiAgKgpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMu aAppbmRleCAxOTYxZDllMGFhLi5lZWRhMDJlN2FjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9u b2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAt MTk2OSw2ICsxOTY5LDggQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVGdW5jU2NhblN0YXRlCiAJRXhw clN0YXRlICAqcm93ZXhwcjsJCS8qIHN0YXRlIGZvciByb3ctZ2VuZXJhdGluZyBleHByZXNzaW9u ICovCiAJTGlzdAkgICAqY29sZXhwcnM7CQkvKiBzdGF0ZSBmb3IgY29sdW1uLWdlbmVyYXRpbmcg ZXhwcmVzc2lvbiAqLwogCUxpc3QJICAgKmNvbGRlZmV4cHJzOwkvKiBzdGF0ZSBmb3IgY29sdW1u IGRlZmF1bHQgZXhwcmVzc2lvbnMgKi8KKwlMaXN0CSAgICpjb2x2YWxleHByczsJLyogc3RhdGUg Zm9yIGNvbHVtbiB2YWx1ZSBleHByZXNzaW9uICovCisJTGlzdAkgICAqcGFzc2luZ3ZhbGV4cHJz OwkvKiBzdGF0ZSBmb3IgUEFTU0lORyBhcmd1bWVudCBleHByZXNzaW9uICovCiAJTGlzdAkgICAq bnNfbmFtZXM7CQkvKiBzYW1lIGFzIFRhYmxlRnVuYy5uc19uYW1lcyAqLwogCUxpc3QJICAgKm5z X3VyaXM7CQkvKiBsaXN0IG9mIHN0YXRlcyBvZiBuYW1lc3BhY2UgVVJJIGV4cHJzICovCiAJQml0 bWFwc2V0ICAqbm90bnVsbHM7CQkvKiBudWxsYWJpbGl0eSBmbGFnIGZvciBlYWNoIG91dHB1dCBj b2x1bW4gKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL21ha2VmdW5jcy5oIGIvc3Jj L2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKaW5kZXggOTFkOTVmYzUyYi4uNmQyMTA2ODRhOCAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKKysrIGIvc3JjL2luY2x1 ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKQEAgLTEwMCw2ICsxMDAsNyBAQCBleHRlcm4gSW5kZXhJbmZv ICptYWtlSW5kZXhJbmZvKGludCBudW1hdHRycywgaW50IG51bWtleWF0dHJzLCBPaWQgYW1vaWQs CiAJCQkJCQkJCWJvb2wgaXNyZWFkeSwgYm9vbCBjb25jdXJyZW50LAogCQkJCQkJCQlib29sIHN1 bW1hcml6aW5nKTsKIAorZXh0ZXJuIE5vZGUgKm1ha2VTdHJpbmdDb25zdChjaGFyICpzdHIsIGlu dCBsb2NhdGlvbik7CiBleHRlcm4gRGVmRWxlbSAqbWFrZURlZkVsZW0oY2hhciAqbmFtZSwgTm9k ZSAqYXJnLCBpbnQgbG9jYXRpb24pOwogZXh0ZXJuIERlZkVsZW0gKm1ha2VEZWZFbGVtRXh0ZW5k ZWQoY2hhciAqbmFtZVNwYWNlLCBjaGFyICpuYW1lLCBOb2RlICphcmcsCiAJCQkJCQkJCQlEZWZF bGVtQWN0aW9uIGRlZmFjdGlvbiwgaW50IGxvY2F0aW9uKTsKQEAgLTExNCw2ICsxMTUsMTQgQEAg ZXh0ZXJuIEpzb25WYWx1ZUV4cHIgKm1ha2VKc29uVmFsdWVFeHByKEV4cHIgKnJhd19leHByLCBF eHByICpmb3JtYXR0ZWRfZXhwciwKIAkJCQkJCQkJCQlKc29uRm9ybWF0ICpmb3JtYXQpOwogZXh0 ZXJuIEpzb25CZWhhdmlvciAqbWFrZUpzb25CZWhhdmlvcihKc29uQmVoYXZpb3JUeXBlIHR5cGUs IE5vZGUgKmV4cHIsCiAJCQkJCQkJCQkgIEpzb25Db2VyY2lvbiAqY29lcmNpb24sIGludCBsb2Nh dGlvbik7CitleHRlcm4gSnNvblRhYmxlUGF0aCAqbWFrZUpzb25UYWJsZVBhdGgoQ29uc3QgKnBh dGh2YWx1ZSwgY2hhciAqcGF0aG5hbWUpOworZXh0ZXJuIE5vZGUgKm1ha2VKc29uVGFibGVQYXRo U3BlYyhjaGFyICpzdHJpbmcsIGNoYXIgKm5hbWUsCisJCQkJCQkJCSAgIGludCBzdHJpbmdfbG9j YXRpb24sIGludCBuYW1lX2xvY2F0aW9uKTsKK2V4dGVybiBOb2RlICptYWtlSnNvblRhYmxlRGVm YXVsdFBsYW4oSnNvblRhYmxlUGxhbkpvaW5UeXBlIGpvaW5fdHlwZSwKKwkJCQkJCQkJCSAgaW50 IGxvY2F0aW9uKTsKK2V4dGVybiBOb2RlICptYWtlSnNvblRhYmxlU2ltcGxlUGxhbihjaGFyICpw YXRobmFtZSwgaW50IGxvY2F0aW9uKTsKK2V4dGVybiBOb2RlICptYWtlSnNvblRhYmxlSm9pbmVk UGxhbihKc29uVGFibGVQbGFuSm9pblR5cGUgdHlwZSwKKwkJCQkJCQkJCSBOb2RlICpwbGFuMSwg Tm9kZSAqcGxhbjIsIGludCBsb2NhdGlvbik7CiBleHRlcm4gTm9kZSAqbWFrZUpzb25LZXlWYWx1 ZShOb2RlICprZXksIE5vZGUgKnZhbHVlKTsKIGV4dGVybiBOb2RlICptYWtlSnNvbklzUHJlZGlj YXRlKE5vZGUgKmV4cHIsIEpzb25Gb3JtYXQgKmZvcm1hdCwKIAkJCQkJCQkJIEpzb25WYWx1ZVR5 cGUgaXRlbV90eXBlLCBib29sIHVuaXF1ZV9rZXlzLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv bm9kZXMvcGFyc2Vub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCmluZGV4 IGQ0NmQyMDhlNjkuLjFjNDJjMDdjM2UgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3Bh cnNlbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKQEAgLTE3NDIs NiArMTc0Miw3IEBAIHR5cGVkZWYgc3RydWN0IEpzb25GdW5jRXhwcgogCUpzb25FeHByT3AJb3A7 CQkJCS8qIGV4cHJlc3Npb24gdHlwZSAqLwogCUpzb25WYWx1ZUV4cHIgKmNvbnRleHRfaXRlbTsJ LyogY29udGV4dCBpdGVtIGV4cHJlc3Npb24gKi8KIAlOb2RlCSAgICpwYXRoc3BlYzsJCS8qIEpT T04gcGF0aCBzcGVjaWZpY2F0aW9uIGV4cHJlc3Npb24gKi8KKwljaGFyCSAgICpwYXRobmFtZTsJ CS8qIHBhdGggbmFtZSwgaWYgYW55ICovCiAJTGlzdAkgICAqcGFzc2luZzsJCS8qIGxpc3Qgb2Yg UEFTU0lORyBjbGF1c2UgYXJndW1lbnRzLCBpZiBhbnkgKi8KIAlKc29uT3V0cHV0ICpvdXRwdXQ7 CQkJLyogb3V0cHV0IGNsYXVzZSwgaWYgc3BlY2lmaWVkICovCiAJSnNvbkJlaGF2aW9yICpvbl9l bXB0eTsJCS8qIE9OIEVNUFRZIGJlaGF2aW9yICovCkBAIC0xNzUxLDYgKzE3NTIsMTE0IEBAIHR5 cGVkZWYgc3RydWN0IEpzb25GdW5jRXhwcgogCWludAkJCWxvY2F0aW9uOwkJLyogdG9rZW4gbG9j YXRpb24sIG9yIC0xIGlmIHVua25vd24gKi8KIH0gSnNvbkZ1bmNFeHByOwogCisvKgorICogSnNv blRhYmxlUGF0aFNwZWMKKyAqCQl1bnRyYW5zZm9ybWVkIHNwZWNpZmljYXRpb24gb2YgSlNPTiBw YXRoIGV4cHJlc3Npb24gd2l0aCBhbiBvcHRpb25hbAorICoJCW5hbWUKKyAqLwordHlwZWRlZiBz dHJ1Y3QgSnNvblRhYmxlUGF0aFNwZWMKK3sKKwlOb2RlVGFnCQl0eXBlOworCisJTm9kZQkgICAq c3RyaW5nOworCWNoYXIJICAgKm5hbWU7CisJaW50CQkJbmFtZV9sb2NhdGlvbjsKKwlpbnQJCQls b2NhdGlvbjsJLyogbG9jYXRpb24gb2YgJ3N0cmluZycgKi8KK30gSnNvblRhYmxlUGF0aFNwZWM7 CisKKy8qCisgKiBKc29uVGFibGVDb2x1bW5UeXBlIC0KKyAqCQllbnVtZXJhdGlvbiBvZiBKU09O X1RBQkxFIGNvbHVtbiB0eXBlcworICovCit0eXBlZGVmIGVudW0gSnNvblRhYmxlQ29sdW1uVHlw ZQoreworCUpUQ19GT1JfT1JESU5BTElUWSwKKwlKVENfUkVHVUxBUiwKKwlKVENfRVhJU1RTLAor CUpUQ19GT1JNQVRURUQsCisJSlRDX05FU1RFRCwKK30gSnNvblRhYmxlQ29sdW1uVHlwZTsKKwor LyoKKyAqIEpzb25UYWJsZUNvbHVtbiAtCisgKgkJdW50cmFuc2Zvcm1lZCByZXByZXNlbnRhdGlv biBvZiBKU09OX1RBQkxFIGNvbHVtbgorICovCit0eXBlZGVmIHN0cnVjdCBKc29uVGFibGVDb2x1 bW4KK3sKKwlOb2RlVGFnCQl0eXBlOworCUpzb25UYWJsZUNvbHVtblR5cGUgY29sdHlwZTsJLyog Y29sdW1uIHR5cGUgKi8KKwljaGFyCSAgICpuYW1lOwkJCS8qIGNvbHVtbiBuYW1lICovCisJVHlw ZU5hbWUgICAqdHlwZU5hbWU7CQkvKiBjb2x1bW4gdHlwZSBuYW1lICovCisJSnNvblRhYmxlUGF0 aFNwZWMgKnBhdGhzcGVjOyAvKiBKU09OIHBhdGggc3BlY2lmaWNhdGlvbiAqLworCUpzb25Gb3Jt YXQgKmZvcm1hdDsJCQkvKiBKU09OIGZvcm1hdCBjbGF1c2UsIGlmIHNwZWNpZmllZCAqLworCUpz b25XcmFwcGVyIHdyYXBwZXI7CQkvKiBXUkFQUEVSIGJlaGF2aW9yIGZvciBmb3JtYXR0ZWQgY29s dW1ucyAqLworCUpzb25RdW90ZXMJcXVvdGVzOwkJCS8qIG9taXQgb3Iga2VlcCBxdW90ZXMgb24g c2NhbGFyIHN0cmluZ3M/ICovCisJTGlzdAkgICAqY29sdW1uczsJCS8qIG5lc3RlZCBjb2x1bW5z ICovCisJSnNvbkJlaGF2aW9yICpvbl9lbXB0eTsJCS8qIE9OIEVNUFRZIGJlaGF2aW9yICovCisJ SnNvbkJlaGF2aW9yICpvbl9lcnJvcjsJCS8qIE9OIEVSUk9SIGJlaGF2aW9yICovCisJaW50CQkJ bG9jYXRpb247CQkvKiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEgaWYgdW5rbm93biAqLworfSBKc29u VGFibGVDb2x1bW47CisKKy8qCisgKiBKc29uVGFibGVQbGFuVHlwZSAtCisgKgkJZmxhZ3MgZm9y IEpTT05fVEFCTEUgcGxhbiBub2RlIHR5cGVzIHJlcHJlc2VudGF0aW9uCisgKi8KK3R5cGVkZWYg ZW51bSBKc29uVGFibGVQbGFuVHlwZQoreworCUpTVFBfREVGQVVMVCwKKwlKU1RQX1NJTVBMRSwK KwlKU1RQX0pPSU5FRCwKK30gSnNvblRhYmxlUGxhblR5cGU7CisKKy8qCisgKiBKc29uVGFibGVQ bGFuSm9pblR5cGUgLQorICoJCUpTT05fVEFCTEUgam9pbiB0eXBlcyBmb3IgSlNUUF9KT0lORUQg cGxhbnMKKyAqLwordHlwZWRlZiBlbnVtIEpzb25UYWJsZVBsYW5Kb2luVHlwZQoreworCUpTVFBf Sk9JTl9JTk5FUiwKKwlKU1RQX0pPSU5fT1VURVIsCisJSlNUUF9KT0lOX0NST1NTLAorCUpTVFBf Sk9JTl9VTklPTiwKK30gSnNvblRhYmxlUGxhbkpvaW5UeXBlOworCisvKgorICogSnNvblRhYmxl UGxhblNwZWMgLQorICoJCXVudHJhbnNmb3JtZWQgcmVwcmVzZW50YXRpb24gb2YgSlNPTl9UQUJM RSdzIFBMQU4gY2xhdXNlCisgKi8KK3R5cGVkZWYgc3RydWN0IEpzb25UYWJsZVBsYW5TcGVjCit7 CisJTm9kZVRhZwkJdHlwZTsKKworCUpzb25UYWJsZVBsYW5UeXBlIHBsYW5fdHlwZTsJLyogcGxh biB0eXBlICovCisJSnNvblRhYmxlUGxhbkpvaW5UeXBlIGpvaW5fdHlwZTsJLyogam9pbiB0eXBl IChmb3Igam9pbmVkIHBsYW4gb25seSkgKi8KKwljaGFyCSAgICpwYXRobmFtZTsJCS8qIHBhdGgg bmFtZSAoZm9yIHNpbXBsZSBwbGFuIG9ubHkpICovCisKKwkvKiBGb3Igam9pbmVkIHBsYW5zICov CisJc3RydWN0IEpzb25UYWJsZVBsYW5TcGVjICpwbGFuMTsJCS8qIGZpcnN0IGpvaW5lZCBwbGFu ICovCisJc3RydWN0IEpzb25UYWJsZVBsYW5TcGVjICpwbGFuMjsJCS8qIHNlY29uZCBqb2luZWQg cGxhbiAqLworCisJaW50CQkJbG9jYXRpb247CQkvKiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEgaWYg dW5rbm93biAqLworfSBKc29uVGFibGVQbGFuU3BlYzsKKworLyoKKyAqIEpzb25UYWJsZSAtCisg KgkJdW50cmFuc2Zvcm1lZCByZXByZXNlbnRhdGlvbiBvZiBKU09OX1RBQkxFCisgKi8KK3R5cGVk ZWYgc3RydWN0IEpzb25UYWJsZQoreworCU5vZGVUYWcJCXR5cGU7CisJSnNvblZhbHVlRXhwciAq Y29udGV4dF9pdGVtOwkvKiBjb250ZXh0IGl0ZW0gZXhwcmVzc2lvbiAqLworCUpzb25UYWJsZVBh dGhTcGVjICpwYXRoc3BlYzsJLyogSlNPTiBwYXRoIHNwZWNpZmljYXRpb24gKi8KKwlMaXN0CSAg ICpwYXNzaW5nOwkJLyogbGlzdCBvZiBQQVNTSU5HIGNsYXVzZSBhcmd1bWVudHMsIGlmIGFueSAq LworCUxpc3QJICAgKmNvbHVtbnM7CQkvKiBsaXN0IG9mIEpzb25UYWJsZUNvbHVtbiAqLworCUpz b25UYWJsZVBsYW5TcGVjICpwbGFuc3BlYzsgLyogam9pbiBwbGFuLCBpZiBzcGVjaWZpZWQgKi8K KwlKc29uQmVoYXZpb3IgICpvbl9lcnJvcjsJLyogT04gRVJST1IgYmVoYXZpb3IgKi8KKwlBbGlh cwkgICAqYWxpYXM7CQkJLyogdGFibGUgYWxpYXMgaW4gRlJPTSBjbGF1c2UgKi8KKwlib29sCQls YXRlcmFsOwkJLyogZG9lcyBpdCBoYXZlIExBVEVSQUwgcHJlZml4PyAqLworCWludAkJCWxvY2F0 aW9uOwkJLyogdG9rZW4gbG9jYXRpb24sIG9yIC0xIGlmIHVua25vd24gKi8KK30gSnNvblRhYmxl OworCiAvKgogICogSnNvbktleVZhbHVlIC0KICAqCQl1bnRyYW5zZm9ybWVkIHJlcHJlc2VudGF0 aW9uIG9mIEpTT04gb2JqZWN0IGtleS12YWx1ZSBwYWlyIGZvcgpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaApp bmRleCA4ZWRhZDQ3OTBiLi5mZDA0NDRmOGQ3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rl cy9wcmltbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaApAQCAtOTQs OCArOTQsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgUmFuZ2VWYXIKIAlpbnQJCQlsb2NhdGlvbjsKIH0g UmFuZ2VWYXI7CiAKK3R5cGVkZWYgZW51bSBUYWJsZUZ1bmNUeXBlCit7CisJVEZUX1hNTFRBQkxF LAorCVRGVF9KU09OX1RBQkxFLAorfSBUYWJsZUZ1bmNUeXBlOworCiAvKgotICogVGFibGVGdW5j IC0gbm9kZSBmb3IgYSB0YWJsZSBmdW5jdGlvbiwgc3VjaCBhcyBYTUxUQUJMRS4KKyAqIFRhYmxl RnVuYyAtIG5vZGUgZm9yIGEgdGFibGUgZnVuY3Rpb24sIHN1Y2ggYXMgWE1MVEFCTEUgb3IgSlNP Tl9UQUJMRS4KICAqCiAgKiBFbnRyaWVzIGluIHRoZSBuc19uYW1lcyBsaXN0IGFyZSBlaXRoZXIg U3RyaW5nIG5vZGVzIGNvbnRhaW5pbmcKICAqIGxpdGVyYWwgbmFtZXNwYWNlIG5hbWVzLCBvciBO VUxMIHBvaW50ZXJzIHRvIHJlcHJlc2VudCBERUZBVUxULgpAQCAtMTAzLDYgKzEwOSw4IEBAIHR5 cGVkZWYgc3RydWN0IFJhbmdlVmFyCiB0eXBlZGVmIHN0cnVjdCBUYWJsZUZ1bmMKIHsKIAlOb2Rl VGFnCQl0eXBlOworCS8qIFhNTFRBQkxFIG9yIEpTT05fVEFCTEUgKi8KKwlUYWJsZUZ1bmNUeXBl IGZ1bmN0eXBlOwogCS8qIGxpc3Qgb2YgbmFtZXNwYWNlIFVSSSBleHByZXNzaW9ucyAqLwogCUxp c3QJICAgKm5zX3VyaXMgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9pZ25vcmUpOwogCS8qIGxp c3Qgb2YgbmFtZXNwYWNlIG5hbWVzIG9yIE5VTEwgKi8KQEAgLTEyMyw4ICsxMzEsMTQgQEAgdHlw ZWRlZiBzdHJ1Y3QgVGFibGVGdW5jCiAJTGlzdAkgICAqY29sZXhwcnM7CiAJLyogbGlzdCBvZiBj b2x1bW4gZGVmYXVsdCBleHByZXNzaW9ucyAqLwogCUxpc3QJICAgKmNvbGRlZmV4cHJzIHBnX25v ZGVfYXR0cihxdWVyeV9qdW1ibGVfaWdub3JlKTsKKwkvKiBsaXN0IG9mIGNvbHVtbiB2YWx1ZSBl eHByZXNzaW9ucyAqLworCUxpc3QJICAgKmNvbHZhbGV4cHJzIHBnX25vZGVfYXR0cihxdWVyeV9q dW1ibGVfaWdub3JlKTsKKwkvKiBsaXN0IG9mIFBBU1NJTkcgYXJndW1lbnQgZXhwcmVzc2lvbnMg Ki8KKwlMaXN0CSAgICpwYXNzaW5ndmFsZXhwcnMgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9p Z25vcmUpOwogCS8qIG51bGxhYmlsaXR5IGZsYWcgZm9yIGVhY2ggb3V0cHV0IGNvbHVtbiAqLwog CUJpdG1hcHNldCAgKm5vdG51bGxzIHBnX25vZGVfYXR0cihxdWVyeV9qdW1ibGVfaWdub3JlKTsK KwkvKiBKU09OX1RBQkxFIHBsYW4gKi8KKwlOb2RlCSAgICpwbGFuIHBnX25vZGVfYXR0cihxdWVy eV9qdW1ibGVfaWdub3JlKTsKIAkvKiBjb3VudHMgZnJvbSAwOyAtMSBpZiBub25lIHNwZWNpZmll ZCAqLwogCWludAkJCW9yZGluYWxpdHljb2wgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9pZ25v cmUpOwogCS8qIHRva2VuIGxvY2F0aW9uLCBvciAtMSBpZiB1bmtub3duICovCkBAIC0xNTYxLDYg KzE1NzUsNyBAQCB0eXBlZGVmIGVudW0gSnNvbkV4cHJPcAogCUpTT05fVkFMVUVfT1AsCQkJCS8q IEpTT05fVkFMVUUoKSAqLwogCUpTT05fUVVFUllfT1AsCQkJCS8qIEpTT05fUVVFUlkoKSAqLwog CUpTT05fRVhJU1RTX09QLAkJCQkvKiBKU09OX0VYSVNUUygpICovCisJSlNPTl9UQUJMRV9PUCwJ CQkJLyogSlNPTl9UQUJMRSgpICovCiB9IEpzb25FeHByT3A7CiAKIC8qCkBAIC0xODQ3LDYgKzE4 NjIsNDkgQEAgdHlwZWRlZiBzdHJ1Y3QgSnNvbkV4cHIKIAlpbnQJCQlsb2NhdGlvbjsKIH0gSnNv bkV4cHI7CiAKKy8qCisgKiBKc29uVGFibGVQYXRoCisgKgkJQSBKU09OIHBhdGggZXhwcmVzc2lv biB0byBiZSBjb21wdXRlZCBhcyBwYXJ0IG9mIGV2YWx1YXRpbmcKKyAqCQlhIEpTT05fVEFCTEUg cGxhbiBub2RlCisgKi8KK3R5cGVkZWYgc3RydWN0IEpzb25UYWJsZVBhdGgKK3sKKwlOb2RlVGFn CQl0eXBlOworCisJQ29uc3QJICAgKnZhbHVlOworCWNoYXIJICAgKm5hbWU7Cit9CQkJSnNvblRh YmxlUGF0aDsKKworLyoKKyAqIEpzb25UYWJsZVNwZWMgLQorICoJCXRyYW5zZm9ybWVkIHJlcHJl c2VudGF0aW9uIG9mIGEgSlNPTl9UQUJMRSBwbGFuCisgKi8KK3R5cGVkZWYgc3RydWN0IEpzb25U YWJsZVBsYW4KK3sKKwlOb2RlVGFnCQl0eXBlOworCisJSnNvblRhYmxlUGF0aCAqcGF0aDsKKwlO b2RlCSAgICpjaGlsZDsJCQkvKiBuZXN0ZWQgY29sdW1ucywgaWYgYW55ICovCisJYm9vbAkJb3V0 ZXJKb2luOwkJLyogb3V0ZXIgb3IgaW5uZXIgam9pbiBmb3IgbmVzdGVkIGNvbHVtbnM/ICovCisJ aW50CQkJY29sTWluOwkJCS8qIG1pbiBjb2x1bW4gaW5kZXggaW4gdGhlIHJlc3VsdGluZyBjb2x1 bW4KKwkJCQkJCQkJICogbGlzdCAqLworCWludAkJCWNvbE1heDsJCQkvKiBtYXggY29sdW1uIGlu ZGV4IGluIHRoZSByZXN1bHRpbmcgY29sdW1uCisJCQkJCQkJCSAqIGxpc3QgKi8KKwlib29sCQll cnJvck9uRXJyb3I7CS8qIEVSUk9SL0VNUFRZIE9OIEVSUk9SIGJlaGF2aW9yICovCit9IEpzb25U YWJsZVBsYW47CisKKy8qCisgKiBKc29uVGFibGVTaWJsaW5nIC0KKyAqCQl0cmFuc2Zvcm1lZCBy ZXByZXNlbnRhdGlvbiBvZiBqb2luZWQgc2libGluZyBKU09OX1RBQkxFIHBsYW4gbm9kZQorICov Cit0eXBlZGVmIHN0cnVjdCBKc29uVGFibGVTaWJsaW5nCit7CisJTm9kZVRhZwkJdHlwZTsKKwlO b2RlCSAgICpsYXJnOwkJCS8qIGxlZnQgam9pbiBub2RlICovCisJTm9kZQkgICAqcmFyZzsJCQkv KiByaWdodCBqb2luIG5vZGUgKi8KKwlib29sCQljcm9zczsJCQkvKiBjcm9zcyBvciB1bmlvbiBq b2luPyAqLworfSBKc29uVGFibGVTaWJsaW5nOworCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKiBO dWxsVGVzdAogICoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaCBiL3Ny Yy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaAppbmRleCA5NGUxY2I0ZGNlLi5lMmJiZWViMjA5IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUv cGFyc2VyL2t3bGlzdC5oCkBAIC0yNDIsNiArMjQyLDcgQEAgUEdfS0VZV09SRCgianNvbl9vYmpl Y3RhZ2ciLCBKU09OX09CSkVDVEFHRywgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBH X0tFWVdPUkQoImpzb25fcXVlcnkiLCBKU09OX1FVRVJZLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJF X0xBQkVMKQogUEdfS0VZV09SRCgianNvbl9zY2FsYXIiLCBKU09OX1NDQUxBUiwgQ09MX05BTUVf S0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImpzb25fc2VyaWFsaXplIiwgSlNPTl9T RVJJQUxJWkUsIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlXT1JEKCJqc29u X3RhYmxlIiwgSlNPTl9UQUJMRSwgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tF WVdPUkQoImpzb25fdmFsdWUiLCBKU09OX1ZBTFVFLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xB QkVMKQogUEdfS0VZV09SRCgia2VlcCIsIEtFRVAsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9M QUJFTCkKIFBHX0tFWVdPUkQoImtleSIsIEtFWSwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xB QkVMKQpAQCAtMjg0LDYgKzI4NSw3IEBAIFBHX0tFWVdPUkQoIm5hbWVzIiwgTkFNRVMsIFVOUkVT RVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoIm5hdGlvbmFsIiwgTkFUSU9O QUwsIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJuYXR1cmFsIiwg TkFUVVJBTCwgVFlQRV9GVU5DX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQo Im5jaGFyIiwgTkNIQVIsIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlXT1JE KCJuZXN0ZWQiLCBORVNURUQsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tF WVdPUkQoIm5ldyIsIE5FVywgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZ V09SRCgibmV4dCIsIE5FWFQsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tF WVdPUkQoIm5mYyIsIE5GQywgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQpAQCAtMzM0 LDcgKzMzNiw5IEBAIFBHX0tFWVdPUkQoInBhcnRpYWwiLCBQQVJUSUFMLCBVTlJFU0VSVkVEX0tF WVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJwYXJ0aXRpb24iLCBQQVJUSVRJT04sIFVO UkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInBhc3NpbmciLCBQQVNT SU5HLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJwYXNzd29y ZCIsIFBBU1NXT1JELCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlXT1JE KCJwYXRoIiwgUEFUSCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09S RCgicGxhY2luZyIsIFBMQUNJTkcsIFJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19L RVlXT1JEKCJwbGFuIiwgUExBTiwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdf S0VZV09SRCgicGxhbnMiLCBQTEFOUywgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQog UEdfS0VZV09SRCgicG9saWN5IiwgUE9MSUNZLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFC RUwpCiBQR19LRVlXT1JEKCJwb3NpdGlvbiIsIFBPU0lUSU9OLCBDT0xfTkFNRV9LRVlXT1JELCBC QVJFX0xBQkVMKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNlX2NsYXVzZS5o IGIvc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNlX2NsYXVzZS5oCmluZGV4IDM4MjlkYjBmYzQuLmU3 MTc2MmIxMGMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3BhcnNlci9wYXJzZV9jbGF1c2UuaAor KysgYi9zcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2VfY2xhdXNlLmgKQEAgLTUxLDQgKzUxLDcgQEAg ZXh0ZXJuIExpc3QgKmFkZFRhcmdldFRvU29ydExpc3QoUGFyc2VTdGF0ZSAqcHN0YXRlLCBUYXJn ZXRFbnRyeSAqdGxlLAogZXh0ZXJuIEluZGV4IGFzc2lnblNvcnRHcm91cFJlZihUYXJnZXRFbnRy eSAqdGxlLCBMaXN0ICp0bGlzdCk7CiBleHRlcm4gYm9vbCB0YXJnZXRJc0luU29ydExpc3QoVGFy Z2V0RW50cnkgKnRsZSwgT2lkIHNvcnRvcCwgTGlzdCAqc29ydExpc3QpOwogCisvKiBmdW5jdGlv bnMgaW4gcGFyc2VfanNvbnRhYmxlLmMgKi8KK2V4dGVybiBQYXJzZU5hbWVzcGFjZUl0ZW0gKnRy YW5zZm9ybUpzb25UYWJsZShQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25UYWJsZSAqanQpOworCiAj ZW5kaWYJCQkJCQkJLyogUEFSU0VfQ0xBVVNFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3V0aWxzL2pzb25wYXRoLmggYi9zcmMvaW5jbHVkZS91dGlscy9qc29ucGF0aC5oCmluZGV4IDg5 N2RlMjFhNTEuLjgzOGRjOGUwZmUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25w YXRoLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvanNvbnBhdGguaApAQCAtMTUsNiArMTUsNyBA QAogI2RlZmluZSBKU09OUEFUSF9ICiAKICNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAiZXhl Y3V0b3IvdGFibGVmdW5jLmgiCiAjaW5jbHVkZSAibm9kZXMvcGdfbGlzdC5oIgogI2luY2x1ZGUg Im5vZGVzL3ByaW1ub2Rlcy5oIgogI2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCkBAIC0yOTIsNCAr MjkzLDYgQEAgZXh0ZXJuIERhdHVtIEpzb25QYXRoUXVlcnkoRGF0dW0gamIsIEpzb25QYXRoICpq cCwgSnNvbldyYXBwZXIgd3JhcHBlciwKIGV4dGVybiBKc29uYlZhbHVlICpKc29uUGF0aFZhbHVl KERhdHVtIGpiLCBKc29uUGF0aCAqanAsIGJvb2wgKmVtcHR5LAogCQkJCQkJCQkgYm9vbCAqZXJy b3IsIExpc3QgKnZhcnMpOwogCitleHRlcm4gUEdETExJTVBPUlQgY29uc3QgVGFibGVGdW5jUm91 dGluZSBKc29uYlRhYmxlUm91dGluZTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJm YWNlcy9lY3BnL3Rlc3QvZWNwZ19zY2hlZHVsZSBiL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9l Y3BnX3NjaGVkdWxlCmluZGV4IDM5ODE0YTM5YzEuLjIyMDhmNDBkNjcgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9lY3BnX3NjaGVkdWxlCisrKyBiL3NyYy9pbnRlcmZhY2Vz L2VjcGcvdGVzdC9lY3BnX3NjaGVkdWxlCkBAIC01MSw2ICs1MSw3IEBAIHRlc3Q6IHNxbC9vbGRl eGVjCiB0ZXN0OiBzcWwvcXVvdGUKIHRlc3Q6IHNxbC9zaG93CiB0ZXN0OiBzcWwvc3FsanNvbgor dGVzdDogc3FsL3NxbGpzb25fanNvbnRhYmxlCiB0ZXN0OiBzcWwvaW5zdXBkCiB0ZXN0OiBzcWwv cGFyc2VyCiB0ZXN0OiBzcWwvcHJlcGFyZWFzCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9l Y3BnL3Rlc3QvZXhwZWN0ZWQvc3FsLXNxbGpzb25fanNvbnRhYmxlLmMgYi9zcmMvaW50ZXJmYWNl cy9lY3BnL3Rlc3QvZXhwZWN0ZWQvc3FsLXNxbGpzb25fanNvbnRhYmxlLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMGJiZjQ0NDMxOAotLS0gL2Rldi9udWxsCisrKyBi L3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9leHBlY3RlZC9zcWwtc3FsanNvbl9qc29udGFibGUu YwpAQCAtMCwwICsxLDEzMiBAQAorLyogUHJvY2Vzc2VkIGJ5IGVjcGcgKHJlZ3Jlc3Npb24gbW9k ZSkgKi8KKy8qIFRoZXNlIGluY2x1ZGUgZmlsZXMgYXJlIGFkZGVkIGJ5IHRoZSBwcmVwcm9jZXNz b3IgKi8KKyNpbmNsdWRlIDxlY3BnbGliLmg+CisjaW5jbHVkZSA8ZWNwZ2Vycm5vLmg+CisjaW5j bHVkZSA8c3FsY2EuaD4KKy8qIEVuZCBvZiBhdXRvbWF0aWMgaW5jbHVkZSBzZWN0aW9uICovCisj ZGVmaW5lIEVDUEdkZWJ1ZyhYLFkpIEVDUEdkZWJ1ZygoWCkrMTAwLChZKSkKKworI2xpbmUgMSAi c3FsanNvbl9qc29udGFibGUucGdjIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKworI2xpbmUgMSAi c3FsY2EuaCIKKyNpZm5kZWYgUE9TVEdSRVNfU1FMQ0FfSAorI2RlZmluZSBQT1NUR1JFU19TUUxD QV9ICisKKyNpZm5kZWYgUEdETExJTVBPUlQKKyNpZiAgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5l ZChfX0NZR1dJTl9fKQorI2RlZmluZSBQR0RMTElNUE9SVCBfX2RlY2xzcGVjIChkbGxpbXBvcnQp CisjZWxzZQorI2RlZmluZSBQR0RMTElNUE9SVAorI2VuZGlmCQkJCQkJCS8qIF9fQ1lHV0lOX18g Ki8KKyNlbmRpZgkJCQkJCQkvKiBQR0RMTElNUE9SVCAqLworCisjZGVmaW5lIFNRTEVSUk1DX0xF TgkxNTAKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworc3Ry dWN0IHNxbGNhX3QKK3sKKwljaGFyCQlzcWxjYWlkWzhdOworCWxvbmcJCXNxbGFiYzsKKwlsb25n CQlzcWxjb2RlOworCXN0cnVjdAorCXsKKwkJaW50CQkJc3FsZXJybWw7CisJCWNoYXIJCXNxbGVy cm1jW1NRTEVSUk1DX0xFTl07CisJfQkJCXNxbGVycm07CisJY2hhcgkJc3FsZXJycFs4XTsKKwls b25nCQlzcWxlcnJkWzZdOworCS8qIEVsZW1lbnQgMDogZW1wdHkJCQkJCQkqLworCS8qIDE6IE9J RCBvZiBwcm9jZXNzZWQgdHVwbGUgaWYgYXBwbGljYWJsZQkJCSovCisJLyogMjogbnVtYmVyIG9m IHJvd3MgcHJvY2Vzc2VkCQkJCSovCisJLyogYWZ0ZXIgYW4gSU5TRVJULCBVUERBVEUgb3IJCQkJ Ki8KKwkvKiBERUxFVEUgc3RhdGVtZW50CQkJCQkqLworCS8qIDM6IGVtcHR5CQkJCQkJKi8KKwkv KiA0OiBlbXB0eQkJCQkJCSovCisJLyogNTogZW1wdHkJCQkJCQkqLworCWNoYXIJCXNxbHdhcm5b OF07CisJLyogRWxlbWVudCAwOiBzZXQgdG8gJ1cnIGlmIGF0IGxlYXN0IG9uZSBvdGhlciBpcyAn VycJKi8KKwkvKiAxOiBpZiAnVycgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciBzdHJpbmcJCSovCisJ LyogdmFsdWUgd2FzIHRydW5jYXRlZCB3aGVuIGl0IHdhcwkJCSovCisJLyogc3RvcmVkIGludG8g YSBob3N0IHZhcmlhYmxlLiAgICAgICAgICAgICAqLworCisJLyoKKwkgKiAyOiBpZiAnVycgYSAo aG9wZWZ1bGx5KSBub24tZmF0YWwgbm90aWNlIG9jY3VycmVkCisJICovCS8qIDM6IGVtcHR5ICov CisJLyogNDogZW1wdHkJCQkJCQkqLworCS8qIDU6IGVtcHR5CQkJCQkJKi8KKwkvKiA2OiBlbXB0 eQkJCQkJCSovCisJLyogNzogZW1wdHkJCQkJCQkqLworCisJY2hhcgkJc3Fsc3RhdGVbNV07Cit9 OworCitzdHJ1Y3Qgc3FsY2FfdCAqRUNQR2dldF9zcWxjYSh2b2lkKTsKKworI2lmbmRlZiBQT1NU R1JFU19FQ1BHX0lOVEVSTkFMCisjZGVmaW5lIHNxbGNhICgqRUNQR2dldF9zcWxjYSgpKQorI2Vu ZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgorCisjbGluZSAz ICJzcWxqc29uX2pzb250YWJsZS5wZ2MiCisKKworI2xpbmUgMSAicmVncmVzc2lvbi5oIgorCisK KworCisKKworI2xpbmUgNCAic3FsanNvbl9qc29udGFibGUucGdjIgorCisKKy8qIGV4ZWMgc3Fs IHdoZW5ldmVyIHNxbGVycm9yICBzcWxwcmludCA7ICovCisjbGluZSA2ICJzcWxqc29uX2pzb250 YWJsZS5wZ2MiCisKKworaW50CittYWluICgpCit7CisgIEVDUEdkZWJ1ZyAoMSwgc3RkZXJyKTsK KworICB7IEVDUEdjb25uZWN0KF9fTElORV9fLCAwLCAiZWNwZzFfcmVncmVzc2lvbiIgLCBOVUxM LCBOVUxMICwgTlVMTCwgMCk7IAorI2xpbmUgMTMgInNxbGpzb25fanNvbnRhYmxlLnBnYyIKKwor aWYgKHNxbGNhLnNxbGNvZGUgPCAwKSBzcWxwcmludCgpO30KKyNsaW5lIDEzICJzcWxqc29uX2pz b250YWJsZS5wZ2MiCisKKyAgeyBFQ1BHc2V0Y29tbWl0KF9fTElORV9fLCAib24iLCBOVUxMKTsK KyNsaW5lIDE0ICJzcWxqc29uX2pzb250YWJsZS5wZ2MiCisKK2lmIChzcWxjYS5zcWxjb2RlIDwg MCkgc3FscHJpbnQoKTt9CisjbGluZSAxNCAic3FsanNvbl9qc29udGFibGUucGdjIgorCisKKyAg eyBFQ1BHZG8oX19MSU5FX18sIDAsIDEsIE5VTEwsIDAsIEVDUEdzdF9ub3JtYWwsICJzZWxlY3Qg KiBmcm9tIGpzb25fdGFibGUgKCBqc29uYiAnbnVsbCcgLCAnJFsqXScgYXMgcDAgY29sdW1ucyAo IG5lc3RlZCAnJCcgYXMgcDEgY29sdW1ucyAoIG5lc3RlZCBwYXRoICckJyBhcyBwMTEgY29sdW1u cyAoIGZvbyBpbnQgKSAsIG5lc3RlZCBwYXRoICckJyBhcyBwMTIgY29sdW1ucyAoIGJhciBpbnQg KSApICwgbmVzdGVkIHBhdGggJyQnIGFzIHAyIGNvbHVtbnMgKCBuZXN0ZWQgcGF0aCAnJCcgYXMg cDIxIGNvbHVtbnMgKCBiYXogaW50ICkgKSApIHBsYW4gKCBwMSApICkganQiLCBFQ1BHdF9FT0lU LCBFQ1BHdF9FT1JUKTsKKyNsaW5lIDI2ICJzcWxqc29uX2pzb250YWJsZS5wZ2MiCisKK2lmIChz cWxjYS5zcWxjb2RlIDwgMCkgc3FscHJpbnQoKTt9CisjbGluZSAyNiAic3FsanNvbl9qc29udGFi bGUucGdjIgorCisgIC8vIGVycm9yCisKKyAgeyBFQ1BHZGlzY29ubmVjdChfX0xJTkVfXywgIkNV UlJFTlQiKTsKKyNsaW5lIDI5ICJzcWxqc29uX2pzb250YWJsZS5wZ2MiCisKK2lmIChzcWxjYS5z cWxjb2RlIDwgMCkgc3FscHJpbnQoKTt9CisjbGluZSAyOSAic3FsanNvbl9qc29udGFibGUucGdj IgorCisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rl c3QvZXhwZWN0ZWQvc3FsLXNxbGpzb25fanNvbnRhYmxlLnN0ZGVyciBiL3NyYy9pbnRlcmZhY2Vz L2VjcGcvdGVzdC9leHBlY3RlZC9zcWwtc3FsanNvbl9qc29udGFibGUuc3RkZXJyCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjU4ODFmZGI1ZWUKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3QvZXhwZWN0ZWQvc3FsLXNxbGpzb25fanNvbnRh YmxlLnN0ZGVycgpAQCAtMCwwICsxLDIwIEBACitbTk9fUElEXTogRUNQR2RlYnVnOiBzZXQgdG8g MQorW05PX1BJRF06IHNxbGNhOiBjb2RlOiAwLCBzdGF0ZTogMDAwMDAKK1tOT19QSURdOiBFQ1BH Y29ubmVjdDogb3BlbmluZyBkYXRhYmFzZSBlY3BnMV9yZWdyZXNzaW9uIG9uIDxERUZBVUxUPiBw b3J0IDxERUZBVUxUPiAgCitbTk9fUElEXTogc3FsY2E6IGNvZGU6IDAsIHN0YXRlOiAwMDAwMAor W05PX1BJRF06IEVDUEdzZXRjb21taXQgb24gbGluZSAxNDogYWN0aW9uICJvbiI7IGNvbm5lY3Rp b24gImVjcGcxX3JlZ3Jlc3Npb24iCitbTk9fUElEXTogc3FsY2E6IGNvZGU6IDAsIHN0YXRlOiAw MDAwMAorW05PX1BJRF06IGVjcGdfZXhlY3V0ZSBvbiBsaW5lIDE2OiBxdWVyeTogc2VsZWN0ICog ZnJvbSBqc29uX3RhYmxlICgganNvbmIgJ251bGwnICwgJyRbKl0nIGFzIHAwIGNvbHVtbnMgKCBu ZXN0ZWQgJyQnIGFzIHAxIGNvbHVtbnMgKCBuZXN0ZWQgcGF0aCAnJCcgYXMgcDExIGNvbHVtbnMg KCBmb28gaW50ICkgLCBuZXN0ZWQgcGF0aCAnJCcgYXMgcDEyIGNvbHVtbnMgKCBiYXIgaW50ICkg KSAsIG5lc3RlZCBwYXRoICckJyBhcyBwMiBjb2x1bW5zICggbmVzdGVkIHBhdGggJyQnIGFzIHAy MSBjb2x1bW5zICggYmF6IGludCApICkgKSBwbGFuICggcDEgKSApIGp0OyB3aXRoIDAgcGFyYW1l dGVyKHMpIG9uIGNvbm5lY3Rpb24gZWNwZzFfcmVncmVzc2lvbgorW05PX1BJRF06IHNxbGNhOiBj b2RlOiAwLCBzdGF0ZTogMDAwMDAKK1tOT19QSURdOiBlY3BnX2V4ZWN1dGUgb24gbGluZSAxNjog dXNpbmcgUFFleGVjCitbTk9fUElEXTogc3FsY2E6IGNvZGU6IDAsIHN0YXRlOiAwMDAwMAorW05P X1BJRF06IGVjcGdfY2hlY2tfUFFyZXN1bHQgb24gbGluZSAxNjogYmFkIHJlc3BvbnNlIC0gRVJS T1I6ICBpbnZhbGlkIEpTT05fVEFCTEUgcGxhbgorTElORSAxOiAuLi50ZWQgcGF0aCAnJCcgYXMg cDIxIGNvbHVtbnMgKCBiYXogaW50ICkgKSApIHBsYW4gKCBwMSApICkganQKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorREVU QUlMOiAgUEFUSCBuYW1lIG1pc21hdGNoOiBleHBlY3RlZCBwMCBidXQgcDEgaXMgZ2l2ZW4uCitb Tk9fUElEXTogc3FsY2E6IGNvZGU6IDAsIHN0YXRlOiAwMDAwMAorW05PX1BJRF06IHJhaXNpbmcg c3Fsc3RhdGUgNDI2MDEgKHNxbGNvZGUgLTQwMCk6IGludmFsaWQgSlNPTl9UQUJMRSBwbGFuIG9u IGxpbmUgMTYKK1tOT19QSURdOiBzcWxjYTogY29kZTogLTQwMCwgc3RhdGU6IDQyNjAxCitTUUwg ZXJyb3I6IGludmFsaWQgSlNPTl9UQUJMRSBwbGFuIG9uIGxpbmUgMTYKK1tOT19QSURdOiBlY3Bn X2ZpbmlzaDogY29ubmVjdGlvbiBlY3BnMV9yZWdyZXNzaW9uIGNsb3NlZAorW05PX1BJRF06IHNx bGNhOiBjb2RlOiAwLCBzdGF0ZTogMDAwMDAKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2Vj cGcvdGVzdC9leHBlY3RlZC9zcWwtc3FsanNvbl9qc29udGFibGUuc3Rkb3V0IGIvc3JjL2ludGVy ZmFjZXMvZWNwZy90ZXN0L2V4cGVjdGVkL3NxbC1zcWxqc29uX2pzb250YWJsZS5zdGRvdXQKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZTY5ZGUyOWJiMgpkaWZmIC0tZ2l0 IGEvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L3NxbC9NYWtlZmlsZSBiL3NyYy9pbnRlcmZhY2Vz L2VjcGcvdGVzdC9zcWwvTWFrZWZpbGUKaW5kZXggZDgyMTNiMjVjZS4uN2YwMzI2NTliOSAxMDA2 NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L3NxbC9NYWtlZmlsZQorKysgYi9zcmMv aW50ZXJmYWNlcy9lY3BnL3Rlc3Qvc3FsL01ha2VmaWxlCkBAIC0yNCw2ICsyNCw3IEBAIFRFU1RT ID0gYXJyYXkgYXJyYXkuYyBcCiAgICAgICAgIHF1b3RlIHF1b3RlLmMgXAogICAgICAgICBzaG93 IHNob3cuYyBcCiAgICAgICAgIHNxbGpzb24gc3FsanNvbi5jIFwKKyAgICAgICAgc3FsanNvbl9q c29udGFibGUgc3FsanNvbl9qc29udGFibGUuYyBcCiAgICAgICAgIGluc3VwZCBpbnN1cGQuYyBc CiAgICAgICAgIHR3b3BoYXNlIHR3b3BoYXNlLmMgXAogICAgICAgICBpbnN1cGQgaW5zdXBkLmMg XApkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L3NxbC9tZXNvbi5idWlsZCBi L3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9zcWwvbWVzb24uYnVpbGQKaW5kZXggMTJmMjhlMGEy NC4uODhhM2FjYjlhZiAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L3NxbC9t ZXNvbi5idWlsZAorKysgYi9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3Qvc3FsL21lc29uLmJ1aWxk CkBAIC0yNiw2ICsyNiw3IEBAIHBnY19maWxlcyA9IFsKICAgJ3Nob3cnLAogICAnc3FsZGEnLAog ICAnc3FsanNvbicsCisgICdzcWxqc29uX2pzb250YWJsZScsCiAgICd0d29waGFzZScsCiBdCiAK ZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9zcWwvc3FsanNvbl9qc29udGFi bGUucGdjIGIvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L3NxbC9zcWxqc29uX2pzb250YWJsZS5w Z2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMDZmOGEyYjYzNAotLS0g L2Rldi9udWxsCisrKyBiL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9zcWwvc3FsanNvbl9qc29u dGFibGUucGdjCkBAIC0wLDAgKzEsMzIgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorCitFWEVDIFNR TCBJTkNMVURFIHNxbGNhOworZXhlYyBzcWwgaW5jbHVkZSAuLi9yZWdyZXNzaW9uOworCitFWEVD IFNRTCBXSEVORVZFUiBTUUxFUlJPUiBzcWxwcmludDsKKworaW50CittYWluICgpCit7CisgIEVD UEdkZWJ1ZyAoMSwgc3RkZXJyKTsKKworICBFWEVDIFNRTCBDT05ORUNUIFRPIFJFR1JFU1NEQjE7 CisgIEVYRUMgU1FMIFNFVCBBVVRPQ09NTUlUID0gT047CisKKyAgRVhFQyBTUUwgU0VMRUNUICog RlJPTSBKU09OX1RBQkxFKGpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJ CU5FU1RFRCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENP TFVNTlMgKCBmb28gaW50ICksCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBi YXIgaW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVT VEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAo cDEpKSBqdDsKKyAgLy8gZXJyb3IKKworICBFWEVDIFNRTCBESVNDT05ORUNUOworCisgIHJldHVy biAwOworfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zcWxqc29uX2pz b250YWJsZS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NxbGpzb25fanNvbnRhYmxl Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi43ZTJjYTg5OTgzCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zcWxqc29uX2pzb250 YWJsZS5vdXQKQEAgLTAsMCArMSwxMjA4IEBACistLSBKU09OX1RBQkxFCistLSBTaG91bGQgZmFp bCAoSlNPTl9UQUJMRSBjYW4gYmUgdXNlZCBvbmx5IGluIEZST00gY2xhdXNlKQorU0VMRUNUIEpT T05fVEFCTEUoJ1tdJywgJyQnKTsKK0VSUk9SOiAgc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIigi CitMSU5FIDE6IFNFTEVDVCBKU09OX1RBQkxFKCdbXScsICckJyk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgXgorLS0gU2hvdWxkIGZhaWwgKGpzb24gYXJndW1lbnQgbm90IHN1cHBvcnRlZCkK K1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShOVUxMIEZPUk1BVCBKU09OLCAnJCcgQ09MVU1OUyAo Zm9vIHRleHQpKTsKK0VSUk9SOiAgSlNPTl9UQUJMRSgpIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQg Zm9yIHRoZSBqc29uIHR5cGUKK0xJTkUgMTogU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKE5VTEwg Rk9STUFUIEpTT04sICckJyBDT0xVTU5TIChmb28gLi4uCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBeCitISU5UOiAgVHJ5IGNhc3RpbmcgdGhlIGFyZ3VtZW50IHRvIGpzb25iCist LSBTaG91bGQgZmFpbCAobm8gY29sdW1ucykKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShOVUxM LCAnJCcgQ09MVU1OUyAoKSk7CitFUlJPUjogIHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIpIgor TElORSAxOiBTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoTlVMTCwgJyQnIENPTFVNTlMgKCkpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK1NF TEVDVCAqIEZST00gSlNPTl9UQUJMRSAoTlVMTDo6anNvbmIsICckJyBDT0xVTU5TICh2MSB0aW1l c3RhbXApKSBBUyBmICh2MSwgdjIpOworRVJST1I6ICBKU09OX1RBQkxFIGZ1bmN0aW9uIGhhcyAx IGNvbHVtbnMgYXZhaWxhYmxlIGJ1dCAyIGNvbHVtbnMgc3BlY2lmaWVkCistLSBOVUxMID0+IGVt cHR5IHRhYmxlCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoTlVMTDo6anNvbmIsICckJyBDT0xV TU5TIChmb28gaW50KSkgYmFyOworIGZvbyAKKy0tLS0tCisoMCByb3dzKQorCistLQorU0VMRUNU ICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcxMjMnLCAnJCcKKwlDT0xVTU5TIChpdGVtIGludCBQ QVRIICckJywgZm9vIGludCkpIGJhcjsKKyBpdGVtIHwgZm9vIAorLS0tLS0tKy0tLS0tCisgIDEy MyB8ICAgIAorKDEgcm93KQorCistLSBKU09OX1RBQkxFOiBiYXNpYyBmdW5jdGlvbmFsaXR5CitD UkVBVEUgRE9NQUlOIGpzb25iX3Rlc3RfZG9tYWluIEFTIHRleHQgQ0hFQ0sgKHZhbHVlIDw+ICdm b28nKTsKK0NSRUFURSBURU1QIFRBQkxFIGpzb25fdGFibGVfdGVzdCAoanMpIEFTCisJKFZBTFVF UworCQkoJzEnKSwKKwkJKCdbXScpLAorCQkoJ3t9JyksCisJCSgnWzEsIDEuMjMsICIyIiwgImFh YWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwg Ilwic3RyXCIiXScpCisJKTsKKy0tIFJlZ3VsYXIgInVuZm9ybWF0dGVkIiBjb2x1bW5zCitTRUxF Q1QgKgorRlJPTSBqc29uX3RhYmxlX3Rlc3QgdmFscworCUxFRlQgT1VURVIgSk9JTgorCUpTT05f VEFCTEUoCisJCXZhbHMuanM6Ompzb25iLCAnbGF4ICRbKl0nCisJCUNPTFVNTlMgKAorCQkJaWQg Rk9SIE9SRElOQUxJVFksCisJCQkiaW50IiBpbnQgUEFUSCAnJCcsCisJCQkidGV4dCIgdGV4dCBQ QVRIICckJywKKwkJCSJjaGFyKDQpIiBjaGFyKDQpIFBBVEggJyQnLAorCQkJImJvb2wiIGJvb2wg UEFUSCAnJCcsCisJCQkibnVtZXJpYyIgbnVtZXJpYyBQQVRIICckJywKKwkJCSJkb21haW4iIGpz b25iX3Rlc3RfZG9tYWluIFBBVEggJyQnLAorCQkJanMganNvbiBQQVRIICckJywKKwkJCWpiIGpz b25iIFBBVEggJyQnCisJCSkKKwkpIGp0CisJT04gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGpzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgaWQgfCBpbnQgfCAgdGV4dCAgIHwgY2hhcig0KSB8IGJvb2wgfCBudW1lcmlj IHwgZG9tYWluICB8ICAgICAganMgICAgICB8ICAgICAgamIgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0KKyAxICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgIDEgfCAgIDEgfCAxICAgICAgIHwgMSAgICAgICB8ICAg ICAgfCAgICAgICAxIHwgMSAgICAgICB8IDEgICAgICAgICAgICB8IDEKKyBbXSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgICAgfCAgICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAgfCAg ICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICB8IAorIHt9ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgMSB8ICAgICB8ICAgICAgICAgfCAgICAgICAgIHwgICAgICB8ICAgICAgICAg fCAgICAgICAgIHwge30gICAgICAgICAgIHwge30KKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIs ICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJc IiJdIHwgIDEgfCAgIDEgfCAxICAgICAgIHwgMSAgICAgICB8ICAgICAgfCAgICAgICAxIHwgMSAg ICAgICB8IDEgICAgICAgICAgICB8IDEKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28i LCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwg IDIgfCAgIDEgfCAxLjIzICAgIHwgMS4yMyAgICB8ICAgICAgfCAgICAxLjIzIHwgMS4yMyAgICB8 IDEuMjMgICAgICAgICB8IDEuMjMKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBu dWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDMg fCAgIDIgfCAyICAgICAgIHwgMiAgICAgICB8ICAgICAgfCAgICAgICAyIHwgMiAgICAgICB8ICIy IiAgICAgICAgICB8ICIyIgorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGws IGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNCB8ICAg ICB8IGFhYWFhYWEgfCBhYWFhICAgIHwgICAgICB8ICAgICAgICAgfCBhYWFhYWFhIHwgImFhYWFh YWEiICAgIHwgImFhYWFhYWEiCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVs bCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA1IHwg ICAgIHwgZm9vICAgICB8IGZvbyAgICAgfCAgICAgIHwgICAgICAgICB8ICAgICAgICAgfCAiZm9v IiAgICAgICAgfCAiZm9vIgorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGws IGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNiB8ICAg ICB8ICAgICAgICAgfCAgICAgICAgIHwgICAgICB8ICAgICAgICAgfCAgICAgICAgIHwgbnVsbCAg ICAgICAgIHwgbnVsbAorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZh bHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNyB8ICAgMCB8 IGZhbHNlICAgfCBmYWxzICAgIHwgZiAgICB8ICAgICAgICAgfCBmYWxzZSAgIHwgZmFsc2UgICAg ICAgIHwgZmFsc2UKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxz ZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDggfCAgIDEgfCB0 cnVlICAgIHwgdHJ1ZSAgICB8IHQgICAgfCAgICAgICAgIHwgdHJ1ZSAgICB8IHRydWUgICAgICAg ICB8IHRydWUKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwg dHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDkgfCAgICAgfCAgICAg ICAgIHwgICAgICAgICB8ICAgICAgfCAgICAgICAgIHwgICAgICAgICB8IHsiYWFhIjogMTIzfSB8 IHsiYWFhIjogMTIzfQorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZh bHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAxMCB8ICAgICB8 IFsxLDJdICAgfCBbMSwyICAgIHwgICAgICB8ICAgICAgICAgfCBbMSwyXSAgIHwgIlsxLDJdIiAg ICAgIHwgIlsxLDJdIgorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZh bHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAxMSB8ICAgICB8 ICJzdHIiICAgfCAic3RyICAgIHwgICAgICB8ICAgICAgICAgfCAic3RyIiAgIHwgIlwic3RyXCIi ICAgIHwgIlwic3RyXCIiCisoMTQgcm93cykKKworLS0gImZvcm1hdHRlZCIgY29sdW1ucworU0VM RUNUICoKK0ZST00ganNvbl90YWJsZV90ZXN0IHZhbHMKKwlMRUZUIE9VVEVSIEpPSU4KKwlKU09O X1RBQkxFKAorCQl2YWxzLmpzOjpqc29uYiwgJ2xheCAkWypdJworCQlDT0xVTU5TICgKKwkJCWlk IEZPUiBPUkRJTkFMSVRZLAorCQkJanN0IHRleHQgICAgRk9STUFUIEpTT04gIFBBVEggJyQnLAor CQkJanNjIGNoYXIoNCkgRk9STUFUIEpTT04gIFBBVEggJyQnLAorCQkJanN2IHZhcmNoYXIoNCkg Rk9STUFUIEpTT04gIFBBVEggJyQnLAorCQkJanNiIGpzb25iIEZPUk1BVCBKU09OIFBBVEggJyQn LAorCQkJanNicSBqc29uYiBGT1JNQVQgSlNPTiBQQVRIICckJyBPTUlUIFFVT1RFUworCQkpCisJ KSBqdAorCU9OIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBqcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlkIHwgICAg IGpzdCAgICAgIHwganNjICB8IGpzdiAgfCAgICAganNiICAgICAgfCAgICAganNicSAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0r LS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tCisgMSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAxIHwgMSAgICAgICAgICAgIHwgMSAgICB8IDEgICAgfCAxICAgICAgICAg ICAgfCAxCisgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwgICAgICAgICAgICAg IHwgICAgICB8ICAgICAgfCAgICAgICAgICAgICAgfCAKKyB7fSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgIDEgfCB7fSAgICAgICAgICAgfCB7fSAgIHwge30gICB8IHt9ICAgICAgICAgICB8 IHt9CisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUs IHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICAxIHwgMSAgICAgICAgICAgIHwg MSAgICB8IDEgICAgfCAxICAgICAgICAgICAgfCAxCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEi LCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3Ry XCIiXSB8ICAyIHwgMS4yMyAgICAgICAgIHwgMS4yMyB8IDEuMjMgfCAxLjIzICAgICAgICAgfCAx LjIzCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUs IHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICAzIHwgIjIiICAgICAgICAgIHwg IjIiICB8ICIyIiAgfCAiMiIgICAgICAgICAgfCAyCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEi LCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3Ry XCIiXSB8ICA0IHwgImFhYWFhYWEiICAgIHwgImFhYSB8ICJhYWEgfCAiYWFhYWFhYSIgICAgfCAK KyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJh YWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDUgfCAiZm9vIiAgICAgICAgfCAiZm9v IHwgImZvbyB8ICJmb28iICAgICAgICB8IAorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZv byIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0g fCAgNiB8IG51bGwgICAgICAgICB8IG51bGwgfCBudWxsIHwgbnVsbCAgICAgICAgIHwgbnVsbAor IFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFh YSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNyB8IGZhbHNlICAgICAgICB8IGZhbHMg fCBmYWxzIHwgZmFsc2UgICAgICAgIHwgZmFsc2UKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIs ICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJc IiJdIHwgIDggfCB0cnVlICAgICAgICAgfCB0cnVlIHwgdHJ1ZSB8IHRydWUgICAgICAgICB8IHRy dWUKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwg eyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDkgfCB7ImFhYSI6IDEyM30gfCB7 ImFhIHwgeyJhYSB8IHsiYWFhIjogMTIzfSB8IHsiYWFhIjogMTIzfQorIFsxLCAxLjIzLCAiMiIs ICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwy XSIsICJcInN0clwiIl0gfCAxMCB8ICJbMSwyXSIgICAgICB8ICJbMSwgfCAiWzEsIHwgIlsxLDJd IiAgICAgIHwgWzEsIDJdCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwg ZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8IDExIHwgIlwi c3RyXCIiICAgIHwgIlwicyB8ICJcInMgfCAiXCJzdHJcIiIgICAgfCAic3RyIgorKDE0IHJvd3Mp CisKKy0tIEVYSVNUUyBjb2x1bW5zCitTRUxFQ1QgKgorRlJPTSBqc29uX3RhYmxlX3Rlc3QgdmFs cworCUxFRlQgT1VURVIgSk9JTgorCUpTT05fVEFCTEUoCisJCXZhbHMuanM6Ompzb25iLCAnbGF4 ICRbKl0nCisJCUNPTFVNTlMgKAorCQkJaWQgRk9SIE9SRElOQUxJVFksCisJCQlleGlzdHMxIGJv b2wgRVhJU1RTIFBBVEggJyQuYWFhJywKKwkJCWV4aXN0czIgaW50IEVYSVNUUyBQQVRIICckLmFh YScsCisJCQlleGlzdHMzIGludCBFWElTVFMgUEFUSCAnc3RyaWN0ICQuYWFhJyBVTktOT1dOIE9O IEVSUk9SLAorCQkJZXhpc3RzNCB0ZXh0IEVYSVNUUyBQQVRIICdzdHJpY3QgJC5hYWEnIEZBTFNF IE9OIEVSUk9SCisJCSkKKwkpIGp0CisJT04gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGpzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgaWQgfCBleGlzdHMxIHwgZXhpc3RzMiB8IGV4aXN0czMgfCBleGlzdHM0IAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tCisgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxIHwgZiAg ICAgICB8ICAgICAgIDAgfCAgICAgICAgIHwgZmFsc2UKKyBbXSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgfCAKKyB7fSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgIDEgfCBmICAgICAgIHwgICAgICAgMCB8ICAgICAgICAgfCBm YWxzZQorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVl LCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgMSB8IGYgICAgICAgfCAgICAg ICAwIHwgICAgICAgICB8IGZhbHNlCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwg bnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICAy IHwgZiAgICAgICB8ICAgICAgIDAgfCAgICAgICAgIHwgZmFsc2UKKyBbMSwgMS4yMywgIjIiLCAi YWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0i LCAiXCJzdHJcIiJdIHwgIDMgfCBmICAgICAgIHwgICAgICAgMCB8ICAgICAgICAgfCBmYWxzZQor IFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFh YSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNCB8IGYgICAgICAgfCAgICAgICAwIHwg ICAgICAgICB8IGZhbHNlCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwg ZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA1IHwgZiAg ICAgICB8ICAgICAgIDAgfCAgICAgICAgIHwgZmFsc2UKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFh YSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJz dHJcIiJdIHwgIDYgfCBmICAgICAgIHwgICAgICAgMCB8ICAgICAgICAgfCBmYWxzZQorIFsxLCAx LjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEy M30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNyB8IGYgICAgICAgfCAgICAgICAwIHwgICAgICAg ICB8IGZhbHNlCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2Us IHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA4IHwgZiAgICAgICB8 ICAgICAgIDAgfCAgICAgICAgIHwgZmFsc2UKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJm b28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJd IHwgIDkgfCB0ICAgICAgIHwgICAgICAgMSB8ICAgICAgIDEgfCB0cnVlCisgWzEsIDEuMjMsICIy IiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsx LDJdIiwgIlwic3RyXCIiXSB8IDEwIHwgZiAgICAgICB8ICAgICAgIDAgfCAgICAgICAgIHwgZmFs c2UKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwg eyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgMTEgfCBmICAgICAgIHwgICAgICAg MCB8ICAgICAgICAgfCBmYWxzZQorKDE0IHJvd3MpCisKKy0tIE90aGVyIG1pc2NlbGxhbm91cyBj aGVja3MKK1NFTEVDVCAqCitGUk9NIGpzb25fdGFibGVfdGVzdCB2YWxzCisJTEVGVCBPVVRFUiBK T0lOCisJSlNPTl9UQUJMRSgKKwkJdmFscy5qczo6anNvbmIsICdsYXggJFsqXScKKwkJQ09MVU1O UyAoCisJCQlpZCBGT1IgT1JESU5BTElUWSwKKwkJCWFhYSBpbnQsIC0tICJhYWEiIGhhcyBpbXBs aWNpdCBwYXRoICckLiJhYWEiJworCQkJYWFhMSBpbnQgUEFUSCAnJC5hYWEnLAorCQkJanMyIGpz b24gUEFUSCAnJCcsCisJCQlqc2IydyBqc29uYiBQQVRIICckJyBXSVRIIFdSQVBQRVIsCisJCQlq c2IycSBqc29uYiBQQVRIICckJyBPTUlUIFFVT1RFUywKKwkJCWlhIGludFtdIFBBVEggJyQnLAor CQkJdGEgdGV4dFtdIFBBVEggJyQnLAorCQkJamJhIGpzb25iW10gUEFUSCAnJCcKKwkJKQorCSkg anQKKwlPTiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg anMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpZCB8IGFhYSB8 IGFhYTEgfCAgICAganMyICAgICAgfCAgICAganNiMncgICAgICB8ICAgIGpzYjJxICAgICB8IGlh IHwgdGEgfCBqYmEgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLSstLS0tLSst LS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0t Ky0tLS0rLS0tLS0KKyAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEgfCAgICAgfCAg ICAgIHwgMSAgICAgICAgICAgIHwgWzFdICAgICAgICAgICAgfCAxICAgICAgICAgICAgfCAgICB8 ICAgIHwgCisgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwgICAgIHwgICAgICB8 ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgfCAgICB8 IAorIHt9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMSB8ICAgICB8ICAgICAgfCB7fSAg ICAgICAgICAgfCBbe31dICAgICAgICAgICB8IHt9ICAgICAgICAgICB8ICAgIHwgICAgfCAKKyBb MSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEi OiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDEgfCAgICAgfCAgICAgIHwgMSAgICAgICAg ICAgIHwgWzFdICAgICAgICAgICAgfCAxICAgICAgICAgICAgfCAgICB8ICAgIHwgCisgWzEsIDEu MjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIz fSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICAyIHwgICAgIHwgICAgICB8IDEuMjMgICAgICAgICB8 IFsxLjIzXSAgICAgICAgIHwgMS4yMyAgICAgICAgIHwgICAgfCAgICB8IAorIFsxLCAxLjIzLCAi MiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJb MSwyXSIsICJcInN0clwiIl0gfCAgMyB8ICAgICB8ICAgICAgfCAiMiIgICAgICAgICAgfCBbIjIi XSAgICAgICAgICB8IDIgICAgICAgICAgICB8ICAgIHwgICAgfCAKKyBbMSwgMS4yMywgIjIiLCAi YWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0i LCAiXCJzdHJcIiJdIHwgIDQgfCAgICAgfCAgICAgIHwgImFhYWFhYWEiICAgIHwgWyJhYWFhYWFh Il0gICAgfCAgICAgICAgICAgICAgfCAgICB8ICAgIHwgCisgWzEsIDEuMjMsICIyIiwgImFhYWFh YWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwi c3RyXCIiXSB8ICA1IHwgICAgIHwgICAgICB8ICJmb28iICAgICAgICB8IFsiZm9vIl0gICAgICAg IHwgICAgICAgICAgICAgIHwgICAgfCAgICB8IAorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwg ImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwi Il0gfCAgNiB8ICAgICB8ICAgICAgfCBudWxsICAgICAgICAgfCBbbnVsbF0gICAgICAgICB8IG51 bGwgICAgICAgICB8ICAgIHwgICAgfCAKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28i LCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwg IDcgfCAgICAgfCAgICAgIHwgZmFsc2UgICAgICAgIHwgW2ZhbHNlXSAgICAgICAgfCBmYWxzZSAg ICAgICAgfCAgICB8ICAgIHwgCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVs bCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA4IHwg ICAgIHwgICAgICB8IHRydWUgICAgICAgICB8IFt0cnVlXSAgICAgICAgIHwgdHJ1ZSAgICAgICAg IHwgICAgfCAgICB8IAorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZh bHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgOSB8IDEyMyB8 ICAxMjMgfCB7ImFhYSI6IDEyM30gfCBbeyJhYWEiOiAxMjN9XSB8IHsiYWFhIjogMTIzfSB8ICAg IHwgICAgfCAKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwg dHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgMTAgfCAgICAgfCAgICAg IHwgIlsxLDJdIiAgICAgIHwgWyJbMSwyXSJdICAgICAgfCBbMSwgMl0gICAgICAgfCAgICB8ICAg IHwgCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUs IHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8IDExIHwgICAgIHwgICAgICB8ICJc InN0clwiIiAgICB8IFsiXCJzdHJcIiJdICAgIHwgInN0ciIgICAgICAgIHwgICAgfCAgICB8IAor KDE0IHJvd3MpCisKKy0tIEpTT05fVEFCTEU6IFRlc3QgYmFja3dhcmQgcGFyc2luZworQ1JFQVRF IFZJRVcganNvbmJfdGFibGVfdmlldyBBUworU0VMRUNUICogRlJPTQorCUpTT05fVEFCTEUoCisJ CWpzb25iICdudWxsJywgJ2xheCAkWypdJyBQQVNTSU5HIDEgKyAyIEFTIGEsIGpzb24gJyJmb28i JyBBUyAiYiBjIgorCQlDT0xVTU5TICgKKwkJCWlkIEZPUiBPUkRJTkFMSVRZLAorCQkJImludCIg aW50IFBBVEggJyQnLAorCQkJInRleHQiIHRleHQgUEFUSCAnJCcsCisJCQkiY2hhcig0KSIgY2hh cig0KSBQQVRIICckJywKKwkJCSJib29sIiBib29sIFBBVEggJyQnLAorCQkJIm51bWVyaWMiIG51 bWVyaWMgUEFUSCAnJCcsCisJCQkiZG9tYWluIiBqc29uYl90ZXN0X2RvbWFpbiBQQVRIICckJywK KwkJCWpzIGpzb24gUEFUSCAnJCcsCisJCQlqYiBqc29uYiBQQVRIICckJywKKwkJCWpzdCB0ZXh0 ICAgIEZPUk1BVCBKU09OICBQQVRIICckJywKKwkJCWpzYyBjaGFyKDQpIEZPUk1BVCBKU09OICBQ QVRIICckJywKKwkJCWpzdiB2YXJjaGFyKDQpIEZPUk1BVCBKU09OICBQQVRIICckJywKKwkJCWpz YiBqc29uYiAgIEZPUk1BVCBKU09OIFBBVEggJyQnLAorCQkJanNicSBqc29uYiBGT1JNQVQgSlNP TiBQQVRIICckJyBPTUlUIFFVT1RFUywKKwkJCWFhYSBpbnQsIC0tIGltcGxpY2l0IHBhdGggJyQu ImFhYSInLAorCQkJYWFhMSBpbnQgUEFUSCAnJC5hYWEnLAorCQkJZXhpc3RzMSBib29sIEVYSVNU UyBQQVRIICckLmFhYScsCisJCQlleGlzdHMyIGludCBFWElTVFMgUEFUSCAnJC5hYWEnIFRSVUUg T04gRVJST1IsCisJCQlleGlzdHMzIHRleHQgRVhJU1RTIFBBVEggJ3N0cmljdCAkLmFhYScgVU5L Tk9XTiBPTiBFUlJPUiwKKwkJCWpzMiBqc29uIFBBVEggJyQnLAorCQkJanNiMncganNvbmIgUEFU SCAnJCcgV0lUSCBXUkFQUEVSLAorCQkJanNiMnEganNvbmIgUEFUSCAnJCcgT01JVCBRVU9URVMs CisJCQlpYSBpbnRbXSBQQVRIICckJywKKwkJCXRhIHRleHRbXSBQQVRIICckJywKKwkJCWpiYSBq c29uYltdIFBBVEggJyQnLAorCQkJTkVTVEVEIFBBVEggJyRbMV0nIEFTIHAxIENPTFVNTlMgKAor CQkJCWExIGludCwKKwkJCQlORVNURUQgUEFUSCAnJFsqXScgQVMgInAxIDEiIENPTFVNTlMgKAor CQkJCQlhMTEgdGV4dAorCQkJCSksCisJCQkJYjEgdGV4dAorCQkJKSwKKwkJCU5FU1RFRCBQQVRI ICckWzJdJyBBUyBwMiBDT0xVTU5TICgKKwkJCQlORVNURUQgUEFUSCAnJFsqXScgQVMgInAyOjEi IENPTFVNTlMgKAorCQkJCQlhMjEgdGV4dAorCQkJCSksCisJCQkJTkVTVEVEIFBBVEggJyRbKl0n IEFTIHAyMiBDT0xVTU5TICgKKwkJCQkJYTIyIHRleHQKKwkJCQkpCisJCQkpCisJCSkKKwkpOwor XHN2IGpzb25iX3RhYmxlX3ZpZXcKK0NSRUFURSBPUiBSRVBMQUNFIFZJRVcgcHVibGljLmpzb25i X3RhYmxlX3ZpZXcgQVMKKyBTRUxFQ1QgaWQsCisgICAgImludCIsCisgICAgdGV4dCwKKyAgICAi Y2hhcig0KSIsCisgICAgYm9vbCwKKyAgICAibnVtZXJpYyIsCisgICAgZG9tYWluLAorICAgIGpz LAorICAgIGpiLAorICAgIGpzdCwKKyAgICBqc2MsCisgICAganN2LAorICAgIGpzYiwKKyAgICBq c2JxLAorICAgIGFhYSwKKyAgICBhYWExLAorICAgIGV4aXN0czEsCisgICAgZXhpc3RzMiwKKyAg ICBleGlzdHMzLAorICAgIGpzMiwKKyAgICBqc2IydywKKyAgICBqc2IycSwKKyAgICBpYSwKKyAg ICB0YSwKKyAgICBqYmEsCisgICAgYTEsCisgICAgYjEsCisgICAgYTExLAorICAgIGEyMSwKKyAg ICBhMjIKKyAgIEZST00gSlNPTl9UQUJMRSgKKyAgICAgICAgICAgICdudWxsJzo6anNvbmIsICck WypdJyBBUyBqc29uX3RhYmxlX3BhdGhfMAorICAgICAgICAgICAgUEFTU0lORworICAgICAgICAg ICAgICAgIDEgKyAyIEFTIGEsCisgICAgICAgICAgICAgICAgJyJmb28iJzo6anNvbiBBUyAiYiBj IgorICAgICAgICAgICAgQ09MVU1OUyAoCisgICAgICAgICAgICAgICAgaWQgRk9SIE9SRElOQUxJ VFksCisgICAgICAgICAgICAgICAgImludCIgaW50ZWdlciBQQVRIICckJywKKyAgICAgICAgICAg ICAgICB0ZXh0IHRleHQgUEFUSCAnJCcsCisgICAgICAgICAgICAgICAgImNoYXIoNCkiIGNoYXJh Y3Rlcig0KSBQQVRIICckJywKKyAgICAgICAgICAgICAgICBib29sIGJvb2xlYW4gUEFUSCAnJCcs CisgICAgICAgICAgICAgICAgIm51bWVyaWMiIG51bWVyaWMgUEFUSCAnJCcsCisgICAgICAgICAg ICAgICAgZG9tYWluIGpzb25iX3Rlc3RfZG9tYWluIFBBVEggJyQnLAorICAgICAgICAgICAgICAg IGpzIGpzb24gUEFUSCAnJCcsCisgICAgICAgICAgICAgICAgamIganNvbmIgUEFUSCAnJCcsCisg ICAgICAgICAgICAgICAganN0IHRleHQgRk9STUFUIEpTT04gUEFUSCAnJCcsCisgICAgICAgICAg ICAgICAganNjIGNoYXJhY3Rlcig0KSBGT1JNQVQgSlNPTiBQQVRIICckJywKKyAgICAgICAgICAg ICAgICBqc3YgY2hhcmFjdGVyIHZhcnlpbmcoNCkgRk9STUFUIEpTT04gUEFUSCAnJCcsCisgICAg ICAgICAgICAgICAganNiIGpzb25iIFBBVEggJyQnLAorICAgICAgICAgICAgICAgIGpzYnEganNv bmIgUEFUSCAnJCcgT01JVCBRVU9URVMsCisgICAgICAgICAgICAgICAgYWFhIGludGVnZXIgUEFU SCAnJC4iYWFhIicsCisgICAgICAgICAgICAgICAgYWFhMSBpbnRlZ2VyIFBBVEggJyQuImFhYSIn LAorICAgICAgICAgICAgICAgIGV4aXN0czEgYm9vbGVhbiBFWElTVFMgUEFUSCAnJC4iYWFhIics CisgICAgICAgICAgICAgICAgZXhpc3RzMiBpbnRlZ2VyIEVYSVNUUyBQQVRIICckLiJhYWEiJyBU UlVFIE9OIEVSUk9SLAorICAgICAgICAgICAgICAgIGV4aXN0czMgdGV4dCBFWElTVFMgUEFUSCAn c3RyaWN0ICQuImFhYSInIFVOS05PV04gT04gRVJST1IsCisgICAgICAgICAgICAgICAganMyIGpz b24gUEFUSCAnJCcsCisgICAgICAgICAgICAgICAganNiMncganNvbmIgUEFUSCAnJCcgV0lUSCBV TkNPTkRJVElPTkFMIFdSQVBQRVIsCisgICAgICAgICAgICAgICAganNiMnEganNvbmIgUEFUSCAn JCcgT01JVCBRVU9URVMsCisgICAgICAgICAgICAgICAgaWEgaW50ZWdlcltdIFBBVEggJyQnLAor ICAgICAgICAgICAgICAgIHRhIHRleHRbXSBQQVRIICckJywKKyAgICAgICAgICAgICAgICBqYmEg anNvbmJbXSBQQVRIICckJywKKyAgICAgICAgICAgICAgICBORVNURUQgUEFUSCAnJFsxXScgQVMg cDEKKyAgICAgICAgICAgICAgICBDT0xVTU5TICgKKyAgICAgICAgICAgICAgICAgICAgYTEgaW50 ZWdlciBQQVRIICckLiJhMSInLAorICAgICAgICAgICAgICAgICAgICBiMSB0ZXh0IFBBVEggJyQu ImIxIicsCisgICAgICAgICAgICAgICAgICAgIE5FU1RFRCBQQVRIICckWypdJyBBUyAicDEgMSIK KyAgICAgICAgICAgICAgICAgICAgQ09MVU1OUyAoCisgICAgICAgICAgICAgICAgICAgICAgICBh MTEgdGV4dCBQQVRIICckLiJhMTEiJworICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAg ICAgICAgKSwKKyAgICAgICAgICAgICAgICBORVNURUQgUEFUSCAnJFsyXScgQVMgcDIKKyAgICAg ICAgICAgICAgICBDT0xVTU5TICgKKyAgICAgICAgICAgICAgICAgICAgTkVTVEVEIFBBVEggJyRb Kl0nIEFTICJwMjoxIgorICAgICAgICAgICAgICAgICAgICBDT0xVTU5TICgKKyAgICAgICAgICAg ICAgICAgICAgICAgIGEyMSB0ZXh0IFBBVEggJyQuImEyMSInCisgICAgICAgICAgICAgICAgICAg ICksCisgICAgICAgICAgICAgICAgICAgIE5FU1RFRCBQQVRIICckWypdJyBBUyBwMjIKKyAgICAg ICAgICAgICAgICAgICAgQ09MVU1OUyAoCisgICAgICAgICAgICAgICAgICAgICAgICBhMjIgdGV4 dCBQQVRIICckLiJhMjIiJworICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAg KQorICAgICAgICAgICAgKQorICAgICAgICAgICAgUExBTiAoanNvbl90YWJsZV9wYXRoXzAgT1VU RVIgKChwMSBPVVRFUiAicDEgMSIpIFVOSU9OIChwMiBPVVRFUiAoInAyOjEiIFVOSU9OIHAyMikp KSkKKyAgICAgICAgKQorRVhQTEFJTiAoQ09TVFMgT0ZGLCBWRVJCT1NFKSBTRUxFQ1QgKiBGUk9N IGpzb25iX3RhYmxlX3ZpZXc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUYWJsZSBGdW5jdGlvbiBTY2Fu IG9uICJKU09OX1RBQkxFIiAianNvbl90YWJsZSIKKyAgIE91dHB1dDogImpzb25fdGFibGUiLmlk LCAianNvbl90YWJsZSIuImludCIsICJqc29uX3RhYmxlIi50ZXh0LCAianNvbl90YWJsZSIuImNo YXIoNCkiLCAianNvbl90YWJsZSIuYm9vbCwgImpzb25fdGFibGUiLiJudW1lcmljIiwgImpzb25f dGFibGUiLmRvbWFpbiwgImpzb25fdGFibGUiLmpzLCAianNvbl90YWJsZSIuamIsICJqc29uX3Rh YmxlIi5qc3QsICJqc29uX3RhYmxlIi5qc2MsICJqc29uX3RhYmxlIi5qc3YsICJqc29uX3RhYmxl Ii5qc2IsICJqc29uX3RhYmxlIi5qc2JxLCAianNvbl90YWJsZSIuYWFhLCAianNvbl90YWJsZSIu YWFhMSwgImpzb25fdGFibGUiLmV4aXN0czEsICJqc29uX3RhYmxlIi5leGlzdHMyLCAianNvbl90 YWJsZSIuZXhpc3RzMywgImpzb25fdGFibGUiLmpzMiwgImpzb25fdGFibGUiLmpzYjJ3LCAianNv bl90YWJsZSIuanNiMnEsICJqc29uX3RhYmxlIi5pYSwgImpzb25fdGFibGUiLnRhLCAianNvbl90 YWJsZSIuamJhLCAianNvbl90YWJsZSIuYTEsICJqc29uX3RhYmxlIi5iMSwgImpzb25fdGFibGUi LmExMSwgImpzb25fdGFibGUiLmEyMSwgImpzb25fdGFibGUiLmEyMgorICAgVGFibGUgRnVuY3Rp b24gQ2FsbDogSlNPTl9UQUJMRSgnbnVsbCc6Ompzb25iLCAnJFsqXScgQVMganNvbl90YWJsZV9w YXRoXzAgUEFTU0lORyAzIEFTIGEsICciZm9vIic6Ompzb25iIEFTICJiIGMiIENPTFVNTlMgKGlk IEZPUiBPUkRJTkFMSVRZLCAiaW50IiBpbnRlZ2VyIFBBVEggJyQnLCB0ZXh0IHRleHQgUEFUSCAn JCcsICJjaGFyKDQpIiBjaGFyYWN0ZXIoNCkgUEFUSCAnJCcsIGJvb2wgYm9vbGVhbiBQQVRIICck JywgIm51bWVyaWMiIG51bWVyaWMgUEFUSCAnJCcsIGRvbWFpbiBqc29uYl90ZXN0X2RvbWFpbiBQ QVRIICckJywganMganNvbiBQQVRIICckJywgamIganNvbmIgUEFUSCAnJCcsIGpzdCB0ZXh0IEZP Uk1BVCBKU09OIFBBVEggJyQnLCBqc2MgY2hhcmFjdGVyKDQpIEZPUk1BVCBKU09OIFBBVEggJyQn LCBqc3YgY2hhcmFjdGVyIHZhcnlpbmcoNCkgRk9STUFUIEpTT04gUEFUSCAnJCcsIGpzYiBqc29u YiBQQVRIICckJywganNicSBqc29uYiBQQVRIICckJyBPTUlUIFFVT1RFUywgYWFhIGludGVnZXIg UEFUSCAnJC4iYWFhIicsIGFhYTEgaW50ZWdlciBQQVRIICckLiJhYWEiJywgZXhpc3RzMSBib29s ZWFuIEVYSVNUUyBQQVRIICckLiJhYWEiJywgZXhpc3RzMiBpbnRlZ2VyIEVYSVNUUyBQQVRIICck LiJhYWEiJyBUUlVFIE9OIEVSUk9SLCBleGlzdHMzIHRleHQgRVhJU1RTIFBBVEggJ3N0cmljdCAk LiJhYWEiJyBVTktOT1dOIE9OIEVSUk9SLCBqczIganNvbiBQQVRIICckJywganNiMncganNvbmIg UEFUSCAnJCcgV0lUSCBVTkNPTkRJVElPTkFMIFdSQVBQRVIsIGpzYjJxIGpzb25iIFBBVEggJyQn IE9NSVQgUVVPVEVTLCBpYSBpbnRlZ2VyW10gUEFUSCAnJCcsIHRhIHRleHRbXSBQQVRIICckJywg amJhIGpzb25iW10gUEFUSCAnJCcsIE5FU1RFRCBQQVRIICckWzFdJyBBUyBwMSBDT0xVTU5TIChh MSBpbnRlZ2VyIFBBVEggJyQuImExIicsIGIxIHRleHQgUEFUSCAnJC4iYjEiJywgTkVTVEVEIFBB VEggJyRbKl0nIEFTICJwMSAxIiBDT0xVTU5TIChhMTEgdGV4dCBQQVRIICckLiJhMTEiJykpLCBO RVNURUQgUEFUSCAnJFsyXScgQVMgcDIgQ09MVU1OUyAoIE5FU1RFRCBQQVRIICckWypdJyBBUyAi cDI6MSIgQ09MVU1OUyAoYTIxIHRleHQgUEFUSCAnJC4iYTIxIicpLCBORVNURUQgUEFUSCAnJFsq XScgQVMgcDIyIENPTFVNTlMgKGEyMiB0ZXh0IFBBVEggJyQuImEyMiInKSkpIFBMQU4gKGpzb25f dGFibGVfcGF0aF8wIE9VVEVSICgocDEgT1VURVIgInAxIDEiKSBVTklPTiAocDIgT1VURVIgKCJw MjoxIiBVTklPTiBwMjIpKSkpKQorKDMgcm93cykKKworLS0gSlNPTl9UQUJMRSgpIHdpdGggYWxp YXMKK0VYUExBSU4gKENPU1RTIE9GRiwgVkVSQk9TRSkKK1NFTEVDVCAqIEZST00KKwlKU09OX1RB QkxFKAorCQlqc29uYiAnbnVsbCcsICdsYXggJFsqXScgUEFTU0lORyAxICsgMiBBUyBhLCBqc29u ICciZm9vIicgQVMgImIgYyIKKwkJQ09MVU1OUyAoCisJCQlpZCBGT1IgT1JESU5BTElUWSwKKwkJ CSJpbnQiIGludCBQQVRIICckJywKKwkJCSJ0ZXh0IiB0ZXh0IFBBVEggJyQnCisJKSkganNvbl90 YWJsZV9mdW5jOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUYWJsZSBG dW5jdGlvbiBTY2FuIG9uICJKU09OX1RBQkxFIiBqc29uX3RhYmxlX2Z1bmMKKyAgIE91dHB1dDog aWQsICJpbnQiLCB0ZXh0CisgICBUYWJsZSBGdW5jdGlvbiBDYWxsOiBKU09OX1RBQkxFKCdudWxs Jzo6anNvbmIsICckWypdJyBBUyBqc29uX3RhYmxlX3BhdGhfMCBQQVNTSU5HIDMgQVMgYSwgJyJm b28iJzo6anNvbmIgQVMgImIgYyIgQ09MVU1OUyAoaWQgRk9SIE9SRElOQUxJVFksICJpbnQiIGlu dGVnZXIgUEFUSCAnJCcsIHRleHQgdGV4dCBQQVRIICckJykgUExBTiAoanNvbl90YWJsZV9wYXRo XzApKQorKDMgcm93cykKKworRFJPUCBWSUVXIGpzb25iX3RhYmxlX3ZpZXc7CitEUk9QIERPTUFJ TiBqc29uYl90ZXN0X2RvbWFpbjsKKy0tIEpTT05fVEFCTEU6IG9ubHkgb25lIEZPUiBPUkRJTkFM SVRZIGNvbHVtbnMgYWxsb3dlZAorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcxJywg JyQnIENPTFVNTlMgKGlkIEZPUiBPUkRJTkFMSVRZLCBpZDIgRk9SIE9SRElOQUxJVFksIGEgaW50 IFBBVEggJyQuYScgRVJST1IgT04gRU1QVFkpKSBqdDsKK0VSUk9SOiAgY2Fubm90IHVzZSBtb3Jl IHRoYW4gb25lIEZPUiBPUkRJTkFMSVRZIGNvbHVtbgorTElORSAxOiAuLi5fVEFCTEUoanNvbmIg JzEnLCAnJCcgQ09MVU1OUyAoaWQgRk9SIE9SRElOQUxJVFksIGlkMiBGT1IgT1IuLi4KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBe CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJzEnLCAnJCcgQ09MVU1OUyAoaWQgRk9S IE9SRElOQUxJVFksIGEgaW50IFBBVEggJyQnIEVSUk9SIE9OIEVNUFRZKSkganQ7CisgaWQgfCBh IAorLS0tLSstLS0KKyAgMSB8IDEKKygxIHJvdykKKworLS0gSlNPTl9UQUJMRTogT04gRU1QVFkv T04gRVJST1IgYmVoYXZpb3IKK1NFTEVDVCAqCitGUk9NCisJKFZBTFVFUyAoJzEnKSwgKCciZXJy IicpKSB2YWxzKGpzKSwKKwlKU09OX1RBQkxFKHZhbHMuanM6Ompzb25iLCAnJCcgQ09MVU1OUyAo YSBpbnQgUEFUSCAnJCcpKSBqdDsKKyAganMgICB8IGEgCistLS0tLS0tKy0tLQorIDEgICAgIHwg MQorICJlcnIiIHwgIAorKDIgcm93cykKKworU0VMRUNUICoKK0ZST00KKwkoVkFMVUVTICgnMScp LCAoJyJlcnIiJykpIHZhbHMoanMpCisJCUxFRlQgT1VURVIgSk9JTgorCUpTT05fVEFCTEUodmFs cy5qczo6anNvbmIsICckJyBDT0xVTU5TIChhIGludCBQQVRIICckJykgRVJST1IgT04gRVJST1Ip IGp0CisJCU9OIHRydWU7CitFUlJPUjogIGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGlu dGVnZXI6ICJlcnIiCitTRUxFQ1QgKgorRlJPTQorCShWQUxVRVMgKCcxJyksICgnImVyciInKSkg dmFscyhqcykKKwkJTEVGVCBPVVRFUiBKT0lOCisJSlNPTl9UQUJMRSh2YWxzLmpzOjpqc29uYiwg JyQnIENPTFVNTlMgKGEgaW50IFBBVEggJyQnIEVSUk9SIE9OIEVSUk9SKSkganQKKwkJT04gdHJ1 ZTsKK0VSUk9SOiAgaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgaW50ZWdlcjogImVyciIK K1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnMScsICckJyBDT0xVTU5TIChhIGludCBQ QVRIICckLmEnIEVSUk9SIE9OIEVNUFRZKSkganQ7CitFUlJPUjogIG5vIFNRTC9KU09OIGl0ZW0K K1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnMScsICckJyBDT0xVTU5TIChhIGludCBQ QVRIICdzdHJpY3QgJC5hJyBFUlJPUiBPTiBFTVBUWSkgRVJST1IgT04gRVJST1IpIGp0OworRVJS T1I6ICBqc29ucGF0aCBtZW1iZXIgYWNjZXNzb3IgY2FuIG9ubHkgYmUgYXBwbGllZCB0byBhbiBv YmplY3QKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnMScsICckJyBDT0xVTU5TIChh IGludCBQQVRIICdsYXggJC5hJyBFUlJPUiBPTiBFTVBUWSkgRVJST1IgT04gRVJST1IpIGp0Owor RVJST1I6ICBubyBTUUwvSlNPTiBpdGVtCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIg JyJhIicsICckJyBDT0xVTU5TIChhIGludCBQQVRIICckJyAgIERFRkFVTFQgMSBPTiBFTVBUWSBE RUZBVUxUIDIgT04gRVJST1IpKSBqdDsKKyBhIAorLS0tCisgMgorKDEgcm93KQorCitTRUxFQ1Qg KiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGludCBQQVRIICdz dHJpY3QgJC5hJyBERUZBVUxUIDEgT04gRU1QVFkgREVGQVVMVCAyIE9OIEVSUk9SKSkganQ7Cisg YSAKKy0tLQorIDIKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICci YSInLCAnJCcgQ09MVU1OUyAoYSBpbnQgUEFUSCAnbGF4ICQuYScgREVGQVVMVCAxIE9OIEVNUFRZ IERFRkFVTFQgMiBPTiBFUlJPUikpIGp0OworIGEgCistLS0KKyAxCisoMSByb3cpCisKKy0tIEpT T05fVEFCTEU6IEVYSVNUUyBQQVRIIHR5cGVzCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNv bmIgJyJhIicsICckJyBDT0xVTU5TIChhIGludDQgRVhJU1RTIFBBVEggJyQuYScpKTsKKyBhIAor LS0tCisgMAorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIics ICckJyBDT0xVTU5TIChhIGludDIgRVhJU1RTIFBBVEggJyQuYScpKTsKK0VSUk9SOiAgY2Fubm90 IGNhc3QgdHlwZSBib29sZWFuIHRvIHNtYWxsaW50CitMSU5FIDE6IC4uLkVMRUNUICogRlJPTSBK U09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBpbnQyIEVYSS4uLgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4K K1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgaW50 OCBFWElTVFMgUEFUSCAnJC5hJykpOworRVJST1I6ICBjYW5ub3QgY2FzdCB0eXBlIGJvb2xlYW4g dG8gYmlnaW50CitMSU5FIDE6IC4uLkVMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSIn LCAnJCcgQ09MVU1OUyAoYSBpbnQ4IEVYSS4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK1NFTEVDVCAqIEZST00gSlNPTl9U QUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgZmxvYXQ0IEVYSVNUUyBQQVRIICckLmEn KSk7CitFUlJPUjogIGNhbm5vdCBjYXN0IHR5cGUgYm9vbGVhbiB0byByZWFsCitMSU5FIDE6IC4u LkVMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBmbG9h dDQgRS4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF4KK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQn IENPTFVNTlMgKGEgY2hhcigzKSBFWElTVFMgUEFUSCAnJC5hJykpOworICBhICAKKy0tLS0tCisg ZmFsCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQn IENPTFVNTlMgKGEganNvbiBFWElTVFMgUEFUSCAnJC5hJykpOworRVJST1I6ICBjYW5ub3QgY2Fz dCB0eXBlIGJvb2xlYW4gdG8ganNvbgorTElORSAxOiAuLi5FTEVDVCAqIEZST00gSlNPTl9UQUJM RShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEganNvbiBFWEkuLi4KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitTRUxFQ1Qg KiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGpzb25iIEVYSVNU UyBQQVRIICckLmEnKSk7CitFUlJPUjogIGNhbm5vdCBjYXN0IHR5cGUgYm9vbGVhbiB0byBqc29u YgorTElORSAxOiAuLi5FTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENP TFVNTlMgKGEganNvbmIgRVguLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBeCistLSBKU09OX1RBQkxFOiBXUkFQUEVSL1FVT1RF UyBjbGF1c2VzIG9uIHNjYWxhciBjb2x1bW5zCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNv bmIgJyJ3b3JsZCInLCAnJCcgQ09MVU1OUyAoaXRlbSB0ZXh0IFBBVEggJyQnIEtFRVAgUVVPVEVT IE9OIFNDQUxBUiBTVFJJTkcpKTsKKyAgaXRlbSAgIAorLS0tLS0tLS0tCisgIndvcmxkIgorKDEg cm93KQorCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJ3b3JsZCInLCAnJCcgQ09M VU1OUyAoaXRlbSB0ZXh0IFBBVEggJyQnIE9NSVQgUVVPVEVTIE9OIFNDQUxBUiBTVFJJTkcpKTsK KyBpdGVtICAKKy0tLS0tLS0KKyB3b3JsZAorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIEpTT05f VEFCTEUoanNvbmIgJyJ3b3JsZCInLCAnJCcgQ09MVU1OUyAoaXRlbSB0ZXh0IEZPUk1BVCBKU09O IFBBVEggJyQnIEtFRVAgUVVPVEVTKSk7CisgIGl0ZW0gICAKKy0tLS0tLS0tLQorICJ3b3JsZCIK KygxIHJvdykKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcid29ybGQiJywgJyQn IENPTFVNTlMgKGl0ZW0gdGV4dCBGT1JNQVQgSlNPTiBQQVRIICckJyBPTUlUIFFVT1RFUykpOwor IGl0ZW0gIAorLS0tLS0tLQorIHdvcmxkCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gSlNPTl9U QUJMRShqc29uYiAnIndvcmxkIicsICckJyBDT0xVTU5TIChpdGVtIHRleHQgRk9STUFUIEpTT04g UEFUSCAnJCcgV0lUSE9VVCBXUkFQUEVSIEtFRVAgUVVPVEVTKSk7CisgIGl0ZW0gICAKKy0tLS0t LS0tLQorICJ3b3JsZCIKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25i ICcid29ybGQiJywgJyQnIENPTFVNTlMgKGl0ZW0gdGV4dCBQQVRIICckJyBXSVRIT1VUIFdSQVBQ RVIgT01JVCBRVU9URVMpKTsKKyBpdGVtICAKKy0tLS0tLS0KKyB3b3JsZAorKDEgcm93KQorCitT RUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJ3b3JsZCInLCAnJCcgQ09MVU1OUyAoaXRl bSB0ZXh0IEZPUk1BVCBKU09OIFBBVEggJyQnIFdJVEggV1JBUFBFUikpOworICAgaXRlbSAgICAK Ky0tLS0tLS0tLS0tCisgWyJ3b3JsZCJdCisoMSByb3cpCisKKy0tIEVycm9yOiBRVU9URVMgY2xh dXNlIG1lYW5pbmdsZXNzIHdoZW4gV0lUSCBXUkFQUEVSIGlzIHByZXNlbnQKK1NFTEVDVCAqIEZS T00gSlNPTl9UQUJMRShqc29uYiAnIndvcmxkIicsICckJyBDT0xVTU5TIChpdGVtIHRleHQgRk9S TUFUIEpTT04gUEFUSCAnJCcgV0lUSCBXUkFQUEVSIEtFRVAgUVVPVEVTKSk7CitFUlJPUjogIFNR TC9KU09OIFFVT1RFUyBiZWhhdmlvciBtdXN0IG5vdCBiZSBzcGVjaWZpZWQgd2hlbiBXSVRIIFdS QVBQRVIgaXMgdXNlZAorTElORSAxOiAuLi5UICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcid29y bGQiJywgJyQnIENPTFVNTlMgKGl0ZW0gdGV4dCAuLi4KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitTRUxFQ1QgKiBGUk9NIEpT T05fVEFCTEUoanNvbmIgJyJ3b3JsZCInLCAnJCcgQ09MVU1OUyAoaXRlbSB0ZXh0IFBBVEggJyQn IFdJVEggV1JBUFBFUiBPTUlUIFFVT1RFUykpOworRVJST1I6ICBTUUwvSlNPTiBRVU9URVMgYmVo YXZpb3IgbXVzdCBub3QgYmUgc3BlY2lmaWVkIHdoZW4gV0lUSCBXUkFQUEVSIGlzIHVzZWQKK0xJ TkUgMTogLi4uVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnIndvcmxkIicsICckJyBDT0xVTU5T IChpdGVtIHRleHQgLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXgorLS0gSlNPTl9UQUJMRTogbmVzdGVkIHBhdGhzIGFuZCBw bGFucworLS0gU2hvdWxkIGZhaWwgKEpTT05fVEFCTEUgY29sdW1ucyBtdXN0IGNvbnRhaW4gZXhw bGljaXQgQVMgcGF0aAorLS0gc3BlY2lmaWNhdGlvbnMgaWYgZXhwbGljaXQgUExBTiBjbGF1c2Ug aXMgdXNlZCkKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnW10nLCAnJCcgLS0g QVMgPHBhdGggbmFtZT4gcmVxdWlyZWQgaGVyZQorCUNPTFVNTlMgKAorCQlmb28gaW50IFBBVEgg JyQnCisJKQorCVBMQU4gREVGQVVMVCAoVU5JT04pCispIGp0OworRVJST1I6ICBpbnZhbGlkIEpT T05fVEFCTEUgZXhwcmVzc2lvbgorTElORSAyOiAganNvbmIgJ1tdJywgJyQnIC0tIEFTIDxwYXRo IG5hbWU+IHJlcXVpcmVkIGhlcmUKKyAgICAgICAgICAgICAgICAgICAgIF4KK0RFVEFJTDogIEpT T05fVEFCTEUgcGF0aCBtdXN0IGNvbnRhaW4gZXhwbGljaXQgQVMgcGF0aG5hbWUgc3BlY2lmaWNh dGlvbiBpZiBleHBsaWNpdCBQTEFOIGNsYXVzZSBpcyB1c2VkCitTRUxFQ1QgKiBGUk9NIEpTT05f VEFCTEUoCisJanNvbmIgJ1tdJywgJyQnIEFTIHBhdGgxCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQ QVRIICckJyBDT0xVTU5TICggLS0gQVMgPHBhdGggbmFtZT4gcmVxdWlyZWQgaGVyZQorCQkJZm9v IGludCBQQVRIICckJworCQkpCisJKQorCVBMQU4gREVGQVVMVCAoVU5JT04pCispIGp0OworRVJS T1I6ICBpbnZhbGlkIEpTT05fVEFCTEUgZXhwcmVzc2lvbgorTElORSA0OiAgIE5FU1RFRCBQQVRI ICckJyBDT0xVTU5TICggLS0gQVMgPHBhdGggbmFtZT4gcmVxdWlyZWQgaGVyZQorICAgICAgICAg IF4KK0RFVEFJTDogIEpTT05fVEFCTEUgcGF0aCBtdXN0IGNvbnRhaW4gZXhwbGljaXQgQVMgcGF0 aG5hbWUgc3BlY2lmaWNhdGlvbiBpZiBleHBsaWNpdCBQTEFOIGNsYXVzZSBpcyB1c2VkCistLSBT aG91bGQgZmFpbCAoY29sdW1uIG5hbWVzIG11c3QgYmUgZGlzdGluY3QpCitTRUxFQ1QgKiBGUk9N IEpTT05fVEFCTEUoCisJanNvbmIgJ1tdJywgJyQnIEFTIGEKKwlDT0xVTU5TICgKKwkJYSBpbnQK KwkpCispIGp0OworRVJST1I6ICBkdXBsaWNhdGUgSlNPTl9UQUJMRSBjb2x1bW4gbmFtZTogYQor TElORSA0OiAgIGEgaW50CisgICAgICAgICAgXgorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAor CWpzb25iICdbXScsICckJyBBUyBhCisJQ09MVU1OUyAoCisJCWIgaW50LAorCQlORVNURUQgUEFU SCAnJCcgQVMgYQorCQlDT0xVTU5TICgKKwkJCWMgaW50CisJCSkKKwkpCispIGp0OworRVJST1I6 ICBkdXBsaWNhdGUgSlNPTl9UQUJMRSBwYXRoIG5hbWU6IGEKK0xJTkUgNTogICBORVNURUQgUEFU SCAnJCcgQVMgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitTRUxFQ1QgKiBGUk9N IEpTT05fVEFCTEUoCisJanNvbmIgJ1tdJywgJyQnCisJQ09MVU1OUyAoCisJCWIgaW50LAorCQlO RVNURUQgUEFUSCAnJCcgQVMgYgorCQlDT0xVTU5TICgKKwkJCWMgaW50CisJCSkKKwkpCispIGp0 OworRVJST1I6ICBkdXBsaWNhdGUgSlNPTl9UQUJMRSBwYXRoIG5hbWU6IGIKK0xJTkUgNTogICBO RVNURUQgUEFUSCAnJCcgQVMgYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitTRUxF Q1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ1tdJywgJyQnCisJQ09MVU1OUyAoCisJCU5F U1RFRCBQQVRIICckJyBBUyBhCisJCUNPTFVNTlMgKAorCQkJYiBpbnQKKwkJKSwKKwkJTkVTVEVE IFBBVEggJyQnCisJCUNPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIGEKKwkJCUNPTFVN TlMgKAorCQkJCWMgaW50CisJCQkpCisJCSkKKwkpCispIGp0OworRVJST1I6ICBkdXBsaWNhdGUg SlNPTl9UQUJMRSBwYXRoIG5hbWU6IGEKK0xJTkUgMTA6ICAgIE5FU1RFRCBQQVRIICckJyBBUyBh CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLS0gSlNPTl9UQUJMRTogcGxhbiB2 YWxpZGF0aW9uCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsq XScgQVMgcDAKKwlDT0xVTU5TICgKKwkJTkVTVEVEICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5F U1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRI ICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcg QVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXog aW50ICkKKwkJKQorCSkKKwlQTEFOIChwMSkKKykganQ7CitFUlJPUjogIGludmFsaWQgSlNPTl9U QUJMRSBwbGFuCitMSU5FIDEyOiAgUExBTiAocDEpCisgICAgICAgICAgICAgICAgXgorREVUQUlM OiAgUEFUSCBuYW1lIG1pc21hdGNoOiBleHBlY3RlZCBwMCBidXQgcDEgaXMgZ2l2ZW4uCitTRUxF Q1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScgQVMgcDAKKwlDT0xV TU5TICgKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEgg JyQnIEFTIHAxMSBDT0xVTU5TICggZm9vIGludCApLAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAx MiBDT0xVTU5TICggYmFyIGludCApCisJCSksCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xV TU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQgKQorCQkp CisJKQorCVBMQU4gKHAwKQorKSBqdDsKK0VSUk9SOiAgaW52YWxpZCBKU09OX1RBQkxFIHNwZWNp ZmljYXRpb24KK0xJTkUgNDogICBORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisgICAg ICAgICAgXgorREVUQUlMOiAgUExBTiBjbGF1c2UgZm9yIG5lc3RlZCBwYXRoIHAxIHdhcyBub3Qg Zm91bmQuCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScg QVMgcDAKKwlDT0xVTU5TICgKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJ TkVTVEVEIFBBVEggJyQnIEFTIHAxMSBDT0xVTU5TICggZm9vIGludCApLAorCQkJTkVTVEVEIFBB VEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGludCApCisJCSksCisJCU5FU1RFRCBQQVRIICck JyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1OUyAoIGJh eiBpbnQgKQorCQkpCisJKQorCVBMQU4gKHAwIE9VVEVSIHAzKQorKSBqdDsKK0VSUk9SOiAgaW52 YWxpZCBKU09OX1RBQkxFIHNwZWNpZmljYXRpb24KK0xJTkUgNDogICBORVNURUQgUEFUSCAnJCcg QVMgcDEgQ09MVU1OUyAoCisgICAgICAgICAgXgorREVUQUlMOiAgUExBTiBjbGF1c2UgZm9yIG5l c3RlZCBwYXRoIHAxIHdhcyBub3QgZm91bmQuCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJ anNvbmIgJ251bGwnLCAnJFsqXScgQVMgcDAKKwlDT0xVTU5TICgKKwkJTkVTVEVEIFBBVEggJyQn IEFTIHAxIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMSBDT0xVTU5TICggZm9v IGludCApLAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGludCApCisJ CSksCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICck JyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQgKQorCQkpCisJKQorCVBMQU4gKHAwIFVOSU9OIHAx IFVOSU9OIHAxMSkKKykganQ7CitFUlJPUjogIGludmFsaWQgSlNPTl9UQUJMRSBwbGFuIGNsYXVz ZQorTElORSAxMjogIFBMQU4gKHAwIFVOSU9OIHAxIFVOSU9OIHAxMSkKKyAgICAgICAgICAgICAg ICBeCitERVRBSUw6ICBFeHBlY3RlZCBJTk5FUiBvciBPVVRFUi4KK1NFTEVDVCAqIEZST00gSlNP Tl9UQUJMRSgKKwlqc29uYiAnbnVsbCcsICckWypdJyBBUyBwMAorCUNPTFVNTlMgKAorCQlORVNU RUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENP TFVNTlMgKCBmb28gaW50ICksCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBi YXIgaW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVT VEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAo cDAgT1VURVIgKHAxIENST1NTIHAxMykpCispIGp0OworRVJST1I6ICBpbnZhbGlkIEpTT05fVEFC TEUgc3BlY2lmaWNhdGlvbgorTElORSA4OiAgIE5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xVTU5T ICgKKyAgICAgICAgICBeCitERVRBSUw6ICBQTEFOIGNsYXVzZSBmb3IgbmVzdGVkIHBhdGggcDIg d2FzIG5vdCBmb3VuZC4KK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnbnVsbCcs ICckWypdJyBBUyBwMAorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1O UyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJCQlO RVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVE IFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xV TU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAocDAgT1VURVIgKHAxIENST1NTIHAyKSkK KykganQ7CitFUlJPUjogIGludmFsaWQgSlNPTl9UQUJMRSBzcGVjaWZpY2F0aW9uCitMSU5FIDU6 ICAgIE5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKyAgICAgICAg ICAgXgorREVUQUlMOiAgUExBTiBjbGF1c2UgZm9yIG5lc3RlZCBwYXRoIHAxMSB3YXMgbm90IGZv dW5kLgorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdudWxsJywgJyRbKl0nIEFT IHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5F U1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRI ICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcg QVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXog aW50ICkKKwkJKQorCSkKKwlQTEFOIChwMCBPVVRFUiAoKHAxIFVOSU9OIHAxMSkgQ1JPU1MgcDIp KQorKSBqdDsKK0VSUk9SOiAgaW52YWxpZCBKU09OX1RBQkxFIHBsYW4gY2xhdXNlCitMSU5FIDEy OiAgUExBTiAocDAgT1VURVIgKChwMSBVTklPTiBwMTEpIENST1NTIHAyKSkKKyAgICAgICAgICAg ICAgICAgICAgICAgICBeCitERVRBSUw6ICBQTEFOIGNsYXVzZSBjb250YWlucyBzb21lIGV4dHJh IG9yIGR1cGxpY2F0ZSBzaWJsaW5nIG5vZGVzLgorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAor CWpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICck JyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZv byBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQor CQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAn JCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChwMCBPVVRFUiAo KHAxIElOTkVSIHAxMSkgQ1JPU1MgcDIpKQorKSBqdDsKK0VSUk9SOiAgaW52YWxpZCBKU09OX1RB QkxFIHNwZWNpZmljYXRpb24KK0xJTkUgNjogICAgTkVTVEVEIFBBVEggJyQnIEFTIHAxMiBDT0xV TU5TICggYmFyIGludCApCisgICAgICAgICAgIF4KK0RFVEFJTDogIFBMQU4gY2xhdXNlIGZvciBu ZXN0ZWQgcGF0aCBwMTIgd2FzIG5vdCBmb3VuZC4KK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgK Kwlqc29uYiAnbnVsbCcsICckWypdJyBBUyBwMAorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAn JCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBm b28gaW50ICksCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkK KwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEgg JyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAocDAgT1VURVIg KChwMSBJTk5FUiAocDEyIENST1NTIHAxMSkpIENST1NTIHAyKSkKKykganQ7CitFUlJPUjogIGlu dmFsaWQgSlNPTl9UQUJMRSBzcGVjaWZpY2F0aW9uCitMSU5FIDk6ICAgIE5FU1RFRCBQQVRIICck JyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQgKQorICAgICAgICAgICBeCitERVRBSUw6ICBQTEFO IGNsYXVzZSBmb3IgbmVzdGVkIHBhdGggcDIxIHdhcyBub3QgZm91bmQuCitTRUxFQ1QgKiBGUk9N IEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnc3RyaWN0ICRbKl0nIEFTIHAwCisJQ09MVU1O UyAoCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICck JyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIg Q09MVU1OUyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1O UyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQor CSkKKwlQTEFOIChwMCBPVVRFUiAoKHAxIElOTkVSIChwMTIgQ1JPU1MgcDExKSkgQ1JPU1MgKHAy IElOTkVSIHAyMSkpKQorKSBqdDsKKyBiYXIgfCBmb28gfCBiYXogCistLS0tLSstLS0tLSstLS0t LQorKDAgcm93cykKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdudWxsJywg J3N0cmljdCAkWypdJyAtLSB3aXRob3V0IHJvb3QgcGF0aCBuYW1lCisJQ09MVU1OUyAoCisJCU5F U1RFRCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEg Q09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAo IGJhciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlO RVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFO ICgocDEgSU5ORVIgKHAxMiBDUk9TUyBwMTEpKSBDUk9TUyAocDIgSU5ORVIgcDIxKSkKKykganQ7 CitFUlJPUjogIGludmFsaWQgSlNPTl9UQUJMRSBleHByZXNzaW9uCitMSU5FIDI6ICBqc29uYiAn bnVsbCcsICdzdHJpY3QgJFsqXScgLS0gd2l0aG91dCByb290IHBhdGggbmFtZQorICAgICAgICAg ICAgICAgICAgICAgICBeCitERVRBSUw6ICBKU09OX1RBQkxFIHBhdGggbXVzdCBjb250YWluIGV4 cGxpY2l0IEFTIHBhdGhuYW1lIHNwZWNpZmljYXRpb24gaWYgZXhwbGljaXQgUExBTiBjbGF1c2Ug aXMgdXNlZAorLS0gSlNPTl9UQUJMRTogcGxhbiBleGVjdXRpb24KK0NSRUFURSBURU1QIFRBQkxF IGpzb25iX3RhYmxlX3Rlc3QgKGpzIGpzb25iKTsKK0lOU0VSVCBJTlRPIGpzb25iX3RhYmxlX3Rl c3QKK1ZBTFVFUyAoCisJJ1sKKwkJeyJhIjogIDEsICAiYiI6IFtdLCAiYyI6IFtdfSwKKwkJeyJh IjogIDIsICAiYiI6IFsxLCAyLCAzXSwgImMiOiBbMTAsIG51bGwsIDIwXX0sCisJCXsiYSI6ICAz LCAgImIiOiBbMSwgMl0sICJjIjogW119LAorCQl7IngiOiAiNCIsICJiIjogWzEsIDJdLCAiYyI6 IDEyM30KKwkgXScKKyk7CistLSB1bnNwZWNpZmllZCBwbGFuIChvdXRlciwgdW5pb24pCitzZWxl Y3QKKwlqdC4qCitmcm9tCisJanNvbmJfdGFibGVfdGVzdCBqdHQsCisJanNvbl90YWJsZSAoCisJ CWp0dC5qcywnc3RyaWN0ICRbKl0nIGFzIHAKKwkJY29sdW1ucyAoCisJCQluIGZvciBvcmRpbmFs aXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZGVmYXVsdCAtMSBvbiBlbXB0eSwKKwkJCW5l c3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1bW5zICggYiBpbnQgcGF0aCAnJCcg KSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5jWypdJyBhcyBwYyBjb2x1bW5zICggYyBpbnQg cGF0aCAnJCcgKQorCQkpCisJKSBqdDsKKyBuIHwgYSAgfCBiIHwgYyAgCistLS0rLS0tLSstLS0r LS0tLQorIDEgfCAgMSB8ICAgfCAgIAorIDIgfCAgMiB8IDEgfCAgIAorIDIgfCAgMiB8IDIgfCAg IAorIDIgfCAgMiB8IDMgfCAgIAorIDIgfCAgMiB8ICAgfCAxMAorIDIgfCAgMiB8ICAgfCAgIAor IDIgfCAgMiB8ICAgfCAyMAorIDMgfCAgMyB8IDEgfCAgIAorIDMgfCAgMyB8IDIgfCAgIAorIDQg fCAtMSB8IDEgfCAgIAorIDQgfCAtMSB8IDIgfCAgIAorKDExIHJvd3MpCisKKy0tIGRlZmF1bHQg cGxhbiAob3V0ZXIsIHVuaW9uKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rl c3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNv bHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRl ZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIg Y29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sq XScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIGRlZmF1bHQg KG91dGVyLCB1bmlvbikKKwkpIGp0OworIG4gfCBhICB8IGIgfCBjICAKKy0tLSstLS0tKy0tLSst LS0tCisgMSB8ICAxIHwgICB8ICAgCisgMiB8ICAyIHwgMSB8IDEwCisgMiB8ICAyIHwgMSB8ICAg CisgMiB8ICAyIHwgMSB8IDIwCisgMiB8ICAyIHwgMiB8IDEwCisgMiB8ICAyIHwgMiB8ICAgCisg MiB8ICAyIHwgMiB8IDIwCisgMiB8ICAyIHwgMyB8IDEwCisgMiB8ICAyIHwgMyB8ICAgCisgMiB8 ICAyIHwgMyB8IDIwCisgMyB8ICAzIHwgICB8ICAgCisgNCB8IC0xIHwgICB8ICAgCisoMTIgcm93 cykKKworLS0gc3BlY2lmaWMgcGxhbiAocCBvdXRlciAocGIgdW5pb24gcGMpKQorc2VsZWN0CisJ anQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQu anMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwK KwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQg cGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJ CQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGgg JyQnICkKKwkJKQorCQlwbGFuIChwIG91dGVyIChwYiB1bmlvbiBwYykpCisJKSBqdDsKKyBuIHwg YSAgfCBiIHwgYyAgCistLS0rLS0tLSstLS0rLS0tLQorIDEgfCAgMSB8ICAgfCAgIAorIDIgfCAg MiB8IDEgfCAgIAorIDIgfCAgMiB8IDIgfCAgIAorIDIgfCAgMiB8IDMgfCAgIAorIDIgfCAgMiB8 ICAgfCAxMAorIDIgfCAgMiB8ICAgfCAgIAorIDIgfCAgMiB8ICAgfCAyMAorIDMgfCAgMyB8IDEg fCAgIAorIDMgfCAgMyB8IDIgfCAgIAorIDQgfCAtMSB8IDEgfCAgIAorIDQgfCAtMSB8IDIgfCAg IAorKDExIHJvd3MpCisKKy0tIHNwZWNpZmljIHBsYW4gKHAgb3V0ZXIgKHBjIHVuaW9uIHBiKSkK K3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxl ICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1bW5zICgKKwkJCW4gZm9yIG9y ZGluYWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAor CQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRo ICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBj IGludCBwYXRoICckJyApCisJCSkKKwkJcGxhbiAocCBvdXRlciAocGMgdW5pb24gcGIpKQorCSkg anQ7CisgbiB8IGEgIHwgYyAgfCBiIAorLS0tKy0tLS0rLS0tLSstLS0KKyAxIHwgIDEgfCAgICB8 ICAKKyAyIHwgIDIgfCAxMCB8ICAKKyAyIHwgIDIgfCAgICB8ICAKKyAyIHwgIDIgfCAyMCB8ICAK KyAyIHwgIDIgfCAgICB8IDEKKyAyIHwgIDIgfCAgICB8IDIKKyAyIHwgIDIgfCAgICB8IDMKKyAz IHwgIDMgfCAgICB8IDEKKyAzIHwgIDMgfCAgICB8IDIKKyA0IHwgLTEgfCAgICB8IDEKKyA0IHwg LTEgfCAgICB8IDIKKygxMSByb3dzKQorCistLSBkZWZhdWx0IHBsYW4gKGlubmVyLCB1bmlvbikK K3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxl ICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1bW5zICgKKwkJCW4gZm9yIG9y ZGluYWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAor CQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRo ICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBj IGludCBwYXRoICckJyApCisJCSkKKwkJcGxhbiBkZWZhdWx0IChpbm5lcikKKwkpIGp0OworIG4g fCBhICB8IGIgfCBjICAKKy0tLSstLS0tKy0tLSstLS0tCisgMSB8ICAxIHwgICB8ICAgCisgMiB8 ICAyIHwgMSB8IDEwCisgMiB8ICAyIHwgMSB8ICAgCisgMiB8ICAyIHwgMSB8IDIwCisgMiB8ICAy IHwgMiB8IDEwCisgMiB8ICAyIHwgMiB8ICAgCisgMiB8ICAyIHwgMiB8IDIwCisgMiB8ICAyIHwg MyB8IDEwCisgMiB8ICAyIHwgMyB8ICAgCisgMiB8ICAyIHwgMyB8IDIwCisgMyB8ICAzIHwgICB8 ICAgCisgNCB8IC0xIHwgICB8ICAgCisoMTIgcm93cykKKworLS0gc3BlY2lmaWMgcGxhbiAocCBp bm5lciAocGIgdW5pb24gcGMpKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rl c3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNv bHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRl ZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIg Y29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sq XScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIChwIGlubmVy IChwYiB1bmlvbiBwYykpCisJKSBqdDsKKyBuIHwgYSAgfCBiIHwgYyAgCistLS0rLS0tLSstLS0r LS0tLQorIDIgfCAgMiB8IDEgfCAgIAorIDIgfCAgMiB8IDIgfCAgIAorIDIgfCAgMiB8IDMgfCAg IAorIDIgfCAgMiB8ICAgfCAxMAorIDIgfCAgMiB8ICAgfCAgIAorIDIgfCAgMiB8ICAgfCAyMAor IDMgfCAgMyB8IDEgfCAgIAorIDMgfCAgMyB8IDIgfCAgIAorIDQgfCAtMSB8IDEgfCAgIAorIDQg fCAtMSB8IDIgfCAgIAorKDEwIHJvd3MpCisKKy0tIGRlZmF1bHQgcGxhbiAoaW5uZXIsIGNyb3Nz KQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFi bGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Ig b3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHks CisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBh dGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAo IGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIGRlZmF1bHQgKGNyb3NzLCBpbm5lcikKKwkp IGp0OworIG4gfCBhIHwgYiB8IGMgIAorLS0tKy0tLSstLS0rLS0tLQorIDIgfCAyIHwgMSB8IDEw CisgMiB8IDIgfCAxIHwgICAKKyAyIHwgMiB8IDEgfCAyMAorIDIgfCAyIHwgMiB8IDEwCisgMiB8 IDIgfCAyIHwgICAKKyAyIHwgMiB8IDIgfCAyMAorIDIgfCAyIHwgMyB8IDEwCisgMiB8IDIgfCAz IHwgICAKKyAyIHwgMiB8IDMgfCAyMAorKDkgcm93cykKKworLS0gc3BlY2lmaWMgcGxhbiAocCBp bm5lciAocGIgY3Jvc3MgcGMpKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rl c3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNv bHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRl ZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIg Y29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sq XScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIChwIGlubmVy IChwYiBjcm9zcyBwYykpCisJKSBqdDsKKyBuIHwgYSB8IGIgfCBjICAKKy0tLSstLS0rLS0tKy0t LS0KKyAyIHwgMiB8IDEgfCAxMAorIDIgfCAyIHwgMSB8ICAgCisgMiB8IDIgfCAxIHwgMjAKKyAy IHwgMiB8IDIgfCAxMAorIDIgfCAyIHwgMiB8ICAgCisgMiB8IDIgfCAyIHwgMjAKKyAyIHwgMiB8 IDMgfCAxMAorIDIgfCAyIHwgMyB8ICAgCisgMiB8IDIgfCAzIHwgMjAKKyg5IHJvd3MpCisKKy0t IGRlZmF1bHQgcGxhbiAob3V0ZXIsIGNyb3NzKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25i X3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBh cyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xh eCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsq XScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3Ry aWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFu IGRlZmF1bHQgKG91dGVyLCBjcm9zcykKKwkpIGp0OworIG4gfCBhICB8IGIgfCBjICAKKy0tLSst LS0tKy0tLSstLS0tCisgMSB8ICAxIHwgICB8ICAgCisgMiB8ICAyIHwgMSB8IDEwCisgMiB8ICAy IHwgMSB8ICAgCisgMiB8ICAyIHwgMSB8IDIwCisgMiB8ICAyIHwgMiB8IDEwCisgMiB8ICAyIHwg MiB8ICAgCisgMiB8ICAyIHwgMiB8IDIwCisgMiB8ICAyIHwgMyB8IDEwCisgMiB8ICAyIHwgMyB8 ICAgCisgMiB8ICAyIHwgMyB8IDIwCisgMyB8ICAzIHwgICB8ICAgCisgNCB8IC0xIHwgICB8ICAg CisoMTIgcm93cykKKworLS0gc3BlY2lmaWMgcGxhbiAocCBvdXRlciAocGIgY3Jvc3MgcGMpKQor c2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUg KAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3Jk aW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJ CQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGgg JyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMg aW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIChwIG91dGVyIChwYiBjcm9zcyBwYykpCisJKSBq dDsKKyBuIHwgYSAgfCBiIHwgYyAgCistLS0rLS0tLSstLS0rLS0tLQorIDEgfCAgMSB8ICAgfCAg IAorIDIgfCAgMiB8IDEgfCAxMAorIDIgfCAgMiB8IDEgfCAgIAorIDIgfCAgMiB8IDEgfCAyMAor IDIgfCAgMiB8IDIgfCAxMAorIDIgfCAgMiB8IDIgfCAgIAorIDIgfCAgMiB8IDIgfCAyMAorIDIg fCAgMiB8IDMgfCAxMAorIDIgfCAgMiB8IDMgfCAgIAorIDIgfCAgMiB8IDMgfCAyMAorIDMgfCAg MyB8ICAgfCAgIAorIDQgfCAtMSB8ICAgfCAgIAorKDEyIHJvd3MpCisKK3NlbGVjdAorCWp0Lios IGIxICsgMTAwIGFzIGIKK2Zyb20KKwlqc29uX3RhYmxlIChqc29uYgorCQknWworCQkJeyJhIjog IDEsICAiYiI6IFtbMSwgMTBdLCBbMl0sIFszLCAzMCwgMzAwXV0sICJjIjogWzEsIG51bGwsIDJd fSwKKwkJCXsiYSI6ICAyLCAgImIiOiBbMTAsIDIwXSwgImMiOiBbMSwgbnVsbCwgMl19LAorCQkJ eyJ4IjogIjMiLCAiYiI6IFsxMSwgMjIsIDMzLCA0NF19CisJCSBdJywKKwkJJyRbKl0nIGFzIHAK KwkJY29sdW1ucyAoCisJCQluIGZvciBvcmRpbmFsaXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQu YScgZGVmYXVsdCAtMSBvbiBlcnJvciwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBh cyBwYiBjb2x1bW5zICgKKwkJCQliIHRleHQgZm9ybWF0IGpzb24gcGF0aCAnJCcsCisJCQkJbmVz dGVkIHBhdGggJ3N0cmljdCAkWypdJyBhcyBwYjEgY29sdW1ucyAoCisJCQkJCWIxIGludCBwYXRo ICckJworCQkJCSkKKwkJCSksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMg Y29sdW1ucyAoCisJCQkJYyB0ZXh0IGZvcm1hdCBqc29uIHBhdGggJyQnLAorCQkJCW5lc3RlZCBw YXRoICdzdHJpY3QgJFsqXScgYXMgcGMxIGNvbHVtbnMgKAorCQkJCQljMSBpbnQgcGF0aCAnJCcK KwkJCQkpCisJCQkpCisJCSkKKwkJLS1wbGFuIGRlZmF1bHQob3V0ZXIsIGNyb3NzKQorCQlwbGFu KHAgb3V0ZXIgKChwYiBpbm5lciBwYjEpIGNyb3NzIChwYyBvdXRlciBwYzEpKSkKKwkpIGp0Owor IG4gfCBhICB8ICAgICAgYiAgICAgICB8IGIxICB8ICBjICAgfCBjMSB8ICBiICAKKy0tLSstLS0t Ky0tLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tKy0tLS0tCisgMSB8ICAxIHwgWzEsIDEw XSAgICAgIHwgICAxIHwgMSAgICB8ICAgIHwgMTAxCisgMSB8ICAxIHwgWzEsIDEwXSAgICAgIHwg ICAxIHwgbnVsbCB8ICAgIHwgMTAxCisgMSB8ICAxIHwgWzEsIDEwXSAgICAgIHwgICAxIHwgMiAg ICB8ICAgIHwgMTAxCisgMSB8ICAxIHwgWzEsIDEwXSAgICAgIHwgIDEwIHwgMSAgICB8ICAgIHwg MTEwCisgMSB8ICAxIHwgWzEsIDEwXSAgICAgIHwgIDEwIHwgbnVsbCB8ICAgIHwgMTEwCisgMSB8 ICAxIHwgWzEsIDEwXSAgICAgIHwgIDEwIHwgMiAgICB8ICAgIHwgMTEwCisgMSB8ICAxIHwgWzJd ICAgICAgICAgIHwgICAyIHwgMSAgICB8ICAgIHwgMTAyCisgMSB8ICAxIHwgWzJdICAgICAgICAg IHwgICAyIHwgbnVsbCB8ICAgIHwgMTAyCisgMSB8ICAxIHwgWzJdICAgICAgICAgIHwgICAyIHwg MiAgICB8ICAgIHwgMTAyCisgMSB8ICAxIHwgWzMsIDMwLCAzMDBdIHwgICAzIHwgMSAgICB8ICAg IHwgMTAzCisgMSB8ICAxIHwgWzMsIDMwLCAzMDBdIHwgICAzIHwgbnVsbCB8ICAgIHwgMTAzCisg MSB8ICAxIHwgWzMsIDMwLCAzMDBdIHwgICAzIHwgMiAgICB8ICAgIHwgMTAzCisgMSB8ICAxIHwg WzMsIDMwLCAzMDBdIHwgIDMwIHwgMSAgICB8ICAgIHwgMTMwCisgMSB8ICAxIHwgWzMsIDMwLCAz MDBdIHwgIDMwIHwgbnVsbCB8ICAgIHwgMTMwCisgMSB8ICAxIHwgWzMsIDMwLCAzMDBdIHwgIDMw IHwgMiAgICB8ICAgIHwgMTMwCisgMSB8ICAxIHwgWzMsIDMwLCAzMDBdIHwgMzAwIHwgMSAgICB8 ICAgIHwgNDAwCisgMSB8ICAxIHwgWzMsIDMwLCAzMDBdIHwgMzAwIHwgbnVsbCB8ICAgIHwgNDAw CisgMSB8ICAxIHwgWzMsIDMwLCAzMDBdIHwgMzAwIHwgMiAgICB8ICAgIHwgNDAwCisgMiB8ICAy IHwgICAgICAgICAgICAgIHwgICAgIHwgICAgICB8ICAgIHwgICAgCisgMyB8IC0xIHwgICAgICAg ICAgICAgIHwgICAgIHwgICAgICB8ICAgIHwgICAgCisoMjAgcm93cykKKworLS0gU2hvdWxkIHN1 Y2NlZWQgKEpTT04gYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gcm9vdCBhbmQgbmVzdGVkIHBhdGhz KQorU0VMRUNUICoKK0ZST00KKwlnZW5lcmF0ZV9zZXJpZXMoMSwgNCkgeCwKKwlnZW5lcmF0ZV9z ZXJpZXMoMSwgMykgeSwKKwlKU09OX1RBQkxFKGpzb25iCisJCSdbWzEsMiwzXSxbMiwzLDQsNV0s WzMsNCw1LDZdXScsCisJCSdzdHJpY3QgJFsqXSA/IChAWypdIDwgJHgpJworCQlQQVNTSU5HIHgg QVMgeCwgeSBBUyB5CisJCUNPTFVNTlMgKAorCQkJeSB0ZXh0IEZPUk1BVCBKU09OIFBBVEggJyQn LAorCQkJTkVTVEVEIFBBVEggJ3N0cmljdCAkWypdID8gKEAgPj0gJHkpJworCQkJQ09MVU1OUyAo CisJCQkJeiBpbnQgUEFUSCAnJCcKKwkJCSkKKwkJKQorCSkganQ7CisgeCB8IHkgfCAgICAgIHkg ICAgICAgfCB6IAorLS0tKy0tLSstLS0tLS0tLS0tLS0tLSstLS0KKyAyIHwgMSB8IFsxLCAyLCAz XSAgICB8IDEKKyAyIHwgMSB8IFsxLCAyLCAzXSAgICB8IDIKKyAyIHwgMSB8IFsxLCAyLCAzXSAg ICB8IDMKKyAzIHwgMSB8IFsxLCAyLCAzXSAgICB8IDEKKyAzIHwgMSB8IFsxLCAyLCAzXSAgICB8 IDIKKyAzIHwgMSB8IFsxLCAyLCAzXSAgICB8IDMKKyAzIHwgMSB8IFsyLCAzLCA0LCA1XSB8IDIK KyAzIHwgMSB8IFsyLCAzLCA0LCA1XSB8IDMKKyAzIHwgMSB8IFsyLCAzLCA0LCA1XSB8IDQKKyAz IHwgMSB8IFsyLCAzLCA0LCA1XSB8IDUKKyA0IHwgMSB8IFsxLCAyLCAzXSAgICB8IDEKKyA0IHwg MSB8IFsxLCAyLCAzXSAgICB8IDIKKyA0IHwgMSB8IFsxLCAyLCAzXSAgICB8IDMKKyA0IHwgMSB8 IFsyLCAzLCA0LCA1XSB8IDIKKyA0IHwgMSB8IFsyLCAzLCA0LCA1XSB8IDMKKyA0IHwgMSB8IFsy LCAzLCA0LCA1XSB8IDQKKyA0IHwgMSB8IFsyLCAzLCA0LCA1XSB8IDUKKyA0IHwgMSB8IFszLCA0 LCA1LCA2XSB8IDMKKyA0IHwgMSB8IFszLCA0LCA1LCA2XSB8IDQKKyA0IHwgMSB8IFszLCA0LCA1 LCA2XSB8IDUKKyA0IHwgMSB8IFszLCA0LCA1LCA2XSB8IDYKKyAyIHwgMiB8IFsxLCAyLCAzXSAg ICB8IDIKKyAyIHwgMiB8IFsxLCAyLCAzXSAgICB8IDMKKyAzIHwgMiB8IFsxLCAyLCAzXSAgICB8 IDIKKyAzIHwgMiB8IFsxLCAyLCAzXSAgICB8IDMKKyAzIHwgMiB8IFsyLCAzLCA0LCA1XSB8IDIK KyAzIHwgMiB8IFsyLCAzLCA0LCA1XSB8IDMKKyAzIHwgMiB8IFsyLCAzLCA0LCA1XSB8IDQKKyAz IHwgMiB8IFsyLCAzLCA0LCA1XSB8IDUKKyA0IHwgMiB8IFsxLCAyLCAzXSAgICB8IDIKKyA0IHwg MiB8IFsxLCAyLCAzXSAgICB8IDMKKyA0IHwgMiB8IFsyLCAzLCA0LCA1XSB8IDIKKyA0IHwgMiB8 IFsyLCAzLCA0LCA1XSB8IDMKKyA0IHwgMiB8IFsyLCAzLCA0LCA1XSB8IDQKKyA0IHwgMiB8IFsy LCAzLCA0LCA1XSB8IDUKKyA0IHwgMiB8IFszLCA0LCA1LCA2XSB8IDMKKyA0IHwgMiB8IFszLCA0 LCA1LCA2XSB8IDQKKyA0IHwgMiB8IFszLCA0LCA1LCA2XSB8IDUKKyA0IHwgMiB8IFszLCA0LCA1 LCA2XSB8IDYKKyAyIHwgMyB8IFsxLCAyLCAzXSAgICB8IDMKKyAzIHwgMyB8IFsxLCAyLCAzXSAg ICB8IDMKKyAzIHwgMyB8IFsyLCAzLCA0LCA1XSB8IDMKKyAzIHwgMyB8IFsyLCAzLCA0LCA1XSB8 IDQKKyAzIHwgMyB8IFsyLCAzLCA0LCA1XSB8IDUKKyA0IHwgMyB8IFsxLCAyLCAzXSAgICB8IDMK KyA0IHwgMyB8IFsyLCAzLCA0LCA1XSB8IDMKKyA0IHwgMyB8IFsyLCAzLCA0LCA1XSB8IDQKKyA0 IHwgMyB8IFsyLCAzLCA0LCA1XSB8IDUKKyA0IHwgMyB8IFszLCA0LCA1LCA2XSB8IDMKKyA0IHwg MyB8IFszLCA0LCA1LCA2XSB8IDQKKyA0IHwgMyB8IFszLCA0LCA1LCA2XSB8IDUKKyA0IHwgMyB8 IFszLCA0LCA1LCA2XSB8IDYKKyg1MiByb3dzKQorCistLSBTaG91bGQgZmFpbCAoSlNPTiBhcmd1 bWVudHMgYXJlIG5vdCBwYXNzZWQgdG8gY29sdW1uIHBhdGhzKQorU0VMRUNUICoKK0ZST00gSlNP Tl9UQUJMRSgKKwlqc29uYiAnWzEsMiwzXScsCisJJyRbKl0gPyAoQCA8ICR4KScKKwkJUEFTU0lO RyAxMCBBUyB4CisJCUNPTFVNTlMgKHkgdGV4dCBGT1JNQVQgSlNPTiBQQVRIICckID8gKEAgPCAk eCknKQorCSkganQ7CitFUlJPUjogIGNvdWxkIG5vdCBmaW5kIGpzb25wYXRoIHZhcmlhYmxlICJ4 IgorLS0gU2hvdWxkIGZhaWwgKG5vdCBzdXBwb3J0ZWQpCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFC TEUoanNvbmIgJ3siYSI6IDEyM30nLCAnJCcgfHwgJy4nIHx8ICdhJyBDT0xVTU5TIChmb28gaW50 KSk7CitFUlJPUjogIG9ubHkgc3RyaW5nIGNvbnN0YW50cyBhcmUgc3VwcG9ydGVkIGluIEpTT05f VEFCTEUgcGF0aCBzcGVjaWZpY2F0aW9uCitMSU5FIDE6IFNFTEVDVCAqIEZST00gSlNPTl9UQUJM RShqc29uYiAneyJhIjogMTIzfScsICckJyB8fCAnLicgfHwgJy4uLgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxl bF9zY2hlZHVsZQppbmRleCBkMDFhZDUxZDk1Li5mYmRjNDUxMWMxIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFy YWxsZWxfc2NoZWR1bGUKQEAgLTEwMyw3ICsxMDMsNyBAQCB0ZXN0OiBzZWxlY3Rfdmlld3MgcG9y dGFsc19wMiBmb3JlaWduX2tleSBjbHVzdGVyIGRlcGVuZGVuY3kgZ3VjIGJpdG1hcG9wcyBjb21i bwogIyAtLS0tLS0tLS0tCiAjIEFub3RoZXIgZ3JvdXAgb2YgcGFyYWxsZWwgdGVzdHMgKEpTT04g cmVsYXRlZCkKICMgLS0tLS0tLS0tLQotdGVzdDoganNvbiBqc29uYiBqc29uX2VuY29kaW5nIGpz b25wYXRoIGpzb25wYXRoX2VuY29kaW5nIGpzb25iX2pzb25wYXRoIHNxbGpzb24gc3FsanNvbl9x dWVyeWZ1bmNzCit0ZXN0OiBqc29uIGpzb25iIGpzb25fZW5jb2RpbmcganNvbnBhdGgganNvbnBh dGhfZW5jb2RpbmcganNvbmJfanNvbnBhdGggc3FsanNvbiBzcWxqc29uX3F1ZXJ5ZnVuY3Mgc3Fs anNvbl9qc29udGFibGUKIAogIyAtLS0tLS0tLS0tCiAjIEFub3RoZXIgZ3JvdXAgb2YgcGFyYWxs ZWwgdGVzdHMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NxbGpzb25fanNvbnRh YmxlLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NxbGpzb25fanNvbnRhYmxlLnNxbApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi40YzgxMDkzZDZlCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3FsanNvbl9qc29udGFibGUuc3FsCkBAIC0w LDAgKzEsNjg2IEBACistLSBKU09OX1RBQkxFCisKKy0tIFNob3VsZCBmYWlsIChKU09OX1RBQkxF IGNhbiBiZSB1c2VkIG9ubHkgaW4gRlJPTSBjbGF1c2UpCitTRUxFQ1QgSlNPTl9UQUJMRSgnW10n LCAnJCcpOworCistLSBTaG91bGQgZmFpbCAoanNvbiBhcmd1bWVudCBub3Qgc3VwcG9ydGVkKQor U0VMRUNUICogRlJPTSBKU09OX1RBQkxFKE5VTEwgRk9STUFUIEpTT04sICckJyBDT0xVTU5TIChm b28gdGV4dCkpOworCistLSBTaG91bGQgZmFpbCAobm8gY29sdW1ucykKK1NFTEVDVCAqIEZST00g SlNPTl9UQUJMRShOVUxMLCAnJCcgQ09MVU1OUyAoKSk7CisKK1NFTEVDVCAqIEZST00gSlNPTl9U QUJMRSAoTlVMTDo6anNvbmIsICckJyBDT0xVTU5TICh2MSB0aW1lc3RhbXApKSBBUyBmICh2MSwg djIpOworCistLSBOVUxMID0+IGVtcHR5IHRhYmxlCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUo TlVMTDo6anNvbmIsICckJyBDT0xVTU5TIChmb28gaW50KSkgYmFyOworCistLQorU0VMRUNUICog RlJPTSBKU09OX1RBQkxFKGpzb25iICcxMjMnLCAnJCcKKwlDT0xVTU5TIChpdGVtIGludCBQQVRI ICckJywgZm9vIGludCkpIGJhcjsKKworLS0gSlNPTl9UQUJMRTogYmFzaWMgZnVuY3Rpb25hbGl0 eQorQ1JFQVRFIERPTUFJTiBqc29uYl90ZXN0X2RvbWFpbiBBUyB0ZXh0IENIRUNLICh2YWx1ZSA8 PiAnZm9vJyk7CitDUkVBVEUgVEVNUCBUQUJMRSBqc29uX3RhYmxlX3Rlc3QgKGpzKSBBUworCShW QUxVRVMKKwkJKCcxJyksCisJCSgnW10nKSwKKwkJKCd7fScpLAorCQkoJ1sxLCAxLjIzLCAiMiIs ICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwy XSIsICJcInN0clwiIl0nKQorCSk7CisKKy0tIFJlZ3VsYXIgInVuZm9ybWF0dGVkIiBjb2x1bW5z CitTRUxFQ1QgKgorRlJPTSBqc29uX3RhYmxlX3Rlc3QgdmFscworCUxFRlQgT1VURVIgSk9JTgor CUpTT05fVEFCTEUoCisJCXZhbHMuanM6Ompzb25iLCAnbGF4ICRbKl0nCisJCUNPTFVNTlMgKAor CQkJaWQgRk9SIE9SRElOQUxJVFksCisJCQkiaW50IiBpbnQgUEFUSCAnJCcsCisJCQkidGV4dCIg dGV4dCBQQVRIICckJywKKwkJCSJjaGFyKDQpIiBjaGFyKDQpIFBBVEggJyQnLAorCQkJImJvb2wi IGJvb2wgUEFUSCAnJCcsCisJCQkibnVtZXJpYyIgbnVtZXJpYyBQQVRIICckJywKKwkJCSJkb21h aW4iIGpzb25iX3Rlc3RfZG9tYWluIFBBVEggJyQnLAorCQkJanMganNvbiBQQVRIICckJywKKwkJ CWpiIGpzb25iIFBBVEggJyQnCisJCSkKKwkpIGp0CisJT04gdHJ1ZTsKKworLS0gImZvcm1hdHRl ZCIgY29sdW1ucworU0VMRUNUICoKK0ZST00ganNvbl90YWJsZV90ZXN0IHZhbHMKKwlMRUZUIE9V VEVSIEpPSU4KKwlKU09OX1RBQkxFKAorCQl2YWxzLmpzOjpqc29uYiwgJ2xheCAkWypdJworCQlD T0xVTU5TICgKKwkJCWlkIEZPUiBPUkRJTkFMSVRZLAorCQkJanN0IHRleHQgICAgRk9STUFUIEpT T04gIFBBVEggJyQnLAorCQkJanNjIGNoYXIoNCkgRk9STUFUIEpTT04gIFBBVEggJyQnLAorCQkJ anN2IHZhcmNoYXIoNCkgRk9STUFUIEpTT04gIFBBVEggJyQnLAorCQkJanNiIGpzb25iIEZPUk1B VCBKU09OIFBBVEggJyQnLAorCQkJanNicSBqc29uYiBGT1JNQVQgSlNPTiBQQVRIICckJyBPTUlU IFFVT1RFUworCQkpCisJKSBqdAorCU9OIHRydWU7CisKKy0tIEVYSVNUUyBjb2x1bW5zCitTRUxF Q1QgKgorRlJPTSBqc29uX3RhYmxlX3Rlc3QgdmFscworCUxFRlQgT1VURVIgSk9JTgorCUpTT05f VEFCTEUoCisJCXZhbHMuanM6Ompzb25iLCAnbGF4ICRbKl0nCisJCUNPTFVNTlMgKAorCQkJaWQg Rk9SIE9SRElOQUxJVFksCisJCQlleGlzdHMxIGJvb2wgRVhJU1RTIFBBVEggJyQuYWFhJywKKwkJ CWV4aXN0czIgaW50IEVYSVNUUyBQQVRIICckLmFhYScsCisJCQlleGlzdHMzIGludCBFWElTVFMg UEFUSCAnc3RyaWN0ICQuYWFhJyBVTktOT1dOIE9OIEVSUk9SLAorCQkJZXhpc3RzNCB0ZXh0IEVY SVNUUyBQQVRIICdzdHJpY3QgJC5hYWEnIEZBTFNFIE9OIEVSUk9SCisJCSkKKwkpIGp0CisJT04g dHJ1ZTsKKworLS0gT3RoZXIgbWlzY2VsbGFub3VzIGNoZWNrcworU0VMRUNUICoKK0ZST00ganNv bl90YWJsZV90ZXN0IHZhbHMKKwlMRUZUIE9VVEVSIEpPSU4KKwlKU09OX1RBQkxFKAorCQl2YWxz LmpzOjpqc29uYiwgJ2xheCAkWypdJworCQlDT0xVTU5TICgKKwkJCWlkIEZPUiBPUkRJTkFMSVRZ LAorCQkJYWFhIGludCwgLS0gImFhYSIgaGFzIGltcGxpY2l0IHBhdGggJyQuImFhYSInCisJCQlh YWExIGludCBQQVRIICckLmFhYScsCisJCQlqczIganNvbiBQQVRIICckJywKKwkJCWpzYjJ3IGpz b25iIFBBVEggJyQnIFdJVEggV1JBUFBFUiwKKwkJCWpzYjJxIGpzb25iIFBBVEggJyQnIE9NSVQg UVVPVEVTLAorCQkJaWEgaW50W10gUEFUSCAnJCcsCisJCQl0YSB0ZXh0W10gUEFUSCAnJCcsCisJ CQlqYmEganNvbmJbXSBQQVRIICckJworCQkpCisJKSBqdAorCU9OIHRydWU7CisKKy0tIEpTT05f VEFCTEU6IFRlc3QgYmFja3dhcmQgcGFyc2luZworCitDUkVBVEUgVklFVyBqc29uYl90YWJsZV92 aWV3IEFTCitTRUxFQ1QgKiBGUk9NCisJSlNPTl9UQUJMRSgKKwkJanNvbmIgJ251bGwnLCAnbGF4 ICRbKl0nIFBBU1NJTkcgMSArIDIgQVMgYSwganNvbiAnImZvbyInIEFTICJiIGMiCisJCUNPTFVN TlMgKAorCQkJaWQgRk9SIE9SRElOQUxJVFksCisJCQkiaW50IiBpbnQgUEFUSCAnJCcsCisJCQki dGV4dCIgdGV4dCBQQVRIICckJywKKwkJCSJjaGFyKDQpIiBjaGFyKDQpIFBBVEggJyQnLAorCQkJ ImJvb2wiIGJvb2wgUEFUSCAnJCcsCisJCQkibnVtZXJpYyIgbnVtZXJpYyBQQVRIICckJywKKwkJ CSJkb21haW4iIGpzb25iX3Rlc3RfZG9tYWluIFBBVEggJyQnLAorCQkJanMganNvbiBQQVRIICck JywKKwkJCWpiIGpzb25iIFBBVEggJyQnLAorCQkJanN0IHRleHQgICAgRk9STUFUIEpTT04gIFBB VEggJyQnLAorCQkJanNjIGNoYXIoNCkgRk9STUFUIEpTT04gIFBBVEggJyQnLAorCQkJanN2IHZh cmNoYXIoNCkgRk9STUFUIEpTT04gIFBBVEggJyQnLAorCQkJanNiIGpzb25iICAgRk9STUFUIEpT T04gUEFUSCAnJCcsCisJCQlqc2JxIGpzb25iIEZPUk1BVCBKU09OIFBBVEggJyQnIE9NSVQgUVVP VEVTLAorCQkJYWFhIGludCwgLS0gaW1wbGljaXQgcGF0aCAnJC4iYWFhIicsCisJCQlhYWExIGlu dCBQQVRIICckLmFhYScsCisJCQlleGlzdHMxIGJvb2wgRVhJU1RTIFBBVEggJyQuYWFhJywKKwkJ CWV4aXN0czIgaW50IEVYSVNUUyBQQVRIICckLmFhYScgVFJVRSBPTiBFUlJPUiwKKwkJCWV4aXN0 czMgdGV4dCBFWElTVFMgUEFUSCAnc3RyaWN0ICQuYWFhJyBVTktOT1dOIE9OIEVSUk9SLAorCisJ CQlqczIganNvbiBQQVRIICckJywKKwkJCWpzYjJ3IGpzb25iIFBBVEggJyQnIFdJVEggV1JBUFBF UiwKKwkJCWpzYjJxIGpzb25iIFBBVEggJyQnIE9NSVQgUVVPVEVTLAorCQkJaWEgaW50W10gUEFU SCAnJCcsCisJCQl0YSB0ZXh0W10gUEFUSCAnJCcsCisJCQlqYmEganNvbmJbXSBQQVRIICckJywK KworCQkJTkVTVEVEIFBBVEggJyRbMV0nIEFTIHAxIENPTFVNTlMgKAorCQkJCWExIGludCwKKwkJ CQlORVNURUQgUEFUSCAnJFsqXScgQVMgInAxIDEiIENPTFVNTlMgKAorCQkJCQlhMTEgdGV4dAor CQkJCSksCisJCQkJYjEgdGV4dAorCQkJKSwKKwkJCU5FU1RFRCBQQVRIICckWzJdJyBBUyBwMiBD T0xVTU5TICgKKwkJCQlORVNURUQgUEFUSCAnJFsqXScgQVMgInAyOjEiIENPTFVNTlMgKAorCQkJ CQlhMjEgdGV4dAorCQkJCSksCisJCQkJTkVTVEVEIFBBVEggJyRbKl0nIEFTIHAyMiBDT0xVTU5T ICgKKwkJCQkJYTIyIHRleHQKKwkJCQkpCisJCQkpCisJCSkKKwkpOworCitcc3YganNvbmJfdGFi bGVfdmlldworCitFWFBMQUlOIChDT1NUUyBPRkYsIFZFUkJPU0UpIFNFTEVDVCAqIEZST00ganNv bmJfdGFibGVfdmlldzsKKworLS0gSlNPTl9UQUJMRSgpIHdpdGggYWxpYXMKK0VYUExBSU4gKENP U1RTIE9GRiwgVkVSQk9TRSkKK1NFTEVDVCAqIEZST00KKwlKU09OX1RBQkxFKAorCQlqc29uYiAn bnVsbCcsICdsYXggJFsqXScgUEFTU0lORyAxICsgMiBBUyBhLCBqc29uICciZm9vIicgQVMgImIg YyIKKwkJQ09MVU1OUyAoCisJCQlpZCBGT1IgT1JESU5BTElUWSwKKwkJCSJpbnQiIGludCBQQVRI ICckJywKKwkJCSJ0ZXh0IiB0ZXh0IFBBVEggJyQnCisJKSkganNvbl90YWJsZV9mdW5jOworCitE Uk9QIFZJRVcganNvbmJfdGFibGVfdmlldzsKK0RST1AgRE9NQUlOIGpzb25iX3Rlc3RfZG9tYWlu OworCistLSBKU09OX1RBQkxFOiBvbmx5IG9uZSBGT1IgT1JESU5BTElUWSBjb2x1bW5zIGFsbG93 ZWQKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnMScsICckJyBDT0xVTU5TIChpZCBG T1IgT1JESU5BTElUWSwgaWQyIEZPUiBPUkRJTkFMSVRZLCBhIGludCBQQVRIICckLmEnIEVSUk9S IE9OIEVNUFRZKSkganQ7CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJzEnLCAnJCcg Q09MVU1OUyAoaWQgRk9SIE9SRElOQUxJVFksIGEgaW50IFBBVEggJyQnIEVSUk9SIE9OIEVNUFRZ KSkganQ7CisKKy0tIEpTT05fVEFCTEU6IE9OIEVNUFRZL09OIEVSUk9SIGJlaGF2aW9yCitTRUxF Q1QgKgorRlJPTQorCShWQUxVRVMgKCcxJyksICgnImVyciInKSkgdmFscyhqcyksCisJSlNPTl9U QUJMRSh2YWxzLmpzOjpqc29uYiwgJyQnIENPTFVNTlMgKGEgaW50IFBBVEggJyQnKSkganQ7CisK K1NFTEVDVCAqCitGUk9NCisJKFZBTFVFUyAoJzEnKSwgKCciZXJyIicpKSB2YWxzKGpzKQorCQlM RUZUIE9VVEVSIEpPSU4KKwlKU09OX1RBQkxFKHZhbHMuanM6Ompzb25iLCAnJCcgQ09MVU1OUyAo YSBpbnQgUEFUSCAnJCcpIEVSUk9SIE9OIEVSUk9SKSBqdAorCQlPTiB0cnVlOworCitTRUxFQ1Qg KgorRlJPTQorCShWQUxVRVMgKCcxJyksICgnImVyciInKSkgdmFscyhqcykKKwkJTEVGVCBPVVRF UiBKT0lOCisJSlNPTl9UQUJMRSh2YWxzLmpzOjpqc29uYiwgJyQnIENPTFVNTlMgKGEgaW50IFBB VEggJyQnIEVSUk9SIE9OIEVSUk9SKSkganQKKwkJT04gdHJ1ZTsKKworU0VMRUNUICogRlJPTSBK U09OX1RBQkxFKGpzb25iICcxJywgJyQnIENPTFVNTlMgKGEgaW50IFBBVEggJyQuYScgRVJST1Ig T04gRU1QVFkpKSBqdDsKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnMScsICckJyBD T0xVTU5TIChhIGludCBQQVRIICdzdHJpY3QgJC5hJyBFUlJPUiBPTiBFTVBUWSkgRVJST1IgT04g RVJST1IpIGp0OworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcxJywgJyQnIENPTFVN TlMgKGEgaW50IFBBVEggJ2xheCAkLmEnIEVSUk9SIE9OIEVNUFRZKSBFUlJPUiBPTiBFUlJPUikg anQ7CisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMg KGEgaW50IFBBVEggJyQnICAgREVGQVVMVCAxIE9OIEVNUFRZIERFRkFVTFQgMiBPTiBFUlJPUikp IGp0OworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAo YSBpbnQgUEFUSCAnc3RyaWN0ICQuYScgREVGQVVMVCAxIE9OIEVNUFRZIERFRkFVTFQgMiBPTiBF UlJPUikpIGp0OworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09M VU1OUyAoYSBpbnQgUEFUSCAnbGF4ICQuYScgREVGQVVMVCAxIE9OIEVNUFRZIERFRkFVTFQgMiBP TiBFUlJPUikpIGp0OworCistLSBKU09OX1RBQkxFOiBFWElTVFMgUEFUSCB0eXBlcworU0VMRUNU ICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBpbnQ0IEVYSVNU UyBQQVRIICckLmEnKSk7CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICck JyBDT0xVTU5TIChhIGludDIgRVhJU1RTIFBBVEggJyQuYScpKTsKK1NFTEVDVCAqIEZST00gSlNP Tl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgaW50OCBFWElTVFMgUEFUSCAnJC5h JykpOworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAo YSBmbG9hdDQgRVhJU1RTIFBBVEggJyQuYScpKTsKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShq c29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgY2hhcigzKSBFWElTVFMgUEFUSCAnJC5hJykpOwor U0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBqc29u IEVYSVNUUyBQQVRIICckLmEnKSk7CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJh IicsICckJyBDT0xVTU5TIChhIGpzb25iIEVYSVNUUyBQQVRIICckLmEnKSk7CisKKy0tIEpTT05f VEFCTEU6IFdSQVBQRVIvUVVPVEVTIGNsYXVzZXMgb24gc2NhbGFyIGNvbHVtbnMKK1NFTEVDVCAq IEZST00gSlNPTl9UQUJMRShqc29uYiAnIndvcmxkIicsICckJyBDT0xVTU5TIChpdGVtIHRleHQg UEFUSCAnJCcgS0VFUCBRVU9URVMgT04gU0NBTEFSIFNUUklORykpOworU0VMRUNUICogRlJPTSBK U09OX1RBQkxFKGpzb25iICcid29ybGQiJywgJyQnIENPTFVNTlMgKGl0ZW0gdGV4dCBQQVRIICck JyBPTUlUIFFVT1RFUyBPTiBTQ0FMQVIgU1RSSU5HKSk7CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFC TEUoanNvbmIgJyJ3b3JsZCInLCAnJCcgQ09MVU1OUyAoaXRlbSB0ZXh0IEZPUk1BVCBKU09OIFBB VEggJyQnIEtFRVAgUVVPVEVTKSk7CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJ3 b3JsZCInLCAnJCcgQ09MVU1OUyAoaXRlbSB0ZXh0IEZPUk1BVCBKU09OIFBBVEggJyQnIE9NSVQg UVVPVEVTKSk7CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJ3b3JsZCInLCAnJCcg Q09MVU1OUyAoaXRlbSB0ZXh0IEZPUk1BVCBKU09OIFBBVEggJyQnIFdJVEhPVVQgV1JBUFBFUiBL RUVQIFFVT1RFUykpOworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcid29ybGQiJywg JyQnIENPTFVNTlMgKGl0ZW0gdGV4dCBQQVRIICckJyBXSVRIT1VUIFdSQVBQRVIgT01JVCBRVU9U RVMpKTsKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcid29ybGQiJywgJyQnIENP TFVNTlMgKGl0ZW0gdGV4dCBGT1JNQVQgSlNPTiBQQVRIICckJyBXSVRIIFdSQVBQRVIpKTsKKwor LS0gRXJyb3I6IFFVT1RFUyBjbGF1c2UgbWVhbmluZ2xlc3Mgd2hlbiBXSVRIIFdSQVBQRVIgaXMg cHJlc2VudAorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcid29ybGQiJywgJyQnIENP TFVNTlMgKGl0ZW0gdGV4dCBGT1JNQVQgSlNPTiBQQVRIICckJyBXSVRIIFdSQVBQRVIgS0VFUCBR VU9URVMpKTsKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnIndvcmxkIicsICckJyBD T0xVTU5TIChpdGVtIHRleHQgUEFUSCAnJCcgV0lUSCBXUkFQUEVSIE9NSVQgUVVPVEVTKSk7CisK Ky0tIEpTT05fVEFCTEU6IG5lc3RlZCBwYXRocyBhbmQgcGxhbnMKKworLS0gU2hvdWxkIGZhaWwg KEpTT05fVEFCTEUgY29sdW1ucyBtdXN0IGNvbnRhaW4gZXhwbGljaXQgQVMgcGF0aAorLS0gc3Bl Y2lmaWNhdGlvbnMgaWYgZXhwbGljaXQgUExBTiBjbGF1c2UgaXMgdXNlZCkKK1NFTEVDVCAqIEZS T00gSlNPTl9UQUJMRSgKKwlqc29uYiAnW10nLCAnJCcgLS0gQVMgPHBhdGggbmFtZT4gcmVxdWly ZWQgaGVyZQorCUNPTFVNTlMgKAorCQlmb28gaW50IFBBVEggJyQnCisJKQorCVBMQU4gREVGQVVM VCAoVU5JT04pCispIGp0OworCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ1td JywgJyQnIEFTIHBhdGgxCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICckJyBDT0xVTU5TICgg LS0gQVMgPHBhdGggbmFtZT4gcmVxdWlyZWQgaGVyZQorCQkJZm9vIGludCBQQVRIICckJworCQkp CisJKQorCVBMQU4gREVGQVVMVCAoVU5JT04pCispIGp0OworCistLSBTaG91bGQgZmFpbCAoY29s dW1uIG5hbWVzIG11c3QgYmUgZGlzdGluY3QpCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJ anNvbmIgJ1tdJywgJyQnIEFTIGEKKwlDT0xVTU5TICgKKwkJYSBpbnQKKwkpCispIGp0OworCitT RUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ1tdJywgJyQnIEFTIGEKKwlDT0xVTU5T ICgKKwkJYiBpbnQsCisJCU5FU1RFRCBQQVRIICckJyBBUyBhCisJCUNPTFVNTlMgKAorCQkJYyBp bnQKKwkJKQorCSkKKykganQ7CisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAn W10nLCAnJCcKKwlDT0xVTU5TICgKKwkJYiBpbnQsCisJCU5FU1RFRCBQQVRIICckJyBBUyBiCisJ CUNPTFVNTlMgKAorCQkJYyBpbnQKKwkJKQorCSkKKykganQ7CisKK1NFTEVDVCAqIEZST00gSlNP Tl9UQUJMRSgKKwlqc29uYiAnW10nLCAnJCcKKwlDT0xVTU5TICgKKwkJTkVTVEVEIFBBVEggJyQn IEFTIGEKKwkJQ09MVU1OUyAoCisJCQliIGludAorCQkpLAorCQlORVNURUQgUEFUSCAnJCcKKwkJ Q09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgYQorCQkJQ09MVU1OUyAoCisJCQkJYyBp bnQKKwkJCSkKKwkJKQorCSkKKykganQ7CisKKy0tIEpTT05fVEFCTEU6IHBsYW4gdmFsaWRhdGlv bgorCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScgQVMg cDAKKwlDT0xVTU5TICgKKwkJTkVTVEVEICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQ QVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBB UyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIg Q09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkK KwkJKQorCSkKKwlQTEFOIChwMSkKKykganQ7CisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgK Kwlqc29uYiAnbnVsbCcsICckWypdJyBBUyBwMAorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAn JCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBm b28gaW50ICksCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkK KwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEgg JyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAocDApCispIGp0 OworCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScgQVMg cDAKKwlDT0xVTU5TICgKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJTkVT VEVEIFBBVEggJyQnIEFTIHAxMSBDT0xVTU5TICggZm9vIGludCApLAorCQkJTkVTVEVEIFBBVEgg JyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGludCApCisJCSksCisJCU5FU1RFRCBQQVRIICckJyBB UyBwMiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1OUyAoIGJheiBp bnQgKQorCQkpCisJKQorCVBMQU4gKHAwIE9VVEVSIHAzKQorKSBqdDsKKworU0VMRUNUICogRlJP TSBKU09OX1RBQkxFKAorCWpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJ CU5FU1RFRCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBw MTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1O UyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJ CQlORVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQ TEFOIChwMCBVTklPTiBwMSBVTklPTiBwMTEpCispIGp0OworCitTRUxFQ1QgKiBGUk9NIEpTT05f VEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScgQVMgcDAKKwlDT0xVTU5TICgKKwkJTkVTVEVE IFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMSBDT0xV TU5TICggZm9vIGludCApLAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFy IGludCApCisJCSksCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RF RCBQQVRIICckJyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQgKQorCQkpCisJKQorCVBMQU4gKHAw IE9VVEVSIChwMSBDUk9TUyBwMTMpKQorKSBqdDsKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxF KAorCWpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRI ICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAo IGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQg KQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFU SCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChwMCBPVVRF UiAocDEgQ1JPU1MgcDIpKQorKSBqdDsKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpz b25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICckJyBB UyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBp bnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQorCQkp LAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcg QVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChwMCBPVVRFUiAoKHAx IFVOSU9OIHAxMSkgQ1JPU1MgcDIpKQorKSBqdDsKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxF KAorCWpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRI ICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAo IGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQg KQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFU SCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChwMCBPVVRF UiAoKHAxIElOTkVSIHAxMSkgQ1JPU1MgcDIpKQorKSBqdDsKKworU0VMRUNUICogRlJPTSBKU09O X1RBQkxFKAorCWpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RF RCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09M VU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJh ciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNU RUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChw MCBPVVRFUiAoKHAxIElOTkVSIChwMTIgQ1JPU1MgcDExKSkgQ1JPU1MgcDIpKQorKSBqdDsKKwor U0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdudWxsJywgJ3N0cmljdCAkWypdJyBB UyBwMAorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlO RVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJCQlORVNURUQgUEFU SCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQn IEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6 IGludCApCisJCSkKKwkpCisJUExBTiAocDAgT1VURVIgKChwMSBJTk5FUiAocDEyIENST1NTIHAx MSkpIENST1NTIChwMiBJTk5FUiBwMjEpKSkKKykganQ7CisKK1NFTEVDVCAqIEZST00gSlNPTl9U QUJMRSgKKwlqc29uYiAnbnVsbCcsICdzdHJpY3QgJFsqXScgLS0gd2l0aG91dCByb290IHBhdGgg bmFtZQorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlO RVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJCQlORVNURUQgUEFU SCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQn IEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6 IGludCApCisJCSkKKwkpCisJUExBTiAoKHAxIElOTkVSIChwMTIgQ1JPU1MgcDExKSkgQ1JPU1Mg KHAyIElOTkVSIHAyMSkpCispIGp0OworCistLSBKU09OX1RBQkxFOiBwbGFuIGV4ZWN1dGlvbgor CitDUkVBVEUgVEVNUCBUQUJMRSBqc29uYl90YWJsZV90ZXN0IChqcyBqc29uYik7CisKK0lOU0VS VCBJTlRPIGpzb25iX3RhYmxlX3Rlc3QKK1ZBTFVFUyAoCisJJ1sKKwkJeyJhIjogIDEsICAiYiI6 IFtdLCAiYyI6IFtdfSwKKwkJeyJhIjogIDIsICAiYiI6IFsxLCAyLCAzXSwgImMiOiBbMTAsIG51 bGwsIDIwXX0sCisJCXsiYSI6ICAzLCAgImIiOiBbMSwgMl0sICJjIjogW119LAorCQl7IngiOiAi NCIsICJiIjogWzEsIDJdLCAiYyI6IDEyM30KKwkgXScKKyk7CisKKy0tIHVuc3BlY2lmaWVkIHBs YW4gKG91dGVyLCB1bmlvbikKK3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0 IGp0dCwKKwlqc29uX3RhYmxlICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1 bW5zICgKKwkJCW4gZm9yIG9yZGluYWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZh dWx0IC0xIG9uIGVtcHR5LAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNv bHVtbnMgKCBiIGludCBwYXRoICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0n IGFzIHBjIGNvbHVtbnMgKCBjIGludCBwYXRoICckJyApCisJCSkKKwkpIGp0OworCistLSBkZWZh dWx0IHBsYW4gKG91dGVyLCB1bmlvbikKK3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJs ZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxlICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAor CQljb2x1bW5zICgKKwkJCW4gZm9yIG9yZGluYWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5h JyBkZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFz IHBiIGNvbHVtbnMgKCBiIGludCBwYXRoICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAk LmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBjIGludCBwYXRoICckJyApCisJCSkKKwkJcGxhbiBkZWZh dWx0IChvdXRlciwgdW5pb24pCisJKSBqdDsKKworLS0gc3BlY2lmaWMgcGxhbiAocCBvdXRlciAo cGIgdW5pb24gcGMpKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0 LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMg KAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQg LTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1u cyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMg cGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIChwIG91dGVyIChwYiB1 bmlvbiBwYykpCisJKSBqdDsKKworLS0gc3BlY2lmaWMgcGxhbiAocCBvdXRlciAocGMgdW5pb24g cGIpKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25f dGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBm b3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1w dHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50 IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1u cyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIChwIG91dGVyIChwYyB1bmlvbiBwYikp CisJKSBqdDsKKworLS0gZGVmYXVsdCBwbGFuIChpbm5lciwgdW5pb24pCitzZWxlY3QKKwlqdC4q Citmcm9tCisJanNvbmJfdGFibGVfdGVzdCBqdHQsCisJanNvbl90YWJsZSAoCisJCWp0dC5qcywn c3RyaWN0ICRbKl0nIGFzIHAKKwkJY29sdW1ucyAoCisJCQluIGZvciBvcmRpbmFsaXR5LAorCQkJ YSBpbnQgcGF0aCAnbGF4ICQuYScgZGVmYXVsdCAtMSBvbiBlbXB0eSwKKwkJCW5lc3RlZCBwYXRo ICdzdHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1bW5zICggYiBpbnQgcGF0aCAnJCcgKSwKKwkJCW5l c3RlZCBwYXRoICdzdHJpY3QgJC5jWypdJyBhcyBwYyBjb2x1bW5zICggYyBpbnQgcGF0aCAnJCcg KQorCQkpCisJCXBsYW4gZGVmYXVsdCAoaW5uZXIpCisJKSBqdDsKKworLS0gc3BlY2lmaWMgcGxh biAocCBpbm5lciAocGIgdW5pb24gcGMpKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3Rh YmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBw CisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAk LmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScg YXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0 ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIChw IGlubmVyIChwYiB1bmlvbiBwYykpCisJKSBqdDsKKworLS0gZGVmYXVsdCBwbGFuIChpbm5lciwg Y3Jvc3MpCitzZWxlY3QKKwlqdC4qCitmcm9tCisJanNvbmJfdGFibGVfdGVzdCBqdHQsCisJanNv bl90YWJsZSAoCisJCWp0dC5qcywnc3RyaWN0ICRbKl0nIGFzIHAKKwkJY29sdW1ucyAoCisJCQlu IGZvciBvcmRpbmFsaXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZGVmYXVsdCAtMSBvbiBl bXB0eSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1bW5zICggYiBp bnQgcGF0aCAnJCcgKSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5jWypdJyBhcyBwYyBjb2x1 bW5zICggYyBpbnQgcGF0aCAnJCcgKQorCQkpCisJCXBsYW4gZGVmYXVsdCAoY3Jvc3MsIGlubmVy KQorCSkganQ7CisKKy0tIHNwZWNpZmljIHBsYW4gKHAgaW5uZXIgKHBiIGNyb3NzIHBjKSkKK3Nl bGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxlICgK KwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1bW5zICgKKwkJCW4gZm9yIG9yZGlu YWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJ bmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRoICck JyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBjIGlu dCBwYXRoICckJyApCisJCSkKKwkJcGxhbiAocCBpbm5lciAocGIgY3Jvc3MgcGMpKQorCSkganQ7 CisKKy0tIGRlZmF1bHQgcGxhbiAob3V0ZXIsIGNyb3NzKQorc2VsZWN0CisJanQuKgorZnJvbQor CWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAk WypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBh dGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0 ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0 aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQor CQlwbGFuIGRlZmF1bHQgKG91dGVyLCBjcm9zcykKKwkpIGp0OworCistLSBzcGVjaWZpYyBwbGFu IChwIG91dGVyIChwYiBjcm9zcyBwYykpCitzZWxlY3QKKwlqdC4qCitmcm9tCisJanNvbmJfdGFi bGVfdGVzdCBqdHQsCisJanNvbl90YWJsZSAoCisJCWp0dC5qcywnc3RyaWN0ICRbKl0nIGFzIHAK KwkJY29sdW1ucyAoCisJCQluIGZvciBvcmRpbmFsaXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQu YScgZGVmYXVsdCAtMSBvbiBlbXB0eSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBh cyBwYiBjb2x1bW5zICggYiBpbnQgcGF0aCAnJCcgKSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3Qg JC5jWypdJyBhcyBwYyBjb2x1bW5zICggYyBpbnQgcGF0aCAnJCcgKQorCQkpCisJCXBsYW4gKHAg b3V0ZXIgKHBiIGNyb3NzIHBjKSkKKwkpIGp0OworCisKK3NlbGVjdAorCWp0LiosIGIxICsgMTAw IGFzIGIKK2Zyb20KKwlqc29uX3RhYmxlIChqc29uYgorCQknWworCQkJeyJhIjogIDEsICAiYiI6 IFtbMSwgMTBdLCBbMl0sIFszLCAzMCwgMzAwXV0sICJjIjogWzEsIG51bGwsIDJdfSwKKwkJCXsi YSI6ICAyLCAgImIiOiBbMTAsIDIwXSwgImMiOiBbMSwgbnVsbCwgMl19LAorCQkJeyJ4IjogIjMi LCAiYiI6IFsxMSwgMjIsIDMzLCA0NF19CisJCSBdJywKKwkJJyRbKl0nIGFzIHAKKwkJY29sdW1u cyAoCisJCQluIGZvciBvcmRpbmFsaXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZGVmYXVs dCAtMSBvbiBlcnJvciwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1 bW5zICgKKwkJCQliIHRleHQgZm9ybWF0IGpzb24gcGF0aCAnJCcsCisJCQkJbmVzdGVkIHBhdGgg J3N0cmljdCAkWypdJyBhcyBwYjEgY29sdW1ucyAoCisJCQkJCWIxIGludCBwYXRoICckJworCQkJ CSkKKwkJCSksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAo CisJCQkJYyB0ZXh0IGZvcm1hdCBqc29uIHBhdGggJyQnLAorCQkJCW5lc3RlZCBwYXRoICdzdHJp Y3QgJFsqXScgYXMgcGMxIGNvbHVtbnMgKAorCQkJCQljMSBpbnQgcGF0aCAnJCcKKwkJCQkpCisJ CQkpCisJCSkKKwkJLS1wbGFuIGRlZmF1bHQob3V0ZXIsIGNyb3NzKQorCQlwbGFuKHAgb3V0ZXIg KChwYiBpbm5lciBwYjEpIGNyb3NzIChwYyBvdXRlciBwYzEpKSkKKwkpIGp0OworCistLSBTaG91 bGQgc3VjY2VlZCAoSlNPTiBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byByb290IGFuZCBuZXN0ZWQg cGF0aHMpCitTRUxFQ1QgKgorRlJPTQorCWdlbmVyYXRlX3NlcmllcygxLCA0KSB4LAorCWdlbmVy YXRlX3NlcmllcygxLCAzKSB5LAorCUpTT05fVEFCTEUoanNvbmIKKwkJJ1tbMSwyLDNdLFsyLDMs NCw1XSxbMyw0LDUsNl1dJywKKwkJJ3N0cmljdCAkWypdID8gKEBbKl0gPCAkeCknCisJCVBBU1NJ TkcgeCBBUyB4LCB5IEFTIHkKKwkJQ09MVU1OUyAoCisJCQl5IHRleHQgRk9STUFUIEpTT04gUEFU SCAnJCcsCisJCQlORVNURUQgUEFUSCAnc3RyaWN0ICRbKl0gPyAoQCA+PSAkeSknCisJCQlDT0xV TU5TICgKKwkJCQl6IGludCBQQVRIICckJworCQkJKQorCQkpCisJKSBqdDsKKworLS0gU2hvdWxk IGZhaWwgKEpTT04gYXJndW1lbnRzIGFyZSBub3QgcGFzc2VkIHRvIGNvbHVtbiBwYXRocykKK1NF TEVDVCAqCitGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ1sxLDIsM10nLAorCSckWypdID8gKEAg PCAkeCknCisJCVBBU1NJTkcgMTAgQVMgeAorCQlDT0xVTU5TICh5IHRleHQgRk9STUFUIEpTT04g UEFUSCAnJCA/IChAIDwgJHgpJykKKwkpIGp0OworCistLSBTaG91bGQgZmFpbCAobm90IHN1cHBv cnRlZCkKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAneyJhIjogMTIzfScsICckJyB8 fCAnLicgfHwgJ2EnIENPTFVNTlMgKGZvbyBpbnQpKTsKZGlmZiAtLWdpdCBhL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QK aW5kZXggYTZiZTZmNzg3NC4uZDU2MmYyMTU1ZiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QK QEAgLTEzMjMsNiArMTMyMyw3IEBAIEpzb25QYXRoTXV0YWJsZUNvbnRleHQKIEpzb25QYXRoUGFy c2VJdGVtCiBKc29uUGF0aFBhcnNlUmVzdWx0CiBKc29uUGF0aFByZWRpY2F0ZUNhbGxiYWNrCitK c29uUGF0aFNwZWMKIEpzb25QYXRoU3RyaW5nCiBKc29uUGF0aFZhcmlhYmxlCiBKc29uUGF0aFZh cmlhYmxlRXZhbENvbnRleHQKQEAgLTEzMzIsNiArMTMzMywyMCBAQCBKc29uUmV0dXJuaW5nCiBK c29uU2NhbGFyRXhwcgogSnNvblNlbUFjdGlvbgogSnNvblNlcmlhbGl6ZUV4cHIKK0pzb25UYWJs ZQorSnNvblRhYmxlQ29sdW1uCitKc29uVGFibGVDb2x1bW5UeXBlCitKc29uVGFibGVDb250ZXh0 CitKc29uVGFibGVQYXJzZUNvbnRleHQKK0pzb25UYWJsZUpvaW5TdGF0ZQorSnNvblRhYmxlUGxh bgorSnNvblRhYmxlUGxhblNwZWMKK0pzb25UYWJsZVBsYW5TdGF0ZQorSnNvblRhYmxlUGxhblN0 YXRlVHlwZQorSnNvblRhYmxlUGxhbkpvaW5UeXBlCitKc29uVGFibGVQbGFuVHlwZQorSnNvblRh YmxlU2NhblN0YXRlCitKc29uVGFibGVTaWJsaW5nCiBKc29uVG9rZW5UeXBlCiBKc29uVHJhbnNm b3JtU3RyaW5nVmFsdWVzQWN0aW9uCiBKc29uVHlwZUNhdGVnb3J5CkBAIC0yNzk3LDYgKzI4MTIs NyBAQCBUYWJsZUZ1bmMKIFRhYmxlRnVuY1JvdXRpbmUKIFRhYmxlRnVuY1NjYW4KIFRhYmxlRnVu Y1NjYW5TdGF0ZQorVGFibGVGdW5jVHlwZQogVGFibGVJbmZvCiBUYWJsZUxpa2VDbGF1c2UKIFRh YmxlU2FtcGxlQ2xhdXNlCi0tIAoyLjM1LjMKCg== --00000000000096e04e060fb0cf2d--