Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oMt2T-0001UD-Sz for pgsql-hackers@arkaria.postgresql.org; Sat, 13 Aug 2022 15:27:02 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oMt2S-0000wb-Jw for pgsql-hackers@arkaria.postgresql.org; Sat, 13 Aug 2022 15:27:00 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oMt2R-0000wO-8D for pgsql-hackers@lists.postgresql.org; Sat, 13 Aug 2022 15:27:00 +0000 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1oMt2I-0002GS-W3 for pgsql-hackers@lists.postgresql.org; Sat, 13 Aug 2022 15:26:58 +0000 Received: by mail-wr1-x431.google.com with SMTP id h13so4107267wrf.6 for ; Sat, 13 Aug 2022 08:26:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc; bh=Uu01Hx86VfzFX4eJJKtfI9hMwEPmvmIO58eNcG4ZjmA=; b=OzY/KyUwO8RmvVCwULtuMcMgvfsG1FdQyhuI+mi9IcY7UDvMHqc4T4VFNOSl901ELW RfK2E++SaiEx2IYBKwADQf2+20dv5gEc2F9cngxUUXv5rssn885wn+PgotnhZA2iRY+A WOOgG+dLkL6FK7CqY1fNR6YPHl4HeH9C0qbJJL52mafIvOar4ffrOhUwbrzHQ7ZNgf74 SMdWYk2lwVf3YYBNw+YneU4n4jZk48fgCHE1KNiPzywwy7gI0mitsAZPZGJ1cmolDrLf u7y3WaVW1rMePRNFki5IpaOwtZKsNhTmWLdrO/ceAHRzyuxG19ym/BXTqvuTciRKQ7nm VrAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc; bh=Uu01Hx86VfzFX4eJJKtfI9hMwEPmvmIO58eNcG4ZjmA=; b=Px4J+KDXQj0SyuFQ+lXLL7zVHKCxx1OWA234yEsgYPlZfuakRSrjy+t3+ugw5qnhmb WYKBtioFh6tB1b0Dh3I+X64qaW0HKVhu48TeX6yrC3rKMMr61ADcp5s8nGXyHCYTBDH0 W9Rd68JjmEzUhIEB7X8j9OA28jw7ZwxtAYt3C03gpvcbHCZTSijjp1hIrV6P285oZ+ZV DJDz8rMluIgmyHa/b9HbvoMwSLhUmjBVr7kDaIp+xQkQI2BbZzdWsCBxLDqHTN1qbQgx UFlvhFSubw6DRxWloVr2DQwvD5lo3tfmv8NDLGZppUxnRV+vaFqUmgr50inxJOpdxyzo 0DPA== X-Gm-Message-State: ACgBeo3++QIl9ShNFZ1zYq1CqqncIhXkcbiJYFwvruSCndm7jhVsRvkB kd31wWaah46EvROSKtRCHVUPeRCzT8fAlSlsmjFB0M7cEuo= X-Google-Smtp-Source: AA6agR5oesla1KyrMYg/wNw2H+3O7gc+eBkzfA10RMnfD1gxHPjl3dFaARkAea9Cc479StQZetS7wNkYUwyMab3gn4o= X-Received: by 2002:adf:da50:0:b0:223:a1f5:fa68 with SMTP id r16-20020adfda50000000b00223a1f5fa68mr4136703wrl.528.1660404408270; Sat, 13 Aug 2022 08:26:48 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Ajin Cherian Date: Sun, 14 Aug 2022 01:26:30 +1000 Message-ID: Subject: Re: Support logical replication of DDLs To: Peter Smith Cc: "houzj.fnst@fujitsu.com" , Amit Kapila , Masahiko Sawada , Japin Li , Alvaro Herrera , Dilip Kumar , rajesh singarapu , PostgreSQL Hackers , Zheng Li Content-Type: multipart/mixed; boundary="000000000000f0bc1005e6210616" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000f0bc1005e6210616 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Aug 5, 2022 at 4:03 PM Peter Smith wrote: > > Hi Hou-san, here are my review comments for the patch v15-0001: > > =3D=3D=3D=3D=3D=3D > > 1. Commit Message > > CREATE/ALTER/DROP TABLE (*) > > At first, I thought "(*)" looks like a SQL syntax element. > > SUGGESTION: > > CREATE/ALTER/DROP TABLE - - Note #1, Note #2 > ... > Note #1 =E2=80=93 blah blah > Note #2 =E2=80=93 yada yada > > =3D=3D=3D=3D=3D=3D fixed > > 2. src/backend/commands/ddl_deparse.c - General > > 2.1 > Lots of the deparse_XXX function are in random places scattered around > in this module. Since there are so many, I think it's better to have > functions arrange alphabetically to make them easier to find. (And if > there are several functions that logically "belong" together then > those should be re-named so they will be group together > alphabetically... > > Same applies to other functions =E2=80=93 not just the deparse_XXX ones fixed > > 2.2 > There are lots of 'tmp' (or 'tmp2') variables in this file. Sometimes > 'tmp' is appropriate (or maybe 'tmpobj' would be better) but in other > cases it seems like there should be a better name than 'tmp'. Please > search all these and replace where you can use a more meaningful name > than tmp. > changed to tmpobj > 2.3 > Pointer NULL comparisons are not done consistently all through the > file. E.g. Sometimes you do tree->fmtinfo =3D=3D NULL, but in others you > do like if (!tree->fmtinfo). It's no big deal whichever way you want > to use, but at least for the comparisons involving the same variables > IMO should use the same style consistently. > > ~~~ fixed. > > 3. src/backend/commands/ddl_deparse.c - format_type_detailed > > 3.1 > + * - typename is set to the type name, without quotes > > But the param is called 'typname', not 'typename' > > 3.2 > + * - typmod is set to the typemod, if any, as a string with parens > > I think you mean: > "typmod is set" -> "typemodstr is set" > > 3.3 > + if (IsTrueArrayType(typeform) && > + typeform->typstorage !=3D TYPSTORAGE_PLAIN) > + { > + /* Switch our attention to the array element type */ > + ReleaseSysCache(tuple); > + tuple =3D SearchSysCache1(TYPEOID, ObjectIdGetDatum(array_base_type)); > + if (!HeapTupleIsValid(tuple)) > + elog(ERROR, "cache lookup failed for type %u", type_oid); > + > + typeform =3D (Form_pg_type) GETSTRUCT(tuple); > + type_oid =3D array_base_type; > + *typarray =3D true; > + } > + else > + *typarray =3D false; > > Maybe this if/else can be simplified > fixed. > *typarray =3D IsTrueArrayType(typeform) && typeform->typstorage !=3D > TYPSTORAGE_PLAIN; > if (*typarray) > { > ... > } > > 3.4 > + /* otherwise, WITH TZ is added by typmod. */ > > Uppercase comment > > ~~~ fixed. > > 4. src/backend/commands/ddl_deparse.c - append_object_to_format_string > > + for (cp =3D sub_fmt; cp < end_ptr; cp++) > + { > + if (*cp =3D=3D '{') > + { > + start_copy =3D true; > + continue; > + } > > What's this logic going to do if it encounters "{{" - it looks like it > will just keep going but wouldn't that be a name error to have a "{" > in it? I think this logic expects single braces. > > ~~~ > > 5. src/backend/commands/ddl_deparse.c - append_bool_object > > +append_bool_object(ObjTree *tree, char *sub_fmt, bool value) > +{ > + ObjElem *param; > + char *object_name =3D sub_fmt; > + bool is_present_flag =3D false; > + > + Assert(sub_fmt); > + > + if (strcmp(sub_fmt, "present") =3D=3D 0) > + { > + is_present_flag =3D true; > + tree->present =3D value; > + } > + > + if (!verbose && !tree->present) > + return; > + > + if (!is_present_flag) > + object_name =3D append_object_to_format_string(tree, sub_fmt); > + > + param =3D new_object(ObjTypeBool, object_name); > + param->value.boolean =3D value; > + append_premade_object(tree, param); > +} > > It feels like there is some subtle trickery going on here with the > conditions. Is there a simpler way to write this, or maybe it is just > lacking some explanatory comments? > > ~~~ Added a comment. > > 6. src/backend/commands/ddl_deparse.c - append_array_object > > + if (!verbose) > + { > + ListCell *lc; > + > + /* Extract the ObjElems whose present flag is true */ > + foreach(lc, array) > + { > + ObjElem *elem =3D (ObjElem *) lfirst(lc); > + > + Assert(elem->objtype =3D=3D ObjTypeObject); > + > + if (!elem->value.object->present) > + array =3D foreach_delete_current(array, lc); > + } > + > + if (list_length(array) =3D=3D 0) > + return; > + } > > Maybe it is OK as-is. I'm just wondering if this list_length(array) > check should be outside of the !verbose check? > > ~~~ fixed. > > 7. src/backend/commands/ddl_deparse.c - objtree_to_jsonb_element > > + case ObjTypeObject: > + /* recursively add the object into the existing parse state */ > > Uppercase comment > > ~~~ > > 8. src/backend/commands/ddl_deparse.c - new_objtree_for_qualname_id > > 8.1 > + * > + * Elements "schemaname" and "objname" are set. If the object is a temp= orary > + * object, the schema name is set to "pg_temp". > > I'm not sure if this is the right place to say this, since it is not > really this function that sets that "pg_temp". > > 8.2 > + if (isnull) > + elog(ERROR, "unexpected NULL namespace"); > + objname =3D heap_getattr(catobj, Anum_name, RelationGetDescr(catalog), > + &isnull); > > Missing blank line after the elog? > > ~~~ > > 9. src/backend/commands/ddl_deparse.c - deparse_ColumnIdentity > > + /* Definition elemets */ > > typo "elemets" > > ~~~ > > 10. src/backend/commands/ddl_deparse.c - deparse_CreateTrigStmt > > 10.1 > + else > + elog(ERROR, "unrecognized trigger timing value %d", node->timing); > > should that say "unrecognized trigger timing type" (e.g. type instead of = value) > > 10.2 > + /* > + * Decode the events that the trigger fires for. The output is a list; > + * in most cases it will just be a string with the even name, but when > + * there's an UPDATE with a list of columns, we return a JSON object. > + */ > > "even name" -> "event name" ? > > 10.3 > + foreach(cell, node->columns) > + { > + char *colname =3D strVal(lfirst(cell)); > + > + cols =3D lappend(cols, > + new_string_object(colname)); > + } > > Unnecessary wrapping? > > 10.4 > + append_array_object(update, "%{columns:, }I", cols); > + > + events =3D lappend(events, > + new_object_object(update)); > > Unnecessary wrapping? > > 10.5 > + /* verify that the argument encoding is correct */ > > Uppercase comment > > ~~~ fixed all the above comments. > > 11. src/backend/commands/ddl_deparse.c - deparse_ColumnDef > > + saw_notnull =3D false; > + foreach(cell, coldef->constraints) > + { > + Constraint *constr =3D (Constraint *) lfirst(cell); > + > + if (constr->contype =3D=3D CONSTR_NOTNULL) > + saw_notnull =3D true; > + } > > Some similar functions here would 'break' when it finds the > saw_notnull. Why not break here? > > ~~~ I think the comment explains why this "not null" is different. > > 12. src/backend/commands/ddl_deparse.c - obtainConstraints > > 12.1 > + /* only one may be valid */ > > Uppercase comment > > 12.2 > + /* > + * scan pg_constraint to fetch all constraints linked to the given > + * relation. > + */ > > Uppercase comment > > ~~~ > > 13. src/backend/commands/ddl_deparse.c - deparse_InhRelations > > +/* > + * Deparse the inherits relations. > + * > + * Given a table OID, return a schema qualified table list representing > + * the parent tables. > + */ > > I am not sure - should that say "Deparse the INHERITS relations." (upperc= ase) > > ~~~ > > 14. src/backend/commands/ddl_deparse.c - pg_get_indexdef_detailed > > 14.1 > + * There is a huge lot of code that's a dupe of pg_get_indexdef_worker, = but > + * control flow is different enough that it doesn't seem worth keeping t= hem > + * together. > + */ > > SUGGESTION > A large amount of code is duplicated from pg_get_indexdef_worker, ... > > 14.2 > + idxrelrec =3D (Form_pg_class) GETSTRUCT(ht_idxrel); > + > + > + /* > + * Fetch the pg_am tuple of the index' access method > + */ > > Remove the extra blank line > > ~~~ > > 15. src/backend/commands/ddl_deparse.c - deparse_IndexStmt > > + /* > + * indexes for PRIMARY KEY and other constraints are output > + * separately; return empty here. > + */ > > Uppercase comment > > ~~~ > > 16. src/backend/commands/ddl_deparse.c - deparse_FunctionSet > > 16.1 > +static ObjTree * > +deparse_FunctionSet(VariableSetKind kind, char *name, char *value) > > Missing function comment. > > 16.2 > + ObjTree *r; > > Is 'r' the best name? fixed all the above comments. > > 16.3 > + if (kind =3D=3D VAR_RESET_ALL) > + { > + r =3D new_objtree("RESET ALL"); > + } > + else if (value !=3D NULL) > + { > + r =3D new_objtree_VA("SET %{set_name}I", 1, > + "set_name", ObjTypeString, name); > + > + /* > + * Some GUC variable names are 'LIST' type and hence must not be > + * quoted. > + */ > + if (GetConfigOptionFlags(name, true) & GUC_LIST_QUOTE) > + append_string_object(r, "TO %{set_value}s", value); > + else > + append_string_object(r, "TO %{set_value}L", value); > + } > + else > + { > + r =3D new_objtree("RESET"); > + append_string_object(r, "%{set_name}I", name); > + } > > It seems a bit strange that the kind of new_objtree is judged > sometimes by the *value. Why isn't this just always switching on the > different VariableSetKind? checking on VariableSetKind requires to check multiple conditions, this is a simpler comparison. > > ~~~ > > 17. src/backend/commands/ddl_deparse.c - deparse_CreateFunction > > 17.1 > +/* > + * deparse_CreateFunctionStmt > + * Deparse a CreateFunctionStmt (CREATE FUNCTION) > + * > + * Given a function OID and the parsetree that created it, return the JS= ON > + * blob representing the creation command. > + */ > +static ObjTree * > +deparse_CreateFunction(Oid objectId, Node *parsetree) > > The name of the function and the name of the function in the comment > don't match. Suggest removing it from the comment. > > 17.2 > + /* get the pg_proc tuple */ > > Uppercase comment > > 17.3 > + /* get the corresponding pg_language tuple */ > > Uppercase comment > > 17.4 > + /* optional wholesale suppression of "name" occurs here */ > > Uppercase comment > > 17.5 > + append_string_object(createFunc, "%{volatility}s", > + procForm->provolatile =3D=3D PROVOLATILE_VOLATILE ? > + "VOLATILE" : > + procForm->provolatile =3D=3D PROVOLATILE_STABLE ? > + "STABLE" : > + procForm->provolatile =3D=3D PROVOLATILE_IMMUTABLE ? > + "IMMUTABLE" : "INVALID VOLATILITY"); > > Does "INVALID VOLATILITY" make sense? Is that a real thing or should > this give ERROR? fixed the above comments, changed the logic here. > > 17.6 > + foreach(cell, node->options) > + { > + DefElem *defel =3D (DefElem *) lfirst(cell); > + ObjTree *tmp =3D NULL; > > Why assign *tmp =3D NULL? I think it serves no purpose. > > ~~~ > > 18. src/backend/commands/ddl_deparse.c - deparse_AlterFunction > > 18.1 > + * Deparse a AlterFunctionStmt (ALTER FUNCTION) > > "a" -> "an" > > 18.2 > + /* get the pg_proc tuple */ > > Uppercase comment > > 18.3 > + alterFunc =3D new_objtree_VA("ALTER FUNCTION", 0); > + > + params =3D NIL; > > Why not just assign params =3D NIL at the declaration? > > ~~~ > > 19. src/backend/commands/ddl_deparse.c - deparse_AlterOwnerStmt > > + * Deparse a AlterOwnerStmt (ALTER ... OWNER TO ...). > > "a" -> "an" > > ~~~ > > 20. src/backend/commands/ddl_deparse.c - deparse_AlterOperatorStmt > > + * Deparse a AlterOperatorStmt (ALTER OPERATOR ... SET ...). > > "a" -> "an" > > ~~~ > > 21. src/backend/commands/ddl_deparse.c - deparse_RenameStmt > > 21.1 > + * In a ALTER .. RENAME command, we don't have the original name of the > > "a" -> "an" > > 21.2 > + relation_close(relation, AccessShareLock); > + > + break; > + case OBJECT_SCHEMA: > > Misplaced bank line; should be before after break; > > 21.3 > + break; > + case OBJECT_TRIGGER: > > Put blank line after break; > > 21.4 > + break; > + default: > > Put blank line after break; > > ~~~ fixed the above comments. > > 22. src/backend/commands/ddl_deparse.c - deparse_Seq_Cache > > +static inline ObjElem * > +deparse_Seq_Cache(ObjTree *parent, Form_pg_sequence seqdata, bool alter_= table) > > Is param 'alter_table=E2=80=99 correct here or should that be 'alter_sequ= ence' > (or just 'alter')? > > ~~ > > 23. src/backend/commands/ddl_deparse.c - deparse_Seq_Cycle > > +static inline ObjElem * > +deparse_Seq_Cycle(ObjTree *parent, Form_pg_sequence seqdata, bool alter_= table) > > Is param 'alter_table=E2=80=99 correct here or should that be 'alter_sequ= ence' > (or just 'alter')? > > ~~~ > > 24. src/backend/commands/ddl_deparse.c - deparse_Seq_IncrementBy > > +static inline ObjElem * > +deparse_Seq_IncrementBy(ObjTree *parent, Form_pg_sequence seqdata, > bool alter_table) > > Is param 'alter_table=E2=80=99 correct here or should that be 'alter_sequ= ence' > (or just 'alter')? > > ~~~ > > 25. src/backend/commands/ddl_deparse.c - deparse_Seq_Minvalue > > +static inline ObjElem * > +deparse_Seq_Minvalue(ObjTree *parent, Form_pg_sequence seqdata, bool > alter_table) > > Is param 'alter_table=E2=80=99 correct here or should that be 'alter_sequ= ence' > (or just 'alter')? > > ~~~ > > 26. src/backend/commands/ddl_deparse.c - deparse_Seq_Maxvalue > > +static inline ObjElem * > +deparse_Seq_Maxvalue(ObjTree *parent, Form_pg_sequence seqdata, bool > alter_table) > > Is param 'alter_table=E2=80=99 correct here or should that be 'alter_sequ= ence' > (or just 'alter')? > > ~~~ > > 27. src/backend/commands/ddl_deparse.c - deparse_Seq_Startwith > > +static inline ObjElem * > +deparse_Seq_Startwith(ObjTree *parent, Form_pg_sequence seqdata, bool > alter_table) > > Is param 'alter_table=E2=80=99 correct here or should that be 'alter_sequ= ence' > (or just 'alter')? > > ~~~ This actually refers to whether the original command is from alter_table or not. > > 28. src/backend/commands/ddl_deparse.c - deparse_CreateSchemaStmt > > +/* > + * Deparse a CreateSchemaStmt. > + * > + * Given a schema OID and the parsetree that created it, return an ObjTr= ee > + * representing the creation command. > + * > + * Note we don't output the schema elements given in the creation comman= d. > + * They must be output separately. (In the current implementation, > + * CreateSchemaCommand passes them back to ProcessUtility, which will le= ad to > + * this file if appropriate.) > + */ > > "this file" ?? > > ~~~ removed this. > > 29. src/backend/commands/ddl_deparse.c - deparse_Seq_OwnedBy > > 29.1 > +static ObjElem * > +deparse_Seq_OwnedBy(ObjTree *parent, Oid sequenceId, bool alter_table) > > Missing function comment. > > 29.2 > + /* only consider AUTO dependencies on pg_class */ > > Uppercase comment. > > 29.3 > + if (!ownedby) > + /* XXX this shouldn't happen ... */ > + ownedby =3D new_objtree_VA("OWNED BY %{owner}D", > + 3, > + "clause", ObjTypeString, "owned", > + "owner", ObjTypeNull, > + "present", ObjTypeBool, false); > + return new_object_object(ownedby); > > Put blank line before return; > > ~~~ > > 30. src/backend/commands/ddl_deparse.c - deparse_CreateSeqStmt > > 30.1 > + /* definition elemets */ > > Uppercase comment, and typo "elemets" > > 30.2 > + /* we purposefully do not emit OWNED BY here */ > > Uppercase comment > > ~~~ > > 31. src/backend/commands/ddl_deparse.c - deparse_AlterTableStmt > > 31.1 > + tmp =3D new_objtree_VA("ADD CONSTRAINT %{name}I", > + 2, > + "type", ObjTypeString, "add constraint using index", > + "name", ObjTypeString, get_constraint_name(constrOid)); > > I think it was customary for you to put the number of varags on the > 1st line, not like this. There are several others like this in this > function which should also be changed (where they fit OK on the first > line). > > 31.2 > + append_array_object(alterTableStmt, "%{subcmds:, }s", subcmds); > + return alterTableStmt; > > Maybe add blank line before the return; > > ~~~ > > 32. src/backend/commands/ddl_deparse.c - deparse_AlterOpFamily > > 32.1 > + list =3D NIL; > + foreach(cell, cmd->d.opfam.operators) > > Why not assign list =3D NIL with the declaration? > > 32.2 > + proargtypes =3D procForm->proargtypes.values; > + arglist =3D NIL; > + for (i =3D 0; i < procForm->pronargs; i++) > > Why not assign arglist =3D NIL with the declaration? > > 32.3 > + if (!stmt->isDrop) > + append_format_string(alterOpFam, "ADD"); > + else > + append_format_string(alterOpFam, "DROP"); > > Maybe simpler to reverse these; IMO isDrop means "DROP" makes more sense. > > ~~~ > > 33. src/backend/commands/ddl_deparse.c - deparse_DefineStmt_Operator > > + /* Add the definition clause */ > + list =3D NIL; > > Why not assign list =3D NIL with the declaration? > > ~~~ fixed all the above comments. > > 34. src/backend/commands/ddl_deparse.c - deparse_DefineStmt > > + default: > + elog(ERROR, "unsupported object kind"); > + return NULL; > > What purpose does this return serve after the ERROR? If you have to do > something to quieten the compiler, maybe it's better to set defStmt =3D > NULL at declaration. > > =3D=3D=3D=3D=3D=3D > > 35. src/backend/commands/ddl_json.c - > > In the errmsg text some of the messages say JSON (uppercase) and some > say json (lowercase). IMO they should all be consistent. Maybe say > JSON, since that way seems dominant. > > ~~~ > > 36. src/backend/commands/ddl_json.c - enum > > +typedef enum > +{ > + tv_absent, > + tv_true, > + tv_false > +} trivalue; > > It seems there is another enum elsewhere already called this, because > you did not add it into the typedefs.list, yet it is already there. Is > that OK? Maybe this should have a unique name for this module. > > ~~~ changed this to say json_trivalue > > 37. src/backend/commands/ddl_json.c - expand_fmt_recursive > > 37.1 > + is_array =3D false; > + > + ADVANCE_PARSE_POINTER(cp, end_ptr); > > Why not assign is_array =3D false in the declaration? > > 37.2 > + /* > + * Validate that we got an array if the format string specified one. > + * And finally print out the data > + */ > + if (is_array) > + expand_jsonb_array(buf, param, value, arraysep, specifier, start_ptr); > + else > + expand_one_jsonb_element(buf, param, value, specifier, start_ptr); > > "Print out" the data? This comment seems a bit over-complicated. > Perhaps these sentences can be combined and re-worded a bit. > > SUGGESTION (maybe?) > Expand the data (possibly an array) into the output StringInfo. > > ~~~ > > 38. src/backend/commands/ddl_json.c - expand_jsonval_identifier > > +/* > + * Expand a json value as an identifier. The value must be of type stri= ng. > + */ > +static void > +expand_jsonval_identifier(StringInfo buf, JsonbValue *jsonval) > > Should that say "as a quoted identifier" ? > > ~~~ > > 39. src/backend/commands/ddl_json.c - expand_jsonval_typename > > 39.1 > + switch (is_array) > + { > + default: > + case tv_absent: > > It seems slightly unusual for the default case to not be the last > switch case. Consider rearranging it. > > fixed this. > 39.2 > + if (schema =3D=3D NULL) > + appendStringInfo(buf, "%s%s%s", > + quote_identifier(typename), > + typmodstr ? typmodstr : "", > + array_decor); > + > + /* Special typmod needs */ > + else if (schema[0] =3D=3D '\0') > + appendStringInfo(buf, "%s%s%s", > + typename, > + typmodstr ? typmodstr : "", > + array_decor); > + else > + appendStringInfo(buf, "%s.%s%s%s", > + quote_identifier(schema), > + quote_identifier(typename), > + typmodstr ? typmodstr : "", > + array_decor); > > The last 2 parts: > typmodstr ? typmodstr : "", > array_decor); > > are common for all those above appendStringInfo, so you could reduce > the code (if you want to) and just add the common parts at the end. > > e.g. > > if (schema =3D=3D NULL) > appendStringInfo(buf, "%s", quote_identifier(typename)); > else if (schema[0] =3D=3D '\0') > appendStringInfo(buf, "%s", typename); /* Special typmod needs */ > else > appendStringInfo(buf, "%s.%s", quote_identifier(schema), > quote_identifier(typename)); > > appendStringInfo(buf, "%s%s", typmodstr ? typmodstr : "", array_decor); > > fixed it accordingly. > 39.3 > In other code (e.g. expand_jsonval_dottedname) you did lots of > pfree(str) after using the strings, so why not similar here? > > ~~~ > > 40. src/backend/commands/ddl_json.c - expand_jsonval_operator > > 40.1 > + /* schema might be NULL or empty */ > > Uppercase comment > > 40.2 > Why no pfree(str) here similar to what there was in prior code (e.g. > expand_jsonval_dottedname)? > > ~~~ > > 41. src/backend/commands/ddl_json.c - expand_jsonval_string > > Comment says "The value must be of type string or of type object." > > Yeah, but what it is isn't? This code will just fall thru and return > true. Is that the right behaviour? Should there be an Assert at least? > > ~~~ > > 42. src/backend/commands/ddl_json.c - expand_jsonval_number > > Does this need some pfree after the string is copied to 'buf'? > > ~~~ > > 43 src/backend/commands/ddl_json.c - expand_jsonval_role > > + rolename =3D find_string_in_jsonbcontainer(jsonval->val.binary.data, > + "rolename", false, NULL); > + appendStringInfoString(buf, quote_identifier(rolename)); > > Does this need some pfree after the string is copied to 'buf'? > > ~~~ > > 44. src/backend/commands/ddl_json.c - ddl_deparse_json_to_string > > + d =3D DirectFunctionCall1(jsonb_in, > + PointerGetDatum(json_str)); > > Seems unnecessary wrapping here. > > ~~~ > > 45. src/backend/commands/ddl_json.c - fmtstr_error_callback > > 45.1 > +/* > + * Error context callback for JSON format string expansion. > + * > + * Possible improvement: indicate which element we're expanding, if appl= icable. > + */ > > Should that "Possible improvement" comment have "XXX" prefix like most > other possible improvement comments have? > > 45.2 > +fmtstr_error_callback(void *arg) > +{ > + errcontext("while expanding format string \"%s\"", (char *) arg); > + > +} > > Remove the blank line. > > =3D=3D=3D=3D=3D=3D > > 46. src/backend/utils/adt/ruleutils.c - pg_get_trigger_whenclause > > +char * > +pg_get_trigger_whenclause(Form_pg_trigger trigrec, Node *whenClause, > bool pretty) > > Missing function comment > > ~~~ > > 47. src/backend/utils/adt/ruleutils.c - print_function_sqlbody > > @@ -3513,7 +3526,7 @@ pg_get_function_arg_default(PG_FUNCTION_ARGS) > PG_RETURN_TEXT_P(string_to_text(str)); > } > > -static void > +void > print_function_sqlbody(StringInfo buf, HeapTuple proctup) > { > > Having a function comment is more important now that this is no longer st= atic. > > ------ fixed these. regards, Ajin Cherian Fujitsu Australia --000000000000f0bc1005e6210616 Content-Type: application/octet-stream; name="v17-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Disposition: attachment; filename="v17-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l6s1viz52 RnJvbSA0NWRhNWRhODJiZGQ1MDRjMTliODhjYWQ2M2JkMDBjZmM5NGI3NThjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFNhdCwgMTMgQXVnIDIwMjIgMDg6MzE6MjggLTA0MDAKU3ViamVjdDogW1BBVENI IHYxNyAzLzRdIFN1cHBvcnQgQ1JFQVRFIFRBQkxFIEFTIFNFTEVDVCBJTlRPCgpUaGUgbWFpbiBp ZGVhIG9mIHJlcGxpY2F0aW5nIHRoZSBDUkVBVEUgVEFCTEUgQVMgaXMgdGhhdCB3ZSBkZXByYXNl IHRoZSBDUkVBVEUKVEFCTEUgQVMgaW50byBhIHNpbXBsZSBDUkVBVEUgVEFCTEUod2l0aG91dCBz dWJxdWVyeSkgY29tbWFuZCBhbmQgV0FMIGxvZyBpdAphZnRlciBjcmVhdGluZyB0aGUgdGFibGUg YW5kIGJlZm9yZSB3cml0aW5nIGRhdGEgaW50byB0aGUgdGFibGUgYW5kIHJlcGxpY2F0ZQp0aGUg aW5jb21pbmcgd3JpdGVzIGxhdGVyIGFzIG5vcm1hbCBJTlNFUlRzLiBJbiB0aGlzIGFwcG9yYWNo LCB3ZSBkb24ndCBleGVjdXRlCnRoZSBzdWJxdWVyeSBvbiBzdWJzY3JpYmVyIHNvIHRoYXQgZG9u J3QgbmVlZCB0byBtYWtlIHN1cmUgYWxsIHRoZSBvYmplY3RzCnJlZmVyZW5jZWQgaW4gdGhlIHN1 YnF1ZXJ5IGFsc28gZXhpc3RzIGluIHN1YnNjcmliZXIuIEFuZCBUaGlzIGFwcHJvYWNoIHdvcmtz CmZvciBhbGwga2luZCBvZiBjb21tYW5kcyhlLmcuIENSQUVURSBUQUJMRSBBUyBbU0VMRUNUXVtF WEVDVVRFXVtWQUxVRVNdKQoKSW50cm9kdWNpbmcgYSBuZXcgdHlwZSBvZiBldmVudCB0cmlnZ2Vy ICJ0YWJsZV9pbml0X3dyaXRlIi4gd2hpY2ggd291bGQgYmUgZmlyZWQKZm9yIENSRUFURSBUQUJM RSBBUy9TRUxFQ1QgSU5UTyBhZnRlciBjcmVhdGluZyB0aGUgdGFibGUgYW5kCmJlZm9yZSBhbnkg b3RoZXIgbW9kaWZpY2F0aW9uLiB3ZSBkZXBhcnNlIHRoZSBjb21tYW5kIGluIHRoZSB0YWJsZV9p bml0X3dyaXRlIGV2ZW50CnRyaWdnZXIgYW5kIFdBTCBsb2cgdGhlIGRlcGFyc2VkIGpzb24gc3Ry aW5nLiBUaGUgd2Fsc2VuZGVyIHdpbGwgc2VuZCB0aGUKc3RyaW5nIHRvIHN1YnNjcmliZXIuIEFu ZCBpbmNvbWluZyBJTlNFUlRzIHdpbGwgYWxzbyBiZSByZXBsaWNhdGVkLgotLS0KIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMgICAgICAgIHwgIDEwICsrCiBzcmMvYmFja2VuZC9jb21t YW5kcy9kZGxfZGVwYXJzZS5jICAgICB8ICAyNCArKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5jICAgfCAxNzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst CiBzcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyB8ICAgOSArKwogc3JjL2Jh Y2tlbmQvdGNvcC91dGlsaXR5LmMgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvdXRp bHMvY2FjaGUvZXZ0Y2FjaGUuYyAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmRhdCAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dl ci5oICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCAgICAgfCAg IDkgKy0KIHNyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmggICAgICAgICAgIHwgICAzICstCiAx MCBmaWxlcyBjaGFuZ2VkLCAyMzIgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvY3JlYXRlYXMuYwppbmRleCA5YWJiYjZiLi45ODllODk0IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Ny ZWF0ZWFzLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5o IgogI2luY2x1ZGUgImNhdGFsb2cvdG9hc3RpbmcuaCIKICNpbmNsdWRlICJjb21tYW5kcy9jcmVh dGVhcy5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCIKICNpbmNsdWRlICJj b21tYW5kcy9tYXR2aWV3LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJlcGFyZS5oIgogI2luY2x1 ZGUgImNvbW1hbmRzL3RhYmxlY21kcy5oIgpAQCAtMTQzLDYgKzE0NCwxNSBAQCBjcmVhdGVfY3Rh c19pbnRlcm5hbChMaXN0ICphdHRyTGlzdCwgSW50b0NsYXVzZSAqaW50bykKIAkJU3RvcmVWaWV3 UXVlcnkoaW50b1JlbGF0aW9uQWRkci5vYmplY3RJZCwgcXVlcnksIGZhbHNlKTsKIAkJQ29tbWFu ZENvdW50ZXJJbmNyZW1lbnQoKTsKIAl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogRmlyZSB0aGUg dHJpZ2dlciBmb3IgdGFibGVfaW5pdF93cml0ZSBhZnRlciBjcmVhdGluZyB0aGUgdGFibGUgc28K KwkJICogdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZSBjYXRhbG9nIGluZm8gYWJvdXQgdGhlIG5ld2x5 IGNyZWF0ZWQgdGFibGUgaW4KKwkJICogdGhlIHRyaWdnZXIgZnVuY3Rpb24uCisJCSAqLworCQlF dmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZSgoTm9kZSAqKSBjcmVhdGUsIGludG9SZWxhdGlvbkFk ZHIpOworCX0KIAogCXJldHVybiBpbnRvUmVsYXRpb25BZGRyOwogfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Rk bF9kZXBhcnNlLmMKaW5kZXggYzFjZjk5My4uZjU5NDczYyAxMDA3NTUKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxf ZGVwYXJzZS5jCkBAIC01MjgxLDYgKzUyODEsMjcgQEAgZGVwYXJzZV9TZXFfU3RhcnR3aXRoKE9i alRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmwK IH0KIAogLyoKKyAqIERlcGFyc2UgQ1JFQVRFIFRBQkxFIEFTIGNvbW1hbmQuCisgKgorICogZGVw YXJzZV9DcmVhdGVTdG10IGRvIHRoZSBhY3R1YWwgd29yayBhcyB3ZSBkZXBhcnNlIHRoZSBmaW5h bCBDcmVhdGVTdG10IGZvcgorICogQ1JFQVRFIFRBQkxFIEFTIGNvbW1hbmQuCisgKi8KK3N0YXRp YyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlVGFibGVBc1N0bXQoQ29sbGVjdGVkQ29tbWFuZCAq Y21kKQoreworCU9pZAkJCW9iamVjdElkOworCU5vZGUJICAgKnBhcnNldHJlZTsKKworCUFzc2Vy dChjbWQtPnR5cGUgPT0gU0NUX0NyZWF0ZVRhYmxlQXMpOworCisJcGFyc2V0cmVlID0gY21kLT5k LmN0YXMucmVhbF9jcmVhdGU7CisJb2JqZWN0SWQgPSBjbWQtPmQuY3Rhcy5hZGRyZXNzLm9iamVj dElkOworCisJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsK K30KKworCisvKgogICogSGFuZGxlIGRlcGFyc2luZyBvZiBzaW1wbGUgY29tbWFuZHMuCiAgKgog ICogVGhpcyBmdW5jdGlvbiBzaG91bGQgY292ZXIgYWxsIGNhc2VzIGhhbmRsZWQgaW4gUHJvY2Vz c1V0aWxpdHlTbG93LgpAQCAtNTQ3Niw2ICs1NDk3LDkgQEAgZGVwYXJzZV91dGlsaXR5X2NvbW1h bmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kLCBib29sIHZlcmJvc2VfbW9kZSkKIAkJY2FzZSBTQ1Rf QWx0ZXJUYWJsZToKIAkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyVGFibGVTdG10KGNtZCk7CiAJCQli cmVhazsKKwkJY2FzZSBTQ1RfQ3JlYXRlVGFibGVBczoKKwkJCXRyZWUgPSBkZXBhcnNlX0NyZWF0 ZVRhYmxlQXNTdG10KGNtZCk7CisJCQlicmVhazsKIAkJY2FzZSBTQ1RfQWx0ZXJPcEZhbWlseToK IAkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyT3BGYW1pbHkoY21kKTsKIAkJCWJyZWFrOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCmluZGV4IDQ1NmYwZTEuLjBhZDNiNTQgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYworKysgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKQEAgLTEzMyw3ICsxMzMsOCBAQCBDcmVhdGVFdmVu dFRyaWdnZXIoQ3JlYXRlRXZlbnRUcmlnU3RtdCAqc3RtdCkKIAlpZiAoc3RyY21wKHN0bXQtPmV2 ZW50bmFtZSwgImRkbF9jb21tYW5kX3N0YXJ0IikgIT0gMCAmJgogCQlzdHJjbXAoc3RtdC0+ZXZl bnRuYW1lLCAiZGRsX2NvbW1hbmRfZW5kIikgIT0gMCAmJgogCQlzdHJjbXAoc3RtdC0+ZXZlbnRu YW1lLCAic3FsX2Ryb3AiKSAhPSAwICYmCi0JCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJs ZV9yZXdyaXRlIikgIT0gMCkKKwkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3Jp dGUiKSAhPSAwICYmCisJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9pbml0X3dyaXRl IikgIT0gMCkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9F UlJPUiksCiAJCQkJIGVycm1zZygidW5yZWNvZ25pemVkIGV2ZW50IG5hbWUgXCIlc1wiIiwKQEAg LTE1OSw3ICsxNjAsOCBAQCBDcmVhdGVFdmVudFRyaWdnZXIoQ3JlYXRlRXZlbnRUcmlnU3RtdCAq c3RtdCkKIAkvKiBWYWxpZGF0ZSB0YWcgbGlzdCwgaWYgYW55LiAqLwogCWlmICgoc3RyY21wKHN0 bXQtPmV2ZW50bmFtZSwgImRkbF9jb21tYW5kX3N0YXJ0IikgPT0gMCB8fAogCQkgc3RyY21wKHN0 bXQtPmV2ZW50bmFtZSwgImRkbF9jb21tYW5kX2VuZCIpID09IDAgfHwKLQkJIHN0cmNtcChzdG10 LT5ldmVudG5hbWUsICJzcWxfZHJvcCIpID09IDApCisJCSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1l LCAic3FsX2Ryb3AiKSA9PSAwIHx8CisJCSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVf aW5pdF93cml0ZSIpID09IDApCiAJCSYmIHRhZ3MgIT0gTlVMTCkKIAkJdmFsaWRhdGVfZGRsX3Rh Z3MoInRhZyIsIHRhZ3MpOwogCWVsc2UgaWYgKHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJs ZV9yZXdyaXRlIikgPT0gMApAQCAtNTg1LDcgKzU4Nyw4IEBAIEV2ZW50VHJpZ2dlckNvbW1vblNl dHVwKE5vZGUgKnBhcnNldHJlZSwKIAkJZGJndGFnID0gQ3JlYXRlQ29tbWFuZFRhZyhwYXJzZXRy ZWUpOwogCQlpZiAoZXZlbnQgPT0gRVZUX0RETENvbW1hbmRTdGFydCB8fAogCQkJZXZlbnQgPT0g RVZUX0RETENvbW1hbmRFbmQgfHwKLQkJCWV2ZW50ID09IEVWVF9TUUxEcm9wKQorCQkJZXZlbnQg PT0gRVZUX1NRTERyb3AgfHwKKwkJCWV2ZW50ID09IEVWVF9UYWJsZUluaXRXcml0ZSkKIAkJewog CQkJaWYgKCFjb21tYW5kX3RhZ19ldmVudF90cmlnZ2VyX29rKGRiZ3RhZykpCiAJCQkJZWxvZyhF UlJPUiwgInVuZXhwZWN0ZWQgY29tbWFuZCB0YWcgXCIlc1wiIiwgR2V0Q29tbWFuZFRhZ05hbWUo ZGJndGFnKSk7CkBAIC04NjgsNiArODcxLDE2MyBAQCBFdmVudFRyaWdnZXJUYWJsZVJld3JpdGUo Tm9kZSAqcGFyc2V0cmVlLCBPaWQgdGFibGVPaWQsIGludCByZWFzb24pCiAJQ29tbWFuZENvdW50 ZXJJbmNyZW1lbnQoKTsKIH0KIAorCisvKgorICogRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVT dGFydAorICogICAgIFByZXBhcmUgdG8gcmVjZWl2ZSBkYXRhIG9uIGFuIENSRUFURSBUQUJMRSBB Uy9TRUxFVCBJTlRPIGNvbW1hbmQgYWJvdXQKKyAqICAgICB0byBiZSBleGVjdXRlZC4KKyAqLwor dm9pZAorRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVTdGFydChOb2RlICpwYXJzZXRyZWUpCit7 CisJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CisJQ29sbGVjdGVkQ29tbWFuZCAqY29tbWFuZDsKKwor CS8qIGlnbm9yZSBpZiBldmVudCB0cmlnZ2VyIGNvbnRleHQgbm90IHNldCwgb3IgY29sbGVjdGlv biBkaXNhYmxlZCAqLworCWlmICghY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJl bnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFuZENvbGxlY3Rpb25JbmhpYml0ZWQpCisJCXJldHVy bjsKKworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjdXJyZW50RXZlbnRUcmlnZ2Vy U3RhdGUtPmN4dCk7CisKKwljb21tYW5kID0gcGFsbG9jKHNpemVvZihDb2xsZWN0ZWRDb21tYW5k KSk7CisKKwljb21tYW5kLT50eXBlID0gU0NUX0NyZWF0ZVRhYmxlQXM7CisJY29tbWFuZC0+aW5f ZXh0ZW5zaW9uID0gY3JlYXRpbmdfZXh0ZW5zaW9uOworCWNvbW1hbmQtPmQuY3Rhcy5hZGRyZXNz ID0gSW52YWxpZE9iamVjdEFkZHJlc3M7CisJY29tbWFuZC0+ZC5jdGFzLnJlYWxfY3JlYXRlID0g TlVMTDsKKwljb21tYW5kLT5wYXJzZXRyZWUgPSBjb3B5T2JqZWN0KHBhcnNldHJlZSk7CisKKwlj b21tYW5kLT5wYXJlbnQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5k OworCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQgPSBjb21tYW5kOwor CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7Cit9CisKKy8qCisgKiBFdmVudFRyaWdn ZXJUYWJsZUluaXRXcml0ZUVuZAorICoJCUZpbmlzaCB1cCBzYXZpbmcgYW4gQ1JFQVRFIFRBQkxF IEFTL1NFTEVDVCBJTlRPIGNvbW1hbmQuCisgKgorICogRklYTUUgdGhpcyBBUEkgaXNuJ3QgY29u c2lkZXJpbmcgdGhlIHBvc3NpYmlsaXR5IHRoYXQgYW4geGFjdC9zdWJ4YWN0IGlzCisgKiBhYm9y dGVkIHBhcnR3YXkgdGhyb3VnaC4gIFByb2JhYmx5IGl0J3MgYmVzdCB0byBhZGQgYW4KKyAqIEF0 RU9TdWJYYWN0X0V2ZW50VHJpZ2dlcnMoKSB0byBmaXggdGhpcy4KKyAqLwordm9pZAorRXZlbnRU cmlnZ2VyVGFibGVJbml0V3JpdGVFbmQodm9pZCkKK3sKKwlDb2xsZWN0ZWRDb21tYW5kICpwYXJl bnQ7CisKKwkvKiBpZ25vcmUgaWYgZXZlbnQgdHJpZ2dlciBjb250ZXh0IG5vdCBzZXQsIG9yIGNv bGxlY3Rpb24gZGlzYWJsZWQgKi8KKwlpZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSB8fAor CQljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRDb2xsZWN0aW9uSW5oaWJpdGVkKQor CQlyZXR1cm47CisKKwlwYXJlbnQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRD b21tYW5kLT5wYXJlbnQ7CisKKwlwZnJlZShjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJl bnRDb21tYW5kKTsKKworCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQg PSBwYXJlbnQ7Cit9CisKKy8qCisgKiBwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX2luaXRfd3Jp dGUKKyAqCisgKiBEZXBhcnNlIHRoZSBkZGwgdGFibGUgY3JlYXRlIGNvbW1hbmQgYW5kIGxvZyBp dC4KKyAqLworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZShQR19G VU5DVElPTl9BUkdTKQoreworCWNoYXIJCQkJcmVscGVyc2lzdDsKKwlDb2xsZWN0ZWRDb21tYW5k ICAgKmNtZDsKKwljaGFyICAgCQkJICAgKmpzb25fc3RyaW5nOworCisJaWYgKCFDQUxMRURfQVNf RVZFTlRfVFJJR0dFUihmY2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5IGV2ZW50 IHRyaWdnZXIgbWFuYWdlciIpOworCisJY21kID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5j dXJyZW50Q29tbWFuZDsKKwlBc3NlcnQoY21kKTsKKworCXJlbHBlcnNpc3QgPSBnZXRfcmVsX3Bl cnNpc3RlbmNlKGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJZCk7CisKKwkvKgorCSAqIERv IG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3aG9zZSB0YXJnZXQgdGFibGUgaXMg YSB0ZW1wb3JhcnkKKwkgKiB0YWJsZS4KKwkgKgorCSAqIFdlIHdpbGwgZ2VuZXJhdGUgd2FsIGxv Z3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVubG9nZ2VkIHRhYmxlcworCSAqIGNhbiBh bHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVyZWQgb24gdGhlIHN1YnNjcmliZXIgc2lkZS4gVGhpcyBt YWtlcyBpdAorCSAqIHBvc3NpYmxlIHRvIGRpcmVjdGx5IHJlcGxheSB0aGUgU0VUIExPR0dFRCBj b21tYW5kIGFuZCB0aGUgaW5jb21pbmcKKwkgKiByZXdyaXRlIG1lc3NhZ2Ugd2l0aG91dCBjcmVh dGluZyBhIG5ldyB0YWJsZS4KKwkgKi8KKwlpZiAocmVscGVyc2lzdCA9PSBSRUxQRVJTSVNURU5D RV9URU1QKQorCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworCisJLyogRGVwYXJzZSB0 aGUgRERMIGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQgdG8gYWxsb3cgZGVjb2Rpbmcgb2YgdGhlIHNh bWUuICovCisJanNvbl9zdHJpbmcgPSBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChjbWQsIGZhbHNl KTsKKworCWlmIChqc29uX3N0cmluZyAhPSBOVUxMKQorCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgi ZGVwYXJzZSIsIGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJZCwgRENUX1NpbXBsZUNtZCwK KwkJCQkJCQkganNvbl9zdHJpbmcsIHN0cmxlbihqc29uX3N0cmluZykgKyAxKTsKKworCXJldHVy biBQb2ludGVyR2V0RGF0dW0oTlVMTCk7Cit9CisKKy8qCisgKiBGaXJlIHRhYmxlX2luaXRfcmV3 cml0ZSB0cmlnZ2Vycy4KKyAqLwordm9pZAorRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGUoTm9k ZSAqcmVhbF9jcmVhdGUsIE9iamVjdEFkZHJlc3MgYWRkcmVzcykKK3sKKwlMaXN0CSAgICpydW5s aXN0OworCUV2ZW50VHJpZ2dlckRhdGEgdHJpZ2RhdGE7CisJQ29sbGVjdGVkQ29tbWFuZCAqY29t bWFuZDsKKworCS8qCisJICogU2VlIEV2ZW50VHJpZ2dlckRETENvbW1hbmRTdGFydCBmb3IgYSBk aXNjdXNzaW9uIGFib3V0IHdoeSBldmVudAorCSAqIHRyaWdnZXJzIGFyZSBkaXNhYmxlZCBpbiBz aW5nbGUgdXNlciBtb2RlLgorCSAqLworCWlmICghSXNVbmRlclBvc3RtYXN0ZXIpCisJCXJldHVy bjsKKworCS8qCisJICogQWxzbyBkbyBub3RoaW5nIGlmIG91ciBzdGF0ZSBpc24ndCBzZXQgdXAs IHdoaWNoIGl0IHdvbid0IGJlIGlmIHRoZXJlCisJICogd2VyZW4ndCBhbnkgcmVsZXZhbnQgZXZl bnQgdHJpZ2dlcnMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IERETAorCSAqIGNvbW1hbmQu ICBUaGlzIHRlc3QgbWlnaHQgdGhlcmVmb3JlIHNlZW0gb3B0aW9uYWwsIGJ1dCBpdCdzCisJICog Km5lY2Vzc2FyeSosIGJlY2F1c2UgRXZlbnRUcmlnZ2VyQ29tbW9uU2V0dXAgbWlnaHQgZmluZCB0 cmlnZ2VycyB0aGF0CisJICogZGlkbid0IGV4aXN0IGF0IHRoZSB0aW1lIHRoZSBjb21tYW5kIHN0 YXJ0ZWQuCisJICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUpCisJCXJldHVybjsK KworCS8qIERvIG5vdGhpbmcgaWYgbm8gY29tbWFuZCB3YXMgY29sbGVjdGVkLiAqLworCWlmICgh Y3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCkKKwkJcmV0dXJuOworCisJ Y29tbWFuZCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisKKwly dW5saXN0ID0gRXZlbnRUcmlnZ2VyQ29tbW9uU2V0dXAoY29tbWFuZC0+cGFyc2V0cmVlLAorCQkJ CQkJCQkJICBFVlRfVGFibGVJbml0V3JpdGUsCisJCQkJCQkJCQkgICJ0YWJsZV9pbml0X3dyaXRl IiwKKwkJCQkJCQkJCSAgJnRyaWdkYXRhKTsKKwlpZiAocnVubGlzdCA9PSBOSUwpCisJCXJldHVy bjsKKworCS8qIFNldCB0aGUgcmVhbCBDcmVhdGVUYWJsZSBzdGF0bWVudCBhbmQgb2JqZWN0IGFk ZHJlc3MgKi8KKwljb21tYW5kLT5kLmN0YXMucmVhbF9jcmVhdGUgPSByZWFsX2NyZWF0ZTsKKwlj b21tYW5kLT5kLmN0YXMuYWRkcmVzcyA9IGFkZHJlc3M7CisKKwkvKiBSdW4gdGhlIHRyaWdnZXJz LiAqLworCUV2ZW50VHJpZ2dlckludm9rZShydW5saXN0LCAmdHJpZ2RhdGEpOworCisJLyogQ2xl YW51cC4gKi8KKwlsaXN0X2ZyZWUocnVubGlzdCk7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSBhbnl0 aGluZyB0aGUgZXZlbnQgdHJpZ2dlcnMgZGlkIHdpbGwgYmUgdmlzaWJsZSB0byB0aGUgbWFpbgor CSAqIGNvbW1hbmQuCisJICovCisJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKK30KKwogLyoK ICAqIEludm9rZSBlYWNoIGV2ZW50IHRyaWdnZXIgaW4gYSBsaXN0IG9mIGV2ZW50IHRyaWdnZXJz LgogICovCkBAIC0xMTQ4LDcgKzEzMDgsOCBAQCB0cmFja0Ryb3BwZWRPYmplY3RzTmVlZGVkKHZv aWQpCiAJICovCiAJcmV0dXJuIGxpc3RfbGVuZ3RoKEV2ZW50Q2FjaGVMb29rdXAoRVZUX1NRTERy b3ApKSA+IDAgfHwKIAkJbGlzdF9sZW5ndGgoRXZlbnRDYWNoZUxvb2t1cChFVlRfVGFibGVSZXdy aXRlKSkgPiAwIHx8Ci0JCWxpc3RfbGVuZ3RoKEV2ZW50Q2FjaGVMb29rdXAoRVZUX0RETENvbW1h bmRFbmQpKSA+IDA7CisJCWxpc3RfbGVuZ3RoKEV2ZW50Q2FjaGVMb29rdXAoRVZUX0RETENvbW1h bmRFbmQpKSA+IDAgfHwKKwkJbGlzdF9sZW5ndGgoRXZlbnRDYWNoZUxvb2t1cChFVlRfVGFibGVJ bml0V3JpdGUpKSA+IDA7CiB9CiAKIC8qCkBAIC0xODY3LDYgKzIwMjgsNyBAQCBwZ19ldmVudF90 cmlnZ2VyX2RkbF9jb21tYW5kcyhQR19GVU5DVElPTl9BUkdTKQogCQkJY2FzZSBTQ1RfQWx0ZXJP cEZhbWlseToKIAkJCWNhc2UgU0NUX0NyZWF0ZU9wQ2xhc3M6CiAJCQljYXNlIFNDVF9BbHRlclRT Q29uZmlnOgorCQkJY2FzZSBTQ1RfQ3JlYXRlVGFibGVBczoKIAkJCQl7CiAJCQkJCWNoYXIJICAg KmlkZW50aXR5OwogCQkJCQljaGFyCSAgICp0eXBlOwpAQCAtMTg4NCw2ICsyMDQ2LDggQEAgcGdf ZXZlbnRfdHJpZ2dlcl9kZGxfY29tbWFuZHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJCWFkZHIg PSBjbWQtPmQuY3JlYXRlb3BjLmFkZHJlc3M7CiAJCQkJCWVsc2UgaWYgKGNtZC0+dHlwZSA9PSBT Q1RfQWx0ZXJUU0NvbmZpZykKIAkJCQkJCWFkZHIgPSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3M7CisJ CQkJCWVsc2UgaWYgKGNtZC0+dHlwZSA9PSBTQ1RfQWx0ZXJUU0NvbmZpZykKKwkJCQkJCWFkZHIg PSBjbWQtPmQuY3Rhcy5hZGRyZXNzOwogCiAJCQkJCS8qCiAJCQkJCSAqIElmIGFuIG9iamVjdCB3 YXMgZHJvcHBlZCBpbiB0aGUgc2FtZSBjb21tYW5kIHdlIG1heSBlbmQKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvcHVibGljYXRpb25jbWRzLmMKaW5kZXggMjE1YzgyOS4uOTJmOTc4MSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKQEAgLTk4Niw2ICs5ODYsMTEgQEAgQ3JlYXRlUHVi bGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQp CiAJCQlDTURUQUdfQUxURVJfSU5ERVgKIAkJfTsKIAorCQlDb21tYW5kVGFnCWluaXRfY29tbWFu ZHNbXSA9IHsKKwkJCUNNRFRBR19DUkVBVEVfVEFCTEVfQVMsCisJCQlDTURUQUdfU0VMRUNUX0lO VE8KKwkJfTsKKwogCQkvKiBDcmVhdGUgdGhlIGRkbF9jb21tYW5kX2VuZCBldmVudCB0cmlnZ2Vy ICovCiAJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoImRkbF9jb21tYW5kX2VuZCIsIGVu ZF9jb21tYW5kcywKIAkJCQkJCQkJCSBsZW5ndGhvZihlbmRfY29tbWFuZHMpLCBteXNlbGYsIHB1 Ym9pZCk7CkBAIC05OTcsNiArMTAwMiwxMCBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRl ICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJLyogQ3JlYXRlIHRoZSB0 YWJsZV9yZXdyaXRlIGV2ZW50IHRyaWdnZXIgKi8KIAkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJp Z2dlcigidGFibGVfcmV3cml0ZSIsIHJld3JpdGVfY29tbWFuZHMsCiAJCQkJCQkJCQkgbGVuZ3Ro b2YocmV3cml0ZV9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBDcmVhdGUgdGhl IHRhYmxlX2luaXRfd3JpdGUgZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBsaWNhRXZl bnRUcmlnZ2VyKCJ0YWJsZV9pbml0X3dyaXRlIiwgaW5pdF9jb21tYW5kcywKKwkJCQkJCQkJCSBs ZW5ndGhvZihpbml0X2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOwogCX0KIAogCXRhYmxlX2Ns b3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29w L3V0aWxpdHkuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCmluZGV4IDZiMGE4NjUuLjQ5 MGI3M2IgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCisrKyBiL3NyYy9i YWNrZW5kL3Rjb3AvdXRpbGl0eS5jCkBAIC0xNjY1LDggKzE2NjUsMTAgQEAgUHJvY2Vzc1V0aWxp dHlTbG93KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQlicmVhazsKIAogCQkJY2FzZSBUX0NyZWF0 ZVRhYmxlQXNTdG10OgorCQkJCUV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3RhcnQocGFyc2V0 cmVlKTsKIAkJCQlhZGRyZXNzID0gRXhlY0NyZWF0ZVRhYmxlQXMocHN0YXRlLCAoQ3JlYXRlVGFi bGVBc1N0bXQgKikgcGFyc2V0cmVlLAogCQkJCQkJCQkJCQlwYXJhbXMsIHF1ZXJ5RW52LCBxYyk7 CisJCQkJRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVFbmQoKTsKIAkJCQlicmVhazsKIAogCQkJ Y2FzZSBUX1JlZnJlc2hNYXRWaWV3U3RtdDoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L2NhY2hlL2V2dGNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRjYWNoZS5jCmlu ZGV4IGY3ZjcxNjUuLjdmYjhjYjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hl L2V2dGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYwpAQCAt MTY3LDYgKzE2Nyw4IEBAIEJ1aWxkRXZlbnRUcmlnZ2VyQ2FjaGUodm9pZCkKIAkJCWV2ZW50ID0g RVZUX1NRTERyb3A7CiAJCWVsc2UgaWYgKHN0cmNtcChldnRldmVudCwgInRhYmxlX3Jld3JpdGUi KSA9PSAwKQogCQkJZXZlbnQgPSBFVlRfVGFibGVSZXdyaXRlOworCQllbHNlIGlmIChzdHJjbXAo ZXZ0ZXZlbnQsICJ0YWJsZV9pbml0X3dyaXRlIikgPT0gMCkKKwkJCWV2ZW50ID0gRVZUX1RhYmxl SW5pdFdyaXRlOwogCQllbHNlCiAJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQK aW5kZXggYWIyOTBkZC4uMTM2NzM3MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0xMTkw OSw0ICsxMTkwOSw3IEBACiB7IG9pZCA9PiAnNDY0NicsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBk ZGwgY29tbWFuZCBkZXBhcnNlIHRhYmxlIHJld3JpdGUnLAogICBwcm9uYW1lID0+ICdwdWJsaWNh dGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2Vy JywKICAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV90 YWJsZV9yZXdyaXRlJyB9LAoreyBvaWQgPT4gJzQ2NDcnLCBkZXNjciA9PiAndHJpZ2dlciBmb3Ig ZGRsIGNvbW1hbmQgZGVwYXJzZSB0YWJsZSBpbml0JywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRp b25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dl cicsCisgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2Vf dGFibGVfaW5pdF93cml0ZScgfSwKIF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRz L2V2ZW50X3RyaWdnZXIuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaApp bmRleCBmZDJlZTdmLi5hOWUwZjcxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9l dmVudF90cmlnZ2VyLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5o CkBAIC01NSw2ICs1NSwxMCBAQCBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJERExDb21tYW5kRW5k KE5vZGUgKnBhcnNldHJlZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJTUUxEcm9wKE5vZGUg KnBhcnNldHJlZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZVJld3JpdGUoTm9kZSAq cGFyc2V0cmVlLCBPaWQgdGFibGVPaWQsIGludCByZWFzb24pOwogCitleHRlcm4gdm9pZCBFdmVu dFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSk7CitleHRlcm4gdm9p ZCBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZShOb2RlICpwYXJzZXRyZWUsIE9iamVjdEFkZHJl c3MgYWRkcmVzcyk7CitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZUVuZCh2 b2lkKTsKKwogZXh0ZXJuIGJvb2wgRXZlbnRUcmlnZ2VyQmVnaW5Db21wbGV0ZVF1ZXJ5KHZvaWQp OwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyRW5kQ29tcGxldGVRdWVyeSh2b2lkKTsKIGV4dGVy biBib29sIHRyYWNrRHJvcHBlZE9iamVjdHNOZWVkZWQodm9pZCk7CmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oIGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNl X3V0aWxpdHkuaAppbmRleCBiNTMyOTRiLi4zZDI5NGEwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91 dGlsaXR5LmgKQEAgLTI5LDcgKzI5LDggQEAgdHlwZWRlZiBlbnVtIENvbGxlY3RlZENvbW1hbmRU eXBlCiAJU0NUX0FsdGVyT3BGYW1pbHksCiAJU0NUX0FsdGVyRGVmYXVsdFByaXZpbGVnZXMsCiAJ U0NUX0NyZWF0ZU9wQ2xhc3MsCi0JU0NUX0FsdGVyVFNDb25maWcKKwlTQ1RfQWx0ZXJUU0NvbmZp ZywKKwlTQ1RfQ3JlYXRlVGFibGVBcwogfSBDb2xsZWN0ZWRDb21tYW5kVHlwZTsKIAogLyoKQEAg LTEwMSw2ICsxMDIsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgQ29sbGVjdGVkQ29tbWFuZAogCQl7CiAJ CQlPYmplY3RUeXBlCW9ianR5cGU7CiAJCX0JCQlkZWZwcml2czsKKworCQlzdHJ1Y3QKKwkJewor CQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzOworCQkJTm9kZQkJICpyZWFsX2NyZWF0ZTsKKwkJfQkJ CWN0YXM7CiAJfQkJCWQ7CiAKIAlzdHJ1Y3QgQ29sbGVjdGVkQ29tbWFuZCAqcGFyZW50OwkvKiB3 aGVuIG5lc3RlZCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaCBi L3NyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmgKaW5kZXggZGRiNjdhNi4uMWU2NDgzMSAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaAorKysgYi9zcmMvaW5jbHVkZS91 dGlscy9ldnRjYWNoZS5oCkBAIC0yMiw3ICsyMiw4IEBAIHR5cGVkZWYgZW51bQogCUVWVF9ERExD b21tYW5kU3RhcnQsCiAJRVZUX0RETENvbW1hbmRFbmQsCiAJRVZUX1NRTERyb3AsCi0JRVZUX1Rh YmxlUmV3cml0ZQorCUVWVF9UYWJsZVJld3JpdGUsCisJRVZUX1RhYmxlSW5pdFdyaXRlCiB9IEV2 ZW50VHJpZ2dlckV2ZW50OwogCiB0eXBlZGVmIHN0cnVjdAotLSAKMS44LjMuMQoK --000000000000f0bc1005e6210616 Content-Type: application/octet-stream; name="v17-0004-Test-cases-for-DDL-replication.patch" Content-Disposition: attachment; filename="v17-0004-Test-cases-for-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l6s1viz93 RnJvbSA4YWU3OWE1MWMwODFmODFiOTcwNjAyNmY1MTg1NjJhODg4OWYxMTY1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFNhdCwgMTMgQXVnIDIwMjIgMDk6NDk6NDcgLTA0MDAKU3ViamVjdDogW1BBVENI IHYxNyA0LzRdIFRlc3QgY2FzZXMgZm9yIERETCByZXBsaWNhdGlvbgoKQXV0aG9yOiBUYWthbWlj aGkgT3N1bWkKLS0tCiBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfZGRsX3JlcGxpY2F0aW9u LnBsIHwgNDE0ICsrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA0MTQg aW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90 LzAzMl9kZGxfcmVwbGljYXRpb24ucGwKCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRp b24vdC8wMzJfZGRsX3JlcGxpY2F0aW9uLnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMy X2RkbF9yZXBsaWNhdGlvbi5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45 NGRlOGVkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX2Rk bF9yZXBsaWNhdGlvbi5wbApAQCAtMCwwICsxLDQxNCBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjIs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisjIFJlZ3Jlc3Npb24gdGVzdHMg Zm9yIGxvZ2ljYWwgcmVwbGljYXRpb24gb2YgRERMcworIwordXNlIHN0cmljdDsKK3VzZSB3YXJu aW5nczsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRl c3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKK215ICRub2RlX3B1Ymxpc2hlciA9IFBvc3Rn cmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHVibGlzaGVyJyk7Ciskbm9kZV9wdWJsaXNoZXIt PmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOworJG5vZGVfcHVibGlzaGVyLT5z dGFydDsKKworbXkgJG5vZGVfc3Vic2NyaWJlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXIt Pm5ldygnc3Vic2NyaWJlcicpOworJG5vZGVfc3Vic2NyaWJlci0+aW5pdChhbGxvd3Nfc3RyZWFt aW5nID0+ICdsb2dpY2FsJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zdGFydDsKKworbXkgJGRkbCA9 ICJDUkVBVEUgVEFCTEUgdGVzdF9yZXAoaWQgaW50IHByaW1hcnkga2V5LCBuYW1lIHZhcmNoYXIs IHZhbHVlIGludGVnZXIpOyI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAkZGRsKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDEsICdkYXRhMScsIDEpOyIpOworJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICRkZGwpOworCitteSAkcHVibGlzaGVyX2Nvbm5zdHIg PSAkbm9kZV9wdWJsaXNoZXItPmNvbm5zdHIgLiAnIGRibmFtZT1wb3N0Z3Jlcyc7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgUFVCTElDQVRJT04gbXlw dWIgRk9SIEFMTCBUQUJMRVMgd2l0aCAocHVibGlzaCA9ICdpbnNlcnQsIHVwZGF0ZSwgZGVsZXRl LCBkZGwnKTsiKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJD UkVBVEUgU1VCU0NSSVBUSU9OIG15c3ViIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0cicg UFVCTElDQVRJT04gbXlwdWI7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7CisKKyMgTWFrZSBzdXJlIHdlIGhhdmUgZnVsbHkgc3luY2hyb25pemVkIHRoZSB0 YWJsZS4KKyMgVGhpcyBwcmV2ZW50cyBBTFRFUiBUQUJMRSBjb21tYW5kIGJlbG93IGZyb20gYmVp bmcgZXhlY3V0ZWQgZHVyaW5nIHRhYmxlIHN5bmNocm9uaXphdGlvbi4KKyRub2RlX3N1YnNjcmli ZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKyAgICJTRUxFQ1QgQ09VTlQoMSkgPSAw IEZST00gcGdfc3Vic2NyaXB0aW9uX3JlbCBzciBXSEVSRSBzci5zcnN1YnN0YXRlIE5PVCBJTiAo J3MnLCAncicpIEFORCBzci5zcnJlbGlkID0gJ3Rlc3RfcmVwJzo6cmVnY2xhc3MiCispOworCisj IFRlc3QgQUxURVIgVEFCTEUgQURECiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgQUREIGM0IGludDsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDIs ICdkYXRhMicsIDIsIDIpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworbXkgJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF9yZXAgV0hFUkUgYzQgPSAyOyIpOworaXMo JHJlc3VsdCwgcXEoMSksICdBTFRFUiB0ZXN0X3JlcCBBREQgcmVwbGljYXRlZCcpOworCisjIFRl c3QgQUxURVIgVEFCTEUgRFJPUAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIERST1AgYzQ7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiREVMRVRFIEZST00gdGVzdF9yZXAgd2hlcmUgaWQgPSAyOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCop IGZyb20gdGVzdF9yZXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIERS T1AgcmVwbGljYXRlZCcpOworCisjIFRlc3QgQUxURVIgVEFCTEUgQUxURVIgVFlQRQorJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFM VEVSIHZhbHVlIFRZUEUgdmFyY2hhciIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoMywgJ2RhdGEzJywgJzMnKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBGUk9NIHRlc3RfcmVwIFdIRVJFIHZhbHVlID0gJzMnOyIpOworaXMoJHJlc3VsdCwgcXEoMSks ICdBTFRFUiB0ZXN0X3JlcCBBTFRFUiBDT0xVTU4gVFlQRSByZXBsaWNhdGVkJyk7CisKKyMgVGVz dCBBTFRFUiBUQUJMRSBBTFRFUiBTRVQgREVGQVVMVAorIyBDaGVjayBpZiB3ZSBoYXZlIHRoZSBk ZWZhdWx0IHZhbHVlIGFmdGVyIHRoZSBkaXJlY3QgaW5zZXJ0IHRvIHN1YnNjcmliZXIgbm9kZS4K KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0 X3JlcCBBTFRFUiBDT0xVTU4gdmFsdWUgU0VUIERFRkFVTFQgJ2ZvbyciKTsKKyRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICg0LCAnZGF0YTQn KTsiKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlNFTEVDVCB2YWx1ZSBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNDsiKTsKK2lzKCRyZXN1bHQs ICdmb28nLCAnQUxURVIgdGVzdF9yZXAgQUxURVIgU0VUIERFRkFVTFQgcmVwbGljYXRlZCcpOwor CisjIFRlc3QgQUxURVIgVEFCTEUgQUxURVIgRFJPUCBERUZBVUxUCisjIENoZWNrIGlmIHdlIGRv bid0IGhhdmUgdGhlIGRlZmF1bHQgdmFsdWUgcHJldmlvdXNseSBkZWZpbmVkLgorJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFMVEVS IENPTFVNTiB2YWx1ZSBEUk9QIERFRkFVTFQ7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9y X2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNSwgJ2RhdGE1Jyk7Iik7CiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgdmFsdWUg SVMgTlVMTCBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNTsiKTsKK2lzKCRyZXN1bHQsIHEodCks ICdBTFRFUiB0ZXN0X3JlcCBBTFRFUiBEUk9QIERFRkFVTFQgcmVwbGljYXRlZCcpOworCisjIFRl c3QgQUxURVIgVEFCTEUgQUxURVIgU0VUIE5PVCBOVUxMCisjIFJlbW92ZSB0aGUgZXhpc3Rpbmcg cmVjb3JkIHRoYXQgY29udGFpbnMgbnVsbCB2YWx1ZSBmaXJzdC4KK215ICgkc3Rkb3V0LCAkc3Rk ZXJyKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiREVMRVRFIEZS T00gdGVzdF9yZXAgV0hFUkUgaWQgPSA1OyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFMVEVSIHZhbHVlIFNFVCBOT1QgTlVM TDsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2Rl X3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVF UyAoNiwgJ2RhdGE2Jyk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBz dGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJy ID1+IC9FUlJPUjogIG51bGwgdmFsdWUgaW4gY29sdW1uIFwidmFsdWVcIiBvZiByZWxhdGlvbiBc InRlc3RfcmVwXCIgdmlvbGF0ZXMgbm90LW51bGwgY29uc3RyYWludC8KKyAgb3IgZGllICJmYWls ZWQgdG8gcmVwbGljYXRlIEFMVEVSIFRBQkxFIEFMVEVSIFNFVCBOT1QgTlVMTCI7CisKKyMgVGVz dCBBTFRFUiBUQUJMRSBBTFRFUiBEUk9QIE5PVCBOVUxMCiskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgQUxURVIgdmFsdWUgRFJPUCBO T1QgTlVMTDsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsK KyMgSW5zZXJ0IHNhbWUgZGF0YSB0aGF0IGhhcyBOVUxMIHZhbHVlLiBUaGlzIGZhaWxlZCBiZWZv cmUgYnV0IG5vdyBzaG91bGQgc3VjY2VlZC4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICg2LCAnZGF0YTYnKTsiKTsK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCB2YWx1ZSBJUyBOVUxMIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA2OyIpOworaXMoJHJlc3Vs dCwgcSh0KSwgIkFMVEVSIHRlc3RfcmVwIEFMVEVSIERST1AgTk9UIE5VTEwgcmVwbGljYXRlZCIp OworCisjIFRlc3QgQUxURVIgVEFCTEUgU0VUIFVOTE9HR0VECiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAnQUxURVIgVEFCTEUgdGVzdF9yZXAgU0VUIFVOTE9HR0VEOycp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVF UyAoNywgJ2RhdGE3JywgJzcnKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNzsiKTsKK2lz KCRyZXN1bHQsIHFxKDApLCAnQUxURVIgdGVzdF9yZXAgU0VUIFVOTE9HR0VEIHJlcGxpY2F0ZWQn KTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIFNFVCBMT0dHRUQKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICdBTFRFUiBUQUJMRSB0ZXN0X3JlcCBTRVQgTE9HR0VEOycpOwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAo OCwgJ2RhdGE4JywgJzgnKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgn bXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gODsiKTsKK2lzKCRy ZXN1bHQsIHFxKDEpLCAnQUxURVIgdGVzdF9yZXAgU0VUIExPR0dFRCByZXBsaWNhdGVkJyk7CisK KyMgVGVzdCBDUkVBVEUgVEFCTEUgYW5kIERNTCBjaGFuZ2VzCiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoYSBpbnQsIGIgdmFyY2hhcik7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQo KikgZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0 LCBxcSgxKSwgJ0NSRUFURSB0bXAgaXMgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCB2YWx1ZXMgKDEsICdhJykiKTsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAg dmFsdWVzICgyLCAnYicpIik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215 c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgyKSwgJ0RNTCBD aGFuZ2VzIHRvIHRtcCBhcmUgcmVwbGljYXRlZCcpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIElO SEVSSVRTCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRB QkxFIHRtcDIgKGMzIGludCkgSU5IRVJJVFMgKHRtcCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wMiBWQUxVRVMgKDEsICdhJywgMSk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQo KikgZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcDInOyIpOworaXMoJHJlc3Vs dCwgcXEoMSksICdDUkVBVEUgVEFCTEUgSU5IRVJJVFMgaXMgcmVwbGljYXRlZCcpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50 KCopIGZyb20gdG1wMjsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0aW5nIHNvbWUgZGF0 YSB0byBpbmhlcml0ZWQgdGFibGUgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wMiIpOworCisjIFRlc3QgQ1JFQVRFIFRB QkxFIExJS0UKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUg VEFCTEUgdG1wMyAoYzMgaW50LCBMSUtFIHRtcCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wMyBWQUxVRVMgKDEsIDEsICdhJyk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikg ZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcDMnOyIpOworaXMoJHJlc3VsdCwg cXEoMSksICdDUkVBVEUgVEFCTEUgTElLRSByZXBsaWNhdGVkJyk7CiskcmVzdWx0ID0gJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0 bXAzOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdpbnNlcnQgc29tZSBkYXRhIHRvIGEgdGFibGUg ZGVmaW5lZCB3aXRoIExJS0UgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wMyIpOworCisjIFRlc3QgRFJPUCBUQUJMRQor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCop IGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwg cXEoMCksICdUQUJMRSB0bXAgaXMgZHJvcHBlZCcpOworCisjIFRlc3QgQ1JFQVRFIFVOTE9HR0VE IFRBQkxFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFVO TE9HR0VEIFRBQkxFIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHBnX3RhYmxl cyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQ1JFQVRF IFVOTE9HR0VEIFRBQkxFIGlzIHJlcGxpY2F0ZWQgY29ycmVjdGx5Jyk7CiskcmVzdWx0ID0gJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJv bSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgwKSwgJ2luc2VydGluZyBkYXRhIHRvIHVubG9nZ2Vk IHRhYmxlIGlzIG5vdCByZXBsaWNhdGVkIGNvcnJlY3RseScpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVBVEUg VEFCTEUgSUYgTk9UIEVYSVNUUworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgx KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3Vu dCgqKSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1 bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcmVwbGljYXRlZCcpOworJHJl c3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNv dW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdpbnNlcnRpbmcgZGF0YSB0 byBhIHRhYmxlIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIElGIE5PVCBF WElTVFMgKGNoZWNrIGlmIHdlIHNraXAgdG8gY3JlYXRlIGEgdGFibGUKKyMgd2hlbiB3ZSBoYXZl IHRoZSB0YWJsZSBvbiB0aGUgc3Vic2NyaWJlciBpbiBhZHZhbmNlLCBhbmQgaWYgd2Ugc3VjY2Vl ZAorIyBpbiByZXBsaWNhdGluZyBjaGFuZ2VzLikKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0 bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9y X2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBx cSgxKSwgJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRl c3QgQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgKGNoZWNrIGlmIHdlIHNraXAgdG8gY3JlYXRl IGEgdGFibGUKKyMgd2hlbiB3ZSBoYXZlIHRoZSB0YWJsZSBvbiB0aGUgcHVibGlzaGVyLCBidXQg bm90IG9uIHRoZSBzdWJzY3JpYmVyLikKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHRtcCAoaWQg aW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAn Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVB VEUgVEFCTEUgd2l0aCBjb2xsYXRlCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAobmFtZSB0ZXh0IENPTExBVEUgXCJDXCIpOyIpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxV RVMgKCdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWIn KTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNF TEVDVCBjb2xsYXRpb25fbmFtZSBGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS5jb2x1bW5zIFdIRVJF IHRhYmxlX25hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQsIHFxKEMpLCAnQ1JFQVRFIFRBQkxF IHdpdGggY29sbGF0ZSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSB3aXRo IG5hbWVkIGNvbnN0cmFpbnQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQgQ09OU1RSQUlOVCBcIm11c3QgYmUgYmlnZ2VyIHRo YW4gMTBcIiBDSEVDSyAoaWQgPiAxMCkpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9j YXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5T RVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAor CQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7 Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJ0bXAiIHZpb2xhdGVz IGNoZWNrIGNvbnN0cmFpbnQgIm11c3QgYmUgYmlnZ2VyIHRoYW4gMTAiLworICBvciBkaWUgImZh aWxlZCB0byByZXBsaWNhdGUgbmFtZWQgY29uc3RyYWludCBhdCBjcmVhdGluZyB0YWJsZSI7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7 CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgd2l0aCB2YXJpb3VzIHR5cGVzIG9mIGNvbnN0cmFpbnRz LgorIyBOT1QgTlVMTCBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50LCBuYW1lIHRleHQgTk9UIE5VTEwpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vi c2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7IiwK KwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIs CisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG51bGwg dmFsdWUgaW4gY29sdW1uICJuYW1lIiBvZiByZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBub3QtbnVs bCBjb25zdHJhaW50LworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgbm9uIG51bGwgY29u c3RyYWludCBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgTlVMTCBjb25zdHJhaW50Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQg aW50LCBuYW1lIHRleHQgTlVMTCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIG5hbWUgSVMgTlVMTCBGUk9NIHRtcDsiKTsK K2lzKCRyZXN1bHQsIHFxKHQpLCAiQ1JFQVRFIFRBQkxFIHdpdGggTlVMTCBjb25zdHJhaW50IHJl cGxpY2F0ZWQiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9Q IFRBQkxFIHRtcCIpOworCisjIENIRUNLIGNvbnN0cmFpbnQKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQsIHByb2R1Y3RfYW1l IHRleHQsIHByaWNlIGludCBDSEVDSyAocHJpY2UgPiAwKSk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0 Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnZm9vJywgLTEwMCk7IiwKKwkJCQkJ ICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJ CSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cgZm9y IHJlbGF0aW9uICJ0bXAiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRtcF9wcmljZV9jaGVj ayIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBDSEVDSyBjb25zdHJhaW50IjsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsK KworIyBERUZBVUxUCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JF QVRFIFRBQkxFIHRtcCAoaWQgaW50LCBuYW1lIHRleHQgREVGQVVMVCAnZm9vJyk7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOwor JHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNU IG5hbWUgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcShmb28pLCAiQ1JFQVRFIFRBQkxFIHdp dGggZGVmYXVsdCB2YWx1ZSByZXBsaWNhdGVkIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBVTklRVUUgY29uc3RyYWludAor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAg KGlkIGludCBVTklRVUUpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0 X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9 PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0 ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIGR1cGxpY2F0ZSBrZXkgdmFsdWUgdmlvbGF0ZXMg dW5pcXVlIGNvbnN0cmFpbnQgInRtcF9pZF9rZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBs aWNhdGUgY29uc3RyYWludCBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgUFJJTUFSWSBLRVkK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1w IChpZCBpbnQgUFJJTUFSWSBLRVksIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vi c2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2Jh cicpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwk c3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6 ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25zdHJhaW50ICJ0bXBfcGtl eSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBwcmltYXJ5IGtleSBhdCBjcmVhdGlu ZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBU QUJMRSB0bXA7Iik7CisKKyMgRVhDTFVERQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSBjaXJjbGVzIChjIGNpcmNsZSwgRVhDTFVERSBVU0lORyBn aXN0IChjIFdJVEggJiYpKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyBjaXJjbGVzIFZBTFVFUyAoJzwoMSwgMSksIDE+Jzo6Y2lyY2xlKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1 YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIGNpcmNsZXMgVkFMVUVTICgn PCgxLCAxKSwgMT4nOjpjaXJjbGUpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJ CQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOwor JHN0ZGVyciA9fiAvRVJST1I6ICBjb25mbGljdGluZyBrZXkgdmFsdWUgdmlvbGF0ZXMgZXhjbHVz aW9uIGNvbnN0cmFpbnQgImNpcmNsZXNfY19leGNsIi8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVw bGljYXRlIEVYQ0xVREUgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgY2lyY2xlcyIpOworCisjIFJFRkVSRU5DRVMK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgcHJv ZHVjdCAoaWQgaW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHByb2R1Y3QgVkFMVUVTICgxLCAn Zm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJU IElOVE8gcHJvZHVjdCBWQUxVRVMgKDIsICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgb3JkZXJzIChvcmRlcl9pZCBpbnQgUFJJ TUFSWSBLRVksIHByb2R1Y3RfaWQgaW50IFJFRkVSRU5DRVMgcHJvZHVjdCAoaWQpKSIpOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJl ci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gb3JkZXJzIFZBTFVFUyAoMSwgMTApIiwK KwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIs CisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIGluc2Vy dCBvciB1cGRhdGUgb24gdGFibGUgIm9yZGVycyIgdmlvbGF0ZXMgZm9yZWlnbiBrZXkgY29uc3Ry YWludCAib3JkZXJzX3Byb2R1Y3RfaWRfZmtleSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxp Y2F0ZSBSRUZFUkVOQ0VTIGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIG9yZGVycyIpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgcHJvZHVjdCIpOworCisjIERFRkVS UkFCTEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFC TEUgdG1wIChpZCBpbnQgUFJJTUFSWSBLRVkgREVGRVJSQUJMRSwgbmFtZSB0ZXh0KTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFM VUVTICgxLCAnZm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMiwgJ2JhcicpOyIpOworJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworIyBRdWljayBjaGVjayBvZiBkZWZlcnJhYmxl IGNsYXVzZQorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJVUERBVEUg dG1wIFNFVCBpZCA9IGlkICsgMTsiKTsKKyMgQWxzbywgZXhlY3V0ZSBhIHRlc3QgdGhhdCBzaG91 bGQgZmFpbCBmb3IgSU5JVElBTExZIElNTUVESUFURSh0aGUgZGVmYXVsdCkKKyRub2RlX3N1YnNj cmliZXItPnBzcWwoJ3Bvc3RncmVzJywgcXEoCitCRUdJTjsKK1VQREFURSB0bXAgU0VUIGlkID0g aWQgKyAxOworSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMywgJ2Zvb2JhcicpOworREVMRVRFIEZS T00gdG1wIFdIRVJFIGlkID0gMzsKK0NPTU1JVDsKKyksIG9uX2Vycm9yX3N0b3AgPT4gMCwgc3Rk ZXJyID0+IFwkc3RkZXJyLCBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6 ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25zdHJhaW50ICJ0bXBfcGtl eSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBERUZFUlJBQkxFIGF0IGNyZWF0aW5n IHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRB QkxFIHRtcDsiKTsKKworIyBOT1QgREVGRVJSQUJMRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCBQUklNQVJZIEtFWSBOT1Qg REVGRVJSQUJMRSwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnZm9vJyk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAo MiwgJ2JhcicpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1Yicp OworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiVVBEQVRFIHRtcCBTRVQgaWQg PSBpZCArIDE7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIg PT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9F UlJPUjogIGR1cGxpY2F0ZSBrZXkgdmFsdWUgdmlvbGF0ZXMgdW5pcXVlIGNvbnN0cmFpbnQgInRt cF9wa2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIE5PVCBERUZFUlJBQkxFIGF0 IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBERUZFUlJBQkxFIGFuZCBJTklUSUFMTFkgREVGRVJS RUQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUg dG1wIChpZCBpbnQgUFJJTUFSWSBLRVkgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQsIG5h bWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5T RVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDIsICdiYXInKTsiKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyMgUXVpY2sgY2hl Y2sgb2YgZGVmZXJyYWJsZSBjbGF1c2UKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiVVBEQVRFIHRtcCBTRVQgaWQgPSBpZCArIDE7Iik7CisjIEFsc28sIGV4ZWN1dGUg YSB0ZXN0IHRoYXQgc2hvdWxkIHN1Y2NlZWQgZm9yIElOSVRJQUxMWSBERUZFUlJFRAorJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorQkVHSU47CitVUERBVEUgdG1w IFNFVCBpZCA9IGlkICsgMTsKK0lOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDMsICdmb29iYXInKTsK K0RFTEVURSBGUk9NIHRtcCBXSEVSRSBpZCA9IDM7CitDT01NSVQ7CispKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBUZXN0 IENSRUFURSBUQUJMRSB3aXRoIHRhYmxlIGNvbnN0cmFpbnQKKyMgV2Ugd2lsbCBzZXQgdHdvIGNo ZWNrcyBhbmQgY29uZHVjdCB0d28gaW5zZXJ0cyB0aGF0IHNob3VsZCBmYWlsIHJlc3BlY3RpdmVs eS4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJM RSB0bXAgKHByaWNlIGludCwgZGlzY291bnRlZF9wcmljZSBpbnQsIENIRUNLIChkaXNjb3VudGVk X3ByaWNlID4gMCBBTkQgcHJpY2UgPiBkaXNjb3VudGVkX3ByaWNlKSk7Iik7Ciskbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3Fs KCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxMDAsIDApOyIsCisJCQkJCSAg IG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkg ICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciBy ZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0bXBfY2hlY2siLworICBv ciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgdGFibGUgY29uc3RyYWludCAoZmlyc3QgY29uZGl0 aW9uKSBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICg1MCwgMTAwKTsiLAorCQkJCQkgICBvbl9lcnJv cl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0 ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRpb24g InRtcCIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidG1wX2NoZWNrIi8KKyAgb3IgZGllICJm YWlsZWQgdG8gcmVwbGljYXRlIHRhYmxlIGNvbnN0cmFpbnQgKHNlY29uZCBjb25kaXRpb24pIGF0 IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBXSVRIIHN0cm9yYWdl X3BhcmFtZXRlcgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFU RSBUQUJMRSB0bXAgKGlkIGludCkgV0lUSCAoZmlsbGZhY3RvciA9IDgwKTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgx KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2Rl X3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCByZWxvcHRpb25zIEZST00gcGdf Y2xhc3MgV0hFUkUgcmVsbmFtZSA9ICd0bXAnOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4g MCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRv dXQpOworJHN0ZG91dCA9fiAve2ZpbGxmYWN0b3I9ODB9LworICBvciBkaWUgImZhaWxlZCB0byBy ZXBsaWNhdGUgc3RvcmFnZSBvcHRpb24iOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJl c3VsdCwgcXEoMSksICdDUkVBVEUgVEFCTEUgd2l0aCBzdG9yYWdlX3BhcmFtZXRlciByZXBsaWNh dGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJM RSB0bXA7Iik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgVEFCTEVTUEFDRSAoY3JlYXRpbmcgYSB0 YWJsZXNwYWNlIGlzIG5vdCByZXBsaWNhdGVkKQorIyBQcmVwYXJlIHRoZSBkaXJlY3RvcmllcyBm b3IgdGhlIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBmaXJzdC4KK215ICgkYmFzZWRpciwgJHRh Ymxlc3BhY2VfZGlyKTsKKworJGJhc2VkaXIgPSAkbm9kZV9wdWJsaXNoZXItPmJhc2VkaXI7Cisk dGFibGVzcGFjZV9kaXIgPSAiJGJhc2VkaXIvdGJsc3BjX3B1YiI7Citta2RpcigkdGFibGVzcGFj ZV9kaXIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU QUJMRVNQQUNFIG15dGJsc3BjIExPQ0FUSU9OICckdGFibGVzcGFjZV9kaXInOyIpOworJGJhc2Vk aXIgPSAkbm9kZV9zdWJzY3JpYmVyLT5iYXNlZGlyOworJHRhYmxlc3BhY2VfZGlyID0gIiRiYXNl ZGlyL3RibHNwY19zdWIiOworbWtkaXIgKCR0YWJsZXNwYWNlX2Rpcik7Ciskbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRVNQQUNFIG15dGJsc3BjIExP Q0FUSU9OICckdGFibGVzcGFjZV9kaXInOyIpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50KSBUQUJMRVNQQUNFIG15dGJs c3BjOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdD UkVBVEUgVEFCTEUgVEFCTEVTUEFDRSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgVGVzdCBDUkVBVEUg VEFCTEUgT0YgKGNyZWF0aW5nIGEgdHlwZSBpcyBub3QgcmVwbGljYXRlZCkKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVFlQRSBteXR5cGUgQVMgKGlkIGlu dCwgbmFtZSB0ZXh0LCBhZ2UgaW50KTsiKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiQ1JFQVRFIFRZUEUgbXl0eXBlIEFTIChpZCBpbnQsIG5hbWUgdGV4dCwgYWdl IGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRF IFRBQkxFIHRtcCBPRiBteXR5cGU7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2JhcicpOyIpOworJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIp OworaXMoJHJlc3VsdCwgcXEoMSksICdDUkVBVEUgVEFCTEUgT0YgcmVwbGljYXRlZCcpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisK K3Bhc3MgIkRETCByZXBsaWNhdGlvbiB0ZXN0cyBwYXNzZWQ6IjsKKworJG5vZGVfc3Vic2NyaWJl ci0+c3RvcDsKKyRub2RlX3B1Ymxpc2hlci0+c3RvcDsKKworZG9uZV90ZXN0aW5nKCk7Ci0tIAox LjguMy4xCgo= --000000000000f0bc1005e6210616 Content-Type: application/octet-stream; name="v17-0002-Support-DDL-replication.patch" Content-Disposition: attachment; filename="v17-0002-Support-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l6s1viz01 RnJvbSAzZjMyZDVjZTlkNmVjMzA5ODY4ODFiODcyZjgwZDM1ZmNmYjgzMTE0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFNhdCwgMTMgQXVnIDIwMjIgMDg6MjU6MjggLTA0MDAKU3ViamVjdDogW1BBVENI IHYxNyAyLzRdIFN1cHBvcnQgRERMIHJlcGxpY2F0aW9uLgoKVG8gc3VwcG9ydCBEREwgcmVwbGlj YXRpb24sIHdlIHVzZSBldmVudCB0cmlnZ2VyIGFuZCBEREwgZGVwYXJzaW5nCmZhY2lsaXRpZXMu IFdoaWxlIGNyZWF0aW5nIGEgcHVibGljYXRpb24sIHdlIHJlZ2lzdGVyIGEgY29tbWFuZCBlbmQK dHJpZ2dlciB0aGF0IGRlcGFyc2VzIHRoZSBEREwgYXMgYSBKU09OIGJsb2IsIGFuZCBXQUwgbG9n cyBpdC4gVGhlIGV2ZW50CnRyaWdnZXIgaXMgYXV0b21hdGljYWxseSByZW1vdmVkIGF0IHRoZSB0 aW1lIG9mIGRyb3AgcHVibGljYXRpb24uIFRoZQpXQUxTZW5kZXIgZGVjb2RlcyB0aGUgV0FMIGFu ZCBzZW5kcyBpdCBkb3duc3RyZWFtIHNpbWlsYXIgdG8gb3RoZXIgRE1MCmNvbW1hbmRzLiBUaGUg c3Vic2NyaWJlciB0aGVuIGNvbnZlcnRzIEpTT04gYmFjayB0byB0aGUgRERMIGNvbW1hbmQgc3Ry aW5nCmFuZCBleGVjdXRlcyBpdC4gSW4gdGhlIHN1YnNjcmliZXIsIHdlIGFsc28gYWRkIHRoZSBu ZXdseSBhZGRlZCByZWwgdG8KcGdfc3Vic2NyaXB0aW9uX3JlbCBzbyB0aGF0IHRoZSBETUwgY2hh bmdlcyBvbiB0aGUgbmV3IHRhYmxlIGNhbiBiZQpyZXBsaWNhdGVkIHdpdGhvdXQgaGF2aW5nIHRv IG1hbnVhbGx5IHJ1bgoiQUxURVIgU1VCU0NSSVBUSU9OIC4uLiBSRUZSRVNIIFBVQkxJQ0FUSU9O Ii4KClRoaXMgaXMgYSBQT0MgcGF0Y2ggdG8gc2hvdyBob3cgdXNpbmcgZXZlbnQgdHJpZ2dlcnMg YW5kIERETCBkZXBhcnNpbmcKZmFjaWxpdGllcyB3ZSBjYW4gaW1wbGVtZW50IERETCByZXBsaWNh dGlvbi4gU28sIHRoZSBpbXBsZW1lbnRhdGlvbiBpcwpyZXN0cmljdGVkIHRvIENSRUFURSBUQUJM RS9BTFRFUiBUQUJMRS9EUk9QIFRBQkxFIGNvbW1hbmRzLgoKLSBGb3Igbm9uLXJld3JpdGUgQUxU RVIgW1RBQkxFfFNFUVVFTkNFfFNDSEVNQV0gY29tbWFuZCBhbmQKLSAgICAgQ1JFQVRFIFtUQUJM RXxTRVFVRU5DRXxTQ0hFTUF8SU5ERVhdIGNvbW1hbmQ6Ci0gQW5kIG90aGVyIHRhYmxlIHVucmVs YXRlZCBjb21tYW5kCndlIGRlcGFyc2UgdGhlIGNvbW1hbmQgYXQgZGRsX2NvbW1hbmRfZW5kIGV2 ZW50IHRyaWdnZXIgYW5kIFdBTCBsb2cgdGhlCmRlcGFyc2VkIGpzb24gc3RyaW5nLiBUaGUgV0FM U2VuZGVyIGRlY29kZXMgdGhlIFdBTCBhbmQgc2VuZHMgaXQgdG8Kc3Vic2NyaWJlciBpZiB0aGUg Y3JlYXRlZC9hbHRlcmVkIHRhYmxlIGlzIHB1Ymxpc2hlZC4gSXQgc3VwcG9ydHMgbW9zdCBvZgpB TFRFUiBUQUJMRSBjb21tYW5kIGV4Y2VwdCBzb21lIGNvbW1hbmRzKERETCByZWxhdGVkIHRvIFBB UlRJVElPTkVEIFRBQkxFCi4uLikgdGhhdCBpbnRyb2R1Y2VkIHJlY2VudGx5IHdoaWNoIGhhdmVu J3QgYmVlbiBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQKZGRsX2RlcGFyc2VyLCB3ZSB3aWxsIHN1 cHBvcnQgdGhhdCBsYXRlci4KCk5vdGUgdGhhdCB0aGUgcmVwbGljYXRpb24gZm9yIEFMVEVSIElO REVYIGNvbW1hbmQgaXMgc3RpbGwgdW5kZXIKcHJvZ3Jlc3MuCgotIEZvciBEUk9QIFtUQUJMRXxT RVFVRU5DRXxTQ0hFTUF8SU5ERVhdOgpUaGUgJ2NvbW1hbmQgc3RhcnQnIGV2ZW50IGhhbmRsZXIg bG9ncyBhIGRkbCBtZXNzYWdlIHdpdGggdGhlIHJlbGlkcyBvZgp0aGUgdGFibGVzIHRoYXQgYXJl IGRyb3BwZWQgd2hpY2ggdGhlIG91dHB1dCBwbHVnaW4gKHBnb3V0cHV0KSBzdG9yZXMgaW4KaXRz IGludGVybmFsIGRhdGEgc3RydWN0dXJlIGFmdGVyIHZlcmlmeWluZyB0aGF0IGl0IGlzIGZvciBh IHRhYmxlIHRoYXQgaXMKcGFydCBvZiB0aGUgcHVibGljYXRpb24uIExhdGVyIHRoZSAnY29tbWFu ZCBlbmQnIGV2ZW50IGhhbmRsZXIgc2VuZHMgdGhlCmFjdHVhbCBkcm9wIG1lc3NhZ2UuIFBnb3V0 cHV0IG9uIHJlY2VpdmluZyB0aGUgY29tbWFuZCBlbmQsIG9ubHkgc2VuZHMgb3V0CnRoZSBkcm9w IGNvbW1hbmQgb25seSBpZiBpdCBpcyBmb3Igb25lIG9mIHRoZSByZWxpZHMgbWFya2VkIGZvciBk ZWxldGluZy4KVGhlIHJlYXNvbiB3ZSBoYXZlIHRvIGRvIHRoaXMgaXMgYmVjYXVzZSwgb25jZSB0 aGUgbG9naWNhbCBkZWNvZGVyCnJlY2VpdmVzIHRoZSAnY29tbWFuZCBlbmQnIG1lc3NhZ2UsICB0 aGUgcmVsaWQgb2YgdGhlIHRhYmxlIGlzIG5vIGxvbmdlcgp2YWxpZCBhcyBpdCBoYXMgYmVlbiBk ZWxldGVkIGFzIHBhcnQgb2YgaW52YWxpZGF0aW9ucyByZWNlaXZlZCBmb3IgdGhlCmRyb3AgdGFi bGUgY29tbWFuZC4gSXQgaXMgbm8gbG9uZ2VyIHBvc3NpYmxlIHRvIHZlcmlmeSBpZiB0aGUgdGFi bGUgaXMKcGFydCBvZiB0aGUgcHVibGljYXRpb24gbGlzdCBvciBub3QuIFRvIG1ha2UgdGhpcyBw b3NzaWJsZSwgSSBoYXZlIGFkZGVkCnR3byBtb3JlIGVsZW1lbnRzIHRvIHRoZSBkZGwgeGxvZyBh bmQgZGRsIG1lc3NhZ2UsIChyZWxpZCBhbmQgY21kdHlwZSkuCgpXZSBjb3VsZCBoYXZlIGFsc28g aGFuZGxlZCBhbGwgdGhpcyBvbiB0aGUgc3Vic2NyaWJlciBzaWRlIGFzIHdlbGwsIGJ1dAp0aGF0 IHdvdWxkIG1lYW4gc2VuZGluZyBzcHVyaW91cyBkZGwgbWVzc2FnZXMgZm9yIHRhYmxlcyB0aGF0 IGFyZSBub3QgcGFydApvZiB0aGUgcHVibGljYXRpb24uCgotIEZvciB0YWJsZV9yZXdyaXRlIEFM VEVSIFRBQkxFIGNvbW1hbmQ6CihBTFRFUiBDT0xVTU4gVFlQRSwgQUREIENPTFVNTiBERUZBVUxU LCBTRVQgTE9HR0VELCBTRVQgQUNDRVNTIE1FVEhPRCkKCndlIGRlcGFyc2UgdGhlIGNvbW1hbmQg YW5kIFdBTCBsb2cgdGhlIGRlcGFyc2VkIGpzb24gc3RyaW5nIGF0CnRhYmxlX3Jld3JpdGUgZXZl bnQgdHJpZ2dlci4gVGhlIFdBTFNlbmRlciBkZWNvZGVzIHRoZSBXQUwgYW5kIHNlbmRzIGl0IHRv CnN1YnNjcmliZXIgaWYgdGhlIGFsdGVyZWQgdGFibGUgaXMgcHVibGlzaGVkLiBUaGVuLCB0aGUg V0FMU2VuZGVyIHdpbGwKY29udmVydCB0aGUgdXBjb21pbmcgcmV3cml0ZSBJTlNFUlRzIHRvIFVQ REFURXMgYW5kIHNlbmQgdGhlbSB0bwpzdWJzY3JpYmVyIHNvIHRoYXQgdGhlIGRhdGEgYmV0d2Vl biBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgY2FuIGFsd2F5cyBiZQpjb25zaXN0ZW50LiBOb3Rl IHRoYXQgdGhlIHRhYmxlcyB0aGF0IHB1Ymxpc2ggcmV3cml0ZSBkZGwgbXVzdCBoYXZlIGEKcmVw bGljYSBpZGVudGl0eSBjb25maWd1cmVkIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gcmVwbGljYXRl IHRoZSB1cGNvbWluZwpyZXdyaXRlIFVQREFURXMuCgpXZSBkbyB0aGlzIHdheSBiZWNhdXNlIG9m IHR3byByZWFzb246CigxKSBUaGUgZGF0YSBiZWZvcmUgdGhlIHJld3JpdGUgZGRsIGNvdWxkIGFs cmVhZHkgYmUgZGlmZmVyZW50IGFtb25nCnB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlci4gVG8gbWFr ZSBzdXJlIHRoZSBleHRyYSBkYXRhIGluIHN1YnNjcmliZXIgd2hpY2gKZG9lc24ndCBleGlzdCBp biBwdWJsaXNoZXIgYWxzbyBnZXQgcmV3cml0dGVuLCB3ZSBuZWVkIHRvIGxldCB0aGUKc3Vic2Ny aWJlciBleGVjdXRlIHRoZSBvcmlnaW5hbCByZXdyaXRlIGRkbCB0byByZXdyaXRlIGFsbCB0aGUg ZGF0YSBhdApmaXJzdC4KCigyKSB0aGUgZGF0YSBhZnRlciBleGVjdXRpbmcgcmV3cml0ZSBkZGwg Y291bGQgYmUgZGlmZmVyZW50IGFtb25nCnB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlcihkdWUgdG8g ZGlmZmVyZW50IGZ1bmN0aW9ucy9vcGVyYXRvcnMgdXNlZCBkdXJpbmcKcmV3cml0ZSksIHNvIHdl IG5lZWQgdG8gcmVwbGljYXRlIHRoZSByZXdyaXRlIFVQREFURXMgdG8ga2VlcCB0aGUgZGF0YQpj b25zaXN0ZW50LgoKVE8gSU1QUk9WRToKVGhpcyBhcHByb2FjaCBjb3VsZCBiZSBpbXByb3ZlZCBi eSBsZXR0aW5nIHRoZSBzdWJzY3JpYmVyIHRyeSB0byB1cGRhdGUKdGhlIGV4dHJhIGRhdGEgaXRz ZWxmIGluc3RlYWQgb2YgZG9pbmcgZnVsbHkgcmV3cml0ZSBkZGwgYW5kIHVzZSB0aGUKdXBjb21p bmcgcmV3cml0ZSBVUERBVEVzIHRvIHJld3JpdGUgdGhlIHJlc3QgZGF0YS4gVG8gYWNoaWV2ZSB0 aGlzLCB3ZQpjb3VsZCBtb2RpZnkgdGhlIGRlcGFyc2VkIGpzb24gc3RyaW5nIHRvIHRlbXBvcmFy aWx5IHJlbW92ZSB0aGUgcmV3cml0ZQpwYXJ0IGFuZCBhZGQgc29tZSBsb2dpYyBpbiBzdWJzY3Jp YmVyIHRvIHVwZGF0ZSB0aGUgZXh0cmEgZGF0YS4KQmVzaWRlcywgd2UgbWF5IG5vdCBuZWVkIHRv IHNlbmQgcmV3cml0ZSBjaGFuZ2VzIGZvciBhbGwgdHlwZSBvZiByZXdyaXRlCmRkbCwgZm9yIGV4 YW1wbGUsIGl0IHNlZW1zIGZpbmUgdG8gc2tpcCBzZW5kaW5nIHJld3JpdGUgY2hhbmdlcyBmb3Ig QUxURVIKVEFCTEUgU0VUIExPR0dFRCBhcyB0aGUgZGF0YSBpbiB0aGUgdGFibGUgZG9lc24ndCBh Y3R1YWxseSBiZSBjaGFuZ2VkLiBXZQpjb3VsZCB1c2UgdGhlIGRlcGFyc2VyIGFuZCBldmVudCB0 cmlnZ2VyIHRvIGZpbHRlciB0aGVzZSBkZGxzIGFuZCBza2lwCnNlbmRpbmcgcmV3cml0ZSBjaGFu Z2VzIGZvciB0aGVtLgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZSAg ICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRs bXNnZGVzYy5jIHwgIDUyICsrKysKIHNyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24u YyAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIu YyAgICAgICAgICAgIHwgMjIxICsrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9jb21tYW5kcy9w dWJsaWNhdGlvbmNtZHMuYyAgICAgICAgICB8IDEyMCArKysrKysrKwogc3JjL2JhY2tlbmQvY29t bWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jICAgIHwgIDg2ICsrKysrKwogc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYyAgICAgICAgfCAgNDEgKysrCiBzcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYyAgICAgICB8ICA5MyArKysrKysKIHNy Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyAgICAgICAgIHwgIDQ4ICsrKwog c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMgfCAxMzYgKysr KysrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jICAgICAgICB8 IDIzMiArKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdv dXRwdXQuYyAgICAgfCAxOTIgKysrKysrKysrKystCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9y ZWxjYWNoZS5jICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5j ICAgICAgICAgICAgICAgICAgICAgICB8ICAyNyArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAu aCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9wZ193YWxkdW1wL2xvZ2lj YWxkZGxtc2dkZXNjLmMgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3Jk ZXNjLmMgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTcgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9ybWdy bGlzdC5oICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5kYXQgICAgICAgICAgICAgICAgIHwgICA5ICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHVibGljYXRpb24uaCAgICAgICAgICAgIHwgICA0ICsKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2V2 ZW50X3RyaWdnZXIuaCAgICAgICAgICAgIHwgICAzICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9kZGxtZXNzYWdlLmggICAgICAgICAgICB8ICA2MCArKysrCiBzcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9kZWNvZGUuaCAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9sb2dpY2FscHJvdG8uaCAgICAgICAgICB8ICAgNyArLQogc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vb3V0cHV0X3BsdWdpbi5oICAgICAgICAgfCAgMjcgKysKIHNyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL3Bnb3V0cHV0LmggICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL3Jlb3JkZXJidWZmZXIuaCAgICAgICAgIHwgIDM5ICsrKwogc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9wc3FsLm91dCAgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0ICAgICAgIHwgMzg4ICsrKysrKysrKysrKy0tLS0t LS0tLS0tLQogMzIgZmlsZXMgY2hhbmdlZCwgMTYwNyBpbnNlcnRpb25zKCspLCAyMTMgZGVsZXRp b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xv Z2ljYWxkZGxtc2dkZXNjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYwogY3JlYXRlIG1vZGUgMTIwMDAwIHNyYy9iaW4vcGdf d2FsZHVtcC9sb2dpY2FsZGRsbXNnZGVzYy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5oCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3JtZ3JkZXNjL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL01ha2Vm aWxlCmluZGV4IGY4OGQ3MmYuLmI4ZTI5ZTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9ybWdyZGVzYy9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFr ZWZpbGUKQEAgLTE5LDYgKzE5LDcgQEAgT0JKUyA9IFwKIAloYXNoZGVzYy5vIFwKIAloZWFwZGVz Yy5vIFwKIAlsb2dpY2FsbXNnZGVzYy5vIFwKKwlsb2dpY2FsZGRsbXNnZGVzYy5vIFwKIAlteGFj dGRlc2MubyBcCiAJbmJ0ZGVzYy5vIFwKIAlyZWxtYXBkZXNjLm8gXApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRkbG1zZ2Rlc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi44MWRlZTUyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKQEAgLTAsMCArMSw1MiBAQAorLyot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKgorICogbG9naWNhbGRkbG1zZ2Rlc2MuYworICoJICBybWdyIGRl c2NyaXB0b3Igcm91dGluZXMgZm9yIHJlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jCisg KgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDE1LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCisgKgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9i YWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jCisgKgorICotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicmVwbGlj YXRpb24vZGRsbWVzc2FnZS5oIgorCit2b2lkCitsb2dpY2FsZGRsbXNnX2Rlc2MoU3RyaW5nSW5m byBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQoreworCWNoYXIJICAgKnJlYyA9IFhMb2dS ZWNHZXREYXRhKHJlY29yZCk7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyhyZWNvcmQp ICYgflhMUl9JTkZPX01BU0s7CisKKwlpZiAoaW5mbyA9PSBYTE9HX0xPR0lDQUxfRERMX01FU1NB R0UpCisJeworCQl4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICp4bHJlYyA9ICh4bF9sb2dpY2FsX2Rk bF9tZXNzYWdlICopIHJlYzsKKwkJY2hhcgkgICAqcHJlZml4ID0geGxyZWMtPm1lc3NhZ2U7CisJ CWNoYXIJICAgKm1lc3NhZ2UgPSB4bHJlYy0+bWVzc2FnZSArIHhscmVjLT5wcmVmaXhfc2l6ZTsK KwkJY2hhcgkgICAqc2VwID0gIiI7CisKKwkJQXNzZXJ0KHByZWZpeFt4bHJlYy0+cHJlZml4X3Np emVdICE9ICdcMCcpOworCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAicHJlZml4IFwiJXNcIjsg cGF5bG9hZCAoJXp1IGJ5dGVzKTogIiwKKwkJCQkJCSBwcmVmaXgsIHhscmVjLT5tZXNzYWdlX3Np emUpOworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgInJlbGlkICV1IGNtZHR5cGUgJXUiLCB4bHJl Yy0+cmVsaWQsIHhscmVjLT5jbWR0eXBlKTsKKwkJLyogV3JpdGUgbWVzc2FnZSBwYXlsb2FkIGFz IGEgc2VyaWVzIG9mIGhleCBieXRlcyAqLworCQlmb3IgKGludCBjbnQgPSAwOyBjbnQgPCB4bHJl Yy0+bWVzc2FnZV9zaXplOyBjbnQrKykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIl cyUwMlgiLCBzZXAsICh1bnNpZ25lZCBjaGFyKSBtZXNzYWdlW2NudF0pOworCQkJc2VwID0gIiAi OworCQl9CisJfQorfQorCitjb25zdCBjaGFyICoKK2xvZ2ljYWxkZGxtc2dfaWRlbnRpZnkodWlu dDggaW5mbykKK3sKKwlpZiAoKGluZm8gJiB+WExSX0lORk9fTUFTSykgPT0gWExPR19MT0dJQ0FM X0RETF9NRVNTQUdFKQorCQlyZXR1cm4gIkRETCBNRVNTQUdFIjsKKworCXJldHVybiBOVUxMOwor fQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jIGIvc3Jj L2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCmluZGV4IDZhZjM1NzAuLmJkZjQyYTQg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYworKysgYi9z cmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKQEAgLTEwMDUsNiArMTAwNSw3IEBA IEdldFB1YmxpY2F0aW9uKE9pZCBwdWJpZCkKIAlwdWItPnB1YmFjdGlvbnMucHVidXBkYXRlID0g cHViZm9ybS0+cHVidXBkYXRlOwogCXB1Yi0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBwdWJmb3Jt LT5wdWJkZWxldGU7CiAJcHViLT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0gcHViZm9ybS0+cHVi dHJ1bmNhdGU7CisJcHViLT5wdWJhY3Rpb25zLnB1YmRkbCA9IHB1YmZvcm0tPnB1YmRkbDsKIAlw dWItPnB1YnZpYXJvb3QgPSBwdWJmb3JtLT5wdWJ2aWFyb290OwogCiAJUmVsZWFzZVN5c0NhY2hl KHR1cCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKaW5kZXggZWVmM2U1ZC4uNDU2 ZjBlMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwpAQCAtMzcsOCArMzcsMTEg QEAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfZnVuYy5o IgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2Uu aCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9tZXNzYWdlLmgiCiAjaW5jbHVkZSAidGNvcC9kZXBh cnNlX3V0aWxpdHkuaCIKICNpbmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIKKyNpbmNsdWRlICJ0Y29w L2RkbF9kZXBhcnNlLmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMv YnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9ldnRjYWNoZS5oIgpAQCAtMTUzNiw2ICsxNTM5 LDcgQEAgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSkKIAogCWNv bW1hbmQtPmQuYWx0ZXJUYWJsZS5jbGFzc0lkID0gUmVsYXRpb25SZWxhdGlvbklkOwogCWNvbW1h bmQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCA9IEludmFsaWRPaWQ7CisJY29tbWFuZC0+ZC5hbHRl clRhYmxlLnJld3JpdGUgPSBmYWxzZTsKIAljb21tYW5kLT5kLmFsdGVyVGFibGUuc3ViY21kcyA9 IE5JTDsKIAljb21tYW5kLT5wYXJzZXRyZWUgPSBjb3B5T2JqZWN0KHBhcnNldHJlZSk7CiAKQEAg LTE1NjksNyArMTU3Myw3IEBAIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVSZWxpZChPaWQgb2JqZWN0 SWQpCiAgKiBpbnRlcm5hbGx5LCBzbyB0aGF0J3MgYWxsIHRoYXQgdGhpcyBjb2RlIG5lZWRzIHRv IGhhbmRsZSBhdCB0aGUgbW9tZW50LgogICovCiB2b2lkCi1FdmVudFRyaWdnZXJDb2xsZWN0QWx0 ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQsIE9iamVjdEFkZHJlc3MgYWRkcmVzcykKK0V2ZW50 VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKE5vZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVz cyBhZGRyZXNzLCBib29sIHJld3JpdGUpCiB7CiAJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CiAJQ29s bGVjdGVkQVRTdWJjbWQgKm5ld3N1YjsKQEAgLTE1ODksNiArMTU5Myw3IEBAIEV2ZW50VHJpZ2dl ckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKE5vZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRy ZXNzKQogCW5ld3N1Yi0+YWRkcmVzcyA9IGFkZHJlc3M7CiAJbmV3c3ViLT5wYXJzZXRyZWUgPSBj b3B5T2JqZWN0KHN1YmNtZCk7CiAKKwljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRD b21tYW5kLT5kLmFsdGVyVGFibGUucmV3cml0ZSB8PSByZXdyaXRlOwogCWN1cnJlbnRFdmVudFRy aWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzID0KIAkJbGFw cGVuZChjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5kLmFsdGVyVGFi bGUuc3ViY21kcywgbmV3c3ViKTsKIApAQCAtMjE3NCwzICsyMTc5LDIxNyBAQCBzdHJpbmdpZnlf YWRlZnByaXZzX29ianR5cGUoT2JqZWN0VHlwZSBvYmp0eXBlKQogCiAJcmV0dXJuICI/Pz8iOwkJ CQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCiB9CisKKy8qCisgKiBwdWJsaWNhdGlvbl9kZXBh cnNlX2RkbF9jb21tYW5kX3N0YXJ0CisgKgorICogRGVwYXJzZSB0aGUgZGRsIGNvbW1hbmQgYW5k IGxvZyBpdC4KKyAqLworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfc3Rh cnQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlFdmVudFRyaWdnZXJEYXRhICp0cmlnZGF0YTsKKwlj aGFyCQkqY29tbWFuZCA9IHBzcHJpbnRmKCJEcm9wIHRhYmxlIGNvbW1hbmQgc3RhcnQiKTsKKwlE cm9wU3RtdAkqc3RtdDsKKwlMaXN0Q2VsbAkqY2VsbDE7CisKKwlpZiAoIUNBTExFRF9BU19FVkVO VF9UUklHR0VSKGZjaW5mbykpCisJCWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJp Z2dlciBtYW5hZ2VyIik7CisKKwl0cmlnZGF0YSA9IChFdmVudFRyaWdnZXJEYXRhICopIGZjaW5m by0+Y29udGV4dDsKKwlzdG10CSA9IChEcm9wU3RtdCAqKSB0cmlnZGF0YS0+cGFyc2V0cmVlOwor CisJLyogZXh0cmFjdCB0aGUgcmVsaWQgZnJvbSB0aGUgcGFyc2UgdHJlZSAqLworCWZvcmVhY2go Y2VsbDEsIHN0bXQtPm9iamVjdHMpCisJeworCQljaGFyCXJlbHBlcnNpc3Q7CisJCU5vZGUJKm9i amVjdCA9IGxmaXJzdChjZWxsMSk7CisJCU9iamVjdEFkZHJlc3MgYWRkcmVzczsKKwkJUmVsYXRp b24gcmVsYXRpb24gPSBOVUxMOworCisJCWFkZHJlc3MgPSBnZXRfb2JqZWN0X2FkZHJlc3Moc3Rt dC0+cmVtb3ZlVHlwZSwKKwkJCQkJCQkJCSBvYmplY3QsCisJCQkJCQkJCQkgJnJlbGF0aW9uLAor CQkJCQkJCQkJIEFjY2Vzc0V4Y2x1c2l2ZUxvY2ssCisJCQkJCQkJCQkgdHJ1ZSk7CisKKwkJcmVs cGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoYWRkcmVzcy5vYmplY3RJZCk7CisKKwkJLyoK KwkJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9yIGNvbW1hbmRzIHdob3NlIHRhcmdldCB0 YWJsZSBpcyBhCisJCSAqIHRlbXBvcmFyeSB0YWJsZS4KKwkJICoKKwkJICogV2Ugd2lsbCBnZW5l cmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNvIHRoYXQgdW5sb2dnZWQKKwkJICog dGFibGVzIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVyZWQgb24gdGhlIHN1YnNjcmliZXIg c2lkZS4gVGhpcworCQkgKiBtYWtlcyBpdCBwb3NzaWJsZSB0byBkaXJlY3RseSByZXBsYXkgdGhl IFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlCisJCSAqIGluY29taW5nIHJld3JpdGUgbWVzc2Fn ZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCQkgKi8KKwkJaWYgKHJlbHBlcnNpc3Qg PT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJeworCQkJdGFibGVfY2xvc2UocmVsYXRpb24sIE5v TG9jayk7CisJCQljb250aW51ZTsKKwkJfQorCisJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBh cnNlIiwgYWRkcmVzcy5vYmplY3RJZCwgRENUX1RhYmxlRHJvcFN0YXJ0LAorCQkJCQkJCSBjb21t YW5kLCBzdHJsZW4oY29tbWFuZCkgKyAxKTsKKworCQlpZiAocmVsYXRpb24pCisJCQl0YWJsZV9j bG9zZShyZWxhdGlvbiwgTm9Mb2NrKTsKKwl9CisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxM KTsKK30KKworLyoKKyAqIHB1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZQorICoKKyAq IERlcGFyc2UgdGhlIGRkbCB0YWJsZSByZXdyaXRlIGNvbW1hbmQgYW5kIGxvZyBpdC4KKyAqLwor RGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZShQR19GVU5DVElPTl9BUkdT KQoreworCWNoYXIJCQkJcmVscGVyc2lzdDsKKwlDb2xsZWN0ZWRDb21tYW5kICAgKmNtZDsKKwlj aGFyCQkJICAgKmpzb25fc3RyaW5nOworCisJaWYgKCFDQUxMRURfQVNfRVZFTlRfVFJJR0dFUihm Y2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5IGV2ZW50IHRyaWdnZXIgbWFuYWdl ciIpOworCisJY21kID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsK KworCUFzc2VydChjbWQgJiYgY21kLT5kLmFsdGVyVGFibGUucmV3cml0ZSk7CisKKwlyZWxwZXJz aXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCk7CisK KwkvKgorCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3aG9zZSB0YXJn ZXQgdGFibGUgaXMgYSB0ZW1wb3JhcnkKKwkgKiB0YWJsZS4KKwkgKgorCSAqIFdlIHdpbGwgZ2Vu ZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVubG9nZ2VkIHRhYmxl cworCSAqIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVyZWQgb24gdGhlIHN1YnNjcmliZXIg c2lkZS4gVGhpcyBtYWtlcyBpdAorCSAqIHBvc3NpYmxlIHRvIGRpcmVjdGx5IHJlcGxheSB0aGUg U0VUIExPR0dFRCBjb21tYW5kIGFuZCB0aGUgaW5jb21pbmcKKwkgKiByZXdyaXRlIG1lc3NhZ2Ug d2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkgKi8KKwlpZiAocmVscGVyc2lzdCA9PSBS RUxQRVJTSVNURU5DRV9URU1QKQorCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworCisJ LyogRGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQgdG8gYWxsb3cgZGVjb2Rp bmcgb2YgdGhlIHNhbWUuICovCisJanNvbl9zdHJpbmcgPSBkZXBhcnNlX3V0aWxpdHlfY29tbWFu ZChjbWQsIGZhbHNlKTsKKworCWlmIChqc29uX3N0cmluZyAhPSBOVUxMKQorCQlMb2dMb2dpY2Fs RERMTWVzc2FnZSgiZGVwYXJzZSIsIGNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkLCBEQ1RfVGFi bGVBbHRlciwKKwkJCQkJCQkganNvbl9zdHJpbmcsIHN0cmxlbihqc29uX3N0cmluZykgKyAxKTsK KworCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7Cit9CisKKy8qCisgKiBwdWJsaWNhdGlv bl9kZXBhcnNlX2RkbF9jb21tYW5kX2VuZAorICoKKyAqIERlcGFyc2UgdGhlIGRkbCBjb21tYW5k IGFuZCBsb2cgaXQuCisgKi8KK0RhdHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5k X2VuZChQR19GVU5DVElPTl9BUkdTKQoreworCUxpc3RDZWxsICAgKmxjOworCXNsaXN0X2l0ZXIg IGl0ZXI7CisJRGVwYXJzZWRDb21tYW5kVHlwZSB0eXBlOworCU9pZCByZWxpZDsKKworCWlmICgh Q0FMTEVEX0FTX0VWRU5UX1RSSUdHRVIoZmNpbmZvKSkKKwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJl ZCBieSBldmVudCB0cmlnZ2VyIG1hbmFnZXIiKTsKKworCWZvcmVhY2gobGMsIGN1cnJlbnRFdmVu dFRyaWdnZXJTdGF0ZS0+Y29tbWFuZExpc3QpCisJeworCQljaGFyCQkJCXJlbHBlcnNpc3QgPSBS RUxQRVJTSVNURU5DRV9QRVJNQU5FTlQ7CisJCUNvbGxlY3RlZENvbW1hbmQgICAqY21kID0gbGZp cnN0KGxjKTsKKwkJY2hhcgkJCSAgICpqc29uX3N0cmluZzsKKworCQkvKiBSZXdyaXRlIERETCBo YXMgYmVlbiBoYW5kbGVkIGluIHRhYmxlX3Jld3JpdGUgdHJpZ2dlciAqLworCQlpZiAoY21kLT5k LmFsdGVyVGFibGUucmV3cml0ZSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjbWQtPnR5cGUgPT0g U0NUX1NpbXBsZSAmJgorCQkJIU9pZElzVmFsaWQoY21kLT5kLnNpbXBsZS5hZGRyZXNzLm9iamVj dElkKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVGFibGUp CisJCXsKKwkJCXJlbGlkID0gY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQ7CisJCQl0eXBlID0g RENUX1RhYmxlQWx0ZXI7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBPbmx5IFNDVF9TaW1wbGUg Zm9yIG5vdyAqLworCQkJcmVsaWQgPSBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQ7CisJ CQl0eXBlID0gRENUX1NpbXBsZUNtZDsKKwkJfQorCisJCWlmIChnZXRfcmVsX3JlbGtpbmQocmVs aWQpKQorCQkJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UocmVsaWQpOworCisJCS8q CisJCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3aG9zZSB0YXJnZXQg dGFibGUgaXMgYQorCQkgKiB0ZW1wb3JhcnkgdGFibGUuCisJCSAqCisJCSAqIFdlIHdpbGwgZ2Vu ZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVubG9nZ2VkIHRhYmxl cworCQkgKiBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRoZSBzdWJzY3JpYmVy IHNpZGUuIFRoaXMgbWFrZXMgaXQKKwkJICogcG9zc2libGUgdG8gZGlyZWN0bHkgcmVwbGF5IHRo ZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZSBpbmNvbWluZworCQkgKiByZXdyaXRlIG1lc3Nh Z2Ugd2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkJICovCisJCWlmIChyZWxwZXJzaXN0 ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBEZXBh cnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxvZyBpdCB0byBhbGxvdyBkZWNvZGluZyBvZiB0 aGUKKwkJICogc2FtZS4KKwkJICovCisJCWpzb25fc3RyaW5nID0gZGVwYXJzZV91dGlsaXR5X2Nv bW1hbmQoY21kLCBmYWxzZSk7CisKKwkJaWYgKGpzb25fc3RyaW5nID09IE5VTEwpCisJCQljb250 aW51ZTsKKworCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIHJlbGlkLCB0eXBlLCBq c29uX3N0cmluZywKKwkJCQkJCQkgc3RybGVuKGpzb25fc3RyaW5nKSArIDEpOworCX0KKworCXNs aXN0X2ZvcmVhY2goaXRlciwgJihjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPlNRTERyb3BMaXN0 KSkKKwl7CisJCXZvbGF0aWxlIFNRTERyb3BPYmplY3QgKm9iajsKKwkJRHJvcFN0bXQJCQkgICAq c3RtdDsKKwkJRXZlbnRUcmlnZ2VyRGF0YSAJICAgKnRyaWdkYXRhOworCQljaGFyCQkJCSAgICpj b21tYW5kOworCQlEZXBhcnNlZENvbW1hbmRUeXBlCQljbWR0eXBlOworCisJCXRyaWdkYXRhID0g KEV2ZW50VHJpZ2dlckRhdGEgKikgZmNpbmZvLT5jb250ZXh0OworCQlzdG10CSA9IChEcm9wU3Rt dCAqKSB0cmlnZGF0YS0+cGFyc2V0cmVlOworCisJCW9iaiA9IHNsaXN0X2NvbnRhaW5lcihTUUxE cm9wT2JqZWN0LCBuZXh0LCBpdGVyLmN1cik7CisKKwkJaWYgKHN0cmNtcChvYmotPm9iamVjdHR5 cGUsICJ0YWJsZSIpID09IDApCisJCQljbWR0eXBlID0gRENUX1RhYmxlRHJvcEVuZDsKKwkJZWxz ZSBpZiAoc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInNlcXVlbmNlIikgPT0gMCB8fAorCQkJCSBz dHJjbXAob2JqLT5vYmplY3R0eXBlLCAic2NoZW1hIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2Jq LT5vYmplY3R0eXBlLCAiaW5kZXgiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5 cGUsICJmdW5jdGlvbiIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInBy b2NlZHVyZSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgIm9wZXJhdG9y IikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAib3BlcmF0b3IgY2xhc3Mi KSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJvcGVyYXRvciBmYW1pbHki KSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJjYXN0IikgPT0gMCB8fAor CQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidHJpZ2dlciIpID09IDApCisJCQljbWR0eXBl ID0gRENUX09iamVjdERyb3A7CisJCWVsc2UKKwkJCWNvbnRpbnVlOworCisJCWNvbW1hbmQgPSBk ZXBhcnNlX2Ryb3BfY29tbWFuZChvYmotPm9iamlkZW50aXR5LCBvYmotPm9iamVjdHR5cGUsCisJ CQkJCQkJCQkgICBzdG10LT5iZWhhdmlvcik7CisKKwkJaWYgKGNvbW1hbmQgPT0gTlVMTCkKKwkJ CWNvbnRpbnVlOworCisJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgb2JqLT5hZGRy ZXNzLm9iamVjdElkLCBjbWR0eXBlLAorCQkJCQkJCSBjb21tYW5kLCBzdHJsZW4oY29tbWFuZCkg KyAxKTsKKwl9CisKKwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwppbmRleCA4OWEwMDU1Li4yMTVjODI5IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYworKysgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwpAQCAtMzcsMTAgKzM3LDEyIEBACiAjaW5j bHVkZSAiY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgog I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2lu Y2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9jbGF1c2Uu aCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfY29sbGF0ZS5oIgogI2luY2x1ZGUgInBhcnNlci9w YXJzZV9yZWxhdGlvbi5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZXIuaCIKICNpbmNsdWRlICJz dG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9h cnJheS5oIgpAQCAtOTUsNiArOTcsNyBAQCBwYXJzZV9wdWJsaWNhdGlvbl9vcHRpb25zKFBhcnNl U3RhdGUgKnBzdGF0ZSwKIAlwdWJhY3Rpb25zLT5wdWJ1cGRhdGUgPSB0cnVlOwogCXB1YmFjdGlv bnMtPnB1YmRlbGV0ZSA9IHRydWU7CiAJcHViYWN0aW9ucy0+cHVidHJ1bmNhdGUgPSB0cnVlOwor CXB1YmFjdGlvbnMtPnB1YmRkbCA9IGZhbHNlOwogCSpwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9v dCA9IGZhbHNlOwogCiAJLyogUGFyc2Ugb3B0aW9ucyAqLwpAQCAtMTQxLDYgKzE0NCw4IEBAIHBh cnNlX3B1YmxpY2F0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQlwdWJhY3Rp b25zLT5wdWJkZWxldGUgPSB0cnVlOwogCQkJCWVsc2UgaWYgKHN0cmNtcChwdWJsaXNoX29wdCwg InRydW5jYXRlIikgPT0gMCkKIAkJCQkJcHViYWN0aW9ucy0+cHVidHJ1bmNhdGUgPSB0cnVlOwor CQkJCWVsc2UgaWYgKHN0cmNtcChwdWJsaXNoX29wdCwgImRkbCIpID09IDApCisJCQkJCXB1YmFj dGlvbnMtPnB1YmRkbCA9IHRydWU7CiAJCQkJZWxzZQogCQkJCQllcmVwb3J0KEVSUk9SLAogCQkJ CQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKQEAgLTc0OSw2ICs3NTQsNTMgQEAg Q2hlY2tQdWJSZWxhdGlvbkNvbHVtbkxpc3QoTGlzdCAqdGFibGVzLCBjb25zdCBjaGFyICpxdWVy eVN0cmluZywKIH0KIAogLyoKKyAqIENyZWF0ZSBldmVudCB0cmlnZ2VyIHdoaWNoIGlzIHVzZWQg Zm9yIERETCByZXBsaWNhdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK0NyZWF0ZURETFJlcGxpY2FF dmVudFRyaWdnZXIoY2hhciAqZXZlbnRuYW1lLCBDb21tYW5kVGFnICpjb21tYW5kcywKKwkJCQkJ CQkgaW50IG5jb21tYW5kcywgT2JqZWN0QWRkcmVzcyBwdWJhZGRyZXNzLAorCQkJCQkJCSBPaWQg cHVib2lkKQoreworCWludAkJCQkJaTsKKwlMaXN0CQkJICAgKnRhZ3MgPSBOSUw7CisJT2lkCQkJ CQl0cmlnZ2VyX2lkOworCU9iamVjdEFkZHJlc3MJCXJlZmVyZW5jZWQ7CisJQ3JlYXRlRXZlbnRU cmlnU3RtdCAqZGRsX3RyaWdnZXI7CisJY2hhcgkJCQl0cmlnZ2VyX25hbWVbTkFNRURBVEFMRU5d OworCWNoYXIJCQkJdHJpZ2dlcl9mdW5jX25hbWVbTkFNRURBVEFMRU5dOworCXN0YXRpYyBjb25z dCBjaGFyICAgKnRyaWdnZXJfbmFtZV9wcmVmaXggPSAicGdfZGVwYXJzZV90cmlnXyVzXyV1IjsK KwlzdGF0aWMgY29uc3QgY2hhciAgICp0cmlnZ2VyX2Z1bmNfcHJlZml4ID0gInB1YmxpY2F0aW9u X2RlcGFyc2VfJXMiOworCisJZGRsX3RyaWdnZXIgPSBtYWtlTm9kZShDcmVhdGVFdmVudFRyaWdT dG10KTsKKworCXNucHJpbnRmKHRyaWdnZXJfbmFtZSwgc2l6ZW9mKHRyaWdnZXJfbmFtZSksIHRy aWdnZXJfbmFtZV9wcmVmaXgsCisJCQkgZXZlbnRuYW1lLCBwdWJvaWQpOworCXNucHJpbnRmKHRy aWdnZXJfZnVuY19uYW1lLCBzaXplb2YodHJpZ2dlcl9mdW5jX25hbWUpLCB0cmlnZ2VyX2Z1bmNf cHJlZml4LAorCQkJIGV2ZW50bmFtZSk7CisKKwlkZGxfdHJpZ2dlci0+dHJpZ25hbWUgPSBwc3Ry ZHVwKHRyaWdnZXJfbmFtZSk7CisJZGRsX3RyaWdnZXItPmV2ZW50bmFtZSA9IGV2ZW50bmFtZTsK KwlkZGxfdHJpZ2dlci0+ZnVuY25hbWUgPSBTeXN0ZW1GdW5jTmFtZSh0cmlnZ2VyX2Z1bmNfbmFt ZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmNvbW1hbmRzOyBpKyspCisJeworCQlTdHJpbmcgKnRh ZyA9IG1ha2VTdHJpbmcocHN0cmR1cChHZXRDb21tYW5kVGFnTmFtZShjb21tYW5kc1tpXSkpKTsK KwkJdGFncyA9IGxhcHBlbmQodGFncywgdGFnKTsKKwl9CisKKwlkZGxfdHJpZ2dlci0+d2hlbmNs YXVzZSA9IGxpc3RfbWFrZTEobWFrZURlZkVsZW0oInRhZyIsIChOb2RlICopIHRhZ3MsIC0xKSk7 CisKKwl0cmlnZ2VyX2lkID0gQ3JlYXRlRXZlbnRUcmlnZ2VyKGRkbF90cmlnZ2VyKTsKKworCS8q CisJICogUmVnaXN0ZXIgdGhlIGV2ZW50IHRyaWdnZXJzIGFzIGludGVybmFsbHkgZGVwZW5kZW50 IG9uIHRoZQorCSAqIHB1YmxpY2F0aW9uLgorCSAqLworCU9iamVjdEFkZHJlc3NTZXQocmVmZXJl bmNlZCwgRXZlbnRUcmlnZ2VyUmVsYXRpb25JZCwgdHJpZ2dlcl9pZCk7CisJcmVjb3JkRGVwZW5k ZW5jeU9uKCZyZWZlcmVuY2VkLCAmcHViYWRkcmVzcywgREVQRU5ERU5DWV9JTlRFUk5BTCk7Cit9 CisKKy8qCiAgKiBDcmVhdGUgbmV3IHB1YmxpY2F0aW9uLgogICovCiBPYmplY3RBZGRyZXNzCkBA IC04MjAsNiArODcyLDggQEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBD cmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJCUJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1 YmRlbGV0ZSk7CiAJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHVidHJ1bmNhdGUgLSAxXSA9 CiAJCUJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YnRydW5jYXRlKTsKKwl2YWx1ZXNbQW51bV9w Z19wdWJsaWNhdGlvbl9wdWJkZGwgLSAxXSA9CisJCUJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1 YmRkbCk7CiAJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHVidmlhcm9vdCAtIDFdID0KIAkJ Qm9vbEdldERhdHVtKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKIApAQCAtODgyLDYgKzkz Niw2OSBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1Ymxp Y2F0aW9uU3RtdCAqc3RtdCkKIAkJfQogCX0KIAorCS8qCisJICogQ3JlYXRlIGFuIGV2ZW50IHRy aWdnZXIgdG8gYWxsb3cgbG9nZ2luZyBvZiBEREwgc3RhdGVtZW50cy4KKwkgKgorCSAqIFRPRE86 IFdlIG5lZWQgdG8gZmluZCBhIGJldHRlciBzeW50YXggdG8gYWxsb3cgcmVwbGljYXRpb24gb2Yg RERMCisJICogc3RhdGVtZW50cy4KKwkgKgorCSAqIFhYWDogVGhpcyBjb2RlIGlzIGp1c3QgdG8g c2hvdyB0aGUgcmVwbGljYXRpb24gb2YgQ1JFQVRFL0FMVEVSL0RST1AKKwkgKiBUQUJMRSB3b3Jr cy4gV2UgbmVlZCB0byBlbmhhbmNlIHRoaXMgb25jZSB0aGUgYXBwcm9hY2ggZm9yIERETAorCSAq IHJlcGxpY2F0aW9uIGlzIGZpbmFsaXplZC4KKwkgKi8KKwlpZiAocHViYWN0aW9ucy5wdWJkZGwp CisJeworCQlDb21tYW5kVGFnCXN0YXJ0X2NvbW1hbmRzW10gPSB7Q01EVEFHX0RST1BfVEFCTEV9 OworCQlDb21tYW5kVGFnCXJld3JpdGVfY29tbWFuZHNbXSA9IHtDTURUQUdfQUxURVJfVEFCTEV9 OworCisJCUNvbW1hbmRUYWcJZW5kX2NvbW1hbmRzW10gPSB7CisJCQlDTURUQUdfQ1JFQVRFX0NB U1QsCisJCQlDTURUQUdfQUxURVJfQ0FTVCwKKwkJCUNNRFRBR19EUk9QX0NBU1QsCisJCQlDTURU QUdfQ1JFQVRFX09QRVJBVE9SLAorCQkJQ01EVEFHX0NSRUFURV9PUEVSQVRPUl9DTEFTUywKKwkJ CUNNRFRBR19DUkVBVEVfT1BFUkFUT1JfRkFNSUxZLAorCQkJQ01EVEFHX0FMVEVSX09QRVJBVE9S X0ZBTUlMWSwKKwkJCUNNRFRBR19BTFRFUl9PUEVSQVRPUl9DTEFTUywKKwkJCUNNRFRBR19BTFRF Ul9PUEVSQVRPUiwKKwkJCUNNRFRBR19EUk9QX09QRVJBVE9SLAorCQkJQ01EVEFHX0RST1BfT1BF UkFUT1JfQ0xBU1MsCisJCQlDTURUQUdfRFJPUF9PUEVSQVRPUl9GQU1JTFksCisJCQlDTURUQUdf Q1JFQVRFX1BST0NFRFVSRSwKKwkJCUNNRFRBR19BTFRFUl9QUk9DRURVUkUsCisJCQlDTURUQUdf RFJPUF9QUk9DRURVUkUsCisJCQlDTURUQUdfQ1JFQVRFX0ZVTkNUSU9OLAorCQkJQ01EVEFHX0FM VEVSX0ZVTkNUSU9OLAorCQkJQ01EVEFHX0RST1BfRlVOQ1RJT04sCisJCQlDTURUQUdfQ1JFQVRF X1RSSUdHRVIsCisJCQlDTURUQUdfQUxURVJfVFJJR0dFUiwKKwkJCUNNRFRBR19EUk9QX1RBQkxF LAorCQkJQ01EVEFHX0NSRUFURV9UQUJMRSwKKwkJCUNNRFRBR19BTFRFUl9UQUJMRSwKKwkJCUNN RFRBR19DUkVBVEVfU0VRVUVOQ0UsCisJCQlDTURUQUdfQUxURVJfU0VRVUVOQ0UsCisJCQlDTURU QUdfRFJPUF9TRVFVRU5DRSwKKwkJCUNNRFRBR19DUkVBVEVfU0NIRU1BLAorCQkJQ01EVEFHX0FM VEVSX1NDSEVNQSwKKwkJCUNNRFRBR19EUk9QX1NDSEVNQSwKKwkJCUNNRFRBR19DUkVBVEVfSU5E RVgsCisJCQlDTURUQUdfRFJPUF9JTkRFWCwKKwkJCUNNRFRBR19BTFRFUl9JTkRFWAorCQl9Owor CisJCS8qIENyZWF0ZSB0aGUgZGRsX2NvbW1hbmRfZW5kIGV2ZW50IHRyaWdnZXIgKi8KKwkJQ3Jl YXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRfZW5kIiwgZW5kX2NvbW1hbmRz LAorCQkJCQkJCQkJIGxlbmd0aG9mKGVuZF9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKwor CQkvKiBDcmVhdGUgdGhlIGRkbF9jb21tYW5kX3N0YXJ0IGV2ZW50IHRyaWdnZXIgKi8KKwkJQ3Jl YXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRfc3RhcnQiLCBzdGFydF9jb21t YW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihzdGFydF9jb21tYW5kcyksIG15c2VsZiwgcHVib2lk KTsKKworCQkvKiBDcmVhdGUgdGhlIHRhYmxlX3Jld3JpdGUgZXZlbnQgdHJpZ2dlciAqLworCQlD cmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJ0YWJsZV9yZXdyaXRlIiwgcmV3cml0ZV9jb21t YW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihyZXdyaXRlX2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJv aWQpOworCX0KKwogCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CiAKIAlJbnZv a2VPYmplY3RQb3N0Q3JlYXRlSG9vayhQdWJsaWNhdGlvblJlbGF0aW9uSWQsIHB1Ym9pZCwgMCk7 CkBAIC0xMDIyLDYgKzExMzksOSBAQCBBbHRlclB1YmxpY2F0aW9uT3B0aW9ucyhQYXJzZVN0YXRl ICpwc3RhdGUsIEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LAogCiAJCXZhbHVlc1tBbnVtX3Bn X3B1YmxpY2F0aW9uX3B1YnRydW5jYXRlIC0gMV0gPSBCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5w dWJ0cnVuY2F0ZSk7CiAJCXJlcGxhY2VzW0FudW1fcGdfcHVibGljYXRpb25fcHVidHJ1bmNhdGUg LSAxXSA9IHRydWU7CisKKwkJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHViZGRsIC0gMV0g PSBCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZGwpOworCQlyZXBsYWNlc1tBbnVtX3BnX3B1 YmxpY2F0aW9uX3B1YmRkbCAtIDFdID0gdHJ1ZTsKIAl9CiAKIAlpZiAocHVibGlzaF92aWFfcGFy dGl0aW9uX3Jvb3RfZ2l2ZW4pCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJs ZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IDcwYjk0YmIu LjRkZTA1MWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC01MjUzLDcgKzUyNTMsNyBA QCBBVEV4ZWNDbWQoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLAogCSAqIFJl cG9ydCB0aGUgc3ViY29tbWFuZCB0byBpbnRlcmVzdGVkIGV2ZW50IHRyaWdnZXJzLgogCSAqLwog CWlmIChjbWQpCi0JCUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKChOb2RlICop IGNtZCwgYWRkcmVzcyk7CisJCUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKChO b2RlICopIGNtZCwgYWRkcmVzcywgdGFiLT5yZXdyaXRlKTsKIAogCS8qCiAJICogQnVtcCB0aGUg Y29tbWFuZCBjb3VudGVyIHRvIGVuc3VyZSB0aGUgbmV4dCBzdWJjb21tYW5kIGluIHRoZSBzZXF1 ZW5jZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmls ZSBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKaW5kZXggYzRlMmZk ZS4uZjNlZWI2NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9N YWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCkBA IC0xNiw2ICsxNiw3IEBAIG92ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChzcmNkaXIpICQoQ1BQRkxB R1MpCiAKIE9CSlMgPSBcCiAJZGVjb2RlLm8gXAorCWRkbG1lc3NhZ2Uub1wKIAlsYXVuY2hlci5v IFwKIAlsb2dpY2FsLm8gXAogCWxvZ2ljYWxmdW5jcy5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uNTA5MzUyMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvZGRsbWVzc2FnZS5jCkBAIC0wLDAgKzEsODYgQEAKKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICoKKyAqIGRkbG1lc3NhZ2UuYworICoJICBMb2dpY2FsIERETCBtZXNzYWdlcy4KKyAqCisg KiBDb3B5cmlnaHQgKGMpIDIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9kZGxtZXNzYWdlLmMKKyAqCisgKiBOT1RFUworICoKKyAqIExvZ2ljYWwgRERMIG1lc3Nh Z2VzIGFsbG93IFhMT0cgbG9nZ2luZyBvZiBEREwgY29tbWFuZCBzdHJpbmdzIHRoYXQKKyAqIGdl dCBwYXNzZWQgdG8gdGhlIGxvZ2ljYWwgZGVjb2RpbmcgcGx1Z2luLiBJbiBub3JtYWwgWExPRyBw cm9jZXNzaW5nIHRoZXkKKyAqIGFyZSBzYW1lIGFzIE5PT1AuCisgKgorICogVW5saWtlIGdlbmVy aWMgbG9naWNhbCBtZXNzYWdlcywgdGhlc2UgRERMIG1lc3NhZ2VzIGhhdmUgb25seSB0cmFuc2Fj dGlvbmFsCisgKiBtb2RlLk5vdGUgYnkgZGVmYXVsdCBERExzIGluIFBvc3RncmVTUUwgYXJlIHRy YW5zYWN0aW9uYWwuCisgKgorICogVGhlc2UgbWVzc2FnZXMgYXJlIHBhcnQgb2YgY3VycmVudCB0 cmFuc2FjdGlvbiBhbmQgd2lsbCBiZSBzZW50IHRvCisgKiBkZWNvZGluZyBwbHVnaW4gdXNpbmcg aW4gYSBzYW1lIHdheSBhcyBETUwgb3BlcmF0aW9ucy4KKyAqCisgKiBFdmVyeSBtZXNzYWdlIGNh cnJpZXMgcHJlZml4IHRvIGF2b2lkIGNvbmZsaWN0cyBiZXR3ZWVuIGRpZmZlcmVudCBkZWNvZGlu ZworICogcGx1Z2lucy4gVGhlIHBsdWdpbiBhdXRob3JzIG11c3QgdGFrZSBleHRyYSBjYXJlIHRv IHVzZSB1bmlxdWUgcHJlZml4LAorICogZ29vZCBvcHRpb25zIHNlZW1zIHRvIGJlIGZvciBleGFt cGxlIHRvIHVzZSB0aGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uLgorICoKKyAqIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNz L3hhY3QuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgorI2luY2x1ZGUgImNhdGFs b2cvbmFtZXNwYWNlLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMv ZXhlY25vZGVzLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgorI2luY2x1ZGUg InJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgor CisvKgorICogV3JpdGUgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZSBpbnRvIFhMb2cuCisg Ki8KK1hMb2dSZWNQdHIKK0xvZ0xvZ2ljYWxERExNZXNzYWdlKGNvbnN0IGNoYXIgKnByZWZpeCwg T2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCSBjb25zdCBjaGFy ICptZXNzYWdlLCBzaXplX3Qgc2l6ZSkKK3sKKwl4bF9sb2dpY2FsX2RkbF9tZXNzYWdlIHhscmVj OworCisJLyoKKwkgKiBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHRyYW5zYWN0aW9uIGlkLgorCSAq LworCUFzc2VydChJc1RyYW5zYWN0aW9uU3RhdGUoKSk7CisJR2V0Q3VycmVudFRyYW5zYWN0aW9u SWQoKTsKKworCXhscmVjLmRiSWQgPSBNeURhdGFiYXNlSWQ7CisJLyogdHJhaWxpbmcgemVybyBp cyBjcml0aWNhbDsgc2VlIGxvZ2ljYWxkZGxtc2dfZGVzYyAqLworCXhscmVjLnByZWZpeF9zaXpl ID0gc3RybGVuKHByZWZpeCkgKyAxOworCXhscmVjLm1lc3NhZ2Vfc2l6ZSA9IHNpemU7CisJeGxy ZWMucmVsaWQgPSByZWxpZDsKKwl4bHJlYy5jbWR0eXBlID0gY21kdHlwZTsKKworCVhMb2dCZWdp bkluc2VydCgpOworCVhMb2dSZWdpc3RlckRhdGEoKGNoYXIgKikgJnhscmVjLCBTaXplT2ZMb2dp Y2FsRERMTWVzc2FnZSk7CisJWExvZ1JlZ2lzdGVyRGF0YSh1bmNvbnN0aWZ5KGNoYXIgKiwgcHJl Zml4KSwgeGxyZWMucHJlZml4X3NpemUpOworCVhMb2dSZWdpc3RlckRhdGEodW5jb25zdGlmeShj aGFyICosIG1lc3NhZ2UpLCBzaXplKTsKKworCS8qIGFsbG93IG9yaWdpbiBmaWx0ZXJpbmcgKi8K KwlYTG9nU2V0UmVjb3JkRmxhZ3MoWExPR19JTkNMVURFX09SSUdJTik7CisKKwlyZXR1cm4gWExv Z0luc2VydChSTV9MT0dJQ0FMRERMTVNHX0lELCBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpOwor fQorCisvKgorICogUmVkbyBpcyBiYXNpY2FsbHkganVzdCBub29wIGZvciBsb2dpY2FsIGRlY29k aW5nIGRkbCBtZXNzYWdlcy4KKyAqLwordm9pZAorbG9naWNhbGRkbG1zZ19yZWRvKFhMb2dSZWFk ZXJTdGF0ZSAqcmVjb3JkKQoreworCXVpbnQ4CQlpbmZvID0gWExvZ1JlY0dldEluZm8ocmVjb3Jk KSAmIH5YTFJfSU5GT19NQVNLOworCisJaWYgKGluZm8gIT0gWExPR19MT0dJQ0FMX0RETF9NRVNT QUdFKQorCQllbG9nKFBBTklDLCAibG9naWNhbGRkbG1zZ19yZWRvOiB1bmtub3duIG9wIGNvZGUg JXUiLCBpbmZvKTsKKworCS8qIFRoaXMgaXMgb25seSBpbnRlcmVzdGluZyBmb3IgbG9naWNhbCBk ZWNvZGluZywgc2VlIGRlY29kZS5jLiAqLworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9kZWNvZGUuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvZGVjb2RlLmMKaW5kZXggYzVjNmEyYi4uZTRlMGI2MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL2RlY29kZS5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiYWNjZXNz L3hsb2d1dGlscy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29udHJvbC5oIgogI2luY2x1ZGUg InJlcGxpY2F0aW9uL2RlY29kZS5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2Uu aCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAjaW5jbHVkZSAicmVwbGljYXRp b24vbWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgpAQCAtNjA0LDYg KzYwNSw0NiBAQCBsb2dpY2FsbXNnX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgs IFhMb2dSZWNvcmRCdWZmZXIgKmJ1ZikKIH0KIAogLyoKKyAqIEhhbmRsZSBybWdyIExPR0lDQUxE RExNU0dfSUQgcmVjb3JkcyBmb3IgRGVjb2RlUmVjb3JkSW50b1Jlb3JkZXJCdWZmZXIoKS4KKyAq Lwordm9pZAorbG9naWNhbGRkbG1zZ19kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4 LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpCit7CisJU25hcEJ1aWxkICAqYnVpbGRlciA9IGN0eC0+ c25hcHNob3RfYnVpbGRlcjsKKwlYTG9nUmVhZGVyU3RhdGUgKnIgPSBidWYtPnJlY29yZDsKKwlU cmFuc2FjdGlvbklkIHhpZCA9IFhMb2dSZWNHZXRYaWQocik7CisJdWludDgJCWluZm8gPSBYTG9n UmVjR2V0SW5mbyhyKSAmIH5YTFJfSU5GT19NQVNLOworCVJlcE9yaWdpbklkIG9yaWdpbl9pZCA9 IFhMb2dSZWNHZXRPcmlnaW4ocik7CisJeGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqbWVzc2FnZTsK KworCWlmIChpbmZvICE9IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwkJZWxvZyhFUlJPUiwg InVuZXhwZWN0ZWQgUk1fTE9HSUNBTERETE1TR19JRCByZWNvcmQgdHlwZTogJXUiLCBpbmZvKTsK KworCVJlb3JkZXJCdWZmZXJQcm9jZXNzWGlkKGN0eC0+cmVvcmRlciwgWExvZ1JlY0dldFhpZChy KSwgYnVmLT5vcmlncHRyKTsKKworCS8qCisJICogSWYgd2UgZG9uJ3QgaGF2ZSBzbmFwc2hvdCBv ciB3ZSBhcmUganVzdCBmYXN0LWZvcndhcmRpbmcsIHRoZXJlIGlzIG5vCisJICogcG9pbnQgaW4g ZGVjb2RpbmcgZGRsIG1lc3NhZ2VzLgorCSAqLworCWlmIChTbmFwQnVpbGRDdXJyZW50U3RhdGUo YnVpbGRlcikgPCBTTkFQQlVJTERfRlVMTF9TTkFQU0hPVCB8fAorCQljdHgtPmZhc3RfZm9yd2Fy ZCkKKwkJcmV0dXJuOworCisJbWVzc2FnZSA9ICh4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICopIFhM b2dSZWNHZXREYXRhKHIpOworCisJaWYgKG1lc3NhZ2UtPmRiSWQgIT0gY3R4LT5zbG90LT5kYXRh LmRhdGFiYXNlIHx8CisJCUZpbHRlckJ5T3JpZ2luKGN0eCwgb3JpZ2luX2lkKSkKKwkJcmV0dXJu OworCisJaWYgKFNuYXBCdWlsZFByb2Nlc3NDaGFuZ2UoYnVpbGRlciwgeGlkLCBidWYtPm9yaWdw dHIpKQorCQlSZW9yZGVyQnVmZmVyUXVldWVERExNZXNzYWdlKGN0eC0+cmVvcmRlciwgeGlkLCBi dWYtPmVuZHB0ciwKKwkJCQkJCQkJCSBtZXNzYWdlLT5tZXNzYWdlLCAvKiBmaXJzdCBwYXJ0IG9m IG1lc3NhZ2UgaXMgcHJlZml4ICovCisJCQkJCQkJCQkgbWVzc2FnZS0+bWVzc2FnZV9zaXplLAor CQkJCQkJCQkJIG1lc3NhZ2UtPm1lc3NhZ2UgKyBtZXNzYWdlLT5wcmVmaXhfc2l6ZSwKKwkJCQkJ CQkJCSBtZXNzYWdlLT5yZWxpZCwgbWVzc2FnZS0+Y21kdHlwZSk7Cit9CisKKy8qCiAgKiBDb25z b2xpZGF0ZWQgY29tbWl0IHJlY29yZCBoYW5kbGluZyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgZm9y bSBvZiBjb21taXQKICAqIHJlY29yZHMuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2xvZ2ljYWwuYwppbmRleCA2MjVhN2Y0Li45ODk2OWM3IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYworKysgYi9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgImZt Z3IuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNs dWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vZGVj b2RlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxp Y2F0aW9uL29yaWdpbi5oIgpAQCAtNzMsNiArNzQsMTAgQEAgc3RhdGljIHZvaWQgdHJ1bmNhdGVf Y2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAog c3RhdGljIHZvaWQgbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9y ZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQkJICAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgYm9v bCB0cmFuc2FjdGlvbmFsLAogCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBtZXNz YWdlX3NpemUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworc3RhdGljIHZvaWQgZGRsbWVzc2FnZV9j Yl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJ CQkJCQkJCSAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJ CQkJCQkgIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkg IFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKIAogLyogc3RyZWFtaW5n IGNhbGxiYWNrcyAqLwogc3RhdGljIHZvaWQgc3RyZWFtX3N0YXJ0X2NiX3dyYXBwZXIoUmVvcmRl ckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKQEAgLTkwLDYgKzk1LDExIEBA IHN0YXRpYyB2b2lkIHN0cmVhbV9jaGFuZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNo ZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuCiBzdGF0aWMgdm9pZCBzdHJlYW1fbWVzc2FnZV9jYl93 cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJ CQkJCQkgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sIGJvb2wgdHJhbnNhY3Rpb25hbCwKIAkJCQkJ CQkJCSAgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAq bWVzc2FnZSk7CitzdGF0aWMgdm9pZCBzdHJlYW1fZGRsbWVzc2FnZV9jYl93cmFwcGVyKFJlb3Jk ZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJIFhMb2dS ZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJ CQkJCQkgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJ IFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKIHN0YXRpYyB2b2lkIHN0 cmVhbV90cnVuY2F0ZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCiAJCQkJCQkJCQkgICBpbnQgbnJlbGF0aW9ucywgUmVsYXRpb24gcmVsYXRp b25zW10sIFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSk7CiAKQEAgLTIxOCw2ICsyMjgsNyBA QCBTdGFydHVwRGVjb2RpbmdDb250ZXh0KExpc3QgKm91dHB1dF9wbHVnaW5fb3B0aW9ucywKIAlj dHgtPnJlb3JkZXItPmFwcGx5X3RydW5jYXRlID0gdHJ1bmNhdGVfY2Jfd3JhcHBlcjsKIAljdHgt PnJlb3JkZXItPmNvbW1pdCA9IGNvbW1pdF9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+bWVz c2FnZSA9IG1lc3NhZ2VfY2Jfd3JhcHBlcjsKKwljdHgtPnJlb3JkZXItPmRkbG1lc3NhZ2UgPSBk ZGxtZXNzYWdlX2NiX3dyYXBwZXI7CiAKIAkvKgogCSAqIFRvIHN1cHBvcnQgc3RyZWFtaW5nLCB3 ZSByZXF1aXJlIHN0YXJ0L3N0b3AvYWJvcnQvY29tbWl0L2NoYW5nZQpAQCAtMjM0LDYgKzI0NSw3 IEBAIFN0YXJ0dXBEZWNvZGluZ0NvbnRleHQoTGlzdCAqb3V0cHV0X3BsdWdpbl9vcHRpb25zLAog CQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX2NvbW1pdF9jYiAhPSBOVUxMKSB8fAogCQkoY3R4LT5j YWxsYmFja3Muc3RyZWFtX2NoYW5nZV9jYiAhPSBOVUxMKSB8fAogCQkoY3R4LT5jYWxsYmFja3Mu c3RyZWFtX21lc3NhZ2VfY2IgIT0gTlVMTCkgfHwKKwkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9k ZGxtZXNzYWdlX2NiICE9IE5VTEwpIHx8CiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fdHJ1bmNh dGVfY2IgIT0gTlVMTCk7CiAKIAkvKgpAQCAtMjUxLDYgKzI2Myw3IEBAIFN0YXJ0dXBEZWNvZGlu Z0NvbnRleHQoTGlzdCAqb3V0cHV0X3BsdWdpbl9vcHRpb25zLAogCWN0eC0+cmVvcmRlci0+c3Ry ZWFtX2NvbW1pdCA9IHN0cmVhbV9jb21taXRfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPnN0 cmVhbV9jaGFuZ2UgPSBzdHJlYW1fY2hhbmdlX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5z dHJlYW1fbWVzc2FnZSA9IHN0cmVhbV9tZXNzYWdlX2NiX3dyYXBwZXI7CisJY3R4LT5yZW9yZGVy LT5zdHJlYW1fZGRsbWVzc2FnZSA9IHN0cmVhbV9kZGxtZXNzYWdlX2NiX3dyYXBwZXI7CiAJY3R4 LT5yZW9yZGVyLT5zdHJlYW1fdHJ1bmNhdGUgPSBzdHJlYW1fdHJ1bmNhdGVfY2Jfd3JhcHBlcjsK IAogCkBAIC0xMjIxLDYgKzEyMzQsNDQgQEAgbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZm ZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiB9CiAKIHN0YXRpYyB2b2lkCitkZGxt ZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4g KnR4biwKKwkJCQkJICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkgIGNvbnN0IGNoYXIg KnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCSAg U2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCSAgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHggPSBjYWNoZS0+cHJpdmF0ZV9kYXRhOworCUxvZ2ljYWxF cnJvckNhbGxiYWNrU3RhdGUgc3RhdGU7CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJh Y2s7CisKKwlBc3NlcnQoIWN0eC0+ZmFzdF9mb3J3YXJkKTsKKworCWlmIChjdHgtPmNhbGxiYWNr cy5kZGxtZXNzYWdlX2NiID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFB1c2ggY2FsbGJhY2sg KyBpbmZvIG9uIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJc3RhdGUuY3R4ID0gY3R4Owor CXN0YXRlLmNhbGxiYWNrX25hbWUgPSAiZGRsbWVzc2FnZSI7CisJc3RhdGUucmVwb3J0X2xvY2F0 aW9uID0gbWVzc2FnZV9sc247CisJZXJyY2FsbGJhY2suY2FsbGJhY2sgPSBvdXRwdXRfcGx1Z2lu X2Vycm9yX2NhbGxiYWNrOworCWVycmNhbGxiYWNrLmFyZyA9ICh2b2lkICopICZzdGF0ZTsKKwll cnJjYWxsYmFjay5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJZXJyb3JfY29udGV4 dF9zdGFjayA9ICZlcnJjYWxsYmFjazsKKworCS8qIHNldCBvdXRwdXQgc3RhdGUgKi8KKwljdHgt PmFjY2VwdF93cml0ZXMgPSB0cnVlOworCWN0eC0+d3JpdGVfeGlkID0gdHhuICE9IE5VTEwgPyB0 eG4tPnhpZCA6IEludmFsaWRUcmFuc2FjdGlvbklkOworCWN0eC0+d3JpdGVfbG9jYXRpb24gPSBt ZXNzYWdlX2xzbjsKKworCS8qIGRvIHRoZSBhY3R1YWwgd29yazogY2FsbCBjYWxsYmFjayAqLwor CWN0eC0+Y2FsbGJhY2tzLmRkbG1lc3NhZ2VfY2IoY3R4LCB0eG4sIG1lc3NhZ2VfbHNuLCBwcmVm aXgsIHJlbGlkLCBjbWR0eXBlLAorCQkJCQkJCQkgbWVzc2FnZV9zaXplLCBtZXNzYWdlKTsKKwor CS8qIFBvcCB0aGUgZXJyb3IgY29udGV4dCBzdGFjayAqLworCWVycm9yX2NvbnRleHRfc3RhY2sg PSBlcnJjYWxsYmFjay5wcmV2aW91czsKK30KKworc3RhdGljIHZvaWQKIHN0cmVhbV9zdGFydF9j Yl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJ CQkJCQlYTG9nUmVjUHRyIGZpcnN0X2xzbikKIHsKQEAgLTE1MzYsNiArMTU4Nyw0OCBAQCBzdHJl YW1fbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVy VFhOICp0eG4sCiB9CiAKIHN0YXRpYyB2b2lkCitzdHJlYW1fZGRsbWVzc2FnZV9jYl93cmFwcGVy KFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJIFhM b2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJl bGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJIFNpemUgbWVzc2FnZV9z aXplLAorCQkJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlKQoreworCUxvZ2ljYWxEZWNvZGluZ0Nv bnRleHQgKmN0eCA9IGNhY2hlLT5wcml2YXRlX2RhdGE7CisJTG9naWNhbEVycm9yQ2FsbGJhY2tT dGF0ZSBzdGF0ZTsKKwlFcnJvckNvbnRleHRDYWxsYmFjayBlcnJjYWxsYmFjazsKKworCUFzc2Vy dCghY3R4LT5mYXN0X2ZvcndhcmQpOworCisJLyogV2UncmUgb25seSBzdXBwb3NlZCB0byBjYWxs IHRoaXMgd2hlbiBzdHJlYW1pbmcgaXMgc3VwcG9ydGVkLiAqLworCUFzc2VydChjdHgtPnN0cmVh bWluZyk7CisKKwkvKiB0aGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsICovCisJaWYgKGN0eC0+Y2Fs bGJhY2tzLnN0cmVhbV9kZGxtZXNzYWdlX2NiID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFB1 c2ggY2FsbGJhY2sgKyBpbmZvIG9uIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJc3RhdGUu Y3R4ID0gY3R4OworCXN0YXRlLmNhbGxiYWNrX25hbWUgPSAic3RyZWFtX2RkbG1lc3NhZ2UiOwor CXN0YXRlLnJlcG9ydF9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCWVycmNhbGxiYWNrLmNhbGxi YWNrID0gb3V0cHV0X3BsdWdpbl9lcnJvcl9jYWxsYmFjazsKKwllcnJjYWxsYmFjay5hcmcgPSAo dm9pZCAqKSAmc3RhdGU7CisJZXJyY2FsbGJhY2sucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0 YWNrOworCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmZXJyY2FsbGJhY2s7CisKKwkvKiBzZXQgb3V0 cHV0IHN0YXRlICovCisJY3R4LT5hY2NlcHRfd3JpdGVzID0gdHJ1ZTsKKwljdHgtPndyaXRlX3hp ZCA9IHR4biAhPSBOVUxMID8gdHhuLT54aWQgOiBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwljdHgt PndyaXRlX2xvY2F0aW9uID0gbWVzc2FnZV9sc247CisKKwkvKiBkbyB0aGUgYWN0dWFsIHdvcms6 IGNhbGwgY2FsbGJhY2sgKi8KKwljdHgtPmNhbGxiYWNrcy5zdHJlYW1fZGRsbWVzc2FnZV9jYihj dHgsIHR4biwgbWVzc2FnZV9sc24sIHByZWZpeCwgcmVsaWQsCisJCQkJCQkJCQkJY21kdHlwZSwg bWVzc2FnZV9zaXplLCBtZXNzYWdlKTsKKworCS8qIFBvcCB0aGUgZXJyb3IgY29udGV4dCBzdGFj ayAqLworCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKK30KKwor c3RhdGljIHZvaWQKIHN0cmVhbV90cnVuY2F0ZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNh Y2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQkgICBpbnQgbnJlbGF0aW9ucywgUmVs YXRpb24gcmVsYXRpb25zW10sCiAJCQkJCQkgICBSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2Up CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKaW5kZXggZmY4NTEzZS4uZjM1 NDA2MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5j CisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwpAQCAtNjYzLDYg KzY2Myw1MiBAQCBsb2dpY2FscmVwX3dyaXRlX21lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5z YWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKIH0KIAogLyoKKyAqIFJlYWQgRERMIE1FU1NB R0UgZnJvbSBzdHJlYW0KKyAqLworY2hhciAqCitsb2dpY2FscmVwX3JlYWRfZGRsbWVzc2FnZShT dHJpbmdJbmZvIGluLCBYTG9nUmVjUHRyICpsc24sCisJCQkJCQkgICBjb25zdCBjaGFyICoqcHJl Zml4LAorCQkJCQkJICAgU2l6ZSAqc3opCit7CisJdWludDggZmxhZ3M7CisJY2hhciAqbXNnOwor CisJLy9UT0RPIGRvdWJsZSBjaGVjayB3aGVuIGRvIHdlIG5lZWQgdG8gZ2V0IFRyYW5zYWN0aW9u SWQuCisKKwlmbGFncyA9IHBxX2dldG1zZ2ludChpbiwgMSk7CisJaWYgKGZsYWdzICE9IDApCisJ CWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgZmxhZ3MgJXUgaW4gZGRsIG1lc3NhZ2UiLCBmbGFn cyk7CisJKmxzbiA9IHBxX2dldG1zZ2ludDY0KGluKTsKKwkqcHJlZml4ID0gcHFfZ2V0bXNnc3Ry aW5nKGluKTsKKwkqc3ogPSBwcV9nZXRtc2dpbnQoaW4sIDQpOworCW1zZyA9IChjaGFyICopIHBx X2dldG1zZ2J5dGVzKGluLCAqc3opOworCisJcmV0dXJuIG1zZzsKK30KKworLyoKKyAqIFdyaXRl IERETCBNRVNTQUdFIHRvIHN0cmVhbQorICovCit2b2lkCitsb2dpY2FscmVwX3dyaXRlX2RkbG1l c3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwK KwkJCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2Up Cit7CisJdWludDgJCWZsYWdzID0gMDsKKworCXBxX3NlbmRieXRlKG91dCwgTE9HSUNBTF9SRVBf TVNHX0RETE1FU1NBR0UpOworCisJLyogdHJhbnNhY3Rpb24gSUQgKGlmIG5vdCB2YWxpZCwgd2Un cmUgbm90IHN0cmVhbWluZykgKi8KKwlpZiAoVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSkKKwkJ cHFfc2VuZGludDMyKG91dCwgeGlkKTsKKworCXBxX3NlbmRpbnQ4KG91dCwgZmxhZ3MpOworCXBx X3NlbmRpbnQ2NChvdXQsIGxzbik7CisJcHFfc2VuZHN0cmluZyhvdXQsIHByZWZpeCk7CisJcHFf c2VuZGludDMyKG91dCwgc3opOworCXBxX3NlbmRieXRlcyhvdXQsIG1lc3NhZ2UsIHN6KTsKK30K KworLyoKICAqIFdyaXRlIHJlbGF0aW9uIGRlc2NyaXB0aW9uIHRvIHRoZSBvdXRwdXQgc3RyZWFt LgogICovCiB2b2lkCkBAIC0xMjE4LDYgKzEyNjQsOCBAQCBsb2dpY2FscmVwX21lc3NhZ2VfdHlw ZShMb2dpY2FsUmVwTXNnVHlwZSBhY3Rpb24pCiAJCQlyZXR1cm4gIlRZUEUiOwogCQljYXNlIExP R0lDQUxfUkVQX01TR19NRVNTQUdFOgogCQkJcmV0dXJuICJNRVNTQUdFIjsKKwkJY2FzZSBMT0dJ Q0FMX1JFUF9NU0dfRERMTUVTU0FHRToKKwkJCXJldHVybiAiRERMIjsKIAkJY2FzZSBMT0dJQ0FM X1JFUF9NU0dfQkVHSU5fUFJFUEFSRToKIAkJCXJldHVybiAiQkVHSU4gUFJFUEFSRSI7CiAJCWNh c2UgTE9HSUNBTF9SRVBfTVNHX1BSRVBBUkU6CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCmluZGV4IDg4YTM3ZmQuLjFmNmQ0ZWEgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCisrKyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCkBAIC05NCw2 ICs5NCw3IEBACiAjaW5jbHVkZSAibGliL2JpbmFyeWhlYXAuaCIKICNpbmNsdWRlICJtaXNjYWRt aW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNz YWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxp Y2F0aW9uL3Jlb3JkZXJidWZmZXIuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9zbG90LmgiCkBA IC01MTIsNiArNTEzLDE0IEBAIFJlb3JkZXJCdWZmZXJSZXR1cm5DaGFuZ2UoUmVvcmRlckJ1ZmZl ciAqcmIsIFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSwKIAkJCQlwZnJlZShjaGFuZ2UtPmRh dGEubXNnLm1lc3NhZ2UpOwogCQkJY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlID0gTlVMTDsKIAkJ CWJyZWFrOworCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOgorCQkJaWYg KGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4ICE9IE5VTEwpCisJCQkJcGZyZWUoY2hhbmdlLT5k YXRhLmRkbG1zZy5wcmVmaXgpOworCQkJY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXggPSBOVUxM OworCQkJaWYgKGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSAhPSBOVUxMKQorCQkJCXBmcmVl KGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSk7CisJCQljaGFuZ2UtPmRhdGEuZGRsbXNnLm1l c3NhZ2UgPSBOVUxMOworCQkJYnJlYWs7CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lO VkFMSURBVElPTjoKIAkJCWlmIChjaGFuZ2UtPmRhdGEuaW52YWwuaW52YWxpZGF0aW9ucykKIAkJ CQlwZnJlZShjaGFuZ2UtPmRhdGEuaW52YWwuaW52YWxpZGF0aW9ucyk7CkBAIC04NjcsNiArODc2 LDM2IEBAIFJlb3JkZXJCdWZmZXJRdWV1ZU1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5z YWN0aW9uSWQgeGlkLAogfQogCiAvKgorICogQSB0cmFuc2FjdGlvbmFsIERETCBtZXNzYWdlIGlz IHF1ZXVlZCB0byBiZSBwcm9jZXNzZWQgdXBvbiBjb21taXQuCisgKi8KK3ZvaWQKK1Jlb3JkZXJC dWZmZXJRdWV1ZURETE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlk LAorCQkJCQkJCSBYTG9nUmVjUHRyIGxzbiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCSBT aXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSwKKwkJCQkJCQkgT2lkIHJlbGlk LCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUpCit7CisJTWVtb3J5Q29udGV4dCBvbGRjb250 ZXh0OworCVJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZTsKKworCUFzc2VydCh4aWQgIT0gSW52 YWxpZFRyYW5zYWN0aW9uSWQpOworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hU byhyYi0+Y29udGV4dCk7CisKKwljaGFuZ2UgPSBSZW9yZGVyQnVmZmVyR2V0Q2hhbmdlKHJiKTsK KwljaGFuZ2UtPmFjdGlvbiA9IFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOworCWNo YW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4ID0gcHN0cmR1cChwcmVmaXgpOworCWNoYW5nZS0+ZGF0 YS5kZGxtc2cucmVsaWQgPSByZWxpZDsKKwljaGFuZ2UtPmRhdGEuZGRsbXNnLmNtZHR5cGUgPSBj bWR0eXBlOworCWNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplID0gbWVzc2FnZV9zaXpl OworCWNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSA9IHBhbGxvYyhtZXNzYWdlX3NpemUpOwor CW1lbWNweShjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UsIG1lc3NhZ2UsIG1lc3NhZ2Vfc2l6 ZSk7CisKKwlSZW9yZGVyQnVmZmVyUXVldWVDaGFuZ2UocmIsIHhpZCwgbHNuLCBjaGFuZ2UsIGZh bHNlKTsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKK30KKworLyoKICAq IEFzc2VydFRYTkxzbk9yZGVyCiAgKgkJVmVyaWZ5IExTTiBvcmRlcmluZyBvZiB0cmFuc2FjdGlv biBsaXN0cyBpbiB0aGUgcmVvcmRlcmJ1ZmZlcgogICoKQEAgLTE5NTgsNiArMTk5NywyOSBAQCBS ZW9yZGVyQnVmZmVyQXBwbHlNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVy VFhOICp0eG4sCiB9CiAKIC8qCisgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIFJlb3JkZXJCdWZmZXJQ cm9jZXNzVFhOIGZvciBhcHBseWluZyB0aGUgRERMIG1lc3NhZ2UuCisgKi8KK3N0YXRpYyBpbmxp bmUgdm9pZAorUmVvcmRlckJ1ZmZlckFwcGx5RERMTWVzc2FnZShSZW9yZGVyQnVmZmVyICpyYiwg UmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCSBSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFu Z2UsIGJvb2wgc3RyZWFtaW5nKQoreworCWlmIChzdHJlYW1pbmcpCisJCXJiLT5zdHJlYW1fZGRs bWVzc2FnZShyYiwgdHhuLCBjaGFuZ2UtPmxzbiwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGxt c2cucHJlZml4LAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwKKwkJCQkJCQkg IGNoYW5nZS0+ZGF0YS5kZGxtc2cuY21kdHlwZSwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGxt c2cubWVzc2FnZV9zaXplLAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlKTsK KwllbHNlCisJCXJiLT5kZGxtZXNzYWdlKHJiLCB0eG4sIGNoYW5nZS0+bHNuLAorCQkJCQkgICBj aGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5y ZWxpZCwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5jbWR0eXBlLAorCQkJCQkgICBjaGFu Z2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1z Zy5tZXNzYWdlKTsKK30KKworLyoKICAqIEZ1bmN0aW9uIHRvIHN0b3JlIHRoZSBjb21tYW5kIGlk IGFuZCBzbmFwc2hvdCBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50CiAgKiBzdHJlYW0gc28gdGhh dCB3ZSBjYW4gcmV1c2UgdGhlIHNhbWUgd2hpbGUgc2VuZGluZyB0aGUgbmV4dCBzdHJlYW0uCiAg Ki8KQEAgLTIzMzUsNiArMjM5NywxMCBAQCBSZW9yZGVyQnVmZmVyUHJvY2Vzc1RYTihSZW9yZGVy QnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQlSZW9yZGVyQnVmZmVyQXBw bHlNZXNzYWdlKHJiLCB0eG4sIGNoYW5nZSwgc3RyZWFtaW5nKTsKIAkJCQkJYnJlYWs7CiAKKwkJ CQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOgorCQkJCQlSZW9yZGVyQnVm ZmVyQXBwbHlERExNZXNzYWdlKHJiLCB0eG4sIGNoYW5nZSwgc3RyZWFtaW5nKTsKKwkJCQkJYnJl YWs7CisKIAkJCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CiAJCQkJ CS8qIEV4ZWN1dGUgdGhlIGludmFsaWRhdGlvbiBtZXNzYWdlcyBsb2NhbGx5ICovCiAJCQkJCVJl b3JkZXJCdWZmZXJFeGVjdXRlSW52YWxpZGF0aW9ucyhjaGFuZ2UtPmRhdGEuaW52YWwubmludmFs aWRhdGlvbnMsCkBAIC0zNzEwLDYgKzM3NzYsNDAgQEAgUmVvcmRlckJ1ZmZlclNlcmlhbGl6ZUNo YW5nZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCiAJCQkJYnJl YWs7CiAJCQl9CisJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1FU1NBR0U6CisJCQl7 CisJCQkJY2hhcgkgICAqZGF0YTsKKwkJCQlTaXplCQlwcmVmaXhfc2l6ZSA9IHN0cmxlbihjaGFu Z2UtPmRhdGEuZGRsbXNnLnByZWZpeCkgKyAxOworCisJCQkJc3ogKz0gcHJlZml4X3NpemUgKyBj aGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSArCisJCQkJCXNpemVvZihTaXplKSArIHNp emVvZihPaWQpICsgc2l6ZW9mKGludCkgKyBzaXplb2YoU2l6ZSk7CisJCQkJUmVvcmRlckJ1ZmZl clNlcmlhbGl6ZVJlc2VydmUocmIsIHN6KTsKKworCQkJCWRhdGEgPSAoKGNoYXIgKikgcmItPm91 dGJ1ZikgKyBzaXplb2YoUmVvcmRlckJ1ZmZlckRpc2tDaGFuZ2UpOworCisJCQkJLyogbWlnaHQg aGF2ZSBiZWVuIHJlYWxsb2NhdGVkIGFib3ZlICovCisJCQkJb25kaXNrID0gKFJlb3JkZXJCdWZm ZXJEaXNrQ2hhbmdlICopIHJiLT5vdXRidWY7CisKKwkJCQkvKiB3cml0ZSB0aGUgcHJlZml4LCBy ZWxpZCBhbmQgY21kdHlwZSBpbmNsdWRpbmcgdGhlIHNpemUgKi8KKwkJCQltZW1jcHkoZGF0YSwg JnByZWZpeF9zaXplLCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOwor CQkJCW1lbWNweShkYXRhLCAmY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwgc2l6ZW9mKE9pZCkp OworCQkJCWRhdGEgKz0gc2l6ZW9mKE9pZCk7CisJCQkJbWVtY3B5KGRhdGEsICZjaGFuZ2UtPmRh dGEuZGRsbXNnLmNtZHR5cGUsIHNpemVvZihpbnQpKTsKKwkJCQlkYXRhICs9IHNpemVvZihpbnQp OworCQkJCW1lbWNweShkYXRhLCBjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCwKKwkJCQkJICAg cHJlZml4X3NpemUpOworCQkJCWRhdGEgKz0gcHJlZml4X3NpemU7CisKKwkJCQkvKiB3cml0ZSB0 aGUgbWVzc2FnZSBpbmNsdWRpbmcgdGhlIHNpemUgKi8KKwkJCQltZW1jcHkoZGF0YSwgJmNoYW5n ZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplLCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEgKz0g c2l6ZW9mKFNpemUpOworCQkJCW1lbWNweShkYXRhLCBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3Nh Z2UsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplKTsKKwkJCQlkYXRh ICs9IGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplOworCisJCQkJYnJlYWs7CisJCQl9 CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKIAkJCXsKIAkJCQlj aGFyCSAgICpkYXRhOwpAQCAtNDAyNCw2ICs0MTI0LDE1IEBAIFJlb3JkZXJCdWZmZXJDaGFuZ2VT aXplKFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSkKIAogCQkJCWJyZWFrOwogCQkJfQorCQlj YXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOgorCQkJeworCQkJCVNpemUJCXBy ZWZpeF9zaXplID0gc3RybGVuKGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4KSArIDE7CisKKwkJ CQlzeiArPSBwcmVmaXhfc2l6ZSArIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplICsK KwkJCQkJc2l6ZW9mKFNpemUpICsgc2l6ZW9mKFNpemUpICsgc2l6ZW9mKE9pZCkgKyBzaXplb2Yo aW50KTsKKworCQkJCWJyZWFrOworCQkJfQogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9J TlZBTElEQVRJT046CiAJCQl7CiAJCQkJc3ogKz0gc2l6ZW9mKFNoYXJlZEludmFsaWRhdGlvbk1l c3NhZ2UpICoKQEAgLTQyOTksNiArNDQwOCwzMyBAQCBSZW9yZGVyQnVmZmVyUmVzdG9yZUNoYW5n ZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCiAJCQkJYnJlYWs7 CiAJCQl9CisJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1FU1NBR0U6CisJCQl7CisJ CQkJU2l6ZQkJcHJlZml4X3NpemU7CisKKwkJCQkvKiByZWFkIHByZWZpeCAqLworCQkJCW1lbWNw eSgmcHJlZml4X3NpemUsIGRhdGEsIHNpemVvZihTaXplKSk7CisJCQkJZGF0YSArPSBzaXplb2Yo U2l6ZSk7CisJCQkJbWVtY3B5KCZjaGFuZ2UtPmRhdGEuZGRsbXNnLnJlbGlkLCBkYXRhLCBzaXpl b2YoT2lkKSk7CisJCQkJZGF0YSArPSBzaXplb2YoT2lkKTsKKwkJCQltZW1jcHkoJmNoYW5nZS0+ ZGF0YS5kZGxtc2cuY21kdHlwZSwgZGF0YSwgc2l6ZW9mKGludCkpOworCQkJCWRhdGEgKz0gc2l6 ZW9mKGludCk7CisJCQkJY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXggPSBNZW1vcnlDb250ZXh0 QWxsb2MocmItPmNvbnRleHQsIHByZWZpeF9zaXplKTsKKwkJCQltZW1jcHkoY2hhbmdlLT5kYXRh LmRkbG1zZy5wcmVmaXgsIGRhdGEsIHByZWZpeF9zaXplKTsKKwkJCQlBc3NlcnQoY2hhbmdlLT5k YXRhLmRkbG1zZy5wcmVmaXhbcHJlZml4X3NpemUgLSAxXSA9PSAnXDAnKTsKKwkJCQlkYXRhICs9 IHByZWZpeF9zaXplOworCisJCQkJLyogcmVhZCB0aGUgbWVzc2FnZSAqLworCQkJCW1lbWNweSgm Y2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUsIGRhdGEsIHNpemVvZihTaXplKSk7CisJCQkJ ZGF0YSArPSBzaXplb2YoU2l6ZSk7CisJCQkJY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlID0gTWVt b3J5Q29udGV4dEFsbG9jKHJiLT5jb250ZXh0LAorCQkJCQkJCQkJCQkJCQkJICBjaGFuZ2UtPmRh dGEubXNnLm1lc3NhZ2Vfc2l6ZSk7CisJCQkJbWVtY3B5KGNoYW5nZS0+ZGF0YS5tc2cubWVzc2Fn ZSwgZGF0YSwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUpOworCQkJCWRh dGEgKz0gY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemU7CisKKwkJCQlicmVhazsKKwkJCX0K IAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgogCQkJewogCQkJCVNp emUJCWludmFsX3NpemUgPSBzaXplb2YoU2hhcmVkSW52YWxpZGF0aW9uTWVzc2FnZSkgKgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKaW5kZXggNWY4YzU0MS4uNDQzYTNj MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwor KysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCkBAIC0xNTYsNiAr MTU2LDcgQEAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9tYWtlZnVu Y3MuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCisjaW5jbHVkZSAicGFyc2Vy L2FuYWx5emUuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2Jn d29ya2VyLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKQEAgLTE3OSw3ICsx ODAsMTAgQEAKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3By b2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgorI2luY2x1ZGUgInRjb3AvZGRs X2RlcGFyc2UuaCIKKyNpbmNsdWRlICJ0Y29wL3BxdWVyeS5oIgogI2luY2x1ZGUgInRjb3AvdGNv cHByb3QuaCIKKyNpbmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wu aCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2NhdGNhY2hl LmgiCkBAIC0yNDYzLDYgKzI0NjcsMjMwIEBAIGFwcGx5X2hhbmRsZV90cnVuY2F0ZShTdHJpbmdJ bmZvIHMpCiAJZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKIH0KIAorLyogUmVtb3ZlIHRoZSBkYXRh IHBvcHVsYXRpb24gZnJvbSB0aGUgY29tbWFuZCAqLworc3RhdGljIHZvaWQKK3ByZXByb2Nlc3Nf Y3JlYXRlX3RhYmxlKFJhd1N0bXQgKmNvbW1hbmQpCit7CisJQ29tbWFuZFRhZwljb21tYW5kVGFn OworCisJY29tbWFuZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWcoKE5vZGUgKiljb21tYW5kKTsKKwor CXN3aXRjaCAoY29tbWFuZFRhZykKKwl7CisJCWNhc2UgQ01EVEFHX0NSRUFURV9UQUJMRV9BUzoK KwkJY2FzZSBDTURUQUdfU0VMRUNUX0lOVE86CisJCQl7CisJCQkJQ3JlYXRlVGFibGVBc1N0bXQg KmNhc3RtdCA9IChDcmVhdGVUYWJsZUFzU3RtdCAqKSBjb21tYW5kLT5zdG10OworCQkJCWlmIChj YXN0bXQtPm9ianR5cGUgPT0gT0JKRUNUX1RBQkxFKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICog Rm9yY2Ugc2tpcHBpbmcgZGF0YSBwb3B1bGF0aW9uIHRvIGF2b2lkIGRhdGEKKwkJCQkJICogaW5j b25zaXN0ZW5jeS4gRGF0YSBzaG91bGQgYmUgcmVwbGljYXRlZCBmcm9tIHRoZQorCQkJCQkgKiBw dWJsaXNoZXIgaW5zdGVhZC4KKwkJCQkJICovCisJCQkJCWNhc3RtdC0+aW50by0+c2tpcERhdGEg PSB0cnVlOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENNRFRBR19TRUxFQ1Q6CisJ CQl7CisJCQkJU2VsZWN0U3RtdCAqc3N0bXQgPSAoU2VsZWN0U3RtdCAqKSBjb21tYW5kLT5zdG10 OworCisJCQkJaWYgKHNzdG10LT5pbnRvQ2xhdXNlICE9IE5VTEwpCisJCQkJeworCQkJCQkvKgor CQkJCQkgKiBGb3JjZSBza2lwcGluZyBkYXRhIHBvcHVsYXRpb24gdG8gYXZvaWQgZGF0YQorCQkJ CQkgKiBpbmNvbnNpc3RlbmN5LiBEYXRhIHNob3VsZCBiZSByZXBsaWNhdGVkIGZyb20gdGhlCisJ CQkJCSAqIHB1Ymxpc2hlciBpbnN0ZWFkLgorCQkJCQkgKi8KKwkJCQkJc3N0bXQtPmludG9DbGF1 c2UtPnNraXBEYXRhID0gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwlkZWZhdWx0Ogor CQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBIYW5kbGUgQ1JFQVRFIFRBQkxFIGNvbW1hbmQKKyAq CisgKiBDYWxsIEFkZFN1YnNjcmlwdGlvblJlbFN0YXRlIGZvciBDUkVBVEUgVEFCRUwgY29tbWFu ZCB0byBzZXQgdGhlIHJlbHN0YXRlIHRvCisgKiBTVUJSRUxfU1RBVEVfUkVBRFkgc28gRE1MIGNo YW5nZXMgb24gdGhpcyBuZXcgdGFibGUgY2FuIGJlIHJlcGxpY2F0ZWQgd2l0aG91dAorICogaGF2 aW5nIHRvIG1hbnVhbGx5IHJ1biAiYWx0ZXIgc3Vic2NyaXB0aW9uIC4uLiByZWZyZXNoIHB1Ymxp Y2F0aW9uIgorICovCitzdGF0aWMgdm9pZAoraGFuZGxlX2NyZWF0ZV90YWJsZShSYXdTdG10ICpj b21tYW5kKQoreworCUNvbW1hbmRUYWcJY29tbWFuZFRhZzsKKwlSYW5nZVZhcgkgKnJ2ID0gTlVM TDsKKwlPaWQJCQlyZWxpZDsKKwlPaWQJCQlyZWxuYW1lc3BhY2UgPSBJbnZhbGlkT2lkOworCWNo YXIgCQkgKnNjaGVtYW5hbWUgPSBOVUxMOworCWNoYXIJCSAqcmVsbmFtZSA9IE5VTEw7CisKKwlj b21tYW5kVGFnID0gQ3JlYXRlQ29tbWFuZFRhZygoTm9kZSAqKSBjb21tYW5kKTsKKworCXN3aXRj aCAoY29tbWFuZFRhZykKKwl7CisJCWNhc2UgQ01EVEFHX0NSRUFURV9UQUJMRToKKwkJCXsKKwkJ CQlDcmVhdGVTdG10ICpjc3RtdCA9IChDcmVhdGVTdG10ICopIGNvbW1hbmQtPnN0bXQ7CisJCQkJ cnYgPSBjc3RtdC0+cmVsYXRpb247CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJy ZWFrOworCX0KKworCWlmICghcnYpCisJCXJldHVybjsKKworCXNjaGVtYW5hbWUgPSBydi0+c2No ZW1hbmFtZTsKKwlyZWxuYW1lID0gcnYtPnJlbG5hbWU7CisKKwlpZiAoc2NoZW1hbmFtZSAhPSBO VUxMKQorCQlyZWxuYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX29pZChzY2hlbWFuYW1lLCBmYWxz ZSk7CisKKwlpZiAocmVsbmFtZXNwYWNlICE9IEludmFsaWRPaWQpCisJCXJlbGlkID0gZ2V0X3Jl bG5hbWVfcmVsaWQocmVsbmFtZSwgcmVsbmFtZXNwYWNlKTsKKwllbHNlCisJCXJlbGlkID0gUmVs bmFtZUdldFJlbGlkKHJlbG5hbWUpOworCisJaWYgKHJlbGlkICE9IEludmFsaWRPaWQpCisJewor CQlBZGRTdWJzY3JpcHRpb25SZWxTdGF0ZShNeVN1YnNjcmlwdGlvbi0+b2lkLCByZWxpZCwKKwkJ CQkJCQkJU1VCUkVMX1NUQVRFX1JFQURZLAorCQkJCQkJCQlJbnZhbGlkWExvZ1JlY1B0cik7CisJ CWVyZXBvcnQoREVCVUcxLAorCQkJCShlcnJtc2dfaW50ZXJuYWwoInRhYmxlIFwiJXNcIiBhZGRl ZCB0byBzdWJzY3JpcHRpb24gXCIlc1wiIiwKKwkJCQkJCQkJIHJlbG5hbWUsIE15U3Vic2NyaXB0 aW9uLT5uYW1lKSkpOworCX0KK30KKworc3RhdGljIHZvaWQKK2FwcGx5X2hhbmRsZV9kZGwoU3Ry aW5nSW5mbyBzKQoreworCVhMb2dSZWNQdHIgbHNuOworCWNvbnN0IGNoYXIgKnByZWZpeCA9IE5V TEw7CisJY2hhciAqbWVzc2FnZSA9IE5VTEw7CisJY2hhcgkgICAqZGRsX2NvbW1hbmQ7CisJU2l6 ZQkJc3o7CisJTGlzdAkgICAqcGFyc2V0cmVlX2xpc3Q7CisJTGlzdENlbGwgICAqcGFyc2V0cmVl X2l0ZW07CisJRGVzdFJlY2VpdmVyICpyZWNlaXZlcjsKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRl eHQ7CisJY29uc3QgY2hhciAqc2F2ZV9kZWJ1Z19xdWVyeV9zdHJpbmcgPSBkZWJ1Z19xdWVyeV9z dHJpbmc7CisKKwltZXNzYWdlID0gbG9naWNhbHJlcF9yZWFkX2RkbG1lc3NhZ2UocywgJmxzbiwg JnByZWZpeCwgJnN6KTsKKworCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgaW4gYSB0cmFuc2FjdGlvbiBj b21tYW5kICovCisJYmVnaW5fcmVwbGljYXRpb25fc3RlcCgpOworCisJZGRsX2NvbW1hbmQgPSBk ZGxfZGVwYXJzZV9qc29uX3RvX3N0cmluZyhtZXNzYWdlKTsKKwlkZWJ1Z19xdWVyeV9zdHJpbmcg PSBkZGxfY29tbWFuZDsKKworCS8qIERlc3ROb25lIGZvciBsb2dpY2FsIHJlcGxpY2F0aW9uICov CisJcmVjZWl2ZXIgPSBDcmVhdGVEZXN0UmVjZWl2ZXIoRGVzdE5vbmUpOworCXBhcnNldHJlZV9s aXN0ID0gcGdfcGFyc2VfcXVlcnkoZGRsX2NvbW1hbmQpOworCisJZm9yZWFjaChwYXJzZXRyZWVf aXRlbSwgcGFyc2V0cmVlX2xpc3QpCisJeworCQlMaXN0CSAgICpwbGFudHJlZV9saXN0OworCQlM aXN0CSAgICpxdWVyeXRyZWVfbGlzdDsKKwkJUmF3U3RtdAkgICAqY29tbWFuZCA9IChSYXdTdG10 ICopIGxmaXJzdChwYXJzZXRyZWVfaXRlbSk7CisJCUNvbW1hbmRUYWcJY29tbWFuZFRhZzsKKwkJ TWVtb3J5Q29udGV4dCBwZXJfcGFyc2V0cmVlX2NvbnRleHQgPSBOVUxMOworCQlQb3J0YWwJCXBv cnRhbDsKKwkJYm9vbAkJIHNuYXBzaG90X3NldCA9IGZhbHNlOworCisJCWNvbW1hbmRUYWcgPSBD cmVhdGVDb21tYW5kVGFnKChOb2RlICopIGNvbW1hbmQpOworCisJCS8qIElmIHdlIGdvdCBhIGNh bmNlbCBzaWduYWwgaW4gcGFyc2luZyBvciBwcmlvciBjb21tYW5kLCBxdWl0ICovCisJCUNIRUNL X0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJLyogUmVtb3ZlIGRhdGEgcG9wdWxhdGlvbiBmcm9tIHRo ZSBjb21tYW5kICovCisJCXByZXByb2Nlc3NfY3JlYXRlX3RhYmxlKGNvbW1hbmQpOworCisJCS8q CisJCSAqIFNldCB1cCBhIHNuYXBzaG90IGlmIHBhcnNlIGFuYWx5c2lzL3BsYW5uaW5nIHdpbGwg bmVlZCBvbmUuCisJCSAqLworCQlpZiAoYW5hbHl6ZV9yZXF1aXJlc19zbmFwc2hvdChjb21tYW5k KSkKKwkJeworCQkJUHVzaEFjdGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7 CisJCQlzbmFwc2hvdF9zZXQgPSB0cnVlOworCQl9CisKKwkJLyoKKwkJICogV2UgZG8gdGhlIHdv cmsgZm9yIGVhY2ggcGFyc2V0cmVlIGluIGEgc2hvcnQtbGl2ZWQgY29udGV4dCwgdG8KKwkJICog bGltaXQgdGhlIG1lbW9yeSB1c2VkIHdoZW4gdGhlcmUgYXJlIG1hbnkgY29tbWFuZHMgaW4gdGhl IHN0cmluZy4KKwkJICovCisJCXBlcl9wYXJzZXRyZWVfY29udGV4dCA9CisJCQlBbGxvY1NldENv bnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCSAgImV4ZWN1dGVfc3Fs X3N0cmluZyBwZXItc3RhdGVtZW50IGNvbnRleHQiLAorCQkJCQkJCQkgIEFMTE9DU0VUX0RFRkFV TFRfU0laRVMpOworCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBlcl9wYXJz ZXRyZWVfY29udGV4dCk7CisKKwkJcXVlcnl0cmVlX2xpc3QgPSBwZ19hbmFseXplX2FuZF9yZXdy aXRlX2ZpeGVkcGFyYW1zKGNvbW1hbmQsCisJCQkJCQkJCQkJCQkJCQlkZGxfY29tbWFuZCwKKwkJ CQkJCQkJCQkJCQkJCU5VTEwsIDAsIE5VTEwpOworCisJCXBsYW50cmVlX2xpc3QgPSBwZ19wbGFu X3F1ZXJpZXMocXVlcnl0cmVlX2xpc3QsIGRkbF9jb21tYW5kLCAwLCBOVUxMKTsKKworCQkvKiBE b25lIHdpdGggdGhlIHNuYXBzaG90IHVzZWQgZm9yIHBhcnNpbmcvcGxhbm5pbmcgKi8KKwkJaWYg KHNuYXBzaG90X3NldCkKKwkJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisKKwkJcG9ydGFsID0gQ3Jl YXRlUG9ydGFsKCJsb2dpY2FsIHJlcGxpY2F0aW9uIiwgdHJ1ZSwgdHJ1ZSk7CisKKwkJLyoKKwkJ ICogV2UgZG9uJ3QgaGF2ZSB0byBjb3B5IGFueXRoaW5nIGludG8gdGhlIHBvcnRhbCwgYmVjYXVz ZSBldmVyeXRoaW5nCisJCSAqIHdlIGFyZSBwYXNzaW5nIGhlcmUgaXMgaW4gQXBwbHlNZXNzYWdl Q29udGV4dCBvciB0aGUKKwkJICogcGVyX3BhcnNldHJlZV9jb250ZXh0LCBhbmQgc28gd2lsbCBv dXRsaXZlIHRoZSBwb3J0YWwgYW55d2F5LgorCQkgKi8KKwkJUG9ydGFsRGVmaW5lUXVlcnkocG9y dGFsLAorCQkJCQkJICBOVUxMLAorCQkJCQkJICBkZGxfY29tbWFuZCwKKwkJCQkJCSAgY29tbWFu ZFRhZywKKwkJCQkJCSAgcGxhbnRyZWVfbGlzdCwKKwkJCQkJCSAgTlVMTCk7CisKKwkJLyoKKwkJ ICogU3RhcnQgdGhlIHBvcnRhbC4gIE5vIHBhcmFtZXRlcnMgaGVyZS4KKwkJICovCisJCVBvcnRh bFN0YXJ0KHBvcnRhbCwgTlVMTCwgMCwgSW52YWxpZFNuYXBzaG90KTsKKworCQkvKgorCQkgKiBT d2l0Y2ggYmFjayB0byB0cmFuc2FjdGlvbiBjb250ZXh0IGZvciBleGVjdXRpb24uCisJCSAqLwor CQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwkJKHZvaWQpIFBvcnRhbFJ1 bihwb3J0YWwsCisJCQkJCQkgRkVUQ0hfQUxMLAorCQkJCQkJIHRydWUsCisJCQkJCQkgdHJ1ZSwK KwkJCQkJCSByZWNlaXZlciwKKwkJCQkJCSByZWNlaXZlciwKKwkJCQkJCSBOVUxMKTsKKworCQlQ b3J0YWxEcm9wKHBvcnRhbCwgZmFsc2UpOworCisJCUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7 CisKKwkJLyoKKwkJICogVGFibGUgY3JlYXRlZCBieSBEREwgcmVwbGljYXRpb24gKGRhdGFiYXNl IGxldmVsKSBpcyBhdXRvbWF0aWNhbGx5CisJCSAqIGFkZGVkIHRvIHRoZSBzdWJzY3JpcHRpb24g aGVyZS4KKwkJICovCisJCWhhbmRsZV9jcmVhdGVfdGFibGUoY29tbWFuZCk7CisKKwkJLyogTm93 IHdlIG1heSBkcm9wIHRoZSBwZXItcGFyc2V0cmVlIGNvbnRleHQsIGlmIG9uZSB3YXMgY3JlYXRl ZC4gKi8KKwkJTWVtb3J5Q29udGV4dERlbGV0ZShwZXJfcGFyc2V0cmVlX2NvbnRleHQpOworCX0K KworCWRlYnVnX3F1ZXJ5X3N0cmluZyA9IHNhdmVfZGVidWdfcXVlcnlfc3RyaW5nOworCWVuZF9y ZXBsaWNhdGlvbl9zdGVwKCk7Cit9CisKIAogLyoKICAqIExvZ2ljYWwgcmVwbGljYXRpb24gcHJv dG9jb2wgbWVzc2FnZSBkaXNwYXRjaGVyLgpAQCAtMjUyOCw2ICsyNzU2LDEwIEBAIGFwcGx5X2Rp c3BhdGNoKFN0cmluZ0luZm8gcykKIAkJCSAqLwogCQkJYnJlYWs7CiAKKwkJY2FzZSBMT0dJQ0FM X1JFUF9NU0dfRERMTUVTU0FHRToKKwkJCWFwcGx5X2hhbmRsZV9kZGwocyk7CisJCQlicmVhazsK KwogCQljYXNlIExPR0lDQUxfUkVQX01TR19TVFJFQU1fU1RBUlQ6CiAJCQlhcHBseV9oYW5kbGVf c3RyZWFtX3N0YXJ0KHMpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdv dXRwdXQvcGdvdXRwdXQuYwppbmRleCBhM2MxYmE4Li43YmY2M2RjIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKQEAgLTUzLDYgKzUzLDExIEBAIHN0YXRp YyB2b2lkIHBnb3V0cHV0X21lc3NhZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJ CQkJCSBSZW9yZGVyQnVmZmVyVFhOICp0eG4sIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCiAJCQkJ CQkJIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4LAogCQkJCQkJCSBTaXpl IHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKK3N0YXRpYyB2b2lkIHBnb3V0cHV0X2RkbG1lc3Nh Z2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAorCQkJCQkJCQlSZW9yZGVyQnVmZmVyVFhO ICp0eG4sIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZp eCwgT2lkIHJlbGlkLAorCQkJCQkJCQlEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJ CQkJCVNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogc3RhdGljIGJvb2wgcGdvdXRwdXRf b3JpZ2luX2ZpbHRlcihMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJCSAgIFJl cE9yaWdpbklkIG9yaWdpbl9pZCk7CiBzdGF0aWMgdm9pZCBwZ291dHB1dF9iZWdpbl9wcmVwYXJl X3R4bihMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCkBAIC0yNTYsNiArMjYxLDcgQEAgX1BH X291dHB1dF9wbHVnaW5faW5pdChPdXRwdXRQbHVnaW5DYWxsYmFja3MgKmNiKQogCWNiLT5jaGFu Z2VfY2IgPSBwZ291dHB1dF9jaGFuZ2U7CiAJY2ItPnRydW5jYXRlX2NiID0gcGdvdXRwdXRfdHJ1 bmNhdGU7CiAJY2ItPm1lc3NhZ2VfY2IgPSBwZ291dHB1dF9tZXNzYWdlOworCWNiLT5kZGxtZXNz YWdlX2NiID0gcGdvdXRwdXRfZGRsbWVzc2FnZTsKIAljYi0+Y29tbWl0X2NiID0gcGdvdXRwdXRf Y29tbWl0X3R4bjsKIAogCWNiLT5iZWdpbl9wcmVwYXJlX2NiID0gcGdvdXRwdXRfYmVnaW5fcHJl cGFyZV90eG47CkBAIC0yNzIsNiArMjc4LDcgQEAgX1BHX291dHB1dF9wbHVnaW5faW5pdChPdXRw dXRQbHVnaW5DYWxsYmFja3MgKmNiKQogCWNiLT5zdHJlYW1fY29tbWl0X2NiID0gcGdvdXRwdXRf c3RyZWFtX2NvbW1pdDsKIAljYi0+c3RyZWFtX2NoYW5nZV9jYiA9IHBnb3V0cHV0X2NoYW5nZTsK IAljYi0+c3RyZWFtX21lc3NhZ2VfY2IgPSBwZ291dHB1dF9tZXNzYWdlOworCWNiLT5zdHJlYW1f ZGRsbWVzc2FnZV9jYiA9IHBnb3V0cHV0X2RkbG1lc3NhZ2U7CiAJY2ItPnN0cmVhbV90cnVuY2F0 ZV9jYiA9IHBnb3V0cHV0X3RydW5jYXRlOwogCS8qIHRyYW5zYWN0aW9uIHN0cmVhbWluZyAtIHR3 by1waGFzZSBjb21taXQgKi8KIAljYi0+c3RyZWFtX3ByZXBhcmVfY2IgPSBwZ291dHB1dF9zdHJl YW1fcHJlcGFyZV90eG47CkBAIC00MjYsNiArNDMzLDcgQEAgcGdvdXRwdXRfc3RhcnR1cChMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIE91dHB1dFBsdWdpbk9wdGlvbnMgKm9wdCwKIAogCS8q IFRoaXMgcGx1Z2luIHVzZXMgYmluYXJ5IHByb3RvY29sLiAqLwogCW9wdC0+b3V0cHV0X3R5cGUg PSBPVVRQVVRfUExVR0lOX0JJTkFSWV9PVVRQVVQ7CisJb3B0LT5yZWNlaXZlX3Jld3JpdGVzID0g dHJ1ZTsKIAogCS8qCiAJICogVGhpcyBpcyByZXBsaWNhdGlvbiBzdGFydCBhbmQgbm90IHNsb3Qg aW5pdGlhbGl6YXRpb24uCkBAIC00OTksNiArNTA3LDcgQEAgcGdvdXRwdXRfc3RhcnR1cChMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIE91dHB1dFBsdWdpbk9wdGlvbnMgKm9wdCwKIAogCQkv KiBJbml0IHB1YmxpY2F0aW9uIHN0YXRlLiAqLwogCQlkYXRhLT5wdWJsaWNhdGlvbnMgPSBOSUw7 CisJCWRhdGEtPmRlbGV0ZWRfcmVsaWRzID0gTklMOwogCQlwdWJsaWNhdGlvbnNfdmFsaWQgPSBm YWxzZTsKIAkJQ2FjaGVSZWdpc3RlclN5c2NhY2hlQ2FsbGJhY2soUFVCTElDQVRJT05PSUQsCiAJ CQkJCQkJCQkgIHB1YmxpY2F0aW9uX2ludmFsaWRhdGlvbl9jYiwKQEAgLTEzODEsOSArMTM5MCwy MiBAQCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVy QnVmZmVyVFhOICp0eG4sCiAJUmVvcmRlckJ1ZmZlckNoYW5nZVR5cGUgYWN0aW9uID0gY2hhbmdl LT5hY3Rpb247CiAJVHVwbGVUYWJsZVNsb3QgKm9sZF9zbG90ID0gTlVMTDsKIAlUdXBsZVRhYmxl U2xvdCAqbmV3X3Nsb3QgPSBOVUxMOworCWJvb2wJCQl0YWJsZV9yZXdyaXRlID0gZmFsc2U7CiAK IAl1cGRhdGVfcmVwbGljYXRpb25fcHJvZ3Jlc3MoY3R4LCBmYWxzZSk7CiAKKwkvKgorCSAqIEZv ciBoZWFwIHJld3JpdGVzLCB3ZSBtaWdodCBuZWVkIHRvIHJlcGxpY2F0ZSB0aGVtIGlmIHRoZSBy ZXdyaXR0ZW4KKwkgKiB0YWJsZSBwdWJsaXNoZXMgcmV3cml0ZSBkZGwgbWVzc2FnZS4gU28gZ2V0 IHRoZSBhY3R1YWwgcmVsYXRpb24gaGVyZSBhbmQKKwkgKiBjaGVjayB0aGUgcHViYWN0aW9uIGxh dGVyLgorCSAqLworCWlmIChyZWxhdGlvbi0+cmRfcmVsLT5yZWxyZXdyaXRlKQorCXsKKwkJdGFi bGVfcmV3cml0ZSA9IHRydWU7CisJCXJlbGF0aW9uID0gUmVsYXRpb25JZEdldFJlbGF0aW9uKHJl bGF0aW9uLT5yZF9yZWwtPnJlbHJld3JpdGUpOworCQl0YXJnZXRyZWwgPSByZWxhdGlvbjsKKwl9 CisKIAlpZiAoIWlzX3B1Ymxpc2hhYmxlX3JlbGF0aW9uKHJlbGF0aW9uKSkKIAkJcmV0dXJuOwog CkBAIC0xNDE3LDYgKzE0MzksMTMgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0Nv bnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJQXNzZXJ0KGZhbHNlKTsKIAl9 CiAKKwkvKgorCSAqIFdlIGRvbid0IHB1Ymxpc2ggdGFibGUgcmV3cml0ZSBjaGFuZ2UgdW5sZXNz IHdlIHB1Ymxpc2ggdGhlIHJld3JpdGUgZGRsCisJICogbWVzc2FnZS4KKwkgKi8KKwlpZiAodGFi bGVfcmV3cml0ZSAmJiAhcmVsZW50cnktPnB1YmFjdGlvbnMucHViZGRsKQorCQlyZXR1cm47CisK IAkvKiBBdm9pZCBsZWFraW5nIG1lbW9yeSBieSB1c2luZyBhbmQgcmVzZXR0aW5nIG91ciBvd24g Y29udGV4dCAqLwogCW9sZCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhkYXRhLT5jb250ZXh0KTsK IApAQCAtMTQ0Niw4ICsxNDc1LDggQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0Nv bnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJfQogCiAJCQkvKiBDaGVjayBy b3cgZmlsdGVyICovCi0JCQlpZiAoIXBnb3V0cHV0X3Jvd19maWx0ZXIodGFyZ2V0cmVsLCBOVUxM LCAmbmV3X3Nsb3QsIHJlbGVudHJ5LAotCQkJCQkJCQkJICZhY3Rpb24pKQorCQkJaWYgKCF0YWJs ZV9yZXdyaXRlICYmCisJCQkJIXBnb3V0cHV0X3Jvd19maWx0ZXIodGFyZ2V0cmVsLCBOVUxMLCAm bmV3X3Nsb3QsIHJlbGVudHJ5LCAmYWN0aW9uKSkKIAkJCQlicmVhazsKIAogCQkJLyoKQEAgLTE0 NjcsOCArMTQ5NiwxOSBAQCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAq Y3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQltYXliZV9zZW5kX3NjaGVtYShjdHgsIGNo YW5nZSwgcmVsYXRpb24sIHJlbGVudHJ5KTsKIAogCQkJT3V0cHV0UGx1Z2luUHJlcGFyZVdyaXRl KGN0eCwgdHJ1ZSk7Ci0JCQlsb2dpY2FscmVwX3dyaXRlX2luc2VydChjdHgtPm91dCwgeGlkLCB0 YXJnZXRyZWwsIG5ld19zbG90LAotCQkJCQkJCQkJZGF0YS0+YmluYXJ5LCByZWxlbnRyeS0+Y29s dW1ucyk7CisKKwkJCS8qCisJCQkgKiBDb252ZXJ0IHRoZSByZXdyaXRlIGluc2VydHMgdG8gdXBk YXRlcyBzbyB0aGF0IHRoZSBzdWJzY3JpYmVyCisJCQkgKiBjYW4gcmVwbGF5IGl0LiBUaGlzIGlz IG5lZWRlZCB0byBtYWtlIHN1cmUgdGhlIGRhdGEgYmV0d2VlbgorCQkJICogcHVibGlzaGVyIGFu ZCBzdWJzY3JpYmVyIGlzIGNvbnNpc3RlbnQuCisJCQkgKi8KKwkJCWlmICh0YWJsZV9yZXdyaXRl KQorCQkJCWxvZ2ljYWxyZXBfd3JpdGVfdXBkYXRlKGN0eC0+b3V0LCB4aWQsIHRhcmdldHJlbCwK KwkJCQkJCQkJCQlOVUxMLCBuZXdfc2xvdCwgZGF0YS0+YmluYXJ5LAorCQkJCQkJCQkJCXJlbGVu dHJ5LT5jb2x1bW5zKTsKKwkJCWVsc2UKKwkJCQlsb2dpY2FscmVwX3dyaXRlX2luc2VydChjdHgt Pm91dCwgeGlkLCB0YXJnZXRyZWwsIG5ld19zbG90LAorCQkJCQkJCQkJCWRhdGEtPmJpbmFyeSwg cmVsZW50cnktPmNvbHVtbnMpOwogCQkJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKIAkJ CWJyZWFrOwogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9VUERBVEU6CkBAIC0xNTk4LDYg KzE2MzgsOSBAQCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBS ZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCWFuY2VzdG9yID0gTlVMTDsKIAl9CiAKKwlpZiAodGFi bGVfcmV3cml0ZSkKKwkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7CisKIAkvKiBDbGVhbnVwICov CiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZCk7CiAJTWVtb3J5Q29udGV4dFJlc2V0KGRhdGEt PmNvbnRleHQpOwpAQCAtMTY3NSw4ICsxNzE4LDggQEAgcGdvdXRwdXRfdHJ1bmNhdGUoTG9naWNh bERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAKIHN0YXRpYyB2 b2lkCiBwZ291dHB1dF9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRl ckJ1ZmZlclRYTiAqdHhuLAotCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLCBib29sIHRyYW5z YWN0aW9uYWwsIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwKLQkJCQkgY29uc3QgY2hhciAq bWVzc2FnZSkKKwkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgYm9vbCB0cmFuc2FjdGlvbmFs LAorCQkJCSBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2Up CiB7CiAJUEdPdXRwdXREYXRhICpkYXRhID0gKFBHT3V0cHV0RGF0YSAqKSBjdHgtPm91dHB1dF9w bHVnaW5fcHJpdmF0ZTsKIAlUcmFuc2FjdGlvbklkIHhpZCA9IEludmFsaWRUcmFuc2FjdGlvbklk OwpAQCAtMTcxNiw2ICsxNzU5LDEzNyBAQCBwZ291dHB1dF9tZXNzYWdlKExvZ2ljYWxEZWNvZGlu Z0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCU91dHB1dFBsdWdpbldyaXRl KGN0eCwgdHJ1ZSk7CiB9CiAKK3N0YXRpYyB2b2lkCitwZ291dHB1dF9kZGxtZXNzYWdlKExvZ2lj YWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQlYTG9n UmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwg RGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQlTaXplIHN6LCBjb25zdCBjaGFyICpt ZXNzYWdlKQoreworCVBHT3V0cHV0RGF0YSAqZGF0YSA9IChQR091dHB1dERhdGEgKikgY3R4LT5v dXRwdXRfcGx1Z2luX3ByaXZhdGU7CisJUEdPdXRwdXRUeG5EYXRhICp0eG5kYXRhID0gKFBHT3V0 cHV0VHhuRGF0YSAqKSB0eG4tPm91dHB1dF9wbHVnaW5fcHJpdmF0ZTsKKwlSZWxhdGlvbglyZWxh dGlvbiA9IE5VTEw7CisJVHJhbnNhY3Rpb25JZCB4aWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsK KwlSZWxhdGlvblN5bmNFbnRyeSAqcmVsZW50cnk7CisKKwkvKgorCSAqIFJlbWVtYmVyIHRoZSB4 aWQgZm9yIHRoZSBtZXNzYWdlIGluIHN0cmVhbWluZyBtb2RlLiBTZWUKKwkgKiBwZ291dHB1dF9j aGFuZ2UuCisJICovCisJaWYgKGluX3N0cmVhbWluZykKKwkJeGlkID0gdHhuLT54aWQ7CisKKwlz d2l0Y2ggKGNtZHR5cGUpCisJeworCQljYXNlIERDVF9UYWJsZURyb3BTdGFydDoKKwkJCS8qCisJ CQkgKiBPbiBEUk9QIHN0YXJ0LCBhZGQgdGhlIHJlbGlkIHRvIGEgZGVsZXRlZF9yZWxpZCBsaXN0 IGlmIHRoZQorCQkJICogcmVsaWQgaXMgcGFydCBvZiBhIHB1YmxpY2F0aW9uIHRoYXQgc3VwcG9y dHMgZGRsIHB1YmxpY2F0aW9uLiBXZQorCQkJICogbmVlZCB0aGlzIGJlY2F1c2Ugb24gRFJPUCBl bmQsIHRoZSByZWxpZCB3aWxsIG5vIGxvbmdlciBiZQorCQkJICogdmFsaWQuIExhdGVyIG9uIERy b3AgZW5kLCB2ZXJpZnkgdGhhdCB0aGUgZHJvcCBpcyBmb3IgYSByZWxpZAorCQkJICogdGhhdCBp cyBvbiB0aGUgZGVsZXRlZF9yaWQgbGlzdCwgYW5kIG9ubHkgdGhlbiBzZW5kIHRoZSBkZGwKKwkJ CSAqIG1lc3NhZ2UuCisJCQkgKi8KKwkJCXJlbGF0aW9uID0gUmVsYXRpb25JZEdldFJlbGF0aW9u KHJlbGlkKTsKKworCQkJQXNzZXJ0KHJlbGF0aW9uKTsKKwkJCXJlbGVudHJ5ID0gZ2V0X3JlbF9z eW5jX2VudHJ5KGRhdGEsIHJlbGF0aW9uKTsKKworCQkJaWYgKHJlbGVudHJ5LT5wdWJhY3Rpb25z LnB1YmRkbCkKKwkJCQlkYXRhLT5kZWxldGVkX3JlbGlkcyA9IGxhcHBlbmRfb2lkKGRhdGEtPmRl bGV0ZWRfcmVsaWRzLCByZWxpZCk7CisKKwkJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworCQkJ cmV0dXJuOworCQljYXNlIERDVF9UYWJsZURyb3BFbmQ6CisJCQlpZiAoIWxpc3RfbWVtYmVyX29p ZChkYXRhLT5kZWxldGVkX3JlbGlkcywgcmVsaWQpKQorCQkJCXJldHVybjsKKwkJCWVsc2UKKwkJ CQlkYXRhLT5kZWxldGVkX3JlbGlkcyA9IGxpc3RfZGVsZXRlX29pZChkYXRhLT5kZWxldGVkX3Jl bGlkcywgcmVsaWQpOworCQkJYnJlYWs7CisJCWNhc2UgRENUX1RhYmxlQWx0ZXI6CisJCQkvKgor CQkJICogRm9yIHRhYmxlIHJld3JpdGUgZGRsLCB3ZSBmaXJzdCBzZW5kIHRoZSBvcmlnaW5hbCBk ZGwgbWVzc2FnZSB0bworCQkJICogc3Vic2NyaWJlciwgdGhlbiBjb252ZXJ0IHRoZSB1cGNvbWlu ZyByZXdyaXRlIElOU0VSVCB0byBVUERBVEUgYW5kCisJCQkgKiBzZW5kIHRoZW0gdG8gc3Vic2Ny aWJlciBzbyB0aGF0IHRoZSBkYXRhIGJldHdlZW4gcHVibGlzaGVyIGFuZAorCQkJICogc3Vic2Ny aWJlciBjYW4gYWx3YXlzIGJlIGNvbnNpc3RlbnQuCisJCQkgKgorCQkJICogV2UgZG8gdGhpcyB3 YXkgYmVjYXVzZSBvZiB0d28gcmVhc29uOgorCQkJICoKKwkJCSAqICgxKSBUaGUgZGF0YSBiZWZv cmUgdGhlIHJld3JpdGUgZGRsIGNvdWxkIGFscmVhZHkgYmUgZGlmZmVyZW50IGFtb25nCisJCQkg KiBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIuIFRvIG1ha2Ugc3VyZSB0aGUgZXh0cmEgZGF0YSBp biBzdWJzY3JpYmVyCisJCQkgKiB3aGljaCBkb2Vzbid0IGV4aXN0IGluIHB1Ymxpc2hlciBhbHNv IGdldCByZXdyaXR0ZW4sIHdlIG5lZWQgdG8gbGV0CisJCQkgKiB0aGUgc3Vic2NyaWJlciBleGVj dXRlIHRoZSBvcmlnaW5hbCByZXdyaXRlIGRkbCB0byByZXdyaXRlIGFsbCB0aGUKKwkJCSAqIGRh dGEgYXQgZmlyc3QuCisJCQkgKgorCQkJICogKDIpIHRoZSBkYXRhIGFmdGVyIGV4ZWN1dGluZyBy ZXdyaXRlIGRkbCBjb3VsZCBiZSBkaWZmZXJlbnQgYW1vbmcKKwkJCSAqIHB1Ymxpc2hlciBhbmQg c3Vic2NyaWJlcihkdWUgdG8gZGlmZmVyZW50IGZ1bmN0aW9ucy9vcGVyYXRvcnMgdXNlZAorCQkJ ICogZHVyaW5nIHJld3JpdGUpLCBzbyB3ZSBuZWVkIHRvIHJlcGxpY2F0ZSB0aGUgcmV3cml0ZSBV UERBVEVzIHRvIGtlZXAKKwkJCSAqIHRoZSBkYXRhIGNvbnNpc3RlbnQuCisJCQkgKgorCQkJICog VE8gSU1QUk9WRTogV2UgY291bGQgaW1wcm92ZSB0aGlzIGJ5IGxldHRpbmcgdGhlIHN1YnNjcmli ZXIgb25seQorCQkJICogcmV3cml0ZSB0aGUgZXh0cmEgZGF0YSBpbnN0ZWFkIG9mIGRvaW5nIGZ1 bGx5IHJld3JpdGUgYW5kIHVzZSB0aGUKKwkJCSAqIHVwY29taW5nIHJld3JpdGUgVVBEQVRFcyB0 byByZXdyaXRlIHRoZSByZXN0IGRhdGEuIEJlc2lkZXMsIHdlIG1heQorCQkJICogbm90IG5lZWQg dG8gc2VuZCByZXdyaXRlIGNoYW5nZXMgZm9yIGFsbCB0eXBlIG9mIHJld3JpdGUgZGRsLCBmb3IK KwkJCSAqIGV4YW1wbGUsIGl0IHNlZW1zIGZpbmUgdG8gc2tpcCBzZW5kaW5nIHJld3JpdGUgY2hh bmdlcyBmb3IgQUxURVIKKwkJCSAqIFRBQkxFIFNFVCBMT0dHRUQgYXMgdGhlIGRhdGEgaW4gdGhl IHRhYmxlIGRvZXNuJ3QgYWN0dWFsbHkgYmUKKwkJCSAqIGNoYW5nZWQuCisJCQkgKi8KKwkJCXJl bGF0aW9uID0gUmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGlkKTsKKwkJCUFzc2VydChyZWxhdGlv bik7CisKKwkJCXJlbGVudHJ5ID0gZ2V0X3JlbF9zeW5jX2VudHJ5KGRhdGEsIHJlbGF0aW9uKTsK KworCQkJLyoKKwkJCSAqIFNraXAgc2VuZGluZyB0aGlzIGRkbCBpZiB3ZSBkb24ndCBwdWJsaXNo IGRkbCBtZXNzYWdlIG9yIHRoZSBkZGwKKwkJCSAqIG5lZWQgdG8gYmUgcHVibGlzaGVkIHZpYSBp dHMgcm9vdCByZWxhdGlvbi4KKwkJCSAqLworCQkJaWYgKCFyZWxlbnRyeS0+cHViYWN0aW9ucy5w dWJkZGwgfHwKKwkJCQlyZWxlbnRyeS0+cHVibGlzaF9hc19yZWxpZCAhPSByZWxpZCkKKwkJCXsK KwkJCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCWJy ZWFrOworCQljYXNlIERDVF9TaW1wbGVDbWQ6CisJCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRS ZWxhdGlvbihyZWxpZCk7CisKKwkJCWlmIChyZWxhdGlvbiA9PSBOVUxMKQorCQkJCWJyZWFrOwor CisJCQlyZWxlbnRyeSA9IGdldF9yZWxfc3luY19lbnRyeShkYXRhLCByZWxhdGlvbik7CisKKwkJ CWlmICghcmVsZW50cnktPnB1YmFjdGlvbnMucHViZGRsKQorCQkJeworCQkJCVJlbGF0aW9uQ2xv c2UocmVsYXRpb24pOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJYnJlYWs7CisJCWNhc2UgRENU X09iamVjdERyb3A6CisJCQkvKiBkbyBub3RoaW5nICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoK KwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCB0eXBlICVkIiwgY21kdHlwZSk7CisJCQlicmVh azsKKwl9CisKKwkvKiBTZW5kIEJFR0lOIGlmIHdlIGhhdmVuJ3QgeWV0ICovCisJaWYgKHR4bmRh dGEgJiYgIXR4bmRhdGEtPnNlbnRfYmVnaW5fdHhuKQorCQlwZ291dHB1dF9zZW5kX2JlZ2luKGN0 eCwgdHhuKTsKKworCU91dHB1dFBsdWdpblByZXBhcmVXcml0ZShjdHgsIHRydWUpOworCWxvZ2lj YWxyZXBfd3JpdGVfZGRsbWVzc2FnZShjdHgtPm91dCwKKwkJCQkJCQkJeGlkLAorCQkJCQkJCQlt ZXNzYWdlX2xzbiwKKwkJCQkJCQkJcHJlZml4LAorCQkJCQkJCQlzeiwKKwkJCQkJCQkJbWVzc2Fn ZSk7CisJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKKworCWlmIChyZWxhdGlvbikKKwkJ UmVsYXRpb25DbG9zZShyZWxhdGlvbik7Cit9CisKIC8qCiAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUg ZGF0YSBpcyBhc3NvY2lhdGVkIHdpdGggYW4gb3JpZ2luIGFuZCB0aGUgdXNlciBoYXMKICAqIHJl cXVlc3RlZCB0aGUgY2hhbmdlcyB0aGF0IGRvbid0IGhhdmUgYW4gb3JpZ2luLCBmYWxzZSBvdGhl cndpc2UuCkBAIC0xOTk3LDcgKzIxNzEsOCBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXRE YXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJZW50cnktPnNjaGVtYV9zZW50ID0gZmFs c2U7CiAJCWVudHJ5LT5zdHJlYW1lZF90eG5zID0gTklMOwogCQllbnRyeS0+cHViYWN0aW9ucy5w dWJpbnNlcnQgPSBlbnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgPQotCQkJZW50cnktPnB1YmFj dGlvbnMucHViZGVsZXRlID0gZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPSBmYWxzZTsK KwkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnRy dW5jYXRlID0KKwkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCA9IGZhbHNlOwogCQllbnRyeS0+ bmV3X3Nsb3QgPSBOVUxMOwogCQllbnRyeS0+b2xkX3Nsb3QgPSBOVUxMOwogCQltZW1zZXQoZW50 cnktPmV4cHJzdGF0ZSwgMCwgc2l6ZW9mKGVudHJ5LT5leHByc3RhdGUpKTsKQEAgLTIwNTUsNiAr MjIzMCw3IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9u IHJlbGF0aW9uKQogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgPSBmYWxzZTsKIAkJZW50 cnktPnB1YmFjdGlvbnMucHViZGVsZXRlID0gZmFsc2U7CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1 YnRydW5jYXRlID0gZmFsc2U7CisJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCA9IGZhbHNlOwog CiAJCS8qCiAJCSAqIFR1cGxlIHNsb3RzIGNsZWFudXBzLiAoV2lsbCBiZSByZWJ1aWx0IGxhdGVy IGlmIG5lZWRlZCkuCkBAIC0yMTY4LDYgKzIzNDQsNyBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdP dXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJCQllbnRyeS0+cHViYWN0aW9u cy5wdWJ1cGRhdGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1YnVwZGF0ZTsKIAkJCQllbnRyeS0+cHVi YWN0aW9ucy5wdWJkZWxldGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1YmRlbGV0ZTsKIAkJCQllbnRy eS0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHVidHJ1bmNhdGU7 CisJCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGRsIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJkZGw7 CiAKIAkJCQkvKgogCQkJCSAqIFdlIHdhbnQgdG8gcHVibGlzaCB0aGUgY2hhbmdlcyBhcyB0aGUg dG9wLW1vc3QgYW5jZXN0b3IKQEAgLTIzNTMsNiArMjUzMCw3IEBAIHJlbF9zeW5jX2NhY2hlX3B1 YmxpY2F0aW9uX2NiKERhdHVtIGFyZywgaW50IGNhY2hlaWQsIHVpbnQzMiBoYXNodmFsdWUpCiAJ ewogCQllbnRyeS0+cmVwbGljYXRlX3ZhbGlkID0gZmFsc2U7CiAJfQorCiB9CiAKIC8qIFNlbmQg UmVwbGljYXRpb24gb3JpZ2luICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9jYWNo ZS9yZWxjYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwppbmRleCAw MGRjMGYyLi5mMWI0ZDA5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxj YWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKQEAgLTU2ODMs NiArNTY4Myw3IEBAIFJlbGF0aW9uQnVpbGRQdWJsaWNhdGlvbkRlc2MoUmVsYXRpb24gcmVsYXRp b24sIFB1YmxpY2F0aW9uRGVzYyAqcHViZGVzYykKIAkJcHViZGVzYy0+cHViYWN0aW9ucy5wdWJ1 cGRhdGUgfD0gcHViZm9ybS0+cHVidXBkYXRlOwogCQlwdWJkZXNjLT5wdWJhY3Rpb25zLnB1YmRl bGV0ZSB8PSBwdWJmb3JtLT5wdWJkZWxldGU7CiAJCXB1YmRlc2MtPnB1YmFjdGlvbnMucHVidHJ1 bmNhdGUgfD0gcHViZm9ybS0+cHVidHJ1bmNhdGU7CisJCXB1YmRlc2MtPnB1YmFjdGlvbnMucHVi ZGRsIHw9IHB1YmZvcm0tPnB1YmRkbDsKIAogCQkvKgogCQkgKiBDaGVjayBpZiBhbGwgY29sdW1u cyByZWZlcmVuY2VkIGluIHRoZSBmaWx0ZXIgZXhwcmVzc2lvbiBhcmUgcGFydApkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMK aW5kZXggZGE2NjA1MS4uZTU0OGUzYyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1 bXAuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCkBAIC0zODk2LDYgKzM4OTYsNyBA QCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMpCiAJ aW50CQkJaV9wdWJ1cGRhdGU7CiAJaW50CQkJaV9wdWJkZWxldGU7CiAJaW50CQkJaV9wdWJ0cnVu Y2F0ZTsKKwlpbnQJCQlpX3B1YmRkbDsKIAlpbnQJCQlpX3B1YnZpYXJvb3Q7CiAJaW50CQkJaSwK IAkJCQludHVwczsKQEAgLTM5MTEsMjMgKzM5MTIsMjkgQEAgZ2V0UHVibGljYXRpb25zKEFyY2hp dmUgKmZvdXQsIGludCAqbnVtUHVibGljYXRpb25zKQogCXJlc2V0UFFFeHBCdWZmZXIocXVlcnkp OwogCiAJLyogR2V0IHRoZSBwdWJsaWNhdGlvbnMuICovCi0JaWYgKGZvdXQtPnJlbW90ZVZlcnNp b24gPj0gMTMwMDAwKQorCWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDE1MDAwMCkKIAkJYXBw ZW5kUFFFeHBCdWZmZXIocXVlcnksCiAJCQkJCQkgICJTRUxFQ1QgcC50YWJsZW9pZCwgcC5vaWQs IHAucHVibmFtZSwgIgogCQkJCQkJICAicC5wdWJvd25lciwgIgotCQkJCQkJICAicC5wdWJhbGx0 YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNh dGUsIHAucHVidmlhcm9vdCAiCisJCQkJCQkgICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQs IHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwgcC5wdWJkZGwsIHAucHVi dmlhcm9vdCAiCisJCQkJCQkgICJGUk9NIHBnX3B1YmxpY2F0aW9uIHAiKTsKKwllbHNlIGlmIChm b3V0LT5yZW1vdGVWZXJzaW9uID49IDEzMDAwMCkKKwkJYXBwZW5kUFFFeHBCdWZmZXIocXVlcnks CisJCQkJCQkgICJTRUxFQ1QgcC50YWJsZW9pZCwgcC5vaWQsIHAucHVibmFtZSwgIgorCQkJCQkJ ICAicC5wdWJvd25lciwgIgorCQkJCQkJICAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBw LnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIGZhbHNlIGFzIHAucHViZGRs LCBwLnB1YnZpYXJvb3QgIgogCQkJCQkJICAiRlJPTSBwZ19wdWJsaWNhdGlvbiBwIik7CiAJZWxz ZSBpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxMTAwMDApCiAJCWFwcGVuZFBRRXhwQnVmZmVy KHF1ZXJ5LAogCQkJCQkJICAiU0VMRUNUIHAudGFibGVvaWQsIHAub2lkLCBwLnB1Ym5hbWUsICIK IAkJCQkJCSAgInAucHVib3duZXIsICIKLQkJCQkJCSAgInAucHViYWxsdGFibGVzLCBwLnB1Ymlu c2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBwLnB1YnRydW5jYXRlLCBmYWxzZSBBUyBw dWJ2aWFyb290ICIKKwkJCQkJCSAgInAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1 cGRhdGUsIHAucHViZGVsZXRlLCBwLnB1YnRydW5jYXRlLCBmYWxzZSBhcyBwLnB1YmRkbCwgZmFs c2UgQVMgcHVidmlhcm9vdCAiCiAJCQkJCQkgICJGUk9NIHBnX3B1YmxpY2F0aW9uIHAiKTsKIAll bHNlCiAJCWFwcGVuZFBRRXhwQnVmZmVyKHF1ZXJ5LAogCQkJCQkJICAiU0VMRUNUIHAudGFibGVv aWQsIHAub2lkLCBwLnB1Ym5hbWUsICIKIAkJCQkJCSAgInAucHVib3duZXIsICIKLQkJCQkJCSAg InAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBm YWxzZSBBUyBwdWJ0cnVuY2F0ZSwgZmFsc2UgQVMgcHVidmlhcm9vdCAiCisJCQkJCQkgICJwLnB1 YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgZmFsc2Ug QVMgcHVidHJ1bmNhdGUsIGZhbHNlIGFzIHAucHViZGRsLCBmYWxzZSBBUyBwdWJ2aWFyb290ICIK IAkJCQkJCSAgIkZST00gcGdfcHVibGljYXRpb24gcCIpOwogCiAJcmVzID0gRXhlY3V0ZVNxbFF1 ZXJ5KGZvdXQsIHF1ZXJ5LT5kYXRhLCBQR1JFU19UVVBMRVNfT0spOwpAQCAtMzk0Myw2ICszOTUw LDcgQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZvdXQsIGludCAqbnVtUHVibGljYXRpb25z KQogCWlfcHVidXBkYXRlID0gUFFmbnVtYmVyKHJlcywgInB1YnVwZGF0ZSIpOwogCWlfcHViZGVs ZXRlID0gUFFmbnVtYmVyKHJlcywgInB1YmRlbGV0ZSIpOwogCWlfcHVidHJ1bmNhdGUgPSBQUWZu dW1iZXIocmVzLCAicHVidHJ1bmNhdGUiKTsKKwlpX3B1YmRkbCA9IFBRZm51bWJlcihyZXMsICJw dWJkZGwiKTsKIAlpX3B1YnZpYXJvb3QgPSBQUWZudW1iZXIocmVzLCAicHVidmlhcm9vdCIpOwog CiAJcHViaW5mbyA9IHBnX21hbGxvYyhudHVwcyAqIHNpemVvZihQdWJsaWNhdGlvbkluZm8pKTsK QEAgLTM5NjYsNiArMzk3NCw4IEBAIGdldFB1YmxpY2F0aW9ucyhBcmNoaXZlICpmb3V0LCBpbnQg Km51bVB1YmxpY2F0aW9ucykKIAkJCShzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHViZGVs ZXRlKSwgInQiKSA9PSAwKTsKIAkJcHViaW5mb1tpXS5wdWJ0cnVuY2F0ZSA9CiAJCQkoc3RyY21w KFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1YnRydW5jYXRlKSwgInQiKSA9PSAwKTsKKwkJcHViaW5m b1tpXS5wdWJkZGwgPQorCQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJkZGwpLCAi dCIpID09IDApOwogCQlwdWJpbmZvW2ldLnB1YnZpYXJvb3QgPQogCQkJKHN0cmNtcChQUWdldHZh bHVlKHJlcywgaSwgaV9wdWJ2aWFyb290KSwgInQiKSA9PSAwKTsKIApAQCAtNDA0NSw2ICs0MDU1 LDE1IEBAIGR1bXBQdWJsaWNhdGlvbihBcmNoaXZlICpmb3V0LCBjb25zdCBQdWJsaWNhdGlvbklu Zm8gKnB1YmluZm8pCiAJCWZpcnN0ID0gZmFsc2U7CiAJfQogCisJaWYgKHB1YmluZm8tPnB1YmRk bCkKKwl7CisJCWlmICghZmlyc3QpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiwg Iik7CisKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICJkZGwiKTsKKwkJZmlyc3QgPSBm YWxzZTsKKwl9CisKIAlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiciKTsKIAogCWlmIChw dWJpbmZvLT5wdWJ2aWFyb290KQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAu aCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKaW5kZXggNjllZTkzOS4uNmM1NWRlMyAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaAorKysgYi9zcmMvYmluL3BnX2R1bXAv cGdfZHVtcC5oCkBAIC02MjAsNiArNjIwLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX1B1YmxpY2F0aW9u SW5mbwogCWJvb2wJCXB1YmRlbGV0ZTsKIAlib29sCQlwdWJ0cnVuY2F0ZTsKIAlib29sCQlwdWJ2 aWFyb290OworCWJvb2wJCXB1YmRkbDsKIH0gUHVibGljYXRpb25JbmZvOwogCiAvKgpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ193YWxkdW1wL2xvZ2ljYWxkZGxtc2dkZXNjLmMgYi9zcmMvYmluL3Bn X3dhbGR1bXAvbG9naWNhbGRkbG1zZ2Rlc2MuYwpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAw MDAwMDAwLi45YjYyN2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ193YWxkdW1wL2xv Z2ljYWxkZGxtc2dkZXNjLmMKQEAgLTAsMCArMSBAQAorLi4vLi4vLi4vc3JjL2JhY2tlbmQvYWNj ZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm aWxlCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYyBiL3NyYy9iaW4v cGdfd2FsZHVtcC9ybWdyZGVzYy5jCmluZGV4IDZiOGMxN2IuLjc5MmY0MzggMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jCisrKyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9y bWdyZGVzYy5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvc2VxdWVuY2Uu aCIKICNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRp b24vbWVzc2FnZS5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNs dWRlICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIKICNpbmNsdWRlICJybWdyZGVzYy5oIgogI2luY2x1 ZGUgInN0b3JhZ2Uvc3RhbmRieWRlZnMuaCIKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9kZXNj cmliZS5jIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKaW5kZXggMzI3YTY5NC4uNzdjNDcxMSAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2Rl c2NyaWJlLmMKQEAgLTYxNTksNyArNjE1OSw3IEBAIGxpc3RQdWJsaWNhdGlvbnMoY29uc3QgY2hh ciAqcGF0dGVybikKIAlQUUV4cEJ1ZmZlckRhdGEgYnVmOwogCVBHcmVzdWx0ICAgKnJlczsKIAlw cmludFF1ZXJ5T3B0IG15b3B0ID0gcHNldC5wb3B0OwotCXN0YXRpYyBjb25zdCBib29sIHRyYW5z bGF0ZV9jb2x1bW5zW10gPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlfTsKKwlzdGF0aWMgY29uc3QgYm9vbCB0cmFuc2xhdGVfY29sdW1uc1td ID0ge2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz ZSwgZmFsc2V9OwogCiAJaWYgKHBzZXQuc3ZlcnNpb24gPCAxMDAwMDApCiAJewpAQCAtNjE5NCw2 ICs2MTk0LDEwIEBAIGxpc3RQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJYXBw ZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKIAkJCQkJCSAgIixcbiAgcHVidmlhcm9vdCBBUyBcIiVzXCIi LAogCQkJCQkJICBnZXR0ZXh0X25vb3AoIlZpYSByb290IikpOworCWlmIChwc2V0LnN2ZXJzaW9u ID49IDE0MDAwMCkKKwkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJCSAgIixcbiAgcHVi ZGRsIEFTIFwiJXNcIiIsCisJCQkJCQkgIGdldHRleHRfbm9vcCgiRERMcyIpKTsKIAogCWFwcGVu ZFBRRXhwQnVmZmVyU3RyKCZidWYsCiAJCQkJCQkgIlxuRlJPTSBwZ19jYXRhbG9nLnBnX3B1Ymxp Y2F0aW9uXG4iKTsKQEAgLTYyODQsNiArNjI4OCw3IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNv bnN0IGNoYXIgKnBhdHRlcm4pCiAJUEdyZXN1bHQgICAqcmVzOwogCWJvb2wJCWhhc19wdWJ0cnVu Y2F0ZTsKIAlib29sCQloYXNfcHVidmlhcm9vdDsKKwlib29sCQloYXNfcHViZGRsOwogCiAJUFFF eHBCdWZmZXJEYXRhIHRpdGxlOwogCXByaW50VGFibGVDb250ZW50IGNvbnQ7CkBAIC02MzAwLDYg KzYzMDUsNyBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCiAJ aGFzX3B1YnRydW5jYXRlID0gKHBzZXQuc3ZlcnNpb24gPj0gMTEwMDAwKTsKIAloYXNfcHVidmlh cm9vdCA9IChwc2V0LnN2ZXJzaW9uID49IDEzMDAwMCk7CisJaGFzX3B1YmRkbCA9ICAocHNldC5z dmVyc2lvbiA+PSAxNTAwMDApOwogCiAJaW5pdFBRRXhwQnVmZmVyKCZidWYpOwogCkBAIC02MzEz LDYgKzYzMTksOSBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQog CWlmIChoYXNfcHVidmlhcm9vdCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKIAkJCQkJ CQkgIiwgcHVidmlhcm9vdCIpOworCWlmIChoYXNfcHViZGRsKQorCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cigmYnVmLAorCQkJCQkJCSAiLCBwdWJkZGwiKTsKIAlhcHBlbmRQUUV4cEJ1ZmZlclN0cigm YnVmLAogCQkJCQkJICJcbkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvblxuIik7CiAKQEAg LTYzNjQsNiArNjM3Myw4IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRl cm4pCiAJCQluY29scysrOwogCQlpZiAoaGFzX3B1YnZpYXJvb3QpCiAJCQluY29scysrOworCQlp ZiAoaGFzX3B1YmRkbCkKKwkJCW5jb2xzKys7CiAKIAkJaW5pdFBRRXhwQnVmZmVyKCZ0aXRsZSk7 CiAJCXByaW50ZlBRRXhwQnVmZmVyKCZ0aXRsZSwgXygiUHVibGljYXRpb24gJXMiKSwgcHVibmFt ZSk7CkBAIC02Mzc4LDYgKzYzODksOCBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFy ICpwYXR0ZXJuKQogCQkJcHJpbnRUYWJsZUFkZEhlYWRlcigmY29udCwgZ2V0dGV4dF9ub29wKCJU cnVuY2F0ZXMiKSwgdHJ1ZSwgYWxpZ24pOwogCQlpZiAoaGFzX3B1YnZpYXJvb3QpCiAJCQlwcmlu dFRhYmxlQWRkSGVhZGVyKCZjb250LCBnZXR0ZXh0X25vb3AoIlZpYSByb290IiksIHRydWUsIGFs aWduKTsKKwkJaWYgKGhhc19wdWJkZGwpCisJCQlwcmludFRhYmxlQWRkSGVhZGVyKCZjb250LCBn ZXR0ZXh0X25vb3AoIkRETHMiKSwgdHJ1ZSwgYWxpZ24pOwogCiAJCXByaW50VGFibGVBZGRDZWxs KCZjb250LCBQUWdldHZhbHVlKHJlcywgaSwgMiksIGZhbHNlLCBmYWxzZSk7CiAJCXByaW50VGFi bGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJlcywgaSwgMyksIGZhbHNlLCBmYWxzZSk7CkBA IC02Mzg4LDYgKzY0MDEsOCBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0 ZXJuKQogCQkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCA3KSwg ZmFsc2UsIGZhbHNlKTsKIAkJaWYgKGhhc19wdWJ2aWFyb290KQogCQkJcHJpbnRUYWJsZUFkZENl bGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCA4KSwgZmFsc2UsIGZhbHNlKTsKKwkJaWYgKGhh c19wdWJkZGwpCisJCQlwcmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGks IDkpLCBmYWxzZSwgZmFsc2UpOwogCiAJCWlmICghcHViYWxsdGFibGVzKQogCQl7CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9y bWdybGlzdC5oCmluZGV4IDlhNzQ3MjEuLjlkZTNiOGYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2FjY2Vzcy9ybWdybGlzdC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5oCkBA IC00NywzICs0Nyw0IEBAIFBHX1JNR1IoUk1fQ09NTUlUX1RTX0lELCAiQ29tbWl0VHMiLCBjb21t aXRfdHNfcmVkbywgY29tbWl0X3RzX2Rlc2MsIGNvbW1pdF90c19pCiBQR19STUdSKFJNX1JFUExP UklHSU5fSUQsICJSZXBsaWNhdGlvbk9yaWdpbiIsIHJlcGxvcmlnaW5fcmVkbywgcmVwbG9yaWdp bl9kZXNjLCByZXBsb3JpZ2luX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQogUEdf Uk1HUihSTV9HRU5FUklDX0lELCAiR2VuZXJpYyIsIGdlbmVyaWNfcmVkbywgZ2VuZXJpY19kZXNj LCBnZW5lcmljX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBnZW5lcmljX21hc2ssIE5VTEwpCiBQR19S TUdSKFJNX0xPR0lDQUxNU0dfSUQsICJMb2dpY2FsTWVzc2FnZSIsIGxvZ2ljYWxtc2dfcmVkbywg bG9naWNhbG1zZ19kZXNjLCBsb2dpY2FsbXNnX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBs b2dpY2FsbXNnX2RlY29kZSkKK1BHX1JNR1IoUk1fTE9HSUNBTERETE1TR19JRCwgIkxvZ2ljYWxE RExNZXNzYWdlIiwgbG9naWNhbGRkbG1zZ19yZWRvLCBsb2dpY2FsZGRsbXNnX2Rlc2MsIGxvZ2lj YWxkZGxtc2dfaWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEwsIGxvZ2ljYWxkZGxtc2dfZGVjb2Rl KQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggM2U3ZjM2NC4uYWIyOTBkZCAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3Byb2MuZGF0CkBAIC0xMTkwMCw0ICsxMTkwMCwxMyBAQAogeyBvaWQgPT4gJzQ2NDMn LCBkZXNjciA9PiAnZXhwYW5kIGpzb24gZm9ybWF0IERETCB0byBhIHBsYWluIERETCBjb21tYW5k JywKICAgcHJvbmFtZSA9PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnLCBwcm9yZXR0eXBl ID0+ICd0ZXh0JywKICAgcHJvYXJndHlwZXMgPT4gJ3RleHQnLCBwcm9zcmMgPT4gJ2RkbF9kZXBh cnNlX2V4cGFuZF9jb21tYW5kJyB9LAoreyBvaWQgPT4gJzQ2NDQnLCBkZXNjciA9PiAndHJpZ2dl ciBmb3IgZGRsIGNvbW1hbmQgZGVwYXJzZScsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9uX2Rl cGFyc2VfZGRsX2NvbW1hbmRfZW5kJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcicsCisg IHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2Nv bW1hbmRfZW5kJyB9LAoreyBvaWQgPT4gJzQ2NDUnLCBkZXNjciA9PiAndHJpZ2dlciBmb3IgZGRs IGNvbW1hbmQgZGVwYXJzZSBzdGFydCcsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFy c2VfZGRsX2NvbW1hbmRfc3RhcnQnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2VyJywKKyAg cHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29t bWFuZF9zdGFydCcgfSwKK3sgb2lkID0+ICc0NjQ2JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRk bCBjb21tYW5kIGRlcGFyc2UgdGFibGUgcmV3cml0ZScsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0 aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZScsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXIn LAorICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3Rh YmxlX3Jld3JpdGUnIH0sCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1 YmxpY2F0aW9uLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKaW5kZXgg YzI5ODMyNy4uYWEyYjBjNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJs aWNhdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaApAQCAt NTQsNiArNTQsOSBAQCBDQVRBTE9HKHBnX3B1YmxpY2F0aW9uLDYxMDQsUHVibGljYXRpb25SZWxh dGlvbklkKQogCiAJLyogdHJ1ZSBpZiBwYXJ0aXRpb24gY2hhbmdlcyBhcmUgcHVibGlzaGVkIHVz aW5nIHJvb3Qgc2NoZW1hICovCiAJYm9vbAkJcHVidmlhcm9vdDsKKworCS8qIHRydWUgaWYgdGFi bGUgY3JlYXRpb25zIGFyZSBwdWJsaXNoZWQgKi8KKwlib29sCQlwdWJkZGw7CiB9IEZvcm1EYXRh X3BnX3B1YmxpY2F0aW9uOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC03Miw2ICs3NSw3IEBA IHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uQWN0aW9ucwogCWJvb2wJCXB1YnVwZGF0ZTsKIAli b29sCQlwdWJkZWxldGU7CiAJYm9vbAkJcHVidHJ1bmNhdGU7CisJYm9vbAkJcHViZGRsOwogfSBQ dWJsaWNhdGlvbkFjdGlvbnM7CiAKIHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uRGVzYwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIGIvc3JjL2luY2x1 ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCmluZGV4IDEwMDkxYzMuLmZkMmVlN2YgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAorKysgYi9zcmMvaW5j bHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKQEAgLTcxLDcgKzcxLDggQEAgZXh0ZXJuIHZv aWQgRXZlbnRUcmlnZ2VyQ29sbGVjdFNpbXBsZUNvbW1hbmQoT2JqZWN0QWRkcmVzcyBhZGRyZXNz LAogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVN0YXJ0KE5vZGUgKnBhcnNldHJl ZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclRhYmxlUmVsaWQoT2lkIG9iamVjdElk KTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKE5vZGUg KnN1YmNtZCwKLQkJCQkJCQkJCQkJCU9iamVjdEFkZHJlc3MgYWRkcmVzcyk7CisJCQkJCQkJCQkJ CQlPYmplY3RBZGRyZXNzIGFkZHJlc3MsCisJCQkJCQkJCQkJCQlib29sIHJld3JpdGUpOwogZXh0 ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZUVuZCh2b2lkKTsKIAogZXh0ZXJuIHZvaWQg RXZlbnRUcmlnZ2VyQ29sbGVjdEdyYW50KEludGVybmFsR3JhbnQgKmlzdG10KTsKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCBiL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL2RkbG1lc3NhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li5hOGRjYTg2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRs bWVzc2FnZS5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogZGRsbWVz c2FnZS5oCisgKgkgICBFeHBvcnRzIGZyb20gcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdl LmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisgKgorICogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5oCisg Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR19MT0dJQ0FMX0RETF9NRVNTQUdFX0gK KyNkZWZpbmUgUEdfTE9HSUNBTF9ERExfTUVTU0FHRV9ICisKKyNpbmNsdWRlICJhY2Nlc3MveGxv Zy5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9n cmVhZGVyLmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZXMuaCIKKworCisvKgorICogU3VwcG9ydCBm b3Iga2VlcGluZyB0cmFjayBvZiBkZXBhcnNlZCBjb21tYW5kcy4KKyAqLwordHlwZWRlZiBlbnVt IERlcGFyc2VkQ29tbWFuZFR5cGUKK3sKKwlEQ1RfU2ltcGxlQ21kLAorCURDVF9UYWJsZURyb3BT dGFydCwKKwlEQ1RfVGFibGVEcm9wRW5kLAorCURDVF9UYWJsZUFsdGVyLAorCURDVF9PYmplY3RD cmVhdGUsCisJRENUX09iamVjdERyb3AKK30gRGVwYXJzZWRDb21tYW5kVHlwZTsKKworLyoKKyAq IEdlbmVyaWMgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZSB3YWwgcmVjb3JkLgorICovCit0 eXBlZGVmIHN0cnVjdCB4bF9sb2dpY2FsX2RkbF9tZXNzYWdlCit7CisJT2lkCQkJCQkJZGJJZDsJ CQkvKiBkYXRhYmFzZSBPaWQgZW1pdHRlZCBmcm9tICovCisJU2l6ZQkJCQkJcHJlZml4X3NpemU7 CS8qIGxlbmd0aCBvZiBwcmVmaXggKi8KKwlPaWQJCQkJCQlyZWxpZDsJCQkvKiBpZCBvZiB0aGUg dGFibGUgKi8KKwlEZXBhcnNlZENvbW1hbmRUeXBlCQljbWR0eXBlOwkJLyogdHlwZSBvZiBzcWwg Y29tbWFuZCAqLworCVNpemUJCQkJCW1lc3NhZ2Vfc2l6ZTsJICAvKiBzaXplIG9mIHRoZSBtZXNz YWdlICovCisKKwkvKgorCSAqIHBheWxvYWQsIGluY2x1ZGluZyBudWxsLXRlcm1pbmF0ZWQgcHJl Zml4IG9mIGxlbmd0aCBwcmVmaXhfc2l6ZQorCSAqLworCWNoYXIJCW1lc3NhZ2VbRkxFWElCTEVf QVJSQVlfTUVNQkVSXTsKK30geGxfbG9naWNhbF9kZGxfbWVzc2FnZTsKKworI2RlZmluZSBTaXpl T2ZMb2dpY2FsRERMTWVzc2FnZQkob2Zmc2V0b2YoeGxfbG9naWNhbF9kZGxfbWVzc2FnZSwgbWVz c2FnZSkpCisKK2V4dGVybiBYTG9nUmVjUHRyIExvZ0xvZ2ljYWxERExNZXNzYWdlKGNvbnN0IGNo YXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJ CQkJCQkgICBjb25zdCBjaGFyICpkZGxfbWVzc2FnZSwgc2l6ZV90IHNpemUpOworCisvKiBSTUdS IEFQSSovCisjZGVmaW5lIFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRQkweDAwCit2b2lkCQlsb2dp Y2FsZGRsbXNnX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOwordm9pZAkJbG9naWNhbGRk bG1zZ19kZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7Citjb25z dCBjaGFyICpsb2dpY2FsZGRsbXNnX2lkZW50aWZ5KHVpbnQ4IGluZm8pOworCisjZW5kaWYKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oIGIvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vZGVjb2RlLmgKaW5kZXggNzQxYmY2NS4uNDI3YTdiOSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vZGVjb2RlLmgKQEAgLTI3LDYgKzI3LDcgQEAgZXh0ZXJuIHZvaWQgaGVhcDJfZGVjb2Rl KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIGV4 dGVybiB2b2lkIHhhY3RfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1Jl Y29yZEJ1ZmZlciAqYnVmKTsKIGV4dGVybiB2b2lkIHN0YW5kYnlfZGVjb2RlKExvZ2ljYWxEZWNv ZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIGV4dGVybiB2b2lkIGxv Z2ljYWxtc2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1 ZmZlciAqYnVmKTsKK2V4dGVybiB2b2lkIGxvZ2ljYWxkZGxtc2dfZGVjb2RlKExvZ2ljYWxEZWNv ZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIAogZXh0ZXJuIHZvaWQg TG9naWNhbERlY29kaW5nUHJvY2Vzc1JlY29yZChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgs CiAJCQkJCQkJCQkJIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vbG9naWNhbHByb3RvLmgKaW5kZXggYTc3MWFiOC4uMmFiY2NiOCAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vbG9naWNhbHByb3RvLmgKQEAgLTYxLDYgKzYxLDcgQEAgdHlwZWRlZiBlbnVtIExv Z2ljYWxSZXBNc2dUeXBlCiAJTE9HSUNBTF9SRVBfTVNHX1JFTEFUSU9OID0gJ1InLAogCUxPR0lD QUxfUkVQX01TR19UWVBFID0gJ1knLAogCUxPR0lDQUxfUkVQX01TR19NRVNTQUdFID0gJ00nLAor CUxPR0lDQUxfUkVQX01TR19ERExNRVNTQUdFID0gJ0wnLAogCUxPR0lDQUxfUkVQX01TR19CRUdJ Tl9QUkVQQVJFID0gJ2InLAogCUxPR0lDQUxfUkVQX01TR19QUkVQQVJFID0gJ1AnLAogCUxPR0lD QUxfUkVQX01TR19DT01NSVRfUFJFUEFSRUQgPSAnSycsCkBAIC0yMjksNyArMjMwLDExIEBAIGV4 dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfdHJ1bmNhdGUoU3RyaW5nSW5mbyBvdXQsIFRyYW5z YWN0aW9uSWQgeGlkLAogZXh0ZXJuIExpc3QgKmxvZ2ljYWxyZXBfcmVhZF90cnVuY2F0ZShTdHJp bmdJbmZvIGluLAogCQkJCQkJCQkJICBib29sICpjYXNjYWRlLCBib29sICpyZXN0YXJ0X3NlcXMp OwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9tZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBU cmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCi0JCQkJCQkJCQkgYm9vbCB0cmFuc2Fj dGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2Up OworCQkJCQkJCQkJIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJ CQkJCQkJIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworZXh0ZXJuIHZvaWQgbG9naWNh bHJlcF93cml0ZV9kZGxtZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwg WExvZ1JlY1B0ciBsc24sCisJCQkJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LCBj b25zdCBjaGFyICptZXNzYWdlKTsKK2V4dGVybiBjaGFyICpsb2dpY2FscmVwX3JlYWRfZGRsbWVz c2FnZShTdHJpbmdJbmZvIGluLCBYTG9nUmVjUHRyICpsc24sIGNvbnN0IGNoYXIgKipwcmVmaXgs IFNpemUgKnN6KTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfcmVsKFN0cmluZ0luZm8g b3V0LCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJIFJlbGF0aW9uIHJlbCwgQml0bWFwc2V0 ICpjb2x1bW5zKTsKIGV4dGVybiBMb2dpY2FsUmVwUmVsYXRpb24gKmxvZ2ljYWxyZXBfcmVhZF9y ZWwoU3RyaW5nSW5mbyBpbik7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9v dXRwdXRfcGx1Z2luLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmgK aW5kZXggYjdkMjhkNy4uNzYzZTQzZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vb3V0cHV0X3BsdWdpbi5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9w bHVnaW4uaApAQCAtOTEsNiArOTEsMTggQEAgdHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29kZU1l c3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJCQkJ Y29uc3QgY2hhciAqbWVzc2FnZSk7CiAKIC8qCisgKiBDYWxsZWQgZm9yIHRoZSBsb2dpY2FsIGRl Y29kaW5nIERETCBtZXNzYWdlcy4KKyAqLwordHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29kZURE TE1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkJ CQkJICAgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCSAgIFhMb2dSZWNQdHIgbWVz c2FnZV9sc24sCisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJCSAg IE9pZCByZWxpZCwKKwkJCQkJCQkJCQkgICBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJ CQkJCQkJCQkJICAgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAq bWVzc2FnZSk7CisKKy8qCiAgKiBGaWx0ZXIgY2hhbmdlcyBieSBvcmlnaW4uCiAgKi8KIHR5cGVk ZWYgYm9vbCAoKkxvZ2ljYWxEZWNvZGVGaWx0ZXJCeU9yaWdpbkNCKSAoc3RydWN0IExvZ2ljYWxE ZWNvZGluZ0NvbnRleHQgKmN0eCwKQEAgLTIwMiw2ICsyMTQsMTkgQEAgdHlwZWRlZiB2b2lkICgq TG9naWNhbERlY29kZVN0cmVhbU1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250 ZXh0ICpjdHgKIAkJCQkJCQkJCQkJICBjb25zdCBjaGFyICptZXNzYWdlKTsKIAogLyoKKyAqIENh bGxiYWNrIGZvciBzdHJlYW1pbmcgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZXMgZnJvbSBp bi1wcm9ncmVzcworICogdHJhbnNhY3Rpb25zLgorICovCit0eXBlZGVmIHZvaWQgKCpMb2dpY2Fs RGVjb2RlU3RyZWFtRERMTWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQg KmN0eCwKKwkJCQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJCQkg WExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICpwcmVmaXgs CisJCQkJCQkJCQkJCQkgT2lkIHJlbGlkLAorCQkJCQkJCQkJCQkJIERlcGFyc2VkQ29tbWFuZFR5 cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJCQkJ CSBjb25zdCBjaGFyICptZXNzYWdlKTsKKworLyoKICAqIENhbGxiYWNrIGZvciBzdHJlYW1pbmcg dHJ1bmNhdGVzIGZyb20gaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zLgogICovCiB0eXBlZGVmIHZv aWQgKCpMb2dpY2FsRGVjb2RlU3RyZWFtVHJ1bmNhdGVDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2Rp bmdDb250ZXh0ICpjdHgsCkBAIC0yMjEsNiArMjQ2LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgT3V0cHV0 UGx1Z2luQ2FsbGJhY2tzCiAJTG9naWNhbERlY29kZVRydW5jYXRlQ0IgdHJ1bmNhdGVfY2I7CiAJ TG9naWNhbERlY29kZUNvbW1pdENCIGNvbW1pdF9jYjsKIAlMb2dpY2FsRGVjb2RlTWVzc2FnZUNC IG1lc3NhZ2VfY2I7CisJTG9naWNhbERlY29kZURETE1lc3NhZ2VDQiBkZGxtZXNzYWdlX2NiOwog CUxvZ2ljYWxEZWNvZGVGaWx0ZXJCeU9yaWdpbkNCIGZpbHRlcl9ieV9vcmlnaW5fY2I7CiAJTG9n aWNhbERlY29kZVNodXRkb3duQ0Igc2h1dGRvd25fY2I7CiAKQEAgLTIzOSw2ICsyNjUsNyBAQCB0 eXBlZGVmIHN0cnVjdCBPdXRwdXRQbHVnaW5DYWxsYmFja3MKIAlMb2dpY2FsRGVjb2RlU3RyZWFt Q29tbWl0Q0Igc3RyZWFtX2NvbW1pdF9jYjsKIAlMb2dpY2FsRGVjb2RlU3RyZWFtQ2hhbmdlQ0Ig c3RyZWFtX2NoYW5nZV9jYjsKIAlMb2dpY2FsRGVjb2RlU3RyZWFtTWVzc2FnZUNCIHN0cmVhbV9t ZXNzYWdlX2NiOworCUxvZ2ljYWxEZWNvZGVTdHJlYW1ERExNZXNzYWdlQ0Igc3RyZWFtX2RkbG1l c3NhZ2VfY2I7CiAJTG9naWNhbERlY29kZVN0cmVhbVRydW5jYXRlQ0Igc3RyZWFtX3RydW5jYXRl X2NiOwogfSBPdXRwdXRQbHVnaW5DYWxsYmFja3M7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1 dC5oCmluZGV4IDAyMDI3NTUuLjgzZTBiMWUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL3Bnb3V0cHV0LmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQu aApAQCAtMjUsNiArMjUsNyBAQCB0eXBlZGVmIHN0cnVjdCBQR091dHB1dERhdGEKIAl1aW50MzIJ CXByb3RvY29sX3ZlcnNpb247CiAJTGlzdAkgICAqcHVibGljYXRpb25fbmFtZXM7CiAJTGlzdAkg ICAqcHVibGljYXRpb25zOworCUxpc3QJICAgKmRlbGV0ZWRfcmVsaWRzOwogCWJvb2wJCWJpbmFy eTsKIAlib29sCQlzdHJlYW1pbmc7CiAJYm9vbAkJbWVzc2FnZXM7CmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9yZW9yZGVyYnVmZmVyLmgKaW5kZXggMmM5MjA2YS4uYjJlZWM4NSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCisrKyBiL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaApAQCAtMTEsNiArMTEsOCBAQAogCiAjaW5jbHVk ZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImxpYi9pbGlzdC5oIgorI2luY2x1 ZGUgIm5vZGVzL25vZGVzLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgog I2luY2x1ZGUgInN0b3JhZ2Uvc2ludmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvaHNlYXJjaC5oIgog I2luY2x1ZGUgInV0aWxzL3JlbGNhY2hlLmgiCkBAIC01Niw2ICs1OCw3IEBAIHR5cGVkZWYgZW51 bSBSZW9yZGVyQnVmZmVyQ2hhbmdlVHlwZQogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlNFUlQs CiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX1VQREFURSwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0Vf REVMRVRFLAorCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFLAogCVJFT1JERVJfQlVG RkVSX0NIQU5HRV9NRVNTQUdFLAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT04s CiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVEVSTkFMX1NOQVBTSE9ULApAQCAtMTMwLDYgKzEz MywxNiBAQCB0eXBlZGVmIHN0cnVjdCBSZW9yZGVyQnVmZmVyQ2hhbmdlCiAJCQljaGFyCSAgICpt ZXNzYWdlOwogCQl9CQkJbXNnOwogCisJCS8qIERETCBNZXNzYWdlLiAqLworCQlzdHJ1Y3QKKwkJ eworCQkJY2hhcgkgICAqcHJlZml4OworCQkJU2l6ZQkJbWVzc2FnZV9zaXplOworCQkJY2hhcgkg ICAqbWVzc2FnZTsKKwkJCU9pZAkJCXJlbGlkOworCQkJRGVwYXJzZWRDb21tYW5kVHlwZQljbWR0 eXBlOworCQl9CQkJZGRsbXNnOworCiAJCS8qIE5ldyBzbmFwc2hvdCwgc2V0IHdoZW4gYWN0aW9u ID09ICpfSU5URVJOQUxfU05BUFNIT1QgKi8KIAkJU25hcHNob3QJc25hcHNob3Q7CiAKQEAgLTQz MCw2ICs0NDMsMTYgQEAgdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlck1lc3NhZ2VDQikgKFJl b3JkZXJCdWZmZXIgKnJiLAogCQkJCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwK IAkJCQkJCQkJCQljb25zdCBjaGFyICptZXNzYWdlKTsKIAorLyogRERMIG1lc3NhZ2UgY2FsbGJh Y2sgc2lnbmF0dXJlICovCit0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyRERMTWVzc2FnZUNC KSAoUmVvcmRlckJ1ZmZlciAqcmIsCisJCQkJCQkJCQkJICAgUmVvcmRlckJ1ZmZlclRYTiAqdHhu LAorCQkJCQkJCQkJCSAgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJICAgY29u c3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJCSAgIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkgICBE ZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJICAgU2l6ZSBzeiwKKwkJCQkJ CQkJCQkgICBjb25zdCBjaGFyICptZXNzYWdlKTsKKwogLyogYmVnaW4gcHJlcGFyZSBjYWxsYmFj ayBzaWduYXR1cmUgKi8KIHR5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJCZWdpblByZXBhcmVD QikgKFJlb3JkZXJCdWZmZXIgKnJiLAogCQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhu KTsKQEAgLTQ5Niw2ICs1MTksMTcgQEAgdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0cmVh bU1lc3NhZ2VDQikgKAogCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwK IAkJCQkJCQkJCQkJICBjb25zdCBjaGFyICptZXNzYWdlKTsKIAorLyogc3RyZWFtIERETCBtZXNz YWdlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwordHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0 cmVhbURETE1lc3NhZ2VDQikgKAorCQkJCQkJCQkJCQkJIFJlb3JkZXJCdWZmZXIgKnJiLAorCQkJ CQkJCQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkJCSBYTG9nUmVjUHRy IG1lc3NhZ2VfbHNuLAorCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJ CQkJCSBPaWQgcmVsaWQsCisJCQkJCQkJCQkJCQkgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBl LAorCQkJCQkJCQkJCQkJIFNpemUgc3osCisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqbWVzc2Fn ZSk7CisKIC8qIHN0cmVhbSB0cnVuY2F0ZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KIHR5cGVkZWYg dm9pZCAoKlJlb3JkZXJCdWZmZXJTdHJlYW1UcnVuY2F0ZUNCKSAoCiAJCQkJCQkJCQkJCSAgIFJl b3JkZXJCdWZmZXIgKnJiLApAQCAtNTQxLDYgKzU3NSw3IEBAIHN0cnVjdCBSZW9yZGVyQnVmZmVy CiAJUmVvcmRlckJ1ZmZlckFwcGx5VHJ1bmNhdGVDQiBhcHBseV90cnVuY2F0ZTsKIAlSZW9yZGVy QnVmZmVyQ29tbWl0Q0IgY29tbWl0OwogCVJlb3JkZXJCdWZmZXJNZXNzYWdlQ0IgbWVzc2FnZTsK KwlSZW9yZGVyQnVmZmVyRERMTWVzc2FnZUNCIGRkbG1lc3NhZ2U7CiAKIAkvKgogCSAqIENhbGxi YWNrcyB0byBiZSBjYWxsZWQgd2hlbiBzdHJlYW1pbmcgYSB0cmFuc2FjdGlvbiBhdCBwcmVwYXJl IHRpbWUuCkBAIC01NjAsNiArNTk1LDcgQEAgc3RydWN0IFJlb3JkZXJCdWZmZXIKIAlSZW9yZGVy QnVmZmVyU3RyZWFtQ29tbWl0Q0Igc3RyZWFtX2NvbW1pdDsKIAlSZW9yZGVyQnVmZmVyU3RyZWFt Q2hhbmdlQ0Igc3RyZWFtX2NoYW5nZTsKIAlSZW9yZGVyQnVmZmVyU3RyZWFtTWVzc2FnZUNCIHN0 cmVhbV9tZXNzYWdlOworCVJlb3JkZXJCdWZmZXJTdHJlYW1ERExNZXNzYWdlQ0Igc3RyZWFtX2Rk bG1lc3NhZ2U7CiAJUmVvcmRlckJ1ZmZlclN0cmVhbVRydW5jYXRlQ0Igc3RyZWFtX3RydW5jYXRl OwogCiAJLyoKQEAgLTYzNSw2ICs2NzEsOSBAQCBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyUXVl dWVDaGFuZ2UoUmVvcmRlckJ1ZmZlciAqLCBUcmFuc2FjdGlvbklkLAogZXh0ZXJuIHZvaWQgUmVv cmRlckJ1ZmZlclF1ZXVlTWVzc2FnZShSZW9yZGVyQnVmZmVyICosIFRyYW5zYWN0aW9uSWQsIFNu YXBzaG90IHNuYXBzaG90LCBYTG9nUmVjUHRyIGxzbiwKIAkJCQkJCQkJCSAgYm9vbCB0cmFuc2Fj dGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsCiAJCQkJCQkJCQkgIFNpemUgbWVzc2FnZV9zaXpl LCBjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJRdWV1ZURE TE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqLCBUcmFuc2FjdGlvbklkLCBYTG9nUmVjUHRyIGxzbiwK KwkJCQkJCQkJCQkgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJ CQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBl IGNtZHR5cGUpOwogZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckNvbW1pdChSZW9yZGVyQnVmZmVy ICosIFRyYW5zYWN0aW9uSWQsCiAJCQkJCQkJCVhMb2dSZWNQdHIgY29tbWl0X2xzbiwgWExvZ1Jl Y1B0ciBlbmRfbHNuLAogCQkJCQkJCQlUaW1lc3RhbXBUeiBjb21taXRfdGltZSwgUmVwT3JpZ2lu SWQgb3JpZ2luX2lkLCBYTG9nUmVjUHRyIG9yaWdpbl9sc24pOwpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv cHNxbC5vdXQKaW5kZXggYTdmNTcwMC4uYmZjNzNjMiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9wc3FsLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Bz cWwub3V0CkBAIC01OTcwLDkgKzU5NzAsOSBAQCBMaXN0IG9mIHNjaGVtYXMKICgwIHJvd3MpCiAK IFxkUnAgIm5vLnN1Y2gucHVibGljYXRpb24iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotIE5hbWUgfCBPd25lciB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLSst LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9m IHB1YmxpY2F0aW9ucworIE5hbWUgfCBPd25lciB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0rLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0KICgwIHJvd3MpCiAKIFxkUnMgIm5vLnN1Y2guc3Vic2NyaXB0 aW9uIgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5v dXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dAppbmRleCA0Mjhj MWYxLi4xZGY1OTUxIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1Ymxp Y2F0aW9uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91 dApAQCAtMzAsMjAgKzMwLDIwIEBAIEVSUk9SOiAgY29uZmxpY3Rpbmcgb3IgcmVkdW5kYW50IG9w dGlvbnMKIExJTkUgMTogLi4udWJfeHh4IFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 ID0gJ3RydWUnLCBwdWJsaXNoX3ZpLi4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogXGRScAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCi0gICAgICAg IE5hbWUgICAgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSB0ZXN0 cGliX2luc190cnVuY3QgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgotIHRlc3RwdWJfZGVm YXVsdCAgICB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAg IHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCisgICAg ICAgIE5hbWUgICAgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERM cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLQorIHRlc3RwaWJfaW5zX3RydW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAg fCBmICAgICAgICB8IGYKKyB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAg ICAgIHwgZiAgICAgICAgfCBmCiAoMiByb3dzKQogCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi X2RlZmF1bHQgU0VUIChwdWJsaXNoID0gJ2luc2VydCwgdXBkYXRlLCBkZWxldGUnKTsKIFxkUnAK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1 YmxpY2F0aW9ucwotICAgICAgICBOYW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg ICB8IGYKLSB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9m IHB1YmxpY2F0aW9ucworICAgICAgICBOYW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyB0ZXN0cGliX2luc190cnVuY3QgfCByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBm ICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCisgdGVzdHB1Yl9kZWZhdWx0ICAgIHwg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDIgcm93cykKIAogLS0tIGFk ZGluZyB0YWJsZXMKQEAgLTg3LDEwICs4NywxMCBAQCBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2Vz OwogLS0gc2hvdWxkIGJlIGFibGUgdG8gYWRkIHNjaGVtYSB0byAnRk9SIFRBQkxFJyBwdWJsaWNh dGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBBREQgQUxMIFRBQkxFUyBJ TiBTQ0hFTUEgcHViX3Rlc3Q7CiBcZFJwKyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwg ZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgogVGFibGVzIGZyb20gc2NoZW1h czoKQEAgLTk5LDIwICs5OSwyMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gc2hvdWxkIGJl IGFibGUgdG8gZHJvcCBzY2hlbWEgZnJvbSAnRk9SIFRBQkxFJyBwdWJsaWNhdGlvbgogQUxURVIg UFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBEUk9QIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1 Yl90ZXN0OwogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoK ICAgICAicHVibGljLnRlc3RwdWJfdGJsMSIKIAogLS0gc2hvdWxkIGJlIGFibGUgdG8gc2V0IHNj aGVtYSB0byAnRk9SIFRBQkxFJyBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 Yl9mb3J0YWJsZSBTRVQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Q7CiBcZFJwKyB0ZXN0 cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExz IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAi cHViX3Rlc3QiCiAKQEAgLTEzNCwxMCArMTM0LDEwIEBAIEVSUk9SOiAgcmVsYXRpb24gInRlc3Rw dWJfbm9wayIgaXMgbm90IHBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uCiAtLSBzaG91bGQgYmUgYWJs ZSB0byBzZXQgdGFibGUgdG8gc2NoZW1hIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViX2ZvcnNjaGVtYSBTRVQgVEFCTEUgcHViX3Rlc3QudGVzdHB1Yl9ub3BrOwogXGRScCsg dGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1Yl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg fCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVz dC50ZXN0cHViX25vcGsiCiAKQEAgLTE1OSwxMCArMTU5LDEwIEBAIFB1YmxpY2F0aW9uczoKICAg ICAidGVzdHB1Yl9mb3JhbGx0YWJsZXMiCiAKIFxkUnArIHRlc3RwdWJfZm9yYWxsdGFibGVzCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcmFsbHRh YmxlcwotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgdCAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yYWxsdGFi bGVzCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IHQgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAg ICAgfCBmICAgICAgICB8IGYKICgxIHJvdykKIAogRFJPUCBUQUJMRSB0ZXN0cHViX3RibDI7CkBA IC0xNzQsMTkgKzE3NCwxOSBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjMgRk9SIFRBQkxF IHRlc3RwdWJfdGJsMzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNCBGT1IgVEFCTEUgT05M WSB0ZXN0cHViX3RibDM7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1 YjMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWIzCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjMKKyAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYg ICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwzIgogICAgICJwdWJs aWMudGVzdHB1Yl90YmwzYSIKIAogXGRScCsgdGVzdHB1YjQKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI0Ci0gICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjQKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAg ICJwdWJsaWMudGVzdHB1Yl90YmwzIgogCkBAIC0yMDcsMTAgKzIwNywxMCBAQCBVUERBVEUgdGVz dHB1Yl9wYXJ0ZWQxIFNFVCBhID0gMTsKIC0tIG9ubHkgcGFyZW50IGlzIGxpc3RlZCBhcyBiZWlu ZyBpbiBwdWJsaWNhdGlvbiwgbm90IHRoZSBwYXJ0aXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWJfZm9ycGFydGVkIEFERCBUQUJMRSB0ZXN0cHViX3BhcnRlZDsKIFxkUnArIHRlc3RwdWJf Zm9ycGFydGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1Yl9mb3JwYXJ0ZWQKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWJfZm9ycGFydGVkCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJf cGFydGVkIgogCkBAIC0yMjMsMTAgKzIyMywxMCBAQCBBTFRFUiBUQUJMRSB0ZXN0cHViX3BhcnRl ZCBERVRBQ0ggUEFSVElUSU9OIHRlc3RwdWJfcGFydGVkMTsKIFVQREFURSB0ZXN0cHViX3BhcnRl ZDEgU0VUIGEgPSAxOwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JwYXJ0ZWQgU0VUIChw dWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUpOwogXGRScCsgdGVzdHB1Yl9mb3JwYXJ0 ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2Zv cnBhcnRlZAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IHQKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3Jw YXJ0ZWQKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IHQgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9wYXJ0ZWQi CiAKQEAgLTI1NSwxMCArMjU1LDEwIEBAIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9S JzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNSBGT1IgVEFCTEUgdGVzdHB1Yl9yZl90Ymwx LCB0ZXN0cHViX3JmX3RibDIgV0hFUkUgKGMgPD4gJ3Rlc3QnIEFORCBkIDwgNSkgV0lUSCAocHVi bGlzaCA9ICdpbnNlcnQnKTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0 cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwg ZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAg InB1YmxpYy50ZXN0cHViX3JmX3RibDIiIFdIRVJFICgoYyA8PiAndGVzdCc6OnRleHQpIEFORCAo ZCA8IDUpKQpAQCAtMjcxLDEwICsyNzEsMTAgQEAgVGFibGVzOgogCiBBTFRFUiBQVUJMSUNBVElP TiB0ZXN0cHViNSBBREQgVEFCTEUgdGVzdHB1Yl9yZl90YmwzIFdIRVJFIChlID4gMTAwMCBBTkQg ZSA8IDIwMDApOwogXGRScCsgdGVzdHB1YjUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAg IHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg fCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwg ZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMu dGVzdHB1Yl9yZl90YmwxIgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwyIiBXSEVSRSAoKGMg PD4gJ3Rlc3QnOjp0ZXh0KSBBTkQgKGQgPCA1KSkKQEAgLTI5MCwxMCArMjkwLDEwIEBAIFB1Ymxp Y2F0aW9uczoKIAogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgRFJPUCBUQUJMRSB0ZXN0cHVi X3JmX3RibDI7CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg fCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8 IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBm ICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50 ZXN0cHViX3JmX3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDMiIFdIRVJFICgoZSA+ IDEwMDApIEFORCAoZSA8IDIwMDApKQpAQCAtMzAxLDEwICszMDEsMTAgQEAgVGFibGVzOgogLS0g cmVtb3ZlIHRlc3RwdWJfcmZfdGJsMSBhbmQgYWRkIHRlc3RwdWJfcmZfdGJsMyBhZ2FpbiAoYW5v dGhlciBXSEVSRSBleHByZXNzaW9uKQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgU0VUIFRB QkxFIHRlc3RwdWJfcmZfdGJsMyBXSEVSRSAoZSA+IDMwMCBBTkQgZSA8IDUwMCk7CiBcZFJwKyB0 ZXN0cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi NQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAg IHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDMiIFdI RVJFICgoZSA+IDMwMCkgQU5EIChlIDwgNTAwKSkKIApAQCAtMzM3LDEwICszMzcsMTAgQEAgU0VU IGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfc3ludGF4MSBGT1IgVEFCTEUgdGVzdHB1Yl9yZl90YmwxLCBPTkxZIHRlc3RwdWJfcmZfdGJs MyBXSEVSRSAoZSA8IDk5OSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQnKTsKIFJFU0VUIGNsaWVu dF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViX3N5bnRheDEKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgxCi0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYg ICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgxCisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRh YmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGljLnRlc3RwdWJf cmZfdGJsMyIgV0hFUkUgKGUgPCA5OTkpCkBAIC0zNTAsMTAgKzM1MCwxMCBAQCBTRVQgY2xpZW50 X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9zeW50 YXgyIEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEsIHRlc3RwdWJfcmZfc2NoZW1hMS50ZXN0cHVi X3JmX3RibDUgV0hFUkUgKGggPCA5OTkpIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7CiBSRVNF VCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1Yl9zeW50YXgyCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4MgotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4MgorICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAg fCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInRlc3RwdWJf cmZfc2NoZW1hMS50ZXN0cHViX3JmX3RibDUiIFdIRVJFIChoIDwgOTk5KQpAQCAtNjc2LDEwICs2 NzYsMTAgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfdGFibGVfaW5zIFdJVEggKHB1Ymxp c2ggPSAnaW5zZXJ0LCB0cnVuY2F0ZScpOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIEFM VEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfdGFibGVfaW5zIEFERCBUQUJMRSB0ZXN0cHViX3RibDUg KGEpOwkJLS0gb2sKIFxkUnArIHRlc3RwdWJfdGFibGVfaW5zCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl90YWJsZV9pbnMKLSAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAg ICAgICB8IGYgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfdGFibGVfaW5zCisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRh YmxlczoKICAgICAicHVibGljLnRlc3RwdWJfdGJsNSIgKGEpCiAKQEAgLTgyMSwxMCArODIxLDEw IEBAIENSRUFURSBUQUJMRSB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMgKGEgaW50LCBiIGludCwg YyBpbnQsIFBSSU1BUlkgS0VZIChhLGMpKTsKIEFMVEVSIFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhf ZmlsdGVycyBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RwdWJfdGJsX2JvdGhfZmls dGVyc19wa2V5OwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMgQUREIFRB QkxFIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyAoYSxjKSBXSEVSRSAoYyAhPSAxKTsKIFxkUnAr IHRlc3RwdWJfYm90aF9maWx0ZXJzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViX2JvdGhfZmlsdGVycwotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWJfYm90aF9maWx0ZXJzCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAi cHVibGljLnRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyIgKGEsIGMpIFdIRVJFIChjIDw+IDEpCiAK QEAgLTEwMjksMTAgKzEwMjksMTAgQEAgRVJST1I6ICByZWxhdGlvbiAidGVzdHB1Yl90YmwxIiBp cyBhbHJlYWR5IG1lbWJlciBvZiBwdWJsaWNhdGlvbiAidGVzdHB1Yl9mb3J0YmwKIENSRUFURSBQ VUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRibCBGT1IgVEFCTEUgdGVzdHB1Yl90YmwxOwogRVJST1I6 ICBwdWJsaWNhdGlvbiAidGVzdHB1Yl9mb3J0YmwiIGFscmVhZHkgZXhpc3RzCiBcZFJwKyB0ZXN0 cHViX2ZvcnRibAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1Yl9mb3J0YmwKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViX2ZvcnRibAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJf bm9wayIKICAgICAicHVibGljLnRlc3RwdWJfdGJsMSIKQEAgLTEwNzAsMTAgKzEwNzAsMTAgQEAg UHVibGljYXRpb25zOgogICAgICJ0ZXN0cHViX2ZvcnRibCIKIAogXGRScCsgdGVzdHB1Yl9kZWZh dWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJf ZGVmYXVsdAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVm YXVsdAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAg ICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIK ICAgICAicHVibGljLnRlc3RwdWJfdGJsMSIKQEAgLTExNTEsMTAgKzExNTEsMTAgQEAgUkVWT0tF IENSRUFURSBPTiBEQVRBQkFTRSByZWdyZXNzaW9uIEZST00gcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyMjsKIERST1AgVEFCTEUgdGVzdHB1Yl9wYXJ0ZWQ7CiBEUk9QIFRBQkxFIHRlc3RwdWJfdGJs MTsKIFxkUnArIHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t CisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQogCiAtLSBm YWlsIC0gbXVzdCBiZSBvd25lciBvZiBwdWJsaWNhdGlvbgpAQCAtMTE2NCwyMCArMTE2NCwyMCBA QCBFUlJPUjogIG11c3QgYmUgb3duZXIgb2YgcHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0CiBS RVNFVCBST0xFOwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9kZWZhdWx0IFJFTkFNRSBUTyB0 ZXN0cHViX2ZvbzsKIFxkUnAgdGVzdHB1Yl9mb28KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotICAgIE5hbWUgICAgIHwgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHRlc3RwdWJfZm9vIHwgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYg ICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgIE5hbWUgICAgIHwgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgdGVzdHB1Yl9mb28gfCByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAg ICAgICAgIHwgZiAgICAgICAgfCBmCiAoMSByb3cpCiAKIC0tIHJlbmFtZSBiYWNrIHRvIGtlZXAg dGhlIHJlc3Qgc2ltcGxlCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvbyBSRU5BTUUgVE8g dGVzdHB1Yl9kZWZhdWx0OwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9kZWZhdWx0IE9XTkVS IFRPIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcjI7CiBcZFJwIHRlc3RwdWJfZGVmYXVsdAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNh dGlvbnMKLSAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAotLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCi0gdGVzdHB1Yl9kZWZhdWx0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMiB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJs aWNhdGlvbnMKKyAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0KKyB0ZXN0cHViX2RlZmF1bHQgfCByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYg ICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQogCiAtLSBhZGRpbmcgc2NoZW1hcyBhbmQg dGFibGVzCkBAIC0xMTkzLDE5ICsxMTkzLDE5IEBAIENSRUFURSBUQUJMRSAiQ1VSUkVOVF9TQ0hF TUEiLiJDVVJSRU5UX1NDSEVNQSIoaWQgaW50KTsKIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0g J0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRk9SIEFMTCBU QUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVt YQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEK KyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCiBD UkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjJfZm9yc2NoZW1hIEZPUiBBTEwgVEFCTEVTIElOIFND SEVNQSBwdWJfdGVzdDEsIHB1Yl90ZXN0MiwgcHViX3Rlc3QzOwogXGRScCsgdGVzdHB1YjJfZm9y c2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 YjJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIy X2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJf dGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTEyMTksNDQgKzEyMTksNDQgQEAgQ1JFQVRFIFBV QkxJQ0FUSU9OIHRlc3RwdWI2X2ZvcnNjaGVtYSBGT1IgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgIkNV UlJFTlRfU0NIRU1BIiwKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEZPUiBU QUJMRSAiQ1VSUkVOVF9TQ0hFTUEiLiJDVVJSRU5UX1NDSEVNQSI7CiBSRVNFVCBjbGllbnRfbWlu X21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBU YWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJsaWMiCiAKIFxkUnArIHRlc3RwdWI0X2ZvcnNj aGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI0 X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNF9m b3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAiQ1VSUkVO VF9TQ0hFTUEiCiAKIFxkUnArIHRlc3RwdWI1X2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1X2ZvcnNjaGVtYQotICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgog VGFibGVzIGZyb20gc2NoZW1hczoKICAgICAiQ1VSUkVOVF9TQ0hFTUEiCiAgICAgInB1YmxpYyIK IAogXGRScCsgdGVzdHB1YjZfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1YjZfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWI2X2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJv bSBzY2hlbWFzOgogICAgICJDVVJSRU5UX1NDSEVNQSIKICAgICAicHVibGljIgogCiBcZFJwKyB0 ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBE RExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJDVVJSRU5UX1ND SEVNQS5DVVJSRU5UX1NDSEVNQSIKIApAQCAtMTI5MCwxMCArMTI5MCwxMCBAQCBFUlJPUjogIHNj aGVtYSAidGVzdHB1Yl92aWV3IiBkb2VzIG5vdCBleGlzdAogLS0gZHJvcHBpbmcgdGhlIHNjaGVt YSBzaG91bGQgcmVmbGVjdCB0aGUgY2hhbmdlIGluIHB1YmxpY2F0aW9uCiBEUk9QIFNDSEVNQSBw dWJfdGVzdDM7CiBcZFJwKyB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRh YmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAt MTMwMSwyMCArMTMwMSwyMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gcmVuYW1pbmcgdGhl IHNjaGVtYSBzaG91bGQgcmVmbGVjdCB0aGUgY2hhbmdlIGluIHB1YmxpY2F0aW9uCiBBTFRFUiBT Q0hFTUEgcHViX3Rlc3QxIFJFTkFNRSB0byBwdWJfdGVzdDFfcmVuYW1lZDsKIFxkUnArIHRlc3Rw dWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBE RExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAg ICAicHViX3Rlc3QxX3JlbmFtZWQiCiAgICAgInB1Yl90ZXN0MiIKIAogQUxURVIgU0NIRU1BIHB1 Yl90ZXN0MV9yZW5hbWVkIFJFTkFNRSB0byBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMl9mb3Jz Y2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi Ml9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJf Zm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90 ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTMyMiwxMCArMTMyMiwxMCBAQCBUYWJsZXMgZnJv bSBzY2hlbWFzOgogLS0gYWx0ZXIgcHVibGljYXRpb24gYWRkIHNjaGVtYQogQUxURVIgUFVCTElD QVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEFERCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVz dDI7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBm cm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTMzNCwx MCArMTMzNCwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVz dHB1YjFfZm9yc2NoZW1hIEFERCBBTEwgVEFCTEVTIElOIFNDSEVNQSBub25fZXhpc3RlbnRfc2No ZW1hOwogRVJST1I6ICBzY2hlbWEgIm5vbl9leGlzdGVudF9zY2hlbWEiIGRvZXMgbm90IGV4aXN0 CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9t IHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTM0NiwxMCAr MTM0NiwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 YjFfZm9yc2NoZW1hIEFERCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBFUlJPUjog IHNjaGVtYSAicHViX3Rlc3QxIiBpcyBhbHJlYWR5IG1lbWJlciBvZiBwdWJsaWNhdGlvbiAidGVz dHB1YjFfZm9yc2NoZW1hIgogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAg fCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0 MiIKQEAgLTEzNTcsMTAgKzEzNTcsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIGFsdGVy IHB1YmxpY2F0aW9uIGRyb3Agc2NoZW1hCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3Jz Y2hlbWEgRFJPUCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDI7CiBcZFJwKyB0ZXN0cHVi MV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERM cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAg InB1Yl90ZXN0MSIKIApAQCAtMTM2OCwxMCArMTM2OCwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFz OgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIERST1AgQUxMIFRBQkxFUyBJ TiBTQ0hFTUEgcHViX3Rlc3QyOwogRVJST1I6ICB0YWJsZXMgZnJvbSBzY2hlbWEgInB1Yl90ZXN0 MiIgYXJlIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWNhdGlvbgogXGRScCsgdGVzdHB1YjFfZm9yc2No ZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFf Zm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2Zv cnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVz dDEiCiAKQEAgLTEzNzksMjkgKzEzNzksMjkgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBEUk9QIEFMTCBUQUJMRVMgSU4gU0NIRU1B IG5vbl9leGlzdGVudF9zY2hlbWE7CiBFUlJPUjogIHNjaGVtYSAibm9uX2V4aXN0ZW50X3NjaGVt YSIgZG9lcyBub3QgZXhpc3QKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAg IHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCiAtLSBkcm9wIGFs bCBzY2hlbWFzCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJPUCBBTEwg VEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hl bWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1h CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmICAgICAgICB8IGYKICgxIHJvdykKIAogLS0gYWx0ZXIgcHVibGljYXRpb24gc2V0IG11bHRp cGxlIHNjaGVtYQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIFNFVCBBTEwg VEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDEsIHB1Yl90ZXN0MjsKIFxkUnArIHRlc3RwdWIxX2Zv cnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi MV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHVi X3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDEwLDEwICsxNDEwLDEwIEBAIFRhYmxlcyBm cm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VUIEFM TCBUQUJMRVMgSU4gU0NIRU1BIG5vbl9leGlzdGVudF9zY2hlbWE7CiBFUlJPUjogIHNjaGVtYSAi bm9uX2V4aXN0ZW50X3NjaGVtYSIgZG9lcyBub3QgZXhpc3QKIFxkUnArIHRlc3RwdWIxX2ZvcnNj aGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIx X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9m b3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rl c3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDIyLDEwICsxNDIyLDEwIEBAIFRhYmxlcyBmcm9t IHNjaGVtYXM6CiAtLSByZW1vdmluZyB0aGUgZHVwbGljYXRlIHNjaGVtYXMKIEFMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBTRVQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rl c3QxLCBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8 IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIApAQCAtMTUwNCwxOCAr MTUwNCwxOCBAQCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVC TElDQVRJT04gdGVzdHB1YjNfZm9yc2NoZW1hOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsK IFxkUnArIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQogCiBB TFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViM19mb3JzY2hlbWEgU0VUIEFMTCBUQUJMRVMgSU4gU0NI RU1BIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwg ZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCkBAIC0xNTI1LDIwICsx NTI1LDIwIEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYV9mb3J0YWJsZSBG T1IgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxCiBDUkVBVEUgUFVCTElDQVRJT04gdGVz dHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEgRk9SIFRBQkxFIHB1Yl90ZXN0Mi50YmwxLCBBTEwgVEFC TEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRS cCsgdGVzdHB1Yl9mb3JzY2hlbWFfZm9ydGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K LSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWFfZm9ydGFibGUKKyAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgog VGFibGVzOgogICAgICJwdWJfdGVzdDIudGJsMSIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAg InB1Yl90ZXN0MSIKIAogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGVfZm9yc2NoZW1h Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hl bWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdDIudGJsMSIKIFRhYmxlcyBm cm9tIHNjaGVtYXM6Ci0tIAoxLjguMy4xCgo= --000000000000f0bc1005e6210616 Content-Type: application/octet-stream; name="v17-0001-Functions-to-deparse-DDL-commands.patch" Content-Disposition: attachment; filename="v17-0001-Functions-to-deparse-DDL-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l6s1viys0 RnJvbSA2MmRmY2JkYjM2Nzc2M2QwZDU3NzM5MzVmMDg1ZGQ0NGIyYjRjNTc2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IEZyaSwgMTIgQXVnIDIwMjIgMDk6NTM6NDYgLTA0MDAKU3ViamVjdDogW1BBVENI IHYxNyAxLzRdIEZ1bmN0aW9ucyB0byBkZXBhcnNlIERETCBjb21tYW5kcy4KClRoaXMgcGF0Y2gg cHJvdmlkZXMgSlNPTiBibG9icyByZXByZXNlbnRpbmcgRERMIGNvbW1hbmRzLCB3aGljaCBjYW4K bGF0ZXIgYmUgcmUtcHJvY2Vzc2VkIGludG8gcGxhaW4gc3RyaW5ncyBieSB3ZWxsLWRlZmluZWQg c3ByaW50Zi1saWtlCmV4cGFuc2lvbi4gVGhlc2UgSlNPTiBvYmplY3RzIGFyZSBpbnRlbmRlZCB0 byBhbGxvdyBmb3IgbWFjaGluZS1lZGl0aW5nIG9mCnRoZSBjb21tYW5kcywgYnkgcmVwbGFjaW5n IGNlcnRhaW4gbm9kZXMgd2l0aGluIHRoZSBvYmplY3RzLgoKTXVjaCBvZiB0aGUgaW5mb3JtYXRp b24gaW4gdGhlIG91dHB1dCBibG9iIGFjdHVhbGx5IGNvbWVzIGZyb20gc3lzdGVtCmNhdGFsb2dz LCBub3QgZnJvbSB0aGUgY29tbWFuZCBwYXJzZSBub2RlLCBhcyBpdCBpcyBpbXBvc3NpYmxlIHRv IHJlbGlhYmx5CmNvbnN0cnVjdCBhIGZ1bGx5LXNwZWNpZmllZCBjb21tYW5kIChpLmUuIG9uZSBu b3QgZGVwZW5kZW50IG9uIHNlYXJjaF9wYXRoCmV0YykgbG9va2luZyBvbmx5IGF0IHRoZSBwYXJz ZSBub2RlLgoKVGhpcyBwcm92aWRlcyBhIGJhc2UgZm9yIGxvZ2ljYWwgcmVwbGljYXRpb24gb2Yg RERMIHN0YXRlbWVudHMuIEN1cnJlbnRseSwKdGhlIHBhdGNoIGhhcyBzdXBwb3J0IGZvcjoKCkNS RUFURS9BTFRFUi9EUk9QIFRBQkxFIC0tIE5vdGUgIzEsIE5vdGUgIzIKQ1JFQVRFL0FMVEVSL0RS T1AgU0VRVUVOQ0UKQ1JFQVRFL0FMVEVSL0RST1AgU0NIRU1BCkNSRUFURS9BTFRFUiBGVU5DVElP Ti9QUk9DRURVUkUKQ1JFQVRFL0FMVEVSIFRSSUdHRVIKQ1JFQVRFL0RST1AgSU5ERVgKQ1JFQVRF L0RST1AgT1BFUkFUT1IgW0NMQVNTL0ZBTUlMWV0KQ1JFQVRFL0FMVEVSL0RST1AgQ0FTVApDUkVB VEUgRE9NQUlOCgooTm90ZSAjMSkgTm90ZSB0aGF0IHNvbWUgcmVjZW50bHkgaW50cm9kdWNlZCBE RExzKGUuZy4gRERMcyByZWxhdGVkIHRvClBBUlRJVElPTkVEIFRBQkxFKSBhcmUgdW5zdXBwb3J0 ZWQuIFdlIGNhbiBleHRlbmQgaXQgYXMgd2UgbmVlZCBtb3JlCmZ1bmN0aW9uYWxpdHkgZm9yIERE TCByZXBsaWNhdGlvbi4KCihOb3RlICMyKSBOb3RlIHRoYXQsIGZvciBBVFRBQ0gvREVUQUNIIFBB UlRJVElPTiwgd2UgaGF2ZW4ndCBhZGRlZCBleHRyYSBsb2dpYyBvbgpzdWJzY3JpYmVyIHRvIGhh bmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgdGFibGUgb24gcHVibGlzaGVyIGlzIGEgUEFSVElUSU9O RUQKVEFCTEUgd2hpbGUgdGhlIHRhcmdldCB0YWJsZSBvbiBzdWJjcmliZXIgc2lkZSBpcyBOT1JN QUwgdGFibGUuIFdlIHdpbGwKcmVzZWFyY2ggdGhpcyBtb3JlIGFuZCBpbXByb3ZlIHRoaXMgbGF0 ZXIuCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUgICAgICAgfCAgICAyICsKIHNy Yy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgIHwgNTUwOSArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24uYyAgICAg fCAgNzYzICsrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jICAgICB8ICAgMzMg Kwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMgfCAgICAzICstCiBzcmMvYmFj a2VuZC91dGlscy9hZHQvcmVncHJvYy5jICAgICB8ICAgNTIgKwogc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3J1bGV1dGlscy5jICAgfCAgMTQ5ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0ICAgICB8ICAgIDYgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaCAgICAgfCAg ICAxICsKIHNyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaCAgICAgIHwgICAyMyArCiBzcmMv aW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvdXRp bHMvYnVpbHRpbnMuaCAgICAgICAgfCAgICAyICsKIHNyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGls cy5oICAgICAgIHwgICAxMyArCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICB8 ICAgIDQgKwogMTQgZmlsZXMgY2hhbmdlZCwgNjQ5MSBpbnNlcnRpb25zKCspLCA3MCBkZWxldGlv bnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJz ZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24uYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaAoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvTWFrZWZpbGUKaW5kZXggNDhmNzM0OC4uMTcxZGZiMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUK QEAgLTI5LDYgKzI5LDggQEAgT0JKUyA9IFwKIAljb3B5dG8ubyBcCiAJY3JlYXRlYXMubyBcCiAJ ZGJjb21tYW5kcy5vIFwKKwlkZGxfZGVwYXJzZS5vIFwKKwlkZGxfanNvbi5vIFwKIAlkZWZpbmUu byBcCiAJZGlzY2FyZC5vIFwKIAlkcm9wY21kcy5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJz ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMxY2Y5OTMKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCkBAIC0wLDAgKzEs NTUwOSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRsX2RlcGFyc2UuYworICoJICBG dW5jdGlvbnMgdG8gY29udmVydCB1dGlsaXR5IGNvbW1hbmRzIHRvIG1hY2hpbmUtcGFyc2VhYmxl CisgKgkgIHJlcHJlc2VudGF0aW9uCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2 LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5p YQorICoKKyAqIE5PVEVTCisgKgorICogVGhpcyBpcyBpbnRlbmRlZCB0byBwcm92aWRlIEpTT04g YmxvYnMgcmVwcmVzZW50aW5nIERETCBjb21tYW5kcywgd2hpY2ggY2FuCisgKiBsYXRlciBiZSBy ZS1wcm9jZXNzZWQgaW50byBwbGFpbiBzdHJpbmdzIGJ5IHdlbGwtZGVmaW5lZCBzcHJpbnRmLWxp a2UKKyAqIGV4cGFuc2lvbi4gIFRoZXNlIEpTT04gb2JqZWN0cyBhcmUgaW50ZW5kZWQgdG8gYWxs b3cgZm9yIG1hY2hpbmUtZWRpdGluZyBvZgorICogdGhlIGNvbW1hbmRzLCBieSByZXBsYWNpbmcg Y2VydGFpbiBub2RlcyB3aXRoaW4gdGhlIG9iamVjdHMuCisgKgorICogTXVjaCBvZiB0aGUgaW5m b3JtYXRpb24gaW4gdGhlIG91dHB1dCBibG9iIGFjdHVhbGx5IGNvbWVzIGZyb20gc3lzdGVtCisg KiBjYXRhbG9ncywgbm90IGZyb20gdGhlIGNvbW1hbmQgcGFyc2Ugbm9kZSwgYXMgaXQgaXMgaW1w b3NzaWJsZSB0byByZWxpYWJseQorICogY29uc3RydWN0IGEgZnVsbHktc3BlY2lmaWVkIGNvbW1h bmQgKGkuZS4gb25lIG5vdCBkZXBlbmRlbnQgb24gc2VhcmNoX3BhdGgKKyAqIGV0YykgbG9va2lu ZyBvbmx5IGF0IHRoZSBwYXJzZSBub2RlLgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNy Yy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisjaW5jbHVkZSAidGNvcC9kZGxfZGVwYXJzZS5o IgorI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgor I2luY2x1ZGUgImFjY2Vzcy9yZWxhdGlvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNl LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYXR0 cmlidXRlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jYXN0LmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ19jbGFzcy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wZ19jb25zdHJhaW50LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19kZXBlbmQu aCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2luaGVyaXRzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9w Z19sYW5ndWFnZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfbmFtZXNwYWNlLmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wZ19vcGNsYXNzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGVyYXRvci5o IgorI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BmYW1pbHkuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3Bn X3Byb2MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3NlcXVlbmNlLmgiCisjaW5jbHVkZSAiY2F0 YWxvZy9wZ190eXBlLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZGVmcmVtLmgiCisjaW5jbHVkZSAi Y29tbWFuZHMvc2VxdWVuY2UuaCIKKyNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCisj aW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgImxpYi9pbGlzdC5oIgorI2luY2x1ZGUgIm5v ZGVzL21ha2VmdW5jcy5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgorI2luY2x1ZGUg Im5vZGVzL3BhcnNlbm9kZXMuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCisj aW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlSGFuZGxlci5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0 aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMuaCIKKyNpbmNsdWRlICJ1dGlscy9ndWMu aCIKKyNpbmNsdWRlICJ1dGlscy9qc29uYi5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5o IgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvcmVsLmgiCisj aW5jbHVkZSAidXRpbHMvcnVsZXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIK KworLyogRXN0aW1hdGVkIGxlbmd0aCBvZiB0aGUgZ2VuZXJhdGVkIGpzb25iIHN0cmluZyAqLwor I2RlZmluZSBKU09OQl9FU1RJTUFURURfTEVOIDEyOAorCisvKgorICogQmVmb3JlIHRoZXkgYXJl IHR1cm5lZCBpbnRvIEpTT05CIHJlcHJlc2VudGF0aW9uLCBlYWNoIGNvbW1hbmQgaXMKKyAqIHJl cHJlc2VudGVkIGFzIGFuIG9iamVjdCB0cmVlLCB1c2luZyB0aGUgc3RydWN0cyBiZWxvdy4KKyAq LwordHlwZWRlZiBlbnVtCit7CisJT2JqVHlwZU51bGwsCisJT2JqVHlwZUJvb2wsCisJT2JqVHlw ZVN0cmluZywKKwlPYmpUeXBlQXJyYXksCisJT2JqVHlwZUludGVnZXIsCisJT2JqVHlwZUZsb2F0 LAorCU9ialR5cGVPYmplY3QKK30gT2JqVHlwZTsKKwordHlwZWRlZiBzdHJ1Y3QgT2JqVHJlZQor eworCXNsaXN0X2hlYWQJcGFyYW1zOworCWludAkJCW51bVBhcmFtczsKKwlTdHJpbmdJbmZvCWZt dGluZm87CisJYm9vbAkJcHJlc2VudDsKK30gT2JqVHJlZTsKKwordHlwZWRlZiBzdHJ1Y3QgT2Jq RWxlbQoreworCWNoYXIJICAgKm5hbWU7CisJT2JqVHlwZQkJb2JqdHlwZTsKKworCXVuaW9uCisJ eworCQlib29sCQlib29sZWFuOworCQljaGFyCSAgICpzdHJpbmc7CisJCWludDY0CQlpbnRlZ2Vy OworCQlmbG9hdDgJCWZsdDsKKwkJT2JqVHJlZQkgICAqb2JqZWN0OworCQlMaXN0CSAgICphcnJh eTsKKwl9IHZhbHVlOworCXNsaXN0X25vZGUJbm9kZTsKK30gT2JqRWxlbTsKKworYm9vbCB2ZXJi b3NlID0gdHJ1ZTsKKworc3RhdGljIHZvaWQgYXBwZW5kX2FycmF5X29iamVjdChPYmpUcmVlICp0 cmVlLCBjaGFyICpuYW1lLCBMaXN0ICphcnJheSk7CitzdGF0aWMgdm9pZCBhcHBlbmRfYm9vbF9v YmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqbmFtZSwgYm9vbCB2YWx1ZSk7CitzdGF0aWMgdm9p ZCBhcHBlbmRfZmxvYXRfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5hbWUsIGZsb2F0OCB2 YWx1ZSk7CitzdGF0aWMgdm9pZCBhcHBlbmRfbnVsbF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hh ciAqbmFtZSk7CitzdGF0aWMgdm9pZCBhcHBlbmRfb2JqZWN0X29iamVjdChPYmpUcmVlICp0cmVl LCBjaGFyICpuYW1lLCBPYmpUcmVlICp2YWx1ZSk7CitzdGF0aWMgY2hhciAqYXBwZW5kX29iamVj dF90b19mb3JtYXRfc3RyaW5nKE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQpOworc3RhdGlj IHZvaWQgYXBwZW5kX3ByZW1hZGVfb2JqZWN0KE9ialRyZWUgKnRyZWUsIE9iakVsZW0gKmVsZW0p Oworc3RhdGljIHZvaWQgYXBwZW5kX3N0cmluZ19vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAq bmFtZSwgY2hhciAqdmFsdWUpOworc3RhdGljIHZvaWQgZm9ybWF0X3R5cGVfZGV0YWlsZWQoT2lk IHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kLAorCQkJCQkJCQkgT2lkICpuc3BpZCwgY2hhciAqKnR5 cG5hbWUsIGNoYXIgKip0eXBlbW9kc3RyLAorCQkJCQkJCQkgYm9vbCAqdHlwYXJyYXkpOworc3Rh dGljIExpc3QgKkZ1bmN0aW9uR2V0RGVmYXVsdHModGV4dCAqcHJvYXJnZGVmYXVsdHMpOworc3Rh dGljIE9iakVsZW0gKm5ld19vYmplY3QoT2JqVHlwZSB0eXBlLCBjaGFyICpuYW1lKTsKK3N0YXRp YyBPYmpFbGVtICpuZXdfb2JqZWN0X29iamVjdChPYmpUcmVlICp2YWx1ZSk7CitzdGF0aWMgT2Jq VHJlZSAqbmV3X29ianRyZWVfVkEoY2hhciAqZm10LCBpbnQgbnVtb2JqcywuLi4pOworc3RhdGlj IE9iakVsZW0gKm5ld19zdHJpbmdfb2JqZWN0KGNoYXIgKnZhbHVlKTsKK3N0YXRpYyBKc29uYlZh bHVlICpvYmp0cmVlX3RvX2pzb25iX3JlYyhPYmpUcmVlICp0cmVlLCBKc29uYlBhcnNlU3RhdGUg KnN0YXRlKTsKK3N0YXRpYyB2b2lkIHBnX2dldF9pbmRleGRlZl9kZXRhaWxlZChPaWQgaW5kZXhy ZWxpZCwKKwkJCQkJCQkJCSBjaGFyICoqaW5kZXhfYW0sCisJCQkJCQkJCQkgY2hhciAqKmRlZmlu aXRpb24sCisJCQkJCQkJCQkgY2hhciAqKnJlbG9wdGlvbnMsCisJCQkJCQkJCQkgY2hhciAqKnRh Ymxlc3BhY2UsCisJCQkJCQkJCQkgY2hhciAqKndoZXJlQ2xhdXNlKTsKK3N0YXRpYyBjaGFyICpS ZWxhdGlvbkdldENvbHVtbkRlZmF1bHQoUmVsYXRpb24gcmVsLCBBdHRyTnVtYmVyIGF0dG5vLAor CQkJCQkJCQkJICBMaXN0ICpkcGNvbnRleHQsIExpc3QgKipleHBycyk7CitzdGF0aWMgY29uc3Qg Y2hhciAqc3RyaW5naWZ5X29ianR5cGUoT2JqZWN0VHlwZSBvYmp0eXBlKTsKKworc3RhdGljIE9i alRyZWUgKmRlcGFyc2VfQ29sdW1uRGVmKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICpkcGNvbnRl eHQsIGJvb2wgY29tcG9zaXRlLAorCQkJCQkJCQkgIENvbHVtbkRlZiAqY29sZGVmLCBib29sIGlz X2FsdGVyLCBMaXN0ICoqZXhwcnMpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfQ29sdW1uSWRl bnRpdHkoT2lkIHNlcXJlbGlkLCBjaGFyIGlkZW50aXR5LCBib29sIGFsdGVyX3RhYmxlKTsKK3N0 YXRpYyBPYmpUcmVlICpkZXBhcnNlX0NvbHVtblNldE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3Vi Y21kKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfT3BlcmF0b3IoT2lkIG9i amVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVm RWxlbShEZWZFbGVtICplbGVtLCBib29sIGlzX3Jlc2V0KTsKK3N0YXRpYyBPYmpUcmVlICpkZXBh cnNlX0Z1bmN0aW9uU2V0KFZhcmlhYmxlU2V0S2luZCBraW5kLCBjaGFyICpuYW1lLCBjaGFyICp2 YWx1ZSk7CitzdGF0aWMgTGlzdCAqZGVwYXJzZV9JbmhSZWxhdGlvbnMoT2lkIG9iamVjdElkKTsK K3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX09uQ29tbWl0Q2xhdXNlKE9uQ29tbWl0QWN0aW9uIG9w dGlvbik7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9SZWxTZXRPcHRpb25zKEFsdGVyVGFibGVD bWQgKnN1YmNtZCk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX0NhY2hlKE9i alRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxl KTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfQ3ljbGUoT2JqVHJlZSAqcGFy ZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGlj IGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShPYmpUcmVlICpwYXJlbnQs IEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5s aW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX01pbnZhbHVlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9w Z19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2Jq RWxlbSAqZGVwYXJzZV9TZXFfTWF4dmFsdWUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVl bmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIE9iakVsZW0gKmRlcGFyc2Vf U2VxX093bmVkQnkoT2JqVHJlZSAqcGFyZW50LCBPaWQgc2VxdWVuY2VJZCwgYm9vbCBhbHRlcl90 YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX1Jlc3RhcnQoT2JqVHJl ZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxZGF0YSk7CitzdGF0aWMgaW5saW5l IE9iakVsZW0gKmRlcGFyc2VfU2VxX1N0YXJ0d2l0aChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdf c2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgTGlzdCAqZGVwYXJz ZV9UYWJsZUVsZW1lbnRzKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICp0YWJsZUVsZW1lbnRzLCBM aXN0ICpkcGNvbnRleHQsCisJCQkJCQkJCSAgIGJvb2wgdHlwZWQsIGJvb2wgY29tcG9zaXRlKTsK KworLyogQXBwZW5kIGFuIGFycmF5IHBhcmFtZXRlciB0byBhIHRyZWUgKi8KK3N0YXRpYyB2b2lk CithcHBlbmRfYXJyYXlfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIExpc3Qg KmFycmF5KQoreworCU9iakVsZW0JKnBhcmFtOworCWNoYXIgKm9iamVjdF9uYW1lOworCisJQXNz ZXJ0KHN1Yl9mbXQpOworCisJaWYgKGxpc3RfbGVuZ3RoKGFycmF5KSA9PSAwKQorCQlyZXR1cm47 CisKKwlpZiAoIXZlcmJvc2UpCisJeworCQlMaXN0Q2VsbCAqbGM7CisKKwkJLyogRXh0cmFjdCB0 aGUgT2JqRWxlbXMgd2hvc2UgcHJlc2VudCBmbGFnIGlzIHRydWUgKi8KKwkJZm9yZWFjaChsYywg YXJyYXkpCisJCXsKKwkJCU9iakVsZW0gKmVsZW0gPSAoT2JqRWxlbSAqKSBsZmlyc3QobGMpOwor CisJCQlBc3NlcnQoZWxlbS0+b2JqdHlwZSA9PSBPYmpUeXBlT2JqZWN0KTsKKworCQkJaWYgKCFl bGVtLT52YWx1ZS5vYmplY3QtPnByZXNlbnQpCisJCQkJYXJyYXkgPSBmb3JlYWNoX2RlbGV0ZV9j dXJyZW50KGFycmF5LCBsYyk7CisJCX0KKworCX0KKworCW9iamVjdF9uYW1lID0gYXBwZW5kX29i amVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJcGFyYW0gPSBuZXdfb2Jq ZWN0KE9ialR5cGVBcnJheSwgb2JqZWN0X25hbWUpOworCXBhcmFtLT52YWx1ZS5hcnJheSA9IGFy cmF5OworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qIEFwcGVu ZCBhIGJvb2xlYW4gcGFyYW1ldGVyIHRvIGEgdHJlZSAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9i b29sX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBib29sIHZhbHVlKQorewor CU9iakVsZW0gICpwYXJhbTsKKwljaGFyCSAqb2JqZWN0X25hbWUgPSBzdWJfZm10OworCWJvb2wJ ICBpc19wcmVzZW50X2ZsYWcgPSBmYWxzZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCS8qIENo ZWNrIGlmIHRoZSBwcmVzZW50IGlzIHBhcnQgb2YgdGhlIGZvcm1hdCBzdHJpbmcgYW5kIHN0b3Jl IHRoZSBib29sZWFuIHZhbHVlKi8KKwlpZiAoc3RyY21wKHN1Yl9mbXQsICJwcmVzZW50IikgPT0g MCkKKwl7CisJCWlzX3ByZXNlbnRfZmxhZyA9IHRydWU7CisJCXRyZWUtPnByZXNlbnQgPSB2YWx1 ZTsKKwl9CisKKwlpZiAoIXZlcmJvc2UgJiYgIXRyZWUtPnByZXNlbnQpCisJCXJldHVybjsKKwor CWlmICghaXNfcHJlc2VudF9mbGFnKQorCQlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9f Zm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpU eXBlQm9vbCwgb2JqZWN0X25hbWUpOworCXBhcmFtLT52YWx1ZS5ib29sZWFuID0gdmFsdWU7CisJ YXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIEFwcGVuZCBh IGZsb2F0OCBwYXJhbWV0ZXIgdG8gYSB0cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX2Zs b2F0X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBmbG9hdDggdmFsdWUpCit7 CisJT2JqRWxlbQkgICAqcGFyYW07CisJY2hhcgkgICAqb2JqZWN0X25hbWU7CisKKwlBc3NlcnQo c3ViX2ZtdCk7CisKKwlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmlu Zyh0cmVlLCBzdWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlRmxvYXQsIG9i amVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUuZmx0ID0gdmFsdWU7CisJYXBwZW5kX3ByZW1hZGVf b2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIEFwcGVuZCB0aGUgaW5wdXQgZm9ybWF0 IHN0cmluZyB0byB0aGUgT2JqVHJlZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9mb3JtYXRf c3RyaW5nKE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQpCit7CisJaW50CQkJCWxlbjsKKwlj aGFyCQkgICAqZm10OworCisJaWYgKHRyZWUtPmZtdGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuOwor CisJZm10ID0gdHJlZS0+Zm10aW5mby0+ZGF0YTsKKwlsZW4gPSB0cmVlLT5mbXRpbmZvLT5sZW47 CisKKwkvKiBBZGQgYSBzZXBhcmF0b3IgaWYgbmVjZXNzYXJ5ICovCisJaWYgKGxlbiA+IDAgJiYg Zm10W2xlbiAtIDFdICE9ICcgJykKKwkJYXBwZW5kU3RyaW5nSW5mb1NwYWNlcyh0cmVlLT5mbXRp bmZvLCAxKTsKKworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcodHJlZS0+Zm10aW5mbywgc3ViX2Zt dCk7Cit9CisKKy8qIEFwcGVuZCBhIE5VTEwgb2JqZWN0IHRvIGEgdHJlZSAqLworc3RhdGljIHZv aWQKK2FwcGVuZF9udWxsX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10KQorewor CWNoYXIgKm9iamVjdF9uYW1lOworCisJQXNzZXJ0KHN1Yl9mbXQpOworCisJaWYgKCF2ZXJib3Nl KQorCQlyZXR1cm47CisKKwlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0 cmluZyh0cmVlLCBzdWJfZm10KTsKKworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBuZXdf b2JqZWN0KE9ialR5cGVOdWxsLCBvYmplY3RfbmFtZSkpOworfQorCisvKiBBcHBlbmQgYW4gb2Jq ZWN0IHBhcmFtZXRlciB0byBhIHRyZWUgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfb2JqZWN0X29i amVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBPYmpUcmVlICp2YWx1ZSkKK3sKKwlP YmpFbGVtCSpwYXJhbTsKKwljaGFyICAgKm9iamVjdF9uYW1lOworCisJQXNzZXJ0KHN1Yl9mbXQp OworCisJaWYgKCF2ZXJib3NlICYmICF2YWx1ZS0+cHJlc2VudCkKKwkJcmV0dXJuOworCisJb2Jq ZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7 CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZU9iamVjdCwgb2JqZWN0X25hbWUpOworCXBh cmFtLT52YWx1ZS5vYmplY3QgPSB2YWx1ZTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwg cGFyYW0pOworfQorCisvKgorICogUmV0dXJuIHRoZSBvYmplY3QgbmFtZSB3aGljaCBpcyBleHRy YWN0ZWQgZnJvbSB0aGUgaW5wdXQgIiole25hbWVbOi5dfSoiCisgKiBzdHlsZSBzdHJpbmcuIEFu ZCBhcHBlbmQgdGhlIGlucHV0IGZvcm1hdCBzdHJpbmcgdG8gdGhlIE9ialRyZWUuCisgKi8KK3N0 YXRpYyBjaGFyICoKK2FwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyhPYmpUcmVlICp0cmVl LCBjaGFyICpzdWJfZm10KQoreworCVN0cmluZ0luZm9EYXRhCW9iamVjdF9uYW1lOworCWNvbnN0 IGNoYXIJICAgKmVuZF9wdHI7CisJY29uc3QgY2hhcgkgICAqY3A7CisJYm9vbAkJCXN0YXJ0X2Nv cHkgPSBmYWxzZTsKKworCWlmIChzdWJfZm10ID09IE5VTEwgfHwgdHJlZS0+Zm10aW5mbyA9PSBO VUxMKQorCQlyZXR1cm4gc3ViX2ZtdDsKKworCWluaXRTdHJpbmdJbmZvKCZvYmplY3RfbmFtZSk7 CisJZW5kX3B0ciA9IHN1Yl9mbXQgKyBzdHJsZW4oc3ViX2ZtdCk7CisKKwlmb3IgKGNwID0gc3Vi X2ZtdDsgY3AgPCBlbmRfcHRyOyBjcCsrKQorCXsKKwkJaWYgKCpjcCA9PSAneycpCisJCXsKKwkJ CXN0YXJ0X2NvcHkgPSB0cnVlOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIXN0YXJ0X2Nv cHkpCisJCQljb250aW51ZTsKKworCQlpZiAoKmNwID09ICc6JyB8fCAqY3AgPT0gJ30nKQorCQkJ YnJlYWs7CisKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybygmb2JqZWN0X25hbWUsICpjcCk7 CisJfQorCisJaWYgKG9iamVjdF9uYW1lLmxlbiA9PSAwKQorCQllbG9nKEVSUk9SLCAib2JqZWN0 IG5hbWUgbm90IGZvdW5kIik7CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10 KTsKKworCXJldHVybiBvYmplY3RfbmFtZS5kYXRhOworfQorCisvKiBBcHBlbmQgYSBwcmVhbGxv Y2F0ZWQgcGFyYW1ldGVyIHRvIGEgdHJlZSAqLworc3RhdGljIGlubGluZSB2b2lkCithcHBlbmRf cHJlbWFkZV9vYmplY3QoT2JqVHJlZSAqdHJlZSwgT2JqRWxlbSAqZWxlbSkKK3sKKwlzbGlzdF9w dXNoX2hlYWQoJnRyZWUtPnBhcmFtcywgJmVsZW0tPm5vZGUpOworCXRyZWUtPm51bVBhcmFtcysr OworfQorCisvKiBBcHBlbmQgYSBzdHJpbmcgcGFyYW1ldGVyIHRvIGEgdHJlZSAqLworc3RhdGlj IHZvaWQKK2FwcGVuZF9zdHJpbmdfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQs IGNoYXIgKnZhbHVlKQoreworCU9iakVsZW0JICAgKnBhcmFtOworCWNoYXIJICAgKm9iamVjdF9u YW1lOworCisJQXNzZXJ0KHN1Yl9mbXQpOworCisJaWYgKCF2ZXJib3NlICYmICh2YWx1ZSA9PSBO VUxMIHx8IHZhbHVlWzBdID09ICdcMCcpKQorCQlyZXR1cm47CisKKwlvYmplY3RfbmFtZSA9IGFw cGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXBhcmFtID0g bmV3X29iamVjdChPYmpUeXBlU3RyaW5nLCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLnN0 cmluZyA9IHZhbHVlOworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisK Ky8qCisgKiBTaW1pbGFyIHRvIGZvcm1hdF90eXBlX2V4dGVuZGVkLCBleGNlcHQgd2UgcmV0dXJu IGVhY2ggYml0IG9mIGluZm9ybWF0aW9uCisgKiBzZXBhcmF0ZWx5OgorICoKKyAqIC0gbnNwaWQg aXMgdGhlIHNjaGVtYSBPSUQuICBGb3IgY2VydGFpbiBTUUwtc3RhbmRhcmQgdHlwZXMgd2hpY2gg aGF2ZSB3ZWlyZAorICogICB0eXBtb2QgcnVsZXMsIHdlIHJldHVybiBJbnZhbGlkT2lkOyBjYWxs ZXIgaXMgZXhwZWN0ZWQgdG8gbm90IHNjaGVtYS0KKyAqICAgcXVhbGlmeSB0aGUgbmFtZSBub3Ig YWRkIHF1b3RlcyB0byB0aGUgdHlwZSBuYW1lIGluIHRoaXMgY2FzZS4KKyAqCisgKiAtIHR5cG5h bWUgaXMgc2V0IHRvIHRoZSB0eXBlIG5hbWUsIHdpdGhvdXQgcXVvdGVzCisgKgorICogLSB0eXBl bW9kc3RyIGlzIHNldCB0byB0aGUgdHlwZW1vZCwgaWYgYW55LCBhcyBhIHN0cmluZyB3aXRoIHBh cmVucworICoKKyAqIC0gdHlwYXJyYXkgaW5kaWNhdGVzIHdoZXRoZXIgW11zIG11c3QgYmUgYWRk ZWQKKyAqCisgKiBXZSBkb24ndCB0cnkgdG8gZGVjb2RlIHR5cGUgbmFtZXMgdG8gdGhlaXIgc3Rh bmRhcmQtbWFuZGF0ZWQgbmFtZXMsIGV4Y2VwdAorICogaW4gdGhlIGNhc2VzIG9mIHR5cGVzIHdp dGggdW51c3VhbCB0eXBtb2QgcnVsZXMuCisgKi8KK3N0YXRpYyB2b2lkCitmb3JtYXRfdHlwZV9k ZXRhaWxlZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QsCisJCQkJCSBPaWQgKm5zcGlkLCBj aGFyICoqdHlwbmFtZSwgY2hhciAqKnR5cGVtb2RzdHIsCisJCQkJCSBib29sICp0eXBhcnJheSkK K3sKKwlIZWFwVHVwbGUJCXR1cGxlOworCUZvcm1fcGdfdHlwZQl0eXBlZm9ybTsKKwlPaWQJCQkJ YXJyYXlfYmFzZV90eXBlOworCisJdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2Jq ZWN0SWRHZXREYXR1bSh0eXBlX29pZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlICV1IiwgdHlwZV9v aWQpOworCisJdHlwZWZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHVwbGUpOworCisJ LyoKKwkgKiBDaGVjayBpZiBpdCdzIGEgcmVndWxhciAodmFyaWFibGUgbGVuZ3RoKSBhcnJheSB0 eXBlLiAgQXMgYWJvdmUsCisJICogZml4ZWQtbGVuZ3RoIGFycmF5IHR5cGVzIHN1Y2ggYXMgIm5h bWUiIHNob3VsZG4ndCBnZXQgZGVjb25zdHJ1Y3RlZC4KKwkgKi8KKwlhcnJheV9iYXNlX3R5cGUg PSB0eXBlZm9ybS0+dHlwZWxlbTsKKworCSp0eXBhcnJheSA9IChJc1RydWVBcnJheVR5cGUodHlw ZWZvcm0pICYmIHR5cGVmb3JtLT50eXBzdG9yYWdlICE9IFRZUFNUT1JBR0VfUExBSU4pOworCisJ aWYgKCp0eXBhcnJheSkKKwl7CisJCS8qIFN3aXRjaCBvdXIgYXR0ZW50aW9uIHRvIHRoZSBhcnJh eSBlbGVtZW50IHR5cGUgKi8KKwkJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKKwkJdHVwbGUgPSBT ZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXREYXR1bShhcnJheV9iYXNlX3R5cGUp KTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlKSkKKwkJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlICV1IiwgdHlwZV9vaWQpOworCisJCXR5cGVmb3JtID0g KEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR1cGxlKTsKKwkJdHlwZV9vaWQgPSBhcnJheV9iYXNl X3R5cGU7CisJfQorCisJLyoKKwkgKiBTcGVjaWFsLWNhc2UgY3JvY2sgZm9yIHR5cGVzIHdpdGgg c3RyYW5nZSB0eXBtb2QgcnVsZXMgd2hlcmUgd2UgcHV0CisJICogdHlwbW9kIGF0IHRoZSBtaWRk bGUgb2YgbmFtZShlLmcuIFRJTUUoNikgd2l0aCB0aW1lIHpvbmUgKS4gV2UgY2Fubm90CisJICog c2NoZW1hLXF1YWxpZnkgbm9yIGFkZCBxdW90ZXMgdG8gdGhlIHR5cGUgbmFtZSBpbiB0aGVzZSBj YXNlcy4KKwkgKi8KKwlpZiAodHlwZV9vaWQgPT0gSU5URVJWQUxPSUQgfHwKKwkJdHlwZV9vaWQg PT0gVElNRVNUQU1QT0lEIHx8CisJCXR5cGVfb2lkID09IFRJTUVTVEFNUFRaT0lEIHx8CisJCXR5 cGVfb2lkID09IFRJTUVPSUQgfHwKKwkJdHlwZV9vaWQgPT0gVElNRVRaT0lEKQorCXsKKwkJc3dp dGNoICh0eXBlX29pZCkKKwkJeworCQkJY2FzZSBJTlRFUlZBTE9JRDoKKwkJCQkqdHlwbmFtZSA9 IHBzdHJkdXAoIklOVEVSVkFMIik7CisJCQkJYnJlYWs7CisJCQljYXNlIFRJTUVTVEFNUFRaT0lE OgorCQkJCWlmICh0eXBlbW9kIDwgMCkKKwkJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1FU1RB TVAgV0lUSCBUSU1FIFpPTkUiKTsKKwkJCQllbHNlCisJCQkJCS8qIG90aGVyd2lzZSwgV0lUSCBU WiBpcyBhZGRlZCBieSB0eXBtb2QuICovCisJCQkJCSp0eXBuYW1lID0gcHN0cmR1cCgiVElNRVNU QU1QIik7CisJCQkJYnJlYWs7CisJCQljYXNlIFRJTUVTVEFNUE9JRDoKKwkJCQkqdHlwbmFtZSA9 IHBzdHJkdXAoIlRJTUVTVEFNUCIpOworCQkJCWJyZWFrOworCQkJY2FzZSBUSU1FVFpPSUQ6CisJ CQkJaWYgKHR5cGVtb2QgPCAwKQorCQkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJTUUgV0lUSCBU SU1FIFpPTkUiKTsKKwkJCQllbHNlCisJCQkJCS8qIG90aGVyd2lzZSwgV0lUSCBUWiBpcyBhZGRl ZCBieSB0eXBtb2RlLiAqLworCQkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJTUUiKTsKKwkJCQli cmVhazsKKwkJCWNhc2UgVElNRU9JRDoKKwkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJTUUiKTsK KwkJCQlicmVhazsKKwkJfQorCQkqbnNwaWQgPSBJbnZhbGlkT2lkOworCX0KKwllbHNlCisJewor CQkvKgorCQkgKiBObyBhZGRpdGlvbmFsIHByb2Nlc3NpbmcgaXMgcmVxdWlyZWQgZm9yIG90aGVy IHR5cGVzLCBzbyBnZXQgdGhlIHR5cGUKKwkJICogbmFtZSBhbmQgc2NoZW1hIGRpcmVjdGx5IGZy b20gdGhlIGNhdGFsb2cuCisJCSAqLworCQkqbnNwaWQgPSB0eXBlZm9ybS0+dHlwbmFtZXNwYWNl OworCQkqdHlwbmFtZSA9IHBzdHJkdXAoTmFtZVN0cih0eXBlZm9ybS0+dHlwbmFtZSkpOworCX0K KworCWlmICh0eXBlbW9kID49IDApCisJCSp0eXBlbW9kc3RyID0gcHJpbnRUeXBtb2QoIiIsIHR5 cGVtb2QsIHR5cGVmb3JtLT50eXBtb2RvdXQpOworCWVsc2UKKwkJKnR5cGVtb2RzdHIgPSBwc3Ry ZHVwKCIiKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7Cit9CisKKy8qCisgKiBSZXR1cm4g dGhlIGRlZmF1bHRzIHZhbHVlcyBvZiBhcmd1bWVudHMgdG8gYSBmdW5jdGlvbiwgYXMgYSBsaXN0 IG9mCisgKiBkZXBhcnNlZCBleHByZXNzaW9ucy4KKyAqLworc3RhdGljIExpc3QgKgorRnVuY3Rp b25HZXREZWZhdWx0cyh0ZXh0ICpwcm9hcmdkZWZhdWx0cykKK3sKKwlMaXN0ICAgKm5vZGVkZWZz OworCUxpc3QgICAqc3RyZGVmcyA9IE5JTDsKKwlMaXN0Q2VsbCAqY2VsbDsKKworCW5vZGVkZWZz ID0gKExpc3QgKikgc3RyaW5nVG9Ob2RlKFRleHREYXR1bUdldENTdHJpbmcocHJvYXJnZGVmYXVs dHMpKTsKKwlpZiAoIUlzQShub2RlZGVmcywgTGlzdCkpCisJCWVsb2coRVJST1IsICJwcm9hcmdk ZWZhdWx0cyBpcyBub3QgYSBsaXN0Iik7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGVkZWZzKQorCXsK KwkJTm9kZSAgICpvbmVkZWYgPSBsZmlyc3QoY2VsbCk7CisKKwkJc3RyZGVmcyA9IGxhcHBlbmQo c3RyZGVmcywgZGVwYXJzZV9leHByZXNzaW9uKG9uZWRlZiwgTklMLCBmYWxzZSwgZmFsc2UpKTsK Kwl9CisKKwlyZXR1cm4gc3RyZGVmczsKK30KKworLyoKKyAqIFJldHVybiB0aGUgc3RyaW5nIHJl cHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBSRUxQRVJTSVNURU5DRSB2YWx1ZS4KKyAqLworc3Rh dGljIGNoYXIgKgorZ2V0X3BlcnNpc3RlbmNlX3N0cihjaGFyIHBlcnNpc3RlbmNlKQoreworCXN3 aXRjaCAocGVyc2lzdGVuY2UpCisJeworCQljYXNlIFJFTFBFUlNJU1RFTkNFX1RFTVA6CisJCQly ZXR1cm4gIlRFTVBPUkFSWSI7CisJCWNhc2UgUkVMUEVSU0lTVEVOQ0VfVU5MT0dHRUQ6CisJCQly ZXR1cm4gIlVOTE9HR0VEIjsKKwkJY2FzZSBSRUxQRVJTSVNURU5DRV9QRVJNQU5FTlQ6CisJCQly ZXR1cm4gIiI7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBwZXJzaXN0 ZW5jZSBtYXJraW5nICVjIiwgcGVyc2lzdGVuY2UpOworCQkJcmV0dXJuICIiOwkJLyogbWFrZSBj b21waWxlciBoYXBweSAqLworCX0KK30KKworLyogQWxsb2NhdGUgYSBuZXcgcGFyYW1ldGVyICov CitzdGF0aWMgT2JqRWxlbSAqCituZXdfb2JqZWN0KE9ialR5cGUgdHlwZSwgY2hhciAqbmFtZSkK K3sKKwlPYmpFbGVtCSpwYXJhbTsKKworCXBhcmFtID0gcGFsbG9jMChzaXplb2YoT2JqRWxlbSkp OworCXBhcmFtLT5uYW1lID0gbmFtZTsKKwlwYXJhbS0+b2JqdHlwZSA9IHR5cGU7CisKKwlyZXR1 cm4gcGFyYW07Cit9CisKKy8qIEFsbG9jYXRlIGEgbmV3IG9iamVjdCBwYXJhbWV0ZXIgKi8KK3N0 YXRpYyBPYmpFbGVtICoKK25ld19vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnZhbHVlKQoreworCU9i akVsZW0JKnBhcmFtOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVPYmplY3QsIE5VTEwp OworCXBhcmFtLT52YWx1ZS5vYmplY3QgPSB2YWx1ZTsKKworCXJldHVybiBwYXJhbTsKK30KKwor LyoKKyAqIEFsbG9jYXRlIGEgbmV3IG9iamVjdCB0cmVlIHRvIHN0b3JlIHBhcmFtZXRlciB2YWx1 ZXMuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlKGNoYXIgKmZtdCkKK3sKKwlP YmpUcmVlCSpwYXJhbXM7CisKKwlwYXJhbXMgPSBwYWxsb2MwKHNpemVvZihPYmpUcmVlKSk7CisJ cGFyYW1zLT5wcmVzZW50ID0gdHJ1ZTsKKwlzbGlzdF9pbml0KCZwYXJhbXMtPnBhcmFtcyk7CisK KwlpZiAoZm10KQorCXsKKwkJcGFyYW1zLT5mbXRpbmZvID0gbWFrZVN0cmluZ0luZm8oKTsKKwkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZyhwYXJhbXMtPmZtdGluZm8sIGZtdCk7CisJfQorCisJcmV0 dXJuIHBhcmFtczsKK30KKworLyoKKyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0dXAgJXt9RCBh bmQgJXt9TyBlbGVtZW50cy4KKyAqCisgKiBFbGVtZW50cyAic2NoZW1hbmFtZSIgYW5kICJvYmpu YW1lIiBhcmUgc2V0LiAgSWYgdGhlIG5hbWVzcGFjZSBPSUQKKyAqIGNvcnJlc3BvbmRzIHRvIGEg dGVtcCBzY2hlbWEsIHRoYXQncyBzZXQgdG8gInBnX3RlbXAiLgorICoKKyAqIFRoZSBkaWZmZXJl bmNlIGJldHdlZW4gdGhvc2UgdHdvIGVsZW1lbnQgdHlwZXMgaXMgd2hldGhlciB0aGUgb2JqbmFt ZSB3aWxsCisgKiBiZSBxdW90ZWQgYXMgYW4gaWRlbnRpZmllciBvciBub3QsIHdoaWNoIGlzIG5v dCBzb21ldGhpbmcgdGhhdCB0aGlzIHJvdXRpbmUKKyAqIGNvbmNlcm5zIGl0c2VsZiB3aXRoOyB0 aGF0IHdpbGwgYmUgdXAgdG8gdGhlIGV4cGFuZCBmdW5jdGlvbi4KKyAqLworc3RhdGljIE9ialRy ZWUgKgorbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKE9pZCBuc3BpZCwgY2hhciAqbmFtZSkKK3sK KwlPYmpUcmVlCSpxdWFsaWZpZWQ7CisJY2hhcgkgICAqbmFtZXNwYWNlOworCisJaWYgKGlzQW55 VGVtcE5hbWVzcGFjZShuc3BpZCkpCisJCW5hbWVzcGFjZSA9IHBzdHJkdXAoInBnX3RlbXAiKTsK KwllbHNlCisJCW5hbWVzcGFjZSA9IGdldF9uYW1lc3BhY2VfbmFtZShuc3BpZCk7CisKKwlxdWFs aWZpZWQgPSBuZXdfb2JqdHJlZV9WQShOVUxMLCAyLAorCQkJCQkJCSAgInNjaGVtYW5hbWUiLCBP YmpUeXBlU3RyaW5nLCBuYW1lc3BhY2UsCisJCQkJCQkJICAib2JqbmFtZSIsIE9ialR5cGVTdHJp bmcsIHBzdHJkdXAobmFtZSkpOworCisJcmV0dXJuIHF1YWxpZmllZDsKK30KKworLyoKKyAqIEEg aGVscGVyIHJvdXRpbmUgdG8gc2V0dXAgJXt9RCBhbmQgJXt9TyBlbGVtZW50cywgd2l0aCB0aGUg b2JqZWN0IHNwZWNpZmllZAorICogYnkgY2xhc3NJZC9vYmpJZC4KKyAqCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPaWQgY2xhc3NJZCwgT2lkIG9i amVjdElkKQoreworCU9ialRyZWUJKnF1YWxpZmllZDsKKwlSZWxhdGlvbgljYXRhbG9nOworCUhl YXBUdXBsZQljYXRvYmo7CisJRGF0dW0JCW9iam5zcDsKKwlEYXR1bQkJb2JqbmFtZTsKKwlBdHRy TnVtYmVyCUFudW1fbmFtZTsKKwlBdHRyTnVtYmVyCUFudW1fbmFtZXNwYWNlOworCUF0dHJOdW1i ZXIJQW51bV9vaWQgPSBnZXRfb2JqZWN0X2F0dG51bV9vaWQoY2xhc3NJZCk7CisJYm9vbAkJaXNu dWxsOworCisJY2F0YWxvZyA9IHRhYmxlX29wZW4oY2xhc3NJZCwgQWNjZXNzU2hhcmVMb2NrKTsK KworCWNhdG9iaiA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQoY2F0YWxvZywgQW51bV9vaWQs IG9iamVjdElkKTsKKwlpZiAoIWNhdG9iaikKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBm YWlsZWQgZm9yIG9iamVjdCAldSBvZiBjYXRhbG9nIFwiJXNcIiIsCisJCQkgb2JqZWN0SWQsIFJl bGF0aW9uR2V0UmVsYXRpb25OYW1lKGNhdGFsb2cpKTsKKwlBbnVtX25hbWUgPSBnZXRfb2JqZWN0 X2F0dG51bV9uYW1lKGNsYXNzSWQpOworCUFudW1fbmFtZXNwYWNlID0gZ2V0X29iamVjdF9hdHRu dW1fbmFtZXNwYWNlKGNsYXNzSWQpOworCisJb2JqbnNwID0gaGVhcF9nZXRhdHRyKGNhdG9iaiwg QW51bV9uYW1lc3BhY2UsIFJlbGF0aW9uR2V0RGVzY3IoY2F0YWxvZyksCisJCQkJCQkgICZpc251 bGwpOworCWlmIChpc251bGwpCisJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIE5VTEwgbmFtZXNw YWNlIik7CisKKwlvYmpuYW1lID0gaGVhcF9nZXRhdHRyKGNhdG9iaiwgQW51bV9uYW1lLCBSZWxh dGlvbkdldERlc2NyKGNhdGFsb2cpLAorCQkJCQkJICAgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkK KwkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgTlVMTCBuYW1lIik7CisKKwlxdWFsaWZpZWQgPSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoRGF0dW1HZXRPYmplY3RJZChvYmpuc3ApLAorCQkJCQkJ CQkJCSBOYW1lU3RyKCpEYXR1bUdldE5hbWUob2JqbmFtZSkpKTsKKwl0YWJsZV9jbG9zZShjYXRh bG9nLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHF1YWxpZmllZDsKK30KKworLyoKKyAq IEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0dXAgJXt9VCBlbGVtZW50cy4KKyAqLworc3RhdGljIE9i alRyZWUgKgorbmV3X29ianRyZWVfZm9yX3R5cGUoT2lkIHR5cGVJZCwgaW50MzIgdHlwbW9kKQor eworCU9ialRyZWUJKnR5cGVQYXJhbTsKKwlPaWQJCQl0eXBuc3BpZDsKKwljaGFyCSAgICp0eXBu c3A7CisJY2hhcgkgICAqdHlwZW5hbWUgPSBOVUxMOworCWNoYXIJICAgKnR5cG1vZHN0cjsKKwli b29sCQl0eXBhcnJheTsKKworCWZvcm1hdF90eXBlX2RldGFpbGVkKHR5cGVJZCwgdHlwbW9kLAor CQkJCQkJICZ0eXBuc3BpZCwgJnR5cGVuYW1lLCAmdHlwbW9kc3RyLCAmdHlwYXJyYXkpOworCisJ aWYgKE9pZElzVmFsaWQodHlwbnNwaWQpKQorCQl0eXBuc3AgPSBnZXRfbmFtZXNwYWNlX25hbWVf b3JfdGVtcCh0eXBuc3BpZCk7CisJZWxzZQorCQl0eXBuc3AgPSBwc3RyZHVwKCIiKTsKKworCXR5 cGVQYXJhbSA9IG5ld19vYmp0cmVlX1ZBKE5VTEwsIDQsCisJCQkJCQkJICAgInNjaGVtYW5hbWUi LCBPYmpUeXBlU3RyaW5nLCB0eXBuc3AsCisJCQkJCQkJICAgInR5cGVuYW1lIiwgT2JqVHlwZVN0 cmluZywgdHlwZW5hbWUsCisJCQkJCQkJICAgInR5cG1vZCIsIE9ialR5cGVTdHJpbmcsIHR5cG1v ZHN0ciwKKwkJCQkJCQkgICAidHlwYXJyYXkiLCBPYmpUeXBlQm9vbCwgdHlwYXJyYXkpOworCisJ cmV0dXJuIHR5cGVQYXJhbTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IG9iamVjdCB0cmVl IHRvIHN0b3JlIHBhcmFtZXRlciB2YWx1ZXMgLS0gdmFyYXJncyB2ZXJzaW9uLgorICoKKyAqIFRo ZSAiZm10IiBhcmd1bWVudCBpcyB1c2VkIHRvIGFwcGVuZCBhcyBhICJmbXQiIGVsZW1lbnQgaW4g dGhlIG91dHB1dCBibG9iLgorICogbnVtb2JqcyBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBleHRy YSBlbGVtZW50cyB0byBhcHBlbmQ7IGZvciBlYWNoIG9uZSwgYQorICogbmFtZSAoc3RyaW5nKSwg dHlwZSAoZnJvbSB0aGUgT2JqVHlwZSBlbnVtKSBhbmQgdmFsdWUgbXVzdCBiZSBzdXBwbGllZC4g IFRoZQorICogdmFsdWUgbXVzdCBtYXRjaCB0aGUgdHlwZSBnaXZlbjsgZm9yIGluc3RhbmNlLCBP YmpUeXBlSW50ZWdlciByZXF1aXJlcyBhbgorICogaW50NjQsIE9ialR5cGVTdHJpbmcgcmVxdWly ZXMgYSBjaGFyICosIE9ialR5cGVBcnJheSByZXF1aXJlcyBhIGxpc3QgKG9mCisgKiBPYmpFbGVt KSwgT2JqVHlwZU9iamVjdCByZXF1aXJlcyBhbiBPYmpUcmVlLCBhbmQgc28gb24uICBFYWNoIGVs ZW1lbnQgdHlwZSAqCisgKiBtdXN0IG1hdGNoIHRoZSBjb252ZXJzaW9uIHNwZWNpZmllciBnaXZl biBpbiB0aGUgZm9ybWF0IHN0cmluZywgYXMgZGVzY3JpYmVkCisgKiBpbiBkZGxfZGVwYXJzZV9l eHBhbmRfY29tbWFuZCwgcS52LgorICoKKyAqIE5vdGUgd2UgZG9uJ3QgaGF2ZSB0aGUgbHV4dXJ5 IG9mIHNwcmludGYtbGlrZSBjb21waWxlciB3YXJuaW5ncyBmb3IKKyAqIG1hbGZvcm1lZCBhcmd1 bWVudCBsaXN0cy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfVkEoY2hhciAq Zm10LCBpbnQgbnVtb2JqcywuLi4pCit7CisJT2JqVHJlZQkgICAqdHJlZTsKKwl2YV9saXN0CQlh cmdzOworCWludAkJCWk7CisKKwkvKiBTZXQgdXAgdGhlIHRvcGxldmVsIG9iamVjdCBhbmQgaXRz ICJmbXQiICovCisJdHJlZSA9IG5ld19vYmp0cmVlKGZtdCk7CisKKwkvKiBBbmQgcHJvY2VzcyB0 aGUgZ2l2ZW4gdmFyYXJncyAqLworCXZhX3N0YXJ0KGFyZ3MsIG51bW9ianMpOworCWZvciAoaSA9 IDA7IGkgPCBudW1vYmpzOyBpKyspCisJeworCQljaGFyCSAgICpuYW1lOworCQlPYmpUeXBlCQl0 eXBlOworCQlPYmpFbGVtCSAgICplbGVtOworCisJCW5hbWUgPSB2YV9hcmcoYXJncywgY2hhciAq KTsKKwkJdHlwZSA9IHZhX2FyZyhhcmdzLCBPYmpUeXBlKTsKKwkJZWxlbSA9IG5ld19vYmplY3Qo dHlwZSwgTlVMTCk7CisKKwkJLyoKKwkJICogRm9yIGFsbCBvdGhlciBwYXJhbSB0eXBlcyB0aGVy ZSBtdXN0IGJlIGEgdmFsdWUgaW4gdGhlIHZhcmFyZ3MuCisJCSAqIEZldGNoIGl0IGFuZCBhZGQg dGhlIGZ1bGx5IGZvcm1lZCBzdWJvYmplY3QgaW50byB0aGUgbWFpbiBvYmplY3QuCisJCSAqLwor CQlzd2l0Y2ggKHR5cGUpCisJCXsKKwkJCWNhc2UgT2JqVHlwZU51bGw6CisJCQkJLyogTnVsbCBw YXJhbXMgZG9uJ3QgaGF2ZSBhIHZhbHVlIChvYnZpb3VzbHkpICovCisJCQkJYnJlYWs7CisJCQlj YXNlIE9ialR5cGVCb29sOgorCQkJCWVsZW0tPnZhbHVlLmJvb2xlYW4gPSB2YV9hcmcoYXJncywg aW50KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZVN0cmluZzoKKwkJCQllbGVtLT52YWx1 ZS5zdHJpbmcgPSB2YV9hcmcoYXJncywgY2hhciAqKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2Jq VHlwZUFycmF5OgorCQkJCWVsZW0tPnZhbHVlLmFycmF5ID0gdmFfYXJnKGFyZ3MsIExpc3QgKik7 CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVJbnRlZ2VyOgorCQkJCWVsZW0tPnZhbHVlLmlu dGVnZXIgPSB2YV9hcmcoYXJncywgaW50NjQpOworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBl RmxvYXQ6CisJCQkJZWxlbS0+dmFsdWUuZmx0ID0gdmFfYXJnKGFyZ3MsIGRvdWJsZSk7CisJCQkJ YnJlYWs7CisJCQljYXNlIE9ialR5cGVPYmplY3Q6CisJCQkJZWxlbS0+dmFsdWUub2JqZWN0ID0g dmFfYXJnKGFyZ3MsIE9ialRyZWUgKik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVs b2coRVJST1IsICJpbnZhbGlkIE9ialRyZWUgZWxlbWVudCB0eXBlICVkIiwgdHlwZSk7CisJCX0K KworCQllbGVtLT5uYW1lID0gbmFtZTsKKwkJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIGVs ZW0pOworCX0KKworCXZhX2VuZChhcmdzKTsKKwlyZXR1cm4gdHJlZTsKK30KKworLyogQWxsb2Nh dGUgYSBuZXcgc3RyaW5nIG9iamVjdCAqLworc3RhdGljIE9iakVsZW0gKgorbmV3X3N0cmluZ19v YmplY3QoY2hhciAqdmFsdWUpCit7CisJT2JqRWxlbSAgICAqcGFyYW07CisKKwlBc3NlcnQodmFs dWUpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVTdHJpbmcsIE5VTEwpOworCXBhcmFt LT52YWx1ZS5zdHJpbmcgPSB2YWx1ZTsKKworCXJldHVybiBwYXJhbTsKK30KKworLyoKKyAqIFBy b2Nlc3MgdGhlIHByZS1idWlsdCBmb3JtYXQgc3RyaW5nIGZyb20gdGhlIE9ialRyZWUgaW50byB0 aGUgb3V0cHV0IHBhcnNlCisgKiBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK29ianRyZWVfZm10 X3RvX2pzb25iX2VsZW1lbnQoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgT2JqVHJlZSAqdHJlZSkK K3sKKwlKc29uYlZhbHVlCWtleTsKKwlKc29uYlZhbHVlCXZhbDsKKworCWlmICh0cmVlLT5mbXRp bmZvID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFB1c2ggdGhlIGtleSBmaXJzdCAqLworCWtl eS50eXBlID0gamJ2U3RyaW5nOworCWtleS52YWwuc3RyaW5nLnZhbCA9ICJmbXQiOworCWtleS52 YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihrZXkudmFsLnN0cmluZy52YWwpOworCXB1c2hKc29uYlZh bHVlKCZzdGF0ZSwgV0pCX0tFWSwgJmtleSk7CisKKwkvKiBUaGVuIHByb2Nlc3MgdGhlIHByZS1i dWlsdCBmb3JtYXQgc3RyaW5nICovCisJdmFsLnR5cGUgPSBqYnZTdHJpbmc7CisJdmFsLnZhbC5z dHJpbmcubGVuID0gdHJlZS0+Zm10aW5mby0+bGVuOworCXZhbC52YWwuc3RyaW5nLnZhbCA9IHRy ZWUtPmZtdGluZm8tPmRhdGE7CisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfVkFMVUUsICZ2 YWwpOworfQorCisvKgorICogQ3JlYXRlIGEgSlNPTkIgcmVwcmVzZW50YXRpb24gZnJvbSBhbiBP YmpUcmVlLgorICovCitzdGF0aWMgSnNvbmIgKgorb2JqdHJlZV90b19qc29uYihPYmpUcmVlICp0 cmVlKQoreworCUpzb25iVmFsdWUgKnZhbHVlOworCisJdmFsdWUgPSBvYmp0cmVlX3RvX2pzb25i X3JlYyh0cmVlLCBOVUxMKTsKKwlyZXR1cm4gSnNvbmJWYWx1ZVRvSnNvbmIodmFsdWUpOworfQor CisvKgorICogSGVscGVyIGZvciBvYmp0cmVlX3RvX2pzb25iOiBwcm9jZXNzIGFuIGluZGl2aWR1 YWwgZWxlbWVudCBmcm9tIGFuIG9iamVjdCBvcgorICogYW4gYXJyYXkgaW50byB0aGUgb3V0cHV0 IHBhcnNlIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorb2JqdHJlZV90b19qc29uYl9lbGVtZW50 KEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIE9iakVsZW0gKm9iamVjdCwKKwkJCQkJCSBKc29uYkl0 ZXJhdG9yVG9rZW4gZWxlbV90b2tlbikKK3sKKwlMaXN0Q2VsbCAgICpjZWxsOworCUpzb25iVmFs dWUJdmFsOworCisJc3dpdGNoIChvYmplY3QtPm9ianR5cGUpCisJeworCQljYXNlIE9ialR5cGVO dWxsOgorCQkJdmFsLnR5cGUgPSBqYnZOdWxsOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBl bGVtX3Rva2VuLCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZVN0cmluZzoKKwkJ CXZhbC50eXBlID0gamJ2U3RyaW5nOworCQkJdmFsLnZhbC5zdHJpbmcubGVuID0gc3RybGVuKG9i amVjdC0+dmFsdWUuc3RyaW5nKTsKKwkJCXZhbC52YWwuc3RyaW5nLnZhbCA9IG9iamVjdC0+dmFs dWUuc3RyaW5nOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rva2VuLCAmdmFsKTsK KwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUludGVnZXI6CisJCQl2YWwudHlwZSA9IGpidk51 bWVyaWM7CisJCQl2YWwudmFsLm51bWVyaWMgPSAoTnVtZXJpYykKKwkJCQlEYXR1bUdldE51bWVy aWMoRGlyZWN0RnVuY3Rpb25DYWxsMShpbnQ4X251bWVyaWMsCisJCQkJCQkJCQkJCQkJb2JqZWN0 LT52YWx1ZS5pbnRlZ2VyKSk7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4s ICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlRmxvYXQ6CisJCQl2YWwudHlwZSA9 IGpidk51bWVyaWM7CisJCQl2YWwudmFsLm51bWVyaWMgPSAoTnVtZXJpYykKKwkJCQlEYXR1bUdl dE51bWVyaWMoRGlyZWN0RnVuY3Rpb25DYWxsMShmbG9hdDhfbnVtZXJpYywKKwkJCQkJCQkJCQkJ CQlvYmplY3QtPnZhbHVlLmludGVnZXIpKTsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxl bV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVCb29sOgorCQkJdmFs LnR5cGUgPSBqYnZCb29sOworCQkJdmFsLnZhbC5ib29sZWFuID0gb2JqZWN0LT52YWx1ZS5ib29s ZWFuOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rva2VuLCAmdmFsKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgT2JqVHlwZU9iamVjdDoKKwkJCS8qIFJlY3Vyc2l2ZWx5IGFkZCB0aGUg b2JqZWN0IGludG8gdGhlIGV4aXN0aW5nIHBhcnNlIHN0YXRlICovCisJCQlvYmp0cmVlX3RvX2pz b25iX3JlYyhvYmplY3QtPnZhbHVlLm9iamVjdCwgc3RhdGUpOworCQkJYnJlYWs7CisKKwkJY2Fz ZSBPYmpUeXBlQXJyYXk6CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9BUlJB WSwgTlVMTCk7CisJCQlmb3JlYWNoKGNlbGwsIG9iamVjdC0+dmFsdWUuYXJyYXkpCisJCQl7CisJ CQkJT2JqRWxlbSAgICplbGVtID0gbGZpcnN0KGNlbGwpOworCisJCQkJb2JqdHJlZV90b19qc29u Yl9lbGVtZW50KHN0YXRlLCBlbGVtLCBXSkJfRUxFTSk7CisJCQl9CisJCQlwdXNoSnNvbmJWYWx1 ZSgmc3RhdGUsIFdKQl9FTkRfQVJSQVksIE5VTEwpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoK KwkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgb2JqZWN0IHR5cGUgJWQiLCBvYmplY3QtPm9i anR5cGUpOworCQkJYnJlYWs7CisJfQorfQorCisvKgorICogUmVjdXJzaXZlIGhlbHBlciBmb3Ig b2JqdHJlZV90b19qc29uYi4KKyAqLworc3RhdGljIEpzb25iVmFsdWUgKgorb2JqdHJlZV90b19q c29uYl9yZWMoT2JqVHJlZSAqdHJlZSwgSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSkKK3sKKwlzbGlz dF9pdGVyCWl0ZXI7CisKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1Qs IE5VTEwpOworCisJb2JqdHJlZV9mbXRfdG9fanNvbmJfZWxlbWVudChzdGF0ZSwgdHJlZSk7CisK KwlzbGlzdF9mb3JlYWNoKGl0ZXIsICZ0cmVlLT5wYXJhbXMpCisJeworCQlPYmpFbGVtCSpvYmpl Y3QgPSBzbGlzdF9jb250YWluZXIoT2JqRWxlbSwgbm9kZSwgaXRlci5jdXIpOworCQlKc29uYlZh bHVlCWtleTsKKworCQkvKiBQdXNoIHRoZSBrZXkgZmlyc3QgKi8KKwkJa2V5LnR5cGUgPSBqYnZT dHJpbmc7CisJCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihvYmplY3QtPm5hbWUpOworCQlr ZXkudmFsLnN0cmluZy52YWwgPSBvYmplY3QtPm5hbWU7CisJCXB1c2hKc29uYlZhbHVlKCZzdGF0 ZSwgV0pCX0tFWSwgJmtleSk7CisKKwkJLyogVGhlbiBwcm9jZXNzIHRoZSB2YWx1ZSBhY2NvcmRp bmcgdG8gaXRzIHR5cGUgKi8KKwkJb2JqdHJlZV90b19qc29uYl9lbGVtZW50KHN0YXRlLCBvYmpl Y3QsIFdKQl9WQUxVRSk7CisJfQorCisJcmV0dXJuIHB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pC X0VORF9PQkpFQ1QsIE5VTEwpOworfQorCisvKgorICogU3Vicm91dGluZSBmb3IgQ1JFQVRFIFRB QkxFL0NSRUFURSBET01BSU4gZGVwYXJzaW5nLgorICoKKyAqIEdpdmVuIGEgdGFibGUgT0lEIG9y IGRvbWFpbiBPSUQsIG9idGFpbiBpdHMgY29uc3RyYWludHMgYW5kIGFwcGVuZCB0aGVtIHRvCisg KiB0aGUgZ2l2ZW4gZWxlbWVudHMgbGlzdC4gIFRoZSB1cGRhdGVkIGxpc3QgaXMgcmV0dXJuZWQu CisgKgorICogVGhpcyB3b3JrcyBmb3IgdHlwZWQgdGFibGVzLCByZWd1bGFyIHRhYmxlcywgYW5k IGRvbWFpbnMuCisgKgorICogTm90ZSB0aGF0IENPTlNUUkFJTlRfRk9SRUlHTiBjb25zdHJhaW50 cyBhcmUgYWx3YXlzIGlnbm9yZWQuCisgKi8KK3N0YXRpYyBMaXN0ICoKK29idGFpbkNvbnN0cmFp bnRzKExpc3QgKmVsZW1lbnRzLCBPaWQgcmVsYXRpb25JZCwgT2lkIGRvbWFpbklkKQoreworCVJl bGF0aW9uCWNvblJlbDsKKwlTY2FuS2V5RGF0YSBrZXk7CisJU3lzU2NhbkRlc2Mgc2NhbjsKKwlI ZWFwVHVwbGUJdHVwbGU7CisJT2JqVHJlZQkqY29uc3RyOworCisJLyogT25seSBvbmUgbWF5IGJl IHZhbGlkICovCisJQXNzZXJ0KE9pZElzVmFsaWQocmVsYXRpb25JZCkgXiBPaWRJc1ZhbGlkKGRv bWFpbklkKSk7CisKKwkvKgorCSAqIFNjYW4gcGdfY29uc3RyYWludCB0byBmZXRjaCBhbGwgY29u c3RyYWludHMgbGlua2VkIHRvIHRoZSBnaXZlbgorCSAqIHJlbGF0aW9uLgorCSAqLworCWNvblJl bCA9IHRhYmxlX29wZW4oQ29uc3RyYWludFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJ aWYgKE9pZElzVmFsaWQocmVsYXRpb25JZCkpCisJeworCQlTY2FuS2V5SW5pdCgma2V5LAorCQkJ CQlBbnVtX3BnX2NvbnN0cmFpbnRfY29ucmVsaWQsCisJCQkJCUJURXF1YWxTdHJhdGVneU51bWJl ciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0SWRHZXREYXR1bShyZWxhdGlvbklkKSk7CisJCXNjYW4g PSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25zdHJhaW50UmVsaWRUeXBpZE5hbWVJbmRl eElkLAorCQkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCX0KKwllbHNlCisJeworCQlB c3NlcnQoT2lkSXNWYWxpZChkb21haW5JZCkpOworCQlTY2FuS2V5SW5pdCgma2V5LAorCQkJCQlB bnVtX3BnX2NvbnN0cmFpbnRfY29udHlwaWQsCisJCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwg Rl9PSURFUSwKKwkJCQkJT2JqZWN0SWRHZXREYXR1bShkb21haW5JZCkpOworCQlzY2FuID0gc3lz dGFibGVfYmVnaW5zY2FuKGNvblJlbCwgQ29uc3RyYWludFR5cGlkSW5kZXhJZCwKKwkJCQkJCQkJ ICB0cnVlLCBOVUxMLCAxLCAma2V5KTsKKwl9CisKKwkvKgorCSAqIEZvciBlYWNoIGNvbnN0cmFp bnQsIGFkZCBhIG5vZGUgdG8gdGhlIGxpc3Qgb2YgdGFibGUgZWxlbWVudHMuICBJbgorCSAqIHRo ZXNlIG5vZGVzIHdlIGluY2x1ZGUgbm90IG9ubHkgdGhlIHByaW50YWJsZSBpbmZvcm1hdGlvbiAo ImZtdCIpLCBidXQKKwkgKiBhbHNvIHNlcGFyYXRlIGF0dHJpYnV0ZXMgdG8gaW5kaWNhdGUgdGhl IHR5cGUgb2YgY29uc3RyYWludCwgZm9yCisJICogYXV0b21hdGljIHByb2Nlc3NpbmcuCisJICov CisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4p KSkKKwl7CisJCUZvcm1fcGdfY29uc3RyYWludCBjb25zdHJGb3JtOworCQljaGFyCSAgICpjb250 eXBlOworCisJCWNvbnN0ckZvcm0gPSAoRm9ybV9wZ19jb25zdHJhaW50KSBHRVRTVFJVQ1QodHVw bGUpOworCisJCXN3aXRjaCAoY29uc3RyRm9ybS0+Y29udHlwZSkKKwkJeworCQkJY2FzZSBDT05T VFJBSU5UX0NIRUNLOgorCQkJCWNvbnR5cGUgPSAiY2hlY2siOworCQkJCWJyZWFrOworCQkJY2Fz ZSBDT05TVFJBSU5UX0ZPUkVJR046CisJCQkJY29udGludWU7CS8qIG5vdCBoZXJlICovCisJCQlj YXNlIENPTlNUUkFJTlRfUFJJTUFSWToKKwkJCQljb250eXBlID0gInByaW1hcnkga2V5IjsKKwkJ CQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9VTklRVUU6CisJCQkJY29udHlwZSA9ICJ1bmlx dWUiOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX1RSSUdHRVI6CisJCQkJY29udHlw ZSA9ICJ0cmlnZ2VyIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9FWENMVVNJT046 CisJCQkJY29udHlwZSA9ICJleGNsdXNpb24iOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJ CQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGNvbnN0cmFpbnQgdHlwZSIpOworCQl9CisKKwkJ LyoKKwkJICogInR5cGUiIGFuZCAiY29udHlwZSIgYXJlIG5vdCBwYXJ0IG9mIHRoZSBwcmludGFi bGUgb3V0cHV0LCBidXQgYXJlCisJCSAqIHVzZWZ1bCB0byBwcm9ncmFtbWF0aWNhbGx5IGRpc3Rp bmd1aXNoIHRoZXNlIGZyb20gY29sdW1ucyBhbmQgYW1vbmcKKwkJICogZGlmZmVyZW50IGNvbnN0 cmFpbnQgdHlwZXMuCisJCSAqCisJCSAqIFhYWCBpdCBtaWdodCBiZSB1c2VmdWwgdG8gYWxzbyBs aXN0IHRoZSBjb2x1bW4gbmFtZXMgaW4gYSBQSywgZXRjLgorCQkgKi8KKwkJY29uc3RyID0gbmV3 X29ianRyZWVfVkEoIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLAorCQkJCQkJ CQk0LAorCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjb25zdHJhaW50IiwKKwkJCQkJ CQkJImNvbnR5cGUiLCBPYmpUeXBlU3RyaW5nLCBjb250eXBlLAorCQkJCQkJCQkibmFtZSIsIE9i alR5cGVTdHJpbmcsIE5hbWVTdHIoY29uc3RyRm9ybS0+Y29ubmFtZSksCisJCQkJCQkJCSJkZWZp bml0aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJIHBnX2dldF9jb25zdHJhaW50ZGVmX2Nv bW1hbmRfc2ltcGxlKGNvbnN0ckZvcm0tPm9pZCkpOworCQllbGVtZW50cyA9IGxhcHBlbmQoZWxl bWVudHMsIG5ld19vYmplY3Rfb2JqZWN0KGNvbnN0cikpOworCX0KKworCXN5c3RhYmxlX2VuZHNj YW4oc2Nhbik7CisJdGFibGVfY2xvc2UoY29uUmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0 dXJuIGVsZW1lbnRzOworfQorCisvKgorICogUmV0dXJuIGFuIGluZGV4IGRlZmluaXRpb24sIHNw bGl0IGluIHNldmVyYWwgcGllY2VzLgorICoKKyAqIEEgbGFyZ2UgYW1vdW50IG9mIGNvZGUgaXMg ZHVwbGljYXRlZCBmcm9tICBwZ19nZXRfaW5kZXhkZWZfd29ya2VyLCBidXQKKyAqIGNvbnRyb2wg ZmxvdyBpcyBkaWZmZXJlbnQgZW5vdWdoIHRoYXQgaXQgZG9lc24ndCBzZWVtIHdvcnRoIGtlZXBp bmcgdGhlbQorICogdG9nZXRoZXIuCisgKi8KK3N0YXRpYyB2b2lkCitwZ19nZXRfaW5kZXhkZWZf ZGV0YWlsZWQoT2lkIGluZGV4cmVsaWQsCisJCQkJCQkgY2hhciAqKmluZGV4X2FtLAorCQkJCQkJ IGNoYXIgKipkZWZpbml0aW9uLAorCQkJCQkJIGNoYXIgKipyZWxvcHRpb25zLAorCQkJCQkJIGNo YXIgKip0YWJsZXNwYWNlLAorCQkJCQkJIGNoYXIgKip3aGVyZUNsYXVzZSkKK3sKKwlIZWFwVHVw bGUJaHRfaWR4OworCUhlYXBUdXBsZQlodF9pZHhyZWw7CisJSGVhcFR1cGxlCWh0X2FtOworCUZv cm1fcGdfaW5kZXggaWR4cmVjOworCUZvcm1fcGdfY2xhc3MgaWR4cmVscmVjOworCUZvcm1fcGdf YW0JYW1yZWM7CisJSW5kZXhBbVJvdXRpbmUgKmFtcm91dGluZTsKKwlMaXN0CSAgICppbmRleHBy czsKKwlMaXN0Q2VsbCAgICppbmRleHByX2l0ZW07CisJTGlzdAkgICAqY29udGV4dDsKKwlPaWQJ CQlpbmRyZWxpZDsKKwlpbnQJCQlrZXlubzsKKwlEYXR1bQkJaW5kY29sbERhdHVtOworCURhdHVt CQlpbmRjbGFzc0RhdHVtOworCURhdHVtCQlpbmRvcHRpb25EYXR1bTsKKwlib29sCQlpc251bGw7 CisJb2lkdmVjdG9yICAqaW5kY29sbGF0aW9uOworCW9pZHZlY3RvciAgKmluZGNsYXNzOworCWlu dDJ2ZWN0b3IgKmluZG9wdGlvbjsKKwlTdHJpbmdJbmZvRGF0YSBkZWZpbml0aW9uQnVmOworCisJ LyoKKwkgKiBGZXRjaCB0aGUgcGdfaW5kZXggdHVwbGUgYnkgdGhlIE9pZCBvZiB0aGUgaW5kZXgK KwkgKi8KKwlodF9pZHggPSBTZWFyY2hTeXNDYWNoZTEoSU5ERVhSRUxJRCwgT2JqZWN0SWRHZXRE YXR1bShpbmRleHJlbGlkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGh0X2lkeCkpCisJCWVs b2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBpbmRleCAldSIsIGluZGV4cmVsaWQp OworCWlkeHJlYyA9IChGb3JtX3BnX2luZGV4KSBHRVRTVFJVQ1QoaHRfaWR4KTsKKworCWluZHJl bGlkID0gaWR4cmVjLT5pbmRyZWxpZDsKKwlBc3NlcnQoaW5kZXhyZWxpZCA9PSBpZHhyZWMtPmlu ZGV4cmVsaWQpOworCisJLyogTXVzdCBnZXQgaW5kY29sbGF0aW9uLCBpbmRjbGFzcywgYW5kIGlu ZG9wdGlvbiB0aGUgaGFyZCB3YXkgKi8KKwlpbmRjb2xsRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIo SU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJCQkJCQkgICBBbnVtX3BnX2luZGV4X2luZGNvbGxhdGlv biwgJmlzbnVsbCk7CisJQXNzZXJ0KCFpc251bGwpOworCWluZGNvbGxhdGlvbiA9IChvaWR2ZWN0 b3IgKikgRGF0dW1HZXRQb2ludGVyKGluZGNvbGxEYXR1bSk7CisKKwlpbmRjbGFzc0RhdHVtID0g U3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJCUFudW1fcGdfaW5k ZXhfaW5kY2xhc3MsICZpc251bGwpOworCUFzc2VydCghaXNudWxsKTsKKwlpbmRjbGFzcyA9IChv aWR2ZWN0b3IgKikgRGF0dW1HZXRQb2ludGVyKGluZGNsYXNzRGF0dW0pOworCisJaW5kb3B0aW9u RGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJCQkJCQkJIEFu dW1fcGdfaW5kZXhfaW5kb3B0aW9uLCAmaXNudWxsKTsKKwlBc3NlcnQoIWlzbnVsbCk7CisJaW5k b3B0aW9uID0gKGludDJ2ZWN0b3IgKikgRGF0dW1HZXRQb2ludGVyKGluZG9wdGlvbkRhdHVtKTsK KworCS8qCisJICogRmV0Y2ggdGhlIHBnX2NsYXNzIHR1cGxlIG9mIHRoZSBpbmRleCByZWxhdGlv bgorCSAqLworCWh0X2lkeHJlbCA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIE9iamVjdElkR2V0 RGF0dW0oaW5kZXhyZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChodF9pZHhyZWwpKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmVsYXRpb24gJXUiLCBpbmRl eHJlbGlkKTsKKwlpZHhyZWxyZWMgPSAoRm9ybV9wZ19jbGFzcykgR0VUU1RSVUNUKGh0X2lkeHJl bCk7CisKKwkvKgorCSAqIEZldGNoIHRoZSBwZ19hbSB0dXBsZSBvZiB0aGUgaW5kZXgnIGFjY2Vz cyBtZXRob2QKKwkgKi8KKwlodF9hbSA9IFNlYXJjaFN5c0NhY2hlMShBTU9JRCwgT2JqZWN0SWRH ZXREYXR1bShpZHhyZWxyZWMtPnJlbGFtKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGh0X2Ft KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGFjY2VzcyBtZXRob2Qg JXUiLAorCQkJIGlkeHJlbHJlYy0+cmVsYW0pOworCWFtcmVjID0gKEZvcm1fcGdfYW0pIEdFVFNU UlVDVChodF9hbSk7CisKKwkvKgorCSAqIEdldCB0aGUgaW5kZXggZXhwcmVzc2lvbnMsIGlmIGFu eS4gIChOT1RFOiB3ZSBkbyBub3QgdXNlIHRoZSByZWxjYWNoZQorCSAqIHZlcnNpb25zIG9mIHRo ZSBleHByZXNzaW9ucyBhbmQgcHJlZGljYXRlLCBiZWNhdXNlIHdlIHdhbnQgdG8gZGlzcGxheQor CSAqIG5vbi1jb25zdC1mb2xkZWQgZXhwcmVzc2lvbnMuKQorCSAqLworCWlmICghaGVhcF9hdHRp c251bGwoaHRfaWR4LCBBbnVtX3BnX2luZGV4X2luZGV4cHJzLCBOVUxMKSkKKwl7CisJCURhdHVt CQlleHByc0RhdHVtOworCQlib29sCQlpc251bGw7CisJCWNoYXIJICAgKmV4cHJzU3RyaW5nOwor CisJCWV4cHJzRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJ CQkJCQkJIEFudW1fcGdfaW5kZXhfaW5kZXhwcnMsICZpc251bGwpOworCQlBc3NlcnQoIWlzbnVs bCk7CisJCWV4cHJzU3RyaW5nID0gVGV4dERhdHVtR2V0Q1N0cmluZyhleHByc0RhdHVtKTsKKwkJ aW5kZXhwcnMgPSAoTGlzdCAqKSBzdHJpbmdUb05vZGUoZXhwcnNTdHJpbmcpOworCQlwZnJlZShl eHByc1N0cmluZyk7CisJfQorCWVsc2UKKwkJaW5kZXhwcnMgPSBOSUw7CisKKwlpbmRleHByX2l0 ZW0gPSBsaXN0X2hlYWQoaW5kZXhwcnMpOworCisJY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9m b3IoZ2V0X3JlbF9uYW1lKGluZHJlbGlkKSwgaW5kcmVsaWQpOworCisJaW5pdFN0cmluZ0luZm8o JmRlZmluaXRpb25CdWYpOworCisJLyogT3V0cHV0IGluZGV4IEFNICovCisJKmluZGV4X2FtID0g cHN0cmR1cChxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIoYW1yZWMtPmFtbmFtZSkpKTsKKworCS8q IEZldGNoIHRoZSBpbmRleCBBTSdzIEFQSSBzdHJ1Y3QgKi8KKwlhbXJvdXRpbmUgPSBHZXRJbmRl eEFtUm91dGluZShhbXJlYy0+YW1oYW5kbGVyKTsKKworCS8qCisJICogT3V0cHV0IGluZGV4IGRl ZmluaXRpb24uICBOb3RlIHRoZSBvdXRlciBwYXJlbnMgbXVzdCBiZSBzdXBwbGllZCBieQorCSAq IGNhbGxlci4KKwkgKi8KKwlmb3IgKGtleW5vID0gMDsga2V5bm8gPCBpZHhyZWMtPmluZG5hdHRz OyBrZXlubysrKQorCXsKKwkJQXR0ck51bWJlcglhdHRudW0gPSBpZHhyZWMtPmluZGtleS52YWx1 ZXNba2V5bm9dOworCQlpbnQxNgkJb3B0ID0gaW5kb3B0aW9uLT52YWx1ZXNba2V5bm9dOworCQlP aWQJCQlrZXljb2x0eXBlOworCQlPaWQJCQlrZXljb2xjb2xsYXRpb247CisJCU9pZAkJCWluZGNv bGw7CisKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1Ziwga2V5bm8gPT0g MCA/ICIiIDogIiwgIik7CisKKwkJaWYgKGF0dG51bSAhPSAwKQorCQl7CisJCQkvKiBTaW1wbGUg aW5kZXggY29sdW1uICovCisJCQljaGFyCSAgICphdHRuYW1lOworCQkJaW50MzIJCWtleWNvbHR5 cG1vZDsKKworCQkJYXR0bmFtZSA9IGdldF9hdHRuYW1lKGluZHJlbGlkLCBhdHRudW0sIGZhbHNl KTsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsIHF1b3RlX2lkZW50 aWZpZXIoYXR0bmFtZSkpOworCQkJZ2V0X2F0dHR5cGV0eXBtb2Rjb2xsKGluZHJlbGlkLCBhdHRu dW0sCisJCQkJCQkJCSAgJmtleWNvbHR5cGUsICZrZXljb2x0eXBtb2QsCisJCQkJCQkJCSAgJmtl eWNvbGNvbGxhdGlvbik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBFeHByZXNzaW9uYWwgaW5k ZXggKi8KKwkJCU5vZGUJICAgKmluZGV4a2V5OworCQkJY2hhcgkgICAqc3RyOworCisJCQlpZiAo aW5kZXhwcl9pdGVtID09IE5VTEwpCisJCQkJZWxvZyhFUlJPUiwgInRvbyBmZXcgZW50cmllcyBp biBpbmRleHBycyBsaXN0Iik7CisJCQlpbmRleGtleSA9IChOb2RlICopIGxmaXJzdChpbmRleHBy X2l0ZW0pOworCQkJaW5kZXhwcl9pdGVtID0gbG5leHQoaW5kZXhwcnMsIGluZGV4cHJfaXRlbSk7 CisJCQkvKiBEZXBhcnNlICovCisJCQlzdHIgPSBkZXBhcnNlX2V4cHJlc3Npb24oaW5kZXhrZXks IGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisKKwkJCS8qIE5lZWQgcGFyZW5zIGlmIGl0J3Mgbm90 IGEgYmFyZSBmdW5jdGlvbiBjYWxsICovCisJCQlpZiAoaW5kZXhrZXkgJiYgSXNBKGluZGV4a2V5 LCBGdW5jRXhwcikgJiYKKwkJCQkoKEZ1bmNFeHByICopIGluZGV4a2V5KS0+ZnVuY2Zvcm1hdCA9 PSBDT0VSQ0VfRVhQTElDSVRfQ0FMTCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZp bml0aW9uQnVmLCBzdHIpOworCQkJZWxzZQorCQkJCWFwcGVuZFN0cmluZ0luZm8oJmRlZmluaXRp b25CdWYsICIoJXMpIiwgc3RyKTsKKworCQkJa2V5Y29sdHlwZSA9IGV4cHJUeXBlKGluZGV4a2V5 KTsKKwkJCWtleWNvbGNvbGxhdGlvbiA9IGV4cHJDb2xsYXRpb24oaW5kZXhrZXkpOworCQl9CisK KwkJLyogQWRkIGNvbGxhdGlvbiwgZXZlbiBpZiBkZWZhdWx0ICovCisJCWluZGNvbGwgPSBpbmRj b2xsYXRpb24tPnZhbHVlc1trZXlub107CisJCWlmIChPaWRJc1ZhbGlkKGluZGNvbGwpKQorCQkJ YXBwZW5kU3RyaW5nSW5mbygmZGVmaW5pdGlvbkJ1ZiwgIiBDT0xMQVRFICVzIiwKKwkJCQkJCQkg Z2VuZXJhdGVfY29sbGF0aW9uX25hbWUoKGluZGNvbGwpKSk7CisKKwkJLyogQWRkIHRoZSBvcGVy YXRvciBjbGFzcyBuYW1lLCBldmVuIGlmIGRlZmF1bHQgKi8KKwkJZ2V0X29wY2xhc3NfbmFtZShp bmRjbGFzcy0+dmFsdWVzW2tleW5vXSwgSW52YWxpZE9pZCwgJmRlZmluaXRpb25CdWYpOworCisJ CS8qIEFkZCBvcHRpb25zIGlmIHJlbGV2YW50ICovCisJCWlmIChhbXJvdXRpbmUtPmFtY2Fub3Jk ZXIpCisJCXsKKwkJCS8qIElmIGl0IHN1cHBvcnRzIHNvcnQgb3JkZXJpbmcsIHJlcG9ydCBERVND IGFuZCBOVUxMUyBvcHRzICovCisJCQlpZiAob3B0ICYgSU5ET1BUSU9OX0RFU0MpCisJCQl7CisJ CQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBERVNDIik7CisJCQkJ LyogTlVMTFMgRklSU1QgaXMgdGhlIGRlZmF1bHQgaW4gdGhpcyBjYXNlICovCisJCQkJaWYgKCEo b3B0ICYgSU5ET1BUSU9OX05VTExTX0ZJUlNUKSkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZygmZGVmaW5pdGlvbkJ1ZiwgIiBOVUxMUyBMQVNUIik7CisJCQl9CisJCQllbHNlCisJCQl7CisJ CQkJaWYgKG9wdCAmIElORE9QVElPTl9OVUxMU19GSVJTVCkKKwkJCQkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBOVUxMUyBGSVJTVCIpOworCQkJfQorCQl9CisKKwkJ LyogWFhYIGV4Y2x1ZGVPcHMgdGhpbmd5IHdhcyBoZXJlOyBkbyB3ZSBuZWVkIGFueXRoaW5nPyAq LworCX0KKwkqZGVmaW5pdGlvbiA9IGRlZmluaXRpb25CdWYuZGF0YTsKKworCS8qIE91dHB1dCBy ZWxvcHRpb25zICovCisJKnJlbG9wdGlvbnMgPSBmbGF0dGVuX3JlbG9wdGlvbnMoaW5kZXhyZWxp ZCk7CisKKwkvKiBPdXRwdXQgdGFibGVzcGFjZSAqLworCXsKKwkJT2lkCQkJdGJsc3BjOworCisJ CXRibHNwYyA9IGdldF9yZWxfdGFibGVzcGFjZShpbmRleHJlbGlkKTsKKwkJaWYgKE9pZElzVmFs aWQodGJsc3BjKSkKKwkJCSp0YWJsZXNwYWNlID0gcHN0cmR1cChxdW90ZV9pZGVudGlmaWVyKGdl dF90YWJsZXNwYWNlX25hbWUodGJsc3BjKSkpOworCQllbHNlCisJCQkqdGFibGVzcGFjZSA9IE5V TEw7CisJfQorCisJLyogUmVwb3J0IGluZGV4IHByZWRpY2F0ZSwgaWYgYW55ICovCisJaWYgKCFo ZWFwX2F0dGlzbnVsbChodF9pZHgsIEFudW1fcGdfaW5kZXhfaW5kcHJlZCwgTlVMTCkpCisJewor CQlOb2RlCSAgICpub2RlOworCQlEYXR1bQkJcHJlZERhdHVtOworCQlib29sCQlpc251bGw7CisJ CWNoYXIJICAgKnByZWRTdHJpbmc7CisKKwkJLyogQ29udmVydCB0ZXh0IHN0cmluZyB0byBub2Rl IHRyZWUgKi8KKwkJcHJlZERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lk eCwKKwkJCQkJCQkJCUFudW1fcGdfaW5kZXhfaW5kcHJlZCwgJmlzbnVsbCk7CisJCUFzc2VydCgh aXNudWxsKTsKKwkJcHJlZFN0cmluZyA9IFRleHREYXR1bUdldENTdHJpbmcocHJlZERhdHVtKTsK KwkJbm9kZSA9IChOb2RlICopIHN0cmluZ1RvTm9kZShwcmVkU3RyaW5nKTsKKwkJcGZyZWUocHJl ZFN0cmluZyk7CisKKwkJLyogRGVwYXJzZSAqLworCQkqd2hlcmVDbGF1c2UgPQorCQkJZGVwYXJz ZV9leHByZXNzaW9uKG5vZGUsIGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisJfQorCWVsc2UKKwkJ KndoZXJlQ2xhdXNlID0gTlVMTDsKKworCS8qIENsZWFuIHVwICovCisJUmVsZWFzZVN5c0NhY2hl KGh0X2lkeCk7CisJUmVsZWFzZVN5c0NhY2hlKGh0X2lkeHJlbCk7CisJUmVsZWFzZVN5c0NhY2hl KGh0X2FtKTsKK30KKworLyoKKyAqIE9idGFpbiB0aGUgZGVwYXJzZWQgZGVmYXVsdCB2YWx1ZSBm b3IgdGhlIGdpdmVuIGNvbHVtbiBvZiB0aGUgZ2l2ZW4gdGFibGUuCisgKgorICogQ2FsbGVyIG11 c3QgaGF2ZSBzZXQgYSBjb3JyZWN0IGRlcGFyc2UgY29udGV4dC4KKyAqLworc3RhdGljIGNoYXIg KgorUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KFJlbGF0aW9uIHJlbCwgQXR0ck51bWJlciBhdHRu bywgTGlzdCAqZHBjb250ZXh0LAorCQkJCQkJIExpc3QgKipleHBycykKK3sKKwlOb2RlICpkZWZ2 YWw7CisJY2hhciAqZGVmc3RyOworCisJZGVmdmFsID0gYnVpbGRfY29sdW1uX2RlZmF1bHQocmVs LCBhdHRubyk7CisJZGVmc3RyID0gZGVwYXJzZV9leHByZXNzaW9uKGRlZnZhbCwgZHBjb250ZXh0 LCBmYWxzZSwgZmFsc2UpOworCisJLyogQ29sbGVjdCB0aGUgZXhwcmVzc2lvbiBmb3IgbGF0ZXIg cmVwbGljYXRpb24gc2FmZXR5IGNoZWNrcyAqLworCWlmIChleHBycykKKwkJKmV4cHJzID0gbGFw cGVuZCgqZXhwcnMsIGRlZnZhbCk7CisKKwlyZXR1cm4gZGVmc3RyOworfQorCisvKgorICogT2J0 YWluIHRoZSBkZXBhcnNlZCBwYXJ0aXRpb24gYm91bmQgZXhwcmVzc2lvbiBmb3IgdGhlIGdpdmVu IHRhYmxlLgorICovCitzdGF0aWMgY2hhciAqCitSZWxhdGlvbkdldFBhcnRpdGlvbkJvdW5kKE9p ZCByZWxpZCkKK3sKKwlEYXR1bQkJZGVwYXJzZWQ7CisJRGF0dW0JCWJvdW5kRGF0dW07CisJYm9v bAkJaXNudWxsOworCUhlYXBUdXBsZQl0dXBsZTsKKworCXR1cGxlID0gU2VhcmNoU3lzQ2FjaGUx KFJFTE9JRCwgcmVsaWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCisJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlvbiAldSIsCisJCQkgcmVsaWQp OworCisJYm91bmREYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihSRUxPSUQsIHR1cGxlLAorCQkJCQkJ CQkgQW51bV9wZ19jbGFzc19yZWxwYXJ0Ym91bmQsCisJCQkJCQkJCSAmaXNudWxsKTsKKworCWRl cGFyc2VkID0gRGlyZWN0RnVuY3Rpb25DYWxsMihwZ19nZXRfZXhwciwKKwkJCQkJCQkJICAgQ1N0 cmluZ0dldFRleHREYXR1bShUZXh0RGF0dW1HZXRDU3RyaW5nKGJvdW5kRGF0dW0pKSwKKwkJCQkJ CQkJICAgcmVsaWQpOworCisJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKKworCXJldHVybiBUZXh0 RGF0dW1HZXRDU3RyaW5nKGRlcGFyc2VkKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgZ2l2ZW4g b2JqZWN0IHR5cGUgYXMgYSBzdHJpbmcuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK3N0cmlu Z2lmeV9vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlwZSkKK3sKKwlzd2l0Y2ggKG9ianR5cGUpCisJ eworCQljYXNlIE9CSkVDVF9BR0dSRUdBVEU6CisJCQlyZXR1cm4gIkFHR1JFR0FURSI7CisJCWNh c2UgT0JKRUNUX0NBU1Q6CisJCQlyZXR1cm4gIkNBU1QiOworCQljYXNlIE9CSkVDVF9DT0xVTU46 CisJCQlyZXR1cm4gIkNPTFVNTiI7CisJCWNhc2UgT0JKRUNUX0NPTExBVElPTjoKKwkJCXJldHVy biAiQ09MTEFUSU9OIjsKKwkJY2FzZSBPQkpFQ1RfQ09OVkVSU0lPTjoKKwkJCXJldHVybiAiQ09O VkVSU0lPTiI7CisJCWNhc2UgT0JKRUNUX0RBVEFCQVNFOgorCQkJcmV0dXJuICJEQVRBQkFTRSI7 CisJCWNhc2UgT0JKRUNUX0RPTUFJTjoKKwkJCXJldHVybiAiRE9NQUlOIjsKKwkJY2FzZSBPQkpF Q1RfRVZFTlRfVFJJR0dFUjoKKwkJCXJldHVybiAiRVZFTlQgVFJJR0dFUiI7CisJCWNhc2UgT0JK RUNUX0VYVEVOU0lPTjoKKwkJCXJldHVybiAiRVhURU5TSU9OIjsKKwkJY2FzZSBPQkpFQ1RfRkRX OgorCQkJcmV0dXJuICJGT1JFSUdOIERBVEEgV1JBUFBFUiI7CisJCWNhc2UgT0JKRUNUX0ZPUkVJ R05fU0VSVkVSOgorCQkJcmV0dXJuICJTRVJWRVIiOworCQljYXNlIE9CSkVDVF9GT1JFSUdOX1RB QkxFOgorCQkJcmV0dXJuICJGT1JFSUdOIFRBQkxFIjsKKwkJY2FzZSBPQkpFQ1RfRlVOQ1RJT046 CisJCQlyZXR1cm4gIkZVTkNUSU9OIjsKKwkJY2FzZSBPQkpFQ1RfSU5ERVg6CisJCQlyZXR1cm4g IklOREVYIjsKKwkJY2FzZSBPQkpFQ1RfTEFOR1VBR0U6CisJCQlyZXR1cm4gIkxBTkdVQUdFIjsK KwkJY2FzZSBPQkpFQ1RfTEFSR0VPQkpFQ1Q6CisJCQlyZXR1cm4gIkxBUkdFIE9CSkVDVCI7CisJ CWNhc2UgT0JKRUNUX01BVFZJRVc6CisJCQlyZXR1cm4gIk1BVEVSSUFMSVpFRCBWSUVXIjsKKwkJ Y2FzZSBPQkpFQ1RfT1BDTEFTUzoKKwkJCXJldHVybiAiT1BFUkFUT1IgQ0xBU1MiOworCQljYXNl IE9CSkVDVF9PUEVSQVRPUjoKKwkJCXJldHVybiAiT1BFUkFUT1IiOworCQljYXNlIE9CSkVDVF9P UEZBTUlMWToKKwkJCXJldHVybiAiT1BFUkFUT1IgRkFNSUxZIjsKKwkJY2FzZSBPQkpFQ1RfUk9M RToKKwkJCXJldHVybiAiUk9MRSI7CisJCWNhc2UgT0JKRUNUX1JVTEU6CisJCQlyZXR1cm4gIlJV TEUiOworCQljYXNlIE9CSkVDVF9TQ0hFTUE6CisJCQlyZXR1cm4gIlNDSEVNQSI7CisJCWNhc2Ug T0JKRUNUX1NFUVVFTkNFOgorCQkJcmV0dXJuICJTRVFVRU5DRSI7CisJCWNhc2UgT0JKRUNUX1RB QkxFOgorCQkJcmV0dXJuICJUQUJMRSI7CisJCWNhc2UgT0JKRUNUX1RBQkxFU1BBQ0U6CisJCQly ZXR1cm4gIlRBQkxFU1BBQ0UiOworCQljYXNlIE9CSkVDVF9UUklHR0VSOgorCQkJcmV0dXJuICJU UklHR0VSIjsKKwkJY2FzZSBPQkpFQ1RfVFNDT05GSUdVUkFUSU9OOgorCQkJcmV0dXJuICJURVhU IFNFQVJDSCBDT05GSUdVUkFUSU9OIjsKKwkJLyoKKwkJY2FzZSBPQkpFQ1RfVFNDT05GSUdfTUFQ UElORzoKKwkJCXJldHVybiAiVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiBNQVBQSU5HIjsKKwkJ Ki8KKwkJY2FzZSBPQkpFQ1RfVFNESUNUSU9OQVJZOgorCQkJcmV0dXJuICJURVhUIFNFQVJDSCBE SUNUSU9OQVJZIjsKKwkJY2FzZSBPQkpFQ1RfVFNQQVJTRVI6CisJCQlyZXR1cm4gIlRFWFQgU0VB UkNIIFBBUlNFUiI7CisJCWNhc2UgT0JKRUNUX1RTVEVNUExBVEU6CisJCQlyZXR1cm4gIlRFWFQg U0VBUkNIIFRFTVBMQVRFIjsKKwkJY2FzZSBPQkpFQ1RfVFlQRToKKwkJCXJldHVybiAiVFlQRSI7 CisJCWNhc2UgT0JKRUNUX1VTRVJfTUFQUElORzoKKwkJCXJldHVybiAiVVNFUiBNQVBQSU5HIjsK KwkJY2FzZSBPQkpFQ1RfVklFVzoKKwkJCXJldHVybiAiVklFVyI7CisKKwkJZGVmYXVsdDoKKwkJ CWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBvYmplY3QgdHlwZSAlZCIsIG9ianR5cGUpOworCX0K K30KKworLyoKKyAqIEdpdmVuIGEgQ29sbGVjdGVkQ29tbWFuZCwgcmV0dXJuIGEgSlNPTiByZXBy ZXNlbnRhdGlvbiBvZiBpdC4KKyAqCisgKiBUaGUgY29tbWFuZCBpcyBleHBhbmRlZCBmdWxseSwg c28gdGhhdCB0aGVyZSBhcmUgbm8gYW1iaWd1aXRpZXMgZXZlbiBpbiB0aGUKKyAqIGZhY2Ugb2Yg c2VhcmNoX3BhdGggY2hhbmdlcy4KKyAqLworRGF0dW0KK2RkbF9kZXBhcnNlX3RvX2pzb24oUEdf RlVOQ1RJT05fQVJHUykKK3sKKwlDb2xsZWN0ZWRDb21tYW5kICpjbWQgPSAoQ29sbGVjdGVkQ29t bWFuZCAqKSBQR19HRVRBUkdfUE9JTlRFUigwKTsKKwljaGFyCQkgICAqY29tbWFuZDsKKworCWNv bW1hbmQgPSBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChjbWQsIHRydWUpOworCisJaWYgKGNvbW1h bmQpCisJCVBHX1JFVFVSTl9URVhUX1AoQ1N0cmluZ0dldFRleHREYXR1bShjb21tYW5kKSk7CisK KwlQR19SRVRVUk5fTlVMTCgpOworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlckZ1bmN0aW9u U3RtdCAoQUxURVIgRlVOQ1RJT04pCisgKgorICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5kIHRo ZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gdGhlIEpTT04KKyAqIGJsb2IgcmVw cmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0FsdGVyRnVuY3Rpb24oT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0 ZXJGdW5jdGlvblN0bXQgKm5vZGUgPSAoQWx0ZXJGdW5jdGlvblN0bXQgKikgcGFyc2V0cmVlOwor CU9ialRyZWUJICAgKmFsdGVyRnVuYzsKKwlPYmpUcmVlCSAgICpzaWduOworCUhlYXBUdXBsZQlw cm9jVHVwOworCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwlMaXN0CSAgICpwYXJhbXMgPSBOSUw7 CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlpbnQJCQlpOwor CisJLyogR2V0IHRoZSBwZ19wcm9jIHR1cGxlICovCisJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hl MShQUk9DT0lELCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWx1cmUgZm9yIGZ1bmN0aW9uIHdpdGggT0lE ICV1IiwKKwkJCSBvYmplY3RJZCk7CisJcHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJV Q1QocHJvY1R1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRFUiBG VU5DVElPTiAle3NpZ25hdHVyZX1zICV7ZGVmaW5pdGlvbjogfXMKKwkgKi8KKwlhbHRlckZ1bmMg PSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgRlVOQ1RJT04iLCAwKTsKKworCS8qCisJICogQUxURVIg RlVOQ1RJT04gZG9lcyBub3QgY2hhbmdlIHNpZ25hdHVyZSBzbyB3ZSBjYW4gdXNlIGNhdGFsb2cK KwkgKiB0byBnZXQgaW5wdXQgdHlwZSBPaWRzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBwcm9j Rm9ybS0+cHJvbmFyZ3M7IGkrKykKKwl7CisJCU9ialRyZWUJICAgKnRtcG9iaiA9IG5ld19vYmp0 cmVlX1ZBKCIle3R5cGV9VCIsIDApOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwg InR5cGUiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jRm9ybS0+cHJvYXJndHlw ZXMudmFsdWVzW2ldLCAtMSkpOworCQlwYXJhbXMgPSBsYXBwZW5kKHBhcmFtcywgbmV3X29iamVj dF9vYmplY3QodG1wb2JqKSk7CisJfQorCisJc2lnbiA9IG5ld19vYmp0cmVlKCIiKTsKKworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHNpZ24sICIle2lkZW50aXR5fUQiLAorCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBv YmplY3RJZCkpOworCWFwcGVuZF9hcnJheV9vYmplY3Qoc2lnbiwgIigle2FyZ3VtZW50czosIH1z KSIsIHBhcmFtcyk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckZ1bmMsICIle3NpZ25h dHVyZX1zIiwgc2lnbik7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPmFjdGlvbnMpCisJeworCQlE ZWZFbGVtCSpkZWZlbCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZQkgICAq dG1wb2JqID0gTlVMTDsKKworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidm9sYXRpbGl0 eSIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKHN0clZhbChkZWZlbC0+ YXJnKSwgMCk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3RyaWN0 IikgPT0gMCkKKwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoaW50VmFsKGRlZmVsLT5h cmcpID8KKwkJCQkJCQkJICJSRVRVUk5TIE5VTEwgT04gTlVMTCBJTlBVVCIgOgorCQkJCQkJCQkg IkNBTExFRCBPTiBOVUxMIElOUFVUIiwgMCk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVs LT5kZWZuYW1lLCAic2VjdXJpdHkiKSA9PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJl ZV9WQShpbnRWYWwoZGVmZWwtPmFyZykgPworCQkJCQkJCQkgIlNFQ1VSSVRZIERFRklORVIiIDog IlNFQ1VSSVRZIElOVk9LRVIiLCAwKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRl Zm5hbWUsICJsZWFrcHJvb2YiKSA9PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QShpbnRWYWwoZGVmZWwtPmFyZykgPworCQkJCQkJCQkgIkxFQUtQUk9PRiIgOiAiTk9UIExFQUtQ Uk9PRiIsIDApOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgImNvc3Qi KSA9PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQ09TVCAle2Nvc3R9biIs IDEsCisJCQkJCQkJCSAiY29zdCIsIE9ialR5cGVGbG9hdCwKKwkJCQkJCQkJIGRlZkdldE51bWVy aWMoZGVmZWwpKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJyb3dz IikgPT0gMCkKKwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlJPV1MiLCAwKTsKKwkJ CWlmIChkZWZHZXROdW1lcmljKGRlZmVsKSA9PSAwKQorCQkJCWFwcGVuZF9ib29sX29iamVjdCh0 bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCQkJZWxzZQorCQkJCWFwcGVuZF9mbG9hdF9vYmpl Y3QodG1wb2JqLCAiJXtyb3dzfW4iLAorCQkJCQkJCQkJZGVmR2V0TnVtZXJpYyhkZWZlbCkpOwor CQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNldCIpID09IDApCisJCXsK KwkJCVZhcmlhYmxlU2V0U3RtdCAqc3N0bXQgPSAoVmFyaWFibGVTZXRTdG10ICopIGRlZmVsLT5h cmc7CisJCQljaGFyICp2YWx1ZSA9IEV4dHJhY3RTZXRWYXJpYWJsZUFyZ3Moc3N0bXQpOworCisJ CQl0bXBvYmogPSBkZXBhcnNlX0Z1bmN0aW9uU2V0KHNzdG10LT5raW5kLCBzc3RtdC0+bmFtZSwg dmFsdWUpOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInN1cHBvcnQi KSA9PSAwKQorCQl7CisJCQlPaWQJCQlhcmd0eXBlc1sxXTsKKworCQkJdG1wb2JqID0gbmV3X29i anRyZWUoIlNVUFBPUlQiKTsKKworCQkJQXNzZXJ0KHByb2NGb3JtLT5wcm9zdXBwb3J0KTsKKwor CQkJLyoKKwkJCSAqIFdlIHNob3VsZCBxdWFsaWZ5IHRoZSBzdXBwb3J0IGZ1bmN0aW9uJ3MgbmFt ZSBpZiBpdCB3b3VsZG4ndCBiZQorCQkJICogcmVzb2x2ZWQgYnkgbG9va3VwIGluIHRoZSBjdXJy ZW50IHNlYXJjaCBwYXRoLgorCQkJICovCisJCQlhcmd0eXBlc1swXSA9IElOVEVSTkFMT0lEOwor CQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtuYW1lfXMiLAorCQkJCQkJCQkgZ2Vu ZXJhdGVfZnVuY3Rpb25fbmFtZShwcm9jRm9ybS0+cHJvc3VwcG9ydCwgMSwKKwkJCQkJCQkJCQkJ CQkJTklMLCBhcmd0eXBlcywKKwkJCQkJCQkJCQkJCQkJZmFsc2UsIE5VTEwsCisJCQkJCQkJCQkJ CQkJCUVYUFJfS0lORF9OT05FKSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZu YW1lLCAicGFyYWxsZWwiKSA9PSAwKQorCQl7CisJCQljaGFyICpmbXQgPSBwc3ByaW50ZigiUEFS QUxMRUwgJXMiLCBzdHJWYWwoZGVmZWwtPmFyZykpOworCQkJdG1wb2JqID0gbmV3X29ianRyZWUo Zm10KTsKKwkJfQorCisJCWVsZW1zID0gbGFwcGVuZChlbGVtcywgbmV3X29iamVjdF9vYmplY3Qo dG1wb2JqKSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChhbHRlckZ1bmMsICIle2RlZmlu aXRpb246IH1zIiwgZWxlbXMpOworCisJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCisJcmV0 dXJuIGFsdGVyRnVuYzsKK30KKworLyoKKyAqIGRlcGFyc2UgYW4gQUxURVIgLi4uIFNFVCBTQ0hF TUEgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlck9iamVjdFNj aGVtYVN0bXQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBOb2RlICpwYXJzZXRyZWUsCisJCQkJCQkJ ICBPYmplY3RBZGRyZXNzIG9sZHNjaGVtYSkKK3sKKwlBbHRlck9iamVjdFNjaGVtYVN0bXQgKm5v ZGUgPSAoQWx0ZXJPYmplY3RTY2hlbWFTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICph bHRlclN0bXQ7CisJY2hhcgkgICAqZm10OworCWNoYXIJICAgKmlkZW50aXR5OworCWNoYXIJICAg Km5ld3NjaGVtYTsKKwljaGFyCSAgICpvbGRzY2huYW1lOworCWNoYXIJICAgKmlkZW50OworCisJ bmV3c2NoZW1hID0gbm9kZS0+bmV3c2NoZW1hOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAor CSAqCisJICogQUxURVIgJXMgJXtpZGVudGl0eX1zIFNFVCBTQ0hFTUEgJXtuZXdzY2hlbWF9SQor CSAqLworCWZtdCA9IHBzcHJpbnRmKCJBTFRFUiAlcyIsIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUt Pm9iamVjdFR5cGUpKTsKKwlhbHRlclN0bXQgPSBuZXdfb2JqdHJlZShmbXQpOworCisJLyoKKwkg KiBTaW5jZSB0aGUgY29tbWFuZCBoYXMgYWxyZWFkeSB0YWtlbiBwbGFjZSBmcm9tIHRoZSBwb2lu dCBvZiB2aWV3IG9mCisJICogY2F0YWxvZ3MsIGdldE9iamVjdElkZW50aXR5IHJldHVybnMgdGhl IG9iamVjdCBuYW1lIHdpdGggdGhlIGFscmVhZHkKKwkgKiBjaGFuZ2VkIHNjaGVtYS4gIFRoZSBv dXRwdXQgb2Ygb3VyIGRlcGFyc2luZyBtdXN0IHJldHVybiB0aGUgb3JpZ2luYWwKKwkgKiBzY2hl bWEgbmFtZSBob3dldmVyLCBzbyB3ZSBjaG9wIHRoZSBzY2hlbWEgbmFtZSBvZmYgdGhlIGlkZW50 aXR5IHN0cmluZworCSAqIGFuZCB0aGVuIHByZXBlbmQgdGhlIHF1b3RlZCBzY2hlbWEgbmFtZS4K KwkgKgorCSAqIFhYWCBUaGlzIGlzIHByZXR0eSBjbHVua3kuIENhbiB3ZSBkbyBiZXR0ZXI/CisJ ICovCisJaWRlbnRpdHkgPSBnZXRPYmplY3RJZGVudGl0eSgmYWRkcmVzcywgZmFsc2UpOworCW9s ZHNjaG5hbWUgPSBnZXRfbmFtZXNwYWNlX25hbWUob2xkc2NoZW1hLm9iamVjdElkKTsKKwlpZiAo IW9sZHNjaG5hbWUpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBzY2hl bWEgd2l0aCBPSUQgJXUiLAorCQkJIG9sZHNjaGVtYS5vYmplY3RJZCk7CisKKwlpZGVudCA9IHBz cHJpbnRmKCIlcyVzIiwgcXVvdGVfaWRlbnRpZmllcihvbGRzY2huYW1lKSwKKwkJCQkJIGlkZW50 aXR5ICsgc3RybGVuKHF1b3RlX2lkZW50aWZpZXIobmV3c2NoZW1hKSkpOworCWFwcGVuZF9zdHJp bmdfb2JqZWN0KGFsdGVyU3RtdCwgIiV7aWRlbnRpdHl9cyIsIGlkZW50KTsKKworCWFwcGVuZF9z dHJpbmdfb2JqZWN0KGFsdGVyU3RtdCwgIlNFVCBTQ0hFTUEgJXtuZXdzY2hlbWF9SSIsIG5ld3Nj aGVtYSk7CisKKwlyZXR1cm4gYWx0ZXJTdG10OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRl ck9wZXJhdG9yU3RtdCAoQUxURVIgT1BFUkFUT1IgLi4uIFNFVCAuLi4pLgorICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyT3BlcmF0b3JTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAq cGFyc2V0cmVlKQoreworCUhlYXBUdXBsZSAgIAlvcHJUdXA7CisJQWx0ZXJPcGVyYXRvclN0bXQg Km5vZGUgPSAoQWx0ZXJPcGVyYXRvclN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJCSAgICph bHRlcm9wOworCUZvcm1fcGdfb3BlcmF0b3Igb3ByRm9ybTsKKwlMaXN0Q2VsbAkgICAqY2VsbDsK KwlMaXN0CQkgICAqbGlzdCA9IE5JTDsKKworCW9wclR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEVS T0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KG9wclR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRv ciB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlvcHJGb3JtID0gKEZvcm1fcGdfb3BlcmF0b3Ip IEdFVFNUUlVDVChvcHJUdXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICog QUxURVIgT1BFUkFUT1IgJXtpZGVudGl0eX1PICgle2xlZnRfdHlwZX1ULCAle3JpZ2h0X3R5cGV9 VCkgU0VUCisJICogKCV7ZWxlbXM6LCB9cykKKwkgKi8KKwlhbHRlcm9wID0gbmV3X29ianRyZWVf VkEoIkFMVEVSIE9QRVJBVE9SICV7aWRlbnRpdHl9TyIsIDEsCisJCQkJCQkJICJpZGVudGl0eSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcHJGb3Jt LT5vcHJuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJICBOYW1lU3RyKG9wckZvcm0tPm9wcm5hbWUp KSk7CisKKwkvKiBMRUZUQVJHICovCisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BybGVmdCkp CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyb3AsICIoJXtsZWZ0X3R5cGV9VCIsCisJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wckZvcm0tPm9wcmxlZnQsIC0xKSk7CisJZWxzZQor CQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlcm9wLCAiKCV7bGVmdF90eXBlfXMiLCAiTk9ORSIp OworCisJLyogUklHSFRBUkcgKi8KKwlBc3NlcnQoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJsZWZ0 KSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJvcCwgIiwgJXtyaWdodF90eXBlfVQpIiwK KwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcHJGb3JtLT5vcHJyaWdodCwgLTEpKTsKKwor CWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gKmVsZW0gPSAoRGVm RWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUgKnRtcG9iaiA9IE5VTEw7CisKKwkJaWYg KHN0cmNtcChlbGVtLT5kZWZuYW1lLCAicmVzdHJpY3QiKSA9PSAwKQorCQl7CisJCQl0bXBvYmog PSBuZXdfb2JqdHJlZV9WQSgiUkVTVFJJQ1Q9IiwgMSwKKwkJCQkJCQkJICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAicmVzdHJpY3QiKTsKKwkJCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcnJl c3QpKQorCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cHJvY2VkdXJlfUQiLAor CQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJyZXN0KSk7CisJCQllbHNlCisJCQkJYXBw ZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtwcm9jZWR1cmV9cyIsICJOT05FIik7CisJCX0K KwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJqb2luIikgPT0gMCkKKwkJeworCQkJ dG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkpPSU49IiwgMSwKKwkJCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAiam9pbiIpOworCQkJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3Byam9p bikpCisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtwcm9jZWR1cmV9RCIsCisJ CQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcmpvaW4pKTsKKwkJCWVsc2UKKwkJCQlhcHBl bmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3Byb2NlZHVyZX1zIiwgIk5PTkUiKTsKKwkJfQor CisJCUFzc2VydCh0bXBvYmopOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVyb3AsICJTRVQg KCV7ZWxlbXM6LCB9cykiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZShvcHJUdXApOworCisJ cmV0dXJuIGFsdGVyb3A7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFMVEVSIE9QRVJBVE9SIEZB TUlMWSBBREQvRFJPUCBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Fs dGVyT3BGYW1pbHkoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9ialRyZWUJICAgKmFsdGVy T3BGYW07CisJQWx0ZXJPcEZhbWlseVN0bXQgKnN0bXQgPSAoQWx0ZXJPcEZhbWlseVN0bXQgKikg Y21kLT5wYXJzZXRyZWU7CisJSGVhcFR1cGxlCWZ0cDsKKwlGb3JtX3BnX29wZmFtaWx5IG9wZkZv cm07CisJTGlzdAkgICAqbGlzdDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJZnRwID0gU2VhcmNo U3lzQ2FjaGUxKE9QRkFNSUxZT0lELAorCQkJCQkJICBPYmplY3RJZEdldERhdHVtKGNtZC0+ZC5v cGZhbS5hZGRyZXNzLm9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGZ0cCkpCisJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkgJXUi LAorCQkJIGNtZC0+ZC5vcGZhbS5hZGRyZXNzLm9iamVjdElkKTsKKwlvcGZGb3JtID0gKEZvcm1f cGdfb3BmYW1pbHkpIEdFVFNUUlVDVChmdHApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAor CSAqCisJICogQUxURVIgT1BFUkFUT1IgRkFNSUxZICV7aWRlbnRpdHl9RCBVU0lORyAle2FtbmFt ZX1JIEFERC9EUk9QCisJICogJXtpdGVtczosIH1zCisJICovCisJYWx0ZXJPcEZhbSA9IG5ld19v Ymp0cmVlX1ZBKCJBTFRFUiBPUEVSQVRPUiBGQU1JTFkgJXtpZGVudGl0eX1EICIKKwkJCQkJCQkJ IlVTSU5HICV7YW1uYW1lfUkiLCAyLAorCQkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BmRm9ybS0+b3BmbmFtZXNwYWNl LAorCQkJCQkJCQkJCQkJCQkgTmFtZVN0cihvcGZGb3JtLT5vcGZuYW1lKSksCisJCQkJCQkJCSJh bW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBzdG10LT5hbW5hbWUpOworCisJbGlzdCA9IE5JTDsKKwlm b3JlYWNoKGNlbGwsIGNtZC0+ZC5vcGZhbS5vcGVyYXRvcnMpCisJeworCQlPcEZhbWlseU1lbWJl ciAqb3BlciA9IGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZQkgICAqdG1wb2JqOworCisJCS8qCisJ CSAqIFZlcmJvc2Ugc3ludGF4CisJCSAqCisJCSAqIE9QRVJBVE9SICV7bnVtfW4gJXtvcGVyYXRv cn1PKCV7bHR5cGV9VCwgJXtydHlwZX1UKSAle3B1cnBvc2V9cworCQkgKi8KKwkJdG1wb2JqID0g bmV3X29ianRyZWVfVkEoIk9QRVJBVE9SICV7bnVtfW4iLCAxLAorCQkJCQkJCSAibnVtIiwgT2Jq VHlwZUludGVnZXIsIG9wZXItPm51bWJlcik7CisKKwkJLyogQWRkIHRoZSBvcGVyYXRvciBuYW1l OyB0aGUgRFJPUCBjYXNlIGRvZXNuJ3QgaGF2ZSB0aGlzICovCisJCWlmICghc3RtdC0+aXNEcm9w KQorCQl7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle29wZXJhdG9yfU8iLAor CQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkJCSBvcGVyLT5vYmplY3QpKTsKKwkJfQorCisJCS8qIEFkZCB0aGUgdHlw ZXMgKi8KKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiKCV7bHR5cGV9VCwiLAorCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcGVyLT5sZWZ0dHlwZSwgLTEpKTsKKwkJYXBwZW5k X29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtydHlwZX1UKSIsCisJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl90eXBlKG9wZXItPnJpZ2h0dHlwZSwgLTEpKTsKKworCQkvKiBBZGQgdGhlIEZPUiBTRUFS Q0ggLyBGT1IgT1JERVIgQlkgY2xhdXNlOyBub3QgaW4gdGhlIERST1AgY2FzZSAqLworCQlpZiAo IXN0bXQtPmlzRHJvcCkKKwkJeworCQkJaWYgKG9wZXItPnNvcnRmYW1pbHkgPT0gSW52YWxpZE9p ZCkKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3B1cnBvc2V9cyIsICJGT1Ig U0VBUkNIIik7CisJCQllbHNlCisJCQl7CisJCQkJT2JqVHJlZQkgICAqdG1wb2JqMjsKKworCQkJ CXRtcG9iajIgPSBuZXdfb2JqdHJlZV9WQSgiRk9SIE9SREVSIEJZIiwgMCk7CisJCQkJYXBwZW5k X29iamVjdF9vYmplY3QodG1wb2JqMiwgIiV7b3BmYW1pbHl9RCIsCisJCQkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yRmFtaWx5UmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJCQkJCQkgb3Blci0+c29ydGZhbWlseSkpOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRt cG9iaiwgIiV7cHVycG9zZX1zIiwgdG1wb2JqMik7CisJCQl9CisJCX0KKworCQlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwl9CisKKwlmb3JlYWNoKGNl bGwsIGNtZC0+ZC5vcGZhbS5wcm9jZWR1cmVzKQorCXsKKwkJT3BGYW1pbHlNZW1iZXIgKnByb2Mg PSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUJICAgKnRtcG9iajsKKworCQl0bXBvYmogPSBuZXdf b2JqdHJlZV9WQSgiRlVOQ1RJT04gJXtudW19biAoJXtsdHlwZX1ULCAle3J0eXBlfVQpIiwgMywK KwkJCQkJCQkgIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBwcm9jLT5udW1iZXIsCisJCQkJCQkJICJs dHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2Mt PmxlZnR0eXBlLCAtMSksCisJCQkJCQkJICJydHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2MtPnJpZ2h0dHlwZSwgLTEpKTsKKworCQkvKiBBZGQg dGhlIGZ1bmN0aW9uIG5hbWUgYW5kIGFyZyB0eXBlczsgdGhlIERST1AgY2FzZSBkb2Vzbid0IGhh dmUgdGhpcyAqLworCQlpZiAoIXN0bXQtPmlzRHJvcCkKKwkJeworCQkJSGVhcFR1cGxlCXByb2NU dXA7CisJCQlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07CisJCQlPaWQJCSAgICpwcm9hcmd0eXBlczsK KwkJCUxpc3QJICAgKmFyZ2xpc3QgPSBOSUw7CisJCQlpbnQJCQlpOworCisJCQlwcm9jVHVwID0g U2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0ocHJvYy0+b2JqZWN0KSk7 CisJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSAldSIsIHByb2MtPm9iamVjdCk7CisJCQlw cm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jVHVwKTsKKworCQkJcHJvYXJn dHlwZXMgPSBwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzOworCQkJZm9yIChpID0gMDsgaSA8 IHByb2NGb3JtLT5wcm9uYXJnczsgaSsrKQorCQkJeworCQkJCU9ialRyZWUJICAgKmFyZzsKKwor CQkJCWFyZyA9IG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2FyZ3R5cGVzW2ldLCAtMSk7CisJCQkJ YXJnbGlzdCA9IGxhcHBlbmQoYXJnbGlzdCwgbmV3X29iamVjdF9vYmplY3QoYXJnKSk7CisJCQl9 CisKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7ZnVuY3Rpb259RCIsCisJCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocHJvY0Zvcm0tPnByb25hbWVzcGFjZSwKKwkJ CQkJCQkJCQkJCQkJICBOYW1lU3RyKHByb2NGb3JtLT5wcm9uYW1lKSkpOworCisJCQlhcHBlbmRf Zm9ybWF0X3N0cmluZyh0bXBvYmosICIoIik7CisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9i aiwgIiV7YXJndHlwZXM6LCB9VCIsIGFyZ2xpc3QpOworCQkJYXBwZW5kX2Zvcm1hdF9zdHJpbmco dG1wb2JqLCAiKSIpOworCisJCQlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisJCX0KKworCQls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwl9CisKKwlp ZiAoc3RtdC0+aXNEcm9wKQorCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhhbHRlck9wRmFtLCAiRFJP UCIpOworCWVsc2UKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoYWx0ZXJPcEZhbSwgIkFERCIpOwor CisJYXBwZW5kX2FycmF5X29iamVjdChhbHRlck9wRmFtLCAiJXtpdGVtczosIH1zIiwgbGlzdCk7 CisKKwlSZWxlYXNlU3lzQ2FjaGUoZnRwKTsKKworCXJldHVybiBhbHRlck9wRmFtOworfQorCisv KgorICogRGVwYXJzZSBhIEFsdGVyT3duZXJTdG10IChBTFRFUiAuLi4gT1dORVIgVE8gLi4uKS4K KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlck93bmVyU3RtdChPYmplY3RBZGRy ZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlck93bmVyU3RtdCAqbm9kZSA9 IChBbHRlck93bmVyU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkJICAgKm93bmVyU3RtdDsK KwljaGFyCQkgICAqZm10OworCisJZm10ID0gcHNwcmludGYoIkFMVEVSICVzICUle2lkZW50aXR5 fXMgT1dORVIgVE8gJSV7bmV3b3duZXJ9SSIsCisJCQkJICAgc3RyaW5naWZ5X29ianR5cGUobm9k ZS0+b2JqZWN0VHlwZSkpOworCisJb3duZXJTdG10ID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAor CQkJCQkJCSAgICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJICAgZ2V0T2JqZWN0 SWRlbnRpdHkoJmFkZHJlc3MsIGZhbHNlKSwKKwkJCQkJCQkgICAibmV3b3duZXIiLCBPYmpUeXBl U3RyaW5nLAorCQkJCQkJCSAgIGdldF9yb2xlc3BlY19uYW1lKG5vZGUtPm5ld293bmVyKSk7CisK KwlyZXR1cm4gb3duZXJTdG10OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlclNlcVN0bXQu CisgKgorICogR2l2ZW4gYSBzZXF1ZW5jZSBPSUQgYW5kIGEgcGFyc2V0cmVlIHRoYXQgbW9kaWZp ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1h bmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJTZXFTdG10KE9pZCBvYmpl Y3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUJCSphbHRlclNlcTsKKwlPYmpUcmVl CQkqdG1wb2JqOworCVJlbGF0aW9uCSByZWxhdGlvbjsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEg c2VxZGF0YTsKKwlMaXN0CSAgICplbGVtcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCUZv cm1fcGdfc2VxdWVuY2Ugc2VxZm9ybTsKKwlSZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXNlcXR1 cGxlOworCUFsdGVyU2VxU3RtdCAqYWx0ZXJTZXFTdG10ID0gKEFsdGVyU2VxU3RtdCAqKSBwYXJz ZXRyZWU7CisKKwkvKgorCSAqIFNlcXVlbmNlIGZvciBJREVOVElUWSBDT0xVTU4gb3V0cHV0IHNl cGFyYXRlbHkodmlhIENSRUFURSBUQUJMRSBvcgorCSAqIEFMVEVSIFRBQkxFKTsgcmV0dXJuIGVt cHR5IGhlcmUuCisJICovCisJaWYgKGFsdGVyU2VxU3RtdC0+Zm9yX2lkZW50aXR5KQorCQlyZXR1 cm4gTlVMTDsKKworCXNlcWRhdGEgPSBnZXRfc2VxdWVuY2VfdmFsdWVzKG9iamVjdElkKTsKKwor CXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwly ZWwgPSB0YWJsZV9vcGVuKFNlcXVlbmNlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJ c2VxdHVwbGUgPSBTZWFyY2hTeXNDYWNoZUNvcHkxKFNFUVJFTElELAorCQkJCQkJCQkgICBPYmpl Y3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHNlcXR1cGxl KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNlcXVlbmNlICV1IiwK KwkJCSBvYmplY3RJZCk7CisKKwlzZXFmb3JtID0gKEZvcm1fcGdfc2VxdWVuY2UpIEdFVFNUUlVD VChzZXF0dXBsZSk7CisKKwlhbHRlclNlcSA9IG5ld19vYmp0cmVlKCJBTFRFUiBTRVFVRU5DRSIp OworCisJdG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwt PnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRp b24pKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlclNlcSwgIiV7aWRlbnRpdHl9RCIsIHRt cG9iaik7CisKKwlmb3JlYWNoKGNlbGwsICgoQWx0ZXJTZXFTdG10ICopIHBhcnNldHJlZSktPm9w dGlvbnMpCisJeworCQlEZWZFbGVtICplbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOwor CQlPYmpFbGVtICpuZXdlbG07CisKKwkJaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiY2FjaGUi KSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfQ2FjaGUoYWx0ZXJTZXEsIHNlcWZvcm0s IGZhbHNlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJjeWNsZSIpID09IDAp CisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9DeWNsZShhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2Up OworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImluY3JlbWVudCIpID09IDApCisJ CQluZXdlbG0gPSBkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShhbHRlclNlcSwgc2VxZm9ybSwgZmFs c2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgIm1pbnZhbHVlIikgPT0gMCkK KwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX01pbnZhbHVlKGFsdGVyU2VxLCBzZXFmb3JtLCBmYWxz ZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAibWF4dmFsdWUiKSA9PSAwKQor CQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfTWF4dmFsdWUoYWx0ZXJTZXEsIHNlcWZvcm0sIGZhbHNl KTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJzdGFydCIpID09IDApCisJCQlu ZXdlbG0gPSBkZXBhcnNlX1NlcV9TdGFydHdpdGgoYWx0ZXJTZXEsIHNlcWZvcm0sIGZhbHNlKTsK KwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJyZXN0YXJ0IikgPT0gMCkKKwkJCW5l d2VsbSA9IGRlcGFyc2VfU2VxX1Jlc3RhcnQoYWx0ZXJTZXEsIHNlcWRhdGEpOworCQllbHNlIGlm IChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgIm93bmVkX2J5IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRl cGFyc2VfU2VxX093bmVkQnkoYWx0ZXJTZXEsIG9iamVjdElkLCBmYWxzZSk7CisJCWVsc2UKKwkJ CWVsb2coRVJST1IsICJpbnZhbGlkIHNlcXVlbmNlIG9wdGlvbiAlcyIsIGVsZW0tPmRlZm5hbWUp OworCisJCWVsZW1zID0gbGFwcGVuZChlbGVtcywgbmV3ZWxtKTsKKwl9CisKKwlhcHBlbmRfYXJy YXlfb2JqZWN0KGFsdGVyU2VxLCAiJXtkZWZpbml0aW9uOiB9cyIsIGVsZW1zKTsKKworCXRhYmxl X2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24s IEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gYWx0ZXJTZXE7Cit9CisKKy8qCisgKiBEZXBh cnNlIGFsbCB0aGUgY29sbGVjdGVkIHN1YmNvbW1hbmRzIGFuZCByZXR1cm4gYW4gT2JqVHJlZSBy ZXByZXNlbnRpbmcgdGhlCisgKiBhbHRlciBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0FsdGVyVGFibGVTdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlPYmpU cmVlCSAgICphbHRlclRhYmxlU3RtdDsKKwlPYmpUcmVlCSAgICp0bXBvYmo7CisJT2JqVHJlZQkg ICAqdG1wb2JqMjsKKwlMaXN0CSAgICpkcGNvbnRleHQ7CisJUmVsYXRpb24JcmVsOworCUxpc3QJ ICAgKnN1YmNtZHMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwljaGFyCSAgICpmbXRzdHI7 CisJY29uc3QgY2hhciAqcmVsdHlwZTsKKwlib29sCQlpc3R5cGUgPSBmYWxzZTsKKwlMaXN0CSAg ICpleHBycyA9IE5JTDsKKworCUFzc2VydChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVGFibGUpOwor CisJcmVsID0gcmVsYXRpb25fb3BlbihjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCwgQWNjZXNz U2hhcmVMb2NrKTsKKwlkcGNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0 UmVsYXRpb25OYW1lKHJlbCksCisJCQkJCQkJCQljbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCk7 CisKKwlzd2l0Y2ggKHJlbC0+cmRfcmVsLT5yZWxraW5kKQorCXsKKwkJY2FzZSBSRUxLSU5EX1JF TEFUSU9OOgorCQljYXNlIFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEU6CisJCQlyZWx0eXBlID0g IlRBQkxFIjsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfSU5ERVg6CisJCWNhc2UgUkVMS0lO RF9QQVJUSVRJT05FRF9JTkRFWDoKKwkJCXJlbHR5cGUgPSAiSU5ERVgiOworCQkJYnJlYWs7CisJ CWNhc2UgUkVMS0lORF9WSUVXOgorCQkJcmVsdHlwZSA9ICJWSUVXIjsKKwkJCWJyZWFrOworCQlj YXNlIFJFTEtJTkRfQ09NUE9TSVRFX1RZUEU6CisJCQlyZWx0eXBlID0gIlRZUEUiOworCQkJaXN0 eXBlID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfRk9SRUlHTl9UQUJMRToKKwkJ CXJlbHR5cGUgPSAiRk9SRUlHTiBUQUJMRSI7CisJCQlicmVhazsKKworCQkvKiBUT0RPIHN1cHBv cnQgZm9yIHBhcnRpdGlvbmVkIHRhYmxlICovCisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1Is ICJ1bmV4cGVjdGVkIHJlbGtpbmQgJWQiLCByZWwtPnJkX3JlbC0+cmVsa2luZCk7CisJfQorCisJ LyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQUxURVIgcmVsdHlwZSAle2lkZW50aXR5 fUQgJXtzdWJjbWRzOiwgfXMKKwkgKi8KKwlmbXRzdHIgPSBwc3ByaW50ZigiQUxURVIgJXMiLCBy ZWx0eXBlKTsKKwlhbHRlclRhYmxlU3RtdCA9IG5ld19vYmp0cmVlKGZtdHN0cik7CisKKwl0bXBv YmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwK KwkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7CisJYXBwZW5kX29iamVj dF9vYmplY3QoYWx0ZXJUYWJsZVN0bXQsICIle2lkZW50aXR5fUQiLCB0bXBvYmopOworCisJZm9y ZWFjaChjZWxsLCBjbWQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzKQorCXsKKwkJQ29sbGVjdGVkQVRT dWJjbWQgKnN1YiA9IChDb2xsZWN0ZWRBVFN1YmNtZCAqKSBsZmlyc3QoY2VsbCk7CisJCUFsdGVy VGFibGVDbWQJKnN1YmNtZCA9IChBbHRlclRhYmxlQ21kICopIHN1Yi0+cGFyc2V0cmVlOworCQlP YmpUcmVlCSAgICp0cmVlOworCisJCUFzc2VydChJc0Eoc3ViY21kLCBBbHRlclRhYmxlQ21kKSk7 CisKKwkJc3dpdGNoIChzdWJjbWQtPnN1YnR5cGUpCisJCXsKKwkJCWNhc2UgQVRfQWRkQ29sdW1u OgorCQkJY2FzZSBBVF9BZGRDb2x1bW5SZWN1cnNlOgorCQkJCS8qIFhYWCBuZWVkIHRvIHNldCB0 aGUgInJlY3Vyc2UiIGJpdCBzb21ld2hlcmU/ICovCisJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRl ZiwgQ29sdW1uRGVmKSk7CisJCQkJdHJlZSA9IGRlcGFyc2VfQ29sdW1uRGVmKHJlbCwgZHBjb250 ZXh0LCBmYWxzZSwKKwkJCQkJCQkJCQkgKENvbHVtbkRlZiAqKSBzdWJjbWQtPmRlZiwgdHJ1ZSwg JmV4cHJzKTsKKwkJCQlmbXRzdHIgPSBwc3ByaW50ZigiQUREICVzICUle2RlZmluaXRpb259cyIs CisJCQkJCQkJCSAgaXN0eXBlID8gIkFUVFJJQlVURSIgOiAiQ09MVU1OIik7CisJCQkJdG1wb2Jq ID0gbmV3X29ianRyZWVfVkEoZm10c3RyLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgImFkZCBjb2x1bW4iLAorCQkJCQkJCQkJICJkZWZpbml0aW9uIiwgT2JqVHlwZU9iamVj dCwgdHJlZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkSW5kZXhDb25zdHJhaW50 OgorCQkJCXsKKwkJCQkJSW5kZXhTdG10ICAqaXN0bXQ7CisJCQkJCVJlbGF0aW9uCWlkeDsKKwkJ CQkJT2lkCQkJY29uc3RyT2lkID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOworCisJCQkJCUFzc2Vy dChJc0Eoc3ViY21kLT5kZWYsIEluZGV4U3RtdCkpOworCQkJCQlpc3RtdCA9IChJbmRleFN0bXQg Kikgc3ViY21kLT5kZWY7CisKKwkJCQkJQXNzZXJ0KGlzdG10LT5pc2NvbnN0cmFpbnQgJiYgaXN0 bXQtPnVuaXF1ZSk7CisKKwkJCQkJaWR4ID0gcmVsYXRpb25fb3Blbihpc3RtdC0+aW5kZXhPaWQs IEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJCQkJLyoKKwkJCQkJICogVmVyYm9zZSBzeW50YXgKKwkJ CQkJICoKKwkJCQkJICogQUREIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtjb25zdHJhaW50X3R5cGV9 cyBVU0lORyBJTkRFWAorCQkJCQkgKiAlaW5kZXhfbmFtZX1JICV7ZGVmZXJyYWJsZX1zICV7aW5p dF9kZWZlcnJlZH1zCisJCQkJCSAqLworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQURE IENPTlNUUkFJTlQgJXtuYW1lfUkiLCAyLAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJhZGQgY29uc3RyYWludCB1c2luZyBpbmRleCIsCisJCQkJCQkJCQkJICJuYW1lIiwgT2Jq VHlwZVN0cmluZywgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25zdHJPaWQpKTsKKworCQkJCQlhcHBl bmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2NvbnN0cmFpbnRfdHlwZX1zIiwgaXN0bXQtPmRl ZmVycmFibGUgPworCQkJCQkJCQkJCSAiREVGRVJSQUJMRSIgOiAiTk9UIERFRkVSUkFCTEUiKTsK KwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiVVNJTkcgSU5ERVggJXtpbmRleF9u YW1lfUkiLAorCQkJCQkJCQkJCSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpZHgpKTsKKwkJCQkJ YXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtkZWZlcnJhYmxlfXMiLCBpc3RtdC0+ZGVm ZXJyYWJsZSA/CisJCQkJCQkJCQkJICJERUZFUlJBQkxFIiA6ICJOT1QgREVGRVJSQUJMRSIpOwor CQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2luaXRfZGVmZXJyZWR9cyIsIGlz dG10LT5pbml0ZGVmZXJyZWQgPworCQkJCQkJCQkJCSAiSU5JVElBTExZIERFRkVSUkVEIiA6ICJJ TklUSUFMTFkgSU1NRURJQVRFIik7CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkJCQkJcmVsYXRpb25fY2xvc2UoaWR4LCBB Y2Nlc3NTaGFyZUxvY2spOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9SZUFkZElu ZGV4OgorCQkJY2FzZSBBVF9SZUFkZENvbnN0cmFpbnQ6CisJCQljYXNlIEFUX1JlQWRkQ29tbWVu dDoKKwkJCWNhc2UgQVRfUmVwbGFjZVJlbE9wdGlvbnM6CisJCQkJLyogU3VidHlwZXMgdXNlZCBm b3IgaW50ZXJuYWwgb3BlcmF0aW9uczsgbm90aGluZyB0byBkbyBoZXJlICovCisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfQWRkQ29sdW1uVG9WaWV3OgorCQkJCS8qIENSRUFURSBPUiBSRVBMQUNF IFZJRVcgLS0gbm90aGluZyB0byBkbyBoZXJlICovCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf Q29sdW1uRGVmYXVsdDoKKwkJCQlpZiAoc3ViY21kLT5kZWYgPT0gTlVMTCkKKwkJCQl7CisJCQkJ CXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBEUk9QIERF RkFVTFQiLCAyLAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGRlZmF1 bHQiLAorCQkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsK KwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJTGlzdAkgICAqZHBjb250ZXh0OworCQkJCQlI ZWFwVHVwbGUJYXR0cnR1cDsKKwkJCQkJQXR0ck51bWJlcglhdHRubzsKKworCQkJCQl0bXBvYmog PSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIERFRkFVTFQiLCAy LAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgZGVmYXVsdCIsCisJCQkJ CQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJCQkJCWRw Y29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVs KSwKKwkJCQkJCQkJCQkJCQlSZWxhdGlvbkdldFJlbGlkKHJlbCkpOworCQkJCQlhdHRydHVwID0g U2VhcmNoU3lzQ2FjaGVBdHROYW1lKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgc3ViY21kLT5uYW1l KTsKKwkJCQkJYXR0bm8gPSAoKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRTVFJVQ1QoYXR0cnR1cCkp LT5hdHRudW07CisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7ZGVmaW5pdGlv bn1zIiwKKwkJCQkJCQkJCQkgUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KHJlbCwgYXR0bm8sIGRw Y29udGV4dCwgTlVMTCkpOworCQkJCQlSZWxlYXNlU3lzQ2FjaGUoYXR0cnR1cCk7CisJCQkJfQor CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2Jq KSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcE5vdE51bGw6CisJCQkJdG1wb2JqID0g bmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgTk9UIE5VTEwiLCAy LAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3Agbm90IG51bGwiLAorCQkJ CQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX1NldE5vdE51bGw6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVf VkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBOT1QgTlVMTCIsIDIsCisJCQkJCQkJCQkg InR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IG5vdCBudWxsIiwKKwkJCQkJCQkJCSAiY29sdW1u IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9Ecm9wRXhwcmVzc2lvbjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIg Q09MVU1OICV7Y29sdW1ufUkgRFJPUCBFWFBSRVNTSU9OIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIs IE9ialR5cGVTdHJpbmcsICJkcm9wIGV4cHJlc3Npb24iLAorCQkJCQkJCQkJICJjb2x1bW4iLCBP YmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRt cG9iaiwgIiV7aWZfbm90X2V4aXN0c31zIiwKKwkJCQkJCQkJCSBzdWJjbWQtPm1pc3Npbmdfb2sg PyAiSUYgRVhJU1RTIjogIiIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldFN0YXRp c3RpY3M6CisJCQkJeworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJbnRlZ2VyKSk7CisJ CQkJCWlmIChzdWJjbWQtPm5hbWUpCisJCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxU RVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIFNUQVRJU1RJQ1MgJXtzdGF0aXN0aWNzfW4iLAorCQkJ CQkJCQkJCQkgMywKKwkJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBzdGF0 aXN0aWNzIiwKKwkJCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5h bWUsCisJCQkJCQkJCQkJCSAic3RhdGlzdGljcyIsIE9ialR5cGVJbnRlZ2VyLAorCQkJCQkJCQkJ CQkgaW50VmFsKChJbnRlZ2VyICopIHN1YmNtZC0+ZGVmKSk7CisJCQkJCWVsc2UKKwkJCQkJCXRt cG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59biBTRVQgU1RBVElT VElDUyAle3N0YXRpc3RpY3N9biIsCisJCQkJCQkJCQkJCSAzLAorCQkJCQkJCQkJCQkgInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAic2V0IHN0YXRpc3RpY3MiLAorCQkJCQkJCQkJCQkgImNvbHVtbiIs IE9ialR5cGVJbnRlZ2VyLCBzdWJjbWQtPm51bSwKKwkJCQkJCQkJCQkJICJzdGF0aXN0aWNzIiwg T2JqVHlwZUludGVnZXIsCisJCQkJCQkJCQkJCSBpbnRWYWwoKEludGVnZXIgKikgc3ViY21kLT5k ZWYpKTsKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldE9wdGlvbnM6CisJ CQljYXNlIEFUX1Jlc2V0T3B0aW9uczoKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCgKKwkJCQkJCQkJCSAgZGVwYXJzZV9Db2x1bW5TZXRPcHRpb25zKHN1 YmNtZCkpKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRTdG9yYWdlOgorCQkJCUFzc2Vy dChJc0Eoc3ViY21kLT5kZWYsIFN0cmluZykpOworCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZB KCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgU1RPUkFHRSAle3N0b3JhZ2V9cyIsIDMsCisJ CQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHN0b3JhZ2UiLAorCQkJCQkJCQkJ ICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJCQkgInN0b3Jh Z2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIHN0clZhbCgoU3RyaW5nICopIHN1YmNtZC0+ ZGVmKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0Q29tcHJlc3Npb246CisJCQkJ QXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgU3RyaW5nKSk7CisJCQkJdG1wb2JqID0gbmV3X29ianRy ZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBDT01QUkVTU0lPTiAle2NvbXByZXNz aW9uX21ldGhvZH1zIiwKKwkJCQkJCQkJCSAzLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgInNldCBjb21wcmVzc2lvbiIsCisJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJp bmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCSAiY29tcHJlc3Npb25fbWV0aG9kIiwgT2JqVHlw ZVN0cmluZywKKwkJCQkJCQkJCSBzdHJWYWwoKFN0cmluZyAqKSBzdWJjbWQtPmRlZikpOworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOwor CQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BDb2x1bW5SZWN1cnNlOgorCQkJY2FzZSBBVF9E cm9wQ29sdW1uOgorCQkJCWZtdHN0ciA9IHBzcHJpbnRmKCJEUk9QICVzICUle2NvbHVtbn1JIiwK KwkJCQkJCQkJICBpc3R5cGUgPyAiQVRUUklCVVRFIiA6ICJDT0xVTU4iKTsKKwkJCQl0bXBvYmog PSBuZXdfb2JqdHJlZV9WQShmbXRzdHIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAiZHJvcCBjb2x1bW4iLAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBz dWJjbWQtPm5hbWUpOworCQkJCXRtcG9iajIgPSBuZXdfb2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDEs CisJCQkJCQkJCQkgICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsIHN1YmNtZC0+YmVoYXZpb3IpOwor CQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7Y2FzY2FkZX1zIiwgdG1wb2JqMik7 CisKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBv YmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRJbmRleDoKKwkJCQl7CisJCQkJCU9p ZAkJCWlkeE9pZCA9IHN1Yi0+YWRkcmVzcy5vYmplY3RJZDsKKwkJCQkJSW5kZXhTdG10ICAqaXN0 bXQ7CisJCQkJCVJlbGF0aW9uCWlkeDsKKwkJCQkJY29uc3QgY2hhciAqaWR4bmFtZTsKKwkJCQkJ T2lkCQkJY29uc3RyT2lkOworCisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIEluZGV4U3Rt dCkpOworCQkJCQlpc3RtdCA9IChJbmRleFN0bXQgKikgc3ViY21kLT5kZWY7CisKKwkJCQkJaWYg KCFpc3RtdC0+aXNjb25zdHJhaW50KQorCQkJCQkJYnJlYWs7CisKKwkJCQkJaWR4ID0gcmVsYXRp b25fb3BlbihpZHhPaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJCWlkeG5hbWUgPSBSZWxhdGlv bkdldFJlbGF0aW9uTmFtZShpZHgpOworCisJCQkJCWNvbnN0ck9pZCA9IGdldF9yZWxhdGlvbl9j b25zdHJhaW50X29pZCgKKwkJCQkJCWNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkLCBpZHhuYW1l LCBmYWxzZSk7CisKKwkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFERCBDT05TVFJBSU5U ICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgMywKKwkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBl U3RyaW5nLCAiYWRkIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJp bmcsIGlkeG5hbWUsCisJCQkJCQkJCQkJICJkZWZpbml0aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJ CQkJCQkJCQkgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoY29uc3RyT2lkKSk7 CisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9i aikpOworCisJCQkJCXJlbGF0aW9uX2Nsb3NlKGlkeCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQl9 CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkQ29uc3RyYWludDoKKwkJCWNhc2UgQVRfQWRk Q29uc3RyYWludFJlY3Vyc2U6CisJCQkJeworCQkJCQkvKiBYWFggbmVlZCB0byBzZXQgdGhlICJy ZWN1cnNlIiBiaXQgc29tZXdoZXJlPyAqLworCQkJCQlPaWQJCQljb25zdHJPaWQgPSBzdWItPmFk ZHJlc3Mub2JqZWN0SWQ7CisJCQkJCWJvb2wJCWlzbnVsbDsKKwkJCQkJSGVhcFR1cGxlCXR1cDsK KwkJCQkJRGF0dW0JCXZhbDsKKwkJCQkJQ29uc3RyYWludCAqY29uc3RyOworCisJCQkJCUFzc2Vy dChJc0Eoc3ViY21kLT5kZWYsIENvbnN0cmFpbnQpKTsKKwkJCQkJY29uc3RyID0gIGNhc3ROb2Rl KENvbnN0cmFpbnQsIHN1YmNtZC0+ZGVmKTsKKworCQkJCQlpZiAoIWNvbnN0ci0+c2tpcF92YWxp ZGF0aW9uKQorCQkJCQl7CisJCQkJCQl0dXAgPSBTZWFyY2hTeXNDYWNoZTEoQ09OU1RST0lELCBP YmplY3RJZEdldERhdHVtKGNvbnN0ck9pZCkpOworCisJCQkJCQlpZiAoSGVhcFR1cGxlSXNWYWxp ZCh0dXApKQorCQkJCQkJeworCQkJCQkJCWNoYXIJICAgKmNvbmJpbjsKKworCQkJCQkJCS8qIEZl dGNoIGNvbnN0cmFpbnQgZXhwcmVzc2lvbiBpbiBwYXJzZXRyZWUgZm9ybSAqLworCQkJCQkJCXZh bCA9IFN5c0NhY2hlR2V0QXR0cihDT05TVFJPSUQsIHR1cCwKKwkJCQkJCQkJCQkJCSAgQW51bV9w Z19jb25zdHJhaW50X2NvbmJpbiwgJmlzbnVsbCk7CisKKwkJCQkJCQlpZiAoIWlzbnVsbCkKKwkJ CQkJCQl7CisJCQkJCQkJCWNvbmJpbiA9IFRleHREYXR1bUdldENTdHJpbmcodmFsKTsKKwkJCQkJ CQkJZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCBzdHJpbmdUb05vZGUoY29uYmluKSk7CisJCQkJCQkJ fQorCisJCQkJCQkJUmVsZWFzZVN5c0NhY2hlKHR1cCk7CisJCQkJCQl9CisJCQkJCX0KKworCQkJ CQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUREIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZp bml0aW9ufXMiLCAzLAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgY29u c3RyYWludCIsCisJCQkJCQkJCQkJICJuYW1lIiwgT2JqVHlwZVN0cmluZywgZ2V0X2NvbnN0cmFp bnRfbmFtZShjb25zdHJPaWQpLAorCQkJCQkJCQkJCSAiZGVmaW5pdGlvbiIsIE9ialR5cGVTdHJp bmcsCisJCQkJCQkJCQkJIHBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0 ck9pZCkpOworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWx0ZXJDb25zdHJh aW50OgorCQkJCXsKKwkJCQkJT2lkCQljb25zdHJPaWQgPSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7 CisJCQkJCUNvbnN0cmFpbnQgKmMgPSAoQ29uc3RyYWludCAqKSBzdWJjbWQtPmRlZjsKKworCQkJ CQkvKiBJZiBubyBjb25zdHJhaW50IHdhcyBhbHRlcmVkLCBzaWxlbnRseSBza2lwIGl0ICovCisJ CQkJCWlmICghT2lkSXNWYWxpZChjb25zdHJPaWQpKQorCQkJCQkJYnJlYWs7CisKKwkJCQkJQXNz ZXJ0KElzQShjLCBDb25zdHJhaW50KSk7CisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJB TFRFUiBDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmZXJyYWJsZX1zICV7aW5pdF9kZWZlcnJlZH1z IiwKKwkJCQkJCQkJCQkgNCwKKwkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWx0 ZXIgY29uc3RyYWludCIsCisJCQkJCQkJCQkJICJuYW1lIiwgT2JqVHlwZVN0cmluZywgZ2V0X2Nv bnN0cmFpbnRfbmFtZShjb25zdHJPaWQpLAorCQkJCQkJCQkJCSAiZGVmZXJyYWJsZSIsIE9ialR5 cGVTdHJpbmcsCisJCQkJCQkJCQkJIGMtPmRlZmVycmFibGUgPyAiREVGRVJSQUJMRSIgOiAiTk9U IERFRkVSUkFCTEUiLAorCQkJCQkJCQkJCSAiaW5pdF9kZWZlcnJlZCIsIE9ialR5cGVTdHJpbmcs CisJCQkJCQkJCQkJIGMtPmluaXRkZWZlcnJlZCA/ICJJTklUSUFMTFkgREVGRVJSRUQiIDogIklO SVRJQUxMWSBJTU1FRElBVEUiKTsKKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug QVRfVmFsaWRhdGVDb25zdHJhaW50UmVjdXJzZToKKwkJCWNhc2UgQVRfVmFsaWRhdGVDb25zdHJh aW50OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJWQUxJREFURSBDT05TVFJBSU5UICV7 Y29uc3RyYWludH1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJ2YWxp ZGF0ZSBjb25zdHJhaW50IiwKKwkJCQkJCQkJCSAiY29uc3RyYWludCIsIE9ialR5cGVTdHJpbmcs IHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcENvbnN0cmFp bnRSZWN1cnNlOgorCQkJY2FzZSBBVF9Ecm9wQ29uc3RyYWludDoKKwkJCQl0bXBvYmogPSBuZXdf b2JqdHJlZV9WQSgiRFJPUCBDT05TVFJBSU5UICV7Y29uc3RyYWludH1JIiwgMiwKKwkJCQkJCQkJ CSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJICJj b25zdHJhaW50IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9BbHRlckNvbHVtblR5cGU6CisJCQkJeworCQkJCQlUdXBsZURlc2MgdHVw ZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKKwkJCQkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0 OworCQkJCQlDb2x1bW5EZWYJICAgKmRlZjsKKworCQkJCQlhdHQgPSAmKHR1cGRlc2MtPmF0dHJz W3N1Yi0+YWRkcmVzcy5vYmplY3RTdWJJZCAtIDFdKTsKKwkJCQkJZGVmID0gKENvbHVtbkRlZiAq KSBzdWJjbWQtPmRlZjsKKwkJCQkJQXNzZXJ0KElzQShkZWYsIENvbHVtbkRlZikpOworCisJCQkJ CS8qCisJCQkJCSAqIFZlcmJvc2Ugc3ludGF4CisJCQkJCSAqCisJCQkJCSAqIENvbXBvc2l0ZSB0 eXBlczogQUxURVIgcmVsdHlwZSAle2NvbHVtbn1JIFNFVCBEQVRBIFRZUEUKKwkJCQkJICogJXtk YXRhdHlwZX1UICV7Y29sbGF0aW9ufXMgQVRUUklCVVRFICV7Y2FzY2FkZX1zCisJCQkJCSAqCisJ CQkJCSAqIE5vcm1hbCB0eXBlczogQUxURVIgcmVsdHlwZSAle2NvbHVtbn1JIFNFVCBEQVRBIFRZ UEUKKwkJCQkJICogJXtkYXRhdHlwZX1UICV7Y29sbGF0aW9ufXMgQ09MVU1OICV7dXNpbmd9cwor CQkJCQkgKi8KKwkJCQkJZm10c3RyID0gcHNwcmludGYoIkFMVEVSICVzICUle2NvbHVtbn1JIFNF VCBEQVRBIFRZUEUiLAorCQkJCQkJCQkJICBpc3R5cGUgPyAiQVRUUklCVVRFIiA6ICJDT0xVTU4i KTsKKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShmbXRzdHIsIDIsCisJCQkJCQkJCQkJ ICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFsdGVyIGNvbHVtbiB0eXBlIiwKKwkJCQkJCQkJCQkg ImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJCS8qIEFkZCB0aGUg VFlQRSBjbGF1c2UgKi8KKwkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtkYXRh dHlwZX1UIiwKKwkJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUoYXR0LT5hdHR0eXBpZCwK KwkJCQkJCQkJCQkJCQkJCSAgYXR0LT5hdHR0eXBtb2QpKTsKKworCQkJCQkvKiBBZGQgYSBDT0xM QVRFIGNsYXVzZSwgaWYgbmVlZGVkICovCisJCQkJCXRtcG9iajIgPSBuZXdfb2JqdHJlZSgiQ09M TEFURSIpOworCQkJCQlpZiAoT2lkSXNWYWxpZChhdHQtPmF0dGNvbGxhdGlvbikpCisJCQkJCXsK KwkJCQkJCU9ialRyZWUgKmNvbGxuYW1lOworCisJCQkJCQljb2xsbmFtZSA9IG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJICAg YXR0LT5hdHRjb2xsYXRpb24pOworCQkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqMiwg IiV7bmFtZX1EIiwgY29sbG5hbWUpOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJCWFwcGVuZF9i b29sX29iamVjdCh0bXBvYmoyLCAicHJlc2VudCIsIGZhbHNlKTsKKwkJCQkJYXBwZW5kX29iamVj dF9vYmplY3QodG1wb2JqLCAiJXtjb2xsYXRpb259cyIsIHRtcG9iajIpOworCisJCQkJCS8qIElm IG5vdCBhIGNvbXBvc2l0ZSB0eXBlLCBhZGQgdGhlIFVTSU5HIGNsYXVzZSAqLworCQkJCQlpZiAo IWlzdHlwZSkKKwkJCQkJeworCQkJCQkJLyoKKwkJCQkJCSAqIElmIHRoZXJlJ3MgYSBVU0lORyBj bGF1c2UsIHRyYW5zZm9ybUFsdGVyVGFibGVTdG10CisJCQkJCQkgKiByYW4gaXQgdGhyb3VnaCB0 cmFuc2Zvcm1FeHByIGFuZCBzdG9yZWQgdGhlCisJCQkJCQkgKiByZXN1bHRpbmcgbm9kZSBpbiBj b29rZWRfZGVmYXVsdCwgd2hpY2ggd2UgY2FuIHVzZQorCQkJCQkJICogaGVyZS4KKwkJCQkJCSAq LworCQkJCQkJdG1wb2JqMiA9IG5ld19vYmp0cmVlKCJVU0lORyIpOworCQkJCQkJaWYgKGRlZi0+ cmF3X2RlZmF1bHQpCisJCQkJCQl7CisJCQkJCQkJRGF0dW0JZGVwYXJzZWQ7CisJCQkJCQkJY2hh ciAgICpkZWZleHByOworCisJCQkJCQkJZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCBkZWYtPmNvb2tl ZF9kZWZhdWx0KTsKKwkJCQkJCQlkZWZleHByID0gbm9kZVRvU3RyaW5nKGRlZi0+Y29va2VkX2Rl ZmF1bHQpOworCQkJCQkJCWRlcGFyc2VkID0gRGlyZWN0RnVuY3Rpb25DYWxsMihwZ19nZXRfZXhw ciwKKwkJCQkJCQkJCQkJCQkJICAgQ1N0cmluZ0dldFRleHREYXR1bShkZWZleHByKSwKKwkJCQkJ CQkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxpZChyZWwpKTsKKwkJCQkJCQlhcHBlbmRfc3RyaW5n X29iamVjdCh0bXBvYmoyLCAiJXtleHByZXNzaW9ufXMiLAorCQkJCQkJCQkJCQkJIFRleHREYXR1 bUdldENTdHJpbmcoZGVwYXJzZWQpKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCQlhcHBl bmRfYm9vbF9vYmplY3QodG1wb2JqMiwgInByZXNlbnQiLCBmYWxzZSk7CisJCQkJCQlhcHBlbmRf b2JqZWN0X29iamVjdCh0bXBvYmosICIle3VzaW5nfXMiLCB0bXBvYmoyKTsKKwkJCQkJfQorCisJ CQkJCS8qIElmIGl0J3MgYSBjb21wb3NpdGUgdHlwZSwgYWRkIHRoZSBDQVNDQURFIGNsYXVzZSAq LworCQkJCQlpZiAoaXN0eXBlKQorCQkJCQl7CisJCQkJCQl0bXBvYmoyID0gbmV3X29ianRyZWUo IkNBU0NBREUiKTsKKwkJCQkJCWlmIChzdWJjbWQtPmJlaGF2aW9yICE9IERST1BfQ0FTQ0FERSkK KwkJCQkJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqMiwgInByZXNlbnQiLCBmYWxzZSk7CisJ CQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle2Nhc2NhZGV9cyIsIHRtcG9iajIp OworCQkJCQl9CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOworCisjaWZkZWYgVE9ET0xJU1QKKwkJ CWNhc2UgQVRfQWx0ZXJDb2x1bW5HZW5lcmljT3B0aW9uczoKKwkJCQl0bXBvYmogPSBkZXBhcnNl X0Zkd09wdGlvbnMoKExpc3QgKikgc3ViY21kLT5kZWYsCisJCQkJCQkJCQkJIHN1YmNtZC0+bmFt ZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w b2JqKSk7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWNhc2UgQVRfQ2hhbmdlT3duZXI6CisJCQkJ dG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk9XTkVSIFRPICV7b3duZXJ9SSIsIDIsCisJCQkJCQkJ CQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY2hhbmdlIG93bmVyIiwKKwkJCQkJCQkJCSAib3du ZXIiLCAgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBnZXRfcm9sZXNwZWNfbmFtZShzdWJjbWQt Pm5ld293bmVyKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQ2x1c3Rlck9uOgorCQkJ CXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJDTFVTVEVSIE9OICV7aW5kZXh9SSIsIDIsCisJCQkJ CQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY2x1c3RlciBvbiIsCisJCQkJCQkJCQkgImlu ZGV4IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJ Y2FzZSBBVF9Ecm9wQ2x1c3RlcjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIFdJ VEhPVVQgQ0xVU1RFUiIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0 IHdpdGhvdXQgY2x1c3RlciIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldExvZ2dl ZDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIExPR0dFRCIsIDEsCisJCQkJCQkJ CQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGxvZ2dlZCIpOworCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX1NldFVuTG9nZ2VkOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJT RVQgVU5MT0dHRUQiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB1 bmxvZ2dlZCIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BPaWRzOgorCQkJCXRt cG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgV0lUSE9VVCBPSURTIiwgMSwKKwkJCQkJCQkJCSAi dHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgd2l0aG91dCBvaWRzIik7CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7 CisJCQljYXNlIEFUX1NldEFjY2Vzc01ldGhvZDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiU0VUIEFDQ0VTUyBNRVRIT0QgJXthY2Nlc3NfbWV0aG9kfUkiLCAyLAorCQkJCQkJCQkJICJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBhY2Nlc3MgbWV0aG9kIiwKKwkJCQkJCQkJCSAiYWNj ZXNzX21ldGhvZCIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7 CisJCQljYXNlIEFUX1NldFRhYmxlU3BhY2U6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEo IlNFVCBUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9i alR5cGVTdHJpbmcsICJzZXQgdGFibGVzcGFjZSIsCisJCQkJCQkJCQkgInRhYmxlc3BhY2UiLCBP YmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X1NldFJlbE9wdGlvbnM6CisJCQljYXNlIEFUX1Jlc2V0UmVsT3B0aW9uczoKKwkJCQlzdWJjbWRz ID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCgKKwkJCQkJCQkJCSAgZGVwYXJz ZV9SZWxTZXRPcHRpb25zKHN1YmNtZCkpKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFi bGVUcmlnOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgVFJJR0dFUiAle3Ry aWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHRy aWdnZXIiLAorCQkJCQkJCQkJICJ0cmlnZ2VyIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1l KTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBv YmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVBbHdheXNUcmlnOgorCQkJCXRt cG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgQUxXQVlTIFRSSUdHRVIgJXt0cmlnZ2VyfUki LCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSBhbHdheXMgdHJp Z2dlciIsCisJCQkJCQkJCQkgInRyaWdnZXIiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUp OworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9i aikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVJlcGxpY2FUcmlnOgorCQkJCXRt cG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUkVQTElDQSBUUklHR0VSICV7dHJpZ2dlcn1J IiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgcmVwbGljYSB0 cmlnZ2VyIiwKKwkJCQkJCQkJCSAidHJpZ2dlciIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFt ZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w b2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVRyaWc6CisJCQkJdG1wb2Jq ID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgVFJJR0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJ CQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSB0cmlnZ2VyIiwKKwkJCQkJCQkJ CSAidHJpZ2dlciIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfRW5hYmxlVHJpZ0FsbDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiRU5BQkxFIFRSSUdHRVIgQUxMIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJlbmFibGUgdHJpZ2dlciBhbGwiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRz LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9E aXNhYmxlVHJpZ0FsbDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBUUklH R0VSIEFMTCIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSB0 cmlnZ2VyIGFsbCIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVRyaWdVc2Vy OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgVFJJR0dFUiBVU0VSIiwgMSwK KwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgdHJpZ2dlciB1c2VyIik7 CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2Jq KSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVRyaWdVc2VyOgorCQkJCXRtcG9i aiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFRSSUdHRVIgVVNFUiIsIDEsCisJCQkJCQkJCQkg InR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSB0cmlnZ2VyIHVzZXIiKTsKKwkJCQlzdWJj bWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQli cmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVSdWxlOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJFTkFCTEUgUlVMRSAle3J1bGV9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBl U3RyaW5nLCAiZW5hYmxlIHJ1bGUiLAorCQkJCQkJCQkJICJydWxlIiwgT2JqVHlwZVN0cmluZywg c3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVBbHdheXNS dWxlOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgQUxXQVlTIFJVTEUgJXty dWxlfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSBhbHdh eXMgcnVsZSIsCisJCQkJCQkJCQkgInJ1bGUiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUp OworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9i aikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVJlcGxpY2FSdWxlOgorCQkJCXRt cG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUkVQTElDQSBSVUxFICV7cnVsZX1JIiwgMiwK KwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgcmVwbGljYSBydWxlIiwK KwkJCQkJCQkJCSAicnVsZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3Vi Y21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJ YnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVJ1bGU6CisJCQkJdG1wb2JqID0gbmV3X29ianRy ZWVfVkEoIkRJU0FCTEUgUlVMRSAle3J1bGV9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAiZGlzYWJsZSBydWxlIiwKKwkJCQkJCQkJCSAicnVsZSIsIE9ialR5cGVTdHJp bmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkSW5oZXJp dDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiSU5IRVJJVCAle3BhcmVudH1EIiwgMiwK KwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJpbmhlcml0IiwKKwkJCQkJCQkJCSAi cGFyZW50IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBzdWItPmFkZHJlc3Mu b2JqZWN0SWQpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wSW5oZXJpdDoKKwkJ CQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiTk8gSU5IRVJJVCAle3BhcmVudH1EIiwgMiwKKwkJ CQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGluaGVyaXQiLAorCQkJCQkJCQkJ ICJwYXJlbnQiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIHN1Yi0+YWRkcmVz cy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZE9mOgorCQkJCXRt cG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJPRiAle3R5cGVfb2Z9VCIsIDIsCisJCQkJCQkJCQkgInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIG9mIiwKKwkJCQkJCQkJCSAidHlwZV9vZiIsIE9ialR5 cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUoc3ViLT5hZGRyZXNzLm9i amVjdElkLCAtMSkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BPZjoKKwkJCQl0 bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiTk9UIE9GIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9i alR5cGVTdHJpbmcsICJub3Qgb2YiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9SZXBs aWNhSWRlbnRpdHk6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlJFUExJQ0EgSURFTlRJ VFkiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInJlcGxpY2EgaWRlbnRp dHkiKTsKKwkJCQlzd2l0Y2ggKCgoUmVwbGljYUlkZW50aXR5U3RtdCAqKSBzdWJjbWQtPmRlZikt PmlkZW50aXR5X3R5cGUpCisJCQkJeworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfREVGQVVM VDoKKwkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7aWRlbnR9cyIsICJERUZB VUxUIik7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBSRVBMSUNBX0lERU5USVRZX0ZVTEw6CisJ CQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2lkZW50fXMiLCAiRlVMTCIpOwor CQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgUkVQTElDQV9JREVOVElUWV9OT1RISU5HOgorCQkJCQkJ YXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtpZGVudH1zIiwgIk5PVEhJTkciKTsKKwkJ CQkJCWJyZWFrOworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfSU5ERVg6CisJCQkJCQl0bXBv YmoyID0gbmV3X29ianRyZWVfVkEoIlVTSU5HIElOREVYICV7aW5kZXh9SSIsIDEsCisJCQkJCQkJ CQkJCSAgImluZGV4IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJICAoKFJlcGxpY2FJZGVu dGl0eVN0bXQgKikgc3ViY21kLT5kZWYpLT5uYW1lKTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHRtcG9iaiwgIiV7aWRlbnR9cyIsIHRtcG9iajIpOworCQkJCQkJYnJlYWs7CisJCQkJfQor CQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikp OworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVJvd1NlY3VyaXR5OgorCQkJCXRtcG9i aiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZIiwgMSwKKwkJCQkJ CQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgcm93IHNlY3VyaXR5Iik7CisJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVJvd1NlY3VyaXR5OgorCQkJCXRtcG9iaiA9 IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFJPVyBMRVZFTCBTRUNVUklUWSIsIDEsCisJCQkJCQkJ CQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSByb3cgc2VjdXJpdHkiKTsKKwkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJ CQlicmVhazsKKyNpZmRlZiBUT0RPTElTVAorCQkJY2FzZSBBVF9HZW5lcmljT3B0aW9uczoKKwkJ CQl0bXBvYmogPSBkZXBhcnNlX0Zkd09wdGlvbnMoKExpc3QgKikgc3ViY21kLT5kZWYsIE5VTEwp OworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9i aikpOworCQkJCWJyZWFrOworI2VuZGlmCisJCQljYXNlIEFUX0F0dGFjaFBhcnRpdGlvbjoKKwkJ CQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQVRUQUNIIFBBUlRJVElPTiAle3BhcnRpdGlvbl9p ZGVudGl0eX1EIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhdHRhY2gg cGFydGl0aW9uIiwKKwkJCQkJCQkJCSAicGFydGl0aW9uX2lkZW50aXR5IiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCQkJCSBzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsKKworCQkJCWlm IChyZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQorCQkJ CQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3BhcnRpdGlvbl9ib3VuZH1zIiwKKwkJ CQkJCQkJCQkgUmVsYXRpb25HZXRQYXJ0aXRpb25Cb3VuZChzdWItPmFkZHJlc3Mub2JqZWN0SWQp KTsKKworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cG9iaikpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9EZXRhY2hQYXJ0aXRpb246CisJCQkJdG1w b2JqID0gbmV3X29ianRyZWVfVkEoIkRFVEFDSCBQQVJUSVRJT04gJXtwYXJ0aXRpb25faWRlbnRp dHl9RCIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGV0YWNoIHBhcnRp dGlvbiIsCisJCQkJCQkJCQkgInBhcnRpdGlvbl9pZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkJCQkgc3ViLT5hZGRyZXNzLm9iamVjdElkKSk7CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7 CisJCQljYXNlIEFUX0RldGFjaFBhcnRpdGlvbkZpbmFsaXplOgorCQkJCXRtcG9iaiA9IG5ld19v Ymp0cmVlX1ZBKCJERVRBQ0ggUEFSVElUSU9OICV7cGFydGl0aW9uX2lkZW50aXR5fUQgRklOQUxJ WkUiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRldGFjaCBwYXJ0aXRp b24gZmluYWxpemUiLAorCQkJCQkJCQkJICJwYXJ0aXRpb25faWRlbnRpdHkiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIHN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1 YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJ CWJyZWFrOworCQkJY2FzZSBBVF9BZGRJZGVudGl0eToKKwkJCQl7CisJCQkJCUF0dHJOdW1iZXIJ YXR0bnVtOworCQkJCQlPaWQJCQlzZXFfcmVsaWQ7CisJCQkJCU9ialRyZWUJKnNlcWRlZjsKKwkJ CQkJQ29sdW1uRGVmICAqY29sZGVmID0gKENvbHVtbkRlZiAqKSBzdWJjbWQtPmRlZjsKKworCQkJ CQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgQUREICV7 aWRlbnRpdHlfY29sdW1ufXMiLCAyLAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJhZGQgaWRlbnRpdHkiLAorCQkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3Vi Y21kLT5uYW1lKTsKKworCQkJCQlhdHRudW0gPSBnZXRfYXR0bnVtKFJlbGF0aW9uR2V0UmVsaWQo cmVsKSwgc3ViY21kLT5uYW1lKTsKKwkJCQkJc2VxX3JlbGlkID0gZ2V0SWRlbnRpdHlTZXF1ZW5j ZShSZWxhdGlvbkdldFJlbGlkKHJlbCksIGF0dG51bSwgdHJ1ZSk7CisJCQkJCXNlcWRlZiA9IGRl cGFyc2VfQ29sdW1uSWRlbnRpdHkoc2VxX3JlbGlkLCBjb2xkZWYtPmlkZW50aXR5LCBmYWxzZSk7 CisKKwkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiaWRlbnRpdHlfY29sdW1uIiwg c2VxZGVmKTsKKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX1NldElkZW50aXR5 OgorCQkJCXsKKwkJCQkJRGVmRWxlbQkqZGVmZWw7CisJCQkJCWNoYXIJCWlkZW50aXR5ID0gMDsK KwkJCQkJT2JqVHJlZQkgICAqc2VxZGVmOworCQkJCQlBdHRyTnVtYmVyCWF0dG51bTsKKwkJCQkJ T2lkCQkJc2VxX3JlbGlkOworCisKKwkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVS IENPTFVNTiAle2NvbHVtbn1JIiwgMiwKKwkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAic2V0IGlkZW50aXR5IiwKKwkJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1 YmNtZC0+bmFtZSk7CisKKwkJCQkJaWYgKHN1YmNtZC0+ZGVmKQorCQkJCQl7CisJCQkJCQlMaXN0 CSAgICpkZWYgPSAoTGlzdCAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQkJQXNzZXJ0KElzQShzdWJj bWQtPmRlZiwgTGlzdCkpOworCisJCQkJCQlkZWZlbCA9IGxpbml0aWFsX25vZGUoRGVmRWxlbSwg ZGVmKTsKKwkJCQkJCWlkZW50aXR5ID0gZGVmR2V0SW50MzIoZGVmZWwpOworCQkJCQl9CisKKwkJ CQkJYXR0bnVtID0gZ2V0X2F0dG51bShSZWxhdGlvbkdldFJlbGlkKHJlbCksIHN1YmNtZC0+bmFt ZSk7CisJCQkJCXNlcV9yZWxpZCA9IGdldElkZW50aXR5U2VxdWVuY2UoUmVsYXRpb25HZXRSZWxp ZChyZWwpLCBhdHRudW0sIHRydWUpOworCQkJCQlzZXFkZWYgPSBkZXBhcnNlX0NvbHVtbklkZW50 aXR5KHNlcV9yZWxpZCwgaWRlbnRpdHksIHRydWUpOworCisJCQkJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHRtcG9iaiwgIiV7ZGVmaW5pdGlvbn1zIiwgc2VxZGVmKTsKKworCQkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQkJYnJlYWs7 CisJCQkJfQorCQkJY2FzZSBBVF9Ecm9wSWRlbnRpdHk6CisJCQkJdG1wb2JqID0gbmV3X29ianRy ZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgSURFTlRJVFkiLCAyLAorCQkJCQkJ CQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgaWRlbnRpdHkiLAorCQkJCQkJCQkJICJj b2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJCQkJYXBwZW5kX3N0cmlu Z19vYmplY3QodG1wb2JqLCAiJXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJCQkJIHN1YmNtZC0+ bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIpOworCisJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisJCQlkZWZh dWx0OgorCQkJCWVsb2coV0FSTklORywgInVuc3VwcG9ydGVkIGFsdGVyIHRhYmxlIHN1YnR5cGUg JWQiLAorCQkJCQkgc3ViY21kLT5zdWJ0eXBlKTsKKwkJCQlicmVhazsKKwkJfQorCisJCS8qCisJ CSAqIFdlIGRvbid0IHN1cHBvcnQgcmVwbGljYXRpbmcgQUxURVIgVEFCTEUgd2hpY2ggY29udGFp bnMgdm9sYXRpbGUKKwkJICogZnVuY3Rpb25zIGJlY2F1c2UgSXQncyBwb3NzaWJsZSB0aGUgZnVu Y3Rpb25zIGNvbnRhaW4gRERML0RNTCBpbgorCQkgKiB3aGljaCBjYXNlIHRoZXNlIG9wZXJ0aW9u cyB3aWxsIGJlIGV4ZWN1dGVkIHR3aWNlIGFuZCBjYXVzZQorCQkgKiBkdXBsaWNhdGUgZGF0YS4g SW4gYWRkaXRpb24sIHdlIGRvbid0IGtub3cgd2hldGhlciB0aGUgdGFibGVzIGJlaW5nCisJCSAq IGFjY2Vzc2VkIGJ5IHRoZXNlIERETC9ETUwgYXJlIHB1Ymxpc2hlZCBvciBub3QuIFNvIGJsaW5k bHkgYWxsb3dpbmcKKwkJICogc3VjaCBmdW5jdGlvbnMgY2FuIGFsbG93IHVuaW50ZW5kZWQgY2xh dXNlcyBsaWtlIHRoZSB0YWJsZXMgYWNjZXNzZWQKKwkJICogaW4gdGhvc2UgZnVuY3Rpb25zIG1h eSBub3QgZXZlbiBleGlzdCBvbiB0aGUgc3Vic2NyaWJlci1zaWRlLgorCQkgKi8KKwkJaWYgKGNv bnRhaW5fdm9sYXRpbGVfZnVuY3Rpb25zKChOb2RlICopIGV4cHJzKSkKKwkJCWVyZXBvcnQoRVJS T1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJ IGVycm1zZygiQUxURVIgVEFCTEUgY29tbWFuZCB1c2luZyB2b2xhdGlsZSBmdW5jdGlvbiBjYW5u b3QgYmUgcmVwbGljYXRlZCIpKSk7CisKKwkJLyoKKwkJICogQ2xlYW4gdGhlIGxpc3QgYXMgd2Ug YWxyZWFkeSBjb25maXJtZWQgdGhlcmUgaXMgbm8gdm9sYXRpbGUKKwkJICogZnVuY3Rpb24uCisJ CSAqLworCQlsaXN0X2ZyZWUoZXhwcnMpOworCQlleHBycyA9IE5JTDsKKwl9CisKKwl0YWJsZV9j bG9zZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlpZiAobGlzdF9sZW5ndGgoc3ViY21kcykg PT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVyVGFibGVT dG10LCAiJXtzdWJjbWRzOiwgfXMiLCBzdWJjbWRzKTsKKworCXJldHVybiBhbHRlclRhYmxlU3Rt dDsKK30KKworLyoKKyAqIFN1YnJvdXRpbmUgZm9yIENSRUFURSBUQUJMRSBkZXBhcnNpbmcuCisg KgorICogRGVwYXJzZSBhIENvbHVtbkRlZiBub2RlIHdpdGhpbiBhIHJlZ3VsYXIgKG5vbiB0eXBl ZCkgdGFibGUgY3JlYXRpb24uCisgKgorICogTk9UIE5VTEwgY29uc3RyYWludHMgaW4gdGhlIGNv bHVtbiBkZWZpbml0aW9uIGFyZSBlbWl0dGVkIGRpcmVjdGx5IGluIHRoZQorICogY29sdW1uIGRl ZmluaXRpb24gYnkgdGhpcyByb3V0aW5lOyBvdGhlciBjb25zdHJhaW50cyBtdXN0IGJlIGVtaXR0 ZWQKKyAqIGVsc2V3aGVyZSAodGhlIGluZm8gaW4gdGhlIHBhcnNlIG5vZGUgaXMgaW5jb21wbGV0 ZSBhbnl3YXkuKS4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db2x1bW5EZWYoUmVs YXRpb24gcmVsYXRpb24sIExpc3QgKmRwY29udGV4dCwgYm9vbCBjb21wb3NpdGUsCisJCQkJICBD b2x1bW5EZWYgKmNvbGRlZiwgYm9vbCBpc19hbHRlciwgTGlzdCAqKmV4cHJzKQoreworCU9ialRy ZWUJICAgKmNvbHVtbjsKKwlPYmpUcmVlCSAgICp0bXBvYmo7CisJT2lkCQkJcmVsaWQgPSBSZWxh dGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKwlIZWFwVHVwbGUJYXR0clR1cDsKKwlGb3JtX3BnX2F0 dHJpYnV0ZSBhdHRyRm9ybTsKKwlPaWQJCQl0eXBpZDsKKwlpbnQzMgkJdHlwbW9kOworCU9pZAkJ CXR5cGNvbGxhdGlvbjsKKwlib29sCQlzYXdfbm90bnVsbDsKKwlMaXN0Q2VsbCAgICpjZWxsOwor CisJLyoKKwkgKiBJbmhlcml0ZWQgY29sdW1ucyB3aXRob3V0IGxvY2FsIGRlZmluaXRpb25zIG11 c3Qgbm90IGJlIGVtaXR0ZWQuCisJICoKKwkgKiBYWFggbWF5YmUgaXQgaXMgdXNlZnVsIHRvIGhh dmUgdGhlbSB3aXRoICJwcmVzZW50ID0gZmFsc2UiIG9yIHNvbWUgc3VjaD8KKwkgKi8KKwlpZiAo IWNvbGRlZi0+aXNfbG9jYWwpCisJCXJldHVybiBOVUxMOworCisJYXR0clR1cCA9IFNlYXJjaFN5 c0NhY2hlQXR0TmFtZShyZWxpZCwgY29sZGVmLT5jb2xuYW1lKTsKKwlpZiAoIUhlYXBUdXBsZUlz VmFsaWQoYXR0clR1cCkpCisJCWVsb2coRVJST1IsICJjb3VsZCBub3QgZmluZCBjYWNoZSBlbnRy eSBmb3IgY29sdW1uIFwiJXNcIiBvZiByZWxhdGlvbiAldSIsCisJCQkgY29sZGVmLT5jb2xuYW1l LCByZWxpZCk7CisJYXR0ckZvcm0gPSAoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVChhdHRy VHVwKTsKKworCWdldF9hdHR0eXBldHlwbW9kY29sbChyZWxpZCwgYXR0ckZvcm0tPmF0dG51bSwK KwkJCQkJCSAgJnR5cGlkLCAmdHlwbW9kLCAmdHlwY29sbGF0aW9uKTsKKworCS8qCisJICogVmVy Ym9zZSBzeW50YXgKKwkgKgorCSAqICV7bmFtZX1JICV7Y29sdHlwZX1UICV7Y29tcHJlc3Npb259 cyAle2RlZmF1bHR9cyAle25vdF9udWxsfXMKKwkgKiAle2NvbGxhdGlvbn1zCisJICovCisJY29s dW1uID0gbmV3X29ianRyZWVfVkEoIiV7bmFtZX1JICV7Y29sdHlwZX1UIiwgMywKKwkJCQkJCQki dHlwZSIsIE9ialR5cGVTdHJpbmcsICJjb2x1bW4iLAorCQkJCQkJCSJuYW1lIiwgT2JqVHlwZVN0 cmluZywgY29sZGVmLT5jb2xuYW1lLAorCQkJCQkJCSJjb2x0eXBlIiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBpZCwgdHlwbW9kKSk7CisKKwkvKiBVU0lO RyBjbGF1c2UgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiQ09NUFJFU1NJT04iKTsKKwlpZiAo Y29sZGVmLT5jb21wcmVzc2lvbikKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtj b21wcmVzc2lvbl9tZXRob2R9SSIsIGNvbGRlZi0+Y29tcHJlc3Npb24pOworCWVsc2UKKwl7CisJ CWFwcGVuZF9udWxsX29iamVjdCh0bXBvYmosICIle2NvbXByZXNzaW9uX21ldGhvZH1JIik7CisJ CWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlhcHBl bmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIle2NvbXByZXNzaW9ufXMiLCB0bXBvYmopOworCisJ dG1wb2JqID0gbmV3X29ianRyZWUoIkNPTExBVEUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBjb2xs YXRpb24pKQorCXsKKwkJT2JqVHJlZSAqY29sbG5hbWU7CisKKwkJY29sbG5hbWUgPSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoQ29sbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJICAg dHlwY29sbGF0aW9uKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtuYW1lfUQi LCBjb2xsbmFtZSk7CisJfQorCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInBy ZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY29sdW1uLCAiJXtjb2xsYXRp b259cyIsIHRtcG9iaik7CisKKwlpZiAoIWNvbXBvc2l0ZSkKKwl7CisJCU9pZAlzZXFyZWxpZCA9 IEludmFsaWRPaWQ7CisKKwkJLyoKKwkJICogRW1pdCBhIE5PVCBOVUxMIGRlY2xhcmF0aW9uIGlm IG5lY2Vzc2FyeS4gIE5vdGUgdGhhdCB3ZSBjYW5ub3QgdHJ1c3QKKwkJICogcGdfYXR0cmlidXRl LmF0dG5vdG51bGwgaGVyZSwgYmVjYXVzZSB0aGF0IGJpdCBpcyBhbHNvIHNldCB3aGVuCisJCSAq IHByaW1hcnkga2V5cyBhcmUgc3BlY2lmaWVkOyBhbmQgd2UgbXVzdCBub3QgZW1pdCBhIE5PVCBO VUxMCisJCSAqIGNvbnN0cmFpbnQgaW4gdGhhdCBjYXNlLCB1bmxlc3MgZXhwbGljaXRlbHkgc3Bl Y2lmaWVkLiAgVGhlcmVmb3JlLAorCQkgKiB3ZSBzY2FuIHRoZSBsaXN0IG9mIGNvbnN0cmFpbnRz IGF0dGFjaGVkIHRvIHRoaXMgY29sdW1uIHRvIGRldGVybWluZQorCQkgKiB3aGV0aGVyIHdlIG5l ZWQgdG8gZW1pdCBhbnl0aGluZy4KKwkJICogKEZvcnR1bmF0ZWx5LCBOT1QgTlVMTCBjb25zdHJh aW50cyBjYW5ub3QgYmUgdGFibGUgY29uc3RyYWludHMuKQorCQkgKgorCQkgKiBJbiB0aGUgQUxU RVIgVEFCTEUgY2FzZXMsIHdlIGFsc28gYWRkIGEgTk9UIE5VTEwgaWYgdGhlIGNvbERlZiBpcwor CQkgKiBtYXJrZWQgaXNfbm90X251bGwuCisJCSAqLworCQlzYXdfbm90bnVsbCA9IGZhbHNlOwor CQlmb3JlYWNoKGNlbGwsIGNvbGRlZi0+Y29uc3RyYWludHMpCisJCXsKKwkJCUNvbnN0cmFpbnQg KmNvbnN0ciA9IChDb25zdHJhaW50ICopIGxmaXJzdChjZWxsKTsKKworCQkJaWYgKGNvbnN0ci0+ Y29udHlwZSA9PSBDT05TVFJfTk9UTlVMTCkKKwkJCQlzYXdfbm90bnVsbCA9IHRydWU7CisJCX0K KwkJaWYgKGlzX2FsdGVyICYmIGNvbGRlZi0+aXNfbm90X251bGwpCisJCQlzYXdfbm90bnVsbCA9 IHRydWU7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY29sdW1uLCAiJXtub3RfbnVsbH1zIiwK KwkJCQkJCQkgc2F3X25vdG51bGwgPyAiTk9UIE5VTEwiIDogIiIpOworCisJCXRtcG9iaiA9IG5l d19vYmp0cmVlKCJERUZBVUxUIik7CisJCWlmIChhdHRyRm9ybS0+YXR0aGFzZGVmKQorCQl7CisJ CQljaGFyICpkZWZzdHI7CisKKwkJCWRlZnN0ciA9IFJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChy ZWxhdGlvbiwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCQkJCQkJICBkcGNvbnRleHQsIGV4cHJz KTsKKworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtkZWZhdWx0fXMiLCBkZWZz dHIpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50 IiwgZmFsc2UpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIle2RlZmF1bHR9cyIs IHRtcG9iaik7CisKKwkJLyogSURFTlRJVFkgQ09MVU1OICovCisJCWlmIChjb2xkZWYtPmlkZW50 aXR5KQorCQl7CisJCQlPaWQJYXR0bm8gPSBnZXRfYXR0bnVtKHJlbGlkLCBjb2xkZWYtPmNvbG5h bWUpOworCQkJc2VxcmVsaWQgPSBnZXRJZGVudGl0eVNlcXVlbmNlKHJlbGlkLCBhdHRubywgZmFs c2UpOworCQl9CisKKwkJdG1wb2JqID0gZGVwYXJzZV9Db2x1bW5JZGVudGl0eShzZXFyZWxpZCwg Y29sZGVmLT5pZGVudGl0eSwgaXNfYWx0ZXIpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1 bW4sICIle2lkZW50aXR5X2NvbHVtbn1zIiwgdG1wb2JqKTsKKworCQkvKiBHRU5FUkFURUQgQ09M VU1OIEVYUFJFU1NJT04gKi8KKwkJdG1wb2JqID0gbmV3X29ianRyZWUoIkdFTkVSQVRFRCBBTFdB WVMgQVMiKTsKKwkJaWYgKGNvbGRlZi0+Z2VuZXJhdGVkID09IEFUVFJJQlVURV9HRU5FUkFURURf U1RPUkVEKQorCQl7CisJCQljaGFyICpkZWZzdHI7CisKKwkJCWRlZnN0ciA9IFJlbGF0aW9uR2V0 Q29sdW1uRGVmYXVsdChyZWxhdGlvbiwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCQkJCQkJICBk cGNvbnRleHQsIGV4cHJzKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7Z2Vu ZXJhdGlvbl9leHByfXMgU1RPUkVEIiwgZGVmc3RyKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRf Ym9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKworCQlhcHBlbmRfb2JqZWN0 X29iamVjdChjb2x1bW4sICIle2dlbmVyYXRlZF9jb2x1bW59cyIsIHRtcG9iaik7CisJfQorCisJ UmVsZWFzZVN5c0NhY2hlKGF0dHJUdXApOworCisJcmV0dXJuIGNvbHVtbjsKK30KKworLyoKKyAq IFN1YnJvdXRpbmUgZm9yIENSRUFURSBUQUJMRSBPRiBkZXBhcnNpbmcuCisgKgorICogRGVwYXJz ZSBhIENvbHVtbkRlZiBub2RlIHdpdGhpbiBhIHR5cGVkIHRhYmxlIGNyZWF0aW9uLglUaGlzIGlz IHNpbXBsZXIKKyAqIHRoYW4gdGhlIHJlZ3VsYXIgY2FzZSwgYmVjYXVzZSB3ZSBkb24ndCBoYXZl IHRvIGVtaXQgdGhlIHR5cGUgZGVjbGFyYXRpb24sCisgKiBjb2xsYXRpb24sIG9yIGRlZmF1bHQu ICBIZXJlIHdlIG9ubHkgcmV0dXJuIHNvbWV0aGluZyBpZiB0aGUgY29sdW1uIGlzIGJlaW5nCisg KiBkZWNsYXJlZCBOT1QgTlVMTC4KKyAqCisgKiBBcyBpbiBkZXBhcnNlX0NvbHVtbkRlZiwgYW55 IG90aGVyIGNvbnN0cmFpbnQgaXMgcHJvY2Vzc2VkIGVsc2V3aGVyZS4KKyAqLworc3RhdGljIE9i alRyZWUgKgorZGVwYXJzZV9Db2x1bW5EZWZfdHlwZWQoUmVsYXRpb24gcmVsYXRpb24sIExpc3Qg KmRwY29udGV4dCwgQ29sdW1uRGVmICpjb2xkZWYpCit7CisJT2JqVHJlZQkqY29sdW1uID0gTlVM TDsKKwlPYmpUcmVlCSp0bXBvYmo7CisJT2lkCQkJcmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJl bGF0aW9uKTsKKwlIZWFwVHVwbGUJYXR0clR1cDsKKwlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyRm9y bTsKKwlPaWQJCQl0eXBpZDsKKwlpbnQzMgkJdHlwbW9kOworCU9pZAkJCXR5cGNvbGxhdGlvbjsK Kwlib29sCQlzYXdfbm90bnVsbDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJYXR0clR1cCA9IFNl YXJjaFN5c0NhY2hlQXR0TmFtZShyZWxpZCwgY29sZGVmLT5jb2xuYW1lKTsKKwlpZiAoIUhlYXBU dXBsZUlzVmFsaWQoYXR0clR1cCkpCisJCWVsb2coRVJST1IsICJjb3VsZCBub3QgZmluZCBjYWNo ZSBlbnRyeSBmb3IgY29sdW1uIFwiJXNcIiBvZiByZWxhdGlvbiAldSIsCisJCQkgY29sZGVmLT5j b2xuYW1lLCByZWxpZCk7CisJYXR0ckZvcm0gPSAoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVD VChhdHRyVHVwKTsKKworCWdldF9hdHR0eXBldHlwbW9kY29sbChyZWxpZCwgYXR0ckZvcm0tPmF0 dG51bSwKKwkJCQkJCSAgJnR5cGlkLCAmdHlwbW9kLCAmdHlwY29sbGF0aW9uKTsKKworCS8qCisJ ICogU2VhcmNoIGZvciBhIE5PVCBOVUxMIGRlY2xhcmF0aW9uLiAgQXMgaW4gZGVwYXJzZV9Db2x1 bW5EZWYsIHdlIHJlbHkgb24KKwkgKiBmaW5kaW5nIGEgY29uc3RyYWludCBvbiB0aGUgY29sdW1u IHJhdGhlciB0aGFuIGNvbGRlZi0+aXNfbm90X251bGwuCisJICogKFRoaXMgcm91dGluZSBpcyBu ZXZlciB1c2VkIGZvciBBTFRFUiBjYXNlcy4pCisJICovCisJc2F3X25vdG51bGwgPSBmYWxzZTsK Kwlmb3JlYWNoKGNlbGwsIGNvbGRlZi0+Y29uc3RyYWludHMpCisJeworCQlDb25zdHJhaW50ICpj b25zdHIgPSAoQ29uc3RyYWludCAqKSBsZmlyc3QoY2VsbCk7CisKKwkJaWYgKGNvbnN0ci0+Y29u dHlwZSA9PSBDT05TVFJfTk9UTlVMTCkKKwkJeworCQkJc2F3X25vdG51bGwgPSB0cnVlOworCQkJ YnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXNhd19ub3RudWxsICYmICFhdHRyRm9ybS0+YXR0aGFz ZGVmKQorCXsKKwkJUmVsZWFzZVN5c0NhY2hlKGF0dHJUdXApOworCQlyZXR1cm4gTlVMTDsKKwl9 CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiAle25hbWV9SSBXSVRIIE9QVElP TlMgJXtkZWZhdWx0fXMgJXtub3RfbnVsbH1zLgorCSAqLworCWNvbHVtbiA9IG5ld19vYmp0cmVl X1ZBKCIle25hbWV9SSBXSVRIIE9QVElPTlMiLCAyLAorCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgImNvbHVtbiIsCisJCQkJCQkJIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBjb2xkZWYtPmNv bG5hbWUpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY29sdW1uLCAiJXtub3RfbnVsbH1zIiwK KwkJCQkJCSBzYXdfbm90bnVsbCA/ICJOT1QgTlVMTCIgOiAiIik7CisKKwl0bXBvYmogPSBuZXdf b2JqdHJlZSgiREVGQVVMVCIpOworCWlmIChhdHRyRm9ybS0+YXR0aGFzZGVmKQorCXsKKwkJY2hh ciAqZGVmc3RyOworCisJCWRlZnN0ciA9IFJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChyZWxhdGlv biwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCQkJCQkgIGRwY29udGV4dCwgTlVMTCk7CisKKwkJ YXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtkZWZhdWx0fXMiLCBkZWZzdHIpOworCX0K KwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOwor CWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwgIiV7ZGVmYXVsdH1zIiwgdG1wb2JqKTsKKwor CS8qCisJICogR2VuZXJhdGVkIGNvbHVtbnMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gdHlwZWQgdGFi bGVzLCBzbyB3ZSBhcmUgZG9uZS4KKwkgKi8KKworCVJlbGVhc2VTeXNDYWNoZShhdHRyVHVwKTsK KworCXJldHVybiBjb2x1bW47Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBkZWZpbml0aW9uIG9m IGNvbHVtbiBpZGVudGl0eS4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db2x1bW5J ZGVudGl0eShPaWQgc2VxcmVsaWQsIGNoYXIgaWRlbnRpdHksIGJvb2wgYWx0ZXJfdGFibGUpCit7 CisJT2JqVHJlZQkgICAqY29sdW1uOworCU9ialRyZWUJICAgKmlkZW50b2JqOworCUxpc3QJICAg KmVsZW1zID0gTklMOworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVwbGU7CisJRm9y bV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhOwor CWNoYXIJICAgKmlkZW50Zm10OworCWNoYXIJICAgKm9iamZtdDsKKworCWNvbHVtbiA9IG5ld19v Ymp0cmVlKCIiKTsKKworCWlmICghT2lkSXNWYWxpZChzZXFyZWxpZCkpCisJeworCQlhcHBlbmRf Ym9vbF9vYmplY3QoY29sdW1uLCAicHJlc2VudCIsIGZhbHNlKTsKKwkJcmV0dXJuIGNvbHVtbjsK Kwl9CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJeworCQlpZGVudGZtdCA9ICJTRVQgR0VORVJBVEVE ICI7CisJCW9iamZtdCA9ICIle29wdGlvbn1zIjsKKwl9CisJZWxzZQorCXsKKwkJaWRlbnRmbXQg PSAiR0VORVJBVEVEICI7CisJCW9iamZtdCA9ICIle29wdGlvbn1zIEFTIElERU5USVRZIjsKKwl9 CisKKwlpZGVudG9iaiA9IG5ld19vYmp0cmVlKGlkZW50Zm10KTsKKworCWlmIChpZGVudGl0eSA9 PSBBVFRSSUJVVEVfSURFTlRJVFlfQUxXQVlTKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChpZGVu dG9iaiwgb2JqZm10LCAiQUxXQVlTIik7CisJZWxzZSBpZiAoaWRlbnRpdHkgPT0gIEFUVFJJQlVU RV9JREVOVElUWV9CWV9ERUZBVUxUKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChpZGVudG9iaiwg b2JqZm10LCAiQlkgREVGQVVMVCIpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KGlkZW50 b2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwg IiV7aWRlbnRpdHlfdHlwZX1zIiwgaWRlbnRvYmopOworCisJcmVsID0gdGFibGVfb3BlbihTZXF1 ZW5jZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXNlcXR1cGxlID0gU2VhcmNoU3lz Q2FjaGVDb3B5MShTRVFSRUxJRCwgc2VxcmVsaWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChz ZXF0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBzZXF1ZW5j ZSAldSIsCisJCQkgc2VxcmVsaWQpOworCisJc2VxZm9ybSA9IChGb3JtX3BnX3NlcXVlbmNlKSBH RVRTVFJVQ1Qoc2VxdHVwbGUpOworCXNlcWRhdGEgPSBnZXRfc2VxdWVuY2VfdmFsdWVzKHNlcXJl bGlkKTsKKworCS8qIERlZmluaXRpb24gZWxlbWVudHMgKi8KKwllbGVtcyA9IGxhcHBlbmQoZWxl bXMsIGRlcGFyc2VfU2VxX0NhY2hlKE5VTEwsIHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxl bXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9DeWNsZShOVUxMLCBzZXFmb3JtLCBhbHRl cl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfSW5jcmVtZW50 QnkoTlVMTCwgc2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMs IGRlcGFyc2VfU2VxX01pbnZhbHVlKE5VTEwsIHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxl bXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9NYXh2YWx1ZShOVUxMLCBzZXFmb3JtLCBh bHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfU3RhcnR3 aXRoKE5VTEwsIHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1z LCBkZXBhcnNlX1NlcV9SZXN0YXJ0KE5VTEwsIHNlcWRhdGEpKTsKKwkvKiBXZSBwdXJwb3NlZnVs bHkgZG8gbm90IGVtaXQgT1dORUQgQlkgaGVyZSAqLworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlh cHBlbmRfYXJyYXlfb2JqZWN0KGNvbHVtbiwgIiV7c2VxX2RlZmluaXRpb246IH1zIiwgZWxlbXMp OworCWVsc2UKKwkJYXBwZW5kX2FycmF5X29iamVjdChjb2x1bW4sICIoICV7c2VxX2RlZmluaXRp b246IH1zICkiLCBlbGVtcyk7CisKKwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2sp OworCisJcmV0dXJuIGNvbHVtbjsKK30KKworLyoKKyAqIC4uLiBBTFRFUiBDT0xVTU4gLi4uIFNF VC9SRVNFVCAoLi4uKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbHVtblNldE9w dGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKQoreworCUxpc3QJICAgKnNldHMgPSBOSUw7CisJ TGlzdENlbGwgICAqY2VsbDsKKwlPYmpUcmVlCSAgICpjb2xzZXQ7CisJY2hhcgkgICAqZm10Owor CWJvb2wJCWlzX3Jlc2V0ID0gc3ViY21kLT5zdWJ0eXBlID09IEFUX1Jlc2V0T3B0aW9uczsKKwor CS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIEFMVEVSIENPTFVNTiAle2NvbHVtbn1J IFJFU0VUfFNFVCAoJXtvcHRpb25zOiwgfXMpCisJICovCisJaWYgKGlzX3Jlc2V0KQorCQlmbXQg PSAiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgUkVTRVQgIjsKKwllbHNlCisJCWZtdCA9ICJBTFRF UiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgIjsKKworCWNvbHNldCA9IG5ld19vYmp0cmVlX1ZBKGZt dCwgMSwgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwlmb3JlYWNo KGNlbGwsIChMaXN0ICopIHN1YmNtZC0+ZGVmKQorCXsKKwkJRGVmRWxlbQkgICAqZWxlbTsKKwkJ T2JqVHJlZQkgICAqc2V0OworCisJCWVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJ CXNldCA9IGRlcGFyc2VfRGVmRWxlbShlbGVtLCBpc19yZXNldCk7CisJCXNldHMgPSBsYXBwZW5k KHNldHMsIG5ld19vYmplY3Rfb2JqZWN0KHNldCkpOworCX0KKworCUFzc2VydChzZXRzKTsKKwlh cHBlbmRfYXJyYXlfb2JqZWN0KGNvbHNldCwgIigle29wdGlvbnM6LCB9cykiLCBzZXRzKTsKKwor CXJldHVybiBjb2xzZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIENyZWF0ZUNhc3RTdG10Lgor ICoKKyAqIEdpdmVuIGEgc2VxdWVuY2UgT0lEIGFuZCBhIHBhcnNldHJlZSB0aGF0IG1vZGlmaWVk IGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21t YW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUNhc3RTdG10KE9pZCBv YmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUNhc3RTdG10ICpub2RlID0gKENy ZWF0ZUNhc3RTdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbgljYXN0cmVsOworCUhlYXBUdXBs ZQljYXN0VHVwOworCUZvcm1fcGdfY2FzdCBjYXN0Rm9ybTsKKwlPYmpUcmVlCSAgICpjcmVhdGVD YXN0OworCWNoYXIJICAgKmNvbnRleHQ7CisKKwljYXN0cmVsID0gdGFibGVfb3BlbihDYXN0UmVs YXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwljYXN0VHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0 X2J5X29pZChjYXN0cmVsLCBBbnVtX3BnX2Nhc3Rfb2lkLCBvYmplY3RJZCk7CisJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKGNhc3RUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxl ZCBmb3IgY2FzdCB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwljYXN0Rm9ybSA9IChGb3JtX3Bn X2Nhc3QpIEdFVFNUUlVDVChjYXN0VHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkg KgorCSAqIENSRUFURSBDQVNUICgle3NvdXJjZXR5cGV9VCBBUyAle3RhcmdldHR5cGV9VCkgJXtt ZWNoYW5pc219cyAle2NvbnRleHR9cworCSAqLworCWNyZWF0ZUNhc3QgPSBuZXdfb2JqdHJlZV9W QSgiQ1JFQVRFIENBU1QgKCV7c291cmNldHlwZX1UIEFTICV7dGFyZ2V0dHlwZX1UKSIsCisJCQkJ CQkJCTIsICJzb3VyY2V0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVf Zm9yX3R5cGUoY2FzdEZvcm0tPmNhc3Rzb3VyY2UsIC0xKSwKKwkJCQkJCQkJInRhcmdldHR5cGUi LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShjYXN0Rm9ybS0+ Y2FzdHRhcmdldCwgLTEpKTsKKworCWlmIChub2RlLT5pbm91dCkKKwkJYXBwZW5kX3N0cmluZ19v YmplY3QoY3JlYXRlQ2FzdCwgIiV7bWVjaGFuaXNtfXMiLCAiV0lUSCBJTk9VVCIpOworCWVsc2Ug aWYgKG5vZGUtPmZ1bmMgPT0gTlVMTCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlQ2Fz dCwgIiV7bWVjaGFuaXNtfXMiLCAiV0lUSE9VVCBGVU5DVElPTiIpOworCWVsc2UKKwl7CisJCU9i alRyZWUJICAgKnRtcG9iajsKKwkJU3RyaW5nSW5mb0RhdGEgZnVuYzsKKwkJSGVhcFR1cGxlCWZ1 bmNUdXA7CisJCUZvcm1fcGdfcHJvYyBmdW5jRm9ybTsKKwkJaW50CQkJaTsKKworCQlmdW5jVHVw ID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIGNhc3RGb3JtLT5jYXN0ZnVuYyk7CisJCWZ1bmNG b3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKGZ1bmNUdXApOworCisJCWluaXRTdHJpbmdJ bmZvKCZmdW5jKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmZnVuYywgIiVzKCIsCisJCQkJCQlxdW90 ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihnZXRfbmFtZXNwYWNlX25hbWUoZnVuY0Zvcm0tPnByb25h bWVzcGFjZSksCisJCQkJCQkJCQkJCQkgICBOYW1lU3RyKGZ1bmNGb3JtLT5wcm9uYW1lKSkpOwor CQlmb3IgKGkgPSAwOyBpIDwgZnVuY0Zvcm0tPnByb25hcmdzOyBpKyspCisJCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZmdW5jLAorCQkJCQkJCQkgICBmb3JtYXRfdHlwZV9iZV9xdWFsaWZpZWQo ZnVuY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlc1tpXSkpOworCQlhcHBlbmRTdHJpbmdJbmZvQ2hh cigmZnVuYywgJyknKTsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiV0lUSCBGVU5DVElP TiAle2Nhc3RmdW5jdGlvbn1zIiwgMSwKKwkJCQkJCQkgImNhc3RmdW5jdGlvbiIsIE9ialR5cGVT dHJpbmcsIGZ1bmMuZGF0YSk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUNhc3QsICIl e21lY2hhbmlzbX1zIiwgdG1wb2JqKTsKKworCQlSZWxlYXNlU3lzQ2FjaGUoZnVuY1R1cCk7CisJ fQorCisJc3dpdGNoIChub2RlLT5jb250ZXh0KQorCXsKKwkJY2FzZSBDT0VSQ0lPTl9JTVBMSUNJ VDoKKwkJCWNvbnRleHQgPSAiQVMgSU1QTElDSVQiOworCQkJYnJlYWs7CisJCWNhc2UgQ09FUkNJ T05fQVNTSUdOTUVOVDoKKwkJCWNvbnRleHQgPSAiQVMgQVNTSUdOTUVOVCI7CisJCQlicmVhazsK KwkJY2FzZSBDT0VSQ0lPTl9FWFBMSUNJVDoKKwkJCWNvbnRleHQgPSAiIjsKKwkJCWJyZWFrOwor CQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgY29lcmNpb24gY29kZSAlYyIsIG5v ZGUtPmNvbnRleHQpOworCQkJcmV0dXJuIE5VTEw7CS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8K Kwl9CisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlQ2FzdCwgIiV7Y29udGV4dH1zIiwgY29u dGV4dCk7CisKKwl0YWJsZV9jbG9zZShjYXN0cmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0 dXJuIGNyZWF0ZUNhc3Q7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBDUkVBVEUgRE9NQUlOCisg KgorICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVk IGl0LCByZXR1cm4gdGhlIEpTT04KKyAqIGJsb2IgcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBj b21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZURvbWFpbihPaWQg b2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlCSAgICpjcmVhdGVEb21haW47 CisJT2JqVHJlZQkgICAqdG1wb2JqOworCUhlYXBUdXBsZQl0eXBUdXA7CisJRm9ybV9wZ190eXBl IHR5cEZvcm07CisJTGlzdAkgICAqY29uc3RyYWludHM7CisKKwl0eXBUdXAgPSBTZWFyY2hTeXND YWNoZTEoVFlQRU9JRCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0eXBUdXAp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZG9tYWluIHdpdGggT0lE ICV1Iiwgb2JqZWN0SWQpOworCXR5cEZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHlw VHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSBET01BSU4g JXtpZGVudGl0eX1EIEFTICV7dHlwZX1UICV7bm90X251bGx9cyAle2NvbnN0cmFpbnRzfXMKKwkg KiAle2NvbGxhdGlvbn1zCisJICovCisJY3JlYXRlRG9tYWluID0gbmV3X29ianRyZWUoIkNSRUFU RSIpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRG9tYWluLAorCQkJCQkJICJET01B SU4gJXtpZGVudGl0eX1EIEFTIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo VHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElkKSk7CisJYXBwZW5kX29iamVj dF9vYmplY3QoY3JlYXRlRG9tYWluLAorCQkJCQkJICIle3R5cGV9VCIsCisJCQkJCQkgbmV3X29i anRyZWVfZm9yX3R5cGUodHlwRm9ybS0+dHlwYmFzZXR5cGUsIHR5cEZvcm0tPnR5cHR5cG1vZCkp OworCisJaWYgKHR5cEZvcm0tPnR5cG5vdG51bGwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNy ZWF0ZURvbWFpbiwgIiV7bm90X251bGx9cyIsICJOT1QgTlVMTCIpOworCWVsc2UKKwkJYXBwZW5k X3N0cmluZ19vYmplY3QoY3JlYXRlRG9tYWluLCAiJXtub3RfbnVsbH1zIiwgIiIpOworCisJY29u c3RyYWludHMgPSBvYnRhaW5Db25zdHJhaW50cyhOSUwsIEludmFsaWRPaWQsIG9iamVjdElkKTsK KwlpZiAoY29uc3RyYWludHMgPT0gTklMKQorCXsKKwkJdG1wb2JqID0gbmV3X29ianRyZWUoIiIp OworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisJ ZWxzZQorCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiJXtlbGVtZW50czosIH1zIiwgMSwKKwkJ CQkJCQkgImVsZW1lbnRzIiwgT2JqVHlwZUFycmF5LCBjb25zdHJhaW50cyk7CisJYXBwZW5kX29i amVjdF9vYmplY3QoY3JlYXRlRG9tYWluLCAiJXtjb25zdHJhaW50c31zIiwgdG1wb2JqKTsKKwor CXRtcG9iaiA9IG5ld19vYmp0cmVlKCJDT0xMQVRFIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9y bS0+dHlwY29sbGF0aW9uKSkKKwl7CisJCU9ialRyZWUgKmNvbGxuYW1lOworCisJCWNvbGxuYW1l ID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCSAgIHR5cEZvcm0tPnR5cGNvbGxhdGlvbik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHRtcG9iaiwgIiV7bmFtZX1EIiwgY29sbG5hbWUpOworCX0KKwllbHNlCisJCWFwcGVuZF9ib29s X29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KGNyZWF0ZURvbWFpbiwgIiV7Y29sbGF0aW9ufXMiLCB0bXBvYmopOworCisJUmVsZWFzZVN5c0Nh Y2hlKHR5cFR1cCk7CisKKwlyZXR1cm4gY3JlYXRlRG9tYWluOworfQorCisvKgorICogRGVwYXJz ZSBhIENyZWF0ZUZ1bmN0aW9uU3RtdCAoQ1JFQVRFIEZVTkNUSU9OKQorICoKKyAqIEdpdmVuIGEg ZnVuY3Rpb24gT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIHRo ZSBKU09OCisgKiBibG9iIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVGdW5jdGlvbihPaWQgb2JqZWN0SWQsIE5v ZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVGdW5jdGlvblN0bXQgKm5vZGUgPSAoQ3JlYXRlRnVu Y3Rpb25TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpjcmVhdGVGdW5jOworCU9ialRy ZWUJICAgKnRtcG9iajsKKwlEYXR1bQkJdG1wZGF0dW07CisJY2hhcgkgICAqc291cmNlOworCWNo YXIJICAgKnByb2JpbjsKKwlMaXN0CSAgICpwYXJhbXM7CisJTGlzdAkgICAqZGVmYXVsdHM7CisJ TGlzdAkgICAqc2V0cyA9IE5JTDsKKwlMaXN0CSAgICp0eXBlcyA9IE5JTDsKKwlMaXN0Q2VsbCAg ICpjZWxsOworCUxpc3RDZWxsICAgKmN1cmRlZjsKKwlMaXN0Q2VsbCAgICp0YWJsZV9wYXJhbXMg PSBOVUxMOworCUhlYXBUdXBsZQlwcm9jVHVwOworCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwlI ZWFwVHVwbGUJbGFuZ1R1cDsKKwlPaWQJCSAgICp0eXBhcnJheTsKKwlPaWQJCSAgICp0cmZ0eXBl czsKKwlGb3JtX3BnX2xhbmd1YWdlIGxhbmdGb3JtOworCWludAkJCWk7CisJaW50CQkJdHlwbnVt OworCWludAkJCW50eXBlczsKKwlib29sCQlpc251bGw7CisJYm9vbAkJaXNmdW5jdGlvbjsKKwor CS8qIEdldCB0aGUgcGdfcHJvYyB0dXBsZSAqLworCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEo UFJPQ09JRCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsdXJlIGZvciBmdW5jdGlvbiB3aXRoIE9JRCAl dSIsCisJCQkgb2JqZWN0SWQpOworCXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNU KHByb2NUdXApOworCisJLyogR2V0IHRoZSBjb3JyZXNwb25kaW5nIHBnX2xhbmd1YWdlIHR1cGxl ICovCisJbGFuZ1R1cCA9IFNlYXJjaFN5c0NhY2hlMShMQU5HT0lELCBwcm9jRm9ybS0+cHJvbGFu Zyk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGxhbmdUdXApKQorCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWx1cmUgZm9yIGxhbmd1YWdlIHdpdGggT0lEICV1IiwKKwkJCSBwcm9jRm9y bS0+cHJvbGFuZyk7CisJbGFuZ0Zvcm0gPSAoRm9ybV9wZ19sYW5ndWFnZSkgR0VUU1RSVUNUKGxh bmdUdXApOworCisJLyoKKwkgKiBEZXRlcm1pbmUgdXNlZnVsIHZhbHVlcyBmb3IgcHJvc3JjIGFu ZCBwcm9iaW4uICBXZSBjb3BlIHdpdGggcHJvYmluCisJICogYmVpbmcgZWl0aGVyIE5VTEwgb3Ig Ii0iLCBidXQgcHJvc3JjIG11c3QgaGF2ZSBhIHZhbGlkIHZhbHVlLgorCSAqLworCXRtcGRhdHVt ID0gU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsCisJCQkJCQkJICAgQW51bV9wZ19w cm9jX3Byb3NyYywgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJPUiwgIm51bGwg cHJvc3JjIGluIGZ1bmN0aW9uIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXNvdXJjZSA9IFRl eHREYXR1bUdldENTdHJpbmcodG1wZGF0dW0pOworCisJLyogRGV0ZXJtaW5lIGEgdXNlZnVsIHZh bHVlIGZvciBwcm9iaW4gKi8KKwl0bXBkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBw cm9jVHVwLAorCQkJCQkJCSAgIEFudW1fcGdfcHJvY19wcm9iaW4sICZpc251bGwpOworCWlmIChp c251bGwpCisJCXByb2JpbiA9IE5VTEw7CisJZWxzZQorCXsKKwkJcHJvYmluID0gVGV4dERhdHVt R2V0Q1N0cmluZyh0bXBkYXR1bSk7CisJCWlmIChwcm9iaW5bMF0gPT0gJ1wwJyB8fCBzdHJjbXAo cHJvYmluLCAiLSIpID09IDApCisJCQlwcm9iaW4gPSBOVUxMOworCX0KKworCS8qCisJICogVmVy Ym9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSAle29yX3JlcGxhY2V9cyBGVU5DVElPTiAle3Np Z25hdHVyZX1zIFJFVFVSTlMgJXtyZXR1cm5fdHlwZX1zCisJICogTEFOR1VBR0UgJXt0cmFuc2Zv cm1fdHlwZX1zICV7bGFuZ3VhZ2V9SSAle3dpbmRvd31zICV7dm9sYXRpbGl0eX1zCisJICogJXtw YXJhbGxlbF9zYWZldHl9cyAle2xlYWtwcm9vZn1zICV7c3RyaWN0fXMgJXtzZWN1cml0eV9kZWZp bmVyfXMKKwkgKiAle2Nvc3R9cyAle3Jvd3N9cyAle3N1cHBvcnR9cyAle3NldF9vcHRpb25zOiB9 cyBBUyAle29iamZpbGV9TCwKKwkgKiAle3N5bWJvbH1MCisJICovCisJY3JlYXRlRnVuYyA9IG5l d19vYmp0cmVlKCJDUkVBVEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMs ICIle29yX3JlcGxhY2V9cyIsCisJCQkJCQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBSRVBMQUNFIiA6 ICIiKTsKKworCS8qCisJICogVG8gY29uc3RydWN0IHRoZSBhcmd1bWVudHMgYXJyYXksIGV4dHJh Y3QgdGhlIHR5cGUgT0lEcyBmcm9tIHRoZQorCSAqIGZ1bmN0aW9uJ3MgcGdfcHJvYyBlbnRyeS4g IElmIHByb25hcmdzIGVxdWFscyB0aGUgcGFyYW1ldGVyIGxpc3QgbGVuZ3RoLAorCSAqIHRoZXJl IGFyZSBubyBPVVQgcGFyYW1ldGVycyBhbmQgdGh1cyB3ZSBjYW4gZXh0cmFjdCB0aGUgdHlwZSBP SUQgZnJvbQorCSAqIHByb2FyZ3R5cGVzOyBvdGhlcndpc2Ugd2UgbmVlZCB0byBkZWNvZGUgcHJv YWxsYXJndHlwZXMsIHdoaWNoIGlzCisJICogYSBiaXQgbW9yZSBpbnZvbHZlZC4KKwkgKi8KKwl0 eXBhcnJheSA9IHBhbGxvYyhsaXN0X2xlbmd0aChub2RlLT5wYXJhbWV0ZXJzKSAqIHNpemVvZihP aWQpKTsKKwlpZiAobGlzdF9sZW5ndGgobm9kZS0+cGFyYW1ldGVycykgPiBwcm9jRm9ybS0+cHJv bmFyZ3MpCisJeworCQlib29sCWlzbnVsbDsKKwkJRGF0dW0JYWxsdHlwZXM7CisJCURhdHVtICAq dmFsdWVzOworCQlib29sICAgKm51bGxzOworCQlpbnQJCW5lbGVtczsKKworCQlhbGx0eXBlcyA9 IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9jVHVwLAorCQkJCQkJCQkgICBBbnVtX3BnX3By b2NfcHJvYWxsYXJndHlwZXMsICZpc251bGwpOworCQlpZiAoaXNudWxsKQorCQkJZWxvZyhFUlJP UiwgIk5VTEwgcHJvYWxsYXJndHlwZXMsIGJ1dCBtb3JlIHBhcmFtZXRlcnMgdGhhbiBhcmdzIik7 CisJCWRlY29uc3RydWN0X2FycmF5KERhdHVtR2V0QXJyYXlUeXBlUChhbGx0eXBlcyksCisJCQkJ CQkgIE9JRE9JRCwgNCwgJ3QnLCAnaScsCisJCQkJCQkgICZ2YWx1ZXMsICZudWxscywgJm5lbGVt cyk7CisJCWlmIChuZWxlbXMgIT0gbGlzdF9sZW5ndGgobm9kZS0+cGFyYW1ldGVycykpCisJCQll bG9nKEVSUk9SLCAibWlzbWF0Y2hlZCBwcm9hbGxhcmdhdHlwZXMiKTsKKwkJZm9yIChpID0gMDsg aSA8IGxpc3RfbGVuZ3RoKG5vZGUtPnBhcmFtZXRlcnMpOyBpKyspCisJCQl0eXBhcnJheVtpXSA9 IHZhbHVlc1tpXTsKKwl9CisJZWxzZQorCXsKKwkJZm9yIChpID0gMDsgaSA8IGxpc3RfbGVuZ3Ro KG5vZGUtPnBhcmFtZXRlcnMpOyBpKyspCisJCQkgdHlwYXJyYXlbaV0gPSBwcm9jRm9ybS0+cHJv YXJndHlwZXMudmFsdWVzW2ldOworCX0KKworCS8qCisJICogSWYgdGhlcmUgYXJlIGFueSBkZWZh dWx0IGV4cHJlc3Npb25zLCB3ZSByZWFkIHRoZSBkZXBhcnNlZCBleHByZXNzaW9uIGFzCisJICog YSBsaXN0IHNvIHRoYXQgd2UgY2FuIGF0dGFjaCB0aGVtIHRvIGVhY2ggYXJndW1lbnQuCisJICov CisJdG1wZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwKKwkJCQkJCQkg ICBBbnVtX3BnX3Byb2NfcHJvYXJnZGVmYXVsdHMsICZpc251bGwpOworCWlmICghaXNudWxsKQor CXsKKwkJZGVmYXVsdHMgPSBGdW5jdGlvbkdldERlZmF1bHRzKERhdHVtR2V0VGV4dFAodG1wZGF0 dW0pKTsKKwkJY3VyZGVmID0gbGlzdF9oZWFkKGRlZmF1bHRzKTsKKwl9CisJZWxzZQorCXsKKwkJ ZGVmYXVsdHMgPSBOSUw7CisJCWN1cmRlZiA9IE5VTEw7CisJfQorCisJLyoKKwkgKiBOb3cgaXRl cmF0ZSBvdmVyIGVhY2ggcGFyYW1ldGVyIGluIHRoZSBwYXJzZXRyZWUgdG8gY3JlYXRlIHRoZQor CSAqIHBhcmFtZXRlcnMgYXJyYXkuCisJICovCisJcGFyYW1zID0gTklMOworCXR5cG51bSA9IDA7 CisJZm9yZWFjaChjZWxsLCBub2RlLT5wYXJhbWV0ZXJzKQorCXsKKwkJRnVuY3Rpb25QYXJhbWV0 ZXIgKnBhcmFtID0gKEZ1bmN0aW9uUGFyYW1ldGVyICopIGxmaXJzdChjZWxsKTsKKwkJT2JqVHJl ZQkgICAqcGFyYW1vYmo7CisJCU9ialRyZWUJICAgKmRlZmF1bHR2YWw7CisJCU9ialRyZWUJICAg Km5hbWU7CisKKwkJLyoKKwkJICogQSBQQVJBTV9UQUJMRSBwYXJhbWV0ZXIgaW5kaWNhdGVzIGVu ZCBvZiBpbnB1dCBhcmd1bWVudHM7IHRoZQorCQkgKiBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUg cGFydCBvZiB0aGUgcmV0dXJuIHR5cGUuICBXZSBpZ25vcmUgdGhlbQorCQkgKiBoZXJlLCBidXQg a2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgbGlzdCBzbyB0aGF0CisJ CSAqIHdlIGNhbiBlYXNpbHkgcHJvZHVjZSB0aGUgcmV0dXJuIHR5cGUgYmVsb3cuCisJCSAqLwor CQlpZiAocGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9UQUJMRSkKKwkJeworCQkJdGFibGVfcGFy YW1zID0gY2VsbDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogVmVyYm9zZSBzeW50YXgg Zm9yIHBhcmFtYXRlcjogJXttb2RlfXMgJXtuYW1lfXMgJXt0eXBlfVQgJXtkZWZhdWx0fXMKKwkJ ICoKKwkJICogTm90ZSB0aGF0ICV7bmFtZX1zIGlzIGEgc3RyaW5nIGhlcmUsIG5vdCBhbiBpZGVu dGlmaWVyOyB0aGUgcmVhc29uCisJCSAqIGZvciB0aGlzIGlzIHRoYXQgYW4gYWJzZW50IHBhcmFt ZXRlciBuYW1lIG11c3QgcHJvZHVjZSBhbiBlbXB0eQorCQkgKiBzdHJpbmcsIG5vdCAiIiwgd2hp Y2ggaXMgd2hhdCB3b3VsZCBoYXBwZW4gaWYgd2Ugd2VyZSB0byB1c2UKKwkJICogJXtuYW1lfUkg aGVyZS4gIFNvIHdlIGFkZCBhbm90aGVyIGxldmVsIG9mIGluZGlyZWN0aW9uIHRvIGFsbG93IHVz CisJCSAqIHRvIGluamVjdCBhICJwcmVzZW50IiBwYXJhbWV0ZXIuCisJCSAqLworCQlwYXJhbW9i aiA9IG5ld19vYmp0cmVlKCIiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocGFyYW1vYmosICIl e21vZGV9cyIsCisJCQkJCQkJIHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1fSU4gPyAiSU4iIDoK KwkJCQkJCQkgcGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9PVVQgPyAiT1VUIiA6CisJCQkJCQkJ IHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1fSU5PVVQgPyAiSU5PVVQiIDoKKwkJCQkJCQkgcGFy YW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9WQVJJQURJQyA/ICJWQVJJQURJQyIgOgorCQkJCQkJCSAi SU4iKTsKKworCQkvKiBPcHRpb25hbCB3aG9sZXNhbGUgc3VwcHJlc3Npb24gb2YgIm5hbWUiIG9j Y3VycyBoZXJlICovCisKKwkJbmFtZSA9IG5ld19vYmp0cmVlKCIiKTsKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QobmFtZSwgIiV7bmFtZX1JIiwKKwkJCQkJCQkgcGFyYW0tPm5hbWUgPyBwYXJhbS0+ bmFtZSA6ICJOVUxMIik7CisKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KG5hbWUsICJwcmVzZW50IiwK KwkJCQkJCSAgIHBhcmFtLT5uYW1lID8gdHJ1ZSA6IGZhbHNlKTsKKworCQlhcHBlbmRfb2JqZWN0 X29iamVjdChwYXJhbW9iaiwgIiV7bmFtZX1zIiwgbmFtZSk7CisKKwkJZGVmYXVsdHZhbCA9IG5l d19vYmp0cmVlKCJERUZBVUxUIik7CisJCWlmIChQb2ludGVySXNWYWxpZChwYXJhbS0+ZGVmZXhw cikpCisJCXsKKwkJCWNoYXIgKmV4cHI7CisKKwkJCWlmIChjdXJkZWYgPT0gTlVMTCkKKwkJCQll bG9nKEVSUk9SLCAicHJvYXJnZGVmYXVsdHMgbGlzdCB0b28gc2hvcnQiKTsKKwkJCWV4cHIgPSBs Zmlyc3QoY3VyZGVmKTsKKworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QoZGVmYXVsdHZhbCwgIiV7 dmFsdWV9cyIsIGV4cHIpOworCQkJY3VyZGVmID0gbG5leHQoZGVmYXVsdHMsIGN1cmRlZik7CisJ CX0KKwkJZWxzZQorCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KGRlZmF1bHR2YWwsICJwcmVzZW50Iiwg ZmFsc2UpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtb2JqLCAiJXt0eXBlfVQiLAor CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBhcnJheVt0eXBudW0rK10sIC0xKSk7CisK KwkJYXBwZW5kX29iamVjdF9vYmplY3QocGFyYW1vYmosICIle2RlZmF1bHR9cyIsIGRlZmF1bHR2 YWwpOworCisJCXBhcmFtcyA9IGxhcHBlbmQocGFyYW1zLCBuZXdfb2JqZWN0X29iamVjdChwYXJh bW9iaikpOworCX0KKworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCIle2lkZW50aXR5fUQiLCAx LAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgIG9i amVjdElkKSk7CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBvYmosICIoIik7CisJYXBwZW5k X2FycmF5X29iamVjdCh0bXBvYmosICIle2FyZ3VtZW50czosIH1zIiwgcGFyYW1zKTsKKwlhcHBl bmRfZm9ybWF0X3N0cmluZyh0bXBvYmosICIpIik7CisKKwlpc2Z1bmN0aW9uID0gKHByb2NGb3Jt LT5wcm9raW5kICE9IFBST0tJTkRfUFJPQ0VEVVJFKTsKKworCWlmIChpc2Z1bmN0aW9uKQorCQlh cHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVGdW5jLCAiRlVOQ1RJT04gJXtzaWduYXR1cmV9cyIs IHRtcG9iaik7CisJZWxzZQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVGdW5jLCAiUFJP Q0VEVVJFICV7c2lnbmF0dXJlfXMiLCB0bXBvYmopOworCisJLyoKKwkgKiBBIHJldHVybiB0eXBl IGNhbiBhZG9wdCBvbmUgb2YgdHdvIGZvcm1zOiBlaXRoZXIgYSBbU0VUT0ZdIHNvbWVfdHlwZSwg b3IKKwkgKiBhIFRBQkxFKGxpc3Qtb2YtdHlwZXMpLiAgV2UgY2FuIHRlbGwgdGhlIHNlY29uZCBm b3JtIGJlY2F1c2Ugd2Ugc2F3IGEKKwkgKiB0YWJsZSBwYXJhbSBhYm92ZSB3aGlsZSBzY2Fubmlu ZyB0aGUgYXJndW1lbnQgbGlzdC4KKwkgKi8KKwlpZiAodGFibGVfcGFyYW1zID09IE5VTEwpCisJ eworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiIiwgMSwKKwkJCQkJCQkgInJldHVybl9mb3Jt IiwgT2JqVHlwZVN0cmluZywgInBsYWluIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9i aiwgIiV7c2V0b2Z9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9yZXRzZXQgPyAiU0VUT0YiIDog IiIpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3JldHR5cGV9VCIsCisJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2NGb3JtLT5wcm9yZXR0eXBlLCAtMSkpOworCX0K KwllbHNlCisJeworCQlMaXN0CSAgICpyZXR0eXBlcyA9IE5JTDsKKwkJT2JqVHJlZQkgICAqcGFy YW1vYmo7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlRBQkxFIiwgMSwKKwkJCQkJCQkg InJldHVybl9mb3JtIiwgT2JqVHlwZVN0cmluZywgInRhYmxlIik7CisJCWZvciAoOyB0YWJsZV9w YXJhbXMgIT0gTlVMTDsgdGFibGVfcGFyYW1zID0gbG5leHQobm9kZS0+cGFyYW1ldGVycywgdGFi bGVfcGFyYW1zKSkKKwkJeworCQkJRnVuY3Rpb25QYXJhbWV0ZXIgKnBhcmFtID0gbGZpcnN0KHRh YmxlX3BhcmFtcyk7CisKKwkJCXBhcmFtb2JqID0gbmV3X29ianRyZWUoIiIpOworCQkJYXBwZW5k X3N0cmluZ19vYmplY3QocGFyYW1vYmosICIle25hbWV9SSIsIHBhcmFtLT5uYW1lKTsKKwkJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3R5cGUodHlwYXJyYXlbdHlwbnVtKytdLCAtMSkpOworCQkJcmV0dHlwZXMgPSBs YXBwZW5kKHJldHR5cGVzLCBuZXdfb2JqZWN0X29iamVjdChwYXJhbW9iaikpOworCQl9CisKKwkJ YXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIoJXtyZXR0eXBlczosIH1zKSIsIHJldHR5cGVz KTsKKwl9CisKKwlpZiAoaXNmdW5jdGlvbikKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRl RnVuYywgIlJFVFVSTlMgJXtyZXR1cm5fdHlwZX1zIiwgdG1wb2JqKTsKKworCS8qIFRSQU5TRk9S TSBGT1IgVFlQRSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJUUkFOU0ZPUk0iKTsKKworCW50 eXBlcyA9IGdldF9mdW5jX3RyZnR5cGVzKHByb2NUdXAsICZ0cmZ0eXBlcyk7CisJZm9yIChpID0g MDsgaSA8IG50eXBlczsgaSsrKQorCXsKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkZPUiBU WVBFICV7dHlwZX1UIiwgMSwKKwkJCQkJCQkgInR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0cmZ0eXBlc1tpXSwgLTEpKTsKKwkJdHlwZXMgPSBsYXBw ZW5kKHR5cGVzLCB0bXBvYmopOworCX0KKworCWlmICh0eXBlcykKKwkJYXBwZW5kX2FycmF5X29i amVjdCh0bXBvYmosICIle2Zvcl90eXBlOiwgfXMiLCB0eXBlcyk7CisJZWxzZQorCQlhcHBlbmRf Ym9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKworCWFwcGVuZF9vYmplY3Rf b2JqZWN0KGNyZWF0ZUZ1bmMsICIle3RyYW5zZm9ybV90eXBlfXMiLCB0bXBvYmopOworCisJYXBw ZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIkxBTkdVQUdFICV7bGFuZ3VhZ2V9SSIsCisJ CQkJCQkgTmFtZVN0cihsYW5nRm9ybS0+bGFubmFtZSkpOworCisJaWYgKGlzZnVuY3Rpb24pCisJ eworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiJXt3aW5kb3d9cyIsCisJCQkJ CQkJIHByb2NGb3JtLT5wcm9raW5kID09IFBST0tJTkRfV0lORE9XID8gIldJTkRPVyIgOiAiIik7 CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3ZvbGF0aWxpdHl9cyIsCisJ CQkJCQkJIHByb2NGb3JtLT5wcm92b2xhdGlsZSA9PSBQUk9WT0xBVElMRV9WT0xBVElMRSA/CisJ CQkJCQkJICJWT0xBVElMRSIgOgorCQkJCQkJCSBwcm9jRm9ybS0+cHJvdm9sYXRpbGUgPT0gUFJP Vk9MQVRJTEVfU1RBQkxFID8KKwkJCQkJCQkgIlNUQUJMRSIgOiAiSU1NVVRBQkxFIik7CisKKwkJ YXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7cGFyYWxsZWxfc2FmZXR5fXMiLAor CQkJCQkJCSBwcm9jRm9ybS0+cHJvcGFyYWxsZWwgPT0gUFJPUEFSQUxMRUxfU0FGRSA/CisJCQkJ CQkJICJQQVJBTExFTCBTQUZFIiA6CisJCQkJCQkJIHByb2NGb3JtLT5wcm9wYXJhbGxlbCA9PSBQ Uk9QQVJBTExFTF9SRVNUUklDVEVEID8KKwkJCQkJCQkgIlBBUkFMTEVMIFJFU1RSSUNURUQiIDog IlBBUkFMTEVMIFVOU0FGRSIpOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMs ICIle2xlYWtwcm9vZn1zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb2xlYWtwcm9vZiA/ICJMRUFL UFJPT0YiIDogIiIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiJXtzdHJp Y3R9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9pc3N0cmljdCA/CisJCQkJCQkJICJSRVRVUk5T IE5VTEwgT04gTlVMTCBJTlBVVCIgOgorCQkJCQkJCSAiQ0FMTEVEIE9OIE5VTEwgSU5QVVQiKTsK KworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiJXtzZWN1cml0eV9kZWZpbmVy fXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvc2VjZGVmID8KKwkJCQkJCQkgIlNFQ1VSSVRZIERF RklORVIiIDogIlNFQ1VSSVRZIElOVk9LRVIiKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChj cmVhdGVGdW5jLCAiJXtjb3N0fXMiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9WQSgiQ09TVCAle2Nv c3R9biIsIDEsCisJCQkJCQkJCQkJCSJjb3N0IiwgT2JqVHlwZUZsb2F0LAorCQkJCQkJCQkJCQlw cm9jRm9ybS0+cHJvY29zdCkpOworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJST1dTIik7CisJ CWlmIChwcm9jRm9ybS0+cHJvcm93cyA9PSAwKQorCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9i aiwgInByZXNlbnQiLCBmYWxzZSk7CisJCWVsc2UKKwkJCWFwcGVuZF9mbG9hdF9vYmplY3QodG1w b2JqLCAiJXtyb3dzfW4iLCBwcm9jRm9ybS0+cHJvcm93cyk7CisJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KGNyZWF0ZUZ1bmMsICIle3Jvd3N9cyIsIHRtcG9iaik7CisKKwkJdG1wb2JqID0gbmV3X29i anRyZWUoIlNVUFBPUlQgJXtuYW1lfXMiKTsKKwkJaWYgKHByb2NGb3JtLT5wcm9zdXBwb3J0KQor CQl7CisJCQlPaWQJCQlhcmd0eXBlc1sxXTsKKworCQkJLyoKKwkJCSAqIFdlIHNob3VsZCBxdWFs aWZ5IHRoZSBzdXBwb3J0IGZ1bmN0aW9uJ3MgbmFtZSBpZiBpdCB3b3VsZG4ndCBiZQorCQkJICog cmVzb2x2ZWQgYnkgbG9va3VwIGluIHRoZSBjdXJyZW50IHNlYXJjaCBwYXRoLgorCQkJICovCisJ CQlhcmd0eXBlc1swXSA9IElOVEVSTkFMT0lEOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1w b2JqLCAiJXtuYW1lfXMiLAorCQkJCQkJCQkgZ2VuZXJhdGVfZnVuY3Rpb25fbmFtZShwcm9jRm9y bS0+cHJvc3VwcG9ydCwgMSwKKwkJCQkJCQkJCQkJCQkJTklMLCBhcmd0eXBlcywKKwkJCQkJCQkJ CQkJCQkJZmFsc2UsIE5VTEwsCisJCQkJCQkJCQkJCQkJCUVYUFJfS0lORF9OT05FKSk7CisJCX0K KwkJZWxzZQorCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7 CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRnVuYywgIiV7c3VwcG9ydH1zIiwgdG1w b2JqKTsKKwl9CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJeworCQlEZWZFbGVt CSpkZWZlbCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZQkgICAqdG1wb2Jq OworCisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzZXQiKSA9PSAwKQorCQl7CisJCQlW YXJpYWJsZVNldFN0bXQgKnNzdG10ID0gKFZhcmlhYmxlU2V0U3RtdCAqKSBkZWZlbC0+YXJnOwor CQkJY2hhciAqdmFsdWUgPSBFeHRyYWN0U2V0VmFyaWFibGVBcmdzKHNzdG10KTsKKworCQkJdG1w b2JqID0gZGVwYXJzZV9GdW5jdGlvblNldChzc3RtdC0+a2luZCwgc3N0bXQtPm5hbWUsIHZhbHVl KTsKKwkJCXNldHMgPSBsYXBwZW5kKHNldHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOwor CQl9CisJfQorCWFwcGVuZF9hcnJheV9vYmplY3QoY3JlYXRlRnVuYywgIiV7c2V0X29wdGlvbnM6 IH1zIiwgc2V0cyk7CisKKwkvKiBBZGQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gKi8KKwkodm9p ZCkgU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsIEFudW1fcGdfcHJvY19wcm9zcWxi b2R5LCAmaXNudWxsKTsKKwlpZiAocHJvY0Zvcm0tPnByb2xhbmcgPT0gU1FMbGFuZ3VhZ2VJZCAm JiAhaXNudWxsKQorCXsKKwkJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJCWluaXRTdHJpbmdJbmZv KCZidWYpOworCQlwcmludF9mdW5jdGlvbl9zcWxib2R5KCZidWYsIHByb2NUdXApOworCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle2RlZmluaXRpb259cyIsIGJ1Zi5kYXRh KTsKKwl9CisJZWxzZSBpZiAocHJvYmluID09IE5VTEwpCisJeworCQlhcHBlbmRfc3RyaW5nX29i amVjdChjcmVhdGVGdW5jLCAiQVMgJXtkZWZpbml0aW9ufUwiLAorCQkJCQkJCSBzb3VyY2UpOwor CX0KKwllbHNlCisJeworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiQVMgJXtv YmpmaWxlfUwiLCBwcm9iaW4pOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAi LCAle3N5bWJvbH1MIiwgc291cmNlKTsKKwl9CisKKwlSZWxlYXNlU3lzQ2FjaGUobGFuZ1R1cCk7 CisJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCisJcmV0dXJuIGNyZWF0ZUZ1bmM7Cit9CisK Ky8qCisgKiBEZXBhcnNlIGEgQ1JFQVRFIE9QRVJBVE9SIENMQVNTIGNvbW1hbmQuCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlT3BDbGFzc1N0bXQoQ29sbGVjdGVkQ29tbWFu ZCAqY21kKQoreworCU9pZAkJCW9wY29pZCA9IGNtZC0+ZC5jcmVhdGVvcGMuYWRkcmVzcy5vYmpl Y3RJZDsKKwlIZWFwVHVwbGUgICBvcGNUdXA7CisJSGVhcFR1cGxlICAgb3BmVHVwOworCUZvcm1f cGdfb3BmYW1pbHkgb3BmRm9ybTsKKwlGb3JtX3BnX29wY2xhc3Mgb3BjRm9ybTsKKwlPYmpUcmVl CSAgICpzdG10OworCU9ialRyZWUJICAgKnRtcG9iajsKKwlMaXN0CSAgICpsaXN0OworCUxpc3RD ZWxsICAgKmNlbGw7CisKKwlvcGNUdXAgPSBTZWFyY2hTeXNDYWNoZTEoQ0xBT0lELCBPYmplY3RJ ZEdldERhdHVtKG9wY29pZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChvcGNUdXApKQorCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BjbGFzcyB3aXRoIE9JRCAldSIs IG9wY29pZCk7CisJb3BjRm9ybSA9IChGb3JtX3BnX29wY2xhc3MpIEdFVFNUUlVDVChvcGNUdXAp OworCisJb3BmVHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRkFNSUxZT0lELCBvcGNGb3JtLT5vcGNm YW1pbHkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChvcGZUdXApKQorCQllbG9nKEVSUk9SLCAi Y2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3IgZmFtaWx5IHdpdGggT0lEICV1Iiwgb3Bj Rm9ybS0+b3BjZmFtaWx5KTsKKwlvcGZGb3JtID0gKEZvcm1fcGdfb3BmYW1pbHkpIEdFVFNUUlVD VChvcGZUdXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFIE9Q RVJBVE9SIENMQVNTICV7aWRlbnRpdHl9RCAle2RlZmF1bHR9cyBGT1IgVFlQRSAle3R5cGV9VCBV U0lORworCSAqICV7YW1uYW1lfUkgJXtvcGZhbWlseX1zIEFTICV7aXRlbXM6LCB9cworCSAqLwor CisJc3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgT1BFUkFUT1IgQ0xBU1MgJXtpZGVudGl0 eX1EIiwgMSwKKwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wY0Zvcm0tPm9wY25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJ CSAgIE5hbWVTdHIob3BjRm9ybS0+b3BjbmFtZSkpKTsKKworCS8qIEFkZCB0aGUgREVGQVVMVCBj bGF1c2UgKi8KKwlhcHBlbmRfc3RyaW5nX29iamVjdChzdG10LCAiJXtkZWZhdWx0fXMiLAorCQkJ CQkJIG9wY0Zvcm0tPm9wY2RlZmF1bHQgPyAiREVGQVVMVCIgOiAiIik7CisKKwkvKiBBZGQgdGhl IEZPUiBUWVBFIGNsYXVzZSAqLworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICJGT1IgVFlQ RSAle3R5cGV9VCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3BjRm9ybS0+b3BjaW50 eXBlLCAtMSkpOworCisJLyogQWRkIHRoZSBVU0lORyBjbGF1c2UgKi8KKwlhcHBlbmRfc3RyaW5n X29iamVjdChzdG10LCAiVVNJTkcgJXthbW5hbWV9SSIsIGdldF9hbV9uYW1lKG9wY0Zvcm0tPm9w Y21ldGhvZCkpOworCisJLyoKKwkgKiBBZGQgdGhlIEZBTUlMWSBjbGF1c2U7IGJ1dCBpZiBpdCBo YXMgdGhlIHNhbWUgbmFtZSBhbmQgbmFtZXNwYWNlIGFzIHRoZQorCSAqIG9wY2xhc3MsIHRoZW4g aGF2ZSBpdCBleHBhbmQgdG8gZW1wdHksIGJlY2F1c2UgaXQgd291bGQgY2F1c2UgYSBmYWlsdXJl CisJICogaWYgdGhlIG9wZmFtaWx5IHdhcyBjcmVhdGVkIGludGVybmFsbHkuCisJICovCisJdG1w b2JqID0gbmV3X29ianRyZWVfVkEoIkZBTUlMWSAle29wZmFtaWx5fUQiLCAxLAorCQkJCQkJICJv cGZhbWlseSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l KG9wZkZvcm0tPm9wZm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihvcGZGb3JtLT5v cGZuYW1lKSkpOworCisJaWYgKHN0cmNtcChOYW1lU3RyKG9wZkZvcm0tPm9wZm5hbWUpLCBOYW1l U3RyKG9wY0Zvcm0tPm9wY25hbWUpKSA9PSAwICYmCisJCW9wZkZvcm0tPm9wZm5hbWVzcGFjZSA9 PSBvcGNGb3JtLT5vcGNuYW1lc3BhY2UpCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJw cmVzZW50IiwgZmFsc2UpOworCisJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIiV7b3BmYW1p bHl9cyIsICB0bXBvYmopOworCisJLyoKKwkgKiBBZGQgdGhlIGluaXRpYWwgaXRlbSBsaXN0LiAg Tm90ZSB3ZSBhbHdheXMgYWRkIHRoZSBTVE9SQUdFIGNsYXVzZSwgZXZlbgorCSAqIHdoZW4gaXQg aXMgaW1wbGljaXQgaW4gdGhlIG9yaWdpbmFsIGNvbW1hbmQuCisJICovCisJdG1wb2JqID0gbmV3 X29ianRyZWUoIlNUT1JBR0UiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3R5 cGV9VCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3BjRm9ybS0+b3Bja2V5dHlwZSAh PSBJbnZhbGlkT2lkID8KKwkJCQkJCQkJCQkJICBvcGNGb3JtLT5vcGNrZXl0eXBlIDogb3BjRm9y bS0+b3BjaW50eXBlLAorCQkJCQkJCQkJCQkgIC0xKSk7CisJbGlzdCA9IGxpc3RfbWFrZTEobmV3 X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkvKiBBZGQgdGhlIGRlY2xhcmVkIG9wZXJhdG9y cyAqLworCWZvcmVhY2goY2VsbCwgY21kLT5kLmNyZWF0ZW9wYy5vcGVyYXRvcnMpCisJeworCQlP cEZhbWlseU1lbWJlciAqb3BlciA9IGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZQkgICAqdG1wb2Jq OworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJPUEVSQVRPUiAle251bX1uICV7b3BlcmF0 b3J9Tygle2x0eXBlfVQsICV7cnR5cGV9VCkiLAorCQkJCQkJCSA0LAorCQkJCQkJCSAibnVtIiwg T2JqVHlwZUludGVnZXIsIG9wZXItPm51bWJlciwKKwkJCQkJCQkgIm9wZXJhdG9yIiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIG9wZXItPm9iamVjdCksCisJCQkJCQkJImx0eXBlIiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShvcGVyLT5sZWZ0dHlw ZSwgLTEpLAorCQkJCQkJCSJydHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJbmV3X29ianRy ZWVfZm9yX3R5cGUob3Blci0+cmlnaHR0eXBlLCAtMSkpOworCisJCS8qIEFkZCB0aGUgRk9SIFNF QVJDSCAvIEZPUiBPUkRFUiBCWSBjbGF1c2UgKi8KKwkJaWYgKG9wZXItPnNvcnRmYW1pbHkgPT0g SW52YWxpZE9pZCkKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7cHVycG9zZX1z IiwgIkZPUiBTRUFSQ0giKTsKKwkJZWxzZQorCQl7CisJCQlPYmpUcmVlCSAgICp0bXBvYmoyOwor CisJCQl0bXBvYmoyID0gbmV3X29ianRyZWVfVkEoIkZPUiBPUkRFUiBCWSAle29wZmFtaWx5fUQi LCAwKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iajIsICJvcGZhbWlseSIsCisJCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JGYW1pbHlSZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCQkJIG9wZXItPnNvcnRmYW1pbHkpKTsKKwkJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHRtcG9iaiwgIiV7cHVycG9zZX1zIiwgdG1wb2JqMik7CisJCX0KKworCQlsaXN0ID0g bGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwl9CisKKwkvKiBBZGQg dGhlIGRlY2xhcmVkIHN1cHBvcnQgZnVuY3Rpb25zICovCisJZm9yZWFjaChjZWxsLCBjbWQtPmQu Y3JlYXRlb3BjLnByb2NlZHVyZXMpCisJeworCQlPcEZhbWlseU1lbWJlciAqcHJvYyA9IGxmaXJz dChjZWxsKTsKKwkJT2JqVHJlZQkgICAqdG1wb2JqOworCQlIZWFwVHVwbGUJcHJvY1R1cDsKKwkJ Rm9ybV9wZ19wcm9jIHByb2NGb3JtOworCQlPaWQJCSAgICpwcm9hcmd0eXBlczsKKwkJTGlzdAkg ICAqYXJnbGlzdCA9IE5JTDsKKwkJaW50CQkJaTsKKworCQlwcm9jVHVwID0gU2VhcmNoU3lzQ2Fj aGUxKFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0ocHJvYy0+b2JqZWN0KSk7CisJCWlmICghSGVh cFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciBwcm9jZWR1cmUgJXUiLCBwcm9jLT5vYmplY3QpOworCQlwcm9jRm9ybSA9IChGb3Jt X3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jVHVwKTsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiRlVOQ1RJT04gJXtudW19biAoJXtsdHlwZX1ULCAle3J0eXBlfVQpICV7ZnVuY3Rpb259RCIs CisJCQkJCQkJIDQsCisJCQkJCQkJICJudW0iLCBPYmpUeXBlSW50ZWdlciwgcHJvYy0+bnVtYmVy LAorCQkJCQkJCSAibHR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfdHlwZShwcm9jLT5sZWZ0dHlwZSwgLTEpLAorCQkJCQkJCSAicnR5cGUiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jLT5yaWdodHR5cGUsIC0xKSwK KwkJCQkJCQkgImZ1bmN0aW9uIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lKHByb2NGb3JtLT5wcm9uYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJICBOYW1l U3RyKHByb2NGb3JtLT5wcm9uYW1lKSkpOworCisJCXByb2FyZ3R5cGVzID0gcHJvY0Zvcm0tPnBy b2FyZ3R5cGVzLnZhbHVlczsKKwkJZm9yIChpID0gMDsgaSA8IHByb2NGb3JtLT5wcm9uYXJnczsg aSsrKQorCQl7CisJCQlPYmpUcmVlCSAgICphcmc7CisKKwkJCWFyZyA9IG5ld19vYmp0cmVlX2Zv cl90eXBlKHByb2FyZ3R5cGVzW2ldLCAtMSk7CisJCQlhcmdsaXN0ID0gbGFwcGVuZChhcmdsaXN0 LCBuZXdfb2JqZWN0X29iamVjdChhcmcpKTsKKwkJfQorCisJCWFwcGVuZF9mb3JtYXRfc3RyaW5n KHRtcG9iaiwgIigiKTsKKwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIle2FyZ3R5cGVz OiwgfVQiLCBhcmdsaXN0KTsKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wb2JqLCAiKSIpOwor CisJCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHN0 bXQsICJBUyAle2l0ZW1zOiwgfXMiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZShvcGZUdXAp OworCVJlbGVhc2VTeXNDYWNoZShvcGNUdXApOworCisJcmV0dXJuIHN0bXQ7Cit9CisKKy8qCisg KiBEZXBhcnNlIGEgQ3JlYXRlVHJpZ1N0bXQgKENSRUFURSBPUEVSQVRPUiBGQU1JTFkpCisgKgor ICogR2l2ZW4gYSB0cmlnZ2VyIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQs IHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQu CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlT3BGYW1pbHkoT2lkIG9iamVj dElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJSGVhcFR1cGxlICAgb3BmVHVwOworCUhlYXBUdXBs ZSAgIGFtVHVwOworCUZvcm1fcGdfb3BmYW1pbHkgb3BmRm9ybTsKKwlGb3JtX3BnX2FtICBhbUZv cm07CisJT2JqVHJlZQkgICAqY29wZlN0bXQ7CisKKwlvcGZUdXAgPSBTZWFyY2hTeXNDYWNoZTEo T1BGQU1JTFlPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQob3BmVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IG9wZXJhdG9yIGZhbWlseSB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlvcGZGb3JtID0gKEZv cm1fcGdfb3BmYW1pbHkpIEdFVFNUUlVDVChvcGZUdXApOworCisJYW1UdXAgPSBTZWFyY2hTeXND YWNoZTEoQU1PSUQsIE9iamVjdElkR2V0RGF0dW0ob3BmRm9ybS0+b3BmbWV0aG9kKSk7CisJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKGFtVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBm YWlsZWQgZm9yIGFjY2VzcyBtZXRob2QgJXUiLAorCQkJIG9wZkZvcm0tPm9wZm1ldGhvZCk7CisJ YW1Gb3JtID0gKEZvcm1fcGdfYW0pIEdFVFNUUlVDVChhbVR1cCk7CisKKwljb3BmU3RtdCA9IG5l d19vYmp0cmVlX1ZBKCJDUkVBVEUgT1BFUkFUT1IgRkFNSUxZICV7aWRlbnRpdHl9RCBVU0lORyAl e2FtbmFtZX1JIiwKKwkJCQkJCQkgIDIsCisJCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wZkZvcm0tPm9wZm5hbWVz cGFjZSwKKwkJCQkJCQkJCQkJCQkgICBOYW1lU3RyKG9wZkZvcm0tPm9wZm5hbWUpKSwKKwkJCQkJ CQkgICJhbW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBOYW1lU3RyKGFtRm9ybS0+YW1uYW1lKSk7CisK KwlSZWxlYXNlU3lzQ2FjaGUoYW1UdXApOworCVJlbGVhc2VTeXNDYWNoZShvcGZUdXApOworCisJ cmV0dXJuIGNvcGZTdG10OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVNjaGVtYVN0bXQu CisgKgorICogR2l2ZW4gYSBzY2hlbWEgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRl ZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29t bWFuZC4KKyAqCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlU2NoZW1hU3Rt dChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVTY2hlbWFTdG10ICpu b2RlID0gKENyZWF0ZVNjaGVtYVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJCQkgKmNyZWF0 ZVNjaGVtYTsKKwlPYmpUcmVlCQkJICphdXRoOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAor CSAqCisJICogQ1JFQVRFIFNDSEVNQSAle2lmX25vdF9leGlzdHN9cyAle25hbWV9SSAle2F1dGhv cml6YXRpb259cworCSAqLworCWNyZWF0ZVNjaGVtYSA9IG5ld19vYmp0cmVlKCJDUkVBVEUgU0NI RU1BIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTY2hlbWEsICIle2lmX25vdF9l eGlzdHN9cyIsCisJCQkJCQkgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6 ICIiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVNjaGVtYSwgIiV7bmFtZX1JIiwg bm9kZS0+c2NoZW1hbmFtZSk7CisKKwlhdXRoID0gbmV3X29ianRyZWUoIkFVVEhPUklaQVRJT04i KTsKKwlpZiAobm9kZS0+YXV0aHJvbGUpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGF1dGgsICIl e2F1dGhvcml6YXRpb25fcm9sZX1JIiwKKwkJCQkJCQkgZ2V0X3JvbGVzcGVjX25hbWUobm9kZS0+ YXV0aHJvbGUpKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QoYXV0aCwgIiV7YXV0 aG9yaXphdGlvbl9yb2xlfUkgIik7CisJCWFwcGVuZF9ib29sX29iamVjdChhdXRoLCAicHJlc2Vu dCIsIGZhbHNlKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU2NoZW1hLCAiJXth dXRob3JpemF0aW9ufXMiLCBhdXRoKTsKKworCXJldHVybiBjcmVhdGVTY2hlbWE7Cit9CisKKy8q CisgKiBEZXBhcnNlIGEgQ3JlYXRlU2VxU3RtdC4KKyAqCisgKiBHaXZlbiBhIHNlcXVlbmNlIE9J RCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZSBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAq IHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9DcmVhdGVTZXFTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQor eworCU9ialRyZWUJKmNyZWF0ZVNlcTsKKwlPYmpUcmVlCSp0bXBvYmo7CisJUmVsYXRpb24JcmVs YXRpb247CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGE7CisJTGlzdAkgICAqZWxlbXMg PSBOSUw7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCVJlbGF0aW9uCXJlbDsKKwlIZWFw VHVwbGUJc2VxdHVwbGU7CisJQ3JlYXRlU2VxU3RtdCAqY3JlYXRlU2VxU3RtdCA9IChDcmVhdGVT ZXFTdG10ICopIHBhcnNldHJlZTsKKworCS8qCisJICogU2VxdWVuY2UgZm9yIElERU5USVRZIENP TFVNTiBvdXRwdXQgc2VwYXJhdGVseSh2aWEgQ1JFQVRFIFRBQkxFIG9yCisJICogQUxURVIgVEFC TEUpOyByZXR1cm4gZW1wdHkgaGVyZS4KKwkgKi8KKwlpZiAoY3JlYXRlU2VxU3RtdC0+Zm9yX2lk ZW50aXR5KQorCQlyZXR1cm4gTlVMTDsKKworCXNlcWRhdGEgPSBnZXRfc2VxdWVuY2VfdmFsdWVz KG9iamVjdElkKTsKKworCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNz U2hhcmVMb2NrKTsKKwlyZWwgPSB0YWJsZV9vcGVuKFNlcXVlbmNlUmVsYXRpb25JZCwgUm93RXhj bHVzaXZlTG9jayk7CisJc2VxdHVwbGUgPSBTZWFyY2hTeXNDYWNoZUNvcHkxKFNFUVJFTElELAor CQkJCQkJCQkgICBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKHNlcXR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IHNlcXVlbmNlICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlzZXFmb3JtID0gKEZvcm1fcGdfc2Vx dWVuY2UpIEdFVFNUUlVDVChzZXF0dXBsZSk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJ ICoKKwkgKiBDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFNFUVVFTkNFICV7aWRlbnRpdHl9RAorCSAq LworCWNyZWF0ZVNlcSA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsKKworCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGNyZWF0ZVNlcSwgIiV7cGVyc2lzdGVuY2V9cyIsCisJCQkJCQkgZ2V0X3BlcnNpc3Rl bmNlX3N0cihyZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSkpOworCisJdG1wb2JqID0g bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwK KwkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pKTsKKwlhcHBlbmRf b2JqZWN0X29iamVjdChjcmVhdGVTZXEsICJTRVFVRU5DRSAle2lkZW50aXR5fUQiLCB0bXBvYmop OworCisJLyogRGVmaW5pdGlvbiBlbGVtZW50cyAqLworCWVsZW1zID0gbGFwcGVuZChlbGVtcywg ZGVwYXJzZV9TZXFfQ2FjaGUoY3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0g bGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfQ3ljbGUoY3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxz ZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfSW5jcmVtZW50QnkoY3Jl YXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJz ZV9TZXFfTWludmFsdWUoY3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFw cGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWF4dmFsdWUoY3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxz ZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfU3RhcnR3aXRoKGNyZWF0 ZVNlcSwgc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2Vf U2VxX1Jlc3RhcnQoY3JlYXRlU2VxLCBzZXFkYXRhKSk7CisKKwkvKiBXZSBwdXJwb3NlZnVsbHkg ZG8gbm90IGVtaXQgT1dORUQgQlkgaGVyZSAqLworCWFwcGVuZF9hcnJheV9vYmplY3QoY3JlYXRl U2VxLCAiJXtkZWZpbml0aW9uOiB9cyIsIGVsZW1zKTsKKworCXRhYmxlX2Nsb3NlKHJlbCwgUm93 RXhjbHVzaXZlTG9jayk7CisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9j ayk7CisKKwlyZXR1cm4gY3JlYXRlU2VxOworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVN0 bXQgKENSRUFURSBUQUJMRSkuCisgKgorICogR2l2ZW4gYSB0YWJsZSBPSUQgYW5kIHRoZSBwYXJz ZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5n IHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Ny ZWF0ZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlU3RtdCAq bm9kZSA9IChDcmVhdGVTdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbglyZWxhdGlvbiA9IHJl bGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJTGlzdAkgICAqZHBjb250 ZXh0OworCU9ialRyZWUJKmNyZWF0ZVN0bXQ7CisJT2JqVHJlZQkqdG1wb2JqOworCUxpc3QJICAg Kmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCS8qCisJICogVmVyYm9zZSBzeW50 YXgKKwkgKgorCSAqIENSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3Rz fXMgJXtpZGVudGl0eX1EIFtPRgorCSAqICV7b2ZfdHlwZX1UIHwgUEFSVElUSU9OIE9GICV7cGFy ZW50X2lkZW50aXR5fURdICV7dGFibGVfZWxlbWVudHN9cworCSAqICV7aW5oZXJpdHN9cyAle3Bh cnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1c2V9cworCSAqICV7b25f Y29tbWl0fXMgJXt0YWJsZXNwYWNlfXMKKwkgKi8KKwljcmVhdGVTdG10ID0gbmV3X29ianRyZWUo IkNSRUFURSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU3RtdCwgIiV7cGVyc2lz dGVuY2V9cyIsCisJCQkJCQkgZ2V0X3BlcnNpc3RlbmNlX3N0cihyZWxhdGlvbi0+cmRfcmVsLT5y ZWxwZXJzaXN0ZW5jZSkpOworCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoY3JlYXRlU3RtdCwgIlRB QkxFIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTdG10LCAiJXtpZl9ub3RfZXhp c3RzfXMiLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAi Iik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3Jl bC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxh dGlvbikpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2lkZW50aXR5fUQi LCB0bXBvYmopOworCisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdl dFJlbGF0aW9uTmFtZShyZWxhdGlvbiksCisJCQkJCQkJCQlvYmplY3RJZCk7CisKKwkvKgorCSAq IFR5cGVkIHRhYmxlcyBhbmQgcGFydGl0aW9ucyB1c2UgYSBzbGlnaHRseSBkaWZmZXJlbnQgZm9y bWF0IHN0cmluZzogd2UKKwkgKiBtdXN0IG5vdCBwdXQgdGFibGVfZWxlbWVudHMgd2l0aCBwYXJl bnRzIGRpcmVjdGx5IGluIHRoZSBmbXQgc3RyaW5nLAorCSAqIGJlY2F1c2UgaWYgdGhlcmUgYXJl IG5vIG9wdGlvbnMgdGhlIHBhcmVucyBtdXN0IG5vdCBiZSBlbWl0dGVkOyBhbmQKKwkgKiBhbHNv LCB0eXBlZCB0YWJsZXMgZG8gbm90IGFsbG93IGZvciBpbmhlcml0YW5jZS4KKwkgKi8KKwlpZiAo bm9kZS0+b2ZUeXBlbmFtZSB8fCBub2RlLT5wYXJ0Ym91bmQpCisJeworCQlMaXN0ICAgICAgICp0 YWJsZWVsdHMgPSBOSUw7CisKKwkJLyoKKwkJICogV2UgY2FuJ3QgcHV0IHRhYmxlIGVsZW1lbnRz IGRpcmVjdGx5IGluIHRoZSBmbXQgc3RyaW5nIGFzIGFuIGFycmF5CisJCSAqIHN1cnJvdW5kZWQg YnkgcGFyZW5zIGhlcmUsIGJlY2F1c2UgYW4gZW1wdHkgY2xhdXNlIHdvdWxkIGNhdXNlIGEKKwkJ ICogc3ludGF4IGVycm9yLiAgVGhlcmVmb3JlLCB3ZSB1c2UgYW4gaW5kaXJlY3Rpb24gZWxlbWVu dCBhbmQgc2V0CisJCSAqIHByZXNlbnQ9ZmFsc2Ugd2hlbiB0aGVyZSBhcmUgbm8gZWxlbWVudHMu CisJCSAqLworCQlpZiAobm9kZS0+b2ZUeXBlbmFtZSkKKwkJeworCQkJdG1wb2JqID0gbmV3X29i anRyZWVfZm9yX3R5cGUocmVsYXRpb24tPnJkX3JlbC0+cmVsb2Z0eXBlLCAtMSk7CisJCQlhcHBl bmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiT0YgJXtvZl90eXBlfVQiLCB0bXBvYmopOwor CQl9CisJCWVsc2UKKwkJeworCQkJTGlzdCAgICAgKnBhcmVudHM7CisJCQlPYmpFbGVtICAqZWxl bTsKKworCQkJcGFyZW50cyA9IGRlcGFyc2VfSW5oUmVsYXRpb25zKG9iamVjdElkKTsKKwkJCWVs ZW0gPSAoT2JqRWxlbSAqKSBsaW5pdGlhbChwYXJlbnRzKTsKKworCQkJQXNzZXJ0KGxpc3RfbGVu Z3RoKHBhcmVudHMpID09IDEpOworCisJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhjcmVhdGVTdG10 LCAiUEFSVElUSU9OIE9GIik7CisKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQs ICIle3BhcmVudF9pZGVudGl0eX1EIiwKKwkJCQkJCQkJIGVsZW0tPnZhbHVlLm9iamVjdCk7CisJ CX0KKworCQl0YWJsZWVsdHMgPSBkZXBhcnNlX1RhYmxlRWxlbWVudHMocmVsYXRpb24sIG5vZGUt PnRhYmxlRWx0cywgZHBjb250ZXh0LAorCQkJCQkJCQkJCSAgdHJ1ZSwgICAgICAvKiB0eXBlZCB0 YWJsZSAqLworCQkJCQkJCQkJCSAgZmFsc2UpOyAgICAvKiBub3QgY29tcG9zaXRlICovCisJCXRh YmxlZWx0cyA9IG9idGFpbkNvbnN0cmFpbnRzKHRhYmxlZWx0cywgb2JqZWN0SWQsIEludmFsaWRP aWQpOworCisJCWlmICh0YWJsZWVsdHMgPT0gTklMKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2Jq dHJlZSgiIik7CisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNl KTsKKwkJfQorCQllbHNlCisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiKCV7ZWxlbWVudHM6 LCB9cykiLCAxLAorCQkJCQkJCQkgImVsZW1lbnRzIiwgT2JqVHlwZUFycmF5LCB0YWJsZWVsdHMp OworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3RhYmxlX2VsZW1lbnRz fXMiLCB0bXBvYmopOworCX0KKwllbHNlCisJeworCQlMaXN0ICAgICAgICp0YWJsZWVsdHMgPSBO SUw7CisKKwkJLyoKKwkJICogVGhlcmUgaXMgbm8gbmVlZCB0byBwcm9jZXNzIExJS0UgY2xhdXNl cyBzZXBhcmF0ZWx5OyB0aGV5IGhhdmUKKwkJICogYWxyZWFkeSBiZWVuIHRyYW5zZm9ybWVkIGlu dG8gY29sdW1ucyBhbmQgY29uc3RyYWludHMuCisJCSAqLworCisJCS8qCisJCSAqIFByb2Nlc3Mg dGFibGUgZWxlbWVudHM6IGNvbHVtbiBkZWZpbml0aW9ucyBhbmQgY29uc3RyYWludHMuICBPbmx5 CisJCSAqIHRoZSBjb2x1bW4gZGVmaW5pdGlvbnMgYXJlIG9idGFpbmVkIGZyb20gdGhlIHBhcnNl IG5vZGUgaXRzZWxmLiAgVG8KKwkJICogZ2V0IGNvbnN0cmFpbnRzIHdlIHJlbHkgb24gcGdfY29u c3RyYWludCwgYmVjYXVzZSB0aGUgcGFyc2Ugbm9kZQorCQkgKiBtaWdodCBiZSBtaXNzaW5nIHNv bWUgdGhpbmdzIHN1Y2ggYXMgdGhlIG5hbWUgb2YgdGhlIGNvbnN0cmFpbnRzLgorCQkgKi8KKwkJ dGFibGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1lbnRzKHJlbGF0aW9uLCBub2RlLT50YWJsZUVs dHMsIGRwY29udGV4dCwKKwkJCQkJCQkJCQkgIGZhbHNlLCAgICAgLyogbm90IHR5cGVkIHRhYmxl ICovCisJCQkJCQkJCQkJICBmYWxzZSk7ICAgIC8qIG5vdCBjb21wb3NpdGUgKi8KKwkJdGFibGVl bHRzID0gb2J0YWluQ29uc3RyYWludHModGFibGVlbHRzLCBvYmplY3RJZCwgSW52YWxpZE9pZCk7 CisKKwkJYXBwZW5kX2FycmF5X29iamVjdChjcmVhdGVTdG10LCAiKCV7dGFibGVfZWxlbWVudHM6 LCB9cykiLCB0YWJsZWVsdHMpOworCisJCS8qCisJCSAqIEFkZCBpbmhlcml0YW5jZSBzcGVjaWZp Y2F0aW9uLiAgV2UgY2Fubm90IHNpbXBseSBzY2FuIHRoZSBsaXN0IG9mCisJCSAqIHBhcmVudHMg ZnJvbSB0aGUgcGFyc2VyIG5vZGUsIGJlY2F1c2UgdGhhdCBtYXkgbGFjayB0aGUgYWN0dWFsCisJ CSAqIHF1YWxpZmllZCBuYW1lcyBvZiB0aGUgcGFyZW50IHJlbGF0aW9ucy4gIFJhdGhlciB0aGFu IHRyeWluZyB0bworCQkgKiByZS1yZXNvbHZlIHRoZW0gZnJvbSB0aGUgaW5mb3JtYXRpb24gaW4g dGhlIHBhcnNlIG5vZGUsIGl0IHNlZW1zCisJCSAqIG1vcmUgYWNjdXJhdGUgYW5kIGNvbnZlbmll bnQgdG8gZ3JhYiBpdCBmcm9tIHBnX2luaGVyaXRzLgorCQkgKi8KKwkJdG1wb2JqID0gbmV3X29i anRyZWUoIklOSEVSSVRTIik7CisJCWlmIChsaXN0X2xlbmd0aChub2RlLT5pbmhSZWxhdGlvbnMp ID4gMCkKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiKCV7cGFyZW50czosIH1EKSIs IGRlcGFyc2VfSW5oUmVsYXRpb25zKG9iamVjdElkKSk7CisJCWVsc2UKKwkJeworCQkJYXBwZW5k X251bGxfb2JqZWN0KHRtcG9iaiwgIigle3BhcmVudHM6LCB9RCkiKTsKKwkJCWFwcGVuZF9ib29s X29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCQl9CisJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KGNyZWF0ZVN0bXQsICIle2luaGVyaXRzfXMiLCB0bXBvYmopOworCX0KKworCXRtcG9i aiA9IG5ld19vYmp0cmVlKCJUQUJMRVNQQUNFIik7CisJaWYgKG5vZGUtPnRhYmxlc3BhY2VuYW1l KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3RhYmxlc3BhY2V9SSIsIG5vZGUt PnRhYmxlc3BhY2VuYW1lKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wb2Jq LCAiJXt0YWJsZXNwYWNlfUkiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNl bnQiLCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3Rh Ymxlc3BhY2V9cyIsIHRtcG9iaik7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwg IiV7b25fY29tbWl0fXMiLAorCQkJCQkJICBkZXBhcnNlX09uQ29tbWl0Q2xhdXNlKG5vZGUtPm9u Y29tbWl0KSk7CisKKwkvKiBGT1IgVkFMVUVTIGNsYXVzZSAqLworCWlmIChub2RlLT5wYXJ0Ym91 bmQpCisJeworCQkvKgorCQkgKiBHZXQgcGdfY2xhc3MucmVscGFydGJvdW5kLiBXZSBjYW5ub3Qg dXNlIHBhcnRib3VuZCBpbiB0aGUKKwkJICogcGFyc2V0cmVlIGRpcmVjdGx5IGFzIGl0J3MgdGhl IG9yaWdpbmFsIHBhcnRib3VuZCBleHByZXNzaW9uCisJCSAqIHdoaWNoIGhhdmVuJ3QgYmVlbiB0 cmFuc2Zvcm1lZC4KKwkJICovCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVN0bXQsICIl e3BhcnRpdGlvbl9ib3VuZH1zIiwKKwkJCQkJCQkgUmVsYXRpb25HZXRQYXJ0aXRpb25Cb3VuZChv YmplY3RJZCkpOworCX0KKworCS8qIFBBUlRJVElPTiBCWSBjbGF1c2UgKi8KKwl0bXBvYmogPSBu ZXdfb2JqdHJlZSgiUEFSVElUSU9OIEJZIik7CisJaWYgKHJlbGF0aW9uLT5yZF9yZWwtPnJlbGtp bmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wb2JqLCAiJXtkZWZpbml0aW9ufXMiLCBwZ19nZXRfcGFydGtleWRlZl9zaW1wbGUob2JqZWN0 SWQpKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wb2JqLCAiJXtkZWZpbml0 aW9ufXMiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7 CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3BhcnRpdGlvbl9ieX1z IiwgdG1wb2JqKTsKKworCS8qIFVTSU5HIGNsYXVzZSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVl KCJVU0lORyIpOworCWlmIChub2RlLT5hY2Nlc3NNZXRob2QpCisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRtcG9iaiwgIiV7YWNjZXNzX21ldGhvZH1JIiwgbm9kZS0+YWNjZXNzTWV0aG9kKTsKKwll bHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wb2JqLCAiJXthY2Nlc3NfbWV0aG9kfUki KTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJfQor CWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2FjY2Vzc19tZXRob2R9cyIsIHRt cG9iaik7CisKKwkvKiBXSVRIIGNsYXVzZSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJXSVRI Iik7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJeworCQlPYmpUcmVlICAgICp0 bXBvYmoyOworCQlEZWZFbGVtICpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJ dG1wb2JqMiA9IGRlcGFyc2VfRGVmRWxlbShvcHQsIGZhbHNlKTsKKwkJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqMikpOworCX0KKworCWlmIChsaXN0KQorCQlh cHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIigle3dpdGg6LCB9cykiLCBsaXN0KTsKKwllbHNl CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCisJYXBw ZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7d2l0aF9jbGF1c2V9cyIsIHRtcG9iaik7 CisKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVy biBjcmVhdGVTdG10OworfQorCisvKgorICogRGVwYXJzZSBhIERlZmluZVN0bXQuCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBh cnNldHJlZSwgT2JqZWN0QWRkcmVzcyBzZWNvbmRhcnlPYmopCit7CisJRGVmaW5lU3RtdCAqZGVm aW5lID0gKERlZmluZVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAgKmRlZlN0bXQgPSBO VUxMOworCisJc3dpdGNoIChkZWZpbmUtPmtpbmQpCisJeworCQljYXNlIE9CSkVDVF9PUEVSQVRP UjoKKwkJCWRlZlN0bXQgPSBkZXBhcnNlX0RlZmluZVN0bXRfT3BlcmF0b3Iob2JqZWN0SWQsIGRl ZmluZSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9y dGVkIG9iamVjdCBraW5kIik7CisJfQorCisJcmV0dXJuIGRlZlN0bXQ7Cit9CisKKy8qCisgKiBE ZXBhcnNlIGEgRGVmaW5lU3RtdCAoQ1JFQVRFIE9QRVJBVE9SKQorICoKKyAqIEdpdmVuIGEgdHJp Z2dlciBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2Jq VHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfT3BlcmF0b3IoT2lkIG9iamVjdElkLCBEZWZp bmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxlICAgb3ByVHVwOworCU9ialRyZWUJICAgKnN0 bXQ7CisJT2JqVHJlZQkgICAqdG1wb2JqOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJRm9ybV9w Z19vcGVyYXRvciBvcHJGb3JtOworCisJb3ByVHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRVJPSUQs IE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3By VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIHdp dGggT0lEICV1Iiwgb2JqZWN0SWQpOworCW9wckZvcm0gPSAoRm9ybV9wZ19vcGVyYXRvcikgR0VU U1RSVUNUKG9wclR1cCk7CisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBPUEVSQVRP UiAle2lkZW50aXR5fU8iLCAxLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3ByRm9ybS0+b3BybmFtZXNwYWNlLAor CQkJCQkJCQkJCQkJICAgTmFtZVN0cihvcHJGb3JtLT5vcHJuYW1lKSkpOworCisJLyogUFJPQ0VE VVJFICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlBST0NFRFVSRT0le3Byb2NlZHVyZX1E IiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInByb2NlZHVyZSIsCisJCQkJ CQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9w cmNvZGUpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmop KTsKKworCS8qIExFRlRBUkcgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiTEVGVEFSRz0i LCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibGVmdGFyZyIpOworCWlmIChP aWRJc1ZhbGlkKG9wckZvcm0tPm9wcmxlZnQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBv YmosICIle3R5cGV9VCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wckZvcm0tPm9w cmxlZnQsIC0xKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2Vu dCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBv YmopKTsKKworCS8qIFJJR0hUQVJHICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlJJR0hU QVJHPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJyaWdodGFyZyIpOwor CWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcnJpZ2h0KSkKKwkJYXBwZW5kX29iamVjdF9vYmpl Y3QodG1wb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcHJG b3JtLT5vcHJyaWdodCwgLTEpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmos ICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcG9iaikpOworCisJLyogQ09NTVVUQVRPUiAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJDT01NVVRBVE9SPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJj b21tdXRhdG9yIik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3ByY29tKSkKKwkJYXBwZW5k X29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtvcGVyfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgb3ByRm9y bS0+b3ByY29tKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2Vu dCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBv YmopKTsKKworCS8qIE5FR0FUT1IgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiTkVHQVRP Uj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibmVnYXRvciIpOworCWlm IChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcm5lZ2F0ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHRtcG9iaiwgIiV7b3Blcn1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KE9wZXJhdG9yUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcm5lZ2F0ZSkp OworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7 CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkv KiBSRVNUUklDVCAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJSRVNUUklDVD0iLCAxLAor CQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVzdHJpY3QiKTsKKwlpZiAoT2lkSXNW YWxpZChvcHJGb3JtLT5vcHJyZXN0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAi JXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9j ZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3BycmVzdCkpOworCWVs c2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkvKiBKT0lO ICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkpPSU49IiwgMSwKKwkJCQkJCSAiY2xhdXNl IiwgT2JqVHlwZVN0cmluZywgImpvaW4iKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJq b2luKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtwcm9jZWR1cmV9RCIsCisJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3Byam9pbikpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xf b2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkvKiBNRVJHRVMgKi8KKwl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiTUVSR0VTIiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgIm1lcmdlcyIpOworCWlmICghb3ByRm9ybS0+b3ByY2FubWVyZ2UpCisJCWFwcGVuZF9ib29s X29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyogSEFTSEVTICovCisJdG1wb2JqID0g bmV3X29ianRyZWVfVkEoIkhBU0hFUyIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJoYXNoZXMiKTsKKwlpZiAoIW9wckZvcm0tPm9wcmNhbmhhc2gpCisJCWFwcGVuZF9ib29s X29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJYXBwZW5kX2FycmF5X29iamVjdChzdG10 LCAiKCV7ZWxlbXM6LCB9cykiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZShvcHJUdXApOwor CisJcmV0dXJuIHN0bXQ7Cit9CisKKy8qCisgKiAuLi4gQUxURVIgQ09MVU1OIC4uLiBTRVQvUkVT RVQgKC4uLikKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9SZWxTZXRPcHRpb25zKEFs dGVyVGFibGVDbWQgKnN1YmNtZCkKK3sKKwlMaXN0CSAgICpzZXRzID0gTklMOworCUxpc3RDZWxs ICAgKmNlbGw7CisJT2JqVHJlZQkgICAqcmVsc2V0OworCWNoYXIJICAgKmZtdDsKKwlib29sCQlp c19yZXNldCA9IHN1YmNtZC0+c3VidHlwZSA9PSBBVF9SZXNldFJlbE9wdGlvbnM7CisKKwkvKgor CSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBSRVNFVHxTRVQgKCV7b3B0aW9uczosIH1zKQor CSAqLworCWlmIChpc19yZXNldCkKKwkJZm10ID0gIlJFU0VUICI7CisJZWxzZQorCQlmbXQgPSAi U0VUICI7CisKKwlyZWxzZXQgPSBuZXdfb2JqdHJlZShmbXQpOworCisJZm9yZWFjaChjZWxsLCAo TGlzdCAqKSBzdWJjbWQtPmRlZikKKwl7CisJCURlZkVsZW0JICAgKmVsZW07CisJCU9ialRyZWUJ ICAgKnNldDsKKworCQllbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlzZXQgPSBk ZXBhcnNlX0RlZkVsZW0oZWxlbSwgaXNfcmVzZXQpOworCQlzZXRzID0gbGFwcGVuZChzZXRzLCBu ZXdfb2JqZWN0X29iamVjdChzZXQpKTsKKwl9CisKKwlBc3NlcnQoc2V0cyk7CisJYXBwZW5kX2Fy cmF5X29iamVjdChyZWxzZXQsICIoJXtvcHRpb25zOiwgfXMpIiwgc2V0cyk7CisKKwlyZXR1cm4g cmVsc2V0OworfQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisK KworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworLyoKKyAq IERlcGFyc2UgYSBDcmVhdGVUcmlnU3RtdCAoQ1JFQVRFIFRSSUdHRVIpCisgKgorICogR2l2ZW4g YSB0cmlnZ2VyIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBh biBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlVHJpZ1N0bXQoT2lkIG9iamVjdElkLCBOb2Rl ICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlVHJpZ1N0bXQgKm5vZGUgPSAoQ3JlYXRlVHJpZ1N0bXQg KikgcGFyc2V0cmVlOworCVJlbGF0aW9uCXBnX3RyaWdnZXI7CisJSGVhcFR1cGxlCXRyaWdUdXA7 CisJRm9ybV9wZ190cmlnZ2VyIHRyaWdGb3JtOworCU9ialRyZWUJICAgKnRyaWdnZXI7CisJT2Jq VHJlZQkgICAqdG1wb2JqOworCWludAkJCXRnbmFyZ3M7CisJTGlzdAkgICAqbGlzdDsKKwlMaXN0 CSAgICpldmVudHM7CisKKwlwZ190cmlnZ2VyID0gdGFibGVfb3BlbihUcmlnZ2VyUmVsYXRpb25J ZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXRyaWdUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlf b2lkKHBnX3RyaWdnZXIsIEFudW1fcGdfdHJpZ2dlcl9vaWQsIG9iamVjdElkKTsKKwl0cmlnRm9y bSA9IChGb3JtX3BnX3RyaWdnZXIpIEdFVFNUUlVDVCh0cmlnVHVwKTsKKworCS8qCisJICogVmVy Ym9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSAle2NvbnN0cmFpbnR9cyBUUklHR0VSICV7bmFt ZX1JICV7dGltZX1zICV7ZXZlbnRzOiBPUiB9cworCSAqIE9OICV7cmVsYXRpb259RCAle2Zyb21f dGFibGV9cyAle2NvbnN0cmFpbnRfYXR0cnM6IH1zCisJICogRk9SIEVBQ0ggJXtmb3JfZWFjaH1z ICV7d2hlbn1zIEVYRUNVVEUgUFJPQ0VEVVJFICV7ZnVuY3Rpb259cworCSAqLworCXRyaWdnZXIg PSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdCh0cmlnZ2Vy LCAiJXtjb25zdHJhaW50fXMiLAorCQkJCQkJIG5vZGUtPmlzY29uc3RyYWludCA/ICJDT05TVFJB SU5UIiA6ICIiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRyaWdnZXIsICJUUklHR0VSICV7 bmFtZX1JIiwgbm9kZS0+dHJpZ25hbWUpOworCisJaWYgKG5vZGUtPnRpbWluZyA9PSBUUklHR0VS X1RZUEVfQkVGT1JFKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0cmlnZ2VyLCAiJXt0aW1lfXMi LCAiQkVGT1JFIik7CisJZWxzZSBpZiAobm9kZS0+dGltaW5nID09IFRSSUdHRVJfVFlQRV9BRlRF UikKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodHJpZ2dlciwgIiV7dGltZX1zIiwgIkFGVEVSIik7 CisJZWxzZSBpZiAobm9kZS0+dGltaW5nID09IFRSSUdHRVJfVFlQRV9JTlNURUFEKQorCQlhcHBl bmRfc3RyaW5nX29iamVjdCh0cmlnZ2VyLCAiJXt0aW1lfXMiLCAiSU5TVEVBRCBPRiIpOworCWVs c2UKKwkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCB0cmlnZ2VyIHRpbWluZyB0eXBlICVkIiwg bm9kZS0+dGltaW5nKTsKKworCS8qCisJICogRGVjb2RlIHRoZSBldmVudHMgdGhhdCB0aGUgdHJp Z2dlciBmaXJlcyBmb3IuICBUaGUgb3V0cHV0IGlzIGEgbGlzdDsKKwkgKiBpbiBtb3N0IGNhc2Vz IGl0IHdpbGwganVzdCBiZSBhIHN0cmluZyB3aXRoIHRoZSBldmVudCBuYW1lLCBidXQgd2hlbgor CSAqIHRoZXJlJ3MgYW4gVVBEQVRFIHdpdGggYSBsaXN0IG9mIGNvbHVtbnMsIHdlIHJldHVybiBh IEpTT04gb2JqZWN0LgorCSAqLworCWV2ZW50cyA9IE5JTDsKKwlpZiAobm9kZS0+ZXZlbnRzICYg VFJJR0dFUl9UWVBFX0lOU0VSVCkKKwkJZXZlbnRzID0gbGFwcGVuZChldmVudHMsIG5ld19zdHJp bmdfb2JqZWN0KCJJTlNFUlQiKSk7CisJaWYgKG5vZGUtPmV2ZW50cyAmIFRSSUdHRVJfVFlQRV9E RUxFVEUpCisJCWV2ZW50cyA9IGxhcHBlbmQoZXZlbnRzLCBuZXdfc3RyaW5nX29iamVjdCgiREVM RVRFIikpOworCWlmIChub2RlLT5ldmVudHMgJiBUUklHR0VSX1RZUEVfVFJVTkNBVEUpCisJCWV2 ZW50cyA9IGxhcHBlbmQoZXZlbnRzLCBuZXdfc3RyaW5nX29iamVjdCgiVFJVTkNBVEUiKSk7CisJ aWYgKG5vZGUtPmV2ZW50cyAmIFRSSUdHRVJfVFlQRV9VUERBVEUpCisJeworCQlpZiAobm9kZS0+ Y29sdW1ucyA9PSBOSUwpCisJCXsKKwkJCWV2ZW50cyA9IGxhcHBlbmQoZXZlbnRzLCBuZXdfc3Ry aW5nX29iamVjdCgiVVBEQVRFIikpOworCQl9CisJCWVsc2UKKwkJeworCQkJT2JqVHJlZQkgICAq dXBkYXRlOworCQkJTGlzdENlbGwgICAqY2VsbDsKKwkJCUxpc3QJICAgKmNvbHMgPSBOSUw7CisK KwkJCS8qCisJCQkgKiBDdXJyZW50bHkgb25seSBVUERBVEUgT0YgY2FuIGJlIG9iamVjdHMgaW4g dGhlIG91dHB1dCBKU09OLCBidXQKKwkJCSAqIHdlIGFkZCBhICJraW5kIiBlbGVtZW50IHNvIHRo YXQgdXNlciBjb2RlIGNhbiBkaXN0aW5ndWlzaAorCQkJICogcG9zc2libGUgZnV0dXJlIG5ldyBl dmVudCB0eXBlcy4KKwkJCSAqLworCQkJdXBkYXRlID0gbmV3X29ianRyZWVfVkEoIlVQREFURSBP RiIsIDEsCisJCQkJCQkJCQkia2luZCIsIE9ialR5cGVTdHJpbmcsICJ1cGRhdGVfb2YiKTsKKwor CQkJZm9yZWFjaChjZWxsLCBub2RlLT5jb2x1bW5zKQorCQkJeworCQkJCWNoYXIgICAqY29sbmFt ZSA9IHN0clZhbChsZmlyc3QoY2VsbCkpOworCisJCQkJY29scyA9IGxhcHBlbmQoY29scywgbmV3 X3N0cmluZ19vYmplY3QoY29sbmFtZSkpOworCQkJfQorCisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0 KHVwZGF0ZSwgIiV7Y29sdW1uczosIH1JIiwgY29scyk7CisKKwkJCWV2ZW50cyA9IGxhcHBlbmQo ZXZlbnRzLCBuZXdfb2JqZWN0X29iamVjdCh1cGRhdGUpKTsKKwkJfQorCX0KKwlhcHBlbmRfYXJy YXlfb2JqZWN0KHRyaWdnZXIsICIle2V2ZW50czogT1IgfXMiLCBldmVudHMpOworCisJdG1wb2Jq ID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJ CQkJCSAgdHJpZ0Zvcm0tPnRncmVsaWQpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRyaWdnZXIs ICJPTiAle3JlbGF0aW9ufUQiLCB0bXBvYmopOworCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEo IkZST00iLCAwKTsKKwlpZiAodHJpZ0Zvcm0tPnRnY29uc3RycmVsaWQpCisJeworCQlPYmpUcmVl CSAgICpyZWw7CisKKwkJcmVsID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9u UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkgIHRyaWdGb3JtLT50Z2NvbnN0cnJlbGlkKTsKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtyZWxhdGlvbn1EIiwgcmVsKTsKKwl9CisJZWxz ZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBl bmRfb2JqZWN0X29iamVjdCh0cmlnZ2VyLCAiJXtmcm9tX3RhYmxlfXMiLCB0bXBvYmopOworCisJ bGlzdCA9IE5JTDsKKwlpZiAobm9kZS0+ZGVmZXJyYWJsZSkKKwkJbGlzdCA9IGxhcHBlbmQobGlz dCwKKwkJCQkJICAgbmV3X3N0cmluZ19vYmplY3QoIkRFRkVSUkFCTEUiKSk7CisJaWYgKG5vZGUt PmluaXRkZWZlcnJlZCkKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwKKwkJCQkJICAgbmV3X3N0cmlu Z19vYmplY3QoIklOSVRJQUxMWSBERUZFUlJFRCIpKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHRy aWdnZXIsICIle2NvbnN0cmFpbnRfYXR0cnM6IH1zIiwgbGlzdCk7CisKKwlhcHBlbmRfc3RyaW5n X29iamVjdCh0cmlnZ2VyLCAiRk9SIEVBQ0ggJXtmb3JfZWFjaH1zIiwKKwkJCQkJCSBub2RlLT5y b3cgPyAiUk9XIiA6ICJTVEFURU1FTlQiKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJX SEVOIiwgMCk7CisJaWYgKG5vZGUtPndoZW5DbGF1c2UpCisJeworCQlOb2RlCSAgICp3aGVuQ2xh dXNlOworCQlEYXR1bQkJdmFsdWU7CisJCWJvb2wJCWlzbnVsbDsKKworCQl2YWx1ZSA9IGZhc3Rn ZXRhdHRyKHRyaWdUdXAsIEFudW1fcGdfdHJpZ2dlcl90Z3F1YWwsCisJCQkJCQkJUmVsYXRpb25H ZXREZXNjcihwZ190cmlnZ2VyKSwgJmlzbnVsbCk7CisJCWlmIChpc251bGwpCisJCQllbG9nKEVS Uk9SLCAiYm9ndXMgTlVMTCB0Z3F1YWwiKTsKKworCQl3aGVuQ2xhdXNlID0gc3RyaW5nVG9Ob2Rl KFRleHREYXR1bUdldENTdHJpbmcodmFsdWUpKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1w b2JqLCAiKCV7Y2xhdXNlfXMpIiwKKwkJCQkJCQkgcGdfZ2V0X3RyaWdnZXJfd2hlbmNsYXVzZSh0 cmlnRm9ybSwKKwkJCQkJCQkJCQkJCQkgICB3aGVuQ2xhdXNlLAorCQkJCQkJCQkJCQkJCSAgIGZh bHNlKSk7CisJfQorCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQi LCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QodHJpZ2dlciwgIiV7d2hlbn1zIiwgdG1w b2JqKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCIle2Z1bmNuYW1lfUQiLCAxLAorCQkJ CQkJICJmdW5jbmFtZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRyaWdGb3JtLT50 Z2ZvaWQpKTsKKwlsaXN0ID0gTklMOworCXRnbmFyZ3MgPSB0cmlnRm9ybS0+dGduYXJnczsKKwlp ZiAodGduYXJncyA+IDApCisJeworCQlieXRlYSAgKnRnYXJnczsKKwkJY2hhciAgICphcmdzdHI7 CisJCWJvb2wJaXNudWxsOworCQlpbnQJCWZpbmR4OworCQlpbnQJCWxlbnRnYXJnczsKKwkJY2hh ciAgICpwOworCisJCXRnYXJncyA9IERhdHVtR2V0Qnl0ZWFQKGZhc3RnZXRhdHRyKHRyaWdUdXAs CisJCQkJCQkJCQkJCUFudW1fcGdfdHJpZ2dlcl90Z2FyZ3MsCisJCQkJCQkJCQkJCVJlbGF0aW9u R2V0RGVzY3IocGdfdHJpZ2dlciksCisJCQkJCQkJCQkJCSZpc251bGwpKTsKKwkJaWYgKGlzbnVs bCkKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIE5VTEwgdGdhcmdzIik7CisJCWFyZ3N0ciA9IChj aGFyICopIFZBUkRBVEEodGdhcmdzKTsKKwkJbGVudGdhcmdzID0gVkFSU0laRV9BTllfRVhIRFIo dGdhcmdzKTsKKworCQlwID0gYXJnc3RyOworCQlmb3IgKGZpbmR4ID0gMDsgZmluZHggPCB0Z25h cmdzOyBmaW5keCsrKQorCQl7CisJCQlzaXplX3QJdGxlbjsKKworCQkJLyogVmVyaWZ5IHRoYXQg dGhlIGFyZ3VtZW50IGVuY29kaW5nIGlzIGNvcnJlY3QgKi8KKwkJCXRsZW4gPSBzdHJsZW4ocCk7 CisJCQlpZiAocCArIHRsZW4gPj0gYXJnc3RyICsgbGVudGdhcmdzKQorCQkJCWVyZXBvcnQoRVJS T1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJ CQkJCSBlcnJtc2coImludmFsaWQgYXJndW1lbnQgc3RyaW5nICglcykgZm9yIHRyaWdnZXIgXCIl c1wiIiwKKwkJCQkJCQkJYXJnc3RyLCBOYW1lU3RyKHRyaWdGb3JtLT50Z25hbWUpKSkpOworCisJ CQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwKSk7CisKKwkJCXAgKz0g dGxlbiArIDE7CisJCX0KKwl9CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBvYmosICIoIik7 CisJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIle2FyZ3M6LCB9TCIsIGxpc3QpOwkJLyog bWlnaHQgYmUgTklMICovCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wb2JqLCAiKSIpOworCisJ YXBwZW5kX29iamVjdF9vYmplY3QodHJpZ2dlciwgIkVYRUNVVEUgUFJPQ0VEVVJFICV7ZnVuY3Rp b259cyIsIHRtcG9iaik7CisKKwl0YWJsZV9jbG9zZShwZ190cmlnZ2VyLCBBY2Nlc3NTaGFyZUxv Y2spOworCisJcmV0dXJuIHRyaWdnZXI7Cit9CisKKy8qCisgKiBEZXBhcnNlIERlZkVsZW1zLCBh cyB1c2VkIGUuZy4gYnkgQUxURVIgQ09MVU1OIC4uLiBTRVQsIGludG8gYSBsaXN0IG9mIFNFVAor ICogKC4uLikgIG9yIFJFU0VUICguLi4pIGNvbnRlbnRzLgorICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0RlZkVsZW0oRGVmRWxlbSAqZWxlbSwgYm9vbCBpc19yZXNldCkKK3sKKwlPYmpU cmVlCSAgICpzZXQ7CisJT2JqVHJlZQkgICAqb3B0bmFtZTsKKworCXNldCA9IG5ld19vYmp0cmVl KCIiKTsKKwlvcHRuYW1lID0gbmV3X29ianRyZWUoIiIpOworCisJaWYgKGVsZW0tPmRlZm5hbWVz cGFjZSAhPSBOVUxMKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChvcHRuYW1lLCAiJXtzY2hlbWF9 SS4iLCBlbGVtLT5kZWZuYW1lc3BhY2UpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3Qob3B0bmFt ZSwgIiV7bGFiZWx9SSIsIGVsZW0tPmRlZm5hbWUpOworCisJYXBwZW5kX29iamVjdF9vYmplY3Qo c2V0LCAiJXtsYWJlbH1zIiwgb3B0bmFtZSk7CisKKwlpZiAoIWlzX3Jlc2V0KQorCQlhcHBlbmRf c3RyaW5nX29iamVjdChzZXQsICIgPSAle3ZhbHVlfUwiLAorCQkJCQkJCSBlbGVtLT5hcmcgPyBk ZWZHZXRTdHJpbmcoZWxlbSkgOgorCQkJCQkJCSBkZWZHZXRCb29sZWFuKGVsZW0pID8gIlRSVUUi IDogIkZBTFNFIik7CisKKwlyZXR1cm4gc2V0OworfQorCisvKgorICogSGFuZGxlIGRlcGFyc2lu ZyBvZiBEUk9QIGNvbW1hbmRzLgorICovCitjaGFyICoKK2RlcGFyc2VfZHJvcF9jb21tYW5kKGNv bnN0IGNoYXIgKm9iamlkZW50aXR5LCBjb25zdCBjaGFyICpvYmplY3R0eXBlLAorCQkJCQkgRHJv cEJlaGF2aW9yIGJlaGF2aW9yKQoreworCVN0cmluZ0luZm9EYXRhICBzdHI7CisJY2hhcgkJICAg KmNvbW1hbmQ7CisJY2hhcgkJICAgKmlkZW50aXR5ID0gKGNoYXIgKikgb2JqaWRlbnRpdHk7CisJ Y2hhcgkJICAgKmZtdDsKKwlPYmpUcmVlCQkqc3RtdCwgKnN0bXQyOworCUpzb25iCQkgICpqc29u YjsKKworCWluaXRTdHJpbmdJbmZvKCZzdHIpOworCisJZm10ID0gcHNwcmludGYoIkRST1AgJXMg SUYgRVhJU1RTICUle29iamlkZW50aXR5fXMiLCBvYmplY3R0eXBlKTsKKworCXN0bXQgPSBuZXdf b2JqdHJlZV9WQShmbXQsIDEsICJvYmppZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIGlkZW50aXR5 KTsKKwlzdG10MiA9IG5ld19vYmp0cmVlX1ZBKCJDQVNDQURFIiwgMSwKKwkJCQkJCSAgICJwcmVz ZW50IiwgT2JqVHlwZUJvb2wsIGJlaGF2aW9yID09IERST1BfQ0FTQ0FERSk7CisKKwlhcHBlbmRf b2JqZWN0X29iamVjdChzdG10LCAiJXtjYXNjYWRlfXMiLCBzdG10Mik7CisKKwlqc29uYiA9IG9i anRyZWVfdG9fanNvbmIoc3RtdCk7CisJY29tbWFuZCA9IEpzb25iVG9DU3RyaW5nKCZzdHIsICZq c29uYi0+cm9vdCwgSlNPTkJfRVNUSU1BVEVEX0xFTik7CisKKwlyZXR1cm4gY29tbWFuZDsKK30K KworLyoKKyAqIEhhbmRsZSBkZXBhcnNpbmcgc2V0dGluZyBvZiBGdW5jdGlvbgorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Z1bmN0aW9uU2V0KFZhcmlhYmxlU2V0S2luZCBraW5kLCBj aGFyICpuYW1lLCBjaGFyICp2YWx1ZSkKK3sKKwlPYmpUcmVlCSAgICpvYmo7CisKKwlpZiAoa2lu ZCA9PSBWQVJfUkVTRVRfQUxMKQorCXsKKwkJb2JqID0gbmV3X29ianRyZWUoIlJFU0VUIEFMTCIp OworCX0KKwllbHNlIGlmICh2YWx1ZSAhPSBOVUxMKQorCXsKKwkJb2JqID0gbmV3X29ianRyZWVf VkEoIlNFVCAle3NldF9uYW1lfUkiLCAxLAorCQkJCQkJICAgInNldF9uYW1lIiwgT2JqVHlwZVN0 cmluZywgbmFtZSk7CisKKwkJLyoKKwkJICogU29tZSBHVUMgdmFyaWFibGUgbmFtZXMgYXJlICdM SVNUJyB0eXBlIGFuZCBoZW5jZSBtdXN0IG5vdCBiZQorCQkgKiBxdW90ZWQuCisJCSAqLworCQlp ZiAoR2V0Q29uZmlnT3B0aW9uRmxhZ3MobmFtZSwgdHJ1ZSkgJiBHVUNfTElTVF9RVU9URSkKKwkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9iaiwgIlRPICV7c2V0X3ZhbHVlfXMiLCB2YWx1ZSk7CisJ CWVsc2UKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9iaiwgIlRPICV7c2V0X3ZhbHVlfUwiLCB2 YWx1ZSk7CisJfQorCWVsc2UKKwl7CisJCW9iaiA9IG5ld19vYmp0cmVlKCJSRVNFVCIpOworCQlh cHBlbmRfc3RyaW5nX29iamVjdChvYmosICIle3NldF9uYW1lfUkiLCBuYW1lKTsKKwl9CisKKwly ZXR1cm4gb2JqOworfQorCisvKgorICogRGVwYXJzZSBhbiBJbmRleFN0bXQuCisgKgorICogR2l2 ZW4gYW4gaW5kZXggT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJu IGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisg KiBJZiB0aGUgaW5kZXggY29ycmVzcG9uZHMgdG8gYSBjb25zdHJhaW50LCBOVUxMIGlzIHJldHVy bmVkLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0luZGV4U3RtdChPaWQgb2JqZWN0 SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlJbmRleFN0bXQgICpub2RlID0gKEluZGV4U3RtdCAq KSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqaW5kZXhTdG10OworCU9ialRyZWUJICAgKnRtcG9i ajsKKwlSZWxhdGlvbglpZHhyZWw7CisJUmVsYXRpb24JaGVhcHJlbDsKKwljaGFyCSAgICppbmRl eF9hbTsKKwljaGFyCSAgICpkZWZpbml0aW9uOworCWNoYXIJICAgKnJlbG9wdGlvbnM7CisJY2hh cgkgICAqdGFibGVzcGFjZTsKKwljaGFyCSAgICp3aGVyZUNsYXVzZTsKKworCWlmIChub2RlLT5w cmltYXJ5IHx8IG5vZGUtPmlzY29uc3RyYWludCkKKwl7CisJCS8qCisJCSAqIEluZGV4ZXMgZm9y IFBSSU1BUlkgS0VZIGFuZCBvdGhlciBjb25zdHJhaW50cyBhcmUgb3V0cHV0CisJCSAqIHNlcGFy YXRlbHk7IHJldHVybiBlbXB0eSBoZXJlLgorCQkgKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJ aWR4cmVsID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwloZWFw cmVsID0gcmVsYXRpb25fb3BlbihpZHhyZWwtPnJkX2luZGV4LT5pbmRyZWxpZCwgQWNjZXNzU2hh cmVMb2NrKTsKKworCXBnX2dldF9pbmRleGRlZl9kZXRhaWxlZChvYmplY3RJZCwKKwkJCQkJCQkg JmluZGV4X2FtLCAmZGVmaW5pdGlvbiwgJnJlbG9wdGlvbnMsCisJCQkJCQkJICZ0YWJsZXNwYWNl LCAmd2hlcmVDbGF1c2UpOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JF QVRFICV7dW5pcXVlfXMgSU5ERVggJXtjb25jdXJyZW50bHl9cyAle2lmX25vdF9leGlzdHN9cyAl e25hbWV9SSBPTgorCSAqICV7dGFibGV9RCBVU0lORyAle2luZGV4X2FtfXMgKCV7ZGVmaW5pdGlv bn1zKSAle3dpdGh9cyAle3RhYmxlc3BhY2V9cworCSAqICV7d2hlcmVfY2xhdXNlfXMKKwkgKi8K KwlpbmRleFN0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7CisKKwlhcHBlbmRfc3RyaW5nX29i amVjdChpbmRleFN0bXQsICIle3VuaXF1ZX1zIiwKKwkJCQkJCSBub2RlLT51bmlxdWUgPyAiVU5J UVVFIiA6ICIiKTsKKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGluZGV4U3RtdCwgIklOREVYIik7 CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChpbmRleFN0bXQsICIle2NvbmN1cnJlbnRseX1zIiwK KwkJCQkJCSBub2RlLT5jb25jdXJyZW50ID8gIkNPTkNVUlJFTlRMWSIgOiAiIik7CisKKwlhcHBl bmRfc3RyaW5nX29iamVjdChpbmRleFN0bXQsICIle2lmX25vdF9leGlzdHN9cyIsCisJCQkJCQkg bm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiKTsKKworCWFwcGVuZF9z dHJpbmdfb2JqZWN0KGluZGV4U3RtdCwgIiV7bmFtZX1JIiwKKwkJCQkJCSBSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShpZHhyZWwpKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGluZGV4U3RtdCwg Ik9OICV7dGFibGV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGhlYXByZWwt PnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGhl YXByZWwpKSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChpbmRleFN0bXQsICJVU0lORyAle2lu ZGV4X2FtfXMiLCBpbmRleF9hbSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChpbmRleFN0bXQs ICIoJXtkZWZpbml0aW9ufXMpIiwgZGVmaW5pdGlvbik7CisKKwkvKiByZWxvcHRpb25zICovCisJ dG1wb2JqID0gbmV3X29ianRyZWUoIldJVEgiKTsKKwlpZiAocmVsb3B0aW9ucykKKwkJYXBwZW5k X3N0cmluZ19vYmplY3QodG1wb2JqLCAiKCV7b3B0c31zKSIsIHJlbG9wdGlvbnMpOworCWVsc2UK KwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5k X29iamVjdF9vYmplY3QoaW5kZXhTdG10LCAiJXt3aXRofXMiLCB0bXBvYmopOworCisJLyogdGFi bGVzcGFjZSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJUQUJMRVNQQUNFIik7CisJaWYgKHRh Ymxlc3BhY2UpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7dGFibGVzcGFjZX1z IiwgdGFibGVzcGFjZSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJl c2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChpbmRleFN0bXQsICIle3RhYmxl c3BhY2V9cyIsIHRtcG9iaik7CisKKwkvKiBXSEVSRSBjbGF1c2UgKi8KKwl0bXBvYmogPSBuZXdf b2JqdHJlZSgiV0hFUkUiKTsKKwlpZiAod2hlcmVDbGF1c2UpCisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRtcG9iaiwgIiV7d2hlcmV9cyIsIHdoZXJlQ2xhdXNlKTsKKwllbHNlCisJCWFwcGVuZF9i b29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KGluZGV4U3RtdCwgIiV7d2hlcmVfY2xhdXNlfXMiLCB0bXBvYmopOworCisJdGFibGVfY2xv c2UoaWR4cmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCXRhYmxlX2Nsb3NlKGhlYXByZWwsIEFjY2Vz c1NoYXJlTG9jayk7CisKKwlyZXR1cm4gaW5kZXhTdG10OworfQorCisvKgorICogRGVwYXJzZSB0 aGUgSU5IRVJJVFMgcmVsYXRpb25zLgorICoKKyAqIEdpdmVuIGEgdGFibGUgT0lELCByZXR1cm4g YSBzY2hlbWEgcXVhbGlmaWVkIHRhYmxlIGxpc3QgcmVwcmVzZW50aW5nCisgKiB0aGUgcGFyZW50 IHRhYmxlcy4KKyAqLworc3RhdGljIExpc3QgKgorZGVwYXJzZV9JbmhSZWxhdGlvbnMoT2lkIG9i amVjdElkKQoreworCUxpc3QJICAgKnBhcmVudHMgPSBOSUw7CisJUmVsYXRpb24JaW5oUmVsOwor CVN5c1NjYW5EZXNjIHNjYW47CisJU2NhbktleURhdGEga2V5OworCUhlYXBUdXBsZQl0dXBsZTsK KworCWluaFJlbCA9IHRhYmxlX29wZW4oSW5oZXJpdHNSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVM b2NrKTsKKworCVNjYW5LZXlJbml0KCZrZXksCisJCQkJQW51bV9wZ19pbmhlcml0c19pbmhyZWxp ZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXRE YXR1bShvYmplY3RJZCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihpbmhSZWwsIElu aGVyaXRzUmVsaWRTZXFub0luZGV4SWQsCisJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAma2V5KTsK KworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlID0gc3lzdGFibGVfZ2V0bmV4dChzY2Fu KSkpCisJeworCQlPYmpUcmVlCSpwYXJlbnQ7CisJCUZvcm1fcGdfaW5oZXJpdHMgZm9ybUluaCA9 IChGb3JtX3BnX2luaGVyaXRzKSBHRVRTVFJVQ1QodHVwbGUpOworCisJCXBhcmVudCA9IG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCSBm b3JtSW5oLT5pbmhwYXJlbnQpOworCQlwYXJlbnRzID0gbGFwcGVuZChwYXJlbnRzLCBuZXdfb2Jq ZWN0X29iamVjdChwYXJlbnQpKTsKKwl9CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCXRh YmxlX2Nsb3NlKGluaFJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlyZXR1cm4gcGFyZW50czsK K30KKworLyoKKyAqIERlcGFyc2UgdGhlIE9OIENPTU1NSVQgLi4uIGNsYXVzZSBmb3IgQ1JFQVRF IC4uLiBURU1QT1JBUlkgLi4uCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfT25Db21t aXRDbGF1c2UoT25Db21taXRBY3Rpb24gb3B0aW9uKQoreworCU9ialRyZWUJICAgKm9uY29tbWl0 OworCisJb25jb21taXQgPSBuZXdfb2JqdHJlZSgiT04gQ09NTUlUIik7CisJc3dpdGNoIChvcHRp b24pCisJeworCQljYXNlIE9OQ09NTUlUX0RST1A6CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChv bmNvbW1pdCwgIiV7b25fY29tbWl0X3ZhbHVlfXMiLCAiRFJPUCIpOworCQkJYnJlYWs7CisKKwkJ Y2FzZSBPTkNPTU1JVF9ERUxFVEVfUk9XUzoKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9uY29t bWl0LCAiJXtvbl9jb21taXRfdmFsdWV9cyIsICJERUxFVEUgUk9XUyIpOworCQkJYnJlYWs7CisK KwkJY2FzZSBPTkNPTU1JVF9QUkVTRVJWRV9ST1dTOgorCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo b25jb21taXQsICIle29uX2NvbW1pdF92YWx1ZX1zIiwgIlBSRVNFUlZFIFJPV1MiKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgT05DT01NSVRfTk9PUDoKKwkJCWFwcGVuZF9udWxsX29iamVjdChvbmNv bW1pdCwgIiV7b25fY29tbWl0X3ZhbHVlfXMiKTsKKwkJCWFwcGVuZF9ib29sX29iamVjdChvbmNv bW1pdCwgInByZXNlbnQiLCBmYWxzZSk7CisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gb25jb21t aXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgUmVuYW1lU3RtdC4KKyAqLworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9SZW5hbWVTdG10KE9iamVjdEFkZHJlc3MgYWRkcmVzcywgTm9kZSAqcGFy c2V0cmVlKQoreworCVJlbmFtZVN0bXQgKm5vZGUgPSAoUmVuYW1lU3RtdCAqKSBwYXJzZXRyZWU7 CisJT2JqVHJlZQkgICAqcmVuYW1lU3RtdDsKKwljaGFyCSAgICpmbXRzdHI7CisJY29uc3QgY2hh ciAqb2JqdHlwZTsKKwlSZWxhdGlvbglyZWxhdGlvbjsKKwlPaWQJCQlzY2hlbWFJZDsKKworCS8q CisJICogSW4gYW4gQUxURVIgLi4gUkVOQU1FIGNvbW1hbmQsIHdlIGRvbid0IGhhdmUgdGhlIG9y aWdpbmFsIG5hbWUgb2YgdGhlCisJICogb2JqZWN0IGluIHN5c3RlbSBjYXRhbG9nczogc2luY2Ug d2UgaW5zcGVjdCB0aGVtIGFmdGVyIHRoZSBjb21tYW5kIGhhcworCSAqIGV4ZWN1dGVkLCB0aGUg b2xkIG5hbWUgaXMgYWxyZWFkeSBnb25lLiAgVGhlcmVmb3JlLCB3ZSBleHRyYWN0IGl0IGZyb20K KwkgKiB0aGUgcGFyc2Ugbm9kZS4gIE5vdGUgd2Ugc3RpbGwgZXh0cmFjdCB0aGUgc2NoZW1hIG5h bWUgZnJvbSB0aGUgY2F0YWxvZworCSAqIChpdCBtaWdodCBub3QgYmUgcHJlc2VudCBpbiB0aGUg cGFyc2Ugbm9kZSk7IGl0IGNhbm5vdCBwb3NzaWJseSBoYXZlCisJICogY2hhbmdlZCBhbnl3YXku CisJICovCisJc3dpdGNoIChub2RlLT5yZW5hbWVUeXBlKQorCXsKKwkJY2FzZSBPQkpFQ1RfVEFC TEU6CisJCWNhc2UgT0JKRUNUX0lOREVYOgorCQljYXNlIE9CSkVDVF9TRVFVRU5DRToKKworCQkJ LyoKKwkJCSAqIFZlcmJvc2Ugc3ludGF4CisJCQkgKgorCQkJICogQUxURVIgJXMgJXtpZl9leGlz dHN9cyAle2lkZW50aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JCisJCQkgKi8KKwkJCW9ianR5 cGUgPSBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZW5hbWVUeXBlKTsKKwkJCWZtdHN0ciA9IHBz cHJpbnRmKCJBTFRFUiAlcyIsIG9ianR5cGUpOworCQkJcmVsYXRpb24gPSByZWxhdGlvbl9vcGVu KGFkZHJlc3Mub2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQlzY2hlbWFJZCA9IFJlbGF0 aW9uR2V0TmFtZXNwYWNlKHJlbGF0aW9uKTsKKwkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9W QShmbXRzdHIsIDApOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwgIiV7aWZf ZXhpc3RzfXMiLAorCQkJCQkJCQkgbm9kZS0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIp OworCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmVuYW1lU3RtdCwgIiV7aWRlbnRpdHl9RCIsCisJ CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoc2NoZW1hSWQsCisJCQkJCQkJCQkJCQkJ CSAgbm9kZS0+cmVsYXRpb24tPnJlbG5hbWUpKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJl bmFtZVN0bXQsICJSRU5BTUUgVE8gJXtuZXduYW1lfUkiLAorCQkJCQkJCQkgbm9kZS0+bmV3bmFt ZSk7CisJCQlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgT0JKRUNUX0FUVFJJQlVURToKKwkJY2FzZSBPQkpFQ1RfQ09MVU1OOgor CQkJcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKGFkZHJlc3Mub2JqZWN0SWQsIEFjY2Vzc1NoYXJl TG9jayk7CisJCQlzY2hlbWFJZCA9IFJlbGF0aW9uR2V0TmFtZXNwYWNlKHJlbGF0aW9uKTsKKwor CQkJLyoKKwkJCSAqIFZlcmJvc2Ugc3ludGF4CisJCQkgKgorCQkJICogQ29tcG9zaXRlIHR5cGVz OiBBTFRFUiBvYmp0eXBlICV7aWRlbnRpdHl9RCBSRU5BTUUgQVRUUklCVVRFCisJCQkgKiAle2Nv bG5hbWV9SSBUTyAle25ld25hbWV9SSAle2Nhc2NhZGV9cworCQkJICoKKwkJCSAqIE5vcm1hbCB0 eXBlczogQUxURVIgb2JqdHlwZSAle2lmX2V4aXN0c31zICUle2lkZW50aXR5fUQgUkVOQU1FCisJ CQkgKiBDT0xVTU4gJXtjb2xuYW1lfUkgVE8gJXtuZXduYW1lfUkKKwkJCSAqLworCQkJb2JqdHlw ZSA9IHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUpOworCQkJZm10c3RyID0gcHNw cmludGYoIkFMVEVSICVzIiwgb2JqdHlwZSk7CisJCQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWUo Zm10c3RyKTsKKworCQkJLyogQ29tcG9zaXRlIHR5cGVzIGRvIG5vdCBzdXBwb3J0IElGIEVYSVNU UyAqLworCQkJaWYgKG5vZGUtPnJlbmFtZVR5cGUgPT0gT0JKRUNUX0NPTFVNTikKKwkJCQlhcHBl bmRfc3RyaW5nX29iamVjdChyZW5hbWVTdG10LCAiJXtpZl9leGlzdHN9cyIsCisJCQkJCQkJCQkg bm9kZS0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIpOworCisJCQlhcHBlbmRfb2JqZWN0 X29iamVjdChyZW5hbWVTdG10LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZShzY2hlbWFJZCwKKwkJCQkJCQkJCQkJCQkJICBub2RlLT5yZWxhdGlvbi0+ cmVsbmFtZSkpOworCisJCQlmbXRzdHIgPSBwc3ByaW50ZigiUkVOQU1FICVzICUle2NvbG5hbWV9 SSIsIG9ianR5cGUpOworCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZW5hbWVTdG10LCBmbXRz dHIsIG5vZGUtPnN1Ym5hbWUpOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwg IlRPICV7bmV3bmFtZX1JIiwgbm9kZS0+bmV3bmFtZSk7CisKKwkJCWlmIChub2RlLT5yZW5hbWVU eXBlID09IE9CSkVDVF9BVFRSSUJVVEUpCisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmVuYW1l U3RtdCwgIiV7Y2FzY2FkZX1zIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9WQSgiQ0FTQ0FERSIs IDEsCisJCQkJCQkJCQkJCQkJInByZXNlbnQiLCBPYmpUeXBlQm9vbCwKKwkJCQkJCQkJCQkJCQlu b2RlLT5iZWhhdmlvciA9PSBEUk9QX0NBU0NBREUpKTsKKworCQkJcmVsYXRpb25fY2xvc2UocmVs YXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9GVU5D VElPTjoKKwkJCXsKKwkJCQljaGFyCSppZGVudDsKKwkJCQlIZWFwVHVwbGUgcHJvY3R1cDsKKwkJ CQlGb3JtX3BnX3Byb2MgcHJvY2Zvcm07CisJCQkJTGlzdAkgICAqaWRlbnRpdHk7CisKKwkJCQlB c3NlcnQoSXNBKG5vZGUtPm9iamVjdCwgT2JqZWN0V2l0aEFyZ3MpKTsKKwkJCQlpZGVudGl0eSA9 ICgoT2JqZWN0V2l0aEFyZ3MgKikgbm9kZS0+b2JqZWN0KS0+b2JqbmFtZTsKKworCQkJCXByb2N0 dXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwKKwkJCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0 dW0oYWRkcmVzcy5vYmplY3RJZCkpOworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jdHVw KSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSAl dSIsCisJCQkJCQkgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJcHJvY2Zvcm0gPSAoRm9ybV9wZ19w cm9jKSBHRVRTVFJVQ1QocHJvY3R1cCk7CisKKwkJCQkvKiBYWFggZG9lcyB0aGlzIHdvcmsgZm9y IG9yZGVyZWQtc2V0IGFnZ3JlZ2F0ZXM/ICovCisJCQkJaWRlbnQgPSBwc3ByaW50ZigiJXMlcyIs CisJCQkJCQkJCSBxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihnZXRfbmFtZXNwYWNlX25hbWUo cHJvY2Zvcm0tPnByb25hbWVzcGFjZSksCisJCQkJCQkJCQkJCQkJCQlzdHJWYWwobGxhc3QoaWRl bnRpdHkpKSksCisJCQkJCQkJCSBmb3JtYXRfcHJvY2VkdXJlX2FyZ3MoYWRkcmVzcy5vYmplY3RJ ZCwgdHJ1ZSkpOworCisJCQkJZm10c3RyID0gcHNwcmludGYoIkFMVEVSICVzICUle2lkZW50aXR5 fXMgUkVOQU1FIFRPICUle25ld25hbWV9SSIsCisJCQkJCQkJCSAgc3RyaW5naWZ5X29ianR5cGUo bm9kZS0+cmVuYW1lVHlwZSkpOworCQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXRz dHIsIDIsCisJCQkJCQkJCQkJCSJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIGlkZW50LAorCQkJ CQkJCQkJCQkibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCisJCQkJ UmVsZWFzZVN5c0NhY2hlKHByb2N0dXApOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpF Q1RfT1BDTEFTUzoKKwkJCXsKKwkJCQlIZWFwVHVwbGUgICBvcGNUdXA7CisJCQkJRm9ybV9wZ19v cGNsYXNzIG9wY0Zvcm07CisJCQkJTGlzdAkgICAqb2xkbmFtZXM7CisJCQkJY2hhcgkgICAqc2No ZW1hbmFtZTsKKwkJCQljaGFyCSAgICpvcGNuYW1lOworCQkJCWNoYXIJICAgKmZtdDsKKworCQkJ CWZtdCA9IHBzcHJpbnRmKCJBTFRFUiAlcyAlJXtpZGVudGl0eX1EIFVTSU5HICUle2luZGV4X21l dGhvZH1zIFJFTkFNRSBUTyAlJXtuZXduYW1lfUkiLAorCQkJCQkJCSAgIHN0cmluZ2lmeV9vYmp0 eXBlKG5vZGUtPnJlbmFtZVR5cGUpKTsKKworCQkJCW9wY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShD TEFPSUQsIE9iamVjdElkR2V0RGF0dW0oYWRkcmVzcy5vYmplY3RJZCkpOworCQkJCWlmICghSGVh cFR1cGxlSXNWYWxpZChvcGNUdXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3Igb3BjbGFzcyB3aXRoIE9JRCAldSIsCisJCQkJCQkgYWRkcmVzcy5vYmplY3RJZCk7 CisKKwkJCQlvcGNGb3JtID0gKEZvcm1fcGdfb3BjbGFzcykgR0VUU1RSVUNUKG9wY1R1cCk7CisK KwkJCQlvbGRuYW1lcyA9IGxpc3RfY29weV90YWlsKChMaXN0ICopIG5vZGUtPm9iamVjdCwgMSk7 CisKKwkJCQkvKiBkZWNvbnN0cnVjdCB0aGUgbmFtZSBsaXN0ICovCisJCQkJRGVjb25zdHJ1Y3RR dWFsaWZpZWROYW1lKG9sZG5hbWVzLCAmc2NoZW1hbmFtZSwgJm9wY25hbWUpOworCisJCQkJcmVu YW1lU3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMywKKwkJCQkJCQkJCQkJImlkZW50aXR5Iiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wY0Zv cm0tPm9wY25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJCQkJIG9wY25hbWUpLAorCQkJCQkJCQkJ CQkiaW5kZXhfbWV0aG9kIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJZ2V0X2FtX25hbWUo b3BjRm9ybS0+b3BjbWV0aG9kKSwKKwkJCQkJCQkJCQkJIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5n LCBub2RlLT5uZXduYW1lKTsKKworCQkJCVJlbGVhc2VTeXNDYWNoZShvcGNUdXApOworCQkJfQor CQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfT1BGQU1JTFk6CisJCQl7CisJCQkJSGVhcFR1cGxl ICAgb3BmVHVwOworCQkJCUhlYXBUdXBsZSAgIGFtVHVwOworCQkJCUZvcm1fcGdfb3BmYW1pbHkg b3BmRm9ybTsKKwkJCQlGb3JtX3BnX2FtICBhbUZvcm07CisJCQkJTGlzdAkgICAqb2xkbmFtZXM7 CisJCQkJY2hhcgkgICAqc2NoZW1hbmFtZTsKKwkJCQljaGFyCSAgICpvcGZuYW1lOworCQkJCWNo YXIJICAgKmZtdDsKKworCQkJCWZtdCA9IHBzcHJpbnRmKCJBTFRFUiAlcyAlJXtpZGVudGl0eX1E IFVTSU5HICUle2luZGV4X21ldGhvZH1zIFJFTkFNRSBUTyAlJXtuZXduYW1lfUkiLAorCQkJCQkJ CSAgIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUpKTsKKworCQkJCW9wZlR1cCA9 IFNlYXJjaFN5c0NhY2hlMShPUEZBTUlMWU9JRCwgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKG9wZlR1cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkgd2l0aCBPSUQgJXUiLAorCQkJCQkJIGFkZHJl c3Mub2JqZWN0SWQpOworCQkJCW9wZkZvcm0gPSAoRm9ybV9wZ19vcGZhbWlseSkgR0VUU1RSVUNU KG9wZlR1cCk7CisKKwkJCQlhbVR1cCA9IFNlYXJjaFN5c0NhY2hlMShBTU9JRCwgT2JqZWN0SWRH ZXREYXR1bShvcGZGb3JtLT5vcGZtZXRob2QpKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo YW1UdXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgYWNjZXNz IG1ldGhvZCAldSIsCisJCQkJCQkgb3BmRm9ybS0+b3BmbWV0aG9kKTsKKworCQkJCWFtRm9ybSA9 IChGb3JtX3BnX2FtKSBHRVRTVFJVQ1QoYW1UdXApOworCisJCQkJb2xkbmFtZXMgPSBsaXN0X2Nv cHlfdGFpbCgoTGlzdCAqKSBub2RlLT5vYmplY3QsIDEpOworCisJCQkJLyogZGVjb25zdHJ1Y3Qg dGhlIG5hbWUgbGlzdCAqLworCQkJCURlY29uc3RydWN0UXVhbGlmaWVkTmFtZShvbGRuYW1lcywg JnNjaGVtYW5hbWUsICZvcGZuYW1lKTsKKworCQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9W QShmbXQsIDMsCisJCQkJCQkJCQkJCSJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJ CQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5vcGZuYW1lc3BhY2UsCisJCQkJ CQkJCQkJCQkJCQkJCSBvcGZuYW1lKSwKKwkJCQkJCQkJCQkJImluZGV4X21ldGhvZCIsIE9ialR5 cGVTdHJpbmcsCisJCQkJCQkJCQkJCU5hbWVTdHIoYW1Gb3JtLT5hbW5hbWUpLAorCQkJCQkJCQkJ CQkibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCisJCQkJUmVsZWFz ZVN5c0NhY2hlKGFtVHVwKTsKKwkJCQlSZWxlYXNlU3lzQ2FjaGUob3BmVHVwKTsKKwkJCX0KKwkJ CWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1NDSEVNQToKKwkJCXJlbmFtZVN0bXQgPQorCQkJCW5l d19vYmp0cmVlX1ZBKCJBTFRFUiBTQ0hFTUEgJXtpZGVudGl0eX1JIFJFTkFNRSBUTyAle25ld25h bWV9SSIsCisJCQkJCQkJICAgMSwKKwkJCQkJCQkgICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5n LCBub2RlLT5zdWJuYW1lLAorCQkJCQkJCSAgICJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9k ZS0+bmV3bmFtZSk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9UUklHR0VSOgorCQkJewor CQkJCUhlYXBUdXBsZQl0cmlnVHVwOworCQkJCUZvcm1fcGdfdHJpZ2dlciB0cmlnRm9ybTsKKwkJ CQlSZWxhdGlvbglwZ190cmlnZ2VyOworCisJCQkJcGdfdHJpZ2dlciA9IHJlbGF0aW9uX29wZW4o VHJpZ2dlclJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJdHJpZ1R1cCA9IGdldF9j YXRhbG9nX29iamVjdF9ieV9vaWQocGdfdHJpZ2dlciwgZ2V0X29iamVjdF9hdHRudW1fb2lkKGFk ZHJlc3MuY2xhc3NJZCksIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCXRyaWdGb3JtID0gKEZvcm1f cGdfdHJpZ2dlcikgR0VUU1RSVUNUKHRyaWdUdXApOworCisJCQkJcmVuYW1lU3RtdCA9IG5ld19v Ymp0cmVlX1ZBKCJBTFRFUiBUUklHR0VSICV7dHJpZ2dlcm5hbWV9SSBPTiAle2lkZW50aXR5fUQg UkVOQU1FIFRPICV7bmV3bmFtZX1JIiwKKwkJCQkJCQkJCQkJMywKKwkJCQkJCQkJCQkJInRyaWdn ZXJuYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+c3VibmFtZSwKKwkJCQkJCQkJCQkJImlkZW50 aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkJCXRyaWdGb3JtLT50Z3Jl bGlkKSwKKwkJCQkJCQkJCQkJIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1l KTsKKworCQkJCXJlbGF0aW9uX2Nsb3NlKHBnX3RyaWdnZXIsIEFjY2Vzc1NoYXJlTG9jayk7CisJ CQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVk IG9iamVjdCB0eXBlICVkIiwgbm9kZS0+cmVuYW1lVHlwZSk7CisJfQorCisJcmV0dXJuIHJlbmFt ZVN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBDQUNIRSBvcHRpb24uCisg Ki8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9DYWNoZShPYmpUcmVlICpw YXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlP YmpUcmVlCSAgICpjYWNoZTsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10OworCisJ dG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFjYWNoZSk7CisKKwlp ZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgQ0FDSEUgJXt2YWx1ZX1zIjsKKwllbHNlCisJ CWZtdCA9ICJDQUNIRSAle3ZhbHVlfXMiOworCisJY2FjaGUgPSBuZXdfb2JqdHJlZV9WQShmbXQs IDIsCisJCQkJCQkgICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY2FjaGUiLAorCQkJCQkJICAi dmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2Jq ZWN0KGNhY2hlKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIENZQ0xFIG9wdGlv bi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX0N5Y2xlKE9ialRy ZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQor eworCU9ialRyZWUJICAgKmN5Y2xlOworCWNoYXIJICAgKmZtdDsKKworCWlmIChhbHRlcl90YWJs ZSkKKwkJZm10ID0gIlNFVCAle25vfXMgQ1lDTEUiOworCWVsc2UKKwkJZm10ID0gIiV7bm99cyBD WUNMRSI7CisKKwljeWNsZSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAgICJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAiY3ljbGUiLAorCQkJCQkJICAgIm5vIiwgT2JqVHlwZVN0cmlu ZywKKwkJCQkJCSAgIHNlcWRhdGEtPnNlcWN5Y2xlID8gIiIgOiAiTk8iKTsKKwlyZXR1cm4gbmV3 X29iamVjdF9vYmplY3QoY3ljbGUpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2Ug SU5DUkVNRU5UIEJZIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFy c2VfU2VxX0luY3JlbWVudEJ5KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFk YXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUJICAgKmluY3JlbWVudGFsYnk7CisJ Y2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWlmIChhbHRlcl90YWJsZSkKKwkJ Zm10ID0gIlNFVCBJTkNSRU1FTlQgQlkgJXt2YWx1ZX1zIjsKKwllbHNlCisJCWZtdCA9ICJJTkNS RU1FTlQgQlkgJXt2YWx1ZX1zIjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwg c2VxZGF0YS0+c2VxaW5jcmVtZW50KTsKKwlpbmNyZW1lbnRhbGJ5ID0gbmV3X29ianRyZWVfVkEo Zm10LCAyLAorCQkJCQkJCQkgICAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInNlcWluY3JlbWVu dCIsCisJCQkJCQkJCSAgICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisJcmV0dXJu IG5ld19vYmplY3Rfb2JqZWN0KGluY3JlbWVudGFsYnkpOworfQorCisvKgorICogRGVwYXJzZSB0 aGUgc2VxdWVuY2UgTUFYVkFMVUUgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0g KgorZGVwYXJzZV9TZXFfTWF4dmFsdWUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNl IHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZQkgICAqbWF4dmFsdWU7CisJ Y2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWlmIChhbHRlcl90YWJsZSkKKwkJ Zm10ID0gIlNFVCBNQVhWQUxVRSAle3ZhbHVlfXMiOworCWVsc2UKKwkJZm10ID0gIk1BWFZBTFVF ICV7dmFsdWV9cyI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEt PnNlcW1heCk7CisJbWF4dmFsdWUgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkJICAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm1heHZhbHVlIiwKKwkJCQkJCQkgICJ2YWx1ZSIsIE9i alR5cGVTdHJpbmcsIHRtcHN0cik7CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KG1heHZhbHVl KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIE1JTlZBTFVFIG9wdGlvbi4KKyAq Lworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX01pbnZhbHVlKE9ialRyZWUg KnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQorewor CU9ialRyZWUJICAgKm1pbnZhbHVlOworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7 CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgTUlOVkFMVUUgJXt2YWx1ZX1zIjsK KwllbHNlCisJCWZtdCA9ICJNSU5WQUxVRSAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNwcmlu dGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFtaW4pOworCW1pbnZhbHVlID0gbmV3X29ianRy ZWVfVkEoZm10LCAyLAorCQkJCQkJCSAgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJtaW52YWx1 ZSIsCisJCQkJCQkJICAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCXJldHVybiBu ZXdfb2JqZWN0X29iamVjdChtaW52YWx1ZSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1 ZW5jZSBPV05FRCBCWSBjb21tYW5kLgorICovCitzdGF0aWMgT2JqRWxlbSAqCitkZXBhcnNlX1Nl cV9Pd25lZEJ5KE9ialRyZWUgKnBhcmVudCwgT2lkIHNlcXVlbmNlSWQsIGJvb2wgYWx0ZXJfdGFi bGUpCit7CisJT2JqVHJlZQkgICAqb3duZWRieSA9IE5VTEw7CisJUmVsYXRpb24JZGVwUmVsOwor CVN5c1NjYW5EZXNjIHNjYW47CisJU2NhbktleURhdGEga2V5c1szXTsKKwlIZWFwVHVwbGUgICB0 dXBsZTsKKworCWRlcFJlbCA9IHRhYmxlX29wZW4oRGVwZW5kUmVsYXRpb25JZCwgQWNjZXNzU2hh cmVMb2NrKTsKKwlTY2FuS2V5SW5pdCgma2V5c1swXSwKKwkJCQlBbnVtX3BnX2RlcGVuZF9jbGFz c2lkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdl dERhdHVtKFJlbGF0aW9uUmVsYXRpb25JZCkpOworCVNjYW5LZXlJbml0KCZrZXlzWzFdLAorCQkJ CUFudW1fcGdfZGVwZW5kX29iamlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURF USwKKwkJCQlPYmplY3RJZEdldERhdHVtKHNlcXVlbmNlSWQpKTsKKwlTY2FuS2V5SW5pdCgma2V5 c1syXSwKKwkJCQlBbnVtX3BnX2RlcGVuZF9vYmpzdWJpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lO dW1iZXIsIEZfSU5UNEVRLAorCQkJCUludDMyR2V0RGF0dW0oMCkpOworCisJc2NhbiA9IHN5c3Rh YmxlX2JlZ2luc2NhbihkZXBSZWwsIERlcGVuZERlcGVuZGVySW5kZXhJZCwgdHJ1ZSwKKwkJCQkJ CQkgIE5VTEwsIDMsIGtleXMpOworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlID0gc3lz dGFibGVfZ2V0bmV4dChzY2FuKSkpCisJeworCQlPaWQJCSBvd25lcklkOworCQlGb3JtX3BnX2Rl cGVuZCBkZXBmb3JtOworCQlPYmpUcmVlCSp0bXBvYmo7CisJCWNoYXIJICAgKmNvbG5hbWU7CisK KwkJZGVwZm9ybSA9IChGb3JtX3BnX2RlcGVuZCkgR0VUU1RSVUNUKHR1cGxlKTsKKworCQkvKiBP bmx5IGNvbnNpZGVyIEFVVE8gZGVwZW5kZW5jaWVzIG9uIHBnX2NsYXNzICovCisJCWlmIChkZXBm b3JtLT5kZXB0eXBlICE9IERFUEVOREVOQ1lfQVVUTykKKwkJCWNvbnRpbnVlOworCQlpZiAoZGVw Zm9ybS0+cmVmY2xhc3NpZCAhPSBSZWxhdGlvblJlbGF0aW9uSWQpCisJCQljb250aW51ZTsKKwkJ aWYgKGRlcGZvcm0tPnJlZm9ianN1YmlkIDw9IDApCisJCQljb250aW51ZTsKKworCQlvd25lcklk ID0gZGVwZm9ybS0+cmVmb2JqaWQ7CisJCWNvbG5hbWUgPSBnZXRfYXR0bmFtZShvd25lcklkLCBk ZXBmb3JtLT5yZWZvYmpzdWJpZCwgZmFsc2UpOworCQlpZiAoY29sbmFtZSA9PSBOVUxMKQorCQkJ Y29udGludWU7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0 aW9uUmVsYXRpb25JZCwgb3duZXJJZCk7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwg ImF0dHJuYW1lIiwgY29sbmFtZSk7CisJCW93bmVkYnkgPSBuZXdfb2JqdHJlZV9WQSgiT1dORUQg QlkgJXtvd25lcn1EIiwKKwkJCQkJCQkJIDIsCisJCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgIm93bmVkIiwKKwkJCQkJCQkJICJvd25lciIsIE9ialR5cGVPYmplY3QsIHRtcG9iaik7 CisJfQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwlyZWxhdGlvbl9jbG9zZShkZXBSZWws IEFjY2Vzc1NoYXJlTG9jayk7CisKKwkvKgorCSAqIElmIHRoZXJlJ3Mgbm8gb3duZXIgY29sdW1u LCBlbWl0IGFuIGVtcHR5IE9XTkVEIEJZIGVsZW1lbnQsIHNldCB1cCBzbworCSAqIHRoYXQgaXQg d29uJ3QgcHJpbnQgYW55dGhpbmcuCisJICovCisJaWYgKCFvd25lZGJ5KQorCQkvKiBYWFggdGhp cyBzaG91bGRuJ3QgaGFwcGVuIC4uLiAqLworCQlvd25lZGJ5ID0gbmV3X29ianRyZWVfVkEoIk9X TkVEIEJZICV7b3duZXJ9RCIsCisJCQkJCQkJCSAzLAorCQkJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJvd25lZCIsCisJCQkJCQkJCSAib3duZXIiLCBPYmpUeXBlTnVsbCwKKwkJCQkJ CQkJICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsIGZhbHNlKTsKKworCXJldHVybiBuZXdfb2JqZWN0 X29iamVjdChvd25lZGJ5KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIFJFU1RB UlQgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfUmVz dGFydChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhKQorewor CU9ialRyZWUJICAgKnJlc3RhcnQ7CisJY2hhcgkgICAqdG1wc3RyOworCisJdG1wc3RyID0gcHNw cmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5sYXN0X3ZhbHVlKTsKKwlyZXN0YXJ0ID0gbmV3 X29ianRyZWVfVkEoIlJFU1RBUlQgJXt2YWx1ZX1zIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJyZXN0YXJ0IiwKKwkJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywg dG1wc3RyKTsKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmVzdGFydCk7Cit9CisKKy8qCisg KiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBTVEFSVCBXSVRIIG9wdGlvbi4KKyAqLworc3RhdGljIGlu bGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX1N0YXJ0d2l0aChPYmpUcmVlICpwYXJlbnQsIEZv cm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlCSAg ICpzdGFydHdpdGg7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWlmIChh bHRlcl90YWJsZSkKKwkJZm10ID0gIlNFVCBTVEFSVCBXSVRIICV7dmFsdWV9cyI7CisJZWxzZQor CQlmbXQgPSAiU1RBUlQgV0lUSCAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNwcmludGYoSU5U NjRfRk9STUFULCBzZXFkYXRhLT5zZXFzdGFydCk7CisJc3RhcnR3aXRoID0gbmV3X29ianRyZWVf VkEoZm10LCAyLAorCQkJCQkJCSAgICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3RhcnQiLAor CQkJCQkJCSAgICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisJcmV0dXJuIG5ld19v YmplY3Rfb2JqZWN0KHN0YXJ0d2l0aCk7Cit9CisKKy8qCisgKiBIYW5kbGUgZGVwYXJzaW5nIG9m IHNpbXBsZSBjb21tYW5kcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBjb3ZlciBhbGwg Y2FzZXMgaGFuZGxlZCBpbiBQcm9jZXNzVXRpbGl0eVNsb3cuCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK2RlcGFyc2Vfc2ltcGxlX2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9p ZAkJCW9iamVjdElkOworCU5vZGUJICAgKnBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpjb21tYW5k OworCisJQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1RfU2ltcGxlKTsKKworCXBhcnNldHJlZSA9IGNt ZC0+cGFyc2V0cmVlOworCW9iamVjdElkID0gY21kLT5kLnNpbXBsZS5hZGRyZXNzLm9iamVjdElk OworCisJLyogVGhpcyBzd2l0Y2ggbmVlZHMgdG8gaGFuZGxlIGV2ZXJ5dGhpbmcgdGhhdCBQcm9j ZXNzVXRpbGl0eVNsb3cgZG9lcyAqLworCXN3aXRjaCAobm9kZVRhZyhwYXJzZXRyZWUpKQorCXsK KwkJY2FzZSBUX0NyZWF0ZVNjaGVtYVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVT Y2hlbWFTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0Ny ZWF0ZVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVTdG10KG9iamVjdElkLCBwYXJz ZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZVRyaWdTdG10OgorCQkJY29tbWFu ZCA9IGRlcGFyc2VfQ3JlYXRlVHJpZ1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVh azsKKworCQljYXNlIFRfQ3JlYXRlU2VxU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0 ZVNlcVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0 ZXJTZXFTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJTZXFTdG10KG9iamVjdElkLCBw YXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0RlZmluZVN0bXQ6CisJCQljb21tYW5k ID0gZGVwYXJzZV9EZWZpbmVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUsCisJCQkJCQkJCQkJIGNt ZC0+ZC5zaW1wbGUuc2Vjb25kYXJ5T2JqZWN0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVh dGVEb21haW5TdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlRG9tYWluKG9iamVjdElk LCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZU9wRmFtaWx5U3RtdDoK KwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZU9wRmFtaWx5KG9iamVjdElkLCBwYXJzZXRyZWUp OworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0luZGV4U3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNl X0luZGV4U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9D cmVhdGVGdW5jdGlvblN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVGdW5jdGlvbihv YmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlckZ1bmN0aW9u U3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyRnVuY3Rpb24ob2JqZWN0SWQsIHBhcnNl dHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfUmVuYW1lU3RtdDoKKwkJCWNvbW1hbmQgPSBk ZXBhcnNlX1JlbmFtZVN0bXQoY21kLT5kLnNpbXBsZS5hZGRyZXNzLCBwYXJzZXRyZWUpOworCQkJ YnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyT2JqZWN0U2NoZW1hU3RtdDoKKwkJCWNvbW1hbmQgPSBk ZXBhcnNlX0FsdGVyT2JqZWN0U2NoZW1hU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsCisJCQkJ CQkJCQkJCQkJcGFyc2V0cmVlLAorCQkJCQkJCQkJCQkJCWNtZC0+ZC5zaW1wbGUuc2Vjb25kYXJ5 T2JqZWN0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlck93bmVyU3RtdDoKKwkJCWNvbW1h bmQgPSBkZXBhcnNlX0FsdGVyT3duZXJTdG10KGNtZC0+ZC5zaW1wbGUuYWRkcmVzcywgcGFyc2V0 cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlck9wZXJhdG9yU3RtdDoKKwkJCWNvbW1h bmQgPSBkZXBhcnNlX0FsdGVyT3BlcmF0b3JTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJ YnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZUNhc3RTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2Vf Q3JlYXRlQ2FzdFN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQlkZWZh dWx0OgorCQkJY29tbWFuZCA9IE5VTEw7CisJCQllbG9nKExPRywgInVucmVjb2duaXplZCBub2Rl IHR5cGUgaW4gZGVwYXJzZSBjb21tYW5kOiAlZCIsCisJCQkJIChpbnQpIG5vZGVUYWcocGFyc2V0 cmVlKSk7CisJfQorCisJcmV0dXJuIGNvbW1hbmQ7Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZv ciBDUkVBVEUgVEFCTEUgZGVwYXJzaW5nLgorICoKKyAqIERlYWwgd2l0aCBhbGwgdGhlIHRhYmxl IGVsZW1lbnRzIChjb2x1bW5zIGFuZCBjb25zdHJhaW50cykuCisgKgorICogTm90ZSB3ZSBpZ25v cmUgY29uc3RyYWludHMgaW4gdGhlIHBhcnNlIG5vZGUgaGVyZTsgdGhleSBhcmUgZXh0cmFjdGVk IGZyb20KKyAqIHN5c3RlbSBjYXRhbG9ncyBpbnN0ZWFkLgorICovCitzdGF0aWMgTGlzdCAqCitk ZXBhcnNlX1RhYmxlRWxlbWVudHMoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKnRhYmxlRWxlbWVu dHMsIExpc3QgKmRwY29udGV4dCwKKwkJCQkJICBib29sIHR5cGVkLCBib29sIGNvbXBvc2l0ZSkK K3sKKwlMaXN0CSAgICplbGVtZW50cyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpsYzsKKworCWZvcmVh Y2gobGMsIHRhYmxlRWxlbWVudHMpCisJeworCQlOb2RlCSAgICplbHQgPSAoTm9kZSAqKSBsZmly c3QobGMpOworCisJCXN3aXRjaCAobm9kZVRhZyhlbHQpKQorCQl7CisJCQljYXNlIFRfQ29sdW1u RGVmOgorCQkJCXsKKwkJCQkJT2JqVHJlZQkgICAqdHJlZTsKKworCQkJCQl0cmVlID0gdHlwZWQg PworCQkJCQkJZGVwYXJzZV9Db2x1bW5EZWZfdHlwZWQocmVsYXRpb24sIGRwY29udGV4dCwKKwkJ CQkJCQkJCQkJCShDb2x1bW5EZWYgKikgZWx0KSA6CisJCQkJCQlkZXBhcnNlX0NvbHVtbkRlZihy ZWxhdGlvbiwgZHBjb250ZXh0LAorCQkJCQkJCQkJCQkgIGNvbXBvc2l0ZSwgKENvbHVtbkRlZiAq KSBlbHQsCisJCQkJCQkJCQkJCSAgZmFsc2UsIE5VTEwpOworCQkJCQlpZiAodHJlZSAhPSBOVUxM KQorCQkJCQl7CisJCQkJCQlPYmpFbGVtCSpjb2x1bW47CisKKwkJCQkJCWNvbHVtbiA9IG5ld19v YmplY3Rfb2JqZWN0KHRyZWUpOworCQkJCQkJZWxlbWVudHMgPSBsYXBwZW5kKGVsZW1lbnRzLCBj b2x1bW4pOworCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBUX0NvbnN0cmFpbnQ6 CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2coRVJST1IsICJpbnZhbGlkIG5vZGUg dHlwZSAlZCIsIG5vZGVUYWcoZWx0KSk7CisJCX0KKwl9CisKKwlyZXR1cm4gZWxlbWVudHM7Cit9 CisKKy8qCisgKiBXb3JraG9yc2UgdG8gZGVwYXJzZSBhIENvbGxlY3RlZENvbW1hbmQuCisgKi8K K2NoYXIgKgorZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kLCBi b29sIHZlcmJvc2VfbW9kZSkKK3sKKwlPdmVycmlkZVNlYXJjaFBhdGggKm92ZXJyaWRlUGF0aDsK KwlNZW1vcnlDb250ZXh0CW9sZGN4dDsKKwlNZW1vcnlDb250ZXh0CXRtcGN4dDsKKwlPYmpUcmVl CQkgICAqdHJlZTsKKwljaGFyCQkgICAqY29tbWFuZDsKKwlTdHJpbmdJbmZvRGF0YSAgc3RyOwor CisJLyoKKwkgKiBBbGxvY2F0ZSBldmVyeXRoaW5nIGRvbmUgYnkgdGhlIGRlcGFyc2luZyByb3V0 aW5lcyBpbnRvIGEgdGVtcCBjb250ZXh0LAorCSAqIHRvIGF2b2lkIGhhdmluZyB0byBzcHJpbmts ZSB0aGVtIHdpdGggbWVtb3J5IGhhbmRsaW5nIGNvZGU7IGJ1dCBhbGxvY2F0ZQorCSAqIHRoZSBv dXRwdXQgU3RyaW5nSW5mbyBiZWZvcmUgc3dpdGNoaW5nLgorCSAqLworCWluaXRTdHJpbmdJbmZv KCZzdHIpOworCXRtcGN4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29u dGV4dCwKKwkJCQkJCQkJICAgImRlcGFyc2UgY3R4IiwKKwkJCQkJCQkJICAgQUxMT0NTRVRfREVG QVVMVF9NSU5TSVpFLAorCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX0lOSVRTSVpFLAorCQkJ CQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX01BWFNJWkUpOworCW9sZGN4dCA9IE1lbW9yeUNvbnRl eHRTd2l0Y2hUbyh0bXBjeHQpOworCisJLyoKKwkgKiBNYW55IHJvdXRpbmVzIHVuZGVybHlpbmcg dGhpcyBvbmUgd2lsbCBpbnZva2UgcnVsZXV0aWxzLmMgZnVuY3Rpb25hbGl0eQorCSAqIGluIG9y ZGVyIHRvIG9idGFpbiBkZXBhcnNlZCB2ZXJzaW9ucyBvZiBleHByZXNzaW9ucy4gIEluIHN1Y2gg cmVzdWx0cywKKwkgKiB3ZSB3YW50IGFsbCBvYmplY3QgbmFtZXMgdG8gYmUgcXVhbGlmaWVkLCBz byB0aGF0IHJlc3VsdHMgYXJlICJwb3J0YWJsZSIKKwkgKiB0byBlbnZpcm9ubWVudHMgd2l0aCBk aWZmZXJlbnQgc2VhcmNoX3BhdGggc2V0dGluZ3MuICBSYXRoZXIgdGhhbiBpbmplY3QKKwkgKiB3 aGF0IHdvdWxkIGJlIHJlcGV0aXRpdmUgY2FsbHMgdG8gb3ZlcnJpZGUgc2VhcmNoIHBhdGggYWxs IG92ZXIgdGhlCisJICogcGxhY2UsIHdlIGRvIGl0IGNlbnRyYWxseSBoZXJlLgorCSAqLworCW92 ZXJyaWRlUGF0aCA9IEdldE92ZXJyaWRlU2VhcmNoUGF0aChDdXJyZW50TWVtb3J5Q29udGV4dCk7 CisJb3ZlcnJpZGVQYXRoLT5zY2hlbWFzID0gTklMOworCW92ZXJyaWRlUGF0aC0+YWRkQ2F0YWxv ZyA9IGZhbHNlOworCW92ZXJyaWRlUGF0aC0+YWRkVGVtcCA9IHRydWU7CisJUHVzaE92ZXJyaWRl U2VhcmNoUGF0aChvdmVycmlkZVBhdGgpOworCisJdmVyYm9zZSA9IHZlcmJvc2VfbW9kZTsKKwor CXN3aXRjaCAoY21kLT50eXBlKQorCXsKKwkJY2FzZSBTQ1RfU2ltcGxlOgorCQkJdHJlZSA9IGRl cGFyc2Vfc2ltcGxlX2NvbW1hbmQoY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9BbHRlclRh YmxlOgorCQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJUYWJsZVN0bXQoY21kKTsKKwkJCWJyZWFrOwor CQljYXNlIFNDVF9BbHRlck9wRmFtaWx5OgorCQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJPcEZhbWls eShjbWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0NyZWF0ZU9wQ2xhc3M6CisJCQl0cmVlID0g ZGVwYXJzZV9DcmVhdGVPcENsYXNzU3RtdChjbWQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJ CQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBkZXBhcnNlIG5vZGUgdHlwZSAlZCIsIGNtZC0+dHlw ZSk7CisJfQorCisJUG9wT3ZlcnJpZGVTZWFyY2hQYXRoKCk7CisKKwlpZiAodHJlZSkKKwl7CisJ CUpzb25iICpqc29uYjsKKworCQlqc29uYiA9IG9ianRyZWVfdG9fanNvbmIodHJlZSk7CisJCWNv bW1hbmQgPSBKc29uYlRvQ1N0cmluZygmc3RyLCAmanNvbmItPnJvb3QsIEpTT05CX0VTVElNQVRF RF9MRU4pOworCX0KKwllbHNlCisJCWNvbW1hbmQgPSBOVUxMOworCisJLyoKKwkgKiBDbGVhbiB1 cC4gIE5vdGUgdGhhdCBzaW5jZSB3ZSBjcmVhdGVkIHRoZSBTdHJpbmdJbmZvIGluIHRoZSBjYWxs ZXIncworCSAqIGNvbnRleHQsIHRoZSBvdXRwdXQgc3RyaW5nIGlzIG5vdCBkZWxldGVkIGhlcmUu CisJICovCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisJTWVtb3J5Q29udGV4dERl bGV0ZSh0bXBjeHQpOworCisJcmV0dXJuIGNvbW1hbmQ7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9kZGxfanNvbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24u YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODJlYjA1Ci0tLSAvZGV2L251 bGwKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24uYwpAQCAtMCwwICsxLDc2MyBA QAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRsX2pzb24uYworICoJICBKU09OIGNvZGUg cmVsYXRlZCB0byBEREwgY29tbWFuZCBkZXBhcnNpbmcKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmln aHQgKGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAq IFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBv ZiBDYWxpZm9ybmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvY29t bWFuZHMvZGRsX2pzb24uYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAi cG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImxpYi9zdHJpbmdpbmZvLmgiCisjaW5jbHVkZSAidXRp bHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9qc29uYi5oIgorCisKKy8qCisgKiBDb252 ZXJzaW9uIHNwZWNpZmllciwgaXQgZGV0ZXJtaW5lcyBob3cgd2UgZXhwYW5kIHRoZSBqc29uIGVs ZW1lbnQgaW50bworICogc3RyaW5nLgorICovCit0eXBlZGVmIGVudW0KK3sKKwlTcGVjVHlwZW5h bWUsCisJU3BlY09wZXJhdG9ybmFtZSwKKwlTcGVjRG90dGVkTmFtZSwKKwlTcGVjU3RyaW5nLAor CVNwZWNOdW1iZXIsCisJU3BlY1N0cmluZ0xpdGVyYWwsCisJU3BlY0lkZW50aWZpZXIsCisJU3Bl Y1JvbGUKK30gY29udlNwZWNpZmllcjsKKworLyoKKyAqIEEgdGVybmFyeSB2YWx1ZSB3aGljaCBy ZXByZXNlbnRzIGEgYm9vbGVhbiB0eXBlIEpzb25iVmFsdWUuCisgKi8KK3R5cGVkZWYgZW51bQor eworCXR2X2Fic2VudCwKKwl0dl90cnVlLAorCXR2X2ZhbHNlCit9IGpzb25fdHJpdmFsdWU7CisK K3N0YXRpYyBib29sIGV4cGFuZF9vbmVfanNvbmJfZWxlbWVudChTdHJpbmdJbmZvIGJ1ZiwgY2hh ciAqcGFyYW0sCisJCQkJCQkgSnNvbmJWYWx1ZSAqanNvbnZhbCwgY29udlNwZWNpZmllciBzcGVj aWZpZXIsCisJCQkJCQkgY29uc3QgY2hhciAqZm10KTsKK3N0YXRpYyB2b2lkIGV4cGFuZF9qc29u Yl9hcnJheShTdHJpbmdJbmZvIGJ1ZiwgY2hhciAqcGFyYW0sCisJCQkJICAgSnNvbmJWYWx1ZSAq anNvbmFyciwgY2hhciAqYXJyYXlzZXAsCisJCQkJICAgY29udlNwZWNpZmllciBzcGVjaWZpZXIs IGNvbnN0IGNoYXIgKmZtdCk7CitzdGF0aWMgdm9pZCBmbXRzdHJfZXJyb3JfY2FsbGJhY2sodm9p ZCAqYXJnKTsKK2NoYXIgKmRkbF9kZXBhcnNlX2pzb25fdG9fc3RyaW5nKGNoYXIgKmpzb25iKTsK KworLyoKKyAqIEdpdmVuIGEgSnNvbmJDb250YWluZXIsIGZpbmQgdGhlIEpzb25iVmFsdWUgd2l0 aCB0aGUgZ2l2ZW4ga2V5IG5hbWUgaW4gaXQuCisgKiBJZiBpdCdzIG9mIGEgdHlwZSBvdGhlciB0 aGFuIGpidkJvb2wsIGFuIGVycm9yIGlzIHJhaXNlZC4gSWYgaXQgZG9lc24ndAorICogZXhpc3Qs IHR2X2Fic2VudCBpcyByZXR1cm5lZDsgb3RoZXJ3aXNlIHJldHVybiB0aGUgYWN0dWFsIGpzb25f dHJpdmFsdWUuCisgKi8KK3N0YXRpYyBqc29uX3RyaXZhbHVlCitmaW5kX2Jvb2xfaW5fanNvbmJj b250YWluZXIoSnNvbmJDb250YWluZXIgKmNvbnRhaW5lciwgY2hhciAqa2V5bmFtZSkKK3sKKwlK c29uYlZhbHVlCWtleTsKKwlKc29uYlZhbHVlICp2YWx1ZTsKKwlqc29uX3RyaXZhbHVlCXJlc3Vs dDsKKworCWtleS50eXBlID0gamJ2U3RyaW5nOworCWtleS52YWwuc3RyaW5nLnZhbCA9IGtleW5h bWU7CisJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKGtleW5hbWUpOworCXZhbHVlID0gZmlu ZEpzb25iVmFsdWVGcm9tQ29udGFpbmVyKGNvbnRhaW5lciwKKwkJCQkJCQkJCQlKQl9GT0JKRUNU LCAma2V5KTsKKwlpZiAodmFsdWUgPT0gTlVMTCkKKwkJcmV0dXJuIHR2X2Fic2VudDsKKwlpZiAo dmFsdWUtPnR5cGUgIT0gamJ2Qm9vbCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShF UlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJlbGVtZW50IFwi JXNcIiBpcyBub3Qgb2YgdHlwZSBib29sZWFuIiwKKwkJCQkJCWtleW5hbWUpKSk7CisJcmVzdWx0 ID0gdmFsdWUtPnZhbC5ib29sZWFuID8gdHZfdHJ1ZSA6IHR2X2ZhbHNlOworCXBmcmVlKHZhbHVl KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBHaXZlbiBhIEpzb25iQ29udGFpbmVy LCBmaW5kIHRoZSBKc29uYlZhbHVlIHdpdGggdGhlIGdpdmVuIGtleSBuYW1lIGluIGl0LgorICog SWYgaXQncyBvZiBhIHR5cGUgb3RoZXIgdGhhbiBqYnZTdHJpbmcsIGFuIGVycm9yIGlzIHJhaXNl ZC4gIElmIGl0IGRvZXNuJ3QKKyAqIGV4aXN0LCBhbiBlcnJvciBpcyByYWlzZWQgdW5sZXNzIG1p c3Npbmdfb2s7IG90aGVyd2lzZSByZXR1cm4gTlVMTC4KKyAqCisgKiBJZiBpdCBleGlzdHMgYW5k IGlzIGEgc3RyaW5nLCBhIGZyZXNobHkgcGFsbG9jJ2VkIGNvcHkgaXMgcmV0dXJuZWQuCisgKgor ICogSWYgKmxlbmd0aCBpcyBub3QgTlVMTCwgaXQgaXMgc2V0IHRvIHRoZSBsZW5ndGggb2YgdGhl IHN0cmluZy4KKyAqLworc3RhdGljIGNoYXIgKgorZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWlu ZXIoSnNvbmJDb250YWluZXIgKmNvbnRhaW5lciwgY2hhciAqa2V5bmFtZSwKKwkJCQkJCQkgIGJv b2wgbWlzc2luZ19vaywgaW50ICpsZW5ndGgpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNvbmJW YWx1ZSAqdmFsdWU7CisJY2hhcgkgICAqc3RyOworCisJLyogWFhYIHZlcmlmeSB0aGF0IHRoaXMg aXMgYW4gb2JqZWN0LCBub3QgYW4gYXJyYXkgKi8KKworCWtleS50eXBlID0gamJ2U3RyaW5nOwor CWtleS52YWwuc3RyaW5nLnZhbCA9IGtleW5hbWU7CisJa2V5LnZhbC5zdHJpbmcubGVuID0gc3Ry bGVuKGtleW5hbWUpOworCXZhbHVlID0gZmluZEpzb25iVmFsdWVGcm9tQ29udGFpbmVyKGNvbnRh aW5lciwKKwkJCQkJCQkJCQlKQl9GT0JKRUNULCAma2V5KTsKKwlpZiAodmFsdWUgPT0gTlVMTCkK Kwl7CisJCWlmIChtaXNzaW5nX29rKQorCQkJcmV0dXJuIE5VTEw7CisJCWVyZXBvcnQoRVJST1Is CisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVy cm1zZygibWlzc2luZyBlbGVtZW50IFwiJXNcIiBpbiBqc29uIG9iamVjdCIsIGtleW5hbWUpKSk7 CisJfQorCisJc3RyID0gcG5zdHJkdXAodmFsdWUtPnZhbC5zdHJpbmcudmFsLCB2YWx1ZS0+dmFs LnN0cmluZy5sZW4pOworCWlmIChsZW5ndGgpCisJCSpsZW5ndGggPSB2YWx1ZS0+dmFsLnN0cmlu Zy5sZW47CisJcGZyZWUodmFsdWUpOworCXJldHVybiBzdHI7Cit9CisKKyNkZWZpbmUgQURWQU5D RV9QQVJTRV9QT0lOVEVSKHB0cixlbmRfcHRyKSBcCisJZG8geyBcCisJCWlmICgrKyhwdHIpID49 IChlbmRfcHRyKSkgXAorCQkJZXJlcG9ydChFUlJPUiwgXAorCQkJCQkoZXJyY29kZShFUlJDT0RF X0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwgXAorCQkJCQkgZXJybXNnKCJ1bnRlcm1pbmF0ZWQg Zm9ybWF0IHNwZWNpZmllciIpKSk7IFwKKwl9IHdoaWxlICgwKQorCisvKgorICogUmVjdXJzaXZl IGhlbHBlciBmb3IgcGdfZXZlbnRfdHJpZ2dlcl9leHBhbmRfY29tbWFuZAorICoKKyAqIEZpbmQg dGhlICJmbXQiIGVsZW1lbnQgaW4gdGhlIGdpdmVuIGNvbnRhaW5lciwgYW5kIGV4cGFuZCBpdCBp bnRvIHRoZQorICogcHJvdmlkZWQgU3RyaW5nSW5mby4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFu ZF9mbXRfcmVjdXJzaXZlKEpzb25iQ29udGFpbmVyICpjb250YWluZXIsIFN0cmluZ0luZm8gYnVm KQoreworCUpzb25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUgKnZhbHVlOworCWNvbnN0IGNoYXIg KmNwOworCWNvbnN0IGNoYXIgKnN0YXJ0X3B0cjsKKwljb25zdCBjaGFyICplbmRfcHRyOworCWlu dAkJCWxlbjsKKworCXN0YXJ0X3B0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGNv bnRhaW5lciwgImZtdCIsIGZhbHNlLCAmbGVuKTsKKwllbmRfcHRyID0gc3RhcnRfcHRyICsgbGVu OworCisJZm9yIChjcCA9IHN0YXJ0X3B0cjsgY3AgPCBlbmRfcHRyOyBjcCsrKQorCXsKKwkJY29u dlNwZWNpZmllciBzcGVjaWZpZXI7CisJCWJvb2wJCWlzX2FycmF5ID0gZmFsc2U7CisJCWNoYXIJ ICAgKnBhcmFtID0gTlVMTDsKKwkJY2hhcgkgICAqYXJyYXlzZXAgPSBOVUxMOworCisJCWlmICgq Y3AgIT0gJyUnKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKGJ1ZiwgKmNwKTsK KwkJCWNvbnRpbnVlOworCQl9CisKKworCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9w dHIpOworCisJCS8qIEVhc3kgY2FzZTogJSUgb3V0cHV0cyBhIHNpbmdsZSAlICovCisJCWlmICgq Y3AgPT0gJyUnKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKGJ1ZiwgKmNwKTsK KwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogU2NhbiB0aGUgbWFuZGF0b3J5IGVsZW1l bnQgbmFtZS4gIEFsbG93IGZvciBhbiBhcnJheSBzZXBhcmF0b3IKKwkJICogKHdoaWNoIG1heSBi ZSB0aGUgZW1wdHkgc3RyaW5nKSB0byBiZSBzcGVjaWZpZWQgYWZ0ZXIgY29sb24uCisJCSAqLwor CQlpZiAoKmNwID09ICd7JykKKwkJeworCQkJU3RyaW5nSW5mb0RhdGEgcGFyYnVmOworCQkJU3Ry aW5nSW5mb0RhdGEgYXJyYXlzZXBidWY7CisJCQlTdHJpbmdJbmZvCWFwcGVuZFRvOworCisJCQlp bml0U3RyaW5nSW5mbygmcGFyYnVmKTsKKwkJCWFwcGVuZFRvID0gJnBhcmJ1ZjsKKworCQkJQURW QU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKwkJCWZvciAoOyBjcCA8IGVuZF9wdHI7 KQorCQkJeworCQkJCWlmICgqY3AgPT0gJzonKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogRm91 bmQgYXJyYXkgc2VwYXJhdG9yIGRlbGltaXRlcjsgZWxlbWVudCBuYW1lIGlzIG5vdworCQkJCQkg KiBjb21wbGV0ZSwgc3RhcnQgZmlsbGluZyB0aGUgc2VwYXJhdG9yLgorCQkJCQkgKi8KKwkJCQkJ aW5pdFN0cmluZ0luZm8oJmFycmF5c2VwYnVmKTsKKwkJCQkJYXBwZW5kVG8gPSAmYXJyYXlzZXBi dWY7CisJCQkJCWlzX2FycmF5ID0gdHJ1ZTsKKwkJCQkJQURWQU5DRV9QQVJTRV9QT0lOVEVSKGNw LCBlbmRfcHRyKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJaWYgKCpjcCA9PSAnfScp CisJCQkJeworCQkJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJCQli cmVhazsKKwkJCQl9CisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhhcHBlbmRUbywgKmNw KTsKKwkJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJfQorCQkJcGFy YW0gPSBwYXJidWYuZGF0YTsKKwkJCWlmIChpc19hcnJheSkKKwkJCQlhcnJheXNlcCA9IGFycmF5 c2VwYnVmLmRhdGE7CisJCX0KKwkJaWYgKHBhcmFtID09IE5VTEwpCisJCQllcmVwb3J0KEVSUk9S LAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkg ZXJybXNnKCJtaXNzaW5nIGNvbnZlcnNpb24gbmFtZSBpbiBjb252ZXJzaW9uIHNwZWNpZmllciIp KSk7CisKKwkJc3dpdGNoICgqY3ApCisJCXsKKwkJCWNhc2UgJ0knOgorCQkJCXNwZWNpZmllciA9 IFNwZWNJZGVudGlmaWVyOworCQkJCWJyZWFrOworCQkJY2FzZSAnRCc6CisJCQkJc3BlY2lmaWVy ID0gU3BlY0RvdHRlZE5hbWU7CisJCQkJYnJlYWs7CisJCQljYXNlICdzJzoKKwkJCQlzcGVjaWZp ZXIgPSBTcGVjU3RyaW5nOworCQkJCWJyZWFrOworCQkJY2FzZSAnTCc6CisJCQkJc3BlY2lmaWVy ID0gU3BlY1N0cmluZ0xpdGVyYWw7CisJCQkJYnJlYWs7CisJCQljYXNlICdUJzoKKwkJCQlzcGVj aWZpZXIgPSBTcGVjVHlwZW5hbWU7CisJCQkJYnJlYWs7CisJCQljYXNlICdPJzoKKwkJCQlzcGVj aWZpZXIgPSBTcGVjT3BlcmF0b3JuYW1lOworCQkJCWJyZWFrOworCQkJY2FzZSAnbic6CisJCQkJ c3BlY2lmaWVyID0gU3BlY051bWJlcjsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1InOgorCQkJCXNw ZWNpZmllciA9IFNwZWNSb2xlOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSks CisJCQkJCQkgZXJybXNnKCJpbnZhbGlkIGNvbnZlcnNpb24gc3BlY2lmaWVyIFwiJWNcIiIsICpj cCkpKTsKKwkJfQorCisJCS8qCisJCSAqIE9idGFpbiB0aGUgZWxlbWVudCB0byBiZSBleHBhbmRl ZC4KKwkJICovCisJCWtleS50eXBlID0gamJ2U3RyaW5nOworCQlrZXkudmFsLnN0cmluZy52YWwg PSBwYXJhbTsKKwkJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKHBhcmFtKTsKKworCQl2YWx1 ZSA9IGZpbmRKc29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250YWluZXIsIEpCX0ZPQkpFQ1QsICZr ZXkpOworCisJCS8qCisJCSAqIEV4cGFuZCB0aGUgZGF0YSAocG9zc2libHkgYW4gYXJyYXkpIGlu dG8gdGhlIG91dHB1dCBTdHJpbmdJbmZvLgorCQkgKi8KKwkJaWYgKGlzX2FycmF5KQorCQkJZXhw YW5kX2pzb25iX2FycmF5KGJ1ZiwgcGFyYW0sIHZhbHVlLCBhcnJheXNlcCwgc3BlY2lmaWVyLCBz dGFydF9wdHIpOworCQllbHNlCisJCQlleHBhbmRfb25lX2pzb25iX2VsZW1lbnQoYnVmLCBwYXJh bSwgdmFsdWUsIHNwZWNpZmllciwgc3RhcnRfcHRyKTsKKwl9Cit9CisKKy8qCisgKiBFeHBhbmQg YSBqc29uIHZhbHVlIGFzIGEgcXVvdGVkIGlkZW50aWZpZXIuICBUaGUgdmFsdWUgbXVzdCBiZSBv ZiB0eXBlIHN0cmluZy4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX2lkZW50aWZp ZXIoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc3Ry OworCisJQXNzZXJ0KGpzb252YWwtPnR5cGUgPT0gamJ2U3RyaW5nKTsKKworCXN0ciA9IHBuc3Ry ZHVwKGpzb252YWwtPnZhbC5zdHJpbmcudmFsLCBqc29udmFsLT52YWwuc3RyaW5nLmxlbik7CisJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJcGZy ZWUoc3RyKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYSBkb3Qtc2VwYXJh dGVkLW5hbWUuICBUaGUgdmFsdWUgbXVzdCBiZSBvZiB0eXBlCisgKiBvYmplY3QgYW5kIG1heSBj b250YWluIGVsZW1lbnRzICJzY2hlbWFuYW1lIiAob3B0aW9uYWwpLCAib2JqbmFtZSIKKyAqICht YW5kYXRvcnkpLCAiYXR0cm5hbWUiIChvcHRpb25hbCkuICBEb3VibGUgcXVvdGVzIGFyZSBhZGRl ZCB0byBlYWNoIGVsZW1lbnQKKyAqIGFzIG5lY2Vzc2FyeSwgYW5kIGRvdCBzZXBhcmF0b3JzIHdo ZXJlIG5lZWRlZC4KKyAqCisgKiBPbmUgZGF5IHdlIG1pZ2h0IG5lZWQgYSAiY2F0YWxvZyIgZWxl bWVudCBhcyB3ZWxsLCBidXQgbm8gY3VycmVudCB1c2UgY2FzZQorICogbmVlZHMgdGhhdC4KKyAq Lworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX2RvdHRlZG5hbWUoU3RyaW5nSW5mbyBidWYs IEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc3RyOworCisJc3RyID0gZmluZF9z dHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJ CQkJCSJzY2hlbWFuYW1lIiwgdHJ1ZSwgTlVMTCk7CisJaWYgKHN0cikKKwl7CisJCWFwcGVuZFN0 cmluZ0luZm8oYnVmLCAiJXMuIiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwkJcGZyZWUoc3Ry KTsKKwl9CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52 YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJIm9iam5hbWUiLCBmYWxzZSwgTlVMTCk7CisJYXBw ZW5kU3RyaW5nSW5mbyhidWYsICIlcyIsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJcGZyZWUo c3RyKTsKKworCXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZh bC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkiYXR0cm5hbWUiLCB0cnVlLCBOVUxMKTsKKwlpZiAo c3RyKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIuJXMiLCBxdW90ZV9pZGVudGlmaWVy KHN0cikpOworCQlwZnJlZShzdHIpOworCX0KK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFs dWUgYXMgYSB0eXBlIG5hbWUuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF90eXBl bmFtZShTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyCSAgICpz Y2hlbWEgPSBOVUxMOworCWNoYXIJICAgKnR5cGVuYW1lOworCWNoYXIJICAgKnR5cG1vZHN0cjsK Kwlqc29uX3RyaXZhbHVlCWlzX2FycmF5OworCWNoYXIJICAgKmFycmF5X2RlY29yOworCisJLyoK KwkgKiBXZSBvbWl0IHNjaGVtYS1xdWFsaWZ5aW5nIHRoZSBvdXRwdXQgbmFtZSBpZiB0aGUgc2No ZW1hIGVsZW1lbnQgaXMKKwkgKiBlaXRoZXIgdGhlIGVtcHR5IHN0cmluZyBvciBOVUxMOyB0aGUg ZGlmZmVyZW5jZSBiZXR3ZWVuIHRob3NlIHR3byBjYXNlcworCSAqIGlzIHRoYXQgaW4gdGhlIGxh dHRlciB3ZSBxdW90ZSB0aGUgdHlwZSBuYW1lLCBpbiB0aGUgZm9ybWVyIHdlIGRvbid0LgorCSAq IFRoaXMgYWxsb3dzIGZvciB0eXBlcyB3aXRoIHNwZWNpYWwgdHlwbW9kIG5lZWRzLCBzdWNoIGFz IGludGVydmFsIGFuZAorCSAqIHRpbWVzdGFtcCAoc2VlIGZvcm1hdF90eXBlX2RldGFpbGVkKSwg d2hpbGUgYXQgdGhlIHNhbWUgdGltZSBhbGxvd2luZworCSAqIGZvciB0aGUgc2NoZW1hIG5hbWUg dG8gYmUgb21pdHRlZCBmcm9tIHR5cGUgbmFtZXMgdGhhdCByZXF1aXJlIHF1b3RlcworCSAqIGJ1 dCBhcmUgdG8gYmUgb2J0YWluZWQgZnJvbSBhIHVzZXIgc2NoZW1hLgorCSAqLworCisJc2NoZW1h ID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRh LAorCQkJCQkJCQkJCSAgICJzY2hlbWFuYW1lIiwgdHJ1ZSwgTlVMTCk7CisJdHlwZW5hbWUgPSBm aW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJ CQkJCQkJCQkJCSAidHlwZW5hbWUiLCBmYWxzZSwgTlVMTCk7CisJdHlwbW9kc3RyID0gZmluZF9z dHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJ CQkJCQkgICJ0eXBtb2QiLCB0cnVlLCBOVUxMKTsKKwlpc19hcnJheSA9IGZpbmRfYm9vbF9pbl9q c29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJICAgInR5 cGFycmF5Iik7CisJc3dpdGNoIChpc19hcnJheSkKKwl7CisJCWNhc2UgdHZfdHJ1ZToKKwkJCWFy cmF5X2RlY29yID0gIltdIjsKKwkJCWJyZWFrOworCisJCWNhc2UgdHZfZmFsc2U6CisJCQlhcnJh eV9kZWNvciA9ICIiOworCQkJYnJlYWs7CisKKwkJY2FzZSB0dl9hYnNlbnQ6CisJCWRlZmF1bHQ6 CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1F VEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygibWlzc2luZyB0eXBhcnJheSBlbGVtZW50IikpKTsK Kwl9CisKKwlpZiAoc2NoZW1hID09IE5VTEwpCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMi LCBxdW90ZV9pZGVudGlmaWVyKHR5cGVuYW1lKSk7CisJZWxzZSBpZiAoc2NoZW1hWzBdID09ICdc MCcpCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMiLCB0eXBlbmFtZSk7IC8qIFNwZWNpYWwg dHlwbW9kIG5lZWRzICovCisJZWxzZQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzLiVzIiwg cXVvdGVfaWRlbnRpZmllcihzY2hlbWEpLAorCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIodHlwZW5h bWUpKTsKKworCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMlcyIsIHR5cG1vZHN0ciA/IHR5cG1v ZHN0ciA6ICIiLCBhcnJheV9kZWNvcik7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVl IGFzIGFuIG9wZXJhdG9yIG5hbWUKKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX29w ZXJhdG9yKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAg KnN0cjsKKworCXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZh bC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkic2NoZW1hbmFtZSIsIHRydWUsIE5VTEwpOworCS8q IFNjaGVtYSBtaWdodCBiZSBOVUxMIG9yIGVtcHR5ICovCisJaWYgKHN0ciAhPSBOVUxMICYmIHN0 clswXSAhPSAnXDAnKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcy4iLCBxdW90ZV9p ZGVudGlmaWVyKHN0cikpOworCQlwZnJlZShzdHIpOworCX0KKworCXN0ciA9IGZpbmRfc3RyaW5n X2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQki b2JqbmFtZSIsIGZhbHNlLCBOVUxMKTsKKworCWlmIChzdHIpCisJeworCQlhcHBlbmRTdHJpbmdJ bmZvU3RyaW5nKGJ1Ziwgc3RyKTsKKwkJcGZyZWUoc3RyKTsKKwl9Cit9CisKKy8qCisgKiBFeHBh bmQgYSBqc29uIHZhbHVlIGFzIGEgc3RyaW5nLiAgVGhlIHZhbHVlIG11c3QgYmUgb2YgdHlwZSBz dHJpbmcgb3Igb2YKKyAqIHR5cGUgb2JqZWN0LiAgSW4gdGhlIGxhdHRlciBjYXNlIGl0IG11c3Qg Y29udGFpbiBhICJmbXQiIGVsZW1lbnQgd2hpY2ggd2lsbAorICogYmUgcmVjdXJzaXZlbHkgZXhw YW5kZWQ7IGFsc28sIGlmIHRoZSBvYmplY3QgY29udGFpbnMgYW4gZWxlbWVudCAicHJlc2VudCIK KyAqIGFuZCBpdCBpcyBzZXQgdG8gZmFsc2UsIHRoZSBleHBhbnNpb24gaXMgdGhlIGVtcHR5IHN0 cmluZy4KKyAqCisgKiBSZXR1cm5zIGZhbHNlIGlmIG5vIGFjdHVhbCBleHBhbnNpb24gd2FzIG1h ZGUgZHVlIHRvIHRoZSAicHJlc2VudCIgZmxhZworICogYmVpbmcgc2V0IHRvICJmYWxzZSIuCisg Ki8KK3N0YXRpYyBib29sCitleHBhbmRfanNvbnZhbF9zdHJpbmcoU3RyaW5nSW5mbyBidWYsIEpz b25iVmFsdWUgKmpzb252YWwpCit7CisJaWYgKGpzb252YWwtPnR5cGUgPT0gamJ2U3RyaW5nKQor CXsKKwkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbyhidWYsIGpzb252YWwtPnZhbC5zdHJpbmcudmFs LAorCQkJCQkJCSAgIGpzb252YWwtPnZhbC5zdHJpbmcubGVuKTsKKwl9CisJZWxzZSBpZiAoanNv bnZhbC0+dHlwZSA9PSBqYnZCaW5hcnkpCisJeworCQlqc29uX3RyaXZhbHVlCXByZXNlbnQ7CisK KwkJcHJlc2VudCA9IGZpbmRfYm9vbF9pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmlu YXJ5LmRhdGEsCisJCQkJCQkJCQkJCSAgInByZXNlbnQiKTsKKwkJLyoKKwkJICogSWYgInByZXNl bnQiIGlzIHNldCB0byBmYWxzZSwgdGhpcyBlbGVtZW50IGV4cGFuZHMgdG8gZW1wdHk7CisJCSAq IG90aGVyd2lzZSAoZWl0aGVyIHRydWUgb3IgYWJzZW50KSwgZmFsbCB0aHJvdWdoIHRvIGV4cGFu ZCAiZm10Ii4KKwkJICovCisJCWlmIChwcmVzZW50ID09IHR2X2ZhbHNlKQorCQkJcmV0dXJuIGZh bHNlOworCisJCWV4cGFuZF9mbXRfcmVjdXJzaXZlKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwg YnVmKTsKKwl9CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwor LyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYSBzdHJpbmcgbGl0ZXJhbC4KKyAqLworc3Rh dGljIHZvaWQKK2V4cGFuZF9qc29udmFsX3N0cmxpdChTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1 ZSAqanNvbnZhbCkKK3sKKwljaGFyICAgKnN0cjsKKwlTdHJpbmdJbmZvRGF0YSBkcWRlbGltOwor CXN0YXRpYyBjb25zdCBjaGFyIGRxc3VmZml4ZXNbXSA9ICJfWFlaWllYXyI7CisJaW50ICAgICAg ICAgZHFuZXh0Y2hhciA9IDA7CisKKwlzdHIgPSBwbnN0cmR1cChqc29udmFsLT52YWwuc3RyaW5n LnZhbCwganNvbnZhbC0+dmFsLnN0cmluZy5sZW4pOworCisJLyogRWFzeSBjYXNlOiBpZiB0aGVy ZSBhcmUgbm8gJyBhbmQgbm8gXCwganVzdCB1c2UgYSBzaW5nbGUgcXVvdGUgKi8KKwlpZiAoc3Ry Y2hyKHN0ciwgJ1wnJykgPT0gTlVMTCAmJgorCQlzdHJjaHIoc3RyLCAnXFwnKSA9PSBOVUxMKQor CXsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICInJXMnIiwgc3RyKTsKKwkJcGZyZWUoc3RyKTsK KwkJcmV0dXJuOworCX0KKworCS8qIE90aGVyd2lzZSBuZWVkIHRvIGZpbmQgYSB1c2VmdWwgZG9s bGFyLXF1b3RlIGRlbGltaXRlciAqLworCWluaXRTdHJpbmdJbmZvKCZkcWRlbGltKTsKKwlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKCZkcWRlbGltLCAiJCIpOworCXdoaWxlIChzdHJzdHIoc3RyLCBk cWRlbGltLmRhdGEpICE9IE5VTEwpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmZHFkZWxp bSwgZHFzdWZmaXhlc1tkcW5leHRjaGFyKytdKTsKKwkJZHFuZXh0Y2hhciA9IGRxbmV4dGNoYXIg JSAoc2l6ZW9mKGRxc3VmZml4ZXMpIC0gMSk7CisJfQorCS8qIEFkZCB0cmFpbGluZyAkICovCisJ YXBwZW5kU3RyaW5nSW5mb0NoYXIoJmRxZGVsaW0sICckJyk7CisKKwkvKiBBbmQgZmluYWxseSBw cm9kdWNlIHRoZSBxdW90ZWQgbGl0ZXJhbCBpbnRvIHRoZSBvdXRwdXQgU3RyaW5nSW5mbyAqLwor CWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMlcyVzIiwgZHFkZWxpbS5kYXRhLCBzdHIsIGRxZGVs aW0uZGF0YSk7CisJcGZyZWUoZHFkZWxpbS5kYXRhKTsKKwlwZnJlZShzdHIpOworfQorCisvKgor ICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhbiBpbnRlZ2VyIHF1YW50aXR5LgorICovCitzdGF0 aWMgdm9pZAorZXhwYW5kX2pzb252YWxfbnVtYmVyKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVl ICpqc29udmFsKQoreworCWNoYXIgKnN0cmRhdHVtOworCisJc3RyZGF0dW0gPSBEYXR1bUdldENT dHJpbmcoRGlyZWN0RnVuY3Rpb25DYWxsMShudW1lcmljX291dCwKKwkJCQkJCQkJCQkJCSAgIE51 bWVyaWNHZXREYXR1bShqc29udmFsLT52YWwubnVtZXJpYykpKTsKKwlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKGJ1Ziwgc3RyZGF0dW0pOworfQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBh cyBhIHJvbGUgbmFtZS4gIElmIHRoZSBpc19wdWJsaWMgZWxlbWVudCBpcyBzZXQgdG8KKyAqIHRy dWUsIFBVQkxJQyBpcyBleHBhbmRlZCAobm8gcXVvdGVzKTsgb3RoZXJ3aXNlLCBleHBhbmQgdGhl IGdpdmVuIHJvbGUgbmFtZSwKKyAqIHF1b3RpbmcgYXMgYW4gaWRlbnRpZmllci4KKyAqLworc3Rh dGljIHZvaWQKK2V4cGFuZF9qc29udmFsX3JvbGUoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUg Kmpzb252YWwpCit7CisJanNvbl90cml2YWx1ZQlpc19wdWJsaWM7CisKKwlpc19wdWJsaWMgPSBm aW5kX2Jvb2xfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJ CQkJCQkJCQkiaXNfcHVibGljIik7CisJaWYgKGlzX3B1YmxpYyA9PSB0dl90cnVlKQorCQlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIlBVQkxJQyIpOworCWVsc2UKKwl7CisJCWNoYXIgKnJv bGVuYW1lOworCisJCXJvbGVuYW1lID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNv bnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkJICJyb2xlbmFtZSIsIGZhbHNlLCBO VUxMKTsKKwkJaWYgKHJvbGVuYW1lKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1 ZiwgcXVvdGVfaWRlbnRpZmllcihyb2xlbmFtZSkpOworCQkJcGZyZWUocm9sZW5hbWUpOworCQl9 CisJfQorfQorCisvKgorICogRXhwYW5kIG9uZSBqc29uIGVsZW1lbnQgaW50byB0aGUgb3V0cHV0 IFN0cmluZ0luZm8gYWNjb3JkaW5nIHRvIHRoZQorICogY29udmVyc2lvbiBzcGVjaWZpZXIuICBU aGUgZWxlbWVudCB0eXBlIGlzIHZhbGlkYXRlZCwgYW5kIGFuIGVycm9yIGlzIHJhaXNlZAorICog aWYgaXQgZG9lc24ndCBtYXRjaCB3aGF0IHdlIGV4cGVjdCBmb3IgdGhlIGNvbnZlcnNpb24gc3Bl Y2lmaWVyLgorICoKKyAqIFJldHVybnMgZmFsc2UgaWYgbm8gYWN0dWFsIGV4cGFuc2lvbiB3YXMg bWFkZSAoZHVlIHRvIHRoZSAicHJlc2VudCIgZmxhZworICogYmVpbmcgc2V0IHRvICJmYWxzZSIg aW4gZm9ybWF0dGVkIHN0cmluZyBleHBhbnNpb24pLgorICovCitzdGF0aWMgYm9vbAorZXhwYW5k X29uZV9qc29uYl9lbGVtZW50KFN0cmluZ0luZm8gYnVmLCBjaGFyICpwYXJhbSwgSnNvbmJWYWx1 ZSAqanNvbnZhbCwKKwkJCQkJCSBjb252U3BlY2lmaWVyIHNwZWNpZmllciwgY29uc3QgY2hhciAq Zm10KQoreworCWJvb2wgcmVzdWx0ID0gdHJ1ZTsKKwlFcnJvckNvbnRleHRDYWxsYmFjayBzcWxl cnJjb250ZXh0OworCisJLyogSWYgd2Ugd2VyZSBnaXZlbiBhIGZvcm1hdCBzdHJpbmcsIHNldHVw IGFuIGVyZXBvcnQoKSBjb250ZXh0IGNhbGxiYWNrICovCisJaWYgKGZtdCkKKwl7CisJCXNxbGVy cmNvbnRleHQuY2FsbGJhY2sgPSBmbXRzdHJfZXJyb3JfY2FsbGJhY2s7CisJCXNxbGVycmNvbnRl eHQuYXJnID0gKHZvaWQgKikgZm10OworCQlzcWxlcnJjb250ZXh0LnByZXZpb3VzID0gZXJyb3Jf Y29udGV4dF9zdGFjazsKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9ICZzcWxlcnJjb250ZXh0Owor CX0KKworCWlmICghanNvbnZhbCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJlbGVtZW50IFwiJXNc IiBub3QgZm91bmQiLCBwYXJhbSkpKTsKKworCXN3aXRjaCAoc3BlY2lmaWVyKQorCXsKKwkJY2Fz ZSBTcGVjSWRlbnRpZmllcjoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidlN0cmluZykKKwkJ CQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRF Ul9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIHN0cmluZyBmb3IgJSVJIGVs ZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsK KwkJCWV4cGFuZF9qc29udmFsX2lkZW50aWZpZXIoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOwor CisJCWNhc2UgU3BlY0RvdHRlZE5hbWU6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5h cnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9Q QVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBvYmplY3QgZm9y ICUlRCBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5 cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9kb3R0ZWRuYW1lKGJ1ZiwganNvbnZhbCk7CisJCQli cmVhazsKKworCQljYXNlIFNwZWNTdHJpbmc6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZT dHJpbmcgJiYKKwkJCQlqc29udmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVS Uk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJ CQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIHN0cmluZyBvciBvYmplY3QgZm9yICUlcyBlbGVt ZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJ CQlyZXN1bHQgPSBleHBhbmRfanNvbnZhbF9zdHJpbmcoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFr OworCisJCWNhc2UgU3BlY1N0cmluZ0xpdGVyYWw6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBq YnZTdHJpbmcpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5W QUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBzdHJp bmcgZm9yICUlTCBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252 YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9zdHJsaXQoYnVmLCBqc29udmFsKTsKKwkJ CWJyZWFrOworCisJCWNhc2UgU3BlY1R5cGVuYW1lOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0g amJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lO VkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gb2Jq ZWN0IGZvciAlJVQgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29u dmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfdHlwZW5hbWUoYnVmLCBqc29udmFsKTsK KwkJCWJyZWFrOworCisJCWNhc2UgU3BlY09wZXJhdG9ybmFtZToKKwkJCWlmIChqc29udmFsLT50 eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJS Q09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBK U09OIG9iamVjdCBmb3IgJSVPIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJh bSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX29wZXJhdG9yKGJ1ZiwganNv bnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNOdW1iZXI6CisJCQlpZiAoanNvbnZhbC0+ dHlwZSAhPSBqYnZOdW1lcmljKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShF UlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVk IEpTT04gbnVtZXJpYyBmb3IgJSVuIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlw YXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX251bWJlcihidWYsIGpz b252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjUm9sZToKKwkJCWlmIChqc29udmFsLT50 eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJS Q09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBK U09OIG9iamVjdCBmb3IgJSVSIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJh bSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX3JvbGUoYnVmLCBqc29udmFs KTsKKwkJCWJyZWFrOworCX0KKworCWlmIChmbXQpCisJCWVycm9yX2NvbnRleHRfc3RhY2sgPSBz cWxlcnJjb250ZXh0LnByZXZpb3VzOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEl0 ZXJhdGUgb24gdGhlIGVsZW1lbnRzIG9mIGEgSlNPTiBhcnJheSwgZXhwYW5kaW5nIGVhY2ggb25l IGludG8gdGhlIG91dHB1dAorICogU3RyaW5nSW5mbyBwZXIgdGhlIGdpdmVuIGNvbnZlcnNpb24g c3BlY2lmaWVyLCBzZXBhcmF0ZWQgYnkgdGhlIGdpdmVuCisgKiBzZXBhcmF0b3IuCisgKi8KK3N0 YXRpYyB2b2lkCitleHBhbmRfanNvbmJfYXJyYXkoU3RyaW5nSW5mbyBidWYsIGNoYXIgKnBhcmFt LAorCQkJCSAgIEpzb25iVmFsdWUgKmpzb25hcnIsIGNoYXIgKmFycmF5c2VwLCBjb252U3BlY2lm aWVyIHNwZWNpZmllciwKKwkJCQkgICBjb25zdCBjaGFyICpmbXQpCit7CisJRXJyb3JDb250ZXh0 Q2FsbGJhY2sgc3FsZXJyY29udGV4dDsKKwlKc29uYkNvbnRhaW5lciAqY29udGFpbmVyOworCUpz b25iSXRlcmF0b3IgICppdDsKKwlKc29uYlZhbHVlCXY7CisJaW50CQkJdHlwZTsKKwlib29sCQlm aXJzdCA9IHRydWU7CisJU3RyaW5nSW5mb0RhdGEgYXJyYXllbGVtOworCisJLyogSWYgd2Ugd2Vy ZSBnaXZlbiBhIGZvcm1hdCBzdHJpbmcsIHNldHVwIGFuIGVyZXBvcnQoKSBjb250ZXh0IGNhbGxi YWNrICovCisJaWYgKGZtdCkKKwl7CisJCXNxbGVycmNvbnRleHQuY2FsbGJhY2sgPSBmbXRzdHJf ZXJyb3JfY2FsbGJhY2s7CisJCXNxbGVycmNvbnRleHQuYXJnID0gKHZvaWQgKikgZm10OworCQlz cWxlcnJjb250ZXh0LnByZXZpb3VzID0gZXJyb3JfY29udGV4dF9zdGFjazsKKwkJZXJyb3JfY29u dGV4dF9zdGFjayA9ICZzcWxlcnJjb250ZXh0OworCX0KKworCWlmIChqc29uYXJyLT50eXBlICE9 IGpidkJpbmFyeSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFM SURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJlbGVtZW50IFwiJXNcIiBpcyBub3Qg YSBKU09OIGFycmF5IiwgcGFyYW0pKSk7CisKKwljb250YWluZXIgPSBqc29uYXJyLT52YWwuYmlu YXJ5LmRhdGE7CisJaWYgKCFKc29uQ29udGFpbmVySXNBcnJheShjb250YWluZXIpKQorCQllcmVw b3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUp LAorCQkJCSBlcnJtc2coImVsZW1lbnQgXCIlc1wiIGlzIG5vdCBhIEpTT04gYXJyYXkiLCBwYXJh bSkpKTsKKworCWluaXRTdHJpbmdJbmZvKCZhcnJheWVsZW0pOworCisJaXQgPSBKc29uYkl0ZXJh dG9ySW5pdChjb250YWluZXIpOworCXdoaWxlICgodHlwZSA9IEpzb25iSXRlcmF0b3JOZXh0KCZp dCwgJnYsIHRydWUpKSAhPSBXSkJfRE9ORSkKKwl7CisJCWlmICh0eXBlID09IFdKQl9FTEVNKQor CQl7CisJCQlyZXNldFN0cmluZ0luZm8oJmFycmF5ZWxlbSk7CisKKwkJCWlmIChleHBhbmRfb25l X2pzb25iX2VsZW1lbnQoJmFycmF5ZWxlbSwgcGFyYW0sICZ2LCBzcGVjaWZpZXIsIE5VTEwpKQor CQkJeworCQkJCWlmICghZmlyc3QpCisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBh cnJheXNlcCk7CisKKwkJCQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKGJ1ZiwgYXJyYXllbGVtLmRh dGEsIGFycmF5ZWxlbS5sZW4pOworCQkJCWZpcnN0ID0gZmFsc2U7CisJCQl9CisJCX0KKwl9CisK KwlpZiAoZm10KQorCQllcnJvcl9jb250ZXh0X3N0YWNrID0gc3FsZXJyY29udGV4dC5wcmV2aW91 czsKK30KKworLyoKKyAqIFdvcmtob3JzZSBmb3IgZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQu CisgKi8KK2NoYXIgKgorZGRsX2RlcGFyc2VfanNvbl90b19zdHJpbmcoY2hhciAqanNvbl9zdHIp Cit7CisJRGF0dW0JCWQ7CisJSnNvbmIJICAgKmpzb25iOworCVN0cmluZ0luZm8gYnVmID0gKFN0 cmluZ0luZm8pIHBhbGxvYzAoc2l6ZW9mKFN0cmluZ0luZm9EYXRhKSk7CisKKwlpbml0U3RyaW5n SW5mbyhidWYpOworCisJZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDEoanNvbmJfaW4sIFBvaW50ZXJH ZXREYXR1bShqc29uX3N0cikpOworCWpzb25iID0gKEpzb25iICopIERhdHVtR2V0UG9pbnRlcihk KTsKKworCWV4cGFuZF9mbXRfcmVjdXJzaXZlKCZqc29uYi0+cm9vdCwgYnVmKTsKKworCXJldHVy biBidWYtPmRhdGE7Cit9CisKKy8qLS0tLS0tCisgKiBSZXR1cm5zIGEgZm9ybWF0dGVkIHN0cmlu ZyBmcm9tIGEgSlNPTiBvYmplY3QuCisgKgorICogVGhlIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBl bGVtZW50IG5hbWVkICJmbXQiICh3aGljaCBtdXN0IGJlIGEgc3RyaW5nKS4KKyAqIFRoaXMgZm9y bWF0IHN0cmluZyBtYXkgY29udGFpbiB6ZXJvIG9yIG1vcmUgJS1lc2NhcGVzLCB3aGljaCBjb25z aXN0IG9mIGFuCisgKiBlbGVtZW50IG5hbWUgZW5jbG9zZWQgaW4geyB9LCBwb3NzaWJseSBmb2xs b3dlZCBieSBhIGNvbnZlcnNpb24gbW9kaWZpZXIsCisgKiBmb2xsb3dlZCBieSBhIGNvbnZlcnNp b24gc3BlY2lmaWVyLiAgUG9zc2libGUgY29udmVyc2lvbiBzcGVjaWZpZXJzIGFyZToKKyAqCisg KiAlCQlleHBhbmQgdG8gYSBsaXRlcmFsICUuCisgKiBJCQlleHBhbmQgYXMgYSBzaW5nbGUsIG5v bi1xdWFsaWZpZWQgaWRlbnRpZmllcgorICogRAkJZXhwYW5kIGFzIGEgcG9zc2libHktcXVhbGlm aWVkIGlkZW50aWZpZXIKKyAqIFQJCWV4cGFuZCBhcyBhIHR5cGUgbmFtZQorICogTwkJZXhwYW5k IGFzIGFuIG9wZXJhdG9yIG5hbWUKKyAqIEwJCWV4cGFuZCBhcyBhIHN0cmluZyBsaXRlcmFsIChx dW90ZSB1c2luZyBzaW5nbGUgcXVvdGVzKQorICogcwkJZXhwYW5kIGFzIGEgc2ltcGxlIHN0cmlu ZyAobm8gcXVvdGluZykKKyAqIG4JCWV4cGFuZCBhcyBhIHNpbXBsZSBudW1iZXIgKG5vIHF1b3Rp bmcpCisgKiBSCQlleHBhbmQgYXMgYSByb2xlIG5hbWUgKHBvc3NpYmx5IHF1b3RlZCBuYW1lLCBv ciBQVUJMSUMpCisgKgorICogVGhlIGVsZW1lbnQgbmFtZSBtYXkgaGF2ZSBhbiBvcHRpb25hbCBz ZXBhcmF0b3Igc3BlY2lmaWNhdGlvbiBwcmVjZWRlZAorICogYnkgYSBjb2xvbi4gIEl0cyBwcmVz ZW5jZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBpcyBleHBlY3RlZCB0byBiZQorICogYW4g YXJyYXk7IHRoZSBzcGVjaWZpZWQgc2VwYXJhdG9yIGlzIHVzZWQgdG8gam9pbiB0aGUgYXJyYXkg ZWxlbWVudHMuCisgKi0tLS0tLQorICovCitEYXR1bQorZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1h bmQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwl0ZXh0CSAgICpqc29uID0gUEdfR0VUQVJHX1RFWFRf UCgwKTsKKwljaGFyCSAgICpqc29uX3N0cjsKKworCWpzb25fc3RyID0gVGV4dERhdHVtR2V0Q1N0 cmluZyhqc29uKTsKKworCVBHX1JFVFVSTl9URVhUX1AoQ1N0cmluZ0dldFRleHREYXR1bShkZGxf ZGVwYXJzZV9qc29uX3RvX3N0cmluZyhqc29uX3N0cikpKTsKK30KKworLyoKKyAqIEVycm9yIGNv bnRleHQgY2FsbGJhY2sgZm9yIEpTT04gZm9ybWF0IHN0cmluZyBleHBhbnNpb24uCisgKgorICog WFhYOiBpbmRpY2F0ZSB3aGljaCBlbGVtZW50IHdlJ3JlIGV4cGFuZGluZywgaWYgYXBwbGljYWJs ZS4KKyAqLworc3RhdGljIHZvaWQKK2ZtdHN0cl9lcnJvcl9jYWxsYmFjayh2b2lkICphcmcpCit7 CisJZXJyY29udGV4dCgid2hpbGUgZXhwYW5kaW5nIGZvcm1hdCBzdHJpbmcgXCIlc1wiIiwgKGNo YXIgKikgYXJnKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNl LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCmluZGV4IGIwYjIxMTguLjI4OWE1 ZGUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMKKysrIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYwpAQCAtMTcwMCw2ICsxNzAwLDM5IEBAIHByb2Nl c3Nfb3duZWRfYnkoUmVsYXRpb24gc2VxcmVsLCBMaXN0ICpvd25lZF9ieSwgYm9vbCBmb3JfaWRl bnRpdHkpCiAJCXJlbGF0aW9uX2Nsb3NlKHRhYmxlcmVsLCBOb0xvY2spOwogfQogCisvKgorICog UmV0dXJuIHNlcXVlbmNlIHBhcmFtZXRlcnMsIGRldGFpbGVkCisgKi8KK0Zvcm1fcGdfc2VxdWVu Y2VfZGF0YQorZ2V0X3NlcXVlbmNlX3ZhbHVlcyhPaWQgc2VxdWVuY2VJZCkKK3sKKwlCdWZmZXIg ICAgICBidWY7CisJU2VxVGFibGUgICAgZWxtOworCVJlbGF0aW9uICAgIHNlcXJlbDsKKwlIZWFw VHVwbGVEYXRhIHNlcXR1cGxlOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXE7CisJRm9ybV9w Z19zZXF1ZW5jZV9kYXRhIHJldFNlcTsKKworCS8qIE9wZW4gYW5kIEFjY2Vzc1NoYXJlTG9jayBz ZXF1ZW5jZSAqLworCWluaXRfc2VxdWVuY2Uoc2VxdWVuY2VJZCwgJmVsbSwgJnNlcXJlbCk7CisK KwlpZiAocGdfY2xhc3NfYWNsY2hlY2soc2VxdWVuY2VJZCwgR2V0VXNlcklkKCksCisJCQlBQ0xf U0VMRUNUIHwgQUNMX1VQREFURSB8IEFDTF9VU0FHRSkgIT0gQUNMQ0hFQ0tfT0spCisJCWVyZXBv cnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5TVUZGSUNJRU5UX1BSSVZJTEVHRSks CisJCQkJCSBlcnJtc2coInBlcm1pc3Npb24gZGVuaWVkIGZvciBzZXF1ZW5jZSAlcyIsCisJCQkJ CQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoc2VxcmVsKSkpKTsKKworCXNlcSA9IHJlYWRfc2Vx X3R1cGxlKHNlcXJlbCwgJmJ1ZiwgJnNlcXR1cGxlKTsKKwlyZXRTZXEgPSBwYWxsb2Moc2l6ZW9m KEZvcm1EYXRhX3BnX3NlcXVlbmNlX2RhdGEpKTsKKworCW1lbWNweShyZXRTZXEsIHNlcSwgc2l6 ZW9mKEZvcm1EYXRhX3BnX3NlcXVlbmNlX2RhdGEpKTsKKworCVVubG9ja1JlbGVhc2VCdWZmZXIo YnVmKTsKKwlyZWxhdGlvbl9jbG9zZShzZXFyZWwsIE5vTG9jayk7CisKKwlyZXR1cm4gcmV0U2Vx OworfQogCiAvKgogICogUmV0dXJuIHNlcXVlbmNlIHBhcmFtZXRlcnMgaW4gYSBsaXN0IG9mIHRo ZSBmb3JtIGNyZWF0ZWQgYnkgdGhlIHBhcnNlci4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9mb3JtYXRfdHlwZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBl LmMKaW5kZXggMDYwZmQ3ZS4uNmFmMjI1NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L2Zvcm1hdF90eXBlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBl LmMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJ1dGlscy9udW1lcmljLmgiCiAjaW5jbHVk ZSAidXRpbHMvc3lzY2FjaGUuaCIKIAotc3RhdGljIGNoYXIgKnByaW50VHlwbW9kKGNvbnN0IGNo YXIgKnR5cG5hbWUsIGludDMyIHR5cG1vZCwgT2lkIHR5cG1vZG91dCk7CiAKIAogLyoKQEAgLTM2 Nyw3ICszNjYsNyBAQCBmb3JtYXRfdHlwZV93aXRoX3R5cGVtb2QoT2lkIHR5cGVfb2lkLCBpbnQz MiB0eXBlbW9kKQogLyoKICAqIEFkZCB0eXBtb2QgZGVjb3JhdGlvbiB0byB0aGUgYmFzaWMgdHlw ZSBuYW1lCiAgKi8KLXN0YXRpYyBjaGFyICoKK2NoYXIgKgogcHJpbnRUeXBtb2QoY29uc3QgY2hh ciAqdHlwbmFtZSwgaW50MzIgdHlwbW9kLCBPaWQgdHlwbW9kb3V0KQogewogCWNoYXIJICAgKnJl czsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvcmVncHJvYy5jCmluZGV4IDZkNGMxYzIuLjZiMjM2ZTUgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3JlZ3Byb2MuYwpAQCAtNDQsNiArNDQsOCBAQAogc3RhdGljIHZvaWQgcGFyc2VOYW1l QW5kQXJnVHlwZXMoY29uc3QgY2hhciAqc3RyaW5nLCBib29sIGFsbG93Tm9uZSwKIAkJCQkJCQkJ IExpc3QgKipuYW1lcywgaW50ICpuYXJncywgT2lkICphcmd0eXBlcyk7CiAKK3N0YXRpYyB2b2lk IGZvcm1hdF9wcm9jZWR1cmVfYXJnc19pbnRlcm5hbChGb3JtX3BnX3Byb2MgcHJvY2Zvcm0sCisJ CQkJCQkJCQkJICAgU3RyaW5nSW5mbyBidWYsIGJvb2wgZm9yY2VfcXVhbGlmeSk7CiAKIC8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKgogICoJIFVTRVIgSS9PIFJPVVRJTkVTCQkJCQkJCQkJCQkJCQkgKgpA QCAtMzMyLDYgKzMzNCwyOSBAQCBmb3JtYXRfcHJvY2VkdXJlX3F1YWxpZmllZChPaWQgcHJvY2Vk dXJlX29pZCkKIH0KIAogLyoKKyAqIGZvcm1hdF9wcm9jZWR1cmVfYXJncyAgIC0gY29udmVydHMg cHJvYyBPSUQgdG8gIihhcmdzKSIKKyAqLworY2hhciAqCitmb3JtYXRfcHJvY2VkdXJlX2FyZ3Mo T2lkIHByb2NlZHVyZV9vaWQsIGJvb2wgZm9yY2VfcXVhbGlmeSkKK3sKKwlTdHJpbmdJbmZvRGF0 YSBidWY7CisJSGVhcFR1cGxlICAgcHJvY3R1cDsKKwlGb3JtX3BnX3Byb2MgcHJvY2Zvcm07CisK Kwlwcm9jdHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0ocHJv Y2VkdXJlX29pZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jdHVwKSkKKwkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSAldSIsIHByb2NlZHVyZV9v aWQpOworCXByb2Nmb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2N0dXApOworCisJ aW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJZm9ybWF0X3Byb2NlZHVyZV9hcmdzX2ludGVybmFsKHBy b2Nmb3JtLCAmYnVmLCBmb3JjZV9xdWFsaWZ5KTsKKworCVJlbGVhc2VTeXNDYWNoZShwcm9jdHVw KTsKKworCXJldHVybiBidWYuZGF0YTsKK30KKworLyoKICAqIGZvcm1hdF9wcm9jZWR1cmVfZXh0 ZW5kZWQgLSBjb252ZXJ0cyBwcm9jZWR1cmUgT0lEIHRvICJwcm9fbmFtZShhcmdzKSIKICAqCiAg KiBUaGlzIGV4cG9ydHMgdGhlIHVzZWZ1bCBmdW5jdGlvbmFsaXR5IG9mIHJlZ3Byb2NlZHVyZW91 dCBmb3IgdXNlCkBAIC0yMDYwLDMgKzIwODUsMzAgQEAgcGFyc2VOYW1lQW5kQXJnVHlwZXMoY29u c3QgY2hhciAqc3RyaW5nLCBib29sIGFsbG93Tm9uZSwgTGlzdCAqKm5hbWVzLAogCiAJcGZyZWUo cmF3bmFtZSk7CiB9CisKKy8qCisgKiBBcHBlbmQgdGhlIHBhcmVudGhpc2VkIGFyZ3VtZW50cyBv ZiB0aGUgZ2l2ZW4gcGdfcHJvYyByb3cgaW50byB0aGUgb3V0cHV0CisgKiBidWZmZXIuICBmb3Jj ZV9xdWFsaWZ5IGluZGljYXRlcyB3aGV0aGVyIHRvIHNjaGVtYS1xdWFsaWZ5IHR5cGUgbmFtZXMK KyAqIHJlZ2FyZGxlc3Mgb2YgdmlzaWJpbGl0eS4KKyAqLworc3RhdGljIHZvaWQKK2Zvcm1hdF9w cm9jZWR1cmVfYXJnc19pbnRlcm5hbChGb3JtX3BnX3Byb2MgcHJvY2Zvcm0sIFN0cmluZ0luZm8g YnVmLAorCQkJCQkJCSAgIGJvb2wgZm9yY2VfcXVhbGlmeSkKK3sKKwlpbnQJCQlpOworCWludAkJ CW5hcmdzID0gcHJvY2Zvcm0tPnByb25hcmdzOworCisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVm LCAnKCcpOworCWZvciAoaSA9IDA7IGkgPCBuYXJnczsgaSsrKQorCXsKKwkJT2lkCQkJdGhpc2Fy Z3R5cGUgPSBwcm9jZm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldOworCisJCWlmIChpID4gMCkK KwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJywnKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZyhidWYsCisJCQkJCQkJICAgZm9yY2VfcXVhbGlmeSA/CisJCQkJCQkJICAgZm9ybWF0X3R5 cGVfYmVfcXVhbGlmaWVkKHRoaXNhcmd0eXBlKSA6CisJCQkJCQkJICAgZm9ybWF0X3R5cGVfYmUo dGhpc2FyZ3R5cGUpKTsKKwl9CisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnKScpOworfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCmluZGV4IGQ1NzVhYTAuLjk1ZTY3ODAgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvcnVsZXV0aWxzLmMKQEAgLTM1OCw3ICszNTgsNiBAQCBzdGF0aWMgaW50CXByaW50 X2Z1bmN0aW9uX2FyZ3VtZW50cyhTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXAsCiAJ CQkJCQkJCQkgYm9vbCBwcmludF90YWJsZV9hcmdzLCBib29sIHByaW50X2RlZmF1bHRzKTsKIHN0 YXRpYyB2b2lkIHByaW50X2Z1bmN0aW9uX3JldHR5cGUoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBs ZSBwcm9jdHVwKTsKIHN0YXRpYyB2b2lkIHByaW50X2Z1bmN0aW9uX3RyZnR5cGVzKFN0cmluZ0lu Zm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7Ci1zdGF0aWMgdm9pZCBwcmludF9mdW5jdGlvbl9z cWxib2R5KFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7CiBzdGF0aWMgdm9pZCBz ZXRfcnRhYmxlX25hbWVzKGRlcGFyc2VfbmFtZXNwYWNlICpkcG5zLCBMaXN0ICpwYXJlbnRfbmFt ZXNwYWNlcywKIAkJCQkJCQkgQml0bWFwc2V0ICpyZWxzX3VzZWQpOwogc3RhdGljIHZvaWQgc2V0 X2RlcGFyc2VfZm9yX3F1ZXJ5KGRlcGFyc2VfbmFtZXNwYWNlICpkcG5zLCBRdWVyeSAqcXVlcnks CkBAIC00ODgsMjIgKzQ4NywxNSBAQCBzdGF0aWMgdm9pZCBnZXRfZnJvbV9jbGF1c2VfY29sZGVm bGlzdChSYW5nZVRibEZ1bmN0aW9uICpydGZ1bmMsCiAJCQkJCQkJCQkgICBkZXBhcnNlX2NvbnRl eHQgKmNvbnRleHQpOwogc3RhdGljIHZvaWQgZ2V0X3RhYmxlc2FtcGxlX2RlZihUYWJsZVNhbXBs ZUNsYXVzZSAqdGFibGVzYW1wbGUsCiAJCQkJCQkJCWRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7 Ci1zdGF0aWMgdm9pZCBnZXRfb3BjbGFzc19uYW1lKE9pZCBvcGNsYXNzLCBPaWQgYWN0dWFsX2Rh dGF0eXBlLAotCQkJCQkJCSBTdHJpbmdJbmZvIGJ1Zik7CiBzdGF0aWMgTm9kZSAqcHJvY2Vzc0lu ZGlyZWN0aW9uKE5vZGUgKm5vZGUsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMg dm9pZCBwcmludFN1YnNjcmlwdHMoU3Vic2NyaXB0aW5nUmVmICpzYnNyZWYsIGRlcGFyc2VfY29u dGV4dCAqY29udGV4dCk7CiBzdGF0aWMgY2hhciAqZ2V0X3JlbGF0aW9uX25hbWUoT2lkIHJlbGlk KTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9yZWxhdGlvbl9uYW1lKE9pZCByZWxpZCwgTGlzdCAq bmFtZXNwYWNlcyk7CiBzdGF0aWMgY2hhciAqZ2VuZXJhdGVfcXVhbGlmaWVkX3JlbGF0aW9uX25h bWUoT2lkIHJlbGlkKTsKLXN0YXRpYyBjaGFyICpnZW5lcmF0ZV9mdW5jdGlvbl9uYW1lKE9pZCBm dW5jaWQsIGludCBuYXJncywKLQkJCQkJCQkJCUxpc3QgKmFyZ25hbWVzLCBPaWQgKmFyZ3R5cGVz LAotCQkJCQkJCQkJYm9vbCBoYXNfdmFyaWFkaWMsIGJvb2wgKnVzZV92YXJpYWRpY19wLAotCQkJ CQkJCQkJUGFyc2VFeHByS2luZCBzcGVjaWFsX2V4cHJraW5kKTsKIHN0YXRpYyBjaGFyICpnZW5l cmF0ZV9vcGVyYXRvcl9uYW1lKE9pZCBvcGVyaWQsIE9pZCBhcmcxLCBPaWQgYXJnMik7CiBzdGF0 aWMgdm9pZCBhZGRfY2FzdF90byhTdHJpbmdJbmZvIGJ1ZiwgT2lkIHR5cGlkKTsKIHN0YXRpYyBj aGFyICpnZW5lcmF0ZV9xdWFsaWZpZWRfdHlwZV9uYW1lKE9pZCB0eXBpZCk7CiBzdGF0aWMgdGV4 dCAqc3RyaW5nX3RvX3RleHQoY2hhciAqc3RyKTsKLXN0YXRpYyBjaGFyICpmbGF0dGVuX3JlbG9w dGlvbnMoT2lkIHJlbGlkKTsKIHN0YXRpYyB2b2lkIGdldF9yZWxvcHRpb25zKFN0cmluZ0luZm8g YnVmLCBEYXR1bSByZWxvcHRpb25zKTsKIHN0YXRpYyB2b2lkIGdldF9qc29uX3BhdGhfc3BlYyhO b2RlICpwYXRoX3NwZWMsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkgICBib29s IHNob3dpbXBsaWNpdCk7CkBAIC0xMDI1LDY1ICsxMDE3LDEyIEBAIHBnX2dldF90cmlnZ2VyZGVm X3dvcmtlcihPaWQgdHJpZ2lkLCBib29sIHByZXR0eSkKIAlpZiAoIWlzbnVsbCkKIAl7CiAJCU5v ZGUJICAgKnF1YWw7Ci0JCWNoYXIJCXJlbGtpbmQ7Ci0JCWRlcGFyc2VfY29udGV4dCBjb250ZXh0 OwotCQlkZXBhcnNlX25hbWVzcGFjZSBkcG5zOwotCQlSYW5nZVRibEVudHJ5ICpvbGRydGU7Ci0J CVJhbmdlVGJsRW50cnkgKm5ld3J0ZTsKLQotCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZidWYs ICJXSEVOICgiKTsKKwkJY2hhciAgICAgICAqcXVhbHN0cjsKIAogCQlxdWFsID0gc3RyaW5nVG9O b2RlKFRleHREYXR1bUdldENTdHJpbmcodmFsdWUpKTsKKwkJcXVhbHN0ciA9IHBnX2dldF90cmln Z2VyX3doZW5jbGF1c2UodHJpZ3JlYywgcXVhbCwgcHJldHR5KTsKIAotCQlyZWxraW5kID0gZ2V0 X3JlbF9yZWxraW5kKHRyaWdyZWMtPnRncmVsaWQpOwotCi0JCS8qIEJ1aWxkIG1pbmltYWwgT0xE IGFuZCBORVcgUlRFcyBmb3IgdGhlIHJlbCAqLwotCQlvbGRydGUgPSBtYWtlTm9kZShSYW5nZVRi bEVudHJ5KTsKLQkJb2xkcnRlLT5ydGVraW5kID0gUlRFX1JFTEFUSU9OOwotCQlvbGRydGUtPnJl bGlkID0gdHJpZ3JlYy0+dGdyZWxpZDsKLQkJb2xkcnRlLT5yZWxraW5kID0gcmVsa2luZDsKLQkJ b2xkcnRlLT5yZWxsb2NrbW9kZSA9IEFjY2Vzc1NoYXJlTG9jazsKLQkJb2xkcnRlLT5hbGlhcyA9 IG1ha2VBbGlhcygib2xkIiwgTklMKTsKLQkJb2xkcnRlLT5lcmVmID0gb2xkcnRlLT5hbGlhczsK LQkJb2xkcnRlLT5sYXRlcmFsID0gZmFsc2U7Ci0JCW9sZHJ0ZS0+aW5oID0gZmFsc2U7Ci0JCW9s ZHJ0ZS0+aW5Gcm9tQ2wgPSB0cnVlOwotCi0JCW5ld3J0ZSA9IG1ha2VOb2RlKFJhbmdlVGJsRW50 cnkpOwotCQluZXdydGUtPnJ0ZWtpbmQgPSBSVEVfUkVMQVRJT047Ci0JCW5ld3J0ZS0+cmVsaWQg PSB0cmlncmVjLT50Z3JlbGlkOwotCQluZXdydGUtPnJlbGtpbmQgPSByZWxraW5kOwotCQluZXdy dGUtPnJlbGxvY2ttb2RlID0gQWNjZXNzU2hhcmVMb2NrOwotCQluZXdydGUtPmFsaWFzID0gbWFr ZUFsaWFzKCJuZXciLCBOSUwpOwotCQluZXdydGUtPmVyZWYgPSBuZXdydGUtPmFsaWFzOwotCQlu ZXdydGUtPmxhdGVyYWwgPSBmYWxzZTsKLQkJbmV3cnRlLT5pbmggPSBmYWxzZTsKLQkJbmV3cnRl LT5pbkZyb21DbCA9IHRydWU7Ci0KLQkJLyogQnVpbGQgdHdvLWVsZW1lbnQgcnRhYmxlICovCi0J CW1lbXNldCgmZHBucywgMCwgc2l6ZW9mKGRwbnMpKTsKLQkJZHBucy5ydGFibGUgPSBsaXN0X21h a2UyKG9sZHJ0ZSwgbmV3cnRlKTsKLQkJZHBucy5zdWJwbGFucyA9IE5JTDsKLQkJZHBucy5jdGVz ID0gTklMOwotCQlkcG5zLmFwcGVuZHJlbHMgPSBOVUxMOwotCQlzZXRfcnRhYmxlX25hbWVzKCZk cG5zLCBOSUwsIE5VTEwpOwotCQlzZXRfc2ltcGxlX2NvbHVtbl9uYW1lcygmZHBucyk7Ci0KLQkJ LyogU2V0IHVwIGNvbnRleHQgd2l0aCBvbmUtZGVlcCBuYW1lc3BhY2Ugc3RhY2sgKi8KLQkJY29u dGV4dC5idWYgPSAmYnVmOwotCQljb250ZXh0Lm5hbWVzcGFjZXMgPSBsaXN0X21ha2UxKCZkcG5z KTsKLQkJY29udGV4dC53aW5kb3dDbGF1c2UgPSBOSUw7Ci0JCWNvbnRleHQud2luZG93VExpc3Qg PSBOSUw7Ci0JCWNvbnRleHQudmFycHJlZml4ID0gdHJ1ZTsKLQkJY29udGV4dC5wcmV0dHlGbGFn cyA9IEdFVF9QUkVUVFlfRkxBR1MocHJldHR5KTsKLQkJY29udGV4dC53cmFwQ29sdW1uID0gV1JB UF9DT0xVTU5fREVGQVVMVDsKLQkJY29udGV4dC5pbmRlbnRMZXZlbCA9IFBSRVRUWUlOREVOVF9T VEQ7Ci0JCWNvbnRleHQuc3BlY2lhbF9leHBya2luZCA9IEVYUFJfS0lORF9OT05FOwotCQljb250 ZXh0LmFwcGVuZHBhcmVudHMgPSBOVUxMOwotCi0JCWdldF9ydWxlX2V4cHIocXVhbCwgJmNvbnRl eHQsIGZhbHNlKTsKLQotCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZidWYsICIpICIpOworCQlh cHBlbmRTdHJpbmdJbmZvKCZidWYsICJXSEVOICglcykgIiwgcXVhbHN0cik7CiAJfQogCiAJYXBw ZW5kU3RyaW5nSW5mbygmYnVmLCAiRVhFQ1VURSBGVU5DVElPTiAlcygiLApAQCAtMTEyNCw2ICsx MDYzLDY0IEBAIHBnX2dldF90cmlnZ2VyZGVmX3dvcmtlcihPaWQgdHJpZ2lkLCBib29sIHByZXR0 eSkKIAlyZXR1cm4gYnVmLmRhdGE7CiB9CiAKK2NoYXIgKgorcGdfZ2V0X3RyaWdnZXJfd2hlbmNs YXVzZShGb3JtX3BnX3RyaWdnZXIgdHJpZ3JlYywgTm9kZSAqd2hlbkNsYXVzZSwgYm9vbCBwcmV0 dHkpCit7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCWNoYXIgICAgICAgIHJlbGtpbmQ7CisJZGVw YXJzZV9jb250ZXh0IGNvbnRleHQ7CisJZGVwYXJzZV9uYW1lc3BhY2UgZHBuczsKKwlSYW5nZVRi bEVudHJ5ICpvbGRydGU7CisJUmFuZ2VUYmxFbnRyeSAqbmV3cnRlOworCisgICBpbml0U3RyaW5n SW5mbygmYnVmKTsKKworICAgcmVsa2luZCA9IGdldF9yZWxfcmVsa2luZCh0cmlncmVjLT50Z3Jl bGlkKTsKKworICAgLyogQnVpbGQgbWluaW1hbCBPTEQgYW5kIE5FVyBSVEVzIGZvciB0aGUgcmVs ICovCisgICBvbGRydGUgPSBtYWtlTm9kZShSYW5nZVRibEVudHJ5KTsKKyAgIG9sZHJ0ZS0+cnRl a2luZCA9IFJURV9SRUxBVElPTjsKKyAgIG9sZHJ0ZS0+cmVsaWQgPSB0cmlncmVjLT50Z3JlbGlk OworICAgb2xkcnRlLT5yZWxraW5kID0gcmVsa2luZDsKKyAgIG9sZHJ0ZS0+YWxpYXMgPSBtYWtl QWxpYXMoIm9sZCIsIE5JTCk7CisgICBvbGRydGUtPmVyZWYgPSBvbGRydGUtPmFsaWFzOworICAg b2xkcnRlLT5sYXRlcmFsID0gZmFsc2U7CisgICBvbGRydGUtPmluaCA9IGZhbHNlOworICAgb2xk cnRlLT5pbkZyb21DbCA9IHRydWU7CisKKyAgIG5ld3J0ZSA9IG1ha2VOb2RlKFJhbmdlVGJsRW50 cnkpOworICAgbmV3cnRlLT5ydGVraW5kID0gUlRFX1JFTEFUSU9OOworICAgbmV3cnRlLT5yZWxp ZCA9IHRyaWdyZWMtPnRncmVsaWQ7CisgICBuZXdydGUtPnJlbGtpbmQgPSByZWxraW5kOworICAg bmV3cnRlLT5hbGlhcyA9IG1ha2VBbGlhcygibmV3IiwgTklMKTsKKyAgIG5ld3J0ZS0+ZXJlZiA9 IG5ld3J0ZS0+YWxpYXM7CisgICBuZXdydGUtPmxhdGVyYWwgPSBmYWxzZTsKKyAgIG5ld3J0ZS0+ aW5oID0gZmFsc2U7CisgICBuZXdydGUtPmluRnJvbUNsID0gdHJ1ZTsKKworICAgLyogQnVpbGQg dHdvLWVsZW1lbnQgcnRhYmxlICovCisgICBtZW1zZXQoJmRwbnMsIDAsIHNpemVvZihkcG5zKSk7 CisgICBkcG5zLnJ0YWJsZSA9IGxpc3RfbWFrZTIob2xkcnRlLCBuZXdydGUpOworICAgZHBucy5j dGVzID0gTklMOworICAgc2V0X3J0YWJsZV9uYW1lcygmZHBucywgTklMLCBOVUxMKTsKKyAgIHNl dF9zaW1wbGVfY29sdW1uX25hbWVzKCZkcG5zKTsKKworICAgLyogU2V0IHVwIGNvbnRleHQgd2l0 aCBvbmUtZGVlcCBuYW1lc3BhY2Ugc3RhY2sgKi8KKyAgIGNvbnRleHQuYnVmID0gJmJ1ZjsKKyAg IGNvbnRleHQubmFtZXNwYWNlcyA9IGxpc3RfbWFrZTEoJmRwbnMpOworICAgY29udGV4dC53aW5k b3dDbGF1c2UgPSBOSUw7CisgICBjb250ZXh0LndpbmRvd1RMaXN0ID0gTklMOworICAgY29udGV4 dC52YXJwcmVmaXggPSB0cnVlOworICAgY29udGV4dC5wcmV0dHlGbGFncyA9IHByZXR0eSA/IFBS RVRUWUZMQUdfUEFSRU4gfCBQUkVUVFlGTEFHX0lOREVOVCA6IFBSRVRUWUZMQUdfSU5ERU5UOwor ICAgY29udGV4dC53cmFwQ29sdW1uID0gV1JBUF9DT0xVTU5fREVGQVVMVDsKKyAgIGNvbnRleHQu aW5kZW50TGV2ZWwgPSBQUkVUVFlJTkRFTlRfU1REOworICAgY29udGV4dC5zcGVjaWFsX2V4cHJr aW5kID0gRVhQUl9LSU5EX05PTkU7CisKKyAgIGdldF9ydWxlX2V4cHIod2hlbkNsYXVzZSwgJmNv bnRleHQsIGZhbHNlKTsKKworICAgcmV0dXJuIGJ1Zi5kYXRhOworfQorCiAvKiAtLS0tLS0tLS0t CiAgKiBwZ19nZXRfaW5kZXhkZWYJCQktIEdldCB0aGUgZGVmaW5pdGlvbiBvZiBhbiBpbmRleAog ICoKQEAgLTE4OTEsNiArMTg4OCwxMyBAQCBwZ19nZXRfcGFydGtleWRlZl9jb2x1bW5zKE9pZCBy ZWxpZCwgYm9vbCBwcmV0dHkpCiAJcmV0dXJuIHBnX2dldF9wYXJ0a2V5ZGVmX3dvcmtlcihyZWxp ZCwgcHJldHR5RmxhZ3MsIHRydWUsIGZhbHNlKTsKIH0KIAorLyogSW50ZXJuYWwgdmVyc2lvbiB0 aGF0IHJlcG9ydHMgdGhlIGZ1bGwgcGFydGl0aW9uIGtleSBkZWZpbml0aW9uICovCitjaGFyICoK K3BnX2dldF9wYXJ0a2V5ZGVmX3NpbXBsZShPaWQgcmVsaWQpCit7CisJcmV0dXJuIHBnX2dldF9w YXJ0a2V5ZGVmX3dvcmtlcihyZWxpZCwgMCwgZmFsc2UsIGZhbHNlKTsKK30KKwogLyoKICAqIElu dGVybmFsIHdvcmtob3JzZSB0byBkZWNvbXBpbGUgYSBwYXJ0aXRpb24ga2V5IGRlZmluaXRpb24u CiAgKi8KQEAgLTIxNDQsNiArMjE0OCwxNSBAQCBwZ19nZXRfY29uc3RyYWludGRlZl9leHQoUEdf RlVOQ1RJT05fQVJHUykKIH0KIAogLyoKKyAqIEludGVybmFsIHZlcnNpb24gdGhhdCByZXR1cm5z IGRlZmluaXRpb24gb2YgYSBDT05TVFJBSU5UIGNvbW1hbmQKKyAqLworY2hhciAqCitwZ19nZXRf Y29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBsZShPaWQgY29uc3RyYWludElkKQoreworCXJldHVy biBwZ19nZXRfY29uc3RyYWludGRlZl93b3JrZXIoY29uc3RyYWludElkLCBmYWxzZSwgMCwgZmFs c2UpOworfQorCisvKgogICogSW50ZXJuYWwgdmVyc2lvbiB0aGF0IHJldHVybnMgYSBmdWxsIEFM VEVSIFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVCBjb21tYW5kCiAgKi8KIGNoYXIgKgpAQCAtMzUx Myw3ICszNTI2LDcgQEAgcGdfZ2V0X2Z1bmN0aW9uX2FyZ19kZWZhdWx0KFBHX0ZVTkNUSU9OX0FS R1MpCiAJUEdfUkVUVVJOX1RFWFRfUChzdHJpbmdfdG9fdGV4dChzdHIpKTsKIH0KIAotc3RhdGlj IHZvaWQKK3ZvaWQKIHByaW50X2Z1bmN0aW9uX3NxbGJvZHkoU3RyaW5nSW5mbyBidWYsIEhlYXBU dXBsZSBwcm9jdHVwKQogewogCWludAkJCW51bWFyZ3M7CkBAIC0xMjA1Myw3ICsxMjA2Niw3IEBA IGdldF90YWJsZXNhbXBsZV9kZWYoVGFibGVTYW1wbGVDbGF1c2UgKnRhYmxlc2FtcGxlLCBkZXBh cnNlX2NvbnRleHQgKmNvbnRleHQpCiAgKiBhY3R1YWxfZGF0YXR5cGUuICAoSWYgeW91IGRvbid0 IHdhbnQgdGhpcyBiZWhhdmlvciwganVzdCBwYXNzCiAgKiBJbnZhbGlkT2lkIGZvciBhY3R1YWxf ZGF0YXR5cGUuKQogICovCi1zdGF0aWMgdm9pZAordm9pZAogZ2V0X29wY2xhc3NfbmFtZShPaWQg b3BjbGFzcywgT2lkIGFjdHVhbF9kYXRhdHlwZSwKIAkJCQkgU3RyaW5nSW5mbyBidWYpCiB7CkBA IC0xMjQ0Nyw3ICsxMjQ2MCw3IEBAIGdlbmVyYXRlX3F1YWxpZmllZF9yZWxhdGlvbl9uYW1lKE9p ZCByZWxpZCkKICAqCiAgKiBUaGUgcmVzdWx0IGluY2x1ZGVzIGFsbCBuZWNlc3NhcnkgcXVvdGlu ZyBhbmQgc2NoZW1hLXByZWZpeGluZy4KICAqLwotc3RhdGljIGNoYXIgKgorY2hhciAqCiBnZW5l cmF0ZV9mdW5jdGlvbl9uYW1lKE9pZCBmdW5jaWQsIGludCBuYXJncywgTGlzdCAqYXJnbmFtZXMs IE9pZCAqYXJndHlwZXMsCiAJCQkJCSAgIGJvb2wgaGFzX3ZhcmlhZGljLCBib29sICp1c2VfdmFy aWFkaWNfcCwKIAkJCQkJICAgUGFyc2VFeHByS2luZCBzcGVjaWFsX2V4cHJraW5kKQpAQCAtMTI4 MzMsNyArMTI4NDYsNyBAQCBnZXRfcmVsb3B0aW9ucyhTdHJpbmdJbmZvIGJ1ZiwgRGF0dW0gcmVs b3B0aW9ucykKIC8qCiAgKiBHZW5lcmF0ZSBhIEMgc3RyaW5nIHJlcHJlc2VudGluZyBhIHJlbGF0 aW9uJ3MgcmVsb3B0aW9ucywgb3IgTlVMTCBpZiBub25lLgogICovCi1zdGF0aWMgY2hhciAqCitj aGFyICoKIGZsYXR0ZW5fcmVsb3B0aW9ucyhPaWQgcmVsaWQpCiB7CiAJY2hhcgkgICAqcmVzdWx0 ID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IGJlNDc1ODMuLjNlN2YzNjQgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtMTE4OTQsNCArMTE4OTQsMTAgQEAKICAgcHJvcmV0 dHlwZSA9PiAnYnl0ZWEnLCBwcm9hcmd0eXBlcyA9PiAncGdfYnJpbl9taW5tYXhfbXVsdGlfc3Vt bWFyeScsCiAgIHByb3NyYyA9PiAnYnJpbl9taW5tYXhfbXVsdGlfc3VtbWFyeV9zZW5kJyB9LAog Cit7IG9pZCA9PiAnNDY0MicsIGRlc2NyID0+ICdkZXBhcnNlIHRoZSBEREwgY29tbWFuZCBpbnRv IGpzb24gZm9ybWF0IHN0cmluZycsCisgIHByb25hbWUgPT4gJ2RkbF9kZXBhcnNlX3RvX2pzb24n LCBwcm9yZXR0eXBlID0+ICd0ZXh0JywKKyAgcHJvYXJndHlwZXMgPT4gJ3BnX2RkbF9jb21tYW5k JywgcHJvc3JjID0+ICdkZGxfZGVwYXJzZV90b19qc29uJyB9LAoreyBvaWQgPT4gJzQ2NDMnLCBk ZXNjciA9PiAnZXhwYW5kIGpzb24gZm9ybWF0IERETCB0byBhIHBsYWluIERETCBjb21tYW5kJywK KyAgcHJvbmFtZSA9PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnLCBwcm9yZXR0eXBlID0+ ICd0ZXh0JywKKyAgcHJvYXJndHlwZXMgPT4gJ3RleHQnLCBwcm9zcmMgPT4gJ2RkbF9kZXBhcnNl X2V4cGFuZF9jb21tYW5kJyB9LAogXQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMv c2VxdWVuY2UuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKaW5kZXggZDM4YzBl Mi4uNGNhODRiMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaAor KysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCkBAIC01NCw2ICs1NCw3IEBAIHR5 cGVkZWYgc3RydWN0IHhsX3NlcV9yZWMKIGV4dGVybiBpbnQ2NCBuZXh0dmFsX2ludGVybmFsKE9p ZCByZWxpZCwgYm9vbCBjaGVja19wZXJtaXNzaW9ucyk7CiBleHRlcm4gRGF0dW0gbmV4dHZhbChQ R19GVU5DVElPTl9BUkdTKTsKIGV4dGVybiBMaXN0ICpzZXF1ZW5jZV9vcHRpb25zKE9pZCByZWxp ZCk7CitleHRlcm4gRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIGdldF9zZXF1ZW5jZV92YWx1ZXMoT2lk IHNlcXVlbmNlSWQpOwogCiBleHRlcm4gT2JqZWN0QWRkcmVzcyBEZWZpbmVTZXF1ZW5jZShQYXJz ZVN0YXRlICpwc3RhdGUsIENyZWF0ZVNlcVN0bXQgKnN0bXQpOwogZXh0ZXJuIE9iamVjdEFkZHJl c3MgQWx0ZXJTZXF1ZW5jZShQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyU2VxU3RtdCAqc3RtdCk7 CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmggYi9zcmMvaW5jbHVk ZS90Y29wL2RkbF9kZXBhcnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u YmRmZGY0NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2Uu aApAQCAtMCwwICsxLDIzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfZGVwYXJz ZS5oCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQs IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9pbmNs dWRlL3Rjb3AvZGRsX2RlcGFyc2UuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZu ZGVmIERETF9ERVBBUlNFX0gKKyNkZWZpbmUgRERMX0RFUEFSU0VfSAorCisjaW5jbHVkZSAidGNv cC9kZXBhcnNlX3V0aWxpdHkuaCIKKworZXh0ZXJuIGNoYXIgKmRlcGFyc2VfdXRpbGl0eV9jb21t YW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpOworZXh0ZXJuIGNo YXIgKmRkbF9kZXBhcnNlX2pzb25fdG9fc3RyaW5nKGNoYXIgKmpzb25iKTsKK2V4dGVybiBjaGFy ICpkZXBhcnNlX2Ryb3BfY29tbWFuZChjb25zdCBjaGFyICpvYmppZGVudGl0eSwgY29uc3QgY2hh ciAqb2JqZWN0dHlwZSwKKwkJCQkJCQkJICBEcm9wQmVoYXZpb3IgYmVoYXZpb3IpOworCisKKyNl bmRpZgkJLyogRERMX0RFUEFSU0VfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdGNvcC9k ZXBhcnNlX3V0aWxpdHkuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKaW5k ZXggOTRkZTEzZC4uYjUzMjk0YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNl X3V0aWxpdHkuaAorKysgYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCkBAIC02 Miw2ICs2Miw3IEBAIHR5cGVkZWYgc3RydWN0IENvbGxlY3RlZENvbW1hbmQKIAkJewogCQkJT2lk CQkJb2JqZWN0SWQ7CiAJCQlPaWQJCQljbGFzc0lkOworCQkJYm9vbAkJcmV3cml0ZTsKIAkJCUxp c3QJICAgKnN1YmNtZHM7CiAJCX0JCQlhbHRlclRhYmxlOwogCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS91dGlscy9idWlsdGlucy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaAppbmRl eCAyMjFjM2U2Li44MTNlYWZkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlu cy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgKQEAgLTExNCwxMCArMTE0LDEy IEBAIGV4dGVybiBEYXR1bSBudW1lcmljX2Zsb2F0OF9ub19vdmVyZmxvdyhQR19GVU5DVElPTl9B UkdTKTsKICNkZWZpbmUgRk9STUFUX1RZUEVfRk9SQ0VfUVVBTElGWQkweDA0CS8qIGZvcmNlIHF1 YWxpZmljYXRpb24gb2YgdHlwZSAqLwogI2RlZmluZSBGT1JNQVRfVFlQRV9JTlZBTElEX0FTX05V TEwJMHgwOAkvKiBOVUxMIGlmIHVuZGVmaW5lZCAqLwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBl X2V4dGVuZGVkKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCwgYml0czE2IGZsYWdzKTsKK2V4 dGVybiBjaGFyICpmb3JtYXRfcHJvY2VkdXJlX2FyZ3MoT2lkIHByb2NlZHVyZV9vaWQsIGJvb2wg Zm9yY2VfcXVhbGlmeSk7CiAKIGV4dGVybiBjaGFyICpmb3JtYXRfdHlwZV9iZShPaWQgdHlwZV9v aWQpOwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBlX2JlX3F1YWxpZmllZChPaWQgdHlwZV9vaWQp OwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBlX3dpdGhfdHlwZW1vZChPaWQgdHlwZV9vaWQsIGlu dDMyIHR5cGVtb2QpOworZXh0ZXJuIGNoYXIgKnByaW50VHlwbW9kKGNvbnN0IGNoYXIgKnR5cG5h bWUsIGludDMyIHR5cG1vZCwgT2lkIHR5cG1vZG91dCk7CiAKIGV4dGVybiBpbnQzMiB0eXBlX21h eGltdW1fc2l6ZShPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QpOwogCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGls cy5oCmluZGV4IDdkNDg5NzEuLjNkNjlhNjAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxz L3J1bGV1dGlscy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCkBAIC0xMyw2 ICsxMyw3IEBACiAjaWZuZGVmIFJVTEVVVElMU19ICiAjZGVmaW5lIFJVTEVVVElMU19ICiAKKyNp bmNsdWRlICJjYXRhbG9nL3BnX3RyaWdnZXIuaCIKICNpbmNsdWRlICJub2Rlcy9ub2Rlcy5oIgog I2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKICNpbmNsdWRlICJub2Rlcy9wZ19saXN0Lmgi CkBAIC0yMywxMiArMjQsMTYgQEAgc3RydWN0IFBsYW5uZWRTdG10OwogCiBleHRlcm4gY2hhciAq cGdfZ2V0X2luZGV4ZGVmX3N0cmluZyhPaWQgaW5kZXhyZWxpZCk7CiBleHRlcm4gY2hhciAqcGdf Z2V0X2luZGV4ZGVmX2NvbHVtbnMoT2lkIGluZGV4cmVsaWQsIGJvb2wgcHJldHR5KTsKK2V4dGVy biBjaGFyICpwZ19nZXRfdHJpZ2dlcl93aGVuY2xhdXNlKEZvcm1fcGdfdHJpZ2dlciB0cmlncmVj LAorCQkJCQkJCQkJICAgTm9kZSAqd2hlbkNsYXVzZSwgYm9vbCBwcmV0dHkpOwogZXh0ZXJuIGNo YXIgKnBnX2dldF9xdWVyeWRlZihRdWVyeSAqcXVlcnksIGJvb2wgcHJldHR5KTsKIAogZXh0ZXJu IGNoYXIgKnBnX2dldF9wYXJ0a2V5ZGVmX2NvbHVtbnMoT2lkIHJlbGlkLCBib29sIHByZXR0eSk7 CitleHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRrZXlkZWZfc2ltcGxlKE9pZCByZWxpZCk7CiBleHRl cm4gY2hhciAqcGdfZ2V0X3BhcnRjb25zdHJkZWZfc3RyaW5nKE9pZCBwYXJ0aXRpb25JZCwgY2hh ciAqYWxpYXNuYW1lKTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1h bmQoT2lkIGNvbnN0cmFpbnRJZCk7CitleHRlcm4gY2hhciAqcGdfZ2V0X2NvbnN0cmFpbnRkZWZf Y29tbWFuZF9zaW1wbGUoT2lkIGNvbnN0cmFpbnRJZCk7CiBleHRlcm4gY2hhciAqZGVwYXJzZV9l eHByZXNzaW9uKE5vZGUgKmV4cHIsIExpc3QgKmRwY29udGV4dCwKIAkJCQkJCQkJYm9vbCBmb3Jj ZXByZWZpeCwgYm9vbCBzaG93aW1wbGljaXQpOwogZXh0ZXJuIExpc3QgKmRlcGFyc2VfY29udGV4 dF9mb3IoY29uc3QgY2hhciAqYWxpYXNuYW1lLCBPaWQgcmVsaWQpOwpAQCAtNDAsOCArNDUsMTYg QEAgZXh0ZXJuIExpc3QgKnNlbGVjdF9ydGFibGVfbmFtZXNfZm9yX2V4cGxhaW4oTGlzdCAqcnRh YmxlLAogCQkJCQkJCQkJCQkgQml0bWFwc2V0ICpyZWxzX3VzZWQpOwogZXh0ZXJuIGNoYXIgKmdl bmVyYXRlX2NvbGxhdGlvbl9uYW1lKE9pZCBjb2xsaWQpOwogZXh0ZXJuIGNoYXIgKmdlbmVyYXRl X29wY2xhc3NfbmFtZShPaWQgb3BjbGFzcyk7CitleHRlcm4gY2hhciAqZ2VuZXJhdGVfZnVuY3Rp b25fbmFtZShPaWQgZnVuY2lkLCBpbnQgbmFyZ3MsIExpc3QgKmFyZ25hbWVzLAorCQkJCQkJCQkJ T2lkICphcmd0eXBlcywgYm9vbCBoYXNfdmFyaWFkaWMsCisJCQkJCQkJCQlib29sICp1c2VfdmFy aWFkaWNfcCwKKwkJCQkJCQkJCVBhcnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2luZCk7CiBleHRl cm4gY2hhciAqZ2V0X3JhbmdlX3BhcnRib3VuZF9zdHJpbmcoTGlzdCAqYm91bmRfZGF0dW1zKTsK K2V4dGVybiB2b2lkIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1YWxfZGF0 YXR5cGUsCisJCQkJCQkJICBTdHJpbmdJbmZvIGJ1Zik7CitleHRlcm4gY2hhciAqZmxhdHRlbl9y ZWxvcHRpb25zKE9pZCByZWxpZCk7CiAKIGV4dGVybiBjaGFyICpwZ19nZXRfc3RhdGlzdGljc29i amRlZl9zdHJpbmcoT2lkIHN0YXRleHRpZCk7CitleHRlcm4gdm9pZCBwcmludF9mdW5jdGlvbl9z cWxib2R5KFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7CiAKICNlbmRpZgkJCQkJ CQkvKiBSVUxFVVRJTFNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCAzNWM5ZjFl Li5jZDlkYWQxIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAor KysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTYyMSw2ICsxNjIxLDkg QEAgT1NJbmZvCiBPU1NMQ2lwaGVyCiBPU1NMRGlnZXN0CiBPVkVSTEFQUEVECitPYmpFbGVtCitP YmpUcmVlCitPYmpUeXBlCiBPYmplY3RBY2Nlc3NEcm9wCiBPYmplY3RBY2Nlc3NOYW1lc3BhY2VT ZWFyY2gKIE9iamVjdEFjY2Vzc1Bvc3RBbHRlcgpAQCAtMzE4OCw2ICszMTkxLDcgQEAgY29sb3Jt YXByYW5nZQogY29tcGFyZV9jb250ZXh0CiBjb25maWdfdmFyX3ZhbHVlCiBjb250YWluX2FnZ3Nf b2ZfbGV2ZWxfY29udGV4dAorY29udlNwZWNpZmllcgogY29udmVydF90ZXN0ZXhwcl9jb250ZXh0 CiBjb3B5X2RhdGFfc291cmNlX2NiCiBjb3JlX1lZU1RZUEUKLS0gCjEuOC4zLjEKCg== --000000000000f0bc1005e6210616--